@babylonjs/inspector 9.26.0 → 9.26.2

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 (41) hide show
  1. package/lib/browser-CANgtOiM.js.map +1 -1
  2. package/lib/components/properties/boundProperty.d.ts +27 -0
  3. package/lib/components/properties/metadataProperties.d.ts +5 -1
  4. package/lib/contexts/propertyContext.d.ts +1 -1
  5. package/lib/{extensionsListService-DVpZa3gV.js → extensionsListService-GhHoWP21.js} +4 -4
  6. package/lib/{extensionsListService-DVpZa3gV.js.map → extensionsListService-GhHoWP21.js.map} +1 -1
  7. package/lib/gif-5DieAkSF.js.map +1 -1
  8. package/lib/{index-C5ggNiyY.js → index-DHNtmMzT.js} +282 -91
  9. package/lib/index-DHNtmMzT.js.map +1 -0
  10. package/lib/index.js +4 -4
  11. package/lib/lite/components/properties/cameraProperties.d.ts +11 -0
  12. package/lib/lite/components/properties/lightProperties.d.ts +33 -0
  13. package/lib/lite/components/properties/sceneNodeProperties.d.ts +8 -0
  14. package/lib/lite/{extensionsListService-xgITNk9y.js → extensionsListService-D1JivcAu.js} +2 -4
  15. package/lib/lite/{extensionsListService-xgITNk9y.js.map → extensionsListService-D1JivcAu.js.map} +1 -1
  16. package/lib/lite/{index-DmQN3QdU.js → index-D8vFySa7.js} +1616 -213
  17. package/lib/lite/index-D8vFySa7.js.map +1 -0
  18. package/lib/lite/index.js +2 -4
  19. package/lib/lite/index.js.map +1 -1
  20. package/lib/lite/renderingLayerUtils.d.ts +12 -0
  21. package/lib/lite/sceneEntityUtils.d.ts +19 -0
  22. package/lib/lite/services/panes/properties/cameraPropertiesService.d.ts +3 -0
  23. package/lib/lite/services/panes/properties/lightPropertiesService.d.ts +3 -0
  24. package/lib/lite/services/panes/properties/sceneNodePropertiesService.d.ts +3 -0
  25. package/lib/lite/services/panes/properties/shadowGeneratorPropertiesService.d.ts +4 -0
  26. package/lib/lite/services/panes/properties/spriteLayerPropertiesService.d.ts +4 -0
  27. package/lib/lite/services/panes/scene/cameraExplorerService.d.ts +7 -0
  28. package/lib/lite/services/panes/scene/lightExplorerService.d.ts +6 -0
  29. package/lib/lite/services/panes/scene/meshExplorerService.d.ts +4 -1
  30. package/lib/lite/services/panes/scene/renderingLayerExplorerService.d.ts +24 -0
  31. package/lib/lite/services/panes/scene/sceneSelectionUtils.d.ts +3 -0
  32. package/lib/lite/services/panes/scene/shadowGeneratorExplorerService.d.ts +6 -0
  33. package/lib/lite/services/panes/scene/spriteLayerExplorerService.d.ts +1 -0
  34. package/lib/lite/services/panes/scene/textLayerExplorerService.d.ts +1 -3
  35. package/lib/{quickCreateToolsService-0rVa_CjZ.js → quickCreateToolsService-COtk9VE9.js} +5 -5
  36. package/lib/{quickCreateToolsService-0rVa_CjZ.js.map → quickCreateToolsService-COtk9VE9.js.map} +1 -1
  37. package/lib/{reflectorService-pyDncbYA.js → reflectorService-fcsir8s0.js} +5 -5
  38. package/lib/{reflectorService-pyDncbYA.js.map → reflectorService-fcsir8s0.js.map} +1 -1
  39. package/package.json +1 -1
  40. package/lib/index-C5ggNiyY.js.map +0 -1
  41. package/lib/lite/index-DmQN3QdU.js.map +0 -1
@@ -4,16 +4,14 @@ import { createContext, forwardRef, useContext, useState, useCallback, Component
4
4
  import { tokens, makeStyles, Tooltip as Tooltip$1, Button as Button$1, Spinner, useFluent, Accordion as Accordion$1, AccordionHeader, Subtitle2Stronger, AccordionPanel, Divider, MessageBar as MessageBar$1, MessageBarBody, AccordionItem, SearchBox as SearchBox$1, Portal, mergeClasses, createLightTheme, createDarkTheme, createDOMRenderer, FluentProvider, RendererProvider, TeachingPopover, TeachingPopoverSurface, TeachingPopoverHeader, TeachingPopoverBody, useId, useToastController, Toast, ToastTitle, Toaster, Menu, MenuTrigger, SplitButton, MenuPopover, MenuList, MenuItem, Toolbar as Toolbar$1, ToolbarRadioButton, MenuGroup, MenuGroupHeader, Link as Link$1, Caption1, Body1, ToggleButton as ToggleButton$1, InfoLabel as InfoLabel$1, Body1Strong, Checkbox as Checkbox$1, Switch as Switch$1, Dropdown as Dropdown$1, Option, useMergedRefs, Input, Slider as Slider$1, MenuItemRadio, Dialog as Dialog$1, DialogSurface, DialogBody, DialogTitle, DialogContent, DialogActions, List as List$1, ListItem, useComboboxFilter, Combobox, MessageBarTitle, Popover as Popover$1, PopoverTrigger, PopoverSurface, Field, Textarea as Textarea$1, PresenceBadge, treeItemLevelToken, typographyStyles, FlatTree, FlatTreeItem, MenuDivider, TreeItemLayout, MenuItemCheckbox, ColorPicker, ColorArea, ColorSlider, AlphaSlider, ColorSwatch, Badge, Label, Subtitle2, ToolbarButton, ToolbarDivider, DialogTrigger } from '@fluentui/react-components';
5
5
  import { ErrorCircleRegular, EyeFilled, EyeOffRegular, CheckmarkFilled, EditRegular, FilterRegular, PinFilled, PinRegular, ArrowCircleUpRegular, PanelLeftExpandRegular, PanelRightExpandRegular, PanelLeftContractRegular, PanelRightContractRegular, PictureInPictureEnterRegular, MoreHorizontalRegular, LayoutColumnTwoFocusLeftFilled, LayoutColumnTwoSplitLeftFocusTopLeftFilled, LayoutColumnTwoSplitLeftFocusBottomLeftFilled, LayoutColumnTwoFocusRightFilled, LayoutColumnTwoSplitRightFocusTopRightFilled, LayoutColumnTwoSplitRightFocusBottomRightFilled, SettingsRegular, ChevronCircleRight16Regular, ChevronCircleRight20Regular, ChevronCircleDown16Regular, ChevronCircleDown20Regular, Copy16Regular, CopyRegular, DocumentTextRegular, ArrowBidirectionalUpDownFilled, ArrowClockwiseRegular, WeatherSunnyRegular, WeatherMoonRegular, InfoRegular, WarningRegular, CheckmarkCircleRegular, DeleteFilled, LinkDismissRegular, LinkEditRegular, AddRegular, DeleteRegular, ArrowUploadRegular, createFluentIcon, TextSortAscendingRegular, GlobeRegular, ArrowExpandAllRegular, ArrowCollapseAllRegular, ChevronRightRegular, CubeTreeRegular, BugRegular, ArrowDownloadRegular, StopRegular, RecordRegular, DataBarHorizontalRegular, WrenchRegular, PlugDisconnectedRegular, PlugConnectedRegular, PlugConnectedCheckmarkRegular, ArrowRotateClockwiseRegular, ArrowExpandRegular, SelectObjectRegular, CubeRegular, CameraRegular, SaveRegular, LinkRegular, ArrowSyncRegular, FullScreenMaximizeRegular, ChevronDownRegular, CircleSmallFilled, PreviousRegular, ArrowPreviousRegular, TriangleLeftRegular, RecordStopRegular, PlayRegular, ArrowNextRegular, NextRegular, PauseRegular, ArrowUndoRegular, BracesRegular, BracesDismiss16Regular, EyeRegular, CloudArrowUpRegular, CloudArrowDownRegular, EyeOffFilled, ArrowMoveFilled, StopFilled, PlayFilled, LockOpenRegular, LockClosedRegular, ResizeRegular, ChevronUpRegular, ArrowResetRegular, CircleHalfFillRegular, EyedropperRegular, PaintBucketRegular, InkStrokeRegular, StackRegular, FilmstripRegular, PauseFilled, WeatherSunnyLowFilled, HeadphonesSoundWaveRegular, ArrowEnterUpRegular, SoundWaveCircleRegular, SoundWaveCircleFilled, CatchUpRegular, LayerRegular, FlowchartRegular, FrameRegular, AppGenericRegular, RectangleLandscapeRegular, BorderOutsideRegular, BorderNoneRegular, MyLocationRegular, BubbleMultipleRegular, LightbulbRegular, VideoFilled, VideoRegular, FlashlightRegular, FlashlightOffRegular, DropRegular, BlurRegular, PipelineRegular, PersonWalkingRegular, DataLineRegular, PersonSquareRegular, LayerDiagonalPersonRegular, ImageEditRegular, ImageRegular, TargetRegular, DismissRegular, PersonFeedbackRegular, BranchRegular } from '@fluentui/react-icons';
6
6
  import { DataStorage } from '@babylonjs/core/Misc/dataStorage.js';
7
- import { Logger } from '@babylonjs/core/Misc/logger.js';
8
7
  import { AsyncLock } from '@babylonjs/core/Misc/asyncLock.js';
9
8
  import { Deferred } from '@babylonjs/core/Misc/deferred.js';
10
9
  import { useResizeHandle } from '@fluentui-contrib/react-resize-handle';
11
10
  import { Collapse as Collapse$1, Fade } from '@fluentui/react-motion-components-preview';
12
- import { GetClassName } from '@babylonjs/core/Misc/typeStore.js';
13
- import { Clamp } from '@babylonjs/core/Maths/math.scalar.functions.js';
11
+ import { Logger } from '@babylonjs/core/Misc/logger.js';
14
12
  import { createRoot } from 'react-dom/client';
15
13
  import { Color3, Color4 } from '@babylonjs/core/Maths/math.color.js';
16
- import { Vector3, Quaternion, Matrix, Vector2, Vector4, TmpVectors } from '@babylonjs/core/Maths/math.vector.js';
14
+ import { Vector3, Quaternion, Matrix, Vector2, TmpVectors } from '@babylonjs/core/Maths/math.vector.js';
17
15
  import { UniqueIdGenerator } from '@babylonjs/core/Misc/uniqueIdGenerator.js';
18
16
  import { VirtualizerScrollView } from '@fluentui-contrib/react-virtualizer';
19
17
  import { FontAsset } from '@babylonjs/addons/msdfText/fontAsset.js';
@@ -106,6 +104,7 @@ import { SkeletonViewer } from '@babylonjs/core/Debug/skeletonViewer.js';
106
104
  import { VertexBuffer } from '@babylonjs/core/Meshes/buffer.js';
107
105
  import { CreateLineSystem } from '@babylonjs/core/Meshes/Builders/linesBuilder.js';
108
106
  import { InstancedMesh } from '@babylonjs/core/Meshes/instancedMesh.js';
107
+ import { MeshBlendingRadiusClass, UnpackMeshBlendingTag, PackMeshBlendingTag } from '@babylonjs/core/Meshes/meshBlendingTag.js';
109
108
  import { RenderingManager } from '@babylonjs/core/Rendering/renderingManager.js';
110
109
  import '@babylonjs/core/Rendering/edgesRenderer.js';
111
110
  import '@babylonjs/core/Rendering/outlineRenderer.js';
@@ -140,6 +139,7 @@ import { MinTemperatureKelvin, MaxTintMagnitude } from '@babylonjs/core/Maths/co
140
139
  import { Skeleton } from '@babylonjs/core/Bones/skeleton.js';
141
140
  import { Sprite } from '@babylonjs/core/Sprites/sprite.js';
142
141
  import { SpriteManager } from '@babylonjs/core/Sprites/spriteManager.js';
142
+ import { Clamp } from '@babylonjs/core/Maths/math.scalar.functions.js';
143
143
  import { GetTextureDataAsync, WhenTextureReadyAsync } from '@babylonjs/core/Misc/textureTools.js';
144
144
  import { KeyboardEventTypes } from '@babylonjs/core/Events/keyboardEvents.js';
145
145
  import { PointerEventTypes } from '@babylonjs/core/Events/pointerEvents.js';
@@ -573,9 +573,32 @@ function useKeyState(key, options) {
573
573
  // Storage Helpers
574
574
  // ============================================================================
575
575
  const STORAGE_KEY_ROOT = "Babylon/Accordion";
576
+ const InMemoryStorage = new Map();
577
+ // eslint-disable-next-line no-console
578
+ const Warn = (message) => globalThis.console?.warn?.(message);
579
+ const ReadStoredString = (key) => {
580
+ try {
581
+ return globalThis.localStorage?.getItem(key) ?? InMemoryStorage.get(key) ?? "";
582
+ }
583
+ catch {
584
+ return InMemoryStorage.get(key) ?? "";
585
+ }
586
+ };
587
+ const WriteStoredString = (key, value) => {
588
+ try {
589
+ if (globalThis.localStorage) {
590
+ globalThis.localStorage.setItem(key, value);
591
+ return;
592
+ }
593
+ }
594
+ catch {
595
+ // Fall through to in-memory persistence when localStorage is unavailable.
596
+ }
597
+ InMemoryStorage.set(key, value);
598
+ };
576
599
  const ReadFromStorage = (path, initial) => {
577
600
  try {
578
- const stored = DataStorage.ReadString(`${STORAGE_KEY_ROOT}/${path}`, "");
601
+ const stored = ReadStoredString(`${STORAGE_KEY_ROOT}/${path}`);
579
602
  return stored ? JSON.parse(stored) : initial;
580
603
  }
581
604
  catch {
@@ -583,7 +606,7 @@ const ReadFromStorage = (path, initial) => {
583
606
  }
584
607
  };
585
608
  const WriteToStorage = (path, data) => {
586
- DataStorage.WriteString(`${STORAGE_KEY_ROOT}/${path}`, JSON.stringify(data));
609
+ WriteStoredString(`${STORAGE_KEY_ROOT}/${path}`, JSON.stringify(data));
587
610
  };
588
611
  // ============================================================================
589
612
  // Reducer
@@ -741,7 +764,7 @@ function useAccordionSectionItemState(props) {
741
764
  const prevItemIdRef = useRef(itemId);
742
765
  useEffect(() => {
743
766
  if (accordionCtx && prevItemIdRef.current !== itemId) {
744
- Logger.Warn(`Accordion: The uniqueId "${itemId}" in section "${sectionCtx?.sectionId}" has changed from "${prevItemIdRef.current}". ` +
767
+ Warn(`Accordion: The uniqueId "${itemId}" in section "${sectionCtx?.sectionId}" has changed from "${prevItemIdRef.current}". ` +
745
768
  `Each item must have a unique, stable ID for pin/hide persistence to work correctly.`);
746
769
  }
747
770
  prevItemIdRef.current = itemId;
@@ -753,7 +776,7 @@ function useAccordionSectionItemState(props) {
753
776
  }
754
777
  const { registeredItemIds } = accordionCtx;
755
778
  if (registeredItemIds.has(itemUniqueId)) {
756
- Logger.Warn(`Accordion: Duplicate uniqueId "${itemId}" detected in section "${sectionCtx?.sectionId}". ` +
779
+ Warn(`Accordion: Duplicate uniqueId "${itemId}" detected in section "${sectionCtx?.sectionId}". ` +
757
780
  `Each item must have a unique ID within its section for pin/hide persistence to work correctly.`);
758
781
  }
759
782
  registeredItemIds.set(itemUniqueId, itemLabel ?? itemId);
@@ -3363,7 +3386,11 @@ function copyCommandToClipboard(strCommand) {
3363
3386
  // babylonNamespace is either "" (ES6) or "BABYLON."
3364
3387
  // eslint-disable-next-line @typescript-eslint/naming-convention
3365
3388
  function getClassNameWithNamespace(obj) {
3366
- let className = GetClassName(obj);
3389
+ if ((typeof obj !== "object" && typeof obj !== "function") || obj === null) {
3390
+ return { className: "Unknown", babylonNamespace: "" };
3391
+ }
3392
+ const candidate = obj;
3393
+ let className = candidate.getClassName?.() ?? candidate.constructor?.name ?? "Unknown";
3367
3394
  if (className.includes("BABYLON.")) {
3368
3395
  className = className.split("BABYLON.")[1];
3369
3396
  }
@@ -3976,7 +4003,7 @@ const SpinButton = forwardRef((props, ref) => {
3976
4003
  return !invalid;
3977
4004
  }, [min, max, props.validator, props.forceInt]);
3978
4005
  // Constrain a value to the valid range by clamping to [min, max].
3979
- const constrainValue = useCallback((v) => Clamp(v, min ?? -Infinity, max ?? Infinity), [min, max]);
4006
+ const constrainValue = useCallback((v) => Math.min(max ?? Infinity, Math.max(min ?? -Infinity, v)), [min, max]);
3980
4007
  const tryCommitValue = useCallback((currVal) => {
3981
4008
  if (validateValue(currVal) && currVal !== lastCommittedValue.current) {
3982
4009
  lastCommittedValue.current = currVal;
@@ -5269,7 +5296,7 @@ function MakeModularTool(options) {
5269
5296
  }
5270
5297
  // Register the extension list service (for browsing/installing extensions) if extension feeds are provided.
5271
5298
  if (extensionFeeds.length > 0) {
5272
- const { ExtensionListServiceDefinition } = await import('./extensionsListService-DVpZa3gV.js');
5299
+ const { ExtensionListServiceDefinition } = await import('./extensionsListService-GhHoWP21.js');
5273
5300
  serviceContainer.addService(ExtensionListServiceDefinition);
5274
5301
  }
5275
5302
  // Register all external services (that make up a unique tool).
@@ -6665,6 +6692,45 @@ function ComputedProperty(props) {
6665
6692
  const value = useWatchedValue(target, getValue);
6666
6693
  return jsx(Component, { ...{ ...rest, value } });
6667
6694
  }
6695
+ /**
6696
+ * Renders an editable property-line component for a value derived from a target.
6697
+ *
6698
+ * This is useful for method-backed values, readonly object references, or values whose UI
6699
+ * representation differs from their stored representation. The getter follows the Preferred
6700
+ * Watch Mode, while the setter owns the runtime-specific write-back.
6701
+ * @param props The target, derived getter, write-back function, and property-line component props.
6702
+ * @returns The editable derived property-line component.
6703
+ */
6704
+ function DerivedProperty(props) {
6705
+ const {
6706
+ // eslint-disable-next-line @typescript-eslint/naming-convention
6707
+ component: Component, target, getValue, setValue, propertyPath, getPropertyOwner, propertyKey, ...rest } = props;
6708
+ const value = useWatchedValue(target, getValue);
6709
+ const notifyPropertyChanged = usePropertyChangedNotifier();
6710
+ const getStoredProperty = () => {
6711
+ if (!getPropertyOwner || propertyKey === undefined) {
6712
+ return undefined;
6713
+ }
6714
+ const propertyTarget = getPropertyOwner(target);
6715
+ return {
6716
+ propertyTarget,
6717
+ value: Reflect.get(propertyTarget, propertyKey),
6718
+ };
6719
+ };
6720
+ return (jsx(Component, { ...{
6721
+ ...(propertyPath ? { onCopy: () => GetOnCopyString(getStoredProperty()?.value, propertyPath) } : {}),
6722
+ ...rest,
6723
+ value,
6724
+ onChange: (changedValue) => {
6725
+ const oldStoredProperty = getStoredProperty();
6726
+ setValue(target, changedValue);
6727
+ const newStoredProperty = getStoredProperty();
6728
+ if (newStoredProperty && oldStoredProperty && propertyKey !== undefined) {
6729
+ notifyPropertyChanged(newStoredProperty.propertyTarget, propertyKey, oldStoredProperty.value, newStoredProperty.value);
6730
+ }
6731
+ },
6732
+ } }));
6733
+ }
6668
6734
  function GetOnCopyString(value, propertyPath) {
6669
6735
  const valueStr = GenerateCopyString(value);
6670
6736
  return `globalThis.debugNode.${propertyPath} = ${valueStr};`;
@@ -10368,14 +10434,14 @@ const DefaultInspectorExtensionFeed = new BuiltInsExtensionFeed("Inspector", [
10368
10434
  description: "Adds a new panel for easy creation of various Babylon assets. This is a WIP extension...expect changes!",
10369
10435
  keywords: ["creation", "tools"],
10370
10436
  ...BabylonWebResources,
10371
- getExtensionModuleAsync: async () => await import('./quickCreateToolsService-0rVa_CjZ.js'),
10437
+ getExtensionModuleAsync: async () => await import('./quickCreateToolsService-COtk9VE9.js'),
10372
10438
  },
10373
10439
  {
10374
10440
  name: "Reflector",
10375
10441
  description: "Sends a serialized snapshot of the scene to the Babylon.js Sandbox through the Reflector Bridge. The snapshot is sent once and is read-only, so it does not stay in sync with this scene.",
10376
10442
  keywords: ["reflector", "bridge", "snapshot", "sync", "sandbox", "tools"],
10377
10443
  ...BabylonWebResources,
10378
- getExtensionModuleAsync: async () => await import('./reflectorService-pyDncbYA.js'),
10444
+ getExtensionModuleAsync: async () => await import('./reflectorService-fcsir8s0.js'),
10379
10445
  },
10380
10446
  ]);
10381
10447
 
@@ -11292,97 +11358,209 @@ function _ShowInspector(target, options, configuration) {
11292
11358
  }
11293
11359
 
11294
11360
  /**
11295
- * Reusable component which renders a color property line containing a label, colorPicker popout, and expandable RGBA values
11296
- * The expandable RGBA values are synced sliders that allow the user to modify the color's RGBA values directly
11297
- * @param props - PropertyLine props, replacing children with a color object so that we can properly display the color
11298
- * @returns Component wrapping a colorPicker component with a property line
11361
+ * Runtime-neutral controlled color editor with RGB or RGBA sliders and an injected picker.
11362
+ * @param props The controlled color, runtime adapter, and property-line presentation.
11363
+ * @returns The color property line.
11299
11364
  */
11300
- const ColorPropertyLine = forwardRef((props, ref) => {
11301
- ColorPropertyLine.displayName = "ColorPropertyLine";
11302
- const [color, setColor] = useState(props.value);
11365
+ const ControlledColorPropertyLine = (props) => {
11366
+ const { adapter, value, onChange, propertyLineRef } = props;
11367
+ const [currentValue, setCurrentValue] = useState(value);
11303
11368
  useEffect(() => {
11304
- setColor(props.value);
11305
- }, [props.value]);
11306
- const onSliderChange = (value, key) => {
11307
- let newColor;
11308
- if (key === "a") {
11309
- newColor = Color4.FromColor3(color, value);
11310
- }
11311
- else {
11312
- newColor = color.clone();
11313
- newColor[key] = value / 255;
11314
- }
11315
- setColor(newColor); // Create a new object to trigger re-render
11316
- props.onChange(newColor);
11369
+ setCurrentValue(value);
11370
+ }, [value]);
11371
+ const handleChange = (newValue) => {
11372
+ setCurrentValue(newValue);
11373
+ onChange(newValue);
11317
11374
  };
11318
- const onColorPickerChange = (newColor) => {
11319
- setColor(newColor);
11320
- props.onChange(newColor);
11375
+ const onSliderChange = (componentValue, component) => {
11376
+ const color = adapter.getColor(currentValue);
11377
+ handleChange(adapter.createColor({
11378
+ ...color,
11379
+ [component]: component === "a" ? componentValue : componentValue / 255,
11380
+ }, currentValue));
11321
11381
  };
11322
- return (jsx(PropertyLine, { ref: ref, ...props, expandedContent: color ? jsx(ColorSliders, { color: color, onSliderChange: onSliderChange }) : undefined, children: jsx(ColorPickerPopup, { ...props, onChange: onColorPickerChange, value: color }) }));
11323
- });
11324
- const ColorSliders = ({ color, onSliderChange }) => (jsxs(Fragment, { children: [jsx(SyncedSliderPropertyLine, { label: "R", value: color.r * 255, min: 0, max: 255, onChange: (value) => onSliderChange(value, "r") }), jsx(SyncedSliderPropertyLine, { label: "G", value: color.g * 255, min: 0, max: 255, onChange: (value) => onSliderChange(value, "g") }), jsx(SyncedSliderPropertyLine, { label: "B", value: color.b * 255, min: 0, max: 255, onChange: (value) => onSliderChange(value, "b") }), color instanceof Color4 && jsx(SyncedSliderPropertyLine, { label: "A", value: color.a, min: 0, max: 1, step: 0.01, onChange: (value) => onSliderChange(value, "a") })] }));
11382
+ const color = adapter.getColor(currentValue);
11383
+ return (jsx(PropertyLine, { ref: propertyLineRef, ...props, expandedContent: jsx(ColorSliders, { color: color, onSliderChange: onSliderChange }), children: createElement(adapter.picker, {
11384
+ value: currentValue,
11385
+ onChange: handleChange,
11386
+ isLinearMode: props.isLinearMode,
11387
+ disabled: props.disabled,
11388
+ className: props.className,
11389
+ style: props.style,
11390
+ title: props.title,
11391
+ }) }));
11392
+ };
11393
+ const ColorSliders = (props) => {
11394
+ const { color, onSliderChange } = props;
11395
+ return (jsxs(Fragment, { children: [jsx(SyncedSliderPropertyLine, { label: "R", value: color.r * 255, min: 0, max: 255, onChange: (value) => onSliderChange(value, "r") }), jsx(SyncedSliderPropertyLine, { label: "G", value: color.g * 255, min: 0, max: 255, onChange: (value) => onSliderChange(value, "g") }), jsx(SyncedSliderPropertyLine, { label: "B", value: color.b * 255, min: 0, max: 255, onChange: (value) => onSliderChange(value, "b") }), color.a === undefined ? undefined : (jsx(SyncedSliderPropertyLine, { label: "A", value: color.a, min: 0, max: 1, step: 0.01, onChange: (value) => onSliderChange(value, "a") }))] }));
11396
+ };
11397
+
11398
+ const Picker = (props) => jsx(ColorPickerPopup, { ...props });
11399
+ const Adapter = {
11400
+ picker: Picker,
11401
+ getColor: (value) => value,
11402
+ createColor: (color, source) => {
11403
+ if (source instanceof Color4) {
11404
+ return new Color4(color.r, color.g, color.b, color.a ?? source.a);
11405
+ }
11406
+ return source.clone().set(color.r, color.g, color.b);
11407
+ },
11408
+ };
11409
+ const ColorPropertyLine = forwardRef((props, ref) => jsx(ControlledColorPropertyLine, { ...props, adapter: Adapter, propertyLineRef: ref }));
11410
+ ColorPropertyLine.displayName = "ColorPropertyLine";
11411
+ /**
11412
+ * Edits a Babylon.js Color3 value.
11413
+ * @param props The controlled color and property-line presentation.
11414
+ * @returns The Color3 property line.
11415
+ */
11325
11416
  const Color3PropertyLine = ColorPropertyLine;
11417
+ /**
11418
+ * Edits a Babylon.js Color4 value.
11419
+ * @param props The controlled color and property-line presentation.
11420
+ * @returns The Color4 property line.
11421
+ */
11326
11422
  const Color4PropertyLine = ColorPropertyLine;
11327
11423
 
11328
- const HasZ = (vector) => !(vector instanceof Vector2);
11329
- const HasW = (vector) => vector instanceof Vector4 || vector instanceof Quaternion;
11330
11424
  /**
11331
- * Reusable component which renders a vector property line containing a label, vector value, and expandable XYZW values
11332
- * The expanded section contains a slider/input box for each component of the vector (x, y, z, w)
11333
- * @param props
11334
- * @returns
11425
+ * Runtime-neutral controlled editor for two-, three-, and four-component numeric values.
11426
+ * @param props The value, change callback, component adapter, and property-line presentation.
11427
+ * @returns The tensor property line.
11335
11428
  */
11336
- const TensorPropertyLine = (props) => {
11337
- TensorPropertyLine.displayName = "TensorPropertyLine";
11338
- const converted = (val) => (props.valueConverter ? props.valueConverter.from(val) : val);
11339
- const formatted = (val) => converted(val).toFixed(props.step !== undefined ? Math.max(0, CalculatePrecision(props.step)) : 2);
11340
- const [vector, setVector] = useState(props.value);
11341
- const { min, max } = props;
11342
- const onChange = (val, key) => {
11343
- const value = props.valueConverter ? props.valueConverter.to(val) : val;
11344
- const newVector = vector.clone();
11345
- newVector[key] = value; // The syncedSlider for 'w' is only rendered when vector is a Vector4, so this is safe
11346
- setVector(newVector);
11347
- props.onChange(newVector);
11348
- };
11429
+ const ControlledTensorPropertyLine = (props) => {
11430
+ const { adapter, min, max, unit, step, precision, valueConverter } = props;
11431
+ const converted = (value) => (valueConverter ? valueConverter.from(value) : value);
11432
+ const formatted = (value) => converted(value).toFixed(precision ?? (step !== undefined ? Math.max(0, CalculatePrecision(step)) : 2));
11433
+ const [value, setValue] = useState(props.value);
11349
11434
  useEffect(() => {
11350
- setVector(props.value);
11435
+ setValue(props.value);
11351
11436
  }, [props.value, props.expandedContent]);
11352
- return (jsx(PropertyLine, { ...props, expandedContent: jsxs(Fragment, { children: [props.expandedContent, vector ? (jsx(VectorSliders, { vector: vector, min: min, max: max, unit: props.unit, step: props.step, precision: props.precision, converted: converted, onChange: onChange })) : undefined] }), children: jsx(Body1, { children: `[${formatted(props.value.x)}, ${formatted(props.value.y)}${HasZ(props.value) ? `, ${formatted(props.value.z)}` : ""}${HasW(props.value) ? `, ${formatted(props.value.w)}` : ""}]` }) }));
11353
- };
11354
- const VectorSliders = ({ vector, min, max, unit, step, precision, converted, onChange }) => (jsxs(Fragment, { children: [jsx(NumberInputPropertyLine, { label: "X", value: converted(vector.x), min: min, max: max, onChange: (val) => onChange(val, "x"), unit: unit, step: step, precision: precision }), jsx(NumberInputPropertyLine, { label: "Y", value: converted(vector.y), min: min, max: max, onChange: (val) => onChange(val, "y"), unit: unit, step: step, precision: precision }), HasZ(vector) && (jsx(NumberInputPropertyLine, { label: "Z", value: converted(vector.z), min: min, max: max, onChange: (val) => onChange(val, "z"), unit: unit, step: step, precision: precision })), HasW(vector) && (jsx(NumberInputPropertyLine, { label: "W", value: converted(vector.w), min: min, max: max, onChange: (val) => onChange(val, "w"), unit: unit, step: step, precision: precision }))] }));
11355
- const ToDegreesConverter = { from: Tools.ToDegrees, to: Tools.ToRadians };
11356
- const RotationVectorPropertyLine = (props) => {
11357
- RotationVectorPropertyLine.displayName = "RotationVectorPropertyLine";
11358
- const step = props.useDegrees ? 1 : 0.01;
11359
- const precision = props.useDegrees ? 1 : 2;
11360
- return (jsx(Vector3PropertyLine, { ...props, unit: props.useDegrees ? "°" : "rad", valueConverter: props.useDegrees ? ToDegreesConverter : undefined, step: step, precision: precision }));
11361
- };
11362
- const QuaternionPropertyLineInternal = TensorPropertyLine;
11363
- const QuaternionPropertyLine = (props) => {
11364
- QuaternionPropertyLine.displayName = "QuaternionPropertyLine";
11365
- const step = props.useDegrees ? 1 : 0.01;
11366
- const precision = props.useDegrees ? 1 : 2;
11367
- const [quat, setQuat] = useState(props.value);
11437
+ const onComponentChange = (componentValue, component) => {
11438
+ const storedValue = valueConverter ? valueConverter.to(componentValue) : componentValue;
11439
+ const newValue = adapter.withComponent(value, component, storedValue);
11440
+ setValue(newValue);
11441
+ props.onChange(newValue);
11442
+ };
11443
+ const summary = adapter.components.map((component) => formatted(adapter.getComponent(props.value, component))).join(", ");
11444
+ return (jsx(PropertyLine, { ...props, expandedContent: jsxs(Fragment, { children: [props.expandedContent, jsx(TensorSliders, { value: value, adapter: adapter, min: min, max: max, unit: unit, step: step, precision: precision, converted: converted, onChange: onComponentChange })] }), children: jsx(Body1, { children: `[${summary}]` }) }));
11445
+ };
11446
+ const TensorSliders = (props) => {
11447
+ const { value, adapter, min, max, unit, step, precision, converted, onChange } = props;
11448
+ return (jsx(Fragment, { children: adapter.components.map((component) => (jsx(NumberInputPropertyLine, { label: component.toUpperCase(), value: converted(adapter.getComponent(value, component)), min: min, max: max, onChange: (componentValue) => onChange(componentValue, component), unit: unit, step: step, precision: precision }, component))) }));
11449
+ };
11450
+ const RadiansToDegreesConverter = {
11451
+ from: (value) => (value * 180) / Math.PI,
11452
+ to: (value) => (value * Math.PI) / 180,
11453
+ };
11454
+ /**
11455
+ * Runtime-neutral controlled Euler rotation editor.
11456
+ * @param props The rotation value, runtime adapter, and display options.
11457
+ * @returns The rotation property line.
11458
+ */
11459
+ const ControlledRotationVectorPropertyLine = (props) => {
11460
+ const { useDegrees, ...rest } = props;
11461
+ return (jsx(ControlledTensorPropertyLine, { ...rest, unit: useDegrees ? "°" : "rad", valueConverter: useDegrees ? RadiansToDegreesConverter : undefined, step: useDegrees ? 1 : 0.01, precision: useDegrees ? 1 : 2 }));
11462
+ };
11463
+ /**
11464
+ * Runtime-neutral controlled quaternion editor with optional Euler presentation.
11465
+ * @param props The quaternion value, runtime conversion adapter, and display options.
11466
+ * @returns The quaternion or Euler property line.
11467
+ */
11468
+ const ControlledQuaternionPropertyLine = (props) => {
11469
+ const { adapter, useEuler, useDegrees, ...rest } = props;
11470
+ const [quaternion, setQuaternion] = useState(props.value);
11368
11471
  useEffect(() => {
11369
- setQuat(props.value);
11472
+ setQuaternion(props.value);
11370
11473
  }, [props.value]);
11371
- // Extract only the properties that exist on QuaternionPropertyLineProps
11372
- const { useEuler, ...restProps } = props;
11373
- const onQuatChange = (val) => {
11374
- setQuat(val);
11375
- props.onChange(val);
11474
+ const onQuaternionChange = (value) => {
11475
+ setQuaternion(value);
11476
+ props.onChange(value);
11376
11477
  };
11377
- const onEulerChange = (val) => {
11378
- const quat = Quaternion.FromEulerAngles(val.x, val.y, val.z);
11379
- onQuatChange(quat);
11478
+ if (useEuler) {
11479
+ const quaternionSummary = adapter.quaternion.components.map((component) => adapter.quaternion.getComponent(quaternion, component).toFixed(4)).join(", ");
11480
+ return (jsx(ControlledTensorPropertyLine, { ...rest, nullable: false, ignoreNullable: false, value: adapter.toEuler(quaternion), adapter: adapter.euler, valueConverter: useDegrees ? RadiansToDegreesConverter : undefined, onChange: (value) => onQuaternionChange(adapter.fromEuler(value, quaternion)), unit: useDegrees ? "°" : "rad", step: useDegrees ? 1 : 0.01, precision: useDegrees ? 1 : 2, expandedContent: jsx(TextPropertyLine, { label: "Quaternion", value: `[${quaternionSummary}]` }) }));
11481
+ }
11482
+ return (jsx(ControlledTensorPropertyLine, { ...rest, nullable: false, value: quaternion, adapter: adapter.quaternion, onChange: onQuaternionChange, unit: useDegrees ? "°" : "rad", step: useDegrees ? 1 : 0.01, precision: useDegrees ? 1 : 2 }));
11483
+ };
11484
+
11485
+ function CreateCoreTensorAdapter(components) {
11486
+ return {
11487
+ components,
11488
+ getComponent: (value, component) => {
11489
+ switch (component) {
11490
+ case "x":
11491
+ return value.x;
11492
+ case "y":
11493
+ return value.y;
11494
+ case "z":
11495
+ return "z" in value ? value.z : 0;
11496
+ case "w":
11497
+ return "w" in value ? value.w : 0;
11498
+ }
11499
+ },
11500
+ withComponent: (value, component, componentValue) => {
11501
+ const result = value.clone();
11502
+ switch (component) {
11503
+ case "x":
11504
+ result.x = componentValue;
11505
+ break;
11506
+ case "y":
11507
+ result.y = componentValue;
11508
+ break;
11509
+ case "z":
11510
+ if ("z" in result) {
11511
+ result.z = componentValue;
11512
+ }
11513
+ break;
11514
+ case "w":
11515
+ if ("w" in result) {
11516
+ result.w = componentValue;
11517
+ }
11518
+ break;
11519
+ }
11520
+ return result;
11521
+ },
11380
11522
  };
11381
- return useEuler ? (jsx(Vector3PropertyLine, { ...restProps, nullable: false, ignoreNullable: false, value: quat.toEulerAngles(), valueConverter: ToDegreesConverter, onChange: onEulerChange, unit: props.useDegrees ? "°" : "rad", step: step, precision: precision, expandedContent: jsx(TextPropertyLine, { label: "Quaternion", value: `[${quat.x.toFixed(4)}, ${quat.y.toFixed(4)}, ${quat.z.toFixed(4)}, ${quat.w.toFixed(4)}]` }) })) : (jsx(QuaternionPropertyLineInternal, { ...props, nullable: false, value: quat, onChange: onQuatChange, unit: props.useDegrees ? "°" : "rad", step: step, precision: precision }));
11523
+ }
11524
+ const Vector2Adapter = CreateCoreTensorAdapter(["x", "y"]);
11525
+ const Vector3Adapter = CreateCoreTensorAdapter(["x", "y", "z"]);
11526
+ const Vector4Adapter = CreateCoreTensorAdapter(["x", "y", "z", "w"]);
11527
+ const QuaternionTensorAdapter = CreateCoreTensorAdapter(["x", "y", "z", "w"]);
11528
+ const QuaternionAdapter = {
11529
+ quaternion: QuaternionTensorAdapter,
11530
+ euler: Vector3Adapter,
11531
+ fromEuler: (value) => Quaternion.FromEulerAngles(value.x, value.y, value.z),
11532
+ toEuler: (value) => value.toEulerAngles(),
11382
11533
  };
11383
- const Vector2PropertyLine = TensorPropertyLine;
11384
- const Vector3PropertyLine = TensorPropertyLine;
11385
- const Vector4PropertyLine = TensorPropertyLine;
11534
+ /**
11535
+ * Edits a Babylon.js Vector2 value.
11536
+ * @param props The controlled vector and property-line presentation.
11537
+ * @returns The Vector2 property line.
11538
+ */
11539
+ const Vector2PropertyLine = (props) => jsx(ControlledTensorPropertyLine, { ...props, adapter: Vector2Adapter });
11540
+ /**
11541
+ * Edits a Babylon.js Vector3 value.
11542
+ * @param props The controlled vector and property-line presentation.
11543
+ * @returns The Vector3 property line.
11544
+ */
11545
+ const Vector3PropertyLine = (props) => jsx(ControlledTensorPropertyLine, { ...props, adapter: Vector3Adapter });
11546
+ /**
11547
+ * Edits a Babylon.js Vector4 value.
11548
+ * @param props The controlled vector and property-line presentation.
11549
+ * @returns The Vector4 property line.
11550
+ */
11551
+ const Vector4PropertyLine = (props) => jsx(ControlledTensorPropertyLine, { ...props, adapter: Vector4Adapter });
11552
+ /**
11553
+ * Edits a Babylon.js Euler rotation value.
11554
+ * @param props The controlled rotation and property-line presentation.
11555
+ * @returns The Euler rotation property line.
11556
+ */
11557
+ const RotationVectorPropertyLine = (props) => (jsx(ControlledRotationVectorPropertyLine, { ...props, adapter: Vector3Adapter }));
11558
+ /**
11559
+ * Edits a Babylon.js Quaternion value with optional Euler presentation.
11560
+ * @param props The controlled quaternion and property-line presentation.
11561
+ * @returns The quaternion property line.
11562
+ */
11563
+ const QuaternionPropertyLine = (props) => jsx(ControlledQuaternionPropertyLine, { ...props, adapter: QuaternionAdapter });
11386
11564
 
11387
11565
  function IsInspectableObject(entity) {
11388
11566
  return !!entity.inspectableCustomProperties;
@@ -20420,6 +20598,12 @@ const MetadataPropertiesServiceDefinition = {
20420
20598
  },
20421
20599
  };
20422
20600
 
20601
+ const MeshBlendingRadiusClassOptions = [
20602
+ { label: "Small", value: MeshBlendingRadiusClass.Small },
20603
+ { label: "Medium", value: MeshBlendingRadiusClass.Medium },
20604
+ { label: "Large", value: MeshBlendingRadiusClass.Large },
20605
+ { label: "Extra Large", value: MeshBlendingRadiusClass.ExtraLarge },
20606
+ ];
20423
20607
  const AbstractMeshGeneralProperties = (props) => {
20424
20608
  const { mesh, selectionService } = props;
20425
20609
  // Use the observable to keep keep state up-to-date and re-render the component when it changes.
@@ -20430,7 +20614,14 @@ const AbstractMeshGeneralProperties = (props) => {
20430
20614
  };
20431
20615
  const AbstractMeshDisplayProperties = (props) => {
20432
20616
  const { mesh } = props;
20433
- return (jsxs(Fragment, { children: [jsx(BoundProperty, { component: NumberInputPropertyLine, label: "Alpha Index", target: mesh, propertyKey: "alphaIndex" }), jsx(BoundProperty, { component: SwitchPropertyLine, label: "Receive Shadows", target: mesh, propertyKey: "receiveShadows" }), mesh.isVerticesDataPresent(VertexBuffer.ColorKind) && (jsxs(Fragment, { children: [jsx(BoundProperty, { label: "Use Vertex Colors", component: SwitchPropertyLine, target: mesh, propertyKey: "useVertexColors" }), jsx(BoundProperty, { label: "Has Vertex Alpha", component: SwitchPropertyLine, target: mesh, propertyKey: "hasVertexAlpha" })] })), mesh.getScene().fogMode !== Constants.FOGMODE_NONE && jsx(BoundProperty, { label: "Apply Fog", component: SwitchPropertyLine, target: mesh, propertyKey: "applyFog" }), !mesh.parent && jsx(BoundProperty, { component: SwitchPropertyLine, label: "Infinite distance", target: mesh, propertyKey: "infiniteDistance" }), jsx(BoundProperty, { component: SyncedSliderPropertyLine, label: "Rendering Group Id", target: mesh, propertyKey: "renderingGroupId", min: RenderingManager.MIN_RENDERINGGROUPS, max: RenderingManager.MAX_RENDERINGGROUPS - 1, step: 1 }), jsx(BoundProperty, { component: HexPropertyLine, label: "Layer Mask", target: mesh, propertyKey: "layerMask" })] }));
20617
+ const meshBlendingTarget = mesh instanceof InstancedMesh ? mesh.sourceMesh : mesh;
20618
+ const meshBlendingTag = useProperty(meshBlendingTarget, "meshBlendingTag");
20619
+ const { groupId: meshBlendingGroupId, radiusClass: meshBlendingRadiusClass } = UnpackMeshBlendingTag(meshBlendingTag);
20620
+ return (jsxs(Fragment, { children: [jsx(BoundProperty, { component: NumberInputPropertyLine, label: "Alpha Index", target: mesh, propertyKey: "alphaIndex" }), jsx(BoundProperty, { component: SwitchPropertyLine, label: "Receive Shadows", target: mesh, propertyKey: "receiveShadows" }), mesh.isVerticesDataPresent(VertexBuffer.ColorKind) && (jsxs(Fragment, { children: [jsx(BoundProperty, { label: "Use Vertex Colors", component: SwitchPropertyLine, target: mesh, propertyKey: "useVertexColors" }), jsx(BoundProperty, { label: "Has Vertex Alpha", component: SwitchPropertyLine, target: mesh, propertyKey: "hasVertexAlpha" })] })), mesh.getScene().fogMode !== Constants.FOGMODE_NONE && jsx(BoundProperty, { label: "Apply Fog", component: SwitchPropertyLine, target: mesh, propertyKey: "applyFog" }), !mesh.parent && jsx(BoundProperty, { component: SwitchPropertyLine, label: "Infinite distance", target: mesh, propertyKey: "infiniteDistance" }), jsx(BoundProperty, { component: SyncedSliderPropertyLine, label: "Rendering Group Id", target: mesh, propertyKey: "renderingGroupId", min: RenderingManager.MIN_RENDERINGGROUPS, max: RenderingManager.MAX_RENDERINGGROUPS - 1, step: 1 }), jsx(NumberInputPropertyLine, { label: "Mesh Blending Group", description: "Logical group used for mesh blending. Zero disables mesh blending.", value: meshBlendingGroupId, onChange: (value) => {
20621
+ meshBlendingTarget.meshBlendingTag = PackMeshBlendingTag(value, meshBlendingRadiusClass);
20622
+ }, min: 0, max: 63, step: 1, forceInt: true }), jsx(NumberDropdownPropertyLine, { label: "Mesh Blending Radius", description: "Radius class packed into the mesh-blending tag.", value: meshBlendingRadiusClass, onChange: (value) => {
20623
+ meshBlendingTarget.meshBlendingTag = PackMeshBlendingTag(meshBlendingGroupId, value);
20624
+ }, options: MeshBlendingRadiusClassOptions, disabled: meshBlendingGroupId === 0 }), jsx(BoundProperty, { component: HexPropertyLine, label: "Layer Mask", target: mesh, propertyKey: "layerMask" })] }));
20434
20625
  };
20435
20626
  const AbstractMeshAdvancedProperties = (props) => {
20436
20627
  const { mesh } = props;
@@ -28392,5 +28583,5 @@ function DetachDebugLayer() {
28392
28583
  // Attach Inspector v2 to Scene.debugLayer as a side effect for back compat.
28393
28584
  AttachDebugLayer();
28394
28585
 
28395
- export { FactorGradientList as $, Accordion as A, Button as B, CheckboxPropertyLine as C, Color4PropertyLine as D, ColorPickerPopup as E, ColorStepGradientComponent as F, ComboBox as G, ComboBoxPropertyLine as H, ComputedProperty as I, ConstructorFactory as J, ConvertOptions as K, Link as L, MessageBar as M, NumberInputPropertyLine as N, DebugServiceIdentity as O, Popover as P, DetachDebugLayer as Q, DraggableLine as R, ShellServiceIdentity as S, TextInputPropertyLine as T, Dropdown as U, Vector3PropertyLine as V, EntitySelector as W, ErrorBoundary as X, ExplorerServiceIdentity as Y, ExtensibleAccordion as Z, FactorGradientComponent as _, useToast as a, TextureUpload as a$, FileUploadLine as a0, GetPropertyDescriptor as a1, GizmoServiceIdentity as a2, HexPropertyLine as a3, InfoLabel as a4, InputHexField as a5, InputHsvField as a6, Inspector as a7, InterceptFunction as a8, InterceptProperty as a9, SceneExplorerServiceIdentity as aA, SearchBar as aB, SearchBox as aC, SelectionServiceDefinition as aD, SettingsServiceIdentity as aE, SettingsStore as aF, SettingsStoreIdentity as aG, ShowInspector as aH, SidePaneContainer as aI, SkeletonSelector as aJ, Slider as aK, SpinButton as aL, StartInspectable as aM, StatsServiceIdentity as aN, StringDropdown as aO, StringDropdownPropertyLine as aP, StringifiedPropertyLine as aQ, Switch as aR, SwitchPropertyLine as aS, SyncedSliderInput as aT, SyncedSliderPropertyLine as aU, TeachingMoment as aV, TextAreaPropertyLine as aW, TextInput as aX, TextPropertyLine as aY, Textarea as aZ, TextureSelector as a_, IsPropertyReadonly as aa, LineContainer as ab, LinkPropertyLine as ac, LinkToEntityPropertyLine as ad, List as ae, MakeDialogTeachingMoment as af, MakeLazyComponent as ag, MakeModularBridge as ah, MakeModularTool as ai, MakePopoverTeachingMoment as aj, MakePropertyHook as ak, MakeTeachingMoment as al, MaterialSelector as am, NodeSelector as an, NumberDropdown as ao, NumberDropdownPropertyLine as ap, ObservableCollection as aq, Pane as ar, PlaceholderPropertyLine as as, PositionedPopover as at, PropertiesServiceIdentity as au, Property as av, PropertyContext as aw, PropertyLine as ax, QuaternionPropertyLine as ay, RotationVectorPropertyLine as az, useInterceptObservable as b, Theme as b0, ThemeServiceIdentity as b1, ToastProvider as b2, ToggleButton as b3, Tooltip as b4, UploadButton as b5, Vector2PropertyLine as b6, Vector4PropertyLine as b7, WatcherServiceIdentity as b8, inspectorAssetNotFoundHandler as b9, useAngleConverters as ba, useAsyncResource as bb, useColor3Property as bc, useColor4Property as bd, useEventListener as be, useEventfulState as bf, useKeyListener as bg, useKeyState as bh, useObservableCollection as bi, useOrderedObservableCollection as bj, usePollingObservable as bk, usePropertyChangedNotifier as bl, useQuaternionProperty as bm, useResource as bn, useTheme as bo, useThemeMode as bp, useVector3Property as bq, LinkToEntity as c, SpinButtonPropertyLine as d, useProperty as e, SceneContextIdentity as f, SelectionServiceIdentity as g, useObservableState as h, AccordionSection as i, ButtonLine as j, ToolsServiceIdentity as k, AccordionSectionItem as l, AttachDebugLayer as m, BooleanBadgePropertyLine as n, BoundProperty as o, BridgeCommandRegistryIdentity as p, BuiltInsExtensionFeed as q, Checkbox as r, ChildWindow as s, Collapse as t, useExtensionManager as u, Color3GradientComponent as v, Color3GradientList as w, Color3PropertyLine as x, Color4GradientComponent as y, Color4GradientList as z };
28396
- //# sourceMappingURL=index-C5ggNiyY.js.map
28586
+ export { FactorGradientComponent as $, Accordion as A, Button as B, CheckboxPropertyLine as C, Color4PropertyLine as D, ColorPickerPopup as E, ColorStepGradientComponent as F, ComboBox as G, ComboBoxPropertyLine as H, ComputedProperty as I, ConstructorFactory as J, ConvertOptions as K, Link as L, MessageBar as M, NumberInputPropertyLine as N, DebugServiceIdentity as O, Popover as P, DerivedProperty as Q, DetachDebugLayer as R, ShellServiceIdentity as S, TextInputPropertyLine as T, DraggableLine as U, Vector3PropertyLine as V, Dropdown as W, EntitySelector as X, ErrorBoundary as Y, ExplorerServiceIdentity as Z, ExtensibleAccordion as _, useToast as a, TextureSelector as a$, FactorGradientList as a0, FileUploadLine as a1, GetPropertyDescriptor as a2, GizmoServiceIdentity as a3, HexPropertyLine as a4, InfoLabel as a5, InputHexField as a6, InputHsvField as a7, Inspector as a8, InterceptFunction as a9, RotationVectorPropertyLine as aA, SceneExplorerServiceIdentity as aB, SearchBar as aC, SearchBox as aD, SelectionServiceDefinition as aE, SettingsServiceIdentity as aF, SettingsStore as aG, SettingsStoreIdentity as aH, ShowInspector as aI, SidePaneContainer as aJ, SkeletonSelector as aK, Slider as aL, SpinButton as aM, StartInspectable as aN, StatsServiceIdentity as aO, StringDropdown as aP, StringDropdownPropertyLine as aQ, StringifiedPropertyLine as aR, Switch as aS, SwitchPropertyLine as aT, SyncedSliderInput as aU, SyncedSliderPropertyLine as aV, TeachingMoment as aW, TextAreaPropertyLine as aX, TextInput as aY, TextPropertyLine as aZ, Textarea as a_, InterceptProperty as aa, IsPropertyReadonly as ab, LineContainer as ac, LinkPropertyLine as ad, LinkToEntityPropertyLine as ae, List as af, MakeDialogTeachingMoment as ag, MakeLazyComponent as ah, MakeModularBridge as ai, MakeModularTool as aj, MakePopoverTeachingMoment as ak, MakePropertyHook as al, MakeTeachingMoment as am, MaterialSelector as an, NodeSelector as ao, NumberDropdown as ap, NumberDropdownPropertyLine as aq, ObservableCollection as ar, Pane as as, PlaceholderPropertyLine as at, PositionedPopover as au, PropertiesServiceIdentity as av, Property as aw, PropertyContext as ax, PropertyLine as ay, QuaternionPropertyLine as az, useInterceptObservable as b, TextureUpload as b0, Theme as b1, ThemeServiceIdentity as b2, ToastProvider as b3, ToggleButton as b4, Tooltip as b5, UploadButton as b6, Vector2PropertyLine as b7, Vector4PropertyLine as b8, WatcherServiceIdentity as b9, inspectorAssetNotFoundHandler as ba, useAngleConverters as bb, useAsyncResource as bc, useColor3Property as bd, useColor4Property as be, useEventListener as bf, useEventfulState as bg, useKeyListener as bh, useKeyState as bi, useObservableCollection as bj, useOrderedObservableCollection as bk, usePollingObservable as bl, usePropertyChangedNotifier as bm, useQuaternionProperty as bn, useResource as bo, useTheme as bp, useThemeMode as bq, useVector3Property as br, LinkToEntity as c, SpinButtonPropertyLine as d, useProperty as e, SceneContextIdentity as f, SelectionServiceIdentity as g, useObservableState as h, AccordionSection as i, ButtonLine as j, ToolsServiceIdentity as k, AccordionSectionItem as l, AttachDebugLayer as m, BooleanBadgePropertyLine as n, BoundProperty as o, BridgeCommandRegistryIdentity as p, BuiltInsExtensionFeed as q, Checkbox as r, ChildWindow as s, Collapse as t, useExtensionManager as u, Color3GradientComponent as v, Color3GradientList as w, Color3PropertyLine as x, Color4GradientComponent as y, Color4GradientList as z };
28587
+ //# sourceMappingURL=index-DHNtmMzT.js.map