@babylonjs/shared-ui-components 9.18.0 → 9.18.2

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 +1 @@
1
- {"version":3,"file":"modularTool.js","sourceRoot":"","sources":["../../../../dev/sharedUiComponents/src/modularTool/modularTool.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\r\n type ComponentType,\r\n type Context,\r\n type FunctionComponent,\r\n type PropsWithChildren,\r\n type ReactNode,\r\n createElement,\r\n Suspense,\r\n useCallback,\r\n useEffect,\r\n useReducer,\r\n useState,\r\n} from \"react\";\r\n\r\nimport { type IExtensionFeed } from \"./extensibility/extensionFeed\";\r\nimport { type IExtension, type InstallFailedInfo, ExtensionManager } from \"./extensibility/extensionManager\";\r\nimport { type WeaklyTypedServiceDefinition, ServiceContainer } from \"./modularity/serviceContainer\";\r\nimport { type ISettingsStore, SettingsStore, SettingsStoreIdentity } from \"./services/settingsStore\";\r\nimport { type IRootComponentService, type ShellServiceOptions, MakeShellServiceDefinition, RootComponentServiceIdentity } from \"./services/shellService\";\r\nimport { type ThemeMode, ThemeModeSettingDescriptor, ThemeServiceDefinition } from \"./services/themeService\";\r\n\r\nimport {\r\n Body1,\r\n Button,\r\n Dialog,\r\n DialogActions,\r\n DialogBody,\r\n DialogContent,\r\n DialogSurface,\r\n DialogTitle,\r\n List,\r\n ListItem,\r\n makeStyles,\r\n Spinner,\r\n tokens,\r\n} from \"@fluentui/react-components\";\r\nimport { CheckmarkCircleRegular, ErrorCircleRegular, InfoRegular, WarningRegular } from \"@fluentui/react-icons\";\r\nimport { createRoot } from \"react-dom/client\";\r\n\r\nimport { Deferred } from \"core/Misc/deferred\";\r\nimport { Logger } from \"core/Misc/logger\";\r\nimport { type ToastHandle, type ToastOptions, ToastProvider } from \"shared-ui-components/fluent/primitives/toast\";\r\nimport { type DialogOptions, type IDialogService, DialogServiceIdentity } from \"./services/dialogService\";\r\nimport { type IToastService, ToastServiceIdentity } from \"./services/toastService\";\r\nimport { Theme } from \"./components/theme\";\r\nimport { DialogContext } from \"./contexts/dialogContext\";\r\nimport { ExtensionManagerContext } from \"./contexts/extensionManagerContext\";\r\nimport { SettingsStoreContext } from \"./contexts/settingsContext\";\r\nimport { TeachingMomentsContext } from \"./contexts/teachingMomentsContext\";\r\nimport { type IReactContextService, type ReactContextHandle, ReactContextServiceIdentity } from \"./services/reactContextService\";\r\nimport { ThemeSelectorServiceDefinition } from \"./services/themeSelectorService\";\r\n\r\nconst useStyles = makeStyles({\r\n app: {\r\n colorScheme: \"light dark\",\r\n flexGrow: 1,\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n backgroundColor: tokens.colorTransparentBackground,\r\n },\r\n spinner: {\r\n flexGrow: 1,\r\n animationDuration: \"1s\",\r\n animationName: {\r\n from: { opacity: 0 },\r\n to: { opacity: 1 },\r\n },\r\n },\r\n extensionErrorTitleDiv: {\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n alignItems: \"center\",\r\n gap: tokens.spacingHorizontalS,\r\n },\r\n extensionErrorIcon: {\r\n color: tokens.colorPaletteRedForeground1,\r\n },\r\n dialogTitle: {\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n alignItems: \"center\",\r\n gap: tokens.spacingHorizontalS,\r\n },\r\n dialogIconSuccess: {\r\n color: tokens.colorStatusSuccessForeground1,\r\n },\r\n dialogIconError: {\r\n color: tokens.colorStatusDangerForeground1,\r\n },\r\n dialogIconWarning: {\r\n color: tokens.colorStatusWarningForeground1,\r\n },\r\n dialogIconInfo: {\r\n color: tokens.colorBrandForeground1,\r\n },\r\n});\r\n\r\ntype ReactContextEntry = {\r\n provider: Context<any>[\"Provider\"];\r\n value: unknown;\r\n order: number;\r\n};\r\n\r\ntype ReactContextAction =\r\n | { type: \"add\"; entry: ReactContextEntry }\r\n | { type: \"remove\"; provider: Context<any>[\"Provider\"] }\r\n | { type: \"update\"; provider: Context<any>[\"Provider\"]; value: unknown };\r\n\r\ntype DialogQueueAction = { type: \"enqueue\"; options: DialogOptions } | { type: \"dequeue\" };\r\n\r\nconst ReactContextsWrapper: FunctionComponent<PropsWithChildren<{ contexts: readonly Readonly<ReactContextEntry>[] }>> = ({ contexts, children }) => {\r\n return <>{contexts.reduceRight<ReactNode>((acc, entry) => createElement(entry.provider, { value: entry.value }, acc), children)}</>;\r\n};\r\n\r\nexport type ModularToolOptions = {\r\n /**\r\n * The namespace for the tool, used for scoping persisted settings and other storage.\r\n */\r\n namespace: string;\r\n\r\n /**\r\n * The container element where the tool will be rendered.\r\n */\r\n containerElement: HTMLElement;\r\n\r\n /**\r\n * The service definitions to be registered with the tool.\r\n */\r\n serviceDefinitions: readonly WeaklyTypedServiceDefinition[];\r\n\r\n /**\r\n * The theme mode to use. If not specified, the default is \"system\", which uses the system/browser preference, and the last used mode is persisted.\r\n */\r\n themeMode?: ThemeMode;\r\n\r\n /**\r\n * Whether to show the theme selector in the toolbar. Default is true.\r\n */\r\n showThemeSelector?: boolean;\r\n\r\n /**\r\n * The extension feeds that provide optional extensions the user can install.\r\n */\r\n extensionFeeds?: readonly IExtensionFeed[];\r\n\r\n /**\r\n * An optional parent ServiceContainer. Dependencies not found in the tool's own container\r\n * will be resolved from this parent.\r\n */\r\n parentContainer?: ServiceContainer;\r\n\r\n /**\r\n * When true, all teaching moments are disabled and will not be shown.\r\n */\r\n disableTeachingMoments?: boolean;\r\n} & ShellServiceOptions;\r\n\r\n/**\r\n * Creates a modular tool with a base set of common tool services, including the toolbar/side pane basic UI layout.\r\n * @param options The options for the tool.\r\n * @returns A token that can be used to dispose of the tool.\r\n */\r\nexport function MakeModularTool(options: ModularToolOptions) {\r\n const { namespace, containerElement, serviceDefinitions, themeMode, showThemeSelector = true, extensionFeeds = [], parentContainer, disableTeachingMoments = false } = options;\r\n\r\n const teachingMomentsContextValue = { disabled: disableTeachingMoments };\r\n\r\n // Create the settings store immediately as it will be exposed to services and through React context.\r\n const settingsStore = new SettingsStore(namespace);\r\n\r\n // If a theme mode is provided, just write the setting so it is the active theme.\r\n if (themeMode) {\r\n settingsStore.writeSetting(ThemeModeSettingDescriptor, themeMode);\r\n }\r\n\r\n // This deferred resolves once the React effect cleanup (which disposes the ServiceContainer) is complete.\r\n const disposeDeferred = new Deferred<void>();\r\n\r\n const modularToolRootComponent: FunctionComponent = () => {\r\n const classes = useStyles();\r\n const [requiredExtensions, setRequiredExtensions] = useState<string[]>();\r\n const [requiredExtensionsDeferred, setRequiredExtensionsDeferred] = useState<Deferred<boolean>>();\r\n const [extensionInstallError, setExtensionInstallError] = useState<InstallFailedInfo>();\r\n\r\n const [toastHandle, setToastHandle] = useState<ToastHandle | null>(null);\r\n const [toastQueue, setToastQueue] = useState<{ message: string; options?: ToastOptions }[]>([]);\r\n\r\n useEffect(() => {\r\n if (toastHandle && toastQueue.length > 0) {\r\n for (const { message, options } of toastQueue) {\r\n toastHandle.showToast(message, options);\r\n }\r\n setToastQueue([]);\r\n }\r\n }, [toastHandle, toastQueue]);\r\n\r\n // Queue of dialogs to display. We show one at a time (the one at the head of the queue).\r\n const [dialogQueue, dispatchDialogQueue] = useReducer((state: readonly DialogOptions[], action: DialogQueueAction): readonly DialogOptions[] => {\r\n switch (action.type) {\r\n case \"enqueue\":\r\n return [...state, action.options];\r\n case \"dequeue\":\r\n return state.slice(1);\r\n }\r\n }, []);\r\n\r\n const showDialog = useCallback((dialogOptions: DialogOptions) => {\r\n dispatchDialogQueue({ type: \"enqueue\", options: dialogOptions });\r\n }, []);\r\n\r\n const onDismissDialog = useCallback(() => {\r\n dispatchDialogQueue({ type: \"dequeue\" });\r\n }, []);\r\n\r\n const [rootComponentService, setRootComponentService] = useState<IRootComponentService>();\r\n\r\n const [contexts, updateContexts] = useReducer(\r\n (state: ReactContextEntry[], action: ReactContextAction): ReactContextEntry[] => {\r\n switch (action.type) {\r\n case \"add\":\r\n return [...state, action.entry].sort((a, b) => a.order - b.order);\r\n case \"remove\":\r\n return state.filter((e) => e.provider !== action.provider);\r\n case \"update\":\r\n return state.map((e) => (e.provider === action.provider ? { ...e, value: action.value } : e));\r\n }\r\n },\r\n [\r\n // Static contexts seeded into the wrapper so they don't add JSX nesting below.\r\n // Negative orders keep them as the outermost providers (lowest order = outermost via reduceRight).\r\n { provider: TeachingMomentsContext.Provider, value: teachingMomentsContextValue, order: -2 },\r\n { provider: SettingsStoreContext.Provider, value: settingsStore, order: -1 },\r\n { provider: ExtensionManagerContext.Provider, value: undefined, order: 0 },\r\n ]\r\n );\r\n\r\n // This is the main async initialization.\r\n useEffect(() => {\r\n const initializeExtensionManagerAsync = async () => {\r\n const serviceContainer = new ServiceContainer(\"ModularToolContainer\", parentContainer);\r\n\r\n // Expose the settings store as a service so other services can read/write settings.\r\n serviceContainer.addService<[ISettingsStore], []>({\r\n friendlyName: \"Settings Store\",\r\n produces: [SettingsStoreIdentity],\r\n factory: () => settingsStore,\r\n });\r\n\r\n // Expose the react context service so other services can add React context providers.\r\n serviceContainer.addService<[IReactContextService], []>({\r\n friendlyName: \"React Context Service\",\r\n produces: [ReactContextServiceIdentity],\r\n factory: (): IReactContextService => ({\r\n addContext<T>(provider: Context<T>[\"Provider\"], initialValue: T, options?: { order?: number }): ReactContextHandle<T> {\r\n updateContexts({ type: \"add\", entry: { provider: provider, value: initialValue, order: options?.order ?? 0 } });\r\n return {\r\n updateValue: (newValue: T) => {\r\n updateContexts({ type: \"update\", provider: provider, value: newValue });\r\n },\r\n dispose: () => {\r\n updateContexts({ type: \"remove\", provider: provider });\r\n },\r\n };\r\n },\r\n }),\r\n });\r\n\r\n // Expose the toast service so non-React code (e.g. Observable callbacks) can show toasts.\r\n serviceContainer.addService<[IToastService], []>({\r\n friendlyName: \"Toast Service\",\r\n produces: [ToastServiceIdentity],\r\n factory: (): IToastService => ({\r\n showToast: (message, options) => {\r\n setToastQueue((prev) => [...prev, { message, options }]);\r\n },\r\n }),\r\n });\r\n\r\n // Expose the dialog service so non-React code (e.g. Observable callbacks) can show dialogs.\r\n serviceContainer.addService<[IDialogService], []>({\r\n friendlyName: \"Dialog Service\",\r\n produces: [DialogServiceIdentity],\r\n factory: (): IDialogService => ({ showDialog }),\r\n });\r\n\r\n // Register the shell service (top level toolbar/side pane UI layout).\r\n serviceContainer.addService(MakeShellServiceDefinition(options));\r\n\r\n // Register a service that simply consumes the services we need before first render.\r\n serviceContainer.addService<[], [IRootComponentService]>({\r\n friendlyName: \"Service Bootstrapper\",\r\n consumes: [RootComponentServiceIdentity],\r\n factory: (rootComponent) => {\r\n // Use function syntax for the state setter since the root component may be a function component.\r\n setRootComponentService(() => rootComponent);\r\n return {\r\n dispose: () => setRootComponentService(undefined),\r\n };\r\n },\r\n });\r\n\r\n // Register the theme service (exposes the current theme to other services).\r\n serviceContainer.addService(ThemeServiceDefinition);\r\n\r\n // Register the theme selector service (for selecting the theme) if theming is configured.\r\n if (showThemeSelector) {\r\n serviceContainer.addService(ThemeSelectorServiceDefinition);\r\n }\r\n\r\n // Register the extension list service (for browsing/installing extensions) if extension feeds are provided.\r\n if (extensionFeeds.length > 0) {\r\n const { ExtensionListServiceDefinition } = await import(\"./services/extensionsListService\");\r\n serviceContainer.addService(ExtensionListServiceDefinition);\r\n }\r\n\r\n // Register all external services (that make up a unique tool).\r\n serviceContainer.addServices(...serviceDefinitions);\r\n\r\n // Create the extension manager, passing along the registry for runtime changes to the registered services.\r\n const extensionManager = await ExtensionManager.CreateAsync(namespace, serviceContainer, extensionFeeds, setExtensionInstallError);\r\n\r\n // Check query params for required extensions. This lets users share links with sets of extensions.\r\n const queryParams = new URLSearchParams(window.location.search);\r\n const requiredExtensions = queryParams.getAll(\"babylon.requiredExtension\");\r\n const uninstalledExtensions: IExtension[] = [];\r\n for (const requiredExtension of requiredExtensions) {\r\n // These could possibly be parallelized to speed things up, but it's more complex so let's wait and see if we need it.\r\n // eslint-disable-next-line no-await-in-loop\r\n const query = await extensionManager.queryExtensionsAsync(requiredExtension);\r\n // eslint-disable-next-line no-await-in-loop\r\n const extensions = await query.getExtensionsAsync(0, query.totalCount);\r\n for (const extension of extensions) {\r\n if (!extension.isInstalled) {\r\n uninstalledExtensions.push(extension);\r\n }\r\n }\r\n }\r\n\r\n // Check if any required extensions are uninstalled or disabled. If so, show a dialog to the user.\r\n if (uninstalledExtensions.length > 0) {\r\n setRequiredExtensions(uninstalledExtensions.map((extension) => extension.metadata.name));\r\n const deferred = new Deferred<boolean>();\r\n setRequiredExtensionsDeferred(deferred);\r\n if (await deferred.promise) {\r\n for (const extension of uninstalledExtensions) {\r\n // This could possibly be parallelized to speed things up, but it's more complex so let's wait and see if we need it.\r\n // eslint-disable-next-line no-await-in-loop\r\n await extension.installAsync();\r\n }\r\n }\r\n }\r\n\r\n // Set the contexts.\r\n updateContexts({ type: \"update\", provider: ExtensionManagerContext.Provider, value: { extensionManager } });\r\n\r\n return () => {\r\n extensionManager.dispose();\r\n serviceContainer.dispose();\r\n serviceContainer.dispose();\r\n };\r\n };\r\n\r\n const disposePromise = initializeExtensionManagerAsync();\r\n\r\n return () => {\r\n disposePromise\r\n // eslint-disable-next-line github/no-then\r\n .then((dispose) => dispose())\r\n // eslint-disable-next-line github/no-then\r\n .catch((error) => {\r\n Logger.Error(`Failed to dispose of the modular tool: ${error}`);\r\n })\r\n .finally(() => disposeDeferred.resolve());\r\n };\r\n }, []);\r\n\r\n const onAcceptRequiredExtensions = useCallback(() => {\r\n setRequiredExtensions(undefined);\r\n requiredExtensionsDeferred?.resolve(true);\r\n }, [setRequiredExtensions, requiredExtensionsDeferred]);\r\n\r\n const onRejectRequiredExtensions = useCallback(() => {\r\n setRequiredExtensions(undefined);\r\n requiredExtensionsDeferred?.resolve(false);\r\n }, [setRequiredExtensions, requiredExtensionsDeferred]);\r\n\r\n const onAcknowledgedExtensionInstallError = useCallback(() => {\r\n setExtensionInstallError(undefined);\r\n }, [setExtensionInstallError]);\r\n\r\n // The dialog at the head of the queue, if any, is the one currently being displayed.\r\n const currentDialog = dialogQueue[0];\r\n const currentDialogIcon = (() => {\r\n switch (currentDialog?.intent) {\r\n case \"success\":\r\n return <CheckmarkCircleRegular className={classes.dialogIconSuccess} />;\r\n case \"error\":\r\n return <ErrorCircleRegular className={classes.dialogIconError} />;\r\n case \"warning\":\r\n return <WarningRegular className={classes.dialogIconWarning} />;\r\n case \"info\":\r\n case undefined:\r\n return <InfoRegular className={classes.dialogIconInfo} />;\r\n }\r\n })();\r\n\r\n // Show a spinner until a main view has been set.\r\n if (!rootComponentService) {\r\n return (\r\n <ReactContextsWrapper contexts={contexts}>\r\n <Theme className={classes.app} targetDocument={targetDocument}>\r\n <Spinner className={classes.spinner} />\r\n </Theme>\r\n </ReactContextsWrapper>\r\n );\r\n } else {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n const Content: ComponentType = rootComponentService.rootComponent;\r\n\r\n return (\r\n <ReactContextsWrapper contexts={contexts}>\r\n <Theme className={classes.app} targetDocument={targetDocument}>\r\n <ToastProvider imperativeRef={setToastHandle}>\r\n <Dialog open={!!requiredExtensions} modalType=\"alert\">\r\n <DialogSurface>\r\n <DialogBody>\r\n <DialogTitle>Required Extensions</DialogTitle>\r\n <DialogContent>\r\n Opening this URL requires the following extensions to be installed and enabled:\r\n <ul>\r\n {requiredExtensions?.map((name) => (\r\n <li key={name}>{name}</li>\r\n ))}\r\n </ul>\r\n </DialogContent>\r\n <DialogActions>\r\n <Button appearance=\"primary\" onClick={onAcceptRequiredExtensions}>\r\n Install & Enable\r\n </Button>\r\n <Button appearance=\"secondary\" onClick={onRejectRequiredExtensions}>\r\n No Thanks\r\n </Button>\r\n </DialogActions>\r\n </DialogBody>\r\n </DialogSurface>\r\n </Dialog>\r\n <Dialog open={!!extensionInstallError} modalType=\"alert\">\r\n <DialogSurface>\r\n <DialogBody>\r\n <DialogTitle>\r\n <div className={classes.extensionErrorTitleDiv}>\r\n Extension Install Error\r\n <ErrorCircleRegular className={classes.extensionErrorIcon} />\r\n </div>\r\n </DialogTitle>\r\n <DialogContent>\r\n <List>\r\n <ListItem>\r\n <Body1>{`Extension \"${extensionInstallError?.extension.name}\" failed to install and was removed.`}</Body1>\r\n </ListItem>\r\n <ListItem>\r\n <Body1>{`${extensionInstallError?.error}`}</Body1>\r\n </ListItem>\r\n </List>\r\n </DialogContent>\r\n <DialogActions>\r\n <Button appearance=\"primary\" onClick={onAcknowledgedExtensionInstallError}>\r\n Close\r\n </Button>\r\n </DialogActions>\r\n </DialogBody>\r\n </DialogSurface>\r\n </Dialog>\r\n <Dialog open={!!currentDialog} modalType=\"alert\">\r\n <DialogSurface>\r\n <DialogBody>\r\n <DialogTitle>\r\n <div className={classes.dialogTitle}>\r\n {currentDialogIcon}\r\n {currentDialog?.title}\r\n </div>\r\n </DialogTitle>\r\n {currentDialog?.content && <DialogContent>{currentDialog.content}</DialogContent>}\r\n <DialogActions>\r\n <Button appearance=\"primary\" onClick={onDismissDialog}>\r\n OK\r\n </Button>\r\n </DialogActions>\r\n </DialogBody>\r\n </DialogSurface>\r\n </Dialog>\r\n <Suspense fallback={<Spinner className={classes.spinner} />}>\r\n <DialogContext.Provider value={{ showDialog }}>\r\n <Content />\r\n </DialogContext.Provider>\r\n </Suspense>\r\n </ToastProvider>\r\n </Theme>\r\n </ReactContextsWrapper>\r\n );\r\n }\r\n };\r\n\r\n // Derive the target document from the container element. When the container is in a popup\r\n // window (or other document distinct from the main one), this is what makes Fluent inject\r\n // styles and render portals into the correct document.\r\n const containerOwnerDocument = containerElement.ownerDocument;\r\n const targetDocument = containerOwnerDocument && containerOwnerDocument !== document ? containerOwnerDocument : undefined;\r\n\r\n // Set the container element to be a flex container so that the tool can be displayed properly.\r\n const originalContainerElementDisplay = containerElement.style.display;\r\n containerElement.style.display = \"flex\";\r\n\r\n // Create and render the react root component.\r\n const reactRoot = createRoot(containerElement);\r\n reactRoot.render(createElement(modularToolRootComponent));\r\n\r\n let disposed = false;\r\n return {\r\n // eslint-disable-next-line @typescript-eslint/promise-function-async\r\n dispose: () => {\r\n // Unmount and restore the original container element display.\r\n if (!disposed) {\r\n disposed = true;\r\n reactRoot.unmount();\r\n containerElement.style.display = originalContainerElementDisplay;\r\n }\r\n // The promise resolves once the React effect cleanup\r\n // (which disposes the ServiceContainer) has completed.\r\n return disposeDeferred.promise;\r\n },\r\n };\r\n}\r\n"]}
1
+ {"version":3,"file":"modularTool.js","sourceRoot":"","sources":["../../../../dev/sharedUiComponents/src/modularTool/modularTool.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\r\n type ComponentType,\r\n type Context,\r\n type FunctionComponent,\r\n type PropsWithChildren,\r\n type ReactNode,\r\n createElement,\r\n Suspense,\r\n useCallback,\r\n useEffect,\r\n useReducer,\r\n useState,\r\n} from \"react\";\r\n\r\nimport { type IExtensionFeed } from \"./extensibility/extensionFeed\";\r\nimport { type IExtension, type InstallFailedInfo, ExtensionManager } from \"./extensibility/extensionManager\";\r\nimport { type WeaklyTypedServiceDefinition, ServiceContainer } from \"./modularity/serviceContainer\";\r\nimport { type ISettingsStore, SettingsStore, SettingsStoreIdentity } from \"./services/settingsStore\";\r\nimport { type IRootComponentService, type ShellServiceOptions, MakeShellServiceDefinition, RootComponentServiceIdentity } from \"./services/shellService\";\r\nimport { type ThemeMode, ThemeModeSettingDescriptor, ThemeServiceDefinition } from \"./services/themeService\";\r\n\r\nimport {\r\n Body1,\r\n Button,\r\n Dialog,\r\n DialogActions,\r\n DialogBody,\r\n DialogContent,\r\n DialogSurface,\r\n DialogTitle,\r\n List,\r\n ListItem,\r\n makeStyles,\r\n Spinner,\r\n tokens,\r\n} from \"@fluentui/react-components\";\r\nimport { CheckmarkCircleRegular, ErrorCircleRegular, InfoRegular, WarningRegular } from \"@fluentui/react-icons\";\r\nimport { createRoot } from \"react-dom/client\";\r\n\r\nimport { Deferred } from \"core/Misc/deferred\";\r\nimport { Logger } from \"core/Misc/logger\";\r\nimport { type ToastHandle, type ToastOptions, ToastProvider } from \"shared-ui-components/fluent/primitives/toast\";\r\nimport { type DialogOptions, type IDialogService, DialogServiceIdentity } from \"./services/dialogService\";\r\nimport { type IToastService, ToastServiceIdentity } from \"./services/toastService\";\r\nimport { Theme } from \"./components/theme\";\r\nimport { DialogContext } from \"./contexts/dialogContext\";\r\nimport { ExtensionManagerContext } from \"./contexts/extensionManagerContext\";\r\nimport { SettingsStoreContext } from \"./contexts/settingsContext\";\r\nimport { TeachingMomentsContext } from \"./contexts/teachingMomentsContext\";\r\nimport { type IReactContextService, type ReactContextHandle, ReactContextServiceIdentity } from \"./services/reactContextService\";\r\nimport { ThemeSelectorServiceDefinition } from \"./services/themeSelectorService\";\r\n\r\nconst useStyles = makeStyles({\r\n app: {\r\n colorScheme: \"light dark\",\r\n flexGrow: 1,\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n backgroundColor: tokens.colorTransparentBackground,\r\n },\r\n spinner: {\r\n flexGrow: 1,\r\n animationDuration: \"1s\",\r\n animationName: {\r\n from: { opacity: 0 },\r\n to: { opacity: 1 },\r\n },\r\n },\r\n extensionErrorTitleDiv: {\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n alignItems: \"center\",\r\n gap: tokens.spacingHorizontalS,\r\n },\r\n extensionErrorIcon: {\r\n color: tokens.colorPaletteRedForeground1,\r\n },\r\n dialogTitle: {\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n alignItems: \"center\",\r\n gap: tokens.spacingHorizontalS,\r\n },\r\n dialogIconSuccess: {\r\n color: tokens.colorStatusSuccessForeground1,\r\n },\r\n dialogIconError: {\r\n color: tokens.colorStatusDangerForeground1,\r\n },\r\n dialogIconWarning: {\r\n color: tokens.colorStatusWarningForeground1,\r\n },\r\n dialogIconInfo: {\r\n color: tokens.colorBrandForeground1,\r\n },\r\n});\r\n\r\ntype ReactContextEntry = {\r\n provider: Context<any>[\"Provider\"];\r\n value: unknown;\r\n order: number;\r\n};\r\n\r\ntype ReactContextAction =\r\n { type: \"add\"; entry: ReactContextEntry } | { type: \"remove\"; provider: Context<any>[\"Provider\"] } | { type: \"update\"; provider: Context<any>[\"Provider\"]; value: unknown };\r\n\r\ntype DialogQueueAction = { type: \"enqueue\"; options: DialogOptions } | { type: \"dequeue\" };\r\n\r\nconst ReactContextsWrapper: FunctionComponent<PropsWithChildren<{ contexts: readonly Readonly<ReactContextEntry>[] }>> = ({ contexts, children }) => {\r\n return <>{contexts.reduceRight<ReactNode>((acc, entry) => createElement(entry.provider, { value: entry.value }, acc), children)}</>;\r\n};\r\n\r\nexport type ModularToolOptions = {\r\n /**\r\n * The namespace for the tool, used for scoping persisted settings and other storage.\r\n */\r\n namespace: string;\r\n\r\n /**\r\n * The container element where the tool will be rendered.\r\n */\r\n containerElement: HTMLElement;\r\n\r\n /**\r\n * The service definitions to be registered with the tool.\r\n */\r\n serviceDefinitions: readonly WeaklyTypedServiceDefinition[];\r\n\r\n /**\r\n * The theme mode to use. If not specified, the default is \"system\", which uses the system/browser preference, and the last used mode is persisted.\r\n */\r\n themeMode?: ThemeMode;\r\n\r\n /**\r\n * Whether to show the theme selector in the toolbar. Default is true.\r\n */\r\n showThemeSelector?: boolean;\r\n\r\n /**\r\n * The extension feeds that provide optional extensions the user can install.\r\n */\r\n extensionFeeds?: readonly IExtensionFeed[];\r\n\r\n /**\r\n * An optional parent ServiceContainer. Dependencies not found in the tool's own container\r\n * will be resolved from this parent.\r\n */\r\n parentContainer?: ServiceContainer;\r\n\r\n /**\r\n * When true, all teaching moments are disabled and will not be shown.\r\n */\r\n disableTeachingMoments?: boolean;\r\n} & ShellServiceOptions;\r\n\r\n/**\r\n * Creates a modular tool with a base set of common tool services, including the toolbar/side pane basic UI layout.\r\n * @param options The options for the tool.\r\n * @returns A token that can be used to dispose of the tool.\r\n */\r\nexport function MakeModularTool(options: ModularToolOptions) {\r\n const { namespace, containerElement, serviceDefinitions, themeMode, showThemeSelector = true, extensionFeeds = [], parentContainer, disableTeachingMoments = false } = options;\r\n\r\n const teachingMomentsContextValue = { disabled: disableTeachingMoments };\r\n\r\n // Create the settings store immediately as it will be exposed to services and through React context.\r\n const settingsStore = new SettingsStore(namespace);\r\n\r\n // If a theme mode is provided, just write the setting so it is the active theme.\r\n if (themeMode) {\r\n settingsStore.writeSetting(ThemeModeSettingDescriptor, themeMode);\r\n }\r\n\r\n // This deferred resolves once the React effect cleanup (which disposes the ServiceContainer) is complete.\r\n const disposeDeferred = new Deferred<void>();\r\n\r\n const modularToolRootComponent: FunctionComponent = () => {\r\n const classes = useStyles();\r\n const [requiredExtensions, setRequiredExtensions] = useState<string[]>();\r\n const [requiredExtensionsDeferred, setRequiredExtensionsDeferred] = useState<Deferred<boolean>>();\r\n const [extensionInstallError, setExtensionInstallError] = useState<InstallFailedInfo>();\r\n\r\n const [toastHandle, setToastHandle] = useState<ToastHandle | null>(null);\r\n const [toastQueue, setToastQueue] = useState<{ message: string; options?: ToastOptions }[]>([]);\r\n\r\n useEffect(() => {\r\n if (toastHandle && toastQueue.length > 0) {\r\n for (const { message, options } of toastQueue) {\r\n toastHandle.showToast(message, options);\r\n }\r\n setToastQueue([]);\r\n }\r\n }, [toastHandle, toastQueue]);\r\n\r\n // Queue of dialogs to display. We show one at a time (the one at the head of the queue).\r\n const [dialogQueue, dispatchDialogQueue] = useReducer((state: readonly DialogOptions[], action: DialogQueueAction): readonly DialogOptions[] => {\r\n switch (action.type) {\r\n case \"enqueue\":\r\n return [...state, action.options];\r\n case \"dequeue\":\r\n return state.slice(1);\r\n }\r\n }, []);\r\n\r\n const showDialog = useCallback((dialogOptions: DialogOptions) => {\r\n dispatchDialogQueue({ type: \"enqueue\", options: dialogOptions });\r\n }, []);\r\n\r\n const onDismissDialog = useCallback(() => {\r\n dispatchDialogQueue({ type: \"dequeue\" });\r\n }, []);\r\n\r\n const [rootComponentService, setRootComponentService] = useState<IRootComponentService>();\r\n\r\n const [contexts, updateContexts] = useReducer(\r\n (state: ReactContextEntry[], action: ReactContextAction): ReactContextEntry[] => {\r\n switch (action.type) {\r\n case \"add\":\r\n return [...state, action.entry].sort((a, b) => a.order - b.order);\r\n case \"remove\":\r\n return state.filter((e) => e.provider !== action.provider);\r\n case \"update\":\r\n return state.map((e) => (e.provider === action.provider ? { ...e, value: action.value } : e));\r\n }\r\n },\r\n [\r\n // Static contexts seeded into the wrapper so they don't add JSX nesting below.\r\n // Negative orders keep them as the outermost providers (lowest order = outermost via reduceRight).\r\n { provider: TeachingMomentsContext.Provider, value: teachingMomentsContextValue, order: -2 },\r\n { provider: SettingsStoreContext.Provider, value: settingsStore, order: -1 },\r\n { provider: ExtensionManagerContext.Provider, value: undefined, order: 0 },\r\n ]\r\n );\r\n\r\n // This is the main async initialization.\r\n useEffect(() => {\r\n const initializeExtensionManagerAsync = async () => {\r\n const serviceContainer = new ServiceContainer(\"ModularToolContainer\", parentContainer);\r\n\r\n // Expose the settings store as a service so other services can read/write settings.\r\n serviceContainer.addService<[ISettingsStore], []>({\r\n friendlyName: \"Settings Store\",\r\n produces: [SettingsStoreIdentity],\r\n factory: () => settingsStore,\r\n });\r\n\r\n // Expose the react context service so other services can add React context providers.\r\n serviceContainer.addService<[IReactContextService], []>({\r\n friendlyName: \"React Context Service\",\r\n produces: [ReactContextServiceIdentity],\r\n factory: (): IReactContextService => ({\r\n addContext<T>(provider: Context<T>[\"Provider\"], initialValue: T, options?: { order?: number }): ReactContextHandle<T> {\r\n updateContexts({ type: \"add\", entry: { provider: provider, value: initialValue, order: options?.order ?? 0 } });\r\n return {\r\n updateValue: (newValue: T) => {\r\n updateContexts({ type: \"update\", provider: provider, value: newValue });\r\n },\r\n dispose: () => {\r\n updateContexts({ type: \"remove\", provider: provider });\r\n },\r\n };\r\n },\r\n }),\r\n });\r\n\r\n // Expose the toast service so non-React code (e.g. Observable callbacks) can show toasts.\r\n serviceContainer.addService<[IToastService], []>({\r\n friendlyName: \"Toast Service\",\r\n produces: [ToastServiceIdentity],\r\n factory: (): IToastService => ({\r\n showToast: (message, options) => {\r\n setToastQueue((prev) => [...prev, { message, options }]);\r\n },\r\n }),\r\n });\r\n\r\n // Expose the dialog service so non-React code (e.g. Observable callbacks) can show dialogs.\r\n serviceContainer.addService<[IDialogService], []>({\r\n friendlyName: \"Dialog Service\",\r\n produces: [DialogServiceIdentity],\r\n factory: (): IDialogService => ({ showDialog }),\r\n });\r\n\r\n // Register the shell service (top level toolbar/side pane UI layout).\r\n serviceContainer.addService(MakeShellServiceDefinition(options));\r\n\r\n // Register a service that simply consumes the services we need before first render.\r\n serviceContainer.addService<[], [IRootComponentService]>({\r\n friendlyName: \"Service Bootstrapper\",\r\n consumes: [RootComponentServiceIdentity],\r\n factory: (rootComponent) => {\r\n // Use function syntax for the state setter since the root component may be a function component.\r\n setRootComponentService(() => rootComponent);\r\n return {\r\n dispose: () => setRootComponentService(undefined),\r\n };\r\n },\r\n });\r\n\r\n // Register the theme service (exposes the current theme to other services).\r\n serviceContainer.addService(ThemeServiceDefinition);\r\n\r\n // Register the theme selector service (for selecting the theme) if theming is configured.\r\n if (showThemeSelector) {\r\n serviceContainer.addService(ThemeSelectorServiceDefinition);\r\n }\r\n\r\n // Register the extension list service (for browsing/installing extensions) if extension feeds are provided.\r\n if (extensionFeeds.length > 0) {\r\n const { ExtensionListServiceDefinition } = await import(\"./services/extensionsListService\");\r\n serviceContainer.addService(ExtensionListServiceDefinition);\r\n }\r\n\r\n // Register all external services (that make up a unique tool).\r\n serviceContainer.addServices(...serviceDefinitions);\r\n\r\n // Create the extension manager, passing along the registry for runtime changes to the registered services.\r\n const extensionManager = await ExtensionManager.CreateAsync(namespace, serviceContainer, extensionFeeds, setExtensionInstallError);\r\n\r\n // Check query params for required extensions. This lets users share links with sets of extensions.\r\n const queryParams = new URLSearchParams(window.location.search);\r\n const requiredExtensions = queryParams.getAll(\"babylon.requiredExtension\");\r\n const uninstalledExtensions: IExtension[] = [];\r\n for (const requiredExtension of requiredExtensions) {\r\n // These could possibly be parallelized to speed things up, but it's more complex so let's wait and see if we need it.\r\n // eslint-disable-next-line no-await-in-loop\r\n const query = await extensionManager.queryExtensionsAsync(requiredExtension);\r\n // eslint-disable-next-line no-await-in-loop\r\n const extensions = await query.getExtensionsAsync(0, query.totalCount);\r\n for (const extension of extensions) {\r\n if (!extension.isInstalled) {\r\n uninstalledExtensions.push(extension);\r\n }\r\n }\r\n }\r\n\r\n // Check if any required extensions are uninstalled or disabled. If so, show a dialog to the user.\r\n if (uninstalledExtensions.length > 0) {\r\n setRequiredExtensions(uninstalledExtensions.map((extension) => extension.metadata.name));\r\n const deferred = new Deferred<boolean>();\r\n setRequiredExtensionsDeferred(deferred);\r\n if (await deferred.promise) {\r\n for (const extension of uninstalledExtensions) {\r\n // This could possibly be parallelized to speed things up, but it's more complex so let's wait and see if we need it.\r\n // eslint-disable-next-line no-await-in-loop\r\n await extension.installAsync();\r\n }\r\n }\r\n }\r\n\r\n // Set the contexts.\r\n updateContexts({ type: \"update\", provider: ExtensionManagerContext.Provider, value: { extensionManager } });\r\n\r\n return () => {\r\n extensionManager.dispose();\r\n serviceContainer.dispose();\r\n serviceContainer.dispose();\r\n };\r\n };\r\n\r\n const disposePromise = initializeExtensionManagerAsync();\r\n\r\n return () => {\r\n disposePromise\r\n // eslint-disable-next-line github/no-then\r\n .then((dispose) => dispose())\r\n // eslint-disable-next-line github/no-then\r\n .catch((error) => {\r\n Logger.Error(`Failed to dispose of the modular tool: ${error}`);\r\n })\r\n .finally(() => disposeDeferred.resolve());\r\n };\r\n }, []);\r\n\r\n const onAcceptRequiredExtensions = useCallback(() => {\r\n setRequiredExtensions(undefined);\r\n requiredExtensionsDeferred?.resolve(true);\r\n }, [setRequiredExtensions, requiredExtensionsDeferred]);\r\n\r\n const onRejectRequiredExtensions = useCallback(() => {\r\n setRequiredExtensions(undefined);\r\n requiredExtensionsDeferred?.resolve(false);\r\n }, [setRequiredExtensions, requiredExtensionsDeferred]);\r\n\r\n const onAcknowledgedExtensionInstallError = useCallback(() => {\r\n setExtensionInstallError(undefined);\r\n }, [setExtensionInstallError]);\r\n\r\n // The dialog at the head of the queue, if any, is the one currently being displayed.\r\n const currentDialog = dialogQueue[0];\r\n const currentDialogIcon = (() => {\r\n switch (currentDialog?.intent) {\r\n case \"success\":\r\n return <CheckmarkCircleRegular className={classes.dialogIconSuccess} />;\r\n case \"error\":\r\n return <ErrorCircleRegular className={classes.dialogIconError} />;\r\n case \"warning\":\r\n return <WarningRegular className={classes.dialogIconWarning} />;\r\n case \"info\":\r\n case undefined:\r\n return <InfoRegular className={classes.dialogIconInfo} />;\r\n }\r\n })();\r\n\r\n // Show a spinner until a main view has been set.\r\n if (!rootComponentService) {\r\n return (\r\n <ReactContextsWrapper contexts={contexts}>\r\n <Theme className={classes.app} targetDocument={targetDocument}>\r\n <Spinner className={classes.spinner} />\r\n </Theme>\r\n </ReactContextsWrapper>\r\n );\r\n } else {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n const Content: ComponentType = rootComponentService.rootComponent;\r\n\r\n return (\r\n <ReactContextsWrapper contexts={contexts}>\r\n <Theme className={classes.app} targetDocument={targetDocument}>\r\n <ToastProvider imperativeRef={setToastHandle}>\r\n <Dialog open={!!requiredExtensions} modalType=\"alert\">\r\n <DialogSurface>\r\n <DialogBody>\r\n <DialogTitle>Required Extensions</DialogTitle>\r\n <DialogContent>\r\n Opening this URL requires the following extensions to be installed and enabled:\r\n <ul>\r\n {requiredExtensions?.map((name) => (\r\n <li key={name}>{name}</li>\r\n ))}\r\n </ul>\r\n </DialogContent>\r\n <DialogActions>\r\n <Button appearance=\"primary\" onClick={onAcceptRequiredExtensions}>\r\n Install & Enable\r\n </Button>\r\n <Button appearance=\"secondary\" onClick={onRejectRequiredExtensions}>\r\n No Thanks\r\n </Button>\r\n </DialogActions>\r\n </DialogBody>\r\n </DialogSurface>\r\n </Dialog>\r\n <Dialog open={!!extensionInstallError} modalType=\"alert\">\r\n <DialogSurface>\r\n <DialogBody>\r\n <DialogTitle>\r\n <div className={classes.extensionErrorTitleDiv}>\r\n Extension Install Error\r\n <ErrorCircleRegular className={classes.extensionErrorIcon} />\r\n </div>\r\n </DialogTitle>\r\n <DialogContent>\r\n <List>\r\n <ListItem>\r\n <Body1>{`Extension \"${extensionInstallError?.extension.name}\" failed to install and was removed.`}</Body1>\r\n </ListItem>\r\n <ListItem>\r\n <Body1>{`${extensionInstallError?.error}`}</Body1>\r\n </ListItem>\r\n </List>\r\n </DialogContent>\r\n <DialogActions>\r\n <Button appearance=\"primary\" onClick={onAcknowledgedExtensionInstallError}>\r\n Close\r\n </Button>\r\n </DialogActions>\r\n </DialogBody>\r\n </DialogSurface>\r\n </Dialog>\r\n <Dialog open={!!currentDialog} modalType=\"alert\">\r\n <DialogSurface>\r\n <DialogBody>\r\n <DialogTitle>\r\n <div className={classes.dialogTitle}>\r\n {currentDialogIcon}\r\n {currentDialog?.title}\r\n </div>\r\n </DialogTitle>\r\n {currentDialog?.content && <DialogContent>{currentDialog.content}</DialogContent>}\r\n <DialogActions>\r\n <Button appearance=\"primary\" onClick={onDismissDialog}>\r\n OK\r\n </Button>\r\n </DialogActions>\r\n </DialogBody>\r\n </DialogSurface>\r\n </Dialog>\r\n <Suspense fallback={<Spinner className={classes.spinner} />}>\r\n <DialogContext.Provider value={{ showDialog }}>\r\n <Content />\r\n </DialogContext.Provider>\r\n </Suspense>\r\n </ToastProvider>\r\n </Theme>\r\n </ReactContextsWrapper>\r\n );\r\n }\r\n };\r\n\r\n // Derive the target document from the container element. When the container is in a popup\r\n // window (or other document distinct from the main one), this is what makes Fluent inject\r\n // styles and render portals into the correct document.\r\n const containerOwnerDocument = containerElement.ownerDocument;\r\n const targetDocument = containerOwnerDocument && containerOwnerDocument !== document ? containerOwnerDocument : undefined;\r\n\r\n // Set the container element to be a flex container so that the tool can be displayed properly.\r\n const originalContainerElementDisplay = containerElement.style.display;\r\n containerElement.style.display = \"flex\";\r\n\r\n // Create and render the react root component.\r\n const reactRoot = createRoot(containerElement);\r\n reactRoot.render(createElement(modularToolRootComponent));\r\n\r\n let disposed = false;\r\n return {\r\n // eslint-disable-next-line @typescript-eslint/promise-function-async\r\n dispose: () => {\r\n // Unmount and restore the original container element display.\r\n if (!disposed) {\r\n disposed = true;\r\n reactRoot.unmount();\r\n containerElement.style.display = originalContainerElementDisplay;\r\n }\r\n // The promise resolves once the React effect cleanup\r\n // (which disposes the ServiceContainer) has completed.\r\n return disposeDeferred.promise;\r\n },\r\n };\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"graphFrame.js","sourceRoot":"","sources":["../../../../dev/sharedUiComponents/src/nodeGraphSystem/graphFrame.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport { type GraphNode } from \"./graphNode\";\r\nimport { type GraphCanvasComponent } from \"./graphCanvas\";\r\nimport { type Nullable } from \"core/types\";\r\nimport { type Observer, Observable } from \"core/Misc/observable\";\r\nimport { Color3 } from \"core/Maths/math.color\";\r\nimport { type NodePort } from \"./nodePort\";\r\nimport { FrameNodePort } from \"./frameNodePort\";\r\nimport { type NodeLink } from \"./nodeLink\";\r\nimport { type IFrameData } from \"./interfaces/nodeLocationInfo\";\r\nimport { StringTools } from \"../stringTools\";\r\nimport * as styles from \"./graphFrame.module.scss\";\r\nimport * as commonStyles from \"./common.module.scss\";\r\nimport { ClassNames } from \"../components/classNames\";\r\n\r\nimport { type ISelectionChangedOptions } from \"./interfaces/selectionChangedOptions\";\r\n\r\nenum ResizingDirection {\r\n Right,\r\n Left,\r\n Top,\r\n Bottom,\r\n TopRight,\r\n TopLeft,\r\n BottomRight,\r\n BottomLeft,\r\n}\r\n\r\nexport enum FramePortPosition {\r\n Top,\r\n Middle,\r\n Bottom,\r\n}\r\n\r\nexport class GraphFrame {\r\n private readonly _collapsedWidth = 200;\r\n private static _FrameCounter = 0;\r\n private static _FramePortCounter = 0;\r\n private _name: string;\r\n private _color: Color3;\r\n private _x = 0;\r\n private _y = 0;\r\n private _gridAlignedX = 0;\r\n private _gridAlignedY = 0;\r\n private _width: number;\r\n private _height: number;\r\n public element: HTMLDivElement;\r\n private _borderElement: HTMLDivElement;\r\n private _headerElement: HTMLDivElement;\r\n private _headerTextElement: HTMLDivElement;\r\n private _headerCollapseElement: HTMLDivElement;\r\n private _headerCloseElement: HTMLDivElement;\r\n private _commentsElement: HTMLDivElement;\r\n private _portContainer: HTMLDivElement;\r\n private _outputPortContainer: HTMLDivElement;\r\n private _inputPortContainer: HTMLDivElement;\r\n private _nodes: GraphNode[] = [];\r\n private _ownerCanvas: GraphCanvasComponent;\r\n private _mouseStartPointX: Nullable<number> = null;\r\n private _mouseStartPointY: Nullable<number> = null;\r\n private _onSelectionChangedObserver: Nullable<Observer<Nullable<ISelectionChangedOptions>>>;\r\n private _onGraphNodeRemovalObserver: Nullable<Observer<GraphNode>>;\r\n private _onExposePortOnFrameObserver: Nullable<Observer<GraphNode>>;\r\n private _onNodeLinkDisposedObservers: Nullable<Observer<NodeLink>>[] = [];\r\n private _isCollapsed = false;\r\n private _frameInPorts: FrameNodePort[] = [];\r\n private _frameOutPorts: FrameNodePort[] = [];\r\n private _controlledPorts: NodePort[] = []; // Ports on Nodes that are shown on outside of frame\r\n private _exposedInPorts: NodePort[] = [];\r\n private _exposedOutPorts: NodePort[] = [];\r\n private _id: number;\r\n private _comments: string;\r\n private _frameIsResizing: boolean;\r\n private _resizingDirection: Nullable<ResizingDirection>;\r\n private _minFrameHeight = 40;\r\n private _minFrameWidth = 220;\r\n private _mouseXLimit: Nullable<number>;\r\n\r\n public onExpandStateChanged = new Observable<GraphFrame>();\r\n\r\n private readonly _closeSVG = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 30 30\"><g id=\"Layer_2\" data-name=\"Layer 2\"><path d=\"M16,15l5.85,5.84-1,1L15,15.93,9.15,21.78l-1-1L14,15,8.19,9.12l1-1L15,14l5.84-5.84,1,1Z\"/></g></svg>`;\r\n private readonly _expandSVG = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 30 30\"><g id=\"Layer_2\" data-name=\"Layer 2\"><path d=\"M22.31,7.69V22.31H7.69V7.69ZM21.19,8.81H8.81V21.19H21.19Zm-6.75,6.75H11.06V14.44h3.38V11.06h1.12v3.38h3.38v1.12H15.56v3.38H14.44Z\"/></g></svg>`;\r\n private readonly _collapseSVG = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 30 30\"><g id=\"Layer_2\" data-name=\"Layer 2\"><path d=\"M22.31,7.69V22.31H7.69V7.69ZM21.19,8.81H8.81V21.19H21.19Zm-2.25,6.75H11.06V14.44h7.88Z\"/></g></svg>`;\r\n\r\n public get id() {\r\n return this._id;\r\n }\r\n\r\n public get isCollapsed() {\r\n return this._isCollapsed;\r\n }\r\n\r\n private _createInputPort(port: NodePort, node: GraphNode) {\r\n const localPort = FrameNodePort.CreateFrameNodePortElement(\r\n port.portData,\r\n node,\r\n this._inputPortContainer,\r\n null,\r\n this._ownerCanvas.stateManager,\r\n true,\r\n GraphFrame._FramePortCounter++,\r\n this.id\r\n );\r\n this._frameInPorts.push(localPort);\r\n\r\n port.delegatedPort = localPort;\r\n this._controlledPorts.push(port);\r\n\r\n port.exposedPortPosition = this._exposedInPorts.findIndex((nodePort) => nodePort === port);\r\n if (port.exposedPortPosition < 0) {\r\n this._exposedInPorts.push(port);\r\n port.exposedPortPosition = this._exposedInPorts.length - 1;\r\n }\r\n }\r\n\r\n // Mark ports with FramePortPosition for re-arrangement support\r\n private _markFramePortPositions() {\r\n // mark FrameInPorts\r\n if (this._frameInPorts.length == 2) {\r\n this._frameInPorts[0].framePortPosition = FramePortPosition.Top;\r\n this._frameInPorts[1].framePortPosition = FramePortPosition.Bottom;\r\n } else {\r\n for (let i = 0; i < this._frameInPorts.length; i++) {\r\n const port = this._frameInPorts[i];\r\n if (i === 0) {\r\n port.framePortPosition = FramePortPosition.Top;\r\n } else if (i === this._frameInPorts.length - 1) {\r\n port.framePortPosition = FramePortPosition.Bottom;\r\n } else {\r\n port.framePortPosition = FramePortPosition.Middle;\r\n }\r\n }\r\n }\r\n\r\n // mark FrameOutPorts\r\n if (this._frameOutPorts.length == 2) {\r\n this._frameOutPorts[0].framePortPosition = FramePortPosition.Top;\r\n this._frameOutPorts[1].framePortPosition = FramePortPosition.Bottom;\r\n } else {\r\n for (let i = 0; i < this._frameOutPorts.length; i++) {\r\n const port = this._frameOutPorts[i];\r\n if (i === 0) {\r\n port.framePortPosition = FramePortPosition.Top;\r\n } else if (i === this._frameInPorts.length - 1) {\r\n port.framePortPosition = FramePortPosition.Bottom;\r\n } else {\r\n port.framePortPosition = FramePortPosition.Middle;\r\n }\r\n }\r\n }\r\n }\r\n\r\n private _createFramePorts() {\r\n for (const node of this._nodes) {\r\n node.isVisible = false;\r\n }\r\n\r\n for (let i = 0; i < this._exposedOutPorts.length; ) {\r\n // Output\r\n const port = this._exposedOutPorts[i];\r\n if (port) {\r\n if (port.node === null || port.node.enclosingFrameId != this.id) {\r\n if (this._removePortFromExposedWithNode(port, this._exposedOutPorts)) {\r\n continue;\r\n }\r\n } else {\r\n if (!this._createOutputPorts(port, port.node) && this._removePortFromExposedWithNode(port, this._exposedOutPorts)) {\r\n continue;\r\n }\r\n }\r\n }\r\n ++i;\r\n }\r\n\r\n for (let i = 0; i < this._exposedInPorts.length; ) {\r\n // Input\r\n const port = this._exposedInPorts[i];\r\n if (!port || port.node === null || port.node.enclosingFrameId != this.id) {\r\n if (this._removePortFromExposedWithNode(port, this._exposedInPorts)) {\r\n continue;\r\n }\r\n } else {\r\n if (!this._createInputPorts(port, port.node) && this._removePortFromExposedWithNode(port, this._exposedInPorts)) {\r\n continue;\r\n }\r\n }\r\n ++i;\r\n }\r\n\r\n for (const node of this._nodes) {\r\n for (const port of node.outputPorts) {\r\n // Output\r\n port.exposedPortPosition = this._exposedOutPorts.findIndex((nodePort) => nodePort === port);\r\n if (port.exposedPortPosition < 0) {\r\n if (this._createOutputPorts(port, node)) {\r\n port.node.enclosingFrameId = this.id;\r\n this._exposedOutPorts.push(port);\r\n port.exposedPortPosition = this._exposedOutPorts.length - 1;\r\n }\r\n }\r\n }\r\n for (const port of node.inputPorts) {\r\n // Input\r\n port.exposedPortPosition = this._exposedInPorts.findIndex((nodePort) => nodePort === port);\r\n if (port.exposedPortPosition < 0) {\r\n this._createInputPorts(port, node);\r\n }\r\n }\r\n }\r\n }\r\n\r\n private _removePortFromExposedWithNode(port: NodePort, exposedPorts: NodePort[]) {\r\n const index = exposedPorts.findIndex((nodePort) => nodePort === port);\r\n if (index >= 0) {\r\n exposedPorts.splice(index, 1);\r\n if (port) {\r\n port.exposedPortPosition = -1;\r\n }\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n private _removePortFromExposedWithLink(nodeLink: NodeLink, exposedPorts: NodePort[]) {\r\n const aPort = exposedPorts.findIndex((nodePort) => nodePort === nodeLink.portA);\r\n const bPort = exposedPorts.findIndex((nodePort) => nodePort === nodeLink.portB);\r\n if (aPort >= 0) {\r\n if (!nodeLink.portA.exposedOnFrame) {\r\n exposedPorts.splice(aPort, 1);\r\n nodeLink.portA.exposedPortPosition = -1;\r\n return true;\r\n }\r\n } else if (bPort >= 0) {\r\n if (nodeLink.portB && !nodeLink.portB.exposedOnFrame) {\r\n exposedPorts.splice(bPort, 1);\r\n nodeLink.portB.exposedPortPosition = -1;\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n private _createInputPorts(port: NodePort, node: GraphNode) {\r\n if (port.portData.isConnected) {\r\n let portAdded = false;\r\n for (const link of node.links) {\r\n if (link.portB === port && this.nodes.indexOf(link.nodeA) === -1) {\r\n this._createInputPort(port, node);\r\n link.isVisible = true;\r\n portAdded = true;\r\n const onLinkDisposedObserver = link.onDisposedObservable.add((nodeLink: NodeLink) => {\r\n if (this._removePortFromExposedWithLink(nodeLink, this._exposedInPorts)) {\r\n this.redrawFramePorts();\r\n }\r\n });\r\n this._onNodeLinkDisposedObservers.push(onLinkDisposedObserver);\r\n }\r\n }\r\n if (portAdded) {\r\n return true;\r\n }\r\n } else if (port.exposedOnFrame) {\r\n this._createInputPort(port, node);\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n private _createOutputPorts(port: NodePort, node: GraphNode) {\r\n if (port.portData.hasEndpoints) {\r\n let portAdded = false;\r\n for (const link of node.links) {\r\n if (link.portA === port && this.nodes.indexOf(link.nodeB!) === -1) {\r\n let localPort: FrameNodePort;\r\n\r\n if (!portAdded) {\r\n portAdded = true;\r\n localPort = FrameNodePort.CreateFrameNodePortElement(\r\n port.portData,\r\n link.nodeA,\r\n this._outputPortContainer,\r\n null,\r\n this._ownerCanvas.stateManager,\r\n false,\r\n GraphFrame._FramePortCounter++,\r\n this.id\r\n );\r\n this._frameOutPorts.push(localPort);\r\n\r\n link.isVisible = true;\r\n\r\n const onLinkDisposedObserver = link.onDisposedObservable.add((nodeLink: NodeLink) => {\r\n if (this._removePortFromExposedWithLink(nodeLink, this._exposedOutPorts)) {\r\n this.redrawFramePorts();\r\n }\r\n });\r\n\r\n this._onNodeLinkDisposedObservers.push(onLinkDisposedObserver);\r\n } else if (this.nodes.indexOf(link.nodeB!) === -1) {\r\n link.isVisible = true;\r\n localPort = this.ports.filter((p) => p.portData === port.portData)[0];\r\n } else {\r\n localPort = this.ports.filter((p) => p.portData === port.portData)[0];\r\n }\r\n port.delegatedPort = localPort;\r\n this._controlledPorts.push(port);\r\n } else if (port.exposedPortPosition >= 0 && !portAdded) {\r\n const localPort = FrameNodePort.CreateFrameNodePortElement(\r\n port.portData,\r\n node,\r\n this._outputPortContainer,\r\n null,\r\n this._ownerCanvas.stateManager,\r\n false,\r\n GraphFrame._FramePortCounter++,\r\n this.id\r\n );\r\n this._frameOutPorts.push(localPort);\r\n port.delegatedPort = localPort;\r\n this._controlledPorts.push(port);\r\n portAdded = true;\r\n }\r\n }\r\n if (portAdded) {\r\n return true;\r\n }\r\n } else if (port.exposedOnFrame) {\r\n const localPort = FrameNodePort.CreateFrameNodePortElement(\r\n port.portData,\r\n node,\r\n this._outputPortContainer,\r\n null,\r\n this._ownerCanvas.stateManager,\r\n false,\r\n GraphFrame._FramePortCounter++,\r\n this.id\r\n );\r\n this._frameOutPorts.push(localPort);\r\n port.delegatedPort = localPort;\r\n this._controlledPorts.push(port);\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public redrawFramePorts() {\r\n if (!this.isCollapsed) {\r\n return;\r\n }\r\n\r\n this._outputPortContainer.innerHTML = \"\";\r\n this._inputPortContainer.innerHTML = \"\";\r\n this.ports.forEach((framePort: FrameNodePort) => {\r\n framePort.dispose();\r\n });\r\n\r\n this._controlledPorts.forEach((port) => {\r\n port.delegatedPort = null;\r\n port.refresh();\r\n });\r\n\r\n this._frameInPorts = [];\r\n this._frameOutPorts = [];\r\n this._controlledPorts = [];\r\n\r\n this._createFramePorts();\r\n this._markFramePortPositions();\r\n this.ports.forEach((framePort: FrameNodePort) => framePort.node._refreshLinks());\r\n }\r\n\r\n public set isCollapsed(value: boolean) {\r\n if (this._isCollapsed === value) {\r\n return;\r\n }\r\n\r\n this._isCollapsed = value;\r\n this._ownerCanvas._frameIsMoving = true;\r\n\r\n // Need to delegate the outside ports to the frame\r\n if (value) {\r\n // Exit focus mode when collapsing\r\n if (this._isFocused) {\r\n this.switchFocusMode();\r\n }\r\n\r\n this.element.classList.add(styles.collapsed);\r\n this.element.classList.remove(styles.expanded);\r\n this._headerElement.classList.add(styles.collapsedHeader);\r\n\r\n this._moveFrame((this.width - this._collapsedWidth) / 2, 0);\r\n\r\n this._createFramePorts();\r\n\r\n this._markFramePortPositions();\r\n } else {\r\n this.element.classList.add(styles.expanded);\r\n this.element.classList.remove(styles.collapsed);\r\n this._headerElement.classList.remove(styles.collapsedHeader);\r\n\r\n this._outputPortContainer.innerHTML = \"\";\r\n this._inputPortContainer.innerHTML = \"\";\r\n\r\n this._frameInPorts.forEach((p) => {\r\n p.dispose();\r\n });\r\n\r\n this._frameOutPorts.forEach((p) => {\r\n p.dispose();\r\n });\r\n\r\n this._controlledPorts.forEach((port) => {\r\n port.delegatedPort = null;\r\n port.refresh();\r\n });\r\n\r\n this._frameInPorts = [];\r\n this._frameOutPorts = [];\r\n this._controlledPorts = [];\r\n this._onNodeLinkDisposedObservers = [];\r\n\r\n for (const node of this._nodes) {\r\n node.isVisible = true;\r\n }\r\n\r\n this._moveFrame(-(this.width - this._collapsedWidth) / 2, 0);\r\n }\r\n\r\n this.cleanAccumulation();\r\n this._ownerCanvas._frameIsMoving = false;\r\n\r\n // UI\r\n if (this._isCollapsed) {\r\n this._headerCollapseElement.innerHTML = this._expandSVG;\r\n this._headerCollapseElement.title = \"Expand (Shift+click for focus mode)\";\r\n } else {\r\n this._headerCollapseElement.innerHTML = this._collapseSVG;\r\n this._headerCollapseElement.title = \"Collapse\";\r\n }\r\n\r\n this.onExpandStateChanged.notifyObservers(this);\r\n }\r\n\r\n public get nodes() {\r\n return this._nodes;\r\n }\r\n\r\n public get ports() {\r\n return this._frameInPorts.concat(this._frameOutPorts);\r\n }\r\n\r\n public get name() {\r\n return this._name;\r\n }\r\n\r\n public set name(value: string) {\r\n this._name = value;\r\n this._headerTextElement.innerHTML = value;\r\n }\r\n\r\n public get color() {\r\n return this._color;\r\n }\r\n\r\n public set color(value: Color3) {\r\n this._color = value;\r\n this._headerElement.style.background = `rgba(${value.r * 255}, ${value.g * 255}, ${value.b * 255}, 1)`;\r\n this._headerElement.style.borderColor = `rgba(${value.r * 255}, ${value.g * 255}, ${value.b * 255}, 1)`;\r\n this.element.style.background = `rgba(${value.r * 255}, ${value.g * 255}, ${value.b * 255}, 0.7)`;\r\n }\r\n\r\n public get x() {\r\n return this._x;\r\n }\r\n\r\n public set x(value: number) {\r\n if (this._x === value) {\r\n return;\r\n }\r\n this._x = value;\r\n\r\n this._gridAlignedX = this._ownerCanvas.getGridPosition(value);\r\n this.element.style.left = `${this._gridAlignedX}px`;\r\n }\r\n\r\n public get y() {\r\n return this._y;\r\n }\r\n\r\n public set y(value: number) {\r\n if (this._y === value) {\r\n return;\r\n }\r\n\r\n this._y = value;\r\n\r\n this._gridAlignedY = this._ownerCanvas.getGridPosition(value);\r\n this.element.style.top = `${this._gridAlignedY}px`;\r\n }\r\n\r\n public get width() {\r\n return this._width;\r\n }\r\n\r\n public set width(value: number) {\r\n if (this._width === value) {\r\n return;\r\n }\r\n const viableWidth = value > this._minFrameWidth ? value : this._minFrameWidth;\r\n this._width = viableWidth;\r\n\r\n const gridAlignedRight = this._ownerCanvas.getGridPositionCeil(viableWidth + this._gridAlignedX);\r\n\r\n this.element.style.width = `${gridAlignedRight - this._gridAlignedX}px`;\r\n }\r\n\r\n public get height() {\r\n return this._height;\r\n }\r\n\r\n public set height(value: number) {\r\n if (this._height === value) {\r\n return;\r\n }\r\n this._height = value;\r\n\r\n const gridAlignedBottom = this._ownerCanvas.getGridPositionCeil(value + this._gridAlignedY);\r\n\r\n this.element.style.height = `${gridAlignedBottom - this._gridAlignedY}px`;\r\n }\r\n\r\n public get comments(): string {\r\n return this._comments;\r\n }\r\n\r\n public set comments(comments: string) {\r\n if (comments && !this._comments && comments.length > 0) {\r\n this.element.style.gridTemplateRows = \"40px min-content 1fr\";\r\n this._borderElement.style.gridRow = \"1 / span 3\";\r\n this._portContainer.style.gridRow = \"3\";\r\n this._commentsElement.classList.add(\"has-comments\");\r\n } else if (!comments) {\r\n this.element.style.gridTemplateRows = \"40px calc(100% - 40px)\";\r\n this._borderElement.style.gridRow = \"1 / span 2\";\r\n this._portContainer.style.gridRow = \"2\";\r\n this._commentsElement.classList.remove(\"has-comments\");\r\n }\r\n\r\n if (comments === \"\" || (comments && comments.length >= 0)) {\r\n (this._commentsElement.children[0] as HTMLSpanElement).innerText = comments;\r\n }\r\n this.height = this._borderElement.offsetHeight;\r\n this._comments = comments;\r\n this._updateMinHeightWithComments();\r\n }\r\n\r\n public constructor(candidate: Nullable<HTMLDivElement>, canvas: GraphCanvasComponent, doNotCaptureNodes = false) {\r\n this._id = GraphFrame._FrameCounter++;\r\n\r\n this._ownerCanvas = canvas;\r\n const root = canvas.frameContainer;\r\n this.element = root.ownerDocument.createElement(\"div\");\r\n this.element.classList.add(commonStyles[\"frame-box\"]);\r\n root.appendChild(this.element);\r\n\r\n this._headerElement = root.ownerDocument.createElement(\"div\");\r\n this._headerElement.classList.add(styles[\"frame-box-header\"]);\r\n this._headerElement.addEventListener(\"dblclick\", () => {\r\n this.isCollapsed = !this.isCollapsed;\r\n });\r\n this.element.appendChild(this._headerElement);\r\n\r\n this._borderElement = root.ownerDocument.createElement(\"div\");\r\n this._borderElement.classList.add(styles[\"frame-box-border\"]);\r\n\r\n this.element.appendChild(this._borderElement);\r\n\r\n this.element.classList.add(styles.expanded);\r\n\r\n // add resizing side handles\r\n\r\n const rightHandle: HTMLDivElement = root.ownerDocument.createElement(\"div\");\r\n rightHandle.className = styles[\"right-handle\"];\r\n this.element.appendChild(rightHandle);\r\n rightHandle.addEventListener(\"pointerdown\", this._onRightHandlePointerDown);\r\n\r\n const leftHandle: HTMLDivElement = root.ownerDocument.createElement(\"div\");\r\n leftHandle.className = styles[\"left-handle\"];\r\n this.element.appendChild(leftHandle);\r\n leftHandle.addEventListener(\"pointerdown\", this._onLeftHandlePointerDown);\r\n\r\n const bottomHandle: HTMLDivElement = root.ownerDocument.createElement(\"div\");\r\n bottomHandle.className = styles[\"bottom-handle\"];\r\n this.element.appendChild(bottomHandle);\r\n bottomHandle.addEventListener(\"pointerdown\", this._onBottomHandlePointerDown);\r\n\r\n const topHandle: HTMLDivElement = root.ownerDocument.createElement(\"div\");\r\n topHandle.className = styles[\"top-handle\"];\r\n this.element.appendChild(topHandle);\r\n topHandle.addEventListener(\"pointerdown\", this._onTopHandlePointerDown);\r\n\r\n const topRightCornerHandle: HTMLDivElement = root.ownerDocument.createElement(\"div\");\r\n topRightCornerHandle.className = ClassNames({ \"right-handle\": true, \"top-right-corner-handle\": true }, styles);\r\n this.element.appendChild(topRightCornerHandle);\r\n topRightCornerHandle.addEventListener(\"pointerdown\", this._onTopRightHandlePointerDown);\r\n\r\n const bottomRightCornerHandle: HTMLDivElement = root.ownerDocument.createElement(\"div\");\r\n bottomRightCornerHandle.className = ClassNames({ \"right-handle\": true, \"bottom-right-corner-handle\": true }, styles);\r\n this.element.appendChild(bottomRightCornerHandle);\r\n bottomRightCornerHandle.addEventListener(\"pointerdown\", this._onBottomRightHandlePointerDown);\r\n\r\n const topLeftCornerHandle: HTMLDivElement = root.ownerDocument.createElement(\"div\");\r\n topLeftCornerHandle.className = ClassNames({ \"left-handle\": true, \"top-left-corner-handle\": true }, styles);\r\n this.element.appendChild(topLeftCornerHandle);\r\n topLeftCornerHandle.addEventListener(\"pointerdown\", this._onTopLeftHandlePointerDown);\r\n\r\n const bottomLeftCornerHandle: HTMLDivElement = root.ownerDocument.createElement(\"div\");\r\n bottomLeftCornerHandle.className = ClassNames({ \"left-handle\": true, \"bottom-left-corner-handle\": true }, styles);\r\n this.element.appendChild(bottomLeftCornerHandle);\r\n bottomLeftCornerHandle.addEventListener(\"pointerdown\", this._onBottomLeftHandlePointerDown);\r\n\r\n // add header elements\r\n\r\n this._headerTextElement = root.ownerDocument.createElement(\"div\");\r\n this._headerTextElement.classList.add(styles[\"frame-box-header-title\"]);\r\n this._headerElement.appendChild(this._headerTextElement);\r\n\r\n // Collapse\r\n this._headerCollapseElement = root.ownerDocument.createElement(\"div\");\r\n this._headerCollapseElement.classList.add(styles[\"frame-box-header-collapse\"]);\r\n this._headerCollapseElement.classList.add(styles[\"frame-box-header-button\"]);\r\n this._headerCollapseElement.title = \"Collapse\";\r\n this._headerCollapseElement.ondragstart = () => false;\r\n this._headerCollapseElement.addEventListener(\"pointerdown\", (evt) => {\r\n this._headerCollapseElement.classList.add(\"down\");\r\n evt.stopPropagation();\r\n });\r\n this._headerCollapseElement.addEventListener(\"pointerup\", (evt) => {\r\n evt.stopPropagation();\r\n this._headerCollapseElement.classList.remove(\"down\");\r\n if (evt.shiftKey) {\r\n // Shift+click toggles focus mode without changing collapse state\r\n if (this._isCollapsed) {\r\n this.isCollapsed = false;\r\n }\r\n this.switchFocusMode();\r\n } else {\r\n this.isCollapsed = !this.isCollapsed;\r\n }\r\n });\r\n this._headerCollapseElement.innerHTML = this._collapseSVG;\r\n this._headerElement.appendChild(this._headerCollapseElement);\r\n\r\n // Close\r\n this._headerCloseElement = root.ownerDocument.createElement(\"div\");\r\n this._headerCloseElement.classList.add(styles[\"frame-box-header-close\"]);\r\n this._headerCloseElement.classList.add(styles[\"frame-box-header-button\"]);\r\n this._headerCloseElement.title = \"Close\";\r\n this._headerCloseElement.ondragstart = () => false;\r\n this._headerCloseElement.addEventListener(\"pointerdown\", (evt) => {\r\n evt.stopPropagation();\r\n });\r\n this._headerCloseElement.addEventListener(\"pointerup\", (evt) => {\r\n evt.stopPropagation();\r\n this.dispose();\r\n });\r\n this._headerCloseElement.innerHTML = this._closeSVG;\r\n this._headerElement.appendChild(this._headerCloseElement);\r\n\r\n this._portContainer = root.ownerDocument.createElement(\"div\");\r\n this._portContainer.classList.add(styles[\"port-container\"]);\r\n this.element.appendChild(this._portContainer);\r\n\r\n this._outputPortContainer = root.ownerDocument.createElement(\"div\");\r\n this._outputPortContainer.classList.add(commonStyles[\"outputsContainer\"]);\r\n this._portContainer.appendChild(this._outputPortContainer);\r\n\r\n this._inputPortContainer = root.ownerDocument.createElement(\"div\");\r\n this._inputPortContainer.classList.add(commonStyles[\"inputsContainer\"], commonStyles[\"inputsContainerUp\"]);\r\n this._portContainer.appendChild(this._inputPortContainer);\r\n\r\n this.name = \"Frame\";\r\n this.color = Color3.FromInts(72, 72, 72);\r\n\r\n if (candidate) {\r\n this.x = parseFloat(candidate.style.left.replace(\"px\", \"\"));\r\n this.y = parseFloat(candidate.style.top.replace(\"px\", \"\"));\r\n this.width = parseFloat(candidate.style.width.replace(\"px\", \"\"));\r\n this.height = parseFloat(candidate.style.height.replace(\"px\", \"\"));\r\n\r\n this.cleanAccumulation();\r\n }\r\n\r\n this._headerTextElement.addEventListener(\"pointerdown\", (evt) => this._onDown(evt));\r\n this._headerTextElement.addEventListener(\"pointerup\", (evt) => this._onUp(evt));\r\n this._headerTextElement.addEventListener(\"pointermove\", (evt) => this._onMove(evt));\r\n\r\n this._onSelectionChangedObserver = canvas.stateManager.onSelectionChangedObservable.add(() => {\r\n if (this._ownerCanvas.selectedFrames.indexOf(this) !== -1) {\r\n this._borderElement.classList.add(styles[\"selected\"]);\r\n } else {\r\n this._borderElement.classList.remove(styles[\"selected\"]);\r\n }\r\n });\r\n\r\n canvas.stateManager.onSelectionBoxMoved.add((rect1) => {\r\n const rect2 = this.element.getBoundingClientRect();\r\n const overlap = !(rect1.right < rect2.left || rect1.left > rect2.right || rect1.bottom < rect2.top || rect1.top > rect2.bottom);\r\n if (overlap) {\r\n canvas.stateManager.onSelectionChangedObservable.notifyObservers({ selection: this, forceKeepSelection: true, marqueeSelection: true });\r\n }\r\n });\r\n\r\n this._onGraphNodeRemovalObserver = canvas.stateManager.onGraphNodeRemovalObservable.add((node: GraphNode) => {\r\n // remove node from this._nodes\r\n const index = this._nodes.indexOf(node);\r\n if (index === -1) {\r\n return;\r\n } else {\r\n node.enclosingFrameId = -1;\r\n this._nodes.splice(index, 1);\r\n }\r\n });\r\n\r\n this._onExposePortOnFrameObserver = canvas.stateManager.onExposePortOnFrameObservable.add((node: GraphNode) => {\r\n if (this.nodes.indexOf(node) === -1) {\r\n return;\r\n }\r\n this.redrawFramePorts();\r\n });\r\n\r\n this._commentsElement = document.createElement(\"div\");\r\n this._commentsElement.className = styles[\"frame-comments\"];\r\n this._commentsElement.style.color = \"white\";\r\n this._commentsElement.style.fontSize = \"16px\";\r\n const commentSpan = document.createElement(\"span\");\r\n commentSpan.className = styles[\"frame-comment-span\"];\r\n this._commentsElement.appendChild(commentSpan);\r\n\r\n this.element.appendChild(this._commentsElement);\r\n\r\n // Get nodes\r\n if (!doNotCaptureNodes) {\r\n this.refresh();\r\n }\r\n }\r\n\r\n private _isFocused = false;\r\n /**\r\n * Enter/leave focus mode\r\n */\r\n public switchFocusMode() {\r\n if (this._isFocused) {\r\n this._isFocused = false;\r\n for (const node of this._ownerCanvas.nodes) {\r\n if (this._nodes.indexOf(node) === -1) {\r\n node.rootElement.style.transition = \"\";\r\n node.rootElement.style.opacity = \"\";\r\n node.rootElement.style.pointerEvents = \"\";\r\n }\r\n }\r\n for (const link of this._ownerCanvas.links) {\r\n link.path.style.transition = \"\";\r\n link.path.style.opacity = \"\";\r\n link.selectionPath.style.pointerEvents = \"\";\r\n }\r\n for (const frame of this._ownerCanvas.frames) {\r\n if (frame !== this) {\r\n frame.element.style.transition = \"\";\r\n frame.element.style.opacity = \"\";\r\n frame.element.style.pointerEvents = \"\";\r\n }\r\n }\r\n return;\r\n }\r\n this._isFocused = true;\r\n\r\n for (const node of this._ownerCanvas.nodes) {\r\n if (this._nodes.indexOf(node) === -1) {\r\n node.rootElement.style.transition = \"opacity 0.5s\";\r\n node.rootElement.style.opacity = \"0.05\";\r\n node.rootElement.style.pointerEvents = \"none\";\r\n }\r\n }\r\n for (const link of this._ownerCanvas.links) {\r\n if (this._nodes.indexOf(link.nodeA) === -1 || this._nodes.indexOf(link.nodeB!) === -1) {\r\n link.path.style.transition = \"opacity 0.5s\";\r\n link.path.style.opacity = \"0.3\";\r\n link.selectionPath.style.pointerEvents = \"none\";\r\n }\r\n if (this._nodes.indexOf(link.nodeA) === -1 && this._nodes.indexOf(link.nodeB!) === -1) {\r\n link.path.style.transition = \"opacity 0.5s\";\r\n link.path.style.opacity = \"0.05\";\r\n link.selectionPath.style.pointerEvents = \"none\";\r\n }\r\n }\r\n\r\n for (const frame of this._ownerCanvas.frames) {\r\n if (frame !== this) {\r\n frame.element.style.transition = \"opacity 0.5s\";\r\n frame.element.style.opacity = \"0.05\";\r\n frame.element.style.pointerEvents = \"none\";\r\n }\r\n }\r\n }\r\n\r\n public refresh() {\r\n if (this._isFocused) {\r\n return;\r\n }\r\n this._nodes = [];\r\n this._ownerCanvas.stateManager.onFrameCreatedObservable.notifyObservers(this);\r\n }\r\n\r\n public addNode(node: GraphNode) {\r\n const index = this.nodes.indexOf(node);\r\n\r\n if (index === -1) {\r\n this.nodes.push(node);\r\n }\r\n }\r\n\r\n public removeNode(node: GraphNode) {\r\n const index = this.nodes.indexOf(node);\r\n if (index > -1) {\r\n node.enclosingFrameId = -1;\r\n this.nodes.splice(index, 1);\r\n }\r\n }\r\n\r\n public syncNode(node: GraphNode) {\r\n if (this.isCollapsed) {\r\n return;\r\n }\r\n\r\n if (node.isOverlappingFrame(this)) {\r\n this.addNode(node);\r\n } else {\r\n this.removeNode(node);\r\n }\r\n }\r\n\r\n public cleanAccumulation() {\r\n for (const selectedNode of this._nodes) {\r\n selectedNode.cleanAccumulation();\r\n }\r\n\r\n this.x = this._ownerCanvas.getGridPosition(this.x);\r\n this.y = this._ownerCanvas.getGridPosition(this.y);\r\n }\r\n\r\n private _onDown(evt: PointerEvent) {\r\n this._headerTextElement.setPointerCapture(evt.pointerId);\r\n\r\n const indexInSelection = this._ownerCanvas.selectedFrames.indexOf(this);\r\n if (indexInSelection === -1) {\r\n this._ownerCanvas.stateManager.onSelectionChangedObservable.notifyObservers({ selection: this });\r\n } else if (evt.ctrlKey) {\r\n this._ownerCanvas.selectedFrames.splice(indexInSelection, 1);\r\n this.element.classList.remove(\"selected\");\r\n }\r\n this._ownerCanvas._frameIsMoving = true;\r\n\r\n this._mouseStartPointX = evt.clientX;\r\n this._mouseStartPointY = evt.clientY;\r\n\r\n evt.stopPropagation();\r\n }\r\n\r\n public move(newX: number, newY: number, align = true) {\r\n const oldX = this.x;\r\n const oldY = this.y;\r\n\r\n this.x = newX;\r\n this.y = newY;\r\n\r\n for (const selectedNode of this._nodes) {\r\n selectedNode.x += this.x - oldX;\r\n selectedNode.y += this.y - oldY;\r\n if (align) {\r\n selectedNode.cleanAccumulation(true);\r\n }\r\n }\r\n }\r\n\r\n private _onUp(evt: PointerEvent) {\r\n evt.stopPropagation();\r\n\r\n this.cleanAccumulation();\r\n this._mouseStartPointX = null;\r\n this._mouseStartPointY = null;\r\n this._headerTextElement.releasePointerCapture(evt.pointerId);\r\n\r\n this._ownerCanvas._frameIsMoving = false;\r\n }\r\n\r\n public _moveFrame(offsetX: number, offsetY: number) {\r\n this.x += offsetX;\r\n this.y += offsetY;\r\n\r\n for (const selectedNode of this._nodes) {\r\n selectedNode.x += offsetX;\r\n selectedNode.y += offsetY;\r\n }\r\n }\r\n\r\n private _onMove(evt: PointerEvent) {\r\n if (this._mouseStartPointX === null || this._mouseStartPointY === null || evt.ctrlKey || this._frameIsResizing) {\r\n return;\r\n }\r\n\r\n const newX = (evt.clientX - this._mouseStartPointX) / this._ownerCanvas.zoom;\r\n const newY = (evt.clientY - this._mouseStartPointY) / this._ownerCanvas.zoom;\r\n\r\n for (const frame of this._ownerCanvas.selectedFrames) {\r\n frame._moveFrame(newX, newY);\r\n }\r\n for (const node of this._ownerCanvas.selectedNodes) {\r\n node.x += newX;\r\n node.y += newY;\r\n }\r\n\r\n this._mouseStartPointX = evt.clientX;\r\n this._mouseStartPointY = evt.clientY;\r\n\r\n evt.stopPropagation();\r\n }\r\n\r\n public moveFramePortUp(nodePort: FrameNodePort) {\r\n let elementsArray: ChildNode[];\r\n if (nodePort.isInput) {\r\n if (this._inputPortContainer.children.length < 2) {\r\n return;\r\n }\r\n elementsArray = Array.from(this._inputPortContainer.childNodes);\r\n const indexInContainer = this._frameInPorts.findIndex((framePort) => framePort === nodePort);\r\n [this._exposedInPorts[indexInContainer - 1], this._exposedInPorts[indexInContainer]] = [\r\n this._exposedInPorts[indexInContainer],\r\n this._exposedInPorts[indexInContainer - 1],\r\n ]; // swap idicies\r\n this._movePortUp(elementsArray, nodePort, this._frameInPorts);\r\n } else {\r\n if (this._outputPortContainer.children.length < 2) {\r\n return;\r\n }\r\n elementsArray = Array.from(this._outputPortContainer.childNodes);\r\n const indexInContainer = this._frameOutPorts.findIndex((framePort) => framePort === nodePort);\r\n [this._exposedOutPorts[indexInContainer - 1], this._exposedOutPorts[indexInContainer]] = [\r\n this._exposedOutPorts[indexInContainer],\r\n this._exposedOutPorts[indexInContainer - 1],\r\n ]; // swap idicies\r\n this._movePortUp(elementsArray, nodePort, this._frameOutPorts);\r\n }\r\n this.ports.forEach((framePort: FrameNodePort) => framePort.node._refreshLinks());\r\n }\r\n\r\n private _movePortUp(elementsArray: ChildNode[], nodePort: FrameNodePort, framePortList: FrameNodePort[]) {\r\n // update UI\r\n const indexInElementArray = (elementsArray as HTMLElement[]).findIndex((elem) => elem.dataset.framePortId === `${nodePort.framePortId}`);\r\n if (indexInElementArray === 0) {\r\n return;\r\n }\r\n const secondPortElement = elementsArray[indexInElementArray];\r\n const firstPortElement = elementsArray[indexInElementArray - 1];\r\n firstPortElement.parentElement?.insertBefore(secondPortElement, firstPortElement);\r\n\r\n // update Frame Port Container\r\n const indexInContainer = framePortList.findIndex((framePort) => framePort === nodePort);\r\n [framePortList[indexInContainer - 1], framePortList[indexInContainer]] = [framePortList[indexInContainer], framePortList[indexInContainer - 1]]; // swap idicies\r\n\r\n //special case framePortList.length == 2\r\n if (framePortList.length == 2) {\r\n framePortList[1].framePortPosition = FramePortPosition.Bottom;\r\n framePortList[0].framePortPosition = FramePortPosition.Top;\r\n } else {\r\n // notify nodePort if it is now at Top (indexInElementArray === 1)\r\n if (indexInElementArray === 1) {\r\n framePortList[1].framePortPosition = FramePortPosition.Middle;\r\n framePortList[0].framePortPosition = FramePortPosition.Top;\r\n } else if (indexInContainer === elementsArray.length - 1) {\r\n framePortList[framePortList.length - 1].framePortPosition = FramePortPosition.Bottom;\r\n framePortList[framePortList.length - 2].framePortPosition = FramePortPosition.Middle;\r\n } else {\r\n nodePort.framePortPosition = FramePortPosition.Middle;\r\n }\r\n }\r\n }\r\n\r\n public moveFramePortDown(nodePort: FrameNodePort) {\r\n let elementsArray: ChildNode[];\r\n if (nodePort.isInput) {\r\n if (this._inputPortContainer.children.length < 2) {\r\n return;\r\n }\r\n elementsArray = Array.from(this._inputPortContainer.childNodes);\r\n const indexInContainer = this._frameInPorts.findIndex((framePort) => framePort === nodePort);\r\n [this._exposedInPorts[indexInContainer], this._exposedInPorts[indexInContainer + 1]] = [\r\n this._exposedInPorts[indexInContainer + 1],\r\n this._exposedInPorts[indexInContainer],\r\n ]; // swap idicies\r\n this._movePortDown(elementsArray, nodePort, this._frameInPorts);\r\n } else {\r\n if (this._outputPortContainer.children.length < 2) {\r\n return;\r\n }\r\n elementsArray = Array.from(this._outputPortContainer.childNodes);\r\n const indexInContainer = this._frameOutPorts.findIndex((framePort) => framePort === nodePort);\r\n [this._exposedOutPorts[indexInContainer], this._exposedOutPorts[indexInContainer + 1]] = [\r\n this._exposedOutPorts[indexInContainer + 1],\r\n this._exposedOutPorts[indexInContainer],\r\n ]; // swap idicies\r\n this._movePortDown(elementsArray, nodePort, this._frameOutPorts);\r\n }\r\n\r\n this.ports.forEach((framePort: FrameNodePort) => framePort.node._refreshLinks());\r\n }\r\n\r\n private _movePortDown(elementsArray: ChildNode[], nodePort: FrameNodePort, framePortList: FrameNodePort[]) {\r\n // update UI\r\n const indexInElementArray = (elementsArray as HTMLElement[]).findIndex((elem) => elem.dataset.framePortId === `${nodePort.framePortId}`);\r\n if (indexInElementArray === elementsArray.length - 1) {\r\n return;\r\n }\r\n const firstPort = elementsArray[indexInElementArray];\r\n const secondPort = elementsArray[indexInElementArray + 1];\r\n firstPort.parentElement?.insertBefore(secondPort, firstPort);\r\n\r\n // update Frame Port Container\r\n const indexInContainer = framePortList.findIndex((framePort) => framePort === nodePort);\r\n [framePortList[indexInContainer], framePortList[indexInContainer + 1]] = [framePortList[indexInContainer + 1], framePortList[indexInContainer]]; // swap idicies\r\n\r\n // notify nodePort if it is now at bottom (indexInContainer === elementsArray.length-2)\r\n if (framePortList.length == 2) {\r\n framePortList[0].framePortPosition = FramePortPosition.Top;\r\n framePortList[1].framePortPosition = FramePortPosition.Bottom;\r\n } else {\r\n if (indexInContainer === elementsArray.length - 2) {\r\n framePortList[elementsArray.length - 2].framePortPosition = FramePortPosition.Middle;\r\n framePortList[elementsArray.length - 1].framePortPosition = FramePortPosition.Bottom;\r\n } else if (indexInContainer === 0) {\r\n framePortList[0].framePortPosition = FramePortPosition.Top;\r\n framePortList[1].framePortPosition = FramePortPosition.Middle;\r\n } else {\r\n nodePort.framePortPosition = FramePortPosition.Middle;\r\n }\r\n }\r\n }\r\n\r\n private _initResizing = (evt: PointerEvent) => {\r\n evt.stopPropagation();\r\n this._mouseStartPointX = evt.clientX;\r\n this._mouseStartPointY = evt.clientY;\r\n this._frameIsResizing = true;\r\n };\r\n\r\n private _cleanUpResizing = (evt: PointerEvent) => {\r\n evt.stopPropagation();\r\n this._frameIsResizing = false;\r\n this._resizingDirection = null;\r\n this._mouseStartPointX = null;\r\n this._mouseStartPointY = null;\r\n this._mouseXLimit = null;\r\n this.refresh();\r\n };\r\n\r\n private _updateMinHeightWithComments = () => {\r\n if (this.comments && this.comments.length > 0) {\r\n const minFrameHeightWithComments = this._commentsElement.offsetHeight + 40;\r\n this._minFrameHeight = minFrameHeightWithComments;\r\n }\r\n };\r\n\r\n private _isResizingTop() {\r\n return this._resizingDirection === ResizingDirection.Top || this._resizingDirection === ResizingDirection.TopRight || this._resizingDirection === ResizingDirection.TopLeft;\r\n }\r\n\r\n private _isResizingRight() {\r\n return (\r\n this._resizingDirection === ResizingDirection.Right ||\r\n this._resizingDirection === ResizingDirection.TopRight ||\r\n this._resizingDirection === ResizingDirection.BottomRight\r\n );\r\n }\r\n\r\n private _isResizingBottom() {\r\n return (\r\n this._resizingDirection === ResizingDirection.Bottom ||\r\n this._resizingDirection === ResizingDirection.BottomLeft ||\r\n this._resizingDirection === ResizingDirection.BottomRight\r\n );\r\n }\r\n\r\n private _isResizingLeft() {\r\n return (\r\n this._resizingDirection === ResizingDirection.Left || this._resizingDirection === ResizingDirection.TopLeft || this._resizingDirection === ResizingDirection.BottomLeft\r\n );\r\n }\r\n\r\n private _onRightHandlePointerDown = (evt: PointerEvent) => {\r\n if (this.isCollapsed) {\r\n return;\r\n }\r\n this._initResizing(evt);\r\n this._resizingDirection = ResizingDirection.Right;\r\n this._mouseXLimit = evt.clientX - (this.width - this._minFrameWidth);\r\n this._ownerCanvas.hostCanvas.addEventListener(\"pointerup\", this._onRightHandlePointerUp);\r\n this._ownerCanvas.hostCanvas.addEventListener(\"pointermove\", this._onRightHandlePointerMove);\r\n };\r\n\r\n private _onRightHandlePointerMove = (evt: PointerEvent) => {\r\n const slack = (this.element.offsetWidth - this._minFrameWidth) * this._ownerCanvas.zoom;\r\n const xLimit = (this._mouseStartPointX as number) - slack;\r\n this._moveRightHandle(evt, xLimit);\r\n };\r\n\r\n private _moveRightHandle = (evt: PointerEvent, xLimit: number) => {\r\n // tslint:disable-next-line: no-this-assignment\r\n if (this._mouseXLimit) {\r\n if (!this._isResizingRight() || this._mouseStartPointX === null || this._mouseStartPointY === null || evt.clientX < xLimit) {\r\n return;\r\n }\r\n if (this._isResizingRight()) {\r\n evt.stopPropagation();\r\n const distanceMouseMoved = (evt.clientX - this._mouseStartPointX) / this._ownerCanvas.zoom;\r\n this._expandRight(distanceMouseMoved, evt.clientX);\r\n this._mouseStartPointX = evt.clientX;\r\n }\r\n }\r\n };\r\n\r\n private _onRightHandlePointerUp = (evt: PointerEvent) => {\r\n if (this._isResizingRight()) {\r\n this.width = parseFloat(this.element.style.width.replace(\"px\", \"\"));\r\n this._ownerCanvas.hostCanvas.removeEventListener(\"pointerup\", this._onRightHandlePointerUp);\r\n this._ownerCanvas.hostCanvas.removeEventListener(\"pointermove\", this._onRightHandlePointerMove);\r\n this._cleanUpResizing(evt);\r\n }\r\n };\r\n\r\n private _onBottomHandlePointerDown = (evt: PointerEvent) => {\r\n if (this.isCollapsed) {\r\n return;\r\n }\r\n this._initResizing(evt);\r\n this._resizingDirection = ResizingDirection.Bottom;\r\n this._ownerCanvas.hostCanvas.addEventListener(\"pointermove\", this._onBottomHandlePointerMove);\r\n this._ownerCanvas.hostCanvas.addEventListener(\"pointerup\", this._onBottomHandlePointerUp);\r\n };\r\n\r\n private _onBottomHandlePointerMove = (evt: PointerEvent) => {\r\n const slack = (this.element.offsetHeight - this._minFrameHeight) * this._ownerCanvas.zoom;\r\n const yLimit = (this._mouseStartPointY as number) - slack;\r\n this._moveBottomHandle(evt, yLimit);\r\n };\r\n\r\n private _moveBottomHandle = (evt: PointerEvent, yLimit: number) => {\r\n if (this._resizingDirection !== ResizingDirection.Bottom || this._mouseStartPointX === null || this._mouseStartPointY === null || evt.clientY < yLimit) {\r\n return;\r\n }\r\n if (this._resizingDirection === ResizingDirection.Bottom) {\r\n evt.stopPropagation();\r\n const distanceMouseMoved = (evt.clientY - this._mouseStartPointY) / this._ownerCanvas.zoom;\r\n this._expandBottom(distanceMouseMoved);\r\n this._mouseStartPointY = evt.clientY;\r\n }\r\n };\r\n\r\n private _onBottomHandlePointerUp = (evt: PointerEvent) => {\r\n if (this._resizingDirection === ResizingDirection.Bottom) {\r\n this.height = parseFloat(this.element.style.height.replace(\"px\", \"\"));\r\n this._ownerCanvas.hostCanvas.removeEventListener(\"pointermove\", this._onBottomHandlePointerMove);\r\n this._ownerCanvas.hostCanvas.removeEventListener(\"pointerup\", this._onBottomHandlePointerUp);\r\n this._cleanUpResizing(evt);\r\n }\r\n };\r\n\r\n private _onLeftHandlePointerDown = (evt: PointerEvent) => {\r\n if (this.isCollapsed) {\r\n return;\r\n }\r\n this._initResizing(evt);\r\n this._resizingDirection = ResizingDirection.Left;\r\n this._mouseXLimit = evt.clientX + this.width - this._minFrameWidth;\r\n this._ownerCanvas.hostCanvas.addEventListener(\"pointerup\", this._onLeftHandlePointerUp);\r\n this._ownerCanvas.hostCanvas.addEventListener(\"pointermove\", this._onLeftHandlePointerMove);\r\n };\r\n\r\n private _onLeftHandlePointerMove = (evt: PointerEvent) => {\r\n const slack = (this.element.offsetWidth - this._minFrameWidth) * this._ownerCanvas.zoom;\r\n const xLimit = (this._mouseStartPointX as number) + slack;\r\n this._moveLeftHandle(evt, xLimit);\r\n };\r\n\r\n private _moveLeftHandle = (evt: PointerEvent, xLimit: number) => {\r\n if (this._mouseXLimit) {\r\n if (this._resizingDirection !== ResizingDirection.Left || this._mouseStartPointX === null || this._mouseStartPointY === null || evt.clientX > xLimit) {\r\n return;\r\n }\r\n if (this._resizingDirection === ResizingDirection.Left) {\r\n evt.stopPropagation();\r\n const distanceMouseMoved = (evt.clientX - this._mouseStartPointX) / this._ownerCanvas.zoom;\r\n this._expandLeft(distanceMouseMoved);\r\n this._mouseStartPointX = evt.clientX;\r\n }\r\n }\r\n };\r\n\r\n private _onLeftHandlePointerUp = (evt: PointerEvent) => {\r\n if (this._resizingDirection === ResizingDirection.Left) {\r\n this.x = parseFloat(this.element.style.left.replace(\"px\", \"\"));\r\n this.width = parseFloat(this.element.style.width.replace(\"px\", \"\"));\r\n this._ownerCanvas.hostCanvas.removeEventListener(\"pointerup\", this._onLeftHandlePointerUp);\r\n this._ownerCanvas.hostCanvas.removeEventListener(\"pointermove\", this._onLeftHandlePointerMove);\r\n this._cleanUpResizing(evt);\r\n }\r\n };\r\n\r\n private _onTopHandlePointerDown = (evt: PointerEvent) => {\r\n if (this.isCollapsed) {\r\n return;\r\n }\r\n this._initResizing(evt);\r\n this._resizingDirection = ResizingDirection.Top;\r\n this._ownerCanvas.hostCanvas.addEventListener(\"pointerup\", this._onTopHandlePointerUp);\r\n this._ownerCanvas.hostCanvas.addEventListener(\"pointermove\", this._onTopHandlePointerMove);\r\n };\r\n\r\n private _onTopHandlePointerMove = (evt: PointerEvent) => {\r\n const slack = (this.element.offsetHeight - this._minFrameHeight) * this._ownerCanvas.zoom;\r\n const yLimit = (this._mouseStartPointY as number) + slack;\r\n this._moveTopHandle(evt, yLimit);\r\n };\r\n\r\n private _moveTopHandle = (evt: PointerEvent, yLimit: number) => {\r\n if (!this._isResizingTop() || this._mouseStartPointX === null || this._mouseStartPointY === null || evt.clientY > yLimit) {\r\n return;\r\n }\r\n if (this._isResizingTop()) {\r\n evt.stopPropagation();\r\n const distanceMouseMoved = (evt.clientY - this._mouseStartPointY) / this._ownerCanvas.zoom;\r\n this._expandTop(distanceMouseMoved);\r\n this._mouseStartPointY = evt.clientY;\r\n }\r\n };\r\n\r\n private _onTopHandlePointerUp = (evt: PointerEvent) => {\r\n if (this._isResizingTop()) {\r\n this.y = parseFloat(this.element.style.top.replace(\"px\", \"\"));\r\n this.height = parseFloat(this.element.style.height.replace(\"px\", \"\"));\r\n this._ownerCanvas.hostCanvas.removeEventListener(\"pointerup\", this._onTopHandlePointerUp);\r\n this._ownerCanvas.hostCanvas.removeEventListener(\"pointermove\", this._onTopHandlePointerMove);\r\n this._cleanUpResizing(evt);\r\n }\r\n };\r\n\r\n private _onTopRightHandlePointerDown = (evt: PointerEvent) => {\r\n if (this.isCollapsed) {\r\n return;\r\n }\r\n this._initResizing(evt);\r\n this._resizingDirection = ResizingDirection.TopRight;\r\n this._ownerCanvas.hostCanvas.addEventListener(\"pointerup\", this._onTopRightHandlePointerUp);\r\n this._ownerCanvas.hostCanvas.addEventListener(\"pointermove\", this._onTopRightHandlePointerMove);\r\n };\r\n\r\n private _onTopRightHandlePointerMove = (evt: PointerEvent) => {\r\n const topSlack = (this.element.offsetHeight - this._minFrameHeight) * this._ownerCanvas.zoom;\r\n const yLimit = (this._mouseStartPointY as number) + topSlack;\r\n const rightSlack = (this.element.offsetWidth - this._minFrameWidth) * this._ownerCanvas.zoom;\r\n const xLimit = (this._mouseStartPointX as number) - rightSlack;\r\n this._moveTopRightHandle(evt, xLimit, yLimit);\r\n };\r\n\r\n private _moveTopRightHandle = (evt: PointerEvent, xLimit: number, yLimit: number) => {\r\n if (!(this._isResizingTop() && this._isResizingRight()) || this._mouseStartPointX === null || this._mouseStartPointY === null) {\r\n return;\r\n }\r\n if (this._isResizingRight() && this._isResizingTop()) {\r\n evt.stopPropagation();\r\n if (evt.clientY < yLimit && evt.clientX > xLimit) {\r\n // able to move in X and Y\r\n const distanceMouseMovedX = (evt.clientX - this._mouseStartPointX) / this._ownerCanvas.zoom;\r\n this._expandRight(distanceMouseMovedX, evt.clientX);\r\n this._mouseStartPointX = evt.clientX;\r\n const distanceMouseMovedY = (evt.clientY - this._mouseStartPointY) / this._ownerCanvas.zoom;\r\n this._expandTop(distanceMouseMovedY);\r\n this._mouseStartPointY = evt.clientY;\r\n } else if (evt.clientY > yLimit && evt.clientX > xLimit) {\r\n // able to move in X but not Y\r\n const distanceMouseMovedX = (evt.clientX - this._mouseStartPointX) / this._ownerCanvas.zoom;\r\n this._expandRight(distanceMouseMovedX, evt.clientX);\r\n this._mouseStartPointX = evt.clientX;\r\n } else if (evt.clientY < yLimit && evt.clientX < xLimit) {\r\n // able to move in Y but not X\r\n const distanceMouseMovedY = (evt.clientY - this._mouseStartPointY) / this._ownerCanvas.zoom;\r\n this._expandTop(distanceMouseMovedY);\r\n this._mouseStartPointY = evt.clientY;\r\n }\r\n }\r\n };\r\n\r\n private _onTopRightHandlePointerUp = (evt: PointerEvent) => {\r\n evt.stopPropagation();\r\n if (this._resizingDirection === ResizingDirection.TopRight) {\r\n this.y = parseFloat(this.element.style.top.replace(\"px\", \"\"));\r\n this.height = parseFloat(this.element.style.height.replace(\"px\", \"\"));\r\n this.width = parseFloat(this.element.style.width.replace(\"px\", \"\"));\r\n this._ownerCanvas.hostCanvas.removeEventListener(\"pointerup\", this._onTopRightHandlePointerUp);\r\n this._ownerCanvas.hostCanvas.removeEventListener(\"pointermove\", this._onTopRightHandlePointerMove);\r\n this._cleanUpResizing(evt);\r\n }\r\n };\r\n\r\n private _onBottomRightHandlePointerDown = (evt: PointerEvent) => {\r\n if (this.isCollapsed) {\r\n return;\r\n }\r\n this._initResizing(evt);\r\n this._resizingDirection = ResizingDirection.BottomRight;\r\n this._ownerCanvas.hostCanvas.addEventListener(\"pointerup\", this._onBottomRightHandlePointerUp);\r\n this._ownerCanvas.hostCanvas.addEventListener(\"pointermove\", this._onBottomRightHandlePointerMove);\r\n };\r\n\r\n private _onBottomRightHandlePointerMove = (evt: PointerEvent) => {\r\n const bottomSlack = (this.element.offsetHeight - this._minFrameHeight) * this._ownerCanvas.zoom;\r\n const yLimit = (this._mouseStartPointY as number) - bottomSlack;\r\n const rightSlack = (this.element.offsetWidth - this._minFrameWidth) * this._ownerCanvas.zoom;\r\n const xLimit = (this._mouseStartPointX as number) - rightSlack;\r\n this._moveBottomRightHandle(evt, xLimit, yLimit);\r\n };\r\n\r\n private _moveBottomRightHandle = (evt: PointerEvent, xLimit: number, yLimit: number) => {\r\n if (!(this._isResizingBottom() && this._isResizingRight()) || this._mouseStartPointX === null || this._mouseStartPointY === null) {\r\n return;\r\n }\r\n if (this._isResizingRight() && this._isResizingBottom()) {\r\n evt.stopPropagation();\r\n if (evt.clientY > yLimit && evt.clientX > xLimit) {\r\n // able to move in X and Y\r\n const distanceMouseMovedX = (evt.clientX - this._mouseStartPointX) / this._ownerCanvas.zoom;\r\n this._expandRight(distanceMouseMovedX, evt.clientX);\r\n this._mouseStartPointX = evt.clientX;\r\n const distanceMouseMovedY = (evt.clientY - this._mouseStartPointY) / this._ownerCanvas.zoom;\r\n this._expandBottom(distanceMouseMovedY);\r\n this._mouseStartPointY = evt.clientY;\r\n } else if (evt.clientY < yLimit && evt.clientX > xLimit) {\r\n // able to move in X but not Y\r\n const distanceMouseMovedX = (evt.clientX - this._mouseStartPointX) / this._ownerCanvas.zoom;\r\n this._expandRight(distanceMouseMovedX, evt.clientX);\r\n this._mouseStartPointX = evt.clientX;\r\n } else if (evt.clientY > yLimit && evt.clientX < xLimit) {\r\n // able to move in Y but not X\r\n const distanceMouseMovedY = (evt.clientY - this._mouseStartPointY) / this._ownerCanvas.zoom;\r\n this._expandBottom(distanceMouseMovedY);\r\n this._mouseStartPointY = evt.clientY;\r\n }\r\n }\r\n };\r\n\r\n private _onBottomRightHandlePointerUp = (evt: PointerEvent) => {\r\n if (this._resizingDirection === ResizingDirection.BottomRight) {\r\n this.height = parseFloat(this.element.style.height.replace(\"px\", \"\"));\r\n this.width = parseFloat(this.element.style.width.replace(\"px\", \"\"));\r\n this._ownerCanvas.hostCanvas.removeEventListener(\"pointerup\", this._onBottomRightHandlePointerUp);\r\n this._ownerCanvas.hostCanvas.removeEventListener(\"pointermove\", this._onBottomRightHandlePointerMove);\r\n this._cleanUpResizing(evt);\r\n }\r\n };\r\n\r\n private _onBottomLeftHandlePointerDown = (evt: PointerEvent) => {\r\n if (this.isCollapsed) {\r\n return;\r\n }\r\n this._initResizing(evt);\r\n this._resizingDirection = ResizingDirection.BottomLeft;\r\n this._mouseXLimit = evt.clientX + this.width - this._minFrameWidth;\r\n this._ownerCanvas.hostCanvas.addEventListener(\"pointerup\", this._onBottomLeftHandlePointerUp);\r\n this._ownerCanvas.hostCanvas.addEventListener(\"pointermove\", this._onBottomLeftHandlePointerMove);\r\n };\r\n\r\n private _onBottomLeftHandlePointerMove = (evt: PointerEvent) => {\r\n const bottomSlack = (this.element.offsetHeight - this._minFrameHeight) * this._ownerCanvas.zoom;\r\n const yLimit = (this._mouseStartPointY as number) - bottomSlack;\r\n const leftSlack = (this.element.offsetWidth - this._minFrameWidth) * this._ownerCanvas.zoom;\r\n const xLimit = (this._mouseStartPointX as number) + leftSlack;\r\n this._moveBottomLeftHandle(evt, xLimit, yLimit);\r\n };\r\n\r\n private _moveBottomLeftHandle = (evt: PointerEvent, xLimit: number, yLimit: number) => {\r\n if (!(this._isResizingBottom() && this._isResizingLeft()) || this._mouseStartPointX === null || this._mouseStartPointY === null) {\r\n return;\r\n }\r\n if (this._isResizingLeft() && this._isResizingBottom()) {\r\n evt.stopPropagation();\r\n if (evt.clientY > yLimit && evt.clientX < xLimit) {\r\n // able to move in X and Y\r\n const distanceMouseMovedX = (evt.clientX - this._mouseStartPointX) / this._ownerCanvas.zoom;\r\n this._expandLeft(distanceMouseMovedX);\r\n this._mouseStartPointX = evt.clientX;\r\n const distanceMouseMovedY = (evt.clientY - this._mouseStartPointY) / this._ownerCanvas.zoom;\r\n this._expandBottom(distanceMouseMovedY);\r\n this._mouseStartPointY = evt.clientY;\r\n } else if (evt.clientY < yLimit && evt.clientX < xLimit) {\r\n // able to move in X but not Y\r\n const distanceMouseMovedX = (evt.clientX - this._mouseStartPointX) / this._ownerCanvas.zoom;\r\n this._expandLeft(distanceMouseMovedX);\r\n this._mouseStartPointX = evt.clientX;\r\n } else if (evt.clientY > yLimit && evt.clientX > xLimit) {\r\n // able to move in Y but not X\r\n const distanceMouseMovedY = (evt.clientY - this._mouseStartPointY) / this._ownerCanvas.zoom;\r\n this._expandBottom(distanceMouseMovedY);\r\n this._mouseStartPointY = evt.clientY;\r\n }\r\n }\r\n };\r\n\r\n private _onBottomLeftHandlePointerUp = (evt: PointerEvent) => {\r\n evt.stopPropagation();\r\n if (this._resizingDirection === ResizingDirection.BottomLeft) {\r\n this.height = parseFloat(this.element.style.height.replace(\"px\", \"\"));\r\n this.x = parseFloat(this.element.style.left.replace(\"px\", \"\"));\r\n this.width = parseFloat(this.element.style.width.replace(\"px\", \"\"));\r\n this._ownerCanvas.hostCanvas.removeEventListener(\"pointerup\", this._onBottomLeftHandlePointerUp);\r\n this._ownerCanvas.hostCanvas.removeEventListener(\"pointermove\", this._onBottomLeftHandlePointerMove);\r\n this._cleanUpResizing(evt);\r\n }\r\n };\r\n\r\n private _onTopLeftHandlePointerDown = (evt: PointerEvent) => {\r\n if (this.isCollapsed) {\r\n return;\r\n }\r\n this._initResizing(evt);\r\n this._resizingDirection = ResizingDirection.TopLeft;\r\n this._mouseXLimit = evt.clientX + this.width - this._minFrameWidth;\r\n this._ownerCanvas.hostCanvas.addEventListener(\"pointerup\", this._onTopLeftHandlePointerUp);\r\n this._ownerCanvas.hostCanvas.addEventListener(\"pointermove\", this._onTopLeftHandlePointerMove);\r\n };\r\n\r\n private _onTopLeftHandlePointerMove = (evt: PointerEvent) => {\r\n const topSlack = (this.element.offsetHeight - this._minFrameHeight) * this._ownerCanvas.zoom;\r\n const yLimit = (this._mouseStartPointY as number) + topSlack;\r\n const leftSlack = (this.element.offsetWidth - this._minFrameWidth) * this._ownerCanvas.zoom;\r\n const xLimit = (this._mouseStartPointX as number) + leftSlack;\r\n this._moveTopLeftHandle(evt, xLimit, yLimit);\r\n };\r\n\r\n private _moveTopLeftHandle = (evt: PointerEvent, xLimit: number, yLimit: number) => {\r\n if (!(this._isResizingTop() && this._isResizingLeft()) || this._mouseStartPointX === null || this._mouseStartPointY === null) {\r\n return;\r\n }\r\n if (this._isResizingLeft() && this._isResizingTop()) {\r\n evt.stopPropagation();\r\n if (evt.clientY < yLimit && evt.clientX < xLimit) {\r\n // able to move in X and Y\r\n const distanceMouseMovedX = (evt.clientX - this._mouseStartPointX) / this._ownerCanvas.zoom;\r\n this._expandLeft(distanceMouseMovedX);\r\n this._mouseStartPointX = evt.clientX;\r\n const distanceMouseMovedY = (evt.clientY - this._mouseStartPointY) / this._ownerCanvas.zoom;\r\n this._expandTop(distanceMouseMovedY);\r\n this._mouseStartPointY = evt.clientY;\r\n } else if (evt.clientY > yLimit && evt.clientX < xLimit) {\r\n // able to move in X but not Y\r\n const distanceMouseMovedX = (evt.clientX - this._mouseStartPointX) / this._ownerCanvas.zoom;\r\n this._expandLeft(distanceMouseMovedX);\r\n this._mouseStartPointX = evt.clientX;\r\n } else if (evt.clientY < yLimit && evt.clientX > xLimit) {\r\n // able to move in Y but not X\r\n const distanceMouseMovedY = (evt.clientY - this._mouseStartPointY) / this._ownerCanvas.zoom;\r\n this._expandTop(distanceMouseMovedY);\r\n this._mouseStartPointY = evt.clientY;\r\n }\r\n }\r\n };\r\n\r\n private _onTopLeftHandlePointerUp = (evt: PointerEvent) => {\r\n evt.stopPropagation();\r\n if (this._resizingDirection === ResizingDirection.TopLeft) {\r\n this.y = parseFloat(this.element.style.top.replace(\"px\", \"\"));\r\n this.height = parseFloat(this.element.style.height.replace(\"px\", \"\"));\r\n this.x = parseFloat(this.element.style.left.replace(\"px\", \"\"));\r\n this.width = parseFloat(this.element.style.width.replace(\"px\", \"\"));\r\n this._ownerCanvas.hostCanvas.removeEventListener(\"pointerup\", this._onTopLeftHandlePointerUp);\r\n this._ownerCanvas.hostCanvas.removeEventListener(\"pointermove\", this._onTopLeftHandlePointerMove);\r\n this._cleanUpResizing(evt);\r\n }\r\n };\r\n\r\n private _expandLeft(widthModification: number) {\r\n const frameElementWidth = parseFloat(this.element.style.width.replace(\"px\", \"\"));\r\n const frameElementLeft = parseFloat(this.element.style.left.replace(\"px\", \"\"));\r\n this.element.style.width = `${frameElementWidth - widthModification}px`;\r\n this.element.style.left = `${frameElementLeft + widthModification}px`;\r\n this._updateMinHeightWithComments();\r\n }\r\n\r\n private _expandTop(heightModification: number) {\r\n const frameElementHeight = parseFloat(this.element.style.height.replace(\"px\", \"\"));\r\n const frameElementTop = parseFloat(this.element.style.top.replace(\"px\", \"\"));\r\n this.element.style.height = `${frameElementHeight - heightModification}px`;\r\n this.element.style.top = `${frameElementTop + heightModification}px`;\r\n }\r\n\r\n private _expandRight(widthModification: number, x: number) {\r\n const frameElementWidth = parseFloat(this.element.style.width.replace(\"px\", \"\"));\r\n if (frameElementWidth + widthModification > 20) {\r\n this._mouseStartPointX = x;\r\n this.element.style.width = `${frameElementWidth + widthModification}px`;\r\n }\r\n this._updateMinHeightWithComments();\r\n }\r\n\r\n private _expandBottom(heightModification: number) {\r\n const frameElementHeight = parseFloat(this.element.style.height.replace(\"px\", \"\"));\r\n this.element.style.height = `${frameElementHeight + heightModification}px`;\r\n }\r\n\r\n public dispose() {\r\n if (this._isFocused) {\r\n this.switchFocusMode();\r\n }\r\n if (this._onSelectionChangedObserver) {\r\n this._ownerCanvas.stateManager.onSelectionChangedObservable.remove(this._onSelectionChangedObserver);\r\n }\r\n\r\n if (this._onGraphNodeRemovalObserver) {\r\n this._ownerCanvas.stateManager.onGraphNodeRemovalObservable.remove(this._onGraphNodeRemovalObserver);\r\n }\r\n\r\n if (this._onExposePortOnFrameObserver) {\r\n this._ownerCanvas.stateManager.onExposePortOnFrameObservable.remove(this._onExposePortOnFrameObserver);\r\n }\r\n\r\n this.element.parentElement?.removeChild(this.element);\r\n\r\n this._ownerCanvas.frames.splice(this._ownerCanvas.frames.indexOf(this), 1);\r\n\r\n this.onExpandStateChanged.clear();\r\n }\r\n\r\n private _serializePortData(exposedPorts: NodePort[]) {\r\n if (exposedPorts.length > 0) {\r\n for (let i = 0; i < exposedPorts.length; ++i) {\r\n if (exposedPorts[i]) {\r\n exposedPorts[i].exposedPortPosition = i;\r\n }\r\n }\r\n }\r\n }\r\n\r\n public serialize(saveCollapsedState: boolean): IFrameData {\r\n this._serializePortData(this._exposedInPorts);\r\n this._serializePortData(this._exposedOutPorts);\r\n return {\r\n x: this._x,\r\n y: this._y,\r\n width: this._width,\r\n height: this._height,\r\n color: this._color.asArray(),\r\n name: this.name,\r\n isCollapsed: saveCollapsedState ? this.isCollapsed : true, //keeping closed for stand along exporting.\r\n blocks: this.nodes.map((n) => n.content.uniqueId),\r\n comments: this._comments,\r\n };\r\n }\r\n\r\n public export() {\r\n const state = this._ownerCanvas.stateManager;\r\n const json = state.exportData(state.data, this);\r\n StringTools.DownloadAsFile(state.hostDocument, json, this._name + \".json\");\r\n }\r\n\r\n public adjustPorts() {\r\n for (const node of this.nodes) {\r\n for (const port of node.outputPorts) {\r\n // Output\r\n if (port.exposedOnFrame) {\r\n if (port.exposedPortPosition !== -1) {\r\n this._exposedOutPorts[port.exposedPortPosition] = port;\r\n }\r\n }\r\n }\r\n\r\n for (const port of node.inputPorts) {\r\n // Imports\r\n if (port.exposedOnFrame) {\r\n if (port.exposedPortPosition !== -1) {\r\n this._exposedInPorts[port.exposedPortPosition] = port;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n public static Parse(serializationData: IFrameData, canvas: GraphCanvasComponent, map?: { [key: number]: number }) {\r\n const newFrame = new GraphFrame(null, canvas, true);\r\n const isCollapsed = !!serializationData.isCollapsed;\r\n\r\n newFrame.x = serializationData.x;\r\n newFrame.y = serializationData.y;\r\n newFrame.width = serializationData.width;\r\n newFrame.height = serializationData.height;\r\n newFrame.name = serializationData.name;\r\n newFrame.color = Color3.FromArray(serializationData.color);\r\n newFrame.comments = serializationData.comments;\r\n\r\n if (serializationData.blocks && map) {\r\n for (const blockId of serializationData.blocks) {\r\n const actualId = map[blockId];\r\n const node = canvas.nodes.filter((n) => n.content.uniqueId === actualId);\r\n\r\n if (node.length) {\r\n newFrame.nodes.push(node[0]);\r\n node[0].enclosingFrameId = newFrame.id;\r\n }\r\n }\r\n } else {\r\n newFrame.refresh();\r\n }\r\n\r\n newFrame.adjustPorts();\r\n\r\n newFrame.isCollapsed = isCollapsed;\r\n if (isCollapsed) {\r\n canvas._frameIsMoving = true;\r\n newFrame._moveFrame(-(newFrame.width - newFrame._collapsedWidth) / 2, 0);\r\n const diff = serializationData.x - newFrame.x;\r\n newFrame._moveFrame(diff, 0);\r\n newFrame.cleanAccumulation();\r\n\r\n for (const selectedNode of newFrame.nodes) {\r\n selectedNode.refresh();\r\n }\r\n canvas._frameIsMoving = false;\r\n }\r\n\r\n return newFrame;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"graphFrame.js","sourceRoot":"","sources":["../../../../dev/sharedUiComponents/src/nodeGraphSystem/graphFrame.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport { type GraphNode } from \"./graphNode\";\r\nimport { type GraphCanvasComponent } from \"./graphCanvas\";\r\nimport { type Nullable } from \"core/types\";\r\nimport { type Observer, Observable } from \"core/Misc/observable\";\r\nimport { Color3 } from \"core/Maths/math.color\";\r\nimport { type NodePort } from \"./nodePort\";\r\nimport { FrameNodePort } from \"./frameNodePort\";\r\nimport { type NodeLink } from \"./nodeLink\";\r\nimport { type IFrameData } from \"./interfaces/nodeLocationInfo\";\r\nimport { StringTools } from \"../stringTools\";\r\nimport * as styles from \"./graphFrame.module.scss\";\r\nimport * as commonStyles from \"./common.module.scss\";\r\nimport { ClassNames } from \"../components/classNames\";\r\n\r\nimport { type ISelectionChangedOptions } from \"./interfaces/selectionChangedOptions\";\r\n\r\nenum ResizingDirection {\r\n Right,\r\n Left,\r\n Top,\r\n Bottom,\r\n TopRight,\r\n TopLeft,\r\n BottomRight,\r\n BottomLeft,\r\n}\r\n\r\nexport enum FramePortPosition {\r\n Top,\r\n Middle,\r\n Bottom,\r\n}\r\n\r\nexport class GraphFrame {\r\n private readonly _collapsedWidth = 200;\r\n private static _FrameCounter = 0;\r\n private static _FramePortCounter = 0;\r\n private _name: string;\r\n private _color: Color3;\r\n private _x = 0;\r\n private _y = 0;\r\n private _gridAlignedX = 0;\r\n private _gridAlignedY = 0;\r\n private _width: number;\r\n private _height: number;\r\n public element: HTMLDivElement;\r\n private _borderElement: HTMLDivElement;\r\n private _headerElement: HTMLDivElement;\r\n private _headerTextElement: HTMLDivElement;\r\n private _headerCollapseElement: HTMLDivElement;\r\n private _headerCloseElement: HTMLDivElement;\r\n private _commentsElement: HTMLDivElement;\r\n private _portContainer: HTMLDivElement;\r\n private _outputPortContainer: HTMLDivElement;\r\n private _inputPortContainer: HTMLDivElement;\r\n private _nodes: GraphNode[] = [];\r\n private _ownerCanvas: GraphCanvasComponent;\r\n private _mouseStartPointX: Nullable<number> = null;\r\n private _mouseStartPointY: Nullable<number> = null;\r\n private _onSelectionChangedObserver: Nullable<Observer<Nullable<ISelectionChangedOptions>>>;\r\n private _onGraphNodeRemovalObserver: Nullable<Observer<GraphNode>>;\r\n private _onExposePortOnFrameObserver: Nullable<Observer<GraphNode>>;\r\n private _onNodeLinkDisposedObservers: Nullable<Observer<NodeLink>>[] = [];\r\n private _isCollapsed = false;\r\n private _frameInPorts: FrameNodePort[] = [];\r\n private _frameOutPorts: FrameNodePort[] = [];\r\n private _controlledPorts: NodePort[] = []; // Ports on Nodes that are shown on outside of frame\r\n private _exposedInPorts: NodePort[] = [];\r\n private _exposedOutPorts: NodePort[] = [];\r\n private _id: number;\r\n private _comments: string;\r\n private _frameIsResizing: boolean;\r\n private _resizingDirection: Nullable<ResizingDirection>;\r\n private _minFrameHeight = 40;\r\n private _minFrameWidth = 220;\r\n private _mouseXLimit: Nullable<number>;\r\n\r\n public onExpandStateChanged = new Observable<GraphFrame>();\r\n\r\n private readonly _closeSVG = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 30 30\"><g id=\"Layer_2\" data-name=\"Layer 2\"><path d=\"M16,15l5.85,5.84-1,1L15,15.93,9.15,21.78l-1-1L14,15,8.19,9.12l1-1L15,14l5.84-5.84,1,1Z\"/></g></svg>`;\r\n private readonly _expandSVG = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 30 30\"><g id=\"Layer_2\" data-name=\"Layer 2\"><path d=\"M22.31,7.69V22.31H7.69V7.69ZM21.19,8.81H8.81V21.19H21.19Zm-6.75,6.75H11.06V14.44h3.38V11.06h1.12v3.38h3.38v1.12H15.56v3.38H14.44Z\"/></g></svg>`;\r\n private readonly _collapseSVG = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 30 30\"><g id=\"Layer_2\" data-name=\"Layer 2\"><path d=\"M22.31,7.69V22.31H7.69V7.69ZM21.19,8.81H8.81V21.19H21.19Zm-2.25,6.75H11.06V14.44h7.88Z\"/></g></svg>`;\r\n\r\n public get id() {\r\n return this._id;\r\n }\r\n\r\n public get isCollapsed() {\r\n return this._isCollapsed;\r\n }\r\n\r\n private _createInputPort(port: NodePort, node: GraphNode) {\r\n const localPort = FrameNodePort.CreateFrameNodePortElement(\r\n port.portData,\r\n node,\r\n this._inputPortContainer,\r\n null,\r\n this._ownerCanvas.stateManager,\r\n true,\r\n GraphFrame._FramePortCounter++,\r\n this.id\r\n );\r\n this._frameInPorts.push(localPort);\r\n\r\n port.delegatedPort = localPort;\r\n this._controlledPorts.push(port);\r\n\r\n port.exposedPortPosition = this._exposedInPorts.findIndex((nodePort) => nodePort === port);\r\n if (port.exposedPortPosition < 0) {\r\n this._exposedInPorts.push(port);\r\n port.exposedPortPosition = this._exposedInPorts.length - 1;\r\n }\r\n }\r\n\r\n // Mark ports with FramePortPosition for re-arrangement support\r\n private _markFramePortPositions() {\r\n // mark FrameInPorts\r\n if (this._frameInPorts.length == 2) {\r\n this._frameInPorts[0].framePortPosition = FramePortPosition.Top;\r\n this._frameInPorts[1].framePortPosition = FramePortPosition.Bottom;\r\n } else {\r\n for (let i = 0; i < this._frameInPorts.length; i++) {\r\n const port = this._frameInPorts[i];\r\n if (i === 0) {\r\n port.framePortPosition = FramePortPosition.Top;\r\n } else if (i === this._frameInPorts.length - 1) {\r\n port.framePortPosition = FramePortPosition.Bottom;\r\n } else {\r\n port.framePortPosition = FramePortPosition.Middle;\r\n }\r\n }\r\n }\r\n\r\n // mark FrameOutPorts\r\n if (this._frameOutPorts.length == 2) {\r\n this._frameOutPorts[0].framePortPosition = FramePortPosition.Top;\r\n this._frameOutPorts[1].framePortPosition = FramePortPosition.Bottom;\r\n } else {\r\n for (let i = 0; i < this._frameOutPorts.length; i++) {\r\n const port = this._frameOutPorts[i];\r\n if (i === 0) {\r\n port.framePortPosition = FramePortPosition.Top;\r\n } else if (i === this._frameInPorts.length - 1) {\r\n port.framePortPosition = FramePortPosition.Bottom;\r\n } else {\r\n port.framePortPosition = FramePortPosition.Middle;\r\n }\r\n }\r\n }\r\n }\r\n\r\n private _createFramePorts() {\r\n for (const node of this._nodes) {\r\n node.isVisible = false;\r\n }\r\n\r\n for (let i = 0; i < this._exposedOutPorts.length;) {\r\n // Output\r\n const port = this._exposedOutPorts[i];\r\n if (port) {\r\n if (port.node === null || port.node.enclosingFrameId != this.id) {\r\n if (this._removePortFromExposedWithNode(port, this._exposedOutPorts)) {\r\n continue;\r\n }\r\n } else {\r\n if (!this._createOutputPorts(port, port.node) && this._removePortFromExposedWithNode(port, this._exposedOutPorts)) {\r\n continue;\r\n }\r\n }\r\n }\r\n ++i;\r\n }\r\n\r\n for (let i = 0; i < this._exposedInPorts.length;) {\r\n // Input\r\n const port = this._exposedInPorts[i];\r\n if (!port || port.node === null || port.node.enclosingFrameId != this.id) {\r\n if (this._removePortFromExposedWithNode(port, this._exposedInPorts)) {\r\n continue;\r\n }\r\n } else {\r\n if (!this._createInputPorts(port, port.node) && this._removePortFromExposedWithNode(port, this._exposedInPorts)) {\r\n continue;\r\n }\r\n }\r\n ++i;\r\n }\r\n\r\n for (const node of this._nodes) {\r\n for (const port of node.outputPorts) {\r\n // Output\r\n port.exposedPortPosition = this._exposedOutPorts.findIndex((nodePort) => nodePort === port);\r\n if (port.exposedPortPosition < 0) {\r\n if (this._createOutputPorts(port, node)) {\r\n port.node.enclosingFrameId = this.id;\r\n this._exposedOutPorts.push(port);\r\n port.exposedPortPosition = this._exposedOutPorts.length - 1;\r\n }\r\n }\r\n }\r\n for (const port of node.inputPorts) {\r\n // Input\r\n port.exposedPortPosition = this._exposedInPorts.findIndex((nodePort) => nodePort === port);\r\n if (port.exposedPortPosition < 0) {\r\n this._createInputPorts(port, node);\r\n }\r\n }\r\n }\r\n }\r\n\r\n private _removePortFromExposedWithNode(port: NodePort, exposedPorts: NodePort[]) {\r\n const index = exposedPorts.findIndex((nodePort) => nodePort === port);\r\n if (index >= 0) {\r\n exposedPorts.splice(index, 1);\r\n if (port) {\r\n port.exposedPortPosition = -1;\r\n }\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n private _removePortFromExposedWithLink(nodeLink: NodeLink, exposedPorts: NodePort[]) {\r\n const aPort = exposedPorts.findIndex((nodePort) => nodePort === nodeLink.portA);\r\n const bPort = exposedPorts.findIndex((nodePort) => nodePort === nodeLink.portB);\r\n if (aPort >= 0) {\r\n if (!nodeLink.portA.exposedOnFrame) {\r\n exposedPorts.splice(aPort, 1);\r\n nodeLink.portA.exposedPortPosition = -1;\r\n return true;\r\n }\r\n } else if (bPort >= 0) {\r\n if (nodeLink.portB && !nodeLink.portB.exposedOnFrame) {\r\n exposedPorts.splice(bPort, 1);\r\n nodeLink.portB.exposedPortPosition = -1;\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n private _createInputPorts(port: NodePort, node: GraphNode) {\r\n if (port.portData.isConnected) {\r\n let portAdded = false;\r\n for (const link of node.links) {\r\n if (link.portB === port && this.nodes.indexOf(link.nodeA) === -1) {\r\n this._createInputPort(port, node);\r\n link.isVisible = true;\r\n portAdded = true;\r\n const onLinkDisposedObserver = link.onDisposedObservable.add((nodeLink: NodeLink) => {\r\n if (this._removePortFromExposedWithLink(nodeLink, this._exposedInPorts)) {\r\n this.redrawFramePorts();\r\n }\r\n });\r\n this._onNodeLinkDisposedObservers.push(onLinkDisposedObserver);\r\n }\r\n }\r\n if (portAdded) {\r\n return true;\r\n }\r\n } else if (port.exposedOnFrame) {\r\n this._createInputPort(port, node);\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n private _createOutputPorts(port: NodePort, node: GraphNode) {\r\n if (port.portData.hasEndpoints) {\r\n let portAdded = false;\r\n for (const link of node.links) {\r\n if (link.portA === port && this.nodes.indexOf(link.nodeB!) === -1) {\r\n let localPort: FrameNodePort;\r\n\r\n if (!portAdded) {\r\n portAdded = true;\r\n localPort = FrameNodePort.CreateFrameNodePortElement(\r\n port.portData,\r\n link.nodeA,\r\n this._outputPortContainer,\r\n null,\r\n this._ownerCanvas.stateManager,\r\n false,\r\n GraphFrame._FramePortCounter++,\r\n this.id\r\n );\r\n this._frameOutPorts.push(localPort);\r\n\r\n link.isVisible = true;\r\n\r\n const onLinkDisposedObserver = link.onDisposedObservable.add((nodeLink: NodeLink) => {\r\n if (this._removePortFromExposedWithLink(nodeLink, this._exposedOutPorts)) {\r\n this.redrawFramePorts();\r\n }\r\n });\r\n\r\n this._onNodeLinkDisposedObservers.push(onLinkDisposedObserver);\r\n } else if (this.nodes.indexOf(link.nodeB!) === -1) {\r\n link.isVisible = true;\r\n localPort = this.ports.filter((p) => p.portData === port.portData)[0];\r\n } else {\r\n localPort = this.ports.filter((p) => p.portData === port.portData)[0];\r\n }\r\n port.delegatedPort = localPort;\r\n this._controlledPorts.push(port);\r\n } else if (port.exposedPortPosition >= 0 && !portAdded) {\r\n const localPort = FrameNodePort.CreateFrameNodePortElement(\r\n port.portData,\r\n node,\r\n this._outputPortContainer,\r\n null,\r\n this._ownerCanvas.stateManager,\r\n false,\r\n GraphFrame._FramePortCounter++,\r\n this.id\r\n );\r\n this._frameOutPorts.push(localPort);\r\n port.delegatedPort = localPort;\r\n this._controlledPorts.push(port);\r\n portAdded = true;\r\n }\r\n }\r\n if (portAdded) {\r\n return true;\r\n }\r\n } else if (port.exposedOnFrame) {\r\n const localPort = FrameNodePort.CreateFrameNodePortElement(\r\n port.portData,\r\n node,\r\n this._outputPortContainer,\r\n null,\r\n this._ownerCanvas.stateManager,\r\n false,\r\n GraphFrame._FramePortCounter++,\r\n this.id\r\n );\r\n this._frameOutPorts.push(localPort);\r\n port.delegatedPort = localPort;\r\n this._controlledPorts.push(port);\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public redrawFramePorts() {\r\n if (!this.isCollapsed) {\r\n return;\r\n }\r\n\r\n this._outputPortContainer.innerHTML = \"\";\r\n this._inputPortContainer.innerHTML = \"\";\r\n this.ports.forEach((framePort: FrameNodePort) => {\r\n framePort.dispose();\r\n });\r\n\r\n this._controlledPorts.forEach((port) => {\r\n port.delegatedPort = null;\r\n port.refresh();\r\n });\r\n\r\n this._frameInPorts = [];\r\n this._frameOutPorts = [];\r\n this._controlledPorts = [];\r\n\r\n this._createFramePorts();\r\n this._markFramePortPositions();\r\n this.ports.forEach((framePort: FrameNodePort) => framePort.node._refreshLinks());\r\n }\r\n\r\n public set isCollapsed(value: boolean) {\r\n if (this._isCollapsed === value) {\r\n return;\r\n }\r\n\r\n this._isCollapsed = value;\r\n this._ownerCanvas._frameIsMoving = true;\r\n\r\n // Need to delegate the outside ports to the frame\r\n if (value) {\r\n // Exit focus mode when collapsing\r\n if (this._isFocused) {\r\n this.switchFocusMode();\r\n }\r\n\r\n this.element.classList.add(styles.collapsed);\r\n this.element.classList.remove(styles.expanded);\r\n this._headerElement.classList.add(styles.collapsedHeader);\r\n\r\n this._moveFrame((this.width - this._collapsedWidth) / 2, 0);\r\n\r\n this._createFramePorts();\r\n\r\n this._markFramePortPositions();\r\n } else {\r\n this.element.classList.add(styles.expanded);\r\n this.element.classList.remove(styles.collapsed);\r\n this._headerElement.classList.remove(styles.collapsedHeader);\r\n\r\n this._outputPortContainer.innerHTML = \"\";\r\n this._inputPortContainer.innerHTML = \"\";\r\n\r\n this._frameInPorts.forEach((p) => {\r\n p.dispose();\r\n });\r\n\r\n this._frameOutPorts.forEach((p) => {\r\n p.dispose();\r\n });\r\n\r\n this._controlledPorts.forEach((port) => {\r\n port.delegatedPort = null;\r\n port.refresh();\r\n });\r\n\r\n this._frameInPorts = [];\r\n this._frameOutPorts = [];\r\n this._controlledPorts = [];\r\n this._onNodeLinkDisposedObservers = [];\r\n\r\n for (const node of this._nodes) {\r\n node.isVisible = true;\r\n }\r\n\r\n this._moveFrame(-(this.width - this._collapsedWidth) / 2, 0);\r\n }\r\n\r\n this.cleanAccumulation();\r\n this._ownerCanvas._frameIsMoving = false;\r\n\r\n // UI\r\n if (this._isCollapsed) {\r\n this._headerCollapseElement.innerHTML = this._expandSVG;\r\n this._headerCollapseElement.title = \"Expand (Shift+click for focus mode)\";\r\n } else {\r\n this._headerCollapseElement.innerHTML = this._collapseSVG;\r\n this._headerCollapseElement.title = \"Collapse\";\r\n }\r\n\r\n this.onExpandStateChanged.notifyObservers(this);\r\n }\r\n\r\n public get nodes() {\r\n return this._nodes;\r\n }\r\n\r\n public get ports() {\r\n return this._frameInPorts.concat(this._frameOutPorts);\r\n }\r\n\r\n public get name() {\r\n return this._name;\r\n }\r\n\r\n public set name(value: string) {\r\n this._name = value;\r\n this._headerTextElement.innerHTML = value;\r\n }\r\n\r\n public get color() {\r\n return this._color;\r\n }\r\n\r\n public set color(value: Color3) {\r\n this._color = value;\r\n this._headerElement.style.background = `rgba(${value.r * 255}, ${value.g * 255}, ${value.b * 255}, 1)`;\r\n this._headerElement.style.borderColor = `rgba(${value.r * 255}, ${value.g * 255}, ${value.b * 255}, 1)`;\r\n this.element.style.background = `rgba(${value.r * 255}, ${value.g * 255}, ${value.b * 255}, 0.7)`;\r\n }\r\n\r\n public get x() {\r\n return this._x;\r\n }\r\n\r\n public set x(value: number) {\r\n if (this._x === value) {\r\n return;\r\n }\r\n this._x = value;\r\n\r\n this._gridAlignedX = this._ownerCanvas.getGridPosition(value);\r\n this.element.style.left = `${this._gridAlignedX}px`;\r\n }\r\n\r\n public get y() {\r\n return this._y;\r\n }\r\n\r\n public set y(value: number) {\r\n if (this._y === value) {\r\n return;\r\n }\r\n\r\n this._y = value;\r\n\r\n this._gridAlignedY = this._ownerCanvas.getGridPosition(value);\r\n this.element.style.top = `${this._gridAlignedY}px`;\r\n }\r\n\r\n public get width() {\r\n return this._width;\r\n }\r\n\r\n public set width(value: number) {\r\n if (this._width === value) {\r\n return;\r\n }\r\n const viableWidth = value > this._minFrameWidth ? value : this._minFrameWidth;\r\n this._width = viableWidth;\r\n\r\n const gridAlignedRight = this._ownerCanvas.getGridPositionCeil(viableWidth + this._gridAlignedX);\r\n\r\n this.element.style.width = `${gridAlignedRight - this._gridAlignedX}px`;\r\n }\r\n\r\n public get height() {\r\n return this._height;\r\n }\r\n\r\n public set height(value: number) {\r\n if (this._height === value) {\r\n return;\r\n }\r\n this._height = value;\r\n\r\n const gridAlignedBottom = this._ownerCanvas.getGridPositionCeil(value + this._gridAlignedY);\r\n\r\n this.element.style.height = `${gridAlignedBottom - this._gridAlignedY}px`;\r\n }\r\n\r\n public get comments(): string {\r\n return this._comments;\r\n }\r\n\r\n public set comments(comments: string) {\r\n if (comments && !this._comments && comments.length > 0) {\r\n this.element.style.gridTemplateRows = \"40px min-content 1fr\";\r\n this._borderElement.style.gridRow = \"1 / span 3\";\r\n this._portContainer.style.gridRow = \"3\";\r\n this._commentsElement.classList.add(\"has-comments\");\r\n } else if (!comments) {\r\n this.element.style.gridTemplateRows = \"40px calc(100% - 40px)\";\r\n this._borderElement.style.gridRow = \"1 / span 2\";\r\n this._portContainer.style.gridRow = \"2\";\r\n this._commentsElement.classList.remove(\"has-comments\");\r\n }\r\n\r\n if (comments === \"\" || (comments && comments.length >= 0)) {\r\n (this._commentsElement.children[0] as HTMLSpanElement).innerText = comments;\r\n }\r\n this.height = this._borderElement.offsetHeight;\r\n this._comments = comments;\r\n this._updateMinHeightWithComments();\r\n }\r\n\r\n public constructor(candidate: Nullable<HTMLDivElement>, canvas: GraphCanvasComponent, doNotCaptureNodes = false) {\r\n this._id = GraphFrame._FrameCounter++;\r\n\r\n this._ownerCanvas = canvas;\r\n const root = canvas.frameContainer;\r\n this.element = root.ownerDocument.createElement(\"div\");\r\n this.element.classList.add(commonStyles[\"frame-box\"]);\r\n root.appendChild(this.element);\r\n\r\n this._headerElement = root.ownerDocument.createElement(\"div\");\r\n this._headerElement.classList.add(styles[\"frame-box-header\"]);\r\n this._headerElement.addEventListener(\"dblclick\", () => {\r\n this.isCollapsed = !this.isCollapsed;\r\n });\r\n this.element.appendChild(this._headerElement);\r\n\r\n this._borderElement = root.ownerDocument.createElement(\"div\");\r\n this._borderElement.classList.add(styles[\"frame-box-border\"]);\r\n\r\n this.element.appendChild(this._borderElement);\r\n\r\n this.element.classList.add(styles.expanded);\r\n\r\n // add resizing side handles\r\n\r\n const rightHandle: HTMLDivElement = root.ownerDocument.createElement(\"div\");\r\n rightHandle.className = styles[\"right-handle\"];\r\n this.element.appendChild(rightHandle);\r\n rightHandle.addEventListener(\"pointerdown\", this._onRightHandlePointerDown);\r\n\r\n const leftHandle: HTMLDivElement = root.ownerDocument.createElement(\"div\");\r\n leftHandle.className = styles[\"left-handle\"];\r\n this.element.appendChild(leftHandle);\r\n leftHandle.addEventListener(\"pointerdown\", this._onLeftHandlePointerDown);\r\n\r\n const bottomHandle: HTMLDivElement = root.ownerDocument.createElement(\"div\");\r\n bottomHandle.className = styles[\"bottom-handle\"];\r\n this.element.appendChild(bottomHandle);\r\n bottomHandle.addEventListener(\"pointerdown\", this._onBottomHandlePointerDown);\r\n\r\n const topHandle: HTMLDivElement = root.ownerDocument.createElement(\"div\");\r\n topHandle.className = styles[\"top-handle\"];\r\n this.element.appendChild(topHandle);\r\n topHandle.addEventListener(\"pointerdown\", this._onTopHandlePointerDown);\r\n\r\n const topRightCornerHandle: HTMLDivElement = root.ownerDocument.createElement(\"div\");\r\n topRightCornerHandle.className = ClassNames({ \"right-handle\": true, \"top-right-corner-handle\": true }, styles);\r\n this.element.appendChild(topRightCornerHandle);\r\n topRightCornerHandle.addEventListener(\"pointerdown\", this._onTopRightHandlePointerDown);\r\n\r\n const bottomRightCornerHandle: HTMLDivElement = root.ownerDocument.createElement(\"div\");\r\n bottomRightCornerHandle.className = ClassNames({ \"right-handle\": true, \"bottom-right-corner-handle\": true }, styles);\r\n this.element.appendChild(bottomRightCornerHandle);\r\n bottomRightCornerHandle.addEventListener(\"pointerdown\", this._onBottomRightHandlePointerDown);\r\n\r\n const topLeftCornerHandle: HTMLDivElement = root.ownerDocument.createElement(\"div\");\r\n topLeftCornerHandle.className = ClassNames({ \"left-handle\": true, \"top-left-corner-handle\": true }, styles);\r\n this.element.appendChild(topLeftCornerHandle);\r\n topLeftCornerHandle.addEventListener(\"pointerdown\", this._onTopLeftHandlePointerDown);\r\n\r\n const bottomLeftCornerHandle: HTMLDivElement = root.ownerDocument.createElement(\"div\");\r\n bottomLeftCornerHandle.className = ClassNames({ \"left-handle\": true, \"bottom-left-corner-handle\": true }, styles);\r\n this.element.appendChild(bottomLeftCornerHandle);\r\n bottomLeftCornerHandle.addEventListener(\"pointerdown\", this._onBottomLeftHandlePointerDown);\r\n\r\n // add header elements\r\n\r\n this._headerTextElement = root.ownerDocument.createElement(\"div\");\r\n this._headerTextElement.classList.add(styles[\"frame-box-header-title\"]);\r\n this._headerElement.appendChild(this._headerTextElement);\r\n\r\n // Collapse\r\n this._headerCollapseElement = root.ownerDocument.createElement(\"div\");\r\n this._headerCollapseElement.classList.add(styles[\"frame-box-header-collapse\"]);\r\n this._headerCollapseElement.classList.add(styles[\"frame-box-header-button\"]);\r\n this._headerCollapseElement.title = \"Collapse\";\r\n this._headerCollapseElement.ondragstart = () => false;\r\n this._headerCollapseElement.addEventListener(\"pointerdown\", (evt) => {\r\n this._headerCollapseElement.classList.add(\"down\");\r\n evt.stopPropagation();\r\n });\r\n this._headerCollapseElement.addEventListener(\"pointerup\", (evt) => {\r\n evt.stopPropagation();\r\n this._headerCollapseElement.classList.remove(\"down\");\r\n if (evt.shiftKey) {\r\n // Shift+click toggles focus mode without changing collapse state\r\n if (this._isCollapsed) {\r\n this.isCollapsed = false;\r\n }\r\n this.switchFocusMode();\r\n } else {\r\n this.isCollapsed = !this.isCollapsed;\r\n }\r\n });\r\n this._headerCollapseElement.innerHTML = this._collapseSVG;\r\n this._headerElement.appendChild(this._headerCollapseElement);\r\n\r\n // Close\r\n this._headerCloseElement = root.ownerDocument.createElement(\"div\");\r\n this._headerCloseElement.classList.add(styles[\"frame-box-header-close\"]);\r\n this._headerCloseElement.classList.add(styles[\"frame-box-header-button\"]);\r\n this._headerCloseElement.title = \"Close\";\r\n this._headerCloseElement.ondragstart = () => false;\r\n this._headerCloseElement.addEventListener(\"pointerdown\", (evt) => {\r\n evt.stopPropagation();\r\n });\r\n this._headerCloseElement.addEventListener(\"pointerup\", (evt) => {\r\n evt.stopPropagation();\r\n this.dispose();\r\n });\r\n this._headerCloseElement.innerHTML = this._closeSVG;\r\n this._headerElement.appendChild(this._headerCloseElement);\r\n\r\n this._portContainer = root.ownerDocument.createElement(\"div\");\r\n this._portContainer.classList.add(styles[\"port-container\"]);\r\n this.element.appendChild(this._portContainer);\r\n\r\n this._outputPortContainer = root.ownerDocument.createElement(\"div\");\r\n this._outputPortContainer.classList.add(commonStyles[\"outputsContainer\"]);\r\n this._portContainer.appendChild(this._outputPortContainer);\r\n\r\n this._inputPortContainer = root.ownerDocument.createElement(\"div\");\r\n this._inputPortContainer.classList.add(commonStyles[\"inputsContainer\"], commonStyles[\"inputsContainerUp\"]);\r\n this._portContainer.appendChild(this._inputPortContainer);\r\n\r\n this.name = \"Frame\";\r\n this.color = Color3.FromInts(72, 72, 72);\r\n\r\n if (candidate) {\r\n this.x = parseFloat(candidate.style.left.replace(\"px\", \"\"));\r\n this.y = parseFloat(candidate.style.top.replace(\"px\", \"\"));\r\n this.width = parseFloat(candidate.style.width.replace(\"px\", \"\"));\r\n this.height = parseFloat(candidate.style.height.replace(\"px\", \"\"));\r\n\r\n this.cleanAccumulation();\r\n }\r\n\r\n this._headerTextElement.addEventListener(\"pointerdown\", (evt) => this._onDown(evt));\r\n this._headerTextElement.addEventListener(\"pointerup\", (evt) => this._onUp(evt));\r\n this._headerTextElement.addEventListener(\"pointermove\", (evt) => this._onMove(evt));\r\n\r\n this._onSelectionChangedObserver = canvas.stateManager.onSelectionChangedObservable.add(() => {\r\n if (this._ownerCanvas.selectedFrames.indexOf(this) !== -1) {\r\n this._borderElement.classList.add(styles[\"selected\"]);\r\n } else {\r\n this._borderElement.classList.remove(styles[\"selected\"]);\r\n }\r\n });\r\n\r\n canvas.stateManager.onSelectionBoxMoved.add((rect1) => {\r\n const rect2 = this.element.getBoundingClientRect();\r\n const overlap = !(rect1.right < rect2.left || rect1.left > rect2.right || rect1.bottom < rect2.top || rect1.top > rect2.bottom);\r\n if (overlap) {\r\n canvas.stateManager.onSelectionChangedObservable.notifyObservers({ selection: this, forceKeepSelection: true, marqueeSelection: true });\r\n }\r\n });\r\n\r\n this._onGraphNodeRemovalObserver = canvas.stateManager.onGraphNodeRemovalObservable.add((node: GraphNode) => {\r\n // remove node from this._nodes\r\n const index = this._nodes.indexOf(node);\r\n if (index === -1) {\r\n return;\r\n } else {\r\n node.enclosingFrameId = -1;\r\n this._nodes.splice(index, 1);\r\n }\r\n });\r\n\r\n this._onExposePortOnFrameObserver = canvas.stateManager.onExposePortOnFrameObservable.add((node: GraphNode) => {\r\n if (this.nodes.indexOf(node) === -1) {\r\n return;\r\n }\r\n this.redrawFramePorts();\r\n });\r\n\r\n this._commentsElement = document.createElement(\"div\");\r\n this._commentsElement.className = styles[\"frame-comments\"];\r\n this._commentsElement.style.color = \"white\";\r\n this._commentsElement.style.fontSize = \"16px\";\r\n const commentSpan = document.createElement(\"span\");\r\n commentSpan.className = styles[\"frame-comment-span\"];\r\n this._commentsElement.appendChild(commentSpan);\r\n\r\n this.element.appendChild(this._commentsElement);\r\n\r\n // Get nodes\r\n if (!doNotCaptureNodes) {\r\n this.refresh();\r\n }\r\n }\r\n\r\n private _isFocused = false;\r\n /**\r\n * Enter/leave focus mode\r\n */\r\n public switchFocusMode() {\r\n if (this._isFocused) {\r\n this._isFocused = false;\r\n for (const node of this._ownerCanvas.nodes) {\r\n if (this._nodes.indexOf(node) === -1) {\r\n node.rootElement.style.transition = \"\";\r\n node.rootElement.style.opacity = \"\";\r\n node.rootElement.style.pointerEvents = \"\";\r\n }\r\n }\r\n for (const link of this._ownerCanvas.links) {\r\n link.path.style.transition = \"\";\r\n link.path.style.opacity = \"\";\r\n link.selectionPath.style.pointerEvents = \"\";\r\n }\r\n for (const frame of this._ownerCanvas.frames) {\r\n if (frame !== this) {\r\n frame.element.style.transition = \"\";\r\n frame.element.style.opacity = \"\";\r\n frame.element.style.pointerEvents = \"\";\r\n }\r\n }\r\n return;\r\n }\r\n this._isFocused = true;\r\n\r\n for (const node of this._ownerCanvas.nodes) {\r\n if (this._nodes.indexOf(node) === -1) {\r\n node.rootElement.style.transition = \"opacity 0.5s\";\r\n node.rootElement.style.opacity = \"0.05\";\r\n node.rootElement.style.pointerEvents = \"none\";\r\n }\r\n }\r\n for (const link of this._ownerCanvas.links) {\r\n if (this._nodes.indexOf(link.nodeA) === -1 || this._nodes.indexOf(link.nodeB!) === -1) {\r\n link.path.style.transition = \"opacity 0.5s\";\r\n link.path.style.opacity = \"0.3\";\r\n link.selectionPath.style.pointerEvents = \"none\";\r\n }\r\n if (this._nodes.indexOf(link.nodeA) === -1 && this._nodes.indexOf(link.nodeB!) === -1) {\r\n link.path.style.transition = \"opacity 0.5s\";\r\n link.path.style.opacity = \"0.05\";\r\n link.selectionPath.style.pointerEvents = \"none\";\r\n }\r\n }\r\n\r\n for (const frame of this._ownerCanvas.frames) {\r\n if (frame !== this) {\r\n frame.element.style.transition = \"opacity 0.5s\";\r\n frame.element.style.opacity = \"0.05\";\r\n frame.element.style.pointerEvents = \"none\";\r\n }\r\n }\r\n }\r\n\r\n public refresh() {\r\n if (this._isFocused) {\r\n return;\r\n }\r\n this._nodes = [];\r\n this._ownerCanvas.stateManager.onFrameCreatedObservable.notifyObservers(this);\r\n }\r\n\r\n public addNode(node: GraphNode) {\r\n const index = this.nodes.indexOf(node);\r\n\r\n if (index === -1) {\r\n this.nodes.push(node);\r\n }\r\n }\r\n\r\n public removeNode(node: GraphNode) {\r\n const index = this.nodes.indexOf(node);\r\n if (index > -1) {\r\n node.enclosingFrameId = -1;\r\n this.nodes.splice(index, 1);\r\n }\r\n }\r\n\r\n public syncNode(node: GraphNode) {\r\n if (this.isCollapsed) {\r\n return;\r\n }\r\n\r\n if (node.isOverlappingFrame(this)) {\r\n this.addNode(node);\r\n } else {\r\n this.removeNode(node);\r\n }\r\n }\r\n\r\n public cleanAccumulation() {\r\n for (const selectedNode of this._nodes) {\r\n selectedNode.cleanAccumulation();\r\n }\r\n\r\n this.x = this._ownerCanvas.getGridPosition(this.x);\r\n this.y = this._ownerCanvas.getGridPosition(this.y);\r\n }\r\n\r\n private _onDown(evt: PointerEvent) {\r\n this._headerTextElement.setPointerCapture(evt.pointerId);\r\n\r\n const indexInSelection = this._ownerCanvas.selectedFrames.indexOf(this);\r\n if (indexInSelection === -1) {\r\n this._ownerCanvas.stateManager.onSelectionChangedObservable.notifyObservers({ selection: this });\r\n } else if (evt.ctrlKey) {\r\n this._ownerCanvas.selectedFrames.splice(indexInSelection, 1);\r\n this.element.classList.remove(\"selected\");\r\n }\r\n this._ownerCanvas._frameIsMoving = true;\r\n\r\n this._mouseStartPointX = evt.clientX;\r\n this._mouseStartPointY = evt.clientY;\r\n\r\n evt.stopPropagation();\r\n }\r\n\r\n public move(newX: number, newY: number, align = true) {\r\n const oldX = this.x;\r\n const oldY = this.y;\r\n\r\n this.x = newX;\r\n this.y = newY;\r\n\r\n for (const selectedNode of this._nodes) {\r\n selectedNode.x += this.x - oldX;\r\n selectedNode.y += this.y - oldY;\r\n if (align) {\r\n selectedNode.cleanAccumulation(true);\r\n }\r\n }\r\n }\r\n\r\n private _onUp(evt: PointerEvent) {\r\n evt.stopPropagation();\r\n\r\n this.cleanAccumulation();\r\n this._mouseStartPointX = null;\r\n this._mouseStartPointY = null;\r\n this._headerTextElement.releasePointerCapture(evt.pointerId);\r\n\r\n this._ownerCanvas._frameIsMoving = false;\r\n }\r\n\r\n public _moveFrame(offsetX: number, offsetY: number) {\r\n this.x += offsetX;\r\n this.y += offsetY;\r\n\r\n for (const selectedNode of this._nodes) {\r\n selectedNode.x += offsetX;\r\n selectedNode.y += offsetY;\r\n }\r\n }\r\n\r\n private _onMove(evt: PointerEvent) {\r\n if (this._mouseStartPointX === null || this._mouseStartPointY === null || evt.ctrlKey || this._frameIsResizing) {\r\n return;\r\n }\r\n\r\n const newX = (evt.clientX - this._mouseStartPointX) / this._ownerCanvas.zoom;\r\n const newY = (evt.clientY - this._mouseStartPointY) / this._ownerCanvas.zoom;\r\n\r\n for (const frame of this._ownerCanvas.selectedFrames) {\r\n frame._moveFrame(newX, newY);\r\n }\r\n for (const node of this._ownerCanvas.selectedNodes) {\r\n node.x += newX;\r\n node.y += newY;\r\n }\r\n\r\n this._mouseStartPointX = evt.clientX;\r\n this._mouseStartPointY = evt.clientY;\r\n\r\n evt.stopPropagation();\r\n }\r\n\r\n public moveFramePortUp(nodePort: FrameNodePort) {\r\n let elementsArray: ChildNode[];\r\n if (nodePort.isInput) {\r\n if (this._inputPortContainer.children.length < 2) {\r\n return;\r\n }\r\n elementsArray = Array.from(this._inputPortContainer.childNodes);\r\n const indexInContainer = this._frameInPorts.findIndex((framePort) => framePort === nodePort);\r\n [this._exposedInPorts[indexInContainer - 1], this._exposedInPorts[indexInContainer]] = [\r\n this._exposedInPorts[indexInContainer],\r\n this._exposedInPorts[indexInContainer - 1],\r\n ]; // swap idicies\r\n this._movePortUp(elementsArray, nodePort, this._frameInPorts);\r\n } else {\r\n if (this._outputPortContainer.children.length < 2) {\r\n return;\r\n }\r\n elementsArray = Array.from(this._outputPortContainer.childNodes);\r\n const indexInContainer = this._frameOutPorts.findIndex((framePort) => framePort === nodePort);\r\n [this._exposedOutPorts[indexInContainer - 1], this._exposedOutPorts[indexInContainer]] = [\r\n this._exposedOutPorts[indexInContainer],\r\n this._exposedOutPorts[indexInContainer - 1],\r\n ]; // swap idicies\r\n this._movePortUp(elementsArray, nodePort, this._frameOutPorts);\r\n }\r\n this.ports.forEach((framePort: FrameNodePort) => framePort.node._refreshLinks());\r\n }\r\n\r\n private _movePortUp(elementsArray: ChildNode[], nodePort: FrameNodePort, framePortList: FrameNodePort[]) {\r\n // update UI\r\n const indexInElementArray = (elementsArray as HTMLElement[]).findIndex((elem) => elem.dataset.framePortId === `${nodePort.framePortId}`);\r\n if (indexInElementArray === 0) {\r\n return;\r\n }\r\n const secondPortElement = elementsArray[indexInElementArray];\r\n const firstPortElement = elementsArray[indexInElementArray - 1];\r\n firstPortElement.parentElement?.insertBefore(secondPortElement, firstPortElement);\r\n\r\n // update Frame Port Container\r\n const indexInContainer = framePortList.findIndex((framePort) => framePort === nodePort);\r\n [framePortList[indexInContainer - 1], framePortList[indexInContainer]] = [framePortList[indexInContainer], framePortList[indexInContainer - 1]]; // swap idicies\r\n\r\n //special case framePortList.length == 2\r\n if (framePortList.length == 2) {\r\n framePortList[1].framePortPosition = FramePortPosition.Bottom;\r\n framePortList[0].framePortPosition = FramePortPosition.Top;\r\n } else {\r\n // notify nodePort if it is now at Top (indexInElementArray === 1)\r\n if (indexInElementArray === 1) {\r\n framePortList[1].framePortPosition = FramePortPosition.Middle;\r\n framePortList[0].framePortPosition = FramePortPosition.Top;\r\n } else if (indexInContainer === elementsArray.length - 1) {\r\n framePortList[framePortList.length - 1].framePortPosition = FramePortPosition.Bottom;\r\n framePortList[framePortList.length - 2].framePortPosition = FramePortPosition.Middle;\r\n } else {\r\n nodePort.framePortPosition = FramePortPosition.Middle;\r\n }\r\n }\r\n }\r\n\r\n public moveFramePortDown(nodePort: FrameNodePort) {\r\n let elementsArray: ChildNode[];\r\n if (nodePort.isInput) {\r\n if (this._inputPortContainer.children.length < 2) {\r\n return;\r\n }\r\n elementsArray = Array.from(this._inputPortContainer.childNodes);\r\n const indexInContainer = this._frameInPorts.findIndex((framePort) => framePort === nodePort);\r\n [this._exposedInPorts[indexInContainer], this._exposedInPorts[indexInContainer + 1]] = [\r\n this._exposedInPorts[indexInContainer + 1],\r\n this._exposedInPorts[indexInContainer],\r\n ]; // swap idicies\r\n this._movePortDown(elementsArray, nodePort, this._frameInPorts);\r\n } else {\r\n if (this._outputPortContainer.children.length < 2) {\r\n return;\r\n }\r\n elementsArray = Array.from(this._outputPortContainer.childNodes);\r\n const indexInContainer = this._frameOutPorts.findIndex((framePort) => framePort === nodePort);\r\n [this._exposedOutPorts[indexInContainer], this._exposedOutPorts[indexInContainer + 1]] = [\r\n this._exposedOutPorts[indexInContainer + 1],\r\n this._exposedOutPorts[indexInContainer],\r\n ]; // swap idicies\r\n this._movePortDown(elementsArray, nodePort, this._frameOutPorts);\r\n }\r\n\r\n this.ports.forEach((framePort: FrameNodePort) => framePort.node._refreshLinks());\r\n }\r\n\r\n private _movePortDown(elementsArray: ChildNode[], nodePort: FrameNodePort, framePortList: FrameNodePort[]) {\r\n // update UI\r\n const indexInElementArray = (elementsArray as HTMLElement[]).findIndex((elem) => elem.dataset.framePortId === `${nodePort.framePortId}`);\r\n if (indexInElementArray === elementsArray.length - 1) {\r\n return;\r\n }\r\n const firstPort = elementsArray[indexInElementArray];\r\n const secondPort = elementsArray[indexInElementArray + 1];\r\n firstPort.parentElement?.insertBefore(secondPort, firstPort);\r\n\r\n // update Frame Port Container\r\n const indexInContainer = framePortList.findIndex((framePort) => framePort === nodePort);\r\n [framePortList[indexInContainer], framePortList[indexInContainer + 1]] = [framePortList[indexInContainer + 1], framePortList[indexInContainer]]; // swap idicies\r\n\r\n // notify nodePort if it is now at bottom (indexInContainer === elementsArray.length-2)\r\n if (framePortList.length == 2) {\r\n framePortList[0].framePortPosition = FramePortPosition.Top;\r\n framePortList[1].framePortPosition = FramePortPosition.Bottom;\r\n } else {\r\n if (indexInContainer === elementsArray.length - 2) {\r\n framePortList[elementsArray.length - 2].framePortPosition = FramePortPosition.Middle;\r\n framePortList[elementsArray.length - 1].framePortPosition = FramePortPosition.Bottom;\r\n } else if (indexInContainer === 0) {\r\n framePortList[0].framePortPosition = FramePortPosition.Top;\r\n framePortList[1].framePortPosition = FramePortPosition.Middle;\r\n } else {\r\n nodePort.framePortPosition = FramePortPosition.Middle;\r\n }\r\n }\r\n }\r\n\r\n private _initResizing = (evt: PointerEvent) => {\r\n evt.stopPropagation();\r\n this._mouseStartPointX = evt.clientX;\r\n this._mouseStartPointY = evt.clientY;\r\n this._frameIsResizing = true;\r\n };\r\n\r\n private _cleanUpResizing = (evt: PointerEvent) => {\r\n evt.stopPropagation();\r\n this._frameIsResizing = false;\r\n this._resizingDirection = null;\r\n this._mouseStartPointX = null;\r\n this._mouseStartPointY = null;\r\n this._mouseXLimit = null;\r\n this.refresh();\r\n };\r\n\r\n private _updateMinHeightWithComments = () => {\r\n if (this.comments && this.comments.length > 0) {\r\n const minFrameHeightWithComments = this._commentsElement.offsetHeight + 40;\r\n this._minFrameHeight = minFrameHeightWithComments;\r\n }\r\n };\r\n\r\n private _isResizingTop() {\r\n return this._resizingDirection === ResizingDirection.Top || this._resizingDirection === ResizingDirection.TopRight || this._resizingDirection === ResizingDirection.TopLeft;\r\n }\r\n\r\n private _isResizingRight() {\r\n return (\r\n this._resizingDirection === ResizingDirection.Right ||\r\n this._resizingDirection === ResizingDirection.TopRight ||\r\n this._resizingDirection === ResizingDirection.BottomRight\r\n );\r\n }\r\n\r\n private _isResizingBottom() {\r\n return (\r\n this._resizingDirection === ResizingDirection.Bottom ||\r\n this._resizingDirection === ResizingDirection.BottomLeft ||\r\n this._resizingDirection === ResizingDirection.BottomRight\r\n );\r\n }\r\n\r\n private _isResizingLeft() {\r\n return (\r\n this._resizingDirection === ResizingDirection.Left || this._resizingDirection === ResizingDirection.TopLeft || this._resizingDirection === ResizingDirection.BottomLeft\r\n );\r\n }\r\n\r\n private _onRightHandlePointerDown = (evt: PointerEvent) => {\r\n if (this.isCollapsed) {\r\n return;\r\n }\r\n this._initResizing(evt);\r\n this._resizingDirection = ResizingDirection.Right;\r\n this._mouseXLimit = evt.clientX - (this.width - this._minFrameWidth);\r\n this._ownerCanvas.hostCanvas.addEventListener(\"pointerup\", this._onRightHandlePointerUp);\r\n this._ownerCanvas.hostCanvas.addEventListener(\"pointermove\", this._onRightHandlePointerMove);\r\n };\r\n\r\n private _onRightHandlePointerMove = (evt: PointerEvent) => {\r\n const slack = (this.element.offsetWidth - this._minFrameWidth) * this._ownerCanvas.zoom;\r\n const xLimit = (this._mouseStartPointX as number) - slack;\r\n this._moveRightHandle(evt, xLimit);\r\n };\r\n\r\n private _moveRightHandle = (evt: PointerEvent, xLimit: number) => {\r\n // tslint:disable-next-line: no-this-assignment\r\n if (this._mouseXLimit) {\r\n if (!this._isResizingRight() || this._mouseStartPointX === null || this._mouseStartPointY === null || evt.clientX < xLimit) {\r\n return;\r\n }\r\n if (this._isResizingRight()) {\r\n evt.stopPropagation();\r\n const distanceMouseMoved = (evt.clientX - this._mouseStartPointX) / this._ownerCanvas.zoom;\r\n this._expandRight(distanceMouseMoved, evt.clientX);\r\n this._mouseStartPointX = evt.clientX;\r\n }\r\n }\r\n };\r\n\r\n private _onRightHandlePointerUp = (evt: PointerEvent) => {\r\n if (this._isResizingRight()) {\r\n this.width = parseFloat(this.element.style.width.replace(\"px\", \"\"));\r\n this._ownerCanvas.hostCanvas.removeEventListener(\"pointerup\", this._onRightHandlePointerUp);\r\n this._ownerCanvas.hostCanvas.removeEventListener(\"pointermove\", this._onRightHandlePointerMove);\r\n this._cleanUpResizing(evt);\r\n }\r\n };\r\n\r\n private _onBottomHandlePointerDown = (evt: PointerEvent) => {\r\n if (this.isCollapsed) {\r\n return;\r\n }\r\n this._initResizing(evt);\r\n this._resizingDirection = ResizingDirection.Bottom;\r\n this._ownerCanvas.hostCanvas.addEventListener(\"pointermove\", this._onBottomHandlePointerMove);\r\n this._ownerCanvas.hostCanvas.addEventListener(\"pointerup\", this._onBottomHandlePointerUp);\r\n };\r\n\r\n private _onBottomHandlePointerMove = (evt: PointerEvent) => {\r\n const slack = (this.element.offsetHeight - this._minFrameHeight) * this._ownerCanvas.zoom;\r\n const yLimit = (this._mouseStartPointY as number) - slack;\r\n this._moveBottomHandle(evt, yLimit);\r\n };\r\n\r\n private _moveBottomHandle = (evt: PointerEvent, yLimit: number) => {\r\n if (this._resizingDirection !== ResizingDirection.Bottom || this._mouseStartPointX === null || this._mouseStartPointY === null || evt.clientY < yLimit) {\r\n return;\r\n }\r\n if (this._resizingDirection === ResizingDirection.Bottom) {\r\n evt.stopPropagation();\r\n const distanceMouseMoved = (evt.clientY - this._mouseStartPointY) / this._ownerCanvas.zoom;\r\n this._expandBottom(distanceMouseMoved);\r\n this._mouseStartPointY = evt.clientY;\r\n }\r\n };\r\n\r\n private _onBottomHandlePointerUp = (evt: PointerEvent) => {\r\n if (this._resizingDirection === ResizingDirection.Bottom) {\r\n this.height = parseFloat(this.element.style.height.replace(\"px\", \"\"));\r\n this._ownerCanvas.hostCanvas.removeEventListener(\"pointermove\", this._onBottomHandlePointerMove);\r\n this._ownerCanvas.hostCanvas.removeEventListener(\"pointerup\", this._onBottomHandlePointerUp);\r\n this._cleanUpResizing(evt);\r\n }\r\n };\r\n\r\n private _onLeftHandlePointerDown = (evt: PointerEvent) => {\r\n if (this.isCollapsed) {\r\n return;\r\n }\r\n this._initResizing(evt);\r\n this._resizingDirection = ResizingDirection.Left;\r\n this._mouseXLimit = evt.clientX + this.width - this._minFrameWidth;\r\n this._ownerCanvas.hostCanvas.addEventListener(\"pointerup\", this._onLeftHandlePointerUp);\r\n this._ownerCanvas.hostCanvas.addEventListener(\"pointermove\", this._onLeftHandlePointerMove);\r\n };\r\n\r\n private _onLeftHandlePointerMove = (evt: PointerEvent) => {\r\n const slack = (this.element.offsetWidth - this._minFrameWidth) * this._ownerCanvas.zoom;\r\n const xLimit = (this._mouseStartPointX as number) + slack;\r\n this._moveLeftHandle(evt, xLimit);\r\n };\r\n\r\n private _moveLeftHandle = (evt: PointerEvent, xLimit: number) => {\r\n if (this._mouseXLimit) {\r\n if (this._resizingDirection !== ResizingDirection.Left || this._mouseStartPointX === null || this._mouseStartPointY === null || evt.clientX > xLimit) {\r\n return;\r\n }\r\n if (this._resizingDirection === ResizingDirection.Left) {\r\n evt.stopPropagation();\r\n const distanceMouseMoved = (evt.clientX - this._mouseStartPointX) / this._ownerCanvas.zoom;\r\n this._expandLeft(distanceMouseMoved);\r\n this._mouseStartPointX = evt.clientX;\r\n }\r\n }\r\n };\r\n\r\n private _onLeftHandlePointerUp = (evt: PointerEvent) => {\r\n if (this._resizingDirection === ResizingDirection.Left) {\r\n this.x = parseFloat(this.element.style.left.replace(\"px\", \"\"));\r\n this.width = parseFloat(this.element.style.width.replace(\"px\", \"\"));\r\n this._ownerCanvas.hostCanvas.removeEventListener(\"pointerup\", this._onLeftHandlePointerUp);\r\n this._ownerCanvas.hostCanvas.removeEventListener(\"pointermove\", this._onLeftHandlePointerMove);\r\n this._cleanUpResizing(evt);\r\n }\r\n };\r\n\r\n private _onTopHandlePointerDown = (evt: PointerEvent) => {\r\n if (this.isCollapsed) {\r\n return;\r\n }\r\n this._initResizing(evt);\r\n this._resizingDirection = ResizingDirection.Top;\r\n this._ownerCanvas.hostCanvas.addEventListener(\"pointerup\", this._onTopHandlePointerUp);\r\n this._ownerCanvas.hostCanvas.addEventListener(\"pointermove\", this._onTopHandlePointerMove);\r\n };\r\n\r\n private _onTopHandlePointerMove = (evt: PointerEvent) => {\r\n const slack = (this.element.offsetHeight - this._minFrameHeight) * this._ownerCanvas.zoom;\r\n const yLimit = (this._mouseStartPointY as number) + slack;\r\n this._moveTopHandle(evt, yLimit);\r\n };\r\n\r\n private _moveTopHandle = (evt: PointerEvent, yLimit: number) => {\r\n if (!this._isResizingTop() || this._mouseStartPointX === null || this._mouseStartPointY === null || evt.clientY > yLimit) {\r\n return;\r\n }\r\n if (this._isResizingTop()) {\r\n evt.stopPropagation();\r\n const distanceMouseMoved = (evt.clientY - this._mouseStartPointY) / this._ownerCanvas.zoom;\r\n this._expandTop(distanceMouseMoved);\r\n this._mouseStartPointY = evt.clientY;\r\n }\r\n };\r\n\r\n private _onTopHandlePointerUp = (evt: PointerEvent) => {\r\n if (this._isResizingTop()) {\r\n this.y = parseFloat(this.element.style.top.replace(\"px\", \"\"));\r\n this.height = parseFloat(this.element.style.height.replace(\"px\", \"\"));\r\n this._ownerCanvas.hostCanvas.removeEventListener(\"pointerup\", this._onTopHandlePointerUp);\r\n this._ownerCanvas.hostCanvas.removeEventListener(\"pointermove\", this._onTopHandlePointerMove);\r\n this._cleanUpResizing(evt);\r\n }\r\n };\r\n\r\n private _onTopRightHandlePointerDown = (evt: PointerEvent) => {\r\n if (this.isCollapsed) {\r\n return;\r\n }\r\n this._initResizing(evt);\r\n this._resizingDirection = ResizingDirection.TopRight;\r\n this._ownerCanvas.hostCanvas.addEventListener(\"pointerup\", this._onTopRightHandlePointerUp);\r\n this._ownerCanvas.hostCanvas.addEventListener(\"pointermove\", this._onTopRightHandlePointerMove);\r\n };\r\n\r\n private _onTopRightHandlePointerMove = (evt: PointerEvent) => {\r\n const topSlack = (this.element.offsetHeight - this._minFrameHeight) * this._ownerCanvas.zoom;\r\n const yLimit = (this._mouseStartPointY as number) + topSlack;\r\n const rightSlack = (this.element.offsetWidth - this._minFrameWidth) * this._ownerCanvas.zoom;\r\n const xLimit = (this._mouseStartPointX as number) - rightSlack;\r\n this._moveTopRightHandle(evt, xLimit, yLimit);\r\n };\r\n\r\n private _moveTopRightHandle = (evt: PointerEvent, xLimit: number, yLimit: number) => {\r\n if (!(this._isResizingTop() && this._isResizingRight()) || this._mouseStartPointX === null || this._mouseStartPointY === null) {\r\n return;\r\n }\r\n if (this._isResizingRight() && this._isResizingTop()) {\r\n evt.stopPropagation();\r\n if (evt.clientY < yLimit && evt.clientX > xLimit) {\r\n // able to move in X and Y\r\n const distanceMouseMovedX = (evt.clientX - this._mouseStartPointX) / this._ownerCanvas.zoom;\r\n this._expandRight(distanceMouseMovedX, evt.clientX);\r\n this._mouseStartPointX = evt.clientX;\r\n const distanceMouseMovedY = (evt.clientY - this._mouseStartPointY) / this._ownerCanvas.zoom;\r\n this._expandTop(distanceMouseMovedY);\r\n this._mouseStartPointY = evt.clientY;\r\n } else if (evt.clientY > yLimit && evt.clientX > xLimit) {\r\n // able to move in X but not Y\r\n const distanceMouseMovedX = (evt.clientX - this._mouseStartPointX) / this._ownerCanvas.zoom;\r\n this._expandRight(distanceMouseMovedX, evt.clientX);\r\n this._mouseStartPointX = evt.clientX;\r\n } else if (evt.clientY < yLimit && evt.clientX < xLimit) {\r\n // able to move in Y but not X\r\n const distanceMouseMovedY = (evt.clientY - this._mouseStartPointY) / this._ownerCanvas.zoom;\r\n this._expandTop(distanceMouseMovedY);\r\n this._mouseStartPointY = evt.clientY;\r\n }\r\n }\r\n };\r\n\r\n private _onTopRightHandlePointerUp = (evt: PointerEvent) => {\r\n evt.stopPropagation();\r\n if (this._resizingDirection === ResizingDirection.TopRight) {\r\n this.y = parseFloat(this.element.style.top.replace(\"px\", \"\"));\r\n this.height = parseFloat(this.element.style.height.replace(\"px\", \"\"));\r\n this.width = parseFloat(this.element.style.width.replace(\"px\", \"\"));\r\n this._ownerCanvas.hostCanvas.removeEventListener(\"pointerup\", this._onTopRightHandlePointerUp);\r\n this._ownerCanvas.hostCanvas.removeEventListener(\"pointermove\", this._onTopRightHandlePointerMove);\r\n this._cleanUpResizing(evt);\r\n }\r\n };\r\n\r\n private _onBottomRightHandlePointerDown = (evt: PointerEvent) => {\r\n if (this.isCollapsed) {\r\n return;\r\n }\r\n this._initResizing(evt);\r\n this._resizingDirection = ResizingDirection.BottomRight;\r\n this._ownerCanvas.hostCanvas.addEventListener(\"pointerup\", this._onBottomRightHandlePointerUp);\r\n this._ownerCanvas.hostCanvas.addEventListener(\"pointermove\", this._onBottomRightHandlePointerMove);\r\n };\r\n\r\n private _onBottomRightHandlePointerMove = (evt: PointerEvent) => {\r\n const bottomSlack = (this.element.offsetHeight - this._minFrameHeight) * this._ownerCanvas.zoom;\r\n const yLimit = (this._mouseStartPointY as number) - bottomSlack;\r\n const rightSlack = (this.element.offsetWidth - this._minFrameWidth) * this._ownerCanvas.zoom;\r\n const xLimit = (this._mouseStartPointX as number) - rightSlack;\r\n this._moveBottomRightHandle(evt, xLimit, yLimit);\r\n };\r\n\r\n private _moveBottomRightHandle = (evt: PointerEvent, xLimit: number, yLimit: number) => {\r\n if (!(this._isResizingBottom() && this._isResizingRight()) || this._mouseStartPointX === null || this._mouseStartPointY === null) {\r\n return;\r\n }\r\n if (this._isResizingRight() && this._isResizingBottom()) {\r\n evt.stopPropagation();\r\n if (evt.clientY > yLimit && evt.clientX > xLimit) {\r\n // able to move in X and Y\r\n const distanceMouseMovedX = (evt.clientX - this._mouseStartPointX) / this._ownerCanvas.zoom;\r\n this._expandRight(distanceMouseMovedX, evt.clientX);\r\n this._mouseStartPointX = evt.clientX;\r\n const distanceMouseMovedY = (evt.clientY - this._mouseStartPointY) / this._ownerCanvas.zoom;\r\n this._expandBottom(distanceMouseMovedY);\r\n this._mouseStartPointY = evt.clientY;\r\n } else if (evt.clientY < yLimit && evt.clientX > xLimit) {\r\n // able to move in X but not Y\r\n const distanceMouseMovedX = (evt.clientX - this._mouseStartPointX) / this._ownerCanvas.zoom;\r\n this._expandRight(distanceMouseMovedX, evt.clientX);\r\n this._mouseStartPointX = evt.clientX;\r\n } else if (evt.clientY > yLimit && evt.clientX < xLimit) {\r\n // able to move in Y but not X\r\n const distanceMouseMovedY = (evt.clientY - this._mouseStartPointY) / this._ownerCanvas.zoom;\r\n this._expandBottom(distanceMouseMovedY);\r\n this._mouseStartPointY = evt.clientY;\r\n }\r\n }\r\n };\r\n\r\n private _onBottomRightHandlePointerUp = (evt: PointerEvent) => {\r\n if (this._resizingDirection === ResizingDirection.BottomRight) {\r\n this.height = parseFloat(this.element.style.height.replace(\"px\", \"\"));\r\n this.width = parseFloat(this.element.style.width.replace(\"px\", \"\"));\r\n this._ownerCanvas.hostCanvas.removeEventListener(\"pointerup\", this._onBottomRightHandlePointerUp);\r\n this._ownerCanvas.hostCanvas.removeEventListener(\"pointermove\", this._onBottomRightHandlePointerMove);\r\n this._cleanUpResizing(evt);\r\n }\r\n };\r\n\r\n private _onBottomLeftHandlePointerDown = (evt: PointerEvent) => {\r\n if (this.isCollapsed) {\r\n return;\r\n }\r\n this._initResizing(evt);\r\n this._resizingDirection = ResizingDirection.BottomLeft;\r\n this._mouseXLimit = evt.clientX + this.width - this._minFrameWidth;\r\n this._ownerCanvas.hostCanvas.addEventListener(\"pointerup\", this._onBottomLeftHandlePointerUp);\r\n this._ownerCanvas.hostCanvas.addEventListener(\"pointermove\", this._onBottomLeftHandlePointerMove);\r\n };\r\n\r\n private _onBottomLeftHandlePointerMove = (evt: PointerEvent) => {\r\n const bottomSlack = (this.element.offsetHeight - this._minFrameHeight) * this._ownerCanvas.zoom;\r\n const yLimit = (this._mouseStartPointY as number) - bottomSlack;\r\n const leftSlack = (this.element.offsetWidth - this._minFrameWidth) * this._ownerCanvas.zoom;\r\n const xLimit = (this._mouseStartPointX as number) + leftSlack;\r\n this._moveBottomLeftHandle(evt, xLimit, yLimit);\r\n };\r\n\r\n private _moveBottomLeftHandle = (evt: PointerEvent, xLimit: number, yLimit: number) => {\r\n if (!(this._isResizingBottom() && this._isResizingLeft()) || this._mouseStartPointX === null || this._mouseStartPointY === null) {\r\n return;\r\n }\r\n if (this._isResizingLeft() && this._isResizingBottom()) {\r\n evt.stopPropagation();\r\n if (evt.clientY > yLimit && evt.clientX < xLimit) {\r\n // able to move in X and Y\r\n const distanceMouseMovedX = (evt.clientX - this._mouseStartPointX) / this._ownerCanvas.zoom;\r\n this._expandLeft(distanceMouseMovedX);\r\n this._mouseStartPointX = evt.clientX;\r\n const distanceMouseMovedY = (evt.clientY - this._mouseStartPointY) / this._ownerCanvas.zoom;\r\n this._expandBottom(distanceMouseMovedY);\r\n this._mouseStartPointY = evt.clientY;\r\n } else if (evt.clientY < yLimit && evt.clientX < xLimit) {\r\n // able to move in X but not Y\r\n const distanceMouseMovedX = (evt.clientX - this._mouseStartPointX) / this._ownerCanvas.zoom;\r\n this._expandLeft(distanceMouseMovedX);\r\n this._mouseStartPointX = evt.clientX;\r\n } else if (evt.clientY > yLimit && evt.clientX > xLimit) {\r\n // able to move in Y but not X\r\n const distanceMouseMovedY = (evt.clientY - this._mouseStartPointY) / this._ownerCanvas.zoom;\r\n this._expandBottom(distanceMouseMovedY);\r\n this._mouseStartPointY = evt.clientY;\r\n }\r\n }\r\n };\r\n\r\n private _onBottomLeftHandlePointerUp = (evt: PointerEvent) => {\r\n evt.stopPropagation();\r\n if (this._resizingDirection === ResizingDirection.BottomLeft) {\r\n this.height = parseFloat(this.element.style.height.replace(\"px\", \"\"));\r\n this.x = parseFloat(this.element.style.left.replace(\"px\", \"\"));\r\n this.width = parseFloat(this.element.style.width.replace(\"px\", \"\"));\r\n this._ownerCanvas.hostCanvas.removeEventListener(\"pointerup\", this._onBottomLeftHandlePointerUp);\r\n this._ownerCanvas.hostCanvas.removeEventListener(\"pointermove\", this._onBottomLeftHandlePointerMove);\r\n this._cleanUpResizing(evt);\r\n }\r\n };\r\n\r\n private _onTopLeftHandlePointerDown = (evt: PointerEvent) => {\r\n if (this.isCollapsed) {\r\n return;\r\n }\r\n this._initResizing(evt);\r\n this._resizingDirection = ResizingDirection.TopLeft;\r\n this._mouseXLimit = evt.clientX + this.width - this._minFrameWidth;\r\n this._ownerCanvas.hostCanvas.addEventListener(\"pointerup\", this._onTopLeftHandlePointerUp);\r\n this._ownerCanvas.hostCanvas.addEventListener(\"pointermove\", this._onTopLeftHandlePointerMove);\r\n };\r\n\r\n private _onTopLeftHandlePointerMove = (evt: PointerEvent) => {\r\n const topSlack = (this.element.offsetHeight - this._minFrameHeight) * this._ownerCanvas.zoom;\r\n const yLimit = (this._mouseStartPointY as number) + topSlack;\r\n const leftSlack = (this.element.offsetWidth - this._minFrameWidth) * this._ownerCanvas.zoom;\r\n const xLimit = (this._mouseStartPointX as number) + leftSlack;\r\n this._moveTopLeftHandle(evt, xLimit, yLimit);\r\n };\r\n\r\n private _moveTopLeftHandle = (evt: PointerEvent, xLimit: number, yLimit: number) => {\r\n if (!(this._isResizingTop() && this._isResizingLeft()) || this._mouseStartPointX === null || this._mouseStartPointY === null) {\r\n return;\r\n }\r\n if (this._isResizingLeft() && this._isResizingTop()) {\r\n evt.stopPropagation();\r\n if (evt.clientY < yLimit && evt.clientX < xLimit) {\r\n // able to move in X and Y\r\n const distanceMouseMovedX = (evt.clientX - this._mouseStartPointX) / this._ownerCanvas.zoom;\r\n this._expandLeft(distanceMouseMovedX);\r\n this._mouseStartPointX = evt.clientX;\r\n const distanceMouseMovedY = (evt.clientY - this._mouseStartPointY) / this._ownerCanvas.zoom;\r\n this._expandTop(distanceMouseMovedY);\r\n this._mouseStartPointY = evt.clientY;\r\n } else if (evt.clientY > yLimit && evt.clientX < xLimit) {\r\n // able to move in X but not Y\r\n const distanceMouseMovedX = (evt.clientX - this._mouseStartPointX) / this._ownerCanvas.zoom;\r\n this._expandLeft(distanceMouseMovedX);\r\n this._mouseStartPointX = evt.clientX;\r\n } else if (evt.clientY < yLimit && evt.clientX > xLimit) {\r\n // able to move in Y but not X\r\n const distanceMouseMovedY = (evt.clientY - this._mouseStartPointY) / this._ownerCanvas.zoom;\r\n this._expandTop(distanceMouseMovedY);\r\n this._mouseStartPointY = evt.clientY;\r\n }\r\n }\r\n };\r\n\r\n private _onTopLeftHandlePointerUp = (evt: PointerEvent) => {\r\n evt.stopPropagation();\r\n if (this._resizingDirection === ResizingDirection.TopLeft) {\r\n this.y = parseFloat(this.element.style.top.replace(\"px\", \"\"));\r\n this.height = parseFloat(this.element.style.height.replace(\"px\", \"\"));\r\n this.x = parseFloat(this.element.style.left.replace(\"px\", \"\"));\r\n this.width = parseFloat(this.element.style.width.replace(\"px\", \"\"));\r\n this._ownerCanvas.hostCanvas.removeEventListener(\"pointerup\", this._onTopLeftHandlePointerUp);\r\n this._ownerCanvas.hostCanvas.removeEventListener(\"pointermove\", this._onTopLeftHandlePointerMove);\r\n this._cleanUpResizing(evt);\r\n }\r\n };\r\n\r\n private _expandLeft(widthModification: number) {\r\n const frameElementWidth = parseFloat(this.element.style.width.replace(\"px\", \"\"));\r\n const frameElementLeft = parseFloat(this.element.style.left.replace(\"px\", \"\"));\r\n this.element.style.width = `${frameElementWidth - widthModification}px`;\r\n this.element.style.left = `${frameElementLeft + widthModification}px`;\r\n this._updateMinHeightWithComments();\r\n }\r\n\r\n private _expandTop(heightModification: number) {\r\n const frameElementHeight = parseFloat(this.element.style.height.replace(\"px\", \"\"));\r\n const frameElementTop = parseFloat(this.element.style.top.replace(\"px\", \"\"));\r\n this.element.style.height = `${frameElementHeight - heightModification}px`;\r\n this.element.style.top = `${frameElementTop + heightModification}px`;\r\n }\r\n\r\n private _expandRight(widthModification: number, x: number) {\r\n const frameElementWidth = parseFloat(this.element.style.width.replace(\"px\", \"\"));\r\n if (frameElementWidth + widthModification > 20) {\r\n this._mouseStartPointX = x;\r\n this.element.style.width = `${frameElementWidth + widthModification}px`;\r\n }\r\n this._updateMinHeightWithComments();\r\n }\r\n\r\n private _expandBottom(heightModification: number) {\r\n const frameElementHeight = parseFloat(this.element.style.height.replace(\"px\", \"\"));\r\n this.element.style.height = `${frameElementHeight + heightModification}px`;\r\n }\r\n\r\n public dispose() {\r\n if (this._isFocused) {\r\n this.switchFocusMode();\r\n }\r\n if (this._onSelectionChangedObserver) {\r\n this._ownerCanvas.stateManager.onSelectionChangedObservable.remove(this._onSelectionChangedObserver);\r\n }\r\n\r\n if (this._onGraphNodeRemovalObserver) {\r\n this._ownerCanvas.stateManager.onGraphNodeRemovalObservable.remove(this._onGraphNodeRemovalObserver);\r\n }\r\n\r\n if (this._onExposePortOnFrameObserver) {\r\n this._ownerCanvas.stateManager.onExposePortOnFrameObservable.remove(this._onExposePortOnFrameObserver);\r\n }\r\n\r\n this.element.parentElement?.removeChild(this.element);\r\n\r\n this._ownerCanvas.frames.splice(this._ownerCanvas.frames.indexOf(this), 1);\r\n\r\n this.onExpandStateChanged.clear();\r\n }\r\n\r\n private _serializePortData(exposedPorts: NodePort[]) {\r\n if (exposedPorts.length > 0) {\r\n for (let i = 0; i < exposedPorts.length; ++i) {\r\n if (exposedPorts[i]) {\r\n exposedPorts[i].exposedPortPosition = i;\r\n }\r\n }\r\n }\r\n }\r\n\r\n public serialize(saveCollapsedState: boolean): IFrameData {\r\n this._serializePortData(this._exposedInPorts);\r\n this._serializePortData(this._exposedOutPorts);\r\n return {\r\n x: this._x,\r\n y: this._y,\r\n width: this._width,\r\n height: this._height,\r\n color: this._color.asArray(),\r\n name: this.name,\r\n isCollapsed: saveCollapsedState ? this.isCollapsed : true, //keeping closed for stand along exporting.\r\n blocks: this.nodes.map((n) => n.content.uniqueId),\r\n comments: this._comments,\r\n };\r\n }\r\n\r\n public export() {\r\n const state = this._ownerCanvas.stateManager;\r\n const json = state.exportData(state.data, this);\r\n StringTools.DownloadAsFile(state.hostDocument, json, this._name + \".json\");\r\n }\r\n\r\n public adjustPorts() {\r\n for (const node of this.nodes) {\r\n for (const port of node.outputPorts) {\r\n // Output\r\n if (port.exposedOnFrame) {\r\n if (port.exposedPortPosition !== -1) {\r\n this._exposedOutPorts[port.exposedPortPosition] = port;\r\n }\r\n }\r\n }\r\n\r\n for (const port of node.inputPorts) {\r\n // Imports\r\n if (port.exposedOnFrame) {\r\n if (port.exposedPortPosition !== -1) {\r\n this._exposedInPorts[port.exposedPortPosition] = port;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n public static Parse(serializationData: IFrameData, canvas: GraphCanvasComponent, map?: { [key: number]: number }) {\r\n const newFrame = new GraphFrame(null, canvas, true);\r\n const isCollapsed = !!serializationData.isCollapsed;\r\n\r\n newFrame.x = serializationData.x;\r\n newFrame.y = serializationData.y;\r\n newFrame.width = serializationData.width;\r\n newFrame.height = serializationData.height;\r\n newFrame.name = serializationData.name;\r\n newFrame.color = Color3.FromArray(serializationData.color);\r\n newFrame.comments = serializationData.comments;\r\n\r\n if (serializationData.blocks && map) {\r\n for (const blockId of serializationData.blocks) {\r\n const actualId = map[blockId];\r\n const node = canvas.nodes.filter((n) => n.content.uniqueId === actualId);\r\n\r\n if (node.length) {\r\n newFrame.nodes.push(node[0]);\r\n node[0].enclosingFrameId = newFrame.id;\r\n }\r\n }\r\n } else {\r\n newFrame.refresh();\r\n }\r\n\r\n newFrame.adjustPorts();\r\n\r\n newFrame.isCollapsed = isCollapsed;\r\n if (isCollapsed) {\r\n canvas._frameIsMoving = true;\r\n newFrame._moveFrame(-(newFrame.width - newFrame._collapsedWidth) / 2, 0);\r\n const diff = serializationData.x - newFrame.x;\r\n newFrame._moveFrame(diff, 0);\r\n newFrame.cleanAccumulation();\r\n\r\n for (const selectedNode of newFrame.nodes) {\r\n selectedNode.refresh();\r\n }\r\n canvas._frameIsMoving = false;\r\n }\r\n\r\n return newFrame;\r\n }\r\n}\r\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@babylonjs/shared-ui-components",
3
- "version": "9.18.0",
3
+ "version": "9.18.2",
4
4
  "main": "index.js",
5
5
  "module": "index.js",
6
6
  "types": "index.d.ts",