@layoutit/polycss-vue 0.2.0 → 0.2.2

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 Co,h as Eo,provide as Mo,computed as Ao}from"vue";import{ref as it,shallowRef as vo,watch as Po}from"vue";import{createIsometricCamera as bo,BASE_TILE as xo}from"@layoutit/polycss-core";function at(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 ye(e){let t=bo({zoom:e.value.zoom,target:e.value.target,rotX:e.value.rotX,rotY:e.value.rotY,distance:e.value.distance}),n=vo(t),o=it(null),r=it(null),i=it([0,0,0]),s=at(t.state);Po(()=>({zoom:e.value.zoom,target:e.value.target,rotX:e.value.rotX,rotY:e.value.rotY,distance:e.value.distance}),(a,c)=>{let l={};a.zoom!==void 0&&a.zoom!==c?.zoom&&(l.zoom=a.zoom),a.target!==void 0&&a.target!==c?.target&&(l.target=a.target),a.rotX!==void 0&&a.rotX!==c?.rotX&&(l.rotX=a.rotX),a.rotY!==void 0&&a.rotY!==c?.rotY&&(l.rotY=a.rotY),a.distance!==void 0&&a.distance!==c?.distance&&(l.distance=a.distance),Object.keys(l).length>0&&(t.update(l),d(),s.updateCameraFromRef(t),s.notifyAll())});function d(){let a=o.value;if(!a)return;let c=t.state,l=xo,m=i.value,f=c.target[0]+m[0],y=c.target[1]+m[1],p=c.target[2]+m[2],b=y*l,P=f*l,E=p*l,C=c.distance!==0?`translateZ(${-c.distance}px) `:"";a.style.transform=`${C}scale(${c.zoom}) rotateX(${c.rotX}deg) rotate(${c.rotY}deg) translate3d(${-b}px, ${-P}px, ${-E}px)`}return{store:s,cameraRef:n,sceneElRef:o,cameraElRef:r,autoCenterOffset:i,applyTransformDirect:d}}var K=Symbol("polycss-camera");var So=8e3,Le=Co({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=Ao(()=>({zoom:e.zoom,target:e.target,rotX:e.rotX,rotY:e.rotY,distance:e.distance})),{store:o,cameraRef:r,sceneElRef:i,cameraElRef:s,autoCenterOffset:d,applyTransformDirect:a}=ye(n);return Mo(K,{store:o,cameraRef:r,sceneElRef:i,cameraElRef:s,autoCenterOffset:d,applyTransformDirect:a}),()=>{let c=`${typeof e.perspective=="number"?e.perspective:So}px`;return Eo("div",{ref:s,class:`polycss-camera${e.class?` ${e.class}`:""}`,style:{perspective:c}},t.default?.())}}});import{defineComponent as To,h as wo,provide as Lo,computed as Ro}from"vue";var Ht=To({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=Ro(()=>({zoom:e.zoom,target:e.target,rotX:e.rotX,rotY:e.rotY,distance:e.distance})),{store:o,cameraRef:r,sceneElRef:i,cameraElRef:s,autoCenterOffset:d,applyTransformDirect:a}=ye(n);return Lo(K,{store:o,cameraRef:r,sceneElRef:i,cameraElRef:s,autoCenterOffset:d,applyTransformDirect:a}),()=>wo("div",{ref:s,class:`polycss-camera${e.class?` ${e.class}`:""}`,style:{perspective:"none"}},t.default?.())}});import{defineComponent as ea,h as ta,inject as na,provide as oa,computed as ee,ref as cn,watch as un,watchEffect as dn,onMounted as ra,onBeforeUnmount as aa}from"vue";import{parseHexColor as mn,BASE_TILE as ia}from"@layoutit/polycss-core";import{computed as Oo}from"vue";import{buildSceneContext as Do,mergePolygons as ko}from"@layoutit/polycss-core";function Fe(e,t){return Oo(()=>{let{directionalLight:n}=t.value,o=Do({polygons:e.value});return{polygons:ko(o.context.polygons),sceneBbox:o.context.sceneBbox}})}var It="polycss-styles";function ze(e=typeof document<"u"?document:null){if(!e||e.getElementById(It))return;let t=e.createElement("style");t.id=It,t.textContent=_o,e.head.appendChild(t)}var _o=`
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 fa}from"vue";import{createIsometricCamera as ya,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 rt(e){let t=ya({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);fa(()=>({zoom:e.value.zoom,target:e.value.target,rotX:e.value.rotX,rotY:e.value.rotY,distance:e.value.distance}),(s,c)=>{let m={};s.zoom!==void 0&&s.zoom!==c?.zoom&&(m.zoom=s.zoom),s.target!==void 0&&s.target!==c?.target&&(m.target=s.target),s.rotX!==void 0&&s.rotX!==c?.rotX&&(m.rotX=s.rotX),s.rotY!==void 0&&s.rotY!==c?.rotY&&(m.rotY=s.rotY),s.distance!==void 0&&s.distance!==c?.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 c=t.state,m=ga,p=a.value,l=c.target[0]+p[0],h=c.target[1]+p[1],f=c.target[2]+p[2],P=h*m,v=l*m,E=f*m,M=c.zoom/m,A=c.distance!==0?`translateZ(${-c.distance}px) `:"";s.style.transform=`${A}scale(${M}) rotateX(${c.rotX}deg) rotate(${c.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 ht=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}=rt(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}=rt(n);return Ca(ue,{store:o,cameraRef:r,sceneElRef:a,cameraElRef:i,autoCenterOffset:u,applyTransformDirect:s}),()=>{let c=`${typeof e.perspective=="number"?e.perspective:Ea}px`;return Sa("div",{ref:i,class:`polycss-camera${e.class?` ${e.class}`:""}`,style:{perspective:c}},t.default?.())}}});import{defineComponent as Ri,h as Oi,inject as Di,provide as ki,computed as xe,ref as zt,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 Pt(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 At(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,
@@ -16,23 +16,27 @@ import{defineComponent as Co,h as Eo,provide as Mo,computed as Ao}from"vue";impo
16
16
  height: 0;
17
17
  transform-style: preserve-3d;
18
18
  perspective: none;
19
+ /* Promote the scene to its own GPU compositing layer. Without this the
20
+ browser re-rasterizes every descendant leaf when the scene transform
21
+ updates each animation frame, causing visible flicker on solid-shape
22
+ meshes (triangles, quads) that have no opacity:0 loading phase to
23
+ hide the re-paint. Matches the same declaration in the vanilla
24
+ polycss stylesheet. */
25
+ will-change: transform;
19
26
  }
20
27
 
21
28
  /* \u2500\u2500 Camera wrapper (perspective + interactive drag) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
22
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. */
23
33
  .polycss-camera {
24
- display: flex;
34
+ position: relative;
35
+ display: block;
25
36
  width: 100%;
26
- justify-content: center;
27
- align-items: center;
28
- perspective: 8000px;
29
- min-height: inherit;
30
37
  height: 100%;
31
- position: relative;
32
- overflow: hidden;
33
- contain: paint;
34
- isolation: isolate;
35
38
  }
39
+ /* Vue descendant default \u2014 keeps preserve-3d on controls + helpers. */
36
40
  .polycss-camera * {
37
41
  transform-style: preserve-3d;
38
42
  position: absolute;
@@ -54,6 +58,17 @@ import{defineComponent as Co,h as Eo,provide as Mo,computed as Ao}from"vue";impo
54
58
  transform-style: preserve-3d !important;
55
59
  }
56
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
+
57
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 */
58
73
 
59
74
  /*
@@ -93,6 +108,31 @@ import{defineComponent as Co,h as Eo,provide as Mo,computed as Ao}from"vue";impo
93
108
  height: 64px;
94
109
  }
95
110
 
111
+ .polycss-mesh.polycss-voxel-mesh > .polycss-voxel-face {
112
+ position: absolute;
113
+ display: block;
114
+ top: 0;
115
+ left: 0;
116
+ width: 0;
117
+ height: 0;
118
+ transform-style: preserve-3d;
119
+ transform-origin: 0 0;
120
+ margin: 0;
121
+ padding: 0;
122
+ font: inherit;
123
+ line-height: 0;
124
+ pointer-events: none;
125
+ }
126
+
127
+ .polycss-mesh.polycss-voxel-mesh > .polycss-voxel-face > b {
128
+ top: 0;
129
+ left: 0;
130
+ width: var(--polycss-voxel-primitive, 1px);
131
+ height: var(--polycss-voxel-primitive, 1px);
132
+ backface-visibility: visible;
133
+ pointer-events: none;
134
+ }
135
+
96
136
  .polycss-scene i {
97
137
  width: 16px;
98
138
  height: 16px;
@@ -111,7 +151,58 @@ import{defineComponent as Co,h as Eo,provide as Mo,computed as Ao}from"vue";impo
111
151
  box-sizing: content-box;
112
152
  border: 0 solid transparent;
113
153
  border-color: transparent transparent currentColor transparent;
114
- border-width: 0 32px 64px 32px;
154
+ border-width: 0 16px 32px 16px;
155
+ }
156
+
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
+ }
185
+ }
186
+
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;
115
206
  }
116
207
 
117
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 */
@@ -140,7 +231,7 @@ import{defineComponent as Co,h as Eo,provide as Mo,computed as Ao}from"vue";impo
140
231
  @property --clz { syntax: "<number>"; inherits: true; initial-value: 1; }
141
232
 
142
233
  /* Ground-plane position in CSS pixels along the CSS-Z axis (= world-Z, the
143
- up axis in polycss's world convention). Stored as a <number> so it can be
234
+ up axis in PolyCSS's world convention). Stored as a <number> so it can be
144
235
  used directly inside matrix3d() calc() expressions (matrix3d requires
145
236
  dimensionless entries \u2014 no px units).
146
237
  Set from the min world-Z of casting meshes. */
@@ -168,58 +259,95 @@ import{defineComponent as Co,h as Eo,provide as Mo,computed as Ao}from"vue";impo
168
259
  here (not inline per polygon) so each leaf only carries its tiny normal
169
260
  declarations \u2014 ~12\xD7 smaller per-polygon style payload on big meshes. */
170
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
+ */
171
267
  background-color: rgb(
172
- calc(255 * (var(--par) * var(--pai)
173
- + var(--plr) * var(--pli) * max(0,
174
- var(--pnx) * var(--plx) +
175
- var(--pny) * var(--ply) +
176
- var(--pnz) * var(--plz))))
177
- calc(255 * (var(--pag) * var(--pai)
178
- + var(--plg) * var(--pli) * max(0,
179
- var(--pnx) * var(--plx) +
180
- var(--pny) * var(--ply) +
181
- var(--pnz) * var(--plz))))
182
- calc(255 * (var(--pab) * var(--pai)
183
- + var(--plb) * var(--pli) * max(0,
184
- var(--pnx) * var(--plx) +
185
- var(--pny) * var(--ply) +
186
- 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))
187
289
  );
188
290
  background-blend-mode: multiply;
291
+ background-image: var(--polycss-atlas-url);
292
+ background-position: var(--polycss-atlas-position);
293
+ background-repeat: no-repeat;
294
+ background-size: var(--polycss-atlas-image-size);
295
+ mask-image: var(--polycss-atlas-url);
296
+ mask-mode: alpha;
297
+ mask-position: var(--polycss-atlas-position);
298
+ mask-repeat: no-repeat;
299
+ mask-size: var(--polycss-atlas-image-size);
300
+ -webkit-mask-image: var(--polycss-atlas-url);
301
+ -webkit-mask-position: var(--polycss-atlas-position);
302
+ -webkit-mask-repeat: no-repeat;
303
+ -webkit-mask-size: var(--polycss-atlas-image-size);
189
304
  }
190
305
 
191
306
  .polycss-scene[data-polycss-lighting="dynamic"] b,
307
+ .polycss-scene[data-polycss-lighting="dynamic"] i,
192
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
+ */
193
315
  color: rgb(
194
- calc(255 * var(--psr) * (var(--par) * var(--pai)
195
- + var(--plr) * var(--pli) * max(0,
196
- var(--pnx) * var(--plx) +
197
- var(--pny) * var(--ply) +
198
- var(--pnz) * var(--plz))))
199
- calc(255 * var(--psg) * (var(--pag) * var(--pai)
200
- + var(--plg) * var(--pli) * max(0,
201
- var(--pnx) * var(--plx) +
202
- var(--pny) * var(--ply) +
203
- var(--pnz) * var(--plz))))
204
- calc(255 * var(--psb) * (var(--pab) * var(--pai)
205
- + var(--plb) * var(--pli) * max(0,
206
- var(--pnx) * var(--plx) +
207
- var(--pny) * var(--ply) +
208
- 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))
209
343
  );
210
344
  }
211
345
 
212
- /* \u2500\u2500 Cast shadows (dynamic mode only) \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 */
213
-
214
- /* <q> \u2014 dedicated shadow leaf. Same border-shape rendering trick as <i>
215
- (border-color: currentColor fills the polygon outline) but with its
216
- own tag so we don't have to thread :not(.polycss-shadow) exclusions
217
- through every dynamic-mode color rule. backface-visibility must be
218
- visible because the projection matrix is near-rank-deficient and the
219
- resulting plane's normal can read as back-facing under some camera
220
- angles; the leaf is intentionally always painted. Strip the UA's
221
- default ::before/::after open-/close-quote so the element is just a
222
- 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. */
223
351
  .polycss-scene q {
224
352
  position: absolute;
225
353
  display: block;
@@ -236,6 +364,7 @@ import{defineComponent as Co,h as Eo,provide as Mo,computed as Ao}from"vue";impo
236
364
  backface-visibility: visible;
237
365
  border-color: currentColor;
238
366
  pointer-events: none;
367
+ will-change: transform;
239
368
  }
240
369
  .polycss-scene q::before,
241
370
  .polycss-scene q::after {
@@ -267,8 +396,9 @@ import{defineComponent as Co,h as Eo,provide as Mo,computed as Ao}from"vue";impo
267
396
  transparent var(--ring-outer-r));
268
397
  }
269
398
 
270
- /* Shadow projection matrix. Projects any 3D point P onto the horizontal
271
- 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).
272
402
 
273
403
  The strict projection would set m22=0 (output.z is a constant G, flat).
274
404
  Chromium SKIPS rendering elements whose composed transform is singular.
@@ -290,11 +420,10 @@ import{defineComponent as Co,h as Eo,provide as Mo,computed as Ao}from"vue";impo
290
420
  );
291
421
  }
292
422
 
293
- /* <q> shadow leaf \u2014 Lambert-gated opacity. Polygons facing the light cast
294
- full shadow; polygons facing away cast zero shadow. The * 10 multiplier
295
- sharpens the cutoff so small positive Lambert values jump quickly to 1,
296
- giving a near-binary visibility decision with a smooth edge transition. */
297
- .polycss-scene q {
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. */
426
+ .polycss-scene[data-polycss-lighting="dynamic"] q {
298
427
  opacity: clamp(0, calc((var(--pnx) * var(--clx) + var(--pny) * var(--cly) + var(--pnz) * var(--clz)) * 10), 1);
299
428
  }
300
- `;import{parsePureColor as Ss}from"@layoutit/polycss-core";import{inject as Ho}from"vue";var st=Symbol("polycss/scene-context");function Vt(){return Ho(st,null)}import{computed as te,h as Xe,onBeforeUnmount as Io,ref as Vo,watch as Fo}from"vue";import{parsePureColor as Kt}from"@layoutit/polycss-core";var zo=50,No=[.4,-.7,.59],jo="#ffffff",Yo=1,Uo="#ffffff",Xo=.4,he=4096,Ft=1,$o=.1,Bo=1,Gt=he*he,Wo=Gt*3,ut=2048,Zo=4*1024*1024,Ko=16*1024*1024,Go=.995,ne=.001,qo=.75,Qo=1,Jo=250,zt=1.5,qt=3,er=2,tr=4,dt=64,de=64,ae=64,nr=128,Nt=50,jt=1e-7,Yt=16,or=.05,rr=4,ar=.6,G=1e-9,ir=.6,pe=new Map;function sr(e){let t=pe.get(e);return t||(t=new Promise((n,o)=>{let r=new Image;r.decoding="async",r.onload=()=>n(r),r.onerror=()=>o(new Error(`texture load failed: ${e}`)),r.src=e}),pe.set(e,t),t.then(()=>{pe.get(e)===t&&pe.delete(e)},()=>{pe.get(e)===t&&pe.delete(e)})),t}function $e(e){let t=typeof e=="string"?Number(e):e;return t===void 0||!Number.isFinite(t)?1:Math.min(Bo,Math.max($o,t))}function Be(e,t){let n=e.toFixed(t).replace(/\.?0+$/,"");return Object.is(Number(n),-0)?"0":n}function Ne(e,t=tr){let n=Be(e,t);return Number(n)===0||Object.is(Number(n),-0)?"0":`${n}px`}function mt(e,t=qt){return`matrix3d(${e.split(",").map(n=>{let o=Number(n.trim());return Number.isFinite(o)?Be(o,t):n.trim()}).join(",")})`}function Ye(e,t=er){let n=Be(e,t);return Number(n)===0?"0":`${n}%`}function lr(e,t,n,o,r,i){let s=(e-n)*(i-o)-(t-o)*(r-n);return Math.abs(s)>jt?!1:(e-n)*(e-r)+(t-o)*(t-i)<=jt}function cr(e,t=Nt,n=Nt){let o=!1;for(let r=0,i=e.length-1;r<e.length;i=r++){let[s,d]=e[r],[a,c]=e[i];if(lr(t,n,s,d,a,c))return!0;d>n!=c>n&&t<(a-s)*(n-d)/(c-d)+s&&(o=!o)}return o}function Qt(e){return e.reduce((t,n)=>t+n.width*n.height,0)}function ur(e,t){let n=Qt(e);if(n<=0)return 1;let o=Math.max(1,...e.map(s=>Math.max(s.width,s.height))),r=ut/o,i=Math.sqrt(t/(n*4));return $e(Math.min(r,i))}function Jt(e){if(!e)return!1;let n=(e.defaultView??(typeof window<"u"?window:void 0))?.matchMedia;return n?n("(pointer: coarse)").matches||n("(hover: none)").matches:!1}function dr(e){return Jt(e)?Zo:Ko}function mr(e,t){return e!==void 0&&e!=="auto"||Jt(t)?ae:nr}function fr(e,t){let n=e.matrix.split(",").map(o=>Number(o));return n.length!==16||n.some(o=>!Number.isFinite(o))?e.canonicalMatrix:(n[0]*=e.canvasW/t,n[1]*=e.canvasW/t,n[2]*=e.canvasW/t,n[4]*=e.canvasH/t,n[5]*=e.canvasH/t,n[6]*=e.canvasH/t,n.join(","))}function Ut(e,t){for(let n of e.entries)n&&(n.atlasCanonicalSize=t,n.atlasMatrix=fr(n,t));return e}function yr(e,t){let n=Qt(e),o=.5;return n<=Gt?o=1:n<=Wo&&(o=.75),$e(Math.min(o,ur(e,t)))}function pr(e,t){return e.reduce((n,o)=>Math.max(n,Math.ceil(o.width*t),Math.ceil(o.height*t)),0)}function gr(e,t){return e.reduce((n,o)=>n+Math.ceil(o.width*t)*Math.ceil(o.height*t)*4,0)}function hr(e,t,n){let o=pr(e,t),r=gr(e,t),i=o>ut?ut/o:1,s=r>n?Math.sqrt(n/r):1;return Math.min(i,s)}function vr(e,t,n){let o=yr(t.pages,n),r=o===1?t:Ue(e,o);for(let i=0;i<4;i++){let s=hr(r.pages,o,n);if(s>=1)break;let d=$e(o*s*Go);if(d>=o)break;o=d,r=Ue(e,o)}return{packed:r,atlasScale:o}}function Pr(e,t,n){let o=mr(t,n);if(t!==void 0&&t!=="auto"){let s=$e(t);return{packed:Ut(Ue(e,s),o),atlasScale:s,atlasCanonicalSize:o}}let r=Ue(e,1),i=vr(e,r,dr(n));return{packed:Ut(i.packed,o),atlasScale:i.atlasScale,atlasCanonicalSize:o}}function br(e){return Math.max(Ft,Math.ceil(Ft/e))}function ie(e,t,n=1,o=0,r=0,i=1,s=0,d=0){e.setTransform(n*t,o*t,r*t,i*t,s*t,d*t)}function le(e){let t=Kt(e);return t?{r:t.rgb[0],g:t.rgb[1],b:t.rgb[2]}:{r:255,g:255,b:255}}function ft({r:e,g:t,b:n}){return`${e},${t},${n}`}function xr(e){return Kt(e)?.alpha??1}function Oe(e){if(e.screenPts.length!==8)return!1;let t=[],n=[],o=(r,i)=>{for(let s of r)if(Math.abs(s-i)<=ne)return;r.push(i)};for(let r=0;r<e.screenPts.length;r+=2)o(t,e.screenPts[r]),o(n,e.screenPts[r+1]);if(t.length!==2||n.length!==2||(t.sort((r,i)=>r-i),n.sort((r,i)=>r-i),Math.abs(t[0])>ne||Math.abs(n[0])>ne||t[1]-t[0]<=ne||n[1]-n[0]<=ne))return!1;for(let r=0;r<e.screenPts.length;r+=2){let i=e.screenPts[r],s=e.screenPts[r+1],d=Math.abs(i-t[0])<=ne||Math.abs(i-t[1])<=ne,a=Math.abs(s-n[0])<=ne||Math.abs(s-n[1])<=ne;if(!d||!a)return!1}return!0}function oe(e){return!e.texture&&e.polygon.vertices.length===3}function De(e){return!e.texture&&!!e.projectiveMatrix&&!Oe(e)}function yt(){if(!!!globalThis.CSS?.supports?.("border-shape","polygon(0 0, 100% 0, 0 100%) circle(0)"))return!1;let t=globalThis.matchMedia;return typeof t!="function"?!0:t("(pointer: fine)").matches&&t("(hover: hover)").matches}function en(){let e=(typeof window<"u"?window.navigator:globalThis.navigator)?.userAgent??"";if(!e)return!0;let t=/\b(?:Chrome|HeadlessChrome|Chromium|Edg|OPR)\//.test(e);return!/\bVersion\/[\d.]+.*\bSafari\//.test(e)||t}function Xt(e,t){e.set(t,(e.get(t)??0)+1)}function $t(e){let t,n=1;for(let[o,r]of e)r>n&&(t=o,n=r);return t}var Cr=new Map([["transform",0],["border-shape",1],["border-width",2],["width",3],["height",4],["color",5]]);function Er(e){let t=e.getAttribute("style");if(!t)return;let o=t.split(";").map(r=>r.trim()).filter(Boolean).map((r,i)=>{let s=r.slice(0,r.indexOf(":")).trim().toLowerCase();return{declaration:r,index:i,order:Cr.get(s)??Number.POSITIVE_INFINITY}}).sort((r,i)=>r.order-i.order||r.index-i.index).map(({declaration:r})=>r).join(";");o!==t&&e.setAttribute("style",o)}function tn(e,t){let n=new Map,o=new Map,r=new Map,i=en(),s=t!=="dynamic"&&yt();for(let c of e)if(!(!c||c.texture)){if(t==="dynamic"){if(!(i&&oe(c))&&!Oe(c))continue;let l=le(c.polygon.color??"#cccccc"),m=ft(l);Xt(o,m),r.has(m)||r.set(m,l);continue}!(i&&oe(c))&&!Oe(c)&&!s||Xt(n,c.shadedColor)}let d=$t(n),a=$t(o);return{paintColor:d,dynamicColorKey:a,dynamicColor:a?r.get(a):void 0}}function Mr(e){let t=[],n=e.canvasW||1,o=e.canvasH||1;for(let r=0;r<e.screenPts.length;r+=2){let i=Math.max(0,Math.min(100,e.screenPts[r]/n*100)),s=Math.max(0,Math.min(100,e.screenPts[r+1]/o*100));t.push([i,s])}return t}function Ar([e,t]){return`${Ye(e)} ${Ye(t)}`}function Sr(e){return`polygon(${e.map(Ar).join(",")})`}function Tr(e){if(cr(e))return"circle(0)";let t=0,n=0,o=Math.max(1,e.length);for(let[s,d]of e)t+=s,n+=d;let r=Ye(Math.max(0,Math.min(100,t/o))),i=Ye(Math.max(0,Math.min(100,n/o)));return`circle(0 at ${r} ${i})`}function pt(e){let t=Mr(e);return`${Sr(t)} ${Tr(t)}`}function nn(e,t=qt){return e.map(n=>Be(n,t)).join(",")}function on(e,t,n){let o=e.matrix.split(",").map(r=>Number(r));return o.length!==16||o.some(r=>!Number.isFinite(r))?e.matrix:(o[0]*=t,o[1]*=t,o[2]*=t,o[4]*=n,o[5]*=n,o[6]*=n,nn(o))}function wr(e){return on(e,(e.canvasW||1)/Yt,(e.canvasH||1)/Yt)}function Lr(e){return on(e,(e.canvasW||1)/dt,(e.canvasH||1)/dt)}function rn(e){if(e.length<3)return!1;let t=0;for(let n=0;n<e.length;n++){let o=e[n],r=e[(n+1)%e.length],i=e[(n+2)%e.length],s=(r[0]-o[0])*(i[1]-r[1])-(r[1]-o[1])*(i[0]-r[0]);if(Math.abs(s)<=G)return!1;let d=Math.sign(s);if(t===0)t=d;else if(d!==t)return!1}return!0}function Rr(e){let t=0;for(let n=0;n<e.length;n++){let o=e[n],r=e[(n+1)%e.length];t+=o[0]*r[1]-o[1]*r[0]}return t/2}function Or(e,t,n,o){let r=t[0]-e[0],i=t[1]-e[1],s=o[0]-n[0],d=o[1]-n[1],a=r*d-i*s;if(Math.abs(a)<=G)return null;let c=n[0]-e[0],l=n[1]-e[1],m=(c*d-l*s)/a;return[e[0]+m*r,e[1]+m*i]}function an(e,t){if(e.length<6||e.length%2!==0||t<=0)return e;let n=[];for(let a=0;a<e.length;a+=2)n.push([e[a],e[a+1]]);if(!rn(n))return Re(e,t);let o=Rr(n);if(Math.abs(o)<=G)return Re(e,t);let r=o>0?1:-1,i=[];for(let a=0;a<n.length;a++){let c=n[a],l=n[(a+1)%n.length],m=l[0]-c[0],f=l[1]-c[1],y=Math.hypot(m,f);if(y<=G)return Re(e,t);let p=r*(f/y)*t,b=r*(-m/y)*t;i.push({a:[c[0]+p,c[1]+b],b:[l[0]+p,l[1]+b]})}let s=[],d=Math.max(2,t*4);for(let a=0;a<n.length;a++){let c=i[(a+n.length-1)%n.length],l=i[a],m=Or(c.a,c.b,l.a,l.b);if(!m)return Re(e,t);let f=n[a],y=m[0]-f[0],p=m[1]-f[1],b=Math.hypot(y,p);b>d?s.push(f[0]+y/b*d,f[1]+p/b*d):s.push(m[0],m[1])}return s}function Bt(e){if(e.length!==4||!rn(e))return null;let[t,n,o,r]=e,i=t[0]-n[0]+o[0]-r[0],s=t[1]-n[1]+o[1]-r[1],d=n[0]-o[0],a=r[0]-o[0],c=n[1]-o[1],l=r[1]-o[1],m=d*l-c*a;if(Math.abs(m)<=G)return null;let f=(i*l-s*a)/m,y=(d*s-c*i)/m,p=[1,1+f,1+f+y,1+y];if(p.some(E=>!Number.isFinite(E)||E<=or))return null;let b=Math.min(...p);return Math.max(...p)/b>rr?null:{g:f,h:y,w1:1+f,w3:1+y}}function Dr(e,t,n,o,r,i,s){if(e.length!==8)return null;let d=[[e[0],e[1]],[e[2],e[3]],[e[4],e[5]],[e[6],e[7]]];if(!Bt(d))return null;let a=an(e,ar),c=[[a[0],a[1]],[a[2],a[3]],[a[4],a[5]],[a[6],a[7]]],l=Bt(c);if(!l)return null;let{g:m,h:f,w1:y,w3:p}=l,[b,P,,E]=c,C=([H,M])=>[r+H*t[0]+M*n[0],i+H*t[1]+M*n[1],s+H*t[2]+M*n[2]],w=C(b),g=C(P),L=C(E),O=[g[0]*y-w[0],g[1]*y-w[1],g[2]*y-w[2]],N=[L[0]*p-w[0],L[1]*p-w[1],L[2]*p-w[2]],_=[O[0],O[1],O[2],m,N[0],N[1],N[2],f,o[0],o[1],o[2],0,w[0],w[1],w[2],1];for(let H=0;H<8;H+=1)_[H]/=dt;return _.join(",")}function kr(e,t,n){return e.map(o=>[o[1]*t,o[0]*t,o[2]*n])}function Wt(e){return`${e[0]},${e[1]},${e[2]}`}function _r(e,t){let n=Wt(e),o=Wt(t);return n<o?`${n}|${o}`:`${o}|${n}`}function We(e){let t=new Map;for(let o=0;o<e.length;o++){let r=e[o].vertices;if(!(!r||r.length<3||!e[o].texture))for(let i=0;i<r.length;i++){let s=_r(r[i],r[(i+1)%r.length]),d={polygon:o,edge:i},a=t.get(s);a?a.push(d):t.set(s,[d])}}let n=e.map(()=>new Set);for(let o of t.values())if(!(o.length<2))for(let r=0;r<o.length;r++)for(let i=r+1;i<o.length;i++)n[o[r].polygon].add(o[r].edge),n[o[i].polygon].add(o[i].edge);return n.map(o=>o.size>0?o:void 0)}function Hr(e){if(e.length<3)return null;let t=e[0],n=[0,0,0];for(let r=1;r+1<e.length;r++){let i=e[r],s=e[r+1],d=[i[0]-t[0],i[1]-t[1],i[2]-t[2]],a=[s[0]-t[0],s[1]-t[1],s[2]-t[2]];n[0]-=d[1]*a[2]-d[2]*a[1],n[1]-=d[2]*a[0]-d[0]*a[2],n[2]-=d[0]*a[1]-d[1]*a[0]}let o=Math.hypot(n[0],n[1],n[2]);return o<=G?null:[n[0]/o,n[1]/o,n[2]/o]}function lt(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function Ir(e,t){return[e[1]*t[2]-e[2]*t[1],e[2]*t[0]-e[0]*t[2],e[0]*t[1]-e[1]*t[0]]}function Vr(e,t,n,o){if(!oe(e))return null;let r=kr(e.polygon.vertices,e.tileSize,e.layerElevation),i=Hr(r);if(!i)return null;let s=[{a:0,b:1,c:2},{a:1,b:2,c:0},{a:2,b:0,c:1}].map(S=>{let U=r[S.a],B=r[S.b];return{...S,length:Math.hypot(B[0]-U[0],B[1]-U[1],B[2]-U[2])}}).sort((S,U)=>U.length-S.length),d=s[0].a,a=s[0].b,c=s[0].c,l=r[d],m=r[a],f=r[c],y=s[0].length;if(y<=G)return null;let p=[(m[0]-l[0])/y,(m[1]-l[1])/y,(m[2]-l[2])/y],b=[f[0]-l[0],f[1]-l[1],f[2]-l[2]],P=lt(b,p),E=[l[0]+p[0]*P,l[1]+p[1]*P,l[2]+p[2]*P],C=[E[0]-f[0],E[1]-f[1],E[2]-f[2]],w=Math.hypot(C[0],C[1],C[2]);if(w<=G)return null;let g=[C[0]/w,C[1]/w,C[2]/w];if(lt(Ir(p,g),i)<0){let S=a;if(a=d,d=S,l=r[d],m=r[a],y=Math.hypot(m[0]-l[0],m[1]-l[1],m[2]-l[2]),y<=G)return null;p=[(m[0]-l[0])/y,(m[1]-l[1])/y,(m[2]-l[2])/y];let U=[f[0]-l[0],f[1]-l[1],f[2]-l[2]];P=lt(U,p),E=[l[0]+p[0]*P,l[1]+p[1]*P,l[2]+p[2]*P],C=[E[0]-f[0],E[1]-f[1],E[2]-f[2]];let B=Math.hypot(C[0],C[1],C[2]);if(B<=G)return null;g=[C[0]/B,C[1]/B,C[2]/B]}let L=Math.max(0,Math.min(y,P)),O=Math.max(0,y-L),N=an([L,0,0,w,L+O,w],ir),_=[N[0],N[1]],H=[N[2],N[3]],M=[N[4],N[5]],D=(H[1]+M[1])/2,V=_[0]-H[0],I=M[0]-_[0],u=D-_[1];if(V<=G||I<=G||u<=G||!Number.isFinite(V+I+u))return null;let h=t==="dynamic",v=le(e.polygon.color??"#cccccc"),A=h&&ft(v)===o?.dynamicColorKey,x={color:h||e.shadedColor===o?.paintColor?void 0:e.shadedColor,pointerEvents:n==="none"?"none":void 0,...h&&!A?{"--pnx":i[0].toFixed(4),"--pny":i[1].toFixed(4),"--pnz":i[2].toFixed(4),"--psr":(v.r/255).toFixed(4),"--psg":(v.g/255).toFixed(4),"--psb":(v.b/255).toFixed(4)}:h?{"--pnx":i[0].toFixed(4),"--pny":i[1].toFixed(4),"--pnz":i[2].toFixed(4)}:null},T=([S,U])=>[f[0]+(S-L)*p[0]+U*g[0],f[1]+(S-L)*p[1]+U*g[1],f[2]+(S-L)*p[2]+U*g[2]],j=T(_),R=T([H[0],D]),k=T([M[0],D]),Y=de/2,X=[(k[0]-R[0])/de,(k[1]-R[1])/de,(k[2]-R[2])/de],$=[j[0]-X[0]*Y,j[1]-X[1]*Y,j[2]-X[2]*Y],z=[(R[0]-$[0])/de,(R[1]-$[1])/de,(R[2]-$[2])/de];return{transform:`matrix3d(${nn([X[0],X[1],X[2],0,z[0],z[1],z[2],0,i[0],i[1],i[2],0,$[0],$[1],$[2],1])})`,...x}}function Fr({r:e,g:t,b:n}){let o=r=>Math.round(Math.max(0,Math.min(255,r))).toString(16).padStart(2,"0");return`#${o(e)}${o(t)}${o(n)}`}function zr(e,t,n,o,r){let i=le(e),s=le(n),d=le(o),a=d.r/255*r+s.r/255*t,c=d.g/255*r+s.g/255*t,l=d.b/255*r+s.b/255*t,m=Math.max(0,Math.min(255,Math.round(i.r*a))),f=Math.max(0,Math.min(255,Math.round(i.g*c))),y=Math.max(0,Math.min(255,Math.round(i.b*l))),p=xr(e);return p<1?`rgba(${m}, ${f}, ${y}, ${p})`:Fr({r:m,g:f,b:y})}function Nr(e,t,n,o){let r=le(t),i=le(n);return{r:i.r/255*o+r.r/255*e,g:i.g/255*o+r.g/255*e,b:i.b/255*o+r.b/255*e}}function jr({r:e,g:t,b:n}){let o=r=>Math.round(Math.max(0,Math.min(1,r))*255);return`rgb(${o(e)} ${o(t)} ${o(n)})`}function Yr(e,t,n,o,r,i,s){Math.abs(i.r-1)<.001&&Math.abs(i.g-1)<.001&&Math.abs(i.b-1)<.001||(e.save(),ie(e,s),e.globalCompositeOperation="multiply",e.fillStyle=jr(i),e.fillRect(t,n,o,r),e.restore())}function Ur(e,t,n,o,r,i,s){let d=t.naturalWidth||t.width||1,a=t.naturalHeight||t.height||1,c=Math.max(r/d,i/a),l=d*c,m=a*c;ie(e,s),e.drawImage(t,n+(r-l)/2,o+(i-m)/2,l,m)}function sn(e,t){if(e.length<3||t.length<3)return null;let[n,o,r]=e,[i,s,d]=t,a=n[0],c=n[1],l=o[0],m=o[1],f=r[0],y=r[1],p=i[0],b=1-i[1],P=s[0],E=1-s[1],C=d[0],w=1-d[1],g=P-p,L=E-b,O=C-p,N=w-b,_=g*N-O*L;if(Math.abs(_)<=1e-9)return null;let H=l-a,M=f-a,D=m-c,V=y-c,I={a:(H*N-M*L)/_,b:(g*M-O*H)/_,c:(D*N-V*L)/_,d:(g*V-O*D)/_,e:0,f:0};return I.e=a-I.a*p-I.b*b,I.f=c-I.c*p-I.d*b,I}function ln(e){if(e.length===0)return null;let t=1/0,n=1/0,o=-1/0,r=-1/0;for(let i of e){let s=i[0],d=1-i[1];if(!Number.isFinite(s)||!Number.isFinite(d))return null;t=Math.min(t,s),o=Math.max(o,s),n=Math.min(n,d),r=Math.max(r,d)}return{minU:t,minV:n,maxU:o,maxV:r}}function Xr(e,t,n,o,r,i,s,d){let a=e.vertices.map(m=>{let f=[m[1]*t,m[0]*t,m[2]*n],y=f[0]-o[0],p=f[1]-o[1],b=f[2]-o[2];return[y*r[0]+p*r[1]+b*r[2]+s,y*i[0]+p*i[1]+b*i[2]+d]}),c=sn(a,e.uvs),l=ln(e.uvs);return!c&&!l?null:{screenPts:a.flatMap(([m,f])=>[m,f]),uvAffine:c,uvSampleRect:l}}function Re(e,t){if(e.length<6||t<=0)return e;let n=0,o=0,r=e.length/2;for(let s=0;s<e.length;s+=2)n+=e[s],o+=e[s+1];n/=r,o/=r;let i=e.slice();for(let s=0;s<i.length;s+=2){let d=i[s]-n,a=i[s+1]-o,c=Math.hypot(d,a);c<=ne||(i[s]+=d/c*t,i[s+1]+=a/c*t)}return i}function ct(e,t,n,o){for(let r=0;r<o.length;r+=2){let i=t+o[r],s=n+o[r+1];r===0?e.moveTo(i,s):e.lineTo(i,s)}e.closePath()}function ge(e,t){return Math.max(0,Math.min(t,e))}function Zt(e,t,n,o,r,i,s,d){let a=t.naturalWidth||t.width||1,c=t.naturalHeight||t.height||1,l=ge(Math.min(n.minU,n.maxU)*a,a),m=ge(Math.max(n.minU,n.maxU)*a,a),f=ge(Math.min(n.minV,n.maxV)*c,c),y=ge(Math.max(n.minV,n.maxV)*c,c),p=Math.floor(l),b=Math.floor(f),P=Math.ceil(m)-p,E=Math.ceil(y)-b;P<1&&(p=Math.floor(ge((n.minU+n.maxU)/2*a,a-1)),P=1),E<1&&(b=Math.floor(ge((n.minV+n.maxV)/2*c,c-1)),E=1),p=Math.max(0,Math.min(a-1,p)),b=Math.max(0,Math.min(c-1,b)),P=Math.max(1,Math.min(a-p,P)),E=Math.max(1,Math.min(c-b,E)),ie(e,d),e.drawImage(t,p,b,P,E,o,r,i,s)}function $r(e,t,n,o,r,i){for(let s=0;s<o.length;s+=2){let d=t+o[s]+r,a=n+o[s+1]+i;s===0?e.moveTo(d,a):e.lineTo(d,a)}e.closePath()}function Br(e,t,n,o,r=0,i=0){if(t.textureTriangles?.length){let s=n.naturalWidth||n.width||1,d=n.naturalHeight||n.height||1;for(let a of t.textureTriangles){let c=Re(a.screenPts,qo);e.save(),ie(e,o),e.beginPath(),$r(e,t.x,t.y,c,r,i),e.clip(),a.uvAffine?(ie(e,o,a.uvAffine.a/s,a.uvAffine.c/s,a.uvAffine.b/d,a.uvAffine.d/d,t.x+a.uvAffine.e+r,t.y+a.uvAffine.f+i),e.drawImage(n,0,0)):a.uvSampleRect&&Zt(e,n,a.uvSampleRect,t.x+r,t.y+i,t.canvasW,t.canvasH,o),e.restore()}}else if(t.uvAffine){let s=n.naturalWidth||n.width||1,d=n.naturalHeight||n.height||1;ie(e,o,t.uvAffine.a/s,t.uvAffine.c/s,t.uvAffine.b/d,t.uvAffine.d/d,t.x+t.uvAffine.e+r,t.y+t.uvAffine.f+i),e.drawImage(n,0,0)}else t.uvSampleRect?Zt(e,n,t.uvSampleRect,t.x+r,t.y+i,t.canvasW,t.canvasH,o):Ur(e,n,t.x+r,t.y+i,t.canvasW,t.canvasH,o)}function Wr(e,t,n,o,r,i){let s=r-n,d=i-o,a=s*s+d*d;if(a<=G)return Math.hypot(e-n,t-o);let c=Math.max(0,Math.min(1,((e-n)*s+(t-o)*d)/a));return Math.hypot(e-(n+s*c),t-(o+d*c))}function Zr(e,t,n,o){let r=1/0,i=n.length/2;for(let s of o){if(s<0||s>=i)continue;let d=s*2,a=(s+1)%i*2;r=Math.min(r,Wr(e,t,n[d],n[d+1],n[a],n[a+1]))}return r}function Kr(e,t,n,o,r,i){let s=Math.max(0,o-i),d=Math.min(t-1,o+i),a=Math.max(0,r-i),c=Math.min(n-1,r+i),l=null,m=1/0;for(let f=a;f<=c;f++)for(let y=s;y<=d;y++){if(y===o&&f===r)continue;let p=y-o,b=f-r,P=p*p+b*b;if(P>i*i||P>=m)continue;let E=(f*t+y)*4;e[E+3]<Jo||(l=E,m=P)}return l}function Gr(e,t,n){if(!t.textureEdgeRepair||!t.texture||!t.textureEdgeRepairEdges||t.textureEdgeRepairEdges.size===0)return;let o=e.canvas;if(!o)return;let r=Math.max(0,Math.floor(t.x*n)),i=Math.max(0,Math.floor(t.y*n)),s=Math.max(1,Math.min(o.width-r,Math.ceil(t.canvasW*n))),d=Math.max(1,Math.min(o.height-i,Math.ceil(t.canvasH*n)));if(s<=0||d<=0)return;let a;try{a=e.getImageData(r,i,s,d)}catch{return}let c=a.data,l=new Uint8ClampedArray(c),m=Math.max(zt,zt/n),f=Math.max(2,Math.ceil(m*n)+1),y=!1;for(let p=0;p<d;p++)for(let b=0;b<s;b++){let P=(p*s+b)*4,E=c[P+3];if(E<Qo||E===255)continue;let C=(r+b+.5)/n-t.x,w=(i+p+.5)/n-t.y;if(Zr(C,w,t.screenPts,t.textureEdgeRepairEdges)>m)continue;let g=Kr(l,s,d,b,p,f);g!==null&&(c[P]=l[g],c[P+1]=l[g+1],c[P+2]=l[g+2],c[P+3]=255,y=!0)}y&&e.putImageData(a,r,i)}function qr(e){if(typeof e.toBlob=="function")return new Promise(t=>{e.toBlob(n=>{t(n?URL.createObjectURL(n):null)},"image/png")});try{return Promise.resolve(e.toDataURL("image/png"))}catch{return Promise.resolve(null)}}function ve(e,t,n={}){let{vertices:o,texture:r,uvs:i}=e;if(!o||o.length<3)return null;let s=n.tileSize??zo,d=n.layerElevation??s,a=Z=>[Z[1]*s,Z[0]*s,Z[2]*d],c=o.map(a),l=c[0],m=c[1],f=c[2],y=[m[0]-l[0],m[1]-l[1],m[2]-l[2]],p=[f[0]-l[0],f[1]-l[1],f[2]-l[2]],b=Math.hypot(y[0],y[1],y[2]);if(b===0)return null;let P=[y[0]/b,y[1]/b,y[2]/b],E=-(y[1]*p[2]-y[2]*p[1]),C=-(y[2]*p[0]-y[0]*p[2]),w=-(y[0]*p[1]-y[1]*p[0]),g=Math.hypot(E,C,w);if(g===0)return null;E/=g,C/=g,w/=g;let L=[C*P[2]-w*P[1],w*P[0]-E*P[2],E*P[1]-C*P[0]],O=c.map(Z=>{let J=Z[0]-l[0],Ve=Z[1]-l[1],_t=Z[2]-l[2];return[J*P[0]+Ve*P[1]+_t*P[2],J*L[0]+Ve*L[1]+_t*L[2]]}),N=1/0,_=1/0,H=-1/0,M=-1/0;for(let[Z,J]of O)Z<N&&(N=Z),Z>H&&(H=Z),J<_&&(_=J),J>M&&(M=J);let D=H-N,V=M-_;if(!Number.isFinite(D)||!Number.isFinite(V))return null;let I=r&&n.textureEdgeRepairEdges?.size?n.textureEdgeRepairEdges:null,u=!!(r&&I),h=-N,v=-_,A=[];for(let Z=0;Z<O.length;Z++){let[J,Ve]=O[Z];A.push(J+h,Ve+v)}let x=Math.max(1,Math.ceil(D)),T=Math.max(1,Math.ceil(V)),j=l[0]-h*P[0]-v*L[0],R=l[1]-h*P[1]-v*L[1],k=l[2]-h*P[2]-v*L[2],Y=[P[0],P[1],P[2],0,L[0],L[1],L[2],0,E,C,w,0,j,R,k,1].join(","),X=[P[0]*x,P[1]*x,P[2]*x,0,L[0]*T,L[1]*T,L[2]*T,0,E,C,w,0,j,R,k,1].join(","),$=[P[0]*x/ae,P[1]*x/ae,P[2]*x/ae,0,L[0]*T/ae,L[1]*T/ae,L[2]*T/ae,0,E,C,w,0,j,R,k,1].join(","),z=[E,C,w],F=!r&&o.length===4?Dr(A,P,L,z,j,R,k):null,S=n.directionalLight,U=n.ambientLight,B=S?.direction??No,re=S?.color??jo,ce=Math.max(0,S?.intensity??Yo),se=U?.color??Uo,W=Math.max(0,U?.intensity??Xo),ue=Math.hypot(B[0],B[1],B[2])||1,we=B[0]/ue,rt=B[1]/ue,yo=B[2]/ue,Ot=ce*Math.max(0,E*we+C*rt+w*yo),po=Nr(Ot,re,se,W),go=zr(e.color??"#cccccc",Ot,re,se,W),Dt=null,kt=null;r&&i&&i.length>=3&&i.length===o.length&&(kt=ln(i),Dt=sn(O.map(([Z,J])=>[Z+h,J+v]),i));let ho=r&&e.textureTriangles?.length?e.textureTriangles.map(Z=>Xr(Z,s,d,l,P,L,h,v)).filter(Z=>!!Z):null;return{index:t,polygon:e,texture:r,tileSize:s,layerElevation:d,matrix:Y,canonicalMatrix:X,atlasMatrix:$,projectiveMatrix:F,canvasW:x,canvasH:T,screenPts:A,uvAffine:Dt,uvSampleRect:kt,textureTriangles:ho,textureEdgeRepairEdges:I,textureEdgeRepair:u,normal:z,textureTint:po,shadedColor:go}}function Ue(e,t=1){let n=Array(e.length).fill(null),o=[],r=br(t),i=e.filter(a=>!!a).sort((a,c)=>c.canvasH-a.canvasH||c.canvasW-a.canvasW||a.index-c.index),s=()=>({width:r,height:r,entries:[],shelves:[]}),d=(a,c,l)=>{if(a.sealed)return null;for(let y of a.shelves)if(c.canvasH<=y.height&&y.x+c.canvasW+r<=he){let p={...c,pageIndex:l,x:y.x,y:y.y};return y.x+=c.canvasW+r,a.entries.push(p),a.width=Math.max(a.width,p.x+c.canvasW+r),p}let m=a.shelves.length===0?r:a.height;if(m+c.canvasH+r>he)return null;let f={...c,pageIndex:l,x:r,y:m};return a.shelves.push({x:r+c.canvasW+r,y:m,height:c.canvasH}),a.entries.push(f),a.width=Math.max(a.width,f.x+c.canvasW+r),a.height=Math.max(a.height,m+c.canvasH+r),f};for(let a of i){if(a.canvasW+r*2>he||a.canvasH+r*2>he){let m=o.length,f={...a,pageIndex:m,x:r,y:r};n[a.index]=f,o.push({width:a.canvasW+r*2,height:a.canvasH+r*2,entries:[f],shelves:[],sealed:!0});continue}let l=null;for(let m=0;m<o.length&&(l=d(o[m],a,m),!l);m++);if(!l){let m=s(),f=o.length;o.push(m),l=d(m,a,f)}l&&(n[a.index]=l)}return{entries:n,pages:o.map(({width:a,height:c,entries:l})=>({width:a,height:c,entries:l}))}}async function Qr(e,t,n,o){let r=n.createElement("canvas");r.width=Math.max(1,Math.ceil(e.width*o)),r.height=Math.max(1,Math.ceil(e.height*o));let i=e.entries.some(l=>l.textureEdgeRepair&&l.texture&&l.textureEdgeRepairEdges&&l.textureEdgeRepairEdges.size>0),s=r.getContext("2d",i?{willReadFrequently:!0}:void 0);if(!s)return{width:e.width,height:e.height,url:null};let d=Array.from(new Set(e.entries.flatMap(l=>l.texture?[l.texture]:[]))),a=new Map;await Promise.all(d.map(async l=>{a.set(l,await sr(l))}));for(let l of e.entries){let m=l.texture?a.get(l.texture):null;if(!l.texture){s.save(),ie(s,o),s.beginPath(),ct(s,l.x,l.y,l.screenPts),s.clip(),s.fillStyle=t==="dynamic"?l.polygon.color??"#cccccc":l.shadedColor,s.fillRect(l.x,l.y,l.canvasW,l.canvasH),s.restore();continue}m&&(s.save(),ie(s,o),s.beginPath(),ct(s,l.x,l.y,l.screenPts),s.clip(),Br(s,l,m,o),s.restore()),l.texture&&t==="baked"&&(s.save(),ie(s,o),s.beginPath(),ct(s,l.x,l.y,l.screenPts),s.clip(),Yr(s,l.x,l.y,l.canvasW,l.canvasH,l.textureTint,o),s.restore()),Gr(s,l,o)}let c=await qr(r);return r.width=1,r.height=1,{width:e.width,height:e.height,url:c}}async function Jr(e,t,n,o,r){let i=[];for(let s of e){if(r())break;i.push(await Qr(s,t,n,o))}return i}function je(e){for(let t of e)URL.revokeObjectURL(t)}function Pe(e,t,n=te(()=>{}),o=te(()=>{})){let r=te(()=>new Set(o.value?.disable??[])),i=te(()=>!r.value.has("b")),s=te(()=>i.value),d=te(()=>!r.value.has("u")&&en()),a=te(()=>!r.value.has("i")&&t.value!=="dynamic"&&yt()),c=te(()=>{let f=e.value.map(y=>!y||y.texture?y:d.value&&oe(y)||i.value&&Oe(y)||s.value&&De(y)||t.value!=="dynamic"&&a.value?null:y);return Pr(f,n.value,typeof document<"u"?document:null)}),l=Vo(c.value.packed.pages.map(f=>({width:f.width,height:f.height,url:null}))),m=[];return Fo(()=>[c.value,t.value],([f,y],p,b)=>{let{packed:P,atlasScale:E}=f,C=!1;je(m),m=[],l.value=P.pages.map(w=>({width:w.width,height:w.height,url:null})),b(()=>{C=!0,je(m),m=[]}),!(P.pages.length===0||typeof document>"u")&&Jr(P.pages,y,document,E,()=>C).then(w=>{if(C){je(w.flatMap(g=>g.url?.startsWith("blob:")?[g.url]:[]));return}m=w.flatMap(g=>g.url?.startsWith("blob:")?[g.url]:[]),l.value=w}).catch(()=>{C||(l.value=P.pages.map(w=>({width:w.width,height:w.height,url:null})))})},{immediate:!0}),Io(()=>{je(m),m=[]}),{entries:te(()=>c.value.packed.entries),pages:l,ready:te(()=>l.value.length===0||l.value.every(f=>!!f.url)),useFullRectSolid:i,useProjectiveQuad:s,useStableTriangle:d,useBorderShape:a}}function be({entry:e,page:t,textureLighting:n,className:o,style:r,domAttrs:i,pointerEvents:s="auto"}){let d=n==="dynamic",a=e.atlasCanonicalSize??ae,c=e.canvasW||1,l=e.canvasH||1,m=t?`${Ne(-e.x/c*a)} ${Ne(-e.y/l*a)}`:void 0,f=t?`${Ne(t.width/c*a)} ${Ne(t.height/l*a)}`:void 0,y=d&&t?.url?`url(${t.url})`:void 0,p=!d&&t?.url?`url(${t.url}) ${m} / ${f} no-repeat`:void 0,b={transform:mt(e.atlasMatrix),"--polycss-atlas-size":`${a}px`,background:p,backgroundImage:d&&t?.url?`url(${t.url})`:void 0,backgroundPosition:d?m:void 0,backgroundSize:d?f:void 0,...d?{"--pnx":e.normal[0].toFixed(4),"--pny":e.normal[1].toFixed(4),"--pnz":e.normal[2].toFixed(4)}:null,...d&&y?{maskImage:y,maskMode:"alpha",maskPosition:m,maskSize:f,maskRepeat:"no-repeat",WebkitMaskImage:y,WebkitMaskPosition:m,WebkitMaskSize:f,WebkitMaskRepeat:"no-repeat"}:null,opacity:t?.url?void 0:0,pointerEvents:s==="none"?"none":void 0,...r},P=e.polygon.data?Object.fromEntries(Object.entries(e.polygon.data).map(([C,w])=>[`data-${C}`,String(w)])):{},E=o?.trim()||void 0;return Xe("s",{class:E,style:b,...P,...i})}function xe({entry:e,solidPaintDefaults:t,className:n,style:o,domAttrs:r,pointerEvents:i="auto",forceBorderShape:s=!1}){let d=Oe(e),a=d&&s&&yt(),c=!d||a?pt(e):null,l=e.shadedColor===t?.paintColor,m=mt(c?wr(e):Lr(e)),f=d?{transform:m,color:l?void 0:e.shadedColor,pointerEvents:i==="none"?"none":void 0,...o}:{transform:m,color:l?void 0:e.shadedColor,pointerEvents:i==="none"?"none":void 0,...o},y=e.polygon.data?Object.fromEntries(Object.entries(e.polygon.data).map(([P,E])=>[`data-${P}`,String(E)])):{},p=n?.trim()||void 0,b=P=>{let E=P.el;E&&(c?E.style.setProperty("border-shape",c):E.style.removeProperty("border-shape"),Er(E))};return Xe(d&&!a?"b":"i",{class:p,style:f,...y,...r,onVnodeMounted:b,onVnodeUpdated:b})}function Ze({entry:e,textureLighting:t,solidPaintDefaults:n,className:o,style:r,domAttrs:i,pointerEvents:s="auto"}){let d=t==="dynamic",a=le(e.polygon.color??"#cccccc"),c=d&&ft(a)===n?.dynamicColorKey,l={transform:mt(e.projectiveMatrix),color:d||e.shadedColor===n?.paintColor?void 0:e.shadedColor,pointerEvents:s==="none"?"none":void 0,...d&&!c?{"--pnx":e.normal[0].toFixed(4),"--pny":e.normal[1].toFixed(4),"--pnz":e.normal[2].toFixed(4),"--psr":(a.r/255).toFixed(4),"--psg":(a.g/255).toFixed(4),"--psb":(a.b/255).toFixed(4)}:d?{"--pnx":e.normal[0].toFixed(4),"--pny":e.normal[1].toFixed(4),"--pnz":e.normal[2].toFixed(4)}:null,...r},m=e.polygon.data?Object.fromEntries(Object.entries(e.polygon.data).map(([y,p])=>[`data-${y}`,String(p)])):{},f=o?.trim()||void 0;return Xe("b",{class:f,style:l,...m,...i})}function Ce({entry:e,textureLighting:t,solidPaintDefaults:n,className:o,style:r,domAttrs:i,pointerEvents:s="auto"}){let d=Vr(e,t,s,n);if(!d)return null;let a=e.polygon.data?Object.fromEntries(Object.entries(e.polygon.data).map(([l,m])=>[`data-${l}`,String(m)])):{},c=o?.trim()||void 0;return Xe("u",{class:c,style:{...d,...r},...a,...i})}var fn=ea({name:"PolyScene",inheritAttrs:!1,props:{polygons:{type:Array,default:void 0},perspective:{type:Number},rotX:{type:Number},rotY:{type:Number},zoom:{type:Number},directionalLight:{type:Object,default:void 0},ambientLight:{type:Object,default:void 0},textureLighting:{type:String,default:"baked"},textureQuality:{type:[Number,String],default:void 0},strategies:{type:Object,default:void 0},autoCenter:{type:Boolean,default:!1},shadow:{type:Object,default:void 0},class:{type:String},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},debugShowLabels:{type:Boolean},debugShowBackfaces:{type:Boolean}},setup(e,{slots:t,attrs:n}){let o=na(K);if(!o)throw new Error("polycss: PolyScene must be used inside a PolyCamera.");let{store:r,sceneElRef:i}=o,s=cn(0),d=new Map,a={register(M,D){d.set(M,D),s.value++},unregister(M){d.delete(M),s.value++},version:s,getEntries(){return Array.from(d.values())}},c=ee(()=>({textureLighting:e.textureLighting??"baked",directionalLight:e.directionalLight,ambientLight:e.ambientLight,shadow:e.shadow,shadowRegistry:a}));oa(st,c);let l=r.getState().cameraState,m=cn(null);un(m,M=>{i.value=M});let f=!1;ra(()=>{f||typeof document<"u"&&(ze(document),f=!0)}),un(()=>e.debugShowBackfaces,M=>{let D=m.value;D&&D.classList.toggle("polycss-debug-show-backfaces",!!M)});let y=ee(()=>e.polygons??[]),p=ee(()=>({directionalLight:e.directionalLight})),b=Fe(y,p),P=ee(()=>{let M=l,D=o.autoCenterOffset.value,V=ia,I=M.target[0]+D[0],u=M.target[1]+D[1],h=M.target[2]+D[2],v=u*V,A=I*V,x=h*V;return{transform:`${M.distance!==0?`translateZ(${-M.distance}px) `:""}scale(${M.zoom}) rotateX(${M.rotX}deg) rotate(${M.rotY}deg) translate3d(${-v}px, ${-A}px, ${-x}px)`}}),E=ee(()=>({tileSize:50,layerElevation:50,directionalLight:e.directionalLight,textureLighting:e.textureLighting,textureQuality:e.textureQuality})),C=ee(()=>{let M=e.textureLighting==="dynamic",D=M?void 0:e.directionalLight,V=M?void 0:e.ambientLight,I=We(b.value.polygons);return b.value.polygons.map((u,h)=>ve(u,h,{tileSize:E.value.tileSize,layerElevation:E.value.layerElevation,directionalLight:D,ambientLight:V,textureEdgeRepairEdges:I[h]}))}),w=ee(()=>e.textureLighting??"baked"),g=ee(()=>e.textureQuality),L=ee(()=>e.strategies),O=Pe(C,w,g,L),N=ee(()=>{if(e.textureLighting!=="dynamic")return null;let M=e.directionalLight?.direction??[.4,-.7,.59],D=Math.hypot(M[0],M[1],M[2])||1,V=M[0]/D,I=M[1]/D,u=M[2]/D,h=mn(e.directionalLight?.color??"#ffffff")?.rgb??[255,255,255],v=mn(e.ambientLight?.color??"#ffffff")?.rgb??[255,255,255],A=e.directionalLight?.intensity??1,x=e.ambientLight?.intensity??.4,T=k=>(k/255).toFixed(4),j=u,R=Math.sign(j||1)*Math.max(Math.abs(j),.01);return{"--plx":V.toFixed(4),"--ply":I.toFixed(4),"--plz":u.toFixed(4),"--clx":V.toFixed(4),"--cly":I.toFixed(4),"--clz":R.toFixed(4),"--plr":T(h[0]),"--plg":T(h[1]),"--plb":T(h[2]),"--pli":A.toFixed(4),"--par":T(v[0]),"--pag":T(v[1]),"--pab":T(v[2]),"--pai":x.toFixed(4)}}),_=50;dn(()=>{let M=m.value;if(!M)return;if(e.textureLighting!=="dynamic"){M.style.removeProperty("--shadow-ground-cssz");return}s.value;let D=a.getEntries();if(D.length===0){M.style.removeProperty("--shadow-ground-cssz");return}let V=1/0;for(let u of D)for(let h of u())for(let v of h.vertices)v[2]<V&&(V=v[2]);if(!Number.isFinite(V)){M.style.removeProperty("--shadow-ground-cssz");return}let I=e.shadow?.lift??.05;M.style.setProperty("--shadow-ground-cssz",((V+I)*_).toFixed(3))});let H=ee(()=>{if(!e.autoCenter)return[0,0,0];let M=b.value.sceneBbox;return[(M.min[0]+M.max[0])/2,(M.min[1]+M.max[1])/2,(M.min[2]+M.max[2])/2]});return dn(()=>{o.autoCenterOffset.value=H.value}),aa(()=>{}),()=>{let M=`polycss-scene${e.class?` ${e.class}`:""}`,D=E.value,V=O.entries.value.map((u,h)=>{if(u)return be({entry:u,page:O.pages.value[u.pageIndex],textureLighting:D.textureLighting??"baked"});let v=C.value[h];return!v||v.texture?null:O.useStableTriangle.value&&oe(v)?Ce({entry:v,textureLighting:D.textureLighting??"baked"}):O.useProjectiveQuad.value&&De(v)?Ze({entry:v,textureLighting:D.textureLighting??"baked"}):O.useBorderShape.value||O.useFullRectSolid.value?xe({entry:v,forceBorderShape:!O.useFullRectSolid.value}):null}),I=t.default?.()??[];return ta("div",{ref:m,class:M,"data-polycss-lighting":D.textureLighting??"baked","aria-hidden":"true",style:{...P.value,...N.value??null,...n.style},...Object.fromEntries(Object.entries(n).filter(([u])=>u!=="style"&&u!=="class"))},[...V,...I])}}});import{defineComponent as ua,h as ke,computed as q,inject as da,onMounted as ma,onBeforeUnmount as hn,ref as Pt,watch as vn}from"vue";import{computeSceneBbox as fa,inverseRotateVec3 as Pn,findOverlappingPolygonDuplicates as ya,parseHexColor as pa}from"@layoutit/polycss-core";import{ref as Ke,watch as sa,onUnmounted as la}from"vue";import{loadMesh as ca}from"@layoutit/polycss-core";var yn=[],gt=[];function Ge(e,t){let n=Ke(yn),o=Ke(!!e.value),r=Ke(null),i=Ke(gt),s=null;function d(){if(s){try{s.dispose()}catch{}s=null}}return sa(e,(a,c,l)=>{if(!a){d(),n.value=yn,o.value=!1,r.value=null,i.value=gt;return}let m=!1;o.value=!0,r.value=null;let f=s;ca(a,t).then(y=>{if(m){try{y.dispose()}catch{}return}if(f)try{f.dispose()}catch{}s=y,n.value=y.polygons,o.value=!1,r.value=null,i.value=y.warnings??gt}).catch(y=>{if(m)return;let p=y instanceof Error?y:new Error(String(y));o.value=!1,r.value=p}),l(()=>{m=!0})},{immediate:!0}),la(()=>{d()}),{polygons:n,loading:o,error:r,warnings:i,dispose:d}}var ht=new WeakMap;function pn(e,t){ht.set(e,t)}function gn(e){ht.delete(e)}function Ee(e){let t=e;for(;t;){if(t instanceof HTMLElement){let n=ht.get(t);if(n)return n}t=t.parentElement}return null}function Me(e,t,n){let o=Array.from(e.querySelectorAll("i,b,s,u"));for(let r of o){let i=r.getBoundingClientRect();if(!(i.width<=0||i.height<=0)&&t>=i.left&&t<=i.right&&n>=i.top&&n<=i.bottom)return!0}return!1}function vt(e,t,n){if(typeof document>"u")return null;let o=Array.from(document.querySelectorAll(".polycss-mesh"));for(let r of o){if(n&&!n(r))continue;let i=Ee(r);if(i&&Me(r,e,t))return i}return null}function ga(e){let t={};return e.paintColor&&(t["--polycss-paint"]=e.paintColor),e.dynamicColor&&(t["--psr"]=(e.dynamicColor.r/255).toFixed(4),t["--psg"]=(e.dynamicColor.g/255).toFixed(4),t["--psb"]=(e.dynamicColor.b/255).toFixed(4)),Object.keys(t).length>0?t:null}function ha(e,t,n){let o=[];return e&&o.push(`translate3d(${e[0]}px, ${e[1]}px, ${e[2]}px)`),t!==void 0&&(typeof t=="number"?t!==1&&o.push(`scale3d(${t}, ${t}, ${t})`):o.push(`scale3d(${t[0]}, ${t[1]}, ${t[2]})`)),n&&(n[0]&&o.push(`rotateX(${n[0]}deg)`),n[1]&&o.push(`rotateY(${n[1]}deg)`),n[2]&&o.push(`rotateZ(${n[2]}deg)`)),o.length>0?o.join(" "):void 0}function va(e){if(e.length===0)return e;let t=fa(e),n=(t.min[0]+t.max[0])/2,o=(t.min[1]+t.max[1])/2,r=(t.min[2]+t.max[2])/2;if(n===0&&o===0&&r===0)return e;let i=s=>[s[0]-n,s[1]-o,s[2]-r];return e.map(s=>({...s,vertices:s.vertices.map(i),...s.textureTriangles?.length?{textureTriangles:s.textureTriangles.map(d=>({...d,vertices:d.vertices.map(i)}))}:null}))}var Q=ua({name:"PolyMesh",inheritAttrs:!1,props:{id:{type:String,default:void 0},src:{type:String,default:void 0},mtl:{type:String,default:void 0},polygons:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},textureLighting:{type:String,default:void 0},textureQuality:{type:[Number,String],default:void 0},castShadow:{type:Boolean,default:!1},class:{type:String},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},onClick:{type:Function,default:void 0},onContextMenu:{type:Function,default:void 0},onDoubleClick:{type:Function,default:void 0},onWheel:{type:Function,default:void 0},onPointerDown:{type:Function,default:void 0},onPointerUp:{type:Function,default:void 0},onPointerMove:{type:Function,default:void 0},onPointerOver:{type:Function,default:void 0},onPointerOut:{type:Function,default:void 0},onPointerEnter:{type:Function,default:void 0},onPointerLeave:{type:Function,default:void 0},onPointerCancel:{type:Function,default:void 0}},setup(e,{slots:t,attrs:n,expose:o}){let r=q(()=>e.src??""),i=q(()=>e.mtl?{mtlUrl:e.mtl}:void 0),s=Ge(r,i.value),d=q(()=>e.src?s.polygons.value:e.polygons??[]),a=Pt(null);vn(d,()=>{a.value=null});let c=q(()=>a.value??d.value),l=q(()=>e.autoCenter?va(c.value):c.value),m=!t.polygon,f=Vt(),y=q(()=>e.textureLighting??f?.value.textureLighting??"baked"),p=q(()=>y.value==="dynamic"?void 0:f?.value.directionalLight),b=q(()=>y.value==="dynamic"?void 0:f?.value.ambientLight),P=q(()=>{if(y.value!=="dynamic")return null;let h=e.rotation;if(!h||h[0]===0&&h[1]===0&&h[2]===0)return null;let v=f?.value.directionalLight?.direction;if(!v)return null;let A=Pn(v,h),x=Math.hypot(A[0],A[1],A[2])||1;return{"--plx":(A[0]/x).toFixed(4),"--ply":(A[1]/x).toFixed(4),"--plz":(A[2]/x).toFixed(4)}}),E=Pt(e.rotation),C=q(()=>{if(!m)return[];let h=p.value,v=h&&E.value?{...h,direction:Pn(h.direction,E.value)}:h,A=We(l.value);return l.value.map((x,T)=>ve(x,T,{directionalLight:v,ambientLight:b.value,textureEdgeRepairEdges:A[T]}))}),w=q(()=>e.textureQuality),g=Pe(C,y,w),L=q(()=>m?tn(C.value,y.value):{}),O=q(()=>ga(L.value)),N=q(()=>{if(!e.castShadow||y.value!=="dynamic")return[];let h=f?.value.shadow,v=h?.color??"#000000",A=h?.opacity??.25,x=pa(v)?.rgb??[0,0,0],T=`rgba(${x[0]},${x[1]},${x[2]},${A})`,j=C.value;if(j.length===0)return[];let R=ya(l.value,{normalTolerance:.1,distanceTolerance:.5,overlapFraction:.4});return j.map((k,Y)=>{if(!k||R.has(Y))return null;let X=`matrix3d(${k.matrix})`,$=pt(k),z={transform:`var(--shadow-proj) ${X}`,color:T,width:`${k.canvasW}px`,height:`${k.canvasH}px`,"--pnx":k.normal[0].toFixed(4),"--pny":k.normal[1].toFixed(4),"--pnz":k.normal[2].toFixed(4)},F=S=>{let U=S.el;U&&U.style.setProperty("border-shape",$)};return ke("q",{class:"polycss-shadow",style:z,onVnodeMounted:F,onVnodeUpdated:F})})}),_=Symbol();vn(()=>[e.castShadow,y.value],([h,v],A,x)=>{let T=f?.value.shadowRegistry;T&&(h&&v==="dynamic"?T.register(_,()=>l.value):T.unregister(_),x(()=>T.unregister(_)))},{immediate:!0}),hn(()=>{f?.value.shadowRegistry?.unregister(_)});let H=Pt(null),M={get element(){return H.value},get id(){return e.id},getPosition:()=>e.position,getRotation:()=>e.rotation,getScale:()=>e.scale,getPolygons:()=>l.value,updatePolygon(h,v){let A=l.value,x=typeof h=="number"?h:A.indexOf(h);x<0||x>=A.length||(Object.assign(A[x],v),a.value=A.slice())},rebakeAtlas:()=>{E.value=e.rotation}};o(M),ma(()=>{H.value&&pn(H.value,M)}),hn(()=>{H.value&&gn(H.value)});let D=da(K,null),V=null;function I(h,v,A){let x=[];if(typeof document<"u"&&typeof document.elementsFromPoint=="function"){let Y=document.elementsFromPoint(v,A),X=new Set;for(let $ of Y){let z=Ee($);z&&!X.has(z)&&(X.add(z),x.push({object:z}))}}let T=0,j=0,R=D?.cameraElRef.value;if(R){let Y=R.getBoundingClientRect();Y.width>0&&Y.height>0&&(T=(v-Y.left)/Y.width*2-1,j=-((A-Y.top)/Y.height*2-1))}let k=0;return V&&(k=Math.hypot(v-V.x,A-V.y)),{object:x[0]?.object??M,eventObject:M,intersections:x,pointer:{x:T,y:j},delta:k,nativeEvent:h,stopPropagation:()=>h.stopPropagation()}}function u(h,v,A,x){h&&h(I(v,A,x))}return()=>{let h=ha(e.position,e.scale,e.rotation),v=l.value,A;if(v.length>0){let F=1/0,S=1/0,U=1/0,B=-1/0,re=-1/0,ce=-1/0;for(let se of v)for(let W of se.vertices)W[0]<F&&(F=W[0]),W[0]>B&&(B=W[0]),W[1]<S&&(S=W[1]),W[1]>re&&(re=W[1]),W[2]<U&&(U=W[2]),W[2]>ce&&(ce=W[2]);Number.isFinite(F)&&(A=`${(S+re)/2*50}px ${(F+B)/2*50}px ${(U+ce)/2*50}px`)}let x={transform:h,...A?{transformOrigin:A}:null,...P.value??void 0,...n.style,...O.value??void 0},T=Object.fromEntries(Object.entries(n).filter(([F])=>F!=="style"&&F!=="class")),j=`polycss-mesh${e.class?` ${e.class}`:""}`,R={};e.onClick&&(R.onClick=F=>{let S=F;u(e.onClick,S,S.clientX,S.clientY)}),e.onContextMenu&&(R.onContextmenu=F=>{let S=F;u(e.onContextMenu,S,S.clientX,S.clientY)}),e.onDoubleClick&&(R.onDblclick=F=>{let S=F;u(e.onDoubleClick,S,S.clientX,S.clientY)}),e.onWheel&&(R.onWheel=F=>{let S=F;u(e.onWheel,S,S.clientX,S.clientY)}),R.onPointerdown=F=>{let S=F;V={x:S.clientX,y:S.clientY},u(e.onPointerDown,S,S.clientX,S.clientY)},R.onPointerup=F=>{let S=F;u(e.onPointerUp,S,S.clientX,S.clientY),V=null},e.onPointerMove&&(R.onPointermove=F=>{let S=F;u(e.onPointerMove,S,S.clientX,S.clientY)}),(e.onPointerOver||e.onPointerEnter)&&(R.onPointerenter=F=>{let S=F;u(e.onPointerOver,S,S.clientX,S.clientY),u(e.onPointerEnter,S,S.clientX,S.clientY)}),(e.onPointerOut||e.onPointerLeave)&&(R.onPointerleave=F=>{let S=F;u(e.onPointerOut,S,S.clientX,S.clientY),u(e.onPointerLeave,S,S.clientX,S.clientY)}),e.onPointerCancel&&(R.onPointercancel=F=>{let S=F;u(e.onPointerCancel,S,S.clientX,S.clientY),V=null});let k=e.id?{"data-poly-mesh-id":e.id}:{};if(e.src&&s.loading.value&&s.polygons.value.length===0)return ke("div",{ref:H,class:`polycss-mesh polycss-mesh-loading${e.class?` ${e.class}`:""}`,style:x,...k,...R,...T},t.fallback?.()??[]);if(e.src&&s.error.value&&s.polygons.value.length===0)return ke("div",{ref:H,class:`polycss-mesh polycss-mesh-error${e.class?` ${e.class}`:""}`,style:x,...k,...R,...T},t.error?.({error:s.error.value})??[]);let Y=l.value,X=t.polygon?Y.map((F,S)=>ke("template",{key:S},t.polygon?.({polygon:F,index:S}))):g.entries.value.map((F,S)=>{if(F)return be({entry:F,page:g.pages.value[F.pageIndex],textureLighting:y.value});let U=C.value[S];return!U||U.texture?null:oe(U)?Ce({entry:U,textureLighting:y.value,solidPaintDefaults:L.value}):xe({entry:U,solidPaintDefaults:L.value})}),$=t.default?.()??[],z=N.value;return ke("div",{ref:H,class:j,style:x,...k,...R,...T},[...z,...X,...$])}}});import{defineComponent as Pa,h as ba,computed as xa}from"vue";var bn=Pa({name:"PolyGround",props:{size:{type:Number,default:6},z:{type:Number,default:0},center:{type:Array,default:()=>[0,0]},color:{type:String,default:"#7d848e"},class:{type:String,default:void 0}},setup(e){let t=xa(()=>{let n=e.size/2,[o,r]=e.center;return[{vertices:[[o-n,r-n,e.z],[o+n,r-n,e.z],[o+n,r+n,e.z],[o-n,r+n,e.z]],color:e.color}]});return()=>ba(Q,{polygons:t.value,castShadow:!1,class:e.class?`polycss-ground ${e.class}`:"polycss-ground"})}});import{computed as xn}from"vue";function Ca(e){return typeof e=="function"?xn(()=>{let{texture:t,key:n}=e();return{texture:t,key:n}}):xn(()=>({texture:e.texture,key:e.key}))}import{computed as Ae,defineComponent as Ea,h as Cn}from"vue";var Ma=4;function qe(e,t=Ma){let n=e.toFixed(t).replace(/\.?0+$/,"");return Number(n)===0||Object.is(Number(n),-0)?"0":`${n}px`}function Aa(e){if(e.length!==4)return null;let t=[...new Set(e.map(r=>r[0]))].sort((r,i)=>r-i),n=[...new Set(e.map(r=>r[1]))].sort((r,i)=>r-i);if(t.length!==2||n.length!==2)return null;let o=new Set([`${t[0]},${n[0]}`,`${t[0]},${n[1]}`,`${t[1]},${n[0]}`,`${t[1]},${n[1]}`]);for(let r of e)if(!o.has(`${r[0]},${r[1]}`))return null;return{u0:t[0],u1:t[1],v0:n[0],v1:n[1]}}function Sa({plan:e,material:t,uvRect:n,className:o,style:r,domAttrs:i,pointerEvents:s="auto"}){let{u0:d,u1:a,v0:c,v1:l}=n,m=a-d,f=l-c,y=1/m,p=1/f,b=Math.max(c,l),P=d/m,E=(1-b)/f,C={transform:`matrix3d(${e.canonicalMatrix})`,backgroundImage:`url(${t.texture})`,backgroundSize:`${qe(y)} ${qe(p)}`,backgroundPosition:`${qe(-P)} ${qe(-E)}`,pointerEvents:s==="none"?"none":void 0,...r},w=e.polygon.data?Object.fromEntries(Object.entries(e.polygon.data).map(([L,O])=>[`data-${L}`,String(O)])):{},g=o?.trim()||void 0;return Cn("i",{class:g,style:C,...w,...i})}var En=Ea({name:"Poly",inheritAttrs:!1,props:{vertices:{type:Array,required:!0},color:{type:String},texture:{type:String},uvs:{type:Array,default:void 0},data:{type:Object,default:void 0},material:{type:Object,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},textureLighting:{type:String,default:void 0},textureQuality:{type:[Number,String],default:void 0},context:{type:Object,default:void 0},baseColor:{type:String},pointerEvents:{type:String,default:"auto"}},setup(e,{attrs:t}){let n=Ae(()=>e.textureLighting??e.context?.textureLighting??"baked"),o=Ae(()=>e.textureQuality??e.context?.textureQuality),r=Ae(()=>e.material?.texture??e.texture),i=Ae(()=>e.material&&e.uvs?Aa(e.uvs):null),s=Ae(()=>{let c=e.context?.tileSize??50;return ve({vertices:e.vertices,color:e.baseColor??e.color,texture:r.value,uvs:e.uvs,data:e.data},0,{tileSize:c,layerElevation:e.context?.layerElevation??c,directionalLight:e.context?.directionalLight})}),d=Ae(()=>i.value?[]:[s.value]),a=Pe(d,n,o);return()=>{let c=s.value,l=a.entries.value[0],m=[];e.position&&m.push(`translate3d(${e.position[0]}px, ${e.position[1]}px, ${e.position[2]}px)`),e.scale!==void 0&&(typeof e.scale=="number"?e.scale!==1&&m.push(`scale3d(${e.scale}, ${e.scale}, ${e.scale})`):m.push(`scale3d(${e.scale[0]}, ${e.scale[1]}, ${e.scale[2]})`)),e.rotation&&(e.rotation[0]&&m.push(`rotateX(${e.rotation[0]}deg)`),e.rotation[1]&&m.push(`rotateY(${e.rotation[1]}deg)`),e.rotation[2]&&m.push(`rotateZ(${e.rotation[2]}deg)`));let f=m.length>0?m.join(" "):void 0,y={};if(e.data)for(let[E,C]of Object.entries(e.data))y[`data-${E}`]=String(C);let p={...t,...y},b=Object.fromEntries(Object.entries(p).filter(([E])=>E!=="class"&&E!=="style")),P;return i.value&&e.material&&c?P=Sa({plan:c,material:e.material,uvRect:i.value,className:p.class??void 0,style:p.style,domAttrs:b,pointerEvents:e.pointerEvents??"auto"}):l?P=be({entry:l,page:a.pages.value[l.pageIndex],textureLighting:n.value,className:p.class??void 0,style:p.style,domAttrs:b,pointerEvents:e.pointerEvents??"auto"}):c&&!c.texture&&(P=oe(c)?Ce({entry:c,textureLighting:n.value,className:p.class??void 0,style:p.style,domAttrs:b,pointerEvents:e.pointerEvents??"auto"}):De(c)?Ze({entry:c,textureLighting:n.value,className:p.class??void 0,style:p.style,domAttrs:b,pointerEvents:e.pointerEvents??"auto"}):xe({entry:c,className:p.class??void 0,style:p.style,domAttrs:b,pointerEvents:e.pointerEvents??"auto"})),P?f?Cn("div",{class:"polycss-poly-wrapper",style:{transform:f,position:"absolute",transformStyle:"preserve-3d"}},[P]):P:null}}});import{defineComponent as Ta,inject as wa,onMounted as La,onBeforeUnmount as Ra,watch as bt,ref as Oa}from"vue";import{BASE_TILE as Mn}from"@layoutit/polycss-core";var Da=150,An=4,ka=513e-6,_a=10,Ha=3,Sn=16.67,Ia=50,Tn=.1,wn=10,Ln=0,Rn=5e3,Va=.3,Fa=.05;function za(e){return e===!0?-1:e===void 0||e===!1?1:e}function Na(e,t,n,o,r){let i=za(r),s=e/An*i,d=t/An*i;return{rotX:Math.max(0,Math.min(100,n-d)),rotY:((o-s)%360+360)%360}}function On(e,t,n,o,r){let i=Math.max(.01,n),s=Math.max(.1,Math.cos(o*Math.PI/180)),d=-e/(i*Mn),a=-t/(i*Mn*s),c=-r*Math.PI/180,l=Math.cos(c),m=Math.sin(c);return{dWorldX:a*l-d*m,dWorldY:a*m+d*l}}var Dn=Ta({name:"PolyOrbitControls",props:{drag:{type:Boolean,default:!0},wheel:{type:Boolean,default:!0},dolly:{type:Boolean,default:!1},invert:{type:[Boolean,Number],default:!1},minZoom:{type:Number,default:Tn},maxZoom:{type:Number,default:wn},minDistance:{type:Number,default:Ln},maxDistance:{type:Number,default:Rn},animate:{type:[Boolean,Object],default:!1}},emits:{change:e=>!0,"interaction-start":e=>!0,"interaction-end":e=>!0},setup(e,{emit:t}){let n=wa(K,null);if(!n)return typeof console<"u"&&console.warn("[polycss] <PolyOrbitControls> must be used inside <PolyCamera>."),()=>null;let{store:o,cameraRef:r,cameraElRef:i,applyTransformDirect:s}=n,d=()=>({rotX:r.value.state.rotX,rotY:r.value.state.rotY,zoom:r.value.state.zoom,target:r.value.state.target,distance:r.value.state.distance}),a=()=>{t("change",d())},c=()=>{t("interaction-start",d())},l=()=>{t("interaction-end",d())},m=null,f={x:0,y:0},y=Oa(!1),p=null,b=null,P=null;function E(){let g=i.value;if(!g)return;let L=!1,O={x:0,y:0},N=u=>{if(e.drag&&m===null&&u.isPrimary!==!1){u.preventDefault(),m=u.pointerId,f={x:u.clientX,y:u.clientY},g.style.cursor="grabbing";try{u.target.setPointerCapture(u.pointerId)}catch{}e.animate&&e.animate.pauseOnInteraction!==!1&&(y.value=!0),c()}},_=u=>{if(m===null||u.pointerId!==m||!e.drag)return;u.preventDefault();let h=u.clientX-f.x,v=u.clientY-f.y;f={x:u.clientX,y:u.clientY};let A=r.value,x=A.state;if(u.shiftKey){let{dWorldX:T,dWorldY:j}=On(h,v,x.zoom,x.rotX,x.rotY);A.update({target:[x.target[0]+T,x.target[1]+j,x.target[2]]})}else{let{rotX:T,rotY:j}=Na(h,v,x.rotX,x.rotY,e.invert);A.update({rotX:T,rotY:j})}s(),o.updateCameraFromRef(A),a()},H=u=>{if(m===u.pointerId){m=null,g.style.cursor=e.drag?"grab":"";try{u.target.releasePointerCapture(u.pointerId)}catch{}y.value=!1,l()}},M=u=>{u.preventDefault()},D=u=>{u.button===2&&(L=!0,O={x:u.clientX,y:u.clientY})},V=u=>{if(!L||!e.drag)return;let h=u.clientX-O.x,v=u.clientY-O.y;O={x:u.clientX,y:u.clientY};let A=r.value,x=A.state,{dWorldX:T,dWorldY:j}=On(h,v,x.zoom,x.rotX,x.rotY);A.update({target:[x.target[0]+T,x.target[1]+j,x.target[2]]}),s(),o.updateCameraFromRef(A),a()},I=u=>{u.button===2&&L&&(L=!1,l())};g.style.cursor="grab",g.style.touchAction="none",g.style.userSelect="none",g.addEventListener("pointerdown",N),g.addEventListener("pointermove",_),g.addEventListener("pointerup",H),g.addEventListener("pointercancel",H),g.addEventListener("contextmenu",M),g.addEventListener("mousedown",D),g.addEventListener("mousemove",V),g.addEventListener("mouseup",I),p=()=>{g.removeEventListener("pointerdown",N),g.removeEventListener("pointermove",_),g.removeEventListener("pointerup",H),g.removeEventListener("pointercancel",H),g.removeEventListener("contextmenu",M),g.removeEventListener("mousedown",D),g.removeEventListener("mousemove",V),g.removeEventListener("mouseup",I),g.style.cursor="",g.style.touchAction="",g.style.userSelect=""}}function C(){let g=i.value;if(!g)return;let L=!1,O=null,N=_=>{if(!e.wheel)return;_.preventDefault();let H=_.deltaMode===1?16:_.deltaMode===2?100:1,M=_.deltaY*H;_.ctrlKey?M*=_a:M*=Ha;let D=r.value;if(e.dolly){let V=e.minDistance??Ln,I=e.maxDistance??Rn,u=Math.max(V,Math.min(I,D.state.distance+M*Fa));D.update({distance:u})}else{let V=Math.exp(-M*ka),I=e.minZoom??Tn,u=e.maxZoom??wn,h=Math.max(I,Math.min(u,D.state.zoom*V));D.update({zoom:h})}s(),o.updateCameraFromRef(D),L||(L=!0,c()),a(),O!==null&&clearTimeout(O),O=setTimeout(()=>{O=null,L=!1,l()},Da)};g.addEventListener("wheel",N,{passive:!1}),b=()=>{g.removeEventListener("wheel",N),O!==null&&clearTimeout(O)}}function w(){let g=null,L=!1,O=0,N=_=>{if(L)return;let H=e.animate;if(!H){g=requestAnimationFrame(N);return}if(y.value)O=_;else{let M=Math.min(Ia,O?_-O:Sn);O=_;let V=(H.speed??Va)*(M/Sn),I=r.value,u=I.state;if(H.axis==="x"){let h=((u.rotX+V)%360+360)%360;I.update({rotX:h})}else{let h=((u.rotY+V)%360+360)%360;I.update({rotY:h})}s(),o.updateCameraFromRef(I),a()}g=requestAnimationFrame(N)};g=requestAnimationFrame(N),P=()=>{L=!0,g!==null&&cancelAnimationFrame(g),P=null}}return La(()=>{e.drag&&E(),e.wheel&&C(),e.animate&&w()}),Ra(()=>{p?.(),b?.(),P?.(),p=null,b=null}),bt(()=>e.drag,g=>{g&&!p&&E(),!g&&p&&(p(),p=null)}),bt(()=>e.wheel,g=>{g&&!b&&C(),!g&&b&&(b(),b=null)}),bt(()=>!!e.animate,g=>{g&&!P&&w(),!g&&P&&P()}),()=>null}});import{defineComponent as ja,inject as Ya,onMounted as Ua,onBeforeUnmount as Xa,watch as xt,ref as $a}from"vue";import{BASE_TILE as kn}from"@layoutit/polycss-core";var Ba=150,_n=4,Wa=513e-6,Za=10,Ka=3,Hn=16.67,Ga=50,In=.1,Vn=10,Fn=0,zn=5e3,qa=.3,Qa=.05;function Ja(e){return e===!0?-1:e===void 0||e===!1?1:e}function Nn(e,t,n,o,r){let i=Ja(r),s=e/_n*i,d=t/_n*i;return{rotX:Math.max(0,Math.min(100,n-d)),rotY:((o-s)%360+360)%360}}function ei(e,t,n,o,r){let i=Math.max(.01,n),s=Math.max(.1,Math.cos(o*Math.PI/180)),d=-e/(i*kn),a=-t/(i*kn*s),c=-r*Math.PI/180,l=Math.cos(c),m=Math.sin(c);return{dWorldX:a*l-d*m,dWorldY:a*m+d*l}}var jn=ja({name:"PolyMapControls",props:{drag:{type:Boolean,default:!0},wheel:{type:Boolean,default:!0},dolly:{type:Boolean,default:!1},invert:{type:[Boolean,Number],default:!1},minZoom:{type:Number,default:In},maxZoom:{type:Number,default:Vn},minDistance:{type:Number,default:Fn},maxDistance:{type:Number,default:zn},animate:{type:[Boolean,Object],default:!1}},emits:{change:e=>!0,"interaction-start":e=>!0,"interaction-end":e=>!0},setup(e,{emit:t}){let n=Ya(K,null);if(!n)return typeof console<"u"&&console.warn("[polycss] <PolyMapControls> must be used inside <PolyCamera>."),()=>null;let{store:o,cameraRef:r,cameraElRef:i,applyTransformDirect:s}=n,d=()=>({rotX:r.value.state.rotX,rotY:r.value.state.rotY,zoom:r.value.state.zoom,target:r.value.state.target,distance:r.value.state.distance}),a=()=>{t("change",d())},c=()=>{t("interaction-start",d())},l=()=>{t("interaction-end",d())},m=null,f={x:0,y:0},y=$a(!1),p=null,b=null,P=null;function E(){let g=i.value;if(!g)return;let L=!1,O={x:0,y:0},N=u=>{if(e.drag&&m===null&&u.isPrimary!==!1){u.preventDefault(),m=u.pointerId,f={x:u.clientX,y:u.clientY},g.style.cursor="grabbing";try{u.target.setPointerCapture(u.pointerId)}catch{}e.animate&&e.animate.pauseOnInteraction!==!1&&(y.value=!0),c()}},_=u=>{if(m===null||u.pointerId!==m||!e.drag)return;u.preventDefault();let h=u.clientX-f.x,v=u.clientY-f.y;f={x:u.clientX,y:u.clientY};let A=r.value,x=A.state;if(u.shiftKey){let{rotX:T,rotY:j}=Nn(h,v,x.rotX,x.rotY,e.invert);A.update({rotX:T,rotY:j})}else{let{dWorldX:T,dWorldY:j}=ei(h,v,x.zoom,x.rotX,x.rotY);A.update({target:[x.target[0]+T,x.target[1]+j,x.target[2]]})}s(),o.updateCameraFromRef(A),a()},H=u=>{if(m===u.pointerId){m=null,g.style.cursor=e.drag?"grab":"";try{u.target.releasePointerCapture(u.pointerId)}catch{}y.value=!1,l()}},M=u=>{u.preventDefault()},D=u=>{u.button===2&&(L=!0,O={x:u.clientX,y:u.clientY})},V=u=>{if(!L||!e.drag)return;let h=u.clientX-O.x,v=u.clientY-O.y;O={x:u.clientX,y:u.clientY};let A=r.value,x=A.state,{rotX:T,rotY:j}=Nn(h,v,x.rotX,x.rotY,e.invert);A.update({rotX:T,rotY:j}),s(),o.updateCameraFromRef(A),a()},I=u=>{u.button===2&&L&&(L=!1,l())};g.style.cursor="grab",g.style.touchAction="none",g.style.userSelect="none",g.addEventListener("pointerdown",N),g.addEventListener("pointermove",_),g.addEventListener("pointerup",H),g.addEventListener("pointercancel",H),g.addEventListener("contextmenu",M),g.addEventListener("mousedown",D),g.addEventListener("mousemove",V),g.addEventListener("mouseup",I),p=()=>{g.removeEventListener("pointerdown",N),g.removeEventListener("pointermove",_),g.removeEventListener("pointerup",H),g.removeEventListener("pointercancel",H),g.removeEventListener("contextmenu",M),g.removeEventListener("mousedown",D),g.removeEventListener("mousemove",V),g.removeEventListener("mouseup",I),g.style.cursor="",g.style.touchAction="",g.style.userSelect=""}}function C(){let g=i.value;if(!g)return;let L=!1,O=null,N=_=>{if(!e.wheel)return;_.preventDefault();let H=_.deltaMode===1?16:_.deltaMode===2?100:1,M=_.deltaY*H;_.ctrlKey?M*=Za:M*=Ka;let D=r.value;if(e.dolly){let V=e.minDistance??Fn,I=e.maxDistance??zn,u=Math.max(V,Math.min(I,D.state.distance+M*Qa));D.update({distance:u})}else{let V=Math.exp(-M*Wa),I=e.minZoom??In,u=e.maxZoom??Vn,h=Math.max(I,Math.min(u,D.state.zoom*V));D.update({zoom:h})}s(),o.updateCameraFromRef(D),L||(L=!0,c()),a(),O!==null&&clearTimeout(O),O=setTimeout(()=>{O=null,L=!1,l()},Ba)};g.addEventListener("wheel",N,{passive:!1}),b=()=>{g.removeEventListener("wheel",N),O!==null&&clearTimeout(O)}}function w(){let g=null,L=!1,O=0,N=_=>{if(L)return;let H=e.animate;if(!H){g=requestAnimationFrame(N);return}if(y.value)O=_;else{let M=Math.min(Ga,O?_-O:Hn);O=_;let V=(H.speed??qa)*(M/Hn),I=r.value,u=I.state;if(H.axis==="x"){let h=((u.rotX+V)%360+360)%360;I.update({rotX:h})}else{let h=((u.rotY+V)%360+360)%360;I.update({rotY:h})}s(),o.updateCameraFromRef(I),a()}g=requestAnimationFrame(N)};g=requestAnimationFrame(N),P=()=>{L=!0,g!==null&&cancelAnimationFrame(g),P=null}}return Ua(()=>{e.drag&&E(),e.wheel&&C(),e.animate&&w()}),Xa(()=>{p?.(),b?.(),P?.(),p=null,b=null}),xt(()=>e.drag,g=>{g&&!p&&E(),!g&&p&&(p(),p=null)}),xt(()=>e.wheel,g=>{g&&!b&&C(),!g&&b&&(b(),b=null)}),xt(()=>!!e.animate,g=>{g&&!P&&w(),!g&&P&&P()}),()=>null}});import{defineComponent as ti,h as Qe,inject as Yn,onBeforeUnmount as Un,onMounted as Ct,ref as _e,computed as Se}from"vue";import{arrowPolygons as ni,eulerXYZFromQuat as oi,planePolygons as ri,quatFromAxisAngle as ai,quatFromEulerXYZ as ii,quatMultiply as si,ringQuadPolygons as li}from"@layoutit/polycss-core";var Je="#ff3653",et="#8adb00",tt="#2c8fff",ci=.6,ui=.8,di=1,me=50,Xn=60,mi=.6,fi=.0125,yi=.15,pi=.04,gi=1,$n=.02,Et=1.04,hi=.1,vi=.25,Qn=1e-4,He={0:1,1:0,2:2},Bn=[{cssAxis:0,sign:1,key:"x",color:Je},{cssAxis:0,sign:-1,key:"-x",color:Je},{cssAxis:1,sign:1,key:"y",color:et},{cssAxis:1,sign:-1,key:"-y",color:et},{cssAxis:2,sign:1,key:"z",color:tt},{cssAxis:2,sign:-1,key:"-z",color:tt}],Wn=[{cssAxis:0,key:"x",color:Je},{cssAxis:1,key:"y",color:et},{cssAxis:2,key:"z",color:tt}],Zn=[{perpAxis:2,axisA:0,axisB:1,key:"xy",color:tt},{perpAxis:1,axisA:0,axisB:2,key:"xz",color:et},{perpAxis:0,axisA:1,axisB:2,key:"yz",color:Je}];function Mt(e,t){let n=/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(e);if(!n)return e;let o=parseInt(n[1],16),r=parseInt(n[2],16),i=parseInt(n[3],16);return`rgba(${o}, ${r}, ${i}, ${t})`}function nt(e,t){return!t||t<=0?e:Math.round(e/t)*t}function Pi(e){return e.replace("-","")[0]}function At(e,t,n,o){let r=n*Math.PI/180,i=o*Math.PI/180,s=[0,0,0];s[e]=t;let d=s[0]*Math.sin(i)+s[1]*Math.cos(i),a=s[2];return d*Math.sin(r)+a*Math.cos(r)<0}function bi(e){if(e.length===0)return Xn;let t=1/0,n=1/0,o=1/0,r=-1/0,i=-1/0,s=-1/0;for(let d of e)for(let a of d.vertices)a[0]<t&&(t=a[0]),a[0]>r&&(r=a[0]),a[1]<n&&(n=a[1]),a[1]>i&&(i=a[1]),a[2]<o&&(o=a[2]),a[2]>s&&(s=a[2]);return Number.isFinite(t)?Math.max(r-t,i-n,s-o)*me*mi:Xn}function xi(e){if(e.length===0)return[0,0,0];let t=1/0,n=1/0,o=1/0,r=-1/0,i=-1/0,s=-1/0;for(let d of e)for(let a of d.vertices)a[0]<t&&(t=a[0]),a[0]>r&&(r=a[0]),a[1]<n&&(n=a[1]),a[1]>i&&(i=a[1]),a[2]<o&&(o=a[2]),a[2]>s&&(s=a[2]);return Number.isFinite(t)?[(n+i)/2*me,(t+r)/2*me,(o+s)/2*me]:[0,0,0]}function Kn(e){let t=e.shaftLengthCss,n=[0,0,0];n[e.cssAxis]=e.sign;let o=e.wrapper.ownerDocument.createElement("div");o.style.position="absolute",o.style.left="0",o.style.top="0",o.style.width="0",o.style.height="0",o.style.transform=`translate3d(${n[0]*t}px, ${n[1]*t}px, ${n[2]*t}px)`,e.wrapper.appendChild(o);let r=e.wrapper.getBoundingClientRect(),i=o.getBoundingClientRect();e.wrapper.removeChild(o);let s=(i.left-r.left)/t,d=(i.top-r.top)/t,a=s*s+d*d;if(a<Qn)return;let c=e.target.getPosition()??[0,0,0];e.onMouseDown?.(),e.onDraggingChanged?.(!0);let l=f=>{let y=f.clientX-e.startClientX,p=f.clientY-e.startClientY,b=(y*s+p*d)/a;b=nt(b,e.translationSnap);let P=[c[0]+b*n[0],c[1]+b*n[1],c[2]+b*n[2]];e.onObjectChange?.({object:e.target,position:P}),e.onChange?.()},m=()=>{window.removeEventListener("pointermove",l),window.removeEventListener("pointerup",m),window.removeEventListener("pointercancel",m);let f=y=>{y.stopPropagation(),y.stopImmediatePropagation()};window.addEventListener("click",f,{capture:!0,once:!0}),setTimeout(()=>window.removeEventListener("click",f,!0),0),e.onMouseUp?.(),e.onDraggingChanged?.(!1)};window.addEventListener("pointermove",l),window.addEventListener("pointerup",m),window.addEventListener("pointercancel",m)}function Gn(e){let t=[0,0,0];t[e.axisA]=1;let n=[0,0,0];n[e.axisB]=1;let o=e.probeDistanceCss;function r(m){let f=e.wrapper.ownerDocument.createElement("div");f.style.position="absolute",f.style.left="0",f.style.top="0",f.style.width="0",f.style.height="0",f.style.transform=`translate3d(${m[0]*o}px, ${m[1]*o}px, ${m[2]*o}px)`,e.wrapper.appendChild(f);let y=e.wrapper.getBoundingClientRect(),p=f.getBoundingClientRect();return e.wrapper.removeChild(f),{x:(p.left-y.left)/o,y:(p.top-y.top)/o}}let i=r(t),s=r(n),d=i.x*s.y-s.x*i.y;if(Math.abs(d)<Qn)return;let a=e.target.getPosition()??[0,0,0];e.onMouseDown?.(),e.onDraggingChanged?.(!0);let c=m=>{let f=m.clientX-e.startClientX,y=m.clientY-e.startClientY,p=(s.y*f-s.x*y)/d,b=(-i.y*f+i.x*y)/d;p=nt(p,e.translationSnap),b=nt(b,e.translationSnap);let P=[a[0]+p*t[0]+b*n[0],a[1]+p*t[1]+b*n[1],a[2]+p*t[2]+b*n[2]];e.onObjectChange?.({object:e.target,position:P}),e.onChange?.()},l=()=>{window.removeEventListener("pointermove",c),window.removeEventListener("pointerup",l),window.removeEventListener("pointercancel",l),e.onMouseUp?.(),e.onDraggingChanged?.(!1)};window.addEventListener("pointermove",c),window.addEventListener("pointerup",l),window.addEventListener("pointercancel",l)}function qn(e){let t=e.wrapper.getBoundingClientRect(),n=t.left,o=t.top,r=Math.atan2(e.startClientY-o,e.startClientX-n),i=0,s=e.target.getRotation()??[0,0,0],d=ii(s);e.onMouseDown?.(),e.onDraggingChanged?.(!0);let a=l=>{let m=Math.atan2(l.clientY-o,l.clientX-n),f=m-r;f>Math.PI?f-=2*Math.PI:f<-Math.PI&&(f+=2*Math.PI),i+=f,r=m;let y=i*180/Math.PI;y=nt(y,e.rotationSnap);let p=[0,0,0];p[e.cssAxis]=1;let b=ai(p,y*Math.PI/180),P=oi(si(b,d));e.onObjectChange?.({object:e.target,rotation:P}),e.onChange?.()},c=()=>{window.removeEventListener("pointermove",a),window.removeEventListener("pointerup",c),window.removeEventListener("pointercancel",c);let l=m=>{m.stopPropagation(),m.stopImmediatePropagation()};window.addEventListener("click",l,{capture:!0,once:!0}),setTimeout(()=>window.removeEventListener("click",l,!0),0),e.onMouseUp?.(),e.onDraggingChanged?.(!1),e.target.rebakeAtlas()};window.addEventListener("pointermove",a),window.addEventListener("pointerup",c),window.addEventListener("pointercancel",c)}function Ci(e){return!!e&&typeof e=="object"&&"value"in e}function Ei(e){return e?Ci(e)?e.value??null:e:null}var Jn=ti({name:"PolyTransformControls",props:{object:{type:null,default:null},mode:{type:String,default:"translate"},space:{type:String,default:"world"},size:{type:Number,default:1},showX:{type:Boolean,default:!0},showY:{type:Boolean,default:!0},showZ:{type:Boolean,default:!0},translationSnap:{type:Number,default:null},rotationSnap:{type:Number,default:null},enabled:{type:Boolean,default:!0}},emits:{change:()=>!0,objectChange:e=>!0,mouseDown:()=>!0,mouseUp:()=>!0,draggingChanged:e=>!0},setup(e,{emit:t}){let n=_e(null),o=_e(null),r=_e(new Map),i=Se(()=>Ei(e.object)),s=_e(0);Ct(()=>{s.value++});let d=_e(0),a=Yn(K,void 0),c=null;Ct(()=>{let u=a?.store;u&&(c=u.subscribe(()=>{d.value++}))}),Un(()=>{c?.()});function l(){d.value;let u=a?.store.getState().cameraState;return{rotX:u?.rotX??65,rotY:u?.rotY??45}}let m=Se(()=>(s.value,bi(i.value?.getPolygons()??[]))),f=Se(()=>m.value*e.size);function y(u){return o.value===u?di:n.value===u?ui:ci}function p(){t("change")}function b(u){t("objectChange",u)}function P(u){t("draggingChanged",u)}function E(){t("mouseDown")}function C(){t("mouseUp")}let w=Yn(K,void 0),g=null;Ct(()=>{let u=w?.cameraElRef.value;if(!u)return;let h=v=>{let A=i.value;if(!A||!e.enabled||v.target?.closest(".polycss-transform-gizmo"))return;let T={x:e.showX,y:e.showY,z:e.showZ};if(e.mode==="translate")for(let R of Zn){let k=["x","y","z"][R.axisA],Y=["x","y","z"][R.axisB];if(!T[k]||!T[Y])continue;let X=document.querySelector(`.polycss-transform-plane--${R.key}`);if(!X||!Me(X,v.clientX,v.clientY))continue;v.preventDefault(),v.stopPropagation();let $=X.closest("[data-poly-transform-controls]");if(!$)return;o.value=R.key,Gn({axisA:R.axisA,axisB:R.axisB,probeDistanceCss:f.value,wrapper:$,target:A,startClientX:v.clientX,startClientY:v.clientY,translationSnap:e.translationSnap,onChange:p,onObjectChange:b,onMouseDown:E,onMouseUp:C,onDraggingChanged:z=>{z||(o.value=null),P(z)}});return}let j=e.mode==="translate"?Bn:Wn;for(let R of j){let k=R.key.replace("-","")[0];if(!T[k])continue;let Y=document.querySelector(`.polycss-transform-${e.mode==="translate"?"arrow":"ring"}--${R.key}`);if(!Y||!(e.mode==="rotate"?Me(Y,v.clientX,v.clientY):Me(Y,v.clientX,v.clientY)))continue;v.preventDefault(),v.stopPropagation();let $=Y.closest("[data-poly-transform-controls]");if(!$)return;if(o.value=R.key,e.mode==="translate"){let z=R;Kn({cssAxis:z.cssAxis,sign:z.sign,shaftLengthCss:f.value,wrapper:$,target:A,startClientX:v.clientX,startClientY:v.clientY,translationSnap:e.translationSnap,onChange:p,onObjectChange:b,onMouseDown:E,onMouseUp:C,onDraggingChanged:F=>{F||(o.value=null),P(F)}})}else qn({cssAxis:R.cssAxis,wrapper:$,target:A,startClientX:v.clientX,startClientY:v.clientY,rotationSnap:e.rotationSnap,onChange:p,onObjectChange:b,onMouseDown:E,onMouseUp:C,onDraggingChanged:z=>{z||(o.value=null),P(z)}});return}};u.addEventListener("pointerdown",h),g=()=>u.removeEventListener("pointerdown",h)}),Un(()=>{g?.()});let L=Se(()=>{if(e.mode!=="translate")return[];s.value;let h=f.value/me,{rotX:v,rotY:A}=l();return Bn.filter(x=>({x:e.showX,y:e.showY,z:e.showZ})[Pi(x.key)]).map(x=>{let T=y(x.key),j=At(x.cssAxis,x.sign,v,A);return{spec:x,polygons:ni({axis:He[x.cssAxis],sign:x.sign,shaftLength:h,shaftHalfThickness:h*fi,headLength:h*yi,headHalfThickness:h*pi,color:Mt(x.color,T),shaft:!j})}})}),O=Se(()=>{if(e.mode!=="translate")return[];s.value;let h=f.value/me,v={x:e.showX,y:e.showY,z:e.showZ},A=["x","y","z"],{rotX:x,rotY:T}=l(),j=h*vi;return Zn.filter(R=>v[A[R.axisA]]&&v[A[R.axisB]]).map(R=>{let k=y(R.key),Y=He[R.perpAxis],X=(Y+1)%3,$=(Y+2)%3,z=He[X],F=He[$],S=At(z,1,x,T)?-1:1,U=At(F,1,x,T)?-1:1;return{spec:R,polygons:ri({axis:Y,size:h*hi,offset:[S*j,U*j],color:Mt(R.color,k)})}})}),N=Se(()=>{if(e.mode!=="rotate")return[];s.value;let v=f.value*gi/me*Et;return Wn.filter(A=>({x:e.showX,y:e.showY,z:e.showZ})[A.key]).map(A=>{let x=y(A.key);return{spec:A,polygons:li({axis:He[A.cssAxis],outerRadius:v,color:Mt(A.color,x)})}})}),_=(1-$n)/Et,H=(1+$n)/Et;function M(u){return h=>{if(!e.enabled)return;let v=i.value;if(!v)return;h.stopPropagation();let x=h.eventObject.element?.closest("[data-poly-transform-controls]");x&&(o.value=u.key,Kn({cssAxis:u.cssAxis,sign:u.sign,shaftLengthCss:f.value,wrapper:x,target:v,startClientX:h.nativeEvent.clientX,startClientY:h.nativeEvent.clientY,translationSnap:e.translationSnap,onChange:p,onObjectChange:b,onMouseDown:E,onMouseUp:C,onDraggingChanged:T=>{T||(o.value=null),P(T)}}))}}function D(u){return h=>{if(!e.enabled)return;let v=i.value;if(!v)return;h.stopPropagation();let x=h.eventObject.element?.closest("[data-poly-transform-controls]");x&&(o.value=u.key,Gn({axisA:u.axisA,axisB:u.axisB,probeDistanceCss:f.value,wrapper:x,target:v,startClientX:h.nativeEvent.clientX,startClientY:h.nativeEvent.clientY,translationSnap:e.translationSnap,onChange:p,onObjectChange:b,onMouseDown:E,onMouseUp:C,onDraggingChanged:T=>{T||(o.value=null),P(T)}}))}}function V(u){return h=>{if(!e.enabled)return;let v=i.value;if(!v)return;let A=h.eventObject.element;h.stopPropagation();let x=A?.closest("[data-poly-transform-controls]");x&&(o.value=u.key,qn({cssAxis:u.cssAxis,wrapper:x,target:v,startClientX:h.nativeEvent.clientX,startClientY:h.nativeEvent.clientY,rotationSnap:e.rotationSnap,onChange:p,onObjectChange:b,onMouseDown:E,onMouseUp:C,onDraggingChanged:T=>{T||(o.value=null),P(T)}}))}}function I(u){return{onPointerOver:()=>{n.value=u},onPointerOut:()=>{n.value===u&&(n.value=null)}}}return()=>{let u=i.value;if(!u)return null;let h=u.getPosition()??[0,0,0],v=xi(u.getPolygons()),A=h[0]+v[0],x=h[1]+v[1],T=h[2]+v[2],j={transform:`translate3d(${A}px, ${x}px, ${T}px)`,position:"absolute",transformStyle:"preserve-3d",zIndex:1e3},R=e.mode==="translate"?[...L.value.map(({spec:k,polygons:Y})=>Qe(Q,{key:`arrow-${k.key}`,polygons:Y,class:`polycss-transform-gizmo polycss-transform-arrow polycss-transform-arrow--${k.key}`,textureLighting:"baked",onPointerDown:M(k),...I(k.key)})),...O.value.map(({spec:k,polygons:Y})=>Qe(Q,{key:`plane-${k.key}`,polygons:Y,class:`polycss-transform-gizmo polycss-transform-plane polycss-transform-plane--${k.key}`,textureLighting:"baked",onPointerDown:D(k),...I(k.key)}))]:N.value.map(({spec:k,polygons:Y})=>Qe(Q,{key:k.key,polygons:Y,class:`polycss-transform-gizmo polycss-transform-ring polycss-transform-ring--${k.key}`,style:{"--ring-inner-ratio":_,"--ring-outer-ratio":H},textureLighting:"baked",onPointerDown:V(k),...I(k.key)}));return Qe("div",{class:"polycss-transform-controls","data-poly-transform-controls":"","data-poly-mode":e.mode,"data-poly-space":e.space,style:j},R)}}});import{defineComponent as Mi,inject as Ai,onMounted as Si,onBeforeUnmount as Ti,watch as wi}from"vue";import{BASE_TILE as Li}from"@layoutit/polycss-core";var Ri={enabled:!0,lookEnabled:!0,moveEnabled:!0,jumpEnabled:!0,crouchEnabled:!0,lookSensitivity:.15,invertY:!1,moveSpeed:5,jumpVelocity:7,gravity:18,eyeHeight:1.7,crouchHeight:1,groundZ:0,minPitch:5,maxPitch:175};function St(e,t){return{enabled:t.enabled??e.enabled,lookEnabled:t.lookEnabled??e.lookEnabled,moveEnabled:t.moveEnabled??e.moveEnabled,jumpEnabled:t.jumpEnabled??e.jumpEnabled,crouchEnabled:t.crouchEnabled??e.crouchEnabled,lookSensitivity:t.lookSensitivity??e.lookSensitivity,invertY:t.invertY??e.invertY,moveSpeed:t.moveSpeed??e.moveSpeed,jumpVelocity:t.jumpVelocity??e.jumpVelocity,gravity:t.gravity??e.gravity,eyeHeight:t.eyeHeight??e.eyeHeight,crouchHeight:t.crouchHeight??e.crouchHeight,groundZ:t.groundZ??e.groundZ,minPitch:t.minPitch??e.minPitch,maxPitch:t.maxPitch??e.maxPitch}}var to=new Set(["KeyW","ArrowUp"]),no=new Set(["KeyS","ArrowDown"]),oo=new Set(["KeyA","ArrowLeft"]),ro=new Set(["KeyD","ArrowRight"]),ao=new Set(["Space"]),Tt=new Set(["ControlLeft","ControlRight"]);function eo(e){return to.has(e)||no.has(e)||oo.has(e)||ro.has(e)||ao.has(e)||Tt.has(e)}function Oi(){return{change:[],start:[],end:[]}}function Te(e,t){let n=[...e[t]];for(let o of n)try{o()}catch{}}var io=Mi({name:"PolyFirstPersonControls",props:{enabled:{type:Boolean,default:!0},lookEnabled:{type:Boolean,default:!0},moveEnabled:{type:Boolean,default:!0},jumpEnabled:{type:Boolean,default:!0},crouchEnabled:{type:Boolean,default:!0},lookSensitivity:{type:Number,default:.15},invertY:{type:Boolean,default:!1},moveSpeed:{type:Number,default:5},jumpVelocity:{type:Number,default:7},gravity:{type:Number,default:18},eyeHeight:{type:Number,default:1.7},crouchHeight:{type:Number,default:1},groundZ:{type:Number,default:0},minPitch:{type:Number,default:5},maxPitch:{type:Number,default:175}},emits:{change:e=>!0,"interaction-start":e=>!0,"interaction-end":e=>!0},setup(e,{emit:t,expose:n}){let o=Ai(K,null);if(!o)return typeof console<"u"&&console.warn("[polycss] <PolyFirstPersonControls> must be used inside <PolyCamera>."),n({}),()=>null;let{store:r,cameraRef:i,cameraElRef:s,applyTransformDirect:d}=o,a=St(Ri,e),c=[0,0,0],l=null,m=0,f=!1,y=!1,p=!1,b=new Set,P=0,E=0,C=Oi();function w(u,h){let v=u*Math.PI/180,A=h*Math.PI/180;return[-Math.sin(v)*Math.cos(A),-Math.sin(v)*Math.sin(A),-Math.cos(v)]}function g(){let u=s.value,h=u?getComputedStyle(u).perspective:"",v=parseFloat(h);return(Number.isFinite(v)&&v>0?v:8e3)/Li}function L(){let u=i.value.state,h=w(u.rotX??90,u.rotY??0),v=g();return[c[0]+h[0]*v,c[1]+h[1]*v,c[2]+h[2]*v]}function O(){let u=L(),h=i.value;h.update({target:u}),d(),r.updateCameraFromRef(h)}let N=.05;function _(u){if(l===null||f)return;let h=Math.min(N,m?(u-m)/1e3:.0167);if(m=u,a.enabled){let v=!1,A=i.value.state;if(a.moveEnabled){let R=0,k=0;for(let Y of b)to.has(Y)?R+=1:no.has(Y)?R-=1:ro.has(Y)?k+=1:oo.has(Y)&&(k-=1);if(R!==0||k!==0){let X=(A.rotY??0)*Math.PI/180,$=-Math.cos(X),z=-Math.sin(X),F=-Math.sin(X),S=Math.cos(X),U=Math.hypot(R,k)||1,B=a.moveSpeed*h;c[0]+=($*R+F*k)/U*B,c[1]+=(z*R+S*k)/U*B,v=!0}}let T=a.crouchEnabled&&(b.has("ControlLeft")||b.has("ControlRight"))?a.crouchHeight:a.eyeHeight;a.jumpEnabled&&(P!==0||E>0)?(P-=a.gravity*h,E+=P*h,E<=0&&(E=0,P=0)):a.jumpEnabled||(E=0,P=0);let j=a.groundZ+T+E;if(Math.abs(c[2]-j)>1e-4&&(c[2]=j,v=!0),v){let R=L(),k=i.value;k.update({target:R}),d(),r.updateCameraFromRef(k),Te(C,"change");try{t("change",[c[0],c[1],c[2]])}catch{}}}l=requestAnimationFrame(_)}function H(){l!==null||f||(m=0,l=requestAnimationFrame(_))}function M(){l!==null&&(cancelAnimationFrame(l),l=null)}let D=null;function V(){let u=s.value;if(!u)return;let h=u.ownerDocument??document,v=h.defaultView??globalThis,A=()=>{if(!(!a.enabled||!a.lookEnabled||f||y))try{u.requestPointerLock()}catch{}},x=()=>{let z=h.pointerLockElement===u;if(z!==y){if(y=z,z){p=!0,Te(C,"start");try{t("interaction-start",[c[0],c[1],c[2]])}catch{}}else if(p){p=!1,Te(C,"end");try{t("interaction-end",[c[0],c[1],c[2]])}catch{}}}},T=z=>{if(!y||f||!a.enabled||!a.lookEnabled)return;let F=z.movementX??0,S=z.movementY??0;if(F===0&&S===0)return;let U=i.value,B=U.state,re=a.lookSensitivity,ce=a.invertY?-1:1,se=(((B.rotY??0)-F*re)%360+360)%360,W=(B.rotX??90)-S*re*ce;W<a.minPitch?W=a.minPitch:W>a.maxPitch&&(W=a.maxPitch);let ue=w(W,se),we=g(),rt=[c[0]+ue[0]*we,c[1]+ue[1]*we,c[2]+ue[2]*we];U.update({rotX:W,rotY:se,target:rt}),d(),r.updateCameraFromRef(U),Te(C,"change");try{t("change",[c[0],c[1],c[2]])}catch{}},j=z=>{if(!(!a.enabled||f)&&eo(z.code)&&!(!y&&!a.moveEnabled)){if(ao.has(z.code)){if(!a.jumpEnabled)return;z.preventDefault(),!b.has(z.code)&&P===0&&E===0&&(P=a.jumpVelocity),b.add(z.code);return}Tt.has(z.code)&&!a.crouchEnabled||!a.moveEnabled&&!Tt.has(z.code)||(z.preventDefault(),b.add(z.code))}},R=z=>{eo(z.code)&&b.delete(z.code)},k=()=>{b.clear()};u.addEventListener("click",A),h.addEventListener("pointerlockchange",x),h.addEventListener("mousemove",T),v.addEventListener("keydown",j),v.addEventListener("keyup",R),v.addEventListener("blur",k);let Y=v.getComputedStyle(u).perspective,X=parseFloat(Y),$=Number.isFinite(X)&&X>0?X:2e3;u.style.setProperty("--polycss-fpv-perspective",`${$}px`),u.classList.add("polycss-fpv-host"),D=()=>{if(u.removeEventListener("click",A),h.removeEventListener("pointerlockchange",x),h.removeEventListener("mousemove",T),v.removeEventListener("keydown",j),v.removeEventListener("keyup",R),v.removeEventListener("blur",k),u.style.cursor="",u.classList.remove("polycss-fpv-host"),u.style.removeProperty("--polycss-fpv-perspective"),b.clear(),y)try{h.exitPointerLock()}catch{}}}n({update(u){a=St(a,u);let h=s.value;h&&!f&&(h.style.cursor=a.lookEnabled?"crosshair":"")},resume(){if(!f)return;f=!1;let u=s.value;u&&(u.style.cursor=a.lookEnabled?"crosshair":""),H()},pause(){if(f)return;f=!0,M();let u=s.value;if(u&&(u.style.cursor=""),p){p=!1,Te(C,"end");try{t("interaction-end",[c[0],c[1],c[2]])}catch{}}},destroy(){f=!0,M()},lock(){if(!a.enabled||!a.lookEnabled||f)return;let u=s.value;try{u?.requestPointerLock()}catch{}},unlock(){if(y){let u=s.value;try{u?.ownerDocument?.exitPointerLock()}catch{}}},isLocked(){return y},getOrigin(){return[c[0],c[1],c[2]]},setOrigin(u){c[0]=u[0],c[1]=u[1],c[2]=u[2],O(),Te(C,"change");try{t("change",[c[0],c[1],c[2]])}catch{}},addEventListener(u,h){let v=C[u];v.includes(h)||v.push(h)},removeEventListener(u,h){let v=C[u],A=v.indexOf(h);A>=0&&v.splice(A,1)},hasEventListener(u,h){return C[u].includes(h)}}),Si(()=>{let u=s.value;if(!u)return;f=!1,y=!1,p=!1,b.clear(),P=0,E=0;let v=i.value.state.target??[0,0,0];c[0]=v[0],c[1]=v[1],c[2]=a.groundZ+a.eyeHeight,O(),u.style.cursor=a.lookEnabled?"crosshair":"",V(),H()}),Ti(()=>{f=!0,M(),D?.(),D=null});let I=["enabled","lookEnabled","moveEnabled","jumpEnabled","crouchEnabled","lookSensitivity","invertY","moveSpeed","jumpVelocity","gravity","eyeHeight","crouchHeight","groundZ","minPitch","maxPitch"];for(let u of I)wi(()=>e[u],()=>{a=St(a,e);let h=s.value;h&&!f&&(h.style.cursor=a.lookEnabled?"crosshair":"")});return()=>null}});import{defineComponent as Di,h as ki,inject as wt,onBeforeUnmount as _i,onMounted as Hi,provide as Ii,reactive as Vi,ref as Fi,computed as zi}from"vue";var Ie=Symbol("polycss.selection"),so=Di({name:"PolySelect",props:{multiple:{type:Boolean,default:!1},clearOnMiss:{type:Boolean,default:!0},filter:{type:Function,default:void 0}},emits:{change:e=>!0,pointerMissed:e=>!0},setup(e,{emit:t,slots:n}){let o=Vi({selected:[]}),r=zi(()=>o.selected);function i(l){let m=e.filter?e.filter(l):l;o.selected=m,t("change",m)}let s={get selected(){return o.selected},set:l=>i(l),add:l=>{e.multiple?o.selected.includes(l)||i([...o.selected,l]):i([l])},remove:l=>{o.selected.includes(l)&&i(o.selected.filter(m=>m!==l))},toggle:l=>{o.selected.includes(l)?i(o.selected.filter(m=>m!==l)):e.multiple?i([...o.selected,l]):i([l])},clear:()=>i([]),has:l=>o.selected.includes(l)};Ii(Ie,{selected:r,api:s});let d=wt(K,void 0),a=(l,m)=>vt(l,m,f=>!f.closest("[data-poly-transform-controls]")),c=null;return Hi(()=>{let l=d?.cameraElRef.value;if(!l)return;let m=f=>{if(f.target?.closest("[data-poly-transform-controls]"))return;let p=Ee(f.target)??a(f.clientX,f.clientY);if(!p){t("pointerMissed",f),e.clearOnMiss&&i([]);return}e.multiple&&(f.shiftKey||f.metaKey||f.ctrlKey)?s.toggle(p):o.selected.length===1&&o.selected[0]===p?i([]):i([p])};l.addEventListener("click",m),c=()=>l.removeEventListener("click",m)}),_i(()=>{c?.()}),()=>ki("div",{style:{display:"contents"},"data-poly-select":""},n.default?.())}});function lo(){let e=wt(Ie,void 0);return e?e.selected:Fi([])}function co(){let e=wt(Ie,void 0);if(!e)throw new Error("polycss: usePolySelectionApi must be used inside <PolySelect>.");return e.api}import{defineComponent as Ni,h as ji,computed as Yi}from"vue";import{axesHelperPolygons as Ui}from"@layoutit/polycss-core";var uo=Ni({name:"PolyAxesHelper",props:{size:{type:Number,default:void 0},thickness:{type:Number,default:void 0},negative:{type:Boolean,default:void 0},xColor:{type:String,default:void 0},yColor:{type:String,default:void 0},zColor:{type:String,default:void 0}},setup(e){let t=Yi(()=>Ui({size:e.size,thickness:e.thickness,negative:e.negative,xColor:e.xColor,yColor:e.yColor,zColor:e.zColor}));return()=>ji(Q,{polygons:t.value})}});import{defineComponent as Xi,h as $i,computed as Lt}from"vue";import{octahedronPolygons as Bi}from"@layoutit/polycss-core";var Rt=50,mo=Xi({name:"PolyDirectionalLightHelper",props:{light:{type:Object,required:!0},target:{type:Array,default:void 0},distance:{type:Number,default:5},size:{type:Number,default:.35},color:{type:String,default:void 0}},setup(e){let t=Lt(()=>e.color??e.light.color??"#ffd54a"),n=Lt(()=>Bi({center:[0,0,0],size:e.size,color:t.value})),o=Lt(()=>{let r=e.light.direction,i=r[0],s=r[1],d=r[2],a=Math.hypot(i,s,d)||1,c=e.target?.[0]??0,l=e.target?.[1]??0,m=e.target?.[2]??0,f=c+s/a*e.distance,y=l+i/a*e.distance,p=m+d/a*e.distance;return[y*Rt,f*Rt,p*Rt]});return()=>$i(Q,{polygons:n.value,position:o.value})}});import{ref as fo,watch as Wi,onUnmounted as Zi,computed as ot}from"vue";import{createPolyAnimationMixer as Ki}from"@layoutit/polycss-core";function fe(e){return e&&typeof e=="object"&&"value"in e?e.value:e}function Gi(e,t,n){let o=fo(null),r=null,i=null,s=null,d=fo(0);function a(){return n==null?o.value:fe(n)??o.value}function c(){i!==null&&(cancelAnimationFrame(i),i=null),s=null}function l(){c(),r&&(r.stopAllAction(),r.uncacheRoot(),r=null,d.value++)}function m(){if(i!==null)return;function C(w){if(s===null){s=w,i=requestAnimationFrame(C);return}let g=(w-s)/1e3;s=w,r?.update(g),i=requestAnimationFrame(C)}i=requestAnimationFrame(C)}function f(){l();let C=fe(e),w=fe(t);if(!C||C.length===0||!w)return;let g=a();g&&(r=Ki(g,w),d.value++,m())}let y=Wi(()=>{let C=fe(e),w=fe(t),g=n!=null?fe(n):o.value;return{c:C,ctrl:w,r:g}},()=>f(),{immediate:!0,deep:!1});Zi(()=>{y(),l()});let p=ot(()=>fe(e)??[]),b=ot(()=>p.value.map(C=>C.name)),P=ot(()=>(d.value,r)),E=ot(()=>{d.value;let C=p.value,w={};for(let g of C)Object.defineProperty(w,g.name,{enumerable:!0,get(){if(!r)return null;try{return r.clipAction(g.name)}catch{return null}}});return w});return{ref:o,mixer:P,clips:p,names:b,actions:E}}import{CAMERA_BACKFACE_CULL_EPS as Rc,VOXEL_CAMERA_CULL_AXIS_EPS as Oc,VOXEL_CAMERA_CULL_NORMAL_LIMIT as Dc,normalizePolygons as kc,mergePolygons as _c,coverPlanarPolygons as Hc,optimizeMeshPolygons as Ic,cullInteriorPolygons as Vc,cameraCullNormalGroups as Fc,cameraCullNormalGroupsFromPolygons as zc,cameraCullNormalKey as Nc,cameraCullVisibleSignature as jc,cameraFacingDepth as Yc,isAxisAlignedSurfaceNormal as Uc,isVoxelCameraCullableNormalGroups as Xc,normalFacesCamera as $c,polygonCssSurfaceNormal as Bc,polygonFacesCamera as Wc,parseObj as Zc,parseMtl as Kc,parseGltf as Gc,bakeSolidTextureSamples as qc,bakeSolidTextureSampledPolygons as Qc,loadMesh as Jc,createIsometricCamera as eu,parseVox as tu,polygonFaces as nu,computeTexturePaintMetrics as ou,computeShapeLighting as ru,parseColor as au,parsePureColor as iu,parseHexColor as su,parseRgbColor as lu,formatColor as cu,clampChannel as uu,shadeColor as du,rotateVec3 as mu,inverseRotateVec3 as fu,axesHelperPolygons as yu,boxPolygons as pu,arrowPolygons as gu,ringPolygons as hu,octahedronPolygons as vu,buildSceneContext as Pu,computeSceneBbox as bu,BASE_TILE as xu,DEFAULT_CAMERA_STATE as Cu,DEFAULT_PROJECTION as Eu,normalizeInvertMultiplier as Mu,createPolyAnimationMixer as Au,LoopOnce as Su,LoopRepeat as Tu,LoopPingPong as wu}from"@layoutit/polycss-core";export{xu as BASE_TILE,Rc as CAMERA_BACKFACE_CULL_EPS,Cu as DEFAULT_CAMERA_STATE,Eu as DEFAULT_PROJECTION,Su as LoopOnce,wu as LoopPingPong,Tu as LoopRepeat,En as Poly,uo as PolyAxesHelper,Le as PolyCamera,K as PolyCameraContextKey,mo as PolyDirectionalLightHelper,io as PolyFirstPersonControls,bn as PolyGround,jn as PolyMapControls,Q as PolyMesh,Dn as PolyOrbitControls,Ht as PolyOrthographicCamera,Le as PolyPerspectiveCamera,fn as PolyScene,so as PolySelect,Ie as PolySelectionContextKey,Jn as PolyTransformControls,Oc as VOXEL_CAMERA_CULL_AXIS_EPS,Dc as VOXEL_CAMERA_CULL_NORMAL_LIMIT,gu as arrowPolygons,yu as axesHelperPolygons,Qc as bakeSolidTextureSampledPolygons,qc as bakeSolidTextureSamples,pu as boxPolygons,Pu as buildSceneContext,Fc as cameraCullNormalGroups,zc as cameraCullNormalGroupsFromPolygons,Nc as cameraCullNormalKey,jc as cameraCullVisibleSignature,Yc as cameraFacingDepth,uu as clampChannel,bu as computeSceneBbox,ru as computeShapeLighting,ou as computeTexturePaintMetrics,Hc as coverPlanarPolygons,eu as createIsometricCamera,Au as createPolyAnimationMixer,Vc as cullInteriorPolygons,vt as findMeshUnderPoint,Ee as findPolyMeshHandle,cu as formatColor,ze as injectPolyBaseStyles,fu as inverseRotateVec3,Uc as isAxisAlignedSurfaceNormal,Xc as isVoxelCameraCullableNormalGroups,Jc as loadMesh,_c as mergePolygons,$c as normalFacesCamera,Mu as normalizeInvertMultiplier,kc as normalizePolygons,vu as octahedronPolygons,Ic as optimizeMeshPolygons,au as parseColor,Gc as parseGltf,su as parseHexColor,Kc as parseMtl,Zc as parseObj,iu as parsePureColor,lu as parseRgbColor,tu as parseVox,Me as pointInMeshElement,Bc as polygonCssSurfaceNormal,nu as polygonFaces,Wc as polygonFacesCamera,hu as ringPolygons,mu as rotateVec3,du as shadeColor,Gi as usePolyAnimation,ye as usePolyCamera,Ca as usePolyMaterial,Ge as usePolyMesh,Fe as usePolySceneContext,lo as usePolySelect,co as usePolySelectionApi};
429
+ `;import{parsePureColor as yc}from"@layoutit/polycss-core";import{inject as Ra}from"vue";var Qt=Symbol("polycss/scene-context");function Nn(){return Ra(Qt,null)}import{isSolidTrianglePlan as st,isProjectiveQuadPlan as lt,buildTextureEdgeRepairSets as _t,buildSeamBleedPolygonEdges as Bt,buildSeamBleedPolygonSet as pd,cssBorderShapeForPlan as fd}from"@layoutit/polycss-core";import{getSolidPaintDefaultsForPlansCore as Oa,safariCssProjectiveUnsupported as Yn,parseHex as Da,rgbKey as ka}from"@layoutit/polycss-core";function Jt(e){if(!!!(e.defaultView?.CSS??(typeof CSS<"u"?CSS:void 0))?.supports?.("border-shape","polygon(0 0, 100% 0, 0 100%) circle(0)"))return!1;let r=(e.defaultView??(typeof window<"u"?window:void 0))?.matchMedia;return r?r("(pointer: fine)").matches&&r("(hover: hover)").matches:!0}function en(e){if($n(e))return!0;let n=(e.defaultView??(typeof window<"u"?window:void 0))?.navigator?.userAgent??"";return n?!Yn(n):!0}function wt(e){let t=e.defaultView?.CSS??(typeof CSS<"u"?CSS:void 0);return!!t?.supports?.("corner-top-left-shape","bevel")&&!!t.supports("corner-top-right-shape","bevel")&&!!t.supports("corner-bottom-right-shape","bevel")&&!!t.supports("corner-bottom-left-shape","bevel")}function $n(e){let t=e.defaultView?.CSS??(typeof CSS<"u"?CSS:void 0);return!!t?.supports?.("corner-top-left-shape","bevel")&&!!t.supports("corner-top-right-shape","bevel")}function at(e){let n=(e.defaultView??(typeof window<"u"?window:void 0))?.navigator?.userAgent??"";return n?!Yn(n):!0}function jn(e,t,n,o,r){let a=new Set(o?.disable??[]);return Oa(e,t,a,{solidTriangleSupported:en(n),projectiveQuadSupported:at(n),cornerShapeSupported:wt(n),borderShapeSupported:Jt(n)},Da,ka,r)}function tn(e,t,n=new Set,o){let r=o??(typeof document<"u"?document:null);if(!r)return{};let a=n.size>0?{disable:Array.from(n)}:void 0;return jn(e,t,r,a)}function $e(e){let t=e??(typeof document<"u"?document:null);if(!t){if(!!!(typeof CSS<"u"?CSS:void 0)?.supports?.("border-shape","polygon(0 0, 100% 0, 0 100%) circle(0)"))return!1;let r=typeof matchMedia<"u"?matchMedia:void 0;return r?r("(pointer: fine)").matches&&r("(hover: hover)").matches:!0}return Jt(t)}function je(e){let t=e??(typeof document<"u"?document:null);if(!t){let n=typeof CSS<"u"?CSS:void 0;if(n?.supports?.("corner-top-left-shape","bevel")&&n.supports("corner-top-right-shape","bevel"))return!0;let o=(typeof navigator<"u"?navigator:globalThis.navigator)?.userAgent??"";if(!o)return!0;let r=/\b(?:Chrome|HeadlessChrome|Chromium|Edg|OPR)\//.test(o);return!/\bVersion\/[\d.]+.*\bSafari\//.test(o)||r}return en(t)}import{filterAtlasPlans as Ia}from"@layoutit/polycss-core";function nn(e,t,n,o){let r=o??(typeof document<"u"?document:null);return Ia(e,t,n,{solidTriangleSupported:je(o),projectiveQuadSupported:o?at(o):!0,borderShapeSupported:$e(o),cornerShapeSupported:r?wt(r):!1})}import{packTextureAtlasPlansWithScaleCore as Fa}from"@layoutit/polycss-core";function Xn(e){if(!e)return!1;let n=(e.defaultView??(typeof window<"u"?window:void 0))?.matchMedia;return n?n("(pointer: coarse)").matches||n("(hover: none)").matches:!1}function on(e,t,n){return Fa(e,t,Xn(n))}import{expandClipPoints as Va,TEXTURE_TRIANGLE_BLEED as _a,TEXTURE_EDGE_REPAIR_ALPHA_MIN as Ba,TEXTURE_EDGE_REPAIR_SOURCE_ALPHA_MIN as za,TEXTURE_EDGE_REPAIR_RADIUS as Un}from"@layoutit/polycss-core";var Xe=new Map;function Kn(e){let t=Xe.get(e);return t||(t=new Promise((n,o)=>{let r=new Image;r.decoding="async",r.crossOrigin="anonymous",r.onload=()=>n(r),r.onerror=()=>o(new Error(`texture load failed: ${e}`)),r.src=e}),Xe.set(e,t),t.then(()=>{Xe.get(e)===t&&Xe.delete(e)},()=>{Xe.get(e)===t&&Xe.delete(e)})),t}function fe(e,t,n=1,o=0,r=0,a=1,i=0,u=0){e.setTransform(n*t,o*t,r*t,a*t,i*t,u*t)}function rn(e){let t=e/255;return t<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function an(e){let t=e<=.0031308?e*12.92:1.055*Math.pow(e,.4166666666666667)-.055;return Math.max(0,Math.min(255,Math.round(t*255)))}function Qn(e,t,n,o,r,a,i){let u=Math.round(t*i),s=Math.round(n*i),c=Math.max(1,Math.round(o*i)),m=Math.max(1,Math.round(r*i)),p=e.getImageData(u,s,c,m),l=p.data,h=a.r,f=a.g,P=a.b;for(let v=0;v<l.length;v+=4)l[v+3]!==0&&(l[v]=an(rn(l[v])*h),l[v+1]=an(rn(l[v+1])*f),l[v+2]=an(rn(l[v+2])*P));e.putImageData(p,u,s)}function Jn(e,t,n,o,r,a,i){let u=t.naturalWidth||t.width||1,s=t.naturalHeight||t.height||1,c=Math.max(r/u,a/s),m=u*c,p=s*c;fe(e,i),e.drawImage(t,n+(r-m)/2,o+(a-p)/2,m,p)}function it(e,t){return Math.max(0,Math.min(t,e))}function sn(e,t,n,o,r,a,i,u){let s=t.naturalWidth||t.width||1,c=t.naturalHeight||t.height||1,m=it(Math.min(n.minU,n.maxU)*s,s),p=it(Math.max(n.minU,n.maxU)*s,s),l=it(Math.min(n.minV,n.maxV)*c,c),h=it(Math.max(n.minV,n.maxV)*c,c),f=Math.floor(m),P=Math.floor(l),v=Math.ceil(p)-f,E=Math.ceil(h)-P;v<1&&(f=Math.floor(it((n.minU+n.maxU)/2*s,s-1)),v=1),E<1&&(P=Math.floor(it((n.minV+n.maxV)/2*c,c-1)),E=1),f=Math.max(0,Math.min(s-1,f)),P=Math.max(0,Math.min(c-1,P)),v=Math.max(1,Math.min(s-f,v)),E=Math.max(1,Math.min(c-P,E)),fe(e,u),e.drawImage(t,f,P,v,E,o,r,a,i)}function eo(e){return e==="repeat"||e==="mirrored-repeat"}function Wn(e,t){return eo(e)?Math.floor(t):0}function qn(e,t){return eo(e)?Math.ceil(t)-1:0}function Gn(e,t){return e==="mirrored-repeat"&&Math.abs(t%2)===1}function Zn(e,t,n,o,r,a,i){let u=r?Wn(a,r.minU):0,s=r?qn(a,r.maxU):0,c=r?Wn(i,r.minV):0,m=r?qn(i,r.maxV):0;for(let p=u;p<=s;p++)for(let l=c;l<=m;l++){let h=Gn(a,p),f=Gn(i,l);if(!h&&!f){e.drawImage(t,p*n,l*o);continue}e.save(),e.translate((h?p+1:p)*n,(f?l+1:l)*o),e.scale(h?-1:1,f?-1:1),e.drawImage(t,0,0),e.restore()}}function Rt(e,t,n,o){for(let r=0;r<o.length;r+=2){let a=t+o[r],i=n+o[r+1];r===0?e.moveTo(a,i):e.lineTo(a,i)}e.closePath()}function vt(e,t,n,o,r,a){for(let i=0;i<o.length;i+=2){let u=t+o[i]+r,s=n+o[i+1]+a;i===0?e.moveTo(u,s):e.lineTo(u,s)}e.closePath()}function to(e,t,n,o){fe(e,o),e.beginPath(),Rt(e,t.x,t.y,t.screenPts),e.clip(),fe(e,o),e.fillStyle=n==="dynamic"?t.polygon.color??"#cccccc":t.shadedColor,e.fillRect(t.x,t.y,t.canvasW,t.canvasH)}function Lt(e,t,n,o,r){t.polygon.textureAlphaMode==="opaque"&&(fe(e,n),e.fillStyle=t.polygon.color??"#cccccc",e.fillRect(t.x+o,t.y+r,t.canvasW,t.canvasH))}function no(e,t,n,o,r=0,a=0){if(t.textureTriangles?.length){let i=n.naturalWidth||n.width||1,u=n.naturalHeight||n.height||1;for(let s of t.textureTriangles){let c=Va(s.screenPts,_a);e.save(),fe(e,o),e.beginPath(),vt(e,t.x,t.y,c,r,a),e.clip(),Lt(e,t,o,r,a),s.uvAffine?(fe(e,o,s.uvAffine.a/i,s.uvAffine.c/i,s.uvAffine.b/u,s.uvAffine.d/u,t.x+s.uvAffine.e+r,t.y+s.uvAffine.f+a),Zn(e,n,i,u,s.uvSampleRect,t.polygon.textureWrap?.s,t.polygon.textureWrap?.t)):s.uvSampleRect&&sn(e,n,s.uvSampleRect,t.x+r,t.y+a,t.canvasW,t.canvasH,o),e.restore()}}else if(t.uvAffine){let i=n.naturalWidth||n.width||1,u=n.naturalHeight||n.height||1,s=t.polygon.textureAlphaMode==="opaque";s&&(e.save(),fe(e,o),e.beginPath(),vt(e,t.x,t.y,t.screenPts,r,a),e.clip(),Lt(e,t,o,r,a)),fe(e,o,t.uvAffine.a/i,t.uvAffine.c/i,t.uvAffine.b/u,t.uvAffine.d/u,t.x+t.uvAffine.e+r,t.y+t.uvAffine.f+a),Zn(e,n,i,u,t.uvSampleRect,t.polygon.textureWrap?.s,t.polygon.textureWrap?.t),s&&e.restore()}else if(t.uvSampleRect){let i=t.polygon.textureAlphaMode==="opaque";i&&(e.save(),fe(e,o),e.beginPath(),vt(e,t.x,t.y,t.screenPts,r,a),e.clip(),Lt(e,t,o,r,a)),sn(e,n,t.uvSampleRect,t.x+r,t.y+a,t.canvasW,t.canvasH,o),i&&e.restore()}else{let i=t.polygon.textureAlphaMode==="opaque";i&&(e.save(),fe(e,o),e.beginPath(),vt(e,t.x,t.y,t.screenPts,r,a),e.clip(),Lt(e,t,o,r,a)),Jn(e,n,t.x+r,t.y+a,t.canvasW,t.canvasH,o),i&&e.restore()}}function Ha(e,t,n,o,r,a){let i=r-n,u=a-o,s=i*i+u*u;if(s<=1e-9)return Math.hypot(e-n,t-o);let c=Math.max(0,Math.min(1,((e-n)*i+(t-o)*u)/s));return Math.hypot(e-(n+i*c),t-(o+u*c))}function Na(e,t,n,o){let r=1/0,a=n.length/2;for(let i of o){if(i<0||i>=a)continue;let u=i*2,s=(i+1)%a*2;r=Math.min(r,Ha(e,t,n[u],n[u+1],n[s],n[s+1]))}return r}function Ya(e,t,n,o,r,a){let i=Math.max(0,o-a),u=Math.min(t-1,o+a),s=Math.max(0,r-a),c=Math.min(n-1,r+a),m=null,p=1/0;for(let l=s;l<=c;l++)for(let h=i;h<=u;h++){if(h===o&&l===r)continue;let f=h-o,P=l-r,v=f*f+P*P;if(v>a*a||v>=p)continue;let E=(l*t+h)*4;e[E+3]<za||(m=E,p=v)}return m}function oo(e,t,n){if(!t.textureEdgeRepair||!t.texture||!t.textureEdgeRepairEdges||t.textureEdgeRepairEdges.size===0)return;let o=e.canvas;if(!o)return;let r=Math.max(0,Math.floor(t.x*n)),a=Math.max(0,Math.floor(t.y*n)),i=Math.max(1,Math.min(o.width-r,Math.ceil(t.canvasW*n))),u=Math.max(1,Math.min(o.height-a,Math.ceil(t.canvasH*n)));if(i<=0||u<=0)return;let s;try{s=e.getImageData(r,a,i,u)}catch{return}let c=s.data,m=new Uint8ClampedArray(c),p=Math.max(Un,Un/n),l=Math.max(2,Math.ceil(p*n)+1),h=!1;for(let f=0;f<u;f++)for(let P=0;P<i;P++){let v=(f*i+P)*4,E=c[v+3];if(E<Ba||E===255)continue;let M=(r+P+.5)/n-t.x,A=(a+f+.5)/n-t.y;if(Na(M,A,t.screenPts,t.textureEdgeRepairEdges)>p)continue;let g=Ya(m,i,u,P,f,l);g!==null&&(c[v]=m[g],c[v+1]=m[g+1],c[v+2]=m[g+2],c[v+3]=255,h=!0)}h&&e.putImageData(s,r,a)}function ro(e){if(typeof e.toBlob=="function")return new Promise(t=>{e.toBlob(n=>{t(n?URL.createObjectURL(n):null)},"image/png")});try{return Promise.resolve(e.toDataURL("image/png"))}catch{return Promise.resolve(null)}}async function $a(e,t,n,o){let r=n.createElement("canvas");r.width=Math.max(1,Math.ceil(e.width*o)),r.height=Math.max(1,Math.ceil(e.height*o));let a=e.entries.some(m=>m.textureEdgeRepair&&m.texture&&m.textureEdgeRepairEdges&&m.textureEdgeRepairEdges.size>0),i=r.getContext("2d",a?{willReadFrequently:!0}:void 0);if(!i)return{width:e.width,height:e.height,url:null};let u=Array.from(new Set(e.entries.flatMap(m=>m.texture?[m.texture]:[]))),s=new Map;await Promise.all(u.map(async m=>{s.set(m,await Kn(m))}));for(let m of e.entries){let p=m.texture?s.get(m.texture):null;if(!m.texture){i.save(),to(i,m,t,o),i.restore();continue}p&&(i.save(),fe(i,o),i.beginPath(),Rt(i,m.x,m.y,m.screenPts),i.clip(),no(i,m,p,o),i.restore()),m.texture&&t==="baked"&&(i.save(),fe(i,o),i.beginPath(),Rt(i,m.x,m.y,m.screenPts),i.clip(),Qn(i,m.x,m.y,m.canvasW,m.canvasH,m.textureTint,o),i.restore()),oo(i,m,o)}let c=await ro(r);return r.width=1,r.height=1,{width:e.width,height:e.height,url:c}}async function Ot(e,t,n,o,r){let a=[];for(let i of e){if(r())break;a.push(await $a(i,t,n,o))}return a}import{isSolidTrianglePlan as ja,offsetConvexPolygonPointsByEdgeAmounts as Xa,parsePureColor as un,resolveSeamBleed as so,safePlanSeamBleedAmount as Ua}from"@layoutit/polycss-core";var lo=50,uo=[.4,-.7,.59],co="#ffffff",mo=1,po="#ffffff",fo=.4,K=1e-9,xt=.75,yo=32,Wa=96,cn="0 48px 96px 48px",ao,io=yo;function qa(){let e=typeof CSS<"u"?CSS:void 0;return!!e?.supports?.("corner-top-left-shape","bevel")&&!!e.supports("corner-top-right-shape","bevel")}function dn(){if(qa())return"corner-bevel";let e=typeof navigator<"u"?navigator.userAgent:"";return/\bFirefox\//.test(e)?"border-large":"border"}function mn(){let e=typeof navigator<"u"?navigator.userAgent:"";return e!==ao&&(ao=e,io=/\bFirefox\//.test(e)?Wa:yo),io}function go(){return dn()==="border-large"?cn:void 0}function Ga(){let e=dn();if(e==="corner-bevel")return;let t=e==="border-large"?cn:void 0;return t?{borderWidth:t}:void 0}function ho(e){let t=dn();t==="corner-bevel"?(e.style.width="",e.style.height="",e.style.backgroundColor="",e.style.borderWidth="",e.style.borderTopLeftRadius="",e.style.borderTopRightRadius="",e.style.removeProperty("corner-top-left-shape"),e.style.removeProperty("corner-top-right-shape")):(e.style.width="",e.style.height="",e.style.backgroundColor="",e.style.borderTopLeftRadius="",e.style.borderTopRightRadius="",e.style.removeProperty("corner-top-left-shape"),e.style.removeProperty("corner-top-right-shape"),e.style.borderWidth=t==="border-large"?cn:"")}function Re(e){let t=un(e);return t?{r:t.rgb[0],g:t.rgb[1],b:t.rgb[2]}:{r:255,g:255,b:255}}function bt({r:e,g:t,b:n}){return`${e},${t},${n}`}function Za(e){return un(e)?.alpha??1}function kt({r:e,g:t,b:n}){let o=r=>Math.round(Math.max(0,Math.min(255,r))).toString(16).padStart(2,"0");return`#${o(e)}${o(t)}${o(n)}`}function Po(e,t,n,o,r){let a=Re(e),i=Re(n),u=Re(o),s=u.r/255*r+i.r/255*t,c=u.g/255*r+i.g/255*t,m=u.b/255*r+i.b/255*t,p=Math.max(0,Math.min(255,Math.round(a.r*s))),l=Math.max(0,Math.min(255,Math.round(a.g*c))),h=Math.max(0,Math.min(255,Math.round(a.b*m))),f=Za(e);return f<1?`rgba(${p}, ${l}, ${h}, ${f})`:kt({r:p,g:l,b:h})}function vo(e,t){if(!Number.isFinite(t)||t<=1)return e;let n=un(e);if(!n)return e;let o=255/Math.max(1,Math.round(t)-1),r=i=>Math.max(0,Math.min(255,Math.round(Math.round(i/o)*o))),a={r:r(n.rgb[0]),g:r(n.rgb[1]),b:r(n.rgb[2])};return n.alpha<1?`rgba(${a.r}, ${a.g}, ${a.b}, ${n.alpha})`:kt(a)}function xo(e,t,n){let o=(r,a)=>{if(r===a)return r;let i=a-r;return r+Math.sign(i)*Math.min(Math.abs(i),n)};return{r:o(e.r,t.r),g:o(e.g,t.g),b:o(e.b,t.b)}}function ln(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function Ka(e,t){return[e[1]*t[2]-e[2]*t[1],e[2]*t[0]-e[0]*t[2],e[0]*t[1]-e[1]*t[0]]}function Qa(e){if(e.length<3)return null;let t=e[0],n=[0,0,0];for(let r=1;r+1<e.length;r++){let a=e[r],i=e[r+1],u=[a[0]-t[0],a[1]-t[1],a[2]-t[2]],s=[i[0]-t[0],i[1]-t[1],i[2]-t[2]];n[0]-=u[1]*s[2]-u[2]*s[1],n[1]-=u[2]*s[0]-u[0]*s[2],n[2]-=u[0]*s[1]-u[1]*s[0]}let o=Math.hypot(n[0],n[1],n[2]);return o<=K?null:[n[0]/o,n[1]/o,n[2]/o]}function Ja(e){if(e.length<3)return!1;let t=0;for(let n=0;n<e.length;n++){let o=e[n],r=e[(n+1)%e.length],a=e[(n+2)%e.length],i=(r[0]-o[0])*(a[1]-r[1])-(r[1]-o[1])*(a[0]-r[0]);if(Math.abs(i)<=K)return!1;let u=Math.sign(i);if(t===0)t=u;else if(u!==t)return!1}return!0}function ei(e){let t=0;for(let n=0;n<e.length;n++){let o=e[n],r=e[(n+1)%e.length];t+=o[0]*r[1]-o[1]*r[0]}return t/2}function ti(e,t,n,o){let r=t[0]-e[0],a=t[1]-e[1],i=o[0]-n[0],u=o[1]-n[1],s=r*u-a*i;if(Math.abs(s)<=K)return null;let c=n[0]-e[0],m=n[1]-e[1],p=(c*u-m*i)/s;return[e[0]+p*r,e[1]+p*a]}function Dt(e,t){if(e.length<6||t<=0)return e;let n=0,o=0,r=e.length/2;for(let i=0;i<e.length;i+=2)n+=e[i],o+=e[i+1];n/=r,o/=r;let a=e.slice();for(let i=0;i<a.length;i+=2){let u=a[i]-n,s=a[i+1]-o,c=Math.hypot(u,s);c<=K||(a[i]+=u/c*t,a[i+1]+=s/c*t)}return a}function Ue(e,t){if(e.length<6||e.length%2!==0||t<=0)return e;let n=[];for(let s=0;s<e.length;s+=2)n.push([e[s],e[s+1]]);if(!Ja(n))return Dt(e,t);let o=ei(n);if(Math.abs(o)<=K)return Dt(e,t);let r=o>0?1:-1,a=[];for(let s=0;s<n.length;s++){let c=n[s],m=n[(s+1)%n.length],p=m[0]-c[0],l=m[1]-c[1],h=Math.hypot(p,l);if(h<=K)return Dt(e,t);let f=r*(l/h)*t,P=r*(-p/h)*t;a.push({a:[c[0]+f,c[1]+P],b:[m[0]+f,m[1]+P]})}let i=[],u=Math.max(2,t*4);for(let s=0;s<n.length;s++){let c=a[(s+n.length-1)%n.length],m=a[s],p=ti(c.a,c.b,m.a,m.b);if(!p)return Dt(e,t);let l=n[s],h=p[0]-l[0],f=p[1]-l[1],P=Math.hypot(h,f);P>u?i.push(l[0]+h/P*u,l[1]+f/P*u):i.push(p[0],p[1])}return i}function ni(e,t,n,o){let r=e+t;if(o<=0||n<=K||r<=K||!Number.isFinite(e+t+n+o))return Ue([e,0,0,n,r,n],o);let a=Math.sqrt(e*e+n*n),i=Math.sqrt(t*t+n*n);if(a<=K||i<=K)return Ue([e,0,0,n,r,n],o);let u=-o*n/a,s=-o*e/a,c=o*n/i,m=-o*t/i,p=e+u,l=s,h=r+c,f=n+m,P=-n*r;if(Math.abs(P)<=K)return Ue([e,0,0,n,r,n],o);let v=p-h,E=l-f,M=(v*n+E*e)/P,A=h-M*t,g=f-M*n,L=-o*(e+a)/n,T=n+o,_=r+o*(t+i)/n,D=T,R=Math.max(2,o*4),N=A-e,Y=g,H=Math.sqrt(N*N+Y*Y);H>R&&(A=e+N/H*R,g=Y/H*R);let b=Math.sqrt(L*L+o*o);b>R&&(L=L/b*R,T=n+o/b*R);let d=_-r,y=Math.sqrt(d*d+o*o);return y>R&&(_=r+d/y*R,D=n+o/y*R),[A,g,L,T,_,D]}function oi(e,t){if((e+1)%3===t)return e;if((t+1)%3===e)return t}function ri(e,t,n,o,r){let a=e.seamBleedEdges;if(!a?.size)return null;let i=e.seamBleed===void 0?xt:e.seamBleed;return[[o,t],[t,n],[n,o]].map(([s,c],m)=>{let p=oi(s,c),l=p!==void 0&&a.has(p)?e.seamBleedEdgeAmounts?.get(p)??so(i,xt):0;return Ua(r,m,l)})}function bo(e,t,n,o,r,a,i,u,s,c,m,p){let l=Math.round(e*1e3)/1e3||0,h=Math.round(t*1e3)/1e3||0,f=Math.round(n*1e3)/1e3||0,P=Math.round(o*1e3)/1e3||0,v=Math.round(r*1e3)/1e3||0,E=Math.round(a*1e3)/1e3||0,M=Math.round(i*1e3)/1e3||0,A=Math.round(u*1e3)/1e3||0,g=Math.round(s*1e3)/1e3||0,L=Math.round(c*1e3)/1e3||0,T=Math.round(m*1e3)/1e3||0,_=Math.round(p*1e3)/1e3||0;return`matrix3d(${l},${h},${f},0,${P},${v},${E},0,${M},${A},${g},0,${L},${T},${_},1)`}function ai(e,t,n){return e.map(o=>[o[1]*t,o[0]*t,o[2]*n])}function pn(e,t,n,o){if(!ja(e))return null;let r=e.tileSize,a=e.layerElevation,i=ai(e.polygon.vertices,r,a),u=Qa(i);if(!u)return null;let s=[{a:0,b:1,c:2},{a:1,b:2,c:0},{a:2,b:0,c:1}].map(V=>{let X=i[V.a],G=i[V.b];return{...V,length:Math.hypot(G[0]-X[0],G[1]-X[1],G[2]-X[2])}}).sort((V,X)=>X.length-V.length),c=s[0].a,m=s[0].b,p=s[0].c,l=i[c],h=i[m],f=i[p],P=s[0].length;if(P<=K)return null;let v=[(h[0]-l[0])/P,(h[1]-l[1])/P,(h[2]-l[2])/P],E=[f[0]-l[0],f[1]-l[1],f[2]-l[2]],M=ln(E,v),A=[l[0]+v[0]*M,l[1]+v[1]*M,l[2]+v[2]*M],g=[A[0]-f[0],A[1]-f[1],A[2]-f[2]],L=Math.hypot(g[0],g[1],g[2]);if(L<=K)return null;let T=[g[0]/L,g[1]/L,g[2]/L];if(ln(Ka(v,T),u)<0){let V=m;if(m=c,c=V,l=i[c],h=i[m],P=Math.hypot(h[0]-l[0],h[1]-l[1],h[2]-l[2]),P<=K)return null;v=[(h[0]-l[0])/P,(h[1]-l[1])/P,(h[2]-l[2])/P];let X=[f[0]-l[0],f[1]-l[1],f[2]-l[2]];M=ln(X,v),A=[l[0]+v[0]*M,l[1]+v[1]*M,l[2]+v[2]*M],g=[A[0]-f[0],A[1]-f[1],A[2]-f[2]];let G=Math.hypot(g[0],g[1],g[2]);if(G<=K)return null;T=[g[0]/G,g[1]/G,g[2]/G]}let _=mn(),D=Math.max(0,Math.min(P,M)),R=Math.max(0,P-D),N=[D,0,0,L,D+R,L],Y=ri(e,c,m,p,N),H=Y?Xa(N,Y):ni(D,R,L,so(e.seamBleed,xt)),b=[H[0],H[1]],d=[H[2],H[3]],y=[H[4],H[5]],x=(d[1]+y[1])/2,S=b[0]-d[0],C=y[0]-b[0],O=x-b[1];if(S<=K||C<=K||O<=K||!Number.isFinite(S+C+O))return null;let k=t==="dynamic",w=Re(e.polygon.color??"#cccccc"),B=k&&bt(w)===o?.dynamicColorKey,W={color:k||e.shadedColor===o?.paintColor?void 0:e.shadedColor,pointerEvents:n==="none"?"none":void 0,...k&&!B?{"--pnx":u[0].toFixed(4),"--pny":u[1].toFixed(4),"--pnz":u[2].toFixed(4),"--psr":(w.r/255).toFixed(4),"--psg":(w.g/255).toFixed(4),"--psb":(w.b/255).toFixed(4)}:k?{"--pnx":u[0].toFixed(4),"--pny":u[1].toFixed(4),"--pnz":u[2].toFixed(4)}:null},Z=([V,X])=>[f[0]+(V-D)*v[0]+X*T[0],f[1]+(V-D)*v[1]+X*T[1],f[2]+(V-D)*v[2]+X*T[2]],q=Z(b),j=Z([d[0],x]),ee=Z([y[0],x]),ne=_/2,ie=[(ee[0]-j[0])/_,(ee[1]-j[1])/_,(ee[2]-j[2])/_],J=[q[0]-ie[0]*ne,q[1]-ie[1]*ne,q[2]-ie[2]*ne],F=[(j[0]-J[0])/_,(j[1]-J[1])/_,(j[2]-J[2])/_],U=[ie[0],ie[1],ie[2],0,F[0],F[1],F[2],0,u[0],u[1],u[2],0,J[0],J[1],J[2],1].map(V=>(Math.round(V*1e3)/1e3||0).toString()).join(","),$=Ga();return{transform:`matrix3d(${U})`,...$??{},...W}}function It(e){if(!e)return!1;let{a:t,b:n,c:o}=e;return t===0&&n===1&&o===2||t===1&&n===2&&o===0||t===2&&n===0&&o===1}function ii(e,t,n,o){let r=e+t;if(o<=0||n<=K||r<=K||!Number.isFinite(e+t+n+o))return Ue([e,0,0,n,r,n],o);let a=Math.sqrt(e*e+n*n),i=Math.sqrt(t*t+n*n);if(a<=K||i<=K)return Ue([e,0,0,n,r,n],o);let u=-o*n/a,s=-o*e/a,c=o*n/i,m=-o*t/i,p=e+u,l=s,h=r+c,f=n+m,P=-n*r;if(Math.abs(P)<=K)return Ue([e,0,0,n,r,n],o);let v=p-h,E=l-f,M=(v*n+E*e)/P,A=h-M*t,g=f-M*n,L=-o*(e+a)/n,T=n+o,_=r+o*(t+i)/n,D=T,R=Math.max(2,o*4),N=A-e,Y=g,H=Math.sqrt(N*N+Y*Y);H>R&&(A=e+N/H*R,g=Y/H*R);let b=Math.sqrt(L*L+o*o);b>R&&(L=L/b*R,T=n+o/b*R);let d=_-r,y=Math.sqrt(d*d+o*o);return y>R&&(_=r+d/y*R,D=n+o/y*R),[A,g,L,T,_,D]}function So(e,t,n){if(e.texture||e.vertices.length!==3)return null;let o=lo,r=o,a=e.vertices[0],i=e.vertices[1],u=e.vertices[2],s=a[1]*o,c=a[0]*o,m=a[2]*r,p=i[1]*o,l=i[0]*o,h=i[2]*r,f=u[1]*o,P=u[0]*o,v=u[2]*r,E=p-s,M=l-c,A=h-m,g=f-s,L=P-c,T=v-m,_=-(M*T-A*L),D=-(A*g-E*T),R=-(E*L-M*g),N=Math.sqrt(_*_+D*D+R*R);if(N<=K)return null;_/=N,D/=N,R/=N;let Y=E*E+M*M+A*A,H=f-p,b=P-l,d=v-h,y=s-f,x=c-P,S=m-v,C=H*H+b*b+d*d,O=y*y+x*x+S*S,k=It(n)?n.a:0,w=It(n)?n.b:1,B=It(n)?n.c:2,W=()=>n?So(e,t):null;if(!It(n)){let Ye=Y;C>Ye&&(k=1,w=2,B=0,Ye=C),O>Ye&&(k=2,w=0,B=1)}let Z=B===0?s:B===1?p:f,q=B===0?c:B===1?l:P,j=B===0?m:B===1?h:v,ee=k===0?s:k===1?p:f,ne=k===0?c:k===1?l:P,ie=k===0?m:k===1?h:v,J=w===0?s:w===1?p:f,F=w===0?c:w===1?l:P,U=w===0?m:w===1?h:v,$=J-ee,V=F-ne,X=U-ie,G=Math.sqrt($*$+V*V+X*X);if(G<=K)return W();let se=$/G,le=V/G,re=X/G,me=(Z-ee)*se+(q-ne)*le+(j-ie)*re,pe=ee+se*me-Z,ce=ne+le*me-q,ye=ie+re*me-j,Q=Math.sqrt(pe*pe+ce*ce+ye*ye);if(Q<=K)return W();pe/=Q,ce/=Q,ye/=Q;let z=Math.max(0,Math.min(G,me)),I=Math.max(0,G-z),ae=ii(z,I,Q,xt),he=ae[0],ze=ae[1],Pe=ae[2],be=ae[3],Fe=ae[4],nt=ae[5],Ve=(be+nt)/2,_e=he-Pe,Be=Fe-he,gt=Ve-ze;if(_e<=K||Be<=K||gt<=K||!Number.isFinite(_e+Be+gt))return W();let Ae=1/mn(),He=_e+Be,Se=He*Ae,we=(Be-_e)*.5*Ae,Le=gt*Ae,ot=he-z-He*.5,Ne=ze,Ce=bo(se*Se,le*Se,re*Se,se*we+pe*Le,le*we+ce*Le,re*we+ye*Le,_,D,R,Z+se*ot+pe*Ne,q+le*ot+ce*Ne,j+re*ot+ye*Ne),ve;if(Math.floor(t.colorFreezeFrames??1)!==0){let Ye=t.directionalLight,_n=t.ambientLight,De=Ye?.direction??uo,aa=Ye?.color??co,ia=Math.max(0,Ye?.intensity??mo),sa=_n?.color??po,la=Math.max(0,_n?.intensity??fo),Gt=Math.sqrt(De[0]*De[0]+De[1]*De[1]+De[2]*De[2])||1,ua=De[0]/Gt,ca=De[1]/Gt,da=De[2]/Gt,ma=ia*Math.max(0,_*ua+D*ca+R*da),Bn=Po(e.color??"#cccccc",ma,aa,sa,la);ve=t.colorSteps?vo(Bn,t.colorSteps):Bn}return{transform:Ce,borderWidth:go(),color:ve,basis:{a:k,b:w,c:B}}}function si(e,t,n){return n>0&&(n<=1||(t+e)%n===0)}function li(e,t,n,o){let r=Math.floor(o.colorFreezeFrames??1);if(r===0)return;let a=e.__polycssStableTriangleColor;if(!(a===void 0||si(t,Math.max(0,Math.floor(o.colorFrame??0)),Math.max(1,r)))||a===n)return;let u=n,s=n?Re(n):void 0,c=e.__polycssStableTriangleColorRgb,m=Math.max(0,Math.floor(o.colorMaxStep??0));m>0&&c&&s&&n&&(s=xo(c,s,m),u=kt(s)),e.style.color=u,e.__polycssStableTriangleColor=u,e.__polycssStableTriangleColorRgb=s}function fn(e,t,n={}){if((n.textureLighting??"baked")!=="baked"||!je())return!1;let o=Array.from(e.children).filter(a=>a instanceof HTMLElement&&a.localName==="u");if(o.length!==t.length)return!1;let r=t.map((a,i)=>So(a,n,o[i].__polycssStableTriangleBasis));if(r.some(a=>!a))return!1;for(let a=0;a<o.length;a+=1){let i=r[a],u=o[a];u.style.visibility&&(u.style.visibility=""),u.__polycssStableTriangleBasis=i.basis,ho(u),u.style.transform=i.transform,i.borderWidth!==void 0&&(u.style.borderWidth=i.borderWidth),i.color!==void 0&&li(u,a,i.color,n)}return!0}import{computeTextureAtlasPlanPublic as ui}from"@layoutit/polycss-core";function We(e,t,n={},o){return ui(e,t,n,void 0,o)}function yn(e,t,n){let o=new Set(n?.disable??[]);return tn(e,t,o)}import{computed as ge,getCurrentScope as ci,onScopeDispose as di,ref as Co,watch as mi}from"vue";function gn(e){for(let t of e)t.startsWith("blob:")&&URL.revokeObjectURL(t)}function Mo(e){return e.flatMap(t=>t.url?.startsWith("blob:")?[t.url]:[])}function Ft(e){return e.map(t=>({width:t.width,height:t.height,url:null}))}function Eo(e){return e.length===0||typeof Image>"u"?Promise.resolve():Promise.all(e.map(t=>{let n=new Image;n.src=t;let o=n.decode?.();return o?o.catch(()=>{}):Promise.resolve()})).then(()=>{})}function qe(e){e.length!==0&&(typeof requestAnimationFrame=="function"?requestAnimationFrame(()=>gn(e)):setTimeout(()=>gn(e),0))}function Ge(e,t,n=ge(()=>{}),o=ge(()=>{}),r=ge(()=>!1)){let a=ge(()=>new Set(o.value?.disable??[])),i=ge(()=>!a.value.has("b")),u=ge(()=>{let v=typeof document<"u"?document:null;return i.value&&(!v||at(v))}),s=ge(()=>!a.value.has("u")&&je()),c=ge(()=>!a.value.has("i")&&t.value!=="dynamic"&&$e()),m=ge(()=>{let v=nn(e.value,t.value,a.value,typeof document<"u"?document:null);return on(v,n.value,typeof document<"u"?document:null)}),p=Co(Ft(m.value.packed.pages)),l=Co({plans:e.value,entries:m.value.packed.entries,pages:Ft(m.value.packed.pages)}),h=[],f=0,P=!1;return mi(()=>[m.value,t.value,r.value],([v,E,M],A,g)=>{let{packed:L,atlasScale:T}=v;if(M){let R=++f,N=e.value,Y=L.entries;if(L.pages.length===0||typeof document>"u"){qe(h),h=[],l.value={plans:N,entries:Y,pages:Ft(L.pages)};return}let H=()=>P||R!==f,b=[];Ot(L.pages,E,document,T,H).then(async d=>{if(b=Mo(d),await Eo(b),H()){qe(b);return}let y=h;h=b,b=[],qe(y),l.value={plans:N,entries:Y,pages:d}}).catch(()=>{});return}let _=!1,D=[];if(g(()=>{_=!0,qe(D)}),L.pages.length===0){qe(h),h=[],p.value.length!==0&&(p.value=[]);return}typeof document>"u"||(p.value.some(R=>R.url)||(p.value=Ft(L.pages)),Ot(L.pages,E,document,T,()=>_).then(async R=>{if(D=Mo(R),await Eo(D),_){qe(D);return}let N=h;h=D,D=[],qe(N),p.value=R}).catch(()=>{}))},{immediate:!0}),ci()&&di(()=>{P=!0,gn(h),h=[]}),{plans:ge(()=>r.value?l.value.plans:e.value),entries:ge(()=>r.value?l.value.entries:m.value.packed.entries),pages:ge(()=>r.value?l.value.pages:p.value),ready:ge(()=>{let v=r.value?l.value.pages:p.value;return v.length===0||v.every(E=>!!E.url)}),useFullRectSolid:i,useProjectiveQuad:u,useStableTriangle:s,useBorderShape:c}}import{h as pi}from"vue";function Ze({entry:e,textureLighting:t,solidPaintDefaults:n,className:o,style:r,domAttrs:a,pointerEvents:i="auto"}){let u=pn(e,t,i,n);if(!u)return null;let s=e.polygon.data?Object.fromEntries(Object.entries(e.polygon.data).map(([m,p])=>[`data-${m}`,String(p)])):{},c=o?.trim()||void 0;return pi("u",{class:c,style:{...u,...r},"data-poly-index":String(e.index),...s,...a})}import{h as fi}from"vue";import{isFullRectSolid as yi,cssBorderShapeForPlan as gi,formatSolidQuadEntryMatrix as hi,formatBorderShapeEntryMatrix as Pi}from"@layoutit/polycss-core";var vi=new Map([["transform",0],["border-shape",1],["border-width",2],["width",3],["height",4],["color",5]]);function xi(e){let t=e.getAttribute("style");if(!t)return;let o=t.split(";").map(r=>r.trim()).filter(Boolean).map((r,a)=>{let i=r.slice(0,r.indexOf(":")).trim().toLowerCase();return{declaration:r,index:a,order:vi.get(i)??Number.POSITIVE_INFINITY}}).sort((r,a)=>r.order-a.order||r.index-a.index).map(({declaration:r})=>r).join(";");o!==t&&e.setAttribute("style",o)}function Ke({entry:e,textureLighting:t,solidPaintDefaults:n,className:o,style:r,domAttrs:a,pointerEvents:i="auto",forceBorderShape:u=!1}){let s=!e.texture&&yi(e),c=s&&u&&$e(),m=!s||c?gi(e):null,p=t==="dynamic",l=Re(e.polygon.color??"#cccccc"),h=p&&bt(l)===n?.dynamicColorKey,P={transform:m?Pi(e):hi(e),color:p?void 0:e.shadedColor,pointerEvents:i==="none"?"none":void 0,...p?{"--pnx":e.normal[0].toFixed(4),"--pny":e.normal[1].toFixed(4),"--pnz":e.normal[2].toFixed(4),...h?null:{"--psr":(l.r/255).toFixed(4),"--psg":(l.g/255).toFixed(4),"--psb":(l.b/255).toFixed(4)}}:null,...r},v=e.polygon.data?Object.fromEntries(Object.entries(e.polygon.data).map(([A,g])=>[`data-${A}`,String(g)])):{},E=o?.trim()||void 0,M=A=>{let g=A.el;g&&(m?g.style.setProperty("border-shape",m):g.style.removeProperty("border-shape"),xi(g))};return fi(s&&!c?"b":"i",{class:E,style:P,"data-poly-index":String(e.index),...v,...a,onVnodeMounted:M,onVnodeUpdated:M})}import{h as bi}from"vue";function Qe({entry:e,textureLighting:t,solidPaintDefaults:n,className:o,style:r,domAttrs:a,pointerEvents:i="auto"}){let u=t==="dynamic",s=Re(e.polygon.color??"#cccccc"),c=u&&bt(s)===n?.dynamicColorKey,m={transform:`matrix3d(${e.projectiveMatrix})`,color:u?void 0:e.shadedColor,pointerEvents:i==="none"?"none":void 0,...u&&!c?{"--pnx":e.normal[0].toFixed(4),"--pny":e.normal[1].toFixed(4),"--pnz":e.normal[2].toFixed(4),"--psr":(s.r/255).toFixed(4),"--psg":(s.g/255).toFixed(4),"--psb":(s.b/255).toFixed(4)}:u?{"--pnx":e.normal[0].toFixed(4),"--pny":e.normal[1].toFixed(4),"--pnz":e.normal[2].toFixed(4)}:null,...r},p=e.polygon.data?Object.fromEntries(Object.entries(e.polygon.data).map(([h,f])=>[`data-${h}`,String(f)])):{},l=o?.trim()||void 0;return bi("b",{class:l,style:m,"data-poly-index":String(e.index),...p,...a})}import{h as Si}from"vue";import{formatCornerShapeElementStyle as Ci,parseHex as Mi,rgbKey as Ei}from"@layoutit/polycss-core";function Ti(e,t,n){if(t==="dynamic"){let o=Mi(e.polygon.color??"#cccccc"),r=`;--pnx:${e.normal[0].toFixed(4)};--pny:${e.normal[1].toFixed(4)};--pnz:${e.normal[2].toFixed(4)}`;return Ei(o)!==n?.dynamicColorKey&&(r+=`;--psr:${(o.r/255).toFixed(4)};--psg:${(o.g/255).toFixed(4)};--psb:${(o.b/255).toFixed(4)}`),r}return e.shadedColor?`;color:${e.shadedColor}`:""}function hn({entry:e,geometry:t,textureLighting:n,solidPaintDefaults:o,className:r,pointerEvents:a="auto"}){let i=Ci(e,t),u=Ti(e,n,o),s=a==="none"?";pointer-events:none":"",c=i+u+s,m=l=>{!l||!(l instanceof HTMLElement)||l.setAttribute("style",c)},p=e.polygon.data?Object.fromEntries(Object.entries(e.polygon.data).map(([l,h])=>[`data-${l}`,String(h)])):{};return Si("u",{class:r?.trim()||void 0,"data-poly-index":String(e.index),...p,onVnodeMounted:({el:l})=>m(l),onVnodeUpdated:({el:l})=>m(l)})}import{h as Ai}from"vue";import{formatMatrix3d as wi,formatCssLengthPx as Vt}from"@layoutit/polycss-core";var Li=64;function Je({entry:e,page:t,textureLighting:n,solidPaintDefaults:o,className:r,style:a,domAttrs:i,pointerEvents:u="auto"}){let s=n==="dynamic",c=e.atlasCanonicalSize??Li,m=e.canvasW||1,p=e.canvasH||1,l=t?`${Vt(-e.x/m*c)} ${Vt(-e.y/p*c)}`:void 0,h=t?`${Vt(t.width/m*c)} ${Vt(t.height/p*c)}`:void 0,f=s&&t?.url?`url(${t.url})`:void 0,P=!s&&t?.url?`url(${t.url}) ${l} / ${h} no-repeat`:void 0,v={transform:wi(e.atlasMatrix),"--polycss-atlas-size":`${c}px`,...s?{backgroundImage:t?.url?`url(${t.url})`:void 0,backgroundPosition:l,backgroundSize:h}:{background:P},...s?{"--pnx":e.normal[0].toFixed(4),"--pny":e.normal[1].toFixed(4),"--pnz":e.normal[2].toFixed(4)}:null,...s&&f?{maskImage:f,maskMode:"alpha",maskPosition:l,maskSize:h,maskRepeat:"no-repeat",WebkitMaskImage:f,WebkitMaskPosition:l,WebkitMaskSize:h,WebkitMaskRepeat:"no-repeat"}:null,opacity:t?.url?void 0:0,pointerEvents:u==="none"?"none":void 0,...a},E=e.polygon.data?Object.fromEntries(Object.entries(e.polygon.data).map(([A,g])=>[`data-${A}`,String(g)])):{},M=r?.trim()||void 0;return Ai("s",{class:M,style:v,"data-poly-index":String(e.index),...E,...i})}var Oo=Ri({name:"PolyScene",inheritAttrs:!1,props:{polygons:{type:Array,default:void 0},centerPolygons:{type:Array,default:void 0},perspective:{type:Number},rotX:{type:Number},rotY:{type:Number},zoom:{type:Number},directionalLight:{type:Object,default:void 0},ambientLight:{type:Object,default:void 0},textureLighting:{type:String,default:"baked"},textureQuality:{type:[Number,String],default:void 0},seamBleed:{type:[Number,String],default:void 0},strategies:{type:Object,default:void 0},autoCenter:{type:Boolean,default:!1},shadow:{type:Object,default:void 0},class:{type:String},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},debugShowLabels:{type:Boolean},debugShowBackfaces:{type:Boolean}},setup(e,{slots:t,attrs:n}){let o=Di(ue);if(!o)throw new Error("polycss: PolyScene must be used inside a PolyCamera.");let{sceneElRef:r,applyTransformDirect:a}=o,i=zt(0),u=new Map,s={register(y,x){u.set(y,x),i.value++},unregister(y){u.delete(y),i.value++},version:i,getEntries(){return Array.from(u.values())}},c=new Set,m=zt(!1),p={register(y){c.add(y),m.value=c.size>0},unregister(y){c.delete(y),m.value=c.size>0},hasAny:m},l=zt(null),h=zt(null),f=xe(()=>({textureLighting:e.textureLighting??"baked",directionalLight:e.directionalLight,ambientLight:e.ambientLight,strategies:e.strategies,seamBleed:e.seamBleed??Lo,shadow:e.shadow,shadowRegistry:s,receiverRegistry:p,groundCssZ:l.value,sceneEl:h.value}));ki(Qt,f),To(h,y=>{r.value=y});let P=!1;wo(()=>{P||typeof document<"u"&&(At(document),P=!0)}),To(()=>e.debugShowBackfaces,y=>{let x=h.value;x&&x.classList.toggle("polycss-debug-show-backfaces",!!y)});let v=xe(()=>e.polygons??[]),E=xe(()=>e.centerPolygons??null),M=xe(()=>({directionalLight:e.directionalLight})),A=Pt(v,M),g=xe(()=>E.value??v.value),L=Pt(g,M);wo(()=>{r.value=h.value,a()}),Ii(a);let T=xe(()=>({tileSize:50,layerElevation:50,directionalLight:e.directionalLight,textureLighting:e.textureLighting,textureQuality:e.textureQuality})),_=xe(()=>{let y=e.textureLighting==="dynamic",x=y?void 0:e.directionalLight,S=y?void 0:e.ambientLight,C=_t(A.value.polygons),O=e.seamBleed??Lo,k=O==="auto"||typeof O=="number"&&Number.isFinite(O)&&O>0?Bt(A.value.polygons,{tileSize:T.value.tileSize,layerElevation:T.value.layerElevation,directionalLight:x,ambientLight:S}):null;return A.value.polygons.map((w,B)=>We(w,B,{tileSize:T.value.tileSize,layerElevation:T.value.layerElevation,directionalLight:x,ambientLight:S,seamBleed:k?.has(B)?O:void 0,seamEdges:k?.get(B),textureEdgeRepairEdges:C[B]}))}),D=xe(()=>e.textureLighting??"baked"),R=xe(()=>e.textureQuality),N=xe(()=>e.strategies),Y=Ge(_,D,R,N),H=xe(()=>{if(e.textureLighting!=="dynamic")return null;let y=e.directionalLight?.direction??[.4,-.7,.59],x=Vi(y),S=Math.hypot(x[0],x[1],x[2])||1,C=x[0]/S,O=x[1]/S,k=x[2]/S,w=Ro(e.directionalLight?.color??"#ffffff")?.rgb??[255,255,255],B=Ro(e.ambientLight?.color??"#ffffff")?.rgb??[255,255,255],W=e.directionalLight?.intensity??1,Z=e.ambientLight?.intensity??.4,q=ne=>(ne/255).toFixed(4),j=k,ee=Math.sign(j||1)*Math.max(Math.abs(j),.01);return{"--plx":C.toFixed(2),"--ply":O.toFixed(2),"--plz":k.toFixed(2),"--clx":C.toFixed(2),"--cly":O.toFixed(2),"--clz":ee.toFixed(2),"--plr":q(w[0]),"--plg":q(w[1]),"--plb":q(w[2]),"--pli":W.toFixed(4),"--par":q(B[0]),"--pag":q(B[1]),"--pab":q(B[2]),"--pai":Z.toFixed(4)}}),b=50;Ao(()=>{let y=h.value;i.value;let x=s.getEntries();if(x.length===0){y&&y.style.removeProperty("--shadow-ground-cssz"),l.value!==null&&(l.value=null);return}let S=1/0;for(let k of x){let w=k();for(let B of w.polygons)for(let W of B.vertices){let Z=W[2]+(w.position[2]??0);Z<S&&(S=Z)}}if(!Number.isFinite(S)){y&&y.style.removeProperty("--shadow-ground-cssz"),l.value!==null&&(l.value=null);return}let C=e.shadow?.lift??.05,O=(S+C)*b;l.value!==O&&(l.value=O),y&&(e.textureLighting==="dynamic"?y.style.setProperty("--shadow-ground-cssz",O.toFixed(3)):y.style.removeProperty("--shadow-ground-cssz"))});let d=xe(()=>{if(!e.autoCenter)return[0,0,0];let y=L.value.sceneBbox;return[(y.min[0]+y.max[0])/2,(y.min[1]+y.max[1])/2,(y.min[2]+y.max[2])/2]});return Ao(()=>{o.autoCenterOffset.value=d.value}),Fi(()=>{}),()=>{let y=`polycss-scene${e.class?` ${e.class}`:""}`,x=T.value,S=Y.entries.value.map((O,k)=>{if(O)return Je({entry:O,page:Y.pages.value[O.pageIndex],textureLighting:x.textureLighting??"baked"});let w=_.value[k];return!w||w.texture?null:Y.useStableTriangle.value&&st(w)?Ze({entry:w,textureLighting:x.textureLighting??"baked"}):Y.useProjectiveQuad.value&&lt(w)?Qe({entry:w,textureLighting:x.textureLighting??"baked"}):Y.useBorderShape.value||Y.useFullRectSolid.value?Ke({entry:w,textureLighting:x.textureLighting??"baked",forceBorderShape:!Y.useFullRectSolid.value}):null}),C=t.default?.()??[];return Oi("div",{ref:h,class:y,"data-polycss-lighting":x.textureLighting??"baked","aria-hidden":"true",style:{...H.value??null,...n.style},...Object.fromEntries(Object.entries(n).filter(([O])=>O!=="style"&&O!=="class"))},[...S,...C])}}});import{defineComponent as Ms,h as Ie,Teleport as Es,computed as oe,inject as Ts,onMounted as As,onBeforeUnmount as Xo,ref as dt,watch as Nt,watchEffect as Uo}from"vue";import{buildBasisHints as ws,buildSharedEdgeMap as Ls,cornerShapeGeometryForPlan as Rs,worldDirectionalLightToCss as Os}from"@layoutit/polycss-core";import{BASE_TILE as et,computeReceiverShadowFaces as Ds,computeSceneBbox as ks,DEFAULT_SEAM_BLEED as Is,ensureCcw2D as Fs,inverseRotateVec3 as Wo,findOverlappingPolygonDuplicates as qo,optimizeMeshPolygons as Vs,parseHexColor as _s,prepareCasterEdgeOwners as Bs,prepareCasterPolyItems as zs,prepareReceiverFacePlanes as Hs,projectCssVertexToGround as Ns,worldDirectionToCss as Go}from"@layoutit/polycss-core";import{ref as St,watch as _i,onUnmounted as Bi}from"vue";import{loadMesh as zi}from"@layoutit/polycss-core";var Do=[],Pn=[];function Ht(e,t){let n=St(Do),o=St(void 0),r=St(!!e.value),a=St(null),i=St(Pn),u=null;function s(){if(u){try{u.dispose()}catch{}u=null}}return _i(e,(c,m,p)=>{if(!c){s(),n.value=Do,o.value=void 0,r.value=!1,a.value=null,i.value=Pn;return}let l=!1;r.value=!0,a.value=null;let h=u;zi(c,t).then(f=>{if(l){try{f.dispose()}catch{}return}if(h)try{h.dispose()}catch{}u=f,n.value=f.polygons,o.value=f.voxelSource,r.value=!1,a.value=null,i.value=f.warnings??Pn}).catch(f=>{if(l)return;let P=f instanceof Error?f:new Error(String(f));r.value=!1,a.value=P}),p(()=>{l=!0})},{immediate:!0}),Bi(()=>{s()}),{polygons:n,voxelSource:o,loading:r,error:a,warnings:i,dispose:s}}import{BASE_TILE as de,computeProjectiveQuadMatrix as Hi,normalFacesCamera as Ni,parsePureColor as zo,PROJECTIVE_QUAD_BLEED as Yi,resolveProjectiveQuadGuards as $i,rotateVec3 as ko,shadePolygon as ji,SOLID_QUAD_CANONICAL_SIZE as Xi}from"@layoutit/polycss-core";var Ui=[.4,-.7,.59],Wi="#ffffff",qi=1,Gi="#ffffff",Zi=.4,Ho=1,Ki=8,Qi=Yi,ke=1e-6,Ji=$i({bleed:0}),No={t:[0,0,1],b:[0,0,-1],fl:[0,1,0],br:[0,-1,0],fr:[1,0,0],bl:[-1,0,0]},bn=["t","b","bl","br","fr","fl"],es=new Map([["0,0,1","t"],["0,0,-1","b"],["0,1,0","fl"],["0,-1,0","br"],["1,0,0","fr"],["-1,0,0","bl"]]);function Io(e){let t=[];for(let n of bn)Ni(No[n],e)&&t.push(n);return t.join("|")}function ts(e,t,n){let o=e.__polycssVoxelBrushState??(e.__polycssVoxelBrushState={});o.color!==t&&(e.style.color=t,o.color=t),o.transform!==n&&(e.style.transform=n,o.transform=n)}function ns(e){let t=e.vertices;if(t.length<3)return null;let n=t[0],o=0,r=0,a=0;for(let u=1;u+1<t.length;u+=1){let s=t[u],c=t[u+1],m=s[1]-n[1],p=s[0]-n[0],l=s[2]-n[2],h=c[1]-n[1],f=c[0]-n[0],P=c[2]-n[2];o-=p*P-l*f,r-=l*h-m*P,a-=m*f-p*h}let i=Math.hypot(o,r,a);return i<=1e-9?null:[Math.round(o/i),Math.round(r/i),Math.round(a/i)]}function os(e){if(e.texture||e.material||e.uvs||e.textureTriangles||e.vertices.length!==4)return null;let t=ns(e),n=t?es.get(t.join(",")):void 0;if(!n)return null;let o=1/0,r=1/0,a=1/0,i=-1/0,u=-1/0,s=-1/0;for(let p of e.vertices)o=Math.min(o,p[0]),r=Math.min(r,p[1]),a=Math.min(a,p[2]),i=Math.max(i,p[0]),u=Math.max(u,p[1]),s=Math.max(s,p[2]);let c=1e-6,m=cs(e.color);return Math.abs(s-a)<=c?{axis:"z",face:n,left:r*de,top:o*de,width:Math.max(0,(u-r)*de),height:Math.max(0,(i-o)*de),z:a*de,baseColor:m,bleed:vn()}:Math.abs(i-o)<=c?{axis:"x",face:n,left:r*de,top:a*de,width:Math.max(0,(u-r)*de),height:Math.max(0,(s-a)*de),z:-o*de,baseColor:m,bleed:vn()}:Math.abs(u-r)<=c?{axis:"y",face:n,left:a*de,top:o*de,width:Math.max(0,(s-a)*de),height:Math.max(0,(i-o)*de),z:-r*de,baseColor:m,bleed:vn()}:null}function vn(){return{left:0,right:0,top:0,bottom:0}}function rs(e){let t=o=>String(Number(o.toFixed(6))),n=`${e.item.baseColor}|${e.variableAxis}`;for(let o=0;o<3;o+=1)o!==e.variableAxis&&(n+=`|${o}:${t(e.fixed[o])}`);return n}function Fo(e){return[e[1]*de,e[0]*de,e[2]*de]}function Vo(e,t){return e.axis==="x"?[t[0],t[2]]:e.axis==="y"?[t[2],t[1]]:[t[0],t[1]]}function as(e,t,n){let o=e.left,r=e.left+e.width,a=e.top,i=e.top+e.height;if(Math.abs(t[0]-n[0])<=ke){if(Math.abs(t[0]-o)<=ke)return"left";if(Math.abs(t[0]-r)<=ke)return"right"}if(Math.abs(t[1]-n[1])<=ke){if(Math.abs(t[1]-a)<=ke)return"top";if(Math.abs(t[1]-i)<=ke)return"bottom"}return null}function is(e,t){let n=null;for(let o=0;o<3;o+=1)if(!(Math.abs(e[o]-t[o])<=ke)){if(n!==null)return null;n=o}return n}function ss(e,t,n){let o=t.vertices,r=Fo(o[n]),a=Fo(o[(n+1)%o.length]),i=as(e,Vo(e,r),Vo(e,a));if(!i)return null;let u=is(r,a);if(u===null)return null;let s=Math.min(r[u],a[u]),c=Math.max(r[u],a[u]);return c-s>ke?{item:e,side:i,variableAxis:u,fixed:r,start:s,end:c}:null}function _o(e){e.item.bleed[e.side]=Math.max(e.item.bleed[e.side],Qi)}function ls(e,t){let n=new Map;for(let o of t){let r=e[o.sourceIndex];if(r)for(let a=0;a<r.vertices.length;a+=1){let i=ss(o,r,a);if(!i)continue;let u=rs(i),s=n.get(u);s?s.push(i):n.set(u,[i])}}for(let o of n.values()){if(o.length<2)continue;o.sort((a,i)=>a.start-i.start||a.end-i.end);let r=[];for(let a of o){r=r.filter(i=>i.end>a.start+ke);for(let i of r)i.item.sourceIndex!==a.item.sourceIndex&&(_o(i),_o(a));r.push(a)}}}function us(e){let t=zo(e);return t?{r:t.rgb[0],g:t.rgb[1],b:t.rgb[2],alpha:t.alpha}:{r:255,g:255,b:255,alpha:1}}function cs(e){if(!e)return"#cccccc";let t=zo(e);if(!t)return e;let n={r:t.rgb[0],g:t.rgb[1],b:t.rgb[2],alpha:t.alpha};if(n.alpha<1){let o=Math.round(Math.max(0,n.alpha)*1e3)/1e3;return`rgba(${xn(n.r)}, ${xn(n.g)}, ${xn(n.b)}, ${o})`}return ds(n)}function ds({r:e,g:t,b:n}){let o=r=>Math.round(Math.max(0,Math.min(255,r))).toString(16).padStart(2,"0");return`#${o(e)}${o(t)}${o(n)}`}function xn(e){return Math.round(Math.max(0,Math.min(255,e)))}function ms(e,t,n,o){let r=n?.direction??Ui,a=Math.hypot(r[0],r[1],r[2])||1,i=r[0]/a,u=r[1]/a,s=r[2]/a,c=Math.max(0,n?.intensity??qi)*Math.max(0,e[0]*i+e[1]*u+e[2]*s),m=Math.max(0,o?.intensity??Zi),p=n?.color??Wi,l=o?.color??Gi,h=ji(t,c,p,l,m),f=us(t);if(f.alpha>=1)return h;let P=parseInt(h.slice(1,3),16),v=parseInt(h.slice(3,5),16),E=parseInt(h.slice(5,7),16);return`rgba(${P}, ${v}, ${E}, ${f.alpha})`}function ps(e){if(!e?.length)return[];let t=[];for(let n=0;n<e.length;n+=1){let o=e[n],r=os(o);if(!r||r.width<=0||r.height<=0)return[];t.push({...r,sourceIndex:n})}return ls(e,t),t}function fs(e){return e.axis==="x"?{xAxis:[1,0,0],yAxis:[0,0,1],normal:[0,-1,0],tx:0,ty:-e.z,tz:0}:e.axis==="y"?{xAxis:[0,0,1],yAxis:[0,1,0],normal:[-1,0,0],tx:-e.z,ty:0,tz:0}:{xAxis:[1,0,0],yAxis:[0,1,0],normal:[0,0,1],tx:0,ty:0,tz:e.z}}function ys(e){let t=e.left,n=e.top,o=e.left+e.width,r=e.top+e.height;return[t,n,o,n,o,r,t,r]}function gs(e){return new Map([[0,e.bleed.top],[1,e.bleed.right],[2,e.bleed.bottom],[3,e.bleed.left]])}function hs(e,t){let n=e.split(",").map(Number);if(n.length!==16||n.some(r=>!Number.isFinite(r)))return null;let o=Xi/t;for(let r=0;r<8;r+=1)n[r]*=o;return`matrix3d(${n.map(r=>Number(r.toFixed(6))).join(",")})`}function Bo(e,t){let n=e.left-e.bleed.left,o=e.top-e.bleed.top,r=e.width+e.bleed.left+e.bleed.right,a=e.height+e.bleed.top+e.bleed.bottom,i=e.z,u=r/t,s=a/t;return`matrix3d(${(e.axis==="x"?[u,0,0,0,0,0,s,0,0,-1,0,0,n,-i,o,1]:e.axis==="y"?[0,0,u,0,0,s,0,0,-1,0,0,0,-i,o,n,1]:[u,0,0,0,0,s,0,0,0,0,1,0,n,o,i,1]).map(m=>Number(m.toFixed(6))).join(",")})`}function Ps(e,t){let{xAxis:n,yAxis:o,normal:r,tx:a,ty:i,tz:u}=fs(e),s=Hi(ys(e),n,o,r,a,i,u,Ji,gs(e));return s?hs(s,t)??Bo(e,t):Bo(e,t)}function vs(e){let t=e.defaultView?.matchMedia;return t?t("(pointer: coarse)").matches||t("(hover: none)").matches:!1}function xs(e){return vs(e)?Ki:Ho}function bs(e){return e.axis==="x"?[e.left+e.width/2,-e.z,e.top+e.height/2]:e.axis==="y"?[-e.z,e.top+e.height/2,e.left+e.width/2]:[e.left+e.width/2,e.top+e.height/2,e.z]}function Ss(e,t){let n=bs(e),o=t.meshRotation;o&&(n=ko(n,o[0]??0,o[1]??0,o[2]??0));let[r,a]=ko(n,t.rotX,0,t.rotY);return{x:r,y:a}}function Cs(e,t,n){let o=e.filter(l=>t.has(l.face)).map(l=>({item:l,...Ss(l,n)}));if(o.length===0)return[];let r=1/0,a=-1/0,i=1/0,u=-1/0;for(let l of o)r=Math.min(r,l.x),a=Math.max(a,l.x),i=Math.min(i,l.y),u=Math.max(u,l.y);let s=4,c=Math.max(1e-6,a-r),m=Math.max(1e-6,u-i),p=new Map;for(let l of o){let h=Math.min(s-1,Math.max(0,Math.floor((l.x-r)/c*s))),f=Math.min(s-1,Math.max(0,Math.floor((l.y-i)/m*s))),P=`${h}:${f}`,v=p.get(P);v||(v={tx:h,ty:f,sourceIndex:l.item.sourceIndex,items:[]},p.set(P,v)),v.items.push(l.item),v.sourceIndex=Math.min(v.sourceIndex,l.item.sourceIndex)}return Array.from(p.values()).sort((l,h)=>l.ty-h.ty||l.tx-h.tx||l.sourceIndex-h.sourceIndex).flatMap(l=>l.items)}function Yo(e){let{doc:t,wrapper:n,polygons:o,directionalLight:r,ambientLight:a}=e,i=ps(o);if(i.length===0)return null;let u=new Set(i.map(b=>b.face));n.classList.add("polycss-voxel-mesh");let s=xs(t);s!==Ho&&n.style.setProperty("--polycss-voxel-primitive",`${s}px`);let c=new Map,m=(b,d)=>{let y=`${b}|${d}`,x=c.get(y);if(x)return x;let S=ms(No[b],d,r,a);return c.set(y,S),S},p=new Map,l=new Map,h=new Map,f=new Map;for(let b of i){let d=f.get(b.face);d||(d=[],f.set(b.face,d)),d.push(b)}let P="",v=0,E=new Set,M=b=>{let d=p.get(b.sourceIndex);return d||(d=t.createElement("b"),p.set(b.sourceIndex,d),ts(d,m(b.face,b.baseColor),Ps(b,s))),d},A=b=>{let d=l.get(b);return d||(d=t.createElement("span"),d.className=`polycss-voxel-face polycss-voxel-face-${b}`,d.dataset.polycssVoxelFace=b,d.__polycssVoxelFaceHost=!0,l.set(b,d)),d},g=()=>{for(let b of Array.from(n.childNodes))if(!b.__polycssVoxelFaceHost)return b;return null},L=(b,d)=>{let y=d.map(C=>C.sourceIndex).join(",");if(h.get(b)===y)return;let x=A(b),S=t.createDocumentFragment();for(let C of d)S.appendChild(M(C));x.replaceChildren(S),h.set(b,y)},T=()=>{for(let b of bn)u.has(b)&&L(b,f.get(b)??[])},_=b=>new Set(b.split("|").filter(Boolean)),D=b=>{let d=_(b);return bn.filter(y=>d.has(y)&&u.has(y))},R=b=>{let d=0;for(let y of b)d+=f.get(y)?.length??0;return d},N=b=>{let d=new Set,y=[],x=new Map;for(let S of b){d.has(S.face)||(d.add(S.face),y.push(S.face));let C=x.get(S.face);C||(C=[],x.set(S.face,C)),C.push(S)}return{orderedFaces:y,itemsByFace:x}},Y=(b,d)=>{let y=new Set(b);for(let x of E){if(y.has(x))continue;let S=l.get(x);S?.parentNode===n&&n.removeChild(S)}if(d){let x=t.createDocumentFragment();for(let S of b)x.appendChild(A(S));n.insertBefore(x,g()),E=y;return}for(let x=0;x<b.length;x+=1){let S=b[x],C=A(S);if(C.parentNode===n)continue;let O=null;for(let k=x+1;k<b.length;k+=1){let w=l.get(b[k]);if(w?.parentNode===n){O=w;break}}n.insertBefore(C,O??g())}E=y},H=(b,d,y)=>{if(!y){let k=D(b);Y(k,!1),v=R(k);return}let x=new Set(b.split("|").filter(Boolean)),S=Cs(i,x,d),{orderedFaces:C,itemsByFace:O}=N(S);for(let k of C)L(k,O.get(k)??[]);Y(C,!0),v=S.length};return T(),{get brushCount(){return v},render(b){P=Io(b),H(P,b,!0)},syncCamera(b){let d=Io(b);d!==P&&(P=d,H(d,b,!1))},dispose(){for(let b of l.values())b.remove();n.classList.remove("polycss-voxel-mesh"),n.style.removeProperty("--polycss-voxel-primitive"),p.clear(),l.clear(),h.clear(),v=0,E=new Set,P=""}}}var Sn=new WeakMap;function $o(e,t){Sn.set(e,t)}function jo(e){Sn.delete(e)}function ut(e){let t=e;for(;t;){if(t instanceof HTMLElement){let n=Sn.get(t);if(n)return n}t=t.parentElement}return null}function ct(e,t,n){let o=Array.from(e.querySelectorAll("i,b,s,u"));for(let r of o){let a=r.getBoundingClientRect();if(!(a.width<=0||a.height<=0)&&t>=a.left&&t<=a.right&&n>=a.top&&n<=a.bottom)return!0}return!1}function Cn(e,t,n){if(typeof document>"u")return null;let o=Array.from(document.querySelectorAll(".polycss-mesh"));for(let r of o){if(n&&!n(r))continue;let a=ut(r);if(a&&ct(r,e,t))return a}return null}var Zo=new WeakMap,Ko=new WeakMap;function Ys(e){let t={};return e.paintColor&&(t["--polycss-paint"]=e.paintColor),e.dynamicColor&&(t["--psr"]=(e.dynamicColor.r/255).toFixed(4),t["--psg"]=(e.dynamicColor.g/255).toFixed(4),t["--psb"]=(e.dynamicColor.b/255).toFixed(4)),Object.keys(t).length>0?t:null}function $s(e,t,n){let o=typeof t=="number"?t:t?.[0]??1,r=typeof t=="number"?t:t?.[1]??1,a=typeof t=="number"?t:t?.[2]??1,i=o!==1||r!==1||a!==1,u=!!n&&(!!n[0]||!!n[1]||!!n[2]),s=e?[e[1]*et,e[0]*et,e[2]*et]:[0,0,0],c=[];return(s[0]!==0||s[1]!==0||s[2]!==0)&&c.push(`translate3d(${s[0]}px, ${s[1]}px, ${s[2]}px)`),u&&(n[0]&&c.push(`rotateY(${-n[0]}deg)`),n[1]&&c.push(`rotateX(${-n[1]}deg)`),n[2]&&c.push(`rotateZ(${-n[2]}deg)`)),i&&c.push(`scale3d(${o}, ${r}, ${a})`),c.length>0?c.join(" "):void 0}function Qo(e){if(e.length===0)return e;let t=ks(e),n=(t.min[0]+t.max[0])/2,o=(t.min[1]+t.max[1])/2,r=(t.min[2]+t.max[2])/2;if(n===0&&o===0&&r===0)return e;let a=i=>[i[0]-n,i[1]-o,i[2]-r];return e.map(i=>({...i,vertices:i.vertices.map(a),...i.textureTriangles?.length?{textureTriangles:i.textureTriangles.map(u=>({...u,vertices:u.vertices.map(a)}))}:null}))}var te=Ms({name:"PolyMesh",inheritAttrs:!1,props:{id:{type:String,default:void 0},src:{type:String,default:void 0},mtl:{type:String,default:void 0},polygons:{type:Array,default:void 0},voxelSource:{type:Object,default:void 0},autoCenter:{type:Boolean,default:!1},textureLighting:{type:String,default:void 0},textureQuality:{type:[Number,String],default:void 0},seamBleed:{type:[Number,String],default:void 0},atomicAtlas:{type:Boolean,default:!1},onFrameReady:{type:Function,default:void 0},castShadow:{type:Boolean,default:!1},receiveShadow:{type:Boolean,default:!1},merge:{type:Boolean,default:!0},meshResolution:{type:String,default:void 0},parseOptions:{type:Object,default:void 0},class:{type:String},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},onClick:{type:Function,default:void 0},onContextMenu:{type:Function,default:void 0},onDoubleClick:{type:Function,default:void 0},onWheel:{type:Function,default:void 0},onPointerDown:{type:Function,default:void 0},onPointerUp:{type:Function,default:void 0},onPointerMove:{type:Function,default:void 0},onPointerOver:{type:Function,default:void 0},onPointerOut:{type:Function,default:void 0},onPointerEnter:{type:Function,default:void 0},onPointerLeave:{type:Function,default:void 0},onPointerCancel:{type:Function,default:void 0}},setup(e,{slots:t,attrs:n,expose:o}){let r=oe(()=>e.src??""),a=oe(()=>{let F={...e.parseOptions??{}};return e.mtl&&(F.mtlUrl=e.mtl),e.meshResolution!==void 0&&(F.meshResolution=e.meshResolution),Object.keys(F).length>0?F:void 0}),i=Ht(r,a.value),u=oe(()=>e.src?i.polygons.value:e.polygons??[]),s=dt(null),c=null;Nt(u,()=>{s.value=null,c=null});let m=oe(()=>s.value??u.value),p=oe(()=>e.merge?Vs(m.value,e.meshResolution!==void 0?{meshResolution:e.meshResolution}:void 0):m.value),l=oe(()=>e.autoCenter?Qo(p.value):p.value),h=!t.polygon,f=Nn(),P=Ts(ue,null),v=dt(0),E;Uo(F=>{E?.(),E=P?.store.subscribe(()=>{v.value++}),F(()=>{E?.(),E=void 0})});let M=oe(()=>e.textureLighting??f?.value.textureLighting??"baked"),A=oe(()=>f?.value.strategies),g=oe(()=>e.seamBleed??f?.value.seamBleed??Is),L=oe(()=>f?.value.directionalLight),T=oe(()=>f?.value.ambientLight),_=oe(()=>e.src?i.voxelSource.value:e.voxelSource??void 0),D=oe(()=>!!(_.value&&s.value===null&&!t.polygon&&!t.default&&M.value==="baked"&&!e.castShadow)),R=oe(()=>{if(M.value!=="dynamic")return null;let F=e.rotation;if(!F||F[0]===0&&F[1]===0&&F[2]===0)return null;let U=f?.value.directionalLight?.direction;if(!U)return null;let $=Wo(U,F),V=Math.hypot($[0],$[1],$[2])||1;return{"--plx":($[0]/V).toFixed(2),"--ply":($[1]/V).toFixed(2),"--plz":($[2]/V).toFixed(2)}}),N=dt(e.rotation),Y=dt(0),H=oe(()=>{let F=L.value;if(!F)return F;let U=Os(F);return N.value?{...U,direction:Wo(U.direction,N.value)}:U}),b=void 0,d=oe(()=>{if(!h||D.value)return[];let F=_t(l.value),U=g.value==="auto"||typeof g.value=="number"&&Number.isFinite(g.value)&&g.value>0?Bt(l.value,{directionalLight:H.value,ambientLight:T.value}):null,$=ws(l.value,{directionalLight:H.value,ambientLight:T.value});return l.value.map((V,X)=>We(V,X,{directionalLight:H.value,ambientLight:T.value,seamBleed:U?.has(X)?g.value:void 0,seamEdges:U?.get(X),textureEdgeRepairEdges:F[X],lightOccludedPolyIndices:b},$[X]))}),y=oe(()=>e.textureQuality),x=oe(()=>e.atomicAtlas),S=Ge(d,M,y,A,x),C=oe(()=>h?yn(S.plans.value,M.value,A.value):{});Nt(()=>S.entries.value,()=>{e.atomicAtlas&&S.ready.value&&e.onFrameReady?.()},{flush:"sync"});let O=oe(()=>Ys(C.value)),k=oe(()=>{if(!e.castShadow||f?.value.receiverRegistry?.hasAny.value)return null;let F=f?.value,U=F?.groundCssZ??null;if(U===null)return null;let $=F?.shadow,V=F?.directionalLight?.direction??[.4,-.7,.59],X=Go(V),G=e.position?.[2]??0,se=U-G*et,le=qo(l.value,{normalTolerance:.1,distanceTolerance:.5,overlapFraction:.95,preserveDoubleSidedBackfaces:!1}),re=[],me=1/0,pe=1/0,ce=-1/0,ye=-1/0,Q=1/0,z=1/0,I=-1/0,ae=-1/0,he=l.value,ze=d.value;for(let Se=0;Se<he.length;Se++){if(le.has(Se)||!ze[Se])continue;let Le=he[Se],ot=[];for(let Ne of Le.vertices){let Ce=[Ne[1]*et,Ne[0]*et,Ne[2]*et];Ce[0]<Q&&(Q=Ce[0]),Ce[1]<z&&(z=Ce[1]),Ce[0]>I&&(I=Ce[0]),Ce[1]>ae&&(ae=Ce[1]);let ve=Ns(Ce,X,se);ot.push(ve),ve[0]<me&&(me=ve[0]),ve[1]<pe&&(pe=ve[1]),ve[0]>ce&&(ce=ve[0]),ve[1]>ye&&(ye=ve[1])}re.push(ot)}if(re.length===0)return null;let Pe=$?.maxExtend??2e3,be=Math.max(me,Q-Pe),Fe=Math.max(pe,z-Pe),nt=Math.min(ce,I+Pe),Ve=Math.min(ye,ae+Pe),_e=nt-be,Be=Ve-Fe;if(!(_e>0)||!(Be>0))return null;let gt=$?.color??"#000000",Vn=$?.opacity??.25,Ae=_s(gt)?.rgb??[0,0,0],He="";for(let Se of re){let we=Fs(Se);He+=`M${(we[0][0]-be).toFixed(3)},${(we[0][1]-Fe).toFixed(3)}`;for(let Le=1;Le<we.length;Le++)He+=`L${(we[Le][0]-be).toFixed(3)},${(we[Le][1]-Fe).toFixed(3)}`;He+="Z"}return Ie("svg",{class:"polycss-shadow polycss-shadow-svg",width:String(_e),height:String(Be),viewBox:`0 0 ${_e} ${Be}`,style:{position:"absolute",top:"0",left:"0",display:"block",overflow:"hidden",transformOrigin:"0 0",pointerEvents:"none",willChange:"transform",transform:`translate3d(${be.toFixed(3)}px,${Fe.toFixed(3)}px,${se.toFixed(3)}px)`}},[Ie("path",{d:He,fill:`rgb(${Ae[0]},${Ae[1]},${Ae[2]})`,"fill-rule":"nonzero",stroke:`rgb(${Ae[0]},${Ae[1]},${Ae[2]})`,"stroke-width":"3","stroke-linejoin":"round",opacity:Vn.toFixed(4)})])}),w=oe(()=>e.receiveShadow?Ls(l.value):void 0),B=oe(()=>{if(!e.receiveShadow)return[];let F=f?.value,U=F?.shadowRegistry;if(!U)return[];U.version.value,v.value;let $=U.getEntries();if($.length===0)return[];let V=F?.directionalLight?.direction??[.4,-.7,.59],X=Go(V),G=F?.shadow?.lift??.001,se=Hs(l.value,e.position??[0,0,0],e.scale,new Set,G,e.rotation);if(se.length===0)return[];let le=[],re=0,me=w.value;for(let Q of $){let z=Q(),I=z.renderedPolygonIndices,ae=zs(z.polygons,z.position,z.scale,I?Pe=>I.has(Pe):()=>!0,z.rotation??null),he=z.polygons===l.value,ze;if(!he&&z.polygons.length>=40){let Pe=z.rotation??null,be=z.position,Fe=JSON.stringify(z.scale??null),nt=`${be[0]},${be[1]},${be[2]}|${Pe?Pe.join(","):"n"}|${Fe}`,Ve=Zo.get(z.polygons);(Ve===void 0||Ko.get(z.polygons)!==nt)&&(Ve=Bs(z.polygons,be,z.scale,Pe),Zo.set(z.polygons,Ve),Ko.set(z.polygons,nt)),ze=Ve}le.push({id:Symbol(`caster-${re++}`),items:ae,selfShadowEdgeMap:he?me:void 0,edgeOwners:ze,casterPolygonCount:z.polygons.length})}let pe=P?.store.getState().cameraState,ce={rotX:pe?.rotX??65,rotY:pe?.rotY??45,meshRotation:e.rotation};return Ds({receiverPlanes:se,receiverPolygons:l.value,receiverHasTexture:l.value.some(Q=>Q.texture!==void 0),casters:le,lightDir:X,cameraRot:ce,ambientLight:F?.ambientLight,directionalLight:F?.directionalLight,shadow:{color:F?.shadow?.color,opacity:F?.shadow?.opacity??.25,maxExtend:F?.shadow?.maxExtend}}).map(Q=>Ie("svg",{key:`receiver-${Q.faceIndex}`,class:"polycss-shadow polycss-shadow-svg polycss-shadow-receiver","data-poly-shadow-type":"receiver","data-poly-shadow-receiver-face":String(Q.faceIndex),"data-poly-shadow-receiver-polys":JSON.stringify(Q.memberPolyIndices),width:String(Q.width),height:String(Q.height),viewBox:`0 0 ${Q.width} ${Q.height}`,style:{position:"absolute",top:"0",left:"0",display:"block",overflow:"hidden",transformOrigin:"0 0",pointerEvents:"none",willChange:"transform",transform:Q.matrixCss}},Q.paths.map((z,I)=>Ie("path",{key:I,d:z.d,fill:Q.fill,stroke:Q.fill,"stroke-width":"3","stroke-linejoin":"round",opacity:Q.opacity.toFixed(4),"data-poly-shadow-caster-polys":JSON.stringify(z.casterPolygonIndices)}))))}),W=Symbol();Nt(()=>e.castShadow,(F,U,$)=>{let V=f?.value.shadowRegistry;V&&(F?V.register(W,()=>{let X=qo(l.value,{normalTolerance:.1,distanceTolerance:.5,overlapFraction:.95,preserveDoubleSidedBackfaces:!1}),G=new Set,se=d.value;for(let le=0;le<se.length;le++)se[le]&&!X.has(le)&&G.add(le);return{polygons:l.value,position:e.position??[0,0,0],scale:e.scale,rotation:e.rotation,renderedPolygonIndices:G}}):V.unregister(W),$(()=>V.unregister(W)))},{immediate:!0});let Z=Symbol();Nt(()=>e.receiveShadow,(F,U,$)=>{let V=f?.value.receiverRegistry;V&&(F?V.register(Z):V.unregister(Z),$(()=>V.unregister(Z)))},{immediate:!0}),Xo(()=>{f?.value.shadowRegistry?.unregister(W),f?.value.receiverRegistry?.unregister(Z)});let q=dt(null),j={get element(){return q.value},get id(){return e.id},getPosition:()=>e.position,getRotation:()=>e.rotation,getScale:()=>e.scale,getPolygons:()=>c??l.value,setPolygons(F){let U=e.autoCenter?Qo(F):F;c=U;let $=q.value,V=$&&h&&fn($,U,{directionalLight:H.value,ambientLight:T.value,textureLighting:M.value,strategies:A.value,seamBleed:g.value,colorFrame:++Y.value,colorFreezeFrames:0});s.value=F.slice()},updatePolygon(F,U){let $=c??l.value,V=typeof F=="number"?F:$.indexOf(F);V<0||V>=$.length||(Object.assign($[V],U),s.value=$.slice(),c=null)},rebakeAtlas:()=>{N.value=e.rotation}};o(j),As(()=>{q.value&&$o(q.value,j)}),Xo(()=>{q.value&&jo(q.value)});let ee=dt(null);Uo(F=>{let U=q.value;if(ee.value?.dispose(),ee.value=null,!D.value||!U)return;let $=Yo({doc:U.ownerDocument,wrapper:U,polygons:l.value,directionalLight:H.value,ambientLight:T.value});if(!$)return;let V=()=>{let G=P?.store.getState().cameraState;return{rotX:G?.rotX??65,rotY:G?.rotY??45,meshRotation:e.rotation}};ee.value=$,$.render(V());let X=P?.store.subscribe(()=>{$.syncCamera(V())});F(()=>{X?.(),$.dispose(),ee.value===$&&(ee.value=null)})});let ne=null;function ie(F,U,$){let V=[];if(typeof document<"u"&&typeof document.elementsFromPoint=="function"){let re=document.elementsFromPoint(U,$),me=new Set;for(let pe of re){let ce=ut(pe);ce&&!me.has(ce)&&(me.add(ce),V.push({object:ce}))}}let X=0,G=0,se=P?.cameraElRef.value;if(se){let re=se.getBoundingClientRect();re.width>0&&re.height>0&&(X=(U-re.left)/re.width*2-1,G=-(($-re.top)/re.height*2-1))}let le=0;return ne&&(le=Math.hypot(U-ne.x,$-ne.y)),{object:V[0]?.object??j,eventObject:j,intersections:V,pointer:{x:X,y:G},delta:le,nativeEvent:F,stopPropagation:()=>F.stopPropagation()}}function J(F,U,$,V){F&&F(ie(U,$,V))}return()=>{let U={transform:$s(e.position,e.scale,e.rotation),...R.value??void 0,...n.style,...O.value??void 0},$=Object.fromEntries(Object.entries(n).filter(([z])=>z!=="style"&&z!=="class")),V=`polycss-mesh${D.value?" polycss-voxel-mesh":""}${e.class?` ${e.class}`:""}`,X={};e.onClick&&(X.onClick=z=>{let I=z;J(e.onClick,I,I.clientX,I.clientY)}),e.onContextMenu&&(X.onContextmenu=z=>{let I=z;J(e.onContextMenu,I,I.clientX,I.clientY)}),e.onDoubleClick&&(X.onDblclick=z=>{let I=z;J(e.onDoubleClick,I,I.clientX,I.clientY)}),e.onWheel&&(X.onWheel=z=>{let I=z;J(e.onWheel,I,I.clientX,I.clientY)}),X.onPointerdown=z=>{let I=z;ne={x:I.clientX,y:I.clientY},J(e.onPointerDown,I,I.clientX,I.clientY)},X.onPointerup=z=>{let I=z;J(e.onPointerUp,I,I.clientX,I.clientY),ne=null},e.onPointerMove&&(X.onPointermove=z=>{let I=z;J(e.onPointerMove,I,I.clientX,I.clientY)}),(e.onPointerOver||e.onPointerEnter)&&(X.onPointerenter=z=>{let I=z;J(e.onPointerOver,I,I.clientX,I.clientY),J(e.onPointerEnter,I,I.clientX,I.clientY)}),(e.onPointerOut||e.onPointerLeave)&&(X.onPointerleave=z=>{let I=z;J(e.onPointerOut,I,I.clientX,I.clientY),J(e.onPointerLeave,I,I.clientX,I.clientY)}),e.onPointerCancel&&(X.onPointercancel=z=>{let I=z;J(e.onPointerCancel,I,I.clientX,I.clientY),ne=null});let G=e.id?{"data-poly-mesh-id":e.id}:{};if(e.src&&i.loading.value&&i.polygons.value.length===0)return Ie("div",{ref:q,class:`polycss-mesh polycss-mesh-loading${e.class?` ${e.class}`:""}`,style:U,...G,...X,...$},t.fallback?.()??[]);if(e.src&&i.error.value&&i.polygons.value.length===0)return Ie("div",{ref:q,class:`polycss-mesh polycss-mesh-error${e.class?` ${e.class}`:""}`,style:U,...G,...X,...$},t.error?.({error:i.error.value})??[]);let se=l.value,le=t.polygon?se.map((z,I)=>Ie("template",{key:I},t.polygon?.({polygon:z,index:I}))):D.value?[]:S.entries.value.map((z,I)=>{if(z)return Je({entry:z,page:S.pages.value[z.pageIndex],textureLighting:M.value,solidPaintDefaults:C.value});let ae=S.plans.value[I];if(!ae||ae.texture)return null;if(lt(ae))return Qe({entry:ae,textureLighting:M.value,solidPaintDefaults:C.value});if(st(ae))return Ze({entry:ae,textureLighting:M.value,solidPaintDefaults:C.value});let he=A.value?.disable?.includes("i")?null:Rs(ae);return he?hn({entry:ae,geometry:he,textureLighting:M.value,solidPaintDefaults:C.value}):Ke({entry:ae,textureLighting:M.value,solidPaintDefaults:C.value,forceBorderShape:!S.useFullRectSolid.value})}),re=t.default?.()??[],me=k.value,pe=me?[me]:[],ce=B.value,ye=f?.value?.sceneEl??null,Q=ye&&ce.length>0?[Ie(Es,{to:ye},ce)]:[];return Ie("div",{ref:q,class:V,style:U,...G,...X,...$},[...pe,...Q,...le,...re])}}});import{defineComponent as js,h as Jo,computed as Mn}from"vue";import{BASE_TILE as Ct}from"@layoutit/polycss-core";function Xs(e,t,n,o,r){let a=typeof n=="number"?n:n?.[0]??1,i=typeof n=="number"?n:n?.[1]??1,u=typeof n=="number"?n:n?.[2]??1,s=a!==1||i!==1||u!==1,c=!!t&&(!!t[0]||!!t[1]||!!t[2]),m=(e?.[1]??0)*Ct,p=(e?.[0]??0)*Ct,l=(e?.[2]??0)*Ct,h=[];return h.push(`translate3d(${m}px, ${p}px, ${l}px)`),c&&(t[0]&&h.push(`rotateY(${-t[0]}deg)`),t[1]&&h.push(`rotateX(${-t[1]}deg)`),t[2]&&h.push(`rotateZ(${-t[2]}deg)`)),s&&h.push(`scale3d(${a}, ${i}, ${u})`),h.push(`translate(${-o/2}px, ${-r/2}px)`),h.join(" ")}var er=js({name:"PolyIframe",props:{src:{type:String,required:!0},width:{type:Number,required:!0},height:{type:Number,required:!0},position:{type:Array,default:void 0},rotation:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},allow:{type:String,default:void 0},sandbox:{type:String,default:void 0},loading:{type:String,default:void 0},referrerpolicy:{type:String,default:void 0},title:{type:String,default:void 0},class:{type:String,default:void 0},style:{type:Object,default:void 0}},setup(e){let t=Mn(()=>e.width*Ct),n=Mn(()=>e.height*Ct),o=Mn(()=>Xs(e.position,e.rotation,e.scale,t.value,n.value));return()=>{let r={position:"absolute",left:"0",top:"0",transformOrigin:"0 0",transformStyle:"preserve-3d",transform:o.value,...e.style??{}},a={src:e.src,style:{width:`${t.value}px`,height:`${n.value}px`,border:"0",display:"block",background:"#000"}};return e.allow&&(a.allow=e.allow),e.sandbox&&(a.sandbox=e.sandbox),e.loading&&(a.loading=e.loading),e.referrerpolicy&&(a.referrerpolicy=e.referrerpolicy),e.title&&(a.title=e.title),Jo("div",{class:e.class?`polycss-iframe ${e.class}`:"polycss-iframe",style:r},[Jo("iframe",a)])}}});import{defineComponent as Us,h as Ws,computed as qs}from"vue";var tr=Us({name:"PolyGround",props:{size:{type:Number,default:6},z:{type:Number,default:0},center:{type:Array,default:()=>[0,0]},color:{type:String,default:"#7d848e"},class:{type:String,default:void 0}},setup(e){let t=qs(()=>{let n=e.size/2,[o,r]=e.center;return[{vertices:[[o-n,r-n,e.z],[o+n,r-n,e.z],[o+n,r+n,e.z],[o-n,r+n,e.z]],color:e.color}]});return()=>Ws(te,{polygons:t.value,castShadow:!1,class:e.class?`polycss-ground ${e.class}`:"polycss-ground"})}});import{computed as nr}from"vue";function Gs(e){return typeof e=="function"?nr(()=>{let{texture:t,key:n}=e();return{texture:t,key:n}}):nr(()=>({texture:e.texture,key:e.key}))}import{computed as mt,defineComponent as Zs,h as or}from"vue";var Ks=4;function Yt(e,t=Ks){let n=e.toFixed(t).replace(/\.?0+$/,"");return Number(n)===0||Object.is(Number(n),-0)?"0":`${n}px`}function Qs(e){if(e.length!==4)return null;let t=[...new Set(e.map(r=>r[0]))].sort((r,a)=>r-a),n=[...new Set(e.map(r=>r[1]))].sort((r,a)=>r-a);if(t.length!==2||n.length!==2)return null;let o=new Set([`${t[0]},${n[0]}`,`${t[0]},${n[1]}`,`${t[1]},${n[0]}`,`${t[1]},${n[1]}`]);for(let r of e)if(!o.has(`${r[0]},${r[1]}`))return null;return{u0:t[0],u1:t[1],v0:n[0],v1:n[1]}}function Js({plan:e,material:t,uvRect:n,className:o,style:r,domAttrs:a,pointerEvents:i="auto"}){let{u0:u,u1:s,v0:c,v1:m}=n,p=s-u,l=m-c,h=1/p,f=1/l,P=Math.max(c,m),v=u/p,E=(1-P)/l,M={transform:`matrix3d(${e.canonicalMatrix})`,backgroundImage:`url(${t.texture})`,backgroundSize:`${Yt(h)} ${Yt(f)}`,backgroundPosition:`${Yt(-v)} ${Yt(-E)}`,pointerEvents:i==="none"?"none":void 0,...r},A=e.polygon.data?Object.fromEntries(Object.entries(e.polygon.data).map(([L,T])=>[`data-${L}`,String(T)])):{},g=o?.trim()||void 0;return or("i",{class:g,style:M,...A,...a})}var rr=Zs({name:"Poly",inheritAttrs:!1,props:{vertices:{type:Array,required:!0},color:{type:String},texture:{type:String},uvs:{type:Array,default:void 0},data:{type:Object,default:void 0},material:{type:Object,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},textureLighting:{type:String,default:void 0},textureQuality:{type:[Number,String],default:void 0},context:{type:Object,default:void 0},baseColor:{type:String},pointerEvents:{type:String,default:"auto"}},setup(e,{attrs:t}){let n=mt(()=>e.textureLighting??e.context?.textureLighting??"baked"),o=mt(()=>e.textureQuality??e.context?.textureQuality),r=mt(()=>e.material?.texture??e.texture),a=mt(()=>e.material&&e.uvs?Qs(e.uvs):null),i=mt(()=>{let c=e.context?.tileSize??50;return We({vertices:e.vertices,color:e.baseColor??e.color,texture:r.value,uvs:e.uvs,data:e.data},0,{tileSize:c,layerElevation:e.context?.layerElevation??c,directionalLight:e.context?.directionalLight})}),u=mt(()=>a.value?[]:[i.value]),s=Ge(u,n,o);return()=>{let c=i.value,m=s.entries.value[0],p=[];e.position&&p.push(`translate3d(${e.position[0]}px, ${e.position[1]}px, ${e.position[2]}px)`),e.scale!==void 0&&(typeof e.scale=="number"?e.scale!==1&&p.push(`scale3d(${e.scale}, ${e.scale}, ${e.scale})`):p.push(`scale3d(${e.scale[0]}, ${e.scale[1]}, ${e.scale[2]})`)),e.rotation&&(e.rotation[0]&&p.push(`rotateX(${e.rotation[0]}deg)`),e.rotation[1]&&p.push(`rotateY(${e.rotation[1]}deg)`),e.rotation[2]&&p.push(`rotateZ(${e.rotation[2]}deg)`));let l=p.length>0?p.join(" "):void 0,h={};if(e.data)for(let[E,M]of Object.entries(e.data))h[`data-${E}`]=String(M);let f={...t,...h},P=Object.fromEntries(Object.entries(f).filter(([E])=>E!=="class"&&E!=="style")),v;return a.value&&e.material&&c?v=Js({plan:c,material:e.material,uvRect:a.value,className:f.class??void 0,style:f.style,domAttrs:P,pointerEvents:e.pointerEvents??"auto"}):m?v=Je({entry:m,page:s.pages.value[m.pageIndex],textureLighting:n.value,className:f.class??void 0,style:f.style,domAttrs:P,pointerEvents:e.pointerEvents??"auto"}):c&&!c.texture&&(v=st(c)?Ze({entry:c,textureLighting:n.value,className:f.class??void 0,style:f.style,domAttrs:P,pointerEvents:e.pointerEvents??"auto"}):lt(c)?Qe({entry:c,textureLighting:n.value,className:f.class??void 0,style:f.style,domAttrs:P,pointerEvents:e.pointerEvents??"auto"}):Ke({entry:c,textureLighting:n.value,className:f.class??void 0,style:f.style,domAttrs:P,pointerEvents:e.pointerEvents??"auto"})),v?l?or("div",{class:"polycss-poly-wrapper",style:{transform:l,position:"absolute",transformStyle:"preserve-3d"}},[v]):v:null}}});import{computed as Me,defineComponent as Ee,h as Te}from"vue";import{boxPolygons as el,planePolygons as tl,ringPolygons as nl,octahedronPolygons as ol,spherePolygons as rl,tetrahedronPolygons as al,icosahedronPolygons as il,dodecahedronPolygons as sl,cylinderPolygons as ll,conePolygons as ul,torusPolygons as cl}from"@layoutit/polycss-core";var ar=Ee({name:"PolyBox",props:{size:{type:[Number,Array],default:void 0},center:{type:Array,default:void 0},min:{type:Array,default:void 0},max:{type:Array,default:void 0},color:{type:String,default:void 0},texture:{type:String,default:void 0},material:{type:Object,default:void 0},uvs:{type:Array,default:void 0},data:{type:Object,default:void 0},faces:{type:Object,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},id:{type:String,default:void 0}},setup(e){let t=Me(()=>el({size:e.size,center:e.center,min:e.min,max:e.max,color:e.color,texture:e.texture,material:e.material,uvs:e.uvs,data:e.data,faces:e.faces}));return()=>Te(te,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),ir=Ee({name:"PolyPlane",props:{axis:{type:Number,required:!0},size:{type:Number,default:void 0},offset:{type:[Number,Array],default:void 0},along:{type:Number,default:void 0},color:{type:String,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},id:{type:String,default:void 0}},setup(e){let t=Me(()=>tl({axis:e.axis,size:e.size,offset:e.offset,along:e.along,color:e.color}));return()=>Te(te,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),sr=Ee({name:"PolyRing",props:{axis:{type:Number,required:!0},radius:{type:Number,required:!0},halfThickness:{type:Number,default:void 0},segments:{type:Number,default:void 0},color:{type:String,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},id:{type:String,default:void 0}},setup(e){let t=Me(()=>nl({axis:e.axis,radius:e.radius,halfThickness:e.halfThickness,segments:e.segments,color:e.color}));return()=>Te(te,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),lr=Ee({name:"PolyOctahedron",props:{center:{type:Array,required:!0},size:{type:Number,required:!0},color:{type:String,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},id:{type:String,default:void 0}},setup(e){let t=Me(()=>ol({center:e.center,size:e.size,color:e.color}));return()=>Te(te,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),ur=Ee({name:"PolyTetrahedron",props:{size:{type:Number,default:void 0},color:{type:String,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},id:{type:String,default:void 0}},setup(e){let t=Me(()=>al({size:e.size,color:e.color}));return()=>Te(te,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),cr=Ee({name:"PolyIcosahedron",props:{size:{type:Number,default:void 0},color:{type:String,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},id:{type:String,default:void 0}},setup(e){let t=Me(()=>il({size:e.size,color:e.color}));return()=>Te(te,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),dr=Ee({name:"PolyDodecahedron",props:{size:{type:Number,default:void 0},color:{type:String,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},id:{type:String,default:void 0}},setup(e){let t=Me(()=>sl({size:e.size,color:e.color}));return()=>Te(te,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),mr=Ee({name:"PolySphere",props:{radius:{type:Number,default:void 0},subdivisions:{type:Number,default:void 0},color:{type:String,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},id:{type:String,default:void 0}},setup(e){let t=Me(()=>rl({radius:e.radius,subdivisions:e.subdivisions,color:e.color}));return()=>Te(te,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),pr=Ee({name:"PolyCylinder",props:{radius:{type:Number,default:void 0},radiusTop:{type:Number,default:void 0},height:{type:Number,default:void 0},radialSegments:{type:Number,default:void 0},color:{type:String,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},id:{type:String,default:void 0}},setup(e){let t=Me(()=>ll({radius:e.radius,radiusTop:e.radiusTop,height:e.height,radialSegments:e.radialSegments,color:e.color}));return()=>Te(te,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),fr=Ee({name:"PolyCone",props:{radius:{type:Number,default:void 0},height:{type:Number,default:void 0},radialSegments:{type:Number,default:void 0},color:{type:String,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},id:{type:String,default:void 0}},setup(e){let t=Me(()=>ul({radius:e.radius,height:e.height,radialSegments:e.radialSegments,color:e.color}));return()=>Te(te,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),yr=Ee({name:"PolyTorus",props:{radius:{type:Number,default:void 0},tube:{type:Number,default:void 0},radialSegments:{type:Number,default:void 0},tubularSegments:{type:Number,default:void 0},color:{type:String,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},id:{type:String,default:void 0}},setup(e){let t=Me(()=>cl({radius:e.radius,tube:e.tube,radialSegments:e.radialSegments,tubularSegments:e.tubularSegments,color:e.color}));return()=>Te(te,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}});import{defineComponent as dl,inject as ml,onMounted as pl,onBeforeUnmount as fl,watch as En,ref as yl}from"vue";import{BASE_TILE as gr}from"@layoutit/polycss-core";var gl=150,hr=4,hl=513e-6,Pl=10,vl=3,Pr=16.67,xl=50,vr=.1,xr=10,br=0,Sr=5e3,bl=.3,Sl=.05;function Cl(e){return e===!0?-1:e===void 0||e===!1?1:e}function Ml(e,t,n,o,r){let a=Cl(r),i=e/hr*a,u=t/hr*a;return{rotX:n-u,rotY:((o-i)%360+360)%360}}function Cr(e,t,n,o,r){let a=Math.max(.01,n),i=Math.max(.1,Math.cos(o*Math.PI/180)),u=-e/(a*gr),s=-t/(a*gr*i),c=-r*Math.PI/180,m=Math.cos(c),p=Math.sin(c);return{dWorldX:s*m-u*p,dWorldY:s*p+u*m}}var Mr=dl({name:"PolyOrbitControls",props:{drag:{type:Boolean,default:!0},wheel:{type:Boolean,default:!0},dolly:{type:Boolean,default:!1},invert:{type:[Boolean,Number],default:!1},minZoom:{type:Number,default:vr},maxZoom:{type:Number,default:xr},minDistance:{type:Number,default:br},maxDistance:{type:Number,default:Sr},animate:{type:[Boolean,Object],default:!1}},emits:{change:e=>!0,"interaction-start":e=>!0,"interaction-end":e=>!0},setup(e,{emit:t}){let n=ml(ue,null);if(!n)return typeof console<"u"&&console.warn("[polycss] <PolyOrbitControls> must be used inside <PolyCamera>."),()=>null;let{store:o,cameraRef:r,cameraElRef:a,applyTransformDirect:i}=n,u=()=>({rotX:r.value.state.rotX,rotY:r.value.state.rotY,zoom:r.value.state.zoom,target:r.value.state.target,distance:r.value.state.distance}),s=()=>{t("change",u())},c=()=>{t("interaction-start",u())},m=()=>{t("interaction-end",u())},p=null,l={x:0,y:0},h=yl(!1),f=null,P=null,v=null;function E(){let g=a.value;if(!g)return;let L=!1,T={x:0,y:0},_=d=>{if(e.drag&&p===null&&d.isPrimary!==!1){d.preventDefault(),p=d.pointerId,l={x:d.clientX,y:d.clientY},g.style.cursor="grabbing";try{d.target.setPointerCapture(d.pointerId)}catch{}e.animate&&e.animate.pauseOnInteraction!==!1&&(h.value=!0),c()}},D=d=>{if(p===null||d.pointerId!==p||!e.drag)return;d.preventDefault();let y=d.clientX-l.x,x=d.clientY-l.y;l={x:d.clientX,y:d.clientY};let S=r.value,C=S.state;if(d.shiftKey){let{dWorldX:O,dWorldY:k}=Cr(y,x,C.zoom,C.rotX,C.rotY);S.update({target:[C.target[0]+O,C.target[1]+k,C.target[2]]})}else{let{rotX:O,rotY:k}=Ml(y,x,C.rotX,C.rotY,e.invert);S.update({rotX:O,rotY:k})}i(),o.updateCameraFromRef(S),s()},R=d=>{if(p===d.pointerId){p=null,g.style.cursor=e.drag?"grab":"";try{d.target.releasePointerCapture(d.pointerId)}catch{}h.value=!1,m()}},N=d=>{d.preventDefault()},Y=d=>{d.button===2&&(L=!0,T={x:d.clientX,y:d.clientY})},H=d=>{if(!L||!e.drag)return;let y=d.clientX-T.x,x=d.clientY-T.y;T={x:d.clientX,y:d.clientY};let S=r.value,C=S.state,{dWorldX:O,dWorldY:k}=Cr(y,x,C.zoom,C.rotX,C.rotY);S.update({target:[C.target[0]+O,C.target[1]+k,C.target[2]]}),i(),o.updateCameraFromRef(S),s()},b=d=>{d.button===2&&L&&(L=!1,m())};g.style.cursor="grab",g.style.touchAction="none",g.style.userSelect="none",g.addEventListener("pointerdown",_),g.addEventListener("pointermove",D),g.addEventListener("pointerup",R),g.addEventListener("pointercancel",R),g.addEventListener("contextmenu",N),g.addEventListener("mousedown",Y),g.addEventListener("mousemove",H),g.addEventListener("mouseup",b),f=()=>{g.removeEventListener("pointerdown",_),g.removeEventListener("pointermove",D),g.removeEventListener("pointerup",R),g.removeEventListener("pointercancel",R),g.removeEventListener("contextmenu",N),g.removeEventListener("mousedown",Y),g.removeEventListener("mousemove",H),g.removeEventListener("mouseup",b),g.style.cursor="",g.style.touchAction="",g.style.userSelect=""}}function M(){let g=a.value;if(!g)return;let L=!1,T=null,_=D=>{if(!e.wheel)return;D.preventDefault();let R=D.deltaMode===1?16:D.deltaMode===2?100:1,N=D.deltaY*R;D.ctrlKey?N*=Pl:N*=vl;let Y=r.value;if(e.dolly){let H=e.minDistance??br,b=e.maxDistance??Sr,d=Math.max(H,Math.min(b,Y.state.distance+N*Sl));Y.update({distance:d})}else{let H=Math.exp(-N*hl),b=e.minZoom??vr,d=e.maxZoom??xr,y=Math.max(b,Math.min(d,Y.state.zoom*H));Y.update({zoom:y})}i(),o.updateCameraFromRef(Y),L||(L=!0,c()),s(),T!==null&&clearTimeout(T),T=setTimeout(()=>{T=null,L=!1,m()},gl)};g.addEventListener("wheel",_,{passive:!1}),P=()=>{g.removeEventListener("wheel",_),T!==null&&clearTimeout(T)}}function A(){let g=null,L=!1,T=0,_=D=>{if(L)return;let R=e.animate;if(!R){g=requestAnimationFrame(_);return}if(h.value)T=D;else{let N=Math.min(xl,T?D-T:Pr);T=D;let H=(R.speed??bl)*(N/Pr),b=r.value,d=b.state;if(R.axis==="x"){let y=((d.rotX+H)%360+360)%360;b.update({rotX:y})}else{let y=((d.rotY+H)%360+360)%360;b.update({rotY:y})}i(),o.updateCameraFromRef(b),s()}g=requestAnimationFrame(_)};g=requestAnimationFrame(_),v=()=>{L=!0,g!==null&&cancelAnimationFrame(g),v=null}}return pl(()=>{e.drag&&E(),e.wheel&&M(),e.animate&&A()}),fl(()=>{f?.(),P?.(),v?.(),f=null,P=null}),En(()=>e.drag,g=>{g&&!f&&E(),!g&&f&&(f(),f=null)}),En(()=>e.wheel,g=>{g&&!P&&M(),!g&&P&&(P(),P=null)}),En(()=>!!e.animate,g=>{g&&!v&&A(),!g&&v&&v()}),()=>null}});import{defineComponent as El,inject as Tl,onMounted as Al,onBeforeUnmount as wl,watch as Tn,ref as Ll}from"vue";import{BASE_TILE as Er}from"@layoutit/polycss-core";var Rl=150,Tr=4,Ol=513e-6,Dl=10,kl=3,Ar=16.67,Il=50,wr=.1,Lr=10,Rr=0,Or=5e3,Fl=.3,Vl=.05;function _l(e){return e===!0?-1:e===void 0||e===!1?1:e}function Dr(e,t,n,o,r){let a=_l(r),i=e/Tr*a,u=t/Tr*a;return{rotX:n-u,rotY:((o-i)%360+360)%360}}function Bl(e,t,n,o,r){let a=Math.max(.01,n),i=Math.max(.1,Math.cos(o*Math.PI/180)),u=-e/(a*Er),s=-t/(a*Er*i),c=-r*Math.PI/180,m=Math.cos(c),p=Math.sin(c);return{dWorldX:s*m-u*p,dWorldY:s*p+u*m}}var kr=El({name:"PolyMapControls",props:{drag:{type:Boolean,default:!0},wheel:{type:Boolean,default:!0},dolly:{type:Boolean,default:!1},invert:{type:[Boolean,Number],default:!1},minZoom:{type:Number,default:wr},maxZoom:{type:Number,default:Lr},minDistance:{type:Number,default:Rr},maxDistance:{type:Number,default:Or},animate:{type:[Boolean,Object],default:!1}},emits:{change:e=>!0,"interaction-start":e=>!0,"interaction-end":e=>!0},setup(e,{emit:t}){let n=Tl(ue,null);if(!n)return typeof console<"u"&&console.warn("[polycss] <PolyMapControls> must be used inside <PolyCamera>."),()=>null;let{store:o,cameraRef:r,cameraElRef:a,applyTransformDirect:i}=n,u=()=>({rotX:r.value.state.rotX,rotY:r.value.state.rotY,zoom:r.value.state.zoom,target:r.value.state.target,distance:r.value.state.distance}),s=()=>{t("change",u())},c=()=>{t("interaction-start",u())},m=()=>{t("interaction-end",u())},p=null,l={x:0,y:0},h=Ll(!1),f=null,P=null,v=null;function E(){let g=a.value;if(!g)return;let L=!1,T={x:0,y:0},_=d=>{if(e.drag&&p===null&&d.isPrimary!==!1){d.preventDefault(),p=d.pointerId,l={x:d.clientX,y:d.clientY},g.style.cursor="grabbing";try{d.target.setPointerCapture(d.pointerId)}catch{}e.animate&&e.animate.pauseOnInteraction!==!1&&(h.value=!0),c()}},D=d=>{if(p===null||d.pointerId!==p||!e.drag)return;d.preventDefault();let y=d.clientX-l.x,x=d.clientY-l.y;l={x:d.clientX,y:d.clientY};let S=r.value,C=S.state;if(d.shiftKey){let{rotX:O,rotY:k}=Dr(y,x,C.rotX,C.rotY,e.invert);S.update({rotX:O,rotY:k})}else{let{dWorldX:O,dWorldY:k}=Bl(y,x,C.zoom,C.rotX,C.rotY);S.update({target:[C.target[0]+O,C.target[1]+k,C.target[2]]})}i(),o.updateCameraFromRef(S),s()},R=d=>{if(p===d.pointerId){p=null,g.style.cursor=e.drag?"grab":"";try{d.target.releasePointerCapture(d.pointerId)}catch{}h.value=!1,m()}},N=d=>{d.preventDefault()},Y=d=>{d.button===2&&(L=!0,T={x:d.clientX,y:d.clientY})},H=d=>{if(!L||!e.drag)return;let y=d.clientX-T.x,x=d.clientY-T.y;T={x:d.clientX,y:d.clientY};let S=r.value,C=S.state,{rotX:O,rotY:k}=Dr(y,x,C.rotX,C.rotY,e.invert);S.update({rotX:O,rotY:k}),i(),o.updateCameraFromRef(S),s()},b=d=>{d.button===2&&L&&(L=!1,m())};g.style.cursor="grab",g.style.touchAction="none",g.style.userSelect="none",g.addEventListener("pointerdown",_),g.addEventListener("pointermove",D),g.addEventListener("pointerup",R),g.addEventListener("pointercancel",R),g.addEventListener("contextmenu",N),g.addEventListener("mousedown",Y),g.addEventListener("mousemove",H),g.addEventListener("mouseup",b),f=()=>{g.removeEventListener("pointerdown",_),g.removeEventListener("pointermove",D),g.removeEventListener("pointerup",R),g.removeEventListener("pointercancel",R),g.removeEventListener("contextmenu",N),g.removeEventListener("mousedown",Y),g.removeEventListener("mousemove",H),g.removeEventListener("mouseup",b),g.style.cursor="",g.style.touchAction="",g.style.userSelect=""}}function M(){let g=a.value;if(!g)return;let L=!1,T=null,_=D=>{if(!e.wheel)return;D.preventDefault();let R=D.deltaMode===1?16:D.deltaMode===2?100:1,N=D.deltaY*R;D.ctrlKey?N*=Dl:N*=kl;let Y=r.value;if(e.dolly){let H=e.minDistance??Rr,b=e.maxDistance??Or,d=Math.max(H,Math.min(b,Y.state.distance+N*Vl));Y.update({distance:d})}else{let H=Math.exp(-N*Ol),b=e.minZoom??wr,d=e.maxZoom??Lr,y=Math.max(b,Math.min(d,Y.state.zoom*H));Y.update({zoom:y})}i(),o.updateCameraFromRef(Y),L||(L=!0,c()),s(),T!==null&&clearTimeout(T),T=setTimeout(()=>{T=null,L=!1,m()},Rl)};g.addEventListener("wheel",_,{passive:!1}),P=()=>{g.removeEventListener("wheel",_),T!==null&&clearTimeout(T)}}function A(){let g=null,L=!1,T=0,_=D=>{if(L)return;let R=e.animate;if(!R){g=requestAnimationFrame(_);return}if(h.value)T=D;else{let N=Math.min(Il,T?D-T:Ar);T=D;let H=(R.speed??Fl)*(N/Ar),b=r.value,d=b.state;if(R.axis==="x"){let y=((d.rotX+H)%360+360)%360;b.update({rotX:y})}else{let y=((d.rotY+H)%360+360)%360;b.update({rotY:y})}i(),o.updateCameraFromRef(b),s()}g=requestAnimationFrame(_)};g=requestAnimationFrame(_),v=()=>{L=!0,g!==null&&cancelAnimationFrame(g),v=null}}return Al(()=>{e.drag&&E(),e.wheel&&M(),e.animate&&A()}),wl(()=>{f?.(),P?.(),v?.(),f=null,P=null}),Tn(()=>e.drag,g=>{g&&!f&&E(),!g&&f&&(f(),f=null)}),Tn(()=>e.wheel,g=>{g&&!P&&M(),!g&&P&&(P(),P=null)}),Tn(()=>!!e.animate,g=>{g&&!v&&A(),!g&&v&&v()}),()=>null}});import{defineComponent as zl,h as $t,inject as Ir,onBeforeUnmount as Fr,onMounted as An,ref as Mt,computed as pt}from"vue";import{arrowPolygons as Hl,eulerXYZFromQuat as Nl,planePolygons as Yl,quatFromAxisAngle as $l,quatFromEulerXYZ as jl,quatMultiply as Xl,ringQuadPolygons as Ul}from"@layoutit/polycss-core";var jt="#ff3653",Xt="#8adb00",Ut="#2c8fff",Wl=.6,ql=.8,Gl=1,Oe=50,Vr=60,Zl=.6,Kl=.0125,Ql=.15,Jl=.04,eu=1,_r=.02,wn=1.04,tu=.1,nu=.25,jr=1e-4,Et={0:1,1:0,2:2},Br=[{cssAxis:0,sign:1,key:"x",color:jt},{cssAxis:0,sign:-1,key:"-x",color:jt},{cssAxis:1,sign:1,key:"y",color:Xt},{cssAxis:1,sign:-1,key:"-y",color:Xt},{cssAxis:2,sign:1,key:"z",color:Ut},{cssAxis:2,sign:-1,key:"-z",color:Ut}],zr=[{cssAxis:0,key:"x",color:jt},{cssAxis:1,key:"y",color:Xt},{cssAxis:2,key:"z",color:Ut}],Hr=[{perpAxis:2,axisA:0,axisB:1,key:"xy",color:Ut},{perpAxis:1,axisA:0,axisB:2,key:"xz",color:Xt},{perpAxis:0,axisA:1,axisB:2,key:"yz",color:jt}];function Ln(e,t){let n=/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(e);if(!n)return e;let o=parseInt(n[1],16),r=parseInt(n[2],16),a=parseInt(n[3],16);return`rgba(${o}, ${r}, ${a}, ${t})`}function Wt(e,t){return!t||t<=0?e:Math.round(e/t)*t}function ou(e){return e.replace("-","")[0]}function Rn(e,t,n,o){let r=n*Math.PI/180,a=o*Math.PI/180,i=[0,0,0];i[e]=t;let u=i[0]*Math.sin(a)+i[1]*Math.cos(a),s=i[2];return u*Math.sin(r)+s*Math.cos(r)<0}function ru(e){if(e.length===0)return Vr;let t=1/0,n=1/0,o=1/0,r=-1/0,a=-1/0,i=-1/0;for(let u of e)for(let s of u.vertices)s[0]<t&&(t=s[0]),s[0]>r&&(r=s[0]),s[1]<n&&(n=s[1]),s[1]>a&&(a=s[1]),s[2]<o&&(o=s[2]),s[2]>i&&(i=s[2]);return Number.isFinite(t)?Math.max(r-t,a-n,i-o)*Oe*Zl:Vr}function au(e){if(e.length===0)return[0,0,0];let t=1/0,n=1/0,o=1/0,r=-1/0,a=-1/0,i=-1/0;for(let u of e)for(let s of u.vertices)s[0]<t&&(t=s[0]),s[0]>r&&(r=s[0]),s[1]<n&&(n=s[1]),s[1]>a&&(a=s[1]),s[2]<o&&(o=s[2]),s[2]>i&&(i=s[2]);return Number.isFinite(t)?[(n+a)/2*Oe,(t+r)/2*Oe,(o+i)/2*Oe]:[0,0,0]}function Nr(e){let t=e.shaftLengthCss,n=[0,0,0];n[e.cssAxis]=e.sign;let o=e.wrapper.ownerDocument.createElement("div");o.style.position="absolute",o.style.left="0",o.style.top="0",o.style.width="0",o.style.height="0",o.style.transform=`translate3d(${n[0]*t}px, ${n[1]*t}px, ${n[2]*t}px)`,e.wrapper.appendChild(o);let r=e.wrapper.getBoundingClientRect(),a=o.getBoundingClientRect();e.wrapper.removeChild(o);let i=(a.left-r.left)/t,u=(a.top-r.top)/t,s=i*i+u*u;if(s<jr)return;let c=e.target.getPosition()??[0,0,0];e.onMouseDown?.(),e.onDraggingChanged?.(!0);let m=l=>{let h=l.clientX-e.startClientX,f=l.clientY-e.startClientY,P=(h*i+f*u)/s;P=Wt(P,e.translationSnap);let v=[c[0]+P*n[0],c[1]+P*n[1],c[2]+P*n[2]];e.onObjectChange?.({object:e.target,position:v}),e.onChange?.()},p=()=>{window.removeEventListener("pointermove",m),window.removeEventListener("pointerup",p),window.removeEventListener("pointercancel",p);let l=h=>{h.stopPropagation(),h.stopImmediatePropagation()};window.addEventListener("click",l,{capture:!0,once:!0}),setTimeout(()=>window.removeEventListener("click",l,!0),0),e.onMouseUp?.(),e.onDraggingChanged?.(!1)};window.addEventListener("pointermove",m),window.addEventListener("pointerup",p),window.addEventListener("pointercancel",p)}function Yr(e){let t=[0,0,0];t[e.axisA]=1;let n=[0,0,0];n[e.axisB]=1;let o=e.probeDistanceCss;function r(p){let l=e.wrapper.ownerDocument.createElement("div");l.style.position="absolute",l.style.left="0",l.style.top="0",l.style.width="0",l.style.height="0",l.style.transform=`translate3d(${p[0]*o}px, ${p[1]*o}px, ${p[2]*o}px)`,e.wrapper.appendChild(l);let h=e.wrapper.getBoundingClientRect(),f=l.getBoundingClientRect();return e.wrapper.removeChild(l),{x:(f.left-h.left)/o,y:(f.top-h.top)/o}}let a=r(t),i=r(n),u=a.x*i.y-i.x*a.y;if(Math.abs(u)<jr)return;let s=e.target.getPosition()??[0,0,0];e.onMouseDown?.(),e.onDraggingChanged?.(!0);let c=p=>{let l=p.clientX-e.startClientX,h=p.clientY-e.startClientY,f=(i.y*l-i.x*h)/u,P=(-a.y*l+a.x*h)/u;f=Wt(f,e.translationSnap),P=Wt(P,e.translationSnap);let v=[s[0]+f*t[0]+P*n[0],s[1]+f*t[1]+P*n[1],s[2]+f*t[2]+P*n[2]];e.onObjectChange?.({object:e.target,position:v}),e.onChange?.()},m=()=>{window.removeEventListener("pointermove",c),window.removeEventListener("pointerup",m),window.removeEventListener("pointercancel",m),e.onMouseUp?.(),e.onDraggingChanged?.(!1)};window.addEventListener("pointermove",c),window.addEventListener("pointerup",m),window.addEventListener("pointercancel",m)}function $r(e){let t=e.wrapper.getBoundingClientRect(),n=t.left,o=t.top,r=Math.atan2(e.startClientY-o,e.startClientX-n),a=0,i=e.target.getRotation()??[0,0,0],u=jl(i);e.onMouseDown?.(),e.onDraggingChanged?.(!0);let s=m=>{let p=Math.atan2(m.clientY-o,m.clientX-n),l=p-r;l>Math.PI?l-=2*Math.PI:l<-Math.PI&&(l+=2*Math.PI),a+=l,r=p;let h=a*180/Math.PI;h=Wt(h,e.rotationSnap);let f=[0,0,0];f[e.cssAxis]=1;let P=$l(f,h*Math.PI/180),v=Nl(Xl(P,u));e.onObjectChange?.({object:e.target,rotation:v}),e.onChange?.()},c=()=>{window.removeEventListener("pointermove",s),window.removeEventListener("pointerup",c),window.removeEventListener("pointercancel",c);let m=p=>{p.stopPropagation(),p.stopImmediatePropagation()};window.addEventListener("click",m,{capture:!0,once:!0}),setTimeout(()=>window.removeEventListener("click",m,!0),0),e.onMouseUp?.(),e.onDraggingChanged?.(!1),e.target.rebakeAtlas()};window.addEventListener("pointermove",s),window.addEventListener("pointerup",c),window.addEventListener("pointercancel",c)}function iu(e){return!!e&&typeof e=="object"&&"value"in e}function su(e){return e?iu(e)?e.value??null:e:null}var Xr=zl({name:"PolyTransformControls",props:{object:{type:null,default:null},mode:{type:String,default:"translate"},space:{type:String,default:"world"},size:{type:Number,default:1},showX:{type:Boolean,default:!0},showY:{type:Boolean,default:!0},showZ:{type:Boolean,default:!0},translationSnap:{type:Number,default:null},rotationSnap:{type:Number,default:null},enabled:{type:Boolean,default:!0}},emits:{change:()=>!0,objectChange:e=>!0,mouseDown:()=>!0,mouseUp:()=>!0,draggingChanged:e=>!0},setup(e,{emit:t}){let n=Mt(null),o=Mt(null),r=Mt(new Map),a=pt(()=>su(e.object)),i=Mt(0);An(()=>{i.value++});let u=Mt(0),s=Ir(ue,void 0),c=null;An(()=>{let d=s?.store;d&&(c=d.subscribe(()=>{u.value++}))}),Fr(()=>{c?.()});function m(){u.value;let d=s?.store.getState().cameraState;return{rotX:d?.rotX??65,rotY:d?.rotY??45}}let p=pt(()=>(i.value,ru(a.value?.getPolygons()??[]))),l=pt(()=>p.value*e.size);function h(d){return o.value===d?Gl:n.value===d?ql:Wl}function f(){t("change")}function P(d){t("objectChange",d)}function v(d){t("draggingChanged",d)}function E(){t("mouseDown")}function M(){t("mouseUp")}let A=Ir(ue,void 0),g=null;An(()=>{let d=A?.cameraElRef.value;if(!d)return;let y=x=>{let S=a.value;if(!S||!e.enabled||x.target?.closest(".polycss-transform-gizmo"))return;let O={x:e.showX,y:e.showY,z:e.showZ};if(e.mode==="translate")for(let w of Hr){let B=["x","y","z"][w.axisA],W=["x","y","z"][w.axisB];if(!O[B]||!O[W])continue;let Z=document.querySelector(`.polycss-transform-plane--${w.key}`);if(!Z||!ct(Z,x.clientX,x.clientY))continue;x.preventDefault(),x.stopPropagation();let q=Z.closest("[data-poly-transform-controls]");if(!q)return;o.value=w.key,Yr({axisA:w.axisA,axisB:w.axisB,probeDistanceCss:l.value,wrapper:q,target:S,startClientX:x.clientX,startClientY:x.clientY,translationSnap:e.translationSnap,onChange:f,onObjectChange:P,onMouseDown:E,onMouseUp:M,onDraggingChanged:j=>{j||(o.value=null),v(j)}});return}let k=e.mode==="translate"?Br:zr;for(let w of k){let B=w.key.replace("-","")[0];if(!O[B])continue;let W=document.querySelector(`.polycss-transform-${e.mode==="translate"?"arrow":"ring"}--${w.key}`);if(!W||!(e.mode==="rotate"?ct(W,x.clientX,x.clientY):ct(W,x.clientX,x.clientY)))continue;x.preventDefault(),x.stopPropagation();let q=W.closest("[data-poly-transform-controls]");if(!q)return;if(o.value=w.key,e.mode==="translate"){let j=w;Nr({cssAxis:j.cssAxis,sign:j.sign,shaftLengthCss:l.value,wrapper:q,target:S,startClientX:x.clientX,startClientY:x.clientY,translationSnap:e.translationSnap,onChange:f,onObjectChange:P,onMouseDown:E,onMouseUp:M,onDraggingChanged:ee=>{ee||(o.value=null),v(ee)}})}else $r({cssAxis:w.cssAxis,wrapper:q,target:S,startClientX:x.clientX,startClientY:x.clientY,rotationSnap:e.rotationSnap,onChange:f,onObjectChange:P,onMouseDown:E,onMouseUp:M,onDraggingChanged:j=>{j||(o.value=null),v(j)}});return}};d.addEventListener("pointerdown",y),g=()=>d.removeEventListener("pointerdown",y)}),Fr(()=>{g?.()});let L=pt(()=>{if(e.mode!=="translate")return[];i.value;let y=l.value/Oe,{rotX:x,rotY:S}=m();return Br.filter(C=>({x:e.showX,y:e.showY,z:e.showZ})[ou(C.key)]).map(C=>{let O=h(C.key),k=Rn(C.cssAxis,C.sign,x,S);return{spec:C,polygons:Hl({axis:Et[C.cssAxis],sign:C.sign,shaftLength:y,shaftHalfThickness:y*Kl,headLength:y*Ql,headHalfThickness:y*Jl,color:Ln(C.color,O),shaft:!k})}})}),T=pt(()=>{if(e.mode!=="translate")return[];i.value;let y=l.value/Oe,x={x:e.showX,y:e.showY,z:e.showZ},S=["x","y","z"],{rotX:C,rotY:O}=m(),k=y*nu;return Hr.filter(w=>x[S[w.axisA]]&&x[S[w.axisB]]).map(w=>{let B=h(w.key),W=Et[w.perpAxis],Z=(W+1)%3,q=(W+2)%3,j=Et[Z],ee=Et[q],ne=Rn(j,1,C,O)?-1:1,ie=Rn(ee,1,C,O)?-1:1;return{spec:w,polygons:Yl({axis:W,size:y*tu,offset:[ne*k,ie*k],color:Ln(w.color,B)})}})}),_=pt(()=>{if(e.mode!=="rotate")return[];i.value;let x=l.value*eu/Oe*wn;return zr.filter(S=>({x:e.showX,y:e.showY,z:e.showZ})[S.key]).map(S=>{let C=h(S.key);return{spec:S,polygons:Ul({axis:Et[S.cssAxis],outerRadius:x,color:Ln(S.color,C)})}})}),D=(1-_r)/wn,R=(1+_r)/wn;function N(d){return y=>{if(!e.enabled)return;let x=a.value;if(!x)return;y.stopPropagation();let C=y.eventObject.element?.closest("[data-poly-transform-controls]");C&&(o.value=d.key,Nr({cssAxis:d.cssAxis,sign:d.sign,shaftLengthCss:l.value,wrapper:C,target:x,startClientX:y.nativeEvent.clientX,startClientY:y.nativeEvent.clientY,translationSnap:e.translationSnap,onChange:f,onObjectChange:P,onMouseDown:E,onMouseUp:M,onDraggingChanged:O=>{O||(o.value=null),v(O)}}))}}function Y(d){return y=>{if(!e.enabled)return;let x=a.value;if(!x)return;y.stopPropagation();let C=y.eventObject.element?.closest("[data-poly-transform-controls]");C&&(o.value=d.key,Yr({axisA:d.axisA,axisB:d.axisB,probeDistanceCss:l.value,wrapper:C,target:x,startClientX:y.nativeEvent.clientX,startClientY:y.nativeEvent.clientY,translationSnap:e.translationSnap,onChange:f,onObjectChange:P,onMouseDown:E,onMouseUp:M,onDraggingChanged:O=>{O||(o.value=null),v(O)}}))}}function H(d){return y=>{if(!e.enabled)return;let x=a.value;if(!x)return;let S=y.eventObject.element;y.stopPropagation();let C=S?.closest("[data-poly-transform-controls]");C&&(o.value=d.key,$r({cssAxis:d.cssAxis,wrapper:C,target:x,startClientX:y.nativeEvent.clientX,startClientY:y.nativeEvent.clientY,rotationSnap:e.rotationSnap,onChange:f,onObjectChange:P,onMouseDown:E,onMouseUp:M,onDraggingChanged:O=>{O||(o.value=null),v(O)}}))}}function b(d){return{onPointerOver:()=>{n.value=d},onPointerOut:()=>{n.value===d&&(n.value=null)}}}return()=>{let d=a.value;if(!d)return null;let y=d.getPosition()??[0,0,0],x=au(d.getPolygons()),S=y[1]*Oe+x[0],C=y[0]*Oe+x[1],O=y[2]*Oe+x[2],k={transform:`translate3d(${S}px, ${C}px, ${O}px)`,position:"absolute",transformStyle:"preserve-3d",zIndex:1e3},w=e.mode==="translate"?[...L.value.map(({spec:B,polygons:W})=>$t(te,{key:`arrow-${B.key}`,polygons:W,class:`polycss-transform-gizmo polycss-transform-arrow polycss-transform-arrow--${B.key}`,textureLighting:"baked",onPointerDown:N(B),...b(B.key)})),...T.value.map(({spec:B,polygons:W})=>$t(te,{key:`plane-${B.key}`,polygons:W,class:`polycss-transform-gizmo polycss-transform-plane polycss-transform-plane--${B.key}`,textureLighting:"baked",onPointerDown:Y(B),...b(B.key)}))]:_.value.map(({spec:B,polygons:W})=>$t(te,{key:B.key,polygons:W,class:`polycss-transform-gizmo polycss-transform-ring polycss-transform-ring--${B.key}`,style:{"--ring-inner-ratio":D,"--ring-outer-ratio":R},textureLighting:"baked",onPointerDown:H(B),...b(B.key)}));return $t("div",{class:"polycss-transform-controls","data-poly-transform-controls":"","data-poly-mode":e.mode,"data-poly-space":e.space,style:k},w)}}});import{defineComponent as lu,inject as uu,onMounted as cu,onBeforeUnmount as du,watch as mu}from"vue";import{BASE_TILE as pu}from"@layoutit/polycss-core";var fu={enabled:!0,lookEnabled:!0,moveEnabled:!0,jumpEnabled:!0,crouchEnabled:!0,lookSensitivity:.15,invertY:!1,moveSpeed:5,jumpVelocity:7,gravity:18,eyeHeight:1.7,crouchHeight:1,groundZ:0,minPitch:5,maxPitch:175};function On(e,t){return{enabled:t.enabled??e.enabled,lookEnabled:t.lookEnabled??e.lookEnabled,moveEnabled:t.moveEnabled??e.moveEnabled,jumpEnabled:t.jumpEnabled??e.jumpEnabled,crouchEnabled:t.crouchEnabled??e.crouchEnabled,lookSensitivity:t.lookSensitivity??e.lookSensitivity,invertY:t.invertY??e.invertY,moveSpeed:t.moveSpeed??e.moveSpeed,jumpVelocity:t.jumpVelocity??e.jumpVelocity,gravity:t.gravity??e.gravity,eyeHeight:t.eyeHeight??e.eyeHeight,crouchHeight:t.crouchHeight??e.crouchHeight,groundZ:t.groundZ??e.groundZ,minPitch:t.minPitch??e.minPitch,maxPitch:t.maxPitch??e.maxPitch}}var Wr=new Set(["KeyW","ArrowUp"]),qr=new Set(["KeyS","ArrowDown"]),Gr=new Set(["KeyA","ArrowLeft"]),Zr=new Set(["KeyD","ArrowRight"]),Kr=new Set(["Space"]),Dn=new Set(["ControlLeft","ControlRight"]);function Ur(e){return Wr.has(e)||qr.has(e)||Gr.has(e)||Zr.has(e)||Kr.has(e)||Dn.has(e)}function yu(){return{change:[],start:[],end:[]}}function ft(e,t){let n=[...e[t]];for(let o of n)try{o()}catch{}}var Qr=lu({name:"PolyFirstPersonControls",props:{enabled:{type:Boolean,default:!0},lookEnabled:{type:Boolean,default:!0},moveEnabled:{type:Boolean,default:!0},jumpEnabled:{type:Boolean,default:!0},crouchEnabled:{type:Boolean,default:!0},lookSensitivity:{type:Number,default:.15},invertY:{type:Boolean,default:!1},moveSpeed:{type:Number,default:5},jumpVelocity:{type:Number,default:7},gravity:{type:Number,default:18},eyeHeight:{type:Number,default:1.7},crouchHeight:{type:Number,default:1},groundZ:{type:Number,default:0},minPitch:{type:Number,default:5},maxPitch:{type:Number,default:175}},emits:{change:e=>!0,"interaction-start":e=>!0,"interaction-end":e=>!0},setup(e,{emit:t,expose:n}){let o=uu(ue,null);if(!o)return typeof console<"u"&&console.warn("[polycss] <PolyFirstPersonControls> must be used inside <PolyCamera>."),n({}),()=>null;let{store:r,cameraRef:a,cameraElRef:i,applyTransformDirect:u}=o,s=On(fu,e),c=[0,0,0],m=null,p=0,l=!1,h=!1,f=!1,P=new Set,v=0,E=0,M=yu();function A(d,y){let x=d*Math.PI/180,S=y*Math.PI/180;return[-Math.sin(x)*Math.cos(S),-Math.sin(x)*Math.sin(S),-Math.cos(x)]}function g(){let d=i.value,y=d?getComputedStyle(d).perspective:"",x=parseFloat(y);return(Number.isFinite(x)&&x>0?x:32e3)/pu}function L(){let d=a.value.state,y=A(d.rotX??90,d.rotY??0),x=g();return[c[0]+y[0]*x,c[1]+y[1]*x,c[2]+y[2]*x]}function T(){let d=L(),y=a.value;y.update({target:d}),u(),r.updateCameraFromRef(y)}let _=.05;function D(d){if(m===null||l)return;let y=Math.min(_,p?(d-p)/1e3:.0167);if(p=d,s.enabled){let x=!1,S=a.value.state;if(s.moveEnabled){let w=0,B=0;for(let W of P)Wr.has(W)?w+=1:qr.has(W)?w-=1:Zr.has(W)?B+=1:Gr.has(W)&&(B-=1);if(w!==0||B!==0){let Z=(S.rotY??0)*Math.PI/180,q=-Math.cos(Z),j=-Math.sin(Z),ee=-Math.sin(Z),ne=Math.cos(Z),ie=Math.hypot(w,B)||1,J=s.moveSpeed*y;c[0]+=(q*w+ee*B)/ie*J,c[1]+=(j*w+ne*B)/ie*J,x=!0}}let O=s.crouchEnabled&&(P.has("ControlLeft")||P.has("ControlRight"))?s.crouchHeight:s.eyeHeight;s.jumpEnabled&&(v!==0||E>0)?(v-=s.gravity*y,E+=v*y,E<=0&&(E=0,v=0)):s.jumpEnabled||(E=0,v=0);let k=s.groundZ+O+E;if(Math.abs(c[2]-k)>1e-4&&(c[2]=k,x=!0),x){let w=L(),B=a.value;B.update({target:w}),u(),r.updateCameraFromRef(B),ft(M,"change");try{t("change",[c[0],c[1],c[2]])}catch{}}}m=requestAnimationFrame(D)}function R(){m!==null||l||(p=0,m=requestAnimationFrame(D))}function N(){m!==null&&(cancelAnimationFrame(m),m=null)}let Y=null;function H(){let d=i.value;if(!d)return;let y=d.ownerDocument??document,x=y.defaultView??globalThis,S=()=>{if(!(!s.enabled||!s.lookEnabled||l||h))try{d.requestPointerLock()}catch{}},C=()=>{let j=y.pointerLockElement===d;if(j!==h){if(h=j,j){f=!0,ft(M,"start");try{t("interaction-start",[c[0],c[1],c[2]])}catch{}}else if(f){f=!1,ft(M,"end");try{t("interaction-end",[c[0],c[1],c[2]])}catch{}}}},O=j=>{if(!h||l||!s.enabled||!s.lookEnabled)return;let ee=j.movementX??0,ne=j.movementY??0;if(ee===0&&ne===0)return;let ie=a.value,J=ie.state,F=s.lookSensitivity,U=s.invertY?-1:1,$=(((J.rotY??0)-ee*F)%360+360)%360,V=(J.rotX??90)-ne*F*U;V<s.minPitch?V=s.minPitch:V>s.maxPitch&&(V=s.maxPitch);let X=A(V,$),G=g(),se=[c[0]+X[0]*G,c[1]+X[1]*G,c[2]+X[2]*G];ie.update({rotX:V,rotY:$,target:se}),u(),r.updateCameraFromRef(ie),ft(M,"change");try{t("change",[c[0],c[1],c[2]])}catch{}},k=j=>{if(!(!s.enabled||l)&&Ur(j.code)&&!(!h&&!s.moveEnabled)){if(Kr.has(j.code)){if(!s.jumpEnabled)return;j.preventDefault(),!P.has(j.code)&&v===0&&E===0&&(v=s.jumpVelocity),P.add(j.code);return}Dn.has(j.code)&&!s.crouchEnabled||!s.moveEnabled&&!Dn.has(j.code)||(j.preventDefault(),P.add(j.code))}},w=j=>{Ur(j.code)&&P.delete(j.code)},B=()=>{P.clear()};d.addEventListener("click",S),y.addEventListener("pointerlockchange",C),y.addEventListener("mousemove",O),x.addEventListener("keydown",k),x.addEventListener("keyup",w),x.addEventListener("blur",B);let W=x.getComputedStyle(d).perspective,Z=parseFloat(W),q=Number.isFinite(Z)&&Z>0?Z:2e3;d.style.setProperty("--polycss-fpv-perspective",`${q}px`),d.classList.add("polycss-fpv-host"),Y=()=>{if(d.removeEventListener("click",S),y.removeEventListener("pointerlockchange",C),y.removeEventListener("mousemove",O),x.removeEventListener("keydown",k),x.removeEventListener("keyup",w),x.removeEventListener("blur",B),d.style.cursor="",d.classList.remove("polycss-fpv-host"),d.style.removeProperty("--polycss-fpv-perspective"),P.clear(),h)try{y.exitPointerLock()}catch{}}}n({update(d){s=On(s,d);let y=i.value;y&&!l&&(y.style.cursor=s.lookEnabled?"crosshair":"")},resume(){if(!l)return;l=!1;let d=i.value;d&&(d.style.cursor=s.lookEnabled?"crosshair":""),R()},pause(){if(l)return;l=!0,N();let d=i.value;if(d&&(d.style.cursor=""),f){f=!1,ft(M,"end");try{t("interaction-end",[c[0],c[1],c[2]])}catch{}}},destroy(){l=!0,N()},lock(){if(!s.enabled||!s.lookEnabled||l)return;let d=i.value;try{d?.requestPointerLock()}catch{}},unlock(){if(h){let d=i.value;try{d?.ownerDocument?.exitPointerLock()}catch{}}},isLocked(){return h},getOrigin(){return[c[0],c[1],c[2]]},setOrigin(d){c[0]=d[0],c[1]=d[1],c[2]=d[2],T(),ft(M,"change");try{t("change",[c[0],c[1],c[2]])}catch{}},addEventListener(d,y){let x=M[d];x.includes(y)||x.push(y)},removeEventListener(d,y){let x=M[d],S=x.indexOf(y);S>=0&&x.splice(S,1)},hasEventListener(d,y){return M[d].includes(y)}}),cu(()=>{let d=i.value;if(!d)return;l=!1,h=!1,f=!1,P.clear(),v=0,E=0;let x=a.value.state.target??[0,0,0];c[0]=x[0],c[1]=x[1],c[2]=s.groundZ+s.eyeHeight,T(),d.style.cursor=s.lookEnabled?"crosshair":"",H(),R()}),du(()=>{l=!0,N(),Y?.(),Y=null});let b=["enabled","lookEnabled","moveEnabled","jumpEnabled","crouchEnabled","lookSensitivity","invertY","moveSpeed","jumpVelocity","gravity","eyeHeight","crouchHeight","groundZ","minPitch","maxPitch"];for(let d of b)mu(()=>e[d],()=>{s=On(s,e);let y=i.value;y&&!l&&(y.style.cursor=s.lookEnabled?"crosshair":"")});return()=>null}});import{defineComponent as gu,h as hu,inject as kn,onBeforeUnmount as Pu,onMounted as vu,provide as xu,reactive as bu,ref as Su,computed as Cu}from"vue";var Tt=Symbol("polycss.selection"),Jr=gu({name:"PolySelect",props:{multiple:{type:Boolean,default:!1},clearOnMiss:{type:Boolean,default:!0},filter:{type:Function,default:void 0}},emits:{change:e=>!0,pointerMissed:e=>!0},setup(e,{emit:t,slots:n}){let o=bu({selected:[]}),r=Cu(()=>o.selected);function a(m){let p=e.filter?e.filter(m):m;o.selected=p,t("change",p)}let i={get selected(){return o.selected},set:m=>a(m),add:m=>{e.multiple?o.selected.includes(m)||a([...o.selected,m]):a([m])},remove:m=>{o.selected.includes(m)&&a(o.selected.filter(p=>p!==m))},toggle:m=>{o.selected.includes(m)?a(o.selected.filter(p=>p!==m)):e.multiple?a([...o.selected,m]):a([m])},clear:()=>a([]),has:m=>o.selected.includes(m)};xu(Tt,{selected:r,api:i});let u=kn(ue,void 0),s=(m,p)=>Cn(m,p,l=>!l.closest("[data-poly-transform-controls]")),c=null;return vu(()=>{let m=u?.cameraElRef.value;if(!m)return;let p=l=>{if(l.target?.closest("[data-poly-transform-controls]"))return;let f=ut(l.target)??s(l.clientX,l.clientY);if(!f){t("pointerMissed",l),e.clearOnMiss&&a([]);return}e.multiple&&(l.shiftKey||l.metaKey||l.ctrlKey)?i.toggle(f):o.selected.length===1&&o.selected[0]===f?a([]):a([f])};m.addEventListener("click",p),c=()=>m.removeEventListener("click",p)}),Pu(()=>{c?.()}),()=>hu("div",{style:{display:"contents"},"data-poly-select":""},n.default?.())}});function ea(){let e=kn(Tt,void 0);return e?e.selected:Su([])}function ta(){let e=kn(Tt,void 0);if(!e)throw new Error("polycss: usePolySelectionApi must be used inside <PolySelect>.");return e.api}import{defineComponent as Mu,h as Eu,computed as Tu}from"vue";import{axesHelperPolygons as Au}from"@layoutit/polycss-core";var na=Mu({name:"PolyAxesHelper",props:{size:{type:Number,default:void 0},thickness:{type:Number,default:void 0},negative:{type:Boolean,default:void 0},xColor:{type:String,default:void 0},yColor:{type:String,default:void 0},zColor:{type:String,default:void 0}},setup(e){let t=Tu(()=>Au({size:e.size,thickness:e.thickness,negative:e.negative,xColor:e.xColor,yColor:e.yColor,zColor:e.zColor}));return()=>Eu(te,{polygons:t.value,merge:!1})}});import{defineComponent as wu,h as Lu,computed as In}from"vue";import{octahedronPolygons as Ru}from"@layoutit/polycss-core";var oa=wu({name:"PolyDirectionalLightHelper",props:{light:{type:Object,required:!0},target:{type:Array,default:void 0},distance:{type:Number,default:5},size:{type:Number,default:.35},color:{type:String,default:void 0}},setup(e){let t=In(()=>e.color??e.light.color??"#ffd54a"),n=In(()=>Ru({center:[0,0,0],size:e.size,color:t.value})),o=In(()=>{let r=e.light.direction,a=r[0],i=r[1],u=r[2],s=Math.hypot(a,i,u)||1,c=e.target?.[0]??0,m=e.target?.[1]??0,p=e.target?.[2]??0;return[c+a/s*e.distance,m+i/s*e.distance,p+u/s*e.distance]});return()=>Lu(te,{polygons:n.value,position:o.value,merge:!1})}});var Fn={quad:0,clippedSolid:0,atlas:0,stableTriangle:0},Ou={polygonCount:0,mountedPolygonLeafCount:0,shadowLeafCount:0,surfaceLeafCounts:Fn,bucketCount:0};function Du(e){return typeof e=="number"?{polygonCount:e}:e??{}}function yt(e,t){return e.querySelectorAll(t).length}function ku(e,t){let n=e;return typeof n.matches=="function"&&n.matches(t)}function Iu(e,t){if(!t)return[e];let n=[];return ku(e,t)&&n.push(e),n.push(...Array.from(e.querySelectorAll(t))),n}function Fu(e,t){let n=Du(t);if(!e)return{...Ou,surfaceLeafCounts:{...Fn},polygonCount:n.polygonCount??0};let o=Iu(e,n.scopeSelector),r={...Fn},a=0,i=0;for(let s of o)r.quad+=yt(s,"b"),r.clippedSolid+=yt(s,"i"),r.atlas+=yt(s,"s"),r.stableTriangle+=yt(s,"u"),a+=yt(s,"q, .polycss-shadow-svg"),i+=yt(s,".polycss-bucket");let u=r.quad+r.clippedSolid+r.atlas+r.stableTriangle;return{polygonCount:n.polygonCount??u,mountedPolygonLeafCount:u,shadowLeafCount:a,surfaceLeafCounts:r,bucketCount:i}}import{ref as ra,watch as Vu,onUnmounted as _u,computed as qt}from"vue";import{createPolyAnimationMixer as Bu}from"@layoutit/polycss-core";function tt(e){return e&&typeof e=="object"&&"value"in e?e.value:e}function zu(e,t,n){let o=ra(null),r=null,a=null,i=null,u=ra(0);function s(){return n==null?o.value:tt(n)??o.value}function c(){a!==null&&(cancelAnimationFrame(a),a=null),i=null}function m(){c(),r&&(r.stopAllAction(),r.uncacheRoot(),r=null,u.value++)}function p(){if(a!==null)return;function M(A){if(i===null){i=A,a=requestAnimationFrame(M);return}let g=(A-i)/1e3;i=A,r?.update(g),a=requestAnimationFrame(M)}a=requestAnimationFrame(M)}function l(){m();let M=tt(e),A=tt(t);if(!M||M.length===0||!A)return;let g=s();g&&(r=Bu(g,A),u.value++,p())}let h=Vu(()=>{let M=tt(e),A=tt(t),g=n!=null?tt(n):o.value;return{c:M,ctrl:A,r:g}},()=>l(),{immediate:!0,deep:!1});_u(()=>{h(),m()});let f=qt(()=>tt(e)??[]),P=qt(()=>f.value.map(M=>M.name)),v=qt(()=>(u.value,r)),E=qt(()=>{u.value;let M=f.value,A={};for(let g of M)Object.defineProperty(A,g.name,{enumerable:!0,get(){if(!r)return null;try{return r.clipAction(g.name)}catch{return null}}});return A});return{ref:o,mixer:v,clips:f,names:P,actions:E}}import{CAMERA_BACKFACE_CULL_EPS as Bp,VOXEL_CAMERA_CULL_AXIS_EPS as zp,VOXEL_CAMERA_CULL_NORMAL_LIMIT as Hp,normalizePolygons as Np,mergePolygons as Yp,coverPlanarPolygons as $p,optimizeMeshPolygons as jp,optimizeMeshParseResult as Xp,simplifyTriangleMeshPolygons as Up,repairMeshSeams as Wp,seamFacetSplitPolygons as qp,seamFacetSplitReport as Gp,seamOverlapDiagnostics as Zp,seamOverlapPolygons as Kp,seamOverlapReport as Qp,cullInteriorPolygons as Jp,cameraCullNormalGroups as ef,cameraCullNormalGroupsFromPolygons as tf,cameraCullNormalKey as nf,cameraCullVisibleSignature as of,cameraFacingDepth as rf,isAxisAlignedSurfaceNormal as af,isVoxelCameraCullableNormalGroups as sf,normalFacesCamera as lf,polygonCssSurfaceNormal as uf,polygonFacesCamera as cf,parseObj as df,parseMtl as mf,parseGltf as pf,parseStl as ff,bakeSolidTextureSamples as yf,bakeSolidTextureSampledPolygons as gf,loadMesh as hf,createIsometricCamera as Pf,parseVox as vf,polygonFaces as xf,computeTexturePaintMetrics as bf,computeShapeLighting as Sf,parseColor as Cf,parsePureColor as Mf,parseHexColor as Ef,parseRgbColor as Tf,formatColor as Af,clampChannel as wf,shadeColor as Lf,rotateVec3 as Rf,inverseRotateVec3 as Of,axesHelperPolygons as Df,boxPolygons as kf,arrowPolygons as If,ringPolygons as Ff,octahedronPolygons as Vf,tetrahedronPolygons as _f,icosahedronPolygons as Bf,dodecahedronPolygons as zf,cylinderPolygons as Hf,conePolygons as Nf,torusPolygons as Yf,planePolygons as $f,buildSceneContext as jf,computeSceneBbox as Xf,BASE_TILE as Uf,DEFAULT_CAMERA_STATE as Wf,DEFAULT_PROJECTION as qf,normalizeInvertMultiplier as Gf,createPolyAnimationMixer as Zf,optimizeAnimatedMeshPolygons as Kf,DEFAULT_SEAM_FACET_SPLIT_OPTIONS as Qf,DEFAULT_SEAM_OVERLAP_OPTIONS as Jf,LoopOnce as ey,LoopRepeat as ty,LoopPingPong as ny}from"@layoutit/polycss-core";export{Uf as BASE_TILE,Bp as CAMERA_BACKFACE_CULL_EPS,Wf as DEFAULT_CAMERA_STATE,qf as DEFAULT_PROJECTION,Qf as DEFAULT_SEAM_FACET_SPLIT_OPTIONS,Jf as DEFAULT_SEAM_OVERLAP_OPTIONS,ey as LoopOnce,ny as LoopPingPong,ty as LoopRepeat,rr as Poly,na as PolyAxesHelper,ar as PolyBox,ht as PolyCamera,ue as PolyCameraContextKey,fr as PolyCone,pr as PolyCylinder,oa as PolyDirectionalLightHelper,dr as PolyDodecahedron,Qr as PolyFirstPersonControls,tr as PolyGround,cr as PolyIcosahedron,er as PolyIframe,kr as PolyMapControls,te as PolyMesh,lr as PolyOctahedron,Mr as PolyOrbitControls,ht as PolyOrthographicCamera,zn as PolyPerspectiveCamera,ir as PolyPlane,sr as PolyRing,Oo as PolyScene,Jr as PolySelect,Tt as PolySelectionContextKey,mr as PolySphere,ur as PolyTetrahedron,yr as PolyTorus,Xr as PolyTransformControls,zp as VOXEL_CAMERA_CULL_AXIS_EPS,Hp as VOXEL_CAMERA_CULL_NORMAL_LIMIT,If as arrowPolygons,Df as axesHelperPolygons,gf as bakeSolidTextureSampledPolygons,yf as bakeSolidTextureSamples,kf as boxPolygons,jf as buildSceneContext,ef as cameraCullNormalGroups,tf as cameraCullNormalGroupsFromPolygons,nf as cameraCullNormalKey,of as cameraCullVisibleSignature,rf as cameraFacingDepth,wf as clampChannel,Fu as collectPolyRenderStats,Xf as computeSceneBbox,Sf as computeShapeLighting,bf as computeTexturePaintMetrics,Nf as conePolygons,$p as coverPlanarPolygons,Pf as createIsometricCamera,Zf as createPolyAnimationMixer,Jp as cullInteriorPolygons,Hf as cylinderPolygons,zf as dodecahedronPolygons,Cn as findMeshUnderPoint,ut as findPolyMeshHandle,Af as formatColor,Bf as icosahedronPolygons,At as injectPolyBaseStyles,Of as inverseRotateVec3,af as isAxisAlignedSurfaceNormal,sf as isVoxelCameraCullableNormalGroups,hf as loadMesh,Yp as mergePolygons,lf as normalFacesCamera,Gf as normalizeInvertMultiplier,Np as normalizePolygons,Vf as octahedronPolygons,Kf as optimizeAnimatedMeshPolygons,Xp as optimizeMeshParseResult,jp as optimizeMeshPolygons,Cf as parseColor,pf as parseGltf,Ef as parseHexColor,mf as parseMtl,df as parseObj,Mf as parsePureColor,Tf as parseRgbColor,ff as parseStl,vf as parseVox,$f as planePolygons,ct as pointInMeshElement,uf as polygonCssSurfaceNormal,xf as polygonFaces,cf as polygonFacesCamera,Wp as repairMeshSeams,Ff as ringPolygons,Rf as rotateVec3,qp as seamFacetSplitPolygons,Gp as seamFacetSplitReport,Zp as seamOverlapDiagnostics,Kp as seamOverlapPolygons,Qp as seamOverlapReport,Lf as shadeColor,Up as simplifyTriangleMeshPolygons,_f as tetrahedronPolygons,Yf as torusPolygons,zu as usePolyAnimation,rt as usePolyCamera,Gs as usePolyMaterial,Ht as usePolyMesh,Pt as usePolySceneContext,ea as usePolySelect,ta as usePolySelectionApi};