@babylonjs/inspector 8.41.0-preview → 8.41.1-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.
@@ -1,5 +1,5 @@
1
1
  import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
2
- import { B as ButtonLine, a as SyncedSliderPropertyLine, S as SwitchPropertyLine, C as Collapse, T as ToolsServiceIdentity } from './index-Cxm78n40.js';
2
+ import { B as ButtonLine, a as SyncedSliderPropertyLine, S as SwitchPropertyLine, C as Collapse, T as ToolsServiceIdentity } from './index-BUtV9Nch.js';
3
3
  import { useState, useRef, useCallback } from 'react';
4
4
  import { Tools } from '@babylonjs/core/Misc/tools.js';
5
5
  import { VideoRecorder } from '@babylonjs/core/Misc/videoRecorder.js';
@@ -192,4 +192,4 @@ var captureService = {
192
192
  };
193
193
 
194
194
  export { CaptureServiceDefinition, captureService as default };
195
- //# sourceMappingURL=captureService-CAxDQamt.js.map
195
+ //# sourceMappingURL=captureService-Bu7areEZ.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"captureService-CAxDQamt.js","sources":["../../../../../../../../dev/inspector-v2/src/components/tools/captureTools.tsx","../../../../../../../../dev/inspector-v2/src/services/panes/tools/captureService.tsx"],"sourcesContent":["import { ButtonLine } from \"shared-ui-components/fluent/hoc/buttonLine\";\r\nimport { useState, useRef, useCallback } from \"react\";\r\nimport type { FunctionComponent } from \"react\";\r\nimport { Tools } from \"core/Misc/tools\";\r\nimport type { Scene } from \"core/scene\";\r\nimport { SyncedSliderPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/syncedSliderPropertyLine\";\r\nimport type { IScreenshotSize } from \"core/Misc/interfaces/screenshotSize\";\r\nimport { SwitchPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/switchPropertyLine\";\r\nimport { VideoRecorder } from \"core/Misc/videoRecorder\";\r\nimport { captureEquirectangularFromScene } from \"core/Misc/equirectangularCapture\";\r\nimport { Collapse } from \"shared-ui-components/fluent/primitives/collapse\";\r\nimport { CameraRegular, RecordRegular, RecordStopRegular } from \"@fluentui/react-icons\";\r\nimport { FrameGraphUtils } from \"core/FrameGraph/frameGraphUtils\";\r\n\r\nexport const CaptureRttTools: FunctionComponent<{ scene: Scene }> = ({ scene }) => {\r\n const [useWidthHeight, setUseWidthHeight] = useState(false);\r\n const [screenshotSize, setScreenshotSize] = useState<IScreenshotSize>({ precision: 1 });\r\n\r\n const captureRender = useCallback(async () => {\r\n const sizeToUse: IScreenshotSize = { ...screenshotSize };\r\n if (!useWidthHeight) {\r\n sizeToUse.width = undefined;\r\n sizeToUse.height = undefined;\r\n }\r\n\r\n if (scene.activeCamera) {\r\n Tools.CreateScreenshotUsingRenderTarget(scene.getEngine(), scene.activeCamera, sizeToUse, undefined, undefined, 4);\r\n }\r\n }, [scene, screenshotSize, useWidthHeight]);\r\n\r\n return (\r\n <>\r\n <ButtonLine label=\"Capture\" icon={CameraRegular} onClick={captureRender} />\r\n <SyncedSliderPropertyLine\r\n label=\"Precision\"\r\n value={screenshotSize.precision ?? 1}\r\n onChange={(value) => setScreenshotSize({ ...screenshotSize, precision: value ?? 1 })}\r\n min={0.1}\r\n max={10}\r\n step={0.1}\r\n />\r\n <SwitchPropertyLine label=\"Use Custom Width/Height\" value={useWidthHeight} onChange={(value) => setUseWidthHeight(value)} />\r\n <Collapse visible={useWidthHeight}>\r\n <SyncedSliderPropertyLine\r\n label=\"Width\"\r\n value={screenshotSize.width ?? 512}\r\n onChange={(data) => setScreenshotSize({ ...screenshotSize, width: data ?? 512 })}\r\n min={1}\r\n step={1}\r\n />\r\n <SyncedSliderPropertyLine\r\n label=\"Height\"\r\n value={screenshotSize.height ?? 512}\r\n onChange={(data) => setScreenshotSize({ ...screenshotSize, height: data ?? 512 })}\r\n min={1}\r\n step={1}\r\n />\r\n </Collapse>\r\n </>\r\n );\r\n};\r\n\r\nexport const CaptureScreenshotTools: FunctionComponent<{ scene: Scene }> = ({ scene }) => {\r\n const [isRecording, setIsRecording] = useState(false);\r\n const videoRecorder = useRef<VideoRecorder>();\r\n\r\n const captureScreenshot = useCallback(() => {\r\n const camera = scene.frameGraph ? FrameGraphUtils.FindMainCamera(scene.frameGraph) : scene.activeCamera;\r\n if (camera) {\r\n Tools.CreateScreenshot(scene.getEngine(), camera, { precision: 1 });\r\n }\r\n }, [scene]);\r\n\r\n const captureEquirectangularAsync = useCallback(async () => {\r\n const currentActiveCamera = scene.activeCamera;\r\n if (!currentActiveCamera && scene.frameGraph) {\r\n scene.activeCamera = FrameGraphUtils.FindMainCamera(scene.frameGraph);\r\n }\r\n if (scene.activeCamera) {\r\n await captureEquirectangularFromScene(scene, { size: 1024, filename: \"equirectangular_capture.png\" });\r\n }\r\n // eslint-disable-next-line require-atomic-updates\r\n scene.activeCamera = currentActiveCamera;\r\n }, [scene]);\r\n\r\n const recordVideoAsync = useCallback(async () => {\r\n if (videoRecorder.current && videoRecorder.current.isRecording) {\r\n videoRecorder.current.stopRecording();\r\n setIsRecording(false);\r\n return;\r\n }\r\n\r\n if (!videoRecorder.current) {\r\n videoRecorder.current = new VideoRecorder(scene.getEngine());\r\n }\r\n\r\n void videoRecorder.current.startRecording();\r\n setIsRecording(true);\r\n }, [scene]);\r\n\r\n return (\r\n <>\r\n <ButtonLine label=\"Capture\" icon={CameraRegular} onClick={captureScreenshot} />\r\n <ButtonLine label=\"Capture Equirectangular\" icon={CameraRegular} onClick={captureEquirectangularAsync} />\r\n <ButtonLine label={isRecording ? \"Stop Recording\" : \"Record Video\"} icon={isRecording ? RecordStopRegular : RecordRegular} onClick={recordVideoAsync} />\r\n </>\r\n );\r\n};\r\n","import type { ServiceDefinition } from \"../../../modularity/serviceDefinition\";\r\nimport { ToolsServiceIdentity } from \"../toolsService\";\r\nimport type { IToolsService } from \"../toolsService\";\r\nimport type { IDisposable } from \"core/scene\";\r\nimport { CaptureRttTools, CaptureScreenshotTools } from \"../../../components/tools/captureTools\";\r\n\r\nexport const CaptureServiceDefinition: ServiceDefinition<[], [IToolsService]> = {\r\n friendlyName: \"Capture Tools\",\r\n consumes: [ToolsServiceIdentity],\r\n factory: (toolsService) => {\r\n const contentRegistrations: IDisposable[] = [];\r\n\r\n // Screenshot capture content\r\n contentRegistrations.push(\r\n toolsService.addSectionContent({\r\n key: \"Screenshot Capture\",\r\n section: \"Screenshot Capture\",\r\n component: ({ context }) => <CaptureScreenshotTools scene={context} />,\r\n })\r\n );\r\n\r\n // RTT capture content\r\n contentRegistrations.push(\r\n toolsService.addSectionContent({\r\n key: \"RTT Capture\",\r\n section: \"RTT Capture\",\r\n component: ({ context }) => <CaptureRttTools scene={context} />,\r\n })\r\n );\r\n\r\n return {\r\n dispose: () => {\r\n contentRegistrations.forEach((registration) => registration.dispose());\r\n },\r\n };\r\n },\r\n};\r\n\r\nexport default {\r\n serviceDefinitions: [CaptureServiceDefinition],\r\n} as const;\r\n"],"names":["_jsxs","_jsx","_Fragment"],"mappings":"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"}
1
+ {"version":3,"file":"captureService-Bu7areEZ.js","sources":["../../../../../../../../dev/inspector-v2/src/components/tools/captureTools.tsx","../../../../../../../../dev/inspector-v2/src/services/panes/tools/captureService.tsx"],"sourcesContent":["import { ButtonLine } from \"shared-ui-components/fluent/hoc/buttonLine\";\r\nimport { useState, useRef, useCallback } from \"react\";\r\nimport type { FunctionComponent } from \"react\";\r\nimport { Tools } from \"core/Misc/tools\";\r\nimport type { Scene } from \"core/scene\";\r\nimport { SyncedSliderPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/syncedSliderPropertyLine\";\r\nimport type { IScreenshotSize } from \"core/Misc/interfaces/screenshotSize\";\r\nimport { SwitchPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/switchPropertyLine\";\r\nimport { VideoRecorder } from \"core/Misc/videoRecorder\";\r\nimport { captureEquirectangularFromScene } from \"core/Misc/equirectangularCapture\";\r\nimport { Collapse } from \"shared-ui-components/fluent/primitives/collapse\";\r\nimport { CameraRegular, RecordRegular, RecordStopRegular } from \"@fluentui/react-icons\";\r\nimport { FrameGraphUtils } from \"core/FrameGraph/frameGraphUtils\";\r\n\r\nexport const CaptureRttTools: FunctionComponent<{ scene: Scene }> = ({ scene }) => {\r\n const [useWidthHeight, setUseWidthHeight] = useState(false);\r\n const [screenshotSize, setScreenshotSize] = useState<IScreenshotSize>({ precision: 1 });\r\n\r\n const captureRender = useCallback(async () => {\r\n const sizeToUse: IScreenshotSize = { ...screenshotSize };\r\n if (!useWidthHeight) {\r\n sizeToUse.width = undefined;\r\n sizeToUse.height = undefined;\r\n }\r\n\r\n if (scene.activeCamera) {\r\n Tools.CreateScreenshotUsingRenderTarget(scene.getEngine(), scene.activeCamera, sizeToUse, undefined, undefined, 4);\r\n }\r\n }, [scene, screenshotSize, useWidthHeight]);\r\n\r\n return (\r\n <>\r\n <ButtonLine label=\"Capture\" icon={CameraRegular} onClick={captureRender} />\r\n <SyncedSliderPropertyLine\r\n label=\"Precision\"\r\n value={screenshotSize.precision ?? 1}\r\n onChange={(value) => setScreenshotSize({ ...screenshotSize, precision: value ?? 1 })}\r\n min={0.1}\r\n max={10}\r\n step={0.1}\r\n />\r\n <SwitchPropertyLine label=\"Use Custom Width/Height\" value={useWidthHeight} onChange={(value) => setUseWidthHeight(value)} />\r\n <Collapse visible={useWidthHeight}>\r\n <SyncedSliderPropertyLine\r\n label=\"Width\"\r\n value={screenshotSize.width ?? 512}\r\n onChange={(data) => setScreenshotSize({ ...screenshotSize, width: data ?? 512 })}\r\n min={1}\r\n step={1}\r\n />\r\n <SyncedSliderPropertyLine\r\n label=\"Height\"\r\n value={screenshotSize.height ?? 512}\r\n onChange={(data) => setScreenshotSize({ ...screenshotSize, height: data ?? 512 })}\r\n min={1}\r\n step={1}\r\n />\r\n </Collapse>\r\n </>\r\n );\r\n};\r\n\r\nexport const CaptureScreenshotTools: FunctionComponent<{ scene: Scene }> = ({ scene }) => {\r\n const [isRecording, setIsRecording] = useState(false);\r\n const videoRecorder = useRef<VideoRecorder>();\r\n\r\n const captureScreenshot = useCallback(() => {\r\n const camera = scene.frameGraph ? FrameGraphUtils.FindMainCamera(scene.frameGraph) : scene.activeCamera;\r\n if (camera) {\r\n Tools.CreateScreenshot(scene.getEngine(), camera, { precision: 1 });\r\n }\r\n }, [scene]);\r\n\r\n const captureEquirectangularAsync = useCallback(async () => {\r\n const currentActiveCamera = scene.activeCamera;\r\n if (!currentActiveCamera && scene.frameGraph) {\r\n scene.activeCamera = FrameGraphUtils.FindMainCamera(scene.frameGraph);\r\n }\r\n if (scene.activeCamera) {\r\n await captureEquirectangularFromScene(scene, { size: 1024, filename: \"equirectangular_capture.png\" });\r\n }\r\n // eslint-disable-next-line require-atomic-updates\r\n scene.activeCamera = currentActiveCamera;\r\n }, [scene]);\r\n\r\n const recordVideoAsync = useCallback(async () => {\r\n if (videoRecorder.current && videoRecorder.current.isRecording) {\r\n videoRecorder.current.stopRecording();\r\n setIsRecording(false);\r\n return;\r\n }\r\n\r\n if (!videoRecorder.current) {\r\n videoRecorder.current = new VideoRecorder(scene.getEngine());\r\n }\r\n\r\n void videoRecorder.current.startRecording();\r\n setIsRecording(true);\r\n }, [scene]);\r\n\r\n return (\r\n <>\r\n <ButtonLine label=\"Capture\" icon={CameraRegular} onClick={captureScreenshot} />\r\n <ButtonLine label=\"Capture Equirectangular\" icon={CameraRegular} onClick={captureEquirectangularAsync} />\r\n <ButtonLine label={isRecording ? \"Stop Recording\" : \"Record Video\"} icon={isRecording ? RecordStopRegular : RecordRegular} onClick={recordVideoAsync} />\r\n </>\r\n );\r\n};\r\n","import type { ServiceDefinition } from \"../../../modularity/serviceDefinition\";\r\nimport { ToolsServiceIdentity } from \"../toolsService\";\r\nimport type { IToolsService } from \"../toolsService\";\r\nimport type { IDisposable } from \"core/scene\";\r\nimport { CaptureRttTools, CaptureScreenshotTools } from \"../../../components/tools/captureTools\";\r\n\r\nexport const CaptureServiceDefinition: ServiceDefinition<[], [IToolsService]> = {\r\n friendlyName: \"Capture Tools\",\r\n consumes: [ToolsServiceIdentity],\r\n factory: (toolsService) => {\r\n const contentRegistrations: IDisposable[] = [];\r\n\r\n // Screenshot capture content\r\n contentRegistrations.push(\r\n toolsService.addSectionContent({\r\n key: \"Screenshot Capture\",\r\n section: \"Screenshot Capture\",\r\n component: ({ context }) => <CaptureScreenshotTools scene={context} />,\r\n })\r\n );\r\n\r\n // RTT capture content\r\n contentRegistrations.push(\r\n toolsService.addSectionContent({\r\n key: \"RTT Capture\",\r\n section: \"RTT Capture\",\r\n component: ({ context }) => <CaptureRttTools scene={context} />,\r\n })\r\n );\r\n\r\n return {\r\n dispose: () => {\r\n contentRegistrations.forEach((registration) => registration.dispose());\r\n },\r\n };\r\n },\r\n};\r\n\r\nexport default {\r\n serviceDefinitions: [CaptureServiceDefinition],\r\n} as const;\r\n"],"names":["_jsxs","_jsx","_Fragment"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
2
- import { M as MakeLazyComponent, B as ButtonLine, S as SwitchPropertyLine, N as NumberDropdownPropertyLine, C as Collapse, a as SyncedSliderPropertyLine, T as ToolsServiceIdentity } from './index-Cxm78n40.js';
2
+ import { M as MakeLazyComponent, B as ButtonLine, S as SwitchPropertyLine, N as NumberDropdownPropertyLine, C as Collapse, a as SyncedSliderPropertyLine, T as ToolsServiceIdentity } from './index-BUtV9Nch.js';
3
3
  import { SceneSerializer } from '@babylonjs/core/Misc/sceneSerializer.js';
4
4
  import { Tools } from '@babylonjs/core/Misc/tools.js';
5
5
  import { EnvironmentTextureTools } from '@babylonjs/core/Misc/environmentTextureTools.js';
@@ -242,4 +242,4 @@ var exportService = {
242
242
  };
243
243
 
244
244
  export { ExportServiceDefinition, exportService as default };
245
- //# sourceMappingURL=exportService-C670vSgg.js.map
245
+ //# sourceMappingURL=exportService-BnE7xiJF.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"exportService-C670vSgg.js","sources":["../../../../../../../../dev/inspector-v2/src/components/tools/exportTools.tsx","../../../../../../../../dev/inspector-v2/src/services/panes/tools/exportService.tsx"],"sourcesContent":["import { NumberDropdownPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/dropdownPropertyLine\";\r\nimport { SceneSerializer } from \"core/Misc/sceneSerializer\";\r\nimport { Tools } from \"core/Misc/tools\";\r\nimport { EnvironmentTextureTools } from \"core/Misc/environmentTextureTools\";\r\nimport type { CubeTexture } from \"core/Materials/Textures/cubeTexture\";\r\nimport { Logger } from \"core/Misc/logger\";\r\nimport { useCallback, useState } from \"react\";\r\nimport type { FunctionComponent } from \"react\";\r\nimport type { Scene } from \"core/scene\";\r\nimport { ButtonLine } from \"shared-ui-components/fluent/hoc/buttonLine\";\r\nimport { SyncedSliderPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/syncedSliderPropertyLine\";\r\nimport type { Node } from \"core/node\";\r\nimport { Mesh } from \"core/Meshes/mesh\";\r\nimport type { PBRMaterial } from \"core/Materials/PBR/pbrMaterial\";\r\nimport type { StandardMaterial } from \"core/Materials/standardMaterial\";\r\nimport type { BackgroundMaterial } from \"core/Materials/Background/backgroundMaterial\";\r\nimport { Texture } from \"core/Materials/Textures/texture\";\r\nimport { Camera } from \"core/Cameras/camera\";\r\nimport { Light } from \"core/Lights/light\";\r\nimport { SwitchPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/switchPropertyLine\";\r\n\r\nimport { MakeLazyComponent } from \"shared-ui-components/fluent/primitives/lazyComponent\";\r\nimport { Collapse } from \"shared-ui-components/fluent/primitives/collapse\";\r\nimport { ArrowDownloadRegular } from \"@fluentui/react-icons\";\r\n\r\nconst EnvExportImageTypes = [\r\n { label: \"PNG\", value: 0, imageType: \"image/png\" },\r\n { label: \"WebP\", value: 1, imageType: \"image/webp\" },\r\n] as const;\r\n\r\ninterface IBabylonExportOptionsState {\r\n imageTypeIndex: number;\r\n imageQuality: number;\r\n iblDiffuse: boolean;\r\n}\r\n\r\nexport const ExportBabylonTools: FunctionComponent<{ scene: Scene }> = ({ scene }) => {\r\n const [babylonExportOptions, setBabylonExportOptions] = useState<Readonly<IBabylonExportOptionsState>>({\r\n imageTypeIndex: 0,\r\n imageQuality: 0.8,\r\n iblDiffuse: false,\r\n });\r\n\r\n const exportBabylon = useCallback(async () => {\r\n const strScene = JSON.stringify(SceneSerializer.Serialize(scene));\r\n const blob = new Blob([strScene], { type: \"octet/stream\" });\r\n Tools.Download(blob, \"scene.babylon\");\r\n }, [scene]);\r\n\r\n const createEnvTexture = useCallback(async () => {\r\n if (!scene.environmentTexture) {\r\n return;\r\n }\r\n\r\n try {\r\n const buffer = await EnvironmentTextureTools.CreateEnvTextureAsync(scene.environmentTexture as CubeTexture, {\r\n imageType: EnvExportImageTypes[babylonExportOptions.imageTypeIndex].imageType,\r\n imageQuality: babylonExportOptions.imageQuality,\r\n disableIrradianceTexture: !babylonExportOptions.iblDiffuse,\r\n });\r\n const blob = new Blob([buffer], { type: \"octet/stream\" });\r\n Tools.Download(blob, \"environment.env\");\r\n } catch (error: any) {\r\n Logger.Error(error);\r\n alert(error);\r\n }\r\n }, [scene, babylonExportOptions]);\r\n\r\n return (\r\n <>\r\n <ButtonLine label=\"Export to Babylon\" icon={ArrowDownloadRegular} onClick={exportBabylon} />\r\n {!scene.getEngine().premultipliedAlpha && scene.environmentTexture && scene.environmentTexture._prefiltered && scene.activeCamera && (\r\n <>\r\n <ButtonLine label=\"Generate .env texture\" icon={ArrowDownloadRegular} onClick={createEnvTexture} />\r\n {scene.environmentTexture.irradianceTexture && (\r\n <SwitchPropertyLine\r\n key=\"iblDiffuse\"\r\n label=\"Diffuse Texture\"\r\n description=\"Export diffuse texture for IBL\"\r\n value={babylonExportOptions.iblDiffuse}\r\n onChange={(value: boolean) => {\r\n setBabylonExportOptions((prev) => ({ ...prev, iblDiffuse: value }));\r\n }}\r\n />\r\n )}\r\n <NumberDropdownPropertyLine\r\n label=\"Image type\"\r\n options={EnvExportImageTypes}\r\n value={babylonExportOptions.imageTypeIndex}\r\n onChange={(val) => {\r\n setBabylonExportOptions((prev) => ({ ...prev, imageTypeIndex: val as number }));\r\n }}\r\n />\r\n <Collapse visible={babylonExportOptions.imageTypeIndex > 0}>\r\n <SyncedSliderPropertyLine\r\n label=\"Quality\"\r\n value={babylonExportOptions.imageQuality}\r\n onChange={(value) => setBabylonExportOptions((prev) => ({ ...prev, imageQuality: value }))}\r\n min={0}\r\n max={1}\r\n />\r\n </Collapse>\r\n </>\r\n )}\r\n </>\r\n );\r\n};\r\n\r\ninterface IGltfExportOptionsState {\r\n exportDisabledNodes: boolean;\r\n exportSkyboxes: boolean;\r\n exportCameras: boolean;\r\n exportLights: boolean;\r\n dracoCompression: boolean;\r\n}\r\n\r\nexport const ExportGltfTools = MakeLazyComponent(async () => {\r\n // Defer importing anything from the serializers package until this component is actually mounted.\r\n const { GLTF2Export } = await import(\"serializers/glTF/2.0/glTFSerializer\");\r\n\r\n return (props: { scene: Scene }) => {\r\n const [isExportingGltf, setIsExportingGltf] = useState(false);\r\n const [gltfExportOptions, setGltfExportOptions] = useState<Readonly<IGltfExportOptionsState>>({\r\n exportDisabledNodes: false,\r\n exportSkyboxes: false,\r\n exportCameras: false,\r\n exportLights: false,\r\n dracoCompression: false,\r\n });\r\n\r\n const exportGLTF = useCallback(async () => {\r\n setIsExportingGltf(true);\r\n\r\n const shouldExport = (node: Node): boolean => {\r\n if (!gltfExportOptions.exportDisabledNodes) {\r\n if (!node.isEnabled()) {\r\n return false;\r\n }\r\n }\r\n\r\n if (!gltfExportOptions.exportSkyboxes) {\r\n if (node instanceof Mesh) {\r\n if (node.material) {\r\n const material = node.material as PBRMaterial | StandardMaterial | BackgroundMaterial;\r\n const reflectionTexture = material.reflectionTexture;\r\n if (reflectionTexture && reflectionTexture.coordinatesMode === Texture.SKYBOX_MODE) {\r\n return false;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (!gltfExportOptions.exportCameras) {\r\n if (node instanceof Camera) {\r\n return false;\r\n }\r\n }\r\n\r\n if (!gltfExportOptions.exportLights) {\r\n if (node instanceof Light) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n };\r\n\r\n try {\r\n const glb = await GLTF2Export.GLBAsync(props.scene, \"scene\", {\r\n meshCompressionMethod: gltfExportOptions.dracoCompression ? \"Draco\" : undefined,\r\n shouldExportNode: (node) => shouldExport(node),\r\n });\r\n glb.downloadFiles();\r\n } catch (reason) {\r\n Logger.Error(`Failed to export GLB: ${reason}`);\r\n } finally {\r\n setIsExportingGltf(false);\r\n }\r\n }, [gltfExportOptions, props.scene]);\r\n\r\n return (\r\n <>\r\n <SwitchPropertyLine\r\n key=\"GLTFExportDisabledNodes\"\r\n label=\"Export Disabled Nodes\"\r\n description=\"Whether to export nodes that are disabled in the scene.\"\r\n value={gltfExportOptions.exportDisabledNodes}\r\n onChange={(checked: boolean) => setGltfExportOptions({ ...gltfExportOptions, exportDisabledNodes: checked })}\r\n />\r\n <SwitchPropertyLine\r\n key=\"GLTFExportSkyboxes\"\r\n label=\"Export Skyboxes\"\r\n description=\"Whether to export skybox nodes in the scene.\"\r\n value={gltfExportOptions.exportSkyboxes}\r\n onChange={(checked: boolean) => setGltfExportOptions({ ...gltfExportOptions, exportSkyboxes: checked })}\r\n />\r\n <SwitchPropertyLine\r\n key=\"GLTFExportCameras\"\r\n label=\"Export Cameras\"\r\n description=\"Whether to export cameras in the scene.\"\r\n value={gltfExportOptions.exportCameras}\r\n onChange={(checked: boolean) => setGltfExportOptions({ ...gltfExportOptions, exportCameras: checked })}\r\n />\r\n <SwitchPropertyLine\r\n key=\"GLTFExportLights\"\r\n label=\"Export Lights\"\r\n description=\"Whether to export lights in the scene.\"\r\n value={gltfExportOptions.exportLights}\r\n onChange={(checked: boolean) => setGltfExportOptions({ ...gltfExportOptions, exportLights: checked })}\r\n />\r\n <SwitchPropertyLine\r\n key=\"GLTFDracoCompression\"\r\n label=\"Draco Compression\"\r\n description=\"Whether to apply Draco compression to geometry.\"\r\n value={gltfExportOptions.dracoCompression}\r\n onChange={(checked: boolean) => setGltfExportOptions({ ...gltfExportOptions, dracoCompression: checked })}\r\n />\r\n <ButtonLine label=\"Export to GLB\" icon={ArrowDownloadRegular} onClick={exportGLTF} disabled={isExportingGltf} />\r\n </>\r\n );\r\n };\r\n});\r\n","import type { ServiceDefinition } from \"../../../modularity/serviceDefinition\";\r\nimport { ToolsServiceIdentity } from \"../toolsService\";\r\nimport type { IToolsService } from \"../toolsService\";\r\nimport type { IDisposable } from \"core/scene\";\r\nimport { ExportBabylonTools, ExportGltfTools } from \"../../../components/tools/exportTools\";\r\n\r\nexport const ExportServiceDefinition: ServiceDefinition<[], [IToolsService]> = {\r\n friendlyName: \"Export Tools\",\r\n consumes: [ToolsServiceIdentity],\r\n factory: (toolsService) => {\r\n const contentRegistrations: IDisposable[] = [];\r\n\r\n // glTF export content\r\n contentRegistrations.push(\r\n toolsService.addSectionContent({\r\n key: \"glTF Export\",\r\n section: \"glTF Export\",\r\n component: ({ context }) => <ExportGltfTools scene={context} />,\r\n })\r\n );\r\n\r\n // Babylon export content\r\n contentRegistrations.push(\r\n toolsService.addSectionContent({\r\n key: \"Babylon Export\",\r\n section: \"Babylon Export\",\r\n component: ({ context }) => <ExportBabylonTools scene={context} />,\r\n })\r\n );\r\n\r\n return {\r\n dispose: () => {\r\n contentRegistrations.forEach((registration) => registration.dispose());\r\n },\r\n };\r\n },\r\n};\r\n\r\nexport default {\r\n serviceDefinitions: [ExportServiceDefinition],\r\n} as const;\r\n"],"names":["_jsxs","_Fragment","_jsx"],"mappings":"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"}
1
+ {"version":3,"file":"exportService-BnE7xiJF.js","sources":["../../../../../../../../dev/inspector-v2/src/components/tools/exportTools.tsx","../../../../../../../../dev/inspector-v2/src/services/panes/tools/exportService.tsx"],"sourcesContent":["import { NumberDropdownPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/dropdownPropertyLine\";\r\nimport { SceneSerializer } from \"core/Misc/sceneSerializer\";\r\nimport { Tools } from \"core/Misc/tools\";\r\nimport { EnvironmentTextureTools } from \"core/Misc/environmentTextureTools\";\r\nimport type { CubeTexture } from \"core/Materials/Textures/cubeTexture\";\r\nimport { Logger } from \"core/Misc/logger\";\r\nimport { useCallback, useState } from \"react\";\r\nimport type { FunctionComponent } from \"react\";\r\nimport type { Scene } from \"core/scene\";\r\nimport { ButtonLine } from \"shared-ui-components/fluent/hoc/buttonLine\";\r\nimport { SyncedSliderPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/syncedSliderPropertyLine\";\r\nimport type { Node } from \"core/node\";\r\nimport { Mesh } from \"core/Meshes/mesh\";\r\nimport type { PBRMaterial } from \"core/Materials/PBR/pbrMaterial\";\r\nimport type { StandardMaterial } from \"core/Materials/standardMaterial\";\r\nimport type { BackgroundMaterial } from \"core/Materials/Background/backgroundMaterial\";\r\nimport { Texture } from \"core/Materials/Textures/texture\";\r\nimport { Camera } from \"core/Cameras/camera\";\r\nimport { Light } from \"core/Lights/light\";\r\nimport { SwitchPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/switchPropertyLine\";\r\n\r\nimport { MakeLazyComponent } from \"shared-ui-components/fluent/primitives/lazyComponent\";\r\nimport { Collapse } from \"shared-ui-components/fluent/primitives/collapse\";\r\nimport { ArrowDownloadRegular } from \"@fluentui/react-icons\";\r\n\r\nconst EnvExportImageTypes = [\r\n { label: \"PNG\", value: 0, imageType: \"image/png\" },\r\n { label: \"WebP\", value: 1, imageType: \"image/webp\" },\r\n] as const;\r\n\r\ninterface IBabylonExportOptionsState {\r\n imageTypeIndex: number;\r\n imageQuality: number;\r\n iblDiffuse: boolean;\r\n}\r\n\r\nexport const ExportBabylonTools: FunctionComponent<{ scene: Scene }> = ({ scene }) => {\r\n const [babylonExportOptions, setBabylonExportOptions] = useState<Readonly<IBabylonExportOptionsState>>({\r\n imageTypeIndex: 0,\r\n imageQuality: 0.8,\r\n iblDiffuse: false,\r\n });\r\n\r\n const exportBabylon = useCallback(async () => {\r\n const strScene = JSON.stringify(SceneSerializer.Serialize(scene));\r\n const blob = new Blob([strScene], { type: \"octet/stream\" });\r\n Tools.Download(blob, \"scene.babylon\");\r\n }, [scene]);\r\n\r\n const createEnvTexture = useCallback(async () => {\r\n if (!scene.environmentTexture) {\r\n return;\r\n }\r\n\r\n try {\r\n const buffer = await EnvironmentTextureTools.CreateEnvTextureAsync(scene.environmentTexture as CubeTexture, {\r\n imageType: EnvExportImageTypes[babylonExportOptions.imageTypeIndex].imageType,\r\n imageQuality: babylonExportOptions.imageQuality,\r\n disableIrradianceTexture: !babylonExportOptions.iblDiffuse,\r\n });\r\n const blob = new Blob([buffer], { type: \"octet/stream\" });\r\n Tools.Download(blob, \"environment.env\");\r\n } catch (error: any) {\r\n Logger.Error(error);\r\n alert(error);\r\n }\r\n }, [scene, babylonExportOptions]);\r\n\r\n return (\r\n <>\r\n <ButtonLine label=\"Export to Babylon\" icon={ArrowDownloadRegular} onClick={exportBabylon} />\r\n {!scene.getEngine().premultipliedAlpha && scene.environmentTexture && scene.environmentTexture._prefiltered && scene.activeCamera && (\r\n <>\r\n <ButtonLine label=\"Generate .env texture\" icon={ArrowDownloadRegular} onClick={createEnvTexture} />\r\n {scene.environmentTexture.irradianceTexture && (\r\n <SwitchPropertyLine\r\n key=\"iblDiffuse\"\r\n label=\"Diffuse Texture\"\r\n description=\"Export diffuse texture for IBL\"\r\n value={babylonExportOptions.iblDiffuse}\r\n onChange={(value: boolean) => {\r\n setBabylonExportOptions((prev) => ({ ...prev, iblDiffuse: value }));\r\n }}\r\n />\r\n )}\r\n <NumberDropdownPropertyLine\r\n label=\"Image type\"\r\n options={EnvExportImageTypes}\r\n value={babylonExportOptions.imageTypeIndex}\r\n onChange={(val) => {\r\n setBabylonExportOptions((prev) => ({ ...prev, imageTypeIndex: val as number }));\r\n }}\r\n />\r\n <Collapse visible={babylonExportOptions.imageTypeIndex > 0}>\r\n <SyncedSliderPropertyLine\r\n label=\"Quality\"\r\n value={babylonExportOptions.imageQuality}\r\n onChange={(value) => setBabylonExportOptions((prev) => ({ ...prev, imageQuality: value }))}\r\n min={0}\r\n max={1}\r\n />\r\n </Collapse>\r\n </>\r\n )}\r\n </>\r\n );\r\n};\r\n\r\ninterface IGltfExportOptionsState {\r\n exportDisabledNodes: boolean;\r\n exportSkyboxes: boolean;\r\n exportCameras: boolean;\r\n exportLights: boolean;\r\n dracoCompression: boolean;\r\n}\r\n\r\nexport const ExportGltfTools = MakeLazyComponent(async () => {\r\n // Defer importing anything from the serializers package until this component is actually mounted.\r\n const { GLTF2Export } = await import(\"serializers/glTF/2.0/glTFSerializer\");\r\n\r\n return (props: { scene: Scene }) => {\r\n const [isExportingGltf, setIsExportingGltf] = useState(false);\r\n const [gltfExportOptions, setGltfExportOptions] = useState<Readonly<IGltfExportOptionsState>>({\r\n exportDisabledNodes: false,\r\n exportSkyboxes: false,\r\n exportCameras: false,\r\n exportLights: false,\r\n dracoCompression: false,\r\n });\r\n\r\n const exportGLTF = useCallback(async () => {\r\n setIsExportingGltf(true);\r\n\r\n const shouldExport = (node: Node): boolean => {\r\n if (!gltfExportOptions.exportDisabledNodes) {\r\n if (!node.isEnabled()) {\r\n return false;\r\n }\r\n }\r\n\r\n if (!gltfExportOptions.exportSkyboxes) {\r\n if (node instanceof Mesh) {\r\n if (node.material) {\r\n const material = node.material as PBRMaterial | StandardMaterial | BackgroundMaterial;\r\n const reflectionTexture = material.reflectionTexture;\r\n if (reflectionTexture && reflectionTexture.coordinatesMode === Texture.SKYBOX_MODE) {\r\n return false;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (!gltfExportOptions.exportCameras) {\r\n if (node instanceof Camera) {\r\n return false;\r\n }\r\n }\r\n\r\n if (!gltfExportOptions.exportLights) {\r\n if (node instanceof Light) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n };\r\n\r\n try {\r\n const glb = await GLTF2Export.GLBAsync(props.scene, \"scene\", {\r\n meshCompressionMethod: gltfExportOptions.dracoCompression ? \"Draco\" : undefined,\r\n shouldExportNode: (node) => shouldExport(node),\r\n });\r\n glb.downloadFiles();\r\n } catch (reason) {\r\n Logger.Error(`Failed to export GLB: ${reason}`);\r\n } finally {\r\n setIsExportingGltf(false);\r\n }\r\n }, [gltfExportOptions, props.scene]);\r\n\r\n return (\r\n <>\r\n <SwitchPropertyLine\r\n key=\"GLTFExportDisabledNodes\"\r\n label=\"Export Disabled Nodes\"\r\n description=\"Whether to export nodes that are disabled in the scene.\"\r\n value={gltfExportOptions.exportDisabledNodes}\r\n onChange={(checked: boolean) => setGltfExportOptions({ ...gltfExportOptions, exportDisabledNodes: checked })}\r\n />\r\n <SwitchPropertyLine\r\n key=\"GLTFExportSkyboxes\"\r\n label=\"Export Skyboxes\"\r\n description=\"Whether to export skybox nodes in the scene.\"\r\n value={gltfExportOptions.exportSkyboxes}\r\n onChange={(checked: boolean) => setGltfExportOptions({ ...gltfExportOptions, exportSkyboxes: checked })}\r\n />\r\n <SwitchPropertyLine\r\n key=\"GLTFExportCameras\"\r\n label=\"Export Cameras\"\r\n description=\"Whether to export cameras in the scene.\"\r\n value={gltfExportOptions.exportCameras}\r\n onChange={(checked: boolean) => setGltfExportOptions({ ...gltfExportOptions, exportCameras: checked })}\r\n />\r\n <SwitchPropertyLine\r\n key=\"GLTFExportLights\"\r\n label=\"Export Lights\"\r\n description=\"Whether to export lights in the scene.\"\r\n value={gltfExportOptions.exportLights}\r\n onChange={(checked: boolean) => setGltfExportOptions({ ...gltfExportOptions, exportLights: checked })}\r\n />\r\n <SwitchPropertyLine\r\n key=\"GLTFDracoCompression\"\r\n label=\"Draco Compression\"\r\n description=\"Whether to apply Draco compression to geometry.\"\r\n value={gltfExportOptions.dracoCompression}\r\n onChange={(checked: boolean) => setGltfExportOptions({ ...gltfExportOptions, dracoCompression: checked })}\r\n />\r\n <ButtonLine label=\"Export to GLB\" icon={ArrowDownloadRegular} onClick={exportGLTF} disabled={isExportingGltf} />\r\n </>\r\n );\r\n };\r\n});\r\n","import type { ServiceDefinition } from \"../../../modularity/serviceDefinition\";\r\nimport { ToolsServiceIdentity } from \"../toolsService\";\r\nimport type { IToolsService } from \"../toolsService\";\r\nimport type { IDisposable } from \"core/scene\";\r\nimport { ExportBabylonTools, ExportGltfTools } from \"../../../components/tools/exportTools\";\r\n\r\nexport const ExportServiceDefinition: ServiceDefinition<[], [IToolsService]> = {\r\n friendlyName: \"Export Tools\",\r\n consumes: [ToolsServiceIdentity],\r\n factory: (toolsService) => {\r\n const contentRegistrations: IDisposable[] = [];\r\n\r\n // glTF export content\r\n contentRegistrations.push(\r\n toolsService.addSectionContent({\r\n key: \"glTF Export\",\r\n section: \"glTF Export\",\r\n component: ({ context }) => <ExportGltfTools scene={context} />,\r\n })\r\n );\r\n\r\n // Babylon export content\r\n contentRegistrations.push(\r\n toolsService.addSectionContent({\r\n key: \"Babylon Export\",\r\n section: \"Babylon Export\",\r\n component: ({ context }) => <ExportBabylonTools scene={context} />,\r\n })\r\n );\r\n\r\n return {\r\n dispose: () => {\r\n contentRegistrations.forEach((registration) => registration.dispose());\r\n },\r\n };\r\n },\r\n};\r\n\r\nexport default {\r\n serviceDefinitions: [ExportServiceDefinition],\r\n} as const;\r\n"],"names":["_jsxs","_Fragment","_jsx"],"mappings":"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"}
@@ -4,7 +4,7 @@ import { AppsAddInRegular, DismissRegular, LinkRegular, BranchForkRegular, BugRe
4
4
  import { Fade } from '@fluentui/react-motion-components-preview';
5
5
  import { useState, useEffect, memo, useMemo, useCallback } from 'react';
6
6
  import { Logger } from '@babylonjs/core/Misc/logger.js';
7
- import { b as ShellServiceIdentity, u as useExtensionManager, c as MakePopoverTeachingMoment, d as TeachingMoment, L as Link } from './index-Cxm78n40.js';
7
+ import { f as ShellServiceIdentity, i as useExtensionManager, j as MakePopoverTeachingMoment, k as TeachingMoment, L as Link } from './index-BUtV9Nch.js';
8
8
  import '@babylonjs/core/Maths/math.color.js';
9
9
  import '@babylonjs/core/Maths/math.vector.js';
10
10
  import '@babylonjs/core/Misc/observable.js';
@@ -327,4 +327,4 @@ const ExtensionListServiceDefinition = {
327
327
  };
328
328
 
329
329
  export { ExtensionListServiceDefinition };
330
- //# sourceMappingURL=extensionsListService-CwKHXUHO.js.map
330
+ //# sourceMappingURL=extensionsListService-s7SPclHA.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"extensionsListService-CwKHXUHO.js","sources":["../../../../../../../../dev/inspector-v2/src/services/extensionsListService.tsx"],"sourcesContent":["import type { SelectTabData, SelectTabEvent } from \"@fluentui/react-components\";\r\nimport type { TriggerProps } from \"@fluentui/react-utilities\";\r\nimport type { FunctionComponent } from \"react\";\r\nimport type { PersonMetadata } from \"../extensibility/extensionFeed\";\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 AvatarGroup,\r\n AvatarGroupItem,\r\n Body1,\r\n Body1Strong,\r\n Button,\r\n Caption1,\r\n Card,\r\n CardFooter,\r\n CardHeader,\r\n CardPreview,\r\n Dialog,\r\n DialogBody,\r\n DialogContent,\r\n DialogSurface,\r\n DialogTitle,\r\n DialogTrigger,\r\n makeStyles,\r\n Persona,\r\n Popover,\r\n PopoverSurface,\r\n PopoverTrigger,\r\n PresenceBadge,\r\n Spinner,\r\n Tab,\r\n TabList,\r\n tokens,\r\n Tooltip,\r\n} from \"@fluentui/react-components\";\r\nimport {\r\n AppsAddInRegular,\r\n ArrowDownloadRegular,\r\n BranchForkRegular,\r\n BugRegular,\r\n DeleteRegular,\r\n DismissRegular,\r\n LinkRegular,\r\n MailRegular,\r\n PeopleCommunityRegular,\r\n} from \"@fluentui/react-icons\";\r\nimport { Fade } from \"@fluentui/react-motion-components-preview\";\r\nimport { memo, useCallback, useEffect, useMemo, useState } from \"react\";\r\n\r\nimport { Logger } from \"core/Misc/logger\";\r\n\r\nimport { Link } from \"shared-ui-components/fluent/primitives/link\";\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 backgroundColor: tokens.colorNeutralBackground2,\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 extensionCardPreview: {\r\n padding: `${tokens.spacingVerticalM} ${tokens.spacingHorizontalM}`,\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n rowGap: tokens.spacingVerticalL,\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 display: \"flex\",\r\n flexDirection: \"row\",\r\n columnGap: tokens.spacingHorizontalS,\r\n },\r\n extensionButtonContainer: {\r\n marginLeft: \"auto\",\r\n alignSelf: \"flex-start\",\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 webResourceDiv: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n },\r\n webResourceLink: {\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n columnGap: tokens.spacingHorizontalS,\r\n alignItems: \"center\",\r\n },\r\n personPopoverSurfaceDiv: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n rowGap: tokens.spacingVerticalS,\r\n },\r\n accordionHeaderDiv: {\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n columnGap: tokens.spacingHorizontalS,\r\n alignItems: \"center\",\r\n },\r\n resourceDetailsDiv: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n rowGap: tokens.spacingVerticalS,\r\n },\r\n peopleDetailsDiv: {\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n columnGap: tokens.spacingHorizontalXL,\r\n },\r\n avatarGroupItem: {\r\n cursor: \"pointer\",\r\n },\r\n});\r\n\r\nfunction AsPersonMetadata(person: string | PersonMetadata): PersonMetadata {\r\n if (typeof person === \"string\") {\r\n return { name: person } satisfies PersonMetadata;\r\n }\r\n return person;\r\n}\r\n\r\nfunction usePeopleMetadata(people?: readonly (string | PersonMetadata | undefined)[]) {\r\n const definedPeople = useMemo(() => (people ? people.filter((person): person is string | PersonMetadata => !!person) : []), [people]);\r\n\r\n //const [peopleMetadataEx, setPeopleMetadataEx] = useState<(PersonMetadata & { avatarUrl?: string })[]>(definedPeople.map(AsPersonMetadata));\r\n const [peopleMetadataEx] = useState(definedPeople.map(AsPersonMetadata));\r\n\r\n // TODO: Would be nice if we could pull author/contributor profile pictures from the forum, but need to see if this is ok and whether we want to adjust CORS to allow it.\r\n // useEffect(() => {\r\n // definedPeople.forEach(async (person, index) => {\r\n // const personMetadata = AsPersonMetadata(person);\r\n // if (personMetadata.forumUserName) {\r\n // try {\r\n // const json = await (await fetch(`https://forum.babylonjs.com/u/${personMetadata.forumUserName}.json`)).json();\r\n // const avatarRelativeUrl = json.user?.avatar_template?.replace(\"{size}\", \"96\");\r\n // if (avatarRelativeUrl) {\r\n // const avatarUrl = `https://forum.babylonjs.com${avatarRelativeUrl}`;\r\n // setPeopleMetadataEx((prev) => {\r\n // const newMetadata = [...prev];\r\n // newMetadata[index] = { ...personMetadata, avatarUrl };\r\n // return newMetadata;\r\n // });\r\n // }\r\n // } catch {\r\n // // Ignore, non-fatal\r\n // }\r\n // }\r\n // });\r\n // }, [definedPeople]);\r\n\r\n return peopleMetadataEx.filter(Boolean);\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nconst useTeachingMoment = MakePopoverTeachingMoment(\"Extensions\");\r\n\r\nconst WebResource: FunctionComponent<{ url: string; urlDisplay?: string; icon: JSX.Element; label: string }> = (props) => {\r\n const { url, urlDisplay, icon, label } = props;\r\n const classes = useStyles();\r\n\r\n return (\r\n <div className={classes.webResourceDiv}>\r\n <Tooltip content={label} relationship=\"label\" positioning=\"before\" withArrow>\r\n <div className={classes.webResourceLink}>\r\n {icon}\r\n <Link url={url} value={urlDisplay || url} />\r\n </div>\r\n </Tooltip>\r\n </div>\r\n );\r\n};\r\n\r\nconst PersonDetailsPopover: FunctionComponent<TriggerProps & { person: PersonMetadata; title: string; disabled?: boolean }> = (props) => {\r\n const { person, title, disabled, children } = props;\r\n const classes = useStyles();\r\n\r\n if (disabled) {\r\n return <>{children}</>;\r\n }\r\n\r\n return (\r\n <Popover withArrow>\r\n <PopoverTrigger disableButtonEnhancement>{children}</PopoverTrigger>\r\n <PopoverSurface>\r\n <div className={classes.personPopoverSurfaceDiv}>\r\n <Persona name={person.name} secondaryText={title} />\r\n {person.email && <WebResource url={`mailto:${person.email}`} urlDisplay={person.email} icon={<MailRegular />} label=\"Email\" />}\r\n {person.url && <WebResource url={person.url} urlDisplay={person.url} icon={<LinkRegular />} label=\"Website\" />}\r\n {person.forumUserName && (\r\n <WebResource\r\n url={`https://forum.babylonjs.com/u/${person.forumUserName}`}\r\n urlDisplay={person.forumUserName}\r\n icon={<PeopleCommunityRegular />}\r\n label=\"Forum\"\r\n />\r\n )}\r\n </div>\r\n </PopoverSurface>\r\n </Popover>\r\n );\r\n};\r\n\r\nconst ExtensionDetails: FunctionComponent<{ extension: IExtension }> = memo((props) => {\r\n const { extension } = props;\r\n const { metadata } = extension;\r\n\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 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 }, [extension]);\r\n\r\n const [author] = usePeopleMetadata(useMemo(() => [metadata.author], [metadata.author]));\r\n const contributors = usePeopleMetadata(metadata.contributors);\r\n\r\n const hasResourceDetails = metadata.homepage || metadata.repository || metadata.bugs;\r\n const hasPeopleDetails = author || contributors.length > 0;\r\n const hasPreviewDetails = hasResourceDetails || hasPeopleDetails;\r\n const hasAuthorDetails = author?.email || author?.url || author?.forumUserName;\r\n const subHeader = [metadata.version ? `${metadata.version}` : null, metadata.license ? `${metadata.license}` : null].filter(Boolean).join(\" | \");\r\n\r\n const install = useCallback(async () => {\r\n try {\r\n await 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 }, [extension]);\r\n\r\n const uninstall = useCallback(async () => {\r\n try {\r\n await 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 }, [extension]);\r\n\r\n return (\r\n <AccordionItem className={classes.extensionItem} value={extension.metadata.name}>\r\n <AccordionHeader className={classes.extensionHeader} expandIconPosition=\"end\">\r\n <div className={classes.accordionHeaderDiv}>\r\n <Body1Strong>{extension.metadata.name}</Body1Strong>\r\n <Fade visible={extension.isInstalled}>\r\n <PresenceBadge size=\"small\" />\r\n </Fade>\r\n </div>\r\n </AccordionHeader>\r\n <AccordionPanel>\r\n <Card>\r\n <CardHeader header={<Body1>{metadata.description}</Body1>} description={<Caption1 italic>{subHeader}</Caption1>} />\r\n {hasPreviewDetails && (\r\n <CardPreview className={classes.extensionCardPreview}>\r\n {hasResourceDetails && (\r\n <div className={classes.resourceDetailsDiv} style={{ display: \"flex\" }}>\r\n {metadata.homepage && <WebResource url={metadata.homepage} icon={<LinkRegular />} label=\"Website\" />}\r\n {metadata.repository && <WebResource url={metadata.repository} icon={<BranchForkRegular />} label=\"Repository\" />}\r\n {metadata.bugs && <WebResource url={metadata.bugs} icon={<BugRegular />} label=\"Report Issues\" />}\r\n </div>\r\n )}\r\n {hasPeopleDetails && (\r\n <div className={classes.peopleDetailsDiv} style={{ display: \"flex\" }}>\r\n {author && (\r\n <PersonDetailsPopover person={author} title=\"Author\" disabled={!hasAuthorDetails}>\r\n <Persona name={author.name} secondaryText=\"Author\" style={{ cursor: hasAuthorDetails ? \"pointer\" : \"default\" }} />\r\n </PersonDetailsPopover>\r\n )}\r\n {contributors.length > 0 && (\r\n <AvatarGroup layout=\"stack\">\r\n {contributors.map((contributor) => {\r\n return (\r\n <PersonDetailsPopover key={contributor.name} person={contributor} title=\"Contributor\">\r\n <AvatarGroupItem name={contributor.name} className={classes.avatarGroupItem} />\r\n </PersonDetailsPopover>\r\n );\r\n })}\r\n </AvatarGroup>\r\n )}\r\n </div>\r\n )}\r\n </CardPreview>\r\n )}\r\n <CardFooter>\r\n {canInstall && (\r\n <Button appearance=\"primary\" size=\"small\" icon={<ArrowDownloadRegular />} onClick={install}>\r\n Get\r\n </Button>\r\n )}\r\n {canUninstall && (\r\n <Button appearance=\"secondary\" size=\"small\" icon={<DeleteRegular />} onClick={uninstall}>\r\n Remove\r\n </Button>\r\n )}\r\n {isStateChanging && <Spinner className={classes.spinner} size=\"extra-small\" />}\r\n </CardFooter>\r\n </Card>\r\n </AccordionPanel>\r\n </AccordionItem>\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 <Accordion collapsible>\r\n {extensions.map((extension) => (\r\n <ExtensionDetails key={extension.metadata.name} extension={extension} />\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"],"names":["_jsx","_jsxs","_Fragment"],"mappings":"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"}
1
+ {"version":3,"file":"extensionsListService-s7SPclHA.js","sources":["../../../../../../../../dev/inspector-v2/src/services/extensionsListService.tsx"],"sourcesContent":["import type { SelectTabData, SelectTabEvent } from \"@fluentui/react-components\";\r\nimport type { TriggerProps } from \"@fluentui/react-utilities\";\r\nimport type { FunctionComponent } from \"react\";\r\nimport type { PersonMetadata } from \"../extensibility/extensionFeed\";\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 AvatarGroup,\r\n AvatarGroupItem,\r\n Body1,\r\n Body1Strong,\r\n Button,\r\n Caption1,\r\n Card,\r\n CardFooter,\r\n CardHeader,\r\n CardPreview,\r\n Dialog,\r\n DialogBody,\r\n DialogContent,\r\n DialogSurface,\r\n DialogTitle,\r\n DialogTrigger,\r\n makeStyles,\r\n Persona,\r\n Popover,\r\n PopoverSurface,\r\n PopoverTrigger,\r\n PresenceBadge,\r\n Spinner,\r\n Tab,\r\n TabList,\r\n tokens,\r\n Tooltip,\r\n} from \"@fluentui/react-components\";\r\nimport {\r\n AppsAddInRegular,\r\n ArrowDownloadRegular,\r\n BranchForkRegular,\r\n BugRegular,\r\n DeleteRegular,\r\n DismissRegular,\r\n LinkRegular,\r\n MailRegular,\r\n PeopleCommunityRegular,\r\n} from \"@fluentui/react-icons\";\r\nimport { Fade } from \"@fluentui/react-motion-components-preview\";\r\nimport { memo, useCallback, useEffect, useMemo, useState } from \"react\";\r\n\r\nimport { Logger } from \"core/Misc/logger\";\r\n\r\nimport { Link } from \"shared-ui-components/fluent/primitives/link\";\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 backgroundColor: tokens.colorNeutralBackground2,\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 extensionCardPreview: {\r\n padding: `${tokens.spacingVerticalM} ${tokens.spacingHorizontalM}`,\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n rowGap: tokens.spacingVerticalL,\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 display: \"flex\",\r\n flexDirection: \"row\",\r\n columnGap: tokens.spacingHorizontalS,\r\n },\r\n extensionButtonContainer: {\r\n marginLeft: \"auto\",\r\n alignSelf: \"flex-start\",\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 webResourceDiv: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n },\r\n webResourceLink: {\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n columnGap: tokens.spacingHorizontalS,\r\n alignItems: \"center\",\r\n },\r\n personPopoverSurfaceDiv: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n rowGap: tokens.spacingVerticalS,\r\n },\r\n accordionHeaderDiv: {\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n columnGap: tokens.spacingHorizontalS,\r\n alignItems: \"center\",\r\n },\r\n resourceDetailsDiv: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n rowGap: tokens.spacingVerticalS,\r\n },\r\n peopleDetailsDiv: {\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n columnGap: tokens.spacingHorizontalXL,\r\n },\r\n avatarGroupItem: {\r\n cursor: \"pointer\",\r\n },\r\n});\r\n\r\nfunction AsPersonMetadata(person: string | PersonMetadata): PersonMetadata {\r\n if (typeof person === \"string\") {\r\n return { name: person } satisfies PersonMetadata;\r\n }\r\n return person;\r\n}\r\n\r\nfunction usePeopleMetadata(people?: readonly (string | PersonMetadata | undefined)[]) {\r\n const definedPeople = useMemo(() => (people ? people.filter((person): person is string | PersonMetadata => !!person) : []), [people]);\r\n\r\n //const [peopleMetadataEx, setPeopleMetadataEx] = useState<(PersonMetadata & { avatarUrl?: string })[]>(definedPeople.map(AsPersonMetadata));\r\n const [peopleMetadataEx] = useState(definedPeople.map(AsPersonMetadata));\r\n\r\n // TODO: Would be nice if we could pull author/contributor profile pictures from the forum, but need to see if this is ok and whether we want to adjust CORS to allow it.\r\n // useEffect(() => {\r\n // definedPeople.forEach(async (person, index) => {\r\n // const personMetadata = AsPersonMetadata(person);\r\n // if (personMetadata.forumUserName) {\r\n // try {\r\n // const json = await (await fetch(`https://forum.babylonjs.com/u/${personMetadata.forumUserName}.json`)).json();\r\n // const avatarRelativeUrl = json.user?.avatar_template?.replace(\"{size}\", \"96\");\r\n // if (avatarRelativeUrl) {\r\n // const avatarUrl = `https://forum.babylonjs.com${avatarRelativeUrl}`;\r\n // setPeopleMetadataEx((prev) => {\r\n // const newMetadata = [...prev];\r\n // newMetadata[index] = { ...personMetadata, avatarUrl };\r\n // return newMetadata;\r\n // });\r\n // }\r\n // } catch {\r\n // // Ignore, non-fatal\r\n // }\r\n // }\r\n // });\r\n // }, [definedPeople]);\r\n\r\n return peopleMetadataEx.filter(Boolean);\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nconst useTeachingMoment = MakePopoverTeachingMoment(\"Extensions\");\r\n\r\nconst WebResource: FunctionComponent<{ url: string; urlDisplay?: string; icon: JSX.Element; label: string }> = (props) => {\r\n const { url, urlDisplay, icon, label } = props;\r\n const classes = useStyles();\r\n\r\n return (\r\n <div className={classes.webResourceDiv}>\r\n <Tooltip content={label} relationship=\"label\" positioning=\"before\" withArrow>\r\n <div className={classes.webResourceLink}>\r\n {icon}\r\n <Link url={url} value={urlDisplay || url} />\r\n </div>\r\n </Tooltip>\r\n </div>\r\n );\r\n};\r\n\r\nconst PersonDetailsPopover: FunctionComponent<TriggerProps & { person: PersonMetadata; title: string; disabled?: boolean }> = (props) => {\r\n const { person, title, disabled, children } = props;\r\n const classes = useStyles();\r\n\r\n if (disabled) {\r\n return <>{children}</>;\r\n }\r\n\r\n return (\r\n <Popover withArrow>\r\n <PopoverTrigger disableButtonEnhancement>{children}</PopoverTrigger>\r\n <PopoverSurface>\r\n <div className={classes.personPopoverSurfaceDiv}>\r\n <Persona name={person.name} secondaryText={title} />\r\n {person.email && <WebResource url={`mailto:${person.email}`} urlDisplay={person.email} icon={<MailRegular />} label=\"Email\" />}\r\n {person.url && <WebResource url={person.url} urlDisplay={person.url} icon={<LinkRegular />} label=\"Website\" />}\r\n {person.forumUserName && (\r\n <WebResource\r\n url={`https://forum.babylonjs.com/u/${person.forumUserName}`}\r\n urlDisplay={person.forumUserName}\r\n icon={<PeopleCommunityRegular />}\r\n label=\"Forum\"\r\n />\r\n )}\r\n </div>\r\n </PopoverSurface>\r\n </Popover>\r\n );\r\n};\r\n\r\nconst ExtensionDetails: FunctionComponent<{ extension: IExtension }> = memo((props) => {\r\n const { extension } = props;\r\n const { metadata } = extension;\r\n\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 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 }, [extension]);\r\n\r\n const [author] = usePeopleMetadata(useMemo(() => [metadata.author], [metadata.author]));\r\n const contributors = usePeopleMetadata(metadata.contributors);\r\n\r\n const hasResourceDetails = metadata.homepage || metadata.repository || metadata.bugs;\r\n const hasPeopleDetails = author || contributors.length > 0;\r\n const hasPreviewDetails = hasResourceDetails || hasPeopleDetails;\r\n const hasAuthorDetails = author?.email || author?.url || author?.forumUserName;\r\n const subHeader = [metadata.version ? `${metadata.version}` : null, metadata.license ? `${metadata.license}` : null].filter(Boolean).join(\" | \");\r\n\r\n const install = useCallback(async () => {\r\n try {\r\n await 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 }, [extension]);\r\n\r\n const uninstall = useCallback(async () => {\r\n try {\r\n await 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 }, [extension]);\r\n\r\n return (\r\n <AccordionItem className={classes.extensionItem} value={extension.metadata.name}>\r\n <AccordionHeader className={classes.extensionHeader} expandIconPosition=\"end\">\r\n <div className={classes.accordionHeaderDiv}>\r\n <Body1Strong>{extension.metadata.name}</Body1Strong>\r\n <Fade visible={extension.isInstalled}>\r\n <PresenceBadge size=\"small\" />\r\n </Fade>\r\n </div>\r\n </AccordionHeader>\r\n <AccordionPanel>\r\n <Card>\r\n <CardHeader header={<Body1>{metadata.description}</Body1>} description={<Caption1 italic>{subHeader}</Caption1>} />\r\n {hasPreviewDetails && (\r\n <CardPreview className={classes.extensionCardPreview}>\r\n {hasResourceDetails && (\r\n <div className={classes.resourceDetailsDiv} style={{ display: \"flex\" }}>\r\n {metadata.homepage && <WebResource url={metadata.homepage} icon={<LinkRegular />} label=\"Website\" />}\r\n {metadata.repository && <WebResource url={metadata.repository} icon={<BranchForkRegular />} label=\"Repository\" />}\r\n {metadata.bugs && <WebResource url={metadata.bugs} icon={<BugRegular />} label=\"Report Issues\" />}\r\n </div>\r\n )}\r\n {hasPeopleDetails && (\r\n <div className={classes.peopleDetailsDiv} style={{ display: \"flex\" }}>\r\n {author && (\r\n <PersonDetailsPopover person={author} title=\"Author\" disabled={!hasAuthorDetails}>\r\n <Persona name={author.name} secondaryText=\"Author\" style={{ cursor: hasAuthorDetails ? \"pointer\" : \"default\" }} />\r\n </PersonDetailsPopover>\r\n )}\r\n {contributors.length > 0 && (\r\n <AvatarGroup layout=\"stack\">\r\n {contributors.map((contributor) => {\r\n return (\r\n <PersonDetailsPopover key={contributor.name} person={contributor} title=\"Contributor\">\r\n <AvatarGroupItem name={contributor.name} className={classes.avatarGroupItem} />\r\n </PersonDetailsPopover>\r\n );\r\n })}\r\n </AvatarGroup>\r\n )}\r\n </div>\r\n )}\r\n </CardPreview>\r\n )}\r\n <CardFooter>\r\n {canInstall && (\r\n <Button appearance=\"primary\" size=\"small\" icon={<ArrowDownloadRegular />} onClick={install}>\r\n Get\r\n </Button>\r\n )}\r\n {canUninstall && (\r\n <Button appearance=\"secondary\" size=\"small\" icon={<DeleteRegular />} onClick={uninstall}>\r\n Remove\r\n </Button>\r\n )}\r\n {isStateChanging && <Spinner className={classes.spinner} size=\"extra-small\" />}\r\n </CardFooter>\r\n </Card>\r\n </AccordionPanel>\r\n </AccordionItem>\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 <Accordion collapsible>\r\n {extensions.map((extension) => (\r\n <ExtensionDetails key={extension.metadata.name} extension={extension} />\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"],"names":["_jsx","_jsxs","_Fragment"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
2
- import { F as FileUploadLine, S as SwitchPropertyLine, C as Collapse, N as NumberDropdownPropertyLine, T as ToolsServiceIdentity } from './index-Cxm78n40.js';
2
+ import { F as FileUploadLine, S as SwitchPropertyLine, C as Collapse, N as NumberDropdownPropertyLine, T as ToolsServiceIdentity } from './index-BUtV9Nch.js';
3
3
  import { useState } from 'react';
4
4
  import { ImportAnimationsAsync } from '@babylonjs/core/Loading/sceneLoader.js';
5
5
  import { FilesInput } from '@babylonjs/core/Misc/filesInput.js';
@@ -174,4 +174,4 @@ var importService = {
174
174
  };
175
175
 
176
176
  export { SceneImportServiceDefinition, importService as default };
177
- //# sourceMappingURL=importService-CJtBZSUv.js.map
177
+ //# sourceMappingURL=importService-CF3uudG4.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"importService-CJtBZSUv.js","sources":["../../../../../../../../dev/inspector-v2/src/components/tools/importTools.tsx","../../../../../../../../dev/inspector-v2/src/services/panes/tools/importService.tsx"],"sourcesContent":["import { useState } from \"react\";\r\nimport type { FunctionComponent } from \"react\";\r\nimport type { Scene } from \"core/scene\";\r\nimport type { DropdownOption } from \"shared-ui-components/fluent/primitives/dropdown\";\r\nimport { ImportAnimationsAsync, SceneLoaderAnimationGroupLoadingMode } from \"core/Loading/sceneLoader\";\r\nimport { FilesInput } from \"core/Misc/filesInput\";\r\nimport { Logger } from \"core/Misc/logger\";\r\nimport { SwitchPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/switchPropertyLine\";\r\nimport { NumberDropdownPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/dropdownPropertyLine\";\r\nimport { FileUploadLine } from \"shared-ui-components/fluent/hoc/fileUploadLine\";\r\nimport { Collapse } from \"shared-ui-components/fluent/primitives/collapse\";\r\n\r\nconst AnimationGroupLoadingModes = [\r\n { label: \"Clean\", value: SceneLoaderAnimationGroupLoadingMode.Clean },\r\n { label: \"Stop\", value: SceneLoaderAnimationGroupLoadingMode.Stop },\r\n { label: \"Sync\", value: SceneLoaderAnimationGroupLoadingMode.Sync },\r\n { label: \"NoSync\", value: SceneLoaderAnimationGroupLoadingMode.NoSync },\r\n] as const satisfies DropdownOption<number>[];\r\n\r\nexport const ImportAnimationsTools: FunctionComponent<{ scene: Scene }> = ({ scene }) => {\r\n const [importDefaults, setImportDefaults] = useState({\r\n overwriteAnimations: true,\r\n animationGroupLoadingMode: SceneLoaderAnimationGroupLoadingMode.Clean,\r\n });\r\n\r\n const importAnimations = (event: FileList) => {\r\n const reloadAsync = async function (sceneFile: File) {\r\n if (sceneFile) {\r\n try {\r\n await ImportAnimationsAsync(sceneFile, scene, {\r\n overwriteAnimations: importDefaults.overwriteAnimations,\r\n animationGroupLoadingMode: importDefaults.animationGroupLoadingMode,\r\n });\r\n\r\n if (scene.animationGroups.length > 0) {\r\n const currentGroup = scene.animationGroups[0];\r\n currentGroup.play(true);\r\n }\r\n } catch (error) {\r\n Logger.Error(`Error importing animations: ${error}`);\r\n }\r\n }\r\n };\r\n\r\n const filesInputAnimation = new FilesInput(scene.getEngine(), scene, null, null, null, null, null, reloadAsync, null);\r\n filesInputAnimation.loadFiles(event);\r\n filesInputAnimation.dispose();\r\n };\r\n\r\n return (\r\n <>\r\n <FileUploadLine label=\"Import Animations\" accept=\"gltf\" onClick={(evt: FileList) => importAnimations(evt)} />\r\n <SwitchPropertyLine\r\n label=\"Overwrite Animations\"\r\n value={importDefaults.overwriteAnimations}\r\n onChange={(value) => {\r\n setImportDefaults({ ...importDefaults, overwriteAnimations: value });\r\n }}\r\n />\r\n <Collapse visible={!importDefaults.overwriteAnimations}>\r\n <NumberDropdownPropertyLine\r\n label=\"Animation Merge Mode\"\r\n options={AnimationGroupLoadingModes}\r\n value={importDefaults.animationGroupLoadingMode}\r\n onChange={(value) => {\r\n setImportDefaults({ ...importDefaults, animationGroupLoadingMode: value });\r\n }}\r\n />\r\n </Collapse>\r\n </>\r\n );\r\n};\r\n","import type { ServiceDefinition } from \"../../../modularity/serviceDefinition\";\r\nimport { ToolsServiceIdentity } from \"../toolsService\";\r\nimport type { IToolsService } from \"../toolsService\";\r\nimport { ImportAnimationsTools } from \"../../../components/tools/importTools\";\r\n\r\nexport const SceneImportServiceDefinition: ServiceDefinition<[], [IToolsService]> = {\r\n friendlyName: \"Import Tool\",\r\n consumes: [ToolsServiceIdentity],\r\n factory: (toolsService) => {\r\n const contentRegistration = toolsService.addSectionContent({\r\n key: \"AnimationImport\",\r\n section: \"Animation Import\",\r\n component: ({ context }) => <ImportAnimationsTools scene={context} />,\r\n });\r\n\r\n return {\r\n dispose: () => {\r\n contentRegistration.dispose();\r\n },\r\n };\r\n },\r\n};\r\n\r\nexport default {\r\n serviceDefinitions: [SceneImportServiceDefinition],\r\n} as const;\r\n"],"names":["_jsxs","_jsx"],"mappings":"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"}
1
+ {"version":3,"file":"importService-CF3uudG4.js","sources":["../../../../../../../../dev/inspector-v2/src/components/tools/importTools.tsx","../../../../../../../../dev/inspector-v2/src/services/panes/tools/importService.tsx"],"sourcesContent":["import { useState } from \"react\";\r\nimport type { FunctionComponent } from \"react\";\r\nimport type { Scene } from \"core/scene\";\r\nimport type { DropdownOption } from \"shared-ui-components/fluent/primitives/dropdown\";\r\nimport { ImportAnimationsAsync, SceneLoaderAnimationGroupLoadingMode } from \"core/Loading/sceneLoader\";\r\nimport { FilesInput } from \"core/Misc/filesInput\";\r\nimport { Logger } from \"core/Misc/logger\";\r\nimport { SwitchPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/switchPropertyLine\";\r\nimport { NumberDropdownPropertyLine } from \"shared-ui-components/fluent/hoc/propertyLines/dropdownPropertyLine\";\r\nimport { FileUploadLine } from \"shared-ui-components/fluent/hoc/fileUploadLine\";\r\nimport { Collapse } from \"shared-ui-components/fluent/primitives/collapse\";\r\n\r\nconst AnimationGroupLoadingModes = [\r\n { label: \"Clean\", value: SceneLoaderAnimationGroupLoadingMode.Clean },\r\n { label: \"Stop\", value: SceneLoaderAnimationGroupLoadingMode.Stop },\r\n { label: \"Sync\", value: SceneLoaderAnimationGroupLoadingMode.Sync },\r\n { label: \"NoSync\", value: SceneLoaderAnimationGroupLoadingMode.NoSync },\r\n] as const satisfies DropdownOption<number>[];\r\n\r\nexport const ImportAnimationsTools: FunctionComponent<{ scene: Scene }> = ({ scene }) => {\r\n const [importDefaults, setImportDefaults] = useState({\r\n overwriteAnimations: true,\r\n animationGroupLoadingMode: SceneLoaderAnimationGroupLoadingMode.Clean,\r\n });\r\n\r\n const importAnimations = (event: FileList) => {\r\n const reloadAsync = async function (sceneFile: File) {\r\n if (sceneFile) {\r\n try {\r\n await ImportAnimationsAsync(sceneFile, scene, {\r\n overwriteAnimations: importDefaults.overwriteAnimations,\r\n animationGroupLoadingMode: importDefaults.animationGroupLoadingMode,\r\n });\r\n\r\n if (scene.animationGroups.length > 0) {\r\n const currentGroup = scene.animationGroups[0];\r\n currentGroup.play(true);\r\n }\r\n } catch (error) {\r\n Logger.Error(`Error importing animations: ${error}`);\r\n }\r\n }\r\n };\r\n\r\n const filesInputAnimation = new FilesInput(scene.getEngine(), scene, null, null, null, null, null, reloadAsync, null);\r\n filesInputAnimation.loadFiles(event);\r\n filesInputAnimation.dispose();\r\n };\r\n\r\n return (\r\n <>\r\n <FileUploadLine label=\"Import Animations\" accept=\"gltf\" onClick={(evt: FileList) => importAnimations(evt)} />\r\n <SwitchPropertyLine\r\n label=\"Overwrite Animations\"\r\n value={importDefaults.overwriteAnimations}\r\n onChange={(value) => {\r\n setImportDefaults({ ...importDefaults, overwriteAnimations: value });\r\n }}\r\n />\r\n <Collapse visible={!importDefaults.overwriteAnimations}>\r\n <NumberDropdownPropertyLine\r\n label=\"Animation Merge Mode\"\r\n options={AnimationGroupLoadingModes}\r\n value={importDefaults.animationGroupLoadingMode}\r\n onChange={(value) => {\r\n setImportDefaults({ ...importDefaults, animationGroupLoadingMode: value });\r\n }}\r\n />\r\n </Collapse>\r\n </>\r\n );\r\n};\r\n","import type { ServiceDefinition } from \"../../../modularity/serviceDefinition\";\r\nimport { ToolsServiceIdentity } from \"../toolsService\";\r\nimport type { IToolsService } from \"../toolsService\";\r\nimport { ImportAnimationsTools } from \"../../../components/tools/importTools\";\r\n\r\nexport const SceneImportServiceDefinition: ServiceDefinition<[], [IToolsService]> = {\r\n friendlyName: \"Import Tool\",\r\n consumes: [ToolsServiceIdentity],\r\n factory: (toolsService) => {\r\n const contentRegistration = toolsService.addSectionContent({\r\n key: \"AnimationImport\",\r\n section: \"Animation Import\",\r\n component: ({ context }) => <ImportAnimationsTools scene={context} />,\r\n });\r\n\r\n return {\r\n dispose: () => {\r\n contentRegistration.dispose();\r\n },\r\n };\r\n },\r\n};\r\n\r\nexport default {\r\n serviceDefinitions: [SceneImportServiceDefinition],\r\n} as const;\r\n"],"names":["_jsxs","_jsx"],"mappings":"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"}
@@ -992,7 +992,7 @@ const Accordion = forwardRef((props, ref) => {
992
992
  }, []);
993
993
  return (jsx(StringAccordion, { ref: ref, className: classes.accordion, collapsible: true, multiple: true, onToggle: onToggle, openItems: openItems, ...rest, children: validChildren.map((child, index) => {
994
994
  const isHighlighted = highlightSections?.includes(child.title);
995
- return (jsxs(AccordionItem, { value: child.title, children: [jsxs("div", { className: isHighlighted ? classes.highlightDiv : undefined, children: [jsx(AccordionHeader, { size: size, children: jsx(Subtitle2Stronger, { children: child.title }) }), jsx(AccordionPanel, { children: jsx("div", { className: classes.panelDiv, children: child.content }) })] }), index < validChildren.length - 1 && jsx(Divider, { inset: true, className: size === "small" ? classes.dividerSmall : classes.divider })] }, child.content.key));
995
+ return (jsxs(AccordionItem, { value: child.title, children: [jsxs("div", { className: isHighlighted ? classes.highlightDiv : undefined, children: [jsx(AccordionHeader, { size: size, children: jsx(Subtitle2Stronger, { children: child.title }) }), jsx(AccordionPanel, { children: jsx("div", { className: classes.panelDiv, children: child.content }) })] }), index < validChildren.length - 1 && jsx(Divider, { inset: true, className: size === "small" ? classes.dividerSmall : classes.divider })] }, child.content.key ?? child.title));
996
996
  }) }));
997
997
  });
998
998
 
@@ -3661,7 +3661,7 @@ const DefaultInspectorExtensionFeed = new BuiltInsExtensionFeed("Inspector", [
3661
3661
  keywords: ["export", "gltf", "glb", "babylon", "exporter", "tools"],
3662
3662
  ...BabylonWebResources,
3663
3663
  author: { name: "Alex Chuber", forumUserName: "alexchuber" },
3664
- getExtensionModuleAsync: async () => await import('./exportService-C670vSgg.js'),
3664
+ getExtensionModuleAsync: async () => await import('./exportService-BnE7xiJF.js'),
3665
3665
  },
3666
3666
  {
3667
3667
  name: "Capture Tools",
@@ -3669,7 +3669,7 @@ const DefaultInspectorExtensionFeed = new BuiltInsExtensionFeed("Inspector", [
3669
3669
  keywords: ["capture", "screenshot", "gif", "video", "tools"],
3670
3670
  ...BabylonWebResources,
3671
3671
  author: { name: "Alex Chuber", forumUserName: "alexchuber" },
3672
- getExtensionModuleAsync: async () => await import('./captureService-CAxDQamt.js'),
3672
+ getExtensionModuleAsync: async () => await import('./captureService-Bu7areEZ.js'),
3673
3673
  },
3674
3674
  {
3675
3675
  name: "Import Tools",
@@ -3677,7 +3677,15 @@ const DefaultInspectorExtensionFeed = new BuiltInsExtensionFeed("Inspector", [
3677
3677
  keywords: ["import", "tools"],
3678
3678
  ...BabylonWebResources,
3679
3679
  author: { name: "Alex Chuber", forumUserName: "alexchuber" },
3680
- getExtensionModuleAsync: async () => await import('./importService-CJtBZSUv.js'),
3680
+ getExtensionModuleAsync: async () => await import('./importService-CF3uudG4.js'),
3681
+ },
3682
+ {
3683
+ name: "Quick Creation Tools (Preview)",
3684
+ description: "Adds a new panel for easy creation of various Babylon assets. This is a WIP extension...expect changes!",
3685
+ keywords: ["creation", "tools"],
3686
+ ...BabylonWebResources,
3687
+ author: { name: "Babylon.js", forumUserName: "" },
3688
+ getExtensionModuleAsync: async () => await import('./quickCreateToolsService-C-yzV033.js'),
3681
3689
  },
3682
3690
  ]);
3683
3691
 
@@ -4785,7 +4793,7 @@ function MakeModularTool(options) {
4785
4793
  });
4786
4794
  // Register the extension list service (for browsing/installing extensions) if extension feeds are provided.
4787
4795
  if (extensionFeeds.length > 0) {
4788
- const { ExtensionListServiceDefinition } = await import('./extensionsListService-CwKHXUHO.js');
4796
+ const { ExtensionListServiceDefinition } = await import('./extensionsListService-s7SPclHA.js');
4789
4797
  await serviceContainer.addServiceAsync(ExtensionListServiceDefinition);
4790
4798
  }
4791
4799
  // Register the theme selector service (for selecting the theme) if theming is configured.
@@ -10503,5 +10511,5 @@ const TextAreaPropertyLine = (props) => {
10503
10511
  // Attach Inspector v2 to Scene.debugLayer as a side effect for back compat.
10504
10512
  AttachDebugLayer();
10505
10513
 
10506
- export { SceneContextIdentity as $, AttachDebugLayer as A, ButtonLine as B, Collapse as C, DebugServiceIdentity as D, ExtensibleAccordion as E, FileUploadLine as F, usePollingObservable as G, useResource as H, Inspector as I, useAsyncResource as J, useCompactMode as K, Link as L, MakeLazyComponent as M, NumberDropdownPropertyLine as N, useSidePaneDockOverrides as O, PropertiesServiceIdentity as P, useAngleConverters as Q, MakeTeachingMoment as R, SwitchPropertyLine as S, ToolsServiceIdentity as T, MakeDialogTeachingMoment as U, InterceptFunction as V, GetPropertyDescriptor as W, IsPropertyReadonly as X, InterceptProperty as Y, ObservableCollection as Z, ConstructorFactory as _, SyncedSliderPropertyLine as a, SelectionServiceIdentity as a0, SelectionServiceDefinition as a1, SettingsContextIdentity as a2, ShowInspector as a3, AccordionSection as a4, Accordion as a5, Button as a6, Checkbox as a7, ColorPickerPopup as a8, InputHexField as a9, BooleanBadgePropertyLine as aA, CheckboxPropertyLine as aB, Color3PropertyLine as aC, Color4PropertyLine as aD, HexPropertyLine as aE, TextInputPropertyLine as aF, NumberInputPropertyLine as aG, LinkPropertyLine as aH, PropertyLine as aI, LineContainer as aJ, PlaceholderPropertyLine as aK, SpinButtonPropertyLine as aL, StringifiedPropertyLine as aM, TextAreaPropertyLine as aN, TextPropertyLine as aO, RotationVectorPropertyLine as aP, QuaternionPropertyLine as aQ, Vector2PropertyLine as aR, Vector3PropertyLine as aS, Vector4PropertyLine as aT, InputHsvField as aa, ComboBox as ab, DraggableLine as ac, Dropdown as ad, NumberDropdown as ae, StringDropdown as af, FactorGradientComponent as ag, Color3GradientComponent as ah, Color4GradientComponent as ai, ColorStepGradientComponent as aj, InfoLabel as ak, List as al, MessageBar as am, PositionedPopover as an, SearchBar as ao, SearchBox as ap, SpinButton as aq, Switch as ar, SyncedSliderInput as as, Textarea as at, TextInput as au, ToggleButton as av, FactorGradientList as aw, Color3GradientList as ax, Color4GradientList as ay, Pane as az, ShellServiceIdentity as b, MakePopoverTeachingMoment as c, TeachingMoment as d, SidePaneContainer as e, SceneExplorerServiceIdentity as f, SettingsServiceIdentity as g, StatsServiceIdentity as h, ConvertOptions as i, DetachDebugLayer as j, StringDropdownPropertyLine as k, BoundProperty as l, LinkToEntityPropertyLine as m, BuiltInsExtensionFeed as n, useProperty as o, useVector3Property as p, useColor3Property as q, useColor4Property as r, useQuaternionProperty as s, MakePropertyHook as t, useExtensionManager as u, useInterceptObservable as v, useEventfulState as w, useObservableState as x, useObservableCollection as y, useOrderedObservableCollection as z };
10507
- //# sourceMappingURL=index-Cxm78n40.js.map
10514
+ export { MakeTeachingMoment as $, Accordion as A, ButtonLine as B, Collapse as C, DebugServiceIdentity as D, ExtensibleAccordion as E, FileUploadLine as F, useColor4Property as G, useQuaternionProperty as H, Inspector as I, MakePropertyHook as J, useInterceptObservable as K, Link as L, MakeLazyComponent as M, NumberDropdownPropertyLine as N, useEventfulState as O, PropertiesServiceIdentity as P, useObservableCollection as Q, useOrderedObservableCollection as R, SwitchPropertyLine as S, ToolsServiceIdentity as T, usePollingObservable as U, Vector3PropertyLine as V, useResource as W, useAsyncResource as X, useCompactMode as Y, useSidePaneDockOverrides as Z, useAngleConverters as _, SyncedSliderPropertyLine as a, MakeDialogTeachingMoment as a0, InterceptFunction as a1, GetPropertyDescriptor as a2, IsPropertyReadonly as a3, InterceptProperty as a4, ObservableCollection as a5, ConstructorFactory as a6, SelectionServiceIdentity as a7, SelectionServiceDefinition as a8, SettingsContextIdentity as a9, FactorGradientList as aA, Color3GradientList as aB, Color4GradientList as aC, Pane as aD, BooleanBadgePropertyLine as aE, Color3PropertyLine as aF, Color4PropertyLine as aG, HexPropertyLine as aH, NumberInputPropertyLine as aI, LinkPropertyLine as aJ, PropertyLine as aK, LineContainer as aL, PlaceholderPropertyLine as aM, StringifiedPropertyLine as aN, TextAreaPropertyLine as aO, TextPropertyLine as aP, RotationVectorPropertyLine as aQ, QuaternionPropertyLine as aR, Vector2PropertyLine as aS, Vector4PropertyLine as aT, ShowInspector as aa, Checkbox as ab, ColorPickerPopup as ac, InputHexField as ad, InputHsvField as ae, ComboBox as af, DraggableLine as ag, Dropdown as ah, NumberDropdown as ai, StringDropdown as aj, FactorGradientComponent as ak, Color3GradientComponent as al, Color4GradientComponent as am, ColorStepGradientComponent as an, InfoLabel as ao, List as ap, MessageBar as aq, PositionedPopover as ar, SearchBar as as, SearchBox as at, SpinButton as au, Switch as av, SyncedSliderInput as aw, Textarea as ax, TextInput as ay, ToggleButton as az, Button as b, TextInputPropertyLine as c, SpinButtonPropertyLine as d, CheckboxPropertyLine as e, ShellServiceIdentity as f, SceneContextIdentity as g, AccordionSection as h, useExtensionManager as i, MakePopoverTeachingMoment as j, TeachingMoment as k, SidePaneContainer as l, SceneExplorerServiceIdentity as m, SettingsServiceIdentity as n, StatsServiceIdentity as o, ConvertOptions as p, AttachDebugLayer as q, DetachDebugLayer as r, StringDropdownPropertyLine as s, BoundProperty as t, useObservableState as u, LinkToEntityPropertyLine as v, BuiltInsExtensionFeed as w, useProperty as x, useVector3Property as y, useColor3Property as z };
10515
+ //# sourceMappingURL=index-BUtV9Nch.js.map