@liveroom-tech/react-immersive 6.1.2 → 6.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/dist/{SequencesTab-JTIVIZJD.mjs → SequencesTab-ODR5IGDX.mjs} +1 -1
- package/dist/binding-builder.css +1 -1
- package/dist/binding-builder.d.mts +3 -3
- package/dist/binding-builder.d.ts +3 -3
- package/dist/binding-builder.js +75 -34
- package/dist/binding-builder.mjs +1 -1
- package/dist/chunk-2CUPPOBW.mjs +3 -0
- package/dist/chunk-3MIILDHB.mjs +83 -0
- package/dist/chunk-3XZKDTB2.mjs +1 -0
- package/dist/chunk-7MN2TMY6.mjs +47 -0
- package/dist/{chunk-W7M2YD65.mjs → chunk-EWNN4BBR.mjs} +1 -1
- package/dist/{chunk-5XII5XCD.mjs → chunk-GXY3VML4.mjs} +1 -1
- package/dist/chunk-IOLT2VXU.mjs +1 -0
- package/dist/chunk-X4WRTDO6.mjs +50 -0
- package/dist/hosted.css +1 -1
- package/dist/hosted.d.mts +4 -4
- package/dist/hosted.d.ts +4 -4
- package/dist/hosted.js +73 -32
- package/dist/hosted.mjs +1 -1
- package/dist/index.css +1 -1
- package/dist/index.d.mts +4 -4
- package/dist/index.d.ts +4 -4
- package/dist/index.js +72 -31
- package/dist/index.mjs +1 -1
- package/dist/{modelFileResolver-pPzMl63D.d.mts → modelFileResolver-ChKYsF21.d.mts} +33 -1
- package/dist/{modelFileResolver-pPzMl63D.d.ts → modelFileResolver-ChKYsF21.d.ts} +33 -1
- package/dist/{modelViewerProps-07WgBVqm.d.ts → modelViewerProps-Ch6pIZIE.d.ts} +30 -31
- package/dist/{modelViewerProps-CGgtm4Zb.d.mts → modelViewerProps-HazR2IE_.d.mts} +30 -31
- package/dist/{publicProps-BylAVwPu.d.mts → publicProps-Cmh9JtzJ.d.ts} +2 -1
- package/dist/{publicProps-CEt3hxQU.d.ts → publicProps-TMARX628.d.mts} +2 -1
- package/dist/simple-model-viewer.css +1 -1
- package/dist/simple-model-viewer.d.mts +15 -2
- package/dist/simple-model-viewer.d.ts +15 -2
- package/dist/simple-model-viewer.js +5 -5
- package/dist/simple-model-viewer.mjs +1 -1
- package/dist/utils.d.mts +4 -4
- package/dist/utils.d.ts +4 -4
- package/dist/utils.js +50 -9
- package/dist/utils.mjs +1 -1
- package/package.json +7 -4
- package/dist/chunk-35UERL2D.mjs +0 -83
- package/dist/chunk-DS5XNP7A.mjs +0 -47
- package/dist/chunk-M4LVNNVP.mjs +0 -1
- package/dist/chunk-Q4QPI5GG.mjs +0 -9
- package/dist/chunk-WJIICFV4.mjs +0 -3
- package/dist/chunk-XBVAZFXW.mjs +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Object3D, Material } from 'three';
|
|
2
|
-
import { e as ViewerModelBounds, R as ReducedMotionSetting, d as ModelViewerLabels, V as ViewerLoading, g as ViewerReveal, b as ModelFormat, f as ViewerModelInfo } from './modelFileResolver-
|
|
2
|
+
import { e as ViewerModelBounds, R as ReducedMotionSetting, C as CameraLimits, d as ModelViewerLabels, V as ViewerLoading, g as ViewerReveal, b as ModelFormat, f as ViewerModelInfo } from './modelFileResolver-ChKYsF21.mjs';
|
|
3
3
|
import { ReactNode } from 'react';
|
|
4
4
|
import { CameraControls } from '@react-three/drei';
|
|
5
5
|
|
|
@@ -369,6 +369,8 @@ type SceneLight = {
|
|
|
369
369
|
decay?: number;
|
|
370
370
|
angle?: number;
|
|
371
371
|
penumbra?: number;
|
|
372
|
+
/** Spot/directional aim point; unset aims at the origin (model centre with shadows). */
|
|
373
|
+
target?: [number, number, number];
|
|
372
374
|
attachedToCamera: boolean;
|
|
373
375
|
/** Follow a model object instead of using the world-space position. */
|
|
374
376
|
attachment?: SceneLightAttachment;
|
|
@@ -878,6 +880,8 @@ type AnimationClipState = {
|
|
|
878
880
|
reverse: boolean;
|
|
879
881
|
};
|
|
880
882
|
type AnimationPlaybackState = {
|
|
883
|
+
/** Playback intent is preserved while offscreen rendering is suspended. */
|
|
884
|
+
isRenderPaused?: boolean;
|
|
881
885
|
/** The clip played most recently, while it's active. */
|
|
882
886
|
currentClip: string | null;
|
|
883
887
|
/** Whether any clip is playing. */
|
|
@@ -906,6 +910,7 @@ type AnimationControls = {
|
|
|
906
910
|
subscribe?: (listener: (state: AnimationPlaybackState) => void) => () => void;
|
|
907
911
|
};
|
|
908
912
|
type ViewerAnimationsProps = {
|
|
913
|
+
isRenderPaused: boolean;
|
|
909
914
|
clips: string[];
|
|
910
915
|
clipDetails: AnimationClipInfo[];
|
|
911
916
|
currentClip: string | null;
|
|
@@ -1226,6 +1231,15 @@ type ObjectPointerEvent = {
|
|
|
1226
1231
|
surface?: ObjectSurfacePoint;
|
|
1227
1232
|
};
|
|
1228
1233
|
|
|
1234
|
+
type LicenseStatus = "checking" | "valid" | "invalid";
|
|
1235
|
+
interface LicenseResult {
|
|
1236
|
+
status: LicenseStatus;
|
|
1237
|
+
reason?: string;
|
|
1238
|
+
environment?: "development" | "production";
|
|
1239
|
+
tier?: string;
|
|
1240
|
+
isLocalDomain: boolean;
|
|
1241
|
+
}
|
|
1242
|
+
|
|
1229
1243
|
type ViewerProductOptions = {
|
|
1230
1244
|
/** Connects your own pricing, stock, cart and quote services. */
|
|
1231
1245
|
adapter?: ProductCommerceAdapter;
|
|
@@ -1532,34 +1546,6 @@ type ViewerEngagementEvent = {
|
|
|
1532
1546
|
reason: "stopped" | "restarted" | "annotations-changed" | "interrupted";
|
|
1533
1547
|
});
|
|
1534
1548
|
|
|
1535
|
-
type CameraLimits = {
|
|
1536
|
-
/** Closest the camera can get to its target, in scene units. Default 0. */
|
|
1537
|
-
minDistance?: number;
|
|
1538
|
-
/** Farthest the camera can get from its target, in scene units. Default Infinity. */
|
|
1539
|
-
maxDistance?: number;
|
|
1540
|
-
/**
|
|
1541
|
-
* Lowest vertical angle, in degrees: 0 looks straight down from above, 90 is
|
|
1542
|
-
* level with the target, 180 looks straight up from below. Default 0.
|
|
1543
|
-
*/
|
|
1544
|
-
minPolarAngle?: number;
|
|
1545
|
-
/** Highest vertical angle, in degrees (see minPolarAngle). Default 180. */
|
|
1546
|
-
maxPolarAngle?: number;
|
|
1547
|
-
/**
|
|
1548
|
-
* Leftmost horizontal angle, in degrees around the vertical axis: 0 views
|
|
1549
|
-
* the target from the front (+Z), 90 from its right (+X), -90 from its
|
|
1550
|
-
* left. Default -Infinity (no limit).
|
|
1551
|
-
*/
|
|
1552
|
-
minAzimuthAngle?: number;
|
|
1553
|
-
/** Rightmost horizontal angle, in degrees (see minAzimuthAngle). Default Infinity. */
|
|
1554
|
-
maxAzimuthAngle?: number;
|
|
1555
|
-
/** An axis-aligned world-space box the camera's target can pan within. */
|
|
1556
|
-
panBoundary?: [min: [number, number, number], max: [number, number, number]];
|
|
1557
|
-
/** Keeps the camera itself, not just its target, inside panBoundary. Default false. */
|
|
1558
|
-
boundaryEnclosesCamera?: boolean;
|
|
1559
|
-
/** How strongly panning slows near panBoundary, 0–1. Default 0. */
|
|
1560
|
-
boundaryFriction?: number;
|
|
1561
|
-
};
|
|
1562
|
-
|
|
1563
1549
|
type MouseControllerPosition = 'bottom-left' | 'bottom-right' | 'top-left' | 'top-right' | 'center' | 'center-bottom' | 'center-top';
|
|
1564
1550
|
|
|
1565
1551
|
type XRScaleMode = "normalized" | "real-world";
|
|
@@ -1818,7 +1804,7 @@ type UseViewerCameraOptions = {
|
|
|
1818
1804
|
initialTarget?: [number, number, number];
|
|
1819
1805
|
/** Whether the initial position/target should animate. Defaults to false. */
|
|
1820
1806
|
initialTransition?: boolean;
|
|
1821
|
-
/**
|
|
1807
|
+
/** Initial named views, read once. Use setCameraPresets to load later edits. */
|
|
1822
1808
|
presets?: Record<string, ViewerCameraPreset>;
|
|
1823
1809
|
};
|
|
1824
1810
|
type HomeCameraState = {
|
|
@@ -1852,8 +1838,15 @@ type ViewerReadyState = {
|
|
|
1852
1838
|
};
|
|
1853
1839
|
};
|
|
1854
1840
|
type ViewerCameraProps = {
|
|
1841
|
+
/**
|
|
1842
|
+
* Rendering is suspended because the viewer is offscreen. Camera commands
|
|
1843
|
+
* still complete: they jump straight to their end instead of animating.
|
|
1844
|
+
*/
|
|
1845
|
+
isRenderPaused: boolean;
|
|
1855
1846
|
cameraState: ViewerCameraState | null;
|
|
1856
1847
|
cameraPresets: Record<string, ViewerCameraPreset>;
|
|
1848
|
+
/** Replace named views after loading or editing them; does not move the camera. */
|
|
1849
|
+
setCameraPresets: (presets: Record<string, ViewerCameraPreset>) => void;
|
|
1857
1850
|
resetView: () => Promise<boolean>;
|
|
1858
1851
|
focusObject: (objectId: string) => Promise<boolean>;
|
|
1859
1852
|
fitScene: () => Promise<boolean>;
|
|
@@ -1935,6 +1928,8 @@ type ModelViewerProps = GroupedModelViewerProps & {
|
|
|
1935
1928
|
/** Explicit format for extensionless or signed model URLs. */
|
|
1936
1929
|
modelFormat?: ModelFormat;
|
|
1937
1930
|
licenseKey: string;
|
|
1931
|
+
/** License state for application-owned loading and error interfaces. */
|
|
1932
|
+
onLicenseStatusChange?: (result: LicenseResult) => void;
|
|
1938
1933
|
hideLicenseCheckingOverlay?: boolean;
|
|
1939
1934
|
/**
|
|
1940
1935
|
* The model's interactive objects, keyed by node name. Defaults to `"auto"`:
|
|
@@ -1942,6 +1937,10 @@ type ModelViewerProps = GroupedModelViewerProps & {
|
|
|
1942
1937
|
* reported through `onObjectBindingsChange`.
|
|
1943
1938
|
*/
|
|
1944
1939
|
objectBindings?: Record<string, ObjectBinding> | "auto";
|
|
1940
|
+
/**
|
|
1941
|
+
* The selected object's binding (an `ObjectBinding`, not a three.js
|
|
1942
|
+
* `Object3D`). Pass `null` to control selection with nothing selected.
|
|
1943
|
+
*/
|
|
1945
1944
|
selectedObject?: ObjectBinding | null;
|
|
1946
1945
|
/** Transient bounds outlines for semantic comparison; never modify authored materials. */
|
|
1947
1946
|
comparisonHighlights?: readonly ComparisonHighlight[];
|
|
@@ -2157,4 +2156,4 @@ type ModelViewerModelEntry = {
|
|
|
2157
2156
|
sceneConfig?: SceneConfig;
|
|
2158
2157
|
};
|
|
2159
2158
|
|
|
2160
|
-
export {
|
|
2159
|
+
export { MATERIAL_SIDES as $, type ARExportOptions as A, type BindingEdit as B, type CameraAction as C, type ComparisonCategory as D, type ComparisonChange as E, type ComparisonHighlight as F, type ComparisonObject as G, type ComparisonStatus as H, type ConfigurationComparisonInput as I, type ConfigurationComparisonReport as J, type CustomObjectBindingDataPanelProps as K, type CustomSceneObjectsPanelProps as L, DEFAULT_SCENE_CONFIG as M, DEFAULT_SECTION_CONFIG as N, type DecalMoveTarget as O, type DeepPartial as P, type EnvironmentPreset as Q, type GlitchModeName as R, type GroupedModelViewerProps as S, type HomeCameraState as T, type InspectAssetOptions as U, type IsolatedObjectBindings as V, type IsolationActionEffect as W, type KernelSizeName as X, type LicenseResult as Y, type LicenseStatus as Z, MATERIAL_BLENDING_MODES as _, type ARHandoffOptions as a, type ProductPrice as a$, MAX_VIEWER_STATE_BYTES as a0, MODEL_VIEWER_PRESETS as a1, type MeasurementAnchor as a2, type MeasurementCollection as a3, type MeasurementPoint as a4, type MeasurementPosition as a5, type MeasurementResult as a6, type MeasurementSettings as a7, type MeasurementStatus as a8, type MeasurementTool as a9, type ObjectBindingTarget as aA, type ObjectBindingTextureChannel as aB, type ObjectBindingTextureSlot as aC, type ObjectBindingTransform as aD, type ObjectBindingType as aE, type ObjectBindingsActionEffect as aF, type ObjectPointerEvent as aG, type ObjectSurfacePoint as aH, type ObjectTransformSpace as aI, type PerformanceProfile as aJ, type ProductAppearance as aK, type ProductAvailability as aL, type ProductCheckoutContext as aM, type ProductCheckoutLink as aN, type ProductCommerceAdapter as aO, type ProductCommerceContext as aP, type ProductCommerceResult as aQ, type ProductConfiguration as aR, type ProductConfigurationIssue as aS, type ProductDefinition as aT, type ProductDefinitionWarning as aU, type ProductGroupDisplay as aV, type ProductOption as aW, type ProductOptionGroup as aX, type ProductOptionRef as aY, type ProductOptionRule as aZ, type ProductOptionState as a_, type MeasurementUnit as aa, type ModelMergeSource as ab, type ModelViewerControlsOptions as ac, type ModelViewerDecoderOptions as ad, type ModelViewerModelEntry as ae, type ModelViewerPerfOptions as af, type ModelViewerPreset as ag, type ModelViewerProps as ah, type ModelViewerTilesOptions as ai, type ModelViewerToolsOptions as aj, type ModelViewerUiOptions as ak, type ModelViewerXrOptions as al, type MouseControllerPosition as am, type ObjectActionEffect as an, type ObjectActionEvent as ao, type ObjectBinding as ap, type ObjectBindingAction as aq, type ObjectBindingCameraState as ar, type ObjectBindingDecal as as, type ObjectBindingMaterial as at, type ObjectBindingMaterialBlendingMode as au, type ObjectBindingMaterialSide as av, type ObjectBindingPatch as aw, type ObjectBindingSelector as ax, type ObjectBindingStatus as ay, type ObjectBindingStyle as az, type ARHandoffRequest as b, type ViewerCameraProps as b$, type ProductPricing as b0, type ProductSelections as b1, type ProductSku as b2, type RampTypeName as b3, type RendererBackend as b4, type SavedMeasurement as b5, type SceneAnimationClipConfig as b6, type SceneAnimationConfig as b7, type SceneAnnotationCameraView as b8, type SceneAnnotationImage as b9, type SceneSequence as bA, type SceneShadowConfig as bB, type SceneStyleColorScale as bC, type SceneStyleCondition as bD, type SceneStylePulse as bE, type SceneStyleRule as bF, type SceneWireframeConfig as bG, type SemanticComparisonOptions as bH, type SequenceCameraView as bI, type SequenceControls as bJ, type SequenceEasing as bK, type SequenceKeyframe as bL, type SequenceObjectProperty as bM, type SequencePlaybackState as bN, type SequenceTarget as bO, type SequenceTrack as bP, type SequenceValue as bQ, type SequenceVector3 as bR, type ShareableViewerState as bS, type StreamingDiagnostics as bT, type StyledObjectBindings as bU, type StyledObjectPulse as bV, type TexturePositioningControls as bW, type UseViewerCameraOptions as bX, type ViewerAnimationsProps as bY, type ViewerCameraConfig as bZ, type ViewerCameraPreset as b_, type SceneAnnotationLink as ba, type SceneAnnotationMarker as bb, type SceneBackgroundConfig as bc, type SceneCameraConfig as bd, type SceneCinematicConfig as be, type SceneCinematicWaypoint as bf, type SceneComposition as bg, type SceneConfig as bh, type SceneConfigActionEffect as bi, type SceneConfigPatch as bj, type SceneEnvironmentConfig as bk, type SceneGroundShadowConfig as bl, type SceneLight as bm, type SceneLightAttachment as bn, type SceneLightType as bo, type SceneLightingConfig as bp, type SceneModelConfig as bq, type SceneModelRenderer as br, type ScenePostProcessingConfig as bs, type SceneProductConfig as bt, type SceneSectionAxis as bu, type SceneSectionConfig as bv, type SceneSectionPlane as bw, type SceneSectionPreset as bx, type SceneSectionSettings as by, type SceneSelectionSet as bz, type ARHandoffStatus as c, type ViewerCameraState as c0, type ViewerConfiguration as c1, type ViewerEngagementEvent as c2, type ViewerIsolation as c3, type ViewerObjectInfo as c4, type ViewerProductOptions as c5, type ViewerReadyState as c6, type ViewerRuntimeStats as c7, type ViewerStateStorage as c8, type VisibilityActionEffect as c9, type XRScaleMode as ca, applyIsolation as cb, applyStyleRules as cc, colorScaleValue as cd, compareViewerConfigurations as ce, groundAsset as cf, isolatedBindingKeys as cg, material as ch, parseAssetTransform as ci, parseSelectionSets as cj, parseViewerState as ck, patchBindings as cl, patchSceneConfig as cm, prepareViewerState as cn, selectBindingKeys as co, selectBindings as cp, serializeViewerState as cq, snapAssetToGrid as cr, useViewerAnimations as cs, useViewerCamera as ct, type ARSnapshot as d, type ARSnapshotSource as e, type AnimationAction as f, type AnimationActionEffect as g, type AnimationClipInfo as h, type AnimationClipState as i, type AnimationClipStatus as j, type AnimationControls as k, type AnimationLoopMode as l, type AnimationPlayOptions as m, type AnimationPlaybackState as n, type AnnotationMarker as o, type AssetDiagnosticIssue as p, type AssetDiagnosticsReport as q, type AssetDiagnosticsSource as r, type AssetTextureDiagnostic as s, type AssetTransform as t, type CameraActionEffect as u, type CameraControllerType as v, type CaptureImageOptions as w, type CaptureVideoOptions as x, type CinematicConfig as y, type CinematicWaypoint as z };
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { a as ARHandoffOptions } from './modelViewerProps-
|
|
1
|
+
import { Y as LicenseResult, a as ARHandoffOptions } from './modelViewerProps-Ch6pIZIE.js';
|
|
2
2
|
|
|
3
3
|
/** Props of `BindingBuilder`. */
|
|
4
4
|
type BindingBuilderProps = {
|
|
5
5
|
licenseKey: string;
|
|
6
|
+
onLicenseStatusChange?: (result: LicenseResult) => void;
|
|
6
7
|
/** Configured AR preparation in the standalone editor. Default true. */
|
|
7
8
|
arHandoff?: boolean | ARHandoffOptions;
|
|
8
9
|
/** Public page running BindingBuilder/ModelViewer with AR restoration enabled. */
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { a as ARHandoffOptions } from './modelViewerProps-
|
|
1
|
+
import { Y as LicenseResult, a as ARHandoffOptions } from './modelViewerProps-HazR2IE_.mjs';
|
|
2
2
|
|
|
3
3
|
/** Props of `BindingBuilder`. */
|
|
4
4
|
type BindingBuilderProps = {
|
|
5
5
|
licenseKey: string;
|
|
6
|
+
onLicenseStatusChange?: (result: LicenseResult) => void;
|
|
6
7
|
/** Configured AR preparation in the standalone editor. Default true. */
|
|
7
8
|
arHandoff?: boolean | ARHandoffOptions;
|
|
8
9
|
/** Public page running BindingBuilder/ModelViewer with AR restoration enabled. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.bb-loadingOverlay{position:absolute;inset:0;z-index:var(--ri-ui-z-overlay);display:flex;align-items:center;justify-content:center;padding:16px;background:var(--ri-ui-panel)}.bb-root .bb-loadingOverlay{background:var(--ri-ui-scrim)}.ri-canvasArea .bb-loadingOverlay{z-index:12}.smv-canvasArea .bb-loadingOverlay{z-index:110}.bb-loadingCard{display:grid;grid-template-columns:minmax(0,1fr);gap:8px;box-sizing:border-box;width:min(100%,280px);padding:12px 14px;border:1px solid var(--ri-ui-line);border-radius:var(--ri-ui-radius-m);background:var(--ri-ui-raised);box-shadow:var(--ri-ui-shadow-menu);font-size:12px;line-height:16px;text-align:left}.bb-loadingHeader{display:flex;align-items:baseline;justify-content:space-between;gap:12px}.bb-loadingTitle{min-width:0;overflow:hidden;color:var(--ri-ui-text);font-weight:500;text-overflow:ellipsis;white-space:nowrap}.bb-loadingPercent{flex-shrink:0;color:var(--ri-ui-text-2);font-variant-numeric:tabular-nums}.bb-loadingProgress{height:3px;overflow:hidden;border-radius:2px;background:var(--ri-ui-line-strong)}.bb-loadingProgress__bar{height:100%;border-radius:inherit;background:var(--ri-ui-accent)}.bb-loadingProgress--unknown .bb-loadingProgress__bar{width:35%;animation:bb-loadingSlide 1.2s ease-in-out infinite}@keyframes bb-loadingSlide{0%{transform:translate(-100%)}to{transform:translate(290%)}}@media(prefers-reduced-motion:reduce){.bb-loadingProgress--unknown .bb-loadingProgress__bar{width:100%;opacity:.4;animation:none}}.bb-loadingMessage{color:var(--ri-ui-text-3);font-size:11px;line-height:14px;overflow-wrap:anywhere}.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:var(--ri-ui-radius-m);background:var(--ri-ui-accent);color:var(--ri-ui-on-accent);font:600 14px/1.2 Inter,Segoe UI,Helvetica,Arial,sans-serif;white-space:nowrap;cursor:pointer;transform:translate(-50%,-50%);box-shadow:none}.ri-revealButton:hover{background:var(--ri-ui-accent-hover)}.ri-revealButton:focus-visible{outline:2px solid var(--ri-ui-accent);outline-offset:3px}:where(:root){--ri-ui-gap: #0e0f11;--ri-ui-panel: #17181b;--ri-ui-canvas: #1c1c1e;--ri-ui-raised: #1f2024;--ri-ui-field: #212226;--ri-ui-field-hover: #2a2c31;--ri-ui-hover: rgba(255, 255, 255, .05);--ri-ui-selected: rgba(255, 255, 255, .1);--ri-ui-fill: #3a3c42;--ri-ui-line: #26282d;--ri-ui-line-strong: #34363c;--ri-ui-scrim: rgba(8, 9, 11, .6);--ri-ui-text: #e8e9eb;--ri-ui-text-2: #a3a6ad;--ri-ui-text-3: #7b7e86;--ri-ui-accent: #35c0dc;--ri-ui-accent-hover: #4dcce5;--ri-ui-on-accent: #04222a;--ri-ui-accent-dim: rgba(53, 192, 220, .14);--ri-ui-danger: #f0696d;--ri-ui-danger-dim: rgba(240, 105, 109, .14);--ri-ui-warning: #e8b34b;--ri-ui-warning-dim: rgba(232, 179, 75, .14);--ri-ui-success: #4cc38a;--ri-ui-success-dim: rgba(76, 195, 138, .14);--ri-ui-x: #e5484d;--ri-ui-y: #46a758;--ri-ui-z: #3e8bff;--ri-ui-font: "Inter var", Inter, -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;--ri-ui-mono: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;--ri-ui-radius-s: 4px;--ri-ui-radius-m: 6px;--ri-ui-shadow-menu: 0 12px 32px rgba(0, 0, 0, .5);--ri-ui-h-control: 24px;--ri-ui-h-row: 28px;--ri-ui-z-overlay: 10;--ri-ui-z-chrome: 20;--ri-ui-z-menu: 40;--ri-ui-z-dialog: 60;--ri-ui-z-toast: 80}:root{--ri-styles-simple-model-viewer: 1}.smv-root{--smv-panel-font-family: var(--ri-ui-font);--smv-panel-bg: var(--ri-ui-panel);--smv-panel-bg-strong: var(--ri-ui-field);--smv-panel-bg-strong-hover: var(--ri-ui-field-hover);--smv-panel-border: var(--ri-ui-line);--smv-panel-border-strong: var(--ri-ui-line-strong);--smv-panel-border-active: var(--ri-ui-accent);--smv-panel-shadow-left: none;--smv-panel-shadow-right: none;--smv-panel-text: var(--ri-ui-text);--smv-panel-text-emphasis: var(--ri-ui-text);--smv-panel-text-muted: var(--ri-ui-text-2);--smv-panel-text-subtle: var(--ri-ui-text-3);--smv-panel-surface: var(--ri-ui-field);--smv-panel-surface-hover: var(--ri-ui-field-hover);--smv-panel-surface-soft: var(--ri-ui-hover);--smv-panel-accent: var(--ri-ui-accent);--smv-panel-accent-contrast: var(--ri-ui-on-accent);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:var(--ri-ui-radius-m);background:var(--ri-ui-scrim);color:var(--smv-panel-text);box-shadow:none;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 var(--ri-ui-line);border-radius:var(--ri-ui-radius-m);background:var(--ri-ui-field);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 var(--ri-ui-line);border-radius:var(--ri-ui-radius-m);color:var(--smv-panel-text);text-align:center;box-shadow:none}.smv-upload-empty-state__icon{display:inline-flex;align-items:center;justify-content:center;width:56px;height:56px;margin-bottom:18px;border-radius:var(--ri-ui-radius-m);background:var(--ri-ui-field);color:var(--ri-ui-text-2)}.smv-upload-empty-state__body{margin:0 0 18px;color:var(--smv-panel-text-muted);font-size:12px;font-weight:600;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:var(--ri-ui-radius-m);background:var(--ri-ui-accent);color:var(--ri-ui-on-accent);font-size:12px;font-weight:600;cursor:pointer}.smv-upload-drop-overlay{position:absolute;inset:0;z-index:130;display:flex;align-items:center;justify-content:center;padding:24px;background:var(--ri-ui-scrim)}.smv-upload-drop-overlay__card{display:inline-flex;align-items:center;gap:10px;padding:16px 20px;border:1px dashed var(--ri-ui-accent);border-radius:var(--ri-ui-radius-m);background:var(--ri-ui-raised);color:var(--ri-ui-text-2);font-size:12px;font-weight:600;box-shadow:none}.ri-right-panel-wrapper{height:100%;transition:width .45s cubic-bezier(.4,0,.2,1);overflow:visible}.ri-right-panel-wrapper--open{width:300px;flex-shrink:0}.ri-right-panel-wrapper--closed{width:0;flex-shrink:0}.ri-left-panel-wrapper{height:100%;transition:width .45s cubic-bezier(.4,0,.2,1);overflow:visible;order:-1}.ri-left-panel-wrapper--open{width:280px;flex-shrink:0}.ri-left-panel-wrapper--closed{width:0;flex-shrink:0}.ri-side-panel__open-btn.ri-side-panel__open-btn--left{left:12px;right:auto}.ri-side-panel.ri-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:none}.ri-side-panel.ri-side-panel--open-left{transform:translate(0)}.ri-side-panel.ri-side-panel--closed-left{transform:translate(-100%)}.ri-env-controls{display:flex;flex-direction:column;flex:1;overflow-y:auto;font-size:12px;line-height:16px}.ri-env-section{padding-bottom:6px;border-bottom:1px solid var(--smv-panel-border)}.ri-env-section__header{display:flex;align-items:center;gap:6px;width:100%;height:32px;padding:0 12px;border:none;background:transparent;color:var(--smv-panel-text-emphasis);font:inherit;font-weight:600;cursor:pointer}.ri-env-section__header:hover{background:var(--smv-panel-surface-soft)}.ri-env-section__chevron{flex-shrink:0;color:var(--smv-panel-text-subtle);transition:transform .15s}.ri-env-section__chevron--collapsed{transform:rotate(-90deg)}.ri-env-section__body{display:flex;flex-direction:column}.ri-env-row{display:flex;align-items:center;gap:8px;min-height:28px;padding:0 12px}.ri-env-row__label{flex:0 0 52%;overflow:hidden;color:var(--smv-panel-text-muted);text-overflow:ellipsis;white-space:nowrap}.ri-env-row__value{display:flex;flex:1;align-items:center;min-width:0}.ri-env-row__value--slider{gap:8px}.ri-env-checkbox-btn{display:flex;align-items:center;padding:0;border:none;background:none;cursor:pointer}.ri-env-checkbox{display:flex;align-items:center;justify-content:center;width:14px;height:14px;border:1px solid var(--smv-panel-border-strong);border-radius:3px;background:var(--smv-panel-surface);color:var(--smv-panel-accent-contrast);transition:background .15s,border-color .15s}.ri-env-checkbox--checked{border-color:var(--smv-panel-accent);background:var(--smv-panel-accent)}.ri-env-select{box-sizing:border-box;width:100%;height:24px;padding:0 6px;border:none;border-radius:var(--ri-ui-radius-s);background:var(--smv-panel-surface);color:var(--smv-panel-text);font:inherit;text-transform:capitalize}.ri-env-select:hover{background:var(--smv-panel-surface-hover)}.ri-env-color-swatch{position:relative;display:flex;align-items:center;gap:6px;box-sizing:border-box;width:100%;height:24px;padding:0 6px;border-radius:var(--ri-ui-radius-s);background:var(--smv-panel-surface);cursor:pointer}.ri-env-color-swatch:hover{background:var(--smv-panel-surface-hover)}.ri-env-color-swatch__chip{flex-shrink:0;width:14px;height:14px;border:1px solid var(--smv-panel-border-strong);border-radius:3px}.ri-env-color-swatch__hex{color:var(--smv-panel-text);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;pointer-events:none}.ri-env-color-swatch__input{position:absolute;inset:0;width:100%;height:100%;padding:0;border:none;opacity:0;cursor:pointer}.ri-env-slider{flex:1;min-width:0;margin:0;accent-color:var(--smv-panel-accent);cursor:pointer}.ri-env-slider__value{flex-shrink:0;min-width:28px;color:var(--smv-panel-text-muted);font-size:11px;font-variant-numeric:tabular-nums;text-align:right}.ri-env-row__info{flex:1;min-width:0;overflow:hidden;color:var(--smv-panel-text);font-variant-numeric:tabular-nums;text-overflow:ellipsis;white-space:nowrap}.ri-env-footer{padding:10px 12px 12px}.ri-env-reset{display:flex;align-items:center;justify-content:center;gap:6px;width:100%;height:26px;border:1px solid var(--smv-panel-border-strong);border-radius:var(--ri-ui-radius-s);background:transparent;color:var(--smv-panel-text-muted);font:inherit;cursor:pointer}.ri-env-reset:hover{background:var(--smv-panel-surface-soft);color:var(--smv-panel-text)}.ri-env-reset:focus-visible,.ri-env-section__header:focus-visible,.ri-env-checkbox-btn:focus-visible,.ri-env-select:focus-visible,.ri-env-slider:focus-visible,.ri-env-color-swatch:focus-within{outline:2px solid var(--smv-panel-accent);outline-offset:1px}.ri-side-panel__open-btn{position:absolute;top:12px;right:12px;display:flex;align-items:center;gap:7px;padding:7px 13px;border-radius:var(--ri-ui-radius-m);border:1px solid var(--smv-panel-border-strong);background:var(--smv-panel-bg-strong);cursor:pointer;font-size:12px;font-weight:500;color:var(--smv-panel-text);z-index:190;transition:background .15s}.ri-side-panel__open-btn:hover{background:var(--smv-panel-bg-strong-hover)}.ri-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:none}.ri-side-panel--open{transform:translate(0)}.ri-side-panel--closed{transform:translate(100%)}.ri-side-panel__header{flex-shrink:0;border-bottom:1px solid var(--smv-panel-border)}.ri-side-panel__header-top{display:flex;align-items:center;gap:8px;height:40px;padding:0 8px 0 12px}.ri-side-panel__eyebrow{overflow:hidden;color:var(--smv-panel-text-emphasis);font-size:12px;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.ri-side-panel__title{flex-shrink:0;color:var(--smv-panel-text-subtle);font-size:11px;font-variant-numeric:tabular-nums}.ri-side-panel__close-btn{display:flex;flex-shrink:0;align-items:center;justify-content:center;width:24px;height:24px;margin-left:auto;border:none;border-radius:var(--ri-ui-radius-s);background:transparent;color:var(--smv-panel-text-muted);cursor:pointer;transition:background .15s,color .15s}.ri-side-panel__close-btn:hover{background:var(--smv-panel-surface-hover);color:var(--smv-panel-text)}.ri-side-panel__search-wrap{flex-shrink:0;padding:8px 12px;border-bottom:1px solid var(--smv-panel-border)}.ri-side-panel__search{box-sizing:border-box;width:100%;height:26px;padding:0 8px;border:1px solid transparent;border-radius:var(--ri-ui-radius-s);background:var(--smv-panel-surface);color:var(--smv-panel-text);font-size:12px;outline:none;transition:border-color .15s,background .15s}.ri-side-panel__search::placeholder{color:var(--smv-panel-text-subtle)}.ri-side-panel__search:focus{border-color:var(--smv-panel-border-active);background:var(--smv-panel-surface-hover)}.ri-side-panel__list{display:flex;flex-direction:column;overflow-y:auto;flex:1}.ri-side-panel__list::-webkit-scrollbar{width:4px}.ri-side-panel__list::-webkit-scrollbar-track{background:transparent}.ri-side-panel__list::-webkit-scrollbar-thumb{background:var(--smv-panel-surface-hover);border-radius:var(--ri-ui-radius-s)}.ri-side-panel__row{display:flex;align-items:center;justify-content:space-between;min-height:30px;padding:0 12px;cursor:pointer;transition:background .12s;border-bottom:1px solid var(--smv-panel-surface-soft)}.ri-side-panel__row:hover,.ri-side-panel__row--hovered{background:var(--smv-panel-surface)}.ri-side-panel__row.ri-side-panel__row--selected{background:var(--ri-ui-accent-dim);color:var(--smv-panel-text-emphasis)}.ri-side-panel__label{font-size:12px;color:var(--smv-panel-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1}.ri-side-panel__labelButton{min-width:0;padding:0;background:none;border:none;font-family:var(--ri-ui-font);text-align:left;cursor:pointer}.ri-side-panel__labelButton:focus-visible{outline:2px solid var(--smv-panel-text);outline-offset:2px;border-radius:var(--ri-ui-radius-s)}.ri-side-panel__label--hovered{color:var(--smv-panel-text-emphasis)}.ri-side-panel__vis-btn{display:flex;align-items:center;flex-shrink:0;cursor:pointer;background:none;border:none;padding:0;margin-left:10px}.ri-side-panel__checkbox{width:16px;height:16px;border-radius:var(--ri-ui-radius-s);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}.ri-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}.ri-right-panel-wrapper--open,.ri-left-panel-wrapper--open{width:0}.ri-side-panel,.ri-side-panel.ri-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:var(--ri-ui-radius-m);background:var(--ri-ui-scrim);border:1px solid var(--ri-ui-warning);color:var(--ri-ui-warning);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:var(--ri-ui-radius-s);color:var(--ri-ui-warning);cursor:pointer;transition:color .15s ease,background .15s ease}.smv-largeModelBanner__dismiss:hover{color:var(--ri-ui-warning);background:var(--ri-ui-warning-dim)}.smv-root[data-reduced-motion] *,.smv-root[data-reduced-motion] *:before,.smv-root[data-reduced-motion] *:after{transition-duration:0s;transition-delay:0s}
|
|
1
|
+
.bb-loadingOverlay{position:absolute;inset:0;z-index:var(--ri-ui-z-overlay);display:flex;align-items:center;justify-content:center;padding:16px;background:var(--ri-ui-panel)}.bb-root .bb-loadingOverlay{background:var(--ri-ui-scrim)}.ri-canvasArea .bb-loadingOverlay{z-index:12}.smv-canvasArea .bb-loadingOverlay{z-index:110}.bb-loadingCard{display:grid;grid-template-columns:minmax(0,1fr);gap:8px;box-sizing:border-box;width:min(100%,280px);padding:12px 14px;border:1px solid var(--ri-ui-line);border-radius:var(--ri-ui-radius-m);background:var(--ri-ui-raised);box-shadow:var(--ri-ui-shadow-menu);font-size:12px;line-height:16px;text-align:left}.bb-loadingHeader{display:flex;align-items:baseline;justify-content:space-between;gap:12px}.bb-loadingTitle{min-width:0;overflow:hidden;color:var(--ri-ui-text);font-weight:500;text-overflow:ellipsis;white-space:nowrap}.bb-loadingPercent{flex-shrink:0;color:var(--ri-ui-text-2);font-variant-numeric:tabular-nums}.bb-loadingProgress{height:3px;overflow:hidden;border-radius:2px;background:var(--ri-ui-line-strong)}.bb-loadingProgress__bar{height:100%;border-radius:inherit;background:var(--ri-ui-accent)}.bb-loadingProgress--unknown .bb-loadingProgress__bar{width:35%;animation:bb-loadingSlide 1.2s ease-in-out infinite}@keyframes bb-loadingSlide{0%{transform:translate(-100%)}to{transform:translate(290%)}}@media(prefers-reduced-motion:reduce){.bb-loadingProgress--unknown .bb-loadingProgress__bar{width:100%;opacity:.4;animation:none}}.bb-loadingMessage{color:var(--ri-ui-text-3);font-size:11px;line-height:14px;overflow-wrap:anywhere}.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:var(--ri-ui-radius-m);background:var(--ri-ui-accent);color:var(--ri-ui-on-accent);font:600 14px/1.2 Inter,Segoe UI,Helvetica,Arial,sans-serif;white-space:nowrap;cursor:pointer;transform:translate(-50%,-50%);box-shadow:none}.ri-revealButton:hover{background:var(--ri-ui-accent-hover)}.ri-revealButton:focus-visible{outline:2px solid var(--ri-ui-accent);outline-offset:3px}:where(:root){--ri-ui-gap: #0e0f11;--ri-ui-panel: #17181b;--ri-ui-canvas: #1c1c1e;--ri-ui-raised: #1f2024;--ri-ui-field: #212226;--ri-ui-field-hover: #2a2c31;--ri-ui-hover: rgba(255, 255, 255, .05);--ri-ui-selected: rgba(255, 255, 255, .1);--ri-ui-fill: #3a3c42;--ri-ui-line: #26282d;--ri-ui-line-strong: #34363c;--ri-ui-scrim: rgba(8, 9, 11, .6);--ri-ui-text: #e8e9eb;--ri-ui-text-2: #a3a6ad;--ri-ui-text-3: #7b7e86;--ri-ui-accent: #35c0dc;--ri-ui-accent-hover: #4dcce5;--ri-ui-on-accent: #04222a;--ri-ui-accent-dim: rgba(53, 192, 220, .14);--ri-ui-danger: #f0696d;--ri-ui-danger-dim: rgba(240, 105, 109, .14);--ri-ui-warning: #e8b34b;--ri-ui-warning-dim: rgba(232, 179, 75, .14);--ri-ui-success: #4cc38a;--ri-ui-success-dim: rgba(76, 195, 138, .14);--ri-ui-x: #e5484d;--ri-ui-y: #46a758;--ri-ui-z: #3e8bff;--ri-ui-font: "Inter var", Inter, -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;--ri-ui-mono: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;--ri-ui-radius-s: 4px;--ri-ui-radius-m: 6px;--ri-ui-shadow-menu: 0 12px 32px rgba(0, 0, 0, .5);--ri-ui-h-control: 24px;--ri-ui-h-row: 28px;--ri-ui-z-overlay: 10;--ri-ui-z-chrome: 20;--ri-ui-z-menu: 40;--ri-ui-z-dialog: 60;--ri-ui-z-toast: 80}:root{--ri-styles-simple-model-viewer: 1}.smv-root{--smv-panel-font-family: var(--ri-ui-font);--smv-panel-bg: var(--ri-ui-panel);--smv-panel-bg-strong: var(--ri-ui-field);--smv-panel-bg-strong-hover: var(--ri-ui-field-hover);--smv-panel-border: var(--ri-ui-line);--smv-panel-border-strong: var(--ri-ui-line-strong);--smv-panel-border-active: var(--ri-ui-accent);--smv-panel-shadow-left: none;--smv-panel-shadow-right: none;--smv-panel-text: var(--ri-ui-text);--smv-panel-text-emphasis: var(--ri-ui-text);--smv-panel-text-muted: var(--ri-ui-text-2);--smv-panel-text-subtle: var(--ri-ui-text-3);--smv-panel-surface: var(--ri-ui-field);--smv-panel-surface-hover: var(--ri-ui-field-hover);--smv-panel-surface-soft: var(--ri-ui-hover);--smv-panel-accent: var(--ri-ui-accent);--smv-panel-accent-contrast: var(--ri-ui-on-accent);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:var(--ri-ui-radius-m);background:var(--ri-ui-scrim);color:var(--smv-panel-text);box-shadow:none;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 var(--ri-ui-line);border-radius:var(--ri-ui-radius-m);background:var(--ri-ui-field);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 var(--ri-ui-line);border-radius:var(--ri-ui-radius-m);color:var(--smv-panel-text);text-align:center;box-shadow:none}.smv-upload-empty-state__icon{display:inline-flex;align-items:center;justify-content:center;width:56px;height:56px;margin-bottom:18px;border-radius:var(--ri-ui-radius-m);background:var(--ri-ui-field);color:var(--ri-ui-text-2)}.smv-upload-empty-state__body{margin:0 0 18px;color:var(--smv-panel-text-muted);font-size:12px;font-weight:600;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:var(--ri-ui-radius-m);background:var(--ri-ui-accent);color:var(--ri-ui-on-accent);font-size:12px;font-weight:600;cursor:pointer}.smv-upload-drop-overlay{position:absolute;inset:0;z-index:130;display:flex;align-items:center;justify-content:center;padding:24px;background:var(--ri-ui-scrim)}.smv-upload-drop-overlay__card{display:inline-flex;align-items:center;gap:10px;padding:16px 20px;border:1px dashed var(--ri-ui-accent);border-radius:var(--ri-ui-radius-m);background:var(--ri-ui-raised);color:var(--ri-ui-text-2);font-size:12px;font-weight:600;box-shadow:none}.ri-right-panel-wrapper{height:100%;transition:width .45s cubic-bezier(.4,0,.2,1);overflow:visible}.ri-right-panel-wrapper--open{width:300px;flex-shrink:0}.ri-right-panel-wrapper--closed{width:0;flex-shrink:0}.ri-left-panel-wrapper{height:100%;transition:width .45s cubic-bezier(.4,0,.2,1);overflow:visible;order:-1}.ri-left-panel-wrapper--open{width:280px;flex-shrink:0}.ri-left-panel-wrapper--closed{width:0;flex-shrink:0}.ri-side-panel__open-btn.ri-side-panel__open-btn--left{left:12px;right:auto}.ri-side-panel.ri-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:none}.ri-side-panel.ri-side-panel--open-left{transform:translate(0)}.ri-side-panel.ri-side-panel--closed-left{transform:translate(-100%)}.ri-env-controls{display:flex;flex-direction:column;flex:1;overflow-y:auto;font-size:12px;line-height:16px}.ri-env-section{padding-bottom:6px;border-bottom:1px solid var(--smv-panel-border)}.ri-env-section__header{display:flex;align-items:center;gap:6px;width:100%;height:32px;padding:0 12px;border:none;background:transparent;color:var(--smv-panel-text-emphasis);font:inherit;font-weight:600;cursor:pointer}.ri-env-section__header:hover{background:var(--smv-panel-surface-soft)}.ri-env-section__chevron{flex-shrink:0;color:var(--smv-panel-text-subtle);transition:transform .15s}.ri-env-section__chevron--collapsed{transform:rotate(-90deg)}.ri-env-section__body{display:flex;flex-direction:column}.ri-env-row{display:flex;align-items:center;gap:8px;min-height:28px;padding:0 12px}.ri-env-row__label{flex:0 0 52%;overflow:hidden;color:var(--smv-panel-text-muted);text-overflow:ellipsis;white-space:nowrap}.ri-env-row__value{display:flex;flex:1;align-items:center;min-width:0}.ri-env-row__value--slider{gap:8px}.ri-env-checkbox-btn{display:flex;align-items:center;padding:0;border:none;background:none;cursor:pointer}.ri-env-checkbox{display:flex;align-items:center;justify-content:center;width:14px;height:14px;border:1px solid var(--smv-panel-border-strong);border-radius:3px;background:var(--smv-panel-surface);color:var(--smv-panel-accent-contrast);transition:background .15s,border-color .15s}.ri-env-checkbox--checked{border-color:var(--smv-panel-accent);background:var(--smv-panel-accent)}.ri-env-select{box-sizing:border-box;width:100%;height:24px;padding:0 6px;border:none;border-radius:var(--ri-ui-radius-s);background:var(--smv-panel-surface);color:var(--smv-panel-text);font:inherit;text-transform:capitalize}.ri-env-select:hover{background:var(--smv-panel-surface-hover)}.ri-env-color-swatch{position:relative;display:flex;align-items:center;gap:6px;box-sizing:border-box;width:100%;height:24px;padding:0 6px;border-radius:var(--ri-ui-radius-s);background:var(--smv-panel-surface);cursor:pointer}.ri-env-color-swatch:hover{background:var(--smv-panel-surface-hover)}.ri-env-color-swatch__chip{flex-shrink:0;width:14px;height:14px;border:1px solid var(--smv-panel-border-strong);border-radius:3px}.ri-env-color-swatch__hex{color:var(--smv-panel-text);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;pointer-events:none}.ri-env-color-swatch__input{position:absolute;inset:0;width:100%;height:100%;padding:0;border:none;opacity:0;cursor:pointer}.ri-env-slider{flex:1;min-width:0;margin:0;accent-color:var(--smv-panel-accent);cursor:pointer}.ri-env-slider__value{flex-shrink:0;min-width:28px;color:var(--smv-panel-text-muted);font-size:11px;font-variant-numeric:tabular-nums;text-align:right}.ri-env-row__info{flex:1;min-width:0;overflow:hidden;color:var(--smv-panel-text);font-variant-numeric:tabular-nums;text-overflow:ellipsis;white-space:nowrap}.ri-env-footer{padding:10px 12px 12px}.ri-env-reset{display:flex;align-items:center;justify-content:center;gap:6px;width:100%;height:26px;border:1px solid var(--smv-panel-border-strong);border-radius:var(--ri-ui-radius-s);background:transparent;color:var(--smv-panel-text-muted);font:inherit;cursor:pointer}.ri-env-reset:hover{background:var(--smv-panel-surface-soft);color:var(--smv-panel-text)}.ri-env-reset:focus-visible,.ri-env-section__header:focus-visible,.ri-env-checkbox-btn:focus-visible,.ri-env-select:focus-visible,.ri-env-slider:focus-visible,.ri-env-color-swatch:focus-within{outline:2px solid var(--smv-panel-accent);outline-offset:1px}.ri-side-panel__open-btn{position:absolute;top:12px;right:12px;display:flex;align-items:center;gap:7px;padding:7px 13px;border-radius:var(--ri-ui-radius-m);border:1px solid var(--smv-panel-border-strong);background:var(--smv-panel-bg-strong);cursor:pointer;font-size:12px;font-weight:500;color:var(--smv-panel-text);z-index:190;transition:background .15s}.ri-side-panel__open-btn:hover{background:var(--smv-panel-bg-strong-hover)}.ri-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:none}.ri-side-panel--open{transform:translate(0)}.ri-side-panel--closed{transform:translate(100%)}.ri-side-panel__header{flex-shrink:0;border-bottom:1px solid var(--smv-panel-border)}.ri-side-panel__header-top{display:flex;align-items:center;gap:8px;height:40px;padding:0 8px 0 12px}.ri-side-panel__eyebrow{overflow:hidden;color:var(--smv-panel-text-emphasis);font-size:12px;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.ri-side-panel__title{flex-shrink:0;color:var(--smv-panel-text-subtle);font-size:11px;font-variant-numeric:tabular-nums}.ri-side-panel__close-btn{display:flex;flex-shrink:0;align-items:center;justify-content:center;width:24px;height:24px;margin-left:auto;border:none;border-radius:var(--ri-ui-radius-s);background:transparent;color:var(--smv-panel-text-muted);cursor:pointer;transition:background .15s,color .15s}.ri-side-panel__close-btn:hover{background:var(--smv-panel-surface-hover);color:var(--smv-panel-text)}.ri-side-panel__search-wrap{flex-shrink:0;padding:8px 12px;border-bottom:1px solid var(--smv-panel-border)}.ri-side-panel__search{box-sizing:border-box;width:100%;height:26px;padding:0 8px;border:1px solid transparent;border-radius:var(--ri-ui-radius-s);background:var(--smv-panel-surface);color:var(--smv-panel-text);font-size:12px;outline:none;transition:border-color .15s,background .15s}.ri-side-panel__search::placeholder{color:var(--smv-panel-text-subtle)}.ri-side-panel__search:focus{border-color:var(--smv-panel-border-active);background:var(--smv-panel-surface-hover)}.ri-side-panel__list{display:flex;flex-direction:column;overflow-y:auto;flex:1}.ri-side-panel__list::-webkit-scrollbar{width:4px}.ri-side-panel__list::-webkit-scrollbar-track{background:transparent}.ri-side-panel__list::-webkit-scrollbar-thumb{background:var(--smv-panel-surface-hover);border-radius:var(--ri-ui-radius-s)}.ri-side-panel__row{display:flex;align-items:center;justify-content:space-between;min-height:30px;padding:0 12px;cursor:pointer;transition:background .12s;border-bottom:1px solid var(--smv-panel-surface-soft)}.ri-side-panel__row:hover,.ri-side-panel__row--hovered{background:var(--smv-panel-surface)}.ri-side-panel__row.ri-side-panel__row--selected{background:var(--ri-ui-accent-dim);color:var(--smv-panel-text-emphasis)}.ri-side-panel__label{font-size:12px;color:var(--smv-panel-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1}.ri-side-panel__labelButton{min-width:0;padding:0;background:none;border:none;font-family:var(--ri-ui-font);text-align:left;cursor:pointer}.ri-side-panel__labelButton:focus-visible{outline:2px solid var(--smv-panel-text);outline-offset:2px;border-radius:var(--ri-ui-radius-s)}.ri-side-panel__label--hovered{color:var(--smv-panel-text-emphasis)}.ri-side-panel__vis-btn{display:flex;align-items:center;flex-shrink:0;cursor:pointer;background:none;border:none;padding:0;margin-left:10px}.ri-side-panel__checkbox{width:16px;height:16px;border-radius:var(--ri-ui-radius-s);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}.ri-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}.ri-right-panel-wrapper--open,.ri-left-panel-wrapper--open{width:0}.ri-side-panel,.ri-side-panel.ri-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:var(--ri-ui-radius-m);background:var(--ri-ui-scrim);border:1px solid var(--ri-ui-warning);color:var(--ri-ui-warning);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:var(--ri-ui-radius-s);color:var(--ri-ui-warning);cursor:pointer;transition:color .15s ease,background .15s ease}.smv-largeModelBanner__dismiss:hover{color:var(--ri-ui-warning);background:var(--ri-ui-warning-dim)}.smv-root[data-reduced-motion] *,.smv-root[data-reduced-motion] *:before,.smv-root[data-reduced-motion] *:after{transition-duration:0s;transition-delay:0s}.smv-reset-camera{position:absolute;bottom:12px;right:12px;z-index:3;border:1px solid var(--ri-ui-line);border-radius:6px;padding:8px 12px;background:var(--ri-ui-panel);color:var(--ri-ui-text);cursor:pointer}.smv-reset-camera:focus-visible{outline:2px solid currentColor;outline-offset:3px}.smv-load-error{position:absolute;inset:16px;margin:auto;width:min(440px,calc(100% - 32px));height:fit-content;z-index:5;padding:20px;border:1px solid var(--ri-ui-line);border-radius:10px;background:var(--ri-ui-panel);color:var(--ri-ui-text)}.smv-load-error p{margin:10px 0}.smv-load-error button{padding:8px 12px;cursor:pointer}.smv-load-error button:focus-visible{outline:2px solid currentColor;outline-offset:3px}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
|
-
import { d as ModelViewerLabels, V as ViewerLoading, g as ViewerReveal, b as ModelFormat, R as ReducedMotionSetting, f as ViewerModelInfo } from './modelFileResolver-
|
|
3
|
-
export { D as DEFAULT_MODEL_VIEWER_LABELS, M as MaterialVariantGroup, a as MaterialVariantOption, c as ModelViewerLabelKey, e as ViewerModelBounds } from './modelFileResolver-
|
|
2
|
+
import { d as ModelViewerLabels, V as ViewerLoading, g as ViewerReveal, b as ModelFormat, C as CameraLimits, R as ReducedMotionSetting, f as ViewerModelInfo } from './modelFileResolver-ChKYsF21.mjs';
|
|
3
|
+
export { D as DEFAULT_MODEL_VIEWER_LABELS, M as MaterialVariantGroup, a as MaterialVariantOption, c as ModelViewerLabelKey, e as ViewerModelBounds } from './modelFileResolver-ChKYsF21.mjs';
|
|
4
4
|
import { PresetsType } from '@react-three/drei/helpers/environment-assets';
|
|
5
5
|
|
|
6
6
|
/** How the render's colors are mapped to the screen. */
|
|
@@ -41,7 +41,16 @@ type SimpleModelViewerProps = {
|
|
|
41
41
|
zoomOnSelected?: boolean;
|
|
42
42
|
highlightOnHover?: boolean;
|
|
43
43
|
showLoadingOverlay?: boolean;
|
|
44
|
+
/**
|
|
45
|
+
* Show the built-in message with a retry button when the model fails to load.
|
|
46
|
+
* Defaults to true. Set false when `onLoadError` drives your own error UI.
|
|
47
|
+
*/
|
|
48
|
+
showLoadError?: boolean;
|
|
44
49
|
refitOnResize?: boolean;
|
|
50
|
+
/** Camera limits in scene units/degrees. Default zoom range scales to the model. */
|
|
51
|
+
cameraLimits?: CameraLimits;
|
|
52
|
+
/** Show a camera reset button. Defaults to true. */
|
|
53
|
+
showResetButton?: boolean;
|
|
45
54
|
/**
|
|
46
55
|
* Cuts motion the viewer starts on its own: auto-rotate doesn't start, and
|
|
47
56
|
* camera moves jump instead of gliding. `"user"` (default) follows the
|
|
@@ -52,6 +61,10 @@ type SimpleModelViewerProps = {
|
|
|
52
61
|
backgroundEnabled?: boolean;
|
|
53
62
|
autoRotate?: boolean;
|
|
54
63
|
envPreset?: PresetsType;
|
|
64
|
+
/** Self-hosted HDR environment; overrides envPreset without a preset request. */
|
|
65
|
+
environmentUrl?: string;
|
|
66
|
+
/** Disable environment-map loading; ambient and directional lights remain. */
|
|
67
|
+
environmentEnabled?: boolean;
|
|
55
68
|
exposure?: number;
|
|
56
69
|
ambientIntensity?: number;
|
|
57
70
|
ambientColor?: string;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
|
-
import { d as ModelViewerLabels, V as ViewerLoading, g as ViewerReveal, b as ModelFormat, R as ReducedMotionSetting, f as ViewerModelInfo } from './modelFileResolver-
|
|
3
|
-
export { D as DEFAULT_MODEL_VIEWER_LABELS, M as MaterialVariantGroup, a as MaterialVariantOption, c as ModelViewerLabelKey, e as ViewerModelBounds } from './modelFileResolver-
|
|
2
|
+
import { d as ModelViewerLabels, V as ViewerLoading, g as ViewerReveal, b as ModelFormat, C as CameraLimits, R as ReducedMotionSetting, f as ViewerModelInfo } from './modelFileResolver-ChKYsF21.js';
|
|
3
|
+
export { D as DEFAULT_MODEL_VIEWER_LABELS, M as MaterialVariantGroup, a as MaterialVariantOption, c as ModelViewerLabelKey, e as ViewerModelBounds } from './modelFileResolver-ChKYsF21.js';
|
|
4
4
|
import { PresetsType } from '@react-three/drei/helpers/environment-assets';
|
|
5
5
|
|
|
6
6
|
/** How the render's colors are mapped to the screen. */
|
|
@@ -41,7 +41,16 @@ type SimpleModelViewerProps = {
|
|
|
41
41
|
zoomOnSelected?: boolean;
|
|
42
42
|
highlightOnHover?: boolean;
|
|
43
43
|
showLoadingOverlay?: boolean;
|
|
44
|
+
/**
|
|
45
|
+
* Show the built-in message with a retry button when the model fails to load.
|
|
46
|
+
* Defaults to true. Set false when `onLoadError` drives your own error UI.
|
|
47
|
+
*/
|
|
48
|
+
showLoadError?: boolean;
|
|
44
49
|
refitOnResize?: boolean;
|
|
50
|
+
/** Camera limits in scene units/degrees. Default zoom range scales to the model. */
|
|
51
|
+
cameraLimits?: CameraLimits;
|
|
52
|
+
/** Show a camera reset button. Defaults to true. */
|
|
53
|
+
showResetButton?: boolean;
|
|
45
54
|
/**
|
|
46
55
|
* Cuts motion the viewer starts on its own: auto-rotate doesn't start, and
|
|
47
56
|
* camera moves jump instead of gliding. `"user"` (default) follows the
|
|
@@ -52,6 +61,10 @@ type SimpleModelViewerProps = {
|
|
|
52
61
|
backgroundEnabled?: boolean;
|
|
53
62
|
autoRotate?: boolean;
|
|
54
63
|
envPreset?: PresetsType;
|
|
64
|
+
/** Self-hosted HDR environment; overrides envPreset without a preset request. */
|
|
65
|
+
environmentUrl?: string;
|
|
66
|
+
/** Disable environment-map loading; ambient and directional lights remain. */
|
|
67
|
+
environmentEnabled?: boolean;
|
|
55
68
|
exposure?: number;
|
|
56
69
|
ambientIntensity?: number;
|
|
57
70
|
ambientColor?: string;
|