@babylonjs/shared-ui-components 7.24.0 → 7.25.0

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.
@@ -46,8 +46,8 @@ export class HexLineComponent extends React.Component {
46
46
  return valueString;
47
47
  }
48
48
  updateValue(valueString, raisePropertyChanged) {
49
- if (valueString.substr(0, 2) != "0x") {
50
- if (valueString.substr(0, 1) != "0") {
49
+ if (valueString.substring(0, 2) != "0x") {
50
+ if (valueString.substring(0, 1) != "0") {
51
51
  valueString = "0x" + valueString;
52
52
  }
53
53
  else {
@@ -1 +1 @@
1
- {"version":3,"file":"hexLineComponent.js","sourceRoot":"","sources":["../../../../dev/sharedUiComponents/src/lines/hexLineComponent.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from \"react\";\r\nimport type { Observable } from \"core/Misc/observable\";\r\nimport type { PropertyChangedEvent } from \"../propertyChangedEvent\";\r\nimport type { LockObject } from \"../tabs/propertyGrids/lockObject\";\r\n\r\ninterface IHexLineComponentProps {\r\n label: string;\r\n target: any;\r\n propertyName: string;\r\n lockObject?: LockObject;\r\n onChange?: (newValue: number) => void;\r\n isInteger?: boolean;\r\n replaySourceReplacement?: string;\r\n onPropertyChangedObservable?: Observable<PropertyChangedEvent>;\r\n additionalClass?: string;\r\n step?: string;\r\n digits?: number;\r\n useEuler?: boolean;\r\n min?: number;\r\n icon?: string;\r\n iconLabel?: string;\r\n}\r\n\r\nexport class HexLineComponent extends React.Component<IHexLineComponentProps, { value: string }> {\r\n private _localChange = false;\r\n private _store: number;\r\n private _propertyChange = true;\r\n\r\n constructor(props: IHexLineComponentProps) {\r\n super(props);\r\n\r\n const currentValue = this.props.target[this.props.propertyName];\r\n this.state = { value: currentValue ? (this.props.isInteger ? currentValue.toFixed(0) : currentValue.toFixed(this.props.digits || 3)) : \"0\" };\r\n this._store = currentValue;\r\n }\r\n\r\n override componentWillUnmount() {\r\n this.unlock();\r\n }\r\n\r\n override shouldComponentUpdate(nextProps: IHexLineComponentProps, nextState: { value: string }) {\r\n if (this._localChange) {\r\n this._localChange = false;\r\n return true;\r\n }\r\n\r\n const newValue = nextProps.target[nextProps.propertyName];\r\n const newValueString = newValue ? (this.props.isInteger ? newValue.toFixed(0) : newValue.toFixed(this.props.digits || 3)) : \"0\";\r\n\r\n if (newValueString !== nextState.value) {\r\n nextState.value = newValueString;\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n raiseOnPropertyChanged(newValue: number, previousValue: number) {\r\n if (this.props.onChange) {\r\n this.props.onChange(newValue);\r\n }\r\n\r\n if (!this.props.onPropertyChangedObservable) {\r\n return;\r\n }\r\n this.props.onPropertyChangedObservable.notifyObservers({\r\n object: this.props.replaySourceReplacement ?? this.props.target,\r\n property: this.props.propertyName,\r\n value: newValue,\r\n initialValue: previousValue,\r\n });\r\n }\r\n\r\n convertToHexString(valueString: string): string {\r\n while (valueString.length < 10) {\r\n valueString += \"0\";\r\n }\r\n return valueString;\r\n }\r\n\r\n updateValue(valueString: string, raisePropertyChanged: boolean) {\r\n if (valueString.substr(0, 2) != \"0x\") {\r\n if (valueString.substr(0, 1) != \"0\") {\r\n valueString = \"0x\" + valueString;\r\n } else {\r\n valueString = \"0x\" + valueString.substr(1);\r\n }\r\n }\r\n\r\n const valueSubstr = valueString.substr(2);\r\n if (valueSubstr != \"\" && /^[0-9A-Fa-f]+$/g.test(valueSubstr) == false) {\r\n return;\r\n }\r\n\r\n if (valueString.length > 10) {\r\n return;\r\n }\r\n\r\n const valueStringAsHex = this.convertToHexString(valueString);\r\n let valueAsNumber: number;\r\n\r\n valueAsNumber = parseInt(valueStringAsHex);\r\n\r\n if (!isNaN(valueAsNumber) && this.props.min !== undefined) {\r\n if (valueAsNumber < this.props.min) {\r\n valueAsNumber = this.props.min;\r\n valueString = valueAsNumber.toString();\r\n }\r\n }\r\n\r\n this._localChange = true;\r\n\r\n if (isNaN(valueAsNumber)) {\r\n return;\r\n }\r\n\r\n this.setState({ value: valueString });\r\n if (raisePropertyChanged) {\r\n this._propertyChange = true;\r\n this.props.target[this.props.propertyName] = valueAsNumber;\r\n this.raiseOnPropertyChanged(valueAsNumber, this._store);\r\n } else {\r\n this._propertyChange = false;\r\n }\r\n\r\n this._store = valueAsNumber;\r\n }\r\n\r\n lock() {\r\n if (this.props.lockObject) {\r\n this.props.lockObject.lock = true;\r\n }\r\n }\r\n\r\n unlock() {\r\n if (this.props.lockObject) {\r\n this.props.lockObject.lock = false;\r\n }\r\n }\r\n\r\n override render() {\r\n let valueAsHex: string;\r\n if (this._propertyChange) {\r\n const valueAsNumber = parseInt(this.state.value);\r\n valueAsHex = valueAsNumber.toString(16);\r\n let hex0String = \"\";\r\n for (let i = 0; i < 8 - valueAsHex.length; i++) {\r\n //padding the '0's\r\n hex0String += \"0\";\r\n }\r\n valueAsHex = \"0x\" + hex0String + valueAsHex.toUpperCase();\r\n } else {\r\n valueAsHex = this.state.value;\r\n }\r\n\r\n return (\r\n <div>\r\n {!this.props.useEuler && (\r\n <div className={this.props.additionalClass ? this.props.additionalClass + \" floatLine\" : \"floatLine\"}>\r\n {this.props.icon && <img src={this.props.icon} title={this.props.iconLabel} alt={this.props.iconLabel} className=\"icon\" />}\r\n <div className=\"label\" title={this.props.label}>\r\n {this.props.label}\r\n </div>\r\n <div className=\"value\">\r\n <input\r\n type=\"string\"\r\n className=\"hex-input\"\r\n value={valueAsHex}\r\n onBlur={() => this.unlock()}\r\n onFocus={() => this.lock()}\r\n onChange={(evt) => this.updateValue(evt.target.value, false)}\r\n onKeyDown={(evt) => {\r\n if (evt.keyCode !== 13) {\r\n return;\r\n }\r\n this.updateValue(this.state.value, true);\r\n }}\r\n />\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"hexLineComponent.js","sourceRoot":"","sources":["../../../../dev/sharedUiComponents/src/lines/hexLineComponent.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from \"react\";\r\nimport type { Observable } from \"core/Misc/observable\";\r\nimport type { PropertyChangedEvent } from \"../propertyChangedEvent\";\r\nimport type { LockObject } from \"../tabs/propertyGrids/lockObject\";\r\n\r\ninterface IHexLineComponentProps {\r\n label: string;\r\n target: any;\r\n propertyName: string;\r\n lockObject?: LockObject;\r\n onChange?: (newValue: number) => void;\r\n isInteger?: boolean;\r\n replaySourceReplacement?: string;\r\n onPropertyChangedObservable?: Observable<PropertyChangedEvent>;\r\n additionalClass?: string;\r\n step?: string;\r\n digits?: number;\r\n useEuler?: boolean;\r\n min?: number;\r\n icon?: string;\r\n iconLabel?: string;\r\n}\r\n\r\nexport class HexLineComponent extends React.Component<IHexLineComponentProps, { value: string }> {\r\n private _localChange = false;\r\n private _store: number;\r\n private _propertyChange = true;\r\n\r\n constructor(props: IHexLineComponentProps) {\r\n super(props);\r\n\r\n const currentValue = this.props.target[this.props.propertyName];\r\n this.state = { value: currentValue ? (this.props.isInteger ? currentValue.toFixed(0) : currentValue.toFixed(this.props.digits || 3)) : \"0\" };\r\n this._store = currentValue;\r\n }\r\n\r\n override componentWillUnmount() {\r\n this.unlock();\r\n }\r\n\r\n override shouldComponentUpdate(nextProps: IHexLineComponentProps, nextState: { value: string }) {\r\n if (this._localChange) {\r\n this._localChange = false;\r\n return true;\r\n }\r\n\r\n const newValue = nextProps.target[nextProps.propertyName];\r\n const newValueString = newValue ? (this.props.isInteger ? newValue.toFixed(0) : newValue.toFixed(this.props.digits || 3)) : \"0\";\r\n\r\n if (newValueString !== nextState.value) {\r\n nextState.value = newValueString;\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n raiseOnPropertyChanged(newValue: number, previousValue: number) {\r\n if (this.props.onChange) {\r\n this.props.onChange(newValue);\r\n }\r\n\r\n if (!this.props.onPropertyChangedObservable) {\r\n return;\r\n }\r\n this.props.onPropertyChangedObservable.notifyObservers({\r\n object: this.props.replaySourceReplacement ?? this.props.target,\r\n property: this.props.propertyName,\r\n value: newValue,\r\n initialValue: previousValue,\r\n });\r\n }\r\n\r\n convertToHexString(valueString: string): string {\r\n while (valueString.length < 10) {\r\n valueString += \"0\";\r\n }\r\n return valueString;\r\n }\r\n\r\n updateValue(valueString: string, raisePropertyChanged: boolean) {\r\n if (valueString.substring(0, 2) != \"0x\") {\r\n if (valueString.substring(0, 1) != \"0\") {\r\n valueString = \"0x\" + valueString;\r\n } else {\r\n valueString = \"0x\" + valueString.substr(1);\r\n }\r\n }\r\n\r\n const valueSubstr = valueString.substr(2);\r\n if (valueSubstr != \"\" && /^[0-9A-Fa-f]+$/g.test(valueSubstr) == false) {\r\n return;\r\n }\r\n\r\n if (valueString.length > 10) {\r\n return;\r\n }\r\n\r\n const valueStringAsHex = this.convertToHexString(valueString);\r\n let valueAsNumber: number;\r\n\r\n valueAsNumber = parseInt(valueStringAsHex);\r\n\r\n if (!isNaN(valueAsNumber) && this.props.min !== undefined) {\r\n if (valueAsNumber < this.props.min) {\r\n valueAsNumber = this.props.min;\r\n valueString = valueAsNumber.toString();\r\n }\r\n }\r\n\r\n this._localChange = true;\r\n\r\n if (isNaN(valueAsNumber)) {\r\n return;\r\n }\r\n\r\n this.setState({ value: valueString });\r\n if (raisePropertyChanged) {\r\n this._propertyChange = true;\r\n this.props.target[this.props.propertyName] = valueAsNumber;\r\n this.raiseOnPropertyChanged(valueAsNumber, this._store);\r\n } else {\r\n this._propertyChange = false;\r\n }\r\n\r\n this._store = valueAsNumber;\r\n }\r\n\r\n lock() {\r\n if (this.props.lockObject) {\r\n this.props.lockObject.lock = true;\r\n }\r\n }\r\n\r\n unlock() {\r\n if (this.props.lockObject) {\r\n this.props.lockObject.lock = false;\r\n }\r\n }\r\n\r\n override render() {\r\n let valueAsHex: string;\r\n if (this._propertyChange) {\r\n const valueAsNumber = parseInt(this.state.value);\r\n valueAsHex = valueAsNumber.toString(16);\r\n let hex0String = \"\";\r\n for (let i = 0; i < 8 - valueAsHex.length; i++) {\r\n //padding the '0's\r\n hex0String += \"0\";\r\n }\r\n valueAsHex = \"0x\" + hex0String + valueAsHex.toUpperCase();\r\n } else {\r\n valueAsHex = this.state.value;\r\n }\r\n\r\n return (\r\n <div>\r\n {!this.props.useEuler && (\r\n <div className={this.props.additionalClass ? this.props.additionalClass + \" floatLine\" : \"floatLine\"}>\r\n {this.props.icon && <img src={this.props.icon} title={this.props.iconLabel} alt={this.props.iconLabel} className=\"icon\" />}\r\n <div className=\"label\" title={this.props.label}>\r\n {this.props.label}\r\n </div>\r\n <div className=\"value\">\r\n <input\r\n type=\"string\"\r\n className=\"hex-input\"\r\n value={valueAsHex}\r\n onBlur={() => this.unlock()}\r\n onFocus={() => this.lock()}\r\n onChange={(evt) => this.updateValue(evt.target.value, false)}\r\n onKeyDown={(evt) => {\r\n if (evt.keyCode !== 13) {\r\n return;\r\n }\r\n this.updateValue(this.state.value, true);\r\n }}\r\n />\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n }\r\n}\r\n"]}
@@ -1140,9 +1140,6 @@ export class GraphCanvasComponent extends React.Component {
1140
1140
  newNode.x = x / this.zoom;
1141
1141
  newNode.y = y / this.zoom;
1142
1142
  newNode.cleanAccumulation();
1143
- this.props.stateManager.onNewNodeCreatedObservable.notifyObservers(newNode);
1144
- this.props.stateManager.onSelectionChangedObservable.notifyObservers(null);
1145
- this.props.stateManager.onSelectionChangedObservable.notifyObservers({ selection: newNode });
1146
1143
  x -= GraphCanvasComponent.NodeWidth + 200;
1147
1144
  newNode.content.inputs.forEach((portData) => {
1148
1145
  if (portData.connectedPort) {
@@ -1158,6 +1155,9 @@ export class GraphCanvasComponent extends React.Component {
1158
1155
  }
1159
1156
  }
1160
1157
  });
1158
+ this.props.stateManager.onNewNodeCreatedObservable.notifyObservers(newNode);
1159
+ this.props.stateManager.onSelectionChangedObservable.notifyObservers(null);
1160
+ this.props.stateManager.onSelectionChangedObservable.notifyObservers({ selection: newNode });
1161
1161
  }
1162
1162
  processEditorData(editorData) {
1163
1163
  const frames = this._frames.splice(0);
@@ -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 type { IEditorData, 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 } from \"./interfaces/portData\";\r\nimport { PortDataDirection } from \"./interfaces/portData\";\r\nimport type { INodeContainer } from \"./interfaces/nodeContainer\";\r\nimport styles from \"./graphCanvas.modules.scss\";\r\nimport commonStyles from \"./common.modules.scss\";\r\n\r\nimport { TypeLedger } from \"./typeLedger\";\r\nimport { RefreshNode } from \"./tools\";\r\nimport { SearchBoxComponent } from \"./searchBox\";\r\n\r\nexport interface IGraphCanvasComponentProps {\r\n stateManager: StateManager;\r\n onEmitNewNode: (nodeData: INodeData) => GraphNode;\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 _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 _nodeDataContentList = new Array<any>();\r\n\r\n private _altKeyIsPressed = false;\r\n private _multiKeyIsPressed = false;\r\n private _oldY = -1;\r\n\r\n public _frameIsMoving = false;\r\n public _isLoading = false;\r\n public _targetLinkCandidate: Nullable<NodeLink> = null;\r\n\r\n private _copiedNodes: GraphNode[] = [];\r\n private _copiedFrames: GraphFrame[] = [];\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 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 constructor(props: IGraphCanvasComponentProps) {\r\n super(props);\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 } 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 } 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 } 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 } 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 || 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 }\r\n } else if (selection instanceof GraphNode) {\r\n if (this._multiKeyIsPressed || 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 }\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.props.stateManager.hostDocument!.addEventListener(\"keyup\", () => this.onKeyUp(), false);\r\n this.props.stateManager.hostDocument!.addEventListener(\r\n \"keydown\",\r\n (evt) => {\r\n this._altKeyIsPressed = evt.altKey;\r\n this._multiKeyIsPressed = evt.ctrlKey || evt.metaKey;\r\n },\r\n false\r\n );\r\n this.props.stateManager.hostDocument!.defaultView!.addEventListener(\r\n \"blur\",\r\n () => {\r\n this._altKeyIsPressed = false;\r\n this._multiKeyIsPressed = false;\r\n },\r\n false\r\n );\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 }\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\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 (!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 handleKeyDown(\r\n evt: KeyboardEvent,\r\n onRemove: (nodeData: INodeData) => void,\r\n mouseLocationX: number,\r\n mouseLocationY: number,\r\n dataGenerator: (nodeData: INodeData) => any,\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 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] as GraphNode;\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 const newNodes = this.pasteSelection(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 this.pasteSelection(this._copiedNodes, currentX, currentY, dataGenerator, true);\r\n }\r\n }\r\n\r\n pasteSelection(copiedNodes: GraphNode[], currentX: number, currentY: number, dataGenerator: (nodeData: INodeData) => any, selectNew = false) {\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 const newNode = dataGenerator(node.content);\r\n\r\n let x = 0;\r\n let y = 0;\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 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 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._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 this._nodes = [];\r\n this._frames = [];\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(), {\r\n id: node.id,\r\n type: \"node\",\r\n width: node.width,\r\n height: node.height,\r\n });\r\n });\r\n\r\n this._frames.forEach((frame) => {\r\n graph.setNode(frame.id.toString(), {\r\n id: frame.id,\r\n type: \"frame\",\r\n width: frame.element.clientWidth,\r\n height: frame.element.clientHeight,\r\n });\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 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).nodeName === \"IMG\") {\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 }\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.props.stateManager.onSelectionChangedObservable.notifyObservers(null);\r\n this._mouseStartPointX = evt.clientX;\r\n this._mouseStartPointY = evt.clientY;\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 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 = {\r\n frame,\r\n port,\r\n };\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 }\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 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 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 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\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 this._frames = [];\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\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 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 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 </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 type { IEditorData, 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 } from \"./interfaces/portData\";\r\nimport { PortDataDirection } from \"./interfaces/portData\";\r\nimport type { INodeContainer } from \"./interfaces/nodeContainer\";\r\nimport styles from \"./graphCanvas.modules.scss\";\r\nimport commonStyles from \"./common.modules.scss\";\r\n\r\nimport { TypeLedger } from \"./typeLedger\";\r\nimport { RefreshNode } from \"./tools\";\r\nimport { SearchBoxComponent } from \"./searchBox\";\r\n\r\nexport interface IGraphCanvasComponentProps {\r\n stateManager: StateManager;\r\n onEmitNewNode: (nodeData: INodeData) => GraphNode;\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 _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 _nodeDataContentList = new Array<any>();\r\n\r\n private _altKeyIsPressed = false;\r\n private _multiKeyIsPressed = false;\r\n private _oldY = -1;\r\n\r\n public _frameIsMoving = false;\r\n public _isLoading = false;\r\n public _targetLinkCandidate: Nullable<NodeLink> = null;\r\n\r\n private _copiedNodes: GraphNode[] = [];\r\n private _copiedFrames: GraphFrame[] = [];\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 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 constructor(props: IGraphCanvasComponentProps) {\r\n super(props);\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 } 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 } 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 } 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 } 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 || 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 }\r\n } else if (selection instanceof GraphNode) {\r\n if (this._multiKeyIsPressed || 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 }\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.props.stateManager.hostDocument!.addEventListener(\"keyup\", () => this.onKeyUp(), false);\r\n this.props.stateManager.hostDocument!.addEventListener(\r\n \"keydown\",\r\n (evt) => {\r\n this._altKeyIsPressed = evt.altKey;\r\n this._multiKeyIsPressed = evt.ctrlKey || evt.metaKey;\r\n },\r\n false\r\n );\r\n this.props.stateManager.hostDocument!.defaultView!.addEventListener(\r\n \"blur\",\r\n () => {\r\n this._altKeyIsPressed = false;\r\n this._multiKeyIsPressed = false;\r\n },\r\n false\r\n );\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 }\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\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 (!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 handleKeyDown(\r\n evt: KeyboardEvent,\r\n onRemove: (nodeData: INodeData) => void,\r\n mouseLocationX: number,\r\n mouseLocationY: number,\r\n dataGenerator: (nodeData: INodeData) => any,\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 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] as GraphNode;\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 const newNodes = this.pasteSelection(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 this.pasteSelection(this._copiedNodes, currentX, currentY, dataGenerator, true);\r\n }\r\n }\r\n\r\n pasteSelection(copiedNodes: GraphNode[], currentX: number, currentY: number, dataGenerator: (nodeData: INodeData) => any, selectNew = false) {\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 const newNode = dataGenerator(node.content);\r\n\r\n let x = 0;\r\n let y = 0;\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 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 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._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 this._nodes = [];\r\n this._frames = [];\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(), {\r\n id: node.id,\r\n type: \"node\",\r\n width: node.width,\r\n height: node.height,\r\n });\r\n });\r\n\r\n this._frames.forEach((frame) => {\r\n graph.setNode(frame.id.toString(), {\r\n id: frame.id,\r\n type: \"frame\",\r\n width: frame.element.clientWidth,\r\n height: frame.element.clientHeight,\r\n });\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 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).nodeName === \"IMG\") {\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 }\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.props.stateManager.onSelectionChangedObservable.notifyObservers(null);\r\n this._mouseStartPointX = evt.clientX;\r\n this._mouseStartPointY = evt.clientY;\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 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 = {\r\n frame,\r\n port,\r\n };\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 }\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 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 this._frames = [];\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\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 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 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 </div>\r\n );\r\n }\r\n}\r\n"]}
@@ -328,6 +328,7 @@ export class GraphNode {
328
328
  this._mouseStartPointY = null;
329
329
  this._visual.releasePointerCapture(evt.pointerId);
330
330
  if (!this._ownerCanvas._targetLinkCandidate) {
331
+ this._stateManager.onNodeMovedObservable.notifyObservers(this);
331
332
  return;
332
333
  }
333
334
  // Connect the ports
@@ -362,6 +363,7 @@ export class GraphNode {
362
363
  this._ownerCanvas.automaticRewire(inputs, availableNodeInputs, true);
363
364
  this._ownerCanvas.automaticRewire(availableNodeOutputs, outputs, true);
364
365
  this._stateManager.onRebuildRequiredObservable.notifyObservers();
366
+ this._stateManager.onNodeMovedObservable.notifyObservers(this);
365
367
  }
366
368
  _onMove(evt) {
367
369
  this._ownerCanvas._targetLinkCandidate = null;
@@ -1 +1 @@
1
- {"version":3,"file":"graphNode.js","sourceRoot":"","sources":["../../../../dev/sharedUiComponents/src/nodeGraphSystem/graphNode.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"core/types\";\r\nimport type { Observer } from \"core/Misc/observable\";\r\nimport type { GraphCanvasComponent } from \"./graphCanvas\";\r\nimport * as React from \"react\";\r\nimport { NodePort } from \"./nodePort\";\r\nimport type { GraphFrame } from \"./graphFrame\";\r\nimport type { NodeLink } from \"./nodeLink\";\r\nimport type { StateManager } from \"./stateManager\";\r\nimport type { ISelectionChangedOptions } from \"./interfaces/selectionChangedOptions\";\r\nimport type { IDisplayManager } from \"./interfaces/displayManager\";\r\nimport { PropertyLedger } from \"./propertyLedger\";\r\nimport { DisplayLedger } from \"./displayLedger\";\r\nimport type { INodeData } from \"./interfaces/nodeData\";\r\nimport type { IPortData } from \"./interfaces/portData\";\r\nimport localStyles from \"./graphNode.modules.scss\";\r\nimport commonStyles from \"./common.modules.scss\";\r\n\r\nexport class GraphNode {\r\n private _visual: HTMLDivElement;\r\n private _headerContainer: HTMLDivElement;\r\n private _headerIcon: HTMLDivElement;\r\n private _headerIconImg: HTMLImageElement;\r\n private _header: HTMLDivElement;\r\n private _connections: HTMLDivElement;\r\n private _inputsContainer: HTMLDivElement;\r\n private _outputsContainer: HTMLDivElement;\r\n private _content: HTMLDivElement;\r\n private _comments: HTMLDivElement;\r\n private _executionTime: HTMLDivElement;\r\n private _selectionBorder: HTMLDivElement;\r\n private _inputPorts: NodePort[] = [];\r\n private _outputPorts: NodePort[] = [];\r\n private _links: NodeLink[] = [];\r\n private _x = 0;\r\n private _y = 0;\r\n private _gridAlignedX = 0;\r\n private _gridAlignedY = 0;\r\n private _mouseStartPointX: Nullable<number> = null;\r\n private _mouseStartPointY: Nullable<number> = null;\r\n private _stateManager: StateManager;\r\n private _onSelectionChangedObserver: Nullable<Observer<Nullable<ISelectionChangedOptions>>>;\r\n private _onSelectionBoxMovedObserver: Nullable<Observer<ClientRect | DOMRect>>;\r\n private _onFrameCreatedObserver: Nullable<Observer<GraphFrame>>;\r\n private _onUpdateRequiredObserver: Nullable<Observer<Nullable<INodeData>>>;\r\n private _onHighlightNodeObserver: Nullable<Observer<any>>;\r\n private _ownerCanvas: GraphCanvasComponent;\r\n private _isSelected: boolean;\r\n private _displayManager: Nullable<IDisplayManager> = null;\r\n private _isVisible = true;\r\n private _enclosingFrameId = -1;\r\n\r\n public addClassToVisual(className: string) {\r\n this._visual.classList.add(className);\r\n }\r\n\r\n public removeClassFromVisual(className: string) {\r\n this._visual.classList.remove(className);\r\n }\r\n\r\n public get isVisible() {\r\n return this._isVisible;\r\n }\r\n\r\n public set isVisible(value: boolean) {\r\n this._isVisible = value;\r\n\r\n if (!value) {\r\n this._visual.classList.add(commonStyles[\"hidden\"]);\r\n } else {\r\n this._visual.classList.remove(commonStyles[\"hidden\"]);\r\n this._upateNodePortNames();\r\n }\r\n\r\n for (const link of this._links) {\r\n link.isVisible = value;\r\n }\r\n\r\n this._refreshLinks();\r\n }\r\n\r\n private _upateNodePortNames() {\r\n for (const port of this._inputPorts.concat(this._outputPorts)) {\r\n if (port.hasLabel()) {\r\n port.portName = port.portData.name;\r\n }\r\n }\r\n }\r\n\r\n public get outputPorts() {\r\n return this._outputPorts;\r\n }\r\n\r\n public get inputPorts() {\r\n return this._inputPorts;\r\n }\r\n\r\n public get links() {\r\n return this._links;\r\n }\r\n\r\n public get gridAlignedX() {\r\n return this._gridAlignedX;\r\n }\r\n\r\n public get gridAlignedY() {\r\n return this._gridAlignedY;\r\n }\r\n\r\n public get x() {\r\n return this._x;\r\n }\r\n\r\n public set x(value: number) {\r\n if (this._x === value) {\r\n return;\r\n }\r\n this._x = value;\r\n\r\n this._gridAlignedX = this._ownerCanvas.getGridPosition(value);\r\n this._visual.style.left = `${this._gridAlignedX}px`;\r\n\r\n this._refreshLinks();\r\n this._refreshFrames();\r\n }\r\n\r\n public get y() {\r\n return this._y;\r\n }\r\n\r\n public set y(value: number) {\r\n if (this._y === value) {\r\n return;\r\n }\r\n\r\n this._y = value;\r\n\r\n this._gridAlignedY = this._ownerCanvas.getGridPosition(value);\r\n this._visual.style.top = `${this._gridAlignedY}px`;\r\n\r\n this._refreshLinks();\r\n this._refreshFrames();\r\n }\r\n\r\n public get width() {\r\n return this._visual.clientWidth;\r\n }\r\n\r\n public get height() {\r\n return this._visual.clientHeight;\r\n }\r\n\r\n public get id() {\r\n return this.content.uniqueId;\r\n }\r\n\r\n public get name() {\r\n return this.content.name;\r\n }\r\n\r\n public get isSelected() {\r\n return this._isSelected;\r\n }\r\n\r\n public get enclosingFrameId() {\r\n return this._enclosingFrameId;\r\n }\r\n\r\n public set enclosingFrameId(value: number) {\r\n this._enclosingFrameId = value;\r\n }\r\n\r\n public set isSelected(value: boolean) {\r\n this.setIsSelected(value, false);\r\n }\r\n\r\n public setIsSelected(value: boolean, marqueeSelection: boolean) {\r\n if (this._isSelected === value) {\r\n return;\r\n }\r\n\r\n this._isSelected = value;\r\n\r\n if (!value) {\r\n this._visual.classList.remove(localStyles[\"selected\"]);\r\n const indexInSelection = this._ownerCanvas.selectedNodes.indexOf(this);\r\n\r\n if (indexInSelection > -1) {\r\n this._ownerCanvas.selectedNodes.splice(indexInSelection, 1);\r\n }\r\n } else {\r\n this._stateManager.onSelectionChangedObservable.notifyObservers({ selection: this, marqueeSelection });\r\n }\r\n }\r\n\r\n public constructor(\r\n public content: INodeData,\r\n stateManager: StateManager\r\n ) {\r\n this._stateManager = stateManager;\r\n\r\n this._onSelectionChangedObserver = this._stateManager.onSelectionChangedObservable.add((options) => {\r\n const { selection: node } = options || {};\r\n if (node === this) {\r\n this._visual.classList.add(localStyles[\"selected\"]);\r\n if (this._displayManager && this._displayManager.onSelectionChanged) {\r\n this._displayManager.onSelectionChanged(this.content, node.content, this._stateManager);\r\n }\r\n } else {\r\n if (this._ownerCanvas.selectedNodes.indexOf(this) === -1) {\r\n this._visual.classList.remove(localStyles[\"selected\"]);\r\n if (this._displayManager && this._displayManager.onSelectionChanged) {\r\n this._displayManager.onSelectionChanged(this.content, node && (node as GraphNode).content ? (node as GraphNode).content : null, this._stateManager);\r\n }\r\n }\r\n }\r\n });\r\n\r\n this._onHighlightNodeObserver = this._stateManager.onHighlightNodeObservable.add((data) => {\r\n if (data.data !== this.content.data) {\r\n return;\r\n }\r\n if (data.active) {\r\n this._visual.classList.add(localStyles[\"highlighted\"]);\r\n } else {\r\n this._visual.classList.remove(localStyles[\"highlighted\"]);\r\n }\r\n });\r\n\r\n this._onUpdateRequiredObserver = this._stateManager.onUpdateRequiredObservable.add((data) => {\r\n if (data !== this.content.data) {\r\n return;\r\n }\r\n this.refresh();\r\n });\r\n\r\n this._onSelectionBoxMovedObserver = this._stateManager.onSelectionBoxMoved.add((rect1) => {\r\n const rect2 = this._visual.getBoundingClientRect();\r\n const overlap = !(rect1.right < rect2.left || rect1.left > rect2.right || rect1.bottom < rect2.top || rect1.top > rect2.bottom);\r\n\r\n this.setIsSelected(overlap, true);\r\n });\r\n\r\n this._onFrameCreatedObserver = this._stateManager.onFrameCreatedObservable.add((frame) => {\r\n if (this._ownerCanvas.frames.some((f) => f.nodes.indexOf(this) !== -1)) {\r\n return;\r\n }\r\n\r\n if (this.isOverlappingFrame(frame)) {\r\n frame.nodes.push(this);\r\n }\r\n });\r\n }\r\n\r\n public isOverlappingFrame(frame: GraphFrame) {\r\n const rect2 = this._visual.getBoundingClientRect();\r\n const rect1 = frame.element.getBoundingClientRect();\r\n\r\n // Add a tiny margin\r\n rect1.width -= 5;\r\n rect1.height -= 5;\r\n\r\n const isOverlappingFrame = !(rect1.right < rect2.left || rect1.left > rect2.right || rect1.bottom < rect2.top || rect1.top > rect2.bottom);\r\n\r\n if (isOverlappingFrame) {\r\n this.enclosingFrameId = frame.id;\r\n }\r\n return isOverlappingFrame;\r\n }\r\n\r\n public getPortForPortData(portData: IPortData) {\r\n for (const port of this._inputPorts) {\r\n const attachedPoint = port.portData;\r\n\r\n if (attachedPoint === portData || (attachedPoint.ownerData === portData.ownerData && attachedPoint.internalName === portData.internalName)) {\r\n return port;\r\n }\r\n }\r\n\r\n for (const port of this._outputPorts) {\r\n const attachedPoint = port.portData;\r\n\r\n if (attachedPoint === portData || (attachedPoint.ownerData === portData.ownerData && attachedPoint.internalName === portData.internalName)) {\r\n return port;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n public getPortDataForPortDataContent(data: any) {\r\n for (const port of this._inputPorts) {\r\n const attachedPoint = port.portData;\r\n\r\n if (attachedPoint.data === data) {\r\n return attachedPoint;\r\n }\r\n }\r\n\r\n for (const port of this._outputPorts) {\r\n const attachedPoint = port.portData;\r\n\r\n if (attachedPoint.data === data) {\r\n return attachedPoint;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n public getLinksForPortDataContent(data: any) {\r\n return this._links.filter((link) => link.portA.portData.data === data || link.portB!.portData.data === data);\r\n }\r\n\r\n public getLinksForPortData(portData: IPortData) {\r\n return this._links.filter((link) => link.portA.portData === portData || link.portB!.portData === portData);\r\n }\r\n\r\n private _refreshFrames() {\r\n if (this._ownerCanvas._frameIsMoving || this._ownerCanvas._isLoading) {\r\n return;\r\n }\r\n\r\n // Frames\r\n for (const frame of this._ownerCanvas.frames) {\r\n frame.syncNode(this);\r\n }\r\n }\r\n\r\n public _refreshLinks() {\r\n if (this._ownerCanvas._isLoading) {\r\n return;\r\n }\r\n for (const link of this._links) {\r\n link.update();\r\n }\r\n }\r\n\r\n public refresh() {\r\n if (this._displayManager) {\r\n this._header.innerHTML = this._displayManager.getHeaderText(this.content);\r\n this._displayManager.updatePreviewContent(this.content, this._content);\r\n this._visual.style.background = this._displayManager.getBackgroundColor(this.content);\r\n const additionalClass = this._displayManager.getHeaderClass(this.content);\r\n this._header.classList.value = localStyles.header;\r\n this._headerContainer.classList.value = localStyles[\"header-container\"];\r\n if (additionalClass) {\r\n this._headerContainer.classList.add(additionalClass);\r\n }\r\n if (this._displayManager.updateFullVisualContent) {\r\n this._displayManager.updateFullVisualContent(this.content, {\r\n visual: this._visual,\r\n header: this._header,\r\n headerContainer: this._headerContainer,\r\n headerIcon: this._headerIcon,\r\n headerIconImg: this._headerIconImg,\r\n comments: this._comments,\r\n connections: this._connections,\r\n inputsContainer: this._inputsContainer,\r\n outputsContainer: this._outputsContainer,\r\n content: this._content,\r\n selectionBorder: this._selectionBorder,\r\n });\r\n }\r\n } else {\r\n this._header.innerHTML = this.content.name;\r\n }\r\n\r\n for (const port of this._inputPorts) {\r\n port.refresh();\r\n }\r\n\r\n for (const port of this._outputPorts) {\r\n port.refresh();\r\n }\r\n\r\n if (this.enclosingFrameId !== -1) {\r\n const index = this._ownerCanvas.frames.findIndex((frame) => frame.id === this.enclosingFrameId);\r\n if (index >= 0 && this._ownerCanvas.frames[index].isCollapsed) {\r\n this._ownerCanvas.frames[index].redrawFramePorts();\r\n }\r\n }\r\n\r\n this._comments.innerHTML = this.content.comments || \"\";\r\n this._comments.title = this.content.comments || \"\";\r\n\r\n const executionTime = this.content.executionTime || 0;\r\n this._executionTime.innerHTML = executionTime >= 0 ? `${executionTime.toFixed(2)} ms` : \"\";\r\n\r\n this.content.prepareHeaderIcon(this._headerIcon, this._headerIconImg);\r\n if (this._headerIconImg.src) {\r\n this._header.classList.add(localStyles[\"headerWithIcon\"]);\r\n }\r\n }\r\n\r\n private _onDown(evt: PointerEvent) {\r\n // Check if this is coming from the port\r\n if (evt.target && (evt.target as HTMLElement).nodeName === \"IMG\") {\r\n return;\r\n }\r\n\r\n const indexInSelection = this._ownerCanvas.selectedNodes.indexOf(this);\r\n if (indexInSelection === -1) {\r\n this._stateManager.onSelectionChangedObservable.notifyObservers({ selection: this });\r\n } else if (evt.ctrlKey) {\r\n this.setIsSelected(false, false);\r\n }\r\n\r\n evt.stopPropagation();\r\n\r\n for (const selectedNode of this._ownerCanvas.selectedNodes) {\r\n selectedNode.cleanAccumulation();\r\n }\r\n\r\n this._mouseStartPointX = evt.clientX;\r\n this._mouseStartPointY = evt.clientY;\r\n\r\n this._visual.setPointerCapture(evt.pointerId);\r\n }\r\n\r\n public cleanAccumulation(useCeil = false) {\r\n this.x = this._ownerCanvas.getGridPosition(this.x, useCeil);\r\n this.y = this._ownerCanvas.getGridPosition(this.y, useCeil);\r\n }\r\n\r\n private _onUp(evt: PointerEvent) {\r\n evt.stopPropagation();\r\n\r\n for (const selectedNode of this._ownerCanvas.selectedNodes) {\r\n selectedNode.cleanAccumulation();\r\n }\r\n\r\n this._mouseStartPointX = null;\r\n this._mouseStartPointY = null;\r\n this._visual.releasePointerCapture(evt.pointerId);\r\n\r\n if (!this._ownerCanvas._targetLinkCandidate) {\r\n 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 }\r\n\r\n private _onMove(evt: PointerEvent) {\r\n this._ownerCanvas._targetLinkCandidate = null;\r\n if (this._mouseStartPointX === null || this._mouseStartPointY === null || evt.ctrlKey) {\r\n return;\r\n }\r\n\r\n // Move\r\n const newX = (evt.clientX - this._mouseStartPointX) / this._ownerCanvas.zoom;\r\n const newY = (evt.clientY - this._mouseStartPointY) / this._ownerCanvas.zoom;\r\n\r\n for (const selectedNode of this._ownerCanvas.selectedNodes) {\r\n selectedNode.x += newX;\r\n selectedNode.y += newY;\r\n }\r\n for (const frame of this._ownerCanvas.selectedFrames) {\r\n frame._moveFrame(newX, newY);\r\n }\r\n\r\n this._mouseStartPointX = evt.clientX;\r\n this._mouseStartPointY = evt.clientY;\r\n\r\n evt.stopPropagation();\r\n\r\n if (this._inputPorts.some((p) => p.portData.isConnected) || this._outputPorts.some((o) => o.portData.hasEndpoints)) {\r\n return;\r\n }\r\n\r\n // Check wires that could be underneath\r\n const rect = this._visual.getBoundingClientRect();\r\n for (const link of this._ownerCanvas.links) {\r\n if (link.portA.node === this || link.portB!.node === this) {\r\n link.isTargetCandidate = false;\r\n continue;\r\n }\r\n link.isTargetCandidate = link.intersectsWith(rect);\r\n\r\n if (link.isTargetCandidate) {\r\n if (this._ownerCanvas._targetLinkCandidate !== link) {\r\n if (this._ownerCanvas._targetLinkCandidate) {\r\n this._ownerCanvas._targetLinkCandidate.isTargetCandidate = false;\r\n }\r\n this._ownerCanvas._targetLinkCandidate = link;\r\n }\r\n }\r\n }\r\n }\r\n\r\n public renderProperties(): Nullable<JSX.Element> {\r\n let control = PropertyLedger.RegisteredControls[this.content.getClassName()];\r\n\r\n if (!control) {\r\n control = PropertyLedger.DefaultControl;\r\n }\r\n\r\n return React.createElement(control, {\r\n stateManager: this._stateManager,\r\n nodeData: this.content,\r\n });\r\n }\r\n\r\n public appendVisual(root: HTMLDivElement, owner: GraphCanvasComponent) {\r\n this._ownerCanvas = owner;\r\n\r\n // Display manager\r\n const displayManagerClass = DisplayLedger.RegisteredControls[this.content.getClassName()];\r\n\r\n if (displayManagerClass) {\r\n this._displayManager = new displayManagerClass();\r\n }\r\n\r\n // DOM\r\n this._visual = root.ownerDocument!.createElement(\"div\");\r\n this._visual.classList.add(localStyles.visual);\r\n\r\n this._visual.addEventListener(\"pointerdown\", (evt) => this._onDown(evt));\r\n this._visual.addEventListener(\"pointerup\", (evt) => this._onUp(evt));\r\n this._visual.addEventListener(\"pointermove\", (evt) => this._onMove(evt));\r\n\r\n this._headerContainer = root.ownerDocument!.createElement(\"div\");\r\n this._headerContainer.classList.add(localStyles[\"header-container\"]);\r\n this._visual.appendChild(this._headerContainer);\r\n\r\n this._header = root.ownerDocument!.createElement(\"div\");\r\n this._header.classList.add(localStyles.header);\r\n this._headerContainer.appendChild(this._header);\r\n\r\n this._headerIcon = root.ownerDocument!.createElement(\"div\");\r\n this._headerIcon.classList.add(localStyles.headerIcon);\r\n this._headerIconImg = root.ownerDocument!.createElement(\"img\");\r\n this._headerIcon.appendChild(this._headerIconImg);\r\n this._headerContainer.appendChild(this._headerIcon);\r\n\r\n this._selectionBorder = root.ownerDocument!.createElement(\"div\");\r\n this._selectionBorder.classList.add(\"selection-border\");\r\n this._visual.appendChild(this._selectionBorder);\r\n\r\n this._connections = root.ownerDocument!.createElement(\"div\");\r\n this._connections.classList.add(localStyles.connections);\r\n this._visual.appendChild(this._connections);\r\n\r\n this._inputsContainer = root.ownerDocument!.createElement(\"div\");\r\n this._inputsContainer.classList.add(commonStyles.inputsContainer);\r\n this._connections.appendChild(this._inputsContainer);\r\n\r\n this._outputsContainer = root.ownerDocument!.createElement(\"div\");\r\n this._outputsContainer.classList.add(commonStyles.outputsContainer);\r\n this._connections.appendChild(this._outputsContainer);\r\n\r\n this._content = root.ownerDocument!.createElement(\"div\");\r\n this._content.classList.add(localStyles.content);\r\n this._visual.appendChild(this._content);\r\n\r\n root.appendChild(this._visual);\r\n\r\n // Comments\r\n this._comments = root.ownerDocument!.createElement(\"div\");\r\n this._comments.classList.add(localStyles.comments);\r\n\r\n this._visual.appendChild(this._comments);\r\n\r\n // Comments\r\n this._executionTime = root.ownerDocument!.createElement(\"div\");\r\n this._executionTime.classList.add(localStyles.executionTime);\r\n\r\n this._visual.appendChild(this._executionTime);\r\n\r\n // Connections\r\n for (const input of this.content.inputs) {\r\n this._inputPorts.push(NodePort.CreatePortElement(input, this, this._inputsContainer, this._displayManager, this._stateManager));\r\n }\r\n\r\n for (const output of this.content.outputs) {\r\n this._outputPorts.push(NodePort.CreatePortElement(output, this, this._outputsContainer, this._displayManager, this._stateManager));\r\n }\r\n\r\n this.refresh();\r\n\r\n this.content.refreshCallback = () => {\r\n this.refresh();\r\n };\r\n }\r\n\r\n public dispose() {\r\n if (this._displayManager && this._displayManager.onDispose) {\r\n this._displayManager.onDispose(this.content, this._stateManager);\r\n }\r\n\r\n // notify frame observers that this node is being deleted\r\n this._stateManager.onGraphNodeRemovalObservable.notifyObservers(this);\r\n\r\n if (this._onSelectionChangedObserver) {\r\n this._stateManager.onSelectionChangedObservable.remove(this._onSelectionChangedObserver);\r\n }\r\n\r\n if (this._onUpdateRequiredObserver) {\r\n this._stateManager.onUpdateRequiredObservable.remove(this._onUpdateRequiredObserver);\r\n }\r\n\r\n if (this._onHighlightNodeObserver) {\r\n this._stateManager.onHighlightNodeObservable.remove(this._onHighlightNodeObserver);\r\n }\r\n\r\n if (this._onSelectionBoxMovedObserver) {\r\n this._stateManager.onSelectionBoxMoved.remove(this._onSelectionBoxMovedObserver);\r\n }\r\n\r\n if (this._visual.parentElement) {\r\n this._visual.parentElement.removeChild(this._visual);\r\n }\r\n\r\n if (this._onFrameCreatedObserver) {\r\n this._stateManager.onFrameCreatedObservable.remove(this._onFrameCreatedObserver);\r\n }\r\n\r\n for (const port of this._inputPorts) {\r\n port.dispose();\r\n }\r\n\r\n for (const port of this._outputPorts) {\r\n port.dispose();\r\n }\r\n\r\n const links = this._links.slice(0);\r\n for (const link of links) {\r\n link.dispose();\r\n }\r\n\r\n this.content.dispose();\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"graphNode.js","sourceRoot":"","sources":["../../../../dev/sharedUiComponents/src/nodeGraphSystem/graphNode.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"core/types\";\r\nimport type { Observer } from \"core/Misc/observable\";\r\nimport type { GraphCanvasComponent } from \"./graphCanvas\";\r\nimport * as React from \"react\";\r\nimport { NodePort } from \"./nodePort\";\r\nimport type { GraphFrame } from \"./graphFrame\";\r\nimport type { NodeLink } from \"./nodeLink\";\r\nimport type { StateManager } from \"./stateManager\";\r\nimport type { ISelectionChangedOptions } from \"./interfaces/selectionChangedOptions\";\r\nimport type { IDisplayManager } from \"./interfaces/displayManager\";\r\nimport { PropertyLedger } from \"./propertyLedger\";\r\nimport { DisplayLedger } from \"./displayLedger\";\r\nimport type { INodeData } from \"./interfaces/nodeData\";\r\nimport type { IPortData } from \"./interfaces/portData\";\r\nimport localStyles from \"./graphNode.modules.scss\";\r\nimport commonStyles from \"./common.modules.scss\";\r\n\r\nexport class GraphNode {\r\n private _visual: HTMLDivElement;\r\n private _headerContainer: HTMLDivElement;\r\n private _headerIcon: HTMLDivElement;\r\n private _headerIconImg: HTMLImageElement;\r\n private _header: HTMLDivElement;\r\n private _connections: HTMLDivElement;\r\n private _inputsContainer: HTMLDivElement;\r\n private _outputsContainer: HTMLDivElement;\r\n private _content: HTMLDivElement;\r\n private _comments: HTMLDivElement;\r\n private _executionTime: HTMLDivElement;\r\n private _selectionBorder: HTMLDivElement;\r\n private _inputPorts: NodePort[] = [];\r\n private _outputPorts: NodePort[] = [];\r\n private _links: NodeLink[] = [];\r\n private _x = 0;\r\n private _y = 0;\r\n private _gridAlignedX = 0;\r\n private _gridAlignedY = 0;\r\n private _mouseStartPointX: Nullable<number> = null;\r\n private _mouseStartPointY: Nullable<number> = null;\r\n private _stateManager: StateManager;\r\n private _onSelectionChangedObserver: Nullable<Observer<Nullable<ISelectionChangedOptions>>>;\r\n private _onSelectionBoxMovedObserver: Nullable<Observer<ClientRect | DOMRect>>;\r\n private _onFrameCreatedObserver: Nullable<Observer<GraphFrame>>;\r\n private _onUpdateRequiredObserver: Nullable<Observer<Nullable<INodeData>>>;\r\n private _onHighlightNodeObserver: Nullable<Observer<any>>;\r\n private _ownerCanvas: GraphCanvasComponent;\r\n private _isSelected: boolean;\r\n private _displayManager: Nullable<IDisplayManager> = null;\r\n private _isVisible = true;\r\n private _enclosingFrameId = -1;\r\n\r\n public addClassToVisual(className: string) {\r\n this._visual.classList.add(className);\r\n }\r\n\r\n public removeClassFromVisual(className: string) {\r\n this._visual.classList.remove(className);\r\n }\r\n\r\n public get isVisible() {\r\n return this._isVisible;\r\n }\r\n\r\n public set isVisible(value: boolean) {\r\n this._isVisible = value;\r\n\r\n if (!value) {\r\n this._visual.classList.add(commonStyles[\"hidden\"]);\r\n } else {\r\n this._visual.classList.remove(commonStyles[\"hidden\"]);\r\n this._upateNodePortNames();\r\n }\r\n\r\n for (const link of this._links) {\r\n link.isVisible = value;\r\n }\r\n\r\n this._refreshLinks();\r\n }\r\n\r\n private _upateNodePortNames() {\r\n for (const port of this._inputPorts.concat(this._outputPorts)) {\r\n if (port.hasLabel()) {\r\n port.portName = port.portData.name;\r\n }\r\n }\r\n }\r\n\r\n public get outputPorts() {\r\n return this._outputPorts;\r\n }\r\n\r\n public get inputPorts() {\r\n return this._inputPorts;\r\n }\r\n\r\n public get links() {\r\n return this._links;\r\n }\r\n\r\n public get gridAlignedX() {\r\n return this._gridAlignedX;\r\n }\r\n\r\n public get gridAlignedY() {\r\n return this._gridAlignedY;\r\n }\r\n\r\n public get x() {\r\n return this._x;\r\n }\r\n\r\n public set x(value: number) {\r\n if (this._x === value) {\r\n return;\r\n }\r\n this._x = value;\r\n\r\n this._gridAlignedX = this._ownerCanvas.getGridPosition(value);\r\n this._visual.style.left = `${this._gridAlignedX}px`;\r\n\r\n this._refreshLinks();\r\n this._refreshFrames();\r\n }\r\n\r\n public get y() {\r\n return this._y;\r\n }\r\n\r\n public set y(value: number) {\r\n if (this._y === value) {\r\n return;\r\n }\r\n\r\n this._y = value;\r\n\r\n this._gridAlignedY = this._ownerCanvas.getGridPosition(value);\r\n this._visual.style.top = `${this._gridAlignedY}px`;\r\n\r\n this._refreshLinks();\r\n this._refreshFrames();\r\n }\r\n\r\n public get width() {\r\n return this._visual.clientWidth;\r\n }\r\n\r\n public get height() {\r\n return this._visual.clientHeight;\r\n }\r\n\r\n public get id() {\r\n return this.content.uniqueId;\r\n }\r\n\r\n public get name() {\r\n return this.content.name;\r\n }\r\n\r\n public get isSelected() {\r\n return this._isSelected;\r\n }\r\n\r\n public get enclosingFrameId() {\r\n return this._enclosingFrameId;\r\n }\r\n\r\n public set enclosingFrameId(value: number) {\r\n this._enclosingFrameId = value;\r\n }\r\n\r\n public set isSelected(value: boolean) {\r\n this.setIsSelected(value, false);\r\n }\r\n\r\n public setIsSelected(value: boolean, marqueeSelection: boolean) {\r\n if (this._isSelected === value) {\r\n return;\r\n }\r\n\r\n this._isSelected = value;\r\n\r\n if (!value) {\r\n this._visual.classList.remove(localStyles[\"selected\"]);\r\n const indexInSelection = this._ownerCanvas.selectedNodes.indexOf(this);\r\n\r\n if (indexInSelection > -1) {\r\n this._ownerCanvas.selectedNodes.splice(indexInSelection, 1);\r\n }\r\n } else {\r\n this._stateManager.onSelectionChangedObservable.notifyObservers({ selection: this, marqueeSelection });\r\n }\r\n }\r\n\r\n public constructor(\r\n public content: INodeData,\r\n stateManager: StateManager\r\n ) {\r\n this._stateManager = stateManager;\r\n\r\n this._onSelectionChangedObserver = this._stateManager.onSelectionChangedObservable.add((options) => {\r\n const { selection: node } = options || {};\r\n if (node === this) {\r\n this._visual.classList.add(localStyles[\"selected\"]);\r\n if (this._displayManager && this._displayManager.onSelectionChanged) {\r\n this._displayManager.onSelectionChanged(this.content, node.content, this._stateManager);\r\n }\r\n } else {\r\n if (this._ownerCanvas.selectedNodes.indexOf(this) === -1) {\r\n this._visual.classList.remove(localStyles[\"selected\"]);\r\n if (this._displayManager && this._displayManager.onSelectionChanged) {\r\n this._displayManager.onSelectionChanged(this.content, node && (node as GraphNode).content ? (node as GraphNode).content : null, this._stateManager);\r\n }\r\n }\r\n }\r\n });\r\n\r\n this._onHighlightNodeObserver = this._stateManager.onHighlightNodeObservable.add((data) => {\r\n if (data.data !== this.content.data) {\r\n return;\r\n }\r\n if (data.active) {\r\n this._visual.classList.add(localStyles[\"highlighted\"]);\r\n } else {\r\n this._visual.classList.remove(localStyles[\"highlighted\"]);\r\n }\r\n });\r\n\r\n this._onUpdateRequiredObserver = this._stateManager.onUpdateRequiredObservable.add((data) => {\r\n if (data !== this.content.data) {\r\n return;\r\n }\r\n this.refresh();\r\n });\r\n\r\n this._onSelectionBoxMovedObserver = this._stateManager.onSelectionBoxMoved.add((rect1) => {\r\n const rect2 = this._visual.getBoundingClientRect();\r\n const overlap = !(rect1.right < rect2.left || rect1.left > rect2.right || rect1.bottom < rect2.top || rect1.top > rect2.bottom);\r\n\r\n this.setIsSelected(overlap, true);\r\n });\r\n\r\n this._onFrameCreatedObserver = this._stateManager.onFrameCreatedObservable.add((frame) => {\r\n if (this._ownerCanvas.frames.some((f) => f.nodes.indexOf(this) !== -1)) {\r\n return;\r\n }\r\n\r\n if (this.isOverlappingFrame(frame)) {\r\n frame.nodes.push(this);\r\n }\r\n });\r\n }\r\n\r\n public isOverlappingFrame(frame: GraphFrame) {\r\n const rect2 = this._visual.getBoundingClientRect();\r\n const rect1 = frame.element.getBoundingClientRect();\r\n\r\n // Add a tiny margin\r\n rect1.width -= 5;\r\n rect1.height -= 5;\r\n\r\n const isOverlappingFrame = !(rect1.right < rect2.left || rect1.left > rect2.right || rect1.bottom < rect2.top || rect1.top > rect2.bottom);\r\n\r\n if (isOverlappingFrame) {\r\n this.enclosingFrameId = frame.id;\r\n }\r\n return isOverlappingFrame;\r\n }\r\n\r\n public getPortForPortData(portData: IPortData) {\r\n for (const port of this._inputPorts) {\r\n const attachedPoint = port.portData;\r\n\r\n if (attachedPoint === portData || (attachedPoint.ownerData === portData.ownerData && attachedPoint.internalName === portData.internalName)) {\r\n return port;\r\n }\r\n }\r\n\r\n for (const port of this._outputPorts) {\r\n const attachedPoint = port.portData;\r\n\r\n if (attachedPoint === portData || (attachedPoint.ownerData === portData.ownerData && attachedPoint.internalName === portData.internalName)) {\r\n return port;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n public getPortDataForPortDataContent(data: any) {\r\n for (const port of this._inputPorts) {\r\n const attachedPoint = port.portData;\r\n\r\n if (attachedPoint.data === data) {\r\n return attachedPoint;\r\n }\r\n }\r\n\r\n for (const port of this._outputPorts) {\r\n const attachedPoint = port.portData;\r\n\r\n if (attachedPoint.data === data) {\r\n return attachedPoint;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n public getLinksForPortDataContent(data: any) {\r\n return this._links.filter((link) => link.portA.portData.data === data || link.portB!.portData.data === data);\r\n }\r\n\r\n public getLinksForPortData(portData: IPortData) {\r\n return this._links.filter((link) => link.portA.portData === portData || link.portB!.portData === portData);\r\n }\r\n\r\n private _refreshFrames() {\r\n if (this._ownerCanvas._frameIsMoving || this._ownerCanvas._isLoading) {\r\n return;\r\n }\r\n\r\n // Frames\r\n for (const frame of this._ownerCanvas.frames) {\r\n frame.syncNode(this);\r\n }\r\n }\r\n\r\n public _refreshLinks() {\r\n if (this._ownerCanvas._isLoading) {\r\n return;\r\n }\r\n for (const link of this._links) {\r\n link.update();\r\n }\r\n }\r\n\r\n public refresh() {\r\n if (this._displayManager) {\r\n this._header.innerHTML = this._displayManager.getHeaderText(this.content);\r\n this._displayManager.updatePreviewContent(this.content, this._content);\r\n this._visual.style.background = this._displayManager.getBackgroundColor(this.content);\r\n const additionalClass = this._displayManager.getHeaderClass(this.content);\r\n this._header.classList.value = localStyles.header;\r\n this._headerContainer.classList.value = localStyles[\"header-container\"];\r\n if (additionalClass) {\r\n this._headerContainer.classList.add(additionalClass);\r\n }\r\n if (this._displayManager.updateFullVisualContent) {\r\n this._displayManager.updateFullVisualContent(this.content, {\r\n visual: this._visual,\r\n header: this._header,\r\n headerContainer: this._headerContainer,\r\n headerIcon: this._headerIcon,\r\n headerIconImg: this._headerIconImg,\r\n comments: this._comments,\r\n connections: this._connections,\r\n inputsContainer: this._inputsContainer,\r\n outputsContainer: this._outputsContainer,\r\n content: this._content,\r\n selectionBorder: this._selectionBorder,\r\n });\r\n }\r\n } else {\r\n this._header.innerHTML = this.content.name;\r\n }\r\n\r\n for (const port of this._inputPorts) {\r\n port.refresh();\r\n }\r\n\r\n for (const port of this._outputPorts) {\r\n port.refresh();\r\n }\r\n\r\n if (this.enclosingFrameId !== -1) {\r\n const index = this._ownerCanvas.frames.findIndex((frame) => frame.id === this.enclosingFrameId);\r\n if (index >= 0 && this._ownerCanvas.frames[index].isCollapsed) {\r\n this._ownerCanvas.frames[index].redrawFramePorts();\r\n }\r\n }\r\n\r\n this._comments.innerHTML = this.content.comments || \"\";\r\n this._comments.title = this.content.comments || \"\";\r\n\r\n const executionTime = this.content.executionTime || 0;\r\n this._executionTime.innerHTML = executionTime >= 0 ? `${executionTime.toFixed(2)} ms` : \"\";\r\n\r\n this.content.prepareHeaderIcon(this._headerIcon, this._headerIconImg);\r\n if (this._headerIconImg.src) {\r\n this._header.classList.add(localStyles[\"headerWithIcon\"]);\r\n }\r\n }\r\n\r\n private _onDown(evt: PointerEvent) {\r\n // Check if this is coming from the port\r\n if (evt.target && (evt.target as HTMLElement).nodeName === \"IMG\") {\r\n return;\r\n }\r\n\r\n const indexInSelection = this._ownerCanvas.selectedNodes.indexOf(this);\r\n if (indexInSelection === -1) {\r\n this._stateManager.onSelectionChangedObservable.notifyObservers({ selection: this });\r\n } else if (evt.ctrlKey) {\r\n this.setIsSelected(false, false);\r\n }\r\n\r\n evt.stopPropagation();\r\n\r\n for (const selectedNode of this._ownerCanvas.selectedNodes) {\r\n selectedNode.cleanAccumulation();\r\n }\r\n\r\n this._mouseStartPointX = evt.clientX;\r\n this._mouseStartPointY = evt.clientY;\r\n\r\n this._visual.setPointerCapture(evt.pointerId);\r\n }\r\n\r\n public cleanAccumulation(useCeil = false) {\r\n this.x = this._ownerCanvas.getGridPosition(this.x, useCeil);\r\n this.y = this._ownerCanvas.getGridPosition(this.y, useCeil);\r\n }\r\n\r\n private _onUp(evt: PointerEvent) {\r\n evt.stopPropagation();\r\n\r\n for (const selectedNode of this._ownerCanvas.selectedNodes) {\r\n selectedNode.cleanAccumulation();\r\n }\r\n\r\n this._mouseStartPointX = null;\r\n this._mouseStartPointY = null;\r\n this._visual.releasePointerCapture(evt.pointerId);\r\n\r\n if (!this._ownerCanvas._targetLinkCandidate) {\r\n this._stateManager.onNodeMovedObservable.notifyObservers(this);\r\n return;\r\n }\r\n\r\n // Connect the ports\r\n const inputs: Nullable<IPortData>[] = [];\r\n const outputs: Nullable<IPortData>[] = [];\r\n const availableNodeInputs: Nullable<IPortData>[] = [];\r\n const availableNodeOutputs: Nullable<IPortData>[] = [];\r\n const leftNode = this._ownerCanvas._targetLinkCandidate.nodeA;\r\n const rightNode = this._ownerCanvas._targetLinkCandidate.nodeB!;\r\n const leftPort = this._ownerCanvas._targetLinkCandidate.portA.portData;\r\n const rightPort = this._ownerCanvas._targetLinkCandidate.portB!.portData;\r\n\r\n // Delete previous\r\n this._ownerCanvas._targetLinkCandidate.dispose();\r\n this._ownerCanvas._targetLinkCandidate = null;\r\n\r\n // Get the ports\r\n availableNodeInputs.push(...this.content.inputs.filter((i) => !i.isConnected));\r\n\r\n availableNodeOutputs.push(...this.content.outputs);\r\n\r\n inputs.push(...leftNode.content.outputs);\r\n\r\n outputs.push(...rightNode.content.inputs.filter((i) => !i.isConnected));\r\n\r\n // Prioritize the already connected ports\r\n const leftPortIndex = inputs.indexOf(leftPort);\r\n const rightPortIndex = outputs.indexOf(rightPort);\r\n\r\n if (leftPortIndex > 0) {\r\n inputs.splice(leftPortIndex, 1);\r\n inputs.splice(0, 0, leftPort);\r\n }\r\n\r\n if (rightPortIndex > 0) {\r\n outputs.splice(rightPortIndex, 1);\r\n outputs.splice(0, 0, rightPort);\r\n }\r\n\r\n // Reconnect\r\n this._ownerCanvas.automaticRewire(inputs, availableNodeInputs, true);\r\n this._ownerCanvas.automaticRewire(availableNodeOutputs, outputs, true);\r\n\r\n this._stateManager.onRebuildRequiredObservable.notifyObservers();\r\n this._stateManager.onNodeMovedObservable.notifyObservers(this);\r\n }\r\n\r\n private _onMove(evt: PointerEvent) {\r\n this._ownerCanvas._targetLinkCandidate = null;\r\n if (this._mouseStartPointX === null || this._mouseStartPointY === null || evt.ctrlKey) {\r\n return;\r\n }\r\n\r\n // Move\r\n const newX = (evt.clientX - this._mouseStartPointX) / this._ownerCanvas.zoom;\r\n const newY = (evt.clientY - this._mouseStartPointY) / this._ownerCanvas.zoom;\r\n\r\n for (const selectedNode of this._ownerCanvas.selectedNodes) {\r\n selectedNode.x += newX;\r\n selectedNode.y += newY;\r\n }\r\n for (const frame of this._ownerCanvas.selectedFrames) {\r\n frame._moveFrame(newX, newY);\r\n }\r\n\r\n this._mouseStartPointX = evt.clientX;\r\n this._mouseStartPointY = evt.clientY;\r\n\r\n evt.stopPropagation();\r\n\r\n if (this._inputPorts.some((p) => p.portData.isConnected) || this._outputPorts.some((o) => o.portData.hasEndpoints)) {\r\n return;\r\n }\r\n\r\n // Check wires that could be underneath\r\n const rect = this._visual.getBoundingClientRect();\r\n for (const link of this._ownerCanvas.links) {\r\n if (link.portA.node === this || link.portB!.node === this) {\r\n link.isTargetCandidate = false;\r\n continue;\r\n }\r\n link.isTargetCandidate = link.intersectsWith(rect);\r\n\r\n if (link.isTargetCandidate) {\r\n if (this._ownerCanvas._targetLinkCandidate !== link) {\r\n if (this._ownerCanvas._targetLinkCandidate) {\r\n this._ownerCanvas._targetLinkCandidate.isTargetCandidate = false;\r\n }\r\n this._ownerCanvas._targetLinkCandidate = link;\r\n }\r\n }\r\n }\r\n }\r\n\r\n public renderProperties(): Nullable<JSX.Element> {\r\n let control = PropertyLedger.RegisteredControls[this.content.getClassName()];\r\n\r\n if (!control) {\r\n control = PropertyLedger.DefaultControl;\r\n }\r\n\r\n return React.createElement(control, {\r\n stateManager: this._stateManager,\r\n nodeData: this.content,\r\n });\r\n }\r\n\r\n public appendVisual(root: HTMLDivElement, owner: GraphCanvasComponent) {\r\n this._ownerCanvas = owner;\r\n\r\n // Display manager\r\n const displayManagerClass = DisplayLedger.RegisteredControls[this.content.getClassName()];\r\n\r\n if (displayManagerClass) {\r\n this._displayManager = new displayManagerClass();\r\n }\r\n\r\n // DOM\r\n this._visual = root.ownerDocument!.createElement(\"div\");\r\n this._visual.classList.add(localStyles.visual);\r\n\r\n this._visual.addEventListener(\"pointerdown\", (evt) => this._onDown(evt));\r\n this._visual.addEventListener(\"pointerup\", (evt) => this._onUp(evt));\r\n this._visual.addEventListener(\"pointermove\", (evt) => this._onMove(evt));\r\n\r\n this._headerContainer = root.ownerDocument!.createElement(\"div\");\r\n this._headerContainer.classList.add(localStyles[\"header-container\"]);\r\n this._visual.appendChild(this._headerContainer);\r\n\r\n this._header = root.ownerDocument!.createElement(\"div\");\r\n this._header.classList.add(localStyles.header);\r\n this._headerContainer.appendChild(this._header);\r\n\r\n this._headerIcon = root.ownerDocument!.createElement(\"div\");\r\n this._headerIcon.classList.add(localStyles.headerIcon);\r\n this._headerIconImg = root.ownerDocument!.createElement(\"img\");\r\n this._headerIcon.appendChild(this._headerIconImg);\r\n this._headerContainer.appendChild(this._headerIcon);\r\n\r\n this._selectionBorder = root.ownerDocument!.createElement(\"div\");\r\n this._selectionBorder.classList.add(\"selection-border\");\r\n this._visual.appendChild(this._selectionBorder);\r\n\r\n this._connections = root.ownerDocument!.createElement(\"div\");\r\n this._connections.classList.add(localStyles.connections);\r\n this._visual.appendChild(this._connections);\r\n\r\n this._inputsContainer = root.ownerDocument!.createElement(\"div\");\r\n this._inputsContainer.classList.add(commonStyles.inputsContainer);\r\n this._connections.appendChild(this._inputsContainer);\r\n\r\n this._outputsContainer = root.ownerDocument!.createElement(\"div\");\r\n this._outputsContainer.classList.add(commonStyles.outputsContainer);\r\n this._connections.appendChild(this._outputsContainer);\r\n\r\n this._content = root.ownerDocument!.createElement(\"div\");\r\n this._content.classList.add(localStyles.content);\r\n this._visual.appendChild(this._content);\r\n\r\n root.appendChild(this._visual);\r\n\r\n // Comments\r\n this._comments = root.ownerDocument!.createElement(\"div\");\r\n this._comments.classList.add(localStyles.comments);\r\n\r\n this._visual.appendChild(this._comments);\r\n\r\n // Comments\r\n this._executionTime = root.ownerDocument!.createElement(\"div\");\r\n this._executionTime.classList.add(localStyles.executionTime);\r\n\r\n this._visual.appendChild(this._executionTime);\r\n\r\n // Connections\r\n for (const input of this.content.inputs) {\r\n this._inputPorts.push(NodePort.CreatePortElement(input, this, this._inputsContainer, this._displayManager, this._stateManager));\r\n }\r\n\r\n for (const output of this.content.outputs) {\r\n this._outputPorts.push(NodePort.CreatePortElement(output, this, this._outputsContainer, this._displayManager, this._stateManager));\r\n }\r\n\r\n this.refresh();\r\n\r\n this.content.refreshCallback = () => {\r\n this.refresh();\r\n };\r\n }\r\n\r\n public dispose() {\r\n if (this._displayManager && this._displayManager.onDispose) {\r\n this._displayManager.onDispose(this.content, this._stateManager);\r\n }\r\n\r\n // notify frame observers that this node is being deleted\r\n this._stateManager.onGraphNodeRemovalObservable.notifyObservers(this);\r\n\r\n if (this._onSelectionChangedObserver) {\r\n this._stateManager.onSelectionChangedObservable.remove(this._onSelectionChangedObserver);\r\n }\r\n\r\n if (this._onUpdateRequiredObserver) {\r\n this._stateManager.onUpdateRequiredObservable.remove(this._onUpdateRequiredObserver);\r\n }\r\n\r\n if (this._onHighlightNodeObserver) {\r\n this._stateManager.onHighlightNodeObservable.remove(this._onHighlightNodeObserver);\r\n }\r\n\r\n if (this._onSelectionBoxMovedObserver) {\r\n this._stateManager.onSelectionBoxMoved.remove(this._onSelectionBoxMovedObserver);\r\n }\r\n\r\n if (this._visual.parentElement) {\r\n this._visual.parentElement.removeChild(this._visual);\r\n }\r\n\r\n if (this._onFrameCreatedObserver) {\r\n this._stateManager.onFrameCreatedObservable.remove(this._onFrameCreatedObserver);\r\n }\r\n\r\n for (const port of this._inputPorts) {\r\n port.dispose();\r\n }\r\n\r\n for (const port of this._outputPorts) {\r\n port.dispose();\r\n }\r\n\r\n const links = this._links.slice(0);\r\n for (const link of links) {\r\n link.dispose();\r\n }\r\n\r\n this.content.dispose();\r\n }\r\n}\r\n"]}
@@ -27,6 +27,7 @@ export declare class StateManager {
27
27
  onCandidatePortSelectedObservable: Observable<Nullable<FrameNodePort | NodePort>>;
28
28
  onNewNodeCreatedObservable: Observable<GraphNode>;
29
29
  onRebuildRequiredObservable: Observable<void>;
30
+ onNodeMovedObservable: Observable<GraphNode>;
30
31
  onErrorMessageDialogRequiredObservable: Observable<string>;
31
32
  onExposePortOnFrameObservable: Observable<GraphNode>;
32
33
  onGridSizeChanged: Observable<void>;
@@ -11,6 +11,7 @@ export class StateManager {
11
11
  this.onCandidatePortSelectedObservable = new Observable();
12
12
  this.onNewNodeCreatedObservable = new Observable();
13
13
  this.onRebuildRequiredObservable = new Observable();
14
+ this.onNodeMovedObservable = new Observable();
14
15
  this.onErrorMessageDialogRequiredObservable = new Observable();
15
16
  this.onExposePortOnFrameObservable = new Observable();
16
17
  this.onGridSizeChanged = new Observable();
@@ -1 +1 @@
1
- {"version":3,"file":"stateManager.js","sourceRoot":"","sources":["../../../../dev/sharedUiComponents/src/nodeGraphSystem/stateManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,2CAA6B;AAWlD,MAAM,OAAO,YAAY;IAAzB;QAMI,kCAA6B,GAAG,IAAI,UAAU,EAA4B,CAAC;QAC3E,iCAA4B,GAAG,IAAI,UAAU,EAAsC,CAAC;QACpF,6BAAwB,GAAG,IAAI,UAAU,EAAc,CAAC;QACxD,+BAA0B,GAAG,IAAI,UAAU,EAAiB,CAAC;QAC7D,iCAA4B,GAAG,IAAI,UAAU,EAAa,CAAC;QAC3D,wBAAmB,GAAG,IAAI,UAAU,EAAwB,CAAC;QAC7D,yBAAoB,GAAG,IAAI,UAAU,EAAqB,CAAC;QAC3D,sCAAiC,GAAG,IAAI,UAAU,EAAsC,CAAC;QACzF,+BAA0B,GAAG,IAAI,UAAU,EAAa,CAAC;QACzD,gCAA2B,GAAG,IAAI,UAAU,EAAQ,CAAC;QACrD,2CAAsC,GAAG,IAAI,UAAU,EAAU,CAAC;QAClE,kCAA6B,GAAG,IAAI,UAAU,EAAa,CAAC;QAC5D,sBAAiB,GAAG,IAAI,UAAU,EAAQ,CAAC;QAC3C,iCAA4B,GAAG,IAAI,UAAU,EAAuG,CAAC;QACrJ,8BAAyB,GAAG,IAAI,UAAU,EAAkC,CAAC;IAYjF,CAAC;CAAA","sourcesContent":["import type { Vector2 } from \"core/Maths/math.vector\";\r\nimport { Observable } from \"core/Misc/observable\";\r\nimport type { Nullable } from \"core/types\";\r\nimport type { FrameNodePort } from \"./frameNodePort\";\r\nimport type { GraphFrame } from \"./graphFrame\";\r\nimport type { GraphNode } from \"./graphNode\";\r\nimport type { INodeContainer } from \"./interfaces/nodeContainer\";\r\nimport type { INodeData } from \"./interfaces/nodeData\";\r\nimport type { IPortData } from \"./interfaces/portData\";\r\nimport type { ISelectionChangedOptions } from \"./interfaces/selectionChangedOptions\";\r\nimport type { NodePort } from \"./nodePort\";\r\n\r\nexport class StateManager {\r\n data: any;\r\n hostDocument: Document;\r\n lockObject: any;\r\n modalIsDisplayed: boolean;\r\n\r\n onSearchBoxRequiredObservable = new Observable<{ x: number; y: number }>();\r\n onSelectionChangedObservable = new Observable<Nullable<ISelectionChangedOptions>>();\r\n onFrameCreatedObservable = new Observable<GraphFrame>();\r\n onUpdateRequiredObservable = new Observable<Nullable<any>>();\r\n onGraphNodeRemovalObservable = new Observable<GraphNode>();\r\n onSelectionBoxMoved = new Observable<ClientRect | DOMRect>();\r\n onCandidateLinkMoved = new Observable<Nullable<Vector2>>();\r\n onCandidatePortSelectedObservable = new Observable<Nullable<NodePort | FrameNodePort>>();\r\n onNewNodeCreatedObservable = new Observable<GraphNode>();\r\n onRebuildRequiredObservable = new Observable<void>();\r\n onErrorMessageDialogRequiredObservable = new Observable<string>();\r\n onExposePortOnFrameObservable = new Observable<GraphNode>();\r\n onGridSizeChanged = new Observable<void>();\r\n onNewBlockRequiredObservable = new Observable<{ type: string; targetX: number; targetY: number; needRepositioning?: boolean; smartAdd?: boolean }>();\r\n onHighlightNodeObservable = new Observable<{ data: any; active: boolean }>();\r\n\r\n exportData: (data: any, frame?: Nullable<GraphFrame>) => string;\r\n isElbowConnectionAllowed: (nodeA: FrameNodePort | NodePort, nodeB: FrameNodePort | NodePort) => boolean;\r\n isDebugConnectionAllowed: (nodeA: FrameNodePort | NodePort, nodeB: FrameNodePort | NodePort) => boolean;\r\n applyNodePortDesign: (data: IPortData, element: HTMLElement, img: HTMLImageElement, pip: HTMLDivElement) => void;\r\n\r\n storeEditorData: (serializationObject: any, frame?: Nullable<GraphFrame>) => void;\r\n\r\n getEditorDataMap: () => { [key: number]: number };\r\n\r\n createDefaultInputData: (rootData: any, portData: IPortData, nodeContainer: INodeContainer) => Nullable<{ data: INodeData; name: string }>;\r\n}\r\n"]}
1
+ {"version":3,"file":"stateManager.js","sourceRoot":"","sources":["../../../../dev/sharedUiComponents/src/nodeGraphSystem/stateManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,2CAA6B;AAWlD,MAAM,OAAO,YAAY;IAAzB;QAMI,kCAA6B,GAAG,IAAI,UAAU,EAA4B,CAAC;QAC3E,iCAA4B,GAAG,IAAI,UAAU,EAAsC,CAAC;QACpF,6BAAwB,GAAG,IAAI,UAAU,EAAc,CAAC;QACxD,+BAA0B,GAAG,IAAI,UAAU,EAAiB,CAAC;QAC7D,iCAA4B,GAAG,IAAI,UAAU,EAAa,CAAC;QAC3D,wBAAmB,GAAG,IAAI,UAAU,EAAwB,CAAC;QAC7D,yBAAoB,GAAG,IAAI,UAAU,EAAqB,CAAC;QAC3D,sCAAiC,GAAG,IAAI,UAAU,EAAsC,CAAC;QACzF,+BAA0B,GAAG,IAAI,UAAU,EAAa,CAAC;QACzD,gCAA2B,GAAG,IAAI,UAAU,EAAQ,CAAC;QACrD,0BAAqB,GAAG,IAAI,UAAU,EAAa,CAAC;QACpD,2CAAsC,GAAG,IAAI,UAAU,EAAU,CAAC;QAClE,kCAA6B,GAAG,IAAI,UAAU,EAAa,CAAC;QAC5D,sBAAiB,GAAG,IAAI,UAAU,EAAQ,CAAC;QAC3C,iCAA4B,GAAG,IAAI,UAAU,EAAuG,CAAC;QACrJ,8BAAyB,GAAG,IAAI,UAAU,EAAkC,CAAC;IAYjF,CAAC;CAAA","sourcesContent":["import type { Vector2 } from \"core/Maths/math.vector\";\r\nimport { Observable } from \"core/Misc/observable\";\r\nimport type { Nullable } from \"core/types\";\r\nimport type { FrameNodePort } from \"./frameNodePort\";\r\nimport type { GraphFrame } from \"./graphFrame\";\r\nimport type { GraphNode } from \"./graphNode\";\r\nimport type { INodeContainer } from \"./interfaces/nodeContainer\";\r\nimport type { INodeData } from \"./interfaces/nodeData\";\r\nimport type { IPortData } from \"./interfaces/portData\";\r\nimport type { ISelectionChangedOptions } from \"./interfaces/selectionChangedOptions\";\r\nimport type { NodePort } from \"./nodePort\";\r\n\r\nexport class StateManager {\r\n data: any;\r\n hostDocument: Document;\r\n lockObject: any;\r\n modalIsDisplayed: boolean;\r\n\r\n onSearchBoxRequiredObservable = new Observable<{ x: number; y: number }>();\r\n onSelectionChangedObservable = new Observable<Nullable<ISelectionChangedOptions>>();\r\n onFrameCreatedObservable = new Observable<GraphFrame>();\r\n onUpdateRequiredObservable = new Observable<Nullable<any>>();\r\n onGraphNodeRemovalObservable = new Observable<GraphNode>();\r\n onSelectionBoxMoved = new Observable<ClientRect | DOMRect>();\r\n onCandidateLinkMoved = new Observable<Nullable<Vector2>>();\r\n onCandidatePortSelectedObservable = new Observable<Nullable<NodePort | FrameNodePort>>();\r\n onNewNodeCreatedObservable = new Observable<GraphNode>();\r\n onRebuildRequiredObservable = new Observable<void>();\r\n onNodeMovedObservable = new Observable<GraphNode>();\r\n onErrorMessageDialogRequiredObservable = new Observable<string>();\r\n onExposePortOnFrameObservable = new Observable<GraphNode>();\r\n onGridSizeChanged = new Observable<void>();\r\n onNewBlockRequiredObservable = new Observable<{ type: string; targetX: number; targetY: number; needRepositioning?: boolean; smartAdd?: boolean }>();\r\n onHighlightNodeObservable = new Observable<{ data: any; active: boolean }>();\r\n\r\n exportData: (data: any, frame?: Nullable<GraphFrame>) => string;\r\n isElbowConnectionAllowed: (nodeA: FrameNodePort | NodePort, nodeB: FrameNodePort | NodePort) => boolean;\r\n isDebugConnectionAllowed: (nodeA: FrameNodePort | NodePort, nodeB: FrameNodePort | NodePort) => boolean;\r\n applyNodePortDesign: (data: IPortData, element: HTMLElement, img: HTMLImageElement, pip: HTMLDivElement) => void;\r\n\r\n storeEditorData: (serializationObject: any, frame?: Nullable<GraphFrame>) => void;\r\n\r\n getEditorDataMap: () => { [key: number]: number };\r\n\r\n createDefaultInputData: (rootData: any, portData: IPortData, nodeContainer: INodeContainer) => Nullable<{ data: INodeData; name: string }>;\r\n}\r\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@babylonjs/shared-ui-components",
3
- "version": "7.24.0",
3
+ "version": "7.25.0",
4
4
  "main": "index.js",
5
5
  "module": "index.js",
6
6
  "types": "index.d.ts",
@@ -15,7 +15,7 @@
15
15
  ],
16
16
  "scripts": {
17
17
  "build": "npm run clean && npm run compile",
18
- "clean": "rimraf dist && rimraf *.tsbuildinfo && rimraf \"./**/*.!(md|json|build.json)\"",
18
+ "clean": "rimraf dist && rimraf *.tsbuildinfo -g && rimraf \"./**/*.!(md|json|build.json)\" -g",
19
19
  "compile": "tsc -b tsconfig.build.json --verbose",
20
20
  "precompile": "build-tools -c process-assets --path-prefix ../../../dev/sharedUiComponents/ --output-dir ./",
21
21
  "postcompile": "build-tools -c add-js-to-es6"