@onerjs/shared-ui-components 8.42.3 → 8.42.5

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.
@@ -8,6 +8,6 @@ import { UploadButton } from "../primitives/uploadButton.js";
8
8
  */
9
9
  export const FileUploadLine = ({ onClick, label, accept, ...buttonProps }) => {
10
10
  FileUploadLine.displayName = "FileUploadLine";
11
- return (_jsx(LineContainer, { uniqueId: label, children: _jsx(UploadButton, { onUpload: onClick, accept: accept, label: label, ...buttonProps }) }));
11
+ return (_jsx(LineContainer, { uniqueId: `${label}_upload`, label: label, children: _jsx(UploadButton, { onUpload: onClick, accept: accept, label: label, ...buttonProps }) }));
12
12
  };
13
13
  //# sourceMappingURL=fileUploadLine.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fileUploadLine.js","sourceRoot":"","sources":["../../../../../dev/sharedUiComponents/src/fluent/hoc/fileUploadLine.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAS1D;;;;GAIG;AACH,MAAM,CAAC,MAAM,cAAc,GAA2C,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,WAAW,EAAE,EAAE,EAAE;IACjH,cAAc,CAAC,WAAW,GAAG,gBAAgB,CAAC;IAE9C,OAAO,CACH,KAAC,aAAa,IAAC,QAAQ,EAAE,KAAK,YAC1B,KAAC,YAAY,IAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,KAAM,WAAW,GAAI,GACtE,CACnB,CAAC;AACN,CAAC,CAAC","sourcesContent":["import type { FunctionComponent } from \"react\";\r\nimport { LineContainer } from \"./propertyLines/propertyLine\";\r\nimport { UploadButton } from \"../primitives/uploadButton\";\r\nimport type { ButtonProps } from \"../primitives/button\";\r\n\r\ntype FileUploadLineProps = Omit<ButtonProps, \"onClick\" | \"label\"> & {\r\n onClick: (files: FileList) => void;\r\n label: string; // Require a label when button is the entire line (by default, label is optional on an UploadButton\r\n accept: string;\r\n};\r\n\r\n/**\r\n * A full-width line with an upload button.\r\n * For just the button without the line wrapper, use UploadButton directly.\r\n * @returns An UploadButton wrapped in a LineContainer\r\n */\r\nexport const FileUploadLine: FunctionComponent<FileUploadLineProps> = ({ onClick, label, accept, ...buttonProps }) => {\r\n FileUploadLine.displayName = \"FileUploadLine\";\r\n\r\n return (\r\n <LineContainer uniqueId={label}>\r\n <UploadButton onUpload={onClick} accept={accept} label={label} {...buttonProps} />\r\n </LineContainer>\r\n );\r\n};\r\n"]}
1
+ {"version":3,"file":"fileUploadLine.js","sourceRoot":"","sources":["../../../../../dev/sharedUiComponents/src/fluent/hoc/fileUploadLine.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAS1D;;;;GAIG;AACH,MAAM,CAAC,MAAM,cAAc,GAA2C,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,WAAW,EAAE,EAAE,EAAE;IACjH,cAAc,CAAC,WAAW,GAAG,gBAAgB,CAAC;IAE9C,OAAO,CACH,KAAC,aAAa,IAAC,QAAQ,EAAE,GAAG,KAAK,SAAS,EAAE,KAAK,EAAE,KAAK,YACpD,KAAC,YAAY,IAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,KAAM,WAAW,GAAI,GACtE,CACnB,CAAC;AACN,CAAC,CAAC","sourcesContent":["import type { FunctionComponent } from \"react\";\r\nimport { LineContainer } from \"./propertyLines/propertyLine\";\r\nimport { UploadButton } from \"../primitives/uploadButton\";\r\nimport type { ButtonProps } from \"../primitives/button\";\r\n\r\ntype FileUploadLineProps = Omit<ButtonProps, \"onClick\" | \"label\"> & {\r\n onClick: (files: FileList) => void;\r\n label: string; // Require a label when button is the entire line (by default, label is optional on an UploadButton\r\n accept: string;\r\n};\r\n\r\n/**\r\n * A full-width line with an upload button.\r\n * For just the button without the line wrapper, use UploadButton directly.\r\n * @returns An UploadButton wrapped in a LineContainer\r\n */\r\nexport const FileUploadLine: FunctionComponent<FileUploadLineProps> = ({ onClick, label, accept, ...buttonProps }) => {\r\n FileUploadLine.displayName = \"FileUploadLine\";\r\n\r\n return (\r\n <LineContainer uniqueId={`${label}_upload`} label={label}>\r\n <UploadButton onUpload={onClick} accept={accept} label={label} {...buttonProps} />\r\n </LineContainer>\r\n );\r\n};\r\n"]}
@@ -85,6 +85,7 @@ const useStyles = makeStyles({
85
85
  },
86
86
  searchBox: {
87
87
  width: "100%",
88
+ maxWidth: "none",
88
89
  },
89
90
  });
90
91
  /**
@@ -101,12 +102,12 @@ const AccordionMenuBar = () => {
101
102
  }
102
103
  const { state, dispatch, features } = accordionCtx;
103
104
  const { editMode } = state;
104
- return (_jsxs("div", { className: classes.menuBar, children: [_jsx(AccordionSearchBox, {}), _jsxs("div", { className: classes.menuBarControls, children: [features.hiding && editMode && (_jsxs(_Fragment, { children: [_jsx(Button, { title: "Show all", icon: EyeFilled, appearance: "subtle", onClick: () => dispatch({ type: "SHOW_ALL" }) }), _jsx(Button, { title: "Hide all", icon: EyeOffRegular, appearance: "subtle", onClick: () => {
105
+ return (_jsxs("div", { className: classes.menuBar, children: [_jsx(AccordionSearchBox, {}), _jsxs("div", { className: classes.menuBarControls, children: [features.hiding && editMode && (_jsxs(_Fragment, { children: [_jsx(Button, { title: "Show all", icon: EyeFilled, appearance: "transparent", onClick: () => dispatch({ type: "SHOW_ALL" }) }), _jsx(Button, { title: "Hide all", icon: EyeOffRegular, appearance: "transparent", onClick: () => {
105
106
  // Hide all visible (non-hidden) items using the registered item IDs
106
107
  const { registeredItemIds, state: currentState } = accordionCtx;
107
108
  const visibleItemIds = Array.from(registeredItemIds.keys()).filter((id) => !currentState.hiddenIds.includes(id));
108
109
  dispatch({ type: "HIDE_ALL_VISIBLE", visibleItemIds });
109
- } })] })), (features.pinning || features.hiding) && (_jsx(Button, { title: "Edit mode", icon: editMode ? CheckmarkFilled : EditRegular, appearance: editMode ? "primary" : "subtle", onClick: () => dispatch({ type: "SET_EDIT_MODE", enabled: !editMode }) }))] })] }));
110
+ } })] })), (features.pinning || features.hiding) && (_jsx(Button, { title: "Edit mode", icon: editMode ? CheckmarkFilled : EditRegular, appearance: editMode ? "primary" : "transparent", onClick: () => dispatch({ type: "SET_EDIT_MODE", enabled: !editMode }) }))] })] }));
110
111
  };
111
112
  /**
112
113
  * Wrapper component that must encapsulate the section headers and panels.
@@ -210,7 +211,8 @@ export const AccordionSection = (props) => {
210
211
  const StringAccordion = FluentAccordion;
211
212
  export const Accordion = forwardRef((props, ref) => {
212
213
  Accordion.displayName = "Accordion";
213
- const { children, highlightSections, ...rest } = props;
214
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
215
+ const { children, highlightSections, uniqueId, enablePinnedItems, enableHiddenItems, enableSearchItems, ...rest } = props;
214
216
  const classes = useStyles();
215
217
  const { size } = useContext(ToolContext);
216
218
  const accordionCtx = useAccordionContext(props);
@@ -1 +1 @@
1
- {"version":3,"file":"accordion.js","sourceRoot":"","sources":["../../../../../dev/sharedUiComponents/src/fluent/primitives/accordion.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { AccordionPanelProps, AccordionToggleData, AccordionToggleEvent, AccordionProps as FluentAccordionProps } from \"@fluentui/react-components\";\r\nimport type { ForwardRefExoticComponent, FunctionComponent, PropsWithChildren, RefAttributes } from \"react\";\r\n\r\nimport {\r\n AccordionHeader,\r\n AccordionItem,\r\n AccordionPanel,\r\n Divider,\r\n Accordion as FluentAccordion,\r\n MessageBar,\r\n MessageBarBody,\r\n Portal,\r\n SearchBox,\r\n Subtitle2Stronger,\r\n makeStyles,\r\n tokens,\r\n} from \"@fluentui/react-components\";\r\nimport { ArrowCircleUpRegular, CheckmarkFilled, EditRegular, EyeFilled, EyeOffRegular, FilterRegular, PinFilled, PinRegular } from \"@fluentui/react-icons\";\r\nimport { Children, forwardRef, isValidElement, useCallback, useContext, useEffect, useLayoutEffect, useMemo, useRef, useState } from \"react\";\r\n\r\nimport { ToolContext } from \"../hoc/fluentToolWrapper\";\r\nimport { useKeyState } from \"../hooks/keyboardHooks\";\r\nimport {\r\n AccordionContext,\r\n AccordionItemDepthContext,\r\n AccordionSectionBlockContext,\r\n useAccordionContext,\r\n useAccordionSectionBlockContext,\r\n useAccordionSectionItemState,\r\n} from \"./accordion.contexts\";\r\nimport { Button } from \"./button\";\r\nimport { CustomTokens } from \"./utils\";\r\n\r\nconst useStyles = makeStyles({\r\n accordion: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n height: \"100%\",\r\n },\r\n accordionBody: {\r\n overflowX: \"hidden\",\r\n overflowY: \"auto\",\r\n paddingBottom: tokens.spacingVerticalM, // bottom padding since there is no divider at the bottom\r\n },\r\n divider: {\r\n paddingTop: CustomTokens.dividerGap,\r\n paddingBottom: CustomTokens.dividerGap,\r\n },\r\n dividerSmall: {\r\n paddingTop: CustomTokens.dividerGapSmall,\r\n paddingBottom: CustomTokens.dividerGapSmall,\r\n },\r\n panelDiv: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n overflow: \"hidden\",\r\n },\r\n highlightDiv: {\r\n borderRadius: tokens.borderRadiusLarge,\r\n animationDuration: \"1s\",\r\n animationTimingFunction: \"ease-in-out\",\r\n animationIterationCount: \"5\",\r\n animationFillMode: \"forwards\",\r\n animationName: {\r\n from: {\r\n boxShadow: `inset 0 0 4px ${tokens.colorTransparentBackground}`,\r\n },\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n \"50%\": {\r\n boxShadow: `inset 0 0 12px ${tokens.colorBrandBackground}`,\r\n },\r\n to: {\r\n boxShadow: `inset 0 0 4px ${tokens.colorTransparentBackground}`,\r\n },\r\n },\r\n },\r\n menuBar: {\r\n display: \"flex\",\r\n },\r\n menuBarControls: {\r\n display: \"flex\",\r\n flexGrow: 1,\r\n justifyContent: \"end\",\r\n },\r\n sectionItemContainer: {\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n alignItems: \"center\",\r\n },\r\n sectionItemContent: {\r\n flexGrow: 1,\r\n minWidth: 0, // Allow content to shrink below its intrinsic width when buttons are shown\r\n overflow: \"hidden\",\r\n },\r\n sectionItemButtons: {\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n alignItems: \"center\",\r\n marginRight: tokens.spacingHorizontalXS,\r\n },\r\n pinnedContainer: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n },\r\n pinnedContainerEmpty: {\r\n \"&:not(:only-child)\": {\r\n display: \"none\",\r\n },\r\n },\r\n searchBox: {\r\n width: \"100%\",\r\n },\r\n});\r\n\r\n/**\r\n * Renders the menu bar and control buttons.\r\n *\r\n * @returns `div`, or `undefined` if all features are disabled.\r\n */\r\nconst AccordionMenuBar: FunctionComponent = () => {\r\n AccordionMenuBar.displayName = \"AccordionMenuBar\";\r\n const classes = useStyles();\r\n const accordionCtx = useContext(AccordionContext);\r\n\r\n if (!accordionCtx) {\r\n return null;\r\n }\r\n\r\n const { state, dispatch, features } = accordionCtx;\r\n const { editMode } = state;\r\n\r\n return (\r\n <div className={classes.menuBar}>\r\n <AccordionSearchBox />\r\n <div className={classes.menuBarControls}>\r\n {features.hiding && editMode && (\r\n <>\r\n <Button title=\"Show all\" icon={EyeFilled} appearance=\"subtle\" onClick={() => dispatch({ type: \"SHOW_ALL\" })} />\r\n <Button\r\n title=\"Hide all\"\r\n icon={EyeOffRegular}\r\n appearance=\"subtle\"\r\n onClick={() => {\r\n // Hide all visible (non-hidden) items using the registered item IDs\r\n const { registeredItemIds, state: currentState } = accordionCtx;\r\n const visibleItemIds = Array.from(registeredItemIds.keys()).filter((id) => !currentState.hiddenIds.includes(id));\r\n dispatch({ type: \"HIDE_ALL_VISIBLE\", visibleItemIds });\r\n }}\r\n />\r\n </>\r\n )}\r\n {(features.pinning || features.hiding) && (\r\n <Button\r\n title=\"Edit mode\"\r\n icon={editMode ? CheckmarkFilled : EditRegular}\r\n appearance={editMode ? \"primary\" : \"subtle\"}\r\n onClick={() => dispatch({ type: \"SET_EDIT_MODE\", enabled: !editMode })}\r\n />\r\n )}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\n/**\r\n * Props: `AccordionSectionBlock`.\r\n */\r\nexport type AccordionSectionBlockProps = {\r\n /** The ID of the `AccordionSectionBlock`, unique within the `Accordion` instance. */\r\n sectionId: string;\r\n};\r\n\r\n/**\r\n * Wrapper component that must encapsulate the section headers and panels.\r\n * - Stores the section ID for use in `AccordionSectionItem`.\r\n *\r\n * @param props - `AccordionSectionBlockProps`\r\n * @returns `AccordionSectionBlockContext.Provider`, or `AccordionItem` if all features are disabled.\r\n */\r\nconst AccordionSectionBlock: FunctionComponent<PropsWithChildren<AccordionSectionBlockProps>> = (props) => {\r\n AccordionSectionBlock.displayName = \"AccordionSectionBlock\";\r\n const { children, sectionId } = props;\r\n const accordionCtx = useContext(AccordionContext);\r\n const { context: sectionContext, isEmpty } = useAccordionSectionBlockContext(props);\r\n\r\n if (accordionCtx) {\r\n return (\r\n <AccordionSectionBlockContext.Provider value={sectionContext}>\r\n {!isEmpty && <AccordionItem value={sectionId}>{children}</AccordionItem>}\r\n </AccordionSectionBlockContext.Provider>\r\n );\r\n }\r\n\r\n return <AccordionItem value={sectionId}>{children}</AccordionItem>;\r\n};\r\n\r\n/**\r\n * Props: `AccordionSectionItem`.\r\n */\r\nexport type AccordionSectionItemProps = {\r\n /** The ID of the `AccordionSectionItem`, unique within the `AccordionSectionBlock` instance. */\r\n uniqueId: string;\r\n /** The searchable text label for the item. */\r\n label?: string;\r\n /** Whether the item is not interactable. */\r\n staticItem?: boolean;\r\n};\r\n\r\n/**\r\n * Wrapper component that must encapsulate individual items.\r\n * - Renders the pin button and tracks the pinned state of the item.\r\n * - Renders the hide button and tracks the hidden state of the item.\r\n * - Filters items based on the current search term.\r\n *\r\n * @param props - `AccordionSectionItemProps`\r\n * @returns `Portal` if pinned; `null` if hidden/filtered; `children` otherwise.\r\n */\r\nexport const AccordionSectionItem: FunctionComponent<PropsWithChildren<AccordionSectionItemProps>> = (props) => {\r\n AccordionSectionItem.displayName = \"AccordionSectionItem\";\r\n const { children, staticItem } = props;\r\n const classes = useStyles();\r\n const accordionCtx = useContext(AccordionContext);\r\n const itemState = useAccordionSectionItemState(props);\r\n const [ctrlMode, setCtrlMode] = useState(false);\r\n const ctrlPressed = useKeyState(\"Control\");\r\n const [mouseOver, setMouseOver] = useState(false);\r\n\r\n useEffect(() => {\r\n setCtrlMode(ctrlPressed && mouseOver);\r\n }, [ctrlPressed, mouseOver]);\r\n\r\n // Override disableCopy so copy buttons appear when ctrl+hovering on this item or when edit mode is active\r\n const parentToolContext = useContext(ToolContext);\r\n const editMode = accordionCtx?.state.editMode ?? false;\r\n const showCopy = ctrlMode || editMode;\r\n const itemToolContext = useMemo(() => (showCopy ? { ...parentToolContext, disableCopy: false } : parentToolContext), [parentToolContext, showCopy]);\r\n\r\n // If static item or no context, just render children\r\n if (staticItem || !accordionCtx || !itemState) {\r\n return <>{children}</>;\r\n }\r\n\r\n const { pinnedContainerRef, features } = accordionCtx;\r\n const { isNested, isPinned, isHidden, isMatch, pinnedIndex, canMoveUp, inEditMode, actions } = itemState;\r\n\r\n // Nested items just render children (don't show controls)\r\n if (isNested) {\r\n return <>{children}</>;\r\n }\r\n\r\n // If hidden (and not in edit mode) or doesn't match search, don't render\r\n if ((isHidden && !inEditMode) || !isMatch) {\r\n return null;\r\n }\r\n\r\n const pinnedContainer = isPinned ? pinnedContainerRef.current : null;\r\n const showControls = inEditMode || ctrlMode;\r\n\r\n const itemElement = (\r\n <ToolContext.Provider value={itemToolContext}>\r\n <div\r\n className={classes.sectionItemContainer}\r\n style={isPinned ? { order: pinnedIndex } : undefined}\r\n onMouseMove={() => setMouseOver(true)}\r\n onMouseLeave={() => setMouseOver(false)}\r\n >\r\n {showControls && (\r\n <div className={classes.sectionItemButtons}>\r\n {features.hiding && (\r\n <Button title={isHidden ? \"Unhide\" : \"Hide\"} icon={isHidden ? EyeOffRegular : EyeFilled} appearance=\"transparent\" onClick={actions.toggleHidden} />\r\n )}\r\n {features.pinning && (\r\n <>\r\n <Button title={isPinned ? \"Unpin\" : \"Pin\"} icon={isPinned ? PinFilled : PinRegular} appearance=\"transparent\" onClick={actions.togglePinned} />\r\n {isPinned && <Button icon={ArrowCircleUpRegular} appearance=\"transparent\" disabled={!canMoveUp} onClick={actions.movePinnedUp} />}\r\n </>\r\n )}\r\n </div>\r\n )}\r\n <AccordionItemDepthContext.Provider value={true}>\r\n <div className={classes.sectionItemContent}>{children}</div>\r\n </AccordionItemDepthContext.Provider>\r\n </div>\r\n </ToolContext.Provider>\r\n );\r\n\r\n return pinnedContainer ? <Portal mountNode={pinnedContainer}>{itemElement}</Portal> : itemElement;\r\n};\r\n\r\n/**\r\n * Renders the Pinned section container and defines the portal target for the pinned items.\r\n *\r\n * @returns `div`\r\n */\r\nconst AccordionPinnedContainer: FunctionComponent = () => {\r\n AccordionPinnedContainer.displayName = \"AccordionPinnedContainer\";\r\n const classes = useStyles();\r\n const accordionCtx = useContext(AccordionContext);\r\n\r\n return (\r\n <div ref={accordionCtx?.pinnedContainerRef} className={classes.pinnedContainer}>\r\n <MessageBar className={classes.pinnedContainerEmpty}>\r\n <MessageBarBody>No pinned items</MessageBarBody>\r\n </MessageBar>\r\n </div>\r\n );\r\n};\r\n\r\n/**\r\n * Renders the search box for filtering items.\r\n *\r\n * @returns `SearchBox`, or `null` if the feature is disabled.\r\n */\r\nconst AccordionSearchBox: FunctionComponent = () => {\r\n AccordionSearchBox.displayName = \"AccordionSearchBox\";\r\n const classes = useStyles();\r\n const accordionCtx = useContext(AccordionContext);\r\n\r\n if (!accordionCtx?.features.search) {\r\n return null;\r\n }\r\n\r\n const { state, dispatch } = accordionCtx;\r\n\r\n return (\r\n <SearchBox\r\n className={classes.searchBox}\r\n appearance=\"underline\"\r\n contentBefore={<FilterRegular />}\r\n placeholder=\"Filter\"\r\n value={state.searchTerm}\r\n onChange={(_, data) => dispatch({ type: \"SET_SEARCH_TERM\", term: data.value })}\r\n />\r\n );\r\n};\r\n\r\n/**\r\n * Props: `AccordionSection`.\r\n */\r\nexport type AccordionSectionProps = {\r\n /** The text label shown in the section header. */\r\n title: string;\r\n /** Indicates whether the `AccordionSection` is initially collapsed. */\r\n collapseByDefault?: boolean;\r\n};\r\n\r\n/**\r\n * Wrapper component that must encapsulate the section body.\r\n *\r\n * @param props - `AccordionSectionProps`\r\n * @returns `div`\r\n */\r\nexport const AccordionSection: FunctionComponent<PropsWithChildren<AccordionSectionProps>> = (props) => {\r\n AccordionSection.displayName = \"AccordionSection\";\r\n const classes = useStyles();\r\n\r\n return <div className={classes.panelDiv}>{props.children}</div>;\r\n};\r\n\r\n/**\r\n * Props: `Accordion`.\r\n */\r\nexport type AccordionProps = {\r\n /** The unique ID of the `Accordion` instance. */\r\n uniqueId?: string;\r\n /** The list of sections to be highlighted. */\r\n highlightSections?: readonly string[];\r\n /** Enables the pinned items feature. */\r\n enablePinnedItems?: boolean;\r\n /** Enables the hidden items feature. */\r\n enableHiddenItems?: boolean;\r\n /** Enables the search items feature. */\r\n enableSearchItems?: boolean;\r\n};\r\n\r\nconst StringAccordion = FluentAccordion as ForwardRefExoticComponent<FluentAccordionProps<string> & RefAttributes<HTMLDivElement>>;\r\n\r\nexport const Accordion = forwardRef<HTMLDivElement, PropsWithChildren<AccordionProps>>((props, ref) => {\r\n Accordion.displayName = \"Accordion\";\r\n const { children, highlightSections, ...rest } = props;\r\n const classes = useStyles();\r\n const { size } = useContext(ToolContext);\r\n const accordionCtx = useAccordionContext(props);\r\n const hasPinning = accordionCtx?.features.pinning ?? false;\r\n\r\n const pinnedSectionElement = useMemo(() => {\r\n return (\r\n hasPinning && (\r\n <AccordionSection title=\"Pinned\" collapseByDefault={false}>\r\n <AccordionPinnedContainer />\r\n </AccordionSection>\r\n )\r\n );\r\n }, [hasPinning]);\r\n\r\n // Prevents sections contents from unmounting when closed, allowing their elements to be used in the Pinned section.\r\n const preventUnmountMotion: AccordionPanelProps[\"collapseMotion\"] = useMemo(() => {\r\n // https://github.com/microsoft/fluentui/issues/34309#issuecomment-2824364945\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n return hasPinning ? { children: (Component, props) => <Component {...props} unmountOnExit={false} /> } : undefined;\r\n }, [hasPinning]);\r\n\r\n const validChildren = useMemo(() => {\r\n return (\r\n Children.map([pinnedSectionElement, children], (child) => {\r\n if (isValidElement(child)) {\r\n const childProps = child.props as Partial<AccordionSectionProps>;\r\n if (childProps.title) {\r\n return {\r\n title: childProps.title,\r\n collapseByDefault: childProps.collapseByDefault,\r\n content: child,\r\n };\r\n }\r\n }\r\n return null;\r\n })?.filter(Boolean) ?? []\r\n );\r\n }, [children]);\r\n\r\n // Tracks open items, and used to tell the Accordion which sections should be expanded.\r\n const [openItems, setOpenItems] = useState(validChildren.filter((child) => !child.collapseByDefault).map((child) => child.title));\r\n\r\n // Tracks closed items, which is needed so that when the children change, we only update the open/closed state\r\n // (depending on the collapseByDefault prop) for items that have not been explicitly opened or closed.\r\n const [closedItems, setClosedItems] = useState(validChildren.filter((child) => child.collapseByDefault).map((child) => child.title));\r\n\r\n const internalOpenItemsRef = useRef<string[] | undefined>(openItems);\r\n\r\n // When highlight sections is requested, we temporarily override the open items, but if highlight sections is cleared,\r\n // then we revert back to the normal open items tracking.\r\n useLayoutEffect(() => {\r\n if (highlightSections) {\r\n internalOpenItemsRef.current = [...openItems];\r\n setOpenItems([...highlightSections]);\r\n } else {\r\n setOpenItems([...(internalOpenItemsRef.current ?? [])]);\r\n internalOpenItemsRef.current = undefined;\r\n }\r\n }, [highlightSections]);\r\n\r\n useEffect(() => {\r\n for (const defaultOpenItem of validChildren.filter((child) => !child.collapseByDefault).map((child) => child.title)) {\r\n // If a child is not marked as collapseByDefault, then it should be opened by default, and\r\n // it is only \"default\" if it hasn't already been explicitly added to the opened or closed list.\r\n if (!closedItems.includes(defaultOpenItem) && !openItems.includes(defaultOpenItem)) {\r\n setOpenItems((prev) => [...prev, defaultOpenItem]);\r\n }\r\n }\r\n }, [validChildren]);\r\n\r\n const onToggle = useCallback((event: AccordionToggleEvent, data: AccordionToggleData<string>) => {\r\n if (data.openItems.includes(data.value)) {\r\n setOpenItems((prev) => [...prev, data.value]);\r\n setClosedItems((prev) => prev.filter((item) => item !== data.value));\r\n } else {\r\n setClosedItems((prev) => [...prev, data.value]);\r\n setOpenItems((prev) => prev.filter((item) => item !== data.value));\r\n }\r\n }, []);\r\n\r\n return (\r\n <StringAccordion ref={ref} className={classes.accordion} collapsible multiple onToggle={onToggle} openItems={openItems} {...rest}>\r\n <AccordionContext.Provider value={accordionCtx}>\r\n <AccordionMenuBar />\r\n <div className={classes.accordionBody}>\r\n {validChildren.map((child, index) => {\r\n const isHighlighted = highlightSections?.includes(child.title);\r\n return (\r\n <AccordionSectionBlock key={child.content.key ?? child.title} sectionId={child.title}>\r\n <div className={isHighlighted ? classes.highlightDiv : undefined}>\r\n <AccordionHeader size={size}>\r\n <Subtitle2Stronger>{child.title}</Subtitle2Stronger>\r\n </AccordionHeader>\r\n <AccordionPanel collapseMotion={preventUnmountMotion}>\r\n <div className={classes.panelDiv}>{child.content}</div>\r\n </AccordionPanel>\r\n </div>\r\n {index < validChildren.length - 1 && <Divider inset={true} className={size === \"small\" ? classes.dividerSmall : classes.divider} />}\r\n </AccordionSectionBlock>\r\n );\r\n })}\r\n </div>\r\n </AccordionContext.Provider>\r\n </StringAccordion>\r\n );\r\n});\r\n"]}
1
+ {"version":3,"file":"accordion.js","sourceRoot":"","sources":["../../../../../dev/sharedUiComponents/src/fluent/primitives/accordion.tsx"],"names":[],"mappings":";AAGA,OAAO,EACH,eAAe,EACf,aAAa,EACb,cAAc,EACd,OAAO,EACP,SAAS,IAAI,eAAe,EAC5B,UAAU,EACV,cAAc,EACd,MAAM,EACN,SAAS,EACT,iBAAiB,EACjB,UAAU,EACV,MAAM,GACT,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAC3J,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,cAAc,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE7I,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EACH,gBAAgB,EAChB,yBAAyB,EACzB,4BAA4B,EAC5B,mBAAmB,EACnB,+BAA+B,EAC/B,4BAA4B,GAC/B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,MAAM,SAAS,GAAG,UAAU,CAAC;IACzB,SAAS,EAAE;QACP,OAAO,EAAE,MAAM;QACf,aAAa,EAAE,QAAQ;QACvB,MAAM,EAAE,MAAM;KACjB;IACD,aAAa,EAAE;QACX,SAAS,EAAE,QAAQ;QACnB,SAAS,EAAE,MAAM;QACjB,aAAa,EAAE,MAAM,CAAC,gBAAgB,EAAE,yDAAyD;KACpG;IACD,OAAO,EAAE;QACL,UAAU,EAAE,YAAY,CAAC,UAAU;QACnC,aAAa,EAAE,YAAY,CAAC,UAAU;KACzC;IACD,YAAY,EAAE;QACV,UAAU,EAAE,YAAY,CAAC,eAAe;QACxC,aAAa,EAAE,YAAY,CAAC,eAAe;KAC9C;IACD,QAAQ,EAAE;QACN,OAAO,EAAE,MAAM;QACf,aAAa,EAAE,QAAQ;QACvB,QAAQ,EAAE,QAAQ;KACrB;IACD,YAAY,EAAE;QACV,YAAY,EAAE,MAAM,CAAC,iBAAiB;QACtC,iBAAiB,EAAE,IAAI;QACvB,uBAAuB,EAAE,aAAa;QACtC,uBAAuB,EAAE,GAAG;QAC5B,iBAAiB,EAAE,UAAU;QAC7B,aAAa,EAAE;YACX,IAAI,EAAE;gBACF,SAAS,EAAE,iBAAiB,MAAM,CAAC,0BAA0B,EAAE;aAClE;YACD,gEAAgE;YAChE,KAAK,EAAE;gBACH,SAAS,EAAE,kBAAkB,MAAM,CAAC,oBAAoB,EAAE;aAC7D;YACD,EAAE,EAAE;gBACA,SAAS,EAAE,iBAAiB,MAAM,CAAC,0BAA0B,EAAE;aAClE;SACJ;KACJ;IACD,OAAO,EAAE;QACL,OAAO,EAAE,MAAM;KAClB;IACD,eAAe,EAAE;QACb,OAAO,EAAE,MAAM;QACf,QAAQ,EAAE,CAAC;QACX,cAAc,EAAE,KAAK;KACxB;IACD,oBAAoB,EAAE;QAClB,OAAO,EAAE,MAAM;QACf,aAAa,EAAE,KAAK;QACpB,UAAU,EAAE,QAAQ;KACvB;IACD,kBAAkB,EAAE;QAChB,QAAQ,EAAE,CAAC;QACX,QAAQ,EAAE,CAAC,EAAE,2EAA2E;QACxF,QAAQ,EAAE,QAAQ;KACrB;IACD,kBAAkB,EAAE;QAChB,OAAO,EAAE,MAAM;QACf,aAAa,EAAE,KAAK;QACpB,UAAU,EAAE,QAAQ;QACpB,WAAW,EAAE,MAAM,CAAC,mBAAmB;KAC1C;IACD,eAAe,EAAE;QACb,OAAO,EAAE,MAAM;QACf,aAAa,EAAE,QAAQ;KAC1B;IACD,oBAAoB,EAAE;QAClB,oBAAoB,EAAE;YAClB,OAAO,EAAE,MAAM;SAClB;KACJ;IACD,SAAS,EAAE;QACP,KAAK,EAAE,MAAM;QACb,QAAQ,EAAE,MAAM;KACnB;CACJ,CAAC,CAAC;AAEH;;;;GAIG;AACH,MAAM,gBAAgB,GAAsB,GAAG,EAAE;IAC7C,gBAAgB,CAAC,WAAW,GAAG,kBAAkB,CAAC;IAClD,MAAM,OAAO,GAAG,SAAS,EAAE,CAAC;IAC5B,MAAM,YAAY,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAC;IAElD,IAAI,CAAC,YAAY,EAAE,CAAC;QAChB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,YAAY,CAAC;IACnD,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IAE3B,OAAO,CACH,eAAK,SAAS,EAAE,OAAO,CAAC,OAAO,aAC3B,KAAC,kBAAkB,KAAG,EACtB,eAAK,SAAS,EAAE,OAAO,CAAC,eAAe,aAClC,QAAQ,CAAC,MAAM,IAAI,QAAQ,IAAI,CAC5B,8BACI,KAAC,MAAM,IAAC,KAAK,EAAC,UAAU,EAAC,IAAI,EAAE,SAAS,EAAE,UAAU,EAAC,aAAa,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,GAAI,EACpH,KAAC,MAAM,IACH,KAAK,EAAC,UAAU,EAChB,IAAI,EAAE,aAAa,EACnB,UAAU,EAAC,aAAa,EACxB,OAAO,EAAE,GAAG,EAAE;oCACV,oEAAoE;oCACpE,MAAM,EAAE,iBAAiB,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,YAAY,CAAC;oCAChE,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;oCACjH,QAAQ,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,cAAc,EAAE,CAAC,CAAC;gCAC3D,CAAC,GACH,IACH,CACN,EACA,CAAC,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,CACtC,KAAC,MAAM,IACH,KAAK,EAAC,WAAW,EACjB,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,WAAW,EAC9C,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,EAChD,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,GACxE,CACL,IACC,IACJ,CACT,CAAC;AACN,CAAC,CAAC;AAUF;;;;;;GAMG;AACH,MAAM,qBAAqB,GAAqE,CAAC,KAAK,EAAE,EAAE;IACtG,qBAAqB,CAAC,WAAW,GAAG,uBAAuB,CAAC;IAC5D,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IACtC,MAAM,YAAY,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAC;IAClD,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,GAAG,+BAA+B,CAAC,KAAK,CAAC,CAAC;IAEpF,IAAI,YAAY,EAAE,CAAC;QACf,OAAO,CACH,KAAC,4BAA4B,CAAC,QAAQ,IAAC,KAAK,EAAE,cAAc,YACvD,CAAC,OAAO,IAAI,KAAC,aAAa,IAAC,KAAK,EAAE,SAAS,YAAG,QAAQ,GAAiB,GACpC,CAC3C,CAAC;IACN,CAAC;IAED,OAAO,KAAC,aAAa,IAAC,KAAK,EAAE,SAAS,YAAG,QAAQ,GAAiB,CAAC;AACvE,CAAC,CAAC;AAcF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAoE,CAAC,KAAK,EAAE,EAAE;IAC3G,oBAAoB,CAAC,WAAW,GAAG,sBAAsB,CAAC;IAC1D,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC;IACvC,MAAM,OAAO,GAAG,SAAS,EAAE,CAAC;IAC5B,MAAM,YAAY,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAC;IAClD,MAAM,SAAS,GAAG,4BAA4B,CAAC,KAAK,CAAC,CAAC;IACtD,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChD,MAAM,WAAW,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;IAC3C,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAElD,SAAS,CAAC,GAAG,EAAE;QACX,WAAW,CAAC,WAAW,IAAI,SAAS,CAAC,CAAC;IAC1C,CAAC,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC;IAE7B,0GAA0G;IAC1G,MAAM,iBAAiB,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,YAAY,EAAE,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC;IACvD,MAAM,QAAQ,GAAG,QAAQ,IAAI,QAAQ,CAAC;IACtC,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,iBAAiB,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,iBAAiB,CAAC,EAAE,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEpJ,qDAAqD;IACrD,IAAI,UAAU,IAAI,CAAC,YAAY,IAAI,CAAC,SAAS,EAAE,CAAC;QAC5C,OAAO,4BAAG,QAAQ,GAAI,CAAC;IAC3B,CAAC;IAED,MAAM,EAAE,kBAAkB,EAAE,QAAQ,EAAE,GAAG,YAAY,CAAC;IACtD,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,SAAS,CAAC;IAEzG,0DAA0D;IAC1D,IAAI,QAAQ,EAAE,CAAC;QACX,OAAO,4BAAG,QAAQ,GAAI,CAAC;IAC3B,CAAC;IAED,yEAAyE;IACzE,IAAI,CAAC,QAAQ,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QACxC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,eAAe,GAAG,QAAQ,CAAC,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;IACrE,MAAM,YAAY,GAAG,UAAU,IAAI,QAAQ,CAAC;IAE5C,MAAM,WAAW,GAAG,CAChB,KAAC,WAAW,CAAC,QAAQ,IAAC,KAAK,EAAE,eAAe,YACxC,eACI,SAAS,EAAE,OAAO,CAAC,oBAAoB,EACvC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,EACpD,WAAW,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,EACrC,YAAY,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,aAEtC,YAAY,IAAI,CACb,eAAK,SAAS,EAAE,OAAO,CAAC,kBAAkB,aACrC,QAAQ,CAAC,MAAM,IAAI,CAChB,KAAC,MAAM,IAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,EAAE,UAAU,EAAC,aAAa,EAAC,OAAO,EAAE,OAAO,CAAC,YAAY,GAAI,CACtJ,EACA,QAAQ,CAAC,OAAO,IAAI,CACjB,8BACI,KAAC,MAAM,IAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE,UAAU,EAAC,aAAa,EAAC,OAAO,EAAE,OAAO,CAAC,YAAY,GAAI,EAC7I,QAAQ,IAAI,KAAC,MAAM,IAAC,IAAI,EAAE,oBAAoB,EAAE,UAAU,EAAC,aAAa,EAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,YAAY,GAAI,IAClI,CACN,IACC,CACT,EACD,KAAC,yBAAyB,CAAC,QAAQ,IAAC,KAAK,EAAE,IAAI,YAC3C,cAAK,SAAS,EAAE,OAAO,CAAC,kBAAkB,YAAG,QAAQ,GAAO,GAC3B,IACnC,GACa,CAC1B,CAAC;IAEF,OAAO,eAAe,CAAC,CAAC,CAAC,KAAC,MAAM,IAAC,SAAS,EAAE,eAAe,YAAG,WAAW,GAAU,CAAC,CAAC,CAAC,WAAW,CAAC;AACtG,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,wBAAwB,GAAsB,GAAG,EAAE;IACrD,wBAAwB,CAAC,WAAW,GAAG,0BAA0B,CAAC;IAClE,MAAM,OAAO,GAAG,SAAS,EAAE,CAAC;IAC5B,MAAM,YAAY,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAC;IAElD,OAAO,CACH,cAAK,GAAG,EAAE,YAAY,EAAE,kBAAkB,EAAE,SAAS,EAAE,OAAO,CAAC,eAAe,YAC1E,KAAC,UAAU,IAAC,SAAS,EAAE,OAAO,CAAC,oBAAoB,YAC/C,KAAC,cAAc,kCAAiC,GACvC,GACX,CACT,CAAC;AACN,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,kBAAkB,GAAsB,GAAG,EAAE;IAC/C,kBAAkB,CAAC,WAAW,GAAG,oBAAoB,CAAC;IACtD,MAAM,OAAO,GAAG,SAAS,EAAE,CAAC;IAC5B,MAAM,YAAY,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAC;IAElD,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,YAAY,CAAC;IAEzC,OAAO,CACH,KAAC,SAAS,IACN,SAAS,EAAE,OAAO,CAAC,SAAS,EAC5B,UAAU,EAAC,WAAW,EACtB,aAAa,EAAE,KAAC,aAAa,KAAG,EAChC,WAAW,EAAC,QAAQ,EACpB,KAAK,EAAE,KAAK,CAAC,UAAU,EACvB,QAAQ,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,GAChF,CACL,CAAC;AACN,CAAC,CAAC;AAYF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAgE,CAAC,KAAK,EAAE,EAAE;IACnG,gBAAgB,CAAC,WAAW,GAAG,kBAAkB,CAAC;IAClD,MAAM,OAAO,GAAG,SAAS,EAAE,CAAC;IAE5B,OAAO,cAAK,SAAS,EAAE,OAAO,CAAC,QAAQ,YAAG,KAAK,CAAC,QAAQ,GAAO,CAAC;AACpE,CAAC,CAAC;AAkBF,MAAM,eAAe,GAAG,eAA0G,CAAC;AAEnI,MAAM,CAAC,MAAM,SAAS,GAAG,UAAU,CAAoD,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;IAClG,SAAS,CAAC,WAAW,GAAG,WAAW,CAAC;IACpC,6DAA6D;IAC7D,MAAM,EAAE,QAAQ,EAAE,iBAAiB,EAAE,QAAQ,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC;IAC1H,MAAM,OAAO,GAAG,SAAS,EAAE,CAAC;IAC5B,MAAM,EAAE,IAAI,EAAE,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;IACzC,MAAM,YAAY,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAChD,MAAM,UAAU,GAAG,YAAY,EAAE,QAAQ,CAAC,OAAO,IAAI,KAAK,CAAC;IAE3D,MAAM,oBAAoB,GAAG,OAAO,CAAC,GAAG,EAAE;QACtC,OAAO,CACH,UAAU,IAAI,CACV,KAAC,gBAAgB,IAAC,KAAK,EAAC,QAAQ,EAAC,iBAAiB,EAAE,KAAK,YACrD,KAAC,wBAAwB,KAAG,GACb,CACtB,CACJ,CAAC;IACN,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IAEjB,oHAAoH;IACpH,MAAM,oBAAoB,GAA0C,OAAO,CAAC,GAAG,EAAE;QAC7E,6EAA6E;QAC7E,gEAAgE;QAChE,OAAO,UAAU,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,CAAC,KAAC,SAAS,OAAK,KAAK,EAAE,aAAa,EAAE,KAAK,GAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACvH,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IAEjB,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,EAAE;QAC/B,OAAO,CACH,QAAQ,CAAC,GAAG,CAAC,CAAC,oBAAoB,EAAE,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE;YACrD,IAAI,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;gBACxB,MAAM,UAAU,GAAG,KAAK,CAAC,KAAuC,CAAC;gBACjE,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;oBACnB,OAAO;wBACH,KAAK,EAAE,UAAU,CAAC,KAAK;wBACvB,iBAAiB,EAAE,UAAU,CAAC,iBAAiB;wBAC/C,OAAO,EAAE,KAAK;qBACjB,CAAC;gBACN,CAAC;YACL,CAAC;YACD,OAAO,IAAI,CAAC;QAChB,CAAC,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAC5B,CAAC;IACN,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,uFAAuF;IACvF,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAElI,8GAA8G;IAC9G,sGAAsG;IACtG,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAErI,MAAM,oBAAoB,GAAG,MAAM,CAAuB,SAAS,CAAC,CAAC;IAErE,sHAAsH;IACtH,yDAAyD;IACzD,eAAe,CAAC,GAAG,EAAE;QACjB,IAAI,iBAAiB,EAAE,CAAC;YACpB,oBAAoB,CAAC,OAAO,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC;YAC9C,YAAY,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC;QACzC,CAAC;aAAM,CAAC;YACJ,YAAY,CAAC,CAAC,GAAG,CAAC,oBAAoB,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACxD,oBAAoB,CAAC,OAAO,GAAG,SAAS,CAAC;QAC7C,CAAC;IACL,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAExB,SAAS,CAAC,GAAG,EAAE;QACX,KAAK,MAAM,eAAe,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YAClH,0FAA0F;YAC1F,gGAAgG;YAChG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;gBACjF,YAAY,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC;YACvD,CAAC;QACL,CAAC;IACL,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;IAEpB,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,KAA2B,EAAE,IAAiC,EAAE,EAAE;QAC5F,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACtC,YAAY,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YAC9C,cAAc,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACzE,CAAC;aAAM,CAAC;YACJ,cAAc,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YAChD,YAAY,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACvE,CAAC;IACL,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CACH,KAAC,eAAe,IAAC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,WAAW,QAAC,QAAQ,QAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,KAAM,IAAI,YAC5H,MAAC,gBAAgB,CAAC,QAAQ,IAAC,KAAK,EAAE,YAAY,aAC1C,KAAC,gBAAgB,KAAG,EACpB,cAAK,SAAS,EAAE,OAAO,CAAC,aAAa,YAChC,aAAa,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;wBAChC,MAAM,aAAa,GAAG,iBAAiB,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;wBAC/D,OAAO,CACH,MAAC,qBAAqB,IAAwC,SAAS,EAAE,KAAK,CAAC,KAAK,aAChF,eAAK,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,aAC5D,KAAC,eAAe,IAAC,IAAI,EAAE,IAAI,YACvB,KAAC,iBAAiB,cAAE,KAAK,CAAC,KAAK,GAAqB,GACtC,EAClB,KAAC,cAAc,IAAC,cAAc,EAAE,oBAAoB,YAChD,cAAK,SAAS,EAAE,OAAO,CAAC,QAAQ,YAAG,KAAK,CAAC,OAAO,GAAO,GAC1C,IACf,EACL,KAAK,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,IAAI,KAAC,OAAO,IAAC,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,GAAI,KAT3G,KAAK,CAAC,OAAO,CAAC,GAAG,IAAI,KAAK,CAAC,KAAK,CAUpC,CAC3B,CAAC;oBACN,CAAC,CAAC,GACA,IACkB,GACd,CACrB,CAAC;AACN,CAAC,CAAC,CAAC","sourcesContent":["import type { AccordionPanelProps, AccordionToggleData, AccordionToggleEvent, AccordionProps as FluentAccordionProps } from \"@fluentui/react-components\";\r\nimport type { ForwardRefExoticComponent, FunctionComponent, PropsWithChildren, RefAttributes } from \"react\";\r\n\r\nimport {\r\n AccordionHeader,\r\n AccordionItem,\r\n AccordionPanel,\r\n Divider,\r\n Accordion as FluentAccordion,\r\n MessageBar,\r\n MessageBarBody,\r\n Portal,\r\n SearchBox,\r\n Subtitle2Stronger,\r\n makeStyles,\r\n tokens,\r\n} from \"@fluentui/react-components\";\r\nimport { ArrowCircleUpRegular, CheckmarkFilled, EditRegular, EyeFilled, EyeOffRegular, FilterRegular, PinFilled, PinRegular } from \"@fluentui/react-icons\";\r\nimport { Children, forwardRef, isValidElement, useCallback, useContext, useEffect, useLayoutEffect, useMemo, useRef, useState } from \"react\";\r\n\r\nimport { ToolContext } from \"../hoc/fluentToolWrapper\";\r\nimport { useKeyState } from \"../hooks/keyboardHooks\";\r\nimport {\r\n AccordionContext,\r\n AccordionItemDepthContext,\r\n AccordionSectionBlockContext,\r\n useAccordionContext,\r\n useAccordionSectionBlockContext,\r\n useAccordionSectionItemState,\r\n} from \"./accordion.contexts\";\r\nimport { Button } from \"./button\";\r\nimport { CustomTokens } from \"./utils\";\r\n\r\nconst useStyles = makeStyles({\r\n accordion: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n height: \"100%\",\r\n },\r\n accordionBody: {\r\n overflowX: \"hidden\",\r\n overflowY: \"auto\",\r\n paddingBottom: tokens.spacingVerticalM, // bottom padding since there is no divider at the bottom\r\n },\r\n divider: {\r\n paddingTop: CustomTokens.dividerGap,\r\n paddingBottom: CustomTokens.dividerGap,\r\n },\r\n dividerSmall: {\r\n paddingTop: CustomTokens.dividerGapSmall,\r\n paddingBottom: CustomTokens.dividerGapSmall,\r\n },\r\n panelDiv: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n overflow: \"hidden\",\r\n },\r\n highlightDiv: {\r\n borderRadius: tokens.borderRadiusLarge,\r\n animationDuration: \"1s\",\r\n animationTimingFunction: \"ease-in-out\",\r\n animationIterationCount: \"5\",\r\n animationFillMode: \"forwards\",\r\n animationName: {\r\n from: {\r\n boxShadow: `inset 0 0 4px ${tokens.colorTransparentBackground}`,\r\n },\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n \"50%\": {\r\n boxShadow: `inset 0 0 12px ${tokens.colorBrandBackground}`,\r\n },\r\n to: {\r\n boxShadow: `inset 0 0 4px ${tokens.colorTransparentBackground}`,\r\n },\r\n },\r\n },\r\n menuBar: {\r\n display: \"flex\",\r\n },\r\n menuBarControls: {\r\n display: \"flex\",\r\n flexGrow: 1,\r\n justifyContent: \"end\",\r\n },\r\n sectionItemContainer: {\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n alignItems: \"center\",\r\n },\r\n sectionItemContent: {\r\n flexGrow: 1,\r\n minWidth: 0, // Allow content to shrink below its intrinsic width when buttons are shown\r\n overflow: \"hidden\",\r\n },\r\n sectionItemButtons: {\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n alignItems: \"center\",\r\n marginRight: tokens.spacingHorizontalXS,\r\n },\r\n pinnedContainer: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n },\r\n pinnedContainerEmpty: {\r\n \"&:not(:only-child)\": {\r\n display: \"none\",\r\n },\r\n },\r\n searchBox: {\r\n width: \"100%\",\r\n maxWidth: \"none\",\r\n },\r\n});\r\n\r\n/**\r\n * Renders the menu bar and control buttons.\r\n *\r\n * @returns `div`, or `undefined` if all features are disabled.\r\n */\r\nconst AccordionMenuBar: FunctionComponent = () => {\r\n AccordionMenuBar.displayName = \"AccordionMenuBar\";\r\n const classes = useStyles();\r\n const accordionCtx = useContext(AccordionContext);\r\n\r\n if (!accordionCtx) {\r\n return null;\r\n }\r\n\r\n const { state, dispatch, features } = accordionCtx;\r\n const { editMode } = state;\r\n\r\n return (\r\n <div className={classes.menuBar}>\r\n <AccordionSearchBox />\r\n <div className={classes.menuBarControls}>\r\n {features.hiding && editMode && (\r\n <>\r\n <Button title=\"Show all\" icon={EyeFilled} appearance=\"transparent\" onClick={() => dispatch({ type: \"SHOW_ALL\" })} />\r\n <Button\r\n title=\"Hide all\"\r\n icon={EyeOffRegular}\r\n appearance=\"transparent\"\r\n onClick={() => {\r\n // Hide all visible (non-hidden) items using the registered item IDs\r\n const { registeredItemIds, state: currentState } = accordionCtx;\r\n const visibleItemIds = Array.from(registeredItemIds.keys()).filter((id) => !currentState.hiddenIds.includes(id));\r\n dispatch({ type: \"HIDE_ALL_VISIBLE\", visibleItemIds });\r\n }}\r\n />\r\n </>\r\n )}\r\n {(features.pinning || features.hiding) && (\r\n <Button\r\n title=\"Edit mode\"\r\n icon={editMode ? CheckmarkFilled : EditRegular}\r\n appearance={editMode ? \"primary\" : \"transparent\"}\r\n onClick={() => dispatch({ type: \"SET_EDIT_MODE\", enabled: !editMode })}\r\n />\r\n )}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\n/**\r\n * Props: `AccordionSectionBlock`.\r\n */\r\nexport type AccordionSectionBlockProps = {\r\n /** The ID of the `AccordionSectionBlock`, unique within the `Accordion` instance. */\r\n sectionId: string;\r\n};\r\n\r\n/**\r\n * Wrapper component that must encapsulate the section headers and panels.\r\n * - Stores the section ID for use in `AccordionSectionItem`.\r\n *\r\n * @param props - `AccordionSectionBlockProps`\r\n * @returns `AccordionSectionBlockContext.Provider`, or `AccordionItem` if all features are disabled.\r\n */\r\nconst AccordionSectionBlock: FunctionComponent<PropsWithChildren<AccordionSectionBlockProps>> = (props) => {\r\n AccordionSectionBlock.displayName = \"AccordionSectionBlock\";\r\n const { children, sectionId } = props;\r\n const accordionCtx = useContext(AccordionContext);\r\n const { context: sectionContext, isEmpty } = useAccordionSectionBlockContext(props);\r\n\r\n if (accordionCtx) {\r\n return (\r\n <AccordionSectionBlockContext.Provider value={sectionContext}>\r\n {!isEmpty && <AccordionItem value={sectionId}>{children}</AccordionItem>}\r\n </AccordionSectionBlockContext.Provider>\r\n );\r\n }\r\n\r\n return <AccordionItem value={sectionId}>{children}</AccordionItem>;\r\n};\r\n\r\n/**\r\n * Props: `AccordionSectionItem`.\r\n */\r\nexport type AccordionSectionItemProps = {\r\n /** The ID of the `AccordionSectionItem`, unique within the `AccordionSectionBlock` instance. */\r\n uniqueId: string;\r\n /** The searchable text label for the item. */\r\n label?: string;\r\n /** Whether the item is not interactable. */\r\n staticItem?: boolean;\r\n};\r\n\r\n/**\r\n * Wrapper component that must encapsulate individual items.\r\n * - Renders the pin button and tracks the pinned state of the item.\r\n * - Renders the hide button and tracks the hidden state of the item.\r\n * - Filters items based on the current search term.\r\n *\r\n * @param props - `AccordionSectionItemProps`\r\n * @returns `Portal` if pinned; `null` if hidden/filtered; `children` otherwise.\r\n */\r\nexport const AccordionSectionItem: FunctionComponent<PropsWithChildren<AccordionSectionItemProps>> = (props) => {\r\n AccordionSectionItem.displayName = \"AccordionSectionItem\";\r\n const { children, staticItem } = props;\r\n const classes = useStyles();\r\n const accordionCtx = useContext(AccordionContext);\r\n const itemState = useAccordionSectionItemState(props);\r\n const [ctrlMode, setCtrlMode] = useState(false);\r\n const ctrlPressed = useKeyState(\"Control\");\r\n const [mouseOver, setMouseOver] = useState(false);\r\n\r\n useEffect(() => {\r\n setCtrlMode(ctrlPressed && mouseOver);\r\n }, [ctrlPressed, mouseOver]);\r\n\r\n // Override disableCopy so copy buttons appear when ctrl+hovering on this item or when edit mode is active\r\n const parentToolContext = useContext(ToolContext);\r\n const editMode = accordionCtx?.state.editMode ?? false;\r\n const showCopy = ctrlMode || editMode;\r\n const itemToolContext = useMemo(() => (showCopy ? { ...parentToolContext, disableCopy: false } : parentToolContext), [parentToolContext, showCopy]);\r\n\r\n // If static item or no context, just render children\r\n if (staticItem || !accordionCtx || !itemState) {\r\n return <>{children}</>;\r\n }\r\n\r\n const { pinnedContainerRef, features } = accordionCtx;\r\n const { isNested, isPinned, isHidden, isMatch, pinnedIndex, canMoveUp, inEditMode, actions } = itemState;\r\n\r\n // Nested items just render children (don't show controls)\r\n if (isNested) {\r\n return <>{children}</>;\r\n }\r\n\r\n // If hidden (and not in edit mode) or doesn't match search, don't render\r\n if ((isHidden && !inEditMode) || !isMatch) {\r\n return null;\r\n }\r\n\r\n const pinnedContainer = isPinned ? pinnedContainerRef.current : null;\r\n const showControls = inEditMode || ctrlMode;\r\n\r\n const itemElement = (\r\n <ToolContext.Provider value={itemToolContext}>\r\n <div\r\n className={classes.sectionItemContainer}\r\n style={isPinned ? { order: pinnedIndex } : undefined}\r\n onMouseMove={() => setMouseOver(true)}\r\n onMouseLeave={() => setMouseOver(false)}\r\n >\r\n {showControls && (\r\n <div className={classes.sectionItemButtons}>\r\n {features.hiding && (\r\n <Button title={isHidden ? \"Unhide\" : \"Hide\"} icon={isHidden ? EyeOffRegular : EyeFilled} appearance=\"transparent\" onClick={actions.toggleHidden} />\r\n )}\r\n {features.pinning && (\r\n <>\r\n <Button title={isPinned ? \"Unpin\" : \"Pin\"} icon={isPinned ? PinFilled : PinRegular} appearance=\"transparent\" onClick={actions.togglePinned} />\r\n {isPinned && <Button icon={ArrowCircleUpRegular} appearance=\"transparent\" disabled={!canMoveUp} onClick={actions.movePinnedUp} />}\r\n </>\r\n )}\r\n </div>\r\n )}\r\n <AccordionItemDepthContext.Provider value={true}>\r\n <div className={classes.sectionItemContent}>{children}</div>\r\n </AccordionItemDepthContext.Provider>\r\n </div>\r\n </ToolContext.Provider>\r\n );\r\n\r\n return pinnedContainer ? <Portal mountNode={pinnedContainer}>{itemElement}</Portal> : itemElement;\r\n};\r\n\r\n/**\r\n * Renders the Pinned section container and defines the portal target for the pinned items.\r\n *\r\n * @returns `div`\r\n */\r\nconst AccordionPinnedContainer: FunctionComponent = () => {\r\n AccordionPinnedContainer.displayName = \"AccordionPinnedContainer\";\r\n const classes = useStyles();\r\n const accordionCtx = useContext(AccordionContext);\r\n\r\n return (\r\n <div ref={accordionCtx?.pinnedContainerRef} className={classes.pinnedContainer}>\r\n <MessageBar className={classes.pinnedContainerEmpty}>\r\n <MessageBarBody>No pinned items</MessageBarBody>\r\n </MessageBar>\r\n </div>\r\n );\r\n};\r\n\r\n/**\r\n * Renders the search box for filtering items.\r\n *\r\n * @returns `SearchBox`, or `null` if the feature is disabled.\r\n */\r\nconst AccordionSearchBox: FunctionComponent = () => {\r\n AccordionSearchBox.displayName = \"AccordionSearchBox\";\r\n const classes = useStyles();\r\n const accordionCtx = useContext(AccordionContext);\r\n\r\n if (!accordionCtx?.features.search) {\r\n return null;\r\n }\r\n\r\n const { state, dispatch } = accordionCtx;\r\n\r\n return (\r\n <SearchBox\r\n className={classes.searchBox}\r\n appearance=\"underline\"\r\n contentBefore={<FilterRegular />}\r\n placeholder=\"Filter\"\r\n value={state.searchTerm}\r\n onChange={(_, data) => dispatch({ type: \"SET_SEARCH_TERM\", term: data.value })}\r\n />\r\n );\r\n};\r\n\r\n/**\r\n * Props: `AccordionSection`.\r\n */\r\nexport type AccordionSectionProps = {\r\n /** The text label shown in the section header. */\r\n title: string;\r\n /** Indicates whether the `AccordionSection` is initially collapsed. */\r\n collapseByDefault?: boolean;\r\n};\r\n\r\n/**\r\n * Wrapper component that must encapsulate the section body.\r\n *\r\n * @param props - `AccordionSectionProps`\r\n * @returns `div`\r\n */\r\nexport const AccordionSection: FunctionComponent<PropsWithChildren<AccordionSectionProps>> = (props) => {\r\n AccordionSection.displayName = \"AccordionSection\";\r\n const classes = useStyles();\r\n\r\n return <div className={classes.panelDiv}>{props.children}</div>;\r\n};\r\n\r\n/**\r\n * Props: `Accordion`.\r\n */\r\nexport type AccordionProps = {\r\n /** The unique ID of the `Accordion` instance. */\r\n uniqueId?: string;\r\n /** The list of sections to be highlighted. */\r\n highlightSections?: readonly string[];\r\n /** Enables the pinned items feature. */\r\n enablePinnedItems?: boolean;\r\n /** Enables the hidden items feature. */\r\n enableHiddenItems?: boolean;\r\n /** Enables the search items feature. */\r\n enableSearchItems?: boolean;\r\n};\r\n\r\nconst StringAccordion = FluentAccordion as ForwardRefExoticComponent<FluentAccordionProps<string> & RefAttributes<HTMLDivElement>>;\r\n\r\nexport const Accordion = forwardRef<HTMLDivElement, PropsWithChildren<AccordionProps>>((props, ref) => {\r\n Accordion.displayName = \"Accordion\";\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n const { children, highlightSections, uniqueId, enablePinnedItems, enableHiddenItems, enableSearchItems, ...rest } = props;\r\n const classes = useStyles();\r\n const { size } = useContext(ToolContext);\r\n const accordionCtx = useAccordionContext(props);\r\n const hasPinning = accordionCtx?.features.pinning ?? false;\r\n\r\n const pinnedSectionElement = useMemo(() => {\r\n return (\r\n hasPinning && (\r\n <AccordionSection title=\"Pinned\" collapseByDefault={false}>\r\n <AccordionPinnedContainer />\r\n </AccordionSection>\r\n )\r\n );\r\n }, [hasPinning]);\r\n\r\n // Prevents sections contents from unmounting when closed, allowing their elements to be used in the Pinned section.\r\n const preventUnmountMotion: AccordionPanelProps[\"collapseMotion\"] = useMemo(() => {\r\n // https://github.com/microsoft/fluentui/issues/34309#issuecomment-2824364945\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n return hasPinning ? { children: (Component, props) => <Component {...props} unmountOnExit={false} /> } : undefined;\r\n }, [hasPinning]);\r\n\r\n const validChildren = useMemo(() => {\r\n return (\r\n Children.map([pinnedSectionElement, children], (child) => {\r\n if (isValidElement(child)) {\r\n const childProps = child.props as Partial<AccordionSectionProps>;\r\n if (childProps.title) {\r\n return {\r\n title: childProps.title,\r\n collapseByDefault: childProps.collapseByDefault,\r\n content: child,\r\n };\r\n }\r\n }\r\n return null;\r\n })?.filter(Boolean) ?? []\r\n );\r\n }, [children]);\r\n\r\n // Tracks open items, and used to tell the Accordion which sections should be expanded.\r\n const [openItems, setOpenItems] = useState(validChildren.filter((child) => !child.collapseByDefault).map((child) => child.title));\r\n\r\n // Tracks closed items, which is needed so that when the children change, we only update the open/closed state\r\n // (depending on the collapseByDefault prop) for items that have not been explicitly opened or closed.\r\n const [closedItems, setClosedItems] = useState(validChildren.filter((child) => child.collapseByDefault).map((child) => child.title));\r\n\r\n const internalOpenItemsRef = useRef<string[] | undefined>(openItems);\r\n\r\n // When highlight sections is requested, we temporarily override the open items, but if highlight sections is cleared,\r\n // then we revert back to the normal open items tracking.\r\n useLayoutEffect(() => {\r\n if (highlightSections) {\r\n internalOpenItemsRef.current = [...openItems];\r\n setOpenItems([...highlightSections]);\r\n } else {\r\n setOpenItems([...(internalOpenItemsRef.current ?? [])]);\r\n internalOpenItemsRef.current = undefined;\r\n }\r\n }, [highlightSections]);\r\n\r\n useEffect(() => {\r\n for (const defaultOpenItem of validChildren.filter((child) => !child.collapseByDefault).map((child) => child.title)) {\r\n // If a child is not marked as collapseByDefault, then it should be opened by default, and\r\n // it is only \"default\" if it hasn't already been explicitly added to the opened or closed list.\r\n if (!closedItems.includes(defaultOpenItem) && !openItems.includes(defaultOpenItem)) {\r\n setOpenItems((prev) => [...prev, defaultOpenItem]);\r\n }\r\n }\r\n }, [validChildren]);\r\n\r\n const onToggle = useCallback((event: AccordionToggleEvent, data: AccordionToggleData<string>) => {\r\n if (data.openItems.includes(data.value)) {\r\n setOpenItems((prev) => [...prev, data.value]);\r\n setClosedItems((prev) => prev.filter((item) => item !== data.value));\r\n } else {\r\n setClosedItems((prev) => [...prev, data.value]);\r\n setOpenItems((prev) => prev.filter((item) => item !== data.value));\r\n }\r\n }, []);\r\n\r\n return (\r\n <StringAccordion ref={ref} className={classes.accordion} collapsible multiple onToggle={onToggle} openItems={openItems} {...rest}>\r\n <AccordionContext.Provider value={accordionCtx}>\r\n <AccordionMenuBar />\r\n <div className={classes.accordionBody}>\r\n {validChildren.map((child, index) => {\r\n const isHighlighted = highlightSections?.includes(child.title);\r\n return (\r\n <AccordionSectionBlock key={child.content.key ?? child.title} sectionId={child.title}>\r\n <div className={isHighlighted ? classes.highlightDiv : undefined}>\r\n <AccordionHeader size={size}>\r\n <Subtitle2Stronger>{child.title}</Subtitle2Stronger>\r\n </AccordionHeader>\r\n <AccordionPanel collapseMotion={preventUnmountMotion}>\r\n <div className={classes.panelDiv}>{child.content}</div>\r\n </AccordionPanel>\r\n </div>\r\n {index < validChildren.length - 1 && <Divider inset={true} className={size === \"small\" ? classes.dividerSmall : classes.divider} />}\r\n </AccordionSectionBlock>\r\n );\r\n })}\r\n </div>\r\n </AccordionContext.Provider>\r\n </StringAccordion>\r\n );\r\n});\r\n"]}
@@ -30,6 +30,9 @@ export class OptionsLine extends React.Component {
30
30
  this._localChange = false;
31
31
  return true;
32
32
  }
33
+ if (nextProps.options !== this.props.options) {
34
+ return true;
35
+ }
33
36
  const newValue = this._remapValueIn(nextProps.extractValue ? nextProps.extractValue(this.props.target) : nextProps.target[nextProps.propertyName]);
34
37
  if (newValue != null && newValue !== nextState.value) {
35
38
  nextState.value = newValue;
@@ -1 +1 @@
1
- {"version":3,"file":"optionsLineComponent.js","sourceRoot":"","sources":["../../../../dev/sharedUiComponents/src/lines/optionsLineComponent.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from \"react\";\r\nimport type { Observable } from \"core/Misc/observable\";\r\nimport type { PropertyChangedEvent } from \"../propertyChangedEvent\";\r\nimport { copyCommandToClipboard, getClassNameWithNamespace } from \"../copyCommandToClipboard\";\r\nimport type { IInspectableOptions } from \"core/Misc/iInspectable\";\r\nimport copyIcon from \"../imgs/copy.svg\";\r\nimport { PropertyLine } from \"../fluent/hoc/propertyLines/propertyLine\";\r\nimport { Dropdown } from \"../fluent/primitives/dropdown\";\r\nimport type { AcceptedDropdownValue } from \"../fluent/primitives/dropdown\";\r\nimport { ToolContext } from \"../fluent/hoc/fluentToolWrapper\";\r\n\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport const Null_Value = Number.MAX_SAFE_INTEGER;\r\n\r\nexport interface IOptionsLineProps {\r\n label: string;\r\n target: any;\r\n propertyName: string;\r\n options: readonly IInspectableOptions[];\r\n noDirectUpdate?: boolean;\r\n onSelect?: (value: number | string) => void;\r\n extractValue?: (target: any) => number | string;\r\n onPropertyChangedObservable?: Observable<PropertyChangedEvent>;\r\n allowNullValue?: boolean;\r\n icon?: string;\r\n iconLabel?: string;\r\n className?: string;\r\n valuesAreStrings?: boolean;\r\n defaultIfNull?: number;\r\n}\r\n\r\nexport class OptionsLine extends React.Component<IOptionsLineProps, { value: number | string }> {\r\n private _localChange = false;\r\n\r\n private _remapValueIn(value: number | null): number {\r\n return this.props.allowNullValue && value === null ? Null_Value : value!;\r\n }\r\n\r\n private _remapValueOut(value: number): number | null {\r\n return this.props.allowNullValue && value === Null_Value ? null : value;\r\n }\r\n\r\n private _getValue(props: IOptionsLineProps) {\r\n if (props.extractValue) {\r\n return props.extractValue(props.target);\r\n }\r\n return props.target && props.propertyName ? props.target[props.propertyName] : props.options[props.defaultIfNull || 0];\r\n }\r\n\r\n constructor(props: IOptionsLineProps) {\r\n super(props);\r\n\r\n this.state = { value: this._remapValueIn(this._getValue(props)) };\r\n }\r\n\r\n override shouldComponentUpdate(nextProps: IOptionsLineProps, nextState: { value: number }) {\r\n if (this._localChange) {\r\n this._localChange = false;\r\n return true;\r\n }\r\n\r\n const newValue = this._remapValueIn(nextProps.extractValue ? nextProps.extractValue(this.props.target) : nextProps.target[nextProps.propertyName]);\r\n if (newValue != null && newValue !== nextState.value) {\r\n nextState.value = newValue;\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n raiseOnPropertyChanged(newValue: number, previousValue: number) {\r\n if (!this.props.onPropertyChangedObservable) {\r\n return;\r\n }\r\n\r\n this.props.onPropertyChangedObservable.notifyObservers({\r\n object: this.props.target,\r\n property: this.props.propertyName,\r\n value: newValue,\r\n initialValue: previousValue,\r\n allowNullValue: this.props.allowNullValue,\r\n });\r\n }\r\n\r\n setValue(value: string | number) {\r\n this.setState({ value: value });\r\n }\r\n\r\n updateValue(valueString: string) {\r\n const value = this.props.valuesAreStrings ? valueString : parseInt(valueString);\r\n this._localChange = true;\r\n\r\n const store = this.props.extractValue ? this.props.extractValue(this.props.target) : this.props.target[this.props.propertyName];\r\n\r\n if (!this.props.noDirectUpdate) {\r\n this.props.target[this.props.propertyName] = this._remapValueOut(value as number);\r\n }\r\n this.setState({ value: value });\r\n\r\n if (this.props.onSelect) {\r\n this.props.onSelect(value);\r\n }\r\n\r\n const newValue = this.props.extractValue ? this.props.extractValue(this.props.target) : this.props.target[this.props.propertyName];\r\n\r\n this.raiseOnPropertyChanged(newValue, store);\r\n }\r\n\r\n // Copy to clipboard the code this option actually does\r\n // Example : material.sideOrientation = 1;\r\n onCopyClickStr() {\r\n if (this.props && this.props.target) {\r\n const { className, babylonNamespace } = getClassNameWithNamespace(this.props.target);\r\n const targetName = \"globalThis.debugNode\";\r\n const targetProperty = this.props.propertyName;\r\n const value = this.props.extractValue ? this.props.extractValue(this.props.target) : this.props.target[this.props.propertyName];\r\n const strCommand = targetName + \".\" + targetProperty + \" = \" + value + \";// (debugNode as \" + babylonNamespace + className + \")\";\r\n return strCommand;\r\n } else {\r\n return \"undefined\";\r\n }\r\n }\r\n\r\n private _renderFluent() {\r\n return (\r\n <PropertyLine label={this.props.label} onCopy={() => this.onCopyClickStr()}>\r\n <Dropdown\r\n options={this.props.options}\r\n onChange={(val: AcceptedDropdownValue) => {\r\n // val != null captures both null and undefined cases\r\n val != null && this.updateValue(val.toString());\r\n }}\r\n value={this.state.value}\r\n />\r\n </PropertyLine>\r\n );\r\n }\r\n\r\n private _renderOriginal() {\r\n return (\r\n <div className={\"listLine\" + (this.props.className ? \" \" + this.props.className : \"\")}>\r\n {this.props.icon && <img src={this.props.icon} title={this.props.iconLabel} alt={this.props.iconLabel} color=\"black\" className=\"icon\" />}\r\n <div className=\"label\" title={this.props.label}>\r\n {this.props.label}\r\n </div>\r\n <div className=\"options\">\r\n <select onChange={(evt) => this.updateValue(evt.target.value)} value={this.state.value ?? \"\"}>\r\n {this.props.options.map((option, i) => {\r\n return (\r\n <option selected={option.selected} key={option.label + i} value={option.value} title={option.label}>\r\n {option.label}\r\n </option>\r\n );\r\n })}\r\n </select>\r\n </div>\r\n <div className=\"copy hoverIcon\" onClick={() => copyCommandToClipboard(this.onCopyClickStr())} title=\"Copy to clipboard\">\r\n <img src={copyIcon} alt=\"Copy\" />\r\n </div>\r\n </div>\r\n );\r\n }\r\n override render() {\r\n return <ToolContext.Consumer>{({ useFluent }) => (useFluent ? this._renderFluent() : this._renderOriginal())}</ToolContext.Consumer>;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"optionsLineComponent.js","sourceRoot":"","sources":["../../../../dev/sharedUiComponents/src/lines/optionsLineComponent.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from \"react\";\r\nimport type { Observable } from \"core/Misc/observable\";\r\nimport type { PropertyChangedEvent } from \"../propertyChangedEvent\";\r\nimport { copyCommandToClipboard, getClassNameWithNamespace } from \"../copyCommandToClipboard\";\r\nimport type { IInspectableOptions } from \"core/Misc/iInspectable\";\r\nimport copyIcon from \"../imgs/copy.svg\";\r\nimport { PropertyLine } from \"../fluent/hoc/propertyLines/propertyLine\";\r\nimport { Dropdown } from \"../fluent/primitives/dropdown\";\r\nimport type { AcceptedDropdownValue } from \"../fluent/primitives/dropdown\";\r\nimport { ToolContext } from \"../fluent/hoc/fluentToolWrapper\";\r\n\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport const Null_Value = Number.MAX_SAFE_INTEGER;\r\n\r\nexport interface IOptionsLineProps {\r\n label: string;\r\n target: any;\r\n propertyName: string;\r\n options: readonly IInspectableOptions[];\r\n noDirectUpdate?: boolean;\r\n onSelect?: (value: number | string) => void;\r\n extractValue?: (target: any) => number | string;\r\n onPropertyChangedObservable?: Observable<PropertyChangedEvent>;\r\n allowNullValue?: boolean;\r\n icon?: string;\r\n iconLabel?: string;\r\n className?: string;\r\n valuesAreStrings?: boolean;\r\n defaultIfNull?: number;\r\n}\r\n\r\nexport class OptionsLine extends React.Component<IOptionsLineProps, { value: number | string }> {\r\n private _localChange = false;\r\n\r\n private _remapValueIn(value: number | null): number {\r\n return this.props.allowNullValue && value === null ? Null_Value : value!;\r\n }\r\n\r\n private _remapValueOut(value: number): number | null {\r\n return this.props.allowNullValue && value === Null_Value ? null : value;\r\n }\r\n\r\n private _getValue(props: IOptionsLineProps) {\r\n if (props.extractValue) {\r\n return props.extractValue(props.target);\r\n }\r\n return props.target && props.propertyName ? props.target[props.propertyName] : props.options[props.defaultIfNull || 0];\r\n }\r\n\r\n constructor(props: IOptionsLineProps) {\r\n super(props);\r\n\r\n this.state = { value: this._remapValueIn(this._getValue(props)) };\r\n }\r\n\r\n override shouldComponentUpdate(nextProps: IOptionsLineProps, nextState: { value: number }) {\r\n if (this._localChange) {\r\n this._localChange = false;\r\n return true;\r\n }\r\n\r\n if (nextProps.options !== this.props.options) {\r\n return true;\r\n }\r\n\r\n const newValue = this._remapValueIn(nextProps.extractValue ? nextProps.extractValue(this.props.target) : nextProps.target[nextProps.propertyName]);\r\n if (newValue != null && newValue !== nextState.value) {\r\n nextState.value = newValue;\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n raiseOnPropertyChanged(newValue: number, previousValue: number) {\r\n if (!this.props.onPropertyChangedObservable) {\r\n return;\r\n }\r\n\r\n this.props.onPropertyChangedObservable.notifyObservers({\r\n object: this.props.target,\r\n property: this.props.propertyName,\r\n value: newValue,\r\n initialValue: previousValue,\r\n allowNullValue: this.props.allowNullValue,\r\n });\r\n }\r\n\r\n setValue(value: string | number) {\r\n this.setState({ value: value });\r\n }\r\n\r\n updateValue(valueString: string) {\r\n const value = this.props.valuesAreStrings ? valueString : parseInt(valueString);\r\n this._localChange = true;\r\n\r\n const store = this.props.extractValue ? this.props.extractValue(this.props.target) : this.props.target[this.props.propertyName];\r\n\r\n if (!this.props.noDirectUpdate) {\r\n this.props.target[this.props.propertyName] = this._remapValueOut(value as number);\r\n }\r\n this.setState({ value: value });\r\n\r\n if (this.props.onSelect) {\r\n this.props.onSelect(value);\r\n }\r\n\r\n const newValue = this.props.extractValue ? this.props.extractValue(this.props.target) : this.props.target[this.props.propertyName];\r\n\r\n this.raiseOnPropertyChanged(newValue, store);\r\n }\r\n\r\n // Copy to clipboard the code this option actually does\r\n // Example : material.sideOrientation = 1;\r\n onCopyClickStr() {\r\n if (this.props && this.props.target) {\r\n const { className, babylonNamespace } = getClassNameWithNamespace(this.props.target);\r\n const targetName = \"globalThis.debugNode\";\r\n const targetProperty = this.props.propertyName;\r\n const value = this.props.extractValue ? this.props.extractValue(this.props.target) : this.props.target[this.props.propertyName];\r\n const strCommand = targetName + \".\" + targetProperty + \" = \" + value + \";// (debugNode as \" + babylonNamespace + className + \")\";\r\n return strCommand;\r\n } else {\r\n return \"undefined\";\r\n }\r\n }\r\n\r\n private _renderFluent() {\r\n return (\r\n <PropertyLine label={this.props.label} onCopy={() => this.onCopyClickStr()}>\r\n <Dropdown\r\n options={this.props.options}\r\n onChange={(val: AcceptedDropdownValue) => {\r\n // val != null captures both null and undefined cases\r\n val != null && this.updateValue(val.toString());\r\n }}\r\n value={this.state.value}\r\n />\r\n </PropertyLine>\r\n );\r\n }\r\n\r\n private _renderOriginal() {\r\n return (\r\n <div className={\"listLine\" + (this.props.className ? \" \" + this.props.className : \"\")}>\r\n {this.props.icon && <img src={this.props.icon} title={this.props.iconLabel} alt={this.props.iconLabel} color=\"black\" className=\"icon\" />}\r\n <div className=\"label\" title={this.props.label}>\r\n {this.props.label}\r\n </div>\r\n <div className=\"options\">\r\n <select onChange={(evt) => this.updateValue(evt.target.value)} value={this.state.value ?? \"\"}>\r\n {this.props.options.map((option, i) => {\r\n return (\r\n <option selected={option.selected} key={option.label + i} value={option.value} title={option.label}>\r\n {option.label}\r\n </option>\r\n );\r\n })}\r\n </select>\r\n </div>\r\n <div className=\"copy hoverIcon\" onClick={() => copyCommandToClipboard(this.onCopyClickStr())} title=\"Copy to clipboard\">\r\n <img src={copyIcon} alt=\"Copy\" />\r\n </div>\r\n </div>\r\n );\r\n }\r\n override render() {\r\n return <ToolContext.Consumer>{({ useFluent }) => (useFluent ? this._renderFluent() : this._renderOriginal())}</ToolContext.Consumer>;\r\n }\r\n}\r\n"]}
@@ -1295,6 +1295,9 @@ export class GraphFrame {
1295
1295
  this.element.style.height = `${frameElementHeight + heightModification}px`;
1296
1296
  }
1297
1297
  dispose() {
1298
+ if (this._isFocused) {
1299
+ this.switchFocusMode();
1300
+ }
1298
1301
  if (this._onSelectionChangedObserver) {
1299
1302
  this._ownerCanvas.stateManager.onSelectionChangedObservable.remove(this._onSelectionChangedObserver);
1300
1303
  }
@@ -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 } from \"core/Misc/observable\";\r\nimport { 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._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 } from \"core/Misc/observable\";\r\nimport { 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": "@onerjs/shared-ui-components",
3
- "version": "8.42.3",
3
+ "version": "8.42.5",
4
4
  "main": "index.js",
5
5
  "module": "index.js",
6
6
  "types": "index.d.ts",