ngx-vflow 0.2.1 → 0.3.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/esm2022/lib/vflow/components/edge-label/edge-label.component.mjs +13 -10
- package/esm2022/lib/vflow/components/handle/handle.component.mjs +26 -28
- package/esm2022/lib/vflow/components/node/node.component.mjs +58 -25
- package/esm2022/lib/vflow/components/vflow/vflow.component.mjs +10 -4
- package/esm2022/lib/vflow/decorators/microtask.decorator.mjs +11 -0
- package/esm2022/lib/vflow/decorators/run-in-injection-context.decorator.mjs +26 -0
- package/esm2022/lib/vflow/directives/handle-size-controller.directive.mjs +38 -0
- package/esm2022/lib/vflow/models/edge.model.mjs +36 -6
- package/esm2022/lib/vflow/models/handle.model.mjs +36 -5
- package/esm2022/lib/vflow/models/node.model.mjs +3 -22
- package/esm2022/lib/vflow/services/edge-changes.service.mjs +14 -7
- package/esm2022/lib/vflow/services/flow-entities.service.mjs +5 -2
- package/esm2022/lib/vflow/services/handle.service.mjs +10 -4
- package/esm2022/lib/vflow/services/node-changes.service.mjs +6 -3
- package/esm2022/lib/vflow/types/edge-change.type.mjs +1 -1
- package/esm2022/lib/vflow/utils/add-nodes-to-edges.mjs +3 -3
- package/esm2022/lib/vflow/utils/resizable.mjs +11 -0
- package/esm2022/lib/vflow/vflow.module.mjs +5 -2
- package/fesm2022/ngx-vflow.mjs +317 -146
- package/fesm2022/ngx-vflow.mjs.map +1 -1
- package/lib/vflow/components/handle/handle.component.d.ts +8 -4
- package/lib/vflow/components/node/node.component.d.ts +7 -6
- package/lib/vflow/components/vflow/vflow.component.d.ts +6 -2
- package/lib/vflow/decorators/microtask.decorator.d.ts +1 -0
- package/lib/vflow/decorators/run-in-injection-context.decorator.d.ts +8 -0
- package/lib/vflow/directives/handle-size-controller.directive.d.ts +10 -0
- package/lib/vflow/models/edge.model.d.ts +21 -3
- package/lib/vflow/models/handle.model.d.ts +33 -0
- package/lib/vflow/models/node.model.d.ts +2 -3
- package/lib/vflow/services/flow-entities.service.d.ts +1 -0
- package/lib/vflow/services/handle.service.d.ts +8 -10
- package/lib/vflow/types/edge-change.type.d.ts +3 -0
- package/lib/vflow/utils/resizable.d.ts +3 -0
- package/lib/vflow/vflow.module.d.ts +4 -3
- package/package.json +1 -1
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { Directive, ElementRef, Input, inject } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class HandleSizeControllerDirective {
|
|
4
|
+
constructor() {
|
|
5
|
+
this.handleWrapper = inject(ElementRef);
|
|
6
|
+
}
|
|
7
|
+
ngAfterViewInit() {
|
|
8
|
+
const element = this.handleWrapper.nativeElement;
|
|
9
|
+
const rect = element.getBBox();
|
|
10
|
+
const stroke = getChildStrokeWidth(element);
|
|
11
|
+
this.handleModel.size.set({
|
|
12
|
+
width: rect.width + stroke,
|
|
13
|
+
height: rect.height + stroke
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: HandleSizeControllerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
17
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: HandleSizeControllerDirective, selector: "[handleSizeController]", inputs: { handleModel: ["handleSizeController", "handleModel"] }, ngImport: i0 }); }
|
|
18
|
+
}
|
|
19
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: HandleSizeControllerDirective, decorators: [{
|
|
20
|
+
type: Directive,
|
|
21
|
+
args: [{ selector: '[handleSizeController]' }]
|
|
22
|
+
}], propDecorators: { handleModel: [{
|
|
23
|
+
type: Input,
|
|
24
|
+
args: [{ required: true, alias: 'handleSizeController' }]
|
|
25
|
+
}] } });
|
|
26
|
+
function getChildStrokeWidth(element) {
|
|
27
|
+
const child = element.firstElementChild;
|
|
28
|
+
if (child) {
|
|
29
|
+
const stroke = getComputedStyle(child).strokeWidth;
|
|
30
|
+
const strokeAsNumber = Number(stroke.replace('px', ''));
|
|
31
|
+
if (isNaN(strokeAsNumber)) {
|
|
32
|
+
return 0;
|
|
33
|
+
}
|
|
34
|
+
return strokeAsNumber;
|
|
35
|
+
}
|
|
36
|
+
return 0;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlLXNpemUtY29udHJvbGxlci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmZsb3ctbGliL3NyYy9saWIvdmZsb3cvZGlyZWN0aXZlcy9oYW5kbGUtc2l6ZS1jb250cm9sbGVyLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFJcEYsTUFBTSxPQUFPLDZCQUE2QjtJQUQxQztRQUtVLGtCQUFhLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBNEIsQ0FBQTtLQVl0RTtJQVZRLGVBQWU7UUFDcEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUE7UUFDaEQsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFBO1FBRTlCLE1BQU0sTUFBTSxHQUFHLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQzNDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztZQUN4QixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNO1lBQzFCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU07U0FDN0IsQ0FBQyxDQUFBO0lBQ0osQ0FBQzsrR0FmVSw2QkFBNkI7bUdBQTdCLDZCQUE2Qjs7NEZBQTdCLDZCQUE2QjtrQkFEekMsU0FBUzttQkFBQyxFQUFFLFFBQVEsRUFBRSx3QkFBd0IsRUFBRTs4QkFHeEMsV0FBVztzQkFEakIsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLHNCQUFzQixFQUFFOztBQWlCMUQsU0FBUyxtQkFBbUIsQ0FBQyxPQUFvQjtJQUMvQyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsaUJBQWlCLENBQUE7SUFFdkMsSUFBSSxLQUFLLEVBQUU7UUFDVCxNQUFNLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxXQUFXLENBQUE7UUFDbEQsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUE7UUFFdkQsSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDLEVBQUU7WUFDekIsT0FBTyxDQUFDLENBQUE7U0FDVDtRQUVELE9BQU8sY0FBYyxDQUFBO0tBQ3RCO0lBRUQsT0FBTyxDQUFDLENBQUE7QUFDVixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBJbnB1dCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIYW5kbGVNb2RlbCB9IGZyb20gJy4uL21vZGVscy9oYW5kbGUubW9kZWwnO1xuXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICdbaGFuZGxlU2l6ZUNvbnRyb2xsZXJdJyB9KVxuZXhwb3J0IGNsYXNzIEhhbmRsZVNpemVDb250cm9sbGVyRGlyZWN0aXZlIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlLCBhbGlhczogJ2hhbmRsZVNpemVDb250cm9sbGVyJyB9KVxuICBwdWJsaWMgaGFuZGxlTW9kZWwhOiBIYW5kbGVNb2RlbFxuXG4gIHByaXZhdGUgaGFuZGxlV3JhcHBlciA9IGluamVjdChFbGVtZW50UmVmKSBhcyBFbGVtZW50UmVmPFNWR0dFbGVtZW50PlxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuaGFuZGxlV3JhcHBlci5uYXRpdmVFbGVtZW50XG4gICAgY29uc3QgcmVjdCA9IGVsZW1lbnQuZ2V0QkJveCgpXG5cbiAgICBjb25zdCBzdHJva2UgPSBnZXRDaGlsZFN0cm9rZVdpZHRoKGVsZW1lbnQpXG4gICAgdGhpcy5oYW5kbGVNb2RlbC5zaXplLnNldCh7XG4gICAgICB3aWR0aDogcmVjdC53aWR0aCArIHN0cm9rZSxcbiAgICAgIGhlaWdodDogcmVjdC5oZWlnaHQgKyBzdHJva2VcbiAgICB9KVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldENoaWxkU3Ryb2tlV2lkdGgoZWxlbWVudDogU1ZHR0VsZW1lbnQpIHtcbiAgY29uc3QgY2hpbGQgPSBlbGVtZW50LmZpcnN0RWxlbWVudENoaWxkXG5cbiAgaWYgKGNoaWxkKSB7XG4gICAgY29uc3Qgc3Ryb2tlID0gZ2V0Q29tcHV0ZWRTdHlsZShjaGlsZCkuc3Ryb2tlV2lkdGhcbiAgICBjb25zdCBzdHJva2VBc051bWJlciA9IE51bWJlcihzdHJva2UucmVwbGFjZSgncHgnLCAnJykpXG5cbiAgICBpZiAoaXNOYU4oc3Ryb2tlQXNOdW1iZXIpKSB7XG4gICAgICByZXR1cm4gMFxuICAgIH1cblxuICAgIHJldHVybiBzdHJva2VBc051bWJlclxuICB9XG5cbiAgcmV0dXJuIDBcbn1cbiJdfQ==
|
|
@@ -1,27 +1,57 @@
|
|
|
1
|
-
import { computed } from "@angular/core";
|
|
1
|
+
import { computed, signal } from "@angular/core";
|
|
2
2
|
import { EdgeLabelModel } from "./edge-label.model";
|
|
3
3
|
import { straightPath } from "../math/edge-path/straigh-path";
|
|
4
4
|
import { bezierPath } from "../math/edge-path/bezier-path";
|
|
5
|
+
import { toObservable } from "@angular/core/rxjs-interop";
|
|
5
6
|
export class EdgeModel {
|
|
6
7
|
constructor(edge) {
|
|
7
8
|
this.edge = edge;
|
|
9
|
+
this.source = signal(undefined);
|
|
10
|
+
this.target = signal(undefined);
|
|
11
|
+
this.detached = computed(() => {
|
|
12
|
+
const source = this.source();
|
|
13
|
+
const target = this.target();
|
|
14
|
+
if (!source || !target) {
|
|
15
|
+
return true;
|
|
16
|
+
}
|
|
17
|
+
let existsSourceHandle = false;
|
|
18
|
+
let existsTargetHandle = false;
|
|
19
|
+
if (this.edge.sourceHandle) {
|
|
20
|
+
existsSourceHandle = !!source.handles()
|
|
21
|
+
.find(handle => handle.rawHandle.id === this.edge.sourceHandle);
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
existsSourceHandle = !!source.handles()
|
|
25
|
+
.find(handle => handle.rawHandle.type === 'source');
|
|
26
|
+
}
|
|
27
|
+
if (this.edge.targetHandle) {
|
|
28
|
+
existsTargetHandle = !!target.handles()
|
|
29
|
+
.find(handle => handle.rawHandle.id === this.edge.targetHandle);
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
existsTargetHandle = !!target.handles()
|
|
33
|
+
.find(handle => handle.rawHandle.type === 'target');
|
|
34
|
+
}
|
|
35
|
+
return !existsSourceHandle || !existsTargetHandle;
|
|
36
|
+
});
|
|
37
|
+
this.detached$ = toObservable(this.detached);
|
|
8
38
|
this.path = computed(() => {
|
|
9
39
|
let source;
|
|
10
40
|
if (this.edge.sourceHandle) {
|
|
11
|
-
source = this.source
|
|
41
|
+
source = this.source()?.handles()
|
|
12
42
|
.find(handle => handle.rawHandle.id === this.edge.sourceHandle);
|
|
13
43
|
}
|
|
14
44
|
else {
|
|
15
|
-
source = this.source
|
|
45
|
+
source = this.source()?.handles()
|
|
16
46
|
.find(handle => handle.rawHandle.type === 'source');
|
|
17
47
|
}
|
|
18
48
|
let target;
|
|
19
49
|
if (this.edge.targetHandle) {
|
|
20
|
-
target = this.target
|
|
50
|
+
target = this.target()?.handles()
|
|
21
51
|
.find(handle => handle.rawHandle.id === this.edge.targetHandle);
|
|
22
52
|
}
|
|
23
53
|
else {
|
|
24
|
-
target = this.target
|
|
54
|
+
target = this.target()?.handles()
|
|
25
55
|
.find(handle => handle.rawHandle.type === 'target');
|
|
26
56
|
}
|
|
27
57
|
// TODO: don't like this
|
|
@@ -54,4 +84,4 @@ export class EdgeModel {
|
|
|
54
84
|
this.usingPoints = [!!this.edgeLabels.start, !!this.edgeLabels.center, !!this.edgeLabels.end];
|
|
55
85
|
}
|
|
56
86
|
}
|
|
57
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
87
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRnZS5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC12Zmxvdy1saWIvc3JjL2xpYi92Zmxvdy9tb2RlbHMvZWRnZS5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUdqRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFcEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzlELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUczRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFMUQsTUFBTSxPQUFPLFNBQVM7SUFzRnBCLFlBQW1CLElBQVU7UUFBVixTQUFJLEdBQUosSUFBSSxDQUFNO1FBckZ0QixXQUFNLEdBQUcsTUFBTSxDQUF3QixTQUFTLENBQUMsQ0FBQTtRQUNqRCxXQUFNLEdBQUcsTUFBTSxDQUF3QixTQUFTLENBQUMsQ0FBQTtRQUlqRCxhQUFRLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUM5QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUE7WUFDNUIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFBO1lBRTVCLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxNQUFNLEVBQUU7Z0JBQ3RCLE9BQU8sSUFBSSxDQUFBO2FBQ1o7WUFFRCxJQUFJLGtCQUFrQixHQUFHLEtBQUssQ0FBQTtZQUM5QixJQUFJLGtCQUFrQixHQUFHLEtBQUssQ0FBQTtZQUU5QixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFO2dCQUMxQixrQkFBa0IsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRTtxQkFDcEMsSUFBSSxD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QUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUMvRixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb21wdXRlZCwgc2lnbmFsIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEVkZ2VMYWJlbFBvc2l0aW9uIH0gZnJvbSBcIi4uL2ludGVyZmFjZXMvZWRnZS1sYWJlbC5pbnRlcmZhY2VcIjtcbmltcG9ydCB7IEVkZ2UsIEN1cnZlLCBFZGdlVHlwZSB9IGZyb20gXCIuLi9pbnRlcmZhY2VzL2VkZ2UuaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBFZGdlTGFiZWxNb2RlbCB9IGZyb20gXCIuL2VkZ2UtbGFiZWwubW9kZWxcIjtcbmltcG9ydCB7IE5vZGVNb2RlbCB9IGZyb20gXCIuL25vZGUubW9kZWxcIjtcbmltcG9ydCB7IHN0cmFpZ2h0UGF0aCB9IGZyb20gXCIuLi9tYXRoL2VkZ2UtcGF0aC9zdHJhaWdoLXBhdGhcIjtcbmltcG9ydCB7IGJlemllclBhdGggfSBmcm9tIFwiLi4vbWF0aC9lZGdlLXBhdGgvYmV6aWVyLXBhdGhcIjtcbmltcG9ydCB7IFVzaW5nUG9pbnRzIH0gZnJvbSBcIi4uL3R5cGVzL3VzaW5nLXBvaW50cy50eXBlXCI7XG5pbXBvcnQgeyBIYW5kbGVNb2RlbCB9IGZyb20gXCIuL2hhbmRsZS5tb2RlbFwiO1xuaW1wb3J0IHsgdG9PYnNlcnZhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wXCI7XG5cbmV4cG9ydCBjbGFzcyBFZGdlTW9kZWwge1xuICBwdWJsaWMgc291cmNlID0gc2lnbmFsPE5vZGVNb2RlbCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKVxuICBwdWJsaWMgdGFyZ2V0ID0gc2lnbmFsPE5vZGVNb2RlbCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKVxuICBwdWJsaWMgY3VydmU6IEN1cnZlXG4gIHB1YmxpYyB0eXBlOiBFZGdlVHlwZVxuXG4gIHB1YmxpYyBkZXRhY2hlZCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBzb3VyY2UgPSB0aGlzLnNvdXJjZSgpXG4gICAgY29uc3QgdGFyZ2V0ID0gdGhpcy50YXJnZXQoKVxuXG4gICAgaWYgKCFzb3VyY2UgfHwgIXRhcmdldCkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICBsZXQgZXhpc3RzU291cmNlSGFuZGxlID0gZmFsc2VcbiAgICBsZXQgZXhpc3RzVGFyZ2V0SGFuZGxlID0gZmFsc2VcblxuICAgIGlmICh0aGlzLmVkZ2Uuc291cmNlSGFuZGxlKSB7XG4gICAgICBleGlzdHNTb3VyY2VIYW5kbGUgPSAhIXNvdXJjZS5oYW5kbGVzKClcbiAgICAgICAgLmZpbmQoaGFuZGxlID0+IGhhbmRsZS5yYXdIYW5kbGUuaWQgPT09IHRoaXMuZWRnZS5zb3VyY2VIYW5kbGUpXG4gICAgfSBlbHNlIHtcbiAgICAgIGV4aXN0c1NvdXJjZUhhbmRsZSA9ICEhc291cmNlLmhhbmRsZXMoKVxuICAgICAgICAuZmluZChoYW5kbGUgPT4gaGFuZGxlLnJhd0hhbmRsZS50eXBlID09PSAnc291cmNlJylcbiAgICB9XG5cbiAgICBpZiAodGhpcy5lZGdlLnRhcmdldEhhbmRsZSkge1xuICAgICAgZXhpc3RzVGFyZ2V0SGFuZGxlID0gISF0YXJnZXQuaGFuZGxlcygpXG4gICAgICAgIC5maW5kKGhhbmRsZSA9PiBoYW5kbGUucmF3SGFuZGxlLmlkID09PSB0aGlzLmVkZ2UudGFyZ2V0SGFuZGxlKVxuICAgIH0gZWxzZSB7XG4gICAgICBleGlzdHNUYXJnZXRIYW5kbGUgPSAhIXRhcmdldC5oYW5kbGVzKClcbiAgICAgICAgLmZpbmQoaGFuZGxlID0+IGhhbmRsZS5yYXdIYW5kbGUudHlwZSA9PT0gJ3RhcmdldCcpXG4gICAgfVxuXG4gICAgcmV0dXJuICFleGlzdHNTb3VyY2VIYW5kbGUgfHwgIWV4aXN0c1RhcmdldEhhbmRsZVxuICB9KVxuXG4gIHB1YmxpYyBkZXRhY2hlZCQgPSB0b09ic2VydmFibGUodGhpcy5kZXRhY2hlZClcblxuICBwdWJsaWMgcGF0aCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBsZXQgc291cmNlOiBIYW5kbGVNb2RlbCB8IHVuZGVmaW5lZFxuICAgIGlmICh0aGlzLmVkZ2Uuc291cmNlSGFuZGxlKSB7XG4gICAgICBzb3VyY2UgPSB0aGlzLnNvdXJjZSgpPy5oYW5kbGVzKClcbiAgICAgICAgLmZpbmQoaGFuZGxlID0+IGhhbmRsZS5yYXdIYW5kbGUuaWQgPT09IHRoaXMuZWRnZS5zb3VyY2VIYW5kbGUpXG4gICAgfSBlbHNlIHtcbiAgICAgIHNvdXJjZSA9IHRoaXMuc291cmNlKCk/LmhhbmRsZXMoKVxuICAgICAgICAuZmluZChoYW5kbGUgPT4gaGFuZGxlLnJhd0hhbmRsZS50eXBlID09PSAnc291cmNlJylcbiAgICB9XG5cbiAgICBsZXQgdGFyZ2V0OiBIYW5kbGVNb2RlbCB8IHVuZGVmaW5lZFxuICAgIGlmICh0aGlzLmVkZ2UudGFyZ2V0SGFuZGxlKSB7XG4gICAgICB0YXJnZXQgPSB0aGlzLnRhcmdldCgpPy5oYW5kbGVzKClcbiAgICAgICAgLmZpbmQoaGFuZGxlID0+IGhhbmRsZS5yYXdIYW5kbGUuaWQgPT09IHRoaXMuZWRnZS50YXJnZXRIYW5kbGUpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRhcmdldCA9IHRoaXMudGFyZ2V0KCk/LmhhbmRsZXMoKVxuICAgICAgICAuZmluZChoYW5kbGUgPT4gaGFuZGxlLnJhd0hhbmRsZS50eXBlID09PSAndGFyZ2V0JylcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBkb24ndCBsaWtlIHRoaXNcbiAgICBpZiAoIXNvdXJjZSB8fCAhdGFyZ2V0KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwYXRoOiAnJyxcbiAgICAgICAgcG9pbnRzOiB7XG4gICAgICAgICAgc3RhcnQ6IHsgeDogMCwgeTogMCB9LFxuICAgICAgICAgIGNlbnRlcjogeyB4OiAwLCB5OiAwIH0sXG4gICAgICAgICAgZW5kOiB7IHg6IDAsIHk6IDAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dpdGNoICh0aGlzLmN1cnZlKSB7XG4gICAgICBjYXNlICdzdHJhaWdodCc6XG4gICAgICAgIHJldHVybiBzdHJhaWdodFBhdGgoc291cmNlLnBvaW50QWJzb2x1dGUoKSwgdGFyZ2V0LnBvaW50QWJzb2x1dGUoKSwgdGhpcy51c2luZ1BvaW50cylcbiAgICAgIGNhc2UgJ2Jlemllcic6XG4gICAgICAgIHJldHVybiBiZXppZXJQYXRoKFxuICAgICAgICAgIHNvdXJjZS5wb2ludEFic29sdXRlKCksIHRhcmdldC5wb2ludEFic29sdXRlKCksXG4gICAgICAgICAgc291cmNlLnJhd0hhbmRsZS5wb3NpdGlvbixcbiAgICAgICAgICB0YXJnZXQucmF3SGFuZGxlLnBvc2l0aW9uLFxuICAgICAgICAgIHRoaXMudXNpbmdQb2ludHNcbiAgICAgICAgKVxuICAgIH1cbiAgfSlcblxuICBwdWJsaWMgZWRnZUxhYmVsczogeyBbcG9zaXRpb24gaW4gRWRnZUxhYmVsUG9zaXRpb25dPzogRWRnZUxhYmVsTW9kZWwgfSA9IHt9XG5cbiAgcHJpdmF0ZSB1c2luZ1BvaW50czogVXNpbmdQb2ludHNcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgZWRnZTogRWRnZSkge1xuICAgIHRoaXMudHlwZSA9IGVkZ2UudHlwZSA/PyAnZGVmYXVsdCdcbiAgICB0aGlzLmN1cnZlID0gZWRnZS5jdXJ2ZSA/PyAnYmV6aWVyJ1xuXG4gICAgaWYgKGVkZ2UuZWRnZUxhYmVscz8uc3RhcnQpIHRoaXMuZWRnZUxhYmVscy5zdGFydCA9IG5ldyBFZGdlTGFiZWxNb2RlbChlZGdlLmVkZ2VMYWJlbHMuc3RhcnQpXG4gICAgaWYgKGVkZ2UuZWRnZUxhYmVscz8uY2VudGVyKSB0aGlzLmVkZ2VMYWJlbHMuY2VudGVyID0gbmV3IEVkZ2VMYWJlbE1vZGVsKGVkZ2UuZWRnZUxhYmVscy5jZW50ZXIpXG4gICAgaWYgKGVkZ2UuZWRnZUxhYmVscz8uZW5kKSB0aGlzLmVkZ2VMYWJlbHMuZW5kID0gbmV3IEVkZ2VMYWJlbE1vZGVsKGVkZ2UuZWRnZUxhYmVscy5lbmQpXG5cbiAgICB0aGlzLnVzaW5nUG9pbnRzID0gWyEhdGhpcy5lZGdlTGFiZWxzLnN0YXJ0LCAhIXRoaXMuZWRnZUxhYmVscy5jZW50ZXIsICEhdGhpcy5lZGdlTGFiZWxzLmVuZF1cbiAgfVxufVxuIl19
|
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
import { computed, signal } from "@angular/core";
|
|
2
|
+
import { Subject, map } from "rxjs";
|
|
3
|
+
import { toSignal } from "@angular/core/rxjs-interop";
|
|
2
4
|
export class HandleModel {
|
|
3
5
|
constructor(rawHandle, parentNode) {
|
|
4
6
|
this.rawHandle = rawHandle;
|
|
5
7
|
this.parentNode = parentNode;
|
|
6
8
|
this.strokeWidth = 2;
|
|
9
|
+
/**
|
|
10
|
+
* Pre-computed size for default handle, changed dynamically
|
|
11
|
+
* for custom handles
|
|
12
|
+
*/
|
|
7
13
|
this.size = signal({
|
|
8
14
|
width: 10 + (2 * this.strokeWidth),
|
|
9
15
|
height: 10 + (2 * this.strokeWidth)
|
|
@@ -12,18 +18,18 @@ export class HandleModel {
|
|
|
12
18
|
switch (this.rawHandle.position) {
|
|
13
19
|
case 'left': return {
|
|
14
20
|
x: 0,
|
|
15
|
-
y: this.
|
|
21
|
+
y: this.parentPosition().y + (this.parentSize().height / 2)
|
|
16
22
|
};
|
|
17
23
|
case 'right': return {
|
|
18
24
|
x: this.parentNode.size().width,
|
|
19
|
-
y: this.
|
|
25
|
+
y: this.parentPosition().y + (this.parentSize().height / 2)
|
|
20
26
|
};
|
|
21
27
|
case 'top': return {
|
|
22
|
-
x: this.
|
|
28
|
+
x: this.parentPosition().x + (this.parentSize().width / 2),
|
|
23
29
|
y: 0
|
|
24
30
|
};
|
|
25
31
|
case 'bottom': return {
|
|
26
|
-
x: this.
|
|
32
|
+
x: this.parentPosition().x + this.parentSize().width / 2,
|
|
27
33
|
y: this.parentNode.size().height
|
|
28
34
|
};
|
|
29
35
|
}
|
|
@@ -42,6 +48,31 @@ export class HandleModel {
|
|
|
42
48
|
y: this.parentNode.point().y + this.offset().y + this.sizeOffset().y,
|
|
43
49
|
};
|
|
44
50
|
});
|
|
51
|
+
this.state = signal('idle');
|
|
52
|
+
this.updateParentSizeAndPosition$ = new Subject();
|
|
53
|
+
this.parentSize = toSignal(this.updateParentSizeAndPosition$.pipe(map(() => ({
|
|
54
|
+
width: this.parentReference.offsetWidth,
|
|
55
|
+
height: this.parentReference.offsetHeight
|
|
56
|
+
}))), {
|
|
57
|
+
initialValue: { width: 0, height: 0 }
|
|
58
|
+
});
|
|
59
|
+
this.parentPosition = toSignal(this.updateParentSizeAndPosition$.pipe(map(() => ({
|
|
60
|
+
x: this.parentReference.offsetLeft,
|
|
61
|
+
y: this.parentReference.offsetTop
|
|
62
|
+
}))), {
|
|
63
|
+
initialValue: { x: 0, y: 0 }
|
|
64
|
+
});
|
|
65
|
+
this.parentReference = this.rawHandle.parentReference;
|
|
66
|
+
this.template = this.rawHandle.template;
|
|
67
|
+
this.templateContext = {
|
|
68
|
+
$implicit: {
|
|
69
|
+
point: this.offset,
|
|
70
|
+
state: this.state
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
updateParent() {
|
|
75
|
+
this.updateParentSizeAndPosition$.next();
|
|
45
76
|
}
|
|
46
77
|
}
|
|
47
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
78
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L21vZGVscy9oYW5kbGUubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHakQsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBSXRELE1BQU0sT0FBTyxXQUFXO0lBd0Z0QixZQUNTLFNBQXFCLEVBQ3BCLFVBQXFCO1FBRHRCLGNBQVMsR0FBVCxTQUFTLENBQVk7UUFDcEIsZUFBVSxHQUFWLFVBQVUsQ0FBVztRQXpGZixnQkFBVyxHQUFHLENBQUMsQ0FBQTtRQUUvQjs7O1dBR0c7UUFDSSxTQUFJLEdBQUcsTUFBTSxDQUFDO1lBQ25CLEtBQUssRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUNsQyxNQUFNLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7U0FDcEMsQ0FBQyxDQUFBO1FBRUssV0FBTSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDNUIsUUFBUSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRTtnQkFDL0IsS0FBSyxNQUFNLENBQUMsQ0FBQyxPQUFPO29CQUNsQixDQUFDLEVBQUUsQ0FBQztvQkFDSixDQUFDLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO2lCQUM1RCxDQUFBO2dCQUNELEtBQUssT0FBTyxDQUFDLENBQUMsT0FBTztvQkFDbkIs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QUUsQ0FBQyxFQUFFO1NBQ3RDLENBQ0YsQ0FBQTtRQUVNLG1CQUFjLEdBQUcsUUFBUSxDQUM5QixJQUFJLENBQUMsNEJBQTRCLENBQUMsSUFBSSxDQUNwQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUNULENBQUMsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVU7WUFDbEMsQ0FBQyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUztTQUNsQyxDQUFDLENBQUMsQ0FDSixFQUNEO1lBQ0UsWUFBWSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1NBQzdCLENBQ0YsQ0FBQTtRQUVNLG9CQUFlLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFnQixDQUFBO1FBRWpELGFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQTtRQUVsQyxvQkFBZSxHQUFHO1lBQ3ZCLFNBQVMsRUFBRTtnQkFDVCxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU07Z0JBQ2xCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSzthQUNsQjtTQUNGLENBQUE7SUFLRyxDQUFDO0lBRUUsWUFBWTtRQUNqQixJQUFJLENBQUMsNEJBQTRCLENBQUMsSUFBSSxFQUFFLENBQUE7SUFDMUMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29tcHV0ZWQsIHNpZ25hbCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBOb2RlSGFuZGxlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL2hhbmRsZS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBOb2RlTW9kZWwgfSBmcm9tIFwiLi9ub2RlLm1vZGVsXCI7XG5pbXBvcnQgeyBTdWJqZWN0LCBtYXAgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgdG9TaWduYWwgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3BcIjtcblxuZXhwb3J0IHR5cGUgSGFuZGxlU3RhdGUgPSAndmFsaWQnIHwgJ2ludmFsaWQnIHwgJ2lkbGUnXG5cbmV4cG9ydCBjbGFzcyBIYW5kbGVNb2RlbCB7XG4gIHB1YmxpYyByZWFkb25seSBzdHJva2VXaWR0aCA9IDJcblxuICAvKipcbiAgICogUHJlLWNvbXB1dGVkIHNpemUgZm9yIGRlZmF1bHQgaGFuZGxlLCBjaGFuZ2VkIGR5bmFtaWNhbGx5XG4gICAqIGZvciBjdXN0b20gaGFuZGxlc1xuICAgKi9cbiAgcHVibGljIHNpemUgPSBzaWduYWwoe1xuICAgIHdpZHRoOiAxMCArICgyICogdGhpcy5zdHJva2VXaWR0aCksXG4gICAgaGVpZ2h0OiAxMCArICgyICogdGhpcy5zdHJva2VXaWR0aClcbiAgfSlcblxuICBwdWJsaWMgb2Zmc2V0ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHN3aXRjaCAodGhpcy5yYXdIYW5kbGUucG9zaXRpb24pIHtcbiAgICAgIGNhc2UgJ2xlZnQnOiByZXR1cm4ge1xuICAgICAgICB4OiAwLFxuICAgICAgICB5OiB0aGlzLnBhcmVudFBvc2l0aW9uKCkueSArICh0aGlzLnBhcmVudFNpemUoKS5oZWlnaHQgLyAyKVxuICAgICAgfVxuICAgICAgY2FzZSAncmlnaHQnOiByZXR1cm4ge1xuICAgICAgICB4OiB0aGlzLnBhcmVudE5vZGUuc2l6ZSgpLndpZHRoLFxuICAgICAgICB5OiB0aGlzLnBhcmVudFBvc2l0aW9uKCkueSArICh0aGlzLnBhcmVudFNpemUoKS5oZWlnaHQgLyAyKVxuICAgICAgfVxuICAgICAgY2FzZSAndG9wJzogcmV0dXJuIHtcbiAgICAgICAgeDogdGhpcy5wYXJlbnRQb3NpdGlvbigpLnggKyAodGhpcy5wYXJlbnRTaXplKCkud2lkdGggLyAyKSxcbiAgICAgICAgeTogMFxuICAgICAgfVxuICAgICAgY2FzZSAnYm90dG9tJzogcmV0dXJuIHtcbiAgICAgICAgeDogdGhpcy5wYXJlbnRQb3NpdGlvbigpLnggKyB0aGlzLnBhcmVudFNpemUoKS53aWR0aCAvIDIsXG4gICAgICAgIHk6IHRoaXMucGFyZW50Tm9kZS5zaXplKCkuaGVpZ2h0XG4gICAgICB9XG4gICAgfVxuICB9KVxuXG4gIHB1YmxpYyBzaXplT2Zmc2V0ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHN3aXRjaCAodGhpcy5yYXdIYW5kbGUucG9zaXRpb24pIHtcbiAgICAgIGNhc2UgJ2xlZnQnOiByZXR1cm4geyB4OiAtKHRoaXMuc2l6ZSgpLndpZHRoIC8gMiksIHk6IDAgfVxuICAgICAgY2FzZSAncmlnaHQnOiByZXR1cm4geyB4OiB0aGlzLnNpemUoKS53aWR0aCAvIDIsIHk6IDAgfVxuICAgICAgY2FzZSAndG9wJzogcmV0dXJuIHsgeDogMCwgeTogLSh0aGlzLnNpemUoKS5oZWlnaHQgLyAyKSB9XG4gICAgICBjYXNlICdib3R0b20nOiByZXR1cm4geyB4OiAwLCB5OiB0aGlzLnNpemUoKS5oZWlnaHQgLyAyIH1cbiAgICB9XG4gIH0pXG5cbiAgcHVibGljIHBvaW50QWJzb2x1dGUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IHRoaXMucGFyZW50Tm9kZS5wb2ludCgpLnggKyB0aGlzLm9mZnNldCgpLnggKyB0aGlzLnNpemVPZmZzZXQoKS54LFxuICAgICAgeTogdGhpcy5wYXJlbnROb2RlLnBvaW50KCkueSArIHRoaXMub2Zmc2V0KCkueSArIHRoaXMuc2l6ZU9mZnNldCgpLnksXG4gICAgfVxuICB9KVxuXG4gIHB1YmxpYyBzdGF0ZSA9IHNpZ25hbDxIYW5kbGVTdGF0ZT4oJ2lkbGUnKVxuXG4gIHByaXZhdGUgdXBkYXRlUGFyZW50U2l6ZUFuZFBvc2l0aW9uJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KClcblxuICBwdWJsaWMgcGFyZW50U2l6ZSA9IHRvU2lnbmFsKFxuICAgIHRoaXMudXBkYXRlUGFyZW50U2l6ZUFuZFBvc2l0aW9uJC5waXBlKFxuICAgICAgbWFwKCgpID0+ICh7XG4gICAgICAgIHdpZHRoOiB0aGlzLnBhcmVudFJlZmVyZW5jZS5vZmZzZXRXaWR0aCxcbiAgICAgICAgaGVpZ2h0OiB0aGlzLnBhcmVudFJlZmVyZW5jZS5vZmZzZXRIZWlnaHRcbiAgICAgIH0pKVxuICAgICksXG4gICAge1xuICAgICAgaW5pdGlhbFZhbHVlOiB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAgfVxuICAgIH1cbiAgKVxuXG4gIHB1YmxpYyBwYXJlbnRQb3NpdGlvbiA9IHRvU2lnbmFsKFxuICAgIHRoaXMudXBkYXRlUGFyZW50U2l6ZUFuZFBvc2l0aW9uJC5waXBlKFxuICAgICAgbWFwKCgpID0+ICh7XG4gICAgICAgIHg6IHRoaXMucGFyZW50UmVmZXJlbmNlLm9mZnNldExlZnQsXG4gICAgICAgIHk6IHRoaXMucGFyZW50UmVmZXJlbmNlLm9mZnNldFRvcFxuICAgICAgfSkpXG4gICAgKSxcbiAgICB7XG4gICAgICBpbml0aWFsVmFsdWU6IHsgeDogMCwgeTogMCB9XG4gICAgfVxuICApXG5cbiAgcHVibGljIHBhcmVudFJlZmVyZW5jZSA9IHRoaXMucmF3SGFuZGxlLnBhcmVudFJlZmVyZW5jZSFcblxuICBwdWJsaWMgdGVtcGxhdGUgPSB0aGlzLnJhd0hhbmRsZS50ZW1wbGF0ZVxuXG4gIHB1YmxpYyB0ZW1wbGF0ZUNvbnRleHQgPSB7XG4gICAgJGltcGxpY2l0OiB7XG4gICAgICBwb2ludDogdGhpcy5vZmZzZXQsXG4gICAgICBzdGF0ZTogdGhpcy5zdGF0ZVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByYXdIYW5kbGU6IE5vZGVIYW5kbGUsXG4gICAgcHJpdmF0ZSBwYXJlbnROb2RlOiBOb2RlTW9kZWxcbiAgKSB7IH1cblxuICBwdWJsaWMgdXBkYXRlUGFyZW50KCkge1xuICAgIHRoaXMudXBkYXRlUGFyZW50U2l6ZUFuZFBvc2l0aW9uJC5uZXh0KClcbiAgfVxufVxuIl19
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { computed, signal } from '@angular/core';
|
|
2
2
|
import { isDefined } from '../utils/is-defined';
|
|
3
3
|
import { toObservable } from '@angular/core/rxjs-interop';
|
|
4
|
-
import { HandleModel } from './handle.model';
|
|
5
4
|
export class NodeModel {
|
|
6
5
|
constructor(node) {
|
|
7
6
|
this.node = node;
|
|
@@ -12,26 +11,8 @@ export class NodeModel {
|
|
|
12
11
|
// Now source and handle positions derived from parent flow
|
|
13
12
|
this.sourcePosition = computed(() => this.flow.handlePositions().source);
|
|
14
13
|
this.targetPosition = computed(() => this.flow.handlePositions().target);
|
|
15
|
-
this.handles =
|
|
16
|
-
|
|
17
|
-
return this.rawHandles().map((handle => new HandleModel(handle, this)));
|
|
18
|
-
}
|
|
19
|
-
return [
|
|
20
|
-
new HandleModel({
|
|
21
|
-
position: this.sourcePosition(),
|
|
22
|
-
type: 'source',
|
|
23
|
-
parentPosition: signal({ x: 0, y: 0 }),
|
|
24
|
-
parentSize: signal(this.size())
|
|
25
|
-
}, this),
|
|
26
|
-
new HandleModel({
|
|
27
|
-
position: this.targetPosition(),
|
|
28
|
-
type: 'target',
|
|
29
|
-
parentPosition: signal({ x: 0, y: 0 }),
|
|
30
|
-
parentSize: signal(this.size())
|
|
31
|
-
}, this),
|
|
32
|
-
];
|
|
33
|
-
});
|
|
34
|
-
this.rawHandles = signal([]);
|
|
14
|
+
this.handles = signal([]);
|
|
15
|
+
this.handles$ = toObservable(this.handles);
|
|
35
16
|
this.draggable = true;
|
|
36
17
|
// disabled for configuration for now
|
|
37
18
|
this.magnetRadius = 20;
|
|
@@ -48,4 +29,4 @@ export class NodeModel {
|
|
|
48
29
|
this.flow = flow;
|
|
49
30
|
}
|
|
50
31
|
}
|
|
51
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC12Zmxvdy1saWIvc3JjL2xpYi92Zmxvdy9tb2RlbHMvbm9kZS5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUdoRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFBO0FBR3pELE1BQU0sT0FBTyxTQUFTO0lBd0JwQixZQUNTLElBQWE7UUFBYixTQUFJLEdBQUosSUFBSSxDQUFTO1FBeEJmLFVBQUssR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBRTlCLFdBQU0sR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBRWpDLFNBQUksR0FBRyxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBRXRDLG1CQUFjLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLGFBQWEsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUV6RiwyREFBMkQ7UUFDcEQsbUJBQWMsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUNuRSxtQkFBYyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBRW5FLFlBQU8sR0FBRyxNQUFNLENBQWdCLEVBQUUsQ0FBQyxDQUFBO1FBRW5DLGFBQVEsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBRXJDLGNBQVMsR0FBRyxJQUFJLENBQUE7UUFFdkIscUNBQXFDO1FBQ3JCLGlCQUFZLEdBQUcsRUFBRSxDQUFBO1FBTy9CLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUUxQixJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO1lBQUUsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFBO0lBQ2hFLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksUUFBUSxDQUFDLElBQWU7UUFDN0IsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUE7SUFDbEIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29tcHV0ZWQsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBOb2RlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9ub2RlLmludGVyZmFjZSdcbmltcG9ydCB7IEZsb3dNb2RlbCB9IGZyb20gJy4vZmxvdy5tb2RlbCdcbmltcG9ydCB7IGlzRGVmaW5lZCB9IGZyb20gJy4uL3V0aWxzL2lzLWRlZmluZWQnXG5pbXBvcnQgeyB0b09ic2VydmFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCdcbmltcG9ydCB7IEhhbmRsZU1vZGVsIH0gZnJvbSAnLi9oYW5kbGUubW9kZWwnXG5cbmV4cG9ydCBjbGFzcyBOb2RlTW9kZWw8VCA9IHVua25vd24+IHtcbiAgcHVibGljIHBvaW50ID0gc2lnbmFsKHsgeDogMCwgeTogMCB9KVxuXG4gIHB1YmxpYyBwb2ludCQgPSB0b09ic2VydmFibGUodGhpcy5wb2ludClcblxuICBwdWJsaWMgc2l6ZSA9IHNpZ25hbCh7IHdpZHRoOiAwLCBoZWlnaHQ6IDAgfSlcblxuICBwdWJsaWMgcG9pbnRUcmFuc2Zvcm0gPSBjb21wdXRlZCgoKSA9PiBgdHJhbnNsYXRlKCR7dGhpcy5wb2ludCgpLnh9LCAke3RoaXMucG9pbnQoKS55fSlgKVxuXG4gIC8vIE5vdyBzb3VyY2UgYW5kIGhhbmRsZSBwb3NpdGlvbnMgZGVyaXZlZCBmcm9tIHBhcmVudCBmbG93XG4gIHB1YmxpYyBzb3VyY2VQb3NpdGlvbiA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZmxvdy5oYW5kbGVQb3NpdGlvbnMoKS5zb3VyY2UpXG4gIHB1YmxpYyB0YXJnZXRQb3NpdGlvbiA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZmxvdy5oYW5kbGVQb3NpdGlvbnMoKS50YXJnZXQpXG5cbiAgcHVibGljIGhhbmRsZXMgPSBzaWduYWw8SGFuZGxlTW9kZWxbXT4oW10pXG5cbiAgcHVibGljIGhhbmRsZXMkID0gdG9PYnNlcnZhYmxlKHRoaXMuaGFuZGxlcylcblxuICBwdWJsaWMgZHJhZ2dhYmxlID0gdHJ1ZVxuXG4gIC8vIGRpc2FibGVkIGZvciBjb25maWd1cmF0aW9uIGZvciBub3dcbiAgcHVibGljIHJlYWRvbmx5IG1hZ25ldFJhZGl1cyA9IDIwXG5cbiAgcHJpdmF0ZSBmbG93ITogRmxvd01vZGVsXG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIG5vZGU6IE5vZGU8VD5cbiAgKSB7XG4gICAgdGhpcy5wb2ludC5zZXQobm9kZS5wb2ludClcblxuICAgIGlmIChpc0RlZmluZWQobm9kZS5kcmFnZ2FibGUpKSB0aGlzLmRyYWdnYWJsZSA9IG5vZGUuZHJhZ2dhYmxlXG4gIH1cblxuICAvKipcbiAgICogQmluZCBwYXJlbnQgZmxvdyBtb2RlbCB0byBub2RlXG4gICAqXG4gICAqIEBwYXJhbSBmbG93IHBhcmVudCBmbG93XG4gICAqL1xuICBwdWJsaWMgYmluZEZsb3coZmxvdzogRmxvd01vZGVsKSB7XG4gICAgdGhpcy5mbG93ID0gZmxvd1xuICB9XG59XG4iXX0=
|
|
@@ -1,18 +1,25 @@
|
|
|
1
1
|
import { Injectable, computed, inject, untracked } from '@angular/core';
|
|
2
2
|
import { FlowEntitiesService } from './flow-entities.service';
|
|
3
|
-
import { asyncScheduler, filter, map, merge, observeOn, pairwise } from 'rxjs';
|
|
3
|
+
import { asyncScheduler, distinctUntilChanged, filter, map, merge, observeOn, pairwise, skip, switchMap, zip } from 'rxjs';
|
|
4
4
|
import { toObservable } from '@angular/core/rxjs-interop';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
|
+
const haveSameContents = (a, b) => a.length === b.length &&
|
|
7
|
+
[...new Set([...a, ...b])].every(v => a.filter(e => e === v).length === b.filter(e => e === v).length);
|
|
6
8
|
export class EdgeChangesService {
|
|
7
9
|
constructor() {
|
|
8
10
|
this.entitiesService = inject(FlowEntitiesService);
|
|
9
|
-
this.edgeDetachedChange$ = toObservable(computed(() => {
|
|
11
|
+
this.edgeDetachedChange$ = merge(toObservable(computed(() => {
|
|
10
12
|
const nodes = this.entitiesService.nodes();
|
|
11
13
|
const edges = untracked(this.entitiesService.edges);
|
|
12
|
-
return edges.filter(({ source, target }) => !nodes.includes(source) || !nodes.includes(target));
|
|
13
|
-
})).pipe(
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
return edges.filter(({ source, target }) => !nodes.includes(source()) || !nodes.includes(target()));
|
|
15
|
+
})), toObservable(this.entitiesService.edges).pipe(switchMap((edges) => {
|
|
16
|
+
return zip(...edges.map(e => e.detached$.pipe(map(() => e))));
|
|
17
|
+
}), map((edges) => edges.filter(e => e.detached())),
|
|
18
|
+
// TODO check why there are 2 emits
|
|
19
|
+
skip(2))).pipe(
|
|
20
|
+
// here we check if 2 approaches to detect detached edges emits same
|
|
21
|
+
// and same values (this may happen on node delete)
|
|
22
|
+
distinctUntilChanged(haveSameContents), filter(edges => !!edges.length), map((edges) => edges.map(({ edge }) => ({ type: 'detached', id: edge.id }))));
|
|
16
23
|
this.edgeAddChange$ = toObservable(this.entitiesService.edges)
|
|
17
24
|
.pipe(pairwise(), map(([oldList, newList]) => {
|
|
18
25
|
return newList.filter(edge => !oldList.includes(edge));
|
|
@@ -35,4 +42,4 @@ export class EdgeChangesService {
|
|
|
35
42
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EdgeChangesService, decorators: [{
|
|
36
43
|
type: Injectable
|
|
37
44
|
}] });
|
|
38
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRnZS1jaGFuZ2VzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmZsb3ctbGliL3NyYy9saWIvdmZsb3cvc2VydmljZXMvZWRnZS1jaGFuZ2VzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQWMsY0FBYyxFQUFpQixvQkFBb0IsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQU8sR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNKLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7QUFHMUQsTUFBTSxnQkFBZ0IsR0FBRyxDQUFJLENBQU0sRUFBRSxDQUFNLEVBQUUsRUFBRSxDQUM3QyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxNQUFNO0lBQ3JCLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FDOUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FDckUsQ0FBQztBQUdKLE1BQU0sT0FBTyxrQkFBa0I7SUFEL0I7UUFFWSxvQkFBZSxHQUFHLE1BQU0sQ0FBQyxtQkFB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Q0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUN4RCxDQUFDLENBQUMsRUFDRixNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUMvQixHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUNaLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FDM0QsQ0FDaUMsQ0FBQTtRQUV0QixhQUFRLEdBQTZCLEtBQUssQ0FDeEQsSUFBSSxDQUFDLG1CQUFtQixFQUN4QixJQUFJLENBQUMsY0FBYyxFQUNuQixJQUFJLENBQUMsaUJBQWlCLENBQ3ZCO2FBQ0UsSUFBSTtRQUNILHdEQUF3RDtRQUN4RCxnREFBZ0Q7UUFDaEQsK0RBQStEO1FBQy9ELG1DQUFtQztRQUNuQyxTQUFTLENBQUMsY0FBYyxDQUFDLENBQzFCLENBQUE7S0FDSjsrR0F0RVksa0JBQWtCO21IQUFsQixrQkFBa0I7OzRGQUFsQixrQkFBa0I7a0JBRDlCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBjb21wdXRlZCwgaW5qZWN0LCB1bnRyYWNrZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZsb3dFbnRpdGllc1NlcnZpY2UgfSBmcm9tICcuL2Zsb3ctZW50aXRpZXMuc2VydmljZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBhc3luY1NjaGVkdWxlciwgY29tYmluZUxhdGVzdCwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgbWFwLCBtZXJnZSwgb2JzZXJ2ZU9uLCBwYWlyd2lzZSwgc2tpcCwgc3dpdGNoTWFwLCB0YXAsIHppcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdG9PYnNlcnZhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgRWRnZUNoYW5nZSB9IGZyb20gJy4uL3R5cGVzL2VkZ2UtY2hhbmdlLnR5cGUnO1xuXG5jb25zdCBoYXZlU2FtZUNvbnRlbnRzID0gPFQ+KGE6IFRbXSwgYjogVFtdKSA9PlxuICBhLmxlbmd0aCA9PT0gYi5sZW5ndGggJiZcbiAgWy4uLm5ldyBTZXQoWy4uLmEsIC4uLmJdKV0uZXZlcnkoXG4gICAgdiA9PiBhLmZpbHRlcihlID0+IGUgPT09IHYpLmxlbmd0aCA9PT0gYi5maWx0ZXIoZSA9PiBlID09PSB2KS5sZW5ndGhcbiAgKTtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEVkZ2VDaGFuZ2VzU2VydmljZSB7XG4gIHByb3RlY3RlZCBlbnRpdGllc1NlcnZpY2UgPSBpbmplY3QoRmxvd0VudGl0aWVzU2VydmljZSlcblxuICBwcm90ZWN0ZWQgZWRnZURldGFjaGVkQ2hhbmdlJCA9IG1lcmdlKFxuICAgIHRvT2JzZXJ2YWJsZShcbiAgICAgIGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3Qgbm9kZXMgPSB0aGlzLmVudGl0aWVzU2VydmljZS5ub2RlcygpXG4gICAgICAgIGNvbnN0IGVkZ2VzID0gdW50cmFja2VkKHRoaXMuZW50aXRpZXNTZXJ2aWNlLmVkZ2VzKVxuXG4gICAgICAgIHJldHVybiBlZGdlcy5maWx0ZXIoKHsgc291cmNlLCB0YXJnZXQgfSkgPT5cbiAgICAgICAgICAhbm9kZXMuaW5jbHVkZXMoc291cmNlKCkhKSB8fCAhbm9kZXMuaW5jbHVkZXModGFyZ2V0KCkhKVxuICAgICAgICApXG4gICAgICB9KVxuICAgICksXG4gICAgdG9PYnNlcnZhYmxlKHRoaXMuZW50aXRpZXNTZXJ2aWNlLmVkZ2VzKS5waXBlKFxuICAgICAgc3dpdGNoTWFwKChlZGdlcykgPT4ge1xuICAgICAgICByZXR1cm4gemlwKFxuICAgICAgICAgIC4uLmVkZ2VzLm1hcChlID0+IGUuZGV0YWNoZWQkLnBpcGUobWFwKCgpID0+IGUpKSlcbiAgICAgICAgKVxuICAgICAgfSksXG4gICAgICBtYXAoKGVkZ2VzKSA9PiBlZGdlcy5maWx0ZXIoZSA9PiBlLmRldGFjaGVkKCkpKSxcbiAgICAgIC8vIFRPRE8gY2hlY2sgd2h5IHRoZXJlIGFyZSAyIGVtaXRzXG4gICAgICBza2lwKDIpLFxuICAgIClcbiAgKS5waXBlKFxuICAgIC8vIGhlcmUgd2UgY2hlY2sgaWYgMiBhcHByb2FjaGVzIHRvIGRldGVjdCBkZXRhY2hlZCBlZGdlcyBlbWl0cyBzYW1lXG4gICAgLy8gYW5kIHNhbWUgdmFsdWVzICh0aGlzIG1heSBoYXBwZW4gb24gbm9kZSBkZWxldGUpXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoaGF2ZVNhbWVDb250ZW50cyksXG4gICAgZmlsdGVyKGVkZ2VzID0+ICEhZWRnZXMubGVuZ3RoKSxcbiAgICBtYXAoKGVkZ2VzKSA9PlxuICAgICAgZWRnZXMubWFwKCh7IGVkZ2UgfSkgPT4gKHsgdHlwZTogJ2RldGFjaGVkJywgaWQ6IGVkZ2UuaWQgfSkpXG4gICAgKVxuICApIHNhdGlzZmllcyBPYnNlcnZhYmxlPEVkZ2VDaGFuZ2VbXT5cblxuICBwcm90ZWN0ZWQgZWRnZUFkZENoYW5nZSQgPSB0b09ic2VydmFibGUodGhpcy5lbnRpdGllc1NlcnZpY2UuZWRnZXMpXG4gICAgLnBpcGUoXG4gICAgICBwYWlyd2lzZSgpLFxuICAgICAgbWFwKChbb2xkTGlzdCwgbmV3TGlzdF0pID0+IHtcbiAgICAgICAgcmV0dXJuIG5ld0xpc3QuZmlsdGVyKGVkZ2UgPT4gIW9sZExpc3QuaW5jbHVkZXMoZWRnZSkpXG4gICAgICB9KSxcbiAgICAgIGZpbHRlcihlZGdlcyA9PiAhIWVkZ2VzLmxlbmd0aCksXG4gICAgICBtYXAoKGVkZ2VzKSA9PlxuICAgICAgICBlZGdlcy5tYXAoKHsgZWRnZSB9KSA9PiAoeyB0eXBlOiAnYWRkJywgaWQ6IGVkZ2UuaWQgfSkpXG4gICAgICApXG4gICAgKSBzYXRpc2ZpZXMgT2JzZXJ2YWJsZTxFZGdlQ2hhbmdlW10+XG5cbiAgcHJvdGVjdGVkIGVkZ2VSZW1vdmVDaGFuZ2UkID0gdG9PYnNlcnZhYmxlKHRoaXMuZW50aXRpZXNTZXJ2aWNlLmVkZ2VzKVxuICAgIC5waXBlKFxuICAgICAgcGFpcndpc2UoKSxcbiAgICAgIG1hcCgoW29sZExpc3QsIG5ld0xpc3RdKSA9PiB7XG4gICAgICAgIHJldHVybiBvbGRMaXN0LmZpbHRlcihlZGdlID0+ICFuZXdMaXN0LmluY2x1ZGVzKGVkZ2UpKVxuICAgICAgfSksXG4gICAgICBmaWx0ZXIoZWRnZXMgPT4gISFlZGdlcy5sZW5ndGgpLFxuICAgICAgbWFwKChlZGdlcykgPT5cbiAgICAgICAgZWRnZXMubWFwKCh7IGVkZ2UgfSkgPT4gKHsgdHlwZTogJ3JlbW92ZScsIGlkOiBlZGdlLmlkIH0pKVxuICAgICAgKVxuICAgICkgc2F0aXNmaWVzIE9ic2VydmFibGU8RWRnZUNoYW5nZVtdPlxuXG4gIHB1YmxpYyByZWFkb25seSBjaGFuZ2VzJDogT2JzZXJ2YWJsZTxFZGdlQ2hhbmdlW10+ID0gbWVyZ2UoXG4gICAgdGhpcy5lZGdlRGV0YWNoZWRDaGFuZ2UkLFxuICAgIHRoaXMuZWRnZUFkZENoYW5nZSQsXG4gICAgdGhpcy5lZGdlUmVtb3ZlQ2hhbmdlJFxuICApXG4gICAgLnBpcGUoXG4gICAgICAvLyB0aGlzIGZpeGVzIHRoZSBjYXNlIHdoZW4gdXNlciBnZXRzICdkZXRlY2hlZCcgY2hhbmdlc1xuICAgICAgLy8gYW5kIHRyaWVzIHRvIGRlbGV0ZSB0aGVzZSBlZGdlcyBpbnNpZGUgc3RyZWFtXG4gICAgICAvLyBhbmd1bGFyIG1heSBpZ25vcmUgdGhpcyBjaGFuZ2UgYmVjYXVzZSBbZWRnZXNdIGlucHV0IGNoYW5nZWRcbiAgICAgIC8vIHJpZ2h0IGFmdGVyIFtub2Rlc10gaW5wdXQgY2hhbmdlXG4gICAgICBvYnNlcnZlT24oYXN5bmNTY2hlZHVsZXIpLFxuICAgIClcbn1cbiJdfQ==
|
|
@@ -34,16 +34,19 @@ export class FlowEntitiesService {
|
|
|
34
34
|
});
|
|
35
35
|
this.validEdges = computed(() => {
|
|
36
36
|
const nodes = this.nodes();
|
|
37
|
-
return this.edges().filter(e => nodes.includes(e.source) && nodes.includes(e.target));
|
|
37
|
+
return this.edges().filter(e => nodes.includes(e.source()) && nodes.includes(e.target()));
|
|
38
38
|
});
|
|
39
39
|
}
|
|
40
40
|
getNode(id) {
|
|
41
41
|
return this.nodes().find(({ node }) => node.id === id);
|
|
42
42
|
}
|
|
43
|
+
getDetachedEdges() {
|
|
44
|
+
return this.edges().filter(e => e.detached());
|
|
45
|
+
}
|
|
43
46
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FlowEntitiesService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
44
47
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FlowEntitiesService }); }
|
|
45
48
|
}
|
|
46
49
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FlowEntitiesService, decorators: [{
|
|
47
50
|
type: Injectable
|
|
48
51
|
}] });
|
|
49
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvdy1lbnRpdGllcy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L3NlcnZpY2VzL2Zsb3ctZW50aXRpZXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBVSxNQUFNLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFHaEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTdELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBR3pDLE1BQU0sT0FBTyxtQkFBbUI7SUFEaEM7UUFFa0IsVUFBSyxHQUFHLE1BQU0sQ0FBYyxFQUFFLEVBQUU7WUFDOUMsK0RBQStEO1lBQy9ELEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7U0FDekQsQ0FBQyxDQUFBO1FBRWMsVUFBSyxHQUFHLE1BQU0sQ0FBYyxFQUFFLEVBQUU7WUFDOUMsK0RBQStEO1lBQy9ELEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7U0FDekQsQ0FBQyxDQUFBO1FBRWMsZUFBVSxHQUFHLE1BQU0sQ0FBa0IsSUFBSSxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtRQUU3RCxZQUFPLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUN0QyxNQUFNLFVBQVUsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQTtZQUU1QyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUM1QixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRTtvQkFDekIsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtvQkFDM0QsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUE7aUJBQzNDO2dCQUVELElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFO29CQUN2QixNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO29CQUN6RCxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQTtpQkFDekM7WUFDSCxDQUFDLENBQUMsQ0FBQTtZQUVGLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUE7WUFDNUQsSUFBSSxnQkFBZ0IsRUFBRTtnQkFDcEIsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFBO2dCQUN2RCxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxDQUFBO2FBQ3ZDO1lBRUQsT0FBTyxVQUFVLENBQUE7UUFDbkIsQ0FBQyxDQUFDLENBQUE7UUFFYyxlQUFVLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUN6QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUE7WUFFMUIsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUcsQ0FBQyxDQUFDLENBQUE7UUFDN0YsQ0FBQyxDQUFDLENBQUE7S0FTSDtJQVBRLE9BQU8sQ0FBSSxFQUFVO1FBQzFCLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUE2QixDQUFBO0lBQ3BGLENBQUM7SUFFTSxnQkFBZ0I7UUFDckIsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUE7SUFDL0MsQ0FBQzsrR0FqRFUsbUJBQW1CO21IQUFuQixtQkFBbUI7OzRGQUFuQixtQkFBbUI7a0JBRC9CLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBjb21wdXRlZCwgZWZmZWN0LCBzaWduYWwsIHVudHJhY2tlZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTm9kZU1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL25vZGUubW9kZWwnO1xuaW1wb3J0IHsgRWRnZU1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL2VkZ2UubW9kZWwnO1xuaW1wb3J0IHsgQ29ubmVjdGlvbk1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL2Nvbm5lY3Rpb24ubW9kZWwnO1xuaW1wb3J0IHsgTWFya2VyIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9tYXJrZXIuaW50ZXJmYWNlJztcbmltcG9ydCB7IGhhc2hDb2RlIH0gZnJvbSAnLi4vdXRpbHMvaGFzaCc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBGbG93RW50aXRpZXNTZXJ2aWNlIHtcbiAgcHVibGljIHJlYWRvbmx5IG5vZGVzID0gc2lnbmFsPE5vZGVNb2RlbFtdPihbXSwge1xuICAgIC8vIGVtcHR5IGFycmF5cyBjb25zaWRlcmVkIGVxdWFsLCBvdGhlciBhcnJheXMgbWF5IG5vdCBiZSBlcXVhbFxuICAgIGVxdWFsOiAoYSwgYikgPT4gIWEubGVuZ3RoICYmICFiLmxlbmd0aCA/IHRydWUgOiBhID09PSBiXG4gIH0pXG5cbiAgcHVibGljIHJlYWRvbmx5IGVkZ2VzID0gc2lnbmFsPEVkZ2VNb2RlbFtdPihbXSwge1xuICAgIC8vIGVtcHR5IGFycmF5cyBjb25zaWRlcmVkIGVxdWFsLCBvdGhlciBhcnJheXMgbWF5IG5vdCBiZSBlcXVhbFxuICAgIGVxdWFsOiAoYSwgYikgPT4gIWEubGVuZ3RoICYmICFiLmxlbmd0aCA/IHRydWUgOiBhID09PSBiXG4gIH0pXG5cbiAgcHVibGljIHJlYWRvbmx5IGNvbm5lY3Rpb24gPSBzaWduYWw8Q29ubmVjdGlvbk1vZGVsPihuZXcgQ29ubmVjdGlvbk1vZGVsKHt9KSlcblxuICBwdWJsaWMgcmVhZG9ubHkgbWFya2VycyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBtYXJrZXJzTWFwID0gbmV3IE1hcDxudW1iZXIsIE1hcmtlcj4oKVxuXG4gICAgdGhpcy52YWxpZEVkZ2VzKCkuZm9yRWFjaChlID0+IHtcbiAgICAgIGlmIChlLmVkZ2UubWFya2Vycz8uc3RhcnQpIHtcbiAgICAgICAgY29uc3QgaGFzaCA9IGhhc2hDb2RlKEpTT04uc3RyaW5naWZ5KGUuZWRnZS5tYXJrZXJzLnN0YXJ0KSlcbiAgICAgICAgbWFya2Vyc01hcC5zZXQoaGFzaCwgZS5lZGdlLm1hcmtlcnMuc3RhcnQpXG4gICAgICB9XG5cbiAgICAgIGlmIChlLmVkZ2UubWFya2Vycz8uZW5kKSB7XG4gICAgICAgIGNvbnN0IGhhc2ggPSBoYXNoQ29kZShKU09OLnN0cmluZ2lmeShlLmVkZ2UubWFya2Vycy5lbmQpKVxuICAgICAgICBtYXJrZXJzTWFwLnNldChoYXNoLCBlLmVkZ2UubWFya2Vycy5lbmQpXG4gICAgICB9XG4gICAgfSlcblxuICAgIGNvbnN0IGNvbm5lY3Rpb25NYXJrZXIgPSB0aGlzLmNvbm5lY3Rpb24oKS5jb25uZWN0aW9uLm1hcmtlclxuICAgIGlmIChjb25uZWN0aW9uTWFya2VyKSB7XG4gICAgICBjb25zdCBoYXNoID0gaGFzaENvZGUoSlNPTi5zdHJpbmdpZnkoY29ubmVjdGlvbk1hcmtlcikpXG4gICAgICBtYXJrZXJzTWFwLnNldChoYXNoLCBjb25uZWN0aW9uTWFya2VyKVxuICAgIH1cblxuICAgIHJldHVybiBtYXJrZXJzTWFwXG4gIH0pXG5cbiAgcHVibGljIHJlYWRvbmx5IHZhbGlkRWRnZXMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLm5vZGVzKClcblxuICAgIHJldHVybiB0aGlzLmVkZ2VzKCkuZmlsdGVyKGUgPT4gbm9kZXMuaW5jbHVkZXMoZS5zb3VyY2UoKSEpICYmIG5vZGVzLmluY2x1ZGVzKGUudGFyZ2V0KCkhKSlcbiAgfSlcblxuICBwdWJsaWMgZ2V0Tm9kZTxUPihpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMubm9kZXMoKS5maW5kKCh7IG5vZGUgfSkgPT4gbm9kZS5pZCA9PT0gaWQpIGFzIE5vZGVNb2RlbDxUPiB8IHVuZGVmaW5lZFxuICB9XG5cbiAgcHVibGljIGdldERldGFjaGVkRWRnZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZWRnZXMoKS5maWx0ZXIoZSA9PiBlLmRldGFjaGVkKCkpXG4gIH1cbn1cbiJdfQ==
|
|
@@ -2,13 +2,19 @@ import { Injectable, signal } from '@angular/core';
|
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
3
|
export class HandleService {
|
|
4
4
|
constructor() {
|
|
5
|
-
this.
|
|
5
|
+
this.node = signal(null);
|
|
6
6
|
}
|
|
7
7
|
createHandle(newHandle) {
|
|
8
|
-
this.
|
|
8
|
+
const node = this.node();
|
|
9
|
+
if (node) {
|
|
10
|
+
node.handles.update(handles => [...handles, newHandle]);
|
|
11
|
+
}
|
|
9
12
|
}
|
|
10
13
|
destroyHandle(handleToDestoy) {
|
|
11
|
-
|
|
14
|
+
const node = this.node();
|
|
15
|
+
if (node) {
|
|
16
|
+
node.handles.update(handles => handles.filter(handle => handle !== handleToDestoy));
|
|
17
|
+
}
|
|
12
18
|
}
|
|
13
19
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: HandleService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
14
20
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: HandleService }); }
|
|
@@ -16,4 +22,4 @@ export class HandleService {
|
|
|
16
22
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: HandleService, decorators: [{
|
|
17
23
|
type: Injectable
|
|
18
24
|
}] });
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmZsb3ctbGliL3NyYy9saWIvdmZsb3cvc2VydmljZXMvaGFuZGxlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBdUIsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQWlCeEUsTUFBTSxPQUFPLGFBQWE7SUFEMUI7UUFFa0IsU0FBSSxHQUFHLE1BQU0sQ0FBbUIsSUFBSSxDQUFDLENBQUE7S0FpQnREO0lBZlEsWUFBWSxDQUFDLFNBQXNCO1FBQ3hDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQTtRQUN4QixJQUFJLElBQUksRUFBRTtZQUNSLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFBO1NBQ3hEO0lBQ0gsQ0FBQztJQUVNLGFBQWEsQ0FBQyxjQUEyQjtRQUM5QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUE7UUFDeEIsSUFBSSxJQUFJLEVBQUU7WUFDUixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FDakIsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxLQUFLLGNBQWMsQ0FBQyxDQUMvRCxDQUFBO1NBQ0Y7SUFDSCxDQUFDOytHQWpCVSxhQUFhO21IQUFiLGFBQWE7OzRGQUFiLGFBQWE7a0JBRHpCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBTaWduYWwsIFRlbXBsYXRlUmVmLCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBvc2l0aW9uIH0gZnJvbSAnLi4vdHlwZXMvcG9zaXRpb24udHlwZSc7XG5pbXBvcnQgeyBIYW5kbGVUeXBlIH0gZnJvbSAnLi4vdHlwZXMvaGFuZGxlLXR5cGUudHlwZSc7XG5pbXBvcnQgeyBQb2ludCB9IGZyb20gJy4uL2ludGVyZmFjZXMvcG9pbnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IE5vZGVNb2RlbCB9IGZyb20gJy4uL21vZGVscy9ub2RlLm1vZGVsJztcbmltcG9ydCB7IEhhbmRsZU1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL2hhbmRsZS5tb2RlbCc7XG5pbXBvcnQgeyBNaWNyb3Rhc2sgfSBmcm9tICcuLi9kZWNvcmF0b3JzL21pY3JvdGFzay5kZWNvcmF0b3InO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5vZGVIYW5kbGUge1xuICBwb3NpdGlvbjogUG9zaXRpb25cbiAgdHlwZTogSGFuZGxlVHlwZVxuICBpZD86IHN0cmluZ1xuICBwYXJlbnRSZWZlcmVuY2U/OiBIVE1MRWxlbWVudFxuICB0ZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT5cbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEhhbmRsZVNlcnZpY2Uge1xuICBwdWJsaWMgcmVhZG9ubHkgbm9kZSA9IHNpZ25hbDxOb2RlTW9kZWwgfCBudWxsPihudWxsKVxuXG4gIHB1YmxpYyBjcmVhdGVIYW5kbGUobmV3SGFuZGxlOiBIYW5kbGVNb2RlbCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLm5vZGUoKVxuICAgIGlmIChub2RlKSB7XG4gICAgICBub2RlLmhhbmRsZXMudXBkYXRlKGhhbmRsZXMgPT4gWy4uLmhhbmRsZXMsIG5ld0hhbmRsZV0pXG4gICAgfVxuICB9XG5cbiAgcHVibGljIGRlc3Ryb3lIYW5kbGUoaGFuZGxlVG9EZXN0b3k6IEhhbmRsZU1vZGVsKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMubm9kZSgpXG4gICAgaWYgKG5vZGUpIHtcbiAgICAgIG5vZGUuaGFuZGxlcy51cGRhdGUoXG4gICAgICAgIGhhbmRsZXMgPT4gaGFuZGxlcy5maWx0ZXIoaGFuZGxlID0+IGhhbmRsZSAhPT0gaGFuZGxlVG9EZXN0b3kpXG4gICAgICApXG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Injectable, inject } from '@angular/core';
|
|
2
2
|
import { FlowEntitiesService } from './flow-entities.service';
|
|
3
3
|
import { toObservable } from '@angular/core/rxjs-interop';
|
|
4
|
-
import { filter, map, merge, pairwise, skip, switchMap } from 'rxjs';
|
|
4
|
+
import { asyncScheduler, filter, map, merge, observeOn, pairwise, skip, switchMap } from 'rxjs';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
6
|
export class NodesChangeService {
|
|
7
7
|
constructor() {
|
|
@@ -21,7 +21,10 @@ export class NodesChangeService {
|
|
|
21
21
|
.pipe(pairwise(), map(([oldList, newList]) => newList.filter(node => !oldList.includes(node))), filter((nodes) => !!nodes.length), map((nodes) => nodes.map(node => ({ type: 'add', id: node.node.id }))));
|
|
22
22
|
this.nodeRemoveChange$ = toObservable(this.entitiesService.nodes)
|
|
23
23
|
.pipe(pairwise(), map(([oldList, newList]) => oldList.filter(node => !newList.includes(node))), filter((nodes) => !!nodes.length), map((nodes) => nodes.map(node => ({ type: 'remove', id: node.node.id }))));
|
|
24
|
-
this.changes$ = merge(this.nodesPositionChange$, this.nodeAddChange$, this.nodeRemoveChange$)
|
|
24
|
+
this.changes$ = merge(this.nodesPositionChange$, this.nodeAddChange$, this.nodeRemoveChange$).pipe(
|
|
25
|
+
// this fixes a bug when on fire node event change,
|
|
26
|
+
// you can't get valid list of detached edges
|
|
27
|
+
observeOn(asyncScheduler));
|
|
25
28
|
}
|
|
26
29
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NodesChangeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
27
30
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NodesChangeService }); }
|
|
@@ -29,4 +32,4 @@ export class NodesChangeService {
|
|
|
29
32
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NodesChangeService, decorators: [{
|
|
30
33
|
type: Injectable
|
|
31
34
|
}] });
|
|
32
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1jaGFuZ2VzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmZsb3ctbGliL3NyYy9saWIvdmZsb3cvc2VydmljZXMvbm9kZS1jaGFuZ2VzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFlBQVksRUFBWSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBYyxjQUFjLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFNLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUloSCxNQUFNLE9BQU8sa0JBQWtCO0lBRC9CO1FBRVksb0JBQWUsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQTtRQUU3Qyx5QkFBb0IsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUM7YUFDdEUsSUFBSTtRQUNILDZGQUE2RjtRQUM3RixTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUNsQixLQUFLLENBQ0gsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQ2xCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSTtRQUNkLG9DQUFvQztRQUNwQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1AsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUNoQixDQUNGLENBQ0YsQ0FDRjtRQUNELGtFQUFrRTtRQUNsRSxtQ0FBbUM7UUFDbkMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDakIsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsV0FBVyxDQUFDLEtBQUssRUFBRSxFQUFFO1NBQzFFLENBQUMsQ0FDZ0MsQ0FBQTtRQUU1QixtQkFBYyxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQzthQUNoRSxJQUFJLENBQ0gsUUFBUSxFQUFFLEVBQ1YsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUN6QixPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQ2hELEVBQ0QsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUNqQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUNaLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQ3ZELENBQ2lDLENBQUE7UUFFNUIsc0JBQWlCLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDO2FBQ25FLElBQUksQ0FDSCxRQUFRLEVBQUUsRUFDVixHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFLENBQ3pCLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FDaEQsRUFDRCxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQ2pDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQ1osS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FDMUQsQ0FDaUMsQ0FBQTtRQUV0QixhQUFRLEdBQTZCLEtBQUssQ0FDeEQsSUFBSSxDQUFDLG9CQUFvQixFQUN6QixJQUFJLENBQUMsY0FBYyxFQUNuQixJQUFJLENBQUMsaUJBQWlCLENBQ3ZCLENBQUMsSUFBSTtRQUNKLG1EQUFtRDtRQUNuRCw2Q0FBNkM7UUFDN0MsU0FBUyxDQUFDLGNBQWMsQ0FBQyxDQUMxQixDQUFBO0tBQ0Y7K0dBekRZLGtCQUFrQjttSEFBbEIsa0JBQWtCOzs0RkFBbEIsa0JBQWtCO2tCQUQ5QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgU2lnbmFsLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZsb3dFbnRpdGllc1NlcnZpY2UgfSBmcm9tICcuL2Zsb3ctZW50aXRpZXMuc2VydmljZSc7XG5pbXBvcnQgeyB0b09ic2VydmFibGUsIHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgYXN5bmNTY2hlZHVsZXIsIGZpbHRlciwgbWFwLCBtZXJnZSwgb2JzZXJ2ZU9uLCBvZiwgcGFpcndpc2UsIHNraXAsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTm9kZUNoYW5nZSB9IGZyb20gJy4uL3R5cGVzL25vZGUtY2hhbmdlLnR5cGUnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTm9kZXNDaGFuZ2VTZXJ2aWNlIHtcbiAgcHJvdGVjdGVkIGVudGl0aWVzU2VydmljZSA9IGluamVjdChGbG93RW50aXRpZXNTZXJ2aWNlKVxuXG4gIHByb3RlY3RlZCBub2Rlc1Bvc2l0aW9uQ2hhbmdlJCA9IHRvT2JzZXJ2YWJsZSh0aGlzLmVudGl0aWVzU2VydmljZS5ub2RlcylcbiAgICAucGlwZShcbiAgICAgIC8vIENoZWNrIGZvciBub2RlcyBsaXN0IGNoYW5nZSBhbmQgd2F0Y2ggZm9yIHNwZWNpZmljIG5vZGUgZnJvbSB0aGlzIGxpc3QgY2hhbmdlIGl0cyBwb3NpdGlvblxuICAgICAgc3dpdGNoTWFwKChub2RlcykgPT5cbiAgICAgICAgbWVyZ2UoXG4gICAgICAgICAgLi4ubm9kZXMubWFwKG5vZGUgPT5cbiAgICAgICAgICAgIG5vZGUucG9pbnQkLnBpcGUoXG4gICAgICAgICAgICAgIC8vIHNraXAgaW5pdGlhbCBwb3NpdGlvbiBmcm9tIHNpZ25hbFxuICAgICAgICAgICAgICBza2lwKDEpLFxuICAgICAgICAgICAgICBtYXAoKCkgPT4gbm9kZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICksXG4gICAgICAvLyBGb3Igbm93IGl0J3MgYSBzaW5nbGUgbm9kZSwgbGF0ZXIgdGhpcyBsaXN0IHdpbGwgYWxzbyBiZSBmaWxsZWRcbiAgICAgIC8vIHdpdGggY2hpbGQgbm9kZSBwb3NpdGlvbiBjaGFuZ2VzXG4gICAgICBtYXAoY2hhbmdlZE5vZGUgPT4gW1xuICAgICAgICB7IHR5cGU6ICdwb3NpdGlvbicsIGlkOiBjaGFuZ2VkTm9kZS5ub2RlLmlkLCBwb2ludDogY2hhbmdlZE5vZGUucG9pbnQoKSB9XG4gICAgICBdKVxuICAgICkgc2F0aXNmaWVzIE9ic2VydmFibGU8Tm9kZUNoYW5nZVtdPlxuXG4gIHByb3RlY3RlZCBub2RlQWRkQ2hhbmdlJCA9IHRvT2JzZXJ2YWJsZSh0aGlzLmVudGl0aWVzU2VydmljZS5ub2RlcylcbiAgICAucGlwZShcbiAgICAgIHBhaXJ3aXNlKCksXG4gICAgICBtYXAoKFtvbGRMaXN0LCBuZXdMaXN0XSkgPT5cbiAgICAgICAgbmV3TGlzdC5maWx0ZXIobm9kZSA9PiAhb2xkTGlzdC5pbmNsdWRlcyhub2RlKSlcbiAgICAgICksXG4gICAgICBmaWx0ZXIoKG5vZGVzKSA9PiAhIW5vZGVzLmxlbmd0aCksXG4gICAgICBtYXAoKG5vZGVzKSA9PlxuICAgICAgICBub2Rlcy5tYXAobm9kZSA9PiAoeyB0eXBlOiAnYWRkJywgaWQ6IG5vZGUubm9kZS5pZCB9KSlcbiAgICAgIClcbiAgICApIHNhdGlzZmllcyBPYnNlcnZhYmxlPE5vZGVDaGFuZ2VbXT5cblxuICBwcm90ZWN0ZWQgbm9kZVJlbW92ZUNoYW5nZSQgPSB0b09ic2VydmFibGUodGhpcy5lbnRpdGllc1NlcnZpY2Uubm9kZXMpXG4gICAgLnBpcGUoXG4gICAgICBwYWlyd2lzZSgpLFxuICAgICAgbWFwKChbb2xkTGlzdCwgbmV3TGlzdF0pID0+XG4gICAgICAgIG9sZExpc3QuZmlsdGVyKG5vZGUgPT4gIW5ld0xpc3QuaW5jbHVkZXMobm9kZSkpXG4gICAgICApLFxuICAgICAgZmlsdGVyKChub2RlcykgPT4gISFub2Rlcy5sZW5ndGgpLFxuICAgICAgbWFwKChub2RlcykgPT5cbiAgICAgICAgbm9kZXMubWFwKG5vZGUgPT4gKHsgdHlwZTogJ3JlbW92ZScsIGlkOiBub2RlLm5vZGUuaWQgfSkpXG4gICAgICApXG4gICAgKSBzYXRpc2ZpZXMgT2JzZXJ2YWJsZTxOb2RlQ2hhbmdlW10+XG5cbiAgcHVibGljIHJlYWRvbmx5IGNoYW5nZXMkOiBPYnNlcnZhYmxlPE5vZGVDaGFuZ2VbXT4gPSBtZXJnZShcbiAgICB0aGlzLm5vZGVzUG9zaXRpb25DaGFuZ2UkLFxuICAgIHRoaXMubm9kZUFkZENoYW5nZSQsXG4gICAgdGhpcy5ub2RlUmVtb3ZlQ2hhbmdlJFxuICApLnBpcGUoXG4gICAgLy8gdGhpcyBmaXhlcyBhIGJ1ZyB3aGVuIG9uIGZpcmUgbm9kZSBldmVudCBjaGFuZ2UsXG4gICAgLy8geW91IGNhbid0IGdldCB2YWxpZCBsaXN0IG9mIGRldGFjaGVkIGVkZ2VzXG4gICAgb2JzZXJ2ZU9uKGFzeW5jU2NoZWR1bGVyKSxcbiAgKVxufVxuIl19
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRnZS1jaGFuZ2UudHlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC12Zmxvdy1saWIvc3JjL2xpYi92Zmxvdy90eXBlcy9lZGdlLWNoYW5nZS50eXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSBFZGdlQ2hhbmdlID0gRWRnZURldGFjaGVkQ2hhbmdlIHwgRWRnZUFkZENoYW5nZSB8IEVkZ2VSZW1vdmVDaGFuZ2VcblxuLyoqXG4gKiBAZXhwZXJpbWVudGFsXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWRnZURldGFjaGVkQ2hhbmdlIGV4dGVuZHMgRWRnZUNoYW5nZVNoYXJlZCB7XG4gIHR5cGU6ICdkZXRhY2hlZCdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFZGdlQWRkQ2hhbmdlIGV4dGVuZHMgRWRnZUNoYW5nZVNoYXJlZCB7XG4gIHR5cGU6ICdhZGQnXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRWRnZVJlbW92ZUNoYW5nZSBleHRlbmRzIEVkZ2VDaGFuZ2VTaGFyZWQge1xuICB0eXBlOiAncmVtb3ZlJ1xufVxuXG5pbnRlcmZhY2UgRWRnZUNoYW5nZVNoYXJlZCB7XG4gIGlkOiBzdHJpbmdcbn1cbiJdfQ==
|
|
@@ -4,8 +4,8 @@ export function addNodesToEdges(nodes, edges) {
|
|
|
4
4
|
return acc;
|
|
5
5
|
}, {});
|
|
6
6
|
edges.forEach(e => {
|
|
7
|
-
e.source
|
|
8
|
-
e.target
|
|
7
|
+
e.source.set(nodesById[e.edge.source]);
|
|
8
|
+
e.target.set(nodesById[e.edge.target]);
|
|
9
9
|
});
|
|
10
10
|
}
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLW5vZGVzLXRvLWVkZ2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L3V0aWxzL2FkZC1ub2Rlcy10by1lZGdlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxNQUFNLFVBQVUsZUFBZSxDQUFDLEtBQWtCLEVBQUUsS0FBa0I7SUFDcEUsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUN4QyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUE7UUFFbEIsT0FBTyxHQUFHLENBQUE7SUFDWixDQUFDLEVBQUUsRUFBcUMsQ0FBQyxDQUFBO0lBRXpDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDaEIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQTtRQUN0QyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFBO0lBQ3hDLENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVkZ2VNb2RlbCB9IGZyb20gXCIuLi9tb2RlbHMvZWRnZS5tb2RlbFwiXG5pbXBvcnQgeyBOb2RlTW9kZWwgfSBmcm9tIFwiLi4vbW9kZWxzL25vZGUubW9kZWxcIlxuXG5leHBvcnQgZnVuY3Rpb24gYWRkTm9kZXNUb0VkZ2VzKG5vZGVzOiBOb2RlTW9kZWxbXSwgZWRnZXM6IEVkZ2VNb2RlbFtdKSB7XG4gIGNvbnN0IG5vZGVzQnlJZCA9IG5vZGVzLnJlZHVjZSgoYWNjLCBuKSA9PiB7XG4gICAgYWNjW24ubm9kZS5pZF0gPSBuXG5cbiAgICByZXR1cm4gYWNjXG4gIH0sIHt9IGFzIHsgW25vZGVJZDogc3RyaW5nXTogTm9kZU1vZGVsIH0pXG5cbiAgZWRnZXMuZm9yRWFjaChlID0+IHtcbiAgICBlLnNvdXJjZS5zZXQobm9kZXNCeUlkW2UuZWRnZS5zb3VyY2VdKVxuICAgIGUudGFyZ2V0LnNldChub2Rlc0J5SWRbZS5lZGdlLnRhcmdldF0pXG4gIH0pXG59XG4iXX0=
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Observable } from "rxjs";
|
|
2
|
+
export function resizable(elems, zone) {
|
|
3
|
+
return new Observable((subscriber) => {
|
|
4
|
+
let ro = new ResizeObserver((entries) => {
|
|
5
|
+
zone.run(() => subscriber.next(entries));
|
|
6
|
+
});
|
|
7
|
+
elems.forEach(e => ro.observe(e));
|
|
8
|
+
return () => ro.disconnect();
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXphYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L3V0aWxzL3Jlc2l6YWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWxDLE1BQU0sVUFBVSxTQUFTLENBQUMsS0FBZ0IsRUFBRSxJQUFZO0lBQ3RELE9BQU8sSUFBSSxVQUFVLENBQXdCLENBQUMsVUFBVSxFQUFFLEVBQUU7UUFDMUQsSUFBSSxFQUFFLEdBQUcsSUFBSSxjQUFjLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUN0QyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQTtRQUMxQyxDQUFDLENBQUMsQ0FBQztRQUVILEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFFakMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUE7SUFDOUIsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdab25lIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tIFwicnhqc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVzaXphYmxlKGVsZW1zOiBFbGVtZW50W10sIHpvbmU6IE5nWm9uZSkge1xuICByZXR1cm4gbmV3IE9ic2VydmFibGU8UmVzaXplT2JzZXJ2ZXJFbnRyeVtdPigoc3Vic2NyaWJlcikgPT4ge1xuICAgIGxldCBybyA9IG5ldyBSZXNpemVPYnNlcnZlcigoZW50cmllcykgPT4ge1xuICAgICAgem9uZS5ydW4oKCkgPT4gc3Vic2NyaWJlci5uZXh0KGVudHJpZXMpKVxuICAgIH0pO1xuXG4gICAgZWxlbXMuZm9yRWFjaChlID0+IHJvLm9ic2VydmUoZSkpXG5cbiAgICByZXR1cm4gKCkgPT4gcm8uZGlzY29ubmVjdCgpXG4gIH0pO1xufVxuIl19
|