@onerjs/shared-ui-components 8.49.4 → 8.49.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fluent/primitives/tooltip.d.ts +1 -1
- package/fluent/primitives/tooltip.js.map +1 -1
- package/nodeGraphSystem/graphCanvas.js +2 -1
- package/nodeGraphSystem/graphCanvas.js.map +1 -1
- package/nodeGraphSystem/graphNode.d.ts +2 -0
- package/nodeGraphSystem/graphNode.js +4 -0
- package/nodeGraphSystem/graphNode.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type Nullable } from "@onerjs/core/index.js";
|
|
2
2
|
import { type ReactElement } from "react";
|
|
3
3
|
export type TooltipProps = {
|
|
4
|
-
content?: Nullable<string>;
|
|
4
|
+
content?: Nullable<string | ReactElement>;
|
|
5
5
|
children: ReactElement;
|
|
6
6
|
};
|
|
7
7
|
export declare const Tooltip: import("react").ForwardRefExoticComponent<TooltipProps & import("react").RefAttributes<HTMLElement>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tooltip.js","sourceRoot":"","sources":["../../../../../dev/sharedUiComponents/src/fluent/primitives/tooltip.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAqB,UAAU,EAAE,MAAM,OAAO,CAAC;AAEtD,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAItE,iFAAiF;AACjF,8FAA8F;AAC9F,MAAM,CAAC,MAAM,OAAO,GAAG,UAAU,CAA4B,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACzE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IAEpC,IAAI,CAAC,OAAO,EAAE,CAAC;QACX,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED,OAAO,CACH,KAAC,aAAa,IAAC,YAAY,EAAC,aAAa,EAAC,OAAO,EAAE,OAAO,YACrD,QAAQ,GACG,CACnB,CAAC;AACN,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC","sourcesContent":["import { type Nullable } from \"core/index\";\r\n\r\nimport { type ReactElement, forwardRef } from \"react\";\r\n\r\nimport { Tooltip as FluentTooltip } from \"@fluentui/react-components\";\r\n\r\nexport type TooltipProps = { content?: Nullable<string>; children: ReactElement };\r\n\r\n// forwardRef wrapper to avoid \"function components cannot be given refs\" warning\r\n// FluentTooltip handles ref forwarding to children internally via applyTriggerPropsToChildren\r\nexport const Tooltip = forwardRef<HTMLElement, TooltipProps>((props, _ref) => {\r\n const { content, children } = props;\r\n\r\n if (!content) {\r\n return children;\r\n }\r\n\r\n return (\r\n <FluentTooltip relationship=\"description\" content={content}>\r\n {children}\r\n </FluentTooltip>\r\n );\r\n});\r\n\r\nTooltip.displayName = \"Tooltip\";\r\n"]}
|
|
1
|
+
{"version":3,"file":"tooltip.js","sourceRoot":"","sources":["../../../../../dev/sharedUiComponents/src/fluent/primitives/tooltip.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAqB,UAAU,EAAE,MAAM,OAAO,CAAC;AAEtD,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAItE,iFAAiF;AACjF,8FAA8F;AAC9F,MAAM,CAAC,MAAM,OAAO,GAAG,UAAU,CAA4B,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACzE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IAEpC,IAAI,CAAC,OAAO,EAAE,CAAC;QACX,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED,OAAO,CACH,KAAC,aAAa,IAAC,YAAY,EAAC,aAAa,EAAC,OAAO,EAAE,OAAO,YACrD,QAAQ,GACG,CACnB,CAAC;AACN,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC","sourcesContent":["import { type Nullable } from \"core/index\";\r\n\r\nimport { type ReactElement, forwardRef } from \"react\";\r\n\r\nimport { Tooltip as FluentTooltip } from \"@fluentui/react-components\";\r\n\r\nexport type TooltipProps = { content?: Nullable<string | ReactElement>; children: ReactElement };\r\n\r\n// forwardRef wrapper to avoid \"function components cannot be given refs\" warning\r\n// FluentTooltip handles ref forwarding to children internally via applyTriggerPropsToChildren\r\nexport const Tooltip = forwardRef<HTMLElement, TooltipProps>((props, _ref) => {\r\n const { content, children } = props;\r\n\r\n if (!content) {\r\n return children;\r\n }\r\n\r\n return (\r\n <FluentTooltip relationship=\"description\" content={content}>\r\n {children}\r\n </FluentTooltip>\r\n );\r\n});\r\n\r\nTooltip.displayName = \"Tooltip\";\r\n"]}
|
|
@@ -771,9 +771,10 @@ export class GraphCanvasComponent extends React.Component {
|
|
|
771
771
|
}
|
|
772
772
|
output.endpoints.forEach((endpoint) => {
|
|
773
773
|
const sourceFrames = this._frames.filter((f) => f.nodes.indexOf(node) !== -1);
|
|
774
|
+
const targetNode = this._nodes.find((n) => n.content.data === endpoint.ownerData);
|
|
774
775
|
const targetFrames = this._frames.filter((f) => f.nodes.some((n) => n.content.data === endpoint.ownerData));
|
|
775
776
|
const sourceId = sourceFrames.length > 0 ? sourceFrames[0].id : node.id;
|
|
776
|
-
const targetId = targetFrames.length > 0 ? targetFrames[0].id : endpoint.ownerData.uniqueId;
|
|
777
|
+
const targetId = targetFrames.length > 0 ? targetFrames[0].id : targetNode ? targetNode.id : endpoint.ownerData.uniqueId;
|
|
777
778
|
graph.setEdge(sourceId.toString(), targetId.toString());
|
|
778
779
|
});
|
|
779
780
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graphCanvas.js","sourceRoot":"","sources":["../../../../dev/sharedUiComponents/src/nodeGraphSystem/graphCanvas.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from \"react\";\r\nimport { GraphNode } from \"./graphNode\";\r\nimport * as dagre from \"dagre\";\r\nimport { type Nullable } from \"core/types\";\r\nimport { NodeLink } from \"./nodeLink\";\r\nimport { NodePort } from \"./nodePort\";\r\nimport { Vector2 } from \"core/Maths/math.vector\";\r\nimport { DataStorage } from \"core/Misc/dataStorage\";\r\nimport { GraphFrame } from \"./graphFrame\";\r\nimport { GraphStickyNote } from \"./graphStickyNote\";\r\nimport { type IEditorData, type IFrameData } from \"./interfaces/nodeLocationInfo\";\r\nimport { FrameNodePort } from \"./frameNodePort\";\r\nimport { type StateManager } from \"./stateManager\";\r\nimport { type FramePortData } from \"./types/framePortData\";\r\nimport { type INodeData } from \"./interfaces/nodeData\";\r\nimport { type IPortData, PortDataDirection } from \"./interfaces/portData\";\r\nimport { type INodeContainer } from \"./interfaces/nodeContainer\";\r\nimport * as styles from \"./graphCanvas.module.scss\";\r\nimport * as commonStyles from \"./common.module.scss\";\r\n\r\nimport { TypeLedger } from \"./typeLedger\";\r\nimport { RefreshNode } from \"./tools\";\r\nimport { SearchBoxComponent } from \"./searchBox\";\r\nimport { GraphMinimapComponent } from \"./graphMinimap\";\r\nimport { GraphSearchComponent } from \"./graphSearch\";\r\n\r\nexport interface IGraphCanvasComponentProps {\r\n stateManager: StateManager;\r\n onEmitNewNode: (nodeData: INodeData) => GraphNode;\r\n /** When true, a minimap overlay is shown during zoom/pan. Default false. */\r\n enableMinimap?: boolean;\r\n /** When true, sticky note annotations can be created and managed on the canvas. Default false. */\r\n enableStickyNotes?: boolean;\r\n /** When true, Ctrl+F opens a find-in-graph search bar. Default false. */\r\n enableFindInGraph?: boolean;\r\n /** When true, ports glow red during drag when hovering over an incompatible target. Default false. */\r\n enablePortCompatibilityHighlight?: boolean;\r\n /** When true, nodes can display validation and breakpoint badge overlays. Default false. */\r\n enableNodeBadges?: boolean;\r\n}\r\n\r\nexport class GraphCanvasComponent extends React.Component<IGraphCanvasComponentProps> implements INodeContainer {\r\n public static readonly NodeWidth = 100;\r\n private readonly _minZoom = 0.1;\r\n private readonly _maxZoom = 4;\r\n\r\n private _hostCanvasRef = React.createRef<HTMLDivElement>();\r\n private _hostCanvas: HTMLDivElement;\r\n private _graphCanvasRef = React.createRef<HTMLDivElement>();\r\n private _graphCanvas: HTMLDivElement;\r\n private _selectionContainerRef = React.createRef<HTMLDivElement>();\r\n private _selectionContainer: HTMLDivElement;\r\n private _frameContainerRef = React.createRef<HTMLDivElement>();\r\n private _frameContainer: HTMLDivElement;\r\n private _svgCanvasRef = React.createRef<SVGSVGElement>();\r\n private _svgCanvas: HTMLElement;\r\n private _rootContainerRef = React.createRef<HTMLDivElement>();\r\n private _rootContainer: HTMLDivElement;\r\n private _nodes: GraphNode[] = [];\r\n private _links: NodeLink[] = [];\r\n private _mouseStartPointX: Nullable<number> = null;\r\n private _mouseStartPointY: Nullable<number> = null;\r\n private _dropPointX = 0;\r\n private _dropPointY = 0;\r\n private _selectionStartX = 0;\r\n private _selectionStartY = 0;\r\n private _candidateLinkedHasMoved = false;\r\n private _x = 0;\r\n private _y = 0;\r\n private _lastx = 0;\r\n private _lasty = 0;\r\n private _zoom = 1;\r\n private _selectedNodes: GraphNode[] = [];\r\n private _selectedLink: Nullable<NodeLink> = null;\r\n private _selectedPort: Nullable<NodePort> = null;\r\n private _candidateLink: Nullable<NodeLink> = null;\r\n private _candidatePort: Nullable<NodePort | FrameNodePort> = null;\r\n private _gridSize = 20;\r\n private _selectionBox: Nullable<HTMLDivElement> = null;\r\n private _selectedFrames: GraphFrame[] = [];\r\n private _frameCandidate: Nullable<HTMLDivElement> = null;\r\n private _frames: GraphFrame[] = [];\r\n private _stickyNotes: GraphStickyNote[] = [];\r\n private _selectedStickyNotes: GraphStickyNote[] = [];\r\n private _nodeDataContentList = new Array<any>();\r\n\r\n private _altKeyIsPressed = false;\r\n private _shiftKeyIsPressed = false;\r\n private _multiKeyIsPressed = false;\r\n private _oldY = -1;\r\n\r\n private _keyUpHandler: (() => void) | null = null;\r\n private _keyDownHandler: ((evt: KeyboardEvent) => void) | null = null;\r\n private _blurHandler: (() => void) | null = null;\r\n\r\n public _frameIsMoving = false;\r\n public _isLoading = false;\r\n public _targetLinkCandidate: Nullable<NodeLink> = null;\r\n\r\n private _isCopyingOrPasting: boolean = false;\r\n private _copiedNodes: GraphNode[] = [];\r\n private _copiedFrames: GraphFrame[] = [];\r\n private _searchRef = React.createRef<GraphSearchComponent>();\r\n\r\n public get gridSize() {\r\n return this._gridSize;\r\n }\r\n\r\n public set gridSize(value: number) {\r\n this._gridSize = value;\r\n\r\n this.updateTransform();\r\n }\r\n\r\n public get stateManager() {\r\n return this.props.stateManager;\r\n }\r\n\r\n public get nodes() {\r\n return this._nodes;\r\n }\r\n\r\n public get links() {\r\n return this._links;\r\n }\r\n\r\n public get frames() {\r\n return this._frames;\r\n }\r\n\r\n public get zoom() {\r\n return this._zoom;\r\n }\r\n\r\n public set zoom(value: number) {\r\n if (this._zoom === value) {\r\n return;\r\n }\r\n\r\n this._zoom = value;\r\n\r\n this.updateTransform();\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 this._x = value;\r\n\r\n this.updateTransform();\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 this._y = value;\r\n\r\n this.updateTransform();\r\n }\r\n\r\n public get selectedNodes() {\r\n return this._selectedNodes;\r\n }\r\n\r\n public get selectedLink() {\r\n return this._selectedLink;\r\n }\r\n public get selectedFrames() {\r\n return this._selectedFrames;\r\n }\r\n\r\n public get stickyNotes() {\r\n return this._stickyNotes;\r\n }\r\n\r\n public get selectedStickyNotes() {\r\n return this._selectedStickyNotes;\r\n }\r\n\r\n public get selectedPort() {\r\n return this._selectedPort;\r\n }\r\n\r\n public get canvasContainer() {\r\n return this._graphCanvas;\r\n }\r\n\r\n public get hostCanvas() {\r\n return this._hostCanvas;\r\n }\r\n\r\n public get svgCanvas() {\r\n return this._svgCanvas;\r\n }\r\n\r\n public get selectionContainer() {\r\n return this._selectionContainer;\r\n }\r\n\r\n public get frameContainer() {\r\n return this._frameContainer;\r\n }\r\n\r\n // There is a selection conflict between nodes and frames if any selected node is inside any selected frame\r\n private _selectedFrameAndNodesConflict(frameSelection: GraphFrame[], nodeSelection: GraphNode[]) {\r\n for (const frame of frameSelection) {\r\n for (const node of nodeSelection) {\r\n if (frame.nodes.includes(node)) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n private _deselectAllStickyNotes() {\r\n for (const note of this._selectedStickyNotes) {\r\n note.setIsSelected(false);\r\n }\r\n this._selectedStickyNotes = [];\r\n }\r\n\r\n constructor(props: IGraphCanvasComponentProps) {\r\n super(props);\r\n\r\n props.stateManager.enablePortCompatibilityHighlight = !!props.enablePortCompatibilityHighlight;\r\n props.stateManager.enableNodeBadges = !!props.enableNodeBadges;\r\n\r\n props.stateManager.onSelectionChangedObservable.add((options) => {\r\n const { selection, forceKeepSelection, marqueeSelection = false } = options || {};\r\n if (!selection) {\r\n this._selectedNodes = [];\r\n this._selectedLink = null;\r\n this._selectedFrames = [];\r\n this._selectedPort = null;\r\n for (const note of this._selectedStickyNotes) {\r\n note.setIsSelected(false);\r\n }\r\n this._selectedStickyNotes = [];\r\n } else {\r\n if (selection instanceof NodeLink) {\r\n this._selectedNodes = [];\r\n this._selectedFrames = [];\r\n this._selectedLink = selection;\r\n this._selectedPort = null;\r\n this._deselectAllStickyNotes();\r\n } else if (selection instanceof NodePort) {\r\n this._selectedNodes = [];\r\n this._selectedFrames = [];\r\n this._selectedLink = null;\r\n this._selectedPort = selection;\r\n this._deselectAllStickyNotes();\r\n } else if (selection instanceof FrameNodePort) {\r\n this._selectedNodes = [];\r\n this._selectedFrames = [];\r\n this._selectedLink = null;\r\n this._selectedPort = selection;\r\n this._deselectAllStickyNotes();\r\n } else if (this.props.enableStickyNotes && selection instanceof GraphStickyNote) {\r\n if (this._multiKeyIsPressed || this._shiftKeyIsPressed || forceKeepSelection) {\r\n if (!this._selectedStickyNotes.includes(selection)) {\r\n this._selectedStickyNotes.push(selection);\r\n }\r\n } else {\r\n this._selectedNodes = [];\r\n this._selectedFrames = [];\r\n this._selectedStickyNotes = [selection];\r\n this._selectedLink = null;\r\n this._selectedPort = null;\r\n }\r\n selection.setIsSelected(true);\r\n } else if (selection instanceof GraphNode || selection instanceof GraphFrame) {\r\n // If in marquee selection mode, always prioritize selecting nodes. Otherwise, always prioritize selecting the type of\r\n // the selected element\r\n if (marqueeSelection) {\r\n if (selection instanceof GraphFrame && !this._selectedFrames.includes(selection)) {\r\n this._selectedFrames.push(selection);\r\n } else if (selection instanceof GraphNode && !this._selectedNodes.includes(selection)) {\r\n this._selectedNodes.push(selection);\r\n }\r\n if (this._selectedFrameAndNodesConflict(this.selectedFrames, this.selectedNodes)) {\r\n const framesToRemove = new Set();\r\n for (const selectedNode of this._selectedNodes) {\r\n for (const selectedFrame of this._selectedFrames) {\r\n if (selectedFrame.nodes.includes(selectedNode)) {\r\n framesToRemove.add(selectedFrame);\r\n }\r\n }\r\n }\r\n this._selectedFrames = this._selectedFrames.filter((f) => !framesToRemove.has(f));\r\n }\r\n } else {\r\n if (selection instanceof GraphFrame) {\r\n if (this._multiKeyIsPressed || this._shiftKeyIsPressed || forceKeepSelection) {\r\n if (!this._selectedFrameAndNodesConflict([selection], this._selectedNodes) && !this._selectedFrames.includes(selection)) {\r\n this._selectedFrames.push(selection);\r\n }\r\n } else {\r\n this._selectedFrames = [selection];\r\n this._selectedNodes = [];\r\n this._selectedLink = null;\r\n this._selectedPort = null;\r\n this._deselectAllStickyNotes();\r\n }\r\n } else if (selection instanceof GraphNode) {\r\n if (this._multiKeyIsPressed || this._shiftKeyIsPressed || forceKeepSelection) {\r\n if (!this._selectedFrameAndNodesConflict(this._selectedFrames, [selection]) && !this._selectedNodes.includes(selection)) {\r\n this._selectedNodes.push(selection);\r\n }\r\n } else {\r\n this._selectedFrames = [];\r\n this._selectedNodes = [selection];\r\n this._selectedLink = null;\r\n this._selectedPort = null;\r\n this._deselectAllStickyNotes();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n });\r\n\r\n props.stateManager.onCandidatePortSelectedObservable.add((port) => {\r\n this._candidatePort = port;\r\n });\r\n\r\n props.stateManager.onGridSizeChanged.add(() => {\r\n this.gridSize = DataStorage.ReadNumber(\"GridSize\", 20);\r\n });\r\n\r\n this._keyUpHandler = () => this.onKeyUp();\r\n this._keyDownHandler = (evt) => {\r\n this._altKeyIsPressed = evt.altKey;\r\n this._shiftKeyIsPressed = evt.shiftKey;\r\n this._multiKeyIsPressed = evt.ctrlKey || evt.metaKey;\r\n };\r\n this._blurHandler = () => {\r\n this._altKeyIsPressed = false;\r\n this._shiftKeyIsPressed = false;\r\n this._multiKeyIsPressed = false;\r\n };\r\n\r\n this.props.stateManager.hostDocument.addEventListener(\"keyup\", this._keyUpHandler, false);\r\n this.props.stateManager.hostDocument.addEventListener(\"keydown\", this._keyDownHandler, false);\r\n this.props.stateManager.hostDocument.defaultView!.addEventListener(\"blur\", this._blurHandler, false);\r\n\r\n // Store additional data to serialization object\r\n this.props.stateManager.storeEditorData = (editorData, graphFrame) => {\r\n editorData.frames = [];\r\n if (graphFrame) {\r\n editorData.frames.push(graphFrame.serialize(false));\r\n } else {\r\n editorData.x = this.x;\r\n editorData.y = this.y;\r\n editorData.zoom = this.zoom;\r\n for (const frame of this._frames) {\r\n editorData.frames.push(frame.serialize(true));\r\n }\r\n if (this.props.enableStickyNotes) {\r\n editorData.stickyNotes = [];\r\n for (const note of this._stickyNotes) {\r\n editorData.stickyNotes.push(note.serialize());\r\n }\r\n }\r\n }\r\n };\r\n }\r\n\r\n populateConnectedEntriesBeforeRemoval(item: GraphNode, items: GraphNode[], inputs: Nullable<IPortData>[], outputs: Nullable<IPortData>[]) {\r\n inputs.push(\r\n ...item.content.inputs.filter((i) => i.isConnected && items.every((selected) => selected.content.data !== i.connectedPort?.ownerData)).map((i) => i.connectedPort)\r\n );\r\n\r\n outputs.push(\r\n ...item.content.outputs\r\n .filter((i) => i.isConnected)\r\n .map((i) => i.endpoints)\r\n .flat()\r\n .filter((i) => i && items.every((selected) => selected.content.data !== i.ownerData))\r\n );\r\n }\r\n\r\n automaticRewire(inputs: Nullable<IPortData>[], outputs: Nullable<IPortData>[], firstOnly = false) {\r\n let oneConnectionFound = false;\r\n if (outputs.length && inputs.length) {\r\n inputs.forEach((input) => {\r\n if (oneConnectionFound) {\r\n return;\r\n }\r\n if (!input) {\r\n return;\r\n }\r\n const output = outputs[0];\r\n if (output && input.canConnectTo(output)) {\r\n const nodeInput = this.findNodeFromData(input.ownerData);\r\n const nodeOutput = this.findNodeFromData(output.ownerData);\r\n this.connectNodes(nodeInput, input, nodeOutput, output);\r\n outputs.shift();\r\n if (firstOnly) {\r\n oneConnectionFound = true;\r\n return;\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n smartAddOverLink(node: GraphNode, link: NodeLink) {\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 = link.nodeA;\r\n const rightNode = link.nodeB!;\r\n\r\n // Delete previous\r\n link.dispose();\r\n\r\n // Get the ports\r\n availableNodeInputs.push(...node.content.inputs.filter((i) => !i.isConnected));\r\n\r\n availableNodeOutputs.push(...node.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 // Reconnect\r\n this.automaticRewire(inputs, availableNodeInputs, true);\r\n this.automaticRewire(availableNodeOutputs, outputs, true);\r\n this.props.stateManager.onRebuildRequiredObservable.notifyObservers();\r\n }\r\n\r\n smartAddOverNode(node: GraphNode, source: GraphNode) {\r\n // Connect the ports\r\n const inputs: Nullable<IPortData>[] = [];\r\n const availableNodeInputs: Nullable<IPortData>[] = [];\r\n\r\n // Get the ports\r\n availableNodeInputs.push(...node.content.inputs.filter((i) => !i.isConnected));\r\n\r\n inputs.push(...source.content.outputs);\r\n\r\n // Reconnect\r\n this.automaticRewire(inputs, availableNodeInputs, true);\r\n this.props.stateManager.onRebuildRequiredObservable.notifyObservers();\r\n }\r\n\r\n deleteSelection(onRemove: (nodeData: INodeData) => void, autoReconnect = false) {\r\n // Delete\r\n const selectedItems = this.selectedNodes;\r\n const inputs: Nullable<IPortData>[] = [];\r\n const outputs: Nullable<IPortData>[] = [];\r\n let needRebuild = false;\r\n\r\n if (selectedItems.length > 0) {\r\n needRebuild = true;\r\n for (const selectedItem of selectedItems) {\r\n if (autoReconnect) {\r\n this.populateConnectedEntriesBeforeRemoval(selectedItem, selectedItems, inputs, outputs);\r\n }\r\n\r\n selectedItem.dispose();\r\n\r\n onRemove(selectedItem.content);\r\n this.removeDataFromCache(selectedItem.content.data);\r\n }\r\n }\r\n\r\n if (this.selectedLink) {\r\n needRebuild = true;\r\n this.selectedLink.dispose();\r\n\r\n if (this.selectedLink.nodeB) {\r\n RefreshNode(this.selectedLink.nodeB);\r\n }\r\n }\r\n\r\n if (this.selectedFrames.length) {\r\n needRebuild = true;\r\n for (const frame of this.selectedFrames) {\r\n if (frame.isCollapsed) {\r\n while (frame.nodes.length > 0) {\r\n onRemove(frame.nodes[0].content);\r\n this.removeDataFromCache(frame.nodes[0].content.data);\r\n frame.nodes[0].dispose();\r\n }\r\n frame.isCollapsed = false;\r\n } else {\r\n frame.nodes.forEach((node) => {\r\n node.enclosingFrameId = -1;\r\n });\r\n }\r\n frame.dispose();\r\n }\r\n }\r\n\r\n if (this.props.enableStickyNotes && this._selectedStickyNotes.length) {\r\n needRebuild = true;\r\n for (const note of this._selectedStickyNotes) {\r\n note.dispose();\r\n }\r\n this._selectedStickyNotes = [];\r\n }\r\n\r\n if (!needRebuild) {\r\n return;\r\n }\r\n\r\n // Reconnect if required\r\n this.automaticRewire(inputs, outputs);\r\n\r\n this.props.stateManager.onSelectionChangedObservable.notifyObservers(null);\r\n this.props.stateManager.onRebuildRequiredObservable.notifyObservers();\r\n }\r\n\r\n async handleKeyDownAsync(\r\n evt: KeyboardEvent,\r\n onRemove: (nodeData: INodeData) => void,\r\n mouseLocationX: number,\r\n mouseLocationY: number,\r\n dataGenerator: (nodeData: INodeData) => Promise<Nullable<GraphNode>>,\r\n rootElement: HTMLDivElement\r\n ) {\r\n if (this.stateManager.modalIsDisplayed) {\r\n return;\r\n }\r\n\r\n if (evt.code === \"Space\" && evt.target === this.props.stateManager.hostDocument.body) {\r\n this.stateManager.modalIsDisplayed = true;\r\n this.props.stateManager.onSearchBoxRequiredObservable.notifyObservers({ x: mouseLocationX, y: mouseLocationY });\r\n return;\r\n }\r\n if ((evt.keyCode === 46 || evt.keyCode === 8) && !this.props.stateManager.lockObject.lock) {\r\n this.deleteSelection(onRemove, evt.altKey);\r\n return;\r\n }\r\n\r\n if ((!evt.ctrlKey && !evt.metaKey) || this.props.stateManager.lockObject.lock) {\r\n return;\r\n }\r\n\r\n // Now we're doing copy or paste - ensure we only do one at a time since these operations are async\r\n if (this._isCopyingOrPasting) {\r\n return;\r\n }\r\n try {\r\n if (evt.key === \"c\" || evt.key === \"C\") {\r\n // Copy\r\n this._copiedNodes = [];\r\n this._copiedFrames = [];\r\n\r\n if (this.selectedFrames.length) {\r\n for (const frame of this.selectedFrames) {\r\n frame.serialize(true);\r\n this._copiedFrames.push(frame);\r\n }\r\n return;\r\n }\r\n\r\n const selectedItems = this.selectedNodes;\r\n if (!selectedItems.length) {\r\n return;\r\n }\r\n\r\n const selectedItem = selectedItems[0];\r\n\r\n if (!selectedItem.content.data) {\r\n return;\r\n }\r\n\r\n this._copiedNodes = selectedItems.slice(0);\r\n } else if (evt.key === \"v\" || evt.key === \"V\") {\r\n // Paste\r\n const zoomLevel = this.zoom;\r\n let currentY = (mouseLocationY - rootElement.offsetTop - this.y - 20) / zoomLevel;\r\n\r\n if (this._copiedFrames.length) {\r\n for (const frame of this._copiedFrames) {\r\n // New frame\r\n const newFrame = new GraphFrame(null, this, true);\r\n this.frames.push(newFrame);\r\n\r\n newFrame.width = frame.width;\r\n newFrame.height = frame.height;\r\n newFrame.width / 2;\r\n newFrame.name = frame.name;\r\n newFrame.color = frame.color;\r\n\r\n let currentX = (mouseLocationX - rootElement.offsetLeft - this.x) / zoomLevel;\r\n newFrame.x = currentX - newFrame.width / 2;\r\n newFrame.y = currentY;\r\n\r\n // Paste nodes\r\n if (frame.nodes.length) {\r\n currentX = newFrame.x + frame.nodes[0].x - frame.x;\r\n currentY = newFrame.y + frame.nodes[0].y - frame.y;\r\n\r\n this._frameIsMoving = true;\r\n // eslint-disable-next-line no-await-in-loop\r\n const newNodes = await this.pasteSelectionAsync(frame.nodes, currentX, currentY, dataGenerator);\r\n if (newNodes) {\r\n for (const node of newNodes) {\r\n newFrame.syncNode(node);\r\n }\r\n }\r\n this._frameIsMoving = false;\r\n }\r\n\r\n newFrame.adjustPorts();\r\n\r\n if (frame.isCollapsed) {\r\n newFrame.isCollapsed = true;\r\n }\r\n\r\n // Select\r\n this.props.stateManager.onSelectionChangedObservable.notifyObservers({ selection: newFrame, forceKeepSelection: true });\r\n return;\r\n }\r\n }\r\n\r\n if (!this._copiedNodes.length) {\r\n return;\r\n }\r\n\r\n const currentX = (mouseLocationX - rootElement.offsetLeft - this.x - GraphCanvasComponent.NodeWidth) / zoomLevel;\r\n await this.pasteSelectionAsync(this._copiedNodes, currentX, currentY, dataGenerator, true);\r\n }\r\n } finally {\r\n this._isCopyingOrPasting = false;\r\n }\r\n }\r\n\r\n async pasteSelectionAsync(\r\n copiedNodes: GraphNode[],\r\n currentX: number,\r\n currentY: number,\r\n dataGenerator: (nodeData: INodeData) => Promise<Nullable<GraphNode>>,\r\n selectNew = false\r\n ) {\r\n let originalNode: Nullable<GraphNode> = null;\r\n\r\n const newNodes: GraphNode[] = [];\r\n\r\n // Copy to prevent recursive side effects while creating nodes.\r\n copiedNodes = copiedNodes.slice();\r\n\r\n // Cancel selection\r\n this.props.stateManager.onSelectionChangedObservable.notifyObservers(null);\r\n\r\n // Create new nodes\r\n for (const node of copiedNodes) {\r\n const data = node.content.data;\r\n\r\n if (!data) {\r\n continue;\r\n }\r\n\r\n // eslint-disable-next-line no-await-in-loop\r\n const newNode = await dataGenerator(node.content);\r\n\r\n if (!newNode) {\r\n continue;\r\n }\r\n\r\n let x: number;\r\n let y: number;\r\n if (originalNode) {\r\n x = currentX + node.x - originalNode.x;\r\n y = currentY + node.y - originalNode.y;\r\n } else {\r\n originalNode = node;\r\n x = currentX;\r\n y = currentY;\r\n }\r\n\r\n newNode.x = x;\r\n newNode.y = y;\r\n newNode.cleanAccumulation();\r\n\r\n newNodes.push(newNode);\r\n\r\n this.props.stateManager.onNewNodeCreatedObservable.notifyObservers(newNode);\r\n\r\n if (selectNew) {\r\n this.props.stateManager.onSelectionChangedObservable.notifyObservers({ selection: newNode, forceKeepSelection: true });\r\n }\r\n }\r\n\r\n // Relink\r\n const done = new Array<boolean>(newNodes.length);\r\n for (let index = 0; index < newNodes.length; index++) {\r\n this.reconnectNewNodes(index, newNodes, copiedNodes, done);\r\n }\r\n\r\n this.props.stateManager.onRebuildRequiredObservable.notifyObservers();\r\n\r\n return newNodes;\r\n }\r\n\r\n reconnectNewNodes(nodeIndex: number, newNodes: GraphNode[], sourceNodes: GraphNode[], done: boolean[]) {\r\n if (done[nodeIndex]) {\r\n return;\r\n }\r\n\r\n const currentNode = newNodes[nodeIndex];\r\n const sourceNode = sourceNodes[nodeIndex];\r\n\r\n for (let inputIndex = 0; inputIndex < sourceNode.content.inputs.length; inputIndex++) {\r\n const sourceInput = sourceNode.content.inputs[inputIndex];\r\n const currentInput = currentNode.content.inputs[inputIndex];\r\n if (!sourceInput.isConnected) {\r\n continue;\r\n }\r\n const sourceContent = this.findNodeFromData(sourceInput.connectedPort!.ownerData).content;\r\n const activeNodes = sourceNodes.filter((s) => s.content === sourceContent);\r\n\r\n if (activeNodes.length > 0) {\r\n const activeNode = activeNodes[0];\r\n const indexInList = sourceNodes.indexOf(activeNode);\r\n\r\n // First make sure to connect the other one\r\n this.reconnectNewNodes(indexInList, newNodes, sourceNodes, done);\r\n\r\n // Then reconnect\r\n const outputIndex = sourceContent.outputs.indexOf(sourceInput.connectedPort!);\r\n const newOutput = newNodes[indexInList].content.data.outputs[outputIndex];\r\n\r\n newOutput.connectTo(currentInput.data);\r\n } else {\r\n // Connect with outside nodes\r\n sourceInput.connectedPort!.connectTo(currentInput);\r\n }\r\n\r\n this.connectPorts(currentInput.connectedPort!, currentInput);\r\n }\r\n\r\n currentNode.refresh();\r\n\r\n done[nodeIndex] = true;\r\n }\r\n\r\n public getCachedData(): any[] {\r\n return this._nodeDataContentList;\r\n }\r\n\r\n public removeDataFromCache(data: any) {\r\n const dataIndex = this._nodeDataContentList.indexOf(data);\r\n\r\n if (dataIndex > -1) {\r\n this._nodeDataContentList.splice(dataIndex, 1);\r\n }\r\n }\r\n\r\n public createNodeFromObject(nodeData: INodeData, onNodeCreated: (data: any) => void, recursion = true) {\r\n if (this._nodeDataContentList.indexOf(nodeData.data) !== -1) {\r\n // Links\r\n if (nodeData.inputs.length && recursion) {\r\n for (const input of nodeData.inputs) {\r\n if (input.isConnected) {\r\n this.connectPorts(input.connectedPort!, input);\r\n }\r\n }\r\n }\r\n return this.nodes.filter((n) => n.content.data === nodeData.data)[0];\r\n }\r\n\r\n onNodeCreated(nodeData.data);\r\n\r\n // Connections\r\n if (nodeData.inputs.length) {\r\n for (const input of nodeData.inputs) {\r\n if (input.connectedPort && recursion) {\r\n this.createNodeFromObject(TypeLedger.NodeDataBuilder(input.connectedPort.ownerData, this), onNodeCreated);\r\n }\r\n }\r\n }\r\n\r\n // Graph\r\n const node = this.appendNode(nodeData);\r\n\r\n // Links\r\n if (nodeData.inputs.length && recursion) {\r\n for (const input of nodeData.inputs) {\r\n if (input.isConnected) {\r\n this.connectPorts(input.connectedPort!, input);\r\n }\r\n }\r\n }\r\n\r\n return node;\r\n }\r\n\r\n public getGridPosition(position: number, useCeil = false) {\r\n const gridSize = this.gridSize;\r\n if (gridSize === 0) {\r\n return position;\r\n }\r\n if (useCeil) {\r\n return gridSize * Math.ceil(position / gridSize);\r\n }\r\n return gridSize * Math.floor(position / gridSize);\r\n }\r\n\r\n public getGridPositionCeil(position: number) {\r\n const gridSize = this.gridSize;\r\n if (gridSize === 0) {\r\n return position;\r\n }\r\n return gridSize * Math.ceil(position / gridSize);\r\n }\r\n\r\n updateTransform() {\r\n this._rootContainer.style.transform = `translate(${this._x}px, ${this._y}px) scale(${this._zoom})`;\r\n\r\n if (DataStorage.ReadBoolean(\"ShowGrid\", true)) {\r\n this._hostCanvas.style.backgroundSize = `${this._gridSize * this._zoom}px ${this._gridSize * this._zoom}px`;\r\n this._hostCanvas.style.backgroundPosition = `${this._x}px ${this._y}px`;\r\n } else {\r\n this._hostCanvas.style.backgroundSize = `0`;\r\n }\r\n }\r\n\r\n onKeyUp() {\r\n this._altKeyIsPressed = false;\r\n this._shiftKeyIsPressed = false;\r\n this._multiKeyIsPressed = false;\r\n this._oldY = -1;\r\n }\r\n\r\n findNodeFromData(data: any) {\r\n return this.nodes.filter((n) => n.content.data === data)[0];\r\n }\r\n\r\n reset() {\r\n this._nodeDataContentList = [];\r\n\r\n for (const node of this._nodes) {\r\n node.dispose();\r\n }\r\n\r\n const frames = this._frames.splice(0);\r\n for (const frame of frames) {\r\n frame.dispose();\r\n }\r\n\r\n const notes = this._stickyNotes.splice(0);\r\n for (const note of notes) {\r\n note.element.parentElement?.removeChild(note.element);\r\n }\r\n\r\n this._nodes = [];\r\n this._frames = [];\r\n this._stickyNotes = [];\r\n this._selectedStickyNotes = [];\r\n this._links = [];\r\n this._graphCanvas.innerHTML = \"\";\r\n this._svgCanvas.innerHTML = \"\";\r\n }\r\n\r\n connectPorts(pointA: IPortData, pointB: IPortData) {\r\n if (!pointA || !pointB) {\r\n return;\r\n }\r\n\r\n const ownerDataA = pointA.ownerData;\r\n const ownerDataB = pointB.ownerData;\r\n const nodeA = this.findNodeFromData(ownerDataA);\r\n const nodeB = this.findNodeFromData(ownerDataB);\r\n\r\n if (!nodeA || !nodeB) {\r\n return;\r\n }\r\n\r\n const portA = nodeA.getPortForPortData(pointA);\r\n const portB = nodeB.getPortForPortData(pointB);\r\n\r\n if (!portA || !portB) {\r\n return;\r\n }\r\n\r\n for (const currentLink of this._links) {\r\n if (currentLink.portA === portA && currentLink.portB === portB) {\r\n return;\r\n }\r\n if (currentLink.portA === portB && currentLink.portB === portA) {\r\n return;\r\n }\r\n }\r\n\r\n const link = new NodeLink(this, portA, nodeA, portB, nodeB);\r\n this._links.push(link);\r\n\r\n nodeA.links.push(link);\r\n nodeB.links.push(link);\r\n }\r\n\r\n removeLink(link: NodeLink) {\r\n const index = this._links.indexOf(link);\r\n\r\n if (index > -1) {\r\n this._links.splice(index, 1);\r\n }\r\n\r\n link.dispose();\r\n }\r\n\r\n appendNode(nodeData: INodeData) {\r\n const newNode = new GraphNode(nodeData, this.props.stateManager);\r\n\r\n newNode.appendVisual(this._graphCanvas, this);\r\n newNode.addClassToVisual(nodeData.getClassName());\r\n\r\n this._nodes.push(newNode);\r\n this._nodeDataContentList.push(nodeData.data);\r\n\r\n return newNode;\r\n }\r\n\r\n distributeGraph() {\r\n this.x = 0;\r\n this.y = 0;\r\n this.zoom = 1;\r\n\r\n const graph = new dagre.graphlib.Graph();\r\n graph.setGraph({});\r\n graph.setDefaultEdgeLabel(() => ({}));\r\n graph.graph().rankdir = \"LR\";\r\n\r\n // Build dagre graph\r\n this._nodes.forEach((node) => {\r\n if (this._frames.some((f) => f.nodes.indexOf(node) !== -1)) {\r\n return;\r\n }\r\n\r\n graph.setNode(node.id.toString(), { id: node.id, type: \"node\", width: node.width, height: node.height });\r\n });\r\n\r\n this._frames.forEach((frame) => {\r\n graph.setNode(frame.id.toString(), { id: frame.id, type: \"frame\", width: frame.element.clientWidth, height: frame.element.clientHeight });\r\n });\r\n\r\n this._nodes.forEach((node) => {\r\n node.content.outputs.forEach((output) => {\r\n if (!output.hasEndpoints) {\r\n return;\r\n }\r\n\r\n output.endpoints!.forEach((endpoint) => {\r\n const sourceFrames = this._frames.filter((f) => f.nodes.indexOf(node) !== -1);\r\n const targetFrames = this._frames.filter((f) => f.nodes.some((n) => n.content.data === endpoint.ownerData));\r\n\r\n const sourceId = sourceFrames.length > 0 ? sourceFrames[0].id : node.id;\r\n const targetId = targetFrames.length > 0 ? targetFrames[0].id : endpoint.ownerData.uniqueId;\r\n\r\n graph.setEdge(sourceId.toString(), targetId.toString());\r\n });\r\n });\r\n });\r\n\r\n // Distribute\r\n dagre.layout(graph);\r\n\r\n // Update graph\r\n const dagreNodes = graph.nodes().map((node) => graph.node(node));\r\n dagreNodes.forEach((dagreNode: any) => {\r\n if (!dagreNode) {\r\n return;\r\n }\r\n if (dagreNode.type === \"node\") {\r\n for (const node of this._nodes) {\r\n if (node.id === dagreNode.id) {\r\n node.x = dagreNode.x - dagreNode.width / 2;\r\n node.y = dagreNode.y - dagreNode.height / 2;\r\n node.cleanAccumulation();\r\n return;\r\n }\r\n }\r\n return;\r\n }\r\n\r\n for (const frame of this._frames) {\r\n if (frame.id === dagreNode.id) {\r\n this._frameIsMoving = true;\r\n frame.move(dagreNode.x - dagreNode.width / 2, dagreNode.y - dagreNode.height / 2, false);\r\n frame.cleanAccumulation();\r\n this._frameIsMoving = false;\r\n return;\r\n }\r\n }\r\n });\r\n }\r\n\r\n override componentDidMount() {\r\n this._hostCanvas = this._hostCanvasRef.current!;\r\n this._rootContainer = this._rootContainerRef.current!;\r\n this._graphCanvas = this._graphCanvasRef.current!;\r\n this._svgCanvas = this._svgCanvasRef.current! as unknown as HTMLElement;\r\n this._selectionContainer = this._selectionContainerRef.current!;\r\n this._frameContainer = this._frameContainerRef.current!;\r\n\r\n this.gridSize = DataStorage.ReadNumber(\"GridSize\", 20);\r\n this.updateTransform();\r\n }\r\n\r\n override componentWillUnmount() {\r\n const doc = this.props.stateManager.hostDocument;\r\n if (this._keyUpHandler) {\r\n doc.removeEventListener(\"keyup\", this._keyUpHandler);\r\n }\r\n if (this._keyDownHandler) {\r\n doc.removeEventListener(\"keydown\", this._keyDownHandler);\r\n }\r\n if (this._blurHandler) {\r\n doc.defaultView?.removeEventListener(\"blur\", this._blurHandler);\r\n }\r\n }\r\n\r\n onMove(evt: React.PointerEvent) {\r\n if (this.stateManager.modalIsDisplayed) {\r\n return;\r\n }\r\n\r\n // Selection box\r\n if (this._selectionBox) {\r\n const rootRect = this.canvasContainer.getBoundingClientRect();\r\n\r\n const localX = evt.pageX - rootRect.left;\r\n const localY = evt.pageY - rootRect.top;\r\n\r\n if (localX > this._selectionStartX) {\r\n this._selectionBox.style.left = `${this._selectionStartX / this.zoom}px`;\r\n this._selectionBox.style.width = `${(localX - this._selectionStartX) / this.zoom}px`;\r\n } else {\r\n this._selectionBox.style.left = `${localX / this.zoom}px`;\r\n this._selectionBox.style.width = `${(this._selectionStartX - localX) / this.zoom}px`;\r\n }\r\n\r\n if (localY > this._selectionStartY) {\r\n this._selectionBox.style.top = `${this._selectionStartY / this.zoom}px`;\r\n this._selectionBox.style.height = `${(localY - this._selectionStartY) / this.zoom}px`;\r\n } else {\r\n this._selectionBox.style.top = `${localY / this.zoom}px`;\r\n this._selectionBox.style.height = `${(this._selectionStartY - localY) / this.zoom}px`;\r\n }\r\n\r\n this.props.stateManager.onSelectionBoxMoved.notifyObservers(this._selectionBox.getBoundingClientRect());\r\n\r\n return;\r\n }\r\n\r\n // Candidate frame box\r\n if (this._frameCandidate) {\r\n const rootRect = this.canvasContainer.getBoundingClientRect();\r\n\r\n const localX = evt.pageX - rootRect.left;\r\n const localY = evt.pageY - rootRect.top;\r\n\r\n if (localX > this._selectionStartX) {\r\n this._frameCandidate.style.left = `${this._selectionStartX / this.zoom}px`;\r\n this._frameCandidate.style.width = `${(localX - this._selectionStartX) / this.zoom}px`;\r\n } else {\r\n this._frameCandidate.style.left = `${localX / this.zoom}px`;\r\n this._frameCandidate.style.width = `${(this._selectionStartX - localX) / this.zoom}px`;\r\n }\r\n\r\n if (localY > this._selectionStartY) {\r\n this._frameCandidate.style.top = `${this._selectionStartY / this.zoom}px`;\r\n this._frameCandidate.style.height = `${(localY - this._selectionStartY) / this.zoom}px`;\r\n } else {\r\n this._frameCandidate.style.top = `${localY / this.zoom}px`;\r\n this._frameCandidate.style.height = `${(this._selectionStartY - localY) / this.zoom}px`;\r\n }\r\n\r\n return;\r\n }\r\n\r\n // Candidate link\r\n if (this._candidateLink) {\r\n const rootRect = this.canvasContainer.getBoundingClientRect();\r\n this._candidatePort = null;\r\n this.props.stateManager.onCandidateLinkMoved.notifyObservers(new Vector2(evt.pageX, evt.pageY));\r\n this._dropPointX = (evt.pageX - rootRect.left) / this.zoom;\r\n this._dropPointY = (evt.pageY - rootRect.top) / this.zoom;\r\n\r\n this._candidateLink.update(this._dropPointX, this._dropPointY, true);\r\n this._candidateLinkedHasMoved = true;\r\n\r\n return;\r\n }\r\n\r\n // Zoom with mouse + alt\r\n if (this._altKeyIsPressed && evt.buttons === 1) {\r\n if (this._oldY < 0) {\r\n this._oldY = evt.pageY;\r\n }\r\n\r\n const zoomDelta = (evt.pageY - this._oldY) / 10;\r\n if (Math.abs(zoomDelta) > 5) {\r\n const oldZoom = this.zoom;\r\n this.zoom = Math.max(Math.min(this._maxZoom, this.zoom + zoomDelta / 100), this._minZoom);\r\n\r\n const boundingRect = evt.currentTarget.getBoundingClientRect();\r\n const clientWidth = boundingRect.width;\r\n const widthDiff = clientWidth * this.zoom - clientWidth * oldZoom;\r\n const clientX = evt.clientX - boundingRect.left;\r\n\r\n const xFactor = (clientX - this.x) / oldZoom / clientWidth;\r\n\r\n this.x = this.x - widthDiff * xFactor;\r\n\r\n this._oldY = evt.pageY;\r\n }\r\n return;\r\n }\r\n\r\n // Move canvas\r\n this._rootContainer.style.cursor = \"move\";\r\n\r\n if (this._mouseStartPointX === null || this._mouseStartPointY === null) {\r\n return;\r\n }\r\n this.x += evt.clientX - this._mouseStartPointX;\r\n this.y += evt.clientY - this._mouseStartPointY;\r\n\r\n this._mouseStartPointX = evt.clientX;\r\n this._mouseStartPointY = evt.clientY;\r\n }\r\n\r\n onDown(evt: React.PointerEvent<HTMLElement>) {\r\n if (this.stateManager.modalIsDisplayed) {\r\n return;\r\n }\r\n\r\n this._rootContainer.setPointerCapture(evt.pointerId);\r\n\r\n // Port dragging\r\n if (evt.nativeEvent.srcElement && (evt.nativeEvent.srcElement as HTMLElement).classList.contains(\"port-icon\")) {\r\n if (!this._candidateLink) {\r\n const portElement = ((evt.nativeEvent.srcElement as HTMLElement).parentElement as any).port as NodePort;\r\n if (this._altKeyIsPressed && (portElement.portData.isConnected || portElement.portData.hasEndpoints)) {\r\n const node = portElement.node;\r\n // Delete connection\r\n const links = node.getLinksForPortData(portElement.portData);\r\n\r\n links.forEach((link) => {\r\n link.dispose(false);\r\n });\r\n\r\n // Pick the first one as target port\r\n const targetNode = links[0].nodeA === node ? links[0].nodeB : links[0].nodeA;\r\n const targetPort = links[0].nodeA === node ? links[0].portB : links[0].portA;\r\n\r\n // Start a new one\r\n this._candidateLink = new NodeLink(this, targetPort!, targetNode!);\r\n } else if (this._multiKeyIsPressed && (portElement.portData.isConnected || portElement.portData.hasEndpoints)) {\r\n const node = portElement.node;\r\n const links = node.getLinksForPortData(portElement.portData);\r\n\r\n // Pick the first one as target port\r\n const linkToConsider = this._selectedLink || links[0];\r\n const targetNode = linkToConsider.nodeA === node ? linkToConsider.nodeB : linkToConsider.nodeA;\r\n const targetPort = linkToConsider.nodeA === node ? linkToConsider.portB : linkToConsider.portA;\r\n\r\n // Start a new one\r\n this._candidateLink = new NodeLink(this, targetPort!, targetNode!);\r\n } else {\r\n this._candidateLink = new NodeLink(this, portElement, portElement.node);\r\n }\r\n this._candidateLinkedHasMoved = false;\r\n if (this.stateManager.enablePortCompatibilityHighlight) {\r\n this.stateManager.candidateSourcePortData = this._candidateLink!.portA.portData;\r\n }\r\n }\r\n return;\r\n }\r\n\r\n // Selection?\r\n if (evt.currentTarget === this._hostCanvas && this._multiKeyIsPressed) {\r\n this._selectionBox = this.props.stateManager.hostDocument.createElement(\"div\");\r\n this._selectionBox.classList.add(styles[\"selection-box\"]);\r\n this._selectionContainer.appendChild(this._selectionBox);\r\n\r\n const rootRect = this.canvasContainer.getBoundingClientRect();\r\n this._selectionStartX = evt.pageX - rootRect.left;\r\n this._selectionStartY = evt.pageY - rootRect.top;\r\n this._selectionBox.style.left = `${this._selectionStartX / this.zoom}px`;\r\n this._selectionBox.style.top = `${this._selectionStartY / this.zoom}px`;\r\n this._selectionBox.style.width = \"0px\";\r\n this._selectionBox.style.height = \"0px\";\r\n return;\r\n }\r\n\r\n // Frame?\r\n if (evt.currentTarget === this._hostCanvas && evt.shiftKey) {\r\n this._frameCandidate = this.props.stateManager.hostDocument.createElement(\"div\");\r\n this._frameCandidate.classList.add(commonStyles[\"frame-box\"]);\r\n this._frameContainer.appendChild(this._frameCandidate);\r\n\r\n const rootRect = this.canvasContainer.getBoundingClientRect();\r\n this._selectionStartX = evt.pageX - rootRect.left;\r\n this._selectionStartY = evt.pageY - rootRect.top;\r\n this._frameCandidate.style.left = `${this._selectionStartX / this.zoom}px`;\r\n this._frameCandidate.style.top = `${this._selectionStartY / this.zoom}px`;\r\n this._frameCandidate.style.width = \"0px\";\r\n this._frameCandidate.style.height = \"0px\";\r\n return;\r\n }\r\n\r\n this._mouseStartPointX = evt.clientX;\r\n this._mouseStartPointY = evt.clientY;\r\n this._lastx = this.x;\r\n this._lasty = this.y;\r\n }\r\n\r\n onUp(evt: React.PointerEvent) {\r\n if (this.stateManager.modalIsDisplayed) {\r\n return;\r\n }\r\n\r\n // Un select with no move click, 1 pixel tolerance\r\n if (!this._selectionBox && !this.selectedLink && !this._frameCandidate && Math.abs(this.x - this._lastx) < 2 && Math.abs(this.y - this._lasty) < 2) {\r\n this.props.stateManager.onSelectionChangedObservable.notifyObservers(null);\r\n }\r\n\r\n this._mouseStartPointX = null;\r\n this._mouseStartPointY = null;\r\n this._rootContainer.releasePointerCapture(evt.pointerId);\r\n this._oldY = -1;\r\n if (this._candidateLink) {\r\n if (this._candidateLinkedHasMoved) {\r\n this.processCandidatePort();\r\n this.props.stateManager.onCandidateLinkMoved.notifyObservers(null);\r\n } else {\r\n // is a click event on NodePort\r\n if (this._candidateLink.portA instanceof FrameNodePort) {\r\n //only on Frame Node Ports\r\n const port = this._candidateLink.portA;\r\n const frame = this.frames.find((frame: GraphFrame) => frame.id === port.parentFrameId);\r\n if (frame) {\r\n const data: FramePortData = { frame, port };\r\n this.props.stateManager.onSelectionChangedObservable.notifyObservers({ selection: data });\r\n }\r\n } else if (this._candidateLink.portA instanceof NodePort) {\r\n this.props.stateManager.onSelectionChangedObservable.notifyObservers({ selection: this._candidateLink.portA });\r\n }\r\n }\r\n this._candidateLink.dispose();\r\n this._candidateLink = null;\r\n this._candidatePort = null;\r\n this.stateManager.candidateSourcePortData = null;\r\n }\r\n\r\n if (this._selectionBox) {\r\n this._selectionBox.parentElement!.removeChild(this._selectionBox);\r\n this._selectionBox = null;\r\n }\r\n\r\n if (this._frameCandidate) {\r\n const newFrame = new GraphFrame(this._frameCandidate, this);\r\n this._frames.push(newFrame);\r\n\r\n this._frameCandidate.parentElement!.removeChild(this._frameCandidate);\r\n this._frameCandidate = null;\r\n\r\n this.props.stateManager.onSelectionChangedObservable.notifyObservers({ selection: newFrame });\r\n }\r\n }\r\n\r\n onWheel(evt: React.WheelEvent) {\r\n if (this.stateManager.modalIsDisplayed) {\r\n return;\r\n }\r\n\r\n const delta = evt.deltaY < 0 ? 0.1 : -0.1;\r\n\r\n const oldZoom = this.zoom;\r\n this.zoom = Math.min(Math.max(this._minZoom, this.zoom + delta * this.zoom), this._maxZoom);\r\n\r\n const boundingRect = evt.currentTarget.getBoundingClientRect();\r\n const clientWidth = boundingRect.width;\r\n const clientHeight = boundingRect.height;\r\n const widthDiff = clientWidth * this.zoom - clientWidth * oldZoom;\r\n const heightDiff = clientHeight * this.zoom - clientHeight * oldZoom;\r\n const clientX = evt.clientX - boundingRect.left;\r\n const clientY = evt.clientY - boundingRect.top;\r\n\r\n const xFactor = (clientX - this.x) / oldZoom / clientWidth;\r\n const yFactor = (clientY - this.y) / oldZoom / clientHeight;\r\n\r\n this.x = this.x - widthDiff * xFactor;\r\n this.y = this.y - heightDiff * yFactor;\r\n }\r\n\r\n zoomToFit() {\r\n // Get negative offset\r\n let minX = 0;\r\n let minY = 0;\r\n this._nodes.forEach((node) => {\r\n if (this._frames.some((f) => f.nodes.indexOf(node) !== -1)) {\r\n return;\r\n }\r\n\r\n if (node.x < minX) {\r\n minX = node.x;\r\n }\r\n if (node.y < minY) {\r\n minY = node.y;\r\n }\r\n });\r\n\r\n this._frames.forEach((frame) => {\r\n if (frame.x < minX) {\r\n minX = frame.x;\r\n }\r\n if (frame.y < minY) {\r\n minY = frame.y;\r\n }\r\n });\r\n\r\n // Restore to 0\r\n this._frames.forEach((frame) => {\r\n frame.x += -minX;\r\n frame.y += -minY;\r\n frame.cleanAccumulation();\r\n });\r\n\r\n this._nodes.forEach((node) => {\r\n node.x += -minX;\r\n node.y += -minY;\r\n node.cleanAccumulation();\r\n });\r\n\r\n // Get correct zoom\r\n const xFactor = this._rootContainer.clientWidth / this._rootContainer.scrollWidth;\r\n const yFactor = this._rootContainer.clientHeight / this._rootContainer.scrollHeight;\r\n const zoomFactor = xFactor < yFactor ? xFactor : yFactor;\r\n\r\n this.zoom = zoomFactor;\r\n this.x = 0;\r\n this.y = 0;\r\n }\r\n\r\n /**\r\n * Pans the canvas so the given node is visible and roughly centered.\r\n * @param node - the node to bring into view\r\n */\r\n zoomToNode(node: GraphNode) {\r\n const containerWidth = this._rootContainer.clientWidth;\r\n const containerHeight = this._rootContainer.clientHeight;\r\n this.x = -node.x + containerWidth / (2 * this.zoom) - 100;\r\n this.y = -node.y + containerHeight / (2 * this.zoom) - 20;\r\n }\r\n\r\n processCandidatePort() {\r\n let pointB = this._candidateLink!.portA.portData;\r\n let nodeB = this._candidateLink!.portA.node;\r\n let pointA: IPortData;\r\n let nodeA: GraphNode;\r\n\r\n if (this._candidatePort) {\r\n pointA = this._candidatePort.portData;\r\n nodeA = this._candidatePort.node;\r\n } else {\r\n if (pointB.direction === PortDataDirection.Output) {\r\n return;\r\n }\r\n\r\n // No destination so let's spin a new input node\r\n const newDefaultInput = this.props.stateManager.createDefaultInputData(this.props.stateManager.data, this._candidateLink!.portA.portData, this);\r\n if (!newDefaultInput) {\r\n return;\r\n }\r\n const pointName = newDefaultInput.name;\r\n const emittedNodeData = newDefaultInput.data;\r\n\r\n pointA = emittedNodeData.getPortByName(pointName)!;\r\n if (!pointA) {\r\n for (let i = 0; i < emittedNodeData.outputs.length; i++) {\r\n const output = emittedNodeData.outputs[i];\r\n const outputData = output.data;\r\n const outputBlockType = outputData._blockType;\r\n if (outputBlockType === pointB.data._blockType) {\r\n pointA = output;\r\n break;\r\n }\r\n }\r\n if (!pointA) {\r\n return;\r\n }\r\n }\r\n if (!emittedNodeData.isInput) {\r\n nodeA = this.props.onEmitNewNode(emittedNodeData);\r\n } else {\r\n nodeA = this.appendNode(emittedNodeData as any);\r\n }\r\n nodeA.x = this._dropPointX - 200;\r\n nodeA.y = this._dropPointY - 50;\r\n\r\n const x = nodeA.x - 250;\r\n let y = nodeA.y;\r\n\r\n emittedNodeData.inputs.forEach((portData: IPortData) => {\r\n if (portData.connectedPort) {\r\n const existingNodes = this.nodes.filter((n) => {\r\n return n.content.data === portData.connectedPort?.ownerData;\r\n });\r\n const connectedNode = existingNodes[0];\r\n\r\n if (connectedNode.x === 0 && connectedNode.y === 0) {\r\n connectedNode.x = x;\r\n connectedNode.y = y;\r\n connectedNode.cleanAccumulation();\r\n y += 80;\r\n }\r\n }\r\n });\r\n }\r\n\r\n if (pointA.direction === PortDataDirection.Input) {\r\n const temp = pointB;\r\n pointB = pointA;\r\n pointA = temp;\r\n\r\n const tempNode = nodeA;\r\n nodeA = nodeB;\r\n nodeB = tempNode;\r\n }\r\n\r\n if (pointB.connectedPort === pointA) {\r\n return;\r\n }\r\n\r\n if (pointB === pointA) {\r\n return;\r\n }\r\n\r\n if (pointB.direction === pointA.direction) {\r\n return;\r\n }\r\n\r\n if (pointB.ownerData === pointA.ownerData) {\r\n return;\r\n }\r\n\r\n // Check compatibility\r\n let compatibilityState = pointA.checkCompatibilityState(pointB);\r\n if ((pointA.needDualDirectionValidation || pointB.needDualDirectionValidation) && !compatibilityState) {\r\n compatibilityState = pointB.checkCompatibilityState(pointA);\r\n }\r\n\r\n const message = pointA.getCompatibilityIssueMessage(compatibilityState, nodeB, pointB);\r\n\r\n if (message) {\r\n this.props.stateManager.onErrorMessageDialogRequiredObservable.notifyObservers(message);\r\n return;\r\n }\r\n\r\n let linksToNotifyForDispose: Nullable<NodeLink[]> = null;\r\n\r\n if (pointB.isConnected) {\r\n const links = nodeB.getLinksForPortData(pointB);\r\n\r\n linksToNotifyForDispose = links.slice();\r\n\r\n links.forEach((link) => {\r\n link.dispose(false);\r\n });\r\n }\r\n\r\n if (pointB.ownerData.inputsAreExclusive) {\r\n // Disconnect all inputs if node has exclusive inputs\r\n pointB.ownerData.inputs.forEach((i: any) => {\r\n const links = nodeB.getLinksForPortData(i);\r\n\r\n if (!linksToNotifyForDispose) {\r\n linksToNotifyForDispose = links.slice();\r\n } else {\r\n linksToNotifyForDispose.push(...links.slice());\r\n }\r\n\r\n links.forEach((link) => {\r\n link.dispose(false);\r\n });\r\n });\r\n }\r\n\r\n this.connectNodes(nodeA, pointA, nodeB, pointB);\r\n\r\n linksToNotifyForDispose?.forEach((link) => {\r\n link.onDisposedObservable.notifyObservers(link);\r\n link.onDisposedObservable.clear();\r\n });\r\n\r\n if (!nodeB.content.isConnectedToOutput || nodeB.content.isConnectedToOutput()) {\r\n this.props.stateManager.onRebuildRequiredObservable.notifyObservers();\r\n }\r\n }\r\n\r\n connectNodes(nodeA: GraphNode, pointA: IPortData, nodeB: GraphNode, pointB: IPortData) {\r\n pointA.connectTo(pointB);\r\n this.connectPorts(pointA, pointB);\r\n\r\n // Need to potentially propagate the type of pointA to other ports of nodes connected to owner of pointB\r\n // We also need to check if we want to display the promotion warning\r\n\r\n const visitedNodes = new Set<GraphNode>([nodeA]);\r\n const visitedLinks = new Set<NodeLink>([nodeB.links[nodeB.links.length - 1]]);\r\n\r\n RefreshNode(nodeB, visitedNodes, visitedLinks, this);\r\n }\r\n\r\n drop(newNode: GraphNode, targetX: number, targetY: number, offsetX: number, offsetY: number) {\r\n let x = targetX - this.x - offsetX * this.zoom;\r\n let y = targetY - this.y - offsetY * this.zoom;\r\n\r\n newNode.x = x / this.zoom;\r\n newNode.y = y / this.zoom;\r\n newNode.cleanAccumulation();\r\n\r\n x -= GraphCanvasComponent.NodeWidth + 200;\r\n\r\n newNode.content.inputs.forEach((portData) => {\r\n if (portData.connectedPort) {\r\n const existingNodes = this.nodes.filter((n) => {\r\n return n.content.data === portData.connectedPort?.ownerData;\r\n });\r\n const connectedNode = existingNodes[0];\r\n\r\n if (connectedNode.x === 0 && connectedNode.y === 0) {\r\n connectedNode.x = x / this.zoom;\r\n connectedNode.y = y / this.zoom;\r\n connectedNode.cleanAccumulation();\r\n y += 80;\r\n }\r\n }\r\n });\r\n\r\n this.props.stateManager.onNewNodeCreatedObservable.notifyObservers(newNode);\r\n this.props.stateManager.onSelectionChangedObservable.notifyObservers(null);\r\n this.props.stateManager.onSelectionChangedObservable.notifyObservers({ selection: newNode });\r\n }\r\n\r\n processEditorData(editorData: IEditorData) {\r\n const frames = this._frames.splice(0);\r\n for (const frame of frames) {\r\n frame.dispose();\r\n }\r\n\r\n const notes = this._stickyNotes.splice(0);\r\n for (const note of notes) {\r\n note.element.parentElement?.removeChild(note.element);\r\n }\r\n\r\n this._frames = [];\r\n this._stickyNotes = [];\r\n this._selectedStickyNotes = [];\r\n this.x = editorData.x || 0;\r\n this.y = editorData.y || 0;\r\n this.zoom = editorData.zoom || 1;\r\n\r\n // Frames\r\n if (editorData.frames) {\r\n for (const frameData of editorData.frames) {\r\n const frame = GraphFrame.Parse(frameData, this, editorData.map);\r\n this._frames.push(frame);\r\n }\r\n }\r\n\r\n // Sticky notes\r\n if (this.props.enableStickyNotes && editorData.stickyNotes) {\r\n for (const noteData of editorData.stickyNotes) {\r\n const note = GraphStickyNote.Parse(noteData, this);\r\n this._stickyNotes.push(note);\r\n }\r\n }\r\n }\r\n\r\n reOrganize(editorData: Nullable<IEditorData> = null, isImportingAFrame = false) {\r\n if (!editorData || !editorData.locations) {\r\n this.distributeGraph();\r\n } else {\r\n // Locations\r\n for (const location of editorData.locations) {\r\n for (const node of this.nodes) {\r\n const data = node.content.data;\r\n if (data && data.uniqueId === location.blockId) {\r\n node.x = location.x;\r\n node.y = location.y;\r\n if (location.isCollapsed) {\r\n node.collapse();\r\n }\r\n node.cleanAccumulation();\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (!isImportingAFrame) {\r\n this.processEditorData(editorData);\r\n }\r\n }\r\n\r\n this._isLoading = false;\r\n for (const node of this.nodes) {\r\n node._refreshLinks();\r\n }\r\n }\r\n\r\n addFrame(frameData: IFrameData) {\r\n const frame = GraphFrame.Parse(frameData, this, this.props.stateManager.getEditorDataMap());\r\n this._frames.push(frame);\r\n this.stateManager.onSelectionChangedObservable.notifyObservers({ selection: frame });\r\n }\r\n\r\n /**\r\n * Create a new sticky note at the given canvas-space position.\r\n * @param x - x position in canvas space\r\n * @param y - y position in canvas space\r\n * @returns the created sticky note\r\n */\r\n addStickyNote(x: number, y: number): GraphStickyNote | null {\r\n if (!this.props.enableStickyNotes) {\r\n return null;\r\n }\r\n const note = new GraphStickyNote(this);\r\n note.x = x;\r\n note.y = y;\r\n this._stickyNotes.push(note);\r\n this.stateManager.onSelectionChangedObservable.notifyObservers({ selection: note });\r\n return note;\r\n }\r\n\r\n /**\r\n * Open the find-in-graph search bar, if enabled.\r\n */\r\n showSearch() {\r\n if (this.props.enableFindInGraph) {\r\n this._searchRef.current?.show();\r\n }\r\n }\r\n\r\n override render() {\r\n return (\r\n <div\r\n ref={this._hostCanvasRef}\r\n id=\"graph-canvas\"\r\n className={styles[\"graph-canvas\"]}\r\n onWheel={(evt) => this.onWheel(evt)}\r\n onPointerMove={(evt) => this.onMove(evt)}\r\n onPointerDown={(evt) => this.onDown(evt)}\r\n onPointerUp={(evt) => this.onUp(evt)}\r\n >\r\n <div id=\"graph-container\" className={styles[\"graph-container\"]} ref={this._rootContainerRef}>\r\n <div id=\"graph-canvas-container\" className={styles[\"graph-canvas-container\"]} ref={this._graphCanvasRef}></div>\r\n <div id=\"frame-container\" className={styles[\"frame-container\"]} ref={this._frameContainerRef}></div>\r\n <svg id=\"graph-svg-container\" className={styles[\"graph-svg-container\"]} ref={this._svgCanvasRef}></svg>\r\n <div id=\"selection-container\" className={styles[\"selection-container\"]} ref={this._selectionContainerRef}></div>\r\n </div>\r\n <SearchBoxComponent stateManager={this.stateManager} />\r\n {this.props.enableMinimap && <GraphMinimapComponent canvas={this} />}\r\n {this.props.enableFindInGraph && <GraphSearchComponent ref={this._searchRef} canvas={this} />}\r\n </div>\r\n );\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"graphCanvas.js","sourceRoot":"","sources":["../../../../dev/sharedUiComponents/src/nodeGraphSystem/graphCanvas.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from \"react\";\r\nimport { GraphNode } from \"./graphNode\";\r\nimport * as dagre from \"dagre\";\r\nimport { type Nullable } from \"core/types\";\r\nimport { NodeLink } from \"./nodeLink\";\r\nimport { NodePort } from \"./nodePort\";\r\nimport { Vector2 } from \"core/Maths/math.vector\";\r\nimport { DataStorage } from \"core/Misc/dataStorage\";\r\nimport { GraphFrame } from \"./graphFrame\";\r\nimport { GraphStickyNote } from \"./graphStickyNote\";\r\nimport { type IEditorData, type IFrameData } from \"./interfaces/nodeLocationInfo\";\r\nimport { FrameNodePort } from \"./frameNodePort\";\r\nimport { type StateManager } from \"./stateManager\";\r\nimport { type FramePortData } from \"./types/framePortData\";\r\nimport { type INodeData } from \"./interfaces/nodeData\";\r\nimport { type IPortData, PortDataDirection } from \"./interfaces/portData\";\r\nimport { type INodeContainer } from \"./interfaces/nodeContainer\";\r\nimport * as styles from \"./graphCanvas.module.scss\";\r\nimport * as commonStyles from \"./common.module.scss\";\r\n\r\nimport { TypeLedger } from \"./typeLedger\";\r\nimport { RefreshNode } from \"./tools\";\r\nimport { SearchBoxComponent } from \"./searchBox\";\r\nimport { GraphMinimapComponent } from \"./graphMinimap\";\r\nimport { GraphSearchComponent } from \"./graphSearch\";\r\n\r\nexport interface IGraphCanvasComponentProps {\r\n stateManager: StateManager;\r\n onEmitNewNode: (nodeData: INodeData) => GraphNode;\r\n /** When true, a minimap overlay is shown during zoom/pan. Default false. */\r\n enableMinimap?: boolean;\r\n /** When true, sticky note annotations can be created and managed on the canvas. Default false. */\r\n enableStickyNotes?: boolean;\r\n /** When true, Ctrl+F opens a find-in-graph search bar. Default false. */\r\n enableFindInGraph?: boolean;\r\n /** When true, ports glow red during drag when hovering over an incompatible target. Default false. */\r\n enablePortCompatibilityHighlight?: boolean;\r\n /** When true, nodes can display validation and breakpoint badge overlays. Default false. */\r\n enableNodeBadges?: boolean;\r\n}\r\n\r\nexport class GraphCanvasComponent extends React.Component<IGraphCanvasComponentProps> implements INodeContainer {\r\n public static readonly NodeWidth = 100;\r\n private readonly _minZoom = 0.1;\r\n private readonly _maxZoom = 4;\r\n\r\n private _hostCanvasRef = React.createRef<HTMLDivElement>();\r\n private _hostCanvas: HTMLDivElement;\r\n private _graphCanvasRef = React.createRef<HTMLDivElement>();\r\n private _graphCanvas: HTMLDivElement;\r\n private _selectionContainerRef = React.createRef<HTMLDivElement>();\r\n private _selectionContainer: HTMLDivElement;\r\n private _frameContainerRef = React.createRef<HTMLDivElement>();\r\n private _frameContainer: HTMLDivElement;\r\n private _svgCanvasRef = React.createRef<SVGSVGElement>();\r\n private _svgCanvas: HTMLElement;\r\n private _rootContainerRef = React.createRef<HTMLDivElement>();\r\n private _rootContainer: HTMLDivElement;\r\n private _nodes: GraphNode[] = [];\r\n private _links: NodeLink[] = [];\r\n private _mouseStartPointX: Nullable<number> = null;\r\n private _mouseStartPointY: Nullable<number> = null;\r\n private _dropPointX = 0;\r\n private _dropPointY = 0;\r\n private _selectionStartX = 0;\r\n private _selectionStartY = 0;\r\n private _candidateLinkedHasMoved = false;\r\n private _x = 0;\r\n private _y = 0;\r\n private _lastx = 0;\r\n private _lasty = 0;\r\n private _zoom = 1;\r\n private _selectedNodes: GraphNode[] = [];\r\n private _selectedLink: Nullable<NodeLink> = null;\r\n private _selectedPort: Nullable<NodePort> = null;\r\n private _candidateLink: Nullable<NodeLink> = null;\r\n private _candidatePort: Nullable<NodePort | FrameNodePort> = null;\r\n private _gridSize = 20;\r\n private _selectionBox: Nullable<HTMLDivElement> = null;\r\n private _selectedFrames: GraphFrame[] = [];\r\n private _frameCandidate: Nullable<HTMLDivElement> = null;\r\n private _frames: GraphFrame[] = [];\r\n private _stickyNotes: GraphStickyNote[] = [];\r\n private _selectedStickyNotes: GraphStickyNote[] = [];\r\n private _nodeDataContentList = new Array<any>();\r\n\r\n private _altKeyIsPressed = false;\r\n private _shiftKeyIsPressed = false;\r\n private _multiKeyIsPressed = false;\r\n private _oldY = -1;\r\n\r\n private _keyUpHandler: (() => void) | null = null;\r\n private _keyDownHandler: ((evt: KeyboardEvent) => void) | null = null;\r\n private _blurHandler: (() => void) | null = null;\r\n\r\n public _frameIsMoving = false;\r\n public _isLoading = false;\r\n public _targetLinkCandidate: Nullable<NodeLink> = null;\r\n\r\n private _isCopyingOrPasting: boolean = false;\r\n private _copiedNodes: GraphNode[] = [];\r\n private _copiedFrames: GraphFrame[] = [];\r\n private _searchRef = React.createRef<GraphSearchComponent>();\r\n\r\n public get gridSize() {\r\n return this._gridSize;\r\n }\r\n\r\n public set gridSize(value: number) {\r\n this._gridSize = value;\r\n\r\n this.updateTransform();\r\n }\r\n\r\n public get stateManager() {\r\n return this.props.stateManager;\r\n }\r\n\r\n public get nodes() {\r\n return this._nodes;\r\n }\r\n\r\n public get links() {\r\n return this._links;\r\n }\r\n\r\n public get frames() {\r\n return this._frames;\r\n }\r\n\r\n public get zoom() {\r\n return this._zoom;\r\n }\r\n\r\n public set zoom(value: number) {\r\n if (this._zoom === value) {\r\n return;\r\n }\r\n\r\n this._zoom = value;\r\n\r\n this.updateTransform();\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 this._x = value;\r\n\r\n this.updateTransform();\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 this._y = value;\r\n\r\n this.updateTransform();\r\n }\r\n\r\n public get selectedNodes() {\r\n return this._selectedNodes;\r\n }\r\n\r\n public get selectedLink() {\r\n return this._selectedLink;\r\n }\r\n public get selectedFrames() {\r\n return this._selectedFrames;\r\n }\r\n\r\n public get stickyNotes() {\r\n return this._stickyNotes;\r\n }\r\n\r\n public get selectedStickyNotes() {\r\n return this._selectedStickyNotes;\r\n }\r\n\r\n public get selectedPort() {\r\n return this._selectedPort;\r\n }\r\n\r\n public get canvasContainer() {\r\n return this._graphCanvas;\r\n }\r\n\r\n public get hostCanvas() {\r\n return this._hostCanvas;\r\n }\r\n\r\n public get svgCanvas() {\r\n return this._svgCanvas;\r\n }\r\n\r\n public get selectionContainer() {\r\n return this._selectionContainer;\r\n }\r\n\r\n public get frameContainer() {\r\n return this._frameContainer;\r\n }\r\n\r\n // There is a selection conflict between nodes and frames if any selected node is inside any selected frame\r\n private _selectedFrameAndNodesConflict(frameSelection: GraphFrame[], nodeSelection: GraphNode[]) {\r\n for (const frame of frameSelection) {\r\n for (const node of nodeSelection) {\r\n if (frame.nodes.includes(node)) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n private _deselectAllStickyNotes() {\r\n for (const note of this._selectedStickyNotes) {\r\n note.setIsSelected(false);\r\n }\r\n this._selectedStickyNotes = [];\r\n }\r\n\r\n constructor(props: IGraphCanvasComponentProps) {\r\n super(props);\r\n\r\n props.stateManager.enablePortCompatibilityHighlight = !!props.enablePortCompatibilityHighlight;\r\n props.stateManager.enableNodeBadges = !!props.enableNodeBadges;\r\n\r\n props.stateManager.onSelectionChangedObservable.add((options) => {\r\n const { selection, forceKeepSelection, marqueeSelection = false } = options || {};\r\n if (!selection) {\r\n this._selectedNodes = [];\r\n this._selectedLink = null;\r\n this._selectedFrames = [];\r\n this._selectedPort = null;\r\n for (const note of this._selectedStickyNotes) {\r\n note.setIsSelected(false);\r\n }\r\n this._selectedStickyNotes = [];\r\n } else {\r\n if (selection instanceof NodeLink) {\r\n this._selectedNodes = [];\r\n this._selectedFrames = [];\r\n this._selectedLink = selection;\r\n this._selectedPort = null;\r\n this._deselectAllStickyNotes();\r\n } else if (selection instanceof NodePort) {\r\n this._selectedNodes = [];\r\n this._selectedFrames = [];\r\n this._selectedLink = null;\r\n this._selectedPort = selection;\r\n this._deselectAllStickyNotes();\r\n } else if (selection instanceof FrameNodePort) {\r\n this._selectedNodes = [];\r\n this._selectedFrames = [];\r\n this._selectedLink = null;\r\n this._selectedPort = selection;\r\n this._deselectAllStickyNotes();\r\n } else if (this.props.enableStickyNotes && selection instanceof GraphStickyNote) {\r\n if (this._multiKeyIsPressed || this._shiftKeyIsPressed || forceKeepSelection) {\r\n if (!this._selectedStickyNotes.includes(selection)) {\r\n this._selectedStickyNotes.push(selection);\r\n }\r\n } else {\r\n this._selectedNodes = [];\r\n this._selectedFrames = [];\r\n this._selectedStickyNotes = [selection];\r\n this._selectedLink = null;\r\n this._selectedPort = null;\r\n }\r\n selection.setIsSelected(true);\r\n } else if (selection instanceof GraphNode || selection instanceof GraphFrame) {\r\n // If in marquee selection mode, always prioritize selecting nodes. Otherwise, always prioritize selecting the type of\r\n // the selected element\r\n if (marqueeSelection) {\r\n if (selection instanceof GraphFrame && !this._selectedFrames.includes(selection)) {\r\n this._selectedFrames.push(selection);\r\n } else if (selection instanceof GraphNode && !this._selectedNodes.includes(selection)) {\r\n this._selectedNodes.push(selection);\r\n }\r\n if (this._selectedFrameAndNodesConflict(this.selectedFrames, this.selectedNodes)) {\r\n const framesToRemove = new Set();\r\n for (const selectedNode of this._selectedNodes) {\r\n for (const selectedFrame of this._selectedFrames) {\r\n if (selectedFrame.nodes.includes(selectedNode)) {\r\n framesToRemove.add(selectedFrame);\r\n }\r\n }\r\n }\r\n this._selectedFrames = this._selectedFrames.filter((f) => !framesToRemove.has(f));\r\n }\r\n } else {\r\n if (selection instanceof GraphFrame) {\r\n if (this._multiKeyIsPressed || this._shiftKeyIsPressed || forceKeepSelection) {\r\n if (!this._selectedFrameAndNodesConflict([selection], this._selectedNodes) && !this._selectedFrames.includes(selection)) {\r\n this._selectedFrames.push(selection);\r\n }\r\n } else {\r\n this._selectedFrames = [selection];\r\n this._selectedNodes = [];\r\n this._selectedLink = null;\r\n this._selectedPort = null;\r\n this._deselectAllStickyNotes();\r\n }\r\n } else if (selection instanceof GraphNode) {\r\n if (this._multiKeyIsPressed || this._shiftKeyIsPressed || forceKeepSelection) {\r\n if (!this._selectedFrameAndNodesConflict(this._selectedFrames, [selection]) && !this._selectedNodes.includes(selection)) {\r\n this._selectedNodes.push(selection);\r\n }\r\n } else {\r\n this._selectedFrames = [];\r\n this._selectedNodes = [selection];\r\n this._selectedLink = null;\r\n this._selectedPort = null;\r\n this._deselectAllStickyNotes();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n });\r\n\r\n props.stateManager.onCandidatePortSelectedObservable.add((port) => {\r\n this._candidatePort = port;\r\n });\r\n\r\n props.stateManager.onGridSizeChanged.add(() => {\r\n this.gridSize = DataStorage.ReadNumber(\"GridSize\", 20);\r\n });\r\n\r\n this._keyUpHandler = () => this.onKeyUp();\r\n this._keyDownHandler = (evt) => {\r\n this._altKeyIsPressed = evt.altKey;\r\n this._shiftKeyIsPressed = evt.shiftKey;\r\n this._multiKeyIsPressed = evt.ctrlKey || evt.metaKey;\r\n };\r\n this._blurHandler = () => {\r\n this._altKeyIsPressed = false;\r\n this._shiftKeyIsPressed = false;\r\n this._multiKeyIsPressed = false;\r\n };\r\n\r\n this.props.stateManager.hostDocument.addEventListener(\"keyup\", this._keyUpHandler, false);\r\n this.props.stateManager.hostDocument.addEventListener(\"keydown\", this._keyDownHandler, false);\r\n this.props.stateManager.hostDocument.defaultView!.addEventListener(\"blur\", this._blurHandler, false);\r\n\r\n // Store additional data to serialization object\r\n this.props.stateManager.storeEditorData = (editorData, graphFrame) => {\r\n editorData.frames = [];\r\n if (graphFrame) {\r\n editorData.frames.push(graphFrame.serialize(false));\r\n } else {\r\n editorData.x = this.x;\r\n editorData.y = this.y;\r\n editorData.zoom = this.zoom;\r\n for (const frame of this._frames) {\r\n editorData.frames.push(frame.serialize(true));\r\n }\r\n if (this.props.enableStickyNotes) {\r\n editorData.stickyNotes = [];\r\n for (const note of this._stickyNotes) {\r\n editorData.stickyNotes.push(note.serialize());\r\n }\r\n }\r\n }\r\n };\r\n }\r\n\r\n populateConnectedEntriesBeforeRemoval(item: GraphNode, items: GraphNode[], inputs: Nullable<IPortData>[], outputs: Nullable<IPortData>[]) {\r\n inputs.push(\r\n ...item.content.inputs.filter((i) => i.isConnected && items.every((selected) => selected.content.data !== i.connectedPort?.ownerData)).map((i) => i.connectedPort)\r\n );\r\n\r\n outputs.push(\r\n ...item.content.outputs\r\n .filter((i) => i.isConnected)\r\n .map((i) => i.endpoints)\r\n .flat()\r\n .filter((i) => i && items.every((selected) => selected.content.data !== i.ownerData))\r\n );\r\n }\r\n\r\n automaticRewire(inputs: Nullable<IPortData>[], outputs: Nullable<IPortData>[], firstOnly = false) {\r\n let oneConnectionFound = false;\r\n if (outputs.length && inputs.length) {\r\n inputs.forEach((input) => {\r\n if (oneConnectionFound) {\r\n return;\r\n }\r\n if (!input) {\r\n return;\r\n }\r\n const output = outputs[0];\r\n if (output && input.canConnectTo(output)) {\r\n const nodeInput = this.findNodeFromData(input.ownerData);\r\n const nodeOutput = this.findNodeFromData(output.ownerData);\r\n this.connectNodes(nodeInput, input, nodeOutput, output);\r\n outputs.shift();\r\n if (firstOnly) {\r\n oneConnectionFound = true;\r\n return;\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n smartAddOverLink(node: GraphNode, link: NodeLink) {\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 = link.nodeA;\r\n const rightNode = link.nodeB!;\r\n\r\n // Delete previous\r\n link.dispose();\r\n\r\n // Get the ports\r\n availableNodeInputs.push(...node.content.inputs.filter((i) => !i.isConnected));\r\n\r\n availableNodeOutputs.push(...node.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 // Reconnect\r\n this.automaticRewire(inputs, availableNodeInputs, true);\r\n this.automaticRewire(availableNodeOutputs, outputs, true);\r\n this.props.stateManager.onRebuildRequiredObservable.notifyObservers();\r\n }\r\n\r\n smartAddOverNode(node: GraphNode, source: GraphNode) {\r\n // Connect the ports\r\n const inputs: Nullable<IPortData>[] = [];\r\n const availableNodeInputs: Nullable<IPortData>[] = [];\r\n\r\n // Get the ports\r\n availableNodeInputs.push(...node.content.inputs.filter((i) => !i.isConnected));\r\n\r\n inputs.push(...source.content.outputs);\r\n\r\n // Reconnect\r\n this.automaticRewire(inputs, availableNodeInputs, true);\r\n this.props.stateManager.onRebuildRequiredObservable.notifyObservers();\r\n }\r\n\r\n deleteSelection(onRemove: (nodeData: INodeData) => void, autoReconnect = false) {\r\n // Delete\r\n const selectedItems = this.selectedNodes;\r\n const inputs: Nullable<IPortData>[] = [];\r\n const outputs: Nullable<IPortData>[] = [];\r\n let needRebuild = false;\r\n\r\n if (selectedItems.length > 0) {\r\n needRebuild = true;\r\n for (const selectedItem of selectedItems) {\r\n if (autoReconnect) {\r\n this.populateConnectedEntriesBeforeRemoval(selectedItem, selectedItems, inputs, outputs);\r\n }\r\n\r\n selectedItem.dispose();\r\n\r\n onRemove(selectedItem.content);\r\n this.removeDataFromCache(selectedItem.content.data);\r\n }\r\n }\r\n\r\n if (this.selectedLink) {\r\n needRebuild = true;\r\n this.selectedLink.dispose();\r\n\r\n if (this.selectedLink.nodeB) {\r\n RefreshNode(this.selectedLink.nodeB);\r\n }\r\n }\r\n\r\n if (this.selectedFrames.length) {\r\n needRebuild = true;\r\n for (const frame of this.selectedFrames) {\r\n if (frame.isCollapsed) {\r\n while (frame.nodes.length > 0) {\r\n onRemove(frame.nodes[0].content);\r\n this.removeDataFromCache(frame.nodes[0].content.data);\r\n frame.nodes[0].dispose();\r\n }\r\n frame.isCollapsed = false;\r\n } else {\r\n frame.nodes.forEach((node) => {\r\n node.enclosingFrameId = -1;\r\n });\r\n }\r\n frame.dispose();\r\n }\r\n }\r\n\r\n if (this.props.enableStickyNotes && this._selectedStickyNotes.length) {\r\n needRebuild = true;\r\n for (const note of this._selectedStickyNotes) {\r\n note.dispose();\r\n }\r\n this._selectedStickyNotes = [];\r\n }\r\n\r\n if (!needRebuild) {\r\n return;\r\n }\r\n\r\n // Reconnect if required\r\n this.automaticRewire(inputs, outputs);\r\n\r\n this.props.stateManager.onSelectionChangedObservable.notifyObservers(null);\r\n this.props.stateManager.onRebuildRequiredObservable.notifyObservers();\r\n }\r\n\r\n async handleKeyDownAsync(\r\n evt: KeyboardEvent,\r\n onRemove: (nodeData: INodeData) => void,\r\n mouseLocationX: number,\r\n mouseLocationY: number,\r\n dataGenerator: (nodeData: INodeData) => Promise<Nullable<GraphNode>>,\r\n rootElement: HTMLDivElement\r\n ) {\r\n if (this.stateManager.modalIsDisplayed) {\r\n return;\r\n }\r\n\r\n if (evt.code === \"Space\" && evt.target === this.props.stateManager.hostDocument.body) {\r\n this.stateManager.modalIsDisplayed = true;\r\n this.props.stateManager.onSearchBoxRequiredObservable.notifyObservers({ x: mouseLocationX, y: mouseLocationY });\r\n return;\r\n }\r\n if ((evt.keyCode === 46 || evt.keyCode === 8) && !this.props.stateManager.lockObject.lock) {\r\n this.deleteSelection(onRemove, evt.altKey);\r\n return;\r\n }\r\n\r\n if ((!evt.ctrlKey && !evt.metaKey) || this.props.stateManager.lockObject.lock) {\r\n return;\r\n }\r\n\r\n // Now we're doing copy or paste - ensure we only do one at a time since these operations are async\r\n if (this._isCopyingOrPasting) {\r\n return;\r\n }\r\n try {\r\n if (evt.key === \"c\" || evt.key === \"C\") {\r\n // Copy\r\n this._copiedNodes = [];\r\n this._copiedFrames = [];\r\n\r\n if (this.selectedFrames.length) {\r\n for (const frame of this.selectedFrames) {\r\n frame.serialize(true);\r\n this._copiedFrames.push(frame);\r\n }\r\n return;\r\n }\r\n\r\n const selectedItems = this.selectedNodes;\r\n if (!selectedItems.length) {\r\n return;\r\n }\r\n\r\n const selectedItem = selectedItems[0];\r\n\r\n if (!selectedItem.content.data) {\r\n return;\r\n }\r\n\r\n this._copiedNodes = selectedItems.slice(0);\r\n } else if (evt.key === \"v\" || evt.key === \"V\") {\r\n // Paste\r\n const zoomLevel = this.zoom;\r\n let currentY = (mouseLocationY - rootElement.offsetTop - this.y - 20) / zoomLevel;\r\n\r\n if (this._copiedFrames.length) {\r\n for (const frame of this._copiedFrames) {\r\n // New frame\r\n const newFrame = new GraphFrame(null, this, true);\r\n this.frames.push(newFrame);\r\n\r\n newFrame.width = frame.width;\r\n newFrame.height = frame.height;\r\n newFrame.width / 2;\r\n newFrame.name = frame.name;\r\n newFrame.color = frame.color;\r\n\r\n let currentX = (mouseLocationX - rootElement.offsetLeft - this.x) / zoomLevel;\r\n newFrame.x = currentX - newFrame.width / 2;\r\n newFrame.y = currentY;\r\n\r\n // Paste nodes\r\n if (frame.nodes.length) {\r\n currentX = newFrame.x + frame.nodes[0].x - frame.x;\r\n currentY = newFrame.y + frame.nodes[0].y - frame.y;\r\n\r\n this._frameIsMoving = true;\r\n // eslint-disable-next-line no-await-in-loop\r\n const newNodes = await this.pasteSelectionAsync(frame.nodes, currentX, currentY, dataGenerator);\r\n if (newNodes) {\r\n for (const node of newNodes) {\r\n newFrame.syncNode(node);\r\n }\r\n }\r\n this._frameIsMoving = false;\r\n }\r\n\r\n newFrame.adjustPorts();\r\n\r\n if (frame.isCollapsed) {\r\n newFrame.isCollapsed = true;\r\n }\r\n\r\n // Select\r\n this.props.stateManager.onSelectionChangedObservable.notifyObservers({ selection: newFrame, forceKeepSelection: true });\r\n return;\r\n }\r\n }\r\n\r\n if (!this._copiedNodes.length) {\r\n return;\r\n }\r\n\r\n const currentX = (mouseLocationX - rootElement.offsetLeft - this.x - GraphCanvasComponent.NodeWidth) / zoomLevel;\r\n await this.pasteSelectionAsync(this._copiedNodes, currentX, currentY, dataGenerator, true);\r\n }\r\n } finally {\r\n this._isCopyingOrPasting = false;\r\n }\r\n }\r\n\r\n async pasteSelectionAsync(\r\n copiedNodes: GraphNode[],\r\n currentX: number,\r\n currentY: number,\r\n dataGenerator: (nodeData: INodeData) => Promise<Nullable<GraphNode>>,\r\n selectNew = false\r\n ) {\r\n let originalNode: Nullable<GraphNode> = null;\r\n\r\n const newNodes: GraphNode[] = [];\r\n\r\n // Copy to prevent recursive side effects while creating nodes.\r\n copiedNodes = copiedNodes.slice();\r\n\r\n // Cancel selection\r\n this.props.stateManager.onSelectionChangedObservable.notifyObservers(null);\r\n\r\n // Create new nodes\r\n for (const node of copiedNodes) {\r\n const data = node.content.data;\r\n\r\n if (!data) {\r\n continue;\r\n }\r\n\r\n // eslint-disable-next-line no-await-in-loop\r\n const newNode = await dataGenerator(node.content);\r\n\r\n if (!newNode) {\r\n continue;\r\n }\r\n\r\n let x: number;\r\n let y: number;\r\n if (originalNode) {\r\n x = currentX + node.x - originalNode.x;\r\n y = currentY + node.y - originalNode.y;\r\n } else {\r\n originalNode = node;\r\n x = currentX;\r\n y = currentY;\r\n }\r\n\r\n newNode.x = x;\r\n newNode.y = y;\r\n newNode.cleanAccumulation();\r\n\r\n newNodes.push(newNode);\r\n\r\n this.props.stateManager.onNewNodeCreatedObservable.notifyObservers(newNode);\r\n\r\n if (selectNew) {\r\n this.props.stateManager.onSelectionChangedObservable.notifyObservers({ selection: newNode, forceKeepSelection: true });\r\n }\r\n }\r\n\r\n // Relink\r\n const done = new Array<boolean>(newNodes.length);\r\n for (let index = 0; index < newNodes.length; index++) {\r\n this.reconnectNewNodes(index, newNodes, copiedNodes, done);\r\n }\r\n\r\n this.props.stateManager.onRebuildRequiredObservable.notifyObservers();\r\n\r\n return newNodes;\r\n }\r\n\r\n reconnectNewNodes(nodeIndex: number, newNodes: GraphNode[], sourceNodes: GraphNode[], done: boolean[]) {\r\n if (done[nodeIndex]) {\r\n return;\r\n }\r\n\r\n const currentNode = newNodes[nodeIndex];\r\n const sourceNode = sourceNodes[nodeIndex];\r\n\r\n for (let inputIndex = 0; inputIndex < sourceNode.content.inputs.length; inputIndex++) {\r\n const sourceInput = sourceNode.content.inputs[inputIndex];\r\n const currentInput = currentNode.content.inputs[inputIndex];\r\n if (!sourceInput.isConnected) {\r\n continue;\r\n }\r\n const sourceContent = this.findNodeFromData(sourceInput.connectedPort!.ownerData).content;\r\n const activeNodes = sourceNodes.filter((s) => s.content === sourceContent);\r\n\r\n if (activeNodes.length > 0) {\r\n const activeNode = activeNodes[0];\r\n const indexInList = sourceNodes.indexOf(activeNode);\r\n\r\n // First make sure to connect the other one\r\n this.reconnectNewNodes(indexInList, newNodes, sourceNodes, done);\r\n\r\n // Then reconnect\r\n const outputIndex = sourceContent.outputs.indexOf(sourceInput.connectedPort!);\r\n const newOutput = newNodes[indexInList].content.data.outputs[outputIndex];\r\n\r\n newOutput.connectTo(currentInput.data);\r\n } else {\r\n // Connect with outside nodes\r\n sourceInput.connectedPort!.connectTo(currentInput);\r\n }\r\n\r\n this.connectPorts(currentInput.connectedPort!, currentInput);\r\n }\r\n\r\n currentNode.refresh();\r\n\r\n done[nodeIndex] = true;\r\n }\r\n\r\n public getCachedData(): any[] {\r\n return this._nodeDataContentList;\r\n }\r\n\r\n public removeDataFromCache(data: any) {\r\n const dataIndex = this._nodeDataContentList.indexOf(data);\r\n\r\n if (dataIndex > -1) {\r\n this._nodeDataContentList.splice(dataIndex, 1);\r\n }\r\n }\r\n\r\n public createNodeFromObject(nodeData: INodeData, onNodeCreated: (data: any) => void, recursion = true) {\r\n if (this._nodeDataContentList.indexOf(nodeData.data) !== -1) {\r\n // Links\r\n if (nodeData.inputs.length && recursion) {\r\n for (const input of nodeData.inputs) {\r\n if (input.isConnected) {\r\n this.connectPorts(input.connectedPort!, input);\r\n }\r\n }\r\n }\r\n return this.nodes.filter((n) => n.content.data === nodeData.data)[0];\r\n }\r\n\r\n onNodeCreated(nodeData.data);\r\n\r\n // Connections\r\n if (nodeData.inputs.length) {\r\n for (const input of nodeData.inputs) {\r\n if (input.connectedPort && recursion) {\r\n this.createNodeFromObject(TypeLedger.NodeDataBuilder(input.connectedPort.ownerData, this), onNodeCreated);\r\n }\r\n }\r\n }\r\n\r\n // Graph\r\n const node = this.appendNode(nodeData);\r\n\r\n // Links\r\n if (nodeData.inputs.length && recursion) {\r\n for (const input of nodeData.inputs) {\r\n if (input.isConnected) {\r\n this.connectPorts(input.connectedPort!, input);\r\n }\r\n }\r\n }\r\n\r\n return node;\r\n }\r\n\r\n public getGridPosition(position: number, useCeil = false) {\r\n const gridSize = this.gridSize;\r\n if (gridSize === 0) {\r\n return position;\r\n }\r\n if (useCeil) {\r\n return gridSize * Math.ceil(position / gridSize);\r\n }\r\n return gridSize * Math.floor(position / gridSize);\r\n }\r\n\r\n public getGridPositionCeil(position: number) {\r\n const gridSize = this.gridSize;\r\n if (gridSize === 0) {\r\n return position;\r\n }\r\n return gridSize * Math.ceil(position / gridSize);\r\n }\r\n\r\n updateTransform() {\r\n this._rootContainer.style.transform = `translate(${this._x}px, ${this._y}px) scale(${this._zoom})`;\r\n\r\n if (DataStorage.ReadBoolean(\"ShowGrid\", true)) {\r\n this._hostCanvas.style.backgroundSize = `${this._gridSize * this._zoom}px ${this._gridSize * this._zoom}px`;\r\n this._hostCanvas.style.backgroundPosition = `${this._x}px ${this._y}px`;\r\n } else {\r\n this._hostCanvas.style.backgroundSize = `0`;\r\n }\r\n }\r\n\r\n onKeyUp() {\r\n this._altKeyIsPressed = false;\r\n this._shiftKeyIsPressed = false;\r\n this._multiKeyIsPressed = false;\r\n this._oldY = -1;\r\n }\r\n\r\n findNodeFromData(data: any) {\r\n return this.nodes.filter((n) => n.content.data === data)[0];\r\n }\r\n\r\n reset() {\r\n this._nodeDataContentList = [];\r\n\r\n for (const node of this._nodes) {\r\n node.dispose();\r\n }\r\n\r\n const frames = this._frames.splice(0);\r\n for (const frame of frames) {\r\n frame.dispose();\r\n }\r\n\r\n const notes = this._stickyNotes.splice(0);\r\n for (const note of notes) {\r\n note.element.parentElement?.removeChild(note.element);\r\n }\r\n\r\n this._nodes = [];\r\n this._frames = [];\r\n this._stickyNotes = [];\r\n this._selectedStickyNotes = [];\r\n this._links = [];\r\n this._graphCanvas.innerHTML = \"\";\r\n this._svgCanvas.innerHTML = \"\";\r\n }\r\n\r\n connectPorts(pointA: IPortData, pointB: IPortData) {\r\n if (!pointA || !pointB) {\r\n return;\r\n }\r\n\r\n const ownerDataA = pointA.ownerData;\r\n const ownerDataB = pointB.ownerData;\r\n const nodeA = this.findNodeFromData(ownerDataA);\r\n const nodeB = this.findNodeFromData(ownerDataB);\r\n\r\n if (!nodeA || !nodeB) {\r\n return;\r\n }\r\n\r\n const portA = nodeA.getPortForPortData(pointA);\r\n const portB = nodeB.getPortForPortData(pointB);\r\n\r\n if (!portA || !portB) {\r\n return;\r\n }\r\n\r\n for (const currentLink of this._links) {\r\n if (currentLink.portA === portA && currentLink.portB === portB) {\r\n return;\r\n }\r\n if (currentLink.portA === portB && currentLink.portB === portA) {\r\n return;\r\n }\r\n }\r\n\r\n const link = new NodeLink(this, portA, nodeA, portB, nodeB);\r\n this._links.push(link);\r\n\r\n nodeA.links.push(link);\r\n nodeB.links.push(link);\r\n }\r\n\r\n removeLink(link: NodeLink) {\r\n const index = this._links.indexOf(link);\r\n\r\n if (index > -1) {\r\n this._links.splice(index, 1);\r\n }\r\n\r\n link.dispose();\r\n }\r\n\r\n appendNode(nodeData: INodeData) {\r\n const newNode = new GraphNode(nodeData, this.props.stateManager);\r\n\r\n newNode.appendVisual(this._graphCanvas, this);\r\n newNode.addClassToVisual(nodeData.getClassName());\r\n\r\n this._nodes.push(newNode);\r\n this._nodeDataContentList.push(nodeData.data);\r\n\r\n return newNode;\r\n }\r\n\r\n distributeGraph() {\r\n this.x = 0;\r\n this.y = 0;\r\n this.zoom = 1;\r\n\r\n const graph = new dagre.graphlib.Graph();\r\n graph.setGraph({});\r\n graph.setDefaultEdgeLabel(() => ({}));\r\n graph.graph().rankdir = \"LR\";\r\n\r\n // Build dagre graph\r\n this._nodes.forEach((node) => {\r\n if (this._frames.some((f) => f.nodes.indexOf(node) !== -1)) {\r\n return;\r\n }\r\n\r\n graph.setNode(node.id.toString(), { id: node.id, type: \"node\", width: node.width, height: node.height });\r\n });\r\n\r\n this._frames.forEach((frame) => {\r\n graph.setNode(frame.id.toString(), { id: frame.id, type: \"frame\", width: frame.element.clientWidth, height: frame.element.clientHeight });\r\n });\r\n\r\n this._nodes.forEach((node) => {\r\n node.content.outputs.forEach((output) => {\r\n if (!output.hasEndpoints) {\r\n return;\r\n }\r\n\r\n output.endpoints!.forEach((endpoint) => {\r\n const sourceFrames = this._frames.filter((f) => f.nodes.indexOf(node) !== -1);\r\n const targetNode = this._nodes.find((n) => n.content.data === endpoint.ownerData);\r\n const targetFrames = this._frames.filter((f) => f.nodes.some((n) => n.content.data === endpoint.ownerData));\r\n\r\n const sourceId = sourceFrames.length > 0 ? sourceFrames[0].id : node.id;\r\n const targetId = targetFrames.length > 0 ? targetFrames[0].id : targetNode ? targetNode.id : endpoint.ownerData.uniqueId;\r\n\r\n graph.setEdge(sourceId.toString(), targetId.toString());\r\n });\r\n });\r\n });\r\n\r\n // Distribute\r\n dagre.layout(graph);\r\n\r\n // Update graph\r\n const dagreNodes = graph.nodes().map((node) => graph.node(node));\r\n dagreNodes.forEach((dagreNode: any) => {\r\n if (!dagreNode) {\r\n return;\r\n }\r\n if (dagreNode.type === \"node\") {\r\n for (const node of this._nodes) {\r\n if (node.id === dagreNode.id) {\r\n node.x = dagreNode.x - dagreNode.width / 2;\r\n node.y = dagreNode.y - dagreNode.height / 2;\r\n node.cleanAccumulation();\r\n return;\r\n }\r\n }\r\n return;\r\n }\r\n\r\n for (const frame of this._frames) {\r\n if (frame.id === dagreNode.id) {\r\n this._frameIsMoving = true;\r\n frame.move(dagreNode.x - dagreNode.width / 2, dagreNode.y - dagreNode.height / 2, false);\r\n frame.cleanAccumulation();\r\n this._frameIsMoving = false;\r\n return;\r\n }\r\n }\r\n });\r\n }\r\n\r\n override componentDidMount() {\r\n this._hostCanvas = this._hostCanvasRef.current!;\r\n this._rootContainer = this._rootContainerRef.current!;\r\n this._graphCanvas = this._graphCanvasRef.current!;\r\n this._svgCanvas = this._svgCanvasRef.current! as unknown as HTMLElement;\r\n this._selectionContainer = this._selectionContainerRef.current!;\r\n this._frameContainer = this._frameContainerRef.current!;\r\n\r\n this.gridSize = DataStorage.ReadNumber(\"GridSize\", 20);\r\n this.updateTransform();\r\n }\r\n\r\n override componentWillUnmount() {\r\n const doc = this.props.stateManager.hostDocument;\r\n if (this._keyUpHandler) {\r\n doc.removeEventListener(\"keyup\", this._keyUpHandler);\r\n }\r\n if (this._keyDownHandler) {\r\n doc.removeEventListener(\"keydown\", this._keyDownHandler);\r\n }\r\n if (this._blurHandler) {\r\n doc.defaultView?.removeEventListener(\"blur\", this._blurHandler);\r\n }\r\n }\r\n\r\n onMove(evt: React.PointerEvent) {\r\n if (this.stateManager.modalIsDisplayed) {\r\n return;\r\n }\r\n\r\n // Selection box\r\n if (this._selectionBox) {\r\n const rootRect = this.canvasContainer.getBoundingClientRect();\r\n\r\n const localX = evt.pageX - rootRect.left;\r\n const localY = evt.pageY - rootRect.top;\r\n\r\n if (localX > this._selectionStartX) {\r\n this._selectionBox.style.left = `${this._selectionStartX / this.zoom}px`;\r\n this._selectionBox.style.width = `${(localX - this._selectionStartX) / this.zoom}px`;\r\n } else {\r\n this._selectionBox.style.left = `${localX / this.zoom}px`;\r\n this._selectionBox.style.width = `${(this._selectionStartX - localX) / this.zoom}px`;\r\n }\r\n\r\n if (localY > this._selectionStartY) {\r\n this._selectionBox.style.top = `${this._selectionStartY / this.zoom}px`;\r\n this._selectionBox.style.height = `${(localY - this._selectionStartY) / this.zoom}px`;\r\n } else {\r\n this._selectionBox.style.top = `${localY / this.zoom}px`;\r\n this._selectionBox.style.height = `${(this._selectionStartY - localY) / this.zoom}px`;\r\n }\r\n\r\n this.props.stateManager.onSelectionBoxMoved.notifyObservers(this._selectionBox.getBoundingClientRect());\r\n\r\n return;\r\n }\r\n\r\n // Candidate frame box\r\n if (this._frameCandidate) {\r\n const rootRect = this.canvasContainer.getBoundingClientRect();\r\n\r\n const localX = evt.pageX - rootRect.left;\r\n const localY = evt.pageY - rootRect.top;\r\n\r\n if (localX > this._selectionStartX) {\r\n this._frameCandidate.style.left = `${this._selectionStartX / this.zoom}px`;\r\n this._frameCandidate.style.width = `${(localX - this._selectionStartX) / this.zoom}px`;\r\n } else {\r\n this._frameCandidate.style.left = `${localX / this.zoom}px`;\r\n this._frameCandidate.style.width = `${(this._selectionStartX - localX) / this.zoom}px`;\r\n }\r\n\r\n if (localY > this._selectionStartY) {\r\n this._frameCandidate.style.top = `${this._selectionStartY / this.zoom}px`;\r\n this._frameCandidate.style.height = `${(localY - this._selectionStartY) / this.zoom}px`;\r\n } else {\r\n this._frameCandidate.style.top = `${localY / this.zoom}px`;\r\n this._frameCandidate.style.height = `${(this._selectionStartY - localY) / this.zoom}px`;\r\n }\r\n\r\n return;\r\n }\r\n\r\n // Candidate link\r\n if (this._candidateLink) {\r\n const rootRect = this.canvasContainer.getBoundingClientRect();\r\n this._candidatePort = null;\r\n this.props.stateManager.onCandidateLinkMoved.notifyObservers(new Vector2(evt.pageX, evt.pageY));\r\n this._dropPointX = (evt.pageX - rootRect.left) / this.zoom;\r\n this._dropPointY = (evt.pageY - rootRect.top) / this.zoom;\r\n\r\n this._candidateLink.update(this._dropPointX, this._dropPointY, true);\r\n this._candidateLinkedHasMoved = true;\r\n\r\n return;\r\n }\r\n\r\n // Zoom with mouse + alt\r\n if (this._altKeyIsPressed && evt.buttons === 1) {\r\n if (this._oldY < 0) {\r\n this._oldY = evt.pageY;\r\n }\r\n\r\n const zoomDelta = (evt.pageY - this._oldY) / 10;\r\n if (Math.abs(zoomDelta) > 5) {\r\n const oldZoom = this.zoom;\r\n this.zoom = Math.max(Math.min(this._maxZoom, this.zoom + zoomDelta / 100), this._minZoom);\r\n\r\n const boundingRect = evt.currentTarget.getBoundingClientRect();\r\n const clientWidth = boundingRect.width;\r\n const widthDiff = clientWidth * this.zoom - clientWidth * oldZoom;\r\n const clientX = evt.clientX - boundingRect.left;\r\n\r\n const xFactor = (clientX - this.x) / oldZoom / clientWidth;\r\n\r\n this.x = this.x - widthDiff * xFactor;\r\n\r\n this._oldY = evt.pageY;\r\n }\r\n return;\r\n }\r\n\r\n // Move canvas\r\n this._rootContainer.style.cursor = \"move\";\r\n\r\n if (this._mouseStartPointX === null || this._mouseStartPointY === null) {\r\n return;\r\n }\r\n this.x += evt.clientX - this._mouseStartPointX;\r\n this.y += evt.clientY - this._mouseStartPointY;\r\n\r\n this._mouseStartPointX = evt.clientX;\r\n this._mouseStartPointY = evt.clientY;\r\n }\r\n\r\n onDown(evt: React.PointerEvent<HTMLElement>) {\r\n if (this.stateManager.modalIsDisplayed) {\r\n return;\r\n }\r\n\r\n this._rootContainer.setPointerCapture(evt.pointerId);\r\n\r\n // Port dragging\r\n if (evt.nativeEvent.srcElement && (evt.nativeEvent.srcElement as HTMLElement).classList.contains(\"port-icon\")) {\r\n if (!this._candidateLink) {\r\n const portElement = ((evt.nativeEvent.srcElement as HTMLElement).parentElement as any).port as NodePort;\r\n if (this._altKeyIsPressed && (portElement.portData.isConnected || portElement.portData.hasEndpoints)) {\r\n const node = portElement.node;\r\n // Delete connection\r\n const links = node.getLinksForPortData(portElement.portData);\r\n\r\n links.forEach((link) => {\r\n link.dispose(false);\r\n });\r\n\r\n // Pick the first one as target port\r\n const targetNode = links[0].nodeA === node ? links[0].nodeB : links[0].nodeA;\r\n const targetPort = links[0].nodeA === node ? links[0].portB : links[0].portA;\r\n\r\n // Start a new one\r\n this._candidateLink = new NodeLink(this, targetPort!, targetNode!);\r\n } else if (this._multiKeyIsPressed && (portElement.portData.isConnected || portElement.portData.hasEndpoints)) {\r\n const node = portElement.node;\r\n const links = node.getLinksForPortData(portElement.portData);\r\n\r\n // Pick the first one as target port\r\n const linkToConsider = this._selectedLink || links[0];\r\n const targetNode = linkToConsider.nodeA === node ? linkToConsider.nodeB : linkToConsider.nodeA;\r\n const targetPort = linkToConsider.nodeA === node ? linkToConsider.portB : linkToConsider.portA;\r\n\r\n // Start a new one\r\n this._candidateLink = new NodeLink(this, targetPort!, targetNode!);\r\n } else {\r\n this._candidateLink = new NodeLink(this, portElement, portElement.node);\r\n }\r\n this._candidateLinkedHasMoved = false;\r\n if (this.stateManager.enablePortCompatibilityHighlight) {\r\n this.stateManager.candidateSourcePortData = this._candidateLink!.portA.portData;\r\n }\r\n }\r\n return;\r\n }\r\n\r\n // Selection?\r\n if (evt.currentTarget === this._hostCanvas && this._multiKeyIsPressed) {\r\n this._selectionBox = this.props.stateManager.hostDocument.createElement(\"div\");\r\n this._selectionBox.classList.add(styles[\"selection-box\"]);\r\n this._selectionContainer.appendChild(this._selectionBox);\r\n\r\n const rootRect = this.canvasContainer.getBoundingClientRect();\r\n this._selectionStartX = evt.pageX - rootRect.left;\r\n this._selectionStartY = evt.pageY - rootRect.top;\r\n this._selectionBox.style.left = `${this._selectionStartX / this.zoom}px`;\r\n this._selectionBox.style.top = `${this._selectionStartY / this.zoom}px`;\r\n this._selectionBox.style.width = \"0px\";\r\n this._selectionBox.style.height = \"0px\";\r\n return;\r\n }\r\n\r\n // Frame?\r\n if (evt.currentTarget === this._hostCanvas && evt.shiftKey) {\r\n this._frameCandidate = this.props.stateManager.hostDocument.createElement(\"div\");\r\n this._frameCandidate.classList.add(commonStyles[\"frame-box\"]);\r\n this._frameContainer.appendChild(this._frameCandidate);\r\n\r\n const rootRect = this.canvasContainer.getBoundingClientRect();\r\n this._selectionStartX = evt.pageX - rootRect.left;\r\n this._selectionStartY = evt.pageY - rootRect.top;\r\n this._frameCandidate.style.left = `${this._selectionStartX / this.zoom}px`;\r\n this._frameCandidate.style.top = `${this._selectionStartY / this.zoom}px`;\r\n this._frameCandidate.style.width = \"0px\";\r\n this._frameCandidate.style.height = \"0px\";\r\n return;\r\n }\r\n\r\n this._mouseStartPointX = evt.clientX;\r\n this._mouseStartPointY = evt.clientY;\r\n this._lastx = this.x;\r\n this._lasty = this.y;\r\n }\r\n\r\n onUp(evt: React.PointerEvent) {\r\n if (this.stateManager.modalIsDisplayed) {\r\n return;\r\n }\r\n\r\n // Un select with no move click, 1 pixel tolerance\r\n if (!this._selectionBox && !this.selectedLink && !this._frameCandidate && Math.abs(this.x - this._lastx) < 2 && Math.abs(this.y - this._lasty) < 2) {\r\n this.props.stateManager.onSelectionChangedObservable.notifyObservers(null);\r\n }\r\n\r\n this._mouseStartPointX = null;\r\n this._mouseStartPointY = null;\r\n this._rootContainer.releasePointerCapture(evt.pointerId);\r\n this._oldY = -1;\r\n if (this._candidateLink) {\r\n if (this._candidateLinkedHasMoved) {\r\n this.processCandidatePort();\r\n this.props.stateManager.onCandidateLinkMoved.notifyObservers(null);\r\n } else {\r\n // is a click event on NodePort\r\n if (this._candidateLink.portA instanceof FrameNodePort) {\r\n //only on Frame Node Ports\r\n const port = this._candidateLink.portA;\r\n const frame = this.frames.find((frame: GraphFrame) => frame.id === port.parentFrameId);\r\n if (frame) {\r\n const data: FramePortData = { frame, port };\r\n this.props.stateManager.onSelectionChangedObservable.notifyObservers({ selection: data });\r\n }\r\n } else if (this._candidateLink.portA instanceof NodePort) {\r\n this.props.stateManager.onSelectionChangedObservable.notifyObservers({ selection: this._candidateLink.portA });\r\n }\r\n }\r\n this._candidateLink.dispose();\r\n this._candidateLink = null;\r\n this._candidatePort = null;\r\n this.stateManager.candidateSourcePortData = null;\r\n }\r\n\r\n if (this._selectionBox) {\r\n this._selectionBox.parentElement!.removeChild(this._selectionBox);\r\n this._selectionBox = null;\r\n }\r\n\r\n if (this._frameCandidate) {\r\n const newFrame = new GraphFrame(this._frameCandidate, this);\r\n this._frames.push(newFrame);\r\n\r\n this._frameCandidate.parentElement!.removeChild(this._frameCandidate);\r\n this._frameCandidate = null;\r\n\r\n this.props.stateManager.onSelectionChangedObservable.notifyObservers({ selection: newFrame });\r\n }\r\n }\r\n\r\n onWheel(evt: React.WheelEvent) {\r\n if (this.stateManager.modalIsDisplayed) {\r\n return;\r\n }\r\n\r\n const delta = evt.deltaY < 0 ? 0.1 : -0.1;\r\n\r\n const oldZoom = this.zoom;\r\n this.zoom = Math.min(Math.max(this._minZoom, this.zoom + delta * this.zoom), this._maxZoom);\r\n\r\n const boundingRect = evt.currentTarget.getBoundingClientRect();\r\n const clientWidth = boundingRect.width;\r\n const clientHeight = boundingRect.height;\r\n const widthDiff = clientWidth * this.zoom - clientWidth * oldZoom;\r\n const heightDiff = clientHeight * this.zoom - clientHeight * oldZoom;\r\n const clientX = evt.clientX - boundingRect.left;\r\n const clientY = evt.clientY - boundingRect.top;\r\n\r\n const xFactor = (clientX - this.x) / oldZoom / clientWidth;\r\n const yFactor = (clientY - this.y) / oldZoom / clientHeight;\r\n\r\n this.x = this.x - widthDiff * xFactor;\r\n this.y = this.y - heightDiff * yFactor;\r\n }\r\n\r\n zoomToFit() {\r\n // Get negative offset\r\n let minX = 0;\r\n let minY = 0;\r\n this._nodes.forEach((node) => {\r\n if (this._frames.some((f) => f.nodes.indexOf(node) !== -1)) {\r\n return;\r\n }\r\n\r\n if (node.x < minX) {\r\n minX = node.x;\r\n }\r\n if (node.y < minY) {\r\n minY = node.y;\r\n }\r\n });\r\n\r\n this._frames.forEach((frame) => {\r\n if (frame.x < minX) {\r\n minX = frame.x;\r\n }\r\n if (frame.y < minY) {\r\n minY = frame.y;\r\n }\r\n });\r\n\r\n // Restore to 0\r\n this._frames.forEach((frame) => {\r\n frame.x += -minX;\r\n frame.y += -minY;\r\n frame.cleanAccumulation();\r\n });\r\n\r\n this._nodes.forEach((node) => {\r\n node.x += -minX;\r\n node.y += -minY;\r\n node.cleanAccumulation();\r\n });\r\n\r\n // Get correct zoom\r\n const xFactor = this._rootContainer.clientWidth / this._rootContainer.scrollWidth;\r\n const yFactor = this._rootContainer.clientHeight / this._rootContainer.scrollHeight;\r\n const zoomFactor = xFactor < yFactor ? xFactor : yFactor;\r\n\r\n this.zoom = zoomFactor;\r\n this.x = 0;\r\n this.y = 0;\r\n }\r\n\r\n /**\r\n * Pans the canvas so the given node is visible and roughly centered.\r\n * @param node - the node to bring into view\r\n */\r\n zoomToNode(node: GraphNode) {\r\n const containerWidth = this._rootContainer.clientWidth;\r\n const containerHeight = this._rootContainer.clientHeight;\r\n this.x = -node.x + containerWidth / (2 * this.zoom) - 100;\r\n this.y = -node.y + containerHeight / (2 * this.zoom) - 20;\r\n }\r\n\r\n processCandidatePort() {\r\n let pointB = this._candidateLink!.portA.portData;\r\n let nodeB = this._candidateLink!.portA.node;\r\n let pointA: IPortData;\r\n let nodeA: GraphNode;\r\n\r\n if (this._candidatePort) {\r\n pointA = this._candidatePort.portData;\r\n nodeA = this._candidatePort.node;\r\n } else {\r\n if (pointB.direction === PortDataDirection.Output) {\r\n return;\r\n }\r\n\r\n // No destination so let's spin a new input node\r\n const newDefaultInput = this.props.stateManager.createDefaultInputData(this.props.stateManager.data, this._candidateLink!.portA.portData, this);\r\n if (!newDefaultInput) {\r\n return;\r\n }\r\n const pointName = newDefaultInput.name;\r\n const emittedNodeData = newDefaultInput.data;\r\n\r\n pointA = emittedNodeData.getPortByName(pointName)!;\r\n if (!pointA) {\r\n for (let i = 0; i < emittedNodeData.outputs.length; i++) {\r\n const output = emittedNodeData.outputs[i];\r\n const outputData = output.data;\r\n const outputBlockType = outputData._blockType;\r\n if (outputBlockType === pointB.data._blockType) {\r\n pointA = output;\r\n break;\r\n }\r\n }\r\n if (!pointA) {\r\n return;\r\n }\r\n }\r\n if (!emittedNodeData.isInput) {\r\n nodeA = this.props.onEmitNewNode(emittedNodeData);\r\n } else {\r\n nodeA = this.appendNode(emittedNodeData as any);\r\n }\r\n nodeA.x = this._dropPointX - 200;\r\n nodeA.y = this._dropPointY - 50;\r\n\r\n const x = nodeA.x - 250;\r\n let y = nodeA.y;\r\n\r\n emittedNodeData.inputs.forEach((portData: IPortData) => {\r\n if (portData.connectedPort) {\r\n const existingNodes = this.nodes.filter((n) => {\r\n return n.content.data === portData.connectedPort?.ownerData;\r\n });\r\n const connectedNode = existingNodes[0];\r\n\r\n if (connectedNode.x === 0 && connectedNode.y === 0) {\r\n connectedNode.x = x;\r\n connectedNode.y = y;\r\n connectedNode.cleanAccumulation();\r\n y += 80;\r\n }\r\n }\r\n });\r\n }\r\n\r\n if (pointA.direction === PortDataDirection.Input) {\r\n const temp = pointB;\r\n pointB = pointA;\r\n pointA = temp;\r\n\r\n const tempNode = nodeA;\r\n nodeA = nodeB;\r\n nodeB = tempNode;\r\n }\r\n\r\n if (pointB.connectedPort === pointA) {\r\n return;\r\n }\r\n\r\n if (pointB === pointA) {\r\n return;\r\n }\r\n\r\n if (pointB.direction === pointA.direction) {\r\n return;\r\n }\r\n\r\n if (pointB.ownerData === pointA.ownerData) {\r\n return;\r\n }\r\n\r\n // Check compatibility\r\n let compatibilityState = pointA.checkCompatibilityState(pointB);\r\n if ((pointA.needDualDirectionValidation || pointB.needDualDirectionValidation) && !compatibilityState) {\r\n compatibilityState = pointB.checkCompatibilityState(pointA);\r\n }\r\n\r\n const message = pointA.getCompatibilityIssueMessage(compatibilityState, nodeB, pointB);\r\n\r\n if (message) {\r\n this.props.stateManager.onErrorMessageDialogRequiredObservable.notifyObservers(message);\r\n return;\r\n }\r\n\r\n let linksToNotifyForDispose: Nullable<NodeLink[]> = null;\r\n\r\n if (pointB.isConnected) {\r\n const links = nodeB.getLinksForPortData(pointB);\r\n\r\n linksToNotifyForDispose = links.slice();\r\n\r\n links.forEach((link) => {\r\n link.dispose(false);\r\n });\r\n }\r\n\r\n if (pointB.ownerData.inputsAreExclusive) {\r\n // Disconnect all inputs if node has exclusive inputs\r\n pointB.ownerData.inputs.forEach((i: any) => {\r\n const links = nodeB.getLinksForPortData(i);\r\n\r\n if (!linksToNotifyForDispose) {\r\n linksToNotifyForDispose = links.slice();\r\n } else {\r\n linksToNotifyForDispose.push(...links.slice());\r\n }\r\n\r\n links.forEach((link) => {\r\n link.dispose(false);\r\n });\r\n });\r\n }\r\n\r\n this.connectNodes(nodeA, pointA, nodeB, pointB);\r\n\r\n linksToNotifyForDispose?.forEach((link) => {\r\n link.onDisposedObservable.notifyObservers(link);\r\n link.onDisposedObservable.clear();\r\n });\r\n\r\n if (!nodeB.content.isConnectedToOutput || nodeB.content.isConnectedToOutput()) {\r\n this.props.stateManager.onRebuildRequiredObservable.notifyObservers();\r\n }\r\n }\r\n\r\n connectNodes(nodeA: GraphNode, pointA: IPortData, nodeB: GraphNode, pointB: IPortData) {\r\n pointA.connectTo(pointB);\r\n this.connectPorts(pointA, pointB);\r\n\r\n // Need to potentially propagate the type of pointA to other ports of nodes connected to owner of pointB\r\n // We also need to check if we want to display the promotion warning\r\n\r\n const visitedNodes = new Set<GraphNode>([nodeA]);\r\n const visitedLinks = new Set<NodeLink>([nodeB.links[nodeB.links.length - 1]]);\r\n\r\n RefreshNode(nodeB, visitedNodes, visitedLinks, this);\r\n }\r\n\r\n drop(newNode: GraphNode, targetX: number, targetY: number, offsetX: number, offsetY: number) {\r\n let x = targetX - this.x - offsetX * this.zoom;\r\n let y = targetY - this.y - offsetY * this.zoom;\r\n\r\n newNode.x = x / this.zoom;\r\n newNode.y = y / this.zoom;\r\n newNode.cleanAccumulation();\r\n\r\n x -= GraphCanvasComponent.NodeWidth + 200;\r\n\r\n newNode.content.inputs.forEach((portData) => {\r\n if (portData.connectedPort) {\r\n const existingNodes = this.nodes.filter((n) => {\r\n return n.content.data === portData.connectedPort?.ownerData;\r\n });\r\n const connectedNode = existingNodes[0];\r\n\r\n if (connectedNode.x === 0 && connectedNode.y === 0) {\r\n connectedNode.x = x / this.zoom;\r\n connectedNode.y = y / this.zoom;\r\n connectedNode.cleanAccumulation();\r\n y += 80;\r\n }\r\n }\r\n });\r\n\r\n this.props.stateManager.onNewNodeCreatedObservable.notifyObservers(newNode);\r\n this.props.stateManager.onSelectionChangedObservable.notifyObservers(null);\r\n this.props.stateManager.onSelectionChangedObservable.notifyObservers({ selection: newNode });\r\n }\r\n\r\n processEditorData(editorData: IEditorData) {\r\n const frames = this._frames.splice(0);\r\n for (const frame of frames) {\r\n frame.dispose();\r\n }\r\n\r\n const notes = this._stickyNotes.splice(0);\r\n for (const note of notes) {\r\n note.element.parentElement?.removeChild(note.element);\r\n }\r\n\r\n this._frames = [];\r\n this._stickyNotes = [];\r\n this._selectedStickyNotes = [];\r\n this.x = editorData.x || 0;\r\n this.y = editorData.y || 0;\r\n this.zoom = editorData.zoom || 1;\r\n\r\n // Frames\r\n if (editorData.frames) {\r\n for (const frameData of editorData.frames) {\r\n const frame = GraphFrame.Parse(frameData, this, editorData.map);\r\n this._frames.push(frame);\r\n }\r\n }\r\n\r\n // Sticky notes\r\n if (this.props.enableStickyNotes && editorData.stickyNotes) {\r\n for (const noteData of editorData.stickyNotes) {\r\n const note = GraphStickyNote.Parse(noteData, this);\r\n this._stickyNotes.push(note);\r\n }\r\n }\r\n }\r\n\r\n reOrganize(editorData: Nullable<IEditorData> = null, isImportingAFrame = false) {\r\n if (!editorData || !editorData.locations) {\r\n this.distributeGraph();\r\n } else {\r\n // Locations\r\n for (const location of editorData.locations) {\r\n for (const node of this.nodes) {\r\n const data = node.content.data;\r\n if (data && data.uniqueId === location.blockId) {\r\n node.x = location.x;\r\n node.y = location.y;\r\n if (location.isCollapsed) {\r\n node.collapse();\r\n }\r\n node.cleanAccumulation();\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (!isImportingAFrame) {\r\n this.processEditorData(editorData);\r\n }\r\n }\r\n\r\n this._isLoading = false;\r\n for (const node of this.nodes) {\r\n node._refreshLinks();\r\n }\r\n }\r\n\r\n addFrame(frameData: IFrameData) {\r\n const frame = GraphFrame.Parse(frameData, this, this.props.stateManager.getEditorDataMap());\r\n this._frames.push(frame);\r\n this.stateManager.onSelectionChangedObservable.notifyObservers({ selection: frame });\r\n }\r\n\r\n /**\r\n * Create a new sticky note at the given canvas-space position.\r\n * @param x - x position in canvas space\r\n * @param y - y position in canvas space\r\n * @returns the created sticky note\r\n */\r\n addStickyNote(x: number, y: number): GraphStickyNote | null {\r\n if (!this.props.enableStickyNotes) {\r\n return null;\r\n }\r\n const note = new GraphStickyNote(this);\r\n note.x = x;\r\n note.y = y;\r\n this._stickyNotes.push(note);\r\n this.stateManager.onSelectionChangedObservable.notifyObservers({ selection: note });\r\n return note;\r\n }\r\n\r\n /**\r\n * Open the find-in-graph search bar, if enabled.\r\n */\r\n showSearch() {\r\n if (this.props.enableFindInGraph) {\r\n this._searchRef.current?.show();\r\n }\r\n }\r\n\r\n override render() {\r\n return (\r\n <div\r\n ref={this._hostCanvasRef}\r\n id=\"graph-canvas\"\r\n className={styles[\"graph-canvas\"]}\r\n onWheel={(evt) => this.onWheel(evt)}\r\n onPointerMove={(evt) => this.onMove(evt)}\r\n onPointerDown={(evt) => this.onDown(evt)}\r\n onPointerUp={(evt) => this.onUp(evt)}\r\n >\r\n <div id=\"graph-container\" className={styles[\"graph-container\"]} ref={this._rootContainerRef}>\r\n <div id=\"graph-canvas-container\" className={styles[\"graph-canvas-container\"]} ref={this._graphCanvasRef}></div>\r\n <div id=\"frame-container\" className={styles[\"frame-container\"]} ref={this._frameContainerRef}></div>\r\n <svg id=\"graph-svg-container\" className={styles[\"graph-svg-container\"]} ref={this._svgCanvasRef}></svg>\r\n <div id=\"selection-container\" className={styles[\"selection-container\"]} ref={this._selectionContainerRef}></div>\r\n </div>\r\n <SearchBoxComponent stateManager={this.stateManager} />\r\n {this.props.enableMinimap && <GraphMinimapComponent canvas={this} />}\r\n {this.props.enableFindInGraph && <GraphSearchComponent ref={this._searchRef} canvas={this} />}\r\n </div>\r\n );\r\n }\r\n}\r\n"]}
|
|
@@ -48,6 +48,8 @@ export declare class GraphNode {
|
|
|
48
48
|
private _enclosingFrameId;
|
|
49
49
|
private _lastClick;
|
|
50
50
|
_visualPropertiesRefresh: Array<() => void>;
|
|
51
|
+
/** Direct access to the execution time label element for lightweight updates */
|
|
52
|
+
get executionTimeElement(): HTMLDivElement;
|
|
51
53
|
addClassToVisual(className: string): void;
|
|
52
54
|
removeClassFromVisual(className: string): void;
|
|
53
55
|
/**
|
|
@@ -8,6 +8,10 @@ import { ForceRebuild } from "./automaticProperties.js";
|
|
|
8
8
|
import dropdownArrowIcon from "../imgs/dropdownArrowIcon_white.svg";
|
|
9
9
|
import { BuildFloatUI } from "./tools.js";
|
|
10
10
|
export class GraphNode {
|
|
11
|
+
/** Direct access to the execution time label element for lightweight updates */
|
|
12
|
+
get executionTimeElement() {
|
|
13
|
+
return this._executionTime;
|
|
14
|
+
}
|
|
11
15
|
addClassToVisual(className) {
|
|
12
16
|
this._visual.classList.add(className);
|
|
13
17
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graphNode.js","sourceRoot":"","sources":["../../../../dev/sharedUiComponents/src/nodeGraphSystem/graphNode.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAMtC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGhD,OAAO,KAAK,WAAW,MAAM,yBAAyB,CAAC;AACvD,OAAO,KAAK,YAAY,MAAM,sBAAsB,CAAC;AAErD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,iBAAiB,MAAM,qCAAqC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,MAAM,OAAO,SAAS;IA0CX,gBAAgB,CAAC,SAAiB;QACrC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC1C,CAAC;IAEM,qBAAqB,CAAC,SAAiB;QAC1C,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC7C,CAAC;IAED;;;;OAIG;IACI,kBAAkB,CAAC,QAAoC,EAAE,OAAgB;QAC5E,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACzB,OAAO;QACX,CAAC;QACD,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,iBAAiB,CAAC,EAAE,WAAW,CAAC,mBAAmB,CAAC,CAAC,CAAC;QACzG,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;YAC7C,IAAI,CAAC,gBAAgB,CAAC,KAAK,GAAG,EAAE,CAAC;YACjC,OAAO;QACX,CAAC;QACD,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC;QACzC,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC,CAAC;QAC9H,IAAI,CAAC,gBAAgB,CAAC,KAAK,GAAG,OAAO,IAAI,EAAE,CAAC;IAChD,CAAC;IAED;;;;OAIG;IACI,kBAAkB,CAAC,MAAe,EAAE,SAAkB,KAAK;QAC9D,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACzB,OAAO;QACX,CAAC;QACD,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,kBAAkB,CAAC,EAAE,WAAW,CAAC,kBAAkB,CAAC,CAAC,CAAC;QACzG,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;YAC7C,OAAO;QACX,CAAC;QACD,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC;QACzC,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC,CAAC;IACpH,CAAC;IAED,IAAW,WAAW;QAClB,OAAO,IAAI,CAAC,YAAY,CAAC;IAC7B,CAAC;IAED,IAAW,SAAS;QAChB,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;IAED,IAAW,SAAS,CAAC,KAAc;QAC/B,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QAExB,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;QACvD,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;YACtD,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC/B,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC7B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QAC3B,CAAC;QAED,IAAI,CAAC,aAAa,EAAE,CAAC;IACzB,CAAC;IAEO,mBAAmB;QACvB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;YAC5D,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;gBAClB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACvC,CAAC;QACL,CAAC;IACL,CAAC;IAED,IAAW,WAAW;QAClB,OAAO,IAAI,CAAC,YAAY,CAAC;IAC7B,CAAC;IAED,IAAW,UAAU;QACjB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC5B,CAAC;IAED,IAAW,KAAK;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAED,IAAW,YAAY;QACnB,OAAO,IAAI,CAAC,aAAa,CAAC;IAC9B,CAAC;IAED,IAAW,YAAY;QACnB,OAAO,IAAI,CAAC,aAAa,CAAC;IAC9B,CAAC;IAED,IAAW,CAAC;QACR,OAAO,IAAI,CAAC,EAAE,CAAC;IACnB,CAAC;IAED,IAAW,CAAC,CAAC,KAAa;QACtB,IAAI,IAAI,CAAC,EAAE,KAAK,KAAK,EAAE,CAAC;YACpB,OAAO;QACX,CAAC;QACD,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC;QAEhB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAC9D,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,aAAa,IAAI,CAAC;QAEpD,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,cAAc,EAAE,CAAC;IAC1B,CAAC;IAED,IAAW,CAAC;QACR,OAAO,IAAI,CAAC,EAAE,CAAC;IACnB,CAAC;IAED,IAAW,CAAC,CAAC,KAAa;QACtB,IAAI,IAAI,CAAC,EAAE,KAAK,KAAK,EAAE,CAAC;YACpB,OAAO;QACX,CAAC;QAED,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC;QAEhB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAC9D,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,aAAa,IAAI,CAAC;QAEnD,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,cAAc,EAAE,CAAC;IAC1B,CAAC;IAED,IAAW,KAAK;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;IACpC,CAAC;IAED,IAAW,MAAM;QACb,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;IACrC,CAAC;IAED,IAAW,EAAE;QACT,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;IACjC,CAAC;IAED,IAAW,IAAI;QACX,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC7B,CAAC;IAED,IAAW,gBAAgB;QACvB,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAClC,CAAC;IAED,IAAW,gBAAgB,CAAC,KAAa;QACrC,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;IACnC,CAAC;IAEM,aAAa,CAAC,KAAc,EAAE,gBAAyB;QAC1D,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC;YACvD,MAAM,gBAAgB,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAEvE,IAAI,gBAAgB,GAAG,CAAC,CAAC,EAAE,CAAC;gBACxB,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;YAChE,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,aAAa,CAAC,4BAA4B,CAAC,eAAe,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,CAAC;QAC3G,CAAC;IACL,CAAC;IAED,IAAW,WAAW;QAClB,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAED,YACW,OAAkB,EACzB,YAA0B;QADnB,YAAO,GAAP,OAAO,CAAW;QAvMrB,gBAAW,GAAe,EAAE,CAAC;QAC7B,iBAAY,GAAe,EAAE,CAAC;QAC9B,WAAM,GAAe,EAAE,CAAC;QACxB,OAAE,GAAG,CAAC,CAAC;QACP,OAAE,GAAG,CAAC,CAAC;QACP,kBAAa,GAAG,CAAC,CAAC;QAClB,kBAAa,GAAG,CAAC,CAAC;QAClB,sBAAiB,GAAqB,IAAI,CAAC;QAC3C,sBAAiB,GAAqB,IAAI,CAAC;QAQ3C,oBAAe,GAA8B,IAAI,CAAC;QAClD,eAAU,GAAG,IAAI,CAAC;QAClB,sBAAiB,GAAG,CAAC,CAAC,CAAC;QACvB,eAAU,GAAG,GAAG,CAAC;QAElB,6BAAwB,GAAsB,EAAE,CAAC;QA8oBhD,iBAAY,GAAG,KAAK,CAAC;QAwCrB,iBAAY,GAAG,CAAC,CAAC;QAjgBrB,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;QAElC,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC,aAAa,CAAC,4BAA4B,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;YAC/F,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,OAAO,IAAI,EAAE,CAAC;YAC1C,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBAChB,IAAI,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;oBAC9B,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC;oBACjC,IAAI,CAAC,aAAa,CAAC,mBAAmB,EAAE,CAAC;gBAC7C,CAAC;gBACD,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC;gBACpD,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,kBAAkB,EAAE,CAAC;oBAClE,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;gBAC5F,CAAC;gBACD,IAAI,CAAC,aAAa,CAAC,UAAU,GAAG,IAAI,CAAC;YACzC,CAAC;iBAAM,CAAC;gBACJ,IAAI,IAAI,CAAC,aAAa,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;oBACzC,IAAI,CAAC,aAAa,CAAC,UAAU,GAAG,IAAI,CAAC;gBACzC,CAAC;gBACD,IAAI,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;oBACvD,IAAI,IAAI,CAAC,OAAO,CAAC,cAAc,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;wBACvD,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC;wBAClC,IAAI,CAAC,aAAa,CAAC,mBAAmB,EAAE,CAAC;oBAC7C,CAAC;oBACD,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC;oBACvD,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,kBAAkB,EAAE,CAAC;wBAClE,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,IAAK,IAAkB,CAAC,OAAO,CAAC,CAAC,CAAE,IAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;oBACxJ,CAAC;gBACL,CAAC;YACL,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,aAAa,CAAC,yBAAyB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YACtF,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;gBAClC,OAAO;YACX,CAAC;YACD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBACd,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC;YAC3D,CAAC;iBAAM,CAAC;gBACJ,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC;YAC9D,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC,aAAa,CAAC,0BAA0B,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YACxF,IAAI,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;gBAC7B,OAAO;YACX,CAAC;YACD,IAAI,CAAC,OAAO,EAAE,CAAC;QACnB,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,4BAA4B,GAAG,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACrF,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC;YACnD,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;YAEhI,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,aAAa,CAAC,wBAAwB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACrF,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrE,OAAO;YACX,CAAC;YAED,IAAI,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;gBACjC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3B,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,mBAAmB,GAAG,GAAG,EAAE;YAC/B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAChC,CAAC,CAAC;QAEF,OAAO,CAAC,cAAc,GAAG,CAAC,KAAa,EAAE,EAAE;YACvC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC,CAAC;QAEF,OAAO,CAAC,oBAAoB,GAAG,GAAG,EAAE;YAChC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC,CAAC;QAEF,OAAO,CAAC,eAAe,GAAG,CAAC,KAAa,EAAE,EAAE;YACxC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAClC,CAAC,CAAC;IACN,CAAC;IAEM,kBAAkB,CAAC,KAAiB;QACvC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC;QACnD,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC;QAEpD,oBAAoB;QACpB,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;QACjB,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC;QAElB,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;QAE3I,IAAI,kBAAkB,EAAE,CAAC;YACrB,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC,EAAE,CAAC;QACrC,CAAC;QACD,OAAO,kBAAkB,CAAC;IAC9B,CAAC;IAEM,kBAAkB,CAAC,QAAmB;QACzC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YAClC,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC;YAEpC,IAAI,aAAa,KAAK,QAAQ,IAAI,CAAC,aAAa,CAAC,SAAS,KAAK,QAAQ,CAAC,SAAS,IAAI,aAAa,CAAC,YAAY,KAAK,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;gBACzI,OAAO,IAAI,CAAC;YAChB,CAAC;QACL,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACnC,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC;YAEpC,IAAI,aAAa,KAAK,QAAQ,IAAI,CAAC,aAAa,CAAC,SAAS,KAAK,QAAQ,CAAC,SAAS,IAAI,aAAa,CAAC,YAAY,KAAK,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;gBACzI,OAAO,IAAI,CAAC;YAChB,CAAC;QACL,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,6BAA6B,CAAC,IAAS;QAC1C,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YAClC,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC;YAEpC,IAAI,aAAa,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;gBAC9B,OAAO,aAAa,CAAC;YACzB,CAAC;QACL,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACnC,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC;YAEpC,IAAI,aAAa,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;gBAC9B,OAAO,aAAa,CAAC;YACzB,CAAC;QACL,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,0BAA0B,CAAC,IAAS;QACvC,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,KAAM,CAAC,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACjH,CAAC;IAEM,mBAAmB,CAAC,QAAmB;QAC1C,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,KAAK,QAAQ,IAAI,IAAI,CAAC,KAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;IAC/G,CAAC;IAEO,cAAc;QAClB,IAAI,IAAI,CAAC,YAAY,CAAC,cAAc,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC;YACnE,OAAO;QACX,CAAC;QAED,SAAS;QACT,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;YAC3C,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACzB,CAAC;IACL,CAAC;IAEM,aAAa;QAChB,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC;YAC/B,OAAO;QACX,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC7B,IAAI,CAAC,MAAM,EAAE,CAAC;QAClB,CAAC;IACL,CAAC;IAEM,OAAO;QACV,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACpE,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,UAAU,CAAC;YACpC,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,UAAU,CAAC;YAChC,IAAI,CAAC,eAAe,CAAC,oBAAoB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YACvE,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC9E,IAAI,eAAe,EAAE,CAAC;gBAClB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,eAAe,CAAC;YACpD,CAAC;YACD,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC1E,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC;YAClD,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,KAAK,GAAG,WAAW,CAAC,kBAAkB,CAAC,CAAC;YACxE,IAAI,eAAe,EAAE,CAAC;gBAClB,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;YACzD,CAAC;YACD,IAAI,IAAI,CAAC,eAAe,CAAC,uBAAuB,EAAE,CAAC;gBAC/C,IAAI,CAAC,eAAe,CAAC,uBAAuB,CAAC,IAAI,CAAC,OAAO,EAAE;oBACvD,MAAM,EAAE,IAAI,CAAC,OAAO;oBACpB,MAAM,EAAE,IAAI,CAAC,OAAO;oBACpB,eAAe,EAAE,IAAI,CAAC,gBAAgB;oBACtC,UAAU,EAAE,IAAI,CAAC,WAAW;oBAC5B,aAAa,EAAE,IAAI,CAAC,cAAc;oBAClC,QAAQ,EAAE,IAAI,CAAC,SAAS;oBACxB,WAAW,EAAE,IAAI,CAAC,YAAY;oBAC9B,eAAe,EAAE,IAAI,CAAC,gBAAgB;oBACtC,gBAAgB,EAAE,IAAI,CAAC,iBAAiB;oBACxC,OAAO,EAAE,IAAI,CAAC,QAAQ;oBACtB,eAAe,EAAE,IAAI,CAAC,gBAAgB;iBACzC,CAAC,CAAC;YACP,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;YAC3C,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;QAC3C,CAAC;QAED,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,wBAAwB,EAAE,CAAC;YAClD,OAAO,EAAE,CAAC;QACd,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YAClC,IAAI,CAAC,OAAO,EAAE,CAAC;QACnB,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACnC,IAAI,CAAC,OAAO,EAAE,CAAC;QACnB,CAAC;QAED,IAAI,IAAI,CAAC,gBAAgB,KAAK,CAAC,CAAC,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAChG,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;gBAC5D,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,gBAAgB,EAAE,CAAC;YACvD,CAAC;QACL,CAAC;QAED,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC;QACvD,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC;QAEnD,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI,CAAC,CAAC;QACtD,IAAI,CAAC,cAAc,CAAC,SAAS,GAAG,aAAa,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAE3F,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;IAC1E,CAAC;IAED,8CAA8C;IACtC,OAAO,CAAC,IAAe;QAC3B,MAAM,KAAK,GAAgB,EAAE,CAAC;QAC9B,IAAI,KAAK,GAAG,SAAS,CAAC;QACtB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC5B,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,EAAE,CAAC;gBAC3C,KAAK,GAAG,KAAK,CAAC;YAClB,CAAC;YACD,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,EAAE,CAAC;gBAC3C,KAAK,GAAG,IAAI,CAAC;YACjB,CAAC;QACL,CAAC;QACD,IAAI,KAAK,IAAI,SAAS,EAAE,CAAC;YACrB,MAAM,IAAI,GAAG,CAAC,KAAc,EAAE,EAAE;gBAC5B,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBACrC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;oBAC5B,IAAI,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,SAAS,EAAE,CAAC;wBACzD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;wBACvB,IAAI,CAAC,KAAK,CAAC,CAAC;oBAChB,CAAC;oBACD,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,SAAS,EAAE,CAAC;wBAC1D,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;wBACvB,IAAI,CAAC,KAAK,CAAC,CAAC;oBAChB,CAAC;gBACL,CAAC;YACL,CAAC,CAAC;YACF,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjB,IAAI,CAAC,KAAK,CAAC,CAAC;QAChB,CAAC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,qCAAqC;IAC7B,aAAa,CAAC,IAAe;QACjC,IAAI,MAAM,GAAgB,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,CAAC,KAAkB,EAAE,KAAc,EAAE,EAAE;YAChD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACrC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBAC5B,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;gBAC1C,IAAI,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,SAAS,EAAE,CAAC;oBACzD,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBAC1B,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,EAAE,CAAC;wBACrB,MAAM,GAAG,QAAQ,CAAC;wBAClB,OAAO;oBACX,CAAC;yBAAM,CAAC;wBACJ,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;oBAC1B,CAAC;gBACL,CAAC;gBACD,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,SAAS,EAAE,CAAC;oBAC1D,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBAC1B,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,EAAE,CAAC;wBACrB,MAAM,GAAG,QAAQ,CAAC;wBAClB,OAAO;oBACX,CAAC;yBAAM,CAAC;wBACJ,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;oBAC1B,CAAC;gBACL,CAAC;YACL,CAAC;QACL,CAAC,CAAC;QACF,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;QACnB,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACjB,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;QACxB,CAAC;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IAEO,OAAO,CAAC,GAAiB;QAC7B,wCAAwC;QACxC,IAAI,GAAG,CAAC,MAAM,IAAK,GAAG,CAAC,MAAsB,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YAC5E,OAAO;QACX,CAAC;QAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACvE,IAAI,gBAAgB,KAAK,CAAC,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC,aAAa,CAAC,4BAA4B,CAAC,eAAe,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzF,CAAC;aAAM,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YACrB,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACrC,CAAC;QAED,YAAY;QACZ,IAAI,GAAG,CAAC,QAAQ,IAAI,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7D,gBAAgB;YAChB,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACzF,IAAI,WAAW,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,GAAG,GAAG,EAAE,CAAC;gBAC5C,eAAe;gBACf,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;gBACxC,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;oBACxB,IAAI,CAAC,aAAa,CAAC,4BAA4B,CAAC,eAAe,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBACzF,CAAC;YACL,CAAC;iBAAM,CAAC;gBACJ,eAAe;gBACf,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACjC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACvB,IAAI,CAAC,aAAa,CAAC,4BAA4B,CAAC,eAAe,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBACzF,CAAC;YACL,CAAC;QACL,CAAC;QAED,GAAG,CAAC,eAAe,EAAE,CAAC;QAEtB,KAAK,MAAM,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,CAAC;YACzD,YAAY,CAAC,iBAAiB,EAAE,CAAC;QACrC,CAAC;QAED,IAAI,CAAC,iBAAiB,GAAG,GAAG,CAAC,OAAO,CAAC;QACrC,IAAI,CAAC,iBAAiB,GAAG,GAAG,CAAC,OAAO,CAAC;QAErC,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAE9C,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;IACxC,CAAC;IAEM,iBAAiB,CAAC,OAAO,GAAG,KAAK;QACpC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAC5D,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAChE,CAAC;IAEO,KAAK,CAAC,GAAiB;QAC3B,GAAG,CAAC,eAAe,EAAE,CAAC;QAEtB,KAAK,MAAM,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,CAAC;YACzD,YAAY,CAAC,iBAAiB,EAAE,CAAC;QACrC,CAAC;QAED,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC9B,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC9B,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAElD,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,oBAAoB,EAAE,CAAC;YAC1C,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YAC/D,OAAO;QACX,CAAC;QAED,oBAAoB;QACpB,MAAM,MAAM,GAA0B,EAAE,CAAC;QACzC,MAAM,OAAO,GAA0B,EAAE,CAAC;QAC1C,MAAM,mBAAmB,GAA0B,EAAE,CAAC;QACtD,MAAM,oBAAoB,GAA0B,EAAE,CAAC;QACvD,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAC,KAAK,CAAC;QAC9D,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAC,KAAM,CAAC;QAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAC,KAAK,CAAC,QAAQ,CAAC;QACvE,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAC,KAAM,CAAC,QAAQ,CAAC;QAEzE,kBAAkB;QAClB,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAC,OAAO,EAAE,CAAC;QACjD,IAAI,CAAC,YAAY,CAAC,oBAAoB,GAAG,IAAI,CAAC;QAE9C,gBAAgB;QAChB,mBAAmB,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;QAE/E,oBAAoB,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAEnD,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAEzC,OAAO,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;QAExE,yCAAyC;QACzC,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC/C,MAAM,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAElD,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;YACpB,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;YAChC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;QAClC,CAAC;QAED,IAAI,cAAc,GAAG,CAAC,EAAE,CAAC;YACrB,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;YAClC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;QACpC,CAAC;QAED,YAAY;QACZ,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,MAAM,EAAE,mBAAmB,EAAE,IAAI,CAAC,CAAC;QACrE,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,oBAAoB,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QAEvE,IAAI,CAAC,aAAa,CAAC,2BAA2B,CAAC,eAAe,EAAE,CAAC;QACjE,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IACnE,CAAC;IAEO,OAAO,CAAC,GAAiB;QAC7B,IAAI,CAAC,YAAY,CAAC,oBAAoB,GAAG,IAAI,CAAC;QAC9C,IAAI,IAAI,CAAC,iBAAiB,KAAK,IAAI,IAAI,IAAI,CAAC,iBAAiB,KAAK,IAAI,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YACpF,OAAO;QACX,CAAC;QAED,OAAO;QACP,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;QAC7E,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;QAE7E,KAAK,MAAM,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,CAAC;YACzD,YAAY,CAAC,CAAC,IAAI,IAAI,CAAC;YACvB,YAAY,CAAC,CAAC,IAAI,IAAI,CAAC;QAC3B,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,CAAC;YACnD,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACjC,CAAC;QAED,IAAI,CAAC,iBAAiB,GAAG,GAAG,CAAC,OAAO,CAAC;QACrC,IAAI,CAAC,iBAAiB,GAAG,GAAG,CAAC,OAAO,CAAC;QAErC,GAAG,CAAC,eAAe,EAAE,CAAC;QAEtB,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YACjH,OAAO;QACX,CAAC;QAED,uCAAuC;QACvC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC;QAClD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;YACzC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,KAAM,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;gBACxD,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;gBAC/B,SAAS;YACb,CAAC;YACD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YAEnD,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACzB,IAAI,IAAI,CAAC,YAAY,CAAC,oBAAoB,KAAK,IAAI,EAAE,CAAC;oBAClD,IAAI,IAAI,CAAC,YAAY,CAAC,oBAAoB,EAAE,CAAC;wBACzC,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAC,iBAAiB,GAAG,KAAK,CAAC;oBACrE,CAAC;oBACD,IAAI,CAAC,YAAY,CAAC,oBAAoB,GAAG,IAAI,CAAC;gBAClD,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAEM,gBAAgB;QACnB,IAAI,OAAO,GAAG,cAAc,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;QAE7E,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,OAAO,GAAG,cAAc,CAAC,cAAc,CAAC;QAC5C,CAAC;QAED,OAAO,KAAK,CAAC,aAAa,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,IAAI,CAAC,aAAa,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IACtG,CAAC;IAEM,aAAa,CAAC,MAAW,EAAE,YAAoB,EAAE,SAAgD;QACpG,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,wBAAwB,EAAE,CAAC;YAClD,OAAO,EAAE,CAAC;QACd,CAAC;QACD,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,YAAY,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IAC7E,CAAC;IAID;;OAEG;IACI,QAAQ;QACX,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAEvE,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;YACrB,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACnD,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAEzE,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACtB,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACnD,CAAC;QAED,IAAI,CAAC,aAAa,EAAE,CAAC;IACzB,CAAC;IAED;;OAEG;IACI,MAAM;QACT,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QAC7D,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QACvE,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;YACrB,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACtD,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QACzE,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACtB,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACtD,CAAC;QAED,IAAI,CAAC,aAAa,EAAE,CAAC;IACzB,CAAC;IAGO,gBAAgB,CAAC,OAAO,GAAG,KAAK;QACpC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACtC,IAAI,OAAO,EAAE,CAAC;gBACV,oCAAoC;gBACpC,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC;gBACxE,IAAI,YAAY,EAAE,CAAC;oBACf,SAAS;gBACb,CAAC;YACL,CAAC;YAED,IAAI,KAAK,CAAC,qBAAqB,EAAE,CAAC;gBAC9B,IAAI,CAAC,YAAY,EAAE,CAAC;YACxB,CAAC;YACD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;QACpI,CAAC;IACL,CAAC;IAEO,gBAAgB,CAAC,KAAa;QAClC,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACtC,CAAC;IAEO,iBAAiB,CAAC,OAAO,GAAG,KAAK;QACrC,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACxC,IAAI,OAAO,EAAE,CAAC;gBACV,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC;gBAC1E,IAAI,YAAY,EAAE,CAAC;oBACf,SAAS;gBACb,CAAC;YACL,CAAC;YACD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;QACvI,CAAC;IACL,CAAC;IAEO,iBAAiB,CAAC,KAAa;QACnC,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACvC,CAAC;IAEM,YAAY,CAAC,IAAoB,EAAE,KAA2B;QACjE,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAE1B,kBAAkB;QAClB,MAAM,mBAAmB,GAAG,aAAa,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;QAE1F,IAAI,mBAAmB,EAAE,CAAC;YACtB,IAAI,CAAC,eAAe,GAAG,IAAI,mBAAmB,EAAE,CAAC;QACrD,CAAC;QAED,MAAM;QACN,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACvD,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAE/C,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;QACzE,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;QACrE,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;QAEzE,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAChE,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC,CAAC;QACrE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAEhD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACvD,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC/C,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEhD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC3D,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QACvD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9D,IAAI,CAAC,cAAc,CAAC,SAAS,GAAG,KAAK,CAAC;QACtC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAClD,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAEpD,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC/D,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;YAC/D,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAClE,IAAI,CAAC,kBAAkB,CAAC,GAAG,GAAG,iBAAiB,CAAC;YAChD,IAAI,CAAC,kBAAkB,CAAC,SAAS,GAAG,KAAK,CAAC;YAC1C,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YAC1D,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YACxD,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC,CAAC;YACnF,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC,CAAC;YACrF,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,GAAG,EAAE,EAAE;gBACzD,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC;gBACvC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;oBACpB,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACpB,CAAC;qBAAM,CAAC;oBACJ,IAAI,CAAC,MAAM,EAAE,CAAC;gBAClB,CAAC;gBACD,GAAG,CAAC,eAAe,EAAE,CAAC;YAC1B,CAAC,CAAC,CAAC;QACP,CAAC;QAED,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAChE,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QACxD,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAEhD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC5D,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QACzD,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAE5C,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACjE,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;QACnE,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAEtD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAChE,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC;QAClE,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAErD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACjE,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;QACpE,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAEtD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACxD,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QACjD,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAExC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE/B,WAAW;QACX,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACzD,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAEnD,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAEzC,iBAAiB;QACjB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9D,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;QAE7D,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAE9C,4BAA4B;QAC5B,IAAI,IAAI,CAAC,aAAa,CAAC,gBAAgB,EAAE,CAAC;YACtC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAChE,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;YACjE,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;YAC7C,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC7D,CAAC;QAED,4BAA4B;QAC5B,IAAI,IAAI,CAAC,aAAa,CAAC,gBAAgB,EAAE,CAAC;YACtC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAChE,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;YACjE,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;YAC7C,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC7D,CAAC;QAED,UAAU;QACV,MAAM,SAAS,GAAqC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;QACjF,IAAI,SAAS,EAAE,CAAC;YACZ,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;YAEjC,MAAM,OAAO,GAAa,EAAE,CAAC;YAE7B,IAAI,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YAC1C,OAAO,KAAK,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;gBACjC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;gBACnC,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;YACzC,CAAC;YAED,KAAK,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,SAAS,EAAE,CAAC;gBAC9E,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;oBACrE,SAAS;gBACb,CAAC;gBAED,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;gBAC1D,SAAS,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC,CAAC;gBAC1E,SAAS,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC,CAAC;gBACxE,SAAS,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC,CAAC;gBAC1E,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;gBAC9C,QAAQ,IAAI,EAAE,CAAC;oBACX,2CAAmC,CAAC,CAAC,CAAC;wBAClC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;wBACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;wBAC3D,QAAQ,CAAC,IAAI,GAAG,UAAU,CAAC;wBAC3B,QAAQ,CAAC,EAAE,GAAG,YAAY,SAAS,CAAC,YAAY,EAAE,EAAE,CAAC;wBACrD,QAAQ,CAAC,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;wBACxC,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,GAAG,EAAE;4BACpC,QAAQ,CAAC,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;wBAC5C,CAAC,CAAC,CAAC;wBACH,QAAQ,CAAC,QAAQ,GAAG,GAAG,EAAE;4BACrB,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;4BAC7C,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;wBACjE,CAAC,CAAC;wBACF,SAAS,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;wBAChC,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;wBACxD,KAAK,CAAC,SAAS,GAAG,WAAW,CAAC;wBAC9B,KAAK,CAAC,OAAO,GAAG,QAAQ,CAAC,EAAE,CAAC;wBAC5B,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;wBAC7B,MAAM;oBACV,CAAC;oBACD,wCAAgC;oBAChC,yCAAiC,CAAC,CAAC,CAAC;wBAChC,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;wBAC9C,YAAY,CACR,SAAS,EACT,IAAI,CAAC,aAAa,EAClB,WAAW,EACX,IAAI,uCAA+B,EACnC,MAAM,EACN,YAAY,EACZ,GAAG,EAAE;4BACD,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;wBACjE,CAAC,EACD,OAAO,CAAC,GAAG,EACX,OAAO,CAAC,GAAG,EACX,IAAI,CAAC,wBAAwB,EAC7B,WAAW,CAAC,UAAU,CACzB,CAAC;wBACF,MAAM;oBACV,CAAC;oBACD,wCAAgC,CAAC,CAAC,CAAC;wBAC/B,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;wBACnD,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;wBACvD,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;wBACzC,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;wBAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;wBAC3D,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;wBACjD,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;wBAC/B,MAAM,KAAK,GAAG,OAAO,CAAC,OAAwC,CAAC;wBAE/D,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,GAAG,EAAE;4BACpC,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,CAAW,CAAC;4BACpD,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,YAAY,CAAC,CAAC;4BACtE,6CAA6C;4BAC7C,MAAM,YAAY,GACd,WAAW,IAAI,CAAC,OAAO,YAAY,KAAK,QAAQ,IAAI,YAAY,IAAI,CAAC,IAAI,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;4BAC5I,UAAU,CAAC,SAAS,GAAG,YAAY,EAAE,KAAK,IAAI,EAAE,CAAC;wBACrD,CAAC,CAAC,CAAC;wBACH,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;wBAC3D,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;wBACjD,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;wBAC9C,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;wBAC/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;4BACvB,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;4BACvD,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;4BACzC,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;4BAC9B,MAAM,CAAC,OAAO,GAAG,GAAG,EAAE;gCAClB,MAAM,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;gCAClC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;4BACjE,CAAC,CAAC;4BACF,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;wBACnC,CAAC;wBAED,MAAM,CAAC,OAAO,GAAG,GAAG,EAAE;4BAClB,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;4BACjD,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;4BAChD,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;4BACnD,IAAI,CAAC,aAAa,CAAC,gBAAgB,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC;wBAC/E,CAAC,CAAC;wBAEF,MAAM,CAAC,cAAc,GAAG,GAAG,EAAE;4BACzB,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;4BAC9C,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;4BAChD,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;4BACnD,IAAI,CAAC,aAAa,CAAC,gBAAgB,GAAG,KAAK,CAAC;wBAChD,CAAC,CAAC;oBACN,CAAC;gBACL,CAAC;YACL,CAAC;QACL,CAAC;QAED,cAAc;QACd,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAExB,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACxC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;QACvI,CAAC;QAED,IAAI,IAAI,CAAC,wBAAwB,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,YAAY,KAAK,CAAC,EAAE,CAAC;YACxE,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC;QACxE,CAAC;QAED,IAAI,CAAC,OAAO,EAAE,CAAC;QAEf,IAAI,CAAC,OAAO,CAAC,eAAe,GAAG,GAAG,EAAE;YAChC,IAAI,CAAC,OAAO,EAAE,CAAC;QACnB,CAAC,CAAC;IACN,CAAC;IAEM,OAAO;QACV,IAAI,IAAI,CAAC,aAAa,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;YACzC,IAAI,CAAC,aAAa,CAAC,UAAU,GAAG,IAAI,CAAC;QACzC,CAAC;QACD,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC;YACzD,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QACrE,CAAC;QAED,yDAAyD;QACzD,IAAI,CAAC,aAAa,CAAC,4BAA4B,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAEtE,IAAI,IAAI,CAAC,2BAA2B,EAAE,CAAC;YACnC,IAAI,CAAC,aAAa,CAAC,4BAA4B,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QAC7F,CAAC;QAED,IAAI,IAAI,CAAC,yBAAyB,EAAE,CAAC;YACjC,IAAI,CAAC,aAAa,CAAC,0BAA0B,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACzF,CAAC;QAED,IAAI,IAAI,CAAC,wBAAwB,EAAE,CAAC;YAChC,IAAI,CAAC,aAAa,CAAC,yBAAyB,CAAC,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACvF,CAAC;QAED,IAAI,IAAI,CAAC,4BAA4B,EAAE,CAAC;YACpC,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QACrF,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;YAC7B,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzD,CAAC;QAED,IAAI,IAAI,CAAC,uBAAuB,EAAE,CAAC;YAC/B,IAAI,CAAC,aAAa,CAAC,wBAAwB,CAAC,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACrF,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YAClC,IAAI,CAAC,OAAO,EAAE,CAAC;QACnB,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACnC,IAAI,CAAC,OAAO,EAAE,CAAC;QACnB,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACnC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACvB,IAAI,CAAC,OAAO,EAAE,CAAC;QACnB,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;;AAziCc,sBAAY,GAAG,CAAC,AAAJ,CAAK","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 * as localStyles from \"./graphNode.module.scss\";\r\nimport * as commonStyles from \"./common.module.scss\";\r\nimport { type IEditablePropertyListOption, type IEditablePropertyOption, type IPropertyDescriptionForEdition, PropertyTypeForEdition } from \"core/Decorators/nodeDecorator\";\r\nimport { ForceRebuild } from \"./automaticProperties\";\r\nimport dropdownArrowIcon from \"../imgs/dropdownArrowIcon_white.svg\";\r\nimport { BuildFloatUI } from \"./tools\";\r\n\r\nexport class GraphNode {\r\n private static _IdGenerator = 0;\r\n private _visual: HTMLDivElement;\r\n private _headerContainer: HTMLDivElement;\r\n private _headerIcon: HTMLDivElement;\r\n private _headerIconImg: HTMLImageElement;\r\n private _headerCollapseImg: HTMLImageElement;\r\n private _header: HTMLDivElement;\r\n private _headerCollapse: HTMLDivElement;\r\n private _connections: HTMLDivElement;\r\n private _optionsContainer: 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 _validationBadge: HTMLDivElement;\r\n private _breakpointBadge: 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 _displayManager: Nullable<IDisplayManager> = null;\r\n private _isVisible = true;\r\n private _enclosingFrameId = -1;\r\n private _lastClick = 0.0;\r\n\r\n public _visualPropertiesRefresh: Array<() => void> = [];\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 /**\r\n * Shows a validation badge on the node header.\r\n * @param severity - \"error\" | \"warning\" | null. Pass null to hide the badge.\r\n * @param tooltip - tooltip text shown on hover.\r\n */\r\n public setValidationState(severity: \"error\" | \"warning\" | null, tooltip?: string): void {\r\n if (!this._validationBadge) {\r\n return;\r\n }\r\n this._validationBadge.classList.remove(localStyles[\"validationError\"], localStyles[\"validationWarning\"]);\r\n if (!severity) {\r\n this._validationBadge.style.display = \"none\";\r\n this._validationBadge.title = \"\";\r\n return;\r\n }\r\n this._validationBadge.style.display = \"\";\r\n this._validationBadge.classList.add(severity === \"error\" ? localStyles[\"validationError\"] : localStyles[\"validationWarning\"]);\r\n this._validationBadge.title = tooltip ?? \"\";\r\n }\r\n\r\n /**\r\n * Shows or hides a breakpoint indicator on the node.\r\n * @param active - true to show the red breakpoint dot, false to hide.\r\n * @param paused - true if execution is currently paused on this breakpoint.\r\n */\r\n public setBreakpointState(active: boolean, paused: boolean = false): void {\r\n if (!this._breakpointBadge) {\r\n return;\r\n }\r\n this._breakpointBadge.classList.remove(localStyles[\"breakpointActive\"], localStyles[\"breakpointPaused\"]);\r\n if (!active) {\r\n this._breakpointBadge.style.display = \"none\";\r\n return;\r\n }\r\n this._breakpointBadge.style.display = \"\";\r\n this._breakpointBadge.classList.add(paused ? localStyles[\"breakpointPaused\"] : localStyles[\"breakpointActive\"]);\r\n }\r\n\r\n public get isCollapsed() {\r\n return this._isCollapsed;\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 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 setIsSelected(value: boolean, marqueeSelection: boolean) {\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 if (this.content.canBeActivated) {\r\n this.content.setIsActive?.(true);\r\n this._stateManager.queueRebuildCommand();\r\n }\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 this._stateManager.activeNode = this;\r\n } else {\r\n if (this._stateManager.activeNode === this) {\r\n this._stateManager.activeNode = null;\r\n }\r\n if (this._ownerCanvas.selectedNodes.indexOf(this) === -1) {\r\n if (this.content.canBeActivated && this.content.isActive) {\r\n this.content.setIsActive?.(false);\r\n this._stateManager.queueRebuildCommand();\r\n }\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 content.onInputCountChanged = () => {\r\n this._buildInputPorts(true);\r\n };\r\n\r\n content.onInputRemoved = (index: number) => {\r\n this._removeInputPort(index);\r\n };\r\n\r\n content.onOutputCountChanged = () => {\r\n this._buildOutputPorts(true);\r\n };\r\n\r\n content.onOutputRemoved = (index: number) => {\r\n this._removeOutputPort(index);\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 const headerText = this._displayManager.getHeaderText(this.content);\r\n this._header.innerHTML = headerText;\r\n this._header.title = headerText;\r\n this._displayManager.updatePreviewContent(this.content, this._content);\r\n const backgroundColor = this._displayManager.getBackgroundColor(this.content);\r\n if (backgroundColor) {\r\n this._visual.style.background = backgroundColor;\r\n }\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 this._header.title = this.content.name;\r\n }\r\n\r\n for (const refresh of this._visualPropertiesRefresh) {\r\n refresh();\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 }\r\n\r\n // Search nodes is direction of node from this\r\n private _expand(node: GraphNode) {\r\n const queue: GraphNode[] = [];\r\n let right = undefined;\r\n for (const link of this.links) {\r\n if (link.nodeA == this && link.nodeB == node) {\r\n right = false;\r\n }\r\n if (link.nodeB == this && link.nodeA == node) {\r\n right = true;\r\n }\r\n }\r\n if (right != undefined) {\r\n const loop = (right: boolean) => {\r\n const last = queue[queue.length - 1];\r\n for (const link of last.links) {\r\n if (right && link.nodeA == last && link.nodeB != undefined) {\r\n queue.push(link.nodeB);\r\n loop(right);\r\n }\r\n if (!right && link.nodeB == last && link.nodeA != undefined) {\r\n queue.push(link.nodeA);\r\n loop(right);\r\n }\r\n }\r\n };\r\n queue.push(node);\r\n loop(right);\r\n }\r\n return queue;\r\n }\r\n\r\n // Search nodes between node and this\r\n private _searchMiddle(node: GraphNode) {\r\n let middle: GraphNode[] = [];\r\n const loop = (nodes: GraphNode[], right: boolean) => {\r\n const last = nodes[nodes.length - 1];\r\n for (const link of last.links) {\r\n const newNodes = Object.assign([], nodes);\r\n if (right && link.nodeA == last && link.nodeB != undefined) {\r\n newNodes.push(link.nodeB);\r\n if (link.nodeB == this) {\r\n middle = newNodes;\r\n return;\r\n } else {\r\n loop(newNodes, right);\r\n }\r\n }\r\n if (!right && link.nodeB == last && link.nodeA != undefined) {\r\n newNodes.push(link.nodeA);\r\n if (link.nodeA == this) {\r\n middle = newNodes;\r\n return;\r\n } else {\r\n loop(newNodes, right);\r\n }\r\n }\r\n }\r\n };\r\n loop([node], true);\r\n if (!middle.length) {\r\n loop([node], false);\r\n }\r\n return middle;\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).classList.contains(\"port-icon\")) {\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 // Shift key\r\n if (evt.shiftKey && this._ownerCanvas.selectedNodes.length > 1) {\r\n // Last selected\r\n const last = this._ownerCanvas.selectedNodes[this._ownerCanvas.selectedNodes.length - 2];\r\n if (performance.now() - this._lastClick > 300) {\r\n // Simple click\r\n const middle = this._searchMiddle(last);\r\n for (const node of middle) {\r\n this._stateManager.onSelectionChangedObservable.notifyObservers({ selection: node });\r\n }\r\n } else {\r\n // Double click\r\n const queue = this._expand(last);\r\n for (const node of queue) {\r\n this._stateManager.onSelectionChangedObservable.notifyObservers({ selection: node });\r\n }\r\n }\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 this._lastClick = performance.now();\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, { stateManager: this._stateManager, nodeData: this.content });\r\n }\r\n\r\n public _forceRebuild(source: any, propertyName: string, notifiers?: IEditablePropertyOption[\"notifiers\"]) {\r\n for (const refresh of this._visualPropertiesRefresh) {\r\n refresh();\r\n }\r\n ForceRebuild(source, this._stateManager, propertyName, notifiers, false);\r\n }\r\n\r\n private _isCollapsed = false;\r\n\r\n /**\r\n * Collapse the node\r\n */\r\n public collapse() {\r\n this._headerCollapse.classList.add(localStyles.collapsed);\r\n const inputs = this._inputPorts.filter((p) => !p.portData.isConnected);\r\n\r\n for (const p of inputs) {\r\n p.container.classList.add(commonStyles.hidden);\r\n }\r\n\r\n const outputs = this._outputPorts.filter((p) => !p.portData.isConnected);\r\n\r\n for (const p of outputs) {\r\n p.container.classList.add(commonStyles.hidden);\r\n }\r\n\r\n this._refreshLinks();\r\n }\r\n\r\n /**\r\n * Expand the node\r\n */\r\n public expand() {\r\n this._headerCollapse.classList.remove(localStyles.collapsed);\r\n const inputs = this._inputPorts.filter((p) => !p.portData.isConnected);\r\n for (const p of inputs) {\r\n p.container.classList.remove(commonStyles.hidden);\r\n }\r\n\r\n const outputs = this._outputPorts.filter((p) => !p.portData.isConnected);\r\n for (const p of outputs) {\r\n p.container.classList.remove(commonStyles.hidden);\r\n }\r\n\r\n this._refreshLinks();\r\n }\r\n\r\n private _portUICount = 0;\r\n private _buildInputPorts(addOnly = false) {\r\n for (const input of this.content.inputs) {\r\n if (addOnly) {\r\n // Search if the port already exists\r\n const existingPort = this._inputPorts.find((p) => p.portData === input);\r\n if (existingPort) {\r\n continue;\r\n }\r\n }\r\n\r\n if (input.directValueDefinition) {\r\n this._portUICount++;\r\n }\r\n this._inputPorts.push(NodePort.CreatePortElement(input, this, this._inputsContainer, this._displayManager, this._stateManager));\r\n }\r\n }\r\n\r\n private _removeInputPort(index: number) {\r\n const port = this._inputPorts[index];\r\n port.remove();\r\n this._inputPorts.splice(index, 1);\r\n }\r\n\r\n private _buildOutputPorts(addOnly = false) {\r\n for (const output of this.content.outputs) {\r\n if (addOnly) {\r\n const existingPort = this._outputPorts.find((p) => p.portData === output);\r\n if (existingPort) {\r\n continue;\r\n }\r\n }\r\n this._outputPorts.push(NodePort.CreatePortElement(output, this, this._outputsContainer, this._displayManager, this._stateManager));\r\n }\r\n }\r\n\r\n private _removeOutputPort(index: number) {\r\n const port = this._outputPorts[index];\r\n port.remove();\r\n this._outputPorts.splice(index, 1);\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._headerIconImg.draggable = false;\r\n this._headerIcon.appendChild(this._headerIconImg);\r\n this._headerContainer.appendChild(this._headerIcon);\r\n\r\n if (this.content.inputs.length > 1 || this.content.outputs.length > 1) {\r\n this._headerCollapse = root.ownerDocument.createElement(\"div\");\r\n this._headerCollapse.classList.add(localStyles.headerCollapse);\r\n this._headerCollapseImg = root.ownerDocument.createElement(\"img\");\r\n this._headerCollapseImg.src = dropdownArrowIcon;\r\n this._headerCollapseImg.draggable = false;\r\n this._headerCollapse.appendChild(this._headerCollapseImg);\r\n this._headerContainer.appendChild(this._headerCollapse);\r\n this._headerCollapse.addEventListener(\"pointerup\", (evt) => evt.stopPropagation());\r\n this._headerCollapse.addEventListener(\"pointermove\", (evt) => evt.stopPropagation());\r\n this._headerCollapse.addEventListener(\"pointerdown\", (evt) => {\r\n this._isCollapsed = !this._isCollapsed;\r\n if (this._isCollapsed) {\r\n this.collapse();\r\n } else {\r\n this.expand();\r\n }\r\n evt.stopPropagation();\r\n });\r\n }\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._optionsContainer = root.ownerDocument.createElement(\"div\");\r\n this._optionsContainer.classList.add(localStyles.optionsContainer);\r\n this._connections.appendChild(this._optionsContainer);\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 // Execution time\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 // Validation badge (opt-in)\r\n if (this._stateManager.enableNodeBadges) {\r\n this._validationBadge = root.ownerDocument.createElement(\"div\");\r\n this._validationBadge.classList.add(localStyles.validationBadge);\r\n this._validationBadge.style.display = \"none\";\r\n this._headerContainer.appendChild(this._validationBadge);\r\n }\r\n\r\n // Breakpoint badge (opt-in)\r\n if (this._stateManager.enableNodeBadges) {\r\n this._breakpointBadge = root.ownerDocument.createElement(\"div\");\r\n this._breakpointBadge.classList.add(localStyles.breakpointBadge);\r\n this._breakpointBadge.style.display = \"none\";\r\n this._headerContainer.appendChild(this._breakpointBadge);\r\n }\r\n\r\n // Options\r\n const propStore: IPropertyDescriptionForEdition[] = this.content.data._propStore;\r\n if (propStore) {\r\n const source = this.content.data;\r\n\r\n const classes: string[] = [];\r\n\r\n let proto = Object.getPrototypeOf(source);\r\n while (proto && proto.getClassName) {\r\n classes.push(proto.getClassName());\r\n proto = Object.getPrototypeOf(proto);\r\n }\r\n\r\n for (const { propertyName, displayName, type, options, className } of propStore) {\r\n if (!options || !options.embedded || classes.indexOf(className) === -1) {\r\n continue;\r\n }\r\n\r\n const container = root.ownerDocument.createElement(\"div\");\r\n container.addEventListener(\"pointerdown\", (evt) => evt.stopPropagation());\r\n container.addEventListener(\"pointerup\", (evt) => evt.stopPropagation());\r\n container.addEventListener(\"pointermove\", (evt) => evt.stopPropagation());\r\n this._optionsContainer.appendChild(container);\r\n switch (type) {\r\n case PropertyTypeForEdition.Boolean: {\r\n container.classList.add(localStyles.booleanContainer);\r\n const checkbox = root.ownerDocument.createElement(\"input\");\r\n checkbox.type = \"checkbox\";\r\n checkbox.id = `checkbox-${GraphNode._IdGenerator++}`;\r\n checkbox.checked = source[propertyName];\r\n this._visualPropertiesRefresh.push(() => {\r\n checkbox.checked = source[propertyName];\r\n });\r\n checkbox.onchange = () => {\r\n source[propertyName] = !source[propertyName];\r\n this._forceRebuild(source, propertyName, options?.notifiers);\r\n };\r\n container.appendChild(checkbox);\r\n const label = root.ownerDocument.createElement(\"label\");\r\n label.innerText = displayName;\r\n label.htmlFor = checkbox.id;\r\n container.appendChild(label);\r\n break;\r\n }\r\n case PropertyTypeForEdition.Int:\r\n case PropertyTypeForEdition.Float: {\r\n this._optionsContainer.appendChild(container);\r\n BuildFloatUI(\r\n container,\r\n root.ownerDocument,\r\n displayName,\r\n type === PropertyTypeForEdition.Int,\r\n source,\r\n propertyName,\r\n () => {\r\n this._forceRebuild(source, propertyName, options?.notifiers);\r\n },\r\n options.min,\r\n options.max,\r\n this._visualPropertiesRefresh,\r\n localStyles.standalone\r\n );\r\n break;\r\n }\r\n case PropertyTypeForEdition.List: {\r\n container.classList.add(localStyles.listContainer);\r\n const select = root.ownerDocument.createElement(\"div\");\r\n select.classList.add(localStyles.select);\r\n container.appendChild(select);\r\n const selectText = root.ownerDocument.createElement(\"div\");\r\n selectText.classList.add(localStyles.selectText);\r\n select.appendChild(selectText);\r\n const items = options.options as IEditablePropertyListOption[];\r\n\r\n this._visualPropertiesRefresh.push(() => {\r\n const currentValue = source[propertyName] as number;\r\n const matchedItem = items.find((item) => item.value === currentValue);\r\n // Back-compat fallback for index based lists\r\n const fallbackItem =\r\n matchedItem ?? (typeof currentValue === \"number\" && currentValue >= 0 && currentValue < items.length ? items[currentValue] : undefined);\r\n selectText.innerText = fallbackItem?.label ?? \"\";\r\n });\r\n const selectList = root.ownerDocument.createElement(\"div\");\r\n selectList.classList.add(localStyles.selectList);\r\n selectList.classList.add(commonStyles.hidden);\r\n select.appendChild(selectList);\r\n for (const item of items) {\r\n const option = root.ownerDocument.createElement(\"div\");\r\n option.classList.add(localStyles.option);\r\n option.innerText = item.label;\r\n option.onclick = () => {\r\n source[propertyName] = item.value;\r\n this._forceRebuild(source, propertyName, options?.notifiers);\r\n };\r\n selectList.appendChild(option);\r\n }\r\n\r\n select.onclick = () => {\r\n selectList.classList.toggle(commonStyles.hidden);\r\n select.classList.toggle(localStyles.activeNode);\r\n this._visual.classList.toggle(localStyles.topMost);\r\n this._stateManager.modalIsDisplayed = !this._stateManager.modalIsDisplayed;\r\n };\r\n\r\n select.onpointerleave = () => {\r\n selectList.classList.add(commonStyles.hidden);\r\n select.classList.remove(localStyles.activeNode);\r\n this._visual.classList.remove(localStyles.topMost);\r\n this._stateManager.modalIsDisplayed = false;\r\n };\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Connections\r\n this._buildInputPorts();\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 if (this._visualPropertiesRefresh.length === 0 && this._portUICount === 0) {\r\n this._inputsContainer.classList.add(commonStyles.inputsContainerUp);\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._stateManager.activeNode === this) {\r\n this._stateManager.activeNode = null;\r\n }\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 * as localStyles from \"./graphNode.module.scss\";\r\nimport * as commonStyles from \"./common.module.scss\";\r\nimport { type IEditablePropertyListOption, type IEditablePropertyOption, type IPropertyDescriptionForEdition, PropertyTypeForEdition } from \"core/Decorators/nodeDecorator\";\r\nimport { ForceRebuild } from \"./automaticProperties\";\r\nimport dropdownArrowIcon from \"../imgs/dropdownArrowIcon_white.svg\";\r\nimport { BuildFloatUI } from \"./tools\";\r\n\r\nexport class GraphNode {\r\n private static _IdGenerator = 0;\r\n private _visual: HTMLDivElement;\r\n private _headerContainer: HTMLDivElement;\r\n private _headerIcon: HTMLDivElement;\r\n private _headerIconImg: HTMLImageElement;\r\n private _headerCollapseImg: HTMLImageElement;\r\n private _header: HTMLDivElement;\r\n private _headerCollapse: HTMLDivElement;\r\n private _connections: HTMLDivElement;\r\n private _optionsContainer: 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 _validationBadge: HTMLDivElement;\r\n private _breakpointBadge: 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 _displayManager: Nullable<IDisplayManager> = null;\r\n private _isVisible = true;\r\n private _enclosingFrameId = -1;\r\n private _lastClick = 0.0;\r\n\r\n public _visualPropertiesRefresh: Array<() => void> = [];\r\n\r\n /** Direct access to the execution time label element for lightweight updates */\r\n public get executionTimeElement(): HTMLDivElement {\r\n return this._executionTime;\r\n }\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 /**\r\n * Shows a validation badge on the node header.\r\n * @param severity - \"error\" | \"warning\" | null. Pass null to hide the badge.\r\n * @param tooltip - tooltip text shown on hover.\r\n */\r\n public setValidationState(severity: \"error\" | \"warning\" | null, tooltip?: string): void {\r\n if (!this._validationBadge) {\r\n return;\r\n }\r\n this._validationBadge.classList.remove(localStyles[\"validationError\"], localStyles[\"validationWarning\"]);\r\n if (!severity) {\r\n this._validationBadge.style.display = \"none\";\r\n this._validationBadge.title = \"\";\r\n return;\r\n }\r\n this._validationBadge.style.display = \"\";\r\n this._validationBadge.classList.add(severity === \"error\" ? localStyles[\"validationError\"] : localStyles[\"validationWarning\"]);\r\n this._validationBadge.title = tooltip ?? \"\";\r\n }\r\n\r\n /**\r\n * Shows or hides a breakpoint indicator on the node.\r\n * @param active - true to show the red breakpoint dot, false to hide.\r\n * @param paused - true if execution is currently paused on this breakpoint.\r\n */\r\n public setBreakpointState(active: boolean, paused: boolean = false): void {\r\n if (!this._breakpointBadge) {\r\n return;\r\n }\r\n this._breakpointBadge.classList.remove(localStyles[\"breakpointActive\"], localStyles[\"breakpointPaused\"]);\r\n if (!active) {\r\n this._breakpointBadge.style.display = \"none\";\r\n return;\r\n }\r\n this._breakpointBadge.style.display = \"\";\r\n this._breakpointBadge.classList.add(paused ? localStyles[\"breakpointPaused\"] : localStyles[\"breakpointActive\"]);\r\n }\r\n\r\n public get isCollapsed() {\r\n return this._isCollapsed;\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 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 setIsSelected(value: boolean, marqueeSelection: boolean) {\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 if (this.content.canBeActivated) {\r\n this.content.setIsActive?.(true);\r\n this._stateManager.queueRebuildCommand();\r\n }\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 this._stateManager.activeNode = this;\r\n } else {\r\n if (this._stateManager.activeNode === this) {\r\n this._stateManager.activeNode = null;\r\n }\r\n if (this._ownerCanvas.selectedNodes.indexOf(this) === -1) {\r\n if (this.content.canBeActivated && this.content.isActive) {\r\n this.content.setIsActive?.(false);\r\n this._stateManager.queueRebuildCommand();\r\n }\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 content.onInputCountChanged = () => {\r\n this._buildInputPorts(true);\r\n };\r\n\r\n content.onInputRemoved = (index: number) => {\r\n this._removeInputPort(index);\r\n };\r\n\r\n content.onOutputCountChanged = () => {\r\n this._buildOutputPorts(true);\r\n };\r\n\r\n content.onOutputRemoved = (index: number) => {\r\n this._removeOutputPort(index);\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 const headerText = this._displayManager.getHeaderText(this.content);\r\n this._header.innerHTML = headerText;\r\n this._header.title = headerText;\r\n this._displayManager.updatePreviewContent(this.content, this._content);\r\n const backgroundColor = this._displayManager.getBackgroundColor(this.content);\r\n if (backgroundColor) {\r\n this._visual.style.background = backgroundColor;\r\n }\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 this._header.title = this.content.name;\r\n }\r\n\r\n for (const refresh of this._visualPropertiesRefresh) {\r\n refresh();\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 }\r\n\r\n // Search nodes is direction of node from this\r\n private _expand(node: GraphNode) {\r\n const queue: GraphNode[] = [];\r\n let right = undefined;\r\n for (const link of this.links) {\r\n if (link.nodeA == this && link.nodeB == node) {\r\n right = false;\r\n }\r\n if (link.nodeB == this && link.nodeA == node) {\r\n right = true;\r\n }\r\n }\r\n if (right != undefined) {\r\n const loop = (right: boolean) => {\r\n const last = queue[queue.length - 1];\r\n for (const link of last.links) {\r\n if (right && link.nodeA == last && link.nodeB != undefined) {\r\n queue.push(link.nodeB);\r\n loop(right);\r\n }\r\n if (!right && link.nodeB == last && link.nodeA != undefined) {\r\n queue.push(link.nodeA);\r\n loop(right);\r\n }\r\n }\r\n };\r\n queue.push(node);\r\n loop(right);\r\n }\r\n return queue;\r\n }\r\n\r\n // Search nodes between node and this\r\n private _searchMiddle(node: GraphNode) {\r\n let middle: GraphNode[] = [];\r\n const loop = (nodes: GraphNode[], right: boolean) => {\r\n const last = nodes[nodes.length - 1];\r\n for (const link of last.links) {\r\n const newNodes = Object.assign([], nodes);\r\n if (right && link.nodeA == last && link.nodeB != undefined) {\r\n newNodes.push(link.nodeB);\r\n if (link.nodeB == this) {\r\n middle = newNodes;\r\n return;\r\n } else {\r\n loop(newNodes, right);\r\n }\r\n }\r\n if (!right && link.nodeB == last && link.nodeA != undefined) {\r\n newNodes.push(link.nodeA);\r\n if (link.nodeA == this) {\r\n middle = newNodes;\r\n return;\r\n } else {\r\n loop(newNodes, right);\r\n }\r\n }\r\n }\r\n };\r\n loop([node], true);\r\n if (!middle.length) {\r\n loop([node], false);\r\n }\r\n return middle;\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).classList.contains(\"port-icon\")) {\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 // Shift key\r\n if (evt.shiftKey && this._ownerCanvas.selectedNodes.length > 1) {\r\n // Last selected\r\n const last = this._ownerCanvas.selectedNodes[this._ownerCanvas.selectedNodes.length - 2];\r\n if (performance.now() - this._lastClick > 300) {\r\n // Simple click\r\n const middle = this._searchMiddle(last);\r\n for (const node of middle) {\r\n this._stateManager.onSelectionChangedObservable.notifyObservers({ selection: node });\r\n }\r\n } else {\r\n // Double click\r\n const queue = this._expand(last);\r\n for (const node of queue) {\r\n this._stateManager.onSelectionChangedObservable.notifyObservers({ selection: node });\r\n }\r\n }\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 this._lastClick = performance.now();\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, { stateManager: this._stateManager, nodeData: this.content });\r\n }\r\n\r\n public _forceRebuild(source: any, propertyName: string, notifiers?: IEditablePropertyOption[\"notifiers\"]) {\r\n for (const refresh of this._visualPropertiesRefresh) {\r\n refresh();\r\n }\r\n ForceRebuild(source, this._stateManager, propertyName, notifiers, false);\r\n }\r\n\r\n private _isCollapsed = false;\r\n\r\n /**\r\n * Collapse the node\r\n */\r\n public collapse() {\r\n this._headerCollapse.classList.add(localStyles.collapsed);\r\n const inputs = this._inputPorts.filter((p) => !p.portData.isConnected);\r\n\r\n for (const p of inputs) {\r\n p.container.classList.add(commonStyles.hidden);\r\n }\r\n\r\n const outputs = this._outputPorts.filter((p) => !p.portData.isConnected);\r\n\r\n for (const p of outputs) {\r\n p.container.classList.add(commonStyles.hidden);\r\n }\r\n\r\n this._refreshLinks();\r\n }\r\n\r\n /**\r\n * Expand the node\r\n */\r\n public expand() {\r\n this._headerCollapse.classList.remove(localStyles.collapsed);\r\n const inputs = this._inputPorts.filter((p) => !p.portData.isConnected);\r\n for (const p of inputs) {\r\n p.container.classList.remove(commonStyles.hidden);\r\n }\r\n\r\n const outputs = this._outputPorts.filter((p) => !p.portData.isConnected);\r\n for (const p of outputs) {\r\n p.container.classList.remove(commonStyles.hidden);\r\n }\r\n\r\n this._refreshLinks();\r\n }\r\n\r\n private _portUICount = 0;\r\n private _buildInputPorts(addOnly = false) {\r\n for (const input of this.content.inputs) {\r\n if (addOnly) {\r\n // Search if the port already exists\r\n const existingPort = this._inputPorts.find((p) => p.portData === input);\r\n if (existingPort) {\r\n continue;\r\n }\r\n }\r\n\r\n if (input.directValueDefinition) {\r\n this._portUICount++;\r\n }\r\n this._inputPorts.push(NodePort.CreatePortElement(input, this, this._inputsContainer, this._displayManager, this._stateManager));\r\n }\r\n }\r\n\r\n private _removeInputPort(index: number) {\r\n const port = this._inputPorts[index];\r\n port.remove();\r\n this._inputPorts.splice(index, 1);\r\n }\r\n\r\n private _buildOutputPorts(addOnly = false) {\r\n for (const output of this.content.outputs) {\r\n if (addOnly) {\r\n const existingPort = this._outputPorts.find((p) => p.portData === output);\r\n if (existingPort) {\r\n continue;\r\n }\r\n }\r\n this._outputPorts.push(NodePort.CreatePortElement(output, this, this._outputsContainer, this._displayManager, this._stateManager));\r\n }\r\n }\r\n\r\n private _removeOutputPort(index: number) {\r\n const port = this._outputPorts[index];\r\n port.remove();\r\n this._outputPorts.splice(index, 1);\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._headerIconImg.draggable = false;\r\n this._headerIcon.appendChild(this._headerIconImg);\r\n this._headerContainer.appendChild(this._headerIcon);\r\n\r\n if (this.content.inputs.length > 1 || this.content.outputs.length > 1) {\r\n this._headerCollapse = root.ownerDocument.createElement(\"div\");\r\n this._headerCollapse.classList.add(localStyles.headerCollapse);\r\n this._headerCollapseImg = root.ownerDocument.createElement(\"img\");\r\n this._headerCollapseImg.src = dropdownArrowIcon;\r\n this._headerCollapseImg.draggable = false;\r\n this._headerCollapse.appendChild(this._headerCollapseImg);\r\n this._headerContainer.appendChild(this._headerCollapse);\r\n this._headerCollapse.addEventListener(\"pointerup\", (evt) => evt.stopPropagation());\r\n this._headerCollapse.addEventListener(\"pointermove\", (evt) => evt.stopPropagation());\r\n this._headerCollapse.addEventListener(\"pointerdown\", (evt) => {\r\n this._isCollapsed = !this._isCollapsed;\r\n if (this._isCollapsed) {\r\n this.collapse();\r\n } else {\r\n this.expand();\r\n }\r\n evt.stopPropagation();\r\n });\r\n }\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._optionsContainer = root.ownerDocument.createElement(\"div\");\r\n this._optionsContainer.classList.add(localStyles.optionsContainer);\r\n this._connections.appendChild(this._optionsContainer);\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 // Execution time\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 // Validation badge (opt-in)\r\n if (this._stateManager.enableNodeBadges) {\r\n this._validationBadge = root.ownerDocument.createElement(\"div\");\r\n this._validationBadge.classList.add(localStyles.validationBadge);\r\n this._validationBadge.style.display = \"none\";\r\n this._headerContainer.appendChild(this._validationBadge);\r\n }\r\n\r\n // Breakpoint badge (opt-in)\r\n if (this._stateManager.enableNodeBadges) {\r\n this._breakpointBadge = root.ownerDocument.createElement(\"div\");\r\n this._breakpointBadge.classList.add(localStyles.breakpointBadge);\r\n this._breakpointBadge.style.display = \"none\";\r\n this._headerContainer.appendChild(this._breakpointBadge);\r\n }\r\n\r\n // Options\r\n const propStore: IPropertyDescriptionForEdition[] = this.content.data._propStore;\r\n if (propStore) {\r\n const source = this.content.data;\r\n\r\n const classes: string[] = [];\r\n\r\n let proto = Object.getPrototypeOf(source);\r\n while (proto && proto.getClassName) {\r\n classes.push(proto.getClassName());\r\n proto = Object.getPrototypeOf(proto);\r\n }\r\n\r\n for (const { propertyName, displayName, type, options, className } of propStore) {\r\n if (!options || !options.embedded || classes.indexOf(className) === -1) {\r\n continue;\r\n }\r\n\r\n const container = root.ownerDocument.createElement(\"div\");\r\n container.addEventListener(\"pointerdown\", (evt) => evt.stopPropagation());\r\n container.addEventListener(\"pointerup\", (evt) => evt.stopPropagation());\r\n container.addEventListener(\"pointermove\", (evt) => evt.stopPropagation());\r\n this._optionsContainer.appendChild(container);\r\n switch (type) {\r\n case PropertyTypeForEdition.Boolean: {\r\n container.classList.add(localStyles.booleanContainer);\r\n const checkbox = root.ownerDocument.createElement(\"input\");\r\n checkbox.type = \"checkbox\";\r\n checkbox.id = `checkbox-${GraphNode._IdGenerator++}`;\r\n checkbox.checked = source[propertyName];\r\n this._visualPropertiesRefresh.push(() => {\r\n checkbox.checked = source[propertyName];\r\n });\r\n checkbox.onchange = () => {\r\n source[propertyName] = !source[propertyName];\r\n this._forceRebuild(source, propertyName, options?.notifiers);\r\n };\r\n container.appendChild(checkbox);\r\n const label = root.ownerDocument.createElement(\"label\");\r\n label.innerText = displayName;\r\n label.htmlFor = checkbox.id;\r\n container.appendChild(label);\r\n break;\r\n }\r\n case PropertyTypeForEdition.Int:\r\n case PropertyTypeForEdition.Float: {\r\n this._optionsContainer.appendChild(container);\r\n BuildFloatUI(\r\n container,\r\n root.ownerDocument,\r\n displayName,\r\n type === PropertyTypeForEdition.Int,\r\n source,\r\n propertyName,\r\n () => {\r\n this._forceRebuild(source, propertyName, options?.notifiers);\r\n },\r\n options.min,\r\n options.max,\r\n this._visualPropertiesRefresh,\r\n localStyles.standalone\r\n );\r\n break;\r\n }\r\n case PropertyTypeForEdition.List: {\r\n container.classList.add(localStyles.listContainer);\r\n const select = root.ownerDocument.createElement(\"div\");\r\n select.classList.add(localStyles.select);\r\n container.appendChild(select);\r\n const selectText = root.ownerDocument.createElement(\"div\");\r\n selectText.classList.add(localStyles.selectText);\r\n select.appendChild(selectText);\r\n const items = options.options as IEditablePropertyListOption[];\r\n\r\n this._visualPropertiesRefresh.push(() => {\r\n const currentValue = source[propertyName] as number;\r\n const matchedItem = items.find((item) => item.value === currentValue);\r\n // Back-compat fallback for index based lists\r\n const fallbackItem =\r\n matchedItem ?? (typeof currentValue === \"number\" && currentValue >= 0 && currentValue < items.length ? items[currentValue] : undefined);\r\n selectText.innerText = fallbackItem?.label ?? \"\";\r\n });\r\n const selectList = root.ownerDocument.createElement(\"div\");\r\n selectList.classList.add(localStyles.selectList);\r\n selectList.classList.add(commonStyles.hidden);\r\n select.appendChild(selectList);\r\n for (const item of items) {\r\n const option = root.ownerDocument.createElement(\"div\");\r\n option.classList.add(localStyles.option);\r\n option.innerText = item.label;\r\n option.onclick = () => {\r\n source[propertyName] = item.value;\r\n this._forceRebuild(source, propertyName, options?.notifiers);\r\n };\r\n selectList.appendChild(option);\r\n }\r\n\r\n select.onclick = () => {\r\n selectList.classList.toggle(commonStyles.hidden);\r\n select.classList.toggle(localStyles.activeNode);\r\n this._visual.classList.toggle(localStyles.topMost);\r\n this._stateManager.modalIsDisplayed = !this._stateManager.modalIsDisplayed;\r\n };\r\n\r\n select.onpointerleave = () => {\r\n selectList.classList.add(commonStyles.hidden);\r\n select.classList.remove(localStyles.activeNode);\r\n this._visual.classList.remove(localStyles.topMost);\r\n this._stateManager.modalIsDisplayed = false;\r\n };\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Connections\r\n this._buildInputPorts();\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 if (this._visualPropertiesRefresh.length === 0 && this._portUICount === 0) {\r\n this._inputsContainer.classList.add(commonStyles.inputsContainerUp);\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._stateManager.activeNode === this) {\r\n this._stateManager.activeNode = null;\r\n }\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"]}
|