@liveroom-tech/react-immersive 4.3.0 → 5.0.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 (46) hide show
  1. package/README.md +697 -83
  2. package/dist/ModelViewer-CbbJT85n.d.mts +448 -0
  3. package/dist/ModelViewer-DOexHkJC.d.ts +448 -0
  4. package/dist/binding-builder.css +1 -0
  5. package/dist/binding-builder.d.mts +6 -0
  6. package/dist/binding-builder.d.ts +6 -0
  7. package/dist/binding-builder.js +3694 -0
  8. package/dist/binding-builder.mjs +1 -0
  9. package/dist/chunk-7EW6JZ46.mjs +27 -0
  10. package/dist/chunk-BGYK4Y2Y.mjs +1 -0
  11. package/dist/chunk-MMO7KCYU.mjs +3 -0
  12. package/dist/chunk-NVY7N7CU.mjs +3 -0
  13. package/dist/chunk-SEESCGUS.mjs +1 -0
  14. package/dist/chunk-WFEYRUZC.mjs +1 -0
  15. package/dist/chunk-XTLSAYAQ.mjs +1 -0
  16. package/dist/hosted.css +1 -1
  17. package/dist/hosted.d.mts +33 -13
  18. package/dist/hosted.d.ts +33 -13
  19. package/dist/hosted.js +11 -8
  20. package/dist/hosted.mjs +1 -1
  21. package/dist/index.css +1 -1
  22. package/dist/index.d.mts +107 -83
  23. package/dist/index.d.ts +107 -83
  24. package/dist/index.js +11 -8
  25. package/dist/index.mjs +1 -1
  26. package/dist/modelInfo-CEmmvVCH.d.mts +17 -0
  27. package/dist/modelInfo-CEmmvVCH.d.ts +17 -0
  28. package/dist/{objectBinding-CBRYMYk6.d.ts → objectCatalog-5W8n5xNQ.d.mts} +55 -3
  29. package/dist/{objectBinding-CBRYMYk6.d.mts → objectCatalog-5W8n5xNQ.d.ts} +55 -3
  30. package/dist/publicProps-tJuWZgT3.d.mts +12 -0
  31. package/dist/publicProps-tJuWZgT3.d.ts +12 -0
  32. package/dist/simple-model-viewer.css +1 -0
  33. package/dist/simple-model-viewer.d.mts +38 -0
  34. package/dist/simple-model-viewer.d.ts +38 -0
  35. package/dist/simple-model-viewer.js +3666 -0
  36. package/dist/simple-model-viewer.mjs +1 -0
  37. package/dist/utils.d.mts +49 -3
  38. package/dist/utils.d.ts +49 -3
  39. package/dist/utils.js +1 -1
  40. package/dist/utils.mjs +1 -1
  41. package/package.json +28 -18
  42. package/dist/chunk-7X37KAPE.mjs +0 -1
  43. package/dist/chunk-GYB4BOVW.mjs +0 -26
  44. package/dist/chunk-K7DMBJBJ.mjs +0 -1
  45. package/dist/publicProps-BST1E8an.d.mts +0 -349
  46. package/dist/publicProps-Bv3_PCP0.d.ts +0 -349
@@ -0,0 +1,448 @@
1
+ import { ReactNode } from 'react';
2
+ import { g as ObjectBinding, a1 as ViewerCameraState, y as SceneAnnotationMarker, f as ObjectActionEvent, a2 as ViewerObjectInfo, w as ObjectPointerEvent, a0 as ViewerCameraConfig, J as SceneConfig } from './objectCatalog-5W8n5xNQ.js';
3
+ import { M as ModelFormat, a as ViewerModelInfo } from './modelInfo-CEmmvVCH.js';
4
+ import { CameraControls } from '@react-three/drei';
5
+ import { Object3D } from 'three';
6
+
7
+ type CameraLimits = {
8
+ /** Closest the camera can get to its target, in scene units. Default 0. */
9
+ minDistance?: number;
10
+ /** Farthest the camera can get from its target, in scene units. Default Infinity. */
11
+ maxDistance?: number;
12
+ /**
13
+ * Lowest vertical angle, in degrees: 0 looks straight down from above, 90 is
14
+ * level with the target, 180 looks straight up from below. Default 0.
15
+ */
16
+ minPolarAngle?: number;
17
+ /** Highest vertical angle, in degrees (see minPolarAngle). Default 180. */
18
+ maxPolarAngle?: number;
19
+ /**
20
+ * Leftmost horizontal angle, in degrees around the vertical axis: 0 views
21
+ * the target from the front (+Z), 90 from its right (+X), -90 from its
22
+ * left. Default -Infinity (no limit).
23
+ */
24
+ minAzimuthAngle?: number;
25
+ /** Rightmost horizontal angle, in degrees (see minAzimuthAngle). Default Infinity. */
26
+ maxAzimuthAngle?: number;
27
+ /** An axis-aligned world-space box the camera's target can pan within. */
28
+ panBoundary?: [min: [number, number, number], max: [number, number, number]];
29
+ /** Keeps the camera itself, not just its target, inside panBoundary. Default false. */
30
+ boundaryEnclosesCamera?: boolean;
31
+ /** How strongly panning slows near panBoundary, 0–1. Default 0. */
32
+ boundaryFriction?: number;
33
+ };
34
+
35
+ type MouseControllerPosition = 'bottom-left' | 'bottom-right' | 'top-left' | 'top-right' | 'center' | 'center-bottom' | 'center-top';
36
+
37
+ type PerformanceProfile = "auto" | "high" | "low";
38
+
39
+ type XRScaleMode = "normalized" | "real-world";
40
+
41
+ /** A starting set of ModelViewer props for a common kind of page. */
42
+ type ModelViewerPreset = "minimal" | "showcase" | "configurator" | "inspector";
43
+ type ModelViewerUiOptions = {
44
+ /** The left panel for the selected object. Default `true`. */
45
+ objectPanel?: boolean;
46
+ /** The right panel listing the model's objects. Default `true`. */
47
+ sceneObjects?: boolean;
48
+ /** The download button; a string also sets the file name. Default `true`. */
49
+ download?: boolean | string;
50
+ /** The reset-view button. Default `true`. */
51
+ reset?: boolean;
52
+ /** The loading overlay and load-error message. Default `true`. */
53
+ loadingOverlay?: boolean;
54
+ /** The axis gizmo in the top-right corner. Default `false`. */
55
+ viewGizmo?: boolean;
56
+ /** The on-screen movement pad; an object also places it. Default `false`. */
57
+ mouseController?: boolean | {
58
+ position?: MouseControllerPosition;
59
+ opacity?: number;
60
+ };
61
+ /** Previous/Stop/Next controls for annotation tours. Default `true`. */
62
+ annotationNavigation?: boolean;
63
+ /** Show an annotation's details when its marker is hovered. Default `false`. */
64
+ annotationOnHover?: boolean;
65
+ /** Highlight objects under the pointer. Default `true`. */
66
+ highlightOnHover?: boolean;
67
+ };
68
+ /**
69
+ * Takes over parts of texture positioning (`texturePositioning`). Fields left
70
+ * out keep the viewer's own behavior, which reads and writes the binding.
71
+ */
72
+ type TexturePositioningControls = {
73
+ /** Shown in the Offset fields instead of the binding's offset. */
74
+ offset?: [number, number];
75
+ /** Shown in the Rotation field instead of the binding's, in degrees (0–360). */
76
+ rotationDegrees?: number;
77
+ /** Replaces the viewer's write when an Offset field changes. */
78
+ onOffsetChange?: (objectId: string, axisIndex: 0 | 1, value: number) => void;
79
+ /** Replaces the viewer's write when the Rotation field changes. */
80
+ onRotationChange?: (objectId: string, degrees: number) => void;
81
+ /** Whether to show "Done positioning" rather than the hint. */
82
+ isPositioning?: boolean;
83
+ /** Called after "Done positioning" ends Move/Zoom mode. */
84
+ onEndPositioning?: () => void;
85
+ };
86
+ type ModelViewerToolsOptions = {
87
+ /** Distance and dimension tools; an object also sets the unit. Default `false`. */
88
+ measure?: boolean | {
89
+ unit?: string;
90
+ };
91
+ /** The UV checker toggle. Default `false`. */
92
+ uvChecker?: boolean;
93
+ /** The exploded-view slider. Default `false`. */
94
+ explode?: boolean;
95
+ /** Texture offset, rotation and Move/Zoom for textured objects. Default `false`. */
96
+ texturePositioning?: boolean | TexturePositioningControls;
97
+ };
98
+ type ModelViewerControlsOptions = {
99
+ /** Orbit, pan and zoom with the pointer. Default `true`. */
100
+ enabled?: boolean;
101
+ /** Move the camera with the keyboard while the canvas has focus. Default `false`. */
102
+ keyboard?: boolean;
103
+ /** Allow zooming. Default `true`. */
104
+ zoom?: boolean;
105
+ /** Zoom to an object when it's selected. Default `true`. */
106
+ zoomOnSelect?: boolean;
107
+ /** Turn the model slowly; a number sets the speed (1 is normal). Default `false`. */
108
+ autoRotate?: boolean | number;
109
+ /** Re-frame the model when the viewer is resized. Default `true`. */
110
+ refitOnResize?: boolean;
111
+ /** Distance, angle and pan limits for the camera. */
112
+ limits?: CameraLimits;
113
+ /** Movement pad speed. Default `0.08`. */
114
+ moveSensitivity?: number;
115
+ /** Movement pad zoom speed. Default `1`. */
116
+ zoomSensitivity?: number;
117
+ };
118
+ type ModelViewerPerfOptions = {
119
+ /** `"demand"` draws only when something changes. Default `"demand"`. */
120
+ renderMode?: "always" | "demand";
121
+ /** Highest device pixel ratio to render at. Default `2`. */
122
+ maxDpr?: number;
123
+ /** `"low"` trades quality for speed on weak devices. Default `"auto"`. */
124
+ profile?: PerformanceProfile;
125
+ /** Needed for Download PNG and captureImage; costs GPU time. Default `false`. */
126
+ preserveDrawingBuffer?: boolean;
127
+ };
128
+ type ModelViewerTilesOptions = {
129
+ /** A 3D Tiles `tileset.json` to stream instead of loading `modelUrl` whole. */
130
+ url?: string | null;
131
+ /** Screen-space error target; lower is sharper. Default `8`. */
132
+ errorTarget?: number;
133
+ /** Most parsed tiles kept in memory. Default `800`. */
134
+ cacheSize?: number;
135
+ };
136
+ type ModelViewerXrOptions = {
137
+ /** "View in your space" (AR) and "Enter VR". Default `false`. */
138
+ enabled?: boolean;
139
+ /** A USDZ file for iOS AR Quick Look. */
140
+ usdzUrl?: string;
141
+ /** How the model is sized in AR. Default `"normalized"`. */
142
+ scaleMode?: XRScaleMode;
143
+ /** The page the desktop QR code opens on a phone. Default: the current page. */
144
+ mobileHandoffUrl?: string;
145
+ };
146
+ type ModelViewerDecoderOptions = {
147
+ /** Directory of the DRACO decoder files, or `false`. */
148
+ draco?: string | false;
149
+ /** Directory of the Basis/KTX2 transcoder files, or `false`. */
150
+ ktx2?: string | false;
151
+ /** Enable the bundled Meshopt decoder. Default `true`. */
152
+ meshopt?: boolean;
153
+ };
154
+ type GroupedModelViewerProps = {
155
+ /**
156
+ * A starting set of props for a common kind of page. Anything else you pass
157
+ * overrides it.
158
+ */
159
+ preset?: ModelViewerPreset;
160
+ ui?: ModelViewerUiOptions;
161
+ tools?: ModelViewerToolsOptions;
162
+ controls?: ModelViewerControlsOptions;
163
+ perf?: ModelViewerPerfOptions;
164
+ tiles?: ModelViewerTilesOptions;
165
+ xr?: ModelViewerXrOptions;
166
+ decoders?: ModelViewerDecoderOptions;
167
+ };
168
+ /** What each preset sets. Props that aren't listed keep their defaults. */
169
+ declare const MODEL_VIEWER_PRESETS: Readonly<Record<ModelViewerPreset, Readonly<Partial<ModelViewerProps>>>>;
170
+
171
+ type CameraControllerType = "orbit" | "pointerLock";
172
+
173
+ type CinematicWaypoint = {
174
+ position: [number, number, number];
175
+ target: [number, number, number];
176
+ /**
177
+ * Orbit angles in radians, as BindingBuilder captures them: position and
178
+ * target alone can't represent the rotation straight above or below the
179
+ * target. Leave them out when writing waypoints by hand.
180
+ */
181
+ azimuthAngle?: number;
182
+ polarAngle?: number;
183
+ segmentDuration?: number;
184
+ };
185
+ type CinematicConfig = {
186
+ waypoints?: CinematicWaypoint[];
187
+ duration?: number;
188
+ loop?: boolean;
189
+ autoPlay?: boolean;
190
+ };
191
+
192
+ type CaptureImageOptions = {
193
+ width?: number;
194
+ height?: number;
195
+ transparent?: boolean;
196
+ };
197
+
198
+ type ViewerCameraPreset = {
199
+ position: [number, number, number];
200
+ target: [number, number, number];
201
+ fov?: number | null;
202
+ zoom?: number;
203
+ azimuthAngle?: number;
204
+ polarAngle?: number;
205
+ };
206
+ type UseViewerCameraOptions = {
207
+ /** Camera position applied once when each model becomes ready. */
208
+ initialPosition?: [number, number, number];
209
+ /** Orbit target applied once when each model becomes ready. */
210
+ initialTarget?: [number, number, number];
211
+ /** Whether the initial position/target should animate. Defaults to false. */
212
+ initialTransition?: boolean;
213
+ /** Named views that can be opened with goToPreset. */
214
+ presets?: Record<string, ViewerCameraPreset>;
215
+ };
216
+ type HomeCameraState = {
217
+ position: [number, number, number];
218
+ target: [number, number, number];
219
+ };
220
+ type ViewerReadyState = {
221
+ objectBindings: Record<string, ObjectBinding>;
222
+ homeCameraState: HomeCameraState | null;
223
+ captureImage: (options?: CaptureImageOptions) => Promise<string>;
224
+ invalidate: () => void;
225
+ /**
226
+ * The live three.js scene, camera-controls instance, and model nodes, for
227
+ * integrations the rest of the API doesn't cover. Their shapes are those
228
+ * libraries' own and can change with them.
229
+ */
230
+ raw: {
231
+ controls: CameraControls;
232
+ scene: Object3D | null;
233
+ /** Model nodes by binding key and node name. */
234
+ nodes: Record<string, Object3D>;
235
+ };
236
+ };
237
+ type ViewerCameraProps = {
238
+ cameraState: ViewerCameraState | null;
239
+ cameraPresets: Record<string, ViewerCameraPreset>;
240
+ resetView: () => Promise<boolean>;
241
+ focusObject: (objectId: string) => Promise<boolean>;
242
+ fitScene: () => Promise<boolean>;
243
+ setCameraTarget: (target: [number, number, number], enableTransition?: boolean) => Promise<boolean>;
244
+ setCameraState: (state: ViewerCameraState, enableTransition?: boolean) => Promise<boolean>;
245
+ lookAt: (position: [number, number, number], target: [number, number, number], enableTransition?: boolean) => Promise<boolean>;
246
+ /**
247
+ * Orbits the camera around its target to the given angles, in degrees.
248
+ * Azimuth is the horizontal angle (0 is the front, +Z; 90 the right, +X);
249
+ * polar is the vertical angle (0 straight down, 90 level, 180 straight up).
250
+ */
251
+ orbitTo: (azimuthDegrees: number, polarDegrees: number, enableTransition?: boolean) => Promise<boolean>;
252
+ dollyTo: (distance: number, enableTransition?: boolean) => Promise<boolean>;
253
+ savePreset: (name: string) => ViewerCameraState | null;
254
+ goToPreset: (name: string, enableTransition?: boolean) => Promise<boolean>;
255
+ handleCameraChange: (state: ViewerCameraState) => void;
256
+ handleViewerReady: (viewer: ViewerReadyState) => void;
257
+ };
258
+ declare function useViewerCamera(options?: UseViewerCameraOptions): ViewerCameraProps;
259
+
260
+ type AnimationClipInfo = {
261
+ sourceName: string;
262
+ duration: number;
263
+ };
264
+ type AnimationPlaybackState = {
265
+ currentClip: string | null;
266
+ isPlaying: boolean;
267
+ speed: number;
268
+ time: number;
269
+ duration: number;
270
+ };
271
+ type AnimationControls = {
272
+ clips: string[];
273
+ clipDetails?: AnimationClipInfo[];
274
+ play: (clipName: string) => void;
275
+ pause: () => void;
276
+ stop: () => void;
277
+ setSpeed: (speed: number) => void;
278
+ seek?: (time: number) => void;
279
+ getState?: () => AnimationPlaybackState;
280
+ subscribe?: (listener: (state: AnimationPlaybackState) => void) => () => void;
281
+ };
282
+ type ViewerAnimationsProps = {
283
+ clips: string[];
284
+ clipDetails: AnimationClipInfo[];
285
+ currentClip: string | null;
286
+ isPlaying: boolean;
287
+ speed: number;
288
+ time: number;
289
+ duration: number;
290
+ play: (clipName: string) => void;
291
+ pause: () => void;
292
+ stop: () => void;
293
+ setSpeed: (speed: number) => void;
294
+ seek: (time: number) => void;
295
+ handleAnimationsReady: (controls: AnimationControls) => void;
296
+ };
297
+ declare function useViewerAnimations(): ViewerAnimationsProps;
298
+
299
+ type ObjectTransformSpace = "local" | "world";
300
+
301
+ type AnnotationMarker = SceneAnnotationMarker & {
302
+ markerId?: string;
303
+ };
304
+ type CustomObjectBindingDataPanelProps = {
305
+ isOpen: boolean;
306
+ selectedObject: ObjectBinding | null;
307
+ currentAction: ObjectActionEvent | null;
308
+ onClose: () => void;
309
+ onAction: (event: ObjectActionEvent) => void;
310
+ };
311
+ type CustomSceneObjectsPanelProps = {
312
+ objectBindings: Record<string, ObjectBinding>;
313
+ onAction?: (event: ObjectActionEvent) => void;
314
+ onFocus?: (binding: ObjectBinding) => void;
315
+ onHover?: (binding: ObjectBinding | null) => void;
316
+ };
317
+ type ModelViewerProps = GroupedModelViewerProps & {
318
+ modelUrl: string;
319
+ /** Optional 3D Tiles manifest used instead of loading `modelUrl` monolithically. */
320
+ tilesetUrl?: string | null;
321
+ /** Screen-space error target for streamed 3D Tiles. Lower is sharper. */
322
+ tilesErrorTarget?: number;
323
+ /** Maximum number of parsed tiles retained by the client cache. */
324
+ tilesCacheSize?: number;
325
+ /**
326
+ * Every bindable object in the model: each named mesh, under the identifier
327
+ * bindings are keyed by. Reported each time a model loads; for a streamed
328
+ * model it comes from the catalog beside `tileset.json`, before the tiles
329
+ * that contain those objects have necessarily loaded.
330
+ */
331
+ onObjectCatalog?: (objects: ViewerObjectInfo[]) => void;
332
+ /** Explicit format for extensionless or signed model URLs. */
333
+ modelFormat?: ModelFormat;
334
+ licenseKey: string;
335
+ /**
336
+ * The model's interactive objects, keyed by node name. Defaults to `"auto"`:
337
+ * a default binding for every mesh, generated when the model loads and
338
+ * reported through `onObjectBindingsChange`.
339
+ */
340
+ objectBindings?: Record<string, ObjectBinding> | "auto";
341
+ selectedObject?: ObjectBinding | null;
342
+ panelHoveredObject?: ObjectBinding | null;
343
+ onObjectBindingsChange?: (next: Record<string, ObjectBinding>) => void;
344
+ onObjectSelect?: (binding: ObjectBinding | null) => void;
345
+ onObjectHover?: (binding: ObjectBinding | null) => void;
346
+ /**
347
+ * An object was double-clicked. Return `true` to skip the viewer's own
348
+ * double-click behavior: moving the orbit point to that spot, or starting
349
+ * texture positioning when that's enabled.
350
+ */
351
+ onObjectDoubleClick?: (event: ObjectPointerEvent) => boolean | void;
352
+ /**
353
+ * An object was right-clicked or, on touch screens, long-pressed. Use it to
354
+ * open your own menu at `clientX`/`clientY`. A right-drag still pans.
355
+ */
356
+ onObjectContextMenu?: (event: ObjectPointerEvent) => void;
357
+ /** The model finished loading: its bounds and mesh count. */
358
+ onModelLoaded?: (model: ViewerModelInfo) => void;
359
+ onLoadError?: (error: unknown) => void;
360
+ onProgress?: (event: ProgressEvent) => void;
361
+ onCameraControllerChange?: (controller: CameraControllerType) => void;
362
+ cameraControllerType?: CameraControllerType;
363
+ onAction?: (event: ObjectActionEvent) => void;
364
+ onHiddenObjectsChange?: (next: Record<string, boolean>) => void;
365
+ /** The camera moved. Fires often while the user orbits, pans or zooms. */
366
+ onCameraChange?: (state: ViewerCameraState) => void;
367
+ onViewerReady?: (viewer: ViewerReadyState) => void;
368
+ onTextureUpload?: (file: File, objectId: string) => Promise<string>;
369
+ onAnimationsReady?: (controls: AnimationControls) => void;
370
+ onAnnotationsChange?: (annotations: AnnotationMarker[]) => void;
371
+ activeAnnotation?: AnnotationMarker | null;
372
+ onActiveAnnotationChange?: (annotation: AnnotationMarker | null) => void;
373
+ camera?: ViewerCameraConfig;
374
+ cameraLimits?: CameraLimits;
375
+ backgroundColor?: string;
376
+ shadows?: boolean;
377
+ showObjectBindingDataPanel?: boolean;
378
+ customObjectBindingDataPanel?: (props: CustomObjectBindingDataPanelProps) => ReactNode;
379
+ customSceneObjectsPanel?: (props: CustomSceneObjectsPanelProps) => ReactNode;
380
+ showSceneObjectsPanel?: boolean;
381
+ showDownloadButton?: boolean;
382
+ downloadFilename?: string;
383
+ showResetButton?: boolean;
384
+ showLoadingOverlay?: boolean;
385
+ showMouseController?: boolean;
386
+ mouseControllerPosition?: MouseControllerPosition;
387
+ mouseControllerOpacity?: number;
388
+ moveSensitivity?: number;
389
+ zoomSensitivity?: number;
390
+ sceneConfig?: SceneConfig;
391
+ disableZoom?: boolean;
392
+ zoomOnSelected?: boolean;
393
+ highlightOnHover?: boolean;
394
+ onAutoFit?: () => Promise<boolean>;
395
+ enableCameraControls?: boolean;
396
+ moveModeEnabled?: boolean;
397
+ /** Aligns PivotControls to the scene or to the selected object. */
398
+ objectTransformSpace?: ObjectTransformSpace;
399
+ /** Enables canvas-focused camera shortcuts. Disabled by default. */
400
+ enableKeyboardNavigation?: boolean;
401
+ refitOnResize?: boolean;
402
+ renderMode?: "always" | "demand";
403
+ maxDpr?: number;
404
+ preserveDrawingBuffer?: boolean;
405
+ performanceProfile?: PerformanceProfile;
406
+ dracoDecoderPath?: string | false;
407
+ ktx2TranscoderPath?: string | false;
408
+ meshopt?: boolean;
409
+ showMeasureTools?: boolean;
410
+ showUvCheckerButton?: boolean;
411
+ showExplodeControls?: boolean;
412
+ cinematic?: boolean | CinematicConfig;
413
+ measurementUnit?: string;
414
+ enableXR?: boolean;
415
+ usdzUrl?: string;
416
+ arScaleMode?: XRScaleMode;
417
+ mobileHandoffUrl?: string;
418
+ showAnnotationNavigation?: boolean;
419
+ showAnnotationOnHover?: boolean;
420
+ onSceneConfigChange?: (config: SceneConfig) => void;
421
+ showViewGizmo?: boolean;
422
+ /**
423
+ * Your own UI over the 3D view: badges, HUDs, custom panels. It sits above
424
+ * the model and below the viewer's toolbars. The layer lets pointer events
425
+ * through to the model; its direct children receive them, so position them
426
+ * yourself (for example `position: "absolute"`).
427
+ */
428
+ overlay?: ReactNode;
429
+ /**
430
+ * react-three-fiber elements rendered inside the scene, for anything the
431
+ * viewer can't do itself. They work with three.js directly, so they're
432
+ * outside the viewer's own API and can break when three.js or
433
+ * react-three-fiber change.
434
+ */
435
+ unsafe_sceneChildren?: ReactNode;
436
+ autoRotate?: boolean;
437
+ autoRotateSpeed?: number;
438
+ /**
439
+ * Texture positioning for objects with an uploaded texture: Offset and
440
+ * Rotation fields in the Change Material panel, and Move/Zoom mode on
441
+ * double-click (drag to move, scroll to scale). Off by default. Pass `true`,
442
+ * or an object to take over parts of it; changes are written to the
443
+ * binding's `style.material.texture`.
444
+ */
445
+ texturePositioning?: boolean | TexturePositioningControls;
446
+ };
447
+
448
+ export { type AnimationClipInfo as A, type CameraControllerType as C, 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 ViewerAnimationsProps as V, type XRScaleMode as X, type AnimationControls as a, type AnimationPlaybackState as b, type AnnotationMarker as c, type CameraLimits as d, type CaptureImageOptions as e, type CinematicConfig as f, type CinematicWaypoint as g, type CustomObjectBindingDataPanelProps as h, type CustomSceneObjectsPanelProps as i, type ModelViewerControlsOptions as j, type ModelViewerDecoderOptions 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 ViewerCameraPreset as t, type ViewerCameraProps as u, type ViewerReadyState as v, useViewerAnimations as w, useViewerCamera as x };