@babylonjs/inspector 8.50.2 → 8.50.4
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-mLeB6usr.js → extensionsListService-CSNgtWE2.js} +3 -2
- package/lib/{extensionsListService-mLeB6usr.js.map → extensionsListService-CSNgtWE2.js.map} +1 -1
- package/lib/{index-xdZE0cq5.js → index-DNdlSwwf.js} +231 -70
- package/lib/index-DNdlSwwf.js.map +1 -0
- package/lib/index.d.ts +21 -10
- package/lib/index.js +2 -1
- package/lib/index.js.map +1 -1
- package/lib/{quickCreateToolsService-BhUIP4Xi.js → quickCreateToolsService-87Wg6d7G.js} +3 -2
- package/lib/{quickCreateToolsService-BhUIP4Xi.js.map → quickCreateToolsService-87Wg6d7G.js.map} +1 -1
- package/lib/{reflectorService-C9p7d-YK.js → reflectorService-CUscktdu.js} +3 -2
- package/lib/{reflectorService-C9p7d-YK.js.map → reflectorService-CUscktdu.js.map} +1 -1
- package/package.json +1 -1
- package/lib/index-xdZE0cq5.js.map +0 -1
|
@@ -145,6 +145,7 @@ import { ImportAnimationsAsync, SceneLoader } from '@babylonjs/core/Loading/scen
|
|
|
145
145
|
import { FilesInput } from '@babylonjs/core/Misc/filesInput.js';
|
|
146
146
|
import { GLTFLoaderAnimationStartMode, GLTFLoaderCoordinateSystemMode, GLTFLoaderDefaultOptions } from '@babylonjs/loaders/glTF/glTFFileLoader.js';
|
|
147
147
|
import { GLTFValidation } from '@babylonjs/loaders/glTF/glTFValidation.js';
|
|
148
|
+
import { SelectionOutlineLayer } from '@babylonjs/core/Layers/selectionOutlineLayer.js';
|
|
148
149
|
import { EngineStore } from '@babylonjs/core/Engines/engineStore.js';
|
|
149
150
|
import { DebugLayer } from '@babylonjs/core/Debug/debugLayer.js';
|
|
150
151
|
import { Lazy } from '@babylonjs/core/Misc/lazy.js';
|
|
@@ -1411,6 +1412,11 @@ const AccordionSectionItem = (props) => {
|
|
|
1411
1412
|
const accordionCtx = useContext(AccordionContext);
|
|
1412
1413
|
const itemState = useAccordionSectionItemState(props);
|
|
1413
1414
|
const [ctrlMode, setCtrlMode] = useState(false);
|
|
1415
|
+
const ctrlPressed = useKeyState("Control");
|
|
1416
|
+
const [mouseOver, setMouseOver] = useState(false);
|
|
1417
|
+
useEffect(() => {
|
|
1418
|
+
setCtrlMode(ctrlPressed && mouseOver);
|
|
1419
|
+
}, [ctrlPressed, mouseOver]);
|
|
1414
1420
|
// If static item or no context, just render children
|
|
1415
1421
|
if (staticItem || !accordionCtx || !itemState) {
|
|
1416
1422
|
return jsx(Fragment, { children: children });
|
|
@@ -1427,11 +1433,6 @@ const AccordionSectionItem = (props) => {
|
|
|
1427
1433
|
}
|
|
1428
1434
|
const pinnedContainer = isPinned ? pinnedContainerRef.current : null;
|
|
1429
1435
|
const showControls = inEditMode || ctrlMode;
|
|
1430
|
-
const ctrlPressed = useKeyState("Control");
|
|
1431
|
-
const [mouseOver, setMouseOver] = useState(false);
|
|
1432
|
-
useEffect(() => {
|
|
1433
|
-
setCtrlMode(ctrlPressed && mouseOver);
|
|
1434
|
-
}, [ctrlPressed, mouseOver]);
|
|
1435
1436
|
const itemElement = (jsxs("div", { className: classes.sectionItemContainer, style: isPinned ? { order: pinnedIndex } : undefined, onMouseMove: () => setMouseOver(true), onMouseLeave: () => setMouseOver(false), children: [showControls && (jsxs("div", { className: classes.sectionItemButtons, children: [features.hiding && (jsx(Button, { title: isHidden ? "Unhide" : "Hide", icon: isHidden ? EyeOffRegular : EyeFilled, appearance: "transparent", onClick: actions.toggleHidden })), features.pinning && (jsxs(Fragment, { children: [jsx(Button, { title: isPinned ? "Unpin" : "Pin", icon: isPinned ? PinFilled : PinRegular, appearance: "transparent", onClick: actions.togglePinned }), isPinned && (jsx(Button, { title: "Move up", icon: ArrowCircleUpRegular, appearance: "transparent", disabled: pinnedIndex === 0, onClick: actions.movePinnedUp }))] }))] })), jsx(AccordionItemDepthContext.Provider, { value: true, children: children })] }));
|
|
1436
1437
|
return pinnedContainer ? jsx(Portal, { mountNode: pinnedContainer, children: itemElement }) : itemElement;
|
|
1437
1438
|
};
|
|
@@ -2080,24 +2081,30 @@ const BabylonRamp = {
|
|
|
2080
2081
|
160: "#C6D8FF",
|
|
2081
2082
|
};
|
|
2082
2083
|
/* eslint-enable @typescript-eslint/naming-convention */
|
|
2084
|
+
const BaseLightTheme = createLightTheme(BabylonRamp);
|
|
2083
2085
|
const LightTheme = {
|
|
2084
|
-
...
|
|
2086
|
+
...BaseLightTheme,
|
|
2085
2087
|
// Reduce the max contrast between foreground and background by just replacing the most intense foreground color with the second most intense one.
|
|
2086
|
-
colorNeutralForeground1:
|
|
2088
|
+
colorNeutralForeground1: BaseLightTheme.colorNeutralForeground2,
|
|
2087
2089
|
};
|
|
2090
|
+
const BaseDarkTheme = createDarkTheme(BabylonRamp);
|
|
2088
2091
|
const DarkTheme = {
|
|
2089
|
-
...
|
|
2092
|
+
...BaseDarkTheme,
|
|
2090
2093
|
// Reduce the max contrast between foreground and background by just replacing the most intense foreground color with the second most intense one.
|
|
2091
|
-
colorNeutralForeground1:
|
|
2094
|
+
colorNeutralForeground1: BaseDarkTheme.colorNeutralForeground2,
|
|
2092
2095
|
};
|
|
2093
2096
|
|
|
2097
|
+
function useTheme(invert = false) {
|
|
2098
|
+
const { isDarkMode } = useThemeMode();
|
|
2099
|
+
return isDarkMode !== invert ? DarkTheme : LightTheme;
|
|
2100
|
+
}
|
|
2094
2101
|
const Theme = (props) => {
|
|
2095
2102
|
// NOTE: We do not want to applyStylesToPortals by default. If makes classes flow into portals
|
|
2096
2103
|
// (like popovers), and if those styles do things like disable overflow, they can completely
|
|
2097
2104
|
// break any UI within the portal. Therefore, default to false.
|
|
2098
2105
|
const { invert = false, applyStylesToPortals = false, ...rest } = props;
|
|
2099
|
-
const
|
|
2100
|
-
return (jsx(FluentProvider, { theme:
|
|
2106
|
+
const theme = useTheme(invert);
|
|
2107
|
+
return (jsx(FluentProvider, { theme: theme, applyStylesToPortals: applyStylesToPortals, ...rest, children: props.children }));
|
|
2101
2108
|
};
|
|
2102
2109
|
|
|
2103
2110
|
const useStyles$O = makeStyles({
|
|
@@ -2857,11 +2864,11 @@ const SidePaneTab = (props) => {
|
|
|
2857
2864
|
// This hook provides a side pane container and the tab list.
|
|
2858
2865
|
// In "compact" mode, the tab list is integrated into the pane itself.
|
|
2859
2866
|
// In "full" mode, the returned tab list is later injected into the toolbar.
|
|
2860
|
-
function usePane(location, defaultWidth, minWidth, sidePanes, onSelectSidePane, dockOperations, toolbarMode, topBarItems, bottomBarItems) {
|
|
2867
|
+
function usePane(location, defaultWidth, minWidth, sidePanes, onSelectSidePane, dockOperations, toolbarMode, topBarItems, bottomBarItems, initialCollapsed) {
|
|
2861
2868
|
const classes = useStyles$M();
|
|
2862
2869
|
const [topSelectedTab, setTopSelectedTab] = useState();
|
|
2863
2870
|
const [bottomSelectedTab, setBottomSelectedTab] = useState();
|
|
2864
|
-
const [collapsed, setCollapsed] = useState(
|
|
2871
|
+
const [collapsed, setCollapsed] = useState(initialCollapsed);
|
|
2865
2872
|
const childWindow = useRef(null);
|
|
2866
2873
|
const [isChildWindowOpen, setIsChildWindowOpen] = useState(false);
|
|
2867
2874
|
const paneContainerRef = useRef(null);
|
|
@@ -3024,9 +3031,10 @@ function usePane(location, defaultWidth, minWidth, sidePanes, onSelectSidePane,
|
|
|
3024
3031
|
const pane = useMemo(() => {
|
|
3025
3032
|
return (jsxs(Fragment, { children: [!isChildWindowOpen && (jsx("div", { ref: paneContainerRef, className: classes.paneContainer, children: (topPanes.length > 0 || bottomPanes.length > 0) && (jsxs("div", { className: `${classes.pane} ${location === "left" ? classes.paneLeft : classes.paneRight}`, children: [jsx(Collapse, { orientation: "horizontal", visible: !collapsed, children: jsx("div", { ref: paneHorizontalResizeElementRef, className: classes.paneContainer, style: { width: `clamp(${minWidth}px, calc(${defaultWidth}px + var(${paneWidthAdjustCSSVar}, 0px)), 1000px)` }, children: corePane }) }), jsx("div", { ref: paneHorizontalResizeHandleRef, className: `${classes.resizer} ${location === "left" ? classes.resizerLeft : classes.resizerRight}`, style: { pointerEvents: `${collapsed ? "none" : "auto"}` } })] })) })), jsx(ChildWindow, { imperativeRef: childWindow, onOpenChange: (isOpen) => setIsChildWindowOpen(isOpen), children: corePane })] }));
|
|
3026
3033
|
}, [collapsed, corePane]);
|
|
3027
|
-
|
|
3034
|
+
const hasPanes = topPanes.length > 0 || bottomPanes.length > 0;
|
|
3035
|
+
return [topPaneTabList, pane, collapsed, setCollapsed, isChildWindowOpen, setUndocked, hasPanes];
|
|
3028
3036
|
}
|
|
3029
|
-
function MakeShellServiceDefinition({ leftPaneDefaultWidth = 350, leftPaneMinWidth = 350, rightPaneDefaultWidth = 350, rightPaneMinWidth = 350, toolbarMode = "full", sidePaneRemapper = undefined, } = {}) {
|
|
3037
|
+
function MakeShellServiceDefinition({ leftPaneDefaultWidth = 350, leftPaneMinWidth = 350, rightPaneDefaultWidth = 350, rightPaneMinWidth = 350, leftPaneDefaultCollapsed = false, rightPaneDefaultCollapsed = false, toolbarMode = "full", sidePaneRemapper = undefined, } = {}) {
|
|
3030
3038
|
return {
|
|
3031
3039
|
friendlyName: "MainView",
|
|
3032
3040
|
produces: [ShellServiceIdentity, RootComponentServiceIdentity],
|
|
@@ -3036,17 +3044,24 @@ function MakeShellServiceDefinition({ leftPaneDefaultWidth = 350, leftPaneMinWid
|
|
|
3036
3044
|
const centralContentCollection = new ObservableCollection();
|
|
3037
3045
|
const onSelectSidePane = new Observable(undefined, true);
|
|
3038
3046
|
const onDockChanged = new Observable(undefined, true);
|
|
3047
|
+
const onCollapseChanged = new Observable();
|
|
3039
3048
|
const leftSidePaneContainerState = {
|
|
3040
3049
|
isPresent: false,
|
|
3041
3050
|
isDocked: true,
|
|
3042
3051
|
dock: () => onDockChanged.notifyObservers({ location: "left", dock: true }),
|
|
3043
3052
|
undock: () => onDockChanged.notifyObservers({ location: "left", dock: false }),
|
|
3053
|
+
isCollapsed: leftPaneDefaultCollapsed,
|
|
3054
|
+
collapse: () => onCollapseChanged.notifyObservers({ location: "left", collapsed: true }),
|
|
3055
|
+
expand: () => onCollapseChanged.notifyObservers({ location: "left", collapsed: false }),
|
|
3044
3056
|
};
|
|
3045
3057
|
const rightSidePaneContainerState = {
|
|
3046
3058
|
isPresent: false,
|
|
3047
3059
|
isDocked: true,
|
|
3048
3060
|
dock: () => onDockChanged.notifyObservers({ location: "right", dock: true }),
|
|
3049
3061
|
undock: () => onDockChanged.notifyObservers({ location: "right", dock: false }),
|
|
3062
|
+
isCollapsed: rightPaneDefaultCollapsed,
|
|
3063
|
+
collapse: () => onCollapseChanged.notifyObservers({ location: "right", collapsed: true }),
|
|
3064
|
+
expand: () => onCollapseChanged.notifyObservers({ location: "right", collapsed: false }),
|
|
3050
3065
|
};
|
|
3051
3066
|
const rootComponent = () => {
|
|
3052
3067
|
const classes = useStyles$M();
|
|
@@ -3181,16 +3196,24 @@ function MakeShellServiceDefinition({ leftPaneDefaultWidth = 350, leftPaneMinWid
|
|
|
3181
3196
|
const bottomBarLeftItems = useMemo(() => bottomToolBarItems.filter((entry) => coerceToolBarItemHorizontalLocation(entry) === "left"), [bottomToolBarItems, coerceToolBarItemHorizontalLocation]);
|
|
3182
3197
|
const bottomBarRightItems = useMemo(() => bottomToolBarItems.filter((entry) => coerceToolBarItemHorizontalLocation(entry) === "right"), [bottomToolBarItems, coerceToolBarItemHorizontalLocation]);
|
|
3183
3198
|
const centralContents = useOrderedObservableCollection(centralContentCollection);
|
|
3184
|
-
const [leftPaneTabList, leftPane, leftPaneCollapsed, setLeftPaneCollapsed, leftPaneUndocked, setLeftPaneUndocked] = usePane("left", leftPaneDefaultWidth, leftPaneMinWidth, coercedSidePanes, onSelectSidePane, sidePaneDockOperations, toolbarMode, topBarLeftItems, bottomBarLeftItems);
|
|
3199
|
+
const [leftPaneTabList, leftPane, leftPaneCollapsed, setLeftPaneCollapsed, leftPaneUndocked, setLeftPaneUndocked, leftPaneHasPanes] = usePane("left", leftPaneDefaultWidth, leftPaneMinWidth, coercedSidePanes, onSelectSidePane, sidePaneDockOperations, toolbarMode, topBarLeftItems, bottomBarLeftItems, leftPaneDefaultCollapsed);
|
|
3185
3200
|
useEffect(() => {
|
|
3186
3201
|
// Propagate shorter lived React component state out to longer lived service state.
|
|
3187
3202
|
leftSidePaneContainerState.isDocked = !leftPaneUndocked;
|
|
3188
3203
|
}, [leftPaneUndocked]);
|
|
3189
|
-
|
|
3204
|
+
useEffect(() => {
|
|
3205
|
+
// Propagate shorter lived React component state out to longer lived service state.
|
|
3206
|
+
leftSidePaneContainerState.isCollapsed = leftPaneCollapsed;
|
|
3207
|
+
}, [leftPaneCollapsed]);
|
|
3208
|
+
const [rightPaneTabList, rightPane, rightPaneCollapsed, setRightPaneCollapsed, rightPaneUndocked, setRightPaneUndocked, rightPaneHasPanes] = usePane("right", rightPaneDefaultWidth, rightPaneMinWidth, coercedSidePanes, onSelectSidePane, sidePaneDockOperations, toolbarMode, topBarRightItems, bottomBarRightItems, rightPaneDefaultCollapsed);
|
|
3190
3209
|
useEffect(() => {
|
|
3191
3210
|
// Propagate shorter lived React component state out to longer lived service state.
|
|
3192
3211
|
rightSidePaneContainerState.isDocked = !rightPaneUndocked;
|
|
3193
3212
|
}, [rightPaneUndocked]);
|
|
3213
|
+
useEffect(() => {
|
|
3214
|
+
// Propagate shorter lived React component state out to longer lived service state.
|
|
3215
|
+
rightSidePaneContainerState.isCollapsed = rightPaneCollapsed;
|
|
3216
|
+
}, [rightPaneCollapsed]);
|
|
3194
3217
|
useEffect(() => {
|
|
3195
3218
|
// If at the service level dock state change is requested, propagate to the React component state.
|
|
3196
3219
|
const observer = onDockChanged.add(({ location, dock }) => {
|
|
@@ -3207,7 +3230,23 @@ function MakeShellServiceDefinition({ leftPaneDefaultWidth = 350, leftPaneMinWid
|
|
|
3207
3230
|
rightSidePaneContainerState.isDocked = true;
|
|
3208
3231
|
};
|
|
3209
3232
|
}, [setLeftPaneUndocked, setRightPaneUndocked]);
|
|
3210
|
-
|
|
3233
|
+
useEffect(() => {
|
|
3234
|
+
// If at the service level collapse state change is requested, propagate to the React component state.
|
|
3235
|
+
const observer = onCollapseChanged.add(({ location, collapsed }) => {
|
|
3236
|
+
if (location === "left") {
|
|
3237
|
+
setLeftPaneCollapsed(collapsed);
|
|
3238
|
+
}
|
|
3239
|
+
else {
|
|
3240
|
+
setRightPaneCollapsed(collapsed);
|
|
3241
|
+
}
|
|
3242
|
+
});
|
|
3243
|
+
return () => {
|
|
3244
|
+
observer.remove();
|
|
3245
|
+
leftSidePaneContainerState.isCollapsed = false;
|
|
3246
|
+
rightSidePaneContainerState.isCollapsed = false;
|
|
3247
|
+
};
|
|
3248
|
+
}, [setLeftPaneCollapsed, setRightPaneCollapsed]);
|
|
3249
|
+
return (jsxs("div", { className: classes.mainView, children: [toolbarMode === "full" && (jsx(Fragment, { children: jsxs("div", { className: classes.barDiv, children: [leftPaneTabList, jsx(Toolbar, { location: "top", components: topToolBarItems }), rightPaneTabList] }) })), jsxs("div", { className: classes.verticallyCentralContent, children: [leftPane, jsxs("div", { className: classes.centralContent, children: [centralContents.map((entry) => (jsx(ErrorBoundary, { name: entry.key, children: jsx(entry.component, {}) }, entry.key))), toolbarMode === "compact" && (jsxs(Fragment, { children: [jsx(Fade, { visible: leftPaneCollapsed && leftPaneHasPanes, delay: 50, duration: 100, unmountOnExit: true, children: jsx("div", { className: mergeClasses(classes.expandButtonContainer, classes.expandButtonContainerLeft), children: jsx(Tooltip, { content: "Show Side Pane", children: jsx(Button$1, { className: classes.expandButton, icon: jsx(PanelLeftExpandRegular, {}), onClick: () => setLeftPaneCollapsed(false) }) }) }) }), jsx(Fade, { visible: rightPaneCollapsed && rightPaneHasPanes, delay: 50, duration: 100, unmountOnExit: true, children: jsx("div", { className: mergeClasses(classes.expandButtonContainer, classes.expandButtonContainerRight), children: jsx(Tooltip, { content: "Show Side Pane", children: jsx(Button$1, { className: classes.expandButton, icon: jsx(PanelRightExpandRegular, {}), onClick: () => setRightPaneCollapsed(false) }) }) }) })] }))] }), rightPane] }), toolbarMode === "full" && (jsx(Fragment, { children: jsx("div", { className: classes.barDiv, children: jsx(Toolbar, { location: "bottom", components: bottomToolBarItems }) }) }))] }));
|
|
3211
3250
|
};
|
|
3212
3251
|
rootComponent.displayName = "Shell Service Root";
|
|
3213
3252
|
return {
|
|
@@ -4495,6 +4534,7 @@ const SettingsServiceDefinition = {
|
|
|
4495
4534
|
let useEuler = DataStorage.ReadBoolean("Babylon/Settings/UseEuler", false);
|
|
4496
4535
|
let ignoreBackfacesForPicking = DataStorage.ReadBoolean("Babylon/Settings/IgnoreBackfacesForPicking", false);
|
|
4497
4536
|
let showPropertiesOnEntitySelection = DataStorage.ReadBoolean("Babylon/Settings/ShowPropertiesOnEntitySelection", true);
|
|
4537
|
+
let highlightSelectedEntity = DataStorage.ReadBoolean("Babylon/Settings/HighlightSelectedEntity", true);
|
|
4498
4538
|
const settings = {
|
|
4499
4539
|
get useDegrees() {
|
|
4500
4540
|
return useDegrees;
|
|
@@ -4540,6 +4580,17 @@ const SettingsServiceDefinition = {
|
|
|
4540
4580
|
DataStorage.WriteBoolean("Babylon/Settings/ShowPropertiesOnEntitySelection", showPropertiesOnEntitySelection);
|
|
4541
4581
|
this.settingsChangedObservable.notifyObservers(this);
|
|
4542
4582
|
},
|
|
4583
|
+
get highlightSelectedEntity() {
|
|
4584
|
+
return highlightSelectedEntity;
|
|
4585
|
+
},
|
|
4586
|
+
set highlightSelectedEntity(value) {
|
|
4587
|
+
if (highlightSelectedEntity === value) {
|
|
4588
|
+
return; // No change, no need to notify
|
|
4589
|
+
}
|
|
4590
|
+
highlightSelectedEntity = value;
|
|
4591
|
+
DataStorage.WriteBoolean("Babylon/Settings/HighlightSelectedEntity", highlightSelectedEntity);
|
|
4592
|
+
this.settingsChangedObservable.notifyObservers(this);
|
|
4593
|
+
},
|
|
4543
4594
|
settingsChangedObservable: new Observable(),
|
|
4544
4595
|
addSection: (section) => sectionsCollection.add(section),
|
|
4545
4596
|
addSectionContent: (content) => sectionContentCollection.add(content),
|
|
@@ -4560,19 +4611,16 @@ const SettingsServiceDefinition = {
|
|
|
4560
4611
|
const [compactMode, setCompactMode] = useCompactMode();
|
|
4561
4612
|
const [disableCopy, setDisableCopy] = useDisableCopy();
|
|
4562
4613
|
const [, , resetSidePaneLayout] = useSidePaneDockOverrides();
|
|
4563
|
-
|
|
4564
|
-
|
|
4565
|
-
|
|
4566
|
-
|
|
4567
|
-
|
|
4568
|
-
|
|
4569
|
-
|
|
4570
|
-
settings.ignoreBackfacesForPicking = checked
|
|
4571
|
-
|
|
4572
|
-
settings.
|
|
4573
|
-
} }), jsx(SwitchPropertyLine, { label: "Disable Copy Button", description: "Disables the copy to clipboard button on property lines. You can still Ctrl+Click on the label to copy.", value: disableCopy, onChange: (checked) => {
|
|
4574
|
-
setDisableCopy(checked);
|
|
4575
|
-
} }), jsx(ButtonLine, { label: "Reset Layout", onClick: resetSidePaneLayout })] }) })) }));
|
|
4614
|
+
const useDegrees = useProperty(settings, "useDegrees");
|
|
4615
|
+
const useEuler = useProperty(settings, "useEuler");
|
|
4616
|
+
const ignoreBackfacesForPicking = useProperty(settings, "ignoreBackfacesForPicking");
|
|
4617
|
+
const showPropertiesOnEntitySelection = useProperty(settings, "showPropertiesOnEntitySelection");
|
|
4618
|
+
const highlightSelectedEntity = useProperty(settings, "highlightSelectedEntity");
|
|
4619
|
+
return (jsx(Fragment, { children: scene && (jsxs(ExtensibleAccordion, { sections: sections, sectionContent: sectionContent, context: scene, children: [jsxs(AccordionSection, { title: "UI", children: [jsx(SwitchPropertyLine, { label: "Compact Mode", description: "Use a more compact UI with less spacing.", value: compactMode, onChange: (checked) => {
|
|
4620
|
+
setCompactMode(checked);
|
|
4621
|
+
} }), jsx(SwitchPropertyLine, { label: "Use Degrees", description: "Using degrees instead of radians.", value: useDegrees, onChange: (checked) => (settings.useDegrees = checked) }), jsx(SwitchPropertyLine, { label: "Only Show Euler Angles", description: "Only show Euler angles in rotation properties, rather than quaternions.", value: useEuler, onChange: (checked) => (settings.useEuler = checked) }), jsx(SwitchPropertyLine, { label: "Ignore Backfaces for Picking", description: "Ignore backfaces when picking.", value: ignoreBackfacesForPicking, onChange: (checked) => (settings.ignoreBackfacesForPicking = checked) }), jsx(SwitchPropertyLine, { label: "Show Properties on Selection", description: "Shows the Properties pane when an entity is selected.", value: showPropertiesOnEntitySelection, onChange: (checked) => (settings.showPropertiesOnEntitySelection = checked) }), jsx(SwitchPropertyLine, { label: "Disable Copy Button", description: "Disables the copy to clipboard button on property lines. You can still Ctrl+Click on the label to copy.", value: disableCopy, onChange: (checked) => {
|
|
4622
|
+
setDisableCopy(checked);
|
|
4623
|
+
} }), jsx(ButtonLine, { label: "Reset Layout", onClick: resetSidePaneLayout })] }), jsx(AccordionSection, { title: "Scene", children: jsx(SwitchPropertyLine, { label: "Highlight Selected Entity", description: "Highlight the selected mesh in the scene. Enabling this setting may impact rendering performance.", value: highlightSelectedEntity, onChange: (value) => (settings.highlightSelectedEntity = value) }) })] })) }));
|
|
4576
4624
|
},
|
|
4577
4625
|
});
|
|
4578
4626
|
settings.dispose = () => registration.dispose();
|
|
@@ -6683,7 +6731,7 @@ const DefaultInspectorExtensionFeed = new BuiltInsExtensionFeed("Inspector", [
|
|
|
6683
6731
|
keywords: ["creation", "tools"],
|
|
6684
6732
|
...BabylonWebResources,
|
|
6685
6733
|
author: { name: "Babylon.js", forumUserName: "" },
|
|
6686
|
-
getExtensionModuleAsync: async () => await import('./quickCreateToolsService-
|
|
6734
|
+
getExtensionModuleAsync: async () => await import('./quickCreateToolsService-87Wg6d7G.js'),
|
|
6687
6735
|
},
|
|
6688
6736
|
{
|
|
6689
6737
|
name: "Reflector",
|
|
@@ -6691,7 +6739,7 @@ const DefaultInspectorExtensionFeed = new BuiltInsExtensionFeed("Inspector", [
|
|
|
6691
6739
|
keywords: ["reflector", "bridge", "sync", "sandbox", "tools"],
|
|
6692
6740
|
...BabylonWebResources,
|
|
6693
6741
|
author: { name: "Babylon.js", forumUserName: "" },
|
|
6694
|
-
getExtensionModuleAsync: async () => await import('./reflectorService-
|
|
6742
|
+
getExtensionModuleAsync: async () => await import('./reflectorService-CUscktdu.js'),
|
|
6695
6743
|
},
|
|
6696
6744
|
]);
|
|
6697
6745
|
|
|
@@ -7458,6 +7506,8 @@ const ThemeSelectorServiceDefinition = {
|
|
|
7458
7506
|
},
|
|
7459
7507
|
};
|
|
7460
7508
|
|
|
7509
|
+
const ThemeServiceIdentity = Symbol("ThemeService");
|
|
7510
|
+
|
|
7461
7511
|
const useStyles$D = makeStyles({
|
|
7462
7512
|
app: {
|
|
7463
7513
|
colorScheme: "light dark",
|
|
@@ -7494,6 +7544,8 @@ function MakeModularTool(options) {
|
|
|
7494
7544
|
if (themeMode) {
|
|
7495
7545
|
SetThemeMode(themeMode);
|
|
7496
7546
|
}
|
|
7547
|
+
let theme;
|
|
7548
|
+
const themeChangedObservable = new Observable();
|
|
7497
7549
|
const modularToolRootComponent = () => {
|
|
7498
7550
|
const classes = useStyles$D();
|
|
7499
7551
|
const [extensionManagerContext, setExtensionManagerContext] = useState();
|
|
@@ -7501,6 +7553,10 @@ function MakeModularTool(options) {
|
|
|
7501
7553
|
const [requiredExtensionsDeferred, setRequiredExtensionsDeferred] = useState();
|
|
7502
7554
|
const [extensionInstallError, setExtensionInstallError] = useState();
|
|
7503
7555
|
const [rootComponent, setRootComponent] = useState();
|
|
7556
|
+
theme = useTheme();
|
|
7557
|
+
useEffect(() => {
|
|
7558
|
+
themeChangedObservable.notifyObservers();
|
|
7559
|
+
}, [theme]);
|
|
7504
7560
|
// This is the main async initialization.
|
|
7505
7561
|
useEffect(() => {
|
|
7506
7562
|
const initializeExtensionManagerAsync = async () => {
|
|
@@ -7519,9 +7575,23 @@ function MakeModularTool(options) {
|
|
|
7519
7575
|
};
|
|
7520
7576
|
},
|
|
7521
7577
|
});
|
|
7578
|
+
// Register a service that exposes the raw theme to other services outside the React tree.
|
|
7579
|
+
// React components can access the raw theme via the useTheme hook, or theme tokens via Fluent's tokens object.
|
|
7580
|
+
await serviceContainer.addServiceAsync({
|
|
7581
|
+
friendlyName: "Theme Service",
|
|
7582
|
+
produces: [ThemeServiceIdentity],
|
|
7583
|
+
factory: () => {
|
|
7584
|
+
return {
|
|
7585
|
+
get theme() {
|
|
7586
|
+
return theme;
|
|
7587
|
+
},
|
|
7588
|
+
onChanged: themeChangedObservable,
|
|
7589
|
+
};
|
|
7590
|
+
},
|
|
7591
|
+
});
|
|
7522
7592
|
// Register the extension list service (for browsing/installing extensions) if extension feeds are provided.
|
|
7523
7593
|
if (extensionFeeds.length > 0) {
|
|
7524
|
-
const { ExtensionListServiceDefinition } = await import('./extensionsListService-
|
|
7594
|
+
const { ExtensionListServiceDefinition } = await import('./extensionsListService-CSNgtWE2.js');
|
|
7525
7595
|
await serviceContainer.addServiceAsync(ExtensionListServiceDefinition);
|
|
7526
7596
|
}
|
|
7527
7597
|
// Register the theme selector service (for selecting the theme) if theming is configured.
|
|
@@ -7608,6 +7678,7 @@ function MakeModularTool(options) {
|
|
|
7608
7678
|
// Unmount and restore the original container element display.
|
|
7609
7679
|
if (!disposed) {
|
|
7610
7680
|
disposed = true;
|
|
7681
|
+
themeChangedObservable.clear();
|
|
7611
7682
|
reactRoot.unmount();
|
|
7612
7683
|
containerElement.style.display = originalContainerElementDisplay;
|
|
7613
7684
|
}
|
|
@@ -11832,7 +11903,7 @@ const GeospatialCameraLimitsProperties = (props) => {
|
|
|
11832
11903
|
if (!limits) {
|
|
11833
11904
|
return null;
|
|
11834
11905
|
}
|
|
11835
|
-
return (jsxs(Fragment, { children: [jsx(BoundProperty, { component: NumberInputPropertyLine, label: "Pitch Min", description: "Minimum pitch angle (0 = looking straight down)", target: limits, propertyKey: "pitchMin", propertyPath: "limits.pitchMin" }), jsx(BoundProperty, { component: NumberInputPropertyLine, label: "Pitch Max", description: "Maximum pitch angle (\u03C0/2 = horizon)", target: limits, propertyKey: "pitchMax", propertyPath: "limits.pitchMax" }), jsx(BoundProperty, { component: NumberInputPropertyLine, label: "Yaw Min", description: "Minimum yaw angle", target: limits, propertyKey: "yawMin", propertyPath: "limits.yawMin" }), jsx(BoundProperty, { component: NumberInputPropertyLine, label: "Yaw Max", description: "Maximum yaw angle", target: limits, propertyKey: "yawMax", propertyPath: "limits.yawMax" }), jsx(BoundProperty, { component: NumberInputPropertyLine, label: "Radius Min", description: "Minimum distance from center", target: limits, propertyKey: "radiusMin", propertyPath: "limits.radiusMin" }), jsx(BoundProperty, { component: NumberInputPropertyLine, label: "Radius Max", description: "Maximum distance from center", target: limits, propertyKey: "radiusMax", propertyPath: "limits.radiusMax" })
|
|
11906
|
+
return (jsxs(Fragment, { children: [jsx(BoundProperty, { component: NumberInputPropertyLine, label: "Pitch Min", description: "Minimum pitch angle (0 = looking straight down)", target: limits, propertyKey: "pitchMin", propertyPath: "limits.pitchMin" }), jsx(BoundProperty, { component: NumberInputPropertyLine, label: "Pitch Max", description: "Maximum pitch angle (\u03C0/2 = horizon)", target: limits, propertyKey: "pitchMax", propertyPath: "limits.pitchMax" }), jsx(BoundProperty, { component: NumberInputPropertyLine, label: "Yaw Min", description: "Minimum yaw angle", target: limits, propertyKey: "yawMin", propertyPath: "limits.yawMin" }), jsx(BoundProperty, { component: NumberInputPropertyLine, label: "Yaw Max", description: "Maximum yaw angle", target: limits, propertyKey: "yawMax", propertyPath: "limits.yawMax" }), jsx(BoundProperty, { component: NumberInputPropertyLine, label: "Radius Min", description: "Minimum distance from center", target: limits, propertyKey: "radiusMin", propertyPath: "limits.radiusMin" }), jsx(BoundProperty, { component: NumberInputPropertyLine, label: "Radius Max", description: "Maximum distance from center", target: limits, propertyKey: "radiusMax", propertyPath: "limits.radiusMax" })] }));
|
|
11836
11907
|
};
|
|
11837
11908
|
|
|
11838
11909
|
const MaskValidatorFn = (valueString) => {
|
|
@@ -12854,19 +12925,19 @@ const UpdateTexture = (file, material, textureSetter) => {
|
|
|
12854
12925
|
*/
|
|
12855
12926
|
const OpenPBRMaterialBaseProperties = (props) => {
|
|
12856
12927
|
const { material } = props;
|
|
12857
|
-
return (jsxs(Fragment, { children: [jsx(BoundProperty, { component: SyncedSliderPropertyLine, label: "Base Weight", target: material, propertyKey: "baseWeight", min: 0, max: 1, step: 0.01 }), jsx(FileUploadLine, { label: "Base Weight", accept: ".jpg, .png, .tga, .dds, .env, .exr", onClick: (files) => {
|
|
12928
|
+
return (jsxs(Fragment, { children: [jsx(BoundProperty, { component: SyncedSliderPropertyLine, label: "Base Weight", target: material, propertyKey: "baseWeight", min: 0, max: 1, step: 0.01 }), jsx(FileUploadLine, { label: "Base Weight", accept: ".jpg, .png, .webp, .tga, .dds, .env, .exr", onClick: (files) => {
|
|
12858
12929
|
if (files.length > 0) {
|
|
12859
12930
|
UpdateTexture(files[0], material, (texture) => (material.baseWeightTexture = texture));
|
|
12860
12931
|
}
|
|
12861
|
-
} }), jsx(BoundProperty, { component: Color3PropertyLine, label: "Base Color", target: material, propertyKey: "baseColor", isLinearMode: true }), jsx(FileUploadLine, { label: "Base Color", accept: ".jpg, .png, .tga, .dds, .env, .exr", onClick: (files) => {
|
|
12932
|
+
} }), jsx(BoundProperty, { component: Color3PropertyLine, label: "Base Color", target: material, propertyKey: "baseColor", isLinearMode: true }), jsx(FileUploadLine, { label: "Base Color", accept: ".jpg, .png, .webp, .tga, .dds, .env, .exr", onClick: (files) => {
|
|
12862
12933
|
if (files.length > 0) {
|
|
12863
12934
|
UpdateTexture(files[0], material, (texture) => (material.baseColorTexture = texture));
|
|
12864
12935
|
}
|
|
12865
|
-
} }), jsx(BoundProperty, { component: SyncedSliderPropertyLine, label: "Base Metalness", target: material, propertyKey: "baseMetalness", min: 0, max: 1, step: 0.01 }), jsx(FileUploadLine, { label: "Base Metalness", accept: ".jpg, .png, .tga, .dds, .env, .exr", onClick: (files) => {
|
|
12936
|
+
} }), jsx(BoundProperty, { component: SyncedSliderPropertyLine, label: "Base Metalness", target: material, propertyKey: "baseMetalness", min: 0, max: 1, step: 0.01 }), jsx(FileUploadLine, { label: "Base Metalness", accept: ".jpg, .png, .webp, .tga, .dds, .env, .exr", onClick: (files) => {
|
|
12866
12937
|
if (files.length > 0) {
|
|
12867
12938
|
UpdateTexture(files[0], material, (texture) => (material.baseMetalnessTexture = texture));
|
|
12868
12939
|
}
|
|
12869
|
-
} }), jsx(BoundProperty, { component: SyncedSliderPropertyLine, label: "Base Diffuse Roughness", target: material, propertyKey: "baseDiffuseRoughness", min: 0, max: 1, step: 0.01 }), jsx(FileUploadLine, { label: "Base Diffuse Roughness", accept: ".jpg, .png, .tga, .dds, .env, .exr", onClick: (files) => {
|
|
12940
|
+
} }), jsx(BoundProperty, { component: SyncedSliderPropertyLine, label: "Base Diffuse Roughness", target: material, propertyKey: "baseDiffuseRoughness", min: 0, max: 1, step: 0.01 }), jsx(FileUploadLine, { label: "Base Diffuse Roughness", accept: ".jpg, .png, .webp, .tga, .dds, .env, .exr", onClick: (files) => {
|
|
12870
12941
|
if (files.length > 0) {
|
|
12871
12942
|
UpdateTexture(files[0], material, (texture) => (material.baseDiffuseRoughnessTexture = texture));
|
|
12872
12943
|
}
|
|
@@ -12879,19 +12950,19 @@ const OpenPBRMaterialBaseProperties = (props) => {
|
|
|
12879
12950
|
*/
|
|
12880
12951
|
const OpenPBRMaterialSpecularProperties = (props) => {
|
|
12881
12952
|
const { material } = props;
|
|
12882
|
-
return (jsxs(Fragment, { children: [jsx(BoundProperty, { component: SyncedSliderPropertyLine, label: "Specular Weight", target: material, propertyKey: "specularWeight", min: 0, max: 1, step: 0.01 }), jsx(FileUploadLine, { label: "Specular Weight", accept: ".jpg, .png, .tga, .dds, .env, .exr", onClick: (files) => {
|
|
12953
|
+
return (jsxs(Fragment, { children: [jsx(BoundProperty, { component: SyncedSliderPropertyLine, label: "Specular Weight", target: material, propertyKey: "specularWeight", min: 0, max: 1, step: 0.01 }), jsx(FileUploadLine, { label: "Specular Weight", accept: ".jpg, .png, .webp, .tga, .dds, .env, .exr", onClick: (files) => {
|
|
12883
12954
|
if (files.length > 0) {
|
|
12884
12955
|
UpdateTexture(files[0], material, (texture) => (material.specularWeightTexture = texture));
|
|
12885
12956
|
}
|
|
12886
|
-
} }), jsx(BoundProperty, { component: Color3PropertyLine, label: "Specular Color", target: material, propertyKey: "specularColor", isLinearMode: true }), jsx(FileUploadLine, { label: "Specular Color", accept: ".jpg, .png, .tga, .dds, .env, .exr", onClick: (files) => {
|
|
12957
|
+
} }), jsx(BoundProperty, { component: Color3PropertyLine, label: "Specular Color", target: material, propertyKey: "specularColor", isLinearMode: true }), jsx(FileUploadLine, { label: "Specular Color", accept: ".jpg, .png, .webp, .tga, .dds, .env, .exr", onClick: (files) => {
|
|
12887
12958
|
if (files.length > 0) {
|
|
12888
12959
|
UpdateTexture(files[0], material, (texture) => (material.specularColorTexture = texture));
|
|
12889
12960
|
}
|
|
12890
|
-
} }), jsx(BoundProperty, { component: SyncedSliderPropertyLine, label: "Specular Roughness", target: material, propertyKey: "specularRoughness", min: 0, max: 1, step: 0.01 }), jsx(FileUploadLine, { label: "Specular Roughness", accept: ".jpg, .png, .tga, .dds, .env, .exr", onClick: (files) => {
|
|
12961
|
+
} }), jsx(BoundProperty, { component: SyncedSliderPropertyLine, label: "Specular Roughness", target: material, propertyKey: "specularRoughness", min: 0, max: 1, step: 0.01 }), jsx(FileUploadLine, { label: "Specular Roughness", accept: ".jpg, .png, .webp, .tga, .dds, .env, .exr", onClick: (files) => {
|
|
12891
12962
|
if (files.length > 0) {
|
|
12892
12963
|
UpdateTexture(files[0], material, (texture) => (material.specularRoughnessTexture = texture));
|
|
12893
12964
|
}
|
|
12894
|
-
} }), jsx(BoundProperty, { component: SyncedSliderPropertyLine, label: "Specular Roughness Anisotropy", target: material, propertyKey: "specularRoughnessAnisotropy", min: 0, max: 1, step: 0.01 }), jsx(FileUploadLine, { label: "Specular Roughness Anisotropy", accept: ".jpg, .png, .tga, .dds, .env, .exr", onClick: (files) => {
|
|
12965
|
+
} }), jsx(BoundProperty, { component: SyncedSliderPropertyLine, label: "Specular Roughness Anisotropy", target: material, propertyKey: "specularRoughnessAnisotropy", min: 0, max: 1, step: 0.01 }), jsx(FileUploadLine, { label: "Specular Roughness Anisotropy", accept: ".jpg, .png, .webp, .tga, .dds, .env, .exr", onClick: (files) => {
|
|
12895
12966
|
if (files.length > 0) {
|
|
12896
12967
|
UpdateTexture(files[0], material, (texture) => (material.specularRoughnessAnisotropyTexture = texture));
|
|
12897
12968
|
}
|
|
@@ -12899,23 +12970,23 @@ const OpenPBRMaterialSpecularProperties = (props) => {
|
|
|
12899
12970
|
};
|
|
12900
12971
|
const OpenPBRMaterialTransmissionProperties = (props) => {
|
|
12901
12972
|
const { material } = props;
|
|
12902
|
-
return (jsxs(Fragment, { children: [jsx(BoundProperty, { component: SyncedSliderPropertyLine, label: "Transmission Weight", target: material, propertyKey: "transmissionWeight", min: 0, max: 1, step: 0.01 }), jsx(FileUploadLine, { label: "Transmission Weight", accept: ".jpg, .png, .tga, .dds, .env, .exr", onClick: (files) => {
|
|
12973
|
+
return (jsxs(Fragment, { children: [jsx(BoundProperty, { component: SyncedSliderPropertyLine, label: "Transmission Weight", target: material, propertyKey: "transmissionWeight", min: 0, max: 1, step: 0.01 }), jsx(FileUploadLine, { label: "Transmission Weight", accept: ".jpg, .png, .webp, .tga, .dds, .env, .exr", onClick: (files) => {
|
|
12903
12974
|
if (files.length > 0) {
|
|
12904
12975
|
UpdateTexture(files[0], material, (texture) => (material.transmissionWeightTexture = texture));
|
|
12905
12976
|
}
|
|
12906
|
-
} }), jsx(BoundProperty, { component: Color3PropertyLine, label: "Transmission Color", target: material, propertyKey: "transmissionColor", isLinearMode: true }), jsx(FileUploadLine, { label: "Transmission Color", accept: ".jpg, .png, .tga, .dds, .env, .exr", onClick: (files) => {
|
|
12977
|
+
} }), jsx(BoundProperty, { component: Color3PropertyLine, label: "Transmission Color", target: material, propertyKey: "transmissionColor", isLinearMode: true }), jsx(FileUploadLine, { label: "Transmission Color", accept: ".jpg, .png, .webp, .tga, .dds, .env, .exr", onClick: (files) => {
|
|
12907
12978
|
if (files.length > 0) {
|
|
12908
12979
|
UpdateTexture(files[0], material, (texture) => (material.transmissionColorTexture = texture));
|
|
12909
12980
|
}
|
|
12910
|
-
} }), jsx(BoundProperty, { component: SyncedSliderPropertyLine, label: "Transmission Depth", target: material, propertyKey: "transmissionDepth", min: 0, step: 0.01 }), jsx(FileUploadLine, { label: "Transmission Depth", accept: ".jpg, .png, .tga, .dds, .env, .exr", onClick: (files) => {
|
|
12981
|
+
} }), jsx(BoundProperty, { component: SyncedSliderPropertyLine, label: "Transmission Depth", target: material, propertyKey: "transmissionDepth", min: 0, step: 0.01 }), jsx(FileUploadLine, { label: "Transmission Depth", accept: ".jpg, .png, .webp, .tga, .dds, .env, .exr", onClick: (files) => {
|
|
12911
12982
|
if (files.length > 0) {
|
|
12912
12983
|
UpdateTexture(files[0], material, (texture) => (material.transmissionDepthTexture = texture));
|
|
12913
12984
|
}
|
|
12914
|
-
} }), jsx(BoundProperty, { component: Color3PropertyLine, label: "Transmission Scatter", target: material, propertyKey: "transmissionScatter", isLinearMode: true }), jsx(FileUploadLine, { label: "Transmission Scatter", accept: ".jpg, .png, .tga, .dds, .env, .exr", onClick: (files) => {
|
|
12985
|
+
} }), jsx(BoundProperty, { component: Color3PropertyLine, label: "Transmission Scatter", target: material, propertyKey: "transmissionScatter", isLinearMode: true }), jsx(FileUploadLine, { label: "Transmission Scatter", accept: ".jpg, .png, .webp, .tga, .dds, .env, .exr", onClick: (files) => {
|
|
12915
12986
|
if (files.length > 0) {
|
|
12916
12987
|
UpdateTexture(files[0], material, (texture) => (material.transmissionScatterTexture = texture));
|
|
12917
12988
|
}
|
|
12918
|
-
} }), jsx(BoundProperty, { component: SyncedSliderPropertyLine, label: "Transmission Scatter Anisotropy", target: material, propertyKey: "transmissionScatterAnisotropy", min: -1, max: 1, step: 0.01 }), jsx(BoundProperty, { component: SyncedSliderPropertyLine, label: "Transmission Dispersion Abbe Number", target: material, propertyKey: "transmissionDispersionAbbeNumber", min: 1, max: 100, step: 1 }), jsx(BoundProperty, { component: SyncedSliderPropertyLine, label: "Transmission Dispersion Scale", target: material, propertyKey: "transmissionDispersionScale", min: 0, max: 1, step: 0.01 }), jsx(FileUploadLine, { label: "Transmission Dispersion Scale", accept: ".jpg, .png, .tga, .dds, .env, .exr", onClick: (files) => {
|
|
12989
|
+
} }), jsx(BoundProperty, { component: SyncedSliderPropertyLine, label: "Transmission Scatter Anisotropy", target: material, propertyKey: "transmissionScatterAnisotropy", min: -1, max: 1, step: 0.01 }), jsx(BoundProperty, { component: SyncedSliderPropertyLine, label: "Transmission Dispersion Abbe Number", target: material, propertyKey: "transmissionDispersionAbbeNumber", min: 1, max: 100, step: 1 }), jsx(BoundProperty, { component: SyncedSliderPropertyLine, label: "Transmission Dispersion Scale", target: material, propertyKey: "transmissionDispersionScale", min: 0, max: 1, step: 0.01 }), jsx(FileUploadLine, { label: "Transmission Dispersion Scale", accept: ".jpg, .png, .webp, .tga, .dds, .env, .exr", onClick: (files) => {
|
|
12919
12990
|
if (files.length > 0) {
|
|
12920
12991
|
UpdateTexture(files[0], material, (texture) => (material.transmissionDispersionScaleTexture = texture));
|
|
12921
12992
|
}
|
|
@@ -12928,23 +12999,23 @@ const OpenPBRMaterialTransmissionProperties = (props) => {
|
|
|
12928
12999
|
*/
|
|
12929
13000
|
const OpenPBRMaterialCoatProperties = (props) => {
|
|
12930
13001
|
const { material } = props;
|
|
12931
|
-
return (jsxs(Fragment, { children: [jsx(BoundProperty, { component: SyncedSliderPropertyLine, label: "Coat Weight", target: material, propertyKey: "coatWeight", min: 0, max: 1, step: 0.01 }), jsx(FileUploadLine, { label: "Coat Weight", accept: ".jpg, .png, .tga, .dds, .env, .exr", onClick: (files) => {
|
|
13002
|
+
return (jsxs(Fragment, { children: [jsx(BoundProperty, { component: SyncedSliderPropertyLine, label: "Coat Weight", target: material, propertyKey: "coatWeight", min: 0, max: 1, step: 0.01 }), jsx(FileUploadLine, { label: "Coat Weight", accept: ".jpg, .png, .webp, .tga, .dds, .env, .exr", onClick: (files) => {
|
|
12932
13003
|
if (files.length > 0) {
|
|
12933
13004
|
UpdateTexture(files[0], material, (texture) => (material.coatWeightTexture = texture));
|
|
12934
13005
|
}
|
|
12935
|
-
} }), jsx(BoundProperty, { component: Color3PropertyLine, label: "Coat Color", target: material, propertyKey: "coatColor", isLinearMode: true }), jsx(FileUploadLine, { label: "Coat Color", accept: ".jpg, .png, .tga, .dds, .env, .exr", onClick: (files) => {
|
|
13006
|
+
} }), jsx(BoundProperty, { component: Color3PropertyLine, label: "Coat Color", target: material, propertyKey: "coatColor", isLinearMode: true }), jsx(FileUploadLine, { label: "Coat Color", accept: ".jpg, .png, .webp, .tga, .dds, .env, .exr", onClick: (files) => {
|
|
12936
13007
|
if (files.length > 0) {
|
|
12937
13008
|
UpdateTexture(files[0], material, (texture) => (material.coatColorTexture = texture));
|
|
12938
13009
|
}
|
|
12939
|
-
} }), jsx(BoundProperty, { component: SyncedSliderPropertyLine, label: "Coat Roughness", target: material, propertyKey: "coatRoughness", min: 0, max: 1, step: 0.01 }), jsx(FileUploadLine, { label: "Coat Roughness", accept: ".jpg, .png, .tga, .dds, .env, .exr", onClick: (files) => {
|
|
13010
|
+
} }), jsx(BoundProperty, { component: SyncedSliderPropertyLine, label: "Coat Roughness", target: material, propertyKey: "coatRoughness", min: 0, max: 1, step: 0.01 }), jsx(FileUploadLine, { label: "Coat Roughness", accept: ".jpg, .png, .webp, .tga, .dds, .env, .exr", onClick: (files) => {
|
|
12940
13011
|
if (files.length > 0) {
|
|
12941
13012
|
UpdateTexture(files[0], material, (texture) => (material.coatRoughnessTexture = texture));
|
|
12942
13013
|
}
|
|
12943
|
-
} }), jsx(BoundProperty, { component: SyncedSliderPropertyLine, label: "Coat Roughness Anisotropy", target: material, propertyKey: "coatRoughnessAnisotropy", min: 0, max: 1, step: 0.01 }), jsx(FileUploadLine, { label: "Coat Roughness Anisotropy", accept: ".jpg, .png, .tga, .dds, .env, .exr", onClick: (files) => {
|
|
13014
|
+
} }), jsx(BoundProperty, { component: SyncedSliderPropertyLine, label: "Coat Roughness Anisotropy", target: material, propertyKey: "coatRoughnessAnisotropy", min: 0, max: 1, step: 0.01 }), jsx(FileUploadLine, { label: "Coat Roughness Anisotropy", accept: ".jpg, .png, .webp, .tga, .dds, .env, .exr", onClick: (files) => {
|
|
12944
13015
|
if (files.length > 0) {
|
|
12945
13016
|
UpdateTexture(files[0], material, (texture) => (material.coatRoughnessAnisotropyTexture = texture));
|
|
12946
13017
|
}
|
|
12947
|
-
} }), jsx(BoundProperty, { component: SyncedSliderPropertyLine, label: "Coat IOR", target: material, propertyKey: "coatIor", min: 1, max: 3, step: 0.01 }), jsx(BoundProperty, { component: SyncedSliderPropertyLine, label: "Coat Darkening", target: material, propertyKey: "coatDarkening", min: 0, max: 1, step: 0.01 }), jsx(FileUploadLine, { label: "Coat Darkening", accept: ".jpg, .png, .tga, .dds, .env, .exr", onClick: (files) => {
|
|
13018
|
+
} }), jsx(BoundProperty, { component: SyncedSliderPropertyLine, label: "Coat IOR", target: material, propertyKey: "coatIor", min: 1, max: 3, step: 0.01 }), jsx(BoundProperty, { component: SyncedSliderPropertyLine, label: "Coat Darkening", target: material, propertyKey: "coatDarkening", min: 0, max: 1, step: 0.01 }), jsx(FileUploadLine, { label: "Coat Darkening", accept: ".jpg, .png, .webp, .tga, .dds, .env, .exr", onClick: (files) => {
|
|
12948
13019
|
if (files.length > 0) {
|
|
12949
13020
|
UpdateTexture(files[0], material, (texture) => (material.coatDarkeningTexture = texture));
|
|
12950
13021
|
}
|
|
@@ -12957,15 +13028,15 @@ const OpenPBRMaterialCoatProperties = (props) => {
|
|
|
12957
13028
|
*/
|
|
12958
13029
|
const OpenPBRMaterialFuzzProperties = (props) => {
|
|
12959
13030
|
const { material } = props;
|
|
12960
|
-
return (jsxs(Fragment, { children: [jsx(BoundProperty, { component: SyncedSliderPropertyLine, label: "Fuzz Weight", target: material, propertyKey: "fuzzWeight", min: 0, max: 1, step: 0.01 }), jsx(FileUploadLine, { label: "Fuzz Weight", accept: ".jpg, .png, .tga, .dds, .env, .exr", onClick: (files) => {
|
|
13031
|
+
return (jsxs(Fragment, { children: [jsx(BoundProperty, { component: SyncedSliderPropertyLine, label: "Fuzz Weight", target: material, propertyKey: "fuzzWeight", min: 0, max: 1, step: 0.01 }), jsx(FileUploadLine, { label: "Fuzz Weight", accept: ".jpg, .png, .webp, .tga, .dds, .env, .exr", onClick: (files) => {
|
|
12961
13032
|
if (files.length > 0) {
|
|
12962
13033
|
UpdateTexture(files[0], material, (texture) => (material.fuzzWeightTexture = texture));
|
|
12963
13034
|
}
|
|
12964
|
-
} }), jsx(BoundProperty, { component: Color3PropertyLine, label: "Fuzz Color", target: material, propertyKey: "fuzzColor", isLinearMode: true }), jsx(FileUploadLine, { label: "Fuzz Color", accept: ".jpg, .png, .tga, .dds, .env, .exr", onClick: (files) => {
|
|
13035
|
+
} }), jsx(BoundProperty, { component: Color3PropertyLine, label: "Fuzz Color", target: material, propertyKey: "fuzzColor", isLinearMode: true }), jsx(FileUploadLine, { label: "Fuzz Color", accept: ".jpg, .png, .webp, .tga, .dds, .env, .exr", onClick: (files) => {
|
|
12965
13036
|
if (files.length > 0) {
|
|
12966
13037
|
UpdateTexture(files[0], material, (texture) => (material.fuzzColorTexture = texture));
|
|
12967
13038
|
}
|
|
12968
|
-
} }), jsx(BoundProperty, { component: SyncedSliderPropertyLine, label: "Fuzz Roughness", target: material, propertyKey: "fuzzRoughness", min: 0, max: 1, step: 0.01 }), jsx(FileUploadLine, { label: "Fuzz Roughness", accept: ".jpg, .png, .tga, .dds, .env, .exr", onClick: (files) => {
|
|
13039
|
+
} }), jsx(BoundProperty, { component: SyncedSliderPropertyLine, label: "Fuzz Roughness", target: material, propertyKey: "fuzzRoughness", min: 0, max: 1, step: 0.01 }), jsx(FileUploadLine, { label: "Fuzz Roughness", accept: ".jpg, .png, .webp, .tga, .dds, .env, .exr", onClick: (files) => {
|
|
12969
13040
|
if (files.length > 0) {
|
|
12970
13041
|
UpdateTexture(files[0], material, (texture) => (material.fuzzRoughnessTexture = texture));
|
|
12971
13042
|
}
|
|
@@ -12978,7 +13049,7 @@ const OpenPBRMaterialFuzzProperties = (props) => {
|
|
|
12978
13049
|
*/
|
|
12979
13050
|
const OpenPBRMaterialEmissionProperties = (props) => {
|
|
12980
13051
|
const { material } = props;
|
|
12981
|
-
return (jsxs(Fragment, { children: [jsx(BoundProperty, { component: Color3PropertyLine, label: "Emission Color", target: material, propertyKey: "emissionColor", isLinearMode: true }), jsx(FileUploadLine, { label: "Emission Color", accept: ".jpg, .png, .tga, .dds, .env, .exr", onClick: (files) => {
|
|
13052
|
+
return (jsxs(Fragment, { children: [jsx(BoundProperty, { component: Color3PropertyLine, label: "Emission Color", target: material, propertyKey: "emissionColor", isLinearMode: true }), jsx(FileUploadLine, { label: "Emission Color", accept: ".jpg, .png, .webp, .tga, .dds, .env, .exr", onClick: (files) => {
|
|
12982
13053
|
if (files.length > 0) {
|
|
12983
13054
|
UpdateTexture(files[0], material, (texture) => (material.emissionColorTexture = texture));
|
|
12984
13055
|
}
|
|
@@ -12991,11 +13062,11 @@ const OpenPBRMaterialEmissionProperties = (props) => {
|
|
|
12991
13062
|
*/
|
|
12992
13063
|
const OpenPBRMaterialThinFilmProperties = (props) => {
|
|
12993
13064
|
const { material } = props;
|
|
12994
|
-
return (jsxs(Fragment, { children: [jsx(BoundProperty, { component: SyncedSliderPropertyLine, label: "Thin Film Weight", target: material, propertyKey: "thinFilmWeight", min: 0, max: 1, step: 0.01 }), jsx(FileUploadLine, { label: "Thin Film Weight", accept: ".jpg, .png, .tga, .dds, .env, .exr", onClick: (files) => {
|
|
13065
|
+
return (jsxs(Fragment, { children: [jsx(BoundProperty, { component: SyncedSliderPropertyLine, label: "Thin Film Weight", target: material, propertyKey: "thinFilmWeight", min: 0, max: 1, step: 0.01 }), jsx(FileUploadLine, { label: "Thin Film Weight", accept: ".jpg, .png, .webp, .tga, .dds, .env, .exr", onClick: (files) => {
|
|
12995
13066
|
if (files.length > 0) {
|
|
12996
13067
|
UpdateTexture(files[0], material, (texture) => (material.thinFilmWeightTexture = texture));
|
|
12997
13068
|
}
|
|
12998
|
-
} }), jsx(BoundProperty, { component: SyncedSliderPropertyLine, label: "Thin Film Thickness", target: material, propertyKey: "thinFilmThickness", min: 0, max: 1, step: 0.01 }), jsx(FileUploadLine, { label: "Thin Film Thickness", accept: ".jpg, .png, .tga, .dds, .env, .exr", onClick: (files) => {
|
|
13069
|
+
} }), jsx(BoundProperty, { component: SyncedSliderPropertyLine, label: "Thin Film Thickness", target: material, propertyKey: "thinFilmThickness", min: 0, max: 1, step: 0.01 }), jsx(FileUploadLine, { label: "Thin Film Thickness", accept: ".jpg, .png, .webp, .tga, .dds, .env, .exr", onClick: (files) => {
|
|
12999
13070
|
if (files.length > 0) {
|
|
13000
13071
|
UpdateTexture(files[0], material, (texture) => (material.thinFilmThicknessTexture = texture));
|
|
13001
13072
|
}
|
|
@@ -13008,27 +13079,27 @@ const OpenPBRMaterialThinFilmProperties = (props) => {
|
|
|
13008
13079
|
*/
|
|
13009
13080
|
const OpenPBRMaterialGeometryProperties = (props) => {
|
|
13010
13081
|
const { material } = props;
|
|
13011
|
-
return (jsxs(Fragment, { children: [jsx(BoundProperty, { component: SyncedSliderPropertyLine, label: "Opacity", target: material, propertyKey: "geometryOpacity", min: 0, max: 1, step: 0.01 }), jsx(FileUploadLine, { label: "Geometry Opacity", accept: ".jpg, .png, .tga, .dds, .env, .exr", onClick: (files) => {
|
|
13082
|
+
return (jsxs(Fragment, { children: [jsx(BoundProperty, { component: SyncedSliderPropertyLine, label: "Opacity", target: material, propertyKey: "geometryOpacity", min: 0, max: 1, step: 0.01 }), jsx(FileUploadLine, { label: "Geometry Opacity", accept: ".jpg, .png, .webp, .tga, .dds, .env, .exr", onClick: (files) => {
|
|
13012
13083
|
if (files.length > 0) {
|
|
13013
13084
|
UpdateTexture(files[0], material, (texture) => (material.geometryOpacityTexture = texture));
|
|
13014
13085
|
}
|
|
13015
|
-
} }), jsx(FileUploadLine, { label: "Geometry Normal", accept: ".jpg, .png, .tga, .dds, .env, .exr", onClick: (files) => {
|
|
13086
|
+
} }), jsx(FileUploadLine, { label: "Geometry Normal", accept: ".jpg, .png, .webp, .tga, .dds, .env, .exr", onClick: (files) => {
|
|
13016
13087
|
if (files.length > 0) {
|
|
13017
13088
|
UpdateTexture(files[0], material, (texture) => (material.geometryNormalTexture = texture));
|
|
13018
13089
|
}
|
|
13019
|
-
} }), jsx(BoundProperty, { component: SyncedSliderPropertyLine, label: "Tangent Angle", target: material, propertyKey: "geometryTangentAngle", min: 0, max: Math.PI, step: 0.01 }), jsx(FileUploadLine, { label: "Geometry Tangent", accept: ".jpg, .png, .tga, .dds, .env, .exr", onClick: (files) => {
|
|
13090
|
+
} }), jsx(BoundProperty, { component: SyncedSliderPropertyLine, label: "Tangent Angle", target: material, propertyKey: "geometryTangentAngle", min: 0, max: Math.PI, step: 0.01 }), jsx(FileUploadLine, { label: "Geometry Tangent", accept: ".jpg, .png, .webp, .tga, .dds, .env, .exr", onClick: (files) => {
|
|
13020
13091
|
if (files.length > 0) {
|
|
13021
13092
|
UpdateTexture(files[0], material, (texture) => (material.geometryTangentTexture = texture));
|
|
13022
13093
|
}
|
|
13023
|
-
} }), jsx(BoundProperty, { component: SyncedSliderPropertyLine, label: "Coat Tangent Angle", target: material, propertyKey: "geometryCoatTangentAngle", min: 0, max: Math.PI, step: 0.01 }), jsx(FileUploadLine, { label: "Geometry Coat Normal", accept: ".jpg, .png, .tga, .dds, .env, .exr", onClick: (files) => {
|
|
13094
|
+
} }), jsx(BoundProperty, { component: SyncedSliderPropertyLine, label: "Coat Tangent Angle", target: material, propertyKey: "geometryCoatTangentAngle", min: 0, max: Math.PI, step: 0.01 }), jsx(FileUploadLine, { label: "Geometry Coat Normal", accept: ".jpg, .png, .webp, .tga, .dds, .env, .exr", onClick: (files) => {
|
|
13024
13095
|
if (files.length > 0) {
|
|
13025
13096
|
UpdateTexture(files[0], material, (texture) => (material.geometryCoatNormalTexture = texture));
|
|
13026
13097
|
}
|
|
13027
|
-
} }), jsx(FileUploadLine, { label: "Geometry Coat Tangent", accept: ".jpg, .png, .tga, .dds, .env, .exr", onClick: (files) => {
|
|
13098
|
+
} }), jsx(FileUploadLine, { label: "Geometry Coat Tangent", accept: ".jpg, .png, .webp, .tga, .dds, .env, .exr", onClick: (files) => {
|
|
13028
13099
|
if (files.length > 0) {
|
|
13029
13100
|
UpdateTexture(files[0], material, (texture) => (material.geometryCoatTangentTexture = texture));
|
|
13030
13101
|
}
|
|
13031
|
-
} }), jsx(BoundProperty, { component: SyncedSliderPropertyLine, label: "Geometry Thickness", target: material, propertyKey: "geometryThickness", min: 0, step: 0.1 }), jsx(FileUploadLine, { label: "Geometry Thickness", accept: ".jpg, .png, .tga, .dds, .env, .exr", onClick: (files) => {
|
|
13102
|
+
} }), jsx(BoundProperty, { component: SyncedSliderPropertyLine, label: "Geometry Thickness", target: material, propertyKey: "geometryThickness", min: 0, step: 0.1 }), jsx(FileUploadLine, { label: "Geometry Thickness", accept: ".jpg, .png, .webp, .tga, .dds, .env, .exr", onClick: (files) => {
|
|
13032
13103
|
if (files.length > 0) {
|
|
13033
13104
|
UpdateTexture(files[0], material, (texture) => (material.geometryThicknessTexture = texture));
|
|
13034
13105
|
}
|
|
@@ -20320,8 +20391,87 @@ const GLTFValidationServiceDefinition = {
|
|
|
20320
20391
|
},
|
|
20321
20392
|
};
|
|
20322
20393
|
|
|
20394
|
+
const HighlightServiceDefinition = {
|
|
20395
|
+
friendlyName: "Highlight Service",
|
|
20396
|
+
consumes: [SelectionServiceIdentity, SceneContextIdentity, SettingsContextIdentity, ThemeServiceIdentity],
|
|
20397
|
+
factory: (selectionService, sceneContext, settingsContext, themeService) => {
|
|
20398
|
+
let outlineLayer = null;
|
|
20399
|
+
let currentScene = null;
|
|
20400
|
+
let activeCameraObserver = null;
|
|
20401
|
+
function disposeOutlineLayer() {
|
|
20402
|
+
outlineLayer?.dispose();
|
|
20403
|
+
outlineLayer = null;
|
|
20404
|
+
currentScene = null;
|
|
20405
|
+
}
|
|
20406
|
+
function getOrCreateOutlineLayer(scene) {
|
|
20407
|
+
if (!outlineLayer || currentScene !== scene) {
|
|
20408
|
+
disposeOutlineLayer();
|
|
20409
|
+
outlineLayer = new SelectionOutlineLayer("InspectorSelectionOutline", scene);
|
|
20410
|
+
updateColor(outlineLayer);
|
|
20411
|
+
currentScene = scene;
|
|
20412
|
+
}
|
|
20413
|
+
return outlineLayer;
|
|
20414
|
+
}
|
|
20415
|
+
function updateColor(outlineLayer) {
|
|
20416
|
+
outlineLayer.outlineColor = Color3.FromHexString(themeService.theme.colorBrandForeground1);
|
|
20417
|
+
}
|
|
20418
|
+
function updateHighlight() {
|
|
20419
|
+
const scene = sceneContext.currentScene;
|
|
20420
|
+
const entity = selectionService.selectedEntity instanceof AbstractMesh && !(selectionService.selectedEntity instanceof GaussianSplattingMesh)
|
|
20421
|
+
? selectionService.selectedEntity
|
|
20422
|
+
: null;
|
|
20423
|
+
if (!entity || !settingsContext.highlightSelectedEntity || !scene || !scene.activeCamera) {
|
|
20424
|
+
disposeOutlineLayer();
|
|
20425
|
+
return;
|
|
20426
|
+
}
|
|
20427
|
+
const layer = getOrCreateOutlineLayer(scene);
|
|
20428
|
+
layer.clearSelection();
|
|
20429
|
+
layer.addSelection(entity);
|
|
20430
|
+
}
|
|
20431
|
+
function watchActiveCamera(scene) {
|
|
20432
|
+
activeCameraObserver?.remove();
|
|
20433
|
+
activeCameraObserver = null;
|
|
20434
|
+
if (scene) {
|
|
20435
|
+
activeCameraObserver = scene.onActiveCameraChanged.add(updateHighlight);
|
|
20436
|
+
}
|
|
20437
|
+
}
|
|
20438
|
+
// React to theme changes.
|
|
20439
|
+
const themeObserver = themeService.onChanged.add(() => {
|
|
20440
|
+
if (outlineLayer) {
|
|
20441
|
+
updateColor(outlineLayer);
|
|
20442
|
+
}
|
|
20443
|
+
});
|
|
20444
|
+
// React to selection changes.
|
|
20445
|
+
const selectionObserver = selectionService.onSelectedEntityChanged.add(updateHighlight);
|
|
20446
|
+
// React to scene changes.
|
|
20447
|
+
const sceneObserver = sceneContext.currentSceneObservable.add(() => {
|
|
20448
|
+
// Dispose the old layer when the scene changes.
|
|
20449
|
+
disposeOutlineLayer();
|
|
20450
|
+
watchActiveCamera(sceneContext.currentScene);
|
|
20451
|
+
updateHighlight();
|
|
20452
|
+
});
|
|
20453
|
+
// React to settings changes.
|
|
20454
|
+
const settingsObserver = settingsContext.settingsChangedObservable.add(updateHighlight);
|
|
20455
|
+
// Watch active camera on the initial scene.
|
|
20456
|
+
watchActiveCamera(sceneContext.currentScene);
|
|
20457
|
+
// Initial update.
|
|
20458
|
+
updateHighlight();
|
|
20459
|
+
return {
|
|
20460
|
+
dispose: () => {
|
|
20461
|
+
themeObserver.remove();
|
|
20462
|
+
selectionObserver.remove();
|
|
20463
|
+
sceneObserver.remove();
|
|
20464
|
+
settingsObserver.remove();
|
|
20465
|
+
activeCameraObserver?.remove();
|
|
20466
|
+
activeCameraObserver = null;
|
|
20467
|
+
disposeOutlineLayer();
|
|
20468
|
+
},
|
|
20469
|
+
};
|
|
20470
|
+
},
|
|
20471
|
+
};
|
|
20472
|
+
|
|
20323
20473
|
const PickingToolbar = (props) => {
|
|
20324
|
-
const { scene, selectEntity, gizmoService, ignoreBackfaces } = props;
|
|
20474
|
+
const { scene, selectEntity, gizmoService, ignoreBackfaces, highlightSelectedEntity, onHighlightSelectedEntityChange } = props;
|
|
20325
20475
|
const meshDataCache = useMemo(() => new WeakMap(), [scene]);
|
|
20326
20476
|
// Not sure why changing the cursor on the canvas itself doesn't work, so change it on the parent.
|
|
20327
20477
|
const sceneElement = scene.getEngine().getRenderingCanvas()?.parentElement;
|
|
@@ -20395,7 +20545,12 @@ const PickingToolbar = (props) => {
|
|
|
20395
20545
|
/* No-op */
|
|
20396
20546
|
};
|
|
20397
20547
|
}, [pickingEnabled, sceneElement, ignoreBackfaces]);
|
|
20398
|
-
|
|
20548
|
+
const togglePicking = useCallback(() => {
|
|
20549
|
+
setPickingEnabled((prev) => !prev);
|
|
20550
|
+
}, []);
|
|
20551
|
+
return (sceneElement && (jsxs(Menu, { positioning: "below-end", checkedValues: { selectionHighlight: highlightSelectedEntity ? ["on"] : [] }, onCheckedValueChange: (_e, data) => {
|
|
20552
|
+
onHighlightSelectedEntityChange?.(data.checkedItems.includes("on"));
|
|
20553
|
+
}, children: [jsx(MenuTrigger, { disableButtonEnhancement: true, children: (triggerProps) => (jsx(Tooltip$1, { content: `${pickingEnabled ? "Disable" : "Enable"} Picking`, relationship: "label", children: jsx(SplitButton, { menuButton: triggerProps, primaryActionButton: { onClick: togglePicking }, size: "small", appearance: "transparent", icon: jsx(TargetRegular, { color: pickingEnabled ? tokens.colorBrandForeground1 : undefined }) }) })) }), jsx(MenuPopover, { children: jsx(MenuList, { children: jsx(MenuItemCheckbox, { name: "selectionHighlight", value: "on", children: "Highlight Selected Entity" }) }) })] })));
|
|
20399
20554
|
};
|
|
20400
20555
|
|
|
20401
20556
|
const PickingServiceDefinition = {
|
|
@@ -20411,7 +20566,9 @@ const PickingServiceDefinition = {
|
|
|
20411
20566
|
const scene = useObservableState(() => sceneContext.currentScene, sceneContext.currentSceneObservable);
|
|
20412
20567
|
const selectEntity = useCallback((entity) => (selectionService.selectedEntity = entity), []);
|
|
20413
20568
|
const ignoreBackfacesForPicking = useObservableState(() => settingsContext.ignoreBackfacesForPicking, settingsContext.settingsChangedObservable);
|
|
20414
|
-
|
|
20569
|
+
const highlightSelectedEntity = useObservableState(() => settingsContext.highlightSelectedEntity, settingsContext.settingsChangedObservable);
|
|
20570
|
+
const onHighlightSelectedEntityChange = useCallback((value) => (settingsContext.highlightSelectedEntity = value), []);
|
|
20571
|
+
return scene ? (jsx(PickingToolbar, { scene: scene, selectEntity: selectEntity, gizmoService: gizmoService, ignoreBackfaces: ignoreBackfacesForPicking, highlightSelectedEntity: highlightSelectedEntity, onHighlightSelectedEntityChange: onHighlightSelectedEntityChange })) : null;
|
|
20415
20572
|
},
|
|
20416
20573
|
});
|
|
20417
20574
|
},
|
|
@@ -20623,6 +20780,8 @@ function ShowInspector(scene, options = {}) {
|
|
|
20623
20780
|
GizmoToolbarServiceDefinition,
|
|
20624
20781
|
// Allows picking objects from the scene to select them.
|
|
20625
20782
|
PickingServiceDefinition,
|
|
20783
|
+
// Highlights the selected mesh in the scene.
|
|
20784
|
+
HighlightServiceDefinition,
|
|
20626
20785
|
// Adds entry points for user feedback on Inspector v2 (probably eventually will be removed).
|
|
20627
20786
|
UserFeedbackServiceDefinition,
|
|
20628
20787
|
// Adds always present "mini stats" (like fps) to the toolbar, etc.
|
|
@@ -20642,6 +20801,8 @@ function ShowInspector(scene, options = {}) {
|
|
|
20642
20801
|
extensionFeeds: [DefaultInspectorExtensionFeed, ...(options.extensionFeeds ?? [])],
|
|
20643
20802
|
toolbarMode: "compact",
|
|
20644
20803
|
sidePaneRemapper: options.sidePaneRemapper,
|
|
20804
|
+
leftPaneDefaultCollapsed: options.leftPaneDefaultCollapsed,
|
|
20805
|
+
rightPaneDefaultCollapsed: options.rightPaneDefaultCollapsed,
|
|
20645
20806
|
});
|
|
20646
20807
|
disposeActions.push(() => modularTool.dispose());
|
|
20647
20808
|
const sceneDisposedObserver = scene.onDisposeObservable.addOnce(() => {
|
|
@@ -21448,5 +21609,5 @@ const TextAreaPropertyLine = (props) => {
|
|
|
21448
21609
|
// Attach Inspector v2 to Scene.debugLayer as a side effect for back compat.
|
|
21449
21610
|
AttachDebugLayer();
|
|
21450
21611
|
|
|
21451
|
-
export {
|
|
21452
|
-
//# sourceMappingURL=index-
|
|
21612
|
+
export { useAsyncResource as $, Accordion as A, Button as B, CheckboxPropertyLine as C, DebugServiceIdentity as D, ErrorBoundary as E, PropertyContext as F, usePropertyChangedNotifier as G, BuiltInsExtensionFeed as H, Inspector as I, useVector3Property as J, useColor3Property as K, Link as L, MessageBar as M, NumberInputPropertyLine as N, useColor4Property as O, Popover as P, useQuaternionProperty as Q, MakePropertyHook as R, SpinButtonPropertyLine as S, TextInputPropertyLine as T, useInterceptObservable as U, Vector3PropertyLine as V, useEventfulState as W, useObservableCollection as X, useOrderedObservableCollection as Y, usePollingObservable as Z, useResource as _, ShellServiceIdentity as a, Color3PropertyLine as a$, useCompactMode as a0, useDisableCopy as a1, useSidePaneDockOverrides as a2, useAngleConverters as a3, MakeTeachingMoment as a4, MakeDialogTeachingMoment as a5, InterceptFunction as a6, GetPropertyDescriptor as a7, IsPropertyReadonly as a8, InterceptProperty as a9, MakeLazyComponent as aA, List as aB, MaterialSelector as aC, NodeSelector as aD, PositionedPopover as aE, SearchBar as aF, SearchBox as aG, SkeletonSelector as aH, SpinButton as aI, Switch as aJ, SyncedSliderInput as aK, Textarea as aL, TextInput as aM, TextureSelector as aN, ToastProvider as aO, useToast as aP, ToggleButton as aQ, Tooltip as aR, UploadButton as aS, ChildWindow as aT, FileUploadLine as aU, FactorGradientList as aV, Color3GradientList as aW, Color4GradientList as aX, Pane as aY, TextureUpload as aZ, BooleanBadgePropertyLine as a_, ObservableCollection as aa, ConstructorFactory as ab, SelectionServiceIdentity as ac, SelectionServiceDefinition as ad, SettingsContextIdentity as ae, ShowInspector as af, useKeyListener as ag, useKeyState as ah, useEventListener as ai, AccordionSectionItem as aj, Checkbox as ak, Collapse as al, ColorPickerPopup as am, InputHexField as an, InputHsvField as ao, ComboBox as ap, DraggableLine as aq, Dropdown as ar, NumberDropdown as as, StringDropdown as at, EntitySelector as au, FactorGradientComponent as av, Color3GradientComponent as aw, Color4GradientComponent as ax, ColorStepGradientComponent as ay, InfoLabel as az, SceneContextIdentity as b, Color4PropertyLine as b0, ComboBoxPropertyLine as b1, HexPropertyLine as b2, LinkPropertyLine as b3, PropertyLine as b4, LineContainer as b5, PlaceholderPropertyLine as b6, StringifiedPropertyLine as b7, SwitchPropertyLine as b8, SyncedSliderPropertyLine as b9, TextAreaPropertyLine as ba, TextPropertyLine as bb, RotationVectorPropertyLine as bc, QuaternionPropertyLine as bd, Vector2PropertyLine as be, Vector4PropertyLine as bf, useObservableState as c, AccordionSection as d, ButtonLine as e, ToolsServiceIdentity as f, useExtensionManager as g, MakePopoverTeachingMoment as h, TeachingMoment as i, SidePaneContainer as j, PropertiesServiceIdentity as k, SceneExplorerServiceIdentity as l, SettingsServiceIdentity as m, StatsServiceIdentity as n, ConvertOptions as o, AttachDebugLayer as p, DetachDebugLayer as q, NumberDropdownPropertyLine as r, StringDropdownPropertyLine as s, BoundProperty as t, useProperty as u, Property as v, LinkToEntityPropertyLine as w, ExtensibleAccordion as x, useTheme as y, Theme as z };
|
|
21613
|
+
//# sourceMappingURL=index-DNdlSwwf.js.map
|