@babylonjs/inspector 8.53.0 → 8.53.1
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/{extensionsListService-CAOSDkIg.js → extensionsListService-J1zZuhYY.js} +3 -3
- package/lib/{extensionsListService-CAOSDkIg.js.map → extensionsListService-J1zZuhYY.js.map} +1 -1
- package/lib/{gif-D_8cJm3S.js → gif-CdXfT-By.js} +25 -10
- package/lib/gif-CdXfT-By.js.map +1 -0
- package/lib/{index-Ddfh2kw4.js → index-xzWdtYzo.js} +190 -58
- package/lib/index-xzWdtYzo.js.map +1 -0
- package/lib/index.d.ts +348 -26
- package/lib/index.js +1 -1
- package/lib/{quickCreateToolsService-DeZ7ZJOC.js → quickCreateToolsService-B8OEbZg5.js} +11 -4
- package/lib/quickCreateToolsService-B8OEbZg5.js.map +1 -0
- package/lib/{reflectorService-DE0Ic3N5.js → reflectorService-LPThzOok.js} +2 -2
- package/lib/{reflectorService-DE0Ic3N5.js.map → reflectorService-LPThzOok.js.map} +1 -1
- package/package.json +10 -4
- package/lib/gif-D_8cJm3S.js.map +0 -1
- package/lib/index-Ddfh2kw4.js.map +0 -1
- package/lib/quickCreateToolsService-DeZ7ZJOC.js.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
2
2
|
import { createContext, forwardRef, useContext, useState, useCallback, Component, useMemo, useEffect, useRef, useReducer, Children, isValidElement, useLayoutEffect, cloneElement, useImperativeHandle, createElement, Suspense, memo, Fragment as Fragment$1, lazy } from 'react';
|
|
3
|
-
import { tokens, makeStyles, Tooltip as Tooltip$1, Button as Button$1, Spinner, Link as Link$1, Caption1, Body1, useFluent, Accordion as Accordion$1, AccordionHeader, Subtitle2Stronger, AccordionPanel, Divider, MessageBar as MessageBar$1, MessageBarBody, AccordionItem, SearchBox as SearchBox$1, Portal, ToggleButton as ToggleButton$1, InfoLabel as InfoLabel$1,
|
|
3
|
+
import { tokens, makeStyles, Tooltip as Tooltip$1, Button as Button$1, Spinner, Link as Link$1, Caption1, Body1, useFluent, Accordion as Accordion$1, AccordionHeader, Subtitle2Stronger, AccordionPanel, Divider, MessageBar as MessageBar$1, MessageBarBody, AccordionItem, SearchBox as SearchBox$1, Portal, ToggleButton as ToggleButton$1, InfoLabel as InfoLabel$1, Body1Strong, mergeClasses, useId, useToastController, Toast, ToastTitle, FluentProvider, Toaster, Checkbox as Checkbox$1, createLightTheme, createDarkTheme, TeachingPopover, TeachingPopoverSurface, TeachingPopoverHeader, TeachingPopoverBody, Switch as Switch$1, createDOMRenderer, RendererProvider, Menu, MenuTrigger, SplitButton, MenuPopover, MenuList, MenuItem, Toolbar as Toolbar$1, ToolbarRadioButton, MenuGroup, MenuGroupHeader, treeItemLevelToken, FlatTree, FlatTreeItem, TreeItemLayout, MenuDivider, MenuItemCheckbox, useMergedRefs, Input, Dropdown as Dropdown$1, Option, Popover as Popover$1, PopoverTrigger, PopoverSurface, ColorPicker, ColorArea, ColorSlider, AlphaSlider, ColorSwatch, PresenceBadge, Slider as Slider$1, MenuItemRadio, Dialog, DialogSurface, DialogBody, DialogTitle, DialogContent, DialogActions, List as List$1, ListItem, Badge, Label, MessageBarTitle, Subtitle2, useComboboxFilter, Combobox, Textarea as Textarea$1, ToolbarButton, ToolbarDivider, Field } from '@fluentui/react-components';
|
|
4
4
|
import { ErrorCircleRegular, EyeFilled, EyeOffRegular, CheckmarkFilled, EditRegular, FilterRegular, PinFilled, PinRegular, ArrowCircleUpRegular, ChevronCircleRight16Regular, ChevronCircleRight20Regular, ChevronCircleDown16Regular, ChevronCircleDown20Regular, Copy16Regular, CopyRegular, PanelLeftExpandRegular, PanelRightExpandRegular, PanelLeftContractRegular, PanelRightContractRegular, PictureInPictureEnterRegular, MoreHorizontalRegular, LayoutColumnTwoFocusLeftFilled, LayoutColumnTwoSplitLeftFocusTopLeftFilled, LayoutColumnTwoSplitLeftFocusBottomLeftFilled, LayoutColumnTwoFocusRightFilled, LayoutColumnTwoSplitRightFocusTopRightFilled, LayoutColumnTwoSplitRightFocusBottomRightFilled, SettingsRegular, DocumentTextRegular, createFluentIcon, TextSortAscendingRegular, GlobeRegular, ArrowExpandAllRegular, ArrowCollapseAllRegular, CubeTreeRegular, BugRegular, ArrowUploadRegular, ArrowBidirectionalUpDownFilled, ArrowDownloadRegular, StopRegular, RecordRegular, DataBarHorizontalRegular, WrenchRegular, ArrowClockwiseRegular, WeatherSunnyRegular, WeatherMoonRegular, ArrowRotateClockwiseRegular, ArrowExpandRegular, SelectObjectRegular, CubeRegular, CameraRegular, AddRegular, DeleteRegular, FullScreenMaximizeRegular, ChevronDownRegular, ChevronRightRegular, CircleSmallFilled, SaveRegular, PreviousRegular, ArrowPreviousRegular, TriangleLeftRegular, RecordStopRegular, PlayRegular, ArrowNextRegular, NextRegular, PauseRegular, LinkDismissRegular, LinkEditRegular, ArrowUndoRegular, BracesRegular, BracesDismiss16Regular, EyeRegular, CloudArrowUpRegular, CloudArrowDownRegular, EyeOffFilled, ArrowMoveFilled, StopFilled, PlayFilled, LockOpenRegular, LockClosedRegular, ResizeRegular, ChevronUpRegular, ArrowResetRegular, CircleHalfFillRegular, EyedropperRegular, PaintBucketRegular, InkStrokeRegular, StackRegular, FilmstripRegular, PauseFilled, WeatherSunnyLowFilled, LayerRegular, FrameRegular, AppGenericRegular, RectangleLandscapeRegular, BorderOutsideRegular, BorderNoneRegular, MyLocationRegular, LightbulbRegular, VideoFilled, VideoRegular, FlashlightRegular, FlashlightOffRegular, DropRegular, BlurRegular, PipelineRegular, PersonWalkingRegular, DataLineRegular, SoundWaveCircleRegular, PersonSquareRegular, LayerDiagonalPersonRegular, ImageEditRegular, ImageRegular, TargetRegular, PersonFeedbackRegular, BranchRegular, DeleteFilled } from '@fluentui/react-icons';
|
|
5
5
|
import { Color3, Color4 } from '@babylonjs/core/Maths/math.color.js';
|
|
6
6
|
import { Vector3, Quaternion, Matrix, Vector2, Vector4, TmpVectors } from '@babylonjs/core/Maths/math.vector.js';
|
|
@@ -37,7 +37,7 @@ import { PerformanceViewerCollector } from '@babylonjs/core/Misc/PerformanceView
|
|
|
37
37
|
import { AbstractEngine } from '@babylonjs/core/Engines/abstractEngine.js';
|
|
38
38
|
import { Bone } from '@babylonjs/core/Bones/bone.js';
|
|
39
39
|
import { Camera } from '@babylonjs/core/Cameras/camera.js';
|
|
40
|
-
import { FrameGraphUtils,
|
|
40
|
+
import { FrameGraphUtils, FindMainObjectRenderer, FindMainCamera } from '@babylonjs/core/FrameGraph/frameGraphUtils.js';
|
|
41
41
|
import { CameraGizmo } from '@babylonjs/core/Gizmos/cameraGizmo.js';
|
|
42
42
|
import { GizmoManager } from '@babylonjs/core/Gizmos/gizmoManager.js';
|
|
43
43
|
import { LightGizmo } from '@babylonjs/core/Gizmos/lightGizmo.js';
|
|
@@ -79,7 +79,7 @@ import { Engine } from '@babylonjs/core/Engines/engine.js';
|
|
|
79
79
|
import { ParticleSystem } from '@babylonjs/core/Particles/particleSystem.js';
|
|
80
80
|
import { GradientBlockColorStep } from '@babylonjs/core/Materials/Node/Blocks/gradientBlock.js';
|
|
81
81
|
import { NodeMaterialBlockConnectionPointTypes } from '@babylonjs/core/Materials/Node/Enums/nodeMaterialBlockConnectionPointTypes.js';
|
|
82
|
-
import {
|
|
82
|
+
import { Color3Gradient, ColorGradient, FactorGradient } from '@babylonjs/core/Misc/gradients.js';
|
|
83
83
|
import { ReadFile } from '@babylonjs/core/Misc/fileTools.js';
|
|
84
84
|
import { CubeTexture } from '@babylonjs/core/Materials/Textures/cubeTexture.js';
|
|
85
85
|
import { Mesh } from '@babylonjs/core/Meshes/mesh.js';
|
|
@@ -276,7 +276,7 @@ const Button = forwardRef((props, ref) => {
|
|
|
276
276
|
});
|
|
277
277
|
Button.displayName = "Button";
|
|
278
278
|
|
|
279
|
-
const useStyles$
|
|
279
|
+
const useStyles$V = makeStyles({
|
|
280
280
|
root: {
|
|
281
281
|
display: "flex",
|
|
282
282
|
flexDirection: "column",
|
|
@@ -357,11 +357,18 @@ class ErrorBoundary extends Component {
|
|
|
357
357
|
}
|
|
358
358
|
}
|
|
359
359
|
function ErrorFallback({ error, onRetry }) {
|
|
360
|
-
const styles = useStyles$
|
|
360
|
+
const styles = useStyles$V();
|
|
361
361
|
return (jsxs("div", { className: styles.root, children: [jsx(ErrorCircleRegular, { className: styles.icon }), jsx("div", { className: styles.title, children: "Something went wrong" }), jsx("div", { className: styles.message, children: "An error occurred in this component. You can try again or continue using other parts of the tool." }), jsx(Button, { label: "Try Again", appearance: "primary", onClick: onRetry }), error && jsx("div", { className: styles.details, children: error.message })] }));
|
|
362
362
|
}
|
|
363
363
|
|
|
364
|
+
/**
|
|
365
|
+
* React context for accessing the property change observable.
|
|
366
|
+
*/
|
|
364
367
|
const PropertyContext = createContext(undefined);
|
|
368
|
+
/**
|
|
369
|
+
* Hook that returns a callback to notify the property context when a property has been changed.
|
|
370
|
+
* @returns A function that accepts (entity, propertyKey, oldValue, newValue) and notifies observers.
|
|
371
|
+
*/
|
|
365
372
|
function usePropertyChangedNotifier() {
|
|
366
373
|
const propertyContext = useContext(PropertyContext);
|
|
367
374
|
return useCallback((entity, propertyKey, oldValue, newValue) => {
|
|
@@ -1354,7 +1361,7 @@ function useIsSectionEmpty(sectionId) {
|
|
|
1354
1361
|
return hasItems;
|
|
1355
1362
|
}
|
|
1356
1363
|
|
|
1357
|
-
const useStyles$
|
|
1364
|
+
const useStyles$U = makeStyles({
|
|
1358
1365
|
accordion: {
|
|
1359
1366
|
display: "flex",
|
|
1360
1367
|
flexDirection: "column",
|
|
@@ -1399,6 +1406,7 @@ const useStyles$T = makeStyles({
|
|
|
1399
1406
|
},
|
|
1400
1407
|
menuBar: {
|
|
1401
1408
|
display: "flex",
|
|
1409
|
+
padding: `0 ${tokens.spacingHorizontalM}`,
|
|
1402
1410
|
},
|
|
1403
1411
|
menuBarControls: {
|
|
1404
1412
|
display: "flex",
|
|
@@ -1442,7 +1450,7 @@ const useStyles$T = makeStyles({
|
|
|
1442
1450
|
*/
|
|
1443
1451
|
const AccordionMenuBar = () => {
|
|
1444
1452
|
AccordionMenuBar.displayName = "AccordionMenuBar";
|
|
1445
|
-
const classes = useStyles$
|
|
1453
|
+
const classes = useStyles$U();
|
|
1446
1454
|
const accordionCtx = useContext(AccordionContext);
|
|
1447
1455
|
if (!accordionCtx) {
|
|
1448
1456
|
return null;
|
|
@@ -1485,7 +1493,7 @@ const AccordionSectionBlock = (props) => {
|
|
|
1485
1493
|
const AccordionSectionItem = (props) => {
|
|
1486
1494
|
AccordionSectionItem.displayName = "AccordionSectionItem";
|
|
1487
1495
|
const { children, staticItem } = props;
|
|
1488
|
-
const classes = useStyles$
|
|
1496
|
+
const classes = useStyles$U();
|
|
1489
1497
|
const accordionCtx = useContext(AccordionContext);
|
|
1490
1498
|
const itemState = useAccordionSectionItemState(props);
|
|
1491
1499
|
const [ctrlMode, setCtrlMode] = useState(false);
|
|
@@ -1525,7 +1533,7 @@ const AccordionSectionItem = (props) => {
|
|
|
1525
1533
|
*/
|
|
1526
1534
|
const AccordionPinnedContainer = () => {
|
|
1527
1535
|
AccordionPinnedContainer.displayName = "AccordionPinnedContainer";
|
|
1528
|
-
const classes = useStyles$
|
|
1536
|
+
const classes = useStyles$U();
|
|
1529
1537
|
const accordionCtx = useContext(AccordionContext);
|
|
1530
1538
|
return (jsx("div", { ref: accordionCtx?.pinnedContainerRef, className: classes.pinnedContainer, children: jsx(MessageBar$1, { className: classes.pinnedContainerEmpty, children: jsx(MessageBarBody, { children: "No pinned items" }) }) }));
|
|
1531
1539
|
};
|
|
@@ -1536,7 +1544,7 @@ const AccordionPinnedContainer = () => {
|
|
|
1536
1544
|
*/
|
|
1537
1545
|
const AccordionSearchBox = () => {
|
|
1538
1546
|
AccordionSearchBox.displayName = "AccordionSearchBox";
|
|
1539
|
-
const classes = useStyles$
|
|
1547
|
+
const classes = useStyles$U();
|
|
1540
1548
|
const accordionCtx = useContext(AccordionContext);
|
|
1541
1549
|
if (!accordionCtx?.features.search) {
|
|
1542
1550
|
return null;
|
|
@@ -1552,7 +1560,7 @@ const AccordionSearchBox = () => {
|
|
|
1552
1560
|
*/
|
|
1553
1561
|
const AccordionSection = (props) => {
|
|
1554
1562
|
AccordionSection.displayName = "AccordionSection";
|
|
1555
|
-
const classes = useStyles$
|
|
1563
|
+
const classes = useStyles$U();
|
|
1556
1564
|
return jsx("div", { className: classes.panelDiv, children: props.children });
|
|
1557
1565
|
};
|
|
1558
1566
|
const StringAccordion = Accordion$1;
|
|
@@ -1560,7 +1568,7 @@ const Accordion = forwardRef((props, ref) => {
|
|
|
1560
1568
|
Accordion.displayName = "Accordion";
|
|
1561
1569
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
1562
1570
|
const { children, highlightSections, uniqueId, enablePinnedItems, enableHiddenItems, enableSearchItems, ...rest } = props;
|
|
1563
|
-
const classes = useStyles$
|
|
1571
|
+
const classes = useStyles$U();
|
|
1564
1572
|
const { size } = useContext(ToolContext);
|
|
1565
1573
|
const accordionCtx = useAccordionContext(props);
|
|
1566
1574
|
const hasPinning = accordionCtx?.features.pinning ?? false;
|
|
@@ -1657,7 +1665,7 @@ const Collapse = (props) => {
|
|
|
1657
1665
|
return (jsx(Collapse$1, { visible: props.visible, orientation: props.orientation, unmountOnExit: true, children: jsx("div", { className: `${classes.collapseContent} ${props.orientation === "horizontal" ? classes.horizontal : classes.vertical}`, children: props.children }) }));
|
|
1658
1666
|
};
|
|
1659
1667
|
|
|
1660
|
-
const useStyles$
|
|
1668
|
+
const useStyles$T = makeStyles({
|
|
1661
1669
|
button: {
|
|
1662
1670
|
display: "flex",
|
|
1663
1671
|
alignItems: "center",
|
|
@@ -1675,7 +1683,7 @@ const ToggleButton = (props) => {
|
|
|
1675
1683
|
ToggleButton.displayName = "ToggleButton";
|
|
1676
1684
|
const { value, onChange, title, appearance = "subtle" } = props;
|
|
1677
1685
|
const { size } = useContext(ToolContext);
|
|
1678
|
-
const classes = useStyles$
|
|
1686
|
+
const classes = useStyles$T();
|
|
1679
1687
|
const [checked, setChecked] = useState(value);
|
|
1680
1688
|
const toggle = useCallback(() => {
|
|
1681
1689
|
setChecked((prevChecked) => {
|
|
@@ -1937,6 +1945,11 @@ const DisableCopySettingDescriptor = {
|
|
|
1937
1945
|
defaultValue: false,
|
|
1938
1946
|
};
|
|
1939
1947
|
|
|
1948
|
+
/**
|
|
1949
|
+
* Hook that reads and writes a setting from the settings store.
|
|
1950
|
+
* @param descriptor The setting descriptor that identifies the setting and its default value.
|
|
1951
|
+
* @returns A tuple of [currentValue, setValue, resetValue] similar to React's useState.
|
|
1952
|
+
*/
|
|
1940
1953
|
function useSetting(descriptor) {
|
|
1941
1954
|
const settingsStore = useSettingsStore();
|
|
1942
1955
|
// Only watch for this specific setting to change. Otherwise, any time any setting changes we would
|
|
@@ -2014,7 +2027,7 @@ const UXContextProvider = (props) => {
|
|
|
2014
2027
|
function AsReadonlyArray(array) {
|
|
2015
2028
|
return array;
|
|
2016
2029
|
}
|
|
2017
|
-
const useStyles$
|
|
2030
|
+
const useStyles$S = makeStyles({
|
|
2018
2031
|
rootDiv: {
|
|
2019
2032
|
flex: 1,
|
|
2020
2033
|
overflow: "hidden",
|
|
@@ -2022,8 +2035,14 @@ const useStyles$R = makeStyles({
|
|
|
2022
2035
|
flexDirection: "column",
|
|
2023
2036
|
},
|
|
2024
2037
|
});
|
|
2038
|
+
/**
|
|
2039
|
+
* An accordion component that supports dynamically adding sections and section content at runtime.
|
|
2040
|
+
* Combines statically defined children sections with dynamically registered sections and content.
|
|
2041
|
+
* @param props The accordion props including sections, section content, context, and an optional imperative ref.
|
|
2042
|
+
* @returns The extensible accordion component.
|
|
2043
|
+
*/
|
|
2025
2044
|
function ExtensibleAccordion(props) {
|
|
2026
|
-
const classes = useStyles$
|
|
2045
|
+
const classes = useStyles$S();
|
|
2027
2046
|
const { children, sections, sectionContent, context, sectionsRef, ...rest } = props;
|
|
2028
2047
|
const defaultSections = useMemo(() => {
|
|
2029
2048
|
const defaultSections = [];
|
|
@@ -2148,7 +2167,7 @@ function ExtensibleAccordion(props) {
|
|
|
2148
2167
|
})] }) })) }));
|
|
2149
2168
|
}
|
|
2150
2169
|
|
|
2151
|
-
const useStyles$
|
|
2170
|
+
const useStyles$R = makeStyles({
|
|
2152
2171
|
paneRootDiv: {
|
|
2153
2172
|
display: "flex",
|
|
2154
2173
|
flex: 1,
|
|
@@ -2161,7 +2180,7 @@ const useStyles$Q = makeStyles({
|
|
|
2161
2180
|
*/
|
|
2162
2181
|
const SidePaneContainer = forwardRef((props, ref) => {
|
|
2163
2182
|
const { className, ...rest } = props;
|
|
2164
|
-
const classes = useStyles$
|
|
2183
|
+
const classes = useStyles$R();
|
|
2165
2184
|
return (jsx("div", { className: mergeClasses(classes.paneRootDiv, className), ref: ref, ...rest, children: props.children }));
|
|
2166
2185
|
});
|
|
2167
2186
|
|
|
@@ -2200,11 +2219,21 @@ const DarkTheme = {
|
|
|
2200
2219
|
colorNeutralForeground1: BaseDarkTheme.colorNeutralForeground2,
|
|
2201
2220
|
};
|
|
2202
2221
|
|
|
2222
|
+
/**
|
|
2223
|
+
* The unique identity symbol for the settings store service.
|
|
2224
|
+
*/
|
|
2203
2225
|
const SettingsStoreIdentity = Symbol("SettingsStore");
|
|
2204
2226
|
function GetKey(namespace, settingKey) {
|
|
2205
2227
|
return `Babylon/${namespace}/${settingKey}`;
|
|
2206
2228
|
}
|
|
2229
|
+
/**
|
|
2230
|
+
* Default implementation of {@link ISettingsStore} that persists settings using browser local storage.
|
|
2231
|
+
*/
|
|
2207
2232
|
class SettingsStore {
|
|
2233
|
+
/**
|
|
2234
|
+
* Creates a new settings store.
|
|
2235
|
+
* @param _namespace A namespace used to scope the settings keys to avoid collisions with other stores.
|
|
2236
|
+
*/
|
|
2208
2237
|
constructor(_namespace) {
|
|
2209
2238
|
this._namespace = _namespace;
|
|
2210
2239
|
this._onChanged = new Observable();
|
|
@@ -2223,10 +2252,17 @@ class SettingsStore {
|
|
|
2223
2252
|
}
|
|
2224
2253
|
}
|
|
2225
2254
|
|
|
2255
|
+
/**
|
|
2256
|
+
* The setting descriptor for persisting the theme mode preference.
|
|
2257
|
+
*/
|
|
2226
2258
|
const ThemeModeSettingDescriptor = {
|
|
2227
2259
|
key: "ThemeMode",
|
|
2228
2260
|
defaultValue: "system",
|
|
2229
2261
|
};
|
|
2262
|
+
/**
|
|
2263
|
+
* Resolves the current theme based on user preference and system settings.
|
|
2264
|
+
* Listens for changes to both the persisted theme mode and the OS-level dark mode preference.
|
|
2265
|
+
*/
|
|
2230
2266
|
class ThemeResolver {
|
|
2231
2267
|
constructor(_settingsStore) {
|
|
2232
2268
|
this._settingsStore = _settingsStore;
|
|
@@ -2264,6 +2300,9 @@ class ThemeResolver {
|
|
|
2264
2300
|
this._settingsStoreObserver.remove();
|
|
2265
2301
|
}
|
|
2266
2302
|
}
|
|
2303
|
+
/**
|
|
2304
|
+
* The unique identity symbol for the theme service.
|
|
2305
|
+
*/
|
|
2267
2306
|
const ThemeServiceIdentity = Symbol("ThemeService");
|
|
2268
2307
|
const ThemeServiceDefinition = {
|
|
2269
2308
|
friendlyName: "Theme Service",
|
|
@@ -2379,6 +2418,10 @@ function DepsEqual(a, b) {
|
|
|
2379
2418
|
return true;
|
|
2380
2419
|
}
|
|
2381
2420
|
|
|
2421
|
+
/**
|
|
2422
|
+
* Hook that provides the current theme mode state and controls for changing it.
|
|
2423
|
+
* @returns An object with the current dark mode state, theme mode, and functions to set or toggle the theme.
|
|
2424
|
+
*/
|
|
2382
2425
|
function useThemeMode() {
|
|
2383
2426
|
const settingsStore = useSettingsStore();
|
|
2384
2427
|
const themeResolver = useResource(useCallback(() => (settingsStore ? new ThemeResolver(settingsStore) : undefined), [settingsStore]));
|
|
@@ -2397,18 +2440,35 @@ function useThemeMode() {
|
|
|
2397
2440
|
}
|
|
2398
2441
|
return state;
|
|
2399
2442
|
}
|
|
2443
|
+
/**
|
|
2444
|
+
* Hook that returns the current Fluent UI theme based on the active theme mode.
|
|
2445
|
+
* @param invert If true, inverts the theme (returns light theme in dark mode and vice versa). Defaults to false.
|
|
2446
|
+
* @returns The current Fluent UI theme object.
|
|
2447
|
+
*/
|
|
2400
2448
|
function useTheme(invert = false) {
|
|
2401
2449
|
const { isDarkMode } = useThemeMode();
|
|
2402
2450
|
return isDarkMode !== invert ? DarkTheme : LightTheme;
|
|
2403
2451
|
}
|
|
2404
2452
|
|
|
2453
|
+
// Fluent doesn't apply styling to scrollbars by default, so provide our own reasonable default.
|
|
2454
|
+
const useStyles$Q = makeStyles({
|
|
2455
|
+
root: {
|
|
2456
|
+
scrollbarColor: `${tokens.colorNeutralForeground3} ${tokens.colorTransparentBackground}`,
|
|
2457
|
+
},
|
|
2458
|
+
});
|
|
2459
|
+
/**
|
|
2460
|
+
* A themed Fluent UI provider that applies the current theme mode (light or dark).
|
|
2461
|
+
* @param props Fluent provider props, plus an optional `invert` flag to swap the theme.
|
|
2462
|
+
* @returns The themed Fluent UI provider component.
|
|
2463
|
+
*/
|
|
2405
2464
|
const Theme = (props) => {
|
|
2406
|
-
// NOTE: We do not want to applyStylesToPortals by default.
|
|
2465
|
+
// NOTE: We do not want to applyStylesToPortals by default. It makes classes flow into portals
|
|
2407
2466
|
// (like popovers), and if those styles do things like disable overflow, they can completely
|
|
2408
2467
|
// break any UI within the portal. Therefore, default to false.
|
|
2409
|
-
const { invert = false, applyStylesToPortals = false, ...rest } = props;
|
|
2468
|
+
const { invert = false, applyStylesToPortals = false, className, ...rest } = props;
|
|
2410
2469
|
const theme = useTheme(invert);
|
|
2411
|
-
|
|
2470
|
+
const classes = useStyles$Q();
|
|
2471
|
+
return (jsx(FluentProvider, { theme: theme, className: mergeClasses(classes.root, className), applyStylesToPortals: applyStylesToPortals, ...rest, children: props.children }));
|
|
2412
2472
|
};
|
|
2413
2473
|
|
|
2414
2474
|
const useStyles$P = makeStyles({
|
|
@@ -2683,7 +2743,10 @@ const SwitchPropertyLine = (props) => {
|
|
|
2683
2743
|
return (jsx(PropertyLine, { ...props, children: jsx(Switch, { ...switchProps }) }));
|
|
2684
2744
|
};
|
|
2685
2745
|
|
|
2686
|
-
|
|
2746
|
+
/**
|
|
2747
|
+
* The unique identity symbol for the scene context service.
|
|
2748
|
+
*/
|
|
2749
|
+
const SceneContextIdentity = Symbol("SceneContext");
|
|
2687
2750
|
|
|
2688
2751
|
function ToFeaturesString(options) {
|
|
2689
2752
|
const { defaultWidth, defaultHeight, defaultLeft, defaultTop } = options;
|
|
@@ -2911,27 +2974,48 @@ function useResizeHandle(params) {
|
|
|
2911
2974
|
};
|
|
2912
2975
|
}
|
|
2913
2976
|
|
|
2977
|
+
/**
|
|
2978
|
+
* Setting descriptor for persisting side pane dock location overrides.
|
|
2979
|
+
*/
|
|
2914
2980
|
const SidePaneDockOverridesSettingDescriptor = {
|
|
2915
2981
|
key: "SidePaneDockOverrides",
|
|
2916
2982
|
defaultValue: {},
|
|
2917
2983
|
};
|
|
2984
|
+
/**
|
|
2985
|
+
* Setting descriptor for persisting the left side pane width adjustment.
|
|
2986
|
+
*/
|
|
2918
2987
|
const LeftSidePaneWidthAdjustSettingDescriptor = {
|
|
2919
2988
|
key: "Shell/LeftPane/WidthAdjust",
|
|
2920
2989
|
defaultValue: 0,
|
|
2921
2990
|
};
|
|
2991
|
+
/**
|
|
2992
|
+
* Setting descriptor for persisting the left side pane height adjustment.
|
|
2993
|
+
*/
|
|
2922
2994
|
const LeftSidePaneHeightAdjustSettingDescriptor = {
|
|
2923
2995
|
key: "Shell/LeftPane/HeightAdjust",
|
|
2924
2996
|
defaultValue: 0,
|
|
2925
2997
|
};
|
|
2998
|
+
/**
|
|
2999
|
+
* Setting descriptor for persisting the right side pane width adjustment.
|
|
3000
|
+
*/
|
|
2926
3001
|
const RightSidePaneWidthAdjustSettingDescriptor = {
|
|
2927
3002
|
key: "Shell/RightPane/WidthAdjust",
|
|
2928
3003
|
defaultValue: 0,
|
|
2929
3004
|
};
|
|
3005
|
+
/**
|
|
3006
|
+
* Setting descriptor for persisting the right side pane height adjustment.
|
|
3007
|
+
*/
|
|
2930
3008
|
const RightSidePaneHeightAdjustSettingDescriptor = {
|
|
2931
3009
|
key: "Shell/RightPane/HeightAdjust",
|
|
2932
3010
|
defaultValue: 0,
|
|
2933
3011
|
};
|
|
3012
|
+
/**
|
|
3013
|
+
* The unique identity symbol for the root component service.
|
|
3014
|
+
*/
|
|
2934
3015
|
const RootComponentServiceIdentity = Symbol("RootComponent");
|
|
3016
|
+
/**
|
|
3017
|
+
* The unique identity symbol for the shell service.
|
|
3018
|
+
*/
|
|
2935
3019
|
const ShellServiceIdentity = Symbol("ShellService");
|
|
2936
3020
|
const useStyles$N = makeStyles({
|
|
2937
3021
|
mainView: {
|
|
@@ -3047,8 +3131,18 @@ const useStyles$N = makeStyles({
|
|
|
3047
3131
|
},
|
|
3048
3132
|
paneHeaderText: {
|
|
3049
3133
|
flex: 1,
|
|
3134
|
+
},
|
|
3135
|
+
paneHeaderTextNoIcon: {
|
|
3050
3136
|
marginLeft: tokens.spacingHorizontalM,
|
|
3051
3137
|
},
|
|
3138
|
+
paneHeaderIcon: {
|
|
3139
|
+
display: "flex",
|
|
3140
|
+
alignItems: "center",
|
|
3141
|
+
justifyContent: "center",
|
|
3142
|
+
height: "100%",
|
|
3143
|
+
aspectRatio: "1",
|
|
3144
|
+
fontSize: "20px",
|
|
3145
|
+
},
|
|
3052
3146
|
paneHeaderButton: {
|
|
3053
3147
|
color: "inherit",
|
|
3054
3148
|
},
|
|
@@ -3137,7 +3231,7 @@ const DockMenu = (props) => {
|
|
|
3137
3231
|
const PaneHeader = (props) => {
|
|
3138
3232
|
const { id, title, dockOptions } = props;
|
|
3139
3233
|
const classes = useStyles$N();
|
|
3140
|
-
return (jsxs("div", { className: classes.paneHeaderDiv, children: [jsx(Subtitle2Stronger, { className: classes.paneHeaderText, children: title }), jsx(DockMenu, { sidePaneId: id, dockOptions: dockOptions, children: jsx(Button$1, { className: classes.paneHeaderButton, appearance: "transparent", icon: jsx(MoreHorizontalRegular, {}) }) })] }));
|
|
3234
|
+
return (jsxs("div", { className: classes.paneHeaderDiv, children: [props.icon && (jsx("div", { className: classes.paneHeaderIcon, children: jsx(props.icon, {}) })), jsx(Subtitle2Stronger, { className: mergeClasses(classes.paneHeaderText, !props.icon && classes.paneHeaderTextNoIcon), children: title }), jsx(DockMenu, { sidePaneId: id, dockOptions: dockOptions, children: jsx(Button$1, { className: classes.paneHeaderButton, appearance: "transparent", icon: jsx(MoreHorizontalRegular, {}) }) })] }));
|
|
3141
3235
|
};
|
|
3142
3236
|
// This is a wrapper for an item in a toolbar that simply adds a teaching moment, which is useful for dynamically added items, possibly from extensions.
|
|
3143
3237
|
const ToolbarItem = (props) => {
|
|
@@ -3317,9 +3411,9 @@ function usePane(location, defaultWidth, minWidth, sidePanes, onSelectSidePane,
|
|
|
3317
3411
|
}, [childWindow, isChildWindowOpen, topPanes, bottomPanes]);
|
|
3318
3412
|
// This memoizes the pane itself, which may or may not include the tab list, depending on the toolbar mode.
|
|
3319
3413
|
const corePane = useMemo(() => {
|
|
3320
|
-
return (jsxs(Fragment, { children: [toolbarMode === "compact" && (topPanes.length > 1 || topBarItems.length > 0) && (jsx(Fragment, { children: jsxs("div", { className: classes.barDiv, children: [!isChildWindowOpen && location === "left" && expandCollapseButton, topPaneTabList, jsx(Toolbar, { location: "top", components: topBarItems }), !isChildWindowOpen && location === "right" && expandCollapseButton] }) })), topPanes.length > 0 && (jsx("div", { className: classes.paneContent, children: topSelectedTab && (jsxs(Fragment, { children: [jsx(PaneHeader, { id: topSelectedTab.key, title: topSelectedTab.title, dockOptions: validTopDockOptions }), topPanes
|
|
3414
|
+
return (jsxs(Fragment, { children: [toolbarMode === "compact" && (topPanes.length > 1 || topBarItems.length > 0) && (jsx(Fragment, { children: jsxs("div", { className: classes.barDiv, children: [!isChildWindowOpen && location === "left" && expandCollapseButton, topPaneTabList, jsx(Toolbar, { location: "top", components: topBarItems }), !isChildWindowOpen && location === "right" && expandCollapseButton] }) })), topPanes.length > 0 && (jsx("div", { className: classes.paneContent, children: topSelectedTab && (jsxs(Fragment, { children: [jsx(PaneHeader, { id: topSelectedTab.key, title: topSelectedTab.title, icon: topPanes.length > 1 ? undefined : topSelectedTab.icon, dockOptions: validTopDockOptions }), topPanes
|
|
3321
3415
|
.filter((pane) => pane.key === topSelectedTab.key || pane.keepMounted)
|
|
3322
|
-
.map((pane) => (jsx("div", { className: mergeClasses(classes.paneContent, pane.key !== topSelectedTab.key ? classes.unselectedPane : undefined), children: jsx(ErrorBoundary, { name: pane.title, children: jsx(pane.content, {}) }) }, pane.key)))] })) })), topPanes.length > 0 && bottomPanes.length > 0 && jsx(Divider, { ref: paneVerticalResizeHandleRef, className: classes.paneDivider }), bottomPanes.length > 1 && (jsx(Fragment, { children: jsx("div", { className: classes.barDiv, children: bottomPaneTabList }) })), bottomPanes.length > 0 && (jsx("div", { ref: paneVerticalResizeElementRef, className: classes.paneContent, style: { height: `clamp(200px, calc(45% + var(${paneHeightAdjustCSSVar}, 0px)), 100% - 300px)`, flex: "0 0 auto" }, children: bottomSelectedTab && (jsxs(Fragment, { children: [jsx(PaneHeader, { id: bottomSelectedTab.key, title: bottomSelectedTab.title, dockOptions: validBottomDockOptions }), bottomPanes
|
|
3416
|
+
.map((pane) => (jsx("div", { className: mergeClasses(classes.paneContent, pane.key !== topSelectedTab.key ? classes.unselectedPane : undefined), children: jsx(ErrorBoundary, { name: pane.title, children: jsx(pane.content, {}) }) }, pane.key)))] })) })), topPanes.length > 0 && bottomPanes.length > 0 && jsx(Divider, { ref: paneVerticalResizeHandleRef, className: classes.paneDivider }), bottomPanes.length > 1 && (jsx(Fragment, { children: jsx("div", { className: classes.barDiv, children: bottomPaneTabList }) })), bottomPanes.length > 0 && (jsx("div", { ref: paneVerticalResizeElementRef, className: classes.paneContent, style: { height: `clamp(200px, calc(45% + var(${paneHeightAdjustCSSVar}, 0px)), 100% - 300px)`, flex: "0 0 auto" }, children: bottomSelectedTab && (jsxs(Fragment, { children: [jsx(PaneHeader, { id: bottomSelectedTab.key, title: bottomSelectedTab.title, icon: bottomPanes.length > 1 ? undefined : bottomSelectedTab.icon, dockOptions: validBottomDockOptions }), bottomPanes
|
|
3323
3417
|
.filter((pane) => pane.key === bottomSelectedTab.key || pane.keepMounted)
|
|
3324
3418
|
.map((pane) => (jsx("div", { className: mergeClasses(classes.paneContent, pane.key !== bottomSelectedTab.key ? classes.unselectedPane : undefined), children: jsx(ErrorBoundary, { name: pane.title, children: jsx(pane.content, {}) }) }, pane.key)))] })) })), toolbarMode === "compact" && bottomBarItems.length > 0 && (jsx(Fragment, { children: jsx("div", { className: classes.barDiv, children: jsx(Toolbar, { location: "bottom", components: bottomBarItems }) }) }))] }));
|
|
3325
3419
|
}, [
|
|
@@ -3592,6 +3686,9 @@ function MakeShellServiceDefinition({ leftPaneDefaultWidth = 350, leftPaneMinWid
|
|
|
3592
3686
|
};
|
|
3593
3687
|
}
|
|
3594
3688
|
|
|
3689
|
+
/**
|
|
3690
|
+
* The unique identity symbol for the settings service.
|
|
3691
|
+
*/
|
|
3595
3692
|
const SettingsServiceIdentity = Symbol("SettingsService");
|
|
3596
3693
|
const SettingsServiceDefinition = {
|
|
3597
3694
|
friendlyName: "Settings",
|
|
@@ -3637,7 +3734,10 @@ const SettingsServiceDefinition = {
|
|
|
3637
3734
|
},
|
|
3638
3735
|
};
|
|
3639
3736
|
|
|
3640
|
-
|
|
3737
|
+
/**
|
|
3738
|
+
* The unique identity symbol for the selection service.
|
|
3739
|
+
*/
|
|
3740
|
+
const SelectionServiceIdentity = Symbol("SelectionService");
|
|
3641
3741
|
const ShowPropertiesOnSelectionSettingDescriptor = {
|
|
3642
3742
|
key: "ShowPropertiesOnSelection",
|
|
3643
3743
|
defaultValue: true,
|
|
@@ -3645,8 +3745,8 @@ const ShowPropertiesOnSelectionSettingDescriptor = {
|
|
|
3645
3745
|
const SelectionServiceDefinition = {
|
|
3646
3746
|
friendlyName: "Selection Service",
|
|
3647
3747
|
produces: [SelectionServiceIdentity],
|
|
3648
|
-
consumes: [ShellServiceIdentity, SettingsStoreIdentity, SettingsServiceIdentity],
|
|
3649
|
-
factory: (shellService, settingsStore, settingsService) => {
|
|
3748
|
+
consumes: [ShellServiceIdentity, SettingsStoreIdentity, SettingsServiceIdentity, SceneContextIdentity],
|
|
3749
|
+
factory: (shellService, settingsStore, settingsService, sceneContext) => {
|
|
3650
3750
|
settingsService.addSectionContent({
|
|
3651
3751
|
key: "Selection Service Settings",
|
|
3652
3752
|
section: "UI",
|
|
@@ -3680,6 +3780,8 @@ const SelectionServiceDefinition = {
|
|
|
3680
3780
|
}
|
|
3681
3781
|
}
|
|
3682
3782
|
};
|
|
3783
|
+
// Set the scene as the default selected entity.
|
|
3784
|
+
setSelectedItem(sceneContext.currentScene);
|
|
3683
3785
|
return {
|
|
3684
3786
|
get selectedEntity() {
|
|
3685
3787
|
return selectedEntityState;
|
|
@@ -3693,6 +3795,9 @@ const SelectionServiceDefinition = {
|
|
|
3693
3795
|
},
|
|
3694
3796
|
};
|
|
3695
3797
|
|
|
3798
|
+
/**
|
|
3799
|
+
* The unique identity symbol for the properties service.
|
|
3800
|
+
*/
|
|
3696
3801
|
const PropertiesServiceIdentity = Symbol("PropertiesService");
|
|
3697
3802
|
/**
|
|
3698
3803
|
* Provides a properties pane that enables displaying and editing properties of an entity such as a mesh or a texture.
|
|
@@ -4649,6 +4754,9 @@ const SceneExplorer = (props) => {
|
|
|
4649
4754
|
} }) })] }));
|
|
4650
4755
|
};
|
|
4651
4756
|
|
|
4757
|
+
/**
|
|
4758
|
+
* The unique identity symbol for the scene explorer service.
|
|
4759
|
+
*/
|
|
4652
4760
|
const SceneExplorerServiceIdentity = Symbol("SceneExplorer");
|
|
4653
4761
|
/**
|
|
4654
4762
|
* Provides a scene explorer pane that enables browsing the scene graph and executing commands on entities.
|
|
@@ -4813,6 +4921,9 @@ const DebugPane = (props) => {
|
|
|
4813
4921
|
return (jsxs(ExtensibleAccordion, { ...props, children: [jsxs(AccordionSection, { title: "Helpers", children: [jsx(SwitchPropertyLine, { label: "Grid", description: "Display a ground grid.", value: !!scene.reservedDataStore.gridMesh, onChange: () => SwitchGrid(scene) }), jsx(SwitchPropertyLine, { label: "Physics", description: "Display physic debug info.", value: !!scene.reservedDataStore.physicsViewer, onChange: () => SwitchPhysicsViewers(scene) }), jsx(SwitchPropertyLine, { label: "Names", description: "Display mesh names.", value: !!scene.reservedDataStore.textRenderersHook, onChange: () => void SwitchNameViewerAsync(scene) })] }), jsxs(AccordionSection, { title: "Texture Channels", children: [jsx(BoundProperty, { component: SwitchPropertyLine, label: "Diffuse", target: StandardMaterial, propertyKey: "DiffuseTextureEnabled" }, "Diffuse"), jsx(BoundProperty, { component: SwitchPropertyLine, label: "Ambient", target: StandardMaterial, propertyKey: "AmbientTextureEnabled" }, "Ambient"), jsx(BoundProperty, { component: SwitchPropertyLine, label: "Specular", target: StandardMaterial, propertyKey: "SpecularTextureEnabled" }, "Specular"), jsx(BoundProperty, { component: SwitchPropertyLine, label: "Emissive", target: StandardMaterial, propertyKey: "EmissiveTextureEnabled" }, "Emissive"), jsx(BoundProperty, { component: SwitchPropertyLine, label: "Bump", target: StandardMaterial, propertyKey: "BumpTextureEnabled" }, "Bump"), jsx(BoundProperty, { component: SwitchPropertyLine, label: "Opacity", target: StandardMaterial, propertyKey: "OpacityTextureEnabled" }, "Opacity"), jsx(BoundProperty, { component: SwitchPropertyLine, label: "Reflection", target: StandardMaterial, propertyKey: "ReflectionTextureEnabled" }, "Reflection"), jsx(BoundProperty, { component: SwitchPropertyLine, label: "Refraction", target: StandardMaterial, propertyKey: "RefractionTextureEnabled" }, "Refraction"), jsx(BoundProperty, { component: SwitchPropertyLine, label: "Color Grading", target: StandardMaterial, propertyKey: "ColorGradingTextureEnabled" }, "ColorGrading"), jsx(BoundProperty, { component: SwitchPropertyLine, label: "Lightmap", target: StandardMaterial, propertyKey: "LightmapTextureEnabled" }, "Lightmap"), jsx(BoundProperty, { component: SwitchPropertyLine, label: "Fresnel", target: StandardMaterial, propertyKey: "FresnelEnabled" }, "Fresnel"), jsx(BoundProperty, { component: SwitchPropertyLine, label: "Detail", target: MaterialFlags, propertyKey: "DetailTextureEnabled" }, "Detail"), jsx(BoundProperty, { component: SwitchPropertyLine, label: "Decal", target: MaterialFlags, propertyKey: "DecalMapEnabled" }, "Decal")] }), jsxs(AccordionSection, { title: "Features", children: [jsx(BoundProperty, { component: SwitchPropertyLine, label: "Animations", target: scene, propertyKey: "animationsEnabled" }, "Animations"), jsx(BoundProperty, { component: SwitchPropertyLine, label: "Physics", target: scene, propertyKey: "physicsEnabled" }, "Physics"), jsx(BoundProperty, { component: SwitchPropertyLine, label: "Collisions", target: scene, propertyKey: "collisionsEnabled" }, "Collisions"), jsx(BoundProperty, { component: SwitchPropertyLine, label: "Fog", target: scene, propertyKey: "fogEnabled" }, "Fog"), jsx(BoundProperty, { component: SwitchPropertyLine, label: "Lens Flares", target: scene, propertyKey: "lensFlaresEnabled" }, "Lens flares"), jsx(BoundProperty, { component: SwitchPropertyLine, label: "Lights", target: scene, propertyKey: "lightsEnabled" }, "Lights"), jsx(BoundProperty, { component: SwitchPropertyLine, label: "Particles", target: scene, propertyKey: "particlesEnabled" }, "Particles"), jsx(BoundProperty, { component: SwitchPropertyLine, label: "Post-processes", target: scene, propertyKey: "postProcessesEnabled" }, "Post-processes"), jsx(BoundProperty, { component: SwitchPropertyLine, label: "Probes", target: scene, propertyKey: "probesEnabled" }, "Probes"), jsx(BoundProperty, { component: SwitchPropertyLine, label: "Textures", target: scene, propertyKey: "texturesEnabled" }, "Textures"), jsx(BoundProperty, { component: SwitchPropertyLine, label: "Procedural Textures", target: scene, propertyKey: "proceduralTexturesEnabled" }, "Procedural textures"), jsx(BoundProperty, { component: SwitchPropertyLine, label: "Render Targets", target: scene, propertyKey: "renderTargetsEnabled" }, "Render targets"), jsx(BoundProperty, { component: SwitchPropertyLine, label: "Shadows", target: scene, propertyKey: "shadowsEnabled" }, "Shadows"), jsx(BoundProperty, { component: SwitchPropertyLine, label: "Skeletons", target: scene, propertyKey: "skeletonsEnabled" }, "Skeletons"), jsx(BoundProperty, { component: SwitchPropertyLine, label: "Sprites", target: scene, propertyKey: "spritesEnabled" }, "Sprites")] })] }));
|
|
4814
4922
|
};
|
|
4815
4923
|
|
|
4924
|
+
/**
|
|
4925
|
+
* The unique identity symbol for the debug service.
|
|
4926
|
+
*/
|
|
4816
4927
|
const DebugServiceIdentity = Symbol("DebugService");
|
|
4817
4928
|
const DebugServiceDefinition = {
|
|
4818
4929
|
friendlyName: "Debug",
|
|
@@ -6925,6 +7036,9 @@ const SystemStats = ({ context: scene }) => {
|
|
|
6925
7036
|
return (jsxs(Fragment, { children: [jsx(TextPropertyLine, { label: "Resolution", value: resolution }, "Resolution"), jsx(StringifiedPropertyLine, { label: "Hardware Scaling Level", value: hardwareScalingLevel }, "HardwareScalingLevel"), jsx(TextPropertyLine, { label: "Engine", value: engine.description }, "Engine"), jsx(BooleanBadgePropertyLine, { label: "StdDerivatives", value: caps.standardDerivatives }, "StdDerivatives"), jsx(BooleanBadgePropertyLine, { label: "Compressed Textures", value: caps.s3tc !== undefined }, "CompressedTextures"), jsx(BooleanBadgePropertyLine, { label: "Hardware Instances", value: caps.instancedArrays }, "HardwareInstances"), jsx(BooleanBadgePropertyLine, { label: "Texture Float", value: caps.textureFloat }, "TextureFloat"), jsx(BooleanBadgePropertyLine, { label: "Texture Half Float", value: caps.textureHalfFloat }, "TextureHalfFloat"), jsx(BooleanBadgePropertyLine, { label: "Render to Texture Float", value: caps.textureFloatRender }, "RenderToTextureFloat"), jsx(BooleanBadgePropertyLine, { label: "Render to Texture Half Float", value: caps.textureHalfFloatRender }, "RenderToTextureHalfFloat"), jsx(BooleanBadgePropertyLine, { label: "32bits Indices", value: caps.uintIndices }, "32bitsIndices"), jsx(BooleanBadgePropertyLine, { label: "Fragment Depth", value: caps.fragmentDepthSupported }, "FragmentDepth"), jsx(BooleanBadgePropertyLine, { label: "High Precision Shaders", value: caps.highPrecisionShaderSupported }, "HighPrecisionShaders"), jsx(BooleanBadgePropertyLine, { label: "Draw Buffers", value: caps.drawBuffersExtension }, "DrawBuffers"), jsx(BooleanBadgePropertyLine, { label: "Vertex Array Object", value: caps.vertexArrayObject }, "VertexArrayObject"), jsx(BooleanBadgePropertyLine, { label: "Timer Query", value: caps.timerQuery !== undefined }, "TimerQuery"), jsx(BooleanBadgePropertyLine, { label: "Stencil", value: engine.isStencilEnable }, "Stencil"), jsx(BooleanBadgePropertyLine, { label: "Parallel Shader Compilation", value: caps.parallelShaderCompile != null }, "ParallelShaderCompilation"), jsx(StringifiedPropertyLine, { label: "Max Textures Units", value: caps.maxTexturesImageUnits }, "MaxTexturesUnits"), jsx(StringifiedPropertyLine, { label: "Max Textures Size", value: caps.maxTextureSize }, "MaxTexturesSize"), jsx(StringifiedPropertyLine, { label: "Max Anisotropy", value: caps.maxAnisotropy }, "MaxAnisotropy"), jsx(TextPropertyLine, { label: "Driver", value: engine.extractDriverInfo() }, "Driver")] }));
|
|
6926
7037
|
};
|
|
6927
7038
|
|
|
7039
|
+
/**
|
|
7040
|
+
* The unique identity symbol for the stats service.
|
|
7041
|
+
*/
|
|
6928
7042
|
const StatsServiceIdentity = Symbol("StatsService");
|
|
6929
7043
|
/**
|
|
6930
7044
|
* Provides a scene stats pane.
|
|
@@ -7005,6 +7119,9 @@ const ToolsPane = (props) => {
|
|
|
7005
7119
|
return jsx(ExtensibleAccordion, { ...props });
|
|
7006
7120
|
};
|
|
7007
7121
|
|
|
7122
|
+
/**
|
|
7123
|
+
* The unique identity symbol for the tools service.
|
|
7124
|
+
*/
|
|
7008
7125
|
const ToolsServiceIdentity = Symbol("ToolsService");
|
|
7009
7126
|
/**
|
|
7010
7127
|
* A collection of usually optional, dynamic extensions.
|
|
@@ -7230,6 +7347,9 @@ const WatcherSettingDescriptor = {
|
|
|
7230
7347
|
mode: "intercept",
|
|
7231
7348
|
},
|
|
7232
7349
|
};
|
|
7350
|
+
/**
|
|
7351
|
+
* The unique identity symbol for the watcher service.
|
|
7352
|
+
*/
|
|
7233
7353
|
const WatcherServiceIdentity = Symbol("WatcherService");
|
|
7234
7354
|
const WatcherServiceDefinition = {
|
|
7235
7355
|
friendlyName: "Watcher Service",
|
|
@@ -7375,6 +7495,9 @@ const WatcherRefreshToolbarServiceDefinition = {
|
|
|
7375
7495
|
},
|
|
7376
7496
|
};
|
|
7377
7497
|
|
|
7498
|
+
/**
|
|
7499
|
+
* The unique identity symbol for the gizmo service.
|
|
7500
|
+
*/
|
|
7378
7501
|
const GizmoServiceIdentity = Symbol("GizmoService");
|
|
7379
7502
|
const GizmoServiceDefinition = {
|
|
7380
7503
|
friendlyName: "Gizmo Service",
|
|
@@ -7656,7 +7779,7 @@ const DefaultInspectorExtensionFeed = new BuiltInsExtensionFeed("Inspector", [
|
|
|
7656
7779
|
keywords: ["creation", "tools"],
|
|
7657
7780
|
...BabylonWebResources,
|
|
7658
7781
|
author: { name: "Babylon.js", forumUserName: "" },
|
|
7659
|
-
getExtensionModuleAsync: async () => await import('./quickCreateToolsService-
|
|
7782
|
+
getExtensionModuleAsync: async () => await import('./quickCreateToolsService-B8OEbZg5.js'),
|
|
7660
7783
|
},
|
|
7661
7784
|
{
|
|
7662
7785
|
name: "Reflector",
|
|
@@ -7664,7 +7787,7 @@ const DefaultInspectorExtensionFeed = new BuiltInsExtensionFeed("Inspector", [
|
|
|
7664
7787
|
keywords: ["reflector", "bridge", "sync", "sandbox", "tools"],
|
|
7665
7788
|
...BabylonWebResources,
|
|
7666
7789
|
author: { name: "Babylon.js", forumUserName: "" },
|
|
7667
|
-
getExtensionModuleAsync: async () => await import('./reflectorService-
|
|
7790
|
+
getExtensionModuleAsync: async () => await import('./reflectorService-LPThzOok.js'),
|
|
7668
7791
|
},
|
|
7669
7792
|
]);
|
|
7670
7793
|
|
|
@@ -8393,7 +8516,7 @@ function MakeModularTool(options) {
|
|
|
8393
8516
|
}
|
|
8394
8517
|
// Register the extension list service (for browsing/installing extensions) if extension feeds are provided.
|
|
8395
8518
|
if (extensionFeeds.length > 0) {
|
|
8396
|
-
const { ExtensionListServiceDefinition } = await import('./extensionsListService-
|
|
8519
|
+
const { ExtensionListServiceDefinition } = await import('./extensionsListService-J1zZuhYY.js');
|
|
8397
8520
|
await serviceContainer.addServiceAsync(ExtensionListServiceDefinition);
|
|
8398
8521
|
}
|
|
8399
8522
|
// Register all external services (that make up a unique tool).
|
|
@@ -8534,11 +8657,10 @@ const GizmoToolbar = (props) => {
|
|
|
8534
8657
|
const onCameraGizmoChange = useCallback((e, data) => {
|
|
8535
8658
|
const value = data.checkedItems[0];
|
|
8536
8659
|
gizmoService.gizmoCamera = value === "-1" ? null : (cameras.find((camera) => camera.uniqueId.toString() === value) ?? null);
|
|
8537
|
-
}, [gizmoService]);
|
|
8660
|
+
}, [gizmoService, cameras]);
|
|
8538
8661
|
return (jsxs(Fragment, { children: [jsx(ToggleButton, { title: "Translate", checkedIcon: TranslateIcon, value: gizmoMode === "translate", onChange: () => updateGizmoMode("translate") }), jsx(ToggleButton, { title: "Rotate", checkedIcon: ArrowRotateClockwiseRegular, value: gizmoMode === "rotate", onChange: () => updateGizmoMode("rotate") }), jsx(ToggleButton, { title: "Scale", checkedIcon: ArrowExpandRegular, value: gizmoMode === "scale", onChange: () => updateGizmoMode("scale") }), jsx(ToggleButton, { title: "Bounding Box", checkedIcon: SelectObjectRegular, value: gizmoMode === "boundingBox", onChange: () => updateGizmoMode("boundingBox") }), jsx(Collapse, { visible: !!gizmoMode, orientation: "horizontal", children: jsxs(Menu, { positioning: "below-end", checkedValues: { coordinatesMode: [coordinatesMode.toString()] }, onCheckedValueChange: onCoordinatesModeChange, children: [jsx(MenuTrigger, { disableButtonEnhancement: true, children: (triggerProps) => (jsx(Tooltip$1, { content: "Coordinates Mode", relationship: "label", children: jsx(SplitButton, { className: classes.coordinatesModeButton, menuButton: triggerProps, primaryActionButton: {
|
|
8539
8662
|
onClick: toggleCoordinatesMode,
|
|
8540
|
-
}, size: "small", appearance: "transparent", shape: "rounded", icon: coordinatesMode === 1 /* GizmoCoordinatesMode.Local */ ? jsx(CubeRegular, {}) : jsx(GlobeRegular, {}) }) })) }), jsx(MenuPopover, { className: classes.coordinatesModeMenu, children: jsxs(MenuList, { children: [jsx(MenuItemRadio, { name: "coordinatesMode", value: 1 /* GizmoCoordinatesMode.Local */.toString(), children: "Local" }), jsx(MenuItemRadio, { name: "coordinatesMode", value: 0 /* GizmoCoordinatesMode.World */.toString(), children: "World" })] }) })] }) }), jsx(Collapse, { visible: !!gizmoMode, orientation: "horizontal", children: jsxs(Menu, { positioning: "below-end", checkedValues: { cameraGizmo: [cameraGizmo?.uniqueId.toString() ?? "-1"] }, onCheckedValueChange: onCameraGizmoChange, children: [jsx(MenuTrigger, { disableButtonEnhancement: true, children: (triggerProps) => (jsx(Tooltip$1, { content: "Camera Gizmo", relationship: "label", children: jsx(SplitButton, { className: classes.cameraGizmoButton, menuButton: triggerProps, size: "small", appearance: "transparent", shape: "rounded", icon: jsx(CameraRegular, {}) }) })) }), jsx(MenuPopover, { className: classes.cameraGizmoMenu, children: jsxs(MenuList, { children: [jsx(MenuItemRadio, { name: "cameraGizmo", value: "-1", children: "Automatic" }),
|
|
8541
|
-
sceneContext.currentScene.activeCameras?.map((camera, index) => (jsx(MenuItemRadio, { name: "cameraGizmo", value: camera.uniqueId.toString(), children: camera.name }, camera.uniqueId)))] }) })] }) })] }));
|
|
8663
|
+
}, size: "small", appearance: "transparent", shape: "rounded", icon: coordinatesMode === 1 /* GizmoCoordinatesMode.Local */ ? jsx(CubeRegular, {}) : jsx(GlobeRegular, {}) }) })) }), jsx(MenuPopover, { className: classes.coordinatesModeMenu, children: jsxs(MenuList, { children: [jsx(MenuItemRadio, { name: "coordinatesMode", value: 1 /* GizmoCoordinatesMode.Local */.toString(), children: "Local" }), jsx(MenuItemRadio, { name: "coordinatesMode", value: 0 /* GizmoCoordinatesMode.World */.toString(), children: "World" })] }) })] }) }), jsx(Collapse, { visible: !!gizmoMode && !!cameras && cameras.length > 1, orientation: "horizontal", children: jsxs(Menu, { positioning: "below-end", checkedValues: { cameraGizmo: [cameraGizmo?.uniqueId.toString() ?? "-1"] }, onCheckedValueChange: onCameraGizmoChange, children: [jsx(MenuTrigger, { disableButtonEnhancement: true, children: (triggerProps) => (jsx(Tooltip$1, { content: "Camera Gizmo", relationship: "label", children: jsx(SplitButton, { className: classes.cameraGizmoButton, menuButton: triggerProps, size: "small", appearance: "transparent", shape: "rounded", icon: jsx(CameraRegular, {}) }) })) }), jsx(MenuPopover, { className: classes.cameraGizmoMenu, children: jsxs(MenuList, { children: [jsx(MenuItemRadio, { name: "cameraGizmo", value: "-1", children: "Automatic" }), cameras?.map((camera) => (jsx(MenuItemRadio, { name: "cameraGizmo", value: camera.uniqueId.toString(), children: camera.name }, camera.uniqueId)))] }) })] }) })] }));
|
|
8542
8664
|
};
|
|
8543
8665
|
|
|
8544
8666
|
const GizmoToolbarServiceDefinition = {
|
|
@@ -11967,7 +12089,7 @@ const RangeFrameBar = ({ width }) => {
|
|
|
11967
12089
|
const x = frameToX(displayFrame);
|
|
11968
12090
|
return jsx("line", { className: styles.activeFrameLine, x1: x, y1: 0, x2: x, y2: 40 });
|
|
11969
12091
|
}, [displayFrame, frameToX, styles.activeFrameLine]);
|
|
11970
|
-
const viewBox = `${
|
|
12092
|
+
const viewBox = `${-OFFSET_X} 0 ${viewWidth + OFFSET_X * 4} 40`;
|
|
11971
12093
|
return (jsx("div", { className: styles.root, onPointerDown: handlePointerDown, onPointerMove: handlePointerMove, onPointerUp: handlePointerUp, onPointerCancel: handlePointerUp, children: jsxs("svg", { ref: svgRef, className: styles.svg, viewBox: viewBox, children: [frameTicks.map((frame, i) => {
|
|
11972
12094
|
const x = frameToX(frame);
|
|
11973
12095
|
return (jsxs("g", { children: [jsx("line", { className: styles.tickLine, x1: x, y1: 22, x2: x, y2: 40 }), jsx("text", { className: styles.tickLabel, x: x, y: 14, children: Math.round(frame) })] }, `tick-${frame}-${i}`));
|
|
@@ -14917,10 +15039,13 @@ function StringifyMetadata(metadata, format) {
|
|
|
14917
15039
|
return metadata;
|
|
14918
15040
|
}
|
|
14919
15041
|
if (metadata) {
|
|
14920
|
-
|
|
14921
|
-
|
|
15042
|
+
// Try JSON.stringify even for objects with functions — it safely omits
|
|
15043
|
+
// function-valued and undefined properties. Only fall back to String()
|
|
15044
|
+
// for cases that actually throw (e.g. circular references).
|
|
15045
|
+
try {
|
|
15046
|
+
return JSON.stringify(metadata, undefined, format ? PrettyJSONIndent : undefined);
|
|
14922
15047
|
}
|
|
14923
|
-
|
|
15048
|
+
catch {
|
|
14924
15049
|
return String(metadata);
|
|
14925
15050
|
}
|
|
14926
15051
|
}
|
|
@@ -14985,7 +15110,7 @@ const MetadataProperties = (props) => {
|
|
|
14985
15110
|
const classes = useStyles$h();
|
|
14986
15111
|
const { size } = useContext(ToolContext);
|
|
14987
15112
|
const metadata = useProperty(entity, "metadata");
|
|
14988
|
-
const stringifiedMetadata = useMemo(() => StringifyMetadata(metadata) ?? "", [metadata]);
|
|
15113
|
+
const stringifiedMetadata = useMemo(() => StringifyMetadata(metadata, false) ?? "", [metadata]);
|
|
14989
15114
|
const metadataType = useMemo(() => GetMetadataEntityType(metadata), [metadata]);
|
|
14990
15115
|
const canPreventObjectCorruption = metadataType === "object";
|
|
14991
15116
|
const [preventObjectCorruption, setPreventObjectCorruption] = useState(false);
|
|
@@ -15344,7 +15469,7 @@ const MeshMorphTargetsProperties = (props) => {
|
|
|
15344
15469
|
if (morphTargets.length === 0) {
|
|
15345
15470
|
return null;
|
|
15346
15471
|
}
|
|
15347
|
-
return (jsx(Fragment, { children: morphTargets.map((target, index) => (jsx(BoundProperty, { component:
|
|
15472
|
+
return (jsx(Fragment, { children: morphTargets.map((target, index) => (jsx(BoundProperty, { component: NumberInputPropertyLine, label: target.name || `Target ${index}`, description: `Influence of morph target "${target.name || `Target ${index}`}"`, target: target, propertyKey: "influence", step: 0.01 }, index))) }));
|
|
15348
15473
|
};
|
|
15349
15474
|
|
|
15350
15475
|
const NodeGeneralProperties = (props) => {
|
|
@@ -17227,7 +17352,8 @@ const SceneRenderingProperties = (props) => {
|
|
|
17227
17352
|
const { scene, selectionService } = props;
|
|
17228
17353
|
const envTexture = useProperty(scene, "environmentTexture");
|
|
17229
17354
|
const fogMode = useProperty(scene, "fogMode");
|
|
17230
|
-
|
|
17355
|
+
const useOIT = useProperty(scene, "useOrderIndependentTransparency");
|
|
17356
|
+
return (jsxs(Fragment, { children: [jsx(BoundProperty, { component: SwitchPropertyLine, label: "OIT", description: "Order Independent Transparency", target: scene, propertyKey: "useOrderIndependentTransparency" }), jsx(Collapse, { visible: useOIT, children: useOIT && scene.depthPeelingRenderer && (jsx(BoundProperty, { component: SyncedSliderPropertyLine, label: "passCount", description: "Render the number of transparent layers", target: scene.depthPeelingRenderer, propertyKey: "passCount", min: 2, max: 8, step: 1 })) }), jsx(NumberDropdownPropertyLine, { options: [
|
|
17231
17357
|
{ label: "Point", value: 0 },
|
|
17232
17358
|
{ label: "Wireframe", value: 1 },
|
|
17233
17359
|
{ label: "Solid", value: 2 },
|
|
@@ -19861,7 +19987,7 @@ const AnimationGroupExplorerServiceDefinition = {
|
|
|
19861
19987
|
},
|
|
19862
19988
|
};
|
|
19863
19989
|
},
|
|
19864
|
-
entityIcon: ({ entity }) =>
|
|
19990
|
+
entityIcon: ({ entity }) => entity instanceof AnimationGroup ? jsx(StackRegular, { color: tokens.colorPaletteBlueForeground2 }) : jsx(FilmstripRegular, { color: tokens.colorPaletteBlueForeground2 }),
|
|
19865
19991
|
getEntityAddedObservables: () => [scene.onNewAnimationGroupAddedObservable],
|
|
19866
19992
|
getEntityRemovedObservables: () => [scene.onAnimationGroupRemovedObservable],
|
|
19867
19993
|
});
|
|
@@ -19939,7 +20065,7 @@ const AtmosphereExplorerServiceDefinition = {
|
|
|
19939
20065
|
},
|
|
19940
20066
|
};
|
|
19941
20067
|
},
|
|
19942
|
-
entityIcon: () => jsx(WeatherSunnyLowFilled, {}),
|
|
20068
|
+
entityIcon: () => jsx(WeatherSunnyLowFilled, { color: tokens.colorPaletteYellowForeground2 }),
|
|
19943
20069
|
// TODO in order for inspector UX to display atmosphere created after inspector is created
|
|
19944
20070
|
getEntityAddedObservables: () => [],
|
|
19945
20071
|
getEntityRemovedObservables: () => [],
|
|
@@ -20010,7 +20136,7 @@ const EffectLayerExplorerServiceDefinition = {
|
|
|
20010
20136
|
},
|
|
20011
20137
|
};
|
|
20012
20138
|
},
|
|
20013
|
-
entityIcon: () => jsx(LayerRegular, {}),
|
|
20139
|
+
entityIcon: () => jsx(LayerRegular, { color: tokens.colorPaletteRedForeground2 }),
|
|
20014
20140
|
getEntityAddedObservables: () => [scene.onNewEffectLayerAddedObservable],
|
|
20015
20141
|
getEntityRemovedObservables: () => [scene.onEffectLayerRemovedObservable],
|
|
20016
20142
|
});
|
|
@@ -20048,7 +20174,7 @@ const FrameGraphExplorerServiceDefinition = {
|
|
|
20048
20174
|
},
|
|
20049
20175
|
};
|
|
20050
20176
|
},
|
|
20051
|
-
entityIcon: () => jsx(FrameRegular, {}),
|
|
20177
|
+
entityIcon: () => jsx(FrameRegular, { color: tokens.colorPaletteGreenForeground2 }),
|
|
20052
20178
|
getEntityAddedObservables: () => [scene.onNewFrameGraphAddedObservable],
|
|
20053
20179
|
getEntityRemovedObservables: () => [scene.onFrameGraphRemovedObservable],
|
|
20054
20180
|
});
|
|
@@ -20180,7 +20306,7 @@ const GuiExplorerServiceDefinition = {
|
|
|
20180
20306
|
},
|
|
20181
20307
|
};
|
|
20182
20308
|
},
|
|
20183
|
-
entityIcon: ({ entity }) =>
|
|
20309
|
+
entityIcon: ({ entity }) => IsAdvancedDynamicTexture(entity) ? (jsx(AppGenericRegular, { color: tokens.colorPaletteLilacForeground2 })) : (jsx(RectangleLandscapeRegular, { color: tokens.colorPaletteSeafoamForeground2 })),
|
|
20184
20310
|
getEntityAddedObservables: () => [guiEntityAddedObservable],
|
|
20185
20311
|
getEntityRemovedObservables: () => [guiEntityRemovedObservable],
|
|
20186
20312
|
});
|
|
@@ -20285,7 +20411,7 @@ const MaterialExplorerServiceDefinition = {
|
|
|
20285
20411
|
},
|
|
20286
20412
|
};
|
|
20287
20413
|
},
|
|
20288
|
-
entityIcon: () => jsx(MaterialIcon, {}),
|
|
20414
|
+
entityIcon: () => jsx(MaterialIcon, { color: tokens.colorPaletteMarigoldForeground2 }),
|
|
20289
20415
|
getEntityAddedObservables: () => [scene.onNewMaterialAddedObservable],
|
|
20290
20416
|
getEntityRemovedObservables: () => [scene.onMaterialRemovedObservable],
|
|
20291
20417
|
});
|
|
@@ -20367,7 +20493,7 @@ const NodeExplorerServiceDefinition = {
|
|
|
20367
20493
|
},
|
|
20368
20494
|
};
|
|
20369
20495
|
},
|
|
20370
|
-
entityIcon: ({ entity: node }) => node instanceof AbstractMesh ? (jsx(MeshIcon, {})) : node instanceof TransformNode ? (jsx(MyLocationRegular, {})) : node instanceof Camera ? (jsx(CameraRegular, {})) : node instanceof Light ? (jsx(LightbulbRegular, {})) : (jsx(Fragment, {})),
|
|
20496
|
+
entityIcon: ({ entity: node }) => node instanceof AbstractMesh ? (jsx(MeshIcon, { color: tokens.colorPaletteBlueForeground2 })) : node instanceof TransformNode ? (jsx(MyLocationRegular, { color: tokens.colorPaletteBlueForeground2 })) : node instanceof Camera ? (jsx(CameraRegular, { color: tokens.colorPaletteGreenForeground2 })) : node instanceof Light ? (jsx(LightbulbRegular, { color: tokens.colorPaletteYellowForeground2 })) : (jsx(Fragment, {})),
|
|
20371
20497
|
getEntityAddedObservables: () => [
|
|
20372
20498
|
scene.onNewMeshAddedObservable,
|
|
20373
20499
|
scene.onNewTransformNodeAddedObservable,
|
|
@@ -20633,7 +20759,7 @@ const ParticleSystemExplorerServiceDefinition = {
|
|
|
20633
20759
|
},
|
|
20634
20760
|
};
|
|
20635
20761
|
},
|
|
20636
|
-
entityIcon: () => jsx(DropRegular, {}),
|
|
20762
|
+
entityIcon: () => jsx(DropRegular, { color: tokens.colorPaletteCranberryForeground2 }),
|
|
20637
20763
|
getEntityAddedObservables: () => [scene.onNewParticleSystemAddedObservable],
|
|
20638
20764
|
getEntityRemovedObservables: () => [scene.onParticleSystemRemovedObservable],
|
|
20639
20765
|
});
|
|
@@ -20685,7 +20811,7 @@ const PostProcessExplorerServiceDefinition = {
|
|
|
20685
20811
|
},
|
|
20686
20812
|
};
|
|
20687
20813
|
},
|
|
20688
|
-
entityIcon: () => jsx(BlurRegular, {}),
|
|
20814
|
+
entityIcon: () => jsx(BlurRegular, { color: tokens.colorPaletteRedForeground2 }),
|
|
20689
20815
|
getEntityAddedObservables: () => [scene.onNewPostProcessAddedObservable],
|
|
20690
20816
|
getEntityRemovedObservables: () => [scene.onPostProcessRemovedObservable],
|
|
20691
20817
|
});
|
|
@@ -20717,7 +20843,7 @@ const RenderingPipelineExplorerServiceDefinition = {
|
|
|
20717
20843
|
},
|
|
20718
20844
|
};
|
|
20719
20845
|
},
|
|
20720
|
-
entityIcon: () => jsx(PipelineRegular, {}),
|
|
20846
|
+
entityIcon: () => jsx(PipelineRegular, { color: tokens.colorPaletteRedForeground2 }),
|
|
20721
20847
|
getEntityAddedObservables: () => [scene.postProcessRenderPipelineManager.onNewPipelineAddedObservable],
|
|
20722
20848
|
getEntityRemovedObservables: () => [scene.postProcessRenderPipelineManager.onPipelineRemovedObservable],
|
|
20723
20849
|
});
|
|
@@ -20759,7 +20885,7 @@ const SkeletonExplorerServiceDefinition = {
|
|
|
20759
20885
|
},
|
|
20760
20886
|
};
|
|
20761
20887
|
},
|
|
20762
|
-
entityIcon: ({ entity: skeletonOrBone }) =>
|
|
20888
|
+
entityIcon: ({ entity: skeletonOrBone }) => skeletonOrBone instanceof Skeleton ? (jsx(PersonWalkingRegular, { color: tokens.colorPaletteAnchorForeground2 })) : (jsx(DataLineRegular, { color: tokens.colorPaletteBeigeForeground2 })),
|
|
20763
20889
|
getEntityAddedObservables: () => [scene.onNewSkeletonAddedObservable],
|
|
20764
20890
|
getEntityRemovedObservables: () => [scene.onSkeletonRemovedObservable],
|
|
20765
20891
|
getEntityMovedObservables: () => [boneMovedObservable],
|
|
@@ -20820,7 +20946,7 @@ const SoundExplorerServiceDefinition = {
|
|
|
20820
20946
|
},
|
|
20821
20947
|
};
|
|
20822
20948
|
},
|
|
20823
|
-
entityIcon: () => jsx(SoundWaveCircleRegular, {}),
|
|
20949
|
+
entityIcon: () => jsx(SoundWaveCircleRegular, { color: tokens.colorPaletteForestForeground2 }),
|
|
20824
20950
|
getEntityAddedObservables: () => [soundAddedObservable],
|
|
20825
20951
|
getEntityRemovedObservables: () => [soundRemovedObservable],
|
|
20826
20952
|
});
|
|
@@ -20864,7 +20990,7 @@ const SpriteManagerExplorerServiceDefinition = {
|
|
|
20864
20990
|
},
|
|
20865
20991
|
};
|
|
20866
20992
|
},
|
|
20867
|
-
entityIcon: ({ entity: spriteEntity }) =>
|
|
20993
|
+
entityIcon: ({ entity: spriteEntity }) => spriteEntity instanceof Sprite ? (jsx(PersonSquareRegular, { color: tokens.colorPalettePeachForeground2 })) : (jsx(LayerDiagonalPersonRegular, { color: tokens.colorPalettePeachForeground2 })),
|
|
20868
20994
|
getEntityAddedObservables: () => [scene.onNewSpriteManagerAddedObservable],
|
|
20869
20995
|
getEntityRemovedObservables: () => [scene.onSpriteManagerRemovedObservable],
|
|
20870
20996
|
});
|
|
@@ -20936,7 +21062,7 @@ const TextureExplorerServiceDefinition = {
|
|
|
20936
21062
|
},
|
|
20937
21063
|
};
|
|
20938
21064
|
},
|
|
20939
|
-
entityIcon: ({ entity: texture }) =>
|
|
21065
|
+
entityIcon: ({ entity: texture }) => texture instanceof DynamicTexture ? jsx(ImageEditRegular, { color: tokens.colorPaletteGrapeForeground2 }) : jsx(ImageRegular, { color: tokens.colorPaletteGrapeForeground2 }),
|
|
20940
21066
|
getEntityAddedObservables: () => [scene.onNewTextureAddedObservable],
|
|
20941
21067
|
getEntityRemovedObservables: () => [scene.onTextureRemovedObservable],
|
|
20942
21068
|
});
|
|
@@ -20964,7 +21090,7 @@ const EquirectangularCaptureTool = ({ scene }) => {
|
|
|
20964
21090
|
};
|
|
20965
21091
|
|
|
20966
21092
|
const GIFCaptureTool = MakeLazyComponent(async () => {
|
|
20967
|
-
const gif = (await import('./gif-
|
|
21093
|
+
const gif = (await import('./gif-CdXfT-By.js').then(function (n) { return n.g; })).default;
|
|
20968
21094
|
// TODO: Figure out how to grab this from NPM package instead of CDN
|
|
20969
21095
|
const workerContent = await Tools.LoadFileAsync("https://cdn.jsdelivr.net/gh//terikon/gif.js.optimized@0.1.6/dist/gif.worker.js");
|
|
20970
21096
|
const workerBlob = new Blob([workerContent], { type: "application/javascript" });
|
|
@@ -21656,6 +21782,12 @@ const InspectorTokens = new WeakMap();
|
|
|
21656
21782
|
// This async lock is used to sequentialize all calls to ShowInspector and dispose of existing inspectors.
|
|
21657
21783
|
// This is needed because each time Inspector is shown or hidden, it is potentially mutating the same DOM element.
|
|
21658
21784
|
const InspectorLock = new AsyncLock();
|
|
21785
|
+
/**
|
|
21786
|
+
* Shows the inspector for the specified scene.
|
|
21787
|
+
* @param scene The scene to inspect.
|
|
21788
|
+
* @param options Optional configuration for the inspector.
|
|
21789
|
+
* @returns An {@link InspectorToken} that can be disposed to hide the inspector.
|
|
21790
|
+
*/
|
|
21659
21791
|
function ShowInspector(scene, options = {}) {
|
|
21660
21792
|
// Dispose of any existing inspector for this scene.
|
|
21661
21793
|
InspectorTokens.get(scene)?.dispose();
|
|
@@ -22686,5 +22818,5 @@ const TextAreaPropertyLine = (props) => {
|
|
|
22686
22818
|
// Attach Inspector v2 to Scene.debugLayer as a side effect for back compat.
|
|
22687
22819
|
AttachDebugLayer();
|
|
22688
22820
|
|
|
22689
|
-
export {
|
|
22690
|
-
//# sourceMappingURL=index-
|
|
22821
|
+
export { HexPropertyLine as $, Accordion as A, Button as B, CheckboxPropertyLine as C, ColorStepGradientComponent as D, ComboBox as E, ComboBoxPropertyLine as F, ConstructorFactory as G, ConvertOptions as H, DebugServiceIdentity as I, DetachDebugLayer as J, DraggableLine as K, LinkToEntity as L, MessageBar as M, NumberInputPropertyLine as N, Dropdown as O, Popover as P, EntitySelector as Q, ErrorBoundary as R, SpinButtonPropertyLine as S, TextInputPropertyLine as T, ExtensibleAccordion as U, Vector3PropertyLine as V, FactorGradientComponent as W, FactorGradientList as X, FileUploadLine as Y, GetPropertyDescriptor as Z, GizmoServiceIdentity as _, useProperty as a, Vector2PropertyLine as a$, InfoLabel as a0, InputHexField as a1, InputHsvField as a2, Inspector as a3, InterceptFunction as a4, InterceptProperty as a5, IsPropertyReadonly as a6, LineContainer as a7, LinkPropertyLine as a8, LinkToEntityPropertyLine as a9, SettingsStoreIdentity as aA, ShowInspector as aB, SidePaneContainer as aC, SkeletonSelector as aD, Slider as aE, SpinButton as aF, StatsServiceIdentity as aG, StringDropdown as aH, StringDropdownPropertyLine as aI, StringifiedPropertyLine as aJ, Switch as aK, SwitchPropertyLine as aL, SyncedSliderInput as aM, SyncedSliderPropertyLine as aN, TeachingMoment as aO, TextAreaPropertyLine as aP, TextInput as aQ, TextPropertyLine as aR, Textarea as aS, TextureSelector as aT, TextureUpload as aU, Theme as aV, ThemeServiceIdentity as aW, ToastProvider as aX, ToggleButton as aY, Tooltip as aZ, UploadButton as a_, List as aa, MakeDialogTeachingMoment as ab, MakeLazyComponent as ac, MakePopoverTeachingMoment as ad, MakePropertyHook as ae, MakeTeachingMoment as af, MaterialSelector as ag, NodeSelector as ah, NumberDropdown as ai, NumberDropdownPropertyLine as aj, ObservableCollection as ak, Pane as al, PlaceholderPropertyLine as am, PositionedPopover as an, PropertiesServiceIdentity as ao, Property as ap, PropertyContext as aq, PropertyLine as ar, QuaternionPropertyLine as as, RotationVectorPropertyLine as at, SceneExplorerServiceIdentity as au, SearchBar as av, SearchBox as aw, SelectionServiceDefinition as ax, SettingsServiceIdentity as ay, SettingsStore as az, ShellServiceIdentity as b, Vector4PropertyLine as b0, WatcherServiceIdentity as b1, useAngleConverters as b2, useAsyncResource as b3, useColor3Property as b4, useColor4Property as b5, useEventListener as b6, useEventfulState as b7, useInterceptObservable as b8, useKeyListener as b9, useKeyState as ba, useObservableCollection as bb, useOrderedObservableCollection as bc, usePollingObservable as bd, usePropertyChangedNotifier as be, useQuaternionProperty as bf, useResource as bg, useSetting as bh, useTheme as bi, useThemeMode as bj, useVector3Property as bk, SceneContextIdentity as c, SelectionServiceIdentity as d, useObservableState as e, AccordionSection as f, ButtonLine as g, ToolsServiceIdentity as h, useExtensionManager as i, Link as j, AccordionSectionItem as k, AttachDebugLayer as l, BooleanBadgePropertyLine as m, BoundProperty as n, BuiltInsExtensionFeed as o, Checkbox as p, ChildWindow as q, Collapse as r, Color3GradientComponent as s, Color3GradientList as t, useToast as u, Color3PropertyLine as v, Color4GradientComponent as w, Color4GradientList as x, Color4PropertyLine as y, ColorPickerPopup as z };
|
|
22822
|
+
//# sourceMappingURL=index-xzWdtYzo.js.map
|