@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.
- package/lib/browser-CANgtOiM.js.map +1 -1
- package/lib/components/properties/boundProperty.d.ts +27 -0
- package/lib/components/properties/metadataProperties.d.ts +5 -1
- package/lib/contexts/propertyContext.d.ts +1 -1
- package/lib/{extensionsListService-DVpZa3gV.js → extensionsListService-GhHoWP21.js} +4 -4
- package/lib/{extensionsListService-DVpZa3gV.js.map → extensionsListService-GhHoWP21.js.map} +1 -1
- package/lib/gif-5DieAkSF.js.map +1 -1
- package/lib/{index-C5ggNiyY.js → index-DHNtmMzT.js} +282 -91
- package/lib/index-DHNtmMzT.js.map +1 -0
- package/lib/index.js +4 -4
- package/lib/lite/components/properties/cameraProperties.d.ts +11 -0
- package/lib/lite/components/properties/lightProperties.d.ts +33 -0
- package/lib/lite/components/properties/sceneNodeProperties.d.ts +8 -0
- package/lib/lite/{extensionsListService-xgITNk9y.js → extensionsListService-D1JivcAu.js} +2 -4
- package/lib/lite/{extensionsListService-xgITNk9y.js.map → extensionsListService-D1JivcAu.js.map} +1 -1
- package/lib/lite/{index-DmQN3QdU.js → index-D8vFySa7.js} +1616 -213
- package/lib/lite/index-D8vFySa7.js.map +1 -0
- package/lib/lite/index.js +2 -4
- package/lib/lite/index.js.map +1 -1
- package/lib/lite/renderingLayerUtils.d.ts +12 -0
- package/lib/lite/sceneEntityUtils.d.ts +19 -0
- package/lib/lite/services/panes/properties/cameraPropertiesService.d.ts +3 -0
- package/lib/lite/services/panes/properties/lightPropertiesService.d.ts +3 -0
- package/lib/lite/services/panes/properties/sceneNodePropertiesService.d.ts +3 -0
- package/lib/lite/services/panes/properties/shadowGeneratorPropertiesService.d.ts +4 -0
- package/lib/lite/services/panes/properties/spriteLayerPropertiesService.d.ts +4 -0
- package/lib/lite/services/panes/scene/cameraExplorerService.d.ts +7 -0
- package/lib/lite/services/panes/scene/lightExplorerService.d.ts +6 -0
- package/lib/lite/services/panes/scene/meshExplorerService.d.ts +4 -1
- package/lib/lite/services/panes/scene/renderingLayerExplorerService.d.ts +24 -0
- package/lib/lite/services/panes/scene/sceneSelectionUtils.d.ts +3 -0
- package/lib/lite/services/panes/scene/shadowGeneratorExplorerService.d.ts +6 -0
- package/lib/lite/services/panes/scene/spriteLayerExplorerService.d.ts +1 -0
- package/lib/lite/services/panes/scene/textLayerExplorerService.d.ts +1 -3
- package/lib/{quickCreateToolsService-0rVa_CjZ.js → quickCreateToolsService-COtk9VE9.js} +5 -5
- package/lib/{quickCreateToolsService-0rVa_CjZ.js.map → quickCreateToolsService-COtk9VE9.js.map} +1 -1
- package/lib/{reflectorService-pyDncbYA.js → reflectorService-fcsir8s0.js} +5 -5
- package/lib/{reflectorService-pyDncbYA.js.map → reflectorService-fcsir8s0.js.map} +1 -1
- package/package.json +1 -1
- package/lib/index-C5ggNiyY.js.map +0 -1
- 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 {
|
|
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,
|
|
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 =
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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) =>
|
|
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-
|
|
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-
|
|
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-
|
|
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
|
-
*
|
|
11296
|
-
*
|
|
11297
|
-
* @
|
|
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
|
|
11301
|
-
|
|
11302
|
-
const [
|
|
11365
|
+
const ControlledColorPropertyLine = (props) => {
|
|
11366
|
+
const { adapter, value, onChange, propertyLineRef } = props;
|
|
11367
|
+
const [currentValue, setCurrentValue] = useState(value);
|
|
11303
11368
|
useEffect(() => {
|
|
11304
|
-
|
|
11305
|
-
}, [
|
|
11306
|
-
const
|
|
11307
|
-
|
|
11308
|
-
|
|
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
|
|
11319
|
-
|
|
11320
|
-
|
|
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
|
-
|
|
11323
|
-
})
|
|
11324
|
-
|
|
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
|
-
*
|
|
11332
|
-
*
|
|
11333
|
-
* @
|
|
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
|
|
11337
|
-
|
|
11338
|
-
const converted = (
|
|
11339
|
-
const formatted = (
|
|
11340
|
-
const [
|
|
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
|
-
|
|
11435
|
+
setValue(props.value);
|
|
11351
11436
|
}, [props.value, props.expandedContent]);
|
|
11352
|
-
|
|
11353
|
-
|
|
11354
|
-
const
|
|
11355
|
-
|
|
11356
|
-
|
|
11357
|
-
|
|
11358
|
-
const
|
|
11359
|
-
|
|
11360
|
-
|
|
11361
|
-
|
|
11362
|
-
const
|
|
11363
|
-
|
|
11364
|
-
|
|
11365
|
-
|
|
11366
|
-
|
|
11367
|
-
|
|
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
|
-
|
|
11472
|
+
setQuaternion(props.value);
|
|
11370
11473
|
}, [props.value]);
|
|
11371
|
-
|
|
11372
|
-
|
|
11373
|
-
|
|
11374
|
-
setQuat(val);
|
|
11375
|
-
props.onChange(val);
|
|
11474
|
+
const onQuaternionChange = (value) => {
|
|
11475
|
+
setQuaternion(value);
|
|
11476
|
+
props.onChange(value);
|
|
11376
11477
|
};
|
|
11377
|
-
|
|
11378
|
-
const
|
|
11379
|
-
|
|
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
|
-
|
|
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
|
-
|
|
11384
|
-
|
|
11385
|
-
|
|
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
|
-
|
|
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 {
|
|
28396
|
-
//# sourceMappingURL=index-
|
|
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
|