@liveroom-tech/react-immersive 5.1.0 → 5.2.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.
- package/README.md +486 -57
- package/dist/binding-builder.css +1 -1
- package/dist/binding-builder.js +17 -13
- package/dist/binding-builder.mjs +1 -1
- package/dist/chunk-4NLJSD3S.mjs +1 -0
- package/dist/chunk-B7REIGDG.mjs +1 -0
- package/dist/{chunk-WN6GMMHF.mjs → chunk-HYFJ5DYJ.mjs} +1 -1
- package/dist/chunk-QC3NT76G.mjs +3 -0
- package/dist/chunk-T3M3BQ7H.mjs +32 -0
- package/dist/chunk-ZPK67UG7.mjs +1 -0
- package/dist/hosted.css +1 -1
- package/dist/hosted.d.mts +4 -3
- package/dist/hosted.d.ts +4 -3
- package/dist/hosted.js +16 -12
- package/dist/hosted.mjs +1 -1
- package/dist/index.css +1 -1
- package/dist/index.d.mts +39 -8
- package/dist/index.d.ts +39 -8
- package/dist/index.js +14 -10
- package/dist/index.mjs +1 -1
- package/dist/materialVariants-DnZe9eMC.d.mts +309 -0
- package/dist/materialVariants-DnZe9eMC.d.ts +309 -0
- package/dist/modelInfo-BYebMPdZ.d.mts +43 -0
- package/dist/modelInfo-XfUQO7C_.d.ts +43 -0
- package/dist/{ModelViewer-Bj-KjiDL.d.mts → modelViewerProps-CIZ2R_Fv.d.ts} +82 -10
- package/dist/{ModelViewer-BkQ73y6N.d.ts → modelViewerProps-DoRiTZMn.d.mts} +82 -10
- package/dist/{objectCatalog-BIeXURoq.d.ts → rendererBackend-QwMzISTn.d.mts} +32 -4
- package/dist/{objectCatalog-BIeXURoq.d.mts → rendererBackend-QwMzISTn.d.ts} +32 -4
- package/dist/simple-model-viewer.css +1 -1
- package/dist/simple-model-viewer.d.mts +32 -4
- package/dist/simple-model-viewer.d.ts +32 -4
- package/dist/simple-model-viewer.js +3 -3
- package/dist/simple-model-viewer.mjs +1 -1
- package/dist/utils.d.mts +5 -4
- package/dist/utils.d.ts +5 -4
- package/dist/utils.js +1 -1
- package/dist/utils.mjs +1 -1
- package/package.json +2 -1
- package/dist/chunk-32WCLPTZ.mjs +0 -1
- package/dist/chunk-CSGNL4XU.mjs +0 -3
- package/dist/chunk-F2ILTIPG.mjs +0 -28
- package/dist/chunk-V6GALFL5.mjs +0 -1
- package/dist/modelInfo-DnkmTGMd.d.mts +0 -23
- package/dist/modelInfo-DnkmTGMd.d.ts +0 -23
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { ReactNode } from 'react';
|
|
2
|
-
import {
|
|
3
|
-
import { M as ModelFormat,
|
|
2
|
+
import { R as ReducedMotionSetting, c as ModelViewerLabels } from './materialVariants-DnZe9eMC.mjs';
|
|
3
|
+
import { V as ViewerLoading, c as ViewerReveal, M as ModelFormat, b as ViewerModelInfo } from './modelInfo-BYebMPdZ.mjs';
|
|
4
|
+
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-QwMzISTn.mjs';
|
|
4
5
|
import { CameraControls } from '@react-three/drei';
|
|
5
6
|
import { Object3D } from 'three';
|
|
6
7
|
|
|
@@ -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
|
-
/**
|
|
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
|
-
/**
|
|
260
|
-
|
|
261
|
-
|
|
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
|
|
@@ -351,7 +391,27 @@ type CustomSceneObjectsPanelProps = {
|
|
|
351
391
|
onHover?: (binding: ObjectBinding | null) => void;
|
|
352
392
|
};
|
|
353
393
|
type ModelViewerProps = GroupedModelViewerProps & {
|
|
394
|
+
/** Plain-text overrides for built-in UI labels. Missing keys use English. */
|
|
395
|
+
labels?: ModelViewerLabels;
|
|
354
396
|
modelUrl: string;
|
|
397
|
+
/**
|
|
398
|
+
* An image shown in the viewer's place until its 3D view is drawn: a render
|
|
399
|
+
* or photo of the model, best framed as the viewer frames it. Fitted inside
|
|
400
|
+
* the viewer; set the CSS variable `--ri-poster-fit: cover` to fill it.
|
|
401
|
+
*/
|
|
402
|
+
poster?: string;
|
|
403
|
+
/**
|
|
404
|
+
* `"lazy"` (default) starts the 3D view when the viewer is on or near the
|
|
405
|
+
* screen. When the page needs room for viewers in view, one scrolled away
|
|
406
|
+
* from goes back to a picture of itself, and comes back as it was. `"eager"`
|
|
407
|
+
* starts at once and keeps its view.
|
|
408
|
+
*/
|
|
409
|
+
loading?: ViewerLoading;
|
|
410
|
+
/**
|
|
411
|
+
* `"interaction"` keeps the poster, with a "View in 3D" button, until the
|
|
412
|
+
* visitor asks for the 3D view. Default `"auto"`.
|
|
413
|
+
*/
|
|
414
|
+
reveal?: ViewerReveal;
|
|
355
415
|
/** Optional 3D Tiles manifest used instead of loading `modelUrl` monolithically. */
|
|
356
416
|
tilesetUrl?: string | null;
|
|
357
417
|
/** Screen-space error target for streamed 3D Tiles. Lower is sharper. */
|
|
@@ -442,10 +502,18 @@ type ModelViewerProps = GroupedModelViewerProps & {
|
|
|
442
502
|
objectTransformSpace?: ObjectTransformSpace;
|
|
443
503
|
/** Enables canvas-focused camera shortcuts. Disabled by default. */
|
|
444
504
|
enableKeyboardNavigation?: boolean;
|
|
505
|
+
/**
|
|
506
|
+
* Cuts motion the viewer starts on its own: auto-rotate and cinematic
|
|
507
|
+
* autoplay don't start, and camera moves jump instead of gliding. `"user"`
|
|
508
|
+
* (default) follows the visitor's `prefers-reduced-motion` setting;
|
|
509
|
+
* `"always"` and `"never"` override it.
|
|
510
|
+
*/
|
|
511
|
+
reducedMotion?: ReducedMotionSetting;
|
|
445
512
|
refitOnResize?: boolean;
|
|
446
513
|
renderMode?: "always" | "demand";
|
|
447
514
|
maxDpr?: number;
|
|
448
515
|
preserveDrawingBuffer?: boolean;
|
|
516
|
+
webgpu?: boolean;
|
|
449
517
|
performanceProfile?: PerformanceProfile;
|
|
450
518
|
dracoDecoderPath?: string | false;
|
|
451
519
|
ktx2TranscoderPath?: string | false;
|
|
@@ -458,6 +526,7 @@ type ModelViewerProps = GroupedModelViewerProps & {
|
|
|
458
526
|
showIsolateControls?: boolean;
|
|
459
527
|
showSectionTools?: boolean;
|
|
460
528
|
showMaterialVariants?: boolean;
|
|
529
|
+
showObjectNavigator?: boolean;
|
|
461
530
|
cinematic?: boolean | CinematicConfig;
|
|
462
531
|
measurementUnit?: string;
|
|
463
532
|
enableXR?: boolean;
|
|
@@ -466,6 +535,9 @@ type ModelViewerProps = GroupedModelViewerProps & {
|
|
|
466
535
|
mobileHandoffUrl?: string;
|
|
467
536
|
showAnnotationNavigation?: boolean;
|
|
468
537
|
showAnnotationOnHover?: boolean;
|
|
538
|
+
showAnnotationFilters?: boolean;
|
|
539
|
+
annotationCategories?: string[] | null;
|
|
540
|
+
onAnnotationCategoriesChange?: (categories: string[] | null) => void;
|
|
469
541
|
onSceneConfigChange?: (config: SceneConfig) => void;
|
|
470
542
|
showViewGizmo?: boolean;
|
|
471
543
|
/**
|
|
@@ -105,10 +105,11 @@ type SceneModelConfig = {
|
|
|
105
105
|
autoRotate?: boolean;
|
|
106
106
|
autoRotateSpeed?: number;
|
|
107
107
|
/**
|
|
108
|
-
* The glTF material
|
|
109
|
-
*
|
|
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
|
-
|
|
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];
|
|
@@ -872,4 +897,7 @@ type ViewerObjectInfo = {
|
|
|
872
897
|
maximum: [number, number, number];
|
|
873
898
|
};
|
|
874
899
|
|
|
875
|
-
|
|
900
|
+
/** Which three.js renderer draws a viewer. */
|
|
901
|
+
type RendererBackend = "webgl" | "webgpu";
|
|
902
|
+
|
|
903
|
+
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 };
|
|
@@ -105,10 +105,11 @@ type SceneModelConfig = {
|
|
|
105
105
|
autoRotate?: boolean;
|
|
106
106
|
autoRotateSpeed?: number;
|
|
107
107
|
/**
|
|
108
|
-
* The glTF material
|
|
109
|
-
*
|
|
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
|
-
|
|
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];
|
|
@@ -872,4 +897,7 @@ type ViewerObjectInfo = {
|
|
|
872
897
|
maximum: [number, number, number];
|
|
873
898
|
};
|
|
874
899
|
|
|
875
|
-
|
|
900
|
+
/** Which three.js renderer draws a viewer. */
|
|
901
|
+
type RendererBackend = "webgl" | "webgpu";
|
|
902
|
+
|
|
903
|
+
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 };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.bb-loadingOverlay{position:absolute;inset:0;z-index:5;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;padding:24px;text-align:center;border-radius:14px;background:#f8fafcd1;backdrop-filter:blur(2px)}.bb-loadingSpinner{width:40px;height:40px;border-radius:999px;border:3px solid rgba(148,163,184,.3);border-top-color:#2563eb;animation:bb-spin .8s linear infinite}.bb-loadingProgressRow{display:flex;align-items:center;gap:8px;width:100%;max-width:240px}.bb-loadingProgress{flex:1;height:6px;border-radius:999px;background:#94a3b84d;overflow:hidden}.bb-loadingProgress__bar{height:100%;border-radius:inherit;background:#2563eb;transition:width .15s ease-out}.bb-loadingProgress__label{flex-shrink:0;min-width:34px;text-align:right;color:#475569;font-size:12px;font-weight:600;font-variant-numeric:tabular-nums}.bb-loadingMessage{max-width:320px;color:#475569;font-size:13px;font-weight:600;line-height:1.5}:root{--ri-styles-simple-model-viewer: 1}.smv-root{--smv-panel-font-family: Inter, "Segoe UI", Helvetica, Arial, sans-serif;--smv-panel-bg: #141824;--smv-panel-bg-strong: #1a1f2e;--smv-panel-bg-strong-hover: #252b3b;--smv-panel-border: rgba(255, 255, 255, .06);--smv-panel-border-strong: rgba(255, 255, 255, .08);--smv-panel-border-active: rgba(255, 255, 255, .18);--smv-panel-shadow-left: 4px 0 24px rgba(0, 0, 0, .35);--smv-panel-shadow-right: -4px 0 24px rgba(0, 0, 0, .35);--smv-panel-text: #f1f5f9;--smv-panel-text-emphasis: #ffffff;--smv-panel-text-muted: #94a3b8;--smv-panel-text-subtle: #64748b;--smv-panel-surface: rgba(255, 255, 255, .05);--smv-panel-surface-hover: rgba(255, 255, 255, .1);--smv-panel-surface-soft: rgba(255, 255, 255, .04);--smv-panel-accent: #3b82f6;--smv-panel-accent-contrast: #ffffff;position:relative;width:100%;height:100%;min-height:0;overflow:hidden;display:flex;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility;font-synthesis:none}.smv-canvasArea{flex:1;position:relative;min-width:0}.smv-upload-input{display:none}.smv-upload-toolbar{position:absolute;top:12px;left:50%;z-index:120;display:flex;align-items:center;gap:10px;max-width:calc(100% - 32px);padding:5px 6px;border:1px solid var(--smv-panel-border-strong);border-radius:10px;background:#141824e0;color:var(--smv-panel-text);box-shadow:0 16px 30px #00000047;backdrop-filter:blur(14px);transform:translate(-50%)}.smv-upload-toolbar__name{max-width:260px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--smv-panel-text-muted);font-size:12px;font-weight:500}.smv-upload-toolbar__button{display:inline-flex;align-items:center;gap:7px;min-height:34px;padding:0 14px;border:1px solid rgba(255,255,255,.08);border-radius:10px;background:#3b82f62e;color:var(--smv-panel-text-emphasis);font-size:12px;font-weight:600;cursor:pointer}.smv-upload-toolbar__button--ghost{background:var(--smv-panel-surface);color:var(--smv-panel-text-muted)}.smv-upload-empty-state{display:flex;align-items:center;justify-content:center;width:100%;height:100%;padding:24px}.smv-upload-empty-state__card{width:min(440px,100%);padding:28px;border:1px dashed rgba(255,255,255,.2);border-radius:8px;color:var(--smv-panel-text);text-align:center;box-shadow:0 24px 40px #00000047;backdrop-filter:blur(14px)}.smv-upload-empty-state__icon{display:inline-flex;align-items:center;justify-content:center;width:56px;height:56px;margin-bottom:18px;border-radius:10px;background:#3b82f62e;color:#bfdbfe}.smv-upload-empty-state__title{margin:0 0 10px;color:var(--smv-panel-text-emphasis);font-size:24px;line-height:1.15}.smv-upload-empty-state__body{margin:0 0 18px;color:var(--smv-panel-text-muted);font-size:14px;font-weight:700;line-height:1.6}.smv-upload-empty-state__body code{color:var(--smv-panel-text-emphasis);font-family:var(--smv-panel-font-family)}.smv-upload-empty-state__button{display:inline-flex;align-items:center;gap:8px;min-height:40px;padding:0 18px;border:none;border-radius:8px;background:#3b82f6;color:#eff6ff;font-size:13px;font-weight:700;cursor:pointer}.smv-upload-drop-overlay{position:absolute;inset:0;z-index:130;display:flex;align-items:center;justify-content:center;padding:24px;background:#080c147a;backdrop-filter:blur(4px)}.smv-upload-drop-overlay__card{display:inline-flex;align-items:center;gap:10px;padding:16px 20px;border:1px dashed rgba(191,219,254,.75);border-radius:10px;background:#1e293beb;color:#dbeafe;font-size:14px;font-weight:700;box-shadow:0 18px 36px #00000047}.smv-canvasArea .bb-loadingOverlay{position:absolute;inset:0;z-index:110;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;padding:24px;text-align:center;border-radius:14px;background:#0f172a75;backdrop-filter:blur(1px)}.smv-canvasArea .bb-loadingSpinner{width:40px;height:40px;border-radius:999px;border:3px solid rgba(226,232,240,.24);border-top-color:#93c5fd;animation:bb-spin .8s linear infinite}.smv-canvasArea .bb-loadingProgressRow{display:flex;align-items:center;gap:8px;width:100%;max-width:240px}.smv-canvasArea .bb-loadingProgress{flex:1;height:6px;border-radius:999px;background:#e2e8f03d;overflow:hidden}.smv-canvasArea .bb-loadingProgress__bar{height:100%;border-radius:inherit;background:#93c5fd;transition:width .15s ease-out}.smv-canvasArea .bb-loadingProgress__label{flex-shrink:0;min-width:34px;text-align:right;color:#f7f8fa;font-size:12px;font-weight:600;font-variant-numeric:tabular-nums}.smv-canvasArea .bb-loadingMessage{max-width:320px;color:#f7f8fa;font-size:13px;font-weight:600;line-height:1.5}@keyframes bb-spin{to{transform:rotate(360deg)}}.right-panel-wrapper{height:100%;transition:width .45s cubic-bezier(.4,0,.2,1);overflow:visible}.right-panel-wrapper--open{width:300px;flex-shrink:0}.right-panel-wrapper--closed{width:0;flex-shrink:0}.left-panel-wrapper{height:100%;transition:width .45s cubic-bezier(.4,0,.2,1);overflow:visible;order:-1}.left-panel-wrapper--open{width:280px;flex-shrink:0}.left-panel-wrapper--closed{width:0;flex-shrink:0}.side-panel__open-btn.side-panel__open-btn--left{left:12px;right:auto}.side-panel.side-panel--left{left:0;right:auto;width:280px;transform:translate(-100%);border-left:none;border-right:1px solid var(--smv-panel-border);box-shadow:var(--smv-panel-shadow-left)}.side-panel.side-panel--open-left{transform:translate(0)}.side-panel.side-panel--closed-left{transform:translate(-100%)}.env-controls{display:flex;flex-direction:column;overflow-y:auto;flex:1}.env-section{border-bottom:1px solid var(--smv-panel-border-strong)}.env-section__header{display:flex;align-items:center;gap:6px;width:100%;padding:9px 14px;border:none;background:var(--smv-panel-surface-soft);color:var(--smv-panel-text-muted);font-size:11px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;cursor:pointer}.env-section__chevron{transition:transform .15s}.env-section__chevron--collapsed{transform:rotate(-90deg)}.env-section__body{display:flex;flex-direction:column}.env-row{display:flex;gap:6px;align-items:center;min-height:32px;border-bottom:1px solid var(--smv-panel-surface)}.env-row__label{flex:0 0 42%;padding:0 0 0 14px;font-size:11.5px;font-weight:500;color:var(--smv-panel-text-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.env-row__value{flex:1;display:flex;align-items:center;padding:5px 10px 5px 8px;min-width:0}.env-row__value--slider{gap:6px}.env-checkbox-btn{display:flex;align-items:center;cursor:pointer;background:none;border:none;padding:0}.env-checkbox{width:15px;height:15px;border-radius:3px;border:1.5px solid var(--smv-panel-border-active);background:var(--smv-panel-surface-soft);display:flex;align-items:center;justify-content:center;transition:background .15s,border-color .15s}.env-checkbox--checked{background:var(--smv-panel-accent);border-color:var(--smv-panel-accent)}.env-select{width:100%;padding:5px 8px;border-radius:4px;border:none;background:var(--smv-panel-surface-hover);color:var(--smv-panel-text);font-size:11.5px;outline:none;box-sizing:border-box;text-transform:capitalize}.env-color-swatch{position:relative;width:100%;height:22px;border-radius:4px;border:1px solid rgba(255,255,255,.15);display:flex;align-items:center;justify-content:center;overflow:hidden;cursor:pointer}.env-color-swatch__hex{font-size:10.5px;font-weight:700;color:#0f172a;text-shadow:0 1px 1px rgba(255,255,255,.35);pointer-events:none;text-transform:uppercase}.env-color-swatch__input{position:absolute;inset:0;width:100%;height:100%;border:none;padding:0;opacity:0;cursor:pointer}.env-slider{flex:1;accent-color:var(--smv-panel-accent);cursor:pointer;min-width:0}.env-slider__value{flex-shrink:0;min-width:32px;padding:2px 5px;border-radius:4px;background:var(--smv-panel-surface-hover);color:var(--smv-panel-accent);font-size:10.5px;font-weight:600;text-align:center}.side-panel__open-btn{position:absolute;top:12px;right:12px;display:flex;align-items:center;gap:7px;padding:7px 13px;border-radius:7px;border:1px solid var(--smv-panel-border-strong);background:var(--smv-panel-bg-strong);cursor:pointer;font-size:13px;font-weight:500;color:var(--smv-panel-text);z-index:190;transition:background .15s}.side-panel__open-btn:hover{background:var(--smv-panel-bg-strong-hover)}.side-panel{position:absolute;top:0;right:0;width:300px;height:100%;background:var(--smv-panel-bg);display:flex;flex-direction:column;font-family:var(--smv-panel-font-family);transform:translate(100%);transition:transform .45s cubic-bezier(.4,0,.2,1);z-index:200;border-left:1px solid var(--smv-panel-border);box-shadow:var(--smv-panel-shadow-right)}.side-panel--open{transform:translate(0)}.side-panel--closed{transform:translate(100%)}.side-panel__header{padding:24px 20px 16px;border-bottom:1px solid var(--smv-panel-border-strong)}.side-panel__header-top{display:flex;align-items:center;justify-content:space-between;margin-bottom:4px}.side-panel__eyebrow{font-size:15px;font-weight:700;letter-spacing:.12em;color:var(--smv-panel-text-subtle);text-transform:uppercase}.side-panel__title{font-size:22px;font-weight:700;color:var(--smv-panel-text);margin:0;line-height:1.2}.side-panel__close-btn{display:flex;align-items:center;justify-content:center;width:30px;height:30px;border-radius:8px;border:1px solid var(--smv-panel-border-strong);background:var(--smv-panel-surface);cursor:pointer;color:var(--smv-panel-text-muted);transition:background .15s,color .15s;flex-shrink:0}.side-panel__close-btn:hover{background:var(--smv-panel-surface-hover);color:var(--smv-panel-text)}.side-panel__search-wrap{padding:14px 16px;border-bottom:1px solid var(--smv-panel-border-strong)}.side-panel__search{width:100%;padding:10px 14px;border-radius:10px;border:1px solid var(--smv-panel-border-strong);background:var(--smv-panel-surface);color:var(--smv-panel-text);font-size:13px;outline:none;box-sizing:border-box;transition:border-color .15s,background .15s}.side-panel__search::placeholder{color:var(--smv-panel-text-subtle)}.side-panel__search:focus{border-color:var(--smv-panel-border-active);background:var(--smv-panel-surface-hover)}.side-panel__list{display:flex;flex-direction:column;padding:10px 0;overflow-y:auto;flex:1}.side-panel__list::-webkit-scrollbar{width:4px}.side-panel__list::-webkit-scrollbar-track{background:transparent}.side-panel__list::-webkit-scrollbar-thumb{background:var(--smv-panel-surface-hover);border-radius:4px}.side-panel__row{display:flex;align-items:center;justify-content:space-between;padding:12px 20px;cursor:pointer;transition:background .12s;border-bottom:1px solid var(--smv-panel-surface-soft)}.side-panel__row:hover,.side-panel__row--hovered{background:var(--smv-panel-surface)}.side-panel__label{font-size:14px;font-weight:600;color:var(--smv-panel-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1}.side-panel__label--hovered{color:var(--smv-panel-text-emphasis)}.side-panel__vis-btn{display:flex;align-items:center;flex-shrink:0;cursor:pointer;background:none;border:none;padding:0;margin-left:10px}.side-panel__checkbox{width:16px;height:16px;border-radius:4px;border:1.5px solid var(--smv-panel-border-active);background:transparent;display:flex;align-items:center;justify-content:center;transition:background .15s,border-color .15s}.side-panel__checkbox--checked{background:var(--smv-panel-accent);border-color:var(--smv-panel-accent)}@media(max-width:900px){.smv-upload-toolbar{top:56px;gap:8px;max-width:calc(100% - 24px);padding:8px 10px}.smv-upload-toolbar__name{max-width:140px}.right-panel-wrapper--open,.left-panel-wrapper--open{width:0}.side-panel,.side-panel.side-panel--left{width:min(300px,85vw)}}.smv-largeModelBanner{position:absolute;bottom:12px;left:50%;transform:translate(-50%);z-index:20;display:flex;align-items:center;gap:8px;padding:7px 12px 7px 10px;border-radius:8px;background:#1e1400e0;border:1px solid rgba(251,191,36,.35);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);color:#fbbf24;font-size:12px;font-weight:500;line-height:1.4;pointer-events:auto;max-width:calc(100% - 32px);text-align:center}.smv-largeModelBanner__icon{flex-shrink:0}.smv-largeModelBanner__dismiss{flex-shrink:0;display:flex;align-items:center;justify-content:center;margin-left:4px;padding:2px;background:none;border:none;border-radius:4px;color:#fbbf24b3;cursor:pointer;transition:color .15s ease,background .15s ease}.smv-largeModelBanner__dismiss:hover{color:#fbbf24;background:#fbbf241f}
|
|
1
|
+
.bb-loadingOverlay{position:absolute;inset:0;z-index:5;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;padding:24px;text-align:center;border-radius:14px;background:#f8fafcd1;backdrop-filter:blur(2px)}.bb-loadingSpinner{width:40px;height:40px;border-radius:999px;border:3px solid rgba(148,163,184,.3);border-top-color:#2563eb;animation:bb-spin .8s linear infinite}.bb-loadingProgressRow{display:flex;align-items:center;gap:8px;width:100%;max-width:240px}.bb-loadingProgress{flex:1;height:6px;border-radius:999px;background:#94a3b84d;overflow:hidden}.bb-loadingProgress__bar{height:100%;border-radius:inherit;background:#2563eb;transition:width .15s ease-out}.bb-loadingProgress__label{flex-shrink:0;min-width:34px;text-align:right;color:#475569;font-size:12px;font-weight:600;font-variant-numeric:tabular-nums}.bb-loadingMessage{max-width:320px;color:#475569;font-size:13px;font-weight:600;line-height:1.5}.ri-viewerSlot{position:relative;width:100%;height:100%;min-width:0;min-height:0}.ri-viewerPlaceholder{position:relative;overflow:hidden}.ri-viewerPlaceholder--inset{position:absolute;inset:0}.ri-poster{position:absolute;inset:0;z-index:0;width:100%;height:100%;object-fit:var(--ri-poster-fit, contain);pointer-events:none;user-select:none;transition:opacity .3s ease}.ri-poster--hidden{opacity:0}[data-reduced-motion] .ri-poster{transition:none}@media(prefers-reduced-motion:reduce){.ri-poster{transition:none}}.ri-revealButton{position:absolute;top:50%;left:50%;z-index:2;display:inline-flex;align-items:center;gap:8px;padding:10px 18px;border:0;border-radius:999px;background:#111827d1;color:#f9fafb;font:600 14px/1.2 Inter,Segoe UI,Helvetica,Arial,sans-serif;white-space:nowrap;cursor:pointer;transform:translate(-50%,-50%);box-shadow:0 6px 20px #00000040}.ri-revealButton:hover{background:#111827f0}.ri-revealButton:focus-visible{outline:2px solid #93c5fd;outline-offset:3px}:root{--ri-styles-simple-model-viewer: 1}.smv-root{--smv-panel-font-family: Inter, "Segoe UI", Helvetica, Arial, sans-serif;--smv-panel-bg: #141824;--smv-panel-bg-strong: #1a1f2e;--smv-panel-bg-strong-hover: #252b3b;--smv-panel-border: rgba(255, 255, 255, .06);--smv-panel-border-strong: rgba(255, 255, 255, .08);--smv-panel-border-active: rgba(255, 255, 255, .18);--smv-panel-shadow-left: 4px 0 24px rgba(0, 0, 0, .35);--smv-panel-shadow-right: -4px 0 24px rgba(0, 0, 0, .35);--smv-panel-text: #f1f5f9;--smv-panel-text-emphasis: #ffffff;--smv-panel-text-muted: #94a3b8;--smv-panel-text-subtle: #64748b;--smv-panel-surface: rgba(255, 255, 255, .05);--smv-panel-surface-hover: rgba(255, 255, 255, .1);--smv-panel-surface-soft: rgba(255, 255, 255, .04);--smv-panel-accent: #3b82f6;--smv-panel-accent-contrast: #ffffff;position:relative;width:100%;height:100%;min-height:0;overflow:hidden;display:flex;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility;font-synthesis:none}.smv-canvasArea{flex:1;position:relative;min-width:0}.smv-upload-input{display:none}.smv-upload-toolbar{position:absolute;top:12px;left:50%;z-index:120;display:flex;align-items:center;gap:10px;max-width:calc(100% - 32px);padding:5px 6px;border:1px solid var(--smv-panel-border-strong);border-radius:10px;background:#141824e0;color:var(--smv-panel-text);box-shadow:0 16px 30px #00000047;backdrop-filter:blur(14px);transform:translate(-50%)}.smv-upload-toolbar__name{max-width:260px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--smv-panel-text-muted);font-size:12px;font-weight:500}.smv-upload-toolbar__button{display:inline-flex;align-items:center;gap:7px;min-height:34px;padding:0 14px;border:1px solid rgba(255,255,255,.08);border-radius:10px;background:#3b82f62e;color:var(--smv-panel-text-emphasis);font-size:12px;font-weight:600;cursor:pointer}.smv-upload-toolbar__button--ghost{background:var(--smv-panel-surface);color:var(--smv-panel-text-muted)}.smv-upload-empty-state{display:flex;align-items:center;justify-content:center;width:100%;height:100%;padding:24px}.smv-upload-empty-state__card{width:min(440px,100%);padding:28px;border:1px dashed rgba(255,255,255,.2);border-radius:8px;color:var(--smv-panel-text);text-align:center;box-shadow:0 24px 40px #00000047;backdrop-filter:blur(14px)}.smv-upload-empty-state__icon{display:inline-flex;align-items:center;justify-content:center;width:56px;height:56px;margin-bottom:18px;border-radius:10px;background:#3b82f62e;color:#bfdbfe}.smv-upload-empty-state__title{margin:0 0 10px;color:var(--smv-panel-text-emphasis);font-size:24px;line-height:1.15}.smv-upload-empty-state__body{margin:0 0 18px;color:var(--smv-panel-text-muted);font-size:14px;font-weight:700;line-height:1.6}.smv-upload-empty-state__body code{color:var(--smv-panel-text-emphasis);font-family:var(--smv-panel-font-family)}.smv-upload-empty-state__button{display:inline-flex;align-items:center;gap:8px;min-height:40px;padding:0 18px;border:none;border-radius:8px;background:#3b82f6;color:#eff6ff;font-size:13px;font-weight:700;cursor:pointer}.smv-upload-drop-overlay{position:absolute;inset:0;z-index:130;display:flex;align-items:center;justify-content:center;padding:24px;background:#080c147a;backdrop-filter:blur(4px)}.smv-upload-drop-overlay__card{display:inline-flex;align-items:center;gap:10px;padding:16px 20px;border:1px dashed rgba(191,219,254,.75);border-radius:10px;background:#1e293beb;color:#dbeafe;font-size:14px;font-weight:700;box-shadow:0 18px 36px #00000047}.smv-canvasArea .bb-loadingOverlay{position:absolute;inset:0;z-index:110;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;padding:24px;text-align:center;border-radius:14px;background:#0f172a75;backdrop-filter:blur(1px)}.smv-canvasArea .bb-loadingSpinner{width:40px;height:40px;border-radius:999px;border:3px solid rgba(226,232,240,.24);border-top-color:#93c5fd;animation:bb-spin .8s linear infinite}.smv-canvasArea .bb-loadingProgressRow{display:flex;align-items:center;gap:8px;width:100%;max-width:240px}.smv-canvasArea .bb-loadingProgress{flex:1;height:6px;border-radius:999px;background:#e2e8f03d;overflow:hidden}.smv-canvasArea .bb-loadingProgress__bar{height:100%;border-radius:inherit;background:#93c5fd;transition:width .15s ease-out}.smv-canvasArea .bb-loadingProgress__label{flex-shrink:0;min-width:34px;text-align:right;color:#f7f8fa;font-size:12px;font-weight:600;font-variant-numeric:tabular-nums}.smv-canvasArea .bb-loadingMessage{max-width:320px;color:#f7f8fa;font-size:13px;font-weight:600;line-height:1.5}@keyframes bb-spin{to{transform:rotate(360deg)}}.right-panel-wrapper{height:100%;transition:width .45s cubic-bezier(.4,0,.2,1);overflow:visible}.right-panel-wrapper--open{width:300px;flex-shrink:0}.right-panel-wrapper--closed{width:0;flex-shrink:0}.left-panel-wrapper{height:100%;transition:width .45s cubic-bezier(.4,0,.2,1);overflow:visible;order:-1}.left-panel-wrapper--open{width:280px;flex-shrink:0}.left-panel-wrapper--closed{width:0;flex-shrink:0}.side-panel__open-btn.side-panel__open-btn--left{left:12px;right:auto}.side-panel.side-panel--left{left:0;right:auto;width:280px;transform:translate(-100%);border-left:none;border-right:1px solid var(--smv-panel-border);box-shadow:var(--smv-panel-shadow-left)}.side-panel.side-panel--open-left{transform:translate(0)}.side-panel.side-panel--closed-left{transform:translate(-100%)}.env-controls{display:flex;flex-direction:column;overflow-y:auto;flex:1}.env-section{border-bottom:1px solid var(--smv-panel-border-strong)}.env-section__header{display:flex;align-items:center;gap:6px;width:100%;padding:9px 14px;border:none;background:var(--smv-panel-surface-soft);color:var(--smv-panel-text-muted);font-size:11px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;cursor:pointer}.env-section__chevron{transition:transform .15s}.env-section__chevron--collapsed{transform:rotate(-90deg)}.env-section__body{display:flex;flex-direction:column}.env-row{display:flex;gap:6px;align-items:center;min-height:32px;border-bottom:1px solid var(--smv-panel-surface)}.env-row__label{flex:0 0 42%;padding:0 0 0 14px;font-size:11.5px;font-weight:500;color:var(--smv-panel-text-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.env-row__value{flex:1;display:flex;align-items:center;padding:5px 10px 5px 8px;min-width:0}.env-row__value--slider{gap:6px}.env-checkbox-btn{display:flex;align-items:center;cursor:pointer;background:none;border:none;padding:0}.env-checkbox{width:15px;height:15px;border-radius:3px;border:1.5px solid var(--smv-panel-border-active);background:var(--smv-panel-surface-soft);display:flex;align-items:center;justify-content:center;transition:background .15s,border-color .15s}.env-checkbox--checked{background:var(--smv-panel-accent);border-color:var(--smv-panel-accent)}.env-select{width:100%;padding:5px 8px;border-radius:4px;border:none;background:var(--smv-panel-surface-hover);color:var(--smv-panel-text);font-size:11.5px;outline:none;box-sizing:border-box;text-transform:capitalize}.env-color-swatch{position:relative;width:100%;height:22px;border-radius:4px;border:1px solid rgba(255,255,255,.15);display:flex;align-items:center;justify-content:center;overflow:hidden;cursor:pointer}.env-color-swatch__hex{font-size:10.5px;font-weight:700;color:#0f172a;text-shadow:0 1px 1px rgba(255,255,255,.35);pointer-events:none;text-transform:uppercase}.env-color-swatch__input{position:absolute;inset:0;width:100%;height:100%;border:none;padding:0;opacity:0;cursor:pointer}.env-slider{flex:1;accent-color:var(--smv-panel-accent);cursor:pointer;min-width:0}.env-slider__value{flex-shrink:0;min-width:32px;padding:2px 5px;border-radius:4px;background:var(--smv-panel-surface-hover);color:var(--smv-panel-accent);font-size:10.5px;font-weight:600;text-align:center}.side-panel__open-btn{position:absolute;top:12px;right:12px;display:flex;align-items:center;gap:7px;padding:7px 13px;border-radius:7px;border:1px solid var(--smv-panel-border-strong);background:var(--smv-panel-bg-strong);cursor:pointer;font-size:13px;font-weight:500;color:var(--smv-panel-text);z-index:190;transition:background .15s}.side-panel__open-btn:hover{background:var(--smv-panel-bg-strong-hover)}.side-panel{position:absolute;top:0;right:0;width:300px;height:100%;background:var(--smv-panel-bg);display:flex;flex-direction:column;font-family:var(--smv-panel-font-family);transform:translate(100%);transition:transform .45s cubic-bezier(.4,0,.2,1);z-index:200;border-left:1px solid var(--smv-panel-border);box-shadow:var(--smv-panel-shadow-right)}.side-panel--open{transform:translate(0)}.side-panel--closed{transform:translate(100%)}.side-panel__header{padding:24px 20px 16px;border-bottom:1px solid var(--smv-panel-border-strong)}.side-panel__header-top{display:flex;align-items:center;justify-content:space-between;margin-bottom:4px}.side-panel__eyebrow{font-size:15px;font-weight:700;letter-spacing:.12em;color:var(--smv-panel-text-subtle);text-transform:uppercase}.side-panel__title{font-size:22px;font-weight:700;color:var(--smv-panel-text);margin:0;line-height:1.2}.side-panel__close-btn{display:flex;align-items:center;justify-content:center;width:30px;height:30px;border-radius:8px;border:1px solid var(--smv-panel-border-strong);background:var(--smv-panel-surface);cursor:pointer;color:var(--smv-panel-text-muted);transition:background .15s,color .15s;flex-shrink:0}.side-panel__close-btn:hover{background:var(--smv-panel-surface-hover);color:var(--smv-panel-text)}.side-panel__search-wrap{padding:14px 16px;border-bottom:1px solid var(--smv-panel-border-strong)}.side-panel__search{width:100%;padding:10px 14px;border-radius:10px;border:1px solid var(--smv-panel-border-strong);background:var(--smv-panel-surface);color:var(--smv-panel-text);font-size:13px;outline:none;box-sizing:border-box;transition:border-color .15s,background .15s}.side-panel__search::placeholder{color:var(--smv-panel-text-subtle)}.side-panel__search:focus{border-color:var(--smv-panel-border-active);background:var(--smv-panel-surface-hover)}.side-panel__list{display:flex;flex-direction:column;padding:10px 0;overflow-y:auto;flex:1}.side-panel__list::-webkit-scrollbar{width:4px}.side-panel__list::-webkit-scrollbar-track{background:transparent}.side-panel__list::-webkit-scrollbar-thumb{background:var(--smv-panel-surface-hover);border-radius:4px}.side-panel__row{display:flex;align-items:center;justify-content:space-between;padding:12px 20px;cursor:pointer;transition:background .12s;border-bottom:1px solid var(--smv-panel-surface-soft)}.side-panel__row:hover,.side-panel__row--hovered{background:var(--smv-panel-surface)}.side-panel__label{font-size:14px;font-weight:600;color:var(--smv-panel-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1}.side-panel__labelButton{min-width:0;padding:0;background:none;border:none;font-family:inherit;text-align:left;cursor:pointer}.side-panel__labelButton:focus-visible{outline:2px solid var(--smv-panel-text);outline-offset:2px;border-radius:4px}.side-panel__label--hovered{color:var(--smv-panel-text-emphasis)}.side-panel__vis-btn{display:flex;align-items:center;flex-shrink:0;cursor:pointer;background:none;border:none;padding:0;margin-left:10px}.side-panel__checkbox{width:16px;height:16px;border-radius:4px;border:1.5px solid var(--smv-panel-border-active);background:transparent;display:flex;align-items:center;justify-content:center;transition:background .15s,border-color .15s}.side-panel__checkbox--checked{background:var(--smv-panel-accent);border-color:var(--smv-panel-accent)}@media(max-width:900px){.smv-upload-toolbar{top:56px;gap:8px;max-width:calc(100% - 24px);padding:8px 10px}.smv-upload-toolbar__name{max-width:140px}.right-panel-wrapper--open,.left-panel-wrapper--open{width:0}.side-panel,.side-panel.side-panel--left{width:min(300px,85vw)}}.smv-largeModelBanner{position:absolute;bottom:12px;left:50%;transform:translate(-50%);z-index:20;display:flex;align-items:center;gap:8px;padding:7px 12px 7px 10px;border-radius:8px;background:#1e1400e0;border:1px solid rgba(251,191,36,.35);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);color:#fbbf24;font-size:12px;font-weight:500;line-height:1.4;pointer-events:auto;max-width:calc(100% - 32px);text-align:center}.smv-largeModelBanner__icon{flex-shrink:0}.smv-largeModelBanner__dismiss{flex-shrink:0;display:flex;align-items:center;justify-content:center;margin-left:4px;padding:2px;background:none;border:none;border-radius:4px;color:#fbbf24b3;cursor:pointer;transition:color .15s ease,background .15s ease}.smv-largeModelBanner__dismiss:hover{color:#fbbf24;background:#fbbf241f}.smv-root[data-reduced-motion] *,.smv-root[data-reduced-motion] *:before,.smv-root[data-reduced-motion] *:after{transition-duration:0s!important;transition-delay:0s!important}
|
|
@@ -1,10 +1,31 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
|
-
import {
|
|
3
|
-
export {
|
|
2
|
+
import { c as ModelViewerLabels, R as ReducedMotionSetting } from './materialVariants-DnZe9eMC.mjs';
|
|
3
|
+
export { D as DEFAULT_MODEL_VIEWER_LABELS, M as MaterialVariantGroup, a as MaterialVariantOption, b as ModelViewerLabelKey } from './materialVariants-DnZe9eMC.mjs';
|
|
4
|
+
import { V as ViewerLoading, c as ViewerReveal, M as ModelFormat, b as ViewerModelInfo } from './modelInfo-BYebMPdZ.mjs';
|
|
5
|
+
export { a as ViewerModelBounds } from './modelInfo-BYebMPdZ.mjs';
|
|
4
6
|
import { PresetsType } from '@react-three/drei/helpers/environment-assets';
|
|
5
7
|
|
|
6
8
|
type SimpleModelViewerProps = {
|
|
9
|
+
/** Plain-text overrides for built-in viewer text. */
|
|
10
|
+
labels?: ModelViewerLabels;
|
|
7
11
|
modelUrl: string;
|
|
12
|
+
/**
|
|
13
|
+
* An image shown in the viewer's place until its 3D view is drawn: a render
|
|
14
|
+
* or photo of the model, best framed as the viewer frames it.
|
|
15
|
+
*/
|
|
16
|
+
poster?: string;
|
|
17
|
+
/**
|
|
18
|
+
* `"lazy"` (default) starts the 3D view when the viewer is on or near the
|
|
19
|
+
* screen. When the page needs room for viewers in view, one scrolled away
|
|
20
|
+
* from goes back to a picture of itself, and comes back as it was. `"eager"`
|
|
21
|
+
* starts at once and keeps its view.
|
|
22
|
+
*/
|
|
23
|
+
loading?: ViewerLoading;
|
|
24
|
+
/**
|
|
25
|
+
* `"interaction"` keeps the poster, with a "View in 3D" button, until the
|
|
26
|
+
* visitor asks for the 3D view. Default `"auto"`.
|
|
27
|
+
*/
|
|
28
|
+
reveal?: ViewerReveal;
|
|
8
29
|
/** Explicit format for extensionless or signed model URLs. */
|
|
9
30
|
modelFormat?: ModelFormat;
|
|
10
31
|
/** Directory containing the DRACO decoder files, or false. */
|
|
@@ -21,6 +42,13 @@ type SimpleModelViewerProps = {
|
|
|
21
42
|
highlightOnHover?: boolean;
|
|
22
43
|
showLoadingOverlay?: boolean;
|
|
23
44
|
refitOnResize?: boolean;
|
|
45
|
+
/**
|
|
46
|
+
* Cuts motion the viewer starts on its own: auto-rotate doesn't start, and
|
|
47
|
+
* camera moves jump instead of gliding. `"user"` (default) follows the
|
|
48
|
+
* visitor's `prefers-reduced-motion` setting; `"always"` and `"never"`
|
|
49
|
+
* override it.
|
|
50
|
+
*/
|
|
51
|
+
reducedMotion?: ReducedMotionSetting;
|
|
24
52
|
backgroundEnabled?: boolean;
|
|
25
53
|
autoRotate?: boolean;
|
|
26
54
|
envPreset?: PresetsType;
|
|
@@ -33,6 +61,6 @@ type SimpleModelViewerProps = {
|
|
|
33
61
|
onModelLoaded?: (model: ViewerModelInfo) => void;
|
|
34
62
|
onLoadError?: (error: unknown) => void;
|
|
35
63
|
};
|
|
36
|
-
declare function SimpleModelViewer(
|
|
64
|
+
declare function SimpleModelViewer(props: SimpleModelViewerProps): react.JSX.Element;
|
|
37
65
|
|
|
38
|
-
export { ModelFormat, SimpleModelViewer, type SimpleModelViewerProps, ViewerModelInfo };
|
|
66
|
+
export { ModelFormat, ModelViewerLabels, ReducedMotionSetting, SimpleModelViewer, type SimpleModelViewerProps, ViewerLoading, ViewerModelInfo, ViewerReveal };
|
|
@@ -1,10 +1,31 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
|
-
import {
|
|
3
|
-
export {
|
|
2
|
+
import { c as ModelViewerLabels, R as ReducedMotionSetting } from './materialVariants-DnZe9eMC.js';
|
|
3
|
+
export { D as DEFAULT_MODEL_VIEWER_LABELS, M as MaterialVariantGroup, a as MaterialVariantOption, b as ModelViewerLabelKey } from './materialVariants-DnZe9eMC.js';
|
|
4
|
+
import { V as ViewerLoading, c as ViewerReveal, M as ModelFormat, b as ViewerModelInfo } from './modelInfo-XfUQO7C_.js';
|
|
5
|
+
export { a as ViewerModelBounds } from './modelInfo-XfUQO7C_.js';
|
|
4
6
|
import { PresetsType } from '@react-three/drei/helpers/environment-assets';
|
|
5
7
|
|
|
6
8
|
type SimpleModelViewerProps = {
|
|
9
|
+
/** Plain-text overrides for built-in viewer text. */
|
|
10
|
+
labels?: ModelViewerLabels;
|
|
7
11
|
modelUrl: string;
|
|
12
|
+
/**
|
|
13
|
+
* An image shown in the viewer's place until its 3D view is drawn: a render
|
|
14
|
+
* or photo of the model, best framed as the viewer frames it.
|
|
15
|
+
*/
|
|
16
|
+
poster?: string;
|
|
17
|
+
/**
|
|
18
|
+
* `"lazy"` (default) starts the 3D view when the viewer is on or near the
|
|
19
|
+
* screen. When the page needs room for viewers in view, one scrolled away
|
|
20
|
+
* from goes back to a picture of itself, and comes back as it was. `"eager"`
|
|
21
|
+
* starts at once and keeps its view.
|
|
22
|
+
*/
|
|
23
|
+
loading?: ViewerLoading;
|
|
24
|
+
/**
|
|
25
|
+
* `"interaction"` keeps the poster, with a "View in 3D" button, until the
|
|
26
|
+
* visitor asks for the 3D view. Default `"auto"`.
|
|
27
|
+
*/
|
|
28
|
+
reveal?: ViewerReveal;
|
|
8
29
|
/** Explicit format for extensionless or signed model URLs. */
|
|
9
30
|
modelFormat?: ModelFormat;
|
|
10
31
|
/** Directory containing the DRACO decoder files, or false. */
|
|
@@ -21,6 +42,13 @@ type SimpleModelViewerProps = {
|
|
|
21
42
|
highlightOnHover?: boolean;
|
|
22
43
|
showLoadingOverlay?: boolean;
|
|
23
44
|
refitOnResize?: boolean;
|
|
45
|
+
/**
|
|
46
|
+
* Cuts motion the viewer starts on its own: auto-rotate doesn't start, and
|
|
47
|
+
* camera moves jump instead of gliding. `"user"` (default) follows the
|
|
48
|
+
* visitor's `prefers-reduced-motion` setting; `"always"` and `"never"`
|
|
49
|
+
* override it.
|
|
50
|
+
*/
|
|
51
|
+
reducedMotion?: ReducedMotionSetting;
|
|
24
52
|
backgroundEnabled?: boolean;
|
|
25
53
|
autoRotate?: boolean;
|
|
26
54
|
envPreset?: PresetsType;
|
|
@@ -33,6 +61,6 @@ type SimpleModelViewerProps = {
|
|
|
33
61
|
onModelLoaded?: (model: ViewerModelInfo) => void;
|
|
34
62
|
onLoadError?: (error: unknown) => void;
|
|
35
63
|
};
|
|
36
|
-
declare function SimpleModelViewer(
|
|
64
|
+
declare function SimpleModelViewer(props: SimpleModelViewerProps): react.JSX.Element;
|
|
37
65
|
|
|
38
|
-
export { ModelFormat, SimpleModelViewer, type SimpleModelViewerProps, ViewerModelInfo };
|
|
66
|
+
export { ModelFormat, ModelViewerLabels, ReducedMotionSetting, SimpleModelViewer, type SimpleModelViewerProps, ViewerLoading, ViewerModelInfo, ViewerReveal };
|