@liveroom-tech/react-immersive 6.1.3 → 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.
Files changed (46) hide show
  1. package/dist/{SequencesTab-66VBWTO5.mjs → SequencesTab-ODR5IGDX.mjs} +1 -1
  2. package/dist/binding-builder.css +1 -1
  3. package/dist/binding-builder.d.mts +3 -3
  4. package/dist/binding-builder.d.ts +3 -3
  5. package/dist/binding-builder.js +40 -40
  6. package/dist/binding-builder.mjs +1 -1
  7. package/dist/chunk-2CUPPOBW.mjs +3 -0
  8. package/dist/chunk-3MIILDHB.mjs +83 -0
  9. package/dist/chunk-3XZKDTB2.mjs +1 -0
  10. package/dist/chunk-7MN2TMY6.mjs +47 -0
  11. package/dist/{chunk-B75URXOE.mjs → chunk-EWNN4BBR.mjs} +1 -1
  12. package/dist/{chunk-LKKH4PO7.mjs → chunk-GXY3VML4.mjs} +1 -1
  13. package/dist/chunk-IOLT2VXU.mjs +1 -0
  14. package/dist/chunk-X4WRTDO6.mjs +50 -0
  15. package/dist/hosted.css +1 -1
  16. package/dist/hosted.d.mts +4 -4
  17. package/dist/hosted.d.ts +4 -4
  18. package/dist/hosted.js +39 -39
  19. package/dist/hosted.mjs +1 -1
  20. package/dist/index.css +1 -1
  21. package/dist/index.d.mts +4 -4
  22. package/dist/index.d.ts +4 -4
  23. package/dist/index.js +37 -37
  24. package/dist/index.mjs +1 -1
  25. package/dist/{modelFileResolver-B2B3F3d1.d.mts → modelFileResolver-ChKYsF21.d.mts} +33 -2
  26. package/dist/{modelFileResolver-B2B3F3d1.d.ts → modelFileResolver-ChKYsF21.d.ts} +33 -2
  27. package/dist/{modelViewerProps-Bo48RDq6.d.ts → modelViewerProps-Ch6pIZIE.d.ts} +30 -31
  28. package/dist/{modelViewerProps-DkvYb1GH.d.mts → modelViewerProps-HazR2IE_.d.mts} +30 -31
  29. package/dist/{publicProps-DJSccx3b.d.ts → publicProps-Cmh9JtzJ.d.ts} +2 -1
  30. package/dist/{publicProps-DN0-8tBm.d.mts → publicProps-TMARX628.d.mts} +2 -1
  31. package/dist/simple-model-viewer.css +1 -1
  32. package/dist/simple-model-viewer.d.mts +15 -2
  33. package/dist/simple-model-viewer.d.ts +15 -2
  34. package/dist/simple-model-viewer.js +5 -5
  35. package/dist/simple-model-viewer.mjs +1 -1
  36. package/dist/utils.d.mts +4 -4
  37. package/dist/utils.d.ts +4 -4
  38. package/dist/utils.js +3 -3
  39. package/dist/utils.mjs +1 -1
  40. package/package.json +7 -4
  41. package/dist/chunk-4RYMXBK6.mjs +0 -47
  42. package/dist/chunk-5P7ETEAN.mjs +0 -50
  43. package/dist/chunk-EC542N4J.mjs +0 -1
  44. package/dist/chunk-JK7GRGRG.mjs +0 -1
  45. package/dist/chunk-U3BQMOC3.mjs +0 -83
  46. package/dist/chunk-VMYNX63T.mjs +0 -3
@@ -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-B2B3F3d1.mjs';
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
- /** Named views that can be opened with goToPreset. */
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 { MAX_VIEWER_STATE_BYTES as $, type ARExportOptions as A, type BindingEdit as B, type CameraAction as C, type CinematicWaypoint as D, type ComparisonCategory as E, type ComparisonChange as F, type ComparisonHighlight as G, type ComparisonObject as H, type ComparisonStatus as I, type ConfigurationComparisonInput as J, type ConfigurationComparisonReport as K, type CustomObjectBindingDataPanelProps as L, type CustomSceneObjectsPanelProps as M, DEFAULT_SCENE_CONFIG as N, DEFAULT_SECTION_CONFIG as O, type DecalMoveTarget as P, type DeepPartial as Q, type EnvironmentPreset as R, type GlitchModeName as S, type GroupedModelViewerProps as T, type HomeCameraState as U, type InspectAssetOptions as V, type IsolatedObjectBindings as W, type IsolationActionEffect as X, type KernelSizeName as Y, MATERIAL_BLENDING_MODES as Z, MATERIAL_SIDES as _, type ARHandoffOptions as a, type ProductPricing as a$, MODEL_VIEWER_PRESETS as a0, type MeasurementAnchor as a1, type MeasurementCollection as a2, type MeasurementPoint as a3, type MeasurementPosition as a4, type MeasurementResult as a5, type MeasurementSettings as a6, type MeasurementStatus as a7, type MeasurementTool as a8, type MeasurementUnit as a9, type ObjectBindingTextureChannel as aA, type ObjectBindingTextureSlot as aB, type ObjectBindingTransform as aC, type ObjectBindingType as aD, type ObjectBindingsActionEffect as aE, type ObjectPointerEvent as aF, type ObjectSurfacePoint as aG, type ObjectTransformSpace as aH, type PerformanceProfile as aI, type ProductAppearance as aJ, type ProductAvailability as aK, type ProductCheckoutContext as aL, type ProductCheckoutLink as aM, type ProductCommerceAdapter as aN, type ProductCommerceContext as aO, type ProductCommerceResult as aP, type ProductConfiguration as aQ, type ProductConfigurationIssue as aR, type ProductDefinition as aS, type ProductDefinitionWarning as aT, type ProductGroupDisplay as aU, type ProductOption as aV, type ProductOptionGroup as aW, type ProductOptionRef as aX, type ProductOptionRule as aY, type ProductOptionState as aZ, type ProductPrice as a_, type ModelMergeSource as aa, type ModelViewerControlsOptions as ab, type ModelViewerDecoderOptions as ac, type ModelViewerModelEntry as ad, type ModelViewerPerfOptions as ae, type ModelViewerPreset as af, type ModelViewerProps as ag, type ModelViewerTilesOptions as ah, type ModelViewerToolsOptions as ai, type ModelViewerUiOptions as aj, type ModelViewerXrOptions as ak, type MouseControllerPosition as al, type ObjectActionEffect as am, type ObjectActionEvent as an, type ObjectBinding as ao, type ObjectBindingAction as ap, type ObjectBindingCameraState as aq, type ObjectBindingDecal as ar, type ObjectBindingMaterial as as, type ObjectBindingMaterialBlendingMode as at, type ObjectBindingMaterialSide as au, type ObjectBindingPatch as av, type ObjectBindingSelector as aw, type ObjectBindingStatus as ax, type ObjectBindingStyle as ay, type ObjectBindingTarget as az, type ARHandoffRequest as b, type ViewerCameraState as b$, type ProductSelections as b0, type ProductSku as b1, type RampTypeName as b2, type RendererBackend as b3, type SavedMeasurement as b4, type SceneAnimationClipConfig as b5, type SceneAnimationConfig as b6, type SceneAnnotationCameraView as b7, type SceneAnnotationImage as b8, type SceneAnnotationLink as b9, type SceneShadowConfig as bA, type SceneStyleColorScale as bB, type SceneStyleCondition as bC, type SceneStylePulse as bD, type SceneStyleRule as bE, type SceneWireframeConfig as bF, type SemanticComparisonOptions as bG, type SequenceCameraView as bH, type SequenceControls as bI, type SequenceEasing as bJ, type SequenceKeyframe as bK, type SequenceObjectProperty as bL, type SequencePlaybackState as bM, type SequenceTarget as bN, type SequenceTrack as bO, type SequenceValue as bP, type SequenceVector3 as bQ, type ShareableViewerState as bR, type StreamingDiagnostics as bS, type StyledObjectBindings as bT, type StyledObjectPulse as bU, type TexturePositioningControls as bV, type UseViewerCameraOptions as bW, type ViewerAnimationsProps as bX, type ViewerCameraConfig as bY, type ViewerCameraPreset as bZ, type ViewerCameraProps as b_, type SceneAnnotationMarker as ba, type SceneBackgroundConfig as bb, type SceneCameraConfig as bc, type SceneCinematicConfig as bd, type SceneCinematicWaypoint as be, type SceneComposition as bf, type SceneConfig as bg, type SceneConfigActionEffect as bh, type SceneConfigPatch as bi, type SceneEnvironmentConfig as bj, type SceneGroundShadowConfig as bk, type SceneLight as bl, type SceneLightAttachment as bm, type SceneLightType as bn, type SceneLightingConfig as bo, type SceneModelConfig as bp, type SceneModelRenderer as bq, type ScenePostProcessingConfig as br, type SceneProductConfig as bs, type SceneSectionAxis as bt, type SceneSectionConfig as bu, type SceneSectionPlane as bv, type SceneSectionPreset as bw, type SceneSectionSettings as bx, type SceneSelectionSet as by, type SceneSequence as bz, type ARHandoffStatus as c, type ViewerConfiguration as c0, type ViewerEngagementEvent as c1, type ViewerIsolation as c2, type ViewerObjectInfo as c3, type ViewerProductOptions as c4, type ViewerReadyState as c5, type ViewerRuntimeStats as c6, type ViewerStateStorage as c7, type VisibilityActionEffect as c8, type XRScaleMode as c9, applyIsolation as ca, applyStyleRules as cb, colorScaleValue as cc, compareViewerConfigurations as cd, groundAsset as ce, isolatedBindingKeys as cf, material as cg, parseAssetTransform as ch, parseSelectionSets as ci, parseViewerState as cj, patchBindings as ck, patchSceneConfig as cl, prepareViewerState as cm, selectBindingKeys as cn, selectBindings as co, serializeViewerState as cp, snapAssetToGrid as cq, useViewerAnimations as cr, useViewerCamera as cs, 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 CameraLimits as w, type CaptureImageOptions as x, type CaptureVideoOptions as y, type CinematicConfig as z };
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-Bo48RDq6.js';
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-DkvYb1GH.mjs';
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-B2B3F3d1.mjs';
3
- export { D as DEFAULT_MODEL_VIEWER_LABELS, M as MaterialVariantGroup, a as MaterialVariantOption, c as ModelViewerLabelKey, e as ViewerModelBounds } from './modelFileResolver-B2B3F3d1.mjs';
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-B2B3F3d1.js';
3
- export { D as DEFAULT_MODEL_VIEWER_LABELS, M as MaterialVariantGroup, a as MaterialVariantOption, c as ModelViewerLabelKey, e as ViewerModelBounds } from './modelFileResolver-B2B3F3d1.js';
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;