@babylonjs/inspector 8.50.3 → 8.50.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/{extensionsListService-Bl9imMOn.js → extensionsListService-CSNgtWE2.js} +3 -2
- package/lib/{extensionsListService-Bl9imMOn.js.map → extensionsListService-CSNgtWE2.js.map} +1 -1
- package/lib/{index-CTn2vCom.js → index-DNdlSwwf.js} +154 -27
- package/lib/{index-CTn2vCom.js.map → index-DNdlSwwf.js.map} +1 -1
- package/lib/index.d.ts +7 -1
- package/lib/index.js +2 -1
- package/lib/index.js.map +1 -1
- package/lib/{quickCreateToolsService-BGHjWv6H.js → quickCreateToolsService-87Wg6d7G.js} +3 -2
- package/lib/{quickCreateToolsService-BGHjWv6H.js.map → quickCreateToolsService-87Wg6d7G.js.map} +1 -1
- package/lib/{reflectorService-CiKXKaoZ.js → reflectorService-CUscktdu.js} +3 -2
- package/lib/{reflectorService-CiKXKaoZ.js.map → reflectorService-CUscktdu.js.map} +1 -1
- package/package.json +1 -1
|
@@ -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 { a as ShellServiceIdentity, g as useExtensionManager, h as MakePopoverTeachingMoment, i as TeachingMoment, L as Link } from './index-
|
|
7
|
+
import { a as ShellServiceIdentity, g as useExtensionManager, h as MakePopoverTeachingMoment, i as TeachingMoment, L as Link } from './index-DNdlSwwf.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';
|
|
@@ -146,6 +146,7 @@ import '@babylonjs/core/Loading/sceneLoader.js';
|
|
|
146
146
|
import '@babylonjs/core/Misc/filesInput.js';
|
|
147
147
|
import '@babylonjs/loaders/glTF/glTFFileLoader.js';
|
|
148
148
|
import '@babylonjs/loaders/glTF/glTFValidation.js';
|
|
149
|
+
import '@babylonjs/core/Layers/selectionOutlineLayer.js';
|
|
149
150
|
import '@babylonjs/core/Engines/engineStore.js';
|
|
150
151
|
import '@babylonjs/core/Debug/debugLayer.js';
|
|
151
152
|
import '@babylonjs/core/Misc/lazy.js';
|
|
@@ -364,4 +365,4 @@ const ExtensionListServiceDefinition = {
|
|
|
364
365
|
};
|
|
365
366
|
|
|
366
367
|
export { ExtensionListServiceDefinition };
|
|
367
|
-
//# sourceMappingURL=extensionsListService-
|
|
368
|
+
//# sourceMappingURL=extensionsListService-CSNgtWE2.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extensionsListService-Bl9imMOn.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\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\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-CSNgtWE2.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\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\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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"}
|
|
@@ -145,6 +145,7 @@ import { ImportAnimationsAsync, SceneLoader } from '@babylonjs/core/Loading/scen
|
|
|
145
145
|
import { FilesInput } from '@babylonjs/core/Misc/filesInput.js';
|
|
146
146
|
import { GLTFLoaderAnimationStartMode, GLTFLoaderCoordinateSystemMode, GLTFLoaderDefaultOptions } from '@babylonjs/loaders/glTF/glTFFileLoader.js';
|
|
147
147
|
import { GLTFValidation } from '@babylonjs/loaders/glTF/glTFValidation.js';
|
|
148
|
+
import { SelectionOutlineLayer } from '@babylonjs/core/Layers/selectionOutlineLayer.js';
|
|
148
149
|
import { EngineStore } from '@babylonjs/core/Engines/engineStore.js';
|
|
149
150
|
import { DebugLayer } from '@babylonjs/core/Debug/debugLayer.js';
|
|
150
151
|
import { Lazy } from '@babylonjs/core/Misc/lazy.js';
|
|
@@ -2080,24 +2081,30 @@ const BabylonRamp = {
|
|
|
2080
2081
|
160: "#C6D8FF",
|
|
2081
2082
|
};
|
|
2082
2083
|
/* eslint-enable @typescript-eslint/naming-convention */
|
|
2084
|
+
const BaseLightTheme = createLightTheme(BabylonRamp);
|
|
2083
2085
|
const LightTheme = {
|
|
2084
|
-
...
|
|
2086
|
+
...BaseLightTheme,
|
|
2085
2087
|
// Reduce the max contrast between foreground and background by just replacing the most intense foreground color with the second most intense one.
|
|
2086
|
-
colorNeutralForeground1:
|
|
2088
|
+
colorNeutralForeground1: BaseLightTheme.colorNeutralForeground2,
|
|
2087
2089
|
};
|
|
2090
|
+
const BaseDarkTheme = createDarkTheme(BabylonRamp);
|
|
2088
2091
|
const DarkTheme = {
|
|
2089
|
-
...
|
|
2092
|
+
...BaseDarkTheme,
|
|
2090
2093
|
// Reduce the max contrast between foreground and background by just replacing the most intense foreground color with the second most intense one.
|
|
2091
|
-
colorNeutralForeground1:
|
|
2094
|
+
colorNeutralForeground1: BaseDarkTheme.colorNeutralForeground2,
|
|
2092
2095
|
};
|
|
2093
2096
|
|
|
2097
|
+
function useTheme(invert = false) {
|
|
2098
|
+
const { isDarkMode } = useThemeMode();
|
|
2099
|
+
return isDarkMode !== invert ? DarkTheme : LightTheme;
|
|
2100
|
+
}
|
|
2094
2101
|
const Theme = (props) => {
|
|
2095
2102
|
// NOTE: We do not want to applyStylesToPortals by default. If makes classes flow into portals
|
|
2096
2103
|
// (like popovers), and if those styles do things like disable overflow, they can completely
|
|
2097
2104
|
// break any UI within the portal. Therefore, default to false.
|
|
2098
2105
|
const { invert = false, applyStylesToPortals = false, ...rest } = props;
|
|
2099
|
-
const
|
|
2100
|
-
return (jsx(FluentProvider, { theme:
|
|
2106
|
+
const theme = useTheme(invert);
|
|
2107
|
+
return (jsx(FluentProvider, { theme: theme, applyStylesToPortals: applyStylesToPortals, ...rest, children: props.children }));
|
|
2101
2108
|
};
|
|
2102
2109
|
|
|
2103
2110
|
const useStyles$O = makeStyles({
|
|
@@ -4527,6 +4534,7 @@ const SettingsServiceDefinition = {
|
|
|
4527
4534
|
let useEuler = DataStorage.ReadBoolean("Babylon/Settings/UseEuler", false);
|
|
4528
4535
|
let ignoreBackfacesForPicking = DataStorage.ReadBoolean("Babylon/Settings/IgnoreBackfacesForPicking", false);
|
|
4529
4536
|
let showPropertiesOnEntitySelection = DataStorage.ReadBoolean("Babylon/Settings/ShowPropertiesOnEntitySelection", true);
|
|
4537
|
+
let highlightSelectedEntity = DataStorage.ReadBoolean("Babylon/Settings/HighlightSelectedEntity", true);
|
|
4530
4538
|
const settings = {
|
|
4531
4539
|
get useDegrees() {
|
|
4532
4540
|
return useDegrees;
|
|
@@ -4572,6 +4580,17 @@ const SettingsServiceDefinition = {
|
|
|
4572
4580
|
DataStorage.WriteBoolean("Babylon/Settings/ShowPropertiesOnEntitySelection", showPropertiesOnEntitySelection);
|
|
4573
4581
|
this.settingsChangedObservable.notifyObservers(this);
|
|
4574
4582
|
},
|
|
4583
|
+
get highlightSelectedEntity() {
|
|
4584
|
+
return highlightSelectedEntity;
|
|
4585
|
+
},
|
|
4586
|
+
set highlightSelectedEntity(value) {
|
|
4587
|
+
if (highlightSelectedEntity === value) {
|
|
4588
|
+
return; // No change, no need to notify
|
|
4589
|
+
}
|
|
4590
|
+
highlightSelectedEntity = value;
|
|
4591
|
+
DataStorage.WriteBoolean("Babylon/Settings/HighlightSelectedEntity", highlightSelectedEntity);
|
|
4592
|
+
this.settingsChangedObservable.notifyObservers(this);
|
|
4593
|
+
},
|
|
4575
4594
|
settingsChangedObservable: new Observable(),
|
|
4576
4595
|
addSection: (section) => sectionsCollection.add(section),
|
|
4577
4596
|
addSectionContent: (content) => sectionContentCollection.add(content),
|
|
@@ -4592,19 +4611,16 @@ const SettingsServiceDefinition = {
|
|
|
4592
4611
|
const [compactMode, setCompactMode] = useCompactMode();
|
|
4593
4612
|
const [disableCopy, setDisableCopy] = useDisableCopy();
|
|
4594
4613
|
const [, , resetSidePaneLayout] = useSidePaneDockOverrides();
|
|
4595
|
-
|
|
4596
|
-
|
|
4597
|
-
|
|
4598
|
-
|
|
4599
|
-
|
|
4600
|
-
|
|
4601
|
-
|
|
4602
|
-
settings.ignoreBackfacesForPicking = checked
|
|
4603
|
-
|
|
4604
|
-
settings.
|
|
4605
|
-
} }), jsx(SwitchPropertyLine, { label: "Disable Copy Button", description: "Disables the copy to clipboard button on property lines. You can still Ctrl+Click on the label to copy.", value: disableCopy, onChange: (checked) => {
|
|
4606
|
-
setDisableCopy(checked);
|
|
4607
|
-
} }), jsx(ButtonLine, { label: "Reset Layout", onClick: resetSidePaneLayout })] }) })) }));
|
|
4614
|
+
const useDegrees = useProperty(settings, "useDegrees");
|
|
4615
|
+
const useEuler = useProperty(settings, "useEuler");
|
|
4616
|
+
const ignoreBackfacesForPicking = useProperty(settings, "ignoreBackfacesForPicking");
|
|
4617
|
+
const showPropertiesOnEntitySelection = useProperty(settings, "showPropertiesOnEntitySelection");
|
|
4618
|
+
const highlightSelectedEntity = useProperty(settings, "highlightSelectedEntity");
|
|
4619
|
+
return (jsx(Fragment, { children: scene && (jsxs(ExtensibleAccordion, { sections: sections, sectionContent: sectionContent, context: scene, children: [jsxs(AccordionSection, { title: "UI", children: [jsx(SwitchPropertyLine, { label: "Compact Mode", description: "Use a more compact UI with less spacing.", value: compactMode, onChange: (checked) => {
|
|
4620
|
+
setCompactMode(checked);
|
|
4621
|
+
} }), jsx(SwitchPropertyLine, { label: "Use Degrees", description: "Using degrees instead of radians.", value: useDegrees, onChange: (checked) => (settings.useDegrees = checked) }), jsx(SwitchPropertyLine, { label: "Only Show Euler Angles", description: "Only show Euler angles in rotation properties, rather than quaternions.", value: useEuler, onChange: (checked) => (settings.useEuler = checked) }), jsx(SwitchPropertyLine, { label: "Ignore Backfaces for Picking", description: "Ignore backfaces when picking.", value: ignoreBackfacesForPicking, onChange: (checked) => (settings.ignoreBackfacesForPicking = checked) }), jsx(SwitchPropertyLine, { label: "Show Properties on Selection", description: "Shows the Properties pane when an entity is selected.", value: showPropertiesOnEntitySelection, onChange: (checked) => (settings.showPropertiesOnEntitySelection = checked) }), jsx(SwitchPropertyLine, { label: "Disable Copy Button", description: "Disables the copy to clipboard button on property lines. You can still Ctrl+Click on the label to copy.", value: disableCopy, onChange: (checked) => {
|
|
4622
|
+
setDisableCopy(checked);
|
|
4623
|
+
} }), jsx(ButtonLine, { label: "Reset Layout", onClick: resetSidePaneLayout })] }), jsx(AccordionSection, { title: "Scene", children: jsx(SwitchPropertyLine, { label: "Highlight Selected Entity", description: "Highlight the selected mesh in the scene. Enabling this setting may impact rendering performance.", value: highlightSelectedEntity, onChange: (value) => (settings.highlightSelectedEntity = value) }) })] })) }));
|
|
4608
4624
|
},
|
|
4609
4625
|
});
|
|
4610
4626
|
settings.dispose = () => registration.dispose();
|
|
@@ -6715,7 +6731,7 @@ const DefaultInspectorExtensionFeed = new BuiltInsExtensionFeed("Inspector", [
|
|
|
6715
6731
|
keywords: ["creation", "tools"],
|
|
6716
6732
|
...BabylonWebResources,
|
|
6717
6733
|
author: { name: "Babylon.js", forumUserName: "" },
|
|
6718
|
-
getExtensionModuleAsync: async () => await import('./quickCreateToolsService-
|
|
6734
|
+
getExtensionModuleAsync: async () => await import('./quickCreateToolsService-87Wg6d7G.js'),
|
|
6719
6735
|
},
|
|
6720
6736
|
{
|
|
6721
6737
|
name: "Reflector",
|
|
@@ -6723,7 +6739,7 @@ const DefaultInspectorExtensionFeed = new BuiltInsExtensionFeed("Inspector", [
|
|
|
6723
6739
|
keywords: ["reflector", "bridge", "sync", "sandbox", "tools"],
|
|
6724
6740
|
...BabylonWebResources,
|
|
6725
6741
|
author: { name: "Babylon.js", forumUserName: "" },
|
|
6726
|
-
getExtensionModuleAsync: async () => await import('./reflectorService-
|
|
6742
|
+
getExtensionModuleAsync: async () => await import('./reflectorService-CUscktdu.js'),
|
|
6727
6743
|
},
|
|
6728
6744
|
]);
|
|
6729
6745
|
|
|
@@ -7490,6 +7506,8 @@ const ThemeSelectorServiceDefinition = {
|
|
|
7490
7506
|
},
|
|
7491
7507
|
};
|
|
7492
7508
|
|
|
7509
|
+
const ThemeServiceIdentity = Symbol("ThemeService");
|
|
7510
|
+
|
|
7493
7511
|
const useStyles$D = makeStyles({
|
|
7494
7512
|
app: {
|
|
7495
7513
|
colorScheme: "light dark",
|
|
@@ -7526,6 +7544,8 @@ function MakeModularTool(options) {
|
|
|
7526
7544
|
if (themeMode) {
|
|
7527
7545
|
SetThemeMode(themeMode);
|
|
7528
7546
|
}
|
|
7547
|
+
let theme;
|
|
7548
|
+
const themeChangedObservable = new Observable();
|
|
7529
7549
|
const modularToolRootComponent = () => {
|
|
7530
7550
|
const classes = useStyles$D();
|
|
7531
7551
|
const [extensionManagerContext, setExtensionManagerContext] = useState();
|
|
@@ -7533,6 +7553,10 @@ function MakeModularTool(options) {
|
|
|
7533
7553
|
const [requiredExtensionsDeferred, setRequiredExtensionsDeferred] = useState();
|
|
7534
7554
|
const [extensionInstallError, setExtensionInstallError] = useState();
|
|
7535
7555
|
const [rootComponent, setRootComponent] = useState();
|
|
7556
|
+
theme = useTheme();
|
|
7557
|
+
useEffect(() => {
|
|
7558
|
+
themeChangedObservable.notifyObservers();
|
|
7559
|
+
}, [theme]);
|
|
7536
7560
|
// This is the main async initialization.
|
|
7537
7561
|
useEffect(() => {
|
|
7538
7562
|
const initializeExtensionManagerAsync = async () => {
|
|
@@ -7551,9 +7575,23 @@ function MakeModularTool(options) {
|
|
|
7551
7575
|
};
|
|
7552
7576
|
},
|
|
7553
7577
|
});
|
|
7578
|
+
// Register a service that exposes the raw theme to other services outside the React tree.
|
|
7579
|
+
// React components can access the raw theme via the useTheme hook, or theme tokens via Fluent's tokens object.
|
|
7580
|
+
await serviceContainer.addServiceAsync({
|
|
7581
|
+
friendlyName: "Theme Service",
|
|
7582
|
+
produces: [ThemeServiceIdentity],
|
|
7583
|
+
factory: () => {
|
|
7584
|
+
return {
|
|
7585
|
+
get theme() {
|
|
7586
|
+
return theme;
|
|
7587
|
+
},
|
|
7588
|
+
onChanged: themeChangedObservable,
|
|
7589
|
+
};
|
|
7590
|
+
},
|
|
7591
|
+
});
|
|
7554
7592
|
// Register the extension list service (for browsing/installing extensions) if extension feeds are provided.
|
|
7555
7593
|
if (extensionFeeds.length > 0) {
|
|
7556
|
-
const { ExtensionListServiceDefinition } = await import('./extensionsListService-
|
|
7594
|
+
const { ExtensionListServiceDefinition } = await import('./extensionsListService-CSNgtWE2.js');
|
|
7557
7595
|
await serviceContainer.addServiceAsync(ExtensionListServiceDefinition);
|
|
7558
7596
|
}
|
|
7559
7597
|
// Register the theme selector service (for selecting the theme) if theming is configured.
|
|
@@ -7640,6 +7678,7 @@ function MakeModularTool(options) {
|
|
|
7640
7678
|
// Unmount and restore the original container element display.
|
|
7641
7679
|
if (!disposed) {
|
|
7642
7680
|
disposed = true;
|
|
7681
|
+
themeChangedObservable.clear();
|
|
7643
7682
|
reactRoot.unmount();
|
|
7644
7683
|
containerElement.style.display = originalContainerElementDisplay;
|
|
7645
7684
|
}
|
|
@@ -20352,8 +20391,87 @@ const GLTFValidationServiceDefinition = {
|
|
|
20352
20391
|
},
|
|
20353
20392
|
};
|
|
20354
20393
|
|
|
20394
|
+
const HighlightServiceDefinition = {
|
|
20395
|
+
friendlyName: "Highlight Service",
|
|
20396
|
+
consumes: [SelectionServiceIdentity, SceneContextIdentity, SettingsContextIdentity, ThemeServiceIdentity],
|
|
20397
|
+
factory: (selectionService, sceneContext, settingsContext, themeService) => {
|
|
20398
|
+
let outlineLayer = null;
|
|
20399
|
+
let currentScene = null;
|
|
20400
|
+
let activeCameraObserver = null;
|
|
20401
|
+
function disposeOutlineLayer() {
|
|
20402
|
+
outlineLayer?.dispose();
|
|
20403
|
+
outlineLayer = null;
|
|
20404
|
+
currentScene = null;
|
|
20405
|
+
}
|
|
20406
|
+
function getOrCreateOutlineLayer(scene) {
|
|
20407
|
+
if (!outlineLayer || currentScene !== scene) {
|
|
20408
|
+
disposeOutlineLayer();
|
|
20409
|
+
outlineLayer = new SelectionOutlineLayer("InspectorSelectionOutline", scene);
|
|
20410
|
+
updateColor(outlineLayer);
|
|
20411
|
+
currentScene = scene;
|
|
20412
|
+
}
|
|
20413
|
+
return outlineLayer;
|
|
20414
|
+
}
|
|
20415
|
+
function updateColor(outlineLayer) {
|
|
20416
|
+
outlineLayer.outlineColor = Color3.FromHexString(themeService.theme.colorBrandForeground1);
|
|
20417
|
+
}
|
|
20418
|
+
function updateHighlight() {
|
|
20419
|
+
const scene = sceneContext.currentScene;
|
|
20420
|
+
const entity = selectionService.selectedEntity instanceof AbstractMesh && !(selectionService.selectedEntity instanceof GaussianSplattingMesh)
|
|
20421
|
+
? selectionService.selectedEntity
|
|
20422
|
+
: null;
|
|
20423
|
+
if (!entity || !settingsContext.highlightSelectedEntity || !scene || !scene.activeCamera) {
|
|
20424
|
+
disposeOutlineLayer();
|
|
20425
|
+
return;
|
|
20426
|
+
}
|
|
20427
|
+
const layer = getOrCreateOutlineLayer(scene);
|
|
20428
|
+
layer.clearSelection();
|
|
20429
|
+
layer.addSelection(entity);
|
|
20430
|
+
}
|
|
20431
|
+
function watchActiveCamera(scene) {
|
|
20432
|
+
activeCameraObserver?.remove();
|
|
20433
|
+
activeCameraObserver = null;
|
|
20434
|
+
if (scene) {
|
|
20435
|
+
activeCameraObserver = scene.onActiveCameraChanged.add(updateHighlight);
|
|
20436
|
+
}
|
|
20437
|
+
}
|
|
20438
|
+
// React to theme changes.
|
|
20439
|
+
const themeObserver = themeService.onChanged.add(() => {
|
|
20440
|
+
if (outlineLayer) {
|
|
20441
|
+
updateColor(outlineLayer);
|
|
20442
|
+
}
|
|
20443
|
+
});
|
|
20444
|
+
// React to selection changes.
|
|
20445
|
+
const selectionObserver = selectionService.onSelectedEntityChanged.add(updateHighlight);
|
|
20446
|
+
// React to scene changes.
|
|
20447
|
+
const sceneObserver = sceneContext.currentSceneObservable.add(() => {
|
|
20448
|
+
// Dispose the old layer when the scene changes.
|
|
20449
|
+
disposeOutlineLayer();
|
|
20450
|
+
watchActiveCamera(sceneContext.currentScene);
|
|
20451
|
+
updateHighlight();
|
|
20452
|
+
});
|
|
20453
|
+
// React to settings changes.
|
|
20454
|
+
const settingsObserver = settingsContext.settingsChangedObservable.add(updateHighlight);
|
|
20455
|
+
// Watch active camera on the initial scene.
|
|
20456
|
+
watchActiveCamera(sceneContext.currentScene);
|
|
20457
|
+
// Initial update.
|
|
20458
|
+
updateHighlight();
|
|
20459
|
+
return {
|
|
20460
|
+
dispose: () => {
|
|
20461
|
+
themeObserver.remove();
|
|
20462
|
+
selectionObserver.remove();
|
|
20463
|
+
sceneObserver.remove();
|
|
20464
|
+
settingsObserver.remove();
|
|
20465
|
+
activeCameraObserver?.remove();
|
|
20466
|
+
activeCameraObserver = null;
|
|
20467
|
+
disposeOutlineLayer();
|
|
20468
|
+
},
|
|
20469
|
+
};
|
|
20470
|
+
},
|
|
20471
|
+
};
|
|
20472
|
+
|
|
20355
20473
|
const PickingToolbar = (props) => {
|
|
20356
|
-
const { scene, selectEntity, gizmoService, ignoreBackfaces } = props;
|
|
20474
|
+
const { scene, selectEntity, gizmoService, ignoreBackfaces, highlightSelectedEntity, onHighlightSelectedEntityChange } = props;
|
|
20357
20475
|
const meshDataCache = useMemo(() => new WeakMap(), [scene]);
|
|
20358
20476
|
// Not sure why changing the cursor on the canvas itself doesn't work, so change it on the parent.
|
|
20359
20477
|
const sceneElement = scene.getEngine().getRenderingCanvas()?.parentElement;
|
|
@@ -20427,7 +20545,12 @@ const PickingToolbar = (props) => {
|
|
|
20427
20545
|
/* No-op */
|
|
20428
20546
|
};
|
|
20429
20547
|
}, [pickingEnabled, sceneElement, ignoreBackfaces]);
|
|
20430
|
-
|
|
20548
|
+
const togglePicking = useCallback(() => {
|
|
20549
|
+
setPickingEnabled((prev) => !prev);
|
|
20550
|
+
}, []);
|
|
20551
|
+
return (sceneElement && (jsxs(Menu, { positioning: "below-end", checkedValues: { selectionHighlight: highlightSelectedEntity ? ["on"] : [] }, onCheckedValueChange: (_e, data) => {
|
|
20552
|
+
onHighlightSelectedEntityChange?.(data.checkedItems.includes("on"));
|
|
20553
|
+
}, children: [jsx(MenuTrigger, { disableButtonEnhancement: true, children: (triggerProps) => (jsx(Tooltip$1, { content: `${pickingEnabled ? "Disable" : "Enable"} Picking`, relationship: "label", children: jsx(SplitButton, { menuButton: triggerProps, primaryActionButton: { onClick: togglePicking }, size: "small", appearance: "transparent", icon: jsx(TargetRegular, { color: pickingEnabled ? tokens.colorBrandForeground1 : undefined }) }) })) }), jsx(MenuPopover, { children: jsx(MenuList, { children: jsx(MenuItemCheckbox, { name: "selectionHighlight", value: "on", children: "Highlight Selected Entity" }) }) })] })));
|
|
20431
20554
|
};
|
|
20432
20555
|
|
|
20433
20556
|
const PickingServiceDefinition = {
|
|
@@ -20443,7 +20566,9 @@ const PickingServiceDefinition = {
|
|
|
20443
20566
|
const scene = useObservableState(() => sceneContext.currentScene, sceneContext.currentSceneObservable);
|
|
20444
20567
|
const selectEntity = useCallback((entity) => (selectionService.selectedEntity = entity), []);
|
|
20445
20568
|
const ignoreBackfacesForPicking = useObservableState(() => settingsContext.ignoreBackfacesForPicking, settingsContext.settingsChangedObservable);
|
|
20446
|
-
|
|
20569
|
+
const highlightSelectedEntity = useObservableState(() => settingsContext.highlightSelectedEntity, settingsContext.settingsChangedObservable);
|
|
20570
|
+
const onHighlightSelectedEntityChange = useCallback((value) => (settingsContext.highlightSelectedEntity = value), []);
|
|
20571
|
+
return scene ? (jsx(PickingToolbar, { scene: scene, selectEntity: selectEntity, gizmoService: gizmoService, ignoreBackfaces: ignoreBackfacesForPicking, highlightSelectedEntity: highlightSelectedEntity, onHighlightSelectedEntityChange: onHighlightSelectedEntityChange })) : null;
|
|
20447
20572
|
},
|
|
20448
20573
|
});
|
|
20449
20574
|
},
|
|
@@ -20655,6 +20780,8 @@ function ShowInspector(scene, options = {}) {
|
|
|
20655
20780
|
GizmoToolbarServiceDefinition,
|
|
20656
20781
|
// Allows picking objects from the scene to select them.
|
|
20657
20782
|
PickingServiceDefinition,
|
|
20783
|
+
// Highlights the selected mesh in the scene.
|
|
20784
|
+
HighlightServiceDefinition,
|
|
20658
20785
|
// Adds entry points for user feedback on Inspector v2 (probably eventually will be removed).
|
|
20659
20786
|
UserFeedbackServiceDefinition,
|
|
20660
20787
|
// Adds always present "mini stats" (like fps) to the toolbar, etc.
|
|
@@ -21482,5 +21609,5 @@ const TextAreaPropertyLine = (props) => {
|
|
|
21482
21609
|
// Attach Inspector v2 to Scene.debugLayer as a side effect for back compat.
|
|
21483
21610
|
AttachDebugLayer();
|
|
21484
21611
|
|
|
21485
|
-
export {
|
|
21486
|
-
//# sourceMappingURL=index-
|
|
21612
|
+
export { useAsyncResource as $, Accordion as A, Button as B, CheckboxPropertyLine as C, DebugServiceIdentity as D, ErrorBoundary as E, PropertyContext as F, usePropertyChangedNotifier as G, BuiltInsExtensionFeed as H, Inspector as I, useVector3Property as J, useColor3Property as K, Link as L, MessageBar as M, NumberInputPropertyLine as N, useColor4Property as O, Popover as P, useQuaternionProperty as Q, MakePropertyHook as R, SpinButtonPropertyLine as S, TextInputPropertyLine as T, useInterceptObservable as U, Vector3PropertyLine as V, useEventfulState as W, useObservableCollection as X, useOrderedObservableCollection as Y, usePollingObservable as Z, useResource as _, ShellServiceIdentity as a, Color3PropertyLine as a$, useCompactMode as a0, useDisableCopy as a1, useSidePaneDockOverrides as a2, useAngleConverters as a3, MakeTeachingMoment as a4, MakeDialogTeachingMoment as a5, InterceptFunction as a6, GetPropertyDescriptor as a7, IsPropertyReadonly as a8, InterceptProperty as a9, MakeLazyComponent as aA, List as aB, MaterialSelector as aC, NodeSelector as aD, PositionedPopover as aE, SearchBar as aF, SearchBox as aG, SkeletonSelector as aH, SpinButton as aI, Switch as aJ, SyncedSliderInput as aK, Textarea as aL, TextInput as aM, TextureSelector as aN, ToastProvider as aO, useToast as aP, ToggleButton as aQ, Tooltip as aR, UploadButton as aS, ChildWindow as aT, FileUploadLine as aU, FactorGradientList as aV, Color3GradientList as aW, Color4GradientList as aX, Pane as aY, TextureUpload as aZ, BooleanBadgePropertyLine as a_, ObservableCollection as aa, ConstructorFactory as ab, SelectionServiceIdentity as ac, SelectionServiceDefinition as ad, SettingsContextIdentity as ae, ShowInspector as af, useKeyListener as ag, useKeyState as ah, useEventListener as ai, AccordionSectionItem as aj, Checkbox as ak, Collapse as al, ColorPickerPopup as am, InputHexField as an, InputHsvField as ao, ComboBox as ap, DraggableLine as aq, Dropdown as ar, NumberDropdown as as, StringDropdown as at, EntitySelector as au, FactorGradientComponent as av, Color3GradientComponent as aw, Color4GradientComponent as ax, ColorStepGradientComponent as ay, InfoLabel as az, SceneContextIdentity as b, Color4PropertyLine as b0, ComboBoxPropertyLine as b1, HexPropertyLine as b2, LinkPropertyLine as b3, PropertyLine as b4, LineContainer as b5, PlaceholderPropertyLine as b6, StringifiedPropertyLine as b7, SwitchPropertyLine as b8, SyncedSliderPropertyLine as b9, TextAreaPropertyLine as ba, TextPropertyLine as bb, RotationVectorPropertyLine as bc, QuaternionPropertyLine as bd, Vector2PropertyLine as be, Vector4PropertyLine as bf, useObservableState as c, AccordionSection as d, ButtonLine as e, ToolsServiceIdentity as f, useExtensionManager as g, MakePopoverTeachingMoment as h, TeachingMoment as i, SidePaneContainer as j, PropertiesServiceIdentity as k, SceneExplorerServiceIdentity as l, SettingsServiceIdentity as m, StatsServiceIdentity as n, ConvertOptions as o, AttachDebugLayer as p, DetachDebugLayer as q, NumberDropdownPropertyLine as r, StringDropdownPropertyLine as s, BoundProperty as t, useProperty as u, Property as v, LinkToEntityPropertyLine as w, ExtensibleAccordion as x, useTheme as y, Theme as z };
|
|
21613
|
+
//# sourceMappingURL=index-DNdlSwwf.js.map
|