ngx-vflow 0.15.0 → 1.0.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/README.md +8 -1
- package/esm2022/lib/vflow/components/background/background.component.mjs +75 -8
- package/esm2022/lib/vflow/components/connection/connection.component.mjs +67 -49
- package/esm2022/lib/vflow/components/custom-node-base/custom-node-base.component.mjs +32 -25
- package/esm2022/lib/vflow/components/default-node/default-node.component.mjs +9 -11
- package/esm2022/lib/vflow/components/defs/defs.component.mjs +9 -12
- package/esm2022/lib/vflow/components/edge/edge.component.mjs +21 -24
- package/esm2022/lib/vflow/components/edge-label/edge-label.component.mjs +26 -31
- package/esm2022/lib/vflow/components/node/node.component.mjs +54 -50
- package/esm2022/lib/vflow/components/vflow/vflow.component.mjs +95 -90
- package/esm2022/lib/vflow/decorators/run-in-injection-context.decorator.mjs +1 -1
- package/esm2022/lib/vflow/directives/changes-controller.directive.mjs +41 -125
- package/esm2022/lib/vflow/directives/connection-controller.directive.mjs +16 -16
- package/esm2022/lib/vflow/directives/drag-handle.directive.mjs +7 -6
- package/esm2022/lib/vflow/directives/flow-size-controller.directive.mjs +7 -6
- package/esm2022/lib/vflow/directives/handle-size-controller.directive.mjs +15 -12
- package/esm2022/lib/vflow/directives/map-context.directive.mjs +8 -5
- package/esm2022/lib/vflow/directives/pointer.directive.mjs +18 -19
- package/esm2022/lib/vflow/directives/reference.directive.mjs +6 -5
- package/esm2022/lib/vflow/directives/root-pointer.directive.mjs +8 -5
- package/esm2022/lib/vflow/directives/root-svg-context.directive.mjs +8 -5
- package/esm2022/lib/vflow/directives/selectable.directive.mjs +10 -7
- package/esm2022/lib/vflow/directives/space-point-context.directive.mjs +8 -5
- package/esm2022/lib/vflow/directives/template.directive.mjs +43 -25
- package/esm2022/lib/vflow/interfaces/component-node-event.interface.mjs +1 -1
- package/esm2022/lib/vflow/interfaces/edge.interface.mjs +1 -1
- package/esm2022/lib/vflow/interfaces/node.interface.mjs +1 -1
- package/esm2022/lib/vflow/interfaces/optimization.interface.mjs +1 -1
- package/esm2022/lib/vflow/math/edge-path/bezier-path.mjs +1 -1
- package/esm2022/lib/vflow/math/edge-path/smooth-step-path.mjs +170 -0
- package/esm2022/lib/vflow/models/connection.model.mjs +1 -1
- package/esm2022/lib/vflow/models/edge.model.mjs +6 -1
- package/esm2022/lib/vflow/models/handle.model.mjs +2 -2
- package/esm2022/lib/vflow/models/node.model.mjs +4 -10
- package/esm2022/lib/vflow/models/toolbar.model.mjs +1 -1
- package/esm2022/lib/vflow/public-components/custom-dynamic-node/custom-dynamic-node.component.mjs +16 -10
- package/esm2022/lib/vflow/public-components/custom-node/custom-node.component.mjs +15 -10
- package/esm2022/lib/vflow/public-components/handle/handle.component.mjs +52 -0
- package/esm2022/lib/vflow/public-components/minimap/minimap.component.mjs +42 -45
- package/esm2022/lib/vflow/public-components/node-toolbar/node-toolbar.component.mjs +24 -27
- package/esm2022/lib/vflow/public-components/resizable/resizable.component.mjs +60 -45
- package/esm2022/lib/vflow/services/component-event-bus.service.mjs +3 -3
- package/esm2022/lib/vflow/services/draggable.service.mjs +4 -4
- package/esm2022/lib/vflow/services/edge-changes.service.mjs +3 -3
- package/esm2022/lib/vflow/services/flow-entities.service.mjs +4 -4
- package/esm2022/lib/vflow/services/flow-settings.service.mjs +4 -10
- package/esm2022/lib/vflow/services/flow-status.service.mjs +4 -4
- package/esm2022/lib/vflow/services/handle.service.mjs +4 -4
- package/esm2022/lib/vflow/services/keyboard.service.mjs +5 -5
- package/esm2022/lib/vflow/services/node-accessor.service.mjs +3 -3
- package/esm2022/lib/vflow/services/node-changes.service.mjs +3 -3
- package/esm2022/lib/vflow/services/node-rendering.service.mjs +11 -4
- package/esm2022/lib/vflow/services/overlays.service.mjs +3 -3
- package/esm2022/lib/vflow/services/selection.service.mjs +4 -4
- package/esm2022/lib/vflow/services/viewport.service.mjs +3 -3
- package/esm2022/lib/vflow/types/background.type.mjs +1 -1
- package/esm2022/lib/vflow/utils/adjust-direction.mjs +1 -1
- package/esm2022/lib/vflow/utils/get-os.mjs +1 -1
- package/esm2022/lib/vflow/utils/is-group-node.mjs +4 -0
- package/esm2022/lib/vflow/utils/nodes.mjs +1 -1
- package/esm2022/lib/vflow/vflow.mjs +24 -0
- package/esm2022/public-api.mjs +4 -5
- package/fesm2022/ngx-vflow.mjs +1160 -1005
- package/fesm2022/ngx-vflow.mjs.map +1 -1
- package/lib/vflow/components/background/background.component.d.ts +14 -1
- package/lib/vflow/components/connection/connection.component.d.ts +3 -3
- package/lib/vflow/components/custom-node-base/custom-node-base.component.d.ts +4 -9
- package/lib/vflow/components/default-node/default-node.component.d.ts +2 -2
- package/lib/vflow/components/defs/defs.component.d.ts +2 -2
- package/lib/vflow/components/edge/edge.component.d.ts +7 -7
- package/lib/vflow/components/edge-label/edge-label.component.d.ts +9 -8
- package/lib/vflow/components/node/node.component.d.ts +5 -6
- package/lib/vflow/components/vflow/vflow.component.d.ts +19 -27
- package/lib/vflow/directives/changes-controller.directive.d.ts +29 -30
- package/lib/vflow/directives/connection-controller.directive.d.ts +1 -2
- package/lib/vflow/directives/drag-handle.directive.d.ts +1 -1
- package/lib/vflow/directives/flow-size-controller.directive.d.ts +1 -1
- package/lib/vflow/directives/handle-size-controller.directive.d.ts +2 -2
- package/lib/vflow/directives/map-context.directive.d.ts +1 -1
- package/lib/vflow/directives/pointer.directive.d.ts +9 -6
- package/lib/vflow/directives/reference.directive.d.ts +1 -1
- package/lib/vflow/directives/root-pointer.directive.d.ts +1 -1
- package/lib/vflow/directives/root-svg-context.directive.d.ts +1 -1
- package/lib/vflow/directives/selectable.directive.d.ts +1 -1
- package/lib/vflow/directives/space-point-context.directive.d.ts +1 -1
- package/lib/vflow/directives/template.directive.d.ts +6 -6
- package/lib/vflow/interfaces/component-node-event.interface.d.ts +3 -3
- package/lib/vflow/interfaces/edge.interface.d.ts +1 -1
- package/lib/vflow/interfaces/node.interface.d.ts +14 -14
- package/lib/vflow/interfaces/optimization.interface.d.ts +7 -1
- package/lib/vflow/math/edge-path/smooth-step-path.d.ts +5 -0
- package/lib/vflow/models/edge.model.d.ts +1 -17
- package/lib/vflow/models/handle.model.d.ts +4 -4
- package/lib/vflow/models/node.model.d.ts +2 -5
- package/lib/vflow/public-components/custom-dynamic-node/custom-dynamic-node.component.d.ts +3 -3
- package/lib/vflow/public-components/custom-node/custom-node.component.d.ts +3 -3
- package/lib/vflow/{components → public-components}/handle/handle.component.d.ts +5 -5
- package/lib/vflow/public-components/minimap/minimap.component.d.ts +8 -10
- package/lib/vflow/public-components/node-toolbar/node-toolbar.component.d.ts +6 -5
- package/lib/vflow/public-components/resizable/resizable.component.d.ts +5 -4
- package/lib/vflow/services/flow-settings.service.d.ts +0 -7
- package/lib/vflow/services/node-rendering.service.d.ts +2 -0
- package/lib/vflow/types/background.type.d.ts +24 -1
- package/lib/vflow/utils/is-group-node.d.ts +2 -0
- package/lib/vflow/utils/reference-keeper.d.ts +1 -1
- package/lib/vflow/vflow.d.ts +9 -0
- package/package.json +3 -3
- package/public-api.d.ts +2 -3
- package/esm2022/lib/vflow/components/handle/handle.component.mjs +0 -49
- package/esm2022/lib/vflow/interfaces/handle-positions.interface.mjs +0 -2
- package/esm2022/lib/vflow/vflow.module.mjs +0 -121
- package/lib/vflow/interfaces/handle-positions.interface.d.ts +0 -5
- package/lib/vflow/vflow.module.d.ts +0 -30
package/README.md
CHANGED
|
@@ -10,6 +10,13 @@
|
|
|
10
10
|
npm i ngx-vflow --save
|
|
11
11
|
```
|
|
12
12
|
|
|
13
|
+
## Version Compatibility
|
|
14
|
+
|
|
15
|
+
| ngx-vlow | Angular |
|
|
16
|
+
|----------|-----------|
|
|
17
|
+
| v0.x | v16.2.0+ |
|
|
18
|
+
| v1.x | v17.3.12+ |
|
|
19
|
+
|
|
13
20
|
## Basic Example
|
|
14
21
|
|
|
15
22
|
The following code describes 3 nodes and creates 2 edges between them.
|
|
@@ -19,7 +26,7 @@ The following code describes 3 nodes and creates 2 edges between them.
|
|
|
19
26
|
template: `<vflow [nodes]="nodes" [edges]="edges" />`,
|
|
20
27
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
21
28
|
standalone: true,
|
|
22
|
-
imports: [
|
|
29
|
+
imports: [Vflow]
|
|
23
30
|
})
|
|
24
31
|
export class DefaultEdgesDemoComponent {
|
|
25
32
|
public nodes: Node[] = [
|
|
@@ -3,18 +3,22 @@ import { ViewportService } from '../../services/viewport.service';
|
|
|
3
3
|
import { RootSvgReferenceDirective } from '../../directives/reference.directive';
|
|
4
4
|
import { id } from '../../utils/id';
|
|
5
5
|
import { FlowSettingsService } from '../../services/flow-settings.service';
|
|
6
|
+
import { toObservable, toSignal } from '@angular/core/rxjs-interop';
|
|
7
|
+
import { map, switchMap } from 'rxjs';
|
|
6
8
|
import * as i0 from "@angular/core";
|
|
7
|
-
import * as i1 from "@angular/common";
|
|
8
9
|
const defaultBg = '#fff';
|
|
9
10
|
const defaultGap = 20;
|
|
10
11
|
const defaultDotSize = 2;
|
|
11
12
|
const defaultDotColor = 'rgb(177, 177, 183)';
|
|
13
|
+
const defaultImageScale = 0.1;
|
|
14
|
+
const defaultRepeated = true;
|
|
12
15
|
export class BackgroundComponent {
|
|
13
16
|
constructor() {
|
|
14
17
|
this.viewportService = inject(ViewportService);
|
|
15
18
|
this.rootSvg = inject(RootSvgReferenceDirective).element;
|
|
16
19
|
this.settingsService = inject(FlowSettingsService);
|
|
17
20
|
this.backgroundSignal = this.settingsService.background;
|
|
21
|
+
// DOTS PATTERN
|
|
18
22
|
this.scaledGap = computed(() => {
|
|
19
23
|
const background = this.backgroundSignal();
|
|
20
24
|
if (background.type === 'dots') {
|
|
@@ -25,7 +29,13 @@ export class BackgroundComponent {
|
|
|
25
29
|
});
|
|
26
30
|
this.x = computed(() => this.viewportService.readableViewport().x % this.scaledGap());
|
|
27
31
|
this.y = computed(() => this.viewportService.readableViewport().y % this.scaledGap());
|
|
28
|
-
this.patternColor = computed(() =>
|
|
32
|
+
this.patternColor = computed(() => {
|
|
33
|
+
const bg = this.backgroundSignal();
|
|
34
|
+
if (bg.type === 'dots') {
|
|
35
|
+
return bg.color ?? defaultDotColor;
|
|
36
|
+
}
|
|
37
|
+
return defaultDotColor;
|
|
38
|
+
});
|
|
29
39
|
this.patternSize = computed(() => {
|
|
30
40
|
const background = this.backgroundSignal();
|
|
31
41
|
if (background.type === 'dots') {
|
|
@@ -33,6 +43,56 @@ export class BackgroundComponent {
|
|
|
33
43
|
}
|
|
34
44
|
return 0;
|
|
35
45
|
});
|
|
46
|
+
// IMAGE PATTERN
|
|
47
|
+
this.bgImageSrc = computed(() => {
|
|
48
|
+
const background = this.backgroundSignal();
|
|
49
|
+
return background.type === 'image' ? background.src : '';
|
|
50
|
+
});
|
|
51
|
+
this.imageSize = toSignal(toObservable(this.backgroundSignal).pipe(switchMap(() => createImage(this.bgImageSrc())), map((image) => ({ width: image.naturalWidth, height: image.naturalHeight }))), { initialValue: { width: 0, height: 0 } });
|
|
52
|
+
this.scaledImageWidth = computed(() => {
|
|
53
|
+
const background = this.backgroundSignal();
|
|
54
|
+
if (background.type === 'image') {
|
|
55
|
+
const zoom = background.fixed ? 1 : this.viewportService.readableViewport().zoom;
|
|
56
|
+
return this.imageSize().width * zoom * (background.scale ?? defaultImageScale);
|
|
57
|
+
}
|
|
58
|
+
return 0;
|
|
59
|
+
});
|
|
60
|
+
this.scaledImageHeight = computed(() => {
|
|
61
|
+
const background = this.backgroundSignal();
|
|
62
|
+
if (background.type === 'image') {
|
|
63
|
+
const zoom = background.fixed ? 1 : this.viewportService.readableViewport().zoom;
|
|
64
|
+
return this.imageSize().height * zoom * (background.scale ?? defaultImageScale);
|
|
65
|
+
}
|
|
66
|
+
return 0;
|
|
67
|
+
});
|
|
68
|
+
this.imageX = computed(() => {
|
|
69
|
+
const background = this.backgroundSignal();
|
|
70
|
+
if (background.type === 'image') {
|
|
71
|
+
if (!background.repeat) {
|
|
72
|
+
return background.fixed ? 0 : this.viewportService.readableViewport().x;
|
|
73
|
+
}
|
|
74
|
+
return background.fixed
|
|
75
|
+
? 0
|
|
76
|
+
: this.viewportService.readableViewport().x % this.scaledImageWidth();
|
|
77
|
+
}
|
|
78
|
+
return 0;
|
|
79
|
+
});
|
|
80
|
+
this.imageY = computed(() => {
|
|
81
|
+
const background = this.backgroundSignal();
|
|
82
|
+
if (background.type === 'image') {
|
|
83
|
+
if (!background.repeat) {
|
|
84
|
+
return background.fixed ? 0 : this.viewportService.readableViewport().y;
|
|
85
|
+
}
|
|
86
|
+
return background.fixed
|
|
87
|
+
? 0
|
|
88
|
+
: this.viewportService.readableViewport().y % this.scaledImageHeight();
|
|
89
|
+
}
|
|
90
|
+
return 0;
|
|
91
|
+
});
|
|
92
|
+
this.repeated = computed(() => {
|
|
93
|
+
const background = this.backgroundSignal();
|
|
94
|
+
return background.type === 'image' && (background.repeat ?? defaultRepeated);
|
|
95
|
+
});
|
|
36
96
|
// Without ID there will be pattern collision for several flows on the page
|
|
37
97
|
// Later pattern ID may be exposed to API
|
|
38
98
|
this.patternId = id();
|
|
@@ -47,11 +107,18 @@ export class BackgroundComponent {
|
|
|
47
107
|
}
|
|
48
108
|
});
|
|
49
109
|
}
|
|
50
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
51
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
110
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BackgroundComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
111
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: BackgroundComponent, isStandalone: true, selector: "g[background]", ngImport: i0, template: "@if (backgroundSignal().type === 'dots') {\n <svg:pattern\n [attr.id]=\"patternId\"\n [attr.x]=\"x()\"\n [attr.y]=\"y()\"\n [attr.width]=\"scaledGap()\"\n [attr.height]=\"scaledGap()\"\n patternUnits=\"userSpaceOnUse\"\n >\n <svg:circle\n [attr.cx]=\"patternSize()\"\n [attr.cy]=\"patternSize()\"\n [attr.r]=\"patternSize()\"\n [attr.fill]=\"patternColor()\"\n />\n </svg:pattern>\n\n <svg:rect\n x=\"0\"\n y=\"0\"\n width=\"100%\"\n height=\"100%\"\n [attr.fill]=\"patternUrl\"\n />\n}\n\n@if (backgroundSignal().type === 'image') {\n @if (repeated()) {\n <svg:pattern\n [attr.id]=\"patternId\"\n [attr.x]=\"imageX()\"\n [attr.y]=\"imageY()\"\n [attr.width]=\"scaledImageWidth()\"\n [attr.height]=\"scaledImageHeight()\"\n patternUnits=\"userSpaceOnUse\"\n >\n <svg:image\n [attr.href]=\"bgImageSrc()\"\n [attr.width]=\"scaledImageWidth()\"\n [attr.height]=\"scaledImageHeight()\"\n />\n </svg:pattern>\n\n <svg:rect\n x=\"0\"\n y=\"0\"\n width=\"100%\"\n height=\"100%\"\n [attr.fill]=\"patternUrl\"\n />\n }\n\n @if (!repeated()) {\n <svg:image\n [attr.x]=\"imageX()\"\n [attr.y]=\"imageY()\"\n [attr.width]=\"scaledImageWidth()\"\n [attr.height]=\"scaledImageHeight()\"\n [attr.href]=\"bgImageSrc()\"\n />\n }\n}\n", changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
52
112
|
}
|
|
53
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
113
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BackgroundComponent, decorators: [{
|
|
54
114
|
type: Component,
|
|
55
|
-
args: [{ selector: 'g[background]', changeDetection: ChangeDetectionStrategy.OnPush, template: "
|
|
56
|
-
}], ctorParameters:
|
|
57
|
-
|
|
115
|
+
args: [{ standalone: true, selector: 'g[background]', changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (backgroundSignal().type === 'dots') {\n <svg:pattern\n [attr.id]=\"patternId\"\n [attr.x]=\"x()\"\n [attr.y]=\"y()\"\n [attr.width]=\"scaledGap()\"\n [attr.height]=\"scaledGap()\"\n patternUnits=\"userSpaceOnUse\"\n >\n <svg:circle\n [attr.cx]=\"patternSize()\"\n [attr.cy]=\"patternSize()\"\n [attr.r]=\"patternSize()\"\n [attr.fill]=\"patternColor()\"\n />\n </svg:pattern>\n\n <svg:rect\n x=\"0\"\n y=\"0\"\n width=\"100%\"\n height=\"100%\"\n [attr.fill]=\"patternUrl\"\n />\n}\n\n@if (backgroundSignal().type === 'image') {\n @if (repeated()) {\n <svg:pattern\n [attr.id]=\"patternId\"\n [attr.x]=\"imageX()\"\n [attr.y]=\"imageY()\"\n [attr.width]=\"scaledImageWidth()\"\n [attr.height]=\"scaledImageHeight()\"\n patternUnits=\"userSpaceOnUse\"\n >\n <svg:image\n [attr.href]=\"bgImageSrc()\"\n [attr.width]=\"scaledImageWidth()\"\n [attr.height]=\"scaledImageHeight()\"\n />\n </svg:pattern>\n\n <svg:rect\n x=\"0\"\n y=\"0\"\n width=\"100%\"\n height=\"100%\"\n [attr.fill]=\"patternUrl\"\n />\n }\n\n @if (!repeated()) {\n <svg:image\n [attr.x]=\"imageX()\"\n [attr.y]=\"imageY()\"\n [attr.width]=\"scaledImageWidth()\"\n [attr.height]=\"scaledImageHeight()\"\n [attr.href]=\"bgImageSrc()\"\n />\n }\n}\n" }]
|
|
116
|
+
}], ctorParameters: () => [] });
|
|
117
|
+
function createImage(url) {
|
|
118
|
+
const image = new Image();
|
|
119
|
+
image.src = url;
|
|
120
|
+
return new Promise(resolve => {
|
|
121
|
+
image.onload = () => resolve(image);
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja2dyb3VuZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmZsb3ctbGliL3NyYy9saWIvdmZsb3cvY29tcG9uZW50cy9iYWNrZ3JvdW5kL2JhY2tncm91bmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2NvbXBvbmVudHMvYmFja2dyb3VuZC9iYWNrZ3JvdW5kLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0YsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUV0QyxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUE7QUFDeEIsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFBO0FBQ3JCLE1BQU0sY0FBYyxHQUFHLENBQUMsQ0FBQTtBQUN4QixNQUFNLGVBQWUsR0FBRyxvQkFBb0IsQ0FBQTtBQUM1QyxNQUFNLGlCQUFpQixHQUFHLEdBQUcsQ0FBQTtBQUM3QixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUE7QUFRNUIsTUFBTSxPQUFPLG1CQUFtQjtJQThIOUI7UUE3SFEs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QUMsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUNyQyxDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBjb21wdXRlZCwgZWZmZWN0LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFZpZXdwb3J0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3ZpZXdwb3J0LnNlcnZpY2UnO1xuaW1wb3J0IHsgUm9vdFN2Z1JlZmVyZW5jZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvcmVmZXJlbmNlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBpZCB9IGZyb20gJy4uLy4uL3V0aWxzL2lkJztcbmltcG9ydCB7IEZsb3dTZXR0aW5nc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mbG93LXNldHRpbmdzLnNlcnZpY2UnO1xuaW1wb3J0IHsgdG9PYnNlcnZhYmxlLCB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IG1hcCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5cbmNvbnN0IGRlZmF1bHRCZyA9ICcjZmZmJ1xuY29uc3QgZGVmYXVsdEdhcCA9IDIwXG5jb25zdCBkZWZhdWx0RG90U2l6ZSA9IDJcbmNvbnN0IGRlZmF1bHREb3RDb2xvciA9ICdyZ2IoMTc3LCAxNzcsIDE4MyknXG5jb25zdCBkZWZhdWx0SW1hZ2VTY2FsZSA9IDAuMVxuY29uc3QgZGVmYXVsdFJlcGVhdGVkID0gdHJ1ZVxuXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICdnW2JhY2tncm91bmRdJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2JhY2tncm91bmQuY29tcG9uZW50Lmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgQmFja2dyb3VuZENvbXBvbmVudCB7XG4gIHByaXZhdGUgdmlld3BvcnRTZXJ2aWNlID0gaW5qZWN0KFZpZXdwb3J0U2VydmljZSlcbiAgcHJpdmF0ZSByb290U3ZnID0gaW5qZWN0KFJvb3RTdmdSZWZlcmVuY2VEaXJlY3RpdmUpLmVsZW1lbnRcbiAgcHJpdmF0ZSBzZXR0aW5nc1NlcnZpY2UgPSBpbmplY3QoRmxvd1NldHRpbmdzU2VydmljZSk7XG5cbiAgcHJvdGVjdGVkIGJhY2tncm91bmRTaWduYWwgPSB0aGlzLnNldHRpbmdzU2VydmljZS5iYWNrZ3JvdW5kXG5cbiAgLy8gRE9UUyBQQVRURVJOXG4gIHByb3RlY3RlZCBzY2FsZWRHYXAgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgYmFja2dyb3VuZCA9IHRoaXMuYmFja2dyb3VuZFNpZ25hbCgpXG5cbiAgICBpZiAoYmFja2dyb3VuZC50eXBlID09PSAnZG90cycpIHtcbiAgICAgIGNvbnN0IHpvb20gPSB0aGlzLnZpZXdwb3J0U2VydmljZS5yZWFkYWJsZVZpZXdwb3J0KCkuem9vbVxuXG4gICAgICByZXR1cm4gem9vbSAqIChiYWNrZ3JvdW5kLmdhcCA/PyBkZWZhdWx0R2FwKVxuICAgIH1cblxuICAgIHJldHVybiAwXG4gIH0pXG5cbiAgcHJvdGVjdGVkIHggPSBjb21wdXRlZCgoKSA9PiB0aGlzLnZpZXdwb3J0U2VydmljZS5yZWFkYWJsZVZpZXdwb3J0KCkueCAlIHRoaXMuc2NhbGVkR2FwKCkpXG5cbiAgcHJvdGVjdGVkIHkgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnZpZXdwb3J0U2VydmljZS5yZWFkYWJsZVZpZXdwb3J0KCkueSAlIHRoaXMuc2NhbGVkR2FwKCkpXG5cbiAgcHJvdGVjdGVkIHBhdHRlcm5Db2xvciA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBiZyA9IHRoaXMuYmFja2dyb3VuZFNpZ25hbCgpXG5cbiAgICBpZiAoYmcudHlwZSA9PT0gJ2RvdHMnKSB7XG4gICAgICByZXR1cm4gYmcuY29sb3IgPz8gZGVmYXVsdERvdENvbG9yXG4gICAgfVxuXG4gICAgcmV0dXJuIGRlZmF1bHREb3RDb2xvclxuICB9KVxuXG4gIHByb3RlY3RlZCBwYXR0ZXJuU2l6ZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBiYWNrZ3JvdW5kID0gdGhpcy5iYWNrZ3JvdW5kU2lnbmFsKClcblxuICAgIGlmIChiYWNrZ3JvdW5kLnR5cGUgPT09ICdkb3RzJykge1xuICAgICAgcmV0dXJuICh0aGlzLnZpZXdwb3J0U2VydmljZS5yZWFkYWJsZVZpZXdwb3J0KCkuem9vbSAqIChiYWNrZ3JvdW5kLnNpemUgPz8gZGVmYXVsdERvdFNpemUpKSAvIDJcbiAgICB9XG5cbiAgICByZXR1cm4gMFxuICB9KVxuXG4gIC8vIElNQUdFIFBBVFRFUk5cbiAgcHJvdGVjdGVkIGJnSW1hZ2VTcmMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgYmFja2dyb3VuZCA9IHRoaXMuYmFja2dyb3VuZFNpZ25hbCgpXG5cbiAgICByZXR1cm4gYmFja2dyb3VuZC50eXBlID09PSAnaW1hZ2UnID8gYmFja2dyb3VuZC5zcmMgOiAnJ1xuICB9KVxuXG4gIHByb3RlY3RlZCBpbWFnZVNpemUgPSB0b1NpZ25hbChcbiAgICB0b09ic2VydmFibGUodGhpcy5iYWNrZ3JvdW5kU2lnbmFsKS5waXBlKFxuICAgICAgc3dpdGNoTWFwKCgpID0+IGNyZWF0ZUltYWdlKHRoaXMuYmdJbWFnZVNyYygpKSksXG4gICAgICBtYXAoKGltYWdlKSA9PiAoeyB3aWR0aDogaW1hZ2UubmF0dXJhbFdpZHRoLCBoZWlnaHQ6IGltYWdlLm5hdHVyYWxIZWlnaHQgfSkpLFxuICAgICksXG4gICAgeyBpbml0aWFsVmFsdWU6IHsgd2lkdGg6IDAsIGhlaWdodDogMCB9IH1cbiAgKVxuXG4gIHByb3RlY3RlZCBzY2FsZWRJbWFnZVdpZHRoID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGJhY2tncm91bmQgPSB0aGlzLmJhY2tncm91bmRTaWduYWwoKVxuXG4gICAgaWYgKGJhY2tncm91bmQudHlwZSA9PT0gJ2ltYWdlJykge1xuICAgICAgY29uc3Qgem9vbSA9IGJhY2tncm91bmQuZml4ZWQgPyAxIDogdGhpcy52aWV3cG9ydFNlcnZpY2UucmVhZGFibGVWaWV3cG9ydCgpLnpvb21cblxuICAgICAgcmV0dXJuIHRoaXMuaW1hZ2VTaXplKCkud2lkdGggKiB6b29tICogKGJhY2tncm91bmQuc2NhbGUgPz8gZGVmYXVsdEltYWdlU2NhbGUpXG4gICAgfVxuXG4gICAgcmV0dXJuIDBcbiAgfSlcblxuICBwcm90ZWN0ZWQgc2NhbGVkSW1hZ2VIZWlnaHQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgYmFja2dyb3VuZCA9IHRoaXMuYmFja2dyb3VuZFNpZ25hbCgpXG5cbiAgICBpZiAoYmFja2dyb3VuZC50eXBlID09PSAnaW1hZ2UnKSB7XG4gICAgICBjb25zdCB6b29tID0gYmFja2dyb3VuZC5maXhlZCA/IDEgOiB0aGlzLnZpZXdwb3J0U2VydmljZS5yZWFkYWJsZVZpZXdwb3J0KCkuem9vbVxuXG4gICAgICByZXR1cm4gdGhpcy5pbWFnZVNpemUoKS5oZWlnaHQgKiB6b29tICogKGJhY2tncm91bmQuc2NhbGUgPz8gZGVmYXVsdEltYWdlU2NhbGUpXG4gICAgfVxuXG4gICAgcmV0dXJuIDBcbiAgfSk7XG5cbiAgcHJvdGVjdGVkIGltYWdlWCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBiYWNrZ3JvdW5kID0gdGhpcy5iYWNrZ3JvdW5kU2lnbmFsKClcblxuICAgIGlmIChiYWNrZ3JvdW5kLnR5cGUgPT09ICdpbWFnZScpIHtcbiAgICAgIGlmICghYmFja2dyb3VuZC5yZXBlYXQpIHtcbiAgICAgICAgcmV0dXJuIGJhY2tncm91bmQuZml4ZWQgPyAwIDogdGhpcy52aWV3cG9ydFNlcnZpY2UucmVhZGFibGVWaWV3cG9ydCgpLnhcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGJhY2tncm91bmQuZml4ZWRcbiAgICAgICAgPyAwXG4gICAgICAgIDogdGhpcy52aWV3cG9ydFNlcnZpY2UucmVhZGFibGVWaWV3cG9ydCgpLnggJSB0aGlzLnNjYWxlZEltYWdlV2lkdGgoKVxuICAgIH1cblxuICAgIHJldHVybiAwXG4gIH0pO1xuXG4gIHByb3RlY3RlZCBpbWFnZVkgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgYmFja2dyb3VuZCA9IHRoaXMuYmFja2dyb3VuZFNpZ25hbCgpXG5cbiAgICBpZiAoYmFja2dyb3VuZC50eXBlID09PSAnaW1hZ2UnKSB7XG4gICAgICBpZiAoIWJhY2tncm91bmQucmVwZWF0KSB7XG4gICAgICAgIHJldHVybiBiYWNrZ3JvdW5kLmZpeGVkID8gMCA6IHRoaXMudmlld3BvcnRTZXJ2aWNlLnJlYWRhYmxlVmlld3BvcnQoKS55XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBiYWNrZ3JvdW5kLmZpeGVkXG4gICAgICAgID8gMFxuICAgICAgICA6IHRoaXMudmlld3BvcnRTZXJ2aWNlLnJlYWRhYmxlVmlld3BvcnQoKS55ICUgdGhpcy5zY2FsZWRJbWFnZUhlaWdodCgpXG4gICAgfVxuXG4gICAgcmV0dXJuIDBcbiAgfSk7XG5cbiAgcHJvdGVjdGVkIHJlcGVhdGVkID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGJhY2tncm91bmQgPSB0aGlzLmJhY2tncm91bmRTaWduYWwoKVxuXG4gICAgcmV0dXJuIGJhY2tncm91bmQudHlwZSA9PT0gJ2ltYWdlJyAmJiAoYmFja2dyb3VuZC5yZXBlYXQgPz8gZGVmYXVsdFJlcGVhdGVkKVxuICB9KVxuXG4gIC8vIFdpdGhvdXQgSUQgdGhlcmUgd2lsbCBiZSBwYXR0ZXJuIGNvbGxpc2lvbiBmb3Igc2V2ZXJhbCBmbG93cyBvbiB0aGUgcGFnZVxuICAvLyBMYXRlciBwYXR0ZXJuIElEIG1heSBiZSBleHBvc2VkIHRvIEFQSVxuICBwcm90ZWN0ZWQgcGF0dGVybklkID0gaWQoKTtcbiAgcHJvdGVjdGVkIHBhdHRlcm5VcmwgPSBgdXJsKCMke3RoaXMucGF0dGVybklkfSlgXG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IGJhY2tncm91bmQgPSB0aGlzLmJhY2tncm91bmRTaWduYWwoKVxuXG4gICAgICBpZiAoYmFja2dyb3VuZC50eXBlID09PSAnZG90cycpIHtcbiAgICAgICAgdGhpcy5yb290U3ZnLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IGJhY2tncm91bmQuYmFja2dyb3VuZENvbG9yID8/IGRlZmF1bHRCZ1xuICAgICAgfVxuXG4gICAgICBpZiAoYmFja2dyb3VuZC50eXBlID09PSAnc29saWQnKSB7XG4gICAgICAgIHRoaXMucm9vdFN2Zy5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBiYWNrZ3JvdW5kLmNvbG9yXG4gICAgICB9XG4gICAgfSlcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVJbWFnZSh1cmw6IHN0cmluZykge1xuICBjb25zdCBpbWFnZSA9IG5ldyBJbWFnZSgpXG5cbiAgaW1hZ2Uuc3JjID0gdXJsXG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlPEhUTUxJbWFnZUVsZW1lbnQ+KHJlc29sdmUgPT4ge1xuICAgIGltYWdlLm9ubG9hZCA9ICgpID0+IHJlc29sdmUoaW1hZ2UpXG4gIH0pXG59XG4iLCJAaWYgKGJhY2tncm91bmRTaWduYWwoKS50eXBlID09PSAnZG90cycpIHtcbiAgPHN2ZzpwYXR0ZXJuXG4gICAgW2F0dHIuaWRdPVwicGF0dGVybklkXCJcbiAgICBbYXR0ci54XT1cIngoKVwiXG4gICAgW2F0dHIueV09XCJ5KClcIlxuICAgIFthdHRyLndpZHRoXT1cInNjYWxlZEdhcCgpXCJcbiAgICBbYXR0ci5oZWlnaHRdPVwic2NhbGVkR2FwKClcIlxuICAgIHBhdHRlcm5Vbml0cz1cInVzZXJTcGFjZU9uVXNlXCJcbiAgICA+XG4gICAgPHN2ZzpjaXJjbGVcbiAgICAgIFthdHRyLmN4XT1cInBhdHRlcm5TaXplKClcIlxuICAgICAgW2F0dHIuY3ldPVwicGF0dGVyblNpemUoKVwiXG4gICAgICBbYXR0ci5yXT1cInBhdHRlcm5TaXplKClcIlxuICAgICAgW2F0dHIuZmlsbF09XCJwYXR0ZXJuQ29sb3IoKVwiXG4gICAgICAvPlxuICA8L3N2ZzpwYXR0ZXJuPlxuXG4gIDxzdmc6cmVjdFxuICAgIHg9XCIwXCJcbiAgICB5PVwiMFwiXG4gICAgd2lkdGg9XCIxMDAlXCJcbiAgICBoZWlnaHQ9XCIxMDAlXCJcbiAgICBbYXR0ci5maWxsXT1cInBhdHRlcm5VcmxcIlxuICAgIC8+XG59XG5cbkBpZiAoYmFja2dyb3VuZFNpZ25hbCgpLnR5cGUgPT09ICdpbWFnZScpIHtcbiAgQGlmIChyZXBlYXRlZCgpKSB7XG4gICAgPHN2ZzpwYXR0ZXJuXG4gICAgICBbYXR0ci5pZF09XCJwYXR0ZXJuSWRcIlxuICAgICAgW2F0dHIueF09XCJpbWFnZVgoKVwiXG4gICAgICBbYXR0ci55XT1cImltYWdlWSgpXCJcbiAgICAgIFthdHRyLndpZHRoXT1cInNjYWxlZEltYWdlV2lkdGgoKVwiXG4gICAgICBbYXR0ci5oZWlnaHRdPVwic2NhbGVkSW1hZ2VIZWlnaHQoKVwiXG4gICAgICBwYXR0ZXJuVW5pdHM9XCJ1c2VyU3BhY2VPblVzZVwiXG4gICAgICA+XG4gICAgICA8c3ZnOmltYWdlXG4gICAgICAgIFthdHRyLmhyZWZdPVwiYmdJbWFnZVNyYygpXCJcbiAgICAgICAgW2F0dHIud2lkdGhdPVwic2NhbGVkSW1hZ2VXaWR0aCgpXCJcbiAgICAgICAgW2F0dHIuaGVpZ2h0XT1cInNjYWxlZEltYWdlSGVpZ2h0KClcIlxuICAgICAgICAvPlxuICAgIDwvc3ZnOnBhdHRlcm4+XG5cbiAgICA8c3ZnOnJlY3RcbiAgICAgIHg9XCIwXCJcbiAgICAgIHk9XCIwXCJcbiAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICBoZWlnaHQ9XCIxMDAlXCJcbiAgICAgIFthdHRyLmZpbGxdPVwicGF0dGVyblVybFwiXG4gICAgICAvPlxuICB9XG5cbiAgQGlmICghcmVwZWF0ZWQoKSkge1xuICAgIDxzdmc6aW1hZ2VcbiAgICAgIFthdHRyLnhdPVwiaW1hZ2VYKClcIlxuICAgICAgW2F0dHIueV09XCJpbWFnZVkoKVwiXG4gICAgICBbYXR0ci53aWR0aF09XCJzY2FsZWRJbWFnZVdpZHRoKClcIlxuICAgICAgW2F0dHIuaGVpZ2h0XT1cInNjYWxlZEltYWdlSGVpZ2h0KClcIlxuICAgICAgW2F0dHIuaHJlZl09XCJiZ0ltYWdlU3JjKClcIlxuICAgICAgLz5cbiAgfVxufVxuIl19
|
|
@@ -1,13 +1,16 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component,
|
|
1
|
+
import { ChangeDetectionStrategy, Component, computed, inject, input, } from '@angular/core';
|
|
2
2
|
import { FlowStatusService } from '../../services/flow-status.service';
|
|
3
3
|
import { straightPath } from '../../math/edge-path/straigh-path';
|
|
4
4
|
import { SpacePointContextDirective } from '../../directives/space-point-context.directive';
|
|
5
5
|
import { bezierPath } from '../../math/edge-path/bezier-path';
|
|
6
6
|
import { hashCode } from '../../utils/hash';
|
|
7
|
+
import { smoothStepPath } from '../../math/edge-path/smooth-step-path';
|
|
8
|
+
import { NgTemplateOutlet } from '@angular/common';
|
|
7
9
|
import * as i0 from "@angular/core";
|
|
8
|
-
import * as i1 from "@angular/common";
|
|
9
10
|
export class ConnectionComponent {
|
|
10
11
|
constructor() {
|
|
12
|
+
this.model = input.required();
|
|
13
|
+
this.template = input();
|
|
11
14
|
this.flowStatusService = inject(FlowStatusService);
|
|
12
15
|
this.spacePointContext = inject(SpacePointContextDirective);
|
|
13
16
|
this.path = computed(() => {
|
|
@@ -18,9 +21,15 @@ export class ConnectionComponent {
|
|
|
18
21
|
const sourcePosition = sourceHandle.rawHandle.position;
|
|
19
22
|
const targetPoint = this.spacePointContext.svgCurrentSpacePoint();
|
|
20
23
|
const targetPosition = getOppositePostion(sourceHandle.rawHandle.position);
|
|
21
|
-
switch (this.model.curve) {
|
|
22
|
-
case 'straight':
|
|
23
|
-
|
|
24
|
+
switch (this.model().curve) {
|
|
25
|
+
case 'straight':
|
|
26
|
+
return straightPath(sourcePoint, targetPoint).path;
|
|
27
|
+
case 'bezier':
|
|
28
|
+
return bezierPath(sourcePoint, targetPoint, sourcePosition, targetPosition).path;
|
|
29
|
+
case 'smooth-step':
|
|
30
|
+
return smoothStepPath(sourcePoint, targetPoint, sourcePosition, targetPosition).path;
|
|
31
|
+
case 'step':
|
|
32
|
+
return smoothStepPath(sourcePoint, targetPoint, sourcePosition, targetPosition, 0).path;
|
|
24
33
|
}
|
|
25
34
|
}
|
|
26
35
|
if (status.state === 'connection-validation') {
|
|
@@ -35,15 +44,21 @@ export class ConnectionComponent {
|
|
|
35
44
|
const targetPosition = status.payload.valid
|
|
36
45
|
? targetHandle.rawHandle.position
|
|
37
46
|
: getOppositePostion(sourceHandle.rawHandle.position);
|
|
38
|
-
switch (this.model.curve) {
|
|
39
|
-
case 'straight':
|
|
40
|
-
|
|
47
|
+
switch (this.model().curve) {
|
|
48
|
+
case 'straight':
|
|
49
|
+
return straightPath(sourcePoint, targetPoint).path;
|
|
50
|
+
case 'bezier':
|
|
51
|
+
return bezierPath(sourcePoint, targetPoint, sourcePosition, targetPosition).path;
|
|
52
|
+
case 'smooth-step':
|
|
53
|
+
return smoothStepPath(sourcePoint, targetPoint, sourcePosition, targetPosition).path;
|
|
54
|
+
case 'step':
|
|
55
|
+
return smoothStepPath(sourcePoint, targetPoint, sourcePosition, targetPosition, 0).path;
|
|
41
56
|
}
|
|
42
57
|
}
|
|
43
58
|
return null;
|
|
44
59
|
});
|
|
45
60
|
this.markerUrl = computed(() => {
|
|
46
|
-
const marker = this.model.settings.marker;
|
|
61
|
+
const marker = this.model().settings.marker;
|
|
47
62
|
if (marker) {
|
|
48
63
|
return `url(#${hashCode(JSON.stringify(marker))})`;
|
|
49
64
|
}
|
|
@@ -55,56 +70,59 @@ export class ConnectionComponent {
|
|
|
55
70
|
return {
|
|
56
71
|
$implicit: {
|
|
57
72
|
path: this.path,
|
|
58
|
-
marker: this.markerUrl
|
|
59
|
-
}
|
|
73
|
+
marker: this.markerUrl,
|
|
74
|
+
},
|
|
60
75
|
};
|
|
61
76
|
}
|
|
62
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
63
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
77
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ConnectionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
78
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: ConnectionComponent, isStandalone: true, selector: "g[connection]", inputs: { model: { classPropertyName: "model", publicName: "model", isSignal: true, isRequired: true, transformFunction: null }, template: { classPropertyName: "template", publicName: "template", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
|
|
79
|
+
@if (model().type === 'default') {
|
|
80
|
+
@if (path(); as path) {
|
|
81
|
+
<svg:path
|
|
82
|
+
[attr.d]="path"
|
|
83
|
+
[attr.marker-end]="markerUrl()"
|
|
84
|
+
[attr.stroke]="defaultColor"
|
|
85
|
+
fill="none"
|
|
86
|
+
stroke-width="2"
|
|
87
|
+
/>
|
|
88
|
+
}
|
|
89
|
+
}
|
|
74
90
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
91
|
+
@if (model().type === 'template') {
|
|
92
|
+
@if (template(); as template) {
|
|
93
|
+
<ng-container *ngTemplateOutlet="template; context: getContext()" />
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
79
97
|
}
|
|
80
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
98
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ConnectionComponent, decorators: [{
|
|
81
99
|
type: Component,
|
|
82
100
|
args: [{
|
|
101
|
+
standalone: true,
|
|
83
102
|
selector: 'g[connection]',
|
|
84
103
|
template: `
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
104
|
+
@if (model().type === 'default') {
|
|
105
|
+
@if (path(); as path) {
|
|
106
|
+
<svg:path
|
|
107
|
+
[attr.d]="path"
|
|
108
|
+
[attr.marker-end]="markerUrl()"
|
|
109
|
+
[attr.stroke]="defaultColor"
|
|
110
|
+
fill="none"
|
|
111
|
+
stroke-width="2"
|
|
112
|
+
/>
|
|
113
|
+
}
|
|
114
|
+
}
|
|
95
115
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
116
|
+
@if (model().type === 'template') {
|
|
117
|
+
@if (template(); as template) {
|
|
118
|
+
<ng-container *ngTemplateOutlet="template; context: getContext()" />
|
|
119
|
+
}
|
|
120
|
+
}
|
|
99
121
|
`,
|
|
100
|
-
changeDetection: ChangeDetectionStrategy.OnPush
|
|
122
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
123
|
+
imports: [NgTemplateOutlet],
|
|
101
124
|
}]
|
|
102
|
-
}]
|
|
103
|
-
type: Input,
|
|
104
|
-
args: [{ required: true }]
|
|
105
|
-
}], template: [{
|
|
106
|
-
type: Input
|
|
107
|
-
}] } });
|
|
125
|
+
}] });
|
|
108
126
|
function getOppositePostion(position) {
|
|
109
127
|
switch (position) {
|
|
110
128
|
case 'top':
|
|
@@ -117,4 +135,4 @@ function getOppositePostion(position) {
|
|
|
117
135
|
return 'left';
|
|
118
136
|
}
|
|
119
137
|
}
|
|
120
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ubmVjdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmZsb3ctbGliL3NyYy9saWIvdmZsb3cvY29tcG9uZW50cy9jb25uZWN0aW9uL2Nvbm5lY3Rpb24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFlLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekcsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdkUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBRTVGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUM5RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7OztBQXVCNUMsTUFBTSxPQUFPLG1CQUFtQjtJQXBCaEM7UUEyQlUsc0JBQWlCLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUE7UUFDN0Msc0JBQWlCLEdBQUcsTUFBTSxDQUFDLDBCQUEwQixDQUFDLENBQUE7UUFFcEQsU0FBSSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDN0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxDQUFBO1lBRTlDLElBQUksTUFBTSxDQUFDLEtBQUssS0FBSyxrQkFBa0IsRUFBRTtnQkFDdkMsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUE7Z0JBQ2hELE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxhQUFhLEVBQUUsQ0FBQTtnQkFDaEQsTUFBTSxjQUFjLEdBQUcsWUFBWSxDQUFDLFNBQVMs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QUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUlsQixRQUFRO3NCQURkLEtBQUs7O0FBMEVSLFNBQVMsa0JBQWtCLENBQUMsUUFBa0I7SUFDNUMsUUFBUSxRQUFRLEVBQUU7UUFDaEIsS0FBSyxLQUFLO1lBQ1IsT0FBTyxRQUFRLENBQUE7UUFDakIsS0FBSyxRQUFRO1lBQ1gsT0FBTyxLQUFLLENBQUE7UUFDZCxLQUFLLE1BQU07WUFDVCxPQUFPLE9BQU8sQ0FBQTtRQUNoQixLQUFLLE9BQU87WUFDVixPQUFPLE1BQU0sQ0FBQTtLQUNoQjtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbnB1dCwgVGVtcGxhdGVSZWYsIGNvbXB1dGVkLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZsb3dTdGF0dXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmxvdy1zdGF0dXMuc2VydmljZSc7XG5pbXBvcnQgeyBzdHJhaWdodFBhdGggfSBmcm9tICcuLi8uLi9tYXRoL2VkZ2UtcGF0aC9zdHJhaWdoLXBhdGgnO1xuaW1wb3J0IHsgU3BhY2VQb2ludENvbnRleHREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL3NwYWNlLXBvaW50LWNvbnRleHQuZGlyZWN0aXZlJztcbmltcG9ydCB7IENvbm5lY3Rpb25Nb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9jb25uZWN0aW9uLm1vZGVsJztcbmltcG9ydCB7IGJlemllclBhdGggfSBmcm9tICcuLi8uLi9tYXRoL2VkZ2UtcGF0aC9iZXppZXItcGF0aCc7XG5pbXBvcnQgeyBoYXNoQ29kZSB9IGZyb20gJy4uLy4uL3V0aWxzL2hhc2gnO1xuaW1wb3J0IHsgUG9zaXRpb24gfSBmcm9tICcuLi8uLi90eXBlcy9wb3NpdGlvbi50eXBlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZ1tjb25uZWN0aW9uXScsXG4gIHRlbXBsYXRlOiBgXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1vZGVsLnR5cGUgPT09ICdkZWZhdWx0J1wiPlxuICAgICAgPHN2ZzpwYXRoXG4gICAgICAgICpuZ0lmPVwicGF0aCgpIGFzIHBhdGhcIlxuICAgICAgICBbYXR0ci5kXT1cInBhdGhcIlxuICAgICAgICBbYXR0ci5tYXJrZXItZW5kXT1cIm1hcmtlclVybCgpXCJcbiAgICAgICAgW2F0dHIuc3Ryb2tlXT1cImRlZmF1bHRDb2xvclwiXG4gICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMlwiXG4gICAgICAvPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1vZGVsLnR5cGUgPT09ICd0ZW1wbGF0ZScgJiYgdGVtcGxhdGVcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZTsgY29udGV4dDogZ2V0Q29udGV4dCgpXCIgLz5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgYCxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgQ29ubmVjdGlvbkNvbXBvbmVudCB7XG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXG4gIHB1YmxpYyBtb2RlbCE6IENvbm5lY3Rpb25Nb2RlbFxuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB0ZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT5cblxuICBwcml2YXRlIGZsb3dTdGF0dXNTZXJ2aWNlID0gaW5qZWN0KEZsb3dTdGF0dXNTZXJ2aWNlKVxuICBwcml2YXRlIHNwYWNlUG9pbnRDb250ZXh0ID0gaW5qZWN0KFNwYWNlUG9pbnRDb250ZXh0RGlyZWN0aXZlKVxuXG4gIHByb3RlY3RlZCBwYXRoID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHN0YXR1cyA9IHRoaXMuZmxvd1N0YXR1c1NlcnZpY2Uuc3RhdHVzKClcblxuICAgIGlmIChzdGF0dXMuc3RhdGUgPT09ICdjb25uZWN0aW9uLXN0YXJ0Jykge1xuICAgICAgY29uc3Qgc291cmNlSGFuZGxlID0gc3RhdHVzLnBheWxvYWQuc291cmNlSGFuZGxlXG4gICAgICBjb25zdCBzb3VyY2VQb2ludCA9IHNvdXJjZUhhbmRsZS5wb2ludEFic29sdXRlKClcbiAgICAgIGNvbnN0IHNvdXJjZVBvc2l0aW9uID0gc291cmNlSGFuZGxlLnJhd0hhbmRsZS5wb3NpdGlvblxuXG4gICAgICBjb25zdCB0YXJnZXRQb2ludCA9IHRoaXMuc3BhY2VQb2ludENvbnRleHQuc3ZnQ3VycmVudFNwYWNlUG9pbnQoKVxuICAgICAgY29uc3QgdGFyZ2V0UG9zaXRpb24gPSBnZXRPcHBvc2l0ZVBvc3Rpb24oc291cmNlSGFuZGxlLnJhd0hhbmRsZS5wb3NpdGlvbilcblxuICAgICAgc3dpdGNoICh0aGlzLm1vZGVsLmN1cnZlKSB7XG4gICAgICAgIGNhc2UgJ3N0cmFpZ2h0JzogcmV0dXJuIHN0cmFpZ2h0UGF0aChzb3VyY2VQb2ludCwgdGFyZ2V0UG9pbnQpLnBhdGhcbiAgICAgICAgY2FzZSAnYmV6aWVyJzogcmV0dXJuIGJlemllclBhdGgoXG4gICAgICAgICAgc291cmNlUG9pbnQsIHRhcmdldFBvaW50LFxuICAgICAgICAgIHNvdXJjZVBvc2l0aW9uLCB0YXJnZXRQb3NpdGlvblxuICAgICAgICApLnBhdGhcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3RhdHVzLnN0YXRlID09PSAnY29ubmVjdGlvbi12YWxpZGF0aW9uJykge1xuICAgICAgY29uc3Qgc291cmNlSGFuZGxlID0gc3RhdHVzLnBheWxvYWQuc291cmNlSGFuZGxlXG4gICAgICBjb25zdCBzb3VyY2VQb2ludCA9IHNvdXJjZUhhbmRsZS5wb2ludEFic29sdXRlKClcbiAgICAgIGNvbnN0IHNvdXJjZVBvc2l0aW9uID0gc291cmNlSGFuZGxlLnJhd0hhbmRsZS5wb3NpdGlvblxuXG4gICAgICBjb25zdCB0YXJnZXRIYW5kbGUgPSBzdGF0dXMucGF5bG9hZC50YXJnZXRIYW5kbGVcbiAgICAgIC8vIGlnbm9yZSBtYWduZXQgaWYgdmFsaWRhdGlvbiBmYWlsZWRcbiAgICAgIGNvbnN0IHRhcmdldFBvaW50ID0gc3RhdHVzLnBheWxvYWQudmFsaWRcbiAgICAgICAgPyB0YXJnZXRIYW5kbGUucG9pbnRBYnNvbHV0ZSgpXG4gICAgICAgIDogdGhpcy5zcGFjZVBvaW50Q29udGV4dC5zdmdDdXJyZW50U3BhY2VQb2ludCgpXG4gICAgICBjb25zdCB0YXJnZXRQb3NpdGlvbiA9IHN0YXR1cy5wYXlsb2FkLnZhbGlkXG4gICAgICAgID8gdGFyZ2V0SGFuZGxlLnJhd0hhbmRsZS5wb3NpdGlvblxuICAgICAgICA6IGdldE9wcG9zaXRlUG9zdGlvbihzb3VyY2VIYW5kbGUucmF3SGFuZGxlLnBvc2l0aW9uKVxuXG4gICAgICBzd2l0Y2ggKHRoaXMubW9kZWwuY3VydmUpIHtcbiAgICAgICAgY2FzZSAnc3RyYWlnaHQnOiByZXR1cm4gc3RyYWlnaHRQYXRoKHNvdXJjZVBvaW50LCB0YXJnZXRQb2ludCkucGF0aFxuICAgICAgICBjYXNlICdiZXppZXInOiByZXR1cm4gYmV6aWVyUGF0aChcbiAgICAgICAgICBzb3VyY2VQb2ludCwgdGFyZ2V0UG9pbnQsXG4gICAgICAgICAgc291cmNlUG9zaXRpb24sIHRhcmdldFBvc2l0aW9uXG4gICAgICAgICkucGF0aFxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsXG4gIH0pXG5cbiAgcHJvdGVjdGVkIG1hcmtlclVybCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBtYXJrZXIgPSB0aGlzLm1vZGVsLnNldHRpbmdzLm1hcmtlclxuXG4gICAgaWYgKG1hcmtlcikge1xuICAgICAgcmV0dXJuIGB1cmwoIyR7aGFzaENvZGUoSlNPTi5zdHJpbmdpZnkobWFya2VyKSl9KWBcbiAgICB9XG5cbiAgICByZXR1cm4gJydcbiAgfSlcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGVmYXVsdENvbG9yID0gJ3JnYigxNzcsIDE3NywgMTgzKSdcblxuICBwcm90ZWN0ZWQgZ2V0Q29udGV4dCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJGltcGxpY2l0OiB7XG4gICAgICAgIHBhdGg6IHRoaXMucGF0aCxcbiAgICAgICAgbWFya2VyOiB0aGlzLm1hcmtlclVybFxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRPcHBvc2l0ZVBvc3Rpb24ocG9zaXRpb246IFBvc2l0aW9uKTogUG9zaXRpb24ge1xuICBzd2l0Y2ggKHBvc2l0aW9uKSB7XG4gICAgY2FzZSAndG9wJzpcbiAgICAgIHJldHVybiAnYm90dG9tJ1xuICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICByZXR1cm4gJ3RvcCdcbiAgICBjYXNlICdsZWZ0JzpcbiAgICAgIHJldHVybiAncmlnaHQnXG4gICAgY2FzZSAncmlnaHQnOlxuICAgICAgcmV0dXJuICdsZWZ0J1xuICB9XG59XG4iXX0=
|
|
138
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ubmVjdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmZsb3ctbGliL3NyYy9saWIvdmZsb3cvY29tcG9uZW50cy9jb25uZWN0aW9uL2Nvbm5lY3Rpb24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUVULFFBQVEsRUFDUixNQUFNLEVBQ04sS0FBSyxHQUNOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNqRSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUU1RixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDOUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTVDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUEyQm5ELE1BQU0sT0FBTyxtQkFBbUI7SUF6QmhDO1FBMEJTLFVBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFtQixDQUFDO1FBRTFDLGFBQVEsR0FBRyxLQUFLLEVBQW9CLENBQUM7UUFFcEMsc0JBQWlCLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDOUMsc0JBQWlCLEdBQUcsTUFBTSxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFFckQsU0FBSSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDN0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxDQUFDO1lBRS9DLElBQUksTUFBTSxDQUFDLEtBQUssS0FBSyxrQkFBa0IsRUFBRSxDQUFDO2dCQUN4QyxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQztnQkFDakQsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUNqRCxNQUFNLGNBQWMsR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQztnQkFFdkQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLG9CQUFvQixFQUFFLENBQUM7Z0JBQ2xFLE1BQU0sY0FBYyxHQUFHLGtCQUFrQixDQUN2QyxZQUFZLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FDaEMsQ0FBQztnQkFFRixRQUFRLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDM0IsS0FBSyxVQUFVO3dCQUNiLE9BQU8sWUFBWSxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUM7b0JBQ3JELEtBQUssUUFBUTt3QkFDWCxPQUFPLFVBQVUsQ0FDZixXQUFXLEVBQ1gsV0FBVyxFQUNYLGNBQWMsRUFDZCxjQUFjLENBQ2YsQ0FBQyxJQUFJLENBQUM7b0JBQ1QsS0FBSyxhQUFhO3dCQUNoQixPQUFPLGNBQWMsQ0FDbkIsV0FBVyxFQUNYLFdBQVcsRUFDWCxjQUFjLEVBQ2QsY0FBYyxDQUNmLENBQUMsSUFBSSxDQUFDO29CQUNULEtBQUssTUFBTTt3QkFDVCxPQUFPLGNBQWMsQ0FDbkIsV0FBVyxFQUNYLFdBQVcsRUFDWCxjQUFjLEVBQ2QsY0FBYyxFQUNkLENBQUMsQ0FDRixDQUFDLElBQUksQ0FBQztnQkFDWCxDQUFDO1lBQ0gsQ0FBQztZQUVELElBQUksTUFBTSxDQUFDLEtBQUssS0FBSyx1QkFBdUIsRUFBRSxDQUFDO2dCQUM3QyxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQztnQkFDakQsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUNqRCxNQUFNLGNBQWMsR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQztnQkFFdkQsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUM7Z0JBQ2pELHFDQUFxQztnQkFDckMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLO29CQUN0QyxDQUFDLENBQUMsWUFBWSxDQUFDLGFBQWEsRUFBRTtvQkFDOUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO2dCQUNsRCxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUs7b0JBQ3pDLENBQUMsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLFFBQVE7b0JBQ2pDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUV4RCxRQUFRLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDM0IsS0FBSyxVQUFVO3dCQUNiLE9BQU8sWUFBWSxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUM7b0JBQ3JELEtBQUssUUFBUTt3QkFDWCxPQUFPLFVBQVUsQ0FDZixXQUFXLEVBQ1gsV0FBVyxFQUNYLGNBQWMsRUFDZCxjQUFjLENBQ2YsQ0FBQyxJQUFJLENBQUM7b0JBQ1QsS0FBSyxhQUFhO3dCQUNoQixPQUFPLGNBQWMsQ0FDbkIsV0FBVyxFQUNYLFdBQVcsRUFDWCxjQUFjLEVBQ2QsY0FBYyxDQUNmLENBQUMsSUFBSSxDQUFDO29CQUNULEtBQUssTUFBTTt3QkFDVCxPQUFPLGNBQWMsQ0FDbkIsV0FBVyxFQUNYLFdBQVcsRUFDWCxjQUFjLEVBQ2QsY0FBYyxFQUNkLENBQUMsQ0FDRixDQUFDLElBQUksQ0FBQztnQkFDWCxDQUFDO1lBQ0gsQ0FBQztZQUVELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUFDLENBQUM7UUFFTyxjQUFTLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNsQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztZQUU1QyxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUNYLE9BQU8sUUFBUSxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUM7WUFDckQsQ0FBQztZQUVELE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQyxDQUFDLENBQUM7UUFFZ0IsaUJBQVksR0FBRyxvQkFBb0IsQ0FBQztLQVV4RDtJQVJXLFVBQVU7UUFDbEIsT0FBTztZQUNMLFNBQVMsRUFBRTtnQkFDVCxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7Z0JBQ2YsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTO2FBQ3ZCO1NBQ0YsQ0FBQztJQUNKLENBQUM7K0dBakhVLG1CQUFtQjttR0FBbkIsbUJBQW1CLDZVQXRCcEI7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCVCw0REFFUyxnQkFBZ0I7OzRGQUVmLG1CQUFtQjtrQkF6Qi9CLFNBQVM7bUJBQUM7b0JBQ1QsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRSxlQUFlO29CQUN6QixRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCVDtvQkFDRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsT0FBTyxFQUFFLENBQUMsZ0JBQWdCLENBQUM7aUJBQzVCOztBQXFIRCxTQUFTLGtCQUFrQixDQUFDLFFBQWtCO0lBQzVDLFFBQVEsUUFBUSxFQUFFLENBQUM7UUFDakIsS0FBSyxLQUFLO1lBQ1IsT0FBTyxRQUFRLENBQUM7UUFDbEIsS0FBSyxRQUFRO1lBQ1gsT0FBTyxLQUFLLENBQUM7UUFDZixLQUFLLE1BQU07WUFDVCxPQUFPLE9BQU8sQ0FBQztRQUNqQixLQUFLLE9BQU87WUFDVixPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIFRlbXBsYXRlUmVmLFxuICBjb21wdXRlZCxcbiAgaW5qZWN0LFxuICBpbnB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGbG93U3RhdHVzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Zsb3ctc3RhdHVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgc3RyYWlnaHRQYXRoIH0gZnJvbSAnLi4vLi4vbWF0aC9lZGdlLXBhdGgvc3RyYWlnaC1wYXRoJztcbmltcG9ydCB7IFNwYWNlUG9pbnRDb250ZXh0RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9zcGFjZS1wb2ludC1jb250ZXh0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBDb25uZWN0aW9uTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvY29ubmVjdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBiZXppZXJQYXRoIH0gZnJvbSAnLi4vLi4vbWF0aC9lZGdlLXBhdGgvYmV6aWVyLXBhdGgnO1xuaW1wb3J0IHsgaGFzaENvZGUgfSBmcm9tICcuLi8uLi91dGlscy9oYXNoJztcbmltcG9ydCB7IFBvc2l0aW9uIH0gZnJvbSAnLi4vLi4vdHlwZXMvcG9zaXRpb24udHlwZSc7XG5pbXBvcnQgeyBzbW9vdGhTdGVwUGF0aCB9IGZyb20gJy4uLy4uL21hdGgvZWRnZS1wYXRoL3Ntb290aC1zdGVwLXBhdGgnO1xuaW1wb3J0IHsgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ2dbY29ubmVjdGlvbl0nLFxuICB0ZW1wbGF0ZTogYFxuICAgIEBpZiAobW9kZWwoKS50eXBlID09PSAnZGVmYXVsdCcpIHtcbiAgICAgIEBpZiAocGF0aCgpOyBhcyBwYXRoKSB7XG4gICAgICAgIDxzdmc6cGF0aFxuICAgICAgICAgIFthdHRyLmRdPVwicGF0aFwiXG4gICAgICAgICAgW2F0dHIubWFya2VyLWVuZF09XCJtYXJrZXJVcmwoKVwiXG4gICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cImRlZmF1bHRDb2xvclwiXG4gICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjJcIlxuICAgICAgICAvPlxuICAgICAgfVxuICAgIH1cblxuICAgIEBpZiAobW9kZWwoKS50eXBlID09PSAndGVtcGxhdGUnKSB7XG4gICAgICBAaWYgKHRlbXBsYXRlKCk7IGFzIHRlbXBsYXRlKSB7XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZTsgY29udGV4dDogZ2V0Q29udGV4dCgpXCIgLz5cbiAgICAgIH1cbiAgICB9XG4gIGAsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbTmdUZW1wbGF0ZU91dGxldF0sXG59KVxuZXhwb3J0IGNsYXNzIENvbm5lY3Rpb25Db21wb25lbnQge1xuICBwdWJsaWMgbW9kZWwgPSBpbnB1dC5yZXF1aXJlZDxDb25uZWN0aW9uTW9kZWw+KCk7XG5cbiAgcHVibGljIHRlbXBsYXRlID0gaW5wdXQ8VGVtcGxhdGVSZWY8YW55Pj4oKTtcblxuICBwcml2YXRlIGZsb3dTdGF0dXNTZXJ2aWNlID0gaW5qZWN0KEZsb3dTdGF0dXNTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBzcGFjZVBvaW50Q29udGV4dCA9IGluamVjdChTcGFjZVBvaW50Q29udGV4dERpcmVjdGl2ZSk7XG5cbiAgcHJvdGVjdGVkIHBhdGggPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3Qgc3RhdHVzID0gdGhpcy5mbG93U3RhdHVzU2VydmljZS5zdGF0dXMoKTtcblxuICAgIGlmIChzdGF0dXMuc3RhdGUgPT09ICdjb25uZWN0aW9uLXN0YXJ0Jykge1xuICAgICAgY29uc3Qgc291cmNlSGFuZGxlID0gc3RhdHVzLnBheWxvYWQuc291cmNlSGFuZGxlO1xuICAgICAgY29uc3Qgc291cmNlUG9pbnQgPSBzb3VyY2VIYW5kbGUucG9pbnRBYnNvbHV0ZSgpO1xuICAgICAgY29uc3Qgc291cmNlUG9zaXRpb24gPSBzb3VyY2VIYW5kbGUucmF3SGFuZGxlLnBvc2l0aW9uO1xuXG4gICAgICBjb25zdCB0YXJnZXRQb2ludCA9IHRoaXMuc3BhY2VQb2ludENvbnRleHQuc3ZnQ3VycmVudFNwYWNlUG9pbnQoKTtcbiAgICAgIGNvbnN0IHRhcmdldFBvc2l0aW9uID0gZ2V0T3Bwb3NpdGVQb3N0aW9uKFxuICAgICAgICBzb3VyY2VIYW5kbGUucmF3SGFuZGxlLnBvc2l0aW9uLFxuICAgICAgKTtcblxuICAgICAgc3dpdGNoICh0aGlzLm1vZGVsKCkuY3VydmUpIHtcbiAgICAgICAgY2FzZSAnc3RyYWlnaHQnOlxuICAgICAgICAgIHJldHVybiBzdHJhaWdodFBhdGgoc291cmNlUG9pbnQsIHRhcmdldFBvaW50KS5wYXRoO1xuICAgICAgICBjYXNlICdiZXppZXInOlxuICAgICAgICAgIHJldHVybiBiZXppZXJQYXRoKFxuICAgICAgICAgICAgc291cmNlUG9pbnQsXG4gICAgICAgICAgICB0YXJnZXRQb2ludCxcbiAgICAgICAgICAgIHNvdXJjZVBvc2l0aW9uLFxuICAgICAgICAgICAgdGFyZ2V0UG9zaXRpb24sXG4gICAgICAgICAgKS5wYXRoO1xuICAgICAgICBjYXNlICdzbW9vdGgtc3RlcCc6XG4gICAgICAgICAgcmV0dXJuIHNtb290aFN0ZXBQYXRoKFxuICAgICAgICAgICAgc291cmNlUG9pbnQsXG4gICAgICAgICAgICB0YXJnZXRQb2ludCxcbiAgICAgICAgICAgIHNvdXJjZVBvc2l0aW9uLFxuICAgICAgICAgICAgdGFyZ2V0UG9zaXRpb24sXG4gICAgICAgICAgKS5wYXRoO1xuICAgICAgICBjYXNlICdzdGVwJzpcbiAgICAgICAgICByZXR1cm4gc21vb3RoU3RlcFBhdGgoXG4gICAgICAgICAgICBzb3VyY2VQb2ludCxcbiAgICAgICAgICAgIHRhcmdldFBvaW50LFxuICAgICAgICAgICAgc291cmNlUG9zaXRpb24sXG4gICAgICAgICAgICB0YXJnZXRQb3NpdGlvbixcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgKS5wYXRoO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdGF0dXMuc3RhdGUgPT09ICdjb25uZWN0aW9uLXZhbGlkYXRpb24nKSB7XG4gICAgICBjb25zdCBzb3VyY2VIYW5kbGUgPSBzdGF0dXMucGF5bG9hZC5zb3VyY2VIYW5kbGU7XG4gICAgICBjb25zdCBzb3VyY2VQb2ludCA9IHNvdXJjZUhhbmRsZS5wb2ludEFic29sdXRlKCk7XG4gICAgICBjb25zdCBzb3VyY2VQb3NpdGlvbiA9IHNvdXJjZUhhbmRsZS5yYXdIYW5kbGUucG9zaXRpb247XG5cbiAgICAgIGNvbnN0IHRhcmdldEhhbmRsZSA9IHN0YXR1cy5wYXlsb2FkLnRhcmdldEhhbmRsZTtcbiAgICAgIC8vIGlnbm9yZSBtYWduZXQgaWYgdmFsaWRhdGlvbiBmYWlsZWRcbiAgICAgIGNvbnN0IHRhcmdldFBvaW50ID0gc3RhdHVzLnBheWxvYWQudmFsaWRcbiAgICAgICAgPyB0YXJnZXRIYW5kbGUucG9pbnRBYnNvbHV0ZSgpXG4gICAgICAgIDogdGhpcy5zcGFjZVBvaW50Q29udGV4dC5zdmdDdXJyZW50U3BhY2VQb2ludCgpO1xuICAgICAgY29uc3QgdGFyZ2V0UG9zaXRpb24gPSBzdGF0dXMucGF5bG9hZC52YWxpZFxuICAgICAgICA/IHRhcmdldEhhbmRsZS5yYXdIYW5kbGUucG9zaXRpb25cbiAgICAgICAgOiBnZXRPcHBvc2l0ZVBvc3Rpb24oc291cmNlSGFuZGxlLnJhd0hhbmRsZS5wb3NpdGlvbik7XG5cbiAgICAgIHN3aXRjaCAodGhpcy5tb2RlbCgpLmN1cnZlKSB7XG4gICAgICAgIGNhc2UgJ3N0cmFpZ2h0JzpcbiAgICAgICAgICByZXR1cm4gc3RyYWlnaHRQYXRoKHNvdXJjZVBvaW50LCB0YXJnZXRQb2ludCkucGF0aDtcbiAgICAgICAgY2FzZSAnYmV6aWVyJzpcbiAgICAgICAgICByZXR1cm4gYmV6aWVyUGF0aChcbiAgICAgICAgICAgIHNvdXJjZVBvaW50LFxuICAgICAgICAgICAgdGFyZ2V0UG9pbnQsXG4gICAgICAgICAgICBzb3VyY2VQb3NpdGlvbixcbiAgICAgICAgICAgIHRhcmdldFBvc2l0aW9uLFxuICAgICAgICAgICkucGF0aDtcbiAgICAgICAgY2FzZSAnc21vb3RoLXN0ZXAnOlxuICAgICAgICAgIHJldHVybiBzbW9vdGhTdGVwUGF0aChcbiAgICAgICAgICAgIHNvdXJjZVBvaW50LFxuICAgICAgICAgICAgdGFyZ2V0UG9pbnQsXG4gICAgICAgICAgICBzb3VyY2VQb3NpdGlvbixcbiAgICAgICAgICAgIHRhcmdldFBvc2l0aW9uLFxuICAgICAgICAgICkucGF0aDtcbiAgICAgICAgY2FzZSAnc3RlcCc6XG4gICAgICAgICAgcmV0dXJuIHNtb290aFN0ZXBQYXRoKFxuICAgICAgICAgICAgc291cmNlUG9pbnQsXG4gICAgICAgICAgICB0YXJnZXRQb2ludCxcbiAgICAgICAgICAgIHNvdXJjZVBvc2l0aW9uLFxuICAgICAgICAgICAgdGFyZ2V0UG9zaXRpb24sXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICkucGF0aDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfSk7XG5cbiAgcHJvdGVjdGVkIG1hcmtlclVybCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBtYXJrZXIgPSB0aGlzLm1vZGVsKCkuc2V0dGluZ3MubWFya2VyO1xuXG4gICAgaWYgKG1hcmtlcikge1xuICAgICAgcmV0dXJuIGB1cmwoIyR7aGFzaENvZGUoSlNPTi5zdHJpbmdpZnkobWFya2VyKSl9KWA7XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xuICB9KTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGVmYXVsdENvbG9yID0gJ3JnYigxNzcsIDE3NywgMTgzKSc7XG5cbiAgcHJvdGVjdGVkIGdldENvbnRleHQoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRpbXBsaWNpdDoge1xuICAgICAgICBwYXRoOiB0aGlzLnBhdGgsXG4gICAgICAgIG1hcmtlcjogdGhpcy5tYXJrZXJVcmwsXG4gICAgICB9LFxuICAgIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0T3Bwb3NpdGVQb3N0aW9uKHBvc2l0aW9uOiBQb3NpdGlvbik6IFBvc2l0aW9uIHtcbiAgc3dpdGNoIChwb3NpdGlvbikge1xuICAgIGNhc2UgJ3RvcCc6XG4gICAgICByZXR1cm4gJ2JvdHRvbSc7XG4gICAgY2FzZSAnYm90dG9tJzpcbiAgICAgIHJldHVybiAndG9wJztcbiAgICBjYXNlICdsZWZ0JzpcbiAgICAgIHJldHVybiAncmlnaHQnO1xuICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgIHJldHVybiAnbGVmdCc7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,50 +1,57 @@
|
|
|
1
|
-
import { DestroyRef, Directive, EventEmitter,
|
|
2
|
-
import { merge, tap } from
|
|
3
|
-
import { takeUntilDestroyed } from
|
|
4
|
-
import { ComponentEventBusService } from
|
|
1
|
+
import { DestroyRef, Directive, EventEmitter, inject, signal, OutputEmitterRef, } from '@angular/core';
|
|
2
|
+
import { merge, Observable, tap } from 'rxjs';
|
|
3
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
4
|
+
import { ComponentEventBusService } from '../../services/component-event-bus.service';
|
|
5
|
+
import { NodeAccessorService } from '../../services/node-accessor.service';
|
|
5
6
|
import * as i0 from "@angular/core";
|
|
6
7
|
export class CustomNodeBaseComponent {
|
|
7
8
|
constructor() {
|
|
8
9
|
this.eventBus = inject(ComponentEventBusService);
|
|
10
|
+
this.nodeService = inject(NodeAccessorService);
|
|
9
11
|
this.destroyRef = inject(DestroyRef);
|
|
10
12
|
/**
|
|
11
13
|
* Signal with selected state of node
|
|
12
14
|
*/
|
|
13
|
-
this.selected =
|
|
15
|
+
this.selected = this.nodeService.model().selected;
|
|
14
16
|
this.data = signal(undefined);
|
|
15
17
|
}
|
|
16
|
-
set _selected(value) {
|
|
17
|
-
this.selected.set(value);
|
|
18
|
-
}
|
|
19
18
|
ngOnInit() {
|
|
20
|
-
this.trackEvents()
|
|
21
|
-
.pipe(takeUntilDestroyed(this.destroyRef))
|
|
22
|
-
.subscribe();
|
|
19
|
+
this.trackEvents().pipe(takeUntilDestroyed(this.destroyRef)).subscribe();
|
|
23
20
|
}
|
|
24
21
|
trackEvents() {
|
|
25
22
|
const props = Object.getOwnPropertyNames(this);
|
|
26
|
-
const
|
|
23
|
+
const emittersOrRefs = new Map();
|
|
27
24
|
for (const prop of props) {
|
|
28
25
|
const field = this[prop];
|
|
29
26
|
if (field instanceof EventEmitter) {
|
|
30
|
-
|
|
27
|
+
emittersOrRefs.set(field, prop);
|
|
28
|
+
}
|
|
29
|
+
if (field instanceof OutputEmitterRef) {
|
|
30
|
+
emittersOrRefs.set(outputRefToObservable(field), prop);
|
|
31
31
|
}
|
|
32
32
|
}
|
|
33
|
-
return merge(...Array.from(
|
|
33
|
+
return merge(...Array.from(emittersOrRefs.keys()).map((emitter) => emitter.pipe(tap((event) => {
|
|
34
34
|
this.eventBus.pushEvent({
|
|
35
|
-
nodeId: this.node.id,
|
|
36
|
-
eventName:
|
|
37
|
-
eventPayload: event
|
|
35
|
+
nodeId: this.nodeService.model()?.node.id ?? '',
|
|
36
|
+
eventName: emittersOrRefs.get(emitter),
|
|
37
|
+
eventPayload: event,
|
|
38
38
|
});
|
|
39
39
|
}))));
|
|
40
40
|
}
|
|
41
|
-
;
|
|
42
|
-
static { this.ɵ
|
|
43
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: CustomNodeBaseComponent, inputs: { _selected: "_selected" }, ngImport: i0 }); }
|
|
41
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CustomNodeBaseComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
42
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: CustomNodeBaseComponent, ngImport: i0 }); }
|
|
44
43
|
}
|
|
45
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
44
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CustomNodeBaseComponent, decorators: [{
|
|
46
45
|
type: Directive
|
|
47
|
-
}]
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
46
|
+
}] });
|
|
47
|
+
function outputRefToObservable(ref) {
|
|
48
|
+
return new Observable((subscriber) => {
|
|
49
|
+
const subscription = ref.subscribe((value) => {
|
|
50
|
+
subscriber.next(value);
|
|
51
|
+
});
|
|
52
|
+
return () => {
|
|
53
|
+
subscription.unsubscribe();
|
|
54
|
+
};
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLW5vZGUtYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmZsb3ctbGliL3NyYy9saWIvdmZsb3cvY29tcG9uZW50cy9jdXN0b20tbm9kZS1iYXNlL2N1c3RvbS1ub2RlLWJhc2UuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxVQUFVLEVBQ1YsU0FBUyxFQUNULFlBQVksRUFHWixNQUFNLEVBQ04sTUFBTSxFQUVOLGdCQUFnQixHQUNqQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDOUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDdEYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7O0FBRzNFLE1BQU0sT0FBZ0IsdUJBQXVCO0lBRDdDO1FBRVUsYUFBUSxHQUFHLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQzVDLGdCQUFXLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUE7UUFFdkMsZUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUUxQzs7V0FFRztRQUNJLGFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRyxDQUFDLFFBQVEsQ0FBQztRQUU5QyxTQUFJLEdBQUcsTUFBTSxDQUFnQixTQUFTLENBQUMsQ0FBQztLQW9DaEQ7SUFsQ1EsUUFBUTtRQUNiLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDM0UsQ0FBQztJQUVPLFdBQVc7UUFDakIsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBRS9DLE1BQU0sY0FBYyxHQUFHLElBQUksR0FBRyxFQUErQixDQUFDO1FBQzlELEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7WUFDekIsTUFBTSxLQUFLLEdBQUksSUFBZ0MsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUV0RCxJQUFJLEtBQUssWUFBWSxZQUFZLEVBQUUsQ0FBQztnQkFDbEMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDbEMsQ0FBQztZQUVELElBQUksS0FBSyxZQUFZLGdCQUFnQixFQUFFLENBQUM7Z0JBQ3RDLGNBQWMsQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDekQsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLEtBQUssQ0FDVixHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FDbkQsT0FBTyxDQUFDLElBQUksQ0FDVixHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNaLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDO2dCQUN0QixNQUFNLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUU7Z0JBQy9DLFNBQVMsRUFBRSxjQUFjLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBRTtnQkFDdkMsWUFBWSxFQUFFLEtBQUs7YUFDcEIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQ0gsQ0FDRixDQUNGLENBQUM7SUFDSixDQUFDOytHQTlDbUIsdUJBQXVCO21HQUF2Qix1QkFBdUI7OzRGQUF2Qix1QkFBdUI7a0JBRDVDLFNBQVM7O0FBa0RWLFNBQVMscUJBQXFCLENBQUMsR0FBOEI7SUFDM0QsT0FBTyxJQUFJLFVBQVUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFO1FBQ25DLE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUMzQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxHQUFHLEVBQUU7WUFDVixZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDN0IsQ0FBQyxDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRGVzdHJveVJlZixcbiAgRGlyZWN0aXZlLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIGluamVjdCxcbiAgc2lnbmFsLFxuICBpbnB1dCxcbiAgT3V0cHV0RW1pdHRlclJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBtZXJnZSwgT2JzZXJ2YWJsZSwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBDb21wb25lbnRFdmVudEJ1c1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb21wb25lbnQtZXZlbnQtYnVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgTm9kZUFjY2Vzc29yU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL25vZGUtYWNjZXNzb3Iuc2VydmljZSc7XG5cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEN1c3RvbU5vZGVCYXNlQ29tcG9uZW50PFQgPSBhbnk+IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHJpdmF0ZSBldmVudEJ1cyA9IGluamVjdChDb21wb25lbnRFdmVudEJ1c1NlcnZpY2UpO1xuICBwcml2YXRlIG5vZGVTZXJ2aWNlID0gaW5qZWN0KE5vZGVBY2Nlc3NvclNlcnZpY2UpXG5cbiAgcHJvdGVjdGVkIGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgLyoqXG4gICAqIFNpZ25hbCB3aXRoIHNlbGVjdGVkIHN0YXRlIG9mIG5vZGVcbiAgICovXG4gIHB1YmxpYyBzZWxlY3RlZCA9IHRoaXMubm9kZVNlcnZpY2UubW9kZWwoKSEuc2VsZWN0ZWQ7XG5cbiAgcHVibGljIGRhdGEgPSBzaWduYWw8VCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy50cmFja0V2ZW50cygpLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSB0cmFja0V2ZW50cygpIHtcbiAgICBjb25zdCBwcm9wcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpO1xuXG4gICAgY29uc3QgZW1pdHRlcnNPclJlZnMgPSBuZXcgTWFwPE9ic2VydmFibGU8dW5rbm93bj4sIHN0cmluZz4oKTtcbiAgICBmb3IgKGNvbnN0IHByb3Agb2YgcHJvcHMpIHtcbiAgICAgIGNvbnN0IGZpZWxkID0gKHRoaXMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW3Byb3BdO1xuXG4gICAgICBpZiAoZmllbGQgaW5zdGFuY2VvZiBFdmVudEVtaXR0ZXIpIHtcbiAgICAgICAgZW1pdHRlcnNPclJlZnMuc2V0KGZpZWxkLCBwcm9wKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZpZWxkIGluc3RhbmNlb2YgT3V0cHV0RW1pdHRlclJlZikge1xuICAgICAgICBlbWl0dGVyc09yUmVmcy5zZXQob3V0cHV0UmVmVG9PYnNlcnZhYmxlKGZpZWxkKSwgcHJvcCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lcmdlKFxuICAgICAgLi4uQXJyYXkuZnJvbShlbWl0dGVyc09yUmVmcy5rZXlzKCkpLm1hcCgoZW1pdHRlcikgPT5cbiAgICAgICAgZW1pdHRlci5waXBlKFxuICAgICAgICAgIHRhcCgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZXZlbnRCdXMucHVzaEV2ZW50KHtcbiAgICAgICAgICAgICAgbm9kZUlkOiB0aGlzLm5vZGVTZXJ2aWNlLm1vZGVsKCk/Lm5vZGUuaWQgPz8gJycsXG4gICAgICAgICAgICAgIGV2ZW50TmFtZTogZW1pdHRlcnNPclJlZnMuZ2V0KGVtaXR0ZXIpISxcbiAgICAgICAgICAgICAgZXZlbnRQYXlsb2FkOiBldmVudCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pLFxuICAgICAgICApLFxuICAgICAgKSxcbiAgICApO1xuICB9XG59XG5cbmZ1bmN0aW9uIG91dHB1dFJlZlRvT2JzZXJ2YWJsZShyZWY6IE91dHB1dEVtaXR0ZXJSZWY8dW5rbm93bj4pIHtcbiAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChzdWJzY3JpYmVyKSA9PiB7XG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gcmVmLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfTtcbiAgfSk7XG59XG4iXX0=
|
|
@@ -1,18 +1,16 @@
|
|
|
1
|
-
import { Component,
|
|
1
|
+
import { Component, input } from '@angular/core';
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
3
|
export class DefaultNodeComponent {
|
|
4
4
|
constructor() {
|
|
5
|
-
this.selected = false;
|
|
5
|
+
this.selected = input(false);
|
|
6
6
|
}
|
|
7
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
8
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
7
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DefaultNodeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
8
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "17.3.12", type: DefaultNodeComponent, isStandalone: true, selector: "default-node", inputs: { selected: { classPropertyName: "selected", publicName: "selected", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.selected": "selected()" } }, ngImport: i0, template: "<ng-content />\n", styles: [":host{border:1.5px solid #1b262c;border-radius:5px;display:flex;align-items:center;justify-content:center;color:#000;background-color:#fff}:host(.selected){border-width:2px}\n"] }); }
|
|
9
9
|
}
|
|
10
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
10
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DefaultNodeComponent, decorators: [{
|
|
11
11
|
type: Component,
|
|
12
|
-
args: [{ selector: 'default-node', host: {
|
|
13
|
-
'[class.selected]': 'selected'
|
|
12
|
+
args: [{ standalone: true, selector: 'default-node', host: {
|
|
13
|
+
'[class.selected]': 'selected()',
|
|
14
14
|
}, template: "<ng-content />\n", styles: [":host{border:1.5px solid #1b262c;border-radius:5px;display:flex;align-items:center;justify-content:center;color:#000;background-color:#fff}:host(.selected){border-width:2px}\n"] }]
|
|
15
|
-
}]
|
|
16
|
-
|
|
17
|
-
}] } });
|
|
18
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC1ub2RlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC12Zmxvdy1saWIvc3JjL2xpYi92Zmxvdy9jb21wb25lbnRzL2RlZmF1bHQtbm9kZS9kZWZhdWx0LW5vZGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2NvbXBvbmVudHMvZGVmYXVsdC1ub2RlL2RlZmF1bHQtbm9kZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFlLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFVOUQsTUFBTSxPQUFPLG9CQUFvQjtJQVJqQztRQVVTLGFBQVEsR0FBRyxLQUFLLENBQUE7S0FDeEI7K0dBSFksb0JBQW9CO21HQUFwQixvQkFBb0IsOElDVmpDLGtCQUNBOzs0RkRTYSxvQkFBb0I7a0JBUmhDLFNBQVM7K0JBQ0UsY0FBYyxRQUdsQjt3QkFDSixrQkFBa0IsRUFBRSxVQUFVO3FCQUMvQjs4QkFJTSxRQUFRO3NCQURkLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEhvc3RCaW5kaW5nLCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkZWZhdWx0LW5vZGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGVmYXVsdC1ub2RlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbYC4vZGVmYXVsdC1ub2RlLmNvbXBvbmVudC5zY3NzYF0sXG4gIGhvc3Q6IHtcbiAgICAnW2NsYXNzLnNlbGVjdGVkXSc6ICdzZWxlY3RlZCdcbiAgfVxufSlcbmV4cG9ydCBjbGFzcyBEZWZhdWx0Tm9kZUNvbXBvbmVudCB7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZWxlY3RlZCA9IGZhbHNlXG59XG4iLCI8bmctY29udGVudCAvPlxuIl19
|
|
15
|
+
}] });
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC1ub2RlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC12Zmxvdy1saWIvc3JjL2xpYi92Zmxvdy9jb21wb25lbnRzL2RlZmF1bHQtbm9kZS9kZWZhdWx0LW5vZGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2NvbXBvbmVudHMvZGVmYXVsdC1ub2RlL2RlZmF1bHQtbm9kZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFXakQsTUFBTSxPQUFPLG9CQUFvQjtJQVRqQztRQVVTLGFBQVEsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDaEM7K0dBRlksb0JBQW9CO21HQUFwQixvQkFBb0IsK1FDWGpDLGtCQUNBOzs0RkRVYSxvQkFBb0I7a0JBVGhDLFNBQVM7aUNBQ0ksSUFBSSxZQUNOLGNBQWMsUUFHbEI7d0JBQ0osa0JBQWtCLEVBQUUsWUFBWTtxQkFDakMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGlucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ2RlZmF1bHQtbm9kZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9kZWZhdWx0LW5vZGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFtgLi9kZWZhdWx0LW5vZGUuY29tcG9uZW50LnNjc3NgXSxcbiAgaG9zdDoge1xuICAgICdbY2xhc3Muc2VsZWN0ZWRdJzogJ3NlbGVjdGVkKCknLFxuICB9LFxufSlcbmV4cG9ydCBjbGFzcyBEZWZhdWx0Tm9kZUNvbXBvbmVudCB7XG4gIHB1YmxpYyBzZWxlY3RlZCA9IGlucHV0KGZhbHNlKTtcbn1cbiIsIjxuZy1jb250ZW50IC8+XG4iXX0=
|