@babylonjs/inspector 8.32.3 → 8.33.0-preview
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/captureService-ldJT1r7b.js +191 -0
- package/lib/captureService-ldJT1r7b.js.map +1 -0
- package/lib/exportService-smbKfT4U.js +237 -0
- package/lib/exportService-smbKfT4U.js.map +1 -0
- package/lib/importService-Si8UwFwR.js +173 -0
- package/lib/importService-Si8UwFwR.js.map +1 -0
- package/lib/index.d.ts +71719 -0
- package/lib/index.js +9661 -0
- package/lib/index.js.map +1 -0
- package/package.json +20 -36
- package/readme.md +14 -17
- package/dist/babylon.inspector.bundle.js +0 -3
- package/dist/babylon.inspector.bundle.js.LICENSE.txt +0 -72
- package/dist/babylon.inspector.bundle.js.map +0 -1
- package/dist/babylon.inspector.bundle.max.js +0 -3
- package/dist/babylon.inspector.module.d.ts +0 -9210
package/lib/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../../../../dev/inspector-v2/src/instrumentation/functionInstrumentation.ts","../../../../../../../../dev/inspector-v2/src/instrumentation/propertyInstrumentation.ts","../../../../../../../../dev/inspector-v2/src/hooks/instrumentationHooks.ts","../../../../../../../../dev/inspector-v2/src/hooks/observableHooks.ts","../../../../../../../../dev/inspector-v2/src/hooks/compoundPropertyHooks.ts","../../../../../../../../dev/inspector-v2/src/components/properties/boundProperty.tsx","../../../../../../../../dev/sharedUiComponents/src/fluent/primitives/collapse.tsx","../../../../../../../../dev/sharedUiComponents/src/copyCommandToClipboard.ts","../../../../../../../../dev/sharedUiComponents/src/fluent/hoc/fluentToolWrapper.tsx","../../../../../../../../dev/sharedUiComponents/src/fluent/primitives/toggleButton.tsx","../../../../../../../../dev/sharedUiComponents/src/fluent/primitives/button.tsx","../../../../../../../../dev/sharedUiComponents/src/fluent/primitives/utils.ts","../../../../../../../../dev/sharedUiComponents/src/fluent/hoc/propertyLines/propertyLine.tsx","../../../../../../../../dev/sharedUiComponents/src/fluent/hoc/propertyLines/linkPropertyLine.tsx","../../../../../../../../dev/inspector-v2/src/components/properties/linkToEntityPropertyLine.tsx","../../../../../../../../dev/sharedUiComponents/src/fluent/primitives/accordion.tsx","../../../../../../../../dev/inspector-v2/src/hooks/settingsHooks.ts","../../../../../../../../dev/inspector-v2/src/components/compactModeContextProvider.tsx","../../../../../../../../dev/inspector-v2/src/components/extensibleAccordion.tsx","../../../../../../../../dev/inspector-v2/src/components/pane.tsx","../../../../../../../../dev/inspector-v2/src/components/teachingMoment.tsx","../../../../../../../../dev/inspector-v2/src/extensibility/builtInsExtensionFeed.ts","../../../../../../../../dev/inspector-v2/src/hooks/pollingHooks.ts","../../../../../../../../dev/inspector-v2/src/hooks/resourceHooks.ts","../../../../../../../../dev/inspector-v2/src/hooks/teachingMomentHooks.ts","../../../../../../../../dev/inspector-v2/src/misc/observableCollection.ts","../../../../../../../../dev/inspector-v2/src/modularity/serviceDefinition.ts","../../../../../../../../dev/inspector-v2/src/components/properties/propertiesPane.tsx","../../../../../../../../dev/inspector-v2/src/services/settingsContext.ts","../../../../../../../../dev/inspector-v2/src/hooks/themeHooks.ts","../../../../../../../../dev/inspector-v2/src/themes/babylonTheme.ts","../../../../../../../../dev/inspector-v2/src/components/theme.tsx","../../../../../../../../dev/inspector-v2/src/hooks/useResizeHandle.ts","../../../../../../../../dev/inspector-v2/src/services/shellService.tsx","../../../../../../../../dev/inspector-v2/src/services/selectionService.ts","../../../../../../../../dev/inspector-v2/src/services/panes/properties/propertiesService.tsx","../../../../../../../../dev/inspector-v2/src/misc/graphUtils.ts","../../../../../../../../dev/inspector-v2/src/components/scene/sceneExplorer.tsx","../../../../../../../../dev/inspector-v2/src/services/sceneContext.ts","../../../../../../../../dev/inspector-v2/src/services/panes/scene/sceneExplorerService.tsx","../../../../../../../../dev/sharedUiComponents/src/fluent/primitives/switch.tsx","../../../../../../../../dev/sharedUiComponents/src/fluent/hoc/propertyLines/switchPropertyLine.tsx","../../../../../../../../dev/inspector-v2/src/components/debug/debugPane.tsx","../../../../../../../../dev/inspector-v2/src/services/panes/debugService.tsx","../../../../../../../../dev/sharedUiComponents/src/fluent/hoc/buttonLine.tsx","../../../../../../../../dev/inspector-v2/src/services/panes/settingsService.tsx","../../../../../../../../dev/sharedUiComponents/src/fluent/hoc/propertyLines/stringifiedPropertyLine.tsx","../../../../../../../../dev/inspector-v2/src/components/stats/countStats.tsx","../../../../../../../../dev/inspector-v2/src/components/stats/frameStepStats.tsx","../../../../../../../../dev/sharedUiComponents/src/fluent/hoc/fileUploadLine.tsx","../../../../../../../../dev/inspector-v2/src/components/stats/performanceStats.tsx","../../../../../../../../dev/sharedUiComponents/src/fluent/hoc/propertyLines/textPropertyLine.tsx","../../../../../../../../dev/inspector-v2/src/components/stats/statsPane.tsx","../../../../../../../../dev/sharedUiComponents/src/fluent/hoc/propertyLines/booleanBadgePropertyLine.tsx","../../../../../../../../dev/inspector-v2/src/components/stats/systemStats.tsx","../../../../../../../../dev/inspector-v2/src/services/panes/statsService.tsx","../../../../../../../../dev/inspector-v2/src/components/tools/toolsPane.tsx","../../../../../../../../dev/inspector-v2/src/services/panes/toolsService.tsx","../../../../../../../../dev/inspector-v2/src/extensibility/defaultInspectorExtensionFeed.ts","../../../../../../../../dev/inspector-v2/src/contexts/extensionManagerContext.ts","../../../../../../../../dev/inspector-v2/src/extensibility/extensionManager.ts","../../../../../../../../dev/inspector-v2/src/modularity/serviceContainer.ts","../../../../../../../../dev/inspector-v2/src/services/extensionsListService.tsx","../../../../../../../../dev/inspector-v2/src/services/themeSelectorService.tsx","../../../../../../../../dev/inspector-v2/src/modularTool.tsx","../../../../../../../../dev/inspector-v2/src/services/gizmoService.ts","../../../../../../../../dev/sharedUiComponents/src/fluent/icons.ts","../../../../../../../../dev/inspector-v2/src/components/gizmoToolbar.tsx","../../../../../../../../dev/inspector-v2/src/services/gizmoToolbarService.tsx","../../../../../../../../dev/inspector-v2/src/services/miniStatsService.tsx","../../../../../../../../dev/inspector-v2/src/components/properties/animation/targetedAnimationProperties.tsx","../../../../../../../../dev/sharedUiComponents/src/fluent/primitives/infoLabel.tsx","../../../../../../../../dev/sharedUiComponents/src/fluent/primitives/textInput.tsx","../../../../../../../../dev/sharedUiComponents/src/fluent/primitives/spinButton.tsx","../../../../../../../../dev/sharedUiComponents/src/fluent/hoc/propertyLines/inputPropertyLine.tsx","../../../../../../../../dev/sharedUiComponents/src/fluent/primitives/syncedSlider.tsx","../../../../../../../../dev/sharedUiComponents/src/fluent/hoc/propertyLines/syncedSliderPropertyLine.tsx","../../../../../../../../dev/inspector-v2/src/components/properties/animation/animationGroupProperties.tsx","../../../../../../../../dev/inspector-v2/src/services/panes/properties/animationGroupPropertiesService.tsx","../../../../../../../../dev/sharedUiComponents/src/fluent/primitives/messageBar.tsx","../../../../../../../../dev/inspector-v2/src/components/properties/animation/animationsProperties.tsx","../../../../../../../../dev/inspector-v2/src/services/panes/properties/animationPropertiesService.tsx","../../../../../../../../dev/sharedUiComponents/src/fluent/hoc/propertyLines/vectorPropertyLine.tsx","../../../../../../../../dev/sharedUiComponents/src/fluent/primitives/dropdown.tsx","../../../../../../../../dev/sharedUiComponents/src/fluent/primitives/colorPicker.tsx","../../../../../../../../dev/sharedUiComponents/src/fluent/hoc/propertyLines/colorPropertyLine.tsx","../../../../../../../../dev/inspector-v2/src/components/properties/atmosphereProperties.tsx","../../../../../../../../dev/inspector-v2/src/services/panes/properties/atmospherePropertiesService.tsx","../../../../../../../../dev/inspector-v2/src/components/properties/cameras/arcRotateCameraProperties.tsx","../../../../../../../../dev/sharedUiComponents/src/fluent/hoc/propertyLines/dropdownPropertyLine.tsx","../../../../../../../../dev/sharedUiComponents/src/fluent/hoc/propertyLines/hexPropertyLine.tsx","../../../../../../../../dev/inspector-v2/src/components/properties/cameras/cameraProperties.tsx","../../../../../../../../dev/inspector-v2/src/components/properties/cameras/followCameraProperties.tsx","../../../../../../../../dev/inspector-v2/src/components/properties/cameras/freeCameraProperties.tsx","../../../../../../../../dev/inspector-v2/src/components/properties/cameras/targetCameraProperties.tsx","../../../../../../../../dev/inspector-v2/src/services/panes/properties/cameraPropertiesService.tsx","../../../../../../../../dev/inspector-v2/src/components/properties/commonGeneralProperties.tsx","../../../../../../../../dev/inspector-v2/src/services/panes/properties/commonPropertiesService.tsx","../../../../../../../../dev/inspector-v2/src/services/panes/properties/effectLayerPropertiesService.tsx","../../../../../../../../dev/inspector-v2/src/components/properties/frameGraph/frameGraphProperties.tsx","../../../../../../../../dev/inspector-v2/src/services/panes/properties/frameGraphPropertiesService.tsx","../../../../../../../../dev/inspector-v2/src/components/properties/lights/areaLightProperties.tsx","../../../../../../../../dev/inspector-v2/src/components/properties/lights/directionalLightProperties.tsx","../../../../../../../../dev/inspector-v2/src/components/properties/lights/hemisphericLightProperties.tsx","../../../../../../../../dev/inspector-v2/src/components/properties/lights/pointLightProperties.tsx","../../../../../../../../dev/inspector-v2/src/components/properties/lights/shadowGeneratorProperties.tsx","../../../../../../../../dev/inspector-v2/src/components/properties/lights/shadowLightProperties.tsx","../../../../../../../../dev/inspector-v2/src/components/properties/lights/spotLightProperties.tsx","../../../../../../../../dev/inspector-v2/src/services/panes/properties/lightPropertiesServices.tsx","../../../../../../../../dev/sharedUiComponents/src/constToOptionsMaps.ts","../../../../../../../../dev/inspector-v2/src/components/properties/materials/materialProperties.tsx","../../../../../../../../dev/inspector-v2/src/components/properties/materials/multiMaterialProperties.tsx","../../../../../../../../dev/inspector-v2/src/components/properties/materials/normalMapProperties.tsx","../../../../../../../../dev/inspector-v2/src/components/properties/materials/pbrBaseMaterialProperties.tsx","../../../../../../../../dev/inspector-v2/src/components/properties/materials/pbrMaterialProperties.tsx","../../../../../../../../dev/inspector-v2/src/components/properties/materials/openpbrMaterialProperties.tsx","../../../../../../../../dev/inspector-v2/src/components/properties/materials/skyMaterialProperties.tsx","../../../../../../../../dev/inspector-v2/src/components/properties/materials/standardMaterialProperties.tsx","../../../../../../../../dev/inspector-v2/src/services/panes/properties/materialPropertiesService.tsx","../../../../../../../../dev/sharedUiComponents/src/fluent/primitives/textarea.tsx","../../../../../../../../dev/inspector-v2/src/components/properties/metadataProperties.tsx","../../../../../../../../dev/inspector-v2/src/services/panes/properties/metadataPropertiesService.tsx","../../../../../../../../dev/inspector-v2/src/components/properties/nodes/abstractMeshProperties.tsx","../../../../../../../../dev/inspector-v2/src/components/properties/nodes/meshProperties.tsx","../../../../../../../../dev/inspector-v2/src/components/properties/nodes/gaussianSplattingProperties.tsx","../../../../../../../../dev/inspector-v2/src/components/properties/nodes/nodeProperties.tsx","../../../../../../../../dev/inspector-v2/src/services/panes/properties/nodePropertiesService.tsx","../../../../../../../../dev/sharedUiComponents/src/fluent/primitives/list.tsx","../../../../../../../../dev/sharedUiComponents/src/fluent/primitives/gradient.tsx","../../../../../../../../dev/sharedUiComponents/src/fluent/hoc/gradientList.tsx","../../../../../../../../dev/inspector-v2/src/components/properties/particles/attractor.tsx","../../../../../../../../dev/inspector-v2/src/components/properties/particles/attractorList.tsx","../../../../../../../../dev/inspector-v2/src/components/properties/particles/particleSystemProperties.tsx","../../../../../../../../dev/inspector-v2/src/services/panes/properties/particleSystemPropertiesService.tsx","../../../../../../../../dev/inspector-v2/src/components/properties/physics/physicsProperties.tsx","../../../../../../../../dev/inspector-v2/src/services/panes/properties/physicsPropertiesService.tsx","../../../../../../../../dev/sharedUiComponents/src/fluent/primitives/checkbox.tsx","../../../../../../../../dev/sharedUiComponents/src/fluent/hoc/propertyLines/checkboxPropertyLine.tsx","../../../../../../../../dev/inspector-v2/src/components/properties/postProcesses/postProcessProperties.tsx","../../../../../../../../dev/inspector-v2/src/services/panes/properties/postProcessPropertiesService.tsx","../../../../../../../../dev/inspector-v2/src/services/panes/properties/renderingPipelinePropertiesService.tsx","../../../../../../../../dev/inspector-v2/src/components/scene/sceneProperties.tsx","../../../../../../../../dev/inspector-v2/src/services/panes/properties/scenePropertiesService.tsx","../../../../../../../../dev/inspector-v2/src/components/properties/skeleton/boneProperties.tsx","../../../../../../../../dev/inspector-v2/src/components/properties/skeleton/skeletonProperties.tsx","../../../../../../../../dev/inspector-v2/src/services/panes/properties/skeletonPropertiesService.tsx","../../../../../../../../dev/sharedUiComponents/src/fluent/hoc/propertyLines/spinButtonPropertyLine.tsx","../../../../../../../../dev/inspector-v2/src/components/properties/sprites/spriteManagerProperties.tsx","../../../../../../../../dev/inspector-v2/src/components/properties/sprites/spriteProperties.tsx","../../../../../../../../dev/inspector-v2/src/services/panes/properties/spritePropertiesService.tsx","../../../../../../../../dev/sharedUiComponents/src/fluent/primitives/lazyComponent.tsx","../../../../../../../../dev/inspector-v2/src/components/properties/textures/advancedDynamicTextureProperties.tsx","../../../../../../../../dev/inspector-v2/src/components/properties/textures/textureFormatUtils.ts","../../../../../../../../dev/inspector-v2/src/components/properties/textures/texturePreview.tsx","../../../../../../../../dev/inspector-v2/src/components/properties/textures/baseTextureProperties.tsx","../../../../../../../../dev/inspector-v2/src/components/properties/textures/cubeTextureProperties.tsx","../../../../../../../../dev/inspector-v2/src/components/properties/textures/multiRenderTargetProperties.tsx","../../../../../../../../dev/inspector-v2/src/components/properties/textures/renderTargetTextureProperties.tsx","../../../../../../../../dev/inspector-v2/src/components/properties/textures/textureProperties.tsx","../../../../../../../../dev/inspector-v2/src/components/properties/textures/thinTextureProperties.tsx","../../../../../../../../dev/inspector-v2/src/services/panes/properties/texturePropertiesService.tsx","../../../../../../../../dev/inspector-v2/src/components/properties/transformProperties.tsx","../../../../../../../../dev/inspector-v2/src/services/panes/properties/transformPropertiesService.tsx","../../../../../../../../dev/inspector-v2/src/services/panes/scene/animationGroupExplorerService.tsx","../../../../../../../../dev/inspector-v2/src/services/panes/scene/atmosphereExplorerService.tsx","../../../../../../../../dev/inspector-v2/src/services/panes/scene/effectLayersExplorerService.tsx","../../../../../../../../dev/inspector-v2/src/services/panes/scene/frameGraphExplorerService.tsx","../../../../../../../../dev/inspector-v2/src/services/panes/scene/guiExplorerService.tsx","../../../../../../../../dev/inspector-v2/src/services/panes/scene/materialExplorerService.tsx","../../../../../../../../dev/inspector-v2/src/services/panes/scene/nodeExplorerService.tsx","../../../../../../../../dev/inspector-v2/src/services/panes/scene/particleSystemExplorerService.tsx","../../../../../../../../dev/inspector-v2/src/services/panes/scene/postProcessExplorerService.tsx","../../../../../../../../dev/inspector-v2/src/services/panes/scene/renderingPipelinesExplorerService.tsx","../../../../../../../../dev/inspector-v2/src/services/panes/scene/skeletonExplorerService.tsx","../../../../../../../../dev/inspector-v2/src/services/panes/scene/spriteManagerExplorerService.tsx","../../../../../../../../dev/inspector-v2/src/services/panes/scene/texturesExplorerService.tsx","../../../../../../../../dev/inspector-v2/src/components/pickingToolbar.tsx","../../../../../../../../dev/inspector-v2/src/services/pickingService.tsx","../../../../../../../../dev/inspector-v2/src/services/userFeedbackService.tsx","../../../../../../../../dev/inspector-v2/src/inspector.tsx","../../../../../../../../dev/sharedUiComponents/src/fluent/primitives/comboBox.tsx","../../../../../../../../dev/sharedUiComponents/src/fluent/primitives/draggable.tsx","../../../../../../../../dev/sharedUiComponents/src/fluent/primitives/positionedPopover.tsx","../../../../../../../../dev/sharedUiComponents/src/fluent/primitives/searchBar.tsx","../../../../../../../../dev/sharedUiComponents/src/fluent/primitives/searchBox.tsx","../../../../../../../../dev/sharedUiComponents/src/fluent/hoc/pane.tsx","../../../../../../../../dev/sharedUiComponents/src/fluent/hoc/propertyLines/textAreaPropertyLine.tsx"],"sourcesContent":["import type { IDisposable } from \"core/index\";\r\n\r\nexport type FunctionHooks = {\r\n /**\r\n * This function will be called after the hooked function is called.\r\n */\r\n afterCall?: () => void;\r\n};\r\n\r\nconst InterceptorHooksMaps = new WeakMap<object, Map<PropertyKey, FunctionHooks[]>>();\r\n\r\n/**\r\n * Intercepts a function on an object and allows you to add hooks that will be called during function execution.\r\n * @param target The object containing the function to intercept.\r\n * @param propertyKey The key of the property that is a function (this is the function that will be intercepted).\r\n * @param hooks The hooks to call during the function execution.\r\n * @returns A disposable that removes the hooks when disposed and returns the object to its original state.\r\n */\r\nexport function InterceptFunction<T extends object>(target: T, propertyKey: keyof T, hooks: FunctionHooks): IDisposable {\r\n if (!hooks.afterCall) {\r\n throw new Error(\"At least one hook must be provided.\");\r\n }\r\n\r\n const originalFunction = Reflect.get(target, propertyKey, target) as (...args: any) => any;\r\n if (typeof originalFunction !== \"function\") {\r\n throw new Error(`Property \"${propertyKey.toString()}\" of object \"${target}\" is not a function.`);\r\n }\r\n\r\n // Make sure the property is configurable and writable, otherwise it is immutable and cannot be intercepted.\r\n const propertyDescriptor = Reflect.getOwnPropertyDescriptor(target, propertyKey);\r\n if (propertyDescriptor) {\r\n if (!propertyDescriptor.configurable) {\r\n throw new Error(`Property \"${propertyKey.toString()}\" of object \"${target}\" is not configurable.`);\r\n }\r\n\r\n if (propertyDescriptor.writable === false || (propertyDescriptor.writable === undefined && !propertyDescriptor.set)) {\r\n throw new Error(`Property \"${propertyKey.toString()}\" of object \"${target}\" is readonly.`);\r\n }\r\n }\r\n\r\n // Get or create the hooks map for the target object.\r\n let hooksMap = InterceptorHooksMaps.get(target);\r\n if (!hooksMap) {\r\n InterceptorHooksMaps.set(target, (hooksMap = new Map()));\r\n }\r\n\r\n // Get or create the hooks array for the property key.\r\n let hooksForKey = hooksMap.get(propertyKey);\r\n if (!hooksForKey) {\r\n hooksMap.set(propertyKey, (hooksForKey = []));\r\n if (\r\n // Replace the function with a new one that calls the hooks in addition to the original function.\r\n !Reflect.set(target, propertyKey, (...args: any) => {\r\n const result = Reflect.apply(originalFunction, target, args);\r\n for (const { afterCall } of hooksForKey!) {\r\n afterCall?.();\r\n }\r\n return result;\r\n })\r\n ) {\r\n throw new Error(`Failed to define new function \"${propertyKey.toString()}\" on object \"${target}\".`);\r\n }\r\n }\r\n hooksForKey.push(hooks);\r\n\r\n let isDisposed = false;\r\n return {\r\n dispose: () => {\r\n if (!isDisposed) {\r\n // Remove the hooks from the hooks array for the property key.\r\n hooksForKey.splice(hooksForKey.indexOf(hooks), 1);\r\n\r\n // If there are no more hooks for the property key, remove the property from the hooks map.\r\n if (hooksForKey.length === 0) {\r\n hooksMap.delete(propertyKey);\r\n\r\n // If there are no more hooks for the target object, remove the hooks map from the WeakMap.\r\n if (hooksMap.size === 0) {\r\n InterceptorHooksMaps.delete(target);\r\n }\r\n\r\n if (propertyDescriptor) {\r\n // If we have a property descriptor, it means the property was defined directly on the target object,\r\n // in which case we replaced it and the original property descriptor needs to be restored.\r\n if (!Reflect.defineProperty(target, propertyKey, propertyDescriptor)) {\r\n throw new Error(`Failed to restore original function \"${propertyKey.toString()}\" on object \"${target}\".`);\r\n }\r\n } else {\r\n // Otherwise, the property was inherited through the prototype chain, and so we can simply delete it from\r\n // the target object to allow it to fall back to the prototype chain as it did originally.\r\n if (!Reflect.deleteProperty(target, propertyKey)) {\r\n throw new Error(`Failed to delete transient function \"${propertyKey.toString()}\" on object \"${target}\".`);\r\n }\r\n }\r\n }\r\n\r\n isDisposed = true;\r\n }\r\n },\r\n };\r\n}\r\n","import type { IDisposable, Nullable } from \"core/index\";\r\n\r\n/**\r\n * Gets the property descriptor for a property on an object, including inherited properties.\r\n * @param target The object containing the property.\r\n * @param propertyKey The key of the property to get the descriptor for.\r\n * @returns The owner of the property (which may be different from the target in the case of inheritance) along with the property descriptor, or null if the property is not found.\r\n */\r\nexport function GetPropertyDescriptor<T extends object>(target: T, propertyKey: keyof T): Nullable<[owner: object, descriptor: PropertyDescriptor]> {\r\n let propertyOwner: object | null = target;\r\n let propertyDescriptor: PropertyDescriptor | undefined;\r\n while (propertyOwner) {\r\n if ((propertyDescriptor = Reflect.getOwnPropertyDescriptor(propertyOwner, propertyKey))) {\r\n break;\r\n }\r\n propertyOwner = Reflect.getPrototypeOf(propertyOwner);\r\n }\r\n\r\n if (propertyOwner && propertyDescriptor) {\r\n return [propertyOwner, propertyDescriptor];\r\n }\r\n\r\n return null;\r\n}\r\n\r\n/**\r\n * Checks if a property is readonly.\r\n * @param propertyDescriptor The property descriptor to check.\r\n * @returns True if the property is readonly, false otherwise.\r\n */\r\nexport function IsPropertyReadonly(propertyDescriptor: PropertyDescriptor): boolean {\r\n // If the property is not writable, it is readonly.\r\n return propertyDescriptor.writable === false || (propertyDescriptor.writable === undefined && !propertyDescriptor.set);\r\n}\r\n\r\nexport type PropertyHooks = {\r\n /**\r\n * This function will be called after the hooked property is set.\r\n */\r\n afterSet?: () => void;\r\n};\r\n\r\nconst InterceptorHooksMaps = new WeakMap<object, Map<PropertyKey, PropertyHooks[]>>();\r\n\r\n/**\r\n * Intercepts a property on an object and allows you to add hooks that will be called when the property is get or set.\r\n * @param target The object containing the property to intercept.\r\n * @param propertyKey The key of the property to intercept.\r\n * @param hooks The hooks to call when the property is get or set.\r\n * @returns A disposable that removes the hooks when disposed and returns the object to its original state.\r\n */\r\nexport function InterceptProperty<T extends object>(target: T, propertyKey: keyof T, hooks: PropertyHooks): IDisposable {\r\n // Find the property descriptor and note the owning object (might be inherited through the prototype chain).\r\n const ownerAndDescriptor = GetPropertyDescriptor(target, propertyKey);\r\n\r\n // If the property does not exist, we'll define one transiently directly on the target object.\r\n const [propertyOwner, propertyDescriptor] = ownerAndDescriptor ?? [\r\n target,\r\n {\r\n configurable: true,\r\n enumerable: true,\r\n writable: true,\r\n value: undefined,\r\n },\r\n ];\r\n\r\n if (!ownerAndDescriptor) {\r\n Reflect.defineProperty(propertyOwner, propertyKey, propertyDescriptor);\r\n } else {\r\n // If the property is not configurable, it cannot be intercepted.\r\n if (!propertyDescriptor.configurable) {\r\n throw new Error(`Property \"${propertyKey.toString()}\" of object \"${target}\" is not configurable.`);\r\n }\r\n\r\n // If the property is not writable, it cannot be intercepted, but it cannot be mutated anyway so there is no need to intercept it.\r\n if (IsPropertyReadonly(propertyDescriptor)) {\r\n return {\r\n dispose: () => {},\r\n };\r\n }\r\n }\r\n\r\n // Get or create the hooks map for the target object.\r\n let hooksMap = InterceptorHooksMaps.get(target);\r\n if (!hooksMap) {\r\n InterceptorHooksMaps.set(target, (hooksMap = new Map()));\r\n }\r\n\r\n // Get or create the hooks array for the property key.\r\n let hooksForKey = hooksMap.get(propertyKey);\r\n if (!hooksForKey) {\r\n hooksMap.set(propertyKey, (hooksForKey = []));\r\n\r\n let { get: getValue, set: setValue } = propertyDescriptor;\r\n\r\n // We already checked that the property is writable, so if there is no setter, then it must be a value property.\r\n // In this case, getValue can return the direct value, and setValue can set the direct value.\r\n if (!setValue) {\r\n getValue = () => propertyDescriptor.value;\r\n setValue = (value: any) => (propertyDescriptor.value = value);\r\n }\r\n\r\n if (\r\n // Replace the property with a new one that calls the hooks in addition to the original getter and setter.\r\n !Reflect.defineProperty(target, propertyKey, {\r\n configurable: true,\r\n get: getValue ? () => getValue.call(target) : undefined,\r\n set: (newValue: any) => {\r\n setValue.call(target, newValue);\r\n for (const { afterSet } of hooksForKey!) {\r\n afterSet?.();\r\n }\r\n },\r\n })\r\n ) {\r\n throw new Error(`Failed to define new property \"${propertyKey.toString()}\" on object \"${target}\".`);\r\n }\r\n }\r\n hooksForKey.push(hooks);\r\n\r\n let isDisposed = false;\r\n return {\r\n dispose: () => {\r\n if (!isDisposed) {\r\n // Remove the hooks from the hooks array for the property key.\r\n hooksForKey.splice(hooksForKey.indexOf(hooks), 1);\r\n\r\n // If there are no more hooks for the property key, remove the property from the hooks map.\r\n if (hooksForKey.length === 0) {\r\n hooksMap.delete(propertyKey);\r\n\r\n // If there are no more hooks for the target object, remove the hooks map from the WeakMap.\r\n if (hooksMap.size === 0) {\r\n InterceptorHooksMaps.delete(target);\r\n }\r\n\r\n const shouldRestorePropertyDescriptor =\r\n // If the property is owned by the target object, then we may have replaced an original property descriptor that needs to be restore.\r\n propertyOwner === target &&\r\n // But this is only the case if we found an existing property descriptor on the target object (hence the ownerAndDescriptor check),\r\n // or if the property value is not undefined, in which case we still want to retain the value that was set.\r\n (ownerAndDescriptor || target[propertyKey] !== undefined);\r\n // Otherwise, the property was inherited through the prototype chain, and so we can simply delete it from the target object.\r\n\r\n if (shouldRestorePropertyDescriptor) {\r\n if (!Reflect.defineProperty(target, propertyKey, propertyDescriptor)) {\r\n throw new Error(`Failed to restore original property descriptor \"${propertyKey.toString()}\" on object \"${target}\".`);\r\n }\r\n } else {\r\n if (!Reflect.deleteProperty(target, propertyKey)) {\r\n throw new Error(`Failed to delete transient property descriptor \"${propertyKey.toString()}\" on object \"${target}\".`);\r\n }\r\n }\r\n }\r\n\r\n isDisposed = true;\r\n }\r\n },\r\n };\r\n}\r\n","import type { IDisposable, IReadonlyObservable, Nullable } from \"core/index\";\r\n\r\nimport { useEffect, useMemo } from \"react\";\r\n\r\nimport { Observable } from \"core/Misc/observable\";\r\n\r\nimport { InterceptFunction } from \"../instrumentation/functionInstrumentation\";\r\nimport { InterceptProperty } from \"../instrumentation/propertyInstrumentation\";\r\n\r\n/**\r\n * Provides an observable that fires when a specified function/property is called/set.\r\n * @param type The type of the interceptor, either \"function\" or \"property\".\r\n * @param target The object containing the function/property to intercept.\r\n * @param propertyKey The key of the function/property to intercept.\r\n * @returns An observable that fires when the function/property is called/set.\r\n */\r\nexport function useInterceptObservable<T extends object>(type: \"function\" | \"property\", target: T | null | undefined, propertyKey: keyof T): IReadonlyObservable<void> {\r\n // Create a cached observable. It effectively has the lifetime of the component that uses this hook.\r\n const observable = useMemo(() => new Observable<void>(), []);\r\n\r\n // Whenever the type, target, or property key changes, we need to set up a new interceptor.\r\n useEffect(() => {\r\n let interceptToken: Nullable<IDisposable> = null;\r\n\r\n if (target) {\r\n if (type === \"function\") {\r\n interceptToken = InterceptFunction(target, propertyKey, {\r\n afterCall: () => {\r\n observable.notifyObservers();\r\n },\r\n });\r\n } else if (type === \"property\") {\r\n interceptToken = InterceptProperty(target, propertyKey, {\r\n afterSet: () => {\r\n observable.notifyObservers();\r\n },\r\n });\r\n } else {\r\n throw new Error(`Unknown interceptor type: ${type}`);\r\n }\r\n }\r\n\r\n // When the effect is cleaned up, we need to dispose of the interceptor.\r\n return () => {\r\n interceptToken?.dispose();\r\n };\r\n }, [type, target, propertyKey, observable]);\r\n\r\n return observable;\r\n}\r\n","import type { IReadonlyObservable } from \"core/index\";\r\n\r\nimport type { ObservableCollection } from \"../misc/observableCollection\";\r\n\r\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\r\n\r\n/**\r\n * Returns the current value of the accessor and updates it when the specified event is fired on the specified element.\r\n * @param accessor A function that returns the current value.\r\n * @param element The element to listen for the event on.\r\n * @param eventNames The names of the events to listen for.\r\n * @returns The current value of the accessor.\r\n * * @remarks If the accessor function is not idempotent (e.g. it returns a different array or object instance each time it is called),\r\n * then there is a good chance it should be wrapped in a `useCallback` to prevent unnecessary re-renders or re-render infinite loops.\r\n */\r\nexport function useEventfulState<T>(accessor: () => T, element: HTMLElement | null | undefined, ...eventNames: string[]): T {\r\n const [current, setCurrent] = useState(accessor);\r\n\r\n useEffect(() => {\r\n setCurrent(accessor);\r\n if (element) {\r\n const removers = eventNames.map((eventName) => {\r\n const handler = () => {\r\n setCurrent(accessor());\r\n };\r\n\r\n element.addEventListener(eventName, handler);\r\n\r\n return () => {\r\n element.removeEventListener(eventName, handler);\r\n };\r\n });\r\n\r\n return () => {\r\n removers.forEach((remove) => remove());\r\n };\r\n }\r\n\r\n return undefined;\r\n }, [accessor, element, ...eventNames]);\r\n\r\n return current;\r\n}\r\n\r\n/**\r\n * Returns the current value of the accessor and updates it when any of the specified observables change.\r\n * @param accessor A function that returns the current value.\r\n * @param observables The observables to listen for changes on.\r\n * @returns The current value of the accessor.\r\n * @remarks If the accessor function is not idempotent (e.g. it returns a different array or object instance each time it is called),\r\n * then there is a good chance it should be wrapped in a `useCallback` to prevent unnecessary re-renders or re-render infinite loops.\r\n */\r\nexport function useObservableState<T>(accessor: () => T, ...observables: Array<IReadonlyObservable | null | undefined>): T {\r\n const [current, setCurrent] = useState(accessor);\r\n\r\n useEffect(() => {\r\n setCurrent(accessor);\r\n const observers = observables.map((observable) => {\r\n if (observable) {\r\n const observer = observable.add(() => {\r\n setCurrent(accessor());\r\n });\r\n\r\n return observer;\r\n }\r\n return null;\r\n });\r\n\r\n return () => {\r\n observers.forEach((observer) => observer?.remove());\r\n };\r\n }, [accessor, ...observables]);\r\n\r\n return current;\r\n}\r\n\r\n/**\r\n * Returns a copy of the items in the collection and updates it when the collection changes.\r\n * @param collection The collection to observe.\r\n * @returns A copy of the items in the collection.\r\n */\r\nexport function useObservableCollection<T>(collection: ObservableCollection<T>) {\r\n const itemsRef = useRef([...collection.items]);\r\n return useObservableState(\r\n useCallback(() => {\r\n if (itemsRef.current.length !== collection.items.length || !itemsRef.current.every((item, index) => item === collection.items[index])) {\r\n itemsRef.current = [...collection.items];\r\n }\r\n return itemsRef.current;\r\n }, [collection]),\r\n collection.observable\r\n );\r\n}\r\n\r\n/**\r\n * Returns a copy of the items in the collection sorted by the order property and updates it when the collection changes.\r\n * @param collection The collection to observe.\r\n * @returns A copy of the items in the collection sorted by the order property.\r\n */\r\nexport function useOrderedObservableCollection<T extends Readonly<{ order?: number }>>(collection: ObservableCollection<T>) {\r\n const items = useObservableCollection(collection);\r\n const sortedItems = useMemo(() => items.sort((a, b) => (a.order ?? 0) - (b.order ?? 0)), [items]);\r\n return sortedItems;\r\n}\r\n","import { useCallback } from \"react\";\r\n\r\nimport { Color3, Color4 } from \"core/Maths/math.color\";\r\nimport { Quaternion, Vector3 } from \"core/Maths/math.vector\";\r\nimport { useInterceptObservable } from \"./instrumentationHooks\";\r\nimport { useObservableState } from \"./observableHooks\";\r\n\r\ntype PropertyKeys<TargetT, PropertyT> = { [PropertyKeyT in keyof TargetT]: TargetT[PropertyKeyT] extends PropertyT | null | undefined ? PropertyKeyT : never }[keyof TargetT];\r\n\r\nexport function useProperty<TargetT extends object, PropertyKeyT extends keyof TargetT>(target: TargetT, propertyKey: PropertyKeyT): TargetT[PropertyKeyT];\r\nexport function useProperty<TargetT extends object, PropertyKeyT extends keyof TargetT>(\r\n target: TargetT | null | undefined,\r\n propertyKey: PropertyKeyT\r\n): TargetT[PropertyKeyT] | undefined;\r\n/**\r\n * Translates a property value to react state, updating the state whenever the property changes.\r\n * @param target The object containing the property to observe.\r\n * @param propertyKey The key of the property to observe.\r\n * @returns The current value of the property, or null if the target is null or undefined.\r\n */\r\nexport function useProperty<TargetT extends object, PropertyKeyT extends keyof TargetT>(target: TargetT | null | undefined, propertyKey: PropertyKeyT) {\r\n return useObservableState(\r\n useCallback(() => (target ? target[propertyKey] : undefined), [target, propertyKey]),\r\n useInterceptObservable(\"property\", target, propertyKey)\r\n );\r\n}\r\n\r\nexport function useVector3Property<TargetT extends object, PropertyKeyT extends PropertyKeys<TargetT, Vector3>>(target: TargetT, propertyKey: PropertyKeyT): TargetT[PropertyKeyT];\r\nexport function useVector3Property<TargetT extends object, PropertyKeyT extends PropertyKeys<TargetT, Vector3>>(\r\n target: TargetT | null | undefined,\r\n propertyKey: PropertyKeyT\r\n): TargetT[PropertyKeyT] | undefined;\r\n/**\r\n * Translates a Vector3 property value to react state, updating the state whenever the property changes or when the x/y/z components of the Vector3 change.\r\n * @param target The object containing the property to observe.\r\n * @param propertyKey The key of the property to observe.\r\n * @returns The current value of the property, or null if the target is null or undefined.\r\n */\r\nexport function useVector3Property<TargetT extends object, PropertyKeyT extends PropertyKeys<TargetT, Vector3>>(target: TargetT | null | undefined, propertyKey: PropertyKeyT) {\r\n const vector = useProperty(target, propertyKey);\r\n useProperty(vector as Vector3 | null | undefined, \"_x\");\r\n useProperty(vector as Vector3 | null | undefined, \"_y\");\r\n useProperty(vector as Vector3 | null | undefined, \"_z\");\r\n return vector;\r\n}\r\n\r\nexport function useColor3Property<TargetT extends object, PropertyKeyT extends PropertyKeys<TargetT, Color3>>(target: TargetT, propertyKey: PropertyKeyT): TargetT[PropertyKeyT];\r\nexport function useColor3Property<TargetT extends object, PropertyKeyT extends PropertyKeys<TargetT, Color3>>(\r\n target: TargetT | null | undefined,\r\n propertyKey: PropertyKeyT\r\n): TargetT[PropertyKeyT] | undefined;\r\n/**\r\n * Translates a Color3 property value to react state, updating the state whenever the property changes or when the r/g/b components of the Color3 change.\r\n * @param target The object containing the property to observe.\r\n * @param propertyKey The key of the property to observe.\r\n * @returns The current value of the property, or null if the target is null or undefined.\r\n */\r\nexport function useColor3Property<TargetT extends object, PropertyKeyT extends PropertyKeys<TargetT, Color3>>(target: TargetT | null | undefined, propertyKey: PropertyKeyT) {\r\n const color = useProperty(target, propertyKey);\r\n useProperty(color as Color3 | null | undefined, \"r\");\r\n useProperty(color as Color3 | null | undefined, \"g\");\r\n useProperty(color as Color3 | null | undefined, \"b\");\r\n return color;\r\n}\r\n\r\nexport function useColor4Property<TargetT extends object, PropertyKeyT extends PropertyKeys<TargetT, Color4>>(target: TargetT, propertyKey: PropertyKeyT): TargetT[PropertyKeyT];\r\nexport function useColor4Property<TargetT extends object, PropertyKeyT extends PropertyKeys<TargetT, Color4>>(\r\n target: TargetT | null | undefined,\r\n propertyKey: PropertyKeyT\r\n): TargetT[PropertyKeyT] | null;\r\n/**\r\n * Translates a Color4 property value to react state, updating the state whenever the property changes or when the r/g/b components of the Color4 change.\r\n * @param target The object containing the property to observe.\r\n * @param propertyKey The key of the property to observe.\r\n * @returns The current value of the property, or null if the target is null or undefined.\r\n */\r\nexport function useColor4Property<TargetT extends object, PropertyKeyT extends PropertyKeys<TargetT, Color4>>(target: TargetT | null | undefined, propertyKey: PropertyKeyT) {\r\n const color = useProperty(target, propertyKey);\r\n useProperty(color as Color3 | null | undefined, \"r\");\r\n useProperty(color as Color3 | null | undefined, \"g\");\r\n useProperty(color as Color3 | null | undefined, \"b\");\r\n useProperty(color as Color4 | null | undefined, \"a\");\r\n return color;\r\n}\r\n\r\nexport function useQuaternionProperty<TargetT extends object, PropertyKeyT extends PropertyKeys<TargetT, Quaternion>>(\r\n target: TargetT,\r\n propertyKey: PropertyKeyT\r\n): TargetT[PropertyKeyT];\r\nexport function useQuaternionProperty<TargetT extends object, PropertyKeyT extends PropertyKeys<TargetT, Quaternion>>(\r\n target: TargetT | null | undefined,\r\n propertyKey: PropertyKeyT\r\n): TargetT[PropertyKeyT] | undefined;\r\n/**\r\n * Translates a Quaternion property value to react state, updating the state whenever the property changes or when the x/y/z/w components of the Quaternion change.\r\n * @param target The object containing the property to observe.\r\n * @param propertyKey The key of the property to observe.\r\n * @returns The current value of the property, or null if the target is null or undefined.\r\n */\r\nexport function useQuaternionProperty<TargetT extends object, PropertyKeyT extends PropertyKeys<TargetT, Quaternion>>(\r\n target: TargetT | null | undefined,\r\n propertyKey: PropertyKeyT\r\n) {\r\n const quaternion = useProperty(target, propertyKey);\r\n useProperty(quaternion as Quaternion | null | undefined, \"_x\");\r\n useProperty(quaternion as Quaternion | null | undefined, \"_y\");\r\n useProperty(quaternion as Quaternion | null | undefined, \"_z\");\r\n useProperty(quaternion as Quaternion | null | undefined, \"_w\");\r\n\r\n return quaternion;\r\n}\r\n\r\n/**\r\n * Creates a hook for a concrete value. For example, if the value is a Vector3,\r\n * it will return a hook that can intercept a change to the Vector3 property or\r\n * any of its components (x, y, z).\r\n * @param value The current value of a property that will be hooked.\r\n * @returns A hook function that can be used to observe changes to the property.\r\n */\r\nexport function MakePropertyHook(value: unknown) {\r\n if (value instanceof Vector3) {\r\n return useVector3Property;\r\n } else if (value instanceof Quaternion) {\r\n return useQuaternionProperty;\r\n } else if (value instanceof Color3) {\r\n return useColor3Property;\r\n } else if (value instanceof Color4) {\r\n return useColor4Property;\r\n } else {\r\n return useProperty;\r\n }\r\n}\r\n","import type { ComponentProps, ComponentType } from \"react\";\r\nimport { forwardRef, useMemo } from \"react\";\r\n\r\nimport { MakePropertyHook, useProperty } from \"../../hooks/compoundPropertyHooks\";\r\n\r\n/**\r\n * Helper type to check if a type includes null or undefined\r\n */\r\ntype IsNullable<T> = null extends T ? true : undefined extends T ? true : false;\r\n\r\n/**\r\n * Base props for BoundProperty\r\n */\r\ntype BaseBoundPropertyProps<TargetT extends object, PropertyKeyT extends keyof TargetT, ComponentT extends ComponentType<any>> = Omit<\r\n ComponentProps<ComponentT>,\r\n \"value\" | \"onChange\" | \"nullable\" | \"defaultValue\" | \"ignoreNullable\"\r\n> & {\r\n component: ComponentT;\r\n target: TargetT | null | undefined;\r\n propertyKey: PropertyKeyT;\r\n convertTo?: (value: TargetT[PropertyKeyT]) => TargetT[PropertyKeyT];\r\n convertFrom?: (value: TargetT[PropertyKeyT]) => TargetT[PropertyKeyT];\r\n};\r\n\r\n/**\r\n * Enhanced BoundProperty props that enforces strict nullable handling\r\n */\r\nexport type BoundPropertyProps<TargetT extends object, PropertyKeyT extends keyof TargetT, ComponentT extends ComponentType<any>> = BaseBoundPropertyProps<\r\n TargetT,\r\n PropertyKeyT,\r\n ComponentT\r\n> &\r\n (IsNullable<TargetT[PropertyKeyT]> extends true\r\n ? ComponentProps<ComponentT> extends { nullable?: boolean }\r\n ? // Component supports nullable UI and thus requires a defaultValue to be sent with nullable = {true}\r\n | {\r\n nullable: true;\r\n defaultValue: NonNullable<TargetT[PropertyKeyT]>;\r\n }\r\n | {\r\n ignoreNullable: true;\r\n defaultValue: NonNullable<TargetT[PropertyKeyT]>;\r\n }\r\n : // Component doesn't support nullable UI - prevent usage entirely with nullable properties\r\n never\r\n : {});\r\n\r\nfunction BoundPropertyCoreImpl<TargetT extends object, PropertyKeyT extends keyof TargetT, ComponentT extends ComponentType<any>>(\r\n props: Omit<BoundPropertyProps<TargetT, PropertyKeyT, ComponentT>, \"target\"> & { target: TargetT },\r\n ref?: any\r\n) {\r\n const { target, propertyKey } = props;\r\n\r\n // Get the value of the property. If it changes, it will cause a re-render, which is needed to\r\n // re-evaluate which specific hook will catch all the nested property changes we want to observe.\r\n const value = useProperty(target, propertyKey);\r\n\r\n // Determine which specific property hook to use based on the value's type.\r\n const useSpecificProperty = useMemo(() => MakePropertyHook(value), [value]);\r\n\r\n // Create an inline nested component that changes when the desired specific hook type changes (since hooks can't be conditional).\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n const SpecificComponent = useMemo(() => {\r\n return (props: ComponentProps<ComponentT>) => {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n const { target, propertyKey, convertTo, convertFrom, component: Component, ...rest } = props;\r\n\r\n // Hook the property, using the specific hook that also catches changes to nested properties as well (like x/y/z on a Vector3 for example).\r\n const value = useSpecificProperty(target, propertyKey);\r\n const convertedValue = convertTo ? convertTo(value) : value;\r\n\r\n const propsToSend = {\r\n ...rest,\r\n ref,\r\n value: convertedValue as TargetT[PropertyKeyT],\r\n onChange: (val: TargetT[PropertyKeyT]) => {\r\n const newValue = convertFrom ? convertFrom(val) : val;\r\n target[propertyKey] = newValue;\r\n },\r\n };\r\n\r\n return <Component {...(propsToSend as ComponentProps<ComponentT>)} />;\r\n };\r\n }, [useSpecificProperty]);\r\n\r\n return <SpecificComponent {...(props as ComponentProps<ComponentT>)} />;\r\n}\r\n\r\nconst BoundPropertyCore = CreateGenericForwardRef(BoundPropertyCoreImpl);\r\n\r\nfunction BoundPropertyImpl<TargetT extends object, PropertyKeyT extends keyof TargetT, ComponentT extends ComponentType<any>>(\r\n props: BoundPropertyProps<TargetT, PropertyKeyT, ComponentT>,\r\n ref?: any\r\n) {\r\n const { target, ...rest } = props;\r\n\r\n // If target is null, don't render anything.\r\n if (!target) {\r\n return null;\r\n }\r\n\r\n // Target is guaranteed to be non-null here, pass to core implementation.\r\n return <BoundPropertyCore {...rest} target={target} ref={ref} />;\r\n}\r\n\r\n// Custom generic forwardRef function (this is needed because using forwardRef with BoundPropertyImpl does not properly resolve Generic types)\r\nfunction CreateGenericForwardRef<T extends (...args: any[]) => any>(render: T) {\r\n return forwardRef(render as any) as unknown as T;\r\n}\r\n\r\n/**\r\n * Intercepts the passed in component's target[propertyKey] with useInterceptObservable and sets component state using useObservableState.\r\n * Renders the passed in component with value as the new observableState value and onChange as a callback to set the target[propertyKey] value.\r\n *\r\n * NOTE: BoundProperty has strict nullable enforcement!\r\n *\r\n * If Target[PropertyKey] is Nullable, caller can only bind to a component that explicitly handles nullable (and caller must send nullable/defaultValue props)\r\n *\r\n * @param props BoundPropertyProps with strict nullable validation\r\n * @returns JSX element\r\n */\r\nexport const BoundProperty = CreateGenericForwardRef(BoundPropertyImpl);\r\n","import { makeStyles } from \"@fluentui/react-components\";\r\nimport { Collapse as FluentCollapse } from \"@fluentui/react-motion-components-preview\";\r\nimport type { FunctionComponent, PropsWithChildren } from \"react\";\r\n\r\ntype CollapseProps = {\r\n visible: boolean;\r\n orientation?: \"horizontal\" | \"vertical\";\r\n};\r\n\r\nconst useCollapseStyles = makeStyles({\r\n collapseContent: {\r\n overflow: \"hidden\",\r\n display: \"flex\",\r\n },\r\n horizontal: {\r\n flexDirection: \"row\",\r\n },\r\n vertical: {\r\n flexDirection: \"column\",\r\n },\r\n});\r\n\r\n/**\r\n * Wraps the passed in children with a fluent collapse component, handling smooth animation when visible prop changes\r\n * NOTE: When passing in children, prefer react fragment over empty div to avoid bloating the react tree with an unnecessary div\r\n * @param props\r\n * @returns\r\n */\r\nexport const Collapse: FunctionComponent<PropsWithChildren<CollapseProps>> = (props) => {\r\n Collapse.displayName = \"Collapse\";\r\n const classes = useCollapseStyles();\r\n return (\r\n <FluentCollapse visible={props.visible} orientation={props.orientation}>\r\n <div className={`${classes.collapseContent} ${props.orientation === \"horizontal\" ? classes.horizontal : classes.vertical}`}>{props.children}</div>\r\n </FluentCollapse>\r\n );\r\n};\r\n","import { GetClassName } from \"core/Misc/typeStore\";\r\n\r\n// Check if BABYLON namespace exists\r\nlet BabylonNamespace = \"\";\r\nconst GlobalObject = typeof global !== \"undefined\" ? global : typeof window !== \"undefined\" ? window : undefined;\r\nif (typeof GlobalObject !== \"undefined\") {\r\n if (typeof (<any>GlobalObject).BABYLON !== \"undefined\") {\r\n BabylonNamespace = \"BABYLON.\";\r\n }\r\n}\r\n\r\n// Inspired by previous copyToClipboard() function which was copying Color3\r\n// Copies strCommand to clipboard\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport function copyCommandToClipboard(strCommand: string) {\r\n const element = document.createElement(\"div\");\r\n element.textContent = strCommand;\r\n document.body.appendChild(element);\r\n\r\n if (window.getSelection) {\r\n const range = document.createRange();\r\n range.selectNode(element);\r\n window.getSelection()!.removeAllRanges();\r\n window.getSelection()!.addRange(range);\r\n }\r\n\r\n document.execCommand(\"copy\");\r\n element.remove();\r\n}\r\n\r\n// Return the class name of the considered target\r\n// babylonNamespace is either \"\" (ES6) or \"BABYLON.\"\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport function getClassNameWithNamespace(obj: any): { className: string; babylonNamespace: string } {\r\n let className = GetClassName(obj);\r\n if (className.includes(\"BABYLON.\")) {\r\n className = className.split(\"BABYLON.\")[1];\r\n }\r\n return { className, babylonNamespace: BabylonNamespace };\r\n}\r\n","import type { PropsWithChildren, FunctionComponent } from \"react\";\r\nimport { createContext } from \"react\";\r\nimport type { Theme } from \"@fluentui/react-components\";\r\nimport { FluentProvider, webDarkTheme } from \"@fluentui/react-components\";\r\n\r\nexport type UiSize = \"small\" | \"medium\";\r\nexport type ToolHostProps = {\r\n /**\r\n * Will ensure all of the controls within the tool are of the same scale\r\n */\r\n size?: UiSize;\r\n\r\n /**\r\n * Allows host to pass in a theme\r\n */\r\n customTheme?: Theme;\r\n\r\n /**\r\n * Can be set to true to disable the copy button in the tool's property lines. Default is false (copy enabled)\r\n */\r\n disableCopy?: boolean;\r\n\r\n /**\r\n * Name of the tool displayed in the UX\r\n */\r\n toolName: string;\r\n};\r\n\r\nexport const ToolContext = createContext({ useFluent: false as boolean, disableCopy: false as boolean, toolName: \"\" as string, size: undefined as UiSize | undefined } as const);\r\n\r\n/**\r\n * For tools which are ready to move over the fluent, wrap the root of the tool (or the panel which you want fluentized) with this component\r\n * Today we will only enable fluent if the URL has the `newUX` query parameter is truthy\r\n * @param props\r\n * @returns\r\n */\r\nexport const FluentToolWrapper: FunctionComponent<PropsWithChildren<ToolHostProps>> = (props) => {\r\n const url = new URL(window.location.href);\r\n const useFluent = url.searchParams.has(\"newUX\") || url.hash.includes(\"newUX\");\r\n const contextValue = {\r\n useFluent,\r\n disableCopy: !!props.disableCopy,\r\n toolName: props.toolName,\r\n size: props.size,\r\n };\r\n return useFluent ? (\r\n <FluentProvider theme={props.customTheme || webDarkTheme}>\r\n <ToolContext.Provider value={contextValue}>{props.children}</ToolContext.Provider>\r\n </FluentProvider>\r\n ) : (\r\n <ToolContext.Provider value={contextValue}>{props.children}</ToolContext.Provider>\r\n );\r\n};\r\n","import { ToggleButton as FluentToggleButton } from \"@fluentui/react-components\";\r\nimport type { ButtonProps } from \"./button\";\r\nimport { useCallback, useContext, useEffect, useState } from \"react\";\r\nimport type { FunctionComponent } from \"react\";\r\nimport type { FluentIcon } from \"@fluentui/react-icons\";\r\nimport { ToolContext } from \"../hoc/fluentToolWrapper\";\r\n\r\ntype ToggleButtonProps = Omit<ButtonProps, \"icon\" | \"onClick\"> & {\r\n value: boolean;\r\n checkedIcon: FluentIcon;\r\n uncheckedIcon?: FluentIcon;\r\n onChange: (checked: boolean) => void;\r\n};\r\n\r\n/**\r\n * Toggles between two states using a button with icons.\r\n * If no disabledIcon is provided, the button will toggle between visual enabled/disabled states without an icon change\r\n *\r\n * @param props\r\n * @returns\r\n */\r\nexport const ToggleButton: FunctionComponent<ToggleButtonProps> = (props) => {\r\n ToggleButton.displayName = \"ToggleButton\";\r\n const { value, onChange, title, appearance = \"subtle\" } = props;\r\n const { size } = useContext(ToolContext);\r\n const [checked, setChecked] = useState(value);\r\n const toggle = useCallback(() => {\r\n setChecked((prev) => {\r\n const enabled = !prev;\r\n onChange(enabled);\r\n return enabled;\r\n });\r\n }, [setChecked]);\r\n\r\n useEffect(() => {\r\n setChecked(props.value);\r\n }, [props.value]);\r\n\r\n return (\r\n <FluentToggleButton\r\n title={title}\r\n size={size}\r\n icon={checked ? <props.checkedIcon /> : props.uncheckedIcon ? <props.uncheckedIcon /> : <props.checkedIcon />}\r\n appearance={appearance}\r\n checked={checked}\r\n onClick={toggle}\r\n />\r\n );\r\n};\r\n","import { Button as FluentButton } from \"@fluentui/react-components\";\r\nimport type { FunctionComponent } from \"react\";\r\nimport { useContext } from \"react\";\r\nimport type { FluentIcon } from \"@fluentui/react-icons\";\r\nimport type { BasePrimitiveProps } from \"./primitive\";\r\nimport { ToolContext } from \"../hoc/fluentToolWrapper\";\r\n\r\nexport type ButtonProps = BasePrimitiveProps & {\r\n onClick: () => void;\r\n icon?: FluentIcon;\r\n appearance?: \"subtle\" | \"transparent\";\r\n label?: string;\r\n};\r\n\r\nexport const Button: FunctionComponent<ButtonProps> = (props) => {\r\n Button.displayName = \"Button\";\r\n const { size } = useContext(ToolContext);\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n const { icon: Icon, label, ...buttonProps } = props;\r\n return (\r\n <FluentButton iconPosition=\"after\" {...buttonProps} size={size} icon={Icon && <Icon />}>\r\n {label && props.label}\r\n </FluentButton>\r\n );\r\n};\r\n","import { makeStyles, tokens } from \"@fluentui/react-components\";\r\nimport type { GriffelStyle } from \"@fluentui/react-components\";\r\n\r\nimport type { KeyboardEvent, FocusEvent } from \"react\";\r\n\r\nexport const CustomTokens = {\r\n inputWidth: \"150px\",\r\n lineHeight: tokens.lineHeightHero700, // 36px\r\n lineHeightSmall: tokens.lineHeightBase500, // 28px\r\n dividerGap: tokens.fontSizeBase100, // \"10px\",\r\n dividerGapSmall: tokens.borderRadiusMedium, // 4px\",\r\n labelMinWidth: \"50px\",\r\n sliderMinWidth: \"30px\",\r\n sliderMaxWidth: \"80px\",\r\n rightAlignOffset: `-${tokens.borderRadiusXLarge}`, // -8px\r\n};\r\n\r\nexport const UniformWidthStyling: GriffelStyle = { width: CustomTokens.inputWidth, boxSizing: \"border-box\" };\r\nexport const useInputStyles = makeStyles({\r\n input: UniformWidthStyling,\r\n inputSlot: { textAlign: \"right\" },\r\n invalid: { backgroundColor: tokens.colorPaletteRedBackground2 },\r\n container: {\r\n flex: 1,\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n justifyContent: \"center\", // align items vertically\r\n },\r\n});\r\n\r\nexport function HandleOnBlur(event: FocusEvent<HTMLInputElement>) {\r\n event.stopPropagation();\r\n event.preventDefault();\r\n}\r\n\r\nexport function HandleKeyDown(event: KeyboardEvent<HTMLInputElement>) {\r\n event.stopPropagation(); // Prevent event propagation\r\n\r\n // Prevent Enter key from causing form submission or value reversion\r\n if (event.key === \"Enter\") {\r\n event.preventDefault();\r\n }\r\n}\r\n\r\n/**\r\n * Fluent's CalculatePrecision function\r\n * https://github.com/microsoft/fluentui/blob/dcbf775d37938eacffa37922fc0b43a3cdd5753f/packages/utilities/src/math.ts#L91C1\r\n *\r\n * Calculates a number's precision based on the number of trailing\r\n * zeros if the number does not have a decimal indicated by a negative\r\n * precision. Otherwise, it calculates the number of digits after\r\n * the decimal point indicated by a positive precision.\r\n *\r\n * @param value - the value to determine the precision of\r\n * @returns the calculated precision\r\n */\r\nexport function CalculatePrecision(value: number) {\r\n /**\r\n * Group 1:\r\n * [1-9]([0]+$) matches trailing zeros\r\n * Group 2:\r\n * \\.([0-9]*) matches all digits after a decimal point.\r\n */ const groups = /[1-9]([0]+$)|\\.([0-9]*)/.exec(String(value));\r\n if (!groups) {\r\n return 0;\r\n }\r\n if (groups[1]) {\r\n return -groups[1].length;\r\n }\r\n if (groups[2]) {\r\n return groups[2].length;\r\n }\r\n return 0;\r\n}\r\n\r\nconst HEX_REGEX = RegExp(/^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3}|[A-Fa-f0-9]{8})$/);\r\nexport function ValidateColorHex(val: string) {\r\n return val != \"\" && HEX_REGEX.test(val);\r\n}\r\n","import { Body1, InfoLabel, Link, Checkbox, makeStyles, Body1Strong, tokens, mergeClasses } from \"@fluentui/react-components\";\r\nimport {\r\n ChevronCircleDown20Regular,\r\n ChevronCircleDown16Regular,\r\n ChevronCircleRight16Regular,\r\n ChevronCircleRight20Regular,\r\n Copy16Regular,\r\n Copy20Regular,\r\n} from \"@fluentui/react-icons\";\r\nimport type { FunctionComponent, HTMLProps, PropsWithChildren } from \"react\";\r\nimport { useContext, useState, forwardRef, cloneElement, isValidElement, useRef } from \"react\";\r\nimport { Collapse } from \"../../primitives/collapse\";\r\nimport { copyCommandToClipboard } from \"../../../copyCommandToClipboard\";\r\nimport { ToolContext } from \"../fluentToolWrapper\";\r\nimport type { PrimitiveProps } from \"../../primitives/primitive\";\r\nimport { ToggleButton } from \"../../primitives/toggleButton\";\r\nimport { Button } from \"../../primitives/button\";\r\nimport { CustomTokens } from \"../../primitives/utils\";\r\n\r\nconst usePropertyLineStyles = makeStyles({\r\n baseLine: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"flex-start\",\r\n width: \"100%\",\r\n },\r\n infoLabel: {\r\n display: \"flex\",\r\n flex: \"1 1 0\", // grow=1, shrink =1, basis = 0 initial size before\r\n minWidth: CustomTokens.labelMinWidth,\r\n textAlign: \"left\",\r\n },\r\n labelSlot: {\r\n display: \"flex\",\r\n minWidth: 0,\r\n },\r\n labelText: {\r\n whiteSpace: \"nowrap\",\r\n overflow: \"hidden\",\r\n textOverflow: \"ellipsis\",\r\n },\r\n rightContent: {\r\n flex: \"0 1 auto\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"flex-end\",\r\n },\r\n infoPopup: {\r\n whiteSpace: \"normal\",\r\n wordBreak: \"break-word\",\r\n },\r\n copy: {\r\n marginRight: CustomTokens.rightAlignOffset, // Accounts for the padding baked into fluent button / ensures propertyLine looks visually aligned at the right\r\n },\r\n expandedContentDiv: {\r\n overflow: \"hidden\",\r\n },\r\n});\r\n\r\ntype BasePropertyLineProps = {\r\n /**\r\n * The name of the property to display in the property line.\r\n */\r\n label: string;\r\n /**\r\n * Optional description for the property, shown on hover of the info icon\r\n */\r\n description?: string;\r\n /**\r\n * Optional function returning a string to copy to clipboard.\r\n */\r\n onCopy?: () => string;\r\n /**\r\n * Link to the documentation for this property, available from the info icon either linked from the description (if provided) or default 'docs' text\r\n */\r\n docLink?: string;\r\n};\r\n\r\n// Only require value/onChange/defaultValue props if nullable is true\r\ntype NullableProperty<ValueT> = {\r\n nullable: true;\r\n ignoreNullable: false;\r\n value: ValueT;\r\n onChange: (value: ValueT) => void;\r\n defaultValue?: ValueT;\r\n};\r\n\r\ntype IgnoreNullable<ValueT> = {\r\n ignoreNullable: true;\r\n nullable: false;\r\n value: ValueT;\r\n onChange: (value: ValueT) => void;\r\n defaultValue: ValueT;\r\n};\r\n\r\ntype NonNullableProperty = {\r\n nullable?: false;\r\n ignoreNullable?: false;\r\n};\r\n\r\n// Only expect optional expandByDefault prop if expandedContent is defined\r\ntype ExpandableProperty = {\r\n /**\r\n * If supplied, an 'expand' icon will be shown which, when clicked, renders this component within the property line.\r\n */\r\n expandedContent: JSX.Element;\r\n\r\n /**\r\n * If true, the expanded content will be shown by default.\r\n */\r\n expandByDefault?: boolean;\r\n};\r\n\r\n// If expanded content is undefined, don't expect expandByDefault prop\r\ntype NonExpandableProperty = {\r\n expandedContent?: undefined;\r\n};\r\n\r\nexport type PropertyLineProps<ValueT> = BasePropertyLineProps &\r\n (NullableProperty<ValueT> | NonNullableProperty | IgnoreNullable<ValueT>) &\r\n (ExpandableProperty | NonExpandableProperty);\r\n\r\n/**\r\n * A reusable component that renders a property line with a label and child content, and an optional description, copy button, and expandable section.\r\n *\r\n * @param props - The properties for the PropertyLine component.\r\n * @returns A React element representing the property line.\r\n *\r\n */\r\nexport const PropertyLine = forwardRef<HTMLDivElement, PropsWithChildren<PropertyLineProps<any>>>((props, ref) => {\r\n PropertyLine.displayName = \"PropertyLine\";\r\n const { disableCopy, size } = useContext(ToolContext);\r\n const classes = usePropertyLineStyles();\r\n const { label, onCopy, expandedContent, children, nullable, ignoreNullable } = props;\r\n\r\n const [expanded, setExpanded] = useState(\"expandByDefault\" in props ? props.expandByDefault : false);\r\n const cachedVal = useRef(nullable ? props.value : null);\r\n\r\n const description = props.docLink ? <Link href={props.docLink}>{props.description ?? \"Docs\"}</Link> : props.description;\r\n\r\n // Process children to handle nullable state -- creating component in disabled state with default value in lieu of null value\r\n const processedChildren =\r\n (nullable || ignoreNullable) && isValidElement(children)\r\n ? cloneElement(children, {\r\n ...children.props,\r\n disabled: children.props.disabled || (nullable && props.value == null),\r\n value: props.value ?? props.defaultValue,\r\n defaultValue: undefined, // Don't pass defaultValue to children as there is no guarantee how this will be used and we can't mix controlled + uncontrolled state\r\n })\r\n : children;\r\n\r\n return (\r\n <LineContainer ref={ref}>\r\n <div className={classes.baseLine}>\r\n <InfoLabel\r\n size={size}\r\n className={classes.infoLabel}\r\n label={{ className: classes.labelSlot }}\r\n info={description ? <div className={classes.infoPopup}>{description}</div> : undefined}\r\n title={label}\r\n >\r\n <Body1Strong className={classes.labelText}>{label}</Body1Strong>\r\n </InfoLabel>\r\n <div className={classes.rightContent}>\r\n {expandedContent && (\r\n <ToggleButton\r\n title=\"Expand/Collapse property\"\r\n appearance=\"transparent\"\r\n checkedIcon={size === \"small\" ? ChevronCircleDown16Regular : ChevronCircleDown20Regular}\r\n uncheckedIcon={size === \"small\" ? ChevronCircleRight16Regular : ChevronCircleRight20Regular}\r\n value={expanded === true}\r\n onChange={setExpanded}\r\n />\r\n )}\r\n\r\n {nullable && !ignoreNullable && (\r\n // If this is a nullableProperty and ignoreNullable was not sent, display a checkbox used to toggle null ('checked' means 'non null')\r\n <Checkbox\r\n checked={!(props.value == null)}\r\n onChange={(_, data) => {\r\n if (data.checked) {\r\n // if checked this means we are returning to non-null, use cached value if exists. If no cached value, use default value\r\n cachedVal.current != null ? props.onChange(cachedVal.current) : props.onChange(props.defaultValue);\r\n } else {\r\n // if moving to un-checked state, this means moving to null value. Cache the old value and tell props.onChange(null)\r\n cachedVal.current = props.value;\r\n props.onChange(null);\r\n }\r\n }}\r\n title=\"Toggle null state\"\r\n />\r\n )}\r\n {processedChildren}\r\n {onCopy && !disableCopy && (\r\n <Button\r\n className={classes.copy}\r\n title=\"Copy to clipboard\"\r\n appearance=\"transparent\"\r\n icon={size === \"small\" ? Copy16Regular : Copy20Regular}\r\n onClick={() => copyCommandToClipboard(onCopy())}\r\n />\r\n )}\r\n </div>\r\n </div>\r\n {expandedContent && (\r\n <Collapse visible={!!expanded}>\r\n <div className={classes.expandedContentDiv}>{expandedContent}</div>\r\n </Collapse>\r\n )}\r\n </LineContainer>\r\n );\r\n});\r\n\r\nconst useLineStyles = makeStyles({\r\n container: {\r\n width: \"100%\",\r\n display: \"flex\",\r\n flexDirection: \"column\", // Stack line + expanded content\r\n minHeight: CustomTokens.lineHeight,\r\n boxSizing: \"border-box\",\r\n justifyContent: \"center\",\r\n paddingTop: tokens.spacingVerticalXXS,\r\n paddingBottom: tokens.spacingVerticalXXS,\r\n },\r\n containerSmall: {\r\n minHeight: CustomTokens.lineHeightSmall,\r\n },\r\n});\r\n\r\nexport const LineContainer = forwardRef<HTMLDivElement, PropsWithChildren<HTMLProps<HTMLDivElement>>>((props, ref) => {\r\n const { size } = useContext(ToolContext);\r\n const classes = useLineStyles();\r\n\r\n return (\r\n <div ref={ref} className={mergeClasses(classes.container, size == \"small\" ? classes.containerSmall : undefined)} {...props}>\r\n {props.children}\r\n </div>\r\n );\r\n});\r\n\r\nexport const PlaceholderPropertyLine: FunctionComponent<PrimitiveProps<any> & PropertyLineProps<any>> = (props) => {\r\n return (\r\n <PropertyLine {...props}>\r\n <Body1>{props.value}</Body1>\r\n </PropertyLine>\r\n );\r\n};\r\n","import { Body1 } from \"@fluentui/react-components\";\r\nimport { PropertyLine } from \"./propertyLine\";\r\nimport { Link } from \"../../primitives/link\";\r\nimport type { ImmutablePrimitiveProps } from \"../../primitives/primitive\";\r\nimport type { PropertyLineProps } from \"./propertyLine\";\r\nimport type { FunctionComponent } from \"react\";\r\n\r\ntype LinkProps = ImmutablePrimitiveProps<string> & {\r\n onLink?: () => void;\r\n url?: string;\r\n};\r\n\r\n/**\r\n * Wraps a link in a property line\r\n * @param props - PropertyLineProps and LinkProps\r\n * @returns property-line wrapped link\r\n */\r\nexport const LinkPropertyLine: FunctionComponent<PropertyLineProps<string> & LinkProps> = (props) => {\r\n LinkPropertyLine.displayName = \"LinkPropertyLine\";\r\n return (\r\n <PropertyLine {...props}>\r\n <Link inline onClick={() => props.onLink?.()} href={props.url} title={props.title}>\r\n <Body1>{props.value}</Body1>\r\n </Link>\r\n </PropertyLine>\r\n );\r\n};\r\n","import type { FunctionComponent } from \"react\";\r\n\r\nimport type { PropertyLineProps } from \"shared-ui-components/fluent/hoc/propertyLines/propertyLine\";\r\nimport type { ISelectionService } from \"../../services/selectionService\";\r\n\r\nimport { useEffect, useState } from \"react\";\r\n\r\nimport type { Nullable } from \"core/types\";\r\nimport { LinkPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/linkPropertyLine\";\r\n\r\ntype LinkToEntityProps = { entity: Nullable<{ name: string; reservedDataStore?: Record<PropertyKey, unknown> }>; selectionService: ISelectionService };\r\n\r\n/**\r\n * A property line that links to a specific entity in the scene.\r\n * @param props an entity and a selection service\r\n * @returns A link property line component.\r\n */\r\nexport const LinkToEntityPropertyLine: FunctionComponent<PropertyLineProps<string> & LinkToEntityProps> = (props) => {\r\n const { selectionService, entity, ...rest } = props;\r\n const [linkedEntity, setLinkedEntity] = useState(entity);\r\n useEffect(() => {\r\n setLinkedEntity(props.entity);\r\n }, [props.entity]);\r\n return (\r\n linkedEntity &&\r\n !linkedEntity.reservedDataStore?.hidden && <LinkPropertyLine {...rest} value={linkedEntity.name} onLink={() => (selectionService.selectedEntity = linkedEntity)} />\r\n );\r\n};\r\n","import type { AccordionToggleData, AccordionToggleEvent } from \"@fluentui/react-components\";\r\nimport type { FunctionComponent, PropsWithChildren } from \"react\";\r\n\r\nimport { Children, isValidElement, useCallback, useContext, useEffect, useMemo, useState } from \"react\";\r\n\r\nimport { AccordionHeader, AccordionItem, AccordionPanel, Divider, Accordion as FluentAccordion, Subtitle2Stronger, makeStyles, tokens } from \"@fluentui/react-components\";\r\nimport { CustomTokens } from \"./utils\";\r\nimport { ToolContext } from \"../hoc/fluentToolWrapper\";\r\nconst useStyles = makeStyles({\r\n accordion: {\r\n overflowX: \"hidden\",\r\n overflowY: \"auto\",\r\n paddingBottom: tokens.spacingVerticalM, // bottom padding since there is no divider at the bottom\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n height: \"100%\",\r\n },\r\n divider: {\r\n paddingTop: CustomTokens.dividerGap,\r\n paddingBottom: CustomTokens.dividerGap,\r\n },\r\n dividerSmall: {\r\n paddingTop: CustomTokens.dividerGapSmall,\r\n paddingBottom: CustomTokens.dividerGapSmall,\r\n },\r\n panelDiv: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n overflow: \"hidden\",\r\n },\r\n});\r\n\r\nexport type AccordionSectionProps = {\r\n title: string;\r\n collapseByDefault?: boolean;\r\n};\r\n\r\nexport const AccordionSection: FunctionComponent<PropsWithChildren<AccordionSectionProps>> = (props) => {\r\n AccordionSection.displayName = \"AccordionSection\";\r\n const classes = useStyles();\r\n\r\n return <div className={classes.panelDiv}>{props.children}</div>;\r\n};\r\n\r\nexport const Accordion: FunctionComponent<PropsWithChildren> = (props) => {\r\n Accordion.displayName = \"Accordion\";\r\n const classes = useStyles();\r\n const { size } = useContext(ToolContext);\r\n const { children, ...rest } = props;\r\n const validChildren = useMemo(() => {\r\n return (\r\n Children.map(children, (child) => {\r\n if (isValidElement(child)) {\r\n const childProps = child.props as Partial<AccordionSectionProps>;\r\n if (childProps.title) {\r\n return {\r\n title: childProps.title,\r\n collapseByDefault: childProps.collapseByDefault,\r\n content: child,\r\n };\r\n }\r\n }\r\n return null;\r\n })?.filter(Boolean) ?? []\r\n );\r\n }, [children]);\r\n\r\n // Tracks open items, and used to tell the Accordion which sections should be expanded.\r\n const [openItems, setOpenItems] = useState(validChildren.filter((child) => !child.collapseByDefault).map((child) => child.title));\r\n\r\n // Tracks closed items, which is needed so that when the children change, we only update the open/closed state\r\n // (depending on the collapseByDefault prop) for items that have not been explicitly opened or closed.\r\n const [closedItems, setClosedItems] = useState(validChildren.filter((child) => child.collapseByDefault).map((child) => child.title));\r\n\r\n useEffect(() => {\r\n for (const defaultOpenItem of validChildren.filter((child) => !child.collapseByDefault).map((child) => child.title)) {\r\n // If a child is not marked as collapseByDefault, then it should be opened by default, and\r\n // it is only \"default\" if it hasn't already been explicitly added to the opened or closed list.\r\n if (!closedItems.includes(defaultOpenItem) && !openItems.includes(defaultOpenItem)) {\r\n setOpenItems((prev) => [...prev, defaultOpenItem]);\r\n }\r\n }\r\n }, [validChildren]);\r\n\r\n const onToggle = useCallback((event: AccordionToggleEvent, data: AccordionToggleData<string>) => {\r\n if (data.openItems.includes(data.value)) {\r\n setOpenItems((prev) => [...prev, data.value]);\r\n setClosedItems((prev) => prev.filter((item) => item !== data.value));\r\n } else {\r\n setClosedItems((prev) => [...prev, data.value]);\r\n setOpenItems((prev) => prev.filter((item) => item !== data.value));\r\n }\r\n }, []);\r\n\r\n return (\r\n <FluentAccordion className={classes.accordion} collapsible multiple onToggle={onToggle} openItems={openItems} {...rest}>\r\n {validChildren.map((child, index) => {\r\n return (\r\n <AccordionItem key={child.content.key} value={child.title}>\r\n <AccordionHeader size={size}>\r\n <Subtitle2Stronger>{child.title}</Subtitle2Stronger>\r\n </AccordionHeader>\r\n <AccordionPanel>\r\n <div className={classes.panelDiv}>{child.content}</div>\r\n </AccordionPanel>\r\n {index < validChildren.length - 1 && <Divider inset={true} className={size === \"small\" ? classes.dividerSmall : classes.divider} />}\r\n </AccordionItem>\r\n );\r\n })}\r\n </FluentAccordion>\r\n );\r\n};\r\n","import type { ISettingsContext } from \"../services/settingsContext\";\r\nimport type { HorizontalLocation, VerticalLocation } from \"../services/shellService\";\r\n\r\nimport { useCallback } from \"react\";\r\nimport { useLocalStorage } from \"usehooks-ts\";\r\n\r\nimport { useObservableState } from \"./observableHooks\";\r\n\r\nconst CompactModeStorageKey = \"Babylon/Settings/IsCompactMode\";\r\nconst SidePaneDockOverridesStorageKey = \"Babylon/Settings/SidePaneDockOverrides\";\r\n\r\nfunction useSetting<T>(storageKey: string, defaultValue: T) {\r\n const [value, setValue, resetValue] = useLocalStorage<T>(storageKey, defaultValue);\r\n\r\n if (!localStorage.getItem(storageKey)) {\r\n localStorage.setItem(storageKey, JSON.stringify(value));\r\n }\r\n\r\n return [value, setValue, resetValue] as const;\r\n}\r\n\r\n/**\r\n * Gets the compact mode setting.\r\n * @returns A tuple containing the current compact mode value, a function to update it, and a function to reset it.\r\n */\r\nexport function useCompactMode() {\r\n return useSetting<boolean>(CompactModeStorageKey, !matchMedia(\"(pointer: coarse)\").matches);\r\n}\r\n\r\n/**\r\n * Gets the side pane dock overrides configuration.\r\n * @returns A record mapping side pane IDs to their dock locations.\r\n */\r\nexport function useSidePaneDockOverrides() {\r\n return useSetting<Record<string, Readonly<{ horizontalLocation: HorizontalLocation; verticalLocation: VerticalLocation }> | undefined>>(SidePaneDockOverridesStorageKey, {});\r\n}\r\n\r\nconst RadiansToDegrees = 180 / Math.PI;\r\n\r\nfunction WrapAngle(angle: number) {\r\n angle %= Math.PI * 2;\r\n if (angle < 0) {\r\n angle += Math.PI * 2;\r\n }\r\n return angle;\r\n}\r\n\r\n/**\r\n * Gets functions used to convert to/from display values for angles based on the current settings.\r\n * @param settings The settings context to use for determining if angles should be displayed in degrees or radians.\r\n * @returns A tuple containing the functions to convert to and from display values.\r\n */\r\nexport function useAngleConverters(settings: ISettingsContext) {\r\n const useDegrees = useObservableState(() => settings.useDegrees, settings.settingsChangedObservable);\r\n\r\n const toDisplayValue = useCallback(\r\n (angle: number, wrap = false) => {\r\n if (wrap) {\r\n angle = WrapAngle(angle);\r\n }\r\n return useDegrees ? angle * RadiansToDegrees : angle;\r\n },\r\n [useDegrees]\r\n );\r\n\r\n const fromDisplayValue = useCallback(\r\n (angle: number, wrap = false) => {\r\n angle = useDegrees ? angle / RadiansToDegrees : angle;\r\n if (wrap) {\r\n angle = WrapAngle(angle);\r\n }\r\n return angle;\r\n },\r\n [useDegrees]\r\n );\r\n\r\n return [toDisplayValue, fromDisplayValue, useDegrees] as const;\r\n}\r\n","import type { ContextType, FunctionComponent, PropsWithChildren } from \"react\";\r\n\r\nimport { useMemo } from \"react\";\r\n\r\nimport { ToolContext } from \"shared-ui-components/fluent/hoc/fluentToolWrapper\";\r\nimport { useCompactMode } from \"../hooks/settingsHooks\";\r\n\r\nexport const CompactModeContextProvider: FunctionComponent<PropsWithChildren> = (props) => {\r\n const [compactMode] = useCompactMode();\r\n\r\n const toolsContext = useMemo(() => {\r\n return {\r\n toolName: \"\",\r\n size: compactMode ? \"small\" : \"medium\",\r\n disableCopy: false,\r\n useFluent: true,\r\n } satisfies ContextType<typeof ToolContext>;\r\n }, [compactMode]);\r\n\r\n return <ToolContext.Provider value={toolsContext}>{props.children}</ToolContext.Provider>;\r\n};\r\n","import type { ComponentType, PropsWithChildren } from \"react\";\r\n\r\nimport type { AccordionSectionProps } from \"shared-ui-components/fluent/primitives/accordion\";\r\n\r\nimport { makeStyles } from \"@fluentui/react-components\";\r\nimport { Children, isValidElement, useMemo } from \"react\";\r\n\r\nimport { Accordion, AccordionSection } from \"shared-ui-components/fluent/primitives/accordion\";\r\nimport { CompactModeContextProvider } from \"../components/compactModeContextProvider\";\r\n\r\nfunction AsReadonlyArray<T>(array: T[]): readonly T[] {\r\n return array;\r\n}\r\n\r\nexport type DynamicAccordionSection = Readonly<{\r\n /**\r\n * A unique identity for the section, which can be referenced by section content.\r\n */\r\n identity: string;\r\n\r\n /**\r\n * An optional order for the section, relative to other sections.\r\n * Defaults to 0.\r\n */\r\n order?: number;\r\n\r\n /**\r\n * An optional flag indicating whether the section should be collapsed by default.\r\n * Defaults to false.\r\n */\r\n collapseByDefault?: boolean;\r\n}>;\r\n\r\nexport type DynamicAccordionSectionContent<ContextT> = Readonly<{\r\n /**\r\n * A unique key for the the content.\r\n */\r\n key: string;\r\n\r\n /**\r\n * The section this content belongs to.\r\n */\r\n section: string;\r\n\r\n /**\r\n * An optional order for the content within the section.\r\n * Defaults to 0.\r\n */\r\n order?: number;\r\n\r\n /**\r\n * The React component that will be rendered for this content.\r\n */\r\n component: ComponentType<{ context: ContextT }>;\r\n}>;\r\n\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nconst useStyles = makeStyles({\r\n rootDiv: {\r\n flex: 1,\r\n overflow: \"hidden\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n },\r\n});\r\n\r\nexport function ExtensibleAccordion<ContextT = unknown>(\r\n props: PropsWithChildren<{\r\n sections: readonly DynamicAccordionSection[];\r\n sectionContent: readonly DynamicAccordionSectionContent<ContextT>[];\r\n context: ContextT;\r\n }>\r\n) {\r\n const classes = useStyles();\r\n\r\n const { children, sections, sectionContent, context } = props;\r\n\r\n const defaultSections = useMemo(() => {\r\n const defaultSections: DynamicAccordionSection[] = [];\r\n if (children) {\r\n Children.forEach(children, (child) => {\r\n if (isValidElement(child)) {\r\n const childProps = child.props as AccordionSectionProps;\r\n defaultSections.push({\r\n identity: childProps.title,\r\n collapseByDefault: childProps.collapseByDefault,\r\n });\r\n }\r\n });\r\n }\r\n return AsReadonlyArray(defaultSections);\r\n }, [children]);\r\n\r\n const defaultSectionContent = useMemo(() => {\r\n const defaultSectionContent: DynamicAccordionSectionContent<ContextT>[] = [];\r\n if (children) {\r\n Children.forEach(children, (child, index) => {\r\n if (isValidElement(child)) {\r\n const childProps = child.props as AccordionSectionProps;\r\n defaultSectionContent.push({\r\n key: child.key ?? childProps.title,\r\n section: defaultSections[index].identity,\r\n component: () => child,\r\n });\r\n }\r\n });\r\n }\r\n return AsReadonlyArray(defaultSectionContent);\r\n }, [children, defaultSections]);\r\n\r\n const mergedSectionContent = useMemo(() => {\r\n return AsReadonlyArray(\r\n [...defaultSectionContent, ...sectionContent].map((content, index) => {\r\n return {\r\n ...content,\r\n key: `${content.key}-${index}`,\r\n order: content.order ?? index,\r\n } as const;\r\n })\r\n );\r\n }, [defaultSectionContent, sectionContent]);\r\n\r\n const mergedSections = useMemo(() => {\r\n const mergedSections = [...defaultSections, ...sections];\r\n\r\n // Check for implicit sections (e.g. sections that were not explicitly defined, but referenced by content).\r\n const implicitSections: DynamicAccordionSection[] = [];\r\n for (const sectionContent of mergedSectionContent) {\r\n if (!mergedSections.some((s) => s.identity === sectionContent.section) && !implicitSections.some((s) => s.identity === sectionContent.section)) {\r\n implicitSections.push({ identity: sectionContent.section });\r\n }\r\n }\r\n\r\n return AsReadonlyArray(\r\n [...implicitSections, ...mergedSections].map((section, index) => {\r\n return {\r\n ...section,\r\n order: section.order ?? index,\r\n collapseByDefault: section.collapseByDefault ?? false,\r\n } as const;\r\n })\r\n );\r\n }, [defaultSections, sections, mergedSectionContent]);\r\n\r\n const visibleSections = useMemo(() => {\r\n if (!context) {\r\n return [];\r\n }\r\n\r\n const sortedSections = [...mergedSections].sort((a, b) => a.order - b.order);\r\n\r\n return sortedSections\r\n .map((section) => {\r\n // Get a flat list of the section content, preserving the key so it can be used when each component for each section is rendered.\r\n const contentForSection = mergedSectionContent.filter((content) => content.section === section.identity);\r\n\r\n // If there is no content for this section, we skip it.\r\n if (contentForSection.length === 0) {\r\n return null; // No content for this section\r\n }\r\n\r\n // Sort the content for this section by order, defaulting to 0 if not specified.\r\n contentForSection.sort((a, b) => (a.order ?? 0) - (b.order ?? 0));\r\n\r\n // Return the section with its identity, collapseByDefault flag, and the content components to render.\r\n return {\r\n identity: section.identity,\r\n collapseByDefault: section.collapseByDefault ?? false,\r\n components: contentForSection.map((content) => <content.component key={content.key} context={context} />),\r\n };\r\n })\r\n .filter((section) => section !== null);\r\n }, [mergedSections, mergedSectionContent, context]);\r\n\r\n return (\r\n <div className={classes.rootDiv}>\r\n {visibleSections.length > -1 && (\r\n <CompactModeContextProvider>\r\n <Accordion>\r\n {...visibleSections.map((section) => {\r\n return (\r\n <AccordionSection key={section.identity} title={section.identity} collapseByDefault={section.collapseByDefault}>\r\n {section.components}\r\n </AccordionSection>\r\n );\r\n })}\r\n </Accordion>\r\n </CompactModeContextProvider>\r\n )}\r\n </div>\r\n );\r\n}\r\n","import type { ComponentProps } from \"react\";\r\n\r\nimport { makeStyles, mergeClasses, tokens } from \"@fluentui/react-components\";\r\nimport { forwardRef } from \"react\";\r\n\r\nconst useStyles = makeStyles({\r\n paneRootDiv: {\r\n display: \"flex\",\r\n flex: 1,\r\n flexDirection: \"column\",\r\n padding: `0 ${tokens.spacingHorizontalM}`,\r\n },\r\n});\r\n\r\n/**\r\n * Used to apply common styles to panes.\r\n */\r\nexport const SidePaneContainer = forwardRef<HTMLDivElement, ComponentProps<\"div\">>((props, ref) => {\r\n const { className, ...rest } = props;\r\n const classes = useStyles();\r\n\r\n return (\r\n <div className={mergeClasses(classes.paneRootDiv, className)} ref={ref} {...rest}>\r\n {props.children}\r\n </div>\r\n );\r\n});\r\n","import type { FunctionComponent } from \"react\";\r\nimport type { MakePopoverTeachingMoment } from \"../hooks/teachingMomentHooks\";\r\n\r\nimport { makeStyles, TeachingPopover, TeachingPopoverBody, TeachingPopoverHeader, TeachingPopoverSurface } from \"@fluentui/react-components\";\r\n\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nconst useStyles = makeStyles({\r\n extensionTeachingPopover: {\r\n maxWidth: \"320px\",\r\n },\r\n});\r\n\r\ntype TeachingMomentState = ReturnType<ReturnType<typeof MakePopoverTeachingMoment>>;\r\ntype TeachingMomentProps = Pick<TeachingMomentState, \"shouldDisplay\" | \"positioningRef\" | \"onOpenChange\"> & {\r\n title: string;\r\n description: string;\r\n};\r\n\r\n/**\r\n * A component that displays a teaching moment popover.\r\n * @param props Props for the teaching moment popover.\r\n * @returns The teaching moment popover.\r\n */\r\nexport const TeachingMoment: FunctionComponent<TeachingMomentProps> = ({ shouldDisplay, positioningRef, onOpenChange, title, description }) => {\r\n const classes = useStyles();\r\n\r\n return (\r\n <TeachingPopover appearance=\"brand\" open={shouldDisplay} positioning={{ positioningRef }} onOpenChange={onOpenChange}>\r\n <TeachingPopoverSurface className={classes.extensionTeachingPopover}>\r\n <TeachingPopoverHeader>{title}</TeachingPopoverHeader>\r\n <TeachingPopoverBody>{description}</TeachingPopoverBody>\r\n </TeachingPopoverSurface>\r\n </TeachingPopover>\r\n );\r\n};\r\n","import type { IExtensionFeed, ExtensionMetadata, IExtensionMetadataQuery, ExtensionModule } from \"./extensionFeed\";\r\n\r\nexport type BuiltInExtension = ExtensionMetadata & {\r\n /**\r\n * Gets the extension module, typically dynamically importing the extension.\r\n * @returns The extension module (e.g. a collection of ServiceDefinitions).\r\n */\r\n getExtensionModuleAsync(): Promise<ExtensionModule>;\r\n};\r\n\r\n/**\r\n * A simple extension feed implementation that provides a fixed set of \"built in\" extensions.\r\n * \"Built in\" in this context means extensions that are known at bundling time, and included\r\n * in the bundle. Each extension can be dynamically imported so they are split into separate\r\n * bundle chunks and downloaded only when first installed.\r\n */\r\nexport class BuiltInsExtensionFeed implements IExtensionFeed {\r\n private readonly _extensions: readonly BuiltInExtension[];\r\n\r\n public constructor(\r\n public readonly name: string,\r\n extensions: Iterable<BuiltInExtension>\r\n ) {\r\n this._extensions = Array.from(extensions);\r\n }\r\n\r\n public async queryExtensionsAsync(filter?: string): Promise<IExtensionMetadataQuery> {\r\n const filteredExtensions = filter ? this._extensions.filter((extension) => extension.name.includes(filter)) : this._extensions;\r\n return {\r\n totalCount: filteredExtensions.length,\r\n getExtensionMetadataAsync: async (index: number, count: number) => {\r\n return filteredExtensions.slice(index, index + count);\r\n },\r\n };\r\n }\r\n\r\n public async getExtensionModuleAsync(name: string): Promise<ExtensionModule | undefined> {\r\n const extension = this._extensions.find((ext) => ext.name === name);\r\n return extension ? await extension.getExtensionModuleAsync() : undefined;\r\n }\r\n}\r\n","import type { IReadonlyObservable } from \"core/index\";\r\n\r\nimport { Observable } from \"core/Misc/observable\";\r\nimport { useEffect, useMemo } from \"react\";\r\n\r\n/**\r\n * Creates a polling observable that notifies its observers at a specified interval.\r\n * @param delay The polling interval in milliseconds.\r\n * @returns A readonly observable that can be used to subscribe to polling notifications.\r\n */\r\nexport function usePollingObservable(delay: number): IReadonlyObservable<void> {\r\n const observable = useMemo(() => new Observable<void>(), []);\r\n\r\n useEffect(() => {\r\n const intervalId = setInterval(() => {\r\n observable.notifyObservers();\r\n }, delay);\r\n\r\n return () => {\r\n clearInterval(intervalId);\r\n };\r\n }, [delay, observable]);\r\n\r\n return observable;\r\n}\r\n","import type { IDisposable } from \"core/index\";\r\n\r\nimport { useRef, useEffect, useState } from \"react\";\r\n\r\n/**\r\n * Custom hook to manage a resource with automatic disposal. The resource is created once initially, and recreated\r\n * if the factory function changes. Whenever the resource is recreated, the previous instance is disposed. The final\r\n * instance is disposed when the component using this hook unmounts.\r\n * @param factory A function that creates the resource.\r\n * @returns The created resource.\r\n */\r\nexport function useResource<T extends IDisposable>(factory: () => T): T {\r\n const resourceRef = useRef<T>();\r\n const factoryRef = useRef(factory);\r\n\r\n // Initialize resource synchronously on first call or when factory changes\r\n if (!resourceRef.current || factoryRef.current !== factory) {\r\n // Dispose old resource if it exists\r\n resourceRef.current?.dispose();\r\n\r\n // Create new resource\r\n resourceRef.current = factory();\r\n }\r\n\r\n // Update refs to capture latest values\r\n factoryRef.current = factory;\r\n\r\n // Cleanup effect for component unmount\r\n useEffect(() => {\r\n return () => {\r\n resourceRef.current?.dispose();\r\n resourceRef.current = undefined;\r\n };\r\n }, []);\r\n\r\n return resourceRef.current;\r\n}\r\n\r\n/**\r\n * Custom hook to manage an asynchronous resource with automatic disposal. The resource is created once initially, and recreated\r\n * if the factory function changes. Whenever the resource is recreated, the previous instance is disposed. The final\r\n * instance is disposed when the component using this hook unmounts.\r\n * @param factory A function that creates the resource.\r\n * @returns The created resource.\r\n */\r\nexport function useAsyncResource<T extends IDisposable>(factory: (abortSignal: AbortSignal) => Promise<T>): T | undefined {\r\n const [resource, setResource] = useState<T | undefined>();\r\n const factoryRef = useRef(factory);\r\n\r\n // Update refs to capture latest values\r\n factoryRef.current = factory;\r\n\r\n useEffect(() => {\r\n const abortController = new AbortController();\r\n\r\n // Dispose old resource if it exists\r\n resource?.dispose();\r\n setResource(undefined);\r\n\r\n // Create new resource\r\n void (async () => {\r\n try {\r\n const newVal = await factory(abortController.signal);\r\n if (!abortController.signal.aborted) {\r\n setResource(newVal); // This will trigger a re-render so the new resource is returned to caller\r\n } else {\r\n newVal.dispose();\r\n }\r\n } catch (error) {\r\n if (error instanceof Error && error.name === \"AbortError\") {\r\n return;\r\n }\r\n }\r\n })();\r\n\r\n return () => {\r\n abortController.abort();\r\n resource?.dispose();\r\n setResource(undefined);\r\n };\r\n }, [factory]);\r\n\r\n return resource;\r\n}\r\n","import type { Nullable } from \"core/index\";\r\n\r\nimport type { OnOpenChangeData, PositioningImperativeRef } from \"@fluentui/react-components\";\r\n\r\nimport { useCallback, useEffect, useRef, useState } from \"react\";\r\nimport { useLocalStorage } from \"usehooks-ts\";\r\n\r\nimport { AsyncLock } from \"core/Misc/asyncLock\";\r\nimport { Deferred } from \"core/Misc/deferred\";\r\n\r\nconst SequencerLock = new AsyncLock();\r\n\r\n/**\r\n * Creates a hook for managing teaching moment state.\r\n * @param name The unique name of the teaching moment.\r\n * @returns A hook that returns the teaching moment state.\r\n */\r\nexport function MakeTeachingMoment(name: string) {\r\n return (suppress?: boolean) => {\r\n const [hasDisplayed, setHasDisplayed, resetDisplayed] = useLocalStorage(`Babylon/TeachingMoments/${name}`, false);\r\n const [shouldDisplay, setShouldDisplay] = useState(false);\r\n\r\n const deferredRef = useRef<Deferred<void>>();\r\n\r\n useEffect(() => {\r\n if (!hasDisplayed && !suppress && !deferredRef.current) {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n SequencerLock.lockAsync(async () => {\r\n deferredRef.current = new Deferred<void>();\r\n setShouldDisplay(true);\r\n // Just hold the lock until the hook cleanup, which is effectively component unmount (e.g. the teaching moment is dismissed).\r\n await deferredRef.current.promise;\r\n });\r\n }\r\n\r\n return () => {\r\n deferredRef.current?.resolve();\r\n };\r\n }, [hasDisplayed, suppress]);\r\n\r\n const onDismissed = useCallback(() => {\r\n setHasDisplayed(true);\r\n deferredRef.current?.resolve();\r\n deferredRef.current = undefined;\r\n setShouldDisplay(false);\r\n }, []);\r\n\r\n return {\r\n shouldDisplay,\r\n onDismissed,\r\n reset: resetDisplayed,\r\n } as const;\r\n };\r\n}\r\n\r\n/**\r\n * Creates a hook for managing teaching moment state for a dialog.\r\n * @param name The unique name of the teaching moment.\r\n * @returns A hook that returns the teaching moment state for a dialog.\r\n */\r\nexport function MakeDialogTeachingMoment(name: string) {\r\n const useTeachingMoment = MakeTeachingMoment(name);\r\n\r\n return (suppress?: boolean) => {\r\n const { shouldDisplay, onDismissed, reset } = useTeachingMoment(suppress);\r\n\r\n const onOpenChange = useCallback((e: unknown, data: OnOpenChangeData) => {\r\n if (!data.open) {\r\n onDismissed();\r\n }\r\n }, []);\r\n\r\n return {\r\n shouldDisplay,\r\n onOpenChange,\r\n reset,\r\n } as const;\r\n };\r\n}\r\n\r\n/**\r\n * Creates a hook for managing teaching moment state for a popover.\r\n * @param name The unique name of the teaching moment.\r\n * @returns A hook that returns the teaching moment state for a popover.\r\n */\r\nexport function MakePopoverTeachingMoment(name: string) {\r\n const useDialogTeachingMoment = MakeDialogTeachingMoment(name);\r\n\r\n return (suppress?: boolean) => {\r\n const [target, setTarget] = useState<Nullable<HTMLElement>>(null);\r\n const [positioningRef, setPositioningRef] = useState<Nullable<PositioningImperativeRef>>(null);\r\n\r\n const { shouldDisplay, onOpenChange, reset } = useDialogTeachingMoment(suppress || !target || !positioningRef);\r\n\r\n useEffect(() => {\r\n if (target && positioningRef) {\r\n positioningRef.setTarget(target);\r\n }\r\n }, [target, positioningRef]);\r\n\r\n return {\r\n shouldDisplay,\r\n positioningRef: setPositioningRef,\r\n targetRef: setTarget,\r\n onOpenChange,\r\n reset,\r\n } as const;\r\n };\r\n}\r\n","import type { IDisposable, IReadonlyObservable } from \"core/index\";\r\n\r\nimport { Observable } from \"core/Misc/observable\";\r\n\r\n/**\r\n * A collection of items that can be observed for changes.\r\n */\r\nexport class ObservableCollection<T> {\r\n private readonly _items: T[] = [];\r\n private readonly _keys: symbol[] = [];\r\n private readonly _observable = new Observable<void>();\r\n\r\n /**\r\n * An observable that notifies observers when the collection changes.\r\n */\r\n public get observable(): IReadonlyObservable<void> {\r\n return this._observable;\r\n }\r\n\r\n /**\r\n * The items in the collection.\r\n */\r\n public get items(): readonly T[] {\r\n return this._items;\r\n }\r\n\r\n /**\r\n * Adds an item to the collection.\r\n * @param item The item to add.\r\n * @returns A disposable that removes the item from the collection when disposed.\r\n */\r\n public add(item: T): IDisposable {\r\n const key = Symbol();\r\n this._items.push(item);\r\n this._keys.push(key);\r\n this._observable.notifyObservers();\r\n\r\n return {\r\n dispose: () => {\r\n const index = this._keys.indexOf(key);\r\n this._items.splice(index, 1);\r\n this._keys.splice(index, 1);\r\n this._observable.notifyObservers();\r\n },\r\n };\r\n }\r\n}\r\n","import type { IDisposable } from \"core/index\";\r\n\r\n/**\r\n * A helper to create a service factory function from a class constructor.\r\n * @param constructor The class to create a factory function for.\r\n * @returns A factory function that creates an instance of the class.\r\n */\r\nexport function ConstructorFactory<Class extends new (...args: any) => any>(constructor: Class): (...args: ConstructorParameters<Class>) => InstanceType<Class> {\r\n return (...args: ConstructorParameters<Class>) => new constructor(...args);\r\n}\r\n\r\n// This allows us to map from a service contract back to a contract identity.\r\nconst Contract = Symbol();\r\n/**\r\n * This interface must be implemented by all service contracts.\r\n */\r\nexport interface IService<ContractIdentity extends symbol> {\r\n /**\r\n * @internal\r\n */\r\n readonly [Contract]?: ContractIdentity;\r\n}\r\n\r\n// This utility type extracts the service identity (unique symbol type) from a service contract. That is, it extracts T from IService<T>.\r\ntype ExtractContractIdentity<ServiceContract extends IService<symbol>> = ServiceContract extends IService<infer ContractIdentity> ? ContractIdentity : never;\r\n\r\n// This utility type extracts the contract identities from an array of service contracts. That is, it extracts [T1, T2, ...] from [IService<T1>, IService<T2>, ...].\r\ntype ExtractContractIdentities<ServiceContracts extends IService<symbol>[]> = {\r\n [Index in keyof ServiceContracts]: ExtractContractIdentity<ServiceContracts[Index]>;\r\n};\r\n\r\n// This utility type converts a union of types into an intersection of types. That is, it converts T1 | T2 | ... into T1 & T2 & ...\r\n// This is specifically used to determine the type that a service factory function returns when it produces multiple services.\r\ntype UnionToIntersection<Union> = (Union extends any ? (k: Union) => void : never) extends (k: infer Intersection) => void ? Intersection : never;\r\n\r\ntype MaybePromise<T> = T | Promise<T>;\r\n\r\n/**\r\n * A factory function responsible for creating a service instance.\r\n * Consumed services are passed as arguments to the factory function.\r\n * The returned value must implement all produced services, and may IDisposable.\r\n * If not services are produced, the returned value may implement IDisposable, otherwise it may return void.\r\n */\r\nexport type ServiceFactory<Produces extends IService<symbol>[], Consumes extends IService<symbol>[]> = (\r\n ...dependencies: [...Consumes, abortSignal?: AbortSignal]\r\n) => MaybePromise<Produces extends [] ? Partial<IDisposable> | void : Partial<IDisposable> & UnionToIntersection<Produces[number]>>;\r\n\r\n/**\r\n * Defines a service, which is a logical unit that consumes other services (dependencies), and optionally produces services that can be consumed by other services (dependents).\r\n */\r\nexport type ServiceDefinition<Produces extends IService<symbol>[] = [], Consumes extends IService<symbol>[] = []> = {\r\n /**\r\n * A human readable name for the service to help with debugging.\r\n */\r\n friendlyName: string;\r\n\r\n /**\r\n * A function that instantiates the service.\r\n */\r\n factory: ServiceFactory<Produces, Consumes>;\r\n} & (Produces extends []\r\n ? {\r\n /**\r\n * An empty list or undefined, since the type specification has indicated no contracts are produced.\r\n */\r\n produces?: [];\r\n }\r\n : {\r\n /**\r\n * The list of contract identities that this service produces for consumption by other services.\r\n */\r\n produces: ExtractContractIdentities<Produces>;\r\n }) &\r\n (Consumes extends []\r\n ? {\r\n /**\r\n * An empty list or undefined, since the type specification has indicated that no other services are consumed.\r\n */\r\n consumes?: [];\r\n }\r\n : {\r\n /**\r\n * The list of contract identities of other services that this service consumes.\r\n */\r\n consumes: ExtractContractIdentities<Consumes>;\r\n });\r\n","import { Body1Strong, makeStyles, tokens } from \"@fluentui/react-components\";\r\n\r\nimport { ExtensibleAccordion } from \"../extensibleAccordion\";\r\n\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nconst useStyles = makeStyles({\r\n placeholderDiv: {\r\n padding: `${tokens.spacingVerticalM} ${tokens.spacingHorizontalM}`,\r\n },\r\n});\r\n\r\nexport const PropertiesPane: typeof ExtensibleAccordion<unknown> = (props) => {\r\n const classes = useStyles();\r\n\r\n const entity = props.context;\r\n\r\n return entity != null ? (\r\n <ExtensibleAccordion {...props} />\r\n ) : (\r\n <div className={classes.placeholderDiv}>\r\n <Body1Strong italic>No entity selected.</Body1Strong>\r\n </div>\r\n );\r\n};\r\n","import type { IReadonlyObservable } from \"core/Misc/observable\";\r\nimport type { IService } from \"../modularity/serviceDefinition\";\r\n\r\nexport const SettingsContextIdentity = Symbol(\"SettingsContext\");\r\n\r\n/**\r\n * SettingsContext provides a set of settings used across the inspector.\r\n */\r\nexport interface ISettingsContext extends IService<typeof SettingsContextIdentity> {\r\n /**\r\n * Use degrees instead of radians for angles.\r\n */\r\n useDegrees: boolean;\r\n\r\n /**\r\n * Ignore backfaces when picking.\r\n */\r\n ignoreBackfacesForPicking: boolean;\r\n\r\n /**\r\n * Shows the Properties pane when an entity is selected.\r\n */\r\n showPropertiesOnEntitySelection: boolean;\r\n\r\n /**\r\n * Observable that fires whenever a setting changes.\r\n */\r\n readonly settingsChangedObservable: IReadonlyObservable<ISettingsContext>;\r\n}\r\n","import type { TernaryDarkMode } from \"usehooks-ts\";\r\n\r\nimport { useTernaryDarkMode } from \"usehooks-ts\";\r\n\r\nconst ThemeModeStorageKey = `Babylon/Settings/ThemeMode`;\r\n\r\n/**\r\n * Custom hook to manage the theme mode (system/dark/light).\r\n * @returns An object containing the theme mode state and helper functions.\r\n */\r\nexport function useThemeMode() {\r\n const { isDarkMode, ternaryDarkMode, setTernaryDarkMode } = useTernaryDarkMode({\r\n localStorageKey: ThemeModeStorageKey,\r\n });\r\n // Make sure there is a stored value initially, even before changing the theme.\r\n // This way, other usages of this hook will get the correct initial value.\r\n if (!localStorage.getItem(ThemeModeStorageKey)) {\r\n SetThemeMode(ternaryDarkMode);\r\n }\r\n return { isDarkMode, themeMode: ternaryDarkMode, setThemeMode: setTernaryDarkMode };\r\n}\r\n\r\n/**\r\n * Sets the theme mode.\r\n * @param mode The desired theme mode (system/dark/light).\r\n */\r\nexport function SetThemeMode(mode: TernaryDarkMode) {\r\n localStorage.setItem(ThemeModeStorageKey, JSON.stringify(mode));\r\n}\r\n","/* eslint-disable @typescript-eslint/naming-convention */\r\n\r\nimport type { BrandVariants, Theme } from \"@fluentui/react-components\";\r\n\r\nimport { createDarkTheme, createLightTheme } from \"@fluentui/react-components\";\r\n\r\n// Generated from https://react.fluentui.dev/?path=/docs/theme-theme-designer--docs\r\n// Key color: #3A94FC\r\nconst babylonRamp: BrandVariants = {\r\n 10: \"#020305\",\r\n 20: \"#121721\",\r\n 30: \"#1A263A\",\r\n 40: \"#1F314F\",\r\n 50: \"#243E64\",\r\n 60: \"#294B7B\",\r\n 70: \"#2D5892\",\r\n 80: \"#3166AA\",\r\n 90: \"#3473C3\",\r\n 100: \"#3782DC\",\r\n 110: \"#3990F6\",\r\n 120: \"#5A9EFD\",\r\n 130: \"#7BACFE\",\r\n 140: \"#96BAFF\",\r\n 150: \"#AFC9FF\",\r\n 160: \"#C6D8FF\",\r\n};\r\n\r\nexport const LightTheme: Theme = {\r\n ...createLightTheme(babylonRamp),\r\n};\r\n\r\nexport const DarkTheme: Theme = {\r\n ...createDarkTheme(babylonRamp),\r\n};\r\n","import type { FluentProviderProps } from \"@fluentui/react-components\";\r\nimport type { FunctionComponent } from \"react\";\r\n\r\nimport { FluentProvider } from \"@fluentui/react-components\";\r\nimport { useThemeMode } from \"../hooks/themeHooks\";\r\nimport { DarkTheme, LightTheme } from \"../themes/babylonTheme\";\r\n\r\nexport const Theme: FunctionComponent<FluentProviderProps & { invert?: boolean }> = (props) => {\r\n const { invert = false, ...rest } = props;\r\n const { isDarkMode } = useThemeMode();\r\n\r\n return (\r\n <FluentProvider theme={isDarkMode !== invert ? DarkTheme : LightTheme} {...rest}>\r\n {props.children}\r\n </FluentProvider>\r\n );\r\n};\r\n","// NOTE: This is basically a super simplified version of https://github.com/microsoft/fluentui-contrib/blob/main/packages/react-resize-handle/src/hooks\r\n// This version does not support keyboard interactions, absolute values, automatically clamping to the actual adjusted size, accessibility, and various other features.\r\n// We can switch back to Fluent's implementation once some known bugs are fixed:\r\n// 1. https://github.com/microsoft/fluentui-contrib/issues/523\r\n// 2. React 19 compatibility\r\n\r\nimport { useCallback, useEffect, useRef, useState } from \"react\";\r\n\r\nimport { Clamp } from \"core/Maths/math.scalar.functions\";\r\n\r\nexport type GrowDirection = \"end\" | \"start\" | \"up\" | \"down\";\r\n\r\nexport type UseResizeHandleParams = {\r\n /**\r\n * The direction in which the element is considered growing in size ('end', 'start', 'up', or 'down').\r\n */\r\n growDirection: GrowDirection;\r\n /**\r\n * The name of the CSS variable that will be set on the wrapper element to reflect the current size of the element.\r\n */\r\n variableName: string;\r\n /**\r\n * A callback that will be called when the element is resized.\r\n *\r\n * @remarks The passed function should be memoized for better performance.\r\n */\r\n onChange?: (value: number) => void;\r\n /**\r\n * The minimum change allowed (e.g. the smallest negative number allowed).\r\n */\r\n minValue?: number;\r\n /**\r\n * The maximum change allowed (e.g. the largest positive number allowed).\r\n */\r\n maxValue?: number;\r\n};\r\n\r\n/**\r\n * A custom hook that helps with element resizing.\r\n * @param params The parameters for the resize handle.\r\n * @returns An object containing refs and a function to set the value.\r\n */\r\nexport function useResizeHandle(params: UseResizeHandleParams) {\r\n const { growDirection, variableName, onChange } = params;\r\n\r\n const valueRef = useRef(0);\r\n const [elementRef, setElementRef] = useState<HTMLElement | null>(null);\r\n const [handleRef, setHandleRef] = useState<HTMLElement | null>(null);\r\n\r\n const updateElementStyle = useCallback(\r\n (value: number) => {\r\n if (elementRef) {\r\n elementRef.style.setProperty(variableName, `${value}px`);\r\n }\r\n },\r\n [elementRef, variableName]\r\n );\r\n\r\n const setValue = useCallback(\r\n (value: number) => {\r\n valueRef.current = value;\r\n updateElementStyle(value);\r\n onChange?.(value);\r\n },\r\n [updateElementStyle, onChange]\r\n );\r\n\r\n useEffect(() => {\r\n updateElementStyle(valueRef.current);\r\n }, [updateElementStyle]);\r\n\r\n useEffect(() => {\r\n if (handleRef) {\r\n let delta = 0;\r\n\r\n const coerceDelta = (delta: number) => Clamp(delta, params.minValue ?? -Infinity, params.maxValue ?? Infinity);\r\n\r\n const onPointerMove = (event: PointerEvent) => {\r\n event.preventDefault();\r\n switch (growDirection) {\r\n case \"up\":\r\n delta -= event.movementY;\r\n break;\r\n case \"down\":\r\n delta += event.movementY;\r\n break;\r\n case \"start\":\r\n delta -= event.movementX;\r\n break;\r\n case \"end\":\r\n delta += event.movementX;\r\n break;\r\n }\r\n setValue(coerceDelta(delta));\r\n };\r\n\r\n const onPointerDown = (event: PointerEvent) => {\r\n event.preventDefault();\r\n delta = valueRef.current;\r\n handleRef.setPointerCapture(event.pointerId);\r\n handleRef.addEventListener(\"pointermove\", onPointerMove);\r\n };\r\n\r\n const onPointerUp = (event: PointerEvent) => {\r\n event.preventDefault();\r\n handleRef.releasePointerCapture(event.pointerId);\r\n handleRef.removeEventListener(\"pointermove\", onPointerMove);\r\n valueRef.current = coerceDelta(valueRef.current);\r\n };\r\n\r\n handleRef.addEventListener(\"pointerdown\", onPointerDown);\r\n handleRef.addEventListener(\"pointerup\", onPointerUp);\r\n }\r\n }, [handleRef, setValue]);\r\n\r\n return {\r\n elementRef: setElementRef,\r\n handleRef: setHandleRef,\r\n setValue,\r\n };\r\n}\r\n","import type { MenuTriggerProps } from \"@fluentui/react-components\";\r\nimport type { ComponentType, FunctionComponent } from \"react\";\r\n\r\nimport type { IDisposable } from \"core/index\";\r\nimport type { IService, ServiceDefinition } from \"../modularity/serviceDefinition\";\r\n\r\nimport {\r\n Button,\r\n Divider,\r\n Toolbar as FluentToolbar,\r\n makeStyles,\r\n Menu,\r\n MenuGroup,\r\n MenuGroupHeader,\r\n MenuItem,\r\n MenuList,\r\n MenuPopover,\r\n MenuTrigger,\r\n mergeClasses,\r\n Portal,\r\n Subtitle2Stronger,\r\n tokens,\r\n ToolbarRadioButton,\r\n Tooltip,\r\n} from \"@fluentui/react-components\";\r\nimport {\r\n LayoutColumnTwoFocusLeftFilled,\r\n LayoutColumnTwoFocusRightFilled,\r\n LayoutColumnTwoSplitLeftFocusBottomLeftFilled,\r\n LayoutColumnTwoSplitLeftFocusTopLeftFilled,\r\n LayoutColumnTwoSplitRightFocusBottomRightFilled,\r\n LayoutColumnTwoSplitRightFocusTopRightFilled,\r\n MoreHorizontalRegular,\r\n PanelLeftContractRegular,\r\n PanelLeftExpandRegular,\r\n PanelRightContractRegular,\r\n PanelRightExpandRegular,\r\n} from \"@fluentui/react-icons\";\r\nimport { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from \"react\";\r\n\r\nimport { Observable } from \"core/Misc/observable\";\r\nimport { Collapse } from \"shared-ui-components/fluent/primitives/collapse\";\r\nimport { TeachingMoment } from \"../components/teachingMoment\";\r\nimport { Theme } from \"../components/theme\";\r\nimport { useOrderedObservableCollection } from \"../hooks/observableHooks\";\r\nimport { useSidePaneDockOverrides } from \"../hooks/settingsHooks\";\r\nimport { MakePopoverTeachingMoment } from \"../hooks/teachingMomentHooks\";\r\nimport { useResizeHandle } from \"../hooks/useResizeHandle\";\r\nimport { ObservableCollection } from \"../misc/observableCollection\";\r\n\r\nexport type HorizontalLocation = \"left\" | \"right\";\r\nexport type VerticalLocation = \"top\" | \"bottom\";\r\n\r\ntype DockLocation = `${VerticalLocation}-${HorizontalLocation}` | `full-${HorizontalLocation}`;\r\n\r\n/**\r\n * Describes an item that can be added to one of the shell's toolbars.\r\n */\r\nexport type ToolbarItemDefinition = {\r\n /**\r\n * A unique key for the toolbar item.\r\n */\r\n key: string;\r\n\r\n /**\r\n * The component to render for the toolbar item.\r\n */\r\n component: ComponentType;\r\n\r\n /**\r\n * An optional order for the toolbar item, relative to other items.\r\n * Defaults to 0.\r\n */\r\n order?: number;\r\n\r\n /**\r\n * The horizontal location of the toolbar item.\r\n * Can be either \"left\" or \"right\".\r\n * In \"compact\" toolbar mode, \"left\" and \"right\" mean the \"compact\" toolbars at the top/bottom of the left/right side panes.\r\n * In \"full\" toolbar mode, \"left\" and \"right\" mean the left side and right side of the full width toolbars above/below the side panes.\r\n */\r\n horizontalLocation: HorizontalLocation;\r\n\r\n /**\r\n * The vertical location of the toolbar item.\r\n * Can be either \"top\" or \"bottom\".\r\n */\r\n verticalLocation: VerticalLocation;\r\n\r\n /**\r\n * An optional display name for the toolbar item, used for teaching moments, tooltips, etc.\r\n */\r\n displayName?: string;\r\n\r\n /**\r\n * An optional flag to suppress the teaching moment for this toolbar item.\r\n * Defaults to false.\r\n * Teaching moments are more helpful for dynamically added items, possibly from extensions.\r\n */\r\n suppressTeachingMoment?: boolean;\r\n};\r\n\r\n/**\r\n * Describes a side pane that can be added to the shell's left or right side.\r\n */\r\nexport type SidePaneDefinition = {\r\n /**\r\n * A unique key for the side pane.\r\n */\r\n key: string;\r\n\r\n /**\r\n * An icon component to render for the pane tab.\r\n */\r\n icon: ComponentType;\r\n\r\n /**\r\n * The component to render for the side pane's content.\r\n */\r\n content: ComponentType;\r\n\r\n /**\r\n * An optional order for the side pane, relative to other panes.\r\n * Defaults to 0.\r\n */\r\n order?: number;\r\n\r\n /**\r\n * The horizontal location of the side pane.\r\n * Can be either \"left\" or \"right\".\r\n */\r\n horizontalLocation: HorizontalLocation;\r\n\r\n /**\r\n * The vertical location of the side pane.\r\n * Can be either \"top\" or \"bottom\".\r\n */\r\n verticalLocation: VerticalLocation;\r\n\r\n /**\r\n * The title of the side pane, displayed as a standardized header at the top of the pane.\r\n */\r\n title: string;\r\n\r\n /**\r\n * An optional flag to suppress the teaching moment for this side pane.\r\n * Defaults to false.\r\n * Teaching moments are more helpful for dynamically added panes, possibly from extensions.\r\n */\r\n suppressTeachingMoment?: boolean;\r\n};\r\n\r\ntype SidePaneEntry = SidePaneDefinition & {\r\n container: HTMLElement;\r\n};\r\n\r\ntype RegisteredSidePane = {\r\n key: string;\r\n select(): void;\r\n};\r\n\r\n/**\r\n * Describes content that can be added to the shell's central area (between the side panes and toolbars - e.g. the main content).\r\n */\r\nexport type CentralContentDefinition = {\r\n /**\r\n * A unique key for the central content.\r\n */\r\n key: string;\r\n\r\n /**\r\n * The component to render for the central content.\r\n */\r\n component: ComponentType;\r\n\r\n /**\r\n * An optional order for content, relative to other central content.\r\n * Defaults to 0.\r\n */\r\n order?: number;\r\n};\r\n\r\nexport const RootComponentServiceIdentity = Symbol(\"RootComponent\");\r\n\r\n/**\r\n * Exposes a top level component that should be rendered as the React root.\r\n */\r\nexport interface IRootComponentService extends IService<typeof RootComponentServiceIdentity> {\r\n /**\r\n * The root component that should be rendered as the React root.\r\n */\r\n readonly rootComponent: ComponentType;\r\n}\r\n\r\nexport const ShellServiceIdentity = Symbol(\"ShellService\");\r\n\r\n/**\r\n * Provides a shell for the application, including toolbars, side panes, and central content.\r\n * This service allows adding toolbar items, side panes, and central content dynamically.\r\n */\r\nexport interface IShellService extends IService<typeof ShellServiceIdentity> {\r\n /**\r\n * Adds a new item to one of the shell's toolbars.\r\n * @param item Defines the item to add.\r\n */\r\n addToolbarItem(item: Readonly<ToolbarItemDefinition>): IDisposable;\r\n\r\n /**\r\n * Adds a new side pane to the shell.\r\n * @param pane Defines the side pane to add.\r\n */\r\n addSidePane(pane: Readonly<SidePaneDefinition>): IDisposable;\r\n\r\n /**\r\n * Adds new central content to the shell.\r\n * @param content Defines the content area to add.\r\n */\r\n addCentralContent(content: Readonly<CentralContentDefinition>): IDisposable;\r\n\r\n /**\r\n * Resets the side pane layout to the default configuration.\r\n */\r\n resetSidePaneLayout(): void;\r\n\r\n /**\r\n * The side panes currently present in the shell.\r\n */\r\n readonly sidePanes: readonly RegisteredSidePane[];\r\n}\r\n\r\ntype ToolbarMode = \"full\" | \"compact\";\r\n\r\n/**\r\n * Options for configuring the shell service.\r\n */\r\nexport type ShellServiceOptions = {\r\n /**\r\n * The default width of the left side pane.\r\n */\r\n leftPaneDefaultWidth?: number;\r\n\r\n /**\r\n * The minimum width of the left side pane.\r\n */\r\n leftPaneMinWidth?: number;\r\n\r\n /**\r\n * The default width of the right side pane.\r\n */\r\n rightPaneDefaultWidth?: number;\r\n\r\n /**\r\n * The minimum width of the right side pane.\r\n */\r\n rightPaneMinWidth?: number;\r\n\r\n /**\r\n * The mode of the toolbars.\r\n * Can be either \"full\" (default) or \"compact\".\r\n * In \"full\" mode, toolbars are displayed above and below the side panes.\r\n * In \"compact\" mode, toolbars are displayed at the top and bottom of the left and right side panes.\r\n */\r\n toolbarMode?: ToolbarMode;\r\n\r\n /**\r\n * A function that can remap the default location of side panes.\r\n * @param sidePane The side pane to remap.\r\n * @returns The new location for the side pane.\r\n */\r\n sidePaneRemapper?: (sidePane: Readonly<SidePaneDefinition>) => { horizontalLocation: HorizontalLocation; verticalLocation: VerticalLocation };\r\n};\r\n\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nconst useStyles = makeStyles({\r\n mainView: {\r\n flex: 1,\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n overflow: \"hidden\",\r\n },\r\n verticallyCentralContent: {\r\n flexGrow: 1,\r\n display: \"flex\",\r\n overflow: \"hidden\",\r\n },\r\n barDiv: {\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n flex: \"0 0 auto\",\r\n height: \"36px\",\r\n backgroundColor: tokens.colorNeutralBackground2,\r\n },\r\n bar: {\r\n display: \"flex\",\r\n flex: \"1\",\r\n height: \"32px\",\r\n overflow: \"hidden\",\r\n padding: `${tokens.spacingVerticalXXS} ${tokens.spacingHorizontalXXS}`,\r\n border: `1px solid ${tokens.colorNeutralStroke2}`,\r\n borderBottomWidth: 0,\r\n backgroundColor: tokens.colorNeutralBackground1,\r\n },\r\n barTop: {\r\n borderTopWidth: 0,\r\n },\r\n barLeft: {\r\n marginRight: \"auto\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n flexDirection: \"row\",\r\n columnGap: tokens.spacingHorizontalSNudge,\r\n },\r\n barRight: {\r\n marginLeft: \"auto\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n flexDirection: \"row-reverse\",\r\n columnGap: tokens.spacingHorizontalSNudge,\r\n },\r\n barItem: {\r\n display: \"flex\",\r\n },\r\n paneTabListDiv: {\r\n backgroundColor: tokens.colorNeutralBackground2,\r\n flex: \"0 0 auto\",\r\n display: \"flex\",\r\n },\r\n paneTabListDivLeft: {\r\n flexDirection: \"row-reverse\",\r\n },\r\n paneTabListDivRight: {\r\n flexDirection: \"row\",\r\n },\r\n paneCollapseButton: {\r\n margin: `0 ${tokens.spacingHorizontalSNudge}`,\r\n },\r\n pane: {\r\n backgroundColor: tokens.colorNeutralBackground2,\r\n display: \"flex\",\r\n alignItems: \"stretch\",\r\n overflow: \"hidden\",\r\n },\r\n paneLeft: {\r\n flexDirection: \"row\",\r\n },\r\n paneRight: {\r\n flexDirection: \"row-reverse\",\r\n },\r\n paneContainer: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n overflowX: \"hidden\",\r\n overflowY: \"hidden\",\r\n },\r\n paneContent: {\r\n display: \"flex\",\r\n flexGrow: 1,\r\n flexDirection: \"column\",\r\n overflow: \"hidden\",\r\n },\r\n paneHeaderDiv: {\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n alignItems: \"center\",\r\n height: \"36px\",\r\n },\r\n paneHeaderText: {\r\n flex: 1,\r\n marginLeft: tokens.spacingHorizontalM,\r\n },\r\n paneHeaderButton: {\r\n color: \"inherit\",\r\n },\r\n paneDivider: {\r\n flex: \"0 0 auto\",\r\n marginTop: tokens.spacingVerticalM,\r\n margin: \"0\",\r\n minHeight: tokens.spacingVerticalM,\r\n cursor: \"ns-resize\",\r\n alignItems: \"end\",\r\n },\r\n tabToolbar: {\r\n padding: 0,\r\n },\r\n tab: {\r\n display: \"flex\",\r\n height: \"100%\",\r\n width: \"36px\",\r\n justifyContent: \"center\",\r\n borderTopLeftRadius: tokens.borderRadiusMedium,\r\n borderTopRightRadius: tokens.borderRadiusMedium,\r\n },\r\n unselectedTab: {\r\n backgroundColor: \"transparent\",\r\n },\r\n tabRadioButton: {\r\n backgroundColor: \"transparent\",\r\n },\r\n selectedTabIcon: {\r\n color: tokens.colorNeutralForeground1,\r\n },\r\n resizer: {\r\n width: \"8px\",\r\n cursor: \"ew-resize\",\r\n zIndex: 1000,\r\n },\r\n resizerLeft: {\r\n marginRight: \"-8px\",\r\n transform: \"translateX(-8px)\",\r\n },\r\n resizerRight: {\r\n marginLeft: \"-8px\",\r\n transform: \"translateX(8px)\",\r\n },\r\n centralContent: {\r\n position: \"relative\",\r\n flexGrow: 1,\r\n display: \"flex\",\r\n overflow: \"hidden\",\r\n },\r\n});\r\n\r\nconst DockMenu: FunctionComponent<\r\n Pick<MenuTriggerProps, \"children\"> & { openOnContext?: boolean; sidePaneId: string; dockOptions: Map<DockLocation, (sidePaneKey: string) => void> }\r\n> = (props) => {\r\n const { openOnContext, sidePaneId, dockOptions, children } = props;\r\n\r\n const dockLeft = dockOptions.get(\"full-left\");\r\n const dockTopLeft = dockOptions.get(\"top-left\");\r\n const dockBottomLeft = dockOptions.get(\"bottom-left\");\r\n const dockRight = dockOptions.get(\"full-right\");\r\n const dockTopRight = dockOptions.get(\"top-right\");\r\n const dockBottomRight = dockOptions.get(\"bottom-right\");\r\n\r\n return (\r\n <Menu openOnContext={openOnContext}>\r\n <MenuTrigger disableButtonEnhancement>{children}</MenuTrigger>\r\n <Theme>\r\n <MenuPopover>\r\n <MenuList>\r\n <MenuGroup>\r\n <MenuGroupHeader>Dock</MenuGroupHeader>\r\n {dockLeft && (\r\n <MenuItem icon={<LayoutColumnTwoFocusLeftFilled />} onClick={() => dockLeft(sidePaneId)}>\r\n Left\r\n </MenuItem>\r\n )}\r\n {dockTopLeft && (\r\n <MenuItem icon={<LayoutColumnTwoSplitLeftFocusTopLeftFilled />} onClick={() => dockTopLeft(sidePaneId)}>\r\n Top Left\r\n </MenuItem>\r\n )}\r\n {dockBottomLeft && (\r\n <MenuItem icon={<LayoutColumnTwoSplitLeftFocusBottomLeftFilled />} onClick={() => dockBottomLeft(sidePaneId)}>\r\n Bottom Left\r\n </MenuItem>\r\n )}\r\n {dockRight && (\r\n <MenuItem icon={<LayoutColumnTwoFocusRightFilled />} onClick={() => dockRight(sidePaneId)}>\r\n Right\r\n </MenuItem>\r\n )}\r\n {dockTopRight && (\r\n <MenuItem icon={<LayoutColumnTwoSplitRightFocusTopRightFilled />} onClick={() => dockTopRight(sidePaneId)}>\r\n Top Right\r\n </MenuItem>\r\n )}\r\n {dockBottomRight && (\r\n <MenuItem icon={<LayoutColumnTwoSplitRightFocusBottomRightFilled />} onClick={() => dockBottomRight(sidePaneId)}>\r\n Bottom Right\r\n </MenuItem>\r\n )}\r\n </MenuGroup>\r\n </MenuList>\r\n </MenuPopover>\r\n </Theme>\r\n </Menu>\r\n );\r\n};\r\n\r\nconst PaneHeader: FunctionComponent<{ id: string; title: string; dockOptions: Map<DockLocation, (sidePaneKey: string) => void> }> = (props) => {\r\n const { id, title, dockOptions } = props;\r\n\r\n const classes = useStyles();\r\n\r\n return (\r\n <Theme invert>\r\n <div className={classes.paneHeaderDiv}>\r\n <Subtitle2Stronger className={classes.paneHeaderText}>{title}</Subtitle2Stronger>\r\n <DockMenu sidePaneId={id} dockOptions={dockOptions}>\r\n <Button className={classes.paneHeaderButton} appearance=\"transparent\" icon={<MoreHorizontalRegular />} />\r\n </DockMenu>\r\n </div>\r\n </Theme>\r\n );\r\n};\r\n\r\n// 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.\r\nconst ToolbarItem: FunctionComponent<{\r\n verticalLocation: VerticalLocation;\r\n horizontalLocation: HorizontalLocation;\r\n id: string;\r\n component: ComponentType;\r\n displayName?: string;\r\n suppressTeachingMoment?: boolean;\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n}> = ({ verticalLocation, horizontalLocation, id, component: Component, displayName: displayName, suppressTeachingMoment }) => {\r\n const classes = useStyles();\r\n\r\n const useTeachingMoment = useMemo(() => MakePopoverTeachingMoment(`Bar/${verticalLocation}/${horizontalLocation}/${displayName ?? id}`), [displayName, id]);\r\n const teachingMoment = useTeachingMoment(suppressTeachingMoment);\r\n\r\n return (\r\n <>\r\n <TeachingMoment\r\n {...teachingMoment}\r\n shouldDisplay={teachingMoment.shouldDisplay && !suppressTeachingMoment}\r\n title={displayName ?? \"Extension\"}\r\n description={`The \"${displayName ?? id}\" extension can be accessed here.`}\r\n />\r\n <div className={classes.barItem} ref={teachingMoment.targetRef}>\r\n <Component />\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\n// TODO: Handle overflow, possibly via https://react.fluentui.dev/?path=/docs/components-overflow--docs with priority.\r\n// This component just renders a toolbar with left aligned toolbar items on the left and right aligned toolbar items on the right.\r\nconst Toolbar: FunctionComponent<{ location: VerticalLocation; components: Readonly<ToolbarItemDefinition[]> }> = ({ location, components }) => {\r\n const classes = useStyles();\r\n\r\n const leftComponents = useMemo(() => components.filter((entry) => entry.horizontalLocation === \"left\"), [components]);\r\n const rightComponents = useMemo(() => components.filter((entry) => entry.horizontalLocation === \"right\"), [components]);\r\n\r\n return (\r\n <>\r\n {components.length > 0 && (\r\n <div className={`${classes.bar} ${location === \"top\" ? classes.barTop : null}`}>\r\n <div className={classes.barLeft}>\r\n {leftComponents.map((entry) => (\r\n <ToolbarItem\r\n key={entry.key}\r\n verticalLocation={location}\r\n horizontalLocation={entry.horizontalLocation}\r\n id={entry.key}\r\n component={entry.component}\r\n displayName={entry.displayName}\r\n suppressTeachingMoment={entry.suppressTeachingMoment}\r\n />\r\n ))}\r\n </div>\r\n <div className={classes.barRight}>\r\n {rightComponents.map((entry) => (\r\n <ToolbarItem\r\n key={entry.key}\r\n verticalLocation={location}\r\n horizontalLocation={entry.horizontalLocation}\r\n id={entry.key}\r\n component={entry.component}\r\n displayName={entry.displayName}\r\n suppressTeachingMoment={entry.suppressTeachingMoment}\r\n />\r\n ))}\r\n </div>\r\n </div>\r\n )}\r\n </>\r\n );\r\n};\r\n\r\n// This is a wrapper for a tab in a side pane that simply adds a teaching moment, which is useful for dynamically added items, possibly from extensions.\r\nconst SidePaneTab: FunctionComponent<\r\n { location: HorizontalLocation; id: string; isSelected: boolean; dockOptions: Map<DockLocation, (sidePaneKey: string) => void> } & Pick<\r\n Readonly<SidePaneDefinition>,\r\n \"title\" | \"icon\" | \"suppressTeachingMoment\"\r\n >\r\n> = (props) => {\r\n const {\r\n location,\r\n id,\r\n isSelected,\r\n dockOptions,\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n icon: Icon,\r\n title,\r\n suppressTeachingMoment,\r\n } = props;\r\n const classes = useStyles();\r\n const useTeachingMoment = useMemo(() => MakePopoverTeachingMoment(`Pane/${location}/${title ?? id}`), [title, id]);\r\n const teachingMoment = useTeachingMoment(suppressTeachingMoment);\r\n\r\n const tabClass = mergeClasses(classes.tab, isSelected ? undefined : classes.unselectedTab);\r\n\r\n return (\r\n <>\r\n <TeachingMoment\r\n {...teachingMoment}\r\n shouldDisplay={teachingMoment.shouldDisplay && !suppressTeachingMoment}\r\n title={title ?? \"Extension\"}\r\n description={`The \"${title ?? id}\" extension can be accessed here.`}\r\n />\r\n <Theme className={tabClass} invert={isSelected}>\r\n <DockMenu openOnContext sidePaneId={id} dockOptions={dockOptions}>\r\n <ToolbarRadioButton\r\n ref={teachingMoment.targetRef}\r\n title={title ?? id}\r\n appearance=\"transparent\"\r\n className={classes.tabRadioButton}\r\n name=\"selectedTab\"\r\n value={id}\r\n icon={{\r\n className: isSelected ? classes.selectedTabIcon : undefined,\r\n children: <Icon />,\r\n }}\r\n />\r\n </DockMenu>\r\n </Theme>\r\n </>\r\n );\r\n};\r\n\r\n// This hook provides a side pane container and the tab list.\r\n// In \"compact\" mode, the tab list is integrated into the pane itself.\r\n// In \"full\" mode, the returned tab list is later injected into the toolbar.\r\nfunction usePane(\r\n location: HorizontalLocation,\r\n defaultWidth: number,\r\n minWidth: number,\r\n sidePanes: SidePaneEntry[],\r\n topPaneContainerRef: (element: HTMLElement | null) => void,\r\n bottomPaneContainerRef: (element: HTMLElement | null) => void,\r\n onSelectSidePane: Observable<string>,\r\n dockOperations: Map<DockLocation, (sidePaneKey: string) => void>,\r\n toolbarMode: ToolbarMode,\r\n topBarItems: Readonly<ToolbarItemDefinition[]>,\r\n bottomBarItems: Readonly<ToolbarItemDefinition[]>\r\n) {\r\n const classes = useStyles();\r\n\r\n const [topSelectedTab, setTopSelectedTab] = useState<SidePaneEntry>();\r\n const [bottomSelectedTab, setBottomSelectedTab] = useState<SidePaneEntry>();\r\n const [collapsed, setCollapsed] = useState(false);\r\n\r\n const onExpandCollapseClick = useCallback(() => {\r\n setCollapsed((collapsed) => !collapsed);\r\n }, [collapsed]);\r\n\r\n const widthStorageKey = `Babylon/Settings/${location}Pane/WidthAdjust`;\r\n const heightStorageKey = `Babylon/Settings/${location}Pane/HeightAdjust`;\r\n\r\n const currentSidePanes = useMemo(() => sidePanes.filter((entry) => entry.horizontalLocation === location), [sidePanes, location]);\r\n const topPanes = useMemo(() => currentSidePanes.filter((entry) => entry.verticalLocation === \"top\"), [currentSidePanes]);\r\n const bottomPanes = useMemo(() => currentSidePanes.filter((entry) => entry.verticalLocation === \"bottom\"), [currentSidePanes]);\r\n\r\n const getValidDockOperations = useCallback(\r\n (verticalLocation: VerticalLocation) => {\r\n const validDockOperations = new Map(dockOperations);\r\n\r\n // Can't re-dock to the current location.\r\n validDockOperations.delete(`${verticalLocation}-${location}`);\r\n\r\n // Full would mean there are no bottom panes, so this is also re-docking to the current location.\r\n validDockOperations.delete(`full-${location}`);\r\n\r\n // If there is only one pane left, it can't be docked to the bottom (as this would leave no top panes).\r\n if (currentSidePanes.length === 1) {\r\n validDockOperations.delete(`bottom-${location}`);\r\n }\r\n\r\n return validDockOperations;\r\n },\r\n [location, dockOperations, currentSidePanes]\r\n );\r\n\r\n const validTopDockOptions = useMemo(() => getValidDockOperations(\"top\"), [getValidDockOperations]);\r\n const validBottomDockOptions = useMemo(() => getValidDockOperations(\"bottom\"), [getValidDockOperations]);\r\n\r\n // Selects a default top tab (during initialization or if the selected tab is removed).\r\n useEffect(() => {\r\n if ((topSelectedTab && !topPanes.includes(topSelectedTab)) || (!topSelectedTab && topPanes.length > 0)) {\r\n setTopSelectedTab(topPanes[0]);\r\n } else if (topSelectedTab && topPanes.length === 0) {\r\n setTopSelectedTab(undefined);\r\n }\r\n }, [topSelectedTab, topPanes]);\r\n\r\n // Selects a default bottom tab (during initialization or if the selected tab is removed).\r\n useEffect(() => {\r\n if ((bottomSelectedTab && !bottomPanes.includes(bottomSelectedTab)) || (!bottomSelectedTab && bottomPanes.length > 0)) {\r\n setBottomSelectedTab(bottomPanes[0]);\r\n } else if (bottomSelectedTab && bottomPanes.length === 0) {\r\n setBottomSelectedTab(undefined);\r\n }\r\n }, [bottomSelectedTab, bottomPanes]);\r\n\r\n // Selects a tab when explicitly requested.\r\n useEffect(() => {\r\n const observer = onSelectSidePane.add((key) => {\r\n const topPane = topPanes.find((entry) => entry.key === key);\r\n if (topPane) {\r\n setTopSelectedTab(topPane);\r\n setCollapsed(false);\r\n }\r\n\r\n const bottomPane = bottomPanes.find((entry) => entry.key === key);\r\n if (bottomPane) {\r\n setBottomSelectedTab(bottomPane);\r\n setCollapsed(false);\r\n }\r\n });\r\n\r\n return () => observer.remove();\r\n }, [topPanes, bottomPanes, onSelectSidePane]);\r\n\r\n const expandCollapseIcon = useMemo(() => {\r\n if (location === \"left\") {\r\n return collapsed ? <PanelLeftExpandRegular /> : <PanelLeftContractRegular />;\r\n } else {\r\n return collapsed ? <PanelRightExpandRegular /> : <PanelRightContractRegular />;\r\n }\r\n }, [collapsed, location]);\r\n\r\n const createPaneTabList = useCallback(\r\n (\r\n paneComponents: SidePaneEntry[],\r\n toolbarMode: \"full\" | \"compact\",\r\n selectedTab: SidePaneEntry | undefined,\r\n setSelectedTab: (tab: SidePaneEntry | undefined) => void,\r\n dockOptions: Map<DockLocation, (sidePaneKey: string) => void>\r\n ) => {\r\n return (\r\n <>\r\n {paneComponents.length > 0 && (\r\n <div className={`${classes.paneTabListDiv} ${location === \"left\" || toolbarMode === \"compact\" ? classes.paneTabListDivLeft : classes.paneTabListDivRight}`}>\r\n {/* Only render the tab list if there is more than tab. It's kind of pointless to show a tab list with just one tab. */}\r\n {paneComponents.length > 1 && (\r\n <>\r\n <FluentToolbar\r\n className={classes.tabToolbar}\r\n checkedValues={{ selectedTab: [selectedTab?.key ?? \"\"] }}\r\n onCheckedValueChange={(event, data) => {\r\n const tab = paneComponents.find((entry) => entry.key === data.checkedItems[0]);\r\n setSelectedTab(tab);\r\n setCollapsed(false);\r\n }}\r\n >\r\n {paneComponents.map((entry) => {\r\n const isSelected = selectedTab?.key === entry.key;\r\n return (\r\n <SidePaneTab\r\n key={entry.key}\r\n location={location}\r\n id={entry.key}\r\n title={entry.title}\r\n icon={entry.icon}\r\n suppressTeachingMoment={entry.suppressTeachingMoment}\r\n isSelected={isSelected && !collapsed}\r\n dockOptions={dockOptions}\r\n />\r\n );\r\n })}\r\n </FluentToolbar>\r\n </>\r\n )}\r\n\r\n {/* When the toolbar mode is \"full\", we add an extra button that allows the side panes to be collapsed. */}\r\n {toolbarMode === \"full\" && (\r\n <>\r\n {paneComponents.length > 1 && (\r\n <>\r\n <Divider vertical inset style={{ minHeight: 0 }} />{\" \"}\r\n </>\r\n )}\r\n <Tooltip content={collapsed ? \"Show Side Pane\" : \"Hide Side Pane\"} relationship=\"label\">\r\n <Button className={classes.paneCollapseButton} appearance=\"subtle\" icon={expandCollapseIcon} onClick={onExpandCollapseClick} />\r\n </Tooltip>\r\n </>\r\n )}\r\n </div>\r\n )}\r\n </>\r\n );\r\n },\r\n [location, collapsed]\r\n );\r\n\r\n // This memos the TabList to make it easy for the JSX to be inserted at the top of the pane (in \"compact\" mode) or returned to the caller to be used in the toolbar (in \"full\" mode).\r\n const topPaneTabList = useMemo(\r\n () => createPaneTabList(topPanes, toolbarMode, topSelectedTab, setTopSelectedTab, validTopDockOptions),\r\n [createPaneTabList, topPanes, toolbarMode, topSelectedTab]\r\n );\r\n const bottomPaneTabList = useMemo(\r\n () => createPaneTabList(bottomPanes, \"compact\", bottomSelectedTab, setBottomSelectedTab, validBottomDockOptions),\r\n [createPaneTabList, bottomPanes, bottomSelectedTab]\r\n );\r\n\r\n // This manages the CSS variable that controls the width of the side pane.\r\n const paneWidthAdjustCSSVar = \"--pane-width-adjust\";\r\n const {\r\n elementRef: paneHorizontalResizeElementRef,\r\n handleRef: paneHorizontalResizeHandleRef,\r\n setValue: setPaneWidthAdjust,\r\n } = useResizeHandle({\r\n growDirection: location === \"left\" ? \"end\" : \"start\",\r\n variableName: paneWidthAdjustCSSVar,\r\n minValue: minWidth - defaultWidth,\r\n onChange: (value) => {\r\n // Whenever the width is adjusted, store the value.\r\n localStorage.setItem(widthStorageKey, value.toString());\r\n },\r\n });\r\n\r\n // This manages the CSS variable that controls the height of the bottom pane.\r\n const paneHeightAdjustCSSVar = \"--pane-height-adjust\";\r\n const {\r\n elementRef: paneVerticalResizeElementRef,\r\n handleRef: paneVerticalResizeHandleRef,\r\n setValue: setPaneHeightAdjust,\r\n } = useResizeHandle({\r\n growDirection: \"up\",\r\n variableName: paneHeightAdjustCSSVar,\r\n onChange: (value) => {\r\n // Whenever the height is adjusted, store the value.\r\n localStorage.setItem(heightStorageKey, value.toString());\r\n },\r\n });\r\n\r\n // This ensures that when the component is first rendered, the CSS variable is set from storage.\r\n useLayoutEffect(() => {\r\n const storedPaneWidthAdjust = localStorage.getItem(widthStorageKey);\r\n if (storedPaneWidthAdjust) {\r\n setPaneWidthAdjust(Number.parseInt(storedPaneWidthAdjust));\r\n }\r\n\r\n const storedPaneHeightAdjust = localStorage.getItem(heightStorageKey);\r\n if (storedPaneHeightAdjust) {\r\n setPaneHeightAdjust(Number.parseInt(storedPaneHeightAdjust));\r\n }\r\n }, []);\r\n\r\n // This memoizes the pane itself, which may or may not include the tab list, depending on the toolbar mode.\r\n const pane = useMemo(() => {\r\n return (\r\n <>\r\n {(topPanes.length > 0 || bottomPanes.length > 0) && (\r\n <div className={`${classes.pane} ${location === \"left\" ? classes.paneLeft : classes.paneRight}`}>\r\n <Collapse orientation=\"horizontal\" visible={!collapsed}>\r\n <div\r\n ref={paneHorizontalResizeElementRef}\r\n className={classes.paneContainer}\r\n style={{ width: `clamp(${minWidth}px, calc(${defaultWidth}px + var(${paneWidthAdjustCSSVar}, 0px)), 1000px)` }}\r\n >\r\n {/* If toolbar mode is \"compact\" then the top toolbar is embedded at the top of the pane. */}\r\n {toolbarMode === \"compact\" && (topPanes.length > 1 || topBarItems.length > 0) && (\r\n <>\r\n <div className={classes.barDiv}>\r\n {/* The tablist gets merged in with the toolbar. */}\r\n {topPaneTabList}\r\n <Toolbar location=\"top\" components={topBarItems} />\r\n </div>\r\n </>\r\n )}\r\n\r\n {/* Render the top pane content. */}\r\n {topPanes.length > 0 && (\r\n <div className={classes.paneContent}>\r\n {topSelectedTab && (\r\n <>\r\n <PaneHeader id={topSelectedTab.key} title={topSelectedTab.title} dockOptions={validTopDockOptions} />\r\n <div ref={topPaneContainerRef} className={classes.paneContent} />\r\n </>\r\n )}\r\n </div>\r\n )}\r\n\r\n {/* If we have both top and bottom panes, show a divider. This divider is also the resizer for the bottom pane. */}\r\n {topPanes.length > 0 && bottomPanes.length > 0 && <Divider ref={paneVerticalResizeHandleRef} className={classes.paneDivider} />}\r\n\r\n {/* Render the bottom pane tablist. */}\r\n {bottomPanes.length > 1 && (\r\n <>\r\n <div className={classes.barDiv}>{bottomPaneTabList}</div>\r\n </>\r\n )}\r\n\r\n {/* Render the bottom pane content. This is the element that can be resized vertically. */}\r\n {bottomPanes.length > 0 && (\r\n <div\r\n ref={paneVerticalResizeElementRef}\r\n className={classes.paneContent}\r\n style={{ height: `clamp(200px, calc(45% + var(${paneHeightAdjustCSSVar}, 0px)), 100% - 300px)`, flex: \"0 0 auto\" }}\r\n >\r\n {bottomSelectedTab && (\r\n <>\r\n <PaneHeader id={bottomSelectedTab.key} title={bottomSelectedTab.title} dockOptions={validBottomDockOptions} />\r\n <div ref={bottomPaneContainerRef} className={classes.paneContent} />\r\n </>\r\n )}\r\n </div>\r\n )}\r\n\r\n {/* If toolbar mode is \"compact\" then the bottom toolbar is embedded at the bottom of the pane. */}\r\n {toolbarMode === \"compact\" && bottomBarItems.length > 0 && (\r\n <>\r\n <div className={classes.barDiv}>\r\n <Toolbar location=\"bottom\" components={bottomBarItems} />\r\n </div>\r\n </>\r\n )}\r\n </div>\r\n </Collapse>\r\n {/* This is the resizer (width) for the pane container. */}\r\n <div\r\n ref={paneHorizontalResizeHandleRef}\r\n className={`${classes.resizer} ${location === \"left\" ? classes.resizerLeft : classes.resizerRight}`}\r\n style={{ pointerEvents: `${collapsed ? \"none\" : \"auto\"}` }}\r\n />\r\n </div>\r\n )}\r\n </>\r\n );\r\n }, [\r\n topPanes,\r\n topSelectedTab,\r\n validTopDockOptions,\r\n bottomPanes,\r\n bottomSelectedTab,\r\n validBottomDockOptions,\r\n topBarItems,\r\n bottomBarItems,\r\n topPaneTabList,\r\n bottomPaneTabList,\r\n collapsed,\r\n ]);\r\n\r\n return [topPaneTabList, pane, topSelectedTab, bottomSelectedTab] as const;\r\n}\r\n\r\nexport function MakeShellServiceDefinition({\r\n leftPaneDefaultWidth = 350,\r\n leftPaneMinWidth = 350,\r\n rightPaneDefaultWidth = 350,\r\n rightPaneMinWidth = 350,\r\n toolbarMode = \"full\",\r\n sidePaneRemapper = undefined,\r\n}: ShellServiceOptions = {}): ServiceDefinition<[IShellService, IRootComponentService], []> {\r\n return {\r\n friendlyName: \"MainView\",\r\n produces: [ShellServiceIdentity, RootComponentServiceIdentity],\r\n factory: () => {\r\n const toolbarItemCollection = new ObservableCollection<Readonly<ToolbarItemDefinition>>();\r\n const sidePaneCollection = new ObservableCollection<Readonly<SidePaneDefinition>>();\r\n const centralContentCollection = new ObservableCollection<Readonly<CentralContentDefinition>>();\r\n\r\n const onSelectSidePane = new Observable<string>(undefined, true);\r\n\r\n const rootComponent: FunctionComponent = () => {\r\n const classes = useStyles();\r\n\r\n const [sidePaneDockOverrides, setSidePaneDockOverrides] = useSidePaneDockOverrides();\r\n\r\n // This function returns a promise that resolves after the dock change takes effect so that\r\n // we can then select the re-docked pane.\r\n const pendingPaneReselects = useRef<string[]>([]);\r\n const updateSidePaneDockOverride = useCallback(\r\n (key: string, horizontalLocation: HorizontalLocation, verticalLocation: VerticalLocation) => {\r\n setSidePaneDockOverrides((current) => ({\r\n ...current,\r\n [key]: { horizontalLocation, verticalLocation },\r\n }));\r\n\r\n pendingPaneReselects.current.push(key);\r\n },\r\n [setSidePaneDockOverrides]\r\n );\r\n\r\n const toolbarItems = useOrderedObservableCollection(toolbarItemCollection);\r\n\r\n const sidePanes = useOrderedObservableCollection(sidePaneCollection);\r\n const coercedSidePaneCache = useRef(new Map<string, SidePaneEntry>());\r\n const coercedSidePanes = useMemo(() => {\r\n // First pass - apply overrides and respect the side pane mode.\r\n const coercedSidePanes = sidePanes.map((sidePaneDefinition) => {\r\n let sidePaneEntry = coercedSidePaneCache.current.get(sidePaneDefinition.key);\r\n if (!sidePaneEntry) {\r\n // Manually create html element containers outside the React tree to prevent unmounting/mounting\r\n // when panes are re-docked or the selected tabs change. This preserves state within the side panes.\r\n // This is combined with the usage of React portals to make it all work.\r\n const sidePaneContainer = document.createElement(\"div\");\r\n sidePaneContainer.style.display = \"flex\";\r\n sidePaneContainer.style.flex = \"1\";\r\n sidePaneContainer.style.flexDirection = \"column\";\r\n sidePaneContainer.style.overflow = \"hidden\";\r\n sidePaneEntry = { ...sidePaneDefinition, container: sidePaneContainer };\r\n coercedSidePaneCache.current.set(sidePaneDefinition.key, sidePaneEntry);\r\n }\r\n\r\n const override = sidePaneDockOverrides[sidePaneDefinition.key];\r\n if (override) {\r\n // Override (user manually re-docked) has the highest priority.\r\n sidePaneEntry.horizontalLocation = override.horizontalLocation;\r\n sidePaneEntry.verticalLocation = override.verticalLocation;\r\n } else if (sidePaneRemapper) {\r\n // A side pane remapper has the next highest priority.\r\n const { horizontalLocation, verticalLocation } = sidePaneRemapper(sidePaneDefinition);\r\n sidePaneEntry.horizontalLocation = horizontalLocation;\r\n sidePaneEntry.verticalLocation = verticalLocation;\r\n } else {\r\n // Otherwise use the default defined location.\r\n sidePaneEntry.horizontalLocation = sidePaneDefinition.horizontalLocation;\r\n sidePaneEntry.verticalLocation = sidePaneDefinition.verticalLocation;\r\n }\r\n\r\n return sidePaneEntry;\r\n });\r\n\r\n // Second pass - correct any invalid state, specifically if there are only bottom panes, force them to be top panes.\r\n for (const side of [\"left\", \"right\"] as const) {\r\n const topPanes = coercedSidePanes.filter((entry) => entry.horizontalLocation === side && entry.verticalLocation === \"top\");\r\n const bottomPanes = coercedSidePanes.filter((entry) => entry.horizontalLocation === side && entry.verticalLocation === \"bottom\");\r\n if (bottomPanes.length > 0 && topPanes.length === 0) {\r\n for (const pane of bottomPanes) {\r\n pane.verticalLocation = \"top\";\r\n updateSidePaneDockOverride(pane.key, side, \"top\");\r\n }\r\n }\r\n }\r\n\r\n // Cleanup any cached panes that are no longer present.\r\n for (const key of coercedSidePaneCache.current.keys()) {\r\n if (!coercedSidePanes.some((entry) => entry.key === key)) {\r\n coercedSidePaneCache.current.delete(key);\r\n }\r\n }\r\n\r\n return coercedSidePanes;\r\n }, [sidePanes, sidePaneDockOverrides, updateSidePaneDockOverride, sidePaneRemapper]);\r\n\r\n useEffect(() => {\r\n for (const paneKey of pendingPaneReselects.current.splice(0)) {\r\n onSelectSidePane.notifyObservers(paneKey);\r\n }\r\n }, [coercedSidePanes]);\r\n\r\n const sidePaneDockOperations = useMemo(() => {\r\n const sidePaneDockOperations = new Map<DockLocation, (sidePaneKey: string) => void>();\r\n for (const side of [\"left\", \"right\"] as const) {\r\n const currentSidePanes = coercedSidePanes.filter((entry) => entry.horizontalLocation === side);\r\n\r\n const dockTop = (sidePaneKey: string) => {\r\n updateSidePaneDockOverride(sidePaneKey, side, \"top\");\r\n };\r\n const dockBottom = (sidePaneKey: string) => {\r\n updateSidePaneDockOverride(sidePaneKey, side, \"bottom\");\r\n };\r\n\r\n if (currentSidePanes.some((entry) => entry.verticalLocation === \"bottom\")) {\r\n // If there are bottom panes, there must also be top panes, and so top and bottom are valid locations.\r\n sidePaneDockOperations.set(`top-${side}`, dockTop);\r\n sidePaneDockOperations.set(`bottom-${side}`, dockBottom);\r\n } else if (currentSidePanes.length > 0) {\r\n // If there are only top panes, then full and bottom are valid locations.\r\n sidePaneDockOperations.set(`full-${side}`, dockTop);\r\n sidePaneDockOperations.set(`bottom-${side}`, dockBottom);\r\n } else {\r\n // If there are no panes, then only full is a valid location.\r\n sidePaneDockOperations.set(`full-${side}`, dockTop);\r\n }\r\n }\r\n return sidePaneDockOperations;\r\n }, [coercedSidePanes]);\r\n\r\n const hasLeftPanes = coercedSidePanes.some((entry) => entry.horizontalLocation === \"left\");\r\n const hasRightPanes = coercedSidePanes.some((entry) => entry.horizontalLocation === \"right\");\r\n\r\n // If we are in compact toolbar mode, we may need to move toolbar items from the left to the right or vice versa,\r\n // depending on whether there are any side panes on that side.\r\n const coerceToolBarItemHorizontalLocation = useMemo(\r\n () => (item: Readonly<ToolbarItemDefinition>) => {\r\n let horizontalLocation = item.horizontalLocation;\r\n // Coercion is only needed in compact toolbar mode since there might not be a left or right pane.\r\n if (toolbarMode === \"compact\") {\r\n if (horizontalLocation === \"left\" && !hasLeftPanes) {\r\n horizontalLocation = \"right\";\r\n }\r\n if (horizontalLocation === \"right\" && !hasRightPanes) {\r\n horizontalLocation = \"left\";\r\n }\r\n }\r\n return horizontalLocation;\r\n },\r\n [toolbarMode, hasLeftPanes, hasRightPanes]\r\n );\r\n\r\n const topToolBarItems = useMemo(() => toolbarItems.filter((entry) => entry.verticalLocation === \"top\"), [toolbarItems]);\r\n const bottomToolBarItems = useMemo(() => toolbarItems.filter((entry) => entry.verticalLocation === \"bottom\"), [toolbarItems]);\r\n\r\n const topBarLeftItems = useMemo(\r\n () => topToolBarItems.filter((entry) => coerceToolBarItemHorizontalLocation(entry) === \"left\"),\r\n [topToolBarItems, coerceToolBarItemHorizontalLocation]\r\n );\r\n const topBarRightItems = useMemo(\r\n () => topToolBarItems.filter((entry) => coerceToolBarItemHorizontalLocation(entry) === \"right\"),\r\n [topToolBarItems, coerceToolBarItemHorizontalLocation]\r\n );\r\n const bottomBarLeftItems = useMemo(\r\n () => bottomToolBarItems.filter((entry) => coerceToolBarItemHorizontalLocation(entry) === \"left\"),\r\n [bottomToolBarItems, coerceToolBarItemHorizontalLocation]\r\n );\r\n const bottomBarRightItems = useMemo(\r\n () => bottomToolBarItems.filter((entry) => coerceToolBarItemHorizontalLocation(entry) === \"right\"),\r\n [bottomToolBarItems, coerceToolBarItemHorizontalLocation]\r\n );\r\n\r\n const centralContents = useOrderedObservableCollection(centralContentCollection);\r\n\r\n const [topLeftPaneContainer, setTopLeftPaneContainer] = useState<HTMLElement | null>(null);\r\n const [bottomLeftPaneContainer, setBottomLeftPaneContainer] = useState<HTMLElement | null>(null);\r\n const [topRightPaneContainer, setTopRightPaneContainer] = useState<HTMLElement | null>(null);\r\n const [bottomRightPaneContainer, setBottomRightPaneContainer] = useState<HTMLElement | null>(null);\r\n\r\n const [leftPaneTabList, leftPane, topLeftSelectedPane, bottomLeftSelectedPane] = usePane(\r\n \"left\",\r\n leftPaneDefaultWidth,\r\n leftPaneMinWidth,\r\n coercedSidePanes,\r\n setTopLeftPaneContainer,\r\n setBottomLeftPaneContainer,\r\n onSelectSidePane,\r\n sidePaneDockOperations,\r\n toolbarMode,\r\n topBarLeftItems,\r\n bottomBarLeftItems\r\n );\r\n\r\n const [rightPaneTabList, rightPane, topRightSelectedPane, bottomRightSelectedPane] = usePane(\r\n \"right\",\r\n rightPaneDefaultWidth,\r\n rightPaneMinWidth,\r\n coercedSidePanes,\r\n setTopRightPaneContainer,\r\n setBottomRightPaneContainer,\r\n onSelectSidePane,\r\n sidePaneDockOperations,\r\n toolbarMode,\r\n topBarRightItems,\r\n bottomBarRightItems\r\n );\r\n\r\n // Update the content of the top left pane container.\r\n useEffect(() => {\r\n topLeftPaneContainer?.replaceChildren(...(topLeftSelectedPane ? [topLeftSelectedPane.container] : []));\r\n }, [topLeftPaneContainer, topLeftSelectedPane]);\r\n\r\n // Update the content of the bottom left pane container.\r\n useEffect(() => {\r\n bottomLeftPaneContainer?.replaceChildren(...(bottomLeftSelectedPane ? [bottomLeftSelectedPane.container] : []));\r\n }, [bottomLeftPaneContainer, bottomLeftSelectedPane]);\r\n\r\n // Update the content of the top right pane container.\r\n useEffect(() => {\r\n topRightPaneContainer?.replaceChildren(...(topRightSelectedPane ? [topRightSelectedPane.container] : []));\r\n }, [topRightPaneContainer, topRightSelectedPane]);\r\n\r\n // Update the content of the bottom right pane container.\r\n useEffect(() => {\r\n bottomRightPaneContainer?.replaceChildren(...(bottomRightSelectedPane ? [bottomRightSelectedPane.container] : []));\r\n }, [bottomRightPaneContainer, bottomRightSelectedPane]);\r\n\r\n return (\r\n <div className={classes.mainView}>\r\n {/* Only render the top toolbar if the toolbar mode is \"full\". Otherwise it will be embedded at the top of the side panes. */}\r\n {toolbarMode === \"full\" && (\r\n <>\r\n <div className={classes.barDiv}>\r\n {leftPaneTabList}\r\n <Toolbar location=\"top\" components={topToolBarItems} />\r\n {rightPaneTabList}\r\n </div>\r\n </>\r\n )}\r\n\r\n {/* This renders the side panes and the main/central content. */}\r\n <div className={classes.verticallyCentralContent}>\r\n {/* Render the left pane container. */}\r\n {leftPane}\r\n\r\n {/* Render the main/central content. */}\r\n <div className={classes.centralContent}>\r\n {centralContents.map((entry) => (\r\n <entry.component key={entry.key} />\r\n ))}\r\n </div>\r\n\r\n {/* Render the right pane container. */}\r\n {rightPane}\r\n </div>\r\n\r\n {/* Only render the bottom toolbar if the toolbar mode is \"full\". Otherwise it will be embedded at the bottom of the side panes. */}\r\n {toolbarMode === \"full\" && (\r\n <>\r\n <div className={classes.barDiv}>\r\n <Toolbar location=\"bottom\" components={bottomToolBarItems} />\r\n </div>\r\n </>\r\n )}\r\n\r\n {/* Always render all side panes, but render them into portals so we can relocate them (undock/redock) without losing their state. */}\r\n {coercedSidePanes.map((sidePaneDefinition) => {\r\n return (\r\n <Portal key={sidePaneDefinition.key} mountNode={sidePaneDefinition.container}>\r\n <sidePaneDefinition.content />\r\n </Portal>\r\n );\r\n })}\r\n </div>\r\n );\r\n };\r\n rootComponent.displayName = \"Shell Service Root\";\r\n\r\n return {\r\n addToolbarItem: (entry) => {\r\n if (!entry.component.displayName) {\r\n entry.component.displayName = `${entry.key} | ${entry.verticalLocation} ${entry.horizontalLocation} bar item`;\r\n }\r\n\r\n return toolbarItemCollection.add(entry);\r\n },\r\n addSidePane: (entry) => {\r\n if (!entry.content.displayName) {\r\n entry.content.displayName = `${entry.key} | ${entry.horizontalLocation} pane`;\r\n }\r\n\r\n return sidePaneCollection.add(entry);\r\n },\r\n addCentralContent: (entry) => centralContentCollection.add(entry),\r\n resetSidePaneLayout: () => localStorage.removeItem(\"Babylon/Settings/SidePaneDockOverrides\"),\r\n get sidePanes() {\r\n return [...sidePaneCollection.items].map((sidePaneDefinition) => {\r\n return {\r\n key: sidePaneDefinition.key,\r\n select: () => onSelectSidePane.notifyObservers(sidePaneDefinition.key),\r\n };\r\n });\r\n },\r\n rootComponent,\r\n };\r\n },\r\n };\r\n}\r\n","import type { IDisposable, IReadonlyObservable, Nullable } from \"core/index\";\r\nimport type { IService, ServiceDefinition } from \"../modularity/serviceDefinition\";\r\nimport type { ISettingsContext } from \"./settingsContext\";\r\nimport type { IShellService } from \"./shellService\";\r\n\r\nimport { Observable } from \"core/Misc/observable\";\r\nimport { InterceptFunction } from \"../instrumentation/functionInstrumentation\";\r\nimport { SettingsContextIdentity } from \"./settingsContext\";\r\nimport { ShellServiceIdentity } from \"./shellService\";\r\n\r\nexport const SelectionServiceIdentity = Symbol(\"PropertiesService\");\r\n\r\n/**\r\n * Tracks the currently selected entity.\r\n */\r\nexport interface ISelectionService extends IService<typeof SelectionServiceIdentity> {\r\n /**\r\n * Gets or sets the currently selected entity.\r\n */\r\n selectedEntity: Nullable<unknown>;\r\n\r\n /**\r\n * An observable that notifies when the selected entity changes.\r\n */\r\n readonly onSelectedEntityChanged: IReadonlyObservable<void>;\r\n}\r\n\r\nexport const SelectionServiceDefinition: ServiceDefinition<[ISelectionService], [IShellService, ISettingsContext]> = {\r\n friendlyName: \"Selection Service\",\r\n produces: [SelectionServiceIdentity],\r\n consumes: [ShellServiceIdentity, SettingsContextIdentity],\r\n factory: (shellService, settingsContext) => {\r\n let selectedEntityState: Nullable<unknown> = null;\r\n const selectedEntityObservable = new Observable<void>();\r\n let disposedHook: Nullable<IDisposable> = null;\r\n\r\n const setSelectedItem = (item: Nullable<unknown>) => {\r\n if (item !== selectedEntityState) {\r\n disposedHook?.dispose();\r\n disposedHook = null;\r\n\r\n selectedEntityState = item;\r\n selectedEntityObservable.notifyObservers();\r\n\r\n if (item) {\r\n const disposable = item as Partial<IDisposable>;\r\n if (disposable.dispose) {\r\n disposedHook = InterceptFunction(disposable, \"dispose\", { afterCall: () => setSelectedItem(null) });\r\n }\r\n }\r\n\r\n // Expose the selected entity through a global variable. This is an Inspector v1 feature that people have found useful.\r\n (globalThis as any).debugNode = item;\r\n\r\n // Automatically open the properties pane when an entity is selected.\r\n if (item && settingsContext.showPropertiesOnEntitySelection) {\r\n shellService.sidePanes.find((pane) => pane.key === \"Properties\")?.select();\r\n }\r\n }\r\n };\r\n\r\n return {\r\n get selectedEntity() {\r\n return selectedEntityState;\r\n },\r\n set selectedEntity(item: Nullable<unknown>) {\r\n setSelectedItem(item);\r\n },\r\n onSelectedEntityChanged: selectedEntityObservable,\r\n dispose: () => selectedEntityObservable.clear(),\r\n };\r\n },\r\n};\r\n","import type { IDisposable } from \"core/index\";\r\n\r\nimport type { DynamicAccordionSection, DynamicAccordionSectionContent } from \"../../../components/extensibleAccordion\";\r\nimport type { IService, ServiceDefinition } from \"../../../modularity/serviceDefinition\";\r\nimport type { ISelectionService } from \"../../selectionService\";\r\nimport type { IShellService } from \"../../shellService\";\r\n\r\nimport { DocumentTextRegular } from \"@fluentui/react-icons\";\r\n\r\nimport { PropertiesPane } from \"../../../components/properties/propertiesPane\";\r\nimport { useObservableCollection, useObservableState, useOrderedObservableCollection } from \"../../../hooks/observableHooks\";\r\nimport { ObservableCollection } from \"../../../misc/observableCollection\";\r\nimport { SelectionServiceIdentity } from \"../../selectionService\";\r\nimport { ShellServiceIdentity } from \"../../shellService\";\r\nimport { useMemo } from \"react\";\r\n\r\nexport const PropertiesServiceIdentity = Symbol(\"PropertiesService\");\r\n\r\ntype PropertiesSectionContent<EntityT> = {\r\n /**\r\n * A unique key for the the content.\r\n */\r\n key: string;\r\n\r\n /**\r\n * A predicate function to determine if the content applies to the given entity.\r\n */\r\n predicate: (entity: unknown) => entity is EntityT;\r\n} & {\r\n content: readonly Omit<DynamicAccordionSectionContent<EntityT>, \"key\">[];\r\n};\r\n\r\n/**\r\n * Allows new sections or content to be added to the properties pane.\r\n */\r\nexport interface IPropertiesService extends IService<typeof PropertiesServiceIdentity> {\r\n /**\r\n * Adds a new section (e.g. \"General\", \"Transforms\", etc.).\r\n * @param section A description of the section to add.\r\n */\r\n addSection(section: DynamicAccordionSection): IDisposable;\r\n\r\n /**\r\n * Adds content to one or more sections.\r\n * @param content A description of the content to add.\r\n */\r\n addSectionContent<EntityT>(content: PropertiesSectionContent<EntityT>): IDisposable;\r\n}\r\n\r\n/**\r\n * Provides a properties pane that enables displaying and editing properties of an entity such as a mesh or a texture.\r\n */\r\nexport const PropertiesServiceDefinition: ServiceDefinition<[IPropertiesService], [IShellService, ISelectionService]> = {\r\n friendlyName: \"Properties Editor\",\r\n produces: [PropertiesServiceIdentity],\r\n consumes: [ShellServiceIdentity, SelectionServiceIdentity],\r\n factory: (shellService, selectionService) => {\r\n const sectionsCollection = new ObservableCollection<DynamicAccordionSection>();\r\n const sectionContentCollection = new ObservableCollection<PropertiesSectionContent<unknown>>();\r\n\r\n const registration = shellService.addSidePane({\r\n key: \"Properties\",\r\n title: \"Properties\",\r\n icon: DocumentTextRegular,\r\n horizontalLocation: \"right\",\r\n verticalLocation: \"top\",\r\n order: 100,\r\n suppressTeachingMoment: true,\r\n content: () => {\r\n const sections = useOrderedObservableCollection(sectionsCollection);\r\n const sectionContent = useObservableCollection(sectionContentCollection);\r\n const entity = useObservableState(() => selectionService.selectedEntity, selectionService.onSelectedEntityChanged);\r\n const applicableContent = useMemo(\r\n () =>\r\n entity\r\n ? sectionContent\r\n .filter((section) => section.predicate(entity))\r\n .flatMap((section) => {\r\n return section.content.map((content) => {\r\n return {\r\n key: section.key,\r\n section: content.section,\r\n order: content.order,\r\n component: content.component,\r\n };\r\n });\r\n })\r\n : [],\r\n [sectionContent, entity]\r\n );\r\n\r\n return <PropertiesPane sections={sections} sectionContent={applicableContent} context={entity} />;\r\n },\r\n });\r\n\r\n return {\r\n addSection: (section) => sectionsCollection.add(section),\r\n addSectionContent: (content) => sectionContentCollection.add(content as PropertiesSectionContent<unknown>),\r\n dispose: () => registration.dispose(),\r\n };\r\n },\r\n};\r\n","/**\r\n * Performs a topological sort on a graph.\r\n * @param graph The set of nodes that make up the graph.\r\n * @param getAdjacentNodes A function that returns the adjacent nodes for a given node.\r\n * @param onSortedNode A function that is called for each node in the sorted order.\r\n * @remarks\r\n * This function allocates. Do not use it in the hot path. Instead use an instance of GraphUtils.\r\n */\r\nexport function SortGraph<NodeT>(graph: Iterable<NodeT>, getAdjacentNodes: (node: NodeT) => Iterable<NodeT>, onSortedNode: (node: NodeT) => void) {\r\n const sorter = new GraphUtils<NodeT>();\r\n sorter.sort(graph, getAdjacentNodes, onSortedNode);\r\n}\r\n\r\n/**\r\n * Traverses a graph.\r\n * @param graph The set of nodes that make up the graph.\r\n * @param getAdjacentNodes A function that returns the adjacent nodes for a given node.\r\n * @param onBeforeTraverse A function that is called before traversing each node.\r\n * @param onAfterTraverse A function that is called after traversing each node.\r\n * @remarks\r\n * This function allocates. Do not use it in the hot path. Instead use an instance of GraphUtils.\r\n */\r\nexport function TraverseGraph<NodeT>(\r\n graph: Iterable<NodeT>,\r\n getAdjacentNodes: (node: NodeT) => Iterable<NodeT> | null | undefined,\r\n onBeforeTraverse?: (node: NodeT) => void,\r\n onAfterTraverse?: (node: NodeT) => void\r\n) {\r\n const traverser = new GraphUtils<NodeT>();\r\n traverser.traverse(graph, getAdjacentNodes, onBeforeTraverse, onAfterTraverse);\r\n}\r\n\r\n/**\r\n * A utility class for performing graph operations.\r\n * @remarks\r\n * The class allocates new objects, but each operation (e.g. sort, traverse) is allocation free. This is useful when used in the hot path.\r\n */\r\nexport class GraphUtils<DefaultNodeT = unknown> {\r\n // Tracks three states:\r\n // 1. No entry for the node - this means the node has not been encountered yet during any traversal\r\n // 2. Entry with value false - this means the node is currently being traversed (needed to detect cycles)\r\n // 3. Entry with value true - this means the node has already been fully traversed (and cycles were not detected)\r\n private readonly _traversalState = new Map<DefaultNodeT, boolean>();\r\n private _isTraversing = false;\r\n\r\n /**\r\n * Performs a topological sort on a graph.\r\n * @param graph The set of nodes that make up the graph.\r\n * @param getAdjacentNodes A function that returns the adjacent nodes for a given node.\r\n * @param onSortedNode A function that is called for each node in the sorted order.\r\n */\r\n public sort<NodeT extends DefaultNodeT>(graph: Iterable<NodeT>, getAdjacentNodes: (node: NodeT) => Iterable<NodeT>, onSortedNode: (node: NodeT) => void) {\r\n this.traverse(graph, getAdjacentNodes, undefined, onSortedNode);\r\n }\r\n\r\n /**\r\n * Traverses a graph.\r\n * @param graph The set of nodes that make up the graph.\r\n * @param getAdjacentNodes A function that returns the adjacent nodes for a given node.\r\n * @param onBeforeTraverse A function that is called before traversing each node.\r\n * @param onAfterTraverse A function that is called after traversing each node.\r\n */\r\n public traverse<NodeT extends DefaultNodeT>(\r\n graph: Iterable<NodeT>,\r\n getAdjacentNodes: (node: NodeT) => Iterable<NodeT> | null | undefined,\r\n onBeforeTraverse?: (node: NodeT) => void,\r\n onAfterTraverse?: (node: NodeT) => void\r\n ) {\r\n // Since the traversal state is re-used, disallow re-entrancy through the getAdjacentNodes or onBeforeTraverse or onAfterTraverse callbacks.\r\n if (this._isTraversing) {\r\n throw new Error(\"This TopologicalSorter instance is already traversing.\");\r\n }\r\n\r\n this._isTraversing = true;\r\n\r\n try {\r\n for (const node of graph) {\r\n this._traverseCore(node, getAdjacentNodes, onBeforeTraverse, onAfterTraverse);\r\n }\r\n } finally {\r\n this._isTraversing = false;\r\n this._traversalState.clear();\r\n }\r\n }\r\n\r\n private _traverseCore<NodeT extends DefaultNodeT>(\r\n node: NodeT,\r\n getAdjacentNodes: (node: NodeT) => Iterable<NodeT> | null | undefined,\r\n onBeforeTraverse?: (node: NodeT) => void,\r\n onAfterTraverse?: (node: NodeT) => void\r\n ) {\r\n if (this._traversalState.get(node) !== true) {\r\n if (this._traversalState.get(node) === false) {\r\n throw new Error(\"Graph has cycle.\");\r\n }\r\n\r\n this._traversalState.set(node, false);\r\n onBeforeTraverse?.(node);\r\n\r\n const adjacentNodes = getAdjacentNodes(node);\r\n if (adjacentNodes) {\r\n for (const adjacentNode of adjacentNodes) {\r\n this._traverseCore(adjacentNode, getAdjacentNodes, onBeforeTraverse, onAfterTraverse);\r\n }\r\n }\r\n\r\n this._traversalState.set(node, true);\r\n onAfterTraverse?.(node);\r\n }\r\n }\r\n}\r\n","import type { ScrollToInterface } from \"@fluentui-contrib/react-virtualizer\";\r\nimport type { TreeItemValue, TreeOpenChangeData, TreeOpenChangeEvent } from \"@fluentui/react-components\";\r\nimport type { FluentIcon } from \"@fluentui/react-icons\";\r\nimport type { ComponentType, FunctionComponent } from \"react\";\r\n\r\nimport type { IDisposable, IReadonlyObservable, Nullable, Scene } from \"core/index\";\r\n\r\nimport { VirtualizerScrollView } from \"@fluentui-contrib/react-virtualizer\";\r\nimport {\r\n Body1,\r\n Body1Strong,\r\n Button,\r\n FlatTree,\r\n FlatTreeItem,\r\n makeStyles,\r\n Menu,\r\n MenuItem,\r\n MenuList,\r\n MenuPopover,\r\n MenuTrigger,\r\n mergeClasses,\r\n SearchBox,\r\n tokens,\r\n Tooltip,\r\n TreeItemLayout,\r\n treeItemLevelToken,\r\n} from \"@fluentui/react-components\";\r\nimport { ArrowExpandAllRegular, createFluentIcon, FilterRegular, GlobeRegular } from \"@fluentui/react-icons\";\r\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\r\n\r\nimport { ToggleButton } from \"shared-ui-components/fluent/primitives/toggleButton\";\r\nimport { CustomTokens } from \"shared-ui-components/fluent/primitives/utils\";\r\nimport { useObservableState } from \"../../hooks/observableHooks\";\r\nimport { useResource } from \"../../hooks/resourceHooks\";\r\nimport { useCompactMode } from \"../../hooks/settingsHooks\";\r\nimport { TraverseGraph } from \"../../misc/graphUtils\";\r\n\r\nexport type EntityBase = Readonly<{\r\n uniqueId: number;\r\n reservedDataStore?: Record<PropertyKey, unknown>;\r\n}>;\r\n\r\nexport type EntityDisplayInfo = Partial<IDisposable> &\r\n Readonly<{\r\n /**\r\n * The name of the entity to display in the Scene Explorer tree.\r\n */\r\n name: string;\r\n\r\n /**\r\n * An observable that notifies when the display info (such as the name) changes.\r\n */\r\n onChange?: IReadonlyObservable<void>;\r\n }>;\r\n\r\nexport type SceneExplorerSection<T extends EntityBase> = Readonly<{\r\n /**\r\n * The display name of the section (e.g. \"Nodes\", \"Materials\", etc.).\r\n */\r\n displayName: string;\r\n\r\n /**\r\n * An optional order for the section, relative to other sections.\r\n * Defaults to 0.\r\n */\r\n order?: number;\r\n\r\n /**\r\n * A function that returns the root entities for this section.\r\n */\r\n getRootEntities: () => readonly T[];\r\n\r\n /**\r\n * An optional function that returns the children of a given entity.\r\n */\r\n getEntityChildren?: (entity: T) => readonly T[];\r\n\r\n /**\r\n * Gets the display information for a given entity.\r\n * This is ideally \"live\" display info (e.g. updates to the display info are taken into account and communicated via the observable).\r\n * This means in many cases the display info will need to be disposed when it is no longer needed so observable registrations can be removed.\r\n */\r\n getEntityDisplayInfo: (entity: T) => EntityDisplayInfo;\r\n\r\n /**\r\n * An optional icon component to render for the entity.\r\n */\r\n entityIcon?: ComponentType<{ entity: T }>;\r\n\r\n /**\r\n * A function that returns an array of observables for when entities are added to the scene.\r\n */\r\n getEntityAddedObservables: () => readonly IReadonlyObservable<T>[];\r\n\r\n /**\r\n * A function that returns an array of observables for when entities are removed from the scene.\r\n */\r\n getEntityRemovedObservables: () => readonly IReadonlyObservable<T>[];\r\n\r\n /**\r\n * A function that returns an array of observables for when entities are moved (e.g. re-parented) within the scene.\r\n */\r\n getEntityMovedObservables?: () => readonly IReadonlyObservable<T>[];\r\n}>;\r\n\r\ntype Command = Partial<IDisposable> &\r\n Readonly<{\r\n /**\r\n * The display name of the command (e.g. \"Delete\", \"Rename\", etc.).\r\n */\r\n displayName: string;\r\n\r\n /**\r\n * An icon component to render for the command.\r\n */\r\n icon: ComponentType;\r\n\r\n /**\r\n * An observable that notifies when the command state changes.\r\n */\r\n onChange?: IReadonlyObservable<unknown>;\r\n }>;\r\n\r\ntype ActionCommand = Command & {\r\n readonly type: \"action\";\r\n\r\n /**\r\n * The function that executes the command.\r\n */\r\n execute(): void;\r\n};\r\n\r\ntype ToggleCommand = Command & {\r\n readonly type: \"toggle\";\r\n\r\n /**\r\n * A boolean indicating if the command is enabled.\r\n */\r\n isEnabled: boolean;\r\n};\r\n\r\nexport type SceneExplorerCommand = ActionCommand | ToggleCommand;\r\n\r\nexport type SceneExplorerCommandProvider<T extends EntityBase> = Readonly<{\r\n /**\r\n * An optional order for the section, relative to other commands.\r\n * Defaults to 0.\r\n */\r\n order?: number;\r\n\r\n /**\r\n * A predicate function that determines if the command is applicable to the given entity.\r\n */\r\n predicate: (entity: unknown) => entity is T;\r\n\r\n /**\r\n * Gets the command information for the given entity.\r\n */\r\n getCommand: (entity: T) => SceneExplorerCommand;\r\n}>;\r\n\r\ntype SceneTreeItemData = { type: \"scene\"; scene: Scene };\r\n\r\ntype SectionTreeItemData = {\r\n type: \"section\";\r\n sectionName: string;\r\n children: EntityTreeItemData[];\r\n};\r\n\r\ntype EntityTreeItemData = {\r\n type: \"entity\";\r\n entity: EntityBase;\r\n depth: number;\r\n parent: SectionTreeItemData | EntityTreeItemData;\r\n children?: EntityTreeItemData[];\r\n icon?: ComponentType<{ entity: EntityBase }>;\r\n getDisplayInfo: () => EntityDisplayInfo;\r\n};\r\n\r\ntype TreeItemData = SceneTreeItemData | SectionTreeItemData | EntityTreeItemData;\r\n\r\nfunction ExpandOrCollapseAll(treeItem: SectionTreeItemData | EntityTreeItemData, open: boolean, openItems: Set<TreeItemValue>) {\r\n const addOrRemove = open ? openItems.add.bind(openItems) : openItems.delete.bind(openItems);\r\n TraverseGraph(\r\n [treeItem],\r\n (treeItem) => treeItem.children,\r\n (treeItem) => addOrRemove(treeItem.type === \"entity\" ? treeItem.entity.uniqueId : treeItem.sectionName)\r\n );\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nconst useStyles = makeStyles({\r\n rootDiv: {\r\n flex: 1,\r\n overflow: \"hidden\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n padding: `0 ${tokens.spacingHorizontalM}`,\r\n },\r\n searchBox: {\r\n padding: 0,\r\n },\r\n tree: {\r\n rowGap: 0,\r\n overflow: \"hidden\",\r\n flex: 1,\r\n },\r\n sceneTreeItemLayout: {\r\n padding: 0,\r\n },\r\n treeItemLayoutAside: {\r\n gap: 0,\r\n paddingLeft: tokens.spacingHorizontalS,\r\n paddingRight: tokens.spacingHorizontalS,\r\n },\r\n treeItemLayoutMain: {\r\n flex: \"1 1 0\",\r\n overflow: \"hidden\",\r\n textOverflow: \"ellipsis\",\r\n },\r\n treeItemLayoutCompact: {\r\n minHeight: CustomTokens.lineHeightSmall,\r\n maxHeight: CustomTokens.lineHeightSmall,\r\n },\r\n});\r\n\r\nconst ActionCommand: FunctionComponent<{ command: ActionCommand }> = (props) => {\r\n const { command } = props;\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n const [displayName, Icon, execute] = useObservableState(\r\n useCallback(() => [command.displayName, command.icon, command.execute] as const, [command]),\r\n command.onChange\r\n );\r\n\r\n return (\r\n <Tooltip content={displayName} relationship=\"label\" positioning={\"after\"}>\r\n <Button icon={<Icon />} appearance=\"subtle\" onClick={() => execute()} />\r\n </Tooltip>\r\n );\r\n};\r\n\r\nconst ToggleCommand: FunctionComponent<{ command: ToggleCommand }> = (props) => {\r\n const { command } = props;\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n const [displayName, Icon, isEnabled] = useObservableState(\r\n useCallback(() => [command.displayName, command.icon, command.isEnabled] as const, [command]),\r\n command.onChange\r\n );\r\n\r\n // TODO-iv2: Consolidate icon prop passing approach for inspector and shared components\r\n return <ToggleButton appearance=\"transparent\" title={displayName} checkedIcon={Icon as FluentIcon} value={isEnabled} onChange={(val: boolean) => (command.isEnabled = val)} />;\r\n};\r\n\r\n// This \"placeholder\" command has a blank icon and is a no-op. It is used for aside\r\n// alignment when some toggle commands are enabled. See more details on the commands\r\n// for setting the aside state.\r\nconst PlaceHolderCommand: ActionCommand = {\r\n type: \"action\",\r\n displayName: \"\",\r\n icon: createFluentIcon(\"Placeholder\", \"1em\", \"\"),\r\n execute: () => {\r\n /* No-op */\r\n },\r\n};\r\n\r\nfunction MakeCommandElement(command: SceneExplorerCommand, isPlaceholder: boolean): JSX.Element {\r\n if (isPlaceholder) {\r\n // Placeholders are not visible and not interacted with, so they are always ActionCommand\r\n // components, just to ensure the exact right amount of space is taken up.\r\n return <ActionCommand key={command.displayName} command={PlaceHolderCommand} />;\r\n }\r\n\r\n return command.type === \"action\" ? <ActionCommand key={command.displayName} command={command} /> : <ToggleCommand key={command.displayName} command={command} />;\r\n}\r\n\r\nconst SceneTreeItem: FunctionComponent<{\r\n scene: Scene;\r\n isSelected: boolean;\r\n select: () => void;\r\n isFiltering: boolean;\r\n}> = (props) => {\r\n const { isSelected, select } = props;\r\n\r\n const classes = useStyles();\r\n const [compactMode] = useCompactMode();\r\n const treeItemLayoutClass = mergeClasses(classes.sceneTreeItemLayout, compactMode ? classes.treeItemLayoutCompact : undefined);\r\n\r\n return (\r\n <FlatTreeItem key=\"scene\" value=\"scene\" itemType=\"leaf\" parentValue={undefined} aria-level={1} aria-setsize={1} aria-posinset={1} onClick={select}>\r\n <TreeItemLayout\r\n iconBefore={<GlobeRegular />}\r\n className={treeItemLayoutClass}\r\n style={isSelected ? { backgroundColor: tokens.colorNeutralBackground1Selected } : undefined}\r\n >\r\n <Body1Strong wrap={false} truncate>\r\n Scene\r\n </Body1Strong>\r\n </TreeItemLayout>\r\n </FlatTreeItem>\r\n );\r\n};\r\n\r\nconst SectionTreeItem: FunctionComponent<{\r\n scene: Scene;\r\n section: SectionTreeItemData;\r\n isFiltering: boolean;\r\n expandAll: () => void;\r\n collapseAll: () => void;\r\n}> = (props) => {\r\n const { section, isFiltering, expandAll, collapseAll } = props;\r\n\r\n const classes = useStyles();\r\n const [compactMode] = useCompactMode();\r\n\r\n return (\r\n <Menu openOnContext>\r\n <MenuTrigger disableButtonEnhancement>\r\n <FlatTreeItem\r\n key={section.sectionName}\r\n value={section.sectionName}\r\n // Disable manual expand/collapse when a filter is active.\r\n itemType={!isFiltering && section.children.length > 0 ? \"branch\" : \"leaf\"}\r\n parentValue={undefined}\r\n aria-level={1}\r\n aria-setsize={1}\r\n aria-posinset={1}\r\n >\r\n <TreeItemLayout className={compactMode ? classes.treeItemLayoutCompact : undefined}>\r\n <Body1Strong wrap={false} truncate>\r\n {section.sectionName.substring(0, 100)}\r\n </Body1Strong>\r\n </TreeItemLayout>\r\n </FlatTreeItem>\r\n </MenuTrigger>\r\n <MenuPopover hidden={!section.children.length}>\r\n <MenuList>\r\n <MenuItem onClick={expandAll}>\r\n <Body1>Expand All</Body1>\r\n </MenuItem>\r\n <MenuItem onClick={collapseAll}>\r\n <Body1>Collapse All</Body1>\r\n </MenuItem>\r\n </MenuList>\r\n </MenuPopover>\r\n </Menu>\r\n );\r\n};\r\n\r\nconst EntityTreeItem: FunctionComponent<{\r\n scene: Scene;\r\n entityItem: EntityTreeItemData;\r\n isSelected: boolean;\r\n select: () => void;\r\n isFiltering: boolean;\r\n commandProviders: readonly SceneExplorerCommandProvider<EntityBase>[];\r\n expandAll: () => void;\r\n collapseAll: () => void;\r\n}> = (props) => {\r\n const { entityItem, isSelected, select, isFiltering, commandProviders, expandAll, collapseAll } = props;\r\n\r\n const classes = useStyles();\r\n const [compactMode] = useCompactMode();\r\n\r\n const hasChildren = !!entityItem.children?.length;\r\n\r\n const displayInfo = useResource(\r\n useCallback(() => {\r\n const displayInfo = entityItem.getDisplayInfo();\r\n if (!displayInfo.dispose) {\r\n displayInfo.dispose = () => {\r\n /* No-op */\r\n };\r\n }\r\n return displayInfo as typeof displayInfo & IDisposable;\r\n }, [entityItem])\r\n );\r\n\r\n const name = useObservableState(() => displayInfo.name, displayInfo.onChange);\r\n\r\n // Get the commands that apply to this entity.\r\n const commands = useResource(\r\n useCallback(() => {\r\n const commands: readonly SceneExplorerCommand[] = [...commandProviders]\r\n .filter((provider) => provider.predicate(entityItem.entity))\r\n .map((provider) => {\r\n return {\r\n order: provider.order,\r\n command: provider.getCommand(entityItem.entity),\r\n };\r\n })\r\n .sort((a, b) => {\r\n // Action commands always come before toggle commands, because toggle commands will remain\r\n // visible when they are enabled, even when the pointer is not hovering the item, and we\r\n // don't want a bunch of blank space.\r\n if (a.command.type !== b.command.type) {\r\n return a.command.type === \"action\" ? -1 : 1;\r\n }\r\n\r\n // Within each group of command types, sort by order (default 0) ascending.\r\n return (a.order ?? 0) - (b.order ?? 0);\r\n })\r\n .map((entry) => entry.command);\r\n\r\n return Object.assign(commands, {\r\n dispose: () => commands.forEach((command) => command.dispose?.()),\r\n });\r\n }, [entityItem.entity, commandProviders])\r\n );\r\n\r\n // TreeItemLayout actions (totally unrelated to \"Action\" type commands) are only visible when the item is focused or has pointer hover.\r\n const actions = useMemo(() => {\r\n const defaultCommands: SceneExplorerCommand[] = [];\r\n if (hasChildren) {\r\n defaultCommands.push({\r\n type: \"action\",\r\n displayName: \"Expand All\",\r\n icon: () => <ArrowExpandAllRegular />,\r\n execute: () => expandAll(),\r\n });\r\n }\r\n\r\n return [...defaultCommands, ...commands].map((command) => MakeCommandElement(command, false));\r\n }, [commands, hasChildren, expandAll]);\r\n\r\n // TreeItemLayout asides are always visible.\r\n const [aside, setAside] = useState<readonly JSX.Element[]>([]);\r\n\r\n // This useEffect keeps the aside up-to-date. What should always show is any enabled toggle command, along with\r\n // placeholders to the right to keep the position of the actions consistent.\r\n useEffect(() => {\r\n const updateAside = () => {\r\n let isAnyCommandEnabled = false;\r\n const aside: JSX.Element[] = [];\r\n for (const command of commands) {\r\n isAnyCommandEnabled ||= command.type === \"toggle\" && command.isEnabled;\r\n if (isAnyCommandEnabled) {\r\n aside.push(MakeCommandElement(command, command.type !== \"toggle\" || !command.isEnabled));\r\n }\r\n }\r\n setAside(aside);\r\n };\r\n\r\n updateAside();\r\n\r\n const observers = commands\r\n .map((command) => command.onChange)\r\n .filter((onChange) => !!onChange)\r\n .map((onChange) => onChange.add(updateAside));\r\n\r\n return () => {\r\n for (const observer of observers) {\r\n observer.remove();\r\n }\r\n };\r\n }, [commands]);\r\n\r\n return (\r\n <Menu openOnContext>\r\n <MenuTrigger disableButtonEnhancement>\r\n <FlatTreeItem\r\n key={entityItem.entity.uniqueId}\r\n value={entityItem.entity.uniqueId}\r\n // Disable manual expand/collapse when a filter is active.\r\n itemType={!isFiltering && hasChildren ? \"branch\" : \"leaf\"}\r\n parentValue={entityItem.parent.type === \"section\" ? entityItem.parent.sectionName : entityItem.entity.uniqueId}\r\n aria-level={entityItem.depth}\r\n aria-setsize={1}\r\n aria-posinset={1}\r\n onClick={select}\r\n style={{ [treeItemLevelToken]: entityItem.depth }}\r\n >\r\n <TreeItemLayout\r\n iconBefore={entityItem.icon ? <entityItem.icon entity={entityItem.entity} /> : null}\r\n className={compactMode ? classes.treeItemLayoutCompact : undefined}\r\n style={isSelected ? { backgroundColor: tokens.colorNeutralBackground1Selected } : undefined}\r\n actions={actions}\r\n aside={{\r\n // Match the gap and padding of the actions.\r\n className: classes.treeItemLayoutAside,\r\n children: aside,\r\n }}\r\n main={{\r\n // Prevent the \"main\" content (the Body1 below) from growing too large and pushing the actions/aside out of view.\r\n className: classes.treeItemLayoutMain,\r\n }}\r\n >\r\n <Body1 wrap={false} truncate>\r\n {name}\r\n </Body1>\r\n </TreeItemLayout>\r\n </FlatTreeItem>\r\n </MenuTrigger>\r\n <MenuPopover hidden={!hasChildren}>\r\n <MenuList>\r\n <MenuItem onClick={expandAll}>\r\n <Body1>Expand All</Body1>\r\n </MenuItem>\r\n <MenuItem onClick={collapseAll}>\r\n <Body1>Collapse All</Body1>\r\n </MenuItem>\r\n </MenuList>\r\n </MenuPopover>\r\n </Menu>\r\n );\r\n};\r\n\r\nexport const SceneExplorer: FunctionComponent<{\r\n sections: readonly SceneExplorerSection<EntityBase>[];\r\n commandProviders: readonly SceneExplorerCommandProvider<EntityBase>[];\r\n scene: Scene;\r\n selectedEntity?: unknown;\r\n setSelectedEntity?: (entity: unknown) => void;\r\n}> = (props) => {\r\n const classes = useStyles();\r\n\r\n const { sections, commandProviders, scene, selectedEntity } = props;\r\n\r\n const [openItems, setOpenItems] = useState(new Set<TreeItemValue>());\r\n const [sceneVersion, setSceneVersion] = useState(0);\r\n const scrollViewRef = useRef<ScrollToInterface>(null);\r\n // We only want to scroll to the selected item if it was externally selected (outside of SceneExplorer).\r\n const previousSelectedEntity = useRef(selectedEntity);\r\n const setSelectedEntity = (entity: unknown) => {\r\n previousSelectedEntity.current = entity;\r\n props.setSelectedEntity?.(entity);\r\n };\r\n\r\n const [itemsFilter, setItemsFilter] = useState(\"\");\r\n\r\n useEffect(() => {\r\n setSceneVersion((version) => version + 1);\r\n }, [scene]);\r\n\r\n useEffect(() => {\r\n const onSceneItemAdded = () => {\r\n setSceneVersion((version) => version + 1);\r\n };\r\n\r\n const onSceneItemRemoved = (item: EntityBase) => {\r\n setSceneVersion((version) => version + 1);\r\n\r\n if (openItems.delete(item.uniqueId)) {\r\n setOpenItems(new Set(openItems));\r\n }\r\n\r\n if (item === selectedEntity) {\r\n setSelectedEntity?.(null);\r\n }\r\n };\r\n\r\n const addObservers = sections.flatMap((section) => section.getEntityAddedObservables().map((observable) => observable.add(onSceneItemAdded)));\r\n const removeObservers = sections.flatMap((section) => section.getEntityRemovedObservables().map((observable) => observable.add(onSceneItemRemoved)));\r\n const moveObservers = sections\r\n .map((section) => section.getEntityMovedObservables)\r\n .filter((getEntityMovedObservable) => !!getEntityMovedObservable)\r\n .flatMap((getEntityMovedObservable) => getEntityMovedObservable().map((observable) => observable.add(onSceneItemAdded)));\r\n\r\n return () => {\r\n for (const observer of addObservers) {\r\n observer.remove();\r\n }\r\n for (const observer of removeObservers) {\r\n observer.remove();\r\n }\r\n for (const observer of moveObservers) {\r\n observer.remove();\r\n }\r\n };\r\n }, [sections, openItems]);\r\n\r\n const [sceneTreeItem, sectionTreeItems, allTreeItems] = useMemo(() => {\r\n const sectionTreeItems: SectionTreeItemData[] = [];\r\n const allTreeItems = new Map<TreeItemValue, SectionTreeItemData | EntityTreeItemData>();\r\n\r\n const sceneTreeItem: SceneTreeItemData = {\r\n type: \"scene\",\r\n scene: scene,\r\n };\r\n\r\n for (const section of sections) {\r\n const rootEntities = section.getRootEntities();\r\n\r\n const sectionTreeItem = {\r\n type: \"section\",\r\n sectionName: section.displayName,\r\n children: [],\r\n } as const satisfies SectionTreeItemData;\r\n\r\n sectionTreeItems.push(sectionTreeItem);\r\n allTreeItems.set(sectionTreeItem.sectionName, sectionTreeItem);\r\n\r\n let depth = 2;\r\n const createEntityTreeItemData = (entity: EntityBase, parent: SectionTreeItemData | EntityTreeItemData) => {\r\n const treeItemData = {\r\n type: \"entity\",\r\n entity,\r\n depth,\r\n parent,\r\n icon: section.entityIcon,\r\n getDisplayInfo: () => section.getEntityDisplayInfo(entity),\r\n } as const satisfies EntityTreeItemData;\r\n\r\n if (!parent.children) {\r\n parent.children = [];\r\n }\r\n parent.children.push(treeItemData);\r\n\r\n allTreeItems.set(entity.uniqueId, treeItemData);\r\n return treeItemData;\r\n };\r\n\r\n const rootEntityTreeItems = rootEntities.map((entity) => createEntityTreeItemData(entity, sectionTreeItem));\r\n\r\n TraverseGraph(\r\n rootEntityTreeItems,\r\n // Get children\r\n (treeItem) => {\r\n if (section.getEntityChildren) {\r\n const children = section.getEntityChildren(treeItem.entity);\r\n return children.filter((child) => !child.reservedDataStore?.hidden).map((child) => createEntityTreeItemData(child, treeItem));\r\n }\r\n return null;\r\n },\r\n // Before traverse\r\n () => {\r\n depth++;\r\n },\r\n // After traverse\r\n () => {\r\n depth--;\r\n }\r\n );\r\n }\r\n\r\n return [sceneTreeItem, sectionTreeItems, allTreeItems] as const;\r\n }, [scene, sceneVersion, sections]);\r\n\r\n const visibleItems = useMemo(() => {\r\n // This will track the items in the order they were traversed (which is what the flat tree expects).\r\n const traversedItems: TreeItemData[] = [];\r\n // This will track the items that are visible based on either the open state or the filter.\r\n const visibleItems = new Set<TreeItemData>();\r\n const filter = itemsFilter.toLocaleLowerCase();\r\n\r\n traversedItems.push(sceneTreeItem);\r\n // The scene tree item is always visible.\r\n visibleItems.add(sceneTreeItem);\r\n\r\n for (const sectionTreeItem of sectionTreeItems) {\r\n const children = sectionTreeItem.children;\r\n traversedItems.push(sectionTreeItem);\r\n if (!children.length) {\r\n continue;\r\n }\r\n\r\n // Section tree items are always visible when not filtering.\r\n if (!filter) {\r\n visibleItems.add(sectionTreeItem);\r\n }\r\n\r\n // When an item filter is present, always traverse the full scene graph (e.g. ignore the open item state).\r\n if (filter || openItems.has(sectionTreeItem.sectionName)) {\r\n TraverseGraph(\r\n children,\r\n // Get children\r\n (treeItem) => {\r\n if (filter || openItems.has(treeItem.entity.uniqueId)) {\r\n return treeItem.children ?? null;\r\n }\r\n return null;\r\n },\r\n // Before traverse\r\n (treeItem) => {\r\n traversedItems.push(treeItem);\r\n if (treeItem.entity.reservedDataStore?.hidden) {\r\n return; // Don't display the treeItem or its children if reservedDataStore.hidden is true\r\n }\r\n if (!filter) {\r\n // If there is no filter and we made it this far, then the item's parent is in an open state and this item is visible.\r\n visibleItems.add(treeItem);\r\n } else {\r\n // Otherwise we have an item filter and we need to check for a match.\r\n const displayInfo = treeItem.getDisplayInfo();\r\n if (displayInfo.name.toLocaleLowerCase().includes(filter)) {\r\n // The item is a match, add it to the set.\r\n visibleItems.add(treeItem);\r\n\r\n // Also add all ancestors as a match since we want to be able to see the tree structure up to the matched item.\r\n let currentItem: Nullable<SectionTreeItemData | EntityTreeItemData> = treeItem.parent;\r\n while (currentItem) {\r\n // If this item is already in the matched set, then all its ancestors must also already be in the set.\r\n if (visibleItems.has(currentItem)) {\r\n break;\r\n }\r\n\r\n visibleItems.add(currentItem);\r\n\r\n // If the parent is the section, then there are no more parents to traverse.\r\n if (currentItem.type === \"section\") {\r\n currentItem = null;\r\n } else {\r\n currentItem = currentItem.parent;\r\n }\r\n }\r\n }\r\n displayInfo.dispose?.();\r\n }\r\n }\r\n );\r\n }\r\n }\r\n\r\n // Filter the traversal ordered items by those that should actually be visible.\r\n return traversedItems.filter((item) => visibleItems.has(item));\r\n }, [sceneTreeItem, sectionTreeItems, allTreeItems, openItems, itemsFilter]);\r\n\r\n const getParentStack = useCallback(\r\n (entity: EntityBase) => {\r\n const parentStack: TreeItemValue[] = [];\r\n for (let treeItem = allTreeItems.get(entity.uniqueId); treeItem; treeItem = treeItem?.type === \"entity\" ? treeItem.parent : undefined) {\r\n parentStack.push(treeItem.type === \"entity\" ? treeItem.entity.uniqueId : treeItem.sectionName);\r\n }\r\n return parentStack;\r\n },\r\n [allTreeItems]\r\n );\r\n\r\n const [isScrollToPending, setIsScrollToPending] = useState(false);\r\n\r\n useEffect(() => {\r\n if (selectedEntity && selectedEntity !== previousSelectedEntity.current) {\r\n const entity = selectedEntity as EntityBase;\r\n if (entity.uniqueId != undefined) {\r\n const parentStack = getParentStack(entity);\r\n if (parentStack.length > 0) {\r\n const newOpenItems = new Set<TreeItemValue>(openItems);\r\n for (const parent of parentStack) {\r\n newOpenItems.add(parent);\r\n }\r\n setOpenItems(newOpenItems);\r\n setIsScrollToPending(true);\r\n }\r\n }\r\n }\r\n\r\n previousSelectedEntity.current = selectedEntity;\r\n }, [selectedEntity]);\r\n\r\n // We need to wait for a render to complete before we can scroll to the item, hence the isScrollToPending.\r\n useEffect(() => {\r\n if (isScrollToPending) {\r\n const selectedItemIndex = visibleItems.findIndex((item) => item.type === \"entity\" && item.entity === selectedEntity);\r\n if (selectedItemIndex >= 0 && scrollViewRef.current) {\r\n scrollViewRef.current.scrollTo(selectedItemIndex, \"smooth\");\r\n setIsScrollToPending(false);\r\n }\r\n }\r\n }, [isScrollToPending, selectedEntity, visibleItems]);\r\n\r\n const onOpenChange = useCallback(\r\n (event: TreeOpenChangeEvent, data: TreeOpenChangeData) => {\r\n // This makes it so we only consider a click on the chevron to be expanding/collapsing an item, not clicking anywhere on the item.\r\n if (data.type !== \"Click\" && data.type !== \"Enter\") {\r\n // Shift or Ctrl mean expand/collapse all descendants.\r\n if (event.shiftKey || event.ctrlKey) {\r\n const treeItem = allTreeItems.get(data.value);\r\n if (treeItem) {\r\n ExpandOrCollapseAll(treeItem, data.open, data.openItems);\r\n }\r\n }\r\n setOpenItems(data.openItems);\r\n }\r\n },\r\n [setOpenItems, allTreeItems]\r\n );\r\n\r\n const expandAll = (treeItem: SectionTreeItemData | EntityTreeItemData) => {\r\n ExpandOrCollapseAll(treeItem, true, openItems);\r\n setOpenItems(new Set(openItems));\r\n };\r\n\r\n const collapseAll = (treeItem: SectionTreeItemData | EntityTreeItemData) => {\r\n ExpandOrCollapseAll(treeItem, false, openItems);\r\n setOpenItems(new Set(openItems));\r\n };\r\n\r\n return (\r\n <div className={classes.rootDiv}>\r\n <SearchBox\r\n className={classes.searchBox}\r\n appearance=\"underline\"\r\n contentBefore={<FilterRegular />}\r\n placeholder=\"Filter\"\r\n value={itemsFilter}\r\n onChange={(_, data) => setItemsFilter(data.value)}\r\n />\r\n <FlatTree className={classes.tree} openItems={openItems} onOpenChange={onOpenChange} aria-label=\"Scene Explorer Tree\">\r\n <VirtualizerScrollView imperativeRef={scrollViewRef} numItems={visibleItems.length} itemSize={32} container={{ style: { overflowX: \"hidden\" } }}>\r\n {(index: number) => {\r\n const item = visibleItems[index];\r\n\r\n if (item.type === \"scene\") {\r\n return (\r\n <SceneTreeItem\r\n key=\"scene\"\r\n scene={scene}\r\n isSelected={selectedEntity === scene}\r\n select={() => setSelectedEntity?.(scene)}\r\n isFiltering={!!itemsFilter}\r\n />\r\n );\r\n } else if (item.type === \"section\") {\r\n return (\r\n <SectionTreeItem\r\n key={item.sectionName}\r\n scene={scene}\r\n section={item}\r\n isFiltering={!!itemsFilter}\r\n expandAll={() => expandAll(item)}\r\n collapseAll={() => collapseAll(item)}\r\n />\r\n );\r\n } else {\r\n return (\r\n <EntityTreeItem\r\n key={item.entity.uniqueId}\r\n scene={scene}\r\n entityItem={item}\r\n isSelected={selectedEntity === item.entity}\r\n select={() => setSelectedEntity?.(item.entity)}\r\n isFiltering={!!itemsFilter}\r\n commandProviders={commandProviders}\r\n expandAll={() => expandAll(item)}\r\n collapseAll={() => collapseAll(item)}\r\n />\r\n );\r\n }\r\n }}\r\n </VirtualizerScrollView>\r\n </FlatTree>\r\n </div>\r\n );\r\n};\r\n","import type { IReadonlyObservable, Nullable, Scene } from \"core/index\";\r\n\r\nimport type { IService } from \"../modularity/serviceDefinition\";\r\n\r\nexport const SceneContextIdentity = Symbol(\"SceneScontext\");\r\n\r\n/**\r\n * SceneContext provides the current scene, but could have different implementations depending on the context (e.g. inspector, sandbox, etc.)\r\n */\r\nexport interface ISceneContext extends IService<typeof SceneContextIdentity> {\r\n /**\r\n * Gets the current scene.\r\n */\r\n readonly currentScene: Nullable<Scene>;\r\n\r\n /**\r\n * Observable that fires whenever the current scene changes.\r\n */\r\n readonly currentSceneObservable: IReadonlyObservable<Nullable<Scene>>;\r\n}\r\n","import type { IDisposable } from \"core/index\";\r\n\r\nimport type { EntityBase, SceneExplorerCommandProvider, SceneExplorerSection } from \"../../../components/scene/sceneExplorer\";\r\nimport type { IService, ServiceDefinition } from \"../../../modularity/serviceDefinition\";\r\nimport type { ISceneContext } from \"../../sceneContext\";\r\nimport type { ISelectionService } from \"../../selectionService\";\r\nimport type { IShellService } from \"../../shellService\";\r\n\r\nimport { CubeTreeRegular } from \"@fluentui/react-icons\";\r\n\r\nimport { SceneExplorer } from \"../../../components/scene/sceneExplorer\";\r\nimport { useObservableState, useOrderedObservableCollection } from \"../../../hooks/observableHooks\";\r\nimport { ObservableCollection } from \"../../../misc/observableCollection\";\r\nimport { SceneContextIdentity } from \"../../sceneContext\";\r\nimport { SelectionServiceIdentity } from \"../../selectionService\";\r\nimport { ShellServiceIdentity } from \"../../shellService\";\r\n\r\nexport const SceneExplorerServiceIdentity = Symbol(\"SceneExplorer\");\r\n\r\n/**\r\n * Allows new sections or commands to be added to the scene explorer pane.\r\n */\r\nexport interface ISceneExplorerService extends IService<typeof SceneExplorerServiceIdentity> {\r\n /**\r\n * Adds a new section (e.g. \"Nodes\", \"Materials\", etc.) (this includes all descendants within the scene graph).\r\n * @param section A description of the section to add.\r\n */\r\n addSection<T extends EntityBase>(section: SceneExplorerSection<T>): IDisposable;\r\n\r\n /**\r\n * Adds a new command (e.g. \"Delete\", \"Rename\", etc.) that can be executed on entities in the scene explorer.\r\n * @param command A description of the command to add.\r\n */\r\n addCommand<T extends EntityBase>(command: SceneExplorerCommandProvider<T>): IDisposable;\r\n}\r\n\r\n/**\r\n * Provides a scene explorer pane that enables browsing the scene graph and executing commands on entities.\r\n */\r\nexport const SceneExplorerServiceDefinition: ServiceDefinition<[ISceneExplorerService], [ISceneContext, IShellService, ISelectionService]> = {\r\n friendlyName: \"Scene Explorer\",\r\n produces: [SceneExplorerServiceIdentity],\r\n consumes: [SceneContextIdentity, ShellServiceIdentity, SelectionServiceIdentity],\r\n factory: (sceneContext, shellService, selectionService) => {\r\n const sectionsCollection = new ObservableCollection<SceneExplorerSection<EntityBase>>();\r\n const commandsCollection = new ObservableCollection<SceneExplorerCommandProvider<EntityBase>>();\r\n\r\n const registration = shellService.addSidePane({\r\n key: \"Scene Explorer\",\r\n title: \"Scene Explorer\",\r\n icon: CubeTreeRegular,\r\n horizontalLocation: \"left\",\r\n verticalLocation: \"top\",\r\n suppressTeachingMoment: true,\r\n content: () => {\r\n const sections = useOrderedObservableCollection(sectionsCollection);\r\n const commands = useOrderedObservableCollection(commandsCollection);\r\n const scene = useObservableState(() => sceneContext.currentScene, sceneContext.currentSceneObservable);\r\n const entity = useObservableState(() => selectionService.selectedEntity, selectionService.onSelectedEntityChanged);\r\n\r\n return (\r\n <>\r\n {scene && (\r\n <SceneExplorer\r\n sections={sections}\r\n commandProviders={commands}\r\n scene={scene}\r\n selectedEntity={entity}\r\n setSelectedEntity={(entity) => (selectionService.selectedEntity = entity)}\r\n />\r\n )}\r\n </>\r\n );\r\n },\r\n });\r\n\r\n return {\r\n addSection: (section) => sectionsCollection.add(section as SceneExplorerSection<EntityBase>),\r\n addCommand: (command) => commandsCollection.add(command as SceneExplorerCommandProvider<EntityBase>),\r\n dispose: () => registration.dispose(),\r\n };\r\n },\r\n};\r\n","import type { SwitchOnChangeData } from \"@fluentui/react-components\";\r\nimport type { ChangeEvent, FunctionComponent } from \"react\";\r\nimport type { PrimitiveProps } from \"./primitive\";\r\n\r\nimport { makeStyles, Switch as FluentSwitch, mergeClasses } from \"@fluentui/react-components\";\r\nimport { useContext, useEffect, useState } from \"react\";\r\nimport { ToolContext } from \"../hoc/fluentToolWrapper\";\r\n\r\nconst useSwitchStyles = makeStyles({\r\n switch: {\r\n marginLeft: \"auto\",\r\n },\r\n switchSmall: {\r\n transform: `scale(.85)`, // workaround since we cannot resize fluent switch\r\n transformOrigin: \"right\",\r\n },\r\n indicator: {\r\n margin: 0, // Remove the default right margin so the switch aligns well on the right side inside panels like the properties pane.\r\n },\r\n});\r\n\r\nexport type SwitchProps = PrimitiveProps<boolean>;\r\n\r\n/**\r\n * This is a primitive fluent boolean switch component whose only knowledge is the shared styling across all tools\r\n * @param props\r\n * @returns Switch component\r\n */\r\nexport const Switch: FunctionComponent<SwitchProps> = (props) => {\r\n Switch.displayName = \"Switch\";\r\n const { size } = useContext(ToolContext);\r\n const classes = useSwitchStyles();\r\n const [checked, setChecked] = useState(() => props.value ?? false);\r\n\r\n useEffect(() => {\r\n if (props.value != undefined) {\r\n setChecked(props.value); // Update local state when props.checked changes\r\n }\r\n }, [props.value]);\r\n\r\n const onChange = (event: ChangeEvent<HTMLInputElement>, _: SwitchOnChangeData) => {\r\n props.onChange && props.onChange(event.target.checked);\r\n setChecked(event.target.checked);\r\n };\r\n\r\n return (\r\n <FluentSwitch\r\n className={mergeClasses(classes.switch, size === \"small\" && classes.switchSmall)}\r\n indicator={{ className: classes.indicator }}\r\n checked={checked}\r\n disabled={props.disabled}\r\n onChange={onChange}\r\n />\r\n );\r\n};\r\n","import { PropertyLine } from \"./propertyLine\";\r\nimport type { PropertyLineProps } from \"./propertyLine\";\r\nimport type { FunctionComponent } from \"react\";\r\nimport { Switch } from \"../../primitives/switch\";\r\nimport type { SwitchProps } from \"../../primitives/switch\";\r\n\r\n/**\r\n * Wraps a switch in a property line\r\n * @param props - The properties for the switch and property line\r\n * @returns A React element representing the property line with a switch\r\n */\r\nexport const SwitchPropertyLine: FunctionComponent<PropertyLineProps<boolean> & SwitchProps> = (props) => {\r\n SwitchPropertyLine.displayName = \"SwitchPropertyLine\";\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n const { label, ...switchProps } = props;\r\n // Ensure the label gets passed to the PropertyLine component and not to the underlying switch\r\n return (\r\n <PropertyLine {...props}>\r\n <Switch {...switchProps} />\r\n </PropertyLine>\r\n );\r\n};\r\n","import type { AbstractMesh, Mesh, Scene } from \"core/index\";\r\n\r\nimport { FontAsset } from \"addons/msdfText/fontAsset\";\r\nimport { TextRenderer } from \"addons/msdfText/textRenderer\";\r\nimport { PhysicsViewer } from \"core/Debug/physicsViewer\";\r\nimport { Texture } from \"core/Materials/Textures/texture\";\r\nimport { MaterialFlags } from \"core/Materials/materialFlags\";\r\nimport { StandardMaterial } from \"core/Materials/standardMaterial\";\r\nimport { Color3 } from \"core/Maths/math.color\";\r\nimport { Matrix } from \"core/Maths/math.vector\";\r\nimport { CreateGround } from \"core/Meshes/Builders/groundBuilder\";\r\nimport { Tools } from \"core/Misc/tools\";\r\nimport { UtilityLayerRenderer } from \"core/Rendering/utilityLayerRenderer\";\r\nimport { GridMaterial } from \"materials/grid/gridMaterial\";\r\nimport { SwitchPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/switchPropertyLine\";\r\nimport { AccordionSection } from \"shared-ui-components/fluent/primitives/accordion\";\r\nimport { ExtensibleAccordion } from \"../extensibleAccordion\";\r\nimport { BoundProperty } from \"../properties/boundProperty\";\r\n\r\nexport const HelpersDebugSectionIdentity = Symbol(\"Helpers\");\r\nexport const TextureChannelsDebugSectionIdentity = Symbol(\"Texture Channels\");\r\nexport const FeaturesDebugSectionIdentity = Symbol(\"Features\");\r\n\r\nconst SwitchGrid = function (renderScene: Scene) {\r\n const scene = UtilityLayerRenderer.DefaultKeepDepthUtilityLayer.utilityLayerScene;\r\n\r\n if (!renderScene.reservedDataStore.gridMesh) {\r\n const extend = renderScene.getWorldExtends();\r\n const width = (extend.max.x - extend.min.x) * 5.0;\r\n const depth = (extend.max.z - extend.min.z) * 5.0;\r\n\r\n renderScene.reservedDataStore.gridMesh = CreateGround(\"grid\", { width: 1.0, height: 1.0, subdivisions: 1 }, scene);\r\n const gridMesh = renderScene.reservedDataStore.gridMesh as AbstractMesh;\r\n if (!gridMesh.reservedDataStore) {\r\n gridMesh.reservedDataStore = {};\r\n }\r\n gridMesh.scaling.x = Math.max(width, depth);\r\n gridMesh.scaling.z = gridMesh.scaling.x;\r\n gridMesh.reservedDataStore.isInspectorGrid = true;\r\n gridMesh.isPickable = false;\r\n\r\n const groundMaterial = new GridMaterial(\"GridMaterial\", scene);\r\n groundMaterial.majorUnitFrequency = 10;\r\n groundMaterial.minorUnitVisibility = 0.3;\r\n groundMaterial.gridRatio = 0.01;\r\n groundMaterial.backFaceCulling = false;\r\n groundMaterial.mainColor = new Color3(1, 1, 1);\r\n groundMaterial.lineColor = new Color3(1.0, 1.0, 1.0);\r\n groundMaterial.opacity = 0.8;\r\n groundMaterial.zOffset = 1.0;\r\n const textureUrl = Tools.GetAssetUrl(\"https://assets.babylonjs.com/core/environments/backgroundGround.png\");\r\n groundMaterial.opacityTexture = new Texture(textureUrl, scene);\r\n\r\n gridMesh.material = groundMaterial;\r\n return;\r\n }\r\n const gridMesh = renderScene.reservedDataStore.gridMesh as AbstractMesh;\r\n gridMesh.dispose(true, true);\r\n renderScene.reservedDataStore.gridMesh = null;\r\n};\r\n\r\nconst SwitchPhysicsViewers = function (scene: Scene) {\r\n if (!scene.reservedDataStore.physicsViewer) {\r\n const physicsViewer = new PhysicsViewer(scene);\r\n scene.reservedDataStore.physicsViewer = physicsViewer;\r\n\r\n for (const mesh of scene.meshes) {\r\n if (mesh.physicsImpostor) {\r\n const debugMesh = physicsViewer.showImpostor(mesh.physicsImpostor, mesh as Mesh);\r\n\r\n if (debugMesh) {\r\n debugMesh.reservedDataStore = { hidden: true };\r\n debugMesh.material!.reservedDataStore = { hidden: true };\r\n }\r\n } else if (mesh.physicsBody) {\r\n const debugMesh = physicsViewer.showBody(mesh.physicsBody);\r\n\r\n if (debugMesh) {\r\n debugMesh.reservedDataStore = { hidden: true };\r\n debugMesh.material!.reservedDataStore = { hidden: true };\r\n }\r\n }\r\n }\r\n\r\n for (const transformNode of scene.transformNodes) {\r\n if (transformNode.physicsBody) {\r\n const debugMesh = physicsViewer.showBody(transformNode.physicsBody);\r\n\r\n if (debugMesh) {\r\n debugMesh.reservedDataStore = { hidden: true };\r\n debugMesh.material!.reservedDataStore = { hidden: true };\r\n }\r\n }\r\n }\r\n } else {\r\n scene.reservedDataStore.physicsViewer.dispose();\r\n scene.reservedDataStore.physicsViewer = null;\r\n }\r\n};\r\n\r\nconst SwitchNameViewerAsync = async function (scene: Scene) {\r\n if (!scene.reservedDataStore.textRenderersHook) {\r\n scene.reservedDataStore.textRenderers = [];\r\n if (!scene.reservedDataStore.fontAsset) {\r\n const sdfFontDefinition = await (await fetch(\"https://assets.babylonjs.com/fonts/roboto-regular.json\")).text();\r\n // eslint-disable-next-line require-atomic-updates\r\n scene.reservedDataStore.fontAsset = new FontAsset(sdfFontDefinition, \"https://assets.babylonjs.com/fonts/roboto-regular.png\");\r\n }\r\n\r\n const textRendererPromises = scene.meshes.map(async (mesh) => {\r\n const textRenderer = await TextRenderer.CreateTextRendererAsync(scene.reservedDataStore.fontAsset!, scene.getEngine());\r\n\r\n textRenderer.addParagraph(mesh.name);\r\n textRenderer.isBillboard = true;\r\n textRenderer.isBillboardScreenProjected = true;\r\n textRenderer.parent = mesh;\r\n textRenderer.ignoreDepthBuffer = true;\r\n textRenderer.transformMatrix = Matrix.Scaling(0.02, 0.02, 0.02);\r\n\r\n scene.reservedDataStore.textRenderers.push(textRenderer);\r\n });\r\n\r\n await Promise.all(textRendererPromises);\r\n\r\n scene.reservedDataStore.textRenderersHook = scene.onAfterRenderObservable.add(() => {\r\n for (const textRenderer of scene.reservedDataStore.textRenderers) {\r\n if (!textRenderer.parent.isVisible || !textRenderer.parent.isEnabled()) {\r\n continue;\r\n }\r\n textRenderer.render(scene.getViewMatrix(), scene.getProjectionMatrix());\r\n }\r\n });\r\n } else {\r\n scene.onAfterRenderObservable.remove(scene.reservedDataStore.textRenderersHook);\r\n for (const textRenderer of scene.reservedDataStore.textRenderers) {\r\n textRenderer.dispose();\r\n }\r\n scene.reservedDataStore.textRenderersHook = null;\r\n scene.reservedDataStore.textRenderers = null;\r\n }\r\n};\r\n\r\nexport const DebugPane: typeof ExtensibleAccordion<Scene> = (props) => {\r\n const scene = props.context;\r\n\r\n if (!scene.reservedDataStore) {\r\n scene.reservedDataStore = {};\r\n }\r\n\r\n // Making sure we clean up when the scene is disposed\r\n scene.onDisposeObservable.addOnce(() => {\r\n if (scene.reservedDataStore.physicsViewer) {\r\n SwitchPhysicsViewers(scene);\r\n }\r\n\r\n if (scene.reservedDataStore.textRenderersHook) {\r\n void SwitchNameViewerAsync(scene);\r\n scene.reservedDataStore.fontAsset?.dispose();\r\n }\r\n\r\n if (scene.reservedDataStore.gridMesh) {\r\n SwitchGrid(scene);\r\n }\r\n });\r\n\r\n return (\r\n <ExtensibleAccordion {...props}>\r\n <AccordionSection title=\"Helpers\">\r\n <SwitchPropertyLine label=\"Grid\" description=\"Display a ground grid.\" value={!!scene.reservedDataStore.gridMesh} onChange={() => SwitchGrid(scene)} />\r\n <SwitchPropertyLine\r\n label=\"Physics\"\r\n description=\"Display physic debug info.\"\r\n value={!!scene.reservedDataStore.physicsViewer}\r\n onChange={() => SwitchPhysicsViewers(scene)}\r\n />\r\n <SwitchPropertyLine\r\n label=\"Names\"\r\n description=\"Display mesh names.\"\r\n value={!!scene.reservedDataStore.textRenderersHook}\r\n onChange={() => void SwitchNameViewerAsync(scene)}\r\n />\r\n </AccordionSection>\r\n <AccordionSection title=\"Texture Channels\">\r\n <BoundProperty component={SwitchPropertyLine} key=\"Diffuse\" label=\"Diffuse\" target={StandardMaterial} propertyKey=\"DiffuseTextureEnabled\" />\r\n <BoundProperty component={SwitchPropertyLine} key=\"Ambient\" label=\"Ambient\" target={StandardMaterial} propertyKey=\"AmbientTextureEnabled\" />\r\n <BoundProperty component={SwitchPropertyLine} key=\"Specular\" label=\"Specular\" target={StandardMaterial} propertyKey=\"SpecularTextureEnabled\" />\r\n <BoundProperty component={SwitchPropertyLine} key=\"Emissive\" label=\"Emissive\" target={StandardMaterial} propertyKey=\"EmissiveTextureEnabled\" />\r\n <BoundProperty component={SwitchPropertyLine} key=\"Bump\" label=\"Bump\" target={StandardMaterial} propertyKey=\"BumpTextureEnabled\" />\r\n <BoundProperty component={SwitchPropertyLine} key=\"Opacity\" label=\"Opacity\" target={StandardMaterial} propertyKey=\"OpacityTextureEnabled\" />\r\n <BoundProperty component={SwitchPropertyLine} key=\"Reflection\" label=\"Reflection\" target={StandardMaterial} propertyKey=\"ReflectionTextureEnabled\" />\r\n <BoundProperty component={SwitchPropertyLine} key=\"ColorGrading\" label=\"Color Grading\" target={StandardMaterial} propertyKey=\"ColorGradingTextureEnabled\" />\r\n <BoundProperty component={SwitchPropertyLine} key=\"Lightmap\" label=\"Lightmap\" target={StandardMaterial} propertyKey=\"LightmapTextureEnabled\" />\r\n <BoundProperty component={SwitchPropertyLine} key=\"Fresnel\" label=\"Fresnel\" target={StandardMaterial} propertyKey=\"FresnelEnabled\" />\r\n <BoundProperty component={SwitchPropertyLine} key=\"Detail\" label=\"Detail\" target={MaterialFlags} propertyKey=\"DetailTextureEnabled\" />\r\n <BoundProperty component={SwitchPropertyLine} key=\"Decal\" label=\"Decal\" target={MaterialFlags} propertyKey=\"DecalMapEnabled\" />\r\n </AccordionSection>\r\n <AccordionSection title=\"Features\">\r\n <BoundProperty component={SwitchPropertyLine} key=\"Animations\" label=\"Animations\" target={scene} propertyKey=\"animationsEnabled\" />\r\n <BoundProperty component={SwitchPropertyLine} key=\"Physics\" label=\"Physics\" target={scene} propertyKey=\"physicsEnabled\" />\r\n <BoundProperty component={SwitchPropertyLine} key=\"Collisions\" label=\"Collisions\" target={scene} propertyKey=\"collisionsEnabled\" />\r\n <BoundProperty component={SwitchPropertyLine} key=\"Fog\" label=\"Fog\" target={scene} propertyKey=\"fogEnabled\" />\r\n <BoundProperty component={SwitchPropertyLine} key=\"Lens flares\" label=\"Lens Flares\" target={scene} propertyKey=\"lensFlaresEnabled\" />\r\n <BoundProperty component={SwitchPropertyLine} key=\"Lights\" label=\"Lights\" target={scene} propertyKey=\"lightsEnabled\" />\r\n <BoundProperty component={SwitchPropertyLine} key=\"Particles\" label=\"Particles\" target={scene} propertyKey=\"particlesEnabled\" />\r\n <BoundProperty component={SwitchPropertyLine} key=\"Post-processes\" label=\"Post-processes\" target={scene} propertyKey=\"postProcessesEnabled\" />\r\n <BoundProperty component={SwitchPropertyLine} key=\"Probes\" label=\"Probes\" target={scene} propertyKey=\"probesEnabled\" />\r\n <BoundProperty component={SwitchPropertyLine} key=\"Textures\" label=\"Textures\" target={scene} propertyKey=\"texturesEnabled\" />\r\n <BoundProperty component={SwitchPropertyLine} key=\"Procedural textures\" label=\"Procedural Textures\" target={scene} propertyKey=\"proceduralTexturesEnabled\" />\r\n <BoundProperty component={SwitchPropertyLine} key=\"Render targets\" label=\"Render Targets\" target={scene} propertyKey=\"renderTargetsEnabled\" />\r\n <BoundProperty component={SwitchPropertyLine} key=\"Shadows\" label=\"Shadows\" target={scene} propertyKey=\"shadowsEnabled\" />\r\n <BoundProperty component={SwitchPropertyLine} key=\"Skeletons\" label=\"Skeletons\" target={scene} propertyKey=\"skeletonsEnabled\" />\r\n <BoundProperty component={SwitchPropertyLine} key=\"Sprites\" label=\"Sprites\" target={scene} propertyKey=\"spritesEnabled\" />\r\n </AccordionSection>\r\n </ExtensibleAccordion>\r\n );\r\n};\r\n","import type { IDisposable, Scene } from \"core/index\";\r\n\r\nimport type { DynamicAccordionSection, DynamicAccordionSectionContent } from \"../../components/extensibleAccordion\";\r\nimport type { IService, ServiceDefinition } from \"../../modularity/serviceDefinition\";\r\nimport type { ISceneContext } from \"../sceneContext\";\r\nimport type { IShellService } from \"../shellService\";\r\n\r\nimport { BugRegular } from \"@fluentui/react-icons\";\r\n\r\nimport { DebugPane } from \"../../components/debug/debugPane\";\r\nimport { useObservableCollection, useObservableState, useOrderedObservableCollection } from \"../../hooks/observableHooks\";\r\nimport { ObservableCollection } from \"../../misc/observableCollection\";\r\nimport { SceneContextIdentity } from \"../sceneContext\";\r\nimport { ShellServiceIdentity } from \"../shellService\";\r\n\r\nexport const DebugServiceIdentity = Symbol(\"DebugService\");\r\n\r\n/**\r\n * Allows new sections or content to be added to the debug pane.\r\n */\r\nexport interface IDebugService extends IService<typeof DebugServiceIdentity> {\r\n /**\r\n * Adds a new section.\r\n * @param section A description of the section to add.\r\n */\r\n addSection(section: DynamicAccordionSection): IDisposable;\r\n\r\n /**\r\n * Adds content to one or more sections.\r\n * @param content A description of the content to add.\r\n */\r\n addSectionContent(content: DynamicAccordionSectionContent<Scene>): IDisposable;\r\n}\r\n\r\nexport const DebugServiceDefinition: ServiceDefinition<[IDebugService], [IShellService, ISceneContext]> = {\r\n friendlyName: \"Debug\",\r\n produces: [DebugServiceIdentity],\r\n consumes: [ShellServiceIdentity, SceneContextIdentity],\r\n factory: (shellService, sceneContext) => {\r\n const sectionsCollection = new ObservableCollection<DynamicAccordionSection>();\r\n const sectionContentCollection = new ObservableCollection<DynamicAccordionSectionContent<Scene>>();\r\n\r\n const registration = shellService.addSidePane({\r\n key: \"Debug\",\r\n title: \"Debug\",\r\n icon: BugRegular,\r\n horizontalLocation: \"right\",\r\n verticalLocation: \"top\",\r\n order: 200,\r\n suppressTeachingMoment: true,\r\n content: () => {\r\n const sections = useOrderedObservableCollection(sectionsCollection);\r\n const sectionContent = useObservableCollection(sectionContentCollection);\r\n const scene = useObservableState(() => sceneContext.currentScene, sceneContext.currentSceneObservable);\r\n return <>{scene && <DebugPane sections={sections} sectionContent={sectionContent} context={scene} />}</>;\r\n },\r\n });\r\n\r\n return {\r\n addSection: (section) => sectionsCollection.add(section),\r\n addSectionContent: (content) => sectionContentCollection.add(content),\r\n dispose: () => registration.dispose(),\r\n };\r\n },\r\n};\r\n","import { LineContainer } from \"./propertyLines/propertyLine\";\r\nimport type { FunctionComponent } from \"react\";\r\nimport { Button } from \"../primitives/button\";\r\nimport type { ButtonProps } from \"../primitives/button\";\r\n\r\ntype ButtonLineProps = Omit<ButtonProps, \"label\"> & { label: string }; // Require a label when button is the entire line (by default, label is optional on a button)\r\n\r\n/**\r\n * Wraps a button with a label in a line container\r\n * @param props Button props plus a label\r\n * @returns A button inside a line\r\n */\r\nexport const ButtonLine: FunctionComponent<ButtonLineProps> = (props) => {\r\n ButtonLine.displayName = \"ButtonLine\";\r\n\r\n return (\r\n <LineContainer>\r\n <Button {...props} />\r\n </LineContainer>\r\n );\r\n};\r\n","import type { IDisposable, Scene } from \"core/index\";\r\nimport type { DynamicAccordionSection, DynamicAccordionSectionContent } from \"../../components/extensibleAccordion\";\r\nimport type { IService, ServiceDefinition } from \"../../modularity/serviceDefinition\";\r\nimport type { ISceneContext } from \"../sceneContext\";\r\nimport type { ISettingsContext } from \"../settingsContext\";\r\nimport type { IShellService } from \"../shellService\";\r\n\r\nimport { SettingsRegular } from \"@fluentui/react-icons\";\r\n\r\nimport { DataStorage } from \"core/Misc/dataStorage\";\r\nimport { Observable } from \"core/Misc/observable\";\r\nimport { ButtonLine } from \"shared-ui-components/fluent/hoc/buttonLine\";\r\nimport { SwitchPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/switchPropertyLine\";\r\nimport { AccordionSection } from \"shared-ui-components/fluent/primitives/accordion\";\r\nimport { ExtensibleAccordion } from \"../../components/extensibleAccordion\";\r\nimport { useObservableCollection, useObservableState, useOrderedObservableCollection } from \"../../hooks/observableHooks\";\r\nimport { useCompactMode, useSidePaneDockOverrides } from \"../../hooks/settingsHooks\";\r\nimport { ObservableCollection } from \"../../misc/observableCollection\";\r\nimport { SceneContextIdentity } from \"../sceneContext\";\r\nimport { SettingsContextIdentity } from \"../settingsContext\";\r\nimport { ShellServiceIdentity } from \"../shellService\";\r\n\r\nexport const SettingsServiceIdentity = Symbol(\"SettingsService\");\r\n\r\n/**\r\n * Allows new sections or content to be added to the Settings pane.\r\n */\r\nexport interface ISettingsService extends IService<typeof SettingsServiceIdentity> {\r\n /**\r\n * Adds a new section.\r\n * @param section A description of the section to add.\r\n */\r\n addSection(section: DynamicAccordionSection): IDisposable;\r\n\r\n /**\r\n * Adds content to one or more sections.\r\n * @param content A description of the content to add.\r\n */\r\n addSectionContent(content: DynamicAccordionSectionContent<Scene>): IDisposable;\r\n}\r\n\r\nexport const SettingsServiceDefinition: ServiceDefinition<[ISettingsContext, ISettingsService], [IShellService, ISceneContext]> = {\r\n friendlyName: \"Settings\",\r\n consumes: [ShellServiceIdentity, SceneContextIdentity],\r\n produces: [SettingsContextIdentity, SettingsServiceIdentity],\r\n factory: (shellService, sceneContext) => {\r\n const sectionsCollection = new ObservableCollection<DynamicAccordionSection>();\r\n const sectionContentCollection = new ObservableCollection<DynamicAccordionSectionContent<Scene>>();\r\n\r\n let useDegrees = DataStorage.ReadBoolean(\"Babylon/Settings/UseDegrees\", false);\r\n let ignoreBackfacesForPicking = DataStorage.ReadBoolean(\"Babylon/Settings/IgnoreBackfacesForPicking\", false);\r\n let showPropertiesOnEntitySelection = DataStorage.ReadBoolean(\"Babylon/Settings/ShowPropertiesOnEntitySelection\", true);\r\n\r\n const settings = {\r\n get useDegrees() {\r\n return useDegrees;\r\n },\r\n set useDegrees(value: boolean) {\r\n if (useDegrees === value) {\r\n return; // No change, no need to notify\r\n }\r\n useDegrees = value;\r\n\r\n DataStorage.WriteBoolean(\"Babylon/Settings/UseDegrees\", useDegrees);\r\n\r\n this.settingsChangedObservable.notifyObservers(this);\r\n },\r\n get ignoreBackfacesForPicking() {\r\n return ignoreBackfacesForPicking;\r\n },\r\n set ignoreBackfacesForPicking(value: boolean) {\r\n if (ignoreBackfacesForPicking === value) {\r\n return; // No change, no need to notify\r\n }\r\n ignoreBackfacesForPicking = value;\r\n\r\n DataStorage.WriteBoolean(\"Babylon/Settings/IgnoreBackfacesForPicking\", ignoreBackfacesForPicking);\r\n this.settingsChangedObservable.notifyObservers(this);\r\n },\r\n get showPropertiesOnEntitySelection() {\r\n return showPropertiesOnEntitySelection;\r\n },\r\n set showPropertiesOnEntitySelection(value: boolean) {\r\n if (showPropertiesOnEntitySelection === value) {\r\n return; // No change, no need to notify\r\n }\r\n showPropertiesOnEntitySelection = value;\r\n\r\n DataStorage.WriteBoolean(\"Babylon/Settings/ShowPropertiesOnEntitySelection\", showPropertiesOnEntitySelection);\r\n this.settingsChangedObservable.notifyObservers(this);\r\n },\r\n settingsChangedObservable: new Observable<ISettingsContext>(),\r\n addSection: (section: DynamicAccordionSection) => sectionsCollection.add(section),\r\n addSectionContent: (content: DynamicAccordionSectionContent<Scene>) => sectionContentCollection.add(content),\r\n dispose: () => {},\r\n };\r\n\r\n const registration = shellService.addSidePane({\r\n key: \"Settings\",\r\n title: \"Settings\",\r\n icon: SettingsRegular,\r\n horizontalLocation: \"right\",\r\n verticalLocation: \"top\",\r\n order: 500,\r\n suppressTeachingMoment: true,\r\n content: () => {\r\n const sections = useOrderedObservableCollection(sectionsCollection);\r\n const sectionContent = useObservableCollection(sectionContentCollection);\r\n const scene = useObservableState(() => sceneContext.currentScene, sceneContext.currentSceneObservable);\r\n\r\n const [compactMode, setCompactMode] = useCompactMode();\r\n const [, , resetSidePaneLayout] = useSidePaneDockOverrides();\r\n\r\n return (\r\n <>\r\n {scene && (\r\n <ExtensibleAccordion sections={sections} sectionContent={sectionContent} context={scene}>\r\n <AccordionSection title=\"UI\">\r\n <SwitchPropertyLine\r\n label=\"Compact Mode\"\r\n description=\"Use a more compact UI with less spacing.\"\r\n value={compactMode}\r\n onChange={(checked) => {\r\n setCompactMode(checked);\r\n }}\r\n />\r\n <SwitchPropertyLine\r\n label=\"Use Degrees\"\r\n description=\"Using degrees instead of radians.\"\r\n value={settings.useDegrees}\r\n onChange={(checked) => {\r\n settings.useDegrees = checked;\r\n }}\r\n />\r\n <SwitchPropertyLine\r\n label=\"Ignore Backfaces for Picking\"\r\n description=\"Ignore backfaces when picking.\"\r\n value={settings.ignoreBackfacesForPicking}\r\n onChange={(checked) => {\r\n settings.ignoreBackfacesForPicking = checked;\r\n }}\r\n />\r\n <SwitchPropertyLine\r\n label=\"Show Properties on Selection\"\r\n description=\"Shows the Properties pane when an entity is selected.\"\r\n value={settings.showPropertiesOnEntitySelection}\r\n onChange={(checked) => {\r\n settings.showPropertiesOnEntitySelection = checked;\r\n }}\r\n />\r\n <ButtonLine label=\"Reset Layout\" onClick={resetSidePaneLayout} />\r\n </AccordionSection>\r\n </ExtensibleAccordion>\r\n )}\r\n </>\r\n );\r\n },\r\n });\r\n\r\n settings.dispose = () => registration.dispose();\r\n\r\n return settings;\r\n },\r\n};\r\n","import type { ImmutablePrimitiveProps } from \"../../primitives/primitive\";\r\nimport type { PropertyLineProps } from \"./propertyLine\";\r\nimport { PropertyLine } from \"./propertyLine\";\r\nimport type { FunctionComponent } from \"react\";\r\nimport { Body1 } from \"@fluentui/react-components\";\r\n\r\ntype StringifiedPropertyLineProps = PropertyLineProps<number> &\r\n ImmutablePrimitiveProps<number> & {\r\n precision?: number;\r\n units?: string;\r\n };\r\n\r\n/**\r\n * Expects a numerical value and converts it toFixed(if precision is supplied) or toLocaleString\r\n * Can pass optional units to be appending to the end of the string\r\n * @param props\r\n * @returns\r\n */\r\nexport const StringifiedPropertyLine: FunctionComponent<StringifiedPropertyLineProps> = (props) => {\r\n StringifiedPropertyLine.displayName = \"StringifiedPropertyLine\";\r\n const value = props.precision !== undefined ? props.value.toFixed(props.precision) : props.value.toLocaleString();\r\n const withUnits = props.units ? `${value} ${props.units}` : value;\r\n return (\r\n <PropertyLine {...props}>\r\n <Body1 title={props.title}>{withUnits}</Body1>\r\n </PropertyLine>\r\n );\r\n};\r\n","import type { FunctionComponent } from \"react\";\r\n\r\nimport type { Scene } from \"core/index\";\r\n\r\nimport { useObservableState } from \"../../hooks/observableHooks\";\r\nimport { usePollingObservable } from \"../../hooks/pollingHooks\";\r\nimport { StringifiedPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/stringifiedPropertyLine\";\r\n\r\nexport const CountStats: FunctionComponent<{ context: Scene }> = ({ context: scene }) => {\r\n const pollingObservable = usePollingObservable(1000);\r\n\r\n const totalMeshes = useObservableState(() => scene.meshes.length, scene.onNewMeshAddedObservable, scene.onMeshRemovedObservable);\r\n const activeMeshes = useObservableState(() => {\r\n let activeMeshesCount = scene.getActiveMeshes().length;\r\n for (const objectRenderer of scene.objectRenderers) {\r\n activeMeshesCount += objectRenderer.getActiveMeshes().length;\r\n }\r\n return activeMeshesCount;\r\n }, pollingObservable);\r\n const activeIndices = useObservableState(() => scene.getActiveIndices(), pollingObservable);\r\n const activeBones = useObservableState(() => scene.getActiveBones(), pollingObservable);\r\n const activeParticles = useObservableState(() => scene.getActiveParticles(), pollingObservable);\r\n const drawCalls = useObservableState(() => scene.getEngine()._drawCalls.current, pollingObservable);\r\n const totalLights = useObservableState(() => scene.lights.length, pollingObservable);\r\n const totalVertices = useObservableState(() => scene.getTotalVertices(), pollingObservable);\r\n const totalMaterials = useObservableState(() => scene.materials.length, pollingObservable);\r\n const totalTextures = useObservableState(() => scene.textures.length, pollingObservable);\r\n\r\n return (\r\n <>\r\n <StringifiedPropertyLine key=\"TotalMeshes\" label=\"Total Meshes\" value={totalMeshes} />\r\n <StringifiedPropertyLine key=\"ActiveMeshes\" label=\"Active Meshes\" value={activeMeshes} />\r\n <StringifiedPropertyLine key=\"ActiveIndices\" label=\"Active Indices\" value={activeIndices} />\r\n <StringifiedPropertyLine key=\"ActiveFaces\" label=\"Active Faces\" value={activeIndices / 3} />\r\n <StringifiedPropertyLine key=\"ActiveBones\" label=\"Active Bones\" value={activeBones} />\r\n <StringifiedPropertyLine key=\"ActiveParticles\" label=\"Active Particles\" value={activeParticles} />\r\n <StringifiedPropertyLine key=\"DrawCalls\" label=\"Draw Calls\" value={drawCalls} />\r\n <StringifiedPropertyLine key=\"TotalLights\" label=\"Total Lights\" value={totalLights} />\r\n <StringifiedPropertyLine key=\"TotalVertices\" label=\"Total Vertices\" value={totalVertices} />\r\n <StringifiedPropertyLine key=\"TotalMaterials\" label=\"Total Materials\" value={totalMaterials} />\r\n <StringifiedPropertyLine key=\"TotalTextures\" label=\"Total Textures\" value={totalTextures} />\r\n </>\r\n );\r\n};\r\n","import type { Scene } from \"core/index\";\r\n\r\nimport type { FunctionComponent } from \"react\";\r\n\r\nimport { useCallback } from \"react\";\r\n\r\nimport { EngineInstrumentation } from \"core/Instrumentation/engineInstrumentation\";\r\nimport { SceneInstrumentation } from \"core/Instrumentation/sceneInstrumentation\";\r\n\r\nimport { useObservableState } from \"../../hooks/observableHooks\";\r\nimport { usePollingObservable } from \"../../hooks/pollingHooks\";\r\nimport { useResource } from \"../../hooks/resourceHooks\";\r\n\r\n// TODO: Dynamically import the right engine.query module based on the type of engine?\r\nimport \"core/Engines/AbstractEngine/abstractEngine.timeQuery\";\r\nimport \"core/Engines/Extensions/engine.query\";\r\nimport \"core/Engines/WebGPU/Extensions/engine.query\";\r\nimport { StringifiedPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/stringifiedPropertyLine\";\r\n\r\nexport const FrameStepsStats: FunctionComponent<{ context: Scene }> = ({ context: scene }) => {\r\n const pollingObservable = usePollingObservable(1000);\r\n\r\n const sceneInstrumentation = useResource(\r\n useCallback(() => {\r\n const sceneInstrumentation = new SceneInstrumentation(scene);\r\n sceneInstrumentation.captureActiveMeshesEvaluationTime = true;\r\n sceneInstrumentation.captureRenderTargetsRenderTime = true;\r\n sceneInstrumentation.captureFrameTime = true;\r\n sceneInstrumentation.captureRenderTime = true;\r\n sceneInstrumentation.captureInterFrameTime = true;\r\n sceneInstrumentation.captureParticlesRenderTime = true;\r\n sceneInstrumentation.captureSpritesRenderTime = true;\r\n sceneInstrumentation.capturePhysicsTime = true;\r\n sceneInstrumentation.captureAnimationsTime = true;\r\n return sceneInstrumentation;\r\n }, [scene])\r\n );\r\n\r\n const engineInstrumentation = useResource(\r\n useCallback(() => {\r\n const engineInstrumentation = new EngineInstrumentation(scene.getEngine());\r\n engineInstrumentation.captureGPUFrameTime = true;\r\n return engineInstrumentation;\r\n }, [scene.getEngine()])\r\n );\r\n\r\n const absoluteFPS = useObservableState(() => Math.floor(1000.0 / sceneInstrumentation.frameTimeCounter.lastSecAverage), pollingObservable);\r\n const meshesSelection = useObservableState(() => sceneInstrumentation.activeMeshesEvaluationTimeCounter.lastSecAverage, pollingObservable);\r\n const renderTargets = useObservableState(() => sceneInstrumentation.renderTargetsRenderTimeCounter.lastSecAverage, pollingObservable);\r\n const particles = useObservableState(() => sceneInstrumentation.particlesRenderTimeCounter.lastSecAverage, pollingObservable);\r\n const sprites = useObservableState(() => sceneInstrumentation.spritesRenderTimeCounter.lastSecAverage, pollingObservable);\r\n const animations = useObservableState(() => sceneInstrumentation.animationsTimeCounter.lastSecAverage, pollingObservable);\r\n const physics = useObservableState(() => sceneInstrumentation.physicsTimeCounter.lastSecAverage, pollingObservable);\r\n const interFrameTime = useObservableState(() => sceneInstrumentation.interFrameTimeCounter.lastSecAverage, pollingObservable);\r\n const gpuFrameTime = useObservableState(() => engineInstrumentation.gpuFrameTimeCounter.lastSecAverage * 0.000001, pollingObservable);\r\n const gpuFrameTimeAverage = useObservableState(() => engineInstrumentation.gpuFrameTimeCounter.average * 0.000001, pollingObservable);\r\n\r\n return (\r\n <>\r\n <StringifiedPropertyLine key=\"AbsoluteFPS\" label=\"Absolute FPS\" value={absoluteFPS} />\r\n <StringifiedPropertyLine key=\"MeshesSelection\" label=\"Meshes Selection\" value={meshesSelection} precision={2} units=\"ms\" />\r\n <StringifiedPropertyLine key=\"RenderTargets\" label=\"Render Targets\" value={renderTargets} precision={2} units=\"ms\" />\r\n <StringifiedPropertyLine key=\"Particles\" label=\"Particles\" value={particles} precision={2} units=\"ms\" />\r\n <StringifiedPropertyLine key=\"Sprites\" label=\"Sprites\" value={sprites} precision={2} units=\"ms\" />\r\n <StringifiedPropertyLine key=\"Animations\" label=\"Animations\" value={animations} precision={2} units=\"ms\" />\r\n <StringifiedPropertyLine key=\"Physics\" label=\"Physics\" value={physics} precision={2} units=\"ms\" />\r\n <StringifiedPropertyLine key=\"InterFrameTime\" label=\"Inter-Frame Time\" value={interFrameTime} precision={2} units=\"ms\" />\r\n <StringifiedPropertyLine key=\"GPUFrameTime\" label=\"GPU Frame Time\" value={gpuFrameTime} precision={2} units=\"ms\" />\r\n <StringifiedPropertyLine key=\"GPUFrameTimeAverage\" label=\"GPU Frame Time (Average)\" value={gpuFrameTimeAverage} precision={2} units=\"ms\" />\r\n </>\r\n );\r\n};\r\n","import { useRef } from \"react\";\r\nimport type { FunctionComponent } from \"react\";\r\nimport { ButtonLine } from \"./buttonLine\";\r\nimport type { ButtonProps } from \"../primitives/button\";\r\nimport { ArrowUploadRegular } from \"@fluentui/react-icons\";\r\n\r\ntype FileUploadLineProps = Omit<ButtonProps, \"onClick\" | \"label\"> & {\r\n onClick: (files: FileList) => void;\r\n label: string; // Require a label when button is the entire line (by default, label is optional on a button)\r\n accept: string;\r\n};\r\n\r\nexport const FileUploadLine: FunctionComponent<FileUploadLineProps> = (props) => {\r\n FileUploadLine.displayName = \"FileUploadLine\";\r\n const inputRef = useRef<HTMLInputElement>(null);\r\n\r\n const handleButtonClick = () => {\r\n inputRef.current?.click();\r\n };\r\n\r\n const handleChange = (evt: React.ChangeEvent<HTMLInputElement>) => {\r\n const files = evt.target.files;\r\n if (files && files.length) {\r\n props.onClick(files);\r\n }\r\n evt.target.value = \"\";\r\n };\r\n\r\n return (\r\n <>\r\n <ButtonLine onClick={handleButtonClick} icon={ArrowUploadRegular} label={props.label}></ButtonLine>\r\n <input ref={inputRef} type=\"file\" accept={props.accept} style={{ display: \"none\" }} onChange={handleChange} />\r\n </>\r\n );\r\n};\r\n","import type { PerformanceViewerCollector, Scene } from \"core/index\";\r\n\r\nimport type { FunctionComponent } from \"react\";\r\n\r\nimport { useEffect, useState } from \"react\";\r\n\r\nimport { PerfCollectionStrategy } from \"core/Misc/PerformanceViewer/performanceViewerCollectionStrategies\";\r\nimport \"core/Misc/PerformanceViewer/performanceViewerSceneExtension\";\r\nimport { PressureObserverWrapper } from \"core/Misc/pressureObserverWrapper\";\r\nimport { Tools } from \"core/Misc/tools\";\r\nimport { ButtonLine } from \"shared-ui-components/fluent/hoc/buttonLine\";\r\nimport { FileUploadLine } from \"shared-ui-components/fluent/hoc/fileUploadLine\";\r\n\r\nconst enum PerfMetadataCategory {\r\n Count = \"Count\",\r\n FrameSteps = \"Frame Steps Duration\",\r\n}\r\n\r\n// list of strategies to add to perf graph automatically.\r\nconst DefaultStrategiesList = [\r\n { strategyCallback: PerfCollectionStrategy.FpsStrategy() },\r\n { strategyCallback: PerfCollectionStrategy.TotalMeshesStrategy(), category: PerfMetadataCategory.Count, hidden: true },\r\n { strategyCallback: PerfCollectionStrategy.ActiveMeshesStrategy(), category: PerfMetadataCategory.Count, hidden: true },\r\n { strategyCallback: PerfCollectionStrategy.ActiveIndicesStrategy(), category: PerfMetadataCategory.Count, hidden: true },\r\n { strategyCallback: PerfCollectionStrategy.ActiveBonesStrategy(), category: PerfMetadataCategory.Count, hidden: true },\r\n { strategyCallback: PerfCollectionStrategy.ActiveParticlesStrategy(), category: PerfMetadataCategory.Count, hidden: true },\r\n { strategyCallback: PerfCollectionStrategy.DrawCallsStrategy(), category: PerfMetadataCategory.Count, hidden: true },\r\n { strategyCallback: PerfCollectionStrategy.TotalLightsStrategy(), category: PerfMetadataCategory.Count, hidden: true },\r\n { strategyCallback: PerfCollectionStrategy.TotalVerticesStrategy(), category: PerfMetadataCategory.Count, hidden: true },\r\n { strategyCallback: PerfCollectionStrategy.TotalMaterialsStrategy(), category: PerfMetadataCategory.Count, hidden: true },\r\n { strategyCallback: PerfCollectionStrategy.TotalTexturesStrategy(), category: PerfMetadataCategory.Count, hidden: true },\r\n { strategyCallback: PerfCollectionStrategy.AbsoluteFpsStrategy(), category: PerfMetadataCategory.FrameSteps, hidden: true },\r\n { strategyCallback: PerfCollectionStrategy.MeshesSelectionStrategy(), category: PerfMetadataCategory.FrameSteps, hidden: true },\r\n { strategyCallback: PerfCollectionStrategy.RenderTargetsStrategy(), category: PerfMetadataCategory.FrameSteps, hidden: true },\r\n { strategyCallback: PerfCollectionStrategy.ParticlesStrategy(), category: PerfMetadataCategory.FrameSteps, hidden: true },\r\n { strategyCallback: PerfCollectionStrategy.SpritesStrategy(), category: PerfMetadataCategory.FrameSteps, hidden: true },\r\n { strategyCallback: PerfCollectionStrategy.AnimationsStrategy(), category: PerfMetadataCategory.FrameSteps, hidden: true },\r\n { strategyCallback: PerfCollectionStrategy.PhysicsStrategy(), category: PerfMetadataCategory.FrameSteps, hidden: true },\r\n { strategyCallback: PerfCollectionStrategy.RenderStrategy(), category: PerfMetadataCategory.FrameSteps, hidden: true },\r\n { strategyCallback: PerfCollectionStrategy.FrameTotalStrategy(), category: PerfMetadataCategory.FrameSteps, hidden: true },\r\n { strategyCallback: PerfCollectionStrategy.InterFrameStrategy(), category: PerfMetadataCategory.FrameSteps, hidden: true },\r\n { strategyCallback: PerfCollectionStrategy.GpuFrameTimeStrategy(), category: PerfMetadataCategory.FrameSteps, hidden: true },\r\n] as const;\r\n\r\nexport const PerformanceStats: FunctionComponent<{ context: Scene }> = ({ context: scene }) => {\r\n const [isOpen, setIsOpen] = useState(false);\r\n const [isLoadedFromCsv, setIsLoadedFromCsv] = useState(false);\r\n const [performanceCollector, setPerformanceCollector] = useState<PerformanceViewerCollector | undefined>();\r\n\r\n useEffect(() => {\r\n if (!isLoadedFromCsv) {\r\n if (performanceCollector) {\r\n performanceCollector.stop();\r\n performanceCollector.clear(false);\r\n addStrategies(performanceCollector);\r\n }\r\n }\r\n }, [isLoadedFromCsv]);\r\n\r\n const startPerformanceViewerPopup = () => {\r\n if (performanceCollector) {\r\n // TODO\r\n }\r\n };\r\n\r\n const onPerformanceButtonClick = () => {\r\n setIsOpen(true);\r\n performanceCollector?.start(true);\r\n startPerformanceViewerPopup();\r\n };\r\n\r\n const onLoadClick = (fileList: FileList) => {\r\n Tools.ReadFile(fileList[0], (data: string) => {\r\n // reopen window and load data!\r\n setIsOpen(false);\r\n setIsLoadedFromCsv(true);\r\n performanceCollector?.stop();\r\n const isValid = performanceCollector?.loadFromFileData(data);\r\n if (!isValid) {\r\n // if our data isnt valid we close the window.\r\n setIsOpen(false);\r\n performanceCollector?.start(true);\r\n } else {\r\n startPerformanceViewerPopup();\r\n }\r\n });\r\n };\r\n\r\n const onExportClick = () => {\r\n performanceCollector?.exportDataToCsv();\r\n };\r\n\r\n const onToggleRecording = () => {\r\n if (!performanceCollector?.isStarted) {\r\n performanceCollector?.start(true);\r\n } else {\r\n performanceCollector?.stop();\r\n }\r\n };\r\n\r\n const addStrategies = (perfCollector: PerformanceViewerCollector) => {\r\n perfCollector.addCollectionStrategies(...DefaultStrategiesList);\r\n if (PressureObserverWrapper.IsAvailable) {\r\n // Do not enable for now as the Pressure API does not\r\n // report factors at the moment.\r\n // perfCollector.addCollectionStrategies({\r\n // strategyCallback: PerfCollectionStrategy.ThermalStrategy(),\r\n // category: IPerfMetadataCategory.FrameSteps,\r\n // hidden: true,\r\n // });\r\n // perfCollector.addCollectionStrategies({\r\n // strategyCallback: PerfCollectionStrategy.PowerSupplyStrategy(),\r\n // category: IPerfMetadataCategory.FrameSteps,\r\n // hidden: true,\r\n // });\r\n perfCollector.addCollectionStrategies({\r\n strategyCallback: PerfCollectionStrategy.PressureStrategy(),\r\n category: PerfMetadataCategory.FrameSteps,\r\n hidden: true,\r\n });\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n const perfCollector = scene.getPerfCollector();\r\n addStrategies(perfCollector);\r\n setPerformanceCollector(perfCollector);\r\n }, []);\r\n\r\n return (\r\n <>\r\n {!isOpen && <ButtonLine label=\"Open Realtime Perf Viewer\" onClick={onPerformanceButtonClick} />}\r\n {!isOpen && <FileUploadLine label=\"Load Perf Viewer using CSV\" accept=\".csv\" onClick={onLoadClick} />}\r\n <ButtonLine label=\"Export Perf to CSV\" onClick={onExportClick} />\r\n {!isOpen && <ButtonLine label={performanceCollector?.isStarted ? \"Stop Recording\" : \"Begin Recording\"} onClick={onToggleRecording} />}\r\n </>\r\n );\r\n};\r\n","import { Body1 } from \"@fluentui/react-components\";\r\nimport { PropertyLine } from \"./propertyLine\";\r\nimport type { ImmutablePrimitiveProps } from \"../../primitives/primitive\";\r\nimport type { PropertyLineProps } from \"./propertyLine\";\r\nimport type { FunctionComponent } from \"react\";\r\n\r\n/**\r\n * Wraps text in a property line\r\n * @param props - PropertyLineProps and TextProps\r\n * @returns property-line wrapped text\r\n */\r\nexport const TextPropertyLine: FunctionComponent<PropertyLineProps<string> & ImmutablePrimitiveProps<string>> = (props) => {\r\n TextPropertyLine.displayName = \"TextPropertyLine\";\r\n const { value, title } = props;\r\n return (\r\n <PropertyLine {...props}>\r\n <Body1 title={title}>{value}</Body1>\r\n </PropertyLine>\r\n );\r\n};\r\n","import type { Scene } from \"core/index\";\r\n\r\nimport { makeStyles, tokens } from \"@fluentui/react-components\";\r\n\r\nimport { AbstractEngine } from \"core/Engines/abstractEngine\";\r\nimport { TextPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/textPropertyLine\";\r\nimport { StringifiedPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/stringifiedPropertyLine\";\r\nimport { useObservableState } from \"../../hooks/observableHooks\";\r\nimport { ExtensibleAccordion } from \"../extensibleAccordion\";\r\nimport { SidePaneContainer } from \"../pane\";\r\n\r\nconst useStyles = makeStyles({\r\n pinnedStatsPane: {\r\n flex: \"0 1 auto\",\r\n paddingBottom: tokens.spacingHorizontalM,\r\n },\r\n});\r\n\r\nexport const StatsPane: typeof ExtensibleAccordion<Scene> = (props) => {\r\n const classes = useStyles();\r\n\r\n const scene = props.context;\r\n const engine = scene.getEngine();\r\n const fps = useObservableState(() => Math.round(engine.getFps()), engine.onBeginFrameObservable);\r\n\r\n return (\r\n <>\r\n <SidePaneContainer className={classes.pinnedStatsPane}>\r\n <TextPropertyLine key=\"EngineVersion\" label=\"Version\" description=\"The Babylon.js engine version.\" value={AbstractEngine.Version} />\r\n <StringifiedPropertyLine key=\"FPS\" label=\"FPS:\" description=\"The current framerate\" value={fps} />\r\n </SidePaneContainer>\r\n <ExtensibleAccordion {...props} />\r\n </>\r\n );\r\n};\r\n","import { PresenceBadge } from \"@fluentui/react-components\";\r\nimport type { FunctionComponent } from \"react\";\r\nimport { PropertyLine } from \"./propertyLine\";\r\nimport type { ImmutablePrimitiveProps } from \"../../primitives/primitive\";\r\nimport type { PropertyLineProps } from \"./propertyLine\";\r\n/**\r\n * Displays an icon indicating enabled (green check) or disabled (red cross) state\r\n * @param props - The properties for the PropertyLine, including the boolean value to display.\r\n * @returns A PropertyLine component with a PresenceBadge indicating the boolean state.\r\n */\r\nexport const BooleanBadgePropertyLine: FunctionComponent<PropertyLineProps<boolean> & ImmutablePrimitiveProps<boolean>> = (props) => {\r\n BooleanBadgePropertyLine.displayName = \"BooleanBadgePropertyLine\";\r\n return (\r\n <PropertyLine {...props}>\r\n <PresenceBadge status={props.value ? \"available\" : \"do-not-disturb\"} outOfOffice={true} />\r\n </PropertyLine>\r\n );\r\n};\r\n","import type { Scene } from \"core/index\";\r\n\r\nimport type { FunctionComponent } from \"react\";\r\n\r\nimport { BooleanBadgePropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/booleanBadgePropertyLine\";\r\nimport { TextPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/textPropertyLine\";\r\nimport { StringifiedPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/stringifiedPropertyLine\";\r\nimport { useObservableState } from \"../../hooks/observableHooks\";\r\n\r\nexport const SystemStats: FunctionComponent<{ context: Scene }> = ({ context: scene }) => {\r\n const engine = scene.getEngine();\r\n const caps = engine.getCaps();\r\n const resolution = useObservableState(() => `${engine.getRenderWidth()} x ${engine.getRenderHeight()}`, engine.onResizeObservable);\r\n const hardwareScalingLevel = useObservableState(() => engine.getHardwareScalingLevel(), engine.onResizeObservable);\r\n\r\n return (\r\n <>\r\n <TextPropertyLine key=\"Resolution\" label=\"Resolution\" value={resolution} />\r\n <StringifiedPropertyLine key=\"HardwareScalingLevel\" label=\"Hardware Scaling Level\" value={hardwareScalingLevel} />\r\n <TextPropertyLine key=\"Engine\" label=\"Engine\" value={engine.description} />\r\n <BooleanBadgePropertyLine key=\"StdDerivatives\" label=\"StdDerivatives\" value={caps.standardDerivatives} />\r\n <BooleanBadgePropertyLine key=\"CompressedTextures\" label=\"Compressed Textures\" value={caps.s3tc !== undefined} />\r\n <BooleanBadgePropertyLine key=\"HardwareInstances\" label=\"Hardware Instances\" value={caps.instancedArrays} />\r\n <BooleanBadgePropertyLine key=\"TextureFloat\" label=\"Texture Float\" value={caps.textureFloat} />\r\n <BooleanBadgePropertyLine key=\"TextureHalfFloat\" label=\"Texture Half Float\" value={caps.textureHalfFloat} />\r\n <BooleanBadgePropertyLine key=\"RenderToTextureFloat\" label=\"Render to Texture Float\" value={caps.textureFloatRender} />\r\n <BooleanBadgePropertyLine key=\"RenderToTextureHalfFloat\" label=\"Render to Texture Half Float\" value={caps.textureHalfFloatRender} />\r\n <BooleanBadgePropertyLine key=\"32bitsIndices\" label=\"32bits Indices\" value={caps.uintIndices} />\r\n <BooleanBadgePropertyLine key=\"FragmentDepth\" label=\"Fragment Depth\" value={caps.fragmentDepthSupported} />\r\n <BooleanBadgePropertyLine key=\"HighPrecisionShaders\" label=\"High Precision Shaders\" value={caps.highPrecisionShaderSupported} />\r\n <BooleanBadgePropertyLine key=\"DrawBuffers\" label=\"Draw Buffers\" value={caps.drawBuffersExtension} />\r\n <BooleanBadgePropertyLine key=\"VertexArrayObject\" label=\"Vertex Array Object\" value={caps.vertexArrayObject} />\r\n <BooleanBadgePropertyLine key=\"TimerQuery\" label=\"Timer Query\" value={caps.timerQuery !== undefined} />\r\n <BooleanBadgePropertyLine key=\"Stencil\" label=\"Stencil\" value={engine.isStencilEnable} />\r\n <BooleanBadgePropertyLine key=\"ParallelShaderCompilation\" label=\"Parallel Shader Compilation\" value={caps.parallelShaderCompile != null} />\r\n <StringifiedPropertyLine key=\"MaxTexturesUnits\" label=\"Max Textures Units\" value={caps.maxTexturesImageUnits} />\r\n <StringifiedPropertyLine key=\"MaxTexturesSize\" label=\"Max Textures Size\" value={caps.maxTextureSize} />\r\n <StringifiedPropertyLine key=\"MaxAnisotropy\" label=\"Max Anisotropy\" value={caps.maxAnisotropy} />\r\n <TextPropertyLine key=\"Driver\" label=\"Driver\" value={engine.extractDriverInfo()} />\r\n </>\r\n );\r\n};\r\n","import type { IDisposable, Scene } from \"core/index\";\r\n\r\nimport type { DynamicAccordionSection, DynamicAccordionSectionContent } from \"../../components/extensibleAccordion\";\r\nimport type { IService, ServiceDefinition } from \"../../modularity/serviceDefinition\";\r\nimport type { ISceneContext } from \"../sceneContext\";\r\nimport type { IShellService } from \"../shellService\";\r\n\r\nimport { DataBarHorizontalRegular } from \"@fluentui/react-icons\";\r\n\r\nimport { CountStats } from \"../../components/stats/countStats\";\r\nimport { FrameStepsStats } from \"../../components/stats/frameStepStats\";\r\nimport { PerformanceStats } from \"../../components/stats/performanceStats\";\r\nimport { StatsPane } from \"../../components/stats/statsPane\";\r\nimport { SystemStats } from \"../../components/stats/systemStats\";\r\nimport { useObservableCollection, useObservableState, useOrderedObservableCollection } from \"../../hooks/observableHooks\";\r\nimport { ObservableCollection } from \"../../misc/observableCollection\";\r\nimport { SceneContextIdentity } from \"../sceneContext\";\r\nimport { ShellServiceIdentity } from \"../shellService\";\r\n\r\nexport const StatsServiceIdentity = Symbol(\"StatsService\");\r\n\r\n/**\r\n * Allows new sections or content to be added to the stats pane.\r\n */\r\nexport interface IStatsService extends IService<typeof StatsServiceIdentity> {\r\n /**\r\n * Adds a new section (e.g. \"Count\", \"Frame Steps Duration\", etc.).\r\n * @param section A description of the section to add.\r\n */\r\n addSection(section: DynamicAccordionSection): IDisposable;\r\n\r\n /**\r\n * Adds content to one or more sections.\r\n * @param content A description of the content to add.\r\n */\r\n addSectionContent(content: DynamicAccordionSectionContent<Scene>): IDisposable;\r\n}\r\n\r\n/**\r\n * Provides a scene stats pane.\r\n */\r\nexport const StatsServiceDefinition: ServiceDefinition<[IStatsService], [IShellService, ISceneContext]> = {\r\n friendlyName: \"Stats\",\r\n produces: [StatsServiceIdentity],\r\n consumes: [ShellServiceIdentity, SceneContextIdentity],\r\n factory: (shellService, sceneContext) => {\r\n const sectionsCollection = new ObservableCollection<DynamicAccordionSection>();\r\n const sectionContentCollection = new ObservableCollection<DynamicAccordionSectionContent<Scene>>();\r\n\r\n const registration = shellService.addSidePane({\r\n key: \"Statistics\",\r\n title: \"Statistics\",\r\n icon: DataBarHorizontalRegular,\r\n horizontalLocation: \"right\",\r\n verticalLocation: \"top\",\r\n order: 300,\r\n suppressTeachingMoment: true,\r\n content: () => {\r\n const sections = useOrderedObservableCollection(sectionsCollection);\r\n const sectionContent = useObservableCollection(sectionContentCollection);\r\n const scene = useObservableState(() => sceneContext.currentScene, sceneContext.currentSceneObservable);\r\n\r\n return <>{scene && <StatsPane sections={sections} sectionContent={sectionContent} context={scene} />}</>;\r\n },\r\n });\r\n\r\n // Default/built-in sections.\r\n sectionsCollection.add({\r\n identity: \"Performance\",\r\n order: 0,\r\n });\r\n\r\n sectionsCollection.add({\r\n identity: \"Count\",\r\n order: 1,\r\n });\r\n\r\n sectionsCollection.add({\r\n identity: \"Frame Steps Duration\",\r\n order: 2,\r\n });\r\n\r\n sectionsCollection.add({\r\n identity: \"System Info\",\r\n order: 3,\r\n });\r\n\r\n // Default/built-in content.\r\n sectionContentCollection.add({\r\n key: \"DefaultPerfStats\",\r\n section: \"Performance\",\r\n order: 0,\r\n component: PerformanceStats,\r\n });\r\n\r\n sectionContentCollection.add({\r\n key: \"DefaultCountStats\",\r\n section: \"Count\",\r\n order: 1,\r\n component: CountStats,\r\n });\r\n\r\n sectionContentCollection.add({\r\n key: \"DefaultFrameStats\",\r\n section: \"Frame Steps Duration\",\r\n order: 2,\r\n component: FrameStepsStats,\r\n });\r\n\r\n sectionContentCollection.add({\r\n key: \"DefaultSystemStats\",\r\n section: \"System Info\",\r\n order: 3,\r\n component: SystemStats,\r\n });\r\n\r\n return {\r\n addSection: (section) => sectionsCollection.add(section),\r\n addSectionContent: (content) => sectionContentCollection.add(content as DynamicAccordionSectionContent<Scene>),\r\n dispose: () => registration.dispose(),\r\n };\r\n },\r\n};\r\n","import { ExtensibleAccordion } from \"../extensibleAccordion\";\r\nimport type { Scene } from \"core/scene\";\r\n\r\nexport const ToolsPane: typeof ExtensibleAccordion<Scene> = (props) => {\r\n return <ExtensibleAccordion {...props} />;\r\n};\r\n","import type { Nullable } from \"core/types\";\r\nimport type { IDisposable, Scene } from \"core/scene\";\r\nimport type { IService, ServiceDefinition } from \"../../modularity/serviceDefinition\";\r\nimport type { IShellService } from \"../shellService\";\r\nimport type { DynamicAccordionSection, DynamicAccordionSectionContent } from \"../../components/extensibleAccordion\";\r\nimport { WrenchRegular } from \"@fluentui/react-icons\";\r\nimport { useObservableCollection, useObservableState, useOrderedObservableCollection } from \"../../hooks/observableHooks\";\r\nimport { ObservableCollection } from \"../../misc/observableCollection\";\r\nimport { ShellServiceIdentity } from \"../shellService\";\r\nimport { ToolsPane } from \"../../components/tools/toolsPane\";\r\nimport { SceneContextIdentity } from \"../sceneContext\";\r\nimport type { ISceneContext } from \"../sceneContext\";\r\n\r\nexport const ToolsServiceIdentity = Symbol(\"ToolsService\");\r\n\r\n/**\r\n * A service that provides tools for the user to generate artifacts or perform actions on entities.\r\n */\r\nexport interface IToolsService extends IService<typeof ToolsServiceIdentity> {\r\n /**\r\n * Adds a new section (e.g. \"Export\", \"Capture\", etc.).\r\n * @param section A description of the section to add.\r\n */\r\n addSection(section: DynamicAccordionSection): IDisposable;\r\n\r\n /**\r\n * Adds content to one or more sections.\r\n * @param content A description of the content to add.\r\n */\r\n addSectionContent(content: DynamicAccordionSectionContent<Scene>): IDisposable;\r\n}\r\n\r\n/**\r\n * A collection of usually optional, dynamic extensions.\r\n * Common examples includes importing/exporting, or other general creation tools.\r\n */\r\nexport const ToolsServiceDefinition: ServiceDefinition<[IToolsService], [IShellService, ISceneContext]> = {\r\n friendlyName: \"Tools Editor\",\r\n produces: [ToolsServiceIdentity],\r\n consumes: [ShellServiceIdentity, SceneContextIdentity],\r\n factory: (shellService, sceneContext) => {\r\n const sectionsCollection = new ObservableCollection<DynamicAccordionSection>();\r\n const sectionContentCollection = new ObservableCollection<DynamicAccordionSectionContent<Scene>>();\r\n\r\n // Only show the Tools pane if some tool content has been added.\r\n let toolsPaneRegistration: Nullable<IDisposable> = null;\r\n sectionContentCollection.observable.add(() => {\r\n if (sectionContentCollection.items.length === 0) {\r\n toolsPaneRegistration?.dispose();\r\n toolsPaneRegistration = null;\r\n } else if (!toolsPaneRegistration) {\r\n toolsPaneRegistration = shellService.addSidePane({\r\n key: \"Tools\",\r\n title: \"Tools\",\r\n icon: WrenchRegular,\r\n horizontalLocation: \"right\",\r\n verticalLocation: \"top\",\r\n order: 400,\r\n suppressTeachingMoment: true,\r\n content: () => {\r\n const sections = useOrderedObservableCollection(sectionsCollection);\r\n const sectionContent = useObservableCollection(sectionContentCollection);\r\n const scene = useObservableState(() => sceneContext.currentScene, sceneContext.currentSceneObservable);\r\n\r\n return scene && <ToolsPane sections={sections} sectionContent={sectionContent} context={scene} />;\r\n },\r\n });\r\n }\r\n });\r\n\r\n /**\r\n * Left TODO: Implement the following sections from toolsTabComponent.tsx\r\n * - GLTF Validator (see glTFComponent.tsx) (consider putting in Import tools)\r\n * - Reflector\r\n * - GIF (consider putting in Capture Tools)\r\n * - Replay (consider putting in Capture Tools)\r\n */\r\n\r\n return {\r\n addSection: (section) => sectionsCollection.add(section),\r\n addSectionContent: (content) => sectionContentCollection.add(content),\r\n dispose: () => toolsPaneRegistration?.dispose(),\r\n };\r\n },\r\n};\r\n","import { BuiltInsExtensionFeed } from \"./builtInsExtensionFeed\";\r\n\r\n/**\r\n * Well-known default built in extensions for the Inspector.\r\n */\r\nexport const DefaultInspectorExtensionFeed = new BuiltInsExtensionFeed(\"Inspector\", [\r\n // {\r\n // name: \"Asset Creation\",\r\n // description: \"Adds new features to enable creating Babylon assets such as node materials, flow graphs, and more.\",\r\n // keywords: [\"creation\"],\r\n // getExtensionModuleAsync: async () => await import(\"../services/creationToolsService\"),\r\n // },\r\n {\r\n name: \"Export Tools\",\r\n description: \"Adds new features to enable exporting Babylon assets such as .gltf, .glb, .babylon, and more.\",\r\n keywords: [\"export\", \"gltf\", \"glb\", \"babylon\", \"exporter\", \"tools\"],\r\n getExtensionModuleAsync: async () => await import(\"../services/panes/tools/exportService\"),\r\n },\r\n {\r\n name: \"Capture Tools\",\r\n description: \"Adds new features to enable capturing screenshots, GIFs, videos, and more.\",\r\n keywords: [\"capture\", \"screenshot\", \"gif\", \"video\", \"tools\"],\r\n getExtensionModuleAsync: async () => await import(\"../services/panes/tools/captureService\"),\r\n },\r\n {\r\n name: \"Import Tools\",\r\n description: \"Adds new features related to importing Babylon assets.\",\r\n keywords: [\"import\", \"tools\"],\r\n getExtensionModuleAsync: async () => await import(\"../services/panes/tools/importService\"),\r\n },\r\n]);\r\n","import type { ExtensionManager } from \"../extensibility/extensionManager\";\r\n\r\nimport { createContext, useContext } from \"react\";\r\n\r\nexport type ExtensionManagerContext = {\r\n readonly extensionManager: ExtensionManager;\r\n};\r\n\r\nexport const ExtensionManagerContext = createContext<ExtensionManagerContext | undefined>(undefined);\r\n\r\nexport function useExtensionManager() {\r\n return useContext(ExtensionManagerContext)?.extensionManager;\r\n}\r\n","import type { IDisposable, Nullable } from \"core/index\";\r\nimport type { ServiceContainer } from \"../modularity/serviceContainer\";\r\nimport type { IExtensionFeed, ExtensionMetadata, ExtensionModule } from \"./extensionFeed\";\r\n\r\nimport { Logger } from \"core/Misc/logger\";\r\n\r\n/**\r\n * Represents a loaded extension.\r\n */\r\nexport interface IExtension {\r\n /**\r\n * The metadata for the extension.\r\n */\r\n readonly metadata: ExtensionMetadata;\r\n\r\n /**\r\n * Whether the extension is currently being installed, uninstalled, enabled, or disabled.\r\n */\r\n readonly isStateChanging: boolean;\r\n\r\n /**\r\n * Whether the extension is enabled.\r\n */\r\n readonly isInstalled: boolean;\r\n\r\n /**\r\n * Installs the extension.\r\n */\r\n installAsync(): Promise<void>;\r\n\r\n /**\r\n * Uninstalls the extension.\r\n */\r\n uninstallAsync(): Promise<void>;\r\n\r\n /**\r\n * Adds a handler that is called when the state of the extension changes.\r\n * @param handler The handler to add.\r\n * @returns A disposable that removes the handler when disposed.\r\n */\r\n addStateChangedHandler(handler: () => void): IDisposable;\r\n}\r\n\r\n/**\r\n * Provides information about an extension installation failure.\r\n */\r\nexport type InstallFailedInfo = {\r\n /**\r\n * The metadata of the extension that failed to install.\r\n */\r\n extension: ExtensionMetadata;\r\n\r\n /**\r\n * The error that occurred during the installation.\r\n */\r\n error: unknown;\r\n};\r\n\r\ntype InstalledExtension = {\r\n metadata: ExtensionMetadata;\r\n feed: IExtensionFeed;\r\n isStateChanging: boolean;\r\n extensionModule?: ExtensionModule;\r\n registrationToken?: IDisposable;\r\n};\r\n\r\nconst InstalledExtensionsKey = \"Babylon/Extensions/InstalledExtensions\";\r\n\r\nconst ExtensionInstalledKeyPrefix = \"Babylon/Extensions/IsExtensionInstalled\";\r\nfunction GetExtensionInstalledKey(name: string): string {\r\n return `${ExtensionInstalledKeyPrefix}/${name}`;\r\n}\r\n\r\n/**\r\n * Represents a query for loaded extensions.\r\n */\r\nexport interface IExtensionQuery {\r\n /**\r\n * The total number of extensions that satisfy the query.\r\n */\r\n readonly totalCount: number;\r\n\r\n /**\r\n * Fetches a range of extensions from the query.\r\n * @param index The index of the first extension to fetch.\r\n * @param count The number of extensions to fetch.\r\n * @returns A promise that resolves to the extensions.\r\n */\r\n getExtensionsAsync(index: number, count: number): Promise<IExtension[]>;\r\n}\r\n\r\nfunction GetExtensionIdentity(feed: string, name: string) {\r\n return `${feed}|${name}`;\r\n}\r\n\r\n/**\r\n * Manages the installation, uninstallation, enabling, and disabling of extensions.\r\n */\r\nexport class ExtensionManager implements IDisposable {\r\n private readonly _installedExtensions = new Map<string, InstalledExtension>();\r\n\r\n private readonly _stateChangedHandlers = new Map<string, Set<() => void>>();\r\n\r\n private constructor(\r\n private readonly _serviceContainer: ServiceContainer,\r\n private readonly _feeds: readonly IExtensionFeed[],\r\n private readonly _onInstallFailed: (info: InstallFailedInfo) => void\r\n ) {}\r\n\r\n /**\r\n * Creates a new instance of the ExtensionManager.\r\n * This will automatically rehydrate previously installed and enabled extensions.\r\n * @param serviceContainer The service container to use.\r\n * @param feeds The extension feeds to include.\r\n * @param onInstallFailed A callback that is called when an extension installation fails.\r\n * @returns A promise that resolves to the new instance of the ExtensionManager.\r\n */\r\n public static async CreateAsync(\r\n serviceContainer: ServiceContainer,\r\n feeds: readonly IExtensionFeed[],\r\n onInstallFailed: (info: InstallFailedInfo) => void\r\n ): Promise<ExtensionManager> {\r\n const extensionManager = new ExtensionManager(serviceContainer, feeds, onInstallFailed);\r\n\r\n // Rehydrate installed extensions.\r\n const installedExtensionNames = JSON.parse(localStorage.getItem(InstalledExtensionsKey) ?? \"[]\") as string[];\r\n for (const installedExtensionName of installedExtensionNames) {\r\n const installedExtensionRaw = localStorage.getItem(GetExtensionInstalledKey(installedExtensionName));\r\n if (installedExtensionRaw) {\r\n const installedExtensionData = JSON.parse(installedExtensionRaw) as {\r\n feed: string;\r\n metadata: ExtensionMetadata;\r\n };\r\n\r\n const feed = feeds.find((feed) => feed.name === installedExtensionData.feed);\r\n if (feed) {\r\n const installedExtension = extensionManager._createInstalledExtension(installedExtensionData.metadata, feed);\r\n extensionManager._installedExtensions.set(installedExtension.metadata.name, installedExtension);\r\n }\r\n }\r\n }\r\n\r\n // Load installed and enabled extensions.\r\n const enablePromises: Promise<void>[] = [];\r\n for (const extension of extensionManager._installedExtensions.values()) {\r\n enablePromises.push(\r\n (async () => {\r\n try {\r\n await extensionManager._enableAsync(extension.metadata, false, false);\r\n } catch {\r\n // If enabling the extension fails, uninstall it. The extension install fail callback will still be called,\r\n // so the owner of the ExtensionManager instance can decide what to do with the error.\r\n await extensionManager._uninstallAsync(extension.metadata, false);\r\n }\r\n })()\r\n );\r\n }\r\n\r\n await Promise.all(enablePromises);\r\n\r\n return extensionManager;\r\n }\r\n\r\n /**\r\n * Gets the names of the feeds that are included in the extension manager.\r\n * @returns The names of the feeds.\r\n */\r\n public get feedNames() {\r\n return this._feeds.map((feed) => feed.name);\r\n }\r\n\r\n /**\r\n * Queries the extension manager for extensions.\r\n * @param filter The filter to apply to the query.\r\n * @param feeds The feeds to include in the query.\r\n * @param installedOnly Whether to only include installed extensions.\r\n * @returns A promise that resolves to the extension query.\r\n */\r\n public async queryExtensionsAsync(filter = \"\", feeds: string[] = this.feedNames, installedOnly = false): Promise<IExtensionQuery> {\r\n if (installedOnly) {\r\n const installedExtensions = Array.from(this._installedExtensions.values()).filter((installedExtension) => feeds.includes(installedExtension.feed.name));\r\n return {\r\n totalCount: installedExtensions.length,\r\n getExtensionsAsync: async (index, count) => {\r\n return installedExtensions.slice(index, index + count).map((installedExtension) => this._createExtension(installedExtension.metadata, installedExtension.feed));\r\n },\r\n };\r\n }\r\n\r\n const queries = await Promise.all(\r\n this._feeds.filter((feed) => feeds.includes(feed.name)).map(async (feed) => Object.assign(await feed.queryExtensionsAsync(filter), { feed }))\r\n );\r\n const totalCount = queries.reduce((sum, query) => sum + query.totalCount, 0);\r\n\r\n return {\r\n totalCount,\r\n getExtensionsAsync: async (index, count) => {\r\n const extensions = new Array<IExtension>();\r\n let remaining = count;\r\n\r\n for (const query of queries) {\r\n if (remaining <= 0) {\r\n break;\r\n }\r\n\r\n if (index >= query.totalCount) {\r\n index -= query.totalCount;\r\n continue;\r\n }\r\n\r\n // This is intentionally sequential as we are querying for results until the count of results is met.\r\n // eslint-disable-next-line no-await-in-loop\r\n const metadataSlice = await query.getExtensionMetadataAsync(index, remaining);\r\n extensions.push(...metadataSlice.map((metadata) => this._createExtension(metadata, query.feed)));\r\n remaining -= metadataSlice.length;\r\n index = 0;\r\n }\r\n\r\n return extensions;\r\n },\r\n };\r\n }\r\n\r\n /**\r\n * Disposes the extension manager.\r\n */\r\n public dispose() {\r\n for (const installedExtension of this._installedExtensions.values()) {\r\n // eslint-disable-next-line github/no-then\r\n this._disableAsync(installedExtension.metadata, false).catch((error) => {\r\n Logger.Warn(`Failed to disable extension ${installedExtension.metadata.name}: ${error}`);\r\n });\r\n }\r\n\r\n this._stateChangedHandlers.clear();\r\n }\r\n\r\n private async _installAsync(metadata: ExtensionMetadata, feed: IExtensionFeed, isNestedStateChange: boolean): Promise<InstalledExtension> {\r\n let installedExtension = this._installedExtensions.get(metadata.name);\r\n\r\n if (!installedExtension) {\r\n installedExtension = this._createInstalledExtension(metadata, feed);\r\n installedExtension.isStateChanging = true;\r\n this._installedExtensions.set(metadata.name, installedExtension);\r\n\r\n try {\r\n // Enable the extension.\r\n await this._enableAsync(metadata, true, true);\r\n } catch (error) {\r\n this._installedExtensions.delete(metadata.name);\r\n throw error;\r\n } finally {\r\n !isNestedStateChange && (installedExtension.isStateChanging = false);\r\n }\r\n\r\n // Mark the extension as being installed.\r\n localStorage.setItem(\r\n GetExtensionInstalledKey(GetExtensionIdentity(feed.name, metadata.name)),\r\n JSON.stringify({\r\n feed: feed.name,\r\n metadata,\r\n })\r\n );\r\n localStorage.setItem(\r\n InstalledExtensionsKey,\r\n JSON.stringify(Array.from(this._installedExtensions.values()).map((extension) => GetExtensionIdentity(extension.feed.name, extension.metadata.name)))\r\n );\r\n }\r\n\r\n return installedExtension;\r\n }\r\n\r\n private async _uninstallAsync(metadata: ExtensionMetadata, isNestedStateChange: boolean): Promise<void> {\r\n const installedExtension = this._installedExtensions.get(metadata.name);\r\n if (installedExtension && (isNestedStateChange || !installedExtension.isStateChanging)) {\r\n try {\r\n !isNestedStateChange && (installedExtension.isStateChanging = true);\r\n\r\n // Disable the extension.\r\n await this._disableAsync(metadata, true);\r\n\r\n // Remove the extension from in memory.\r\n this._installedExtensions.delete(metadata.name);\r\n\r\n // Mark the extension as being uninstalled.\r\n localStorage.removeItem(GetExtensionInstalledKey(GetExtensionIdentity(installedExtension.feed.name, metadata.name)));\r\n localStorage.setItem(InstalledExtensionsKey, JSON.stringify(Array.from(this._installedExtensions.keys())));\r\n } finally {\r\n !isNestedStateChange && (installedExtension.isStateChanging = false);\r\n }\r\n }\r\n }\r\n\r\n private async _enableAsync(metadata: ExtensionMetadata, isInitialInstall: boolean, isNestedStateChange: boolean): Promise<void> {\r\n const installedExtension = this._installedExtensions.get(metadata.name);\r\n if (installedExtension && (isNestedStateChange || !installedExtension.isStateChanging)) {\r\n try {\r\n !isNestedStateChange && (installedExtension.isStateChanging = true);\r\n\r\n // If we haven't done so already, load the extension module.\r\n if (!installedExtension.extensionModule) {\r\n installedExtension.extensionModule = await installedExtension.feed.getExtensionModuleAsync(metadata.name);\r\n }\r\n\r\n if (!installedExtension.extensionModule) {\r\n throw new Error(`Unable to load extension module for \"${metadata.name}\" from feed \"${installedExtension.feed.name}\".`);\r\n }\r\n\r\n // Register the ServiceDefinitions.\r\n let servicesRegistrationToken: Nullable<IDisposable> = null;\r\n if (installedExtension.extensionModule.default.serviceDefinitions) {\r\n servicesRegistrationToken = await this._serviceContainer.addServicesAsync(...installedExtension.extensionModule.default.serviceDefinitions);\r\n }\r\n\r\n // Create a registration token to for dispose.\r\n installedExtension.registrationToken = {\r\n dispose: () => {\r\n servicesRegistrationToken?.dispose();\r\n },\r\n };\r\n } catch (error: unknown) {\r\n this._onInstallFailed({\r\n extension: metadata,\r\n error,\r\n });\r\n throw error;\r\n } finally {\r\n !isNestedStateChange && (installedExtension.isStateChanging = false);\r\n }\r\n }\r\n }\r\n\r\n private async _disableAsync(metadata: ExtensionMetadata, isNestedStateChange: boolean): Promise<void> {\r\n const installedExtension = this._installedExtensions.get(metadata.name);\r\n if (installedExtension && (isNestedStateChange || !installedExtension.isStateChanging)) {\r\n try {\r\n !isNestedStateChange && (installedExtension.isStateChanging = true);\r\n\r\n // Unregister the service registrations.\r\n installedExtension.registrationToken?.dispose();\r\n } finally {\r\n !isNestedStateChange && (installedExtension.isStateChanging = false);\r\n }\r\n }\r\n }\r\n\r\n private _addStateChangedHandler(metadata: ExtensionMetadata, handler: () => void): IDisposable {\r\n let stateChangedHandlers = this._stateChangedHandlers.get(metadata.name);\r\n if (!stateChangedHandlers) {\r\n this._stateChangedHandlers.set(metadata.name, (stateChangedHandlers = new Set()));\r\n }\r\n\r\n stateChangedHandlers.add(handler);\r\n\r\n return {\r\n dispose: () => {\r\n stateChangedHandlers.delete(handler);\r\n if (stateChangedHandlers.size === 0) {\r\n this._stateChangedHandlers.delete(metadata.name);\r\n }\r\n },\r\n };\r\n }\r\n\r\n private _createExtension(metadata: ExtensionMetadata, feed: IExtensionFeed): IExtension {\r\n // eslint-disable-next-line @typescript-eslint/no-this-alias\r\n const extensionManager = this;\r\n return {\r\n metadata,\r\n get isStateChanging() {\r\n return extensionManager._installedExtensions.get(metadata.name)?.isStateChanging ?? false;\r\n },\r\n get isInstalled() {\r\n return extensionManager._installedExtensions.has(metadata.name);\r\n },\r\n installAsync: async () => {\r\n await extensionManager._installAsync(metadata, feed, false);\r\n },\r\n uninstallAsync: async () => await extensionManager._uninstallAsync(metadata, false),\r\n addStateChangedHandler: (handler: () => void) => extensionManager._addStateChangedHandler(metadata, handler),\r\n };\r\n }\r\n\r\n private _createInstalledExtension(metadata: ExtensionMetadata, feed: IExtensionFeed): InstalledExtension {\r\n // eslint-disable-next-line @typescript-eslint/no-this-alias\r\n const extensionManager = this;\r\n let isStateChanging = false;\r\n return {\r\n metadata,\r\n feed,\r\n get isStateChanging() {\r\n return isStateChanging;\r\n },\r\n set isStateChanging(value) {\r\n if (value !== isStateChanging) {\r\n isStateChanging = value;\r\n extensionManager._stateChangedHandlers.get(this.metadata.name)?.forEach((handler) => handler());\r\n }\r\n },\r\n };\r\n }\r\n}\r\n","import type { IDisposable } from \"core/index\";\r\n\r\nimport type { IService, ServiceDefinition } from \"./serviceDefinition\";\r\n\r\nimport { SortGraph } from \"../misc/graphUtils\";\r\n\r\n// Service definitions should strongly typed when they are defined to avoid programming errors. However, they are tracked internally\r\n// in a weakly typed manner so they can be handled generically.\r\nexport type WeaklyTypedServiceDefinition = Omit<ServiceDefinition<IService<symbol>[] | [], IService<symbol>[] | []>, \"factory\"> & {\r\n /**\r\n * A factory function responsible for creating a service instance.\r\n */\r\n factory: (...args: any) => ReturnType<ServiceDefinition<IService<symbol>[] | [], IService<symbol>[] | []>[\"factory\"]>;\r\n};\r\n\r\n// This sorts a set of service definitions based on their dependencies (e.g. a topological sort).\r\nfunction SortServiceDefinitions(serviceDefinitions: WeaklyTypedServiceDefinition[]) {\r\n const sortedServiceDefinitions: typeof serviceDefinitions = [];\r\n SortGraph(\r\n serviceDefinitions,\r\n function* (serviceDefinition) {\r\n // Check each dependency.\r\n for (const contractIdentity of serviceDefinition.consumes ?? []) {\r\n // If another service definition produces the dependency contract, return it as an adjacent node for the purpose of sorting.\r\n yield* serviceDefinitions.filter((otherServiceDefinition) => (otherServiceDefinition.produces ?? []).includes(contractIdentity));\r\n }\r\n },\r\n sortedServiceDefinitions.push.bind(sortedServiceDefinitions)\r\n );\r\n return sortedServiceDefinitions;\r\n}\r\n\r\n/**\r\n * A service container manages the lifetimes of a set of services.\r\n * It takes care of instantiating the services in the correct order based on their dependencies,\r\n * passing dependencies through to services, and disposing of services when the container is disposed.\r\n */\r\nexport class ServiceContainer implements IDisposable {\r\n private _isDisposed = false;\r\n private readonly _serviceDefinitions = new Map<symbol, WeaklyTypedServiceDefinition>();\r\n private readonly _serviceDependents = new Map<WeaklyTypedServiceDefinition, Set<WeaklyTypedServiceDefinition>>();\r\n private readonly _serviceInstances = new Map<WeaklyTypedServiceDefinition, (IService<symbol> & Partial<IDisposable>) | void>();\r\n\r\n public constructor(private readonly _friendlyName: string) {}\r\n\r\n /**\r\n * Adds a set of service definitions in the service container.\r\n * The services are sorted based on their dependencies.\r\n * @param args The service definitions to register, and optionally an abort signal.\r\n * @returns A disposable that will remove the service definition from the service container.\r\n */\r\n public async addServicesAsync(\r\n ...args: WeaklyTypedServiceDefinition[] | [...serviceDefinitions: WeaklyTypedServiceDefinition[], abortSignal: AbortSignal]\r\n ): Promise<IDisposable> {\r\n if (this._isDisposed) {\r\n throw new Error(\"ServiceContainer is disposed.\");\r\n }\r\n\r\n const abortSignal = args[args.length - 1] instanceof AbortSignal ? (args.pop() as AbortSignal) : undefined;\r\n const serviceDefinitions = args as WeaklyTypedServiceDefinition[];\r\n\r\n const sortedServiceDefinitions = SortServiceDefinitions(serviceDefinitions);\r\n\r\n const dispose = () => {\r\n for (const serviceDefinition of sortedServiceDefinitions.reverse()) {\r\n this._removeService(serviceDefinition);\r\n }\r\n };\r\n\r\n try {\r\n for (const serviceDefinition of sortedServiceDefinitions) {\r\n // We could possibly optimize this by allowing some parallel initialization of services, but this would be way more complex, so let's wait and see if it's needed.\r\n // eslint-disable-next-line no-await-in-loop\r\n await this._addServiceAsync(serviceDefinition, abortSignal);\r\n }\r\n } catch (error: unknown) {\r\n dispose();\r\n throw error;\r\n }\r\n\r\n return {\r\n dispose,\r\n };\r\n }\r\n\r\n /**\r\n * Registers a service definition in the service container.\r\n * @param serviceDefinition The service definition to register.\r\n * @param abortSignal An optional abort signal.\r\n * @returns A disposable that will remove the service definition from the service container.\r\n */\r\n public async addServiceAsync<Produces extends IService<symbol>[] = [], Consumes extends IService<symbol>[] = []>(\r\n serviceDefinition: ServiceDefinition<Produces, Consumes>,\r\n abortSignal?: AbortSignal\r\n ): Promise<IDisposable> {\r\n if (abortSignal) {\r\n return await this.addServicesAsync(serviceDefinition, abortSignal);\r\n } else {\r\n return await this.addServicesAsync(serviceDefinition);\r\n }\r\n }\r\n\r\n private async _addServiceAsync(service: WeaklyTypedServiceDefinition, abortSignal?: AbortSignal) {\r\n if (this._isDisposed) {\r\n throw new Error(`'${this._friendlyName}' container is disposed.`);\r\n }\r\n\r\n service.produces?.forEach((contract) => {\r\n if (this._serviceDefinitions.has(contract)) {\r\n throw new Error(`A service producing the contract '${contract.toString()}' has already been added to this '${this._friendlyName}' container.`);\r\n }\r\n });\r\n\r\n service.produces?.forEach((contract) => {\r\n this._serviceDefinitions.set(contract, service);\r\n });\r\n\r\n const dependencies =\r\n service.consumes?.map((dependency) => {\r\n const dependencyDefinition = this._serviceDefinitions.get(dependency);\r\n if (!dependencyDefinition) {\r\n throw new Error(`Service '${dependency.toString()}' has not been registered in the '${this._friendlyName}' container.`);\r\n }\r\n\r\n let dependentDefinitions = this._serviceDependents.get(dependencyDefinition);\r\n if (!dependentDefinitions) {\r\n this._serviceDependents.set(dependencyDefinition, (dependentDefinitions = new Set()));\r\n }\r\n dependentDefinitions.add(service);\r\n\r\n const dependencyInstance = this._serviceInstances.get(dependencyDefinition);\r\n if (!dependencyInstance) {\r\n throw new Error(`Service '${dependency.toString()}' has not been instantiated in the '${this._friendlyName}' container.`);\r\n }\r\n\r\n return dependencyInstance;\r\n }) ?? [];\r\n\r\n this._serviceInstances.set(service, await service.factory(...dependencies, abortSignal));\r\n }\r\n\r\n private _removeService(service: WeaklyTypedServiceDefinition) {\r\n if (this._isDisposed) {\r\n throw new Error(`'${this._friendlyName}' container is disposed.`);\r\n }\r\n\r\n const serviceDependents = this._serviceDependents.get(service);\r\n if (serviceDependents) {\r\n throw new Error(\r\n `Service '${service.friendlyName}' has dependents: ${Array.from(serviceDependents)\r\n .map((dependent) => dependent.friendlyName)\r\n .join(\", \")}`\r\n );\r\n }\r\n\r\n // NOTE: The service instance could be undefined, as the service factory for a service that does not produce any contracts is not required to return an actual service instance.\r\n const serviceInstance = this._serviceInstances.get(service);\r\n this._serviceInstances.delete(service);\r\n serviceInstance?.dispose?.();\r\n\r\n service.produces?.forEach((contract) => {\r\n this._serviceDefinitions.delete(contract);\r\n });\r\n\r\n service.consumes?.forEach((dependency) => {\r\n const dependencyDefinition = this._serviceDefinitions.get(dependency);\r\n if (dependencyDefinition) {\r\n const dependentDefinitions = this._serviceDependents.get(dependencyDefinition);\r\n if (dependentDefinitions) {\r\n dependentDefinitions.delete(service);\r\n if (dependentDefinitions.size === 0) {\r\n this._serviceDependents.delete(dependencyDefinition);\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Disposes the service container and all contained services.\r\n */\r\n public dispose() {\r\n Array.from(this._serviceInstances.keys()).reverse().forEach(this._removeService.bind(this));\r\n this._serviceInstances.clear();\r\n this._serviceDependents.clear();\r\n this._serviceDefinitions.clear();\r\n this._isDisposed = true;\r\n }\r\n}\r\n","import type { SelectTabData, SelectTabEvent } from \"@fluentui/react-components\";\r\nimport type { FunctionComponent } from \"react\";\r\nimport type { IExtension } from \"../extensibility/extensionManager\";\r\nimport type { ServiceDefinition } from \"../modularity/serviceDefinition\";\r\nimport type { IShellService } from \"./shellService\";\r\n\r\nimport {\r\n Accordion,\r\n AccordionHeader,\r\n AccordionItem,\r\n AccordionPanel,\r\n Body1,\r\n Body1Strong,\r\n Button,\r\n Dialog,\r\n DialogBody,\r\n DialogContent,\r\n DialogSurface,\r\n DialogTitle,\r\n DialogTrigger,\r\n makeStyles,\r\n Spinner,\r\n Tab,\r\n TabList,\r\n tokens,\r\n Tooltip,\r\n} from \"@fluentui/react-components\";\r\nimport { AppsAddInRegular, DismissRegular } from \"@fluentui/react-icons\";\r\nimport { memo, useCallback, useEffect, useState } from \"react\";\r\n\r\nimport { Logger } from \"core/Misc/logger\";\r\n\r\nimport { TeachingMoment } from \"../components/teachingMoment\";\r\nimport { useExtensionManager } from \"../contexts/extensionManagerContext\";\r\nimport { MakePopoverTeachingMoment } from \"../hooks/teachingMomentHooks\";\r\nimport { ShellServiceIdentity } from \"./shellService\";\r\n\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nconst useStyles = makeStyles({\r\n extensionButton: {},\r\n extensionsDialogSurface: {\r\n height: \"auto\",\r\n width: \"70vw\",\r\n maxWidth: \"600px\",\r\n maxHeight: \"70vh\",\r\n },\r\n extensionDialogBody: {\r\n maxWidth: \"100%\",\r\n maxHeight: \"100%\",\r\n },\r\n extensionDialogContent: {\r\n marginLeft: `calc(-1 * ${tokens.spacingHorizontalM})`,\r\n marginRight: `calc(-1 * ${tokens.spacingHorizontalS})`,\r\n },\r\n extensionHeader: {},\r\n extensionItem: {},\r\n extensionPanel: {\r\n padding: `${tokens.spacingVerticalS} ${tokens.spacingHorizontalS}`,\r\n backgroundColor: tokens.colorNeutralBackground2,\r\n },\r\n extensionIntro: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n columnGap: tokens.spacingHorizontalM,\r\n },\r\n extensionDescription: {\r\n padding: `${tokens.spacingVerticalM} 0`,\r\n },\r\n extensionButtonContainer: {\r\n display: \"flex\",\r\n columnGap: tokens.spacingHorizontalS,\r\n },\r\n spinner: {\r\n animationDuration: \"1s\",\r\n animationName: {\r\n from: { opacity: 0 },\r\n to: { opacity: 1 },\r\n },\r\n },\r\n});\r\n\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nconst useTeachingMoment = MakePopoverTeachingMoment(\"Extensions\");\r\n\r\nconst ExtensionDetails: FunctionComponent<{ extension: IExtension }> = memo((props) => {\r\n const classes = useStyles();\r\n\r\n const [canInstall, setCanInstall] = useState(false);\r\n const [canUninstall, setCanUninstall] = useState(false);\r\n const [isStateChanging, setIsStateChanging] = useState(false);\r\n\r\n useEffect(() => {\r\n const extension = props.extension;\r\n const updateState = () => {\r\n setCanInstall(!extension.isInstalled && !extension.isStateChanging);\r\n setCanUninstall(extension.isInstalled && !extension.isStateChanging);\r\n setIsStateChanging(extension.isStateChanging);\r\n };\r\n\r\n const stateChangedHandlerRegistration = extension.addStateChangedHandler(updateState);\r\n updateState();\r\n\r\n return stateChangedHandlerRegistration.dispose;\r\n }, [props.extension]);\r\n\r\n const install = useCallback(async () => {\r\n try {\r\n await props.extension.installAsync();\r\n } catch {\r\n // Ignore errors. Other parts of the infrastructure handle them and communicate them to the user.\r\n }\r\n }, [props.extension]);\r\n\r\n const uninstall = useCallback(async () => {\r\n try {\r\n await props.extension.uninstallAsync();\r\n } catch {\r\n // Ignore errors. Other parts of the infrastructure handle them and communicate them to the user.\r\n }\r\n }, [props.extension]);\r\n\r\n return (\r\n <>\r\n <div className={classes.extensionDescription}>\r\n <Body1>{props.extension.metadata.description}</Body1>\r\n </div>\r\n\r\n <div className={classes.extensionButtonContainer}>\r\n {canInstall && (\r\n <Button appearance=\"primary\" size=\"small\" onClick={install}>\r\n Install\r\n </Button>\r\n )}\r\n {canUninstall && (\r\n <Button appearance=\"primary\" size=\"small\" onClick={uninstall}>\r\n Uninstall\r\n </Button>\r\n )}\r\n {isStateChanging && <Spinner className={classes.spinner} size=\"extra-small\" />}\r\n </div>\r\n </>\r\n );\r\n});\r\n\r\ntype TabValue = \"available\" | \"installed\";\r\n\r\nexport const ExtensionListServiceDefinition: ServiceDefinition<[], [IShellService]> = {\r\n friendlyName: \"ExtensionList\",\r\n consumes: [ShellServiceIdentity],\r\n factory: (shellService) => {\r\n const registration = shellService.addToolbarItem({\r\n key: \"ExtensionList\",\r\n horizontalLocation: \"right\",\r\n verticalLocation: \"top\",\r\n suppressTeachingMoment: true,\r\n order: -200,\r\n component: () => {\r\n const classes = useStyles();\r\n\r\n const [selectedTab, setSelectedTab] = useState<TabValue>(\"available\");\r\n const extensionManager = useExtensionManager();\r\n const [extensions, setExtensions] = useState<IExtension[]>([]);\r\n\r\n useEffect(() => {\r\n if (extensionManager) {\r\n const populateExtensionsAsync = async () => {\r\n const query = await extensionManager.queryExtensionsAsync(undefined, undefined, selectedTab === \"installed\");\r\n const extensions = await query.getExtensionsAsync(0, query.totalCount);\r\n setExtensions(extensions);\r\n };\r\n\r\n // eslint-disable-next-line github/no-then\r\n populateExtensionsAsync().catch((error) => {\r\n Logger.Warn(`Failed to populate extensions: ${error}`);\r\n });\r\n }\r\n }, [extensionManager, selectedTab]);\r\n\r\n const teachingMoment = useTeachingMoment();\r\n\r\n return (\r\n <>\r\n <TeachingMoment\r\n {...teachingMoment}\r\n title=\"Extensions\"\r\n description=\"Extensions provide new optional features that can be useful to your specific task or workflow. Click this button to manage extensions.\"\r\n />\r\n <Dialog>\r\n <DialogTrigger disableButtonEnhancement>\r\n <Tooltip content=\"Manage Extensions\" relationship=\"label\">\r\n <Button ref={teachingMoment.targetRef} className={classes.extensionButton} appearance=\"subtle\" icon={<AppsAddInRegular />} />\r\n </Tooltip>\r\n </DialogTrigger>\r\n <DialogSurface className={classes.extensionsDialogSurface}>\r\n <DialogBody className={classes.extensionDialogBody}>\r\n <DialogTitle\r\n action={\r\n <DialogTrigger action=\"close\">\r\n <Button appearance=\"subtle\" aria-label=\"close\" icon={<DismissRegular />} />\r\n </DialogTrigger>\r\n }\r\n >\r\n <>\r\n Extensions\r\n <TabList\r\n className={classes.extensionDialogContent}\r\n selectedValue={selectedTab}\r\n onTabSelect={(event: SelectTabEvent, data: SelectTabData) => {\r\n setSelectedTab(data.value as TabValue);\r\n }}\r\n >\r\n <Tab value={\"available\" satisfies TabValue}>Available</Tab>\r\n <Tab value={\"installed\" satisfies TabValue}>Installed</Tab>\r\n </TabList>\r\n </>\r\n </DialogTitle>\r\n <DialogContent className={classes.extensionDialogContent}>\r\n {/* <ProgressBar /> */}\r\n <Accordion collapsible>\r\n {extensions.map((extension) => (\r\n <AccordionItem className={classes.extensionItem} key={extension.metadata.name} value={extension.metadata.name}>\r\n <AccordionHeader className={classes.extensionHeader} expandIconPosition=\"end\">\r\n <Body1Strong>{extension.metadata.name}</Body1Strong>\r\n </AccordionHeader>\r\n <AccordionPanel className={classes.extensionPanel}>\r\n <ExtensionDetails extension={extension} />\r\n </AccordionPanel>\r\n </AccordionItem>\r\n ))}\r\n </Accordion>\r\n </DialogContent>\r\n </DialogBody>\r\n </DialogSurface>\r\n </Dialog>\r\n </>\r\n );\r\n },\r\n });\r\n\r\n return {\r\n dispose: () => registration.dispose(),\r\n };\r\n },\r\n};\r\n","import type { MenuButtonProps, MenuCheckedValueChangeData, MenuCheckedValueChangeEvent } from \"@fluentui/react-components\";\r\nimport type { TernaryDarkMode } from \"usehooks-ts\";\r\nimport type { ServiceDefinition } from \"../modularity/serviceDefinition\";\r\nimport type { IShellService } from \"../services/shellService\";\r\n\r\nimport { makeStyles, Menu, MenuItemRadio, MenuList, MenuPopover, MenuTrigger, SplitButton, tokens, Tooltip } from \"@fluentui/react-components\";\r\nimport { WeatherMoonRegular, WeatherSunnyRegular } from \"@fluentui/react-icons\";\r\nimport { useCallback } from \"react\";\r\n\r\nimport { useThemeMode } from \"../hooks/themeHooks\";\r\nimport { ShellServiceIdentity } from \"../services/shellService\";\r\n\r\nconst useStyles = makeStyles({\r\n themeButton: {\r\n margin: `${tokens.spacingVerticalXXS} 0`,\r\n },\r\n themeMenuPopover: {\r\n minWidth: 0,\r\n },\r\n});\r\n\r\nexport const ThemeSelectorServiceDefinition: ServiceDefinition<[], [IShellService]> = {\r\n friendlyName: \"ThemeSelector\",\r\n consumes: [ShellServiceIdentity],\r\n factory: (shellService) => {\r\n const registration = shellService.addToolbarItem({\r\n key: \"ThemeSelector\",\r\n horizontalLocation: \"right\",\r\n verticalLocation: \"top\",\r\n suppressTeachingMoment: true,\r\n order: -300,\r\n component: () => {\r\n const classes = useStyles();\r\n\r\n const { isDarkMode, themeMode, setThemeMode } = useThemeMode();\r\n\r\n const onSelectedThemeChange = useCallback((e: MenuCheckedValueChangeEvent, data: MenuCheckedValueChangeData) => {\r\n setThemeMode(data.checkedItems.includes(\"System\") ? \"system\" : (data.checkedItems[0].toLocaleLowerCase() as TernaryDarkMode));\r\n }, []);\r\n\r\n const toggleTheme = useCallback(() => {\r\n setThemeMode(isDarkMode ? \"light\" : \"dark\");\r\n }, [isDarkMode]);\r\n\r\n return (\r\n <Menu positioning=\"below-end\" checkedValues={{ theme: [themeMode] }} onCheckedValueChange={onSelectedThemeChange}>\r\n <MenuTrigger disableButtonEnhancement={true}>\r\n {(triggerProps: MenuButtonProps) => (\r\n <Tooltip content=\"Select Theme\" relationship=\"label\">\r\n <SplitButton\r\n className={classes.themeButton}\r\n menuButton={triggerProps}\r\n primaryActionButton={{ onClick: toggleTheme }}\r\n size=\"small\"\r\n appearance=\"transparent\"\r\n shape=\"circular\"\r\n icon={isDarkMode ? <WeatherSunnyRegular /> : <WeatherMoonRegular />}\r\n ></SplitButton>\r\n </Tooltip>\r\n )}\r\n </MenuTrigger>\r\n\r\n <MenuPopover className={classes.themeMenuPopover}>\r\n <MenuList>\r\n <MenuItemRadio name=\"theme\" value={\"system\" satisfies TernaryDarkMode}>\r\n System\r\n </MenuItemRadio>\r\n <MenuItemRadio name=\"theme\" value={\"light\" satisfies TernaryDarkMode}>\r\n Light\r\n </MenuItemRadio>\r\n <MenuItemRadio name=\"theme\" value={\"dark\" satisfies TernaryDarkMode}>\r\n Dark\r\n </MenuItemRadio>\r\n </MenuList>\r\n </MenuPopover>\r\n </Menu>\r\n );\r\n },\r\n });\r\n\r\n return {\r\n dispose: () => registration.dispose(),\r\n };\r\n },\r\n};\r\n","import type { ComponentType, FunctionComponent } from \"react\";\r\nimport type { TernaryDarkMode } from \"usehooks-ts\";\r\n\r\nimport type { IDisposable } from \"core/index\";\r\nimport type { IExtensionFeed } from \"./extensibility/extensionFeed\";\r\nimport type { IExtension, InstallFailedInfo } from \"./extensibility/extensionManager\";\r\nimport type { WeaklyTypedServiceDefinition } from \"./modularity/serviceContainer\";\r\nimport type { IRootComponentService, ShellServiceOptions } from \"./services/shellService\";\r\n\r\nimport {\r\n Body1,\r\n Button,\r\n Dialog,\r\n DialogActions,\r\n DialogBody,\r\n DialogContent,\r\n DialogSurface,\r\n DialogTitle,\r\n List,\r\n ListItem,\r\n makeStyles,\r\n Spinner,\r\n tokens,\r\n} from \"@fluentui/react-components\";\r\nimport { ErrorCircleRegular } from \"@fluentui/react-icons\";\r\nimport { createElement, Suspense, useCallback, useEffect, useState } from \"react\";\r\nimport { createRoot } from \"react-dom/client\";\r\n\r\nimport { Deferred } from \"core/Misc/deferred\";\r\nimport { Logger } from \"core/Misc/logger\";\r\nimport { Theme } from \"./components/theme\";\r\nimport { ExtensionManagerContext } from \"./contexts/extensionManagerContext\";\r\nimport { ExtensionManager } from \"./extensibility/extensionManager\";\r\nimport { SetThemeMode } from \"./hooks/themeHooks\";\r\nimport { ServiceContainer } from \"./modularity/serviceContainer\";\r\nimport { ExtensionListServiceDefinition } from \"./services/extensionsListService\";\r\nimport { MakeShellServiceDefinition, RootComponentServiceIdentity } from \"./services/shellService\";\r\nimport { ThemeSelectorServiceDefinition } from \"./services/themeSelectorService\";\r\n\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nconst useStyles = makeStyles({\r\n app: {\r\n colorScheme: \"light dark\",\r\n flexGrow: 1,\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n },\r\n spinner: {\r\n flexGrow: 1,\r\n animationDuration: \"1s\",\r\n animationName: {\r\n from: { opacity: 0 },\r\n to: { opacity: 1 },\r\n },\r\n },\r\n extensionErrorTitleDiv: {\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n alignItems: \"center\",\r\n gap: tokens.spacingHorizontalS,\r\n },\r\n extensionErrorIcon: {\r\n color: tokens.colorPaletteRedForeground1,\r\n },\r\n});\r\n\r\nexport type ModularToolOptions = {\r\n /**\r\n * The container element where the tool will be rendered.\r\n */\r\n containerElement: HTMLElement;\r\n\r\n /**\r\n * The service definitions to be registered with the tool.\r\n */\r\n serviceDefinitions: readonly WeaklyTypedServiceDefinition[];\r\n\r\n /**\r\n * The theme mode to use. If not specified, the default is \"system\", which uses the system/browser preference, and the last used mode is persisted.\r\n */\r\n themeMode?: TernaryDarkMode;\r\n\r\n /**\r\n * Whether to show the theme selector in the toolbar. Default is true.\r\n */\r\n showThemeSelector?: boolean;\r\n\r\n /**\r\n * The extension feeds that provide optional extensions the user can install.\r\n */\r\n extensionFeeds?: readonly IExtensionFeed[];\r\n} & ShellServiceOptions;\r\n\r\n/**\r\n * Creates a modular tool with a base set of common tool services, including the toolbar/side pane basic UI layout.\r\n * @param options The options for the tool.\r\n * @returns A token that can be used to dispose of the tool.\r\n */\r\nexport function MakeModularTool(options: ModularToolOptions): IDisposable {\r\n const { containerElement, serviceDefinitions, themeMode, showThemeSelector = true, extensionFeeds = [] } = options;\r\n if (themeMode) {\r\n SetThemeMode(themeMode);\r\n }\r\n\r\n const modularToolRootComponent: FunctionComponent = () => {\r\n const classes = useStyles();\r\n const [extensionManagerContext, setExtensionManagerContext] = useState<ExtensionManagerContext>();\r\n const [requiredExtensions, setRequiredExtensions] = useState<string[]>();\r\n const [requiredExtensionsDeferred, setRequiredExtensionsDeferred] = useState<Deferred<boolean>>();\r\n const [extensionInstallError, setExtensionInstallError] = useState<InstallFailedInfo>();\r\n\r\n const [rootComponent, setRootComponent] = useState<ComponentType>();\r\n\r\n // This is the main async initialization.\r\n useEffect(() => {\r\n const initializeExtensionManagerAsync = async () => {\r\n const serviceContainer = new ServiceContainer(\"ModularToolContainer\");\r\n\r\n // Register the shell service (top level toolbar/side pane UI layout).\r\n await serviceContainer.addServiceAsync(MakeShellServiceDefinition(options));\r\n\r\n // Register a service that simply consumes the IRootComponentService and sets the root component as state so it can be rendered.\r\n await serviceContainer.addServiceAsync<[], [IRootComponentService]>({\r\n friendlyName: \"Root Component Bootstrapper\",\r\n consumes: [RootComponentServiceIdentity],\r\n factory: (rootComponentService) => {\r\n // Use function syntax for the state setter since the root component may be a function component.\r\n setRootComponent(() => rootComponentService.rootComponent);\r\n return {\r\n dispose: () => setRootComponent(undefined),\r\n };\r\n },\r\n });\r\n\r\n // Register the extension list service (for browsing/installing extensions) if extension feeds are provided.\r\n if (extensionFeeds.length > 0) {\r\n await serviceContainer.addServiceAsync(ExtensionListServiceDefinition);\r\n }\r\n\r\n // Register the theme selector service (for selecting the theme) if theming is configured.\r\n if (showThemeSelector) {\r\n await serviceContainer.addServiceAsync(ThemeSelectorServiceDefinition);\r\n }\r\n\r\n // Register all external services (that make up a unique tool).\r\n await serviceContainer.addServicesAsync(...serviceDefinitions);\r\n\r\n // Create the extension manager, passing along the registry for runtime changes to the registered services.\r\n const extensionManager = await ExtensionManager.CreateAsync(serviceContainer, extensionFeeds, setExtensionInstallError);\r\n\r\n // Check query params for required extensions. This lets users share links with sets of extensions.\r\n const queryParams = new URLSearchParams(window.location.search);\r\n const requiredExtensions = queryParams.getAll(\"babylon.requiredExtension\");\r\n const uninstalledExtensions: IExtension[] = [];\r\n for (const requiredExtension of requiredExtensions) {\r\n // These could possibly be parallelized to speed things up, but it's more complex so let's wait and see if we need it.\r\n // eslint-disable-next-line no-await-in-loop\r\n const query = await extensionManager.queryExtensionsAsync(requiredExtension);\r\n // eslint-disable-next-line no-await-in-loop\r\n const extensions = await query.getExtensionsAsync(0, query.totalCount);\r\n for (const extension of extensions) {\r\n if (!extension.isInstalled) {\r\n uninstalledExtensions.push(extension);\r\n }\r\n }\r\n }\r\n\r\n // Check if any required extensions are uninstalled or disabled. If so, show a dialog to the user.\r\n if (uninstalledExtensions.length > 0) {\r\n setRequiredExtensions(uninstalledExtensions.map((extension) => extension.metadata.name));\r\n const deferred = new Deferred<boolean>();\r\n setRequiredExtensionsDeferred(deferred);\r\n if (await deferred.promise) {\r\n for (const extension of uninstalledExtensions) {\r\n // This could possibly be parallelized to speed things up, but it's more complex so let's wait and see if we need it.\r\n // eslint-disable-next-line no-await-in-loop\r\n await extension.installAsync();\r\n }\r\n }\r\n }\r\n\r\n // Set the contexts.\r\n setExtensionManagerContext({ extensionManager });\r\n\r\n return () => {\r\n extensionManager.dispose();\r\n serviceContainer.dispose();\r\n serviceContainer.dispose();\r\n };\r\n };\r\n\r\n const disposePromise = initializeExtensionManagerAsync();\r\n\r\n return () => {\r\n disposePromise\r\n // eslint-disable-next-line github/no-then\r\n .then((dispose) => dispose())\r\n // eslint-disable-next-line github/no-then\r\n .catch((error) => {\r\n Logger.Error(`Failed to dispose of the modular tool: ${error}`);\r\n });\r\n };\r\n }, []);\r\n\r\n const onAcceptRequiredExtensions = useCallback(() => {\r\n setRequiredExtensions(undefined);\r\n requiredExtensionsDeferred?.resolve(true);\r\n }, [setRequiredExtensions, requiredExtensionsDeferred]);\r\n\r\n const onRejectRequiredExtensions = useCallback(() => {\r\n setRequiredExtensions(undefined);\r\n requiredExtensionsDeferred?.resolve(false);\r\n }, [setRequiredExtensions, requiredExtensionsDeferred]);\r\n\r\n const onAcknowledgedExtensionInstallError = useCallback(() => {\r\n setExtensionInstallError(undefined);\r\n }, [setExtensionInstallError]);\r\n\r\n // Show a spinner until a main view has been set.\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n const Content: ComponentType = rootComponent ?? (() => <Spinner className={classes.spinner} />);\r\n\r\n return (\r\n <ExtensionManagerContext.Provider value={extensionManagerContext}>\r\n <Theme className={classes.app}>\r\n <>\r\n <Dialog open={!!requiredExtensions} modalType=\"alert\">\r\n <DialogSurface>\r\n <DialogBody>\r\n <DialogTitle>Required Extensions</DialogTitle>\r\n <DialogContent>\r\n Opening this URL requires the following extensions to be installed and enabled:\r\n <ul>{requiredExtensions?.map((name) => <li key={name}>{name}</li>)}</ul>\r\n </DialogContent>\r\n <DialogActions>\r\n <Button appearance=\"primary\" onClick={onAcceptRequiredExtensions}>\r\n Install & Enable\r\n </Button>\r\n <Button appearance=\"secondary\" onClick={onRejectRequiredExtensions}>\r\n No Thanks\r\n </Button>\r\n </DialogActions>\r\n </DialogBody>\r\n </DialogSurface>\r\n </Dialog>\r\n <Dialog open={!!extensionInstallError} modalType=\"alert\">\r\n <DialogSurface>\r\n <DialogBody>\r\n <DialogTitle>\r\n <div className={classes.extensionErrorTitleDiv}>\r\n Extension Install Error\r\n <ErrorCircleRegular className={classes.extensionErrorIcon} />\r\n </div>\r\n </DialogTitle>\r\n <DialogContent>\r\n <List>\r\n <ListItem>\r\n <Body1>{`Extension \"${extensionInstallError?.extension.name}\" failed to install and was removed.`}</Body1>\r\n </ListItem>\r\n <ListItem>\r\n <Body1>{`${extensionInstallError?.error}`}</Body1>\r\n </ListItem>\r\n </List>\r\n </DialogContent>\r\n <DialogActions>\r\n <Button appearance=\"primary\" onClick={onAcknowledgedExtensionInstallError}>\r\n Close\r\n </Button>\r\n </DialogActions>\r\n </DialogBody>\r\n </DialogSurface>\r\n </Dialog>\r\n <Suspense fallback={<Spinner className={classes.spinner} />}>\r\n <Content />\r\n </Suspense>\r\n </>\r\n </Theme>\r\n </ExtensionManagerContext.Provider>\r\n );\r\n };\r\n\r\n // Set the container element to be a flex container so that the tool can be displayed properly.\r\n const originalContainerElementDisplay = containerElement.style.display;\r\n containerElement.style.display = \"flex\";\r\n\r\n // Create and render the react root component.\r\n const reactRoot = createRoot(containerElement);\r\n reactRoot.render(createElement(modularToolRootComponent));\r\n\r\n return {\r\n dispose: () => {\r\n // Unmount and restore the original container element display.\r\n reactRoot.unmount();\r\n containerElement.style.display = originalContainerElementDisplay;\r\n },\r\n };\r\n}\r\n","import type { Camera, Gizmo, IDisposable, Light, Node, Scene } from \"core/index\";\r\nimport type { IService, ServiceDefinition } from \"../modularity/serviceDefinition\";\r\n\r\nimport { FrameGraphUtils } from \"core/FrameGraph/frameGraphUtils\";\r\nimport { CameraGizmo } from \"core/Gizmos/cameraGizmo\";\r\nimport { LightGizmo } from \"core/Gizmos/lightGizmo\";\r\nimport { UtilityLayerRenderer } from \"core/Rendering/utilityLayerRenderer\";\r\n\r\ntype Reference<T> = {\r\n value: T;\r\n} & IDisposable;\r\n\r\nexport const GizmoServiceIdentity = Symbol(\"GizmoService\");\r\n\r\nexport interface IGizmoService extends IService<typeof GizmoServiceIdentity> {\r\n getUtilityLayer(scene: Scene, layer?: string): Reference<UtilityLayerRenderer>;\r\n getCameraGizmo(camera: Camera): Reference<CameraGizmo>;\r\n getLightGizmo(light: Light): Reference<LightGizmo>;\r\n getCameraGizmos(scene: Scene): readonly CameraGizmo[];\r\n getLightGizmos(scene: Scene): readonly LightGizmo[];\r\n}\r\n\r\nexport const GizmoServiceDefinition: ServiceDefinition<[IGizmoService], []> = {\r\n friendlyName: \"Gizmo Service\",\r\n produces: [GizmoServiceIdentity],\r\n factory: () => {\r\n const utilityLayers = new WeakMap<Scene, Map<string, { utilityLayer: UtilityLayerRenderer; refCount: number }>>();\r\n const getUtilityLayer = (scene: Scene, layer = \"default\") => {\r\n let utilityLayerInfoForScene = utilityLayers.get(scene);\r\n if (!utilityLayerInfoForScene) {\r\n utilityLayerInfoForScene = new Map();\r\n utilityLayers.set(scene, utilityLayerInfoForScene);\r\n }\r\n let utilityLayerInfo = utilityLayerInfoForScene.get(layer);\r\n if (!utilityLayerInfo) {\r\n const utilityLayer = scene.frameGraph ? FrameGraphUtils.CreateUtilityLayerRenderer(scene.frameGraph) : new UtilityLayerRenderer(scene);\r\n utilityLayerInfo = { utilityLayer, refCount: 0 };\r\n utilityLayerInfoForScene.set(layer, utilityLayerInfo);\r\n }\r\n\r\n utilityLayerInfo.refCount++;\r\n\r\n let disposed = false;\r\n return {\r\n value: utilityLayerInfo.utilityLayer,\r\n dispose: () => {\r\n if (!disposed) {\r\n disposed = true;\r\n utilityLayerInfo.refCount--;\r\n if (utilityLayerInfo.refCount === 0) {\r\n utilityLayerInfo.utilityLayer.dispose();\r\n utilityLayerInfoForScene.delete(layer);\r\n if (utilityLayerInfoForScene.size === 0) {\r\n utilityLayers.delete(scene);\r\n }\r\n }\r\n }\r\n },\r\n } satisfies Reference<UtilityLayerRenderer>;\r\n };\r\n\r\n function getGizmo<NodeT extends Node, GizmoT extends Gizmo>(\r\n node: NodeT,\r\n scene: Scene,\r\n gizmoClass: new (...args: ConstructorParameters<typeof Gizmo>) => GizmoT,\r\n gizmoMap: WeakMap<NodeT, { gizmo: GizmoT; refCount: number }>,\r\n onGizmoCreated: (node: NodeT, gizmo: GizmoT) => void\r\n ) {\r\n let refCountedGizmo = gizmoMap.get(node);\r\n\r\n if (!refCountedGizmo) {\r\n const utilityLayerRef = getUtilityLayer(scene);\r\n const gizmo = new gizmoClass(utilityLayerRef.value);\r\n onGizmoCreated(node, gizmo);\r\n const nodeDisposedObserver = node.onDisposeObservable.addOnce(() => gizmo.dispose());\r\n const disposeGizmo = gizmo.dispose.bind(gizmo);\r\n gizmo.dispose = () => {\r\n nodeDisposedObserver.remove();\r\n disposeGizmo();\r\n utilityLayerRef.dispose();\r\n };\r\n refCountedGizmo = { gizmo, refCount: 0 };\r\n gizmoMap.set(node, refCountedGizmo);\r\n onGizmoCreated(node, gizmo);\r\n }\r\n\r\n refCountedGizmo.refCount++;\r\n\r\n let disposed = false;\r\n return {\r\n value: refCountedGizmo.gizmo,\r\n dispose: () => {\r\n if (!disposed) {\r\n disposed = true;\r\n refCountedGizmo.refCount--;\r\n if (refCountedGizmo.refCount === 0) {\r\n refCountedGizmo.gizmo.dispose();\r\n gizmoMap.delete(node);\r\n }\r\n }\r\n },\r\n } satisfies Reference<GizmoT>;\r\n }\r\n\r\n const cameraGizmos = new WeakMap<Camera, { gizmo: CameraGizmo; refCount: number }>();\r\n const getCameraGizmo = (camera: Camera) => getGizmo(camera, camera.getScene(), CameraGizmo, cameraGizmos, (camera, gizmo) => (gizmo.camera = camera));\r\n\r\n const lightGizmos = new WeakMap<Light, { gizmo: LightGizmo; refCount: number }>();\r\n const getLightGizmo = (light: Light) => getGizmo(light, light.getScene(), LightGizmo, lightGizmos, (light, gizmo) => (gizmo.light = light));\r\n\r\n return {\r\n getUtilityLayer,\r\n getCameraGizmo,\r\n getLightGizmo,\r\n getCameraGizmos: (scene) => scene.cameras.map((camera) => cameraGizmos.get(camera)?.gizmo).filter(Boolean) as readonly CameraGizmo[],\r\n getLightGizmos: (scene) => scene.lights.map((light) => lightGizmos.get(light)?.gizmo).filter(Boolean) as readonly LightGizmo[],\r\n };\r\n },\r\n};\r\n","import { createFluentIcon } from \"@fluentui/react-icons\";\r\n\r\nexport const MeshIcon = createFluentIcon(\r\n \"Mesh\",\r\n \"16\",\r\n '<path d=\"M14.03,3.54l-5.11-2.07c-.61-.25-1.27-.25-1.88,0L1.93,3.54c-.57.23-.94.78-.94,1.39v6.15c0,.61.37,1.16.94,1.39l5.11,2.07c.3.12.62.18.94.18s.64-.06.94-.18l5.12-2.07c.57-.23.94-.78.94-1.39v-6.15c0-.61-.37-1.16-.94-1.39ZM13.97,7.71l-2.11.86v-2.71l2.11-.86v2.71ZM1.99,5l2.11.86v2.71l-2.11-.86v-2.71ZM11.35,4.98l-2.04-.83,1.78-.72,2.04.83-1.78.72ZM10.02,5.52l-2.04.83-2.04-.83,2.04-.83,2.04.83ZM4.6,4.98l-1.78-.72,2.04-.83,1.78.72-2.04.83ZM5.1,6.26l2.38.96v2.71l-2.38-.96v-2.71ZM8.48,7.22l2.38-.96v2.71l-2.38.96v-2.71ZM7.41,2.39c.18-.07.37-.11.56-.11s.38.04.56.11l1.22.49-1.78.72-1.79-.72,1.22-.49ZM1.99,11.07v-2.29l2.11.86v2.62l-1.8-.73c-.19-.08-.31-.26-.31-.46ZM5.1,12.67v-2.62l2.38.96v2.61s-.04,0-.06-.01l-2.31-.94ZM8.54,13.61s-.04,0-.06.01v-2.61l2.38-.96v2.62l-2.31.94ZM13.66,11.54l-1.8.73v-2.62l2.11-.86v2.29c0,.2-.12.39-.31.46Z\"/>'\r\n);\r\n\r\nexport const TranslateIcon = createFluentIcon(\r\n \"Translate\",\r\n \"24\",\r\n '<path d=\"M20.16,12.98l-2.75-2.75c-.29-.29-.77-.29-1.06,0-.29.29-.29.77,0,1.06l1.47,1.47h-6.69v-6.69l1.47,1.47c.29.29.77.29,1.06,0,.29-.29.29-.77,0-1.06l-2.75-2.75c-.14-.14-.33-.22-.53-.22s-.39.08-.53.22l-2.75,2.75c-.29.29-.29.77,0,1.06.29.29.77.29,1.06,0l1.47-1.47v7.13l-3.52,3.52v-2.08c0-.41-.34-.75-.75-.75s-.75.34-.75.75v3.89c0,.2.08.39.22.53.14.14.33.22.53.22h3.89c.41,0,.75-.34.75-.75s-.34-.75-.75-.75h-2.08s3.52-3.52,3.52-3.52h7.13l-1.47,1.47c-.29.29-.29.77,0,1.06s.77.29,1.06,0l2.75-2.75c.14-.14.22-.33.22-.53s-.08-.39-.22-.53Z\" />'\r\n);\r\n\r\nexport const MaterialIcon = createFluentIcon(\r\n \"Material\",\r\n \"16\",\r\n '<path d=\"M14.74,6.3c-.09-.36-.38-.64-.75-.72-.04-.09-.08-.18-.12-.27.1-.15.16-.32.16-.51,0-.18-.05-.34-.13-.48-1.23-1.97-3.41-3.28-5.9-3.28C4.16,1.04,1.04,4.16,1.04,7.99c0,.39.23.72.57.88.02.12.03.25.06.37-.18.18-.3.42-.3.7,0,.11.02.21.06.31.94,2.74,3.53,4.71,6.58,4.71,3.84,0,6.96-3.12,6.96-6.96,0-.59-.08-1.16-.22-1.7ZM2.07,8.58c-.02-.19-.03-.39-.03-.58,0-3.29,2.67-5.96,5.96-5.96,2.23,0,4.17,1.23,5.2,3.05.05.18-.07.45-.3.75-.57-.73-1.45-1.21-2.45-1.21-1.72,0-3.12,1.4-3.12,3.11,0,.33.07.65.16.95-3.05.82-5.17.52-5.42-.11ZM12.56,7.75c0,1.17-.95,2.11-2.11,2.11s-2.12-.95-2.12-2.11.95-2.11,2.12-2.11,2.11.95,2.11,2.11ZM8,13.96c-2.6,0-4.81-1.68-5.62-4.01.5.16,1.11.24,1.79.24,1.15,0,2.49-.22,3.79-.59.57.76,1.47,1.26,2.49,1.26,1.72,0,3.11-1.4,3.11-3.11,0-.34-.07-.65-.17-.96.13-.13.24-.26.34-.39.14.51.22,1.04.22,1.6,0,3.29-2.67,5.96-5.96,5.96Z\"/>'\r\n);\r\n","import type { MenuButtonProps, MenuCheckedValueChangeData, MenuCheckedValueChangeEvent } from \"@fluentui/react-components\";\r\nimport type { FunctionComponent } from \"react\";\r\n\r\nimport type { IDisposable, Nullable, Scene, TransformNode } from \"core/index\";\r\nimport type { IGizmoService } from \"../services/gizmoService\";\r\n\r\nimport { makeStyles, Menu, MenuItemRadio, MenuList, MenuPopover, MenuTrigger, SplitButton, tokens, Tooltip } from \"@fluentui/react-components\";\r\nimport { ArrowExpandRegular, ArrowRotateClockwiseRegular, CubeRegular, GlobeRegular, SelectObjectRegular } from \"@fluentui/react-icons\";\r\nimport { useCallback, useEffect, useState } from \"react\";\r\n\r\nimport { Bone } from \"core/Bones/bone\";\r\nimport { Camera } from \"core/Cameras/camera\";\r\nimport { GizmoCoordinatesMode } from \"core/Gizmos/gizmo\";\r\nimport { GizmoManager } from \"core/Gizmos/gizmoManager\";\r\nimport { Light } from \"core/Lights/light\";\r\nimport { AbstractMesh } from \"core/Meshes/abstractMesh\";\r\nimport { Node } from \"core/node\";\r\nimport { TranslateIcon } from \"shared-ui-components/fluent/icons\";\r\nimport { Collapse } from \"shared-ui-components/fluent/primitives/collapse\";\r\nimport { ToggleButton } from \"shared-ui-components/fluent/primitives/toggleButton\";\r\nimport { useProperty } from \"../hooks/compoundPropertyHooks\";\r\nimport { useResource } from \"../hooks/resourceHooks\";\r\n\r\ntype GizmoMode = \"translate\" | \"rotate\" | \"scale\" | \"boundingBox\";\r\n\r\nconst useStyles = makeStyles({\r\n coordinatesModeButton: {\r\n margin: `0 ${tokens.spacingVerticalXS}`,\r\n },\r\n coordinatesModeMenu: {\r\n minWidth: 0,\r\n },\r\n});\r\n\r\nexport const GizmoToolbar: FunctionComponent<{ scene: Scene; entity: unknown; gizmoService: IGizmoService }> = (props) => {\r\n const { scene, entity, gizmoService } = props;\r\n\r\n const classes = useStyles();\r\n\r\n const gizmoManager = useResource(\r\n useCallback(() => {\r\n const utilityLayerRef = gizmoService.getUtilityLayer(scene);\r\n const keepDepthUtilityLayerRef = gizmoService.getUtilityLayer(scene, \"keepDepth\");\r\n const gizmoManager = new GizmoManager(scene, undefined, utilityLayerRef.value, keepDepthUtilityLayerRef.value);\r\n gizmoManager.usePointerToAttachGizmos = false;\r\n\r\n const disposeGizmoManager = gizmoManager.dispose.bind(gizmoManager);\r\n gizmoManager.dispose = () => {\r\n disposeGizmoManager();\r\n utilityLayerRef.dispose();\r\n keepDepthUtilityLayerRef.dispose();\r\n };\r\n\r\n return gizmoManager;\r\n }, [scene])\r\n );\r\n\r\n const coordinatesMode = useProperty(gizmoManager, \"coordinatesMode\");\r\n\r\n const [gizmoMode, setGizmoMode] = useState<GizmoMode>();\r\n\r\n useEffect(() => {\r\n let visualizationGizmoRef: Nullable<IDisposable> = null;\r\n let resolvedEntity = entity;\r\n if (gizmoMode) {\r\n if (entity instanceof Camera) {\r\n const cameraGizmoRef = gizmoService.getCameraGizmo(entity);\r\n visualizationGizmoRef = cameraGizmoRef;\r\n resolvedEntity = cameraGizmoRef.value.attachedNode;\r\n } else if (entity instanceof Light) {\r\n const lightGizmoRef = gizmoService.getLightGizmo(entity);\r\n visualizationGizmoRef = lightGizmoRef;\r\n resolvedEntity = lightGizmoRef.value.attachedNode;\r\n } else if (entity instanceof Bone) {\r\n resolvedEntity = entity.getTransformNode() ?? entity;\r\n }\r\n }\r\n\r\n let resolvedGizmoMode = gizmoMode;\r\n if (!resolvedEntity) {\r\n resolvedGizmoMode = undefined;\r\n } else {\r\n if (resolvedGizmoMode === \"translate\") {\r\n if (!(resolvedEntity as TransformNode).position) {\r\n resolvedGizmoMode = undefined;\r\n }\r\n } else if (resolvedGizmoMode === \"rotate\") {\r\n if (!(resolvedEntity as TransformNode).rotation) {\r\n resolvedGizmoMode = undefined;\r\n }\r\n } else if (resolvedGizmoMode === \"scale\") {\r\n if (!(resolvedEntity as TransformNode).scaling) {\r\n resolvedGizmoMode = undefined;\r\n }\r\n } else {\r\n if (!(resolvedEntity instanceof AbstractMesh)) {\r\n resolvedGizmoMode = undefined;\r\n }\r\n }\r\n }\r\n\r\n gizmoManager.positionGizmoEnabled = resolvedGizmoMode === \"translate\";\r\n gizmoManager.rotationGizmoEnabled = resolvedGizmoMode === \"rotate\";\r\n gizmoManager.scaleGizmoEnabled = resolvedGizmoMode === \"scale\";\r\n gizmoManager.boundingBoxGizmoEnabled = resolvedGizmoMode === \"boundingBox\";\r\n\r\n if (gizmoManager.gizmos.boundingBoxGizmo) {\r\n gizmoManager.gizmos.boundingBoxGizmo.fixedDragMeshScreenSize = true;\r\n }\r\n\r\n if (!resolvedGizmoMode) {\r\n gizmoManager.attachToNode(null);\r\n } else {\r\n if (resolvedEntity instanceof AbstractMesh) {\r\n gizmoManager.attachToMesh(resolvedEntity);\r\n } else if (resolvedEntity instanceof Node) {\r\n gizmoManager.attachToNode(resolvedEntity);\r\n }\r\n }\r\n\r\n return () => {\r\n gizmoManager.attachToNode(null);\r\n visualizationGizmoRef?.dispose();\r\n };\r\n }, [gizmoManager, gizmoMode, entity]);\r\n\r\n const updateGizmoMode = useCallback((mode: GizmoMode) => {\r\n setGizmoMode((currentMode) => (currentMode === mode ? undefined : mode));\r\n }, []);\r\n\r\n const onCoordinatesModeChange = useCallback((e: MenuCheckedValueChangeEvent, data: MenuCheckedValueChangeData) => {\r\n gizmoManager.coordinatesMode = Number(data.checkedItems[0]);\r\n }, []);\r\n\r\n const toggleCoordinatesMode = useCallback(() => {\r\n gizmoManager.coordinatesMode = coordinatesMode === GizmoCoordinatesMode.Local ? GizmoCoordinatesMode.World : GizmoCoordinatesMode.Local;\r\n }, [gizmoManager, coordinatesMode]);\r\n\r\n return (\r\n <>\r\n <ToggleButton title=\"Translate\" checkedIcon={TranslateIcon} value={gizmoMode === \"translate\"} onChange={() => updateGizmoMode(\"translate\")} />\r\n <ToggleButton title=\"Rotate\" checkedIcon={ArrowRotateClockwiseRegular} value={gizmoMode === \"rotate\"} onChange={() => updateGizmoMode(\"rotate\")} />\r\n <ToggleButton title=\"Scale\" checkedIcon={ArrowExpandRegular} value={gizmoMode === \"scale\"} onChange={() => updateGizmoMode(\"scale\")} />\r\n <ToggleButton title=\"Bounding Box\" checkedIcon={SelectObjectRegular} value={gizmoMode === \"boundingBox\"} onChange={() => updateGizmoMode(\"boundingBox\")} />\r\n <Collapse visible={!!gizmoMode} orientation=\"horizontal\">\r\n {/* TODO: gehalper factor this into a shared component */}\r\n <Menu positioning=\"below-end\" checkedValues={{ coordinatesMode: [coordinatesMode.toString()] }} onCheckedValueChange={onCoordinatesModeChange}>\r\n <MenuTrigger disableButtonEnhancement={true}>\r\n {(triggerProps: MenuButtonProps) => (\r\n <Tooltip content=\"Coordinates Mode\" relationship=\"label\">\r\n <SplitButton\r\n className={classes.coordinatesModeButton}\r\n menuButton={triggerProps}\r\n primaryActionButton={{\r\n onClick: toggleCoordinatesMode,\r\n }}\r\n size=\"small\"\r\n appearance=\"transparent\"\r\n shape=\"rounded\"\r\n icon={coordinatesMode === GizmoCoordinatesMode.Local ? <CubeRegular /> : <GlobeRegular />}\r\n ></SplitButton>\r\n </Tooltip>\r\n )}\r\n </MenuTrigger>\r\n\r\n <MenuPopover className={classes.coordinatesModeMenu}>\r\n <MenuList>\r\n <MenuItemRadio name=\"coordinatesMode\" value={GizmoCoordinatesMode.Local.toString()}>\r\n Local\r\n </MenuItemRadio>\r\n <MenuItemRadio name=\"coordinatesMode\" value={GizmoCoordinatesMode.World.toString()}>\r\n World\r\n </MenuItemRadio>\r\n </MenuList>\r\n </MenuPopover>\r\n </Menu>\r\n </Collapse>\r\n </>\r\n );\r\n};\r\n","import type { ServiceDefinition } from \"../modularity/serviceDefinition\";\r\nimport type { ISceneContext } from \"./sceneContext\";\r\nimport type { ISelectionService } from \"./selectionService\";\r\nimport type { IShellService } from \"./shellService\";\r\nimport type { IGizmoService } from \"./gizmoService\";\r\n\r\nimport { SceneContextIdentity } from \"./sceneContext\";\r\nimport { SelectionServiceIdentity } from \"./selectionService\";\r\nimport { ShellServiceIdentity } from \"./shellService\";\r\nimport { GizmoToolbar } from \"../components/gizmoToolbar\";\r\nimport { useObservableState } from \"../hooks/observableHooks\";\r\nimport { GizmoServiceIdentity } from \"./gizmoService\";\r\n\r\nexport const GizmoToolbarServiceDefinition: ServiceDefinition<[], [ISceneContext, IShellService, ISelectionService, IGizmoService]> = {\r\n friendlyName: \"Gizmo Toolbar\",\r\n consumes: [SceneContextIdentity, ShellServiceIdentity, SelectionServiceIdentity, GizmoServiceIdentity],\r\n factory: (sceneContext, shellService, selectionService, gizmoService) => {\r\n shellService.addToolbarItem({\r\n key: \"Gizmo Toolbar\",\r\n verticalLocation: \"top\",\r\n horizontalLocation: \"left\",\r\n suppressTeachingMoment: true,\r\n component: () => {\r\n const scene = useObservableState(() => sceneContext.currentScene, sceneContext.currentSceneObservable);\r\n const selectedEntity = useObservableState(() => selectionService.selectedEntity, selectionService.onSelectedEntityChanged);\r\n return scene ? <GizmoToolbar scene={scene} entity={selectedEntity} gizmoService={gizmoService} /> : null;\r\n },\r\n });\r\n },\r\n};\r\n","import type { ServiceDefinition } from \"../modularity/serviceDefinition\";\r\nimport type { ISceneContext } from \"./sceneContext\";\r\nimport type { IShellService } from \"./shellService\";\r\n\r\nimport { Badge, makeStyles, tokens } from \"@fluentui/react-components\";\r\nimport { useCallback } from \"react\";\r\n\r\nimport { useObservableState } from \"../hooks/observableHooks\";\r\nimport { SceneContextIdentity } from \"./sceneContext\";\r\nimport { ShellServiceIdentity } from \"./shellService\";\r\n\r\nconst useStyles = makeStyles({\r\n badge: {\r\n margin: tokens.spacingHorizontalXXS,\r\n fontFamily: \"monospace\",\r\n },\r\n});\r\n\r\nexport const MiniStatsServiceDefinition: ServiceDefinition<[], [ISceneContext, IShellService]> = {\r\n friendlyName: \"Mini Stats\",\r\n consumes: [SceneContextIdentity, ShellServiceIdentity],\r\n factory: (sceneContext, shellService) => {\r\n shellService.addToolbarItem({\r\n key: \"Mini Stats\",\r\n verticalLocation: \"bottom\",\r\n horizontalLocation: \"right\",\r\n suppressTeachingMoment: true,\r\n component: () => {\r\n const classes = useStyles();\r\n\r\n const scene = useObservableState(\r\n useCallback(() => sceneContext.currentScene, [sceneContext.currentScene]),\r\n sceneContext.currentSceneObservable\r\n );\r\n const engine = scene?.getEngine();\r\n const fps = useObservableState(\r\n useCallback(() => (engine ? Math.round(engine.getFps()) : null), [engine]),\r\n engine?.onBeginFrameObservable\r\n );\r\n\r\n return fps != null ? <Badge appearance=\"outline\" className={classes.badge}>{`${fps} fps`}</Badge> : null;\r\n },\r\n });\r\n },\r\n};\r\n","import type { FunctionComponent } from \"react\";\r\n\r\nimport type { TargetedAnimation } from \"core/index\";\r\nimport type { ISelectionService } from \"../../../services/selectionService\";\r\nimport { LinkToEntityPropertyLine } from \"../linkToEntityPropertyLine\";\r\n\r\nexport const TargetedAnimationGeneralProperties: FunctionComponent<{ targetedAnimation: TargetedAnimation; selectionService: ISelectionService }> = (props) => {\r\n const { selectionService } = props;\r\n\r\n return (\r\n <>\r\n <LinkToEntityPropertyLine\r\n label=\"Target\"\r\n description=\"The entity animated by this animation.\"\r\n entity={props.targetedAnimation.target}\r\n selectionService={selectionService}\r\n />\r\n </>\r\n );\r\n};\r\n","import type { FunctionComponent } from \"react\";\r\nimport { Body1, InfoLabel as FluentInfoLabel } from \"@fluentui/react-components\";\r\n\r\nexport type InfoLabelProps = {\r\n htmlFor: string; // required ID of the element whose label we are applying\r\n info?: JSX.Element;\r\n label: string;\r\n};\r\nexport type InfoLabelParentProps = Omit<InfoLabelProps, \"htmlFor\">;\r\n\r\n/**\r\n * Renders a label with an optional popup containing more info\r\n * @param props\r\n * @returns\r\n */\r\nexport const InfoLabel: FunctionComponent<InfoLabelProps> = (props) => {\r\n InfoLabel.displayName = \"InfoLabel\";\r\n return (\r\n <FluentInfoLabel htmlFor={props.htmlFor} info={props.info}>\r\n <Body1>{props.label}</Body1>\r\n </FluentInfoLabel>\r\n );\r\n};\r\n","import type { FunctionComponent, KeyboardEvent, ChangeEvent } from \"react\";\r\nimport { useContext, useEffect, useRef, useState } from \"react\";\r\nimport type { InputOnChangeData } from \"@fluentui/react-components\";\r\nimport { Input as FluentInput, mergeClasses, useId } from \"@fluentui/react-components\";\r\nimport type { PrimitiveProps } from \"./primitive\";\r\nimport { InfoLabel } from \"./infoLabel\";\r\nimport { HandleOnBlur, HandleKeyDown, useInputStyles } from \"./utils\";\r\nimport { ToolContext } from \"../hoc/fluentToolWrapper\";\r\n\r\nexport type TextInputProps = PrimitiveProps<string> & {\r\n validator?: (value: string) => boolean;\r\n};\r\n\r\nexport const TextInput: FunctionComponent<TextInputProps> = (props) => {\r\n TextInput.displayName = \"TextInput\";\r\n const classes = useInputStyles();\r\n const [value, setValue] = useState(props.value);\r\n const lastCommittedValue = useRef(props.value);\r\n const { size } = useContext(ToolContext);\r\n useEffect(() => {\r\n if (props.value !== lastCommittedValue.current) {\r\n setValue(props.value); // Update local state when props.value changes\r\n lastCommittedValue.current = props.value;\r\n }\r\n }, [props.value]);\r\n\r\n const validateValue = (val: string): boolean => {\r\n const failsValidator = props.validator && !props.validator(val);\r\n return !failsValidator;\r\n };\r\n\r\n const tryCommitValue = (currVal: string) => {\r\n // Only commit if valid and different from last committed value\r\n if (validateValue(currVal) && currVal !== lastCommittedValue.current) {\r\n lastCommittedValue.current = currVal;\r\n props.onChange(currVal);\r\n }\r\n };\r\n\r\n const handleChange = (event: ChangeEvent<HTMLInputElement>, data: InputOnChangeData) => {\r\n event.stopPropagation();\r\n setValue(data.value);\r\n tryCommitValue(data.value);\r\n };\r\n\r\n const handleKeyUp = (event: KeyboardEvent<HTMLInputElement>) => {\r\n event.stopPropagation();\r\n setValue(event.currentTarget.value);\r\n tryCommitValue(event.currentTarget.value);\r\n };\r\n const mergedClassName = mergeClasses(classes.input, !validateValue(value) ? classes.invalid : \"\", props.className);\r\n\r\n const id = useId(\"input-button\");\r\n return (\r\n <div className={classes.container}>\r\n {props.infoLabel && <InfoLabel {...props.infoLabel} htmlFor={id} />}\r\n <FluentInput\r\n {...props}\r\n input={{ className: classes.inputSlot }}\r\n id={id}\r\n size={size}\r\n value={value}\r\n onChange={handleChange}\r\n onKeyUp={handleKeyUp}\r\n onKeyDown={HandleKeyDown}\r\n onBlur={HandleOnBlur}\r\n className={mergedClassName}\r\n />\r\n </div>\r\n );\r\n};\r\n","import { SpinButton as FluentSpinButton, mergeClasses, useId } from \"@fluentui/react-components\";\r\nimport type { SpinButtonOnChangeData, SpinButtonChangeEvent } from \"@fluentui/react-components\";\r\nimport type { FunctionComponent, KeyboardEvent } from \"react\";\r\nimport { useEffect, useState, useRef, useContext } from \"react\";\r\nimport type { PrimitiveProps } from \"./primitive\";\r\nimport { InfoLabel } from \"./infoLabel\";\r\nimport { CalculatePrecision, HandleKeyDown, HandleOnBlur, useInputStyles } from \"./utils\";\r\nimport { ToolContext } from \"../hoc/fluentToolWrapper\";\r\n\r\nexport type SpinButtonProps = PrimitiveProps<number> & {\r\n min?: number;\r\n max?: number;\r\n /** Determines how much the spinbutton increments with the arrow keys. Note this also determines the precision value (# of decimals in display value)\r\n * i.e. if step = 1, precision = 0. step = 0.0089, precision = 4. step = 300, precision = 2. step = 23.00, precision = 2. */\r\n step?: number;\r\n unit?: string;\r\n forceInt?: boolean;\r\n validator?: (value: number) => boolean;\r\n};\r\n\r\nexport const SpinButton: FunctionComponent<SpinButtonProps> = (props) => {\r\n SpinButton.displayName = \"SpinButton\";\r\n const classes = useInputStyles();\r\n const { size } = useContext(ToolContext);\r\n\r\n const { min, max } = props;\r\n\r\n const [value, setValue] = useState(props.value);\r\n const lastCommittedValue = useRef(props.value);\r\n // step and forceInt are not mutually exclusive since there could be cases where you want to forceInt but have spinButton jump >1 int per spin\r\n const step = props.step != undefined ? props.step : props.forceInt ? 1 : undefined;\r\n const precision = Math.min(4, step !== undefined ? Math.max(0, CalculatePrecision(step)) : 2); // If no step, set precision to 2. Regardless, cap precision at 4 to avoid wild numbers\r\n\r\n useEffect(() => {\r\n if (props.value !== lastCommittedValue.current) {\r\n lastCommittedValue.current = props.value;\r\n setValue(props.value); // Update local state when props.value changes\r\n }\r\n }, [props.value]);\r\n\r\n const validateValue = (numericValue: number): boolean => {\r\n const outOfBounds = (min !== undefined && numericValue < min) || (max !== undefined && numericValue > max);\r\n const failsValidator = props.validator && !props.validator(numericValue);\r\n const failsIntCheck = props.forceInt ? !Number.isInteger(numericValue) : false;\r\n const invalid = !!outOfBounds || !!failsValidator || isNaN(numericValue) || !!failsIntCheck;\r\n return !invalid;\r\n };\r\n\r\n const tryCommitValue = (currVal: number) => {\r\n // Only commit if valid and different from last committed value\r\n if (validateValue(currVal) && currVal !== lastCommittedValue.current) {\r\n lastCommittedValue.current = currVal;\r\n props.onChange(currVal);\r\n }\r\n };\r\n\r\n const handleChange = (event: SpinButtonChangeEvent, data: SpinButtonOnChangeData) => {\r\n event.stopPropagation(); // Prevent event propagation\r\n if (data.value != null && !Number.isNaN(data.value)) {\r\n setValue(data.value);\r\n tryCommitValue(data.value);\r\n }\r\n };\r\n\r\n const handleKeyUp = (event: KeyboardEvent<HTMLInputElement>) => {\r\n event.stopPropagation(); // Prevent event propagation\r\n\r\n if (event.key !== \"Enter\") {\r\n const currVal = parseFloat((event.target as any).value); // Cannot use currentTarget.value as it won't have the most recently typed value\r\n setValue(currVal);\r\n tryCommitValue(currVal);\r\n }\r\n };\r\n\r\n const id = useId(\"spin-button\");\r\n const mergedClassName = mergeClasses(classes.input, !validateValue(value) ? classes.invalid : \"\", props.className);\r\n\r\n return (\r\n <div className={classes.container}>\r\n {props.infoLabel && <InfoLabel {...props.infoLabel} htmlFor={id} />}\r\n <FluentSpinButton\r\n {...props}\r\n input={{ className: classes.inputSlot }}\r\n step={step}\r\n id={id}\r\n size={size}\r\n precision={precision}\r\n displayValue={`${value.toFixed(precision)}${props.unit ? \" \" + props.unit : \"\"}`}\r\n value={value}\r\n onChange={handleChange}\r\n onKeyUp={handleKeyUp}\r\n onKeyDown={HandleKeyDown}\r\n onBlur={HandleOnBlur}\r\n className={mergedClassName}\r\n />\r\n </div>\r\n );\r\n};\r\n","import { PropertyLine } from \"./propertyLine\";\r\nimport type { PropertyLineProps } from \"./propertyLine\";\r\nimport type { FunctionComponent } from \"react\";\r\nimport type { TextInputProps } from \"../../primitives/textInput\";\r\nimport { TextInput } from \"../../primitives/textInput\";\r\nimport type { SpinButtonProps } from \"../../primitives/spinButton\";\r\nimport { SpinButton } from \"../../primitives/spinButton\";\r\n/**\r\n * Wraps a text input in a property line\r\n * @param props - PropertyLineProps and InputProps\r\n * @returns property-line wrapped input component\r\n */\r\nexport const TextInputPropertyLine: FunctionComponent<TextInputProps & PropertyLineProps<string>> = (props) => {\r\n TextInputPropertyLine.displayName = \"TextInputPropertyLine\";\r\n return (\r\n <PropertyLine {...props}>\r\n <TextInput {...props} />\r\n </PropertyLine>\r\n );\r\n};\r\n\r\nexport type NumberInputPropertyLineProps = SpinButtonProps & PropertyLineProps<number>;\r\n/**\r\n * Wraps a number input in a property line\r\n * To force integer values, use forceInt param (this is distinct from the 'step' param, which will still allow submitting an integer value. forceInt will not)\r\n * @param props - PropertyLineProps and InputProps\r\n * @returns property-line wrapped input component\r\n */\r\nexport const NumberInputPropertyLine: FunctionComponent<NumberInputPropertyLineProps> = (props) => {\r\n NumberInputPropertyLine.displayName = \"NumberInputPropertyLine\";\r\n return (\r\n <PropertyLine {...props}>\r\n <SpinButton {...props} />\r\n </PropertyLine>\r\n );\r\n};\r\n","import type { SliderOnChangeData } from \"@fluentui/react-components\";\r\nimport { makeStyles, Slider } from \"@fluentui/react-components\";\r\nimport { SpinButton } from \"./spinButton\";\r\nimport type { ChangeEvent, FunctionComponent } from \"react\";\r\nimport { useEffect, useState, useRef, useContext } from \"react\";\r\nimport type { PrimitiveProps } from \"./primitive\";\r\nimport { InfoLabel } from \"./infoLabel\";\r\nimport { CustomTokens } from \"./utils\";\r\nimport { ToolContext } from \"../hoc/fluentToolWrapper\";\r\n\r\nconst useSyncedSliderStyles = makeStyles({\r\n container: { display: \"flex\" },\r\n syncedSlider: {\r\n flex: \"1 1 0\",\r\n flexDirection: \"row\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n },\r\n slider: {\r\n minWidth: CustomTokens.sliderMinWidth, // Minimum width for slider to remain usable\r\n maxWidth: CustomTokens.sliderMaxWidth,\r\n },\r\n});\r\n\r\nexport type SyncedSliderProps = PrimitiveProps<number> & {\r\n /** Minimum value for the slider */\r\n min?: number;\r\n /** Maximum value for the slider */\r\n max?: number;\r\n /** Step size for the slider */\r\n step?: number;\r\n /** Displayed in the ux to indicate unit of measurement */\r\n unit?: string;\r\n /** When true, onChange is only called when the user releases the slider, not during drag */\r\n notifyOnlyOnRelease?: boolean;\r\n};\r\n\r\n/**\r\n * Component which synchronizes a slider and an input field, allowing the user to change the value using either control\r\n * @param props\r\n * @returns SyncedSlider component\r\n */\r\nexport const SyncedSliderInput: FunctionComponent<SyncedSliderProps> = (props) => {\r\n SyncedSliderInput.displayName = \"SyncedSliderInput\";\r\n const { infoLabel, ...passthroughProps } = props;\r\n const classes = useSyncedSliderStyles();\r\n const { size } = useContext(ToolContext);\r\n const [value, setValue] = useState<number>(props.value);\r\n const pendingValueRef = useRef<number>(undefined);\r\n const isDraggingRef = useRef(false);\r\n\r\n // NOTE: The Fluent slider will add tick marks if the step prop is anything other than undefined.\r\n // To avoid this, we scale the min/max based on the step so we can always make step undefined.\r\n // The actual step size in the Fluent slider is 1 when it is ste to undefined.\r\n const min = props.min ?? 0;\r\n const max = props.max ?? 100;\r\n const step = props.step ?? 1;\r\n\r\n useEffect(() => {\r\n !isDraggingRef.current && setValue(props.value ?? \"\"); // Update local state when props.value changes as long as user is not actively dragging\r\n }, [props.value]);\r\n\r\n const handleSliderChange = (_: ChangeEvent<HTMLInputElement>, data: SliderOnChangeData) => {\r\n const newValue = data.value * step;\r\n setValue(newValue);\r\n\r\n if (props.notifyOnlyOnRelease) {\r\n // Store the value but don't notify parent yet\r\n pendingValueRef.current = newValue;\r\n } else {\r\n // Notify parent as slider changes\r\n props.onChange(newValue);\r\n }\r\n };\r\n\r\n const handleSliderPointerDown = () => {\r\n isDraggingRef.current = true;\r\n };\r\n\r\n const handleSliderPointerUp = () => {\r\n if (props.notifyOnlyOnRelease && isDraggingRef.current && pendingValueRef.current !== undefined) {\r\n props.onChange(pendingValueRef.current);\r\n pendingValueRef.current = undefined;\r\n }\r\n isDraggingRef.current = false;\r\n };\r\n\r\n const handleInputChange = (value: number) => {\r\n setValue(value);\r\n props.onChange(value); // Input always updates immediately\r\n };\r\n\r\n return (\r\n <div className={classes.container}>\r\n {infoLabel && <InfoLabel {...infoLabel} htmlFor={\"syncedSlider\"} />}\r\n <div id=\"syncedSlider\" className={classes.syncedSlider}>\r\n {props.min !== undefined && props.max !== undefined && (\r\n <Slider\r\n {...passthroughProps}\r\n className={classes.slider}\r\n size={size}\r\n min={min / step}\r\n max={max / step}\r\n step={undefined}\r\n value={value / step}\r\n onChange={handleSliderChange}\r\n onPointerDown={handleSliderPointerDown}\r\n onPointerUp={handleSliderPointerUp}\r\n />\r\n )}\r\n <SpinButton {...passthroughProps} value={value} onChange={handleInputChange} step={props.step} />\r\n </div>\r\n </div>\r\n );\r\n};\r\n","import { PropertyLine } from \"./propertyLine\";\r\nimport type { PropertyLineProps } from \"./propertyLine\";\r\nimport { SyncedSliderInput } from \"../../primitives/syncedSlider\";\r\nimport type { SyncedSliderProps } from \"../../primitives/syncedSlider\";\r\nimport { forwardRef } from \"react\";\r\n\r\ntype SyncedSliderPropertyProps = SyncedSliderProps & PropertyLineProps<number>;\r\n/**\r\n * Renders a simple wrapper around the SyncedSliderInput\r\n * @param props\r\n * @returns\r\n */\r\nexport const SyncedSliderPropertyLine = forwardRef<HTMLDivElement, SyncedSliderPropertyProps>((props, ref): React.ReactElement => {\r\n SyncedSliderPropertyLine.displayName = \"SyncedSliderPropertyLine\";\r\n const { label, description, ...sliderProps } = props;\r\n return (\r\n <PropertyLine ref={ref} {...props}>\r\n <SyncedSliderInput {...sliderProps} />\r\n </PropertyLine>\r\n );\r\n});\r\n","import type { FunctionComponent } from \"react\";\r\n\r\nimport { useCallback } from \"react\";\r\n\r\nimport type { AnimationGroup } from \"core/Animations/animationGroup\";\r\nimport { ButtonLine } from \"shared-ui-components/fluent/hoc/buttonLine\";\r\nimport { NumberInputPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/inputPropertyLine\";\r\nimport { StringifiedPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/stringifiedPropertyLine\";\r\nimport { SwitchPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/switchPropertyLine\";\r\nimport { SyncedSliderPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/syncedSliderPropertyLine\";\r\nimport { Collapse } from \"shared-ui-components/fluent/primitives/collapse\";\r\nimport { useProperty } from \"../../../hooks/compoundPropertyHooks\";\r\nimport { useObservableState } from \"../../../hooks/observableHooks\";\r\nimport { BoundProperty } from \"../boundProperty\";\r\n\r\ninterface ICurrentFrameHolder {\r\n currentFrame: number;\r\n}\r\n\r\nexport const AnimationGroupControlProperties: FunctionComponent<{ animationGroup: AnimationGroup }> = (props) => {\r\n const { animationGroup } = props;\r\n const targetedAnimations = animationGroup.targetedAnimations;\r\n let currentFrameHolder: ICurrentFrameHolder | undefined = undefined;\r\n\r\n if (targetedAnimations.length > 0) {\r\n currentFrameHolder = targetedAnimations[0].animation.runtimeAnimations.find((rA) => rA.target === targetedAnimations[0].target);\r\n }\r\n\r\n const isPlaying = useObservableState(\r\n useCallback(() => {\r\n return animationGroup.isPlaying;\r\n }, [animationGroup]),\r\n animationGroup.onAnimationGroupPlayObservable,\r\n animationGroup.onAnimationGroupPauseObservable,\r\n animationGroup.onAnimationGroupEndObservable\r\n );\r\n\r\n const currentFrame = useObservableState(\r\n useCallback(() => {\r\n return currentFrameHolder ? currentFrameHolder.currentFrame : undefined;\r\n }, [currentFrameHolder]),\r\n isPlaying ? animationGroup.getScene().onBeforeRenderObservable : null\r\n );\r\n const enableBlending = useProperty(animationGroup, \"enableBlending\");\r\n return (\r\n <>\r\n <ButtonLine label={isPlaying ? \"Pause\" : \"Play\"} onClick={() => (isPlaying ? animationGroup.pause() : animationGroup.play(true))} />\r\n <ButtonLine label=\"Stop\" onClick={() => animationGroup.stop()} />\r\n <BoundProperty component={SyncedSliderPropertyLine} label=\"Speed Ratio\" min={0} max={10} step={0.1} target={animationGroup} propertyKey=\"speedRatio\" />\r\n {currentFrameHolder ? (\r\n <SyncedSliderPropertyLine\r\n label=\"Current Frame\"\r\n min={animationGroup.from}\r\n max={animationGroup.to}\r\n step={(animationGroup.to - animationGroup.from) / 1000.0}\r\n value={currentFrame!}\r\n onChange={(value) => {\r\n if (!animationGroup.isPlaying) {\r\n animationGroup.play(true);\r\n animationGroup.goToFrame(value);\r\n animationGroup.pause();\r\n } else {\r\n animationGroup.goToFrame(value);\r\n }\r\n }}\r\n />\r\n ) : null}\r\n <BoundProperty component={SwitchPropertyLine} label=\"Blending\" target={animationGroup} propertyKey=\"enableBlending\" ignoreNullable defaultValue={false} />\r\n <Collapse visible={!!enableBlending}>\r\n <>\r\n <BoundProperty\r\n component={SyncedSliderPropertyLine}\r\n label=\"Blending Speed\"\r\n min={0}\r\n max={1}\r\n step={0.01}\r\n target={animationGroup}\r\n propertyKey=\"blendingSpeed\"\r\n ignoreNullable\r\n defaultValue={0}\r\n />\r\n <BoundProperty component={SwitchPropertyLine} label=\"Is Additive\" target={animationGroup} propertyKey=\"isAdditive\" />\r\n <BoundProperty component={NumberInputPropertyLine} label=\"Weight\" target={animationGroup} propertyKey=\"weight\" step={0.1} />\r\n <BoundProperty component={NumberInputPropertyLine} label=\"Play order\" target={animationGroup} propertyKey=\"playOrder\" forceInt />\r\n </>\r\n </Collapse>\r\n </>\r\n );\r\n};\r\n\r\nexport const AnimationGroupInfoProperties: FunctionComponent<{ animationGroup: AnimationGroup }> = (props) => {\r\n const { animationGroup } = props;\r\n return (\r\n <>\r\n <StringifiedPropertyLine label=\"Animation Count\" value={animationGroup.targetedAnimations.length} />\r\n <StringifiedPropertyLine label=\"From\" value={animationGroup.from} precision={2} />\r\n <StringifiedPropertyLine label=\"To\" value={animationGroup.to} precision={2} />\r\n <StringifiedPropertyLine label=\"Unique ID\" value={animationGroup.uniqueId} />\r\n </>\r\n );\r\n};\r\n","import type { ServiceDefinition } from \"../../../modularity/serviceDefinition\";\r\nimport type { IPropertiesService } from \"./propertiesService\";\r\n\r\nimport { AnimationGroup } from \"core/Animations/animationGroup\";\r\nimport { TargetedAnimation } from \"core/Animations/animationGroup\";\r\nimport { PropertiesServiceIdentity } from \"./propertiesService\";\r\nimport { TargetedAnimationGeneralProperties } from \"../../../components/properties/animation/targetedAnimationProperties\";\r\nimport { AnimationGroupControlProperties, AnimationGroupInfoProperties } from \"../../../components/properties/animation/animationGroupProperties\";\r\nimport type { ISelectionService } from \"../../selectionService\";\r\nimport { SelectionServiceIdentity } from \"../../selectionService\";\r\n\r\nexport const AnimationGroupPropertiesServiceDefinition: ServiceDefinition<[], [IPropertiesService, ISelectionService]> = {\r\n friendlyName: \"Animation Group Properties\",\r\n consumes: [PropertiesServiceIdentity, SelectionServiceIdentity],\r\n factory: (propertiesService, selectionService) => {\r\n const animationGroupContentRegistration = propertiesService.addSectionContent({\r\n key: \"Animation Group Properties\",\r\n predicate: (entity: unknown) => entity instanceof AnimationGroup,\r\n content: [\r\n {\r\n section: \"Control\",\r\n component: ({ context }) => <AnimationGroupControlProperties animationGroup={context} />,\r\n },\r\n {\r\n section: \"Info\",\r\n component: ({ context }) => <AnimationGroupInfoProperties animationGroup={context} />,\r\n },\r\n ],\r\n });\r\n\r\n const targetedAnimationContentRegistration = propertiesService.addSectionContent({\r\n key: \"Targeted Animation Properties\",\r\n predicate: (entity: unknown) => entity instanceof TargetedAnimation,\r\n content: [\r\n {\r\n section: \"General\",\r\n component: ({ context }) => <TargetedAnimationGeneralProperties targetedAnimation={context} selectionService={selectionService} />,\r\n },\r\n ],\r\n });\r\n\r\n return {\r\n dispose: () => {\r\n animationGroupContentRegistration.dispose();\r\n targetedAnimationContentRegistration.dispose();\r\n },\r\n };\r\n },\r\n};\r\n","import { MessageBar as FluentMessageBar, MessageBarTitle, MessageBarBody, makeStyles, tokens } from \"@fluentui/react-components\";\r\nimport type { FunctionComponent } from \"react\";\r\nimport { Link } from \"./link\";\r\n\r\nconst useClasses = makeStyles({\r\n container: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n gap: tokens.spacingVerticalS, // 8px\r\n },\r\n});\r\n\r\ntype MessageBarProps = {\r\n message: string;\r\n title: string;\r\n docLink?: string;\r\n intent: \"info\" | \"success\" | \"warning\" | \"error\";\r\n};\r\nexport const MessageBar: FunctionComponent<MessageBarProps> = (props) => {\r\n MessageBar.displayName = \"MessageBar\";\r\n const { message, title: header, intent, docLink } = props;\r\n const classes = useClasses();\r\n\r\n return (\r\n <div className={classes.container}>\r\n <FluentMessageBar intent={intent} layout=\"multiline\">\r\n <MessageBarBody>\r\n <MessageBarTitle>{header}</MessageBarTitle>\r\n {message}\r\n {docLink && (\r\n <>\r\n {\" - \"}\r\n <Link href={docLink} target=\"_blank\" rel=\"noopener noreferrer\">\r\n Learn More\r\n </Link>\r\n </>\r\n )}\r\n </MessageBarBody>\r\n </FluentMessageBar>\r\n </div>\r\n );\r\n};\r\n","import type { FunctionComponent } from \"react\";\r\n\r\nimport { useCallback, useRef } from \"react\";\r\nimport { Badge } from \"@fluentui/react-components\";\r\n\r\nimport { PropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/propertyLine\";\r\nimport { TextPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/textPropertyLine\";\r\nimport { ButtonLine } from \"shared-ui-components/fluent/hoc/buttonLine\";\r\nimport { MessageBar } from \"shared-ui-components/fluent/primitives/messageBar\";\r\nimport { Collapse } from \"shared-ui-components/fluent/primitives/collapse\";\r\nimport { useObservableState } from \"../../../hooks/observableHooks\";\r\nimport { NumberInputPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/inputPropertyLine\";\r\nimport { SyncedSliderPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/syncedSliderPropertyLine\";\r\nimport { SwitchPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/switchPropertyLine\";\r\nimport type { AnimationRange } from \"core/Animations/animationRange\";\r\nimport type { Nullable } from \"core/types\";\r\nimport type { IAnimatable } from \"core/Animations/animatable.interface\";\r\nimport type { Scene } from \"core/scene\";\r\nimport { AnimationPropertiesOverride } from \"core/Animations/animationPropertiesOverride\";\r\nimport { useProperty } from \"../../../hooks/compoundPropertyHooks\";\r\nimport { BoundProperty } from \"../boundProperty\";\r\n\r\nexport interface IAnimationRangeContainer {\r\n getAnimationRanges(): Nullable<AnimationRange>[];\r\n}\r\n\r\nexport interface IAnimatableContainer {\r\n getAnimatables(): IAnimatable[];\r\n}\r\n\r\ndeclare module \"core/Animations/animatable\" {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n interface Animatable {\r\n animationPropertiesOverride?: AnimationPropertiesOverride;\r\n }\r\n}\r\n\r\nexport const AnimationsProperties: FunctionComponent<{ scene: Scene; entity: Partial<IAnimatable & IAnimationRangeContainer & IAnimatableContainer> }> = (props) => {\r\n const { scene, entity } = props;\r\n\r\n const animations = entity.animations ?? [];\r\n const ranges = entity.getAnimationRanges?.()?.filter((range) => !!range) ?? [];\r\n const childAnimatablesAnimations = entity.getAnimatables?.().flatMap((animatable) => animatable.animations ?? []) ?? [];\r\n animations.concat(childAnimatablesAnimations);\r\n\r\n const lastFrom = useRef(0);\r\n const lastTo = useRef(0);\r\n const lastLoop = useRef(false);\r\n\r\n const animatablesForTarget = scene.getAllAnimatablesByTarget(entity);\r\n const isPlaying = animatablesForTarget.length > 0;\r\n const mainAnimatable = isPlaying ? animatablesForTarget[0] : undefined;\r\n\r\n const animationPropertiesOverride = useProperty(mainAnimatable, \"animationPropertiesOverride\");\r\n\r\n if (mainAnimatable) {\r\n lastFrom.current = mainAnimatable.fromFrame;\r\n lastTo.current = mainAnimatable.toFrame;\r\n lastLoop.current = mainAnimatable.loopAnimation;\r\n }\r\n\r\n const hasAnimations = animations.length > 0 || ranges.length > 0;\r\n\r\n const currentFrame = useObservableState(\r\n useCallback(() => {\r\n return mainAnimatable ? mainAnimatable.masterFrame : (scene.getAllAnimatablesByTarget(entity)[0]?.masterFrame ?? 0);\r\n }, [scene, entity, mainAnimatable]),\r\n hasAnimations ? scene.onAfterAnimationsObservable : undefined\r\n );\r\n\r\n return (\r\n <>\r\n {!hasAnimations ? (\r\n <MessageBar\r\n intent=\"info\"\r\n title=\"No Animations\"\r\n message=\"To modify animations, attach an animation to this node.\"\r\n docLink=\"https://doc.babylonjs.com/features/featuresDeepDive/animation/\"\r\n />\r\n ) : (\r\n <>\r\n {ranges.length > 0 && (\r\n <PropertyLine\r\n label=\"Ranges\"\r\n expandedContent={\r\n <>\r\n {ranges.map((range) => {\r\n return (\r\n <ButtonLine\r\n key={range.name}\r\n label={range.name}\r\n onClick={() => {\r\n scene.beginAnimation(entity, range.from, range.to, true);\r\n }}\r\n />\r\n );\r\n })}\r\n </>\r\n }\r\n >\r\n <Badge appearance=\"filled\">{ranges.length}</Badge>\r\n </PropertyLine>\r\n )}\r\n {animations.length > 0 && (\r\n <>\r\n <PropertyLine\r\n label=\"Animations\"\r\n expandedContent={\r\n <>\r\n {animations.map((animation, index) => {\r\n return <TextPropertyLine key={animation.uniqueId} label={`${index}: ${animation.name}`} value={animation.targetProperty} />;\r\n })}\r\n </>\r\n }\r\n >\r\n <Badge appearance=\"filled\">{animations.length}</Badge>\r\n </PropertyLine>\r\n {mainAnimatable && (\r\n <>\r\n <PropertyLine\r\n label=\"Animation Controls\"\r\n expandedContent={\r\n <>\r\n <NumberInputPropertyLine\r\n label=\"From\"\r\n value={mainAnimatable.fromFrame}\r\n onChange={(value) => {\r\n scene.stopAnimation(entity);\r\n scene.beginAnimation(entity, value, mainAnimatable.toFrame, true);\r\n }}\r\n />\r\n <NumberInputPropertyLine\r\n label=\"To\"\r\n value={mainAnimatable.toFrame}\r\n onChange={(value) => {\r\n scene.stopAnimation(entity);\r\n scene.beginAnimation(entity, mainAnimatable.fromFrame, value, true);\r\n }}\r\n />\r\n <SwitchPropertyLine\r\n label=\"Loop\"\r\n value={mainAnimatable.loopAnimation}\r\n onChange={(value) => {\r\n for (const animatable of animatablesForTarget) {\r\n animatable.loopAnimation = value;\r\n }\r\n }}\r\n />\r\n <SyncedSliderPropertyLine\r\n label=\"Current Frame\"\r\n value={currentFrame}\r\n min={mainAnimatable.fromFrame}\r\n max={mainAnimatable.toFrame}\r\n step={(mainAnimatable.toFrame - mainAnimatable.fromFrame) / 1000}\r\n onChange={(value) => {\r\n mainAnimatable.goToFrame(value);\r\n }}\r\n />\r\n </>\r\n }\r\n expandByDefault\r\n ></PropertyLine>\r\n </>\r\n )}\r\n <ButtonLine\r\n label={isPlaying ? \"Stop Animation\" : \"Play Animation\"}\r\n onClick={() => {\r\n if (isPlaying) {\r\n scene.stopAnimation(entity);\r\n } else {\r\n scene.beginAnimation(entity, lastFrom.current, lastTo.current, lastLoop.current);\r\n }\r\n }}\r\n />\r\n {mainAnimatable && (ranges.length > 0 || animations.length > 0) ? (\r\n <>\r\n <SwitchPropertyLine\r\n label=\"Enable Override\"\r\n value={animationPropertiesOverride != null}\r\n onChange={(value) => {\r\n if (value) {\r\n mainAnimatable.animationPropertiesOverride = new AnimationPropertiesOverride();\r\n mainAnimatable.animationPropertiesOverride.blendingSpeed = 0.05;\r\n } else {\r\n mainAnimatable.animationPropertiesOverride = undefined;\r\n }\r\n }}\r\n />\r\n <Collapse visible={animationPropertiesOverride != null}>\r\n <div>\r\n <BoundProperty\r\n component={SwitchPropertyLine}\r\n label=\"Enable Blending\"\r\n target={animationPropertiesOverride!}\r\n propertyKey=\"enableBlending\"\r\n />\r\n <BoundProperty\r\n component={SyncedSliderPropertyLine}\r\n label=\"Blending Speed\"\r\n target={animationPropertiesOverride!}\r\n propertyKey=\"blendingSpeed\"\r\n min={0}\r\n max={0.1}\r\n step={0.01}\r\n />\r\n </div>\r\n </Collapse>\r\n </>\r\n ) : null}\r\n </>\r\n )}\r\n </>\r\n )}\r\n </>\r\n );\r\n};\r\n","import type { IAnimatable } from \"core/index\";\r\n\r\nimport type { IAnimatableContainer, IAnimationRangeContainer } from \"../../../components/properties/animation/animationsProperties\";\r\nimport type { ServiceDefinition } from \"../../../modularity/serviceDefinition\";\r\nimport type { ISelectionService } from \"../../selectionService\";\r\nimport type { IPropertiesService } from \"./propertiesService\";\r\nimport type { ISceneContext } from \"../../../services/sceneContext\";\r\n\r\nimport { AnimationsProperties } from \"../../../components/properties/animation/animationsProperties\";\r\nimport { SelectionServiceIdentity } from \"../../selectionService\";\r\nimport { PropertiesServiceIdentity } from \"./propertiesService\";\r\nimport { SceneContextIdentity } from \"../../../services/sceneContext\";\r\n\r\nfunction IsAnimatable(entity: unknown): entity is IAnimatable {\r\n return (entity as IAnimatable).animations !== undefined;\r\n}\r\n\r\nfunction IsAnimationRangeContainer(entity: unknown): entity is IAnimationRangeContainer {\r\n return (entity as IAnimationRangeContainer).getAnimationRanges !== undefined;\r\n}\r\n\r\nfunction IsAnimatableContainer(entity: unknown): entity is IAnimatableContainer {\r\n return (entity as IAnimatableContainer).getAnimatables !== undefined;\r\n}\r\n\r\nexport const AnimationPropertiesServiceDefinition: ServiceDefinition<[], [IPropertiesService, ISelectionService, ISceneContext]> = {\r\n friendlyName: \"Animation Properties\",\r\n consumes: [PropertiesServiceIdentity, SelectionServiceIdentity, SceneContextIdentity],\r\n factory: (propertiesService, selectionService, sceneContext) => {\r\n const scene = sceneContext.currentScene;\r\n if (!scene) {\r\n return undefined;\r\n }\r\n\r\n const animationContentRegistration = propertiesService.addSectionContent({\r\n key: \"Animation Properties\",\r\n predicate: (entity: unknown) => IsAnimatable(entity) || IsAnimationRangeContainer(entity) || IsAnimatableContainer(entity),\r\n content: [\r\n {\r\n section: \"Animation\",\r\n component: ({ context }) => <AnimationsProperties scene={scene} entity={context} />,\r\n },\r\n ],\r\n });\r\n\r\n return {\r\n dispose: () => {\r\n animationContentRegistration.dispose();\r\n },\r\n };\r\n },\r\n};\r\n","import { useEffect, useState } from \"react\";\r\nimport type { FunctionComponent } from \"react\";\r\n\r\nimport { Body1 } from \"@fluentui/react-components\";\r\nimport { PropertyLine } from \"./propertyLine\";\r\nimport type { PrimitiveProps } from \"../../primitives/primitive\";\r\nimport type { PropertyLineProps } from \"./propertyLine\";\r\n\r\nimport { SyncedSliderPropertyLine } from \"./syncedSliderPropertyLine\";\r\nimport type { Vector3 } from \"core/Maths/math.vector\";\r\nimport { Quaternion, Vector2, Vector4 } from \"core/Maths/math.vector\";\r\nimport { Tools } from \"core/Misc/tools\";\r\nimport { CalculatePrecision } from \"../../primitives/utils\";\r\n\r\nexport type TensorPropertyLineProps<V extends Vector2 | Vector3 | Vector4 | Quaternion> = PropertyLineProps<V> &\r\n PrimitiveProps<V> & {\r\n /**\r\n * If passed, all sliders will use this for the min value\r\n */\r\n min?: number;\r\n /**\r\n * If passed, all sliders will use this for the max value\r\n */\r\n max?: number;\r\n /**\r\n * Will be displayed in the input UI to indicate the unit of measurement\r\n */\r\n unit?: string;\r\n\r\n /**\r\n * Internal spinbutton's step\r\n */\r\n step?: number;\r\n /**\r\n * If passed, the UX will use the conversion functions to display/update values\r\n */\r\n valueConverter?: {\r\n /**\r\n * Will call from(val) before displaying in the UX\r\n */\r\n from: (val: number) => number;\r\n /**\r\n * Will call to(val) before calling onChange\r\n */\r\n to: (val: number) => number;\r\n };\r\n };\r\n\r\nconst HasZ = (vector: Vector2 | Vector3 | Vector4 | Quaternion): vector is Vector3 => !(vector instanceof Vector2);\r\nconst HasW = (vector: Vector2 | Vector3 | Vector4 | Quaternion): vector is Vector4 => vector instanceof Vector4 || vector instanceof Quaternion;\r\n\r\n/**\r\n * Reusable component which renders a vector property line containing a label, vector value, and expandable XYZW values\r\n * The expanded section contains a slider/input box for each component of the vector (x, y, z, w)\r\n * @param props\r\n * @returns\r\n */\r\nconst TensorPropertyLine: FunctionComponent<TensorPropertyLineProps<Vector2 | Vector3 | Vector4 | Quaternion>> = (props) => {\r\n TensorPropertyLine.displayName = \"TensorPropertyLine\";\r\n const converted = (val: number) => (props.valueConverter ? props.valueConverter.from(val) : val);\r\n const formatted = (val: number) => converted(val).toFixed(props.step !== undefined ? Math.max(0, CalculatePrecision(props.step)) : 2);\r\n\r\n const [vector, setVector] = useState(props.value);\r\n const { min, max } = props;\r\n\r\n const onChange = (val: number, key: \"x\" | \"y\" | \"z\" | \"w\") => {\r\n const value = props.valueConverter ? props.valueConverter.to(val) : val;\r\n const newVector = vector.clone();\r\n (newVector as Vector4)[key] = value; // The syncedSlider for 'w' is only rendered when vector is a Vector4, so this is safe\r\n\r\n setVector(newVector);\r\n props.onChange(newVector);\r\n };\r\n\r\n useEffect(() => {\r\n setVector(props.value);\r\n }, [props.value, props.expandedContent]);\r\n\r\n return (\r\n <PropertyLine\r\n {...props}\r\n onCopy={() => `new ${props.value.getClassName()}(${vector.x},${vector.y}${HasZ(vector) ? `,${vector.z}` : \"\"}${HasW(vector) ? `,${vector.w}` : \"\"})`}\r\n expandedContent={\r\n <>\r\n <SyncedSliderPropertyLine\r\n label=\"X\"\r\n value={converted(vector.x)}\r\n min={min}\r\n max={max}\r\n onChange={(val) => onChange(val, \"x\")}\r\n unit={props.unit}\r\n step={props.step}\r\n />\r\n <SyncedSliderPropertyLine\r\n label=\"Y\"\r\n value={converted(vector.y)}\r\n min={min}\r\n max={max}\r\n onChange={(val) => onChange(val, \"y\")}\r\n unit={props.unit}\r\n step={props.step}\r\n />\r\n {HasZ(vector) && (\r\n <SyncedSliderPropertyLine\r\n label=\"Z\"\r\n value={converted(vector.z)}\r\n min={min}\r\n max={max}\r\n onChange={(val) => onChange(val, \"z\")}\r\n unit={props.unit}\r\n step={props.step}\r\n />\r\n )}\r\n {HasW(vector) && (\r\n <SyncedSliderPropertyLine\r\n label=\"W\"\r\n value={converted(vector.w)}\r\n min={min}\r\n max={max}\r\n onChange={(val) => onChange(val, \"w\")}\r\n unit={props.unit}\r\n step={props.step}\r\n />\r\n )}\r\n </>\r\n }\r\n >\r\n <Body1>{`[${formatted(props.value.x)}, ${formatted(props.value.y)}${HasZ(props.value) ? `, ${formatted(props.value.z)}` : \"\"}${HasW(props.value) ? `, ${formatted(props.value.w)}` : \"\"}]`}</Body1>\r\n </PropertyLine>\r\n );\r\n};\r\n\r\ntype RotationVectorPropertyLineProps = TensorPropertyLineProps<Vector3> & {\r\n /**\r\n * Display angles as degrees instead of radians\r\n */\r\n useDegrees?: boolean;\r\n};\r\n\r\nconst ToDegreesConverter = { from: Tools.ToDegrees, to: Tools.ToRadians };\r\nexport const RotationVectorPropertyLine: FunctionComponent<RotationVectorPropertyLineProps> = (props) => {\r\n RotationVectorPropertyLine.displayName = \"RotationVectorPropertyLine\";\r\n const min = props.useDegrees ? 0 : undefined;\r\n const max = props.useDegrees ? 360 : undefined;\r\n return (\r\n <Vector3PropertyLine\r\n {...props}\r\n unit={props.useDegrees ? \"deg\" : \"rad\"}\r\n valueConverter={props.useDegrees ? ToDegreesConverter : undefined}\r\n min={min}\r\n max={max}\r\n step={0.001}\r\n />\r\n );\r\n};\r\n\r\ntype QuaternionPropertyLineProps = TensorPropertyLineProps<Quaternion> & {\r\n /**\r\n * Display angles as degrees instead of radians\r\n */\r\n useDegrees?: boolean;\r\n};\r\nconst QuaternionPropertyLineInternal = TensorPropertyLine as FunctionComponent<TensorPropertyLineProps<Quaternion>>;\r\nexport const QuaternionPropertyLine: FunctionComponent<QuaternionPropertyLineProps> = (props) => {\r\n QuaternionPropertyLine.displayName = \"QuaternionPropertyLine\";\r\n const min = props.useDegrees ? 0 : undefined;\r\n const max = props.useDegrees ? 360 : undefined;\r\n const [quat, setQuat] = useState(props.value);\r\n\r\n // Extract only the properties that exist on QuaternionPropertyLineProps\r\n const { useDegrees, ...restProps } = props;\r\n\r\n const onQuatChange = (val: Quaternion) => {\r\n setQuat(val);\r\n props.onChange(val);\r\n };\r\n\r\n const onEulerChange = (val: Vector3) => {\r\n const quat = Quaternion.FromEulerAngles(val.x, val.y, val.z);\r\n setQuat(quat);\r\n props.onChange(quat);\r\n };\r\n\r\n return useDegrees ? (\r\n <Vector3PropertyLine\r\n {...restProps}\r\n nullable={false}\r\n ignoreNullable={false}\r\n value={quat.toEulerAngles()}\r\n valueConverter={ToDegreesConverter}\r\n min={min}\r\n max={max}\r\n onChange={onEulerChange}\r\n unit=\"deg\"\r\n />\r\n ) : (\r\n <QuaternionPropertyLineInternal {...props} unit={\"rad\"} nullable={false} value={quat} min={min} max={max} onChange={onQuatChange} />\r\n );\r\n};\r\nexport const Vector2PropertyLine = TensorPropertyLine as FunctionComponent<TensorPropertyLineProps<Vector2>>;\r\nexport const Vector3PropertyLine = TensorPropertyLine as FunctionComponent<TensorPropertyLineProps<Vector3>>;\r\nexport const Vector4PropertyLine = TensorPropertyLine as FunctionComponent<TensorPropertyLineProps<Vector4>>;\r\n","import { Dropdown as FluentDropdown, makeStyles, mergeClasses, Option, useId } from \"@fluentui/react-components\";\r\nimport { useContext, useEffect, useState } from \"react\";\r\nimport type { FunctionComponent } from \"react\";\r\nimport type { PrimitiveProps } from \"./primitive\";\r\nimport { InfoLabel } from \"./infoLabel\";\r\nimport { ToolContext } from \"../hoc/fluentToolWrapper\";\r\n\r\nconst useDropdownStyles = makeStyles({\r\n dropdown: {\r\n minWidth: 0,\r\n width: \"100%\",\r\n },\r\n container: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n justifyContent: \"center\", // align items vertically\r\n },\r\n dropdownText: { textAlign: \"end\", textOverflow: \"ellipsis\", whiteSpace: \"nowrap\", overflowX: \"hidden\" },\r\n});\r\n\r\nexport type AcceptedDropdownValue = string | number;\r\nexport type DropdownOption<T extends AcceptedDropdownValue> = {\r\n /**\r\n * Defines the visible part of the option\r\n */\r\n label: string;\r\n /**\r\n * Defines the value part of the option\r\n */\r\n value: T;\r\n};\r\n\r\nexport type DropdownProps<V extends AcceptedDropdownValue> = PrimitiveProps<V> & {\r\n options: readonly DropdownOption<V>[];\r\n};\r\n\r\n/**\r\n * Renders a fluent UI dropdown component for the options passed in, and an additional 'Not Defined' option if null is set to true\r\n * This component can handle both null and undefined values\r\n * @param props\r\n * @returns dropdown component\r\n */\r\nexport const Dropdown: FunctionComponent<DropdownProps<AcceptedDropdownValue>> = (props) => {\r\n Dropdown.displayName = \"Dropdown\";\r\n const classes = useDropdownStyles();\r\n const { options, value } = props;\r\n const [defaultVal, setDefaultVal] = useState(props.value);\r\n const { size } = useContext(ToolContext);\r\n\r\n useEffect(() => {\r\n setDefaultVal(value);\r\n }, [props.value]);\r\n const id = useId(\"dropdown\");\r\n\r\n const mergedClassName = mergeClasses(classes.container, props.className);\r\n\r\n const optionLabel = options.find((o) => o.value === defaultVal)?.label;\r\n\r\n return (\r\n <div className={mergedClassName}>\r\n {props.infoLabel && <InfoLabel {...props.infoLabel} htmlFor={id} />}\r\n <FluentDropdown\r\n id={id}\r\n disabled={props.disabled}\r\n size={size}\r\n className={classes.dropdown}\r\n button={<span className={classes.dropdownText}>{optionLabel}</span>}\r\n onOptionSelect={(evt, data) => {\r\n const value = typeof props.value === \"number\" ? Number(data.optionValue) : data.optionValue;\r\n if (value !== undefined) {\r\n setDefaultVal(value);\r\n props.onChange(value);\r\n }\r\n }}\r\n selectedOptions={[defaultVal.toString()]}\r\n value={optionLabel}\r\n >\r\n {options.map((option: DropdownOption<AcceptedDropdownValue>) => (\r\n <Option key={option.label} value={option.value.toString()} disabled={false}>\r\n {option.label}\r\n </Option>\r\n ))}\r\n </FluentDropdown>\r\n </div>\r\n );\r\n};\r\n\r\nexport const NumberDropdown = Dropdown as FunctionComponent<DropdownProps<number>>;\r\nexport const StringDropdown = Dropdown as FunctionComponent<DropdownProps<string>>;\r\n","/* eslint-disable jsdoc/require-returns */\r\n/* eslint-disable @typescript-eslint/naming-convention */\r\nimport { useState, useEffect, useCallback, useContext } from \"react\";\r\nimport type { FunctionComponent } from \"react\";\r\nimport {\r\n ColorPicker as FluentColorPicker,\r\n ColorSlider,\r\n ColorArea,\r\n AlphaSlider,\r\n Link,\r\n makeStyles,\r\n Popover,\r\n PopoverSurface,\r\n PopoverTrigger,\r\n tokens,\r\n Body1Strong,\r\n ColorSwatch,\r\n Body1,\r\n} from \"@fluentui/react-components\";\r\nimport type { ColorPickerProps as FluentColorPickerProps } from \"@fluentui/react-components\";\r\nimport { Color3, Color4 } from \"core/Maths/math.color\";\r\nimport type { PrimitiveProps } from \"./primitive\";\r\nimport { SpinButton } from \"./spinButton\";\r\nimport { TextInput } from \"./textInput\";\r\nimport { NumberDropdown } from \"./dropdown\";\r\nimport { ValidateColorHex } from \"./utils\";\r\nimport { ToolContext } from \"../hoc/fluentToolWrapper\";\r\n\r\nconst useColorPickerStyles = makeStyles({\r\n container: {\r\n width: \"350px\",\r\n display: \"flex\", // becomes a flexbox\r\n flexDirection: \"column\", // with children in a column\r\n alignItems: \"center\", // centers children horizontally\r\n justifyContent: \"center\", // centers children vertically (if height is set)\r\n gap: tokens.spacingVerticalM,\r\n overflow: \"visible\",\r\n },\r\n row: {\r\n flex: 1, // is a row in the container's flex column\r\n display: \"flex\", // becomes its own flexbox\r\n flexDirection: \"row\", // with children in a row\r\n gap: tokens.spacingHorizontalXL,\r\n alignItems: \"center\", // align items vertically\r\n width: \"100%\",\r\n },\r\n colorPicker: {\r\n flex: 1,\r\n width: \"350px\",\r\n height: \"350px\",\r\n },\r\n previewColor: {\r\n width: \"60px\",\r\n height: \"60px\",\r\n borderRadius: tokens.borderRadiusMedium, // 4px?\r\n border: `${tokens.spacingVerticalXXS} solid ${tokens.colorNeutralShadowKeyLighter}`,\r\n \"@media (forced-colors: active)\": {\r\n forcedColorAdjust: \"none\", // ensures elmement maintains color in high constrast mode\r\n },\r\n },\r\n inputRow: {\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n flex: 1, // grow and fill available space\r\n justifyContent: \"center\",\r\n gap: \"10px\",\r\n width: \"100%\",\r\n },\r\n inputField: {\r\n flex: 1, // grow and fill available space\r\n width: \"auto\",\r\n minWidth: 0,\r\n gap: tokens.spacingVerticalSNudge, // 6px\r\n },\r\n});\r\n\r\nexport type ColorPickerProps<C extends Color3 | Color4> = {\r\n isLinearMode?: boolean;\r\n} & PrimitiveProps<C>;\r\n\r\nexport const ColorPickerPopup: FunctionComponent<ColorPickerProps<Color3 | Color4>> = (props) => {\r\n ColorPickerPopup.displayName = \"ColorPickerPopup\";\r\n const classes = useColorPickerStyles();\r\n const [color, setColor] = useState(props.value);\r\n const [popoverOpen, setPopoverOpen] = useState(false);\r\n const [isLinear, setIsLinear] = useState(props.isLinearMode ?? false);\r\n const [isFloat, setFloat] = useState(false);\r\n const { size } = useContext(ToolContext);\r\n useEffect(() => {\r\n setColor(props.value); // Ensures the trigger color updates when props.value changes\r\n }, [props.value]);\r\n\r\n const handleColorPickerChange: FluentColorPickerProps[\"onColorChange\"] = (_, data) => {\r\n let color: Color3 | Color4 = Color3.FromHSV(data.color.h, data.color.s, data.color.v);\r\n if (props.value instanceof Color4) {\r\n color = Color4.FromColor3(color, data.color.a ?? 1);\r\n }\r\n handleChange(color);\r\n };\r\n\r\n const handleChange = (newColor: Color3 | Color4) => {\r\n setColor(newColor);\r\n props.onChange(newColor); // Ensures the parent is notified when color changes from within colorPicker\r\n };\r\n\r\n return (\r\n <Popover\r\n positioning={{\r\n align: \"start\",\r\n overflowBoundary: document.body,\r\n autoSize: true,\r\n }}\r\n open={popoverOpen}\r\n trapFocus\r\n onOpenChange={(_, data) => setPopoverOpen(data.open)}\r\n >\r\n <PopoverTrigger disableButtonEnhancement>\r\n <ColorSwatch\r\n borderColor={tokens.colorNeutralShadowKeyDarker}\r\n size={size === \"small\" ? \"extra-small\" : \"small\"}\r\n shape=\"rounded\"\r\n color={color.toHexString()}\r\n value={color.toHexString().slice(1)}\r\n />\r\n </PopoverTrigger>\r\n\r\n <PopoverSurface>\r\n <div className={classes.container}>\r\n <FluentColorPicker className={classes.colorPicker} color={rgbaToHsv(color)} onColorChange={handleColorPickerChange}>\r\n <ColorArea inputX={{ \"aria-label\": \"Saturation\" }} inputY={{ \"aria-label\": \"Brightness\" }} />\r\n <ColorSlider aria-label=\"Hue\" />\r\n {color instanceof Color4 && <AlphaSlider aria-label=\"Alpha\" />}\r\n </FluentColorPicker>\r\n {/* Top Row: Preview, Gamma Hex, Linear Hex */}\r\n <div className={classes.row}>\r\n <div className={classes.previewColor} style={{ backgroundColor: color.toHexString() }} />\r\n <NumberDropdown\r\n className={classes.inputField}\r\n infoLabel={{\r\n label: \"Color Space\",\r\n info: <Body1>Today this is not mutable as the color space is determined by the entity. Soon we will allow swapping</Body1>,\r\n }}\r\n options={[\r\n { label: \"Gamma\", value: 0 },\r\n { label: \"Linear\", value: 1 },\r\n ]}\r\n disabled={true}\r\n value={isLinear ? 1 : 0}\r\n onChange={(val: number) => setIsLinear(val === 1)}\r\n />\r\n <NumberDropdown\r\n className={classes.inputField}\r\n infoLabel={{\r\n label: \"Data Type\",\r\n info: <Body1>We will introduce this functionality soon!</Body1>,\r\n }}\r\n options={[\r\n { label: \"Int\", value: 0 },\r\n { label: \"Float\", value: 1 },\r\n ]}\r\n disabled={true}\r\n value={isFloat ? 1 : 0}\r\n onChange={(val: number) => setFloat(val === 1)}\r\n />\r\n </div>\r\n\r\n {/* Middle Row: Red, Green, Blue, Alpha */}\r\n <div className={classes.inputRow}>\r\n <InputRgbField title=\"Red\" value={color} rgbKey=\"r\" onChange={handleChange} />\r\n <InputRgbField title=\"Green\" value={color} rgbKey=\"g\" onChange={handleChange} />\r\n <InputRgbField title=\"Blue\" value={color} rgbKey=\"b\" onChange={handleChange} />\r\n <InputAlphaField color={color} onChange={handleChange} />\r\n </div>\r\n\r\n {/* Bottom Row: Hue, Saturation, Value */}\r\n <div className={classes.inputRow}>\r\n <InputHsvField title=\"Hue\" value={color} hsvKey=\"h\" max={360} onChange={handleChange} />\r\n <InputHsvField title=\"Saturation\" value={color} hsvKey=\"s\" max={100} scale={100} onChange={handleChange} />\r\n <InputHsvField title=\"Value\" value={color} hsvKey=\"v\" max={100} scale={100} onChange={handleChange} />\r\n </div>\r\n\r\n <div className={classes.inputRow}>\r\n <InputHexField title=\"Hexadecimal\" linearHex={isLinear} isLinearMode={isLinear} value={color} onChange={handleChange} />\r\n </div>\r\n </div>\r\n </PopoverSurface>\r\n </Popover>\r\n );\r\n};\r\n\r\nexport type InputHexProps = PrimitiveProps<Color3 | Color4> & {\r\n linearHex?: boolean;\r\n isLinearMode?: boolean;\r\n};\r\n/**\r\n * Component which displays the passed in color's HEX value, either in linearSpace (if linearHex is true) or in gamma space\r\n * When the hex color is changed by user, component calculates the new Color3/4 value and calls onChange\r\n *\r\n * Component uses the isLinearMode boolean to display an informative label regarding linear / gamma space\r\n * @param props - The properties for the InputHexField component.\r\n * @returns\r\n */\r\nexport const InputHexField: FunctionComponent<InputHexProps> = (props) => {\r\n const classes = useColorPickerStyles();\r\n const { title, value, onChange, linearHex, isLinearMode } = props;\r\n\r\n return (\r\n <TextInput\r\n disabled={linearHex ? !isLinearMode : false}\r\n className={classes.inputField}\r\n value={linearHex ? value.toLinearSpace().toHexString() : value.toHexString()}\r\n validator={ValidateColorHex}\r\n onChange={(val) => (linearHex ? onChange(Color3.FromHexString(val).toGammaSpace()) : onChange(Color3.FromHexString(val)))}\r\n infoLabel={\r\n title\r\n ? {\r\n label: title,\r\n // If not representing a linearHex, no info is needed.\r\n info: !props.linearHex ? undefined : !isLinearMode ? ( // If representing a linear hex but we are in gammaMode, simple message explaining why linearHex is disabled\r\n <> This color picker is attached to an entity whose color is stored in gamma space, so we are showing linear hex in disabled view </>\r\n ) : (\r\n // If representing a linear hex and we are in linearMode, give information about how to use these hex values\r\n <>\r\n This color picker is attached to an entity whose color is stored in linear space (ex: PBR Material), and Babylon converts the color to gamma space\r\n before rendering on screen because the human eye is best at processing colors in gamma space. We thus also want to display the color picker in\r\n gamma space so that the color chosen here will match the color seen in your entity.\r\n <br />\r\n If you want to copy/paste the HEX into your code, you can either use\r\n <Body1Strong>Color3.FromHexString(LINEAR_HEX)</Body1Strong>\r\n <br />\r\n or\r\n <br />\r\n <Body1Strong>Color3.FromHexString(GAMMA_HEX).toLinearSpace()</Body1Strong>\r\n <br />\r\n <br />\r\n <Link href=\"https://doc.babylonjs.com/preparingArtForBabylon/controllingColorSpace/\"> Read more in our docs! </Link>\r\n </>\r\n ),\r\n }\r\n : undefined\r\n }\r\n />\r\n );\r\n};\r\n\r\ntype RgbKey = \"r\" | \"g\" | \"b\";\r\ntype InputRgbFieldProps = PrimitiveProps<Color3 | Color4> & {\r\n rgbKey: RgbKey;\r\n};\r\n\r\nconst InputRgbField: FunctionComponent<InputRgbFieldProps> = (props) => {\r\n const { value, onChange, title, rgbKey } = props;\r\n const classes = useColorPickerStyles();\r\n\r\n const handleChange = useCallback(\r\n (val: number) => {\r\n const newColor = value.clone();\r\n newColor[rgbKey] = val / 255.0; // Convert to 0-1 range\r\n onChange(newColor);\r\n },\r\n [value, onChange, rgbKey]\r\n );\r\n\r\n return (\r\n <SpinButton\r\n title={title}\r\n infoLabel={title ? { label: title } : undefined}\r\n className={classes.inputField}\r\n min={0}\r\n max={255}\r\n value={Math.round(value[rgbKey] * 255)}\r\n forceInt\r\n onChange={handleChange}\r\n />\r\n );\r\n};\r\n\r\nfunction rgbaToHsv(color: { r: number; g: number; b: number; a?: number }): { h: number; s: number; v: number; a?: number } {\r\n const c = new Color3(color.r, color.g, color.b);\r\n const hsv = c.toHSV();\r\n return { h: hsv.r, s: hsv.g, v: hsv.b, a: color.a };\r\n}\r\n\r\ntype HsvKey = \"h\" | \"s\" | \"v\";\r\ntype InputHsvFieldProps = PrimitiveProps<Color3 | Color4> & {\r\n hsvKey: HsvKey;\r\n max: number;\r\n scale?: number;\r\n};\r\n\r\n/**\r\n * In the HSV (Hue, Saturation, Value) color model, Hue (H) ranges from 0 to 360 degrees, representing the color's position on the color wheel.\r\n * Saturation (S) ranges from 0 to 100%, indicating the intensity or purity of the color, with 0 being shades of gray and 100 being a fully saturated color.\r\n * Value (V) ranges from 0 to 100%, representing the brightness of the color, with 0 being black and 100 being the brightest.\r\n * @param props - The properties for the InputHsvField component.\r\n */\r\nexport const InputHsvField: FunctionComponent<InputHsvFieldProps> = (props) => {\r\n const { value, title, hsvKey, max, onChange, scale = 1 } = props;\r\n\r\n const classes = useColorPickerStyles();\r\n\r\n const handleChange = useCallback(\r\n (val: number) => {\r\n // Convert current color to HSV, update the new hsv value, then call onChange prop\r\n const hsv = rgbaToHsv(value);\r\n hsv[hsvKey] = val / scale;\r\n let newColor: Color3 | Color4 = Color3.FromHSV(hsv.h, hsv.s, hsv.v);\r\n if (value instanceof Color4) {\r\n newColor = Color4.FromColor3(newColor, value.a ?? 1);\r\n }\r\n props.onChange(newColor);\r\n },\r\n [value, onChange, hsvKey, scale]\r\n );\r\n\r\n return (\r\n <SpinButton\r\n infoLabel={title ? { label: title } : undefined}\r\n title={title}\r\n className={classes.inputField}\r\n min={0}\r\n max={max}\r\n value={Math.round(rgbaToHsv(value)[hsvKey] * scale)}\r\n forceInt\r\n onChange={handleChange}\r\n />\r\n );\r\n};\r\n\r\ntype InputAlphaProps = {\r\n color: Color3 | Color4;\r\n onChange: (color: Color4) => void;\r\n};\r\n\r\n/**\r\n * Displays the alpha value of a color, either in the disabled state (if color is Color3) or as a spin button (if color is Color4).\r\n * @param props\r\n * @returns\r\n */\r\nconst InputAlphaField: FunctionComponent<InputAlphaProps> = (props) => {\r\n const classes = useColorPickerStyles();\r\n const { color, onChange } = props;\r\n\r\n const handleChange = useCallback(\r\n (value: number) => {\r\n if (Number.isNaN(value) || value < 0 || value > 1) {\r\n return;\r\n }\r\n\r\n if (color instanceof Color4) {\r\n const newColor = color.clone();\r\n newColor.a = value;\r\n return newColor;\r\n } else {\r\n return Color4.FromColor3(color, value);\r\n }\r\n },\r\n [onChange]\r\n );\r\n\r\n return (\r\n <SpinButton\r\n disabled={color instanceof Color3}\r\n min={0}\r\n max={1}\r\n className={classes.inputField}\r\n value={color instanceof Color3 ? 1 : color.a}\r\n step={0.01}\r\n onChange={handleChange}\r\n infoLabel={{\r\n label: \"Alpha\",\r\n info:\r\n color instanceof Color3 ? (\r\n <>\r\n Because this color picker is representing a Color3, we do not permit modifying alpha from the color picker. You can however modify the entity's alpha\r\n property directly, either in code via entity.alpha OR via inspector's transparency section.\r\n </>\r\n ) : undefined,\r\n }}\r\n />\r\n );\r\n};\r\n","import type { FunctionComponent } from \"react\";\r\nimport { forwardRef, useEffect, useState } from \"react\";\r\n\r\nimport type { PropertyLineProps } from \"./propertyLine\";\r\nimport { PropertyLine } from \"./propertyLine\";\r\nimport { SyncedSliderPropertyLine } from \"./syncedSliderPropertyLine\";\r\n\r\nimport type { Color3 } from \"core/Maths/math.color\";\r\nimport { Color4 } from \"core/Maths/math.color\";\r\nimport { ColorPickerPopup } from \"../../primitives/colorPicker\";\r\nimport type { ColorPickerProps } from \"../../primitives/colorPicker\";\r\n\r\nexport type ColorPropertyLineProps = ColorPickerProps<Color3 | Color4> & PropertyLineProps<Color3 | Color4>;\r\n\r\n/**\r\n * Reusable component which renders a color property line containing a label, colorPicker popout, and expandable RGBA values\r\n * The expandable RGBA values are synced sliders that allow the user to modify the color's RGBA values directly\r\n * @param props - PropertyLine props, replacing children with a color object so that we can properly display the color\r\n * @returns Component wrapping a colorPicker component with a property line\r\n */\r\nconst ColorPropertyLine = forwardRef<HTMLDivElement, ColorPropertyLineProps>((props, ref) => {\r\n ColorPropertyLine.displayName = \"ColorPropertyLine\";\r\n const [color, setColor] = useState(props.value);\r\n\r\n useEffect(() => {\r\n setColor(props.value);\r\n }, [props.value]);\r\n\r\n const onSliderChange = (value: number, key: \"r\" | \"g\" | \"b\" | \"a\") => {\r\n let newColor: Color3 | Color4;\r\n if (key === \"a\") {\r\n newColor = Color4.FromColor3(color, value);\r\n } else {\r\n newColor = color.clone();\r\n newColor[key] = value / 255;\r\n }\r\n\r\n setColor(newColor); // Create a new object to trigger re-render\r\n props.onChange(newColor);\r\n };\r\n\r\n const onColorPickerChange = (newColor: Color3 | Color4) => {\r\n setColor(newColor);\r\n props.onChange(newColor);\r\n };\r\n\r\n return (\r\n <PropertyLine\r\n ref={ref}\r\n {...props}\r\n expandedContent={\r\n <>\r\n <SyncedSliderPropertyLine label=\"R\" value={color.r * 255} min={0} max={255} onChange={(value) => onSliderChange(value, \"r\")} />\r\n <SyncedSliderPropertyLine label=\"G\" value={color.g * 255} min={0} max={255} onChange={(value) => onSliderChange(value, \"g\")} />\r\n <SyncedSliderPropertyLine label=\"B\" value={color.b * 255} min={0} max={255} onChange={(value) => onSliderChange(value, \"b\")} />\r\n {color instanceof Color4 && <SyncedSliderPropertyLine label=\"A\" value={color.a} min={0} max={1} step={0.01} onChange={(value) => onSliderChange(value, \"a\")} />}\r\n </>\r\n }\r\n >\r\n <ColorPickerPopup {...props} onChange={onColorPickerChange} value={color} />\r\n </PropertyLine>\r\n );\r\n});\r\n\r\nexport const Color3PropertyLine = ColorPropertyLine as FunctionComponent<ColorPickerProps<Color3> & PropertyLineProps<Color3>>;\r\nexport const Color4PropertyLine = ColorPropertyLine as FunctionComponent<ColorPickerProps<Color4> & PropertyLineProps<Color4>>;\r\n","import type { FunctionComponent } from \"react\";\r\n\r\nimport { SyncedSliderPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/syncedSliderPropertyLine\";\r\nimport { SwitchPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/switchPropertyLine\";\r\nimport { BoundProperty } from \"./boundProperty\";\r\nimport type { Atmosphere } from \"addons/atmosphere/atmosphere\";\r\nimport { Vector3PropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/vectorPropertyLine\";\r\nimport { Color3PropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/colorPropertyLine\";\r\nimport { PropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/propertyLine\";\r\n\r\nexport const GeneralAtmosphereProperties: FunctionComponent<{ entity: Atmosphere }> = (props) => {\r\n const { entity: atmosphere } = props;\r\n return (\r\n <>\r\n <BoundProperty\r\n label=\"Planet Radius (km)\"\r\n component={SyncedSliderPropertyLine}\r\n target={atmosphere.physicalProperties}\r\n propertyKey=\"planetRadius\"\r\n min={1000.0}\r\n max={10000.0}\r\n step={1}\r\n />\r\n <BoundProperty\r\n label=\"Atmosphere Thickness (km)\"\r\n component={SyncedSliderPropertyLine}\r\n target={atmosphere.physicalProperties}\r\n propertyKey=\"atmosphereThickness\"\r\n min={1.0}\r\n max={200.0}\r\n step={1}\r\n />\r\n </>\r\n );\r\n};\r\nexport const ScatteringAndAbsorptionProperties: FunctionComponent<{ entity: Atmosphere }> = (props) => {\r\n const { entity: atmosphere } = props;\r\n return (\r\n <>\r\n <PropertyLine\r\n label=\"Rayleigh Scattering\"\r\n expandByDefault\r\n description=\"Rayleigh scattering is the scattering of light off of the molecules of the atmosphere. It is the main reason why the sky is blue. Increasing the Rayleigh scattering coefficient will result in a bluer sky.\"\r\n expandedContent={\r\n <>\r\n <BoundProperty\r\n label=\"Scale\"\r\n component={SyncedSliderPropertyLine}\r\n target={atmosphere.physicalProperties}\r\n propertyKey=\"rayleighScatteringScale\"\r\n min={0.0}\r\n max={5.0}\r\n step={0.01}\r\n />\r\n <BoundProperty\r\n label=\"Coefficient\"\r\n component={Vector3PropertyLine}\r\n target={atmosphere.physicalProperties}\r\n propertyKey=\"peakRayleighScattering\"\r\n convertTo={(value) => value.scale(1000)}\r\n convertFrom={(value) => value.scale(0.001)}\r\n min={0}\r\n step={0.01}\r\n unit=\"Mm\"\r\n />\r\n </>\r\n }\r\n />\r\n <PropertyLine\r\n label=\"Mie Scattering\"\r\n description=\"Mie scattering is the scattering of light off of the larger particles in the atmosphere, such as dust and water droplets. It is responsible for the white appearance of clouds and the haziness of the sky. Increasing the Mie scattering coefficient will result in a whiter sky.\"\r\n expandByDefault\r\n expandedContent={\r\n <>\r\n <BoundProperty\r\n label=\"Scale\"\r\n component={SyncedSliderPropertyLine}\r\n target={atmosphere.physicalProperties}\r\n propertyKey=\"mieScatteringScale\"\r\n min={0.0}\r\n max={5.0}\r\n step={0.01}\r\n />\r\n <BoundProperty\r\n label=\"Coefficient\"\r\n component={Vector3PropertyLine}\r\n target={atmosphere.physicalProperties}\r\n propertyKey=\"peakMieScattering\"\r\n convertTo={(value) => value.scale(1000)}\r\n convertFrom={(value) => value.scale(0.001)}\r\n min={0}\r\n step={0.01}\r\n unit=\"Mm\"\r\n />\r\n </>\r\n }\r\n />\r\n <PropertyLine\r\n label=\"Mie Absorption\"\r\n description=\"Mie absorption is the absorption of light by the larger particles in the atmosphere, such as dust and water droplets. It is responsible for the dimming of the sun during haze and fog. Increasing mie absorption coefficient will result in visually darker skies.\"\r\n expandByDefault\r\n expandedContent={\r\n <>\r\n <BoundProperty\r\n label=\"Scale\"\r\n component={SyncedSliderPropertyLine}\r\n target={atmosphere.physicalProperties}\r\n propertyKey=\"mieAbsorptionScale\"\r\n min={0.0}\r\n max={5.0}\r\n step={0.01}\r\n />\r\n <BoundProperty\r\n label=\"Coefficient\"\r\n component={Vector3PropertyLine}\r\n target={atmosphere.physicalProperties}\r\n propertyKey=\"peakMieAbsorption\"\r\n convertTo={(value) => value.scale(1000)}\r\n convertFrom={(value) => value.scale(0.001)}\r\n min={0}\r\n step={0.01}\r\n unit=\"Mm\"\r\n />\r\n </>\r\n }\r\n />\r\n <PropertyLine\r\n label=\"Ozone Absorption\"\r\n expandByDefault\r\n description=\"Ozone absorption is the absorption of light by ozone molecules in the atmosphere. Increasing ozone absorption coefficient will result in visually darker skies.\"\r\n expandedContent={\r\n <>\r\n <BoundProperty\r\n label=\"Scale\"\r\n component={SyncedSliderPropertyLine}\r\n target={atmosphere.physicalProperties}\r\n propertyKey=\"ozoneAbsorptionScale\"\r\n min={0.0}\r\n max={5.0}\r\n step={0.01}\r\n />\r\n <BoundProperty\r\n label=\"Coefficient\"\r\n component={Vector3PropertyLine}\r\n target={atmosphere.physicalProperties}\r\n propertyKey=\"peakOzoneAbsorption\"\r\n convertTo={(value) => value.scale(1000)}\r\n convertFrom={(value) => value.scale(0.001)}\r\n min={0}\r\n step={0.01}\r\n />\r\n </>\r\n }\r\n />\r\n </>\r\n );\r\n};\r\nexport const MultipleScatteringProperties: FunctionComponent<{ entity: Atmosphere }> = (props) => {\r\n const { entity: atmosphere } = props;\r\n\r\n return (\r\n <>\r\n <BoundProperty label=\"Intensity\" component={SyncedSliderPropertyLine} target={atmosphere} propertyKey=\"multiScatteringIntensity\" min={0} max={5.0} step={0.1} />\r\n <BoundProperty\r\n label=\"Minimum Intensity\"\r\n component={SyncedSliderPropertyLine}\r\n target={atmosphere}\r\n propertyKey=\"minimumMultiScatteringIntensity\"\r\n min={0.0}\r\n max={0.1}\r\n step={0.0001}\r\n />\r\n <BoundProperty label=\"Minimum Color\" component={Color3PropertyLine} target={atmosphere} propertyKey=\"minimumMultiScatteringColor\" />\r\n <BoundProperty label=\"Ground Albedo\" component={Color3PropertyLine} target={atmosphere} propertyKey=\"groundAlbedo\" />\r\n </>\r\n );\r\n};\r\nexport const AerialPerspectiveProperties: FunctionComponent<{ entity: Atmosphere }> = (props) => {\r\n const { entity: atmosphere } = props;\r\n\r\n return (\r\n <>\r\n <BoundProperty label=\"Intensity\" component={SyncedSliderPropertyLine} target={atmosphere} propertyKey=\"aerialPerspectiveIntensity\" min={0} max={5.0} step={0.1} />\r\n <BoundProperty\r\n label=\"Transmittance Scale\"\r\n component={SyncedSliderPropertyLine}\r\n target={atmosphere}\r\n propertyKey=\"aerialPerspectiveTransmittanceScale\"\r\n min={0}\r\n max={2.0}\r\n step={0.01}\r\n />\r\n <BoundProperty label=\"Saturation\" component={SyncedSliderPropertyLine} target={atmosphere} propertyKey=\"aerialPerspectiveSaturation\" min={0} max={2.0} step={0.01} />\r\n </>\r\n );\r\n};\r\nexport const DiffuseIrradianceProperties: FunctionComponent<{ entity: Atmosphere }> = (props) => {\r\n const { entity: atmosphere } = props;\r\n\r\n return (\r\n <>\r\n <BoundProperty label=\"Intensity\" component={SyncedSliderPropertyLine} target={atmosphere} propertyKey=\"diffuseSkyIrradianceIntensity\" min={0} max={5.0} step={0.001} />\r\n <BoundProperty\r\n label=\"Desaturation\"\r\n component={SyncedSliderPropertyLine}\r\n target={atmosphere}\r\n propertyKey=\"diffuseSkyIrradianceDesaturationFactor\"\r\n min={0}\r\n max={1.0}\r\n step={0.01}\r\n />\r\n <BoundProperty\r\n label=\"Additional Intensity\"\r\n component={SyncedSliderPropertyLine}\r\n target={atmosphere}\r\n propertyKey=\"additionalDiffuseSkyIrradianceIntensity\"\r\n min={0}\r\n max={100000.0}\r\n step={1}\r\n />\r\n <BoundProperty label=\"Additional Color\" component={Color3PropertyLine} target={atmosphere} propertyKey=\"additionalDiffuseSkyIrradianceColor\" />\r\n </>\r\n );\r\n};\r\nexport const RenderingOptionsProperties: FunctionComponent<{ entity: Atmosphere }> = (props) => {\r\n const { entity: atmosphere } = props;\r\n\r\n return (\r\n <>\r\n <BoundProperty label=\"Linear Space Output\" component={SwitchPropertyLine} target={atmosphere} propertyKey=\"isLinearSpaceComposition\" />\r\n <BoundProperty label=\"Linear Space Light\" component={SwitchPropertyLine} target={atmosphere} propertyKey=\"isLinearSpaceLight\" />\r\n <BoundProperty label=\"Use LUT for Sky (Optimization)\" component={SwitchPropertyLine} target={atmosphere} propertyKey=\"isSkyViewLutEnabled\" />\r\n <BoundProperty label=\"Use LUT for Aerial Perspective (Optimization)\" component={SwitchPropertyLine} target={atmosphere} propertyKey=\"isAerialPerspectiveLutEnabled\" />\r\n </>\r\n );\r\n};\r\n","import type { ServiceDefinition } from \"../../../modularity/serviceDefinition\";\r\nimport type { ISelectionService } from \"../../selectionService\";\r\nimport type { IPropertiesService } from \"./propertiesService\";\r\nimport type { ISceneContext } from \"../../../services/sceneContext\";\r\nimport { SelectionServiceIdentity } from \"../../selectionService\";\r\nimport { PropertiesServiceIdentity } from \"./propertiesService\";\r\nimport { SceneContextIdentity } from \"../../../services/sceneContext\";\r\nimport { Atmosphere } from \"addons/atmosphere/atmosphere\";\r\nimport {\r\n AerialPerspectiveProperties,\r\n DiffuseIrradianceProperties,\r\n GeneralAtmosphereProperties,\r\n MultipleScatteringProperties,\r\n RenderingOptionsProperties,\r\n ScatteringAndAbsorptionProperties,\r\n} from \"../../../components/properties/atmosphereProperties\";\r\nexport const AtmospherePropertiesServiceDefinition: ServiceDefinition<[], [IPropertiesService, ISelectionService, ISceneContext]> = {\r\n friendlyName: \"Atmosphere Properties\",\r\n consumes: [PropertiesServiceIdentity, SelectionServiceIdentity, SceneContextIdentity],\r\n factory: (propertiesService, selectionService, sceneContext) => {\r\n const scene = sceneContext.currentScene;\r\n if (!scene) {\r\n return undefined;\r\n }\r\n\r\n const atmosphereContentRegistration = propertiesService.addSectionContent({\r\n key: \"Atmosphere Properties\",\r\n predicate: (entity: unknown) => entity instanceof Atmosphere,\r\n content: [\r\n {\r\n section: \"General\",\r\n component: ({ context }) => <GeneralAtmosphereProperties entity={context} />,\r\n },\r\n {\r\n section: \"Scattering and Absorption\",\r\n component: ({ context }) => <ScatteringAndAbsorptionProperties entity={context} />,\r\n },\r\n {\r\n section: \"Multiple Scattering\",\r\n component: ({ context }) => <MultipleScatteringProperties entity={context} />,\r\n },\r\n {\r\n section: \"Aerial Perspective\",\r\n component: ({ context }) => <AerialPerspectiveProperties entity={context} />,\r\n },\r\n {\r\n section: \"Diffuse Sky Irradiance\",\r\n component: ({ context }) => <DiffuseIrradianceProperties entity={context} />,\r\n },\r\n {\r\n section: \"Rendering Options\",\r\n component: ({ context }) => <RenderingOptionsProperties entity={context} />,\r\n },\r\n ],\r\n });\r\n\r\n return {\r\n dispose: () => {\r\n atmosphereContentRegistration.dispose();\r\n },\r\n };\r\n },\r\n};\r\n","import type { FunctionComponent } from \"react\";\r\n\r\nimport type { ArcRotateCamera } from \"core/index\";\r\nimport type { ISettingsContext } from \"../../../services/settingsContext\";\r\n\r\nimport { NumberInputPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/inputPropertyLine\";\r\nimport { SwitchPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/switchPropertyLine\";\r\nimport { SyncedSliderPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/syncedSliderPropertyLine\";\r\nimport { Vector3PropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/vectorPropertyLine\";\r\nimport { useProperty } from \"../../../hooks/compoundPropertyHooks\";\r\nimport { useAngleConverters } from \"../../../hooks/settingsHooks\";\r\nimport { BoundProperty } from \"../boundProperty\";\r\n\r\nexport const ArcRotateCameraTransformProperties: FunctionComponent<{ camera: ArcRotateCamera; settings: ISettingsContext }> = (props) => {\r\n const { camera, settings } = props;\r\n\r\n const [toDisplayAngle, fromDisplayAngle, useDegrees] = useAngleConverters(settings);\r\n\r\n const lowerAlphaLimit = useProperty(camera, \"lowerAlphaLimit\") ?? 0;\r\n const upperAlphaLimit = useProperty(camera, \"upperAlphaLimit\") ?? Math.PI * 2;\r\n const lowerBetaLimit = useProperty(camera, \"lowerBetaLimit\") ?? -Math.PI;\r\n const upperBetaLimit = useProperty(camera, \"upperBetaLimit\") ?? Math.PI;\r\n const lowerRadiusLimit = useProperty(camera, \"lowerRadiusLimit\");\r\n const upperRadiusLimit = useProperty(camera, \"upperRadiusLimit\");\r\n\r\n return (\r\n <>\r\n <BoundProperty\r\n component={SyncedSliderPropertyLine}\r\n label=\"Alpha\"\r\n description={`Horizontal angle in ${useDegrees ? \"degrees\" : \"radians\"}`}\r\n target={camera}\r\n propertyKey=\"alpha\"\r\n min={toDisplayAngle(lowerAlphaLimit)}\r\n max={toDisplayAngle(upperAlphaLimit)}\r\n step={toDisplayAngle(0.01)}\r\n convertTo={(value) => toDisplayAngle(value, true)}\r\n convertFrom={fromDisplayAngle}\r\n />\r\n <BoundProperty\r\n component={SyncedSliderPropertyLine}\r\n label=\"Beta\"\r\n description={`Vertical angle in ${useDegrees ? \"degrees\" : \"radians\"}`}\r\n target={camera}\r\n propertyKey=\"beta\"\r\n min={toDisplayAngle(lowerBetaLimit)}\r\n max={toDisplayAngle(upperBetaLimit)}\r\n step={toDisplayAngle(0.01)}\r\n convertTo={(value) => toDisplayAngle(value, true)}\r\n convertFrom={fromDisplayAngle}\r\n />\r\n {lowerRadiusLimit != null && upperRadiusLimit != null ? (\r\n <BoundProperty\r\n component={SyncedSliderPropertyLine}\r\n label=\"Radius\"\r\n description=\"Distance from the target point.\"\r\n target={camera}\r\n propertyKey=\"radius\"\r\n min={lowerRadiusLimit}\r\n max={upperRadiusLimit}\r\n step={0.01}\r\n />\r\n ) : (\r\n <BoundProperty\r\n component={NumberInputPropertyLine}\r\n label=\"Radius\"\r\n description=\"Distance from the target point.\"\r\n target={camera}\r\n propertyKey=\"radius\"\r\n min={0}\r\n step={0.01}\r\n />\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nexport const ArcRotateCameraControlProperties: FunctionComponent<{ camera: ArcRotateCamera }> = (props) => {\r\n const { camera } = props;\r\n\r\n return (\r\n <>\r\n <BoundProperty component={NumberInputPropertyLine} label=\"Angular Sensitivity X\" target={camera} propertyKey=\"angularSensibilityX\" />\r\n <BoundProperty component={NumberInputPropertyLine} label=\"Angular Sensitivity Y\" target={camera} propertyKey=\"angularSensibilityY\" />\r\n <BoundProperty component={NumberInputPropertyLine} label=\"Panning Sensitivity\" target={camera} propertyKey=\"panningSensibility\" />\r\n <BoundProperty component={NumberInputPropertyLine} label=\"Pinch Delta Percentage\" target={camera} propertyKey=\"pinchDeltaPercentage\" />\r\n <BoundProperty component={NumberInputPropertyLine} label=\"Wheel Delta Percentage\" target={camera} propertyKey=\"wheelDeltaPercentage\" />\r\n <BoundProperty component={SwitchPropertyLine} label=\"Use Natural Pinch Zoom\" target={camera} propertyKey=\"useNaturalPinchZoom\" />\r\n </>\r\n );\r\n};\r\n\r\nexport const ArcRotateCameraCollisionProperties: FunctionComponent<{ camera: ArcRotateCamera }> = (props) => {\r\n const { camera } = props;\r\n\r\n const collisionRadius = useProperty(camera, \"collisionRadius\");\r\n\r\n return (\r\n <>\r\n <BoundProperty component={SwitchPropertyLine} label=\"Check Collisions\" target={camera} propertyKey=\"checkCollisions\" />\r\n <Vector3PropertyLine label=\"Collision Radius\" value={collisionRadius} onChange={(val) => (camera.collisionRadius = val)} />\r\n </>\r\n );\r\n};\r\n\r\nexport const ArcRotateCameraLimitsProperties: FunctionComponent<{ camera: ArcRotateCamera }> = (props) => {\r\n const { camera } = props;\r\n // TODO-Iv2: Update defaultValues\r\n return (\r\n <>\r\n <BoundProperty component={NumberInputPropertyLine} label=\"Lower Alpha Limit\" target={camera} propertyKey=\"lowerAlphaLimit\" nullable defaultValue={0} />\r\n <BoundProperty component={NumberInputPropertyLine} label=\"Upper Alpha Limit\" target={camera} propertyKey=\"upperAlphaLimit\" nullable defaultValue={Infinity} />\r\n <BoundProperty component={NumberInputPropertyLine} label=\"Lower Beta Limit\" target={camera} propertyKey=\"lowerBetaLimit\" nullable defaultValue={-Math.PI} />\r\n <BoundProperty component={NumberInputPropertyLine} label=\"Upper Beta Limit\" target={camera} propertyKey=\"upperBetaLimit\" nullable defaultValue={Math.PI} />\r\n <BoundProperty component={NumberInputPropertyLine} label=\"Lower Radius Limit\" target={camera} propertyKey=\"lowerRadiusLimit\" nullable defaultValue={0} />\r\n <BoundProperty component={NumberInputPropertyLine} label=\"Upper Radius Limit\" target={camera} propertyKey=\"upperRadiusLimit\" nullable defaultValue={100} />\r\n <BoundProperty component={NumberInputPropertyLine} label=\"Lower Target Y Limit\" target={camera} propertyKey=\"lowerTargetYLimit\" />\r\n </>\r\n );\r\n};\r\n\r\nexport const ArcRotateCameraBehaviorsProperties: FunctionComponent<{ camera: ArcRotateCamera }> = (props) => {\r\n const { camera } = props;\r\n\r\n return (\r\n <>\r\n <BoundProperty component={SwitchPropertyLine} label=\"Auto Rotation\" target={camera} propertyKey=\"useAutoRotationBehavior\" />\r\n <BoundProperty component={SwitchPropertyLine} label=\"Bouncing\" target={camera} propertyKey=\"useBouncingBehavior\" />\r\n <BoundProperty component={SwitchPropertyLine} label=\"Framing\" target={camera} propertyKey=\"useFramingBehavior\" />\r\n </>\r\n );\r\n};\r\n","import { makeStyles } from \"@fluentui/react-components\";\r\nimport { Dropdown } from \"../../primitives/dropdown\";\r\nimport type { AcceptedDropdownValue, DropdownProps } from \"../../primitives/dropdown\";\r\nimport { PropertyLine } from \"./propertyLine\";\r\nimport type { PropertyLineProps } from \"./propertyLine\";\r\nimport { forwardRef } from \"react\";\r\nimport type { FunctionComponent } from \"react\";\r\nimport { UniformWidthStyling } from \"../../primitives/utils\";\r\n\r\nconst useStyles = makeStyles({\r\n dropdown: {\r\n ...UniformWidthStyling,\r\n },\r\n});\r\n\r\ntype DropdownPropertyLineProps<V extends AcceptedDropdownValue> = DropdownProps<V> & PropertyLineProps<V>;\r\n\r\n/**\r\n * Wraps a dropdown in a property line\r\n * @param props - PropertyLineProps and DropdownProps\r\n * @returns property-line wrapped dropdown\r\n */\r\n\r\nconst DropdownPropertyLine = forwardRef<HTMLDivElement, DropdownPropertyLineProps<AcceptedDropdownValue>>((props, ref) => {\r\n DropdownPropertyLine.displayName = \"DropdownPropertyLine\";\r\n const classes = useStyles();\r\n return (\r\n <PropertyLine {...props} ref={ref}>\r\n <Dropdown {...props} className={classes.dropdown} />\r\n </PropertyLine>\r\n );\r\n});\r\n\r\n/**\r\n * Dropdown component for number values.\r\n */\r\nexport const NumberDropdownPropertyLine = DropdownPropertyLine as FunctionComponent<DropdownPropertyLineProps<number>>;\r\n/**\r\n * Dropdown component for string values\r\n */\r\nexport const StringDropdownPropertyLine = DropdownPropertyLine as FunctionComponent<DropdownPropertyLineProps<string>>;\r\n","import { PropertyLine } from \"./propertyLine\";\r\nimport { useEffect, useState } from \"react\";\r\nimport type { FunctionComponent } from \"react\";\r\nimport type { NumberInputPropertyLineProps } from \"./inputPropertyLine\";\r\nimport { TextInput } from \"../../primitives/textInput\";\r\n\r\n// The below conversion functions are taken from old HexLineComponent and can likely be simplified\r\nconst ConvertToHexString = (valueString: string): string => {\r\n while (valueString.length < 10) {\r\n valueString += \"0\";\r\n }\r\n return valueString;\r\n};\r\n\r\nconst MaskValidatorFn = (valueString: string) => {\r\n if (valueString.substring(0, 2) != \"0x\") {\r\n if (valueString.substring(0, 1) != \"0\") {\r\n valueString = \"0x\" + valueString;\r\n } else {\r\n valueString = \"0x\" + valueString.substr(1);\r\n }\r\n }\r\n\r\n const valueSubstr = valueString.substr(2);\r\n if (valueSubstr != \"\" && /^[0-9A-Fa-f]+$/g.test(valueSubstr) == false) {\r\n return false;\r\n }\r\n\r\n if (valueString.length > 10) {\r\n return false;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nconst GetHexValFromNumber = (val: number): string => {\r\n let valueAsHex = val.toString(16);\r\n let hex0String = \"\";\r\n for (let i = 0; i < 8 - valueAsHex.length; i++) {\r\n // padding the '0's\r\n hex0String += \"0\";\r\n }\r\n valueAsHex = \"0x\" + hex0String + valueAsHex.toUpperCase();\r\n return valueAsHex;\r\n};\r\n\r\n/**\r\n * Takes a number representing a Hex value and converts it to a hex string then wraps the TextInput in a PropertyLine\r\n * @param props - PropertyLineProps\r\n * @returns property-line wrapped textbox that converts to/from hex number representation\r\n */\r\nexport const HexPropertyLine: FunctionComponent<NumberInputPropertyLineProps> = (props) => {\r\n HexPropertyLine.displayName = \"HexPropertyLine\";\r\n const [hexVal, setHexVal] = useState(GetHexValFromNumber(props.value));\r\n\r\n const onStrValChange = (val: string) => {\r\n setHexVal(val);\r\n const valueStringAsHex = ConvertToHexString(val);\r\n props.onChange(parseInt(valueStringAsHex));\r\n };\r\n\r\n useEffect(() => {\r\n setHexVal(GetHexValFromNumber(props.value));\r\n }, [props.value]);\r\n\r\n return (\r\n <PropertyLine {...props}>\r\n <TextInput {...props} validator={MaskValidatorFn} value={hexVal} onChange={onStrValChange} />\r\n </PropertyLine>\r\n );\r\n};\r\n","import type { FunctionComponent } from \"react\";\r\n\r\nimport type { DropdownOption } from \"shared-ui-components/fluent/primitives/dropdown\";\r\nimport type { ISettingsContext } from \"../../../services/settingsContext\";\r\n\r\nimport { Camera } from \"core/Cameras/camera\";\r\nimport { Collapse } from \"shared-ui-components/fluent/primitives/collapse\";\r\nimport { NumberInputPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/inputPropertyLine\";\r\nimport { SyncedSliderPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/syncedSliderPropertyLine\";\r\nimport { BoundProperty } from \"../boundProperty\";\r\nimport { NumberDropdownPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/dropdownPropertyLine\";\r\nimport { useProperty } from \"../../../hooks/compoundPropertyHooks\";\r\nimport { useAngleConverters } from \"../../../hooks/settingsHooks\";\r\nimport { HexPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/hexPropertyLine\";\r\n\r\nconst CameraModes = [\r\n { label: \"Perspective\", value: Camera.PERSPECTIVE_CAMERA },\r\n { label: \"Orthographic\", value: Camera.ORTHOGRAPHIC_CAMERA },\r\n] as const satisfies DropdownOption<number>[];\r\n\r\n/**\r\n * The general properties component for a camera.\r\n * @param props - The component props containing the camera and settings context.\r\n * @returns JSX.Element\r\n */\r\nexport const CameraGeneralProperties: FunctionComponent<{ camera: Camera; settings: ISettingsContext }> = (props) => {\r\n const { camera, settings } = props;\r\n\r\n const [toDisplayAngle, fromDisplayAngle, useDegrees] = useAngleConverters(settings);\r\n\r\n const mode = useProperty(camera, \"mode\");\r\n\r\n return (\r\n <>\r\n <BoundProperty component={NumberInputPropertyLine} label=\"Near Plane\" description=\"Anything closer than this will not be drawn.\" target={camera} propertyKey=\"minZ\" />\r\n <BoundProperty component={NumberInputPropertyLine} label=\"Far Plane\" description=\"Anything further than this will not be drawn.\" target={camera} propertyKey=\"maxZ\" />\r\n <BoundProperty component={SyncedSliderPropertyLine} label=\"Inertia\" target={camera} propertyKey=\"inertia\" min={0} max={1} step={0.01} />\r\n <BoundProperty component={HexPropertyLine} label=\"Layer Mask\" target={camera} propertyKey=\"layerMask\" />\r\n <BoundProperty component={NumberDropdownPropertyLine} label=\"Mode\" options={CameraModes} target={camera} propertyKey=\"mode\" />\r\n <Collapse visible={mode === Camera.PERSPECTIVE_CAMERA}>\r\n <BoundProperty\r\n component={SyncedSliderPropertyLine}\r\n label=\"FOV\"\r\n description={`Field of view in ${useDegrees ? \"degrees\" : \"radians\"}`}\r\n target={camera}\r\n propertyKey=\"fov\"\r\n min={toDisplayAngle(0.1)}\r\n max={toDisplayAngle(Math.PI)}\r\n step={toDisplayAngle(0.01)}\r\n convertTo={toDisplayAngle}\r\n convertFrom={fromDisplayAngle}\r\n />\r\n </Collapse>\r\n <Collapse visible={mode === Camera.ORTHOGRAPHIC_CAMERA}>\r\n <div>\r\n <BoundProperty component={NumberInputPropertyLine} label=\"Left\" target={camera} step={0.1} propertyKey=\"orthoLeft\" nullable defaultValue={0} />\r\n <BoundProperty component={NumberInputPropertyLine} label=\"Right\" target={camera} step={0.1} propertyKey=\"orthoRight\" nullable defaultValue={0} />\r\n <BoundProperty component={NumberInputPropertyLine} label=\"Top\" target={camera} step={0.1} propertyKey=\"orthoTop\" nullable defaultValue={0} />\r\n <BoundProperty component={NumberInputPropertyLine} label=\"Bottom\" target={camera} step={0.1} propertyKey=\"orthoBottom\" nullable defaultValue={0} />\r\n </div>\r\n </Collapse>\r\n </>\r\n );\r\n};\r\n","import type { FunctionComponent } from \"react\";\r\n\r\nimport type { FollowCamera } from \"core/index\";\r\n\r\nimport { NumberInputPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/inputPropertyLine\";\r\nimport { useProperty } from \"../../../hooks/compoundPropertyHooks\";\r\nimport { BoundProperty } from \"../boundProperty\";\r\n\r\nexport const FollowCameraTransformProperties: FunctionComponent<{ camera: FollowCamera }> = (props) => {\r\n const { camera } = props;\r\n\r\n return (\r\n <>\r\n <BoundProperty component={NumberInputPropertyLine} label=\"Radius\" target={camera} propertyKey=\"radius\" />\r\n <BoundProperty component={NumberInputPropertyLine} label=\"Rotation Offset\" target={camera} propertyKey=\"rotationOffset\" />\r\n <BoundProperty component={NumberInputPropertyLine} label=\"Height Offset\" target={camera} propertyKey=\"heightOffset\" />\r\n <BoundProperty component={NumberInputPropertyLine} label=\"Camera Acceleration\" target={camera} propertyKey=\"cameraAcceleration\" />\r\n </>\r\n );\r\n};\r\n\r\nexport const FollowCameraLimitsProperties: FunctionComponent<{ camera: FollowCamera }> = (props) => {\r\n const { camera } = props;\r\n\r\n const lowerRadiusLimit = useProperty(camera, \"lowerRadiusLimit\") ?? 0;\r\n const upperRadiusLimit = useProperty(camera, \"upperRadiusLimit\") ?? 0;\r\n const lowerRotationOffsetLimit = useProperty(camera, \"lowerRotationOffsetLimit\") ?? 0;\r\n const upperRotationOffsetLimit = useProperty(camera, \"upperRotationOffsetLimit\") ?? 0;\r\n const lowerHeightOffsetLimit = useProperty(camera, \"lowerHeightOffsetLimit\") ?? 0;\r\n const upperHeightOffsetLimit = useProperty(camera, \"upperHeightOffsetLimit\") ?? 0;\r\n const maxCameraSpeed = useProperty(camera, \"maxCameraSpeed\") ?? 0;\r\n\r\n return (\r\n <>\r\n <NumberInputPropertyLine label=\"Lower Radius Limit\" value={lowerRadiusLimit} onChange={(val) => (camera.lowerRadiusLimit = val)} />\r\n <NumberInputPropertyLine label=\"Upper Radius Limit\" value={upperRadiusLimit} onChange={(val) => (camera.upperRadiusLimit = val)} />\r\n <NumberInputPropertyLine label=\"Lower Rotation Offset Limit\" value={lowerRotationOffsetLimit} onChange={(val) => (camera.lowerRotationOffsetLimit = val)} />\r\n <NumberInputPropertyLine label=\"Upper Rotation Offset Limit\" value={upperRotationOffsetLimit} onChange={(val) => (camera.upperRotationOffsetLimit = val)} />\r\n <NumberInputPropertyLine label=\"Lower Height Offset Limit\" value={lowerHeightOffsetLimit} onChange={(val) => (camera.lowerHeightOffsetLimit = val)} />\r\n <NumberInputPropertyLine label=\"Upper Height Offset Limit\" value={upperHeightOffsetLimit} onChange={(val) => (camera.upperHeightOffsetLimit = val)} />\r\n <NumberInputPropertyLine label=\"Max Camera Speed\" value={maxCameraSpeed} onChange={(val) => (camera.maxCameraSpeed = val)} />\r\n </>\r\n );\r\n};\r\n","import type { FunctionComponent } from \"react\";\r\n\r\nimport type { FreeCamera } from \"core/index\";\r\nimport type { ISettingsContext } from \"../../../services/settingsContext\";\r\n\r\nimport { NumberInputPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/inputPropertyLine\";\r\nimport { SwitchPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/switchPropertyLine\";\r\nimport { QuaternionPropertyLine, RotationVectorPropertyLine, Vector3PropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/vectorPropertyLine\";\r\nimport { useProperty } from \"../../../hooks/compoundPropertyHooks\";\r\nimport { useObservableState } from \"../../../hooks/observableHooks\";\r\nimport { BoundProperty } from \"../boundProperty\";\r\n\r\nexport const FreeCameraTransformProperties: FunctionComponent<{ camera: FreeCamera; settings: ISettingsContext }> = (props) => {\r\n const { camera, settings } = props;\r\n\r\n const useDegrees = useObservableState(() => settings.useDegrees, settings.settingsChangedObservable);\r\n\r\n const position = useProperty(camera, \"position\");\r\n const rotation = useProperty(camera, \"rotation\");\r\n const quatRotation = useProperty(camera, \"rotationQuaternion\");\r\n\r\n return (\r\n <>\r\n <Vector3PropertyLine label=\"Position\" value={position} onChange={(value) => (camera.position = value)} />\r\n {quatRotation ? (\r\n <QuaternionPropertyLine\r\n key=\"QuaternionRotationTransform\"\r\n label=\"Rotation (Quat)\"\r\n value={quatRotation}\r\n onChange={(val) => (camera.rotationQuaternion = val)}\r\n useDegrees={useDegrees}\r\n />\r\n ) : (\r\n <RotationVectorPropertyLine key=\"RotationTransform\" label=\"Rotation\" value={rotation} onChange={(val) => (camera.rotation = val)} useDegrees={useDegrees} />\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nexport const FreeCameraControlProperties: FunctionComponent<{ camera: FreeCamera }> = (props) => {\r\n const { camera } = props;\r\n\r\n return (\r\n <>\r\n <BoundProperty component={NumberInputPropertyLine} label=\"Angular Sensitivity \" target={camera} propertyKey=\"angularSensibility\" />\r\n </>\r\n );\r\n};\r\n\r\nexport const FreeCameraCollisionProperties: FunctionComponent<{ camera: FreeCamera }> = (props) => {\r\n const { camera } = props;\r\n\r\n const ellipsoid = useProperty(camera, \"ellipsoid\");\r\n const ellipsoidOffset = useProperty(camera, \"ellipsoidOffset\");\r\n\r\n return (\r\n <>\r\n <BoundProperty component={SwitchPropertyLine} label=\"Check Collisions\" target={camera} propertyKey=\"checkCollisions\" />\r\n <Vector3PropertyLine label=\"Ellipsoid\" value={ellipsoid} onChange={(val) => (camera.ellipsoid = val)} />\r\n <Vector3PropertyLine label=\"Ellipsoid Offset\" value={ellipsoidOffset} onChange={(val) => (camera.ellipsoidOffset = val)} />\r\n </>\r\n );\r\n};\r\n","import type { FunctionComponent } from \"react\";\r\n\r\nimport type { TargetCamera } from \"core/index\";\r\n\r\nimport { NumberInputPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/inputPropertyLine\";\r\nimport { Vector3PropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/vectorPropertyLine\";\r\nimport { useProperty } from \"../../../hooks/compoundPropertyHooks\";\r\nimport { BoundProperty } from \"../boundProperty\";\r\n\r\nexport const TargetCameraTransformProperties: FunctionComponent<{ camera: TargetCamera }> = (props) => {\r\n const { camera } = props;\r\n\r\n const target = useProperty(camera, \"target\");\r\n\r\n return (\r\n <>\r\n <Vector3PropertyLine label=\"Target\" description=\"The point the camera looks at.\" value={target} onChange={(value) => (camera.target = value)} />\r\n </>\r\n );\r\n};\r\n\r\nexport const TargetCameraControlProperties: FunctionComponent<{ camera: TargetCamera }> = (props) => {\r\n const { camera } = props;\r\n\r\n return (\r\n <>\r\n <BoundProperty component={NumberInputPropertyLine} label=\"Speed\" target={camera} propertyKey=\"speed\" />\r\n </>\r\n );\r\n};\r\n","import type { ServiceDefinition } from \"../../../modularity/serviceDefinition\";\r\nimport type { ISettingsContext } from \"../../../services/settingsContext\";\r\nimport type { IPropertiesService } from \"./propertiesService\";\r\n\r\n// import { Scene } from \"core/scene\";\r\nimport { ArcRotateCamera } from \"core/Cameras/arcRotateCamera\";\r\nimport { Camera } from \"core/Cameras/camera\";\r\nimport { FollowCamera } from \"core/Cameras/followCamera\";\r\nimport { FreeCamera } from \"core/Cameras/freeCamera\";\r\nimport { TargetCamera } from \"core/Cameras/targetCamera\";\r\nimport {\r\n ArcRotateCameraTransformProperties,\r\n ArcRotateCameraBehaviorsProperties,\r\n ArcRotateCameraCollisionProperties,\r\n ArcRotateCameraControlProperties,\r\n ArcRotateCameraLimitsProperties,\r\n} from \"../../../components/properties/cameras/arcRotateCameraProperties\";\r\nimport { CameraGeneralProperties } from \"../../../components/properties/cameras/cameraProperties\";\r\nimport { FollowCameraLimitsProperties, FollowCameraTransformProperties } from \"../../../components/properties/cameras/followCameraProperties\";\r\nimport { FreeCameraCollisionProperties, FreeCameraControlProperties, FreeCameraTransformProperties } from \"../../../components/properties/cameras/freeCameraProperties\";\r\nimport { TargetCameraControlProperties, TargetCameraTransformProperties } from \"../../../components/properties/cameras/targetCameraProperties\";\r\nimport { SettingsContextIdentity } from \"../../../services/settingsContext\";\r\nimport { PropertiesServiceIdentity } from \"./propertiesService\";\r\n\r\nexport const ControlPropertiesSectionIdentity = Symbol(\"Control\");\r\nexport const CollisionPropertiesSectionIdentity = Symbol(\"Collision\");\r\nexport const LimitsPropertiesSectionIdentity = Symbol(\"Limits\");\r\nexport const BehaviorsPropertiesSectionIdentity = Symbol(\"Behaviors\");\r\n\r\nexport const CameraPropertiesServiceDefinition: ServiceDefinition<[], [IPropertiesService, ISettingsContext]> = {\r\n friendlyName: \"Camera Properties\",\r\n consumes: [PropertiesServiceIdentity, SettingsContextIdentity],\r\n factory: (propertiesService, settingsContext) => {\r\n const cameraContentRegistration = propertiesService.addSectionContent({\r\n key: \"Camera Properties\",\r\n predicate: (entity: unknown) => entity instanceof Camera,\r\n content: [\r\n {\r\n section: \"General\",\r\n component: ({ context }) => <CameraGeneralProperties camera={context} settings={settingsContext} />,\r\n },\r\n ],\r\n });\r\n\r\n const targetCameraContentRegistration = propertiesService.addSectionContent({\r\n key: \"Target Camera Properties\",\r\n predicate: (entity: unknown) => entity instanceof TargetCamera,\r\n content: [\r\n {\r\n section: \"Transform\",\r\n component: ({ context }) => <TargetCameraTransformProperties camera={context} />,\r\n },\r\n {\r\n section: \"Control\",\r\n component: ({ context }) => <TargetCameraControlProperties camera={context} />,\r\n },\r\n ],\r\n });\r\n\r\n const arcRotateCameraContentRegistration = propertiesService.addSectionContent({\r\n key: \"Arc Rotate Camera Properties\",\r\n predicate: (entity: unknown) => entity instanceof ArcRotateCamera,\r\n content: [\r\n {\r\n section: \"Transform\",\r\n component: ({ context }) => <ArcRotateCameraTransformProperties camera={context} settings={settingsContext} />,\r\n },\r\n {\r\n section: \"Control\",\r\n component: ({ context }) => <ArcRotateCameraControlProperties camera={context} />,\r\n },\r\n {\r\n section: \"Collision\",\r\n component: ({ context }) => <ArcRotateCameraCollisionProperties camera={context} />,\r\n },\r\n {\r\n section: \"Limits\",\r\n component: ({ context }) => <ArcRotateCameraLimitsProperties camera={context} />,\r\n },\r\n {\r\n section: \"Behaviors\",\r\n component: ({ context }) => <ArcRotateCameraBehaviorsProperties camera={context} />,\r\n },\r\n ],\r\n });\r\n\r\n const freeCameraContentRegistration = propertiesService.addSectionContent({\r\n key: \"Free Camera Properties\",\r\n predicate: (entity: unknown) => entity instanceof FreeCamera,\r\n content: [\r\n {\r\n section: \"Transform\",\r\n component: ({ context }) => <FreeCameraTransformProperties camera={context} settings={settingsContext} />,\r\n },\r\n {\r\n section: \"Control\",\r\n component: ({ context }) => <FreeCameraControlProperties camera={context} />,\r\n },\r\n {\r\n section: \"Collision\",\r\n component: ({ context }) => <FreeCameraCollisionProperties camera={context} />,\r\n },\r\n ],\r\n });\r\n\r\n const followCameraContentRegistration = propertiesService.addSectionContent({\r\n key: \"Follow Camera Properties\",\r\n predicate: (entity: unknown) => entity instanceof FollowCamera,\r\n content: [\r\n {\r\n section: \"Transform\",\r\n component: ({ context }) => <FollowCameraTransformProperties camera={context} />,\r\n },\r\n {\r\n section: \"Limits\",\r\n component: ({ context }) => <FollowCameraLimitsProperties camera={context} />,\r\n },\r\n ],\r\n });\r\n\r\n return {\r\n dispose: () => {\r\n cameraContentRegistration.dispose();\r\n targetCameraContentRegistration.dispose();\r\n arcRotateCameraContentRegistration.dispose();\r\n freeCameraContentRegistration.dispose();\r\n followCameraContentRegistration.dispose();\r\n },\r\n };\r\n },\r\n};\r\n","import type { FunctionComponent } from \"react\";\r\n\r\nimport type { IDisposable } from \"core/index\";\r\n\r\nimport { useMemo } from \"react\";\r\n\r\nimport { TextInputPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/inputPropertyLine\";\r\nimport { TextPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/textPropertyLine\";\r\nimport { StringifiedPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/stringifiedPropertyLine\";\r\nimport { useProperty } from \"../../hooks/compoundPropertyHooks\";\r\nimport { GetPropertyDescriptor, IsPropertyReadonly } from \"../../instrumentation/propertyInstrumentation\";\r\nimport { ButtonLine } from \"shared-ui-components/fluent/hoc/buttonLine\";\r\n\r\ntype CommonEntity = {\r\n readonly id?: number;\r\n readonly uniqueId?: number;\r\n name?: string;\r\n getClassName?: () => string;\r\n};\r\n\r\nexport const CommonGeneralProperties: FunctionComponent<{ commonEntity: CommonEntity }> = (props) => {\r\n const { commonEntity } = props;\r\n\r\n const name = useProperty(commonEntity, \"name\");\r\n const namePropertyDescriptor = useMemo(() => GetPropertyDescriptor(commonEntity, \"name\")?.[1], [commonEntity]);\r\n const isNameReadonly = !namePropertyDescriptor || IsPropertyReadonly(namePropertyDescriptor);\r\n\r\n const className = commonEntity.getClassName?.();\r\n\r\n return (\r\n <>\r\n {commonEntity.id !== undefined && <StringifiedPropertyLine key=\"EntityId\" label=\"ID\" description=\"The id of the node.\" value={commonEntity.id} />}\r\n {name !== undefined &&\r\n (isNameReadonly ? (\r\n <TextPropertyLine key=\"EntityName\" label=\"Name\" description=\"The name of the node.\" value={name} />\r\n ) : (\r\n <TextInputPropertyLine key=\"EntityName\" label=\"Name\" description=\"The name of the node.\" value={name} onChange={(newName) => (commonEntity.name = newName)} />\r\n ))}\r\n {commonEntity.uniqueId !== undefined && (\r\n <StringifiedPropertyLine key=\"EntityUniqueId\" label=\"Unique ID\" description=\"The unique id of the node.\" value={commonEntity.uniqueId} />\r\n )}\r\n {className !== undefined && <TextPropertyLine key=\"EntityClassName\" label=\"Class\" description=\"The class of the node.\" value={className} />}\r\n </>\r\n );\r\n};\r\n\r\nexport const DisposableGeneralProperties: FunctionComponent<{ disposableEntity: IDisposable }> = (props) => {\r\n const { disposableEntity } = props;\r\n\r\n return (\r\n <>\r\n <ButtonLine label=\"Dispose\" onClick={() => disposableEntity.dispose()} />\r\n </>\r\n );\r\n};\r\n","import type { IDisposable } from \"core/index\";\r\nimport type { ServiceDefinition } from \"../../../modularity/serviceDefinition\";\r\nimport type { IPropertiesService } from \"./propertiesService\";\r\n\r\nimport { Scene } from \"core/scene\";\r\n\r\nimport { CommonGeneralProperties, DisposableGeneralProperties } from \"../../../components/properties/commonGeneralProperties\";\r\nimport { PropertiesServiceIdentity } from \"./propertiesService\";\r\n\r\ntype CommonEntity = {\r\n id?: number;\r\n name?: string;\r\n uniqueId?: number;\r\n getClassName?: () => string;\r\n};\r\n\r\nexport const CommonPropertiesServiceDefinition: ServiceDefinition<[], [IPropertiesService]> = {\r\n friendlyName: \"Common Properties\",\r\n consumes: [PropertiesServiceIdentity],\r\n factory: (propertiesService) => {\r\n const commonContentRegistration = propertiesService.addSectionContent({\r\n key: \"Common Properties\",\r\n predicate: (entity: unknown): entity is CommonEntity => {\r\n // Common properties are not useful for the scene.\r\n if (entity instanceof Scene) {\r\n return false;\r\n }\r\n\r\n const commonEntity = entity as CommonEntity;\r\n return commonEntity.id !== undefined || commonEntity.name !== undefined || commonEntity.uniqueId !== undefined || commonEntity.getClassName !== undefined;\r\n },\r\n content: [\r\n {\r\n section: \"General\",\r\n component: ({ context }) => <CommonGeneralProperties commonEntity={context} />,\r\n },\r\n ],\r\n });\r\n\r\n const disposableContentRegistration = propertiesService.addSectionContent({\r\n key: \"Disposable Properties\",\r\n predicate: (entity: unknown): entity is IDisposable => {\r\n const disposable = entity as Partial<IDisposable>;\r\n return typeof disposable.dispose === \"function\";\r\n },\r\n content: [\r\n {\r\n section: \"General\",\r\n order: 100000,\r\n component: ({ context }) => <DisposableGeneralProperties disposableEntity={context} />,\r\n },\r\n ],\r\n });\r\n\r\n return {\r\n dispose: () => {\r\n commonContentRegistration.dispose();\r\n disposableContentRegistration.dispose();\r\n },\r\n };\r\n },\r\n};\r\n","import type { ServiceDefinition } from \"../../../modularity/serviceDefinition\";\r\nimport type { IPropertiesService } from \"./propertiesService\";\r\n\r\nimport { PropertiesServiceIdentity } from \"./propertiesService\";\r\n\r\nexport const EffectLayerPropertiesServiceDefinition: ServiceDefinition<[], [IPropertiesService]> = {\r\n friendlyName: \"Effect Layer Properties\",\r\n consumes: [PropertiesServiceIdentity],\r\n factory: (propertiesService) => {\r\n // TODO: Add content registrations for each section and for each type in the EffectLayer class hierarchy.\r\n\r\n return {\r\n dispose: () => {\r\n // TODO: Dispose content registrations.\r\n },\r\n };\r\n },\r\n};\r\n","import type { FrameGraph } from \"core/index\";\r\n\r\nimport type { FunctionComponent } from \"react\";\r\n\r\nimport { TextPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/textPropertyLine\";\r\nimport { ButtonLine } from \"shared-ui-components/fluent/hoc/buttonLine\";\r\nimport { useProperty } from \"../../../hooks/compoundPropertyHooks\";\r\nimport { BoundProperty } from \"../boundProperty\";\r\nimport { SwitchPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/switchPropertyLine\";\r\n\r\nexport const FrameGraphTaskProperties: FunctionComponent<{ frameGraph: FrameGraph }> = (props) => {\r\n const { frameGraph } = props;\r\n const tasks = frameGraph.tasks;\r\n\r\n return (\r\n <>\r\n {tasks.length > 0 &&\r\n tasks.map((task, i) => {\r\n return <TextPropertyLine label={i + 1 + \". \" + task.name} value=\"\" key={\"task\" + i} />;\r\n })}\r\n </>\r\n );\r\n};\r\n\r\nexport const FrameGraphGeneralProperties: FunctionComponent<{ frameGraph: FrameGraph }> = (props) => {\r\n const { frameGraph } = props;\r\n const isSceneFrameGraph = useProperty(frameGraph.scene, \"frameGraph\");\r\n\r\n return (\r\n <>\r\n <BoundProperty\r\n component={SwitchPropertyLine}\r\n label=\"Optimize Texture Allocation\"\r\n description=\"Whether to optimize texture allocation.\"\r\n target={frameGraph}\r\n propertyKey=\"optimizeTextureAllocation\"\r\n ></BoundProperty>\r\n {isSceneFrameGraph !== frameGraph && <ButtonLine onClick={() => (frameGraph.scene.frameGraph = frameGraph)} label=\"Set as scene's frame graph\" />}\r\n <ButtonLine\r\n label=\"Edit Graph\"\r\n onClick={() => {\r\n void frameGraph.getLinkedNodeRenderGraph()!.edit({ nodeRenderGraphEditorConfig: { hostScene: frameGraph.scene } });\r\n }}\r\n ></ButtonLine>\r\n </>\r\n );\r\n};\r\n","import { FrameGraph } from \"core/FrameGraph/frameGraph\";\r\nimport type { ServiceDefinition } from \"../../../modularity/serviceDefinition\";\r\nimport type { IPropertiesService } from \"./propertiesService\";\r\n\r\nimport { PropertiesServiceIdentity } from \"./propertiesService\";\r\nimport { FrameGraphTaskProperties, FrameGraphGeneralProperties } from \"../../../components/properties/frameGraph/frameGraphProperties\";\r\n\r\nexport const FrameGraphPropertiesServiceDefinition: ServiceDefinition<[], [IPropertiesService]> = {\r\n friendlyName: \"Frame Graph Properties\",\r\n consumes: [PropertiesServiceIdentity],\r\n factory: (propertiesService) => {\r\n const frameGraphContentRegistration = propertiesService.addSectionContent({\r\n key: \"Frame Graph General Properties\",\r\n predicate: (entity: unknown) => entity instanceof FrameGraph,\r\n content: [\r\n {\r\n section: \"General\",\r\n component: ({ context }) => <FrameGraphGeneralProperties frameGraph={context} />,\r\n },\r\n {\r\n section: \"Tasks\",\r\n component: ({ context }) => <FrameGraphTaskProperties frameGraph={context} />,\r\n },\r\n ],\r\n });\r\n\r\n return {\r\n dispose: () => {\r\n frameGraphContentRegistration.dispose();\r\n },\r\n };\r\n },\r\n};\r\n","import type { RectAreaLight } from \"core/index\";\r\nimport type { FunctionComponent } from \"react\";\r\n\r\nimport { Color3PropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/colorPropertyLine\";\r\nimport { NumberInputPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/inputPropertyLine\";\r\nimport { Vector3PropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/vectorPropertyLine\";\r\n\r\nimport { BoundProperty } from \"../boundProperty\";\r\n\r\nexport const AreaLightSetupProperties: FunctionComponent<{ context: RectAreaLight }> = ({ context: areaLight }) => {\r\n return (\r\n <>\r\n <BoundProperty label=\"Diffuse\" component={Color3PropertyLine} target={areaLight} propertyKey=\"diffuse\" />\r\n <BoundProperty label=\"Specular\" component={Color3PropertyLine} target={areaLight} propertyKey=\"specular\" />\r\n <BoundProperty label=\"Position\" component={Vector3PropertyLine} target={areaLight} propertyKey=\"position\" />\r\n <BoundProperty label=\"Width\" component={NumberInputPropertyLine} target={areaLight} propertyKey=\"width\" />\r\n <BoundProperty label=\"Height\" component={NumberInputPropertyLine} target={areaLight} propertyKey=\"height\" />\r\n <BoundProperty label=\"Intensity\" component={NumberInputPropertyLine} target={areaLight} propertyKey=\"intensity\" />\r\n </>\r\n );\r\n};\r\n","import type { DirectionalLight } from \"core/index\";\r\nimport type { FunctionComponent } from \"react\";\r\n\r\nimport { Color3PropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/colorPropertyLine\";\r\nimport { NumberInputPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/inputPropertyLine\";\r\nimport { Vector3PropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/vectorPropertyLine\";\r\n\r\nimport { BoundProperty } from \"../boundProperty\";\r\n\r\nexport const DirectionalLightSetupProperties: FunctionComponent<{ context: DirectionalLight }> = ({ context: directionalLight }) => {\r\n return (\r\n <>\r\n <BoundProperty label=\"Position\" component={Vector3PropertyLine} target={directionalLight} propertyKey=\"position\" />\r\n <BoundProperty label=\"Direction\" component={Vector3PropertyLine} target={directionalLight} propertyKey=\"direction\" />\r\n <BoundProperty label=\"Diffuse\" component={Color3PropertyLine} target={directionalLight} propertyKey=\"diffuse\" />\r\n <BoundProperty label=\"Specular\" component={Color3PropertyLine} target={directionalLight} propertyKey=\"specular\" />\r\n <BoundProperty label=\"Intensity\" component={NumberInputPropertyLine} target={directionalLight} propertyKey=\"intensity\" />\r\n </>\r\n );\r\n};\r\n","import type { HemisphericLight } from \"core/index\";\r\nimport type { FunctionComponent } from \"react\";\r\n\r\nimport { Color3PropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/colorPropertyLine\";\r\nimport { NumberInputPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/inputPropertyLine\";\r\nimport { Vector3PropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/vectorPropertyLine\";\r\n\r\nimport { BoundProperty } from \"../boundProperty\";\r\n\r\nexport const HemisphericLightSetupProperties: FunctionComponent<{ context: HemisphericLight }> = ({ context: hemisphericLight }) => {\r\n return (\r\n <>\r\n <BoundProperty label=\"Direction\" component={Vector3PropertyLine} target={hemisphericLight} propertyKey=\"direction\" />\r\n <BoundProperty label=\"Diffuse\" component={Color3PropertyLine} target={hemisphericLight} propertyKey=\"diffuse\" />\r\n <BoundProperty label=\"Ground\" component={Color3PropertyLine} target={hemisphericLight} propertyKey=\"groundColor\" />\r\n <BoundProperty label=\"Intensity\" component={NumberInputPropertyLine} target={hemisphericLight} propertyKey=\"intensity\" />\r\n </>\r\n );\r\n};\r\n","import type { PointLight } from \"core/index\";\r\nimport type { FunctionComponent } from \"react\";\r\n\r\nimport { Color3PropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/colorPropertyLine\";\r\nimport { NumberInputPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/inputPropertyLine\";\r\nimport { Vector3PropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/vectorPropertyLine\";\r\n\r\nimport { BoundProperty } from \"../boundProperty\";\r\n\r\nexport const PointLightSetupProperties: FunctionComponent<{ context: PointLight }> = ({ context: pointLight }) => {\r\n return (\r\n <>\r\n <BoundProperty label=\"Diffuse\" component={Color3PropertyLine} target={pointLight} propertyKey=\"diffuse\" />\r\n <BoundProperty label=\"Specular\" component={Color3PropertyLine} target={pointLight} propertyKey=\"specular\" />\r\n <BoundProperty label=\"Position\" component={Vector3PropertyLine} target={pointLight} propertyKey=\"position\" />\r\n <BoundProperty label=\"Intensity\" component={NumberInputPropertyLine} target={pointLight} propertyKey=\"intensity\" />\r\n </>\r\n );\r\n};\r\n","import type { FunctionComponent } from \"react\";\r\n\r\nimport type { Camera, IShadowGenerator, Nullable, ShadowLight } from \"core/index\";\r\nimport type { DropdownOption } from \"shared-ui-components/fluent/primitives/dropdown\";\r\n\r\nimport { useEffect, useState } from \"react\";\r\n\r\nimport { DirectionalLight } from \"core/Lights/directionalLight\";\r\nimport { CascadedShadowGenerator } from \"core/Lights/Shadows/cascadedShadowGenerator\";\r\nimport { ShadowGenerator } from \"core/Lights/Shadows/shadowGenerator\";\r\nimport { ButtonLine } from \"shared-ui-components/fluent/hoc/buttonLine\";\r\nimport { NumberDropdownPropertyLine, StringDropdownPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/dropdownPropertyLine\";\r\nimport { useObservableState } from \"../../../hooks/observableHooks\";\r\n\r\nimport \"core/Lights/Shadows/shadowGeneratorSceneComponent\";\r\n\r\ntype ShadowGeneratorType = \"Default\" | \"Cascade\";\r\n\r\nconst DefaultShadowGeneratorOptions = [{ label: \"Shadow Generator\", value: \"Default\" satisfies ShadowGeneratorType }] as const satisfies DropdownOption<ShadowGeneratorType>[];\r\n\r\nconst DirectionalLightGeneratorOptions = [\r\n ...DefaultShadowGeneratorOptions,\r\n { label: \"Cascaded Shadow Generator\", value: \"Cascade\" satisfies ShadowGeneratorType },\r\n] as const satisfies DropdownOption<ShadowGeneratorType>[];\r\n\r\nconst MapSizeOptions = [\r\n { label: \"4096 x 4096\", value: 4096 },\r\n { label: \"2048 x 2048\", value: 2048 },\r\n { label: \"1024 x 1024\", value: 1024 },\r\n { label: \"512 x 512\", value: 512 },\r\n { label: \"256 x 256\", value: 256 },\r\n] as const satisfies DropdownOption<number>[];\r\n\r\ntype ShadowGeneratorSettings = {\r\n generatorType: ShadowGeneratorType; // Type of shadow generator\r\n mapSize: number; // Size of the shadow map\r\n};\r\n\r\nfunction GetShadowGenerator(camera: Nullable<Camera>, shadowLight: ShadowLight): Nullable<IShadowGenerator> {\r\n return shadowLight.getShadowGenerator(camera) ?? shadowLight.getShadowGenerators()?.values().next().value ?? null;\r\n}\r\n\r\nfunction CreateShadowGenerator(shadowLight: ShadowLight, settings: ShadowGeneratorSettings): void {\r\n const light = shadowLight;\r\n const scene = light.getScene();\r\n const internals = settings;\r\n const generatorType = internals.generatorType;\r\n const mapSize = internals.mapSize;\r\n const generator = generatorType === \"Default\" ? new ShadowGenerator(mapSize, light) : new CascadedShadowGenerator(mapSize, light as DirectionalLight);\r\n\r\n for (const m of scene.meshes) {\r\n if (m.infiniteDistance) {\r\n continue;\r\n }\r\n generator.addShadowCaster(m);\r\n if (!m.isAnInstance) {\r\n m.receiveShadows = true;\r\n }\r\n }\r\n}\r\n\r\nfunction DisposeShadowGenerator(camera: Nullable<Camera>, shadowLight: ShadowLight): void {\r\n GetShadowGenerator(camera, shadowLight)?.dispose();\r\n}\r\n\r\nexport const ShadowGeneratorSetupProperties: FunctionComponent<{ context: ShadowLight }> = ({ context: shadowLight }) => {\r\n const defaultGeneratorType = DefaultShadowGeneratorOptions[0].value;\r\n const defaultMapSize = MapSizeOptions[0].value;\r\n const [shadowGeneratorSettings, setShadowGeneratorSettings] = useState<Readonly<ShadowGeneratorSettings>>({ generatorType: defaultGeneratorType, mapSize: defaultMapSize });\r\n const shadowGeneratorOptions = shadowLight instanceof DirectionalLight ? DirectionalLightGeneratorOptions : DefaultShadowGeneratorOptions;\r\n const camera = useObservableState(() => shadowLight.getScene().activeCamera, shadowLight.getScene().onActiveCameraChanged);\r\n const shadowGenerator = GetShadowGenerator(camera, shadowLight);\r\n const [hasShadowGenerator, setHasShadowGenerator] = useState(!!shadowGenerator);\r\n\r\n useEffect(() => {\r\n setHasShadowGenerator(!!shadowGenerator);\r\n }, [shadowGenerator]);\r\n\r\n return (\r\n <>\r\n {!hasShadowGenerator && (\r\n <>\r\n <StringDropdownPropertyLine\r\n label=\"Type\"\r\n options={shadowGeneratorOptions}\r\n value={shadowGeneratorSettings.generatorType}\r\n onChange={(value) => setShadowGeneratorSettings((prev) => ({ ...prev, generatorType: value as ShadowGeneratorType }))}\r\n />\r\n <NumberDropdownPropertyLine\r\n label=\"Map Size\"\r\n options={MapSizeOptions}\r\n value={shadowGeneratorSettings.mapSize}\r\n onChange={(value) => setShadowGeneratorSettings((prev) => ({ ...prev, mapSize: value }))}\r\n />\r\n <ButtonLine\r\n label=\"Create Generator\"\r\n onClick={() => {\r\n CreateShadowGenerator(shadowLight, shadowGeneratorSettings);\r\n setHasShadowGenerator(true);\r\n }}\r\n />\r\n </>\r\n )}\r\n {shadowGenerator && (\r\n <>\r\n TODO: Not Implemented\r\n <ButtonLine\r\n label=\"Dispose Generator\"\r\n onClick={() => {\r\n DisposeShadowGenerator(camera, shadowLight);\r\n setHasShadowGenerator(false);\r\n }}\r\n />\r\n </>\r\n )}\r\n </>\r\n );\r\n};\r\n","import type { ShadowLight } from \"core/index\";\r\n\r\nimport type { FunctionComponent } from \"react\";\r\n\r\nimport { Collapse } from \"shared-ui-components/fluent/primitives/collapse\";\r\nimport { NumberInputPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/inputPropertyLine\";\r\nimport { SwitchPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/switchPropertyLine\";\r\nimport { useProperty } from \"../../../hooks/compoundPropertyHooks\";\r\nimport { BoundProperty } from \"../boundProperty\";\r\n\r\nexport const ShadowsSetupProperties: FunctionComponent<{ context: ShadowLight }> = ({ context: shadowLight }) => {\r\n const shadowsEnabled = useProperty(shadowLight, \"shadowEnabled\");\r\n const shadowsMinZ = useProperty(shadowLight, \"shadowMinZ\");\r\n const shadowsMaxZ = useProperty(shadowLight, \"shadowMaxZ\");\r\n\r\n return (\r\n <>\r\n <BoundProperty component={SwitchPropertyLine} label=\"Shadows Enabled\" target={shadowLight} propertyKey=\"shadowEnabled\" />\r\n <Collapse visible={shadowsEnabled}>\r\n <>\r\n <NumberInputPropertyLine label=\"Shadows Near Plane\" value={shadowsMinZ ?? 0} onChange={(value) => (shadowLight.shadowMinZ = value)} />\r\n <NumberInputPropertyLine label=\"Shadows Far Plane\" value={shadowsMaxZ ?? 0} onChange={(value) => (shadowLight.shadowMaxZ = value)} />\r\n </>\r\n </Collapse>\r\n </>\r\n );\r\n};\r\n","import type { SpotLight } from \"core/index\";\r\nimport type { FunctionComponent } from \"react\";\r\n\r\nimport { Tools } from \"core/Misc/tools\";\r\nimport { Color3PropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/colorPropertyLine\";\r\nimport { NumberInputPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/inputPropertyLine\";\r\nimport { SyncedSliderPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/syncedSliderPropertyLine\";\r\nimport { Vector3PropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/vectorPropertyLine\";\r\n\r\nimport { BoundProperty } from \"../boundProperty\";\r\n\r\nexport const SpotLightSetupProperties: FunctionComponent<{ context: SpotLight }> = ({ context: spotLight }) => {\r\n return (\r\n <>\r\n <BoundProperty label=\"Diffuse\" component={Color3PropertyLine} target={spotLight} propertyKey=\"diffuse\" />\r\n <BoundProperty label=\"Specular\" component={Color3PropertyLine} target={spotLight} propertyKey=\"specular\" />\r\n <BoundProperty label=\"Direction\" component={Vector3PropertyLine} target={spotLight} propertyKey=\"direction\" />\r\n <BoundProperty label=\"Position\" component={Vector3PropertyLine} target={spotLight} propertyKey=\"position\" />\r\n <BoundProperty\r\n label=\"Angle\"\r\n component={SyncedSliderPropertyLine}\r\n target={spotLight}\r\n propertyKey=\"angle\"\r\n convertTo={Tools.ToDegrees}\r\n convertFrom={Tools.ToRadians}\r\n min={0}\r\n max={90}\r\n step={0.1}\r\n />\r\n <BoundProperty\r\n label=\"InnerAngle\"\r\n component={SyncedSliderPropertyLine}\r\n target={spotLight}\r\n propertyKey=\"innerAngle\"\r\n convertTo={Tools.ToDegrees}\r\n convertFrom={Tools.ToRadians}\r\n min={0}\r\n max={90}\r\n step={0.1}\r\n />\r\n <BoundProperty label=\"Exponent\" component={NumberInputPropertyLine} target={spotLight} propertyKey=\"exponent\" />\r\n </>\r\n );\r\n};\r\n","import type { ServiceDefinition } from \"../../../modularity/serviceDefinition\";\r\nimport type { IPropertiesService } from \"./propertiesService\";\r\n\r\nimport { DirectionalLight } from \"core/Lights/directionalLight\";\r\nimport { HemisphericLight } from \"core/Lights/hemisphericLight\";\r\nimport { PointLight } from \"core/Lights/pointLight\";\r\nimport { RectAreaLight } from \"core/Lights/rectAreaLight\";\r\nimport { ShadowLight } from \"core/Lights/shadowLight\";\r\nimport { SpotLight } from \"core/Lights/spotLight\";\r\nimport { AreaLightSetupProperties } from \"../../../components/properties/lights/areaLightProperties\";\r\nimport { DirectionalLightSetupProperties } from \"../../../components/properties/lights/directionalLightProperties\";\r\nimport { HemisphericLightSetupProperties } from \"../../../components/properties/lights/hemisphericLightProperties\";\r\nimport { PointLightSetupProperties } from \"../../../components/properties/lights/pointLightProperties\";\r\nimport { ShadowGeneratorSetupProperties } from \"../../../components/properties/lights/shadowGeneratorProperties\";\r\nimport { ShadowsSetupProperties } from \"../../../components/properties/lights/shadowLightProperties\";\r\nimport { SpotLightSetupProperties } from \"../../../components/properties/lights/spotLightProperties\";\r\nimport { PropertiesServiceIdentity } from \"./propertiesService\";\r\n\r\nexport const LightPropertiesServiceDefinition: ServiceDefinition<[], [IPropertiesService]> = {\r\n friendlyName: \"Light Properties\",\r\n consumes: [PropertiesServiceIdentity],\r\n factory: (propertiesService) => {\r\n const directionalLightContentRegistration = propertiesService.addSectionContent({\r\n key: \"Directional Light Properties\",\r\n predicate: (entity: unknown) => entity instanceof DirectionalLight,\r\n content: [\r\n {\r\n section: \"Setup\",\r\n component: DirectionalLightSetupProperties,\r\n },\r\n ],\r\n });\r\n\r\n const pointLightContentRegistration = propertiesService.addSectionContent({\r\n key: \"Point Light Properties\",\r\n predicate: (entity: unknown) => entity instanceof PointLight,\r\n content: [\r\n {\r\n section: \"Setup\",\r\n component: PointLightSetupProperties,\r\n },\r\n ],\r\n });\r\n\r\n const hemisphericLightContentRegistration = propertiesService.addSectionContent({\r\n key: \"Hemispheric Light Properties\",\r\n predicate: (entity: unknown) => entity instanceof HemisphericLight,\r\n content: [\r\n {\r\n section: \"Setup\",\r\n component: HemisphericLightSetupProperties,\r\n },\r\n ],\r\n });\r\n\r\n const spotLightContentRegistration = propertiesService.addSectionContent({\r\n key: \"Spot Light Properties\",\r\n predicate: (entity: unknown) => entity instanceof SpotLight,\r\n content: [\r\n {\r\n section: \"Setup\",\r\n component: SpotLightSetupProperties,\r\n },\r\n ],\r\n });\r\n\r\n const shadowLightContentRegistration = propertiesService.addSectionContent({\r\n key: \"Shadow Light Properties\",\r\n predicate: (entity: unknown) => entity instanceof ShadowLight,\r\n content: [\r\n {\r\n section: \"Shadows\",\r\n component: ShadowsSetupProperties,\r\n },\r\n {\r\n section: \"Shadow Generator\",\r\n component: ShadowGeneratorSetupProperties,\r\n },\r\n ],\r\n });\r\n\r\n const areaLightContentRegistration = propertiesService.addSectionContent({\r\n key: \"Area Light Properties\",\r\n predicate: (entity: unknown) => entity instanceof RectAreaLight,\r\n content: [\r\n {\r\n section: \"Setup\",\r\n component: AreaLightSetupProperties,\r\n },\r\n ],\r\n });\r\n\r\n return {\r\n dispose: () => {\r\n areaLightContentRegistration.dispose();\r\n shadowLightContentRegistration.dispose();\r\n spotLightContentRegistration.dispose();\r\n hemisphericLightContentRegistration.dispose();\r\n pointLightContentRegistration.dispose();\r\n directionalLightContentRegistration.dispose();\r\n },\r\n };\r\n },\r\n};\r\n","import { Constants } from \"core/Engines/constants\";\r\nimport { ParticleSystem } from \"core/Particles/particleSystem\";\r\n\r\n/**\r\n * Used by both particleSystem and alphaBlendModes\r\n */\r\nexport const CommonBlendModes = [\r\n { label: \"Maximized\", value: Constants.ALPHA_MAXIMIZED },\r\n { label: \"Pre-multiplied\", value: Constants.ALPHA_PREMULTIPLIED },\r\n { label: \"Pre-multiplied Porter Duff\", value: Constants.ALPHA_PREMULTIPLIED_PORTERDUFF },\r\n { label: \"Screen Mode\", value: Constants.ALPHA_SCREENMODE },\r\n { label: \"OneOne OneOne\", value: Constants.ALPHA_ONEONE_ONEONE },\r\n { label: \"Alpha to Color\", value: Constants.ALPHA_ALPHATOCOLOR },\r\n { label: \"Reverse One Minus\", value: Constants.ALPHA_REVERSEONEMINUS },\r\n { label: \"Source+Dest * (1 - SourceAlpha)\", value: Constants.ALPHA_SRC_DSTONEMINUSSRCALPHA },\r\n { label: \"OneOne OneZero\", value: Constants.ALPHA_ONEONE_ONEZERO },\r\n { label: \"Exclusion\", value: Constants.ALPHA_EXCLUSION },\r\n { label: \"Layer Accumulate\", value: Constants.ALPHA_LAYER_ACCUMULATE },\r\n];\r\n\r\n/**\r\n * Used to populated the blendMode dropdown in our various tools (Node Editor, Inspector, etc.)\r\n * The below ParticleSystem consts were defined before new Engine alpha blend modes were added, so we have to reference\r\n * the ParticleSystem.FOO consts explicitly (as the underlying const values are different - they get mapped to engine consts within baseParticleSystem.ts)\r\n */\r\nexport const BlendModeOptions = [\r\n { label: \"Add\", value: ParticleSystem.BLENDMODE_ADD },\r\n { label: \"Multiply\", value: ParticleSystem.BLENDMODE_MULTIPLY },\r\n { label: \"Multiply Add\", value: ParticleSystem.BLENDMODE_MULTIPLYADD },\r\n { label: \"One One\", value: ParticleSystem.BLENDMODE_ONEONE },\r\n { label: \"Standard\", value: ParticleSystem.BLENDMODE_STANDARD },\r\n { label: \"Subtract\", value: ParticleSystem.BLENDMODE_SUBTRACT },\r\n].concat(CommonBlendModes);\r\n\r\n/**\r\n * Used to populated the alphaMode dropdown in our various tools (Node Editor, Inspector, etc.)\r\n */\r\nexport const AlphaModeOptions = [\r\n { label: \"Combine\", value: Constants.ALPHA_COMBINE },\r\n { label: \"One One\", value: Constants.ALPHA_ONEONE },\r\n { label: \"Add\", value: Constants.ALPHA_ADD },\r\n { label: \"Subtract\", value: Constants.ALPHA_SUBTRACT },\r\n { label: \"Multiply\", value: Constants.ALPHA_MULTIPLY },\r\n].concat(CommonBlendModes);\r\n","import type { FunctionComponent } from \"react\";\r\n\r\nimport type { DropdownOption } from \"shared-ui-components/fluent/primitives/dropdown\";\r\n\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { Engine } from \"core/Engines/engine\";\r\nimport { Material } from \"core/Materials/material\";\r\nimport { AlphaModeOptions } from \"shared-ui-components/constToOptionsMaps\";\r\nimport { NumberDropdownPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/dropdownPropertyLine\";\r\nimport { NumberInputPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/inputPropertyLine\";\r\nimport { PropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/propertyLine\";\r\nimport { SwitchPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/switchPropertyLine\";\r\nimport { SyncedSliderPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/syncedSliderPropertyLine\";\r\nimport { Collapse } from \"shared-ui-components/fluent/primitives/collapse\";\r\nimport { useProperty } from \"../../../hooks/compoundPropertyHooks\";\r\nimport { BoundProperty } from \"../boundProperty\";\r\n\r\nconst OrientationOptions = [\r\n { label: \"Clockwise\", value: Material.ClockWiseSideOrientation },\r\n { label: \"Counterclockwise\", value: Material.CounterClockWiseSideOrientation },\r\n] as const satisfies DropdownOption<number>[];\r\n\r\nconst TransparencyModeOptions = [\r\n { label: \"Opaque\", value: Material.MATERIAL_OPAQUE },\r\n { label: \"Alpha test\", value: Material.MATERIAL_ALPHATEST },\r\n { label: \"Alpha blend\", value: Material.MATERIAL_ALPHABLEND },\r\n { label: \"Alpha blend and test\", value: Material.MATERIAL_ALPHATESTANDBLEND },\r\n] as const satisfies DropdownOption<number>[];\r\n\r\nconst DepthFunctionOptions = [\r\n { label: \"<Engine Default>\", value: 0 },\r\n { label: \"Never\", value: Engine.NEVER },\r\n { label: \"Always\", value: Engine.ALWAYS },\r\n { label: \"Equal\", value: Engine.EQUAL },\r\n { label: \"Less\", value: Engine.LESS },\r\n { label: \"Less or equal\", value: Engine.LEQUAL },\r\n { label: \"Greater\", value: Engine.GREATER },\r\n { label: \"Greater or equal\", value: Engine.GEQUAL },\r\n { label: \"Not equal\", value: Engine.NOTEQUAL },\r\n] as const satisfies DropdownOption<number>[];\r\n\r\nconst StencilFunctionOptions = [\r\n { label: \"Never\", value: Constants.NEVER },\r\n { label: \"Always\", value: Constants.ALWAYS },\r\n { label: \"Equal\", value: Constants.EQUAL },\r\n { label: \"Less\", value: Constants.LESS },\r\n { label: \"Less or equal\", value: Constants.LEQUAL },\r\n { label: \"Greater\", value: Constants.GREATER },\r\n { label: \"Greater or equal\", value: Constants.GEQUAL },\r\n { label: \"Not equal\", value: Constants.NOTEQUAL },\r\n] as const satisfies DropdownOption<number>[];\r\n\r\nconst StencilOperationOptions = [\r\n { label: \"Keep\", value: Constants.KEEP },\r\n { label: \"Zero\", value: Constants.ZERO },\r\n { label: \"Replace\", value: Constants.REPLACE },\r\n { label: \"Incr\", value: Constants.INCR },\r\n { label: \"Decr\", value: Constants.DECR },\r\n { label: \"Invert\", value: Constants.INVERT },\r\n { label: \"Incr wrap\", value: Constants.INCR_WRAP },\r\n { label: \"Decr wrap\", value: Constants.DECR_WRAP },\r\n] as const satisfies DropdownOption<number>[];\r\n\r\nexport const MaterialGeneralProperties: FunctionComponent<{ material: Material }> = (props) => {\r\n const { material } = props;\r\n\r\n const pointsCloud = useProperty(material, \"pointsCloud\");\r\n const faceCulling = useProperty(material, \"backFaceCulling\");\r\n const isWebGPU = material.getScene().getEngine().isWebGPU;\r\n\r\n return (\r\n <>\r\n <BoundProperty\r\n component={SwitchPropertyLine}\r\n label=\"Face Culling\"\r\n docLink=\"https://doc.babylonjs.com/features/featuresDeepDive/materials/using/materials_introduction#back-face-culling\"\r\n target={material}\r\n propertyKey=\"backFaceCulling\"\r\n />\r\n <Collapse visible={faceCulling}>\r\n <BoundProperty\r\n component={SwitchPropertyLine}\r\n label=\"Cull Back Faces\"\r\n description=\"Culls back faces. If false, front faces are culled.\"\r\n target={material}\r\n propertyKey=\"cullBackFaces\"\r\n />\r\n </Collapse>\r\n <BoundProperty\r\n component={NumberDropdownPropertyLine}\r\n label=\"Orientation\"\r\n description=\"The front face side. Overrides mesh's orientation.\"\r\n options={OrientationOptions}\r\n target={material}\r\n propertyKey=\"sideOrientation\"\r\n nullable\r\n defaultValue={material.getScene().useRightHandedSystem ? Material.CounterClockWiseSideOrientation : Material.ClockWiseSideOrientation}\r\n />\r\n {/* TODO: Property name is different per material type\r\n <BoundProperty component={SwitchPropertyLine} label=\"Disable Lighting\" target={material} propertyKey=\"disableLighting\" /> */}\r\n <BoundProperty component={SwitchPropertyLine} label=\"Disable Color Write\" target={material} propertyKey=\"disableColorWrite\" />\r\n <BoundProperty component={SwitchPropertyLine} label=\"Disable Depth Write\" target={material} propertyKey=\"disableDepthWrite\" />\r\n <BoundProperty component={SwitchPropertyLine} label=\"Force Depth Write\" target={material} propertyKey=\"forceDepthWrite\" />\r\n <BoundProperty component={NumberDropdownPropertyLine} label=\"Depth Function\" options={DepthFunctionOptions} target={material} propertyKey=\"depthFunction\" />\r\n <BoundProperty\r\n component={SwitchPropertyLine}\r\n label=\"Need Depth Pre-pass\"\r\n docLink=\"https://doc.babylonjs.com/features/featuresDeepDive/materials/advanced/transparent_rendering/#depth-pre-pass-meshes\"\r\n target={material}\r\n propertyKey=\"needDepthPrePass\"\r\n />\r\n <BoundProperty component={SyncedSliderPropertyLine} label=\"Z-offset Factor\" target={material} propertyKey=\"zOffset\" min={-10} max={10} step={0.1} />\r\n <BoundProperty component={SyncedSliderPropertyLine} label=\"Z-offset Units\" target={material} propertyKey=\"zOffsetUnits\" min={-10} max={10} step={0.1} />\r\n <BoundProperty component={SwitchPropertyLine} label=\"Wireframe\" target={material} propertyKey=\"wireframe\" />\r\n <BoundProperty component={SwitchPropertyLine} label=\"Point Cloud\" target={material} propertyKey=\"pointsCloud\" />\r\n {pointsCloud && <BoundProperty component={SyncedSliderPropertyLine} label=\"Point Size\" target={material} propertyKey=\"pointSize\" min={0} max={100} step={0.1} />}\r\n {isWebGPU && <BoundProperty component={SwitchPropertyLine} label=\"Use Vertex Pulling\" target={material} propertyKey=\"useVertexPulling\" />}\r\n <BoundProperty\r\n component={SwitchPropertyLine}\r\n label=\"Support Fog\"\r\n target={material}\r\n propertyKey=\"fogEnabled\"\r\n description=\"Indicates whether the material supports fog (however, fog must be enabled at the scene level to be effective).\"\r\n />\r\n <BoundProperty\r\n component={SwitchPropertyLine}\r\n label=\"Use Logarithmic Depth\"\r\n target={material}\r\n propertyKey=\"useLogarithmicDepth\"\r\n docLink=\"https://doc.babylonjs.com/features/featuresDeepDive/materials/advanced/logarithmicDepthBuffer\"\r\n />\r\n <BoundProperty\r\n component={SwitchPropertyLine}\r\n label=\"Set Vertex Output Invariant\"\r\n target={material}\r\n propertyKey=\"isVertexOutputInvariant\"\r\n description=\"Setting this property to true will force the shader compiler to disable some optimization to make sure the vertex output is always calculated the same way across different compilation units.\"\r\n />\r\n </>\r\n );\r\n};\r\n\r\nexport const MaterialTransparencyProperties: FunctionComponent<{ material: Material }> = (props) => {\r\n const { material } = props;\r\n\r\n return (\r\n <>\r\n <BoundProperty component={SyncedSliderPropertyLine} label=\"Alpha\" target={material} propertyKey=\"alpha\" min={0} max={1} step={0.01} />\r\n <BoundProperty\r\n component={NumberDropdownPropertyLine}\r\n label=\"Transparency Mode\"\r\n docLink=\"https://doc.babylonjs.com/features/featuresDeepDive/materials/advanced/transparent_rendering/#the-transparencymode-property\"\r\n target={material}\r\n propertyKey=\"transparencyMode\"\r\n options={TransparencyModeOptions}\r\n nullable\r\n defaultValue={Material.MATERIAL_OPAQUE}\r\n />\r\n <BoundProperty\r\n component={NumberDropdownPropertyLine}\r\n label=\"Alpha Mode\"\r\n docLink=\"https://doc.babylonjs.com/features/featuresDeepDive/materials/using/blendModes/#available-blend-modes\"\r\n target={material}\r\n propertyKey=\"alphaMode\"\r\n options={AlphaModeOptions}\r\n />\r\n {/* TODO: Property names are different per material type\r\n <BoundProperty component={SwitchPropertyLine} label=\"Diffuse/albedo texture has alpha\" target={material.albedoTexture} propertyKey=\"hasAlpha\" />\r\n <BoundProperty component={SwitchPropertyLine} label=\"Use alpha from diffuse/albedo texture\" target={material} propertyKey=\"useAlphaFromDiffuseTexture\" /> */}\r\n <BoundProperty component={SwitchPropertyLine} label=\"Separate Culling Pass\" target={material} propertyKey=\"separateCullingPass\" />\r\n </>\r\n );\r\n};\r\n\r\nexport const MaterialStencilProperties: FunctionComponent<{ material: Material }> = (props) => {\r\n const { material } = props;\r\n const stencilEnabled = useProperty(material.stencil, \"enabled\");\r\n\r\n return (\r\n <>\r\n <BoundProperty component={SwitchPropertyLine} label=\"Enabled\" target={material.stencil} propertyKey=\"enabled\" />\r\n <Collapse visible={stencilEnabled}>\r\n <>\r\n {/* TODO: Make HexPropertyLine work in the case of simply editing a hex value */}\r\n {/* <BoundProperty component={HexPropertyLine} label=\"Write Mask\" target={material.stencil} propertyKey=\"mask\" /> */}\r\n {/* <BoundProperty component={HexPropertyLine} label=\"Read Mask\" target={material.stencil} propertyKey=\"funcMask\" /> */}\r\n {/** TODO: Force int integer-only for NumberInputPropertyLine */}\r\n <BoundProperty component={NumberInputPropertyLine} label=\"Reference Value\" target={material.stencil} propertyKey=\"funcRef\" step={0} />\r\n <PropertyLine\r\n label=\"Front\"\r\n expandByDefault={true}\r\n expandedContent={\r\n <>\r\n <BoundProperty\r\n component={NumberDropdownPropertyLine}\r\n label=\"Function\"\r\n target={material.stencil}\r\n propertyKey=\"func\"\r\n options={StencilFunctionOptions}\r\n />\r\n <BoundProperty\r\n component={NumberDropdownPropertyLine}\r\n label=\"Stencil Fail Operation\"\r\n target={material.stencil}\r\n propertyKey=\"opStencilFail\"\r\n options={StencilOperationOptions}\r\n />\r\n <BoundProperty\r\n component={NumberDropdownPropertyLine}\r\n label=\"Depth Fail Operation\"\r\n target={material.stencil}\r\n propertyKey=\"opDepthFail\"\r\n options={StencilOperationOptions}\r\n />\r\n <BoundProperty\r\n component={NumberDropdownPropertyLine}\r\n label=\"Stencil & Depth Pass Operation\"\r\n target={material.stencil}\r\n propertyKey=\"opStencilDepthPass\"\r\n options={StencilOperationOptions}\r\n />\r\n </>\r\n }\r\n />\r\n <PropertyLine\r\n label=\"Back\"\r\n expandByDefault={true}\r\n expandedContent={\r\n <>\r\n <BoundProperty\r\n component={NumberDropdownPropertyLine}\r\n label=\"Function\"\r\n target={material.stencil}\r\n propertyKey=\"backFunc\"\r\n options={StencilFunctionOptions}\r\n />\r\n <BoundProperty\r\n component={NumberDropdownPropertyLine}\r\n label=\"Stencil Fail Operation\"\r\n target={material.stencil}\r\n propertyKey=\"backOpStencilFail\"\r\n options={StencilOperationOptions}\r\n />\r\n <BoundProperty\r\n component={NumberDropdownPropertyLine}\r\n label=\"Depth Fail Operation\"\r\n target={material.stencil}\r\n propertyKey=\"backOpDepthFail\"\r\n options={StencilOperationOptions}\r\n />\r\n <BoundProperty\r\n component={NumberDropdownPropertyLine}\r\n label=\"Stencil & Depth Pass Operation\"\r\n target={material.stencil}\r\n propertyKey=\"backOpStencilDepthPass\"\r\n options={StencilOperationOptions}\r\n />\r\n </>\r\n }\r\n />\r\n </>\r\n </Collapse>\r\n </>\r\n );\r\n};\r\n","import type { FunctionComponent } from \"react\";\r\n\r\nimport type { MultiMaterial } from \"core/Materials/multiMaterial\";\r\nimport type { ISelectionService } from \"../../../services/selectionService\";\r\n\r\nimport { LinkToEntityPropertyLine } from \"../linkToEntityPropertyLine\";\r\n\r\nexport const MultiMaterialChildrenProperties: FunctionComponent<{ multiMaterial: MultiMaterial; selectionService: ISelectionService }> = (props) => {\r\n const { multiMaterial, selectionService } = props;\r\n\r\n return (\r\n <>\r\n {multiMaterial.subMaterials\r\n .filter((material) => !!material)\r\n .map((material, index) => (\r\n <LinkToEntityPropertyLine key={material.uniqueId} label={`Material #${index + 1}`} entity={material} selectionService={selectionService} />\r\n ))}\r\n </>\r\n );\r\n};\r\n","import type { FunctionComponent } from \"react\";\r\n\r\nimport { BoundProperty } from \"../boundProperty\";\r\nimport { SwitchPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/switchPropertyLine\";\r\n\r\nexport type MaterialWithNormalMaps = {\r\n invertNormalMapX: boolean;\r\n invertNormalMapY: boolean;\r\n};\r\n\r\n/**\r\n * Displays the normal map properties of a standard material.\r\n * @param props - The required properties\r\n * @returns A JSX element representing the normal map properties.\r\n */\r\nexport const NormalMapProperties: FunctionComponent<{ material: MaterialWithNormalMaps }> = (props) => {\r\n const { material } = props;\r\n\r\n return (\r\n <>\r\n <BoundProperty component={SwitchPropertyLine} label=\"Invert X Axis\" target={material} propertyKey=\"invertNormalMapX\" />\r\n <BoundProperty component={SwitchPropertyLine} label=\"Invert Y Axis\" target={material} propertyKey=\"invertNormalMapY\" />\r\n </>\r\n );\r\n};\r\n","import type { FunctionComponent } from \"react\";\r\n\r\nimport { BoundProperty } from \"../boundProperty\";\r\nimport { useProperty } from \"../../../hooks/compoundPropertyHooks\";\r\n\r\nimport { SyncedSliderPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/syncedSliderPropertyLine\";\r\nimport { SwitchPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/switchPropertyLine\";\r\n\r\nimport type { PBRBaseMaterial } from \"core/Materials/PBR/pbrBaseMaterial\";\r\nimport { FileUploadLine } from \"shared-ui-components/fluent/hoc/fileUploadLine\";\r\nimport { Color3PropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/colorPropertyLine\";\r\nimport { Vector2PropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/vectorPropertyLine\";\r\n\r\nimport type { BaseTexture } from \"core/Materials/Textures/baseTexture\";\r\nimport { ReadFile } from \"core/Misc/fileTools\";\r\nimport { Texture } from \"core/Materials/Textures/texture\";\r\nimport { Collapse } from \"shared-ui-components/fluent/primitives/collapse\";\r\n\r\ndeclare module \"core/Materials/PBR/pbrSheenConfiguration\" {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n interface PBRSheenConfiguration {\r\n _useRoughness: boolean;\r\n }\r\n}\r\n\r\n// TODO: ryamtrem / gehalper This function is temporal until there is a line control to handle texture links (similar to the old TextureLinkLineComponent)\r\nconst UpdateTexture = (file: File, material: PBRBaseMaterial, textureSetter: (texture: BaseTexture) => void) => {\r\n ReadFile(\r\n file,\r\n (data) => {\r\n const blob = new Blob([data], { type: \"octet/stream\" });\r\n const url = URL.createObjectURL(blob);\r\n textureSetter(new Texture(url, material.getScene(), false, false));\r\n },\r\n undefined,\r\n true\r\n );\r\n};\r\n\r\nexport const PBRBaseMaterialClearCoatProperties: FunctionComponent<{ material: PBRBaseMaterial }> = (props) => {\r\n const { material } = props;\r\n\r\n const isEnabled = useProperty(material.clearCoat, \"isEnabled\");\r\n const isTintEnabled = useProperty(material.clearCoat, \"isTintEnabled\");\r\n const bumpTexture = useProperty(material.clearCoat, \"bumpTexture\");\r\n\r\n return (\r\n <>\r\n <BoundProperty component={SwitchPropertyLine} label=\"Enabled\" target={material.clearCoat} propertyKey=\"isEnabled\" />\r\n <Collapse visible={isEnabled}>\r\n <BoundProperty component={SyncedSliderPropertyLine} label=\"Intensity\" target={material.clearCoat} propertyKey=\"intensity\" min={0} max={1} step={0.01} />\r\n <BoundProperty component={SyncedSliderPropertyLine} label=\"Roughness\" target={material.clearCoat} propertyKey=\"roughness\" min={0} max={1} step={0.01} />\r\n <BoundProperty\r\n component={SyncedSliderPropertyLine}\r\n label=\"IOR\"\r\n description=\"Index of Refraction\"\r\n target={material.clearCoat}\r\n propertyKey=\"indexOfRefraction\"\r\n min={1}\r\n max={3}\r\n step={0.01}\r\n />\r\n <BoundProperty component={SwitchPropertyLine} label=\"Remap F0\" target={material.clearCoat} propertyKey=\"remapF0OnInterfaceChange\" />\r\n <FileUploadLine\r\n label=\"Clear coat\"\r\n accept=\".jpg, .png, .tga, .dds, .env, .exr\"\r\n onClick={(files) => {\r\n if (files.length > 0) {\r\n UpdateTexture(files[0], material, (texture) => (material.clearCoat.texture = texture));\r\n }\r\n }}\r\n />\r\n <FileUploadLine\r\n label=\"Roughness\"\r\n accept=\".jpg, .png, .tga, .dds, .env, .exr\"\r\n onClick={(files) => {\r\n if (files.length > 0) {\r\n UpdateTexture(files[0], material, (texture) => (material.clearCoat.textureRoughness = texture));\r\n }\r\n }}\r\n />\r\n <FileUploadLine\r\n label=\"Bump\"\r\n accept=\".jpg, .png, .tga, .dds, .env, .exr\"\r\n onClick={(files) => {\r\n if (files.length > 0) {\r\n UpdateTexture(files[0], material, (texture) => (material.clearCoat.bumpTexture = texture));\r\n }\r\n }}\r\n />\r\n <Collapse visible={bumpTexture !== null}>\r\n <BoundProperty component={SyncedSliderPropertyLine} label=\"Bump Strength\" target={bumpTexture} propertyKey=\"level\" min={0} max={2} step={0.01} />\r\n </Collapse>\r\n <BoundProperty component={SwitchPropertyLine} label=\"Use Roughness from Main Texture\" target={material.clearCoat} propertyKey=\"useRoughnessFromMainTexture\" />\r\n <BoundProperty component={SwitchPropertyLine} label=\"Tint\" target={material.clearCoat} propertyKey=\"isTintEnabled\" />\r\n <Collapse visible={isTintEnabled}>\r\n <BoundProperty component={Color3PropertyLine} label=\"Tint Color\" target={material.clearCoat} propertyKey=\"tintColor\" isLinearMode={true} />\r\n <BoundProperty\r\n component={SyncedSliderPropertyLine}\r\n label=\"At Distance\"\r\n target={material.clearCoat}\r\n propertyKey=\"tintColorAtDistance\"\r\n min={0}\r\n max={20}\r\n step={0.1}\r\n />\r\n <BoundProperty\r\n component={SyncedSliderPropertyLine}\r\n label=\"Tint Thickness\"\r\n target={material.clearCoat}\r\n propertyKey=\"tintThickness\"\r\n min={0}\r\n max={20}\r\n step={0.1}\r\n />\r\n <FileUploadLine\r\n label=\"Tint\"\r\n accept=\".jpg, .png, .tga, .dds, .env, .exr\"\r\n onClick={(files) => {\r\n if (files.length > 0) {\r\n UpdateTexture(files[0], material, (texture) => (material.clearCoat.tintTexture = texture));\r\n }\r\n }}\r\n />\r\n </Collapse>\r\n </Collapse>\r\n </>\r\n );\r\n};\r\n\r\nexport const PBRBaseMaterialIridescenceProperties: FunctionComponent<{ material: PBRBaseMaterial }> = (props) => {\r\n const { material } = props;\r\n\r\n const isEnabled = useProperty(material.iridescence, \"isEnabled\");\r\n\r\n return (\r\n <>\r\n <BoundProperty component={SwitchPropertyLine} label=\"Enabled\" target={material.iridescence} propertyKey=\"isEnabled\" />\r\n <Collapse visible={isEnabled}>\r\n <BoundProperty component={SyncedSliderPropertyLine} label=\"Intensity\" target={material.iridescence} propertyKey=\"intensity\" min={0} max={1} step={0.01} />\r\n <BoundProperty\r\n component={SyncedSliderPropertyLine}\r\n label=\"IOR\"\r\n description=\"Index of Refraction\"\r\n target={material.iridescence}\r\n propertyKey=\"indexOfRefraction\"\r\n min={1}\r\n max={3}\r\n step={0.01}\r\n />\r\n <BoundProperty\r\n component={SyncedSliderPropertyLine}\r\n label=\"Minimum Thickness\"\r\n target={material.iridescence}\r\n propertyKey=\"minimumThickness\"\r\n min={0}\r\n max={1000}\r\n step={10}\r\n />\r\n <BoundProperty\r\n component={SyncedSliderPropertyLine}\r\n label=\"Maxium Thickness\"\r\n target={material.iridescence}\r\n propertyKey=\"maximumThickness\"\r\n min={0}\r\n max={1000}\r\n step={10}\r\n />\r\n <FileUploadLine\r\n label=\"Iridescence\"\r\n accept=\".jpg, .png, .tga, .dds, .env, .exr\"\r\n onClick={(files) => {\r\n if (files.length > 0) {\r\n UpdateTexture(files[0], material, (texture) => (material.iridescence.texture = texture));\r\n }\r\n }}\r\n />\r\n <FileUploadLine\r\n label=\"Thickness\"\r\n accept=\".jpg, .png, .tga, .dds, .env, .exr\"\r\n onClick={(files) => {\r\n if (files.length > 0) {\r\n UpdateTexture(files[0], material, (texture) => (material.iridescence.thicknessTexture = texture));\r\n }\r\n }}\r\n />\r\n </Collapse>\r\n </>\r\n );\r\n};\r\n\r\nexport const PBRBaseMaterialAnisotropicProperties: FunctionComponent<{ material: PBRBaseMaterial }> = (props) => {\r\n const { material } = props;\r\n\r\n const isEnabled = useProperty(material.anisotropy, \"isEnabled\");\r\n\r\n return (\r\n <>\r\n <BoundProperty component={SwitchPropertyLine} label=\"Enabled\" target={material.anisotropy} propertyKey=\"isEnabled\" />\r\n <Collapse visible={isEnabled}>\r\n <BoundProperty component={SwitchPropertyLine} label=\"Legacy Mode\" target={material.anisotropy} propertyKey=\"legacy\" />\r\n <BoundProperty component={SyncedSliderPropertyLine} label=\"Intensity\" target={material.anisotropy} propertyKey=\"intensity\" min={0} max={1} step={0.01} />\r\n <BoundProperty component={Vector2PropertyLine} label=\"Direction\" target={material.anisotropy} propertyKey=\"direction\" />\r\n <FileUploadLine\r\n label=\"Anisotropic\"\r\n accept=\".jpg, .png, .tga, .dds, .env, .exr\"\r\n onClick={(files) => {\r\n if (files.length > 0) {\r\n UpdateTexture(files[0], material, (texture) => (material.anisotropy.texture = texture));\r\n }\r\n }}\r\n />\r\n </Collapse>\r\n </>\r\n );\r\n};\r\n\r\nexport const PBRBaseMaterialSheenProperties: FunctionComponent<{ material: PBRBaseMaterial }> = (props) => {\r\n const { material } = props;\r\n\r\n const isEnabled = useProperty(material.sheen, \"isEnabled\");\r\n const useRoughness = useProperty(material.sheen, \"_useRoughness\");\r\n\r\n return (\r\n <>\r\n <BoundProperty component={SwitchPropertyLine} label=\"Enabled\" target={material.sheen} propertyKey=\"isEnabled\" />\r\n <Collapse visible={isEnabled}>\r\n <BoundProperty component={SwitchPropertyLine} label=\"Link to Albedo\" target={material.sheen} propertyKey=\"linkSheenWithAlbedo\" />\r\n <BoundProperty component={SyncedSliderPropertyLine} label=\"Intensity\" target={material.sheen} propertyKey=\"intensity\" min={0} max={1} step={0.01} />\r\n <BoundProperty component={Color3PropertyLine} label=\"Color\" target={material.sheen} propertyKey=\"color\" isLinearMode={true} />\r\n <FileUploadLine\r\n label=\"Sheen\"\r\n accept=\".jpg, .png, .tga, .dds, .env, .exr\"\r\n onClick={(files) => {\r\n if (files.length > 0) {\r\n UpdateTexture(files[0], material, (texture) => (material.sheen.texture = texture));\r\n }\r\n }}\r\n />\r\n <FileUploadLine\r\n label=\"Roughness\"\r\n accept=\".jpg, .png, .tga, .dds, .env, .exr\"\r\n onClick={(files) => {\r\n if (files.length > 0) {\r\n UpdateTexture(files[0], material, (texture) => (material.sheen.textureRoughness = texture));\r\n }\r\n }}\r\n />\r\n <BoundProperty component={SwitchPropertyLine} label=\"Use Roughness\" target={material.sheen} propertyKey=\"_useRoughness\" />\r\n <Collapse visible={useRoughness}>\r\n <BoundProperty\r\n nullable\r\n component={SyncedSliderPropertyLine}\r\n label=\"Roughness\"\r\n target={material.sheen}\r\n propertyKey=\"roughness\"\r\n defaultValue={0}\r\n min={0}\r\n max={1}\r\n step={0.01}\r\n />\r\n </Collapse>\r\n <BoundProperty component={SwitchPropertyLine} label=\"Use Roughness from Main Texture\" target={material.sheen} propertyKey=\"useRoughnessFromMainTexture\" />\r\n <BoundProperty component={SwitchPropertyLine} label=\"Albedo Scaling\" target={material.sheen} propertyKey=\"albedoScaling\" />\r\n </Collapse>\r\n </>\r\n );\r\n};\r\n","import type { FunctionComponent } from \"react\";\r\n\r\nimport type { PBRMaterial } from \"core/Materials/PBR/pbrMaterial\";\r\nimport { BoundProperty } from \"../boundProperty\";\r\nimport { Color3PropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/colorPropertyLine\";\r\nimport { SyncedSliderPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/syncedSliderPropertyLine\";\r\nimport { SwitchPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/switchPropertyLine\";\r\n\r\n/**\r\n * Displays the lighting and color properties of a PBR material.\r\n * @param props - The required properties\r\n * @returns A JSX element representing the lighting and color properties.\r\n */\r\nexport const PBRMaterialLightingAndColorProperties: FunctionComponent<{ material: PBRMaterial }> = (props) => {\r\n const { material } = props;\r\n\r\n return (\r\n <>\r\n <BoundProperty component={Color3PropertyLine} label=\"Albedo\" target={material} propertyKey=\"albedoColor\" isLinearMode />\r\n <BoundProperty component={SyncedSliderPropertyLine} label=\"Base Weight\" target={material} propertyKey=\"baseWeight\" min={0} max={1} step={0.01} />\r\n <BoundProperty component={Color3PropertyLine} label=\"Reflectivity\" target={material} propertyKey=\"reflectivityColor\" isLinearMode />\r\n <BoundProperty component={SyncedSliderPropertyLine} label=\"Micro-Surface\" target={material} propertyKey=\"microSurface\" min={0} max={1} step={0.01} />\r\n <BoundProperty component={Color3PropertyLine} label=\"Emissive\" target={material} propertyKey=\"emissiveColor\" isLinearMode />\r\n <BoundProperty component={Color3PropertyLine} label=\"Ambient\" target={material} propertyKey=\"ambientColor\" isLinearMode />\r\n <BoundProperty component={SwitchPropertyLine} label=\"Use Physical Light Falloff\" target={material} propertyKey=\"usePhysicalLightFalloff\" />\r\n </>\r\n );\r\n};\r\n","import type { FunctionComponent } from \"react\";\n\nimport type { OpenPBRMaterial } from \"core/Materials/PBR/openpbrMaterial\";\nimport type { BaseTexture } from \"core/Materials/Textures/baseTexture\";\nimport { BoundProperty } from \"../boundProperty\";\nimport { Color3PropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/colorPropertyLine\";\nimport { SyncedSliderPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/syncedSliderPropertyLine\";\nimport { FileUploadLine } from \"shared-ui-components/fluent/hoc/fileUploadLine\";\nimport { ReadFile } from \"core/Misc/fileTools\";\nimport { Texture } from \"core/Materials/Textures/texture\";\n\n// TODO: ryamtrem / gehalper This function is temporal until there is a line control to handle texture links (similar to the old TextureLinkLineComponent)\nconst UpdateTexture = (file: File, material: OpenPBRMaterial, textureSetter: (texture: BaseTexture) => void) => {\n ReadFile(\n file,\n (data) => {\n const blob = new Blob([data], { type: \"octet/stream\" });\n const url = URL.createObjectURL(blob);\n textureSetter(new Texture(url, material.getScene(), false, false));\n },\n undefined,\n true\n );\n};\n\n/**\n * Displays the base layer properties of an OpenPBR material.\n * @param props - The required properties\n * @returns A JSX element representing the base layer properties.\n */\nexport const OpenPBRMaterialBaseProperties: FunctionComponent<{ material: OpenPBRMaterial }> = (props) => {\n const { material } = props;\n\n return (\n <>\n <BoundProperty component={SyncedSliderPropertyLine} label=\"Base Weight\" target={material} propertyKey=\"baseWeight\" min={0} max={1} step={0.01} />\n <FileUploadLine\n label=\"Base Weight\"\n accept=\".jpg, .png, .tga, .dds, .env, .exr\"\n onClick={(files) => {\n if (files.length > 0) {\n UpdateTexture(files[0], material, (texture) => (material.baseWeightTexture = texture));\n }\n }}\n />\n <BoundProperty component={Color3PropertyLine} label=\"Base Color\" target={material} propertyKey=\"baseColor\" isLinearMode />\n <FileUploadLine\n label=\"Base Color\"\n accept=\".jpg, .png, .tga, .dds, .env, .exr\"\n onClick={(files) => {\n if (files.length > 0) {\n UpdateTexture(files[0], material, (texture) => (material.baseColorTexture = texture));\n }\n }}\n />\n <BoundProperty component={SyncedSliderPropertyLine} label=\"Base Metalness\" target={material} propertyKey=\"baseMetalness\" min={0} max={1} step={0.01} />\n <FileUploadLine\n label=\"Base Metalness\"\n accept=\".jpg, .png, .tga, .dds, .env, .exr\"\n onClick={(files) => {\n if (files.length > 0) {\n UpdateTexture(files[0], material, (texture) => (material.baseMetalnessTexture = texture));\n }\n }}\n />\n <BoundProperty component={SyncedSliderPropertyLine} label=\"Base Diffuse Roughness\" target={material} propertyKey=\"baseDiffuseRoughness\" min={0} max={1} step={0.01} />\n <FileUploadLine\n label=\"Base Diffuse Roughness\"\n accept=\".jpg, .png, .tga, .dds, .env, .exr\"\n onClick={(files) => {\n if (files.length > 0) {\n UpdateTexture(files[0], material, (texture) => (material.baseDiffuseRoughnessTexture = texture));\n }\n }}\n />\n </>\n );\n};\n\n/**\n * Displays the specular layer properties of an OpenPBR material.\n * @param props - The required properties\n * @returns A JSX element representing the specular layer properties.\n */\nexport const OpenPBRMaterialSpecularProperties: FunctionComponent<{ material: OpenPBRMaterial }> = (props) => {\n const { material } = props;\n\n return (\n <>\n <BoundProperty component={SyncedSliderPropertyLine} label=\"Specular Weight\" target={material} propertyKey=\"specularWeight\" min={0} max={1} step={0.01} />\n <FileUploadLine\n label=\"Specular Weight\"\n accept=\".jpg, .png, .tga, .dds, .env, .exr\"\n onClick={(files) => {\n if (files.length > 0) {\n UpdateTexture(files[0], material, (texture) => (material.specularWeightTexture = texture));\n }\n }}\n />\n <BoundProperty component={Color3PropertyLine} label=\"Specular Color\" target={material} propertyKey=\"specularColor\" isLinearMode />\n <FileUploadLine\n label=\"Specular Color\"\n accept=\".jpg, .png, .tga, .dds, .env, .exr\"\n onClick={(files) => {\n if (files.length > 0) {\n UpdateTexture(files[0], material, (texture) => (material.specularColorTexture = texture));\n }\n }}\n />\n <BoundProperty component={SyncedSliderPropertyLine} label=\"Specular Roughness\" target={material} propertyKey=\"specularRoughness\" min={0} max={1} step={0.01} />\n <FileUploadLine\n label=\"Specular Roughness\"\n accept=\".jpg, .png, .tga, .dds, .env, .exr\"\n onClick={(files) => {\n if (files.length > 0) {\n UpdateTexture(files[0], material, (texture) => (material.specularRoughnessTexture = texture));\n }\n }}\n />\n <BoundProperty\n component={SyncedSliderPropertyLine}\n label=\"Specular Roughness Anisotropy\"\n target={material}\n propertyKey=\"specularRoughnessAnisotropy\"\n min={0}\n max={1}\n step={0.01}\n />\n <FileUploadLine\n label=\"Specular Roughness Anisotropy\"\n accept=\".jpg, .png, .tga, .dds, .env, .exr\"\n onClick={(files) => {\n if (files.length > 0) {\n UpdateTexture(files[0], material, (texture) => (material.specularRoughnessAnisotropyTexture = texture));\n }\n }}\n />\n <BoundProperty component={SyncedSliderPropertyLine} label=\"Specular IOR\" target={material} propertyKey=\"specularIor\" min={1} max={3} step={0.01} />\n </>\n );\n};\n\n/**\n * Displays the coat layer properties of an OpenPBR material.\n * @param props - The required properties\n * @returns A JSX element representing the coat layer properties.\n */\nexport const OpenPBRMaterialCoatProperties: FunctionComponent<{ material: OpenPBRMaterial }> = (props) => {\n const { material } = props;\n\n return (\n <>\n <BoundProperty component={SyncedSliderPropertyLine} label=\"Coat Weight\" target={material} propertyKey=\"coatWeight\" min={0} max={1} step={0.01} />\n <FileUploadLine\n label=\"Coat Weight\"\n accept=\".jpg, .png, .tga, .dds, .env, .exr\"\n onClick={(files) => {\n if (files.length > 0) {\n UpdateTexture(files[0], material, (texture) => (material.coatWeightTexture = texture));\n }\n }}\n />\n <BoundProperty component={Color3PropertyLine} label=\"Coat Color\" target={material} propertyKey=\"coatColor\" isLinearMode />\n <FileUploadLine\n label=\"Coat Color\"\n accept=\".jpg, .png, .tga, .dds, .env, .exr\"\n onClick={(files) => {\n if (files.length > 0) {\n UpdateTexture(files[0], material, (texture) => (material.coatColorTexture = texture));\n }\n }}\n />\n <BoundProperty component={SyncedSliderPropertyLine} label=\"Coat Roughness\" target={material} propertyKey=\"coatRoughness\" min={0} max={1} step={0.01} />\n <FileUploadLine\n label=\"Coat Roughness\"\n accept=\".jpg, .png, .tga, .dds, .env, .exr\"\n onClick={(files) => {\n if (files.length > 0) {\n UpdateTexture(files[0], material, (texture) => (material.coatRoughnessTexture = texture));\n }\n }}\n />\n <BoundProperty\n component={SyncedSliderPropertyLine}\n label=\"Coat Roughness Anisotropy\"\n target={material}\n propertyKey=\"coatRoughnessAnisotropy\"\n min={0}\n max={1}\n step={0.01}\n />\n <FileUploadLine\n label=\"Coat Roughness Anisotropy\"\n accept=\".jpg, .png, .tga, .dds, .env, .exr\"\n onClick={(files) => {\n if (files.length > 0) {\n UpdateTexture(files[0], material, (texture) => (material.coatRoughnessAnisotropyTexture = texture));\n }\n }}\n />\n <BoundProperty component={SyncedSliderPropertyLine} label=\"Coat IOR\" target={material} propertyKey=\"coatIor\" min={1} max={3} step={0.01} />\n <BoundProperty component={SyncedSliderPropertyLine} label=\"Coat Darkening\" target={material} propertyKey=\"coatDarkening\" min={0} max={1} step={0.01} />\n <FileUploadLine\n label=\"Coat Darkening\"\n accept=\".jpg, .png, .tga, .dds, .env, .exr\"\n onClick={(files) => {\n if (files.length > 0) {\n UpdateTexture(files[0], material, (texture) => (material.coatDarkeningTexture = texture));\n }\n }}\n />\n </>\n );\n};\n\n/**\n * Displays the fuzz layer properties of an OpenPBR material.\n * @param props - The required properties\n * @returns A JSX element representing the fuzz layer properties.\n */\nexport const OpenPBRMaterialFuzzProperties: FunctionComponent<{ material: OpenPBRMaterial }> = (props) => {\n const { material } = props;\n\n return (\n <>\n <BoundProperty component={SyncedSliderPropertyLine} label=\"Fuzz Weight\" target={material} propertyKey=\"fuzzWeight\" min={0} max={1} step={0.01} />\n <FileUploadLine\n label=\"Fuzz Weight\"\n accept=\".jpg, .png, .tga, .dds, .env, .exr\"\n onClick={(files) => {\n if (files.length > 0) {\n UpdateTexture(files[0], material, (texture) => (material.fuzzWeightTexture = texture));\n }\n }}\n />\n <BoundProperty component={Color3PropertyLine} label=\"Fuzz Color\" target={material} propertyKey=\"fuzzColor\" isLinearMode />\n <FileUploadLine\n label=\"Fuzz Color\"\n accept=\".jpg, .png, .tga, .dds, .env, .exr\"\n onClick={(files) => {\n if (files.length > 0) {\n UpdateTexture(files[0], material, (texture) => (material.fuzzColorTexture = texture));\n }\n }}\n />\n <BoundProperty component={SyncedSliderPropertyLine} label=\"Fuzz Roughness\" target={material} propertyKey=\"fuzzRoughness\" min={0} max={1} step={0.01} />\n <FileUploadLine\n label=\"Fuzz Roughness\"\n accept=\".jpg, .png, .tga, .dds, .env, .exr\"\n onClick={(files) => {\n if (files.length > 0) {\n UpdateTexture(files[0], material, (texture) => (material.fuzzRoughnessTexture = texture));\n }\n }}\n />\n <BoundProperty component={SyncedSliderPropertyLine} label=\"Number of Samples\" target={material} propertyKey=\"fuzzSampleNumber\" min={4} max={64} step={1} />\n </>\n );\n};\n\n/**\n * Displays the emission properties of an OpenPBR material.\n * @param props - The required properties\n * @returns A JSX element representing the emission properties.\n */\nexport const OpenPBRMaterialEmissionProperties: FunctionComponent<{ material: OpenPBRMaterial }> = (props) => {\n const { material } = props;\n\n return (\n <>\n <BoundProperty component={Color3PropertyLine} label=\"Emission Color\" target={material} propertyKey=\"emissionColor\" isLinearMode />\n <FileUploadLine\n label=\"Emission Color\"\n accept=\".jpg, .png, .tga, .dds, .env, .exr\"\n onClick={(files) => {\n if (files.length > 0) {\n UpdateTexture(files[0], material, (texture) => (material.emissionColorTexture = texture));\n }\n }}\n />\n <BoundProperty component={SyncedSliderPropertyLine} label=\"Emission Luminance\" target={material} propertyKey=\"emissionLuminance\" min={0} max={10} step={0.01} />\n </>\n );\n};\n\n/**\n * Displays the thin film properties of an OpenPBR material.\n * @param props - The required properties\n * @returns A JSX element representing the thin film properties.\n */\nexport const OpenPBRMaterialThinFilmProperties: FunctionComponent<{ material: OpenPBRMaterial }> = (props) => {\n const { material } = props;\n\n return (\n <>\n <BoundProperty component={SyncedSliderPropertyLine} label=\"Thin Film Weight\" target={material} propertyKey=\"thinFilmWeight\" min={0} max={1} step={0.01} />\n <FileUploadLine\n label=\"Thin Film Weight\"\n accept=\".jpg, .png, .tga, .dds, .env, .exr\"\n onClick={(files) => {\n if (files.length > 0) {\n UpdateTexture(files[0], material, (texture) => (material.thinFilmWeightTexture = texture));\n }\n }}\n />\n <BoundProperty component={SyncedSliderPropertyLine} label=\"Thin Film Thickness\" target={material} propertyKey=\"thinFilmThickness\" min={0} max={1} step={0.01} />\n <FileUploadLine\n label=\"Thin Film Thickness\"\n accept=\".jpg, .png, .tga, .dds, .env, .exr\"\n onClick={(files) => {\n if (files.length > 0) {\n UpdateTexture(files[0], material, (texture) => (material.thinFilmThicknessTexture = texture));\n }\n }}\n />\n <BoundProperty component={SyncedSliderPropertyLine} label=\"Thin Film IOR\" target={material} propertyKey=\"thinFilmIor\" min={1} max={3} step={0.01} />\n </>\n );\n};\n\n/**\n * Displays the geometry properties of an OpenPBR material.\n * @param props - The required properties\n * @returns A JSX element representing the geometry properties.\n */\nexport const OpenPBRMaterialGeometryProperties: FunctionComponent<{ material: OpenPBRMaterial }> = (props) => {\n const { material } = props;\n\n return (\n <>\n <BoundProperty component={SyncedSliderPropertyLine} label=\"Opacity\" target={material} propertyKey=\"geometryOpacity\" min={0} max={1} step={0.01} />\n <FileUploadLine\n label=\"Geometry Opacity\"\n accept=\".jpg, .png, .tga, .dds, .env, .exr\"\n onClick={(files) => {\n if (files.length > 0) {\n UpdateTexture(files[0], material, (texture) => (material.geometryOpacityTexture = texture));\n }\n }}\n />\n <FileUploadLine\n label=\"Geometry Normal\"\n accept=\".jpg, .png, .tga, .dds, .env, .exr\"\n onClick={(files) => {\n if (files.length > 0) {\n UpdateTexture(files[0], material, (texture) => (material.geometryNormalTexture = texture));\n }\n }}\n />\n <BoundProperty component={SyncedSliderPropertyLine} label=\"Tangent Angle\" target={material} propertyKey=\"geometryTangentAngle\" min={0} max={Math.PI} step={0.01} />\n <FileUploadLine\n label=\"Geometry Tangent\"\n accept=\".jpg, .png, .tga, .dds, .env, .exr\"\n onClick={(files) => {\n if (files.length > 0) {\n UpdateTexture(files[0], material, (texture) => (material.geometryTangentTexture = texture));\n }\n }}\n />\n <BoundProperty\n component={SyncedSliderPropertyLine}\n label=\"Coat Tangent Angle\"\n target={material}\n propertyKey=\"geometryCoatTangentAngle\"\n min={0}\n max={Math.PI}\n step={0.01}\n />\n <FileUploadLine\n label=\"Geometry Coat Normal\"\n accept=\".jpg, .png, .tga, .dds, .env, .exr\"\n onClick={(files) => {\n if (files.length > 0) {\n UpdateTexture(files[0], material, (texture) => (material.geometryCoatNormalTexture = texture));\n }\n }}\n />\n <FileUploadLine\n label=\"Geometry Coat Tangent\"\n accept=\".jpg, .png, .tga, .dds, .env, .exr\"\n onClick={(files) => {\n if (files.length > 0) {\n UpdateTexture(files[0], material, (texture) => (material.geometryCoatTangentTexture = texture));\n }\n }}\n />\n </>\n );\n};\n","import type { FunctionComponent } from \"react\";\r\n\r\nimport type { SkyMaterial } from \"materials/sky/skyMaterial\";\r\nimport type { ISettingsContext } from \"../../../services/settingsContext\";\r\n\r\nimport { SwitchPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/switchPropertyLine\";\r\nimport { SyncedSliderPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/syncedSliderPropertyLine\";\r\nimport { Vector3PropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/vectorPropertyLine\";\r\nimport { useAngleConverters } from \"../../../hooks/settingsHooks\";\r\nimport { BoundProperty } from \"../boundProperty\";\r\n\r\nexport const SkyMaterialProperties: FunctionComponent<{ material: SkyMaterial; settings: ISettingsContext }> = (props) => {\r\n const { material, settings } = props;\r\n const [toDisplayAngle, fromDisplayAngle, useDegrees] = useAngleConverters(settings);\r\n\r\n return (\r\n <>\r\n <BoundProperty\r\n component={SyncedSliderPropertyLine}\r\n label=\"Azimuth\"\r\n description={`Azimuth angle in ${useDegrees ? \"degrees\" : \"radians\"}`}\r\n target={material}\r\n propertyKey=\"azimuth\"\r\n min={toDisplayAngle(0)}\r\n max={toDisplayAngle(Math.PI * 2)}\r\n step={toDisplayAngle(0.001)}\r\n convertTo={toDisplayAngle}\r\n convertFrom={fromDisplayAngle}\r\n docLink=\"https://doc.babylonjs.com/toolsAndResources/assetLibraries/materialsLibrary/skyMat/#configuring-the-sky-material\"\r\n />\r\n <BoundProperty\r\n component={SyncedSliderPropertyLine}\r\n label=\"Inclination\"\r\n description={`Inclination angle in ${useDegrees ? \"degrees\" : \"radians\"}`}\r\n target={material}\r\n propertyKey=\"inclination\"\r\n min={toDisplayAngle(0)}\r\n max={toDisplayAngle(Math.PI / 2)}\r\n step={toDisplayAngle(0.001)}\r\n convertTo={toDisplayAngle}\r\n convertFrom={fromDisplayAngle}\r\n docLink=\"https://doc.babylonjs.com/toolsAndResources/assetLibraries/materialsLibrary/skyMat/#configuring-the-sky-material\"\r\n />\r\n <BoundProperty\r\n component={SyncedSliderPropertyLine}\r\n label=\"Turbidity\"\r\n description=\"Atmospheric turbidity.\"\r\n target={material}\r\n propertyKey=\"turbidity\"\r\n min={0}\r\n max={100}\r\n step={0.1}\r\n docLink=\"https://doc.babylonjs.com/toolsAndResources/assetLibraries/materialsLibrary/skyMat/#configuring-the-sky-material\"\r\n />\r\n <BoundProperty\r\n component={SyncedSliderPropertyLine}\r\n label=\"Luminance\"\r\n description=\"Brightness of the sky (0 to 1).\"\r\n target={material}\r\n propertyKey=\"luminance\"\r\n min={0}\r\n max={1}\r\n step={0.001}\r\n docLink=\"https://doc.babylonjs.com/toolsAndResources/assetLibraries/materialsLibrary/skyMat/#configuring-the-sky-material\"\r\n />\r\n <BoundProperty\r\n component={SyncedSliderPropertyLine}\r\n label=\"Rayleigh\"\r\n description=\"Rayleigh scattering coefficient (0 to 4).\"\r\n target={material}\r\n propertyKey=\"rayleigh\"\r\n min={0}\r\n max={4}\r\n step={0.001}\r\n docLink=\"https://doc.babylonjs.com/toolsAndResources/assetLibraries/materialsLibrary/skyMat/#configuring-the-sky-material\"\r\n />\r\n <BoundProperty\r\n component={SyncedSliderPropertyLine}\r\n label=\"Mie Directional G\"\r\n description=\"Mie directional scattering (0 to 1).\"\r\n target={material}\r\n propertyKey=\"mieDirectionalG\"\r\n min={0}\r\n max={1}\r\n step={0.001}\r\n docLink=\"https://doc.babylonjs.com/toolsAndResources/assetLibraries/materialsLibrary/skyMat/#configuring-the-sky-material\"\r\n />\r\n <BoundProperty\r\n component={SyncedSliderPropertyLine}\r\n label=\"Mie Coefficient\"\r\n description=\"Mie scattering coefficient (0 to 1).\"\r\n target={material}\r\n propertyKey=\"mieCoefficient\"\r\n min={0}\r\n max={1}\r\n step={0.001}\r\n docLink=\"https://doc.babylonjs.com/toolsAndResources/assetLibraries/materialsLibrary/skyMat/#configuring-the-sky-material\"\r\n />\r\n <BoundProperty\r\n component={SyncedSliderPropertyLine}\r\n label=\"Distance\"\r\n description=\"Distance to the sky dome (0 to 1000 units).\"\r\n target={material}\r\n propertyKey=\"distance\"\r\n min={0}\r\n max={1000}\r\n step={0.1}\r\n docLink=\"https://doc.babylonjs.com/toolsAndResources/assetLibraries/materialsLibrary/skyMat/#configuring-the-sky-material\"\r\n />\r\n <BoundProperty\r\n component={SwitchPropertyLine}\r\n label=\"Use Sun Pos\"\r\n description=\"Enable custom sun position.\"\r\n target={material}\r\n propertyKey=\"useSunPosition\"\r\n docLink=\"https://doc.babylonjs.com/toolsAndResources/assetLibraries/materialsLibrary/skyMat/#configuring-the-sky-material\"\r\n />\r\n <BoundProperty\r\n component={Vector3PropertyLine}\r\n label=\"Sun Position\"\r\n description=\"Custom sun position (Vector3).\"\r\n target={material}\r\n propertyKey=\"sunPosition\"\r\n docLink=\"https://doc.babylonjs.com/toolsAndResources/assetLibraries/materialsLibrary/skyMat/#configuring-the-sky-material\"\r\n />\r\n <BoundProperty\r\n component={Vector3PropertyLine}\r\n label=\"Camera Offset\"\r\n description=\"Offset for the camera (Vector3).\"\r\n target={material}\r\n propertyKey=\"cameraOffset\"\r\n docLink=\"https://doc.babylonjs.com/toolsAndResources/assetLibraries/materialsLibrary/skyMat/#keeping-the-horizon-relative-to-the-camera-elevation\"\r\n />\r\n </>\r\n );\r\n};\r\n","import type { FunctionComponent } from \"react\";\r\n\r\nimport type { StandardMaterial } from \"core/Materials/standardMaterial\";\r\n\r\nimport { Color3PropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/colorPropertyLine\";\r\nimport { SwitchPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/switchPropertyLine\";\r\nimport { SyncedSliderPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/syncedSliderPropertyLine\";\r\nimport { Collapse } from \"shared-ui-components/fluent/primitives/collapse\";\r\nimport { useProperty } from \"../../../hooks/compoundPropertyHooks\";\r\nimport { BoundProperty } from \"../boundProperty\";\r\n\r\n/**\r\n * Displays the levels properties of a standard material.\r\n * @param props - The required properties\r\n * @returns A JSX element representing the levels properties.\r\n */\r\nexport const StandardMaterialLevelsProperties: FunctionComponent<{ standardMaterial: StandardMaterial }> = (props) => {\r\n const { standardMaterial } = props;\r\n\r\n const isDetailMapEnabled = useProperty(standardMaterial.detailMap, \"isEnabled\");\r\n\r\n return (\r\n <>\r\n <BoundProperty component={SyncedSliderPropertyLine} label=\"Diffuse Level\" target={standardMaterial.diffuseTexture} propertyKey=\"level\" min={0} max={2} step={0.01} />\r\n <BoundProperty component={SyncedSliderPropertyLine} label=\"Specular Level\" target={standardMaterial.specularTexture} propertyKey=\"level\" min={0} max={2} step={0.01} />\r\n <BoundProperty\r\n component={SyncedSliderPropertyLine}\r\n label=\"Reflection Level\"\r\n target={standardMaterial.reflectionTexture}\r\n propertyKey=\"level\"\r\n min={0}\r\n max={2}\r\n step={0.01}\r\n />\r\n <BoundProperty\r\n component={SyncedSliderPropertyLine}\r\n label=\"Refraction Level\"\r\n target={standardMaterial.refractionTexture}\r\n propertyKey=\"level\"\r\n min={0}\r\n max={2}\r\n step={0.01}\r\n />\r\n <BoundProperty component={SyncedSliderPropertyLine} label=\"Emissive Level\" target={standardMaterial.emissiveTexture} propertyKey=\"level\" min={0} max={2} step={0.01} />\r\n <BoundProperty component={SyncedSliderPropertyLine} label=\"Bump Level\" target={standardMaterial.bumpTexture} propertyKey=\"level\" min={0} max={2} step={0.01} />\r\n <BoundProperty component={SyncedSliderPropertyLine} label=\"Opacity Level\" target={standardMaterial.opacityTexture} propertyKey=\"level\" min={0} max={2} step={0.01} />\r\n <BoundProperty component={SyncedSliderPropertyLine} label=\"Ambient Level\" target={standardMaterial.ambientTexture} propertyKey=\"level\" min={0} max={2} step={0.01} />\r\n <BoundProperty component={SyncedSliderPropertyLine} label=\"Lightmap Level\" target={standardMaterial.lightmapTexture} propertyKey=\"level\" min={0} max={2} step={0.01} />\r\n <Collapse visible={isDetailMapEnabled}>\r\n <BoundProperty\r\n component={SyncedSliderPropertyLine}\r\n label=\"Detailmap Diffuse\"\r\n target={standardMaterial.detailMap}\r\n propertyKey=\"diffuseBlendLevel\"\r\n min={0}\r\n max={1}\r\n step={0.01}\r\n />\r\n <BoundProperty\r\n component={SyncedSliderPropertyLine}\r\n label=\"Detailmap Bump\"\r\n target={standardMaterial.detailMap}\r\n propertyKey=\"bumpLevel\"\r\n min={0}\r\n max={1}\r\n step={0.01}\r\n />\r\n </Collapse>\r\n </>\r\n );\r\n};\r\n\r\n/**\r\n * Displays the lighting and color properties of a standard material.\r\n * @param props - The required properties\r\n * @returns A JSX element representing the lighting and color properties.\r\n */\r\nexport const StandardMaterialLightingAndColorProperties: FunctionComponent<{ standardMaterial: StandardMaterial }> = (props) => {\r\n const { standardMaterial } = props;\r\n\r\n return (\r\n <>\r\n <BoundProperty component={Color3PropertyLine} label=\"Diffuse Color\" target={standardMaterial} propertyKey=\"diffuseColor\" />\r\n <BoundProperty component={Color3PropertyLine} label=\"Specular Color\" target={standardMaterial} propertyKey=\"specularColor\" />\r\n <BoundProperty component={SyncedSliderPropertyLine} label=\"Specular Power\" target={standardMaterial} propertyKey=\"specularPower\" min={0} max={128} step={0.1} />\r\n <BoundProperty component={Color3PropertyLine} label=\"Emissive Color\" target={standardMaterial} propertyKey=\"emissiveColor\" />\r\n <BoundProperty component={Color3PropertyLine} label=\"Ambient Color\" target={standardMaterial} propertyKey=\"ambientColor\" />\r\n <BoundProperty component={SwitchPropertyLine} label=\"Use Specular Over Alpha\" target={standardMaterial} propertyKey=\"useSpecularOverAlpha\" />\r\n </>\r\n );\r\n};\r\n\r\n/**\r\n * Displays the texture properties of a standard material.\r\n * @param props - The required properties\r\n * @returns A JSX element representing the texture properties.\r\n */\r\nexport const StandardMaterialTexturesProperties: FunctionComponent<{ standardMaterial: StandardMaterial }> = (props) => {\r\n const { standardMaterial } = props;\r\n\r\n // TODO: Add buttons and links for adding the textures themselves\r\n return (\r\n <>\r\n <BoundProperty component={SwitchPropertyLine} label=\"Use Lightmap as Shadowmap\" target={standardMaterial} propertyKey=\"useLightmapAsShadowmap\" />\r\n <BoundProperty component={SwitchPropertyLine} label=\"Use Detailmap\" target={standardMaterial.detailMap} propertyKey=\"isEnabled\" />\r\n <BoundProperty component={SwitchPropertyLine} label=\"Use Decalmap\" target={standardMaterial.decalMap} propertyKey=\"isEnabled\" />\r\n </>\r\n );\r\n};\r\n","import type { MaterialWithNormalMaps } from \"../../../components/properties/materials/normalMapProperties\";\r\nimport type { ServiceDefinition } from \"../../../modularity/serviceDefinition\";\r\nimport type { ISettingsContext } from \"../../../services/settingsContext\";\r\nimport type { ISelectionService } from \"../../selectionService\";\r\nimport type { IPropertiesService } from \"./propertiesService\";\r\n\r\nimport { Material } from \"core/Materials/material\";\r\nimport { MultiMaterial } from \"core/Materials/multiMaterial\";\r\nimport { PBRBaseMaterial } from \"core/Materials/PBR/pbrBaseMaterial\";\r\nimport { PBRBaseSimpleMaterial } from \"core/Materials/PBR/pbrBaseSimpleMaterial\";\r\nimport { PBRMaterial } from \"core/Materials/PBR/pbrMaterial\";\r\nimport { OpenPBRMaterial } from \"core/Materials/PBR/openpbrMaterial\";\r\nimport { StandardMaterial } from \"core/Materials/standardMaterial\";\r\nimport { SkyMaterial } from \"materials/sky/skyMaterial\";\r\nimport { MaterialGeneralProperties, MaterialStencilProperties, MaterialTransparencyProperties } from \"../../../components/properties/materials/materialProperties\";\r\nimport { MultiMaterialChildrenProperties } from \"../../../components/properties/materials/multiMaterialProperties\";\r\nimport { NormalMapProperties } from \"../../../components/properties/materials/normalMapProperties\";\r\nimport {\r\n PBRBaseMaterialAnisotropicProperties,\r\n PBRBaseMaterialClearCoatProperties,\r\n PBRBaseMaterialIridescenceProperties,\r\n PBRBaseMaterialSheenProperties,\r\n} from \"../../../components/properties/materials/pbrBaseMaterialProperties\";\r\nimport { PBRMaterialLightingAndColorProperties } from \"../../../components/properties/materials/pbrMaterialProperties\";\r\nimport {\r\n OpenPBRMaterialBaseProperties,\r\n OpenPBRMaterialCoatProperties,\r\n OpenPBRMaterialEmissionProperties,\r\n OpenPBRMaterialFuzzProperties,\r\n OpenPBRMaterialGeometryProperties,\r\n OpenPBRMaterialSpecularProperties,\r\n OpenPBRMaterialThinFilmProperties,\r\n} from \"../../../components/properties/materials/openpbrMaterialProperties\";\r\nimport { SkyMaterialProperties } from \"../../../components/properties/materials/skyMaterialProperties\";\r\nimport {\r\n StandardMaterialLevelsProperties,\r\n StandardMaterialLightingAndColorProperties,\r\n StandardMaterialTexturesProperties,\r\n} from \"../../../components/properties/materials/standardMaterialProperties\";\r\nimport { SelectionServiceIdentity } from \"../../selectionService\";\r\nimport { SettingsContextIdentity } from \"../../settingsContext\";\r\nimport { PropertiesServiceIdentity } from \"./propertiesService\";\r\n\r\nexport const MaterialPropertiesServiceDefinition: ServiceDefinition<[], [IPropertiesService, ISelectionService, ISettingsContext]> = {\r\n friendlyName: \"Material Properties\",\r\n consumes: [PropertiesServiceIdentity, SelectionServiceIdentity, SettingsContextIdentity],\r\n factory: (propertiesService, selectionService, settingsContext) => {\r\n const materialContentRegistration = propertiesService.addSectionContent({\r\n key: \"Material Properties\",\r\n predicate: (entity: unknown) => entity instanceof Material,\r\n content: [\r\n {\r\n section: \"General\",\r\n component: ({ context }) => <MaterialGeneralProperties material={context} />,\r\n },\r\n {\r\n section: \"Transparency\",\r\n component: ({ context }) => <MaterialTransparencyProperties material={context} />,\r\n },\r\n {\r\n section: \"Stencil\",\r\n component: ({ context }) => <MaterialStencilProperties material={context} />,\r\n },\r\n ],\r\n });\r\n\r\n const standardMaterialContentRegistration = propertiesService.addSectionContent({\r\n key: \"Standard Material Properties\",\r\n predicate: (entity: unknown) => entity instanceof StandardMaterial,\r\n content: [\r\n {\r\n section: \"Textures\",\r\n component: ({ context }) => <StandardMaterialTexturesProperties standardMaterial={context} />,\r\n },\r\n {\r\n section: \"Lighting & Colors\",\r\n component: ({ context }) => <StandardMaterialLightingAndColorProperties standardMaterial={context} />,\r\n },\r\n {\r\n section: \"Levels\",\r\n component: ({ context }) => <StandardMaterialLevelsProperties standardMaterial={context} />,\r\n },\r\n {\r\n section: \"Normal Map\",\r\n component: ({ context }) => <NormalMapProperties material={context} />,\r\n },\r\n ],\r\n });\r\n\r\n const pbrBaseMaterialPropertiesRegistration = propertiesService.addSectionContent({\r\n key: \"PBR Base Material Properties\",\r\n predicate: (entity: unknown) => entity instanceof PBRBaseMaterial,\r\n content: [\r\n {\r\n section: \"Clear Coat\",\r\n component: ({ context }) => <PBRBaseMaterialClearCoatProperties material={context} />,\r\n },\r\n {\r\n section: \"Iridescence\",\r\n component: ({ context }) => <PBRBaseMaterialIridescenceProperties material={context} />,\r\n },\r\n {\r\n section: \"Anisotropic\",\r\n component: ({ context }) => <PBRBaseMaterialAnisotropicProperties material={context} />,\r\n },\r\n {\r\n section: \"Sheen\",\r\n component: ({ context }) => <PBRBaseMaterialSheenProperties material={context} />,\r\n },\r\n ],\r\n });\r\n\r\n const pbrMaterialPropertiesRegistration = propertiesService.addSectionContent({\r\n key: \"PBR Material Properties\",\r\n predicate: (entity: unknown) => entity instanceof PBRMaterial,\r\n content: [\r\n {\r\n section: \"Lighting & Colors\",\r\n component: ({ context }) => <PBRMaterialLightingAndColorProperties material={context} />,\r\n },\r\n ],\r\n });\r\n\r\n const pbrMaterialNormalMapsContentRegistration = propertiesService.addSectionContent({\r\n key: \"PBR Material Normal Map Properties\",\r\n predicate: (entity: unknown): entity is MaterialWithNormalMaps => entity instanceof PBRMaterial || entity instanceof PBRBaseSimpleMaterial,\r\n content: [\r\n {\r\n section: \"Normal Map\",\r\n component: ({ context }) => <NormalMapProperties material={context} />,\r\n },\r\n ],\r\n });\r\n\r\n const openPBRMaterialPropertiesRegistration = propertiesService.addSectionContent({\r\n key: \"OpenPBR Material Properties\",\r\n predicate: (entity: unknown) => entity instanceof OpenPBRMaterial,\r\n content: [\r\n {\r\n section: \"Base\",\r\n component: ({ context }) => <OpenPBRMaterialBaseProperties material={context} />,\r\n },\r\n {\r\n section: \"Specular\",\r\n component: ({ context }) => <OpenPBRMaterialSpecularProperties material={context} />,\r\n },\r\n {\r\n section: \"Coat\",\r\n component: ({ context }) => <OpenPBRMaterialCoatProperties material={context} />,\r\n },\r\n {\r\n section: \"Fuzz\",\r\n component: ({ context }) => <OpenPBRMaterialFuzzProperties material={context} />,\r\n },\r\n {\r\n section: \"Emission\",\r\n component: ({ context }) => <OpenPBRMaterialEmissionProperties material={context} />,\r\n },\r\n {\r\n section: \"Thin Film\",\r\n component: ({ context }) => <OpenPBRMaterialThinFilmProperties material={context} />,\r\n },\r\n {\r\n section: \"Geometry\",\r\n component: ({ context }) => <OpenPBRMaterialGeometryProperties material={context} />,\r\n },\r\n ],\r\n });\r\n\r\n const skyMaterialRegistration = propertiesService.addSectionContent({\r\n key: \"Sky Material Properties\",\r\n predicate: (entity: unknown) => entity instanceof SkyMaterial,\r\n content: [\r\n {\r\n section: \"Sky\",\r\n component: ({ context }) => <SkyMaterialProperties material={context} settings={settingsContext} />,\r\n },\r\n ],\r\n });\r\n\r\n const multiMaterialContentRegistration = propertiesService.addSectionContent({\r\n key: \"Multi Material Properties\",\r\n predicate: (entity: unknown) => entity instanceof MultiMaterial,\r\n content: [\r\n {\r\n section: \"Children\",\r\n component: ({ context }) => <MultiMaterialChildrenProperties multiMaterial={context} selectionService={selectionService} />,\r\n },\r\n ],\r\n });\r\n\r\n return {\r\n dispose: () => {\r\n materialContentRegistration.dispose();\r\n standardMaterialContentRegistration.dispose();\r\n pbrBaseMaterialPropertiesRegistration.dispose();\r\n pbrMaterialPropertiesRegistration.dispose();\r\n pbrMaterialNormalMapsContentRegistration.dispose();\r\n openPBRMaterialPropertiesRegistration.dispose();\r\n skyMaterialRegistration.dispose();\r\n multiMaterialContentRegistration.dispose();\r\n },\r\n };\r\n },\r\n};\r\n","import type { TextareaOnChangeData } from \"@fluentui/react-components\";\r\nimport { Textarea as FluentTextarea, makeStyles } from \"@fluentui/react-components\";\r\nimport type { FunctionComponent, KeyboardEvent, ChangeEvent } from \"react\";\r\nimport type { PrimitiveProps } from \"./primitive\";\r\n\r\nconst useInputStyles = makeStyles({\r\n textarea: {\r\n minHeight: \"100px\",\r\n maxHeight: \"500px\",\r\n },\r\n});\r\n\r\nexport type TextareaProps = PrimitiveProps<string> & {\r\n placeholder?: string;\r\n};\r\n\r\n/**\r\n * This is a texarea box that stops propagation of change/keydown events\r\n * @param props\r\n * @returns\r\n */\r\nexport const Textarea: FunctionComponent<TextareaProps> = (props) => {\r\n Textarea.displayName = \"Textarea\";\r\n\r\n const classes = useInputStyles();\r\n const handleChange = (event: ChangeEvent<HTMLTextAreaElement>, _data: TextareaOnChangeData) => {\r\n event.stopPropagation(); // Prevent event propagation\r\n if (props.onChange) {\r\n props.onChange(event.target.value); // Call the original onChange handler passed as prop\r\n }\r\n };\r\n\r\n const handleKeyDown = (event: KeyboardEvent<HTMLTextAreaElement>) => {\r\n event.stopPropagation(); // Prevent event propagation\r\n };\r\n\r\n return <FluentTextarea {...props} textarea={{ className: classes.textarea }} onChange={handleChange} onKeyDown={handleKeyDown} />;\r\n};\r\n","import type { FunctionComponent } from \"react\";\r\n\r\nimport { Body1, Button, makeStyles, tokens, Tooltip } from \"@fluentui/react-components\";\r\nimport { ArrowUndoRegular, BracesDismiss16Regular, BracesRegular, SaveRegular } from \"@fluentui/react-icons\";\r\nimport { useContext, useMemo, useState } from \"react\";\r\n\r\nimport { ButtonLine } from \"shared-ui-components/fluent/hoc/buttonLine\";\r\nimport { ToolContext } from \"shared-ui-components/fluent/hoc/fluentToolWrapper\";\r\nimport { LineContainer } from \"shared-ui-components/fluent/hoc/propertyLines/propertyLine\";\r\nimport { SwitchPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/switchPropertyLine\";\r\nimport { TextPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/textPropertyLine\";\r\nimport { Collapse } from \"shared-ui-components/fluent/primitives/collapse\";\r\nimport { Textarea } from \"shared-ui-components/fluent/primitives/textarea\";\r\nimport { useProperty } from \"../../hooks/compoundPropertyHooks\";\r\n\r\ntype MetadataTypes = \"null\" | \"string\" | \"object\" | \"JSON\";\r\n\r\nconst PrettyJSONIndent = 2;\r\n\r\nfunction IsParsable(metadata: unknown): metadata is string {\r\n try {\r\n const parsed = JSON.parse(metadata as string);\r\n return !!parsed && !IsString(parsed);\r\n } catch {\r\n return false;\r\n }\r\n}\r\n\r\n/**\r\n * Checks if the input is a string.\r\n * @param input - any input to check\r\n * @returns boolean - true if the input is a string, false otherwise\r\n */\r\nfunction IsString(input: unknown): input is string {\r\n return typeof input === \"string\" || input instanceof String;\r\n}\r\n\r\n/**\r\n * Checks recursively for functions on an object and returns `false` if any are found.\r\n * @param o any object, string or number\r\n * @returns boolean\r\n */\r\nfunction ObjectCanSafelyStringify(o: unknown): boolean {\r\n if (typeof o === \"function\") {\r\n return false;\r\n }\r\n if (o === null || o === true || o === false || typeof o === \"number\" || IsString(o)) {\r\n return true;\r\n }\r\n\r\n if (typeof o === \"object\") {\r\n if (Object.values(o).length === 0) {\r\n return true;\r\n }\r\n return Object.values(o as Record<string, unknown>).every((value) => ObjectCanSafelyStringify(value));\r\n }\r\n\r\n if (Array.isArray(o)) {\r\n return o.every((value) => ObjectCanSafelyStringify(value));\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction GetMetadataEntityType(metadata: unknown): MetadataTypes {\r\n if (metadata == null) {\r\n return \"null\";\r\n } else if (IsString(metadata)) {\r\n return \"string\";\r\n } else if (!ObjectCanSafelyStringify(metadata)) {\r\n return \"object\";\r\n } else {\r\n return \"JSON\";\r\n }\r\n}\r\n\r\nfunction HasGltfExtras(metadata: string) {\r\n return IsParsable(metadata) && !!JSON.parse(metadata).gltf;\r\n}\r\n\r\nfunction StringifyMetadata(metadata: unknown, format: boolean) {\r\n if (IsString(metadata)) {\r\n return metadata;\r\n }\r\n\r\n if (metadata) {\r\n if (ObjectCanSafelyStringify(metadata)) {\r\n return JSON.stringify(metadata, undefined, format ? PrettyJSONIndent : undefined);\r\n } else {\r\n return String(metadata);\r\n }\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction Restringify(value: string, format: boolean) {\r\n return IsParsable(value) ? JSON.stringify(JSON.parse(value), undefined, format ? PrettyJSONIndent : undefined) : value;\r\n}\r\n\r\nfunction PopulateGLTFExtras(metadata: string) {\r\n if (!metadata) {\r\n metadata = \"{}\";\r\n }\r\n\r\n if (!IsParsable(metadata)) {\r\n return metadata;\r\n }\r\n\r\n try {\r\n const parsedJson = JSON.parse(metadata);\r\n if (parsedJson) {\r\n if (Reflect.has(parsedJson, \"gltf\")) {\r\n if (!Reflect.has(parsedJson.gltf, \"extras\")) {\r\n parsedJson.gltf.extras = {};\r\n }\r\n } else {\r\n parsedJson.gltf = { extras: {} };\r\n }\r\n }\r\n\r\n return JSON.stringify(parsedJson);\r\n } catch {\r\n return metadata;\r\n }\r\n}\r\n\r\nfunction SaveMetadata(entity: IMetadataContainer, metadata: string) {\r\n if (IsParsable(metadata)) {\r\n entity.metadata = JSON.parse(metadata);\r\n } else {\r\n entity.metadata = metadata;\r\n }\r\n}\r\n\r\nexport interface IMetadataContainer {\r\n metadata: unknown;\r\n}\r\n\r\nconst useStyles = makeStyles({\r\n mainDiv: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n gap: tokens.spacingVerticalXS,\r\n },\r\n buttonDiv: {\r\n display: \"grid\",\r\n gridAutoFlow: \"column\",\r\n gridTemplateColumns: \"1fr auto auto auto\",\r\n gap: tokens.spacingHorizontalXS,\r\n },\r\n});\r\n\r\n/**\r\n * Component to display metadata properties of an entity.\r\n * @param props - The properties for the component.\r\n * @returns A React component that displays metadata properties.\r\n */\r\nexport const MetadataProperties: FunctionComponent<{ entity: IMetadataContainer }> = (props) => {\r\n const { entity } = props;\r\n\r\n const classes = useStyles();\r\n\r\n const { size } = useContext(ToolContext);\r\n\r\n const metadata = useProperty(entity, \"metadata\");\r\n const stringifiedMetadata = useMemo(() => StringifyMetadata(metadata, false) ?? \"\", [metadata]);\r\n const metadataType = useMemo(() => GetMetadataEntityType(metadata), [metadata]);\r\n const canPreventObjectCorruption = metadataType === \"object\";\r\n\r\n const [preventObjectCorruption, setPreventObjectCorruption] = useState(false);\r\n const isReadonly = canPreventObjectCorruption && preventObjectCorruption;\r\n\r\n const [editedMetadata, setEditedMetadata] = useState(stringifiedMetadata);\r\n const isEditedMetadataJSON = useMemo(() => IsParsable(editedMetadata), [editedMetadata]);\r\n const unformattedEditedMetadata = useMemo(() => Restringify(editedMetadata, false), [editedMetadata]);\r\n\r\n return (\r\n <>\r\n <TextPropertyLine label=\"Property Type\" value={metadataType} />\r\n <Collapse visible={canPreventObjectCorruption}>\r\n <SwitchPropertyLine label=\"Prevent Object Corruption\" value={isReadonly} onChange={setPreventObjectCorruption} />\r\n </Collapse>\r\n <LineContainer>\r\n <Textarea disabled={isReadonly} value={editedMetadata} onChange={setEditedMetadata} />\r\n </LineContainer>\r\n <ButtonLine\r\n label=\"Populate glTF extras\"\r\n disabled={!!editedMetadata && (!IsParsable(editedMetadata) || HasGltfExtras(editedMetadata))}\r\n onClick={() => {\r\n const isFormatted = Restringify(editedMetadata, true) === editedMetadata;\r\n let withGLTFExtras = PopulateGLTFExtras(editedMetadata);\r\n if (isFormatted) {\r\n withGLTFExtras = Restringify(withGLTFExtras, true);\r\n }\r\n setEditedMetadata(withGLTFExtras);\r\n }}\r\n />\r\n <LineContainer>\r\n <div className={classes.buttonDiv}>\r\n {/* TODO: gehalper - need to update our Button primitive to accommodate these scenarios. */}\r\n <Button size={size} icon={<SaveRegular />} disabled={stringifiedMetadata === unformattedEditedMetadata} onClick={() => SaveMetadata(entity, editedMetadata)}>\r\n <Body1>Save</Body1>\r\n </Button>\r\n <Tooltip content=\"Undo Changes\" relationship=\"label\">\r\n <Button\r\n size={size}\r\n icon={<ArrowUndoRegular />}\r\n disabled={stringifiedMetadata === unformattedEditedMetadata}\r\n onClick={() => setEditedMetadata(stringifiedMetadata)}\r\n />\r\n </Tooltip>\r\n <Tooltip content=\"Format (Pretty Print)\" relationship=\"label\">\r\n <Button size={size} icon={<BracesRegular />} disabled={!isEditedMetadataJSON} onClick={() => setEditedMetadata(Restringify(editedMetadata, true))}></Button>\r\n </Tooltip>\r\n <Tooltip content=\"Clear Formatting (Undo Pretty Print)\" relationship=\"label\">\r\n <Button\r\n size={size}\r\n icon={<BracesDismiss16Regular />}\r\n disabled={!isEditedMetadataJSON}\r\n onClick={() => setEditedMetadata(Restringify(editedMetadata, false))}\r\n />\r\n </Tooltip>\r\n </div>\r\n </LineContainer>\r\n </>\r\n );\r\n};\r\n","import type { IMetadataContainer } from \"../../../components/properties/metadataProperties\";\r\nimport type { ServiceDefinition } from \"../../../modularity/serviceDefinition\";\r\nimport type { IPropertiesService } from \"./propertiesService\";\r\n\r\nimport { MetadataProperties } from \"../../../components/properties/metadataProperties\";\r\nimport { PropertiesServiceIdentity } from \"./propertiesService\";\r\n\r\nfunction IsMetadataContainer(entity: unknown): entity is IMetadataContainer {\r\n return (entity as IMetadataContainer).metadata !== undefined;\r\n}\r\n\r\nexport const MetadataPropertiesServiceDefinition: ServiceDefinition<[], [IPropertiesService]> = {\r\n friendlyName: \"Metadata Properties\",\r\n consumes: [PropertiesServiceIdentity],\r\n factory: (propertiesService) => {\r\n const contentRegistration = propertiesService.addSectionContent({\r\n key: \"Metadata Properties\",\r\n // TransformNode and Bone don't share a common base class, but both have the same transform related properties.\r\n predicate: (entity: unknown) => IsMetadataContainer(entity),\r\n content: [\r\n {\r\n section: \"Metadata\",\r\n component: ({ context }) => <MetadataProperties entity={context} />,\r\n },\r\n ],\r\n });\r\n\r\n return {\r\n dispose: () => {\r\n contentRegistration.dispose();\r\n },\r\n };\r\n },\r\n};\r\n","import type { FunctionComponent } from \"react\";\r\n\r\nimport type { AbstractMesh, ShaderMaterial } from \"core/index\";\r\nimport type { DropdownOption } from \"shared-ui-components/fluent/primitives/dropdown\";\r\nimport type { ISelectionService } from \"../../../services/selectionService\";\r\n\r\nimport { useState } from \"react\";\r\n\r\nimport { SkeletonViewer } from \"core/Debug/skeletonViewer\";\r\nimport { FrameGraphUtils } from \"core/FrameGraph/frameGraphUtils\";\r\nimport { StandardMaterial } from \"core/Materials/standardMaterial\";\r\nimport { Color3 } from \"core/Maths/math.color\";\r\nimport { TmpVectors, Vector3 } from \"core/Maths/math.vector\";\r\nimport { VertexBuffer } from \"core/Meshes/buffer\";\r\nimport { CreateLineSystem } from \"core/Meshes/Builders/linesBuilder\";\r\nimport { InstancedMesh } from \"core/Meshes/instancedMesh\";\r\nimport { Tools } from \"core/Misc/tools\";\r\nimport { RenderingManager } from \"core/Rendering/renderingManager\";\r\nimport { Collapse } from \"shared-ui-components/fluent/primitives/collapse\";\r\nimport { BooleanBadgePropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/booleanBadgePropertyLine\";\r\nimport { Color3PropertyLine, Color4PropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/colorPropertyLine\";\r\nimport { NumberDropdownPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/dropdownPropertyLine\";\r\nimport { NumberInputPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/inputPropertyLine\";\r\nimport { StringifiedPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/stringifiedPropertyLine\";\r\nimport { SwitchPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/switchPropertyLine\";\r\nimport { SyncedSliderPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/syncedSliderPropertyLine\";\r\nimport { TextPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/textPropertyLine\";\r\nimport { useProperty } from \"../../../hooks/compoundPropertyHooks\";\r\nimport { useObservableState } from \"../../../hooks/observableHooks\";\r\nimport { BoundProperty } from \"../boundProperty\";\r\n\r\n// Ensures that the outlineRenderer and edgesRenderer properties exist on the prototype of the Mesh\r\nimport \"core/Rendering/edgesRenderer\";\r\nimport \"core/Rendering/outlineRenderer\";\r\nimport { LinkToEntityPropertyLine } from \"../linkToEntityPropertyLine\";\r\nimport { HexPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/hexPropertyLine\";\r\n\r\nexport const AbstractMeshGeneralProperties: FunctionComponent<{ mesh: AbstractMesh; selectionService: ISelectionService }> = (props) => {\r\n const { mesh, selectionService } = props;\r\n\r\n // Use the observable to keep keep state up-to-date and re-render the component when it changes.\r\n const material = useObservableState(() => mesh.material, mesh.onMaterialChangedObservable);\r\n const skeleton = useProperty(mesh, \"skeleton\");\r\n const isAnInstance = useProperty(mesh, \"isAnInstance\");\r\n // TODO: Handle case where array is mutated\r\n const subMeshes = useProperty(mesh, \"subMeshes\");\r\n\r\n return (\r\n <>\r\n <StringifiedPropertyLine label=\"Vertices\" value={mesh.getTotalVertices()} />\r\n <StringifiedPropertyLine label=\"Faces\" value={mesh.getTotalIndices() / 3} />\r\n <StringifiedPropertyLine label=\"Sub-Meshes\" value={subMeshes.length} />\r\n <LinkToEntityPropertyLine label=\"Skeleton\" description=\"The skeleton associated with the mesh.\" entity={skeleton} selectionService={selectionService} />\r\n <LinkToEntityPropertyLine label=\"Material\" description=\"The material used by the mesh.\" entity={material} selectionService={selectionService} />\r\n <BoundProperty component={SwitchPropertyLine} label=\"Is Pickable\" target={mesh} propertyKey={\"isPickable\"} />\r\n {isAnInstance && mesh instanceof InstancedMesh && (\r\n <LinkToEntityPropertyLine\r\n label=\"Source\"\r\n description=\"The source mesh from which this instance was created.\"\r\n entity={mesh.sourceMesh}\r\n selectionService={selectionService}\r\n />\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nexport const AbstractMeshDisplayProperties: FunctionComponent<{ mesh: AbstractMesh }> = (props) => {\r\n const { mesh } = props;\r\n\r\n return (\r\n <>\r\n <BoundProperty component={NumberInputPropertyLine} label=\"Alpha Index\" target={mesh} propertyKey=\"alphaIndex\" />\r\n <BoundProperty component={SwitchPropertyLine} label=\"Receive Shadows\" target={mesh} propertyKey=\"receiveShadows\" />\r\n <BoundProperty\r\n component={SyncedSliderPropertyLine}\r\n label=\"Rendering Group Id\"\r\n target={mesh}\r\n propertyKey=\"renderingGroupId\"\r\n min={RenderingManager.MIN_RENDERINGGROUPS}\r\n max={RenderingManager.MAX_RENDERINGGROUPS - 1}\r\n step={1}\r\n />\r\n <BoundProperty component={HexPropertyLine} label=\"Layer Mask\" target={mesh} propertyKey=\"layerMask\" />\r\n </>\r\n );\r\n};\r\n\r\nexport const AbstractMeshAdvancedProperties: FunctionComponent<{ mesh: AbstractMesh }> = (props) => {\r\n const { mesh } = props;\r\n\r\n return (\r\n <>\r\n {mesh.useBones && (\r\n <BoundProperty\r\n component={SwitchPropertyLine}\r\n label=\"Compute Bones Using Shaders\"\r\n description=\"Whether to compute bones using shaders.\"\r\n target={mesh}\r\n propertyKey={\"computeBonesUsingShaders\"}\r\n />\r\n )}\r\n <BoundProperty component={SwitchPropertyLine} label=\"Check Collisions\" description=\"Whether to check for collisions.\" target={mesh} propertyKey={\"checkCollisions\"} />\r\n <TextPropertyLine label=\"Geometry ID\" value={mesh.geometry?.uniqueId.toString() ?? \"N/A\"} />\r\n <BooleanBadgePropertyLine label=\"Has Normals\" value={mesh.isVerticesDataPresent(VertexBuffer.NormalKind)} />\r\n <BooleanBadgePropertyLine label=\"Has Vertex Colors\" value={mesh.isVerticesDataPresent(VertexBuffer.ColorKind)} />\r\n <BooleanBadgePropertyLine label=\"Has UV Set 0\" value={mesh.isVerticesDataPresent(VertexBuffer.UVKind)} />\r\n <BooleanBadgePropertyLine label=\"Has UV Set 1\" value={mesh.isVerticesDataPresent(VertexBuffer.UV2Kind)} />\r\n <BooleanBadgePropertyLine label=\"Has UV Set 2\" value={mesh.isVerticesDataPresent(VertexBuffer.UV3Kind)} />\r\n <BooleanBadgePropertyLine label=\"Has UV Set 3\" value={mesh.isVerticesDataPresent(VertexBuffer.UV4Kind)} />\r\n <BooleanBadgePropertyLine label=\"Has Tangents\" value={mesh.isVerticesDataPresent(VertexBuffer.TangentKind)} />\r\n <BooleanBadgePropertyLine label=\"Has Matrix Weights\" value={mesh.isVerticesDataPresent(VertexBuffer.MatricesWeightsKind)} />\r\n <BooleanBadgePropertyLine label=\"Has Matrix Indices\" value={mesh.isVerticesDataPresent(VertexBuffer.MatricesIndicesKind)} />\r\n </>\r\n );\r\n};\r\n\r\nexport const AbstractMeshOutlineOverlayProperties: FunctionComponent<{ mesh: AbstractMesh }> = (props) => {\r\n const { mesh } = props;\r\n\r\n const renderOverlay = useProperty(mesh, \"renderOverlay\");\r\n const renderOutline = useProperty(mesh, \"renderOutline\");\r\n\r\n return (\r\n <>\r\n <BoundProperty component={SwitchPropertyLine} label=\"Render Overlay\" target={mesh} propertyKey=\"renderOverlay\" />\r\n <Collapse visible={renderOverlay}>\r\n <BoundProperty label=\"Overlay Color\" component={Color3PropertyLine} target={mesh} propertyKey=\"overlayColor\" />\r\n </Collapse>\r\n <BoundProperty component={SwitchPropertyLine} label=\"Render Outline\" target={mesh} propertyKey=\"renderOutline\" />\r\n <Collapse visible={renderOutline}>\r\n <BoundProperty label=\"Outline Color\" component={Color3PropertyLine} target={mesh} propertyKey=\"outlineColor\" />\r\n <BoundProperty label=\"Outline Width\" component={NumberInputPropertyLine} target={mesh} propertyKey=\"outlineWidth\" step={0.001} />\r\n </Collapse>\r\n </>\r\n );\r\n};\r\n\r\nconst OcclusionTypes = [\r\n { label: \"None\", value: 0 },\r\n { label: \"Optimistic\", value: 1 },\r\n { label: \"Strict\", value: 2 },\r\n] as const satisfies readonly DropdownOption<number>[];\r\n\r\nconst OcclusionQueryAlgorithmTypes = [\r\n { label: \"Conservative\", value: 0 },\r\n { label: \"Accurate\", value: 1 },\r\n] as const satisfies readonly DropdownOption<number>[];\r\n\r\nexport const AbstractMeshOcclusionsProperties: FunctionComponent<{ mesh: AbstractMesh }> = ({ mesh }) => {\r\n const occlusionType = useProperty(mesh, \"occlusionType\");\r\n\r\n return (\r\n <>\r\n <BoundProperty\r\n component={NumberDropdownPropertyLine}\r\n label=\"Type\"\r\n description=\"Occlusion type for the mesh.\"\r\n target={mesh}\r\n propertyKey=\"occlusionType\"\r\n options={OcclusionTypes}\r\n />\r\n <Collapse visible={occlusionType !== 0}>\r\n <>\r\n <BoundProperty\r\n component={NumberInputPropertyLine}\r\n label=\"Occlusion Retry Count\"\r\n description=\"Number of retries for occlusion (-1 disables retries).\"\r\n target={mesh}\r\n propertyKey=\"occlusionRetryCount\"\r\n min={-1}\r\n max={10}\r\n step={1}\r\n />\r\n <BoundProperty\r\n component={NumberDropdownPropertyLine}\r\n label=\"Algorithm\"\r\n description=\"Occlusion query algorithm type.\"\r\n target={mesh}\r\n propertyKey=\"occlusionQueryAlgorithmType\"\r\n options={OcclusionQueryAlgorithmTypes}\r\n />\r\n </>\r\n </Collapse>\r\n </>\r\n );\r\n};\r\n\r\nexport const AbstractMeshEdgeRenderingProperties: FunctionComponent<{ mesh: AbstractMesh }> = ({ mesh }) => {\r\n const edgesRenderer = useProperty(mesh, \"_edgesRenderer\");\r\n\r\n return (\r\n <>\r\n <SwitchPropertyLine\r\n label=\"Enable\"\r\n value={!!edgesRenderer}\r\n onChange={(isEnabled: boolean) => {\r\n if (isEnabled) {\r\n mesh.enableEdgesRendering();\r\n } else {\r\n mesh.disableEdgesRendering();\r\n }\r\n }}\r\n />\r\n <Collapse visible={!!edgesRenderer}>\r\n <>\r\n <BoundProperty\r\n component={SyncedSliderPropertyLine}\r\n label=\"Edges Width\"\r\n description=\"Width of the rendered edges (0 to 10).\"\r\n target={mesh}\r\n propertyKey=\"edgesWidth\"\r\n min={0}\r\n max={10}\r\n step={0.1}\r\n />\r\n <BoundProperty component={Color4PropertyLine} label=\"Edge Color\" target={mesh} propertyKey=\"edgesColor\" />\r\n </>\r\n </Collapse>\r\n </>\r\n );\r\n};\r\n\r\nexport const AbstractMeshDebugProperties: FunctionComponent<{ mesh: AbstractMesh }> = (props) => {\r\n const { mesh } = props;\r\n\r\n const skeleton = useProperty(mesh, \"skeleton\");\r\n\r\n const [displayNormals, setDisplayNormals] = useState(mesh.material?.getClassName() === \"NormalMaterial\");\r\n const [displayVertexColors, setDisplayVertexColors] = useState(mesh.material?.reservedDataStore?.isVertexColorMaterial ? true : false);\r\n const [renderNormalVectors] = useState(mesh.reservedDataStore?.normalLines ? true : false);\r\n const [renderWireframeOver] = useState(mesh.reservedDataStore?.wireframeOver ? true : false);\r\n const [displayBoneWeights, setDisplayBoneWeights] = useState(mesh.material?.getClassName() === \"BoneWeightShader\");\r\n const [displaySkeletonMap, setDisplaySkeletonMap] = useState(mesh.material?.getClassName() === \"SkeletonMapShader\");\r\n const [displayBoneIndex, setDisplayBoneIndex] = useState(mesh.reservedDataStore?.displayBoneIndex ?? 0);\r\n\r\n const [targetBoneOptions] = useState<DropdownOption<number>[]>(\r\n mesh.skeleton\r\n ? mesh.skeleton.bones\r\n .filter((bone) => bone.getIndex() >= 0)\r\n .sort((bone1, bone2) => bone1.getIndex() - bone2.getIndex())\r\n .map((bone) => {\r\n return {\r\n label: bone.name,\r\n value: bone.getIndex(),\r\n };\r\n })\r\n : []\r\n );\r\n\r\n const displayNormalsHandlerAsync = async function () {\r\n const scene = mesh.getScene();\r\n\r\n if (mesh.material?.getClassName() === \"NormalMaterial\") {\r\n mesh.material.dispose();\r\n\r\n mesh.material = mesh.reservedDataStore.originalMaterial;\r\n mesh.reservedDataStore.originalMaterial = null;\r\n setDisplayNormals(false);\r\n } else {\r\n try {\r\n const { NormalMaterial } = await import(\"materials/normal/normalMaterial\");\r\n\r\n if (!mesh.reservedDataStore) {\r\n mesh.reservedDataStore = {};\r\n }\r\n\r\n if (!mesh.reservedDataStore.originalMaterial) {\r\n mesh.reservedDataStore.originalMaterial = mesh.material;\r\n }\r\n\r\n const normalMaterial = new NormalMaterial(\"normalMaterial\", scene);\r\n normalMaterial.disableLighting = true;\r\n if (mesh.material) {\r\n normalMaterial.sideOrientation = mesh.material.sideOrientation;\r\n }\r\n normalMaterial.reservedDataStore = { hidden: true };\r\n mesh.material = normalMaterial;\r\n\r\n setDisplayVertexColors(false);\r\n setDisplayBoneWeights(false);\r\n setDisplaySkeletonMap(false);\r\n setDisplayNormals(true);\r\n } catch {\r\n Tools.Warn(\"NormalMaterial could not be loaded.\");\r\n }\r\n }\r\n };\r\n\r\n const displayVertexColorsHandler = function () {\r\n const scene = mesh.getScene();\r\n\r\n if (mesh.material?.reservedDataStore?.isVertexColorMaterial) {\r\n mesh.material.dispose();\r\n\r\n mesh.material = mesh.reservedDataStore.originalMaterial;\r\n mesh.reservedDataStore.originalMaterial = null;\r\n setDisplayVertexColors(false);\r\n } else {\r\n if (!mesh.reservedDataStore) {\r\n mesh.reservedDataStore = {};\r\n }\r\n\r\n if (!mesh.reservedDataStore.originalMaterial) {\r\n mesh.reservedDataStore.originalMaterial = mesh.material;\r\n }\r\n const vertexColorMaterial = new StandardMaterial(\"vertex colors\", scene);\r\n vertexColorMaterial.disableLighting = true;\r\n vertexColorMaterial.emissiveColor = Color3.White();\r\n if (mesh.material) {\r\n vertexColorMaterial.sideOrientation = mesh.material.sideOrientation;\r\n }\r\n vertexColorMaterial.reservedDataStore = { hidden: true, isVertexColorMaterial: true };\r\n mesh.useVertexColors = true;\r\n mesh.material = vertexColorMaterial;\r\n\r\n setDisplayNormals(false);\r\n setDisplayBoneWeights(false);\r\n setDisplaySkeletonMap(false);\r\n setDisplayVertexColors(true);\r\n }\r\n };\r\n\r\n const renderNormalVectorsHandler = function () {\r\n const scene = mesh.getScene();\r\n\r\n if (mesh.reservedDataStore && mesh.reservedDataStore.normalLines) {\r\n mesh.reservedDataStore.normalLines.dispose();\r\n mesh.reservedDataStore.normalLines = null;\r\n\r\n return;\r\n }\r\n\r\n const normals = mesh.getVerticesData(VertexBuffer.NormalKind);\r\n const positions = mesh.getVerticesData(VertexBuffer.PositionKind);\r\n\r\n const color = Color3.White();\r\n const bbox = mesh.getBoundingInfo();\r\n const diag = bbox.maximum.subtractToRef(bbox.minimum, TmpVectors.Vector3[0]);\r\n const size = diag.length() * 0.05;\r\n\r\n const lines: [Vector3, Vector3][] = [];\r\n for (let i = 0; i < normals!.length; i += 3) {\r\n const v1 = Vector3.FromArray(positions!, i);\r\n const v2 = v1.add(Vector3.FromArray(normals!, i).scaleInPlace(size));\r\n lines.push([v1, v2]);\r\n }\r\n\r\n const normalLines = CreateLineSystem(\"normalLines\", { lines: lines }, scene);\r\n normalLines.color = color;\r\n normalLines.parent = mesh;\r\n normalLines.reservedDataStore = { hidden: true };\r\n\r\n if (!mesh.reservedDataStore) {\r\n mesh.reservedDataStore = {};\r\n }\r\n\r\n mesh.reservedDataStore.normalLines = normalLines;\r\n };\r\n\r\n const renderWireframeOverHandler = function () {\r\n const scene = mesh.getScene();\r\n\r\n if (mesh.reservedDataStore?.wireframeOver) {\r\n const frameGraph = scene.frameGraph;\r\n if (frameGraph) {\r\n const objectRenderer = FrameGraphUtils.FindMainObjectRenderer(frameGraph);\r\n if (objectRenderer && objectRenderer.objectList.meshes) {\r\n const idx = objectRenderer.objectList.meshes.indexOf(mesh.reservedDataStore.wireframeOver);\r\n if (idx !== -1) {\r\n objectRenderer.objectList.meshes!.splice(idx, 1);\r\n }\r\n }\r\n }\r\n\r\n mesh.reservedDataStore.wireframeOver.dispose(false, true);\r\n mesh.reservedDataStore.wireframeOver = null;\r\n\r\n return;\r\n }\r\n\r\n const wireframeOver = mesh.clone(mesh.name + \"_wireframeover\", null, true);\r\n if (wireframeOver === null) {\r\n return;\r\n }\r\n\r\n wireframeOver.reservedDataStore = { hidden: true };\r\n\r\n // Sets up the mesh to be attached to the parent.\r\n // So all neutral in local space.\r\n wireframeOver.parent = mesh;\r\n wireframeOver.position = Vector3.Zero();\r\n wireframeOver.scaling = new Vector3(1, 1, 1);\r\n wireframeOver.rotation = Vector3.Zero();\r\n wireframeOver.rotationQuaternion = null;\r\n\r\n const material = new StandardMaterial(\"wireframeOver\", scene);\r\n material.reservedDataStore = { hidden: true };\r\n wireframeOver.material = material;\r\n material.disableLighting = true;\r\n material.backFaceCulling = false;\r\n material.emissiveColor = Color3.White();\r\n\r\n material.wireframe = true;\r\n\r\n if (!mesh.reservedDataStore) {\r\n mesh.reservedDataStore = {};\r\n }\r\n\r\n mesh.reservedDataStore.wireframeOver = wireframeOver;\r\n\r\n const frameGraph = scene.frameGraph;\r\n if (frameGraph) {\r\n const objectRenderer = FrameGraphUtils.FindMainObjectRenderer(frameGraph);\r\n if (objectRenderer && objectRenderer.objectList.meshes) {\r\n objectRenderer.objectList.meshes.push(wireframeOver);\r\n }\r\n }\r\n };\r\n\r\n const displayBoneWeightsHandler = function () {\r\n const scene = mesh.getScene();\r\n\r\n if (mesh.material?.getClassName() === \"BoneWeightShader\") {\r\n mesh.material.dispose();\r\n mesh.material = mesh.reservedDataStore.originalMaterial;\r\n mesh.reservedDataStore.originalMaterial = null;\r\n setDisplayBoneWeights(false);\r\n } else {\r\n if (!mesh.reservedDataStore) {\r\n mesh.reservedDataStore = {};\r\n }\r\n if (!mesh.reservedDataStore.originalMaterial) {\r\n mesh.reservedDataStore.originalMaterial = mesh.material;\r\n }\r\n if (!mesh.reservedDataStore.displayBoneIndex) {\r\n //mesh.reservedDataStore.displayBoneIndex = this.state.displayBoneIndex;\r\n }\r\n if (mesh.skeleton) {\r\n const boneWeightsShader = SkeletonViewer.CreateBoneWeightShader({ skeleton: mesh.skeleton }, scene);\r\n boneWeightsShader.reservedDataStore = { hidden: true };\r\n mesh.material = boneWeightsShader;\r\n }\r\n setDisplayNormals(false);\r\n setDisplayVertexColors(false);\r\n setDisplaySkeletonMap(false);\r\n setDisplayBoneWeights(true);\r\n }\r\n };\r\n\r\n const displaySkeletonMapHandler = function () {\r\n const scene = mesh.getScene();\r\n\r\n if (mesh.material?.getClassName() === \"SkeletonMapShader\") {\r\n mesh.material.dispose();\r\n mesh.material = mesh.reservedDataStore.originalMaterial;\r\n mesh.reservedDataStore.originalMaterial = null;\r\n setDisplaySkeletonMap(false);\r\n } else {\r\n if (!mesh.reservedDataStore) {\r\n mesh.reservedDataStore = {};\r\n }\r\n if (!mesh.reservedDataStore.originalMaterial) {\r\n mesh.reservedDataStore.originalMaterial = mesh.material;\r\n }\r\n if (mesh.skeleton) {\r\n const skeletonMapShader = SkeletonViewer.CreateSkeletonMapShader({ skeleton: mesh.skeleton }, scene);\r\n skeletonMapShader.reservedDataStore = { hidden: true };\r\n mesh.material = skeletonMapShader;\r\n }\r\n setDisplayNormals(false);\r\n setDisplayVertexColors(false);\r\n setDisplayBoneWeights(false);\r\n setDisplaySkeletonMap(true);\r\n }\r\n };\r\n\r\n const onBoneDisplayIndexChangeHandler = function (value: number): void {\r\n mesh.reservedDataStore.displayBoneIndex = value;\r\n setDisplayBoneIndex(value);\r\n if (mesh.material && mesh.material.getClassName() === \"BoneWeightShader\") {\r\n (mesh.material as ShaderMaterial).setFloat(\"targetBoneIndex\", value);\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n <SwitchPropertyLine label=\"Display Normals\" value={displayNormals} onChange={async () => await displayNormalsHandlerAsync()} />\r\n <SwitchPropertyLine label=\"Display Vertex Colors\" value={displayVertexColors} onChange={() => displayVertexColorsHandler()} />\r\n <SwitchPropertyLine label=\"Render Vertex Normals\" value={renderNormalVectors} onChange={() => renderNormalVectorsHandler()} />\r\n <SwitchPropertyLine label=\"Render Wireframe over Mesh\" value={renderWireframeOver} onChange={() => renderWireframeOverHandler()} />\r\n {skeleton && <SwitchPropertyLine label=\"Display Bone Weights\" value={displayBoneWeights} onChange={() => displayBoneWeightsHandler()} />}\r\n <Collapse visible={displayBoneWeights}>\r\n <div>\r\n <NumberDropdownPropertyLine\r\n label=\"Target Bone Name\"\r\n options={targetBoneOptions}\r\n value={displayBoneIndex}\r\n onChange={(value) => {\r\n onBoneDisplayIndexChangeHandler(value);\r\n }}\r\n />\r\n <SyncedSliderPropertyLine\r\n label=\"Target Bone\"\r\n value={displayBoneIndex}\r\n min={0}\r\n max={targetBoneOptions.length - 1}\r\n step={1}\r\n onChange={(value) => onBoneDisplayIndexChangeHandler(value)}\r\n />\r\n </div>\r\n </Collapse>\r\n {skeleton && <SwitchPropertyLine label=\"Display Skeleton Map\" value={displaySkeletonMap} onChange={() => displaySkeletonMapHandler()} />}\r\n </>\r\n );\r\n};\r\n","import type { FunctionComponent } from \"react\";\r\n\r\nimport type { Mesh } from \"core/index\";\r\n\r\nimport { Constants } from \"core/Engines/constants\";\r\n\r\nimport { SyncedSliderPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/syncedSliderPropertyLine\";\r\nimport { NumberDropdownPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/dropdownPropertyLine\";\r\nimport { BoundProperty } from \"../boundProperty\";\r\n\r\nexport const MeshDisplayProperties: FunctionComponent<{ mesh: Mesh }> = (props) => {\r\n const { mesh } = props;\r\n\r\n return (\r\n <>\r\n <BoundProperty\r\n component={SyncedSliderPropertyLine}\r\n label=\"Visibility\"\r\n description={\"Controls the visibility of the mesh. 0 is invisible, 1 is fully visible.\"}\r\n target={mesh}\r\n propertyKey=\"visibility\"\r\n min={0}\r\n max={1}\r\n step={0.01}\r\n />\r\n <BoundProperty\r\n component={NumberDropdownPropertyLine}\r\n label=\"Orientation\"\r\n description={\"Controls the side orientation or winding order of the mesh.\"}\r\n target={mesh}\r\n propertyKey=\"sideOrientation\"\r\n options={[\r\n { value: Constants.MATERIAL_ClockWiseSideOrientation, label: \"Clockwise\" },\r\n { value: Constants.MATERIAL_CounterClockWiseSideOrientation, label: \"CounterClockwise\" },\r\n ]}\r\n />\r\n </>\r\n );\r\n};\r\n","import type { FunctionComponent } from \"react\";\r\n\r\nimport type { GaussianSplattingMesh } from \"core/index\";\r\n\r\nimport { StringifiedPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/stringifiedPropertyLine\";\r\nimport { BooleanBadgePropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/booleanBadgePropertyLine\";\r\n\r\nexport const GaussianSplattingDisplayProperties: FunctionComponent<{ mesh: GaussianSplattingMesh }> = (props) => {\r\n const { mesh } = props;\r\n\r\n return (\r\n <>\r\n <StringifiedPropertyLine label=\"Splat Count\" value={mesh.splatCount ?? 0} />\r\n <StringifiedPropertyLine label=\"SH Parameter Count\" value={(mesh.shDegree + 1) * (mesh.shDegree + 1) - 1} />\r\n <BooleanBadgePropertyLine label=\"Has Compensation\" value={mesh.compensation} />\r\n <StringifiedPropertyLine label=\"Kernel Size\" value={mesh.kernelSize} />\r\n </>\r\n );\r\n};\r\n","import type { Node } from \"core/index\";\r\n\r\nimport type { FunctionComponent } from \"react\";\r\n\r\nimport { useProperty } from \"../../../hooks/compoundPropertyHooks\";\r\nimport { useObservableState } from \"../../../hooks/observableHooks\";\r\nimport { SwitchPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/switchPropertyLine\";\r\nimport type { ISelectionService } from \"../../../services/selectionService\";\r\nimport { LinkToEntityPropertyLine } from \"../linkToEntityPropertyLine\";\r\nimport { BoundProperty } from \"../boundProperty\";\r\n\r\nexport const NodeGeneralProperties: FunctionComponent<{ node: Node; selectionService: ISelectionService }> = (props) => {\r\n const { node, selectionService } = props;\r\n\r\n const parent = useProperty(node, \"parent\");\r\n const isEnabled = useObservableState(() => node.isEnabled(false), node.onEnabledStateChangedObservable);\r\n\r\n return (\r\n <>\r\n <LinkToEntityPropertyLine label=\"Parent\" description=\"The parent of this node\" entity={parent} selectionService={selectionService} />\r\n <SwitchPropertyLine label=\"Is Enabled\" description=\"Whether the node is enabled or not.\" value={isEnabled} onChange={(checked) => node.setEnabled(checked)} />\r\n <BoundProperty\r\n component={SwitchPropertyLine}\r\n label=\"Inherit Visibility\"\r\n description=\"Whether the node inherits visibility from its parent.\"\r\n target={node}\r\n propertyKey=\"inheritVisibility\"\r\n />\r\n <BoundProperty component={SwitchPropertyLine} label=\"Is Visible\" description=\"Whether the node is visible or not.\" target={node} propertyKey=\"isVisible\" />\r\n </>\r\n );\r\n};\r\n","import type { ServiceDefinition } from \"../../../modularity/serviceDefinition\";\r\nimport type { ISelectionService } from \"../../selectionService\";\r\nimport type { IPropertiesService } from \"./propertiesService\";\r\n\r\nimport { AbstractMesh } from \"core/Meshes/abstractMesh\";\r\nimport { Mesh } from \"core/Meshes/mesh\";\r\nimport { Node } from \"core/node\";\r\nimport {\r\n AbstractMeshAdvancedProperties,\r\n AbstractMeshDebugProperties,\r\n AbstractMeshDisplayProperties,\r\n AbstractMeshEdgeRenderingProperties,\r\n AbstractMeshGeneralProperties,\r\n AbstractMeshOcclusionsProperties,\r\n AbstractMeshOutlineOverlayProperties,\r\n} from \"../../../components/properties/nodes/abstractMeshProperties\";\r\nimport { MeshDisplayProperties } from \"../../../components/properties/nodes/meshProperties\";\r\nimport { GaussianSplattingDisplayProperties } from \"../../../components/properties/nodes/gaussianSplattingProperties\";\r\nimport { NodeGeneralProperties } from \"../../../components/properties/nodes/nodeProperties\";\r\nimport { SelectionServiceIdentity } from \"../../selectionService\";\r\nimport { PropertiesServiceIdentity } from \"./propertiesService\";\r\nimport { GaussianSplattingMesh } from \"core/Meshes/GaussianSplatting/gaussianSplattingMesh\";\r\n\r\nexport const NodePropertiesServiceDefinition: ServiceDefinition<[], [IPropertiesService, ISelectionService]> = {\r\n friendlyName: \"Mesh Properties\",\r\n consumes: [PropertiesServiceIdentity, SelectionServiceIdentity],\r\n factory: (propertiesService, selectionService) => {\r\n const nodeContentRegistration = propertiesService.addSectionContent({\r\n key: \"Node Properties\",\r\n predicate: (entity: unknown) => entity instanceof Node,\r\n content: [\r\n {\r\n section: \"General\",\r\n component: ({ context }) => <NodeGeneralProperties node={context} selectionService={selectionService} />,\r\n },\r\n ],\r\n });\r\n\r\n const abstractMeshContentRegistration = propertiesService.addSectionContent({\r\n key: \"Abstract Mesh Properties\",\r\n // Meshes without vertices are effectively TransformNodes, so don't add mesh properties for them.\r\n predicate: (entity: unknown): entity is AbstractMesh => entity instanceof AbstractMesh && entity.getTotalVertices() > 0,\r\n content: [\r\n {\r\n section: \"General\",\r\n component: ({ context }) => <AbstractMeshGeneralProperties mesh={context} selectionService={selectionService} />,\r\n },\r\n {\r\n section: \"Display\",\r\n component: ({ context }) => <AbstractMeshDisplayProperties mesh={context} />,\r\n },\r\n {\r\n section: \"Advanced\",\r\n component: ({ context }) => <AbstractMeshAdvancedProperties mesh={context} />,\r\n },\r\n {\r\n section: \"Outlines & Overlays\",\r\n component: ({ context }) => <AbstractMeshOutlineOverlayProperties mesh={context} />,\r\n },\r\n {\r\n section: \"Occlusions\",\r\n component: ({ context }) => <AbstractMeshOcclusionsProperties mesh={context} />,\r\n },\r\n {\r\n section: \"Edge Rendering\",\r\n component: ({ context }) => <AbstractMeshEdgeRenderingProperties mesh={context} />,\r\n },\r\n {\r\n section: \"Debug\",\r\n component: ({ context }) => <AbstractMeshDebugProperties mesh={context} />,\r\n },\r\n ],\r\n });\r\n\r\n const meshContentRegistration = propertiesService.addSectionContent({\r\n key: \"Mesh Properties\",\r\n predicate: (entity: unknown): entity is Mesh => entity instanceof Mesh && entity.getTotalVertices() > 0,\r\n content: [\r\n {\r\n section: \"Display\",\r\n component: ({ context }) => <MeshDisplayProperties mesh={context} />,\r\n },\r\n ],\r\n });\r\n\r\n const gaussianSplattingContentRegistration = propertiesService.addSectionContent({\r\n key: \"Gaussian Splatting Properties\",\r\n predicate: (entity: unknown): entity is GaussianSplattingMesh => entity instanceof GaussianSplattingMesh && entity.getTotalVertices() > 0,\r\n content: [\r\n {\r\n section: \"Gaussian Splatting\",\r\n component: ({ context }) => <GaussianSplattingDisplayProperties mesh={context} />,\r\n },\r\n ],\r\n });\r\n\r\n return {\r\n dispose: () => {\r\n nodeContentRegistration.dispose();\r\n abstractMeshContentRegistration.dispose();\r\n meshContentRegistration.dispose();\r\n gaussianSplattingContentRegistration.dispose();\r\n },\r\n };\r\n },\r\n};\r\n","import { CopyRegular, DeleteRegular } from \"@fluentui/react-icons\";\r\nimport type { ReactNode, ReactElement } from \"react\";\r\nimport { ButtonLine } from \"../hoc/buttonLine\";\r\nimport { Body1Strong, makeStyles, tokens } from \"@fluentui/react-components\";\r\n\r\nconst useListStyles = makeStyles({\r\n item: {\r\n width: \"100%\",\r\n display: \"flex\",\r\n flexDirection: \"row\", // Arrange items horizontally\r\n alignItems: \"center\", // Center items vertically\r\n gap: tokens.spacingHorizontalS, // Add space between elements\r\n borderBottom: `${tokens.strokeWidthThin} solid ${tokens.colorNeutralStroke1}`,\r\n },\r\n itemId: {\r\n width: tokens.spacingHorizontalM,\r\n },\r\n itemContent: {\r\n flex: 1, // Take up remaining space\r\n minWidth: 0, // Prevent flex item from overflowing\r\n },\r\n iconContainer: {\r\n display: \"flex\",\r\n gap: tokens.spacingHorizontalXS, // Small gap between icons\r\n alignItems: \"center\",\r\n flexShrink: 0, // Prevent shrinking\r\n },\r\n list: {\r\n padding: tokens.spacingVerticalS,\r\n },\r\n});\r\n\r\n/**\r\n * Represents an item in a list\r\n */\r\nexport type ListItem<T> = {\r\n /** Unique identifier for the item */\r\n id: number;\r\n /** The data associated with the item */\r\n data: T;\r\n /** Value to use for sorting the list */\r\n sortBy: number;\r\n};\r\n\r\ntype ListProps<T> = {\r\n items: ListItem<T>[];\r\n renderItem: (item: ListItem<T>, index: number) => ReactNode;\r\n onDelete: (item: ListItem<T>, index: number) => void;\r\n onAdd: (item?: ListItem<T>) => void;\r\n addButtonLabel?: string;\r\n};\r\n\r\n/**\r\n * For cases where you may want to add / remove items from a list via a trash can button / copy button, this HOC can be used\r\n * @returns A React component that renders a list of items with add/delete functionality\r\n * @param props - The properties for the List component\r\n */\r\nexport function List<T>(props: ListProps<T>): ReactElement {\r\n const { items, renderItem, onDelete, onAdd, addButtonLabel = \"Add new item\" } = props;\r\n const classes = useListStyles();\r\n\r\n return (\r\n <div>\r\n <ButtonLine label={addButtonLabel} onClick={() => props.onAdd()} />\r\n\r\n <div className={classes.list}>\r\n {items\r\n .sort((a, b) => a.sortBy - b.sortBy)\r\n .map((item: ListItem<T>, index: number) => (\r\n <div key={item.id} className={classes.item}>\r\n <Body1Strong className={classes.itemId}>#{index}</Body1Strong>\r\n <div className={classes.itemContent}>{renderItem(item, index)}</div>\r\n <div className={classes.iconContainer}>\r\n <CopyRegular onClick={() => onAdd(item)} />\r\n <DeleteRegular onClick={() => onDelete(item, index)} />\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import type { FunctionComponent } from \"react\";\r\nimport type { PrimitiveProps } from \"./primitive\";\r\nimport { useEffect, useState } from \"react\";\r\nimport { makeStyles, tokens } from \"@fluentui/react-components\";\r\n\r\nimport { SyncedSliderInput } from \"./syncedSlider\";\r\nimport { Color3, Color4 } from \"core/Maths/math.color\";\r\nimport { ColorPickerPopup } from \"./colorPicker\";\r\nimport { Color3Gradient, ColorGradient as Color4Gradient, FactorGradient } from \"core/Misc/gradients\";\r\nimport { GradientBlockColorStep } from \"core/Materials/Node/Blocks/gradientBlock\";\r\n\r\nconst useGradientStyles = makeStyles({\r\n container: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: tokens.spacingHorizontalS,\r\n width: \"100%\",\r\n },\r\n // Wrapper for each slider to control its size\r\n valueWrapper: {\r\n flex: \"0 1 auto\", // Don't grow, can shrink, size based on content\r\n alignContent: \"center\",\r\n minWidth: \"80px\", // Minimum width to keep usable\r\n maxWidth: \"100px\", // Maximum width to prevent them from getting too wide\r\n },\r\n // Wrapper for color pickers - much smaller since they're just swatches\r\n colorWrapper: {\r\n alignContent: \"center\",\r\n // No flex properties - just take natural size\r\n },\r\n // Wrapper for the step slider to take remaining space\r\n stepSliderWrapper: {\r\n flex: \"1 0 auto\", // Can grow, don't shrink, size based on content\r\n minWidth: \"100px\",\r\n },\r\n});\r\n\r\ntype GradientProps<T extends number | Color3 | Color4> = {\r\n value1: T;\r\n value2?: T;\r\n step: number;\r\n};\r\n\r\n/**\r\n * Gradient component that displays 1 or 2 color or number inputs next to a slider\r\n * @param props - Component props containing gradient value and change handlers\r\n * @returns A React component\r\n */\r\nconst Gradient: FunctionComponent<PrimitiveProps<GradientProps<number | Color3 | Color4>>> = (props) => {\r\n Gradient.displayName = \"Gradient\";\r\n const [gradient, setGradient] = useState(props.value);\r\n const classes = useGradientStyles();\r\n\r\n useEffect(() => {\r\n setGradient(props.value); // Re-render if props.value changes\r\n }, [props.value]);\r\n\r\n const gradientChange = (newGradient: GradientProps<number | Color3 | Color4>) => {\r\n setGradient(newGradient);\r\n props.onChange(newGradient);\r\n };\r\n return (\r\n <div id=\"gradientContainer\" className={classes.container}>\r\n <div className={gradient.value1 instanceof Color3 || gradient.value1 instanceof Color4 ? classes.colorWrapper : classes.valueWrapper}>\r\n {gradient.value1 instanceof Color3 || gradient.value1 instanceof Color4 ? (\r\n <ColorPickerPopup value={gradient.value1} onChange={(color) => gradientChange({ ...gradient, value1: color })} />\r\n ) : (\r\n <SyncedSliderInput step={0.01} value={gradient.value1} onChange={(val) => gradientChange({ ...gradient, value1: val })} />\r\n )}\r\n </div>\r\n {gradient.value2 !== undefined && (\r\n <div className={gradient.value2 instanceof Color3 || gradient.value2 instanceof Color4 ? classes.colorWrapper : classes.valueWrapper}>\r\n {gradient.value2 instanceof Color3 || gradient.value2 instanceof Color4 ? (\r\n <ColorPickerPopup value={gradient.value2} onChange={(color) => gradientChange({ ...gradient, value2: color })} />\r\n ) : (\r\n <SyncedSliderInput step={0.01} value={gradient.value2} onChange={(val) => gradientChange({ ...gradient, value2: val })} />\r\n )}\r\n </div>\r\n )}\r\n\r\n <div className={classes.stepSliderWrapper}>\r\n <SyncedSliderInput notifyOnlyOnRelease={true} min={0} max={1} step={0.01} value={gradient.step} onChange={(val) => gradientChange({ ...gradient, step: val })} />\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nconst FactorGradientCast = Gradient as FunctionComponent<PrimitiveProps<GradientProps<number>>>;\r\nconst Color3GradientCast = Gradient as FunctionComponent<PrimitiveProps<GradientProps<Color3>>>;\r\nconst Color4GradientCast = Gradient as FunctionComponent<PrimitiveProps<GradientProps<Color4>>>;\r\n\r\n/**\r\n * Component wrapper for FactorGradient that provides slider inputs for factor1, factor2, and gradient step\r\n * @param props - Component props containing FactorGradient value and change handler\r\n * @returns A React component\r\n */\r\nexport const FactorGradientComponent: FunctionComponent<PrimitiveProps<FactorGradient>> = (props) => {\r\n return (\r\n <FactorGradientCast\r\n {...props}\r\n value={{ value1: props.value.factor1, value2: props.value.factor2, step: props.value.gradient }}\r\n onChange={(gradient) => props.onChange(new FactorGradient(gradient.step, gradient.value1, gradient.value2))}\r\n />\r\n );\r\n};\r\n/**\r\n * Component wrapper for Color3Gradient that provides color picker and gradient step slider\r\n * @param props - Component props containing Color3Gradient value and change handler\r\n * @returns A React component\r\n */\r\nexport const Color3GradientComponent: FunctionComponent<PrimitiveProps<Color3Gradient>> = (props) => {\r\n return (\r\n <Color3GradientCast\r\n {...props}\r\n value={{ value1: props.value.color, step: props.value.gradient }}\r\n onChange={(gradient) => props.onChange(new Color3Gradient(gradient.step, gradient.value1))}\r\n />\r\n );\r\n};\r\n/**\r\n * Component wrapper for Color4Gradient that provides color pickers for color1, color2, and gradient step slider\r\n * @param props - Component props containing Color4Gradient value and change handler\r\n * @returns A React component\r\n */\r\nexport const Color4GradientComponent: FunctionComponent<PrimitiveProps<Color4Gradient>> = (props) => {\r\n return (\r\n <Color4GradientCast\r\n {...props}\r\n value={{ value1: props.value.color1, value2: props.value.color2, step: props.value.gradient }}\r\n onChange={(gradient) => props.onChange(new Color4Gradient(gradient.step, gradient.value1, gradient.value2))}\r\n />\r\n );\r\n};\r\n/**\r\n * Component wrapper for GradientBlockColorStep that provides color picker and step slider\r\n * @param props - Component props containing GradientBlockColorStep value and change handler\r\n * @returns A React component\r\n */\r\nexport const ColorStepGradientComponent: FunctionComponent<PrimitiveProps<GradientBlockColorStep>> = (props) => {\r\n return (\r\n <Color3GradientCast\r\n {...props}\r\n value={{ value1: props.value.color, step: props.value.step }}\r\n onChange={(gradient) => props.onChange(new GradientBlockColorStep(gradient.step, gradient.value1))}\r\n />\r\n );\r\n};\r\n","import type { FunctionComponent } from \"react\";\r\n\r\nimport { List } from \"../primitives/list\";\r\nimport { Color3GradientComponent, Color4GradientComponent, FactorGradientComponent } from \"../primitives/gradient\";\r\nimport { Color3Gradient, ColorGradient as Color4Gradient, FactorGradient } from \"core/Misc/gradients\";\r\nimport type { IValueGradient } from \"core/Misc/gradients\";\r\nimport type { Nullable } from \"core/types\";\r\nimport { Color3, Color4 } from \"core/Maths/math.color\";\r\n\r\ntype GradientListProps<T extends FactorGradient | Color3Gradient | Color4Gradient> = {\r\n label: string;\r\n gradients: Nullable<Array<T>>;\r\n addGradient: (step?: T) => void;\r\n removeGradient: (step: T) => void;\r\n onChange: (newGradient: T) => void;\r\n};\r\n\r\n// Convert gradients to LineList items and sort by gradient value\r\nfunction GradientsToListItems<T extends IValueGradient>(gradients: Nullable<Array<T>>) {\r\n return (\r\n gradients?.map((gradient, index) => ({\r\n id: index,\r\n data: gradient,\r\n sortBy: gradient.gradient,\r\n })) ?? []\r\n );\r\n}\r\nexport const FactorGradientList: FunctionComponent<GradientListProps<FactorGradient>> = (props) => {\r\n FactorGradientList.displayName = \"FactorGradientList\";\r\n const { gradients } = props;\r\n const items = GradientsToListItems<FactorGradient>(gradients);\r\n return (\r\n <List\r\n key=\"Factor\"\r\n addButtonLabel={items.length > 0 ? `Add new ${props.label}` : `Use ${props.label}s`}\r\n items={items}\r\n onDelete={(item) => props.removeGradient(item.data)}\r\n onAdd={() => {\r\n if (items.length === 0) {\r\n props.addGradient(); // Default\r\n } else {\r\n props.addGradient(new FactorGradient(1, 1, 1));\r\n }\r\n }}\r\n renderItem={(item) => {\r\n return (\r\n <FactorGradientComponent\r\n value={item.data}\r\n onChange={(newGradient: FactorGradient) => {\r\n item.data.gradient = newGradient.gradient;\r\n item.data.factor1 = newGradient.factor1;\r\n item.data.factor2 = newGradient.factor2;\r\n props.onChange(newGradient);\r\n }}\r\n />\r\n );\r\n }}\r\n />\r\n );\r\n};\r\n\r\nexport const Color3GradientList: FunctionComponent<GradientListProps<Color3Gradient>> = (props) => {\r\n Color3GradientList.displayName = \"Color3GradientList\";\r\n const { gradients } = props;\r\n const items = GradientsToListItems<Color3Gradient>(gradients);\r\n return (\r\n <List\r\n key=\"Color3\"\r\n addButtonLabel={items.length > 0 ? `Add new ${props.label}` : `Use ${props.label}s`}\r\n items={items}\r\n onDelete={(item) => props.removeGradient(item.data)}\r\n onAdd={() => {\r\n if (items.length === 0) {\r\n props.addGradient(); // Default\r\n } else {\r\n props.addGradient(new Color3Gradient(1, Color3.White()));\r\n }\r\n }}\r\n renderItem={(item) => {\r\n return (\r\n <Color3GradientComponent\r\n value={item.data}\r\n onChange={(newGradient: Color3Gradient) => {\r\n item.data.gradient = newGradient.gradient;\r\n item.data.color = newGradient.color;\r\n props.onChange(newGradient);\r\n }}\r\n />\r\n );\r\n }}\r\n />\r\n );\r\n};\r\n\r\nexport const Color4GradientList: FunctionComponent<GradientListProps<Color4Gradient>> = (props) => {\r\n Color4GradientList.displayName = \"Color4GradientList\";\r\n const { gradients } = props;\r\n const items = GradientsToListItems<Color4Gradient>(gradients);\r\n return (\r\n <List\r\n key=\"Color4\"\r\n addButtonLabel={items.length > 0 ? `Add new ${props.label}` : `Use ${props.label}s`}\r\n items={items}\r\n onDelete={(item) => props.removeGradient(item.data)}\r\n onAdd={() => {\r\n if (items.length === 0) {\r\n props.addGradient(); // Default\r\n } else {\r\n props.addGradient(new Color4Gradient(1, new Color4(1, 1, 1, 1), new Color4(1, 1, 1, 1)));\r\n }\r\n }}\r\n renderItem={(item) => {\r\n return (\r\n <Color4GradientComponent\r\n value={item.data}\r\n onChange={(newGradient: Color4Gradient) => {\r\n item.data.gradient = newGradient.gradient;\r\n item.data.color1 = newGradient.color1;\r\n item.data.color2 = newGradient.color2;\r\n props.onChange(newGradient);\r\n }}\r\n />\r\n );\r\n }}\r\n />\r\n );\r\n};\r\n","import { makeStyles, tokens } from \"@fluentui/react-components\";\r\nimport { ArrowMoveFilled, EyeFilled, EyeOffFilled } from \"@fluentui/react-icons\";\r\nimport { FontAsset } from \"addons/msdfText/fontAsset\";\r\nimport { TextRenderer } from \"addons/msdfText/textRenderer\";\r\nimport type { StandardMaterial } from \"core/Materials/standardMaterial\";\r\nimport type { Color3 } from \"core/Maths/math.color\";\r\nimport { Color4 } from \"core/Maths/math.color\";\r\nimport { Matrix } from \"core/Maths/math.vector\";\r\nimport type { AbstractMesh } from \"core/Meshes/abstractMesh\";\r\nimport { CreateSphere } from \"core/Meshes/Builders/sphereBuilder\";\r\nimport type { Attractor } from \"core/Particles/attractor\";\r\nimport type { Scene } from \"core/scene\";\r\nimport { useCallback, useEffect, useState } from \"react\";\r\nimport type { FunctionComponent } from \"react\";\r\nimport { SyncedSliderInput } from \"shared-ui-components/fluent/primitives/syncedSlider\";\r\nimport { ToggleButton } from \"shared-ui-components/fluent/primitives/toggleButton\";\r\nimport { useAsyncResource, useResource } from \"../../../hooks/resourceHooks\";\r\n\r\ntype AttractorProps = {\r\n attractor: Attractor;\r\n id: number;\r\n impostorScale: number;\r\n impostorColor: Color3;\r\n impostorMaterial: StandardMaterial;\r\n scene: Scene;\r\n isControlled: (impostor: AbstractMesh) => boolean;\r\n onControl: (impostor?: AbstractMesh) => void;\r\n};\r\n\r\nconst useAttractorStyles = makeStyles({\r\n container: {\r\n // top-level div used for lineContainer, in UI overhaul update to just use linecontainer\r\n width: \"100%\",\r\n display: \"flex\", // Makes this a flex container\r\n flexDirection: \"row\", // Arranges children horizontally, main-axis=horizontal\r\n padding: `${tokens.spacingVerticalXS} 0px`,\r\n borderBottom: `${tokens.strokeWidthThin} solid ${tokens.colorNeutralStroke1}`,\r\n },\r\n});\r\n\r\nconst CreateImpostor = (id: number, scene: Scene, attractor: Attractor, initialScale: number, initialMaterial: StandardMaterial) => {\r\n const impostor = CreateSphere(\"Attractor impostor #\" + id, { diameter: 1 }, scene);\r\n impostor.scaling.setAll(initialScale);\r\n impostor.position.copyFrom(attractor.position);\r\n impostor.material = initialMaterial;\r\n impostor.reservedDataStore = { hidden: true };\r\n return impostor;\r\n};\r\n\r\nasync function CreateTextRendererAsync(id: number, scene: Scene, impostor: AbstractMesh, color: Color3) {\r\n const sdfFontDefinition = await (await fetch(\"https://assets.babylonjs.com/fonts/roboto-regular.json\")).text();\r\n const fontAsset = new FontAsset(sdfFontDefinition, \"https://assets.babylonjs.com/fonts/roboto-regular.png\");\r\n\r\n const textRenderer = await TextRenderer.CreateTextRendererAsync(fontAsset, scene.getEngine());\r\n textRenderer.addParagraph(\"#\" + id, {}, Matrix.Scaling(0.5, 0.5, 0.5).multiply(Matrix.Translation(0, 1, 0)));\r\n textRenderer.isBillboard = true;\r\n textRenderer.color = Color4.FromColor3(color, 1.0);\r\n textRenderer.parent = impostor;\r\n return textRenderer;\r\n}\r\n\r\n/**\r\n * Represents the UX of an attractor, a sphere with a color/size whose position matches that of the underlying attractor\r\n * @param props\r\n * @returns\r\n */\r\nexport const AttractorComponent: FunctionComponent<AttractorProps> = (props) => {\r\n const { attractor, id, impostorScale, impostorMaterial, impostorColor, scene, onControl, isControlled } = props;\r\n const classes = useAttractorStyles();\r\n const [shown, setShown] = useState(true);\r\n\r\n // We only want to recreate the impostor mesh and associated if id, scene, or attractor/impostor changes\r\n const impostor = useResource(useCallback(() => CreateImpostor(id, scene, attractor, impostorScale, impostorMaterial), [id, scene, attractor]));\r\n const label = useAsyncResource(useCallback(async () => await CreateTextRendererAsync(id, scene, impostor, impostorColor), [id, scene, impostor]));\r\n\r\n // If impostor, color, or label change, recreate the observer function so that it isnt hooked to old state\r\n useEffect(() => {\r\n const onAfterRender = scene.onAfterRenderObservable.add(() => {\r\n attractor.position.copyFrom(impostor.position);\r\n if (label) {\r\n label.color = Color4.FromColor3(impostorColor);\r\n label.render(scene.getViewMatrix(), scene.getProjectionMatrix());\r\n }\r\n });\r\n return () => {\r\n onAfterRender.remove();\r\n };\r\n }, [impostor, scene, label, impostorColor]);\r\n\r\n // If impostor or impostorScale change, update impostor scaling\r\n useEffect(() => {\r\n impostor.scaling.setAll(impostorScale);\r\n }, [impostor, impostorScale]);\r\n\r\n return (\r\n <div className={classes.container}>\r\n <SyncedSliderInput value={attractor.strength} onChange={(value) => (attractor.strength = value)} min={-10} max={10} step={0.1} />\r\n <ToggleButton\r\n title=\"Show / hide particle attractor.\"\r\n checkedIcon={EyeFilled}\r\n uncheckedIcon={EyeOffFilled}\r\n value={shown}\r\n onChange={(show: boolean) => {\r\n show ? (impostor.visibility = 1) : (impostor.visibility = 0);\r\n setShown(show);\r\n }}\r\n />\r\n <ToggleButton\r\n title=\"Add / remove position gizmo from particle attractor\"\r\n checkedIcon={ArrowMoveFilled}\r\n value={isControlled(impostor)}\r\n onChange={(control: boolean) => onControl(control ? impostor : undefined)}\r\n />\r\n </div>\r\n );\r\n};\r\n","import type { FunctionComponent } from \"react\";\r\n\r\nimport { useCallback, useEffect, useState } from \"react\";\r\n\r\nimport type { AbstractMesh } from \"core/Meshes/abstractMesh\";\r\nimport type { ParticleSystem } from \"core/Particles/particleSystem\";\r\nimport type { Scene } from \"core/scene\";\r\nimport type { Nullable } from \"core/types\";\r\nimport type { ListItem } from \"shared-ui-components/fluent/primitives/list\";\r\n\r\nimport { GizmoManager } from \"core/Gizmos/gizmoManager\";\r\nimport { StandardMaterial } from \"core/Materials/standardMaterial\";\r\nimport { Color3 } from \"core/Maths/math.color\";\r\nimport { Attractor } from \"core/Particles/attractor\";\r\nimport { Color3PropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/colorPropertyLine\";\r\nimport { SyncedSliderPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/syncedSliderPropertyLine\";\r\nimport { List } from \"shared-ui-components/fluent/primitives/list\";\r\nimport { useResource } from \"../../../hooks/resourceHooks\";\r\nimport { AttractorComponent } from \"./attractor\";\r\n\r\ntype AttractorListProps = {\r\n scene: Scene;\r\n attractors: Array<Attractor>;\r\n system: ParticleSystem;\r\n};\r\n\r\n// For each Attractor, create a listItem consisting of the attractor and its debugging impostor mesh\r\nfunction AttractorsToListItems(attractors: Nullable<Array<Attractor>>) {\r\n return (\r\n attractors?.map((attractor, index) => {\r\n return {\r\n id: index,\r\n data: attractor,\r\n sortBy: 0,\r\n };\r\n }) ?? []\r\n );\r\n}\r\n\r\nconst CreateGizmoManager = (scene: Scene) => {\r\n const gizmoManager = new GizmoManager(scene);\r\n gizmoManager.positionGizmoEnabled = true;\r\n gizmoManager.attachableMeshes = [];\r\n return gizmoManager;\r\n};\r\nconst CreateSharedMaterial = (scene: Scene, impostorColor: Color3) => {\r\n const material = new StandardMaterial(\"Attractor impostor material\", scene);\r\n material.diffuseColor = impostorColor;\r\n material.reservedDataStore = { hidden: true }; // Ensure scene explorer doesn't show the material\r\n return material;\r\n};\r\n\r\nexport const AttractorList: FunctionComponent<AttractorListProps> = (props) => {\r\n const { scene, system } = props;\r\n const [items, setItems] = useState<Array<ListItem<Attractor>>>([]);\r\n\r\n // All impostors share a scale and material/color (for now!)\r\n const [impostorScale, setImpostorScale] = useState(1);\r\n const [impostorColor, setImpostorColor] = useState(() => Color3.White());\r\n const impostorMaterial = useResource(useCallback(() => CreateSharedMaterial(scene, impostorColor), [scene]));\r\n\r\n // All impostors share a gizmoManager. controlledImpostor state ensures re-render of children so that their gizmoEnabled toggle is accurate\r\n const gizmoManager = useResource(useCallback(() => CreateGizmoManager(scene), [scene]));\r\n const [controlledImpostor, setControlledImpostor] = useState<Nullable<AbstractMesh>>(null);\r\n\r\n // If attractors change, recreate the items to re-render attractor components\r\n useEffect(() => {\r\n setItems(AttractorsToListItems(props.attractors));\r\n }, [props.attractors]);\r\n\r\n // If color changes, update shared material to ensure children reflect new color\r\n useEffect(() => {\r\n impostorMaterial.diffuseColor = impostorColor;\r\n }, [impostorColor]);\r\n\r\n const onControlImpostor = (impostor?: AbstractMesh) => {\r\n // If an impostor is passed, attach the gizmo to the current impostor, otherwise it will detach (i.e. set to null)\r\n const attached = impostor ?? null;\r\n gizmoManager.attachToMesh(attached);\r\n setControlledImpostor(attached);\r\n };\r\n\r\n return (\r\n <>\r\n {items.length > 0 && (\r\n <>\r\n <Color3PropertyLine label=\"Attractor debug color\" value={impostorColor} onChange={setImpostorColor} />\r\n <SyncedSliderPropertyLine label=\"Attractor debug size\" value={impostorScale} onChange={setImpostorScale} min={0} max={10} step={0.1} />\r\n </>\r\n )}\r\n <List\r\n addButtonLabel={`Add new attractor`}\r\n items={items}\r\n onDelete={(item, _index) => system.removeAttractor(item.data)}\r\n onAdd={(item) => system.addAttractor(item?.data ?? new Attractor())}\r\n renderItem={(item) => {\r\n return (\r\n <AttractorComponent\r\n attractor={item.data}\r\n id={item.id}\r\n scene={scene}\r\n impostorColor={impostorColor}\r\n impostorScale={impostorScale}\r\n impostorMaterial={impostorMaterial}\r\n isControlled={(impostor: AbstractMesh) => impostor === controlledImpostor}\r\n onControl={onControlImpostor}\r\n />\r\n );\r\n }}\r\n />\r\n </>\r\n );\r\n};\r\n","import type { FactorGradient, ColorGradient as Color4Gradient, IValueGradient, ParticleSystem } from \"core/index\";\r\n\r\nimport { Color3, Color4 } from \"core/Maths/math.color\";\r\nimport { useCallback } from \"react\";\r\nimport type { FunctionComponent } from \"react\";\r\n\r\nimport { useInterceptObservable } from \"../../../hooks/instrumentationHooks\";\r\nimport { useObservableState } from \"../../../hooks/observableHooks\";\r\nimport { Color4GradientList, FactorGradientList } from \"shared-ui-components/fluent/hoc/gradientList\";\r\nimport { AttractorList } from \"./attractorList\";\r\nimport { MessageBar } from \"shared-ui-components/fluent/primitives/messageBar\";\r\n\r\nexport const ParticleSystemEmissionProperties: FunctionComponent<{ particleSystem: ParticleSystem }> = (props) => {\r\n const { particleSystem: system } = props;\r\n\r\n const emitRateGradients = useParticleSystemProperty(system, \"getEmitRateGradients\", \"function\", \"addEmitRateGradient\", \"removeEmitRateGradient\", \"forceRefreshGradients\");\r\n\r\n return (\r\n <>\r\n {!system.isNodeGenerated && (\r\n <FactorGradientList\r\n gradients={emitRateGradients}\r\n label=\"Emit Rate Gradient\"\r\n removeGradient={(gradient: IValueGradient) => {\r\n system.removeEmitRateGradient(gradient.gradient);\r\n system.forceRefreshGradients();\r\n }}\r\n addGradient={(gradient?: FactorGradient) => {\r\n gradient ? system.addEmitRateGradient(gradient.gradient, gradient.factor1, gradient.factor2) : system.addEmitRateGradient(Math.random(), 50, 50);\r\n system.forceRefreshGradients();\r\n }}\r\n onChange={(_gradient: FactorGradient) => {\r\n system.forceRefreshGradients();\r\n }}\r\n />\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nexport const ParticleSystemColorProperties: FunctionComponent<{ particleSystem: ParticleSystem }> = (props) => {\r\n const { particleSystem: system } = props;\r\n\r\n const colorGradients = useParticleSystemProperty(system, \"getColorGradients\", \"function\", \"addColorGradient\", \"removeColorGradient\", \"forceRefreshGradients\");\r\n return (\r\n <>\r\n {!system.isNodeGenerated && (\r\n <Color4GradientList\r\n gradients={colorGradients}\r\n label=\"Color Gradient\"\r\n removeGradient={(gradient: IValueGradient) => {\r\n system.removeColorGradient(gradient.gradient);\r\n system.forceRefreshGradients();\r\n }}\r\n addGradient={(gradient?: Color4Gradient) => {\r\n if (gradient) {\r\n system.addColorGradient(gradient.gradient, gradient.color1, gradient.color2);\r\n } else {\r\n system.addColorGradient(0, Color4.FromColor3(Color3.Black()), Color4.FromColor3(Color3.Black()));\r\n system.addColorGradient(1, Color4.FromColor3(Color3.White()), Color4.FromColor3(Color3.White()));\r\n }\r\n system.forceRefreshGradients();\r\n }}\r\n onChange={(_gradient: Color4Gradient) => {\r\n system.forceRefreshGradients();\r\n }}\r\n />\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nexport const ParticleSystemAttractorProperties: FunctionComponent<{ particleSystem: ParticleSystem }> = (props) => {\r\n const { particleSystem: system } = props;\r\n\r\n const attractors = useParticleSystemProperty(system, \"attractors\", \"property\", \"addAttractor\", \"removeAttractor\");\r\n const scene = system.getScene();\r\n\r\n return (\r\n <>\r\n {scene ? (\r\n <AttractorList attractors={attractors} scene={scene} system={system} />\r\n ) : (\r\n // Should never get here since sceneExplorer only displays if there is a scene, but adding UX in case that assumption changes in future\r\n <MessageBar intent=\"info\" title=\"No Scene Available\" message=\"Cannot display attractors without a scene\" />\r\n )}\r\n </>\r\n );\r\n};\r\n\r\n// TODO-iv2: This can be more generic to work for not just particleSystems\r\nconst useParticleSystemProperty = (\r\n system: ParticleSystem,\r\n propertyKey: keyof ParticleSystem,\r\n observableType: \"function\" | \"property\",\r\n addFn: keyof ParticleSystem,\r\n removeFn: keyof ParticleSystem,\r\n changeFn?: keyof ParticleSystem\r\n) => {\r\n return useObservableState(\r\n useCallback(() => {\r\n const value = observableType === \"function\" ? system[propertyKey]() : system[propertyKey];\r\n return [...(value ?? [])];\r\n }, [system, propertyKey]),\r\n useInterceptObservable(\"function\", system, addFn),\r\n useInterceptObservable(\"function\", system, removeFn),\r\n changeFn ? useInterceptObservable(\"function\", system, changeFn) : undefined\r\n );\r\n};\r\n","import type { ServiceDefinition } from \"../../../modularity/serviceDefinition\";\r\nimport type { IPropertiesService } from \"./propertiesService\";\r\n\r\nimport { PropertiesServiceIdentity } from \"./propertiesService\";\r\nimport {\r\n ParticleSystemColorProperties,\r\n ParticleSystemAttractorProperties,\r\n ParticleSystemEmissionProperties,\r\n} from \"../../../components/properties/particles/particleSystemProperties\";\r\nimport { ParticleSystem } from \"core/Particles/particleSystem\";\r\n\r\nexport const ParticleSystemPropertiesServiceDefinition: ServiceDefinition<[], [IPropertiesService]> = {\r\n friendlyName: \"Particle System Properties\",\r\n consumes: [PropertiesServiceIdentity],\r\n factory: (propertiesService) => {\r\n // TODO-iv2 complete the ParticleSystemPropertiesService registrations and the ParticleSystemProperties component(s) - ensuring the proper predicates (IParticleSystem vs ParticleSystem)\r\n\r\n const particleSystemContent = propertiesService.addSectionContent({\r\n key: \"Particle System Properties\",\r\n predicate: (entity: unknown): entity is ParticleSystem => entity instanceof ParticleSystem,\r\n content: [\r\n {\r\n section: \"Emission\",\r\n component: ({ context }) => <ParticleSystemEmissionProperties particleSystem={context} />,\r\n },\r\n {\r\n section: \"Color\",\r\n component: ({ context }) => <ParticleSystemColorProperties particleSystem={context} />,\r\n },\r\n {\r\n section: \"Attractors\",\r\n component: ({ context }) => <ParticleSystemAttractorProperties particleSystem={context} />,\r\n },\r\n ],\r\n });\r\n return {\r\n dispose: () => {\r\n particleSystemContent.dispose();\r\n },\r\n };\r\n },\r\n};\r\n","import type { FunctionComponent } from \"react\";\r\n\r\nimport type { PhysicsBody, TransformNode } from \"core/index\";\r\nimport type { DropdownOption } from \"shared-ui-components/fluent/primitives/dropdown\";\r\n\r\nimport { useCallback } from \"react\";\r\nimport { MessageBar } from \"shared-ui-components/fluent/primitives/messageBar\";\r\n\r\nimport { Vector3 } from \"core/Maths/math.vector\";\r\nimport { PhysicsMotionType, PhysicsPrestepType } from \"core/Physics/v2/IPhysicsEnginePlugin\";\r\nimport { NumberDropdownPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/dropdownPropertyLine\";\r\nimport { NumberInputPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/inputPropertyLine\";\r\nimport { Vector3PropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/vectorPropertyLine\";\r\nimport { useProperty, useVector3Property } from \"../../../hooks/compoundPropertyHooks\";\r\nimport { useInterceptObservable } from \"../../../hooks/instrumentationHooks\";\r\nimport { useObservableState } from \"../../../hooks/observableHooks\";\r\n\r\nimport \"core/Physics/v2/physicsEngineComponent\";\r\n\r\nconst MotionOptions = [\r\n { label: \"Static\", value: PhysicsMotionType.STATIC },\r\n { label: \"Animated\", value: PhysicsMotionType.ANIMATED },\r\n { label: \"Dynamic\", value: PhysicsMotionType.DYNAMIC },\r\n] as const satisfies readonly DropdownOption<number>[];\r\n\r\nconst PrestepOptions = [\r\n { label: \"Disabled\", value: PhysicsPrestepType.DISABLED },\r\n { label: \"Teleport\", value: PhysicsPrestepType.TELEPORT },\r\n { label: \"Action\", value: PhysicsPrestepType.ACTION },\r\n] as const satisfies readonly DropdownOption<number>[];\r\n\r\nexport const TransformNodePhysicsProperties: FunctionComponent<{ node: TransformNode }> = (props) => {\r\n const { node } = props;\r\n\r\n const physicsBody = useProperty(node, \"physicsBody\");\r\n\r\n if (!physicsBody) {\r\n return (\r\n <MessageBar\r\n intent=\"info\"\r\n title=\"No Physics Body\"\r\n message=\"To modify physics properties, attach a physics body to this node.\"\r\n docLink=\"https://doc.babylonjs.com/features/featuresDeepDive/physics/rigidBodies\"\r\n />\r\n );\r\n }\r\n\r\n return <PhysicsBodyProperties physicsBody={physicsBody} />;\r\n};\r\n\r\n/**\r\n * Physics properties\r\n * @param props transform node\r\n * @returns controls\r\n */\r\nconst PhysicsBodyProperties: FunctionComponent<{ physicsBody: PhysicsBody }> = (props) => {\r\n const { physicsBody } = props;\r\n\r\n const massProperties = useObservableState(\r\n useCallback(() => physicsBody.getMassProperties(), [physicsBody]),\r\n useInterceptObservable(\"function\", physicsBody, \"setMassProperties\")\r\n );\r\n\r\n const centerOfMass = useVector3Property(massProperties, \"centerOfMass\") ?? Vector3.Zero();\r\n const inertia = useVector3Property(massProperties, \"inertia\") ?? Vector3.Zero();\r\n\r\n // Get current damping values\r\n const linearDamping = useObservableState(() => physicsBody.getLinearDamping(), useInterceptObservable(\"function\", physicsBody, \"setLinearDamping\"));\r\n const angularDamping = useObservableState(() => physicsBody.getAngularDamping(), useInterceptObservable(\"function\", physicsBody, \"setAngularDamping\"));\r\n\r\n // Get motion and prestep types\r\n const motionType = useObservableState(() => physicsBody.getMotionType(), useInterceptObservable(\"function\", physicsBody, \"setMotionType\"));\r\n const prestepType = useObservableState(() => physicsBody.getPrestepType(), useInterceptObservable(\"function\", physicsBody, \"setPrestepType\"));\r\n\r\n // Get current velocities\r\n const linearVelocity = useObservableState(\r\n useCallback(() => physicsBody.getLinearVelocity(), [physicsBody]),\r\n useInterceptObservable(\"function\", physicsBody, \"setLinearVelocity\")\r\n );\r\n const angularVelocity = useObservableState(\r\n useCallback(() => physicsBody.getAngularVelocity(), [physicsBody]),\r\n useInterceptObservable(\"function\", physicsBody, \"setAngularVelocity\")\r\n );\r\n\r\n return (\r\n <>\r\n <NumberDropdownPropertyLine\r\n key=\"MotionType\"\r\n label=\"Motion Type\"\r\n options={MotionOptions}\r\n value={motionType}\r\n onChange={(value) => {\r\n return physicsBody.setMotionType(value);\r\n }}\r\n />\r\n <NumberDropdownPropertyLine\r\n label=\"Prestep Type\"\r\n options={PrestepOptions}\r\n value={prestepType}\r\n onChange={(value) => {\r\n return physicsBody.setPrestepType(value);\r\n }}\r\n />\r\n {/* Linear Damping */}\r\n <NumberInputPropertyLine\r\n label=\"Linear Damping\"\r\n min={0}\r\n max={1}\r\n step={0.01}\r\n value={linearDamping}\r\n onChange={(e) => {\r\n physicsBody.setLinearDamping(e);\r\n }}\r\n />\r\n {/* Angular Damping */}\r\n <NumberInputPropertyLine\r\n label=\"Angular Damping\"\r\n min={0}\r\n max={1}\r\n step={0.01}\r\n value={angularDamping}\r\n onChange={(e) => {\r\n physicsBody.setAngularDamping(e);\r\n }}\r\n />\r\n <Vector3PropertyLine label=\"Linear Velocity\" value={linearVelocity} onChange={(value) => physicsBody.setLinearVelocity(value)} />\r\n <Vector3PropertyLine label=\"Angular Velocity\" value={angularVelocity} onChange={(value) => physicsBody.setAngularVelocity(value)} />\r\n {/* Physics Mass Properties Controls */}\r\n {massProperties && (\r\n <>\r\n <NumberInputPropertyLine\r\n label=\"Mass\"\r\n value={massProperties.mass ?? 0}\r\n min={0}\r\n step={0.01}\r\n onChange={(value) => {\r\n physicsBody.setMassProperties({ ...massProperties, mass: value });\r\n }}\r\n />\r\n <Vector3PropertyLine\r\n label=\"Center of Mass\"\r\n value={centerOfMass}\r\n onChange={(value) => {\r\n physicsBody.setMassProperties({ ...massProperties, centerOfMass: value });\r\n }}\r\n />\r\n <Vector3PropertyLine\r\n label=\"Inertia\"\r\n value={inertia}\r\n onChange={(value) => {\r\n physicsBody.setMassProperties({ ...massProperties, inertia: value });\r\n }}\r\n />\r\n </>\r\n )}\r\n </>\r\n );\r\n};\r\n","import type { ServiceDefinition } from \"../../../modularity/serviceDefinition\";\r\nimport type { IPropertiesService } from \"./propertiesService\";\r\n\r\nimport { TransformNode } from \"core/Meshes/transformNode\";\r\n\r\nimport { TransformNodePhysicsProperties } from \"../../../components/properties/physics/physicsProperties\";\r\nimport { PropertiesServiceIdentity } from \"./propertiesService\";\r\n\r\nexport const PhysicsPropertiesServiceDefinition: ServiceDefinition<[], [IPropertiesService]> = {\r\n friendlyName: \"Physics Properties\",\r\n consumes: [PropertiesServiceIdentity],\r\n factory: (propertiesService) => {\r\n const contentRegistration = propertiesService.addSectionContent({\r\n key: \"Physics Properties\",\r\n predicate: (entity: unknown) => entity instanceof TransformNode,\r\n content: [\r\n {\r\n section: \"Physics\",\r\n component: ({ context: node }) => <TransformNodePhysicsProperties node={node} />,\r\n },\r\n ],\r\n });\r\n\r\n return {\r\n dispose: () => {\r\n contentRegistration.dispose();\r\n },\r\n };\r\n },\r\n};\r\n","import type { CheckboxOnChangeData } from \"@fluentui/react-components\";\r\nimport type { ChangeEvent, FunctionComponent } from \"react\";\r\n\r\nimport { Checkbox as FluentCheckbox, makeStyles } from \"@fluentui/react-components\";\r\nimport { useEffect, useState } from \"react\";\r\nimport type { PrimitiveProps } from \"./primitive\";\r\n\r\nconst useCheckboxStyles = makeStyles({\r\n indicator: {\r\n margin: 0,\r\n },\r\n});\r\n/**\r\n * This is a primitive fluent checkbox that can both read and write checked state\r\n * @param props\r\n * @returns Checkbox component\r\n */\r\nexport const Checkbox: FunctionComponent<PrimitiveProps<boolean>> = (props) => {\r\n Checkbox.displayName = \"Checkbox\";\r\n const [checked, setChecked] = useState(() => props.value ?? false);\r\n const classes = useCheckboxStyles();\r\n useEffect(() => {\r\n if (props.value != undefined) {\r\n setChecked(props.value); // Update local state when props.checked changes\r\n }\r\n }, [props.value]);\r\n\r\n const onChange = (ev: ChangeEvent<HTMLInputElement>, _: CheckboxOnChangeData) => {\r\n props.onChange(ev.target.checked);\r\n setChecked(ev.target.checked);\r\n };\r\n\r\n return <FluentCheckbox checked={checked} onChange={onChange} indicator={{ className: classes.indicator }} />;\r\n};\r\n","import { PropertyLine } from \"./propertyLine\";\r\nimport type { PrimitiveProps } from \"../../primitives/primitive\";\r\nimport type { PropertyLineProps } from \"./propertyLine\";\r\nimport type { FunctionComponent } from \"react\";\r\nimport { Checkbox } from \"../../primitives/checkbox\";\r\n\r\n/**\r\n * Wraps a checkbox in a property line\r\n * @param props - PropertyLineProps and CheckboxProps\r\n * @returns property-line wrapped checkbox\r\n */\r\nexport const CheckboxPropertyLine: FunctionComponent<PropertyLineProps<boolean> & PrimitiveProps<boolean>> = (props) => {\r\n CheckboxPropertyLine.displayName = \"CheckboxPropertyLine\";\r\n return (\r\n <PropertyLine {...props}>\r\n <Checkbox {...props} />\r\n </PropertyLine>\r\n );\r\n};\r\n","import type { PostProcess } from \"core/PostProcesses/postProcess\";\r\n\r\nimport type { FunctionComponent } from \"react\";\r\n\r\nimport { StringifiedPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/stringifiedPropertyLine\";\r\nimport { CheckboxPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/checkboxPropertyLine\";\r\nimport { BoundProperty } from \"../boundProperty\";\r\nimport { SyncedSliderPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/syncedSliderPropertyLine\";\r\n\r\n/**\r\n * The properties component for a post process.\r\n * @param props - The properties component props containing the post process.\r\n * @returns JSX.Element\r\n */\r\nexport const PostProcessProperties: FunctionComponent<{ postProcess: PostProcess }> = (props) => {\r\n const { postProcess } = props;\r\n return (\r\n <>\r\n <StringifiedPropertyLine key=\"width\" label=\"Width:\" description=\"The width of the post process\" value={postProcess.width} units=\"px\" />\r\n <StringifiedPropertyLine key=\"height\" label=\"Height:\" description=\"The height of the post process\" value={postProcess.height} units=\"px\" />\r\n <BoundProperty component={CheckboxPropertyLine} label=\"Auto Clear:\" target={postProcess} propertyKey=\"autoClear\" />\r\n <BoundProperty component={CheckboxPropertyLine} label=\"Pixel Perfect:\" target={postProcess} propertyKey=\"enablePixelPerfectMode\" />\r\n <BoundProperty component={CheckboxPropertyLine} label=\"Fullscreen Viewport:\" target={postProcess} propertyKey=\"forceFullscreenViewport\" />\r\n <BoundProperty component={SyncedSliderPropertyLine} label=\"Samples:\" target={postProcess} propertyKey=\"samples\" min={1} max={8} step={1} />\r\n </>\r\n );\r\n};\r\n","import { PostProcess } from \"core/PostProcesses/postProcess\";\r\nimport { PostProcessProperties } from \"../../../components/properties/postProcesses/postProcessProperties\";\r\nimport type { ServiceDefinition } from \"../../../modularity/serviceDefinition\";\r\nimport type { IPropertiesService } from \"./propertiesService\";\r\n\r\nimport { PropertiesServiceIdentity } from \"./propertiesService\";\r\n\r\nexport const PostProcessPropertiesServiceDefinition: ServiceDefinition<[], [IPropertiesService]> = {\r\n friendlyName: \"Post Process Properties\",\r\n consumes: [PropertiesServiceIdentity],\r\n factory: (propertiesService) => {\r\n const postProcessContentRegistration = propertiesService.addSectionContent({\r\n key: \"Post Process Properties\",\r\n predicate: (entity: unknown) => entity instanceof PostProcess,\r\n content: [\r\n {\r\n section: \"General\",\r\n component: ({ context }) => <PostProcessProperties postProcess={context} />,\r\n },\r\n ],\r\n });\r\n\r\n return {\r\n dispose: () => {\r\n postProcessContentRegistration.dispose();\r\n },\r\n };\r\n },\r\n};\r\n","import type { ServiceDefinition } from \"../../../modularity/serviceDefinition\";\r\nimport type { IPropertiesService } from \"./propertiesService\";\r\n\r\nimport { PropertiesServiceIdentity } from \"./propertiesService\";\r\n\r\nexport const RenderingPipelinePropertiesServiceDefinition: ServiceDefinition<[], [IPropertiesService]> = {\r\n friendlyName: \"Rendering Pipeline Properties\",\r\n consumes: [PropertiesServiceIdentity],\r\n factory: (propertiesService) => {\r\n // TODO: Add content registrations for each section and for each type in the RenderingPipeline class hierarchy.\r\n\r\n return {\r\n dispose: () => {\r\n // TODO: Dispose content registrations.\r\n },\r\n };\r\n },\r\n};\r\n","import { Scene } from \"core/scene\";\r\nimport type { FunctionComponent } from \"react\";\r\nimport { Color3PropertyLine, Color4PropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/colorPropertyLine\";\r\nimport { NumberDropdownPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/dropdownPropertyLine\";\r\nimport { BoundProperty } from \"../properties/boundProperty\";\r\nimport { SwitchPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/switchPropertyLine\";\r\nimport type { BaseTexture } from \"core/Materials/Textures/baseTexture\";\r\nimport type { Nullable } from \"core/types\";\r\nimport { LinkPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/linkPropertyLine\";\r\nimport type { ISelectionService } from \"../../services/selectionService\";\r\nimport { FileUploadLine } from \"shared-ui-components/fluent/hoc/fileUploadLine\";\r\nimport { Logger } from \"core/Misc/logger\";\r\nimport { Tools } from \"core/Misc/tools\";\r\nimport { CubeTexture } from \"core/Materials/Textures/cubeTexture\";\r\nimport { useProperty } from \"../../hooks/compoundPropertyHooks\";\r\nimport { SyncedSliderPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/syncedSliderPropertyLine\";\r\nimport { NumberInputPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/inputPropertyLine\";\r\nimport { ImageProcessingConfiguration } from \"core/Materials/imageProcessingConfiguration\";\r\nimport { Vector3PropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/vectorPropertyLine\";\r\nimport { MessageBar } from \"shared-ui-components/fluent/primitives/messageBar\";\r\nimport { ButtonLine } from \"shared-ui-components/fluent/hoc/buttonLine\";\r\nimport { Collapse } from \"shared-ui-components/fluent/primitives/collapse\";\r\n\r\nlet StoredEnvironmentTexture: Nullable<BaseTexture>;\r\n\r\nexport const SceneMaterialImageProcessingProperties: FunctionComponent<{ scene: Scene }> = (props) => {\r\n const { scene } = props;\r\n const imageProcessing = scene.imageProcessingConfiguration;\r\n\r\n return (\r\n <>\r\n <BoundProperty component={SyncedSliderPropertyLine} label=\"Contrast\" min={0} max={4} step={0.1} target={imageProcessing} propertyKey=\"contrast\" />\r\n <BoundProperty component={SyncedSliderPropertyLine} label=\"Exposure\" min={0} max={4} step={0.1} target={imageProcessing} propertyKey=\"exposure\" />\r\n <BoundProperty component={SwitchPropertyLine} label=\"Tone Mapping\" target={imageProcessing} propertyKey=\"toneMappingEnabled\" />\r\n <Collapse visible={imageProcessing.toneMappingEnabled}>\r\n <BoundProperty\r\n component={NumberDropdownPropertyLine}\r\n options={\r\n [\r\n { label: \"Standard\", value: ImageProcessingConfiguration.TONEMAPPING_STANDARD },\r\n { label: \"ACES\", value: ImageProcessingConfiguration.TONEMAPPING_ACES },\r\n { label: \"Khronos PBR Neutral\", value: ImageProcessingConfiguration.TONEMAPPING_KHR_PBR_NEUTRAL },\r\n ] as const\r\n }\r\n label=\"Tone Mapping Type\"\r\n target={imageProcessing}\r\n propertyKey=\"toneMappingType\"\r\n />\r\n </Collapse>\r\n <BoundProperty component={SwitchPropertyLine} label=\"Vignette\" target={imageProcessing} propertyKey=\"vignetteEnabled\" />\r\n <BoundProperty component={SyncedSliderPropertyLine} label=\"Vignette FOV\" min={0} max={Math.PI} step={0.1} target={imageProcessing} propertyKey=\"vignetteCameraFov\" />\r\n <BoundProperty component={SyncedSliderPropertyLine} label=\"Vignette Center X\" min={0} max={1} step={0.1} target={imageProcessing} propertyKey=\"vignetteCenterX\" />\r\n <BoundProperty component={SyncedSliderPropertyLine} label=\"Vignette Center Y\" min={0} max={1} step={0.1} target={imageProcessing} propertyKey=\"vignetteCenterY\" />\r\n <BoundProperty component={Color4PropertyLine} label=\"Vignette Color\" target={imageProcessing} propertyKey=\"vignetteColor\" />\r\n <BoundProperty\r\n component={NumberDropdownPropertyLine}\r\n options={\r\n [\r\n { label: \"Multiply\", value: ImageProcessingConfiguration.VIGNETTEMODE_MULTIPLY },\r\n { label: \"Opaque\", value: ImageProcessingConfiguration.VIGNETTEMODE_OPAQUE },\r\n ] as const\r\n }\r\n label=\"Vignette Blend Mode\"\r\n target={imageProcessing}\r\n propertyKey=\"vignetteBlendMode\"\r\n />\r\n <BoundProperty component={SwitchPropertyLine} label=\"Dithering\" target={imageProcessing} propertyKey=\"ditheringEnabled\" />\r\n <BoundProperty\r\n component={SyncedSliderPropertyLine}\r\n label=\"Dithering Intensity\"\r\n min={0}\r\n max={1}\r\n step={0.5 / 255.0}\r\n target={imageProcessing}\r\n propertyKey=\"ditheringIntensity\"\r\n />\r\n </>\r\n );\r\n};\r\n\r\nexport const ScenePhysicsProperties: FunctionComponent<{ scene: Scene }> = (props) => {\r\n const { scene } = props;\r\n\r\n const physicsEngine = scene.getPhysicsEngine();\r\n\r\n return (\r\n <>\r\n {physicsEngine ? (\r\n <>\r\n <NumberInputPropertyLine\r\n label=\"Time Step\"\r\n value={physicsEngine.getTimeStep()}\r\n onChange={(value) => {\r\n physicsEngine.setTimeStep(value);\r\n }}\r\n />\r\n <Vector3PropertyLine\r\n label=\"Gravity\"\r\n value={physicsEngine.gravity}\r\n onChange={(value) => {\r\n physicsEngine.setGravity(value);\r\n }}\r\n />\r\n </>\r\n ) : (\r\n <MessageBar\r\n intent=\"info\"\r\n title=\"No physics engine\"\r\n message=\"There is no physics engine enabled on this scene.\"\r\n docLink=\"https://doc.babylonjs.com/communityExtensions/editor/physics/usingPhysics/\"\r\n />\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nexport const SceneCollisionsProperties: FunctionComponent<{ scene: Scene }> = (props) => {\r\n const { scene } = props;\r\n\r\n return (\r\n <>\r\n <BoundProperty component={Vector3PropertyLine} label=\"Gravity\" target={scene} propertyKey=\"gravity\" />\r\n </>\r\n );\r\n};\r\n\r\nexport const SceneShadowsProperties: FunctionComponent<{ scene: Scene }> = (props) => {\r\n const { scene } = props;\r\n\r\n return (\r\n <>\r\n <ButtonLine\r\n label={\"Normalize scene\"}\r\n onClick={() => {\r\n for (const mesh of scene.meshes) {\r\n mesh.normalizeToUnitCube(true);\r\n mesh.computeWorldMatrix(true);\r\n }\r\n }}\r\n />\r\n </>\r\n );\r\n};\r\n\r\nexport const SceneRenderingProperties: FunctionComponent<{ scene: Scene; selectionService: ISelectionService }> = (props) => {\r\n const { scene, selectionService } = props;\r\n\r\n const envTexture = useProperty(scene, \"environmentTexture\");\r\n const fogMode = useProperty(scene, \"fogMode\");\r\n\r\n return (\r\n <>\r\n <NumberDropdownPropertyLine\r\n options={\r\n [\r\n { label: \"Point\", value: 0 },\r\n { label: \"Wireframe\", value: 1 },\r\n { label: \"Solid\", value: 2 },\r\n ] as const\r\n }\r\n label=\"Rendering Mode\"\r\n value={scene.forcePointsCloud ? 0 : scene.forceWireframe ? 1 : 2}\r\n onChange={(value) => {\r\n switch (value) {\r\n case 0:\r\n scene.forcePointsCloud = true;\r\n scene.forceWireframe = false;\r\n break;\r\n case 1:\r\n scene.forcePointsCloud = false;\r\n scene.forceWireframe = true;\r\n break;\r\n case 2:\r\n scene.forcePointsCloud = false;\r\n scene.forceWireframe = false;\r\n break;\r\n }\r\n }}\r\n />\r\n\r\n <BoundProperty component={Color4PropertyLine} label=\"Clear Color\" target={scene} propertyKey=\"clearColor\" />\r\n\r\n <BoundProperty component={SwitchPropertyLine} label=\"Clear Color Enabled\" target={scene} propertyKey=\"autoClear\" />\r\n\r\n <BoundProperty component={Color3PropertyLine} label=\"Ambient Color\" target={scene} propertyKey=\"ambientColor\" />\r\n\r\n <SwitchPropertyLine\r\n label=\"Environment Texture (IBL)\"\r\n value={envTexture ? true : false}\r\n onChange={() => {\r\n if (envTexture) {\r\n StoredEnvironmentTexture = envTexture;\r\n scene.environmentTexture = null;\r\n } else {\r\n scene.environmentTexture = StoredEnvironmentTexture;\r\n StoredEnvironmentTexture = null;\r\n }\r\n }}\r\n />\r\n\r\n {scene.environmentTexture && (\r\n <LinkPropertyLine label=\"Env. texture\" value={scene.environmentTexture.name} onLink={() => (selectionService.selectedEntity = scene.environmentTexture)} />\r\n )}\r\n\r\n <FileUploadLine\r\n label=\"Update Environment Texture\"\r\n accept=\".dds, .env\"\r\n onClick={(files) => {\r\n if (files.length > 0) {\r\n const file = files[0];\r\n const isFileDDS = file.name.toLowerCase().indexOf(\".dds\") > 0;\r\n const isFileEnv = file.name.toLowerCase().indexOf(\".env\") > 0;\r\n if (!isFileDDS && !isFileEnv) {\r\n Logger.Error(\"Unable to update environment texture. Please select a dds or env file.\");\r\n return;\r\n }\r\n\r\n Tools.ReadFile(\r\n file,\r\n (data) => {\r\n const blob = new Blob([data], { type: \"octet/stream\" });\r\n const url = URL.createObjectURL(blob);\r\n if (isFileDDS) {\r\n scene.environmentTexture = CubeTexture.CreateFromPrefilteredData(url, scene, \".dds\");\r\n } else {\r\n scene.environmentTexture = new CubeTexture(\r\n url,\r\n scene,\r\n undefined,\r\n undefined,\r\n undefined,\r\n () => {},\r\n (message) => {\r\n if (message) {\r\n Logger.Error(message);\r\n }\r\n },\r\n undefined,\r\n undefined,\r\n \".env\"\r\n );\r\n }\r\n },\r\n undefined,\r\n true\r\n );\r\n }\r\n }}\r\n />\r\n\r\n <BoundProperty component={SyncedSliderPropertyLine} label=\"IBL Intensity\" min={0} max={2} step={0.01} target={scene} propertyKey=\"iblIntensity\" />\r\n\r\n <BoundProperty\r\n component={NumberDropdownPropertyLine}\r\n options={\r\n [\r\n { label: \"None\", value: Scene.FOGMODE_NONE },\r\n { label: \"Linear\", value: Scene.FOGMODE_LINEAR },\r\n { label: \"Exp\", value: Scene.FOGMODE_EXP },\r\n { label: \"Exp2\", value: Scene.FOGMODE_EXP2 },\r\n ] as const\r\n }\r\n label=\"Fog Mode\"\r\n target={scene}\r\n propertyKey=\"fogMode\"\r\n />\r\n <Collapse visible={fogMode !== Scene.FOGMODE_NONE}>\r\n <>\r\n {fogMode !== Scene.FOGMODE_NONE && <BoundProperty component={Color3PropertyLine} label=\"Fog Color\" target={scene} propertyKey=\"fogColor\" />}\r\n {(fogMode === Scene.FOGMODE_EXP || fogMode === Scene.FOGMODE_EXP2) && (\r\n <BoundProperty component={NumberInputPropertyLine} label=\"Fog Density\" target={scene} propertyKey=\"fogDensity\" step={0.1} />\r\n )}\r\n {fogMode === Scene.FOGMODE_LINEAR && <BoundProperty component={NumberInputPropertyLine} label=\"Fog Start\" target={scene} propertyKey=\"fogStart\" step={0.1} />}\r\n {fogMode === Scene.FOGMODE_LINEAR && <BoundProperty component={NumberInputPropertyLine} label=\"Fog End\" target={scene} propertyKey=\"fogEnd\" step={0.1} />}\r\n </>\r\n </Collapse>\r\n </>\r\n );\r\n};\r\n","import type { ServiceDefinition } from \"../../../modularity/serviceDefinition\";\r\nimport type { IPropertiesService } from \"./propertiesService\";\r\nimport { PropertiesServiceIdentity } from \"./propertiesService\";\r\nimport type { ISelectionService } from \"../../selectionService\";\r\nimport { SelectionServiceIdentity } from \"../../selectionService\";\r\nimport {\r\n SceneCollisionsProperties,\r\n SceneMaterialImageProcessingProperties,\r\n ScenePhysicsProperties,\r\n SceneRenderingProperties,\r\n SceneShadowsProperties,\r\n} from \"../../../components/scene/sceneProperties\";\r\nimport { Scene } from \"core/scene\";\r\n\r\nexport const ScenePropertiesServiceDefinition: ServiceDefinition<[], [IPropertiesService, ISelectionService]> = {\r\n friendlyName: \"Scene Properties\",\r\n consumes: [PropertiesServiceIdentity, SelectionServiceIdentity],\r\n factory: (propertiesService, selectionService) => {\r\n const sceneContentRegistration = propertiesService.addSectionContent({\r\n key: \"Scene Properties\",\r\n predicate: (entity: unknown) => entity instanceof Scene,\r\n content: [\r\n {\r\n section: \"Rendering\",\r\n component: ({ context }) => <SceneRenderingProperties scene={context} selectionService={selectionService} />,\r\n },\r\n {\r\n section: \"Material Image Processing\",\r\n component: ({ context }) => <SceneMaterialImageProcessingProperties scene={context} />,\r\n },\r\n {\r\n section: \"Physics\",\r\n component: ({ context }) => <ScenePhysicsProperties scene={context} />,\r\n },\r\n {\r\n section: \"Collisions\",\r\n component: ({ context }) => <SceneCollisionsProperties scene={context} />,\r\n },\r\n {\r\n section: \"Shadows\",\r\n component: ({ context }) => <SceneShadowsProperties scene={context} />,\r\n },\r\n ],\r\n });\r\n return {\r\n dispose: () => {\r\n sceneContentRegistration.dispose();\r\n },\r\n };\r\n },\r\n};\r\n","import type { Bone } from \"core/index\";\r\n\r\nimport type { FunctionComponent } from \"react\";\r\nimport { LinkToEntityPropertyLine } from \"../linkToEntityPropertyLine\";\r\nimport type { ISelectionService } from \"../../../services/selectionService\";\r\n\r\nexport const BoneGeneralProperties: FunctionComponent<{ bone: Bone; selectionService: ISelectionService }> = (props) => {\r\n const { bone } = props;\r\n\r\n return (\r\n <>\r\n <LinkToEntityPropertyLine\r\n key=\"Linked Transform Node\"\r\n label=\"Linked Node\"\r\n description=\"The transform node linked to this bone.\"\r\n entity={bone.getTransformNode()}\r\n selectionService={props.selectionService}\r\n />\r\n </>\r\n );\r\n};\r\n","import type { ISkeletonViewerDisplayOptions, Skeleton } from \"core/index\";\r\nimport type { FunctionComponent } from \"react\";\r\n\r\nimport type { DropdownOption } from \"shared-ui-components/fluent/primitives/dropdown\";\r\n\r\nimport { useReducer, useState } from \"react\";\r\n\r\nimport { SkeletonViewer } from \"core/Debug/skeletonViewer\";\r\nimport { ButtonLine } from \"shared-ui-components/fluent/hoc/buttonLine\";\r\nimport { NumberDropdownPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/dropdownPropertyLine\";\r\nimport { NumberInputPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/inputPropertyLine\";\r\nimport { Collapse } from \"shared-ui-components/fluent/primitives/collapse\";\r\nimport { SwitchPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/switchPropertyLine\";\r\nimport { BoundProperty } from \"../boundProperty\";\r\nimport { StringifiedPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/stringifiedPropertyLine\";\r\n\r\nexport const SkeletonGeneralProperties: FunctionComponent<{ skeleton: Skeleton }> = (props) => {\r\n const { skeleton } = props;\r\n\r\n return (\r\n <>\r\n <StringifiedPropertyLine key=\"SkeletonBoneCount\" label=\"Bone Count\" description=\"The number of bones of the skeleton.\" value={skeleton.bones.length} />\r\n <BoundProperty\r\n key=\"SkeletonUseTextureToStoreBoneMatrices2\"\r\n component={SwitchPropertyLine}\r\n label=\"Use Texture to Store Bone Matrices\"\r\n target={skeleton}\r\n propertyKey=\"useTextureToStoreBoneMatrices\"\r\n />\r\n <ButtonLine key=\"SkeletonReturnToRest\" label=\"Return to Rest\" onClick={() => skeleton.returnToRest()} />\r\n </>\r\n );\r\n};\r\n\r\nconst ViewerDisplayModes = [\r\n { label: \"Lines\", value: SkeletonViewer.DISPLAY_LINES },\r\n { label: \"Spheres\", value: SkeletonViewer.DISPLAY_SPHERES },\r\n { label: \"Sphere and Spurs\", value: SkeletonViewer.DISPLAY_SPHERE_AND_SPURS },\r\n] as const satisfies DropdownOption<number>[];\r\n\r\ninterface IViewerOptions extends Required<ISkeletonViewerDisplayOptions> {\r\n displayMode: number;\r\n}\r\n\r\nexport const SkeletonViewerProperties: FunctionComponent<{ skeleton: Skeleton }> = (props) => {\r\n const { skeleton } = props;\r\n const scene = skeleton.getScene();\r\n\r\n const viewers = scene.meshes\r\n .filter((mesh) => mesh.skeleton === skeleton && mesh.reservedDataStore?.skeletonViewer)\r\n .map((mesh) => mesh.reservedDataStore!.skeletonViewer as SkeletonViewer);\r\n\r\n const [enabled, setEnabled] = useState(viewers.length > 0);\r\n\r\n const initialState = {\r\n displayMode: SkeletonViewer.DISPLAY_LINES,\r\n midStep: 0.235,\r\n midStepFactor: 0.155,\r\n sphereBaseSize: 0.15,\r\n sphereScaleUnit: 2,\r\n sphereFactor: 0.865,\r\n spurFollowsChild: false,\r\n showLocalAxes: false,\r\n localAxesSize: 0.075,\r\n };\r\n\r\n if (viewers.length > 0) {\r\n initialState.displayMode = viewers[0].displayMode;\r\n if (viewers[0].options.displayOptions) {\r\n Object.assign(initialState, viewers[0].options.displayOptions);\r\n }\r\n }\r\n\r\n const [options, updateOptions] = useReducer((options: IViewerOptions, deltaOptions: Partial<IViewerOptions>) => {\r\n const mergedOptions = { ...options, ...deltaOptions } as IViewerOptions;\r\n\r\n for (const viewer of viewers) {\r\n viewer.changeDisplayMode(mergedOptions.displayMode);\r\n viewer.changeDisplayOptions(\"midStep\", mergedOptions.midStep);\r\n viewer.changeDisplayOptions(\"midStepFactor\", mergedOptions.midStepFactor);\r\n viewer.changeDisplayOptions(\"sphereBaseSize\", mergedOptions.sphereBaseSize);\r\n viewer.changeDisplayOptions(\"sphereScaleUnit\", mergedOptions.sphereScaleUnit);\r\n viewer.changeDisplayOptions(\"sphereFactor\", mergedOptions.sphereFactor);\r\n viewer.changeDisplayOptions(\"spurFollowsChild\", mergedOptions.spurFollowsChild);\r\n viewer.changeDisplayOptions(\"showLocalAxes\", mergedOptions.showLocalAxes);\r\n viewer.changeDisplayOptions(\"localAxesSize\", mergedOptions.localAxesSize);\r\n }\r\n\r\n return mergedOptions;\r\n }, initialState);\r\n\r\n return (\r\n <>\r\n <SwitchPropertyLine\r\n key=\"SkeletonViewerEnabled\"\r\n label=\"Enabled\"\r\n description=\"Whether skeleton viewer is enabled or not.\"\r\n value={enabled}\r\n onChange={(checked) => {\r\n if (checked) {\r\n for (const mesh of scene.meshes) {\r\n if (mesh.skeleton === skeleton && !mesh.reservedDataStore?.skeletonViewer) {\r\n mesh.reservedDataStore ||= {};\r\n mesh.reservedDataStore.skeletonViewer = new SkeletonViewer(skeleton, mesh, scene);\r\n }\r\n }\r\n } else {\r\n for (const mesh of scene.meshes) {\r\n if (mesh.skeleton === skeleton && mesh.reservedDataStore?.skeletonViewer) {\r\n mesh.reservedDataStore.skeletonViewer.dispose();\r\n delete mesh.reservedDataStore.skeletonViewer;\r\n }\r\n }\r\n }\r\n\r\n setEnabled(checked);\r\n updateOptions({});\r\n }}\r\n />\r\n\r\n <Collapse visible={enabled}>\r\n <>\r\n <NumberDropdownPropertyLine\r\n key=\"SkeletonViewerDisplayMode\"\r\n label=\"Display Mode\"\r\n options={ViewerDisplayModes}\r\n description=\"Show lines, spheres, or sphere and spurs.\"\r\n value={options.displayMode}\r\n onChange={(value) => updateOptions({ displayMode: value })}\r\n />\r\n <Collapse visible={options.displayMode !== SkeletonViewer.DISPLAY_LINES}>\r\n <>\r\n <NumberInputPropertyLine\r\n key=\"SkeletonViewerDisplayOptionsMidStep\"\r\n label=\"Mid Step\"\r\n value={options.midStep}\r\n description=\"How far down to start tapering the bone spurs.\"\r\n onChange={(value) => updateOptions({ midStep: value })}\r\n />\r\n <NumberInputPropertyLine\r\n key=\"SkeletonViewerDisplayOptionsMidStepFactor\"\r\n label=\"Mid Step Factor\"\r\n value={options.midStepFactor}\r\n description=\"How big is the midStep?\"\r\n onChange={(value) => updateOptions({ midStepFactor: value })}\r\n />\r\n <NumberInputPropertyLine\r\n key=\"SkeletonViewerDisplayOptionsSphereBaseSize\"\r\n label=\"Sphere Base Size\"\r\n value={options.sphereBaseSize}\r\n description=\"Base for the Sphere Size.\"\r\n onChange={(value) => updateOptions({ sphereBaseSize: value })}\r\n />\r\n <NumberInputPropertyLine\r\n key=\"SkeletonViewerDisplayOptionsSphereScaleUnit\"\r\n label=\"Sphere Scale Unit\"\r\n value={options.sphereScaleUnit}\r\n description=\"The ratio of the sphere to the longest bone in units.\"\r\n onChange={(value) => updateOptions({ sphereScaleUnit: value })}\r\n />\r\n <NumberInputPropertyLine\r\n key=\"SkeletonViewerDisplayOptionsSphereFactor\"\r\n label=\"Sphere Factor\"\r\n value={options.sphereFactor}\r\n description=\"Ratio for the Sphere Size.\"\r\n onChange={(value) => updateOptions({ sphereFactor: value })}\r\n />\r\n <SwitchPropertyLine\r\n key=\"SkeletonViewerDisplayOptionsSpurFollowsChild\"\r\n label=\"Spur Follows Child\"\r\n value={options.spurFollowsChild}\r\n description=\"Whether a spur should attach its far end to the child bone position.\"\r\n onChange={(checked) => updateOptions({ spurFollowsChild: checked })}\r\n />\r\n <SwitchPropertyLine\r\n key=\"SkeletonViewerDisplayOptionsShowLocalAxes\"\r\n label=\"Show Local Axes\"\r\n value={options.showLocalAxes}\r\n description=\"Whether to show local axes or not.\"\r\n onChange={(checked) => updateOptions({ showLocalAxes: checked })}\r\n />\r\n <NumberInputPropertyLine\r\n key=\"SkeletonViewerDisplayOptionsLocalAxesSize\"\r\n label=\"Local Axes Size\"\r\n value={options.localAxesSize}\r\n description=\"Length of each local axis.\"\r\n onChange={(value) => updateOptions({ localAxesSize: value })}\r\n />\r\n </>\r\n </Collapse>\r\n </>\r\n </Collapse>\r\n </>\r\n );\r\n};\r\n","import type { ServiceDefinition } from \"../../../modularity/serviceDefinition\";\r\nimport type { ISelectionService } from \"../../selectionService\";\r\nimport type { IPropertiesService } from \"./propertiesService\";\r\n\r\nimport { Bone } from \"core/Bones/bone\";\r\nimport { Skeleton } from \"core/Bones/skeleton\";\r\nimport { BoneGeneralProperties } from \"../../../components/properties/skeleton/boneProperties\";\r\nimport { SkeletonGeneralProperties, SkeletonViewerProperties } from \"../../../components/properties/skeleton/skeletonProperties\";\r\nimport { SelectionServiceIdentity } from \"../../selectionService\";\r\nimport { PropertiesServiceIdentity } from \"./propertiesService\";\r\n\r\nexport const SkeletonPropertiesServiceDefinition: ServiceDefinition<[], [IPropertiesService, ISelectionService]> = {\r\n friendlyName: \"Skeleton Properties\",\r\n consumes: [PropertiesServiceIdentity, SelectionServiceIdentity],\r\n factory: (propertiesService, selectionService) => {\r\n const skeletonGeneralContentRegistration = propertiesService.addSectionContent({\r\n key: \"Skeleton General Properties\",\r\n predicate: (entity) => entity instanceof Skeleton,\r\n content: [\r\n {\r\n section: \"General\",\r\n component: ({ context }) => <SkeletonGeneralProperties skeleton={context} />,\r\n },\r\n ],\r\n });\r\n\r\n const skeletonViewerContentRegistration = propertiesService.addSectionContent({\r\n key: \"Skeleton Viewer Properties\",\r\n predicate: (entity) => entity instanceof Skeleton,\r\n content: [\r\n {\r\n section: \"Viewer\",\r\n component: ({ context }) => <SkeletonViewerProperties skeleton={context} />,\r\n },\r\n ],\r\n });\r\n\r\n const boneGeneralContentRegistration = propertiesService.addSectionContent({\r\n key: \"Bone General Properties\",\r\n predicate: (entity) => entity instanceof Bone,\r\n content: [\r\n {\r\n section: \"General\",\r\n component: ({ context }) => <BoneGeneralProperties bone={context} selectionService={selectionService} />,\r\n },\r\n ],\r\n });\r\n\r\n return {\r\n dispose: () => {\r\n boneGeneralContentRegistration.dispose();\r\n skeletonViewerContentRegistration.dispose();\r\n skeletonGeneralContentRegistration.dispose();\r\n },\r\n };\r\n },\r\n};\r\n","import { PropertyLine } from \"./propertyLine\";\r\nimport type { PropertyLineProps } from \"./propertyLine\";\r\nimport type { FunctionComponent } from \"react\";\r\nimport { SpinButton } from \"../../primitives/spinButton\";\r\nimport type { SpinButtonProps } from \"../../primitives/spinButton\";\r\n\r\nexport const SpinButtonPropertyLine: FunctionComponent<PropertyLineProps<number> & SpinButtonProps> = (props) => {\r\n SpinButtonPropertyLine.displayName = \"SpinButtonPropertyLine\";\r\n return (\r\n <PropertyLine {...props}>\r\n <SpinButton {...props} />\r\n </PropertyLine>\r\n );\r\n};\r\n","import type { FunctionComponent } from \"react\";\r\n\r\nimport type { SpriteManager } from \"core/Sprites/spriteManager\";\r\nimport type { ISelectionService } from \"../../../services/selectionService\";\r\n\r\nimport { RenderingManager } from \"core/Rendering/renderingManager\";\r\nimport { AlphaModeOptions } from \"shared-ui-components/constToOptionsMaps\";\r\nimport { NumberDropdownPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/dropdownPropertyLine\";\r\nimport { SpinButtonPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/spinButtonPropertyLine\";\r\nimport { SwitchPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/switchPropertyLine\";\r\nimport { SyncedSliderPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/syncedSliderPropertyLine\";\r\nimport { TextPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/textPropertyLine\";\r\nimport { useProperty } from \"../../../hooks/compoundPropertyHooks\";\r\nimport { BoundProperty } from \"../boundProperty\";\r\nimport { LinkToEntityPropertyLine } from \"../linkToEntityPropertyLine\";\r\n\r\nexport const SpriteManagerGeneralProperties: FunctionComponent<{ spriteManager: SpriteManager; selectionService: ISelectionService }> = (props) => {\r\n const { spriteManager, selectionService } = props;\r\n\r\n const texture = useProperty(spriteManager, \"texture\");\r\n\r\n return (\r\n <>\r\n <TextPropertyLine label=\"Capacity\" value={spriteManager.capacity.toString()} />\r\n <LinkToEntityPropertyLine label=\"Texture\" entity={texture} selectionService={selectionService} />\r\n </>\r\n );\r\n};\r\n\r\nexport const SpriteManagerOtherProperties: FunctionComponent<{ spriteManager: SpriteManager }> = (props) => {\r\n const { spriteManager } = props;\r\n\r\n return (\r\n <>\r\n <BoundProperty component={SwitchPropertyLine} key=\"IsPickable\" label=\"Pickable\" target={spriteManager} propertyKey=\"isPickable\" />\r\n <BoundProperty component={SwitchPropertyLine} key=\"FogEnabled\" label=\"Fog Enabled\" target={spriteManager} propertyKey=\"fogEnabled\" />\r\n <BoundProperty\r\n component={SwitchPropertyLine}\r\n key=\"DepthWrite\"\r\n label=\"Depth Write\"\r\n target={spriteManager}\r\n propertyKey=\"disableDepthWrite\"\r\n convertTo={(value) => !value}\r\n convertFrom={(value) => !value}\r\n />\r\n <BoundProperty\r\n component={SyncedSliderPropertyLine}\r\n key=\"RenderingGroupId\"\r\n label=\"Rendering Group ID\"\r\n target={spriteManager}\r\n propertyKey=\"renderingGroupId\"\r\n min={RenderingManager.MIN_RENDERINGGROUPS}\r\n max={RenderingManager.MAX_RENDERINGGROUPS}\r\n step={1}\r\n />\r\n <BoundProperty component={NumberDropdownPropertyLine} key=\"BlendMode\" label=\"Blend Mode\" target={spriteManager} propertyKey=\"blendMode\" options={AlphaModeOptions} />\r\n </>\r\n );\r\n};\r\n\r\nexport const SpriteManagerCellProperties: FunctionComponent<{ spriteManager: SpriteManager }> = (props) => {\r\n const { spriteManager } = props;\r\n\r\n return (\r\n <>\r\n <BoundProperty component={SpinButtonPropertyLine} key=\"CellWidth\" label=\"Cell Width\" target={spriteManager} propertyKey=\"cellWidth\" min={1} step={1} />\r\n <BoundProperty component={SpinButtonPropertyLine} key=\"CellHeight\" label=\"Cell Height\" target={spriteManager} propertyKey=\"cellHeight\" min={1} step={1} />\r\n </>\r\n );\r\n};\r\n","import type { FunctionComponent } from \"react\";\r\n\r\nimport type { Sprite } from \"core/index\";\r\nimport type { ISelectionService } from \"../../../services/selectionService\";\r\nimport type { ISettingsContext } from \"../../../services/settingsContext\";\r\n\r\nimport { PlayFilled, StopFilled } from \"@fluentui/react-icons\";\r\nimport { useCallback } from \"react\";\r\n\r\nimport { ButtonLine } from \"shared-ui-components/fluent/hoc/buttonLine\";\r\nimport { Color4PropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/colorPropertyLine\";\r\nimport { NumberInputPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/inputPropertyLine\";\r\nimport { SwitchPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/switchPropertyLine\";\r\nimport { SyncedSliderPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/syncedSliderPropertyLine\";\r\nimport { Vector3PropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/vectorPropertyLine\";\r\nimport { useColor4Property, useProperty } from \"../../../hooks/compoundPropertyHooks\";\r\nimport { useInterceptObservable } from \"../../../hooks/instrumentationHooks\";\r\nimport { useObservableState } from \"../../../hooks/observableHooks\";\r\nimport { useAngleConverters } from \"../../../hooks/settingsHooks\";\r\nimport { BoundProperty } from \"../boundProperty\";\r\nimport { LinkToEntityPropertyLine } from \"../linkToEntityPropertyLine\";\r\n\r\nfunction useMaxCellCount(sprite: Sprite) {\r\n const manager = sprite.manager;\r\n const texture = useProperty(manager, \"texture\");\r\n const textureSize = texture.getSize();\r\n\r\n let maxCellCount = 0;\r\n if (!textureSize.width || !textureSize.height) {\r\n maxCellCount = Math.max(sprite.fromIndex, sprite.toIndex);\r\n } else {\r\n maxCellCount = (textureSize.width / manager.cellWidth) * (textureSize.height / manager.cellHeight);\r\n }\r\n\r\n return maxCellCount;\r\n}\r\n\r\nexport const SpriteGeneralProperties: FunctionComponent<{ sprite: Sprite; selectionService: ISelectionService }> = (props) => {\r\n const { sprite, selectionService } = props;\r\n\r\n return (\r\n <>\r\n <LinkToEntityPropertyLine\r\n key=\"Parent\"\r\n label=\"Parent\"\r\n description={`Sprite Manager that owns this sprite.`}\r\n entity={sprite.manager}\r\n selectionService={selectionService}\r\n />\r\n <BoundProperty\r\n component={SwitchPropertyLine}\r\n key=\"IsVisible\"\r\n label=\"Is Visible\"\r\n description=\"Whether the sprite is visible or not.\"\r\n target={sprite}\r\n propertyKey=\"isVisible\"\r\n />\r\n </>\r\n );\r\n};\r\n\r\nexport const SpriteTransformProperties: FunctionComponent<{ sprite: Sprite; settings: ISettingsContext }> = (props) => {\r\n const { sprite, settings } = props;\r\n\r\n const [toDisplayAngle, fromDisplayAngle, useDegrees] = useAngleConverters(settings);\r\n\r\n return (\r\n <>\r\n <BoundProperty component={Vector3PropertyLine} label=\"Position\" target={sprite} propertyKey=\"position\" />\r\n <BoundProperty\r\n component={SyncedSliderPropertyLine}\r\n key=\"Angle\"\r\n label=\"Angle\"\r\n description={`Rotation angle of the sprite in ${useDegrees ? \"degrees\" : \"radians\"}`}\r\n min={0}\r\n max={toDisplayAngle(Math.PI * 2)}\r\n step={toDisplayAngle(0.01)}\r\n target={sprite}\r\n propertyKey=\"angle\"\r\n convertTo={toDisplayAngle}\r\n convertFrom={fromDisplayAngle}\r\n />\r\n <BoundProperty\r\n component={SyncedSliderPropertyLine}\r\n key=\"Width\"\r\n label=\"Width\"\r\n description=\"Width of the sprite (in world space units)\"\r\n target={sprite}\r\n propertyKey=\"width\"\r\n />\r\n <BoundProperty\r\n component={SyncedSliderPropertyLine}\r\n key={\"Height\"}\r\n label=\"Height\"\r\n description=\"Height of the sprite (in world space units)\"\r\n target={sprite}\r\n propertyKey=\"height\"\r\n />\r\n </>\r\n );\r\n};\r\n\r\nexport const SpriteAnimationProperties: FunctionComponent<{ sprite: Sprite }> = (props) => {\r\n const { sprite } = props;\r\n\r\n const animationStarted = useObservableState(\r\n useCallback(() => sprite.animationStarted, [sprite]),\r\n useInterceptObservable(\"function\", sprite, \"playAnimation\"),\r\n useInterceptObservable(\"function\", sprite, \"stopAnimation\"),\r\n useInterceptObservable(\"function\", sprite, \"_animate\")\r\n );\r\n\r\n const maxCellCount = useMaxCellCount(sprite);\r\n\r\n return (\r\n <>\r\n <BoundProperty\r\n component={NumberInputPropertyLine}\r\n key=\"Start\"\r\n label=\"Start\"\r\n description=\"First frame of the animation.\"\r\n min={0}\r\n max={maxCellCount}\r\n target={sprite}\r\n propertyKey=\"fromIndex\"\r\n />\r\n <BoundProperty\r\n component={NumberInputPropertyLine}\r\n key=\"End\"\r\n label=\"End\"\r\n description=\"Last frame of the animation.\"\r\n min={0}\r\n max={maxCellCount}\r\n target={sprite}\r\n propertyKey=\"toIndex\"\r\n />\r\n <BoundProperty component={SwitchPropertyLine} key=\"Loop\" label=\"Loop\" description=\"Whether to loop the animation.\" target={sprite} propertyKey=\"loopAnimation\" />\r\n <BoundProperty\r\n component={NumberInputPropertyLine}\r\n key=\"Delay\"\r\n label=\"Delay\"\r\n description=\"Delay between frames in milliseconds.\"\r\n min={0}\r\n target={sprite}\r\n propertyKey=\"delay\"\r\n />\r\n <ButtonLine\r\n label={animationStarted ? \"Stop Animation\" : \"Start Animation\"}\r\n icon={animationStarted ? StopFilled : PlayFilled}\r\n onClick={() => {\r\n if (animationStarted) {\r\n sprite.stopAnimation();\r\n } else {\r\n sprite.playAnimation(sprite.fromIndex, sprite.toIndex, sprite.loopAnimation, sprite.delay);\r\n }\r\n }}\r\n />\r\n </>\r\n );\r\n};\r\n\r\nexport const SpriteOtherProperties: FunctionComponent<{ sprite: Sprite }> = (props) => {\r\n const { sprite } = props;\r\n\r\n const color = useColor4Property(sprite, \"color\");\r\n\r\n return (\r\n <>\r\n <Color4PropertyLine key=\"Color\" label=\"Color\" description=\"Color to tint the sprite.\" value={color} onChange={(col) => (sprite.color = col)} />\r\n <BoundProperty component={SwitchPropertyLine} key=\"IsPickable\" label=\"Pickable\" target={sprite} propertyKey=\"isPickable\" />\r\n <BoundProperty component={SwitchPropertyLine} key=\"UseAlphaForPicking\" label=\"Use Alpha for Picking\" target={sprite} propertyKey=\"useAlphaForPicking\" />\r\n </>\r\n );\r\n};\r\n\r\nexport const SpriteCellProperties: FunctionComponent<{ sprite: Sprite }> = (props) => {\r\n const { sprite } = props;\r\n\r\n const maxCellCount = useMaxCellCount(sprite);\r\n\r\n return (\r\n <>\r\n <BoundProperty component={SyncedSliderPropertyLine} key=\"CellIndex\" label=\"Cell Index\" target={sprite} propertyKey=\"cellIndex\" min={0} step={1} max={maxCellCount} />\r\n <BoundProperty component={SwitchPropertyLine} key=\"InvertU\" label=\"Invert U\" target={sprite} propertyKey=\"invertU\" />\r\n <BoundProperty component={SwitchPropertyLine} key=\"InvertV\" label=\"Invert V\" target={sprite} propertyKey=\"invertV\" />\r\n </>\r\n );\r\n};\r\n","import type { ServiceDefinition } from \"../../../modularity/serviceDefinition\";\r\nimport type { ISettingsContext } from \"../../../services/settingsContext\";\r\nimport type { ISelectionService } from \"../../selectionService\";\r\nimport type { IPropertiesService } from \"./propertiesService\";\r\n\r\nimport { Sprite } from \"core/Sprites/sprite\";\r\nimport { SpriteManager } from \"core/Sprites/spriteManager\";\r\nimport { SpriteManagerCellProperties, SpriteManagerGeneralProperties, SpriteManagerOtherProperties } from \"../../../components/properties/sprites/spriteManagerProperties\";\r\nimport {\r\n SpriteAnimationProperties,\r\n SpriteCellProperties,\r\n SpriteGeneralProperties,\r\n SpriteOtherProperties,\r\n SpriteTransformProperties,\r\n} from \"../../../components/properties/sprites/spriteProperties\";\r\nimport { SettingsContextIdentity } from \"../../../services/settingsContext\";\r\nimport { SelectionServiceIdentity } from \"../../selectionService\";\r\nimport { PropertiesServiceIdentity } from \"./propertiesService\";\r\n\r\nexport const SpritePropertiesServiceDefinition: ServiceDefinition<[], [IPropertiesService, ISelectionService, ISettingsContext]> = {\r\n friendlyName: \"Sprite Properties\",\r\n consumes: [PropertiesServiceIdentity, SelectionServiceIdentity, SettingsContextIdentity],\r\n factory: (propertiesService, selectionService, settingsContent) => {\r\n const spriteManagerSectionContentRegistration = propertiesService.addSectionContent({\r\n key: \"Sprite Manager Properties\",\r\n predicate: (entity: unknown) => entity instanceof SpriteManager,\r\n content: [\r\n {\r\n section: \"General\",\r\n component: ({ context }) => <SpriteManagerGeneralProperties spriteManager={context} selectionService={selectionService} />,\r\n },\r\n {\r\n section: \"Cells\",\r\n component: ({ context }) => <SpriteManagerCellProperties spriteManager={context} />,\r\n },\r\n {\r\n section: \"Other\",\r\n component: ({ context }) => <SpriteManagerOtherProperties spriteManager={context} />,\r\n },\r\n ],\r\n });\r\n\r\n const spriteSectionContentRegistration = propertiesService.addSectionContent({\r\n key: \"Sprite Properties\",\r\n predicate: (entity: unknown) => entity instanceof Sprite,\r\n content: [\r\n {\r\n section: \"General\",\r\n component: ({ context }) => <SpriteGeneralProperties sprite={context} selectionService={selectionService} />,\r\n },\r\n {\r\n section: \"Transform\",\r\n component: ({ context }) => <SpriteTransformProperties sprite={context} settings={settingsContent} />,\r\n },\r\n {\r\n section: \"Cell\",\r\n component: ({ context }) => <SpriteCellProperties sprite={context} />,\r\n },\r\n {\r\n section: \"Animation\",\r\n component: ({ context }) => <SpriteAnimationProperties sprite={context} />,\r\n },\r\n {\r\n section: \"Other\",\r\n component: ({ context }) => <SpriteOtherProperties sprite={context} />,\r\n },\r\n ],\r\n });\r\n\r\n return {\r\n dispose: () => {\r\n spriteManagerSectionContentRegistration.dispose();\r\n spriteSectionContentRegistration.dispose();\r\n },\r\n };\r\n },\r\n};\r\n","import type { SpinnerProps } from \"@fluentui/react-components\";\r\nimport type { ComponentProps, ComponentType, ElementRef, Ref } from \"react\";\r\n\r\nimport { Spinner } from \"@fluentui/react-components\";\r\nimport { forwardRef, lazy, Suspense } from \"react\";\r\n\r\ntype LazyComponentProps = {\r\n spinnerSize?: SpinnerProps[\"size\"];\r\n spinnerLabel?: string;\r\n};\r\n\r\n/**\r\n * Creates a lazy component wrapper that only calls the async function to get the underlying component when the lazy component is actually mounted.\r\n * This allows deferring imports until they are needed. While the underlying component is being loaded, a spinner is displayed.\r\n * @param getComponentAsync A function that returns a promise resolving to the component.\r\n * @param defaultProps Options for the loading spinner.\r\n * @returns A React component that displays a spinner while loading the async component.\r\n */\r\nexport function MakeLazyComponent<ComponentT extends ComponentType<any>>(getComponentAsync: () => Promise<ComponentT>, defaultProps?: LazyComponentProps) {\r\n type WrappedComponentProps = ComponentProps<ComponentT> & LazyComponentProps;\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n const LazyComponent = lazy(async () => {\r\n const component = await getComponentAsync();\r\n return { default: component };\r\n });\r\n\r\n return forwardRef<ElementRef<typeof Spinner | ComponentT>, WrappedComponentProps>((props, ref) => {\r\n const { spinnerSize = defaultProps?.spinnerSize, spinnerLabel = defaultProps?.spinnerLabel, ...rest } = props;\r\n\r\n const componentProps = { ...rest, ref };\r\n\r\n return (\r\n <Suspense fallback={<Spinner ref={ref as Ref<ElementRef<typeof Spinner>>} size={spinnerSize} label={spinnerLabel} />}>\r\n <LazyComponent {...(componentProps as ComponentProps<ComponentT>)} />\r\n </Suspense>\r\n );\r\n });\r\n}\r\n","import type { AdvancedDynamicTexture } from \"gui/2D/advancedDynamicTexture\";\r\n\r\nimport { useCallback } from \"react\";\r\n\r\nimport { NumberInputPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/inputPropertyLine\";\r\nimport { SwitchPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/switchPropertyLine\";\r\nimport { SyncedSliderPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/syncedSliderPropertyLine\";\r\nimport { useObservableState } from \"../../../hooks/observableHooks\";\r\nimport { usePollingObservable } from \"../../../hooks/pollingHooks\";\r\nimport { useResource } from \"../../../hooks/resourceHooks\";\r\nimport { BoundProperty } from \"../boundProperty\";\r\nimport { MakeLazyComponent } from \"shared-ui-components/fluent/primitives/lazyComponent\";\r\nimport { StringifiedPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/stringifiedPropertyLine\";\r\n\r\nexport const AdvancedDynamicTextureGeneralProperties = MakeLazyComponent(\r\n async () => {\r\n // Defer importing anything from the gui package until this component is actually mounted.\r\n const { AdvancedDynamicTextureInstrumentation } = await import(\"gui/2D/adtInstrumentation\");\r\n\r\n return (props: { texture: AdvancedDynamicTexture }) => {\r\n const { texture } = props;\r\n\r\n const instrumentation = useResource(\r\n useCallback(() => {\r\n const instrumentation = new AdvancedDynamicTextureInstrumentation(texture);\r\n instrumentation.captureRenderTime = true;\r\n instrumentation.captureLayoutTime = true;\r\n return instrumentation;\r\n }, [texture])\r\n );\r\n\r\n const layoutTime = useObservableState(\r\n useCallback(() => instrumentation.layoutTimeCounter.current, [instrumentation.layoutTimeCounter]),\r\n usePollingObservable(1000)\r\n );\r\n\r\n const renderTime = useObservableState(\r\n useCallback(() => instrumentation.renderTimeCounter.current, [instrumentation.renderTimeCounter]),\r\n usePollingObservable(1000)\r\n );\r\n\r\n return (\r\n <>\r\n <StringifiedPropertyLine label=\"Last Layout Time\" value={layoutTime} precision={2} units=\"ms\" />\r\n <StringifiedPropertyLine label=\"Last Render Time\" value={renderTime} precision={2} units=\"ms\" />\r\n <BoundProperty component={SyncedSliderPropertyLine} label=\"Render Scale\" target={texture} propertyKey=\"renderScale\" min={0.1} max={5} step={0.1} />\r\n <BoundProperty component={SwitchPropertyLine} label=\"Premultiply Alpha\" target={texture} propertyKey=\"premulAlpha\" />\r\n <BoundProperty component={NumberInputPropertyLine} label=\"Ideal Width\" target={texture} propertyKey=\"idealWidth\" />\r\n <BoundProperty component={NumberInputPropertyLine} label=\"Ideal Height\" target={texture} propertyKey=\"idealHeight\" />\r\n <BoundProperty component={SwitchPropertyLine} label=\"Use Smallest Ideal\" target={texture} propertyKey=\"useSmallestIdeal\" />\r\n <BoundProperty component={SwitchPropertyLine} label=\"Render at Ideal Size\" target={texture} propertyKey=\"renderAtIdealSize\" />\r\n <BoundProperty component={SwitchPropertyLine} label=\"Invalidate Rect Optimization\" target={texture} propertyKey=\"useInvalidateRectOptimization\" />\r\n </>\r\n );\r\n };\r\n },\r\n { spinnerSize: \"extra-tiny\", spinnerLabel: \"Loading...\" }\r\n);\r\n","import { Constants } from \"core/Engines/constants\";\r\n\r\nexport const TextureFormat = [\r\n { label: \"Alpha\", normalizable: false, value: Constants.TEXTUREFORMAT_ALPHA },\r\n { label: \"Luminance\", normalizable: false, value: Constants.TEXTUREFORMAT_LUMINANCE },\r\n { label: \"Luminance/Alpha\", normalizable: false, value: Constants.TEXTUREFORMAT_LUMINANCE_ALPHA },\r\n { label: \"RGB\", normalizable: true, value: Constants.TEXTUREFORMAT_RGB },\r\n { label: \"RGBA\", normalizable: true, value: Constants.TEXTUREFORMAT_RGBA },\r\n { label: \"R (red)\", normalizable: true, value: Constants.TEXTUREFORMAT_RED },\r\n { label: \"RG (red/green)\", normalizable: true, value: Constants.TEXTUREFORMAT_RG },\r\n { label: \"R (red) integer\", normalizable: false, value: Constants.TEXTUREFORMAT_RED_INTEGER },\r\n { label: \"RG (red/green) integer\", normalizable: false, value: Constants.TEXTUREFORMAT_RG_INTEGER },\r\n { label: \"RGB integer\", normalizable: false, value: Constants.TEXTUREFORMAT_RGB_INTEGER },\r\n { label: \"RGBA integer\", normalizable: false, value: Constants.TEXTUREFORMAT_RGBA_INTEGER },\r\n { label: \"BGRA\", normalizable: true, value: Constants.TEXTUREFORMAT_BGRA },\r\n { label: \"Depth24/Stencil8\", normalizable: false, hideType: true, value: Constants.TEXTUREFORMAT_DEPTH24_STENCIL8 },\r\n { label: \"Depth32 float\", normalizable: false, hideType: true, value: Constants.TEXTUREFORMAT_DEPTH32_FLOAT },\r\n { label: \"Depth16\", normalizable: false, value: Constants.TEXTUREFORMAT_DEPTH16 },\r\n { label: \"Depth24\", normalizable: false, value: Constants.TEXTUREFORMAT_DEPTH24 },\r\n { label: \"Depth24Unorm/Stencil8\", normalizable: false, hideType: true, value: Constants.TEXTUREFORMAT_DEPTH24UNORM_STENCIL8 },\r\n { label: \"Depth32Float/Stencil8\", normalizable: false, hideType: true, value: Constants.TEXTUREFORMAT_DEPTH32FLOAT_STENCIL8 },\r\n { label: \"RGBA BPTC UNorm\", normalizable: false, compressed: true, value: Constants.TEXTUREFORMAT_COMPRESSED_RGBA_BPTC_UNORM },\r\n { label: \"RGB BPTC UFloat\", normalizable: false, compressed: true, value: Constants.TEXTUREFORMAT_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT },\r\n { label: \"RGB BPTC SFloat\", normalizable: false, compressed: true, value: Constants.TEXTUREFORMAT_COMPRESSED_RGB_BPTC_SIGNED_FLOAT },\r\n { label: \"RGBA S3TC DXT5\", normalizable: false, compressed: true, value: Constants.TEXTUREFORMAT_COMPRESSED_RGBA_S3TC_DXT5 },\r\n { label: \"RGBA S3TC DXT3\", normalizable: false, compressed: true, value: Constants.TEXTUREFORMAT_COMPRESSED_RGBA_S3TC_DXT3 },\r\n { label: \"RGBA S3TC DXT1\", normalizable: false, compressed: true, value: Constants.TEXTUREFORMAT_COMPRESSED_RGBA_S3TC_DXT1 },\r\n { label: \"RGB S3TC DXT1\", normalizable: false, compressed: true, value: Constants.TEXTUREFORMAT_COMPRESSED_RGB_S3TC_DXT1 },\r\n { label: \"RGBA ASTC 4x4\", normalizable: false, compressed: true, value: Constants.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_4x4 },\r\n];\r\n\r\nexport function FindTextureFormat(format: number) {\r\n for (let i = 0; i < TextureFormat.length; ++i) {\r\n if (TextureFormat[i].value === format) {\r\n return TextureFormat[i];\r\n }\r\n }\r\n return null;\r\n}\r\n\r\nexport const TextureType = [\r\n { label: \"unsigned byte\", normalizable: true, value: Constants.TEXTURETYPE_UNSIGNED_BYTE },\r\n { label: \"32-bit float\", normalizable: false, value: Constants.TEXTURETYPE_FLOAT },\r\n { label: \"16-bit float\", normalizable: false, value: Constants.TEXTURETYPE_HALF_FLOAT },\r\n { label: \"signed byte\", normalizable: true, value: Constants.TEXTURETYPE_BYTE },\r\n { label: \"signed short\", normalizable: false, value: Constants.TEXTURETYPE_SHORT },\r\n { label: \"unsigned short\", normalizable: false, value: Constants.TEXTURETYPE_UNSIGNED_SHORT },\r\n { label: \"signed int\", normalizable: false, value: Constants.TEXTURETYPE_INT },\r\n { label: \"unsigned int\", normalizable: false, value: Constants.TEXTURETYPE_UNSIGNED_INTEGER },\r\n { label: \"unsigned 4/4/4/4 short\", normalizable: false, value: Constants.TEXTURETYPE_UNSIGNED_SHORT_4_4_4_4 },\r\n { label: \"unsigned 5/5/5/1 short\", normalizable: false, value: Constants.TEXTURETYPE_UNSIGNED_SHORT_5_5_5_1 },\r\n { label: \"unsigned 5/6/5 short\", normalizable: false, value: Constants.TEXTURETYPE_UNSIGNED_SHORT_5_6_5 },\r\n { label: \"unsigned 2/10/10/10 int\", normalizable: false, value: Constants.TEXTURETYPE_UNSIGNED_INT_2_10_10_10_REV },\r\n { label: \"unsigned 24/8 int\", normalizable: false, value: Constants.TEXTURETYPE_UNSIGNED_INT_24_8 },\r\n { label: \"unsigned 10f/11f/11f int\", normalizable: false, value: Constants.TEXTURETYPE_UNSIGNED_INT_10F_11F_11F_REV },\r\n { label: \"unsigned 5/9/9/9 int\", normalizable: false, value: Constants.TEXTURETYPE_UNSIGNED_INT_5_9_9_9_REV },\r\n { label: \"32-bits with only 8-bit used (stencil)\", normalizable: false, value: Constants.TEXTURETYPE_FLOAT_32_UNSIGNED_INT_24_8_REV },\r\n];\r\n\r\nexport function FindTextureType(type: number) {\r\n for (let i = 0; i < TextureType.length; ++i) {\r\n if (TextureType[i].value === type) {\r\n return TextureType[i];\r\n }\r\n }\r\n return null;\r\n}\r\n","import type { BaseTexture } from \"core/Materials/Textures/baseTexture\";\r\nimport { Button, Toolbar, ToolbarButton, makeStyles, tokens } from \"@fluentui/react-components\";\r\nimport { useRef, useState, useEffect, useCallback, useContext } from \"react\";\r\nimport type { FunctionComponent } from \"react\";\r\nimport { GetTextureDataAsync, WhenTextureReadyAsync } from \"core/Misc/textureTools\";\r\nimport { useProperty } from \"../../../hooks/compoundPropertyHooks\";\r\nimport type { Texture } from \"core/Materials\";\r\nimport { ToolContext } from \"shared-ui-components/fluent/hoc/fluentToolWrapper\";\r\n\r\nconst useStyles = makeStyles({\r\n root: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n },\r\n controls: {\r\n display: \"flex\",\r\n gap: tokens.spacingHorizontalXS,\r\n },\r\n controlButton: {\r\n minWidth: \"auto\",\r\n flex: \"1 1 0\", // Equal flex grow/shrink with 0 basis\r\n paddingVertical: tokens.spacingVerticalXS,\r\n paddingHorizontal: tokens.spacingHorizontalS,\r\n overflow: \"hidden\",\r\n textOverflow: \"ellipsis\",\r\n },\r\n preview: {\r\n border: `1px solid ${tokens.colorNeutralStroke1}`,\r\n marginTop: tokens.spacingVerticalXS,\r\n maxWidth: \"100%\",\r\n marginLeft: \"auto\",\r\n marginRight: \"auto\",\r\n marginBottom: tokens.spacingVerticalS,\r\n display: \"block\",\r\n },\r\n});\r\n\r\n// This method of holding TextureChannels was brought over from inspectorv1 and can likely be refactored/simplified\r\nconst TextureChannelStates = {\r\n R: { R: true, G: false, B: false, A: false },\r\n G: { R: false, G: true, B: false, A: false },\r\n B: { R: false, G: false, B: true, A: false },\r\n A: { R: false, G: false, B: false, A: true },\r\n ALL: { R: true, G: true, B: true, A: true },\r\n} as const;\r\n\r\ntype TexturePreviewProps = {\r\n texture: BaseTexture;\r\n width: number;\r\n height: number;\r\n};\r\n\r\nexport const TexturePreview: FunctionComponent<TexturePreviewProps> = (props) => {\r\n const { texture, width, height } = props;\r\n const classes = useStyles();\r\n const canvasRef = useRef<HTMLCanvasElement>(null);\r\n const [channels, setChannels] = useState<(typeof TextureChannelStates)[keyof typeof TextureChannelStates]>(TextureChannelStates.ALL);\r\n const [face, setFace] = useState(0);\r\n const internalTexture = useProperty(texture, \"_texture\");\r\n\r\n const { size } = useContext(ToolContext);\r\n\r\n const updatePreviewCanvasSize = useCallback(\r\n (previewCanvas: HTMLCanvasElement) => {\r\n // This logic was brought over from inspectorv1 and can likely be refactored/simplified\r\n const size = texture.getSize();\r\n const ratio = size.width / size.height;\r\n let w = width;\r\n let h = (w / ratio) | 1;\r\n const engine = texture.getScene()?.getEngine();\r\n\r\n if (engine && h > engine.getCaps().maxTextureSize) {\r\n w = size.width;\r\n h = size.height;\r\n }\r\n\r\n previewCanvas.width = w;\r\n previewCanvas.height = h;\r\n previewCanvas.style.width = w + \"px\";\r\n previewCanvas.style.height = h + \"px\";\r\n\r\n return {\r\n w: w,\r\n h: h,\r\n };\r\n },\r\n [canvasRef.current, texture, width, height, internalTexture]\r\n );\r\n\r\n const updatePreviewAsync = useCallback(async () => {\r\n const previewCanvas = canvasRef.current;\r\n if (!previewCanvas) {\r\n return;\r\n }\r\n try {\r\n await WhenTextureReadyAsync(texture); // Ensure texture is loaded before grabbing size\r\n const { w, h } = updatePreviewCanvasSize(previewCanvas); // Grab desired size\r\n const data = await ApplyChannelsToTextureDataAsync(texture, w, h, face, channels); // get channel data to load onto canvas context\r\n const context = previewCanvas.getContext(\"2d\");\r\n if (context) {\r\n const imageData = context.createImageData(w, h);\r\n imageData.data.set(data);\r\n context.putImageData(imageData, 0, 0);\r\n }\r\n } catch {\r\n updatePreviewCanvasSize(previewCanvas); // If we fail above, best effort sizing preview canvas\r\n }\r\n }, [[texture, width, height, face, channels, internalTexture]]);\r\n\r\n useEffect(() => {\r\n void updatePreviewAsync();\r\n }, [texture, width, height, face, channels, internalTexture]);\r\n\r\n return (\r\n <div className={classes.root}>\r\n {texture.isCube ? (\r\n <Toolbar className={classes.controls} size={size} aria-label=\"Cube Faces\">\r\n {[\"+X\", \"-X\", \"+Y\", \"-Y\", \"+Z\", \"-Z\"].map((label, idx) => (\r\n <ToolbarButton className={classes.controlButton} key={label} appearance={face === idx ? \"primary\" : \"subtle\"} onClick={() => setFace(idx)}>\r\n {label}\r\n </ToolbarButton>\r\n ))}\r\n </Toolbar>\r\n ) : (\r\n <Toolbar className={classes.controls} size={size} aria-label=\"Channels\">\r\n {([\"R\", \"G\", \"B\", \"A\", \"ALL\"] as const).map((ch) => (\r\n <ToolbarButton\r\n className={classes.controlButton}\r\n key={ch}\r\n appearance={channels === TextureChannelStates[ch] ? \"primary\" : \"subtle\"}\r\n onClick={() => setChannels(TextureChannelStates[ch])}\r\n >\r\n {ch}\r\n </ToolbarButton>\r\n ))}\r\n </Toolbar>\r\n )}\r\n <canvas ref={canvasRef} className={classes.preview} />\r\n {texture.isRenderTarget && (\r\n <Button\r\n appearance=\"outline\"\r\n onClick={() => {\r\n void updatePreviewAsync();\r\n }}\r\n >\r\n Refresh\r\n </Button>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\n/**\r\n * Defines which channels of the texture to retrieve with {@link TextureHelper.GetTextureDataAsync}.\r\n */\r\ntype TextureChannelsToDisplay = {\r\n /**\r\n * True if the red channel should be included.\r\n */\r\n R: boolean;\r\n /**\r\n * True if the green channel should be included.\r\n */\r\n G: boolean;\r\n /**\r\n * True if the blue channel should be included.\r\n */\r\n B: boolean;\r\n /**\r\n * True if the alpha channel should be included.\r\n */\r\n A: boolean;\r\n};\r\n\r\n/**\r\n * Gets the data of the specified texture by rendering it to an intermediate RGBA texture and retrieving the bytes from it.\r\n * This is convienent to get 8-bit RGBA values for a texture in a GPU compressed format.\r\n * @param texture the source texture\r\n * @param width the width of the result, which does not have to match the source texture width\r\n * @param height the height of the result, which does not have to match the source texture height\r\n * @param face if the texture has multiple faces, the face index to use for the source\r\n * @param channels a filter for which of the RGBA channels to return in the result\r\n * @param lod if the texture has multiple LODs, the lod index to use for the source\r\n * @returns the 8-bit texture data\r\n */\r\nasync function ApplyChannelsToTextureDataAsync(\r\n texture: BaseTexture,\r\n width: number,\r\n height: number,\r\n face: number,\r\n channels: TextureChannelsToDisplay,\r\n lod: number = 0\r\n): Promise<Uint8Array> {\r\n const data = await GetTextureDataAsync(texture, width, height, face, lod);\r\n\r\n if (!channels.R || !channels.G || !channels.B || !channels.A) {\r\n for (let i = 0; i < width * height * 4; i += 4) {\r\n // If alpha is the only channel, just display alpha across all channels\r\n if (channels.A && !channels.R && !channels.G && !channels.B) {\r\n data[i] = data[i + 3];\r\n data[i + 1] = data[i + 3];\r\n data[i + 2] = data[i + 3];\r\n data[i + 3] = 255;\r\n continue;\r\n }\r\n let r = data[i],\r\n g = data[i + 1],\r\n b = data[i + 2],\r\n a = data[i + 3];\r\n // If alpha is not visible, make everything 100% alpha\r\n if (!channels.A) {\r\n a = 255;\r\n }\r\n // If only one color channel is selected, map both colors to it. If two are selected, the unused one gets set to 0\r\n if (!channels.R) {\r\n if (channels.G && !channels.B) {\r\n r = g;\r\n } else if (channels.B && !channels.G) {\r\n r = b;\r\n } else {\r\n r = 0;\r\n }\r\n }\r\n if (!channels.G) {\r\n if (channels.R && !channels.B) {\r\n g = r;\r\n } else if (channels.B && !channels.R) {\r\n g = b;\r\n } else {\r\n g = 0;\r\n }\r\n }\r\n if (!channels.B) {\r\n if (channels.R && !channels.G) {\r\n b = r;\r\n } else if (channels.G && !channels.R) {\r\n b = g;\r\n } else {\r\n b = 0;\r\n }\r\n }\r\n data[i] = r;\r\n data[i + 1] = g;\r\n data[i + 2] = b;\r\n data[i + 3] = a;\r\n }\r\n }\r\n\r\n //To flip image on Y axis.\r\n if ((texture as Texture).invertY || texture.isCube) {\r\n const numberOfChannelsByLine = width * 4;\r\n const halfHeight = height / 2;\r\n for (let i = 0; i < halfHeight; i++) {\r\n for (let j = 0; j < numberOfChannelsByLine; j++) {\r\n const currentCell = j + i * numberOfChannelsByLine;\r\n const targetLine = height - i - 1;\r\n const targetCell = j + targetLine * numberOfChannelsByLine;\r\n\r\n const temp = data[currentCell];\r\n data[currentCell] = data[targetCell];\r\n data[targetCell] = temp;\r\n }\r\n }\r\n }\r\n return data;\r\n}\r\n","import type { FunctionComponent } from \"react\";\r\n\r\nimport type { BaseTexture } from \"core/index\";\r\nimport type { DropdownOption } from \"shared-ui-components/fluent/primitives/dropdown\";\r\n\r\nimport { useCallback } from \"react\";\r\n\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { CubeTexture } from \"core/Materials/Textures/cubeTexture\";\r\nimport { Texture } from \"core/Materials/Textures/texture\";\r\nimport { ReadFile } from \"core/Misc/fileTools\";\r\nimport { ButtonLine } from \"shared-ui-components/fluent/hoc/buttonLine\";\r\nimport { FileUploadLine } from \"shared-ui-components/fluent/hoc/fileUploadLine\";\r\nimport { BooleanBadgePropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/booleanBadgePropertyLine\";\r\nimport { NumberDropdownPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/dropdownPropertyLine\";\r\nimport { TextInputPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/inputPropertyLine\";\r\nimport { StringifiedPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/stringifiedPropertyLine\";\r\nimport { SwitchPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/switchPropertyLine\";\r\nimport { SyncedSliderPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/syncedSliderPropertyLine\";\r\nimport { TextPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/textPropertyLine\";\r\nimport { useProperty } from \"../../../hooks/compoundPropertyHooks\";\r\nimport { BoundProperty } from \"../boundProperty\";\r\nimport { FindTextureFormat, FindTextureType } from \"./textureFormatUtils\";\r\nimport { TexturePreview } from \"./texturePreview\";\r\n\r\nexport const BaseTexturePreviewProperties: FunctionComponent<{ texture: BaseTexture }> = (props) => {\r\n const { texture } = props;\r\n\r\n const isUpdatable = texture instanceof Texture || texture instanceof CubeTexture;\r\n\r\n const updateTexture = useCallback(\r\n (file: File) => {\r\n ReadFile(\r\n file,\r\n (data) => {\r\n const blob = new Blob([data], { type: \"octet/stream\" });\r\n\r\n const reader = new FileReader();\r\n reader.readAsDataURL(blob);\r\n reader.onloadend = () => {\r\n const base64data = reader.result as string;\r\n\r\n if (texture instanceof CubeTexture) {\r\n let extension: string | undefined = undefined;\r\n if (file.name.toLowerCase().indexOf(\".dds\") > 0) {\r\n extension = \".dds\";\r\n } else if (file.name.toLowerCase().indexOf(\".env\") > 0) {\r\n extension = \".env\";\r\n }\r\n\r\n texture.updateURL(base64data, extension);\r\n } else if (texture instanceof Texture) {\r\n texture.updateURL(base64data);\r\n }\r\n };\r\n },\r\n undefined,\r\n true\r\n );\r\n },\r\n [texture]\r\n );\r\n\r\n return (\r\n <>\r\n <TexturePreview texture={texture} width={256} height={256} />\r\n {/* TODO: This should probably be dynamically fetching a list of supported texture extensions. */}\r\n {isUpdatable && (\r\n <FileUploadLine\r\n label=\"Load Texture From File\"\r\n accept=\".jpg, .png, .tga, .dds, .env, .exr\"\r\n onClick={(files) => {\r\n if (files.length > 0) {\r\n updateTexture(files[0]);\r\n }\r\n }}\r\n />\r\n )}\r\n <ButtonLine label=\"Edit Texture (coming soon!)\" onClick={() => {}} />\r\n </>\r\n );\r\n};\r\n\r\nexport const BaseTextureGeneralProperties: FunctionComponent<{ texture: BaseTexture }> = (props) => {\r\n const { texture } = props;\r\n\r\n const internalTexture = useProperty(texture, \"_texture\");\r\n const internalUniqueId = useProperty(internalTexture, \"uniqueId\");\r\n\r\n return (\r\n <>\r\n <BoundProperty component={TextInputPropertyLine} label=\"Display Name\" target={texture} propertyKey=\"displayName\" />\r\n {internalUniqueId != null ? (\r\n <StringifiedPropertyLine label=\"Internal Unique ID\" description=\"The unique ID of the internal texture.\" value={internalUniqueId} />\r\n ) : (\r\n <BooleanBadgePropertyLine label=\"Internal Unique ID\" description=\"This texture has no internal texture.\" value={false} />\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nconst CoordinatesMode = [\r\n { label: \"Explicit\", value: Texture.EXPLICIT_MODE },\r\n { label: \"Cubic\", value: Texture.CUBIC_MODE },\r\n { label: \"Inverse cubic\", value: Texture.INVCUBIC_MODE },\r\n { label: \"Equirectangular\", value: Texture.EQUIRECTANGULAR_MODE },\r\n { label: \"Fixed equirectangular\", value: Texture.FIXED_EQUIRECTANGULAR_MODE },\r\n { label: \"Fixed equirectangular mirrored\", value: Texture.FIXED_EQUIRECTANGULAR_MIRRORED_MODE },\r\n { label: \"Planar\", value: Texture.PLANAR_MODE },\r\n { label: \"Projection\", value: Texture.PROJECTION_MODE },\r\n { label: \"Skybox\", value: Texture.SKYBOX_MODE },\r\n { label: \"Spherical\", value: Texture.SPHERICAL_MODE },\r\n] as const satisfies DropdownOption<number>[];\r\n\r\nexport const BaseTextureCharacteristicProperties: FunctionComponent<{ texture: BaseTexture }> = (props) => {\r\n const { texture } = props;\r\n\r\n const internalTexture = useProperty(texture, \"_texture\");\r\n const format = useProperty(internalTexture, \"format\") ?? NaN;\r\n const type = useProperty(internalTexture, \"type\") ?? NaN;\r\n const depth = useProperty(internalTexture, \"depth\");\r\n const useSRGBBuffer = useProperty(internalTexture, \"_useSRGBBuffer\");\r\n\r\n const displayFormat = FindTextureFormat(format === -1 ? Constants.TEXTUREFORMAT_RGBA : format);\r\n const displayType = FindTextureType(type === -1 ? Constants.TEXTURETYPE_UNSIGNED_BYTE : type);\r\n\r\n const maxAnisotropy = texture.getScene()?.getEngine().getCaps().maxAnisotropy ?? 1;\r\n\r\n return (\r\n <>\r\n {texture.is2DArray && <TextPropertyLine label=\"Layers\" value={depth?.toString() ?? \"?\"} />}\r\n {texture.is3D && <TextPropertyLine label=\"Depth\" value={depth?.toString() ?? \"?\"} />}\r\n <TextPropertyLine label=\"Format\" value={displayFormat?.label ?? \"unknown\"} />\r\n {!displayFormat?.hideType && !displayFormat?.compressed && <TextPropertyLine label=\"Type\" value={displayType?.label ?? \"unknown\"} />}\r\n {!!displayFormat?.normalizable && !displayFormat?.compressed && displayType?.normalizable != undefined && (\r\n <BooleanBadgePropertyLine label=\"Normalized\" value={displayType.normalizable} />\r\n )}\r\n <BooleanBadgePropertyLine label=\"Compressed\" value={displayFormat?.compressed ?? false} />\r\n <BooleanBadgePropertyLine label=\"sRGB Buffers\" value={useSRGBBuffer ?? false} />\r\n <BoundProperty component={BooleanBadgePropertyLine} label=\"Gamma Space\" target={texture} propertyKey=\"gammaSpace\" />\r\n <BoundProperty component={BooleanBadgePropertyLine} label=\"Has Alpha\" target={texture} propertyKey=\"hasAlpha\" />\r\n <BoundProperty component={SwitchPropertyLine} label=\"Alpha from RGB\" target={texture} propertyKey=\"getAlphaFromRGB\" />\r\n <BooleanBadgePropertyLine label=\"3D\" value={texture.is3D} />\r\n <BooleanBadgePropertyLine label=\"2D Array\" value={texture.is2DArray} />\r\n <BooleanBadgePropertyLine label=\"Cube\" value={texture.isCube} />\r\n <BooleanBadgePropertyLine label=\"Render Target\" value={texture.isRenderTarget} />\r\n <BooleanBadgePropertyLine label=\"Mipmaps\" value={!texture.noMipmap} />\r\n <BoundProperty component={SyncedSliderPropertyLine} label=\"UV Set\" target={texture} propertyKey=\"coordinatesIndex\" min={0} max={3} step={1} />\r\n <BoundProperty component={NumberDropdownPropertyLine} label=\"Mode\" target={texture} propertyKey=\"coordinatesMode\" options={CoordinatesMode} />\r\n <BoundProperty component={SyncedSliderPropertyLine} label=\"Level\" target={texture} propertyKey=\"level\" min={0} max={2} step={0.01} />\r\n <BoundProperty component={SyncedSliderPropertyLine} label=\"Anisotropy\" target={texture} propertyKey=\"anisotropicFilteringLevel\" min={1} max={maxAnisotropy} step={1} />\r\n </>\r\n );\r\n};\r\n\r\nexport const BaseTextureTransformProperties: FunctionComponent<{ texture: BaseTexture }> = (props) => {\r\n const { texture } = props;\r\n\r\n return (\r\n <>\r\n {texture.canRescale && (\r\n <ButtonLine\r\n label=\"Scale Up\"\r\n onClick={() => {\r\n texture.scale(2);\r\n }}\r\n />\r\n )}\r\n {texture.canRescale && (\r\n <ButtonLine\r\n label=\"Scale Down\"\r\n onClick={() => {\r\n texture.scale(0.5);\r\n }}\r\n />\r\n )}\r\n </>\r\n );\r\n};\r\n","import type { FunctionComponent } from \"react\";\r\n\r\nimport type { CubeTexture } from \"core/index\";\r\nimport type { ISettingsContext } from \"../../../services/settingsContext\";\r\n\r\nimport { SyncedSliderPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/syncedSliderPropertyLine\";\r\nimport { useAngleConverters } from \"../../../hooks/settingsHooks\";\r\nimport { BoundProperty } from \"../boundProperty\";\r\n\r\nexport const CubeTextureTransformProperties: FunctionComponent<{ texture: CubeTexture; settings: ISettingsContext }> = (props) => {\r\n const { texture, settings } = props;\r\n\r\n const [toDisplayAngle, fromDisplayAngle] = useAngleConverters(settings);\r\n\r\n return (\r\n <BoundProperty\r\n component={SyncedSliderPropertyLine}\r\n label=\"Rotation Y\"\r\n target={texture}\r\n propertyKey=\"rotationY\"\r\n min={0}\r\n max={toDisplayAngle(Math.PI * 2)}\r\n convertTo={(value) => toDisplayAngle(value, true)}\r\n convertFrom={fromDisplayAngle}\r\n />\r\n );\r\n};\r\n","import type { MultiRenderTarget } from \"core/index\";\r\n\r\nimport type { FunctionComponent } from \"react\";\r\n\r\nimport { StringifiedPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/stringifiedPropertyLine\";\r\nimport { BoundProperty } from \"../boundProperty\";\r\n\r\nexport const MultiRenderTargetGeneralProperties: FunctionComponent<{ texture: MultiRenderTarget }> = (props) => {\r\n const { texture } = props;\r\n\r\n return (\r\n <>\r\n <BoundProperty component={StringifiedPropertyLine} label=\"Count\" description=\"The number of render target textures.\" target={texture} propertyKey=\"count\" />\r\n </>\r\n );\r\n};\r\n","import type { RenderTargetTexture } from \"core/index\";\r\n\r\nimport type { FunctionComponent } from \"react\";\r\n\r\nimport { BooleanBadgePropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/booleanBadgePropertyLine\";\r\nimport { TextPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/textPropertyLine\";\r\nimport { useProperty } from \"../../../hooks/compoundPropertyHooks\";\r\nimport { FindTextureFormat } from \"./textureFormatUtils\";\r\n\r\nexport const RenderTargetTextureGeneralProperties: FunctionComponent<{ texture: RenderTargetTexture }> = (props) => {\r\n const { texture } = props;\r\n\r\n const depthStencilTexture = useProperty(texture.renderTarget, \"_depthStencilTexture\");\r\n const depthStencilTextureDisplayFormat = depthStencilTexture ? FindTextureFormat(depthStencilTexture.format) : null;\r\n\r\n return (\r\n <>\r\n {depthStencilTextureDisplayFormat ? (\r\n <TextPropertyLine label=\"Depth/Stencil Format\" value={depthStencilTextureDisplayFormat.label} />\r\n ) : (\r\n <BooleanBadgePropertyLine label=\"Depth/Stencil Texture\" value={false} />\r\n )}\r\n </>\r\n );\r\n};\r\n","import type { Texture } from \"core/index\";\r\nimport type { ISettingsContext } from \"../../../services/settingsContext\";\r\n\r\nimport type { FunctionComponent } from \"react\";\r\n\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { BooleanBadgePropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/booleanBadgePropertyLine\";\r\nimport { NumberInputPropertyLine, TextInputPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/inputPropertyLine\";\r\nimport { SwitchPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/switchPropertyLine\";\r\nimport { SyncedSliderPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/syncedSliderPropertyLine\";\r\nimport { useProperty } from \"../../../hooks/compoundPropertyHooks\";\r\nimport { useAngleConverters } from \"../../../hooks/settingsHooks\";\r\nimport { BoundProperty } from \"../boundProperty\";\r\n\r\nexport const TexturePreviewProperties: FunctionComponent<{ texture: Texture }> = (props) => {\r\n const { texture } = props;\r\n\r\n const rawUrl = useProperty(texture, \"url\");\r\n const displayUrl = !rawUrl || rawUrl.substring(0, 4) === \"data\" || rawUrl.substring(0, 4) === \"blob\" ? \"\" : rawUrl;\r\n\r\n return (\r\n <>\r\n <TextInputPropertyLine\r\n label=\"URL\"\r\n value={displayUrl}\r\n onChange={(value) => {\r\n texture.updateURL(value);\r\n }}\r\n />\r\n </>\r\n );\r\n};\r\n\r\nexport const TextureGeneralProperties: FunctionComponent<{ texture: Texture }> = (props) => {\r\n const { texture } = props;\r\n\r\n return (\r\n <>\r\n <BooleanBadgePropertyLine label=\"Invert Y\" description=\"If true, the texture is stored as inverted on Y\" value={texture.invertY} />\r\n </>\r\n );\r\n};\r\n\r\nexport const TextureTransformProperties: FunctionComponent<{ texture: Texture; settings: ISettingsContext }> = (props) => {\r\n const { texture, settings } = props;\r\n\r\n const [toDisplayAngle, fromDisplayAngle] = useAngleConverters(settings);\r\n const wrapU = useProperty(texture, \"wrapU\");\r\n const wrapV = useProperty(texture, \"wrapV\");\r\n\r\n return (\r\n <>\r\n <BoundProperty component={NumberInputPropertyLine} label=\"U offset\" target={texture} propertyKey=\"uOffset\" step={0.01} />\r\n <BoundProperty component={NumberInputPropertyLine} label=\"V offset\" target={texture} propertyKey=\"vOffset\" step={0.01} />\r\n <BoundProperty component={NumberInputPropertyLine} label=\"U scale\" target={texture} propertyKey=\"uScale\" step={0.01} />\r\n <BoundProperty component={NumberInputPropertyLine} label=\"V scale\" target={texture} propertyKey=\"vScale\" step={0.01} />\r\n <BoundProperty\r\n component={SyncedSliderPropertyLine}\r\n label=\"U angle\"\r\n target={texture}\r\n propertyKey=\"uAng\"\r\n min={0}\r\n max={toDisplayAngle(Math.PI * 2)}\r\n convertTo={(value) => toDisplayAngle(value, true)}\r\n convertFrom={fromDisplayAngle}\r\n />\r\n <BoundProperty\r\n component={SyncedSliderPropertyLine}\r\n label=\"V angle\"\r\n target={texture}\r\n propertyKey=\"vAng\"\r\n min={0}\r\n max={toDisplayAngle(Math.PI * 2)}\r\n convertTo={(value) => toDisplayAngle(value, true)}\r\n convertFrom={fromDisplayAngle}\r\n />\r\n <BoundProperty\r\n component={SyncedSliderPropertyLine}\r\n label=\"W angle\"\r\n target={texture}\r\n propertyKey=\"wAng\"\r\n min={0}\r\n max={toDisplayAngle(Math.PI * 2)}\r\n convertTo={(value) => toDisplayAngle(value, true)}\r\n convertFrom={fromDisplayAngle}\r\n />\r\n <SwitchPropertyLine\r\n label=\"Clamp U\"\r\n value={wrapU === Constants.TEXTURE_CLAMP_ADDRESSMODE}\r\n onChange={(value) => (texture.wrapU = value ? Constants.TEXTURE_CLAMP_ADDRESSMODE : Constants.TEXTURE_WRAP_ADDRESSMODE)}\r\n />\r\n <SwitchPropertyLine\r\n label=\"Clamp V\"\r\n value={wrapV === Constants.TEXTURE_CLAMP_ADDRESSMODE}\r\n onChange={(value) => (texture.wrapV = value ? Constants.TEXTURE_CLAMP_ADDRESSMODE : Constants.TEXTURE_WRAP_ADDRESSMODE)}\r\n />\r\n </>\r\n );\r\n};\r\n","import type { FunctionComponent } from \"react\";\r\n\r\nimport type { ThinTexture } from \"core/index\";\r\nimport type { DropdownOption } from \"shared-ui-components/fluent/primitives/dropdown\";\r\n\r\nimport { useCallback } from \"react\";\r\n\r\nimport { NumberDropdownPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/dropdownPropertyLine\";\r\nimport { StringifiedPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/stringifiedPropertyLine\";\r\nimport { Texture } from \"core/Materials/Textures/texture\";\r\nimport { useObservableState } from \"../../../hooks/observableHooks\";\r\nimport { useInterceptObservable } from \"../../../hooks/instrumentationHooks\";\r\n\r\nconst SamplingMode = [\r\n { label: \"Nearest\", value: Texture.NEAREST_NEAREST }, // 1\r\n { label: \"Linear\", value: Texture.LINEAR_LINEAR }, // 2\r\n\r\n { label: \"Linear & linear mip\", value: Texture.LINEAR_LINEAR_MIPLINEAR }, // 3\r\n { label: \"Linear & nearest mip\", value: Texture.LINEAR_LINEAR_MIPNEAREST }, // 11\r\n\r\n { label: \"Nearest & linear mip\", value: Texture.NEAREST_NEAREST_MIPLINEAR }, // 8\r\n { label: \"Nearest & nearest mip\", value: Texture.NEAREST_NEAREST_MIPNEAREST }, // 4\r\n\r\n { label: \"Nearest/Linear\", value: Texture.NEAREST_LINEAR }, // 7\r\n { label: \"Nearest/Linear & linear mip\", value: Texture.NEAREST_LINEAR_MIPLINEAR }, // 6\r\n { label: \"Nearest/Linear & nearest mip\", value: Texture.NEAREST_LINEAR_MIPNEAREST }, // 5\r\n\r\n { label: \"Linear/Nearest\", value: Texture.LINEAR_NEAREST }, // 12\r\n { label: \"Linear/Nearest & linear mip\", value: Texture.LINEAR_NEAREST_MIPLINEAR }, // 10\r\n { label: \"Linear/Nearest & nearest mip\", value: Texture.LINEAR_NEAREST_MIPNEAREST }, // 9\r\n] as const satisfies DropdownOption<number>[];\r\n\r\nexport const ThinTextureGeneralProperties: FunctionComponent<{ texture: ThinTexture }> = (props) => {\r\n const { texture } = props;\r\n\r\n return (\r\n <>\r\n <StringifiedPropertyLine label=\"Width\" value={texture.getSize().width} units=\"px\" />\r\n <StringifiedPropertyLine label=\"Height\" value={texture.getSize().height} units=\"px\" />\r\n </>\r\n );\r\n};\r\n\r\nexport const ThinTextureSamplingProperties: FunctionComponent<{ texture: ThinTexture }> = (props) => {\r\n const { texture } = props;\r\n\r\n const samplingMode = useObservableState(\r\n useCallback(() => texture.samplingMode, [texture]),\r\n useInterceptObservable(\"function\", texture, \"updateSamplingMode\")\r\n );\r\n\r\n return <NumberDropdownPropertyLine label=\"Sampling\" value={samplingMode} options={SamplingMode} onChange={(value) => texture.updateSamplingMode(value)} />;\r\n};\r\n","import type { AdvancedDynamicTexture } from \"gui/2D/advancedDynamicTexture\";\r\nimport type { ServiceDefinition } from \"../../../modularity/serviceDefinition\";\r\nimport type { ISettingsContext } from \"../../settingsContext\";\r\nimport type { IPropertiesService } from \"./propertiesService\";\r\n\r\nimport { BaseTexture } from \"core/Materials/Textures/baseTexture\";\r\nimport { CubeTexture } from \"core/Materials/Textures/cubeTexture\";\r\nimport { MultiRenderTarget } from \"core/Materials/Textures/multiRenderTarget\";\r\nimport { RenderTargetTexture } from \"core/Materials/Textures/renderTargetTexture\";\r\nimport { Texture } from \"core/Materials/Textures/texture\";\r\nimport { ThinTexture } from \"core/Materials/Textures/thinTexture\";\r\nimport { AdvancedDynamicTextureGeneralProperties } from \"../../../components/properties/textures/advancedDynamicTextureProperties\";\r\nimport {\r\n BaseTextureCharacteristicProperties,\r\n BaseTextureGeneralProperties,\r\n BaseTexturePreviewProperties,\r\n BaseTextureTransformProperties,\r\n} from \"../../../components/properties/textures/baseTextureProperties\";\r\nimport { CubeTextureTransformProperties } from \"../../../components/properties/textures/cubeTextureProperties\";\r\nimport { MultiRenderTargetGeneralProperties } from \"../../../components/properties/textures/multiRenderTargetProperties\";\r\nimport { RenderTargetTextureGeneralProperties } from \"../../../components/properties/textures/renderTargetTextureProperties\";\r\nimport { TextureGeneralProperties, TexturePreviewProperties, TextureTransformProperties } from \"../../../components/properties/textures/textureProperties\";\r\nimport { ThinTextureGeneralProperties, ThinTextureSamplingProperties } from \"../../../components/properties/textures/thinTextureProperties\";\r\nimport { SettingsContextIdentity } from \"../../settingsContext\";\r\nimport { PropertiesServiceIdentity } from \"./propertiesService\";\r\n\r\n// Don't use instanceof in this case as we don't want to bring in the gui package just to check if the entity is an AdvancedDynamicTexture.\r\nfunction IsAdvancedDynamicTexture(entity: unknown): entity is AdvancedDynamicTexture {\r\n return (entity as AdvancedDynamicTexture)?.getClassName?.() === \"AdvancedDynamicTexture\";\r\n}\r\n\r\nexport const TexturePropertiesServiceDefinition: ServiceDefinition<[], [IPropertiesService, ISettingsContext]> = {\r\n friendlyName: \"Texture Properties\",\r\n consumes: [PropertiesServiceIdentity, SettingsContextIdentity],\r\n factory: (propertiesService, settingsContext) => {\r\n const baseTextureContentRegistration = propertiesService.addSectionContent({\r\n key: \"Base Texture Properties\",\r\n predicate: (entity: unknown) => entity instanceof BaseTexture,\r\n content: [\r\n {\r\n section: \"Preview\",\r\n component: ({ context }) => <BaseTexturePreviewProperties texture={context} />,\r\n },\r\n {\r\n section: \"General\",\r\n order: 0,\r\n component: ({ context }) => <BaseTextureGeneralProperties texture={context} />,\r\n },\r\n {\r\n section: \"General\",\r\n order: 200,\r\n component: ({ context }) => <BaseTextureCharacteristicProperties texture={context} />,\r\n },\r\n {\r\n section: \"Transform\",\r\n component: ({ context }) => <BaseTextureTransformProperties texture={context} />,\r\n },\r\n ],\r\n });\r\n\r\n const thinTextureContentRegistration = propertiesService.addSectionContent({\r\n key: \"Thin Texture Properties\",\r\n predicate: (entity: unknown) => entity instanceof ThinTexture,\r\n content: [\r\n {\r\n section: \"General\",\r\n order: 100,\r\n component: ({ context }) => <ThinTextureGeneralProperties texture={context} />,\r\n },\r\n {\r\n section: \"General\",\r\n order: 200,\r\n component: ({ context }) => <ThinTextureSamplingProperties texture={context} />,\r\n },\r\n ],\r\n });\r\n\r\n const textureContentRegistration = propertiesService.addSectionContent({\r\n key: \"Texture Properties\",\r\n predicate: (entity: unknown) => entity instanceof Texture,\r\n content: [\r\n {\r\n section: \"Preview\",\r\n component: ({ context }) => <TexturePreviewProperties texture={context} />,\r\n },\r\n {\r\n section: \"General\",\r\n order: 300,\r\n component: ({ context }) => <TextureGeneralProperties texture={context} />,\r\n },\r\n ],\r\n });\r\n\r\n const textureExcludingCubeContentRegistration = propertiesService.addSectionContent({\r\n key: \"Texture Transform Properties\",\r\n predicate: (entity: unknown): entity is Texture => entity instanceof Texture && !entity.isCube,\r\n content: [\r\n {\r\n section: \"Transform\",\r\n component: ({ context }) => <TextureTransformProperties texture={context} settings={settingsContext} />,\r\n },\r\n ],\r\n });\r\n\r\n const cubeTextureContentRegistration = propertiesService.addSectionContent({\r\n key: \"Cube Texture Properties\",\r\n predicate: (entity: unknown) => entity instanceof CubeTexture,\r\n content: [\r\n {\r\n section: \"Transform\",\r\n component: ({ context }) => <CubeTextureTransformProperties texture={context} settings={settingsContext} />,\r\n },\r\n ],\r\n });\r\n\r\n const renderTargetTextureContentRegistration = propertiesService.addSectionContent({\r\n key: \"Render Target Texture Properties\",\r\n predicate: (entity: unknown) => entity instanceof RenderTargetTexture,\r\n content: [\r\n {\r\n section: \"Render Target\",\r\n component: ({ context }) => <RenderTargetTextureGeneralProperties texture={context} />,\r\n },\r\n ],\r\n });\r\n\r\n const multiRenderTargetContentRegistration = propertiesService.addSectionContent({\r\n key: \"Multi Render Target Properties\",\r\n predicate: (entity: unknown) => entity instanceof MultiRenderTarget,\r\n content: [\r\n {\r\n section: \"Render Target\",\r\n order: 100,\r\n component: ({ context }) => <MultiRenderTargetGeneralProperties texture={context} />,\r\n },\r\n ],\r\n });\r\n\r\n const advancedDynamicTextureContentRegistration = propertiesService.addSectionContent({\r\n key: \"Advanced Dynamic Texture Properties\",\r\n predicate: (entity: unknown) => IsAdvancedDynamicTexture(entity),\r\n content: [\r\n {\r\n section: \"Advanced Dynamic Texture\",\r\n order: 100,\r\n component: ({ context }) => <AdvancedDynamicTextureGeneralProperties texture={context} />,\r\n },\r\n ],\r\n });\r\n\r\n return {\r\n dispose: () => {\r\n advancedDynamicTextureContentRegistration.dispose();\r\n multiRenderTargetContentRegistration.dispose();\r\n renderTargetTextureContentRegistration.dispose();\r\n cubeTextureContentRegistration.dispose();\r\n textureExcludingCubeContentRegistration.dispose();\r\n textureContentRegistration.dispose();\r\n baseTextureContentRegistration.dispose();\r\n thinTextureContentRegistration.dispose();\r\n },\r\n };\r\n },\r\n};\r\n","import type { FunctionComponent } from \"react\";\r\n\r\nimport type { Nullable, Quaternion, Vector3 } from \"core/index\";\r\nimport type { ISettingsContext } from \"../../services/settingsContext\";\r\n\r\nimport { QuaternionPropertyLine, RotationVectorPropertyLine, Vector3PropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/vectorPropertyLine\";\r\nimport { useQuaternionProperty } from \"../../hooks/compoundPropertyHooks\";\r\nimport { useObservableState } from \"../../hooks/observableHooks\";\r\nimport { BoundProperty } from \"./boundProperty\";\r\n\r\nexport type Transform = { position: Vector3; rotation: Vector3; rotationQuaternion: Nullable<Quaternion>; scaling: Vector3 };\r\n\r\nexport const TransformProperties: FunctionComponent<{ transform: Transform; settings: ISettingsContext }> = (props) => {\r\n const { transform, settings } = props;\r\n\r\n const quatRotation = useQuaternionProperty(transform, \"rotationQuaternion\");\r\n\r\n const useDegrees = useObservableState(() => settings.useDegrees, settings.settingsChangedObservable);\r\n\r\n return (\r\n <>\r\n <BoundProperty component={Vector3PropertyLine} label=\"Position\" target={transform} propertyKey=\"position\" />\r\n {quatRotation ? (\r\n <QuaternionPropertyLine\r\n key=\"QuaternionRotationTransform\"\r\n label=\"Rotation (Quat)\"\r\n value={quatRotation}\r\n onChange={(val) => (transform.rotationQuaternion = val)}\r\n useDegrees={useDegrees}\r\n />\r\n ) : (\r\n <BoundProperty component={RotationVectorPropertyLine} label=\"Rotation\" target={transform} propertyKey=\"rotation\" useDegrees={useDegrees} />\r\n )}\r\n <BoundProperty component={Vector3PropertyLine} label=\"Scaling\" target={transform} propertyKey=\"scaling\" />\r\n </>\r\n );\r\n};\r\n","import type { ServiceDefinition } from \"../../../modularity/serviceDefinition\";\r\nimport type { ISettingsContext } from \"../../settingsContext\";\r\nimport type { IPropertiesService } from \"./propertiesService\";\r\n\r\nimport { Bone } from \"core/Bones/bone\";\r\nimport { TransformNode } from \"core/Meshes/transformNode\";\r\nimport { TransformProperties } from \"../../../components/properties/transformProperties\";\r\nimport { SettingsContextIdentity } from \"../../settingsContext\";\r\nimport { PropertiesServiceIdentity } from \"./propertiesService\";\r\n\r\nexport const TransformPropertiesServiceDefinition: ServiceDefinition<[], [IPropertiesService, ISettingsContext]> = {\r\n friendlyName: \"Transform Properties\",\r\n consumes: [PropertiesServiceIdentity, SettingsContextIdentity],\r\n factory: (propertiesService, settingsContent) => {\r\n const contentRegistration = propertiesService.addSectionContent({\r\n key: \"Transform Properties\",\r\n // TransformNode and Bone don't share a common base class, but both have the same transform related properties.\r\n predicate: (entity: unknown) => entity instanceof TransformNode || entity instanceof Bone,\r\n content: [\r\n {\r\n section: \"Transform\",\r\n component: ({ context }) => <TransformProperties transform={context} settings={settingsContent} />,\r\n },\r\n ],\r\n });\r\n\r\n return {\r\n dispose: () => {\r\n contentRegistration.dispose();\r\n },\r\n };\r\n },\r\n};\r\n","import type { TargetedAnimation } from \"core/index\";\r\nimport type { ServiceDefinition } from \"../../../modularity/serviceDefinition\";\r\nimport type { ISceneContext } from \"../../sceneContext\";\r\nimport type { ISceneExplorerService } from \"./sceneExplorerService\";\r\n\r\nimport { FilmstripRegular, PauseFilled, PlayFilled, StackRegular } from \"@fluentui/react-icons\";\r\n\r\nimport { AnimationGroup } from \"core/Animations/animationGroup\";\r\nimport { Observable } from \"core/Misc/observable\";\r\nimport { InterceptProperty } from \"../../../instrumentation/propertyInstrumentation\";\r\nimport { SceneContextIdentity } from \"../../sceneContext\";\r\nimport { DefaultCommandsOrder, DefaultSectionsOrder } from \"./defaultSectionsMetadata\";\r\nimport { SceneExplorerServiceIdentity } from \"./sceneExplorerService\";\r\n\r\nexport const AnimationGroupExplorerServiceDefinition: ServiceDefinition<[], [ISceneExplorerService, ISceneContext]> = {\r\n friendlyName: \"Animation Group Explorer\",\r\n consumes: [SceneExplorerServiceIdentity, SceneContextIdentity],\r\n factory: (sceneExplorerService, sceneContext) => {\r\n const scene = sceneContext.currentScene;\r\n if (!scene) {\r\n return undefined;\r\n }\r\n\r\n const sectionRegistration = sceneExplorerService.addSection<AnimationGroup | TargetedAnimation>({\r\n displayName: \"Animation Groups\",\r\n order: DefaultSectionsOrder.AnimationGroups,\r\n getRootEntities: () => scene.animationGroups,\r\n getEntityChildren: (entity) => (entity instanceof AnimationGroup ? entity.targetedAnimations : []),\r\n getEntityDisplayInfo: (entity) => {\r\n const namedEntity = entity instanceof AnimationGroup ? entity : entity.animation;\r\n\r\n const onChangeObservable = new Observable<void>();\r\n\r\n const nameHookToken = InterceptProperty(namedEntity, \"name\", {\r\n afterSet: () => {\r\n onChangeObservable.notifyObservers();\r\n },\r\n });\r\n\r\n return {\r\n get name() {\r\n return namedEntity.name;\r\n },\r\n onChange: onChangeObservable,\r\n dispose: () => {\r\n nameHookToken.dispose();\r\n onChangeObservable.clear();\r\n },\r\n };\r\n },\r\n entityIcon: ({ entity }) => (entity instanceof AnimationGroup ? <StackRegular /> : <FilmstripRegular />),\r\n getEntityAddedObservables: () => [scene.onNewAnimationGroupAddedObservable],\r\n getEntityRemovedObservables: () => [scene.onAnimationGroupRemovedObservable],\r\n });\r\n\r\n const animationPlayPauseCommandRegistration = sceneExplorerService.addCommand({\r\n predicate: (entity: unknown) => entity instanceof AnimationGroup,\r\n order: DefaultCommandsOrder.AnimationGroupPlay,\r\n getCommand: (animationGroup) => {\r\n const onChangeObservable = new Observable<void>();\r\n const playObserver = animationGroup.onAnimationGroupPlayObservable.add(() => onChangeObservable.notifyObservers());\r\n const pauseObserver = animationGroup.onAnimationGroupPauseObservable.add(() => onChangeObservable.notifyObservers());\r\n const endObserver = animationGroup.onAnimationGroupEndObservable.add(() => onChangeObservable.notifyObservers());\r\n\r\n return {\r\n type: \"toggle\",\r\n get displayName() {\r\n return `${animationGroup.isPlaying ? \"Pause\" : \"Play\"} Animation`;\r\n },\r\n icon: () => (animationGroup.isPlaying ? <PauseFilled /> : <PlayFilled />),\r\n get isEnabled() {\r\n return animationGroup.isPlaying;\r\n },\r\n set isEnabled(enabled: boolean) {\r\n if (enabled) {\r\n animationGroup.play(true);\r\n } else {\r\n animationGroup.pause();\r\n }\r\n },\r\n onChange: onChangeObservable,\r\n dispose: () => {\r\n playObserver.remove();\r\n pauseObserver.remove();\r\n endObserver.remove();\r\n onChangeObservable.clear();\r\n },\r\n };\r\n },\r\n });\r\n\r\n return {\r\n dispose: () => {\r\n sectionRegistration.dispose();\r\n animationPlayPauseCommandRegistration.dispose();\r\n },\r\n };\r\n },\r\n};\r\n","import type { ServiceDefinition } from \"../../../modularity/serviceDefinition\";\r\nimport type { ISceneContext } from \"../../sceneContext\";\r\nimport type { ISceneExplorerService } from \"./sceneExplorerService\";\r\n\r\nimport { WeatherSunnyLowFilled } from \"@fluentui/react-icons\";\r\n\r\nimport { Observable } from \"core/Misc/observable\";\r\nimport { InterceptProperty } from \"../../../instrumentation/propertyInstrumentation\";\r\nimport { SceneContextIdentity } from \"../../sceneContext\";\r\nimport { DefaultSectionsOrder } from \"./defaultSectionsMetadata\";\r\nimport { SceneExplorerServiceIdentity } from \"./sceneExplorerService\";\r\nimport type { Atmosphere } from \"addons/atmosphere/atmosphere\";\r\n\r\nexport const AtmosphereExplorerServiceDefinition: ServiceDefinition<[], [ISceneExplorerService, ISceneContext]> = {\r\n friendlyName: \"Atmosphere Explorer\",\r\n consumes: [SceneExplorerServiceIdentity, SceneContextIdentity],\r\n factory: (sceneExplorerService, sceneContext) => {\r\n const scene = sceneContext.currentScene;\r\n if (!scene) {\r\n return undefined;\r\n }\r\n const sectionRegistration = sceneExplorerService.addSection({\r\n displayName: \"Atmosphere\",\r\n order: DefaultSectionsOrder.Atmosphere,\r\n getRootEntities: () => (scene.getExternalData(\"atmosphere\") ? [scene.getExternalData(\"atmosphere\") as Atmosphere] : []),\r\n getEntityDisplayInfo: (atmosphere) => {\r\n const onChangeObservable = new Observable<void>();\r\n\r\n const nameHookToken = InterceptProperty(atmosphere, \"name\", {\r\n afterSet: () => {\r\n onChangeObservable.notifyObservers();\r\n },\r\n });\r\n\r\n return {\r\n get name() {\r\n return atmosphere.name;\r\n },\r\n onChange: onChangeObservable,\r\n dispose: () => {\r\n nameHookToken.dispose();\r\n onChangeObservable.clear();\r\n },\r\n };\r\n },\r\n entityIcon: () => <WeatherSunnyLowFilled />,\r\n // TODO in order for inspector UX to display atmosphere created after inspector is created\r\n getEntityAddedObservables: () => [],\r\n getEntityRemovedObservables: () => [],\r\n });\r\n\r\n return {\r\n dispose: () => {\r\n sectionRegistration.dispose();\r\n },\r\n };\r\n },\r\n};\r\n\r\nexport default {\r\n serviceDefinitions: [AtmosphereExplorerServiceDefinition],\r\n} as const;\r\n","import type { ServiceDefinition } from \"../../../modularity/serviceDefinition\";\r\nimport type { ISceneContext } from \"../../sceneContext\";\r\nimport type { ISceneExplorerService } from \"./sceneExplorerService\";\r\n\r\nimport { LayerRegular } from \"@fluentui/react-icons\";\r\n\r\nimport { Observable } from \"core/Misc/observable\";\r\nimport { InterceptProperty } from \"../../../instrumentation/propertyInstrumentation\";\r\nimport { SceneContextIdentity } from \"../../sceneContext\";\r\nimport { DefaultSectionsOrder } from \"./defaultSectionsMetadata\";\r\nimport { SceneExplorerServiceIdentity } from \"./sceneExplorerService\";\r\n\r\nexport const EffectLayerExplorerServiceDefinition: ServiceDefinition<[], [ISceneExplorerService, ISceneContext]> = {\r\n friendlyName: \"Effect Layer Explorer\",\r\n consumes: [SceneExplorerServiceIdentity, SceneContextIdentity],\r\n factory: (sceneExplorerService, sceneContext) => {\r\n const scene = sceneContext.currentScene;\r\n if (!scene) {\r\n return undefined;\r\n }\r\n\r\n const sectionRegistration = sceneExplorerService.addSection({\r\n displayName: \"Effect Layers\",\r\n order: DefaultSectionsOrder.EffectLayers,\r\n getRootEntities: () => scene.effectLayers,\r\n getEntityDisplayInfo: (effectLayer) => {\r\n const onChangeObservable = new Observable<void>();\r\n\r\n const nameHookToken = InterceptProperty(effectLayer, \"name\", {\r\n afterSet: () => {\r\n onChangeObservable.notifyObservers();\r\n },\r\n });\r\n\r\n return {\r\n get name() {\r\n return effectLayer.name;\r\n },\r\n onChange: onChangeObservable,\r\n dispose: () => {\r\n nameHookToken.dispose();\r\n onChangeObservable.clear();\r\n },\r\n };\r\n },\r\n entityIcon: () => <LayerRegular />,\r\n getEntityAddedObservables: () => [scene.onNewEffectLayerAddedObservable],\r\n getEntityRemovedObservables: () => [scene.onEffectLayerRemovedObservable],\r\n });\r\n\r\n return {\r\n dispose: () => {\r\n sectionRegistration.dispose();\r\n },\r\n };\r\n },\r\n};\r\n","import type { ServiceDefinition } from \"../../../modularity/serviceDefinition\";\r\nimport type { ISceneContext } from \"../../sceneContext\";\r\nimport type { ISceneExplorerService } from \"./sceneExplorerService\";\r\n\r\nimport { FrameRegular, PlayFilled, PlayRegular } from \"@fluentui/react-icons\";\r\n\r\nimport { FrameGraph } from \"core/FrameGraph/frameGraph\";\r\nimport { Observable } from \"core/Misc/observable\";\r\nimport { InterceptProperty } from \"../../../instrumentation/propertyInstrumentation\";\r\nimport { SceneContextIdentity } from \"../../sceneContext\";\r\nimport { DefaultCommandsOrder, DefaultSectionsOrder } from \"./defaultSectionsMetadata\";\r\nimport { SceneExplorerServiceIdentity } from \"./sceneExplorerService\";\r\n\r\nexport const FrameGraphExplorerServiceDefinition: ServiceDefinition<[], [ISceneExplorerService, ISceneContext]> = {\r\n friendlyName: \"Frame Graph Explorer\",\r\n consumes: [SceneExplorerServiceIdentity, SceneContextIdentity],\r\n factory: (sceneExplorerService, sceneContext) => {\r\n const scene = sceneContext.currentScene;\r\n if (!scene) {\r\n return undefined;\r\n }\r\n\r\n const sectionRegistration = sceneExplorerService.addSection({\r\n displayName: \"Frame Graph\",\r\n order: DefaultSectionsOrder.FrameGraphs,\r\n getRootEntities: () => scene.frameGraphs,\r\n getEntityDisplayInfo: (frameGraph) => {\r\n const onChangeObservable = new Observable<void>();\r\n\r\n const nameHookToken = InterceptProperty(frameGraph, \"name\", {\r\n afterSet: () => {\r\n onChangeObservable.notifyObservers();\r\n },\r\n });\r\n\r\n return {\r\n get name() {\r\n return frameGraph.name;\r\n },\r\n onChange: onChangeObservable,\r\n dispose: () => {\r\n nameHookToken.dispose();\r\n onChangeObservable.clear();\r\n },\r\n };\r\n },\r\n entityIcon: () => <FrameRegular />,\r\n getEntityAddedObservables: () => [scene.onNewFrameGraphAddedObservable],\r\n getEntityRemovedObservables: () => [scene.onFrameGraphRemovedObservable],\r\n });\r\n\r\n const activeFrameGraphCommandRegistration = sceneExplorerService.addCommand({\r\n predicate: (entity: unknown) => entity instanceof FrameGraph,\r\n order: DefaultCommandsOrder.FrameGraphPlay,\r\n getCommand: (frameGraph) => {\r\n const onChangeObservable = new Observable<void>();\r\n const frameGraphHook = InterceptProperty(scene, \"frameGraph\", {\r\n afterSet: () => onChangeObservable.notifyObservers(),\r\n });\r\n\r\n return {\r\n type: \"toggle\",\r\n displayName: \"Make Active\",\r\n icon: () => (scene.frameGraph === frameGraph ? <PlayFilled /> : <PlayRegular />),\r\n get isEnabled() {\r\n return scene.frameGraph === frameGraph;\r\n },\r\n set isEnabled(enabled: boolean) {\r\n if (enabled && scene.frameGraph !== frameGraph) {\r\n scene.frameGraph = frameGraph;\r\n }\r\n },\r\n onChange: onChangeObservable,\r\n dispose: () => {\r\n frameGraphHook.dispose();\r\n onChangeObservable.clear();\r\n },\r\n };\r\n },\r\n });\r\n\r\n return {\r\n dispose: () => {\r\n sectionRegistration.dispose();\r\n activeFrameGraphCommandRegistration.dispose();\r\n },\r\n };\r\n },\r\n};\r\n","import type { AdvancedDynamicTexture } from \"gui/index\";\r\nimport type { ServiceDefinition } from \"../../../modularity/serviceDefinition\";\r\nimport type { ISceneContext } from \"../../sceneContext\";\r\nimport type { ISceneExplorerService } from \"./sceneExplorerService\";\r\n\r\nimport { AppGenericRegular } from \"@fluentui/react-icons\";\r\n\r\nimport { Observable } from \"core/Misc/observable\";\r\nimport { InterceptProperty } from \"../../../instrumentation/propertyInstrumentation\";\r\nimport { SceneContextIdentity } from \"../../sceneContext\";\r\nimport { DefaultSectionsOrder } from \"./defaultSectionsMetadata\";\r\nimport { SceneExplorerServiceIdentity } from \"./sceneExplorerService\";\r\n\r\n// Don't use instanceof in this case as we don't want to bring in the gui package just to check if the entity is an AdvancedDynamicTexture.\r\nfunction IsAdvancedDynamicTexture(entity: unknown): entity is AdvancedDynamicTexture {\r\n return (entity as AdvancedDynamicTexture)?.getClassName?.() === \"AdvancedDynamicTexture\";\r\n}\r\n\r\nexport const GuiExplorerServiceDefinition: ServiceDefinition<[], [ISceneExplorerService, ISceneContext]> = {\r\n friendlyName: \"GUI Explorer\",\r\n consumes: [SceneExplorerServiceIdentity, SceneContextIdentity],\r\n factory: (sceneExplorerService, sceneContext) => {\r\n const scene = sceneContext.currentScene;\r\n if (!scene) {\r\n return undefined;\r\n }\r\n\r\n const sectionRegistration = sceneExplorerService.addSection({\r\n displayName: \"GUI\",\r\n order: DefaultSectionsOrder.GUIs,\r\n getRootEntities: () => scene.textures.filter(IsAdvancedDynamicTexture),\r\n getEntityDisplayInfo: (texture) => {\r\n const onChangeObservable = new Observable<void>();\r\n\r\n const nameHookToken = InterceptProperty(texture, \"name\", {\r\n afterSet: () => {\r\n onChangeObservable.notifyObservers();\r\n },\r\n });\r\n\r\n return {\r\n get name() {\r\n return texture.name;\r\n },\r\n onChange: onChangeObservable,\r\n dispose: () => {\r\n nameHookToken.dispose();\r\n onChangeObservable.clear();\r\n },\r\n };\r\n },\r\n entityIcon: () => <AppGenericRegular />,\r\n getEntityAddedObservables: () => [scene.onNewTextureAddedObservable],\r\n getEntityRemovedObservables: () => [scene.onTextureRemovedObservable],\r\n });\r\n\r\n return {\r\n dispose: () => {\r\n sectionRegistration.dispose();\r\n },\r\n };\r\n },\r\n};\r\n","import type { ServiceDefinition } from \"../../../modularity/serviceDefinition\";\r\nimport type { ISceneContext } from \"../../sceneContext\";\r\nimport type { ISceneExplorerService } from \"./sceneExplorerService\";\r\n\r\nimport { Observable } from \"core/Misc/observable\";\r\nimport { MaterialIcon } from \"shared-ui-components/fluent/icons\";\r\nimport { InterceptProperty } from \"../../../instrumentation/propertyInstrumentation\";\r\nimport { SceneContextIdentity } from \"../../sceneContext\";\r\nimport { DefaultSectionsOrder } from \"./defaultSectionsMetadata\";\r\nimport { SceneExplorerServiceIdentity } from \"./sceneExplorerService\";\r\n\r\nexport const MaterialExplorerServiceDefinition: ServiceDefinition<[], [ISceneExplorerService, ISceneContext]> = {\r\n friendlyName: \"Material Explorer\",\r\n consumes: [SceneExplorerServiceIdentity, SceneContextIdentity],\r\n factory: (sceneExplorerService, sceneContext) => {\r\n const scene = sceneContext.currentScene;\r\n if (!scene) {\r\n return undefined;\r\n }\r\n\r\n const sectionRegistration = sceneExplorerService.addSection({\r\n displayName: \"Materials\",\r\n order: DefaultSectionsOrder.Materials,\r\n getRootEntities: () => [...scene.materials, ...scene.multiMaterials],\r\n getEntityDisplayInfo: (material) => {\r\n const onChangeObservable = new Observable<void>();\r\n\r\n const nameHookToken = InterceptProperty(material, \"name\", {\r\n afterSet: () => {\r\n onChangeObservable.notifyObservers();\r\n },\r\n });\r\n\r\n return {\r\n get name() {\r\n return material.name;\r\n },\r\n onChange: onChangeObservable,\r\n dispose: () => {\r\n nameHookToken.dispose();\r\n onChangeObservable.clear();\r\n },\r\n };\r\n },\r\n entityIcon: () => <MaterialIcon />,\r\n getEntityAddedObservables: () => [scene.onNewMaterialAddedObservable],\r\n getEntityRemovedObservables: () => [scene.onMaterialRemovedObservable],\r\n });\r\n\r\n return {\r\n dispose: () => {\r\n sectionRegistration.dispose();\r\n },\r\n };\r\n },\r\n};\r\n","import type { IDisposable, Node, Nullable } from \"core/index\";\r\nimport type { ServiceDefinition } from \"../../../modularity/serviceDefinition\";\r\nimport type { IGizmoService } from \"../../gizmoService\";\r\nimport type { ISceneContext } from \"../../sceneContext\";\r\nimport type { ISceneExplorerService } from \"./sceneExplorerService\";\r\n\r\nimport {\r\n BorderNoneRegular,\r\n BorderOutsideRegular,\r\n CameraRegular,\r\n EyeOffRegular,\r\n EyeRegular,\r\n FlashlightOffRegular,\r\n FlashlightRegular,\r\n LightbulbRegular,\r\n MyLocationRegular,\r\n VideoFilled,\r\n VideoRegular,\r\n} from \"@fluentui/react-icons\";\r\n\r\nimport { Camera } from \"core/Cameras/camera\";\r\nimport { Light } from \"core/Lights/light\";\r\nimport { AbstractMesh } from \"core/Meshes/abstractMesh\";\r\nimport { TransformNode } from \"core/Meshes/transformNode\";\r\nimport { Observable } from \"core/Misc/observable\";\r\nimport { MeshIcon } from \"shared-ui-components/fluent/icons\";\r\nimport { InterceptProperty } from \"../../../instrumentation/propertyInstrumentation\";\r\nimport { GizmoServiceIdentity } from \"../../gizmoService\";\r\nimport { SceneContextIdentity } from \"../../sceneContext\";\r\nimport { DefaultCommandsOrder, DefaultSectionsOrder } from \"./defaultSectionsMetadata\";\r\nimport { SceneExplorerServiceIdentity } from \"./sceneExplorerService\";\r\n\r\nimport \"core/Rendering/boundingBoxRenderer\";\r\n\r\nexport const NodeExplorerServiceDefinition: ServiceDefinition<[], [ISceneExplorerService, ISceneContext, IGizmoService]> = {\r\n friendlyName: \"Node Explorer\",\r\n consumes: [SceneExplorerServiceIdentity, SceneContextIdentity, GizmoServiceIdentity],\r\n factory: (sceneExplorerService, sceneContext, gizmoService) => {\r\n const scene = sceneContext.currentScene;\r\n if (!scene) {\r\n return undefined;\r\n }\r\n\r\n const nodeMovedObservable = new Observable<Node>();\r\n\r\n const sectionRegistration = sceneExplorerService.addSection({\r\n displayName: \"Nodes\",\r\n order: DefaultSectionsOrder.Nodes,\r\n getRootEntities: () => scene.rootNodes,\r\n getEntityChildren: (node) => node.getChildren(),\r\n getEntityDisplayInfo: (node) => {\r\n const onChangeObservable = new Observable<void>();\r\n\r\n const nameHookToken = InterceptProperty(node, \"name\", {\r\n afterSet: () => onChangeObservable.notifyObservers(),\r\n });\r\n\r\n const parentHookToken = InterceptProperty(node, \"parent\", {\r\n afterSet: () => {\r\n nodeMovedObservable.notifyObservers(node);\r\n },\r\n });\r\n\r\n return {\r\n get name() {\r\n return node.name;\r\n },\r\n onChange: onChangeObservable,\r\n dispose: () => {\r\n nameHookToken.dispose();\r\n parentHookToken.dispose();\r\n onChangeObservable.clear();\r\n },\r\n };\r\n },\r\n entityIcon: ({ entity: node }) =>\r\n node instanceof AbstractMesh ? (\r\n <MeshIcon />\r\n ) : node instanceof TransformNode ? (\r\n <MyLocationRegular />\r\n ) : node instanceof Camera ? (\r\n <CameraRegular />\r\n ) : node instanceof Light ? (\r\n <LightbulbRegular />\r\n ) : (\r\n <></>\r\n ),\r\n getEntityAddedObservables: () => [\r\n scene.onNewMeshAddedObservable,\r\n scene.onNewTransformNodeAddedObservable,\r\n scene.onNewCameraAddedObservable,\r\n scene.onNewLightAddedObservable,\r\n ],\r\n getEntityRemovedObservables: () => [\r\n scene.onMeshRemovedObservable,\r\n scene.onTransformNodeRemovedObservable,\r\n scene.onCameraRemovedObservable,\r\n scene.onLightRemovedObservable,\r\n ],\r\n getEntityMovedObservables: () => [nodeMovedObservable],\r\n });\r\n\r\n const abstractMeshBoundingBoxCommandRegistration = sceneExplorerService.addCommand({\r\n predicate: (entity: unknown): entity is AbstractMesh => entity instanceof AbstractMesh && entity.getTotalVertices() > 0,\r\n order: DefaultCommandsOrder.MeshBoundingBox,\r\n getCommand: (mesh) => {\r\n const onChangeObservable = new Observable<void>();\r\n const showBoundingBoxHook = InterceptProperty(mesh, \"showBoundingBox\", {\r\n afterSet: () => onChangeObservable.notifyObservers(),\r\n });\r\n\r\n return {\r\n type: \"toggle\",\r\n get displayName() {\r\n return `${mesh.showBoundingBox ? \"Hide\" : \"Show\"} Bounding Box`;\r\n },\r\n icon: () => (mesh.showBoundingBox ? <BorderOutsideRegular /> : <BorderNoneRegular />),\r\n get isEnabled() {\r\n return mesh.showBoundingBox;\r\n },\r\n set isEnabled(enabled: boolean) {\r\n mesh.showBoundingBox = enabled;\r\n },\r\n onChange: onChangeObservable,\r\n dispose: () => {\r\n showBoundingBoxHook.dispose();\r\n onChangeObservable.clear();\r\n },\r\n };\r\n },\r\n });\r\n\r\n const abstractMeshVisibilityCommandRegistration = sceneExplorerService.addCommand({\r\n predicate: (entity: unknown): entity is AbstractMesh => entity instanceof AbstractMesh && entity.getTotalVertices() > 0,\r\n order: DefaultCommandsOrder.MeshVisibility,\r\n getCommand: (mesh) => {\r\n const onChangeObservable = new Observable<void>();\r\n const isVisibleHook = InterceptProperty(mesh, \"isVisible\", {\r\n afterSet: () => onChangeObservable.notifyObservers(),\r\n });\r\n\r\n return {\r\n type: \"toggle\",\r\n get displayName() {\r\n return `${mesh.isVisible ? \"Hide\" : \"Show\"} Mesh`;\r\n },\r\n icon: () => (mesh.isVisible ? <EyeRegular /> : <EyeOffRegular />),\r\n get isEnabled() {\r\n return !mesh.isVisible;\r\n },\r\n set isEnabled(enabled: boolean) {\r\n mesh.isVisible = !enabled;\r\n },\r\n onChange: onChangeObservable,\r\n dispose: () => {\r\n isVisibleHook.dispose();\r\n onChangeObservable.clear();\r\n },\r\n };\r\n },\r\n });\r\n\r\n const activeCameraCommandRegistration = sceneExplorerService.addCommand({\r\n predicate: (entity: unknown) => entity instanceof Camera,\r\n order: DefaultCommandsOrder.CameraActive,\r\n getCommand: (camera) => {\r\n const scene = camera.getScene();\r\n const onChangeObservable = new Observable<void>();\r\n const activeCameraChangedObserver = scene.onActiveCameraChanged.add(() => {\r\n onChangeObservable.notifyObservers();\r\n });\r\n\r\n return {\r\n type: \"toggle\",\r\n displayName: \"Activate and Attach Controls\",\r\n icon: () => (scene.activeCamera === camera ? <VideoFilled /> : <VideoRegular />),\r\n get isEnabled() {\r\n return scene.activeCamera === camera;\r\n },\r\n set isEnabled(enabled: boolean) {\r\n if (enabled && scene.activeCamera !== camera) {\r\n scene.activeCamera?.detachControl();\r\n scene.activeCamera = camera;\r\n camera.attachControl(true);\r\n }\r\n },\r\n onChange: onChangeObservable,\r\n dispose: () => {\r\n activeCameraChangedObserver.remove();\r\n onChangeObservable.clear();\r\n },\r\n };\r\n },\r\n });\r\n\r\n function addGizmoCommand<NodeT extends Node>(nodeClass: abstract new (...args: any[]) => NodeT, getGizmoRef: (node: NodeT) => IDisposable) {\r\n return sceneExplorerService.addCommand({\r\n predicate: (entity: unknown): entity is NodeT => entity instanceof nodeClass,\r\n order: DefaultCommandsOrder.GizmoActive,\r\n getCommand: (node) => {\r\n const onChangeObservable = new Observable<void>();\r\n\r\n let gizmoRef: Nullable<IDisposable> = null;\r\n\r\n return {\r\n type: \"toggle\",\r\n get displayName() {\r\n return `Turn ${gizmoRef ? \"Off\" : \"On\"} Gizmo`;\r\n },\r\n icon: () => (gizmoRef ? <EyeRegular /> : <EyeOffRegular />),\r\n get isEnabled() {\r\n return !!gizmoRef;\r\n },\r\n set isEnabled(enabled: boolean) {\r\n if (enabled) {\r\n if (!gizmoRef) {\r\n gizmoRef = getGizmoRef(node);\r\n onChangeObservable.notifyObservers();\r\n }\r\n } else {\r\n if (gizmoRef) {\r\n gizmoRef.dispose();\r\n gizmoRef = null;\r\n onChangeObservable.notifyObservers();\r\n }\r\n }\r\n },\r\n onChange: onChangeObservable,\r\n dispose: () => {\r\n onChangeObservable.clear();\r\n },\r\n };\r\n },\r\n });\r\n }\r\n\r\n const cameraGizmoCommandRegistration = addGizmoCommand(Camera, gizmoService.getCameraGizmo.bind(gizmoService));\r\n\r\n const lightEnabledCommandRegistration = sceneExplorerService.addCommand({\r\n predicate: (entity: unknown): entity is Light => entity instanceof Light,\r\n order: DefaultCommandsOrder.LightActive,\r\n getCommand: (light) => {\r\n return {\r\n type: \"toggle\",\r\n get displayName() {\r\n return `Turn Light ${light.isEnabled() ? \"Off\" : \"On\"}`;\r\n },\r\n icon: () => (light.isEnabled() ? <FlashlightRegular /> : <FlashlightOffRegular />),\r\n get isEnabled() {\r\n return !light.isEnabled();\r\n },\r\n set isEnabled(enabled: boolean) {\r\n light.setEnabled(!enabled);\r\n },\r\n onChange: light.onEnabledStateChangedObservable,\r\n };\r\n },\r\n });\r\n\r\n const lightGizmoCommandRegistration = addGizmoCommand(Light, gizmoService.getLightGizmo.bind(gizmoService));\r\n\r\n return {\r\n dispose: () => {\r\n sectionRegistration.dispose();\r\n abstractMeshBoundingBoxCommandRegistration.dispose();\r\n abstractMeshVisibilityCommandRegistration.dispose();\r\n activeCameraCommandRegistration.dispose();\r\n cameraGizmoCommandRegistration.dispose();\r\n lightEnabledCommandRegistration.dispose();\r\n lightGizmoCommandRegistration.dispose();\r\n },\r\n };\r\n },\r\n};\r\n","import type { ServiceDefinition } from \"../../../modularity/serviceDefinition\";\r\nimport type { ISceneContext } from \"../../sceneContext\";\r\nimport type { ISceneExplorerService } from \"./sceneExplorerService\";\r\n\r\nimport { DropRegular } from \"@fluentui/react-icons\";\r\n\r\nimport { Observable } from \"core/Misc/observable\";\r\nimport { InterceptProperty } from \"../../../instrumentation/propertyInstrumentation\";\r\nimport { SceneContextIdentity } from \"../../sceneContext\";\r\nimport { DefaultSectionsOrder } from \"./defaultSectionsMetadata\";\r\nimport { SceneExplorerServiceIdentity } from \"./sceneExplorerService\";\r\n\r\nexport const ParticleSystemExplorerServiceDefinition: ServiceDefinition<[], [ISceneExplorerService, ISceneContext]> = {\r\n friendlyName: \"Particle System Explorer\",\r\n consumes: [SceneExplorerServiceIdentity, SceneContextIdentity],\r\n factory: (sceneExplorerService, sceneContext) => {\r\n const scene = sceneContext.currentScene;\r\n if (!scene) {\r\n return undefined;\r\n }\r\n\r\n const sectionRegistration = sceneExplorerService.addSection({\r\n displayName: \"Particle Systems\",\r\n order: DefaultSectionsOrder.ParticleSystems,\r\n getRootEntities: () => scene.particleSystems,\r\n getEntityDisplayInfo: (particleSystem) => {\r\n const onChangeObservable = new Observable<void>();\r\n\r\n const nameHookToken = InterceptProperty(particleSystem, \"name\", {\r\n afterSet: () => {\r\n onChangeObservable.notifyObservers();\r\n },\r\n });\r\n\r\n return {\r\n get name() {\r\n return particleSystem.name;\r\n },\r\n onChange: onChangeObservable,\r\n dispose: () => {\r\n nameHookToken.dispose();\r\n onChangeObservable.clear();\r\n },\r\n };\r\n },\r\n entityIcon: () => <DropRegular />,\r\n getEntityAddedObservables: () => [scene.onNewParticleSystemAddedObservable],\r\n getEntityRemovedObservables: () => [scene.onParticleSystemRemovedObservable],\r\n });\r\n\r\n return {\r\n dispose: () => {\r\n sectionRegistration.dispose();\r\n },\r\n };\r\n },\r\n};\r\n","import type { ServiceDefinition } from \"../../../modularity/serviceDefinition\";\r\nimport type { ISceneContext } from \"../../sceneContext\";\r\nimport type { ISceneExplorerService } from \"./sceneExplorerService\";\r\n\r\nimport { BlurRegular } from \"@fluentui/react-icons\";\r\n\r\nimport { Observable } from \"core/Misc/observable\";\r\nimport { InterceptProperty } from \"../../../instrumentation/propertyInstrumentation\";\r\nimport { SceneContextIdentity } from \"../../sceneContext\";\r\nimport { DefaultSectionsOrder } from \"./defaultSectionsMetadata\";\r\nimport { SceneExplorerServiceIdentity } from \"./sceneExplorerService\";\r\n\r\nexport const PostProcessExplorerServiceDefinition: ServiceDefinition<[], [ISceneExplorerService, ISceneContext]> = {\r\n friendlyName: \"Post Process Explorer\",\r\n consumes: [SceneExplorerServiceIdentity, SceneContextIdentity],\r\n factory: (sceneExplorerService, sceneContext) => {\r\n const scene = sceneContext.currentScene;\r\n if (!scene) {\r\n return undefined;\r\n }\r\n\r\n const sectionRegistration = sceneExplorerService.addSection({\r\n displayName: \"Post Processes\",\r\n order: DefaultSectionsOrder.PostProcesses,\r\n getRootEntities: () => scene.postProcesses,\r\n getEntityDisplayInfo: (postProcess) => {\r\n const onChangeObservable = new Observable<void>();\r\n\r\n const nameHookToken = InterceptProperty(postProcess, \"name\", {\r\n afterSet: () => {\r\n onChangeObservable.notifyObservers();\r\n },\r\n });\r\n\r\n return {\r\n get name() {\r\n return postProcess.name;\r\n },\r\n onChange: onChangeObservable,\r\n dispose: () => {\r\n nameHookToken.dispose();\r\n onChangeObservable.clear();\r\n },\r\n };\r\n },\r\n entityIcon: () => <BlurRegular />,\r\n getEntityAddedObservables: () => [scene.onNewPostProcessAddedObservable],\r\n getEntityRemovedObservables: () => [scene.onPostProcessRemovedObservable],\r\n });\r\n\r\n return {\r\n dispose: () => {\r\n sectionRegistration.dispose();\r\n },\r\n };\r\n },\r\n};\r\n","import type { ServiceDefinition } from \"../../../modularity/serviceDefinition\";\r\nimport type { ISceneContext } from \"../../sceneContext\";\r\nimport type { ISceneExplorerService } from \"./sceneExplorerService\";\r\n\r\nimport { PipelineRegular } from \"@fluentui/react-icons\";\r\n\r\nimport { SceneContextIdentity } from \"../../sceneContext\";\r\nimport { DefaultSectionsOrder } from \"./defaultSectionsMetadata\";\r\nimport { SceneExplorerServiceIdentity } from \"./sceneExplorerService\";\r\n\r\nimport \"core/PostProcesses/RenderPipeline/postProcessRenderPipelineManagerSceneComponent\";\r\n\r\nexport const RenderingPipelineExplorerServiceDefinition: ServiceDefinition<[], [ISceneExplorerService, ISceneContext]> = {\r\n friendlyName: \"Rendering Pipeline Explorer\",\r\n consumes: [SceneExplorerServiceIdentity, SceneContextIdentity],\r\n factory: (sceneExplorerService, sceneContext) => {\r\n const scene = sceneContext.currentScene;\r\n if (!scene) {\r\n return undefined;\r\n }\r\n\r\n const sectionRegistration = sceneExplorerService.addSection({\r\n displayName: \"Rendering Pipelines\",\r\n order: DefaultSectionsOrder.RenderingPipelines,\r\n getRootEntities: () => scene.postProcessRenderPipelineManager.supportedPipelines ?? [],\r\n getEntityDisplayInfo: (pipeline) => {\r\n return {\r\n get name() {\r\n const typeName = pipeline.getClassName();\r\n return `${pipeline.name} (${typeName})`;\r\n },\r\n };\r\n },\r\n entityIcon: () => <PipelineRegular />,\r\n getEntityAddedObservables: () => [scene.postProcessRenderPipelineManager.onNewPipelineAddedObservable],\r\n getEntityRemovedObservables: () => [scene.postProcessRenderPipelineManager.onPipelineRemovedObservable],\r\n });\r\n\r\n return {\r\n dispose: () => {\r\n sectionRegistration.dispose();\r\n },\r\n };\r\n },\r\n};\r\n","import type { Bone } from \"core/index\";\r\nimport type { ServiceDefinition } from \"../../../modularity/serviceDefinition\";\r\nimport type { ISceneContext } from \"../../sceneContext\";\r\nimport type { ISceneExplorerService } from \"./sceneExplorerService\";\r\n\r\nimport { DataLineRegular, PersonWalkingRegular } from \"@fluentui/react-icons\";\r\n\r\nimport { Skeleton } from \"core/Bones/skeleton\";\r\nimport { Observable } from \"core/Misc/observable\";\r\nimport { InterceptProperty } from \"../../../instrumentation/propertyInstrumentation\";\r\nimport { SceneContextIdentity } from \"../../sceneContext\";\r\nimport { DefaultSectionsOrder } from \"./defaultSectionsMetadata\";\r\nimport { SceneExplorerServiceIdentity } from \"./sceneExplorerService\";\r\n\r\nexport const SkeletonExplorerServiceDefinition: ServiceDefinition<[], [ISceneExplorerService, ISceneContext]> = {\r\n friendlyName: \"Skeleton Explorer\",\r\n consumes: [SceneExplorerServiceIdentity, SceneContextIdentity],\r\n factory: (sceneExplorerService, sceneContext) => {\r\n const scene = sceneContext.currentScene;\r\n if (!scene) {\r\n return undefined;\r\n }\r\n\r\n const boneMovedObservable = new Observable<Bone>();\r\n\r\n const sectionRegistration = sceneExplorerService.addSection<Skeleton | Bone>({\r\n displayName: \"Skeletons\",\r\n order: DefaultSectionsOrder.Skeletons,\r\n getRootEntities: () => scene.skeletons,\r\n getEntityChildren: (skeletonOrBone) => skeletonOrBone.getChildren(),\r\n getEntityDisplayInfo: (skeletonOrBone) => {\r\n const onChangeObservable = new Observable<void>();\r\n\r\n const nameHookToken = InterceptProperty(skeletonOrBone, \"name\", {\r\n afterSet: () => onChangeObservable.notifyObservers(),\r\n });\r\n\r\n const parentHookToken =\r\n skeletonOrBone instanceof Skeleton\r\n ? null\r\n : InterceptProperty(skeletonOrBone, \"parent\", {\r\n afterSet: () => {\r\n boneMovedObservable.notifyObservers(skeletonOrBone);\r\n },\r\n });\r\n\r\n return {\r\n get name() {\r\n return skeletonOrBone.name;\r\n },\r\n onChange: onChangeObservable,\r\n dispose: () => {\r\n nameHookToken.dispose();\r\n parentHookToken?.dispose();\r\n onChangeObservable.clear();\r\n },\r\n };\r\n },\r\n entityIcon: ({ entity: skeletonOrBone }) => (skeletonOrBone instanceof Skeleton ? <PersonWalkingRegular /> : <DataLineRegular />),\r\n getEntityAddedObservables: () => [scene.onNewSkeletonAddedObservable],\r\n getEntityRemovedObservables: () => [scene.onSkeletonRemovedObservable],\r\n getEntityMovedObservables: () => [boneMovedObservable],\r\n });\r\n\r\n return {\r\n dispose: () => {\r\n sectionRegistration.dispose();\r\n },\r\n };\r\n },\r\n};\r\n","import type { ISpriteManager } from \"core/index\";\r\nimport type { ServiceDefinition } from \"../../../modularity/serviceDefinition\";\r\nimport type { ISceneContext } from \"../../sceneContext\";\r\nimport type { ISceneExplorerService } from \"./sceneExplorerService\";\r\n\r\nimport { LayerDiagonalPersonRegular, PersonSquareRegular, PlayFilled, StopFilled } from \"@fluentui/react-icons\";\r\n\r\nimport { Observable } from \"core/Misc/observable\";\r\nimport { Sprite } from \"core/Sprites/sprite\";\r\nimport { InterceptProperty } from \"../../../instrumentation/propertyInstrumentation\";\r\nimport { SceneContextIdentity } from \"../../sceneContext\";\r\nimport { DefaultCommandsOrder, DefaultSectionsOrder } from \"./defaultSectionsMetadata\";\r\nimport { SceneExplorerServiceIdentity } from \"./sceneExplorerService\";\r\n\r\nimport \"core/Sprites/spriteSceneComponent\";\r\nimport { InterceptFunction } from \"../../../instrumentation/functionInstrumentation\";\r\n\r\nexport const SpriteManagerExplorerServiceDefinition: ServiceDefinition<[], [ISceneExplorerService, ISceneContext]> = {\r\n friendlyName: \"Sprite Manager Explorer\",\r\n consumes: [SceneExplorerServiceIdentity, SceneContextIdentity],\r\n factory: (sceneExplorerService, sceneContext) => {\r\n const scene = sceneContext.currentScene;\r\n if (!scene) {\r\n return undefined;\r\n }\r\n\r\n const sectionRegistration = sceneExplorerService.addSection<Sprite | ISpriteManager>({\r\n displayName: \"Sprite Managers\",\r\n order: DefaultSectionsOrder.SpriteManagers,\r\n getRootEntities: () => scene.spriteManagers ?? [],\r\n getEntityChildren: (spriteEntity) => (spriteEntity instanceof Sprite ? [] : spriteEntity.sprites),\r\n getEntityDisplayInfo: (spriteEntity) => {\r\n const onChangeObservable = new Observable<void>();\r\n\r\n const nameHookToken = InterceptProperty(spriteEntity, \"name\", {\r\n afterSet: () => onChangeObservable.notifyObservers(),\r\n });\r\n\r\n return {\r\n get name() {\r\n return spriteEntity.name;\r\n },\r\n onChange: onChangeObservable,\r\n dispose: () => {\r\n nameHookToken.dispose();\r\n onChangeObservable.clear();\r\n },\r\n };\r\n },\r\n entityIcon: ({ entity: spriteEntity }) => (spriteEntity instanceof Sprite ? <PersonSquareRegular /> : <LayerDiagonalPersonRegular />),\r\n getEntityAddedObservables: () => [scene.onNewSpriteManagerAddedObservable],\r\n getEntityRemovedObservables: () => [scene.onSpriteManagerRemovedObservable],\r\n });\r\n\r\n const spritePlayStopCommandRegistration = sceneExplorerService.addCommand({\r\n predicate: (entity: unknown) => entity instanceof Sprite,\r\n order: DefaultCommandsOrder.SpritePlay,\r\n getCommand: (sprite) => {\r\n const onChangeObservable = new Observable<void>();\r\n const playHook = InterceptFunction(sprite, \"playAnimation\", {\r\n afterCall: () => onChangeObservable.notifyObservers(),\r\n });\r\n const stopHook = InterceptFunction(sprite, \"stopAnimation\", {\r\n afterCall: () => onChangeObservable.notifyObservers(),\r\n });\r\n const animateHook = InterceptFunction(sprite, \"_animate\", {\r\n afterCall: () => onChangeObservable.notifyObservers(),\r\n });\r\n\r\n return {\r\n type: \"action\",\r\n get displayName() {\r\n return `${sprite.animationStarted ? \"Stop\" : \"Play\"} Animation`;\r\n },\r\n icon: () => (sprite.animationStarted ? <StopFilled /> : <PlayFilled />),\r\n execute: () => (sprite.animationStarted ? sprite.stopAnimation() : sprite.playAnimation(sprite.fromIndex, sprite.toIndex, sprite.loopAnimation, sprite.delay)),\r\n onChange: onChangeObservable,\r\n dispose: () => {\r\n playHook.dispose();\r\n stopHook.dispose();\r\n animateHook.dispose();\r\n onChangeObservable.clear();\r\n },\r\n };\r\n },\r\n });\r\n\r\n return {\r\n dispose: () => {\r\n sectionRegistration.dispose();\r\n spritePlayStopCommandRegistration.dispose();\r\n },\r\n };\r\n },\r\n};\r\n","import type { ServiceDefinition } from \"../../../modularity/serviceDefinition\";\r\nimport type { ISceneContext } from \"../../sceneContext\";\r\nimport type { ISceneExplorerService } from \"./sceneExplorerService\";\r\n\r\nimport { ImageEditRegular, ImageRegular } from \"@fluentui/react-icons\";\r\n\r\nimport { DynamicTexture } from \"core/Materials/Textures/dynamicTexture\";\r\nimport { Observable } from \"core/Misc/observable\";\r\nimport { InterceptProperty } from \"../../../instrumentation/propertyInstrumentation\";\r\nimport { SceneContextIdentity } from \"../../sceneContext\";\r\nimport { DefaultSectionsOrder } from \"./defaultSectionsMetadata\";\r\nimport { SceneExplorerServiceIdentity } from \"./sceneExplorerService\";\r\n\r\nexport const TextureExplorerServiceDefinition: ServiceDefinition<[], [ISceneExplorerService, ISceneContext]> = {\r\n friendlyName: \"Texture Explorer\",\r\n consumes: [SceneExplorerServiceIdentity, SceneContextIdentity],\r\n factory: (sceneExplorerService, sceneContext) => {\r\n const scene = sceneContext.currentScene;\r\n if (!scene) {\r\n return undefined;\r\n }\r\n\r\n const sectionRegistration = sceneExplorerService.addSection({\r\n displayName: \"Textures\",\r\n order: DefaultSectionsOrder.Textures,\r\n getRootEntities: () => scene.textures.filter((texture) => texture.getClassName() !== \"AdvancedDynamicTexture\"),\r\n getEntityDisplayInfo: (texture) => {\r\n const onChangeObservable = new Observable<void>();\r\n\r\n const displayNameHookToken = InterceptProperty(texture, \"displayName\", {\r\n afterSet: () => {\r\n onChangeObservable.notifyObservers();\r\n },\r\n });\r\n\r\n const nameHookToken = InterceptProperty(texture, \"name\", {\r\n afterSet: () => {\r\n onChangeObservable.notifyObservers();\r\n },\r\n });\r\n\r\n return {\r\n get name() {\r\n return texture.displayName || texture.name || `${texture.getClassName() || \"Unnamed Texture\"} (${texture.uniqueId})`;\r\n },\r\n onChange: onChangeObservable,\r\n dispose: () => {\r\n nameHookToken.dispose();\r\n displayNameHookToken.dispose();\r\n onChangeObservable.clear();\r\n },\r\n };\r\n },\r\n entityIcon: ({ entity: texture }) => (texture instanceof DynamicTexture ? <ImageEditRegular /> : <ImageRegular />),\r\n getEntityAddedObservables: () => [scene.onNewTextureAddedObservable],\r\n getEntityRemovedObservables: () => [scene.onTextureRemovedObservable],\r\n });\r\n\r\n return {\r\n dispose: () => {\r\n sectionRegistration.dispose();\r\n },\r\n };\r\n },\r\n};\r\n","import type { FunctionComponent } from \"react\";\r\n\r\nimport type { AbstractMesh, IMeshDataCache, Scene } from \"core/index\";\r\nimport type { IGizmoService } from \"../services/gizmoService\";\r\n\r\nimport { TargetRegular } from \"@fluentui/react-icons\";\r\nimport { useEffect, useMemo, useState } from \"react\";\r\n\r\nimport { PointerEventTypes } from \"core/Events/pointerEvents\";\r\nimport { TmpVectors, Vector3 } from \"core/Maths/math.vector\";\r\nimport { ToggleButton } from \"shared-ui-components/fluent/primitives/toggleButton\";\r\n\r\nexport const PickingToolbar: FunctionComponent<{\r\n scene: Scene;\r\n selectEntity: (entity: unknown) => void;\r\n gizmoService: IGizmoService;\r\n ignoreBackfaces?: boolean;\r\n}> = (props) => {\r\n const { scene, selectEntity, gizmoService, ignoreBackfaces } = props;\r\n\r\n const meshDataCache = useMemo(() => new WeakMap<AbstractMesh, IMeshDataCache>(), [scene]);\r\n // Not sure why changing the cursor on the canvas itself doesn't work, so change it on the parent.\r\n const sceneElement = scene.getEngine().getRenderingCanvas()?.parentElement;\r\n\r\n const [pickingEnabled, setPickingEnabled] = useState(false);\r\n\r\n useEffect(() => {\r\n if (pickingEnabled && sceneElement) {\r\n const originalCursor = getComputedStyle(sceneElement).cursor;\r\n sceneElement.style.cursor = \"crosshair\";\r\n\r\n const pointerObserver = scene.onPrePointerObservable.add(() => {\r\n let pickedEntity: unknown = null;\r\n\r\n // Check camera gizmos.\r\n if (!pickedEntity) {\r\n for (const cameraGizmo of gizmoService.getCameraGizmos(scene)) {\r\n if (cameraGizmo.isHovered) {\r\n pickedEntity = cameraGizmo.camera;\r\n }\r\n }\r\n }\r\n\r\n // Check light gizmos.\r\n if (!pickedEntity) {\r\n for (const lightGizmo of gizmoService.getLightGizmos(scene)) {\r\n if (lightGizmo.isHovered) {\r\n pickedEntity = lightGizmo.light;\r\n }\r\n }\r\n }\r\n\r\n // Check the main scene.\r\n if (!pickedEntity) {\r\n // Refresh bounding info to ensure morph target and skeletal animations are taken into account.\r\n for (const mesh of scene.meshes) {\r\n let cache = meshDataCache.get(mesh);\r\n if (!cache) {\r\n cache = {};\r\n meshDataCache.set(mesh, cache);\r\n }\r\n mesh.refreshBoundingInfo({ applyMorph: true, applySkeleton: true, cache });\r\n }\r\n\r\n const pickingInfo = scene.pick(\r\n scene.unTranslatedPointer.x,\r\n scene.unTranslatedPointer.y,\r\n (mesh) => mesh.isEnabled() && mesh.isVisible && mesh.getTotalVertices() > 0,\r\n false,\r\n undefined,\r\n (p0, p1, p2, ray) => {\r\n if (!ignoreBackfaces) {\r\n return true;\r\n }\r\n\r\n const p0p1 = TmpVectors.Vector3[0];\r\n const p1p2 = TmpVectors.Vector3[1];\r\n let normal = TmpVectors.Vector3[2];\r\n\r\n p1.subtractToRef(p0, p0p1);\r\n p2.subtractToRef(p1, p1p2);\r\n\r\n normal = Vector3.Cross(p0p1, p1p2);\r\n\r\n return Vector3.Dot(normal, ray.direction) < 0;\r\n }\r\n );\r\n\r\n pickedEntity = pickingInfo.pickedMesh;\r\n }\r\n\r\n // If an entity was picked, select it.\r\n if (pickedEntity) {\r\n selectEntity(pickedEntity);\r\n }\r\n }, PointerEventTypes.POINTERTAP);\r\n\r\n // Exit picking mode if the escape key is pressed.\r\n const handleKeyDown = (e: KeyboardEvent) => {\r\n if (e.key === \"Escape\") {\r\n setPickingEnabled(false);\r\n }\r\n };\r\n document.addEventListener(\"keydown\", handleKeyDown);\r\n\r\n return () => {\r\n sceneElement.style.cursor = originalCursor;\r\n pointerObserver.remove();\r\n document.removeEventListener(\"keydown\", handleKeyDown);\r\n };\r\n }\r\n\r\n return () => {\r\n /* No-op */\r\n };\r\n }, [pickingEnabled, sceneElement, ignoreBackfaces]);\r\n\r\n return (\r\n sceneElement && <ToggleButton title={`${pickingEnabled ? \"Disable\" : \"Enable\"} Picking`} checkedIcon={TargetRegular} value={pickingEnabled} onChange={setPickingEnabled} />\r\n );\r\n};\r\n","import type { ServiceDefinition } from \"../modularity/serviceDefinition\";\r\nimport type { IGizmoService } from \"./gizmoService\";\r\nimport type { ISceneContext } from \"./sceneContext\";\r\nimport type { ISelectionService } from \"./selectionService\";\r\nimport type { ISettingsContext } from \"./settingsContext\";\r\nimport type { IShellService } from \"./shellService\";\r\n\r\nimport { useCallback } from \"react\";\r\nimport { PickingToolbar } from \"../components/pickingToolbar\";\r\nimport { useObservableState } from \"../hooks/observableHooks\";\r\nimport { GizmoServiceIdentity } from \"./gizmoService\";\r\nimport { SceneContextIdentity } from \"./sceneContext\";\r\nimport { SelectionServiceIdentity } from \"./selectionService\";\r\nimport { SettingsContextIdentity } from \"./settingsContext\";\r\nimport { ShellServiceIdentity } from \"./shellService\";\r\n\r\nexport const PickingServiceDefinition: ServiceDefinition<[], [ISceneContext, IShellService, ISelectionService, IGizmoService, ISettingsContext]> = {\r\n friendlyName: \"Picking Service\",\r\n consumes: [SceneContextIdentity, ShellServiceIdentity, SelectionServiceIdentity, GizmoServiceIdentity, SettingsContextIdentity],\r\n factory: (sceneContext, shellService, selectionService, gizmoService, settingsContext) => {\r\n shellService.addToolbarItem({\r\n key: \"Picking Service\",\r\n verticalLocation: \"top\",\r\n horizontalLocation: \"left\",\r\n suppressTeachingMoment: true,\r\n component: () => {\r\n const scene = useObservableState(() => sceneContext.currentScene, sceneContext.currentSceneObservable);\r\n const selectEntity = useCallback((entity: unknown) => (selectionService.selectedEntity = entity), []);\r\n const ignoreBackfacesForPicking = useObservableState(() => settingsContext.ignoreBackfacesForPicking, settingsContext.settingsChangedObservable);\r\n return scene ? <PickingToolbar scene={scene} selectEntity={selectEntity} gizmoService={gizmoService} ignoreBackfaces={ignoreBackfacesForPicking} /> : null;\r\n },\r\n });\r\n },\r\n};\r\n","import type { ServiceDefinition } from \"../modularity/serviceDefinition\";\r\nimport type { IShellService } from \"./shellService\";\r\n\r\nimport { ShellServiceIdentity } from \"./shellService\";\r\nimport { Button } from \"shared-ui-components/fluent/primitives/button\";\r\n\r\nimport { PersonFeedbackRegular } from \"@fluentui/react-icons\";\r\n\r\nexport const UserFeedbackServiceDefinition: ServiceDefinition<[], [IShellService]> = {\r\n friendlyName: \"User Feedback\",\r\n consumes: [ShellServiceIdentity],\r\n factory: (shellService) => {\r\n shellService.addToolbarItem({\r\n key: \"User Feedback\",\r\n verticalLocation: \"bottom\",\r\n horizontalLocation: \"right\",\r\n suppressTeachingMoment: true,\r\n component: () => {\r\n return (\r\n <Button\r\n appearance=\"subtle\"\r\n icon={PersonFeedbackRegular}\r\n title=\"Give Feedback on Inspector v2\"\r\n onClick={() => window.open(\"https://forum.babylonjs.com/t/introducing-inspector-v2/60937\", \"_blank\")} // TODO: Replace this with a direct link to the announcement post.\r\n />\r\n );\r\n },\r\n });\r\n },\r\n};\r\n","import type { IInspectorOptions } from \"core/Debug/debugLayer\";\r\nimport type { IDisposable, Scene } from \"core/scene\";\r\nimport type { Nullable } from \"core/types\";\r\nimport type { ServiceDefinition } from \"./modularity/serviceDefinition\";\r\nimport type { ModularToolOptions } from \"./modularTool\";\r\nimport type { ISceneContext } from \"./services/sceneContext\";\r\nimport type { IShellService } from \"./services/shellService\";\r\n\r\nimport { makeStyles } from \"@fluentui/react-components\";\r\nimport { EngineStore } from \"core/Engines/engineStore\";\r\nimport { Observable } from \"core/Misc/observable\";\r\nimport { useEffect, useRef } from \"react\";\r\nimport { DefaultInspectorExtensionFeed } from \"./extensibility/defaultInspectorExtensionFeed\";\r\nimport { MakeModularTool } from \"./modularTool\";\r\nimport { GizmoServiceDefinition } from \"./services/gizmoService\";\r\nimport { GizmoToolbarServiceDefinition } from \"./services/gizmoToolbarService\";\r\nimport { MiniStatsServiceDefinition } from \"./services/miniStatsService\";\r\nimport { DebugServiceDefinition } from \"./services/panes/debugService\";\r\nimport { AnimationGroupPropertiesServiceDefinition } from \"./services/panes/properties/animationGroupPropertiesService\";\r\nimport { AnimationPropertiesServiceDefinition } from \"./services/panes/properties/animationPropertiesService\";\r\nimport { AtmospherePropertiesServiceDefinition } from \"./services/panes/properties/atmospherePropertiesService\";\r\nimport { CameraPropertiesServiceDefinition } from \"./services/panes/properties/cameraPropertiesService\";\r\nimport { CommonPropertiesServiceDefinition } from \"./services/panes/properties/commonPropertiesService\";\r\nimport { EffectLayerPropertiesServiceDefinition } from \"./services/panes/properties/effectLayerPropertiesService\";\r\nimport { FrameGraphPropertiesServiceDefinition } from \"./services/panes/properties/frameGraphPropertiesService\";\r\nimport { LightPropertiesServiceDefinition } from \"./services/panes/properties/lightPropertiesServices\";\r\nimport { MaterialPropertiesServiceDefinition } from \"./services/panes/properties/materialPropertiesService\";\r\nimport { MetadataPropertiesServiceDefinition } from \"./services/panes/properties/metadataPropertiesService\";\r\nimport { NodePropertiesServiceDefinition } from \"./services/panes/properties/nodePropertiesService\";\r\nimport { ParticleSystemPropertiesServiceDefinition } from \"./services/panes/properties/particleSystemPropertiesService\";\r\nimport { PhysicsPropertiesServiceDefinition } from \"./services/panes/properties/physicsPropertiesService\";\r\nimport { PostProcessPropertiesServiceDefinition } from \"./services/panes/properties/postProcessPropertiesService\";\r\nimport { PropertiesServiceDefinition } from \"./services/panes/properties/propertiesService\";\r\nimport { RenderingPipelinePropertiesServiceDefinition } from \"./services/panes/properties/renderingPipelinePropertiesService\";\r\nimport { ScenePropertiesServiceDefinition } from \"./services/panes/properties/scenePropertiesService\";\r\nimport { SkeletonPropertiesServiceDefinition } from \"./services/panes/properties/skeletonPropertiesService\";\r\nimport { SpritePropertiesServiceDefinition } from \"./services/panes/properties/spritePropertiesService\";\r\nimport { TexturePropertiesServiceDefinition } from \"./services/panes/properties/texturePropertiesService\";\r\nimport { TransformPropertiesServiceDefinition } from \"./services/panes/properties/transformPropertiesService\";\r\nimport { AnimationGroupExplorerServiceDefinition } from \"./services/panes/scene/animationGroupExplorerService\";\r\nimport { AtmosphereExplorerServiceDefinition } from \"./services/panes/scene/atmosphereExplorerService\";\r\nimport { EffectLayerExplorerServiceDefinition } from \"./services/panes/scene/effectLayersExplorerService\";\r\nimport { FrameGraphExplorerServiceDefinition } from \"./services/panes/scene/frameGraphExplorerService\";\r\nimport { GuiExplorerServiceDefinition } from \"./services/panes/scene/guiExplorerService\";\r\nimport { MaterialExplorerServiceDefinition } from \"./services/panes/scene/materialExplorerService\";\r\nimport { NodeExplorerServiceDefinition } from \"./services/panes/scene/nodeExplorerService\";\r\nimport { ParticleSystemExplorerServiceDefinition } from \"./services/panes/scene/particleSystemExplorerService\";\r\nimport { PostProcessExplorerServiceDefinition } from \"./services/panes/scene/postProcessExplorerService\";\r\nimport { RenderingPipelineExplorerServiceDefinition } from \"./services/panes/scene/renderingPipelinesExplorerService\";\r\nimport { SceneExplorerServiceDefinition } from \"./services/panes/scene/sceneExplorerService\";\r\nimport { SkeletonExplorerServiceDefinition } from \"./services/panes/scene/skeletonExplorerService\";\r\nimport { SpriteManagerExplorerServiceDefinition } from \"./services/panes/scene/spriteManagerExplorerService\";\r\nimport { TextureExplorerServiceDefinition } from \"./services/panes/scene/texturesExplorerService\";\r\nimport { SettingsServiceDefinition } from \"./services/panes/settingsService\";\r\nimport { StatsServiceDefinition } from \"./services/panes/statsService\";\r\nimport { ToolsServiceDefinition } from \"./services/panes/toolsService\";\r\nimport { PickingServiceDefinition } from \"./services/pickingService\";\r\nimport { SceneContextIdentity } from \"./services/sceneContext\";\r\nimport { SelectionServiceDefinition } from \"./services/selectionService\";\r\nimport { ShellServiceIdentity } from \"./services/shellService\";\r\nimport { UserFeedbackServiceDefinition } from \"./services/userFeedbackService\";\r\n\r\nlet CurrentInspectorToken: Nullable<IDisposable> = null;\r\n\r\ntype InspectorV2Options = Omit<ModularToolOptions, \"containerElement\" | \"sidePaneRemapper\" | \"toolbarMode\">;\r\n\r\nexport function IsInspectorVisible(): boolean {\r\n return CurrentInspectorToken != null;\r\n}\r\n\r\nexport function ShowInspector(scene: Scene, options?: Partial<IInspectorOptions & InspectorV2Options>) {\r\n _ShowInspector(scene, options ?? {});\r\n}\r\n\r\nfunction _ShowInspector(scene: Nullable<Scene>, options: Partial<IInspectorOptions & InspectorV2Options>) {\r\n // TODO: Lots more work to do to respect all the Inspector v1 options.\r\n options = {\r\n overlay: false,\r\n showExplorer: true,\r\n showInspector: true,\r\n embedMode: false,\r\n enableClose: true,\r\n handleResize: true,\r\n enablePopup: true,\r\n ...options,\r\n };\r\n\r\n if (!scene) {\r\n scene = EngineStore.LastCreatedScene;\r\n }\r\n\r\n if (!scene || scene.isDisposed) {\r\n return;\r\n }\r\n\r\n let parentElement = options.globalRoot ?? null;\r\n if (!parentElement) {\r\n parentElement = scene.getEngine().getRenderingCanvas()?.parentElement ?? null;\r\n while (parentElement) {\r\n const rootNode = parentElement.getRootNode();\r\n // TODO: Right now we never parent the inspector within a ShadowRoot because we need to do more work to get FluentProvider to work correctly in this context.\r\n if (!(rootNode instanceof ShadowRoot)) {\r\n break;\r\n }\r\n parentElement = rootNode.host.parentElement;\r\n }\r\n }\r\n\r\n if (!parentElement) {\r\n return;\r\n }\r\n\r\n if (IsInspectorVisible()) {\r\n HideInspector();\r\n }\r\n\r\n const disposeActions: (() => void)[] = [];\r\n\r\n const canvasContainerDisplay = parentElement.style.display;\r\n const canvasContainerChildren: ChildNode[] = [];\r\n\r\n canvasContainerChildren.push(...parentElement.childNodes);\r\n\r\n disposeActions.push(() => {\r\n canvasContainerChildren.forEach((child) => parentElement.appendChild(child));\r\n });\r\n\r\n // This service is responsible for injecting the passed in canvas as the \"central content\" of the shell UI (the main area between the side panes and toolbars).\r\n const canvasInjectorServiceDefinition: ServiceDefinition<[], [IShellService]> = {\r\n friendlyName: \"Canvas Injector\",\r\n consumes: [ShellServiceIdentity],\r\n factory: (shellService) => {\r\n const useStyles = makeStyles({\r\n canvasContainer: {\r\n display: canvasContainerDisplay,\r\n width: \"100%\",\r\n height: \"100%\",\r\n },\r\n });\r\n\r\n const registration = shellService.addCentralContent({\r\n key: \"Canvas Injector\",\r\n component: () => {\r\n const classes = useStyles();\r\n const canvasContainerRef = useRef<HTMLDivElement>(null);\r\n useEffect(() => {\r\n if (canvasContainerRef.current) {\r\n for (const child of canvasContainerChildren) {\r\n canvasContainerRef.current.appendChild(child);\r\n }\r\n }\r\n }, []);\r\n\r\n return <div ref={canvasContainerRef} className={classes.canvasContainer} />;\r\n },\r\n });\r\n\r\n return {\r\n dispose: () => {\r\n registration.dispose();\r\n },\r\n };\r\n },\r\n };\r\n\r\n // This service exposes the scene that was passed into Inspector through ISceneContext, which is used by other services that may be used in other contexts outside of Inspector.\r\n const sceneContextServiceDefinition: ServiceDefinition<[ISceneContext], []> = {\r\n friendlyName: \"Inspector Scene Context\",\r\n produces: [SceneContextIdentity],\r\n factory: () => {\r\n return {\r\n currentScene: scene,\r\n currentSceneObservable: new Observable<Nullable<Scene>>(),\r\n };\r\n },\r\n };\r\n\r\n if (options.handleResize) {\r\n const observer = scene.onBeforeRenderObservable.add(() => scene.getEngine().resize());\r\n disposeActions.push(() => observer.remove());\r\n }\r\n\r\n if (options.showExplorer) {\r\n // TODO\r\n }\r\n\r\n const modularTool = MakeModularTool({\r\n containerElement: parentElement,\r\n serviceDefinitions: [\r\n // Injects the canvas the scene is rendering to into the central \"content\" area of the shell UI.\r\n canvasInjectorServiceDefinition,\r\n\r\n // Provides access to the scene in a generic way (other tools might provide a scene in a different way).\r\n sceneContextServiceDefinition,\r\n\r\n // Helps with managing gizmos and a shared utility layer.\r\n GizmoServiceDefinition,\r\n\r\n // Scene explorer tab and related services.\r\n SceneExplorerServiceDefinition,\r\n NodeExplorerServiceDefinition,\r\n SkeletonExplorerServiceDefinition,\r\n MaterialExplorerServiceDefinition,\r\n TextureExplorerServiceDefinition,\r\n PostProcessExplorerServiceDefinition,\r\n RenderingPipelineExplorerServiceDefinition,\r\n EffectLayerExplorerServiceDefinition,\r\n ParticleSystemExplorerServiceDefinition,\r\n SpriteManagerExplorerServiceDefinition,\r\n AnimationGroupExplorerServiceDefinition,\r\n GuiExplorerServiceDefinition,\r\n FrameGraphExplorerServiceDefinition,\r\n AtmosphereExplorerServiceDefinition,\r\n\r\n // Properties pane tab and related services.\r\n ScenePropertiesServiceDefinition,\r\n PropertiesServiceDefinition,\r\n TexturePropertiesServiceDefinition,\r\n CommonPropertiesServiceDefinition,\r\n TransformPropertiesServiceDefinition,\r\n AnimationPropertiesServiceDefinition,\r\n NodePropertiesServiceDefinition,\r\n PhysicsPropertiesServiceDefinition,\r\n SkeletonPropertiesServiceDefinition,\r\n MaterialPropertiesServiceDefinition,\r\n LightPropertiesServiceDefinition,\r\n SpritePropertiesServiceDefinition,\r\n ParticleSystemPropertiesServiceDefinition,\r\n CameraPropertiesServiceDefinition,\r\n PostProcessPropertiesServiceDefinition,\r\n RenderingPipelinePropertiesServiceDefinition,\r\n EffectLayerPropertiesServiceDefinition,\r\n FrameGraphPropertiesServiceDefinition,\r\n AnimationGroupPropertiesServiceDefinition,\r\n MetadataPropertiesServiceDefinition,\r\n AtmospherePropertiesServiceDefinition,\r\n\r\n // Debug pane tab and related services.\r\n DebugServiceDefinition,\r\n\r\n // Stats pane tab and related services.\r\n StatsServiceDefinition,\r\n\r\n // Tools pane tab and related services.\r\n ToolsServiceDefinition,\r\n\r\n // Settings pane tab and related services.\r\n SettingsServiceDefinition,\r\n\r\n // Tracks entity selection state (e.g. which Mesh or Material or other entity is currently selected in scene explorer and bound to the properties pane, etc.).\r\n SelectionServiceDefinition,\r\n\r\n // Gizmos for manipulating objects in the scene.\r\n GizmoToolbarServiceDefinition,\r\n\r\n // Allows picking objects from the scene to select them.\r\n PickingServiceDefinition,\r\n\r\n // Adds entry points for user feedback on Inspector v2 (probably eventually will be removed).\r\n UserFeedbackServiceDefinition,\r\n\r\n // Adds always present \"mini stats\" (like fps) to the toolbar, etc.\r\n MiniStatsServiceDefinition,\r\n\r\n // Additional services passed in to the Inspector.\r\n ...(options.serviceDefinitions ?? []),\r\n ],\r\n themeMode: options.themeMode,\r\n showThemeSelector: options.showThemeSelector,\r\n extensionFeeds: [DefaultInspectorExtensionFeed, ...(options.extensionFeeds ?? [])],\r\n toolbarMode: \"compact\",\r\n sidePaneRemapper: options.embedMode\r\n ? (sidePane) => {\r\n if (sidePane.horizontalLocation === \"right\") {\r\n // All right panes go to right bottom.\r\n return {\r\n horizontalLocation: \"right\",\r\n verticalLocation: \"bottom\",\r\n };\r\n } else {\r\n // All left panes go to right top.\r\n return {\r\n horizontalLocation: \"right\",\r\n verticalLocation: \"top\",\r\n };\r\n }\r\n }\r\n : undefined,\r\n });\r\n disposeActions.push(() => modularTool.dispose());\r\n\r\n let disposed = false;\r\n CurrentInspectorToken = {\r\n dispose: () => {\r\n if (disposed) {\r\n return;\r\n }\r\n\r\n disposeActions.reverse().forEach((dispose) => dispose());\r\n if (options.handleResize) {\r\n scene.getEngine().resize();\r\n }\r\n\r\n disposed = true;\r\n },\r\n };\r\n\r\n const sceneDisposedObserver = scene.onDisposeObservable.addOnce(() => {\r\n HideInspector();\r\n });\r\n\r\n disposeActions.push(() => sceneDisposedObserver.remove());\r\n}\r\n\r\nexport function HideInspector() {\r\n CurrentInspectorToken?.dispose();\r\n CurrentInspectorToken = null;\r\n}\r\n\r\nexport class Inspector {\r\n public static get IsVisible(): boolean {\r\n return IsInspectorVisible();\r\n }\r\n\r\n public static Show(scene: Scene, userOptions: Partial<IInspectorOptions>) {\r\n _ShowInspector(scene, userOptions);\r\n }\r\n\r\n public static Hide() {\r\n HideInspector();\r\n }\r\n}\r\n","import type { FunctionComponent } from \"react\";\r\nimport { useState } from \"react\";\r\nimport { Combobox as FluentComboBox, makeStyles, useComboboxFilter, useId } from \"@fluentui/react-components\";\r\nimport type { OptionOnSelectData, SelectionEvents } from \"@fluentui/react-components\";\r\nconst useStyles = makeStyles({\r\n root: {\r\n // Stack the label above the field with a gap\r\n display: \"grid\",\r\n gridTemplateRows: \"repeat(1fr)\",\r\n justifyItems: \"start\",\r\n gap: \"2px\",\r\n maxWidth: \"400px\",\r\n },\r\n});\r\n\r\nexport type ComboBoxProps = {\r\n label: string;\r\n value: string[];\r\n onChange: (value: string) => void;\r\n};\r\n/**\r\n * Wrapper around a Fluent ComboBox that allows for filtering options\r\n * @param props\r\n * @returns\r\n */\r\nexport const ComboBox: FunctionComponent<ComboBoxProps> = (props) => {\r\n ComboBox.displayName = \"ComboBox\";\r\n const comboId = useId();\r\n const styles = useStyles();\r\n\r\n const [query, setQuery] = useState(\"\");\r\n const children = useComboboxFilter(query, props.value, {\r\n noOptionsMessage: \"No items match your search.\",\r\n });\r\n const onOptionSelect = (_e: SelectionEvents, data: OptionOnSelectData) => {\r\n setQuery(data.optionText ?? \"\");\r\n data.optionText && props.onChange(data.optionText);\r\n };\r\n\r\n return (\r\n <div className={styles.root}>\r\n <label id={comboId}>{props.label}</label>\r\n <FluentComboBox onOptionSelect={onOptionSelect} aria-labelledby={comboId} placeholder=\"Search..\" onChange={(ev) => setQuery(ev.target.value)} value={query}>\r\n {children}\r\n </FluentComboBox>\r\n </div>\r\n );\r\n};\r\n","import { makeStyles, tokens } from \"@fluentui/react-components\";\r\nimport { DeleteFilled } from \"@fluentui/react-icons\";\r\n\r\nexport type DraggableLineProps = {\r\n format: string;\r\n data: string;\r\n tooltip: string;\r\n label: string;\r\n onDelete?: () => void;\r\n};\r\n\r\nconst useDraggableStyles = makeStyles({\r\n draggable: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n position: \"relative\",\r\n columnGap: tokens.spacingHorizontalS,\r\n cursor: \"grab\",\r\n textAlign: \"center\",\r\n boxSizing: \"border-box\",\r\n margin: `${tokens.spacingVerticalXS} 0px`,\r\n padding: `${tokens.spacingVerticalSNudge} ${tokens.spacingHorizontalMNudge}`,\r\n\r\n // Button-like styling\r\n backgroundColor: tokens.colorNeutralBackground1,\r\n border: `${tokens.strokeWidthThin} solid ${tokens.colorNeutralStroke1}`,\r\n borderRadius: tokens.borderRadiusMedium,\r\n color: tokens.colorNeutralForeground1,\r\n fontSize: tokens.fontSizeBase300,\r\n fontFamily: tokens.fontFamilyBase,\r\n fontWeight: tokens.fontWeightRegular,\r\n lineHeight: tokens.lineHeightBase300,\r\n minHeight: \"32px\",\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n \":hover\": {\r\n backgroundColor: tokens.colorNeutralBackground1Hover,\r\n },\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n \":active\": {\r\n backgroundColor: tokens.colorNeutralBackground1Pressed,\r\n },\r\n },\r\n icon: {\r\n pointerEvents: \"auto\", // re‑enable interaction\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n position: \"absolute\",\r\n right: tokens.spacingHorizontalSNudge,\r\n color: tokens.colorNeutralForeground2,\r\n cursor: \"pointer\",\r\n fontSize: tokens.fontSizeBase400,\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n \":hover\": {\r\n color: tokens.colorNeutralForeground2Hover,\r\n },\r\n },\r\n});\r\n\r\nexport const DraggableLine: React.FunctionComponent<DraggableLineProps> = (props) => {\r\n DraggableLine.displayName = \"DraggableLine\";\r\n const classes = useDraggableStyles();\r\n return (\r\n <div\r\n className={classes.draggable}\r\n title={props.tooltip}\r\n draggable={true}\r\n onDragStart={(event) => {\r\n event.dataTransfer.setData(props.format, props.data);\r\n }}\r\n >\r\n {props.label}\r\n {props.onDelete && <DeleteFilled className={classes.icon} onClick={props.onDelete} />}\r\n </div>\r\n );\r\n};\r\n","import { Popover, PopoverSurface, PopoverTrigger } from \"@fluentui/react-components\";\r\nimport type { OnOpenChangeData, OpenPopoverEvents } from \"@fluentui/react-components\";\r\nimport type { FunctionComponent, PropsWithChildren } from \"react\";\r\nimport { useState, useEffect } from \"react\";\r\n\r\ntype PositionedPopoverProps = {\r\n x: number;\r\n y: number;\r\n visible: boolean;\r\n hide: () => void;\r\n};\r\n\r\n/**\r\n * PositionedPopover component that shows a popover at specific coordinates\r\n * @param props - The component props\r\n * @returns The positioned popover component\r\n */\r\nexport const PositionedPopover: FunctionComponent<PropsWithChildren<PositionedPopoverProps>> = (props) => {\r\n PositionedPopover.displayName = \"PositionedPopover\";\r\n const [open, setOpen] = useState(false);\r\n\r\n useEffect(() => {\r\n setOpen(props.visible);\r\n }, [props.visible, props.x, props.y]);\r\n\r\n const handleOpenChange = (_: OpenPopoverEvents, data: OnOpenChangeData) => {\r\n setOpen(data.open);\r\n\r\n if (!data.open) {\r\n props.hide();\r\n }\r\n };\r\n\r\n return (\r\n <Popover\r\n open={open}\r\n onOpenChange={handleOpenChange}\r\n positioning={{\r\n position: \"below\", // Places the popover directly below the trigger element\r\n autoSize: \"height-always\", //Automatically adjusts the popover height to fit within the viewport\r\n fallbackPositions: [\"above\", \"after\", \"before\"], //If the primary position doesn't fit, automatically tries these positions in order\r\n }}\r\n withArrow={false} // Removes arrow that points to trigger element\r\n >\r\n <PopoverTrigger>\r\n {/* Use the invisible div as the trigger location*/}\r\n <div\r\n style={{\r\n position: \"absolute\",\r\n left: `${props.x}px`,\r\n top: `${props.y}px`,\r\n visibility: \"hidden\",\r\n }}\r\n />\r\n </PopoverTrigger>\r\n <PopoverSurface>{props.children}</PopoverSurface>\r\n </Popover>\r\n );\r\n};\r\n","import { Field, SearchBox as FluentSearchBox, makeStyles } from \"@fluentui/react-components\";\r\nimport type { InputOnChangeData, SearchBoxChangeEvent } from \"@fluentui/react-components\";\r\nimport { forwardRef } from \"react\";\r\n\r\ntype SearchProps = {\r\n onChange: (val: string) => void;\r\n placeholder?: string;\r\n};\r\nconst useStyles = makeStyles({\r\n search: {\r\n minWidth: \"50px\",\r\n },\r\n});\r\n\r\nexport const SearchBar = forwardRef<HTMLInputElement, SearchProps>((props, ref) => {\r\n SearchBar.displayName = \"SearchBar\";\r\n\r\n const classes = useStyles();\r\n const onChange: (ev: SearchBoxChangeEvent, data: InputOnChangeData) => void = (_, data) => {\r\n props.onChange(data.value);\r\n };\r\n\r\n return (\r\n <Field>\r\n <FluentSearchBox ref={ref} className={classes.search} placeholder={props.placeholder} onChange={onChange} />\r\n </Field>\r\n );\r\n});\r\n","import { makeStyles, tokens } from \"@fluentui/react-components\";\r\nimport { SearchBar } from \"./searchBar\";\r\nimport type { FunctionComponent } from \"react\";\r\nimport { useState, useEffect } from \"react\";\r\n\r\ntype SearchBoxProps = {\r\n items: string[];\r\n onItemSelected: (item: string) => void;\r\n title?: string;\r\n};\r\n\r\nconst useSearchBoxStyles = makeStyles({\r\n searchBox: {\r\n width: \"300px\",\r\n height: \"400px\",\r\n backgroundColor: tokens.colorNeutralBackground1,\r\n border: `${tokens.strokeWidthThick} solid ${tokens.colorNeutralStroke1}`,\r\n borderRadius: tokens.borderRadiusMedium,\r\n boxShadow: tokens.shadow16,\r\n display: \"grid\",\r\n gridTemplateRows: \"auto auto 1fr\",\r\n overflow: \"hidden\", // Prevent content overflow\r\n },\r\n title: {\r\n borderBottom: `${tokens.strokeWidthThin} solid ${tokens.colorNeutralStroke2}`,\r\n margin: tokens.spacingVerticalXS,\r\n paddingBottom: tokens.spacingVerticalXS,\r\n color: tokens.colorNeutralForeground1,\r\n gridRow: \"1\",\r\n fontSize: tokens.fontSizeBase300,\r\n fontWeight: tokens.fontWeightSemibold,\r\n },\r\n filterContainer: {\r\n margin: tokens.spacingVerticalXS,\r\n paddingBottom: tokens.spacingVerticalXS,\r\n gridRow: \"2\",\r\n },\r\n list: {\r\n gridRow: \"3\",\r\n overflowY: \"auto\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n maxHeight: \"100%\",\r\n },\r\n listItem: {\r\n marginLeft: tokens.spacingHorizontalXS,\r\n marginRight: tokens.spacingHorizontalXS,\r\n cursor: \"pointer\",\r\n color: tokens.colorNeutralForeground1,\r\n marginTop: tokens.spacingVerticalXXS,\r\n marginBottom: tokens.spacingVerticalXXS,\r\n padding: tokens.spacingVerticalXS,\r\n borderRadius: tokens.borderRadiusSmall,\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n \":hover\": {\r\n backgroundColor: tokens.colorNeutralBackground2Hover,\r\n },\r\n },\r\n listItemSelected: {\r\n backgroundColor: tokens.colorBrandBackground,\r\n color: tokens.colorNeutralForegroundOnBrand,\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n \":hover\": {\r\n backgroundColor: tokens.colorBrandBackgroundHover,\r\n },\r\n },\r\n});\r\n\r\n/**\r\n * SearchBox component that displays a popup with search functionality\r\n * @param props - The component props\r\n * @returns The search box component\r\n */\r\nexport const SearchBox: FunctionComponent<SearchBoxProps> = (props) => {\r\n SearchBox.displayName = \"SearchBox\";\r\n\r\n const classes = useSearchBoxStyles();\r\n const [selectedIndex, setSelectedIndex] = useState(0);\r\n const [items, setItems] = useState(props.items);\r\n // In future could replace this with a fluent component like menuList or comboBox depending on desired UX\r\n const onKeyDown = (evt: React.KeyboardEvent) => {\r\n if (items.length === 0) {\r\n return;\r\n }\r\n if (evt.code === \"Enter\") {\r\n props.onItemSelected(items[selectedIndex]);\r\n return;\r\n }\r\n\r\n if (evt.code === \"ArrowDown\") {\r\n setSelectedIndex((prev) => Math.min(prev + 1, items.length - 1));\r\n return;\r\n }\r\n\r\n if (evt.code === \"ArrowUp\") {\r\n setSelectedIndex((prev) => Math.max(prev - 1, 0));\r\n return;\r\n }\r\n };\r\n\r\n const onFilterChange = (filter: string) => {\r\n const filteredItems = props.items.filter((item) => item.toLowerCase().includes(filter.toLowerCase()));\r\n setItems(filteredItems);\r\n };\r\n\r\n useEffect(() => {\r\n setItems(props.items);\r\n }, [props.items]);\r\n\r\n return (\r\n <div className={classes.searchBox} onKeyDown={onKeyDown}>\r\n {props.title ? <div className={classes.title}>{props.title}</div> : null}\r\n <div className={classes.filterContainer}>\r\n <SearchBar onChange={onFilterChange} placeholder=\"Search...\" />\r\n </div>\r\n <div role=\"listbox\" className={classes.list}>\r\n {items.map((item, index) => (\r\n <div\r\n role=\"option\"\r\n key={item}\r\n className={`${classes.listItem} ${index === selectedIndex ? classes.listItemSelected : \"\"}`}\r\n onClick={() => props.onItemSelected(item)}\r\n >\r\n {item}\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n );\r\n};\r\n","import { Body1Strong, makeStyles, tokens } from \"@fluentui/react-components\";\r\nimport type { FluentIcon } from \"@fluentui/react-icons\";\r\nimport type { FunctionComponent, PropsWithChildren } from \"react\";\r\n\r\nconst useStyles = makeStyles({\r\n rootDiv: {\r\n flex: 1,\r\n overflow: \"hidden\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n },\r\n icon: {\r\n width: tokens.fontSizeBase400,\r\n height: tokens.fontSizeBase400,\r\n verticalAlign: \"middle\",\r\n },\r\n header: {\r\n height: tokens.fontSizeBase400,\r\n fontSize: tokens.fontSizeBase400,\r\n textAlign: \"center\",\r\n verticalAlign: \"middle\",\r\n },\r\n});\r\n\r\nexport type PaneProps = {\r\n title: string;\r\n icon?: FluentIcon;\r\n};\r\nexport const Pane: FunctionComponent<PropsWithChildren<PaneProps>> = (props) => {\r\n const classes = useStyles();\r\n return (\r\n <div className={classes.rootDiv}>\r\n <div className={classes.header}>\r\n {props.icon ? (\r\n <props.icon className={classes.icon} />\r\n ) : (\r\n <img className={classes.icon} id=\"logo\" src=\"https://www.babylonjs.com/Assets/logo-babylonjs-social-twitter.png\" />\r\n )}\r\n <Body1Strong id=\"title\">{props.title}</Body1Strong>\r\n </div>\r\n {props.children}\r\n </div>\r\n );\r\n};\r\n","import { PropertyLine } from \"./propertyLine\";\r\nimport type { PropertyLineProps } from \"./propertyLine\";\r\nimport type { FunctionComponent } from \"react\";\r\nimport { Textarea } from \"../../primitives/textarea\";\r\nimport type { TextareaProps } from \"../../primitives/textarea\";\r\n/**\r\n * Wraps textarea in a property line\r\n * @param props - PropertyLineProps and TextProps\r\n * @returns property-line wrapped text\r\n */\r\nexport const TextAreaPropertyLine: FunctionComponent<PropertyLineProps<string> & TextareaProps> = (props) => {\r\n TextAreaPropertyLine.displayName = \"TextAreaPropertyLine\";\r\n return (\r\n <PropertyLine {...props}>\r\n <Textarea {...props} />\r\n </PropertyLine>\r\n );\r\n};\r\n"],"names":["InterceptorHooksMaps","_jsx","FluentCollapse","FluentToggleButton","FluentButton","useInputStyles","_jsxs","InfoLabel","Checkbox","useStyles","FluentAccordion","Button","_Fragment","FluentToolbar","SearchBox","FluentSwitch","Accordion","List","FluentInfoLabel","FluentInput","FluentSpinButton","FluentMessageBar","FluentDropdown","FluentColorPicker","UpdateTexture","FluentTextarea","Color4Gradient","FluentCheckbox","Toolbar","IsAdvancedDynamicTexture","FluentComboBox","FluentSearchBox"],"mappings":"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"}
|