ngx-vflow 0.14.1 → 0.16.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.
Files changed (47) hide show
  1. package/esm2022/lib/vflow/components/background/background.component.mjs +72 -4
  2. package/esm2022/lib/vflow/components/connection/connection.component.mjs +6 -1
  3. package/esm2022/lib/vflow/components/custom-node-base/custom-node-base.component.mjs +5 -7
  4. package/esm2022/lib/vflow/components/handle/handle.component.mjs +16 -14
  5. package/esm2022/lib/vflow/components/node/node.component.mjs +8 -3
  6. package/esm2022/lib/vflow/components/vflow/vflow.component.mjs +12 -6
  7. package/esm2022/lib/vflow/directives/drag-handle.directive.mjs +27 -0
  8. package/esm2022/lib/vflow/directives/map-context.directive.mjs +24 -17
  9. package/esm2022/lib/vflow/interfaces/edge.interface.mjs +1 -1
  10. package/esm2022/lib/vflow/interfaces/optimization.interface.mjs +1 -1
  11. package/esm2022/lib/vflow/math/edge-path/smooth-step-path.mjs +170 -0
  12. package/esm2022/lib/vflow/models/edge.model.mjs +6 -1
  13. package/esm2022/lib/vflow/models/node.model.mjs +2 -1
  14. package/esm2022/lib/vflow/models/toolbar.model.mjs +36 -0
  15. package/esm2022/lib/vflow/public-components/minimap/minimap.component.mjs +8 -2
  16. package/esm2022/lib/vflow/public-components/node-toolbar/node-toolbar.component.mjs +66 -0
  17. package/esm2022/lib/vflow/services/draggable.service.mjs +13 -15
  18. package/esm2022/lib/vflow/services/node-rendering.service.mjs +8 -1
  19. package/esm2022/lib/vflow/services/overlays.service.mjs +34 -0
  20. package/esm2022/lib/vflow/testing-utils/provide-custom-node-mocks.mjs +67 -0
  21. package/esm2022/lib/vflow/types/background.type.mjs +1 -1
  22. package/esm2022/lib/vflow/utils/is-group-node.mjs +4 -0
  23. package/esm2022/lib/vflow/vflow.module.mjs +17 -5
  24. package/esm2022/public-api.mjs +5 -1
  25. package/fesm2022/ngx-vflow.mjs +554 -65
  26. package/fesm2022/ngx-vflow.mjs.map +1 -1
  27. package/lib/vflow/components/background/background.component.d.ts +13 -0
  28. package/lib/vflow/components/handle/handle.component.d.ts +3 -3
  29. package/lib/vflow/components/node/node.component.d.ts +2 -0
  30. package/lib/vflow/components/vflow/vflow.component.d.ts +2 -0
  31. package/lib/vflow/directives/drag-handle.directive.d.ts +8 -0
  32. package/lib/vflow/directives/map-context.directive.d.ts +3 -2
  33. package/lib/vflow/interfaces/edge.interface.d.ts +1 -1
  34. package/lib/vflow/interfaces/optimization.interface.d.ts +13 -0
  35. package/lib/vflow/math/edge-path/smooth-step-path.d.ts +5 -0
  36. package/lib/vflow/models/node.model.d.ts +1 -0
  37. package/lib/vflow/models/toolbar.model.d.ts +19 -0
  38. package/lib/vflow/public-components/node-toolbar/node-toolbar.component.d.ts +22 -0
  39. package/lib/vflow/services/draggable.service.d.ts +0 -5
  40. package/lib/vflow/services/node-rendering.service.d.ts +2 -0
  41. package/lib/vflow/services/overlays.service.d.ts +11 -0
  42. package/lib/vflow/testing-utils/provide-custom-node-mocks.d.ts +2 -0
  43. package/lib/vflow/types/background.type.d.ts +24 -1
  44. package/lib/vflow/utils/is-group-node.d.ts +2 -0
  45. package/lib/vflow/vflow.module.d.ts +14 -12
  46. package/package.json +3 -3
  47. package/public-api.d.ts +3 -0
@@ -3,18 +3,23 @@ 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
9
  import * as i1 from "@angular/common";
8
10
  const defaultBg = '#fff';
9
11
  const defaultGap = 20;
10
12
  const defaultDotSize = 2;
11
13
  const defaultDotColor = 'rgb(177, 177, 183)';
14
+ const defaultImageScale = 0.1;
15
+ const defaultRepeated = true;
12
16
  export class BackgroundComponent {
13
17
  constructor() {
14
18
  this.viewportService = inject(ViewportService);
15
19
  this.rootSvg = inject(RootSvgReferenceDirective).element;
16
20
  this.settingsService = inject(FlowSettingsService);
17
21
  this.backgroundSignal = this.settingsService.background;
22
+ // DOTS PATTERN
18
23
  this.scaledGap = computed(() => {
19
24
  const background = this.backgroundSignal();
20
25
  if (background.type === 'dots') {
@@ -25,7 +30,13 @@ export class BackgroundComponent {
25
30
  });
26
31
  this.x = computed(() => this.viewportService.readableViewport().x % this.scaledGap());
27
32
  this.y = computed(() => this.viewportService.readableViewport().y % this.scaledGap());
28
- this.patternColor = computed(() => this.backgroundSignal().color ?? defaultDotColor);
33
+ this.patternColor = computed(() => {
34
+ const bg = this.backgroundSignal();
35
+ if (bg.type === 'dots') {
36
+ return bg.color ?? defaultDotColor;
37
+ }
38
+ return defaultDotColor;
39
+ });
29
40
  this.patternSize = computed(() => {
30
41
  const background = this.backgroundSignal();
31
42
  if (background.type === 'dots') {
@@ -33,6 +44,56 @@ export class BackgroundComponent {
33
44
  }
34
45
  return 0;
35
46
  });
47
+ // IMAGE PATTERN
48
+ this.bgImageSrc = computed(() => {
49
+ const background = this.backgroundSignal();
50
+ return background.type === 'image' ? background.src : '';
51
+ });
52
+ this.imageSize = toSignal(toObservable(this.backgroundSignal).pipe(switchMap(() => createImage(this.bgImageSrc())), map((image) => ({ width: image.naturalWidth, height: image.naturalHeight }))), { initialValue: { width: 0, height: 0 } });
53
+ this.scaledImageWidth = computed(() => {
54
+ const background = this.backgroundSignal();
55
+ if (background.type === 'image') {
56
+ const zoom = background.fixed ? 1 : this.viewportService.readableViewport().zoom;
57
+ return this.imageSize().width * zoom * (background.scale ?? defaultImageScale);
58
+ }
59
+ return 0;
60
+ });
61
+ this.scaledImageHeight = computed(() => {
62
+ const background = this.backgroundSignal();
63
+ if (background.type === 'image') {
64
+ const zoom = background.fixed ? 1 : this.viewportService.readableViewport().zoom;
65
+ return this.imageSize().height * zoom * (background.scale ?? defaultImageScale);
66
+ }
67
+ return 0;
68
+ });
69
+ this.imageX = computed(() => {
70
+ const background = this.backgroundSignal();
71
+ if (background.type === 'image') {
72
+ if (!background.repeat) {
73
+ return background.fixed ? 0 : this.viewportService.readableViewport().x;
74
+ }
75
+ return background.fixed
76
+ ? 0
77
+ : this.viewportService.readableViewport().x % this.scaledImageWidth();
78
+ }
79
+ return 0;
80
+ });
81
+ this.imageY = computed(() => {
82
+ const background = this.backgroundSignal();
83
+ if (background.type === 'image') {
84
+ if (!background.repeat) {
85
+ return background.fixed ? 0 : this.viewportService.readableViewport().y;
86
+ }
87
+ return background.fixed
88
+ ? 0
89
+ : this.viewportService.readableViewport().y % this.scaledImageHeight();
90
+ }
91
+ return 0;
92
+ });
93
+ this.repeated = computed(() => {
94
+ const background = this.backgroundSignal();
95
+ return background.type === 'image' && (background.repeat ?? defaultRepeated);
96
+ });
36
97
  // Without ID there will be pattern collision for several flows on the page
37
98
  // Later pattern ID may be exposed to API
38
99
  this.patternId = id();
@@ -48,10 +109,17 @@ export class BackgroundComponent {
48
109
  });
49
110
  }
50
111
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: BackgroundComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
51
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: BackgroundComponent, selector: "g[background]", ngImport: i0, template: "<ng-container *ngIf=\"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</ng-container>\n", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
112
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: BackgroundComponent, selector: "g[background]", ngImport: i0, template: "<ng-container *ngIf=\"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</ng-container>\n\n<ng-container *ngIf=\"backgroundSignal().type === 'image'\">\n <ng-container *ngIf=\"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 </ng-container>\n\n <ng-container *ngIf=\"!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 </ng-container>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
52
113
  }
53
114
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: BackgroundComponent, decorators: [{
54
115
  type: Component,
55
- args: [{ selector: 'g[background]', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"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</ng-container>\n" }]
116
+ args: [{ selector: 'g[background]', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"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</ng-container>\n\n<ng-container *ngIf=\"backgroundSignal().type === 'image'\">\n <ng-container *ngIf=\"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 </ng-container>\n\n <ng-container *ngIf=\"!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 </ng-container>\n</ng-container>\n" }]
56
117
  }], ctorParameters: function () { return []; } });
57
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja2dyb3VuZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmZsb3ctbGliL3NyYy9saWIvdmZsb3cvY29tcG9uZW50cy9iYWNrZ3JvdW5kL2JhY2tncm91bmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2NvbXBvbmVudHMvYmFja2dyb3VuZC9iYWNrZ3JvdW5kLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0YsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQzs7O0FBRTNFLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQTtBQUN4QixNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUE7QUFDckIsTUFBTSxjQUFjLEdBQUcsQ0FBQyxDQUFBO0FBQ3hCLE1BQU0sZUFBZSxHQUFHLG9CQUFvQixDQUFBO0FBTzVDLE1BQU0sT0FBTyxtQkFBbUI7SUF3QzlCO1FBdkNRLG9CQUFlLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFBO1FBQ3pDLFlBQU8sR0FBRyxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQyxPQUFPLENBQUE7UUFDbkQsb0JBQWUsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUU1QyxxQkFBZ0IsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQTtRQUVsRCxjQUFTLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNsQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQTtZQUUxQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFO2dCQUM5QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGdCQUFnQixFQUFFLENBQUMsSUFBSSxDQUFBO2dCQUV6RCxPQUFPLElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksVUFBVSxDQUFDLENBQUE7YUFDN0M7WUFFRCxPQUFPLENBQUMsQ0FBQTtRQUNWLENBQUMsQ0FBQyxDQUFBO1FBRVEsTUFBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFBO1FBRWhGLE1BQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQTtRQUVoRixpQkFBWSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxLQUFLLElBQUksZUFBZSxDQUFDLENBQUE7UUFFL0UsZ0JBQVcsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ3BDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFBO1lBRTFDLElBQUksVUFBVSxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUU7Z0JBQzlCLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLGdCQUFnQixFQUFFLENBQUMsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksSUFBSSxjQUFjLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQTthQUNoRztZQUVELE9BQU8sQ0FBQyxDQUFBO1FBQ1YsQ0FBQyxDQUFDLENBQUE7UUFFRiwyRUFBMkU7UUFDM0UseUNBQXlDO1FBQy9CLGNBQVMsR0FBRyxFQUFFLEVBQUUsQ0FBQztRQUNqQixlQUFVLEdBQUcsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUE7UUFHOUMsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNWLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFBO1lBRTFDLElBQUksVUFBVSxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUU7Z0JBQzlCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLGVBQWUsR0FBRyxVQUFVLENBQUMsZUFBZSxJQUFJLFNBQVMsQ0FBQTthQUM3RTtZQUVELElBQUksVUFBVSxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUU7Z0JBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLGVBQWUsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFBO2FBQ3REO1FBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDOytHQXBEVSxtQkFBbUI7bUdBQW5CLG1CQUFtQixxRENoQmhDLHlrQkF5QkE7OzRGRFRhLG1CQUFtQjtrQkFML0IsU0FBUzsrQkFDRSxlQUFlLG1CQUVSLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBjb21wdXRlZCwgZWZmZWN0LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFZpZXdwb3J0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3ZpZXdwb3J0LnNlcnZpY2UnO1xuaW1wb3J0IHsgUm9vdFN2Z1JlZmVyZW5jZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvcmVmZXJlbmNlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBpZCB9IGZyb20gJy4uLy4uL3V0aWxzL2lkJztcbmltcG9ydCB7IEZsb3dTZXR0aW5nc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mbG93LXNldHRpbmdzLnNlcnZpY2UnO1xuXG5jb25zdCBkZWZhdWx0QmcgPSAnI2ZmZidcbmNvbnN0IGRlZmF1bHRHYXAgPSAyMFxuY29uc3QgZGVmYXVsdERvdFNpemUgPSAyXG5jb25zdCBkZWZhdWx0RG90Q29sb3IgPSAncmdiKDE3NywgMTc3LCAxODMpJ1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdnW2JhY2tncm91bmRdJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2JhY2tncm91bmQuY29tcG9uZW50Lmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBCYWNrZ3JvdW5kQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSB2aWV3cG9ydFNlcnZpY2UgPSBpbmplY3QoVmlld3BvcnRTZXJ2aWNlKVxuICBwcml2YXRlIHJvb3RTdmcgPSBpbmplY3QoUm9vdFN2Z1JlZmVyZW5jZURpcmVjdGl2ZSkuZWxlbWVudFxuICBwcml2YXRlIHNldHRpbmdzU2VydmljZSA9IGluamVjdChGbG93U2V0dGluZ3NTZXJ2aWNlKTtcblxuICBwcm90ZWN0ZWQgYmFja2dyb3VuZFNpZ25hbCA9IHRoaXMuc2V0dGluZ3NTZXJ2aWNlLmJhY2tncm91bmRcblxuICBwcm90ZWN0ZWQgc2NhbGVkR2FwID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGJhY2tncm91bmQgPSB0aGlzLmJhY2tncm91bmRTaWduYWwoKVxuXG4gICAgaWYgKGJhY2tncm91bmQudHlwZSA9PT0gJ2RvdHMnKSB7XG4gICAgICBjb25zdCB6b29tID0gdGhpcy52aWV3cG9ydFNlcnZpY2UucmVhZGFibGVWaWV3cG9ydCgpLnpvb21cblxuICAgICAgcmV0dXJuIHpvb20gKiAoYmFja2dyb3VuZC5nYXAgPz8gZGVmYXVsdEdhcClcbiAgICB9XG5cbiAgICByZXR1cm4gMFxuICB9KVxuXG4gIHByb3RlY3RlZCB4ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy52aWV3cG9ydFNlcnZpY2UucmVhZGFibGVWaWV3cG9ydCgpLnggJSB0aGlzLnNjYWxlZEdhcCgpKVxuXG4gIHByb3RlY3RlZCB5ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy52aWV3cG9ydFNlcnZpY2UucmVhZGFibGVWaWV3cG9ydCgpLnkgJSB0aGlzLnNjYWxlZEdhcCgpKVxuXG4gIHByb3RlY3RlZCBwYXR0ZXJuQ29sb3IgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmJhY2tncm91bmRTaWduYWwoKS5jb2xvciA/PyBkZWZhdWx0RG90Q29sb3IpXG5cbiAgcHJvdGVjdGVkIHBhdHRlcm5TaXplID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGJhY2tncm91bmQgPSB0aGlzLmJhY2tncm91bmRTaWduYWwoKVxuXG4gICAgaWYgKGJhY2tncm91bmQudHlwZSA9PT0gJ2RvdHMnKSB7XG4gICAgICByZXR1cm4gKHRoaXMudmlld3BvcnRTZXJ2aWNlLnJlYWRhYmxlVmlld3BvcnQoKS56b29tICogKGJhY2tncm91bmQuc2l6ZSA/PyBkZWZhdWx0RG90U2l6ZSkpIC8gMlxuICAgIH1cblxuICAgIHJldHVybiAwXG4gIH0pXG5cbiAgLy8gV2l0aG91dCBJRCB0aGVyZSB3aWxsIGJlIHBhdHRlcm4gY29sbGlzaW9uIGZvciBzZXZlcmFsIGZsb3dzIG9uIHRoZSBwYWdlXG4gIC8vIExhdGVyIHBhdHRlcm4gSUQgbWF5IGJlIGV4cG9zZWQgdG8gQVBJXG4gIHByb3RlY3RlZCBwYXR0ZXJuSWQgPSBpZCgpO1xuICBwcm90ZWN0ZWQgcGF0dGVyblVybCA9IGB1cmwoIyR7dGhpcy5wYXR0ZXJuSWR9KWBcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgYmFja2dyb3VuZCA9IHRoaXMuYmFja2dyb3VuZFNpZ25hbCgpXG5cbiAgICAgIGlmIChiYWNrZ3JvdW5kLnR5cGUgPT09ICdkb3RzJykge1xuICAgICAgICB0aGlzLnJvb3RTdmcuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gYmFja2dyb3VuZC5iYWNrZ3JvdW5kQ29sb3IgPz8gZGVmYXVsdEJnXG4gICAgICB9XG5cbiAgICAgIGlmIChiYWNrZ3JvdW5kLnR5cGUgPT09ICdzb2xpZCcpIHtcbiAgICAgICAgdGhpcy5yb290U3ZnLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IGJhY2tncm91bmQuY29sb3JcbiAgICAgIH1cbiAgICB9KVxuICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiYmFja2dyb3VuZFNpZ25hbCgpLnR5cGUgPT09ICdkb3RzJ1wiPlxuICA8c3ZnOnBhdHRlcm5cbiAgICBbYXR0ci5pZF09XCJwYXR0ZXJuSWRcIlxuICAgIFthdHRyLnhdPVwieCgpXCJcbiAgICBbYXR0ci55XT1cInkoKVwiXG4gICAgW2F0dHIud2lkdGhdPVwic2NhbGVkR2FwKClcIlxuICAgIFthdHRyLmhlaWdodF09XCJzY2FsZWRHYXAoKVwiXG4gICAgcGF0dGVyblVuaXRzPVwidXNlclNwYWNlT25Vc2VcIlxuICA+XG4gICAgPHN2ZzpjaXJjbGVcbiAgICAgIFthdHRyLmN4XT1cInBhdHRlcm5TaXplKClcIlxuICAgICAgW2F0dHIuY3ldPVwicGF0dGVyblNpemUoKVwiXG4gICAgICBbYXR0ci5yXT1cInBhdHRlcm5TaXplKClcIlxuICAgICAgW2F0dHIuZmlsbF09XCJwYXR0ZXJuQ29sb3IoKVwiXG4gICAgLz5cbiAgPC9zdmc6cGF0dGVybj5cblxuICA8c3ZnOnJlY3RcbiAgICB4PVwiMFwiXG4gICAgeT1cIjBcIlxuICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgaGVpZ2h0PVwiMTAwJVwiXG4gICAgW2F0dHIuZmlsbF09XCJwYXR0ZXJuVXJsXCJcbiAgLz5cbjwvbmctY29udGFpbmVyPlxuIl19
118
+ function createImage(url) {
119
+ const image = new Image();
120
+ image.src = url;
121
+ return new Promise(resolve => {
122
+ image.onload = () => resolve(image);
123
+ });
124
+ }
125
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja2dyb3VuZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmZsb3ctbGliL3NyYy9saWIvdmZsb3cvY29tcG9uZW50cy9iYWNrZ3JvdW5kL2JhY2tncm91bmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2NvbXBvbmVudHMvYmFja2dyb3VuZC9iYWNrZ3JvdW5kLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0YsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7QUFFdEMsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFBO0FBQ3hCLE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQTtBQUNyQixNQUFNLGNBQWMsR0FBRyxDQUFDLENBQUE7QUFDeEIsTUFBTSxlQUFlLEdBQUcsb0JBQW9CLENBQUE7QUFDNUMsTUFBTSxpQkFBaUIsR0FBRyxHQUFHLENBQUE7QUFDN0IsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFBO0FBTzVCLE1BQU0sT0FBTyxtQkFBbUI7SUE4SDlCO1FBN0hR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RGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgY29tcHV0ZWQsIGVmZmVjdCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBWaWV3cG9ydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy92aWV3cG9ydC5zZXJ2aWNlJztcbmltcG9ydCB7IFJvb3RTdmdSZWZlcmVuY2VEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL3JlZmVyZW5jZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgaWQgfSBmcm9tICcuLi8uLi91dGlscy9pZCc7XG5pbXBvcnQgeyBGbG93U2V0dGluZ3NTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmxvdy1zZXR0aW5ncy5zZXJ2aWNlJztcbmltcG9ydCB7IHRvT2JzZXJ2YWJsZSwgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBtYXAsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuXG5jb25zdCBkZWZhdWx0QmcgPSAnI2ZmZidcbmNvbnN0IGRlZmF1bHRHYXAgPSAyMFxuY29uc3QgZGVmYXVsdERvdFNpemUgPSAyXG5jb25zdCBkZWZhdWx0RG90Q29sb3IgPSAncmdiKDE3NywgMTc3LCAxODMpJ1xuY29uc3QgZGVmYXVsdEltYWdlU2NhbGUgPSAwLjFcbmNvbnN0IGRlZmF1bHRSZXBlYXRlZCA9IHRydWVcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZ1tiYWNrZ3JvdW5kXScsXG4gIHRlbXBsYXRlVXJsOiAnLi9iYWNrZ3JvdW5kLmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgQmFja2dyb3VuZENvbXBvbmVudCB7XG4gIHByaXZhdGUgdmlld3BvcnRTZXJ2aWNlID0gaW5qZWN0KFZpZXdwb3J0U2VydmljZSlcbiAgcHJpdmF0ZSByb290U3ZnID0gaW5qZWN0KFJvb3RTdmdSZWZlcmVuY2VEaXJlY3RpdmUpLmVsZW1lbnRcbiAgcHJpdmF0ZSBzZXR0aW5nc1NlcnZpY2UgPSBpbmplY3QoRmxvd1NldHRpbmdzU2VydmljZSk7XG5cbiAgcHJvdGVjdGVkIGJhY2tncm91bmRTaWduYWwgPSB0aGlzLnNldHRpbmdzU2VydmljZS5iYWNrZ3JvdW5kXG5cbiAgLy8gRE9UUyBQQVRURVJOXG4gIHByb3RlY3RlZCBzY2FsZWRHYXAgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgYmFja2dyb3VuZCA9IHRoaXMuYmFja2dyb3VuZFNpZ25hbCgpXG5cbiAgICBpZiAoYmFja2dyb3VuZC50eXBlID09PSAnZG90cycpIHtcbiAgICAgIGNvbnN0IHpvb20gPSB0aGlzLnZpZXdwb3J0U2VydmljZS5yZWFkYWJsZVZpZXdwb3J0KCkuem9vbVxuXG4gICAgICByZXR1cm4gem9vbSAqIChiYWNrZ3JvdW5kLmdhcCA/PyBkZWZhdWx0R2FwKVxuICAgIH1cblxuICAgIHJldHVybiAwXG4gIH0pXG5cbiAgcHJvdGVjdGVkIHggPSBjb21wdXRlZCgoKSA9PiB0aGlzLnZpZXdwb3J0U2VydmljZS5yZWFkYWJsZVZpZXdwb3J0KCkueCAlIHRoaXMuc2NhbGVkR2FwKCkpXG5cbiAgcHJvdGVjdGVkIHkgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnZpZXdwb3J0U2VydmljZS5yZWFkYWJsZVZpZXdwb3J0KCkueSAlIHRoaXMuc2NhbGVkR2FwKCkpXG5cbiAgcHJvdGVjdGVkIHBhdHRlcm5Db2xvciA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBiZyA9IHRoaXMuYmFja2dyb3VuZFNpZ25hbCgpXG5cbiAgICBpZiAoYmcudHlwZSA9PT0gJ2RvdHMnKSB7XG4gICAgICByZXR1cm4gYmcuY29sb3IgPz8gZGVmYXVsdERvdENvbG9yXG4gICAgfVxuXG4gICAgcmV0dXJuIGRlZmF1bHREb3RDb2xvclxuICB9KVxuXG4gIHByb3RlY3RlZCBwYXR0ZXJuU2l6ZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBiYWNrZ3JvdW5kID0gdGhpcy5iYWNrZ3JvdW5kU2lnbmFsKClcblxuICAgIGlmIChiYWNrZ3JvdW5kLnR5cGUgPT09ICdkb3RzJykge1xuICAgICAgcmV0dXJuICh0aGlzLnZpZXdwb3J0U2VydmljZS5yZWFkYWJsZVZpZXdwb3J0KCkuem9vbSAqIChiYWNrZ3JvdW5kLnNpemUgPz8gZGVmYXVsdERvdFNpemUpKSAvIDJcbiAgICB9XG5cbiAgICByZXR1cm4gMFxuICB9KVxuXG4gIC8vIElNQUdFIFBBVFRFUk5cbiAgcHJvdGVjdGVkIGJnSW1hZ2VTcmMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgYmFja2dyb3VuZCA9IHRoaXMuYmFja2dyb3VuZFNpZ25hbCgpXG5cbiAgICByZXR1cm4gYmFja2dyb3VuZC50eXBlID09PSAnaW1hZ2UnID8gYmFja2dyb3VuZC5zcmMgOiAnJ1xuICB9KVxuXG4gIHByb3RlY3RlZCBpbWFnZVNpemUgPSB0b1NpZ25hbChcbiAgICB0b09ic2VydmFibGUodGhpcy5iYWNrZ3JvdW5kU2lnbmFsKS5waXBlKFxuICAgICAgc3dpdGNoTWFwKCgpID0+IGNyZWF0ZUltYWdlKHRoaXMuYmdJbWFnZVNyYygpKSksXG4gICAgICBtYXAoKGltYWdlKSA9PiAoeyB3aWR0aDogaW1hZ2UubmF0dXJhbFdpZHRoLCBoZWlnaHQ6IGltYWdlLm5hdHVyYWxIZWlnaHQgfSkpLFxuICAgICksXG4gICAgeyBpbml0aWFsVmFsdWU6IHsgd2lkdGg6IDAsIGhlaWdodDogMCB9IH1cbiAgKVxuXG4gIHByb3RlY3RlZCBzY2FsZWRJbWFnZVdpZHRoID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGJhY2tncm91bmQgPSB0aGlzLmJhY2tncm91bmRTaWduYWwoKVxuXG4gICAgaWYgKGJhY2tncm91bmQudHlwZSA9PT0gJ2ltYWdlJykge1xuICAgICAgY29uc3Qgem9vbSA9IGJhY2tncm91bmQuZml4ZWQgPyAxIDogdGhpcy52aWV3cG9ydFNlcnZpY2UucmVhZGFibGVWaWV3cG9ydCgpLnpvb21cblxuICAgICAgcmV0dXJuIHRoaXMuaW1hZ2VTaXplKCkud2lkdGggKiB6b29tICogKGJhY2tncm91bmQuc2NhbGUgPz8gZGVmYXVsdEltYWdlU2NhbGUpXG4gICAgfVxuXG4gICAgcmV0dXJuIDBcbiAgfSlcblxuICBwcm90ZWN0ZWQgc2NhbGVkSW1hZ2VIZWlnaHQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgYmFja2dyb3VuZCA9IHRoaXMuYmFja2dyb3VuZFNpZ25hbCgpXG5cbiAgICBpZiAoYmFja2dyb3VuZC50eXBlID09PSAnaW1hZ2UnKSB7XG4gICAgICBjb25zdCB6b29tID0gYmFja2dyb3VuZC5maXhlZCA/IDEgOiB0aGlzLnZpZXdwb3J0U2VydmljZS5yZWFkYWJsZVZpZXdwb3J0KCkuem9vbVxuXG4gICAgICByZXR1cm4gdGhpcy5pbWFnZVNpemUoKS5oZWlnaHQgKiB6b29tICogKGJhY2tncm91bmQuc2NhbGUgPz8gZGVmYXVsdEltYWdlU2NhbGUpXG4gICAgfVxuXG4gICAgcmV0dXJuIDBcbiAgfSk7XG5cbiAgcHJvdGVjdGVkIGltYWdlWCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBiYWNrZ3JvdW5kID0gdGhpcy5iYWNrZ3JvdW5kU2lnbmFsKClcblxuICAgIGlmIChiYWNrZ3JvdW5kLnR5cGUgPT09ICdpbWFnZScpIHtcbiAgICAgIGlmICghYmFja2dyb3VuZC5yZXBlYXQpIHtcbiAgICAgICAgcmV0dXJuIGJhY2tncm91bmQuZml4ZWQgPyAwIDogdGhpcy52aWV3cG9ydFNlcnZpY2UucmVhZGFibGVWaWV3cG9ydCgpLnhcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGJhY2tncm91bmQuZml4ZWRcbiAgICAgICAgPyAwXG4gICAgICAgIDogdGhpcy52aWV3cG9ydFNlcnZpY2UucmVhZGFibGVWaWV3cG9ydCgpLnggJSB0aGlzLnNjYWxlZEltYWdlV2lkdGgoKVxuICAgIH1cblxuICAgIHJldHVybiAwXG4gIH0pO1xuXG4gIHByb3RlY3RlZCBpbWFnZVkgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgYmFja2dyb3VuZCA9IHRoaXMuYmFja2dyb3VuZFNpZ25hbCgpXG5cbiAgICBpZiAoYmFja2dyb3VuZC50eXBlID09PSAnaW1hZ2UnKSB7XG4gICAgICBpZiAoIWJhY2tncm91bmQucmVwZWF0KSB7XG4gICAgICAgIHJldHVybiBiYWNrZ3JvdW5kLmZpeGVkID8gMCA6IHRoaXMudmlld3BvcnRTZXJ2aWNlLnJlYWRhYmxlVmlld3BvcnQoKS55XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBiYWNrZ3JvdW5kLmZpeGVkXG4gICAgICAgID8gMFxuICAgICAgICA6IHRoaXMudmlld3BvcnRTZXJ2aWNlLnJlYWRhYmxlVmlld3BvcnQoKS55ICUgdGhpcy5zY2FsZWRJbWFnZUhlaWdodCgpXG4gICAgfVxuXG4gICAgcmV0dXJuIDBcbiAgfSk7XG5cbiAgcHJvdGVjdGVkIHJlcGVhdGVkID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGJhY2tncm91bmQgPSB0aGlzLmJhY2tncm91bmRTaWduYWwoKVxuXG4gICAgcmV0dXJuIGJhY2tncm91bmQudHlwZSA9PT0gJ2ltYWdlJyAmJiAoYmFja2dyb3VuZC5yZXBlYXQgPz8gZGVmYXVsdFJlcGVhdGVkKVxuICB9KVxuXG4gIC8vIFdpdGhvdXQgSUQgdGhlcmUgd2lsbCBiZSBwYXR0ZXJuIGNvbGxpc2lvbiBmb3Igc2V2ZXJhbCBmbG93cyBvbiB0aGUgcGFnZVxuICAvLyBMYXRlciBwYXR0ZXJuIElEIG1heSBiZSBleHBvc2VkIHRvIEFQSVxuICBwcm90ZWN0ZWQgcGF0dGVybklkID0gaWQoKTtcbiAgcHJvdGVjdGVkIHBhdHRlcm5VcmwgPSBgdXJsKCMke3RoaXMucGF0dGVybklkfSlgXG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IGJhY2tncm91bmQgPSB0aGlzLmJhY2tncm91bmRTaWduYWwoKVxuXG4gICAgICBpZiAoYmFja2dyb3VuZC50eXBlID09PSAnZG90cycpIHtcbiAgICAgICAgdGhpcy5yb290U3ZnLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IGJhY2tncm91bmQuYmFja2dyb3VuZENvbG9yID8/IGRlZmF1bHRCZ1xuICAgICAgfVxuXG4gICAgICBpZiAoYmFja2dyb3VuZC50eXBlID09PSAnc29saWQnKSB7XG4gICAgICAgIHRoaXMucm9vdFN2Zy5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBiYWNrZ3JvdW5kLmNvbG9yXG4gICAgICB9XG4gICAgfSlcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVJbWFnZSh1cmw6IHN0cmluZykge1xuICBjb25zdCBpbWFnZSA9IG5ldyBJbWFnZSgpXG5cbiAgaW1hZ2Uuc3JjID0gdXJsXG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlPEhUTUxJbWFnZUVsZW1lbnQ+KHJlc29sdmUgPT4ge1xuICAgIGltYWdlLm9ubG9hZCA9ICgpID0+IHJlc29sdmUoaW1hZ2UpXG4gIH0pXG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiYmFja2dyb3VuZFNpZ25hbCgpLnR5cGUgPT09ICdkb3RzJ1wiPlxuICA8c3ZnOnBhdHRlcm5cbiAgICBbYXR0ci5pZF09XCJwYXR0ZXJuSWRcIlxuICAgIFthdHRyLnhdPVwieCgpXCJcbiAgICBbYXR0ci55XT1cInkoKVwiXG4gICAgW2F0dHIud2lkdGhdPVwic2NhbGVkR2FwKClcIlxuICAgIFthdHRyLmhlaWdodF09XCJzY2FsZWRHYXAoKVwiXG4gICAgcGF0dGVyblVuaXRzPVwidXNlclNwYWNlT25Vc2VcIlxuICA+XG4gICAgPHN2ZzpjaXJjbGVcbiAgICAgIFthdHRyLmN4XT1cInBhdHRlcm5TaXplKClcIlxuICAgICAgW2F0dHIuY3ldPVwicGF0dGVyblNpemUoKVwiXG4gICAgICBbYXR0ci5yXT1cInBhdHRlcm5TaXplKClcIlxuICAgICAgW2F0dHIuZmlsbF09XCJwYXR0ZXJuQ29sb3IoKVwiXG4gICAgLz5cbiAgPC9zdmc6cGF0dGVybj5cblxuICA8c3ZnOnJlY3RcbiAgICB4PVwiMFwiXG4gICAgeT1cIjBcIlxuICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgaGVpZ2h0PVwiMTAwJVwiXG4gICAgW2F0dHIuZmlsbF09XCJwYXR0ZXJuVXJsXCJcbiAgLz5cbjwvbmctY29udGFpbmVyPlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwiYmFja2dyb3VuZFNpZ25hbCgpLnR5cGUgPT09ICdpbWFnZSdcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJlcGVhdGVkKClcIj5cbiAgICA8c3ZnOnBhdHRlcm5cbiAgICAgIFthdHRyLmlkXT1cInBhdHRlcm5JZFwiXG4gICAgICBbYXR0ci54XT1cImltYWdlWCgpXCJcbiAgICAgIFthdHRyLnldPVwiaW1hZ2VZKClcIlxuICAgICAgW2F0dHIud2lkdGhdPVwic2NhbGVkSW1hZ2VXaWR0aCgpXCJcbiAgICAgIFthdHRyLmhlaWdodF09XCJzY2FsZWRJbWFnZUhlaWdodCgpXCJcbiAgICAgIHBhdHRlcm5Vbml0cz1cInVzZXJTcGFjZU9uVXNlXCJcbiAgICA+XG4gICAgICA8c3ZnOmltYWdlXG4gICAgICAgIFthdHRyLmhyZWZdPVwiYmdJbWFnZVNyYygpXCJcbiAgICAgICAgW2F0dHIud2lkdGhdPVwic2NhbGVkSW1hZ2VXaWR0aCgpXCJcbiAgICAgICAgW2F0dHIuaGVpZ2h0XT1cInNjYWxlZEltYWdlSGVpZ2h0KClcIlxuICAgICAgLz5cbiAgICA8L3N2ZzpwYXR0ZXJuPlxuXG4gICAgPHN2ZzpyZWN0XG4gICAgICB4PVwiMFwiXG4gICAgICB5PVwiMFwiXG4gICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgaGVpZ2h0PVwiMTAwJVwiXG4gICAgICBbYXR0ci5maWxsXT1cInBhdHRlcm5VcmxcIlxuICAgIC8+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhcmVwZWF0ZWQoKVwiPlxuICAgIDxzdmc6aW1hZ2VcbiAgICAgIFthdHRyLnhdPVwiaW1hZ2VYKClcIlxuICAgICAgW2F0dHIueV09XCJpbWFnZVkoKVwiXG4gICAgICBbYXR0ci53aWR0aF09XCJzY2FsZWRJbWFnZVdpZHRoKClcIlxuICAgICAgW2F0dHIuaGVpZ2h0XT1cInNjYWxlZEltYWdlSGVpZ2h0KClcIlxuICAgICAgW2F0dHIuaHJlZl09XCJiZ0ltYWdlU3JjKClcIlxuICAgIC8+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG4iXX0=
@@ -4,6 +4,7 @@ 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';
7
8
  import * as i0 from "@angular/core";
8
9
  import * as i1 from "@angular/common";
9
10
  export class ConnectionComponent {
@@ -21,6 +22,8 @@ export class ConnectionComponent {
21
22
  switch (this.model.curve) {
22
23
  case 'straight': return straightPath(sourcePoint, targetPoint).path;
23
24
  case 'bezier': return bezierPath(sourcePoint, targetPoint, sourcePosition, targetPosition).path;
25
+ case 'smooth-step': return smoothStepPath(sourcePoint, targetPoint, sourcePosition, targetPosition).path;
26
+ case 'step': return smoothStepPath(sourcePoint, targetPoint, sourcePosition, targetPosition, 0).path;
24
27
  }
25
28
  }
26
29
  if (status.state === 'connection-validation') {
@@ -38,6 +41,8 @@ export class ConnectionComponent {
38
41
  switch (this.model.curve) {
39
42
  case 'straight': return straightPath(sourcePoint, targetPoint).path;
40
43
  case 'bezier': return bezierPath(sourcePoint, targetPoint, sourcePosition, targetPosition).path;
44
+ case 'smooth-step': return smoothStepPath(sourcePoint, targetPoint, sourcePosition, targetPosition).path;
45
+ case 'step': return smoothStepPath(sourcePoint, targetPoint, sourcePosition, targetPosition, 0).path;
41
46
  }
42
47
  }
43
48
  return null;
@@ -117,4 +122,4 @@ function getOppositePostion(position) {
117
122
  return 'left';
118
123
  }
119
124
  }
120
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ubmVjdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmZsb3ctbGliL3NyYy9saWIvdmZsb3cvY29tcG9uZW50cy9jb25uZWN0aW9uL2Nvbm5lY3Rpb24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFlLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekcsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdkUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBRTVGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUM5RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7OztBQXVCNUMsTUFBTSxPQUFPLG1CQUFtQjtJQXBCaEM7UUEyQlUsc0JBQWlCLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUE7UUFDN0Msc0JBQWlCLEdBQUcsTUFBTSxDQUFDLDBCQUEwQixDQUFDLENBQUE7UUFFcEQsU0FBSSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDN0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxDQUFBO1lBRTlDLElBQUksTUFBTSxDQUFDLEtBQUssS0FBSyxrQkFBa0IsRUFBRTtnQkFDdkMsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUE7Z0JBQ2hELE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxhQUFhLEVBQUUsQ0FBQTtnQkFDaEQsTUFBTSxjQUFjLEdBQUcsWUFBWSxDQUFDLFNBQVMs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QUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUlsQixRQUFRO3NCQURkLEtBQUs7O0FBMEVSLFNBQVMsa0JBQWtCLENBQUMsUUFBa0I7SUFDNUMsUUFBUSxRQUFRLEVBQUU7UUFDaEIsS0FBSyxLQUFLO1lBQ1IsT0FBTyxRQUFRLENBQUE7UUFDakIsS0FBSyxRQUFRO1lBQ1gsT0FBTyxLQUFLLENBQUE7UUFDZCxLQUFLLE1BQU07WUFDVCxPQUFPLE9BQU8sQ0FBQTtRQUNoQixLQUFLLE9BQU87WUFDVixPQUFPLE1BQU0sQ0FBQTtLQUNoQjtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbnB1dCwgVGVtcGxhdGVSZWYsIGNvbXB1dGVkLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZsb3dTdGF0dXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmxvdy1zdGF0dXMuc2VydmljZSc7XG5pbXBvcnQgeyBzdHJhaWdodFBhdGggfSBmcm9tICcuLi8uLi9tYXRoL2VkZ2UtcGF0aC9zdHJhaWdoLXBhdGgnO1xuaW1wb3J0IHsgU3BhY2VQb2ludENvbnRleHREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL3NwYWNlLXBvaW50LWNvbnRleHQuZGlyZWN0aXZlJztcbmltcG9ydCB7IENvbm5lY3Rpb25Nb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9jb25uZWN0aW9uLm1vZGVsJztcbmltcG9ydCB7IGJlemllclBhdGggfSBmcm9tICcuLi8uLi9tYXRoL2VkZ2UtcGF0aC9iZXppZXItcGF0aCc7XG5pbXBvcnQgeyBoYXNoQ29kZSB9IGZyb20gJy4uLy4uL3V0aWxzL2hhc2gnO1xuaW1wb3J0IHsgUG9zaXRpb24gfSBmcm9tICcuLi8uLi90eXBlcy9wb3NpdGlvbi50eXBlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZ1tjb25uZWN0aW9uXScsXG4gIHRlbXBsYXRlOiBgXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1vZGVsLnR5cGUgPT09ICdkZWZhdWx0J1wiPlxuICAgICAgPHN2ZzpwYXRoXG4gICAgICAgICpuZ0lmPVwicGF0aCgpIGFzIHBhdGhcIlxuICAgICAgICBbYXR0ci5kXT1cInBhdGhcIlxuICAgICAgICBbYXR0ci5tYXJrZXItZW5kXT1cIm1hcmtlclVybCgpXCJcbiAgICAgICAgW2F0dHIuc3Ryb2tlXT1cImRlZmF1bHRDb2xvclwiXG4gICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMlwiXG4gICAgICAvPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1vZGVsLnR5cGUgPT09ICd0ZW1wbGF0ZScgJiYgdGVtcGxhdGVcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZTsgY29udGV4dDogZ2V0Q29udGV4dCgpXCIgLz5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgYCxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgQ29ubmVjdGlvbkNvbXBvbmVudCB7XG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXG4gIHB1YmxpYyBtb2RlbCE6IENvbm5lY3Rpb25Nb2RlbFxuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB0ZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT5cblxuICBwcml2YXRlIGZsb3dTdGF0dXNTZXJ2aWNlID0gaW5qZWN0KEZsb3dTdGF0dXNTZXJ2aWNlKVxuICBwcml2YXRlIHNwYWNlUG9pbnRDb250ZXh0ID0gaW5qZWN0KFNwYWNlUG9pbnRDb250ZXh0RGlyZWN0aXZlKVxuXG4gIHByb3RlY3RlZCBwYXRoID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHN0YXR1cyA9IHRoaXMuZmxvd1N0YXR1c1NlcnZpY2Uuc3RhdHVzKClcblxuICAgIGlmIChzdGF0dXMuc3RhdGUgPT09ICdjb25uZWN0aW9uLXN0YXJ0Jykge1xuICAgICAgY29uc3Qgc291cmNlSGFuZGxlID0gc3RhdHVzLnBheWxvYWQuc291cmNlSGFuZGxlXG4gICAgICBjb25zdCBzb3VyY2VQb2ludCA9IHNvdXJjZUhhbmRsZS5wb2ludEFic29sdXRlKClcbiAgICAgIGNvbnN0IHNvdXJjZVBvc2l0aW9uID0gc291cmNlSGFuZGxlLnJhd0hhbmRsZS5wb3NpdGlvblxuXG4gICAgICBjb25zdCB0YXJnZXRQb2ludCA9IHRoaXMuc3BhY2VQb2ludENvbnRleHQuc3ZnQ3VycmVudFNwYWNlUG9pbnQoKVxuICAgICAgY29uc3QgdGFyZ2V0UG9zaXRpb24gPSBnZXRPcHBvc2l0ZVBvc3Rpb24oc291cmNlSGFuZGxlLnJhd0hhbmRsZS5wb3NpdGlvbilcblxuICAgICAgc3dpdGNoICh0aGlzLm1vZGVsLmN1cnZlKSB7XG4gICAgICAgIGNhc2UgJ3N0cmFpZ2h0JzogcmV0dXJuIHN0cmFpZ2h0UGF0aChzb3VyY2VQb2ludCwgdGFyZ2V0UG9pbnQpLnBhdGhcbiAgICAgICAgY2FzZSAnYmV6aWVyJzogcmV0dXJuIGJlemllclBhdGgoXG4gICAgICAgICAgc291cmNlUG9pbnQsIHRhcmdldFBvaW50LFxuICAgICAgICAgIHNvdXJjZVBvc2l0aW9uLCB0YXJnZXRQb3NpdGlvblxuICAgICAgICApLnBhdGhcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3RhdHVzLnN0YXRlID09PSAnY29ubmVjdGlvbi12YWxpZGF0aW9uJykge1xuICAgICAgY29uc3Qgc291cmNlSGFuZGxlID0gc3RhdHVzLnBheWxvYWQuc291cmNlSGFuZGxlXG4gICAgICBjb25zdCBzb3VyY2VQb2ludCA9IHNvdXJjZUhhbmRsZS5wb2ludEFic29sdXRlKClcbiAgICAgIGNvbnN0IHNvdXJjZVBvc2l0aW9uID0gc291cmNlSGFuZGxlLnJhd0hhbmRsZS5wb3NpdGlvblxuXG4gICAgICBjb25zdCB0YXJnZXRIYW5kbGUgPSBzdGF0dXMucGF5bG9hZC50YXJnZXRIYW5kbGVcbiAgICAgIC8vIGlnbm9yZSBtYWduZXQgaWYgdmFsaWRhdGlvbiBmYWlsZWRcbiAgICAgIGNvbnN0IHRhcmdldFBvaW50ID0gc3RhdHVzLnBheWxvYWQudmFsaWRcbiAgICAgICAgPyB0YXJnZXRIYW5kbGUucG9pbnRBYnNvbHV0ZSgpXG4gICAgICAgIDogdGhpcy5zcGFjZVBvaW50Q29udGV4dC5zdmdDdXJyZW50U3BhY2VQb2ludCgpXG4gICAgICBjb25zdCB0YXJnZXRQb3NpdGlvbiA9IHN0YXR1cy5wYXlsb2FkLnZhbGlkXG4gICAgICAgID8gdGFyZ2V0SGFuZGxlLnJhd0hhbmRsZS5wb3NpdGlvblxuICAgICAgICA6IGdldE9wcG9zaXRlUG9zdGlvbihzb3VyY2VIYW5kbGUucmF3SGFuZGxlLnBvc2l0aW9uKVxuXG4gICAgICBzd2l0Y2ggKHRoaXMubW9kZWwuY3VydmUpIHtcbiAgICAgICAgY2FzZSAnc3RyYWlnaHQnOiByZXR1cm4gc3RyYWlnaHRQYXRoKHNvdXJjZVBvaW50LCB0YXJnZXRQb2ludCkucGF0aFxuICAgICAgICBjYXNlICdiZXppZXInOiByZXR1cm4gYmV6aWVyUGF0aChcbiAgICAgICAgICBzb3VyY2VQb2ludCwgdGFyZ2V0UG9pbnQsXG4gICAgICAgICAgc291cmNlUG9zaXRpb24sIHRhcmdldFBvc2l0aW9uXG4gICAgICAgICkucGF0aFxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsXG4gIH0pXG5cbiAgcHJvdGVjdGVkIG1hcmtlclVybCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBtYXJrZXIgPSB0aGlzLm1vZGVsLnNldHRpbmdzLm1hcmtlclxuXG4gICAgaWYgKG1hcmtlcikge1xuICAgICAgcmV0dXJuIGB1cmwoIyR7aGFzaENvZGUoSlNPTi5zdHJpbmdpZnkobWFya2VyKSl9KWBcbiAgICB9XG5cbiAgICByZXR1cm4gJydcbiAgfSlcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGVmYXVsdENvbG9yID0gJ3JnYigxNzcsIDE3NywgMTgzKSdcblxuICBwcm90ZWN0ZWQgZ2V0Q29udGV4dCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJGltcGxpY2l0OiB7XG4gICAgICAgIHBhdGg6IHRoaXMucGF0aCxcbiAgICAgICAgbWFya2VyOiB0aGlzLm1hcmtlclVybFxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRPcHBvc2l0ZVBvc3Rpb24ocG9zaXRpb246IFBvc2l0aW9uKTogUG9zaXRpb24ge1xuICBzd2l0Y2ggKHBvc2l0aW9uKSB7XG4gICAgY2FzZSAndG9wJzpcbiAgICAgIHJldHVybiAnYm90dG9tJ1xuICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICByZXR1cm4gJ3RvcCdcbiAgICBjYXNlICdsZWZ0JzpcbiAgICAgIHJldHVybiAncmlnaHQnXG4gICAgY2FzZSAncmlnaHQnOlxuICAgICAgcmV0dXJuICdsZWZ0J1xuICB9XG59XG4iXX0=
125
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ubmVjdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmZsb3ctbGliL3NyYy9saWIvdmZsb3cvY29tcG9uZW50cy9jb25uZWN0aW9uL2Nvbm5lY3Rpb24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFlLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekcsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdkUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBRTVGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUM5RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFNUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVDQUF1QyxDQUFDOzs7QUFzQnZFLE1BQU0sT0FBTyxtQkFBbUI7SUFwQmhDO1FBMkJVLHNCQUFpQixHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFBO1FBQzdDLHNCQUFpQixHQUFHLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxDQUFBO1FBRXBELFNBQUksR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQzdCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQTtZQUU5QyxJQUFJLE1BQU0sQ0FBQyxLQUFLLEtBQUssa0JBQWtCLEVBQUU7Z0JBQ3ZDLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFBO2dCQUNoRCxNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUMsYUFBYSxFQUFF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QUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQTthQUNuRDtZQUVELE9BQU8sRUFBRSxDQUFBO1FBQ1gsQ0FBQyxDQUFDLENBQUE7UUFFaUIsaUJBQVksR0FBRyxvQkFBb0IsQ0FBQTtLQVV2RDtJQVJXLFVBQVU7UUFDbEIsT0FBTztZQUNMLFNBQVMsRUFBRTtnQkFDVCxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7Z0JBQ2YsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTO2FBQ3ZCO1NBQ0YsQ0FBQTtJQUNILENBQUM7K0dBN0ZVLG1CQUFtQjttR0FBbkIsbUJBQW1CLHVHQWxCcEI7Ozs7Ozs7Ozs7Ozs7OztHQWVUOzs0RkFHVSxtQkFBbUI7a0JBcEIvQixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxlQUFlO29CQUN6QixRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7OztHQWVUO29CQUNELGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUNoRDs4QkFHUSxLQUFLO3NCQURYLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUlsQixRQUFRO3NCQURkLEtBQUs7O0FBNEZSLFNBQVMsa0JBQWtCLENBQUMsUUFBa0I7SUFDNUMsUUFBUSxRQUFRLEVBQUU7UUFDaEIsS0FBSyxLQUFLO1lBQ1IsT0FBTyxRQUFRLENBQUE7UUFDakIsS0FBSyxRQUFRO1lBQ1gsT0FBTyxLQUFLLENBQUE7UUFDZCxLQUFLLE1BQU07WUFDVCxPQUFPLE9BQU8sQ0FBQTtRQUNoQixLQUFLLE9BQU87WUFDVixPQUFPLE1BQU0sQ0FBQTtLQUNoQjtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbnB1dCwgVGVtcGxhdGVSZWYsIGNvbXB1dGVkLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZsb3dTdGF0dXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmxvdy1zdGF0dXMuc2VydmljZSc7XG5pbXBvcnQgeyBzdHJhaWdodFBhdGggfSBmcm9tICcuLi8uLi9tYXRoL2VkZ2UtcGF0aC9zdHJhaWdoLXBhdGgnO1xuaW1wb3J0IHsgU3BhY2VQb2ludENvbnRleHREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL3NwYWNlLXBvaW50LWNvbnRleHQuZGlyZWN0aXZlJztcbmltcG9ydCB7IENvbm5lY3Rpb25Nb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9jb25uZWN0aW9uLm1vZGVsJztcbmltcG9ydCB7IGJlemllclBhdGggfSBmcm9tICcuLi8uLi9tYXRoL2VkZ2UtcGF0aC9iZXppZXItcGF0aCc7XG5pbXBvcnQgeyBoYXNoQ29kZSB9IGZyb20gJy4uLy4uL3V0aWxzL2hhc2gnO1xuaW1wb3J0IHsgUG9zaXRpb24gfSBmcm9tICcuLi8uLi90eXBlcy9wb3NpdGlvbi50eXBlJztcbmltcG9ydCB7IHNtb290aFN0ZXBQYXRoIH0gZnJvbSAnLi4vLi4vbWF0aC9lZGdlLXBhdGgvc21vb3RoLXN0ZXAtcGF0aCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2dbY29ubmVjdGlvbl0nLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtb2RlbC50eXBlID09PSAnZGVmYXVsdCdcIj5cbiAgICAgIDxzdmc6cGF0aFxuICAgICAgICAqbmdJZj1cInBhdGgoKSBhcyBwYXRoXCJcbiAgICAgICAgW2F0dHIuZF09XCJwYXRoXCJcbiAgICAgICAgW2F0dHIubWFya2VyLWVuZF09XCJtYXJrZXJVcmwoKVwiXG4gICAgICAgIFthdHRyLnN0cm9rZV09XCJkZWZhdWx0Q29sb3JcIlxuICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgIHN0cm9rZS13aWR0aD1cIjJcIlxuICAgICAgLz5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtb2RlbC50eXBlID09PSAndGVtcGxhdGUnICYmIHRlbXBsYXRlXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGU7IGNvbnRleHQ6IGdldENvbnRleHQoKVwiIC8+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIGAsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIENvbm5lY3Rpb25Db21wb25lbnQge1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxuICBwdWJsaWMgbW9kZWwhOiBDb25uZWN0aW9uTW9kZWxcblxuICBASW5wdXQoKVxuICBwdWJsaWMgdGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+XG5cbiAgcHJpdmF0ZSBmbG93U3RhdHVzU2VydmljZSA9IGluamVjdChGbG93U3RhdHVzU2VydmljZSlcbiAgcHJpdmF0ZSBzcGFjZVBvaW50Q29udGV4dCA9IGluamVjdChTcGFjZVBvaW50Q29udGV4dERpcmVjdGl2ZSlcblxuICBwcm90ZWN0ZWQgcGF0aCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBzdGF0dXMgPSB0aGlzLmZsb3dTdGF0dXNTZXJ2aWNlLnN0YXR1cygpXG5cbiAgICBpZiAoc3RhdHVzLnN0YXRlID09PSAnY29ubmVjdGlvbi1zdGFydCcpIHtcbiAgICAgIGNvbnN0IHNvdXJjZUhhbmRsZSA9IHN0YXR1cy5wYXlsb2FkLnNvdXJjZUhhbmRsZVxuICAgICAgY29uc3Qgc291cmNlUG9pbnQgPSBzb3VyY2VIYW5kbGUucG9pbnRBYnNvbHV0ZSgpXG4gICAgICBjb25zdCBzb3VyY2VQb3NpdGlvbiA9IHNvdXJjZUhhbmRsZS5yYXdIYW5kbGUucG9zaXRpb25cblxuICAgICAgY29uc3QgdGFyZ2V0UG9pbnQgPSB0aGlzLnNwYWNlUG9pbnRDb250ZXh0LnN2Z0N1cnJlbnRTcGFjZVBvaW50KClcbiAgICAgIGNvbnN0IHRhcmdldFBvc2l0aW9uID0gZ2V0T3Bwb3NpdGVQb3N0aW9uKHNvdXJjZUhhbmRsZS5yYXdIYW5kbGUucG9zaXRpb24pXG5cbiAgICAgIHN3aXRjaCAodGhpcy5tb2RlbC5jdXJ2ZSkge1xuICAgICAgICBjYXNlICdzdHJhaWdodCc6IHJldHVybiBzdHJhaWdodFBhdGgoc291cmNlUG9pbnQsIHRhcmdldFBvaW50KS5wYXRoXG4gICAgICAgIGNhc2UgJ2Jlemllcic6IHJldHVybiBiZXppZXJQYXRoKFxuICAgICAgICAgIHNvdXJjZVBvaW50LCB0YXJnZXRQb2ludCxcbiAgICAgICAgICBzb3VyY2VQb3NpdGlvbiwgdGFyZ2V0UG9zaXRpb25cbiAgICAgICAgKS5wYXRoXG4gICAgICAgIGNhc2UgJ3Ntb290aC1zdGVwJzogcmV0dXJuIHNtb290aFN0ZXBQYXRoKFxuICAgICAgICAgIHNvdXJjZVBvaW50LCB0YXJnZXRQb2ludCxcbiAgICAgICAgICBzb3VyY2VQb3NpdGlvbiwgdGFyZ2V0UG9zaXRpb24sXG4gICAgICAgICkucGF0aFxuICAgICAgICBjYXNlICdzdGVwJzogcmV0dXJuIHNtb290aFN0ZXBQYXRoKFxuICAgICAgICAgIHNvdXJjZVBvaW50LCB0YXJnZXRQb2ludCxcbiAgICAgICAgICBzb3VyY2VQb3NpdGlvbiwgdGFyZ2V0UG9zaXRpb24sXG4gICAgICAgICAgMFxuICAgICAgICApLnBhdGhcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3RhdHVzLnN0YXRlID09PSAnY29ubmVjdGlvbi12YWxpZGF0aW9uJykge1xuICAgICAgY29uc3Qgc291cmNlSGFuZGxlID0gc3RhdHVzLnBheWxvYWQuc291cmNlSGFuZGxlXG4gICAgICBjb25zdCBzb3VyY2VQb2ludCA9IHNvdXJjZUhhbmRsZS5wb2ludEFic29sdXRlKClcbiAgICAgIGNvbnN0IHNvdXJjZVBvc2l0aW9uID0gc291cmNlSGFuZGxlLnJhd0hhbmRsZS5wb3NpdGlvblxuXG4gICAgICBjb25zdCB0YXJnZXRIYW5kbGUgPSBzdGF0dXMucGF5bG9hZC50YXJnZXRIYW5kbGVcbiAgICAgIC8vIGlnbm9yZSBtYWduZXQgaWYgdmFsaWRhdGlvbiBmYWlsZWRcbiAgICAgIGNvbnN0IHRhcmdldFBvaW50ID0gc3RhdHVzLnBheWxvYWQudmFsaWRcbiAgICAgICAgPyB0YXJnZXRIYW5kbGUucG9pbnRBYnNvbHV0ZSgpXG4gICAgICAgIDogdGhpcy5zcGFjZVBvaW50Q29udGV4dC5zdmdDdXJyZW50U3BhY2VQb2ludCgpXG4gICAgICBjb25zdCB0YXJnZXRQb3NpdGlvbiA9IHN0YXR1cy5wYXlsb2FkLnZhbGlkXG4gICAgICAgID8gdGFyZ2V0SGFuZGxlLnJhd0hhbmRsZS5wb3NpdGlvblxuICAgICAgICA6IGdldE9wcG9zaXRlUG9zdGlvbihzb3VyY2VIYW5kbGUucmF3SGFuZGxlLnBvc2l0aW9uKVxuXG4gICAgICBzd2l0Y2ggKHRoaXMubW9kZWwuY3VydmUpIHtcbiAgICAgICAgY2FzZSAnc3RyYWlnaHQnOiByZXR1cm4gc3RyYWlnaHRQYXRoKHNvdXJjZVBvaW50LCB0YXJnZXRQb2ludCkucGF0aFxuICAgICAgICBjYXNlICdiZXppZXInOiByZXR1cm4gYmV6aWVyUGF0aChcbiAgICAgICAgICBzb3VyY2VQb2ludCwgdGFyZ2V0UG9pbnQsXG4gICAgICAgICAgc291cmNlUG9zaXRpb24sIHRhcmdldFBvc2l0aW9uXG4gICAgICAgICkucGF0aFxuICAgICAgICBjYXNlICdzbW9vdGgtc3RlcCc6IHJldHVybiBzbW9vdGhTdGVwUGF0aChcbiAgICAgICAgICBzb3VyY2VQb2ludCwgdGFyZ2V0UG9pbnQsXG4gICAgICAgICAgc291cmNlUG9zaXRpb24sIHRhcmdldFBvc2l0aW9uLFxuICAgICAgICApLnBhdGhcbiAgICAgICAgY2FzZSAnc3RlcCc6IHJldHVybiBzbW9vdGhTdGVwUGF0aChcbiAgICAgICAgICBzb3VyY2VQb2ludCwgdGFyZ2V0UG9pbnQsXG4gICAgICAgICAgc291cmNlUG9zaXRpb24sIHRhcmdldFBvc2l0aW9uLFxuICAgICAgICAgIDBcbiAgICAgICAgKS5wYXRoXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGxcbiAgfSlcblxuICBwcm90ZWN0ZWQgbWFya2VyVXJsID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IG1hcmtlciA9IHRoaXMubW9kZWwuc2V0dGluZ3MubWFya2VyXG5cbiAgICBpZiAobWFya2VyKSB7XG4gICAgICByZXR1cm4gYHVybCgjJHtoYXNoQ29kZShKU09OLnN0cmluZ2lmeShtYXJrZXIpKX0pYFxuICAgIH1cblxuICAgIHJldHVybiAnJ1xuICB9KVxuXG4gIHByb3RlY3RlZCByZWFkb25seSBkZWZhdWx0Q29sb3IgPSAncmdiKDE3NywgMTc3LCAxODMpJ1xuXG4gIHByb3RlY3RlZCBnZXRDb250ZXh0KCkge1xuICAgIHJldHVybiB7XG4gICAgICAkaW1wbGljaXQ6IHtcbiAgICAgICAgcGF0aDogdGhpcy5wYXRoLFxuICAgICAgICBtYXJrZXI6IHRoaXMubWFya2VyVXJsXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldE9wcG9zaXRlUG9zdGlvbihwb3NpdGlvbjogUG9zaXRpb24pOiBQb3NpdGlvbiB7XG4gIHN3aXRjaCAocG9zaXRpb24pIHtcbiAgICBjYXNlICd0b3AnOlxuICAgICAgcmV0dXJuICdib3R0b20nXG4gICAgY2FzZSAnYm90dG9tJzpcbiAgICAgIHJldHVybiAndG9wJ1xuICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgcmV0dXJuICdyaWdodCdcbiAgICBjYXNlICdyaWdodCc6XG4gICAgICByZXR1cm4gJ2xlZnQnXG4gIH1cbn1cbiJdfQ==
@@ -5,7 +5,7 @@ import { ComponentEventBusService } from "../../services/component-event-bus.ser
5
5
  import * as i0 from "@angular/core";
6
6
  export class CustomNodeBaseComponent {
7
7
  constructor() {
8
- this.eventBus = inject(ComponentEventBusService, { optional: true });
8
+ this.eventBus = inject(ComponentEventBusService);
9
9
  this.destroyRef = inject(DestroyRef);
10
10
  /**
11
11
  * Signal with selected state of node
@@ -17,11 +17,9 @@ export class CustomNodeBaseComponent {
17
17
  this.selected.set(value);
18
18
  }
19
19
  ngOnInit() {
20
- if (this.eventBus) {
21
- this.trackEvents()
22
- .pipe(takeUntilDestroyed(this.destroyRef))
23
- .subscribe();
24
- }
20
+ this.trackEvents()
21
+ .pipe(takeUntilDestroyed(this.destroyRef))
22
+ .subscribe();
25
23
  }
26
24
  trackEvents() {
27
25
  const props = Object.getOwnPropertyNames(this);
@@ -49,4 +47,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
49
47
  }], propDecorators: { _selected: [{
50
48
  type: Input
51
49
  }] } });
52
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLW5vZGUtYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmZsb3ctbGliL3NyYy9saWIvdmZsb3cvY29tcG9uZW50cy9jdXN0b20tbm9kZS1iYXNlL2N1c3RvbS1ub2RlLWJhc2UuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUNsRyxPQUFPLEVBQUUsS0FBSyxFQUFNLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQzs7QUFJdEYsTUFBTSxPQUFnQix1QkFBdUI7SUFEN0M7UUFFVSxhQUFRLEdBQUcsTUFBTSxDQUFDLHdCQUF3QixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7UUFFN0QsZUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQVl6Qzs7V0FFRztRQUNJLGFBQVEsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7UUFFeEIsU0FBSSxHQUFHLE1BQU0sQ0FBZ0IsU0FBUyxDQUFDLENBQUE7S0FtQy9DO0lBN0NDLElBQ1csU0FBUyxDQUFDLEtBQWM7UUFDakMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDMUIsQ0FBQztJQVNNLFFBQVE7UUFDYixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDakIsSUFBSSxDQUFDLFdBQVcsRUFBRTtpQkFDZixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2lCQUN6QyxTQUFTLEVBQUUsQ0FBQTtTQUNmO0lBQ0gsQ0FBQztJQUVPLFdBQVc7UUFDakIsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFBO1FBRTlDLE1BQU0sUUFBUSxHQUFHLElBQUksR0FBRyxFQUFpQyxDQUFBO1FBQ3pELEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFO1lBQ3hCLE1BQU0sS0FBSyxHQUFJLElBQWdDLENBQUMsSUFBSSxDQUFDLENBQUE7WUFFckQsSUFBSSxLQUFLLFlBQVksWUFBWSxFQUFFO2dCQUNqQyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQTthQUMxQjtTQUNGO1FBRUQsT0FBTyxLQUFLLENBQ1YsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUMzQyxPQUFPLENBQUMsSUFBSSxDQUNWLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ1osSUFBSSxDQUFDLFFBQVMsQ0FBQyxTQUFTLENBQUM7Z0JBQ3ZCLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3BCLFNBQVMsRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBRTtnQkFDakMsWUFBWSxFQUFFLEtBQUs7YUFDcEIsQ0FBQyxDQUFBO1FBQ0osQ0FBQyxDQUFDLENBQUMsQ0FDTixDQUNGLENBQUE7SUFDSCxDQUFDO0lBQUEsQ0FBQzsrR0F0RGtCLHVCQUF1QjttR0FBdkIsdUJBQXVCOzs0RkFBdkIsdUJBQXVCO2tCQUQ1QyxTQUFTOzhCQVlHLFNBQVM7c0JBRG5CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEZXN0cm95UmVmLCBEaXJlY3RpdmUsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgaW5qZWN0LCBzaWduYWwgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiXG5pbXBvcnQgeyBtZXJnZSwgb2YsIHRhcCB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3BcIjtcbmltcG9ydCB7IENvbXBvbmVudEV2ZW50QnVzU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9jb21wb25lbnQtZXZlbnQtYnVzLnNlcnZpY2VcIjtcbmltcG9ydCB7IENvbXBvbmVudER5bmFtaWNOb2RlLCBDb21wb25lbnROb2RlIH0gZnJvbSBcIi4uLy4uL2ludGVyZmFjZXMvbm9kZS5pbnRlcmZhY2VcIjtcblxuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ3VzdG9tTm9kZUJhc2VDb21wb25lbnQ8VCA9IHVua25vd24+IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHJpdmF0ZSBldmVudEJ1cyA9IGluamVjdChDb21wb25lbnRFdmVudEJ1c1NlcnZpY2UsIHsgb3B0aW9uYWw6IHRydWUgfSlcblxuICBwcm90ZWN0ZWQgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKVxuXG4gIC8qKlxuICAgKiBSZWZlcmVuY2UgdG8gbm9kZSBib3VuZCB0byB0aGlzIGNvbXBvbmVudFxuICAgKi9cbiAgcHJvdGVjdGVkIG5vZGUhOiBDb21wb25lbnROb2RlIHwgQ29tcG9uZW50RHluYW1pY05vZGVcblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IF9zZWxlY3RlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuc2VsZWN0ZWQuc2V0KHZhbHVlKVxuICB9XG5cbiAgLyoqXG4gICAqIFNpZ25hbCB3aXRoIHNlbGVjdGVkIHN0YXRlIG9mIG5vZGVcbiAgICovXG4gIHB1YmxpYyBzZWxlY3RlZCA9IHNpZ25hbChmYWxzZSlcblxuICBwdWJsaWMgZGF0YSA9IHNpZ25hbDxUIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpXG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmV2ZW50QnVzKSB7XG4gICAgICB0aGlzLnRyYWNrRXZlbnRzKClcbiAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAgIC5zdWJzY3JpYmUoKVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdHJhY2tFdmVudHMoKSB7XG4gICAgY29uc3QgcHJvcHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKVxuXG4gICAgY29uc3QgZW1pdHRlcnMgPSBuZXcgTWFwPEV2ZW50RW1pdHRlcjx1bmtub3duPiwgc3RyaW5nPigpXG4gICAgZm9yIChjb25zdCBwcm9wIG9mIHByb3BzKSB7XG4gICAgICBjb25zdCBmaWVsZCA9ICh0aGlzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtwcm9wXVxuXG4gICAgICBpZiAoZmllbGQgaW5zdGFuY2VvZiBFdmVudEVtaXR0ZXIpIHtcbiAgICAgICAgZW1pdHRlcnMuc2V0KGZpZWxkLCBwcm9wKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtZXJnZShcbiAgICAgIC4uLkFycmF5LmZyb20oZW1pdHRlcnMua2V5cygpKS5tYXAoZW1pdHRlciA9PlxuICAgICAgICBlbWl0dGVyLnBpcGUoXG4gICAgICAgICAgdGFwKChldmVudCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5ldmVudEJ1cyEucHVzaEV2ZW50KHtcbiAgICAgICAgICAgICAgbm9kZUlkOiB0aGlzLm5vZGUuaWQsXG4gICAgICAgICAgICAgIGV2ZW50TmFtZTogZW1pdHRlcnMuZ2V0KGVtaXR0ZXIpISxcbiAgICAgICAgICAgICAgZXZlbnRQYXlsb2FkOiBldmVudFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9KSlcbiAgICAgIClcbiAgICApXG4gIH07XG59XG5cbiJdfQ==
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLW5vZGUtYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmZsb3ctbGliL3NyYy9saWIvdmZsb3cvY29tcG9uZW50cy9jdXN0b20tbm9kZS1iYXNlL2N1c3RvbS1ub2RlLWJhc2UuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUNsRyxPQUFPLEVBQUUsS0FBSyxFQUFNLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQzs7QUFJdEYsTUFBTSxPQUFnQix1QkFBdUI7SUFEN0M7UUFFVSxhQUFRLEdBQUcsTUFBTSxDQUFDLHdCQUF3QixDQUFDLENBQUE7UUFFekMsZUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQVl6Qzs7V0FFRztRQUNJLGFBQVEsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7UUFFeEIsU0FBSSxHQUFHLE1BQU0sQ0FBZ0IsU0FBUyxDQUFDLENBQUE7S0FpQy9DO0lBM0NDLElBQ1csU0FBUyxDQUFDLEtBQWM7UUFDakMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDMUIsQ0FBQztJQVNNLFFBQVE7UUFDYixJQUFJLENBQUMsV0FBVyxFQUFFO2FBQ2YsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQzthQUN6QyxTQUFTLEVBQUUsQ0FBQTtJQUNoQixDQUFDO0lBRU8sV0FBVztRQUNqQixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUE7UUFFOUMsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFHLEVBQWlDLENBQUE7UUFDekQsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUU7WUFDeEIsTUFBTSxLQUFLLEdBQUksSUFBZ0MsQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUVyRCxJQUFJLEtBQUssWUFBWSxZQUFZLEVBQUU7Z0JBQ2pDLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFBO2FBQzFCO1NBQ0Y7UUFFRCxPQUFPLEtBQUssQ0FDVixHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQzNDLE9BQU8sQ0FBQyxJQUFJLENBQ1YsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDWixJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztnQkFDdEIsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDcEIsU0FBUyxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFFO2dCQUNqQyxZQUFZLEVBQUUsS0FBSzthQUNwQixDQUFDLENBQUE7UUFDSixDQUFDLENBQUMsQ0FBQyxDQUNOLENBQ0YsQ0FBQTtJQUNILENBQUM7SUFBQSxDQUFDOytHQXBEa0IsdUJBQXVCO21HQUF2Qix1QkFBdUI7OzRGQUF2Qix1QkFBdUI7a0JBRDVDLFNBQVM7OEJBWUcsU0FBUztzQkFEbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlc3Ryb3lSZWYsIERpcmVjdGl2ZSwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBpbmplY3QsIHNpZ25hbCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCJcbmltcG9ydCB7IG1lcmdlLCBvZiwgdGFwIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gXCJAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcFwiO1xuaW1wb3J0IHsgQ29tcG9uZW50RXZlbnRCdXNTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2NvbXBvbmVudC1ldmVudC1idXMuc2VydmljZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50RHluYW1pY05vZGUsIENvbXBvbmVudE5vZGUgfSBmcm9tIFwiLi4vLi4vaW50ZXJmYWNlcy9ub2RlLmludGVyZmFjZVwiO1xuXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDdXN0b21Ob2RlQmFzZUNvbXBvbmVudDxUID0gdW5rbm93bj4gaW1wbGVtZW50cyBPbkluaXQge1xuICBwcml2YXRlIGV2ZW50QnVzID0gaW5qZWN0KENvbXBvbmVudEV2ZW50QnVzU2VydmljZSlcblxuICBwcm90ZWN0ZWQgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKVxuXG4gIC8qKlxuICAgKiBSZWZlcmVuY2UgdG8gbm9kZSBib3VuZCB0byB0aGlzIGNvbXBvbmVudFxuICAgKi9cbiAgcHJvdGVjdGVkIG5vZGUhOiBDb21wb25lbnROb2RlIHwgQ29tcG9uZW50RHluYW1pY05vZGVcblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IF9zZWxlY3RlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuc2VsZWN0ZWQuc2V0KHZhbHVlKVxuICB9XG5cbiAgLyoqXG4gICAqIFNpZ25hbCB3aXRoIHNlbGVjdGVkIHN0YXRlIG9mIG5vZGVcbiAgICovXG4gIHB1YmxpYyBzZWxlY3RlZCA9IHNpZ25hbChmYWxzZSlcblxuICBwdWJsaWMgZGF0YSA9IHNpZ25hbDxUIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpXG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMudHJhY2tFdmVudHMoKVxuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAuc3Vic2NyaWJlKClcbiAgfVxuXG4gIHByaXZhdGUgdHJhY2tFdmVudHMoKSB7XG4gICAgY29uc3QgcHJvcHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKVxuXG4gICAgY29uc3QgZW1pdHRlcnMgPSBuZXcgTWFwPEV2ZW50RW1pdHRlcjx1bmtub3duPiwgc3RyaW5nPigpXG4gICAgZm9yIChjb25zdCBwcm9wIG9mIHByb3BzKSB7XG4gICAgICBjb25zdCBmaWVsZCA9ICh0aGlzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtwcm9wXVxuXG4gICAgICBpZiAoZmllbGQgaW5zdGFuY2VvZiBFdmVudEVtaXR0ZXIpIHtcbiAgICAgICAgZW1pdHRlcnMuc2V0KGZpZWxkLCBwcm9wKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtZXJnZShcbiAgICAgIC4uLkFycmF5LmZyb20oZW1pdHRlcnMua2V5cygpKS5tYXAoZW1pdHRlciA9PlxuICAgICAgICBlbWl0dGVyLnBpcGUoXG4gICAgICAgICAgdGFwKChldmVudCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5ldmVudEJ1cy5wdXNoRXZlbnQoe1xuICAgICAgICAgICAgICBub2RlSWQ6IHRoaXMubm9kZS5pZCxcbiAgICAgICAgICAgICAgZXZlbnROYW1lOiBlbWl0dGVycy5nZXQoZW1pdHRlcikhLFxuICAgICAgICAgICAgICBldmVudFBheWxvYWQ6IGV2ZW50XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0pKVxuICAgICAgKVxuICAgIClcbiAgfTtcbn1cblxuIl19
@@ -1,5 +1,5 @@
1
1
  import { __decorate } from "tslib";
2
- import { ChangeDetectionStrategy, Component, ElementRef, Injector, Input, inject } from '@angular/core';
2
+ import { ChangeDetectionStrategy, Component, DestroyRef, ElementRef, Injector, Input, inject } from '@angular/core';
3
3
  import { HandleService } from '../../services/handle.service';
4
4
  import { HandleModel } from '../../models/handle.model';
5
5
  import { InjectionContext } from '../../decorators/run-in-injection-context.decorator';
@@ -9,20 +9,22 @@ export class HandleComponent {
9
9
  this.injector = inject(Injector);
10
10
  this.handleService = inject(HandleService);
11
11
  this.element = inject(ElementRef).nativeElement;
12
+ this.destroyRef = inject(DestroyRef);
12
13
  }
13
14
  ngOnInit() {
14
- this.model = new HandleModel({
15
- position: this.position,
16
- type: this.type,
17
- id: this.id,
18
- parentReference: this.element.parentElement,
19
- template: this.template
20
- }, this.handleService.node());
21
- this.handleService.createHandle(this.model);
22
- requestAnimationFrame(() => this.model.updateParent());
23
- }
24
- ngOnDestroy() {
25
- this.handleService.destroyHandle(this.model);
15
+ const node = this.handleService.node();
16
+ if (node) {
17
+ this.model = new HandleModel({
18
+ position: this.position,
19
+ type: this.type,
20
+ id: this.id,
21
+ parentReference: this.element.parentElement,
22
+ template: this.template
23
+ }, node);
24
+ this.handleService.createHandle(this.model);
25
+ requestAnimationFrame(() => this.model.updateParent());
26
+ this.destroyRef.onDestroy(() => this.handleService.destroyHandle(this.model));
27
+ }
26
28
  }
27
29
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: HandleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
28
30
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: HandleComponent, selector: "handle", inputs: { position: "position", type: "type", id: "id", template: "template" }, ngImport: i0, template: "", changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
@@ -44,4 +46,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
44
46
  }], template: [{
45
47
  type: Input
46
48
  }], ngOnInit: [] } });
47
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC12Zmxvdy1saWIvc3JjL2xpYi92Zmxvdy9jb21wb25lbnRzL2hhbmRsZS9oYW5kbGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2NvbXBvbmVudHMvaGFuZGxlL2hhbmRsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBa0MsTUFBTSxFQUFpQyxNQUFNLGVBQWUsQ0FBQztBQUV2SyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBZ0IsTUFBTSxxREFBcUQsQ0FBQzs7QUFPckcsTUFBTSxPQUFPLGVBQWU7SUFMNUI7UUFNUyxhQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNCLGtCQUFhLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFBO1FBQ3JDLFlBQU8sR0FBRyxNQUFNLENBQTBCLFVBQVUsQ0FBQyxDQUFDLGFBQWEsQ0FBQTtLQThDNUU7SUFwQlEsUUFBUTtRQUNiLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxXQUFXLENBQzFCO1lBQ0UsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3ZCLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtZQUNYLGVBQWUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWM7WUFDNUMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1NBQ3hCLEVBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUcsQ0FDM0IsQ0FBQTtRQUVELElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUUzQyxxQkFBcUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUE7SUFDeEQsQ0FBQztJQUVNLFdBQVc7UUFDaEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQzlDLENBQUM7K0dBaERVLGVBQWU7bUdBQWYsZUFBZSw4SENYNUIsRUFBQTs7QUR3Q1M7SUFETixnQkFBZ0I7K0NBZ0JoQjs0RkE1Q1UsZUFBZTtrQkFMM0IsU0FBUzsrQkFDRSxRQUFRLG1CQUVELHVCQUF1QixDQUFDLE1BQU07OEJBV3hDLFFBQVE7c0JBRGQsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBT2xCLElBQUk7c0JBRFYsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBT2xCLEVBQUU7c0JBRFIsS0FBSztnQkFJQyxRQUFRO3NCQURkLEtBQUs7Z0JBTUMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEluamVjdG9yLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIFRlbXBsYXRlUmVmLCBpbmplY3QsIHJ1bkluSW5qZWN0aW9uQ29udGV4dCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBQb3NpdGlvbiB9IGZyb20gJy4uLy4uL3R5cGVzL3Bvc2l0aW9uLnR5cGUnO1xuaW1wb3J0IHsgSGFuZGxlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2hhbmRsZS5zZXJ2aWNlJztcbmltcG9ydCB7IEhhbmRsZU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2hhbmRsZS5tb2RlbCc7XG5pbXBvcnQgeyBJbmplY3Rpb25Db250ZXh0LCBXaXRoSW5qZWN0b3IgfSBmcm9tICcuLi8uLi9kZWNvcmF0b3JzL3J1bi1pbi1pbmplY3Rpb24tY29udGV4dC5kZWNvcmF0b3InO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdoYW5kbGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vaGFuZGxlLmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgSGFuZGxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIFdpdGhJbmplY3RvciB7XG4gIHB1YmxpYyBpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG4gIHByaXZhdGUgaGFuZGxlU2VydmljZSA9IGluamVjdChIYW5kbGVTZXJ2aWNlKVxuICBwcml2YXRlIGVsZW1lbnQgPSBpbmplY3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+KEVsZW1lbnRSZWYpLm5hdGl2ZUVsZW1lbnRcblxuICAvKipcbiAgICogQXQgd2hhdCBzaWRlIG9mIG5vZGUgdGhpcyBjb21wb25lbnQgc2hvdWxkIGJlIHBsYWNlZFxuICAgKi9cbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgcHVibGljIHBvc2l0aW9uITogUG9zaXRpb25cblxuICAvKipcbiAgICogU291cmNlIG9yIHRhcmdldFxuICAgKi9cbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgcHVibGljIHR5cGUhOiAnc291cmNlJyB8ICd0YXJnZXQnXG5cbiAgLyoqXG4gICAqIFNob3VsZCBiZSB1c2VkIGlmIG5vZGUgaGFzIG1vcmUgdGhhbiBvbmUgc291cmNlL3RhcmdldFxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGlkPzogc3RyaW5nXG5cbiAgQElucHV0KClcbiAgcHVibGljIHRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PlxuXG4gIHB1YmxpYyBtb2RlbCE6IEhhbmRsZU1vZGVsXG5cbiAgQEluamVjdGlvbkNvbnRleHRcbiAgcHVibGljIG5nT25Jbml0KCkge1xuICAgIHRoaXMubW9kZWwgPSBuZXcgSGFuZGxlTW9kZWwoXG4gICAgICB7XG4gICAgICAgIHBvc2l0aW9uOiB0aGlzLnBvc2l0aW9uLFxuICAgICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgICBwYXJlbnRSZWZlcmVuY2U6IHRoaXMuZWxlbWVudC5wYXJlbnRFbGVtZW50ISxcbiAgICAgICAgdGVtcGxhdGU6IHRoaXMudGVtcGxhdGVcbiAgICAgIH0sXG4gICAgICB0aGlzLmhhbmRsZVNlcnZpY2Uubm9kZSgpIVxuICAgIClcblxuICAgIHRoaXMuaGFuZGxlU2VydmljZS5jcmVhdGVIYW5kbGUodGhpcy5tb2RlbClcblxuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB0aGlzLm1vZGVsLnVwZGF0ZVBhcmVudCgpKVxuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuaGFuZGxlU2VydmljZS5kZXN0cm95SGFuZGxlKHRoaXMubW9kZWwpXG4gIH1cbn1cblxuIiwiIl19
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC12Zmxvdy1saWIvc3JjL2xpYi92Zmxvdy9jb21wb25lbnRzL2hhbmRsZS9oYW5kbGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2NvbXBvbmVudHMvaGFuZGxlL2hhbmRsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQWtDLE1BQU0sRUFBaUMsTUFBTSxlQUFlLENBQUM7QUFFbkwsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzlELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQWdCLE1BQU0scURBQXFELENBQUM7O0FBT3JHLE1BQU0sT0FBTyxlQUFlO0lBTDVCO1FBTVMsYUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMzQixrQkFBYSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQTtRQUNyQyxZQUFPLEdBQUcsTUFBTSxDQUEwQixVQUFVLENBQUMsQ0FBQyxhQUFhLENBQUE7UUFDbkUsZUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQTtLQWdEeEM7SUF0QlEsUUFBUTtRQUNiLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUE7UUFFdEMsSUFBSSxJQUFJLEVBQUU7WUFDUixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksV0FBVyxDQUMxQjtnQkFDRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7Z0JBQ3ZCLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtnQkFDZixFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7Z0JBQ1gsZUFBZSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYztnQkFDNUMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO2FBQ3hCLEVBQ0QsSUFBSSxDQUNMLENBQUE7WUFFRCxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7WUFFM0MscUJBQXFCLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFBO1lBRXRELElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO1NBQzlFO0lBQ0gsQ0FBQzsrR0FuRFUsZUFBZTttR0FBZixlQUFlLDhIQ1g1QixFQUFBOztBRHlDUztJQUROLGdCQUFnQjsrQ0FzQmhCOzRGQW5EVSxlQUFlO2tCQUwzQixTQUFTOytCQUNFLFFBQVEsbUJBRUQsdUJBQXVCLENBQUMsTUFBTTs4QkFZeEMsUUFBUTtzQkFEZCxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFPbEIsSUFBSTtzQkFEVixLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFPbEIsRUFBRTtzQkFEUixLQUFLO2dCQUlDLFFBQVE7c0JBRGQsS0FBSztnQkFNQyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRGVzdHJveVJlZiwgRWxlbWVudFJlZiwgSW5qZWN0b3IsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVGVtcGxhdGVSZWYsIGluamVjdCwgcnVuSW5JbmplY3Rpb25Db250ZXh0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBvc2l0aW9uIH0gZnJvbSAnLi4vLi4vdHlwZXMvcG9zaXRpb24udHlwZSc7XG5pbXBvcnQgeyBIYW5kbGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaGFuZGxlLnNlcnZpY2UnO1xuaW1wb3J0IHsgSGFuZGxlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvaGFuZGxlLm1vZGVsJztcbmltcG9ydCB7IEluamVjdGlvbkNvbnRleHQsIFdpdGhJbmplY3RvciB9IGZyb20gJy4uLy4uL2RlY29yYXRvcnMvcnVuLWluLWluamVjdGlvbi1jb250ZXh0LmRlY29yYXRvcic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2hhbmRsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9oYW5kbGUuY29tcG9uZW50Lmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBIYW5kbGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIFdpdGhJbmplY3RvciB7XG4gIHB1YmxpYyBpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG4gIHByaXZhdGUgaGFuZGxlU2VydmljZSA9IGluamVjdChIYW5kbGVTZXJ2aWNlKVxuICBwcml2YXRlIGVsZW1lbnQgPSBpbmplY3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+KEVsZW1lbnRSZWYpLm5hdGl2ZUVsZW1lbnRcbiAgcHJpdmF0ZSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpXG5cbiAgLyoqXG4gICAqIEF0IHdoYXQgc2lkZSBvZiBub2RlIHRoaXMgY29tcG9uZW50IHNob3VsZCBiZSBwbGFjZWRcbiAgICovXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXG4gIHB1YmxpYyBwb3NpdGlvbiE6IFBvc2l0aW9uXG5cbiAgLyoqXG4gICAqIFNvdXJjZSBvciB0YXJnZXRcbiAgICovXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXG4gIHB1YmxpYyB0eXBlITogJ3NvdXJjZScgfCAndGFyZ2V0J1xuXG4gIC8qKlxuICAgKiBTaG91bGQgYmUgdXNlZCBpZiBub2RlIGhhcyBtb3JlIHRoYW4gb25lIHNvdXJjZS90YXJnZXRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBpZD86IHN0cmluZ1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB0ZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT5cblxuICBwdWJsaWMgbW9kZWwhOiBIYW5kbGVNb2RlbFxuXG4gIEBJbmplY3Rpb25Db250ZXh0XG4gIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5oYW5kbGVTZXJ2aWNlLm5vZGUoKVxuXG4gICAgaWYgKG5vZGUpIHtcbiAgICAgIHRoaXMubW9kZWwgPSBuZXcgSGFuZGxlTW9kZWwoXG4gICAgICAgIHtcbiAgICAgICAgICBwb3NpdGlvbjogdGhpcy5wb3NpdGlvbixcbiAgICAgICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICAgICAgcGFyZW50UmVmZXJlbmNlOiB0aGlzLmVsZW1lbnQucGFyZW50RWxlbWVudCEsXG4gICAgICAgICAgdGVtcGxhdGU6IHRoaXMudGVtcGxhdGVcbiAgICAgICAgfSxcbiAgICAgICAgbm9kZVxuICAgICAgKVxuXG4gICAgICB0aGlzLmhhbmRsZVNlcnZpY2UuY3JlYXRlSGFuZGxlKHRoaXMubW9kZWwpXG5cbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB0aGlzLm1vZGVsLnVwZGF0ZVBhcmVudCgpKVxuXG4gICAgICB0aGlzLmRlc3Ryb3lSZWYub25EZXN0cm95KCgpID0+IHRoaXMuaGFuZGxlU2VydmljZS5kZXN0cm95SGFuZGxlKHRoaXMubW9kZWwpKVxuICAgIH1cbiAgfVxufVxuXG4iLCIiXX0=
@@ -12,6 +12,7 @@ import { SelectionService } from '../../services/selection.service';
12
12
  import { ConnectionControllerDirective } from '../../directives/connection-controller.directive';
13
13
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
14
14
  import { NodeAccessorService } from '../../services/node-accessor.service';
15
+ import { OverlaysService } from '../../services/overlays.service';
15
16
  import * as i0 from "@angular/core";
16
17
  import * as i1 from "@angular/common";
17
18
  import * as i2 from "../default-node/default-node.component";
@@ -31,11 +32,13 @@ export class NodeComponent {
31
32
  this.hostRef = inject(ElementRef);
32
33
  this.connectionController = inject(ConnectionControllerDirective);
33
34
  this.nodeAccessor = inject(NodeAccessorService);
35
+ this.overlaysService = inject(OverlaysService);
34
36
  this.zone = inject(NgZone);
35
37
  this.showMagnet = computed(() => this.flowStatusService.status().state === 'connection-start' ||
36
38
  this.flowStatusService.status().state === 'connection-validation');
37
39
  this.styleWidth = computed(() => `${this.nodeModel.size().width}px`);
38
40
  this.styleHeight = computed(() => `${this.nodeModel.size().height}px`);
41
+ this.toolbar = computed(() => this.overlaysService.nodeToolbars().get(this.nodeModel));
39
42
  }
40
43
  ngOnInit() {
41
44
  this.nodeAccessor.model.set(this.nodeModel);
@@ -93,7 +96,7 @@ export class NodeComponent {
93
96
  }
94
97
  }
95
98
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NodeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
96
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: NodeComponent, selector: "g[node]", inputs: { nodeModel: "nodeModel", nodeTemplate: "nodeTemplate", groupNodeTemplate: "groupNodeTemplate" }, providers: [HandleService, NodeAccessorService], viewQueries: [{ propertyName: "nodeContentRef", first: true, predicate: ["nodeContent"], descendants: true }, { propertyName: "htmlWrapperRef", first: true, predicate: ["htmlWrapper"], descendants: true }], ngImport: i0, template: "<!-- Default node -->\n<svg:foreignObject\n *ngIf=\"nodeModel.node.type === 'default'\"\n class=\"selectable\"\n #nodeContent\n [attr.width]=\"nodeModel.size().width\"\n [attr.height]=\"nodeModel.size().height\"\n (pointerStart)=\"pullNode(); selectNode()\"\n>\n <default-node\n #htmlWrapper\n [selected]=\"nodeModel.selected()\"\n [style.width]=\"styleWidth()\"\n [style.height]=\"styleHeight()\"\n [style.max-width]=\"styleWidth()\"\n [style.max-height]=\"styleHeight()\"\n >\n <div [outerHTML]=\"nodeModel.text()\"></div>\n\n <handle type=\"source\" [position]=\"nodeModel.sourcePosition()\" />\n <handle type=\"target\" [position]=\"nodeModel.targetPosition()\" />\n </default-node>\n</svg:foreignObject>\n\n<!-- Template node -->\n<svg:foreignObject\n *ngIf=\"nodeModel.node.type === 'html-template' && nodeTemplate\"\n class=\"selectable\"\n [attr.width]=\"nodeModel.size().width\"\n [attr.height]=\"nodeModel.size().height\"\n (pointerStart)=\"pullNode()\"\n>\n <div\n #htmlWrapper\n class=\"wrapper\"\n [style.width]=\"styleWidth()\"\n [style.height]=\"styleHeight()\"\n >\n <ng-container\n [ngTemplateOutlet]=\"nodeTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: { node: nodeModel.node, selected: nodeModel.selected } }\"\n [ngTemplateOutletInjector]=\"injector\"\n />\n </div>\n</svg:foreignObject>\n\n<!-- Component node -->\n<svg:foreignObject\n *ngIf=\"nodeModel.isComponentType\"\n class=\"selectable\"\n [attr.width]=\"nodeModel.size().width\"\n [attr.height]=\"nodeModel.size().height\"\n (pointerStart)=\"pullNode()\"\n>\n <div\n #htmlWrapper\n class=\"wrapper\"\n [style.width]=\"styleWidth()\"\n [style.height]=\"styleHeight()\"\n >\n <ng-container\n [ngComponentOutlet]=\"$any(nodeModel.node.type)\"\n [ngComponentOutletInputs]=\"nodeModel.componentTypeInputs()\"\n [ngComponentOutletInjector]=\"injector\"\n />\n </div>\n</svg:foreignObject>\n\n<!-- Default group node -->\n<svg:rect\n *ngIf=\"nodeModel.node.type === 'default-group'\"\n [resizable]=\"nodeModel.resizable()\"\n [gap]=\"3\"\n [resizerColor]=\"nodeModel.color()\"\n class=\"default-group-node\"\n rx=\"5\"\n ry=\"5\"\n [class.default-group-node_selected]=\"nodeModel.selected()\"\n [attr.width]=\"nodeModel.size().width\"\n [attr.height]=\"nodeModel.size().height\"\n [style.stroke]=\"nodeModel.color()\"\n [style.fill]=\"nodeModel.color()\"\n (pointerStart)=\"pullNode(); selectNode()\"\n/>\n\n<!-- Template group node -->\n<svg:g\n *ngIf=\"nodeModel.node.type === 'template-group' && groupNodeTemplate\"\n class=\"selectable\"\n (pointerStart)=\"pullNode()\"\n>\n <ng-container\n [ngTemplateOutlet]=\"groupNodeTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: { node: nodeModel.node, selected: nodeModel.selected, width: nodeModel.width, height: nodeModel.height } }\"\n [ngTemplateOutletInjector]=\"injector\"\n />\n</svg:g>\n\n<!-- Resizer -->\n<ng-container *ngIf=\"nodeModel.resizerTemplate() as template\">\n <ng-container *ngIf=\"nodeModel.resizable()\">\n <ng-template [ngTemplateOutlet]=\"template\" />\n </ng-container>\n</ng-container>\n\n<!-- Handles -->\n<ng-container *ngFor=\"let handle of nodeModel.handles()\">\n <svg:circle\n *ngIf=\"!handle.template\"\n class=\"default-handle\"\n [attr.cx]=\"handle.offset().x\"\n [attr.cy]=\"handle.offset().y\"\n [attr.stroke-width]=\"handle.strokeWidth\"\n r=\"5\"\n (pointerStart)=\"startConnection($event, handle)\"\n (pointerEnd)=\"endConnection(handle)\"\n />\n\n <svg:g\n *ngIf=\"handle.template\"\n [handleSizeController]=\"handle\"\n (pointerStart)=\"startConnection($event, handle)\"\n (pointerEnd)=\"endConnection(handle)\"\n >\n <ng-container *ngTemplateOutlet=\"handle.template; context: handle.templateContext\" />\n </svg:g>\n\n <svg:circle\n *ngIf=\"showMagnet()\"\n class=\"magnet\"\n [attr.r]=\"nodeModel.magnetRadius\"\n [attr.cx]=\"handle.offset().x\"\n [attr.cy]=\"handle.offset().y\"\n (pointerEnd)=\"endConnection(handle); resetValidateConnection(handle)\"\n (pointerOver)=\"validateConnection(handle)\"\n (pointerOut)=\"resetValidateConnection(handle)\"\n />\n</ng-container>\n", styles: [".magnet{opacity:0}.wrapper{display:table-cell}.default-group-node{stroke-width:1.5px;fill-opacity:.05}.default-group-node_selected{stroke-width:2px}.default-handle{stroke:#fff;fill:#1b262c}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "component", type: i2.DefaultNodeComponent, selector: "default-node", inputs: ["selected"] }, { kind: "component", type: i3.HandleComponent, selector: "handle", inputs: ["position", "type", "id", "template"] }, { kind: "component", type: i4.ResizableComponent, selector: "[resizable]", inputs: ["resizable", "resizerColor", "gap"] }, { kind: "directive", type: i5.HandleSizeControllerDirective, selector: "[handleSizeController]", inputs: ["handleSizeController"] }, { kind: "directive", type: i6.PointerDirective, selector: "[pointerStart], [pointerEnd], [pointerOver], [pointerOut]", outputs: ["pointerOver", "pointerOut", "pointerStart", "pointerEnd"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
99
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: NodeComponent, selector: "g[node]", inputs: { nodeModel: "nodeModel", nodeTemplate: "nodeTemplate", groupNodeTemplate: "groupNodeTemplate" }, host: { classAttribute: "vflow-node" }, providers: [HandleService, NodeAccessorService], viewQueries: [{ propertyName: "nodeContentRef", first: true, predicate: ["nodeContent"], descendants: true }, { propertyName: "htmlWrapperRef", first: true, predicate: ["htmlWrapper"], descendants: true }], ngImport: i0, template: "<!-- Default node -->\n<svg:foreignObject\n *ngIf=\"nodeModel.node.type === 'default'\"\n class=\"selectable\"\n #nodeContent\n [attr.width]=\"nodeModel.size().width\"\n [attr.height]=\"nodeModel.size().height\"\n (pointerStart)=\"pullNode(); selectNode()\"\n>\n <default-node\n #htmlWrapper\n [selected]=\"nodeModel.selected()\"\n [style.width]=\"styleWidth()\"\n [style.height]=\"styleHeight()\"\n [style.max-width]=\"styleWidth()\"\n [style.max-height]=\"styleHeight()\"\n >\n <div [outerHTML]=\"nodeModel.text()\"></div>\n\n <handle type=\"source\" [position]=\"nodeModel.sourcePosition()\" />\n <handle type=\"target\" [position]=\"nodeModel.targetPosition()\" />\n </default-node>\n</svg:foreignObject>\n\n<!-- Template node -->\n<svg:foreignObject\n *ngIf=\"nodeModel.node.type === 'html-template' && nodeTemplate\"\n class=\"selectable\"\n [attr.width]=\"nodeModel.size().width\"\n [attr.height]=\"nodeModel.size().height\"\n (pointerStart)=\"pullNode()\"\n>\n <div\n #htmlWrapper\n class=\"wrapper\"\n [style.width]=\"styleWidth()\"\n [style.height]=\"styleHeight()\"\n >\n <ng-container\n [ngTemplateOutlet]=\"nodeTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: { node: nodeModel.node, selected: nodeModel.selected } }\"\n [ngTemplateOutletInjector]=\"injector\"\n />\n </div>\n</svg:foreignObject>\n\n<!-- Component node -->\n<svg:foreignObject\n *ngIf=\"nodeModel.isComponentType\"\n class=\"selectable\"\n [attr.width]=\"nodeModel.size().width\"\n [attr.height]=\"nodeModel.size().height\"\n (pointerStart)=\"pullNode()\"\n>\n <div\n #htmlWrapper\n class=\"wrapper\"\n [style.width]=\"styleWidth()\"\n [style.height]=\"styleHeight()\"\n >\n <ng-container\n [ngComponentOutlet]=\"$any(nodeModel.node.type)\"\n [ngComponentOutletInputs]=\"nodeModel.componentTypeInputs()\"\n [ngComponentOutletInjector]=\"injector\"\n />\n </div>\n</svg:foreignObject>\n\n<!-- Default group node -->\n<svg:rect\n *ngIf=\"nodeModel.node.type === 'default-group'\"\n [resizable]=\"nodeModel.resizable()\"\n [gap]=\"3\"\n [resizerColor]=\"nodeModel.color()\"\n class=\"default-group-node\"\n rx=\"5\"\n ry=\"5\"\n [class.default-group-node_selected]=\"nodeModel.selected()\"\n [attr.width]=\"nodeModel.size().width\"\n [attr.height]=\"nodeModel.size().height\"\n [style.stroke]=\"nodeModel.color()\"\n [style.fill]=\"nodeModel.color()\"\n (pointerStart)=\"pullNode(); selectNode()\"\n/>\n\n<!-- Template group node -->\n<svg:g\n *ngIf=\"nodeModel.node.type === 'template-group' && groupNodeTemplate\"\n class=\"selectable\"\n (pointerStart)=\"pullNode()\"\n>\n <ng-container\n [ngTemplateOutlet]=\"groupNodeTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: { node: nodeModel.node, selected: nodeModel.selected, width: nodeModel.width, height: nodeModel.height } }\"\n [ngTemplateOutletInjector]=\"injector\"\n />\n</svg:g>\n\n<!-- Resizer -->\n<ng-container *ngIf=\"nodeModel.resizerTemplate() as template\">\n <ng-container *ngIf=\"nodeModel.resizable()\">\n <ng-template [ngTemplateOutlet]=\"template\" />\n </ng-container>\n</ng-container>\n\n<!-- Handles -->\n<ng-container *ngFor=\"let handle of nodeModel.handles()\">\n <svg:circle\n *ngIf=\"!handle.template\"\n class=\"default-handle\"\n [attr.cx]=\"handle.offset().x\"\n [attr.cy]=\"handle.offset().y\"\n [attr.stroke-width]=\"handle.strokeWidth\"\n r=\"5\"\n (pointerStart)=\"startConnection($event, handle)\"\n (pointerEnd)=\"endConnection(handle)\"\n />\n\n <svg:g\n *ngIf=\"handle.template\"\n [handleSizeController]=\"handle\"\n (pointerStart)=\"startConnection($event, handle)\"\n (pointerEnd)=\"endConnection(handle)\"\n >\n <ng-container *ngTemplateOutlet=\"handle.template; context: handle.templateContext\" />\n </svg:g>\n\n <svg:circle\n *ngIf=\"showMagnet()\"\n class=\"magnet\"\n [attr.r]=\"nodeModel.magnetRadius\"\n [attr.cx]=\"handle.offset().x\"\n [attr.cy]=\"handle.offset().y\"\n (pointerEnd)=\"endConnection(handle); resetValidateConnection(handle)\"\n (pointerOver)=\"validateConnection(handle)\"\n (pointerOut)=\"resetValidateConnection(handle)\"\n />\n</ng-container>\n\n<!-- Toolbar -->\n<svg:foreignObject\n *ngIf=\"toolbar() as toolbar\"\n [attr.width]=\"toolbar.size().width\"\n [attr.height]=\"toolbar.size().height\"\n [attr.transform]=\"toolbar.transform()\"\n>\n <ng-container [ngTemplateOutlet]=\"toolbar.template()\" />\n</svg:foreignObject>\n", styles: [".magnet{opacity:0}.wrapper{display:table-cell}.default-group-node{stroke-width:1.5px;fill-opacity:.05}.default-group-node_selected{stroke-width:2px}.default-handle{stroke:#fff;fill:#1b262c}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "component", type: i2.DefaultNodeComponent, selector: "default-node", inputs: ["selected"] }, { kind: "component", type: i3.HandleComponent, selector: "handle", inputs: ["position", "type", "id", "template"] }, { kind: "component", type: i4.ResizableComponent, selector: "[resizable]", inputs: ["resizable", "resizerColor", "gap"] }, { kind: "directive", type: i5.HandleSizeControllerDirective, selector: "[handleSizeController]", inputs: ["handleSizeController"] }, { kind: "directive", type: i6.PointerDirective, selector: "[pointerStart], [pointerEnd], [pointerOver], [pointerOut]", outputs: ["pointerOver", "pointerOut", "pointerStart", "pointerEnd"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
97
100
  }
98
101
  __decorate([
99
102
  InjectionContext
@@ -103,7 +106,9 @@ __decorate([
103
106
  ], NodeComponent.prototype, "ngAfterViewInit", null);
104
107
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NodeComponent, decorators: [{
105
108
  type: Component,
106
- args: [{ selector: 'g[node]', changeDetection: ChangeDetectionStrategy.OnPush, providers: [HandleService, NodeAccessorService], template: "<!-- Default node -->\n<svg:foreignObject\n *ngIf=\"nodeModel.node.type === 'default'\"\n class=\"selectable\"\n #nodeContent\n [attr.width]=\"nodeModel.size().width\"\n [attr.height]=\"nodeModel.size().height\"\n (pointerStart)=\"pullNode(); selectNode()\"\n>\n <default-node\n #htmlWrapper\n [selected]=\"nodeModel.selected()\"\n [style.width]=\"styleWidth()\"\n [style.height]=\"styleHeight()\"\n [style.max-width]=\"styleWidth()\"\n [style.max-height]=\"styleHeight()\"\n >\n <div [outerHTML]=\"nodeModel.text()\"></div>\n\n <handle type=\"source\" [position]=\"nodeModel.sourcePosition()\" />\n <handle type=\"target\" [position]=\"nodeModel.targetPosition()\" />\n </default-node>\n</svg:foreignObject>\n\n<!-- Template node -->\n<svg:foreignObject\n *ngIf=\"nodeModel.node.type === 'html-template' && nodeTemplate\"\n class=\"selectable\"\n [attr.width]=\"nodeModel.size().width\"\n [attr.height]=\"nodeModel.size().height\"\n (pointerStart)=\"pullNode()\"\n>\n <div\n #htmlWrapper\n class=\"wrapper\"\n [style.width]=\"styleWidth()\"\n [style.height]=\"styleHeight()\"\n >\n <ng-container\n [ngTemplateOutlet]=\"nodeTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: { node: nodeModel.node, selected: nodeModel.selected } }\"\n [ngTemplateOutletInjector]=\"injector\"\n />\n </div>\n</svg:foreignObject>\n\n<!-- Component node -->\n<svg:foreignObject\n *ngIf=\"nodeModel.isComponentType\"\n class=\"selectable\"\n [attr.width]=\"nodeModel.size().width\"\n [attr.height]=\"nodeModel.size().height\"\n (pointerStart)=\"pullNode()\"\n>\n <div\n #htmlWrapper\n class=\"wrapper\"\n [style.width]=\"styleWidth()\"\n [style.height]=\"styleHeight()\"\n >\n <ng-container\n [ngComponentOutlet]=\"$any(nodeModel.node.type)\"\n [ngComponentOutletInputs]=\"nodeModel.componentTypeInputs()\"\n [ngComponentOutletInjector]=\"injector\"\n />\n </div>\n</svg:foreignObject>\n\n<!-- Default group node -->\n<svg:rect\n *ngIf=\"nodeModel.node.type === 'default-group'\"\n [resizable]=\"nodeModel.resizable()\"\n [gap]=\"3\"\n [resizerColor]=\"nodeModel.color()\"\n class=\"default-group-node\"\n rx=\"5\"\n ry=\"5\"\n [class.default-group-node_selected]=\"nodeModel.selected()\"\n [attr.width]=\"nodeModel.size().width\"\n [attr.height]=\"nodeModel.size().height\"\n [style.stroke]=\"nodeModel.color()\"\n [style.fill]=\"nodeModel.color()\"\n (pointerStart)=\"pullNode(); selectNode()\"\n/>\n\n<!-- Template group node -->\n<svg:g\n *ngIf=\"nodeModel.node.type === 'template-group' && groupNodeTemplate\"\n class=\"selectable\"\n (pointerStart)=\"pullNode()\"\n>\n <ng-container\n [ngTemplateOutlet]=\"groupNodeTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: { node: nodeModel.node, selected: nodeModel.selected, width: nodeModel.width, height: nodeModel.height } }\"\n [ngTemplateOutletInjector]=\"injector\"\n />\n</svg:g>\n\n<!-- Resizer -->\n<ng-container *ngIf=\"nodeModel.resizerTemplate() as template\">\n <ng-container *ngIf=\"nodeModel.resizable()\">\n <ng-template [ngTemplateOutlet]=\"template\" />\n </ng-container>\n</ng-container>\n\n<!-- Handles -->\n<ng-container *ngFor=\"let handle of nodeModel.handles()\">\n <svg:circle\n *ngIf=\"!handle.template\"\n class=\"default-handle\"\n [attr.cx]=\"handle.offset().x\"\n [attr.cy]=\"handle.offset().y\"\n [attr.stroke-width]=\"handle.strokeWidth\"\n r=\"5\"\n (pointerStart)=\"startConnection($event, handle)\"\n (pointerEnd)=\"endConnection(handle)\"\n />\n\n <svg:g\n *ngIf=\"handle.template\"\n [handleSizeController]=\"handle\"\n (pointerStart)=\"startConnection($event, handle)\"\n (pointerEnd)=\"endConnection(handle)\"\n >\n <ng-container *ngTemplateOutlet=\"handle.template; context: handle.templateContext\" />\n </svg:g>\n\n <svg:circle\n *ngIf=\"showMagnet()\"\n class=\"magnet\"\n [attr.r]=\"nodeModel.magnetRadius\"\n [attr.cx]=\"handle.offset().x\"\n [attr.cy]=\"handle.offset().y\"\n (pointerEnd)=\"endConnection(handle); resetValidateConnection(handle)\"\n (pointerOver)=\"validateConnection(handle)\"\n (pointerOut)=\"resetValidateConnection(handle)\"\n />\n</ng-container>\n", styles: [".magnet{opacity:0}.wrapper{display:table-cell}.default-group-node{stroke-width:1.5px;fill-opacity:.05}.default-group-node_selected{stroke-width:2px}.default-handle{stroke:#fff;fill:#1b262c}\n"] }]
109
+ args: [{ selector: 'g[node]', changeDetection: ChangeDetectionStrategy.OnPush, providers: [HandleService, NodeAccessorService], host: {
110
+ 'class': 'vflow-node',
111
+ }, template: "<!-- Default node -->\n<svg:foreignObject\n *ngIf=\"nodeModel.node.type === 'default'\"\n class=\"selectable\"\n #nodeContent\n [attr.width]=\"nodeModel.size().width\"\n [attr.height]=\"nodeModel.size().height\"\n (pointerStart)=\"pullNode(); selectNode()\"\n>\n <default-node\n #htmlWrapper\n [selected]=\"nodeModel.selected()\"\n [style.width]=\"styleWidth()\"\n [style.height]=\"styleHeight()\"\n [style.max-width]=\"styleWidth()\"\n [style.max-height]=\"styleHeight()\"\n >\n <div [outerHTML]=\"nodeModel.text()\"></div>\n\n <handle type=\"source\" [position]=\"nodeModel.sourcePosition()\" />\n <handle type=\"target\" [position]=\"nodeModel.targetPosition()\" />\n </default-node>\n</svg:foreignObject>\n\n<!-- Template node -->\n<svg:foreignObject\n *ngIf=\"nodeModel.node.type === 'html-template' && nodeTemplate\"\n class=\"selectable\"\n [attr.width]=\"nodeModel.size().width\"\n [attr.height]=\"nodeModel.size().height\"\n (pointerStart)=\"pullNode()\"\n>\n <div\n #htmlWrapper\n class=\"wrapper\"\n [style.width]=\"styleWidth()\"\n [style.height]=\"styleHeight()\"\n >\n <ng-container\n [ngTemplateOutlet]=\"nodeTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: { node: nodeModel.node, selected: nodeModel.selected } }\"\n [ngTemplateOutletInjector]=\"injector\"\n />\n </div>\n</svg:foreignObject>\n\n<!-- Component node -->\n<svg:foreignObject\n *ngIf=\"nodeModel.isComponentType\"\n class=\"selectable\"\n [attr.width]=\"nodeModel.size().width\"\n [attr.height]=\"nodeModel.size().height\"\n (pointerStart)=\"pullNode()\"\n>\n <div\n #htmlWrapper\n class=\"wrapper\"\n [style.width]=\"styleWidth()\"\n [style.height]=\"styleHeight()\"\n >\n <ng-container\n [ngComponentOutlet]=\"$any(nodeModel.node.type)\"\n [ngComponentOutletInputs]=\"nodeModel.componentTypeInputs()\"\n [ngComponentOutletInjector]=\"injector\"\n />\n </div>\n</svg:foreignObject>\n\n<!-- Default group node -->\n<svg:rect\n *ngIf=\"nodeModel.node.type === 'default-group'\"\n [resizable]=\"nodeModel.resizable()\"\n [gap]=\"3\"\n [resizerColor]=\"nodeModel.color()\"\n class=\"default-group-node\"\n rx=\"5\"\n ry=\"5\"\n [class.default-group-node_selected]=\"nodeModel.selected()\"\n [attr.width]=\"nodeModel.size().width\"\n [attr.height]=\"nodeModel.size().height\"\n [style.stroke]=\"nodeModel.color()\"\n [style.fill]=\"nodeModel.color()\"\n (pointerStart)=\"pullNode(); selectNode()\"\n/>\n\n<!-- Template group node -->\n<svg:g\n *ngIf=\"nodeModel.node.type === 'template-group' && groupNodeTemplate\"\n class=\"selectable\"\n (pointerStart)=\"pullNode()\"\n>\n <ng-container\n [ngTemplateOutlet]=\"groupNodeTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: { node: nodeModel.node, selected: nodeModel.selected, width: nodeModel.width, height: nodeModel.height } }\"\n [ngTemplateOutletInjector]=\"injector\"\n />\n</svg:g>\n\n<!-- Resizer -->\n<ng-container *ngIf=\"nodeModel.resizerTemplate() as template\">\n <ng-container *ngIf=\"nodeModel.resizable()\">\n <ng-template [ngTemplateOutlet]=\"template\" />\n </ng-container>\n</ng-container>\n\n<!-- Handles -->\n<ng-container *ngFor=\"let handle of nodeModel.handles()\">\n <svg:circle\n *ngIf=\"!handle.template\"\n class=\"default-handle\"\n [attr.cx]=\"handle.offset().x\"\n [attr.cy]=\"handle.offset().y\"\n [attr.stroke-width]=\"handle.strokeWidth\"\n r=\"5\"\n (pointerStart)=\"startConnection($event, handle)\"\n (pointerEnd)=\"endConnection(handle)\"\n />\n\n <svg:g\n *ngIf=\"handle.template\"\n [handleSizeController]=\"handle\"\n (pointerStart)=\"startConnection($event, handle)\"\n (pointerEnd)=\"endConnection(handle)\"\n >\n <ng-container *ngTemplateOutlet=\"handle.template; context: handle.templateContext\" />\n </svg:g>\n\n <svg:circle\n *ngIf=\"showMagnet()\"\n class=\"magnet\"\n [attr.r]=\"nodeModel.magnetRadius\"\n [attr.cx]=\"handle.offset().x\"\n [attr.cy]=\"handle.offset().y\"\n (pointerEnd)=\"endConnection(handle); resetValidateConnection(handle)\"\n (pointerOver)=\"validateConnection(handle)\"\n (pointerOut)=\"resetValidateConnection(handle)\"\n />\n</ng-container>\n\n<!-- Toolbar -->\n<svg:foreignObject\n *ngIf=\"toolbar() as toolbar\"\n [attr.width]=\"toolbar.size().width\"\n [attr.height]=\"toolbar.size().height\"\n [attr.transform]=\"toolbar.transform()\"\n>\n <ng-container [ngTemplateOutlet]=\"toolbar.template()\" />\n</svg:foreignObject>\n", styles: [".magnet{opacity:0}.wrapper{display:table-cell}.default-group-node{stroke-width:1.5px;fill-opacity:.05}.default-group-node_selected{stroke-width:2px}.default-handle{stroke:#fff;fill:#1b262c}\n"] }]
107
112
  }], propDecorators: { nodeModel: [{
108
113
  type: Input
109
114
  }], nodeTemplate: [{
@@ -117,4 +122,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
117
122
  type: ViewChild,
118
123
  args: ['htmlWrapper']
119
124
  }], ngOnInit: [], ngAfterViewInit: [] } });
120
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmZsb3ctbGliL3NyYy9saWIvdmZsb3cvY29tcG9uZW50cy9ub2RlL25vZGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2NvbXBvbmVudHMvbm9kZS9ub2RlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQWlCLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQWtDLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1TCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUVwRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFOUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2xELE9BQU8sRUFBRSxNQUFNLEVBQVMsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBZ0IsTUFBTSxxREFBcUQsQ0FBQztBQUNyRyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztB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S0FBSztnQkFJQyxjQUFjO3NCQURwQixTQUFTO3VCQUFDLGFBQWE7Z0JBSWpCLGNBQWM7c0JBRHBCLFNBQVM7dUJBQUMsYUFBYTtnQkFZakIsUUFBUSxNQTZCUixlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5qZWN0b3IsIElucHV0LCBOZ1pvbmUsIE9uRGVzdHJveSwgT25Jbml0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkLCBjb21wdXRlZCwgZWZmZWN0LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERyYWdnYWJsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kcmFnZ2FibGUuc2VydmljZSc7XG5pbXBvcnQgeyBOb2RlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvbm9kZS5tb2RlbCc7XG5pbXBvcnQgeyBGbG93U3RhdHVzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Zsb3ctc3RhdHVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgSGFuZGxlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2hhbmRsZS5zZXJ2aWNlJztcbmltcG9ydCB7IEhhbmRsZU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2hhbmRsZS5tb2RlbCc7XG5pbXBvcnQgeyByZXNpemFibGUgfSBmcm9tICcuLi8uLi91dGlscy9yZXNpemFibGUnO1xuaW1wb3J0IHsgZmlsdGVyLCBmaXJzdCwgbWFwLCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJbmplY3Rpb25Db250ZXh0LCBXaXRoSW5qZWN0b3IgfSBmcm9tICcuLi8uLi9kZWNvcmF0b3JzL3J1bi1pbi1pbmplY3Rpb24tY29udGV4dC5kZWNvcmF0b3InO1xuaW1wb3J0IHsgTm9kZVJlbmRlcmluZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ub2RlLXJlbmRlcmluZy5zZXJ2aWNlJztcbmltcG9ydCB7IEZsb3dTZXR0aW5nc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mbG93LXNldHRpbmdzLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2VsZWN0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3NlbGVjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IENvbm5lY3Rpb25Db250cm9sbGVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9jb25uZWN0aW9uLWNvbnRyb2xsZXIuZGlyZWN0aXZlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IE5vZGVBY2Nlc3NvclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ub2RlLWFjY2Vzc29yLnNlcnZpY2UnO1xuXG5leHBvcnQgdHlwZSBIYW5kbGVTdGF0ZSA9ICd2YWxpZCcgfCAnaW52YWxpZCcgfCAnaWRsZSdcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZ1tub2RlXScsXG4gIHRlbXBsYXRlVXJsOiAnLi9ub2RlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbm9kZS5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgcHJvdmlkZXJzOiBbSGFuZGxlU2VydmljZSwgTm9kZUFjY2Vzc29yU2VydmljZV1cbn0pXG5leHBvcnQgY2xhc3MgTm9kZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBXaXRoSW5qZWN0b3Ige1xuICBwdWJsaWMgaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpXG4gIHByaXZhdGUgaGFuZGxlU2VydmljZSA9IGluamVjdChIYW5kbGVTZXJ2aWNlKVxuICBwcml2YXRlIGRyYWdnYWJsZVNlcnZpY2UgPSBpbmplY3QoRHJhZ2dhYmxlU2VydmljZSlcbiAgcHJpdmF0ZSBmbG93U3RhdHVzU2VydmljZSA9IGluamVjdChGbG93U3RhdHVzU2VydmljZSlcbiAgcHJpdmF0ZSBub2RlUmVuZGVyaW5nU2VydmljZSA9IGluamVjdChOb2RlUmVuZGVyaW5nU2VydmljZSlcbiAgcHJpdmF0ZSBmbG93U2V0dGluZ3NTZXJ2aWNlID0gaW5qZWN0KEZsb3dTZXR0aW5nc1NlcnZpY2UpXG4gIHByaXZhdGUgc2VsZWN0aW9uU2VydmljZSA9IGluamVjdChTZWxlY3Rpb25TZXJ2aWNlKVxuICBwcml2YXRlIGhvc3RSZWYgPSBpbmplY3Q8RWxlbWVudFJlZjxTVkdFbGVtZW50Pj4oRWxlbWVudFJlZilcbiAgcHJpdmF0ZSBjb25uZWN0aW9uQ29udHJvbGxlciA9IGluamVjdChDb25uZWN0aW9uQ29udHJvbGxlckRpcmVjdGl2ZSlcbiAgcHJpdmF0ZSBub2RlQWNjZXNzb3IgPSBpbmplY3QoTm9kZUFjY2Vzc29yU2VydmljZSk7XG4gIHByaXZhdGUgem9uZSA9IGluamVjdChOZ1pvbmUpXG5cbiAgQElucHV0KClcbiAgcHVibGljIG5vZGVNb2RlbCE6IE5vZGVNb2RlbFxuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBub2RlVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+XG5cbiAgQElucHV0KClcbiAgcHVibGljIGdyb3VwTm9kZVRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PlxuXG4gIEBWaWV3Q2hpbGQoJ25vZGVDb250ZW50JylcbiAgcHVibGljIG5vZGVDb250ZW50UmVmITogRWxlbWVudFJlZjxTVkdHcmFwaGljc0VsZW1lbnQ+XG5cbiAgQFZpZXdDaGlsZCgnaHRtbFdyYXBwZXInKVxuICBwdWJsaWMgaHRtbFdyYXBwZXJSZWYhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PlxuXG4gIHByb3RlY3RlZCBzaG93TWFnbmV0ID0gY29tcHV0ZWQoKCkgPT5cbiAgICB0aGlzLmZsb3dTdGF0dXNTZXJ2aWNlLnN0YXR1cygpLnN0YXRlID09PSAnY29ubmVjdGlvbi1zdGFydCcgfHxcbiAgICB0aGlzLmZsb3dTdGF0dXNTZXJ2aWNlLnN0YXR1cygpLnN0YXRlID09PSAnY29ubmVjdGlvbi12YWxpZGF0aW9uJ1xuICApXG5cbiAgcHJvdGVjdGVkIHN0eWxlV2lkdGggPSBjb21wdXRlZCgoKSA9PiBgJHt0aGlzLm5vZGVNb2RlbC5zaXplKCkud2lkdGh9cHhgKVxuICBwcm90ZWN0ZWQgc3R5bGVIZWlnaHQgPSBjb21wdXRlZCgoKSA9PiBgJHt0aGlzLm5vZGVNb2RlbC5zaXplKCkuaGVpZ2h0fXB4YClcblxuICBASW5qZWN0aW9uQ29udGV4dFxuICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5ub2RlQWNjZXNzb3IubW9kZWwuc2V0KHRoaXMubm9kZU1vZGVsKTtcblxuICAgIHRoaXMuaGFuZGxlU2VydmljZS5ub2RlLnNldCh0aGlzLm5vZGVNb2RlbCk7XG5cbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMubm9kZU1vZGVsLmRyYWdnYWJsZSgpKSB7XG4gICAgICAgIHRoaXMuZHJhZ2dhYmxlU2VydmljZS5lbmFibGUodGhpcy5ob3N0UmVmLm5hdGl2ZUVsZW1lbnQsIHRoaXMubm9kZU1vZGVsKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kcmFnZ2FibGVTZXJ2aWNlLmRpc2FibGUodGhpcy5ob3N0UmVmLm5hdGl2ZUVsZW1lbnQpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXMubm9kZU1vZGVsLmhhbmRsZXMkXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKChoYW5kbGVzKSA9PlxuICAgICAgICAgIHJlc2l6YWJsZShoYW5kbGVzLm1hcChoID0+IGgucGFyZW50UmVmZXJlbmNlISksIHRoaXMuem9uZSlcbiAgICAgICAgICAgIC5waXBlKG1hcCgoKSA9PiBoYW5kbGVzKSlcbiAgICAgICAgKSxcbiAgICAgICAgdGFwKChoYW5kbGVzKSA9PiB7XG4gICAgICAgICAgLy8gVE9ETyAocGVyZm9ybWFuY2UpIGluc3BlY3QgaG93IHRvIGF2b2lkIGNhbGxzIG9mIHRoaXMgd2hlbiBmbG93IGluaXRpYWxseSByZW5kZXJlZFxuICAgICAgICAgIGhhbmRsZXMuZm9yRWFjaChoID0+IGgudXBkYXRlUGFyZW50KCkpXG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpXG4gIH1cblxuICBASW5qZWN0aW9uQ29udGV4dFxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMubm9kZU1vZGVsLmxpbmtEZWZhdWx0Tm9kZVNpemVXaXRoTW9kZWxTaXplKClcblxuICAgIGlmICh0aGlzLm5vZGVNb2RlbC5ub2RlLnR5cGUgPT09ICdodG1sLXRlbXBsYXRlJyB8fCB0aGlzLm5vZGVNb2RlbC5pc0NvbXBvbmVudFR5cGUpIHtcbiAgICAgIHJlc2l6YWJsZShbdGhpcy5odG1sV3JhcHBlclJlZi5uYXRpdmVFbGVtZW50XSwgdGhpcy56b25lKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBzdGFydFdpdGgobnVsbCksXG4gICAgICAgICAgdGFwKCgpID0+IHRoaXMubm9kZU1vZGVsLmhhbmRsZXMoKS5mb3JFYWNoKGggPT4gaC51cGRhdGVQYXJlbnQoKSkpLFxuICAgICAgICAgIGZpbHRlcigoKSA9PiAhdGhpcy5ub2RlTW9kZWwucmVzaXppbmcoKSksXG4gICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy5odG1sV3JhcHBlclJlZi5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoXG4gICAgICAgICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLmh0bWxXcmFwcGVyUmVmLm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0XG5cbiAgICAgICAgICAgIHRoaXMubm9kZU1vZGVsLnNpemUuc2V0KHsgd2lkdGgsIGhlaWdodCB9KVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpXG4gICAgICAgICkuc3Vic2NyaWJlKClcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kcmFnZ2FibGVTZXJ2aWNlLmRlc3Ryb3kodGhpcy5ob3N0UmVmLm5hdGl2ZUVsZW1lbnQpXG4gIH1cblxuICBwcm90ZWN0ZWQgc3RhcnRDb25uZWN0aW9uKGV2ZW50OiBFdmVudCwgaGFuZGxlOiBIYW5kbGVNb2RlbCkge1xuICAgIC8vIGlnbm9yZSBkcmFnIGJ5IHN0b3BwaW5nIHByb3BhZ2F0aW9uXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcblxuICAgIHRoaXMuY29ubmVjdGlvbkNvbnRyb2xsZXIuc3RhcnRDb25uZWN0aW9uKGhhbmRsZSlcbiAgfVxuXG4gIHByb3RlY3RlZCB2YWxpZGF0ZUNvbm5lY3Rpb24oaGFuZGxlOiBIYW5kbGVNb2RlbCkge1xuICAgIHRoaXMuY29ubmVjdGlvbkNvbnRyb2xsZXIudmFsaWRhdGVDb25uZWN0aW9uKGhhbmRsZSlcbiAgfVxuXG4gIHByb3RlY3RlZCByZXNldFZhbGlkYXRlQ29ubmVjdGlvbih0YXJnZXRIYW5kbGU6IEhhbmRsZU1vZGVsKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uQ29udHJvbGxlci5yZXNldFZhbGlkYXRlQ29ubmVjdGlvbih0YXJnZXRIYW5kbGUpXG4gIH1cblxuICBwcm90ZWN0ZWQgZW5kQ29ubmVjdGlvbihoYW5kbGU6IEhhbmRsZU1vZGVsKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uQ29udHJvbGxlci5lbmRDb25uZWN0aW9uKGhhbmRsZSlcbiAgfVxuXG4gIHByb3RlY3RlZCBwdWxsTm9kZSgpIHtcbiAgICB0aGlzLm5vZGVSZW5kZXJpbmdTZXJ2aWNlLnB1bGxOb2RlKHRoaXMubm9kZU1vZGVsKVxuICB9XG5cbiAgcHJvdGVjdGVkIHNlbGVjdE5vZGUoKSB7XG4gICAgaWYgKHRoaXMuZmxvd1NldHRpbmdzU2VydmljZS5lbnRpdGllc1NlbGVjdGFibGUoKSkge1xuICAgICAgdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdCh0aGlzLm5vZGVNb2RlbClcbiAgICB9XG4gIH1cbn1cbiIsIjwhLS0gRGVmYXVsdCBub2RlIC0tPlxuPHN2Zzpmb3JlaWduT2JqZWN0XG4gICpuZ0lmPVwibm9kZU1vZGVsLm5vZGUudHlwZSA9PT0gJ2RlZmF1bHQnXCJcbiAgY2xhc3M9XCJzZWxlY3RhYmxlXCJcbiAgI25vZGVDb250ZW50XG4gIFthdHRyLndpZHRoXT1cIm5vZGVNb2RlbC5zaXplKCkud2lkdGhcIlxuICBbYXR0ci5oZWlnaHRdPVwibm9kZU1vZGVsLnNpemUoKS5oZWlnaHRcIlxuICAocG9pbnRlclN0YXJ0KT1cInB1bGxOb2RlKCk7IHNlbGVjdE5vZGUoKVwiXG4+XG4gIDxkZWZhdWx0LW5vZGVcbiAgICAjaHRtbFdyYXBwZXJcbiAgICBbc2VsZWN0ZWRdPVwibm9kZU1vZGVsLnNlbGVjdGVkKClcIlxuICAgIFtzdHlsZS53aWR0aF09XCJzdHlsZVdpZHRoKClcIlxuICAgIFtzdHlsZS5oZWlnaHRdPVwic3R5bGVIZWlnaHQoKVwiXG4gICAgW3N0eWxlLm1heC13aWR0aF09XCJzdHlsZVdpZHRoKClcIlxuICAgIFtzdHlsZS5tYXgtaGVpZ2h0XT1cInN0eWxlSGVpZ2h0KClcIlxuICA+XG4gICAgPGRpdiBbb3V0ZXJIVE1MXT1cIm5vZGVNb2RlbC50ZXh0KClcIj48L2Rpdj5cblxuICAgIDxoYW5kbGUgdHlwZT1cInNvdXJjZVwiIFtwb3NpdGlvbl09XCJub2RlTW9kZWwuc291cmNlUG9zaXRpb24oKVwiIC8+XG4gICAgPGhhbmRsZSB0eXBlPVwidGFyZ2V0XCIgW3Bvc2l0aW9uXT1cIm5vZGVNb2RlbC50YXJnZXRQb3NpdGlvbigpXCIgLz5cbiAgPC9kZWZhdWx0LW5vZGU+XG48L3N2Zzpmb3JlaWduT2JqZWN0PlxuXG48IS0tIFRlbXBsYXRlIG5vZGUgLS0+XG48c3ZnOmZvcmVpZ25PYmplY3RcbiAgKm5nSWY9XCJub2RlTW9kZWwubm9kZS50eXBlID09PSAnaHRtbC10ZW1wbGF0ZScgJiYgbm9kZVRlbXBsYXRlXCJcbiAgY2xhc3M9XCJzZWxlY3RhYmxlXCJcbiAgW2F0dHIud2lkdGhdPVwibm9kZU1vZGVsLnNpemUoKS53aWR0aFwiXG4gIFthdHRyLmhlaWdodF09XCJub2RlTW9kZWwuc2l6ZSgpLmhlaWdodFwiXG4gIChwb2ludGVyU3RhcnQpPVwicHVsbE5vZGUoKVwiXG4+XG4gIDxkaXZcbiAgICAjaHRtbFdyYXBwZXJcbiAgICBjbGFzcz1cIndyYXBwZXJcIlxuICAgIFtzdHlsZS53aWR0aF09XCJzdHlsZVdpZHRoKClcIlxuICAgIFtzdHlsZS5oZWlnaHRdPVwic3R5bGVIZWlnaHQoKVwiXG4gID5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJub2RlVGVtcGxhdGVcIlxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiB7IG5vZGU6IG5vZGVNb2RlbC5ub2RlLCBzZWxlY3RlZDogbm9kZU1vZGVsLnNlbGVjdGVkIH0gfVwiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldEluamVjdG9yXT1cImluamVjdG9yXCJcbiAgICAvPlxuICA8L2Rpdj5cbjwvc3ZnOmZvcmVpZ25PYmplY3Q+XG5cbjwhLS0gQ29tcG9uZW50IG5vZGUgLS0+XG48c3ZnOmZvcmVpZ25PYmplY3RcbiAgKm5nSWY9XCJub2RlTW9kZWwuaXNDb21wb25lbnRUeXBlXCJcbiAgY2xhc3M9XCJzZWxlY3RhYmxlXCJcbiAgW2F0dHIud2lkdGhdPVwibm9kZU1vZGVsLnNpemUoKS53aWR0aFwiXG4gIFthdHRyLmhlaWdodF09XCJub2RlTW9kZWwuc2l6ZSgpLmhlaWdodFwiXG4gIChwb2ludGVyU3RhcnQpPVwicHVsbE5vZGUoKVwiXG4+XG4gIDxkaXZcbiAgICAjaHRtbFdyYXBwZXJcbiAgICBjbGFzcz1cIndyYXBwZXJcIlxuICAgIFtzdHlsZS53aWR0aF09XCJzdHlsZVdpZHRoKClcIlxuICAgIFtzdHlsZS5oZWlnaHRdPVwic3R5bGVIZWlnaHQoKVwiXG4gID5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICBbbmdDb21wb25lbnRPdXRsZXRdPVwiJGFueShub2RlTW9kZWwubm9kZS50eXBlKVwiXG4gICAgICBbbmdDb21wb25lbnRPdXRsZXRJbnB1dHNdPVwibm9kZU1vZGVsLmNvbXBvbmVudFR5cGVJbnB1dHMoKVwiXG4gICAgICBbbmdDb21wb25lbnRPdXRsZXRJbmplY3Rvcl09XCJpbmplY3RvclwiXG4gICAgLz5cbiAgPC9kaXY+XG48L3N2Zzpmb3JlaWduT2JqZWN0PlxuXG48IS0tIERlZmF1bHQgZ3JvdXAgbm9kZSAtLT5cbjxzdmc6cmVjdFxuICAqbmdJZj1cIm5vZGVNb2RlbC5ub2RlLnR5cGUgPT09ICdkZWZhdWx0LWdyb3VwJ1wiXG4gIFtyZXNpemFibGVdPVwibm9kZU1vZGVsLnJlc2l6YWJsZSgpXCJcbiAgW2dhcF09XCIzXCJcbiAgW3Jlc2l6ZXJDb2xvcl09XCJub2RlTW9kZWwuY29sb3IoKVwiXG4gIGNsYXNzPVwiZGVmYXVsdC1ncm91cC1ub2RlXCJcbiAgcng9XCI1XCJcbiAgcnk9XCI1XCJcbiAgW2NsYXNzLmRlZmF1bHQtZ3JvdXAtbm9kZV9zZWxlY3RlZF09XCJub2RlTW9kZWwuc2VsZWN0ZWQoKVwiXG4gIFthdHRyLndpZHRoXT1cIm5vZGVNb2RlbC5zaXplKCkud2lkdGhcIlxuICBbYXR0ci5oZWlnaHRdPVwibm9kZU1vZGVsLnNpemUoKS5oZWlnaHRcIlxuICBbc3R5bGUuc3Ryb2tlXT1cIm5vZGVNb2RlbC5jb2xvcigpXCJcbiAgW3N0eWxlLmZpbGxdPVwibm9kZU1vZGVsLmNvbG9yKClcIlxuICAocG9pbnRlclN0YXJ0KT1cInB1bGxOb2RlKCk7IHNlbGVjdE5vZGUoKVwiXG4vPlxuXG48IS0tIFRlbXBsYXRlIGdyb3VwIG5vZGUgIC0tPlxuPHN2ZzpnXG4gICpuZ0lmPVwibm9kZU1vZGVsLm5vZGUudHlwZSA9PT0gJ3RlbXBsYXRlLWdyb3VwJyAmJiBncm91cE5vZGVUZW1wbGF0ZVwiXG4gIGNsYXNzPVwic2VsZWN0YWJsZVwiXG4gIChwb2ludGVyU3RhcnQpPVwicHVsbE5vZGUoKVwiXG4+XG4gIDxuZy1jb250YWluZXJcbiAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJncm91cE5vZGVUZW1wbGF0ZVwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiB7IG5vZGU6IG5vZGVNb2RlbC5ub2RlLCBzZWxlY3RlZDogbm9kZU1vZGVsLnNlbGVjdGVkLCB3aWR0aDogbm9kZU1vZGVsLndpZHRoLCBoZWlnaHQ6IG5vZGVNb2RlbC5oZWlnaHQgfSB9XCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldEluamVjdG9yXT1cImluamVjdG9yXCJcbiAgLz5cbjwvc3ZnOmc+XG5cbjwhLS0gUmVzaXplciAtLT5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJub2RlTW9kZWwucmVzaXplclRlbXBsYXRlKCkgYXMgdGVtcGxhdGVcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5vZGVNb2RlbC5yZXNpemFibGUoKVwiPlxuICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJ0ZW1wbGF0ZVwiIC8+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG5cbjwhLS0gSGFuZGxlcyAtLT5cbjxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGhhbmRsZSBvZiBub2RlTW9kZWwuaGFuZGxlcygpXCI+XG4gIDxzdmc6Y2lyY2xlXG4gICAgKm5nSWY9XCIhaGFuZGxlLnRlbXBsYXRlXCJcbiAgICBjbGFzcz1cImRlZmF1bHQtaGFuZGxlXCJcbiAgICBbYXR0ci5jeF09XCJoYW5kbGUub2Zmc2V0KCkueFwiXG4gICAgW2F0dHIuY3ldPVwiaGFuZGxlLm9mZnNldCgpLnlcIlxuICAgIFthdHRyLnN0cm9rZS13aWR0aF09XCJoYW5kbGUuc3Ryb2tlV2lkdGhcIlxuICAgIHI9XCI1XCJcbiAgICAocG9pbnRlclN0YXJ0KT1cInN0YXJ0Q29ubmVjdGlvbigkZXZlbnQsIGhhbmRsZSlcIlxuICAgIChwb2ludGVyRW5kKT1cImVuZENvbm5lY3Rpb24oaGFuZGxlKVwiXG4gIC8+XG5cbiAgPHN2ZzpnXG4gICAgKm5nSWY9XCJoYW5kbGUudGVtcGxhdGVcIlxuICAgIFtoYW5kbGVTaXplQ29udHJvbGxlcl09XCJoYW5kbGVcIlxuICAgIChwb2ludGVyU3RhcnQpPVwic3RhcnRDb25uZWN0aW9uKCRldmVudCwgaGFuZGxlKVwiXG4gICAgKHBvaW50ZXJFbmQpPVwiZW5kQ29ubmVjdGlvbihoYW5kbGUpXCJcbiAgPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoYW5kbGUudGVtcGxhdGU7IGNvbnRleHQ6IGhhbmRsZS50ZW1wbGF0ZUNvbnRleHRcIiAvPlxuICA8L3N2ZzpnPlxuXG4gIDxzdmc6Y2lyY2xlXG4gICAgKm5nSWY9XCJzaG93TWFnbmV0KClcIlxuICAgIGNsYXNzPVwibWFnbmV0XCJcbiAgICBbYXR0ci5yXT1cIm5vZGVNb2RlbC5tYWduZXRSYWRpdXNcIlxuICAgIFthdHRyLmN4XT1cImhhbmRsZS5vZmZzZXQoKS54XCJcbiAgICBbYXR0ci5jeV09XCJoYW5kbGUub2Zmc2V0KCkueVwiXG4gICAgKHBvaW50ZXJFbmQpPVwiZW5kQ29ubmVjdGlvbihoYW5kbGUpOyByZXNldFZhbGlkYXRlQ29ubmVjdGlvbihoYW5kbGUpXCJcbiAgICAocG9pbnRlck92ZXIpPVwidmFsaWRhdGVDb25uZWN0aW9uKGhhbmRsZSlcIlxuICAgIChwb2ludGVyT3V0KT1cInJlc2V0VmFsaWRhdGVDb25uZWN0aW9uKGhhbmRsZSlcIlxuICAvPlxuPC9uZy1jb250YWluZXI+XG4iXX0=
125
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmZsb3ctbGliL3NyYy9saWIvdmZsb3cvY29tcG9uZW50cy9ub2RlL25vZGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2NvbXBvbmVudHMvbm9kZS9ub2RlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQWlCLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQWtDLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1TCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUVwRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFOUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2xELE9BQU8sRUFBRSxNQUFNLEVBQVMsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBZ0IsTUFBTSxxREFBcUQsQ0FBQztBQUNyRyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztB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RE4sZ0JBQWdCOzZDQTJCaEI7QUFHTTtJQUROLGdCQUFnQjtvREFtQmhCOzRGQXZGVSxhQUFhO2tCQVZ6QixTQUFTOytCQUNFLFNBQVMsbUJBR0YsdUJBQXVCLENBQUMsTUFBTSxhQUNwQyxDQUFDLGFBQWEsRUFBRSxtQkFBbUIsQ0FBQyxRQUN6Qzt3QkFDSixPQUFPLEVBQUUsWUFBWTtxQkFDdEI7OEJBaUJNLFNBQVM7c0JBRGYsS0FBSztnQkFJQyxZQUFZO3NCQURsQixLQUFLO2dCQUlDLGlCQUFpQjtzQkFEdkIsS0FBSztnQkFJQyxjQUFjO3NCQURwQixTQUFTO3VCQUFDLGFBQWE7Z0JBSWpCLGNBQWM7c0JBRHBCLFNBQVM7dUJBQUMsYUFBYTtnQkFjakIsUUFBUSxNQTZCUixlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5qZWN0b3IsIElucHV0LCBOZ1pvbmUsIE9uRGVzdHJveSwgT25Jbml0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkLCBjb21wdXRlZCwgZWZmZWN0LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERyYWdnYWJsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kcmFnZ2FibGUuc2VydmljZSc7XG5pbXBvcnQgeyBOb2RlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvbm9kZS5tb2RlbCc7XG5pbXBvcnQgeyBGbG93U3RhdHVzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Zsb3ctc3RhdHVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgSGFuZGxlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2hhbmRsZS5zZXJ2aWNlJztcbmltcG9ydCB7IEhhbmRsZU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2hhbmRsZS5tb2RlbCc7XG5pbXBvcnQgeyByZXNpemFibGUgfSBmcm9tICcuLi8uLi91dGlscy9yZXNpemFibGUnO1xuaW1wb3J0IHsgZmlsdGVyLCBmaXJzdCwgbWFwLCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJbmplY3Rpb25Db250ZXh0LCBXaXRoSW5qZWN0b3IgfSBmcm9tICcuLi8uLi9kZWNvcmF0b3JzL3J1bi1pbi1pbmplY3Rpb24tY29udGV4dC5kZWNvcmF0b3InO1xuaW1wb3J0IHsgTm9kZVJlbmRlcmluZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ub2RlLXJlbmRlcmluZy5zZXJ2aWNlJztcbmltcG9ydCB7IEZsb3dTZXR0aW5nc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mbG93LXNldHRpbmdzLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2VsZWN0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3NlbGVjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IENvbm5lY3Rpb25Db250cm9sbGVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9jb25uZWN0aW9uLWNvbnRyb2xsZXIuZGlyZWN0aXZlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IE5vZGVBY2Nlc3NvclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ub2RlLWFjY2Vzc29yLnNlcnZpY2UnO1xuaW1wb3J0IHsgT3ZlcmxheXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvb3ZlcmxheXMuc2VydmljZSc7XG5cbmV4cG9ydCB0eXBlIEhhbmRsZVN0YXRlID0gJ3ZhbGlkJyB8ICdpbnZhbGlkJyB8ICdpZGxlJ1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdnW25vZGVdJyxcbiAgdGVtcGxhdGVVcmw6ICcuL25vZGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9ub2RlLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtIYW5kbGVTZXJ2aWNlLCBOb2RlQWNjZXNzb3JTZXJ2aWNlXSxcbiAgaG9zdDoge1xuICAgICdjbGFzcyc6ICd2Zmxvdy1ub2RlJyxcbiAgfVxufSlcbmV4cG9ydCBjbGFzcyBOb2RlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIFdpdGhJbmplY3RvciB7XG4gIHB1YmxpYyBpbmplY3RvciA9IGluamVjdChJbmplY3RvcilcbiAgcHJpdmF0ZSBoYW5kbGVTZXJ2aWNlID0gaW5qZWN0KEhhbmRsZVNlcnZpY2UpXG4gIHByaXZhdGUgZHJhZ2dhYmxlU2VydmljZSA9IGluamVjdChEcmFnZ2FibGVTZXJ2aWNlKVxuICBwcml2YXRlIGZsb3dTdGF0dXNTZXJ2aWNlID0gaW5qZWN0KEZsb3dTdGF0dXNTZXJ2aWNlKVxuICBwcml2YXRlIG5vZGVSZW5kZXJpbmdTZXJ2aWNlID0gaW5qZWN0KE5vZGVSZW5kZXJpbmdTZXJ2aWNlKVxuICBwcml2YXRlIGZsb3dTZXR0aW5nc1NlcnZpY2UgPSBpbmplY3QoRmxvd1NldHRpbmdzU2VydmljZSlcbiAgcHJpdmF0ZSBzZWxlY3Rpb25TZXJ2aWNlID0gaW5qZWN0KFNlbGVjdGlvblNlcnZpY2UpXG4gIHByaXZhdGUgaG9zdFJlZiA9IGluamVjdDxFbGVtZW50UmVmPFNWR0VsZW1lbnQ+PihFbGVtZW50UmVmKVxuICBwcml2YXRlIGNvbm5lY3Rpb25Db250cm9sbGVyID0gaW5qZWN0KENvbm5lY3Rpb25Db250cm9sbGVyRGlyZWN0aXZlKVxuICBwcml2YXRlIG5vZGVBY2Nlc3NvciA9IGluamVjdChOb2RlQWNjZXNzb3JTZXJ2aWNlKVxuICBwcml2YXRlIG92ZXJsYXlzU2VydmljZSA9IGluamVjdChPdmVybGF5c1NlcnZpY2UpXG4gIHByaXZhdGUgem9uZSA9IGluamVjdChOZ1pvbmUpXG5cbiAgQElucHV0KClcbiAgcHVibGljIG5vZGVNb2RlbCE6IE5vZGVNb2RlbFxuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBub2RlVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+XG5cbiAgQElucHV0KClcbiAgcHVibGljIGdyb3VwTm9kZVRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PlxuXG4gIEBWaWV3Q2hpbGQoJ25vZGVDb250ZW50JylcbiAgcHVibGljIG5vZGVDb250ZW50UmVmITogRWxlbWVudFJlZjxTVkdHcmFwaGljc0VsZW1lbnQ+XG5cbiAgQFZpZXdDaGlsZCgnaHRtbFdyYXBwZXInKVxuICBwdWJsaWMgaHRtbFdyYXBwZXJSZWYhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PlxuXG4gIHByb3RlY3RlZCBzaG93TWFnbmV0ID0gY29tcHV0ZWQoKCkgPT5cbiAgICB0aGlzLmZsb3dTdGF0dXNTZXJ2aWNlLnN0YXR1cygpLnN0YXRlID09PSAnY29ubmVjdGlvbi1zdGFydCcgfHxcbiAgICB0aGlzLmZsb3dTdGF0dXNTZXJ2aWNlLnN0YXR1cygpLnN0YXRlID09PSAnY29ubmVjdGlvbi12YWxpZGF0aW9uJ1xuICApXG5cbiAgcHJvdGVjdGVkIHN0eWxlV2lkdGggPSBjb21wdXRlZCgoKSA9PiBgJHt0aGlzLm5vZGVNb2RlbC5zaXplKCkud2lkdGh9cHhgKVxuICBwcm90ZWN0ZWQgc3R5bGVIZWlnaHQgPSBjb21wdXRlZCgoKSA9PiBgJHt0aGlzLm5vZGVNb2RlbC5zaXplKCkuaGVpZ2h0fXB4YClcblxuICBwcm90ZWN0ZWQgdG9vbGJhciA9IGNvbXB1dGVkKCgpID0+IHRoaXMub3ZlcmxheXNTZXJ2aWNlLm5vZGVUb29sYmFycygpLmdldCh0aGlzLm5vZGVNb2RlbCkpXG5cbiAgQEluamVjdGlvbkNvbnRleHRcbiAgcHVibGljIG5nT25Jbml0KCkge1xuICAgIHRoaXMubm9kZUFjY2Vzc29yLm1vZGVsLnNldCh0aGlzLm5vZGVNb2RlbCk7XG5cbiAgICB0aGlzLmhhbmRsZVNlcnZpY2Uubm9kZS5zZXQodGhpcy5ub2RlTW9kZWwpO1xuXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLm5vZGVNb2RlbC5kcmFnZ2FibGUoKSkge1xuICAgICAgICB0aGlzLmRyYWdnYWJsZVNlcnZpY2UuZW5hYmxlKHRoaXMuaG9zdFJlZi5uYXRpdmVFbGVtZW50LCB0aGlzLm5vZGVNb2RlbClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZHJhZ2dhYmxlU2VydmljZS5kaXNhYmxlKHRoaXMuaG9zdFJlZi5uYXRpdmVFbGVtZW50KVxuICAgICAgfVxuICAgIH0pXG5cbiAgICB0aGlzLm5vZGVNb2RlbC5oYW5kbGVzJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoaGFuZGxlcykgPT5cbiAgICAgICAgICByZXNpemFibGUoaGFuZGxlcy5tYXAoaCA9PiBoLnBhcmVudFJlZmVyZW5jZSEpLCB0aGlzLnpvbmUpXG4gICAgICAgICAgICAucGlwZShtYXAoKCkgPT4gaGFuZGxlcykpXG4gICAgICAgICksXG4gICAgICAgIHRhcCgoaGFuZGxlcykgPT4ge1xuICAgICAgICAgIC8vIFRPRE8gKHBlcmZvcm1hbmNlKSBpbnNwZWN0IGhvdyB0byBhdm9pZCBjYWxscyBvZiB0aGlzIHdoZW4gZmxvdyBpbml0aWFsbHkgcmVuZGVyZWRcbiAgICAgICAgICBoYW5kbGVzLmZvckVhY2goaCA9PiBoLnVwZGF0ZVBhcmVudCgpKVxuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKVxuICB9XG5cbiAgQEluamVjdGlvbkNvbnRleHRcbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLm5vZGVNb2RlbC5saW5rRGVmYXVsdE5vZGVTaXplV2l0aE1vZGVsU2l6ZSgpXG5cbiAgICBpZiAodGhpcy5ub2RlTW9kZWwubm9kZS50eXBlID09PSAnaHRtbC10ZW1wbGF0ZScgfHwgdGhpcy5ub2RlTW9kZWwuaXNDb21wb25lbnRUeXBlKSB7XG4gICAgICByZXNpemFibGUoW3RoaXMuaHRtbFdyYXBwZXJSZWYubmF0aXZlRWxlbWVudF0sIHRoaXMuem9uZSlcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgc3RhcnRXaXRoKG51bGwpLFxuICAgICAgICAgIHRhcCgoKSA9PiB0aGlzLm5vZGVNb2RlbC5oYW5kbGVzKCkuZm9yRWFjaChoID0+IGgudXBkYXRlUGFyZW50KCkpKSxcbiAgICAgICAgICBmaWx0ZXIoKCkgPT4gIXRoaXMubm9kZU1vZGVsLnJlc2l6aW5nKCkpLFxuICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB3aWR0aCA9IHRoaXMuaHRtbFdyYXBwZXJSZWYubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aFxuICAgICAgICAgICAgY29uc3QgaGVpZ2h0ID0gdGhpcy5odG1sV3JhcHBlclJlZi5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodFxuXG4gICAgICAgICAgICB0aGlzLm5vZGVNb2RlbC5zaXplLnNldCh7IHdpZHRoLCBoZWlnaHQgfSlcbiAgICAgICAgICB9KSxcbiAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKVxuICAgICAgICApLnN1YnNjcmliZSgpXG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZHJhZ2dhYmxlU2VydmljZS5kZXN0cm95KHRoaXMuaG9zdFJlZi5uYXRpdmVFbGVtZW50KVxuICB9XG5cbiAgcHJvdGVjdGVkIHN0YXJ0Q29ubmVjdGlvbihldmVudDogRXZlbnQsIGhhbmRsZTogSGFuZGxlTW9kZWwpIHtcbiAgICAvLyBpZ25vcmUgZHJhZyBieSBzdG9wcGluZyBwcm9wYWdhdGlvblxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG5cbiAgICB0aGlzLmNvbm5lY3Rpb25Db250cm9sbGVyLnN0YXJ0Q29ubmVjdGlvbihoYW5kbGUpXG4gIH1cblxuICBwcm90ZWN0ZWQgdmFsaWRhdGVDb25uZWN0aW9uKGhhbmRsZTogSGFuZGxlTW9kZWwpIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25Db250cm9sbGVyLnZhbGlkYXRlQ29ubmVjdGlvbihoYW5kbGUpXG4gIH1cblxuICBwcm90ZWN0ZWQgcmVzZXRWYWxpZGF0ZUNvbm5lY3Rpb24odGFyZ2V0SGFuZGxlOiBIYW5kbGVNb2RlbCkge1xuICAgIHRoaXMuY29ubmVjdGlvbkNvbnRyb2xsZXIucmVzZXRWYWxpZGF0ZUNvbm5lY3Rpb24odGFyZ2V0SGFuZGxlKVxuICB9XG5cbiAgcHJvdGVjdGVkIGVuZENvbm5lY3Rpb24oaGFuZGxlOiBIYW5kbGVNb2RlbCkge1xuICAgIHRoaXMuY29ubmVjdGlvbkNvbnRyb2xsZXIuZW5kQ29ubmVjdGlvbihoYW5kbGUpXG4gIH1cblxuICBwcm90ZWN0ZWQgcHVsbE5vZGUoKSB7XG4gICAgdGhpcy5ub2RlUmVuZGVyaW5nU2VydmljZS5wdWxsTm9kZSh0aGlzLm5vZGVNb2RlbClcbiAgfVxuXG4gIHByb3RlY3RlZCBzZWxlY3ROb2RlKCkge1xuICAgIGlmICh0aGlzLmZsb3dTZXR0aW5nc1NlcnZpY2UuZW50aXRpZXNTZWxlY3RhYmxlKCkpIHtcbiAgICAgIHRoaXMuc2VsZWN0aW9uU2VydmljZS5zZWxlY3QodGhpcy5ub2RlTW9kZWwpXG4gICAgfVxuICB9XG59XG4iLCI8IS0tIERlZmF1bHQgbm9kZSAtLT5cbjxzdmc6Zm9yZWlnbk9iamVjdFxuICAqbmdJZj1cIm5vZGVNb2RlbC5ub2RlLnR5cGUgPT09ICdkZWZhdWx0J1wiXG4gIGNsYXNzPVwic2VsZWN0YWJsZVwiXG4gICNub2RlQ29udGVudFxuICBbYXR0ci53aWR0aF09XCJub2RlTW9kZWwuc2l6ZSgpLndpZHRoXCJcbiAgW2F0dHIuaGVpZ2h0XT1cIm5vZGVNb2RlbC5zaXplKCkuaGVpZ2h0XCJcbiAgKHBvaW50ZXJTdGFydCk9XCJwdWxsTm9kZSgpOyBzZWxlY3ROb2RlKClcIlxuPlxuICA8ZGVmYXVsdC1ub2RlXG4gICAgI2h0bWxXcmFwcGVyXG4gICAgW3NlbGVjdGVkXT1cIm5vZGVNb2RlbC5zZWxlY3RlZCgpXCJcbiAgICBbc3R5bGUud2lkdGhdPVwic3R5bGVXaWR0aCgpXCJcbiAgICBbc3R5bGUuaGVpZ2h0XT1cInN0eWxlSGVpZ2h0KClcIlxuICAgIFtzdHlsZS5tYXgtd2lkdGhdPVwic3R5bGVXaWR0aCgpXCJcbiAgICBbc3R5bGUubWF4LWhlaWdodF09XCJzdHlsZUhlaWdodCgpXCJcbiAgPlxuICAgIDxkaXYgW291dGVySFRNTF09XCJub2RlTW9kZWwudGV4dCgpXCI+PC9kaXY+XG5cbiAgICA8aGFuZGxlIHR5cGU9XCJzb3VyY2VcIiBbcG9zaXRpb25dPVwibm9kZU1vZGVsLnNvdXJjZVBvc2l0aW9uKClcIiAvPlxuICAgIDxoYW5kbGUgdHlwZT1cInRhcmdldFwiIFtwb3NpdGlvbl09XCJub2RlTW9kZWwudGFyZ2V0UG9zaXRpb24oKVwiIC8+XG4gIDwvZGVmYXVsdC1ub2RlPlxuPC9zdmc6Zm9yZWlnbk9iamVjdD5cblxuPCEtLSBUZW1wbGF0ZSBub2RlIC0tPlxuPHN2Zzpmb3JlaWduT2JqZWN0XG4gICpuZ0lmPVwibm9kZU1vZGVsLm5vZGUudHlwZSA9PT0gJ2h0bWwtdGVtcGxhdGUnICYmIG5vZGVUZW1wbGF0ZVwiXG4gIGNsYXNzPVwic2VsZWN0YWJsZVwiXG4gIFthdHRyLndpZHRoXT1cIm5vZGVNb2RlbC5zaXplKCkud2lkdGhcIlxuICBbYXR0ci5oZWlnaHRdPVwibm9kZU1vZGVsLnNpemUoKS5oZWlnaHRcIlxuICAocG9pbnRlclN0YXJ0KT1cInB1bGxOb2RlKClcIlxuPlxuICA8ZGl2XG4gICAgI2h0bWxXcmFwcGVyXG4gICAgY2xhc3M9XCJ3cmFwcGVyXCJcbiAgICBbc3R5bGUud2lkdGhdPVwic3R5bGVXaWR0aCgpXCJcbiAgICBbc3R5bGUuaGVpZ2h0XT1cInN0eWxlSGVpZ2h0KClcIlxuICA+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwibm9kZVRlbXBsYXRlXCJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogeyBub2RlOiBub2RlTW9kZWwubm9kZSwgc2VsZWN0ZWQ6IG5vZGVNb2RlbC5zZWxlY3RlZCB9IH1cIlxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRJbmplY3Rvcl09XCJpbmplY3RvclwiXG4gICAgLz5cbiAgPC9kaXY+XG48L3N2Zzpmb3JlaWduT2JqZWN0PlxuXG48IS0tIENvbXBvbmVudCBub2RlIC0tPlxuPHN2Zzpmb3JlaWduT2JqZWN0XG4gICpuZ0lmPVwibm9kZU1vZGVsLmlzQ29tcG9uZW50VHlwZVwiXG4gIGNsYXNzPVwic2VsZWN0YWJsZVwiXG4gIFthdHRyLndpZHRoXT1cIm5vZGVNb2RlbC5zaXplKCkud2lkdGhcIlxuICBbYXR0ci5oZWlnaHRdPVwibm9kZU1vZGVsLnNpemUoKS5oZWlnaHRcIlxuICAocG9pbnRlclN0YXJ0KT1cInB1bGxOb2RlKClcIlxuPlxuICA8ZGl2XG4gICAgI2h0bWxXcmFwcGVyXG4gICAgY2xhc3M9XCJ3cmFwcGVyXCJcbiAgICBbc3R5bGUud2lkdGhdPVwic3R5bGVXaWR0aCgpXCJcbiAgICBbc3R5bGUuaGVpZ2h0XT1cInN0eWxlSGVpZ2h0KClcIlxuICA+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgW25nQ29tcG9uZW50T3V0bGV0XT1cIiRhbnkobm9kZU1vZGVsLm5vZGUudHlwZSlcIlxuICAgICAgW25nQ29tcG9uZW50T3V0bGV0SW5wdXRzXT1cIm5vZGVNb2RlbC5jb21wb25lbnRUeXBlSW5wdXRzKClcIlxuICAgICAgW25nQ29tcG9uZW50T3V0bGV0SW5qZWN0b3JdPVwiaW5qZWN0b3JcIlxuICAgIC8+XG4gIDwvZGl2PlxuPC9zdmc6Zm9yZWlnbk9iamVjdD5cblxuPCEtLSBEZWZhdWx0IGdyb3VwIG5vZGUgLS0+XG48c3ZnOnJlY3RcbiAgKm5nSWY9XCJub2RlTW9kZWwubm9kZS50eXBlID09PSAnZGVmYXVsdC1ncm91cCdcIlxuICBbcmVzaXphYmxlXT1cIm5vZGVNb2RlbC5yZXNpemFibGUoKVwiXG4gIFtnYXBdPVwiM1wiXG4gIFtyZXNpemVyQ29sb3JdPVwibm9kZU1vZGVsLmNvbG9yKClcIlxuICBjbGFzcz1cImRlZmF1bHQtZ3JvdXAtbm9kZVwiXG4gIHJ4PVwiNVwiXG4gIHJ5PVwiNVwiXG4gIFtjbGFzcy5kZWZhdWx0LWdyb3VwLW5vZGVfc2VsZWN0ZWRdPVwibm9kZU1vZGVsLnNlbGVjdGVkKClcIlxuICBbYXR0ci53aWR0aF09XCJub2RlTW9kZWwuc2l6ZSgpLndpZHRoXCJcbiAgW2F0dHIuaGVpZ2h0XT1cIm5vZGVNb2RlbC5zaXplKCkuaGVpZ2h0XCJcbiAgW3N0eWxlLnN0cm9rZV09XCJub2RlTW9kZWwuY29sb3IoKVwiXG4gIFtzdHlsZS5maWxsXT1cIm5vZGVNb2RlbC5jb2xvcigpXCJcbiAgKHBvaW50ZXJTdGFydCk9XCJwdWxsTm9kZSgpOyBzZWxlY3ROb2RlKClcIlxuLz5cblxuPCEtLSBUZW1wbGF0ZSBncm91cCBub2RlICAtLT5cbjxzdmc6Z1xuICAqbmdJZj1cIm5vZGVNb2RlbC5ub2RlLnR5cGUgPT09ICd0ZW1wbGF0ZS1ncm91cCcgJiYgZ3JvdXBOb2RlVGVtcGxhdGVcIlxuICBjbGFzcz1cInNlbGVjdGFibGVcIlxuICAocG9pbnRlclN0YXJ0KT1cInB1bGxOb2RlKClcIlxuPlxuICA8bmctY29udGFpbmVyXG4gICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZ3JvdXBOb2RlVGVtcGxhdGVcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogeyBub2RlOiBub2RlTW9kZWwubm9kZSwgc2VsZWN0ZWQ6IG5vZGVNb2RlbC5zZWxlY3RlZCwgd2lkdGg6IG5vZGVNb2RlbC53aWR0aCwgaGVpZ2h0OiBub2RlTW9kZWwuaGVpZ2h0IH0gfVwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRJbmplY3Rvcl09XCJpbmplY3RvclwiXG4gIC8+XG48L3N2ZzpnPlxuXG48IS0tIFJlc2l6ZXIgLS0+XG48bmctY29udGFpbmVyICpuZ0lmPVwibm9kZU1vZGVsLnJlc2l6ZXJUZW1wbGF0ZSgpIGFzIHRlbXBsYXRlXCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJub2RlTW9kZWwucmVzaXphYmxlKClcIj5cbiAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwidGVtcGxhdGVcIiAvPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuXG48IS0tIEhhbmRsZXMgLS0+XG48bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBoYW5kbGUgb2Ygbm9kZU1vZGVsLmhhbmRsZXMoKVwiPlxuICA8c3ZnOmNpcmNsZVxuICAgICpuZ0lmPVwiIWhhbmRsZS50ZW1wbGF0ZVwiXG4gICAgY2xhc3M9XCJkZWZhdWx0LWhhbmRsZVwiXG4gICAgW2F0dHIuY3hdPVwiaGFuZGxlLm9mZnNldCgpLnhcIlxuICAgIFthdHRyLmN5XT1cImhhbmRsZS5vZmZzZXQoKS55XCJcbiAgICBbYXR0ci5zdHJva2Utd2lkdGhdPVwiaGFuZGxlLnN0cm9rZVdpZHRoXCJcbiAgICByPVwiNVwiXG4gICAgKHBvaW50ZXJTdGFydCk9XCJzdGFydENvbm5lY3Rpb24oJGV2ZW50LCBoYW5kbGUpXCJcbiAgICAocG9pbnRlckVuZCk9XCJlbmRDb25uZWN0aW9uKGhhbmRsZSlcIlxuICAvPlxuXG4gIDxzdmc6Z1xuICAgICpuZ0lmPVwiaGFuZGxlLnRlbXBsYXRlXCJcbiAgICBbaGFuZGxlU2l6ZUNvbnRyb2xsZXJdPVwiaGFuZGxlXCJcbiAgICAocG9pbnRlclN0YXJ0KT1cInN0YXJ0Q29ubmVjdGlvbigkZXZlbnQsIGhhbmRsZSlcIlxuICAgIChwb2ludGVyRW5kKT1cImVuZENvbm5lY3Rpb24oaGFuZGxlKVwiXG4gID5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGFuZGxlLnRlbXBsYXRlOyBjb250ZXh0OiBoYW5kbGUudGVtcGxhdGVDb250ZXh0XCIgLz5cbiAgPC9zdmc6Zz5cblxuICA8c3ZnOmNpcmNsZVxuICAgICpuZ0lmPVwic2hvd01hZ25ldCgpXCJcbiAgICBjbGFzcz1cIm1hZ25ldFwiXG4gICAgW2F0dHIucl09XCJub2RlTW9kZWwubWFnbmV0UmFkaXVzXCJcbiAgICBbYXR0ci5jeF09XCJoYW5kbGUub2Zmc2V0KCkueFwiXG4gICAgW2F0dHIuY3ldPVwiaGFuZGxlLm9mZnNldCgpLnlcIlxuICAgIChwb2ludGVyRW5kKT1cImVuZENvbm5lY3Rpb24oaGFuZGxlKTsgcmVzZXRWYWxpZGF0ZUNvbm5lY3Rpb24oaGFuZGxlKVwiXG4gICAgKHBvaW50ZXJPdmVyKT1cInZhbGlkYXRlQ29ubmVjdGlvbihoYW5kbGUpXCJcbiAgICAocG9pbnRlck91dCk9XCJyZXNldFZhbGlkYXRlQ29ubmVjdGlvbihoYW5kbGUpXCJcbiAgLz5cbjwvbmctY29udGFpbmVyPlxuXG48IS0tIFRvb2xiYXIgLS0+XG48c3ZnOmZvcmVpZ25PYmplY3RcbiAgKm5nSWY9XCJ0b29sYmFyKCkgYXMgdG9vbGJhclwiXG4gIFthdHRyLndpZHRoXT1cInRvb2xiYXIuc2l6ZSgpLndpZHRoXCJcbiAgW2F0dHIuaGVpZ2h0XT1cInRvb2xiYXIuc2l6ZSgpLmhlaWdodFwiXG4gIFthdHRyLnRyYW5zZm9ybV09XCJ0b29sYmFyLnRyYW5zZm9ybSgpXCJcbj5cbiAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJ0b29sYmFyLnRlbXBsYXRlKClcIiAvPlxuPC9zdmc6Zm9yZWlnbk9iamVjdD5cbiJdfQ==