@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/dist/index.d.ts CHANGED
@@ -1,20 +1,18 @@
1
1
  import * as vue from 'vue';
2
2
  import { PropType, Ref, InjectionKey, VNode, ComputedRef, MaybeRef } from 'vue';
3
- import { Vec3, CameraState, CameraHandle, Polygon, PolyDirectionalLight, PolyAmbientLight, PolyTextureLightingMode, LoadMeshOptions, PolyMaterial, Vec2, PolyAnimationTarget, PolyAnimationMixer, PolyAnimationClip, PolyAnimationAction, ParseAnimationController } from '@layoutit/polycss-core';
4
- export { ArrowPolygonsOptions, AutoRotateConfig, AutoRotateOption, AxesHelperOptions, BASE_TILE, CameraHandle, CameraState, CameraStyleInput, CoverPlanarPolygonsOptions, CullInteriorOptions, DEFAULT_CAMERA_STATE, DEFAULT_PROJECTION, GltfParseOptions, LoadMeshOptions, LoopMode, LoopOnce, LoopPingPong, LoopRepeat, MtlParseResult, NormalizeResult, ObjParseOptions, OctahedronPolygonsOptions, ParseAnimationClip, ParseAnimationController, ParseResult, ParsedColor, PolyAmbientLight, PolyAnimationAction, PolyAnimationClip, PolyAnimationMixer, PolyAnimationTarget, PolyDirectionalLight, PolyMaterial, PolyTextureLightingMode, Polygon, PolygonFace, RingPolygonsOptions, SceneBbox, SceneContext, SceneContextBuildArgs, SceneContextBuildResult, SolidTextureSampleOptions, TexturePaintMetrics, TexturePaintMetricsOptions, TextureTriangle, Vec2, Vec3, VoxParseOptions, arrowPolygons, axesHelperPolygons, bakeSolidTextureSampledPolygons, bakeSolidTextureSamples, buildSceneContext, clampChannel, computeSceneBbox, computeShapeLighting, computeTexturePaintMetrics, coverPlanarPolygons, createIsometricCamera, createPolyAnimationMixer, cullInteriorPolygons, formatColor, inverseRotateVec3, loadMesh, mergePolygons, normalizeInvertMultiplier, normalizePolygons, octahedronPolygons, parseColor, parseGltf, parseHexColor, parseMtl, parseObj, parsePureColor, parseRgbColor, parseVox, polygonFaces, ringPolygons, rotateVec3, shadeColor } from '@layoutit/polycss-core';
3
+ import { Vec3, CameraState, CameraHandle, Polygon, PolyDirectionalLight, PolyAmbientLight, PolyTextureLightingMode, TextureQuality, PolySeamBleed, PolyRenderStrategiesOption, MeshResolution, LoadMeshOptions, ParseResult, PolyMaterial, Vec2, PolyAnimationTarget, PolyAnimationMixer, PolyAnimationClip, PolyAnimationAction, ParseAnimationController } from '@layoutit/polycss-core';
4
+ export { ArrowPolygonsOptions, AutoRotateConfig, AutoRotateOption, AxesHelperOptions, BASE_TILE, BoxFace, BoxFaceOptions, BoxPolygonsOptions, CAMERA_BACKFACE_CULL_EPS, CameraCullNormalGroup, CameraCullRotation, CameraHandle, CameraState, CameraStyleInput, ConePolygonsOptions, CoverPlanarPolygonsOptions, CullInteriorOptions, CylinderPolygonsOptions, DEFAULT_CAMERA_STATE, DEFAULT_PROJECTION, DEFAULT_SEAM_FACET_SPLIT_OPTIONS, DEFAULT_SEAM_OVERLAP_OPTIONS, DodecahedronPolygonsOptions, GltfParseOptions, IcosahedronPolygonsOptions, LoadMeshOptions, LoopMode, LoopOnce, LoopPingPong, LoopRepeat, MeshResolution, MtlParseResult, NormalizeResult, ObjParseOptions, OctahedronPolygonsOptions, OptimizeAnimatedMeshPolygonsOptions, OptimizeMeshPolygonsOptions, ParseAnimationClip, ParseAnimationController, ParseResult, ParsedColor, PlanePolygonsOptions, PolyAmbientLight, PolyAnimationAction, PolyAnimationClip, PolyAnimationMixer, PolyAnimationTarget, PolyDirectionalLight, PolyMaterial, PolyRenderStrategiesOption, PolyRenderStrategy, PolyTextureLightingMode, Polygon, PolygonFace, RingPolygonsOptions, SceneBbox, SceneContext, SceneContextBuildArgs, SceneContextBuildResult, SeamFacetSplitCandidate, SeamFacetSplitCandidateReason, SeamFacetSplitOptions, SeamFacetSplitReport, SeamOverlapCandidate, SeamOverlapCandidateKind, SeamOverlapDiagnostics, SeamOverlapOptions, SolidTextureSampleOptions, TetrahedronPolygonsOptions, TexturePaintMetrics, TexturePaintMetricsOptions, TextureTriangle, TorusPolygonsOptions, VOXEL_CAMERA_CULL_AXIS_EPS, VOXEL_CAMERA_CULL_NORMAL_LIMIT, Vec2, Vec3, VoxParseOptions, arrowPolygons, axesHelperPolygons, bakeSolidTextureSampledPolygons, bakeSolidTextureSamples, boxPolygons, buildSceneContext, cameraCullNormalGroups, cameraCullNormalGroupsFromPolygons, cameraCullNormalKey, cameraCullVisibleSignature, cameraFacingDepth, clampChannel, computeSceneBbox, computeShapeLighting, computeTexturePaintMetrics, conePolygons, coverPlanarPolygons, createIsometricCamera, createPolyAnimationMixer, cullInteriorPolygons, cylinderPolygons, dodecahedronPolygons, formatColor, icosahedronPolygons, inverseRotateVec3, isAxisAlignedSurfaceNormal, isVoxelCameraCullableNormalGroups, loadMesh, mergePolygons, normalFacesCamera, normalizeInvertMultiplier, normalizePolygons, octahedronPolygons, optimizeAnimatedMeshPolygons, optimizeMeshPolygons, parseColor, parseGltf, parseHexColor, parseMtl, parseObj, parsePureColor, parseRgbColor, parseVox, planePolygons, polygonCssSurfaceNormal, polygonFaces, polygonFacesCamera, repairMeshSeams, ringPolygons, rotateVec3, seamFacetSplitPolygons, seamFacetSplitReport, seamOverlapDiagnostics, seamOverlapPolygons, seamOverlapReport, shadeColor, tetrahedronPolygons, torusPolygons } from '@layoutit/polycss-core';
5
5
 
6
- interface PolyPerspectiveCameraProps {
6
+ interface PolyOrthographicCameraProps {
7
7
  zoom?: number;
8
8
  target?: Vec3;
9
9
  rotX?: number;
10
10
  rotY?: number;
11
11
  /** Camera pull-back in CSS pixels (dolly). Default 0. */
12
12
  distance?: number;
13
- /** CSS perspective distance in pixels. Defaults to 8000. */
14
- perspective?: number;
15
13
  class?: string;
16
14
  }
17
- declare const PolyPerspectiveCamera: vue.DefineComponent<vue.ExtractPropTypes<{
15
+ declare const PolyOrthographicCamera: vue.DefineComponent<vue.ExtractPropTypes<{
18
16
  zoom: {
19
17
  type: NumberConstructor;
20
18
  };
@@ -30,10 +28,6 @@ declare const PolyPerspectiveCamera: vue.DefineComponent<vue.ExtractPropTypes<{
30
28
  distance: {
31
29
  type: NumberConstructor;
32
30
  };
33
- perspective: {
34
- type: NumberConstructor;
35
- default: undefined;
36
- };
37
31
  class: {
38
32
  type: StringConstructor;
39
33
  };
@@ -55,27 +49,23 @@ declare const PolyPerspectiveCamera: vue.DefineComponent<vue.ExtractPropTypes<{
55
49
  distance: {
56
50
  type: NumberConstructor;
57
51
  };
58
- perspective: {
59
- type: NumberConstructor;
60
- default: undefined;
61
- };
62
52
  class: {
63
53
  type: StringConstructor;
64
54
  };
65
- }>> & Readonly<{}>, {
66
- perspective: number;
67
- }, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
55
+ }>> & Readonly<{}>, {}, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
68
56
 
69
- interface PolyOrthographicCameraProps {
57
+ interface PolyPerspectiveCameraProps {
70
58
  zoom?: number;
71
59
  target?: Vec3;
72
60
  rotX?: number;
73
61
  rotY?: number;
74
62
  /** Camera pull-back in CSS pixels (dolly). Default 0. */
75
63
  distance?: number;
64
+ /** CSS perspective distance in pixels. Defaults to 8000. */
65
+ perspective?: number;
76
66
  class?: string;
77
67
  }
78
- declare const PolyOrthographicCamera: vue.DefineComponent<vue.ExtractPropTypes<{
68
+ declare const PolyPerspectiveCamera: vue.DefineComponent<vue.ExtractPropTypes<{
79
69
  zoom: {
80
70
  type: NumberConstructor;
81
71
  };
@@ -91,6 +81,10 @@ declare const PolyOrthographicCamera: vue.DefineComponent<vue.ExtractPropTypes<{
91
81
  distance: {
92
82
  type: NumberConstructor;
93
83
  };
84
+ perspective: {
85
+ type: NumberConstructor;
86
+ default: undefined;
87
+ };
94
88
  class: {
95
89
  type: StringConstructor;
96
90
  };
@@ -112,13 +106,19 @@ declare const PolyOrthographicCamera: vue.DefineComponent<vue.ExtractPropTypes<{
112
106
  distance: {
113
107
  type: NumberConstructor;
114
108
  };
109
+ perspective: {
110
+ type: NumberConstructor;
111
+ default: undefined;
112
+ };
115
113
  class: {
116
114
  type: StringConstructor;
117
115
  };
118
- }>> & Readonly<{}>, {}, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
116
+ }>> & Readonly<{}>, {
117
+ perspective: number;
118
+ }, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
119
119
 
120
120
  /**
121
- * Lightweight reactive store for polycss scene state.
121
+ * Lightweight reactive store for PolyCSS scene state.
122
122
  * Components subscribe to specific slices via selectors,
123
123
  * so only the components that care about a changed value re-render.
124
124
  */
@@ -154,6 +154,12 @@ interface UseCameraResult {
154
154
  * versions and can't preventDefault).
155
155
  */
156
156
  cameraElRef: Ref<HTMLDivElement | null>;
157
+ /**
158
+ * Bbox-center of all centerable meshes in world coords. Written by
159
+ * <PolyScene> when autoCenter is enabled. Read by applyTransformDirect
160
+ * to fold the offset into the scene transform without a DOM wrapper.
161
+ */
162
+ autoCenterOffset: Ref<Vec3>;
157
163
  /**
158
164
  * Apply the current camera state (from cameraRef.value.state) directly
159
165
  * to sceneEl.style.transform. Exposed so layered components like
@@ -172,6 +178,14 @@ interface PolyCameraContextValue {
172
178
  * <PolyControls> can attach pointer/wheel listeners.
173
179
  */
174
180
  cameraElRef: Ref<HTMLElement | null>;
181
+ /**
182
+ * Bbox-center of all centerable meshes in world coords, written by
183
+ * <PolyScene> when `autoCenter` is enabled. `applyTransformDirect`
184
+ * folds this into the innermost translate3d alongside `target` so the
185
+ * camera orbits the model's visible center without adding a DOM wrapper.
186
+ * Kept separate from `target` so user pan survives mesh add/remove.
187
+ */
188
+ autoCenterOffset: Ref<Vec3>;
175
189
  /**
176
190
  * Apply the current camera state (from cameraRef.value.state) directly
177
191
  * to sceneEl.style.transform. Layered components call this after
@@ -181,7 +195,26 @@ interface PolyCameraContextValue {
181
195
  }
182
196
  declare const PolyCameraContextKey: InjectionKey<PolyCameraContextValue>;
183
197
 
184
- type AtlasScale = number | "auto";
198
+ /**
199
+ * PolySceneContext — propagates scene-level rendering options
200
+ * (textureLighting + lights) to descendants. PolyMesh / Poly children
201
+ * inherit these as fallbacks when their own equivalent props are
202
+ * undefined, so a helper rendered inside `<PolyScene texture-lighting="dynamic">`
203
+ * picks up the dynamic mode automatically (per-polygon normal vars + mask).
204
+ */
205
+
206
+ interface PolyShadowOptions {
207
+ color?: string;
208
+ opacity?: number;
209
+ lift?: number;
210
+ /**
211
+ * Maximum CSS pixels the shadow may extend beyond the mesh's
212
+ * footprint. Caps the SVG backing store at low light elevations to
213
+ * prevent repaint flicker. Default: `2000`. Pass `Infinity` to
214
+ * disable the cap entirely.
215
+ */
216
+ maxExtend?: number;
217
+ }
185
218
 
186
219
  interface PolySceneProps {
187
220
  polygons?: Polygon[];
@@ -192,8 +225,15 @@ interface PolySceneProps {
192
225
  directionalLight?: PolyDirectionalLight;
193
226
  ambientLight?: PolyAmbientLight;
194
227
  textureLighting?: PolyTextureLightingMode;
195
- /** Raster scale for generated atlas pages. `"auto"` reduces large atlases. */
196
- atlasScale?: AtlasScale;
228
+ /** Atlas bitmap budget and CSS sprite size. `"auto"` (default) uses a
229
+ * device-appropriate memory budget (~4 MB mobile / ~16 MB desktop) and
230
+ * desktop/mobile sprite sizing. Numeric values 0.1..1 force an explicit
231
+ * raster scale and the 64px sprite. */
232
+ textureQuality?: TextureQuality;
233
+ /** Solid seam overscan. `"auto"` computes a fitted per-edge amount from the polygon plan. */
234
+ seamBleed?: PolySeamBleed;
235
+ /** Opt out of specific render strategies. Disabled strategies fall through the chain (b→i→s, u→i→s, i→s). `<s>` cannot be disabled. */
236
+ strategies?: PolyRenderStrategiesOption;
197
237
  /**
198
238
  * When `true`, rotation pivots around the mesh's bbox center instead of
199
239
  * world (0,0,0). Polygon data is not mutated — a wrapper div translates
@@ -201,6 +241,14 @@ interface PolySceneProps {
201
241
  * Mirrors React's PolyScene autoCenter prop.
202
242
  */
203
243
  autoCenter?: boolean;
244
+ /**
245
+ * Shadow appearance for meshes with `castShadow: true`. Works in both
246
+ * lighting modes — dynamic mode projects via CSS vars so shadows
247
+ * follow a moving light, baked mode CPU-bakes the projection into
248
+ * each leaf's inline `matrix3d` and drops back-facing polys from the
249
+ * DOM entirely. Defaults: `{ color: "#000000", opacity: 0.25, lift: 0.05, maxExtend: 2000 }`.
250
+ */
251
+ shadow?: PolyShadowOptions;
204
252
  class?: string;
205
253
  position?: Vec3;
206
254
  scale?: number | Vec3;
@@ -237,14 +285,26 @@ declare const PolyScene: vue.DefineComponent<vue.ExtractPropTypes<{
237
285
  type: PropType<PolyTextureLightingMode>;
238
286
  default: string;
239
287
  };
240
- atlasScale: {
241
- type: PropType<AtlasScale>;
288
+ textureQuality: {
289
+ type: PropType<TextureQuality>;
290
+ default: undefined;
291
+ };
292
+ seamBleed: {
293
+ type: PropType<PolySeamBleed>;
294
+ default: undefined;
295
+ };
296
+ strategies: {
297
+ type: PropType<PolyRenderStrategiesOption>;
242
298
  default: undefined;
243
299
  };
244
300
  autoCenter: {
245
301
  type: BooleanConstructor;
246
302
  default: boolean;
247
303
  };
304
+ shadow: {
305
+ type: PropType<PolyShadowOptions>;
306
+ default: undefined;
307
+ };
248
308
  class: {
249
309
  type: StringConstructor;
250
310
  };
@@ -297,14 +357,26 @@ declare const PolyScene: vue.DefineComponent<vue.ExtractPropTypes<{
297
357
  type: PropType<PolyTextureLightingMode>;
298
358
  default: string;
299
359
  };
300
- atlasScale: {
301
- type: PropType<AtlasScale>;
360
+ textureQuality: {
361
+ type: PropType<TextureQuality>;
362
+ default: undefined;
363
+ };
364
+ seamBleed: {
365
+ type: PropType<PolySeamBleed>;
366
+ default: undefined;
367
+ };
368
+ strategies: {
369
+ type: PropType<PolyRenderStrategiesOption>;
302
370
  default: undefined;
303
371
  };
304
372
  autoCenter: {
305
373
  type: BooleanConstructor;
306
374
  default: boolean;
307
375
  };
376
+ shadow: {
377
+ type: PropType<PolyShadowOptions>;
378
+ default: undefined;
379
+ };
308
380
  class: {
309
381
  type: StringConstructor;
310
382
  };
@@ -331,10 +403,13 @@ declare const PolyScene: vue.DefineComponent<vue.ExtractPropTypes<{
331
403
  textureLighting: PolyTextureLightingMode;
332
404
  position: Vec3;
333
405
  scale: number | Vec3;
334
- atlasScale: AtlasScale;
335
406
  polygons: Polygon[];
336
407
  ambientLight: PolyAmbientLight;
408
+ textureQuality: TextureQuality;
409
+ seamBleed: PolySeamBleed;
410
+ strategies: PolyRenderStrategiesOption;
337
411
  autoCenter: boolean;
412
+ shadow: PolyShadowOptions;
338
413
  rotation: Vec3;
339
414
  debugShowLabels: boolean;
340
415
  debugShowBackfaces: boolean;
@@ -343,7 +418,7 @@ declare const PolyScene: vue.DefineComponent<vue.ExtractPropTypes<{
343
418
  /**
344
419
  * Pointer event API for `<PolyMesh>` (Vue). Mirrors @react-three/fiber's
345
420
  * mesh event surface (handler names + payload shape) so devs migrating
346
- * from three.js use the same mental model. polycss is DOM-native so
421
+ * from three.js use the same mental model. PolyCSS is DOM-native so
347
422
  * we get native pointer events for free — no raycaster, no canvas
348
423
  * event synthesis.
349
424
  *
@@ -365,6 +440,21 @@ interface PolyMeshHandle {
365
440
  getRotation(): Vec3 | undefined;
366
441
  getScale(): number | Vec3 | undefined;
367
442
  getPolygons(): Polygon[];
443
+ /**
444
+ * Replace the mesh polygons imperatively. Animated solid-triangle meshes use
445
+ * a stable DOM update path that mutates mounted leaves directly; unsupported
446
+ * topology falls back to the normal framework render path.
447
+ */
448
+ setPolygons(polygons: Polygon[]): void;
449
+ /**
450
+ * Update a single polygon in place. `target` is either a polygon
451
+ * reference (as returned by `getPolygons()`) or its index. `partial`
452
+ * fields are merged onto the polygon; the mesh is then re-rendered.
453
+ * Skips the merge pass, so this is cheaper than replacing the
454
+ * `polygons` prop for targeted edits like color picker updates from
455
+ * an inspector UI. Silently no-ops if `target` isn't found.
456
+ */
457
+ updatePolygon(target: Polygon | number, partial: Partial<Polygon>): void;
368
458
  /**
369
459
  * Re-rasterize the baked texture atlas using the mesh's current rotation.
370
460
  *
@@ -436,8 +526,24 @@ interface PolyMeshProps extends InteractionProps {
436
526
  polygons?: Polygon[];
437
527
  autoCenter?: boolean;
438
528
  textureLighting?: PolyTextureLightingMode;
439
- /** Raster scale for generated atlas pages. `"auto"` reduces large atlases. */
440
- atlasScale?: AtlasScale;
529
+ /** Atlas bitmap budget and CSS sprite size. `"auto"` (default) uses a
530
+ * device-appropriate memory budget (~4 MB mobile / ~16 MB desktop) and
531
+ * desktop/mobile sprite sizing. Numeric values 0.1..1 force an explicit
532
+ * raster scale and the 64px sprite. */
533
+ textureQuality?: TextureQuality;
534
+ /** Solid seam overscan. `"auto"` computes a fitted per-edge amount from the polygon plan. */
535
+ seamBleed?: PolySeamBleed;
536
+ /**
537
+ * When `true` and the scene is in dynamic lighting mode, the renderer emits
538
+ * a flat shadow leaf sibling for each non-duplicate polygon. The shadow is
539
+ * projected onto the ground plane along the CSS-space light direction.
540
+ * Defaults to `false`.
541
+ */
542
+ castShadow?: boolean;
543
+ /** Mesh optimization intent. Defaults to "lossy"; set "lossless" to keep
544
+ * authored surface fidelity. Top-level prop wins over any meshResolution
545
+ * that might be set inside parseOptions. */
546
+ meshResolution?: MeshResolution;
441
547
  class?: string;
442
548
  position?: Vec3;
443
549
  scale?: number | Vec3;
@@ -468,8 +574,20 @@ declare const PolyMesh: vue.DefineComponent<vue.ExtractPropTypes<{
468
574
  type: PropType<PolyTextureLightingMode>;
469
575
  default: undefined;
470
576
  };
471
- atlasScale: {
472
- type: PropType<AtlasScale>;
577
+ textureQuality: {
578
+ type: PropType<TextureQuality>;
579
+ default: undefined;
580
+ };
581
+ seamBleed: {
582
+ type: PropType<PolySeamBleed>;
583
+ default: undefined;
584
+ };
585
+ castShadow: {
586
+ type: PropType<boolean>;
587
+ default: boolean;
588
+ };
589
+ meshResolution: {
590
+ type: PropType<MeshResolution>;
473
591
  default: undefined;
474
592
  };
475
593
  class: {
@@ -562,8 +680,20 @@ declare const PolyMesh: vue.DefineComponent<vue.ExtractPropTypes<{
562
680
  type: PropType<PolyTextureLightingMode>;
563
681
  default: undefined;
564
682
  };
565
- atlasScale: {
566
- type: PropType<AtlasScale>;
683
+ textureQuality: {
684
+ type: PropType<TextureQuality>;
685
+ default: undefined;
686
+ };
687
+ seamBleed: {
688
+ type: PropType<PolySeamBleed>;
689
+ default: undefined;
690
+ };
691
+ castShadow: {
692
+ type: PropType<boolean>;
693
+ default: boolean;
694
+ };
695
+ meshResolution: {
696
+ type: PropType<MeshResolution>;
567
697
  default: undefined;
568
698
  };
569
699
  class: {
@@ -635,13 +765,16 @@ declare const PolyMesh: vue.DefineComponent<vue.ExtractPropTypes<{
635
765
  textureLighting: PolyTextureLightingMode;
636
766
  position: Vec3;
637
767
  scale: number | Vec3;
638
- atlasScale: AtlasScale;
639
768
  polygons: Polygon[];
769
+ textureQuality: TextureQuality;
770
+ seamBleed: PolySeamBleed;
640
771
  autoCenter: boolean;
641
772
  rotation: Vec3;
642
773
  id: string;
643
774
  src: string;
644
775
  mtl: string;
776
+ castShadow: boolean;
777
+ meshResolution: MeshResolution;
645
778
  onContextMenu: PolyEventHandler<MouseEvent>;
646
779
  onDoubleClick: PolyEventHandler<MouseEvent>;
647
780
  onPointerDown: PolyEventHandler<PointerEvent>;
@@ -654,6 +787,70 @@ declare const PolyMesh: vue.DefineComponent<vue.ExtractPropTypes<{
654
787
  onPointerCancel: PolyEventHandler<PointerEvent>;
655
788
  }, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
656
789
 
790
+ interface PolyGroundProps {
791
+ /** Side length of the ground quad in world units. Default `6`. */
792
+ size?: number;
793
+ /** World-space Z (floor height). Default `0`. */
794
+ z?: number;
795
+ /** World-space XY center. Default `[0, 0]`. */
796
+ center?: [number, number];
797
+ /** Fill color. Default `#7d848e` — medium gray, chosen so 25% black `<q>`
798
+ * shadow leaves on top have visible contrast against it. */
799
+ color?: string;
800
+ class?: string;
801
+ }
802
+ declare const PolyGround: vue.DefineComponent<vue.ExtractPropTypes<{
803
+ size: {
804
+ type: NumberConstructor;
805
+ default: number;
806
+ };
807
+ z: {
808
+ type: NumberConstructor;
809
+ default: number;
810
+ };
811
+ center: {
812
+ type: PropType<[number, number]>;
813
+ default: () => number[];
814
+ };
815
+ color: {
816
+ type: StringConstructor;
817
+ default: string;
818
+ };
819
+ class: {
820
+ type: StringConstructor;
821
+ default: undefined;
822
+ };
823
+ }>, () => vue.VNode<vue.RendererNode, vue.RendererElement, {
824
+ [key: string]: any;
825
+ }>, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {}, string, vue.PublicProps, Readonly<vue.ExtractPropTypes<{
826
+ size: {
827
+ type: NumberConstructor;
828
+ default: number;
829
+ };
830
+ z: {
831
+ type: NumberConstructor;
832
+ default: number;
833
+ };
834
+ center: {
835
+ type: PropType<[number, number]>;
836
+ default: () => number[];
837
+ };
838
+ color: {
839
+ type: StringConstructor;
840
+ default: string;
841
+ };
842
+ class: {
843
+ type: StringConstructor;
844
+ default: undefined;
845
+ };
846
+ }>> & Readonly<{}>, {
847
+ class: string;
848
+ color: string;
849
+ size: number;
850
+ center: [number, number];
851
+ z: number;
852
+ }, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
853
+
657
854
  interface UseSceneContextOptions {
658
855
  directionalLight?: PolyDirectionalLight;
659
856
  }
@@ -665,7 +862,7 @@ interface UseSceneContextResult {
665
862
  };
666
863
  }
667
864
  /**
668
- * Vue 3 composable that runs the polycss scene-context pipeline:
865
+ * Vue 3 composable that runs the PolyCSS scene-context pipeline:
669
866
  * normalizePolygons → mergePolygons by default → bbox compute.
670
867
  *
671
868
  * Returns a Ref to the processed polygons + the scene-wide axis-aligned bbox.
@@ -676,6 +873,7 @@ declare function usePolySceneContext(polygons: Ref<Polygon[]>, options: Ref<UseS
676
873
  type UseMeshOptions = LoadMeshOptions;
677
874
  interface UseMeshResult {
678
875
  polygons: Ref<Polygon[]>;
876
+ voxelSource: Ref<ParseResult["voxelSource"]>;
679
877
  loading: Ref<boolean>;
680
878
  error: Ref<Error | null>;
681
879
  warnings: Ref<string[]>;
@@ -705,7 +903,7 @@ interface PolyContext {
705
903
  layerElevation?: number;
706
904
  directionalLight?: PolyDirectionalLight;
707
905
  textureLighting?: PolyTextureLightingMode;
708
- atlasScale?: AtlasScale;
906
+ textureQuality?: TextureQuality;
709
907
  debugShowBackfaces?: boolean;
710
908
  [key: string]: unknown;
711
909
  }
@@ -724,8 +922,9 @@ interface PolyProps {
724
922
  rotation?: Vec3;
725
923
  context?: PolyContext;
726
924
  textureLighting?: PolyTextureLightingMode;
727
- /** Raster scale for generated atlas pages. `"auto"` reduces large atlases. */
728
- atlasScale?: AtlasScale;
925
+ /** Atlas bitmap budget and CSS sprite size. `"auto"` (default) uses a
926
+ * device-appropriate memory budget and desktop/mobile sprite sizing. */
927
+ textureQuality?: TextureQuality;
729
928
  baseColor?: string;
730
929
  pointerEvents?: "auto" | "none";
731
930
  }
@@ -768,8 +967,8 @@ declare const Poly: vue.DefineComponent<vue.ExtractPropTypes<{
768
967
  type: PropType<PolyTextureLightingMode>;
769
968
  default: undefined;
770
969
  };
771
- atlasScale: {
772
- type: PropType<AtlasScale>;
970
+ textureQuality: {
971
+ type: PropType<TextureQuality>;
773
972
  default: undefined;
774
973
  };
775
974
  context: {
@@ -824,8 +1023,8 @@ declare const Poly: vue.DefineComponent<vue.ExtractPropTypes<{
824
1023
  type: PropType<PolyTextureLightingMode>;
825
1024
  default: undefined;
826
1025
  };
827
- atlasScale: {
828
- type: PropType<AtlasScale>;
1026
+ textureQuality: {
1027
+ type: PropType<TextureQuality>;
829
1028
  default: undefined;
830
1029
  };
831
1030
  context: {
@@ -842,120 +1041,1046 @@ declare const Poly: vue.DefineComponent<vue.ExtractPropTypes<{
842
1041
  }>> & Readonly<{}>, {
843
1042
  data: Record<string, string | number | boolean>;
844
1043
  pointerEvents: "none" | "auto";
845
- uvs: Vec2[];
846
1044
  textureLighting: PolyTextureLightingMode;
847
1045
  position: Vec3;
848
1046
  scale: number | Vec3;
849
- atlasScale: AtlasScale;
1047
+ textureQuality: TextureQuality;
850
1048
  rotation: Vec3;
851
1049
  material: PolyMaterial;
1050
+ uvs: Vec2[];
852
1051
  context: PolyContext;
853
1052
  }, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
854
1053
 
855
- interface PolyControlsAnimateOptions {
856
- speed?: number;
857
- axis?: "x" | "y";
858
- pauseOnInteraction?: boolean;
859
- }
860
- interface PolyOrbitControlsCamera {
861
- rotX: number;
862
- rotY: number;
863
- zoom: number;
864
- target: Vec3;
865
- distance: number;
866
- }
867
- interface PolyOrbitControlsProps {
868
- drag?: boolean;
869
- wheel?: boolean;
870
- /** When true, wheel changes camera pull-back (distance) instead of zoom scale. */
871
- dolly?: boolean;
872
- invert?: boolean | number;
873
- /** Minimum zoom multiplier (zoom mode). Default 0.1. */
874
- minZoom?: number;
875
- /** Maximum zoom multiplier (zoom mode). Default 10. */
876
- maxZoom?: number;
877
- /** Minimum camera pull-back in CSS pixels when dolly=true. Default 0. */
878
- minDistance?: number;
879
- /** Maximum camera pull-back in CSS pixels when dolly=true. Default 5000. */
880
- maxDistance?: number;
881
- animate?: false | PolyControlsAnimateOptions;
882
- }
883
- declare const PolyOrbitControls: vue.DefineComponent<vue.ExtractPropTypes<{
884
- drag: {
885
- type: BooleanConstructor;
886
- default: boolean;
1054
+ declare const PolyBox: vue.DefineComponent<vue.ExtractPropTypes<{
1055
+ size: {
1056
+ type: PropType<number | Vec3>;
1057
+ default: undefined;
887
1058
  };
888
- wheel: {
889
- type: BooleanConstructor;
890
- default: boolean;
1059
+ center: {
1060
+ type: PropType<Vec3>;
1061
+ default: undefined;
891
1062
  };
892
- dolly: {
893
- type: BooleanConstructor;
894
- default: boolean;
1063
+ min: {
1064
+ type: PropType<Vec3>;
1065
+ default: undefined;
895
1066
  };
896
- invert: {
897
- type: PropType<boolean | number>;
898
- default: boolean;
1067
+ max: {
1068
+ type: PropType<Vec3>;
1069
+ default: undefined;
899
1070
  };
900
- minZoom: {
901
- type: NumberConstructor;
902
- default: number;
1071
+ color: {
1072
+ type: StringConstructor;
1073
+ default: undefined;
903
1074
  };
904
- maxZoom: {
905
- type: NumberConstructor;
906
- default: number;
1075
+ texture: {
1076
+ type: StringConstructor;
1077
+ default: undefined;
907
1078
  };
908
- minDistance: {
909
- type: NumberConstructor;
910
- default: number;
1079
+ position: {
1080
+ type: PropType<Vec3>;
1081
+ default: undefined;
911
1082
  };
912
- maxDistance: {
913
- type: NumberConstructor;
914
- default: number;
1083
+ scale: {
1084
+ type: PropType<number | Vec3>;
1085
+ default: undefined;
915
1086
  };
916
- animate: {
917
- type: PropType<false | PolyControlsAnimateOptions>;
918
- default: boolean;
1087
+ rotation: {
1088
+ type: PropType<Vec3>;
1089
+ default: undefined;
919
1090
  };
920
- }>, () => null, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {
921
- change: (_camera: PolyOrbitControlsCamera) => true;
922
- "interaction-start": (_camera: PolyOrbitControlsCamera) => true;
923
- "interaction-end": (_camera: PolyOrbitControlsCamera) => true;
924
- }, string, vue.PublicProps, Readonly<vue.ExtractPropTypes<{
925
- drag: {
1091
+ autoCenter: {
926
1092
  type: BooleanConstructor;
927
1093
  default: boolean;
928
1094
  };
929
- wheel: {
930
- type: BooleanConstructor;
931
- default: boolean;
1095
+ id: {
1096
+ type: StringConstructor;
1097
+ default: undefined;
932
1098
  };
933
- dolly: {
934
- type: BooleanConstructor;
935
- default: boolean;
1099
+ }>, () => vue.VNode<vue.RendererNode, vue.RendererElement, {
1100
+ [key: string]: any;
1101
+ }>, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {}, string, vue.PublicProps, Readonly<vue.ExtractPropTypes<{
1102
+ size: {
1103
+ type: PropType<number | Vec3>;
1104
+ default: undefined;
936
1105
  };
937
- invert: {
938
- type: PropType<boolean | number>;
939
- default: boolean;
1106
+ center: {
1107
+ type: PropType<Vec3>;
1108
+ default: undefined;
940
1109
  };
941
- minZoom: {
942
- type: NumberConstructor;
943
- default: number;
1110
+ min: {
1111
+ type: PropType<Vec3>;
1112
+ default: undefined;
944
1113
  };
945
- maxZoom: {
946
- type: NumberConstructor;
947
- default: number;
1114
+ max: {
1115
+ type: PropType<Vec3>;
1116
+ default: undefined;
948
1117
  };
949
- minDistance: {
950
- type: NumberConstructor;
951
- default: number;
1118
+ color: {
1119
+ type: StringConstructor;
1120
+ default: undefined;
952
1121
  };
953
- maxDistance: {
954
- type: NumberConstructor;
955
- default: number;
1122
+ texture: {
1123
+ type: StringConstructor;
1124
+ default: undefined;
956
1125
  };
957
- animate: {
958
- type: PropType<false | PolyControlsAnimateOptions>;
1126
+ position: {
1127
+ type: PropType<Vec3>;
1128
+ default: undefined;
1129
+ };
1130
+ scale: {
1131
+ type: PropType<number | Vec3>;
1132
+ default: undefined;
1133
+ };
1134
+ rotation: {
1135
+ type: PropType<Vec3>;
1136
+ default: undefined;
1137
+ };
1138
+ autoCenter: {
1139
+ type: BooleanConstructor;
1140
+ default: boolean;
1141
+ };
1142
+ id: {
1143
+ type: StringConstructor;
1144
+ default: undefined;
1145
+ };
1146
+ }>> & Readonly<{}>, {
1147
+ color: string;
1148
+ size: number | Vec3;
1149
+ center: Vec3;
1150
+ position: Vec3;
1151
+ scale: number | Vec3;
1152
+ autoCenter: boolean;
1153
+ rotation: Vec3;
1154
+ texture: string;
1155
+ id: string;
1156
+ min: Vec3;
1157
+ max: Vec3;
1158
+ }, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
1159
+ declare const PolyPlane: vue.DefineComponent<vue.ExtractPropTypes<{
1160
+ axis: {
1161
+ type: PropType<0 | 1 | 2>;
1162
+ required: true;
1163
+ };
1164
+ size: {
1165
+ type: NumberConstructor;
1166
+ default: undefined;
1167
+ };
1168
+ along: {
1169
+ type: NumberConstructor;
1170
+ default: undefined;
1171
+ };
1172
+ color: {
1173
+ type: StringConstructor;
1174
+ default: undefined;
1175
+ };
1176
+ position: {
1177
+ type: PropType<Vec3>;
1178
+ default: undefined;
1179
+ };
1180
+ scale: {
1181
+ type: PropType<number | Vec3>;
1182
+ default: undefined;
1183
+ };
1184
+ rotation: {
1185
+ type: PropType<Vec3>;
1186
+ default: undefined;
1187
+ };
1188
+ autoCenter: {
1189
+ type: BooleanConstructor;
1190
+ default: boolean;
1191
+ };
1192
+ id: {
1193
+ type: StringConstructor;
1194
+ default: undefined;
1195
+ };
1196
+ }>, () => vue.VNode<vue.RendererNode, vue.RendererElement, {
1197
+ [key: string]: any;
1198
+ }>, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {}, string, vue.PublicProps, Readonly<vue.ExtractPropTypes<{
1199
+ axis: {
1200
+ type: PropType<0 | 1 | 2>;
1201
+ required: true;
1202
+ };
1203
+ size: {
1204
+ type: NumberConstructor;
1205
+ default: undefined;
1206
+ };
1207
+ along: {
1208
+ type: NumberConstructor;
1209
+ default: undefined;
1210
+ };
1211
+ color: {
1212
+ type: StringConstructor;
1213
+ default: undefined;
1214
+ };
1215
+ position: {
1216
+ type: PropType<Vec3>;
1217
+ default: undefined;
1218
+ };
1219
+ scale: {
1220
+ type: PropType<number | Vec3>;
1221
+ default: undefined;
1222
+ };
1223
+ rotation: {
1224
+ type: PropType<Vec3>;
1225
+ default: undefined;
1226
+ };
1227
+ autoCenter: {
1228
+ type: BooleanConstructor;
1229
+ default: boolean;
1230
+ };
1231
+ id: {
1232
+ type: StringConstructor;
1233
+ default: undefined;
1234
+ };
1235
+ }>> & Readonly<{}>, {
1236
+ color: string;
1237
+ size: number;
1238
+ position: Vec3;
1239
+ scale: number | Vec3;
1240
+ autoCenter: boolean;
1241
+ rotation: Vec3;
1242
+ id: string;
1243
+ along: number;
1244
+ }, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
1245
+ declare const PolyRing: vue.DefineComponent<vue.ExtractPropTypes<{
1246
+ axis: {
1247
+ type: PropType<0 | 1 | 2>;
1248
+ required: true;
1249
+ };
1250
+ radius: {
1251
+ type: NumberConstructor;
1252
+ required: true;
1253
+ };
1254
+ halfThickness: {
1255
+ type: NumberConstructor;
1256
+ default: undefined;
1257
+ };
1258
+ segments: {
1259
+ type: NumberConstructor;
1260
+ default: undefined;
1261
+ };
1262
+ color: {
1263
+ type: StringConstructor;
1264
+ default: undefined;
1265
+ };
1266
+ position: {
1267
+ type: PropType<Vec3>;
1268
+ default: undefined;
1269
+ };
1270
+ scale: {
1271
+ type: PropType<number | Vec3>;
1272
+ default: undefined;
1273
+ };
1274
+ rotation: {
1275
+ type: PropType<Vec3>;
1276
+ default: undefined;
1277
+ };
1278
+ autoCenter: {
1279
+ type: BooleanConstructor;
1280
+ default: boolean;
1281
+ };
1282
+ id: {
1283
+ type: StringConstructor;
1284
+ default: undefined;
1285
+ };
1286
+ }>, () => vue.VNode<vue.RendererNode, vue.RendererElement, {
1287
+ [key: string]: any;
1288
+ }>, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {}, string, vue.PublicProps, Readonly<vue.ExtractPropTypes<{
1289
+ axis: {
1290
+ type: PropType<0 | 1 | 2>;
1291
+ required: true;
1292
+ };
1293
+ radius: {
1294
+ type: NumberConstructor;
1295
+ required: true;
1296
+ };
1297
+ halfThickness: {
1298
+ type: NumberConstructor;
1299
+ default: undefined;
1300
+ };
1301
+ segments: {
1302
+ type: NumberConstructor;
1303
+ default: undefined;
1304
+ };
1305
+ color: {
1306
+ type: StringConstructor;
1307
+ default: undefined;
1308
+ };
1309
+ position: {
1310
+ type: PropType<Vec3>;
1311
+ default: undefined;
1312
+ };
1313
+ scale: {
1314
+ type: PropType<number | Vec3>;
1315
+ default: undefined;
1316
+ };
1317
+ rotation: {
1318
+ type: PropType<Vec3>;
1319
+ default: undefined;
1320
+ };
1321
+ autoCenter: {
1322
+ type: BooleanConstructor;
1323
+ default: boolean;
1324
+ };
1325
+ id: {
1326
+ type: StringConstructor;
1327
+ default: undefined;
1328
+ };
1329
+ }>> & Readonly<{}>, {
1330
+ color: string;
1331
+ position: Vec3;
1332
+ scale: number | Vec3;
1333
+ autoCenter: boolean;
1334
+ rotation: Vec3;
1335
+ id: string;
1336
+ halfThickness: number;
1337
+ segments: number;
1338
+ }, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
1339
+ declare const PolyOctahedron: vue.DefineComponent<vue.ExtractPropTypes<{
1340
+ center: {
1341
+ type: PropType<Vec3>;
1342
+ required: true;
1343
+ };
1344
+ size: {
1345
+ type: NumberConstructor;
1346
+ required: true;
1347
+ };
1348
+ color: {
1349
+ type: StringConstructor;
1350
+ default: undefined;
1351
+ };
1352
+ position: {
1353
+ type: PropType<Vec3>;
1354
+ default: undefined;
1355
+ };
1356
+ scale: {
1357
+ type: PropType<number | Vec3>;
1358
+ default: undefined;
1359
+ };
1360
+ rotation: {
1361
+ type: PropType<Vec3>;
1362
+ default: undefined;
1363
+ };
1364
+ autoCenter: {
1365
+ type: BooleanConstructor;
1366
+ default: boolean;
1367
+ };
1368
+ id: {
1369
+ type: StringConstructor;
1370
+ default: undefined;
1371
+ };
1372
+ }>, () => vue.VNode<vue.RendererNode, vue.RendererElement, {
1373
+ [key: string]: any;
1374
+ }>, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {}, string, vue.PublicProps, Readonly<vue.ExtractPropTypes<{
1375
+ center: {
1376
+ type: PropType<Vec3>;
1377
+ required: true;
1378
+ };
1379
+ size: {
1380
+ type: NumberConstructor;
1381
+ required: true;
1382
+ };
1383
+ color: {
1384
+ type: StringConstructor;
1385
+ default: undefined;
1386
+ };
1387
+ position: {
1388
+ type: PropType<Vec3>;
1389
+ default: undefined;
1390
+ };
1391
+ scale: {
1392
+ type: PropType<number | Vec3>;
1393
+ default: undefined;
1394
+ };
1395
+ rotation: {
1396
+ type: PropType<Vec3>;
1397
+ default: undefined;
1398
+ };
1399
+ autoCenter: {
1400
+ type: BooleanConstructor;
1401
+ default: boolean;
1402
+ };
1403
+ id: {
1404
+ type: StringConstructor;
1405
+ default: undefined;
1406
+ };
1407
+ }>> & Readonly<{}>, {
1408
+ color: string;
1409
+ position: Vec3;
1410
+ scale: number | Vec3;
1411
+ autoCenter: boolean;
1412
+ rotation: Vec3;
1413
+ id: string;
1414
+ }, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
1415
+ declare const PolyTetrahedron: vue.DefineComponent<vue.ExtractPropTypes<{
1416
+ size: {
1417
+ type: NumberConstructor;
1418
+ default: undefined;
1419
+ };
1420
+ color: {
1421
+ type: StringConstructor;
1422
+ default: undefined;
1423
+ };
1424
+ position: {
1425
+ type: PropType<Vec3>;
1426
+ default: undefined;
1427
+ };
1428
+ scale: {
1429
+ type: PropType<number | Vec3>;
1430
+ default: undefined;
1431
+ };
1432
+ rotation: {
1433
+ type: PropType<Vec3>;
1434
+ default: undefined;
1435
+ };
1436
+ autoCenter: {
1437
+ type: BooleanConstructor;
1438
+ default: boolean;
1439
+ };
1440
+ id: {
1441
+ type: StringConstructor;
1442
+ default: undefined;
1443
+ };
1444
+ }>, () => vue.VNode<vue.RendererNode, vue.RendererElement, {
1445
+ [key: string]: any;
1446
+ }>, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {}, string, vue.PublicProps, Readonly<vue.ExtractPropTypes<{
1447
+ size: {
1448
+ type: NumberConstructor;
1449
+ default: undefined;
1450
+ };
1451
+ color: {
1452
+ type: StringConstructor;
1453
+ default: undefined;
1454
+ };
1455
+ position: {
1456
+ type: PropType<Vec3>;
1457
+ default: undefined;
1458
+ };
1459
+ scale: {
1460
+ type: PropType<number | Vec3>;
1461
+ default: undefined;
1462
+ };
1463
+ rotation: {
1464
+ type: PropType<Vec3>;
1465
+ default: undefined;
1466
+ };
1467
+ autoCenter: {
1468
+ type: BooleanConstructor;
1469
+ default: boolean;
1470
+ };
1471
+ id: {
1472
+ type: StringConstructor;
1473
+ default: undefined;
1474
+ };
1475
+ }>> & Readonly<{}>, {
1476
+ color: string;
1477
+ size: number;
1478
+ position: Vec3;
1479
+ scale: number | Vec3;
1480
+ autoCenter: boolean;
1481
+ rotation: Vec3;
1482
+ id: string;
1483
+ }, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
1484
+ declare const PolyIcosahedron: vue.DefineComponent<vue.ExtractPropTypes<{
1485
+ size: {
1486
+ type: NumberConstructor;
1487
+ default: undefined;
1488
+ };
1489
+ color: {
1490
+ type: StringConstructor;
1491
+ default: undefined;
1492
+ };
1493
+ position: {
1494
+ type: PropType<Vec3>;
1495
+ default: undefined;
1496
+ };
1497
+ scale: {
1498
+ type: PropType<number | Vec3>;
1499
+ default: undefined;
1500
+ };
1501
+ rotation: {
1502
+ type: PropType<Vec3>;
1503
+ default: undefined;
1504
+ };
1505
+ autoCenter: {
1506
+ type: BooleanConstructor;
1507
+ default: boolean;
1508
+ };
1509
+ id: {
1510
+ type: StringConstructor;
1511
+ default: undefined;
1512
+ };
1513
+ }>, () => vue.VNode<vue.RendererNode, vue.RendererElement, {
1514
+ [key: string]: any;
1515
+ }>, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {}, string, vue.PublicProps, Readonly<vue.ExtractPropTypes<{
1516
+ size: {
1517
+ type: NumberConstructor;
1518
+ default: undefined;
1519
+ };
1520
+ color: {
1521
+ type: StringConstructor;
1522
+ default: undefined;
1523
+ };
1524
+ position: {
1525
+ type: PropType<Vec3>;
1526
+ default: undefined;
1527
+ };
1528
+ scale: {
1529
+ type: PropType<number | Vec3>;
1530
+ default: undefined;
1531
+ };
1532
+ rotation: {
1533
+ type: PropType<Vec3>;
1534
+ default: undefined;
1535
+ };
1536
+ autoCenter: {
1537
+ type: BooleanConstructor;
1538
+ default: boolean;
1539
+ };
1540
+ id: {
1541
+ type: StringConstructor;
1542
+ default: undefined;
1543
+ };
1544
+ }>> & Readonly<{}>, {
1545
+ color: string;
1546
+ size: number;
1547
+ position: Vec3;
1548
+ scale: number | Vec3;
1549
+ autoCenter: boolean;
1550
+ rotation: Vec3;
1551
+ id: string;
1552
+ }, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
1553
+ declare const PolyDodecahedron: vue.DefineComponent<vue.ExtractPropTypes<{
1554
+ size: {
1555
+ type: NumberConstructor;
1556
+ default: undefined;
1557
+ };
1558
+ color: {
1559
+ type: StringConstructor;
1560
+ default: undefined;
1561
+ };
1562
+ position: {
1563
+ type: PropType<Vec3>;
1564
+ default: undefined;
1565
+ };
1566
+ scale: {
1567
+ type: PropType<number | Vec3>;
1568
+ default: undefined;
1569
+ };
1570
+ rotation: {
1571
+ type: PropType<Vec3>;
1572
+ default: undefined;
1573
+ };
1574
+ autoCenter: {
1575
+ type: BooleanConstructor;
1576
+ default: boolean;
1577
+ };
1578
+ id: {
1579
+ type: StringConstructor;
1580
+ default: undefined;
1581
+ };
1582
+ }>, () => vue.VNode<vue.RendererNode, vue.RendererElement, {
1583
+ [key: string]: any;
1584
+ }>, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {}, string, vue.PublicProps, Readonly<vue.ExtractPropTypes<{
1585
+ size: {
1586
+ type: NumberConstructor;
1587
+ default: undefined;
1588
+ };
1589
+ color: {
1590
+ type: StringConstructor;
1591
+ default: undefined;
1592
+ };
1593
+ position: {
1594
+ type: PropType<Vec3>;
1595
+ default: undefined;
1596
+ };
1597
+ scale: {
1598
+ type: PropType<number | Vec3>;
1599
+ default: undefined;
1600
+ };
1601
+ rotation: {
1602
+ type: PropType<Vec3>;
1603
+ default: undefined;
1604
+ };
1605
+ autoCenter: {
1606
+ type: BooleanConstructor;
1607
+ default: boolean;
1608
+ };
1609
+ id: {
1610
+ type: StringConstructor;
1611
+ default: undefined;
1612
+ };
1613
+ }>> & Readonly<{}>, {
1614
+ color: string;
1615
+ size: number;
1616
+ position: Vec3;
1617
+ scale: number | Vec3;
1618
+ autoCenter: boolean;
1619
+ rotation: Vec3;
1620
+ id: string;
1621
+ }, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
1622
+ declare const PolySphere: vue.DefineComponent<vue.ExtractPropTypes<{
1623
+ radius: {
1624
+ type: NumberConstructor;
1625
+ default: undefined;
1626
+ };
1627
+ subdivisions: {
1628
+ type: NumberConstructor;
1629
+ default: undefined;
1630
+ };
1631
+ color: {
1632
+ type: StringConstructor;
1633
+ default: undefined;
1634
+ };
1635
+ position: {
1636
+ type: PropType<Vec3>;
1637
+ default: undefined;
1638
+ };
1639
+ scale: {
1640
+ type: PropType<number | Vec3>;
1641
+ default: undefined;
1642
+ };
1643
+ rotation: {
1644
+ type: PropType<Vec3>;
1645
+ default: undefined;
1646
+ };
1647
+ autoCenter: {
1648
+ type: BooleanConstructor;
1649
+ default: boolean;
1650
+ };
1651
+ id: {
1652
+ type: StringConstructor;
1653
+ default: undefined;
1654
+ };
1655
+ }>, () => vue.VNode<vue.RendererNode, vue.RendererElement, {
1656
+ [key: string]: any;
1657
+ }>, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {}, string, vue.PublicProps, Readonly<vue.ExtractPropTypes<{
1658
+ radius: {
1659
+ type: NumberConstructor;
1660
+ default: undefined;
1661
+ };
1662
+ subdivisions: {
1663
+ type: NumberConstructor;
1664
+ default: undefined;
1665
+ };
1666
+ color: {
1667
+ type: StringConstructor;
1668
+ default: undefined;
1669
+ };
1670
+ position: {
1671
+ type: PropType<Vec3>;
1672
+ default: undefined;
1673
+ };
1674
+ scale: {
1675
+ type: PropType<number | Vec3>;
1676
+ default: undefined;
1677
+ };
1678
+ rotation: {
1679
+ type: PropType<Vec3>;
1680
+ default: undefined;
1681
+ };
1682
+ autoCenter: {
1683
+ type: BooleanConstructor;
1684
+ default: boolean;
1685
+ };
1686
+ id: {
1687
+ type: StringConstructor;
1688
+ default: undefined;
1689
+ };
1690
+ }>> & Readonly<{}>, {
1691
+ color: string;
1692
+ position: Vec3;
1693
+ scale: number | Vec3;
1694
+ autoCenter: boolean;
1695
+ rotation: Vec3;
1696
+ id: string;
1697
+ radius: number;
1698
+ subdivisions: number;
1699
+ }, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
1700
+ declare const PolyCylinder: vue.DefineComponent<vue.ExtractPropTypes<{
1701
+ radius: {
1702
+ type: NumberConstructor;
1703
+ default: undefined;
1704
+ };
1705
+ radiusTop: {
1706
+ type: NumberConstructor;
1707
+ default: undefined;
1708
+ };
1709
+ height: {
1710
+ type: NumberConstructor;
1711
+ default: undefined;
1712
+ };
1713
+ radialSegments: {
1714
+ type: NumberConstructor;
1715
+ default: undefined;
1716
+ };
1717
+ color: {
1718
+ type: StringConstructor;
1719
+ default: undefined;
1720
+ };
1721
+ position: {
1722
+ type: PropType<Vec3>;
1723
+ default: undefined;
1724
+ };
1725
+ scale: {
1726
+ type: PropType<number | Vec3>;
1727
+ default: undefined;
1728
+ };
1729
+ rotation: {
1730
+ type: PropType<Vec3>;
1731
+ default: undefined;
1732
+ };
1733
+ autoCenter: {
1734
+ type: BooleanConstructor;
1735
+ default: boolean;
1736
+ };
1737
+ id: {
1738
+ type: StringConstructor;
1739
+ default: undefined;
1740
+ };
1741
+ }>, () => vue.VNode<vue.RendererNode, vue.RendererElement, {
1742
+ [key: string]: any;
1743
+ }>, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {}, string, vue.PublicProps, Readonly<vue.ExtractPropTypes<{
1744
+ radius: {
1745
+ type: NumberConstructor;
1746
+ default: undefined;
1747
+ };
1748
+ radiusTop: {
1749
+ type: NumberConstructor;
1750
+ default: undefined;
1751
+ };
1752
+ height: {
1753
+ type: NumberConstructor;
1754
+ default: undefined;
1755
+ };
1756
+ radialSegments: {
1757
+ type: NumberConstructor;
1758
+ default: undefined;
1759
+ };
1760
+ color: {
1761
+ type: StringConstructor;
1762
+ default: undefined;
1763
+ };
1764
+ position: {
1765
+ type: PropType<Vec3>;
1766
+ default: undefined;
1767
+ };
1768
+ scale: {
1769
+ type: PropType<number | Vec3>;
1770
+ default: undefined;
1771
+ };
1772
+ rotation: {
1773
+ type: PropType<Vec3>;
1774
+ default: undefined;
1775
+ };
1776
+ autoCenter: {
1777
+ type: BooleanConstructor;
1778
+ default: boolean;
1779
+ };
1780
+ id: {
1781
+ type: StringConstructor;
1782
+ default: undefined;
1783
+ };
1784
+ }>> & Readonly<{}>, {
1785
+ color: string;
1786
+ height: number;
1787
+ position: Vec3;
1788
+ scale: number | Vec3;
1789
+ autoCenter: boolean;
1790
+ rotation: Vec3;
1791
+ id: string;
1792
+ radius: number;
1793
+ radiusTop: number;
1794
+ radialSegments: number;
1795
+ }, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
1796
+ declare const PolyCone: vue.DefineComponent<vue.ExtractPropTypes<{
1797
+ radius: {
1798
+ type: NumberConstructor;
1799
+ default: undefined;
1800
+ };
1801
+ height: {
1802
+ type: NumberConstructor;
1803
+ default: undefined;
1804
+ };
1805
+ radialSegments: {
1806
+ type: NumberConstructor;
1807
+ default: undefined;
1808
+ };
1809
+ color: {
1810
+ type: StringConstructor;
1811
+ default: undefined;
1812
+ };
1813
+ position: {
1814
+ type: PropType<Vec3>;
1815
+ default: undefined;
1816
+ };
1817
+ scale: {
1818
+ type: PropType<number | Vec3>;
1819
+ default: undefined;
1820
+ };
1821
+ rotation: {
1822
+ type: PropType<Vec3>;
1823
+ default: undefined;
1824
+ };
1825
+ autoCenter: {
1826
+ type: BooleanConstructor;
1827
+ default: boolean;
1828
+ };
1829
+ id: {
1830
+ type: StringConstructor;
1831
+ default: undefined;
1832
+ };
1833
+ }>, () => vue.VNode<vue.RendererNode, vue.RendererElement, {
1834
+ [key: string]: any;
1835
+ }>, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {}, string, vue.PublicProps, Readonly<vue.ExtractPropTypes<{
1836
+ radius: {
1837
+ type: NumberConstructor;
1838
+ default: undefined;
1839
+ };
1840
+ height: {
1841
+ type: NumberConstructor;
1842
+ default: undefined;
1843
+ };
1844
+ radialSegments: {
1845
+ type: NumberConstructor;
1846
+ default: undefined;
1847
+ };
1848
+ color: {
1849
+ type: StringConstructor;
1850
+ default: undefined;
1851
+ };
1852
+ position: {
1853
+ type: PropType<Vec3>;
1854
+ default: undefined;
1855
+ };
1856
+ scale: {
1857
+ type: PropType<number | Vec3>;
1858
+ default: undefined;
1859
+ };
1860
+ rotation: {
1861
+ type: PropType<Vec3>;
1862
+ default: undefined;
1863
+ };
1864
+ autoCenter: {
1865
+ type: BooleanConstructor;
1866
+ default: boolean;
1867
+ };
1868
+ id: {
1869
+ type: StringConstructor;
1870
+ default: undefined;
1871
+ };
1872
+ }>> & Readonly<{}>, {
1873
+ color: string;
1874
+ height: number;
1875
+ position: Vec3;
1876
+ scale: number | Vec3;
1877
+ autoCenter: boolean;
1878
+ rotation: Vec3;
1879
+ id: string;
1880
+ radius: number;
1881
+ radialSegments: number;
1882
+ }, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
1883
+ declare const PolyTorus: vue.DefineComponent<vue.ExtractPropTypes<{
1884
+ radius: {
1885
+ type: NumberConstructor;
1886
+ default: undefined;
1887
+ };
1888
+ tube: {
1889
+ type: NumberConstructor;
1890
+ default: undefined;
1891
+ };
1892
+ radialSegments: {
1893
+ type: NumberConstructor;
1894
+ default: undefined;
1895
+ };
1896
+ tubularSegments: {
1897
+ type: NumberConstructor;
1898
+ default: undefined;
1899
+ };
1900
+ color: {
1901
+ type: StringConstructor;
1902
+ default: undefined;
1903
+ };
1904
+ position: {
1905
+ type: PropType<Vec3>;
1906
+ default: undefined;
1907
+ };
1908
+ scale: {
1909
+ type: PropType<number | Vec3>;
1910
+ default: undefined;
1911
+ };
1912
+ rotation: {
1913
+ type: PropType<Vec3>;
1914
+ default: undefined;
1915
+ };
1916
+ autoCenter: {
1917
+ type: BooleanConstructor;
1918
+ default: boolean;
1919
+ };
1920
+ id: {
1921
+ type: StringConstructor;
1922
+ default: undefined;
1923
+ };
1924
+ }>, () => vue.VNode<vue.RendererNode, vue.RendererElement, {
1925
+ [key: string]: any;
1926
+ }>, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {}, string, vue.PublicProps, Readonly<vue.ExtractPropTypes<{
1927
+ radius: {
1928
+ type: NumberConstructor;
1929
+ default: undefined;
1930
+ };
1931
+ tube: {
1932
+ type: NumberConstructor;
1933
+ default: undefined;
1934
+ };
1935
+ radialSegments: {
1936
+ type: NumberConstructor;
1937
+ default: undefined;
1938
+ };
1939
+ tubularSegments: {
1940
+ type: NumberConstructor;
1941
+ default: undefined;
1942
+ };
1943
+ color: {
1944
+ type: StringConstructor;
1945
+ default: undefined;
1946
+ };
1947
+ position: {
1948
+ type: PropType<Vec3>;
1949
+ default: undefined;
1950
+ };
1951
+ scale: {
1952
+ type: PropType<number | Vec3>;
1953
+ default: undefined;
1954
+ };
1955
+ rotation: {
1956
+ type: PropType<Vec3>;
1957
+ default: undefined;
1958
+ };
1959
+ autoCenter: {
1960
+ type: BooleanConstructor;
1961
+ default: boolean;
1962
+ };
1963
+ id: {
1964
+ type: StringConstructor;
1965
+ default: undefined;
1966
+ };
1967
+ }>> & Readonly<{}>, {
1968
+ color: string;
1969
+ position: Vec3;
1970
+ scale: number | Vec3;
1971
+ autoCenter: boolean;
1972
+ rotation: Vec3;
1973
+ id: string;
1974
+ radius: number;
1975
+ radialSegments: number;
1976
+ tube: number;
1977
+ tubularSegments: number;
1978
+ }, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
1979
+
1980
+ interface PolyControlsAnimateOptions {
1981
+ speed?: number;
1982
+ axis?: "x" | "y";
1983
+ pauseOnInteraction?: boolean;
1984
+ }
1985
+ interface PolyOrbitControlsCamera {
1986
+ rotX: number;
1987
+ rotY: number;
1988
+ zoom: number;
1989
+ target: Vec3;
1990
+ distance: number;
1991
+ }
1992
+ interface PolyOrbitControlsProps {
1993
+ drag?: boolean;
1994
+ wheel?: boolean;
1995
+ /** When true, wheel changes camera pull-back (distance) instead of zoom scale. */
1996
+ dolly?: boolean;
1997
+ invert?: boolean | number;
1998
+ /** Minimum zoom multiplier (zoom mode). Default 0.1. */
1999
+ minZoom?: number;
2000
+ /** Maximum zoom multiplier (zoom mode). Default 10. */
2001
+ maxZoom?: number;
2002
+ /** Minimum camera pull-back in CSS pixels when dolly=true. Default 0. */
2003
+ minDistance?: number;
2004
+ /** Maximum camera pull-back in CSS pixels when dolly=true. Default 5000. */
2005
+ maxDistance?: number;
2006
+ animate?: false | PolyControlsAnimateOptions;
2007
+ }
2008
+ declare const PolyOrbitControls: vue.DefineComponent<vue.ExtractPropTypes<{
2009
+ drag: {
2010
+ type: BooleanConstructor;
2011
+ default: boolean;
2012
+ };
2013
+ wheel: {
2014
+ type: BooleanConstructor;
2015
+ default: boolean;
2016
+ };
2017
+ dolly: {
2018
+ type: BooleanConstructor;
2019
+ default: boolean;
2020
+ };
2021
+ invert: {
2022
+ type: PropType<boolean | number>;
2023
+ default: boolean;
2024
+ };
2025
+ minZoom: {
2026
+ type: NumberConstructor;
2027
+ default: number;
2028
+ };
2029
+ maxZoom: {
2030
+ type: NumberConstructor;
2031
+ default: number;
2032
+ };
2033
+ minDistance: {
2034
+ type: NumberConstructor;
2035
+ default: number;
2036
+ };
2037
+ maxDistance: {
2038
+ type: NumberConstructor;
2039
+ default: number;
2040
+ };
2041
+ animate: {
2042
+ type: PropType<false | PolyControlsAnimateOptions>;
2043
+ default: boolean;
2044
+ };
2045
+ }>, () => null, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {
2046
+ change: (_camera: PolyOrbitControlsCamera) => true;
2047
+ "interaction-start": (_camera: PolyOrbitControlsCamera) => true;
2048
+ "interaction-end": (_camera: PolyOrbitControlsCamera) => true;
2049
+ }, string, vue.PublicProps, Readonly<vue.ExtractPropTypes<{
2050
+ drag: {
2051
+ type: BooleanConstructor;
2052
+ default: boolean;
2053
+ };
2054
+ wheel: {
2055
+ type: BooleanConstructor;
2056
+ default: boolean;
2057
+ };
2058
+ dolly: {
2059
+ type: BooleanConstructor;
2060
+ default: boolean;
2061
+ };
2062
+ invert: {
2063
+ type: PropType<boolean | number>;
2064
+ default: boolean;
2065
+ };
2066
+ minZoom: {
2067
+ type: NumberConstructor;
2068
+ default: number;
2069
+ };
2070
+ maxZoom: {
2071
+ type: NumberConstructor;
2072
+ default: number;
2073
+ };
2074
+ minDistance: {
2075
+ type: NumberConstructor;
2076
+ default: number;
2077
+ };
2078
+ maxDistance: {
2079
+ type: NumberConstructor;
2080
+ default: number;
2081
+ };
2082
+ animate: {
2083
+ type: PropType<false | PolyControlsAnimateOptions>;
959
2084
  default: boolean;
960
2085
  };
961
2086
  }>> & Readonly<{
@@ -1215,8 +2340,8 @@ declare const PolyTransformControls: vue.DefineComponent<vue.ExtractPropTypes<{
1215
2340
  }>, {
1216
2341
  object: PolyTransformControlsObject;
1217
2342
  mode: "rotate" | "translate";
1218
- space: "local" | "world";
1219
2343
  size: number;
2344
+ space: "local" | "world";
1220
2345
  enabled: boolean;
1221
2346
  showX: boolean;
1222
2347
  showY: boolean;
@@ -1225,6 +2350,211 @@ declare const PolyTransformControls: vue.DefineComponent<vue.ExtractPropTypes<{
1225
2350
  rotationSnap: number | null;
1226
2351
  }, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
1227
2352
 
2353
+ interface PolyFirstPersonControlsOptions {
2354
+ /** Master switch. When `false`, all sub-controls are inert. Default: `true`. */
2355
+ enabled?: boolean;
2356
+ /** Pointer-lock mouselook (rotX = pitch, rotY = yaw). Default: `true`. */
2357
+ lookEnabled?: boolean;
2358
+ /** WASD / arrow-key planar movement on world XY. Default: `true`. */
2359
+ moveEnabled?: boolean;
2360
+ /** Space-bar parametric jump arc on world Z. Default: `true`. */
2361
+ jumpEnabled?: boolean;
2362
+ /** Ctrl crouch (lowers eye height while held). Default: `true`. */
2363
+ crouchEnabled?: boolean;
2364
+ /** Mouselook sensitivity in degrees per pixel. Default: `0.15`. */
2365
+ lookSensitivity?: number;
2366
+ /** Invert vertical mouselook. Default: `false`. */
2367
+ invertY?: boolean;
2368
+ /** Movement speed in world units per second. Default: `5`. */
2369
+ moveSpeed?: number;
2370
+ /** Initial vertical velocity for a jump, world units per second. Default: `7`. */
2371
+ jumpVelocity?: number;
2372
+ /** Gravity acceleration in world units per second squared. Default: `18`. */
2373
+ gravity?: number;
2374
+ /** Standing eye height above the ground plane. Default: `1.7`. */
2375
+ eyeHeight?: number;
2376
+ /** Eye height while crouching. Default: `1`. */
2377
+ crouchHeight?: number;
2378
+ /** World Z of the ground plane the player walks on. Default: `0`. */
2379
+ groundZ?: number;
2380
+ /** Min pitch (rotX) angle in degrees. Default: `5`. */
2381
+ minPitch?: number;
2382
+ /** Max pitch (rotX) angle in degrees. Default: `175`. */
2383
+ maxPitch?: number;
2384
+ }
2385
+ interface PolyFirstPersonControlsHandle {
2386
+ update(partial: PolyFirstPersonControlsOptions): void;
2387
+ resume(): void;
2388
+ pause(): void;
2389
+ destroy(): void;
2390
+ /** Request pointer-lock now. Call from a user gesture (click). */
2391
+ lock(): void;
2392
+ /** Release pointer-lock. */
2393
+ unlock(): void;
2394
+ /** Whether pointer-lock is currently held. */
2395
+ isLocked(): boolean;
2396
+ /**
2397
+ * The camera's WORLD position (the eye). Snapshot — mutate via WASD /
2398
+ * jump / crouch, or by calling `setOrigin`.
2399
+ */
2400
+ getOrigin(): [number, number, number];
2401
+ /**
2402
+ * Move the camera origin to a specific world position. Re-derives the
2403
+ * scene's target so the perspective viewer follows.
2404
+ */
2405
+ setOrigin(origin: [number, number, number]): void;
2406
+ addEventListener(type: "change" | "start" | "end", listener: () => void): void;
2407
+ removeEventListener(type: "change" | "start" | "end", listener: () => void): void;
2408
+ hasEventListener(type: "change" | "start" | "end", listener: () => void): boolean;
2409
+ }
2410
+ declare const PolyFirstPersonControls: vue.DefineComponent<vue.ExtractPropTypes<{
2411
+ enabled: {
2412
+ type: BooleanConstructor;
2413
+ default: boolean;
2414
+ };
2415
+ lookEnabled: {
2416
+ type: BooleanConstructor;
2417
+ default: boolean;
2418
+ };
2419
+ moveEnabled: {
2420
+ type: BooleanConstructor;
2421
+ default: boolean;
2422
+ };
2423
+ jumpEnabled: {
2424
+ type: BooleanConstructor;
2425
+ default: boolean;
2426
+ };
2427
+ crouchEnabled: {
2428
+ type: BooleanConstructor;
2429
+ default: boolean;
2430
+ };
2431
+ lookSensitivity: {
2432
+ type: NumberConstructor;
2433
+ default: number;
2434
+ };
2435
+ invertY: {
2436
+ type: BooleanConstructor;
2437
+ default: boolean;
2438
+ };
2439
+ moveSpeed: {
2440
+ type: NumberConstructor;
2441
+ default: number;
2442
+ };
2443
+ jumpVelocity: {
2444
+ type: NumberConstructor;
2445
+ default: number;
2446
+ };
2447
+ gravity: {
2448
+ type: NumberConstructor;
2449
+ default: number;
2450
+ };
2451
+ eyeHeight: {
2452
+ type: NumberConstructor;
2453
+ default: number;
2454
+ };
2455
+ crouchHeight: {
2456
+ type: NumberConstructor;
2457
+ default: number;
2458
+ };
2459
+ groundZ: {
2460
+ type: NumberConstructor;
2461
+ default: number;
2462
+ };
2463
+ minPitch: {
2464
+ type: NumberConstructor;
2465
+ default: number;
2466
+ };
2467
+ maxPitch: {
2468
+ type: NumberConstructor;
2469
+ default: number;
2470
+ };
2471
+ }>, () => null, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {
2472
+ change: (_origin: [number, number, number]) => true;
2473
+ "interaction-start": (_origin: [number, number, number]) => true;
2474
+ "interaction-end": (_origin: [number, number, number]) => true;
2475
+ }, string, vue.PublicProps, Readonly<vue.ExtractPropTypes<{
2476
+ enabled: {
2477
+ type: BooleanConstructor;
2478
+ default: boolean;
2479
+ };
2480
+ lookEnabled: {
2481
+ type: BooleanConstructor;
2482
+ default: boolean;
2483
+ };
2484
+ moveEnabled: {
2485
+ type: BooleanConstructor;
2486
+ default: boolean;
2487
+ };
2488
+ jumpEnabled: {
2489
+ type: BooleanConstructor;
2490
+ default: boolean;
2491
+ };
2492
+ crouchEnabled: {
2493
+ type: BooleanConstructor;
2494
+ default: boolean;
2495
+ };
2496
+ lookSensitivity: {
2497
+ type: NumberConstructor;
2498
+ default: number;
2499
+ };
2500
+ invertY: {
2501
+ type: BooleanConstructor;
2502
+ default: boolean;
2503
+ };
2504
+ moveSpeed: {
2505
+ type: NumberConstructor;
2506
+ default: number;
2507
+ };
2508
+ jumpVelocity: {
2509
+ type: NumberConstructor;
2510
+ default: number;
2511
+ };
2512
+ gravity: {
2513
+ type: NumberConstructor;
2514
+ default: number;
2515
+ };
2516
+ eyeHeight: {
2517
+ type: NumberConstructor;
2518
+ default: number;
2519
+ };
2520
+ crouchHeight: {
2521
+ type: NumberConstructor;
2522
+ default: number;
2523
+ };
2524
+ groundZ: {
2525
+ type: NumberConstructor;
2526
+ default: number;
2527
+ };
2528
+ minPitch: {
2529
+ type: NumberConstructor;
2530
+ default: number;
2531
+ };
2532
+ maxPitch: {
2533
+ type: NumberConstructor;
2534
+ default: number;
2535
+ };
2536
+ }>> & Readonly<{
2537
+ onChange?: ((_origin: [number, number, number]) => any) | undefined;
2538
+ "onInteraction-start"?: ((_origin: [number, number, number]) => any) | undefined;
2539
+ "onInteraction-end"?: ((_origin: [number, number, number]) => any) | undefined;
2540
+ }>, {
2541
+ enabled: boolean;
2542
+ lookEnabled: boolean;
2543
+ moveEnabled: boolean;
2544
+ jumpEnabled: boolean;
2545
+ crouchEnabled: boolean;
2546
+ lookSensitivity: number;
2547
+ invertY: boolean;
2548
+ moveSpeed: number;
2549
+ jumpVelocity: number;
2550
+ gravity: number;
2551
+ eyeHeight: number;
2552
+ crouchHeight: number;
2553
+ groundZ: number;
2554
+ minPitch: number;
2555
+ maxPitch: number;
2556
+ }, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
2557
+
1228
2558
  interface PolySelectProps {
1229
2559
  multiple?: boolean;
1230
2560
  clearOnMiss?: boolean;
@@ -1419,6 +2749,29 @@ declare const PolyDirectionalLightHelper: vue.DefineComponent<vue.ExtractPropTyp
1419
2749
 
1420
2750
  declare function injectPolyBaseStyles(doc?: Document): void;
1421
2751
 
2752
+ interface PolyRenderSurfaceLeafCounts {
2753
+ quad: number;
2754
+ clippedSolid: number;
2755
+ atlas: number;
2756
+ stableTriangle: number;
2757
+ }
2758
+ interface PolyRenderStats {
2759
+ polygonCount: number;
2760
+ mountedPolygonLeafCount: number;
2761
+ shadowLeafCount: number;
2762
+ surfaceLeafCounts: PolyRenderSurfaceLeafCounts;
2763
+ bucketCount: number;
2764
+ }
2765
+ interface PolyRenderStatsOptions {
2766
+ polygonCount?: number;
2767
+ /**
2768
+ * Optional subtree selector for diagnostics that only want model leaves and
2769
+ * not helpers/floors/gizmos sharing the same scene root.
2770
+ */
2771
+ scopeSelector?: string;
2772
+ }
2773
+ declare function collectPolyRenderStats(root: ParentNode | null | undefined, optionsOrPolygonCount?: number | PolyRenderStatsOptions): PolyRenderStats;
2774
+
1422
2775
  interface UsePolyAnimationResultVue {
1423
2776
  /** Attach to a mesh handle when not passing `root` directly. */
1424
2777
  ref: Ref<PolyAnimationTarget | null>;
@@ -1436,4 +2789,4 @@ interface UsePolyAnimationResultVue {
1436
2789
  }
1437
2790
  declare function usePolyAnimation(clips: MaybeRef<PolyAnimationClip[] | undefined>, controller: MaybeRef<ParseAnimationController | undefined>, root?: MaybeRef<PolyAnimationTarget | null | undefined>): UsePolyAnimationResultVue;
1438
2791
 
1439
- export { type InteractionProps, Poly, PolyAxesHelper, type PolyAxesHelperProps, PolyPerspectiveCamera as PolyCamera, PolyCameraContextKey, type PolyCameraContextValue, type PolyPerspectiveCameraProps as PolyCameraProps, type PolyContext, type PolyControlsAnimateOptions, PolyDirectionalLightHelper, type PolyDirectionalLightHelperProps, type PolyEventHandler, PolyMapControls, type PolyMapControlsCamera, type PolyMapControlsProps, PolyMesh, type PolyMeshHandle, type PolyMeshProps, type PolyMouseEvent, PolyOrbitControls, type PolyOrbitControlsCamera, type PolyOrbitControlsProps, PolyOrthographicCamera, type PolyOrthographicCameraProps, PolyPerspectiveCamera, type PolyPerspectiveCameraProps, type PolyPointerEvent, type PolyProps, PolyScene, type PolySceneProps, PolySelect, type PolySelectProps, type PolySelectionApi, PolySelectionContextKey, PolyTransformControls, type PolyTransformControlsObject, type PolyTransformControlsObjectChangeEvent, type PolyTransformControlsProps, type PolyWheelEvent, type UseCameraOptions, type UseCameraResult, type UseMeshOptions, type UseMeshResult, type UsePolyAnimationResultVue, type UseSceneContextOptions, type UseSceneContextResult, findMeshUnderPoint, findPolyMeshHandle, injectPolyBaseStyles, pointInMeshElement, usePolyAnimation, usePolyCamera, usePolyMaterial, usePolyMesh, usePolySceneContext, usePolySelect, usePolySelectionApi };
2792
+ export { type InteractionProps, Poly, PolyAxesHelper, type PolyAxesHelperProps, PolyBox, PolyOrthographicCamera as PolyCamera, PolyCameraContextKey, type PolyCameraContextValue, type PolyOrthographicCameraProps as PolyCameraProps, PolyCone, type PolyContext, type PolyControlsAnimateOptions, PolyCylinder, PolyDirectionalLightHelper, type PolyDirectionalLightHelperProps, PolyDodecahedron, type PolyEventHandler, PolyFirstPersonControls, type PolyFirstPersonControlsHandle, type PolyFirstPersonControlsOptions, PolyGround, type PolyGroundProps, PolyIcosahedron, PolyMapControls, type PolyMapControlsCamera, type PolyMapControlsProps, PolyMesh, type PolyMeshHandle, type PolyMeshProps, type PolyMouseEvent, PolyOctahedron, PolyOrbitControls, type PolyOrbitControlsCamera, type PolyOrbitControlsProps, PolyOrthographicCamera, type PolyOrthographicCameraProps, PolyPerspectiveCamera, type PolyPerspectiveCameraProps, PolyPlane, type PolyPointerEvent, type PolyProps, type PolyRenderStats, type PolyRenderStatsOptions, type PolyRenderSurfaceLeafCounts, PolyRing, PolyScene, type PolySceneProps, PolySelect, type PolySelectProps, type PolySelectionApi, PolySelectionContextKey, PolySphere, PolyTetrahedron, PolyTorus, PolyTransformControls, type PolyTransformControlsObject, type PolyTransformControlsObjectChangeEvent, type PolyTransformControlsProps, type PolyWheelEvent, type UseCameraOptions, type UseCameraResult, type UseMeshOptions, type UseMeshResult, type UsePolyAnimationResultVue, type UseSceneContextOptions, type UseSceneContextResult, collectPolyRenderStats, findMeshUnderPoint, findPolyMeshHandle, injectPolyBaseStyles, pointInMeshElement, usePolyAnimation, usePolyCamera, usePolyMaterial, usePolyMesh, usePolySceneContext, usePolySelect, usePolySelectionApi };