@layoutit/polycss-vue 0.2.1 → 0.2.3

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/dist/index.js CHANGED
@@ -1,4 +1,4 @@
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=`
1
+ import{defineComponent as ha,h as Pa,provide as va,computed as xa}from"vue";import{ref as Kt,shallowRef as pa,watch as ya}from"vue";import{createIsometricCamera as fa,BASE_TILE as ga}from"@layoutit/polycss-core";function Zt(e){let t={cameraState:{...e}},n=new Set;function o(){for(let r of n)r()}return{getState(){return t},setState(r){t={...t,...r},o()},subscribe(r){return n.add(r),()=>n.delete(r)},updateCameraFromRef(r){return t={cameraState:{...r.state}},o(),!0},notifyAll(){o()}}}function ot(e){let t=fa({zoom:e.value.zoom,target:e.value.target,rotX:e.value.rotX,rotY:e.value.rotY,distance:e.value.distance}),n=pa(t),o=Kt(null),r=Kt(null),a=Kt([0,0,0]),i=Zt(t.state);ya(()=>({zoom:e.value.zoom,target:e.value.target,rotX:e.value.rotX,rotY:e.value.rotY,distance:e.value.distance}),(s,d)=>{let m={};s.zoom!==void 0&&s.zoom!==d?.zoom&&(m.zoom=s.zoom),s.target!==void 0&&s.target!==d?.target&&(m.target=s.target),s.rotX!==void 0&&s.rotX!==d?.rotX&&(m.rotX=s.rotX),s.rotY!==void 0&&s.rotY!==d?.rotY&&(m.rotY=s.rotY),s.distance!==void 0&&s.distance!==d?.distance&&(m.distance=s.distance),Object.keys(m).length>0&&(t.update(m),u(),i.updateCameraFromRef(t),i.notifyAll())});function u(){let s=o.value;if(!s)return;let d=t.state,m=ga,p=a.value,l=d.target[0]+p[0],h=d.target[1]+p[1],y=d.target[2]+p[2],P=h*m,v=l*m,E=y*m,M=d.zoom/m,A=d.distance!==0?`translateZ(${-d.distance}px) `:"";s.style.transform=`${A}scale(${M}) rotateX(${d.rotX}deg) rotate(${d.rotY}deg) translate3d(${-P}px, ${-v}px, ${-E}px)`}return{store:i,cameraRef:n,sceneElRef:o,cameraElRef:r,autoCenterOffset:a,applyTransformDirect:u}}var ue=Symbol("polycss-camera");var gt=ha({name:"PolyOrthographicCamera",props:{zoom:{type:Number},target:{type:Array},rotX:{type:Number},rotY:{type:Number},distance:{type:Number},class:{type:String}},setup(e,{slots:t}){let n=xa(()=>({zoom:e.zoom,target:e.target,rotX:e.rotX,rotY:e.rotY,distance:e.distance})),{store:o,cameraRef:r,sceneElRef:a,cameraElRef:i,autoCenterOffset:u,applyTransformDirect:s}=ot(n);return va(ue,{store:o,cameraRef:r,sceneElRef:a,cameraElRef:i,autoCenterOffset:u,applyTransformDirect:s}),()=>Pa("div",{ref:i,class:`polycss-camera${e.class?` ${e.class}`:""}`,style:{perspective:"1000000px"}},t.default?.())}});import{defineComponent as ba,h as Sa,provide as Ca,computed as Ma}from"vue";var Ea=32e3,zn=ba({name:"PolyPerspectiveCamera",props:{zoom:{type:Number},target:{type:Array},rotX:{type:Number},rotY:{type:Number},distance:{type:Number},perspective:{type:Number,default:void 0},class:{type:String}},setup(e,{slots:t}){let n=Ma(()=>({zoom:e.zoom,target:e.target,rotX:e.rotX,rotY:e.rotY,distance:e.distance})),{store:o,cameraRef:r,sceneElRef:a,cameraElRef:i,autoCenterOffset:u,applyTransformDirect:s}=ot(n);return Ca(ue,{store:o,cameraRef:r,sceneElRef:a,cameraElRef:i,autoCenterOffset:u,applyTransformDirect:s}),()=>{let d=`${typeof e.perspective=="number"?e.perspective:Ea}px`;return Sa("div",{ref:i,class:`polycss-camera${e.class?` ${e.class}`:""}`,style:{perspective:d}},t.default?.())}}});import{defineComponent as Ri,h as Oi,inject as Di,provide as ki,computed as xe,ref as Bt,watch as To,watchEffect as Ao,onMounted as wo,onUpdated as Ii,onBeforeUnmount as Fi}from"vue";import{DEFAULT_SEAM_BLEED as Lo,parseHexColor as Ro,worldDirectionToCss as Vi}from"@layoutit/polycss-core";import{computed as Ta}from"vue";import{buildSceneContext as Aa,mergePolygons as wa}from"@layoutit/polycss-core";function ht(e,t){return Ta(()=>{let{directionalLight:n}=t.value,o=Aa({polygons:e.value});return{polygons:wa(o.context.polygons),sceneBbox:o.context.sceneBbox}})}var Hn="polycss-styles";function Tt(e=typeof document<"u"?document:null){if(!e||e.getElementById(Hn))return;let t=e.createElement("style");t.id=Hn,t.textContent=La,e.head.appendChild(t)}var La=`
2
2
  /* \u2500\u2500 Scene container \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
3
3
 
4
4
  .polycss-scene,
@@ -27,19 +27,16 @@ import{defineComponent as Qr,h as Jr,provide as ea,computed as ta}from"vue";impo
27
27
 
28
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 */
29
29
 
30
+ /* Matches vanilla .polycss-camera: a simple positioned block that fills the
31
+ host. PolyPerspectiveCamera / PolyOrthographicCamera apply perspective
32
+ inline so the CSS file does not bake a default. */
30
33
  .polycss-camera {
31
- display: flex;
34
+ position: relative;
35
+ display: block;
32
36
  width: 100%;
33
- justify-content: center;
34
- align-items: center;
35
- perspective: 8000px;
36
- min-height: inherit;
37
37
  height: 100%;
38
- position: relative;
39
- overflow: hidden;
40
- contain: paint;
41
- isolation: isolate;
42
38
  }
39
+ /* Vue descendant default \u2014 keeps preserve-3d on controls + helpers. */
43
40
  .polycss-camera * {
44
41
  transform-style: preserve-3d;
45
42
  position: absolute;
@@ -61,6 +58,17 @@ import{defineComponent as Qr,h as Jr,provide as ea,computed as ta}from"vue";impo
61
58
  transform-style: preserve-3d !important;
62
59
  }
63
60
 
61
+ /* \u2500\u2500 Mesh wrapper \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\u2500\u2500\u2500 */
62
+
63
+ .polycss-mesh {
64
+ position: absolute;
65
+ transform-style: preserve-3d;
66
+ /* Pivot at wrapper local (0,0,0) for three.js mesh.position/rotation/scale
67
+ parity. Geometry is positioned by the parser (bbox-min-at-origin by
68
+ default, or pre-centered via loadMesh { center: true }). */
69
+ transform-origin: 0 0 0;
70
+ }
71
+
64
72
  /* \u2500\u2500 Polygon leaf element \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 */
65
73
 
66
74
  /*
@@ -146,19 +154,55 @@ import{defineComponent as Qr,h as Jr,provide as ea,computed as ta}from"vue";impo
146
154
  border-width: 0 16px 32px 16px;
147
155
  }
148
156
 
149
- .polycss-scene u.polycss-large-border-triangle {
150
- border-width: 0 48px 96px 48px;
157
+ @supports (corner-top-left-shape: bevel) and (corner-top-right-shape: bevel) {
158
+ .polycss-scene > u,
159
+ .polycss-mesh > u,
160
+ .polycss-bucket > u {
161
+ border-width: 0;
162
+ width: 32px;
163
+ height: 32px;
164
+ background-color: currentColor;
165
+ border-top-left-radius: 50% 100%;
166
+ border-top-right-radius: 50% 100%;
167
+ corner-top-left-shape: bevel;
168
+ corner-top-right-shape: bevel;
169
+ }
170
+
171
+ .polycss-scene > u.polycss-corner-shape-solid,
172
+ .polycss-mesh > u.polycss-corner-shape-solid,
173
+ .polycss-bucket > u.polycss-corner-shape-solid {
174
+ width: 16px;
175
+ height: 16px;
176
+ box-sizing: border-box;
177
+ border: 0;
178
+ background: currentColor;
179
+ border-radius: 0;
180
+ corner-top-left-shape: initial;
181
+ corner-top-right-shape: initial;
182
+ corner-bottom-right-shape: initial;
183
+ corner-bottom-left-shape: initial;
184
+ }
151
185
  }
152
186
 
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;
187
+ /* \u2500\u2500 Gizmo override \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\u2500 */
188
+
189
+ /*
190
+ * PolyTransformControls renders 3D arrows using the same polygon pipeline
191
+ * as user content, but the gizmo is a UI affordance \u2014 both faces of
192
+ * every polygon should remain visible regardless of which way the
193
+ * camera is looking. Otherwise the cuboid shafts and pyramid heads end
194
+ * up half-culled.
195
+ *
196
+ * Transitions on color, border-color, and background-color smooth the
197
+ * idle \u2192 hover \u2192 drag alpha changes across rect, border-shape, triangle,
198
+ * and atlas paths.
199
+ */
200
+ .polycss-transform-controls i,
201
+ .polycss-transform-controls b,
202
+ .polycss-transform-controls s,
203
+ .polycss-transform-controls u {
204
+ backface-visibility: visible;
205
+ transition: color 150ms ease-out, border-color 150ms ease-out, background-color 150ms ease-out;
162
206
  }
163
207
 
164
208
  /* \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 */
@@ -215,22 +259,33 @@ import{defineComponent as Qr,h as Jr,provide as ea,computed as ta}from"vue";impo
215
259
  here (not inline per polygon) so each leaf only carries its tiny normal
216
260
  declarations \u2014 ~12\xD7 smaller per-polygon style payload on big meshes. */
217
261
  .polycss-scene[data-polycss-lighting="dynamic"] s {
262
+ /*
263
+ * Three.js MeshLambertMaterial parity for textured surfaces. See
264
+ * packages/polycss/src/styles/styles.ts for derivation and probe data.
265
+ * Kept in lockstep across renderer copies per cross-package discipline.
266
+ */
218
267
  background-color: rgb(
219
- calc(255 * (var(--par) * var(--pai)
220
- + var(--plr) * var(--pli) * max(0,
221
- var(--pnx) * var(--plx) +
222
- var(--pny) * var(--ply) +
223
- var(--pnz) * var(--plz))))
224
- calc(255 * (var(--pag) * var(--pai)
225
- + var(--plg) * var(--pli) * max(0,
226
- var(--pnx) * var(--plx) +
227
- var(--pny) * var(--ply) +
228
- var(--pnz) * var(--plz))))
229
- calc(255 * (var(--pab) * var(--pai)
230
- + var(--plb) * var(--pli) * max(0,
231
- var(--pnx) * var(--plx) +
232
- var(--pny) * var(--ply) +
233
- var(--pnz) * var(--plz))))
268
+ calc(255 * max(0, 1.055 * pow(min(1, (
269
+ pow((var(--par) + 0.055) / 1.055, 2.4) * var(--pai) +
270
+ pow((var(--plr) + 0.055) / 1.055, 2.4) * var(--pli) * max(0,
271
+ var(--pnx) * var(--plx) +
272
+ var(--pny) * var(--ply) +
273
+ var(--pnz) * var(--plz))
274
+ ) / 3.14159265), 0.4167) - 0.055))
275
+ calc(255 * max(0, 1.055 * pow(min(1, (
276
+ pow((var(--pag) + 0.055) / 1.055, 2.4) * var(--pai) +
277
+ pow((var(--plg) + 0.055) / 1.055, 2.4) * var(--pli) * max(0,
278
+ var(--pnx) * var(--plx) +
279
+ var(--pny) * var(--ply) +
280
+ var(--pnz) * var(--plz))
281
+ ) / 3.14159265), 0.4167) - 0.055))
282
+ calc(255 * max(0, 1.055 * pow(min(1, (
283
+ pow((var(--pab) + 0.055) / 1.055, 2.4) * var(--pai) +
284
+ pow((var(--plb) + 0.055) / 1.055, 2.4) * var(--pli) * max(0,
285
+ var(--pnx) * var(--plx) +
286
+ var(--pny) * var(--ply) +
287
+ var(--pnz) * var(--plz))
288
+ ) / 3.14159265), 0.4167) - 0.055))
234
289
  );
235
290
  background-blend-mode: multiply;
236
291
  background-image: var(--polycss-atlas-url);
@@ -249,37 +304,50 @@ import{defineComponent as Qr,h as Jr,provide as ea,computed as ta}from"vue";impo
249
304
  }
250
305
 
251
306
  .polycss-scene[data-polycss-lighting="dynamic"] b,
307
+ .polycss-scene[data-polycss-lighting="dynamic"] i,
252
308
  .polycss-scene[data-polycss-lighting="dynamic"] u {
309
+ /*
310
+ * Three.js MeshLambertMaterial parity (default useLegacyLights=false,
311
+ * physically-correct pipeline). See packages/polycss/src/styles/styles.ts
312
+ * for the derivation and probe data \u2014 kept in lockstep across the three
313
+ * renderer copies per cross-package discipline.
314
+ */
253
315
  color: rgb(
254
- calc(255 * var(--psr) * (var(--par) * var(--pai)
255
- + var(--plr) * var(--pli) * max(0,
256
- var(--pnx) * var(--plx) +
257
- var(--pny) * var(--ply) +
258
- var(--pnz) * var(--plz))))
259
- calc(255 * var(--psg) * (var(--pag) * var(--pai)
260
- + var(--plg) * var(--pli) * max(0,
261
- var(--pnx) * var(--plx) +
262
- var(--pny) * var(--ply) +
263
- var(--pnz) * var(--plz))))
264
- calc(255 * var(--psb) * (var(--pab) * var(--pai)
265
- + var(--plb) * var(--pli) * max(0,
266
- var(--pnx) * var(--plx) +
267
- var(--pny) * var(--ply) +
268
- var(--pnz) * var(--plz))))
316
+ calc(255 * max(0, 1.055 * pow(min(1,
317
+ pow((var(--psr) + 0.055) / 1.055, 2.4) * (
318
+ pow((var(--par) + 0.055) / 1.055, 2.4) * var(--pai) +
319
+ pow((var(--plr) + 0.055) / 1.055, 2.4) * var(--pli) * max(0,
320
+ var(--pnx) * var(--plx) +
321
+ var(--pny) * var(--ply) +
322
+ var(--pnz) * var(--plz))
323
+ ) / 3.14159265
324
+ ), 0.4167) - 0.055))
325
+ calc(255 * max(0, 1.055 * pow(min(1,
326
+ pow((var(--psg) + 0.055) / 1.055, 2.4) * (
327
+ pow((var(--pag) + 0.055) / 1.055, 2.4) * var(--pai) +
328
+ pow((var(--plg) + 0.055) / 1.055, 2.4) * var(--pli) * max(0,
329
+ var(--pnx) * var(--plx) +
330
+ var(--pny) * var(--ply) +
331
+ var(--pnz) * var(--plz))
332
+ ) / 3.14159265
333
+ ), 0.4167) - 0.055))
334
+ calc(255 * max(0, 1.055 * pow(min(1,
335
+ pow((var(--psb) + 0.055) / 1.055, 2.4) * (
336
+ pow((var(--pab) + 0.055) / 1.055, 2.4) * var(--pai) +
337
+ pow((var(--plb) + 0.055) / 1.055, 2.4) * var(--pli) * max(0,
338
+ var(--pnx) * var(--plx) +
339
+ var(--pny) * var(--ply) +
340
+ var(--pnz) * var(--plz))
341
+ ) / 3.14159265
342
+ ), 0.4167) - 0.055))
269
343
  );
270
344
  }
271
345
 
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 */
273
-
274
- /* <q> \u2014 dedicated shadow leaf. Same border-shape rendering trick as <i>
275
- (border-color: currentColor fills the polygon outline) but with its
276
- own tag so we don't have to thread :not(.polycss-shadow) exclusions
277
- through every dynamic-mode color rule. backface-visibility must be
278
- visible because the projection matrix is near-rank-deficient and the
279
- resulting plane's normal can read as back-facing under some camera
280
- angles; the leaf is intentionally always painted. Strip the UA's
281
- default ::before/::after open-/close-quote so the element is just a
282
- styled box. */
346
+ /* \u2500\u2500 Retained <q> shadow projection (dynamic-mode CSS path) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
347
+
348
+ /* Reserved internal <q> shadow element rules. Current shadow emission uses SVG
349
+ surfaces; these rules keep any retained <q> markup styled as a plain
350
+ border-shape leaf instead of inheriting UA quote styling. */
283
351
  .polycss-scene q {
284
352
  position: absolute;
285
353
  display: block;
@@ -296,6 +364,7 @@ import{defineComponent as Qr,h as Jr,provide as ea,computed as ta}from"vue";impo
296
364
  backface-visibility: visible;
297
365
  border-color: currentColor;
298
366
  pointer-events: none;
367
+ will-change: transform;
299
368
  }
300
369
  .polycss-scene q::before,
301
370
  .polycss-scene q::after {
@@ -327,8 +396,9 @@ import{defineComponent as Qr,h as Jr,provide as ea,computed as ta}from"vue";impo
327
396
  transparent var(--ring-outer-r));
328
397
  }
329
398
 
330
- /* Shadow projection matrix. Projects any 3D point P onto the horizontal
331
- ground plane (cssZ \u2248 G) along the CSS-space light direction (--clx/y/z).
399
+ /* Projection matrix for retained internal <q> shadow leaves. Projects any
400
+ 3D point P onto the horizontal ground plane (cssZ \u2248 G) along the CSS-space
401
+ light direction (--clx/y/z).
332
402
 
333
403
  The strict projection would set m22=0 (output.z is a constant G, flat).
334
404
  Chromium SKIPS rendering elements whose composed transform is singular.
@@ -350,13 +420,10 @@ import{defineComponent as Qr,h as Jr,provide as ea,computed as ta}from"vue";impo
350
420
  );
351
421
  }
352
422
 
353
- /* <q> shadow leaf \u2014 Lambert-gated opacity. Polygons facing the light cast
354
- full shadow; polygons facing away cast zero shadow. The * 10 multiplier
355
- sharpens the cutoff so small positive Lambert values jump quickly to 1,
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. */
423
+ /* Retained <q> opacity gate. Polygons facing the light cast full shadow;
424
+ polygons facing away cast zero shadow. The * 10 multiplier sharpens the
425
+ cutoff so small positive Lambert values jump quickly to 1. */
359
426
  .polycss-scene[data-polycss-lighting="dynamic"] q {
360
427
  opacity: clamp(0, calc((var(--pnx) * var(--clx) + var(--pny) * var(--cly) + var(--pnz) * var(--clz)) * 10), 1);
361
428
  }
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};
429
+ `;import{parsePureColor as fc}from"@layoutit/polycss-core";import{inject as Ra}from"vue";var Qt=Symbol("polycss/scene-context");function Nn(){return Ra(Qt,null)}import{isSolidTrianglePlan as it,isProjectiveQuadPlan as st,buildTextureEdgeRepairSets as Vt,buildSeamBleedPolygonEdges as _t,buildSeamBleedPolygonSet as pd,cssBorderShapeForPlan as yd}from"@layoutit/polycss-core";import{getSolidPaintDefaultsForPlansCore as Oa,safariCssProjectiveUnsupported as Yn,parseHex as Da,rgbKey as ka}from"@layoutit/polycss-core";function Jt(e){if(!!!(e.defaultView?.CSS??(typeof CSS<"u"?CSS:void 0))?.supports?.("border-shape","polygon(0 0, 100% 0, 0 100%) circle(0)"))return!1;let r=(e.defaultView??(typeof window<"u"?window:void 0))?.matchMedia;return r?r("(pointer: fine)").matches&&r("(hover: hover)").matches:!0}function en(e){if(jn(e))return!0;let n=(e.defaultView??(typeof window<"u"?window:void 0))?.navigator?.userAgent??"";return n?!Yn(n):!0}function At(e){let t=e.defaultView?.CSS??(typeof CSS<"u"?CSS:void 0);return!!t?.supports?.("corner-top-left-shape","bevel")&&!!t.supports("corner-top-right-shape","bevel")&&!!t.supports("corner-bottom-right-shape","bevel")&&!!t.supports("corner-bottom-left-shape","bevel")}function jn(e){let t=e.defaultView?.CSS??(typeof CSS<"u"?CSS:void 0);return!!t?.supports?.("corner-top-left-shape","bevel")&&!!t.supports("corner-top-right-shape","bevel")}function rt(e){let n=(e.defaultView??(typeof window<"u"?window:void 0))?.navigator?.userAgent??"";return n?!Yn(n):!0}function $n(e,t,n,o,r){let a=new Set(o?.disable??[]);return Oa(e,t,a,{solidTriangleSupported:en(n),projectiveQuadSupported:rt(n),cornerShapeSupported:At(n),borderShapeSupported:Jt(n)},Da,ka,r)}function tn(e,t,n=new Set,o){let r=o??(typeof document<"u"?document:null);if(!r)return{};let a=n.size>0?{disable:Array.from(n)}:void 0;return $n(e,t,r,a)}function je(e){let t=e??(typeof document<"u"?document:null);if(!t){if(!!!(typeof CSS<"u"?CSS:void 0)?.supports?.("border-shape","polygon(0 0, 100% 0, 0 100%) circle(0)"))return!1;let r=typeof matchMedia<"u"?matchMedia:void 0;return r?r("(pointer: fine)").matches&&r("(hover: hover)").matches:!0}return Jt(t)}function $e(e){let t=e??(typeof document<"u"?document:null);if(!t){let n=typeof CSS<"u"?CSS:void 0;if(n?.supports?.("corner-top-left-shape","bevel")&&n.supports("corner-top-right-shape","bevel"))return!0;let o=(typeof navigator<"u"?navigator:globalThis.navigator)?.userAgent??"";if(!o)return!0;let r=/\b(?:Chrome|HeadlessChrome|Chromium|Edg|OPR)\//.test(o);return!/\bVersion\/[\d.]+.*\bSafari\//.test(o)||r}return en(t)}import{filterAtlasPlans as Ia}from"@layoutit/polycss-core";function nn(e,t,n,o){let r=o??(typeof document<"u"?document:null);return Ia(e,t,n,{solidTriangleSupported:$e(o),projectiveQuadSupported:o?rt(o):!0,borderShapeSupported:je(o),cornerShapeSupported:r?At(r):!1})}import{packTextureAtlasPlansWithScaleCore as Fa}from"@layoutit/polycss-core";function Xn(e){if(!e)return!1;let n=(e.defaultView??(typeof window<"u"?window:void 0))?.matchMedia;return n?n("(pointer: coarse)").matches||n("(hover: none)").matches:!1}function on(e,t,n){return Fa(e,t,Xn(n))}import{expandClipPoints as Va,TEXTURE_TRIANGLE_BLEED as _a,TEXTURE_EDGE_REPAIR_ALPHA_MIN as Ba,TEXTURE_EDGE_REPAIR_SOURCE_ALPHA_MIN as za,TEXTURE_EDGE_REPAIR_RADIUS as Un}from"@layoutit/polycss-core";var Xe=new Map;function Kn(e){let t=Xe.get(e);return t||(t=new Promise((n,o)=>{let r=new Image;r.decoding="async",r.crossOrigin="anonymous",r.onload=()=>n(r),r.onerror=()=>o(new Error(`texture load failed: ${e}`)),r.src=e}),Xe.set(e,t),t.then(()=>{Xe.get(e)===t&&Xe.delete(e)},()=>{Xe.get(e)===t&&Xe.delete(e)})),t}function ye(e,t,n=1,o=0,r=0,a=1,i=0,u=0){e.setTransform(n*t,o*t,r*t,a*t,i*t,u*t)}function rn(e){let t=e/255;return t<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function an(e){let t=e<=.0031308?e*12.92:1.055*Math.pow(e,.4166666666666667)-.055;return Math.max(0,Math.min(255,Math.round(t*255)))}function Qn(e,t,n,o,r,a,i){let u=Math.round(t*i),s=Math.round(n*i),d=Math.max(1,Math.round(o*i)),m=Math.max(1,Math.round(r*i)),p=e.getImageData(u,s,d,m),l=p.data,h=a.r,y=a.g,P=a.b;for(let v=0;v<l.length;v+=4)l[v+3]!==0&&(l[v]=an(rn(l[v])*h),l[v+1]=an(rn(l[v+1])*y),l[v+2]=an(rn(l[v+2])*P));e.putImageData(p,u,s)}function Jn(e,t,n,o,r,a,i){let u=t.naturalWidth||t.width||1,s=t.naturalHeight||t.height||1,d=Math.max(r/u,a/s),m=u*d,p=s*d;ye(e,i),e.drawImage(t,n+(r-m)/2,o+(a-p)/2,m,p)}function at(e,t){return Math.max(0,Math.min(t,e))}function sn(e,t,n,o,r,a,i,u){let s=t.naturalWidth||t.width||1,d=t.naturalHeight||t.height||1,m=at(Math.min(n.minU,n.maxU)*s,s),p=at(Math.max(n.minU,n.maxU)*s,s),l=at(Math.min(n.minV,n.maxV)*d,d),h=at(Math.max(n.minV,n.maxV)*d,d),y=Math.floor(m),P=Math.floor(l),v=Math.ceil(p)-y,E=Math.ceil(h)-P;v<1&&(y=Math.floor(at((n.minU+n.maxU)/2*s,s-1)),v=1),E<1&&(P=Math.floor(at((n.minV+n.maxV)/2*d,d-1)),E=1),y=Math.max(0,Math.min(s-1,y)),P=Math.max(0,Math.min(d-1,P)),v=Math.max(1,Math.min(s-y,v)),E=Math.max(1,Math.min(d-P,E)),ye(e,u),e.drawImage(t,y,P,v,E,o,r,a,i)}function eo(e){return e==="repeat"||e==="mirrored-repeat"}function Wn(e,t){return eo(e)?Math.floor(t):0}function qn(e,t){return eo(e)?Math.ceil(t)-1:0}function Gn(e,t){return e==="mirrored-repeat"&&Math.abs(t%2)===1}function Zn(e,t,n,o,r,a,i){let u=r?Wn(a,r.minU):0,s=r?qn(a,r.maxU):0,d=r?Wn(i,r.minV):0,m=r?qn(i,r.maxV):0;for(let p=u;p<=s;p++)for(let l=d;l<=m;l++){let h=Gn(a,p),y=Gn(i,l);if(!h&&!y){e.drawImage(t,p*n,l*o);continue}e.save(),e.translate((h?p+1:p)*n,(y?l+1:l)*o),e.scale(h?-1:1,y?-1:1),e.drawImage(t,0,0),e.restore()}}function Lt(e,t,n,o){for(let r=0;r<o.length;r+=2){let a=t+o[r],i=n+o[r+1];r===0?e.moveTo(a,i):e.lineTo(a,i)}e.closePath()}function Pt(e,t,n,o,r,a){for(let i=0;i<o.length;i+=2){let u=t+o[i]+r,s=n+o[i+1]+a;i===0?e.moveTo(u,s):e.lineTo(u,s)}e.closePath()}function to(e,t,n,o){ye(e,o),e.beginPath(),Lt(e,t.x,t.y,t.screenPts),e.clip(),ye(e,o),e.fillStyle=n==="dynamic"?t.polygon.color??"#cccccc":t.shadedColor,e.fillRect(t.x,t.y,t.canvasW,t.canvasH)}function wt(e,t,n,o,r){t.polygon.textureAlphaMode==="opaque"&&(ye(e,n),e.fillStyle=t.polygon.color??"#cccccc",e.fillRect(t.x+o,t.y+r,t.canvasW,t.canvasH))}function no(e,t,n,o,r=0,a=0){if(t.textureTriangles?.length){let i=n.naturalWidth||n.width||1,u=n.naturalHeight||n.height||1;for(let s of t.textureTriangles){let d=Va(s.screenPts,_a);e.save(),ye(e,o),e.beginPath(),Pt(e,t.x,t.y,d,r,a),e.clip(),wt(e,t,o,r,a),s.uvAffine?(ye(e,o,s.uvAffine.a/i,s.uvAffine.c/i,s.uvAffine.b/u,s.uvAffine.d/u,t.x+s.uvAffine.e+r,t.y+s.uvAffine.f+a),Zn(e,n,i,u,s.uvSampleRect,t.polygon.textureWrap?.s,t.polygon.textureWrap?.t)):s.uvSampleRect&&sn(e,n,s.uvSampleRect,t.x+r,t.y+a,t.canvasW,t.canvasH,o),e.restore()}}else if(t.uvAffine){let i=n.naturalWidth||n.width||1,u=n.naturalHeight||n.height||1,s=t.polygon.textureAlphaMode==="opaque";s&&(e.save(),ye(e,o),e.beginPath(),Pt(e,t.x,t.y,t.screenPts,r,a),e.clip(),wt(e,t,o,r,a)),ye(e,o,t.uvAffine.a/i,t.uvAffine.c/i,t.uvAffine.b/u,t.uvAffine.d/u,t.x+t.uvAffine.e+r,t.y+t.uvAffine.f+a),Zn(e,n,i,u,t.uvSampleRect,t.polygon.textureWrap?.s,t.polygon.textureWrap?.t),s&&e.restore()}else if(t.uvSampleRect){let i=t.polygon.textureAlphaMode==="opaque";i&&(e.save(),ye(e,o),e.beginPath(),Pt(e,t.x,t.y,t.screenPts,r,a),e.clip(),wt(e,t,o,r,a)),sn(e,n,t.uvSampleRect,t.x+r,t.y+a,t.canvasW,t.canvasH,o),i&&e.restore()}else{let i=t.polygon.textureAlphaMode==="opaque";i&&(e.save(),ye(e,o),e.beginPath(),Pt(e,t.x,t.y,t.screenPts,r,a),e.clip(),wt(e,t,o,r,a)),Jn(e,n,t.x+r,t.y+a,t.canvasW,t.canvasH,o),i&&e.restore()}}function Ha(e,t,n,o,r,a){let i=r-n,u=a-o,s=i*i+u*u;if(s<=1e-9)return Math.hypot(e-n,t-o);let d=Math.max(0,Math.min(1,((e-n)*i+(t-o)*u)/s));return Math.hypot(e-(n+i*d),t-(o+u*d))}function Na(e,t,n,o){let r=1/0,a=n.length/2;for(let i of o){if(i<0||i>=a)continue;let u=i*2,s=(i+1)%a*2;r=Math.min(r,Ha(e,t,n[u],n[u+1],n[s],n[s+1]))}return r}function Ya(e,t,n,o,r,a){let i=Math.max(0,o-a),u=Math.min(t-1,o+a),s=Math.max(0,r-a),d=Math.min(n-1,r+a),m=null,p=1/0;for(let l=s;l<=d;l++)for(let h=i;h<=u;h++){if(h===o&&l===r)continue;let y=h-o,P=l-r,v=y*y+P*P;if(v>a*a||v>=p)continue;let E=(l*t+h)*4;e[E+3]<za||(m=E,p=v)}return m}function oo(e,t,n){if(!t.textureEdgeRepair||!t.texture||!t.textureEdgeRepairEdges||t.textureEdgeRepairEdges.size===0)return;let o=e.canvas;if(!o)return;let r=Math.max(0,Math.floor(t.x*n)),a=Math.max(0,Math.floor(t.y*n)),i=Math.max(1,Math.min(o.width-r,Math.ceil(t.canvasW*n))),u=Math.max(1,Math.min(o.height-a,Math.ceil(t.canvasH*n)));if(i<=0||u<=0)return;let s;try{s=e.getImageData(r,a,i,u)}catch{return}let d=s.data,m=new Uint8ClampedArray(d),p=Math.max(Un,Un/n),l=Math.max(2,Math.ceil(p*n)+1),h=!1;for(let y=0;y<u;y++)for(let P=0;P<i;P++){let v=(y*i+P)*4,E=d[v+3];if(E<Ba||E===255)continue;let M=(r+P+.5)/n-t.x,A=(a+y+.5)/n-t.y;if(Na(M,A,t.screenPts,t.textureEdgeRepairEdges)>p)continue;let g=Ya(m,i,u,P,y,l);g!==null&&(d[v]=m[g],d[v+1]=m[g+1],d[v+2]=m[g+2],d[v+3]=255,h=!0)}h&&e.putImageData(s,r,a)}function ro(e){if(typeof e.toBlob=="function")return new Promise(t=>{e.toBlob(n=>{t(n?URL.createObjectURL(n):null)},"image/png")});try{return Promise.resolve(e.toDataURL("image/png"))}catch{return Promise.resolve(null)}}async function ja(e,t,n,o){let r=n.createElement("canvas");r.width=Math.max(1,Math.ceil(e.width*o)),r.height=Math.max(1,Math.ceil(e.height*o));let a=e.entries.some(m=>m.textureEdgeRepair&&m.texture&&m.textureEdgeRepairEdges&&m.textureEdgeRepairEdges.size>0),i=r.getContext("2d",a?{willReadFrequently:!0}:void 0);if(!i)return{width:e.width,height:e.height,url:null};let u=Array.from(new Set(e.entries.flatMap(m=>m.texture?[m.texture]:[]))),s=new Map;await Promise.all(u.map(async m=>{s.set(m,await Kn(m))}));for(let m of e.entries){let p=m.texture?s.get(m.texture):null;if(!m.texture){i.save(),to(i,m,t,o),i.restore();continue}p&&(i.save(),ye(i,o),i.beginPath(),Lt(i,m.x,m.y,m.screenPts),i.clip(),no(i,m,p,o),i.restore()),m.texture&&t==="baked"&&(i.save(),ye(i,o),i.beginPath(),Lt(i,m.x,m.y,m.screenPts),i.clip(),Qn(i,m.x,m.y,m.canvasW,m.canvasH,m.textureTint,o),i.restore()),oo(i,m,o)}let d=await ro(r);return r.width=1,r.height=1,{width:e.width,height:e.height,url:d}}async function Rt(e,t,n,o,r){let a=[];for(let i of e){if(r())break;a.push(await ja(i,t,n,o))}return a}import{isSolidTrianglePlan as $a,offsetConvexPolygonPointsByEdgeAmounts as Xa,parsePureColor as un,resolveSeamBleed as so,safePlanSeamBleedAmount as Ua}from"@layoutit/polycss-core";var lo=50,uo=[.4,-.7,.59],co="#ffffff",mo=1,po="#ffffff",yo=.4,K=1e-9,vt=.75,fo=32,Wa=96,cn="0 48px 96px 48px",ao,io=fo;function qa(){let e=typeof CSS<"u"?CSS:void 0;return!!e?.supports?.("corner-top-left-shape","bevel")&&!!e.supports("corner-top-right-shape","bevel")}function dn(){if(qa())return"corner-bevel";let e=typeof navigator<"u"?navigator.userAgent:"";return/\bFirefox\//.test(e)?"border-large":"border"}function mn(){let e=typeof navigator<"u"?navigator.userAgent:"";return e!==ao&&(ao=e,io=/\bFirefox\//.test(e)?Wa:fo),io}function go(){return dn()==="border-large"?cn:void 0}function Ga(){let e=dn();if(e==="corner-bevel")return;let t=e==="border-large"?cn:void 0;return t?{borderWidth:t}:void 0}function ho(e){let t=dn();t==="corner-bevel"?(e.style.width="",e.style.height="",e.style.backgroundColor="",e.style.borderWidth="",e.style.borderTopLeftRadius="",e.style.borderTopRightRadius="",e.style.removeProperty("corner-top-left-shape"),e.style.removeProperty("corner-top-right-shape")):(e.style.width="",e.style.height="",e.style.backgroundColor="",e.style.borderTopLeftRadius="",e.style.borderTopRightRadius="",e.style.removeProperty("corner-top-left-shape"),e.style.removeProperty("corner-top-right-shape"),e.style.borderWidth=t==="border-large"?cn:"")}function Re(e){let t=un(e);return t?{r:t.rgb[0],g:t.rgb[1],b:t.rgb[2]}:{r:255,g:255,b:255}}function xt({r:e,g:t,b:n}){return`${e},${t},${n}`}function Za(e){return un(e)?.alpha??1}function Dt({r:e,g:t,b:n}){let o=r=>Math.round(Math.max(0,Math.min(255,r))).toString(16).padStart(2,"0");return`#${o(e)}${o(t)}${o(n)}`}function Po(e,t,n,o,r){let a=Re(e),i=Re(n),u=Re(o),s=u.r/255*r+i.r/255*t,d=u.g/255*r+i.g/255*t,m=u.b/255*r+i.b/255*t,p=Math.max(0,Math.min(255,Math.round(a.r*s))),l=Math.max(0,Math.min(255,Math.round(a.g*d))),h=Math.max(0,Math.min(255,Math.round(a.b*m))),y=Za(e);return y<1?`rgba(${p}, ${l}, ${h}, ${y})`:Dt({r:p,g:l,b:h})}function vo(e,t){if(!Number.isFinite(t)||t<=1)return e;let n=un(e);if(!n)return e;let o=255/Math.max(1,Math.round(t)-1),r=i=>Math.max(0,Math.min(255,Math.round(Math.round(i/o)*o))),a={r:r(n.rgb[0]),g:r(n.rgb[1]),b:r(n.rgb[2])};return n.alpha<1?`rgba(${a.r}, ${a.g}, ${a.b}, ${n.alpha})`:Dt(a)}function xo(e,t,n){let o=(r,a)=>{if(r===a)return r;let i=a-r;return r+Math.sign(i)*Math.min(Math.abs(i),n)};return{r:o(e.r,t.r),g:o(e.g,t.g),b:o(e.b,t.b)}}function ln(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function Ka(e,t){return[e[1]*t[2]-e[2]*t[1],e[2]*t[0]-e[0]*t[2],e[0]*t[1]-e[1]*t[0]]}function Qa(e){if(e.length<3)return null;let t=e[0],n=[0,0,0];for(let r=1;r+1<e.length;r++){let a=e[r],i=e[r+1],u=[a[0]-t[0],a[1]-t[1],a[2]-t[2]],s=[i[0]-t[0],i[1]-t[1],i[2]-t[2]];n[0]-=u[1]*s[2]-u[2]*s[1],n[1]-=u[2]*s[0]-u[0]*s[2],n[2]-=u[0]*s[1]-u[1]*s[0]}let o=Math.hypot(n[0],n[1],n[2]);return o<=K?null:[n[0]/o,n[1]/o,n[2]/o]}function Ja(e){if(e.length<3)return!1;let t=0;for(let n=0;n<e.length;n++){let o=e[n],r=e[(n+1)%e.length],a=e[(n+2)%e.length],i=(r[0]-o[0])*(a[1]-r[1])-(r[1]-o[1])*(a[0]-r[0]);if(Math.abs(i)<=K)return!1;let u=Math.sign(i);if(t===0)t=u;else if(u!==t)return!1}return!0}function ei(e){let t=0;for(let n=0;n<e.length;n++){let o=e[n],r=e[(n+1)%e.length];t+=o[0]*r[1]-o[1]*r[0]}return t/2}function ti(e,t,n,o){let r=t[0]-e[0],a=t[1]-e[1],i=o[0]-n[0],u=o[1]-n[1],s=r*u-a*i;if(Math.abs(s)<=K)return null;let d=n[0]-e[0],m=n[1]-e[1],p=(d*u-m*i)/s;return[e[0]+p*r,e[1]+p*a]}function Ot(e,t){if(e.length<6||t<=0)return e;let n=0,o=0,r=e.length/2;for(let i=0;i<e.length;i+=2)n+=e[i],o+=e[i+1];n/=r,o/=r;let a=e.slice();for(let i=0;i<a.length;i+=2){let u=a[i]-n,s=a[i+1]-o,d=Math.hypot(u,s);d<=K||(a[i]+=u/d*t,a[i+1]+=s/d*t)}return a}function Ue(e,t){if(e.length<6||e.length%2!==0||t<=0)return e;let n=[];for(let s=0;s<e.length;s+=2)n.push([e[s],e[s+1]]);if(!Ja(n))return Ot(e,t);let o=ei(n);if(Math.abs(o)<=K)return Ot(e,t);let r=o>0?1:-1,a=[];for(let s=0;s<n.length;s++){let d=n[s],m=n[(s+1)%n.length],p=m[0]-d[0],l=m[1]-d[1],h=Math.hypot(p,l);if(h<=K)return Ot(e,t);let y=r*(l/h)*t,P=r*(-p/h)*t;a.push({a:[d[0]+y,d[1]+P],b:[m[0]+y,m[1]+P]})}let i=[],u=Math.max(2,t*4);for(let s=0;s<n.length;s++){let d=a[(s+n.length-1)%n.length],m=a[s],p=ti(d.a,d.b,m.a,m.b);if(!p)return Ot(e,t);let l=n[s],h=p[0]-l[0],y=p[1]-l[1],P=Math.hypot(h,y);P>u?i.push(l[0]+h/P*u,l[1]+y/P*u):i.push(p[0],p[1])}return i}function ni(e,t,n,o){let r=e+t;if(o<=0||n<=K||r<=K||!Number.isFinite(e+t+n+o))return Ue([e,0,0,n,r,n],o);let a=Math.sqrt(e*e+n*n),i=Math.sqrt(t*t+n*n);if(a<=K||i<=K)return Ue([e,0,0,n,r,n],o);let u=-o*n/a,s=-o*e/a,d=o*n/i,m=-o*t/i,p=e+u,l=s,h=r+d,y=n+m,P=-n*r;if(Math.abs(P)<=K)return Ue([e,0,0,n,r,n],o);let v=p-h,E=l-y,M=(v*n+E*e)/P,A=h-M*t,g=y-M*n,L=-o*(e+a)/n,T=n+o,_=r+o*(t+i)/n,D=T,R=Math.max(2,o*4),N=A-e,Y=g,H=Math.sqrt(N*N+Y*Y);H>R&&(A=e+N/H*R,g=Y/H*R);let b=Math.sqrt(L*L+o*o);b>R&&(L=L/b*R,T=n+o/b*R);let c=_-r,f=Math.sqrt(c*c+o*o);return f>R&&(_=r+c/f*R,D=n+o/f*R),[A,g,L,T,_,D]}function oi(e,t){if((e+1)%3===t)return e;if((t+1)%3===e)return t}function ri(e,t,n,o,r){let a=e.seamBleedEdges;if(!a?.size)return null;let i=e.seamBleed===void 0?vt:e.seamBleed;return[[o,t],[t,n],[n,o]].map(([s,d],m)=>{let p=oi(s,d),l=p!==void 0&&a.has(p)?e.seamBleedEdgeAmounts?.get(p)??so(i,vt):0;return Ua(r,m,l)})}function bo(e,t,n,o,r,a,i,u,s,d,m,p){let l=Math.round(e*1e3)/1e3||0,h=Math.round(t*1e3)/1e3||0,y=Math.round(n*1e3)/1e3||0,P=Math.round(o*1e3)/1e3||0,v=Math.round(r*1e3)/1e3||0,E=Math.round(a*1e3)/1e3||0,M=Math.round(i*1e3)/1e3||0,A=Math.round(u*1e3)/1e3||0,g=Math.round(s*1e3)/1e3||0,L=Math.round(d*1e3)/1e3||0,T=Math.round(m*1e3)/1e3||0,_=Math.round(p*1e3)/1e3||0;return`matrix3d(${l},${h},${y},0,${P},${v},${E},0,${M},${A},${g},0,${L},${T},${_},1)`}function ai(e,t,n){return e.map(o=>[o[1]*t,o[0]*t,o[2]*n])}function pn(e,t,n,o){if(!$a(e))return null;let r=e.tileSize,a=e.layerElevation,i=ai(e.polygon.vertices,r,a),u=Qa(i);if(!u)return null;let s=[{a:0,b:1,c:2},{a:1,b:2,c:0},{a:2,b:0,c:1}].map(V=>{let X=i[V.a],G=i[V.b];return{...V,length:Math.hypot(G[0]-X[0],G[1]-X[1],G[2]-X[2])}}).sort((V,X)=>X.length-V.length),d=s[0].a,m=s[0].b,p=s[0].c,l=i[d],h=i[m],y=i[p],P=s[0].length;if(P<=K)return null;let v=[(h[0]-l[0])/P,(h[1]-l[1])/P,(h[2]-l[2])/P],E=[y[0]-l[0],y[1]-l[1],y[2]-l[2]],M=ln(E,v),A=[l[0]+v[0]*M,l[1]+v[1]*M,l[2]+v[2]*M],g=[A[0]-y[0],A[1]-y[1],A[2]-y[2]],L=Math.hypot(g[0],g[1],g[2]);if(L<=K)return null;let T=[g[0]/L,g[1]/L,g[2]/L];if(ln(Ka(v,T),u)<0){let V=m;if(m=d,d=V,l=i[d],h=i[m],P=Math.hypot(h[0]-l[0],h[1]-l[1],h[2]-l[2]),P<=K)return null;v=[(h[0]-l[0])/P,(h[1]-l[1])/P,(h[2]-l[2])/P];let X=[y[0]-l[0],y[1]-l[1],y[2]-l[2]];M=ln(X,v),A=[l[0]+v[0]*M,l[1]+v[1]*M,l[2]+v[2]*M],g=[A[0]-y[0],A[1]-y[1],A[2]-y[2]];let G=Math.hypot(g[0],g[1],g[2]);if(G<=K)return null;T=[g[0]/G,g[1]/G,g[2]/G]}let _=mn(),D=Math.max(0,Math.min(P,M)),R=Math.max(0,P-D),N=[D,0,0,L,D+R,L],Y=ri(e,d,m,p,N),H=Y?Xa(N,Y):ni(D,R,L,so(e.seamBleed,vt)),b=[H[0],H[1]],c=[H[2],H[3]],f=[H[4],H[5]],x=(c[1]+f[1])/2,S=b[0]-c[0],C=f[0]-b[0],O=x-b[1];if(S<=K||C<=K||O<=K||!Number.isFinite(S+C+O))return null;let k=t==="dynamic",w=Re(e.polygon.color??"#cccccc"),B=k&&xt(w)===o?.dynamicColorKey,W={color:k||e.shadedColor===o?.paintColor?void 0:e.shadedColor,pointerEvents:n==="none"?"none":void 0,...k&&!B?{"--pnx":u[0].toFixed(4),"--pny":u[1].toFixed(4),"--pnz":u[2].toFixed(4),"--psr":(w.r/255).toFixed(4),"--psg":(w.g/255).toFixed(4),"--psb":(w.b/255).toFixed(4)}:k?{"--pnx":u[0].toFixed(4),"--pny":u[1].toFixed(4),"--pnz":u[2].toFixed(4)}:null},Z=([V,X])=>[y[0]+(V-D)*v[0]+X*T[0],y[1]+(V-D)*v[1]+X*T[1],y[2]+(V-D)*v[2]+X*T[2]],q=Z(b),$=Z([c[0],x]),ee=Z([f[0],x]),ne=_/2,ie=[(ee[0]-$[0])/_,(ee[1]-$[1])/_,(ee[2]-$[2])/_],J=[q[0]-ie[0]*ne,q[1]-ie[1]*ne,q[2]-ie[2]*ne],F=[($[0]-J[0])/_,($[1]-J[1])/_,($[2]-J[2])/_],U=[ie[0],ie[1],ie[2],0,F[0],F[1],F[2],0,u[0],u[1],u[2],0,J[0],J[1],J[2],1].map(V=>(Math.round(V*1e3)/1e3||0).toString()).join(","),j=Ga();return{transform:`matrix3d(${U})`,...j??{},...W}}function kt(e){if(!e)return!1;let{a:t,b:n,c:o}=e;return t===0&&n===1&&o===2||t===1&&n===2&&o===0||t===2&&n===0&&o===1}function ii(e,t,n,o){let r=e+t;if(o<=0||n<=K||r<=K||!Number.isFinite(e+t+n+o))return Ue([e,0,0,n,r,n],o);let a=Math.sqrt(e*e+n*n),i=Math.sqrt(t*t+n*n);if(a<=K||i<=K)return Ue([e,0,0,n,r,n],o);let u=-o*n/a,s=-o*e/a,d=o*n/i,m=-o*t/i,p=e+u,l=s,h=r+d,y=n+m,P=-n*r;if(Math.abs(P)<=K)return Ue([e,0,0,n,r,n],o);let v=p-h,E=l-y,M=(v*n+E*e)/P,A=h-M*t,g=y-M*n,L=-o*(e+a)/n,T=n+o,_=r+o*(t+i)/n,D=T,R=Math.max(2,o*4),N=A-e,Y=g,H=Math.sqrt(N*N+Y*Y);H>R&&(A=e+N/H*R,g=Y/H*R);let b=Math.sqrt(L*L+o*o);b>R&&(L=L/b*R,T=n+o/b*R);let c=_-r,f=Math.sqrt(c*c+o*o);return f>R&&(_=r+c/f*R,D=n+o/f*R),[A,g,L,T,_,D]}function So(e,t,n){if(e.texture||e.vertices.length!==3)return null;let o=lo,r=o,a=e.vertices[0],i=e.vertices[1],u=e.vertices[2],s=a[1]*o,d=a[0]*o,m=a[2]*r,p=i[1]*o,l=i[0]*o,h=i[2]*r,y=u[1]*o,P=u[0]*o,v=u[2]*r,E=p-s,M=l-d,A=h-m,g=y-s,L=P-d,T=v-m,_=-(M*T-A*L),D=-(A*g-E*T),R=-(E*L-M*g),N=Math.sqrt(_*_+D*D+R*R);if(N<=K)return null;_/=N,D/=N,R/=N;let Y=E*E+M*M+A*A,H=y-p,b=P-l,c=v-h,f=s-y,x=d-P,S=m-v,C=H*H+b*b+c*c,O=f*f+x*x+S*S,k=kt(n)?n.a:0,w=kt(n)?n.b:1,B=kt(n)?n.c:2,W=()=>n?So(e,t):null;if(!kt(n)){let Ye=Y;C>Ye&&(k=1,w=2,B=0,Ye=C),O>Ye&&(k=2,w=0,B=1)}let Z=B===0?s:B===1?p:y,q=B===0?d:B===1?l:P,$=B===0?m:B===1?h:v,ee=k===0?s:k===1?p:y,ne=k===0?d:k===1?l:P,ie=k===0?m:k===1?h:v,J=w===0?s:w===1?p:y,F=w===0?d:w===1?l:P,U=w===0?m:w===1?h:v,j=J-ee,V=F-ne,X=U-ie,G=Math.sqrt(j*j+V*V+X*X);if(G<=K)return W();let se=j/G,le=V/G,re=X/G,me=(Z-ee)*se+(q-ne)*le+($-ie)*re,pe=ee+se*me-Z,ce=ne+le*me-q,fe=ie+re*me-$,Q=Math.sqrt(pe*pe+ce*ce+fe*fe);if(Q<=K)return W();pe/=Q,ce/=Q,fe/=Q;let z=Math.max(0,Math.min(G,me)),I=Math.max(0,G-z),ae=ii(z,I,Q,vt),he=ae[0],ze=ae[1],Pe=ae[2],be=ae[3],Fe=ae[4],tt=ae[5],Ve=(be+tt)/2,_e=he-Pe,Be=Fe-he,ft=Ve-ze;if(_e<=K||Be<=K||ft<=K||!Number.isFinite(_e+Be+ft))return W();let Ae=1/mn(),He=_e+Be,Se=He*Ae,we=(Be-_e)*.5*Ae,Le=ft*Ae,nt=he-z-He*.5,Ne=ze,Ce=bo(se*Se,le*Se,re*Se,se*we+pe*Le,le*we+ce*Le,re*we+fe*Le,_,D,R,Z+se*nt+pe*Ne,q+le*nt+ce*Ne,$+re*nt+fe*Ne),ve;if(Math.floor(t.colorFreezeFrames??1)!==0){let Ye=t.directionalLight,_n=t.ambientLight,De=Ye?.direction??uo,aa=Ye?.color??co,ia=Math.max(0,Ye?.intensity??mo),sa=_n?.color??po,la=Math.max(0,_n?.intensity??yo),Gt=Math.sqrt(De[0]*De[0]+De[1]*De[1]+De[2]*De[2])||1,ua=De[0]/Gt,ca=De[1]/Gt,da=De[2]/Gt,ma=ia*Math.max(0,_*ua+D*ca+R*da),Bn=Po(e.color??"#cccccc",ma,aa,sa,la);ve=t.colorSteps?vo(Bn,t.colorSteps):Bn}return{transform:Ce,borderWidth:go(),color:ve,basis:{a:k,b:w,c:B}}}function si(e,t,n){return n>0&&(n<=1||(t+e)%n===0)}function li(e,t,n,o){let r=Math.floor(o.colorFreezeFrames??1);if(r===0)return;let a=e.__polycssStableTriangleColor;if(!(a===void 0||si(t,Math.max(0,Math.floor(o.colorFrame??0)),Math.max(1,r)))||a===n)return;let u=n,s=n?Re(n):void 0,d=e.__polycssStableTriangleColorRgb,m=Math.max(0,Math.floor(o.colorMaxStep??0));m>0&&d&&s&&n&&(s=xo(d,s,m),u=Dt(s)),e.style.color=u,e.__polycssStableTriangleColor=u,e.__polycssStableTriangleColorRgb=s}function yn(e,t,n={}){if((n.textureLighting??"baked")!=="baked"||!$e())return!1;let o=Array.from(e.children).filter(a=>a instanceof HTMLElement&&a.localName==="u");if(o.length!==t.length)return!1;let r=t.map((a,i)=>So(a,n,o[i].__polycssStableTriangleBasis));if(r.some(a=>!a))return!1;for(let a=0;a<o.length;a+=1){let i=r[a],u=o[a];u.style.visibility&&(u.style.visibility=""),u.__polycssStableTriangleBasis=i.basis,ho(u),u.style.transform=i.transform,i.borderWidth!==void 0&&(u.style.borderWidth=i.borderWidth),i.color!==void 0&&li(u,a,i.color,n)}return!0}import{computeTextureAtlasPlanPublic as ui}from"@layoutit/polycss-core";function We(e,t,n={},o){return ui(e,t,n,void 0,o)}function fn(e,t,n){let o=new Set(n?.disable??[]);return tn(e,t,o)}import{computed as ge,getCurrentScope as ci,onScopeDispose as di,ref as Co,watch as mi}from"vue";function gn(e){for(let t of e)t.startsWith("blob:")&&URL.revokeObjectURL(t)}function Mo(e){return e.flatMap(t=>t.url?.startsWith("blob:")?[t.url]:[])}function It(e){return e.map(t=>({width:t.width,height:t.height,url:null}))}function Eo(e){return e.length===0||typeof Image>"u"?Promise.resolve():Promise.all(e.map(t=>{let n=new Image;n.src=t;let o=n.decode?.();return o?o.catch(()=>{}):Promise.resolve()})).then(()=>{})}function qe(e){e.length!==0&&(typeof requestAnimationFrame=="function"?requestAnimationFrame(()=>gn(e)):setTimeout(()=>gn(e),0))}function Ge(e,t,n=ge(()=>{}),o=ge(()=>{}),r=ge(()=>!1)){let a=ge(()=>new Set(o.value?.disable??[])),i=ge(()=>!a.value.has("b")),u=ge(()=>{let v=typeof document<"u"?document:null;return i.value&&(!v||rt(v))}),s=ge(()=>!a.value.has("u")&&$e()),d=ge(()=>!a.value.has("i")&&t.value!=="dynamic"&&je()),m=ge(()=>{let v=nn(e.value,t.value,a.value,typeof document<"u"?document:null);return on(v,n.value,typeof document<"u"?document:null)}),p=Co(It(m.value.packed.pages)),l=Co({plans:e.value,entries:m.value.packed.entries,pages:It(m.value.packed.pages)}),h=[],y=0,P=!1;return mi(()=>[m.value,t.value,r.value],([v,E,M],A,g)=>{let{packed:L,atlasScale:T}=v;if(M){let R=++y,N=e.value,Y=L.entries;if(L.pages.length===0||typeof document>"u"){qe(h),h=[],l.value={plans:N,entries:Y,pages:It(L.pages)};return}let H=()=>P||R!==y,b=[];Rt(L.pages,E,document,T,H).then(async c=>{if(b=Mo(c),await Eo(b),H()){qe(b);return}let f=h;h=b,b=[],qe(f),l.value={plans:N,entries:Y,pages:c}}).catch(()=>{});return}let _=!1,D=[];if(g(()=>{_=!0,qe(D)}),L.pages.length===0){qe(h),h=[],p.value.length!==0&&(p.value=[]);return}typeof document>"u"||(p.value.some(R=>R.url)||(p.value=It(L.pages)),Rt(L.pages,E,document,T,()=>_).then(async R=>{if(D=Mo(R),await Eo(D),_){qe(D);return}let N=h;h=D,D=[],qe(N),p.value=R}).catch(()=>{}))},{immediate:!0}),ci()&&di(()=>{P=!0,gn(h),h=[]}),{plans:ge(()=>r.value?l.value.plans:e.value),entries:ge(()=>r.value?l.value.entries:m.value.packed.entries),pages:ge(()=>r.value?l.value.pages:p.value),ready:ge(()=>{let v=r.value?l.value.pages:p.value;return v.length===0||v.every(E=>!!E.url)}),useFullRectSolid:i,useProjectiveQuad:u,useStableTriangle:s,useBorderShape:d}}import{h as pi}from"vue";function Ze({entry:e,textureLighting:t,solidPaintDefaults:n,className:o,style:r,domAttrs:a,pointerEvents:i="auto"}){let u=pn(e,t,i,n);if(!u)return null;let s=e.polygon.data?Object.fromEntries(Object.entries(e.polygon.data).map(([m,p])=>[`data-${m}`,String(p)])):{},d=o?.trim()||void 0;return pi("u",{class:d,style:{...u,...r},"data-poly-index":String(e.index),...s,...a})}import{h as yi}from"vue";import{isFullRectSolid as fi,cssBorderShapeForPlan as gi,formatSolidQuadEntryMatrix as hi,formatBorderShapeEntryMatrix as Pi}from"@layoutit/polycss-core";var vi=new Map([["transform",0],["border-shape",1],["border-width",2],["width",3],["height",4],["color",5]]);function xi(e){let t=e.getAttribute("style");if(!t)return;let o=t.split(";").map(r=>r.trim()).filter(Boolean).map((r,a)=>{let i=r.slice(0,r.indexOf(":")).trim().toLowerCase();return{declaration:r,index:a,order:vi.get(i)??Number.POSITIVE_INFINITY}}).sort((r,a)=>r.order-a.order||r.index-a.index).map(({declaration:r})=>r).join(";");o!==t&&e.setAttribute("style",o)}function Ke({entry:e,textureLighting:t,solidPaintDefaults:n,className:o,style:r,domAttrs:a,pointerEvents:i="auto",forceBorderShape:u=!1}){let s=!e.texture&&fi(e),d=s&&u&&je(),m=!s||d?gi(e):null,p=t==="dynamic",l=Re(e.polygon.color??"#cccccc"),h=p&&xt(l)===n?.dynamicColorKey,P={transform:m?Pi(e):hi(e),color:p?void 0:e.shadedColor,pointerEvents:i==="none"?"none":void 0,...p?{"--pnx":e.normal[0].toFixed(4),"--pny":e.normal[1].toFixed(4),"--pnz":e.normal[2].toFixed(4),...h?null:{"--psr":(l.r/255).toFixed(4),"--psg":(l.g/255).toFixed(4),"--psb":(l.b/255).toFixed(4)}}:null,...r},v=e.polygon.data?Object.fromEntries(Object.entries(e.polygon.data).map(([A,g])=>[`data-${A}`,String(g)])):{},E=o?.trim()||void 0,M=A=>{let g=A.el;g&&(m?g.style.setProperty("border-shape",m):g.style.removeProperty("border-shape"),xi(g))};return yi(s&&!d?"b":"i",{class:E,style:P,"data-poly-index":String(e.index),...v,...a,onVnodeMounted:M,onVnodeUpdated:M})}import{h as bi}from"vue";function Qe({entry:e,textureLighting:t,solidPaintDefaults:n,className:o,style:r,domAttrs:a,pointerEvents:i="auto"}){let u=t==="dynamic",s=Re(e.polygon.color??"#cccccc"),d=u&&xt(s)===n?.dynamicColorKey,m={transform:`matrix3d(${e.projectiveMatrix})`,color:u?void 0:e.shadedColor,pointerEvents:i==="none"?"none":void 0,...u&&!d?{"--pnx":e.normal[0].toFixed(4),"--pny":e.normal[1].toFixed(4),"--pnz":e.normal[2].toFixed(4),"--psr":(s.r/255).toFixed(4),"--psg":(s.g/255).toFixed(4),"--psb":(s.b/255).toFixed(4)}:u?{"--pnx":e.normal[0].toFixed(4),"--pny":e.normal[1].toFixed(4),"--pnz":e.normal[2].toFixed(4)}:null,...r},p=e.polygon.data?Object.fromEntries(Object.entries(e.polygon.data).map(([h,y])=>[`data-${h}`,String(y)])):{},l=o?.trim()||void 0;return bi("b",{class:l,style:m,"data-poly-index":String(e.index),...p,...a})}import{h as Si}from"vue";import{formatCornerShapeElementStyle as Ci,parseHex as Mi,rgbKey as Ei}from"@layoutit/polycss-core";function Ti(e,t,n){if(t==="dynamic"){let o=Mi(e.polygon.color??"#cccccc"),r=`;--pnx:${e.normal[0].toFixed(4)};--pny:${e.normal[1].toFixed(4)};--pnz:${e.normal[2].toFixed(4)}`;return Ei(o)!==n?.dynamicColorKey&&(r+=`;--psr:${(o.r/255).toFixed(4)};--psg:${(o.g/255).toFixed(4)};--psb:${(o.b/255).toFixed(4)}`),r}return e.shadedColor?`;color:${e.shadedColor}`:""}function hn({entry:e,geometry:t,textureLighting:n,solidPaintDefaults:o,className:r,pointerEvents:a="auto"}){let i=Ci(e,t),u=Ti(e,n,o),s=a==="none"?";pointer-events:none":"",d=i+u+s,m=l=>{!l||!(l instanceof HTMLElement)||l.setAttribute("style",d)},p=e.polygon.data?Object.fromEntries(Object.entries(e.polygon.data).map(([l,h])=>[`data-${l}`,String(h)])):{};return Si("u",{class:r?.trim()||void 0,"data-poly-index":String(e.index),...p,onVnodeMounted:({el:l})=>m(l),onVnodeUpdated:({el:l})=>m(l)})}import{h as Ai}from"vue";import{formatMatrix3d as wi,formatCssLengthPx as Ft}from"@layoutit/polycss-core";var Li=64;function Je({entry:e,page:t,textureLighting:n,solidPaintDefaults:o,className:r,style:a,domAttrs:i,pointerEvents:u="auto"}){let s=n==="dynamic",d=e.atlasCanonicalSize??Li,m=e.canvasW||1,p=e.canvasH||1,l=t?`${Ft(-e.x/m*d)} ${Ft(-e.y/p*d)}`:void 0,h=t?`${Ft(t.width/m*d)} ${Ft(t.height/p*d)}`:void 0,y=s&&t?.url?`url(${t.url})`:void 0,P=!s&&t?.url?`url(${t.url}) ${l} / ${h} no-repeat`:void 0,v={transform:wi(e.atlasMatrix),"--polycss-atlas-size":`${d}px`,...s?{backgroundImage:t?.url?`url(${t.url})`:void 0,backgroundPosition:l,backgroundSize:h}:{background:P},...s?{"--pnx":e.normal[0].toFixed(4),"--pny":e.normal[1].toFixed(4),"--pnz":e.normal[2].toFixed(4)}:null,...s&&y?{maskImage:y,maskMode:"alpha",maskPosition:l,maskSize:h,maskRepeat:"no-repeat",WebkitMaskImage:y,WebkitMaskPosition:l,WebkitMaskSize:h,WebkitMaskRepeat:"no-repeat"}:null,opacity:t?.url?void 0:0,pointerEvents:u==="none"?"none":void 0,...a},E=e.polygon.data?Object.fromEntries(Object.entries(e.polygon.data).map(([A,g])=>[`data-${A}`,String(g)])):{},M=r?.trim()||void 0;return Ai("s",{class:M,style:v,"data-poly-index":String(e.index),...E,...i})}var Oo=Ri({name:"PolyScene",inheritAttrs:!1,props:{polygons:{type:Array,default:void 0},centerPolygons:{type:Array,default:void 0},perspective:{type:Number},rotX:{type:Number},rotY:{type:Number},zoom:{type:Number},directionalLight:{type:Object,default:void 0},ambientLight:{type:Object,default:void 0},textureLighting:{type:String,default:"baked"},textureQuality:{type:[Number,String],default:void 0},seamBleed:{type:[Number,String],default:void 0},strategies:{type:Object,default:void 0},autoCenter:{type:Boolean,default:!1},shadow:{type:Object,default:void 0},class:{type:String},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},debugShowLabels:{type:Boolean},debugShowBackfaces:{type:Boolean}},setup(e,{slots:t,attrs:n}){let o=Di(ue);if(!o)throw new Error("polycss: PolyScene must be used inside a PolyCamera.");let{sceneElRef:r,applyTransformDirect:a}=o,i=Bt(0),u=new Map,s={register(f,x){u.set(f,x),i.value++},unregister(f){u.delete(f),i.value++},version:i,getEntries(){return Array.from(u.values())}},d=new Set,m=Bt(!1),p={register(f){d.add(f),m.value=d.size>0},unregister(f){d.delete(f),m.value=d.size>0},hasAny:m},l=Bt(null),h=Bt(null),y=xe(()=>({textureLighting:e.textureLighting??"baked",directionalLight:e.directionalLight,ambientLight:e.ambientLight,strategies:e.strategies,seamBleed:e.seamBleed??Lo,shadow:e.shadow,shadowRegistry:s,receiverRegistry:p,groundCssZ:l.value,sceneEl:h.value}));ki(Qt,y),To(h,f=>{r.value=f});let P=!1;wo(()=>{P||typeof document<"u"&&(Tt(document),P=!0)}),To(()=>e.debugShowBackfaces,f=>{let x=h.value;x&&x.classList.toggle("polycss-debug-show-backfaces",!!f)});let v=xe(()=>e.polygons??[]),E=xe(()=>e.centerPolygons??null),M=xe(()=>({directionalLight:e.directionalLight})),A=ht(v,M),g=xe(()=>E.value??v.value),L=ht(g,M);wo(()=>{r.value=h.value,a()}),Ii(a);let T=xe(()=>({tileSize:50,layerElevation:50,directionalLight:e.directionalLight,textureLighting:e.textureLighting,textureQuality:e.textureQuality})),_=xe(()=>{let f=e.textureLighting==="dynamic",x=f?void 0:e.directionalLight,S=f?void 0:e.ambientLight,C=Vt(A.value.polygons),O=e.seamBleed??Lo,k=O==="auto"||typeof O=="number"&&Number.isFinite(O)&&O>0?_t(A.value.polygons,{tileSize:T.value.tileSize,layerElevation:T.value.layerElevation,directionalLight:x,ambientLight:S}):null;return A.value.polygons.map((w,B)=>We(w,B,{tileSize:T.value.tileSize,layerElevation:T.value.layerElevation,directionalLight:x,ambientLight:S,seamBleed:k?.has(B)?O:void 0,seamEdges:k?.get(B),textureEdgeRepairEdges:C[B]}))}),D=xe(()=>e.textureLighting??"baked"),R=xe(()=>e.textureQuality),N=xe(()=>e.strategies),Y=Ge(_,D,R,N),H=xe(()=>{if(e.textureLighting!=="dynamic")return null;let f=e.directionalLight?.direction??[.4,-.7,.59],x=Vi(f),S=Math.hypot(x[0],x[1],x[2])||1,C=x[0]/S,O=x[1]/S,k=x[2]/S,w=Ro(e.directionalLight?.color??"#ffffff")?.rgb??[255,255,255],B=Ro(e.ambientLight?.color??"#ffffff")?.rgb??[255,255,255],W=e.directionalLight?.intensity??1,Z=e.ambientLight?.intensity??.4,q=ne=>(ne/255).toFixed(4),$=k,ee=Math.sign($||1)*Math.max(Math.abs($),.01);return{"--plx":C.toFixed(2),"--ply":O.toFixed(2),"--plz":k.toFixed(2),"--clx":C.toFixed(2),"--cly":O.toFixed(2),"--clz":ee.toFixed(2),"--plr":q(w[0]),"--plg":q(w[1]),"--plb":q(w[2]),"--pli":W.toFixed(4),"--par":q(B[0]),"--pag":q(B[1]),"--pab":q(B[2]),"--pai":Z.toFixed(4)}}),b=50;Ao(()=>{let f=h.value;i.value;let x=s.getEntries();if(x.length===0){f&&f.style.removeProperty("--shadow-ground-cssz"),l.value!==null&&(l.value=null);return}let S=1/0;for(let k of x){let w=k();for(let B of w.polygons)for(let W of B.vertices){let Z=W[2]+(w.position[2]??0);Z<S&&(S=Z)}}if(!Number.isFinite(S)){f&&f.style.removeProperty("--shadow-ground-cssz"),l.value!==null&&(l.value=null);return}let C=e.shadow?.lift??.05,O=(S+C)*b;l.value!==O&&(l.value=O),f&&(e.textureLighting==="dynamic"?f.style.setProperty("--shadow-ground-cssz",O.toFixed(3)):f.style.removeProperty("--shadow-ground-cssz"))});let c=xe(()=>{if(!e.autoCenter)return[0,0,0];let f=L.value.sceneBbox;return[(f.min[0]+f.max[0])/2,(f.min[1]+f.max[1])/2,(f.min[2]+f.max[2])/2]});return Ao(()=>{o.autoCenterOffset.value=c.value}),Fi(()=>{}),()=>{let f=`polycss-scene${e.class?` ${e.class}`:""}`,x=T.value,S=Y.entries.value.map((O,k)=>{if(O)return Je({entry:O,page:Y.pages.value[O.pageIndex],textureLighting:x.textureLighting??"baked"});let w=_.value[k];return!w||w.texture?null:Y.useStableTriangle.value&&it(w)?Ze({entry:w,textureLighting:x.textureLighting??"baked"}):Y.useProjectiveQuad.value&&st(w)?Qe({entry:w,textureLighting:x.textureLighting??"baked"}):Y.useBorderShape.value||Y.useFullRectSolid.value?Ke({entry:w,textureLighting:x.textureLighting??"baked",forceBorderShape:!Y.useFullRectSolid.value}):null}),C=t.default?.()??[];return Oi("div",{ref:h,class:f,"data-polycss-lighting":x.textureLighting??"baked","aria-hidden":"true",style:{...H.value??null,...n.style},...Object.fromEntries(Object.entries(n).filter(([O])=>O!=="style"&&O!=="class"))},[...S,...C])}}});import{defineComponent as Ms,h as Ie,Teleport as Es,computed as oe,inject as Ts,onMounted as As,onBeforeUnmount as Xo,ref as ct,watch as Ht,watchEffect as Uo}from"vue";import{buildBasisHints as ws,buildSharedEdgeMap as Ls,cornerShapeGeometryForPlan as Rs,worldDirectionalLightToCss as Os}from"@layoutit/polycss-core";import{BASE_TILE as Nt,buildPolyMeshTransform as Ds,computeReceiverShadowFaces as ks,computeSceneBbox as Is,DEFAULT_SEAM_BLEED as Fs,ensureCcw2D as Vs,inverseRotateVec3 as Wo,findOverlappingPolygonDuplicates as qo,optimizeMeshPolygons as _s,parseHexColor as Bs,prepareCasterEdgeOwners as zs,prepareCasterPolyItems as Hs,prepareReceiverFacePlanes as Ns,projectCssVertexToGround as Ys,worldDirectionToCss as Go}from"@layoutit/polycss-core";import{ref as bt,watch as _i,onUnmounted as Bi}from"vue";import{loadMesh as zi}from"@layoutit/polycss-core";var Do=[],Pn=[];function zt(e,t){let n=bt(Do),o=bt(void 0),r=bt(!!e.value),a=bt(null),i=bt(Pn),u=null;function s(){if(u){try{u.dispose()}catch{}u=null}}return _i(e,(d,m,p)=>{if(!d){s(),n.value=Do,o.value=void 0,r.value=!1,a.value=null,i.value=Pn;return}let l=!1;r.value=!0,a.value=null;let h=u;zi(d,t).then(y=>{if(l){try{y.dispose()}catch{}return}if(h)try{h.dispose()}catch{}u=y,n.value=y.polygons,o.value=y.voxelSource,r.value=!1,a.value=null,i.value=y.warnings??Pn}).catch(y=>{if(l)return;let P=y instanceof Error?y:new Error(String(y));r.value=!1,a.value=P}),p(()=>{l=!0})},{immediate:!0}),Bi(()=>{s()}),{polygons:n,voxelSource:o,loading:r,error:a,warnings:i,dispose:s}}import{BASE_TILE as de,computeProjectiveQuadMatrix as Hi,normalFacesCamera as Ni,parsePureColor as zo,PROJECTIVE_QUAD_BLEED as Yi,resolveProjectiveQuadGuards as ji,rotateVec3 as ko,shadePolygon as $i,SOLID_QUAD_CANONICAL_SIZE as Xi}from"@layoutit/polycss-core";var Ui=[.4,-.7,.59],Wi="#ffffff",qi=1,Gi="#ffffff",Zi=.4,Ho=1,Ki=8,Qi=Yi,ke=1e-6,Ji=ji({bleed:0}),No={t:[0,0,1],b:[0,0,-1],fl:[0,1,0],br:[0,-1,0],fr:[1,0,0],bl:[-1,0,0]},bn=["t","b","bl","br","fr","fl"],es=new Map([["0,0,1","t"],["0,0,-1","b"],["0,1,0","fl"],["0,-1,0","br"],["1,0,0","fr"],["-1,0,0","bl"]]);function Io(e){let t=[];for(let n of bn)Ni(No[n],e)&&t.push(n);return t.join("|")}function ts(e,t,n){let o=e.__polycssVoxelBrushState??(e.__polycssVoxelBrushState={});o.color!==t&&(e.style.color=t,o.color=t),o.transform!==n&&(e.style.transform=n,o.transform=n)}function ns(e){let t=e.vertices;if(t.length<3)return null;let n=t[0],o=0,r=0,a=0;for(let u=1;u+1<t.length;u+=1){let s=t[u],d=t[u+1],m=s[1]-n[1],p=s[0]-n[0],l=s[2]-n[2],h=d[1]-n[1],y=d[0]-n[0],P=d[2]-n[2];o-=p*P-l*y,r-=l*h-m*P,a-=m*y-p*h}let i=Math.hypot(o,r,a);return i<=1e-9?null:[Math.round(o/i),Math.round(r/i),Math.round(a/i)]}function os(e){if(e.texture||e.material||e.uvs||e.textureTriangles||e.vertices.length!==4)return null;let t=ns(e),n=t?es.get(t.join(",")):void 0;if(!n)return null;let o=1/0,r=1/0,a=1/0,i=-1/0,u=-1/0,s=-1/0;for(let p of e.vertices)o=Math.min(o,p[0]),r=Math.min(r,p[1]),a=Math.min(a,p[2]),i=Math.max(i,p[0]),u=Math.max(u,p[1]),s=Math.max(s,p[2]);let d=1e-6,m=cs(e.color);return Math.abs(s-a)<=d?{axis:"z",face:n,left:r*de,top:o*de,width:Math.max(0,(u-r)*de),height:Math.max(0,(i-o)*de),z:a*de,baseColor:m,bleed:vn()}:Math.abs(i-o)<=d?{axis:"x",face:n,left:r*de,top:a*de,width:Math.max(0,(u-r)*de),height:Math.max(0,(s-a)*de),z:-o*de,baseColor:m,bleed:vn()}:Math.abs(u-r)<=d?{axis:"y",face:n,left:a*de,top:o*de,width:Math.max(0,(s-a)*de),height:Math.max(0,(i-o)*de),z:-r*de,baseColor:m,bleed:vn()}:null}function vn(){return{left:0,right:0,top:0,bottom:0}}function rs(e){let t=o=>String(Number(o.toFixed(6))),n=`${e.item.baseColor}|${e.variableAxis}`;for(let o=0;o<3;o+=1)o!==e.variableAxis&&(n+=`|${o}:${t(e.fixed[o])}`);return n}function Fo(e){return[e[1]*de,e[0]*de,e[2]*de]}function Vo(e,t){return e.axis==="x"?[t[0],t[2]]:e.axis==="y"?[t[2],t[1]]:[t[0],t[1]]}function as(e,t,n){let o=e.left,r=e.left+e.width,a=e.top,i=e.top+e.height;if(Math.abs(t[0]-n[0])<=ke){if(Math.abs(t[0]-o)<=ke)return"left";if(Math.abs(t[0]-r)<=ke)return"right"}if(Math.abs(t[1]-n[1])<=ke){if(Math.abs(t[1]-a)<=ke)return"top";if(Math.abs(t[1]-i)<=ke)return"bottom"}return null}function is(e,t){let n=null;for(let o=0;o<3;o+=1)if(!(Math.abs(e[o]-t[o])<=ke)){if(n!==null)return null;n=o}return n}function ss(e,t,n){let o=t.vertices,r=Fo(o[n]),a=Fo(o[(n+1)%o.length]),i=as(e,Vo(e,r),Vo(e,a));if(!i)return null;let u=is(r,a);if(u===null)return null;let s=Math.min(r[u],a[u]),d=Math.max(r[u],a[u]);return d-s>ke?{item:e,side:i,variableAxis:u,fixed:r,start:s,end:d}:null}function _o(e){e.item.bleed[e.side]=Math.max(e.item.bleed[e.side],Qi)}function ls(e,t){let n=new Map;for(let o of t){let r=e[o.sourceIndex];if(r)for(let a=0;a<r.vertices.length;a+=1){let i=ss(o,r,a);if(!i)continue;let u=rs(i),s=n.get(u);s?s.push(i):n.set(u,[i])}}for(let o of n.values()){if(o.length<2)continue;o.sort((a,i)=>a.start-i.start||a.end-i.end);let r=[];for(let a of o){r=r.filter(i=>i.end>a.start+ke);for(let i of r)i.item.sourceIndex!==a.item.sourceIndex&&(_o(i),_o(a));r.push(a)}}}function us(e){let t=zo(e);return t?{r:t.rgb[0],g:t.rgb[1],b:t.rgb[2],alpha:t.alpha}:{r:255,g:255,b:255,alpha:1}}function cs(e){if(!e)return"#cccccc";let t=zo(e);if(!t)return e;let n={r:t.rgb[0],g:t.rgb[1],b:t.rgb[2],alpha:t.alpha};if(n.alpha<1){let o=Math.round(Math.max(0,n.alpha)*1e3)/1e3;return`rgba(${xn(n.r)}, ${xn(n.g)}, ${xn(n.b)}, ${o})`}return ds(n)}function ds({r:e,g:t,b:n}){let o=r=>Math.round(Math.max(0,Math.min(255,r))).toString(16).padStart(2,"0");return`#${o(e)}${o(t)}${o(n)}`}function xn(e){return Math.round(Math.max(0,Math.min(255,e)))}function ms(e,t,n,o){let r=n?.direction??Ui,a=Math.hypot(r[0],r[1],r[2])||1,i=r[0]/a,u=r[1]/a,s=r[2]/a,d=Math.max(0,n?.intensity??qi)*Math.max(0,e[0]*i+e[1]*u+e[2]*s),m=Math.max(0,o?.intensity??Zi),p=n?.color??Wi,l=o?.color??Gi,h=$i(t,d,p,l,m),y=us(t);if(y.alpha>=1)return h;let P=parseInt(h.slice(1,3),16),v=parseInt(h.slice(3,5),16),E=parseInt(h.slice(5,7),16);return`rgba(${P}, ${v}, ${E}, ${y.alpha})`}function ps(e){if(!e?.length)return[];let t=[];for(let n=0;n<e.length;n+=1){let o=e[n],r=os(o);if(!r||r.width<=0||r.height<=0)return[];t.push({...r,sourceIndex:n})}return ls(e,t),t}function ys(e){return e.axis==="x"?{xAxis:[1,0,0],yAxis:[0,0,1],normal:[0,-1,0],tx:0,ty:-e.z,tz:0}:e.axis==="y"?{xAxis:[0,0,1],yAxis:[0,1,0],normal:[-1,0,0],tx:-e.z,ty:0,tz:0}:{xAxis:[1,0,0],yAxis:[0,1,0],normal:[0,0,1],tx:0,ty:0,tz:e.z}}function fs(e){let t=e.left,n=e.top,o=e.left+e.width,r=e.top+e.height;return[t,n,o,n,o,r,t,r]}function gs(e){return new Map([[0,e.bleed.top],[1,e.bleed.right],[2,e.bleed.bottom],[3,e.bleed.left]])}function hs(e,t){let n=e.split(",").map(Number);if(n.length!==16||n.some(r=>!Number.isFinite(r)))return null;let o=Xi/t;for(let r=0;r<8;r+=1)n[r]*=o;return`matrix3d(${n.map(r=>Number(r.toFixed(6))).join(",")})`}function Bo(e,t){let n=e.left-e.bleed.left,o=e.top-e.bleed.top,r=e.width+e.bleed.left+e.bleed.right,a=e.height+e.bleed.top+e.bleed.bottom,i=e.z,u=r/t,s=a/t;return`matrix3d(${(e.axis==="x"?[u,0,0,0,0,0,s,0,0,-1,0,0,n,-i,o,1]:e.axis==="y"?[0,0,u,0,0,s,0,0,-1,0,0,0,-i,o,n,1]:[u,0,0,0,0,s,0,0,0,0,1,0,n,o,i,1]).map(m=>Number(m.toFixed(6))).join(",")})`}function Ps(e,t){let{xAxis:n,yAxis:o,normal:r,tx:a,ty:i,tz:u}=ys(e),s=Hi(fs(e),n,o,r,a,i,u,Ji,gs(e));return s?hs(s,t)??Bo(e,t):Bo(e,t)}function vs(e){let t=e.defaultView?.matchMedia;return t?t("(pointer: coarse)").matches||t("(hover: none)").matches:!1}function xs(e){return vs(e)?Ki:Ho}function bs(e){return e.axis==="x"?[e.left+e.width/2,-e.z,e.top+e.height/2]:e.axis==="y"?[-e.z,e.top+e.height/2,e.left+e.width/2]:[e.left+e.width/2,e.top+e.height/2,e.z]}function Ss(e,t){let n=bs(e),o=t.meshRotation;o&&(n=ko(n,o[0]??0,o[1]??0,o[2]??0));let[r,a]=ko(n,t.rotX,0,t.rotY);return{x:r,y:a}}function Cs(e,t,n){let o=e.filter(l=>t.has(l.face)).map(l=>({item:l,...Ss(l,n)}));if(o.length===0)return[];let r=1/0,a=-1/0,i=1/0,u=-1/0;for(let l of o)r=Math.min(r,l.x),a=Math.max(a,l.x),i=Math.min(i,l.y),u=Math.max(u,l.y);let s=4,d=Math.max(1e-6,a-r),m=Math.max(1e-6,u-i),p=new Map;for(let l of o){let h=Math.min(s-1,Math.max(0,Math.floor((l.x-r)/d*s))),y=Math.min(s-1,Math.max(0,Math.floor((l.y-i)/m*s))),P=`${h}:${y}`,v=p.get(P);v||(v={tx:h,ty:y,sourceIndex:l.item.sourceIndex,items:[]},p.set(P,v)),v.items.push(l.item),v.sourceIndex=Math.min(v.sourceIndex,l.item.sourceIndex)}return Array.from(p.values()).sort((l,h)=>l.ty-h.ty||l.tx-h.tx||l.sourceIndex-h.sourceIndex).flatMap(l=>l.items)}function Yo(e){let{doc:t,wrapper:n,polygons:o,directionalLight:r,ambientLight:a}=e,i=ps(o);if(i.length===0)return null;let u=new Set(i.map(b=>b.face));n.classList.add("polycss-voxel-mesh");let s=xs(t);s!==Ho&&n.style.setProperty("--polycss-voxel-primitive",`${s}px`);let d=new Map,m=(b,c)=>{let f=`${b}|${c}`,x=d.get(f);if(x)return x;let S=ms(No[b],c,r,a);return d.set(f,S),S},p=new Map,l=new Map,h=new Map,y=new Map;for(let b of i){let c=y.get(b.face);c||(c=[],y.set(b.face,c)),c.push(b)}let P="",v=0,E=new Set,M=b=>{let c=p.get(b.sourceIndex);return c||(c=t.createElement("b"),p.set(b.sourceIndex,c),ts(c,m(b.face,b.baseColor),Ps(b,s))),c},A=b=>{let c=l.get(b);return c||(c=t.createElement("span"),c.className=`polycss-voxel-face polycss-voxel-face-${b}`,c.dataset.polycssVoxelFace=b,c.__polycssVoxelFaceHost=!0,l.set(b,c)),c},g=()=>{for(let b of Array.from(n.childNodes))if(!b.__polycssVoxelFaceHost)return b;return null},L=(b,c)=>{let f=c.map(C=>C.sourceIndex).join(",");if(h.get(b)===f)return;let x=A(b),S=t.createDocumentFragment();for(let C of c)S.appendChild(M(C));x.replaceChildren(S),h.set(b,f)},T=()=>{for(let b of bn)u.has(b)&&L(b,y.get(b)??[])},_=b=>new Set(b.split("|").filter(Boolean)),D=b=>{let c=_(b);return bn.filter(f=>c.has(f)&&u.has(f))},R=b=>{let c=0;for(let f of b)c+=y.get(f)?.length??0;return c},N=b=>{let c=new Set,f=[],x=new Map;for(let S of b){c.has(S.face)||(c.add(S.face),f.push(S.face));let C=x.get(S.face);C||(C=[],x.set(S.face,C)),C.push(S)}return{orderedFaces:f,itemsByFace:x}},Y=(b,c)=>{let f=new Set(b);for(let x of E){if(f.has(x))continue;let S=l.get(x);S?.parentNode===n&&n.removeChild(S)}if(c){let x=t.createDocumentFragment();for(let S of b)x.appendChild(A(S));n.insertBefore(x,g()),E=f;return}for(let x=0;x<b.length;x+=1){let S=b[x],C=A(S);if(C.parentNode===n)continue;let O=null;for(let k=x+1;k<b.length;k+=1){let w=l.get(b[k]);if(w?.parentNode===n){O=w;break}}n.insertBefore(C,O??g())}E=f},H=(b,c,f)=>{if(!f){let k=D(b);Y(k,!1),v=R(k);return}let x=new Set(b.split("|").filter(Boolean)),S=Cs(i,x,c),{orderedFaces:C,itemsByFace:O}=N(S);for(let k of C)L(k,O.get(k)??[]);Y(C,!0),v=S.length};return T(),{get brushCount(){return v},render(b){P=Io(b),H(P,b,!0)},syncCamera(b){let c=Io(b);c!==P&&(P=c,H(c,b,!1))},dispose(){for(let b of l.values())b.remove();n.classList.remove("polycss-voxel-mesh"),n.style.removeProperty("--polycss-voxel-primitive"),p.clear(),l.clear(),h.clear(),v=0,E=new Set,P=""}}}var Sn=new WeakMap;function jo(e,t){Sn.set(e,t)}function $o(e){Sn.delete(e)}function lt(e){let t=e;for(;t;){if(t instanceof HTMLElement){let n=Sn.get(t);if(n)return n}t=t.parentElement}return null}function ut(e,t,n){let o=Array.from(e.querySelectorAll("i,b,s,u"));for(let r of o){let a=r.getBoundingClientRect();if(!(a.width<=0||a.height<=0)&&t>=a.left&&t<=a.right&&n>=a.top&&n<=a.bottom)return!0}return!1}function Cn(e,t,n){if(typeof document>"u")return null;let o=Array.from(document.querySelectorAll(".polycss-mesh"));for(let r of o){if(n&&!n(r))continue;let a=lt(r);if(a&&ut(r,e,t))return a}return null}var Zo=new WeakMap,Ko=new WeakMap;function js(e){let t={};return e.paintColor&&(t["--polycss-paint"]=e.paintColor),e.dynamicColor&&(t["--psr"]=(e.dynamicColor.r/255).toFixed(4),t["--psg"]=(e.dynamicColor.g/255).toFixed(4),t["--psb"]=(e.dynamicColor.b/255).toFixed(4)),Object.keys(t).length>0?t:null}function Qo(e){if(e.length===0)return e;let t=Is(e),n=(t.min[0]+t.max[0])/2,o=(t.min[1]+t.max[1])/2,r=(t.min[2]+t.max[2])/2;if(n===0&&o===0&&r===0)return e;let a=i=>[i[0]-n,i[1]-o,i[2]-r];return e.map(i=>({...i,vertices:i.vertices.map(a),...i.textureTriangles?.length?{textureTriangles:i.textureTriangles.map(u=>({...u,vertices:u.vertices.map(a)}))}:null}))}var te=Ms({name:"PolyMesh",inheritAttrs:!1,props:{id:{type:String,default:void 0},src:{type:String,default:void 0},mtl:{type:String,default:void 0},polygons:{type:Array,default:void 0},voxelSource:{type:Object,default:void 0},autoCenter:{type:Boolean,default:!1},textureLighting:{type:String,default:void 0},textureQuality:{type:[Number,String],default:void 0},seamBleed:{type:[Number,String],default:void 0},atomicAtlas:{type:Boolean,default:!1},onFrameReady:{type:Function,default:void 0},castShadow:{type:Boolean,default:!1},receiveShadow:{type:Boolean,default:!1},merge:{type:Boolean,default:!0},meshResolution:{type:String,default:void 0},parseOptions:{type:Object,default:void 0},class:{type:String},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},onClick:{type:Function,default:void 0},onContextMenu:{type:Function,default:void 0},onDoubleClick:{type:Function,default:void 0},onWheel:{type:Function,default:void 0},onPointerDown:{type:Function,default:void 0},onPointerUp:{type:Function,default:void 0},onPointerMove:{type:Function,default:void 0},onPointerOver:{type:Function,default:void 0},onPointerOut:{type:Function,default:void 0},onPointerEnter:{type:Function,default:void 0},onPointerLeave:{type:Function,default:void 0},onPointerCancel:{type:Function,default:void 0}},setup(e,{slots:t,attrs:n,expose:o}){let r=oe(()=>e.src??""),a=oe(()=>{let F={...e.parseOptions??{}};return e.mtl&&(F.mtlUrl=e.mtl),e.meshResolution!==void 0&&(F.meshResolution=e.meshResolution),Object.keys(F).length>0?F:void 0}),i=zt(r,a.value),u=oe(()=>e.src?i.polygons.value:e.polygons??[]),s=ct(null),d=null;Ht(u,()=>{s.value=null,d=null});let m=oe(()=>s.value??u.value),p=oe(()=>e.merge?_s(m.value,e.meshResolution!==void 0?{meshResolution:e.meshResolution}:void 0):m.value),l=oe(()=>e.autoCenter?Qo(p.value):p.value),h=!t.polygon,y=Nn(),P=Ts(ue,null),v=ct(0),E;Uo(F=>{E?.(),E=P?.store.subscribe(()=>{v.value++}),F(()=>{E?.(),E=void 0})});let M=oe(()=>e.textureLighting??y?.value.textureLighting??"baked"),A=oe(()=>y?.value.strategies),g=oe(()=>e.seamBleed??y?.value.seamBleed??Fs),L=oe(()=>y?.value.directionalLight),T=oe(()=>y?.value.ambientLight),_=oe(()=>e.src?i.voxelSource.value:e.voxelSource??void 0),D=oe(()=>!!(_.value&&s.value===null&&!t.polygon&&!t.default&&M.value==="baked"&&!e.castShadow)),R=oe(()=>{if(M.value!=="dynamic")return null;let F=e.rotation;if(!F||F[0]===0&&F[1]===0&&F[2]===0)return null;let U=y?.value.directionalLight?.direction;if(!U)return null;let j=Wo(U,F),V=Math.hypot(j[0],j[1],j[2])||1;return{"--plx":(j[0]/V).toFixed(2),"--ply":(j[1]/V).toFixed(2),"--plz":(j[2]/V).toFixed(2)}}),N=ct(e.rotation),Y=ct(0),H=oe(()=>{let F=L.value;if(!F)return F;let U=Os(F);return N.value?{...U,direction:Wo(U.direction,N.value)}:U}),b=void 0,c=oe(()=>{if(!h||D.value)return[];let F=Vt(l.value),U=g.value==="auto"||typeof g.value=="number"&&Number.isFinite(g.value)&&g.value>0?_t(l.value,{directionalLight:H.value,ambientLight:T.value}):null,j=ws(l.value,{directionalLight:H.value,ambientLight:T.value});return l.value.map((V,X)=>We(V,X,{directionalLight:H.value,ambientLight:T.value,seamBleed:U?.has(X)?g.value:void 0,seamEdges:U?.get(X),textureEdgeRepairEdges:F[X],lightOccludedPolyIndices:b},j[X]))}),f=oe(()=>e.textureQuality),x=oe(()=>e.atomicAtlas),S=Ge(c,M,f,A,x),C=oe(()=>h?fn(S.plans.value,M.value,A.value):{});Ht(()=>S.entries.value,()=>{e.atomicAtlas&&S.ready.value&&e.onFrameReady?.()},{flush:"sync"});let O=oe(()=>js(C.value)),k=oe(()=>{if(!e.castShadow||y?.value.receiverRegistry?.hasAny.value)return null;let F=y?.value,U=F?.groundCssZ??null;if(U===null)return null;let j=F?.shadow,V=F?.directionalLight?.direction??[.4,-.7,.59],X=Go(V),G=e.position?.[2]??0,se=U-G*Nt,le=qo(l.value,{normalTolerance:.1,distanceTolerance:.5,overlapFraction:.95,preserveDoubleSidedBackfaces:!1}),re=[],me=1/0,pe=1/0,ce=-1/0,fe=-1/0,Q=1/0,z=1/0,I=-1/0,ae=-1/0,he=l.value,ze=c.value;for(let Se=0;Se<he.length;Se++){if(le.has(Se)||!ze[Se])continue;let Le=he[Se],nt=[];for(let Ne of Le.vertices){let Ce=[Ne[1]*Nt,Ne[0]*Nt,Ne[2]*Nt];Ce[0]<Q&&(Q=Ce[0]),Ce[1]<z&&(z=Ce[1]),Ce[0]>I&&(I=Ce[0]),Ce[1]>ae&&(ae=Ce[1]);let ve=Ys(Ce,X,se);nt.push(ve),ve[0]<me&&(me=ve[0]),ve[1]<pe&&(pe=ve[1]),ve[0]>ce&&(ce=ve[0]),ve[1]>fe&&(fe=ve[1])}re.push(nt)}if(re.length===0)return null;let Pe=j?.maxExtend??2e3,be=Math.max(me,Q-Pe),Fe=Math.max(pe,z-Pe),tt=Math.min(ce,I+Pe),Ve=Math.min(fe,ae+Pe),_e=tt-be,Be=Ve-Fe;if(!(_e>0)||!(Be>0))return null;let ft=j?.color??"#000000",Vn=j?.opacity??.25,Ae=Bs(ft)?.rgb??[0,0,0],He="";for(let Se of re){let we=Vs(Se);He+=`M${(we[0][0]-be).toFixed(3)},${(we[0][1]-Fe).toFixed(3)}`;for(let Le=1;Le<we.length;Le++)He+=`L${(we[Le][0]-be).toFixed(3)},${(we[Le][1]-Fe).toFixed(3)}`;He+="Z"}return Ie("svg",{class:"polycss-shadow polycss-shadow-svg",width:String(_e),height:String(Be),viewBox:`0 0 ${_e} ${Be}`,style:{position:"absolute",top:"0",left:"0",display:"block",overflow:"hidden",transformOrigin:"0 0",pointerEvents:"none",willChange:"transform",transform:`translate3d(${be.toFixed(3)}px,${Fe.toFixed(3)}px,${se.toFixed(3)}px)`}},[Ie("path",{d:He,fill:`rgb(${Ae[0]},${Ae[1]},${Ae[2]})`,"fill-rule":"nonzero",stroke:`rgb(${Ae[0]},${Ae[1]},${Ae[2]})`,"stroke-width":"3","stroke-linejoin":"round",opacity:Vn.toFixed(4)})])}),w=oe(()=>e.receiveShadow?Ls(l.value):void 0),B=oe(()=>{if(!e.receiveShadow)return[];let F=y?.value,U=F?.shadowRegistry;if(!U)return[];U.version.value,v.value;let j=U.getEntries();if(j.length===0)return[];let V=F?.directionalLight?.direction??[.4,-.7,.59],X=Go(V),G=F?.shadow?.lift??.001,se=Ns(l.value,e.position??[0,0,0],e.scale,new Set,G,e.rotation);if(se.length===0)return[];let le=[],re=0,me=w.value;for(let Q of j){let z=Q(),I=z.renderedPolygonIndices,ae=Hs(z.polygons,z.position,z.scale,I?Pe=>I.has(Pe):()=>!0,z.rotation??null),he=z.polygons===l.value,ze;if(!he&&z.polygons.length>=40){let Pe=z.rotation??null,be=z.position,Fe=JSON.stringify(z.scale??null),tt=`${be[0]},${be[1]},${be[2]}|${Pe?Pe.join(","):"n"}|${Fe}`,Ve=Zo.get(z.polygons);(Ve===void 0||Ko.get(z.polygons)!==tt)&&(Ve=zs(z.polygons,be,z.scale,Pe),Zo.set(z.polygons,Ve),Ko.set(z.polygons,tt)),ze=Ve}le.push({id:Symbol(`caster-${re++}`),items:ae,selfShadowEdgeMap:he?me:void 0,edgeOwners:ze,casterPolygonCount:z.polygons.length})}let pe=P?.store.getState().cameraState,ce={rotX:pe?.rotX??65,rotY:pe?.rotY??45,meshRotation:e.rotation};return ks({receiverPlanes:se,receiverPolygons:l.value,receiverHasTexture:l.value.some(Q=>Q.texture!==void 0),casters:le,lightDir:X,cameraRot:ce,ambientLight:F?.ambientLight,directionalLight:F?.directionalLight,shadow:{color:F?.shadow?.color,opacity:F?.shadow?.opacity??.25,maxExtend:F?.shadow?.maxExtend}}).map(Q=>Ie("svg",{key:`receiver-${Q.faceIndex}`,class:"polycss-shadow polycss-shadow-svg polycss-shadow-receiver","data-poly-shadow-type":"receiver","data-poly-shadow-receiver-face":String(Q.faceIndex),"data-poly-shadow-receiver-polys":JSON.stringify(Q.memberPolyIndices),width:String(Q.width),height:String(Q.height),viewBox:`0 0 ${Q.width} ${Q.height}`,style:{position:"absolute",top:"0",left:"0",display:"block",overflow:"hidden",transformOrigin:"0 0",pointerEvents:"none",willChange:"transform",transform:Q.matrixCss}},Q.paths.map((z,I)=>Ie("path",{key:I,d:z.d,fill:Q.fill,stroke:Q.fill,"stroke-width":"3","stroke-linejoin":"round",opacity:Q.opacity.toFixed(4),"data-poly-shadow-caster-polys":JSON.stringify(z.casterPolygonIndices)}))))}),W=Symbol();Ht(()=>e.castShadow,(F,U,j)=>{let V=y?.value.shadowRegistry;V&&(F?V.register(W,()=>{let X=qo(l.value,{normalTolerance:.1,distanceTolerance:.5,overlapFraction:.95,preserveDoubleSidedBackfaces:!1}),G=new Set,se=c.value;for(let le=0;le<se.length;le++)se[le]&&!X.has(le)&&G.add(le);return{polygons:l.value,position:e.position??[0,0,0],scale:e.scale,rotation:e.rotation,renderedPolygonIndices:G}}):V.unregister(W),j(()=>V.unregister(W)))},{immediate:!0});let Z=Symbol();Ht(()=>e.receiveShadow,(F,U,j)=>{let V=y?.value.receiverRegistry;V&&(F?V.register(Z):V.unregister(Z),j(()=>V.unregister(Z)))},{immediate:!0}),Xo(()=>{y?.value.shadowRegistry?.unregister(W),y?.value.receiverRegistry?.unregister(Z)});let q=ct(null),$={get element(){return q.value},get id(){return e.id},getPosition:()=>e.position,getRotation:()=>e.rotation,getScale:()=>e.scale,getPolygons:()=>d??l.value,setPolygons(F){let U=e.autoCenter?Qo(F):F;d=U;let j=q.value,V=j&&h&&yn(j,U,{directionalLight:H.value,ambientLight:T.value,textureLighting:M.value,strategies:A.value,seamBleed:g.value,colorFrame:++Y.value,colorFreezeFrames:0});s.value=F.slice()},updatePolygon(F,U){let j=d??l.value,V=typeof F=="number"?F:j.indexOf(F);V<0||V>=j.length||(Object.assign(j[V],U),s.value=j.slice(),d=null)},rebakeAtlas:()=>{N.value=e.rotation}};o($),As(()=>{q.value&&jo(q.value,$)}),Xo(()=>{q.value&&$o(q.value)});let ee=ct(null);Uo(F=>{let U=q.value;if(ee.value?.dispose(),ee.value=null,!D.value||!U)return;let j=Yo({doc:U.ownerDocument,wrapper:U,polygons:l.value,directionalLight:H.value,ambientLight:T.value});if(!j)return;let V=()=>{let G=P?.store.getState().cameraState;return{rotX:G?.rotX??65,rotY:G?.rotY??45,meshRotation:e.rotation}};ee.value=j,j.render(V());let X=P?.store.subscribe(()=>{j.syncCamera(V())});F(()=>{X?.(),j.dispose(),ee.value===j&&(ee.value=null)})});let ne=null;function ie(F,U,j){let V=[];if(typeof document<"u"&&typeof document.elementsFromPoint=="function"){let re=document.elementsFromPoint(U,j),me=new Set;for(let pe of re){let ce=lt(pe);ce&&!me.has(ce)&&(me.add(ce),V.push({object:ce}))}}let X=0,G=0,se=P?.cameraElRef.value;if(se){let re=se.getBoundingClientRect();re.width>0&&re.height>0&&(X=(U-re.left)/re.width*2-1,G=-((j-re.top)/re.height*2-1))}let le=0;return ne&&(le=Math.hypot(U-ne.x,j-ne.y)),{object:V[0]?.object??$,eventObject:$,intersections:V,pointer:{x:X,y:G},delta:le,nativeEvent:F,stopPropagation:()=>F.stopPropagation()}}function J(F,U,j,V){F&&F(ie(U,j,V))}return()=>{let U={transform:Ds({position:e.position,scale:e.scale,rotation:e.rotation}),...R.value??void 0,...n.style,...O.value??void 0},j=Object.fromEntries(Object.entries(n).filter(([z])=>z!=="style"&&z!=="class")),V=`polycss-mesh${D.value?" polycss-voxel-mesh":""}${e.class?` ${e.class}`:""}`,X={};e.onClick&&(X.onClick=z=>{let I=z;J(e.onClick,I,I.clientX,I.clientY)}),e.onContextMenu&&(X.onContextmenu=z=>{let I=z;J(e.onContextMenu,I,I.clientX,I.clientY)}),e.onDoubleClick&&(X.onDblclick=z=>{let I=z;J(e.onDoubleClick,I,I.clientX,I.clientY)}),e.onWheel&&(X.onWheel=z=>{let I=z;J(e.onWheel,I,I.clientX,I.clientY)}),X.onPointerdown=z=>{let I=z;ne={x:I.clientX,y:I.clientY},J(e.onPointerDown,I,I.clientX,I.clientY)},X.onPointerup=z=>{let I=z;J(e.onPointerUp,I,I.clientX,I.clientY),ne=null},e.onPointerMove&&(X.onPointermove=z=>{let I=z;J(e.onPointerMove,I,I.clientX,I.clientY)}),(e.onPointerOver||e.onPointerEnter)&&(X.onPointerenter=z=>{let I=z;J(e.onPointerOver,I,I.clientX,I.clientY),J(e.onPointerEnter,I,I.clientX,I.clientY)}),(e.onPointerOut||e.onPointerLeave)&&(X.onPointerleave=z=>{let I=z;J(e.onPointerOut,I,I.clientX,I.clientY),J(e.onPointerLeave,I,I.clientX,I.clientY)}),e.onPointerCancel&&(X.onPointercancel=z=>{let I=z;J(e.onPointerCancel,I,I.clientX,I.clientY),ne=null});let G=e.id?{"data-poly-mesh-id":e.id}:{};if(e.src&&i.loading.value&&i.polygons.value.length===0)return Ie("div",{ref:q,class:`polycss-mesh polycss-mesh-loading${e.class?` ${e.class}`:""}`,style:U,...G,...X,...j},t.fallback?.()??[]);if(e.src&&i.error.value&&i.polygons.value.length===0)return Ie("div",{ref:q,class:`polycss-mesh polycss-mesh-error${e.class?` ${e.class}`:""}`,style:U,...G,...X,...j},t.error?.({error:i.error.value})??[]);let se=l.value,le=t.polygon?se.map((z,I)=>Ie("template",{key:I},t.polygon?.({polygon:z,index:I}))):D.value?[]:S.entries.value.map((z,I)=>{if(z)return Je({entry:z,page:S.pages.value[z.pageIndex],textureLighting:M.value,solidPaintDefaults:C.value});let ae=S.plans.value[I];if(!ae||ae.texture)return null;if(st(ae))return Qe({entry:ae,textureLighting:M.value,solidPaintDefaults:C.value});if(it(ae))return Ze({entry:ae,textureLighting:M.value,solidPaintDefaults:C.value});let he=A.value?.disable?.includes("i")?null:Rs(ae);return he?hn({entry:ae,geometry:he,textureLighting:M.value,solidPaintDefaults:C.value}):Ke({entry:ae,textureLighting:M.value,solidPaintDefaults:C.value,forceBorderShape:!S.useFullRectSolid.value})}),re=t.default?.()??[],me=k.value,pe=me?[me]:[],ce=B.value,fe=y?.value?.sceneEl??null,Q=fe&&ce.length>0?[Ie(Es,{to:fe},ce)]:[];return Ie("div",{ref:q,class:V,style:U,...G,...X,...j},[...pe,...Q,...le,...re])}}});import{defineComponent as $s,h as Jo,computed as Mn}from"vue";import{BASE_TILE as St}from"@layoutit/polycss-core";function Xs(e,t,n,o,r){let a=typeof n=="number"?n:n?.[0]??1,i=typeof n=="number"?n:n?.[1]??1,u=typeof n=="number"?n:n?.[2]??1,s=a!==1||i!==1||u!==1,d=!!t&&(!!t[0]||!!t[1]||!!t[2]),m=(e?.[1]??0)*St,p=(e?.[0]??0)*St,l=(e?.[2]??0)*St,h=[];return h.push(`translate3d(${m}px, ${p}px, ${l}px)`),d&&(t[0]&&h.push(`rotateY(${-t[0]}deg)`),t[1]&&h.push(`rotateX(${-t[1]}deg)`),t[2]&&h.push(`rotateZ(${-t[2]}deg)`)),s&&h.push(`scale3d(${a}, ${i}, ${u})`),h.push(`translate(${-o/2}px, ${-r/2}px)`),h.join(" ")}var er=$s({name:"PolyIframe",props:{src:{type:String,required:!0},width:{type:Number,required:!0},height:{type:Number,required:!0},position:{type:Array,default:void 0},rotation:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},allow:{type:String,default:void 0},sandbox:{type:String,default:void 0},loading:{type:String,default:void 0},referrerpolicy:{type:String,default:void 0},title:{type:String,default:void 0},class:{type:String,default:void 0},style:{type:Object,default:void 0}},setup(e){let t=Mn(()=>e.width*St),n=Mn(()=>e.height*St),o=Mn(()=>Xs(e.position,e.rotation,e.scale,t.value,n.value));return()=>{let r={position:"absolute",left:"0",top:"0",transformOrigin:"0 0",transformStyle:"preserve-3d",transform:o.value,...e.style??{}},a={src:e.src,style:{width:`${t.value}px`,height:`${n.value}px`,border:"0",display:"block",background:"#000"}};return e.allow&&(a.allow=e.allow),e.sandbox&&(a.sandbox=e.sandbox),e.loading&&(a.loading=e.loading),e.referrerpolicy&&(a.referrerpolicy=e.referrerpolicy),e.title&&(a.title=e.title),Jo("div",{class:e.class?`polycss-iframe ${e.class}`:"polycss-iframe",style:r},[Jo("iframe",a)])}}});import{defineComponent as Us,h as Ws,computed as qs}from"vue";var tr=Us({name:"PolyGround",props:{size:{type:Number,default:6},z:{type:Number,default:0},center:{type:Array,default:()=>[0,0]},color:{type:String,default:"#7d848e"},class:{type:String,default:void 0}},setup(e){let t=qs(()=>{let n=e.size/2,[o,r]=e.center;return[{vertices:[[o-n,r-n,e.z],[o+n,r-n,e.z],[o+n,r+n,e.z],[o-n,r+n,e.z]],color:e.color}]});return()=>Ws(te,{polygons:t.value,castShadow:!1,class:e.class?`polycss-ground ${e.class}`:"polycss-ground"})}});import{computed as nr}from"vue";function Gs(e){return typeof e=="function"?nr(()=>{let{texture:t,key:n}=e();return{texture:t,key:n}}):nr(()=>({texture:e.texture,key:e.key}))}import{computed as dt,defineComponent as Zs,h as or}from"vue";var Ks=4;function Yt(e,t=Ks){let n=e.toFixed(t).replace(/\.?0+$/,"");return Number(n)===0||Object.is(Number(n),-0)?"0":`${n}px`}function Qs(e){if(e.length!==4)return null;let t=[...new Set(e.map(r=>r[0]))].sort((r,a)=>r-a),n=[...new Set(e.map(r=>r[1]))].sort((r,a)=>r-a);if(t.length!==2||n.length!==2)return null;let o=new Set([`${t[0]},${n[0]}`,`${t[0]},${n[1]}`,`${t[1]},${n[0]}`,`${t[1]},${n[1]}`]);for(let r of e)if(!o.has(`${r[0]},${r[1]}`))return null;return{u0:t[0],u1:t[1],v0:n[0],v1:n[1]}}function Js({plan:e,material:t,uvRect:n,className:o,style:r,domAttrs:a,pointerEvents:i="auto"}){let{u0:u,u1:s,v0:d,v1:m}=n,p=s-u,l=m-d,h=1/p,y=1/l,P=Math.max(d,m),v=u/p,E=(1-P)/l,M={transform:`matrix3d(${e.canonicalMatrix})`,backgroundImage:`url(${t.texture})`,backgroundSize:`${Yt(h)} ${Yt(y)}`,backgroundPosition:`${Yt(-v)} ${Yt(-E)}`,pointerEvents:i==="none"?"none":void 0,...r},A=e.polygon.data?Object.fromEntries(Object.entries(e.polygon.data).map(([L,T])=>[`data-${L}`,String(T)])):{},g=o?.trim()||void 0;return or("i",{class:g,style:M,...A,...a})}var rr=Zs({name:"Poly",inheritAttrs:!1,props:{vertices:{type:Array,required:!0},color:{type:String},texture:{type:String},uvs:{type:Array,default:void 0},data:{type:Object,default:void 0},material:{type:Object,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},textureLighting:{type:String,default:void 0},textureQuality:{type:[Number,String],default:void 0},context:{type:Object,default:void 0},baseColor:{type:String},pointerEvents:{type:String,default:"auto"}},setup(e,{attrs:t}){let n=dt(()=>e.textureLighting??e.context?.textureLighting??"baked"),o=dt(()=>e.textureQuality??e.context?.textureQuality),r=dt(()=>e.material?.texture??e.texture),a=dt(()=>e.material&&e.uvs?Qs(e.uvs):null),i=dt(()=>{let d=e.context?.tileSize??50;return We({vertices:e.vertices,color:e.baseColor??e.color,texture:r.value,uvs:e.uvs,data:e.data},0,{tileSize:d,layerElevation:e.context?.layerElevation??d,directionalLight:e.context?.directionalLight})}),u=dt(()=>a.value?[]:[i.value]),s=Ge(u,n,o);return()=>{let d=i.value,m=s.entries.value[0],p=[];e.position&&p.push(`translate3d(${e.position[0]}px, ${e.position[1]}px, ${e.position[2]}px)`),e.scale!==void 0&&(typeof e.scale=="number"?e.scale!==1&&p.push(`scale3d(${e.scale}, ${e.scale}, ${e.scale})`):p.push(`scale3d(${e.scale[0]}, ${e.scale[1]}, ${e.scale[2]})`)),e.rotation&&(e.rotation[0]&&p.push(`rotateX(${e.rotation[0]}deg)`),e.rotation[1]&&p.push(`rotateY(${e.rotation[1]}deg)`),e.rotation[2]&&p.push(`rotateZ(${e.rotation[2]}deg)`));let l=p.length>0?p.join(" "):void 0,h={};if(e.data)for(let[E,M]of Object.entries(e.data))h[`data-${E}`]=String(M);let y={...t,...h},P=Object.fromEntries(Object.entries(y).filter(([E])=>E!=="class"&&E!=="style")),v;return a.value&&e.material&&d?v=Js({plan:d,material:e.material,uvRect:a.value,className:y.class??void 0,style:y.style,domAttrs:P,pointerEvents:e.pointerEvents??"auto"}):m?v=Je({entry:m,page:s.pages.value[m.pageIndex],textureLighting:n.value,className:y.class??void 0,style:y.style,domAttrs:P,pointerEvents:e.pointerEvents??"auto"}):d&&!d.texture&&(v=it(d)?Ze({entry:d,textureLighting:n.value,className:y.class??void 0,style:y.style,domAttrs:P,pointerEvents:e.pointerEvents??"auto"}):st(d)?Qe({entry:d,textureLighting:n.value,className:y.class??void 0,style:y.style,domAttrs:P,pointerEvents:e.pointerEvents??"auto"}):Ke({entry:d,textureLighting:n.value,className:y.class??void 0,style:y.style,domAttrs:P,pointerEvents:e.pointerEvents??"auto"})),v?l?or("div",{class:"polycss-poly-wrapper",style:{transform:l,position:"absolute",transformStyle:"preserve-3d"}},[v]):v:null}}});import{computed as Me,defineComponent as Ee,h as Te}from"vue";import{boxPolygons as el,planePolygons as tl,ringPolygons as nl,octahedronPolygons as ol,spherePolygons as rl,tetrahedronPolygons as al,icosahedronPolygons as il,dodecahedronPolygons as sl,cylinderPolygons as ll,conePolygons as ul,torusPolygons as cl}from"@layoutit/polycss-core";var ar=Ee({name:"PolyBox",props:{size:{type:[Number,Array],default:void 0},center:{type:Array,default:void 0},min:{type:Array,default:void 0},max:{type:Array,default:void 0},color:{type:String,default:void 0},texture:{type:String,default:void 0},material:{type:Object,default:void 0},uvs:{type:Array,default:void 0},data:{type:Object,default:void 0},faces:{type:Object,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},id:{type:String,default:void 0}},setup(e){let t=Me(()=>el({size:e.size,center:e.center,min:e.min,max:e.max,color:e.color,texture:e.texture,material:e.material,uvs:e.uvs,data:e.data,faces:e.faces}));return()=>Te(te,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),ir=Ee({name:"PolyPlane",props:{axis:{type:Number,required:!0},size:{type:Number,default:void 0},offset:{type:[Number,Array],default:void 0},along:{type:Number,default:void 0},color:{type:String,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},id:{type:String,default:void 0}},setup(e){let t=Me(()=>tl({axis:e.axis,size:e.size,offset:e.offset,along:e.along,color:e.color}));return()=>Te(te,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),sr=Ee({name:"PolyRing",props:{axis:{type:Number,required:!0},radius:{type:Number,required:!0},halfThickness:{type:Number,default:void 0},segments:{type:Number,default:void 0},color:{type:String,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},id:{type:String,default:void 0}},setup(e){let t=Me(()=>nl({axis:e.axis,radius:e.radius,halfThickness:e.halfThickness,segments:e.segments,color:e.color}));return()=>Te(te,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),lr=Ee({name:"PolyOctahedron",props:{center:{type:Array,required:!0},size:{type:Number,required:!0},color:{type:String,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},id:{type:String,default:void 0}},setup(e){let t=Me(()=>ol({center:e.center,size:e.size,color:e.color}));return()=>Te(te,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),ur=Ee({name:"PolyTetrahedron",props:{size:{type:Number,default:void 0},color:{type:String,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},id:{type:String,default:void 0}},setup(e){let t=Me(()=>al({size:e.size,color:e.color}));return()=>Te(te,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),cr=Ee({name:"PolyIcosahedron",props:{size:{type:Number,default:void 0},color:{type:String,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},id:{type:String,default:void 0}},setup(e){let t=Me(()=>il({size:e.size,color:e.color}));return()=>Te(te,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),dr=Ee({name:"PolyDodecahedron",props:{size:{type:Number,default:void 0},color:{type:String,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},id:{type:String,default:void 0}},setup(e){let t=Me(()=>sl({size:e.size,color:e.color}));return()=>Te(te,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),mr=Ee({name:"PolySphere",props:{radius:{type:Number,default:void 0},subdivisions:{type:Number,default:void 0},color:{type:String,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},id:{type:String,default:void 0}},setup(e){let t=Me(()=>rl({radius:e.radius,subdivisions:e.subdivisions,color:e.color}));return()=>Te(te,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),pr=Ee({name:"PolyCylinder",props:{radius:{type:Number,default:void 0},radiusTop:{type:Number,default:void 0},height:{type:Number,default:void 0},radialSegments:{type:Number,default:void 0},color:{type:String,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},id:{type:String,default:void 0}},setup(e){let t=Me(()=>ll({radius:e.radius,radiusTop:e.radiusTop,height:e.height,radialSegments:e.radialSegments,color:e.color}));return()=>Te(te,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),yr=Ee({name:"PolyCone",props:{radius:{type:Number,default:void 0},height:{type:Number,default:void 0},radialSegments:{type:Number,default:void 0},color:{type:String,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},id:{type:String,default:void 0}},setup(e){let t=Me(()=>ul({radius:e.radius,height:e.height,radialSegments:e.radialSegments,color:e.color}));return()=>Te(te,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),fr=Ee({name:"PolyTorus",props:{radius:{type:Number,default:void 0},tube:{type:Number,default:void 0},radialSegments:{type:Number,default:void 0},tubularSegments:{type:Number,default:void 0},color:{type:String,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},id:{type:String,default:void 0}},setup(e){let t=Me(()=>cl({radius:e.radius,tube:e.tube,radialSegments:e.radialSegments,tubularSegments:e.tubularSegments,color:e.color}));return()=>Te(te,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}});import{defineComponent as dl,inject as ml,onMounted as pl,onBeforeUnmount as yl,watch as En,ref as fl}from"vue";import{BASE_TILE as gr}from"@layoutit/polycss-core";var gl=150,hr=4,hl=513e-6,Pl=10,vl=3,Pr=16.67,xl=50,vr=.1,xr=10,br=0,Sr=5e3,bl=.3,Sl=.05;function Cl(e){return e===!0?-1:e===void 0||e===!1?1:e}function Ml(e,t,n,o,r){let a=Cl(r),i=e/hr*a,u=t/hr*a;return{rotX:n-u,rotY:((o-i)%360+360)%360}}function Cr(e,t,n,o,r){let a=Math.max(.01,n),i=Math.max(.1,Math.cos(o*Math.PI/180)),u=-e/(a*gr),s=-t/(a*gr*i),d=-r*Math.PI/180,m=Math.cos(d),p=Math.sin(d);return{dWorldX:s*m-u*p,dWorldY:s*p+u*m}}var Mr=dl({name:"PolyOrbitControls",props:{drag:{type:Boolean,default:!0},wheel:{type:Boolean,default:!0},dolly:{type:Boolean,default:!1},invert:{type:[Boolean,Number],default:!1},minZoom:{type:Number,default:vr},maxZoom:{type:Number,default:xr},minDistance:{type:Number,default:br},maxDistance:{type:Number,default:Sr},animate:{type:[Boolean,Object],default:!1}},emits:{change:e=>!0,"interaction-start":e=>!0,"interaction-end":e=>!0},setup(e,{emit:t}){let n=ml(ue,null);if(!n)return typeof console<"u"&&console.warn("[polycss] <PolyOrbitControls> must be used inside <PolyCamera>."),()=>null;let{store:o,cameraRef:r,cameraElRef:a,applyTransformDirect:i}=n,u=()=>({rotX:r.value.state.rotX,rotY:r.value.state.rotY,zoom:r.value.state.zoom,target:r.value.state.target,distance:r.value.state.distance}),s=()=>{t("change",u())},d=()=>{t("interaction-start",u())},m=()=>{t("interaction-end",u())},p=null,l={x:0,y:0},h=fl(!1),y=null,P=null,v=null;function E(){let g=a.value;if(!g)return;let L=!1,T={x:0,y:0},_=c=>{if(e.drag&&p===null&&c.isPrimary!==!1){c.preventDefault(),p=c.pointerId,l={x:c.clientX,y:c.clientY},g.style.cursor="grabbing";try{c.target.setPointerCapture(c.pointerId)}catch{}e.animate&&e.animate.pauseOnInteraction!==!1&&(h.value=!0),d()}},D=c=>{if(p===null||c.pointerId!==p||!e.drag)return;c.preventDefault();let f=c.clientX-l.x,x=c.clientY-l.y;l={x:c.clientX,y:c.clientY};let S=r.value,C=S.state;if(c.shiftKey){let{dWorldX:O,dWorldY:k}=Cr(f,x,C.zoom,C.rotX,C.rotY);S.update({target:[C.target[0]+O,C.target[1]+k,C.target[2]]})}else{let{rotX:O,rotY:k}=Ml(f,x,C.rotX,C.rotY,e.invert);S.update({rotX:O,rotY:k})}i(),o.updateCameraFromRef(S),s()},R=c=>{if(p===c.pointerId){p=null,g.style.cursor=e.drag?"grab":"";try{c.target.releasePointerCapture(c.pointerId)}catch{}h.value=!1,m()}},N=c=>{c.preventDefault()},Y=c=>{c.button===2&&(L=!0,T={x:c.clientX,y:c.clientY})},H=c=>{if(!L||!e.drag)return;let f=c.clientX-T.x,x=c.clientY-T.y;T={x:c.clientX,y:c.clientY};let S=r.value,C=S.state,{dWorldX:O,dWorldY:k}=Cr(f,x,C.zoom,C.rotX,C.rotY);S.update({target:[C.target[0]+O,C.target[1]+k,C.target[2]]}),i(),o.updateCameraFromRef(S),s()},b=c=>{c.button===2&&L&&(L=!1,m())};g.style.cursor="grab",g.style.touchAction="none",g.style.userSelect="none",g.addEventListener("pointerdown",_),g.addEventListener("pointermove",D),g.addEventListener("pointerup",R),g.addEventListener("pointercancel",R),g.addEventListener("contextmenu",N),g.addEventListener("mousedown",Y),g.addEventListener("mousemove",H),g.addEventListener("mouseup",b),y=()=>{g.removeEventListener("pointerdown",_),g.removeEventListener("pointermove",D),g.removeEventListener("pointerup",R),g.removeEventListener("pointercancel",R),g.removeEventListener("contextmenu",N),g.removeEventListener("mousedown",Y),g.removeEventListener("mousemove",H),g.removeEventListener("mouseup",b),g.style.cursor="",g.style.touchAction="",g.style.userSelect=""}}function M(){let g=a.value;if(!g)return;let L=!1,T=null,_=D=>{if(!e.wheel)return;D.preventDefault();let R=D.deltaMode===1?16:D.deltaMode===2?100:1,N=D.deltaY*R;D.ctrlKey?N*=Pl:N*=vl;let Y=r.value;if(e.dolly){let H=e.minDistance??br,b=e.maxDistance??Sr,c=Math.max(H,Math.min(b,Y.state.distance+N*Sl));Y.update({distance:c})}else{let H=Math.exp(-N*hl),b=e.minZoom??vr,c=e.maxZoom??xr,f=Math.max(b,Math.min(c,Y.state.zoom*H));Y.update({zoom:f})}i(),o.updateCameraFromRef(Y),L||(L=!0,d()),s(),T!==null&&clearTimeout(T),T=setTimeout(()=>{T=null,L=!1,m()},gl)};g.addEventListener("wheel",_,{passive:!1}),P=()=>{g.removeEventListener("wheel",_),T!==null&&clearTimeout(T)}}function A(){let g=null,L=!1,T=0,_=D=>{if(L)return;let R=e.animate;if(!R){g=requestAnimationFrame(_);return}if(h.value)T=D;else{let N=Math.min(xl,T?D-T:Pr);T=D;let H=(R.speed??bl)*(N/Pr),b=r.value,c=b.state;if(R.axis==="x"){let f=((c.rotX+H)%360+360)%360;b.update({rotX:f})}else{let f=((c.rotY+H)%360+360)%360;b.update({rotY:f})}i(),o.updateCameraFromRef(b),s()}g=requestAnimationFrame(_)};g=requestAnimationFrame(_),v=()=>{L=!0,g!==null&&cancelAnimationFrame(g),v=null}}return pl(()=>{e.drag&&E(),e.wheel&&M(),e.animate&&A()}),yl(()=>{y?.(),P?.(),v?.(),y=null,P=null}),En(()=>e.drag,g=>{g&&!y&&E(),!g&&y&&(y(),y=null)}),En(()=>e.wheel,g=>{g&&!P&&M(),!g&&P&&(P(),P=null)}),En(()=>!!e.animate,g=>{g&&!v&&A(),!g&&v&&v()}),()=>null}});import{defineComponent as El,inject as Tl,onMounted as Al,onBeforeUnmount as wl,watch as Tn,ref as Ll}from"vue";import{BASE_TILE as Er}from"@layoutit/polycss-core";var Rl=150,Tr=4,Ol=513e-6,Dl=10,kl=3,Ar=16.67,Il=50,wr=.1,Lr=10,Rr=0,Or=5e3,Fl=.3,Vl=.05;function _l(e){return e===!0?-1:e===void 0||e===!1?1:e}function Dr(e,t,n,o,r){let a=_l(r),i=e/Tr*a,u=t/Tr*a;return{rotX:n-u,rotY:((o-i)%360+360)%360}}function Bl(e,t,n,o,r){let a=Math.max(.01,n),i=Math.max(.1,Math.cos(o*Math.PI/180)),u=-e/(a*Er),s=-t/(a*Er*i),d=-r*Math.PI/180,m=Math.cos(d),p=Math.sin(d);return{dWorldX:s*m-u*p,dWorldY:s*p+u*m}}var kr=El({name:"PolyMapControls",props:{drag:{type:Boolean,default:!0},wheel:{type:Boolean,default:!0},dolly:{type:Boolean,default:!1},invert:{type:[Boolean,Number],default:!1},minZoom:{type:Number,default:wr},maxZoom:{type:Number,default:Lr},minDistance:{type:Number,default:Rr},maxDistance:{type:Number,default:Or},animate:{type:[Boolean,Object],default:!1}},emits:{change:e=>!0,"interaction-start":e=>!0,"interaction-end":e=>!0},setup(e,{emit:t}){let n=Tl(ue,null);if(!n)return typeof console<"u"&&console.warn("[polycss] <PolyMapControls> must be used inside <PolyCamera>."),()=>null;let{store:o,cameraRef:r,cameraElRef:a,applyTransformDirect:i}=n,u=()=>({rotX:r.value.state.rotX,rotY:r.value.state.rotY,zoom:r.value.state.zoom,target:r.value.state.target,distance:r.value.state.distance}),s=()=>{t("change",u())},d=()=>{t("interaction-start",u())},m=()=>{t("interaction-end",u())},p=null,l={x:0,y:0},h=Ll(!1),y=null,P=null,v=null;function E(){let g=a.value;if(!g)return;let L=!1,T={x:0,y:0},_=c=>{if(e.drag&&p===null&&c.isPrimary!==!1){c.preventDefault(),p=c.pointerId,l={x:c.clientX,y:c.clientY},g.style.cursor="grabbing";try{c.target.setPointerCapture(c.pointerId)}catch{}e.animate&&e.animate.pauseOnInteraction!==!1&&(h.value=!0),d()}},D=c=>{if(p===null||c.pointerId!==p||!e.drag)return;c.preventDefault();let f=c.clientX-l.x,x=c.clientY-l.y;l={x:c.clientX,y:c.clientY};let S=r.value,C=S.state;if(c.shiftKey){let{rotX:O,rotY:k}=Dr(f,x,C.rotX,C.rotY,e.invert);S.update({rotX:O,rotY:k})}else{let{dWorldX:O,dWorldY:k}=Bl(f,x,C.zoom,C.rotX,C.rotY);S.update({target:[C.target[0]+O,C.target[1]+k,C.target[2]]})}i(),o.updateCameraFromRef(S),s()},R=c=>{if(p===c.pointerId){p=null,g.style.cursor=e.drag?"grab":"";try{c.target.releasePointerCapture(c.pointerId)}catch{}h.value=!1,m()}},N=c=>{c.preventDefault()},Y=c=>{c.button===2&&(L=!0,T={x:c.clientX,y:c.clientY})},H=c=>{if(!L||!e.drag)return;let f=c.clientX-T.x,x=c.clientY-T.y;T={x:c.clientX,y:c.clientY};let S=r.value,C=S.state,{rotX:O,rotY:k}=Dr(f,x,C.rotX,C.rotY,e.invert);S.update({rotX:O,rotY:k}),i(),o.updateCameraFromRef(S),s()},b=c=>{c.button===2&&L&&(L=!1,m())};g.style.cursor="grab",g.style.touchAction="none",g.style.userSelect="none",g.addEventListener("pointerdown",_),g.addEventListener("pointermove",D),g.addEventListener("pointerup",R),g.addEventListener("pointercancel",R),g.addEventListener("contextmenu",N),g.addEventListener("mousedown",Y),g.addEventListener("mousemove",H),g.addEventListener("mouseup",b),y=()=>{g.removeEventListener("pointerdown",_),g.removeEventListener("pointermove",D),g.removeEventListener("pointerup",R),g.removeEventListener("pointercancel",R),g.removeEventListener("contextmenu",N),g.removeEventListener("mousedown",Y),g.removeEventListener("mousemove",H),g.removeEventListener("mouseup",b),g.style.cursor="",g.style.touchAction="",g.style.userSelect=""}}function M(){let g=a.value;if(!g)return;let L=!1,T=null,_=D=>{if(!e.wheel)return;D.preventDefault();let R=D.deltaMode===1?16:D.deltaMode===2?100:1,N=D.deltaY*R;D.ctrlKey?N*=Dl:N*=kl;let Y=r.value;if(e.dolly){let H=e.minDistance??Rr,b=e.maxDistance??Or,c=Math.max(H,Math.min(b,Y.state.distance+N*Vl));Y.update({distance:c})}else{let H=Math.exp(-N*Ol),b=e.minZoom??wr,c=e.maxZoom??Lr,f=Math.max(b,Math.min(c,Y.state.zoom*H));Y.update({zoom:f})}i(),o.updateCameraFromRef(Y),L||(L=!0,d()),s(),T!==null&&clearTimeout(T),T=setTimeout(()=>{T=null,L=!1,m()},Rl)};g.addEventListener("wheel",_,{passive:!1}),P=()=>{g.removeEventListener("wheel",_),T!==null&&clearTimeout(T)}}function A(){let g=null,L=!1,T=0,_=D=>{if(L)return;let R=e.animate;if(!R){g=requestAnimationFrame(_);return}if(h.value)T=D;else{let N=Math.min(Il,T?D-T:Ar);T=D;let H=(R.speed??Fl)*(N/Ar),b=r.value,c=b.state;if(R.axis==="x"){let f=((c.rotX+H)%360+360)%360;b.update({rotX:f})}else{let f=((c.rotY+H)%360+360)%360;b.update({rotY:f})}i(),o.updateCameraFromRef(b),s()}g=requestAnimationFrame(_)};g=requestAnimationFrame(_),v=()=>{L=!0,g!==null&&cancelAnimationFrame(g),v=null}}return Al(()=>{e.drag&&E(),e.wheel&&M(),e.animate&&A()}),wl(()=>{y?.(),P?.(),v?.(),y=null,P=null}),Tn(()=>e.drag,g=>{g&&!y&&E(),!g&&y&&(y(),y=null)}),Tn(()=>e.wheel,g=>{g&&!P&&M(),!g&&P&&(P(),P=null)}),Tn(()=>!!e.animate,g=>{g&&!v&&A(),!g&&v&&v()}),()=>null}});import{defineComponent as zl,h as jt,inject as Ir,onBeforeUnmount as Fr,onMounted as An,ref as Ct,computed as mt}from"vue";import{arrowPolygons as Hl,eulerXYZFromQuat as Nl,planePolygons as Yl,quatFromAxisAngle as jl,quatFromEulerXYZ as $l,quatMultiply as Xl,ringQuadPolygons as Ul}from"@layoutit/polycss-core";var $t="#ff3653",Xt="#8adb00",Ut="#2c8fff",Wl=.6,ql=.8,Gl=1,Oe=50,Vr=60,Zl=.6,Kl=.0125,Ql=.15,Jl=.04,eu=1,_r=.02,wn=1.04,tu=.1,nu=.25,$r=1e-4,Mt={0:1,1:0,2:2},Br=[{cssAxis:0,sign:1,key:"x",color:$t},{cssAxis:0,sign:-1,key:"-x",color:$t},{cssAxis:1,sign:1,key:"y",color:Xt},{cssAxis:1,sign:-1,key:"-y",color:Xt},{cssAxis:2,sign:1,key:"z",color:Ut},{cssAxis:2,sign:-1,key:"-z",color:Ut}],zr=[{cssAxis:0,key:"x",color:$t},{cssAxis:1,key:"y",color:Xt},{cssAxis:2,key:"z",color:Ut}],Hr=[{perpAxis:2,axisA:0,axisB:1,key:"xy",color:Ut},{perpAxis:1,axisA:0,axisB:2,key:"xz",color:Xt},{perpAxis:0,axisA:1,axisB:2,key:"yz",color:$t}];function Ln(e,t){let n=/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(e);if(!n)return e;let o=parseInt(n[1],16),r=parseInt(n[2],16),a=parseInt(n[3],16);return`rgba(${o}, ${r}, ${a}, ${t})`}function Wt(e,t){return!t||t<=0?e:Math.round(e/t)*t}function ou(e){return e.replace("-","")[0]}function Rn(e,t,n,o){let r=n*Math.PI/180,a=o*Math.PI/180,i=[0,0,0];i[e]=t;let u=i[0]*Math.sin(a)+i[1]*Math.cos(a),s=i[2];return u*Math.sin(r)+s*Math.cos(r)<0}function ru(e){if(e.length===0)return Vr;let t=1/0,n=1/0,o=1/0,r=-1/0,a=-1/0,i=-1/0;for(let u of e)for(let s of u.vertices)s[0]<t&&(t=s[0]),s[0]>r&&(r=s[0]),s[1]<n&&(n=s[1]),s[1]>a&&(a=s[1]),s[2]<o&&(o=s[2]),s[2]>i&&(i=s[2]);return Number.isFinite(t)?Math.max(r-t,a-n,i-o)*Oe*Zl:Vr}function au(e){if(e.length===0)return[0,0,0];let t=1/0,n=1/0,o=1/0,r=-1/0,a=-1/0,i=-1/0;for(let u of e)for(let s of u.vertices)s[0]<t&&(t=s[0]),s[0]>r&&(r=s[0]),s[1]<n&&(n=s[1]),s[1]>a&&(a=s[1]),s[2]<o&&(o=s[2]),s[2]>i&&(i=s[2]);return Number.isFinite(t)?[(n+a)/2*Oe,(t+r)/2*Oe,(o+i)/2*Oe]:[0,0,0]}function Nr(e){let t=e.shaftLengthCss,n=[0,0,0];n[e.cssAxis]=e.sign;let o=e.wrapper.ownerDocument.createElement("div");o.style.position="absolute",o.style.left="0",o.style.top="0",o.style.width="0",o.style.height="0",o.style.transform=`translate3d(${n[0]*t}px, ${n[1]*t}px, ${n[2]*t}px)`,e.wrapper.appendChild(o);let r=e.wrapper.getBoundingClientRect(),a=o.getBoundingClientRect();e.wrapper.removeChild(o);let i=(a.left-r.left)/t,u=(a.top-r.top)/t,s=i*i+u*u;if(s<$r)return;let d=e.target.getPosition()??[0,0,0];e.onMouseDown?.(),e.onDraggingChanged?.(!0);let m=l=>{let h=l.clientX-e.startClientX,y=l.clientY-e.startClientY,P=(h*i+y*u)/s;P=Wt(P,e.translationSnap);let v=[d[0]+P*n[0],d[1]+P*n[1],d[2]+P*n[2]];e.onObjectChange?.({object:e.target,position:v}),e.onChange?.()},p=()=>{window.removeEventListener("pointermove",m),window.removeEventListener("pointerup",p),window.removeEventListener("pointercancel",p);let l=h=>{h.stopPropagation(),h.stopImmediatePropagation()};window.addEventListener("click",l,{capture:!0,once:!0}),setTimeout(()=>window.removeEventListener("click",l,!0),0),e.onMouseUp?.(),e.onDraggingChanged?.(!1)};window.addEventListener("pointermove",m),window.addEventListener("pointerup",p),window.addEventListener("pointercancel",p)}function Yr(e){let t=[0,0,0];t[e.axisA]=1;let n=[0,0,0];n[e.axisB]=1;let o=e.probeDistanceCss;function r(p){let l=e.wrapper.ownerDocument.createElement("div");l.style.position="absolute",l.style.left="0",l.style.top="0",l.style.width="0",l.style.height="0",l.style.transform=`translate3d(${p[0]*o}px, ${p[1]*o}px, ${p[2]*o}px)`,e.wrapper.appendChild(l);let h=e.wrapper.getBoundingClientRect(),y=l.getBoundingClientRect();return e.wrapper.removeChild(l),{x:(y.left-h.left)/o,y:(y.top-h.top)/o}}let a=r(t),i=r(n),u=a.x*i.y-i.x*a.y;if(Math.abs(u)<$r)return;let s=e.target.getPosition()??[0,0,0];e.onMouseDown?.(),e.onDraggingChanged?.(!0);let d=p=>{let l=p.clientX-e.startClientX,h=p.clientY-e.startClientY,y=(i.y*l-i.x*h)/u,P=(-a.y*l+a.x*h)/u;y=Wt(y,e.translationSnap),P=Wt(P,e.translationSnap);let v=[s[0]+y*t[0]+P*n[0],s[1]+y*t[1]+P*n[1],s[2]+y*t[2]+P*n[2]];e.onObjectChange?.({object:e.target,position:v}),e.onChange?.()},m=()=>{window.removeEventListener("pointermove",d),window.removeEventListener("pointerup",m),window.removeEventListener("pointercancel",m),e.onMouseUp?.(),e.onDraggingChanged?.(!1)};window.addEventListener("pointermove",d),window.addEventListener("pointerup",m),window.addEventListener("pointercancel",m)}function jr(e){let t=e.wrapper.getBoundingClientRect(),n=t.left,o=t.top,r=Math.atan2(e.startClientY-o,e.startClientX-n),a=0,i=e.target.getRotation()??[0,0,0],u=$l(i);e.onMouseDown?.(),e.onDraggingChanged?.(!0);let s=m=>{let p=Math.atan2(m.clientY-o,m.clientX-n),l=p-r;l>Math.PI?l-=2*Math.PI:l<-Math.PI&&(l+=2*Math.PI),a+=l,r=p;let h=a*180/Math.PI;h=Wt(h,e.rotationSnap);let y=[0,0,0];y[e.cssAxis]=1;let P=jl(y,h*Math.PI/180),v=Nl(Xl(P,u));e.onObjectChange?.({object:e.target,rotation:v}),e.onChange?.()},d=()=>{window.removeEventListener("pointermove",s),window.removeEventListener("pointerup",d),window.removeEventListener("pointercancel",d);let m=p=>{p.stopPropagation(),p.stopImmediatePropagation()};window.addEventListener("click",m,{capture:!0,once:!0}),setTimeout(()=>window.removeEventListener("click",m,!0),0),e.onMouseUp?.(),e.onDraggingChanged?.(!1),e.target.rebakeAtlas()};window.addEventListener("pointermove",s),window.addEventListener("pointerup",d),window.addEventListener("pointercancel",d)}function iu(e){return!!e&&typeof e=="object"&&"value"in e}function su(e){return e?iu(e)?e.value??null:e:null}var Xr=zl({name:"PolyTransformControls",props:{object:{type:null,default:null},mode:{type:String,default:"translate"},space:{type:String,default:"world"},size:{type:Number,default:1},showX:{type:Boolean,default:!0},showY:{type:Boolean,default:!0},showZ:{type:Boolean,default:!0},translationSnap:{type:Number,default:null},rotationSnap:{type:Number,default:null},enabled:{type:Boolean,default:!0}},emits:{change:()=>!0,objectChange:e=>!0,mouseDown:()=>!0,mouseUp:()=>!0,draggingChanged:e=>!0},setup(e,{emit:t}){let n=Ct(null),o=Ct(null),r=Ct(new Map),a=mt(()=>su(e.object)),i=Ct(0);An(()=>{i.value++});let u=Ct(0),s=Ir(ue,void 0),d=null;An(()=>{let c=s?.store;c&&(d=c.subscribe(()=>{u.value++}))}),Fr(()=>{d?.()});function m(){u.value;let c=s?.store.getState().cameraState;return{rotX:c?.rotX??65,rotY:c?.rotY??45}}let p=mt(()=>(i.value,ru(a.value?.getPolygons()??[]))),l=mt(()=>p.value*e.size);function h(c){return o.value===c?Gl:n.value===c?ql:Wl}function y(){t("change")}function P(c){t("objectChange",c)}function v(c){t("draggingChanged",c)}function E(){t("mouseDown")}function M(){t("mouseUp")}let A=Ir(ue,void 0),g=null;An(()=>{let c=A?.cameraElRef.value;if(!c)return;let f=x=>{let S=a.value;if(!S||!e.enabled||x.target?.closest(".polycss-transform-gizmo"))return;let O={x:e.showX,y:e.showY,z:e.showZ};if(e.mode==="translate")for(let w of Hr){let B=["x","y","z"][w.axisA],W=["x","y","z"][w.axisB];if(!O[B]||!O[W])continue;let Z=document.querySelector(`.polycss-transform-plane--${w.key}`);if(!Z||!ut(Z,x.clientX,x.clientY))continue;x.preventDefault(),x.stopPropagation();let q=Z.closest("[data-poly-transform-controls]");if(!q)return;o.value=w.key,Yr({axisA:w.axisA,axisB:w.axisB,probeDistanceCss:l.value,wrapper:q,target:S,startClientX:x.clientX,startClientY:x.clientY,translationSnap:e.translationSnap,onChange:y,onObjectChange:P,onMouseDown:E,onMouseUp:M,onDraggingChanged:$=>{$||(o.value=null),v($)}});return}let k=e.mode==="translate"?Br:zr;for(let w of k){let B=w.key.replace("-","")[0];if(!O[B])continue;let W=document.querySelector(`.polycss-transform-${e.mode==="translate"?"arrow":"ring"}--${w.key}`);if(!W||!(e.mode==="rotate"?ut(W,x.clientX,x.clientY):ut(W,x.clientX,x.clientY)))continue;x.preventDefault(),x.stopPropagation();let q=W.closest("[data-poly-transform-controls]");if(!q)return;if(o.value=w.key,e.mode==="translate"){let $=w;Nr({cssAxis:$.cssAxis,sign:$.sign,shaftLengthCss:l.value,wrapper:q,target:S,startClientX:x.clientX,startClientY:x.clientY,translationSnap:e.translationSnap,onChange:y,onObjectChange:P,onMouseDown:E,onMouseUp:M,onDraggingChanged:ee=>{ee||(o.value=null),v(ee)}})}else jr({cssAxis:w.cssAxis,wrapper:q,target:S,startClientX:x.clientX,startClientY:x.clientY,rotationSnap:e.rotationSnap,onChange:y,onObjectChange:P,onMouseDown:E,onMouseUp:M,onDraggingChanged:$=>{$||(o.value=null),v($)}});return}};c.addEventListener("pointerdown",f),g=()=>c.removeEventListener("pointerdown",f)}),Fr(()=>{g?.()});let L=mt(()=>{if(e.mode!=="translate")return[];i.value;let f=l.value/Oe,{rotX:x,rotY:S}=m();return Br.filter(C=>({x:e.showX,y:e.showY,z:e.showZ})[ou(C.key)]).map(C=>{let O=h(C.key),k=Rn(C.cssAxis,C.sign,x,S);return{spec:C,polygons:Hl({axis:Mt[C.cssAxis],sign:C.sign,shaftLength:f,shaftHalfThickness:f*Kl,headLength:f*Ql,headHalfThickness:f*Jl,color:Ln(C.color,O),shaft:!k})}})}),T=mt(()=>{if(e.mode!=="translate")return[];i.value;let f=l.value/Oe,x={x:e.showX,y:e.showY,z:e.showZ},S=["x","y","z"],{rotX:C,rotY:O}=m(),k=f*nu;return Hr.filter(w=>x[S[w.axisA]]&&x[S[w.axisB]]).map(w=>{let B=h(w.key),W=Mt[w.perpAxis],Z=(W+1)%3,q=(W+2)%3,$=Mt[Z],ee=Mt[q],ne=Rn($,1,C,O)?-1:1,ie=Rn(ee,1,C,O)?-1:1;return{spec:w,polygons:Yl({axis:W,size:f*tu,offset:[ne*k,ie*k],color:Ln(w.color,B)})}})}),_=mt(()=>{if(e.mode!=="rotate")return[];i.value;let x=l.value*eu/Oe*wn;return zr.filter(S=>({x:e.showX,y:e.showY,z:e.showZ})[S.key]).map(S=>{let C=h(S.key);return{spec:S,polygons:Ul({axis:Mt[S.cssAxis],outerRadius:x,color:Ln(S.color,C)})}})}),D=(1-_r)/wn,R=(1+_r)/wn;function N(c){return f=>{if(!e.enabled)return;let x=a.value;if(!x)return;f.stopPropagation();let C=f.eventObject.element?.closest("[data-poly-transform-controls]");C&&(o.value=c.key,Nr({cssAxis:c.cssAxis,sign:c.sign,shaftLengthCss:l.value,wrapper:C,target:x,startClientX:f.nativeEvent.clientX,startClientY:f.nativeEvent.clientY,translationSnap:e.translationSnap,onChange:y,onObjectChange:P,onMouseDown:E,onMouseUp:M,onDraggingChanged:O=>{O||(o.value=null),v(O)}}))}}function Y(c){return f=>{if(!e.enabled)return;let x=a.value;if(!x)return;f.stopPropagation();let C=f.eventObject.element?.closest("[data-poly-transform-controls]");C&&(o.value=c.key,Yr({axisA:c.axisA,axisB:c.axisB,probeDistanceCss:l.value,wrapper:C,target:x,startClientX:f.nativeEvent.clientX,startClientY:f.nativeEvent.clientY,translationSnap:e.translationSnap,onChange:y,onObjectChange:P,onMouseDown:E,onMouseUp:M,onDraggingChanged:O=>{O||(o.value=null),v(O)}}))}}function H(c){return f=>{if(!e.enabled)return;let x=a.value;if(!x)return;let S=f.eventObject.element;f.stopPropagation();let C=S?.closest("[data-poly-transform-controls]");C&&(o.value=c.key,jr({cssAxis:c.cssAxis,wrapper:C,target:x,startClientX:f.nativeEvent.clientX,startClientY:f.nativeEvent.clientY,rotationSnap:e.rotationSnap,onChange:y,onObjectChange:P,onMouseDown:E,onMouseUp:M,onDraggingChanged:O=>{O||(o.value=null),v(O)}}))}}function b(c){return{onPointerOver:()=>{n.value=c},onPointerOut:()=>{n.value===c&&(n.value=null)}}}return()=>{let c=a.value;if(!c)return null;let f=c.getPosition()??[0,0,0],x=au(c.getPolygons()),S=f[1]*Oe+x[0],C=f[0]*Oe+x[1],O=f[2]*Oe+x[2],k={transform:`translate3d(${S}px, ${C}px, ${O}px)`,position:"absolute",transformStyle:"preserve-3d",zIndex:1e3},w=e.mode==="translate"?[...L.value.map(({spec:B,polygons:W})=>jt(te,{key:`arrow-${B.key}`,polygons:W,class:`polycss-transform-gizmo polycss-transform-arrow polycss-transform-arrow--${B.key}`,textureLighting:"baked",onPointerDown:N(B),...b(B.key)})),...T.value.map(({spec:B,polygons:W})=>jt(te,{key:`plane-${B.key}`,polygons:W,class:`polycss-transform-gizmo polycss-transform-plane polycss-transform-plane--${B.key}`,textureLighting:"baked",onPointerDown:Y(B),...b(B.key)}))]:_.value.map(({spec:B,polygons:W})=>jt(te,{key:B.key,polygons:W,class:`polycss-transform-gizmo polycss-transform-ring polycss-transform-ring--${B.key}`,style:{"--ring-inner-ratio":D,"--ring-outer-ratio":R},textureLighting:"baked",onPointerDown:H(B),...b(B.key)}));return jt("div",{class:"polycss-transform-controls","data-poly-transform-controls":"","data-poly-mode":e.mode,"data-poly-space":e.space,style:k},w)}}});import{defineComponent as lu,inject as uu,onMounted as cu,onBeforeUnmount as du,watch as mu}from"vue";import{BASE_TILE as pu}from"@layoutit/polycss-core";var yu={enabled:!0,lookEnabled:!0,moveEnabled:!0,jumpEnabled:!0,crouchEnabled:!0,lookSensitivity:.15,invertY:!1,moveSpeed:5,jumpVelocity:7,gravity:18,eyeHeight:1.7,crouchHeight:1,groundZ:0,minPitch:5,maxPitch:175};function On(e,t){return{enabled:t.enabled??e.enabled,lookEnabled:t.lookEnabled??e.lookEnabled,moveEnabled:t.moveEnabled??e.moveEnabled,jumpEnabled:t.jumpEnabled??e.jumpEnabled,crouchEnabled:t.crouchEnabled??e.crouchEnabled,lookSensitivity:t.lookSensitivity??e.lookSensitivity,invertY:t.invertY??e.invertY,moveSpeed:t.moveSpeed??e.moveSpeed,jumpVelocity:t.jumpVelocity??e.jumpVelocity,gravity:t.gravity??e.gravity,eyeHeight:t.eyeHeight??e.eyeHeight,crouchHeight:t.crouchHeight??e.crouchHeight,groundZ:t.groundZ??e.groundZ,minPitch:t.minPitch??e.minPitch,maxPitch:t.maxPitch??e.maxPitch}}var Wr=new Set(["KeyW","ArrowUp"]),qr=new Set(["KeyS","ArrowDown"]),Gr=new Set(["KeyA","ArrowLeft"]),Zr=new Set(["KeyD","ArrowRight"]),Kr=new Set(["Space"]),Dn=new Set(["ControlLeft","ControlRight"]);function Ur(e){return Wr.has(e)||qr.has(e)||Gr.has(e)||Zr.has(e)||Kr.has(e)||Dn.has(e)}function fu(){return{change:[],start:[],end:[]}}function pt(e,t){let n=[...e[t]];for(let o of n)try{o()}catch{}}var Qr=lu({name:"PolyFirstPersonControls",props:{enabled:{type:Boolean,default:!0},lookEnabled:{type:Boolean,default:!0},moveEnabled:{type:Boolean,default:!0},jumpEnabled:{type:Boolean,default:!0},crouchEnabled:{type:Boolean,default:!0},lookSensitivity:{type:Number,default:.15},invertY:{type:Boolean,default:!1},moveSpeed:{type:Number,default:5},jumpVelocity:{type:Number,default:7},gravity:{type:Number,default:18},eyeHeight:{type:Number,default:1.7},crouchHeight:{type:Number,default:1},groundZ:{type:Number,default:0},minPitch:{type:Number,default:5},maxPitch:{type:Number,default:175}},emits:{change:e=>!0,"interaction-start":e=>!0,"interaction-end":e=>!0},setup(e,{emit:t,expose:n}){let o=uu(ue,null);if(!o)return typeof console<"u"&&console.warn("[polycss] <PolyFirstPersonControls> must be used inside <PolyCamera>."),n({}),()=>null;let{store:r,cameraRef:a,cameraElRef:i,applyTransformDirect:u}=o,s=On(yu,e),d=[0,0,0],m=null,p=0,l=!1,h=!1,y=!1,P=new Set,v=0,E=0,M=fu();function A(c,f){let x=c*Math.PI/180,S=f*Math.PI/180;return[-Math.sin(x)*Math.cos(S),-Math.sin(x)*Math.sin(S),-Math.cos(x)]}function g(){let c=i.value,f=c?getComputedStyle(c).perspective:"",x=parseFloat(f);return(Number.isFinite(x)&&x>0?x:32e3)/pu}function L(){let c=a.value.state,f=A(c.rotX??90,c.rotY??0),x=g();return[d[0]+f[0]*x,d[1]+f[1]*x,d[2]+f[2]*x]}function T(){let c=L(),f=a.value;f.update({target:c}),u(),r.updateCameraFromRef(f)}let _=.05;function D(c){if(m===null||l)return;let f=Math.min(_,p?(c-p)/1e3:.0167);if(p=c,s.enabled){let x=!1,S=a.value.state;if(s.moveEnabled){let w=0,B=0;for(let W of P)Wr.has(W)?w+=1:qr.has(W)?w-=1:Zr.has(W)?B+=1:Gr.has(W)&&(B-=1);if(w!==0||B!==0){let Z=(S.rotY??0)*Math.PI/180,q=-Math.cos(Z),$=-Math.sin(Z),ee=-Math.sin(Z),ne=Math.cos(Z),ie=Math.hypot(w,B)||1,J=s.moveSpeed*f;d[0]+=(q*w+ee*B)/ie*J,d[1]+=($*w+ne*B)/ie*J,x=!0}}let O=s.crouchEnabled&&(P.has("ControlLeft")||P.has("ControlRight"))?s.crouchHeight:s.eyeHeight;s.jumpEnabled&&(v!==0||E>0)?(v-=s.gravity*f,E+=v*f,E<=0&&(E=0,v=0)):s.jumpEnabled||(E=0,v=0);let k=s.groundZ+O+E;if(Math.abs(d[2]-k)>1e-4&&(d[2]=k,x=!0),x){let w=L(),B=a.value;B.update({target:w}),u(),r.updateCameraFromRef(B),pt(M,"change");try{t("change",[d[0],d[1],d[2]])}catch{}}}m=requestAnimationFrame(D)}function R(){m!==null||l||(p=0,m=requestAnimationFrame(D))}function N(){m!==null&&(cancelAnimationFrame(m),m=null)}let Y=null;function H(){let c=i.value;if(!c)return;let f=c.ownerDocument??document,x=f.defaultView??globalThis,S=()=>{if(!(!s.enabled||!s.lookEnabled||l||h))try{c.requestPointerLock()}catch{}},C=()=>{let $=f.pointerLockElement===c;if($!==h){if(h=$,$){y=!0,pt(M,"start");try{t("interaction-start",[d[0],d[1],d[2]])}catch{}}else if(y){y=!1,pt(M,"end");try{t("interaction-end",[d[0],d[1],d[2]])}catch{}}}},O=$=>{if(!h||l||!s.enabled||!s.lookEnabled)return;let ee=$.movementX??0,ne=$.movementY??0;if(ee===0&&ne===0)return;let ie=a.value,J=ie.state,F=s.lookSensitivity,U=s.invertY?-1:1,j=(((J.rotY??0)-ee*F)%360+360)%360,V=(J.rotX??90)-ne*F*U;V<s.minPitch?V=s.minPitch:V>s.maxPitch&&(V=s.maxPitch);let X=A(V,j),G=g(),se=[d[0]+X[0]*G,d[1]+X[1]*G,d[2]+X[2]*G];ie.update({rotX:V,rotY:j,target:se}),u(),r.updateCameraFromRef(ie),pt(M,"change");try{t("change",[d[0],d[1],d[2]])}catch{}},k=$=>{if(!(!s.enabled||l)&&Ur($.code)&&!(!h&&!s.moveEnabled)){if(Kr.has($.code)){if(!s.jumpEnabled)return;$.preventDefault(),!P.has($.code)&&v===0&&E===0&&(v=s.jumpVelocity),P.add($.code);return}Dn.has($.code)&&!s.crouchEnabled||!s.moveEnabled&&!Dn.has($.code)||($.preventDefault(),P.add($.code))}},w=$=>{Ur($.code)&&P.delete($.code)},B=()=>{P.clear()};c.addEventListener("click",S),f.addEventListener("pointerlockchange",C),f.addEventListener("mousemove",O),x.addEventListener("keydown",k),x.addEventListener("keyup",w),x.addEventListener("blur",B);let W=x.getComputedStyle(c).perspective,Z=parseFloat(W),q=Number.isFinite(Z)&&Z>0?Z:2e3;c.style.setProperty("--polycss-fpv-perspective",`${q}px`),c.classList.add("polycss-fpv-host"),Y=()=>{if(c.removeEventListener("click",S),f.removeEventListener("pointerlockchange",C),f.removeEventListener("mousemove",O),x.removeEventListener("keydown",k),x.removeEventListener("keyup",w),x.removeEventListener("blur",B),c.style.cursor="",c.classList.remove("polycss-fpv-host"),c.style.removeProperty("--polycss-fpv-perspective"),P.clear(),h)try{f.exitPointerLock()}catch{}}}n({update(c){s=On(s,c);let f=i.value;f&&!l&&(f.style.cursor=s.lookEnabled?"crosshair":"")},resume(){if(!l)return;l=!1;let c=i.value;c&&(c.style.cursor=s.lookEnabled?"crosshair":""),R()},pause(){if(l)return;l=!0,N();let c=i.value;if(c&&(c.style.cursor=""),y){y=!1,pt(M,"end");try{t("interaction-end",[d[0],d[1],d[2]])}catch{}}},destroy(){l=!0,N()},lock(){if(!s.enabled||!s.lookEnabled||l)return;let c=i.value;try{c?.requestPointerLock()}catch{}},unlock(){if(h){let c=i.value;try{c?.ownerDocument?.exitPointerLock()}catch{}}},isLocked(){return h},getOrigin(){return[d[0],d[1],d[2]]},setOrigin(c){d[0]=c[0],d[1]=c[1],d[2]=c[2],T(),pt(M,"change");try{t("change",[d[0],d[1],d[2]])}catch{}},addEventListener(c,f){let x=M[c];x.includes(f)||x.push(f)},removeEventListener(c,f){let x=M[c],S=x.indexOf(f);S>=0&&x.splice(S,1)},hasEventListener(c,f){return M[c].includes(f)}}),cu(()=>{let c=i.value;if(!c)return;l=!1,h=!1,y=!1,P.clear(),v=0,E=0;let x=a.value.state.target??[0,0,0];d[0]=x[0],d[1]=x[1],d[2]=s.groundZ+s.eyeHeight,T(),c.style.cursor=s.lookEnabled?"crosshair":"",H(),R()}),du(()=>{l=!0,N(),Y?.(),Y=null});let b=["enabled","lookEnabled","moveEnabled","jumpEnabled","crouchEnabled","lookSensitivity","invertY","moveSpeed","jumpVelocity","gravity","eyeHeight","crouchHeight","groundZ","minPitch","maxPitch"];for(let c of b)mu(()=>e[c],()=>{s=On(s,e);let f=i.value;f&&!l&&(f.style.cursor=s.lookEnabled?"crosshair":"")});return()=>null}});import{defineComponent as gu,h as hu,inject as kn,onBeforeUnmount as Pu,onMounted as vu,provide as xu,reactive as bu,ref as Su,computed as Cu}from"vue";var Et=Symbol("polycss.selection"),Jr=gu({name:"PolySelect",props:{multiple:{type:Boolean,default:!1},clearOnMiss:{type:Boolean,default:!0},filter:{type:Function,default:void 0}},emits:{change:e=>!0,pointerMissed:e=>!0},setup(e,{emit:t,slots:n}){let o=bu({selected:[]}),r=Cu(()=>o.selected);function a(m){let p=e.filter?e.filter(m):m;o.selected=p,t("change",p)}let i={get selected(){return o.selected},set:m=>a(m),add:m=>{e.multiple?o.selected.includes(m)||a([...o.selected,m]):a([m])},remove:m=>{o.selected.includes(m)&&a(o.selected.filter(p=>p!==m))},toggle:m=>{o.selected.includes(m)?a(o.selected.filter(p=>p!==m)):e.multiple?a([...o.selected,m]):a([m])},clear:()=>a([]),has:m=>o.selected.includes(m)};xu(Et,{selected:r,api:i});let u=kn(ue,void 0),s=(m,p)=>Cn(m,p,l=>!l.closest("[data-poly-transform-controls]")),d=null;return vu(()=>{let m=u?.cameraElRef.value;if(!m)return;let p=l=>{if(l.target?.closest("[data-poly-transform-controls]"))return;let y=lt(l.target)??s(l.clientX,l.clientY);if(!y){t("pointerMissed",l),e.clearOnMiss&&a([]);return}e.multiple&&(l.shiftKey||l.metaKey||l.ctrlKey)?i.toggle(y):o.selected.length===1&&o.selected[0]===y?a([]):a([y])};m.addEventListener("click",p),d=()=>m.removeEventListener("click",p)}),Pu(()=>{d?.()}),()=>hu("div",{style:{display:"contents"},"data-poly-select":""},n.default?.())}});function ea(){let e=kn(Et,void 0);return e?e.selected:Su([])}function ta(){let e=kn(Et,void 0);if(!e)throw new Error("polycss: usePolySelectionApi must be used inside <PolySelect>.");return e.api}import{defineComponent as Mu,h as Eu,computed as Tu}from"vue";import{axesHelperPolygons as Au}from"@layoutit/polycss-core";var na=Mu({name:"PolyAxesHelper",props:{size:{type:Number,default:void 0},thickness:{type:Number,default:void 0},negative:{type:Boolean,default:void 0},xColor:{type:String,default:void 0},yColor:{type:String,default:void 0},zColor:{type:String,default:void 0}},setup(e){let t=Tu(()=>Au({size:e.size,thickness:e.thickness,negative:e.negative,xColor:e.xColor,yColor:e.yColor,zColor:e.zColor}));return()=>Eu(te,{polygons:t.value,merge:!1})}});import{defineComponent as wu,h as Lu,computed as In}from"vue";import{octahedronPolygons as Ru}from"@layoutit/polycss-core";var oa=wu({name:"PolyDirectionalLightHelper",props:{light:{type:Object,required:!0},target:{type:Array,default:void 0},distance:{type:Number,default:5},size:{type:Number,default:.35},color:{type:String,default:void 0}},setup(e){let t=In(()=>e.color??e.light.color??"#ffd54a"),n=In(()=>Ru({center:[0,0,0],size:e.size,color:t.value})),o=In(()=>{let r=e.light.direction,a=r[0],i=r[1],u=r[2],s=Math.hypot(a,i,u)||1,d=e.target?.[0]??0,m=e.target?.[1]??0,p=e.target?.[2]??0;return[d+a/s*e.distance,m+i/s*e.distance,p+u/s*e.distance]});return()=>Lu(te,{polygons:n.value,position:o.value,merge:!1})}});var Fn={quad:0,clippedSolid:0,atlas:0,stableTriangle:0},Ou={polygonCount:0,mountedPolygonLeafCount:0,shadowLeafCount:0,surfaceLeafCounts:Fn,bucketCount:0};function Du(e){return typeof e=="number"?{polygonCount:e}:e??{}}function yt(e,t){return e.querySelectorAll(t).length}function ku(e,t){let n=e;return typeof n.matches=="function"&&n.matches(t)}function Iu(e,t){if(!t)return[e];let n=[];return ku(e,t)&&n.push(e),n.push(...Array.from(e.querySelectorAll(t))),n}function Fu(e,t){let n=Du(t);if(!e)return{...Ou,surfaceLeafCounts:{...Fn},polygonCount:n.polygonCount??0};let o=Iu(e,n.scopeSelector),r={...Fn},a=0,i=0;for(let s of o)r.quad+=yt(s,"b"),r.clippedSolid+=yt(s,"i"),r.atlas+=yt(s,"s"),r.stableTriangle+=yt(s,"u"),a+=yt(s,"q, .polycss-shadow-svg"),i+=yt(s,".polycss-bucket");let u=r.quad+r.clippedSolid+r.atlas+r.stableTriangle;return{polygonCount:n.polygonCount??u,mountedPolygonLeafCount:u,shadowLeafCount:a,surfaceLeafCounts:r,bucketCount:i}}import{ref as ra,watch as Vu,onUnmounted as _u,computed as qt}from"vue";import{createPolyAnimationMixer as Bu}from"@layoutit/polycss-core";function et(e){return e&&typeof e=="object"&&"value"in e?e.value:e}function zu(e,t,n){let o=ra(null),r=null,a=null,i=null,u=ra(0);function s(){return n==null?o.value:et(n)??o.value}function d(){a!==null&&(cancelAnimationFrame(a),a=null),i=null}function m(){d(),r&&(r.stopAllAction(),r.uncacheRoot(),r=null,u.value++)}function p(){if(a!==null)return;function M(A){if(i===null){i=A,a=requestAnimationFrame(M);return}let g=(A-i)/1e3;i=A,r?.update(g),a=requestAnimationFrame(M)}a=requestAnimationFrame(M)}function l(){m();let M=et(e),A=et(t);if(!M||M.length===0||!A)return;let g=s();g&&(r=Bu(g,A),u.value++,p())}let h=Vu(()=>{let M=et(e),A=et(t),g=n!=null?et(n):o.value;return{c:M,ctrl:A,r:g}},()=>l(),{immediate:!0,deep:!1});_u(()=>{h(),m()});let y=qt(()=>et(e)??[]),P=qt(()=>y.value.map(M=>M.name)),v=qt(()=>(u.value,r)),E=qt(()=>{u.value;let M=y.value,A={};for(let g of M)Object.defineProperty(A,g.name,{enumerable:!0,get(){if(!r)return null;try{return r.clipAction(g.name)}catch{return null}}});return A});return{ref:o,mixer:v,clips:y,names:P,actions:E}}import{CAMERA_BACKFACE_CULL_EPS as Bp,VOXEL_CAMERA_CULL_AXIS_EPS as zp,VOXEL_CAMERA_CULL_NORMAL_LIMIT as Hp,normalizePolygons as Np,mergePolygons as Yp,coverPlanarPolygons as jp,optimizeMeshPolygons as $p,optimizeMeshParseResult as Xp,simplifyTriangleMeshPolygons as Up,repairMeshSeams as Wp,seamFacetSplitPolygons as qp,seamFacetSplitReport as Gp,seamOverlapDiagnostics as Zp,seamOverlapPolygons as Kp,seamOverlapReport as Qp,cullInteriorPolygons as Jp,cameraCullNormalGroups as ey,cameraCullNormalGroupsFromPolygons as ty,cameraCullNormalKey as ny,cameraCullVisibleSignature as oy,cameraFacingDepth as ry,isAxisAlignedSurfaceNormal as ay,isVoxelCameraCullableNormalGroups as iy,normalFacesCamera as sy,polygonCssSurfaceNormal as ly,polygonFacesCamera as uy,parseObj as cy,parseMtl as dy,parseGltf as my,parseStl as py,bakeSolidTextureSamples as yy,bakeSolidTextureSampledPolygons as fy,loadMesh as gy,createIsometricCamera as hy,parseVox as Py,polygonFaces as vy,computeTexturePaintMetrics as xy,computeShapeLighting as by,parseColor as Sy,parsePureColor as Cy,parseHexColor as My,parseRgbColor as Ey,formatColor as Ty,clampChannel as Ay,shadeColor as wy,rotateVec3 as Ly,inverseRotateVec3 as Ry,axesHelperPolygons as Oy,boxPolygons as Dy,arrowPolygons as ky,ringPolygons as Iy,octahedronPolygons as Fy,tetrahedronPolygons as Vy,icosahedronPolygons as _y,dodecahedronPolygons as By,cylinderPolygons as zy,conePolygons as Hy,torusPolygons as Ny,planePolygons as Yy,buildSceneContext as jy,buildPolyMeshTransform as $y,computeSceneBbox as Xy,BASE_TILE as Uy,DEFAULT_CAMERA_STATE as Wy,DEFAULT_PROJECTION as qy,normalizeInvertMultiplier as Gy,createPolyAnimationMixer as Zy,optimizeAnimatedMeshPolygons as Ky,DEFAULT_SEAM_FACET_SPLIT_OPTIONS as Qy,DEFAULT_SEAM_OVERLAP_OPTIONS as Jy,LoopOnce as ef,LoopRepeat as tf,LoopPingPong as nf,worldDirectionToCss as of,worldPositionToCss as rf}from"@layoutit/polycss-core";export{Uy as BASE_TILE,Bp as CAMERA_BACKFACE_CULL_EPS,Wy as DEFAULT_CAMERA_STATE,qy as DEFAULT_PROJECTION,Qy as DEFAULT_SEAM_FACET_SPLIT_OPTIONS,Jy as DEFAULT_SEAM_OVERLAP_OPTIONS,ef as LoopOnce,nf as LoopPingPong,tf as LoopRepeat,rr as Poly,na as PolyAxesHelper,ar as PolyBox,gt as PolyCamera,ue as PolyCameraContextKey,yr as PolyCone,pr as PolyCylinder,oa as PolyDirectionalLightHelper,dr as PolyDodecahedron,Qr as PolyFirstPersonControls,tr as PolyGround,cr as PolyIcosahedron,er as PolyIframe,kr as PolyMapControls,te as PolyMesh,lr as PolyOctahedron,Mr as PolyOrbitControls,gt as PolyOrthographicCamera,zn as PolyPerspectiveCamera,ir as PolyPlane,sr as PolyRing,Oo as PolyScene,Jr as PolySelect,Et as PolySelectionContextKey,mr as PolySphere,ur as PolyTetrahedron,fr as PolyTorus,Xr as PolyTransformControls,zp as VOXEL_CAMERA_CULL_AXIS_EPS,Hp as VOXEL_CAMERA_CULL_NORMAL_LIMIT,ky as arrowPolygons,Oy as axesHelperPolygons,fy as bakeSolidTextureSampledPolygons,yy as bakeSolidTextureSamples,Dy as boxPolygons,$y as buildPolyMeshTransform,jy as buildSceneContext,ey as cameraCullNormalGroups,ty as cameraCullNormalGroupsFromPolygons,ny as cameraCullNormalKey,oy as cameraCullVisibleSignature,ry as cameraFacingDepth,Ay as clampChannel,Fu as collectPolyRenderStats,Xy as computeSceneBbox,by as computeShapeLighting,xy as computeTexturePaintMetrics,Hy as conePolygons,jp as coverPlanarPolygons,hy as createIsometricCamera,Zy as createPolyAnimationMixer,Jp as cullInteriorPolygons,zy as cylinderPolygons,By as dodecahedronPolygons,Cn as findMeshUnderPoint,lt as findPolyMeshHandle,Ty as formatColor,_y as icosahedronPolygons,Tt as injectPolyBaseStyles,Ry as inverseRotateVec3,ay as isAxisAlignedSurfaceNormal,iy as isVoxelCameraCullableNormalGroups,gy as loadMesh,Yp as mergePolygons,sy as normalFacesCamera,Gy as normalizeInvertMultiplier,Np as normalizePolygons,Fy as octahedronPolygons,Ky as optimizeAnimatedMeshPolygons,Xp as optimizeMeshParseResult,$p as optimizeMeshPolygons,Sy as parseColor,my as parseGltf,My as parseHexColor,dy as parseMtl,cy as parseObj,Cy as parsePureColor,Ey as parseRgbColor,py as parseStl,Py as parseVox,Yy as planePolygons,ut as pointInMeshElement,ly as polygonCssSurfaceNormal,vy as polygonFaces,uy as polygonFacesCamera,Wp as repairMeshSeams,Iy as ringPolygons,Ly as rotateVec3,qp as seamFacetSplitPolygons,Gp as seamFacetSplitReport,Zp as seamOverlapDiagnostics,Kp as seamOverlapPolygons,Qp as seamOverlapReport,wy as shadeColor,Up as simplifyTriangleMeshPolygons,Vy as tetrahedronPolygons,Ny as torusPolygons,zu as usePolyAnimation,ot as usePolyCamera,Gs as usePolyMaterial,zt as usePolyMesh,ht as usePolySceneContext,ea as usePolySelect,ta as usePolySelectionApi,of as worldDirectionToPolyCss,rf as worldPositionToPolyCss};