@layoutit/polycss-vue 0.0.1 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +155 -144
- package/dist/index.cjs +208 -18
- package/dist/index.d.cts +1487 -134
- package/dist/index.d.ts +1487 -134
- package/dist/index.js +208 -18
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var Jt=Object.defineProperty;var Qr=Object.getOwnPropertyDescriptor;var Jr=Object.getOwnPropertyNames;var ea=Object.prototype.hasOwnProperty;var ta=(e,t)=>{for(var n in t)Jt(e,n,{get:t[n],enumerable:!0})},na=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of Jr(t))!ea.call(e,r)&&r!==n&&Jt(e,r,{get:()=>t[r],enumerable:!(o=Qr(t,r))||o.enumerable});return e};var oa=e=>na(Jt({},"__esModule",{value:!0}),e);var Gi={};ta(Gi,{BASE_TILE:()=>x.BASE_TILE,CAMERA_BACKFACE_CULL_EPS:()=>x.CAMERA_BACKFACE_CULL_EPS,DEFAULT_CAMERA_STATE:()=>x.DEFAULT_CAMERA_STATE,DEFAULT_PROJECTION:()=>x.DEFAULT_PROJECTION,DEFAULT_SEAM_FACET_SPLIT_OPTIONS:()=>x.DEFAULT_SEAM_FACET_SPLIT_OPTIONS,DEFAULT_SEAM_OVERLAP_OPTIONS:()=>x.DEFAULT_SEAM_OVERLAP_OPTIONS,LoopOnce:()=>x.LoopOnce,LoopPingPong:()=>x.LoopPingPong,LoopRepeat:()=>x.LoopRepeat,Poly:()=>Mn,PolyAxesHelper:()=>Kn,PolyBox:()=>Tn,PolyCamera:()=>ct,PolyCameraContextKey:()=>ie,PolyCone:()=>Fn,PolyCylinder:()=>In,PolyDirectionalLightHelper:()=>Jn,PolyDodecahedron:()=>On,PolyFirstPersonControls:()=>Wn,PolyGround:()=>Cn,PolyIcosahedron:()=>Dn,PolyMapControls:()=>Hn,PolyMesh:()=>ae,PolyOctahedron:()=>wn,PolyOrbitControls:()=>Bn,PolyOrthographicCamera:()=>ct,PolyPerspectiveCamera:()=>tn,PolyPlane:()=>An,PolyRing:()=>Ln,PolyScene:()=>hn,PolySelect:()=>qn,PolySelectionContextKey:()=>gt,PolySphere:()=>kn,PolyTetrahedron:()=>Rn,PolyTorus:()=>Vn,PolyTransformControls:()=>jn,VOXEL_CAMERA_CULL_AXIS_EPS:()=>x.VOXEL_CAMERA_CULL_AXIS_EPS,VOXEL_CAMERA_CULL_NORMAL_LIMIT:()=>x.VOXEL_CAMERA_CULL_NORMAL_LIMIT,arrowPolygons:()=>x.arrowPolygons,axesHelperPolygons:()=>x.axesHelperPolygons,bakeSolidTextureSampledPolygons:()=>x.bakeSolidTextureSampledPolygons,bakeSolidTextureSamples:()=>x.bakeSolidTextureSamples,boxPolygons:()=>x.boxPolygons,buildSceneContext:()=>x.buildSceneContext,cameraCullNormalGroups:()=>x.cameraCullNormalGroups,cameraCullNormalGroupsFromPolygons:()=>x.cameraCullNormalGroupsFromPolygons,cameraCullNormalKey:()=>x.cameraCullNormalKey,cameraCullVisibleSignature:()=>x.cameraCullVisibleSignature,cameraFacingDepth:()=>x.cameraFacingDepth,clampChannel:()=>x.clampChannel,collectPolyRenderStats:()=>Hr,computeSceneBbox:()=>x.computeSceneBbox,computeShapeLighting:()=>x.computeShapeLighting,computeTexturePaintMetrics:()=>x.computeTexturePaintMetrics,conePolygons:()=>x.conePolygons,coverPlanarPolygons:()=>x.coverPlanarPolygons,createIsometricCamera:()=>x.createIsometricCamera,createPolyAnimationMixer:()=>x.createPolyAnimationMixer,cullInteriorPolygons:()=>x.cullInteriorPolygons,cylinderPolygons:()=>x.cylinderPolygons,dodecahedronPolygons:()=>x.dodecahedronPolygons,findMeshUnderPoint:()=>Bt,findPolyMeshHandle:()=>it,formatColor:()=>x.formatColor,icosahedronPolygons:()=>x.icosahedronPolygons,injectPolyBaseStyles:()=>St,inverseRotateVec3:()=>x.inverseRotateVec3,isAxisAlignedSurfaceNormal:()=>x.isAxisAlignedSurfaceNormal,isVoxelCameraCullableNormalGroups:()=>x.isVoxelCameraCullableNormalGroups,loadMesh:()=>x.loadMesh,mergePolygons:()=>x.mergePolygons,normalFacesCamera:()=>x.normalFacesCamera,normalizeInvertMultiplier:()=>x.normalizeInvertMultiplier,normalizePolygons:()=>x.normalizePolygons,octahedronPolygons:()=>x.octahedronPolygons,optimizeAnimatedMeshPolygons:()=>x.optimizeAnimatedMeshPolygons,optimizeMeshPolygons:()=>x.optimizeMeshPolygons,parseColor:()=>x.parseColor,parseGltf:()=>x.parseGltf,parseHexColor:()=>x.parseHexColor,parseMtl:()=>x.parseMtl,parseObj:()=>x.parseObj,parsePureColor:()=>x.parsePureColor,parseRgbColor:()=>x.parseRgbColor,parseVox:()=>x.parseVox,planePolygons:()=>x.planePolygons,pointInMeshElement:()=>lt,polygonCssSurfaceNormal:()=>x.polygonCssSurfaceNormal,polygonFaces:()=>x.polygonFaces,polygonFacesCamera:()=>x.polygonFacesCamera,repairMeshSeams:()=>x.repairMeshSeams,ringPolygons:()=>x.ringPolygons,rotateVec3:()=>x.rotateVec3,seamFacetSplitPolygons:()=>x.seamFacetSplitPolygons,seamFacetSplitReport:()=>x.seamFacetSplitReport,seamOverlapDiagnostics:()=>x.seamOverlapDiagnostics,seamOverlapPolygons:()=>x.seamOverlapPolygons,seamOverlapReport:()=>x.seamOverlapReport,shadeColor:()=>x.shadeColor,tetrahedronPolygons:()=>x.tetrahedronPolygons,torusPolygons:()=>x.torusPolygons,usePolyAnimation:()=>Yr,usePolyCamera:()=>qe,usePolyMaterial:()=>lr,usePolyMesh:()=>Mt,usePolySceneContext:()=>vt,usePolySelect:()=>Gn,usePolySelectionApi:()=>Zn});module.exports=oa(Gi);var Ye=require("vue");var Ne=require("vue"),wt=require("@layoutit/polycss-core");function en(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 qe(e){let t=(0,wt.createIsometricCamera)({zoom:e.value.zoom,target:e.value.target,rotX:e.value.rotX,rotY:e.value.rotY,distance:e.value.distance}),n=(0,Ne.shallowRef)(t),o=(0,Ne.ref)(null),r=(0,Ne.ref)(null),i=(0,Ne.ref)([0,0,0]),a=en(t.state);(0,Ne.watch)(()=>({zoom:e.value.zoom,target:e.value.target,rotX:e.value.rotX,rotY:e.value.rotY,distance:e.value.distance}),(l,c)=>{let m={};l.zoom!==void 0&&l.zoom!==c?.zoom&&(m.zoom=l.zoom),l.target!==void 0&&l.target!==c?.target&&(m.target=l.target),l.rotX!==void 0&&l.rotX!==c?.rotX&&(m.rotX=l.rotX),l.rotY!==void 0&&l.rotY!==c?.rotY&&(m.rotY=l.rotY),l.distance!==void 0&&l.distance!==c?.distance&&(m.distance=l.distance),Object.keys(m).length>0&&(t.update(m),u(),a.updateCameraFromRef(t),a.notifyAll())});function u(){let l=o.value;if(!l)return;let c=t.state,m=wt.BASE_TILE,f=i.value,d=c.target[0]+f[0],h=c.target[1]+f[1],p=c.target[2]+f[2],P=h*m,b=d*m,A=p*m,L=c.distance!==0?`translateZ(${-c.distance}px) `:"";l.style.transform=`${L}scale(${c.zoom}) rotateX(${c.rotX}deg) rotate(${c.rotY}deg) translate3d(${-P}px, ${-b}px, ${-A}px)`}return{store:a,cameraRef:n,sceneElRef:o,cameraElRef:r,autoCenterOffset:i,applyTransformDirect:u}}var ie=Symbol("polycss-camera");var ct=(0,Ye.defineComponent)({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=(0,Ye.computed)(()=>({zoom:e.zoom,target:e.target,rotX:e.rotX,rotY:e.rotY,distance:e.distance})),{store:o,cameraRef:r,sceneElRef:i,cameraElRef:a,autoCenterOffset:u,applyTransformDirect:l}=qe(n);return(0,Ye.provide)(ie,{store:o,cameraRef:r,sceneElRef:i,cameraElRef:a,autoCenterOffset:u,applyTransformDirect:l}),()=>(0,Ye.h)("div",{ref:a,class:`polycss-camera${e.class?` ${e.class}`:""}`,style:{perspective:"none"}},t.default?.())}});var Xe=require("vue");var ra=8e3,tn=(0,Xe.defineComponent)({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=(0,Xe.computed)(()=>({zoom:e.zoom,target:e.target,rotX:e.rotX,rotY:e.rotY,distance:e.distance})),{store:o,cameraRef:r,sceneElRef:i,cameraElRef:a,autoCenterOffset:u,applyTransformDirect:l}=qe(n);return(0,Xe.provide)(ie,{store:o,cameraRef:r,sceneElRef:i,cameraElRef:a,autoCenterOffset:u,applyTransformDirect:l}),()=>{let c=`${typeof e.perspective=="number"?e.perspective:ra}px`;return(0,Xe.h)("div",{ref:a,class:`polycss-camera${e.class?` ${e.class}`:""}`,style:{perspective:c}},t.default?.())}}});var W=require("vue"),mt=require("@layoutit/polycss-core");var ao=require("vue"),Rt=require("@layoutit/polycss-core");function vt(e,t){return(0,ao.computed)(()=>{let{directionalLight:n}=t.value,o=(0,Rt.buildSceneContext)({polygons:e.value});return{polygons:(0,Rt.mergePolygons)(o.context.polygons),sceneBbox:o.context.sceneBbox}})}var io="polycss-styles";function St(e=typeof document<"u"?document:null){if(!e||e.getElementById(io))return;let t=e.createElement("style");t.id=io,t.textContent=aa,e.head.appendChild(t)}var aa=`
|
|
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,12 +16,13 @@
|
|
|
16
16
|
height: 0;
|
|
17
17
|
transform-style: preserve-3d;
|
|
18
18
|
perspective: none;
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
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;
|
|
25
26
|
}
|
|
26
27
|
|
|
27
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 */
|
|
@@ -44,6 +45,22 @@
|
|
|
44
45
|
position: absolute;
|
|
45
46
|
}
|
|
46
47
|
|
|
48
|
+
/* \u2500\u2500 First-person controls perspective context \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
|
|
49
|
+
|
|
50
|
+
/* PolyFirstPersonControls toggles this class on its host element (the camera
|
|
51
|
+
wrapper). FPV needs a real perspective context so scene Z translation
|
|
52
|
+
produces visible depth motion - without it, walking forward looks like a
|
|
53
|
+
planar pan. The class wins over inline perspective styles (e.g.
|
|
54
|
+
PolyOrthographicCamera's perspective: none) via !important. The actual
|
|
55
|
+
perspective value is set inline by the controls as the
|
|
56
|
+
--polycss-fpv-perspective custom property; the default of 2000px matches
|
|
57
|
+
the controls' lookOffset fallback so the FPV math and visual perspective
|
|
58
|
+
stay in sync. */
|
|
59
|
+
.polycss-fpv-host {
|
|
60
|
+
perspective: var(--polycss-fpv-perspective, 2000px) !important;
|
|
61
|
+
transform-style: preserve-3d !important;
|
|
62
|
+
}
|
|
63
|
+
|
|
47
64
|
/* \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 */
|
|
48
65
|
|
|
49
66
|
/*
|
|
@@ -71,24 +88,77 @@
|
|
|
71
88
|
background-repeat: no-repeat;
|
|
72
89
|
}
|
|
73
90
|
|
|
91
|
+
.polycss-scene b,
|
|
92
|
+
.polycss-scene i,
|
|
93
|
+
.polycss-scene u {
|
|
94
|
+
color: var(--polycss-paint, currentColor);
|
|
95
|
+
}
|
|
96
|
+
|
|
74
97
|
.polycss-scene b {
|
|
98
|
+
background: currentColor;
|
|
99
|
+
width: 64px;
|
|
100
|
+
height: 64px;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
.polycss-mesh.polycss-voxel-mesh > .polycss-voxel-face {
|
|
104
|
+
position: absolute;
|
|
105
|
+
display: block;
|
|
106
|
+
top: 0;
|
|
107
|
+
left: 0;
|
|
108
|
+
width: 0;
|
|
109
|
+
height: 0;
|
|
110
|
+
transform-style: preserve-3d;
|
|
111
|
+
transform-origin: 0 0;
|
|
112
|
+
margin: 0;
|
|
113
|
+
padding: 0;
|
|
114
|
+
font: inherit;
|
|
115
|
+
line-height: 0;
|
|
116
|
+
pointer-events: none;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
.polycss-mesh.polycss-voxel-mesh > .polycss-voxel-face > b {
|
|
120
|
+
top: 0;
|
|
121
|
+
left: 0;
|
|
122
|
+
width: var(--polycss-voxel-primitive, 1px);
|
|
123
|
+
height: var(--polycss-voxel-primitive, 1px);
|
|
124
|
+
backface-visibility: visible;
|
|
125
|
+
pointer-events: none;
|
|
75
126
|
}
|
|
76
127
|
|
|
77
128
|
.polycss-scene i {
|
|
78
|
-
|
|
79
|
-
|
|
129
|
+
width: 16px;
|
|
130
|
+
height: 16px;
|
|
80
131
|
border-color: currentColor;
|
|
81
132
|
}
|
|
82
133
|
|
|
83
134
|
.polycss-scene s {
|
|
135
|
+
width: var(--polycss-atlas-size, 64px);
|
|
136
|
+
height: var(--polycss-atlas-size, 64px);
|
|
84
137
|
}
|
|
85
138
|
|
|
86
139
|
.polycss-scene u {
|
|
87
|
-
width:
|
|
88
|
-
height:
|
|
140
|
+
width: 0;
|
|
141
|
+
height: 0;
|
|
89
142
|
background: transparent;
|
|
90
143
|
box-sizing: content-box;
|
|
91
144
|
border: 0 solid transparent;
|
|
145
|
+
border-color: transparent transparent currentColor transparent;
|
|
146
|
+
border-width: 0 16px 32px 16px;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
.polycss-scene u.polycss-large-border-triangle {
|
|
150
|
+
border-width: 0 48px 96px 48px;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
.polycss-scene u.polycss-corner-triangle {
|
|
154
|
+
width: 32px;
|
|
155
|
+
height: 32px;
|
|
156
|
+
background: currentColor;
|
|
157
|
+
border: 0;
|
|
158
|
+
border-top-left-radius: 50% 100%;
|
|
159
|
+
border-top-right-radius: 50% 100%;
|
|
160
|
+
corner-top-left-shape: bevel;
|
|
161
|
+
corner-top-right-shape: bevel;
|
|
92
162
|
}
|
|
93
163
|
|
|
94
164
|
/* \u2500\u2500 Dynamic lighting cascade vars (scene root \u2192 polygons) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
|
|
@@ -108,6 +178,21 @@
|
|
|
108
178
|
@property --plx { syntax: "<number>"; inherits: true; initial-value: 0; }
|
|
109
179
|
@property --ply { syntax: "<number>"; inherits: true; initial-value: 0; }
|
|
110
180
|
@property --plz { syntax: "<number>"; inherits: true; initial-value: 1; }
|
|
181
|
+
|
|
182
|
+
/* CSS-space light components (world-Y\u2192cssX, world-X\u2192cssY, world-Z\u2192cssZ).
|
|
183
|
+
Used by the shadow projection matrix. --clz is clamped away from 0 in JS
|
|
184
|
+
to avoid divide-by-zero when the light is near-horizontal. */
|
|
185
|
+
@property --clx { syntax: "<number>"; inherits: true; initial-value: 0.01; }
|
|
186
|
+
@property --cly { syntax: "<number>"; inherits: true; initial-value: 0; }
|
|
187
|
+
@property --clz { syntax: "<number>"; inherits: true; initial-value: 1; }
|
|
188
|
+
|
|
189
|
+
/* Ground-plane position in CSS pixels along the CSS-Z axis (= world-Z, the
|
|
190
|
+
up axis in PolyCSS's world convention). Stored as a <number> so it can be
|
|
191
|
+
used directly inside matrix3d() calc() expressions (matrix3d requires
|
|
192
|
+
dimensionless entries \u2014 no px units).
|
|
193
|
+
Set from the min world-Z of casting meshes. */
|
|
194
|
+
@property --shadow-ground-cssz { syntax: "<number>"; inherits: true; initial-value: 0; }
|
|
195
|
+
|
|
111
196
|
@property --plr { syntax: "<number>"; inherits: true; initial-value: 1; }
|
|
112
197
|
@property --plg { syntax: "<number>"; inherits: true; initial-value: 1; }
|
|
113
198
|
@property --plb { syntax: "<number>"; inherits: true; initial-value: 1; }
|
|
@@ -117,14 +202,14 @@
|
|
|
117
202
|
@property --pab { syntax: "<number>"; inherits: true; initial-value: 1; }
|
|
118
203
|
@property --pai { syntax: "<number>"; inherits: true; initial-value: 0.4; }
|
|
119
204
|
|
|
120
|
-
/* Per-polygon surface normal \u2014 set inline by the renderer.
|
|
121
|
-
|
|
205
|
+
/* Per-polygon surface normal \u2014 set inline by the renderer. Base RGB channels
|
|
206
|
+
may be hoisted to a mesh wrapper, so they inherit unless overridden inline. */
|
|
122
207
|
@property --pnx { syntax: "<number>"; inherits: false; initial-value: 0; }
|
|
123
208
|
@property --pny { syntax: "<number>"; inherits: false; initial-value: 0; }
|
|
124
209
|
@property --pnz { syntax: "<number>"; inherits: false; initial-value: 1; }
|
|
125
|
-
@property --psr { syntax: "<number>"; inherits:
|
|
126
|
-
@property --psg { syntax: "<number>"; inherits:
|
|
127
|
-
@property --psb { syntax: "<number>"; inherits:
|
|
210
|
+
@property --psr { syntax: "<number>"; inherits: true; initial-value: 1; }
|
|
211
|
+
@property --psg { syntax: "<number>"; inherits: true; initial-value: 1; }
|
|
212
|
+
@property --psb { syntax: "<number>"; inherits: true; initial-value: 1; }
|
|
128
213
|
|
|
129
214
|
/* Calc-driven Lambert + tint, scoped to dynamic-lighting scenes. Lives
|
|
130
215
|
here (not inline per polygon) so each leaf only carries its tiny normal
|
|
@@ -148,10 +233,24 @@
|
|
|
148
233
|
var(--pnz) * var(--plz))))
|
|
149
234
|
);
|
|
150
235
|
background-blend-mode: multiply;
|
|
236
|
+
background-image: var(--polycss-atlas-url);
|
|
237
|
+
background-position: var(--polycss-atlas-position);
|
|
238
|
+
background-repeat: no-repeat;
|
|
239
|
+
background-size: var(--polycss-atlas-image-size);
|
|
240
|
+
mask-image: var(--polycss-atlas-url);
|
|
241
|
+
mask-mode: alpha;
|
|
242
|
+
mask-position: var(--polycss-atlas-position);
|
|
243
|
+
mask-repeat: no-repeat;
|
|
244
|
+
mask-size: var(--polycss-atlas-image-size);
|
|
245
|
+
-webkit-mask-image: var(--polycss-atlas-url);
|
|
246
|
+
-webkit-mask-position: var(--polycss-atlas-position);
|
|
247
|
+
-webkit-mask-repeat: no-repeat;
|
|
248
|
+
-webkit-mask-size: var(--polycss-atlas-image-size);
|
|
151
249
|
}
|
|
152
250
|
|
|
251
|
+
.polycss-scene[data-polycss-lighting="dynamic"] b,
|
|
153
252
|
.polycss-scene[data-polycss-lighting="dynamic"] u {
|
|
154
|
-
|
|
253
|
+
color: rgb(
|
|
155
254
|
calc(255 * var(--psr) * (var(--par) * var(--pai)
|
|
156
255
|
+ var(--plr) * var(--pli) * max(0,
|
|
157
256
|
var(--pnx) * var(--plx) +
|
|
@@ -169,4 +268,95 @@
|
|
|
169
268
|
var(--pnz) * var(--plz))))
|
|
170
269
|
);
|
|
171
270
|
}
|
|
172
|
-
`;var Tn=require("@layoutit/polycss-core");var Mt=require("vue"),ze=Symbol("polycss/scene-context");function At(){return(0,Mt.inject)(ze,null)}var F=require("vue"),Ln=50,wn=[.4,-.7,.59],Rn="#ffffff",On=1,Hn="#ffffff",Dn=.4,de=4096,Et=1,kn=.1,In=1,Tt=de*de,_n=Tt*3,Fe=2048,je=16*1024*1024,Vn=.995,K=.001,$n=.75,Lt=3,Un=2,Me=1e-9,Xn=.45,ue=new Map;function Yn(e){let t=ue.get(e);return t||(t=new Promise((r,o)=>{let n=new Image;n.decoding="async",n.onload=()=>r(n),n.onerror=()=>o(new Error(`texture load failed: ${e}`)),n.src=e}),ue.set(e,t),t.then(()=>{ue.get(e)===t&&ue.delete(e)},()=>{ue.get(e)===t&&ue.delete(e)})),t}function Ie(e){let t=typeof e=="string"?Number(e):e;return t===void 0||!Number.isFinite(t)?1:Math.min(In,Math.max(kn,t))}function We(e,t){let r=e.toFixed(t).replace(/\.?0+$/,"");return Object.is(Number(r),-0)?"0":r}function Be(e,t=Lt){return`matrix3d(${e.split(",").map(r=>{let o=Number(r.trim());return Number.isFinite(o)?We(o,t):r.trim()}).join(",")})`}function De(e,t=Un){return`${We(e,t)}%`}function wt(e){return e.reduce((t,r)=>t+r.width*r.height,0)}function zn(e){let t=wt(e);if(t<=0)return 1;let r=Math.max(1,...e.map(a=>Math.max(a.width,a.height))),o=Fe/r,n=Math.sqrt(je/(t*4));return Ie(Math.min(o,n))}function Nn(e){let t=wt(e),r=.5;return t<=Tt?r=1:t<=_n&&(r=.75),Ie(Math.min(r,zn(e)))}function Fn(e,t){return e.reduce((r,o)=>Math.max(r,Math.ceil(o.width*t),Math.ceil(o.height*t)),0)}function jn(e,t){return e.reduce((r,o)=>r+Math.ceil(o.width*t)*Math.ceil(o.height*t)*4,0)}function Bn(e,t){let r=Fn(e,t),o=jn(e,t),n=r>Fe?Fe/r:1,a=o>je?Math.sqrt(je/o):1;return Math.min(n,a)}function Wn(e,t){let r=Nn(t.pages),o=r===1?t:ke(e,r);for(let n=0;n<4;n++){let a=Bn(o.pages,r);if(a>=1)break;let i=Ie(r*a*Vn);if(i>=r)break;r=i,o=ke(e,r)}return{packed:o,atlasScale:r}}function Zn(e,t){if(t!==void 0&&t!=="auto"){let o=Ie(t);return{packed:ke(e,o),atlasScale:o}}let r=ke(e,1);return Wn(e,r)}function Gn(e){return Math.max(Et,Math.ceil(Et/e))}function te(e,t,r=1,o=0,n=0,a=1,i=0,m=0){e.setTransform(r*t,o*t,n*t,a*t,i*t,m*t)}function fe(e){let t=e.startsWith("#")?e.slice(1):e;return t.length!==6?{r:255,g:255,b:255}:{r:parseInt(t.slice(0,2),16),g:parseInt(t.slice(2,4),16),b:parseInt(t.slice(4,6),16)}}function Rt(e){if(e.screenPts.length!==8)return!1;let t=[],r=[],o=(n,a)=>{for(let i of n)if(Math.abs(i-a)<=K)return;n.push(a)};for(let n=0;n<e.screenPts.length;n+=2)o(t,e.screenPts[n]),o(r,e.screenPts[n+1]);if(t.length!==2||r.length!==2||(t.sort((n,a)=>n-a),r.sort((n,a)=>n-a),Math.abs(t[0])>K||Math.abs(r[0])>K||t[1]-t[0]<=K||r[1]-r[0]<=K))return!1;for(let n=0;n<e.screenPts.length;n+=2){let a=e.screenPts[n],i=e.screenPts[n+1],m=Math.abs(a-t[0])<=K||Math.abs(a-t[1])<=K,s=Math.abs(i-r[0])<=K||Math.abs(i-r[1])<=K;if(!m||!s)return!1}return!0}function ne(e){return!e.texture&&e.polygon.vertices.length===3}function Kn(){if(!!!globalThis.CSS?.supports?.("border-shape","polygon(0 0, 100% 0, 0 100%) polygon(50% 50%, 50% 50%, 50% 50%)"))return!1;let t=globalThis.matchMedia;return typeof t!="function"?!0:t("(pointer: fine)").matches&&t("(hover: hover)").matches}function qn(e){let t=[],r=e.canvasW||1,o=e.canvasH||1;for(let n=0;n<e.screenPts.length;n+=2){let a=Math.max(0,Math.min(100,e.screenPts[n]/r*100)),i=Math.max(0,Math.min(100,e.screenPts[n+1]/o*100));t.push(`${De(a)} ${De(i)}`)}return`polygon(${t.join(", ")})`}function Jn(e){let t=0,r=0,o=Math.max(1,e.screenPts.length/2);for(let s=0;s<e.screenPts.length;s+=2)t+=e.screenPts[s],r+=e.screenPts[s+1];let n=e.canvasW||1,a=e.canvasH||1,i=De(Math.max(0,Math.min(100,t/o/n*100))),m=De(Math.max(0,Math.min(100,r/o/a*100)));return`polygon(${Array.from({length:o},()=>`${i} ${m}`).join(", ")})`}function Qn(e){return`${qn(e)} ${Jn(e)}`}function eo(e,t=Lt){return e.map(r=>We(r,t)).join(",")}function to(e,t,r){return e.map(o=>[o[1]*t,o[0]*t,o[2]*r])}function no(e){if(e.length<3)return null;let t=e[0],r=e[1],o=e[2],n=[r[0]-t[0],r[1]-t[1],r[2]-t[2]],a=[o[0]-t[0],o[1]-t[1],o[2]-t[2]],i=[-(n[1]*a[2]-n[2]*a[1]),-(n[2]*a[0]-n[0]*a[2]),-(n[0]*a[1]-n[1]*a[0])],m=Math.hypot(i[0],i[1],i[2]);return m<=Me?null:[i[0]/m,i[1]/m,i[2]/m]}function Ne(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function oo(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 ro(e,t,r){if(!ne(e))return null;let o=to(e.polygon.vertices,e.tileSize,e.layerElevation),n=no(o);if(!n)return null;let a=[{a:0,b:1,c:2},{a:1,b:2,c:0},{a:2,b:0,c:1}].map(V=>{let k=o[V.a],b=o[V.b];return{...V,length:Math.hypot(b[0]-k[0],b[1]-k[1],b[2]-k[2])}}).sort((V,k)=>k.length-V.length),i=a[0].a,m=a[0].b,s=a[0].c,l=o[i],c=o[m],u=o[s],y=a[0].length;if(y<=Me)return null;let f=[(c[0]-l[0])/y,(c[1]-l[1])/y,(c[2]-l[2])/y],g=[u[0]-l[0],u[1]-l[1],u[2]-l[2]],v=Ne(g,f),C=[l[0]+f[0]*v,l[1]+f[1]*v,l[2]+f[2]*v],O=[C[0]-u[0],C[1]-u[1],C[2]-u[2]],D=Math.hypot(O[0],O[1],O[2]);if(D<=Me)return null;let H=[O[0]/D,O[1]/D,O[2]/D];if(Ne(oo(f,H),n)<0){let V=m;if(m=i,i=V,l=o[i],c=o[m],y=Math.hypot(c[0]-l[0],c[1]-l[1],c[2]-l[2]),y<=Me)return null;f=[(c[0]-l[0])/y,(c[1]-l[1])/y,(c[2]-l[2])/y];let k=[u[0]-l[0],u[1]-l[1],u[2]-l[2]];v=Ne(k,f),C=[l[0]+f[0]*v,l[1]+f[1]*v,l[2]+f[2]*v],O=[C[0]-u[0],C[1]-u[1],C[2]-u[2]];let b=Math.hypot(O[0],O[1],O[2]);if(b<=Me)return null;H=[O[0]/b,O[1]/b,O[2]/b]}let d=Math.max(0,Math.min(y,v)),M=Math.max(0,y-d),p=Xn,E=d+p,P=M+p,S=D+p*2,A=u[0]-E*f[0]-p*H[0],T=u[1]-E*f[1]-p*H[1],R=u[2]-E*f[2]-p*H[2],w=eo([f[0],f[1],f[2],0,H[0],H[1],H[2],0,n[0],n[1],n[2],0,A,T,R,1]),h=t==="dynamic",I=fe(e.polygon.color??"#cccccc");return{transform:`matrix3d(${w})`,borderWidth:`0 ${P}px ${S}px ${E}px`,borderBottomColor:h?void 0:e.shadedColor,pointerEvents:r==="none"?"none":void 0,...h?{"--pnx":n[0].toFixed(4),"--pny":n[1].toFixed(4),"--pnz":n[2].toFixed(4),"--psr":(I.r/255).toFixed(4),"--psg":(I.g/255).toFixed(4),"--psb":(I.b/255).toFixed(4)}:null}}function ao({r:e,g:t,b:r}){let o=n=>Math.round(Math.max(0,Math.min(255,n))).toString(16).padStart(2,"0");return`#${o(e)}${o(t)}${o(r)}`}function lo(e,t,r,o,n){let a=fe(e),i=fe(r),m=fe(o),s=m.r/255*n+i.r/255*t,l=m.g/255*n+i.g/255*t,c=m.b/255*n+i.b/255*t;return ao({r:a.r*s,g:a.g*l,b:a.b*c})}function io(e,t,r,o){let n=fe(t),a=fe(r);return{r:a.r/255*o+n.r/255*e,g:a.g/255*o+n.g/255*e,b:a.b/255*o+n.b/255*e}}function so({r:e,g:t,b:r}){let o=n=>Math.round(Math.max(0,Math.min(1,n))*255);return`rgb(${o(e)} ${o(t)} ${o(r)})`}function co(e,t,r,o,n,a,i){Math.abs(a.r-1)<.001&&Math.abs(a.g-1)<.001&&Math.abs(a.b-1)<.001||(e.save(),te(e,i),e.globalCompositeOperation="multiply",e.fillStyle=so(a),e.fillRect(t,r,o,n),e.restore())}function uo(e,t,r,o,n,a,i){let m=t.naturalWidth||t.width||1,s=t.naturalHeight||t.height||1,l=Math.max(n/m,a/s),c=m*l,u=s*l;te(e,i),e.drawImage(t,r+(n-c)/2,o+(a-u)/2,c,u)}function Ot(e,t){if(e.length<3||t.length<3)return null;let[r,o,n]=e,[a,i,m]=t,s=r[0],l=r[1],c=o[0],u=o[1],y=n[0],f=n[1],g=a[0],v=1-a[1],C=i[0],O=1-i[1],D=m[0],H=1-m[1],d=C-g,M=O-v,p=D-g,E=H-v,P=d*E-p*M;if(Math.abs(P)<=1e-9)return null;let S=c-s,A=y-s,T=u-l,R=f-l,w={a:(S*E-A*M)/P,b:(d*A-p*S)/P,c:(T*E-R*M)/P,d:(d*R-p*T)/P,e:0,f:0};return w.e=s-w.a*g-w.b*v,w.f=l-w.c*g-w.d*v,w}function Ht(e){if(e.length===0)return null;let t=1/0,r=1/0,o=-1/0,n=-1/0;for(let a of e){let i=a[0],m=1-a[1];if(!Number.isFinite(i)||!Number.isFinite(m))return null;t=Math.min(t,i),o=Math.max(o,i),r=Math.min(r,m),n=Math.max(n,m)}return{minU:t,minV:r,maxU:o,maxV:n}}function mo(e,t,r,o,n,a,i,m){let s=e.vertices.map(u=>{let y=[u[1]*t,u[0]*t,u[2]*r],f=y[0]-o[0],g=y[1]-o[1],v=y[2]-o[2];return[f*n[0]+g*n[1]+v*n[2]+i,f*a[0]+g*a[1]+v*a[2]+m]}),l=Ot(s,e.uvs),c=Ht(e.uvs);return!l&&!c?null:{screenPts:s.flatMap(([u,y])=>[u,y]),uvAffine:l,uvSampleRect:c}}function fo(e,t){if(e.length<6||t<=0)return e;let r=0,o=0,n=e.length/2;for(let i=0;i<e.length;i+=2)r+=e[i],o+=e[i+1];r/=n,o/=n;let a=e.slice();for(let i=0;i<a.length;i+=2){let m=a[i]-r,s=a[i+1]-o,l=Math.hypot(m,s);l<=K||(a[i]+=m/l*t,a[i+1]+=s/l*t)}return a}function me(e,t){return Math.max(0,Math.min(t,e))}function St(e,t,r,o,n,a,i,m){let s=t.naturalWidth||t.width||1,l=t.naturalHeight||t.height||1,c=me(Math.min(r.minU,r.maxU)*s,s),u=me(Math.max(r.minU,r.maxU)*s,s),y=me(Math.min(r.minV,r.maxV)*l,l),f=me(Math.max(r.minV,r.maxV)*l,l),g=Math.floor(c),v=Math.floor(y),C=Math.ceil(u)-g,O=Math.ceil(f)-v;C<1&&(g=Math.floor(me((r.minU+r.maxU)/2*s,s-1)),C=1),O<1&&(v=Math.floor(me((r.minV+r.maxV)/2*l,l-1)),O=1),g=Math.max(0,Math.min(s-1,g)),v=Math.max(0,Math.min(l-1,v)),C=Math.max(1,Math.min(s-g,C)),O=Math.max(1,Math.min(l-v,O)),te(e,m),e.drawImage(t,g,v,C,O,o,n,a,i)}function yo(e){if(typeof e.toBlob=="function")return new Promise(t=>{e.toBlob(r=>{t(r?URL.createObjectURL(r):null)},"image/png")});try{return Promise.resolve(e.toDataURL("image/png"))}catch{return Promise.resolve(null)}}function ye(e,t,r={}){let{vertices:o,texture:n,uvs:a}=e;if(!o||o.length<3)return null;let i=r.tileSize??Ln,m=r.layerElevation??i,s=Y=>[Y[1]*i,Y[0]*i,Y[2]*m],l=o.map(s),c=l[0],u=l[1],y=l[2],f=[u[0]-c[0],u[1]-c[1],u[2]-c[2]],g=[y[0]-c[0],y[1]-c[1],y[2]-c[2]],v=Math.hypot(f[0],f[1],f[2]);if(v===0)return null;let C=[f[0]/v,f[1]/v,f[2]/v],O=-(f[1]*g[2]-f[2]*g[1]),D=-(f[2]*g[0]-f[0]*g[2]),H=-(f[0]*g[1]-f[1]*g[0]),d=Math.hypot(O,D,H);if(d===0)return null;O/=d,D/=d,H/=d;let M=[D*C[2]-H*C[1],H*C[0]-O*C[2],O*C[1]-D*C[0]],p=l.map(Y=>{let G=Y[0]-c[0],Le=Y[1]-c[1],we=Y[2]-c[2];return[G*C[0]+Le*C[1]+we*C[2],G*M[0]+Le*M[1]+we*M[2]]}),E=1/0,P=1/0,S=-1/0,A=-1/0;for(let[Y,G]of p)Y<E&&(E=Y),Y>S&&(S=Y),G<P&&(P=G),G>A&&(A=G);let T=-E,R=-P,w=S-E,h=A-P;if(!Number.isFinite(w)||!Number.isFinite(h))return null;let I=[];for(let Y=0;Y<p.length;Y++){let[G,Le]=p[Y],we=G+T,Pn=Le+R;I.push(we,Pn)}let V=c[0]-T*C[0]-R*M[0],k=c[1]-T*C[1]-R*M[1],b=c[2]-T*C[2]-R*M[2],L=[C[0],C[1],C[2],0,M[0],M[1],M[2],0,O,D,H,0,V,k,b,1].join(","),U=r.directionalLight,yt=r.ambientLight,se=U?.direction??wn,pt=U?.color??Rn,mn=Math.max(0,U?.intensity??On),gt=yt?.color??Hn,ht=Math.max(0,yt?.intensity??Dn),$e=Math.hypot(se[0],se[1],se[2])||1,dn=se[0]/$e,fn=se[1]/$e,yn=se[2]/$e,Pt=mn*Math.max(0,O*dn+D*fn+H*yn),pn=io(Pt,pt,gt,ht),gn=lo(e.color??"#cccccc",Pt,pt,gt,ht),vt=null,xt=null;n&&a&&a.length>=3&&a.length===o.length&&(xt=Ht(a),vt=Ot(p.map(([Y,G])=>[Y+T,G+R]),a));let hn=n&&e.textureTriangles?.length?e.textureTriangles.map(Y=>mo(Y,i,m,c,C,M,T,R)).filter(Y=>!!Y):null;return{index:t,polygon:e,texture:n,tileSize:i,layerElevation:m,matrix:L,canvasW:Math.max(1,Math.ceil(w)),canvasH:Math.max(1,Math.ceil(h)),screenPts:I,uvAffine:vt,uvSampleRect:xt,textureTriangles:hn,normal:[O,D,H],textureTint:pn,shadedColor:gn}}function ke(e,t=1){let r=Array(e.length).fill(null),o=[],n=Gn(t),a=e.filter(s=>!!s).sort((s,l)=>l.canvasH-s.canvasH||l.canvasW-s.canvasW||s.index-l.index),i=()=>({width:n,height:n,entries:[],shelves:[]}),m=(s,l,c)=>{if(s.sealed)return null;for(let f of s.shelves)if(l.canvasH<=f.height&&f.x+l.canvasW+n<=de){let g={...l,pageIndex:c,x:f.x,y:f.y};return f.x+=l.canvasW+n,s.entries.push(g),s.width=Math.max(s.width,g.x+l.canvasW+n),g}let u=s.shelves.length===0?n:s.height;if(u+l.canvasH+n>de)return null;let y={...l,pageIndex:c,x:n,y:u};return s.shelves.push({x:n+l.canvasW+n,y:u,height:l.canvasH}),s.entries.push(y),s.width=Math.max(s.width,y.x+l.canvasW+n),s.height=Math.max(s.height,u+l.canvasH+n),y};for(let s of a){if(s.canvasW+n*2>de||s.canvasH+n*2>de){let u=o.length,y={...s,pageIndex:u,x:n,y:n};r[s.index]=y,o.push({width:s.canvasW+n*2,height:s.canvasH+n*2,entries:[y],shelves:[],sealed:!0});continue}let c=null;for(let u=0;u<o.length&&(c=m(o[u],s,u),!c);u++);if(!c){let u=i(),y=o.length;o.push(u),c=m(u,s,y)}c&&(r[s.index]=c)}return{entries:r,pages:o.map(({width:s,height:l,entries:c})=>({width:s,height:l,entries:c}))}}async function po(e,t,r,o){let n=r.createElement("canvas");n.width=Math.max(1,Math.ceil(e.width*o)),n.height=Math.max(1,Math.ceil(e.height*o));let a=n.getContext("2d");if(!a)return{width:e.width,height:e.height,url:null};let i=Array.from(new Set(e.entries.flatMap(l=>l.texture?[l.texture]:[]))),m=new Map;await Promise.all(i.map(async l=>{m.set(l,await Yn(l))}));for(let l of e.entries){let c=l.texture?m.get(l.texture):null;a.save(),te(a,o),a.beginPath();for(let u=0;u<l.screenPts.length;u+=2){let y=l.x+l.screenPts[u],f=l.y+l.screenPts[u+1];u===0?a.moveTo(y,f):a.lineTo(y,f)}if(a.closePath(),a.clip(),!l.texture)te(a,o),a.fillStyle=t==="dynamic"?l.polygon.color??"#cccccc":l.shadedColor,a.fillRect(l.x,l.y,l.canvasW,l.canvasH);else if(c&&l.textureTriangles?.length){let u=c.naturalWidth||c.width||1,y=c.naturalHeight||c.height||1;for(let f of l.textureTriangles){let g=fo(f.screenPts,$n);a.save(),te(a,o),a.beginPath();for(let v=0;v<g.length;v+=2){let C=l.x+g[v],O=l.y+g[v+1];v===0?a.moveTo(C,O):a.lineTo(C,O)}a.closePath(),a.clip(),f.uvAffine?(te(a,o,f.uvAffine.a/u,f.uvAffine.c/u,f.uvAffine.b/y,f.uvAffine.d/y,l.x+f.uvAffine.e,l.y+f.uvAffine.f),a.drawImage(c,0,0)):f.uvSampleRect&&St(a,c,f.uvSampleRect,l.x,l.y,l.canvasW,l.canvasH,o),a.restore()}}else if(c&&l.uvAffine){let u=c.naturalWidth||c.width||1,y=c.naturalHeight||c.height||1;te(a,o,l.uvAffine.a/u,l.uvAffine.c/u,l.uvAffine.b/y,l.uvAffine.d/y,l.x+l.uvAffine.e,l.y+l.uvAffine.f),a.drawImage(c,0,0)}else c&&l.uvSampleRect?St(a,c,l.uvSampleRect,l.x,l.y,l.canvasW,l.canvasH,o):c&&uo(a,c,l.x,l.y,l.canvasW,l.canvasH,o);l.texture&&t==="baked"&&co(a,l.x,l.y,l.canvasW,l.canvasH,l.textureTint,o),a.restore()}let s=await yo(n);return n.width=1,n.height=1,{width:e.width,height:e.height,url:s}}async function go(e,t,r,o,n){let a=[];for(let i of e){if(n())break;a.push(await po(i,t,r,o))}return a}function He(e){for(let t of e)URL.revokeObjectURL(t)}function pe(e,t,r=(0,F.computed)(()=>{})){let o=(0,F.computed)(()=>t.value!=="dynamic"&&Kn()),n=(0,F.computed)(()=>{let m=e.value.map(s=>!s||s.texture?s:ne(s)||t.value!=="dynamic"&&(o.value||Rt(s))?null:s);return Zn(m,r.value)}),a=(0,F.ref)(n.value.packed.pages.map(m=>({width:m.width,height:m.height,url:null}))),i=[];return(0,F.watch)(()=>[n.value,t.value],([m,s],l,c)=>{let{packed:u,atlasScale:y}=m,f=!1;He(i),i=[],a.value=u.pages.map(g=>({width:g.width,height:g.height,url:null})),c(()=>{f=!0,He(i),i=[]}),!(u.pages.length===0||typeof document>"u")&&go(u.pages,s,document,y,()=>f).then(g=>{if(f){He(g.flatMap(v=>v.url?.startsWith("blob:")?[v.url]:[]));return}i=g.flatMap(v=>v.url?.startsWith("blob:")?[v.url]:[]),a.value=g}).catch(()=>{f||(a.value=u.pages.map(g=>({width:g.width,height:g.height,url:null})))})},{immediate:!0}),(0,F.onBeforeUnmount)(()=>{He(i),i=[]}),{entries:(0,F.computed)(()=>n.value.packed.entries),pages:a,ready:(0,F.computed)(()=>a.value.length===0||a.value.every(m=>!!m.url))}}function ge({entry:e,page:t,textureLighting:r,className:o,style:n,domAttrs:a,pointerEvents:i="auto"}){let m=r==="dynamic",s=m&&t?.url?`url(${t.url})`:void 0,l=!m&&t?.url?`url(${t.url}) -${e.x}px -${e.y}px / ${t.width}px ${t.height}px no-repeat`:void 0,c={width:`${e.canvasW}px`,height:`${e.canvasH}px`,transform:Be(e.matrix),background:l,backgroundImage:m&&t?.url?`url(${t.url})`:void 0,backgroundPosition:m?`-${e.x}px -${e.y}px`:void 0,backgroundSize:m&&t?`${t.width}px ${t.height}px`:void 0,...m?{"--pnx":e.normal[0].toFixed(4),"--pny":e.normal[1].toFixed(4),"--pnz":e.normal[2].toFixed(4)}:null,...m&&s?{maskImage:s,maskMode:"alpha",maskPosition:`-${e.x}px -${e.y}px`,maskSize:t?`${t.width}px ${t.height}px`:void 0,maskRepeat:"no-repeat",WebkitMaskImage:s,WebkitMaskPosition:`-${e.x}px -${e.y}px`,WebkitMaskSize:t?`${t.width}px ${t.height}px`:void 0,WebkitMaskRepeat:"no-repeat"}:null,opacity:t?.url?void 0:0,pointerEvents:i==="none"?"none":void 0,...n},u=e.polygon.data?Object.fromEntries(Object.entries(e.polygon.data).map(([f,g])=>[`data-${f}`,String(g)])):{},y=o?.trim()||void 0;return(0,F.h)("s",{class:y,style:c,...u,...a})}function he({entry:e,className:t,style:r,domAttrs:o,pointerEvents:n="auto"}){let a=Rt(e),i=a?null:Qn(e),m=a?{width:`${e.canvasW}px`,height:`${e.canvasH}px`,transform:Be(e.matrix),background:e.shadedColor,pointerEvents:n==="none"?"none":void 0,...r}:{width:`${e.canvasW}px`,height:`${e.canvasH}px`,transform:Be(e.matrix),color:e.shadedColor,pointerEvents:n==="none"?"none":void 0,...r},s=e.polygon.data?Object.fromEntries(Object.entries(e.polygon.data).map(([u,y])=>[`data-${u}`,String(y)])):{},l=t?.trim()||void 0,c=u=>{let y=u.el;y&&(i?y.style.setProperty("border-shape",i):y.style.removeProperty("border-shape"))};return(0,F.h)(a?"b":"i",{class:l,style:m,...s,...o,onVnodeMounted:c,onVnodeUpdated:c})}function Pe({entry:e,textureLighting:t,className:r,style:o,domAttrs:n,pointerEvents:a="auto"}){let i=ro(e,t,a);if(!i)return null;let m=e.polygon.data?Object.fromEntries(Object.entries(e.polygon.data).map(([l,c])=>[`data-${l}`,String(c)])):{},s=r?.trim()||void 0;return(0,F.h)("u",{class:s,style:{...i,...o},...m,...n})}var Ze=(0,_.defineComponent)({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"},atlasScale:{type:[Number,String],default:void 0},autoCenter:{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},debugShowLabels:{type:Boolean},debugShowBackfaces:{type:Boolean}},setup(e,{slots:t,attrs:r}){let o=(0,_.inject)(N);if(!o)throw new Error("polycss: PolyScene must be used inside a PolyCamera.");let{store:n,sceneElRef:a}=o,i=(0,_.computed)(()=>({textureLighting:e.textureLighting??"baked",directionalLight:e.directionalLight,ambientLight:e.ambientLight}));(0,_.provide)(ze,i);let m=n.getState().cameraState,s=(0,_.ref)(null);(0,_.watch)(s,M=>{a.value=M});let l=!1;(0,_.onMounted)(()=>{l||typeof document<"u"&&(Ce(document),l=!0)}),(0,_.watch)(()=>e.debugShowBackfaces,M=>{let p=s.value;p&&p.classList.toggle("polycss-debug-show-backfaces",!!M)});let c=(0,_.computed)(()=>e.polygons??[]),u=(0,_.computed)(()=>({directionalLight:e.directionalLight})),y=be(c,u),f=(0,_.computed)(()=>({"--scene-transform":(0,Ae.createIsometricCamera)(m).getStyle().transform})),g=(0,_.computed)(()=>({tileSize:50,layerElevation:50,directionalLight:e.directionalLight,textureLighting:e.textureLighting,atlasScale:e.atlasScale})),v=(0,_.computed)(()=>{let M=e.textureLighting==="dynamic",p=M?void 0:e.directionalLight,E=M?void 0:e.ambientLight;return y.value.polygons.map((P,S)=>ye(P,S,{tileSize:g.value.tileSize,layerElevation:g.value.layerElevation,directionalLight:p,ambientLight:E}))}),C=(0,_.computed)(()=>e.textureLighting??"baked"),O=(0,_.computed)(()=>e.atlasScale),D=pe(v,C,O),H=(0,_.computed)(()=>{if(e.textureLighting!=="dynamic")return null;let M=e.directionalLight?.direction??[.4,-.7,.59],p=Math.hypot(M[0],M[1],M[2])||1,E=M[0]/p,P=M[1]/p,S=M[2]/p,A=(0,Ae.parseHexColor)(e.directionalLight?.color??"#ffffff")?.rgb??[255,255,255],T=(0,Ae.parseHexColor)(e.ambientLight?.color??"#ffffff")?.rgb??[255,255,255],R=e.directionalLight?.intensity??1,w=e.ambientLight?.intensity??.4,h=I=>(I/255).toFixed(4);return{"--plx":E.toFixed(4),"--ply":P.toFixed(4),"--plz":S.toFixed(4),"--plr":h(A[0]),"--plg":h(A[1]),"--plb":h(A[2]),"--pli":R.toFixed(4),"--par":h(T[0]),"--pag":h(T[1]),"--pab":h(T[2]),"--pai":w.toFixed(4)}}),d=(0,_.computed)(()=>{if(!e.autoCenter)return;let M=y.value.sceneBbox,p=g.value,E=(M.min[1]+M.max[1])/2*p.tileSize,P=(M.min[0]+M.max[0])/2*p.tileSize,S=(M.min[2]+M.max[2])/2*p.layerElevation;return`translate3d(${-E}px, ${-P}px, ${-S}px)`});return(0,_.onBeforeUnmount)(()=>{}),()=>{let M=`polycss-scene${e.class?` ${e.class}`:""}`,p=g.value,E=D.entries.value.map((A,T)=>{if(A)return ge({entry:A,page:D.pages.value[A.pageIndex],textureLighting:p.textureLighting??"baked"});let R=v.value[T];return!R||R.texture?null:ne(R)?Pe({entry:R,textureLighting:p.textureLighting??"baked"}):he({entry:R})}),P=t.default?.()??[],S=d.value?[(0,_.h)("div",{class:"polycss-offset",style:{"--offset-transform":d.value}},[...E,...P])]:[...E,...P];return(0,_.h)("div",{ref:s,class:M,"data-polycss-lighting":p.textureLighting??"baked","aria-hidden":"true",style:{...f.value,...H.value??null,...r.style},...Object.fromEntries(Object.entries(r).filter(([A])=>A!=="style"&&A!=="class"))},S)}}});var $=require("vue"),Te=require("@layoutit/polycss-core");var J=require("vue"),kt=require("@layoutit/polycss-core"),Dt=[],Ge=[];function Ee(e,t){let r=(0,J.ref)(Dt),o=(0,J.ref)(!!e.value),n=(0,J.ref)(null),a=(0,J.ref)(Ge),i=null;function m(){if(i){try{i.dispose()}catch{}i=null}}return(0,J.watch)(e,(s,l,c)=>{if(!s){m(),r.value=Dt,o.value=!1,n.value=null,a.value=Ge;return}let u=!1;o.value=!0,n.value=null;let y=i;(0,kt.loadMesh)(s,t).then(f=>{if(u){try{f.dispose()}catch{}return}if(y)try{y.dispose()}catch{}i=f,r.value=f.polygons,o.value=!1,n.value=null,a.value=f.warnings??Ge}).catch(f=>{if(u)return;let g=f instanceof Error?f:new Error(String(f));o.value=!1,n.value=g}),c(()=>{u=!0})},{immediate:!0}),(0,J.onUnmounted)(()=>{m()}),{polygons:r,loading:o,error:n,warnings:a,dispose:m}}var Ke=new WeakMap;function It(e,t){Ke.set(e,t)}function _t(e){Ke.delete(e)}function le(e){let t=e;for(;t;){if(t instanceof HTMLElement){let r=Ke.get(t);if(r)return r}t=t.parentElement}return null}function Se(e,t,r){let o=Array.from(e.querySelectorAll("i,b,s,u"));for(let n of o){let a=n.getBoundingClientRect();if(!(a.width<=0||a.height<=0)&&t>=a.left&&t<=a.right&&r>=a.top&&r<=a.bottom)return!0}return!1}function _e(e,t,r){if(typeof document>"u")return null;let o=Array.from(document.querySelectorAll(".polycss-mesh"));for(let n of o){if(r&&!r(n))continue;let a=le(n);if(a&&Se(n,e,t))return a}return null}function ho(e,t,r){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]})`)),r&&(r[0]&&o.push(`rotateX(${r[0]}deg)`),r[1]&&o.push(`rotateY(${r[1]}deg)`),r[2]&&o.push(`rotateZ(${r[2]}deg)`)),o.length>0?o.join(" "):void 0}function Po(e){if(e.length===0)return e;let t=(0,Te.computeSceneBbox)(e),r=(t.min[0]+t.max[0])/2,o=(t.min[1]+t.max[1])/2,n=(t.min[2]+t.max[2])/2;if(r===0&&o===0&&n===0)return e;let a=i=>[i[0]-r,i[1]-o,i[2]-n];return e.map(i=>({...i,vertices:i.vertices.map(a),...i.textureTriangles?.length?{textureTriangles:i.textureTriangles.map(m=>({...m,vertices:m.vertices.map(a)}))}:null}))}var q=(0,$.defineComponent)({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},atlasScale:{type:[Number,String],default:void 0},class:{type:String},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},onClick:{type:Function,default:void 0},onContextMenu:{type:Function,default:void 0},onDoubleClick:{type:Function,default:void 0},onWheel:{type:Function,default:void 0},onPointerDown:{type:Function,default:void 0},onPointerUp:{type:Function,default:void 0},onPointerMove:{type:Function,default:void 0},onPointerOver:{type:Function,default:void 0},onPointerOut:{type:Function,default:void 0},onPointerEnter:{type:Function,default:void 0},onPointerLeave:{type:Function,default:void 0},onPointerCancel:{type:Function,default:void 0}},setup(e,{slots:t,attrs:r,expose:o}){let n=(0,$.computed)(()=>e.src??""),a=(0,$.computed)(()=>e.mtl?{mtlUrl:e.mtl}:void 0),i=Ee(n,a.value),m=(0,$.computed)(()=>e.src?i.polygons.value:e.polygons??[]),s=(0,$.computed)(()=>e.autoCenter?Po(m.value):m.value),l=!t.polygon,c=At(),u=(0,$.computed)(()=>e.textureLighting??c?.value.textureLighting??"baked"),y=(0,$.computed)(()=>u.value==="dynamic"?void 0:c?.value.directionalLight),f=(0,$.computed)(()=>u.value==="dynamic"?void 0:c?.value.ambientLight),g=(0,$.computed)(()=>{if(u.value!=="dynamic")return null;let S=e.rotation;if(!S||S[0]===0&&S[1]===0&&S[2]===0)return null;let A=c?.value.directionalLight?.direction;if(!A)return null;let T=(0,Te.inverseRotateVec3)(A,S),R=Math.hypot(T[0],T[1],T[2])||1;return{"--plx":(T[0]/R).toFixed(4),"--ply":(T[1]/R).toFixed(4),"--plz":(T[2]/R).toFixed(4)}}),v=(0,$.ref)(e.rotation),C=(0,$.computed)(()=>{if(!l)return[];let S=y.value,A=S&&v.value?{...S,direction:(0,Te.inverseRotateVec3)(S.direction,v.value)}:S;return s.value.map((T,R)=>ye(T,R,{directionalLight:A,ambientLight:f.value}))}),O=(0,$.computed)(()=>e.atlasScale),D=pe(C,u,O),H=(0,$.ref)(null),d={get element(){return H.value},get id(){return e.id},getPosition:()=>e.position,getRotation:()=>e.rotation,getScale:()=>e.scale,getPolygons:()=>s.value,rebakeAtlas:()=>{v.value=e.rotation}};o(d),(0,$.onMounted)(()=>{H.value&&It(H.value,d)}),(0,$.onBeforeUnmount)(()=>{H.value&&_t(H.value)});let M=(0,$.inject)(N,null),p=null;function E(S,A,T){let R=[];if(typeof document<"u"&&typeof document.elementsFromPoint=="function"){let k=document.elementsFromPoint(A,T),b=new Set;for(let L of k){let U=le(L);U&&!b.has(U)&&(b.add(U),R.push({object:U}))}}let w=0,h=0,I=M?.cameraElRef.value;if(I){let k=I.getBoundingClientRect();k.width>0&&k.height>0&&(w=(A-k.left)/k.width*2-1,h=-((T-k.top)/k.height*2-1))}let V=0;return p&&(V=Math.hypot(A-p.x,T-p.y)),{object:R[0]?.object??d,eventObject:d,intersections:R,pointer:{x:w,y:h},delta:V,nativeEvent:S,stopPropagation:()=>S.stopPropagation()}}function P(S,A,T,R){S&&S(E(A,T,R))}return()=>{let A={transform:ho(e.position,e.scale,e.rotation),...g.value??void 0,...r.style},T=Object.fromEntries(Object.entries(r).filter(([b])=>b!=="style"&&b!=="class")),R=`polycss-mesh${e.class?` ${e.class}`:""}`,w={};e.onClick&&(w.onClick=b=>{let L=b;P(e.onClick,L,L.clientX,L.clientY)}),e.onContextMenu&&(w.onContextmenu=b=>{let L=b;P(e.onContextMenu,L,L.clientX,L.clientY)}),e.onDoubleClick&&(w.onDblclick=b=>{let L=b;P(e.onDoubleClick,L,L.clientX,L.clientY)}),e.onWheel&&(w.onWheel=b=>{let L=b;P(e.onWheel,L,L.clientX,L.clientY)}),w.onPointerdown=b=>{let L=b;p={x:L.clientX,y:L.clientY},P(e.onPointerDown,L,L.clientX,L.clientY)},w.onPointerup=b=>{let L=b;P(e.onPointerUp,L,L.clientX,L.clientY),p=null},e.onPointerMove&&(w.onPointermove=b=>{let L=b;P(e.onPointerMove,L,L.clientX,L.clientY)}),(e.onPointerOver||e.onPointerEnter)&&(w.onPointerenter=b=>{let L=b;P(e.onPointerOver,L,L.clientX,L.clientY),P(e.onPointerEnter,L,L.clientX,L.clientY)}),(e.onPointerOut||e.onPointerLeave)&&(w.onPointerleave=b=>{let L=b;P(e.onPointerOut,L,L.clientX,L.clientY),P(e.onPointerLeave,L,L.clientX,L.clientY)}),e.onPointerCancel&&(w.onPointercancel=b=>{let L=b;P(e.onPointerCancel,L,L.clientX,L.clientY),p=null});let h=e.id?{"data-poly-mesh-id":e.id}:{};if(e.src&&i.loading.value&&i.polygons.value.length===0)return(0,$.h)("div",{ref:H,class:`polycss-mesh polycss-mesh-loading${e.class?` ${e.class}`:""}`,style:A,...h,...w,...T},t.fallback?.()??[]);if(e.src&&i.error.value&&i.polygons.value.length===0)return(0,$.h)("div",{ref:H,class:`polycss-mesh polycss-mesh-error${e.class?` ${e.class}`:""}`,style:A,...h,...w,...T},t.error?.({error:i.error.value})??[]);let I=s.value,V=t.polygon?I.map((b,L)=>(0,$.h)("template",{key:L},t.polygon?.({polygon:b,index:L}))):D.entries.value.map((b,L)=>{if(b)return ge({entry:b,page:D.pages.value[b.pageIndex],textureLighting:u.value});let U=C.value[L];return!U||U.texture?null:ne(U)?Pe({entry:U,textureLighting:u.value}):he({entry:U})}),k=t.default?.()??[];return(0,$.h)("div",{ref:H,class:R,style:A,...h,...w,...T},[...V,...k])}}});var qe=require("vue");function Vt(e){return typeof e=="function"?(0,qe.computed)(()=>{let{texture:t,key:r}=e();return{texture:t,key:r}}):(0,qe.computed)(()=>({texture:e.texture,key:e.key}))}var W=require("vue");function vo(e){if(e.length!==4)return null;let t=[...new Set(e.map(n=>n[0]))].sort((n,a)=>n-a),r=[...new Set(e.map(n=>n[1]))].sort((n,a)=>n-a);if(t.length!==2||r.length!==2)return null;let o=new Set([`${t[0]},${r[0]}`,`${t[0]},${r[1]}`,`${t[1]},${r[0]}`,`${t[1]},${r[1]}`]);for(let n of e)if(!o.has(`${n[0]},${n[1]}`))return null;return{u0:t[0],u1:t[1],v0:r[0],v1:r[1]}}function xo({plan:e,material:t,uvRect:r,className:o,style:n,domAttrs:a,pointerEvents:i="auto"}){let{u0:m,u1:s,v0:l,v1:c}=r,u=s-m,y=c-l,f=e.canvasW/u,g=e.canvasH/y,v=Math.max(l,c),C=m*f,O=(1-v)*g,D={width:`${e.canvasW}px`,height:`${e.canvasH}px`,transform:`matrix3d(${e.matrix})`,backgroundImage:`url(${t.texture})`,backgroundSize:`${f}px ${g}px`,backgroundPosition:`-${C}px -${O}px`,pointerEvents:i==="none"?"none":void 0,...n},H=e.polygon.data?Object.fromEntries(Object.entries(e.polygon.data).map(([M,p])=>[`data-${M}`,String(p)])):{},d=o?.trim()||void 0;return(0,W.h)("i",{class:d,style:D,...H,...a})}var Je=(0,W.defineComponent)({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},atlasScale:{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 r=(0,W.computed)(()=>e.textureLighting??e.context?.textureLighting??"baked"),o=(0,W.computed)(()=>e.atlasScale??e.context?.atlasScale),n=(0,W.computed)(()=>e.material?.texture??e.texture),a=(0,W.computed)(()=>e.material&&e.uvs?vo(e.uvs):null),i=(0,W.computed)(()=>{let l=e.context?.tileSize??50;return ye({vertices:e.vertices,color:e.baseColor??e.color,texture:n.value,uvs:e.uvs,data:e.data},0,{tileSize:l,layerElevation:e.context?.layerElevation??l,directionalLight:e.context?.directionalLight})}),m=(0,W.computed)(()=>a.value?[]:[i.value]),s=pe(m,r,o);return()=>{let l=i.value,c=s.entries.value[0],u=[];e.position&&u.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&&u.push(`scale3d(${e.scale}, ${e.scale}, ${e.scale})`):u.push(`scale3d(${e.scale[0]}, ${e.scale[1]}, ${e.scale[2]})`)),e.rotation&&(e.rotation[0]&&u.push(`rotateX(${e.rotation[0]}deg)`),e.rotation[1]&&u.push(`rotateY(${e.rotation[1]}deg)`),e.rotation[2]&&u.push(`rotateZ(${e.rotation[2]}deg)`));let y=u.length>0?u.join(" "):void 0,f={};if(e.data)for(let[O,D]of Object.entries(e.data))f[`data-${O}`]=String(D);let g={...t,...f},v=Object.fromEntries(Object.entries(g).filter(([O])=>O!=="class"&&O!=="style")),C;return a.value&&e.material&&l?C=xo({plan:l,material:e.material,uvRect:a.value,className:g.class??void 0,style:g.style,domAttrs:v,pointerEvents:e.pointerEvents??"auto"}):c?C=ge({entry:c,page:s.pages.value[c.pageIndex],textureLighting:r.value,className:g.class??void 0,style:g.style,domAttrs:v,pointerEvents:e.pointerEvents??"auto"}):l&&!l.texture&&(C=ne(l)?Pe({entry:l,textureLighting:r.value,className:g.class??void 0,style:g.style,domAttrs:v,pointerEvents:e.pointerEvents??"auto"}):he({entry:l,className:g.class??void 0,style:g.style,domAttrs:v,pointerEvents:e.pointerEvents??"auto"})),C?y?(0,W.h)("div",{class:"polycss-poly-wrapper",style:{position:"absolute",transformStyle:"preserve-3d",transform:y}},[C]):C:null}}});var j=require("vue"),Qe=require("@layoutit/polycss-core");var bo=150,$t=4,Co=513e-6,Mo=10,Ao=3,Ut=16.67,Eo=50,Xt=.1,Yt=10,zt=0,Nt=5e3,So=.3,To=.05;function Lo(e){return e===!0?-1:e===void 0||e===!1?1:e}function wo(e,t,r,o,n){let a=Lo(n),i=e/$t*a,m=t/$t*a;return{rotX:Math.max(0,Math.min(100,r-m)),rotY:((o-i)%360+360)%360}}function Ft(e,t,r,o,n){let a=Math.max(.01,r),i=Math.max(.1,Math.cos(o*Math.PI/180)),m=-e/(a*Qe.BASE_TILE),s=-t/(a*Qe.BASE_TILE*i),l=-n*Math.PI/180,c=Math.cos(l),u=Math.sin(l);return{dWorldX:s*c-m*u,dWorldY:s*u+m*c}}var et=(0,j.defineComponent)({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:Xt},maxZoom:{type:Number,default:Yt},minDistance:{type:Number,default:zt},maxDistance:{type:Number,default:Nt},animate:{type:[Boolean,Object],default:!1}},emits:{change:e=>!0,"interaction-start":e=>!0,"interaction-end":e=>!0},setup(e,{emit:t}){let r=(0,j.inject)(N,null);if(!r)return typeof console<"u"&&console.warn("[polycss] <PolyOrbitControls> must be used inside <PolyCamera>."),()=>null;let{store:o,cameraRef:n,cameraElRef:a,applyTransformDirect:i}=r,m=()=>({rotX:n.value.state.rotX,rotY:n.value.state.rotY,zoom:n.value.state.zoom,target:n.value.state.target,distance:n.value.state.distance}),s=()=>{t("change",m())},l=()=>{t("interaction-start",m())},c=()=>{t("interaction-end",m())},u=null,y={x:0,y:0},f=(0,j.ref)(!1),g=null,v=null,C=null;function O(){let d=a.value;if(!d)return;let M=!1,p={x:0,y:0},E=h=>{if(e.drag&&u===null&&h.isPrimary!==!1){h.preventDefault(),u=h.pointerId,y={x:h.clientX,y:h.clientY},d.style.cursor="grabbing";try{h.target.setPointerCapture(h.pointerId)}catch{}e.animate&&e.animate.pauseOnInteraction!==!1&&(f.value=!0),l()}},P=h=>{if(u===null||h.pointerId!==u||!e.drag)return;h.preventDefault();let I=h.clientX-y.x,V=h.clientY-y.y;y={x:h.clientX,y:h.clientY};let k=n.value,b=k.state;if(h.shiftKey){let{dWorldX:L,dWorldY:U}=Ft(I,V,b.zoom,b.rotX,b.rotY);k.update({target:[b.target[0]+L,b.target[1]+U,b.target[2]]})}else{let{rotX:L,rotY:U}=wo(I,V,b.rotX,b.rotY,e.invert);k.update({rotX:L,rotY:U})}i(),o.updateCameraFromRef(k),s()},S=h=>{if(u===h.pointerId){u=null,d.style.cursor=e.drag?"grab":"";try{h.target.releasePointerCapture(h.pointerId)}catch{}f.value=!1,c()}},A=h=>{h.preventDefault()},T=h=>{h.button===2&&(M=!0,p={x:h.clientX,y:h.clientY})},R=h=>{if(!M||!e.drag)return;let I=h.clientX-p.x,V=h.clientY-p.y;p={x:h.clientX,y:h.clientY};let k=n.value,b=k.state,{dWorldX:L,dWorldY:U}=Ft(I,V,b.zoom,b.rotX,b.rotY);k.update({target:[b.target[0]+L,b.target[1]+U,b.target[2]]}),i(),o.updateCameraFromRef(k),s()},w=h=>{h.button===2&&M&&(M=!1,c())};d.style.cursor="grab",d.style.touchAction="none",d.style.userSelect="none",d.addEventListener("pointerdown",E),d.addEventListener("pointermove",P),d.addEventListener("pointerup",S),d.addEventListener("pointercancel",S),d.addEventListener("contextmenu",A),d.addEventListener("mousedown",T),d.addEventListener("mousemove",R),d.addEventListener("mouseup",w),g=()=>{d.removeEventListener("pointerdown",E),d.removeEventListener("pointermove",P),d.removeEventListener("pointerup",S),d.removeEventListener("pointercancel",S),d.removeEventListener("contextmenu",A),d.removeEventListener("mousedown",T),d.removeEventListener("mousemove",R),d.removeEventListener("mouseup",w),d.style.cursor="",d.style.touchAction="",d.style.userSelect=""}}function D(){let d=a.value;if(!d)return;let M=!1,p=null,E=P=>{if(!e.wheel)return;P.preventDefault();let S=P.deltaMode===1?16:P.deltaMode===2?100:1,A=P.deltaY*S;P.ctrlKey?A*=Mo:A*=Ao;let T=n.value;if(e.dolly){let R=e.minDistance??zt,w=e.maxDistance??Nt,h=Math.max(R,Math.min(w,T.state.distance+A*To));T.update({distance:h})}else{let R=Math.exp(-A*Co),w=e.minZoom??Xt,h=e.maxZoom??Yt,I=Math.max(w,Math.min(h,T.state.zoom*R));T.update({zoom:I})}i(),o.updateCameraFromRef(T),M||(M=!0,l()),s(),p!==null&&clearTimeout(p),p=setTimeout(()=>{p=null,M=!1,c()},bo)};d.addEventListener("wheel",E,{passive:!1}),v=()=>{d.removeEventListener("wheel",E),p!==null&&clearTimeout(p)}}function H(){let d=null,M=!1,p=0,E=P=>{if(M)return;let S=e.animate;if(!S){d=requestAnimationFrame(E);return}if(f.value)p=P;else{let A=Math.min(Eo,p?P-p:Ut);p=P;let R=(S.speed??So)*(A/Ut),w=n.value,h=w.state;if(S.axis==="x"){let I=((h.rotX+R)%360+360)%360;w.update({rotX:I})}else{let I=((h.rotY+R)%360+360)%360;w.update({rotY:I})}i(),o.updateCameraFromRef(w),s()}d=requestAnimationFrame(E)};d=requestAnimationFrame(E),C=()=>{M=!0,d!==null&&cancelAnimationFrame(d),C=null}}return(0,j.onMounted)(()=>{e.drag&&O(),e.wheel&&D(),e.animate&&H()}),(0,j.onBeforeUnmount)(()=>{g?.(),v?.(),C?.(),g=null,v=null}),(0,j.watch)(()=>e.drag,d=>{d&&!g&&O(),!d&&g&&(g(),g=null)}),(0,j.watch)(()=>e.wheel,d=>{d&&!v&&D(),!d&&v&&(v(),v=null)}),(0,j.watch)(()=>!!e.animate,d=>{d&&!C&&H(),!d&&C&&C()}),()=>null}});var B=require("vue"),tt=require("@layoutit/polycss-core");var Ro=150,jt=4,Oo=513e-6,Ho=10,Do=3,Bt=16.67,ko=50,Wt=.1,Zt=10,Gt=0,Kt=5e3,Io=.3,_o=.05;function Vo(e){return e===!0?-1:e===void 0||e===!1?1:e}function qt(e,t,r,o,n){let a=Vo(n),i=e/jt*a,m=t/jt*a;return{rotX:Math.max(0,Math.min(100,r-m)),rotY:((o-i)%360+360)%360}}function $o(e,t,r,o,n){let a=Math.max(.01,r),i=Math.max(.1,Math.cos(o*Math.PI/180)),m=-e/(a*tt.BASE_TILE),s=-t/(a*tt.BASE_TILE*i),l=-n*Math.PI/180,c=Math.cos(l),u=Math.sin(l);return{dWorldX:s*c-m*u,dWorldY:s*u+m*c}}var nt=(0,B.defineComponent)({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:Wt},maxZoom:{type:Number,default:Zt},minDistance:{type:Number,default:Gt},maxDistance:{type:Number,default:Kt},animate:{type:[Boolean,Object],default:!1}},emits:{change:e=>!0,"interaction-start":e=>!0,"interaction-end":e=>!0},setup(e,{emit:t}){let r=(0,B.inject)(N,null);if(!r)return typeof console<"u"&&console.warn("[polycss] <PolyMapControls> must be used inside <PolyCamera>."),()=>null;let{store:o,cameraRef:n,cameraElRef:a,applyTransformDirect:i}=r,m=()=>({rotX:n.value.state.rotX,rotY:n.value.state.rotY,zoom:n.value.state.zoom,target:n.value.state.target,distance:n.value.state.distance}),s=()=>{t("change",m())},l=()=>{t("interaction-start",m())},c=()=>{t("interaction-end",m())},u=null,y={x:0,y:0},f=(0,B.ref)(!1),g=null,v=null,C=null;function O(){let d=a.value;if(!d)return;let M=!1,p={x:0,y:0},E=h=>{if(e.drag&&u===null&&h.isPrimary!==!1){h.preventDefault(),u=h.pointerId,y={x:h.clientX,y:h.clientY},d.style.cursor="grabbing";try{h.target.setPointerCapture(h.pointerId)}catch{}e.animate&&e.animate.pauseOnInteraction!==!1&&(f.value=!0),l()}},P=h=>{if(u===null||h.pointerId!==u||!e.drag)return;h.preventDefault();let I=h.clientX-y.x,V=h.clientY-y.y;y={x:h.clientX,y:h.clientY};let k=n.value,b=k.state;if(h.shiftKey){let{rotX:L,rotY:U}=qt(I,V,b.rotX,b.rotY,e.invert);k.update({rotX:L,rotY:U})}else{let{dWorldX:L,dWorldY:U}=$o(I,V,b.zoom,b.rotX,b.rotY);k.update({target:[b.target[0]+L,b.target[1]+U,b.target[2]]})}i(),o.updateCameraFromRef(k),s()},S=h=>{if(u===h.pointerId){u=null,d.style.cursor=e.drag?"grab":"";try{h.target.releasePointerCapture(h.pointerId)}catch{}f.value=!1,c()}},A=h=>{h.preventDefault()},T=h=>{h.button===2&&(M=!0,p={x:h.clientX,y:h.clientY})},R=h=>{if(!M||!e.drag)return;let I=h.clientX-p.x,V=h.clientY-p.y;p={x:h.clientX,y:h.clientY};let k=n.value,b=k.state,{rotX:L,rotY:U}=qt(I,V,b.rotX,b.rotY,e.invert);k.update({rotX:L,rotY:U}),i(),o.updateCameraFromRef(k),s()},w=h=>{h.button===2&&M&&(M=!1,c())};d.style.cursor="grab",d.style.touchAction="none",d.style.userSelect="none",d.addEventListener("pointerdown",E),d.addEventListener("pointermove",P),d.addEventListener("pointerup",S),d.addEventListener("pointercancel",S),d.addEventListener("contextmenu",A),d.addEventListener("mousedown",T),d.addEventListener("mousemove",R),d.addEventListener("mouseup",w),g=()=>{d.removeEventListener("pointerdown",E),d.removeEventListener("pointermove",P),d.removeEventListener("pointerup",S),d.removeEventListener("pointercancel",S),d.removeEventListener("contextmenu",A),d.removeEventListener("mousedown",T),d.removeEventListener("mousemove",R),d.removeEventListener("mouseup",w),d.style.cursor="",d.style.touchAction="",d.style.userSelect=""}}function D(){let d=a.value;if(!d)return;let M=!1,p=null,E=P=>{if(!e.wheel)return;P.preventDefault();let S=P.deltaMode===1?16:P.deltaMode===2?100:1,A=P.deltaY*S;P.ctrlKey?A*=Ho:A*=Do;let T=n.value;if(e.dolly){let R=e.minDistance??Gt,w=e.maxDistance??Kt,h=Math.max(R,Math.min(w,T.state.distance+A*_o));T.update({distance:h})}else{let R=Math.exp(-A*Oo),w=e.minZoom??Wt,h=e.maxZoom??Zt,I=Math.max(w,Math.min(h,T.state.zoom*R));T.update({zoom:I})}i(),o.updateCameraFromRef(T),M||(M=!0,l()),s(),p!==null&&clearTimeout(p),p=setTimeout(()=>{p=null,M=!1,c()},Ro)};d.addEventListener("wheel",E,{passive:!1}),v=()=>{d.removeEventListener("wheel",E),p!==null&&clearTimeout(p)}}function H(){let d=null,M=!1,p=0,E=P=>{if(M)return;let S=e.animate;if(!S){d=requestAnimationFrame(E);return}if(f.value)p=P;else{let A=Math.min(ko,p?P-p:Bt);p=P;let R=(S.speed??Io)*(A/Bt),w=n.value,h=w.state;if(S.axis==="x"){let I=((h.rotX+R)%360+360)%360;w.update({rotX:I})}else{let I=((h.rotY+R)%360+360)%360;w.update({rotY:I})}i(),o.updateCameraFromRef(w),s()}d=requestAnimationFrame(E)};d=requestAnimationFrame(E),C=()=>{M=!0,d!==null&&cancelAnimationFrame(d),C=null}}return(0,B.onMounted)(()=>{e.drag&&O(),e.wheel&&D(),e.animate&&H()}),(0,B.onBeforeUnmount)(()=>{g?.(),v?.(),C?.(),g=null,v=null}),(0,B.watch)(()=>e.drag,d=>{d&&!g&&O(),!d&&g&&(g(),g=null)}),(0,B.watch)(()=>e.wheel,d=>{d&&!v&&D(),!d&&v&&(v(),v=null)}),(0,B.watch)(()=>!!e.animate,d=>{d&&!C&&H(),!d&&C&&C()}),()=>null}});var X=require("vue"),Ve=require("@layoutit/polycss-core");var ot="#ff3653",rt="#8adb00",at="#2c8fff",Uo=.6,Xo=.8,Yo=1,lt=50,Jt=60,zo=.6,No=.0125,Fo=.15,jo=.04,Bo=1,Wo=.012,Zo=64,Go=1e-4,Qt={0:1,1:0,2:2},en=[{cssAxis:0,sign:1,key:"x",color:ot},{cssAxis:0,sign:-1,key:"-x",color:ot},{cssAxis:1,sign:1,key:"y",color:rt},{cssAxis:1,sign:-1,key:"-y",color:rt},{cssAxis:2,sign:1,key:"z",color:at},{cssAxis:2,sign:-1,key:"-z",color:at}],tn=[{cssAxis:0,key:"x",color:ot},{cssAxis:1,key:"y",color:rt},{cssAxis:2,key:"z",color:at}];function nn(e,t){let r=/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(e);if(!r)return e;let o=parseInt(r[1],16),n=parseInt(r[2],16),a=parseInt(r[3],16);return`rgba(${o}, ${n}, ${a}, ${t})`}function an(e,t){return!t||t<=0?e:Math.round(e/t)*t}function Ko(e){return e.replace("-","")[0]}function qo(e){if(e.length===0)return Jt;let t=1/0,r=1/0,o=1/0,n=-1/0,a=-1/0,i=-1/0;for(let m of e)for(let s of m.vertices)s[0]<t&&(t=s[0]),s[0]>n&&(n=s[0]),s[1]<r&&(r=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(n-t,a-r,i-o)*lt*zo:Jt}function on(e){let t=e.shaftLengthCss,r=[0,0,0];r[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(${r[0]*t}px, ${r[1]*t}px, ${r[2]*t}px)`,e.wrapper.appendChild(o);let n=e.wrapper.getBoundingClientRect(),a=o.getBoundingClientRect();e.wrapper.removeChild(o);let i=(a.left-n.left)/t,m=(a.top-n.top)/t,s=i*i+m*m;if(s<Go)return;let l=e.target.getPosition()??[0,0,0];e.onMouseDown?.(),e.onDraggingChanged?.(!0);let c=y=>{let f=y.clientX-e.startClientX,g=y.clientY-e.startClientY,v=(f*i+g*m)/s;v=an(v,e.translationSnap);let C=[l[0]+v*r[0],l[1]+v*r[1],l[2]+v*r[2]];e.onObjectChange?.({object:e.target,position:C}),e.onChange?.()},u=()=>{window.removeEventListener("pointermove",c),window.removeEventListener("pointerup",u),window.removeEventListener("pointercancel",u);let y=f=>{f.stopPropagation(),f.stopImmediatePropagation()};window.addEventListener("click",y,{capture:!0,once:!0}),setTimeout(()=>window.removeEventListener("click",y,!0),0),e.onMouseUp?.(),e.onDraggingChanged?.(!1)};window.addEventListener("pointermove",c),window.addEventListener("pointerup",u),window.addEventListener("pointercancel",u)}function rn(e){let t=e.wrapper.getBoundingClientRect(),r=t.left,o=t.top,n=Math.atan2(e.startClientY-o,e.startClientX-r),a=0,i=e.target.getRotation()??[0,0,0];e.onMouseDown?.(),e.onDraggingChanged?.(!0);let m=l=>{let c=Math.atan2(l.clientY-o,l.clientX-r),u=c-n;u>Math.PI?u-=2*Math.PI:u<-Math.PI&&(u+=2*Math.PI),a+=u,n=c;let y=a*180/Math.PI;y=an(y,e.rotationSnap);let f=[i[0],i[1],i[2]];f[e.cssAxis]=i[e.cssAxis]+y,e.onObjectChange?.({object:e.target,rotation:f}),e.onChange?.()},s=()=>{window.removeEventListener("pointermove",m),window.removeEventListener("pointerup",s),window.removeEventListener("pointercancel",s);let l=c=>{c.stopPropagation(),c.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",m),window.addEventListener("pointerup",s),window.addEventListener("pointercancel",s)}function Jo(e){return!!e&&typeof e=="object"&&"value"in e}function Qo(e){return e?Jo(e)?e.value??null:e:null}var it=(0,X.defineComponent)({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 r=(0,X.ref)(null),o=(0,X.ref)(null),n=(0,X.ref)(new Map),a=(0,X.computed)(()=>Qo(e.object)),i=(0,X.ref)(0);(0,X.onMounted)(()=>{i.value++});let m=(0,X.computed)(()=>(i.value,qo(a.value?.getPolygons()??[]))),s=(0,X.computed)(()=>m.value*e.size);function l(p){return o.value===p?Yo:r.value===p?Xo:Uo}function c(){t("change")}function u(p){t("objectChange",p)}function y(p){t("draggingChanged",p)}function f(){t("mouseDown")}function g(){t("mouseUp")}let v=(0,X.inject)(N,void 0),C=null;(0,X.onMounted)(()=>{let p=v?.cameraElRef.value;if(!p)return;let E=P=>{let S=a.value;if(!S||!e.enabled||P.target?.closest(".polycss-transform-gizmo"))return;let T={x:e.showX,y:e.showY,z:e.showZ},R=e.mode==="translate"?en:tn;for(let w of R){let h=w.key.replace("-","")[0];if(!T[h])continue;let I=document.querySelector(`.polycss-transform-${e.mode==="translate"?"arrow":"ring"}--${w.key}`);if(!I||!Se(I,P.clientX,P.clientY))continue;P.preventDefault(),P.stopPropagation();let V=I.closest("[data-poly-transform-controls]");if(!V)return;if(o.value=w.key,e.mode==="translate"){let k=w;on({cssAxis:k.cssAxis,sign:k.sign,shaftLengthCss:s.value,wrapper:V,target:S,startClientX:P.clientX,startClientY:P.clientY,translationSnap:e.translationSnap,onChange:c,onObjectChange:u,onMouseDown:f,onMouseUp:g,onDraggingChanged:b=>{b||(o.value=null),y(b)}})}else rn({cssAxis:w.cssAxis,wrapper:V,target:S,startClientX:P.clientX,startClientY:P.clientY,rotationSnap:e.rotationSnap,onChange:c,onObjectChange:u,onMouseDown:f,onMouseUp:g,onDraggingChanged:k=>{k||(o.value=null),y(k)}});return}};p.addEventListener("pointerdown",E),C=()=>p.removeEventListener("pointerdown",E)}),(0,X.onBeforeUnmount)(()=>{C?.()});let O=(0,X.computed)(()=>{if(e.mode!=="translate")return[];i.value;let E=s.value/lt;return en.filter(P=>({x:e.showX,y:e.showY,z:e.showZ})[Ko(P.key)]).map(P=>{let S=l(P.key);return{spec:P,polygons:(0,Ve.arrowPolygons)({axis:Qt[P.cssAxis],sign:P.sign,shaftLength:E,shaftHalfThickness:E*No,headLength:E*Fo,headHalfThickness:E*jo,color:nn(P.color,S)})}})}),D=(0,X.computed)(()=>{if(e.mode!=="rotate")return[];i.value;let E=s.value*Bo/lt;return tn.filter(P=>({x:e.showX,y:e.showY,z:e.showZ})[P.key]).map(P=>{let S=l(P.key);return{spec:P,polygons:(0,Ve.ringPolygons)({axis:Qt[P.cssAxis],radius:E,halfThickness:E*Wo,segments:Zo,color:nn(P.color,S)})}})});function H(p){return E=>{if(!e.enabled)return;let P=a.value;if(!P)return;E.stopPropagation();let A=E.eventObject.element?.closest("[data-poly-transform-controls]");A&&(o.value=p.key,on({cssAxis:p.cssAxis,sign:p.sign,shaftLengthCss:s.value,wrapper:A,target:P,startClientX:E.nativeEvent.clientX,startClientY:E.nativeEvent.clientY,translationSnap:e.translationSnap,onChange:c,onObjectChange:u,onMouseDown:f,onMouseUp:g,onDraggingChanged:T=>{T||(o.value=null),y(T)}}))}}function d(p){return E=>{if(!e.enabled)return;let P=a.value;if(!P)return;E.stopPropagation();let A=E.eventObject.element?.closest("[data-poly-transform-controls]");A&&(o.value=p.key,rn({cssAxis:p.cssAxis,wrapper:A,target:P,startClientX:E.nativeEvent.clientX,startClientY:E.nativeEvent.clientY,rotationSnap:e.rotationSnap,onChange:c,onObjectChange:u,onMouseDown:f,onMouseUp:g,onDraggingChanged:T=>{T||(o.value=null),y(T)}}))}}function M(p){return{onPointerOver:()=>{r.value=p},onPointerOut:()=>{r.value===p&&(r.value=null)}}}return()=>{let p=a.value;if(!p)return null;let E=p.getPosition()??[0,0,0],P={position:"absolute",transformStyle:"preserve-3d",transform:`translate3d(${E[0]}px, ${E[1]}px, ${E[2]}px)`,zIndex:1e3},S=e.mode==="translate"?O.value.map(({spec:A,polygons:T})=>(0,X.h)(q,{key:A.key,polygons:T,class:`polycss-transform-gizmo polycss-transform-arrow polycss-transform-arrow--${A.key}`,textureLighting:"baked",onPointerDown:H(A),...M(A.key)})):D.value.map(({spec:A,polygons:T})=>(0,X.h)(q,{key:A.key,polygons:T,class:`polycss-transform-gizmo polycss-transform-ring polycss-transform-ring--${A.key}`,textureLighting:"baked",onPointerDown:d(A),...M(A.key)}));return(0,X.h)("div",{class:"polycss-transform-controls","data-poly-transform-controls":"","data-poly-mode":e.mode,"data-poly-space":e.space,style:P},S)}}});var z=require("vue");var ve=Symbol("polycss.selection"),st=(0,z.defineComponent)({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:r}){let o=(0,z.reactive)({selected:[]}),n=(0,z.computed)(()=>o.selected);function a(c){let u=e.filter?e.filter(c):c;o.selected=u,t("change",u)}let i={get selected(){return o.selected},set:c=>a(c),add:c=>{e.multiple?o.selected.includes(c)||a([...o.selected,c]):a([c])},remove:c=>{o.selected.includes(c)&&a(o.selected.filter(u=>u!==c))},toggle:c=>{o.selected.includes(c)?a(o.selected.filter(u=>u!==c)):e.multiple?a([...o.selected,c]):a([c])},clear:()=>a([]),has:c=>o.selected.includes(c)};(0,z.provide)(ve,{selected:n,api:i});let m=(0,z.inject)(N,void 0),s=(c,u)=>_e(c,u,y=>!y.closest("[data-poly-transform-controls]")),l=null;return(0,z.onMounted)(()=>{let c=m?.cameraElRef.value;if(!c)return;let u=y=>{if(y.target?.closest("[data-poly-transform-controls]"))return;let g=le(y.target)??s(y.clientX,y.clientY);if(!g){t("pointerMissed",y),e.clearOnMiss&&a([]);return}e.multiple&&(y.shiftKey||y.metaKey||y.ctrlKey)?i.toggle(g):o.selected.length===1&&o.selected[0]===g?a([]):a([g])};c.addEventListener("click",u),l=()=>c.removeEventListener("click",u)}),(0,z.onBeforeUnmount)(()=>{l?.()}),()=>(0,z.h)("div",{style:{display:"contents"},"data-poly-select":""},r.default?.())}});function ct(){let e=(0,z.inject)(ve,void 0);return e?e.selected:(0,z.ref)([])}function ut(){let e=(0,z.inject)(ve,void 0);if(!e)throw new Error("polycss: usePolySelectionApi must be used inside <PolySelect>.");return e.api}var xe=require("vue"),ln=require("@layoutit/polycss-core");var mt=(0,xe.defineComponent)({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=(0,xe.computed)(()=>(0,ln.axesHelperPolygons)({size:e.size,thickness:e.thickness,negative:e.negative,xColor:e.xColor,yColor:e.yColor,zColor:e.zColor}));return()=>(0,xe.h)(q,{polygons:t.value})}});var oe=require("vue"),sn=require("@layoutit/polycss-core");var dt=50,ft=(0,oe.defineComponent)({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=(0,oe.computed)(()=>e.color??e.light.color??"#ffd54a"),r=(0,oe.computed)(()=>(0,sn.octahedronPolygons)({center:[0,0,0],size:e.size,color:t.value})),o=(0,oe.computed)(()=>{let n=e.light.direction,a=n[0],i=n[1],m=n[2],s=Math.hypot(a,i,m)||1,l=e.target?.[0]??0,c=e.target?.[1]??0,u=e.target?.[2]??0,y=l+i/s*e.distance,f=c+a/s*e.distance,g=u+m/s*e.distance;return[f*dt,y*dt,g*dt]});return()=>(0,oe.h)(q,{polygons:r.value,position:o.value})}});var Z=require("vue"),cn=require("@layoutit/polycss-core");function ie(e){return e&&typeof e=="object"&&"value"in e?e.value:e}function un(e,t,r){let o=(0,Z.ref)(null),n=null,a=null,i=null,m=(0,Z.ref)(0);function s(){return r==null?o.value:ie(r)??o.value}function l(){a!==null&&(cancelAnimationFrame(a),a=null),i=null}function c(){l(),n&&(n.stopAllAction(),n.uncacheRoot(),n=null,m.value++)}function u(){if(a!==null)return;function D(H){if(i===null){i=H,a=requestAnimationFrame(D);return}let d=(H-i)/1e3;i=H,n?.update(d),a=requestAnimationFrame(D)}a=requestAnimationFrame(D)}function y(){c();let D=ie(e),H=ie(t);if(!D||D.length===0||!H)return;let d=s();d&&(n=(0,cn.createPolyAnimationMixer)(d,H),m.value++,u())}let f=(0,Z.watch)(()=>{let D=ie(e),H=ie(t),d=r!=null?ie(r):o.value;return{c:D,ctrl:H,r:d}},()=>y(),{immediate:!0,deep:!1});(0,Z.onUnmounted)(()=>{f(),c()});let g=(0,Z.computed)(()=>ie(e)??[]),v=(0,Z.computed)(()=>g.value.map(D=>D.name)),C=(0,Z.computed)(()=>(m.value,n)),O=(0,Z.computed)(()=>{m.value;let D=g.value,H={};for(let d of D)Object.defineProperty(H,d.name,{enumerable:!0,get(){if(!n)return null;try{return n.clipAction(d.name)}catch{return null}}});return H});return{ref:o,mixer:C,clips:g,names:v,actions:O}}var x=require("@layoutit/polycss-core");0&&(module.exports={BASE_TILE,DEFAULT_CAMERA_STATE,DEFAULT_PROJECTION,LoopOnce,LoopPingPong,LoopRepeat,Poly,PolyAxesHelper,PolyCamera,PolyCameraContextKey,PolyDirectionalLightHelper,PolyMapControls,PolyMesh,PolyOrbitControls,PolyOrthographicCamera,PolyPerspectiveCamera,PolyScene,PolySelect,PolySelectionContextKey,PolyTransformControls,arrowPolygons,axesHelperPolygons,bakeSolidTextureSampledPolygons,bakeSolidTextureSamples,buildSceneContext,clampChannel,computeSceneBbox,computeShapeLighting,computeTexturePaintMetrics,coverPlanarPolygons,createIsometricCamera,createPolyAnimationMixer,cullInteriorPolygons,findMeshUnderPoint,findPolyMeshHandle,formatColor,injectPolyBaseStyles,inverseRotateVec3,loadMesh,mergePolygons,normalizeInvertMultiplier,normalizePolygons,octahedronPolygons,parseColor,parseGltf,parseHexColor,parseMtl,parseObj,parsePureColor,parseRgbColor,parseVox,pointInMeshElement,polygonFaces,ringPolygons,rotateVec3,shadeColor,usePolyAnimation,usePolyCamera,usePolyMaterial,usePolyMesh,usePolySceneContext,usePolySelect,usePolySelectionApi});
|
|
271
|
+
|
|
272
|
+
/* \u2500\u2500 Cast shadow projection (dynamic-mode CSS path) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
|
|
273
|
+
|
|
274
|
+
/* <q> \u2014 dedicated shadow leaf. Same border-shape rendering trick as <i>
|
|
275
|
+
(border-color: currentColor fills the polygon outline) but with its
|
|
276
|
+
own tag so we don't have to thread :not(.polycss-shadow) exclusions
|
|
277
|
+
through every dynamic-mode color rule. backface-visibility must be
|
|
278
|
+
visible because the projection matrix is near-rank-deficient and the
|
|
279
|
+
resulting plane's normal can read as back-facing under some camera
|
|
280
|
+
angles; the leaf is intentionally always painted. Strip the UA's
|
|
281
|
+
default ::before/::after open-/close-quote so the element is just a
|
|
282
|
+
styled box. */
|
|
283
|
+
.polycss-scene q {
|
|
284
|
+
position: absolute;
|
|
285
|
+
display: block;
|
|
286
|
+
transform-origin: 0 0;
|
|
287
|
+
transform-style: preserve-3d;
|
|
288
|
+
margin: 0;
|
|
289
|
+
padding: 0;
|
|
290
|
+
font: inherit;
|
|
291
|
+
font-weight: normal;
|
|
292
|
+
font-style: normal;
|
|
293
|
+
line-height: 0;
|
|
294
|
+
quotes: none;
|
|
295
|
+
text-decoration: none;
|
|
296
|
+
backface-visibility: visible;
|
|
297
|
+
border-color: currentColor;
|
|
298
|
+
pointer-events: none;
|
|
299
|
+
}
|
|
300
|
+
.polycss-scene q::before,
|
|
301
|
+
.polycss-scene q::after {
|
|
302
|
+
content: none;
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
/*
|
|
306
|
+
* Rotate rings: one square quad per ring, masked to a donut. The mask uses
|
|
307
|
+
* --ring-inner-ratio (set inline by PolyTransformControls); hit-testing
|
|
308
|
+
* matches the donut shape so the inner hole isn't clickable.
|
|
309
|
+
*/
|
|
310
|
+
.polycss-transform-ring i,
|
|
311
|
+
.polycss-transform-ring b,
|
|
312
|
+
.polycss-transform-ring s,
|
|
313
|
+
.polycss-transform-ring u {
|
|
314
|
+
--ring-inner-r: calc(var(--ring-inner-ratio, 0.92) * 50%);
|
|
315
|
+
--ring-outer-r: calc(var(--ring-outer-ratio, 1) * 50%);
|
|
316
|
+
-webkit-mask: radial-gradient(circle at 50% 50%,
|
|
317
|
+
transparent 0%,
|
|
318
|
+
transparent var(--ring-inner-r),
|
|
319
|
+
black var(--ring-inner-r),
|
|
320
|
+
black var(--ring-outer-r),
|
|
321
|
+
transparent var(--ring-outer-r));
|
|
322
|
+
mask: radial-gradient(circle at 50% 50%,
|
|
323
|
+
transparent 0%,
|
|
324
|
+
transparent var(--ring-inner-r),
|
|
325
|
+
black var(--ring-inner-r),
|
|
326
|
+
black var(--ring-outer-r),
|
|
327
|
+
transparent var(--ring-outer-r));
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
/* Shadow projection matrix. Projects any 3D point P onto the horizontal
|
|
331
|
+
ground plane (cssZ \u2248 G) along the CSS-space light direction (--clx/y/z).
|
|
332
|
+
|
|
333
|
+
The strict projection would set m22=0 (output.z is a constant G, flat).
|
|
334
|
+
Chromium SKIPS rendering elements whose composed transform is singular.
|
|
335
|
+
m22=0 makes it singular, so the shadow paints nothing. Fix: collapse along
|
|
336
|
+
z by a near-zero scale (Z_SQUASH = 0.01) \u2014 output.z \u2248 G with ~1% drift,
|
|
337
|
+
full-rank and renderable. Sub-pixel drift for any realistic scene size. */
|
|
338
|
+
.polycss-scene[data-polycss-lighting="dynamic"] {
|
|
339
|
+
--shadow-proj: matrix3d(
|
|
340
|
+
1, 0, 0, 0,
|
|
341
|
+
0, 1, 0, 0,
|
|
342
|
+
calc(-1 * var(--clx) / var(--clz)),
|
|
343
|
+
calc(-1 * var(--cly) / var(--clz)),
|
|
344
|
+
0.01,
|
|
345
|
+
0,
|
|
346
|
+
calc(var(--shadow-ground-cssz) * var(--clx) / var(--clz)),
|
|
347
|
+
calc(var(--shadow-ground-cssz) * var(--cly) / var(--clz)),
|
|
348
|
+
calc(var(--shadow-ground-cssz) * 0.99),
|
|
349
|
+
1
|
|
350
|
+
);
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
/* <q> shadow leaf \u2014 Lambert-gated opacity. Polygons facing the light cast
|
|
354
|
+
full shadow; polygons facing away cast zero shadow. The * 10 multiplier
|
|
355
|
+
sharpens the cutoff so small positive Lambert values jump quickly to 1,
|
|
356
|
+
giving a near-binary visibility decision with a smooth edge transition.
|
|
357
|
+
Scoped to dynamic mode: baked-mode shadow leaves are dropped up-front
|
|
358
|
+
by isBakedShadowCaster() and don't carry --pnx/--pny/--pnz. */
|
|
359
|
+
.polycss-scene[data-polycss-lighting="dynamic"] q {
|
|
360
|
+
opacity: clamp(0, calc((var(--pnx) * var(--clx) + var(--pny) * var(--cly) + var(--pnz) * var(--clz)) * 10), 1);
|
|
361
|
+
}
|
|
362
|
+
`;var ia=require("@layoutit/polycss-core");var lo=require("vue"),nn=Symbol("polycss/scene-context");function so(){return(0,lo.inject)(nn,null)}var re=require("@layoutit/polycss-core");var Ve=require("@layoutit/polycss-core");function on(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 rn(e){let n=(e.defaultView??(typeof window<"u"?window:void 0))?.navigator?.userAgent??"";return n?!(0,Ve.safariCssProjectiveUnsupported)(n):!0}function uo(e){let t=e.defaultView?.CSS??(typeof CSS<"u"?CSS:void 0);return!!t?.supports?.("corner-top-left-shape","bevel")&&!!t.supports("corner-top-right-shape","bevel")&&!!t.supports("corner-bottom-right-shape","bevel")&&!!t.supports("corner-bottom-left-shape","bevel")}function co(e){let n=(e.defaultView??(typeof window<"u"?window:void 0))?.navigator?.userAgent??"";return n?!(0,Ve.safariCssProjectiveUnsupported)(n):!0}function mo(e,t,n,o,r){let i=new Set(o?.disable??[]);return(0,Ve.getSolidPaintDefaultsForPlansCore)(e,t,i,{solidTriangleSupported:rn(n),projectiveQuadSupported:co(n),cornerShapeSupported:uo(n),borderShapeSupported:on(n)},Ve.parseHex,Ve.rgbKey,r)}function an(e,t,n=new Set,o){let r=o??(typeof document<"u"?document:null);if(!r)return{};let i=n.size>0?{disable:Array.from(n)}:void 0;return mo(e,t,r,i)}function Ge(e){let t=e??(typeof document<"u"?document:null);if(!t){if(!!!(typeof CSS<"u"?CSS:void 0)?.supports?.("border-shape","polygon(0 0, 100% 0, 0 100%) circle(0)"))return!1;let r=typeof matchMedia<"u"?matchMedia:void 0;return r?r("(pointer: fine)").matches&&r("(hover: hover)").matches:!0}return on(t)}function Ze(e){let t=e??(typeof document<"u"?document:null);if(!t){let n=(typeof navigator<"u"?navigator:globalThis.navigator)?.userAgent??"";if(!n)return!0;let o=/\b(?:Chrome|HeadlessChrome|Chromium|Edg|OPR)\//.test(n);return!/\bVersion\/[\d.]+.*\bSafari\//.test(n)||o}return rn(t)}var fo=require("@layoutit/polycss-core");function ln(e,t,n,o){return(0,fo.filterAtlasPlans)(e,t,n,{solidTriangleSupported:Ze(o),borderShapeSupported:Ge(o)})}var po=require("@layoutit/polycss-core");function yo(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 sn(e,t,n){return(0,po.packTextureAtlasPlansWithScaleCore)(e,t,yo(n))}var Ce=require("@layoutit/polycss-core"),Ke=new Map;function bo(e){let t=Ke.get(e);return t||(t=new Promise((n,o)=>{let r=new Image;r.decoding="async",r.crossOrigin="anonymous",r.onload=()=>n(r),r.onerror=()=>o(new Error(`texture load failed: ${e}`)),r.src=e}),Ke.set(e,t),t.then(()=>{Ke.get(e)===t&&Ke.delete(e)},()=>{Ke.get(e)===t&&Ke.delete(e)})),t}function pe(e,t,n=1,o=0,r=0,i=1,a=0,u=0){e.setTransform(n*t,o*t,r*t,i*t,a*t,u*t)}function vo(e,t,n,o,r,i,a){Math.abs(i.r-1)<.001&&Math.abs(i.g-1)<.001&&Math.abs(i.b-1)<.001||(e.save(),pe(e,a),e.globalCompositeOperation="multiply",e.fillStyle=(0,Ce.tintToCss)(i),e.fillRect(t,n,o,r),e.restore())}function So(e,t,n,o,r,i,a){let u=t.naturalWidth||t.width||1,l=t.naturalHeight||t.height||1,c=Math.max(r/u,i/l),m=u*c,f=l*c;pe(e,a),e.drawImage(t,n+(r-m)/2,o+(i-f)/2,m,f)}function dt(e,t){return Math.max(0,Math.min(t,e))}function un(e,t,n,o,r,i,a,u){let l=t.naturalWidth||t.width||1,c=t.naturalHeight||t.height||1,m=dt(Math.min(n.minU,n.maxU)*l,l),f=dt(Math.max(n.minU,n.maxU)*l,l),d=dt(Math.min(n.minV,n.maxV)*c,c),h=dt(Math.max(n.minV,n.maxV)*c,c),p=Math.floor(m),P=Math.floor(d),b=Math.ceil(f)-p,A=Math.ceil(h)-P;b<1&&(p=Math.floor(dt((n.minU+n.maxU)/2*l,l-1)),b=1),A<1&&(P=Math.floor(dt((n.minV+n.maxV)/2*c,c-1)),A=1),p=Math.max(0,Math.min(l-1,p)),P=Math.max(0,Math.min(c-1,P)),b=Math.max(1,Math.min(l-p,b)),A=Math.max(1,Math.min(c-P,A)),pe(e,u),e.drawImage(t,p,P,b,A,o,r,i,a)}function Co(e){return e==="repeat"||e==="mirrored-repeat"}function go(e,t){return Co(e)?Math.floor(t):0}function ho(e,t){return Co(e)?Math.ceil(t)-1:0}function Po(e,t){return e==="mirrored-repeat"&&Math.abs(t%2)===1}function xo(e,t,n,o,r,i,a){let u=r?go(i,r.minU):0,l=r?ho(i,r.maxU):0,c=r?go(a,r.minV):0,m=r?ho(a,r.maxV):0;for(let f=u;f<=l;f++)for(let d=c;d<=m;d++){let h=Po(i,f),p=Po(a,d);if(!h&&!p){e.drawImage(t,f*n,d*o);continue}e.save(),e.translate((h?f+1:f)*n,(p?d+1:d)*o),e.scale(h?-1:1,p?-1:1),e.drawImage(t,0,0),e.restore()}}function Ot(e,t,n,o){for(let r=0;r<o.length;r+=2){let i=t+o[r],a=n+o[r+1];r===0?e.moveTo(i,a):e.lineTo(i,a)}e.closePath()}function Ct(e,t,n,o,r,i){for(let a=0;a<o.length;a+=2){let u=t+o[a]+r,l=n+o[a+1]+i;a===0?e.moveTo(u,l):e.lineTo(u,l)}e.closePath()}function Eo(e,t,n,o){pe(e,o),e.beginPath(),Ot(e,t.x,t.y,t.screenPts),e.clip(),pe(e,o),e.fillStyle=n==="dynamic"?t.polygon.color??"#cccccc":t.shadedColor,e.fillRect(t.x,t.y,t.canvasW,t.canvasH)}function Dt(e,t,n,o,r){t.polygon.textureAlphaMode==="opaque"&&(pe(e,n),e.fillStyle=t.polygon.color??"#cccccc",e.fillRect(t.x+o,t.y+r,t.canvasW,t.canvasH))}function Mo(e,t,n,o,r=0,i=0){if(t.textureTriangles?.length){let a=n.naturalWidth||n.width||1,u=n.naturalHeight||n.height||1;for(let l of t.textureTriangles){let c=(0,Ce.expandClipPoints)(l.screenPts,Ce.TEXTURE_TRIANGLE_BLEED);e.save(),pe(e,o),e.beginPath(),Ct(e,t.x,t.y,c,r,i),e.clip(),Dt(e,t,o,r,i),l.uvAffine?(pe(e,o,l.uvAffine.a/a,l.uvAffine.c/a,l.uvAffine.b/u,l.uvAffine.d/u,t.x+l.uvAffine.e+r,t.y+l.uvAffine.f+i),xo(e,n,a,u,l.uvSampleRect,t.polygon.textureWrap?.s,t.polygon.textureWrap?.t)):l.uvSampleRect&&un(e,n,l.uvSampleRect,t.x+r,t.y+i,t.canvasW,t.canvasH,o),e.restore()}}else if(t.uvAffine){let a=n.naturalWidth||n.width||1,u=n.naturalHeight||n.height||1,l=t.polygon.textureAlphaMode==="opaque";l&&(e.save(),pe(e,o),e.beginPath(),Ct(e,t.x,t.y,t.screenPts,r,i),e.clip(),Dt(e,t,o,r,i)),pe(e,o,t.uvAffine.a/a,t.uvAffine.c/a,t.uvAffine.b/u,t.uvAffine.d/u,t.x+t.uvAffine.e+r,t.y+t.uvAffine.f+i),xo(e,n,a,u,t.uvSampleRect,t.polygon.textureWrap?.s,t.polygon.textureWrap?.t),l&&e.restore()}else if(t.uvSampleRect){let a=t.polygon.textureAlphaMode==="opaque";a&&(e.save(),pe(e,o),e.beginPath(),Ct(e,t.x,t.y,t.screenPts,r,i),e.clip(),Dt(e,t,o,r,i)),un(e,n,t.uvSampleRect,t.x+r,t.y+i,t.canvasW,t.canvasH,o),a&&e.restore()}else{let a=t.polygon.textureAlphaMode==="opaque";a&&(e.save(),pe(e,o),e.beginPath(),Ct(e,t.x,t.y,t.screenPts,r,i),e.clip(),Dt(e,t,o,r,i)),So(e,n,t.x+r,t.y+i,t.canvasW,t.canvasH,o),a&&e.restore()}}function la(e,t,n,o,r,i){let a=r-n,u=i-o,l=a*a+u*u;if(l<=1e-9)return Math.hypot(e-n,t-o);let c=Math.max(0,Math.min(1,((e-n)*a+(t-o)*u)/l));return Math.hypot(e-(n+a*c),t-(o+u*c))}function sa(e,t,n,o){let r=1/0,i=n.length/2;for(let a of o){if(a<0||a>=i)continue;let u=a*2,l=(a+1)%i*2;r=Math.min(r,la(e,t,n[u],n[u+1],n[l],n[l+1]))}return r}function ua(e,t,n,o,r,i){let a=Math.max(0,o-i),u=Math.min(t-1,o+i),l=Math.max(0,r-i),c=Math.min(n-1,r+i),m=null,f=1/0;for(let d=l;d<=c;d++)for(let h=a;h<=u;h++){if(h===o&&d===r)continue;let p=h-o,P=d-r,b=p*p+P*P;if(b>i*i||b>=f)continue;let A=(d*t+h)*4;e[A+3]<Ce.TEXTURE_EDGE_REPAIR_SOURCE_ALPHA_MIN||(m=A,f=b)}return m}function To(e,t,n){if(!t.textureEdgeRepair||!t.texture||!t.textureEdgeRepairEdges||t.textureEdgeRepairEdges.size===0)return;let o=e.canvas;if(!o)return;let r=Math.max(0,Math.floor(t.x*n)),i=Math.max(0,Math.floor(t.y*n)),a=Math.max(1,Math.min(o.width-r,Math.ceil(t.canvasW*n))),u=Math.max(1,Math.min(o.height-i,Math.ceil(t.canvasH*n)));if(a<=0||u<=0)return;let l;try{l=e.getImageData(r,i,a,u)}catch{return}let c=l.data,m=new Uint8ClampedArray(c),f=Math.max(Ce.TEXTURE_EDGE_REPAIR_RADIUS,Ce.TEXTURE_EDGE_REPAIR_RADIUS/n),d=Math.max(2,Math.ceil(f*n)+1),h=!1;for(let p=0;p<u;p++)for(let P=0;P<a;P++){let b=(p*a+P)*4,A=c[b+3];if(A<Ce.TEXTURE_EDGE_REPAIR_ALPHA_MIN||A===255)continue;let L=(r+P+.5)/n-t.x,w=(i+p+.5)/n-t.y;if(sa(L,w,t.screenPts,t.textureEdgeRepairEdges)>f)continue;let y=ua(m,a,u,P,p,d);y!==null&&(c[b]=m[y],c[b+1]=m[y+1],c[b+2]=m[y+2],c[b+3]=255,h=!0)}h&&e.putImageData(l,r,i)}function Ao(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 ca(e,t,n,o){let r=n.createElement("canvas");r.width=Math.max(1,Math.ceil(e.width*o)),r.height=Math.max(1,Math.ceil(e.height*o));let i=e.entries.some(m=>m.textureEdgeRepair&&m.texture&&m.textureEdgeRepairEdges&&m.textureEdgeRepairEdges.size>0),a=r.getContext("2d",i?{willReadFrequently:!0}:void 0);if(!a)return{width:e.width,height:e.height,url:null};let u=Array.from(new Set(e.entries.flatMap(m=>m.texture?[m.texture]:[]))),l=new Map;await Promise.all(u.map(async m=>{l.set(m,await bo(m))}));for(let m of e.entries){let f=m.texture?l.get(m.texture):null;if(!m.texture){a.save(),Eo(a,m,t,o),a.restore();continue}f&&(a.save(),pe(a,o),a.beginPath(),Ot(a,m.x,m.y,m.screenPts),a.clip(),Mo(a,m,f,o),a.restore()),m.texture&&t==="baked"&&(a.save(),pe(a,o),a.beginPath(),Ot(a,m.x,m.y,m.screenPts),a.clip(),vo(a,m.x,m.y,m.canvasW,m.canvasH,m.textureTint,o),a.restore()),To(a,m,o)}let c=await Ao(r);return r.width=1,r.height=1,{width:e.width,height:e.height,url:c}}async function cn(e,t,n,o,r){let i=[];for(let a of e){if(r())break;i.push(await ca(a,t,n,o))}return i}var Ee=require("@layoutit/polycss-core"),Ro=50,Do=[.4,-.7,.59],Oo="#ffffff",ko=1,Io="#ffffff",Fo=.4,J=1e-9;var Et=.75,Vo=32,_o=96,da="0 48px 96px 48px",Lo,wo=Vo;function It(){let e=typeof navigator<"u"?navigator.userAgent:"";return e!==Lo&&(Lo=e,wo=/\bFirefox\//.test(e)?_o:Vo),wo}function mn(){return It()===_o?da:void 0}function je(e){let t=(0,Ee.parsePureColor)(e);return t?{r:t.rgb[0],g:t.rgb[1],b:t.rgb[2]}:{r:255,g:255,b:255}}function fn({r:e,g:t,b:n}){return`${e},${t},${n}`}function ma(e){return(0,Ee.parsePureColor)(e)?.alpha??1}function Ft({r:e,g:t,b:n}){let o=r=>Math.round(Math.max(0,Math.min(255,r))).toString(16).padStart(2,"0");return`#${o(e)}${o(t)}${o(n)}`}function Bo(e,t,n,o,r){let i=je(e),a=je(n),u=je(o),l=u.r/255*r+a.r/255*t,c=u.g/255*r+a.g/255*t,m=u.b/255*r+a.b/255*t,f=Math.max(0,Math.min(255,Math.round(i.r*l))),d=Math.max(0,Math.min(255,Math.round(i.g*c))),h=Math.max(0,Math.min(255,Math.round(i.b*m))),p=ma(e);return p<1?`rgba(${f}, ${d}, ${h}, ${p})`:Ft({r:f,g:d,b:h})}function zo(e,t){if(!Number.isFinite(t)||t<=1)return e;let n=(0,Ee.parsePureColor)(e);if(!n)return e;let o=255/Math.max(1,Math.round(t)-1),r=a=>Math.max(0,Math.min(255,Math.round(Math.round(a/o)*o))),i={r:r(n.rgb[0]),g:r(n.rgb[1]),b:r(n.rgb[2])};return n.alpha<1?`rgba(${i.r}, ${i.g}, ${i.b}, ${n.alpha})`:Ft(i)}function Ho(e,t,n){let o=(r,i)=>{if(r===i)return r;let a=i-r;return r+Math.sign(a)*Math.min(Math.abs(a),n)};return{r:o(e.r,t.r),g:o(e.g,t.g),b:o(e.b,t.b)}}function dn(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function fa(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 pa(e){if(e.length<3)return null;let t=e[0],n=[0,0,0];for(let r=1;r+1<e.length;r++){let i=e[r],a=e[r+1],u=[i[0]-t[0],i[1]-t[1],i[2]-t[2]],l=[a[0]-t[0],a[1]-t[1],a[2]-t[2]];n[0]-=u[1]*l[2]-u[2]*l[1],n[1]-=u[2]*l[0]-u[0]*l[2],n[2]-=u[0]*l[1]-u[1]*l[0]}let o=Math.hypot(n[0],n[1],n[2]);return o<=J?null:[n[0]/o,n[1]/o,n[2]/o]}function ya(e){if(e.length<3)return!1;let t=0;for(let n=0;n<e.length;n++){let o=e[n],r=e[(n+1)%e.length],i=e[(n+2)%e.length],a=(r[0]-o[0])*(i[1]-r[1])-(r[1]-o[1])*(i[0]-r[0]);if(Math.abs(a)<=J)return!1;let u=Math.sign(a);if(t===0)t=u;else if(u!==t)return!1}return!0}function ga(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 ha(e,t,n,o){let r=t[0]-e[0],i=t[1]-e[1],a=o[0]-n[0],u=o[1]-n[1],l=r*u-i*a;if(Math.abs(l)<=J)return null;let c=n[0]-e[0],m=n[1]-e[1],f=(c*u-m*a)/l;return[e[0]+f*r,e[1]+f*i]}function kt(e,t){if(e.length<6||t<=0)return e;let n=0,o=0,r=e.length/2;for(let a=0;a<e.length;a+=2)n+=e[a],o+=e[a+1];n/=r,o/=r;let i=e.slice();for(let a=0;a<i.length;a+=2){let u=i[a]-n,l=i[a+1]-o,c=Math.hypot(u,l);c<=J||(i[a]+=u/c*t,i[a+1]+=l/c*t)}return i}function Qe(e,t){if(e.length<6||e.length%2!==0||t<=0)return e;let n=[];for(let l=0;l<e.length;l+=2)n.push([e[l],e[l+1]]);if(!ya(n))return kt(e,t);let o=ga(n);if(Math.abs(o)<=J)return kt(e,t);let r=o>0?1:-1,i=[];for(let l=0;l<n.length;l++){let c=n[l],m=n[(l+1)%n.length],f=m[0]-c[0],d=m[1]-c[1],h=Math.hypot(f,d);if(h<=J)return kt(e,t);let p=r*(d/h)*t,P=r*(-f/h)*t;i.push({a:[c[0]+p,c[1]+P],b:[m[0]+p,m[1]+P]})}let a=[],u=Math.max(2,t*4);for(let l=0;l<n.length;l++){let c=i[(l+n.length-1)%n.length],m=i[l],f=ha(c.a,c.b,m.a,m.b);if(!f)return kt(e,t);let d=n[l],h=f[0]-d[0],p=f[1]-d[1],P=Math.hypot(h,p);P>u?a.push(d[0]+h/P*u,d[1]+p/P*u):a.push(f[0],f[1])}return a}function Pa(e,t,n,o){let r=e+t;if(o<=0||n<=J||r<=J||!Number.isFinite(e+t+n+o))return Qe([e,0,0,n,r,n],o);let i=Math.sqrt(e*e+n*n),a=Math.sqrt(t*t+n*n);if(i<=J||a<=J)return Qe([e,0,0,n,r,n],o);let u=-o*n/i,l=-o*e/i,c=o*n/a,m=-o*t/a,f=e+u,d=l,h=r+c,p=n+m,P=-n*r;if(Math.abs(P)<=J)return Qe([e,0,0,n,r,n],o);let b=f-h,A=d-p,L=(b*n+A*e)/P,w=h-L*t,y=p-L*n,R=-o*(e+i)/n,I=n+o,z=r+o*(t+a)/n,_=I,C=Math.max(2,o*4),k=w-e,V=y,N=Math.sqrt(k*k+V*V);N>C&&(w=e+k/N*C,y=V/N*C);let v=Math.sqrt(R*R+o*o);v>C&&(R=R/v*C,I=n+o/v*C);let s=z-r,g=Math.sqrt(s*s+o*o);return g>C&&(z=r+s/g*C,_=n+o/g*C),[w,y,R,I,z,_]}function xa(e,t){if((e+1)%3===t)return e;if((t+1)%3===e)return t}function ba(e,t,n,o,r){let i=e.seamBleedEdges;if(!i?.size)return null;let a=e.seamBleed===void 0?Et:e.seamBleed;return[[o,t],[t,n],[n,o]].map(([l,c],m)=>{let f=xa(l,c),d=f!==void 0&&i.has(f)?e.seamBleedEdgeAmounts?.get(f)??(0,Ee.resolveSeamBleed)(a,Et):0;return(0,Ee.safePlanSeamBleedAmount)(r,m,d)})}function va(e,t,n){return e.map(o=>[o[1]*t,o[0]*t,o[2]*n])}function pn(e,t,n,o){if(!(0,Ee.isSolidTrianglePlan)(e))return null;let r=e.tileSize,i=e.layerElevation,a=va(e.polygon.vertices,r,i),u=pa(a);if(!u)return null;let l=[{a:0,b:1,c:2},{a:1,b:2,c:0},{a:2,b:0,c:1}].map(K=>{let oe=a[K.a],j=a[K.b];return{...K,length:Math.hypot(j[0]-oe[0],j[1]-oe[1],j[2]-oe[2])}}).sort((K,oe)=>oe.length-K.length),c=l[0].a,m=l[0].b,f=l[0].c,d=a[c],h=a[m],p=a[f],P=l[0].length;if(P<=J)return null;let b=[(h[0]-d[0])/P,(h[1]-d[1])/P,(h[2]-d[2])/P],A=[p[0]-d[0],p[1]-d[1],p[2]-d[2]],L=dn(A,b),w=[d[0]+b[0]*L,d[1]+b[1]*L,d[2]+b[2]*L],y=[w[0]-p[0],w[1]-p[1],w[2]-p[2]],R=Math.hypot(y[0],y[1],y[2]);if(R<=J)return null;let I=[y[0]/R,y[1]/R,y[2]/R];if(dn(fa(b,I),u)<0){let K=m;if(m=c,c=K,d=a[c],h=a[m],P=Math.hypot(h[0]-d[0],h[1]-d[1],h[2]-d[2]),P<=J)return null;b=[(h[0]-d[0])/P,(h[1]-d[1])/P,(h[2]-d[2])/P];let oe=[p[0]-d[0],p[1]-d[1],p[2]-d[2]];L=dn(oe,b),w=[d[0]+b[0]*L,d[1]+b[1]*L,d[2]+b[2]*L],y=[w[0]-p[0],w[1]-p[1],w[2]-p[2]];let j=Math.hypot(y[0],y[1],y[2]);if(j<=J)return null;I=[y[0]/j,y[1]/j,y[2]/j]}let z=It(),_=Math.max(0,Math.min(P,L)),C=Math.max(0,P-_),k=[_,0,0,R,_+C,R],V=ba(e,c,m,f,k),N=V?(0,Ee.offsetConvexPolygonPointsByEdgeAmounts)(k,V):Pa(_,C,R,(0,Ee.resolveSeamBleed)(e.seamBleed,Et)),v=[N[0],N[1]],s=[N[2],N[3]],g=[N[4],N[5]],S=(s[1]+g[1])/2,T=v[0]-s[0],E=g[0]-v[0],H=S-v[1];if(T<=J||E<=J||H<=J||!Number.isFinite(T+E+H))return null;let Y=t==="dynamic",O=je(e.polygon.color??"#cccccc"),M=Y&&fn(O)===o?.dynamicColorKey,B={color:Y||e.shadedColor===o?.paintColor?void 0:e.shadedColor,pointerEvents:n==="none"?"none":void 0,...Y&&!M?{"--pnx":u[0].toFixed(4),"--pny":u[1].toFixed(4),"--pnz":u[2].toFixed(4),"--psr":(O.r/255).toFixed(4),"--psg":(O.g/255).toFixed(4),"--psb":(O.b/255).toFixed(4)}:Y?{"--pnx":u[0].toFixed(4),"--pny":u[1].toFixed(4),"--pnz":u[2].toFixed(4)}:null},F=([K,oe])=>[p[0]+(K-_)*b[0]+oe*I[0],p[1]+(K-_)*b[1]+oe*I[1],p[2]+(K-_)*b[2]+oe*I[2]],$=F(v),X=F([s[0],S]),te=F([g[0],S]),G=z/2,Q=[(te[0]-X[0])/z,(te[1]-X[1])/z,(te[2]-X[2])/z],ne=[$[0]-Q[0]*G,$[1]-Q[1]*G,$[2]-Q[2]*G],fe=[(X[0]-ne[0])/z,(X[1]-ne[1])/z,(X[2]-ne[2])/z];return{transform:`matrix3d(${[Q[0],Q[1],Q[2],0,fe[0],fe[1],fe[2],0,u[0],u[1],u[2],0,ne[0],ne[1],ne[2],1].map(K=>(Math.round(K*1e3)/1e3||0).toString()).join(",")})`,borderWidth:mn(),...B}}function Vt(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 Sa(e,t,n,o){let r=e+t;if(o<=0||n<=J||r<=J||!Number.isFinite(e+t+n+o))return Qe([e,0,0,n,r,n],o);let i=Math.sqrt(e*e+n*n),a=Math.sqrt(t*t+n*n);if(i<=J||a<=J)return Qe([e,0,0,n,r,n],o);let u=-o*n/i,l=-o*e/i,c=o*n/a,m=-o*t/a,f=e+u,d=l,h=r+c,p=n+m,P=-n*r;if(Math.abs(P)<=J)return Qe([e,0,0,n,r,n],o);let b=f-h,A=d-p,L=(b*n+A*e)/P,w=h-L*t,y=p-L*n,R=-o*(e+i)/n,I=n+o,z=r+o*(t+a)/n,_=I,C=Math.max(2,o*4),k=w-e,V=y,N=Math.sqrt(k*k+V*V);N>C&&(w=e+k/N*C,y=V/N*C);let v=Math.sqrt(R*R+o*o);v>C&&(R=R/v*C,I=n+o/v*C);let s=z-r,g=Math.sqrt(s*s+o*o);return g>C&&(z=r+s/g*C,_=n+o/g*C),[w,y,R,I,z,_]}function Ca(e,t,n,o,r,i,a,u,l,c,m,f){let d=Math.round(e*1e3)/1e3||0,h=Math.round(t*1e3)/1e3||0,p=Math.round(n*1e3)/1e3||0,P=Math.round(o*1e3)/1e3||0,b=Math.round(r*1e3)/1e3||0,A=Math.round(i*1e3)/1e3||0,L=Math.round(a*1e3)/1e3||0,w=Math.round(u*1e3)/1e3||0,y=Math.round(l*1e3)/1e3||0,R=Math.round(c*1e3)/1e3||0,I=Math.round(m*1e3)/1e3||0,z=Math.round(f*1e3)/1e3||0;return`matrix3d(${d},${h},${p},0,${P},${b},${A},0,${L},${w},${y},0,${R},${I},${z},1)`}function No(e,t,n){if(e.texture||e.vertices.length!==3)return null;let o=Ro,r=o,i=e.vertices[0],a=e.vertices[1],u=e.vertices[2],l=i[1]*o,c=i[0]*o,m=i[2]*r,f=a[1]*o,d=a[0]*o,h=a[2]*r,p=u[1]*o,P=u[0]*o,b=u[2]*r,A=f-l,L=d-c,w=h-m,y=p-l,R=P-c,I=b-m,z=-(L*I-w*R),_=-(w*y-A*I),C=-(A*R-L*y),k=Math.sqrt(z*z+_*_+C*C);if(k<=J)return null;z/=k,_/=k,C/=k;let V=A*A+L*L+w*w,N=p-f,v=P-d,s=b-h,g=l-p,S=c-P,T=m-b,E=N*N+v*v+s*s,H=g*g+S*S+T*T,Y=Vt(n)?n.a:0,O=Vt(n)?n.b:1,M=Vt(n)?n.c:2,B=()=>n?No(e,t):null;if(!Vt(n)){let We=V;E>We&&(Y=1,O=2,M=0,We=E),H>We&&(Y=2,O=0,M=1)}let F=M===0?l:M===1?f:p,$=M===0?c:M===1?d:P,X=M===0?m:M===1?h:b,te=Y===0?l:Y===1?f:p,G=Y===0?c:Y===1?d:P,Q=Y===0?m:Y===1?h:b,ne=O===0?l:O===1?f:p,fe=O===0?c:O===1?d:P,Me=O===0?m:O===1?h:b,K=ne-te,oe=fe-G,j=Me-Q,D=Math.sqrt(K*K+oe*oe+j*j);if(D<=J)return B();let se=K/D,ye=oe/D,ge=j/D,ve=(F-te)*se+($-G)*ye+(X-Q)*ge,we=te+se*ve-F,ue=G+ye*ve-$,ke=Q+ge*ve-X,Ie=Math.sqrt(we*we+ue*ue+ke*ke);if(Ie<=J)return B();we/=Ie,ue/=Ie,ke/=Ie;let xt=Math.max(0,Math.min(D,ve)),jt=Math.max(0,D-xt),Se=Sa(xt,jt,Ie,Et),Be=Se[0],Re=Se[1],ze=Se[2],He=Se[3],At=Se[4],bt=Se[5],Le=(He+bt)/2,he=Be-ze,Lt=At-Be,$t=Le-Re;if(he<=J||Lt<=J||$t<=J||!Number.isFinite(he+Lt+$t))return B();let Ut=1/It(),to=he+Lt,Wt=to*Ut,qt=(Lt-he)*.5*Ut,Gt=$t*Ut,Zt=Be-xt-to*.5,Kt=Re,Xr=Ca(se*Wt,ye*Wt,ge*Wt,se*qt+we*Gt,ye*qt+ue*Gt,ge*qt+ke*Gt,z,_,C,F+se*Zt+we*Kt,$+ye*Zt+ue*Kt,X+ge*Zt+ke*Kt),no;if(Math.floor(t.colorFreezeFrames??1)!==0){let We=t.directionalLight,oo=t.ambientLight,Fe=We?.direction??Do,jr=We?.color??Oo,$r=Math.max(0,We?.intensity??ko),Ur=oo?.color??Io,Wr=Math.max(0,oo?.intensity??Fo),Qt=Math.sqrt(Fe[0]*Fe[0]+Fe[1]*Fe[1]+Fe[2]*Fe[2])||1,qr=Fe[0]/Qt,Gr=Fe[1]/Qt,Zr=Fe[2]/Qt,Kr=$r*Math.max(0,z*qr+_*Gr+C*Zr),ro=Bo(e.color??"#cccccc",Kr,jr,Ur,Wr);no=t.colorSteps?zo(ro,t.colorSteps):ro}return{transform:Xr,borderWidth:mn(),color:no,basis:{a:Y,b:O,c:M}}}function Ea(e,t,n){return n>0&&(n<=1||(t+e)%n===0)}function Ma(e,t,n,o){let r=Math.floor(o.colorFreezeFrames??1);if(r===0)return;let i=e.__polycssStableTriangleColor;if(!(i===void 0||Ea(t,Math.max(0,Math.floor(o.colorFrame??0)),Math.max(1,r)))||i===n)return;let u=n,l=n?je(n):void 0,c=e.__polycssStableTriangleColorRgb,m=Math.max(0,Math.floor(o.colorMaxStep??0));m>0&&c&&l&&n&&(l=Ho(c,l,m),u=Ft(l)),e.style.color=u,e.__polycssStableTriangleColor=u,e.__polycssStableTriangleColorRgb=l}function yn(e,t,n={}){if((n.textureLighting??"baked")!=="baked"||!Ze())return!1;let o=Array.from(e.children).filter(i=>i instanceof HTMLElement&&i.localName==="u");if(o.length!==t.length)return!1;let r=t.map((i,a)=>No(i,n,o[a].__polycssStableTriangleBasis));if(r.some(i=>!i))return!1;for(let i=0;i<o.length;i+=1){let a=r[i],u=o[i];u.style.visibility&&(u.style.visibility=""),u.__polycssStableTriangleBasis=a.basis,u.style.transform=a.transform,a.borderWidth!==void 0&&(u.style.borderWidth=a.borderWidth),a.color!==void 0&&Ma(u,i,a.color,n)}return!0}var Yo=require("@layoutit/polycss-core");function Je(e,t,n={}){return(0,Yo.computeTextureAtlasPlanPublic)(e,t,n)}function gn(e,t,n){let o=new Set(n?.disable??[]);return an(e,t,o)}var de=require("vue");function _t(e){for(let t of e)t.startsWith("blob:")&&URL.revokeObjectURL(t)}function et(e,t,n=(0,de.computed)(()=>{}),o=(0,de.computed)(()=>{})){let r=(0,de.computed)(()=>new Set(o.value?.disable??[])),i=(0,de.computed)(()=>!r.value.has("b")),a=(0,de.computed)(()=>i.value),u=(0,de.computed)(()=>!r.value.has("u")&&Ze()),l=(0,de.computed)(()=>!r.value.has("i")&&t.value!=="dynamic"&&Ge()),c=(0,de.computed)(()=>{let d=ln(e.value,t.value,r.value,typeof document<"u"?document:null);return sn(d,n.value,typeof document<"u"?document:null)}),m=(0,de.ref)(c.value.packed.pages.map(d=>({width:d.width,height:d.height,url:null}))),f=[];return(0,de.watch)(()=>[c.value,t.value],([d,h],p,P)=>{let{packed:b,atlasScale:A}=d,L=!1;_t(f),f=[],m.value=b.pages.map(w=>({width:w.width,height:w.height,url:null})),P(()=>{L=!0,_t(f),f=[]}),!(b.pages.length===0||typeof document>"u")&&cn(b.pages,h,document,A,()=>L).then(w=>{if(L){_t(w.flatMap(y=>y.url?.startsWith("blob:")?[y.url]:[]));return}f=w.flatMap(y=>y.url?.startsWith("blob:")?[y.url]:[]),m.value=w}).catch(()=>{L||(m.value=b.pages.map(w=>({width:w.width,height:w.height,url:null})))})},{immediate:!0}),(0,de.getCurrentScope)()&&(0,de.onScopeDispose)(()=>{_t(f),f=[]}),{entries:(0,de.computed)(()=>c.value.packed.entries),pages:m,ready:(0,de.computed)(()=>m.value.length===0||m.value.every(d=>!!d.url)),useFullRectSolid:i,useProjectiveQuad:a,useStableTriangle:u,useBorderShape:l}}var Xo=require("vue");function tt({entry:e,textureLighting:t,solidPaintDefaults:n,className:o,style:r,domAttrs:i,pointerEvents:a="auto"}){let u=pn(e,t,a,n);if(!u)return null;let l=e.polygon.data?Object.fromEntries(Object.entries(e.polygon.data).map(([m,f])=>[`data-${m}`,String(f)])):{},c=o?.trim()||void 0;return(0,Xo.h)("u",{class:c,style:{...u,...r},...l,...i})}var jo=require("vue"),$e=require("@layoutit/polycss-core");var Ta=new Map([["transform",0],["border-shape",1],["border-width",2],["width",3],["height",4],["color",5]]);function Aa(e){let t=e.getAttribute("style");if(!t)return;let o=t.split(";").map(r=>r.trim()).filter(Boolean).map((r,i)=>{let a=r.slice(0,r.indexOf(":")).trim().toLowerCase();return{declaration:r,index:i,order:Ta.get(a)??Number.POSITIVE_INFINITY}}).sort((r,i)=>r.order-i.order||r.index-i.index).map(({declaration:r})=>r).join(";");o!==t&&e.setAttribute("style",o)}function nt({entry:e,solidPaintDefaults:t,className:n,style:o,domAttrs:r,pointerEvents:i="auto",forceBorderShape:a=!1}){let u=!e.texture&&(0,$e.isFullRectSolid)(e),l=u&&a&&Ge(),c=!u||l?(0,$e.cssBorderShapeForPlan)(e):null,m=e.shadedColor===t?.paintColor,d={transform:c?(0,$e.formatBorderShapeEntryMatrix)(e):(0,$e.formatSolidQuadEntryMatrix)(e),color:m?void 0:e.shadedColor,pointerEvents:i==="none"?"none":void 0,...o},h=e.polygon.data?Object.fromEntries(Object.entries(e.polygon.data).map(([b,A])=>[`data-${b}`,String(A)])):{},p=n?.trim()||void 0,P=b=>{let A=b.el;A&&(c?A.style.setProperty("border-shape",c):A.style.removeProperty("border-shape"),Aa(A))};return(0,jo.h)(u&&!l?"b":"i",{class:p,style:d,...h,...r,onVnodeMounted:P,onVnodeUpdated:P})}var $o=require("vue");function ot({entry:e,textureLighting:t,solidPaintDefaults:n,className:o,style:r,domAttrs:i,pointerEvents:a="auto"}){let u=t==="dynamic",l=je(e.polygon.color??"#cccccc"),c=u&&fn(l)===n?.dynamicColorKey,m={transform:`matrix3d(${e.projectiveMatrix})`,color:u||e.shadedColor===n?.paintColor?void 0:e.shadedColor,pointerEvents:a==="none"?"none":void 0,...u&&!c?{"--pnx":e.normal[0].toFixed(4),"--pny":e.normal[1].toFixed(4),"--pnz":e.normal[2].toFixed(4),"--psr":(l.r/255).toFixed(4),"--psg":(l.g/255).toFixed(4),"--psb":(l.b/255).toFixed(4)}:u?{"--pnx":e.normal[0].toFixed(4),"--pny":e.normal[1].toFixed(4),"--pnz":e.normal[2].toFixed(4)}:null,...r},f=e.polygon.data?Object.fromEntries(Object.entries(e.polygon.data).map(([h,p])=>[`data-${h}`,String(p)])):{},d=o?.trim()||void 0;return(0,$o.h)("b",{class:d,style:m,...f,...i})}var Uo=require("vue"),rt=require("@layoutit/polycss-core"),La=64;function at({entry:e,page:t,textureLighting:n,solidPaintDefaults:o,className:r,style:i,domAttrs:a,pointerEvents:u="auto"}){let l=n==="dynamic",c=e.atlasCanonicalSize??La,m=e.canvasW||1,f=e.canvasH||1,d=t?`${(0,rt.formatCssLengthPx)(-e.x/m*c)} ${(0,rt.formatCssLengthPx)(-e.y/f*c)}`:void 0,h=t?`${(0,rt.formatCssLengthPx)(t.width/m*c)} ${(0,rt.formatCssLengthPx)(t.height/f*c)}`:void 0,p=l&&t?.url?`url(${t.url})`:void 0,P=!l&&t?.url?`url(${t.url}) ${d} / ${h} no-repeat`:void 0,b={transform:(0,rt.formatMatrix3d)(e.atlasMatrix),"--polycss-atlas-size":`${c}px`,...l?{backgroundImage:t?.url?`url(${t.url})`:void 0,backgroundPosition:d,backgroundSize:h}:{background:P},...l?{"--pnx":e.normal[0].toFixed(4),"--pny":e.normal[1].toFixed(4),"--pnz":e.normal[2].toFixed(4)}:null,...l&&p?{maskImage:p,maskMode:"alpha",maskPosition:d,maskSize:h,maskRepeat:"no-repeat",WebkitMaskImage:p,WebkitMaskPosition:d,WebkitMaskSize:h,WebkitMaskRepeat:"no-repeat"}:null,opacity:t?.url?void 0:0,pointerEvents:u==="none"?"none":void 0,...i},A=e.polygon.data?Object.fromEntries(Object.entries(e.polygon.data).map(([w,y])=>[`data-${w}`,String(y)])):{},L=r?.trim()||void 0;return(0,Uo.h)("s",{class:L,style:b,...A,...a})}var hn=(0,W.defineComponent)({name:"PolyScene",inheritAttrs:!1,props:{polygons:{type:Array,default:void 0},perspective:{type:Number},rotX:{type:Number},rotY:{type:Number},zoom:{type:Number},directionalLight:{type:Object,default:void 0},ambientLight:{type:Object,default:void 0},textureLighting:{type:String,default:"baked"},textureQuality:{type:[Number,String],default:void 0},seamBleed:{type:[Number,String],default:void 0},strategies:{type:Object,default:void 0},autoCenter:{type:Boolean,default:!1},shadow:{type:Object,default:void 0},class:{type:String},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},debugShowLabels:{type:Boolean},debugShowBackfaces:{type:Boolean}},setup(e,{slots:t,attrs:n}){let o=(0,W.inject)(ie);if(!o)throw new Error("polycss: PolyScene must be used inside a PolyCamera.");let{sceneElRef:r,applyTransformDirect:i}=o,a=(0,W.ref)(0),u=new Map,l={register(C,k){u.set(C,k),a.value++},unregister(C){u.delete(C),a.value++},version:a,getEntries(){return Array.from(u.values())}},c=(0,W.ref)(null),m=(0,W.computed)(()=>({textureLighting:e.textureLighting??"baked",directionalLight:e.directionalLight,ambientLight:e.ambientLight,strategies:e.strategies,seamBleed:e.seamBleed??mt.DEFAULT_SEAM_BLEED,shadow:e.shadow,shadowRegistry:l,groundCssZ:c.value}));(0,W.provide)(nn,m);let f=(0,W.ref)(null);(0,W.watch)(f,C=>{r.value=C});let d=!1;(0,W.onMounted)(()=>{d||typeof document<"u"&&(St(document),d=!0)}),(0,W.watch)(()=>e.debugShowBackfaces,C=>{let k=f.value;k&&k.classList.toggle("polycss-debug-show-backfaces",!!C)});let h=(0,W.computed)(()=>e.polygons??[]),p=(0,W.computed)(()=>({directionalLight:e.directionalLight})),P=vt(h,p);(0,W.onMounted)(()=>{r.value=f.value,i()}),(0,W.onUpdated)(i);let b=(0,W.computed)(()=>({tileSize:50,layerElevation:50,directionalLight:e.directionalLight,textureLighting:e.textureLighting,textureQuality:e.textureQuality})),A=(0,W.computed)(()=>{let C=e.textureLighting==="dynamic",k=C?void 0:e.directionalLight,V=C?void 0:e.ambientLight,N=(0,re.buildTextureEdgeRepairSets)(P.value.polygons),v=e.seamBleed??mt.DEFAULT_SEAM_BLEED,s=v==="auto"||typeof v=="number"&&Number.isFinite(v)&&v>0?(0,re.buildSeamBleedPolygonEdges)(P.value.polygons,{tileSize:b.value.tileSize,layerElevation:b.value.layerElevation,directionalLight:k,ambientLight:V}):null;return P.value.polygons.map((g,S)=>Je(g,S,{tileSize:b.value.tileSize,layerElevation:b.value.layerElevation,directionalLight:k,ambientLight:V,seamBleed:s?.has(S)?v:void 0,seamEdges:s?.get(S),textureEdgeRepairEdges:N[S]}))}),L=(0,W.computed)(()=>e.textureLighting??"baked"),w=(0,W.computed)(()=>e.textureQuality),y=(0,W.computed)(()=>e.strategies),R=et(A,L,w,y),I=(0,W.computed)(()=>{if(e.textureLighting!=="dynamic")return null;let C=e.directionalLight?.direction??[.4,-.7,.59],k=Math.hypot(C[0],C[1],C[2])||1,V=C[0]/k,N=C[1]/k,v=C[2]/k,s=(0,mt.parseHexColor)(e.directionalLight?.color??"#ffffff")?.rgb??[255,255,255],g=(0,mt.parseHexColor)(e.ambientLight?.color??"#ffffff")?.rgb??[255,255,255],S=e.directionalLight?.intensity??1,T=e.ambientLight?.intensity??.4,E=O=>(O/255).toFixed(4),H=v,Y=Math.sign(H||1)*Math.max(Math.abs(H),.01);return{"--plx":V.toFixed(4),"--ply":N.toFixed(4),"--plz":v.toFixed(4),"--clx":V.toFixed(4),"--cly":N.toFixed(4),"--clz":Y.toFixed(4),"--plr":E(s[0]),"--plg":E(s[1]),"--plb":E(s[2]),"--pli":S.toFixed(4),"--par":E(g[0]),"--pag":E(g[1]),"--pab":E(g[2]),"--pai":T.toFixed(4)}}),z=50;(0,W.watchEffect)(()=>{let C=f.value;a.value;let k=l.getEntries();if(k.length===0){C&&C.style.removeProperty("--shadow-ground-cssz"),c.value!==null&&(c.value=null);return}let V=1/0;for(let s of k)for(let g of s())for(let S of g.vertices)S[2]<V&&(V=S[2]);if(!Number.isFinite(V)){C&&C.style.removeProperty("--shadow-ground-cssz"),c.value!==null&&(c.value=null);return}let N=e.shadow?.lift??.05,v=(V+N)*z;c.value!==v&&(c.value=v),C&&(e.textureLighting==="dynamic"?C.style.setProperty("--shadow-ground-cssz",v.toFixed(3)):C.style.removeProperty("--shadow-ground-cssz"))});let _=(0,W.computed)(()=>{if(!e.autoCenter)return[0,0,0];let C=P.value.sceneBbox;return[(C.min[0]+C.max[0])/2,(C.min[1]+C.max[1])/2,(C.min[2]+C.max[2])/2]});return(0,W.watchEffect)(()=>{o.autoCenterOffset.value=_.value}),(0,W.onBeforeUnmount)(()=>{}),()=>{let C=`polycss-scene${e.class?` ${e.class}`:""}`,k=b.value,V=R.entries.value.map((v,s)=>{if(v)return at({entry:v,page:R.pages.value[v.pageIndex],textureLighting:k.textureLighting??"baked"});let g=A.value[s];return!g||g.texture?null:R.useStableTriangle.value&&(0,re.isSolidTrianglePlan)(g)?tt({entry:g,textureLighting:k.textureLighting??"baked"}):R.useProjectiveQuad.value&&(0,re.isProjectiveQuadPlan)(g)?ot({entry:g,textureLighting:k.textureLighting??"baked"}):R.useBorderShape.value||R.useFullRectSolid.value?nt({entry:g,forceBorderShape:!R.useFullRectSolid.value}):null}),N=t.default?.()??[];return(0,W.h)("div",{ref:f,class:C,"data-polycss-lighting":k.textureLighting??"baked","aria-hidden":"true",style:{...I.value??null,...n.style},...Object.fromEntries(Object.entries(n).filter(([v])=>v!=="style"&&v!=="class"))},[...V,...N])}}});var U=require("vue"),me=require("@layoutit/polycss-core");var De=require("vue"),qo=require("@layoutit/polycss-core"),Wo=[],Pn=[];function Mt(e,t){let n=(0,De.ref)(Wo),o=(0,De.ref)(void 0),r=(0,De.ref)(!!e.value),i=(0,De.ref)(null),a=(0,De.ref)(Pn),u=null;function l(){if(u){try{u.dispose()}catch{}u=null}}return(0,De.watch)(e,(c,m,f)=>{if(!c){l(),n.value=Wo,o.value=void 0,r.value=!1,i.value=null,a.value=Pn;return}let d=!1;r.value=!0,i.value=null;let h=u;(0,qo.loadMesh)(c,t).then(p=>{if(d){try{p.dispose()}catch{}return}if(h)try{h.dispose()}catch{}u=p,n.value=p.polygons,o.value=p.voxelSource,r.value=!1,i.value=null,a.value=p.warnings??Pn}).catch(p=>{if(d)return;let P=p instanceof Error?p:new Error(String(p));r.value=!1,i.value=P}),f(()=>{d=!0})},{immediate:!0}),(0,De.onUnmounted)(()=>{l()}),{polygons:n,voxelSource:o,loading:r,error:i,warnings:a,dispose:l}}var Z=require("@layoutit/polycss-core"),wa=[.4,-.7,.59],Ra="#ffffff",Da=1,Oa="#ffffff",ka=.4,er=1,Ia=8,Fa=Z.PROJECTIVE_QUAD_BLEED,_e=1e-6,Va=(0,Z.resolveProjectiveQuadGuards)({bleed:0}),tr={t:[0,0,1],b:[0,0,-1],fl:[0,1,0],br:[0,-1,0],fr:[1,0,0],bl:[-1,0,0]},vn=["t","b","bl","br","fr","fl"],_a=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 Go(e){let t=[];for(let n of vn)(0,Z.normalFacesCamera)(tr[n],e)&&t.push(n);return t.join("|")}function Ba(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 za(e){let t=e.vertices;if(t.length<3)return null;let n=t[0],o=0,r=0,i=0;for(let u=1;u+1<t.length;u+=1){let l=t[u],c=t[u+1],m=l[1]-n[1],f=l[0]-n[0],d=l[2]-n[2],h=c[1]-n[1],p=c[0]-n[0],P=c[2]-n[2];o-=f*P-d*p,r-=d*h-m*P,i-=m*p-f*h}let a=Math.hypot(o,r,i);return a<=1e-9?null:[Math.round(o/a),Math.round(r/a),Math.round(i/a)]}function Ha(e){if(e.texture||e.material||e.uvs||e.textureTriangles||e.vertices.length!==4)return null;let t=za(e),n=t?_a.get(t.join(",")):void 0;if(!n)return null;let o=1/0,r=1/0,i=1/0,a=-1/0,u=-1/0,l=-1/0;for(let f of e.vertices)o=Math.min(o,f[0]),r=Math.min(r,f[1]),i=Math.min(i,f[2]),a=Math.max(a,f[0]),u=Math.max(u,f[1]),l=Math.max(l,f[2]);let c=1e-6,m=Ua(e.color);return Math.abs(l-i)<=c?{axis:"z",face:n,left:r*Z.BASE_TILE,top:o*Z.BASE_TILE,width:Math.max(0,(u-r)*Z.BASE_TILE),height:Math.max(0,(a-o)*Z.BASE_TILE),z:i*Z.BASE_TILE,baseColor:m,bleed:xn()}:Math.abs(a-o)<=c?{axis:"x",face:n,left:r*Z.BASE_TILE,top:i*Z.BASE_TILE,width:Math.max(0,(u-r)*Z.BASE_TILE),height:Math.max(0,(l-i)*Z.BASE_TILE),z:-o*Z.BASE_TILE,baseColor:m,bleed:xn()}:Math.abs(u-r)<=c?{axis:"y",face:n,left:i*Z.BASE_TILE,top:o*Z.BASE_TILE,width:Math.max(0,(l-i)*Z.BASE_TILE),height:Math.max(0,(a-o)*Z.BASE_TILE),z:-r*Z.BASE_TILE,baseColor:m,bleed:xn()}:null}function xn(){return{left:0,right:0,top:0,bottom:0}}function Na(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 Zo(e){return[e[1]*Z.BASE_TILE,e[0]*Z.BASE_TILE,e[2]*Z.BASE_TILE]}function Ko(e,t){return e.axis==="x"?[t[0],t[2]]:e.axis==="y"?[t[2],t[1]]:[t[0],t[1]]}function Ya(e,t,n){let o=e.left,r=e.left+e.width,i=e.top,a=e.top+e.height;if(Math.abs(t[0]-n[0])<=_e){if(Math.abs(t[0]-o)<=_e)return"left";if(Math.abs(t[0]-r)<=_e)return"right"}if(Math.abs(t[1]-n[1])<=_e){if(Math.abs(t[1]-i)<=_e)return"top";if(Math.abs(t[1]-a)<=_e)return"bottom"}return null}function Xa(e,t){let n=null;for(let o=0;o<3;o+=1)if(!(Math.abs(e[o]-t[o])<=_e)){if(n!==null)return null;n=o}return n}function ja(e,t,n){let o=t.vertices,r=Zo(o[n]),i=Zo(o[(n+1)%o.length]),a=Ya(e,Ko(e,r),Ko(e,i));if(!a)return null;let u=Xa(r,i);if(u===null)return null;let l=Math.min(r[u],i[u]),c=Math.max(r[u],i[u]);return c-l>_e?{item:e,side:a,variableAxis:u,fixed:r,start:l,end:c}:null}function Qo(e){e.item.bleed[e.side]=Math.max(e.item.bleed[e.side],Fa)}function $a(e,t){let n=new Map;for(let o of t){let r=e[o.sourceIndex];if(r)for(let i=0;i<r.vertices.length;i+=1){let a=ja(o,r,i);if(!a)continue;let u=Na(a),l=n.get(u);l?l.push(a):n.set(u,[a])}}for(let o of n.values()){if(o.length<2)continue;o.sort((i,a)=>i.start-a.start||i.end-a.end);let r=[];for(let i of o){r=r.filter(a=>a.end>i.start+_e);for(let a of r)a.item.sourceIndex!==i.item.sourceIndex&&(Qo(a),Qo(i));r.push(i)}}}function bn(e){let t=(0,Z.parsePureColor)(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 Ua(e){if(!e)return"#cccccc";let t=(0,Z.parsePureColor)(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(${ft(n.r)}, ${ft(n.g)}, ${ft(n.b)}, ${o})`}return nr(n)}function nr({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 ft(e){return Math.round(Math.max(0,Math.min(255,e)))}function Wa(e,t,n,o){let r=bn(t),i=bn(n?.color??Ra),a=bn(o?.color??Oa),u=n?.direction??wa,l=Math.hypot(u[0],u[1],u[2])||1,c=u[0]/l,m=u[1]/l,f=u[2]/l,d=Math.max(0,n?.intensity??Da)*Math.max(0,e[0]*c+e[1]*m+e[2]*f),h=Math.max(0,o?.intensity??ka),p=a.r/255*h+i.r/255*d,P=a.g/255*h+i.g/255*d,b=a.b/255*h+i.b/255*d,A={r:r.r*p,g:r.g*P,b:r.b*b,alpha:r.alpha};return A.alpha<1?`rgba(${ft(A.r)}, ${ft(A.g)}, ${ft(A.b)}, ${A.alpha})`:nr(A)}function qa(e){if(!e?.length)return[];let t=[];for(let n=0;n<e.length;n+=1){let o=e[n],r=Ha(o);if(!r||r.width<=0||r.height<=0)return[];t.push({...r,sourceIndex:n})}return $a(e,t),t}function Ga(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 Za(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 Ka(e){return new Map([[0,e.bleed.top],[1,e.bleed.right],[2,e.bleed.bottom],[3,e.bleed.left]])}function Qa(e,t){let n=e.split(",").map(Number);if(n.length!==16||n.some(r=>!Number.isFinite(r)))return null;let o=Z.SOLID_QUAD_CANONICAL_SIZE/t;for(let r=0;r<8;r+=1)n[r]*=o;return`matrix3d(${n.map(r=>Number(r.toFixed(6))).join(",")})`}function Jo(e,t){let n=e.left-e.bleed.left,o=e.top-e.bleed.top,r=e.width+e.bleed.left+e.bleed.right,i=e.height+e.bleed.top+e.bleed.bottom,a=e.z,u=r/t,l=i/t;return`matrix3d(${(e.axis==="x"?[u,0,0,0,0,0,l,0,0,-1,0,0,n,-a,o,1]:e.axis==="y"?[0,0,u,0,0,l,0,0,-1,0,0,0,-a,o,n,1]:[u,0,0,0,0,l,0,0,0,0,1,0,n,o,a,1]).map(m=>Number(m.toFixed(6))).join(",")})`}function Ja(e,t){let{xAxis:n,yAxis:o,normal:r,tx:i,ty:a,tz:u}=Ga(e),l=(0,Z.computeProjectiveQuadMatrix)(Za(e),n,o,r,i,a,u,Va,Ka(e));return l?Qa(l,t)??Jo(e,t):Jo(e,t)}function ei(e){let t=e.defaultView?.matchMedia;return t?t("(pointer: coarse)").matches||t("(hover: none)").matches:!1}function ti(e){return ei(e)?Ia:er}function ni(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 oi(e,t){let n=ni(e),o=t.meshRotation;o&&(n=(0,Z.rotateVec3)(n,o[0]??0,o[1]??0,o[2]??0));let[r,i]=(0,Z.rotateVec3)(n,t.rotX,0,t.rotY);return{x:r,y:i}}function ri(e,t,n){let o=e.filter(d=>t.has(d.face)).map(d=>({item:d,...oi(d,n)}));if(o.length===0)return[];let r=1/0,i=-1/0,a=1/0,u=-1/0;for(let d of o)r=Math.min(r,d.x),i=Math.max(i,d.x),a=Math.min(a,d.y),u=Math.max(u,d.y);let l=4,c=Math.max(1e-6,i-r),m=Math.max(1e-6,u-a),f=new Map;for(let d of o){let h=Math.min(l-1,Math.max(0,Math.floor((d.x-r)/c*l))),p=Math.min(l-1,Math.max(0,Math.floor((d.y-a)/m*l))),P=`${h}:${p}`,b=f.get(P);b||(b={tx:h,ty:p,sourceIndex:d.item.sourceIndex,items:[]},f.set(P,b)),b.items.push(d.item),b.sourceIndex=Math.min(b.sourceIndex,d.item.sourceIndex)}return Array.from(f.values()).sort((d,h)=>d.ty-h.ty||d.tx-h.tx||d.sourceIndex-h.sourceIndex).flatMap(d=>d.items)}function or(e){let{doc:t,wrapper:n,polygons:o,directionalLight:r,ambientLight:i}=e,a=qa(o);if(a.length===0)return null;let u=new Set(a.map(v=>v.face));n.classList.add("polycss-voxel-mesh");let l=ti(t);l!==er&&n.style.setProperty("--polycss-voxel-primitive",`${l}px`);let c=new Map,m=(v,s)=>{let g=`${v}|${s}`,S=c.get(g);if(S)return S;let T=Wa(tr[v],s,r,i);return c.set(g,T),T},f=new Map,d=new Map,h=new Map,p=new Map;for(let v of a){let s=p.get(v.face);s||(s=[],p.set(v.face,s)),s.push(v)}let P="",b=0,A=new Set,L=v=>{let s=f.get(v.sourceIndex);return s||(s=t.createElement("b"),f.set(v.sourceIndex,s),Ba(s,m(v.face,v.baseColor),Ja(v,l))),s},w=v=>{let s=d.get(v);return s||(s=t.createElement("span"),s.className=`polycss-voxel-face polycss-voxel-face-${v}`,s.dataset.polycssVoxelFace=v,s.__polycssVoxelFaceHost=!0,d.set(v,s)),s},y=()=>{for(let v of Array.from(n.childNodes))if(!v.__polycssVoxelFaceHost)return v;return null},R=(v,s)=>{let g=s.map(E=>E.sourceIndex).join(",");if(h.get(v)===g)return;let S=w(v),T=t.createDocumentFragment();for(let E of s)T.appendChild(L(E));S.replaceChildren(T),h.set(v,g)},I=()=>{for(let v of vn)u.has(v)&&R(v,p.get(v)??[])},z=v=>new Set(v.split("|").filter(Boolean)),_=v=>{let s=z(v);return vn.filter(g=>s.has(g)&&u.has(g))},C=v=>{let s=0;for(let g of v)s+=p.get(g)?.length??0;return s},k=v=>{let s=new Set,g=[],S=new Map;for(let T of v){s.has(T.face)||(s.add(T.face),g.push(T.face));let E=S.get(T.face);E||(E=[],S.set(T.face,E)),E.push(T)}return{orderedFaces:g,itemsByFace:S}},V=(v,s)=>{let g=new Set(v);for(let S of A){if(g.has(S))continue;let T=d.get(S);T?.parentNode===n&&n.removeChild(T)}if(s){let S=t.createDocumentFragment();for(let T of v)S.appendChild(w(T));n.insertBefore(S,y()),A=g;return}for(let S=0;S<v.length;S+=1){let T=v[S],E=w(T);if(E.parentNode===n)continue;let H=null;for(let Y=S+1;Y<v.length;Y+=1){let O=d.get(v[Y]);if(O?.parentNode===n){H=O;break}}n.insertBefore(E,H??y())}A=g},N=(v,s,g)=>{if(!g){let Y=_(v);V(Y,!1),b=C(Y);return}let S=new Set(v.split("|").filter(Boolean)),T=ri(a,S,s),{orderedFaces:E,itemsByFace:H}=k(T);for(let Y of E)R(Y,H.get(Y)??[]);V(E,!0),b=T.length};return I(),{get brushCount(){return b},render(v){P=Go(v),N(P,v,!0)},syncCamera(v){let s=Go(v);s!==P&&(P=s,N(s,v,!1))},dispose(){for(let v of d.values())v.remove();n.classList.remove("polycss-voxel-mesh"),n.style.removeProperty("--polycss-voxel-primitive"),f.clear(),d.clear(),h.clear(),b=0,A=new Set,P=""}}}var Sn=new WeakMap;function rr(e,t){Sn.set(e,t)}function ar(e){Sn.delete(e)}function it(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 lt(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 Bt(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=it(r);if(i&<(r,e,t))return i}return null}function ai(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 ii(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 ir(e){if(e.length===0)return e;let t=(0,me.computeSceneBbox)(e),n=(t.min[0]+t.max[0])/2,o=(t.min[1]+t.max[1])/2,r=(t.min[2]+t.max[2])/2;if(n===0&&o===0&&r===0)return e;let i=a=>[a[0]-n,a[1]-o,a[2]-r];return e.map(a=>({...a,vertices:a.vertices.map(i),...a.textureTriangles?.length?{textureTriangles:a.textureTriangles.map(u=>({...u,vertices:u.vertices.map(i)}))}:null}))}var ae=(0,U.defineComponent)({name:"PolyMesh",inheritAttrs:!1,props:{id:{type:String,default:void 0},src:{type:String,default:void 0},mtl:{type:String,default:void 0},polygons:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},textureLighting:{type:String,default:void 0},textureQuality:{type:[Number,String],default:void 0},seamBleed:{type:[Number,String],default:void 0},castShadow:{type:Boolean,default:!1},meshResolution:{type:String,default:void 0},class:{type:String},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},onClick:{type:Function,default:void 0},onContextMenu:{type:Function,default:void 0},onDoubleClick:{type:Function,default:void 0},onWheel:{type:Function,default:void 0},onPointerDown:{type:Function,default:void 0},onPointerUp:{type:Function,default:void 0},onPointerMove:{type:Function,default:void 0},onPointerOver:{type:Function,default:void 0},onPointerOut:{type:Function,default:void 0},onPointerEnter:{type:Function,default:void 0},onPointerLeave:{type:Function,default:void 0},onPointerCancel:{type:Function,default:void 0}},setup(e,{slots:t,attrs:n,expose:o}){let r=(0,U.computed)(()=>e.src??""),i=(0,U.computed)(()=>{let M={};return e.mtl&&(M.mtlUrl=e.mtl),e.meshResolution!==void 0&&(M.meshResolution=e.meshResolution),Object.keys(M).length>0?M:void 0}),a=Mt(r,i.value),u=(0,U.computed)(()=>e.src?a.polygons.value:e.polygons??[]),l=(0,U.ref)(null),c=null;(0,U.watch)(u,()=>{l.value=null,c=null});let m=(0,U.computed)(()=>l.value??u.value),f=(0,U.computed)(()=>e.autoCenter?ir(m.value):m.value),d=!t.polygon,h=so(),p=(0,U.computed)(()=>e.textureLighting??h?.value.textureLighting??"baked"),P=(0,U.computed)(()=>h?.value.strategies),b=(0,U.computed)(()=>e.seamBleed??h?.value.seamBleed??me.DEFAULT_SEAM_BLEED),A=(0,U.computed)(()=>p.value==="dynamic"?void 0:h?.value.directionalLight),L=(0,U.computed)(()=>p.value==="dynamic"?void 0:h?.value.ambientLight),w=(0,U.computed)(()=>!!(e.src&&a.voxelSource.value&&l.value===null&&!t.polygon&&!t.default&&p.value==="baked"&&!e.castShadow)),y=(0,U.computed)(()=>{if(p.value!=="dynamic")return null;let M=e.rotation;if(!M||M[0]===0&&M[1]===0&&M[2]===0)return null;let B=h?.value.directionalLight?.direction;if(!B)return null;let F=(0,me.inverseRotateVec3)(B,M),$=Math.hypot(F[0],F[1],F[2])||1;return{"--plx":(F[0]/$).toFixed(4),"--ply":(F[1]/$).toFixed(4),"--plz":(F[2]/$).toFixed(4)}}),R=(0,U.ref)(e.rotation),I=(0,U.ref)(0),z=(0,U.computed)(()=>{let M=A.value;return!M||!R.value?M:{...M,direction:(0,me.inverseRotateVec3)(M.direction,R.value)}}),_=(0,U.computed)(()=>{if(!d||w.value)return[];let M=(0,re.buildTextureEdgeRepairSets)(f.value),B=b.value==="auto"||typeof b.value=="number"&&Number.isFinite(b.value)&&b.value>0?(0,re.buildSeamBleedPolygonEdges)(f.value,{directionalLight:z.value,ambientLight:L.value}):null;return f.value.map((F,$)=>Je(F,$,{directionalLight:z.value,ambientLight:L.value,seamBleed:B?.has($)?b.value:void 0,seamEdges:B?.get($),textureEdgeRepairEdges:M[$]}))}),C=(0,U.computed)(()=>e.textureQuality),k=et(_,p,C,P),V=(0,U.computed)(()=>d?gn(_.value,p.value,P.value):{}),N=(0,U.computed)(()=>ai(V.value)),v=(0,U.computed)(()=>{if(!e.castShadow)return null;let M=h?.value,B=M?.groundCssZ??null;if(B===null)return null;let F=M?.shadow,$=M?.directionalLight?.direction??[.4,-.7,.59],X=(0,me.findOverlappingPolygonDuplicates)(f.value,{normalTolerance:.1,distanceTolerance:.5,overlapFraction:.4,preserveDoubleSidedBackfaces:!1}),te=[],G=1/0,Q=1/0,ne=-1/0,fe=-1/0,Me=1/0,K=1/0,oe=-1/0,j=-1/0,D=f.value,se=_.value;for(let Re=0;Re<D.length;Re++){if(X.has(Re)||!se[Re])continue;let He=D[Re],At=[];for(let bt of He.vertices){let Le=[bt[1]*me.BASE_TILE,bt[0]*me.BASE_TILE,bt[2]*me.BASE_TILE];Le[0]<Me&&(Me=Le[0]),Le[1]<K&&(K=Le[1]),Le[0]>oe&&(oe=Le[0]),Le[1]>j&&(j=Le[1]);let he=(0,me.projectCssVertexToGround)(Le,$,B);At.push(he),he[0]<G&&(G=he[0]),he[1]<Q&&(Q=he[1]),he[0]>ne&&(ne=he[0]),he[1]>fe&&(fe=he[1])}te.push(At)}if(te.length===0)return null;let ye=F?.maxExtend??2e3,ge=Math.max(G,Me-ye),ve=Math.max(Q,K-ye),we=Math.min(ne,oe+ye),ue=Math.min(fe,j+ye),ke=we-ge,Ie=ue-ve;if(!(ke>0)||!(Ie>0))return null;let xt=F?.color??"#000000",jt=F?.opacity??.25,Se=(0,me.parseHexColor)(xt)?.rgb??[0,0,0],Be="";for(let Re of te){let ze=(0,me.ensureCcw2D)(Re);Be+=`M${(ze[0][0]-ge).toFixed(3)},${(ze[0][1]-ve).toFixed(3)}`;for(let He=1;He<ze.length;He++)Be+=`L${(ze[He][0]-ge).toFixed(3)},${(ze[He][1]-ve).toFixed(3)}`;Be+="Z"}return(0,U.h)("svg",{class:"polycss-shadow polycss-shadow-svg",width:String(ke),height:String(Ie),viewBox:`0 0 ${ke} ${Ie}`,style:{position:"absolute",top:"0",left:"0",display:"block",overflow:"hidden",transformOrigin:"0 0",pointerEvents:"none",willChange:"transform",transform:`translate3d(${ge.toFixed(3)}px,${ve.toFixed(3)}px,${B.toFixed(3)}px)`}},[(0,U.h)("path",{d:Be,fill:`rgb(${Se[0]},${Se[1]},${Se[2]})`,"fill-rule":"nonzero",stroke:`rgb(${Se[0]},${Se[1]},${Se[2]})`,"stroke-width":"2","stroke-linejoin":"round",opacity:jt.toFixed(4)})])}),s=Symbol();(0,U.watch)(()=>e.castShadow,(M,B,F)=>{let $=h?.value.shadowRegistry;$&&(M?$.register(s,()=>f.value):$.unregister(s),F(()=>$.unregister(s)))},{immediate:!0}),(0,U.onBeforeUnmount)(()=>{h?.value.shadowRegistry?.unregister(s)});let g=(0,U.ref)(null),S={get element(){return g.value},get id(){return e.id},getPosition:()=>e.position,getRotation:()=>e.rotation,getScale:()=>e.scale,getPolygons:()=>c??f.value,setPolygons(M){let B=e.autoCenter?ir(M):M;c=B;let F=g.value;F&&d&&yn(F,B,{directionalLight:z.value,ambientLight:L.value,textureLighting:p.value,strategies:P.value,seamBleed:b.value,colorFrame:++I.value,colorFreezeFrames:0})||(l.value=M.slice())},updatePolygon(M,B){let F=c??f.value,$=typeof M=="number"?M:F.indexOf(M);$<0||$>=F.length||(Object.assign(F[$],B),l.value=F.slice(),c=null)},rebakeAtlas:()=>{R.value=e.rotation}};o(S),(0,U.onMounted)(()=>{g.value&&rr(g.value,S)}),(0,U.onBeforeUnmount)(()=>{g.value&&ar(g.value)});let T=(0,U.inject)(ie,null),E=(0,U.ref)(null);(0,U.watchEffect)(M=>{let B=g.value;if(E.value?.dispose(),E.value=null,!w.value||!B)return;let F=or({doc:B.ownerDocument,wrapper:B,polygons:f.value,directionalLight:z.value,ambientLight:L.value});if(!F)return;let $=()=>{let te=T?.store.getState().cameraState;return{rotX:te?.rotX??65,rotY:te?.rotY??45,meshRotation:e.rotation}};E.value=F,F.render($());let X=T?.store.subscribe(()=>{F.syncCamera($())});M(()=>{X?.(),F.dispose(),E.value===F&&(E.value=null)})});let H=null;function Y(M,B,F){let $=[];if(typeof document<"u"&&typeof document.elementsFromPoint=="function"){let ne=document.elementsFromPoint(B,F),fe=new Set;for(let Me of ne){let K=it(Me);K&&!fe.has(K)&&(fe.add(K),$.push({object:K}))}}let X=0,te=0,G=T?.cameraElRef.value;if(G){let ne=G.getBoundingClientRect();ne.width>0&&ne.height>0&&(X=(B-ne.left)/ne.width*2-1,te=-((F-ne.top)/ne.height*2-1))}let Q=0;return H&&(Q=Math.hypot(B-H.x,F-H.y)),{object:$[0]?.object??S,eventObject:S,intersections:$,pointer:{x:X,y:te},delta:Q,nativeEvent:M,stopPropagation:()=>M.stopPropagation()}}function O(M,B,F,$){M&&M(Y(B,F,$))}return()=>{let M=ii(e.position,e.scale,e.rotation),B=f.value,F;if(B.length>0){let j=1/0,D=1/0,se=1/0,ye=-1/0,ge=-1/0,ve=-1/0;for(let we of B)for(let ue of we.vertices)ue[0]<j&&(j=ue[0]),ue[0]>ye&&(ye=ue[0]),ue[1]<D&&(D=ue[1]),ue[1]>ge&&(ge=ue[1]),ue[2]<se&&(se=ue[2]),ue[2]>ve&&(ve=ue[2]);Number.isFinite(j)&&(F=`${(D+ge)/2*50}px ${(j+ye)/2*50}px ${(se+ve)/2*50}px`)}let $={transform:M,...F?{transformOrigin:F}:null,...y.value??void 0,...n.style,...N.value??void 0},X=Object.fromEntries(Object.entries(n).filter(([j])=>j!=="style"&&j!=="class")),te=`polycss-mesh${w.value?" polycss-voxel-mesh":""}${e.class?` ${e.class}`:""}`,G={};e.onClick&&(G.onClick=j=>{let D=j;O(e.onClick,D,D.clientX,D.clientY)}),e.onContextMenu&&(G.onContextmenu=j=>{let D=j;O(e.onContextMenu,D,D.clientX,D.clientY)}),e.onDoubleClick&&(G.onDblclick=j=>{let D=j;O(e.onDoubleClick,D,D.clientX,D.clientY)}),e.onWheel&&(G.onWheel=j=>{let D=j;O(e.onWheel,D,D.clientX,D.clientY)}),G.onPointerdown=j=>{let D=j;H={x:D.clientX,y:D.clientY},O(e.onPointerDown,D,D.clientX,D.clientY)},G.onPointerup=j=>{let D=j;O(e.onPointerUp,D,D.clientX,D.clientY),H=null},e.onPointerMove&&(G.onPointermove=j=>{let D=j;O(e.onPointerMove,D,D.clientX,D.clientY)}),(e.onPointerOver||e.onPointerEnter)&&(G.onPointerenter=j=>{let D=j;O(e.onPointerOver,D,D.clientX,D.clientY),O(e.onPointerEnter,D,D.clientX,D.clientY)}),(e.onPointerOut||e.onPointerLeave)&&(G.onPointerleave=j=>{let D=j;O(e.onPointerOut,D,D.clientX,D.clientY),O(e.onPointerLeave,D,D.clientX,D.clientY)}),e.onPointerCancel&&(G.onPointercancel=j=>{let D=j;O(e.onPointerCancel,D,D.clientX,D.clientY),H=null});let Q=e.id?{"data-poly-mesh-id":e.id}:{};if(e.src&&a.loading.value&&a.polygons.value.length===0)return(0,U.h)("div",{ref:g,class:`polycss-mesh polycss-mesh-loading${e.class?` ${e.class}`:""}`,style:$,...Q,...G,...X},t.fallback?.()??[]);if(e.src&&a.error.value&&a.polygons.value.length===0)return(0,U.h)("div",{ref:g,class:`polycss-mesh polycss-mesh-error${e.class?` ${e.class}`:""}`,style:$,...Q,...G,...X},t.error?.({error:a.error.value})??[]);let ne=f.value,fe=t.polygon?ne.map((j,D)=>(0,U.h)("template",{key:D},t.polygon?.({polygon:j,index:D}))):w.value?[]:k.entries.value.map((j,D)=>{if(j)return at({entry:j,page:k.pages.value[j.pageIndex],textureLighting:p.value,solidPaintDefaults:V.value});let se=_.value[D];return!se||se.texture?null:(0,re.isProjectiveQuadPlan)(se)?ot({entry:se,textureLighting:p.value,solidPaintDefaults:V.value}):(0,re.isSolidTrianglePlan)(se)?tt({entry:se,textureLighting:p.value,solidPaintDefaults:V.value}):nt({entry:se,solidPaintDefaults:V.value})}),Me=t.default?.()??[],K=v.value,oe=K?[K]:[];return(0,U.h)("div",{ref:g,class:te,style:$,...Q,...G,...X},[...oe,...fe,...Me])}}});var pt=require("vue");var Cn=(0,pt.defineComponent)({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=(0,pt.computed)(()=>{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()=>(0,pt.h)(ae,{polygons:t.value,castShadow:!1,class:e.class?`polycss-ground ${e.class}`:"polycss-ground"})}});var En=require("vue");function lr(e){return typeof e=="function"?(0,En.computed)(()=>{let{texture:t,key:n}=e();return{texture:t,key:n}}):(0,En.computed)(()=>({texture:e.texture,key:e.key}))}var Te=require("vue");var li=4;function zt(e,t=li){let n=e.toFixed(t).replace(/\.?0+$/,"");return Number(n)===0||Object.is(Number(n),-0)?"0":`${n}px`}function si(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 ui({plan:e,material:t,uvRect:n,className:o,style:r,domAttrs:i,pointerEvents:a="auto"}){let{u0:u,u1:l,v0:c,v1:m}=n,f=l-u,d=m-c,h=1/f,p=1/d,P=Math.max(c,m),b=u/f,A=(1-P)/d,L={transform:`matrix3d(${e.canonicalMatrix})`,backgroundImage:`url(${t.texture})`,backgroundSize:`${zt(h)} ${zt(p)}`,backgroundPosition:`${zt(-b)} ${zt(-A)}`,pointerEvents:a==="none"?"none":void 0,...r},w=e.polygon.data?Object.fromEntries(Object.entries(e.polygon.data).map(([R,I])=>[`data-${R}`,String(I)])):{},y=o?.trim()||void 0;return(0,Te.h)("i",{class:y,style:L,...w,...i})}var Mn=(0,Te.defineComponent)({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=(0,Te.computed)(()=>e.textureLighting??e.context?.textureLighting??"baked"),o=(0,Te.computed)(()=>e.textureQuality??e.context?.textureQuality),r=(0,Te.computed)(()=>e.material?.texture??e.texture),i=(0,Te.computed)(()=>e.material&&e.uvs?si(e.uvs):null),a=(0,Te.computed)(()=>{let c=e.context?.tileSize??50;return Je({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=(0,Te.computed)(()=>i.value?[]:[a.value]),l=et(u,n,o);return()=>{let c=a.value,m=l.entries.value[0],f=[];e.position&&f.push(`translate3d(${e.position[0]}px, ${e.position[1]}px, ${e.position[2]}px)`),e.scale!==void 0&&(typeof e.scale=="number"?e.scale!==1&&f.push(`scale3d(${e.scale}, ${e.scale}, ${e.scale})`):f.push(`scale3d(${e.scale[0]}, ${e.scale[1]}, ${e.scale[2]})`)),e.rotation&&(e.rotation[0]&&f.push(`rotateX(${e.rotation[0]}deg)`),e.rotation[1]&&f.push(`rotateY(${e.rotation[1]}deg)`),e.rotation[2]&&f.push(`rotateZ(${e.rotation[2]}deg)`));let d=f.length>0?f.join(" "):void 0,h={};if(e.data)for(let[A,L]of Object.entries(e.data))h[`data-${A}`]=String(L);let p={...t,...h},P=Object.fromEntries(Object.entries(p).filter(([A])=>A!=="class"&&A!=="style")),b;return i.value&&e.material&&c?b=ui({plan:c,material:e.material,uvRect:i.value,className:p.class??void 0,style:p.style,domAttrs:P,pointerEvents:e.pointerEvents??"auto"}):m?b=at({entry:m,page:l.pages.value[m.pageIndex],textureLighting:n.value,className:p.class??void 0,style:p.style,domAttrs:P,pointerEvents:e.pointerEvents??"auto"}):c&&!c.texture&&(b=(0,re.isSolidTrianglePlan)(c)?tt({entry:c,textureLighting:n.value,className:p.class??void 0,style:p.style,domAttrs:P,pointerEvents:e.pointerEvents??"auto"}):(0,re.isProjectiveQuadPlan)(c)?ot({entry:c,textureLighting:n.value,className:p.class??void 0,style:p.style,domAttrs:P,pointerEvents:e.pointerEvents??"auto"}):nt({entry:c,className:p.class??void 0,style:p.style,domAttrs:P,pointerEvents:e.pointerEvents??"auto"})),b?d?(0,Te.h)("div",{class:"polycss-poly-wrapper",style:{transform:d,position:"absolute",transformStyle:"preserve-3d"}},[b]):b:null}}});var q=require("vue"),le=require("@layoutit/polycss-core");var Tn=(0,q.defineComponent)({name:"PolyBox",props:{size:{type:[Number,Array],default:void 0},center:{type:Array,default:void 0},min:{type:Array,default:void 0},max:{type:Array,default:void 0},color:{type:String,default:void 0},texture:{type:String,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},id:{type:String,default:void 0}},setup(e){let t=(0,q.computed)(()=>(0,le.boxPolygons)({size:e.size,center:e.center,min:e.min,max:e.max,color:e.color,texture:e.texture}));return()=>(0,q.h)(ae,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),An=(0,q.defineComponent)({name:"PolyPlane",props:{axis:{type:Number,required:!0},size:{type:Number,default:void 0},along:{type:Number,default:void 0},color:{type:String,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},id:{type:String,default:void 0}},setup(e){let t=(0,q.computed)(()=>(0,le.planePolygons)({axis:e.axis,size:e.size,along:e.along,color:e.color}));return()=>(0,q.h)(ae,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),Ln=(0,q.defineComponent)({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=(0,q.computed)(()=>(0,le.ringPolygons)({axis:e.axis,radius:e.radius,halfThickness:e.halfThickness,segments:e.segments,color:e.color}));return()=>(0,q.h)(ae,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),wn=(0,q.defineComponent)({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=(0,q.computed)(()=>(0,le.octahedronPolygons)({center:e.center,size:e.size,color:e.color}));return()=>(0,q.h)(ae,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),Rn=(0,q.defineComponent)({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=(0,q.computed)(()=>(0,le.tetrahedronPolygons)({size:e.size,color:e.color}));return()=>(0,q.h)(ae,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),Dn=(0,q.defineComponent)({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=(0,q.computed)(()=>(0,le.icosahedronPolygons)({size:e.size,color:e.color}));return()=>(0,q.h)(ae,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),On=(0,q.defineComponent)({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=(0,q.computed)(()=>(0,le.dodecahedronPolygons)({size:e.size,color:e.color}));return()=>(0,q.h)(ae,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),kn=(0,q.defineComponent)({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=(0,q.computed)(()=>(0,le.spherePolygons)({radius:e.radius,subdivisions:e.subdivisions,color:e.color}));return()=>(0,q.h)(ae,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),In=(0,q.defineComponent)({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=(0,q.computed)(()=>(0,le.cylinderPolygons)({radius:e.radius,radiusTop:e.radiusTop,height:e.height,radialSegments:e.radialSegments,color:e.color}));return()=>(0,q.h)(ae,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),Fn=(0,q.defineComponent)({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=(0,q.computed)(()=>(0,le.conePolygons)({radius:e.radius,height:e.height,radialSegments:e.radialSegments,color:e.color}));return()=>(0,q.h)(ae,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}}),Vn=(0,q.defineComponent)({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=(0,q.computed)(()=>(0,le.torusPolygons)({radius:e.radius,tube:e.tube,radialSegments:e.radialSegments,tubularSegments:e.tubularSegments,color:e.color}));return()=>(0,q.h)(ae,{polygons:t.value,position:e.position,scale:e.scale,rotation:e.rotation,autoCenter:e.autoCenter,id:e.id})}});var Pe=require("vue"),_n=require("@layoutit/polycss-core");var ci=150,sr=4,di=513e-6,mi=10,fi=3,ur=16.67,pi=50,cr=.1,dr=10,mr=0,fr=5e3,yi=.3,gi=.05;function hi(e){return e===!0?-1:e===void 0||e===!1?1:e}function Pi(e,t,n,o,r){let i=hi(r),a=e/sr*i,u=t/sr*i;return{rotX:Math.max(0,Math.min(100,n-u)),rotY:((o-a)%360+360)%360}}function pr(e,t,n,o,r){let i=Math.max(.01,n),a=Math.max(.1,Math.cos(o*Math.PI/180)),u=-e/(i*_n.BASE_TILE),l=-t/(i*_n.BASE_TILE*a),c=-r*Math.PI/180,m=Math.cos(c),f=Math.sin(c);return{dWorldX:l*m-u*f,dWorldY:l*f+u*m}}var Bn=(0,Pe.defineComponent)({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:cr},maxZoom:{type:Number,default:dr},minDistance:{type:Number,default:mr},maxDistance:{type:Number,default:fr},animate:{type:[Boolean,Object],default:!1}},emits:{change:e=>!0,"interaction-start":e=>!0,"interaction-end":e=>!0},setup(e,{emit:t}){let n=(0,Pe.inject)(ie,null);if(!n)return typeof console<"u"&&console.warn("[polycss] <PolyOrbitControls> must be used inside <PolyCamera>."),()=>null;let{store:o,cameraRef:r,cameraElRef:i,applyTransformDirect:a}=n,u=()=>({rotX:r.value.state.rotX,rotY:r.value.state.rotY,zoom:r.value.state.zoom,target:r.value.state.target,distance:r.value.state.distance}),l=()=>{t("change",u())},c=()=>{t("interaction-start",u())},m=()=>{t("interaction-end",u())},f=null,d={x:0,y:0},h=(0,Pe.ref)(!1),p=null,P=null,b=null;function A(){let y=i.value;if(!y)return;let R=!1,I={x:0,y:0},z=s=>{if(e.drag&&f===null&&s.isPrimary!==!1){s.preventDefault(),f=s.pointerId,d={x:s.clientX,y:s.clientY},y.style.cursor="grabbing";try{s.target.setPointerCapture(s.pointerId)}catch{}e.animate&&e.animate.pauseOnInteraction!==!1&&(h.value=!0),c()}},_=s=>{if(f===null||s.pointerId!==f||!e.drag)return;s.preventDefault();let g=s.clientX-d.x,S=s.clientY-d.y;d={x:s.clientX,y:s.clientY};let T=r.value,E=T.state;if(s.shiftKey){let{dWorldX:H,dWorldY:Y}=pr(g,S,E.zoom,E.rotX,E.rotY);T.update({target:[E.target[0]+H,E.target[1]+Y,E.target[2]]})}else{let{rotX:H,rotY:Y}=Pi(g,S,E.rotX,E.rotY,e.invert);T.update({rotX:H,rotY:Y})}a(),o.updateCameraFromRef(T),l()},C=s=>{if(f===s.pointerId){f=null,y.style.cursor=e.drag?"grab":"";try{s.target.releasePointerCapture(s.pointerId)}catch{}h.value=!1,m()}},k=s=>{s.preventDefault()},V=s=>{s.button===2&&(R=!0,I={x:s.clientX,y:s.clientY})},N=s=>{if(!R||!e.drag)return;let g=s.clientX-I.x,S=s.clientY-I.y;I={x:s.clientX,y:s.clientY};let T=r.value,E=T.state,{dWorldX:H,dWorldY:Y}=pr(g,S,E.zoom,E.rotX,E.rotY);T.update({target:[E.target[0]+H,E.target[1]+Y,E.target[2]]}),a(),o.updateCameraFromRef(T),l()},v=s=>{s.button===2&&R&&(R=!1,m())};y.style.cursor="grab",y.style.touchAction="none",y.style.userSelect="none",y.addEventListener("pointerdown",z),y.addEventListener("pointermove",_),y.addEventListener("pointerup",C),y.addEventListener("pointercancel",C),y.addEventListener("contextmenu",k),y.addEventListener("mousedown",V),y.addEventListener("mousemove",N),y.addEventListener("mouseup",v),p=()=>{y.removeEventListener("pointerdown",z),y.removeEventListener("pointermove",_),y.removeEventListener("pointerup",C),y.removeEventListener("pointercancel",C),y.removeEventListener("contextmenu",k),y.removeEventListener("mousedown",V),y.removeEventListener("mousemove",N),y.removeEventListener("mouseup",v),y.style.cursor="",y.style.touchAction="",y.style.userSelect=""}}function L(){let y=i.value;if(!y)return;let R=!1,I=null,z=_=>{if(!e.wheel)return;_.preventDefault();let C=_.deltaMode===1?16:_.deltaMode===2?100:1,k=_.deltaY*C;_.ctrlKey?k*=mi:k*=fi;let V=r.value;if(e.dolly){let N=e.minDistance??mr,v=e.maxDistance??fr,s=Math.max(N,Math.min(v,V.state.distance+k*gi));V.update({distance:s})}else{let N=Math.exp(-k*di),v=e.minZoom??cr,s=e.maxZoom??dr,g=Math.max(v,Math.min(s,V.state.zoom*N));V.update({zoom:g})}a(),o.updateCameraFromRef(V),R||(R=!0,c()),l(),I!==null&&clearTimeout(I),I=setTimeout(()=>{I=null,R=!1,m()},ci)};y.addEventListener("wheel",z,{passive:!1}),P=()=>{y.removeEventListener("wheel",z),I!==null&&clearTimeout(I)}}function w(){let y=null,R=!1,I=0,z=_=>{if(R)return;let C=e.animate;if(!C){y=requestAnimationFrame(z);return}if(h.value)I=_;else{let k=Math.min(pi,I?_-I:ur);I=_;let N=(C.speed??yi)*(k/ur),v=r.value,s=v.state;if(C.axis==="x"){let g=((s.rotX+N)%360+360)%360;v.update({rotX:g})}else{let g=((s.rotY+N)%360+360)%360;v.update({rotY:g})}a(),o.updateCameraFromRef(v),l()}y=requestAnimationFrame(z)};y=requestAnimationFrame(z),b=()=>{R=!0,y!==null&&cancelAnimationFrame(y),b=null}}return(0,Pe.onMounted)(()=>{e.drag&&A(),e.wheel&&L(),e.animate&&w()}),(0,Pe.onBeforeUnmount)(()=>{p?.(),P?.(),b?.(),p=null,P=null}),(0,Pe.watch)(()=>e.drag,y=>{y&&!p&&A(),!y&&p&&(p(),p=null)}),(0,Pe.watch)(()=>e.wheel,y=>{y&&!P&&L(),!y&&P&&(P(),P=null)}),(0,Pe.watch)(()=>!!e.animate,y=>{y&&!b&&w(),!y&&b&&b()}),()=>null}});var xe=require("vue"),zn=require("@layoutit/polycss-core");var xi=150,yr=4,bi=513e-6,vi=10,Si=3,gr=16.67,Ci=50,hr=.1,Pr=10,xr=0,br=5e3,Ei=.3,Mi=.05;function Ti(e){return e===!0?-1:e===void 0||e===!1?1:e}function vr(e,t,n,o,r){let i=Ti(r),a=e/yr*i,u=t/yr*i;return{rotX:Math.max(0,Math.min(100,n-u)),rotY:((o-a)%360+360)%360}}function Ai(e,t,n,o,r){let i=Math.max(.01,n),a=Math.max(.1,Math.cos(o*Math.PI/180)),u=-e/(i*zn.BASE_TILE),l=-t/(i*zn.BASE_TILE*a),c=-r*Math.PI/180,m=Math.cos(c),f=Math.sin(c);return{dWorldX:l*m-u*f,dWorldY:l*f+u*m}}var Hn=(0,xe.defineComponent)({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:hr},maxZoom:{type:Number,default:Pr},minDistance:{type:Number,default:xr},maxDistance:{type:Number,default:br},animate:{type:[Boolean,Object],default:!1}},emits:{change:e=>!0,"interaction-start":e=>!0,"interaction-end":e=>!0},setup(e,{emit:t}){let n=(0,xe.inject)(ie,null);if(!n)return typeof console<"u"&&console.warn("[polycss] <PolyMapControls> must be used inside <PolyCamera>."),()=>null;let{store:o,cameraRef:r,cameraElRef:i,applyTransformDirect:a}=n,u=()=>({rotX:r.value.state.rotX,rotY:r.value.state.rotY,zoom:r.value.state.zoom,target:r.value.state.target,distance:r.value.state.distance}),l=()=>{t("change",u())},c=()=>{t("interaction-start",u())},m=()=>{t("interaction-end",u())},f=null,d={x:0,y:0},h=(0,xe.ref)(!1),p=null,P=null,b=null;function A(){let y=i.value;if(!y)return;let R=!1,I={x:0,y:0},z=s=>{if(e.drag&&f===null&&s.isPrimary!==!1){s.preventDefault(),f=s.pointerId,d={x:s.clientX,y:s.clientY},y.style.cursor="grabbing";try{s.target.setPointerCapture(s.pointerId)}catch{}e.animate&&e.animate.pauseOnInteraction!==!1&&(h.value=!0),c()}},_=s=>{if(f===null||s.pointerId!==f||!e.drag)return;s.preventDefault();let g=s.clientX-d.x,S=s.clientY-d.y;d={x:s.clientX,y:s.clientY};let T=r.value,E=T.state;if(s.shiftKey){let{rotX:H,rotY:Y}=vr(g,S,E.rotX,E.rotY,e.invert);T.update({rotX:H,rotY:Y})}else{let{dWorldX:H,dWorldY:Y}=Ai(g,S,E.zoom,E.rotX,E.rotY);T.update({target:[E.target[0]+H,E.target[1]+Y,E.target[2]]})}a(),o.updateCameraFromRef(T),l()},C=s=>{if(f===s.pointerId){f=null,y.style.cursor=e.drag?"grab":"";try{s.target.releasePointerCapture(s.pointerId)}catch{}h.value=!1,m()}},k=s=>{s.preventDefault()},V=s=>{s.button===2&&(R=!0,I={x:s.clientX,y:s.clientY})},N=s=>{if(!R||!e.drag)return;let g=s.clientX-I.x,S=s.clientY-I.y;I={x:s.clientX,y:s.clientY};let T=r.value,E=T.state,{rotX:H,rotY:Y}=vr(g,S,E.rotX,E.rotY,e.invert);T.update({rotX:H,rotY:Y}),a(),o.updateCameraFromRef(T),l()},v=s=>{s.button===2&&R&&(R=!1,m())};y.style.cursor="grab",y.style.touchAction="none",y.style.userSelect="none",y.addEventListener("pointerdown",z),y.addEventListener("pointermove",_),y.addEventListener("pointerup",C),y.addEventListener("pointercancel",C),y.addEventListener("contextmenu",k),y.addEventListener("mousedown",V),y.addEventListener("mousemove",N),y.addEventListener("mouseup",v),p=()=>{y.removeEventListener("pointerdown",z),y.removeEventListener("pointermove",_),y.removeEventListener("pointerup",C),y.removeEventListener("pointercancel",C),y.removeEventListener("contextmenu",k),y.removeEventListener("mousedown",V),y.removeEventListener("mousemove",N),y.removeEventListener("mouseup",v),y.style.cursor="",y.style.touchAction="",y.style.userSelect=""}}function L(){let y=i.value;if(!y)return;let R=!1,I=null,z=_=>{if(!e.wheel)return;_.preventDefault();let C=_.deltaMode===1?16:_.deltaMode===2?100:1,k=_.deltaY*C;_.ctrlKey?k*=vi:k*=Si;let V=r.value;if(e.dolly){let N=e.minDistance??xr,v=e.maxDistance??br,s=Math.max(N,Math.min(v,V.state.distance+k*Mi));V.update({distance:s})}else{let N=Math.exp(-k*bi),v=e.minZoom??hr,s=e.maxZoom??Pr,g=Math.max(v,Math.min(s,V.state.zoom*N));V.update({zoom:g})}a(),o.updateCameraFromRef(V),R||(R=!0,c()),l(),I!==null&&clearTimeout(I),I=setTimeout(()=>{I=null,R=!1,m()},xi)};y.addEventListener("wheel",z,{passive:!1}),P=()=>{y.removeEventListener("wheel",z),I!==null&&clearTimeout(I)}}function w(){let y=null,R=!1,I=0,z=_=>{if(R)return;let C=e.animate;if(!C){y=requestAnimationFrame(z);return}if(h.value)I=_;else{let k=Math.min(Ci,I?_-I:gr);I=_;let N=(C.speed??Ei)*(k/gr),v=r.value,s=v.state;if(C.axis==="x"){let g=((s.rotX+N)%360+360)%360;v.update({rotX:g})}else{let g=((s.rotY+N)%360+360)%360;v.update({rotY:g})}a(),o.updateCameraFromRef(v),l()}y=requestAnimationFrame(z)};y=requestAnimationFrame(z),b=()=>{R=!0,y!==null&&cancelAnimationFrame(y),b=null}}return(0,xe.onMounted)(()=>{e.drag&&A(),e.wheel&&L(),e.animate&&w()}),(0,xe.onBeforeUnmount)(()=>{p?.(),P?.(),b?.(),p=null,P=null}),(0,xe.watch)(()=>e.drag,y=>{y&&!p&&A(),!y&&p&&(p(),p=null)}),(0,xe.watch)(()=>e.wheel,y=>{y&&!P&&L(),!y&&P&&(P(),P=null)}),(0,xe.watch)(()=>!!e.animate,y=>{y&&!b&&w(),!y&&b&&b()}),()=>null}});var ee=require("vue"),be=require("@layoutit/polycss-core");var Ht="#ff3653",Nt="#8adb00",Yt="#2c8fff",Li=.6,wi=.8,Ri=1,st=50,Sr=60,Di=.6,Oi=.0125,ki=.15,Ii=.04,Fi=1,Cr=.02,Nn=1.04,Vi=.1,_i=.25,Rr=1e-4,Tt={0:1,1:0,2:2},Er=[{cssAxis:0,sign:1,key:"x",color:Ht},{cssAxis:0,sign:-1,key:"-x",color:Ht},{cssAxis:1,sign:1,key:"y",color:Nt},{cssAxis:1,sign:-1,key:"-y",color:Nt},{cssAxis:2,sign:1,key:"z",color:Yt},{cssAxis:2,sign:-1,key:"-z",color:Yt}],Mr=[{cssAxis:0,key:"x",color:Ht},{cssAxis:1,key:"y",color:Nt},{cssAxis:2,key:"z",color:Yt}],Tr=[{perpAxis:2,axisA:0,axisB:1,key:"xy",color:Yt},{perpAxis:1,axisA:0,axisB:2,key:"xz",color:Nt},{perpAxis:0,axisA:1,axisB:2,key:"yz",color:Ht}];function Yn(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 Xt(e,t){return!t||t<=0?e:Math.round(e/t)*t}function Bi(e){return e.replace("-","")[0]}function Xn(e,t,n,o){let r=n*Math.PI/180,i=o*Math.PI/180,a=[0,0,0];a[e]=t;let u=a[0]*Math.sin(i)+a[1]*Math.cos(i),l=a[2];return u*Math.sin(r)+l*Math.cos(r)<0}function zi(e){if(e.length===0)return Sr;let t=1/0,n=1/0,o=1/0,r=-1/0,i=-1/0,a=-1/0;for(let u of e)for(let l of u.vertices)l[0]<t&&(t=l[0]),l[0]>r&&(r=l[0]),l[1]<n&&(n=l[1]),l[1]>i&&(i=l[1]),l[2]<o&&(o=l[2]),l[2]>a&&(a=l[2]);return Number.isFinite(t)?Math.max(r-t,i-n,a-o)*st*Di:Sr}function Hi(e){if(e.length===0)return[0,0,0];let t=1/0,n=1/0,o=1/0,r=-1/0,i=-1/0,a=-1/0;for(let u of e)for(let l of u.vertices)l[0]<t&&(t=l[0]),l[0]>r&&(r=l[0]),l[1]<n&&(n=l[1]),l[1]>i&&(i=l[1]),l[2]<o&&(o=l[2]),l[2]>a&&(a=l[2]);return Number.isFinite(t)?[(n+i)/2*st,(t+r)/2*st,(o+a)/2*st]:[0,0,0]}function Ar(e){let t=e.shaftLengthCss,n=[0,0,0];n[e.cssAxis]=e.sign;let o=e.wrapper.ownerDocument.createElement("div");o.style.position="absolute",o.style.left="0",o.style.top="0",o.style.width="0",o.style.height="0",o.style.transform=`translate3d(${n[0]*t}px, ${n[1]*t}px, ${n[2]*t}px)`,e.wrapper.appendChild(o);let r=e.wrapper.getBoundingClientRect(),i=o.getBoundingClientRect();e.wrapper.removeChild(o);let a=(i.left-r.left)/t,u=(i.top-r.top)/t,l=a*a+u*u;if(l<Rr)return;let c=e.target.getPosition()??[0,0,0];e.onMouseDown?.(),e.onDraggingChanged?.(!0);let m=d=>{let h=d.clientX-e.startClientX,p=d.clientY-e.startClientY,P=(h*a+p*u)/l;P=Xt(P,e.translationSnap);let b=[c[0]+P*n[0],c[1]+P*n[1],c[2]+P*n[2]];e.onObjectChange?.({object:e.target,position:b}),e.onChange?.()},f=()=>{window.removeEventListener("pointermove",m),window.removeEventListener("pointerup",f),window.removeEventListener("pointercancel",f);let d=h=>{h.stopPropagation(),h.stopImmediatePropagation()};window.addEventListener("click",d,{capture:!0,once:!0}),setTimeout(()=>window.removeEventListener("click",d,!0),0),e.onMouseUp?.(),e.onDraggingChanged?.(!1)};window.addEventListener("pointermove",m),window.addEventListener("pointerup",f),window.addEventListener("pointercancel",f)}function Lr(e){let t=[0,0,0];t[e.axisA]=1;let n=[0,0,0];n[e.axisB]=1;let o=e.probeDistanceCss;function r(f){let d=e.wrapper.ownerDocument.createElement("div");d.style.position="absolute",d.style.left="0",d.style.top="0",d.style.width="0",d.style.height="0",d.style.transform=`translate3d(${f[0]*o}px, ${f[1]*o}px, ${f[2]*o}px)`,e.wrapper.appendChild(d);let h=e.wrapper.getBoundingClientRect(),p=d.getBoundingClientRect();return e.wrapper.removeChild(d),{x:(p.left-h.left)/o,y:(p.top-h.top)/o}}let i=r(t),a=r(n),u=i.x*a.y-a.x*i.y;if(Math.abs(u)<Rr)return;let l=e.target.getPosition()??[0,0,0];e.onMouseDown?.(),e.onDraggingChanged?.(!0);let c=f=>{let d=f.clientX-e.startClientX,h=f.clientY-e.startClientY,p=(a.y*d-a.x*h)/u,P=(-i.y*d+i.x*h)/u;p=Xt(p,e.translationSnap),P=Xt(P,e.translationSnap);let b=[l[0]+p*t[0]+P*n[0],l[1]+p*t[1]+P*n[1],l[2]+p*t[2]+P*n[2]];e.onObjectChange?.({object:e.target,position:b}),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 wr(e){let t=e.wrapper.getBoundingClientRect(),n=t.left,o=t.top,r=Math.atan2(e.startClientY-o,e.startClientX-n),i=0,a=e.target.getRotation()??[0,0,0],u=(0,be.quatFromEulerXYZ)(a);e.onMouseDown?.(),e.onDraggingChanged?.(!0);let l=m=>{let f=Math.atan2(m.clientY-o,m.clientX-n),d=f-r;d>Math.PI?d-=2*Math.PI:d<-Math.PI&&(d+=2*Math.PI),i+=d,r=f;let h=i*180/Math.PI;h=Xt(h,e.rotationSnap);let p=[0,0,0];p[e.cssAxis]=1;let P=(0,be.quatFromAxisAngle)(p,h*Math.PI/180),b=(0,be.eulerXYZFromQuat)((0,be.quatMultiply)(P,u));e.onObjectChange?.({object:e.target,rotation:b}),e.onChange?.()},c=()=>{window.removeEventListener("pointermove",l),window.removeEventListener("pointerup",c),window.removeEventListener("pointercancel",c);let m=f=>{f.stopPropagation(),f.stopImmediatePropagation()};window.addEventListener("click",m,{capture:!0,once:!0}),setTimeout(()=>window.removeEventListener("click",m,!0),0),e.onMouseUp?.(),e.onDraggingChanged?.(!1),e.target.rebakeAtlas()};window.addEventListener("pointermove",l),window.addEventListener("pointerup",c),window.addEventListener("pointercancel",c)}function Ni(e){return!!e&&typeof e=="object"&&"value"in e}function Yi(e){return e?Ni(e)?e.value??null:e:null}var jn=(0,ee.defineComponent)({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=(0,ee.ref)(null),o=(0,ee.ref)(null),r=(0,ee.ref)(new Map),i=(0,ee.computed)(()=>Yi(e.object)),a=(0,ee.ref)(0);(0,ee.onMounted)(()=>{a.value++});let u=(0,ee.ref)(0),l=(0,ee.inject)(ie,void 0),c=null;(0,ee.onMounted)(()=>{let s=l?.store;s&&(c=s.subscribe(()=>{u.value++}))}),(0,ee.onBeforeUnmount)(()=>{c?.()});function m(){u.value;let s=l?.store.getState().cameraState;return{rotX:s?.rotX??65,rotY:s?.rotY??45}}let f=(0,ee.computed)(()=>(a.value,zi(i.value?.getPolygons()??[]))),d=(0,ee.computed)(()=>f.value*e.size);function h(s){return o.value===s?Ri:n.value===s?wi:Li}function p(){t("change")}function P(s){t("objectChange",s)}function b(s){t("draggingChanged",s)}function A(){t("mouseDown")}function L(){t("mouseUp")}let w=(0,ee.inject)(ie,void 0),y=null;(0,ee.onMounted)(()=>{let s=w?.cameraElRef.value;if(!s)return;let g=S=>{let T=i.value;if(!T||!e.enabled||S.target?.closest(".polycss-transform-gizmo"))return;let H={x:e.showX,y:e.showY,z:e.showZ};if(e.mode==="translate")for(let O of Tr){let M=["x","y","z"][O.axisA],B=["x","y","z"][O.axisB];if(!H[M]||!H[B])continue;let F=document.querySelector(`.polycss-transform-plane--${O.key}`);if(!F||!lt(F,S.clientX,S.clientY))continue;S.preventDefault(),S.stopPropagation();let $=F.closest("[data-poly-transform-controls]");if(!$)return;o.value=O.key,Lr({axisA:O.axisA,axisB:O.axisB,probeDistanceCss:d.value,wrapper:$,target:T,startClientX:S.clientX,startClientY:S.clientY,translationSnap:e.translationSnap,onChange:p,onObjectChange:P,onMouseDown:A,onMouseUp:L,onDraggingChanged:X=>{X||(o.value=null),b(X)}});return}let Y=e.mode==="translate"?Er:Mr;for(let O of Y){let M=O.key.replace("-","")[0];if(!H[M])continue;let B=document.querySelector(`.polycss-transform-${e.mode==="translate"?"arrow":"ring"}--${O.key}`);if(!B||!(e.mode==="rotate"?lt(B,S.clientX,S.clientY):lt(B,S.clientX,S.clientY)))continue;S.preventDefault(),S.stopPropagation();let $=B.closest("[data-poly-transform-controls]");if(!$)return;if(o.value=O.key,e.mode==="translate"){let X=O;Ar({cssAxis:X.cssAxis,sign:X.sign,shaftLengthCss:d.value,wrapper:$,target:T,startClientX:S.clientX,startClientY:S.clientY,translationSnap:e.translationSnap,onChange:p,onObjectChange:P,onMouseDown:A,onMouseUp:L,onDraggingChanged:te=>{te||(o.value=null),b(te)}})}else wr({cssAxis:O.cssAxis,wrapper:$,target:T,startClientX:S.clientX,startClientY:S.clientY,rotationSnap:e.rotationSnap,onChange:p,onObjectChange:P,onMouseDown:A,onMouseUp:L,onDraggingChanged:X=>{X||(o.value=null),b(X)}});return}};s.addEventListener("pointerdown",g),y=()=>s.removeEventListener("pointerdown",g)}),(0,ee.onBeforeUnmount)(()=>{y?.()});let R=(0,ee.computed)(()=>{if(e.mode!=="translate")return[];a.value;let g=d.value/st,{rotX:S,rotY:T}=m();return Er.filter(E=>({x:e.showX,y:e.showY,z:e.showZ})[Bi(E.key)]).map(E=>{let H=h(E.key),Y=Xn(E.cssAxis,E.sign,S,T);return{spec:E,polygons:(0,be.arrowPolygons)({axis:Tt[E.cssAxis],sign:E.sign,shaftLength:g,shaftHalfThickness:g*Oi,headLength:g*ki,headHalfThickness:g*Ii,color:Yn(E.color,H),shaft:!Y})}})}),I=(0,ee.computed)(()=>{if(e.mode!=="translate")return[];a.value;let g=d.value/st,S={x:e.showX,y:e.showY,z:e.showZ},T=["x","y","z"],{rotX:E,rotY:H}=m(),Y=g*_i;return Tr.filter(O=>S[T[O.axisA]]&&S[T[O.axisB]]).map(O=>{let M=h(O.key),B=Tt[O.perpAxis],F=(B+1)%3,$=(B+2)%3,X=Tt[F],te=Tt[$],G=Xn(X,1,E,H)?-1:1,Q=Xn(te,1,E,H)?-1:1;return{spec:O,polygons:(0,be.planePolygons)({axis:B,size:g*Vi,offset:[G*Y,Q*Y],color:Yn(O.color,M)})}})}),z=(0,ee.computed)(()=>{if(e.mode!=="rotate")return[];a.value;let S=d.value*Fi/st*Nn;return Mr.filter(T=>({x:e.showX,y:e.showY,z:e.showZ})[T.key]).map(T=>{let E=h(T.key);return{spec:T,polygons:(0,be.ringQuadPolygons)({axis:Tt[T.cssAxis],outerRadius:S,color:Yn(T.color,E)})}})}),_=(1-Cr)/Nn,C=(1+Cr)/Nn;function k(s){return g=>{if(!e.enabled)return;let S=i.value;if(!S)return;g.stopPropagation();let E=g.eventObject.element?.closest("[data-poly-transform-controls]");E&&(o.value=s.key,Ar({cssAxis:s.cssAxis,sign:s.sign,shaftLengthCss:d.value,wrapper:E,target:S,startClientX:g.nativeEvent.clientX,startClientY:g.nativeEvent.clientY,translationSnap:e.translationSnap,onChange:p,onObjectChange:P,onMouseDown:A,onMouseUp:L,onDraggingChanged:H=>{H||(o.value=null),b(H)}}))}}function V(s){return g=>{if(!e.enabled)return;let S=i.value;if(!S)return;g.stopPropagation();let E=g.eventObject.element?.closest("[data-poly-transform-controls]");E&&(o.value=s.key,Lr({axisA:s.axisA,axisB:s.axisB,probeDistanceCss:d.value,wrapper:E,target:S,startClientX:g.nativeEvent.clientX,startClientY:g.nativeEvent.clientY,translationSnap:e.translationSnap,onChange:p,onObjectChange:P,onMouseDown:A,onMouseUp:L,onDraggingChanged:H=>{H||(o.value=null),b(H)}}))}}function N(s){return g=>{if(!e.enabled)return;let S=i.value;if(!S)return;let T=g.eventObject.element;g.stopPropagation();let E=T?.closest("[data-poly-transform-controls]");E&&(o.value=s.key,wr({cssAxis:s.cssAxis,wrapper:E,target:S,startClientX:g.nativeEvent.clientX,startClientY:g.nativeEvent.clientY,rotationSnap:e.rotationSnap,onChange:p,onObjectChange:P,onMouseDown:A,onMouseUp:L,onDraggingChanged:H=>{H||(o.value=null),b(H)}}))}}function v(s){return{onPointerOver:()=>{n.value=s},onPointerOut:()=>{n.value===s&&(n.value=null)}}}return()=>{let s=i.value;if(!s)return null;let g=s.getPosition()??[0,0,0],S=Hi(s.getPolygons()),T=g[0]+S[0],E=g[1]+S[1],H=g[2]+S[2],Y={transform:`translate3d(${T}px, ${E}px, ${H}px)`,position:"absolute",transformStyle:"preserve-3d",zIndex:1e3},O=e.mode==="translate"?[...R.value.map(({spec:M,polygons:B})=>(0,ee.h)(ae,{key:`arrow-${M.key}`,polygons:B,class:`polycss-transform-gizmo polycss-transform-arrow polycss-transform-arrow--${M.key}`,textureLighting:"baked",onPointerDown:k(M),...v(M.key)})),...I.value.map(({spec:M,polygons:B})=>(0,ee.h)(ae,{key:`plane-${M.key}`,polygons:B,class:`polycss-transform-gizmo polycss-transform-plane polycss-transform-plane--${M.key}`,textureLighting:"baked",onPointerDown:V(M),...v(M.key)}))]:z.value.map(({spec:M,polygons:B})=>(0,ee.h)(ae,{key:M.key,polygons:B,class:`polycss-transform-gizmo polycss-transform-ring polycss-transform-ring--${M.key}`,style:{"--ring-inner-ratio":_,"--ring-outer-ratio":C},textureLighting:"baked",onPointerDown:N(M),...v(M.key)}));return(0,ee.h)("div",{class:"polycss-transform-controls","data-poly-transform-controls":"","data-poly-mode":e.mode,"data-poly-space":e.space,style:Y},O)}}});var Oe=require("vue"),Or=require("@layoutit/polycss-core");var Xi={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 $n(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 kr=new Set(["KeyW","ArrowUp"]),Ir=new Set(["KeyS","ArrowDown"]),Fr=new Set(["KeyA","ArrowLeft"]),Vr=new Set(["KeyD","ArrowRight"]),_r=new Set(["Space"]),Un=new Set(["ControlLeft","ControlRight"]);function Dr(e){return kr.has(e)||Ir.has(e)||Fr.has(e)||Vr.has(e)||_r.has(e)||Un.has(e)}function ji(){return{change:[],start:[],end:[]}}function yt(e,t){let n=[...e[t]];for(let o of n)try{o()}catch{}}var Wn=(0,Oe.defineComponent)({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=(0,Oe.inject)(ie,null);if(!o)return typeof console<"u"&&console.warn("[polycss] <PolyFirstPersonControls> must be used inside <PolyCamera>."),n({}),()=>null;let{store:r,cameraRef:i,cameraElRef:a,applyTransformDirect:u}=o,l=$n(Xi,e),c=[0,0,0],m=null,f=0,d=!1,h=!1,p=!1,P=new Set,b=0,A=0,L=ji();function w(s,g){let S=s*Math.PI/180,T=g*Math.PI/180;return[-Math.sin(S)*Math.cos(T),-Math.sin(S)*Math.sin(T),-Math.cos(S)]}function y(){let s=a.value,g=s?getComputedStyle(s).perspective:"",S=parseFloat(g);return(Number.isFinite(S)&&S>0?S:8e3)/Or.BASE_TILE}function R(){let s=i.value.state,g=w(s.rotX??90,s.rotY??0),S=y();return[c[0]+g[0]*S,c[1]+g[1]*S,c[2]+g[2]*S]}function I(){let s=R(),g=i.value;g.update({target:s}),u(),r.updateCameraFromRef(g)}let z=.05;function _(s){if(m===null||d)return;let g=Math.min(z,f?(s-f)/1e3:.0167);if(f=s,l.enabled){let S=!1,T=i.value.state;if(l.moveEnabled){let O=0,M=0;for(let B of P)kr.has(B)?O+=1:Ir.has(B)?O-=1:Vr.has(B)?M+=1:Fr.has(B)&&(M-=1);if(O!==0||M!==0){let F=(T.rotY??0)*Math.PI/180,$=-Math.cos(F),X=-Math.sin(F),te=-Math.sin(F),G=Math.cos(F),Q=Math.hypot(O,M)||1,ne=l.moveSpeed*g;c[0]+=($*O+te*M)/Q*ne,c[1]+=(X*O+G*M)/Q*ne,S=!0}}let H=l.crouchEnabled&&(P.has("ControlLeft")||P.has("ControlRight"))?l.crouchHeight:l.eyeHeight;l.jumpEnabled&&(b!==0||A>0)?(b-=l.gravity*g,A+=b*g,A<=0&&(A=0,b=0)):l.jumpEnabled||(A=0,b=0);let Y=l.groundZ+H+A;if(Math.abs(c[2]-Y)>1e-4&&(c[2]=Y,S=!0),S){let O=R(),M=i.value;M.update({target:O}),u(),r.updateCameraFromRef(M),yt(L,"change");try{t("change",[c[0],c[1],c[2]])}catch{}}}m=requestAnimationFrame(_)}function C(){m!==null||d||(f=0,m=requestAnimationFrame(_))}function k(){m!==null&&(cancelAnimationFrame(m),m=null)}let V=null;function N(){let s=a.value;if(!s)return;let g=s.ownerDocument??document,S=g.defaultView??globalThis,T=()=>{if(!(!l.enabled||!l.lookEnabled||d||h))try{s.requestPointerLock()}catch{}},E=()=>{let X=g.pointerLockElement===s;if(X!==h){if(h=X,X){p=!0,yt(L,"start");try{t("interaction-start",[c[0],c[1],c[2]])}catch{}}else if(p){p=!1,yt(L,"end");try{t("interaction-end",[c[0],c[1],c[2]])}catch{}}}},H=X=>{if(!h||d||!l.enabled||!l.lookEnabled)return;let te=X.movementX??0,G=X.movementY??0;if(te===0&&G===0)return;let Q=i.value,ne=Q.state,fe=l.lookSensitivity,Me=l.invertY?-1:1,K=(((ne.rotY??0)-te*fe)%360+360)%360,oe=(ne.rotX??90)-G*fe*Me;oe<l.minPitch?oe=l.minPitch:oe>l.maxPitch&&(oe=l.maxPitch);let j=w(oe,K),D=y(),se=[c[0]+j[0]*D,c[1]+j[1]*D,c[2]+j[2]*D];Q.update({rotX:oe,rotY:K,target:se}),u(),r.updateCameraFromRef(Q),yt(L,"change");try{t("change",[c[0],c[1],c[2]])}catch{}},Y=X=>{if(!(!l.enabled||d)&&Dr(X.code)&&!(!h&&!l.moveEnabled)){if(_r.has(X.code)){if(!l.jumpEnabled)return;X.preventDefault(),!P.has(X.code)&&b===0&&A===0&&(b=l.jumpVelocity),P.add(X.code);return}Un.has(X.code)&&!l.crouchEnabled||!l.moveEnabled&&!Un.has(X.code)||(X.preventDefault(),P.add(X.code))}},O=X=>{Dr(X.code)&&P.delete(X.code)},M=()=>{P.clear()};s.addEventListener("click",T),g.addEventListener("pointerlockchange",E),g.addEventListener("mousemove",H),S.addEventListener("keydown",Y),S.addEventListener("keyup",O),S.addEventListener("blur",M);let B=S.getComputedStyle(s).perspective,F=parseFloat(B),$=Number.isFinite(F)&&F>0?F:2e3;s.style.setProperty("--polycss-fpv-perspective",`${$}px`),s.classList.add("polycss-fpv-host"),V=()=>{if(s.removeEventListener("click",T),g.removeEventListener("pointerlockchange",E),g.removeEventListener("mousemove",H),S.removeEventListener("keydown",Y),S.removeEventListener("keyup",O),S.removeEventListener("blur",M),s.style.cursor="",s.classList.remove("polycss-fpv-host"),s.style.removeProperty("--polycss-fpv-perspective"),P.clear(),h)try{g.exitPointerLock()}catch{}}}n({update(s){l=$n(l,s);let g=a.value;g&&!d&&(g.style.cursor=l.lookEnabled?"crosshair":"")},resume(){if(!d)return;d=!1;let s=a.value;s&&(s.style.cursor=l.lookEnabled?"crosshair":""),C()},pause(){if(d)return;d=!0,k();let s=a.value;if(s&&(s.style.cursor=""),p){p=!1,yt(L,"end");try{t("interaction-end",[c[0],c[1],c[2]])}catch{}}},destroy(){d=!0,k()},lock(){if(!l.enabled||!l.lookEnabled||d)return;let s=a.value;try{s?.requestPointerLock()}catch{}},unlock(){if(h){let s=a.value;try{s?.ownerDocument?.exitPointerLock()}catch{}}},isLocked(){return h},getOrigin(){return[c[0],c[1],c[2]]},setOrigin(s){c[0]=s[0],c[1]=s[1],c[2]=s[2],I(),yt(L,"change");try{t("change",[c[0],c[1],c[2]])}catch{}},addEventListener(s,g){let S=L[s];S.includes(g)||S.push(g)},removeEventListener(s,g){let S=L[s],T=S.indexOf(g);T>=0&&S.splice(T,1)},hasEventListener(s,g){return L[s].includes(g)}}),(0,Oe.onMounted)(()=>{let s=a.value;if(!s)return;d=!1,h=!1,p=!1,P.clear(),b=0,A=0;let S=i.value.state.target??[0,0,0];c[0]=S[0],c[1]=S[1],c[2]=l.groundZ+l.eyeHeight,I(),s.style.cursor=l.lookEnabled?"crosshair":"",N(),C()}),(0,Oe.onBeforeUnmount)(()=>{d=!0,k(),V?.(),V=null});let v=["enabled","lookEnabled","moveEnabled","jumpEnabled","crouchEnabled","lookSensitivity","invertY","moveSpeed","jumpVelocity","gravity","eyeHeight","crouchHeight","groundZ","minPitch","maxPitch"];for(let s of v)(0,Oe.watch)(()=>e[s],()=>{l=$n(l,e);let g=a.value;g&&!d&&(g.style.cursor=l.lookEnabled?"crosshair":"")});return()=>null}});var ce=require("vue");var gt=Symbol("polycss.selection"),qn=(0,ce.defineComponent)({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=(0,ce.reactive)({selected:[]}),r=(0,ce.computed)(()=>o.selected);function i(m){let f=e.filter?e.filter(m):m;o.selected=f,t("change",f)}let a={get selected(){return o.selected},set:m=>i(m),add:m=>{e.multiple?o.selected.includes(m)||i([...o.selected,m]):i([m])},remove:m=>{o.selected.includes(m)&&i(o.selected.filter(f=>f!==m))},toggle:m=>{o.selected.includes(m)?i(o.selected.filter(f=>f!==m)):e.multiple?i([...o.selected,m]):i([m])},clear:()=>i([]),has:m=>o.selected.includes(m)};(0,ce.provide)(gt,{selected:r,api:a});let u=(0,ce.inject)(ie,void 0),l=(m,f)=>Bt(m,f,d=>!d.closest("[data-poly-transform-controls]")),c=null;return(0,ce.onMounted)(()=>{let m=u?.cameraElRef.value;if(!m)return;let f=d=>{if(d.target?.closest("[data-poly-transform-controls]"))return;let p=it(d.target)??l(d.clientX,d.clientY);if(!p){t("pointerMissed",d),e.clearOnMiss&&i([]);return}e.multiple&&(d.shiftKey||d.metaKey||d.ctrlKey)?a.toggle(p):o.selected.length===1&&o.selected[0]===p?i([]):i([p])};m.addEventListener("click",f),c=()=>m.removeEventListener("click",f)}),(0,ce.onBeforeUnmount)(()=>{c?.()}),()=>(0,ce.h)("div",{style:{display:"contents"},"data-poly-select":""},n.default?.())}});function Gn(){let e=(0,ce.inject)(gt,void 0);return e?e.selected:(0,ce.ref)([])}function Zn(){let e=(0,ce.inject)(gt,void 0);if(!e)throw new Error("polycss: usePolySelectionApi must be used inside <PolySelect>.");return e.api}var ht=require("vue"),Br=require("@layoutit/polycss-core");var Kn=(0,ht.defineComponent)({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=(0,ht.computed)(()=>(0,Br.axesHelperPolygons)({size:e.size,thickness:e.thickness,negative:e.negative,xColor:e.xColor,yColor:e.yColor,zColor:e.zColor}));return()=>(0,ht.h)(ae,{polygons:t.value})}});var Ue=require("vue"),zr=require("@layoutit/polycss-core");var Qn=50,Jn=(0,Ue.defineComponent)({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=(0,Ue.computed)(()=>e.color??e.light.color??"#ffd54a"),n=(0,Ue.computed)(()=>(0,zr.octahedronPolygons)({center:[0,0,0],size:e.size,color:t.value})),o=(0,Ue.computed)(()=>{let r=e.light.direction,i=r[0],a=r[1],u=r[2],l=Math.hypot(i,a,u)||1,c=e.target?.[0]??0,m=e.target?.[1]??0,f=e.target?.[2]??0,d=c+a/l*e.distance,h=m+i/l*e.distance,p=f+u/l*e.distance;return[h*Qn,d*Qn,p*Qn]});return()=>(0,Ue.h)(ae,{polygons:n.value,position:o.value})}});var eo={quad:0,clippedSolid:0,atlas:0,stableTriangle:0},$i={polygonCount:0,mountedPolygonLeafCount:0,shadowLeafCount:0,surfaceLeafCounts:eo,bucketCount:0};function Ui(e){return typeof e=="number"?{polygonCount:e}:e??{}}function Pt(e,t){return e.querySelectorAll(t).length}function Wi(e,t){let n=e;return typeof n.matches=="function"&&n.matches(t)}function qi(e,t){if(!t)return[e];let n=[];return Wi(e,t)&&n.push(e),n.push(...Array.from(e.querySelectorAll(t))),n}function Hr(e,t){let n=Ui(t);if(!e)return{...$i,surfaceLeafCounts:{...eo},polygonCount:n.polygonCount??0};let o=qi(e,n.scopeSelector),r={...eo},i=0,a=0;for(let l of o)r.quad+=Pt(l,"b"),r.clippedSolid+=Pt(l,"i"),r.atlas+=Pt(l,"s"),r.stableTriangle+=Pt(l,"u"),i+=Pt(l,"q"),a+=Pt(l,".polycss-bucket");let u=r.quad+r.clippedSolid+r.atlas+r.stableTriangle;return{polygonCount:n.polygonCount??u,mountedPolygonLeafCount:u,shadowLeafCount:i,surfaceLeafCounts:r,bucketCount:a}}var Ae=require("vue"),Nr=require("@layoutit/polycss-core");function ut(e){return e&&typeof e=="object"&&"value"in e?e.value:e}function Yr(e,t,n){let o=(0,Ae.ref)(null),r=null,i=null,a=null,u=(0,Ae.ref)(0);function l(){return n==null?o.value:ut(n)??o.value}function c(){i!==null&&(cancelAnimationFrame(i),i=null),a=null}function m(){c(),r&&(r.stopAllAction(),r.uncacheRoot(),r=null,u.value++)}function f(){if(i!==null)return;function L(w){if(a===null){a=w,i=requestAnimationFrame(L);return}let y=(w-a)/1e3;a=w,r?.update(y),i=requestAnimationFrame(L)}i=requestAnimationFrame(L)}function d(){m();let L=ut(e),w=ut(t);if(!L||L.length===0||!w)return;let y=l();y&&(r=(0,Nr.createPolyAnimationMixer)(y,w),u.value++,f())}let h=(0,Ae.watch)(()=>{let L=ut(e),w=ut(t),y=n!=null?ut(n):o.value;return{c:L,ctrl:w,r:y}},()=>d(),{immediate:!0,deep:!1});(0,Ae.onUnmounted)(()=>{h(),m()});let p=(0,Ae.computed)(()=>ut(e)??[]),P=(0,Ae.computed)(()=>p.value.map(L=>L.name)),b=(0,Ae.computed)(()=>(u.value,r)),A=(0,Ae.computed)(()=>{u.value;let L=p.value,w={};for(let y of L)Object.defineProperty(w,y.name,{enumerable:!0,get(){if(!r)return null;try{return r.clipAction(y.name)}catch{return null}}});return w});return{ref:o,mixer:b,clips:p,names:P,actions:A}}var x=require("@layoutit/polycss-core");0&&(module.exports={BASE_TILE,CAMERA_BACKFACE_CULL_EPS,DEFAULT_CAMERA_STATE,DEFAULT_PROJECTION,DEFAULT_SEAM_FACET_SPLIT_OPTIONS,DEFAULT_SEAM_OVERLAP_OPTIONS,LoopOnce,LoopPingPong,LoopRepeat,Poly,PolyAxesHelper,PolyBox,PolyCamera,PolyCameraContextKey,PolyCone,PolyCylinder,PolyDirectionalLightHelper,PolyDodecahedron,PolyFirstPersonControls,PolyGround,PolyIcosahedron,PolyMapControls,PolyMesh,PolyOctahedron,PolyOrbitControls,PolyOrthographicCamera,PolyPerspectiveCamera,PolyPlane,PolyRing,PolyScene,PolySelect,PolySelectionContextKey,PolySphere,PolyTetrahedron,PolyTorus,PolyTransformControls,VOXEL_CAMERA_CULL_AXIS_EPS,VOXEL_CAMERA_CULL_NORMAL_LIMIT,arrowPolygons,axesHelperPolygons,bakeSolidTextureSampledPolygons,bakeSolidTextureSamples,boxPolygons,buildSceneContext,cameraCullNormalGroups,cameraCullNormalGroupsFromPolygons,cameraCullNormalKey,cameraCullVisibleSignature,cameraFacingDepth,clampChannel,collectPolyRenderStats,computeSceneBbox,computeShapeLighting,computeTexturePaintMetrics,conePolygons,coverPlanarPolygons,createIsometricCamera,createPolyAnimationMixer,cullInteriorPolygons,cylinderPolygons,dodecahedronPolygons,findMeshUnderPoint,findPolyMeshHandle,formatColor,icosahedronPolygons,injectPolyBaseStyles,inverseRotateVec3,isAxisAlignedSurfaceNormal,isVoxelCameraCullableNormalGroups,loadMesh,mergePolygons,normalFacesCamera,normalizeInvertMultiplier,normalizePolygons,octahedronPolygons,optimizeAnimatedMeshPolygons,optimizeMeshPolygons,parseColor,parseGltf,parseHexColor,parseMtl,parseObj,parsePureColor,parseRgbColor,parseVox,planePolygons,pointInMeshElement,polygonCssSurfaceNormal,polygonFaces,polygonFacesCamera,repairMeshSeams,ringPolygons,rotateVec3,seamFacetSplitPolygons,seamFacetSplitReport,seamOverlapDiagnostics,seamOverlapPolygons,seamOverlapReport,shadeColor,tetrahedronPolygons,torusPolygons,usePolyAnimation,usePolyCamera,usePolyMaterial,usePolyMesh,usePolySceneContext,usePolySelect,usePolySelectionApi});
|