@liveroom-tech/react-immersive 5.1.0 → 5.3.0

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.
Files changed (48) hide show
  1. package/LICENSE +10 -6
  2. package/README.md +106 -3427
  3. package/dist/binding-builder.css +1 -1
  4. package/dist/binding-builder.js +64 -13
  5. package/dist/binding-builder.mjs +1 -1
  6. package/dist/chunk-4FDMYUGT.mjs +3 -0
  7. package/dist/chunk-CV4E7DOO.mjs +79 -0
  8. package/dist/chunk-F4WT3HEK.mjs +1 -0
  9. package/dist/chunk-FPJZDEON.mjs +1 -0
  10. package/dist/chunk-JHKMRMJH.mjs +1 -0
  11. package/dist/chunk-TW2M4UXT.mjs +1 -0
  12. package/dist/chunk-W24UP6NM.mjs +1 -0
  13. package/dist/hosted.css +1 -1
  14. package/dist/hosted.d.mts +8 -5
  15. package/dist/hosted.d.ts +8 -5
  16. package/dist/hosted.js +63 -12
  17. package/dist/hosted.mjs +1 -1
  18. package/dist/index.css +1 -1
  19. package/dist/index.d.mts +48 -9
  20. package/dist/index.d.ts +48 -9
  21. package/dist/index.js +62 -11
  22. package/dist/index.mjs +1 -1
  23. package/dist/materialVariants-DjTuiWmN.d.mts +314 -0
  24. package/dist/materialVariants-DjTuiWmN.d.ts +314 -0
  25. package/dist/modelInfo-BQ5UZu95.d.ts +43 -0
  26. package/dist/modelInfo-CcYpydB7.d.mts +43 -0
  27. package/dist/{ModelViewer-Bj-KjiDL.d.mts → modelViewerProps-BalkRDni.d.ts} +133 -12
  28. package/dist/{ModelViewer-BkQ73y6N.d.ts → modelViewerProps-DdsJDRB7.d.mts} +133 -12
  29. package/dist/{objectCatalog-BIeXURoq.d.ts → rendererBackend-C_Jb4_Jy.d.mts} +47 -5
  30. package/dist/{objectCatalog-BIeXURoq.d.mts → rendererBackend-C_Jb4_Jy.d.ts} +47 -5
  31. package/dist/simple-model-viewer.css +1 -1
  32. package/dist/simple-model-viewer.d.mts +32 -4
  33. package/dist/simple-model-viewer.d.ts +32 -4
  34. package/dist/simple-model-viewer.js +3 -3
  35. package/dist/simple-model-viewer.mjs +1 -1
  36. package/dist/utils.d.mts +5 -4
  37. package/dist/utils.d.ts +5 -4
  38. package/dist/utils.js +1 -1
  39. package/dist/utils.mjs +1 -1
  40. package/package.json +3 -1
  41. package/dist/chunk-32WCLPTZ.mjs +0 -1
  42. package/dist/chunk-CSGNL4XU.mjs +0 -3
  43. package/dist/chunk-F2ILTIPG.mjs +0 -28
  44. package/dist/chunk-SEESCGUS.mjs +0 -1
  45. package/dist/chunk-V6GALFL5.mjs +0 -1
  46. package/dist/chunk-WN6GMMHF.mjs +0 -1
  47. package/dist/modelInfo-DnkmTGMd.d.mts +0 -23
  48. package/dist/modelInfo-DnkmTGMd.d.ts +0 -23
@@ -1,8 +1,9 @@
1
1
  import { ReactNode } from 'react';
2
- import { r as ObjectBindingDecal, Q as ObjectSurfacePoint, o as ObjectBinding, al as ViewerCameraState, U as SceneAnnotationMarker, n as ObjectActionEvent, an as ViewerObjectInfo, P as ObjectPointerEvent, e as AnimationControls, ak as ViewerCameraConfig, Z as SceneConfig, am as ViewerIsolation } from './objectCatalog-BIeXURoq.mjs';
3
- import { M as ModelFormat, a as ViewerModelInfo } from './modelInfo-DnkmTGMd.mjs';
4
- import { CameraControls } from '@react-three/drei';
5
2
  import { Object3D } from 'three';
3
+ import { R as ReducedMotionSetting, c as ModelViewerLabels } from './materialVariants-DjTuiWmN.js';
4
+ import { V as ViewerLoading, c as ViewerReveal, M as ModelFormat, b as ViewerModelInfo } from './modelInfo-BQ5UZu95.js';
5
+ import { r as ObjectBindingDecal, Q as ObjectSurfacePoint, o as ObjectBinding, S as RendererBackend, ap as ViewerCameraState, Y as SceneAnnotationMarker, ar as ViewerObjectInfo, P as ObjectPointerEvent, n as ObjectActionEvent, e as AnimationControls, ao as ViewerCameraConfig, a1 as SceneConfig, aq as ViewerIsolation } from './rendererBackend-C_Jb4_Jy.js';
6
+ import { CameraControls } from '@react-three/drei';
6
7
 
7
8
  /** Engagement from deliberate viewer interactions, with model/session context. */
8
9
  type ViewerEngagementEvent = {
@@ -19,11 +20,15 @@ type ViewerEngagementEvent = {
19
20
  objectId: string;
20
21
  objectKey: string;
21
22
  label?: string;
22
- source: "canvas" | "panel";
23
+ source: "canvas" | "panel" | "keyboard";
23
24
  } | {
24
25
  type: "variant-chosen";
26
+ /** The variant chosen; null when a group's choice was cleared. */
25
27
  variant: string | null;
28
+ /** The group's previous choice. */
26
29
  previousVariant: string | null;
30
+ /** The option group's name; null for a group without one. */
31
+ group: string | null;
27
32
  } | {
28
33
  type: "ar-started";
29
34
  } | {
@@ -107,10 +112,17 @@ type ModelViewerUiOptions = {
107
112
  annotationNavigation?: boolean;
108
113
  /** Show an annotation's details when its marker is hovered. Default `false`. */
109
114
  annotationOnHover?: boolean;
115
+ /** Category filter chips. Default `true` when annotations have categories. */
116
+ annotationFilters?: boolean;
110
117
  /** Highlight objects under the pointer. Default `true`. */
111
118
  highlightOnHover?: boolean;
112
- /** Buttons for the model's glTF material variants, when it has more than one. Default `true`. */
119
+ /** Swatch rows for the model's glTF material variants, one per option group. Default `true`. */
113
120
  materialVariants?: boolean;
121
+ /**
122
+ * A tab stop for moving through and selecting objects with the keyboard,
123
+ * shown only while it has focus. Default `true`.
124
+ */
125
+ objectNavigator?: boolean;
114
126
  };
115
127
  /**
116
128
  * Takes over parts of texture positioning (`texturePositioning`). Fields left
@@ -151,13 +163,19 @@ type ModelViewerControlsOptions = {
151
163
  enabled?: boolean;
152
164
  /** Move the camera with the keyboard while the canvas has focus. Default `false`. */
153
165
  keyboard?: boolean;
166
+ /**
167
+ * Cut motion the viewer starts on its own (auto-rotate, cinematic autoplay,
168
+ * camera glides). `"user"` follows the visitor's reduced-motion setting.
169
+ * Default `"user"`.
170
+ */
171
+ reducedMotion?: ReducedMotionSetting;
154
172
  /** Allow zooming. Default `true`. */
155
173
  zoom?: boolean;
156
174
  /** Zoom to an object when it's selected. Default `true`. */
157
175
  zoomOnSelect?: boolean;
158
176
  /** Turn the model slowly; a number sets the speed (1 is normal). Default `false`. */
159
177
  autoRotate?: boolean | number;
160
- /** Re-frame the model when the viewer is resized. Default `true`. */
178
+ /** Re-frame the model, or the selected object it zoomed to, when the viewer is resized. Default `true`. */
161
179
  refitOnResize?: boolean;
162
180
  /** Distance, angle and pan limits for the camera. */
163
181
  limits?: CameraLimits;
@@ -175,6 +193,12 @@ type ModelViewerPerfOptions = {
175
193
  profile?: PerformanceProfile;
176
194
  /** Needed for Download PNG and captureImage; costs GPU time. Default `false`. */
177
195
  preserveDrawingBuffer?: boolean;
196
+ /**
197
+ * Draw with three's WebGPU renderer where the browser has WebGPU, WebGL
198
+ * elsewhere. Leaves out post-processing effects, contact shadows and WebXR.
199
+ * Default `false`.
200
+ */
201
+ webgpu?: boolean;
178
202
  };
179
203
  type ModelViewerTilesOptions = {
180
204
  /** A 3D Tiles `tileset.json` to stream instead of loading `modelUrl` whole. */
@@ -256,14 +280,25 @@ type CaptureImageOptions = {
256
280
  type CaptureVideoOptions = {
257
281
  /** Defaults to cinematic when a path is enabled, otherwise turntable. */
258
282
  mode?: "cinematic" | "turntable";
259
- /** Auto prefers WebM, then MP4. Explicit formats reject if unsupported. */
260
- format?: "auto" | "webm" | "mp4";
261
- /** Seconds per pass, in (0, 300]. Defaults to path timing or a 24s orbit. */
283
+ /**
284
+ * Auto prefers WebM, then MP4. `"gif"` makes an animated GIF that loops
285
+ * forever. Explicit formats reject if unsupported.
286
+ */
287
+ format?: "auto" | "webm" | "mp4" | "gif";
288
+ /**
289
+ * Seconds per pass, in (0, 300]. Defaults to path timing, or an orbit of
290
+ * 24s (8s for a GIF).
291
+ */
262
292
  duration?: number;
263
- /** Capture frame rate, from 1 to 60. Default 30. */
293
+ /** Capture frame rate, from 1 to 60. Default 30 (15 for a GIF). */
264
294
  fps?: number;
265
- /** Encoder target bitrate in bits per second. Default 8,000,000. */
295
+ /** Encoder target bitrate in bits per second. Default 8,000,000. Not used for GIFs. */
266
296
  videoBitsPerSecond?: number;
297
+ /**
298
+ * GIF width in pixels, from 16 to 4096; the height follows the canvas. Never
299
+ * wider than the canvas. Default 480.
300
+ */
301
+ gifWidth?: number;
267
302
  /** Aborting discards the recording and restores the viewer. */
268
303
  signal?: AbortSignal;
269
304
  };
@@ -297,6 +332,11 @@ type ViewerReadyState = {
297
332
  /** Records one cinematic pass or turntable revolution as a video Blob. */
298
333
  captureVideo: (options?: CaptureVideoOptions) => Promise<Blob>;
299
334
  invalidate: () => void;
335
+ /**
336
+ * The renderer drawing the viewer: "webgpu" only when ModelViewer's
337
+ * `webgpu` asked for it and the browser has WebGPU.
338
+ */
339
+ rendererBackend: RendererBackend;
300
340
  /**
301
341
  * The live three.js scene, camera-controls instance, and model nodes, for
302
342
  * integrations the rest of the API doesn't cover. Their shapes are those
@@ -334,6 +374,11 @@ declare function useViewerCamera(options?: UseViewerCameraOptions): ViewerCamera
334
374
 
335
375
  type ObjectTransformSpace = "local" | "world";
336
376
 
377
+ type ModelMergeSource = {
378
+ url: string;
379
+ namePrefix: string;
380
+ };
381
+
337
382
  type AnnotationMarker = SceneAnnotationMarker & {
338
383
  markerId?: string;
339
384
  };
@@ -351,7 +396,27 @@ type CustomSceneObjectsPanelProps = {
351
396
  onHover?: (binding: ObjectBinding | null) => void;
352
397
  };
353
398
  type ModelViewerProps = GroupedModelViewerProps & {
399
+ /** Plain-text overrides for built-in UI labels. Missing keys use English. */
400
+ labels?: ModelViewerLabels;
354
401
  modelUrl: string;
402
+ /**
403
+ * An image shown in the viewer's place until its 3D view is drawn: a render
404
+ * or photo of the model, best framed as the viewer frames it. Fitted inside
405
+ * the viewer; set the CSS variable `--ri-poster-fit: cover` to fill it.
406
+ */
407
+ poster?: string;
408
+ /**
409
+ * `"lazy"` (default) starts the 3D view when the viewer is on or near the
410
+ * screen. When the page needs room for viewers in view, one scrolled away
411
+ * from goes back to a picture of itself, and comes back as it was. `"eager"`
412
+ * starts at once and keeps its view.
413
+ */
414
+ loading?: ViewerLoading;
415
+ /**
416
+ * `"interaction"` keeps the poster, with a "View in 3D" button, until the
417
+ * visitor asks for the 3D view. Default `"auto"`.
418
+ */
419
+ reveal?: ViewerReveal;
355
420
  /** Optional 3D Tiles manifest used instead of loading `modelUrl` monolithically. */
356
421
  tilesetUrl?: string | null;
357
422
  /** Screen-space error target for streamed 3D Tiles. Lower is sharper. */
@@ -375,6 +440,15 @@ type ModelViewerProps = GroupedModelViewerProps & {
375
440
  */
376
441
  objectBindings?: Record<string, ObjectBinding> | "auto";
377
442
  selectedObject?: ObjectBinding | null;
443
+ /**
444
+ * Binding keys of several selected objects. Each is outlined in green.
445
+ * While set, the single-selection (blue) outline is hidden.
446
+ */
447
+ multiSelectedKeys?: readonly string[];
448
+ /** Explicit nodes to outline together, overriding multiSelectedKeys. */
449
+ selectedObjectRefs?: Object3D[] | null;
450
+ /** Color of the multi-selection outlines. Defaults to green. */
451
+ selectedObjectOutlineColor?: string;
378
452
  panelHoveredObject?: ObjectBinding | null;
379
453
  onObjectBindingsChange?: (next: Record<string, ObjectBinding>) => void;
380
454
  onObjectSelect?: (binding: ObjectBinding | null) => void;
@@ -385,6 +459,8 @@ type ModelViewerProps = GroupedModelViewerProps & {
385
459
  * texture positioning when that's enabled.
386
460
  */
387
461
  onObjectDoubleClick?: (event: ObjectPointerEvent) => boolean | void;
462
+ /** A decal on the model was double-clicked (the editor uses this to enable Move). */
463
+ onDecalDoubleClick?: (binding: ObjectBinding, decalId: string) => void;
388
464
  /**
389
465
  * An object was right-clicked or, on touch screens, long-pressed. Use it to
390
466
  * open your own menu at `clientX`/`clientY`. A right-drag still pans.
@@ -409,6 +485,7 @@ type ModelViewerProps = GroupedModelViewerProps & {
409
485
  onViewerReady?: (viewer: ViewerReadyState) => void;
410
486
  onTextureUpload?: (file: File, objectId: string) => Promise<string>;
411
487
  onAnimationsReady?: (controls: AnimationControls) => void;
488
+ onModelAnimationsReady?: (url: string, controls: AnimationControls) => void;
412
489
  onAnnotationsChange?: (annotations: AnnotationMarker[]) => void;
413
490
  activeAnnotation?: AnnotationMarker | null;
414
491
  onActiveAnnotationChange?: (annotation: AnnotationMarker | null) => void;
@@ -438,14 +515,24 @@ type ModelViewerProps = GroupedModelViewerProps & {
438
515
  onAutoFit?: () => Promise<boolean>;
439
516
  enableCameraControls?: boolean;
440
517
  moveModeEnabled?: boolean;
518
+ /** Shows a draggable corner handle to resize the selected object, independently of moveModeEnabled. */
519
+ scaleModeEnabled?: boolean;
441
520
  /** Aligns PivotControls to the scene or to the selected object. */
442
521
  objectTransformSpace?: ObjectTransformSpace;
443
522
  /** Enables canvas-focused camera shortcuts. Disabled by default. */
444
523
  enableKeyboardNavigation?: boolean;
524
+ /**
525
+ * Cuts motion the viewer starts on its own: auto-rotate and cinematic
526
+ * autoplay don't start, and camera moves jump instead of gliding. `"user"`
527
+ * (default) follows the visitor's `prefers-reduced-motion` setting;
528
+ * `"always"` and `"never"` override it.
529
+ */
530
+ reducedMotion?: ReducedMotionSetting;
445
531
  refitOnResize?: boolean;
446
532
  renderMode?: "always" | "demand";
447
533
  maxDpr?: number;
448
534
  preserveDrawingBuffer?: boolean;
535
+ webgpu?: boolean;
449
536
  performanceProfile?: PerformanceProfile;
450
537
  dracoDecoderPath?: string | false;
451
538
  ktx2TranscoderPath?: string | false;
@@ -458,6 +545,7 @@ type ModelViewerProps = GroupedModelViewerProps & {
458
545
  showIsolateControls?: boolean;
459
546
  showSectionTools?: boolean;
460
547
  showMaterialVariants?: boolean;
548
+ showObjectNavigator?: boolean;
461
549
  cinematic?: boolean | CinematicConfig;
462
550
  measurementUnit?: string;
463
551
  enableXR?: boolean;
@@ -466,6 +554,9 @@ type ModelViewerProps = GroupedModelViewerProps & {
466
554
  mobileHandoffUrl?: string;
467
555
  showAnnotationNavigation?: boolean;
468
556
  showAnnotationOnHover?: boolean;
557
+ showAnnotationFilters?: boolean;
558
+ annotationCategories?: string[] | null;
559
+ onAnnotationCategoriesChange?: (categories: string[] | null) => void;
469
560
  onSceneConfigChange?: (config: SceneConfig) => void;
470
561
  showViewGizmo?: boolean;
471
562
  /**
@@ -492,6 +583,36 @@ type ModelViewerProps = GroupedModelViewerProps & {
492
583
  * binding's `style.material.texture`.
493
584
  */
494
585
  texturePositioning?: boolean | TexturePositioningControls;
586
+ extraModelUrls?: string[];
587
+ onExtraModelError?: (url: string, error: unknown) => void;
588
+ onExtraModelLoaded?: (url: string, scene: Object3D) => void;
589
+ originalNodePoses?: Record<string, {
590
+ position: [number, number, number];
591
+ rotation?: [number, number, number];
592
+ scale?: [number, number, number];
593
+ }>;
594
+ /** Each entry supplies its own bindings. Uncontrolled edits are kept per URL. */
595
+ models?: ModelViewerModelEntry[];
596
+ mergeModels?: ModelMergeSource[];
597
+ onMergeModelLoaded?: (url: string, mergedRoot: Object3D) => void;
598
+ onMergeModelError?: (url: string, error: unknown) => void;
599
+ /** Selects a model from the switcher. The switcher is hidden when omitted. */
600
+ onModelChange?: (url: string) => void;
601
+ };
602
+ type ModelViewerModelEntry = {
603
+ url: string;
604
+ /** Display name for the model switcher; falls back to the URL's filename. */
605
+ label?: string;
606
+ /** Bindings for this model; used in preference to top-level objectBindings. */
607
+ objectBindings: Record<string, ObjectBinding>;
608
+ originalNodePoses?: Record<string, {
609
+ position: [number, number, number];
610
+ rotation?: [number, number, number];
611
+ scale?: [number, number, number];
612
+ }>;
613
+ mergeModels?: ModelMergeSource[];
614
+ /** Scene settings for this slot while parked; the active slot uses the viewer's sceneConfig. */
615
+ sceneConfig?: SceneConfig;
495
616
  };
496
617
 
497
- export { type AnnotationMarker as A, type CameraControllerType as C, type DecalMoveTarget as D, type GroupedModelViewerProps as G, type HomeCameraState as H, MODEL_VIEWER_PRESETS as M, type ObjectTransformSpace as O, type PerformanceProfile as P, type TexturePositioningControls as T, type UseViewerCameraOptions as U, type ViewerCameraPreset as V, type XRScaleMode as X, type CameraLimits as a, type CaptureImageOptions as b, type CaptureVideoOptions as c, type CinematicConfig as d, type CinematicWaypoint as e, type CustomObjectBindingDataPanelProps as f, type CustomSceneObjectsPanelProps as g, type ModelViewerControlsOptions as h, type ModelViewerDecoderOptions as i, type ModelViewerPerfOptions as j, type ModelViewerPreset as k, type ModelViewerProps as l, type ModelViewerTilesOptions as m, type ModelViewerToolsOptions as n, type ModelViewerUiOptions as o, type ModelViewerXrOptions as p, type MouseControllerPosition as q, type ViewerCameraProps as r, type ViewerEngagementEvent as s, type ViewerReadyState as t, useViewerCamera as u };
618
+ export { type AnnotationMarker as A, type CameraControllerType as C, type DecalMoveTarget as D, type GroupedModelViewerProps as G, type HomeCameraState as H, MODEL_VIEWER_PRESETS as M, type ObjectTransformSpace as O, type PerformanceProfile as P, type TexturePositioningControls as T, type UseViewerCameraOptions as U, type ViewerCameraPreset as V, type XRScaleMode as X, type CameraLimits as a, type CaptureImageOptions as b, type CaptureVideoOptions as c, type CinematicConfig as d, type CinematicWaypoint as e, type CustomObjectBindingDataPanelProps as f, type CustomSceneObjectsPanelProps as g, type ModelMergeSource as h, type ModelViewerControlsOptions as i, type ModelViewerDecoderOptions as j, type ModelViewerModelEntry as k, type ModelViewerPerfOptions as l, type ModelViewerPreset as m, type ModelViewerProps as n, type ModelViewerTilesOptions as o, type ModelViewerToolsOptions as p, type ModelViewerUiOptions as q, type ModelViewerXrOptions as r, type MouseControllerPosition as s, type ViewerCameraProps as t, type ViewerEngagementEvent as u, type ViewerReadyState as v, useViewerCamera as w };
@@ -1,8 +1,9 @@
1
1
  import { ReactNode } from 'react';
2
- import { r as ObjectBindingDecal, Q as ObjectSurfacePoint, o as ObjectBinding, al as ViewerCameraState, U as SceneAnnotationMarker, n as ObjectActionEvent, an as ViewerObjectInfo, P as ObjectPointerEvent, e as AnimationControls, ak as ViewerCameraConfig, Z as SceneConfig, am as ViewerIsolation } from './objectCatalog-BIeXURoq.js';
3
- import { M as ModelFormat, a as ViewerModelInfo } from './modelInfo-DnkmTGMd.js';
4
- import { CameraControls } from '@react-three/drei';
5
2
  import { Object3D } from 'three';
3
+ import { R as ReducedMotionSetting, c as ModelViewerLabels } from './materialVariants-DjTuiWmN.mjs';
4
+ import { V as ViewerLoading, c as ViewerReveal, M as ModelFormat, b as ViewerModelInfo } from './modelInfo-CcYpydB7.mjs';
5
+ import { r as ObjectBindingDecal, Q as ObjectSurfacePoint, o as ObjectBinding, S as RendererBackend, ap as ViewerCameraState, Y as SceneAnnotationMarker, ar as ViewerObjectInfo, P as ObjectPointerEvent, n as ObjectActionEvent, e as AnimationControls, ao as ViewerCameraConfig, a1 as SceneConfig, aq as ViewerIsolation } from './rendererBackend-C_Jb4_Jy.mjs';
6
+ import { CameraControls } from '@react-three/drei';
6
7
 
7
8
  /** Engagement from deliberate viewer interactions, with model/session context. */
8
9
  type ViewerEngagementEvent = {
@@ -19,11 +20,15 @@ type ViewerEngagementEvent = {
19
20
  objectId: string;
20
21
  objectKey: string;
21
22
  label?: string;
22
- source: "canvas" | "panel";
23
+ source: "canvas" | "panel" | "keyboard";
23
24
  } | {
24
25
  type: "variant-chosen";
26
+ /** The variant chosen; null when a group's choice was cleared. */
25
27
  variant: string | null;
28
+ /** The group's previous choice. */
26
29
  previousVariant: string | null;
30
+ /** The option group's name; null for a group without one. */
31
+ group: string | null;
27
32
  } | {
28
33
  type: "ar-started";
29
34
  } | {
@@ -107,10 +112,17 @@ type ModelViewerUiOptions = {
107
112
  annotationNavigation?: boolean;
108
113
  /** Show an annotation's details when its marker is hovered. Default `false`. */
109
114
  annotationOnHover?: boolean;
115
+ /** Category filter chips. Default `true` when annotations have categories. */
116
+ annotationFilters?: boolean;
110
117
  /** Highlight objects under the pointer. Default `true`. */
111
118
  highlightOnHover?: boolean;
112
- /** Buttons for the model's glTF material variants, when it has more than one. Default `true`. */
119
+ /** Swatch rows for the model's glTF material variants, one per option group. Default `true`. */
113
120
  materialVariants?: boolean;
121
+ /**
122
+ * A tab stop for moving through and selecting objects with the keyboard,
123
+ * shown only while it has focus. Default `true`.
124
+ */
125
+ objectNavigator?: boolean;
114
126
  };
115
127
  /**
116
128
  * Takes over parts of texture positioning (`texturePositioning`). Fields left
@@ -151,13 +163,19 @@ type ModelViewerControlsOptions = {
151
163
  enabled?: boolean;
152
164
  /** Move the camera with the keyboard while the canvas has focus. Default `false`. */
153
165
  keyboard?: boolean;
166
+ /**
167
+ * Cut motion the viewer starts on its own (auto-rotate, cinematic autoplay,
168
+ * camera glides). `"user"` follows the visitor's reduced-motion setting.
169
+ * Default `"user"`.
170
+ */
171
+ reducedMotion?: ReducedMotionSetting;
154
172
  /** Allow zooming. Default `true`. */
155
173
  zoom?: boolean;
156
174
  /** Zoom to an object when it's selected. Default `true`. */
157
175
  zoomOnSelect?: boolean;
158
176
  /** Turn the model slowly; a number sets the speed (1 is normal). Default `false`. */
159
177
  autoRotate?: boolean | number;
160
- /** Re-frame the model when the viewer is resized. Default `true`. */
178
+ /** Re-frame the model, or the selected object it zoomed to, when the viewer is resized. Default `true`. */
161
179
  refitOnResize?: boolean;
162
180
  /** Distance, angle and pan limits for the camera. */
163
181
  limits?: CameraLimits;
@@ -175,6 +193,12 @@ type ModelViewerPerfOptions = {
175
193
  profile?: PerformanceProfile;
176
194
  /** Needed for Download PNG and captureImage; costs GPU time. Default `false`. */
177
195
  preserveDrawingBuffer?: boolean;
196
+ /**
197
+ * Draw with three's WebGPU renderer where the browser has WebGPU, WebGL
198
+ * elsewhere. Leaves out post-processing effects, contact shadows and WebXR.
199
+ * Default `false`.
200
+ */
201
+ webgpu?: boolean;
178
202
  };
179
203
  type ModelViewerTilesOptions = {
180
204
  /** A 3D Tiles `tileset.json` to stream instead of loading `modelUrl` whole. */
@@ -256,14 +280,25 @@ type CaptureImageOptions = {
256
280
  type CaptureVideoOptions = {
257
281
  /** Defaults to cinematic when a path is enabled, otherwise turntable. */
258
282
  mode?: "cinematic" | "turntable";
259
- /** Auto prefers WebM, then MP4. Explicit formats reject if unsupported. */
260
- format?: "auto" | "webm" | "mp4";
261
- /** Seconds per pass, in (0, 300]. Defaults to path timing or a 24s orbit. */
283
+ /**
284
+ * Auto prefers WebM, then MP4. `"gif"` makes an animated GIF that loops
285
+ * forever. Explicit formats reject if unsupported.
286
+ */
287
+ format?: "auto" | "webm" | "mp4" | "gif";
288
+ /**
289
+ * Seconds per pass, in (0, 300]. Defaults to path timing, or an orbit of
290
+ * 24s (8s for a GIF).
291
+ */
262
292
  duration?: number;
263
- /** Capture frame rate, from 1 to 60. Default 30. */
293
+ /** Capture frame rate, from 1 to 60. Default 30 (15 for a GIF). */
264
294
  fps?: number;
265
- /** Encoder target bitrate in bits per second. Default 8,000,000. */
295
+ /** Encoder target bitrate in bits per second. Default 8,000,000. Not used for GIFs. */
266
296
  videoBitsPerSecond?: number;
297
+ /**
298
+ * GIF width in pixels, from 16 to 4096; the height follows the canvas. Never
299
+ * wider than the canvas. Default 480.
300
+ */
301
+ gifWidth?: number;
267
302
  /** Aborting discards the recording and restores the viewer. */
268
303
  signal?: AbortSignal;
269
304
  };
@@ -297,6 +332,11 @@ type ViewerReadyState = {
297
332
  /** Records one cinematic pass or turntable revolution as a video Blob. */
298
333
  captureVideo: (options?: CaptureVideoOptions) => Promise<Blob>;
299
334
  invalidate: () => void;
335
+ /**
336
+ * The renderer drawing the viewer: "webgpu" only when ModelViewer's
337
+ * `webgpu` asked for it and the browser has WebGPU.
338
+ */
339
+ rendererBackend: RendererBackend;
300
340
  /**
301
341
  * The live three.js scene, camera-controls instance, and model nodes, for
302
342
  * integrations the rest of the API doesn't cover. Their shapes are those
@@ -334,6 +374,11 @@ declare function useViewerCamera(options?: UseViewerCameraOptions): ViewerCamera
334
374
 
335
375
  type ObjectTransformSpace = "local" | "world";
336
376
 
377
+ type ModelMergeSource = {
378
+ url: string;
379
+ namePrefix: string;
380
+ };
381
+
337
382
  type AnnotationMarker = SceneAnnotationMarker & {
338
383
  markerId?: string;
339
384
  };
@@ -351,7 +396,27 @@ type CustomSceneObjectsPanelProps = {
351
396
  onHover?: (binding: ObjectBinding | null) => void;
352
397
  };
353
398
  type ModelViewerProps = GroupedModelViewerProps & {
399
+ /** Plain-text overrides for built-in UI labels. Missing keys use English. */
400
+ labels?: ModelViewerLabels;
354
401
  modelUrl: string;
402
+ /**
403
+ * An image shown in the viewer's place until its 3D view is drawn: a render
404
+ * or photo of the model, best framed as the viewer frames it. Fitted inside
405
+ * the viewer; set the CSS variable `--ri-poster-fit: cover` to fill it.
406
+ */
407
+ poster?: string;
408
+ /**
409
+ * `"lazy"` (default) starts the 3D view when the viewer is on or near the
410
+ * screen. When the page needs room for viewers in view, one scrolled away
411
+ * from goes back to a picture of itself, and comes back as it was. `"eager"`
412
+ * starts at once and keeps its view.
413
+ */
414
+ loading?: ViewerLoading;
415
+ /**
416
+ * `"interaction"` keeps the poster, with a "View in 3D" button, until the
417
+ * visitor asks for the 3D view. Default `"auto"`.
418
+ */
419
+ reveal?: ViewerReveal;
355
420
  /** Optional 3D Tiles manifest used instead of loading `modelUrl` monolithically. */
356
421
  tilesetUrl?: string | null;
357
422
  /** Screen-space error target for streamed 3D Tiles. Lower is sharper. */
@@ -375,6 +440,15 @@ type ModelViewerProps = GroupedModelViewerProps & {
375
440
  */
376
441
  objectBindings?: Record<string, ObjectBinding> | "auto";
377
442
  selectedObject?: ObjectBinding | null;
443
+ /**
444
+ * Binding keys of several selected objects. Each is outlined in green.
445
+ * While set, the single-selection (blue) outline is hidden.
446
+ */
447
+ multiSelectedKeys?: readonly string[];
448
+ /** Explicit nodes to outline together, overriding multiSelectedKeys. */
449
+ selectedObjectRefs?: Object3D[] | null;
450
+ /** Color of the multi-selection outlines. Defaults to green. */
451
+ selectedObjectOutlineColor?: string;
378
452
  panelHoveredObject?: ObjectBinding | null;
379
453
  onObjectBindingsChange?: (next: Record<string, ObjectBinding>) => void;
380
454
  onObjectSelect?: (binding: ObjectBinding | null) => void;
@@ -385,6 +459,8 @@ type ModelViewerProps = GroupedModelViewerProps & {
385
459
  * texture positioning when that's enabled.
386
460
  */
387
461
  onObjectDoubleClick?: (event: ObjectPointerEvent) => boolean | void;
462
+ /** A decal on the model was double-clicked (the editor uses this to enable Move). */
463
+ onDecalDoubleClick?: (binding: ObjectBinding, decalId: string) => void;
388
464
  /**
389
465
  * An object was right-clicked or, on touch screens, long-pressed. Use it to
390
466
  * open your own menu at `clientX`/`clientY`. A right-drag still pans.
@@ -409,6 +485,7 @@ type ModelViewerProps = GroupedModelViewerProps & {
409
485
  onViewerReady?: (viewer: ViewerReadyState) => void;
410
486
  onTextureUpload?: (file: File, objectId: string) => Promise<string>;
411
487
  onAnimationsReady?: (controls: AnimationControls) => void;
488
+ onModelAnimationsReady?: (url: string, controls: AnimationControls) => void;
412
489
  onAnnotationsChange?: (annotations: AnnotationMarker[]) => void;
413
490
  activeAnnotation?: AnnotationMarker | null;
414
491
  onActiveAnnotationChange?: (annotation: AnnotationMarker | null) => void;
@@ -438,14 +515,24 @@ type ModelViewerProps = GroupedModelViewerProps & {
438
515
  onAutoFit?: () => Promise<boolean>;
439
516
  enableCameraControls?: boolean;
440
517
  moveModeEnabled?: boolean;
518
+ /** Shows a draggable corner handle to resize the selected object, independently of moveModeEnabled. */
519
+ scaleModeEnabled?: boolean;
441
520
  /** Aligns PivotControls to the scene or to the selected object. */
442
521
  objectTransformSpace?: ObjectTransformSpace;
443
522
  /** Enables canvas-focused camera shortcuts. Disabled by default. */
444
523
  enableKeyboardNavigation?: boolean;
524
+ /**
525
+ * Cuts motion the viewer starts on its own: auto-rotate and cinematic
526
+ * autoplay don't start, and camera moves jump instead of gliding. `"user"`
527
+ * (default) follows the visitor's `prefers-reduced-motion` setting;
528
+ * `"always"` and `"never"` override it.
529
+ */
530
+ reducedMotion?: ReducedMotionSetting;
445
531
  refitOnResize?: boolean;
446
532
  renderMode?: "always" | "demand";
447
533
  maxDpr?: number;
448
534
  preserveDrawingBuffer?: boolean;
535
+ webgpu?: boolean;
449
536
  performanceProfile?: PerformanceProfile;
450
537
  dracoDecoderPath?: string | false;
451
538
  ktx2TranscoderPath?: string | false;
@@ -458,6 +545,7 @@ type ModelViewerProps = GroupedModelViewerProps & {
458
545
  showIsolateControls?: boolean;
459
546
  showSectionTools?: boolean;
460
547
  showMaterialVariants?: boolean;
548
+ showObjectNavigator?: boolean;
461
549
  cinematic?: boolean | CinematicConfig;
462
550
  measurementUnit?: string;
463
551
  enableXR?: boolean;
@@ -466,6 +554,9 @@ type ModelViewerProps = GroupedModelViewerProps & {
466
554
  mobileHandoffUrl?: string;
467
555
  showAnnotationNavigation?: boolean;
468
556
  showAnnotationOnHover?: boolean;
557
+ showAnnotationFilters?: boolean;
558
+ annotationCategories?: string[] | null;
559
+ onAnnotationCategoriesChange?: (categories: string[] | null) => void;
469
560
  onSceneConfigChange?: (config: SceneConfig) => void;
470
561
  showViewGizmo?: boolean;
471
562
  /**
@@ -492,6 +583,36 @@ type ModelViewerProps = GroupedModelViewerProps & {
492
583
  * binding's `style.material.texture`.
493
584
  */
494
585
  texturePositioning?: boolean | TexturePositioningControls;
586
+ extraModelUrls?: string[];
587
+ onExtraModelError?: (url: string, error: unknown) => void;
588
+ onExtraModelLoaded?: (url: string, scene: Object3D) => void;
589
+ originalNodePoses?: Record<string, {
590
+ position: [number, number, number];
591
+ rotation?: [number, number, number];
592
+ scale?: [number, number, number];
593
+ }>;
594
+ /** Each entry supplies its own bindings. Uncontrolled edits are kept per URL. */
595
+ models?: ModelViewerModelEntry[];
596
+ mergeModels?: ModelMergeSource[];
597
+ onMergeModelLoaded?: (url: string, mergedRoot: Object3D) => void;
598
+ onMergeModelError?: (url: string, error: unknown) => void;
599
+ /** Selects a model from the switcher. The switcher is hidden when omitted. */
600
+ onModelChange?: (url: string) => void;
601
+ };
602
+ type ModelViewerModelEntry = {
603
+ url: string;
604
+ /** Display name for the model switcher; falls back to the URL's filename. */
605
+ label?: string;
606
+ /** Bindings for this model; used in preference to top-level objectBindings. */
607
+ objectBindings: Record<string, ObjectBinding>;
608
+ originalNodePoses?: Record<string, {
609
+ position: [number, number, number];
610
+ rotation?: [number, number, number];
611
+ scale?: [number, number, number];
612
+ }>;
613
+ mergeModels?: ModelMergeSource[];
614
+ /** Scene settings for this slot while parked; the active slot uses the viewer's sceneConfig. */
615
+ sceneConfig?: SceneConfig;
495
616
  };
496
617
 
497
- export { type AnnotationMarker as A, type CameraControllerType as C, type DecalMoveTarget as D, type GroupedModelViewerProps as G, type HomeCameraState as H, MODEL_VIEWER_PRESETS as M, type ObjectTransformSpace as O, type PerformanceProfile as P, type TexturePositioningControls as T, type UseViewerCameraOptions as U, type ViewerCameraPreset as V, type XRScaleMode as X, type CameraLimits as a, type CaptureImageOptions as b, type CaptureVideoOptions as c, type CinematicConfig as d, type CinematicWaypoint as e, type CustomObjectBindingDataPanelProps as f, type CustomSceneObjectsPanelProps as g, type ModelViewerControlsOptions as h, type ModelViewerDecoderOptions as i, type ModelViewerPerfOptions as j, type ModelViewerPreset as k, type ModelViewerProps as l, type ModelViewerTilesOptions as m, type ModelViewerToolsOptions as n, type ModelViewerUiOptions as o, type ModelViewerXrOptions as p, type MouseControllerPosition as q, type ViewerCameraProps as r, type ViewerEngagementEvent as s, type ViewerReadyState as t, useViewerCamera as u };
618
+ export { type AnnotationMarker as A, type CameraControllerType as C, type DecalMoveTarget as D, type GroupedModelViewerProps as G, type HomeCameraState as H, MODEL_VIEWER_PRESETS as M, type ObjectTransformSpace as O, type PerformanceProfile as P, type TexturePositioningControls as T, type UseViewerCameraOptions as U, type ViewerCameraPreset as V, type XRScaleMode as X, type CameraLimits as a, type CaptureImageOptions as b, type CaptureVideoOptions as c, type CinematicConfig as d, type CinematicWaypoint as e, type CustomObjectBindingDataPanelProps as f, type CustomSceneObjectsPanelProps as g, type ModelMergeSource as h, type ModelViewerControlsOptions as i, type ModelViewerDecoderOptions as j, type ModelViewerModelEntry as k, type ModelViewerPerfOptions as l, type ModelViewerPreset as m, type ModelViewerProps as n, type ModelViewerTilesOptions as o, type ModelViewerToolsOptions as p, type ModelViewerUiOptions as q, type ModelViewerXrOptions as r, type MouseControllerPosition as s, type ViewerCameraProps as t, type ViewerEngagementEvent as u, type ViewerReadyState as v, useViewerCamera as w };
@@ -105,10 +105,11 @@ type SceneModelConfig = {
105
105
  autoRotate?: boolean;
106
106
  autoRotateSpeed?: number;
107
107
  /**
108
- * The glTF material variant (KHR_materials_variants) to show, by name, or
109
- * null for the model's default materials.
108
+ * The glTF material variants (KHR_materials_variants) to show, by name: at
109
+ * most one from each option group (see `MaterialVariantGroup`). Empty, or
110
+ * left out, for the model's default materials.
110
111
  */
111
- materialVariant?: string | null;
112
+ activeVariants?: string[];
112
113
  };
113
114
  type SceneCameraConfig = {
114
115
  fieldOfView: number;
@@ -360,6 +361,22 @@ type ScenePostProcessingConfig = {
360
361
  rampInvert: boolean;
361
362
  };
362
363
  };
364
+ type SceneAnnotationCameraView = {
365
+ position: [number, number, number];
366
+ target: [number, number, number];
367
+ azimuthAngle?: number;
368
+ polarAngle?: number;
369
+ fov?: number | null;
370
+ zoom?: number;
371
+ };
372
+ type SceneAnnotationImage = {
373
+ src: string;
374
+ alt?: string;
375
+ };
376
+ type SceneAnnotationLink = {
377
+ href: string;
378
+ label: string;
379
+ };
363
380
  type SceneAnnotationMarker = {
364
381
  id: number;
365
382
  worldPosition: [number, number, number];
@@ -369,6 +386,14 @@ type SceneAnnotationMarker = {
369
386
  anchorLocalPosition?: [number, number, number];
370
387
  title: string;
371
388
  description: string;
389
+ /** World-space camera framing restored on selection and during tours. */
390
+ cameraView?: SceneAnnotationCameraView;
391
+ images?: SceneAnnotationImage[];
392
+ links?: SceneAnnotationLink[];
393
+ category?: string;
394
+ /** Inclusive camera-to-marker distance bounds, in scene units. */
395
+ minDistance?: number;
396
+ maxDistance?: number;
372
397
  };
373
398
  type SceneCinematicWaypoint = {
374
399
  position: [number, number, number];
@@ -568,6 +593,8 @@ type ViewerAnimationsProps = {
568
593
  setSpeed: (speed: number, clipName?: string) => void;
569
594
  seek: (time: number, clipName?: string) => void;
570
595
  handleAnimationsReady: (controls: AnimationControls) => void;
596
+ /** Disconnect the previous model while the next one is loading. */
597
+ clearAnimations: () => void;
571
598
  };
572
599
  declare function useViewerAnimations(): ViewerAnimationsProps;
573
600
 
@@ -709,12 +736,23 @@ type ObjectBindingTextureSlot = {
709
736
  };
710
737
  type ObjectBindingTextureChannel = "baseColor" | "metalness" | "roughness" | "emissive" | "alpha" | "normal" | "bump" | "ao" | "displacement" | "clearcoat" | "clearcoatRoughness" | "clearcoatNormal" | "anisotropy" | "transmission" | "thickness" | "sheenColor" | "sheenRoughness" | "specularIntensity" | "specularColor";
711
738
  type ObjectBindingTransform = {
712
- /** Local-space position in model units. */
739
+ /** Local xy/xz/yz shear, applied between rotation and scale. Preserves rigid world edits under non-uniform parents. */
740
+ shear?: [number, number, number];
741
+ /** Local-space node-origin position, or the reference-pose position when pivot is set. */
713
742
  position?: [number, number, number];
714
743
  /** Local-space Euler rotation in radians. */
715
744
  rotation?: [number, number, number];
716
745
  /** Local-space scale. */
717
746
  scale?: [number, number, number];
747
+ /**
748
+ * Opt-in centered editing. Legacy transforms without this field remain direct
749
+ * local P/R/S. The reference offset keeps position independent of later
750
+ * rotation/scale edits: rendered origin = position + offset - R * H * S * point (H is shear).
751
+ */
752
+ pivot?: {
753
+ point: [number, number, number];
754
+ offset: [number, number, number];
755
+ };
718
756
  };
719
757
  declare const MATERIAL_SIDES: readonly ["front", "back", "double"];
720
758
  type ObjectBindingMaterialSide = (typeof MATERIAL_SIDES)[number];
@@ -819,6 +857,7 @@ type ObjectBinding = {
819
857
  group?: string;
820
858
  tags?: string[];
821
859
  status?: ObjectBindingStatus;
860
+ removed?: boolean;
822
861
  visible?: boolean;
823
862
  selectable?: boolean;
824
863
  hoverable?: boolean;
@@ -872,4 +911,7 @@ type ViewerObjectInfo = {
872
911
  maximum: [number, number, number];
873
912
  };
874
913
 
875
- export { type SceneConfigPatch as $, type AnimationAction as A, type BindingEdit as B, type CameraAction as C, DEFAULT_SCENE_CONFIG as D, type EnvironmentPreset as E, type ObjectBindingTextureChannel as F, type GlitchModeName as G, type ObjectBindingTextureSlot as H, type IsolatedObjectBindings as I, type ObjectBindingTransform as J, type KernelSizeName as K, type ObjectBindingType as L, MATERIAL_BLENDING_MODES as M, type ObjectBindingsActionEffect as N, type ObjectActionEffect as O, type ObjectPointerEvent as P, type ObjectSurfacePoint as Q, type RampTypeName as R, type SceneAnimationClipConfig as S, type SceneAnimationConfig as T, type SceneAnnotationMarker as U, type SceneBackgroundConfig as V, type SceneCameraConfig as W, type SceneCinematicConfig as X, type SceneCinematicWaypoint as Y, type SceneConfig as Z, type SceneConfigActionEffect as _, type AnimationActionEffect as a, type SceneEnvironmentConfig as a0, type SceneGroundShadowConfig as a1, type SceneLight as a2, type SceneLightAttachment as a3, type SceneLightType as a4, type SceneLightingConfig as a5, type SceneModelConfig as a6, type SceneModelRenderer as a7, type ScenePostProcessingConfig as a8, type SceneSectionAxis as a9, type SceneSectionConfig as aa, type SceneShadowConfig as ab, type SceneStyleColorScale as ac, type SceneStyleCondition as ad, type SceneStylePulse as ae, type SceneStyleRule as af, type SceneWireframeConfig as ag, type StyledObjectBindings as ah, type StyledObjectPulse as ai, type ViewerAnimationsProps as aj, type ViewerCameraConfig as ak, type ViewerCameraState as al, type ViewerIsolation as am, type ViewerObjectInfo as an, type VisibilityActionEffect as ao, applyIsolation as ap, applyStyleRules as aq, colorScaleValue as ar, isolatedBindingKeys as as, material as at, patchBindings as au, patchSceneConfig as av, selectBindingKeys as aw, selectBindings as ax, useViewerAnimations as ay, type AnimationClipInfo as b, type AnimationClipState as c, type AnimationClipStatus as d, type AnimationControls as e, type AnimationLoopMode as f, type AnimationPlayOptions as g, type AnimationPlaybackState as h, type CameraActionEffect as i, DEFAULT_SECTION_CONFIG as j, type DeepPartial as k, type IsolationActionEffect as l, MATERIAL_SIDES as m, type ObjectActionEvent as n, type ObjectBinding as o, type ObjectBindingAction as p, type ObjectBindingCameraState as q, type ObjectBindingDecal as r, type ObjectBindingMaterial as s, type ObjectBindingMaterialBlendingMode as t, type ObjectBindingMaterialSide as u, type ObjectBindingPatch as v, type ObjectBindingSelector as w, type ObjectBindingStatus as x, type ObjectBindingStyle as y, type ObjectBindingTarget as z };
914
+ /** Which three.js renderer draws a viewer. */
915
+ type RendererBackend = "webgl" | "webgpu";
916
+
917
+ export { type SceneCinematicConfig as $, type AnimationAction as A, type BindingEdit as B, type CameraAction as C, DEFAULT_SCENE_CONFIG as D, type EnvironmentPreset as E, type ObjectBindingTextureChannel as F, type GlitchModeName as G, type ObjectBindingTextureSlot as H, type IsolatedObjectBindings as I, type ObjectBindingTransform as J, type KernelSizeName as K, type ObjectBindingType as L, MATERIAL_BLENDING_MODES as M, type ObjectBindingsActionEffect as N, type ObjectActionEffect as O, type ObjectPointerEvent as P, type ObjectSurfacePoint as Q, type RampTypeName as R, type RendererBackend as S, type SceneAnimationClipConfig as T, type SceneAnimationConfig as U, type SceneAnnotationCameraView as V, type SceneAnnotationImage as W, type SceneAnnotationLink as X, type SceneAnnotationMarker as Y, type SceneBackgroundConfig as Z, type SceneCameraConfig as _, type AnimationActionEffect as a, type SceneCinematicWaypoint as a0, type SceneConfig as a1, type SceneConfigActionEffect as a2, type SceneConfigPatch as a3, type SceneEnvironmentConfig as a4, type SceneGroundShadowConfig as a5, type SceneLight as a6, type SceneLightAttachment as a7, type SceneLightType as a8, type SceneLightingConfig as a9, selectBindingKeys as aA, selectBindings as aB, useViewerAnimations as aC, type SceneModelConfig as aa, type SceneModelRenderer as ab, type ScenePostProcessingConfig as ac, type SceneSectionAxis as ad, type SceneSectionConfig as ae, type SceneShadowConfig as af, type SceneStyleColorScale as ag, type SceneStyleCondition as ah, type SceneStylePulse as ai, type SceneStyleRule as aj, type SceneWireframeConfig as ak, type StyledObjectBindings as al, type StyledObjectPulse as am, type ViewerAnimationsProps as an, type ViewerCameraConfig as ao, type ViewerCameraState as ap, type ViewerIsolation as aq, type ViewerObjectInfo as ar, type VisibilityActionEffect as as, applyIsolation as at, applyStyleRules as au, colorScaleValue as av, isolatedBindingKeys as aw, material as ax, patchBindings as ay, patchSceneConfig as az, type AnimationClipInfo as b, type AnimationClipState as c, type AnimationClipStatus as d, type AnimationControls as e, type AnimationLoopMode as f, type AnimationPlayOptions as g, type AnimationPlaybackState as h, type CameraActionEffect as i, DEFAULT_SECTION_CONFIG as j, type DeepPartial as k, type IsolationActionEffect as l, MATERIAL_SIDES as m, type ObjectActionEvent as n, type ObjectBinding as o, type ObjectBindingAction as p, type ObjectBindingCameraState as q, type ObjectBindingDecal as r, type ObjectBindingMaterial as s, type ObjectBindingMaterialBlendingMode as t, type ObjectBindingMaterialSide as u, type ObjectBindingPatch as v, type ObjectBindingSelector as w, type ObjectBindingStatus as x, type ObjectBindingStyle as y, type ObjectBindingTarget as z };