@babylonjs/shared-ui-components 7.26.0 → 7.26.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.
@@ -28,6 +28,7 @@ export declare class GraphFrame {
28
28
  private _headerTextElement;
29
29
  private _headerCollapseElement;
30
30
  private _headerCloseElement;
31
+ private _headerFocusElement;
31
32
  private _commentsElement;
32
33
  private _portContainer;
33
34
  private _outputPortContainer;
@@ -57,6 +58,7 @@ export declare class GraphFrame {
57
58
  private readonly _closeSVG;
58
59
  private readonly _expandSVG;
59
60
  private readonly _collapseSVG;
61
+ private readonly _focusSVG;
60
62
  get id(): number;
61
63
  get isCollapsed(): boolean;
62
64
  private _createInputPort;
@@ -85,6 +87,11 @@ export declare class GraphFrame {
85
87
  get comments(): string;
86
88
  set comments(comments: string);
87
89
  constructor(candidate: Nullable<HTMLDivElement>, canvas: GraphCanvasComponent, doNotCaptureNodes?: boolean);
90
+ private _isFocused;
91
+ /**
92
+ * Enter/leave focus mode
93
+ */
94
+ switchFocusMode(): void;
88
95
  refresh(): void;
89
96
  addNode(node: GraphNode): void;
90
97
  removeNode(node: GraphNode): void;
@@ -425,6 +425,8 @@ export class GraphFrame {
425
425
  this._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>`;
426
426
  this._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>`;
427
427
  this._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>`;
428
+ this._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>`;
429
+ this._isFocused = false;
428
430
  this._initResizing = (evt) => {
429
431
  evt.stopPropagation();
430
432
  this._mouseStartPointX = evt.clientX;
@@ -867,6 +869,22 @@ export class GraphFrame {
867
869
  this._headerTextElement = root.ownerDocument.createElement("div");
868
870
  this._headerTextElement.classList.add(styles["frame-box-header-title"]);
869
871
  this._headerElement.appendChild(this._headerTextElement);
872
+ // Focus
873
+ this._headerFocusElement = root.ownerDocument.createElement("div");
874
+ this._headerFocusElement.classList.add(styles["frame-box-header-focus"]);
875
+ this._headerFocusElement.classList.add(styles["frame-box-header-button"]);
876
+ this._headerFocusElement.title = "Switch focus mode";
877
+ this._headerFocusElement.ondragstart = () => false;
878
+ this._headerFocusElement.addEventListener("pointerdown", (evt) => {
879
+ evt.stopPropagation();
880
+ });
881
+ this._headerFocusElement.addEventListener("pointerup", (evt) => {
882
+ evt.stopPropagation();
883
+ this.switchFocusMode();
884
+ });
885
+ this._headerFocusElement.innerHTML = this._focusSVG;
886
+ this._headerElement.appendChild(this._headerFocusElement);
887
+ // Collapse
870
888
  this._headerCollapseElement = root.ownerDocument.createElement("div");
871
889
  this._headerCollapseElement.classList.add(styles["frame-box-header-collapse"]);
872
890
  this._headerCollapseElement.classList.add(styles["frame-box-header-button"]);
@@ -883,6 +901,7 @@ export class GraphFrame {
883
901
  });
884
902
  this._headerCollapseElement.innerHTML = this._collapseSVG;
885
903
  this._headerElement.appendChild(this._headerCollapseElement);
904
+ // Close
886
905
  this._headerCloseElement = root.ownerDocument.createElement("div");
887
906
  this._headerCloseElement.classList.add(styles["frame-box-header-close"]);
888
907
  this._headerCloseElement.classList.add(styles["frame-box-header-button"]);
@@ -963,7 +982,65 @@ export class GraphFrame {
963
982
  this.refresh();
964
983
  }
965
984
  }
985
+ /**
986
+ * Enter/leave focus mode
987
+ */
988
+ switchFocusMode() {
989
+ if (this._isFocused) {
990
+ this._isFocused = false;
991
+ for (const node of this._ownerCanvas.nodes) {
992
+ if (this._nodes.indexOf(node) === -1) {
993
+ node.rootElement.style.transition = "";
994
+ node.rootElement.style.opacity = "";
995
+ node.rootElement.style.pointerEvents = "";
996
+ }
997
+ }
998
+ for (const link of this._ownerCanvas.links) {
999
+ link.path.style.transition = "";
1000
+ link.path.style.opacity = "";
1001
+ link.selectionPath.style.pointerEvents = "";
1002
+ }
1003
+ for (const frame of this._ownerCanvas.frames) {
1004
+ if (frame !== this) {
1005
+ frame.element.style.transition = "";
1006
+ frame.element.style.opacity = "";
1007
+ frame.element.style.pointerEvents = "";
1008
+ }
1009
+ }
1010
+ return;
1011
+ }
1012
+ this._isFocused = true;
1013
+ for (const node of this._ownerCanvas.nodes) {
1014
+ if (this._nodes.indexOf(node) === -1) {
1015
+ node.rootElement.style.transition = "opacity 0.5s";
1016
+ node.rootElement.style.opacity = "0.05";
1017
+ node.rootElement.style.pointerEvents = "none";
1018
+ }
1019
+ }
1020
+ for (const link of this._ownerCanvas.links) {
1021
+ if (this._nodes.indexOf(link.nodeA) === -1 || this._nodes.indexOf(link.nodeB) === -1) {
1022
+ link.path.style.transition = "opacity 0.5s";
1023
+ link.path.style.opacity = "0.3";
1024
+ link.selectionPath.style.pointerEvents = "none";
1025
+ }
1026
+ if (this._nodes.indexOf(link.nodeA) === -1 && this._nodes.indexOf(link.nodeB) === -1) {
1027
+ link.path.style.transition = "opacity 0.5s";
1028
+ link.path.style.opacity = "0.05";
1029
+ link.selectionPath.style.pointerEvents = "none";
1030
+ }
1031
+ }
1032
+ for (const frame of this._ownerCanvas.frames) {
1033
+ if (frame !== this) {
1034
+ frame.element.style.transition = "opacity 0.5s";
1035
+ frame.element.style.opacity = "0.05";
1036
+ frame.element.style.pointerEvents = "none";
1037
+ }
1038
+ }
1039
+ }
966
1040
  refresh() {
1041
+ if (this._isFocused) {
1042
+ return;
1043
+ }
967
1044
  this._nodes = [];
968
1045
  this._ownerCanvas.stateManager.onFrameCreatedObservable.notifyObservers(this);
969
1046
  }
@@ -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.modules.scss\";\r\nimport commonStyles from \"./common.modules.scss\";\r\nimport { ClassNames } from \"../components/classNames\";\r\n\r\nimport type { ISelectionChangedOptions } from \"./interfaces/selectionChangedOptions\";\r\n\r\nenum ResizingDirection {\r\n Right,\r\n Left,\r\n Top,\r\n Bottom,\r\n TopRight,\r\n TopLeft,\r\n BottomRight,\r\n BottomLeft,\r\n}\r\n\r\nexport enum FramePortPosition {\r\n Top,\r\n Middle,\r\n Bottom,\r\n}\r\n\r\nexport class GraphFrame {\r\n private readonly _collapsedWidth = 200;\r\n private static _FrameCounter = 0;\r\n private static _FramePortCounter = 0;\r\n private _name: string;\r\n private _color: Color3;\r\n private _x = 0;\r\n private _y = 0;\r\n private _gridAlignedX = 0;\r\n private _gridAlignedY = 0;\r\n private _width: number;\r\n private _height: number;\r\n public element: HTMLDivElement;\r\n private _borderElement: HTMLDivElement;\r\n private _headerElement: HTMLDivElement;\r\n private _headerTextElement: HTMLDivElement;\r\n private _headerCollapseElement: HTMLDivElement;\r\n private _headerCloseElement: HTMLDivElement;\r\n private _commentsElement: HTMLDivElement;\r\n private _portContainer: HTMLDivElement;\r\n private _outputPortContainer: HTMLDivElement;\r\n private _inputPortContainer: HTMLDivElement;\r\n private _nodes: GraphNode[] = [];\r\n private _ownerCanvas: GraphCanvasComponent;\r\n private _mouseStartPointX: Nullable<number> = null;\r\n private _mouseStartPointY: Nullable<number> = null;\r\n private _onSelectionChangedObserver: Nullable<Observer<Nullable<ISelectionChangedOptions>>>;\r\n private _onGraphNodeRemovalObserver: Nullable<Observer<GraphNode>>;\r\n private _onExposePortOnFrameObserver: Nullable<Observer<GraphNode>>;\r\n private _onNodeLinkDisposedObservers: Nullable<Observer<NodeLink>>[] = [];\r\n private _isCollapsed = false;\r\n private _frameInPorts: FrameNodePort[] = [];\r\n private _frameOutPorts: FrameNodePort[] = [];\r\n private _controlledPorts: NodePort[] = []; // Ports on Nodes that are shown on outside of frame\r\n private _exposedInPorts: NodePort[] = [];\r\n private _exposedOutPorts: NodePort[] = [];\r\n private _id: number;\r\n private _comments: string;\r\n private _frameIsResizing: boolean;\r\n private _resizingDirection: Nullable<ResizingDirection>;\r\n private _minFrameHeight = 40;\r\n private _minFrameWidth = 220;\r\n private _mouseXLimit: Nullable<number>;\r\n\r\n public onExpandStateChanged = new Observable<GraphFrame>();\r\n\r\n private readonly _closeSVG = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 30 30\"><g id=\"Layer_2\" data-name=\"Layer 2\"><path d=\"M16,15l5.85,5.84-1,1L15,15.93,9.15,21.78l-1-1L14,15,8.19,9.12l1-1L15,14l5.84-5.84,1,1Z\"/></g></svg>`;\r\n private readonly _expandSVG = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 30 30\"><g id=\"Layer_2\" data-name=\"Layer 2\"><path d=\"M22.31,7.69V22.31H7.69V7.69ZM21.19,8.81H8.81V21.19H21.19Zm-6.75,6.75H11.06V14.44h3.38V11.06h1.12v3.38h3.38v1.12H15.56v3.38H14.44Z\"/></g></svg>`;\r\n private readonly _collapseSVG = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 30 30\"><g id=\"Layer_2\" data-name=\"Layer 2\"><path d=\"M22.31,7.69V22.31H7.69V7.69ZM21.19,8.81H8.81V21.19H21.19Zm-2.25,6.75H11.06V14.44h7.88Z\"/></g></svg>`;\r\n\r\n public get id() {\r\n return this._id;\r\n }\r\n\r\n public get isCollapsed() {\r\n return this._isCollapsed;\r\n }\r\n\r\n private _createInputPort(port: NodePort, node: GraphNode) {\r\n const localPort = FrameNodePort.CreateFrameNodePortElement(\r\n port.portData,\r\n node,\r\n this._inputPortContainer,\r\n null,\r\n this._ownerCanvas.stateManager,\r\n true,\r\n GraphFrame._FramePortCounter++,\r\n this.id\r\n );\r\n this._frameInPorts.push(localPort);\r\n\r\n port.delegatedPort = localPort;\r\n this._controlledPorts.push(port);\r\n\r\n port.exposedPortPosition = this._exposedInPorts.findIndex((nodePort) => nodePort === port);\r\n if (port.exposedPortPosition < 0) {\r\n this._exposedInPorts.push(port);\r\n port.exposedPortPosition = this._exposedInPorts.length - 1;\r\n }\r\n }\r\n\r\n // Mark ports with FramePortPosition for re-arrangement support\r\n private _markFramePortPositions() {\r\n // mark FrameInPorts\r\n if (this._frameInPorts.length == 2) {\r\n this._frameInPorts[0].framePortPosition = FramePortPosition.Top;\r\n this._frameInPorts[1].framePortPosition = FramePortPosition.Bottom;\r\n } else {\r\n for (let i = 0; i < this._frameInPorts.length; i++) {\r\n const port = this._frameInPorts[i];\r\n if (i === 0) {\r\n port.framePortPosition = FramePortPosition.Top;\r\n } else if (i === this._frameInPorts.length - 1) {\r\n port.framePortPosition = FramePortPosition.Bottom;\r\n } else {\r\n port.framePortPosition = FramePortPosition.Middle;\r\n }\r\n }\r\n }\r\n\r\n // mark FrameOutPorts\r\n if (this._frameOutPorts.length == 2) {\r\n this._frameOutPorts[0].framePortPosition = FramePortPosition.Top;\r\n this._frameOutPorts[1].framePortPosition = FramePortPosition.Bottom;\r\n } else {\r\n for (let i = 0; i < this._frameOutPorts.length; i++) {\r\n const port = this._frameOutPorts[i];\r\n if (i === 0) {\r\n port.framePortPosition = FramePortPosition.Top;\r\n } else if (i === this._frameInPorts.length - 1) {\r\n port.framePortPosition = FramePortPosition.Bottom;\r\n } else {\r\n port.framePortPosition = FramePortPosition.Middle;\r\n }\r\n }\r\n }\r\n }\r\n\r\n private _createFramePorts() {\r\n for (const node of this._nodes) {\r\n node.isVisible = false;\r\n }\r\n\r\n for (let i = 0; i < this._exposedOutPorts.length; ) {\r\n // Output\r\n const port = this._exposedOutPorts[i];\r\n if (port) {\r\n if (port.node === null || port.node.enclosingFrameId != this.id) {\r\n if (this._removePortFromExposedWithNode(port, this._exposedOutPorts)) 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 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 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\"]);\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 public refresh() {\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 styles from \"./graphFrame.modules.scss\";\r\nimport commonStyles from \"./common.modules.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\"]);\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"]}
@@ -43,7 +43,7 @@
43
43
  text-align: center;
44
44
  display: grid;
45
45
  grid-template-rows: 100%;
46
- grid-template-columns: calc(100% - 74px) 30px 7px 30px 7px;
46
+ grid-template-columns: calc(100% - 111px) 30px 7px 30px 7px 30px 7px;
47
47
  align-content: center;
48
48
  overflow: hidden;
49
49
  }
@@ -67,11 +67,16 @@
67
67
  grid-row: 1;
68
68
  }
69
69
 
70
- .frame-box-header-close {
70
+ .frame-box-header-focus {
71
71
  grid-column: 4;
72
72
  grid-row: 1;
73
73
  }
74
74
 
75
+ .frame-box-header-close {
76
+ grid-column: 6;
77
+ grid-row: 1;
78
+ }
79
+
75
80
  .frame-box-header-title {
76
81
  grid-column: 1;
77
82
  grid-row: 1;
@@ -64,6 +64,7 @@ export declare class GraphNode {
64
64
  set enclosingFrameId(value: number);
65
65
  set isSelected(value: boolean);
66
66
  setIsSelected(value: boolean, marqueeSelection: boolean): void;
67
+ get rootElement(): HTMLDivElement;
67
68
  constructor(content: INodeData, stateManager: StateManager);
68
69
  isOverlappingFrame(frame: GraphFrame): boolean;
69
70
  getPortForPortData(portData: IPortData): NodePort | null;
@@ -116,6 +116,9 @@ export class GraphNode {
116
116
  this._stateManager.onSelectionChangedObservable.notifyObservers({ selection: this, marqueeSelection });
117
117
  }
118
118
  }
119
+ get rootElement() {
120
+ return this._visual;
121
+ }
119
122
  constructor(content, stateManager) {
120
123
  this.content = content;
121
124
  this._inputPorts = [];
@@ -1 +1 @@
1
- {"version":3,"file":"graphNode.js","sourceRoot":"","sources":["../../../../dev/sharedUiComponents/src/nodeGraphSystem/graphNode.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"core/types\";\r\nimport type { Observer } from \"core/Misc/observable\";\r\nimport type { GraphCanvasComponent } from \"./graphCanvas\";\r\nimport * as React from \"react\";\r\nimport { NodePort } from \"./nodePort\";\r\nimport type { GraphFrame } from \"./graphFrame\";\r\nimport type { NodeLink } from \"./nodeLink\";\r\nimport type { StateManager } from \"./stateManager\";\r\nimport type { ISelectionChangedOptions } from \"./interfaces/selectionChangedOptions\";\r\nimport type { IDisplayManager } from \"./interfaces/displayManager\";\r\nimport { PropertyLedger } from \"./propertyLedger\";\r\nimport { DisplayLedger } from \"./displayLedger\";\r\nimport type { INodeData } from \"./interfaces/nodeData\";\r\nimport type { IPortData } from \"./interfaces/portData\";\r\nimport localStyles from \"./graphNode.modules.scss\";\r\nimport commonStyles from \"./common.modules.scss\";\r\n\r\nexport class GraphNode {\r\n private _visual: HTMLDivElement;\r\n private _headerContainer: HTMLDivElement;\r\n private _headerIcon: HTMLDivElement;\r\n private _headerIconImg: HTMLImageElement;\r\n private _header: HTMLDivElement;\r\n private _connections: HTMLDivElement;\r\n private _inputsContainer: HTMLDivElement;\r\n private _outputsContainer: HTMLDivElement;\r\n private _content: HTMLDivElement;\r\n private _comments: HTMLDivElement;\r\n private _executionTime: HTMLDivElement;\r\n private _selectionBorder: HTMLDivElement;\r\n private _inputPorts: NodePort[] = [];\r\n private _outputPorts: NodePort[] = [];\r\n private _links: NodeLink[] = [];\r\n private _x = 0;\r\n private _y = 0;\r\n private _gridAlignedX = 0;\r\n private _gridAlignedY = 0;\r\n private _mouseStartPointX: Nullable<number> = null;\r\n private _mouseStartPointY: Nullable<number> = null;\r\n private _stateManager: StateManager;\r\n private _onSelectionChangedObserver: Nullable<Observer<Nullable<ISelectionChangedOptions>>>;\r\n private _onSelectionBoxMovedObserver: Nullable<Observer<ClientRect | DOMRect>>;\r\n private _onFrameCreatedObserver: Nullable<Observer<GraphFrame>>;\r\n private _onUpdateRequiredObserver: Nullable<Observer<Nullable<INodeData>>>;\r\n private _onHighlightNodeObserver: Nullable<Observer<any>>;\r\n private _ownerCanvas: GraphCanvasComponent;\r\n private _isSelected: boolean;\r\n private _displayManager: Nullable<IDisplayManager> = null;\r\n private _isVisible = true;\r\n private _enclosingFrameId = -1;\r\n\r\n public addClassToVisual(className: string) {\r\n this._visual.classList.add(className);\r\n }\r\n\r\n public removeClassFromVisual(className: string) {\r\n this._visual.classList.remove(className);\r\n }\r\n\r\n public get isVisible() {\r\n return this._isVisible;\r\n }\r\n\r\n public set isVisible(value: boolean) {\r\n this._isVisible = value;\r\n\r\n if (!value) {\r\n this._visual.classList.add(commonStyles[\"hidden\"]);\r\n } else {\r\n this._visual.classList.remove(commonStyles[\"hidden\"]);\r\n this._upateNodePortNames();\r\n }\r\n\r\n for (const link of this._links) {\r\n link.isVisible = value;\r\n }\r\n\r\n this._refreshLinks();\r\n }\r\n\r\n private _upateNodePortNames() {\r\n for (const port of this._inputPorts.concat(this._outputPorts)) {\r\n if (port.hasLabel()) {\r\n port.portName = port.portData.name;\r\n }\r\n }\r\n }\r\n\r\n public get outputPorts() {\r\n return this._outputPorts;\r\n }\r\n\r\n public get inputPorts() {\r\n return this._inputPorts;\r\n }\r\n\r\n public get links() {\r\n return this._links;\r\n }\r\n\r\n public get gridAlignedX() {\r\n return this._gridAlignedX;\r\n }\r\n\r\n public get gridAlignedY() {\r\n return this._gridAlignedY;\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._visual.style.left = `${this._gridAlignedX}px`;\r\n\r\n this._refreshLinks();\r\n this._refreshFrames();\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._visual.style.top = `${this._gridAlignedY}px`;\r\n\r\n this._refreshLinks();\r\n this._refreshFrames();\r\n }\r\n\r\n public get width() {\r\n return this._visual.clientWidth;\r\n }\r\n\r\n public get height() {\r\n return this._visual.clientHeight;\r\n }\r\n\r\n public get id() {\r\n return this.content.uniqueId;\r\n }\r\n\r\n public get name() {\r\n return this.content.name;\r\n }\r\n\r\n public get isSelected() {\r\n return this._isSelected;\r\n }\r\n\r\n public get enclosingFrameId() {\r\n return this._enclosingFrameId;\r\n }\r\n\r\n public set enclosingFrameId(value: number) {\r\n this._enclosingFrameId = value;\r\n }\r\n\r\n public set isSelected(value: boolean) {\r\n this.setIsSelected(value, false);\r\n }\r\n\r\n public setIsSelected(value: boolean, marqueeSelection: boolean) {\r\n if (this._isSelected === value) {\r\n return;\r\n }\r\n\r\n this._isSelected = value;\r\n\r\n if (!value) {\r\n this._visual.classList.remove(localStyles[\"selected\"]);\r\n const indexInSelection = this._ownerCanvas.selectedNodes.indexOf(this);\r\n\r\n if (indexInSelection > -1) {\r\n this._ownerCanvas.selectedNodes.splice(indexInSelection, 1);\r\n }\r\n } else {\r\n this._stateManager.onSelectionChangedObservable.notifyObservers({ selection: this, marqueeSelection });\r\n }\r\n }\r\n\r\n public constructor(\r\n public content: INodeData,\r\n stateManager: StateManager\r\n ) {\r\n this._stateManager = stateManager;\r\n\r\n this._onSelectionChangedObserver = this._stateManager.onSelectionChangedObservable.add((options) => {\r\n const { selection: node } = options || {};\r\n if (node === this) {\r\n this._visual.classList.add(localStyles[\"selected\"]);\r\n if (this._displayManager && this._displayManager.onSelectionChanged) {\r\n this._displayManager.onSelectionChanged(this.content, node.content, this._stateManager);\r\n }\r\n } else {\r\n if (this._ownerCanvas.selectedNodes.indexOf(this) === -1) {\r\n this._visual.classList.remove(localStyles[\"selected\"]);\r\n if (this._displayManager && this._displayManager.onSelectionChanged) {\r\n this._displayManager.onSelectionChanged(this.content, node && (node as GraphNode).content ? (node as GraphNode).content : null, this._stateManager);\r\n }\r\n }\r\n }\r\n });\r\n\r\n this._onHighlightNodeObserver = this._stateManager.onHighlightNodeObservable.add((data) => {\r\n if (data.data !== this.content.data) {\r\n return;\r\n }\r\n if (data.active) {\r\n this._visual.classList.add(localStyles[\"highlighted\"]);\r\n } else {\r\n this._visual.classList.remove(localStyles[\"highlighted\"]);\r\n }\r\n });\r\n\r\n this._onUpdateRequiredObserver = this._stateManager.onUpdateRequiredObservable.add((data) => {\r\n if (data !== this.content.data) {\r\n return;\r\n }\r\n this.refresh();\r\n });\r\n\r\n this._onSelectionBoxMovedObserver = this._stateManager.onSelectionBoxMoved.add((rect1) => {\r\n const rect2 = this._visual.getBoundingClientRect();\r\n const overlap = !(rect1.right < rect2.left || rect1.left > rect2.right || rect1.bottom < rect2.top || rect1.top > rect2.bottom);\r\n\r\n this.setIsSelected(overlap, true);\r\n });\r\n\r\n this._onFrameCreatedObserver = this._stateManager.onFrameCreatedObservable.add((frame) => {\r\n if (this._ownerCanvas.frames.some((f) => f.nodes.indexOf(this) !== -1)) {\r\n return;\r\n }\r\n\r\n if (this.isOverlappingFrame(frame)) {\r\n frame.nodes.push(this);\r\n }\r\n });\r\n }\r\n\r\n public isOverlappingFrame(frame: GraphFrame) {\r\n const rect2 = this._visual.getBoundingClientRect();\r\n const rect1 = frame.element.getBoundingClientRect();\r\n\r\n // Add a tiny margin\r\n rect1.width -= 5;\r\n rect1.height -= 5;\r\n\r\n const isOverlappingFrame = !(rect1.right < rect2.left || rect1.left > rect2.right || rect1.bottom < rect2.top || rect1.top > rect2.bottom);\r\n\r\n if (isOverlappingFrame) {\r\n this.enclosingFrameId = frame.id;\r\n }\r\n return isOverlappingFrame;\r\n }\r\n\r\n public getPortForPortData(portData: IPortData) {\r\n for (const port of this._inputPorts) {\r\n const attachedPoint = port.portData;\r\n\r\n if (attachedPoint === portData || (attachedPoint.ownerData === portData.ownerData && attachedPoint.internalName === portData.internalName)) {\r\n return port;\r\n }\r\n }\r\n\r\n for (const port of this._outputPorts) {\r\n const attachedPoint = port.portData;\r\n\r\n if (attachedPoint === portData || (attachedPoint.ownerData === portData.ownerData && attachedPoint.internalName === portData.internalName)) {\r\n return port;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n public getPortDataForPortDataContent(data: any) {\r\n for (const port of this._inputPorts) {\r\n const attachedPoint = port.portData;\r\n\r\n if (attachedPoint.data === data) {\r\n return attachedPoint;\r\n }\r\n }\r\n\r\n for (const port of this._outputPorts) {\r\n const attachedPoint = port.portData;\r\n\r\n if (attachedPoint.data === data) {\r\n return attachedPoint;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n public getLinksForPortDataContent(data: any) {\r\n return this._links.filter((link) => link.portA.portData.data === data || link.portB!.portData.data === data);\r\n }\r\n\r\n public getLinksForPortData(portData: IPortData) {\r\n return this._links.filter((link) => link.portA.portData === portData || link.portB!.portData === portData);\r\n }\r\n\r\n private _refreshFrames() {\r\n if (this._ownerCanvas._frameIsMoving || this._ownerCanvas._isLoading) {\r\n return;\r\n }\r\n\r\n // Frames\r\n for (const frame of this._ownerCanvas.frames) {\r\n frame.syncNode(this);\r\n }\r\n }\r\n\r\n public _refreshLinks() {\r\n if (this._ownerCanvas._isLoading) {\r\n return;\r\n }\r\n for (const link of this._links) {\r\n link.update();\r\n }\r\n }\r\n\r\n public refresh() {\r\n if (this._displayManager) {\r\n this._header.innerHTML = this._displayManager.getHeaderText(this.content);\r\n this._displayManager.updatePreviewContent(this.content, this._content);\r\n this._visual.style.background = this._displayManager.getBackgroundColor(this.content);\r\n const additionalClass = this._displayManager.getHeaderClass(this.content);\r\n this._header.classList.value = localStyles.header;\r\n this._headerContainer.classList.value = localStyles[\"header-container\"];\r\n if (additionalClass) {\r\n this._headerContainer.classList.add(additionalClass);\r\n }\r\n if (this._displayManager.updateFullVisualContent) {\r\n this._displayManager.updateFullVisualContent(this.content, {\r\n visual: this._visual,\r\n header: this._header,\r\n headerContainer: this._headerContainer,\r\n headerIcon: this._headerIcon,\r\n headerIconImg: this._headerIconImg,\r\n comments: this._comments,\r\n connections: this._connections,\r\n inputsContainer: this._inputsContainer,\r\n outputsContainer: this._outputsContainer,\r\n content: this._content,\r\n selectionBorder: this._selectionBorder,\r\n });\r\n }\r\n } else {\r\n this._header.innerHTML = this.content.name;\r\n }\r\n\r\n for (const port of this._inputPorts) {\r\n port.refresh();\r\n }\r\n\r\n for (const port of this._outputPorts) {\r\n port.refresh();\r\n }\r\n\r\n if (this.enclosingFrameId !== -1) {\r\n const index = this._ownerCanvas.frames.findIndex((frame) => frame.id === this.enclosingFrameId);\r\n if (index >= 0 && this._ownerCanvas.frames[index].isCollapsed) {\r\n this._ownerCanvas.frames[index].redrawFramePorts();\r\n }\r\n }\r\n\r\n this._comments.innerHTML = this.content.comments || \"\";\r\n this._comments.title = this.content.comments || \"\";\r\n\r\n const executionTime = this.content.executionTime || 0;\r\n this._executionTime.innerHTML = executionTime >= 0 ? `${executionTime.toFixed(2)} ms` : \"\";\r\n\r\n this.content.prepareHeaderIcon(this._headerIcon, this._headerIconImg);\r\n if (this._headerIconImg.src) {\r\n this._header.classList.add(localStyles[\"headerWithIcon\"]);\r\n }\r\n }\r\n\r\n private _onDown(evt: PointerEvent) {\r\n // Check if this is coming from the port\r\n if (evt.target && (evt.target as HTMLElement).nodeName === \"IMG\") {\r\n return;\r\n }\r\n\r\n const indexInSelection = this._ownerCanvas.selectedNodes.indexOf(this);\r\n if (indexInSelection === -1) {\r\n this._stateManager.onSelectionChangedObservable.notifyObservers({ selection: this });\r\n } else if (evt.ctrlKey) {\r\n this.setIsSelected(false, false);\r\n }\r\n\r\n evt.stopPropagation();\r\n\r\n for (const selectedNode of this._ownerCanvas.selectedNodes) {\r\n selectedNode.cleanAccumulation();\r\n }\r\n\r\n this._mouseStartPointX = evt.clientX;\r\n this._mouseStartPointY = evt.clientY;\r\n\r\n this._visual.setPointerCapture(evt.pointerId);\r\n }\r\n\r\n public cleanAccumulation(useCeil = false) {\r\n this.x = this._ownerCanvas.getGridPosition(this.x, useCeil);\r\n this.y = this._ownerCanvas.getGridPosition(this.y, useCeil);\r\n }\r\n\r\n private _onUp(evt: PointerEvent) {\r\n evt.stopPropagation();\r\n\r\n for (const selectedNode of this._ownerCanvas.selectedNodes) {\r\n selectedNode.cleanAccumulation();\r\n }\r\n\r\n this._mouseStartPointX = null;\r\n this._mouseStartPointY = null;\r\n this._visual.releasePointerCapture(evt.pointerId);\r\n\r\n if (!this._ownerCanvas._targetLinkCandidate) {\r\n this._stateManager.onNodeMovedObservable.notifyObservers(this);\r\n return;\r\n }\r\n\r\n // Connect the ports\r\n const inputs: Nullable<IPortData>[] = [];\r\n const outputs: Nullable<IPortData>[] = [];\r\n const availableNodeInputs: Nullable<IPortData>[] = [];\r\n const availableNodeOutputs: Nullable<IPortData>[] = [];\r\n const leftNode = this._ownerCanvas._targetLinkCandidate.nodeA;\r\n const rightNode = this._ownerCanvas._targetLinkCandidate.nodeB!;\r\n const leftPort = this._ownerCanvas._targetLinkCandidate.portA.portData;\r\n const rightPort = this._ownerCanvas._targetLinkCandidate.portB!.portData;\r\n\r\n // Delete previous\r\n this._ownerCanvas._targetLinkCandidate.dispose();\r\n this._ownerCanvas._targetLinkCandidate = null;\r\n\r\n // Get the ports\r\n availableNodeInputs.push(...this.content.inputs.filter((i) => !i.isConnected));\r\n\r\n availableNodeOutputs.push(...this.content.outputs);\r\n\r\n inputs.push(...leftNode.content.outputs);\r\n\r\n outputs.push(...rightNode.content.inputs.filter((i) => !i.isConnected));\r\n\r\n // Prioritize the already connected ports\r\n const leftPortIndex = inputs.indexOf(leftPort);\r\n const rightPortIndex = outputs.indexOf(rightPort);\r\n\r\n if (leftPortIndex > 0) {\r\n inputs.splice(leftPortIndex, 1);\r\n inputs.splice(0, 0, leftPort);\r\n }\r\n\r\n if (rightPortIndex > 0) {\r\n outputs.splice(rightPortIndex, 1);\r\n outputs.splice(0, 0, rightPort);\r\n }\r\n\r\n // Reconnect\r\n this._ownerCanvas.automaticRewire(inputs, availableNodeInputs, true);\r\n this._ownerCanvas.automaticRewire(availableNodeOutputs, outputs, true);\r\n\r\n this._stateManager.onRebuildRequiredObservable.notifyObservers();\r\n this._stateManager.onNodeMovedObservable.notifyObservers(this);\r\n }\r\n\r\n private _onMove(evt: PointerEvent) {\r\n this._ownerCanvas._targetLinkCandidate = null;\r\n if (this._mouseStartPointX === null || this._mouseStartPointY === null || evt.ctrlKey) {\r\n return;\r\n }\r\n\r\n // Move\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 selectedNode of this._ownerCanvas.selectedNodes) {\r\n selectedNode.x += newX;\r\n selectedNode.y += newY;\r\n }\r\n for (const frame of this._ownerCanvas.selectedFrames) {\r\n frame._moveFrame(newX, 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 if (this._inputPorts.some((p) => p.portData.isConnected) || this._outputPorts.some((o) => o.portData.hasEndpoints)) {\r\n return;\r\n }\r\n\r\n // Check wires that could be underneath\r\n const rect = this._visual.getBoundingClientRect();\r\n for (const link of this._ownerCanvas.links) {\r\n if (link.portA.node === this || link.portB!.node === this) {\r\n link.isTargetCandidate = false;\r\n continue;\r\n }\r\n link.isTargetCandidate = link.intersectsWith(rect);\r\n\r\n if (link.isTargetCandidate) {\r\n if (this._ownerCanvas._targetLinkCandidate !== link) {\r\n if (this._ownerCanvas._targetLinkCandidate) {\r\n this._ownerCanvas._targetLinkCandidate.isTargetCandidate = false;\r\n }\r\n this._ownerCanvas._targetLinkCandidate = link;\r\n }\r\n }\r\n }\r\n }\r\n\r\n public renderProperties(): Nullable<JSX.Element> {\r\n let control = PropertyLedger.RegisteredControls[this.content.getClassName()];\r\n\r\n if (!control) {\r\n control = PropertyLedger.DefaultControl;\r\n }\r\n\r\n return React.createElement(control, {\r\n stateManager: this._stateManager,\r\n nodeData: this.content,\r\n });\r\n }\r\n\r\n public appendVisual(root: HTMLDivElement, owner: GraphCanvasComponent) {\r\n this._ownerCanvas = owner;\r\n\r\n // Display manager\r\n const displayManagerClass = DisplayLedger.RegisteredControls[this.content.getClassName()];\r\n\r\n if (displayManagerClass) {\r\n this._displayManager = new displayManagerClass();\r\n }\r\n\r\n // DOM\r\n this._visual = root.ownerDocument!.createElement(\"div\");\r\n this._visual.classList.add(localStyles.visual);\r\n\r\n this._visual.addEventListener(\"pointerdown\", (evt) => this._onDown(evt));\r\n this._visual.addEventListener(\"pointerup\", (evt) => this._onUp(evt));\r\n this._visual.addEventListener(\"pointermove\", (evt) => this._onMove(evt));\r\n\r\n this._headerContainer = root.ownerDocument!.createElement(\"div\");\r\n this._headerContainer.classList.add(localStyles[\"header-container\"]);\r\n this._visual.appendChild(this._headerContainer);\r\n\r\n this._header = root.ownerDocument!.createElement(\"div\");\r\n this._header.classList.add(localStyles.header);\r\n this._headerContainer.appendChild(this._header);\r\n\r\n this._headerIcon = root.ownerDocument!.createElement(\"div\");\r\n this._headerIcon.classList.add(localStyles.headerIcon);\r\n this._headerIconImg = root.ownerDocument!.createElement(\"img\");\r\n this._headerIcon.appendChild(this._headerIconImg);\r\n this._headerContainer.appendChild(this._headerIcon);\r\n\r\n this._selectionBorder = root.ownerDocument!.createElement(\"div\");\r\n this._selectionBorder.classList.add(\"selection-border\");\r\n this._visual.appendChild(this._selectionBorder);\r\n\r\n this._connections = root.ownerDocument!.createElement(\"div\");\r\n this._connections.classList.add(localStyles.connections);\r\n this._visual.appendChild(this._connections);\r\n\r\n this._inputsContainer = root.ownerDocument!.createElement(\"div\");\r\n this._inputsContainer.classList.add(commonStyles.inputsContainer);\r\n this._connections.appendChild(this._inputsContainer);\r\n\r\n this._outputsContainer = root.ownerDocument!.createElement(\"div\");\r\n this._outputsContainer.classList.add(commonStyles.outputsContainer);\r\n this._connections.appendChild(this._outputsContainer);\r\n\r\n this._content = root.ownerDocument!.createElement(\"div\");\r\n this._content.classList.add(localStyles.content);\r\n this._visual.appendChild(this._content);\r\n\r\n root.appendChild(this._visual);\r\n\r\n // Comments\r\n this._comments = root.ownerDocument!.createElement(\"div\");\r\n this._comments.classList.add(localStyles.comments);\r\n\r\n this._visual.appendChild(this._comments);\r\n\r\n // Comments\r\n this._executionTime = root.ownerDocument!.createElement(\"div\");\r\n this._executionTime.classList.add(localStyles.executionTime);\r\n\r\n this._visual.appendChild(this._executionTime);\r\n\r\n // Connections\r\n for (const input of this.content.inputs) {\r\n this._inputPorts.push(NodePort.CreatePortElement(input, this, this._inputsContainer, this._displayManager, this._stateManager));\r\n }\r\n\r\n for (const output of this.content.outputs) {\r\n this._outputPorts.push(NodePort.CreatePortElement(output, this, this._outputsContainer, this._displayManager, this._stateManager));\r\n }\r\n\r\n this.refresh();\r\n\r\n this.content.refreshCallback = () => {\r\n this.refresh();\r\n };\r\n }\r\n\r\n public dispose() {\r\n if (this._displayManager && this._displayManager.onDispose) {\r\n this._displayManager.onDispose(this.content, this._stateManager);\r\n }\r\n\r\n // notify frame observers that this node is being deleted\r\n this._stateManager.onGraphNodeRemovalObservable.notifyObservers(this);\r\n\r\n if (this._onSelectionChangedObserver) {\r\n this._stateManager.onSelectionChangedObservable.remove(this._onSelectionChangedObserver);\r\n }\r\n\r\n if (this._onUpdateRequiredObserver) {\r\n this._stateManager.onUpdateRequiredObservable.remove(this._onUpdateRequiredObserver);\r\n }\r\n\r\n if (this._onHighlightNodeObserver) {\r\n this._stateManager.onHighlightNodeObservable.remove(this._onHighlightNodeObserver);\r\n }\r\n\r\n if (this._onSelectionBoxMovedObserver) {\r\n this._stateManager.onSelectionBoxMoved.remove(this._onSelectionBoxMovedObserver);\r\n }\r\n\r\n if (this._visual.parentElement) {\r\n this._visual.parentElement.removeChild(this._visual);\r\n }\r\n\r\n if (this._onFrameCreatedObserver) {\r\n this._stateManager.onFrameCreatedObservable.remove(this._onFrameCreatedObserver);\r\n }\r\n\r\n for (const port of this._inputPorts) {\r\n port.dispose();\r\n }\r\n\r\n for (const port of this._outputPorts) {\r\n port.dispose();\r\n }\r\n\r\n const links = this._links.slice(0);\r\n for (const link of links) {\r\n link.dispose();\r\n }\r\n\r\n this.content.dispose();\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"graphNode.js","sourceRoot":"","sources":["../../../../dev/sharedUiComponents/src/nodeGraphSystem/graphNode.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"core/types\";\r\nimport type { Observer } from \"core/Misc/observable\";\r\nimport type { GraphCanvasComponent } from \"./graphCanvas\";\r\nimport * as React from \"react\";\r\nimport { NodePort } from \"./nodePort\";\r\nimport type { GraphFrame } from \"./graphFrame\";\r\nimport type { NodeLink } from \"./nodeLink\";\r\nimport type { StateManager } from \"./stateManager\";\r\nimport type { ISelectionChangedOptions } from \"./interfaces/selectionChangedOptions\";\r\nimport type { IDisplayManager } from \"./interfaces/displayManager\";\r\nimport { PropertyLedger } from \"./propertyLedger\";\r\nimport { DisplayLedger } from \"./displayLedger\";\r\nimport type { INodeData } from \"./interfaces/nodeData\";\r\nimport type { IPortData } from \"./interfaces/portData\";\r\nimport localStyles from \"./graphNode.modules.scss\";\r\nimport commonStyles from \"./common.modules.scss\";\r\n\r\nexport class GraphNode {\r\n private _visual: HTMLDivElement;\r\n private _headerContainer: HTMLDivElement;\r\n private _headerIcon: HTMLDivElement;\r\n private _headerIconImg: HTMLImageElement;\r\n private _header: HTMLDivElement;\r\n private _connections: HTMLDivElement;\r\n private _inputsContainer: HTMLDivElement;\r\n private _outputsContainer: HTMLDivElement;\r\n private _content: HTMLDivElement;\r\n private _comments: HTMLDivElement;\r\n private _executionTime: HTMLDivElement;\r\n private _selectionBorder: HTMLDivElement;\r\n private _inputPorts: NodePort[] = [];\r\n private _outputPorts: NodePort[] = [];\r\n private _links: NodeLink[] = [];\r\n private _x = 0;\r\n private _y = 0;\r\n private _gridAlignedX = 0;\r\n private _gridAlignedY = 0;\r\n private _mouseStartPointX: Nullable<number> = null;\r\n private _mouseStartPointY: Nullable<number> = null;\r\n private _stateManager: StateManager;\r\n private _onSelectionChangedObserver: Nullable<Observer<Nullable<ISelectionChangedOptions>>>;\r\n private _onSelectionBoxMovedObserver: Nullable<Observer<ClientRect | DOMRect>>;\r\n private _onFrameCreatedObserver: Nullable<Observer<GraphFrame>>;\r\n private _onUpdateRequiredObserver: Nullable<Observer<Nullable<INodeData>>>;\r\n private _onHighlightNodeObserver: Nullable<Observer<any>>;\r\n private _ownerCanvas: GraphCanvasComponent;\r\n private _isSelected: boolean;\r\n private _displayManager: Nullable<IDisplayManager> = null;\r\n private _isVisible = true;\r\n private _enclosingFrameId = -1;\r\n\r\n public addClassToVisual(className: string) {\r\n this._visual.classList.add(className);\r\n }\r\n\r\n public removeClassFromVisual(className: string) {\r\n this._visual.classList.remove(className);\r\n }\r\n\r\n public get isVisible() {\r\n return this._isVisible;\r\n }\r\n\r\n public set isVisible(value: boolean) {\r\n this._isVisible = value;\r\n\r\n if (!value) {\r\n this._visual.classList.add(commonStyles[\"hidden\"]);\r\n } else {\r\n this._visual.classList.remove(commonStyles[\"hidden\"]);\r\n this._upateNodePortNames();\r\n }\r\n\r\n for (const link of this._links) {\r\n link.isVisible = value;\r\n }\r\n\r\n this._refreshLinks();\r\n }\r\n\r\n private _upateNodePortNames() {\r\n for (const port of this._inputPorts.concat(this._outputPorts)) {\r\n if (port.hasLabel()) {\r\n port.portName = port.portData.name;\r\n }\r\n }\r\n }\r\n\r\n public get outputPorts() {\r\n return this._outputPorts;\r\n }\r\n\r\n public get inputPorts() {\r\n return this._inputPorts;\r\n }\r\n\r\n public get links() {\r\n return this._links;\r\n }\r\n\r\n public get gridAlignedX() {\r\n return this._gridAlignedX;\r\n }\r\n\r\n public get gridAlignedY() {\r\n return this._gridAlignedY;\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._visual.style.left = `${this._gridAlignedX}px`;\r\n\r\n this._refreshLinks();\r\n this._refreshFrames();\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._visual.style.top = `${this._gridAlignedY}px`;\r\n\r\n this._refreshLinks();\r\n this._refreshFrames();\r\n }\r\n\r\n public get width() {\r\n return this._visual.clientWidth;\r\n }\r\n\r\n public get height() {\r\n return this._visual.clientHeight;\r\n }\r\n\r\n public get id() {\r\n return this.content.uniqueId;\r\n }\r\n\r\n public get name() {\r\n return this.content.name;\r\n }\r\n\r\n public get isSelected() {\r\n return this._isSelected;\r\n }\r\n\r\n public get enclosingFrameId() {\r\n return this._enclosingFrameId;\r\n }\r\n\r\n public set enclosingFrameId(value: number) {\r\n this._enclosingFrameId = value;\r\n }\r\n\r\n public set isSelected(value: boolean) {\r\n this.setIsSelected(value, false);\r\n }\r\n\r\n public setIsSelected(value: boolean, marqueeSelection: boolean) {\r\n if (this._isSelected === value) {\r\n return;\r\n }\r\n\r\n this._isSelected = value;\r\n\r\n if (!value) {\r\n this._visual.classList.remove(localStyles[\"selected\"]);\r\n const indexInSelection = this._ownerCanvas.selectedNodes.indexOf(this);\r\n\r\n if (indexInSelection > -1) {\r\n this._ownerCanvas.selectedNodes.splice(indexInSelection, 1);\r\n }\r\n } else {\r\n this._stateManager.onSelectionChangedObservable.notifyObservers({ selection: this, marqueeSelection });\r\n }\r\n }\r\n\r\n public get rootElement() {\r\n return this._visual;\r\n }\r\n\r\n public constructor(\r\n public content: INodeData,\r\n stateManager: StateManager\r\n ) {\r\n this._stateManager = stateManager;\r\n\r\n this._onSelectionChangedObserver = this._stateManager.onSelectionChangedObservable.add((options) => {\r\n const { selection: node } = options || {};\r\n if (node === this) {\r\n this._visual.classList.add(localStyles[\"selected\"]);\r\n if (this._displayManager && this._displayManager.onSelectionChanged) {\r\n this._displayManager.onSelectionChanged(this.content, node.content, this._stateManager);\r\n }\r\n } else {\r\n if (this._ownerCanvas.selectedNodes.indexOf(this) === -1) {\r\n this._visual.classList.remove(localStyles[\"selected\"]);\r\n if (this._displayManager && this._displayManager.onSelectionChanged) {\r\n this._displayManager.onSelectionChanged(this.content, node && (node as GraphNode).content ? (node as GraphNode).content : null, this._stateManager);\r\n }\r\n }\r\n }\r\n });\r\n\r\n this._onHighlightNodeObserver = this._stateManager.onHighlightNodeObservable.add((data) => {\r\n if (data.data !== this.content.data) {\r\n return;\r\n }\r\n if (data.active) {\r\n this._visual.classList.add(localStyles[\"highlighted\"]);\r\n } else {\r\n this._visual.classList.remove(localStyles[\"highlighted\"]);\r\n }\r\n });\r\n\r\n this._onUpdateRequiredObserver = this._stateManager.onUpdateRequiredObservable.add((data) => {\r\n if (data !== this.content.data) {\r\n return;\r\n }\r\n this.refresh();\r\n });\r\n\r\n this._onSelectionBoxMovedObserver = this._stateManager.onSelectionBoxMoved.add((rect1) => {\r\n const rect2 = this._visual.getBoundingClientRect();\r\n const overlap = !(rect1.right < rect2.left || rect1.left > rect2.right || rect1.bottom < rect2.top || rect1.top > rect2.bottom);\r\n\r\n this.setIsSelected(overlap, true);\r\n });\r\n\r\n this._onFrameCreatedObserver = this._stateManager.onFrameCreatedObservable.add((frame) => {\r\n if (this._ownerCanvas.frames.some((f) => f.nodes.indexOf(this) !== -1)) {\r\n return;\r\n }\r\n\r\n if (this.isOverlappingFrame(frame)) {\r\n frame.nodes.push(this);\r\n }\r\n });\r\n }\r\n\r\n public isOverlappingFrame(frame: GraphFrame) {\r\n const rect2 = this._visual.getBoundingClientRect();\r\n const rect1 = frame.element.getBoundingClientRect();\r\n\r\n // Add a tiny margin\r\n rect1.width -= 5;\r\n rect1.height -= 5;\r\n\r\n const isOverlappingFrame = !(rect1.right < rect2.left || rect1.left > rect2.right || rect1.bottom < rect2.top || rect1.top > rect2.bottom);\r\n\r\n if (isOverlappingFrame) {\r\n this.enclosingFrameId = frame.id;\r\n }\r\n return isOverlappingFrame;\r\n }\r\n\r\n public getPortForPortData(portData: IPortData) {\r\n for (const port of this._inputPorts) {\r\n const attachedPoint = port.portData;\r\n\r\n if (attachedPoint === portData || (attachedPoint.ownerData === portData.ownerData && attachedPoint.internalName === portData.internalName)) {\r\n return port;\r\n }\r\n }\r\n\r\n for (const port of this._outputPorts) {\r\n const attachedPoint = port.portData;\r\n\r\n if (attachedPoint === portData || (attachedPoint.ownerData === portData.ownerData && attachedPoint.internalName === portData.internalName)) {\r\n return port;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n public getPortDataForPortDataContent(data: any) {\r\n for (const port of this._inputPorts) {\r\n const attachedPoint = port.portData;\r\n\r\n if (attachedPoint.data === data) {\r\n return attachedPoint;\r\n }\r\n }\r\n\r\n for (const port of this._outputPorts) {\r\n const attachedPoint = port.portData;\r\n\r\n if (attachedPoint.data === data) {\r\n return attachedPoint;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n public getLinksForPortDataContent(data: any) {\r\n return this._links.filter((link) => link.portA.portData.data === data || link.portB!.portData.data === data);\r\n }\r\n\r\n public getLinksForPortData(portData: IPortData) {\r\n return this._links.filter((link) => link.portA.portData === portData || link.portB!.portData === portData);\r\n }\r\n\r\n private _refreshFrames() {\r\n if (this._ownerCanvas._frameIsMoving || this._ownerCanvas._isLoading) {\r\n return;\r\n }\r\n\r\n // Frames\r\n for (const frame of this._ownerCanvas.frames) {\r\n frame.syncNode(this);\r\n }\r\n }\r\n\r\n public _refreshLinks() {\r\n if (this._ownerCanvas._isLoading) {\r\n return;\r\n }\r\n for (const link of this._links) {\r\n link.update();\r\n }\r\n }\r\n\r\n public refresh() {\r\n if (this._displayManager) {\r\n this._header.innerHTML = this._displayManager.getHeaderText(this.content);\r\n this._displayManager.updatePreviewContent(this.content, this._content);\r\n this._visual.style.background = this._displayManager.getBackgroundColor(this.content);\r\n const additionalClass = this._displayManager.getHeaderClass(this.content);\r\n this._header.classList.value = localStyles.header;\r\n this._headerContainer.classList.value = localStyles[\"header-container\"];\r\n if (additionalClass) {\r\n this._headerContainer.classList.add(additionalClass);\r\n }\r\n if (this._displayManager.updateFullVisualContent) {\r\n this._displayManager.updateFullVisualContent(this.content, {\r\n visual: this._visual,\r\n header: this._header,\r\n headerContainer: this._headerContainer,\r\n headerIcon: this._headerIcon,\r\n headerIconImg: this._headerIconImg,\r\n comments: this._comments,\r\n connections: this._connections,\r\n inputsContainer: this._inputsContainer,\r\n outputsContainer: this._outputsContainer,\r\n content: this._content,\r\n selectionBorder: this._selectionBorder,\r\n });\r\n }\r\n } else {\r\n this._header.innerHTML = this.content.name;\r\n }\r\n\r\n for (const port of this._inputPorts) {\r\n port.refresh();\r\n }\r\n\r\n for (const port of this._outputPorts) {\r\n port.refresh();\r\n }\r\n\r\n if (this.enclosingFrameId !== -1) {\r\n const index = this._ownerCanvas.frames.findIndex((frame) => frame.id === this.enclosingFrameId);\r\n if (index >= 0 && this._ownerCanvas.frames[index].isCollapsed) {\r\n this._ownerCanvas.frames[index].redrawFramePorts();\r\n }\r\n }\r\n\r\n this._comments.innerHTML = this.content.comments || \"\";\r\n this._comments.title = this.content.comments || \"\";\r\n\r\n const executionTime = this.content.executionTime || 0;\r\n this._executionTime.innerHTML = executionTime >= 0 ? `${executionTime.toFixed(2)} ms` : \"\";\r\n\r\n this.content.prepareHeaderIcon(this._headerIcon, this._headerIconImg);\r\n if (this._headerIconImg.src) {\r\n this._header.classList.add(localStyles[\"headerWithIcon\"]);\r\n }\r\n }\r\n\r\n private _onDown(evt: PointerEvent) {\r\n // Check if this is coming from the port\r\n if (evt.target && (evt.target as HTMLElement).nodeName === \"IMG\") {\r\n return;\r\n }\r\n\r\n const indexInSelection = this._ownerCanvas.selectedNodes.indexOf(this);\r\n if (indexInSelection === -1) {\r\n this._stateManager.onSelectionChangedObservable.notifyObservers({ selection: this });\r\n } else if (evt.ctrlKey) {\r\n this.setIsSelected(false, false);\r\n }\r\n\r\n evt.stopPropagation();\r\n\r\n for (const selectedNode of this._ownerCanvas.selectedNodes) {\r\n selectedNode.cleanAccumulation();\r\n }\r\n\r\n this._mouseStartPointX = evt.clientX;\r\n this._mouseStartPointY = evt.clientY;\r\n\r\n this._visual.setPointerCapture(evt.pointerId);\r\n }\r\n\r\n public cleanAccumulation(useCeil = false) {\r\n this.x = this._ownerCanvas.getGridPosition(this.x, useCeil);\r\n this.y = this._ownerCanvas.getGridPosition(this.y, useCeil);\r\n }\r\n\r\n private _onUp(evt: PointerEvent) {\r\n evt.stopPropagation();\r\n\r\n for (const selectedNode of this._ownerCanvas.selectedNodes) {\r\n selectedNode.cleanAccumulation();\r\n }\r\n\r\n this._mouseStartPointX = null;\r\n this._mouseStartPointY = null;\r\n this._visual.releasePointerCapture(evt.pointerId);\r\n\r\n if (!this._ownerCanvas._targetLinkCandidate) {\r\n this._stateManager.onNodeMovedObservable.notifyObservers(this);\r\n return;\r\n }\r\n\r\n // Connect the ports\r\n const inputs: Nullable<IPortData>[] = [];\r\n const outputs: Nullable<IPortData>[] = [];\r\n const availableNodeInputs: Nullable<IPortData>[] = [];\r\n const availableNodeOutputs: Nullable<IPortData>[] = [];\r\n const leftNode = this._ownerCanvas._targetLinkCandidate.nodeA;\r\n const rightNode = this._ownerCanvas._targetLinkCandidate.nodeB!;\r\n const leftPort = this._ownerCanvas._targetLinkCandidate.portA.portData;\r\n const rightPort = this._ownerCanvas._targetLinkCandidate.portB!.portData;\r\n\r\n // Delete previous\r\n this._ownerCanvas._targetLinkCandidate.dispose();\r\n this._ownerCanvas._targetLinkCandidate = null;\r\n\r\n // Get the ports\r\n availableNodeInputs.push(...this.content.inputs.filter((i) => !i.isConnected));\r\n\r\n availableNodeOutputs.push(...this.content.outputs);\r\n\r\n inputs.push(...leftNode.content.outputs);\r\n\r\n outputs.push(...rightNode.content.inputs.filter((i) => !i.isConnected));\r\n\r\n // Prioritize the already connected ports\r\n const leftPortIndex = inputs.indexOf(leftPort);\r\n const rightPortIndex = outputs.indexOf(rightPort);\r\n\r\n if (leftPortIndex > 0) {\r\n inputs.splice(leftPortIndex, 1);\r\n inputs.splice(0, 0, leftPort);\r\n }\r\n\r\n if (rightPortIndex > 0) {\r\n outputs.splice(rightPortIndex, 1);\r\n outputs.splice(0, 0, rightPort);\r\n }\r\n\r\n // Reconnect\r\n this._ownerCanvas.automaticRewire(inputs, availableNodeInputs, true);\r\n this._ownerCanvas.automaticRewire(availableNodeOutputs, outputs, true);\r\n\r\n this._stateManager.onRebuildRequiredObservable.notifyObservers();\r\n this._stateManager.onNodeMovedObservable.notifyObservers(this);\r\n }\r\n\r\n private _onMove(evt: PointerEvent) {\r\n this._ownerCanvas._targetLinkCandidate = null;\r\n if (this._mouseStartPointX === null || this._mouseStartPointY === null || evt.ctrlKey) {\r\n return;\r\n }\r\n\r\n // Move\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 selectedNode of this._ownerCanvas.selectedNodes) {\r\n selectedNode.x += newX;\r\n selectedNode.y += newY;\r\n }\r\n for (const frame of this._ownerCanvas.selectedFrames) {\r\n frame._moveFrame(newX, 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 if (this._inputPorts.some((p) => p.portData.isConnected) || this._outputPorts.some((o) => o.portData.hasEndpoints)) {\r\n return;\r\n }\r\n\r\n // Check wires that could be underneath\r\n const rect = this._visual.getBoundingClientRect();\r\n for (const link of this._ownerCanvas.links) {\r\n if (link.portA.node === this || link.portB!.node === this) {\r\n link.isTargetCandidate = false;\r\n continue;\r\n }\r\n link.isTargetCandidate = link.intersectsWith(rect);\r\n\r\n if (link.isTargetCandidate) {\r\n if (this._ownerCanvas._targetLinkCandidate !== link) {\r\n if (this._ownerCanvas._targetLinkCandidate) {\r\n this._ownerCanvas._targetLinkCandidate.isTargetCandidate = false;\r\n }\r\n this._ownerCanvas._targetLinkCandidate = link;\r\n }\r\n }\r\n }\r\n }\r\n\r\n public renderProperties(): Nullable<JSX.Element> {\r\n let control = PropertyLedger.RegisteredControls[this.content.getClassName()];\r\n\r\n if (!control) {\r\n control = PropertyLedger.DefaultControl;\r\n }\r\n\r\n return React.createElement(control, {\r\n stateManager: this._stateManager,\r\n nodeData: this.content,\r\n });\r\n }\r\n\r\n public appendVisual(root: HTMLDivElement, owner: GraphCanvasComponent) {\r\n this._ownerCanvas = owner;\r\n\r\n // Display manager\r\n const displayManagerClass = DisplayLedger.RegisteredControls[this.content.getClassName()];\r\n\r\n if (displayManagerClass) {\r\n this._displayManager = new displayManagerClass();\r\n }\r\n\r\n // DOM\r\n this._visual = root.ownerDocument!.createElement(\"div\");\r\n this._visual.classList.add(localStyles.visual);\r\n\r\n this._visual.addEventListener(\"pointerdown\", (evt) => this._onDown(evt));\r\n this._visual.addEventListener(\"pointerup\", (evt) => this._onUp(evt));\r\n this._visual.addEventListener(\"pointermove\", (evt) => this._onMove(evt));\r\n\r\n this._headerContainer = root.ownerDocument!.createElement(\"div\");\r\n this._headerContainer.classList.add(localStyles[\"header-container\"]);\r\n this._visual.appendChild(this._headerContainer);\r\n\r\n this._header = root.ownerDocument!.createElement(\"div\");\r\n this._header.classList.add(localStyles.header);\r\n this._headerContainer.appendChild(this._header);\r\n\r\n this._headerIcon = root.ownerDocument!.createElement(\"div\");\r\n this._headerIcon.classList.add(localStyles.headerIcon);\r\n this._headerIconImg = root.ownerDocument!.createElement(\"img\");\r\n this._headerIcon.appendChild(this._headerIconImg);\r\n this._headerContainer.appendChild(this._headerIcon);\r\n\r\n this._selectionBorder = root.ownerDocument!.createElement(\"div\");\r\n this._selectionBorder.classList.add(\"selection-border\");\r\n this._visual.appendChild(this._selectionBorder);\r\n\r\n this._connections = root.ownerDocument!.createElement(\"div\");\r\n this._connections.classList.add(localStyles.connections);\r\n this._visual.appendChild(this._connections);\r\n\r\n this._inputsContainer = root.ownerDocument!.createElement(\"div\");\r\n this._inputsContainer.classList.add(commonStyles.inputsContainer);\r\n this._connections.appendChild(this._inputsContainer);\r\n\r\n this._outputsContainer = root.ownerDocument!.createElement(\"div\");\r\n this._outputsContainer.classList.add(commonStyles.outputsContainer);\r\n this._connections.appendChild(this._outputsContainer);\r\n\r\n this._content = root.ownerDocument!.createElement(\"div\");\r\n this._content.classList.add(localStyles.content);\r\n this._visual.appendChild(this._content);\r\n\r\n root.appendChild(this._visual);\r\n\r\n // Comments\r\n this._comments = root.ownerDocument!.createElement(\"div\");\r\n this._comments.classList.add(localStyles.comments);\r\n\r\n this._visual.appendChild(this._comments);\r\n\r\n // Comments\r\n this._executionTime = root.ownerDocument!.createElement(\"div\");\r\n this._executionTime.classList.add(localStyles.executionTime);\r\n\r\n this._visual.appendChild(this._executionTime);\r\n\r\n // Connections\r\n for (const input of this.content.inputs) {\r\n this._inputPorts.push(NodePort.CreatePortElement(input, this, this._inputsContainer, this._displayManager, this._stateManager));\r\n }\r\n\r\n for (const output of this.content.outputs) {\r\n this._outputPorts.push(NodePort.CreatePortElement(output, this, this._outputsContainer, this._displayManager, this._stateManager));\r\n }\r\n\r\n this.refresh();\r\n\r\n this.content.refreshCallback = () => {\r\n this.refresh();\r\n };\r\n }\r\n\r\n public dispose() {\r\n if (this._displayManager && this._displayManager.onDispose) {\r\n this._displayManager.onDispose(this.content, this._stateManager);\r\n }\r\n\r\n // notify frame observers that this node is being deleted\r\n this._stateManager.onGraphNodeRemovalObservable.notifyObservers(this);\r\n\r\n if (this._onSelectionChangedObserver) {\r\n this._stateManager.onSelectionChangedObservable.remove(this._onSelectionChangedObserver);\r\n }\r\n\r\n if (this._onUpdateRequiredObserver) {\r\n this._stateManager.onUpdateRequiredObservable.remove(this._onUpdateRequiredObserver);\r\n }\r\n\r\n if (this._onHighlightNodeObserver) {\r\n this._stateManager.onHighlightNodeObservable.remove(this._onHighlightNodeObserver);\r\n }\r\n\r\n if (this._onSelectionBoxMovedObserver) {\r\n this._stateManager.onSelectionBoxMoved.remove(this._onSelectionBoxMovedObserver);\r\n }\r\n\r\n if (this._visual.parentElement) {\r\n this._visual.parentElement.removeChild(this._visual);\r\n }\r\n\r\n if (this._onFrameCreatedObserver) {\r\n this._stateManager.onFrameCreatedObservable.remove(this._onFrameCreatedObserver);\r\n }\r\n\r\n for (const port of this._inputPorts) {\r\n port.dispose();\r\n }\r\n\r\n for (const port of this._outputPorts) {\r\n port.dispose();\r\n }\r\n\r\n const links = this._links.slice(0);\r\n for (const link of links) {\r\n link.dispose();\r\n }\r\n\r\n this.content.dispose();\r\n }\r\n}\r\n"]}
@@ -25,6 +25,8 @@ export declare class NodeLink {
25
25
  get nodeB(): GraphNode | undefined;
26
26
  intersectsWith(rect: DOMRect): boolean;
27
27
  update(endX?: number, endY?: number, straight?: boolean): void;
28
+ get path(): SVGPathElement;
29
+ get selectionPath(): SVGPathElement;
28
30
  constructor(graphCanvas: GraphCanvasComponent, portA: NodePort, nodeA: GraphNode, portB?: NodePort, nodeB?: GraphNode);
29
31
  onClick(evt: MouseEvent): void;
30
32
  dispose(notify?: boolean): void;
@@ -93,6 +93,12 @@ export class NodeLink {
93
93
  }
94
94
  this._path.setAttribute("stroke", this._portA.element.style.backgroundColor);
95
95
  }
96
+ get path() {
97
+ return this._path;
98
+ }
99
+ get selectionPath() {
100
+ return this._selectionPath;
101
+ }
96
102
  constructor(graphCanvas, portA, nodeA, portB, nodeB) {
97
103
  this._isVisible = true;
98
104
  this._isTargetCandidate = false;
@@ -1 +1 @@
1
- {"version":3,"file":"nodeLink.js","sourceRoot":"","sources":["../../../../dev/sharedUiComponents/src/nodeGraphSystem/nodeLink.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"core/types\";\r\nimport type { Observer } from \"core/Misc/observable\";\r\nimport { Observable } from \"core/Misc/observable\";\r\nimport type { FrameNodePort } from \"./frameNodePort\";\r\nimport type { NodePort } from \"./nodePort\";\r\nimport type { GraphNode } from \"./graphNode\";\r\nimport type { GraphCanvasComponent } from \"./graphCanvas\";\r\nimport type { ISelectionChangedOptions } from \"./interfaces/selectionChangedOptions\";\r\nimport { RefreshNode } from \"./tools\";\r\nimport commonStyles from \"./common.modules.scss\";\r\nimport styles from \"./nodeLink.modules.scss\";\r\n\r\nexport class NodeLink {\r\n private _graphCanvas: GraphCanvasComponent;\r\n private _portA: NodePort | FrameNodePort;\r\n private _portB?: NodePort | FrameNodePort;\r\n private _nodeA: GraphNode;\r\n private _nodeB?: GraphNode;\r\n private _path: SVGPathElement;\r\n private _selectionPath: SVGPathElement;\r\n private _onSelectionChangedObserver: Nullable<Observer<Nullable<ISelectionChangedOptions>>>;\r\n private _isVisible = true;\r\n private _isTargetCandidate = false;\r\n\r\n public onDisposedObservable = new Observable<NodeLink>();\r\n\r\n public get isTargetCandidate() {\r\n return this._isTargetCandidate;\r\n }\r\n\r\n public set isTargetCandidate(value: boolean) {\r\n if (this._isTargetCandidate === value) {\r\n return;\r\n }\r\n\r\n this._isTargetCandidate = value;\r\n\r\n if (value) {\r\n this._path.classList.add(styles[\"target-candidate\"]);\r\n } else {\r\n this._path.classList.remove(styles[\"target-candidate\"]);\r\n }\r\n }\r\n\r\n public get isVisible() {\r\n return this._isVisible;\r\n }\r\n\r\n public set isVisible(value: boolean) {\r\n this._isVisible = value;\r\n\r\n if (!value) {\r\n this._path.classList.add(commonStyles[\"hidden\"]);\r\n this._selectionPath.classList.add(commonStyles[\"hidden\"]);\r\n } else {\r\n this._path.classList.remove(commonStyles[\"hidden\"]);\r\n this._selectionPath.classList.remove(commonStyles[\"hidden\"]);\r\n }\r\n\r\n this.update();\r\n }\r\n\r\n public get portA() {\r\n return this._portA;\r\n }\r\n\r\n public get portB() {\r\n return this._portB;\r\n }\r\n\r\n public get nodeA() {\r\n return this._nodeA;\r\n }\r\n\r\n public get nodeB() {\r\n return this._nodeB;\r\n }\r\n\r\n public intersectsWith(rect: DOMRect) {\r\n const locatRect = this._path.getBoundingClientRect();\r\n if (rect.left > locatRect.right || rect.right < locatRect.left || rect.top > locatRect.bottom || rect.bottom < locatRect.top) {\r\n return false;\r\n }\r\n\r\n const zoom = this._graphCanvas.zoom;\r\n const svg = this._graphCanvas.svgCanvas as any as SVGSVGElement;\r\n const rootRect = svg.getBoundingClientRect();\r\n\r\n const left = (rect.x - rootRect.x) / zoom;\r\n const top = (rect.y - rootRect.y) / zoom;\r\n const right = left + rect.width / zoom;\r\n const bottom = top + rect.height / zoom;\r\n\r\n const sampleRate = 10; // Checking 10 times on the path should be enough\r\n\r\n for (let index = 0; index < 1; index += 1 / sampleRate) {\r\n const point = this._path.getPointAtLength(index * this._path.getTotalLength());\r\n if (left < point.x && right > point.x && top < point.y && bottom > point.y) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public update(endX = 0, endY = 0, straight = false) {\r\n const rectA = this._portA.element.getBoundingClientRect();\r\n const rootRect = this._graphCanvas.canvasContainer.getBoundingClientRect();\r\n const zoom = this._graphCanvas.zoom;\r\n const xOffset = rootRect.left;\r\n const yOffset = rootRect.top;\r\n\r\n const startX = (rectA.left - xOffset + 0.5 * rectA.width) / zoom;\r\n const startY = (rectA.top - yOffset + 0.5 * rectA.height) / zoom;\r\n\r\n if (this._portB) {\r\n const rectB = this._portB.element.getBoundingClientRect();\r\n endX = (rectB.left - xOffset + 0.5 * rectB.width) / zoom;\r\n endY = (rectB.top - yOffset + 0.5 * rectB.height) / zoom;\r\n }\r\n\r\n if (straight) {\r\n this._path.setAttribute(\"d\", `M${startX},${startY} L${endX},${endY}`);\r\n this._path.setAttribute(\"stroke-dasharray\", \"10, 10\");\r\n this._path.setAttribute(\"stroke-linecap\", \"round\");\r\n } else {\r\n const deltaX = endX - startX;\r\n const deltaY = endY - startY;\r\n const tangentLength = Math.min(Math.sqrt(deltaX * deltaX + deltaY * deltaY) * 0.5, 300);\r\n this._path.setAttribute(\"d\", `M${startX},${startY} C${startX + tangentLength},${startY} ${endX - tangentLength},${endY} ${endX},${endY}`);\r\n this._selectionPath.setAttribute(\"d\", `M${startX},${startY} C${startX + tangentLength},${startY} ${endX - tangentLength},${endY} ${endX},${endY}`);\r\n }\r\n this._path.setAttribute(\"stroke\", this._portA.element.style.backgroundColor!);\r\n }\r\n\r\n public constructor(graphCanvas: GraphCanvasComponent, portA: NodePort, nodeA: GraphNode, portB?: NodePort, nodeB?: GraphNode) {\r\n this._portA = portA;\r\n this._portB = portB;\r\n this._nodeA = nodeA;\r\n this._nodeB = nodeB;\r\n this._graphCanvas = graphCanvas;\r\n\r\n const document = portA.element.ownerDocument!;\r\n const svg = graphCanvas.svgCanvas;\r\n\r\n // Create path\r\n this._path = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\r\n this._path.setAttribute(\"fill\", \"none\");\r\n this._path.classList.add(styles[\"link\"]);\r\n\r\n svg.appendChild(this._path);\r\n\r\n this._selectionPath = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\r\n this._selectionPath.setAttribute(\"fill\", \"none\");\r\n this._selectionPath.classList.add(styles[\"selection-link\"]);\r\n\r\n svg.appendChild(this._selectionPath);\r\n\r\n this._selectionPath.onmousedown = (evt: MouseEvent) => this.onClick(evt);\r\n\r\n if (this._portB) {\r\n // Update\r\n this.update();\r\n }\r\n\r\n this._onSelectionChangedObserver = this._graphCanvas.stateManager.onSelectionChangedObservable.add((options) => {\r\n const { selection } = options || {};\r\n if (selection === this) {\r\n this._path.classList.add(styles[\"selected\"]);\r\n this._selectionPath.classList.add(styles[\"selected\"]);\r\n } else {\r\n this._path.classList.remove(styles[\"selected\"]);\r\n this._selectionPath.classList.remove(styles[\"selected\"]);\r\n }\r\n });\r\n }\r\n\r\n onClick(evt: MouseEvent) {\r\n const stateManager = this._graphCanvas.stateManager;\r\n const nodeA = this._nodeA;\r\n const pointA = this._portA.portData;\r\n const nodeB = this._nodeB!;\r\n const pointB = this._portB!.portData;\r\n\r\n const reconnect = (newNode: GraphNode) => {\r\n const newBlock = newNode.content.data as any;\r\n\r\n // Delete previous link\r\n this.dispose();\r\n\r\n // Connect to the new block\r\n this._graphCanvas.connectNodes(nodeA, pointA, newNode, newNode.getPortDataForPortDataContent(newBlock.input)!);\r\n this._graphCanvas.connectNodes(newNode, newNode.getPortDataForPortDataContent(newBlock.output)!, nodeB, pointB);\r\n\r\n stateManager.onRebuildRequiredObservable.notifyObservers();\r\n };\r\n\r\n if (evt.altKey) {\r\n if (!stateManager.isElbowConnectionAllowed(this._portA, this._portB!)) {\r\n return;\r\n }\r\n\r\n // Create an elbow at the clicked location\r\n stateManager.onNewNodeCreatedObservable.addOnce(reconnect);\r\n\r\n stateManager.onNewBlockRequiredObservable.notifyObservers({\r\n type: \"ElbowBlock\",\r\n targetX: evt.clientX,\r\n targetY: evt.clientY,\r\n needRepositioning: true,\r\n });\r\n return;\r\n }\r\n\r\n if (evt.ctrlKey) {\r\n if (!stateManager.isDebugConnectionAllowed(this._portA, this._portB!)) {\r\n return;\r\n }\r\n\r\n // Create a debug at the clicked location\r\n stateManager.onNewNodeCreatedObservable.addOnce(reconnect);\r\n\r\n stateManager.onNewBlockRequiredObservable.notifyObservers({\r\n type: \"DebugBlock\",\r\n targetX: evt.clientX,\r\n targetY: evt.clientY,\r\n needRepositioning: true,\r\n });\r\n return;\r\n }\r\n\r\n stateManager.onSelectionChangedObservable.notifyObservers({ selection: this });\r\n }\r\n\r\n public dispose(notify = true) {\r\n this._graphCanvas.stateManager.onSelectionChangedObservable.remove(this._onSelectionChangedObserver);\r\n\r\n if (this._path.parentElement) {\r\n this._path.parentElement.removeChild(this._path);\r\n }\r\n\r\n if (this._selectionPath.parentElement) {\r\n this._selectionPath.parentElement.removeChild(this._selectionPath);\r\n }\r\n\r\n if (this._nodeB) {\r\n this._nodeA.links.splice(this._nodeA.links.indexOf(this), 1);\r\n this._nodeB.links.splice(this._nodeB.links.indexOf(this), 1);\r\n this._graphCanvas.links.splice(this._graphCanvas.links.indexOf(this), 1);\r\n\r\n this._portA.portData.disconnectFrom(this._portB!.portData);\r\n\r\n RefreshNode(this._nodeB, undefined, undefined, this._graphCanvas);\r\n }\r\n\r\n if (notify) {\r\n this.onDisposedObservable.notifyObservers(this);\r\n\r\n this.onDisposedObservable.clear();\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"nodeLink.js","sourceRoot":"","sources":["../../../../dev/sharedUiComponents/src/nodeGraphSystem/nodeLink.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"core/types\";\r\nimport type { Observer } from \"core/Misc/observable\";\r\nimport { Observable } from \"core/Misc/observable\";\r\nimport type { FrameNodePort } from \"./frameNodePort\";\r\nimport type { NodePort } from \"./nodePort\";\r\nimport type { GraphNode } from \"./graphNode\";\r\nimport type { GraphCanvasComponent } from \"./graphCanvas\";\r\nimport type { ISelectionChangedOptions } from \"./interfaces/selectionChangedOptions\";\r\nimport { RefreshNode } from \"./tools\";\r\nimport commonStyles from \"./common.modules.scss\";\r\nimport styles from \"./nodeLink.modules.scss\";\r\n\r\nexport class NodeLink {\r\n private _graphCanvas: GraphCanvasComponent;\r\n private _portA: NodePort | FrameNodePort;\r\n private _portB?: NodePort | FrameNodePort;\r\n private _nodeA: GraphNode;\r\n private _nodeB?: GraphNode;\r\n private _path: SVGPathElement;\r\n private _selectionPath: SVGPathElement;\r\n private _onSelectionChangedObserver: Nullable<Observer<Nullable<ISelectionChangedOptions>>>;\r\n private _isVisible = true;\r\n private _isTargetCandidate = false;\r\n\r\n public onDisposedObservable = new Observable<NodeLink>();\r\n\r\n public get isTargetCandidate() {\r\n return this._isTargetCandidate;\r\n }\r\n\r\n public set isTargetCandidate(value: boolean) {\r\n if (this._isTargetCandidate === value) {\r\n return;\r\n }\r\n\r\n this._isTargetCandidate = value;\r\n\r\n if (value) {\r\n this._path.classList.add(styles[\"target-candidate\"]);\r\n } else {\r\n this._path.classList.remove(styles[\"target-candidate\"]);\r\n }\r\n }\r\n\r\n public get isVisible() {\r\n return this._isVisible;\r\n }\r\n\r\n public set isVisible(value: boolean) {\r\n this._isVisible = value;\r\n\r\n if (!value) {\r\n this._path.classList.add(commonStyles[\"hidden\"]);\r\n this._selectionPath.classList.add(commonStyles[\"hidden\"]);\r\n } else {\r\n this._path.classList.remove(commonStyles[\"hidden\"]);\r\n this._selectionPath.classList.remove(commonStyles[\"hidden\"]);\r\n }\r\n\r\n this.update();\r\n }\r\n\r\n public get portA() {\r\n return this._portA;\r\n }\r\n\r\n public get portB() {\r\n return this._portB;\r\n }\r\n\r\n public get nodeA() {\r\n return this._nodeA;\r\n }\r\n\r\n public get nodeB() {\r\n return this._nodeB;\r\n }\r\n\r\n public intersectsWith(rect: DOMRect) {\r\n const locatRect = this._path.getBoundingClientRect();\r\n if (rect.left > locatRect.right || rect.right < locatRect.left || rect.top > locatRect.bottom || rect.bottom < locatRect.top) {\r\n return false;\r\n }\r\n\r\n const zoom = this._graphCanvas.zoom;\r\n const svg = this._graphCanvas.svgCanvas as any as SVGSVGElement;\r\n const rootRect = svg.getBoundingClientRect();\r\n\r\n const left = (rect.x - rootRect.x) / zoom;\r\n const top = (rect.y - rootRect.y) / zoom;\r\n const right = left + rect.width / zoom;\r\n const bottom = top + rect.height / zoom;\r\n\r\n const sampleRate = 10; // Checking 10 times on the path should be enough\r\n\r\n for (let index = 0; index < 1; index += 1 / sampleRate) {\r\n const point = this._path.getPointAtLength(index * this._path.getTotalLength());\r\n if (left < point.x && right > point.x && top < point.y && bottom > point.y) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public update(endX = 0, endY = 0, straight = false) {\r\n const rectA = this._portA.element.getBoundingClientRect();\r\n const rootRect = this._graphCanvas.canvasContainer.getBoundingClientRect();\r\n const zoom = this._graphCanvas.zoom;\r\n const xOffset = rootRect.left;\r\n const yOffset = rootRect.top;\r\n\r\n const startX = (rectA.left - xOffset + 0.5 * rectA.width) / zoom;\r\n const startY = (rectA.top - yOffset + 0.5 * rectA.height) / zoom;\r\n\r\n if (this._portB) {\r\n const rectB = this._portB.element.getBoundingClientRect();\r\n endX = (rectB.left - xOffset + 0.5 * rectB.width) / zoom;\r\n endY = (rectB.top - yOffset + 0.5 * rectB.height) / zoom;\r\n }\r\n\r\n if (straight) {\r\n this._path.setAttribute(\"d\", `M${startX},${startY} L${endX},${endY}`);\r\n this._path.setAttribute(\"stroke-dasharray\", \"10, 10\");\r\n this._path.setAttribute(\"stroke-linecap\", \"round\");\r\n } else {\r\n const deltaX = endX - startX;\r\n const deltaY = endY - startY;\r\n const tangentLength = Math.min(Math.sqrt(deltaX * deltaX + deltaY * deltaY) * 0.5, 300);\r\n this._path.setAttribute(\"d\", `M${startX},${startY} C${startX + tangentLength},${startY} ${endX - tangentLength},${endY} ${endX},${endY}`);\r\n this._selectionPath.setAttribute(\"d\", `M${startX},${startY} C${startX + tangentLength},${startY} ${endX - tangentLength},${endY} ${endX},${endY}`);\r\n }\r\n this._path.setAttribute(\"stroke\", this._portA.element.style.backgroundColor!);\r\n }\r\n\r\n public get path() {\r\n return this._path;\r\n }\r\n\r\n public get selectionPath() {\r\n return this._selectionPath;\r\n }\r\n\r\n public constructor(graphCanvas: GraphCanvasComponent, portA: NodePort, nodeA: GraphNode, portB?: NodePort, nodeB?: GraphNode) {\r\n this._portA = portA;\r\n this._portB = portB;\r\n this._nodeA = nodeA;\r\n this._nodeB = nodeB;\r\n this._graphCanvas = graphCanvas;\r\n\r\n const document = portA.element.ownerDocument!;\r\n const svg = graphCanvas.svgCanvas;\r\n\r\n // Create path\r\n this._path = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\r\n this._path.setAttribute(\"fill\", \"none\");\r\n this._path.classList.add(styles[\"link\"]);\r\n\r\n svg.appendChild(this._path);\r\n\r\n this._selectionPath = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\r\n this._selectionPath.setAttribute(\"fill\", \"none\");\r\n this._selectionPath.classList.add(styles[\"selection-link\"]);\r\n\r\n svg.appendChild(this._selectionPath);\r\n\r\n this._selectionPath.onmousedown = (evt: MouseEvent) => this.onClick(evt);\r\n\r\n if (this._portB) {\r\n // Update\r\n this.update();\r\n }\r\n\r\n this._onSelectionChangedObserver = this._graphCanvas.stateManager.onSelectionChangedObservable.add((options) => {\r\n const { selection } = options || {};\r\n if (selection === this) {\r\n this._path.classList.add(styles[\"selected\"]);\r\n this._selectionPath.classList.add(styles[\"selected\"]);\r\n } else {\r\n this._path.classList.remove(styles[\"selected\"]);\r\n this._selectionPath.classList.remove(styles[\"selected\"]);\r\n }\r\n });\r\n }\r\n\r\n onClick(evt: MouseEvent) {\r\n const stateManager = this._graphCanvas.stateManager;\r\n const nodeA = this._nodeA;\r\n const pointA = this._portA.portData;\r\n const nodeB = this._nodeB!;\r\n const pointB = this._portB!.portData;\r\n\r\n const reconnect = (newNode: GraphNode) => {\r\n const newBlock = newNode.content.data as any;\r\n\r\n // Delete previous link\r\n this.dispose();\r\n\r\n // Connect to the new block\r\n this._graphCanvas.connectNodes(nodeA, pointA, newNode, newNode.getPortDataForPortDataContent(newBlock.input)!);\r\n this._graphCanvas.connectNodes(newNode, newNode.getPortDataForPortDataContent(newBlock.output)!, nodeB, pointB);\r\n\r\n stateManager.onRebuildRequiredObservable.notifyObservers();\r\n };\r\n\r\n if (evt.altKey) {\r\n if (!stateManager.isElbowConnectionAllowed(this._portA, this._portB!)) {\r\n return;\r\n }\r\n\r\n // Create an elbow at the clicked location\r\n stateManager.onNewNodeCreatedObservable.addOnce(reconnect);\r\n\r\n stateManager.onNewBlockRequiredObservable.notifyObservers({\r\n type: \"ElbowBlock\",\r\n targetX: evt.clientX,\r\n targetY: evt.clientY,\r\n needRepositioning: true,\r\n });\r\n return;\r\n }\r\n\r\n if (evt.ctrlKey) {\r\n if (!stateManager.isDebugConnectionAllowed(this._portA, this._portB!)) {\r\n return;\r\n }\r\n\r\n // Create a debug at the clicked location\r\n stateManager.onNewNodeCreatedObservable.addOnce(reconnect);\r\n\r\n stateManager.onNewBlockRequiredObservable.notifyObservers({\r\n type: \"DebugBlock\",\r\n targetX: evt.clientX,\r\n targetY: evt.clientY,\r\n needRepositioning: true,\r\n });\r\n return;\r\n }\r\n\r\n stateManager.onSelectionChangedObservable.notifyObservers({ selection: this });\r\n }\r\n\r\n public dispose(notify = true) {\r\n this._graphCanvas.stateManager.onSelectionChangedObservable.remove(this._onSelectionChangedObserver);\r\n\r\n if (this._path.parentElement) {\r\n this._path.parentElement.removeChild(this._path);\r\n }\r\n\r\n if (this._selectionPath.parentElement) {\r\n this._selectionPath.parentElement.removeChild(this._selectionPath);\r\n }\r\n\r\n if (this._nodeB) {\r\n this._nodeA.links.splice(this._nodeA.links.indexOf(this), 1);\r\n this._nodeB.links.splice(this._nodeB.links.indexOf(this), 1);\r\n this._graphCanvas.links.splice(this._graphCanvas.links.indexOf(this), 1);\r\n\r\n this._portA.portData.disconnectFrom(this._portB!.portData);\r\n\r\n RefreshNode(this._nodeB, undefined, undefined, this._graphCanvas);\r\n }\r\n\r\n if (notify) {\r\n this.onDisposedObservable.notifyObservers(this);\r\n\r\n this.onDisposedObservable.clear();\r\n }\r\n }\r\n}\r\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@babylonjs/shared-ui-components",
3
- "version": "7.26.0",
3
+ "version": "7.26.1",
4
4
  "main": "index.js",
5
5
  "module": "index.js",
6
6
  "types": "index.d.ts",