@babylonjs/shared-ui-components 7.36.0 → 7.37.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/Button.js +1 -1
- package/components/Button.js.map +1 -1
- package/components/Icon.js +1 -1
- package/components/Icon.js.map +1 -1
- package/components/Label.js +1 -1
- package/components/Label.js.map +1 -1
- package/components/MessageDialog.js +1 -1
- package/components/MessageDialog.js.map +1 -1
- package/components/TextInputWithSubmit.js +1 -1
- package/components/TextInputWithSubmit.js.map +1 -1
- package/components/Toggle.js +1 -1
- package/components/Toggle.js.map +1 -1
- package/components/bars/CommandBarComponent.js +1 -1
- package/components/bars/CommandBarComponent.js.map +1 -1
- package/components/bars/CommandButtonComponent.js +1 -1
- package/components/bars/CommandButtonComponent.js.map +1 -1
- package/components/bars/CommandDropdownComponent.js +1 -1
- package/components/bars/CommandDropdownComponent.js.map +1 -1
- package/components/colorPicker/ColorComponentEntry.js +1 -1
- package/components/colorPicker/ColorComponentEntry.js.map +1 -1
- package/components/colorPicker/ColorPicker.js +1 -1
- package/components/colorPicker/ColorPicker.js.map +1 -1
- package/components/colorPicker/HexColor.js +1 -1
- package/components/colorPicker/HexColor.js.map +1 -1
- package/components/layout/FlexibleColumn.js +1 -1
- package/components/layout/FlexibleColumn.js.map +1 -1
- package/components/layout/FlexibleDropZone.js +1 -1
- package/components/layout/FlexibleDropZone.js.map +1 -1
- package/components/layout/FlexibleGridContainer.js +1 -1
- package/components/layout/FlexibleGridContainer.js.map +1 -1
- package/components/layout/FlexibleResizeBar.js +1 -1
- package/components/layout/FlexibleResizeBar.js.map +1 -1
- package/components/layout/FlexibleTab.js +1 -1
- package/components/layout/FlexibleTab.js.map +1 -1
- package/components/layout/FlexibleTabsContainer.js +1 -1
- package/components/layout/FlexibleTabsContainer.js.map +1 -1
- package/components/lines/ColorLineComponent.js +1 -1
- package/components/lines/ColorLineComponent.js.map +1 -1
- package/components/lines/ColorPickerLineComponent.js +1 -1
- package/components/lines/ColorPickerLineComponent.js.map +1 -1
- package/components/lines/FileButtonLineComponent.js +1 -1
- package/components/lines/FileButtonLineComponent.js.map +1 -1
- package/components/lines/NumericInputComponent.js +1 -1
- package/components/lines/NumericInputComponent.js.map +1 -1
- package/components/lines/OptionsLineComponent.js +1 -1
- package/components/lines/OptionsLineComponent.js.map +1 -1
- package/components/reactGraphSystem/GraphConnectorHandle.js +1 -1
- package/components/reactGraphSystem/GraphConnectorHandle.js.map +1 -1
- package/components/reactGraphSystem/GraphContainer.js +1 -1
- package/components/reactGraphSystem/GraphContainer.js.map +1 -1
- package/components/reactGraphSystem/GraphNode.js +1 -1
- package/components/reactGraphSystem/GraphNode.js.map +1 -1
- package/nodeGraphSystem/frameNodePort.js +1 -1
- package/nodeGraphSystem/frameNodePort.js.map +1 -1
- package/nodeGraphSystem/graphCanvas.js +2 -2
- package/nodeGraphSystem/graphCanvas.js.map +1 -1
- package/nodeGraphSystem/graphFrame.js +2 -2
- package/nodeGraphSystem/graphFrame.js.map +1 -1
- package/nodeGraphSystem/graphFrame.module.scss +6 -0
- package/nodeGraphSystem/graphNode.js +2 -2
- package/nodeGraphSystem/graphNode.js.map +1 -1
- package/nodeGraphSystem/nodeLink.js +6 -2
- package/nodeGraphSystem/nodeLink.js.map +1 -1
- package/nodeGraphSystem/nodePort.js +2 -2
- package/nodeGraphSystem/nodePort.js.map +1 -1
- package/nodeGraphSystem/tools.js +1 -1
- package/nodeGraphSystem/tools.js.map +1 -1
- package/package.json +1 -1
- package/split/splitContainer.js +1 -1
- package/split/splitContainer.js.map +1 -1
- package/split/splitter.js +1 -1
- package/split/splitter.js.map +1 -1
@@ -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 styles from \"./graphFrame.module.scss\";\r\nimport 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 _headerFocusElement: 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 private readonly _focusSVG = `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6.24992 4.5C5.28344 4.5 4.49996 5.2835 4.49996 6.25V17.75C4.49996 18.7165 5.28344 19.5 6.24992 19.5H17.7496C18.7161 19.5 19.4996 18.7165 19.4996 17.75V13.75C19.4996 13.3358 19.8354 13 20.2496 13C20.6638 13 20.9995 13.3358 20.9995 13.75V17.75C20.9995 19.5449 19.5445 21 17.7496 21H6.24992C4.45504 21 3 19.5449 3 17.75V6.25C3 4.45507 4.45504 3 6.24992 3H10.2498C10.664 3 10.9998 3.33579 10.9998 3.75C10.9998 4.16421 10.664 4.5 10.2498 4.5H6.24992ZM12.9997 3.75C12.9997 3.33579 13.3355 3 13.7497 3H20.25C20.6642 3 21 3.33579 21 3.75V10.25C21 10.6642 20.6642 11 20.25 11C19.8358 11 19.5 10.6642 19.5 10.25V5.56074L14.28 10.7804C13.9871 11.0732 13.5123 11.0732 13.2194 10.7803C12.9265 10.4874 12.9265 10.0125 13.2194 9.71964L18.4395 4.5H13.7497C13.3355 4.5 12.9997 4.16421 12.9997 3.75Z\" /></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)) continue;\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) return true;\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) return true;\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 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\";\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 // Focus\r\n this._headerFocusElement = root.ownerDocument!.createElement(\"div\");\r\n this._headerFocusElement.classList.add(styles[\"frame-box-header-focus\"]);\r\n this._headerFocusElement.classList.add(styles[\"frame-box-header-button\"]);\r\n this._headerFocusElement.title = \"Switch focus mode\";\r\n this._headerFocusElement.ondragstart = () => false;\r\n this._headerFocusElement.addEventListener(\"pointerdown\", (evt) => {\r\n evt.stopPropagation();\r\n });\r\n this._headerFocusElement.addEventListener(\"pointerup\", (evt) => {\r\n evt.stopPropagation();\r\n this.switchFocusMode();\r\n });\r\n this._headerFocusElement.innerHTML = this._focusSVG;\r\n this._headerElement.appendChild(this._headerFocusElement);\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 this.isCollapsed = !this.isCollapsed;\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 //@ts-ignore\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 //@ts-ignore\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 _headerFocusElement: 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 private readonly _focusSVG = `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6.24992 4.5C5.28344 4.5 4.49996 5.2835 4.49996 6.25V17.75C4.49996 18.7165 5.28344 19.5 6.24992 19.5H17.7496C18.7161 19.5 19.4996 18.7165 19.4996 17.75V13.75C19.4996 13.3358 19.8354 13 20.2496 13C20.6638 13 20.9995 13.3358 20.9995 13.75V17.75C20.9995 19.5449 19.5445 21 17.7496 21H6.24992C4.45504 21 3 19.5449 3 17.75V6.25C3 4.45507 4.45504 3 6.24992 3H10.2498C10.664 3 10.9998 3.33579 10.9998 3.75C10.9998 4.16421 10.664 4.5 10.2498 4.5H6.24992ZM12.9997 3.75C12.9997 3.33579 13.3355 3 13.7497 3H20.25C20.6642 3 21 3.33579 21 3.75V10.25C21 10.6642 20.6642 11 20.25 11C19.8358 11 19.5 10.6642 19.5 10.25V5.56074L14.28 10.7804C13.9871 11.0732 13.5123 11.0732 13.2194 10.7803C12.9265 10.4874 12.9265 10.0125 13.2194 9.71964L18.4395 4.5H13.7497C13.3355 4.5 12.9997 4.16421 12.9997 3.75Z\" /></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)) continue;\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) return true;\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) return true;\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 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\";\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 // Focus\r\n this._headerFocusElement = root.ownerDocument!.createElement(\"div\");\r\n this._headerFocusElement.classList.add(styles[\"frame-box-header-focus\"]);\r\n this._headerFocusElement.classList.add(styles[\"frame-box-header-button\"]);\r\n this._headerFocusElement.title = \"Switch focus mode\";\r\n this._headerFocusElement.ondragstart = () => false;\r\n this._headerFocusElement.addEventListener(\"pointerdown\", (evt) => {\r\n evt.stopPropagation();\r\n });\r\n this._headerFocusElement.addEventListener(\"pointerup\", (evt) => {\r\n evt.stopPropagation();\r\n this.switchFocusMode();\r\n });\r\n this._headerFocusElement.innerHTML = this._focusSVG;\r\n this._headerElement.appendChild(this._headerFocusElement);\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 this.isCollapsed = !this.isCollapsed;\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 //@ts-ignore\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 //@ts-ignore\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"]}
|