@babylonjs/shared-ui-components 7.32.4 → 7.33.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/Button.modules.scss +1 -1
- package/imgs/dropdownArrowIcon_white.svg +1 -0
- package/nodeGraphSystem/automaticProperties.d.ts +10 -0
- package/nodeGraphSystem/automaticProperties.js +28 -0
- package/nodeGraphSystem/automaticProperties.js.map +1 -0
- package/nodeGraphSystem/common.modules.scss +7 -1
- package/nodeGraphSystem/graphCanvas.js +3 -0
- package/nodeGraphSystem/graphCanvas.js.map +1 -1
- package/nodeGraphSystem/graphNode.d.ts +15 -0
- package/nodeGraphSystem/graphNode.js +234 -5
- package/nodeGraphSystem/graphNode.js.map +1 -1
- package/nodeGraphSystem/graphNode.modules.scss +304 -11
- package/nodeGraphSystem/interfaces/nodeLocationInfo.d.ts +1 -0
- package/nodeGraphSystem/interfaces/nodeLocationInfo.js.map +1 -1
- package/nodeGraphSystem/nodePort.d.ts +2 -0
- package/nodeGraphSystem/nodePort.js +7 -0
- package/nodeGraphSystem/nodePort.js.map +1 -1
- package/nodeGraphSystem/stateManager.d.ts +3 -0
- package/nodeGraphSystem/stateManager.js +1 -0
- package/nodeGraphSystem/stateManager.js.map +1 -1
- package/package.json +1 -1
@@ -13,8 +13,11 @@ export declare class GraphNode {
|
|
13
13
|
private _headerContainer;
|
14
14
|
private _headerIcon;
|
15
15
|
private _headerIconImg;
|
16
|
+
private _headerCollapseImg;
|
16
17
|
private _header;
|
18
|
+
private _headerCollapse;
|
17
19
|
private _connections;
|
20
|
+
private _optionsContainer;
|
18
21
|
private _inputsContainer;
|
19
22
|
private _outputsContainer;
|
20
23
|
private _content;
|
@@ -41,8 +44,10 @@ export declare class GraphNode {
|
|
41
44
|
private _displayManager;
|
42
45
|
private _isVisible;
|
43
46
|
private _enclosingFrameId;
|
47
|
+
private _visualPropertiesRefresh;
|
44
48
|
addClassToVisual(className: string): void;
|
45
49
|
removeClassFromVisual(className: string): void;
|
50
|
+
get isCollapsed(): boolean;
|
46
51
|
get isVisible(): boolean;
|
47
52
|
set isVisible(value: boolean);
|
48
53
|
private _upateNodePortNames;
|
@@ -79,6 +84,16 @@ export declare class GraphNode {
|
|
79
84
|
private _onUp;
|
80
85
|
private _onMove;
|
81
86
|
renderProperties(): Nullable<JSX.Element>;
|
87
|
+
private _forceRebuild;
|
88
|
+
private _isCollapsed;
|
89
|
+
/**
|
90
|
+
* Collapse the node
|
91
|
+
*/
|
92
|
+
collapse(): void;
|
93
|
+
/**
|
94
|
+
* Expand the node
|
95
|
+
*/
|
96
|
+
expand(): void;
|
82
97
|
appendVisual(root: HTMLDivElement, owner: GraphCanvasComponent): void;
|
83
98
|
dispose(): void;
|
84
99
|
}
|
@@ -4,6 +4,8 @@ import { PropertyLedger } from "./propertyLedger.js";
|
|
4
4
|
import { DisplayLedger } from "./displayLedger.js";
|
5
5
|
import localStyles from "./graphNode.modules.scss";
|
6
6
|
import commonStyles from "./common.modules.scss";
|
7
|
+
import { ForceRebuild } from "./automaticProperties.js";
|
8
|
+
import dropdownArrowIcon from "../imgs/dropdownArrowIcon_white.svg";
|
7
9
|
export class GraphNode {
|
8
10
|
addClassToVisual(className) {
|
9
11
|
this._visual.classList.add(className);
|
@@ -11,6 +13,9 @@ export class GraphNode {
|
|
11
13
|
removeClassFromVisual(className) {
|
12
14
|
this._visual.classList.remove(className);
|
13
15
|
}
|
16
|
+
get isCollapsed() {
|
17
|
+
return this._isCollapsed;
|
18
|
+
}
|
14
19
|
get isVisible() {
|
15
20
|
return this._isVisible;
|
16
21
|
}
|
@@ -133,6 +138,8 @@ export class GraphNode {
|
|
133
138
|
this._displayManager = null;
|
134
139
|
this._isVisible = true;
|
135
140
|
this._enclosingFrameId = -1;
|
141
|
+
this._visualPropertiesRefresh = [];
|
142
|
+
this._isCollapsed = false;
|
136
143
|
this._stateManager = stateManager;
|
137
144
|
this._onSelectionChangedObserver = this._stateManager.onSelectionChangedObservable.add((options) => {
|
138
145
|
const { selection: node } = options || {};
|
@@ -277,6 +284,9 @@ export class GraphNode {
|
|
277
284
|
else {
|
278
285
|
this._header.innerHTML = this.content.name;
|
279
286
|
}
|
287
|
+
for (const refresh of this._visualPropertiesRefresh) {
|
288
|
+
refresh();
|
289
|
+
}
|
280
290
|
for (const port of this._inputPorts) {
|
281
291
|
port.refresh();
|
282
292
|
}
|
@@ -294,13 +304,10 @@ export class GraphNode {
|
|
294
304
|
const executionTime = this.content.executionTime || 0;
|
295
305
|
this._executionTime.innerHTML = executionTime >= 0 ? `${executionTime.toFixed(2)} ms` : "";
|
296
306
|
this.content.prepareHeaderIcon(this._headerIcon, this._headerIconImg);
|
297
|
-
if (this._headerIconImg.src) {
|
298
|
-
this._header.classList.add(localStyles["headerWithIcon"]);
|
299
|
-
}
|
300
307
|
}
|
301
308
|
_onDown(evt) {
|
302
309
|
// Check if this is coming from the port
|
303
|
-
if (evt.target && evt.target.nodeName === "IMG") {
|
310
|
+
if (evt.target && evt.target.nodeName === "IMG" && evt.target.draggable) {
|
304
311
|
return;
|
305
312
|
}
|
306
313
|
const indexInSelection = this._ownerCanvas.selectedNodes.indexOf(this);
|
@@ -417,6 +424,46 @@ export class GraphNode {
|
|
417
424
|
nodeData: this.content,
|
418
425
|
});
|
419
426
|
}
|
427
|
+
_forceRebuild(source, propertyName, notifiers) {
|
428
|
+
for (const refresh of this._visualPropertiesRefresh) {
|
429
|
+
refresh();
|
430
|
+
}
|
431
|
+
ForceRebuild(source, this._stateManager, propertyName, notifiers);
|
432
|
+
}
|
433
|
+
/**
|
434
|
+
* Collapse the node
|
435
|
+
*/
|
436
|
+
collapse() {
|
437
|
+
this._headerCollapse.classList.add(localStyles.collapsed);
|
438
|
+
this._inputPorts
|
439
|
+
.filter((p) => !p.portData.isConnected)
|
440
|
+
.forEach((p) => {
|
441
|
+
p.container.classList.add(commonStyles.hidden);
|
442
|
+
});
|
443
|
+
this._outputPorts
|
444
|
+
.filter((p) => !p.portData.isConnected)
|
445
|
+
.forEach((p) => {
|
446
|
+
p.container.classList.add(commonStyles.hidden);
|
447
|
+
});
|
448
|
+
this._refreshLinks();
|
449
|
+
}
|
450
|
+
/**
|
451
|
+
* Expand the node
|
452
|
+
*/
|
453
|
+
expand() {
|
454
|
+
this._headerCollapse.classList.remove(localStyles.collapsed);
|
455
|
+
this._inputPorts
|
456
|
+
.filter((p) => !p.portData.isConnected)
|
457
|
+
.forEach((p) => {
|
458
|
+
p.container.classList.remove(commonStyles.hidden);
|
459
|
+
});
|
460
|
+
this._outputPorts
|
461
|
+
.filter((p) => !p.portData.isConnected)
|
462
|
+
.forEach((p) => {
|
463
|
+
p.container.classList.remove(commonStyles.hidden);
|
464
|
+
});
|
465
|
+
this._refreshLinks();
|
466
|
+
}
|
420
467
|
appendVisual(root, owner) {
|
421
468
|
this._ownerCanvas = owner;
|
422
469
|
// Display manager
|
@@ -439,14 +486,42 @@ export class GraphNode {
|
|
439
486
|
this._headerIcon = root.ownerDocument.createElement("div");
|
440
487
|
this._headerIcon.classList.add(localStyles.headerIcon);
|
441
488
|
this._headerIconImg = root.ownerDocument.createElement("img");
|
489
|
+
this._headerIconImg.draggable = false;
|
442
490
|
this._headerIcon.appendChild(this._headerIconImg);
|
443
491
|
this._headerContainer.appendChild(this._headerIcon);
|
492
|
+
if (this.content.inputs.length > 1 || this.content.outputs.length > 1) {
|
493
|
+
this._headerCollapse = root.ownerDocument.createElement("div");
|
494
|
+
this._headerCollapse.classList.add(localStyles.headerCollapse);
|
495
|
+
this._headerCollapseImg = root.ownerDocument.createElement("img");
|
496
|
+
this._headerCollapseImg.src = dropdownArrowIcon;
|
497
|
+
this._headerCollapseImg.draggable = false;
|
498
|
+
this._headerCollapse.appendChild(this._headerCollapseImg);
|
499
|
+
this._headerContainer.appendChild(this._headerCollapse);
|
500
|
+
this._headerCollapse.addEventListener("pointerup", (evt) => evt.stopPropagation());
|
501
|
+
this._headerCollapse.addEventListener("pointermove", (evt) => evt.stopPropagation());
|
502
|
+
this._headerCollapse.addEventListener("pointerdown", (evt) => {
|
503
|
+
this._isCollapsed = !this._isCollapsed;
|
504
|
+
if (this._isCollapsed) {
|
505
|
+
this.collapse();
|
506
|
+
}
|
507
|
+
else {
|
508
|
+
this.expand();
|
509
|
+
}
|
510
|
+
evt.stopPropagation();
|
511
|
+
});
|
512
|
+
}
|
444
513
|
this._selectionBorder = root.ownerDocument.createElement("div");
|
445
514
|
this._selectionBorder.classList.add("selection-border");
|
446
515
|
this._visual.appendChild(this._selectionBorder);
|
447
516
|
this._connections = root.ownerDocument.createElement("div");
|
448
517
|
this._connections.classList.add(localStyles.connections);
|
449
518
|
this._visual.appendChild(this._connections);
|
519
|
+
this._optionsContainer = root.ownerDocument.createElement("div");
|
520
|
+
this._optionsContainer.classList.add(localStyles.optionsContainer);
|
521
|
+
this._connections.appendChild(this._optionsContainer);
|
522
|
+
this._optionsContainer.addEventListener("pointerdown", (evt) => evt.stopPropagation());
|
523
|
+
this._optionsContainer.addEventListener("pointerup", (evt) => evt.stopPropagation());
|
524
|
+
this._optionsContainer.addEventListener("pointermove", (evt) => evt.stopPropagation());
|
450
525
|
this._inputsContainer = root.ownerDocument.createElement("div");
|
451
526
|
this._inputsContainer.classList.add(commonStyles.inputsContainer);
|
452
527
|
this._connections.appendChild(this._inputsContainer);
|
@@ -461,10 +536,164 @@ export class GraphNode {
|
|
461
536
|
this._comments = root.ownerDocument.createElement("div");
|
462
537
|
this._comments.classList.add(localStyles.comments);
|
463
538
|
this._visual.appendChild(this._comments);
|
464
|
-
//
|
539
|
+
// Execution time
|
465
540
|
this._executionTime = root.ownerDocument.createElement("div");
|
466
541
|
this._executionTime.classList.add(localStyles.executionTime);
|
467
542
|
this._visual.appendChild(this._executionTime);
|
543
|
+
// Options
|
544
|
+
let idGenerator = 0;
|
545
|
+
const propStore = this.content.data._propStore;
|
546
|
+
if (propStore) {
|
547
|
+
const source = this.content.data;
|
548
|
+
for (const { propertyName, displayName, type, options } of propStore) {
|
549
|
+
if (options && !options.embedded) {
|
550
|
+
continue;
|
551
|
+
}
|
552
|
+
const container = root.ownerDocument.createElement("div");
|
553
|
+
this._optionsContainer.appendChild(container);
|
554
|
+
switch (type) {
|
555
|
+
case 0 /* PropertyTypeForEdition.Boolean */: {
|
556
|
+
container.classList.add(localStyles.booleanContainer);
|
557
|
+
const checkbox = root.ownerDocument.createElement("input");
|
558
|
+
checkbox.type = "checkbox";
|
559
|
+
checkbox.id = `checkbox-${idGenerator++}`;
|
560
|
+
checkbox.checked = source[propertyName];
|
561
|
+
this._visualPropertiesRefresh.push(() => {
|
562
|
+
checkbox.checked = source[propertyName];
|
563
|
+
});
|
564
|
+
checkbox.onchange = () => {
|
565
|
+
source[propertyName] = !source[propertyName];
|
566
|
+
this._forceRebuild(source, propertyName, options?.notifiers);
|
567
|
+
};
|
568
|
+
container.appendChild(checkbox);
|
569
|
+
const label = root.ownerDocument.createElement("label");
|
570
|
+
label.innerText = displayName;
|
571
|
+
label.htmlFor = checkbox.id;
|
572
|
+
label.onclick = () => {
|
573
|
+
checkbox.click();
|
574
|
+
};
|
575
|
+
container.appendChild(label);
|
576
|
+
break;
|
577
|
+
}
|
578
|
+
case 2 /* PropertyTypeForEdition.Int */:
|
579
|
+
case 1 /* PropertyTypeForEdition.Float */: {
|
580
|
+
const cantDisplaySlider = isNaN(options.min) || isNaN(options.max) || options.min === options.max;
|
581
|
+
if (cantDisplaySlider) {
|
582
|
+
container.classList.add(localStyles.floatContainer);
|
583
|
+
const numberInput = root.ownerDocument.createElement("input");
|
584
|
+
numberInput.type = "number";
|
585
|
+
numberInput.id = `number-${idGenerator++}`;
|
586
|
+
this._visualPropertiesRefresh.push(() => {
|
587
|
+
numberInput.value = source[propertyName];
|
588
|
+
});
|
589
|
+
numberInput.onchange = () => {
|
590
|
+
source[propertyName] = parseFloat(numberInput.value);
|
591
|
+
this._forceRebuild(source, propertyName, options?.notifiers);
|
592
|
+
};
|
593
|
+
container.appendChild(numberInput);
|
594
|
+
const label = root.ownerDocument.createElement("div");
|
595
|
+
label.innerText = displayName;
|
596
|
+
container.appendChild(label);
|
597
|
+
let shouldCapture = false;
|
598
|
+
numberInput.onpointerdown = (evt) => {
|
599
|
+
shouldCapture = true;
|
600
|
+
evt.preventDefault();
|
601
|
+
};
|
602
|
+
numberInput.onpointerup = (evt) => {
|
603
|
+
if (numberInput.hasPointerCapture(evt.pointerId)) {
|
604
|
+
numberInput.releasePointerCapture(evt.pointerId);
|
605
|
+
shouldCapture = false;
|
606
|
+
evt.preventDefault();
|
607
|
+
}
|
608
|
+
else {
|
609
|
+
numberInput.focus();
|
610
|
+
numberInput.select();
|
611
|
+
}
|
612
|
+
};
|
613
|
+
numberInput.onpointermove = (evt) => {
|
614
|
+
if (shouldCapture) {
|
615
|
+
numberInput.setPointerCapture(evt.pointerId);
|
616
|
+
}
|
617
|
+
if (numberInput.hasPointerCapture(evt.pointerId)) {
|
618
|
+
numberInput.value = (parseFloat(numberInput.value) + evt.movementX * 0.01).toFixed(2);
|
619
|
+
source[propertyName] = parseFloat(numberInput.value);
|
620
|
+
this._forceRebuild(source, propertyName, options?.notifiers);
|
621
|
+
evt.preventDefault();
|
622
|
+
}
|
623
|
+
};
|
624
|
+
}
|
625
|
+
else {
|
626
|
+
container.classList.add(localStyles.sliderContainer);
|
627
|
+
const label = root.ownerDocument.createElement("label");
|
628
|
+
container.appendChild(label);
|
629
|
+
const value = root.ownerDocument.createElement("div");
|
630
|
+
container.appendChild(value);
|
631
|
+
const slider = root.ownerDocument.createElement("input");
|
632
|
+
slider.type = "range";
|
633
|
+
slider.id = `slider-${idGenerator++}`;
|
634
|
+
slider.step = type === 2 /* PropertyTypeForEdition.Int */ ? "1" : (Math.abs(options.max - options.min) / 100.0).toString();
|
635
|
+
slider.min = options.min.toString();
|
636
|
+
slider.max = options.max.toString();
|
637
|
+
container.appendChild(slider);
|
638
|
+
label.innerText = displayName;
|
639
|
+
label.htmlFor = slider.id;
|
640
|
+
this._visualPropertiesRefresh.push(() => {
|
641
|
+
slider.value = source[propertyName];
|
642
|
+
value.innerText = source[propertyName];
|
643
|
+
});
|
644
|
+
slider.oninput = () => {
|
645
|
+
source[propertyName] = parseFloat(slider.value);
|
646
|
+
value.innerText = source[propertyName];
|
647
|
+
this._forceRebuild(source, propertyName, options?.notifiers);
|
648
|
+
};
|
649
|
+
}
|
650
|
+
break;
|
651
|
+
}
|
652
|
+
case 4 /* PropertyTypeForEdition.List */: {
|
653
|
+
container.classList.add(localStyles.listContainer);
|
654
|
+
const select = root.ownerDocument.createElement("div");
|
655
|
+
select.classList.add(localStyles.select);
|
656
|
+
container.appendChild(select);
|
657
|
+
const selectText = root.ownerDocument.createElement("div");
|
658
|
+
selectText.classList.add(localStyles.selectText);
|
659
|
+
select.appendChild(selectText);
|
660
|
+
const items = options.options;
|
661
|
+
this._visualPropertiesRefresh.push(() => {
|
662
|
+
selectText.innerText = items[source[propertyName]].label;
|
663
|
+
});
|
664
|
+
const selectList = root.ownerDocument.createElement("div");
|
665
|
+
selectList.classList.add(localStyles.selectList);
|
666
|
+
selectList.classList.add(commonStyles.hidden);
|
667
|
+
select.appendChild(selectList);
|
668
|
+
for (const item of items) {
|
669
|
+
const option = root.ownerDocument.createElement("div");
|
670
|
+
option.classList.add(localStyles.option);
|
671
|
+
option.innerText = item.label;
|
672
|
+
option.onclick = () => {
|
673
|
+
source[propertyName] = item.value;
|
674
|
+
this._forceRebuild(source, propertyName, options?.notifiers);
|
675
|
+
};
|
676
|
+
selectList.appendChild(option);
|
677
|
+
}
|
678
|
+
select.onclick = () => {
|
679
|
+
selectList.classList.toggle(commonStyles.hidden);
|
680
|
+
select.classList.toggle(localStyles.active);
|
681
|
+
this._visual.classList.toggle(localStyles.topMost);
|
682
|
+
this._stateManager.modalIsDisplayed = !this._stateManager.modalIsDisplayed;
|
683
|
+
};
|
684
|
+
select.onpointerleave = () => {
|
685
|
+
selectList.classList.add(commonStyles.hidden);
|
686
|
+
select.classList.remove(localStyles.active);
|
687
|
+
this._visual.classList.remove(localStyles.topMost);
|
688
|
+
this._stateManager.modalIsDisplayed = false;
|
689
|
+
};
|
690
|
+
}
|
691
|
+
}
|
692
|
+
}
|
693
|
+
}
|
694
|
+
if (this._visualPropertiesRefresh.length === 0) {
|
695
|
+
this._inputsContainer.classList.add(commonStyles.inputsContainerUp);
|
696
|
+
}
|
468
697
|
// Connections
|
469
698
|
for (const input of this.content.inputs) {
|
470
699
|
this._inputPorts.push(NodePort.CreatePortElement(input, this, this._inputsContainer, this._displayManager, this._stateManager));
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"graphNode.js","sourceRoot":"","sources":["../../../../dev/sharedUiComponents/src/nodeGraphSystem/graphNode.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAMtC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGhD,OAAO,WAAW,MAAM,0BAA0B,CAAC;AACnD,OAAO,YAAY,MAAM,uBAAuB,CAAC;AAEjD,MAAM,OAAO,SAAS;IAkCX,gBAAgB,CAAC,SAAiB;QACrC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC1C,CAAC;IAEM,qBAAqB,CAAC,SAAiB;QAC1C,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC7C,CAAC;IAED,IAAW,SAAS;QAChB,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;IAED,IAAW,SAAS,CAAC,KAAc;QAC/B,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QAExB,IAAI,CAAC,KAAK,EAAE;YACR,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;SACtD;aAAM;YACH,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;YACtD,IAAI,CAAC,mBAAmB,EAAE,CAAC;SAC9B;QAED,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE;YAC5B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;SAC1B;QAED,IAAI,CAAC,aAAa,EAAE,CAAC;IACzB,CAAC;IAEO,mBAAmB;QACvB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;YAC3D,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;gBACjB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;aACtC;SACJ;IACL,CAAC;IAED,IAAW,WAAW;QAClB,OAAO,IAAI,CAAC,YAAY,CAAC;IAC7B,CAAC;IAED,IAAW,UAAU;QACjB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC5B,CAAC;IAED,IAAW,KAAK;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAED,IAAW,YAAY;QACnB,OAAO,IAAI,CAAC,aAAa,CAAC;IAC9B,CAAC;IAED,IAAW,YAAY;QACnB,OAAO,IAAI,CAAC,aAAa,CAAC;IAC9B,CAAC;IAED,IAAW,CAAC;QACR,OAAO,IAAI,CAAC,EAAE,CAAC;IACnB,CAAC;IAED,IAAW,CAAC,CAAC,KAAa;QACtB,IAAI,IAAI,CAAC,EAAE,KAAK,KAAK,EAAE;YACnB,OAAO;SACV;QACD,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC;QAEhB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAC9D,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,aAAa,IAAI,CAAC;QAEpD,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,cAAc,EAAE,CAAC;IAC1B,CAAC;IAED,IAAW,CAAC;QACR,OAAO,IAAI,CAAC,EAAE,CAAC;IACnB,CAAC;IAED,IAAW,CAAC,CAAC,KAAa;QACtB,IAAI,IAAI,CAAC,EAAE,KAAK,KAAK,EAAE;YACnB,OAAO;SACV;QAED,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC;QAEhB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAC9D,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,aAAa,IAAI,CAAC;QAEnD,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,cAAc,EAAE,CAAC;IAC1B,CAAC;IAED,IAAW,KAAK;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;IACpC,CAAC;IAED,IAAW,MAAM;QACb,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;IACrC,CAAC;IAED,IAAW,EAAE;QACT,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;IACjC,CAAC;IAED,IAAW,IAAI;QACX,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC7B,CAAC;IAED,IAAW,UAAU;QACjB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC5B,CAAC;IAED,IAAW,gBAAgB;QACvB,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAClC,CAAC;IAED,IAAW,gBAAgB,CAAC,KAAa;QACrC,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;IACnC,CAAC;IAED,IAAW,UAAU,CAAC,KAAc;QAChC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACrC,CAAC;IAEM,aAAa,CAAC,KAAc,EAAE,gBAAyB;QAC1D,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK,EAAE;YAC5B,OAAO;SACV;QAED,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QAEzB,IAAI,CAAC,KAAK,EAAE;YACR,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC;YACvD,MAAM,gBAAgB,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAEvE,IAAI,gBAAgB,GAAG,CAAC,CAAC,EAAE;gBACvB,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;aAC/D;SACJ;aAAM;YACH,IAAI,CAAC,aAAa,CAAC,4BAA4B,CAAC,eAAe,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,CAAC;SAC1G;IACL,CAAC;IAED,IAAW,WAAW;QAClB,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAED,YACW,OAAkB,EACzB,YAA0B;QADnB,YAAO,GAAP,OAAO,CAAW;QAzKrB,gBAAW,GAAe,EAAE,CAAC;QAC7B,iBAAY,GAAe,EAAE,CAAC;QAC9B,WAAM,GAAe,EAAE,CAAC;QACxB,OAAE,GAAG,CAAC,CAAC;QACP,OAAE,GAAG,CAAC,CAAC;QACP,kBAAa,GAAG,CAAC,CAAC;QAClB,kBAAa,GAAG,CAAC,CAAC;QAClB,sBAAiB,GAAqB,IAAI,CAAC;QAC3C,sBAAiB,GAAqB,IAAI,CAAC;QAS3C,oBAAe,GAA8B,IAAI,CAAC;QAClD,eAAU,GAAG,IAAI,CAAC;QAClB,sBAAiB,GAAG,CAAC,CAAC,CAAC;QAyJ3B,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;QAElC,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC,aAAa,CAAC,4BAA4B,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;YAC/F,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,OAAO,IAAI,EAAE,CAAC;YAC1C,IAAI,IAAI,KAAK,IAAI,EAAE;gBACf,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC;gBACpD,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,kBAAkB,EAAE;oBACjE,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;iBAC3F;aACJ;iBAAM;gBACH,IAAI,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;oBACtD,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC;oBACvD,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,kBAAkB,EAAE;wBACjE,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,IAAK,IAAkB,CAAC,OAAO,CAAC,CAAC,CAAE,IAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;qBACvJ;iBACJ;aACJ;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,aAAa,CAAC,yBAAyB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YACtF,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;gBACjC,OAAO;aACV;YACD,IAAI,IAAI,CAAC,MAAM,EAAE;gBACb,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC;aAC1D;iBAAM;gBACH,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC;aAC7D;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC,aAAa,CAAC,0BAA0B,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YACxF,IAAI,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;gBAC5B,OAAO;aACV;YACD,IAAI,CAAC,OAAO,EAAE,CAAC;QACnB,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,4BAA4B,GAAG,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACrF,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC;YACnD,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;YAEhI,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,aAAa,CAAC,wBAAwB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACrF,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;gBACpE,OAAO;aACV;YAED,IAAI,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE;gBAChC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAC1B;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAEM,kBAAkB,CAAC,KAAiB;QACvC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC;QACnD,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC;QAEpD,oBAAoB;QACpB,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;QACjB,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC;QAElB,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;QAE3I,IAAI,kBAAkB,EAAE;YACpB,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC,EAAE,CAAC;SACpC;QACD,OAAO,kBAAkB,CAAC;IAC9B,CAAC;IAEM,kBAAkB,CAAC,QAAmB;QACzC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE;YACjC,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC;YAEpC,IAAI,aAAa,KAAK,QAAQ,IAAI,CAAC,aAAa,CAAC,SAAS,KAAK,QAAQ,CAAC,SAAS,IAAI,aAAa,CAAC,YAAY,KAAK,QAAQ,CAAC,YAAY,CAAC,EAAE;gBACxI,OAAO,IAAI,CAAC;aACf;SACJ;QAED,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE;YAClC,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC;YAEpC,IAAI,aAAa,KAAK,QAAQ,IAAI,CAAC,aAAa,CAAC,SAAS,KAAK,QAAQ,CAAC,SAAS,IAAI,aAAa,CAAC,YAAY,KAAK,QAAQ,CAAC,YAAY,CAAC,EAAE;gBACxI,OAAO,IAAI,CAAC;aACf;SACJ;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,6BAA6B,CAAC,IAAS;QAC1C,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE;YACjC,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC;YAEpC,IAAI,aAAa,CAAC,IAAI,KAAK,IAAI,EAAE;gBAC7B,OAAO,aAAa,CAAC;aACxB;SACJ;QAED,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE;YAClC,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC;YAEpC,IAAI,aAAa,CAAC,IAAI,KAAK,IAAI,EAAE;gBAC7B,OAAO,aAAa,CAAC;aACxB;SACJ;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,0BAA0B,CAAC,IAAS;QACvC,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,KAAM,CAAC,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACjH,CAAC;IAEM,mBAAmB,CAAC,QAAmB;QAC1C,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,KAAK,QAAQ,IAAI,IAAI,CAAC,KAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;IAC/G,CAAC;IAEO,cAAc;QAClB,IAAI,IAAI,CAAC,YAAY,CAAC,cAAc,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE;YAClE,OAAO;SACV;QAED,SAAS;QACT,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;YAC1C,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;SACxB;IACL,CAAC;IAEM,aAAa;QAChB,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE;YAC9B,OAAO;SACV;QACD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE;YAC5B,IAAI,CAAC,MAAM,EAAE,CAAC;SACjB;IACL,CAAC;IAEM,OAAO;QACV,IAAI,IAAI,CAAC,eAAe,EAAE;YACtB,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC1E,IAAI,CAAC,eAAe,CAAC,oBAAoB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YACvE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACtF,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC1E,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC;YAClD,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,KAAK,GAAG,WAAW,CAAC,kBAAkB,CAAC,CAAC;YACxE,IAAI,eAAe,EAAE;gBACjB,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;aACxD;YACD,IAAI,IAAI,CAAC,eAAe,CAAC,uBAAuB,EAAE;gBAC9C,IAAI,CAAC,eAAe,CAAC,uBAAuB,CAAC,IAAI,CAAC,OAAO,EAAE;oBACvD,MAAM,EAAE,IAAI,CAAC,OAAO;oBACpB,MAAM,EAAE,IAAI,CAAC,OAAO;oBACpB,eAAe,EAAE,IAAI,CAAC,gBAAgB;oBACtC,UAAU,EAAE,IAAI,CAAC,WAAW;oBAC5B,aAAa,EAAE,IAAI,CAAC,cAAc;oBAClC,QAAQ,EAAE,IAAI,CAAC,SAAS;oBACxB,WAAW,EAAE,IAAI,CAAC,YAAY;oBAC9B,eAAe,EAAE,IAAI,CAAC,gBAAgB;oBACtC,gBAAgB,EAAE,IAAI,CAAC,iBAAiB;oBACxC,OAAO,EAAE,IAAI,CAAC,QAAQ;oBACtB,eAAe,EAAE,IAAI,CAAC,gBAAgB;iBACzC,CAAC,CAAC;aACN;SACJ;aAAM;YACH,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;SAC9C;QAED,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE;YACjC,IAAI,CAAC,OAAO,EAAE,CAAC;SAClB;QAED,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE;YAClC,IAAI,CAAC,OAAO,EAAE,CAAC;SAClB;QAED,IAAI,IAAI,CAAC,gBAAgB,KAAK,CAAC,CAAC,EAAE;YAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAChG,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE;gBAC3D,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,gBAAgB,EAAE,CAAC;aACtD;SACJ;QAED,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC;QACvD,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC;QAEnD,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI,CAAC,CAAC;QACtD,IAAI,CAAC,cAAc,CAAC,SAAS,GAAG,aAAa,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAE3F,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QACtE,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE;YACzB,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC,CAAC;SAC7D;IACL,CAAC;IAEO,OAAO,CAAC,GAAiB;QAC7B,wCAAwC;QACxC,IAAI,GAAG,CAAC,MAAM,IAAK,GAAG,CAAC,MAAsB,CAAC,QAAQ,KAAK,KAAK,EAAE;YAC9D,OAAO;SACV;QAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACvE,IAAI,gBAAgB,KAAK,CAAC,CAAC,EAAE;YACzB,IAAI,CAAC,aAAa,CAAC,4BAA4B,CAAC,eAAe,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;SACxF;aAAM,IAAI,GAAG,CAAC,OAAO,EAAE;YACpB,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;SACpC;QAED,GAAG,CAAC,eAAe,EAAE,CAAC;QAEtB,KAAK,MAAM,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE;YACxD,YAAY,CAAC,iBAAiB,EAAE,CAAC;SACpC;QAED,IAAI,CAAC,iBAAiB,GAAG,GAAG,CAAC,OAAO,CAAC;QACrC,IAAI,CAAC,iBAAiB,GAAG,GAAG,CAAC,OAAO,CAAC;QAErC,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAClD,CAAC;IAEM,iBAAiB,CAAC,OAAO,GAAG,KAAK;QACpC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAC5D,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAChE,CAAC;IAEO,KAAK,CAAC,GAAiB;QAC3B,GAAG,CAAC,eAAe,EAAE,CAAC;QAEtB,KAAK,MAAM,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE;YACxD,YAAY,CAAC,iBAAiB,EAAE,CAAC;SACpC;QAED,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC9B,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC9B,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAElD,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,oBAAoB,EAAE;YACzC,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YAC/D,OAAO;SACV;QAED,oBAAoB;QACpB,MAAM,MAAM,GAA0B,EAAE,CAAC;QACzC,MAAM,OAAO,GAA0B,EAAE,CAAC;QAC1C,MAAM,mBAAmB,GAA0B,EAAE,CAAC;QACtD,MAAM,oBAAoB,GAA0B,EAAE,CAAC;QACvD,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAC,KAAK,CAAC;QAC9D,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAC,KAAM,CAAC;QAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAC,KAAK,CAAC,QAAQ,CAAC;QACvE,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAC,KAAM,CAAC,QAAQ,CAAC;QAEzE,kBAAkB;QAClB,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAC,OAAO,EAAE,CAAC;QACjD,IAAI,CAAC,YAAY,CAAC,oBAAoB,GAAG,IAAI,CAAC;QAE9C,gBAAgB;QAChB,mBAAmB,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;QAE/E,oBAAoB,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAEnD,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAEzC,OAAO,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;QAExE,yCAAyC;QACzC,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC/C,MAAM,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAElD,IAAI,aAAa,GAAG,CAAC,EAAE;YACnB,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;YAChC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;SACjC;QAED,IAAI,cAAc,GAAG,CAAC,EAAE;YACpB,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;YAClC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;SACnC;QAED,YAAY;QACZ,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,MAAM,EAAE,mBAAmB,EAAE,IAAI,CAAC,CAAC;QACrE,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,oBAAoB,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QAEvE,IAAI,CAAC,aAAa,CAAC,2BAA2B,CAAC,eAAe,EAAE,CAAC;QACjE,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IACnE,CAAC;IAEO,OAAO,CAAC,GAAiB;QAC7B,IAAI,CAAC,YAAY,CAAC,oBAAoB,GAAG,IAAI,CAAC;QAC9C,IAAI,IAAI,CAAC,iBAAiB,KAAK,IAAI,IAAI,IAAI,CAAC,iBAAiB,KAAK,IAAI,IAAI,GAAG,CAAC,OAAO,EAAE;YACnF,OAAO;SACV;QAED,OAAO;QACP,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;QAC7E,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;QAE7E,KAAK,MAAM,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE;YACxD,YAAY,CAAC,CAAC,IAAI,IAAI,CAAC;YACvB,YAAY,CAAC,CAAC,IAAI,IAAI,CAAC;SAC1B;QACD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE;YAClD,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;SAChC;QAED,IAAI,CAAC,iBAAiB,GAAG,GAAG,CAAC,OAAO,CAAC;QACrC,IAAI,CAAC,iBAAiB,GAAG,GAAG,CAAC,OAAO,CAAC;QAErC,GAAG,CAAC,eAAe,EAAE,CAAC;QAEtB,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE;YAChH,OAAO;SACV;QAED,uCAAuC;QACvC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC;QAClD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;YACxC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,KAAM,CAAC,IAAI,KAAK,IAAI,EAAE;gBACvD,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;gBAC/B,SAAS;aACZ;YACD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YAEnD,IAAI,IAAI,CAAC,iBAAiB,EAAE;gBACxB,IAAI,IAAI,CAAC,YAAY,CAAC,oBAAoB,KAAK,IAAI,EAAE;oBACjD,IAAI,IAAI,CAAC,YAAY,CAAC,oBAAoB,EAAE;wBACxC,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAC,iBAAiB,GAAG,KAAK,CAAC;qBACpE;oBACD,IAAI,CAAC,YAAY,CAAC,oBAAoB,GAAG,IAAI,CAAC;iBACjD;aACJ;SACJ;IACL,CAAC;IAEM,gBAAgB;QACnB,IAAI,OAAO,GAAG,cAAc,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;QAE7E,IAAI,CAAC,OAAO,EAAE;YACV,OAAO,GAAG,cAAc,CAAC,cAAc,CAAC;SAC3C;QAED,OAAO,KAAK,CAAC,aAAa,CAAC,OAAO,EAAE;YAChC,YAAY,EAAE,IAAI,CAAC,aAAa;YAChC,QAAQ,EAAE,IAAI,CAAC,OAAO;SACzB,CAAC,CAAC;IACP,CAAC;IAEM,YAAY,CAAC,IAAoB,EAAE,KAA2B;QACjE,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAE1B,kBAAkB;QAClB,MAAM,mBAAmB,GAAG,aAAa,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;QAE1F,IAAI,mBAAmB,EAAE;YACrB,IAAI,CAAC,eAAe,GAAG,IAAI,mBAAmB,EAAE,CAAC;SACpD;QAED,MAAM;QACN,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,aAAc,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACxD,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAE/C,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;QACzE,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;QACrE,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;QAEzE,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,aAAc,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACjE,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC,CAAC;QACrE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAEhD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,aAAc,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACxD,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC/C,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEhD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,aAAc,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC5D,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QACvD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,aAAc,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC/D,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAClD,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAEpD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,aAAc,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACjE,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QACxD,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAEhD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,aAAc,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC7D,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QACzD,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAE5C,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,aAAc,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACjE,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC;QAClE,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAErD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,aAAc,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAClE,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;QACpE,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAEtD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAc,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACzD,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QACjD,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAExC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE/B,WAAW;QACX,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,aAAc,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC1D,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAEnD,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAEzC,WAAW;QACX,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,aAAc,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC/D,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;QAE7D,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAE9C,cAAc;QACd,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;YACrC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;SACnI;QAED,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;YACvC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;SACtI;QAED,IAAI,CAAC,OAAO,EAAE,CAAC;QAEf,IAAI,CAAC,OAAO,CAAC,eAAe,GAAG,GAAG,EAAE;YAChC,IAAI,CAAC,OAAO,EAAE,CAAC;QACnB,CAAC,CAAC;IACN,CAAC;IAEM,OAAO;QACV,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE;YACxD,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;SACpE;QAED,yDAAyD;QACzD,IAAI,CAAC,aAAa,CAAC,4BAA4B,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAEtE,IAAI,IAAI,CAAC,2BAA2B,EAAE;YAClC,IAAI,CAAC,aAAa,CAAC,4BAA4B,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;SAC5F;QAED,IAAI,IAAI,CAAC,yBAAyB,EAAE;YAChC,IAAI,CAAC,aAAa,CAAC,0BAA0B,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;SACxF;QAED,IAAI,IAAI,CAAC,wBAAwB,EAAE;YAC/B,IAAI,CAAC,aAAa,CAAC,yBAAyB,CAAC,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;SACtF;QAED,IAAI,IAAI,CAAC,4BAA4B,EAAE;YACnC,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;SACpF;QAED,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE;YAC5B,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SACxD;QAED,IAAI,IAAI,CAAC,uBAAuB,EAAE;YAC9B,IAAI,CAAC,aAAa,CAAC,wBAAwB,CAAC,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;SACpF;QAED,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE;YACjC,IAAI,CAAC,OAAO,EAAE,CAAC;SAClB;QAED,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE;YAClC,IAAI,CAAC,OAAO,EAAE,CAAC;SAClB;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACnC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACtB,IAAI,CAAC,OAAO,EAAE,CAAC;SAClB;QAED,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;CACJ","sourcesContent":["import type { Nullable } from \"core/types\";\r\nimport type { Observer } from \"core/Misc/observable\";\r\nimport type { GraphCanvasComponent } from \"./graphCanvas\";\r\nimport * as React from \"react\";\r\nimport { NodePort } from \"./nodePort\";\r\nimport type { GraphFrame } from \"./graphFrame\";\r\nimport type { NodeLink } from \"./nodeLink\";\r\nimport type { StateManager } from \"./stateManager\";\r\nimport type { ISelectionChangedOptions } from \"./interfaces/selectionChangedOptions\";\r\nimport type { IDisplayManager } from \"./interfaces/displayManager\";\r\nimport { PropertyLedger } from \"./propertyLedger\";\r\nimport { DisplayLedger } from \"./displayLedger\";\r\nimport type { INodeData } from \"./interfaces/nodeData\";\r\nimport type { IPortData } from \"./interfaces/portData\";\r\nimport localStyles from \"./graphNode.modules.scss\";\r\nimport commonStyles from \"./common.modules.scss\";\r\n\r\nexport class GraphNode {\r\n private _visual: HTMLDivElement;\r\n private _headerContainer: HTMLDivElement;\r\n private _headerIcon: HTMLDivElement;\r\n private _headerIconImg: HTMLImageElement;\r\n private _header: HTMLDivElement;\r\n private _connections: HTMLDivElement;\r\n private _inputsContainer: HTMLDivElement;\r\n private _outputsContainer: HTMLDivElement;\r\n private _content: HTMLDivElement;\r\n private _comments: HTMLDivElement;\r\n private _executionTime: HTMLDivElement;\r\n private _selectionBorder: HTMLDivElement;\r\n private _inputPorts: NodePort[] = [];\r\n private _outputPorts: NodePort[] = [];\r\n private _links: NodeLink[] = [];\r\n private _x = 0;\r\n private _y = 0;\r\n private _gridAlignedX = 0;\r\n private _gridAlignedY = 0;\r\n private _mouseStartPointX: Nullable<number> = null;\r\n private _mouseStartPointY: Nullable<number> = null;\r\n private _stateManager: StateManager;\r\n private _onSelectionChangedObserver: Nullable<Observer<Nullable<ISelectionChangedOptions>>>;\r\n private _onSelectionBoxMovedObserver: Nullable<Observer<ClientRect | DOMRect>>;\r\n private _onFrameCreatedObserver: Nullable<Observer<GraphFrame>>;\r\n private _onUpdateRequiredObserver: Nullable<Observer<Nullable<INodeData>>>;\r\n private _onHighlightNodeObserver: Nullable<Observer<any>>;\r\n private _ownerCanvas: GraphCanvasComponent;\r\n private _isSelected: boolean;\r\n private _displayManager: Nullable<IDisplayManager> = null;\r\n private _isVisible = true;\r\n private _enclosingFrameId = -1;\r\n\r\n public addClassToVisual(className: string) {\r\n this._visual.classList.add(className);\r\n }\r\n\r\n public removeClassFromVisual(className: string) {\r\n this._visual.classList.remove(className);\r\n }\r\n\r\n public get isVisible() {\r\n return this._isVisible;\r\n }\r\n\r\n public set isVisible(value: boolean) {\r\n this._isVisible = value;\r\n\r\n if (!value) {\r\n this._visual.classList.add(commonStyles[\"hidden\"]);\r\n } else {\r\n this._visual.classList.remove(commonStyles[\"hidden\"]);\r\n this._upateNodePortNames();\r\n }\r\n\r\n for (const link of this._links) {\r\n link.isVisible = value;\r\n }\r\n\r\n this._refreshLinks();\r\n }\r\n\r\n private _upateNodePortNames() {\r\n for (const port of this._inputPorts.concat(this._outputPorts)) {\r\n if (port.hasLabel()) {\r\n port.portName = port.portData.name;\r\n }\r\n }\r\n }\r\n\r\n public get outputPorts() {\r\n return this._outputPorts;\r\n }\r\n\r\n public get inputPorts() {\r\n return this._inputPorts;\r\n }\r\n\r\n public get links() {\r\n return this._links;\r\n }\r\n\r\n public get gridAlignedX() {\r\n return this._gridAlignedX;\r\n }\r\n\r\n public get gridAlignedY() {\r\n return this._gridAlignedY;\r\n }\r\n\r\n public get x() {\r\n return this._x;\r\n }\r\n\r\n public set x(value: number) {\r\n if (this._x === value) {\r\n return;\r\n }\r\n this._x = value;\r\n\r\n this._gridAlignedX = this._ownerCanvas.getGridPosition(value);\r\n this._visual.style.left = `${this._gridAlignedX}px`;\r\n\r\n this._refreshLinks();\r\n this._refreshFrames();\r\n }\r\n\r\n public get y() {\r\n return this._y;\r\n }\r\n\r\n public set y(value: number) {\r\n if (this._y === value) {\r\n return;\r\n }\r\n\r\n this._y = value;\r\n\r\n this._gridAlignedY = this._ownerCanvas.getGridPosition(value);\r\n this._visual.style.top = `${this._gridAlignedY}px`;\r\n\r\n this._refreshLinks();\r\n this._refreshFrames();\r\n }\r\n\r\n public get width() {\r\n return this._visual.clientWidth;\r\n }\r\n\r\n public get height() {\r\n return this._visual.clientHeight;\r\n }\r\n\r\n public get id() {\r\n return this.content.uniqueId;\r\n }\r\n\r\n public get name() {\r\n return this.content.name;\r\n }\r\n\r\n public get isSelected() {\r\n return this._isSelected;\r\n }\r\n\r\n public get enclosingFrameId() {\r\n return this._enclosingFrameId;\r\n }\r\n\r\n public set enclosingFrameId(value: number) {\r\n this._enclosingFrameId = value;\r\n }\r\n\r\n public set isSelected(value: boolean) {\r\n this.setIsSelected(value, false);\r\n }\r\n\r\n public setIsSelected(value: boolean, marqueeSelection: boolean) {\r\n if (this._isSelected === value) {\r\n return;\r\n }\r\n\r\n this._isSelected = value;\r\n\r\n if (!value) {\r\n this._visual.classList.remove(localStyles[\"selected\"]);\r\n const indexInSelection = this._ownerCanvas.selectedNodes.indexOf(this);\r\n\r\n if (indexInSelection > -1) {\r\n this._ownerCanvas.selectedNodes.splice(indexInSelection, 1);\r\n }\r\n } else {\r\n this._stateManager.onSelectionChangedObservable.notifyObservers({ selection: this, marqueeSelection });\r\n }\r\n }\r\n\r\n public get rootElement() {\r\n return this._visual;\r\n }\r\n\r\n public constructor(\r\n public content: INodeData,\r\n stateManager: StateManager\r\n ) {\r\n this._stateManager = stateManager;\r\n\r\n this._onSelectionChangedObserver = this._stateManager.onSelectionChangedObservable.add((options) => {\r\n const { selection: node } = options || {};\r\n if (node === this) {\r\n this._visual.classList.add(localStyles[\"selected\"]);\r\n if (this._displayManager && this._displayManager.onSelectionChanged) {\r\n this._displayManager.onSelectionChanged(this.content, node.content, this._stateManager);\r\n }\r\n } else {\r\n if (this._ownerCanvas.selectedNodes.indexOf(this) === -1) {\r\n this._visual.classList.remove(localStyles[\"selected\"]);\r\n if (this._displayManager && this._displayManager.onSelectionChanged) {\r\n this._displayManager.onSelectionChanged(this.content, node && (node as GraphNode).content ? (node as GraphNode).content : null, this._stateManager);\r\n }\r\n }\r\n }\r\n });\r\n\r\n this._onHighlightNodeObserver = this._stateManager.onHighlightNodeObservable.add((data) => {\r\n if (data.data !== this.content.data) {\r\n return;\r\n }\r\n if (data.active) {\r\n this._visual.classList.add(localStyles[\"highlighted\"]);\r\n } else {\r\n this._visual.classList.remove(localStyles[\"highlighted\"]);\r\n }\r\n });\r\n\r\n this._onUpdateRequiredObserver = this._stateManager.onUpdateRequiredObservable.add((data) => {\r\n if (data !== this.content.data) {\r\n return;\r\n }\r\n this.refresh();\r\n });\r\n\r\n this._onSelectionBoxMovedObserver = this._stateManager.onSelectionBoxMoved.add((rect1) => {\r\n const rect2 = this._visual.getBoundingClientRect();\r\n const overlap = !(rect1.right < rect2.left || rect1.left > rect2.right || rect1.bottom < rect2.top || rect1.top > rect2.bottom);\r\n\r\n this.setIsSelected(overlap, true);\r\n });\r\n\r\n this._onFrameCreatedObserver = this._stateManager.onFrameCreatedObservable.add((frame) => {\r\n if (this._ownerCanvas.frames.some((f) => f.nodes.indexOf(this) !== -1)) {\r\n return;\r\n }\r\n\r\n if (this.isOverlappingFrame(frame)) {\r\n frame.nodes.push(this);\r\n }\r\n });\r\n }\r\n\r\n public isOverlappingFrame(frame: GraphFrame) {\r\n const rect2 = this._visual.getBoundingClientRect();\r\n const rect1 = frame.element.getBoundingClientRect();\r\n\r\n // Add a tiny margin\r\n rect1.width -= 5;\r\n rect1.height -= 5;\r\n\r\n const isOverlappingFrame = !(rect1.right < rect2.left || rect1.left > rect2.right || rect1.bottom < rect2.top || rect1.top > rect2.bottom);\r\n\r\n if (isOverlappingFrame) {\r\n this.enclosingFrameId = frame.id;\r\n }\r\n return isOverlappingFrame;\r\n }\r\n\r\n public getPortForPortData(portData: IPortData) {\r\n for (const port of this._inputPorts) {\r\n const attachedPoint = port.portData;\r\n\r\n if (attachedPoint === portData || (attachedPoint.ownerData === portData.ownerData && attachedPoint.internalName === portData.internalName)) {\r\n return port;\r\n }\r\n }\r\n\r\n for (const port of this._outputPorts) {\r\n const attachedPoint = port.portData;\r\n\r\n if (attachedPoint === portData || (attachedPoint.ownerData === portData.ownerData && attachedPoint.internalName === portData.internalName)) {\r\n return port;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n public getPortDataForPortDataContent(data: any) {\r\n for (const port of this._inputPorts) {\r\n const attachedPoint = port.portData;\r\n\r\n if (attachedPoint.data === data) {\r\n return attachedPoint;\r\n }\r\n }\r\n\r\n for (const port of this._outputPorts) {\r\n const attachedPoint = port.portData;\r\n\r\n if (attachedPoint.data === data) {\r\n return attachedPoint;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n public getLinksForPortDataContent(data: any) {\r\n return this._links.filter((link) => link.portA.portData.data === data || link.portB!.portData.data === data);\r\n }\r\n\r\n public getLinksForPortData(portData: IPortData) {\r\n return this._links.filter((link) => link.portA.portData === portData || link.portB!.portData === portData);\r\n }\r\n\r\n private _refreshFrames() {\r\n if (this._ownerCanvas._frameIsMoving || this._ownerCanvas._isLoading) {\r\n return;\r\n }\r\n\r\n // Frames\r\n for (const frame of this._ownerCanvas.frames) {\r\n frame.syncNode(this);\r\n }\r\n }\r\n\r\n public _refreshLinks() {\r\n if (this._ownerCanvas._isLoading) {\r\n return;\r\n }\r\n for (const link of this._links) {\r\n link.update();\r\n }\r\n }\r\n\r\n public refresh() {\r\n if (this._displayManager) {\r\n this._header.innerHTML = this._displayManager.getHeaderText(this.content);\r\n this._displayManager.updatePreviewContent(this.content, this._content);\r\n this._visual.style.background = this._displayManager.getBackgroundColor(this.content);\r\n const additionalClass = this._displayManager.getHeaderClass(this.content);\r\n this._header.classList.value = localStyles.header;\r\n this._headerContainer.classList.value = localStyles[\"header-container\"];\r\n if (additionalClass) {\r\n this._headerContainer.classList.add(additionalClass);\r\n }\r\n if (this._displayManager.updateFullVisualContent) {\r\n this._displayManager.updateFullVisualContent(this.content, {\r\n visual: this._visual,\r\n header: this._header,\r\n headerContainer: this._headerContainer,\r\n headerIcon: this._headerIcon,\r\n headerIconImg: this._headerIconImg,\r\n comments: this._comments,\r\n connections: this._connections,\r\n inputsContainer: this._inputsContainer,\r\n outputsContainer: this._outputsContainer,\r\n content: this._content,\r\n selectionBorder: this._selectionBorder,\r\n });\r\n }\r\n } else {\r\n this._header.innerHTML = this.content.name;\r\n }\r\n\r\n for (const port of this._inputPorts) {\r\n port.refresh();\r\n }\r\n\r\n for (const port of this._outputPorts) {\r\n port.refresh();\r\n }\r\n\r\n if (this.enclosingFrameId !== -1) {\r\n const index = this._ownerCanvas.frames.findIndex((frame) => frame.id === this.enclosingFrameId);\r\n if (index >= 0 && this._ownerCanvas.frames[index].isCollapsed) {\r\n this._ownerCanvas.frames[index].redrawFramePorts();\r\n }\r\n }\r\n\r\n this._comments.innerHTML = this.content.comments || \"\";\r\n this._comments.title = this.content.comments || \"\";\r\n\r\n const executionTime = this.content.executionTime || 0;\r\n this._executionTime.innerHTML = executionTime >= 0 ? `${executionTime.toFixed(2)} ms` : \"\";\r\n\r\n this.content.prepareHeaderIcon(this._headerIcon, this._headerIconImg);\r\n if (this._headerIconImg.src) {\r\n this._header.classList.add(localStyles[\"headerWithIcon\"]);\r\n }\r\n }\r\n\r\n private _onDown(evt: PointerEvent) {\r\n // Check if this is coming from the port\r\n if (evt.target && (evt.target as HTMLElement).nodeName === \"IMG\") {\r\n return;\r\n }\r\n\r\n const indexInSelection = this._ownerCanvas.selectedNodes.indexOf(this);\r\n if (indexInSelection === -1) {\r\n this._stateManager.onSelectionChangedObservable.notifyObservers({ selection: this });\r\n } else if (evt.ctrlKey) {\r\n this.setIsSelected(false, false);\r\n }\r\n\r\n evt.stopPropagation();\r\n\r\n for (const selectedNode of this._ownerCanvas.selectedNodes) {\r\n selectedNode.cleanAccumulation();\r\n }\r\n\r\n this._mouseStartPointX = evt.clientX;\r\n this._mouseStartPointY = evt.clientY;\r\n\r\n this._visual.setPointerCapture(evt.pointerId);\r\n }\r\n\r\n public cleanAccumulation(useCeil = false) {\r\n this.x = this._ownerCanvas.getGridPosition(this.x, useCeil);\r\n this.y = this._ownerCanvas.getGridPosition(this.y, useCeil);\r\n }\r\n\r\n private _onUp(evt: PointerEvent) {\r\n evt.stopPropagation();\r\n\r\n for (const selectedNode of this._ownerCanvas.selectedNodes) {\r\n selectedNode.cleanAccumulation();\r\n }\r\n\r\n this._mouseStartPointX = null;\r\n this._mouseStartPointY = null;\r\n this._visual.releasePointerCapture(evt.pointerId);\r\n\r\n if (!this._ownerCanvas._targetLinkCandidate) {\r\n this._stateManager.onNodeMovedObservable.notifyObservers(this);\r\n return;\r\n }\r\n\r\n // Connect the ports\r\n const inputs: Nullable<IPortData>[] = [];\r\n const outputs: Nullable<IPortData>[] = [];\r\n const availableNodeInputs: Nullable<IPortData>[] = [];\r\n const availableNodeOutputs: Nullable<IPortData>[] = [];\r\n const leftNode = this._ownerCanvas._targetLinkCandidate.nodeA;\r\n const rightNode = this._ownerCanvas._targetLinkCandidate.nodeB!;\r\n const leftPort = this._ownerCanvas._targetLinkCandidate.portA.portData;\r\n const rightPort = this._ownerCanvas._targetLinkCandidate.portB!.portData;\r\n\r\n // Delete previous\r\n this._ownerCanvas._targetLinkCandidate.dispose();\r\n this._ownerCanvas._targetLinkCandidate = null;\r\n\r\n // Get the ports\r\n availableNodeInputs.push(...this.content.inputs.filter((i) => !i.isConnected));\r\n\r\n availableNodeOutputs.push(...this.content.outputs);\r\n\r\n inputs.push(...leftNode.content.outputs);\r\n\r\n outputs.push(...rightNode.content.inputs.filter((i) => !i.isConnected));\r\n\r\n // Prioritize the already connected ports\r\n const leftPortIndex = inputs.indexOf(leftPort);\r\n const rightPortIndex = outputs.indexOf(rightPort);\r\n\r\n if (leftPortIndex > 0) {\r\n inputs.splice(leftPortIndex, 1);\r\n inputs.splice(0, 0, leftPort);\r\n }\r\n\r\n if (rightPortIndex > 0) {\r\n outputs.splice(rightPortIndex, 1);\r\n outputs.splice(0, 0, rightPort);\r\n }\r\n\r\n // Reconnect\r\n this._ownerCanvas.automaticRewire(inputs, availableNodeInputs, true);\r\n this._ownerCanvas.automaticRewire(availableNodeOutputs, outputs, true);\r\n\r\n this._stateManager.onRebuildRequiredObservable.notifyObservers();\r\n this._stateManager.onNodeMovedObservable.notifyObservers(this);\r\n }\r\n\r\n private _onMove(evt: PointerEvent) {\r\n this._ownerCanvas._targetLinkCandidate = null;\r\n if (this._mouseStartPointX === null || this._mouseStartPointY === null || evt.ctrlKey) {\r\n return;\r\n }\r\n\r\n // Move\r\n const newX = (evt.clientX - this._mouseStartPointX) / this._ownerCanvas.zoom;\r\n const newY = (evt.clientY - this._mouseStartPointY) / this._ownerCanvas.zoom;\r\n\r\n for (const selectedNode of this._ownerCanvas.selectedNodes) {\r\n selectedNode.x += newX;\r\n selectedNode.y += newY;\r\n }\r\n for (const frame of this._ownerCanvas.selectedFrames) {\r\n frame._moveFrame(newX, newY);\r\n }\r\n\r\n this._mouseStartPointX = evt.clientX;\r\n this._mouseStartPointY = evt.clientY;\r\n\r\n evt.stopPropagation();\r\n\r\n if (this._inputPorts.some((p) => p.portData.isConnected) || this._outputPorts.some((o) => o.portData.hasEndpoints)) {\r\n return;\r\n }\r\n\r\n // Check wires that could be underneath\r\n const rect = this._visual.getBoundingClientRect();\r\n for (const link of this._ownerCanvas.links) {\r\n if (link.portA.node === this || link.portB!.node === this) {\r\n link.isTargetCandidate = false;\r\n continue;\r\n }\r\n link.isTargetCandidate = link.intersectsWith(rect);\r\n\r\n if (link.isTargetCandidate) {\r\n if (this._ownerCanvas._targetLinkCandidate !== link) {\r\n if (this._ownerCanvas._targetLinkCandidate) {\r\n this._ownerCanvas._targetLinkCandidate.isTargetCandidate = false;\r\n }\r\n this._ownerCanvas._targetLinkCandidate = link;\r\n }\r\n }\r\n }\r\n }\r\n\r\n public renderProperties(): Nullable<JSX.Element> {\r\n let control = PropertyLedger.RegisteredControls[this.content.getClassName()];\r\n\r\n if (!control) {\r\n control = PropertyLedger.DefaultControl;\r\n }\r\n\r\n return React.createElement(control, {\r\n stateManager: this._stateManager,\r\n nodeData: this.content,\r\n });\r\n }\r\n\r\n public appendVisual(root: HTMLDivElement, owner: GraphCanvasComponent) {\r\n this._ownerCanvas = owner;\r\n\r\n // Display manager\r\n const displayManagerClass = DisplayLedger.RegisteredControls[this.content.getClassName()];\r\n\r\n if (displayManagerClass) {\r\n this._displayManager = new displayManagerClass();\r\n }\r\n\r\n // DOM\r\n this._visual = root.ownerDocument!.createElement(\"div\");\r\n this._visual.classList.add(localStyles.visual);\r\n\r\n this._visual.addEventListener(\"pointerdown\", (evt) => this._onDown(evt));\r\n this._visual.addEventListener(\"pointerup\", (evt) => this._onUp(evt));\r\n this._visual.addEventListener(\"pointermove\", (evt) => this._onMove(evt));\r\n\r\n this._headerContainer = root.ownerDocument!.createElement(\"div\");\r\n this._headerContainer.classList.add(localStyles[\"header-container\"]);\r\n this._visual.appendChild(this._headerContainer);\r\n\r\n this._header = root.ownerDocument!.createElement(\"div\");\r\n this._header.classList.add(localStyles.header);\r\n this._headerContainer.appendChild(this._header);\r\n\r\n this._headerIcon = root.ownerDocument!.createElement(\"div\");\r\n this._headerIcon.classList.add(localStyles.headerIcon);\r\n this._headerIconImg = root.ownerDocument!.createElement(\"img\");\r\n this._headerIcon.appendChild(this._headerIconImg);\r\n this._headerContainer.appendChild(this._headerIcon);\r\n\r\n this._selectionBorder = root.ownerDocument!.createElement(\"div\");\r\n this._selectionBorder.classList.add(\"selection-border\");\r\n this._visual.appendChild(this._selectionBorder);\r\n\r\n this._connections = root.ownerDocument!.createElement(\"div\");\r\n this._connections.classList.add(localStyles.connections);\r\n this._visual.appendChild(this._connections);\r\n\r\n this._inputsContainer = root.ownerDocument!.createElement(\"div\");\r\n this._inputsContainer.classList.add(commonStyles.inputsContainer);\r\n this._connections.appendChild(this._inputsContainer);\r\n\r\n this._outputsContainer = root.ownerDocument!.createElement(\"div\");\r\n this._outputsContainer.classList.add(commonStyles.outputsContainer);\r\n this._connections.appendChild(this._outputsContainer);\r\n\r\n this._content = root.ownerDocument!.createElement(\"div\");\r\n this._content.classList.add(localStyles.content);\r\n this._visual.appendChild(this._content);\r\n\r\n root.appendChild(this._visual);\r\n\r\n // Comments\r\n this._comments = root.ownerDocument!.createElement(\"div\");\r\n this._comments.classList.add(localStyles.comments);\r\n\r\n this._visual.appendChild(this._comments);\r\n\r\n // Comments\r\n this._executionTime = root.ownerDocument!.createElement(\"div\");\r\n this._executionTime.classList.add(localStyles.executionTime);\r\n\r\n this._visual.appendChild(this._executionTime);\r\n\r\n // Connections\r\n for (const input of this.content.inputs) {\r\n this._inputPorts.push(NodePort.CreatePortElement(input, this, this._inputsContainer, this._displayManager, this._stateManager));\r\n }\r\n\r\n for (const output of this.content.outputs) {\r\n this._outputPorts.push(NodePort.CreatePortElement(output, this, this._outputsContainer, this._displayManager, this._stateManager));\r\n }\r\n\r\n this.refresh();\r\n\r\n this.content.refreshCallback = () => {\r\n this.refresh();\r\n };\r\n }\r\n\r\n public dispose() {\r\n if (this._displayManager && this._displayManager.onDispose) {\r\n this._displayManager.onDispose(this.content, this._stateManager);\r\n }\r\n\r\n // notify frame observers that this node is being deleted\r\n this._stateManager.onGraphNodeRemovalObservable.notifyObservers(this);\r\n\r\n if (this._onSelectionChangedObserver) {\r\n this._stateManager.onSelectionChangedObservable.remove(this._onSelectionChangedObserver);\r\n }\r\n\r\n if (this._onUpdateRequiredObserver) {\r\n this._stateManager.onUpdateRequiredObservable.remove(this._onUpdateRequiredObserver);\r\n }\r\n\r\n if (this._onHighlightNodeObserver) {\r\n this._stateManager.onHighlightNodeObservable.remove(this._onHighlightNodeObserver);\r\n }\r\n\r\n if (this._onSelectionBoxMovedObserver) {\r\n this._stateManager.onSelectionBoxMoved.remove(this._onSelectionBoxMovedObserver);\r\n }\r\n\r\n if (this._visual.parentElement) {\r\n this._visual.parentElement.removeChild(this._visual);\r\n }\r\n\r\n if (this._onFrameCreatedObserver) {\r\n this._stateManager.onFrameCreatedObservable.remove(this._onFrameCreatedObserver);\r\n }\r\n\r\n for (const port of this._inputPorts) {\r\n port.dispose();\r\n }\r\n\r\n for (const port of this._outputPorts) {\r\n port.dispose();\r\n }\r\n\r\n const links = this._links.slice(0);\r\n for (const link of links) {\r\n link.dispose();\r\n }\r\n\r\n this.content.dispose();\r\n }\r\n}\r\n"]}
|
1
|
+
{"version":3,"file":"graphNode.js","sourceRoot":"","sources":["../../../../dev/sharedUiComponents/src/nodeGraphSystem/graphNode.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"core/types\";\r\nimport type { Observer } from \"core/Misc/observable\";\r\nimport type { GraphCanvasComponent } from \"./graphCanvas\";\r\nimport * as React from \"react\";\r\nimport { NodePort } from \"./nodePort\";\r\nimport type { GraphFrame } from \"./graphFrame\";\r\nimport type { NodeLink } from \"./nodeLink\";\r\nimport type { StateManager } from \"./stateManager\";\r\nimport type { ISelectionChangedOptions } from \"./interfaces/selectionChangedOptions\";\r\nimport type { IDisplayManager } from \"./interfaces/displayManager\";\r\nimport { PropertyLedger } from \"./propertyLedger\";\r\nimport { DisplayLedger } from \"./displayLedger\";\r\nimport type { INodeData } from \"./interfaces/nodeData\";\r\nimport type { IPortData } from \"./interfaces/portData\";\r\nimport localStyles from \"./graphNode.modules.scss\";\r\nimport commonStyles from \"./common.modules.scss\";\r\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\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 this._visual.classList.add(localStyles[\"selected\"]);\r\n if (this._displayManager && this._displayManager.onSelectionChanged) {\r\n this._displayManager.onSelectionChanged(this.content, node.content, this._stateManager);\r\n }\r\n } else {\r\n if (this._ownerCanvas.selectedNodes.indexOf(this) === -1) {\r\n this._visual.classList.remove(localStyles[\"selected\"]);\r\n if (this._displayManager && this._displayManager.onSelectionChanged) {\r\n this._displayManager.onSelectionChanged(this.content, node && (node as GraphNode).content ? (node as GraphNode).content : null, this._stateManager);\r\n }\r\n }\r\n }\r\n });\r\n\r\n this._onHighlightNodeObserver = this._stateManager.onHighlightNodeObservable.add((data) => {\r\n if (data.data !== this.content.data) {\r\n return;\r\n }\r\n if (data.active) {\r\n this._visual.classList.add(localStyles[\"highlighted\"]);\r\n } else {\r\n this._visual.classList.remove(localStyles[\"highlighted\"]);\r\n }\r\n });\r\n\r\n this._onUpdateRequiredObserver = this._stateManager.onUpdateRequiredObservable.add((data) => {\r\n if (data !== this.content.data) {\r\n return;\r\n }\r\n this.refresh();\r\n });\r\n\r\n this._onSelectionBoxMovedObserver = this._stateManager.onSelectionBoxMoved.add((rect1) => {\r\n const rect2 = this._visual.getBoundingClientRect();\r\n const overlap = !(rect1.right < rect2.left || rect1.left > rect2.right || rect1.bottom < rect2.top || rect1.top > rect2.bottom);\r\n\r\n this.setIsSelected(overlap, true);\r\n });\r\n\r\n this._onFrameCreatedObserver = this._stateManager.onFrameCreatedObservable.add((frame) => {\r\n if (this._ownerCanvas.frames.some((f) => f.nodes.indexOf(this) !== -1)) {\r\n return;\r\n }\r\n\r\n if (this.isOverlappingFrame(frame)) {\r\n frame.nodes.push(this);\r\n }\r\n });\r\n }\r\n\r\n public isOverlappingFrame(frame: GraphFrame) {\r\n const rect2 = this._visual.getBoundingClientRect();\r\n const rect1 = frame.element.getBoundingClientRect();\r\n\r\n // Add a tiny margin\r\n rect1.width -= 5;\r\n rect1.height -= 5;\r\n\r\n const isOverlappingFrame = !(rect1.right < rect2.left || rect1.left > rect2.right || rect1.bottom < rect2.top || rect1.top > rect2.bottom);\r\n\r\n if (isOverlappingFrame) {\r\n this.enclosingFrameId = frame.id;\r\n }\r\n return isOverlappingFrame;\r\n }\r\n\r\n public getPortForPortData(portData: IPortData) {\r\n for (const port of this._inputPorts) {\r\n const attachedPoint = port.portData;\r\n\r\n if (attachedPoint === portData || (attachedPoint.ownerData === portData.ownerData && attachedPoint.internalName === portData.internalName)) {\r\n return port;\r\n }\r\n }\r\n\r\n for (const port of this._outputPorts) {\r\n const attachedPoint = port.portData;\r\n\r\n if (attachedPoint === portData || (attachedPoint.ownerData === portData.ownerData && attachedPoint.internalName === portData.internalName)) {\r\n return port;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n public getPortDataForPortDataContent(data: any) {\r\n for (const port of this._inputPorts) {\r\n const attachedPoint = port.portData;\r\n\r\n if (attachedPoint.data === data) {\r\n return attachedPoint;\r\n }\r\n }\r\n\r\n for (const port of this._outputPorts) {\r\n const attachedPoint = port.portData;\r\n\r\n if (attachedPoint.data === data) {\r\n return attachedPoint;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n public getLinksForPortDataContent(data: any) {\r\n return this._links.filter((link) => link.portA.portData.data === data || link.portB!.portData.data === data);\r\n }\r\n\r\n public getLinksForPortData(portData: IPortData) {\r\n return this._links.filter((link) => link.portA.portData === portData || link.portB!.portData === portData);\r\n }\r\n\r\n private _refreshFrames() {\r\n if (this._ownerCanvas._frameIsMoving || this._ownerCanvas._isLoading) {\r\n return;\r\n }\r\n\r\n // Frames\r\n for (const frame of this._ownerCanvas.frames) {\r\n frame.syncNode(this);\r\n }\r\n }\r\n\r\n public _refreshLinks() {\r\n if (this._ownerCanvas._isLoading) {\r\n return;\r\n }\r\n for (const link of this._links) {\r\n link.update();\r\n }\r\n }\r\n\r\n public refresh() {\r\n if (this._displayManager) {\r\n this._header.innerHTML = this._displayManager.getHeaderText(this.content);\r\n this._displayManager.updatePreviewContent(this.content, this._content);\r\n this._visual.style.background = this._displayManager.getBackgroundColor(this.content);\r\n const additionalClass = this._displayManager.getHeaderClass(this.content);\r\n this._header.classList.value = localStyles.header;\r\n this._headerContainer.classList.value = localStyles[\"header-container\"];\r\n if (additionalClass) {\r\n this._headerContainer.classList.add(additionalClass);\r\n }\r\n if (this._displayManager.updateFullVisualContent) {\r\n this._displayManager.updateFullVisualContent(this.content, {\r\n visual: this._visual,\r\n header: this._header,\r\n headerContainer: this._headerContainer,\r\n headerIcon: this._headerIcon,\r\n headerIconImg: this._headerIconImg,\r\n comments: this._comments,\r\n connections: this._connections,\r\n inputsContainer: this._inputsContainer,\r\n outputsContainer: this._outputsContainer,\r\n content: this._content,\r\n selectionBorder: this._selectionBorder,\r\n });\r\n }\r\n } else {\r\n this._header.innerHTML = this.content.name;\r\n }\r\n\r\n for (const 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 private _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 this._optionsContainer.addEventListener(\"pointerdown\", (evt) => evt.stopPropagation());\r\n this._optionsContainer.addEventListener(\"pointerup\", (evt) => evt.stopPropagation());\r\n this._optionsContainer.addEventListener(\"pointermove\", (evt) => evt.stopPropagation());\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 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 for (const { propertyName, displayName, type, options } of propStore) {\r\n if (options && !options.embedded) {\r\n continue;\r\n }\r\n\r\n const container = root.ownerDocument!.createElement(\"div\");\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 label.onclick = () => {\r\n checkbox.click();\r\n };\r\n container.appendChild(label);\r\n break;\r\n }\r\n case PropertyTypeForEdition.Int:\r\n case PropertyTypeForEdition.Float: {\r\n const cantDisplaySlider = isNaN(options.min as number) || isNaN(options.max as number) || options.min === options.max;\r\n if (cantDisplaySlider) {\r\n container.classList.add(localStyles.floatContainer);\r\n const numberInput = root.ownerDocument!.createElement(\"input\");\r\n numberInput.type = \"number\";\r\n numberInput.id = `number-${idGenerator++}`;\r\n this._visualPropertiesRefresh.push(() => {\r\n numberInput.value = source[propertyName];\r\n });\r\n numberInput.onchange = () => {\r\n source[propertyName] = parseFloat(numberInput.value);\r\n this._forceRebuild(source, propertyName, options?.notifiers);\r\n };\r\n container.appendChild(numberInput);\r\n const label = root.ownerDocument!.createElement(\"div\");\r\n label.innerText = displayName;\r\n container.appendChild(label);\r\n\r\n let shouldCapture = false;\r\n numberInput.onpointerdown = (evt) => {\r\n shouldCapture = true;\r\n evt.preventDefault();\r\n };\r\n numberInput.onpointerup = (evt) => {\r\n if (numberInput.hasPointerCapture(evt.pointerId)) {\r\n numberInput.releasePointerCapture(evt.pointerId);\r\n shouldCapture = false;\r\n evt.preventDefault();\r\n } else {\r\n numberInput.focus();\r\n numberInput.select();\r\n }\r\n };\r\n numberInput.onpointermove = (evt) => {\r\n if (shouldCapture) {\r\n numberInput.setPointerCapture(evt.pointerId);\r\n }\r\n\r\n if (numberInput.hasPointerCapture(evt.pointerId)) {\r\n numberInput.value = (parseFloat(numberInput.value) + evt.movementX * 0.01).toFixed(2);\r\n source[propertyName] = parseFloat(numberInput.value);\r\n this._forceRebuild(source, propertyName, options?.notifiers);\r\n evt.preventDefault();\r\n }\r\n };\r\n } else {\r\n container.classList.add(localStyles.sliderContainer);\r\n const label = root.ownerDocument!.createElement(\"label\");\r\n container.appendChild(label);\r\n const value = root.ownerDocument!.createElement(\"div\");\r\n container.appendChild(value);\r\n const slider = root.ownerDocument!.createElement(\"input\");\r\n slider.type = \"range\";\r\n slider.id = `slider-${idGenerator++}`;\r\n slider.step = type === PropertyTypeForEdition.Int ? \"1\" : (Math.abs((options.max as number) - (options.min as number)) / 100.0).toString();\r\n slider.min = (options.min as number).toString();\r\n slider.max = (options.max as number).toString();\r\n container.appendChild(slider);\r\n label.innerText = displayName;\r\n label.htmlFor = slider.id;\r\n this._visualPropertiesRefresh.push(() => {\r\n slider.value = source[propertyName];\r\n value.innerText = source[propertyName];\r\n });\r\n slider.oninput = () => {\r\n source[propertyName] = parseFloat(slider.value);\r\n value.innerText = source[propertyName];\r\n this._forceRebuild(source, propertyName, options?.notifiers);\r\n };\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.active);\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.active);\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 if (this._visualPropertiesRefresh.length === 0) {\r\n this._inputsContainer.classList.add(commonStyles.inputsContainerUp);\r\n }\r\n\r\n // Connections\r\n for (const input of this.content.inputs) {\r\n this._inputPorts.push(NodePort.CreatePortElement(input, this, this._inputsContainer, this._displayManager, this._stateManager));\r\n }\r\n\r\n for (const output of this.content.outputs) {\r\n this._outputPorts.push(NodePort.CreatePortElement(output, this, this._outputsContainer, this._displayManager, this._stateManager));\r\n }\r\n\r\n this.refresh();\r\n\r\n this.content.refreshCallback = () => {\r\n this.refresh();\r\n };\r\n }\r\n\r\n public dispose() {\r\n if (this._displayManager && this._displayManager.onDispose) {\r\n this._displayManager.onDispose(this.content, this._stateManager);\r\n }\r\n\r\n // notify frame observers that this node is being deleted\r\n this._stateManager.onGraphNodeRemovalObservable.notifyObservers(this);\r\n\r\n if (this._onSelectionChangedObserver) {\r\n this._stateManager.onSelectionChangedObservable.remove(this._onSelectionChangedObserver);\r\n }\r\n\r\n if (this._onUpdateRequiredObserver) {\r\n this._stateManager.onUpdateRequiredObservable.remove(this._onUpdateRequiredObserver);\r\n }\r\n\r\n if (this._onHighlightNodeObserver) {\r\n this._stateManager.onHighlightNodeObservable.remove(this._onHighlightNodeObserver);\r\n }\r\n\r\n if (this._onSelectionBoxMovedObserver) {\r\n this._stateManager.onSelectionBoxMoved.remove(this._onSelectionBoxMovedObserver);\r\n }\r\n\r\n if (this._visual.parentElement) {\r\n this._visual.parentElement.removeChild(this._visual);\r\n }\r\n\r\n if (this._onFrameCreatedObserver) {\r\n this._stateManager.onFrameCreatedObservable.remove(this._onFrameCreatedObserver);\r\n }\r\n\r\n for (const port of this._inputPorts) {\r\n port.dispose();\r\n }\r\n\r\n for (const port of this._outputPorts) {\r\n port.dispose();\r\n }\r\n\r\n const links = this._links.slice(0);\r\n for (const link of links) {\r\n link.dispose();\r\n }\r\n\r\n this.content.dispose();\r\n }\r\n}\r\n"]}
|