@babylonjs/shared-ui-components 7.52.2 → 7.52.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lines/checkBoxLineComponent.d.ts +1 -1
- package/lines/checkBoxLineComponent.js +7 -4
- package/lines/checkBoxLineComponent.js.map +1 -1
- package/lines/colorLineComponent.js +1 -1
- package/lines/colorLineComponent.js.map +1 -1
- package/nodeGraphSystem/graphCanvas.js +3 -16
- package/nodeGraphSystem/graphCanvas.js.map +1 -1
- package/nodeGraphSystem/graphNode.d.ts +1 -0
- package/nodeGraphSystem/graphNode.js +30 -5
- package/nodeGraphSystem/graphNode.js.map +1 -1
- package/package.json +1 -1
@@ -6,7 +6,7 @@ export interface ICheckBoxLineComponentProps {
|
|
6
6
|
label?: string;
|
7
7
|
target?: any;
|
8
8
|
propertyName?: string;
|
9
|
-
isSelected?: () => boolean;
|
9
|
+
isSelected?: boolean | (() => boolean);
|
10
10
|
onSelect?: (value: boolean) => void;
|
11
11
|
onValueChanged?: () => void;
|
12
12
|
onPropertyChangedObservable?: Observable<PropertyChangedEvent>;
|
@@ -25,8 +25,11 @@ export class CheckBoxLineComponent extends React.Component {
|
|
25
25
|
constructor(props) {
|
26
26
|
super(props);
|
27
27
|
this._localChange = false;
|
28
|
-
if (this.props.isSelected) {
|
29
|
-
this.state = {
|
28
|
+
if (this.props.isSelected !== undefined) {
|
29
|
+
this.state = {
|
30
|
+
isSelected: typeof this.props.isSelected === "boolean" ? this.props.isSelected : this.props.isSelected(),
|
31
|
+
isConflict: false,
|
32
|
+
};
|
30
33
|
}
|
31
34
|
else {
|
32
35
|
this.state = {
|
@@ -40,8 +43,8 @@ export class CheckBoxLineComponent extends React.Component {
|
|
40
43
|
}
|
41
44
|
shouldComponentUpdate(nextProps, nextState) {
|
42
45
|
let selected;
|
43
|
-
if (nextProps.isSelected) {
|
44
|
-
selected = nextProps.isSelected();
|
46
|
+
if (nextProps.isSelected !== undefined) {
|
47
|
+
selected = typeof nextProps.isSelected === "boolean" ? nextProps.isSelected : nextProps.isSelected();
|
45
48
|
}
|
46
49
|
else {
|
47
50
|
selected = nextProps.target[nextProps.propertyName] === true;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"checkBoxLineComponent.js","sourceRoot":"","sources":["../../../../dev/sharedUiComponents/src/lines/checkBoxLineComponent.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from \"react\";\r\nimport type { Observable } from \"core/Misc/observable\";\r\nimport type { PropertyChangedEvent } from \"./../propertyChangedEvent\";\r\nimport { copyCommandToClipboard, getClassNameWithNamespace } from \"../copyCommandToClipboard\";\r\nimport type { IconDefinition } from \"@fortawesome/fontawesome-common-types\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { conflictingValuesPlaceholder } from \"./targetsProxy\";\r\nimport copyIcon from \"../imgs/copy.svg\";\r\n\r\nexport interface ICheckBoxLineComponentProps {\r\n label?: string;\r\n target?: any;\r\n propertyName?: string;\r\n isSelected?: () => boolean;\r\n onSelect?: (value: boolean) => void;\r\n onValueChanged?: () => void;\r\n onPropertyChangedObservable?: Observable<PropertyChangedEvent>;\r\n disabled?: boolean;\r\n icon?: string;\r\n iconLabel?: string;\r\n faIcons?: { enabled: IconDefinition; disabled: IconDefinition };\r\n large?: boolean;\r\n}\r\n\r\nimport toggleOnIcon40px from \"../imgs/toggleOnIcon_40px.svg\";\r\nimport toggleOffIcon40px from \"../imgs/toggleOffIcon_40px.svg\";\r\nimport toggleOnIcon30px from \"../imgs/toggleOnIcon_30px.svg\";\r\nimport toggleMixedIcon30px from \"../imgs/toggleMixedIcon_30px.svg\";\r\nimport toggleOffIcon30px from \"../imgs/toggleOffIcon_30px.svg\";\r\n\r\nconst Icons = {\r\n size30: {\r\n on: toggleOnIcon30px,\r\n mixed: toggleMixedIcon30px,\r\n off: toggleOffIcon30px,\r\n },\r\n size40: {\r\n on: toggleOnIcon40px,\r\n mixed: \"\", // unneeded\r\n off: toggleOffIcon40px,\r\n },\r\n};\r\n\r\nexport class CheckBoxLineComponent extends React.Component<ICheckBoxLineComponentProps, { isSelected: boolean; isDisabled?: boolean; isConflict: boolean }> {\r\n private _localChange = false;\r\n constructor(props: ICheckBoxLineComponentProps) {\r\n super(props);\r\n\r\n if (this.props.isSelected) {\r\n this.state = { isSelected: this.props.isSelected(), isConflict: false };\r\n } else {\r\n this.state = {\r\n isSelected: this.props.target[this.props.propertyName!] === true,\r\n isConflict: this.props.target[this.props.propertyName!] === conflictingValuesPlaceholder,\r\n };\r\n }\r\n\r\n if (this.props.disabled) {\r\n this.state = { ...this.state, isDisabled: this.props.disabled };\r\n }\r\n }\r\n\r\n override shouldComponentUpdate(nextProps: ICheckBoxLineComponentProps, nextState: { isSelected: boolean; isDisabled: boolean; isConflict: boolean }) {\r\n let selected: boolean;\r\n\r\n if (nextProps.isSelected) {\r\n selected = nextProps.isSelected!();\r\n } else {\r\n selected = nextProps.target[nextProps.propertyName!] === true;\r\n if (nextProps.target[nextProps.propertyName!] === conflictingValuesPlaceholder) {\r\n nextState.isConflict = true;\r\n }\r\n }\r\n\r\n if (selected !== nextState.isSelected || this._localChange) {\r\n nextState.isSelected = selected;\r\n this._localChange = false;\r\n return true;\r\n }\r\n\r\n if (nextProps.disabled !== nextState.isDisabled) {\r\n return true;\r\n }\r\n\r\n return nextProps.label !== this.props.label || nextProps.target !== this.props.target || nextState.isConflict !== this.state.isConflict;\r\n }\r\n\r\n onChange() {\r\n this._localChange = true;\r\n if (this.props.onSelect) {\r\n this.props.onSelect(!this.state.isSelected);\r\n } else {\r\n if (this.props.onPropertyChangedObservable) {\r\n this.props.onPropertyChangedObservable.notifyObservers({\r\n object: this.props.target,\r\n property: this.props.propertyName!,\r\n value: !this.state.isSelected,\r\n initialValue: this.state.isSelected,\r\n });\r\n }\r\n\r\n if (this.props.target && this.props.propertyName) {\r\n this.props.target[this.props.propertyName!] = !this.state.isSelected;\r\n }\r\n }\r\n\r\n if (this.props.onValueChanged) {\r\n this.props.onValueChanged();\r\n }\r\n\r\n this.setState({ isSelected: !this.state.isSelected, isConflict: false });\r\n }\r\n\r\n // Copy to clipboard the code this checkbox actually does\r\n // Example : mesh.checkCollisions = true;\r\n onCopyClick() {\r\n if (this.props && this.props.target) {\r\n const { className, babylonNamespace } = getClassNameWithNamespace(this.props.target);\r\n const targetName = \"globalThis.debugNode\";\r\n const targetProperty = this.props.propertyName;\r\n const value = this.props.target[this.props.propertyName!];\r\n const strCommand = targetName + \".\" + targetProperty + \" = \" + value + \";// (debugNode as \" + babylonNamespace + className + \")\";\r\n copyCommandToClipboard(strCommand);\r\n } else {\r\n copyCommandToClipboard(\"undefined\");\r\n }\r\n }\r\n\r\n override render() {\r\n const icons = this.props.large ? Icons.size40 : Icons.size30;\r\n const icon = this.state.isConflict ? icons.mixed : this.state.isSelected ? icons.on : icons.off;\r\n return (\r\n <div className=\"checkBoxLine\">\r\n {this.props.icon && <img src={this.props.icon} title={this.props.iconLabel} alt={this.props.iconLabel} className=\"icon\" />}\r\n {this.props.label && (\r\n <div className=\"label\" title={this.props.iconLabel}>\r\n {this.props.label}\r\n </div>\r\n )}\r\n {this.props.faIcons && (\r\n <FontAwesomeIcon\r\n className={`cbx ${this.props.disabled ? \"disabled\" : \"\"}`}\r\n icon={this.state.isSelected ? this.props.faIcons.enabled : this.props.faIcons.disabled}\r\n onClick={() => !this.props.disabled && this.onChange()}\r\n />\r\n )}\r\n {!this.props.faIcons && (\r\n <div className=\"checkBox\">\r\n <label className={`container lbl${this.props.disabled ? \" disabled\" : \"\"} ${this.state.isSelected ? \"checked\" : \"\"}`}>\r\n <input\r\n type=\"checkbox\"\r\n className={`cbx hidden ${this.state.isConflict ? \"conflict\" : \"\"}`}\r\n checked={this.state.isSelected}\r\n onChange={() => this.onChange()}\r\n disabled={!!this.props.disabled}\r\n />\r\n <img className=\"icon\" src={icon} alt={this.props.label} />\r\n </label>\r\n </div>\r\n )}\r\n <div className=\"copy hoverIcon\" onClick={() => this.onCopyClick()} title=\"Copy to clipboard\">\r\n <img src={copyIcon} alt=\"Copy\" />\r\n </div>\r\n </div>\r\n );\r\n }\r\n}\r\n"]}
|
1
|
+
{"version":3,"file":"checkBoxLineComponent.js","sourceRoot":"","sources":["../../../../dev/sharedUiComponents/src/lines/checkBoxLineComponent.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from \"react\";\r\nimport type { Observable } from \"core/Misc/observable\";\r\nimport type { PropertyChangedEvent } from \"./../propertyChangedEvent\";\r\nimport { copyCommandToClipboard, getClassNameWithNamespace } from \"../copyCommandToClipboard\";\r\nimport type { IconDefinition } from \"@fortawesome/fontawesome-common-types\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { conflictingValuesPlaceholder } from \"./targetsProxy\";\r\nimport copyIcon from \"../imgs/copy.svg\";\r\n\r\nexport interface ICheckBoxLineComponentProps {\r\n label?: string;\r\n target?: any;\r\n propertyName?: string;\r\n isSelected?: boolean | (() => boolean);\r\n onSelect?: (value: boolean) => void;\r\n onValueChanged?: () => void;\r\n onPropertyChangedObservable?: Observable<PropertyChangedEvent>;\r\n disabled?: boolean;\r\n icon?: string;\r\n iconLabel?: string;\r\n faIcons?: { enabled: IconDefinition; disabled: IconDefinition };\r\n large?: boolean;\r\n}\r\n\r\nimport toggleOnIcon40px from \"../imgs/toggleOnIcon_40px.svg\";\r\nimport toggleOffIcon40px from \"../imgs/toggleOffIcon_40px.svg\";\r\nimport toggleOnIcon30px from \"../imgs/toggleOnIcon_30px.svg\";\r\nimport toggleMixedIcon30px from \"../imgs/toggleMixedIcon_30px.svg\";\r\nimport toggleOffIcon30px from \"../imgs/toggleOffIcon_30px.svg\";\r\n\r\nconst Icons = {\r\n size30: {\r\n on: toggleOnIcon30px,\r\n mixed: toggleMixedIcon30px,\r\n off: toggleOffIcon30px,\r\n },\r\n size40: {\r\n on: toggleOnIcon40px,\r\n mixed: \"\", // unneeded\r\n off: toggleOffIcon40px,\r\n },\r\n};\r\n\r\nexport class CheckBoxLineComponent extends React.Component<ICheckBoxLineComponentProps, { isSelected: boolean; isDisabled?: boolean; isConflict: boolean }> {\r\n private _localChange = false;\r\n constructor(props: ICheckBoxLineComponentProps) {\r\n super(props);\r\n\r\n if (this.props.isSelected !== undefined) {\r\n this.state = {\r\n isSelected: typeof this.props.isSelected === \"boolean\" ? this.props.isSelected : this.props.isSelected(),\r\n isConflict: false,\r\n };\r\n } else {\r\n this.state = {\r\n isSelected: this.props.target[this.props.propertyName!] === true,\r\n isConflict: this.props.target[this.props.propertyName!] === conflictingValuesPlaceholder,\r\n };\r\n }\r\n\r\n if (this.props.disabled) {\r\n this.state = { ...this.state, isDisabled: this.props.disabled };\r\n }\r\n }\r\n\r\n override shouldComponentUpdate(nextProps: ICheckBoxLineComponentProps, nextState: { isSelected: boolean; isDisabled: boolean; isConflict: boolean }) {\r\n let selected: boolean;\r\n\r\n if (nextProps.isSelected !== undefined) {\r\n selected = typeof nextProps.isSelected === \"boolean\" ? nextProps.isSelected : nextProps.isSelected();\r\n } else {\r\n selected = nextProps.target[nextProps.propertyName!] === true;\r\n if (nextProps.target[nextProps.propertyName!] === conflictingValuesPlaceholder) {\r\n nextState.isConflict = true;\r\n }\r\n }\r\n\r\n if (selected !== nextState.isSelected || this._localChange) {\r\n nextState.isSelected = selected;\r\n this._localChange = false;\r\n return true;\r\n }\r\n\r\n if (nextProps.disabled !== nextState.isDisabled) {\r\n return true;\r\n }\r\n\r\n return nextProps.label !== this.props.label || nextProps.target !== this.props.target || nextState.isConflict !== this.state.isConflict;\r\n }\r\n\r\n onChange() {\r\n this._localChange = true;\r\n if (this.props.onSelect) {\r\n this.props.onSelect(!this.state.isSelected);\r\n } else {\r\n if (this.props.onPropertyChangedObservable) {\r\n this.props.onPropertyChangedObservable.notifyObservers({\r\n object: this.props.target,\r\n property: this.props.propertyName!,\r\n value: !this.state.isSelected,\r\n initialValue: this.state.isSelected,\r\n });\r\n }\r\n\r\n if (this.props.target && this.props.propertyName) {\r\n this.props.target[this.props.propertyName!] = !this.state.isSelected;\r\n }\r\n }\r\n\r\n if (this.props.onValueChanged) {\r\n this.props.onValueChanged();\r\n }\r\n\r\n this.setState({ isSelected: !this.state.isSelected, isConflict: false });\r\n }\r\n\r\n // Copy to clipboard the code this checkbox actually does\r\n // Example : mesh.checkCollisions = true;\r\n onCopyClick() {\r\n if (this.props && this.props.target) {\r\n const { className, babylonNamespace } = getClassNameWithNamespace(this.props.target);\r\n const targetName = \"globalThis.debugNode\";\r\n const targetProperty = this.props.propertyName;\r\n const value = this.props.target[this.props.propertyName!];\r\n const strCommand = targetName + \".\" + targetProperty + \" = \" + value + \";// (debugNode as \" + babylonNamespace + className + \")\";\r\n copyCommandToClipboard(strCommand);\r\n } else {\r\n copyCommandToClipboard(\"undefined\");\r\n }\r\n }\r\n\r\n override render() {\r\n const icons = this.props.large ? Icons.size40 : Icons.size30;\r\n const icon = this.state.isConflict ? icons.mixed : this.state.isSelected ? icons.on : icons.off;\r\n return (\r\n <div className=\"checkBoxLine\">\r\n {this.props.icon && <img src={this.props.icon} title={this.props.iconLabel} alt={this.props.iconLabel} className=\"icon\" />}\r\n {this.props.label && (\r\n <div className=\"label\" title={this.props.iconLabel}>\r\n {this.props.label}\r\n </div>\r\n )}\r\n {this.props.faIcons && (\r\n <FontAwesomeIcon\r\n className={`cbx ${this.props.disabled ? \"disabled\" : \"\"}`}\r\n icon={this.state.isSelected ? this.props.faIcons.enabled : this.props.faIcons.disabled}\r\n onClick={() => !this.props.disabled && this.onChange()}\r\n />\r\n )}\r\n {!this.props.faIcons && (\r\n <div className=\"checkBox\">\r\n <label className={`container lbl${this.props.disabled ? \" disabled\" : \"\"} ${this.state.isSelected ? \"checked\" : \"\"}`}>\r\n <input\r\n type=\"checkbox\"\r\n className={`cbx hidden ${this.state.isConflict ? \"conflict\" : \"\"}`}\r\n checked={this.state.isSelected}\r\n onChange={() => this.onChange()}\r\n disabled={!!this.props.disabled}\r\n />\r\n <img className=\"icon\" src={icon} alt={this.props.label} />\r\n </label>\r\n </div>\r\n )}\r\n <div className=\"copy hoverIcon\" onClick={() => this.onCopyClick()} title=\"Copy to clipboard\">\r\n <img src={copyIcon} alt=\"Copy\" />\r\n </div>\r\n </div>\r\n );\r\n }\r\n}\r\n"]}
|
@@ -151,7 +151,7 @@ export class ColorLine extends React.Component {
|
|
151
151
|
const chevron = this.state.isExpanded ? _jsx(FontAwesomeIcon, { icon: faMinus }) : _jsx(FontAwesomeIcon, { icon: faPlus });
|
152
152
|
return (_jsxs("div", { className: "color3Line", children: [_jsxs("div", { className: "firstLine", children: [this.props.icon && _jsx("img", { src: this.props.icon, title: this.props.iconLabel, alt: this.props.iconLabel, className: "icon" }), _jsx("div", { className: "label", title: this.props.label, children: this.props.label }), _jsx("div", { className: "color3", children: _jsx(ColorPickerLine, { lockObject: this.props.lockObject, linearHint: this.props.isLinear, value: this.props.disableAlpha ? this._toColor3(this.state.color) : this.state.color, onColorChanged: (colorString) => {
|
153
153
|
this.setColorFromString(colorString);
|
154
|
-
} }) }), _jsx("div", { className: "expand hoverIcon", onClick: () => this.switchExpandState(), title: "Expand", children: chevron }), _jsx("div", { className: "copy hoverIcon", onClick: () => this.onCopyClick(), title: "Copy to clipboard", children: _jsx("img", { src: copyIcon, alt: "Copy" }) })] }), this.state.isExpanded && (_jsxs("div", { className: "secondLine", children: [_jsx(NumericInput, { lockObject: this.props.lockObject, label: "r", labelTooltip: "Red", value: this.state.color.r, onChange: (value) => this.updateStateR(value) }), _jsx(NumericInput, { lockObject: this.props.lockObject, label: "g", labelTooltip: "Green", value: this.state.color.g, onChange: (value) => this.updateStateG(value) }), _jsx(NumericInput, { lockObject: this.props.lockObject, label: "b", labelTooltip: "Blue", value: this.state.color.b, onChange: (value) => this.updateStateB(value) }), this.props.disableAlpha || (_jsx(NumericInput, { lockObject: this.props.lockObject, label: "a", labelTooltip: "Alpha", value: this.state.color.a, onChange: (value) => this.updateStateA(value) }))] }))] }));
|
154
|
+
} }) }), _jsx("div", { className: "expand hoverIcon", onClick: () => this.switchExpandState(), title: "Expand", children: chevron }), _jsx("div", { className: "copy hoverIcon", onClick: () => this.onCopyClick(), title: "Copy to clipboard", children: _jsx("img", { src: copyIcon, alt: "Copy" }) })] }), this.state.isExpanded && (_jsxs("div", { className: "secondLine", children: [_jsx(NumericInput, { lockObject: this.props.lockObject, label: "r", labelTooltip: "Red", value: this.state.color.r, step: 0.1, onChange: (value) => this.updateStateR(value) }), _jsx(NumericInput, { lockObject: this.props.lockObject, label: "g", labelTooltip: "Green", value: this.state.color.g, step: 0.1, onChange: (value) => this.updateStateG(value) }), _jsx(NumericInput, { lockObject: this.props.lockObject, label: "b", labelTooltip: "Blue", value: this.state.color.b, step: 0.1, onChange: (value) => this.updateStateB(value) }), this.props.disableAlpha || (_jsx(NumericInput, { lockObject: this.props.lockObject, label: "a", labelTooltip: "Alpha", value: this.state.color.a, step: 0.1, onChange: (value) => this.updateStateA(value) }))] }))] }));
|
155
155
|
}
|
156
156
|
}
|
157
157
|
//# sourceMappingURL=colorLineComponent.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"colorLineComponent.js","sourceRoot":"","sources":["../../../../dev/sharedUiComponents/src/lines/colorLineComponent.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from \"react\";\r\nimport type { Observable } from \"core/Misc/observable\";\r\nimport { Color3, Color4 } from \"core/Maths/math.color\";\r\nimport { NumericInput } from \"./numericInputComponent\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { faMinus, faPlus } from \"@fortawesome/free-solid-svg-icons\";\r\nimport type { PropertyChangedEvent } from \"../propertyChangedEvent\";\r\nimport { copyCommandToClipboard, getClassNameWithNamespace } from \"../copyCommandToClipboard\";\r\nimport { ColorPickerLine } from \"./colorPickerComponent\";\r\nimport type { LockObject } from \"../tabs/propertyGrids/lockObject\";\r\nimport { conflictingValuesPlaceholder } from \"./targetsProxy\";\r\nimport copyIcon from \"../imgs/copy.svg\";\r\n\r\nconst emptyColor = new Color4(0, 0, 0, 0);\r\n\r\nexport interface IColorLineProps {\r\n label: string;\r\n target?: any;\r\n propertyName: string;\r\n onPropertyChangedObservable?: Observable<PropertyChangedEvent>;\r\n onChange?: () => void;\r\n isLinear?: boolean;\r\n icon?: string;\r\n iconLabel?: string;\r\n disableAlpha?: boolean;\r\n lockObject: LockObject;\r\n}\r\n\r\ninterface IColorLineComponentState {\r\n isExpanded: boolean;\r\n color: Color4;\r\n}\r\n\r\nexport class ColorLine extends React.Component<IColorLineProps, IColorLineComponentState> {\r\n constructor(props: IColorLineProps) {\r\n super(props);\r\n\r\n this.state = { isExpanded: false, color: this.getValue() };\r\n\r\n const target = this.props.target;\r\n target._isLinearColor = props.isLinear; // so that replayRecorder can append toLinearSpace() as appropriate\r\n }\r\n\r\n override shouldComponentUpdate(nextProps: IColorLineProps, nextState: IColorLineComponentState) {\r\n const stateColor = nextState.color;\r\n const propsColor = this.getValue(nextProps);\r\n if (stateColor !== this.state.color) {\r\n nextState.color = stateColor;\r\n return true;\r\n }\r\n if (propsColor !== this.state.color) {\r\n nextState.color = propsColor;\r\n return true;\r\n }\r\n if (nextState.isExpanded !== this.state.isExpanded) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n getValue(props = this.props): Color4 {\r\n const target = props.target;\r\n const property = target[props.propertyName];\r\n if (!property) return emptyColor;\r\n if (typeof property === \"string\") {\r\n if (property === conflictingValuesPlaceholder) {\r\n return emptyColor;\r\n }\r\n return this._convertToColor(property);\r\n } else {\r\n if (props.isLinear) {\r\n return property.toGammaSpace();\r\n }\r\n return property.clone();\r\n }\r\n }\r\n\r\n setColorFromString(colorString: string) {\r\n const color = this._convertToColor(colorString);\r\n this.setColor(color);\r\n }\r\n\r\n setColor(newColor: Color4) {\r\n this.setState({ color: newColor.clone() });\r\n if (this.props.isLinear) {\r\n newColor.toLinearSpaceToRef(newColor);\r\n }\r\n // whether to set properties to color3 or color4\r\n const setColor = this.props.disableAlpha ? this._toColor3(newColor) : newColor;\r\n\r\n const target = this.props.target;\r\n const initialValue = target[this.props.propertyName];\r\n const value = typeof target[this.props.propertyName] === \"string\" ? setColor.toHexString() : setColor;\r\n // make the change\r\n target[this.props.propertyName] = value;\r\n // notify observers\r\n if (this.props.onPropertyChangedObservable) {\r\n this.props.onPropertyChangedObservable.notifyObservers({\r\n object: target,\r\n property: this.props.propertyName,\r\n value,\r\n initialValue,\r\n });\r\n }\r\n\r\n if (this.props.onChange) {\r\n this.props.onChange();\r\n }\r\n }\r\n\r\n switchExpandState() {\r\n this.setState({ isExpanded: !this.state.isExpanded });\r\n }\r\n\r\n updateStateR(value: number) {\r\n this.setColor(new Color4(value, this.state.color.g, this.state.color.b, this.state.color.a));\r\n }\r\n\r\n updateStateG(value: number) {\r\n this.setColor(new Color4(this.state.color.r, value, this.state.color.b, this.state.color.a));\r\n }\r\n\r\n updateStateB(value: number) {\r\n this.setColor(new Color4(this.state.color.r, this.state.color.g, value, this.state.color.a));\r\n }\r\n\r\n updateStateA(value: number) {\r\n if (this.props.disableAlpha) {\r\n return;\r\n }\r\n this.setColor(new Color4(this.state.color.r, this.state.color.g, this.state.color.b, value));\r\n }\r\n\r\n private _convertToColor(color: string): Color4 {\r\n if (color === \"\" || color === \"transparent\") {\r\n return emptyColor;\r\n }\r\n\r\n if (color.substring(0, 1) !== \"#\" || (color.length !== 7 && color.length !== 9)) {\r\n const d = document.createElement(\"div\");\r\n d.style.color = color;\r\n document.body.append(d);\r\n const rgb = window.getComputedStyle(d).color;\r\n document.body.removeChild(d);\r\n\r\n const rgbArray = rgb\r\n .substring(4, rgb.length - 1)\r\n .replace(/ /g, \"\")\r\n .split(\",\");\r\n\r\n const alpha = rgbArray.length > 3 ? parseInt(rgbArray[3]) / 255 : 1.0;\r\n\r\n return new Color4(parseInt(rgbArray[0]) / 255, parseInt(rgbArray[1]) / 255, parseInt(rgbArray[2]) / 255, alpha);\r\n }\r\n\r\n if (this.props.disableAlpha) {\r\n const color3 = Color3.FromHexString(color);\r\n return new Color4(color3.r, color3.g, color3.b, 1.0);\r\n }\r\n\r\n return Color4.FromHexString(color);\r\n }\r\n\r\n private _toColor3(color: Color4) {\r\n return new Color3(color.r, color.g, color.b);\r\n }\r\n\r\n // Copy to clipboard the code this Color3 actually does\r\n // Example : material.diffuseColor = new BABYLON.Vector3(0,1,0);\r\n onCopyClick() {\r\n if (this.props && this.props.target) {\r\n const { className, babylonNamespace } = getClassNameWithNamespace(this.props.target);\r\n const targetName = \"globalThis.debugNode\";\r\n const targetProperty = this.props.propertyName;\r\n const value = this.props.target[this.props.propertyName!];\r\n const hex = this.state.color.toHexString();\r\n let strColor;\r\n if (value.a) {\r\n strColor = \"new \" + babylonNamespace + \"Color4(\" + value.r + \", \" + value.g + \", \" + value.b + \", \" + value.a + \")\";\r\n } else {\r\n strColor = \"new \" + babylonNamespace + \"Color3(\" + value.r + \", \" + value.g + \", \" + value.b + \")\";\r\n }\r\n strColor += \";// (HEX : \" + hex;\r\n const strCommand = targetName + \".\" + targetProperty + \" = \" + strColor + \" , debugNode as \" + babylonNamespace + className + \")\";\r\n copyCommandToClipboard(strCommand);\r\n } else {\r\n copyCommandToClipboard(\"undefined\");\r\n }\r\n }\r\n\r\n override render() {\r\n const chevron = this.state.isExpanded ? <FontAwesomeIcon icon={faMinus} /> : <FontAwesomeIcon icon={faPlus} />;\r\n\r\n return (\r\n <div className=\"color3Line\">\r\n <div className=\"firstLine\">\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=\"color3\">\r\n <ColorPickerLine\r\n lockObject={this.props.lockObject}\r\n linearHint={this.props.isLinear}\r\n value={this.props.disableAlpha ? this._toColor3(this.state.color) : this.state.color}\r\n onColorChanged={(colorString) => {\r\n this.setColorFromString(colorString);\r\n }}\r\n />\r\n </div>\r\n <div className=\"expand hoverIcon\" onClick={() => this.switchExpandState()} title=\"Expand\">\r\n {chevron}\r\n </div>\r\n <div className=\"copy hoverIcon\" onClick={() => this.onCopyClick()} title=\"Copy to clipboard\">\r\n <img src={copyIcon} alt=\"Copy\" />\r\n </div>\r\n </div>\r\n {this.state.isExpanded && (\r\n <div className=\"secondLine\">\r\n <NumericInput lockObject={this.props.lockObject} label=\"r\" labelTooltip=\"Red\" value={this.state.color.r} onChange={(value) => this.updateStateR(value)} />\r\n <NumericInput lockObject={this.props.lockObject} label=\"g\" labelTooltip=\"Green\" value={this.state.color.g} onChange={(value) => this.updateStateG(value)} />\r\n <NumericInput lockObject={this.props.lockObject} label=\"b\" labelTooltip=\"Blue\" value={this.state.color.b} onChange={(value) => this.updateStateB(value)} />\r\n {this.props.disableAlpha || (\r\n <NumericInput\r\n lockObject={this.props.lockObject}\r\n label=\"a\"\r\n labelTooltip=\"Alpha\"\r\n value={this.state.color.a}\r\n onChange={(value) => this.updateStateA(value)}\r\n />\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n }\r\n}\r\n"]}
|
1
|
+
{"version":3,"file":"colorLineComponent.js","sourceRoot":"","sources":["../../../../dev/sharedUiComponents/src/lines/colorLineComponent.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from \"react\";\r\nimport type { Observable } from \"core/Misc/observable\";\r\nimport { Color3, Color4 } from \"core/Maths/math.color\";\r\nimport { NumericInput } from \"./numericInputComponent\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { faMinus, faPlus } from \"@fortawesome/free-solid-svg-icons\";\r\nimport type { PropertyChangedEvent } from \"../propertyChangedEvent\";\r\nimport { copyCommandToClipboard, getClassNameWithNamespace } from \"../copyCommandToClipboard\";\r\nimport { ColorPickerLine } from \"./colorPickerComponent\";\r\nimport type { LockObject } from \"../tabs/propertyGrids/lockObject\";\r\nimport { conflictingValuesPlaceholder } from \"./targetsProxy\";\r\nimport copyIcon from \"../imgs/copy.svg\";\r\n\r\nconst emptyColor = new Color4(0, 0, 0, 0);\r\n\r\nexport interface IColorLineProps {\r\n label: string;\r\n target?: any;\r\n propertyName: string;\r\n onPropertyChangedObservable?: Observable<PropertyChangedEvent>;\r\n onChange?: () => void;\r\n isLinear?: boolean;\r\n icon?: string;\r\n iconLabel?: string;\r\n disableAlpha?: boolean;\r\n lockObject: LockObject;\r\n}\r\n\r\ninterface IColorLineComponentState {\r\n isExpanded: boolean;\r\n color: Color4;\r\n}\r\n\r\nexport class ColorLine extends React.Component<IColorLineProps, IColorLineComponentState> {\r\n constructor(props: IColorLineProps) {\r\n super(props);\r\n\r\n this.state = { isExpanded: false, color: this.getValue() };\r\n\r\n const target = this.props.target;\r\n target._isLinearColor = props.isLinear; // so that replayRecorder can append toLinearSpace() as appropriate\r\n }\r\n\r\n override shouldComponentUpdate(nextProps: IColorLineProps, nextState: IColorLineComponentState) {\r\n const stateColor = nextState.color;\r\n const propsColor = this.getValue(nextProps);\r\n if (stateColor !== this.state.color) {\r\n nextState.color = stateColor;\r\n return true;\r\n }\r\n if (propsColor !== this.state.color) {\r\n nextState.color = propsColor;\r\n return true;\r\n }\r\n if (nextState.isExpanded !== this.state.isExpanded) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n getValue(props = this.props): Color4 {\r\n const target = props.target;\r\n const property = target[props.propertyName];\r\n if (!property) return emptyColor;\r\n if (typeof property === \"string\") {\r\n if (property === conflictingValuesPlaceholder) {\r\n return emptyColor;\r\n }\r\n return this._convertToColor(property);\r\n } else {\r\n if (props.isLinear) {\r\n return property.toGammaSpace();\r\n }\r\n return property.clone();\r\n }\r\n }\r\n\r\n setColorFromString(colorString: string) {\r\n const color = this._convertToColor(colorString);\r\n this.setColor(color);\r\n }\r\n\r\n setColor(newColor: Color4) {\r\n this.setState({ color: newColor.clone() });\r\n if (this.props.isLinear) {\r\n newColor.toLinearSpaceToRef(newColor);\r\n }\r\n // whether to set properties to color3 or color4\r\n const setColor = this.props.disableAlpha ? this._toColor3(newColor) : newColor;\r\n\r\n const target = this.props.target;\r\n const initialValue = target[this.props.propertyName];\r\n const value = typeof target[this.props.propertyName] === \"string\" ? setColor.toHexString() : setColor;\r\n // make the change\r\n target[this.props.propertyName] = value;\r\n // notify observers\r\n if (this.props.onPropertyChangedObservable) {\r\n this.props.onPropertyChangedObservable.notifyObservers({\r\n object: target,\r\n property: this.props.propertyName,\r\n value,\r\n initialValue,\r\n });\r\n }\r\n\r\n if (this.props.onChange) {\r\n this.props.onChange();\r\n }\r\n }\r\n\r\n switchExpandState() {\r\n this.setState({ isExpanded: !this.state.isExpanded });\r\n }\r\n\r\n updateStateR(value: number) {\r\n this.setColor(new Color4(value, this.state.color.g, this.state.color.b, this.state.color.a));\r\n }\r\n\r\n updateStateG(value: number) {\r\n this.setColor(new Color4(this.state.color.r, value, this.state.color.b, this.state.color.a));\r\n }\r\n\r\n updateStateB(value: number) {\r\n this.setColor(new Color4(this.state.color.r, this.state.color.g, value, this.state.color.a));\r\n }\r\n\r\n updateStateA(value: number) {\r\n if (this.props.disableAlpha) {\r\n return;\r\n }\r\n this.setColor(new Color4(this.state.color.r, this.state.color.g, this.state.color.b, value));\r\n }\r\n\r\n private _convertToColor(color: string): Color4 {\r\n if (color === \"\" || color === \"transparent\") {\r\n return emptyColor;\r\n }\r\n\r\n if (color.substring(0, 1) !== \"#\" || (color.length !== 7 && color.length !== 9)) {\r\n const d = document.createElement(\"div\");\r\n d.style.color = color;\r\n document.body.append(d);\r\n const rgb = window.getComputedStyle(d).color;\r\n document.body.removeChild(d);\r\n\r\n const rgbArray = rgb\r\n .substring(4, rgb.length - 1)\r\n .replace(/ /g, \"\")\r\n .split(\",\");\r\n\r\n const alpha = rgbArray.length > 3 ? parseInt(rgbArray[3]) / 255 : 1.0;\r\n\r\n return new Color4(parseInt(rgbArray[0]) / 255, parseInt(rgbArray[1]) / 255, parseInt(rgbArray[2]) / 255, alpha);\r\n }\r\n\r\n if (this.props.disableAlpha) {\r\n const color3 = Color3.FromHexString(color);\r\n return new Color4(color3.r, color3.g, color3.b, 1.0);\r\n }\r\n\r\n return Color4.FromHexString(color);\r\n }\r\n\r\n private _toColor3(color: Color4) {\r\n return new Color3(color.r, color.g, color.b);\r\n }\r\n\r\n // Copy to clipboard the code this Color3 actually does\r\n // Example : material.diffuseColor = new BABYLON.Vector3(0,1,0);\r\n onCopyClick() {\r\n if (this.props && this.props.target) {\r\n const { className, babylonNamespace } = getClassNameWithNamespace(this.props.target);\r\n const targetName = \"globalThis.debugNode\";\r\n const targetProperty = this.props.propertyName;\r\n const value = this.props.target[this.props.propertyName!];\r\n const hex = this.state.color.toHexString();\r\n let strColor;\r\n if (value.a) {\r\n strColor = \"new \" + babylonNamespace + \"Color4(\" + value.r + \", \" + value.g + \", \" + value.b + \", \" + value.a + \")\";\r\n } else {\r\n strColor = \"new \" + babylonNamespace + \"Color3(\" + value.r + \", \" + value.g + \", \" + value.b + \")\";\r\n }\r\n strColor += \";// (HEX : \" + hex;\r\n const strCommand = targetName + \".\" + targetProperty + \" = \" + strColor + \" , debugNode as \" + babylonNamespace + className + \")\";\r\n copyCommandToClipboard(strCommand);\r\n } else {\r\n copyCommandToClipboard(\"undefined\");\r\n }\r\n }\r\n\r\n override render() {\r\n const chevron = this.state.isExpanded ? <FontAwesomeIcon icon={faMinus} /> : <FontAwesomeIcon icon={faPlus} />;\r\n\r\n return (\r\n <div className=\"color3Line\">\r\n <div className=\"firstLine\">\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=\"color3\">\r\n <ColorPickerLine\r\n lockObject={this.props.lockObject}\r\n linearHint={this.props.isLinear}\r\n value={this.props.disableAlpha ? this._toColor3(this.state.color) : this.state.color}\r\n onColorChanged={(colorString) => {\r\n this.setColorFromString(colorString);\r\n }}\r\n />\r\n </div>\r\n <div className=\"expand hoverIcon\" onClick={() => this.switchExpandState()} title=\"Expand\">\r\n {chevron}\r\n </div>\r\n <div className=\"copy hoverIcon\" onClick={() => this.onCopyClick()} title=\"Copy to clipboard\">\r\n <img src={copyIcon} alt=\"Copy\" />\r\n </div>\r\n </div>\r\n {this.state.isExpanded && (\r\n <div className=\"secondLine\">\r\n <NumericInput\r\n lockObject={this.props.lockObject}\r\n label=\"r\"\r\n labelTooltip=\"Red\"\r\n value={this.state.color.r}\r\n step={0.1}\r\n onChange={(value) => this.updateStateR(value)}\r\n />\r\n <NumericInput\r\n lockObject={this.props.lockObject}\r\n label=\"g\"\r\n labelTooltip=\"Green\"\r\n value={this.state.color.g}\r\n step={0.1}\r\n onChange={(value) => this.updateStateG(value)}\r\n />\r\n <NumericInput\r\n lockObject={this.props.lockObject}\r\n label=\"b\"\r\n labelTooltip=\"Blue\"\r\n value={this.state.color.b}\r\n step={0.1}\r\n onChange={(value) => this.updateStateB(value)}\r\n />\r\n {this.props.disableAlpha || (\r\n <NumericInput\r\n lockObject={this.props.lockObject}\r\n label=\"a\"\r\n labelTooltip=\"Alpha\"\r\n value={this.state.color.a}\r\n step={0.1}\r\n onChange={(value) => this.updateStateA(value)}\r\n />\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n }\r\n}\r\n"]}
|
@@ -665,20 +665,10 @@ export class GraphCanvasComponent extends React.Component {
|
|
665
665
|
if (this._frames.some((f) => f.nodes.indexOf(node) !== -1)) {
|
666
666
|
return;
|
667
667
|
}
|
668
|
-
graph.setNode(node.id.toString(), {
|
669
|
-
id: node.id,
|
670
|
-
type: "node",
|
671
|
-
width: node.width,
|
672
|
-
height: node.height,
|
673
|
-
});
|
668
|
+
graph.setNode(node.id.toString(), { id: node.id, type: "node", width: node.width, height: node.height });
|
674
669
|
});
|
675
670
|
this._frames.forEach((frame) => {
|
676
|
-
graph.setNode(frame.id.toString(), {
|
677
|
-
id: frame.id,
|
678
|
-
type: "frame",
|
679
|
-
width: frame.element.clientWidth,
|
680
|
-
height: frame.element.clientHeight,
|
681
|
-
});
|
671
|
+
graph.setNode(frame.id.toString(), { id: frame.id, type: "frame", width: frame.element.clientWidth, height: frame.element.clientHeight });
|
682
672
|
});
|
683
673
|
this._nodes.forEach((node) => {
|
684
674
|
node.content.outputs.forEach((output) => {
|
@@ -916,10 +906,7 @@ export class GraphCanvasComponent extends React.Component {
|
|
916
906
|
const port = this._candidateLink.portA;
|
917
907
|
const frame = this.frames.find((frame) => frame.id === port.parentFrameId);
|
918
908
|
if (frame) {
|
919
|
-
const data = {
|
920
|
-
frame,
|
921
|
-
port,
|
922
|
-
};
|
909
|
+
const data = { frame, port };
|
923
910
|
this.props.stateManager.onSelectionChangedObservable.notifyObservers({ selection: data });
|
924
911
|
}
|
925
912
|
}
|
@@ -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 * as styles from \"./graphCanvas.module.scss\";\r\nimport * as commonStyles from \"./common.module.scss\";\r\n\r\nimport { TypeLedger } from \"./typeLedger\";\r\nimport { RefreshNode } from \"./tools\";\r\nimport { SearchBoxComponent } from \"./searchBox\";\r\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 this.props.stateManager.onNewNodeCreatedObservable.notifyObservers(newNode);\r\n\r\n if (selectNew) {\r\n this.props.stateManager.onSelectionChangedObservable.notifyObservers({ selection: newNode, forceKeepSelection: true });\r\n }\r\n }\r\n\r\n // Relink\r\n const done = new Array<boolean>(newNodes.length);\r\n for (let index = 0; index < newNodes.length; index++) {\r\n this.reconnectNewNodes(index, newNodes, copiedNodes, done);\r\n }\r\n\r\n 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 if (location.isCollapsed) {\r\n node.collapse();\r\n }\r\n node.cleanAccumulation();\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (!isImportingAFrame) {\r\n this.processEditorData(editorData);\r\n }\r\n }\r\n\r\n this._isLoading = false;\r\n for (const node of this.nodes) {\r\n node._refreshLinks();\r\n }\r\n }\r\n\r\n addFrame(frameData: IFrameData) {\r\n const frame = GraphFrame.Parse(frameData, this, this.props.stateManager.getEditorDataMap());\r\n this._frames.push(frame);\r\n this.stateManager.onSelectionChangedObservable.notifyObservers({ selection: frame });\r\n }\r\n\r\n 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 * as styles from \"./graphCanvas.module.scss\";\r\nimport * as commonStyles from \"./common.module.scss\";\r\n\r\nimport { TypeLedger } from \"./typeLedger\";\r\nimport { RefreshNode } from \"./tools\";\r\nimport { SearchBoxComponent } from \"./searchBox\";\r\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 this.props.stateManager.onNewNodeCreatedObservable.notifyObservers(newNode);\r\n\r\n if (selectNew) {\r\n this.props.stateManager.onSelectionChangedObservable.notifyObservers({ selection: newNode, forceKeepSelection: true });\r\n }\r\n }\r\n\r\n // Relink\r\n const done = new Array<boolean>(newNodes.length);\r\n for (let index = 0; index < newNodes.length; index++) {\r\n this.reconnectNewNodes(index, newNodes, copiedNodes, done);\r\n }\r\n\r\n 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(), { id: node.id, type: \"node\", width: node.width, height: node.height });\r\n });\r\n\r\n this._frames.forEach((frame) => {\r\n graph.setNode(frame.id.toString(), { id: frame.id, type: \"frame\", width: frame.element.clientWidth, height: frame.element.clientHeight });\r\n });\r\n\r\n this._nodes.forEach((node) => {\r\n node.content.outputs.forEach((output) => {\r\n if (!output.hasEndpoints) {\r\n return;\r\n }\r\n\r\n output.endpoints!.forEach((endpoint) => {\r\n const sourceFrames = this._frames.filter((f) => f.nodes.indexOf(node) !== -1);\r\n const targetFrames = this._frames.filter((f) => f.nodes.some((n) => n.content.data === endpoint.ownerData));\r\n\r\n const sourceId = sourceFrames.length > 0 ? sourceFrames[0].id : node.id;\r\n const targetId = targetFrames.length > 0 ? targetFrames[0].id : endpoint.ownerData.uniqueId;\r\n\r\n graph.setEdge(sourceId.toString(), targetId.toString());\r\n });\r\n });\r\n });\r\n\r\n // Distribute\r\n dagre.layout(graph);\r\n\r\n // Update graph\r\n const dagreNodes = graph.nodes().map((node) => graph.node(node));\r\n dagreNodes.forEach((dagreNode: any) => {\r\n if (!dagreNode) {\r\n return;\r\n }\r\n if (dagreNode.type === \"node\") {\r\n for (const node of this._nodes) {\r\n if (node.id === dagreNode.id) {\r\n node.x = dagreNode.x - dagreNode.width / 2;\r\n node.y = dagreNode.y - dagreNode.height / 2;\r\n node.cleanAccumulation();\r\n return;\r\n }\r\n }\r\n return;\r\n }\r\n\r\n for (const frame of this._frames) {\r\n if (frame.id === dagreNode.id) {\r\n this._frameIsMoving = true;\r\n frame.move(dagreNode.x - dagreNode.width / 2, dagreNode.y - dagreNode.height / 2, false);\r\n frame.cleanAccumulation();\r\n this._frameIsMoving = false;\r\n return;\r\n }\r\n }\r\n });\r\n }\r\n\r\n override componentDidMount() {\r\n this._hostCanvas = this._hostCanvasRef.current!;\r\n this._rootContainer = this._rootContainerRef.current!;\r\n this._graphCanvas = this._graphCanvasRef.current!;\r\n this._svgCanvas = this._svgCanvasRef.current! as unknown as HTMLElement;\r\n this._selectionContainer = this._selectionContainerRef.current!;\r\n this._frameContainer = this._frameContainerRef.current!;\r\n\r\n this.gridSize = DataStorage.ReadNumber(\"GridSize\", 20);\r\n this.updateTransform();\r\n }\r\n\r\n 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 = { frame, port };\r\n this.props.stateManager.onSelectionChangedObservable.notifyObservers({ selection: data });\r\n }\r\n } else if (this._candidateLink.portA instanceof NodePort) {\r\n this.props.stateManager.onSelectionChangedObservable.notifyObservers({ selection: this._candidateLink.portA });\r\n }\r\n }\r\n this._candidateLink.dispose();\r\n this._candidateLink = null;\r\n this._candidatePort = null;\r\n }\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 if (location.isCollapsed) {\r\n node.collapse();\r\n }\r\n node.cleanAccumulation();\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (!isImportingAFrame) {\r\n this.processEditorData(editorData);\r\n }\r\n }\r\n\r\n this._isLoading = false;\r\n for (const node of this.nodes) {\r\n node._refreshLinks();\r\n }\r\n }\r\n\r\n addFrame(frameData: IFrameData) {\r\n const frame = GraphFrame.Parse(frameData, this, this.props.stateManager.getEditorDataMap());\r\n this._frames.push(frame);\r\n this.stateManager.onSelectionChangedObservable.notifyObservers({ selection: frame });\r\n }\r\n\r\n 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"]}
|
@@ -82,6 +82,7 @@ export declare class GraphNode {
|
|
82
82
|
private _onDown;
|
83
83
|
cleanAccumulation(useCeil?: boolean): void;
|
84
84
|
private _onUp;
|
85
|
+
private _attach;
|
85
86
|
private _onMove;
|
86
87
|
renderProperties(): Nullable<JSX.Element>;
|
87
88
|
_forceRebuild(source: any, propertyName: string, notifiers?: IEditablePropertyOption["notifiers"]): void;
|
@@ -384,18 +384,46 @@ export class GraphNode {
|
|
384
384
|
this._stateManager.onRebuildRequiredObservable.notifyObservers();
|
385
385
|
this._stateManager.onNodeMovedObservable.notifyObservers(this);
|
386
386
|
}
|
387
|
+
_attach(attached, right) {
|
388
|
+
for (const link of this.links) {
|
389
|
+
if (right && link.nodeA == this && link.nodeB != undefined && !attached.includes(link.nodeB)) {
|
390
|
+
attached.push(link.nodeB);
|
391
|
+
link.nodeB._attach(attached, right);
|
392
|
+
}
|
393
|
+
if (!right && link.nodeB == this && link.nodeA != undefined && !attached.includes(link.nodeA)) {
|
394
|
+
attached.push(link.nodeA);
|
395
|
+
link.nodeA._attach(attached, right);
|
396
|
+
}
|
397
|
+
}
|
398
|
+
}
|
387
399
|
_onMove(evt) {
|
388
400
|
this._ownerCanvas._targetLinkCandidate = null;
|
389
401
|
if (this._mouseStartPointX === null || this._mouseStartPointY === null || evt.ctrlKey) {
|
390
402
|
return;
|
391
403
|
}
|
392
|
-
//
|
404
|
+
// Delta
|
393
405
|
const newX = (evt.clientX - this._mouseStartPointX) / this._ownerCanvas.zoom;
|
394
406
|
const newY = (evt.clientY - this._mouseStartPointY) / this._ownerCanvas.zoom;
|
407
|
+
// Move selected
|
395
408
|
for (const selectedNode of this._ownerCanvas.selectedNodes) {
|
396
409
|
selectedNode.x += newX;
|
397
410
|
selectedNode.y += newY;
|
398
411
|
}
|
412
|
+
// Move attached (Shift / Alt)
|
413
|
+
const attached = [];
|
414
|
+
if (evt.shiftKey) {
|
415
|
+
this._attach(attached, false);
|
416
|
+
}
|
417
|
+
else if (evt.altKey) {
|
418
|
+
this._attach(attached, true);
|
419
|
+
}
|
420
|
+
for (const attachedNode of attached) {
|
421
|
+
if (!this._ownerCanvas.selectedNodes.includes(attachedNode)) {
|
422
|
+
attachedNode.x += newX;
|
423
|
+
attachedNode.y += newY;
|
424
|
+
}
|
425
|
+
}
|
426
|
+
// Move frame
|
399
427
|
for (const frame of this._ownerCanvas.selectedFrames) {
|
400
428
|
frame._moveFrame(newX, newY);
|
401
429
|
}
|
@@ -428,10 +456,7 @@ export class GraphNode {
|
|
428
456
|
if (!control) {
|
429
457
|
control = PropertyLedger.DefaultControl;
|
430
458
|
}
|
431
|
-
return React.createElement(control, {
|
432
|
-
stateManager: this._stateManager,
|
433
|
-
nodeData: this.content,
|
434
|
-
});
|
459
|
+
return React.createElement(control, { stateManager: this._stateManager, nodeData: this.content });
|
435
460
|
}
|
436
461
|
_forceRebuild(source, propertyName, notifiers) {
|
437
462
|
for (const refresh of this._visualPropertiesRefresh) {
|
@@ -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 * as localStyles from \"./graphNode.module.scss\";\r\nimport * as commonStyles from \"./common.module.scss\";\r\nimport type { IEditablePropertyListOption, IEditablePropertyOption, IPropertyDescriptionForEdition } from \"core/Decorators/nodeDecorator\";\r\nimport { PropertyTypeForEdition } from \"core/Decorators/nodeDecorator\";\r\nimport { ForceRebuild } from \"./automaticProperties\";\r\nimport dropdownArrowIcon from \"../imgs/dropdownArrowIcon_white.svg\";\r\nimport { BuildFloatUI } from \"./tools\";\r\n\r\nexport class GraphNode {\r\n private _visual: HTMLDivElement;\r\n private _headerContainer: HTMLDivElement;\r\n private _headerIcon: HTMLDivElement;\r\n private _headerIconImg: HTMLImageElement;\r\n private _headerCollapseImg: HTMLImageElement;\r\n private _header: HTMLDivElement;\r\n private _headerCollapse: HTMLDivElement;\r\n private _connections: HTMLDivElement;\r\n private _optionsContainer: HTMLDivElement;\r\n private _inputsContainer: HTMLDivElement;\r\n private _outputsContainer: HTMLDivElement;\r\n private _content: HTMLDivElement;\r\n private _comments: HTMLDivElement;\r\n private _executionTime: HTMLDivElement;\r\n private _selectionBorder: HTMLDivElement;\r\n private _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 private _visualPropertiesRefresh: Array<() => void> = [];\r\n\r\n public addClassToVisual(className: string) {\r\n this._visual.classList.add(className);\r\n }\r\n\r\n public removeClassFromVisual(className: string) {\r\n this._visual.classList.remove(className);\r\n }\r\n\r\n public get isCollapsed() {\r\n return this._isCollapsed;\r\n }\r\n\r\n public get isVisible() {\r\n return this._isVisible;\r\n }\r\n\r\n public set isVisible(value: boolean) {\r\n this._isVisible = value;\r\n\r\n if (!value) {\r\n this._visual.classList.add(commonStyles[\"hidden\"]);\r\n } else {\r\n this._visual.classList.remove(commonStyles[\"hidden\"]);\r\n this._upateNodePortNames();\r\n }\r\n\r\n for (const link of this._links) {\r\n link.isVisible = value;\r\n }\r\n\r\n this._refreshLinks();\r\n }\r\n\r\n private _upateNodePortNames() {\r\n for (const port of this._inputPorts.concat(this._outputPorts)) {\r\n if (port.hasLabel()) {\r\n port.portName = port.portData.name;\r\n }\r\n }\r\n }\r\n\r\n public get outputPorts() {\r\n return this._outputPorts;\r\n }\r\n\r\n public get inputPorts() {\r\n return this._inputPorts;\r\n }\r\n\r\n public get links() {\r\n return this._links;\r\n }\r\n\r\n public get gridAlignedX() {\r\n return this._gridAlignedX;\r\n }\r\n\r\n public get gridAlignedY() {\r\n return this._gridAlignedY;\r\n }\r\n\r\n public get x() {\r\n return this._x;\r\n }\r\n\r\n public set x(value: number) {\r\n if (this._x === value) {\r\n return;\r\n }\r\n this._x = value;\r\n\r\n this._gridAlignedX = this._ownerCanvas.getGridPosition(value);\r\n this._visual.style.left = `${this._gridAlignedX}px`;\r\n\r\n this._refreshLinks();\r\n this._refreshFrames();\r\n }\r\n\r\n public get y() {\r\n return this._y;\r\n }\r\n\r\n public set y(value: number) {\r\n if (this._y === value) {\r\n return;\r\n }\r\n\r\n this._y = value;\r\n\r\n this._gridAlignedY = this._ownerCanvas.getGridPosition(value);\r\n this._visual.style.top = `${this._gridAlignedY}px`;\r\n\r\n this._refreshLinks();\r\n this._refreshFrames();\r\n }\r\n\r\n public get width() {\r\n return this._visual.clientWidth;\r\n }\r\n\r\n public get height() {\r\n return this._visual.clientHeight;\r\n }\r\n\r\n public get id() {\r\n return this.content.uniqueId;\r\n }\r\n\r\n public get name() {\r\n return this.content.name;\r\n }\r\n\r\n public get isSelected() {\r\n return this._isSelected;\r\n }\r\n\r\n public get enclosingFrameId() {\r\n return this._enclosingFrameId;\r\n }\r\n\r\n public set enclosingFrameId(value: number) {\r\n this._enclosingFrameId = value;\r\n }\r\n\r\n public set isSelected(value: boolean) {\r\n this.setIsSelected(value, false);\r\n }\r\n\r\n public setIsSelected(value: boolean, marqueeSelection: boolean) {\r\n if (this._isSelected === value) {\r\n return;\r\n }\r\n\r\n this._isSelected = value;\r\n\r\n if (!value) {\r\n this._visual.classList.remove(localStyles[\"selected\"]);\r\n const indexInSelection = this._ownerCanvas.selectedNodes.indexOf(this);\r\n\r\n if (indexInSelection > -1) {\r\n this._ownerCanvas.selectedNodes.splice(indexInSelection, 1);\r\n }\r\n } else {\r\n this._stateManager.onSelectionChangedObservable.notifyObservers({ selection: this, marqueeSelection });\r\n }\r\n }\r\n\r\n public get rootElement() {\r\n return this._visual;\r\n }\r\n\r\n public constructor(\r\n public content: INodeData,\r\n stateManager: StateManager\r\n ) {\r\n this._stateManager = stateManager;\r\n\r\n this._onSelectionChangedObserver = this._stateManager.onSelectionChangedObservable.add((options) => {\r\n const { selection: node } = options || {};\r\n if (node === this) {\r\n if (this.content.canBeActivated) {\r\n this.content.setIsActive?.(true);\r\n this._stateManager.queueRebuildCommand();\r\n }\r\n this._visual.classList.add(localStyles[\"selected\"]);\r\n if (this._displayManager && this._displayManager.onSelectionChanged) {\r\n this._displayManager.onSelectionChanged(this.content, node.content, this._stateManager);\r\n }\r\n } else {\r\n if (this._ownerCanvas.selectedNodes.indexOf(this) === -1) {\r\n if (this.content.canBeActivated && this.content.isActive) {\r\n this.content.setIsActive?.(false);\r\n this._stateManager.queueRebuildCommand();\r\n }\r\n this._visual.classList.remove(localStyles[\"selected\"]);\r\n if (this._displayManager && this._displayManager.onSelectionChanged) {\r\n this._displayManager.onSelectionChanged(this.content, node && (node as GraphNode).content ? (node as GraphNode).content : null, this._stateManager);\r\n }\r\n }\r\n }\r\n });\r\n\r\n this._onHighlightNodeObserver = this._stateManager.onHighlightNodeObservable.add((data) => {\r\n if (data.data !== this.content.data) {\r\n return;\r\n }\r\n if (data.active) {\r\n this._visual.classList.add(localStyles[\"highlighted\"]);\r\n } else {\r\n this._visual.classList.remove(localStyles[\"highlighted\"]);\r\n }\r\n });\r\n\r\n this._onUpdateRequiredObserver = this._stateManager.onUpdateRequiredObservable.add((data) => {\r\n if (data !== this.content.data) {\r\n return;\r\n }\r\n this.refresh();\r\n });\r\n\r\n this._onSelectionBoxMovedObserver = this._stateManager.onSelectionBoxMoved.add((rect1) => {\r\n const rect2 = this._visual.getBoundingClientRect();\r\n const overlap = !(rect1.right < rect2.left || rect1.left > rect2.right || rect1.bottom < rect2.top || rect1.top > rect2.bottom);\r\n\r\n this.setIsSelected(overlap, true);\r\n });\r\n\r\n this._onFrameCreatedObserver = this._stateManager.onFrameCreatedObservable.add((frame) => {\r\n if (this._ownerCanvas.frames.some((f) => f.nodes.indexOf(this) !== -1)) {\r\n return;\r\n }\r\n\r\n if (this.isOverlappingFrame(frame)) {\r\n frame.nodes.push(this);\r\n }\r\n });\r\n }\r\n\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 refresh of this._visualPropertiesRefresh) {\r\n refresh();\r\n }\r\n\r\n for (const port of this._inputPorts) {\r\n port.refresh();\r\n }\r\n\r\n for (const port of this._outputPorts) {\r\n port.refresh();\r\n }\r\n\r\n if (this.enclosingFrameId !== -1) {\r\n const index = this._ownerCanvas.frames.findIndex((frame) => frame.id === this.enclosingFrameId);\r\n if (index >= 0 && this._ownerCanvas.frames[index].isCollapsed) {\r\n this._ownerCanvas.frames[index].redrawFramePorts();\r\n }\r\n }\r\n\r\n this._comments.innerHTML = this.content.comments || \"\";\r\n this._comments.title = this.content.comments || \"\";\r\n\r\n const executionTime = this.content.executionTime || 0;\r\n this._executionTime.innerHTML = executionTime >= 0 ? `${executionTime.toFixed(2)} ms` : \"\";\r\n\r\n this.content.prepareHeaderIcon(this._headerIcon, this._headerIconImg);\r\n }\r\n\r\n 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\" && (evt.target as HTMLElement).draggable) {\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 _forceRebuild(source: any, propertyName: string, notifiers?: IEditablePropertyOption[\"notifiers\"]) {\r\n for (const refresh of this._visualPropertiesRefresh) {\r\n refresh();\r\n }\r\n ForceRebuild(source, this._stateManager, propertyName, notifiers);\r\n }\r\n\r\n private _isCollapsed = false;\r\n\r\n /**\r\n * Collapse the node\r\n */\r\n public collapse() {\r\n this._headerCollapse.classList.add(localStyles.collapsed);\r\n this._inputPorts\r\n .filter((p) => !p.portData.isConnected)\r\n .forEach((p) => {\r\n p.container.classList.add(commonStyles.hidden);\r\n });\r\n\r\n this._outputPorts\r\n .filter((p) => !p.portData.isConnected)\r\n .forEach((p) => {\r\n p.container.classList.add(commonStyles.hidden);\r\n });\r\n\r\n this._refreshLinks();\r\n }\r\n\r\n /**\r\n * Expand the node\r\n */\r\n public expand() {\r\n this._headerCollapse.classList.remove(localStyles.collapsed);\r\n this._inputPorts\r\n .filter((p) => !p.portData.isConnected)\r\n .forEach((p) => {\r\n p.container.classList.remove(commonStyles.hidden);\r\n });\r\n\r\n this._outputPorts\r\n .filter((p) => !p.portData.isConnected)\r\n .forEach((p) => {\r\n p.container.classList.remove(commonStyles.hidden);\r\n });\r\n\r\n this._refreshLinks();\r\n }\r\n\r\n public appendVisual(root: HTMLDivElement, owner: GraphCanvasComponent) {\r\n this._ownerCanvas = owner;\r\n\r\n // Display manager\r\n const displayManagerClass = DisplayLedger.RegisteredControls[this.content.getClassName()];\r\n\r\n if (displayManagerClass) {\r\n this._displayManager = new displayManagerClass();\r\n }\r\n\r\n // DOM\r\n this._visual = root.ownerDocument!.createElement(\"div\");\r\n this._visual.classList.add(localStyles.visual);\r\n\r\n this._visual.addEventListener(\"pointerdown\", (evt) => this._onDown(evt));\r\n this._visual.addEventListener(\"pointerup\", (evt) => this._onUp(evt));\r\n this._visual.addEventListener(\"pointermove\", (evt) => this._onMove(evt));\r\n\r\n this._headerContainer = root.ownerDocument!.createElement(\"div\");\r\n this._headerContainer.classList.add(localStyles[\"header-container\"]);\r\n this._visual.appendChild(this._headerContainer);\r\n\r\n this._header = root.ownerDocument!.createElement(\"div\");\r\n this._header.classList.add(localStyles.header);\r\n this._headerContainer.appendChild(this._header);\r\n\r\n this._headerIcon = root.ownerDocument!.createElement(\"div\");\r\n this._headerIcon.classList.add(localStyles.headerIcon);\r\n this._headerIconImg = root.ownerDocument!.createElement(\"img\");\r\n this._headerIconImg.draggable = false;\r\n this._headerIcon.appendChild(this._headerIconImg);\r\n this._headerContainer.appendChild(this._headerIcon);\r\n\r\n if (this.content.inputs.length > 1 || this.content.outputs.length > 1) {\r\n this._headerCollapse = root.ownerDocument!.createElement(\"div\");\r\n this._headerCollapse.classList.add(localStyles.headerCollapse);\r\n this._headerCollapseImg = root.ownerDocument!.createElement(\"img\");\r\n this._headerCollapseImg.src = dropdownArrowIcon;\r\n this._headerCollapseImg.draggable = false;\r\n this._headerCollapse.appendChild(this._headerCollapseImg);\r\n this._headerContainer.appendChild(this._headerCollapse);\r\n this._headerCollapse.addEventListener(\"pointerup\", (evt) => evt.stopPropagation());\r\n this._headerCollapse.addEventListener(\"pointermove\", (evt) => evt.stopPropagation());\r\n this._headerCollapse.addEventListener(\"pointerdown\", (evt) => {\r\n this._isCollapsed = !this._isCollapsed;\r\n if (this._isCollapsed) {\r\n this.collapse();\r\n } else {\r\n this.expand();\r\n }\r\n evt.stopPropagation();\r\n });\r\n }\r\n\r\n this._selectionBorder = root.ownerDocument!.createElement(\"div\");\r\n this._selectionBorder.classList.add(\"selection-border\");\r\n this._visual.appendChild(this._selectionBorder);\r\n\r\n this._connections = root.ownerDocument!.createElement(\"div\");\r\n this._connections.classList.add(localStyles.connections);\r\n this._visual.appendChild(this._connections);\r\n\r\n this._optionsContainer = root.ownerDocument!.createElement(\"div\");\r\n this._optionsContainer.classList.add(localStyles.optionsContainer);\r\n this._connections.appendChild(this._optionsContainer);\r\n\r\n this._inputsContainer = root.ownerDocument!.createElement(\"div\");\r\n this._inputsContainer.classList.add(commonStyles.inputsContainer);\r\n this._connections.appendChild(this._inputsContainer);\r\n\r\n this._outputsContainer = root.ownerDocument!.createElement(\"div\");\r\n this._outputsContainer.classList.add(commonStyles.outputsContainer);\r\n this._connections.appendChild(this._outputsContainer);\r\n\r\n this._content = root.ownerDocument!.createElement(\"div\");\r\n this._content.classList.add(localStyles.content);\r\n this._visual.appendChild(this._content);\r\n\r\n root.appendChild(this._visual);\r\n\r\n // Comments\r\n this._comments = root.ownerDocument!.createElement(\"div\");\r\n this._comments.classList.add(localStyles.comments);\r\n\r\n this._visual.appendChild(this._comments);\r\n\r\n // Execution time\r\n this._executionTime = root.ownerDocument!.createElement(\"div\");\r\n this._executionTime.classList.add(localStyles.executionTime);\r\n\r\n this._visual.appendChild(this._executionTime);\r\n\r\n // Options\r\n let portUICount = 0;\r\n let idGenerator = 0;\r\n const propStore: IPropertyDescriptionForEdition[] = (this.content.data as any)._propStore;\r\n if (propStore) {\r\n const source = this.content.data;\r\n\r\n const classes: string[] = [];\r\n\r\n let proto = Object.getPrototypeOf(source);\r\n while (proto && proto.getClassName) {\r\n classes.push(proto.getClassName());\r\n proto = Object.getPrototypeOf(proto);\r\n }\r\n\r\n for (const { propertyName, displayName, type, options, className } of propStore) {\r\n if (!options || !options.embedded || classes.indexOf(className) === -1) {\r\n continue;\r\n }\r\n\r\n const container = root.ownerDocument!.createElement(\"div\");\r\n container.addEventListener(\"pointerdown\", (evt) => evt.stopPropagation());\r\n container.addEventListener(\"pointerup\", (evt) => evt.stopPropagation());\r\n container.addEventListener(\"pointermove\", (evt) => evt.stopPropagation());\r\n this._optionsContainer.appendChild(container);\r\n switch (type) {\r\n case PropertyTypeForEdition.Boolean: {\r\n container.classList.add(localStyles.booleanContainer);\r\n const checkbox = root.ownerDocument!.createElement(\"input\");\r\n checkbox.type = \"checkbox\";\r\n checkbox.id = `checkbox-${idGenerator++}`;\r\n checkbox.checked = source[propertyName];\r\n this._visualPropertiesRefresh.push(() => {\r\n checkbox.checked = source[propertyName];\r\n });\r\n checkbox.onchange = () => {\r\n source[propertyName] = !source[propertyName];\r\n this._forceRebuild(source, propertyName, options?.notifiers);\r\n };\r\n container.appendChild(checkbox);\r\n const label = root.ownerDocument!.createElement(\"label\");\r\n label.innerText = displayName;\r\n label.htmlFor = checkbox.id;\r\n container.appendChild(label);\r\n break;\r\n }\r\n case PropertyTypeForEdition.Int:\r\n case PropertyTypeForEdition.Float: {\r\n this._optionsContainer.appendChild(container);\r\n BuildFloatUI(\r\n container,\r\n root.ownerDocument!,\r\n displayName,\r\n type === PropertyTypeForEdition.Int,\r\n source,\r\n propertyName,\r\n () => {\r\n this._forceRebuild(source, propertyName, options?.notifiers);\r\n },\r\n options.min,\r\n options.max,\r\n this._visualPropertiesRefresh\r\n );\r\n break;\r\n }\r\n case PropertyTypeForEdition.List: {\r\n container.classList.add(localStyles.listContainer);\r\n const select = root.ownerDocument!.createElement(\"div\");\r\n select.classList.add(localStyles.select);\r\n container.appendChild(select);\r\n const selectText = root.ownerDocument!.createElement(\"div\");\r\n selectText.classList.add(localStyles.selectText);\r\n select.appendChild(selectText);\r\n const items = options.options as IEditablePropertyListOption[];\r\n\r\n this._visualPropertiesRefresh.push(() => {\r\n selectText.innerText = items[source[propertyName]].label;\r\n });\r\n const selectList = root.ownerDocument!.createElement(\"div\");\r\n selectList.classList.add(localStyles.selectList);\r\n selectList.classList.add(commonStyles.hidden);\r\n select.appendChild(selectList);\r\n for (const item of items) {\r\n const option = root.ownerDocument!.createElement(\"div\");\r\n option.classList.add(localStyles.option);\r\n option.innerText = item.label;\r\n option.onclick = () => {\r\n source[propertyName] = item.value;\r\n this._forceRebuild(source, propertyName, options?.notifiers);\r\n };\r\n selectList.appendChild(option);\r\n }\r\n\r\n select.onclick = () => {\r\n selectList.classList.toggle(commonStyles.hidden);\r\n select.classList.toggle(localStyles.activeNode);\r\n this._visual.classList.toggle(localStyles.topMost);\r\n this._stateManager.modalIsDisplayed = !this._stateManager.modalIsDisplayed;\r\n };\r\n\r\n select.onpointerleave = () => {\r\n selectList.classList.add(commonStyles.hidden);\r\n select.classList.remove(localStyles.activeNode);\r\n this._visual.classList.remove(localStyles.topMost);\r\n this._stateManager.modalIsDisplayed = false;\r\n };\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Connections\r\n for (const input of this.content.inputs) {\r\n if (input.directValueDefinition) {\r\n portUICount++;\r\n }\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 if (this._visualPropertiesRefresh.length === 0 && portUICount === 0) {\r\n this._inputsContainer.classList.add(commonStyles.inputsContainerUp);\r\n }\r\n\r\n this.refresh();\r\n\r\n this.content.refreshCallback = () => {\r\n this.refresh();\r\n };\r\n }\r\n\r\n public dispose() {\r\n if (this._displayManager && this._displayManager.onDispose) {\r\n this._displayManager.onDispose(this.content, this._stateManager);\r\n }\r\n\r\n // notify frame observers that this node is being deleted\r\n this._stateManager.onGraphNodeRemovalObservable.notifyObservers(this);\r\n\r\n if (this._onSelectionChangedObserver) {\r\n this._stateManager.onSelectionChangedObservable.remove(this._onSelectionChangedObserver);\r\n }\r\n\r\n if (this._onUpdateRequiredObserver) {\r\n this._stateManager.onUpdateRequiredObservable.remove(this._onUpdateRequiredObserver);\r\n }\r\n\r\n if (this._onHighlightNodeObserver) {\r\n this._stateManager.onHighlightNodeObservable.remove(this._onHighlightNodeObserver);\r\n }\r\n\r\n if (this._onSelectionBoxMovedObserver) {\r\n this._stateManager.onSelectionBoxMoved.remove(this._onSelectionBoxMovedObserver);\r\n }\r\n\r\n if (this._visual.parentElement) {\r\n this._visual.parentElement.removeChild(this._visual);\r\n }\r\n\r\n if (this._onFrameCreatedObserver) {\r\n this._stateManager.onFrameCreatedObservable.remove(this._onFrameCreatedObserver);\r\n }\r\n\r\n for (const port of this._inputPorts) {\r\n port.dispose();\r\n }\r\n\r\n for (const port of this._outputPorts) {\r\n port.dispose();\r\n }\r\n\r\n const links = this._links.slice(0);\r\n for (const link of links) {\r\n link.dispose();\r\n }\r\n\r\n this.content.dispose();\r\n }\r\n}\r\n"]}
|
1
|
+
{"version":3,"file":"graphNode.js","sourceRoot":"","sources":["../../../../dev/sharedUiComponents/src/nodeGraphSystem/graphNode.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"core/types\";\r\nimport type { Observer } from \"core/Misc/observable\";\r\nimport type { GraphCanvasComponent } from \"./graphCanvas\";\r\nimport * as React from \"react\";\r\nimport { NodePort } from \"./nodePort\";\r\nimport type { GraphFrame } from \"./graphFrame\";\r\nimport type { NodeLink } from \"./nodeLink\";\r\nimport type { StateManager } from \"./stateManager\";\r\nimport type { ISelectionChangedOptions } from \"./interfaces/selectionChangedOptions\";\r\nimport type { IDisplayManager } from \"./interfaces/displayManager\";\r\nimport { PropertyLedger } from \"./propertyLedger\";\r\nimport { DisplayLedger } from \"./displayLedger\";\r\nimport type { INodeData } from \"./interfaces/nodeData\";\r\nimport type { IPortData } from \"./interfaces/portData\";\r\nimport * as localStyles from \"./graphNode.module.scss\";\r\nimport * as commonStyles from \"./common.module.scss\";\r\nimport type { IEditablePropertyListOption, IEditablePropertyOption, IPropertyDescriptionForEdition } from \"core/Decorators/nodeDecorator\";\r\nimport { PropertyTypeForEdition } from \"core/Decorators/nodeDecorator\";\r\nimport { ForceRebuild } from \"./automaticProperties\";\r\nimport dropdownArrowIcon from \"../imgs/dropdownArrowIcon_white.svg\";\r\nimport { BuildFloatUI } from \"./tools\";\r\n\r\nexport class GraphNode {\r\n private _visual: HTMLDivElement;\r\n private _headerContainer: HTMLDivElement;\r\n private _headerIcon: HTMLDivElement;\r\n private _headerIconImg: HTMLImageElement;\r\n private _headerCollapseImg: HTMLImageElement;\r\n private _header: HTMLDivElement;\r\n private _headerCollapse: HTMLDivElement;\r\n private _connections: HTMLDivElement;\r\n private _optionsContainer: HTMLDivElement;\r\n private _inputsContainer: HTMLDivElement;\r\n private _outputsContainer: HTMLDivElement;\r\n private _content: HTMLDivElement;\r\n private _comments: HTMLDivElement;\r\n private _executionTime: HTMLDivElement;\r\n private _selectionBorder: HTMLDivElement;\r\n private _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 private _visualPropertiesRefresh: Array<() => void> = [];\r\n\r\n public addClassToVisual(className: string) {\r\n this._visual.classList.add(className);\r\n }\r\n\r\n public removeClassFromVisual(className: string) {\r\n this._visual.classList.remove(className);\r\n }\r\n\r\n public get isCollapsed() {\r\n return this._isCollapsed;\r\n }\r\n\r\n public get isVisible() {\r\n return this._isVisible;\r\n }\r\n\r\n public set isVisible(value: boolean) {\r\n this._isVisible = value;\r\n\r\n if (!value) {\r\n this._visual.classList.add(commonStyles[\"hidden\"]);\r\n } else {\r\n this._visual.classList.remove(commonStyles[\"hidden\"]);\r\n this._upateNodePortNames();\r\n }\r\n\r\n for (const link of this._links) {\r\n link.isVisible = value;\r\n }\r\n\r\n this._refreshLinks();\r\n }\r\n\r\n private _upateNodePortNames() {\r\n for (const port of this._inputPorts.concat(this._outputPorts)) {\r\n if (port.hasLabel()) {\r\n port.portName = port.portData.name;\r\n }\r\n }\r\n }\r\n\r\n public get outputPorts() {\r\n return this._outputPorts;\r\n }\r\n\r\n public get inputPorts() {\r\n return this._inputPorts;\r\n }\r\n\r\n public get links() {\r\n return this._links;\r\n }\r\n\r\n public get gridAlignedX() {\r\n return this._gridAlignedX;\r\n }\r\n\r\n public get gridAlignedY() {\r\n return this._gridAlignedY;\r\n }\r\n\r\n public get x() {\r\n return this._x;\r\n }\r\n\r\n public set x(value: number) {\r\n if (this._x === value) {\r\n return;\r\n }\r\n this._x = value;\r\n\r\n this._gridAlignedX = this._ownerCanvas.getGridPosition(value);\r\n this._visual.style.left = `${this._gridAlignedX}px`;\r\n\r\n this._refreshLinks();\r\n this._refreshFrames();\r\n }\r\n\r\n public get y() {\r\n return this._y;\r\n }\r\n\r\n public set y(value: number) {\r\n if (this._y === value) {\r\n return;\r\n }\r\n\r\n this._y = value;\r\n\r\n this._gridAlignedY = this._ownerCanvas.getGridPosition(value);\r\n this._visual.style.top = `${this._gridAlignedY}px`;\r\n\r\n this._refreshLinks();\r\n this._refreshFrames();\r\n }\r\n\r\n public get width() {\r\n return this._visual.clientWidth;\r\n }\r\n\r\n public get height() {\r\n return this._visual.clientHeight;\r\n }\r\n\r\n public get id() {\r\n return this.content.uniqueId;\r\n }\r\n\r\n public get name() {\r\n return this.content.name;\r\n }\r\n\r\n public get isSelected() {\r\n return this._isSelected;\r\n }\r\n\r\n public get enclosingFrameId() {\r\n return this._enclosingFrameId;\r\n }\r\n\r\n public set enclosingFrameId(value: number) {\r\n this._enclosingFrameId = value;\r\n }\r\n\r\n public set isSelected(value: boolean) {\r\n this.setIsSelected(value, false);\r\n }\r\n\r\n public setIsSelected(value: boolean, marqueeSelection: boolean) {\r\n if (this._isSelected === value) {\r\n return;\r\n }\r\n\r\n this._isSelected = value;\r\n\r\n if (!value) {\r\n this._visual.classList.remove(localStyles[\"selected\"]);\r\n const indexInSelection = this._ownerCanvas.selectedNodes.indexOf(this);\r\n\r\n if (indexInSelection > -1) {\r\n this._ownerCanvas.selectedNodes.splice(indexInSelection, 1);\r\n }\r\n } else {\r\n this._stateManager.onSelectionChangedObservable.notifyObservers({ selection: this, marqueeSelection });\r\n }\r\n }\r\n\r\n public get rootElement() {\r\n return this._visual;\r\n }\r\n\r\n public constructor(\r\n public content: INodeData,\r\n stateManager: StateManager\r\n ) {\r\n this._stateManager = stateManager;\r\n\r\n this._onSelectionChangedObserver = this._stateManager.onSelectionChangedObservable.add((options) => {\r\n const { selection: node } = options || {};\r\n if (node === this) {\r\n if (this.content.canBeActivated) {\r\n this.content.setIsActive?.(true);\r\n this._stateManager.queueRebuildCommand();\r\n }\r\n this._visual.classList.add(localStyles[\"selected\"]);\r\n if (this._displayManager && this._displayManager.onSelectionChanged) {\r\n this._displayManager.onSelectionChanged(this.content, node.content, this._stateManager);\r\n }\r\n } else {\r\n if (this._ownerCanvas.selectedNodes.indexOf(this) === -1) {\r\n if (this.content.canBeActivated && this.content.isActive) {\r\n this.content.setIsActive?.(false);\r\n this._stateManager.queueRebuildCommand();\r\n }\r\n this._visual.classList.remove(localStyles[\"selected\"]);\r\n if (this._displayManager && this._displayManager.onSelectionChanged) {\r\n this._displayManager.onSelectionChanged(this.content, node && (node as GraphNode).content ? (node as GraphNode).content : null, this._stateManager);\r\n }\r\n }\r\n }\r\n });\r\n\r\n this._onHighlightNodeObserver = this._stateManager.onHighlightNodeObservable.add((data) => {\r\n if (data.data !== this.content.data) {\r\n return;\r\n }\r\n if (data.active) {\r\n this._visual.classList.add(localStyles[\"highlighted\"]);\r\n } else {\r\n this._visual.classList.remove(localStyles[\"highlighted\"]);\r\n }\r\n });\r\n\r\n this._onUpdateRequiredObserver = this._stateManager.onUpdateRequiredObservable.add((data) => {\r\n if (data !== this.content.data) {\r\n return;\r\n }\r\n this.refresh();\r\n });\r\n\r\n this._onSelectionBoxMovedObserver = this._stateManager.onSelectionBoxMoved.add((rect1) => {\r\n const rect2 = this._visual.getBoundingClientRect();\r\n const overlap = !(rect1.right < rect2.left || rect1.left > rect2.right || rect1.bottom < rect2.top || rect1.top > rect2.bottom);\r\n\r\n this.setIsSelected(overlap, true);\r\n });\r\n\r\n this._onFrameCreatedObserver = this._stateManager.onFrameCreatedObservable.add((frame) => {\r\n if (this._ownerCanvas.frames.some((f) => f.nodes.indexOf(this) !== -1)) {\r\n return;\r\n }\r\n\r\n if (this.isOverlappingFrame(frame)) {\r\n frame.nodes.push(this);\r\n }\r\n });\r\n }\r\n\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 refresh of this._visualPropertiesRefresh) {\r\n refresh();\r\n }\r\n\r\n for (const port of this._inputPorts) {\r\n port.refresh();\r\n }\r\n\r\n for (const port of this._outputPorts) {\r\n port.refresh();\r\n }\r\n\r\n if (this.enclosingFrameId !== -1) {\r\n const index = this._ownerCanvas.frames.findIndex((frame) => frame.id === this.enclosingFrameId);\r\n if (index >= 0 && this._ownerCanvas.frames[index].isCollapsed) {\r\n this._ownerCanvas.frames[index].redrawFramePorts();\r\n }\r\n }\r\n\r\n this._comments.innerHTML = this.content.comments || \"\";\r\n this._comments.title = this.content.comments || \"\";\r\n\r\n const executionTime = this.content.executionTime || 0;\r\n this._executionTime.innerHTML = executionTime >= 0 ? `${executionTime.toFixed(2)} ms` : \"\";\r\n\r\n this.content.prepareHeaderIcon(this._headerIcon, this._headerIconImg);\r\n }\r\n\r\n 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\" && (evt.target as HTMLElement).draggable) {\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 _attach(attached: GraphNode[], right: boolean) {\r\n for (const link of this.links) {\r\n if (right && link.nodeA == this && link.nodeB != undefined && !attached.includes(link.nodeB)) {\r\n attached.push(link.nodeB);\r\n link.nodeB._attach(attached, right);\r\n }\r\n if (!right && link.nodeB == this && link.nodeA != undefined && !attached.includes(link.nodeA)) {\r\n attached.push(link.nodeA);\r\n link.nodeA._attach(attached, right);\r\n }\r\n }\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 // Delta\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 // Move selected\r\n for (const selectedNode of this._ownerCanvas.selectedNodes) {\r\n selectedNode.x += newX;\r\n selectedNode.y += newY;\r\n }\r\n\r\n // Move attached (Shift / Alt)\r\n const attached: Array<GraphNode> = [];\r\n if (evt.shiftKey) {\r\n this._attach(attached, false);\r\n } else if (evt.altKey) {\r\n this._attach(attached, true);\r\n }\r\n for (const attachedNode of attached) {\r\n if (!this._ownerCanvas.selectedNodes.includes(attachedNode)) {\r\n attachedNode.x += newX;\r\n attachedNode.y += newY;\r\n }\r\n }\r\n\r\n // Move frame\r\n for (const frame of this._ownerCanvas.selectedFrames) {\r\n frame._moveFrame(newX, newY);\r\n }\r\n\r\n this._mouseStartPointX = evt.clientX;\r\n this._mouseStartPointY = evt.clientY;\r\n\r\n evt.stopPropagation();\r\n\r\n if (this._inputPorts.some((p) => p.portData.isConnected) || this._outputPorts.some((o) => o.portData.hasEndpoints)) {\r\n return;\r\n }\r\n\r\n // Check wires that could be underneath\r\n const rect = this._visual.getBoundingClientRect();\r\n for (const link of this._ownerCanvas.links) {\r\n if (link.portA.node === this || link.portB!.node === this) {\r\n link.isTargetCandidate = false;\r\n continue;\r\n }\r\n link.isTargetCandidate = link.intersectsWith(rect);\r\n\r\n if (link.isTargetCandidate) {\r\n if (this._ownerCanvas._targetLinkCandidate !== link) {\r\n if (this._ownerCanvas._targetLinkCandidate) {\r\n this._ownerCanvas._targetLinkCandidate.isTargetCandidate = false;\r\n }\r\n this._ownerCanvas._targetLinkCandidate = link;\r\n }\r\n }\r\n }\r\n }\r\n\r\n public renderProperties(): Nullable<JSX.Element> {\r\n let control = PropertyLedger.RegisteredControls[this.content.getClassName()];\r\n\r\n if (!control) {\r\n control = PropertyLedger.DefaultControl;\r\n }\r\n\r\n return React.createElement(control, { stateManager: this._stateManager, nodeData: this.content });\r\n }\r\n\r\n public _forceRebuild(source: any, propertyName: string, notifiers?: IEditablePropertyOption[\"notifiers\"]) {\r\n for (const refresh of this._visualPropertiesRefresh) {\r\n refresh();\r\n }\r\n ForceRebuild(source, this._stateManager, propertyName, notifiers);\r\n }\r\n\r\n private _isCollapsed = false;\r\n\r\n /**\r\n * Collapse the node\r\n */\r\n public collapse() {\r\n this._headerCollapse.classList.add(localStyles.collapsed);\r\n this._inputPorts\r\n .filter((p) => !p.portData.isConnected)\r\n .forEach((p) => {\r\n p.container.classList.add(commonStyles.hidden);\r\n });\r\n\r\n this._outputPorts\r\n .filter((p) => !p.portData.isConnected)\r\n .forEach((p) => {\r\n p.container.classList.add(commonStyles.hidden);\r\n });\r\n\r\n this._refreshLinks();\r\n }\r\n\r\n /**\r\n * Expand the node\r\n */\r\n public expand() {\r\n this._headerCollapse.classList.remove(localStyles.collapsed);\r\n this._inputPorts\r\n .filter((p) => !p.portData.isConnected)\r\n .forEach((p) => {\r\n p.container.classList.remove(commonStyles.hidden);\r\n });\r\n\r\n this._outputPorts\r\n .filter((p) => !p.portData.isConnected)\r\n .forEach((p) => {\r\n p.container.classList.remove(commonStyles.hidden);\r\n });\r\n\r\n this._refreshLinks();\r\n }\r\n\r\n public appendVisual(root: HTMLDivElement, owner: GraphCanvasComponent) {\r\n this._ownerCanvas = owner;\r\n\r\n // Display manager\r\n const displayManagerClass = DisplayLedger.RegisteredControls[this.content.getClassName()];\r\n\r\n if (displayManagerClass) {\r\n this._displayManager = new displayManagerClass();\r\n }\r\n\r\n // DOM\r\n this._visual = root.ownerDocument!.createElement(\"div\");\r\n this._visual.classList.add(localStyles.visual);\r\n\r\n this._visual.addEventListener(\"pointerdown\", (evt) => this._onDown(evt));\r\n this._visual.addEventListener(\"pointerup\", (evt) => this._onUp(evt));\r\n this._visual.addEventListener(\"pointermove\", (evt) => this._onMove(evt));\r\n\r\n this._headerContainer = root.ownerDocument!.createElement(\"div\");\r\n this._headerContainer.classList.add(localStyles[\"header-container\"]);\r\n this._visual.appendChild(this._headerContainer);\r\n\r\n this._header = root.ownerDocument!.createElement(\"div\");\r\n this._header.classList.add(localStyles.header);\r\n this._headerContainer.appendChild(this._header);\r\n\r\n this._headerIcon = root.ownerDocument!.createElement(\"div\");\r\n this._headerIcon.classList.add(localStyles.headerIcon);\r\n this._headerIconImg = root.ownerDocument!.createElement(\"img\");\r\n this._headerIconImg.draggable = false;\r\n this._headerIcon.appendChild(this._headerIconImg);\r\n this._headerContainer.appendChild(this._headerIcon);\r\n\r\n if (this.content.inputs.length > 1 || this.content.outputs.length > 1) {\r\n this._headerCollapse = root.ownerDocument!.createElement(\"div\");\r\n this._headerCollapse.classList.add(localStyles.headerCollapse);\r\n this._headerCollapseImg = root.ownerDocument!.createElement(\"img\");\r\n this._headerCollapseImg.src = dropdownArrowIcon;\r\n this._headerCollapseImg.draggable = false;\r\n this._headerCollapse.appendChild(this._headerCollapseImg);\r\n this._headerContainer.appendChild(this._headerCollapse);\r\n this._headerCollapse.addEventListener(\"pointerup\", (evt) => evt.stopPropagation());\r\n this._headerCollapse.addEventListener(\"pointermove\", (evt) => evt.stopPropagation());\r\n this._headerCollapse.addEventListener(\"pointerdown\", (evt) => {\r\n this._isCollapsed = !this._isCollapsed;\r\n if (this._isCollapsed) {\r\n this.collapse();\r\n } else {\r\n this.expand();\r\n }\r\n evt.stopPropagation();\r\n });\r\n }\r\n\r\n this._selectionBorder = root.ownerDocument!.createElement(\"div\");\r\n this._selectionBorder.classList.add(\"selection-border\");\r\n this._visual.appendChild(this._selectionBorder);\r\n\r\n this._connections = root.ownerDocument!.createElement(\"div\");\r\n this._connections.classList.add(localStyles.connections);\r\n this._visual.appendChild(this._connections);\r\n\r\n this._optionsContainer = root.ownerDocument!.createElement(\"div\");\r\n this._optionsContainer.classList.add(localStyles.optionsContainer);\r\n this._connections.appendChild(this._optionsContainer);\r\n\r\n this._inputsContainer = root.ownerDocument!.createElement(\"div\");\r\n this._inputsContainer.classList.add(commonStyles.inputsContainer);\r\n this._connections.appendChild(this._inputsContainer);\r\n\r\n this._outputsContainer = root.ownerDocument!.createElement(\"div\");\r\n this._outputsContainer.classList.add(commonStyles.outputsContainer);\r\n this._connections.appendChild(this._outputsContainer);\r\n\r\n this._content = root.ownerDocument!.createElement(\"div\");\r\n this._content.classList.add(localStyles.content);\r\n this._visual.appendChild(this._content);\r\n\r\n root.appendChild(this._visual);\r\n\r\n // Comments\r\n this._comments = root.ownerDocument!.createElement(\"div\");\r\n this._comments.classList.add(localStyles.comments);\r\n\r\n this._visual.appendChild(this._comments);\r\n\r\n // Execution time\r\n this._executionTime = root.ownerDocument!.createElement(\"div\");\r\n this._executionTime.classList.add(localStyles.executionTime);\r\n\r\n this._visual.appendChild(this._executionTime);\r\n\r\n // Options\r\n let portUICount = 0;\r\n let idGenerator = 0;\r\n const propStore: IPropertyDescriptionForEdition[] = (this.content.data as any)._propStore;\r\n if (propStore) {\r\n const source = this.content.data;\r\n\r\n const classes: string[] = [];\r\n\r\n let proto = Object.getPrototypeOf(source);\r\n while (proto && proto.getClassName) {\r\n classes.push(proto.getClassName());\r\n proto = Object.getPrototypeOf(proto);\r\n }\r\n\r\n for (const { propertyName, displayName, type, options, className } of propStore) {\r\n if (!options || !options.embedded || classes.indexOf(className) === -1) {\r\n continue;\r\n }\r\n\r\n const container = root.ownerDocument!.createElement(\"div\");\r\n container.addEventListener(\"pointerdown\", (evt) => evt.stopPropagation());\r\n container.addEventListener(\"pointerup\", (evt) => evt.stopPropagation());\r\n container.addEventListener(\"pointermove\", (evt) => evt.stopPropagation());\r\n this._optionsContainer.appendChild(container);\r\n switch (type) {\r\n case PropertyTypeForEdition.Boolean: {\r\n container.classList.add(localStyles.booleanContainer);\r\n const checkbox = root.ownerDocument!.createElement(\"input\");\r\n checkbox.type = \"checkbox\";\r\n checkbox.id = `checkbox-${idGenerator++}`;\r\n checkbox.checked = source[propertyName];\r\n this._visualPropertiesRefresh.push(() => {\r\n checkbox.checked = source[propertyName];\r\n });\r\n checkbox.onchange = () => {\r\n source[propertyName] = !source[propertyName];\r\n this._forceRebuild(source, propertyName, options?.notifiers);\r\n };\r\n container.appendChild(checkbox);\r\n const label = root.ownerDocument!.createElement(\"label\");\r\n label.innerText = displayName;\r\n label.htmlFor = checkbox.id;\r\n container.appendChild(label);\r\n break;\r\n }\r\n case PropertyTypeForEdition.Int:\r\n case PropertyTypeForEdition.Float: {\r\n this._optionsContainer.appendChild(container);\r\n BuildFloatUI(\r\n container,\r\n root.ownerDocument!,\r\n displayName,\r\n type === PropertyTypeForEdition.Int,\r\n source,\r\n propertyName,\r\n () => {\r\n this._forceRebuild(source, propertyName, options?.notifiers);\r\n },\r\n options.min,\r\n options.max,\r\n this._visualPropertiesRefresh\r\n );\r\n break;\r\n }\r\n case PropertyTypeForEdition.List: {\r\n container.classList.add(localStyles.listContainer);\r\n const select = root.ownerDocument!.createElement(\"div\");\r\n select.classList.add(localStyles.select);\r\n container.appendChild(select);\r\n const selectText = root.ownerDocument!.createElement(\"div\");\r\n selectText.classList.add(localStyles.selectText);\r\n select.appendChild(selectText);\r\n const items = options.options as IEditablePropertyListOption[];\r\n\r\n this._visualPropertiesRefresh.push(() => {\r\n selectText.innerText = items[source[propertyName]].label;\r\n });\r\n const selectList = root.ownerDocument!.createElement(\"div\");\r\n selectList.classList.add(localStyles.selectList);\r\n selectList.classList.add(commonStyles.hidden);\r\n select.appendChild(selectList);\r\n for (const item of items) {\r\n const option = root.ownerDocument!.createElement(\"div\");\r\n option.classList.add(localStyles.option);\r\n option.innerText = item.label;\r\n option.onclick = () => {\r\n source[propertyName] = item.value;\r\n this._forceRebuild(source, propertyName, options?.notifiers);\r\n };\r\n selectList.appendChild(option);\r\n }\r\n\r\n select.onclick = () => {\r\n selectList.classList.toggle(commonStyles.hidden);\r\n select.classList.toggle(localStyles.activeNode);\r\n this._visual.classList.toggle(localStyles.topMost);\r\n this._stateManager.modalIsDisplayed = !this._stateManager.modalIsDisplayed;\r\n };\r\n\r\n select.onpointerleave = () => {\r\n selectList.classList.add(commonStyles.hidden);\r\n select.classList.remove(localStyles.activeNode);\r\n this._visual.classList.remove(localStyles.topMost);\r\n this._stateManager.modalIsDisplayed = false;\r\n };\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Connections\r\n for (const input of this.content.inputs) {\r\n if (input.directValueDefinition) {\r\n portUICount++;\r\n }\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 if (this._visualPropertiesRefresh.length === 0 && portUICount === 0) {\r\n this._inputsContainer.classList.add(commonStyles.inputsContainerUp);\r\n }\r\n\r\n this.refresh();\r\n\r\n this.content.refreshCallback = () => {\r\n this.refresh();\r\n };\r\n }\r\n\r\n public dispose() {\r\n if (this._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"]}
|