ngx-vflow 0.2.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/esm2022/lib/vflow/components/edge-label/edge-label.component.mjs +13 -10
  2. package/esm2022/lib/vflow/components/handle/handle.component.mjs +26 -28
  3. package/esm2022/lib/vflow/components/node/node.component.mjs +58 -25
  4. package/esm2022/lib/vflow/components/vflow/vflow.component.mjs +10 -4
  5. package/esm2022/lib/vflow/decorators/microtask.decorator.mjs +11 -0
  6. package/esm2022/lib/vflow/decorators/run-in-injection-context.decorator.mjs +26 -0
  7. package/esm2022/lib/vflow/directives/handle-size-controller.directive.mjs +38 -0
  8. package/esm2022/lib/vflow/models/edge.model.mjs +36 -6
  9. package/esm2022/lib/vflow/models/handle.model.mjs +36 -5
  10. package/esm2022/lib/vflow/models/node.model.mjs +3 -22
  11. package/esm2022/lib/vflow/services/edge-changes.service.mjs +14 -7
  12. package/esm2022/lib/vflow/services/flow-entities.service.mjs +5 -2
  13. package/esm2022/lib/vflow/services/handle.service.mjs +10 -4
  14. package/esm2022/lib/vflow/services/node-changes.service.mjs +6 -3
  15. package/esm2022/lib/vflow/types/edge-change.type.mjs +1 -1
  16. package/esm2022/lib/vflow/utils/add-nodes-to-edges.mjs +3 -3
  17. package/esm2022/lib/vflow/utils/resizable.mjs +11 -0
  18. package/esm2022/lib/vflow/vflow.module.mjs +5 -2
  19. package/fesm2022/ngx-vflow.mjs +317 -146
  20. package/fesm2022/ngx-vflow.mjs.map +1 -1
  21. package/lib/vflow/components/handle/handle.component.d.ts +8 -4
  22. package/lib/vflow/components/node/node.component.d.ts +7 -6
  23. package/lib/vflow/components/vflow/vflow.component.d.ts +6 -2
  24. package/lib/vflow/decorators/microtask.decorator.d.ts +1 -0
  25. package/lib/vflow/decorators/run-in-injection-context.decorator.d.ts +8 -0
  26. package/lib/vflow/directives/handle-size-controller.directive.d.ts +10 -0
  27. package/lib/vflow/models/edge.model.d.ts +21 -3
  28. package/lib/vflow/models/handle.model.d.ts +33 -0
  29. package/lib/vflow/models/node.model.d.ts +2 -3
  30. package/lib/vflow/services/flow-entities.service.d.ts +1 -0
  31. package/lib/vflow/services/handle.service.d.ts +8 -10
  32. package/lib/vflow/types/edge-change.type.d.ts +3 -0
  33. package/lib/vflow/utils/resizable.d.ts +3 -0
  34. package/lib/vflow/vflow.module.d.ts +4 -3
  35. package/package.json +1 -1
@@ -1,4 +1,6 @@
1
+ import { __decorate } from "tslib";
1
2
  import { ChangeDetectionStrategy, Component, Input, ViewChild, computed, signal } from '@angular/core';
3
+ import { Microtask } from '../../decorators/microtask.decorator';
2
4
  import * as i0 from "@angular/core";
3
5
  import * as i1 from "@angular/common";
4
6
  export class EdgeLabelComponent {
@@ -20,14 +22,12 @@ export class EdgeLabelComponent {
20
22
  }
21
23
  set point(point) { this.pointSignal.set(point); }
22
24
  ngAfterViewInit() {
23
- queueMicrotask(() => {
24
- // this is a fix for visual artifact in chrome that for some reason adresses only for edge label.
25
- // the bug reproduces if edgeLabelWrapperRef size fully matched the size of parent foreignObject
26
- const MAGIC_VALUE_TO_FIX_GLITCH_IN_CHROME = 2;
27
- const width = this.edgeLabelWrapperRef.nativeElement.clientWidth + MAGIC_VALUE_TO_FIX_GLITCH_IN_CHROME;
28
- const height = this.edgeLabelWrapperRef.nativeElement.clientHeight + MAGIC_VALUE_TO_FIX_GLITCH_IN_CHROME;
29
- this.model.size.set({ width, height });
30
- });
25
+ // this is a fix for visual artifact in chrome that for some reason adresses only for edge label.
26
+ // the bug reproduces if edgeLabelWrapperRef size fully matched the size of parent foreignObject
27
+ const MAGIC_VALUE_TO_FIX_GLITCH_IN_CHROME = 2;
28
+ const width = this.edgeLabelWrapperRef.nativeElement.clientWidth + MAGIC_VALUE_TO_FIX_GLITCH_IN_CHROME;
29
+ const height = this.edgeLabelWrapperRef.nativeElement.clientHeight + MAGIC_VALUE_TO_FIX_GLITCH_IN_CHROME;
30
+ this.model.size.set({ width, height });
31
31
  }
32
32
  getLabelContext() {
33
33
  return {
@@ -40,6 +40,9 @@ export class EdgeLabelComponent {
40
40
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EdgeLabelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
41
41
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: EdgeLabelComponent, selector: "g[edgeLabel]", inputs: { model: "model", edgeModel: "edgeModel", point: "point", htmlTemplate: "htmlTemplate" }, viewQueries: [{ propertyName: "edgeLabelWrapperRef", first: true, predicate: ["edgeLabelWrapper"], descendants: true }], ngImport: i0, template: "<svg:foreignObject\n [attr.x]=\"edgeLabelPoint().x\"\n [attr.y]=\"edgeLabelPoint().y\"\n [attr.width]=\"model.size().width\"\n [attr.height]=\"model.size().height\"\n *ngIf=\"model.edgeLabel.type === 'html-template' && htmlTemplate\"\n>\n <div #edgeLabelWrapper class=\"edge-label-wrapper\">\n <ng-container\n *ngTemplateOutlet=\"htmlTemplate; context: getLabelContext()\"\n />\n </div>\n</svg:foreignObject>\n", styles: [".edge-label-wrapper{width:max-content;margin-top:1px;margin-left:1px}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
42
42
  }
43
+ __decorate([
44
+ Microtask
45
+ ], EdgeLabelComponent.prototype, "ngAfterViewInit", null);
43
46
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EdgeLabelComponent, decorators: [{
44
47
  type: Component,
45
48
  args: [{ selector: 'g[edgeLabel]', changeDetection: ChangeDetectionStrategy.OnPush, template: "<svg:foreignObject\n [attr.x]=\"edgeLabelPoint().x\"\n [attr.y]=\"edgeLabelPoint().y\"\n [attr.width]=\"model.size().width\"\n [attr.height]=\"model.size().height\"\n *ngIf=\"model.edgeLabel.type === 'html-template' && htmlTemplate\"\n>\n <div #edgeLabelWrapper class=\"edge-label-wrapper\">\n <ng-container\n *ngTemplateOutlet=\"htmlTemplate; context: getLabelContext()\"\n />\n </div>\n</svg:foreignObject>\n", styles: [".edge-label-wrapper{width:max-content;margin-top:1px;margin-left:1px}\n"] }]
@@ -54,5 +57,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
54
57
  }], edgeLabelWrapperRef: [{
55
58
  type: ViewChild,
56
59
  args: ['edgeLabelWrapper']
57
- }] } });
58
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRnZS1sYWJlbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmZsb3ctbGliL3NyYy9saWIvdmZsb3cvY29tcG9uZW50cy9lZGdlLWxhYmVsL2VkZ2UtbGFiZWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2NvbXBvbmVudHMvZWRnZS1sYWJlbC9lZGdlLWxhYmVsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsdUJBQXVCLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBaUQsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7OztBQXNCakwsTUFBTSxPQUFPLGtCQUFrQjtJQWpCL0I7UUFrQ0U7Ozs7V0FJRztRQUNPLG1CQUFjLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUN2QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUE7WUFFaEMsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFBO1lBRTNDLE9BQU87Z0JBQ0wsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO2dCQUN4QixDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7YUFDMUIsQ0FBQTtRQUNILENBQUMsQ0FBQyxDQUFBO1FBRU0sZ0JBQVcsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFBO0tBdUI3QztJQWhEQyxJQUNXLEtBQUssQ0FBQyxLQUFZLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUEsQ0FBQyxDQUFDO0lBMEJ2RCxlQUFlO1FBQ3BCLGNBQWMsQ0FBQyxHQUFHLEVBQUU7WUFDbEIsaUdBQWlHO1lBQ2pHLGdHQUFnRztZQUNoRyxNQUFNLG1DQUFtQyxHQUFHLENBQUMsQ0FBQTtZQUU3QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLFdBQVcsR0FBRyxtQ0FBbUMsQ0FBQTtZQUN0RyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLFlBQVksR0FBRyxtQ0FBbUMsQ0FBQTtZQUV4RyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQTtRQUN4QyxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFUyxlQUFlO1FBQ3ZCLE9BQU87WUFDTCxTQUFTLEVBQUU7Z0JBQ1QsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSTtnQkFDekIsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUzthQUM1QjtTQUNGLENBQUE7SUFDSCxDQUFDOytHQXZEVSxrQkFBa0I7bUdBQWxCLGtCQUFrQiwrUUN0Qi9CLDhhQWFBOzs0RkRTYSxrQkFBa0I7a0JBakI5QixTQUFTOytCQUNFLGNBQWMsbUJBY1AsdUJBQXVCLENBQUMsTUFBTTs4QkFLeEMsS0FBSztzQkFEWCxLQUFLO2dCQUlDLFNBQVM7c0JBRGYsS0FBSztnQkFJSyxLQUFLO3NCQURmLEtBQUs7Z0JBSUMsWUFBWTtzQkFEbEIsS0FBSztnQkFJQyxtQkFBbUI7c0JBRHpCLFNBQVM7dUJBQUMsa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBTaW1wbGVDaGFuZ2VzLCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkLCBjb21wdXRlZCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBFZGdlTGFiZWxNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9lZGdlLWxhYmVsLm1vZGVsJztcbmltcG9ydCB7IEVkZ2VNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9lZGdlLm1vZGVsJztcbmltcG9ydCB7IFBvaW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9wb2ludC5pbnRlcmZhY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdnW2VkZ2VMYWJlbF0nLFxuICB0ZW1wbGF0ZVVybDogJy4vZWRnZS1sYWJlbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlczogW2BcbiAgICAuZWRnZS1sYWJlbC13cmFwcGVyIHtcbiAgICAgIHdpZHRoOiBtYXgtY29udGVudDtcblxuICAgICAgLypcbiAgICAgICAgdGhpcyBpcyBhIGZpeCBmb3IgYnVnIGluIGNocm9tZSwgZm9yIHNvbWUgcmVhc29uIGlmIHRoZSBkaXYgZnVsbHkgbWF0Y2hlcyB0aGUgc2l6ZVxuICAgICAgICBvZiBmb3JlaWduT2JqZWN0IHRoZXJlIGFyZSBvY2N1cnMgc29tZSB2aXN1YWwgYXJ0aWZhY3RzIGFyb3VuZCB0aGlzIGRpdlxuICAgICAgICovXG4gICAgICBtYXJnaW4tdG9wOiAxcHg7XG4gICAgICBtYXJnaW4tbGVmdDogMXB4O1xuICAgIH1cbiAgYF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIEVkZ2VMYWJlbENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuICAvLyBUT0RPOiB0b28gbWFueSBpbnB1dHNcbiAgQElucHV0KClcbiAgcHVibGljIG1vZGVsITogRWRnZUxhYmVsTW9kZWxcblxuICBASW5wdXQoKVxuICBwdWJsaWMgZWRnZU1vZGVsITogRWRnZU1vZGVsXG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBwb2ludChwb2ludDogUG9pbnQpIHsgdGhpcy5wb2ludFNpZ25hbC5zZXQocG9pbnQpIH1cblxuICBASW5wdXQoKVxuICBwdWJsaWMgaHRtbFRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PlxuXG4gIEBWaWV3Q2hpbGQoJ2VkZ2VMYWJlbFdyYXBwZXInKVxuICBwdWJsaWMgZWRnZUxhYmVsV3JhcHBlclJlZiE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+XG5cbiAgLyoqXG4gICAqIENlbnRlcmVkIHBvaW50IG9mIGxhYmVsXG4gICAqXG4gICAqIFRPRE86IG1heWJlIHB1dCBpdCBpbnRvIEVkZ2VMYWJlbE1vZGVsXG4gICAqL1xuICBwcm90ZWN0ZWQgZWRnZUxhYmVsUG9pbnQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgcG9pbnQgPSB0aGlzLnBvaW50U2lnbmFsKClcblxuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gdGhpcy5tb2RlbC5zaXplKClcblxuICAgIHJldHVybiB7XG4gICAgICB4OiBwb2ludC54IC0gKHdpZHRoIC8gMiksXG4gICAgICB5OiBwb2ludC55IC0gKGhlaWdodCAvIDIpXG4gICAgfVxuICB9KVxuXG4gIHByaXZhdGUgcG9pbnRTaWduYWwgPSBzaWduYWwoeyB4OiAwLCB5OiAwIH0pXG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAvLyB0aGlzIGlzIGEgZml4IGZvciB2aXN1YWwgYXJ0aWZhY3QgaW4gY2hyb21lIHRoYXQgZm9yIHNvbWUgcmVhc29uIGFkcmVzc2VzIG9ubHkgZm9yIGVkZ2UgbGFiZWwuXG4gICAgICAvLyB0aGUgYnVnIHJlcHJvZHVjZXMgaWYgZWRnZUxhYmVsV3JhcHBlclJlZiBzaXplIGZ1bGx5IG1hdGNoZWQgdGhlIHNpemUgb2YgcGFyZW50IGZvcmVpZ25PYmplY3RcbiAgICAgIGNvbnN0IE1BR0lDX1ZBTFVFX1RPX0ZJWF9HTElUQ0hfSU5fQ0hST01FID0gMlxuXG4gICAgICBjb25zdCB3aWR0aCA9IHRoaXMuZWRnZUxhYmVsV3JhcHBlclJlZi5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoICsgTUFHSUNfVkFMVUVfVE9fRklYX0dMSVRDSF9JTl9DSFJPTUVcbiAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMuZWRnZUxhYmVsV3JhcHBlclJlZi5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodCArIE1BR0lDX1ZBTFVFX1RPX0ZJWF9HTElUQ0hfSU5fQ0hST01FXG5cbiAgICAgIHRoaXMubW9kZWwuc2l6ZS5zZXQoeyB3aWR0aCwgaGVpZ2h0IH0pXG4gICAgfSlcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRMYWJlbENvbnRleHQoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRpbXBsaWNpdDoge1xuICAgICAgICBlZGdlOiB0aGlzLmVkZ2VNb2RlbC5lZGdlLFxuICAgICAgICBsYWJlbDogdGhpcy5tb2RlbC5lZGdlTGFiZWxcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIjxzdmc6Zm9yZWlnbk9iamVjdFxuICBbYXR0ci54XT1cImVkZ2VMYWJlbFBvaW50KCkueFwiXG4gIFthdHRyLnldPVwiZWRnZUxhYmVsUG9pbnQoKS55XCJcbiAgW2F0dHIud2lkdGhdPVwibW9kZWwuc2l6ZSgpLndpZHRoXCJcbiAgW2F0dHIuaGVpZ2h0XT1cIm1vZGVsLnNpemUoKS5oZWlnaHRcIlxuICAqbmdJZj1cIm1vZGVsLmVkZ2VMYWJlbC50eXBlID09PSAnaHRtbC10ZW1wbGF0ZScgJiYgaHRtbFRlbXBsYXRlXCJcbj5cbiAgPGRpdiAjZWRnZUxhYmVsV3JhcHBlciBjbGFzcz1cImVkZ2UtbGFiZWwtd3JhcHBlclwiPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiaHRtbFRlbXBsYXRlOyBjb250ZXh0OiBnZXRMYWJlbENvbnRleHQoKVwiXG4gICAgLz5cbiAgPC9kaXY+XG48L3N2Zzpmb3JlaWduT2JqZWN0PlxuIl19
60
+ }], ngAfterViewInit: [] } });
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRnZS1sYWJlbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmZsb3ctbGliL3NyYy9saWIvdmZsb3cvY29tcG9uZW50cy9lZGdlLWxhYmVsL2VkZ2UtbGFiZWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2NvbXBvbmVudHMvZWRnZS1sYWJlbC9lZGdlLWxhYmVsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQWlCLHVCQUF1QixFQUFFLFNBQVMsRUFBYyxLQUFLLEVBQWlELFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSWpMLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQzs7O0FBbUJqRSxNQUFNLE9BQU8sa0JBQWtCO0lBakIvQjtRQWtDRTs7OztXQUlHO1FBQ08sbUJBQWMsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ3ZDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQTtZQUVoQyxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUE7WUFFM0MsT0FBTztnQkFDTCxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7Z0JBQ3hCLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQzthQUMxQixDQUFBO1FBQ0gsQ0FBQyxDQUFDLENBQUE7UUFFTSxnQkFBVyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUE7S0F1QjdDO0lBaERDLElBQ1csS0FBSyxDQUFDLEtBQVksSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQSxDQUFDLENBQUM7SUEyQnZELGVBQWU7UUFDcEIsaUdBQWlHO1FBQ2pHLGdHQUFnRztRQUNoRyxNQUFNLG1DQUFtQyxHQUFHLENBQUMsQ0FBQTtRQUU3QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLFdBQVcsR0FBRyxtQ0FBbUMsQ0FBQTtRQUN0RyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLFlBQVksR0FBRyxtQ0FBbUMsQ0FBQTtRQUV4RyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQTtJQUV4QyxDQUFDO0lBRVMsZUFBZTtRQUN2QixPQUFPO1lBQ0wsU0FBUyxFQUFFO2dCQUNULElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUk7Z0JBQ3pCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVM7YUFDNUI7U0FDRixDQUFBO0lBQ0gsQ0FBQzsrR0F2RFUsa0JBQWtCO21HQUFsQixrQkFBa0IsK1FDdkIvQiw4YUFhQTs7QUQ4Q1M7SUFETixTQUFTO3lEQVdUOzRGQTlDVSxrQkFBa0I7a0JBakI5QixTQUFTOytCQUNFLGNBQWMsbUJBY1AsdUJBQXVCLENBQUMsTUFBTTs4QkFLeEMsS0FBSztzQkFEWCxLQUFLO2dCQUlDLFNBQVM7c0JBRGYsS0FBSztnQkFJSyxLQUFLO3NCQURmLEtBQUs7Z0JBSUMsWUFBWTtzQkFEbEIsS0FBSztnQkFJQyxtQkFBbUI7c0JBRHpCLFNBQVM7dUJBQUMsa0JBQWtCO2dCQXNCdEIsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgU2ltcGxlQ2hhbmdlcywgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCwgY29tcHV0ZWQsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRWRnZUxhYmVsTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZWRnZS1sYWJlbC5tb2RlbCc7XG5pbXBvcnQgeyBFZGdlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZWRnZS5tb2RlbCc7XG5pbXBvcnQgeyBQb2ludCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvcG9pbnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IE1pY3JvdGFzayB9IGZyb20gJy4uLy4uL2RlY29yYXRvcnMvbWljcm90YXNrLmRlY29yYXRvcic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2dbZWRnZUxhYmVsXScsXG4gIHRlbXBsYXRlVXJsOiAnLi9lZGdlLWxhYmVsLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVzOiBbYFxuICAgIC5lZGdlLWxhYmVsLXdyYXBwZXIge1xuICAgICAgd2lkdGg6IG1heC1jb250ZW50O1xuXG4gICAgICAvKlxuICAgICAgICB0aGlzIGlzIGEgZml4IGZvciBidWcgaW4gY2hyb21lLCBmb3Igc29tZSByZWFzb24gaWYgdGhlIGRpdiBmdWxseSBtYXRjaGVzIHRoZSBzaXplXG4gICAgICAgIG9mIGZvcmVpZ25PYmplY3QgdGhlcmUgYXJlIG9jY3VycyBzb21lIHZpc3VhbCBhcnRpZmFjdHMgYXJvdW5kIHRoaXMgZGl2XG4gICAgICAgKi9cbiAgICAgIG1hcmdpbi10b3A6IDFweDtcbiAgICAgIG1hcmdpbi1sZWZ0OiAxcHg7XG4gICAgfVxuICBgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgRWRnZUxhYmVsQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gIC8vIFRPRE86IHRvbyBtYW55IGlucHV0c1xuICBASW5wdXQoKVxuICBwdWJsaWMgbW9kZWwhOiBFZGdlTGFiZWxNb2RlbFxuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBlZGdlTW9kZWwhOiBFZGdlTW9kZWxcblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHBvaW50KHBvaW50OiBQb2ludCkgeyB0aGlzLnBvaW50U2lnbmFsLnNldChwb2ludCkgfVxuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBodG1sVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+XG5cbiAgQFZpZXdDaGlsZCgnZWRnZUxhYmVsV3JhcHBlcicpXG4gIHB1YmxpYyBlZGdlTGFiZWxXcmFwcGVyUmVmITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD5cblxuICAvKipcbiAgICogQ2VudGVyZWQgcG9pbnQgb2YgbGFiZWxcbiAgICpcbiAgICogVE9ETzogbWF5YmUgcHV0IGl0IGludG8gRWRnZUxhYmVsTW9kZWxcbiAgICovXG4gIHByb3RlY3RlZCBlZGdlTGFiZWxQb2ludCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBwb2ludCA9IHRoaXMucG9pbnRTaWduYWwoKVxuXG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSB0aGlzLm1vZGVsLnNpemUoKVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IHBvaW50LnggLSAod2lkdGggLyAyKSxcbiAgICAgIHk6IHBvaW50LnkgLSAoaGVpZ2h0IC8gMilcbiAgICB9XG4gIH0pXG5cbiAgcHJpdmF0ZSBwb2ludFNpZ25hbCA9IHNpZ25hbCh7IHg6IDAsIHk6IDAgfSlcblxuICBATWljcm90YXNrXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgLy8gdGhpcyBpcyBhIGZpeCBmb3IgdmlzdWFsIGFydGlmYWN0IGluIGNocm9tZSB0aGF0IGZvciBzb21lIHJlYXNvbiBhZHJlc3NlcyBvbmx5IGZvciBlZGdlIGxhYmVsLlxuICAgIC8vIHRoZSBidWcgcmVwcm9kdWNlcyBpZiBlZGdlTGFiZWxXcmFwcGVyUmVmIHNpemUgZnVsbHkgbWF0Y2hlZCB0aGUgc2l6ZSBvZiBwYXJlbnQgZm9yZWlnbk9iamVjdFxuICAgIGNvbnN0IE1BR0lDX1ZBTFVFX1RPX0ZJWF9HTElUQ0hfSU5fQ0hST01FID0gMlxuXG4gICAgY29uc3Qgd2lkdGggPSB0aGlzLmVkZ2VMYWJlbFdyYXBwZXJSZWYubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCArIE1BR0lDX1ZBTFVFX1RPX0ZJWF9HTElUQ0hfSU5fQ0hST01FXG4gICAgY29uc3QgaGVpZ2h0ID0gdGhpcy5lZGdlTGFiZWxXcmFwcGVyUmVmLm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0ICsgTUFHSUNfVkFMVUVfVE9fRklYX0dMSVRDSF9JTl9DSFJPTUVcblxuICAgIHRoaXMubW9kZWwuc2l6ZS5zZXQoeyB3aWR0aCwgaGVpZ2h0IH0pXG5cbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRMYWJlbENvbnRleHQoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRpbXBsaWNpdDoge1xuICAgICAgICBlZGdlOiB0aGlzLmVkZ2VNb2RlbC5lZGdlLFxuICAgICAgICBsYWJlbDogdGhpcy5tb2RlbC5lZGdlTGFiZWxcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIjxzdmc6Zm9yZWlnbk9iamVjdFxuICBbYXR0ci54XT1cImVkZ2VMYWJlbFBvaW50KCkueFwiXG4gIFthdHRyLnldPVwiZWRnZUxhYmVsUG9pbnQoKS55XCJcbiAgW2F0dHIud2lkdGhdPVwibW9kZWwuc2l6ZSgpLndpZHRoXCJcbiAgW2F0dHIuaGVpZ2h0XT1cIm1vZGVsLnNpemUoKS5oZWlnaHRcIlxuICAqbmdJZj1cIm1vZGVsLmVkZ2VMYWJlbC50eXBlID09PSAnaHRtbC10ZW1wbGF0ZScgJiYgaHRtbFRlbXBsYXRlXCJcbj5cbiAgPGRpdiAjZWRnZUxhYmVsV3JhcHBlciBjbGFzcz1cImVkZ2UtbGFiZWwtd3JhcHBlclwiPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiaHRtbFRlbXBsYXRlOyBjb250ZXh0OiBnZXRMYWJlbENvbnRleHQoKVwiXG4gICAgLz5cbiAgPC9kaXY+XG48L3N2Zzpmb3JlaWduT2JqZWN0PlxuIl19
@@ -1,39 +1,35 @@
1
- import { Component, ElementRef, Input, inject, signal } from '@angular/core';
1
+ import { __decorate } from "tslib";
2
+ import { Component, ElementRef, Input, inject } from '@angular/core';
2
3
  import { HandleService } from '../../services/handle.service';
4
+ import { HandleModel } from '../../models/handle.model';
5
+ import { InjectionContext, WithInjectorDirective } from '../../decorators/run-in-injection-context.decorator';
3
6
  import * as i0 from "@angular/core";
4
- export class HandleComponent {
7
+ export class HandleComponent extends WithInjectorDirective {
5
8
  constructor() {
9
+ super(...arguments);
6
10
  this.handleService = inject(HandleService);
7
11
  this.element = inject(ElementRef).nativeElement;
8
12
  }
9
13
  ngOnInit() {
10
- queueMicrotask(() => {
11
- const rect = this.parentRect();
12
- this.handleService.createHandle({
13
- position: this.position,
14
- type: this.type,
15
- id: this.id,
16
- parentPosition: signal({ x: rect.x, y: rect.y }),
17
- parentSize: signal({ width: rect.width, height: rect.height })
18
- });
19
- });
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
+ queueMicrotask(() => this.model.updateParent());
20
23
  }
21
- parentRect() {
22
- // we assume there is only one foreignObject that wraps node
23
- const fo = this.element.closest('foreignObject');
24
- const parent = this.element.parentElement;
25
- const foRect = fo.getBoundingClientRect();
26
- const parentRect = parent.getBoundingClientRect();
27
- return {
28
- x: parentRect.left - foRect.left,
29
- y: parentRect.top - foRect.top,
30
- width: parentRect.width,
31
- height: parentRect.height
32
- };
24
+ ngOnDestroy() {
25
+ this.handleService.destroyHandle(this.model);
33
26
  }
34
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: HandleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
35
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: HandleComponent, selector: "handle", inputs: { position: "position", type: "type", id: "id" }, ngImport: i0, template: "" }); }
27
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: HandleComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
28
+ 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" }, usesInheritance: true, ngImport: i0, template: "" }); }
36
29
  }
30
+ __decorate([
31
+ InjectionContext
32
+ ], HandleComponent.prototype, "ngOnInit", null);
37
33
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: HandleComponent, decorators: [{
38
34
  type: Component,
39
35
  args: [{ selector: 'handle', template: "" }]
@@ -45,5 +41,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
45
41
  args: [{ required: true }]
46
42
  }], id: [{
47
43
  type: Input
48
- }] } });
49
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC12Zmxvdy1saWIvc3JjL2xpYi92Zmxvdy9jb21wb25lbnRzL2hhbmRsZS9oYW5kbGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2NvbXBvbmVudHMvaGFuZGxlL2hhbmRsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW1DLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdEgsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDOztBQU05RCxNQUFNLE9BQU8sZUFBZTtJQUo1QjtRQUtVLGtCQUFhLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFBO1FBQ3JDLFlBQU8sR0FBRyxNQUFNLENBQTBCLFVBQVUsQ0FBQyxDQUFDLGFBQWEsQ0FBQTtLQWtENUU7SUE5QlEsUUFBUTtRQUNiLGNBQWMsQ0FBQyxHQUFHLEVBQUU7WUFDbEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFBO1lBRTlCLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDO2dCQUM5QixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7Z0JBQ3ZCLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtnQkFDZixFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7Z0JBQ1gsY0FBYyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ2hELFVBQVUsRUFBRSxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2FBQy9ELENBQUMsQ0FBQTtRQUNKLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUdPLFVBQVU7UUFDaEIsNERBQTREO1FBQzVELE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFBO1FBQ2hELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYyxDQUFBO1FBRTFDLE1BQU0sTUFBTSxHQUFHLEVBQUcsQ0FBQyxxQkFBcUIsRUFBRSxDQUFBO1FBQzFDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxDQUFBO1FBRWpELE9BQU87WUFDTCxDQUFDLEVBQUUsVUFBVSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSTtZQUNoQyxDQUFDLEVBQUUsVUFBVSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRztZQUM5QixLQUFLLEVBQUUsVUFBVSxDQUFDLEtBQUs7WUFDdkIsTUFBTSxFQUFFLFVBQVUsQ0FBQyxNQUFNO1NBQzFCLENBQUE7SUFDSCxDQUFDOytHQW5EVSxlQUFlO21HQUFmLGVBQWUsd0dDUjVCLEVBQUE7OzRGRFFhLGVBQWU7a0JBSjNCLFNBQVM7K0JBQ0UsUUFBUTs4QkFXWCxRQUFRO3NCQURkLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQU9sQixJQUFJO3NCQURWLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQU9sQixFQUFFO3NCQURSLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlckNvbnRlbnRJbml0LCBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBPbkluaXQsIGluamVjdCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBQb3NpdGlvbiB9IGZyb20gJy4uLy4uL3R5cGVzL3Bvc2l0aW9uLnR5cGUnO1xuaW1wb3J0IHsgSGFuZGxlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2hhbmRsZS5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaGFuZGxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2hhbmRsZS5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgSGFuZGxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHJpdmF0ZSBoYW5kbGVTZXJ2aWNlID0gaW5qZWN0KEhhbmRsZVNlcnZpY2UpXG4gIHByaXZhdGUgZWxlbWVudCA9IGluamVjdDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj4oRWxlbWVudFJlZikubmF0aXZlRWxlbWVudFxuXG4gIC8qKlxuICAgKiBBdCB3aGF0IHNpZGUgb2Ygbm9kZSB0aGlzIGNvbXBvbmVudCBzaG91bGQgYmUgcGxhY2VkXG4gICAqL1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxuICBwdWJsaWMgcG9zaXRpb24hOiBQb3NpdGlvblxuXG4gIC8qKlxuICAgKiBTb3VyY2Ugb3IgdGFyZ2V0XG4gICAqL1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxuICBwdWJsaWMgdHlwZSE6ICdzb3VyY2UnIHwgJ3RhcmdldCdcblxuICAvKipcbiAgICogU2hvdWxkIGJlIHVzZWQgaWYgbm9kZSBoYXMgbW9yZSB0aGFuIG9uZSBzb3VyY2UvdGFyZ2V0XG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgaWQ/OiBzdHJpbmdcblxuICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgY29uc3QgcmVjdCA9IHRoaXMucGFyZW50UmVjdCgpXG5cbiAgICAgIHRoaXMuaGFuZGxlU2VydmljZS5jcmVhdGVIYW5kbGUoe1xuICAgICAgICBwb3NpdGlvbjogdGhpcy5wb3NpdGlvbixcbiAgICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgICBpZDogdGhpcy5pZCxcbiAgICAgICAgcGFyZW50UG9zaXRpb246IHNpZ25hbCh7IHg6IHJlY3QueCwgeTogcmVjdC55IH0pLFxuICAgICAgICBwYXJlbnRTaXplOiBzaWduYWwoeyB3aWR0aDogcmVjdC53aWR0aCwgaGVpZ2h0OiByZWN0LmhlaWdodCB9KVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cblxuICBwcml2YXRlIHBhcmVudFJlY3QoKSB7XG4gICAgLy8gd2UgYXNzdW1lIHRoZXJlIGlzIG9ubHkgb25lIGZvcmVpZ25PYmplY3QgdGhhdCB3cmFwcyBub2RlXG4gICAgY29uc3QgZm8gPSB0aGlzLmVsZW1lbnQuY2xvc2VzdCgnZm9yZWlnbk9iamVjdCcpXG4gICAgY29uc3QgcGFyZW50ID0gdGhpcy5lbGVtZW50LnBhcmVudEVsZW1lbnQhXG5cbiAgICBjb25zdCBmb1JlY3QgPSBmbyEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICBjb25zdCBwYXJlbnRSZWN0ID0gcGFyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG5cbiAgICByZXR1cm4ge1xuICAgICAgeDogcGFyZW50UmVjdC5sZWZ0IC0gZm9SZWN0LmxlZnQsXG4gICAgICB5OiBwYXJlbnRSZWN0LnRvcCAtIGZvUmVjdC50b3AsXG4gICAgICB3aWR0aDogcGFyZW50UmVjdC53aWR0aCxcbiAgICAgIGhlaWdodDogcGFyZW50UmVjdC5oZWlnaHRcbiAgICB9XG4gIH1cbn1cbiIsIiJdfQ==
44
+ }], template: [{
45
+ type: Input
46
+ }], ngOnInit: [] } });
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC12Zmxvdy1saWIvc3JjL2xpYi92Zmxvdy9jb21wb25lbnRzL2hhbmRsZS9oYW5kbGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2NvbXBvbmVudHMvaGFuZGxlL2hhbmRsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQVksS0FBSyxFQUEwQyxNQUFNLEVBQWlDLE1BQU0sZUFBZSxDQUFDO0FBRXRKLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLHFCQUFxQixFQUFFLE1BQU0scURBQXFELENBQUM7O0FBTTlHLE1BQU0sT0FBTyxlQUFnQixTQUFRLHFCQUFxQjtJQUoxRDs7UUFLVSxrQkFBYSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQTtRQUNyQyxZQUFPLEdBQUcsTUFBTSxDQUEwQixVQUFVLENBQUMsQ0FBQyxhQUFhLENBQUE7S0E4QzVFO0lBcEJRLFFBQVE7UUFDYixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksV0FBVyxDQUMxQjtZQUNFLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDZixFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7WUFDWCxlQUFlLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFjO1lBQzVDLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtTQUN4QixFQUNELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFHLENBQzNCLENBQUE7UUFFRCxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7UUFFM0MsY0FBYyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQTtJQUNqRCxDQUFDO0lBRU0sV0FBVztRQUNoQixJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDOUMsQ0FBQzsrR0EvQ1UsZUFBZTttR0FBZixlQUFlLHFKQ1Y1QixFQUFBOztBRHNDUztJQUROLGdCQUFnQjsrQ0FnQmhCOzRGQTNDVSxlQUFlO2tCQUozQixTQUFTOytCQUNFLFFBQVE7OEJBV1gsUUFBUTtzQkFEZCxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFPbEIsSUFBSTtzQkFEVixLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFPbEIsRUFBRTtzQkFEUixLQUFLO2dCQUlDLFFBQVE7c0JBRGQsS0FBSztnQkFNQyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbmplY3RvciwgSW5wdXQsIE5nWm9uZSwgT25EZXN0cm95LCBPbkluaXQsIFRlbXBsYXRlUmVmLCBpbmplY3QsIHJ1bkluSW5qZWN0aW9uQ29udGV4dCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBQb3NpdGlvbiB9IGZyb20gJy4uLy4uL3R5cGVzL3Bvc2l0aW9uLnR5cGUnO1xuaW1wb3J0IHsgSGFuZGxlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2hhbmRsZS5zZXJ2aWNlJztcbmltcG9ydCB7IEhhbmRsZU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2hhbmRsZS5tb2RlbCc7XG5pbXBvcnQgeyBJbmplY3Rpb25Db250ZXh0LCBXaXRoSW5qZWN0b3JEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kZWNvcmF0b3JzL3J1bi1pbi1pbmplY3Rpb24tY29udGV4dC5kZWNvcmF0b3InO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdoYW5kbGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vaGFuZGxlLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBIYW5kbGVDb21wb25lbnQgZXh0ZW5kcyBXaXRoSW5qZWN0b3JEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgaGFuZGxlU2VydmljZSA9IGluamVjdChIYW5kbGVTZXJ2aWNlKVxuICBwcml2YXRlIGVsZW1lbnQgPSBpbmplY3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+KEVsZW1lbnRSZWYpLm5hdGl2ZUVsZW1lbnRcblxuICAvKipcbiAgICogQXQgd2hhdCBzaWRlIG9mIG5vZGUgdGhpcyBjb21wb25lbnQgc2hvdWxkIGJlIHBsYWNlZFxuICAgKi9cbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgcHVibGljIHBvc2l0aW9uITogUG9zaXRpb25cblxuICAvKipcbiAgICogU291cmNlIG9yIHRhcmdldFxuICAgKi9cbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgcHVibGljIHR5cGUhOiAnc291cmNlJyB8ICd0YXJnZXQnXG5cbiAgLyoqXG4gICAqIFNob3VsZCBiZSB1c2VkIGlmIG5vZGUgaGFzIG1vcmUgdGhhbiBvbmUgc291cmNlL3RhcmdldFxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGlkPzogc3RyaW5nXG5cbiAgQElucHV0KClcbiAgcHVibGljIHRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PlxuXG4gIHB1YmxpYyBtb2RlbCE6IEhhbmRsZU1vZGVsXG5cbiAgQEluamVjdGlvbkNvbnRleHRcbiAgcHVibGljIG5nT25Jbml0KCkge1xuICAgIHRoaXMubW9kZWwgPSBuZXcgSGFuZGxlTW9kZWwoXG4gICAgICB7XG4gICAgICAgIHBvc2l0aW9uOiB0aGlzLnBvc2l0aW9uLFxuICAgICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgICBwYXJlbnRSZWZlcmVuY2U6IHRoaXMuZWxlbWVudC5wYXJlbnRFbGVtZW50ISxcbiAgICAgICAgdGVtcGxhdGU6IHRoaXMudGVtcGxhdGVcbiAgICAgIH0sXG4gICAgICB0aGlzLmhhbmRsZVNlcnZpY2Uubm9kZSgpIVxuICAgIClcblxuICAgIHRoaXMuaGFuZGxlU2VydmljZS5jcmVhdGVIYW5kbGUodGhpcy5tb2RlbClcblxuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHRoaXMubW9kZWwudXBkYXRlUGFyZW50KCkpXG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5oYW5kbGVTZXJ2aWNlLmRlc3Ryb3lIYW5kbGUodGhpcy5tb2RlbClcbiAgfVxufVxuXG4iLCIiXX0=
@@ -1,45 +1,58 @@
1
- import { ChangeDetectionStrategy, Component, ElementRef, Injector, Input, ViewChild, computed, effect, inject, runInInjectionContext, signal } from '@angular/core';
1
+ import { __decorate } from "tslib";
2
+ import { ChangeDetectionStrategy, Component, ElementRef, Input, NgZone, ViewChild, computed, inject } from '@angular/core';
2
3
  import { DraggableService } from '../../services/draggable.service';
3
4
  import { FlowStatusService, batchStatusChanges } from '../../services/flow-status.service';
4
5
  import { FlowEntitiesService } from '../../services/flow-entities.service';
5
6
  import { HandleService } from '../../services/handle.service';
7
+ import { HandleModel } from '../../models/handle.model';
8
+ import { resizable } from '../../utils/resizable';
9
+ import { Subscription, map, startWith, switchMap, tap } from 'rxjs';
10
+ import { InjectionContext, WithInjectorDirective } from '../../decorators/run-in-injection-context.decorator';
11
+ import { Microtask } from '../../decorators/microtask.decorator';
6
12
  import * as i0 from "@angular/core";
7
13
  import * as i1 from "@angular/common";
8
- export class NodeComponent {
14
+ import * as i2 from "../../directives/handle-size-controller.directive";
15
+ export class NodeComponent extends WithInjectorDirective {
9
16
  constructor() {
17
+ super(...arguments);
10
18
  this.handleService = inject(HandleService);
11
- this.injector = inject(Injector);
19
+ this.zone = inject(NgZone);
12
20
  this.draggableService = inject(DraggableService);
13
21
  this.flowStatusService = inject(FlowStatusService);
14
22
  this.flowEntitiesService = inject(FlowEntitiesService);
15
23
  this.hostRef = inject(ElementRef);
16
24
  this.showMagnet = computed(() => this.flowStatusService.status().state === 'connection-start' ||
17
25
  this.flowStatusService.status().state === 'connection-validation');
18
- this.sourceHanldeState = signal('idle');
19
- this.targetHandleState = signal('idle');
26
+ this.subscription = new Subscription();
20
27
  }
21
28
  ngOnInit() {
22
- runInInjectionContext(this.injector, () => {
23
- effect(() => this.nodeModel.rawHandles.set(this.handleService.handles()), { allowSignalWrites: true });
24
- });
29
+ this.handleService.node.set(this.nodeModel);
25
30
  this.draggableService.toggleDraggable(this.hostRef.nativeElement, this.nodeModel);
31
+ const sub = this.nodeModel.handles$
32
+ .pipe(switchMap((handles) => resizable(handles.map(h => h.parentReference), this.zone)
33
+ .pipe(map(() => handles))), tap((handles) => handles.forEach(h => h.updateParent())))
34
+ .subscribe();
35
+ this.subscription.add(sub);
26
36
  }
27
37
  ngAfterViewInit() {
28
- // TODO remove microtask
29
- queueMicrotask(() => {
30
- if (this.nodeModel.node.type === 'default') {
31
- const { width, height } = this.nodeContentRef.nativeElement.getBBox();
32
- this.nodeModel.size.set({ width, height });
33
- }
34
- if (this.nodeModel.node.type === 'html-template') {
38
+ this.setInitialHandles();
39
+ if (this.nodeModel.node.type === 'default') {
40
+ const { width, height } = this.nodeContentRef.nativeElement.getBBox();
41
+ this.nodeModel.size.set({ width, height });
42
+ }
43
+ if (this.nodeModel.node.type === 'html-template') {
44
+ const sub = resizable([this.htmlWrapperRef.nativeElement], this.zone)
45
+ .pipe(startWith(null), tap(() => {
35
46
  const width = this.htmlWrapperRef.nativeElement.clientWidth;
36
47
  const height = this.htmlWrapperRef.nativeElement.clientHeight;
37
48
  this.nodeModel.size.set({ width, height });
38
- }
39
- });
49
+ })).subscribe();
50
+ this.subscription.add(sub);
51
+ }
40
52
  }
41
53
  ngOnDestroy() {
42
54
  this.draggableService.destroy(this.hostRef.nativeElement);
55
+ this.subscription.unsubscribe();
43
56
  }
44
57
  startConnection(event, handle) {
45
58
  // ignore drag by stopping propagation
@@ -77,27 +90,47 @@ export class NodeComponent {
77
90
  sourceHandle: sourceHandle.rawHandle.id,
78
91
  targetHandle: targetHandle.rawHandle.id
79
92
  });
80
- this.targetHandleState.set(valid ? 'valid' : 'invalid');
93
+ targetHandle.state.set(valid ? 'valid' : 'invalid');
81
94
  this.flowStatusService.setConnectionValidationStatus(valid, sourceNode, targetNode, sourceHandle, targetHandle);
82
95
  }
83
96
  }
84
97
  /**
85
98
  * TODO srp
86
99
  */
87
- resetValidateTargetHandle() {
88
- this.targetHandleState.set('idle');
100
+ resetValidateTargetHandle(targetHandle) {
101
+ targetHandle.state.set('idle');
89
102
  // drop back to start status
90
103
  const status = this.flowStatusService.status();
91
104
  if (status.state === 'connection-validation') {
92
105
  this.flowStatusService.setConnectionStartStatus(status.payload.sourceNode, status.payload.sourceHandle);
93
106
  }
94
107
  }
95
- 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", nodeHtmlTemplate: "nodeHtmlTemplate" }, providers: [HandleService], viewQueries: [{ propertyName: "nodeContentRef", first: true, predicate: ["nodeContent"], descendants: true }, { propertyName: "htmlWrapperRef", first: true, predicate: ["htmlWrapper"], descendants: true }], ngImport: i0, template: "<svg:foreignObject\n *ngIf=\"nodeModel.node.type === 'default'\"\n #nodeContent\n width=\"100\"\n height=\"50\"\n>\n <div class=\"default-node\" [innerHTML]=\"nodeModel.node.text ?? ''\"></div>\n</svg:foreignObject>\n\n<svg:foreignObject\n *ngIf=\"nodeModel.node.type === 'html-template' && nodeHtmlTemplate\"\n [attr.width]=\"nodeModel.size().width\"\n [attr.height]=\"nodeModel.size().height\"\n>\n <div #htmlWrapper class=\"wrapper\">\n <ng-container\n [ngTemplateOutlet]=\"nodeHtmlTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: { node: nodeModel.node } }\"\n [ngTemplateOutletInjector]=\"injector\"\n />\n </div>\n</svg:foreignObject>\n\n<ng-container *ngFor=\"let handle of nodeModel.handles()\">\n <svg:circle\n #sourceHandle\n [attr.cx]=\"handle.offset().x\"\n [attr.cy]=\"handle.offset().y\"\n [attr.stroke-width]=\"handle.strokeWidth\"\n r=\"5\"\n stroke=\"white\"\n fill=\"black\"\n (mousedown)=\"handle.rawHandle.type === 'source' ? startConnection($event, handle) : null\"\n (mouseup)=\"handle.rawHandle.type === 'target' ? endConnection() : null\"\n />\n\n <svg:circle\n *ngIf=\"handle.rawHandle.type === 'target' && showMagnet()\"\n class=\"magnet\"\n [attr.r]=\"nodeModel.magnetRadius\"\n [attr.cx]=\"handle.offset().x\"\n [attr.cy]=\"handle.offset().y\"\n (mouseup)=\"endConnection(); resetValidateTargetHandle()\"\n (mouseover)=\"validateTargetHandle(handle)\"\n (mouseout)=\"resetValidateTargetHandle()\"\n />\n</ng-container>\n\n", styles: [".wrapper{width:max-content}.magnet{opacity:0}.default-node{max-width:100px;max-height:100px;width:100px;height:50px;border:2px solid black;border-radius:5px;display:flex;align-items:center;justify-content:center;color:#000;background-color:#fff}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
108
+ setInitialHandles() {
109
+ if (this.nodeModel.node.type === 'default') {
110
+ this.handleService.createHandle(new HandleModel({
111
+ position: this.nodeModel.sourcePosition(),
112
+ type: 'source',
113
+ parentReference: this.htmlWrapperRef.nativeElement
114
+ }, this.nodeModel));
115
+ this.handleService.createHandle(new HandleModel({
116
+ position: this.nodeModel.targetPosition(),
117
+ type: 'target',
118
+ parentReference: this.htmlWrapperRef.nativeElement
119
+ }, this.nodeModel));
120
+ }
121
+ }
122
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NodeComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
123
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: NodeComponent, selector: "g[node]", inputs: { nodeModel: "nodeModel", nodeHtmlTemplate: "nodeHtmlTemplate" }, providers: [HandleService], viewQueries: [{ propertyName: "nodeContentRef", first: true, predicate: ["nodeContent"], descendants: true }, { propertyName: "htmlWrapperRef", first: true, predicate: ["htmlWrapper"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<svg:foreignObject\n *ngIf=\"nodeModel.node.type === 'default'\"\n #nodeContent\n width=\"100\"\n height=\"50\"\n>\n <div #htmlWrapper class=\"default-node\" [innerHTML]=\"nodeModel.node.text ?? ''\"></div>\n</svg:foreignObject>\n\n<svg:foreignObject\n *ngIf=\"nodeModel.node.type === 'html-template' && nodeHtmlTemplate\"\n [attr.width]=\"nodeModel.size().width\"\n [attr.height]=\"nodeModel.size().height\"\n>\n <div #htmlWrapper class=\"wrapper\">\n <ng-container\n [ngTemplateOutlet]=\"nodeHtmlTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: { node: nodeModel.node } }\"\n [ngTemplateOutletInjector]=\"injector\"\n />\n </div>\n</svg:foreignObject>\n\n<ng-container *ngFor=\"let handle of nodeModel.handles()\">\n <svg:circle\n *ngIf=\"!handle.template\"\n [attr.cx]=\"handle.offset().x\"\n [attr.cy]=\"handle.offset().y\"\n [attr.stroke-width]=\"handle.strokeWidth\"\n r=\"5\"\n stroke=\"white\"\n fill=\"black\"\n (mousedown)=\"handle.rawHandle.type === 'source' ? startConnection($event, handle) : null\"\n (mouseup)=\"handle.rawHandle.type === 'target' ? endConnection() : null\"\n />\n\n <svg:g\n *ngIf=\"handle.template\"\n [handleSizeController]=\"handle\"\n (mousedown)=\"handle.rawHandle.type === 'source' ? startConnection($event, handle) : null\"\n (mouseup)=\"handle.rawHandle.type === 'target' ? endConnection() : null\"\n >\n <ng-container *ngTemplateOutlet=\"handle.template; context: handle.templateContext\" />\n </svg:g>\n\n <svg:circle\n *ngIf=\"handle.rawHandle.type === 'target' && showMagnet()\"\n class=\"magnet\"\n [attr.r]=\"nodeModel.magnetRadius\"\n [attr.cx]=\"handle.offset().x\"\n [attr.cy]=\"handle.offset().y\"\n (mouseup)=\"endConnection(); resetValidateTargetHandle(handle)\"\n (mouseover)=\"validateTargetHandle(handle)\"\n (mouseout)=\"resetValidateTargetHandle(handle)\"\n />\n</ng-container>\n\n", styles: [".wrapper{width:max-content}.magnet{opacity:0}.default-node{max-width:100px;max-height:100px;width:100px;height:50px;border:2px solid black;border-radius:5px;display:flex;align-items:center;justify-content:center;color:#000;background-color:#fff}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.HandleSizeControllerDirective, selector: "[handleSizeController]", inputs: ["handleSizeController"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
97
124
  }
125
+ __decorate([
126
+ Microtask
127
+ ], NodeComponent.prototype, "ngAfterViewInit", null);
128
+ __decorate([
129
+ InjectionContext
130
+ ], NodeComponent.prototype, "setInitialHandles", null);
98
131
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NodeComponent, decorators: [{
99
132
  type: Component,
100
- args: [{ selector: 'g[node]', changeDetection: ChangeDetectionStrategy.OnPush, providers: [HandleService], template: "<svg:foreignObject\n *ngIf=\"nodeModel.node.type === 'default'\"\n #nodeContent\n width=\"100\"\n height=\"50\"\n>\n <div class=\"default-node\" [innerHTML]=\"nodeModel.node.text ?? ''\"></div>\n</svg:foreignObject>\n\n<svg:foreignObject\n *ngIf=\"nodeModel.node.type === 'html-template' && nodeHtmlTemplate\"\n [attr.width]=\"nodeModel.size().width\"\n [attr.height]=\"nodeModel.size().height\"\n>\n <div #htmlWrapper class=\"wrapper\">\n <ng-container\n [ngTemplateOutlet]=\"nodeHtmlTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: { node: nodeModel.node } }\"\n [ngTemplateOutletInjector]=\"injector\"\n />\n </div>\n</svg:foreignObject>\n\n<ng-container *ngFor=\"let handle of nodeModel.handles()\">\n <svg:circle\n #sourceHandle\n [attr.cx]=\"handle.offset().x\"\n [attr.cy]=\"handle.offset().y\"\n [attr.stroke-width]=\"handle.strokeWidth\"\n r=\"5\"\n stroke=\"white\"\n fill=\"black\"\n (mousedown)=\"handle.rawHandle.type === 'source' ? startConnection($event, handle) : null\"\n (mouseup)=\"handle.rawHandle.type === 'target' ? endConnection() : null\"\n />\n\n <svg:circle\n *ngIf=\"handle.rawHandle.type === 'target' && showMagnet()\"\n class=\"magnet\"\n [attr.r]=\"nodeModel.magnetRadius\"\n [attr.cx]=\"handle.offset().x\"\n [attr.cy]=\"handle.offset().y\"\n (mouseup)=\"endConnection(); resetValidateTargetHandle()\"\n (mouseover)=\"validateTargetHandle(handle)\"\n (mouseout)=\"resetValidateTargetHandle()\"\n />\n</ng-container>\n\n", styles: [".wrapper{width:max-content}.magnet{opacity:0}.default-node{max-width:100px;max-height:100px;width:100px;height:50px;border:2px solid black;border-radius:5px;display:flex;align-items:center;justify-content:center;color:#000;background-color:#fff}\n"] }]
133
+ args: [{ selector: 'g[node]', changeDetection: ChangeDetectionStrategy.OnPush, providers: [HandleService], template: "<svg:foreignObject\n *ngIf=\"nodeModel.node.type === 'default'\"\n #nodeContent\n width=\"100\"\n height=\"50\"\n>\n <div #htmlWrapper class=\"default-node\" [innerHTML]=\"nodeModel.node.text ?? ''\"></div>\n</svg:foreignObject>\n\n<svg:foreignObject\n *ngIf=\"nodeModel.node.type === 'html-template' && nodeHtmlTemplate\"\n [attr.width]=\"nodeModel.size().width\"\n [attr.height]=\"nodeModel.size().height\"\n>\n <div #htmlWrapper class=\"wrapper\">\n <ng-container\n [ngTemplateOutlet]=\"nodeHtmlTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: { node: nodeModel.node } }\"\n [ngTemplateOutletInjector]=\"injector\"\n />\n </div>\n</svg:foreignObject>\n\n<ng-container *ngFor=\"let handle of nodeModel.handles()\">\n <svg:circle\n *ngIf=\"!handle.template\"\n [attr.cx]=\"handle.offset().x\"\n [attr.cy]=\"handle.offset().y\"\n [attr.stroke-width]=\"handle.strokeWidth\"\n r=\"5\"\n stroke=\"white\"\n fill=\"black\"\n (mousedown)=\"handle.rawHandle.type === 'source' ? startConnection($event, handle) : null\"\n (mouseup)=\"handle.rawHandle.type === 'target' ? endConnection() : null\"\n />\n\n <svg:g\n *ngIf=\"handle.template\"\n [handleSizeController]=\"handle\"\n (mousedown)=\"handle.rawHandle.type === 'source' ? startConnection($event, handle) : null\"\n (mouseup)=\"handle.rawHandle.type === 'target' ? endConnection() : null\"\n >\n <ng-container *ngTemplateOutlet=\"handle.template; context: handle.templateContext\" />\n </svg:g>\n\n <svg:circle\n *ngIf=\"handle.rawHandle.type === 'target' && showMagnet()\"\n class=\"magnet\"\n [attr.r]=\"nodeModel.magnetRadius\"\n [attr.cx]=\"handle.offset().x\"\n [attr.cy]=\"handle.offset().y\"\n (mouseup)=\"endConnection(); resetValidateTargetHandle(handle)\"\n (mouseover)=\"validateTargetHandle(handle)\"\n (mouseout)=\"resetValidateTargetHandle(handle)\"\n />\n</ng-container>\n\n", styles: [".wrapper{width:max-content}.magnet{opacity:0}.default-node{max-width:100px;max-height:100px;width:100px;height:50px;border:2px solid black;border-radius:5px;display:flex;align-items:center;justify-content:center;color:#000;background-color:#fff}\n"] }]
101
134
  }], propDecorators: { nodeModel: [{
102
135
  type: Input
103
136
  }], nodeHtmlTemplate: [{
@@ -108,5 +141,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
108
141
  }], htmlWrapperRef: [{
109
142
  type: ViewChild,
110
143
  args: ['htmlWrapper']
111
- }] } });
112
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmZsb3ctbGliL3NyYy9saWIvdmZsb3cvY29tcG9uZW50cy9ub2RlL25vZGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2NvbXBvbmVudHMvbm9kZS9ub2RlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBZSxRQUFRLEVBQUUsS0FBSyxFQUEwQyxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hPLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRXBFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzNGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7O0FBWTlELE1BQU0sT0FBTyxhQUFhO0lBUDFCO1FBUVksa0JBQWEsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUE7UUFDckMsYUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQWM3QixxQkFBZ0IsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtRQUMzQyxzQkFBaUIsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQTtRQUM3Qyx3QkFBbUIsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQTtRQUNqRCxZQUFPLEdBQUcsTUFBTSxDQUF5QixVQUFVLENBQUMs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QVksQ0FBQyxDQUFBO1NBQ2hIO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ08seUJBQXlCO1FBQ2pDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUE7UUFFbEMsNEJBQTRCO1FBQzVCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQTtRQUM5QyxJQUFJLE1BQU0sQ0FBQyxLQUFLLEtBQUssdUJBQXVCLEVBQUU7WUFDNUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUE7U0FDeEc7SUFDSCxDQUFDOytHQTNIVSxhQUFhO21HQUFiLGFBQWEsNEdBRmIsQ0FBQyxhQUFhLENBQUMseU9DZjVCLHVnREFnREE7OzRGRC9CYSxhQUFhO2tCQVB6QixTQUFTOytCQUNFLFNBQVMsbUJBR0YsdUJBQXVCLENBQUMsTUFBTSxhQUNwQyxDQUFDLGFBQWEsQ0FBQzs4QkFPbkIsU0FBUztzQkFEZixLQUFLO2dCQUlDLGdCQUFnQjtzQkFEdEIsS0FBSztnQkFJQyxjQUFjO3NCQURwQixTQUFTO3VCQUFDLGFBQWE7Z0JBSWpCLGNBQWM7c0JBRHBCLFNBQVM7dUJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEhvc3RCaW5kaW5nLCBJbmplY3RvciwgSW5wdXQsIE5nWm9uZSwgT25EZXN0cm95LCBPbkluaXQsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQsIGNvbXB1dGVkLCBlZmZlY3QsIGluamVjdCwgcnVuSW5JbmplY3Rpb25Db250ZXh0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERyYWdnYWJsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kcmFnZ2FibGUuc2VydmljZSc7XG5pbXBvcnQgeyBOb2RlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvbm9kZS5tb2RlbCc7XG5pbXBvcnQgeyBGbG93U3RhdHVzU2VydmljZSwgYmF0Y2hTdGF0dXNDaGFuZ2VzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmxvdy1zdGF0dXMuc2VydmljZSc7XG5pbXBvcnQgeyBGbG93RW50aXRpZXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmxvdy1lbnRpdGllcy5zZXJ2aWNlJztcbmltcG9ydCB7IEhhbmRsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9oYW5kbGUuc2VydmljZSc7XG5pbXBvcnQgeyBIYW5kbGVNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9oYW5kbGUubW9kZWwnO1xuXG5leHBvcnQgdHlwZSBIYW5kbGVTdGF0ZSA9ICd2YWxpZCcgfCAnaW52YWxpZCcgfCAnaWRsZSdcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZ1tub2RlXScsXG4gIHRlbXBsYXRlVXJsOiAnLi9ub2RlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbm9kZS5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgcHJvdmlkZXJzOiBbSGFuZGxlU2VydmljZV1cbn0pXG5leHBvcnQgY2xhc3MgTm9kZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgcHJvdGVjdGVkIGhhbmRsZVNlcnZpY2UgPSBpbmplY3QoSGFuZGxlU2VydmljZSlcbiAgcHJvdGVjdGVkIGluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKVxuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBub2RlTW9kZWwhOiBOb2RlTW9kZWxcblxuICBASW5wdXQoKVxuICBwdWJsaWMgbm9kZUh0bWxUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT5cblxuICBAVmlld0NoaWxkKCdub2RlQ29udGVudCcpXG4gIHB1YmxpYyBub2RlQ29udGVudFJlZiE6IEVsZW1lbnRSZWY8U1ZHR3JhcGhpY3NFbGVtZW50PlxuXG4gIEBWaWV3Q2hpbGQoJ2h0bWxXcmFwcGVyJylcbiAgcHVibGljIGh0bWxXcmFwcGVyUmVmITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD5cblxuICBwcml2YXRlIGRyYWdnYWJsZVNlcnZpY2UgPSBpbmplY3QoRHJhZ2dhYmxlU2VydmljZSlcbiAgcHJpdmF0ZSBmbG93U3RhdHVzU2VydmljZSA9IGluamVjdChGbG93U3RhdHVzU2VydmljZSlcbiAgcHJpdmF0ZSBmbG93RW50aXRpZXNTZXJ2aWNlID0gaW5qZWN0KEZsb3dFbnRpdGllc1NlcnZpY2UpXG4gIHByaXZhdGUgaG9zdFJlZiA9IGluamVjdDxFbGVtZW50UmVmPFNWR0VsZW1lbnQ+PihFbGVtZW50UmVmKVxuXG4gIHByb3RlY3RlZCBzaG93TWFnbmV0ID0gY29tcHV0ZWQoKCkgPT5cbiAgICB0aGlzLmZsb3dTdGF0dXNTZXJ2aWNlLnN0YXR1cygpLnN0YXRlID09PSAnY29ubmVjdGlvbi1zdGFydCcgfHxcbiAgICB0aGlzLmZsb3dTdGF0dXNTZXJ2aWNlLnN0YXR1cygpLnN0YXRlID09PSAnY29ubmVjdGlvbi12YWxpZGF0aW9uJ1xuICApXG5cbiAgcHJpdmF0ZSBzb3VyY2VIYW5sZGVTdGF0ZSA9IHNpZ25hbDxIYW5kbGVTdGF0ZT4oJ2lkbGUnKVxuICBwcml2YXRlIHRhcmdldEhhbmRsZVN0YXRlID0gc2lnbmFsPEhhbmRsZVN0YXRlPignaWRsZScpXG5cbiAgcHVibGljIG5nT25Jbml0KCkge1xuICAgIHJ1bkluSW5qZWN0aW9uQ29udGV4dCh0aGlzLmluamVjdG9yLCAoKSA9PiB7XG4gICAgICBlZmZlY3QoXG4gICAgICAgICgpID0+IHRoaXMubm9kZU1vZGVsLnJhd0hhbmRsZXMuc2V0KHRoaXMuaGFuZGxlU2VydmljZS5oYW5kbGVzKCkpLFxuICAgICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH1cbiAgICAgIClcbiAgICB9KVxuXG4gICAgdGhpcy5kcmFnZ2FibGVTZXJ2aWNlLnRvZ2dsZURyYWdnYWJsZSh0aGlzLmhvc3RSZWYubmF0aXZlRWxlbWVudCwgdGhpcy5ub2RlTW9kZWwpXG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIC8vIFRPRE8gcmVtb3ZlIG1pY3JvdGFza1xuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLm5vZGVNb2RlbC5ub2RlLnR5cGUgPT09ICdkZWZhdWx0Jykge1xuICAgICAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHRoaXMubm9kZUNvbnRlbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCQm94KClcbiAgICAgICAgdGhpcy5ub2RlTW9kZWwuc2l6ZS5zZXQoeyB3aWR0aCwgaGVpZ2h0IH0pXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm5vZGVNb2RlbC5ub2RlLnR5cGUgPT09ICdodG1sLXRlbXBsYXRlJykge1xuICAgICAgICBjb25zdCB3aWR0aCA9IHRoaXMuaHRtbFdyYXBwZXJSZWYubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aFxuICAgICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLmh0bWxXcmFwcGVyUmVmLm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0XG5cbiAgICAgICAgdGhpcy5ub2RlTW9kZWwuc2l6ZS5zZXQoeyB3aWR0aCwgaGVpZ2h0IH0pXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRyYWdnYWJsZVNlcnZpY2UuZGVzdHJveSh0aGlzLmhvc3RSZWYubmF0aXZlRWxlbWVudClcbiAgfVxuXG4gIHByb3RlY3RlZCBzdGFydENvbm5lY3Rpb24oZXZlbnQ6IE1vdXNlRXZlbnQsIGhhbmRsZTogSGFuZGxlTW9kZWwpIHtcbiAgICAvLyBpZ25vcmUgZHJhZyBieSBzdG9wcGluZyBwcm9wYWdhdGlvblxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG5cbiAgICB0aGlzLmZsb3dTdGF0dXNTZXJ2aWNlLnNldENvbm5lY3Rpb25TdGFydFN0YXR1cyh0aGlzLm5vZGVNb2RlbCwgaGFuZGxlKVxuICB9XG5cbiAgcHJvdGVjdGVkIGVuZENvbm5lY3Rpb24oKSB7XG4gICAgY29uc3Qgc3RhdHVzID0gdGhpcy5mbG93U3RhdHVzU2VydmljZS5zdGF0dXMoKVxuXG4gICAgaWYgKHN0YXR1cy5zdGF0ZSA9PT0gJ2Nvbm5lY3Rpb24tdmFsaWRhdGlvbicpIHtcbiAgICAgIGNvbnN0IHNvdXJjZU5vZGUgPSBzdGF0dXMucGF5bG9hZC5zb3VyY2VOb2RlXG4gICAgICBjb25zdCB0YXJnZXROb2RlID0gdGhpcy5ub2RlTW9kZWxcbiAgICAgIGNvbnN0IHNvdXJjZUhhbmRsZSA9IHN0YXR1cy5wYXlsb2FkLnNvdXJjZUhhbmRsZVxuICAgICAgY29uc3QgdGFyZ2V0SGFuZGxlID0gc3RhdHVzLnBheWxvYWQudGFyZ2V0SGFuZGxlXG5cbiAgICAgIGJhdGNoU3RhdHVzQ2hhbmdlcyhcbiAgICAgICAgLy8gY2FsbCB0byBjcmVhdGUgY29ubmVjdGlvblxuICAgICAgICAoKSA9PiB0aGlzLmZsb3dTdGF0dXNTZXJ2aWNlLnNldENvbm5lY3Rpb25FbmRTdGF0dXMoc291cmNlTm9kZSwgdGFyZ2V0Tm9kZSwgc291cmNlSGFuZGxlLCB0YXJnZXRIYW5kbGUpLFxuICAgICAgICAvLyB3aGVuIGNvbm5lY3Rpb24gY3JlYXRlZCwgd2UgbmVlZCBnbyBiYWNrIHRvIGlkbGUgc3RhdHVzXG4gICAgICAgICgpID0+IHRoaXMuZmxvd1N0YXR1c1NlcnZpY2Uuc2V0SWRsZVN0YXR1cygpXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRPRE8gc3JwXG4gICAqL1xuICBwcm90ZWN0ZWQgdmFsaWRhdGVUYXJnZXRIYW5kbGUodGFyZ2V0SGFuZGxlOiBIYW5kbGVNb2RlbCkge1xuICAgIGNvbnN0IHN0YXR1cyA9IHRoaXMuZmxvd1N0YXR1c1NlcnZpY2Uuc3RhdHVzKClcblxuICAgIGlmIChzdGF0dXMuc3RhdGUgPT09ICdjb25uZWN0aW9uLXN0YXJ0Jykge1xuICAgICAgY29uc3Qgc291cmNlTm9kZSA9IHN0YXR1cy5wYXlsb2FkLnNvdXJjZU5vZGVcbiAgICAgIGNvbnN0IHNvdXJjZUhhbmRsZSA9IHN0YXR1cy5wYXlsb2FkLnNvdXJjZUhhbmRsZVxuICAgICAgY29uc3Qgc291cmNlID0gc291cmNlTm9kZS5ub2RlLmlkXG5cbiAgICAgIGNvbnN0IHRhcmdldE5vZGUgPSB0aGlzLm5vZGVNb2RlbFxuICAgICAgY29uc3QgdGFyZ2V0ID0gdGFyZ2V0Tm9kZS5ub2RlLmlkXG5cbiAgICAgIGNvbnN0IHZhbGlkID0gdGhpcy5mbG93RW50aXRpZXNTZXJ2aWNlLmNvbm5lY3Rpb24oKS52YWxpZGF0b3Ioe1xuICAgICAgICBzb3VyY2UsXG4gICAgICAgIHRhcmdldCxcbiAgICAgICAgc291cmNlSGFuZGxlOiBzb3VyY2VIYW5kbGUucmF3SGFuZGxlLmlkLFxuICAgICAgICB0YXJnZXRIYW5kbGU6IHRhcmdldEhhbmRsZS5yYXdIYW5kbGUuaWRcbiAgICAgIH0pXG4gICAgICB0aGlzLnRhcmdldEhhbmRsZVN0YXRlLnNldCh2YWxpZCA/ICd2YWxpZCcgOiAnaW52YWxpZCcpXG5cbiAgICAgIHRoaXMuZmxvd1N0YXR1c1NlcnZpY2Uuc2V0Q29ubmVjdGlvblZhbGlkYXRpb25TdGF0dXModmFsaWQsIHNvdXJjZU5vZGUsIHRhcmdldE5vZGUsIHNvdXJjZUhhbmRsZSwgdGFyZ2V0SGFuZGxlKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUT0RPIHNycFxuICAgKi9cbiAgcHJvdGVjdGVkIHJlc2V0VmFsaWRhdGVUYXJnZXRIYW5kbGUoKSB7XG4gICAgdGhpcy50YXJnZXRIYW5kbGVTdGF0ZS5zZXQoJ2lkbGUnKVxuXG4gICAgLy8gZHJvcCBiYWNrIHRvIHN0YXJ0IHN0YXR1c1xuICAgIGNvbnN0IHN0YXR1cyA9IHRoaXMuZmxvd1N0YXR1c1NlcnZpY2Uuc3RhdHVzKClcbiAgICBpZiAoc3RhdHVzLnN0YXRlID09PSAnY29ubmVjdGlvbi12YWxpZGF0aW9uJykge1xuICAgICAgdGhpcy5mbG93U3RhdHVzU2VydmljZS5zZXRDb25uZWN0aW9uU3RhcnRTdGF0dXMoc3RhdHVzLnBheWxvYWQuc291cmNlTm9kZSwgc3RhdHVzLnBheWxvYWQuc291cmNlSGFuZGxlKVxuICAgIH1cbiAgfVxuXG4gIC8vIHByb3RlY3RlZCBnZXRIYW5kbGVDb250ZXh0KHR5cGU6ICdzb3VyY2UnIHwgJ3RhcmdldCcpIHtcbiAgLy8gICBpZiAodHlwZSA9PT0gJ3NvdXJjZScpIHtcbiAgLy8gICAgIHJldHVybiB7XG4gIC8vICAgICAgICRpbXBsaWNpdDoge1xuICAvLyAgICAgICAgIHBvaW50OiB0aGlzLm5vZGVNb2RlbC5zb3VyY2VPZmZzZXQsXG4gIC8vICAgICAgICAgYWxpZ25lZFBvaW50OiB0aGlzLm5vZGVNb2RlbC5zb3VyY2VPZmZzZXRBbGlnbmVkLFxuICAvLyAgICAgICAgIHN0YXRlOiB0aGlzLnNvdXJjZUhhbmxkZVN0YXRlUmVhZG9ubHlcbiAgLy8gICAgICAgfVxuICAvLyAgICAgfVxuICAvLyAgIH1cblxuICAvLyAgIHJldHVybiB7XG4gIC8vICAgICAkaW1wbGljaXQ6IHtcbiAgLy8gICAgICAgcG9pbnQ6IHRoaXMubm9kZU1vZGVsLnRhcmdldE9mZnNldCxcbiAgLy8gICAgICAgYWxpZ25lZFBvaW50OiB0aGlzLm5vZGVNb2RlbC50YXJnZXRPZmZzZXRBbGlnbmVkLFxuICAvLyAgICAgICBzdGF0ZTogdGhpcy50YXJnZXRIYW5sZGVTdGF0ZVJlYWRvbmx5XG4gIC8vICAgICB9XG4gIC8vICAgfVxuICAvLyB9XG59XG4iLCI8c3ZnOmZvcmVpZ25PYmplY3RcbiAgKm5nSWY9XCJub2RlTW9kZWwubm9kZS50eXBlID09PSAnZGVmYXVsdCdcIlxuICAjbm9kZUNvbnRlbnRcbiAgd2lkdGg9XCIxMDBcIlxuICBoZWlnaHQ9XCI1MFwiXG4+XG4gIDxkaXYgY2xhc3M9XCJkZWZhdWx0LW5vZGVcIiBbaW5uZXJIVE1MXT1cIm5vZGVNb2RlbC5ub2RlLnRleHQgPz8gJydcIj48L2Rpdj5cbjwvc3ZnOmZvcmVpZ25PYmplY3Q+XG5cbjxzdmc6Zm9yZWlnbk9iamVjdFxuICAqbmdJZj1cIm5vZGVNb2RlbC5ub2RlLnR5cGUgPT09ICdodG1sLXRlbXBsYXRlJyAmJiBub2RlSHRtbFRlbXBsYXRlXCJcbiAgW2F0dHIud2lkdGhdPVwibm9kZU1vZGVsLnNpemUoKS53aWR0aFwiXG4gIFthdHRyLmhlaWdodF09XCJub2RlTW9kZWwuc2l6ZSgpLmhlaWdodFwiXG4+XG4gIDxkaXYgI2h0bWxXcmFwcGVyIGNsYXNzPVwid3JhcHBlclwiPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm5vZGVIdG1sVGVtcGxhdGVcIlxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiB7IG5vZGU6IG5vZGVNb2RlbC5ub2RlIH0gfVwiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldEluamVjdG9yXT1cImluamVjdG9yXCJcbiAgICAvPlxuICA8L2Rpdj5cbjwvc3ZnOmZvcmVpZ25PYmplY3Q+XG5cbjxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGhhbmRsZSBvZiBub2RlTW9kZWwuaGFuZGxlcygpXCI+XG4gIDxzdmc6Y2lyY2xlXG4gICAgI3NvdXJjZUhhbmRsZVxuICAgIFthdHRyLmN4XT1cImhhbmRsZS5vZmZzZXQoKS54XCJcbiAgICBbYXR0ci5jeV09XCJoYW5kbGUub2Zmc2V0KCkueVwiXG4gICAgW2F0dHIuc3Ryb2tlLXdpZHRoXT1cImhhbmRsZS5zdHJva2VXaWR0aFwiXG4gICAgcj1cIjVcIlxuICAgIHN0cm9rZT1cIndoaXRlXCJcbiAgICBmaWxsPVwiYmxhY2tcIlxuICAgIChtb3VzZWRvd24pPVwiaGFuZGxlLnJhd0hhbmRsZS50eXBlID09PSAnc291cmNlJyA/IHN0YXJ0Q29ubmVjdGlvbigkZXZlbnQsIGhhbmRsZSkgOiBudWxsXCJcbiAgICAobW91c2V1cCk9XCJoYW5kbGUucmF3SGFuZGxlLnR5cGUgPT09ICd0YXJnZXQnID8gZW5kQ29ubmVjdGlvbigpIDogbnVsbFwiXG4gIC8+XG5cbiAgPHN2ZzpjaXJjbGVcbiAgICAqbmdJZj1cImhhbmRsZS5yYXdIYW5kbGUudHlwZSA9PT0gJ3RhcmdldCcgJiYgc2hvd01hZ25ldCgpXCJcbiAgICBjbGFzcz1cIm1hZ25ldFwiXG4gICAgW2F0dHIucl09XCJub2RlTW9kZWwubWFnbmV0UmFkaXVzXCJcbiAgICBbYXR0ci5jeF09XCJoYW5kbGUub2Zmc2V0KCkueFwiXG4gICAgW2F0dHIuY3ldPVwiaGFuZGxlLm9mZnNldCgpLnlcIlxuICAgIChtb3VzZXVwKT1cImVuZENvbm5lY3Rpb24oKTsgcmVzZXRWYWxpZGF0ZVRhcmdldEhhbmRsZSgpXCJcbiAgICAobW91c2VvdmVyKT1cInZhbGlkYXRlVGFyZ2V0SGFuZGxlKGhhbmRsZSlcIlxuICAgIChtb3VzZW91dCk9XCJyZXNldFZhbGlkYXRlVGFyZ2V0SGFuZGxlKClcIlxuICAvPlxuPC9uZy1jb250YWluZXI+XG5cbiJdfQ==
144
+ }], ngAfterViewInit: [], setInitialHandles: [] } });
145
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmZsb3ctbGliL3NyYy9saWIvdmZsb3cvY29tcG9uZW50cy9ub2RlL25vZGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2NvbXBvbmVudHMvbm9kZS9ub2RlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQWlCLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQXlCLEtBQUssRUFBRSxNQUFNLEVBQTZDLFNBQVMsRUFBZ0IsUUFBUSxFQUFVLE1BQU0sRUFBaUMsTUFBTSxlQUFlLENBQUM7QUFDalEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFcEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDM0YsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzlELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLHFCQUFxQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDOUcsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNDQUFzQyxDQUFDOzs7O0FBV2pFLE1BQU0sT0FBTyxhQUFjLFNBQVEscUJBQXFCO0lBUHhEOztR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S0FBSztnQkFJQyxnQkFBZ0I7c0JBRHRCLEtBQUs7Z0JBSUMsY0FBYztzQkFEcEIsU0FBUzt1QkFBQyxhQUFhO2dCQUlqQixjQUFjO3NCQURwQixTQUFTO3VCQUFDLGFBQWE7Z0JBa0NqQixlQUFlLE1BK0ZkLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEhvc3RCaW5kaW5nLCBJbmplY3RvciwgSW5wdXQsIE5nWm9uZSwgT25EZXN0cm95LCBPbkluaXQsIFF1ZXJ5TGlzdCwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCwgVmlld0NoaWxkcmVuLCBjb21wdXRlZCwgZWZmZWN0LCBpbmplY3QsIHJ1bkluSW5qZWN0aW9uQ29udGV4dCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEcmFnZ2FibGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZHJhZ2dhYmxlLnNlcnZpY2UnO1xuaW1wb3J0IHsgTm9kZU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL25vZGUubW9kZWwnO1xuaW1wb3J0IHsgRmxvd1N0YXR1c1NlcnZpY2UsIGJhdGNoU3RhdHVzQ2hhbmdlcyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Zsb3ctc3RhdHVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmxvd0VudGl0aWVzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Zsb3ctZW50aXRpZXMuc2VydmljZSc7XG5pbXBvcnQgeyBIYW5kbGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaGFuZGxlLnNlcnZpY2UnO1xuaW1wb3J0IHsgSGFuZGxlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvaGFuZGxlLm1vZGVsJztcbmltcG9ydCB7IHJlc2l6YWJsZSB9IGZyb20gJy4uLy4uL3V0aWxzL3Jlc2l6YWJsZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIG1hcCwgc3RhcnRXaXRoLCBzd2l0Y2hNYXAsIHRhcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSW5qZWN0aW9uQ29udGV4dCwgV2l0aEluamVjdG9yRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGVjb3JhdG9ycy9ydW4taW4taW5qZWN0aW9uLWNvbnRleHQuZGVjb3JhdG9yJztcbmltcG9ydCB7IE1pY3JvdGFzayB9IGZyb20gJy4uLy4uL2RlY29yYXRvcnMvbWljcm90YXNrLmRlY29yYXRvcic7XG5cbmV4cG9ydCB0eXBlIEhhbmRsZVN0YXRlID0gJ3ZhbGlkJyB8ICdpbnZhbGlkJyB8ICdpZGxlJ1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdnW25vZGVdJyxcbiAgdGVtcGxhdGVVcmw6ICcuL25vZGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9ub2RlLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtIYW5kbGVTZXJ2aWNlXVxufSlcbmV4cG9ydCBjbGFzcyBOb2RlQ29tcG9uZW50IGV4dGVuZHMgV2l0aEluamVjdG9yRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICBwcm90ZWN0ZWQgaGFuZGxlU2VydmljZSA9IGluamVjdChIYW5kbGVTZXJ2aWNlKVxuICBwcm90ZWN0ZWQgem9uZSA9IGluamVjdChOZ1pvbmUpXG5cbiAgQElucHV0KClcbiAgcHVibGljIG5vZGVNb2RlbCE6IE5vZGVNb2RlbFxuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBub2RlSHRtbFRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PlxuXG4gIEBWaWV3Q2hpbGQoJ25vZGVDb250ZW50JylcbiAgcHVibGljIG5vZGVDb250ZW50UmVmITogRWxlbWVudFJlZjxTVkdHcmFwaGljc0VsZW1lbnQ+XG5cbiAgQFZpZXdDaGlsZCgnaHRtbFdyYXBwZXInKVxuICBwdWJsaWMgaHRtbFdyYXBwZXJSZWYhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PlxuXG4gIHByaXZhdGUgZHJhZ2dhYmxlU2VydmljZSA9IGluamVjdChEcmFnZ2FibGVTZXJ2aWNlKVxuICBwcml2YXRlIGZsb3dTdGF0dXNTZXJ2aWNlID0gaW5qZWN0KEZsb3dTdGF0dXNTZXJ2aWNlKVxuICBwcml2YXRlIGZsb3dFbnRpdGllc1NlcnZpY2UgPSBpbmplY3QoRmxvd0VudGl0aWVzU2VydmljZSlcbiAgcHJpdmF0ZSBob3N0UmVmID0gaW5qZWN0PEVsZW1lbnRSZWY8U1ZHRWxlbWVudD4+KEVsZW1lbnRSZWYpXG5cbiAgcHJvdGVjdGVkIHNob3dNYWduZXQgPSBjb21wdXRlZCgoKSA9PlxuICAgIHRoaXMuZmxvd1N0YXR1c1NlcnZpY2Uuc3RhdHVzKCkuc3RhdGUgPT09ICdjb25uZWN0aW9uLXN0YXJ0JyB8fFxuICAgIHRoaXMuZmxvd1N0YXR1c1NlcnZpY2Uuc3RhdHVzKCkuc3RhdGUgPT09ICdjb25uZWN0aW9uLXZhbGlkYXRpb24nXG4gIClcblxuICBwcml2YXRlIHN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmhhbmRsZVNlcnZpY2Uubm9kZS5zZXQodGhpcy5ub2RlTW9kZWwpO1xuXG4gICAgdGhpcy5kcmFnZ2FibGVTZXJ2aWNlLnRvZ2dsZURyYWdnYWJsZSh0aGlzLmhvc3RSZWYubmF0aXZlRWxlbWVudCwgdGhpcy5ub2RlTW9kZWwpXG5cbiAgICBjb25zdCBzdWIgPSB0aGlzLm5vZGVNb2RlbC5oYW5kbGVzJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoaGFuZGxlcykgPT5cbiAgICAgICAgICByZXNpemFibGUoaGFuZGxlcy5tYXAoaCA9PiBoLnBhcmVudFJlZmVyZW5jZSEpLCB0aGlzLnpvbmUpXG4gICAgICAgICAgICAucGlwZShtYXAoKCkgPT4gaGFuZGxlcykpXG4gICAgICAgICksXG4gICAgICAgIHRhcCgoaGFuZGxlcykgPT4gaGFuZGxlcy5mb3JFYWNoKGggPT4gaC51cGRhdGVQYXJlbnQoKSkpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKClcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9uLmFkZChzdWIpXG4gIH1cblxuICBATWljcm90YXNrXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRJbml0aWFsSGFuZGxlcygpXG5cbiAgICBpZiAodGhpcy5ub2RlTW9kZWwubm9kZS50eXBlID09PSAnZGVmYXVsdCcpIHtcbiAgICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gdGhpcy5ub2RlQ29udGVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJCb3goKVxuICAgICAgdGhpcy5ub2RlTW9kZWwuc2l6ZS5zZXQoeyB3aWR0aCwgaGVpZ2h0IH0pXG4gICAgfVxuXG4gICAgaWYgKHRoaXMubm9kZU1vZGVsLm5vZGUudHlwZSA9PT0gJ2h0bWwtdGVtcGxhdGUnKSB7XG4gICAgICBjb25zdCBzdWIgPSByZXNpemFibGUoW3RoaXMuaHRtbFdyYXBwZXJSZWYubmF0aXZlRWxlbWVudF0sIHRoaXMuem9uZSlcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgc3RhcnRXaXRoKG51bGwpLFxuICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB3aWR0aCA9IHRoaXMuaHRtbFdyYXBwZXJSZWYubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aFxuICAgICAgICAgICAgY29uc3QgaGVpZ2h0ID0gdGhpcy5odG1sV3JhcHBlclJlZi5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodFxuXG4gICAgICAgICAgICB0aGlzLm5vZGVNb2RlbC5zaXplLnNldCh7IHdpZHRoLCBoZWlnaHQgfSlcbiAgICAgICAgICB9KVxuICAgICAgICApLnN1YnNjcmliZSgpXG5cbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLmFkZChzdWIpXG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZHJhZ2dhYmxlU2VydmljZS5kZXN0cm95KHRoaXMuaG9zdFJlZi5uYXRpdmVFbGVtZW50KVxuICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKClcbiAgfVxuXG4gIHByb3RlY3RlZCBzdGFydENvbm5lY3Rpb24oZXZlbnQ6IE1vdXNlRXZlbnQsIGhhbmRsZTogSGFuZGxlTW9kZWwpIHtcbiAgICAvLyBpZ25vcmUgZHJhZyBieSBzdG9wcGluZyBwcm9wYWdhdGlvblxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG5cbiAgICB0aGlzLmZsb3dTdGF0dXNTZXJ2aWNlLnNldENvbm5lY3Rpb25TdGFydFN0YXR1cyh0aGlzLm5vZGVNb2RlbCwgaGFuZGxlKVxuICB9XG5cbiAgcHJvdGVjdGVkIGVuZENvbm5lY3Rpb24oKSB7XG4gICAgY29uc3Qgc3RhdHVzID0gdGhpcy5mbG93U3RhdHVzU2VydmljZS5zdGF0dXMoKVxuXG4gICAgaWYgKHN0YXR1cy5zdGF0ZSA9PT0gJ2Nvbm5lY3Rpb24tdmFsaWRhdGlvbicpIHtcbiAgICAgIGNvbnN0IHNvdXJjZU5vZGUgPSBzdGF0dXMucGF5bG9hZC5zb3VyY2VOb2RlXG4gICAgICBjb25zdCB0YXJnZXROb2RlID0gdGhpcy5ub2RlTW9kZWxcbiAgICAgIGNvbnN0IHNvdXJjZUhhbmRsZSA9IHN0YXR1cy5wYXlsb2FkLnNvdXJjZUhhbmRsZVxuICAgICAgY29uc3QgdGFyZ2V0SGFuZGxlID0gc3RhdHVzLnBheWxvYWQudGFyZ2V0SGFuZGxlXG5cbiAgICAgIGJhdGNoU3RhdHVzQ2hhbmdlcyhcbiAgICAgICAgLy8gY2FsbCB0byBjcmVhdGUgY29ubmVjdGlvblxuICAgICAgICAoKSA9PiB0aGlzLmZsb3dTdGF0dXNTZXJ2aWNlLnNldENvbm5lY3Rpb25FbmRTdGF0dXMoc291cmNlTm9kZSwgdGFyZ2V0Tm9kZSwgc291cmNlSGFuZGxlLCB0YXJnZXRIYW5kbGUpLFxuICAgICAgICAvLyB3aGVuIGNvbm5lY3Rpb24gY3JlYXRlZCwgd2UgbmVlZCBnbyBiYWNrIHRvIGlkbGUgc3RhdHVzXG4gICAgICAgICgpID0+IHRoaXMuZmxvd1N0YXR1c1NlcnZpY2Uuc2V0SWRsZVN0YXR1cygpXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRPRE8gc3JwXG4gICAqL1xuICBwcm90ZWN0ZWQgdmFsaWRhdGVUYXJnZXRIYW5kbGUodGFyZ2V0SGFuZGxlOiBIYW5kbGVNb2RlbCkge1xuICAgIGNvbnN0IHN0YXR1cyA9IHRoaXMuZmxvd1N0YXR1c1NlcnZpY2Uuc3RhdHVzKClcblxuICAgIGlmIChzdGF0dXMuc3RhdGUgPT09ICdjb25uZWN0aW9uLXN0YXJ0Jykge1xuICAgICAgY29uc3Qgc291cmNlTm9kZSA9IHN0YXR1cy5wYXlsb2FkLnNvdXJjZU5vZGVcbiAgICAgIGNvbnN0IHNvdXJjZUhhbmRsZSA9IHN0YXR1cy5wYXlsb2FkLnNvdXJjZUhhbmRsZVxuICAgICAgY29uc3Qgc291cmNlID0gc291cmNlTm9kZS5ub2RlLmlkXG5cbiAgICAgIGNvbnN0IHRhcmdldE5vZGUgPSB0aGlzLm5vZGVNb2RlbFxuICAgICAgY29uc3QgdGFyZ2V0ID0gdGFyZ2V0Tm9kZS5ub2RlLmlkXG5cbiAgICAgIGNvbnN0IHZhbGlkID0gdGhpcy5mbG93RW50aXRpZXNTZXJ2aWNlLmNvbm5lY3Rpb24oKS52YWxpZGF0b3Ioe1xuICAgICAgICBzb3VyY2UsXG4gICAgICAgIHRhcmdldCxcbiAgICAgICAgc291cmNlSGFuZGxlOiBzb3VyY2VIYW5kbGUucmF3SGFuZGxlLmlkLFxuICAgICAgICB0YXJnZXRIYW5kbGU6IHRhcmdldEhhbmRsZS5yYXdIYW5kbGUuaWRcbiAgICAgIH0pXG5cbiAgICAgIHRhcmdldEhhbmRsZS5zdGF0ZS5zZXQodmFsaWQgPyAndmFsaWQnIDogJ2ludmFsaWQnKVxuXG4gICAgICB0aGlzLmZsb3dTdGF0dXNTZXJ2aWNlLnNldENvbm5lY3Rpb25WYWxpZGF0aW9uU3RhdHVzKHZhbGlkLCBzb3VyY2VOb2RlLCB0YXJnZXROb2RlLCBzb3VyY2VIYW5kbGUsIHRhcmdldEhhbmRsZSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVE9ETyBzcnBcbiAgICovXG4gIHByb3RlY3RlZCByZXNldFZhbGlkYXRlVGFyZ2V0SGFuZGxlKHRhcmdldEhhbmRsZTogSGFuZGxlTW9kZWwpIHtcbiAgICB0YXJnZXRIYW5kbGUuc3RhdGUuc2V0KCdpZGxlJylcblxuICAgIC8vIGRyb3AgYmFjayB0byBzdGFydCBzdGF0dXNcbiAgICBjb25zdCBzdGF0dXMgPSB0aGlzLmZsb3dTdGF0dXNTZXJ2aWNlLnN0YXR1cygpXG4gICAgaWYgKHN0YXR1cy5zdGF0ZSA9PT0gJ2Nvbm5lY3Rpb24tdmFsaWRhdGlvbicpIHtcbiAgICAgIHRoaXMuZmxvd1N0YXR1c1NlcnZpY2Uuc2V0Q29ubmVjdGlvblN0YXJ0U3RhdHVzKHN0YXR1cy5wYXlsb2FkLnNvdXJjZU5vZGUsIHN0YXR1cy5wYXlsb2FkLnNvdXJjZUhhbmRsZSlcbiAgICB9XG4gIH1cblxuICBASW5qZWN0aW9uQ29udGV4dFxuICBwcml2YXRlIHNldEluaXRpYWxIYW5kbGVzKCkge1xuICAgIGlmICh0aGlzLm5vZGVNb2RlbC5ub2RlLnR5cGUgPT09ICdkZWZhdWx0Jykge1xuICAgICAgdGhpcy5oYW5kbGVTZXJ2aWNlLmNyZWF0ZUhhbmRsZShcbiAgICAgICAgbmV3IEhhbmRsZU1vZGVsKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiB0aGlzLm5vZGVNb2RlbC5zb3VyY2VQb3NpdGlvbigpLFxuICAgICAgICAgICAgdHlwZTogJ3NvdXJjZScsXG4gICAgICAgICAgICBwYXJlbnRSZWZlcmVuY2U6IHRoaXMuaHRtbFdyYXBwZXJSZWYubmF0aXZlRWxlbWVudFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGhpcy5ub2RlTW9kZWxcbiAgICAgICAgKSxcbiAgICAgIClcblxuICAgICAgdGhpcy5oYW5kbGVTZXJ2aWNlLmNyZWF0ZUhhbmRsZShcbiAgICAgICAgbmV3IEhhbmRsZU1vZGVsKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiB0aGlzLm5vZGVNb2RlbC50YXJnZXRQb3NpdGlvbigpLFxuICAgICAgICAgICAgdHlwZTogJ3RhcmdldCcsXG4gICAgICAgICAgICBwYXJlbnRSZWZlcmVuY2U6IHRoaXMuaHRtbFdyYXBwZXJSZWYubmF0aXZlRWxlbWVudFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGhpcy5ub2RlTW9kZWxcbiAgICAgICAgKSxcbiAgICAgIClcbiAgICB9XG4gIH1cbn1cbiIsIjxzdmc6Zm9yZWlnbk9iamVjdFxuICAqbmdJZj1cIm5vZGVNb2RlbC5ub2RlLnR5cGUgPT09ICdkZWZhdWx0J1wiXG4gICNub2RlQ29udGVudFxuICB3aWR0aD1cIjEwMFwiXG4gIGhlaWdodD1cIjUwXCJcbj5cbiAgPGRpdiAjaHRtbFdyYXBwZXIgY2xhc3M9XCJkZWZhdWx0LW5vZGVcIiBbaW5uZXJIVE1MXT1cIm5vZGVNb2RlbC5ub2RlLnRleHQgPz8gJydcIj48L2Rpdj5cbjwvc3ZnOmZvcmVpZ25PYmplY3Q+XG5cbjxzdmc6Zm9yZWlnbk9iamVjdFxuICAqbmdJZj1cIm5vZGVNb2RlbC5ub2RlLnR5cGUgPT09ICdodG1sLXRlbXBsYXRlJyAmJiBub2RlSHRtbFRlbXBsYXRlXCJcbiAgW2F0dHIud2lkdGhdPVwibm9kZU1vZGVsLnNpemUoKS53aWR0aFwiXG4gIFthdHRyLmhlaWdodF09XCJub2RlTW9kZWwuc2l6ZSgpLmhlaWdodFwiXG4+XG4gIDxkaXYgI2h0bWxXcmFwcGVyIGNsYXNzPVwid3JhcHBlclwiPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm5vZGVIdG1sVGVtcGxhdGVcIlxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiB7IG5vZGU6IG5vZGVNb2RlbC5ub2RlIH0gfVwiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldEluamVjdG9yXT1cImluamVjdG9yXCJcbiAgICAvPlxuICA8L2Rpdj5cbjwvc3ZnOmZvcmVpZ25PYmplY3Q+XG5cbjxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGhhbmRsZSBvZiBub2RlTW9kZWwuaGFuZGxlcygpXCI+XG4gIDxzdmc6Y2lyY2xlXG4gICAgKm5nSWY9XCIhaGFuZGxlLnRlbXBsYXRlXCJcbiAgICBbYXR0ci5jeF09XCJoYW5kbGUub2Zmc2V0KCkueFwiXG4gICAgW2F0dHIuY3ldPVwiaGFuZGxlLm9mZnNldCgpLnlcIlxuICAgIFthdHRyLnN0cm9rZS13aWR0aF09XCJoYW5kbGUuc3Ryb2tlV2lkdGhcIlxuICAgIHI9XCI1XCJcbiAgICBzdHJva2U9XCJ3aGl0ZVwiXG4gICAgZmlsbD1cImJsYWNrXCJcbiAgICAobW91c2Vkb3duKT1cImhhbmRsZS5yYXdIYW5kbGUudHlwZSA9PT0gJ3NvdXJjZScgPyBzdGFydENvbm5lY3Rpb24oJGV2ZW50LCBoYW5kbGUpIDogbnVsbFwiXG4gICAgKG1vdXNldXApPVwiaGFuZGxlLnJhd0hhbmRsZS50eXBlID09PSAndGFyZ2V0JyA/IGVuZENvbm5lY3Rpb24oKSA6IG51bGxcIlxuICAvPlxuXG4gIDxzdmc6Z1xuICAgICpuZ0lmPVwiaGFuZGxlLnRlbXBsYXRlXCJcbiAgICBbaGFuZGxlU2l6ZUNvbnRyb2xsZXJdPVwiaGFuZGxlXCJcbiAgICAobW91c2Vkb3duKT1cImhhbmRsZS5yYXdIYW5kbGUudHlwZSA9PT0gJ3NvdXJjZScgPyBzdGFydENvbm5lY3Rpb24oJGV2ZW50LCBoYW5kbGUpIDogbnVsbFwiXG4gICAgKG1vdXNldXApPVwiaGFuZGxlLnJhd0hhbmRsZS50eXBlID09PSAndGFyZ2V0JyA/IGVuZENvbm5lY3Rpb24oKSA6IG51bGxcIlxuICA+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImhhbmRsZS50ZW1wbGF0ZTsgY29udGV4dDogaGFuZGxlLnRlbXBsYXRlQ29udGV4dFwiIC8+XG4gIDwvc3ZnOmc+XG5cbiAgPHN2ZzpjaXJjbGVcbiAgICAqbmdJZj1cImhhbmRsZS5yYXdIYW5kbGUudHlwZSA9PT0gJ3RhcmdldCcgJiYgc2hvd01hZ25ldCgpXCJcbiAgICBjbGFzcz1cIm1hZ25ldFwiXG4gICAgW2F0dHIucl09XCJub2RlTW9kZWwubWFnbmV0UmFkaXVzXCJcbiAgICBbYXR0ci5jeF09XCJoYW5kbGUub2Zmc2V0KCkueFwiXG4gICAgW2F0dHIuY3ldPVwiaGFuZGxlLm9mZnNldCgpLnlcIlxuICAgIChtb3VzZXVwKT1cImVuZENvbm5lY3Rpb24oKTsgcmVzZXRWYWxpZGF0ZVRhcmdldEhhbmRsZShoYW5kbGUpXCJcbiAgICAobW91c2VvdmVyKT1cInZhbGlkYXRlVGFyZ2V0SGFuZGxlKGhhbmRsZSlcIlxuICAgIChtb3VzZW91dCk9XCJyZXNldFZhbGlkYXRlVGFyZ2V0SGFuZGxlKGhhbmRsZSlcIlxuICAvPlxuPC9uZy1jb250YWluZXI+XG5cbiJdfQ==
@@ -137,7 +137,7 @@ export class VflowComponent {
137
137
  * Edges to render
138
138
  */
139
139
  set edges(newEdges) {
140
- const newModels = ReferenceKeeper.edges(newEdges, this.flowEntitiesService.edges());
140
+ const newModels = runInInjectionContext(this.injector, () => ReferenceKeeper.edges(newEdges, this.flowEntitiesService.edges()));
141
141
  // quick and dirty binding nodes to edges
142
142
  addNodesToEdges(this.nodeModels, newModels);
143
143
  this.flowEntitiesService.edges.set(newModels);
@@ -176,12 +176,18 @@ export class VflowComponent {
176
176
  getNode(id) {
177
177
  return this.flowEntitiesService.getNode(id)?.node;
178
178
  }
179
+ /**
180
+ * Sync method to get detached edges
181
+ */
182
+ getDetachedEdges() {
183
+ return this.flowEntitiesService.getDetachedEdges().map(e => e.edge);
184
+ }
179
185
  // #endregion
180
186
  trackNodes(idx, { node }) {
181
- return node.id;
187
+ return node;
182
188
  }
183
189
  trackEdges(idx, { edge }) {
184
- return edge.id;
190
+ return edge;
185
191
  }
186
192
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: VflowComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
187
193
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "16.2.12", type: VflowComponent, selector: "vflow", inputs: { view: "view", minZoom: "minZoom", maxZoom: "maxZoom", handlePositions: "handlePositions", background: "background", connection: ["connection", "connection", (settings) => new ConnectionModel(settings)], nodes: "nodes", edges: "edges" }, providers: [
@@ -243,4 +249,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
243
249
  function bindFlowToNodes(flow, nodes) {
244
250
  nodes.forEach(n => n.bindFlow(flow));
245
251
  }
246
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmZsb3cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2NvbXBvbmVudHMvdmZsb3cvdmZsb3cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2NvbXBvbmVudHMvdmZsb3cvdmZsb3cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFvQix1QkFBdUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFnQixRQUFRLEVBQUUsS0FBSyxFQUE0QyxTQUFTLEVBQW9CLE1BQU0sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV4TyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM3RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUVwRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbEUsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUdwRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsOEJBQThCLEVBQUUscUJBQXFCLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUVwSyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHNUIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdkUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDakcsT0FBTyxF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RUFBRSxLQUFrQjtJQUMxRCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0FBQ3RDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlckNvbnRlbnRJbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBDb250ZW50Q2hpbGQsIEV2ZW50RW1pdHRlciwgSW5qZWN0b3IsIElucHV0LCBPbkNoYW5nZXMsIE91dHB1dCwgU2lnbmFsLCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGQsIGNvbXB1dGVkLCBlZmZlY3QsIGluamVjdCwgcnVuSW5JbmplY3Rpb25Db250ZXh0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOb2RlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9ub2RlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBNYXBDb250ZXh0RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9tYXAtY29udGV4dC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRHJhZ2dhYmxlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RyYWdnYWJsZS5zZXJ2aWNlJztcbmltcG9ydCB7IE5vZGVNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9ub2RlLm1vZGVsJztcbmltcG9ydCB7IFZpZXdwb3J0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3ZpZXdwb3J0LnNlcnZpY2UnO1xuaW1wb3J0IHsgdG9PYnNlcnZhYmxlLCB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEVkZ2UgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2VkZ2UuaW50ZXJmYWNlJztcbmltcG9ydCB7IEVkZ2VNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9lZGdlLm1vZGVsJztcbmltcG9ydCB7IENvbm5lY3Rpb25UZW1wbGF0ZURpcmVjdGl2ZSwgRWRnZUxhYmVsSHRtbFRlbXBsYXRlRGlyZWN0aXZlLCBFZGdlVGVtcGxhdGVEaXJlY3RpdmUsIE5vZGVIdG1sVGVtcGxhdGVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL3RlbXBsYXRlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBIYW5kbGVQb3NpdGlvbnMgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2hhbmRsZS1wb3NpdGlvbnMuaW50ZXJmYWNlJztcbmltcG9ydCB7IGFkZE5vZGVzVG9FZGdlcyB9IGZyb20gJy4uLy4uL3V0aWxzL2FkZC1ub2Rlcy10by1lZGdlcyc7XG5pbXBvcnQgeyBGbG93TW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZmxvdy5tb2RlbCc7XG5pbXBvcnQgeyBza2lwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBQb2ludCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvcG9pbnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IFZpZXdwb3J0U3RhdGUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3ZpZXdwb3J0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBGbG93U3RhdHVzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Zsb3ctc3RhdHVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29ubmVjdGlvbkNvbnRyb2xsZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL2Nvbm5lY3Rpb24tY29udHJvbGxlci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRmxvd0VudGl0aWVzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Zsb3ctZW50aXRpZXMuc2VydmljZSc7XG5pbXBvcnQgeyBDb25uZWN0aW9uU2V0dGluZ3MgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2Nvbm5lY3Rpb24tc2V0dGluZ3MuaW50ZXJmYWNlJztcbmltcG9ydCB7IENvbm5lY3Rpb25Nb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9jb25uZWN0aW9uLm1vZGVsJztcbmltcG9ydCB7IFJlZmVyZW5jZUtlZXBlciB9IGZyb20gJy4uLy4uL3V0aWxzL3JlZmVyZW5jZS1rZWVwZXInO1xuaW1wb3J0IHsgTm9kZXNDaGFuZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm9kZS1jaGFuZ2VzLnNlcnZpY2UnO1xuaW1wb3J0IHsgRWRnZUNoYW5nZXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZWRnZS1jaGFuZ2VzLnNlcnZpY2UnO1xuaW1wb3J0IHsgTm9kZUNoYW5nZSB9IGZyb20gJy4uLy4uL3R5cGVzL25vZGUtY2hhbmdlLnR5cGUnO1xuaW1wb3J0IHsgQ2hhbmdlc0NvbnRyb2xsZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL2NoYW5nZXMtY29udHJvbGxlci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRWRnZUNoYW5nZSB9IGZyb20gJy4uLy4uL3R5cGVzL2VkZ2UtY2hhbmdlLnR5cGUnO1xuXG5jb25zdCBjb25uZWN0aW9uQ29udHJvbGxlckhvc3REaXJlY3RpdmUgPSB7XG4gIGRpcmVjdGl2ZTogQ29ubmVjdGlvbkNvbnRyb2xsZXJEaXJlY3RpdmUsXG4gIG91dHB1dHM6IFsnb25Db25uZWN0J11cbn1cblxuY29uc3QgY2hhbmdlc0NvbnRyb2xsZXJIb3N0RGlyZWN0aXZlID0ge1xuICBkaXJlY3RpdmU6IENoYW5nZXNDb250cm9sbGVyRGlyZWN0aXZlLFxuICBvdXRwdXRzOiBbJ29uTm9kZXNDaGFuZ2UnLCAnb25FZGdlc0NoYW5nZSddXG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZmbG93JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3ZmbG93LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdmZsb3cuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW1xuICAgIERyYWdnYWJsZVNlcnZpY2UsXG4gICAgVmlld3BvcnRTZXJ2aWNlLFxuICAgIEZsb3dTdGF0dXNTZXJ2aWNlLFxuICAgIEZsb3dFbnRpdGllc1NlcnZpY2UsXG4gICAgTm9kZXNDaGFuZ2VTZXJ2aWNlLFxuICAgIEVkZ2VDaGFuZ2VzU2VydmljZVxuICBdLFxuICBob3N0RGlyZWN0aXZlczogW1xuICAgIGNvbm5lY3Rpb25Db250cm9sbGVySG9zdERpcmVjdGl2ZSxcbiAgICBjaGFuZ2VzQ29udHJvbGxlckhvc3REaXJlY3RpdmVcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBWZmxvd0NvbXBvbmVudCB7XG4gIC8vICNyZWdpb24gRElcbiAgcHJpdmF0ZSB2aWV3cG9ydFNlcnZpY2UgPSBpbmplY3QoVmlld3BvcnRTZXJ2aWNlKVxuICBwcml2YXRlIGZsb3dFbnRpdGllc1NlcnZpY2UgPSBpbmplY3QoRmxvd0VudGl0aWVzU2VydmljZSlcbiAgcHJpdmF0ZSBub2Rlc0NoYW5nZVNlcnZpY2UgPSBpbmplY3QoTm9kZXNDaGFuZ2VTZXJ2aWNlKVxuICBwcml2YXRlIGVkZ2VzQ2hhbmdlU2VydmljZSA9IGluamVjdChFZGdlQ2hhbmdlc1NlcnZpY2UpXG4gIHByaXZhdGUgaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpXG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIFNFVFRJTkdTXG5cbiAgLyoqXG4gICAqIFNpemUgZm9yIGZsb3cgdmlld1xuICAgKlxuICAgKiBhY2NlcHRzXG4gICAqIC0gYWJzb2x1dGUgc2l6ZSBpbiBmb3JtYXQgW3dpZHRoLCBoZWlnaHRdIG9yXG4gICAqIC0gJ2F1dG8nIHRvIGNvbXB1dGUgc2l6ZSBiYXNlZCBvbiBwYXJlbnQgZWxlbWVudCBzaXplXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHZpZXcodmlldzogW251bWJlciwgbnVtYmVyXSB8ICdhdXRvJykge1xuICAgIHRoaXMuZmxvd01vZGVsLnZpZXcuc2V0KHZpZXcpXG4gIH1cblxuICAvKipcbiAgICogTWluaW11bSB6b29tIHZhbHVlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgbWluWm9vbSA9IDAuNVxuXG4gIC8qKlxuICAgKiBNYXhpbXVtIHpvb20gdmFsdWVcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBtYXhab29tID0gM1xuXG4gIC8qKlxuICAgKiBPYmplY3QgdGhhdCBjb250cm9scyBmbG93IGRpcmVjdGlvbi5cbiAgICpcbiAgICogRm9yIGV4YW1wbGUsIGlmIHlvdSB3YW50IHRvIGFyY2hpZXZlIHJpZ2h0IHRvIGxlZnQgZGlyZWN0aW9uXG4gICAqIHRoZW4geW91IG5lZWQgdG8gcGFzcyB0aGVzZSBwb3NpdGlvbnMgeyBzb3VyY2U6ICdsZWZ0JywgdGFyZ2V0OiAncmlnaHQnIH1cbiAgICpcbiAgICogQGRlcHJlY2F0ZWRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgaGFuZGxlUG9zaXRpb25zKGhhbmRsZVBvc2l0aW9uczogSGFuZGxlUG9zaXRpb25zKSB7XG4gICAgdGhpcy5mbG93TW9kZWwuaGFuZGxlUG9zaXRpb25zLnNldChoYW5kbGVQb3NpdGlvbnMpXG4gIH1cblxuICAvKipcbiAgICogQmFja2dyb3VuZCBjb2xvciBmb3IgZmxvd1xuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGJhY2tncm91bmQ6IHN0cmluZyA9ICcjRkZGRkZGJ1xuXG4gIC8qKlxuICAgKiBTZXR0aW5ncyBmb3IgY29ubmVjdGlvbiAoaXQgcmVuZGVycyB3aGVuIHVzZXIgdHJpZXMgdG8gY3JlYXRlIGVkZ2UgYmV0d2VlbiBub2RlcylcbiAgICpcbiAgICogWW91IG5lZWQgdG8gcGFzcyBgQ29ubmVjdGlvblNldHRpbmdzYCBpbiB0aGlzIGlucHV0LlxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiAoc2V0dGluZ3M6IENvbm5lY3Rpb25TZXR0aW5ncykgPT4gbmV3IENvbm5lY3Rpb25Nb2RlbChzZXR0aW5ncykgfSlcbiAgcHVibGljIHNldCBjb25uZWN0aW9uKGNvbm5lY3Rpb246IENvbm5lY3Rpb25Nb2RlbCkgeyB0aGlzLmZsb3dFbnRpdGllc1NlcnZpY2UuY29ubmVjdGlvbi5zZXQoY29ubmVjdGlvbikgfVxuXG4gIHB1YmxpYyBnZXQgY29ubmVjdGlvbigpIHsgcmV0dXJuIHRoaXMuZmxvd0VudGl0aWVzU2VydmljZS5jb25uZWN0aW9uKCkgfVxuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBNQUlOX0lOUFVUU1xuICAvKipcbiAgICogTm9kZXMgdG8gcmVuZGVyXG4gICAqL1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxuICBwdWJsaWMgc2V0IG5vZGVzKG5ld05vZGVzOiBOb2RlW10pIHtcbiAgICBjb25zdCBuZXdNb2RlbHMgPSBydW5JbkluamVjdGlvbkNvbnRleHQodGhpcy5pbmplY3RvcixcbiAgICAgICgpID0+IFJlZmVyZW5jZUtlZXBlci5ub2RlcyhuZXdOb2RlcywgdGhpcy5mbG93RW50aXRpZXNTZXJ2aWNlLm5vZGVzKCkpXG4gICAgKVxuXG4gICAgLy8gVE9ETyBiZXR0ZXIgdG8gc29sdmUgdGhpcyBieSBESVxuICAgIGJpbmRGbG93VG9Ob2Rlcyh0aGlzLmZsb3dNb2RlbCwgbmV3TW9kZWxzKVxuXG4gICAgLy8gcXVpY2sgYW5kIGRpcnR5IGJpbmRpbmcgbm9kZXMgdG8gZWRnZXNcbiAgICBhZGROb2Rlc1RvRWRnZXMobmV3TW9kZWxzLCB0aGlzLmZsb3dFbnRpdGllc1NlcnZpY2UuZWRnZXMoKSlcblxuICAgIHRoaXMuZmxvd0VudGl0aWVzU2VydmljZS5ub2Rlcy5zZXQobmV3TW9kZWxzKVxuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBub2RlTW9kZWxzKCkgeyByZXR1cm4gdGhpcy5mbG93RW50aXRpZXNTZXJ2aWNlLm5vZGVzKCkgfVxuXG4gIC8qKlxuICAgKiBFZGdlcyB0byByZW5kZXJcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZWRnZXMobmV3RWRnZXM6IEVkZ2VbXSkge1xuICAgIGNvbnN0IG5ld01vZGVscyA9IFJlZmVyZW5jZUtlZXBlci5lZGdlcyhuZXdFZGdlcywgdGhpcy5mbG93RW50aXRpZXNTZXJ2aWNlLmVkZ2VzKCkpXG5cbiAgICAvLyBxdWljayBhbmQgZGlydHkgYmluZGluZyBub2RlcyB0byBlZGdlc1xuICAgIGFkZE5vZGVzVG9FZGdlcyh0aGlzLm5vZGVNb2RlbHMsIG5ld01vZGVscylcblxuICAgIHRoaXMuZmxvd0VudGl0aWVzU2VydmljZS5lZGdlcy5zZXQobmV3TW9kZWxzKVxuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBlZGdlTW9kZWxzKCkgeyByZXR1cm4gdGhpcy5mbG93RW50aXRpZXNTZXJ2aWNlLnZhbGlkRWRnZXMoKSB9XG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIFRFTVBMQVRFU1xuICBAQ29udGVudENoaWxkKE5vZGVIdG1sVGVtcGxhdGVEaXJlY3RpdmUpXG4gIHByb3RlY3RlZCBub2RlSHRtbERpcmVjdGl2ZT86IE5vZGVIdG1sVGVtcGxhdGVEaXJlY3RpdmVcblxuICBAQ29udGVudENoaWxkKEVkZ2VUZW1wbGF0ZURpcmVjdGl2ZSlcbiAgcHJvdGVjdGVkIGVkZ2VUZW1wbGF0ZURpcmVjdGl2ZT86IEVkZ2VUZW1wbGF0ZURpcmVjdGl2ZVxuXG4gIEBDb250ZW50Q2hpbGQoRWRnZUxhYmVsSHRtbFRlbXBsYXRlRGlyZWN0aXZlKVxuICBwcm90ZWN0ZWQgZWRnZUxhYmVsSHRtbERpcmVjdGl2ZT86IEVkZ2VMYWJlbEh0bWxUZW1wbGF0ZURpcmVjdGl2ZVxuXG4gIEBDb250ZW50Q2hpbGQoQ29ubmVjdGlvblRlbXBsYXRlRGlyZWN0aXZlKVxuICBwcm90ZWN0ZWQgY29ubmVjdGlvblRlbXBsYXRlRGlyZWN0aXZlPzogQ29ubmVjdGlvblRlbXBsYXRlRGlyZWN0aXZlXG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIERJUkVDVElWRVNcbiAgQFZpZXdDaGlsZChNYXBDb250ZXh0RGlyZWN0aXZlKVxuICBwcm90ZWN0ZWQgbWFwQ29udGV4dCE6IE1hcENvbnRleHREaXJlY3RpdmVcbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gU0lHTkFMX0FQSVxuICAvKipcbiAgICogU2lnbmFsIGZvciByZWFkaW5nIHZpZXdwb3J0IGNoYW5nZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHZpZXdwb3J0ID0gdGhpcy52aWV3cG9ydFNlcnZpY2UucmVhZGFibGVWaWV3cG9ydC5hc1JlYWRvbmx5KClcblxuICAvKipcbiAgICogU2lnbmFsIGZvciByZWFkaW5nIG5vZGVzIGNoYW5nZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG5vZGVzQ2hhbmdlID1cbiAgICB0b1NpZ25hbCh0aGlzLm5vZGVzQ2hhbmdlU2VydmljZS5jaGFuZ2VzJCwgeyBpbml0aWFsVmFsdWU6IFtdIGFzIE5vZGVDaGFuZ2VbXSB9KVxuXG4gIC8qKlxuICAgKiBTaWduYWwgdG8gcmVhZGluZyBlZGdlcyBjaGFuZ2VcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBlZGdlc0NoYW5nZSA9XG4gICAgdG9TaWduYWwodGhpcy5lZGdlc0NoYW5nZVNlcnZpY2UuY2hhbmdlcyQsIHsgaW5pdGlhbFZhbHVlOiBbXSBhcyBFZGdlQ2hhbmdlW10gfSlcbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gUlhfQVBJXG4gIC8qKlxuICAgKiBPYnNlcnZhYmxlIHdpdGggdmlld3BvcnQgY2hhbmdlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdmlld3BvcnRDaGFuZ2UkID0gdG9PYnNlcnZhYmxlKHRoaXMudmlld3BvcnRTZXJ2aWNlLnJlYWRhYmxlVmlld3BvcnQpXG4gICAgLnBpcGUoc2tpcCgxKSkgLy8gc2tpcCBkZWZhdWx0IHZhbHVlIHRoYXQgc2V0IGJ5IHNpZ25hbFxuXG4gIC8qKlxuICAgKiBPYnNlcnZhYmxlIHdpdGggbm9kZXMgY2hhbmdlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbm9kZXNDaGFuZ2UkID0gdGhpcy5ub2Rlc0NoYW5nZVNlcnZpY2UuY2hhbmdlcyRcblxuICAvKipcbiAgICogT2JzZXJ2YWJsZSB3aXRoIG5vZGVzIGNoYW5nZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGVkZ2VzQ2hhbmdlJCA9IHRoaXMuZWRnZXNDaGFuZ2VTZXJ2aWNlLmNoYW5nZXMkXG4gIC8vICNlbmRyZWdpb25cblxuICAvLyBUT0RPOiBwcm9iYWJseSBiZXR0ZXIgdG8gbWFrZSBpdCBpbmplY3RhYmxlXG4gIHByb3RlY3RlZCBmbG93TW9kZWwgPSBuZXcgRmxvd01vZGVsKClcblxuICBwcm90ZWN0ZWQgbWFya2VycyA9IHRoaXMuZmxvd0VudGl0aWVzU2VydmljZS5tYXJrZXJzXG5cbiAgLy8gI3JlZ2lvbiBNRVRIT0RTX0FQSVxuICAvKipcbiAgICogQ2hhbmdlIHZpZXdwb3J0IHRvIHNwZWNpZmllZCBzdGF0ZVxuICAgKlxuICAgKiBAcGFyYW0gdmlld3BvcnQgdmlld3BvcnQgc3RhdGVcbiAgICovXG4gIHB1YmxpYyB2aWV3cG9ydFRvKHZpZXdwb3J0OiBWaWV3cG9ydFN0YXRlKTogdm9pZCB7XG4gICAgdGhpcy52aWV3cG9ydFNlcnZpY2Uud3JpdGFibGVWaWV3cG9ydC5zZXQoeyBjaGFuZ2VUeXBlOiAnYWJzb2x1dGUnLCBzdGF0ZTogdmlld3BvcnQgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGFuZ2Ugem9vbVxuICAgKlxuICAgKiBAcGFyYW0gem9vbSB6b29tIHZhbHVlXG4gICAqL1xuICBwdWJsaWMgem9vbVRvKHpvb206IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMudmlld3BvcnRTZXJ2aWNlLndyaXRhYmxlVmlld3BvcnQuc2V0KHsgY2hhbmdlVHlwZTogJ2Fic29sdXRlJywgc3RhdGU6IHsgem9vbSB9IH0pXG4gIH1cblxuICAvKipcbiAgICogTW92ZSB0byBzcGVjaWZpZWQgY29vcmRpbmF0ZVxuICAgKlxuICAgKiBAcGFyYW0gcG9pbnQgcG9pbnQgd2hlcmUgdG8gbW92ZVxuICAgKi9cbiAgcHVibGljIHBhblRvKHBvaW50OiBQb2ludCk6IHZvaWQge1xuICAgIHRoaXMudmlld3BvcnRTZXJ2aWNlLndyaXRhYmxlVmlld3BvcnQuc2V0KHsgY2hhbmdlVHlwZTogJ2Fic29sdXRlJywgc3RhdGU6IHBvaW50IH0pXG4gIH1cblxuICAvKipcbiAgICogR2V0IG5vZGUgYnkgaWRcbiAgICpcbiAgICogQHBhcmFtIGlkIG5vZGUgaWRcbiAgICovXG4gIHB1YmxpYyBnZXROb2RlPFQgPSB1bmtub3duPihpZDogc3RyaW5nKTogTm9kZTxUPiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZmxvd0VudGl0aWVzU2VydmljZS5nZXROb2RlPFQ+KGlkKT8ubm9kZVxuICB9XG4gIC8vICNlbmRyZWdpb25cblxuICBwcm90ZWN0ZWQgdHJhY2tOb2RlcyhpZHg6IG51bWJlciwgeyBub2RlIH06IE5vZGVNb2RlbCkge1xuICAgIHJldHVybiBub2RlLmlkXG4gIH1cblxuICBwcm90ZWN0ZWQgdHJhY2tFZGdlcyhpZHg6IG51bWJlciwgeyBlZGdlIH06IEVkZ2VNb2RlbCkge1xuICAgIHJldHVybiBlZGdlLmlkXG4gIH1cbn1cblxuZnVuY3Rpb24gYmluZEZsb3dUb05vZGVzKGZsb3c6IEZsb3dNb2RlbCwgbm9kZXM6IE5vZGVNb2RlbFtdKSB7XG4gIG5vZGVzLmZvckVhY2gobiA9PiBuLmJpbmRGbG93KGZsb3cpKVxufVxuXG4iLCI8c3ZnOnN2Z1xuICByb290U3ZnUmVmXG4gIHJvb3RTdmdDb250ZXh0XG4gIGNsYXNzPVwicm9vdC1zdmdcIlxuICAjZmxvd1xuICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImJhY2tncm91bmRcIlxuICBbYXR0ci53aWR0aF09XCJmbG93TW9kZWwuZmxvd1dpZHRoKClcIlxuICBbYXR0ci5oZWlnaHRdPVwiZmxvd01vZGVsLmZsb3dIZWlnaHQoKVwiXG4+XG4gIDxkZWZzIFttYXJrZXJzXT1cIm1hcmtlcnMoKVwiIGZsb3dEZWZzIC8+XG5cbiAgPHN2ZzpnXG4gICAgbWFwQ29udGV4dFxuICAgIHNwYWNlUG9pbnRDb250ZXh0XG4gICAgW21pblpvb21dPVwibWluWm9vbVwiXG4gICAgW21heFpvb21dPVwibWF4Wm9vbVwiXG4gID5cbiAgICA8IS0tIENvbm5lY3Rpb24gLS0+XG4gICAgPHN2ZzpnXG4gICAgICBjb25uZWN0aW9uXG4gICAgICBbbW9kZWxdPVwiY29ubmVjdGlvblwiXG4gICAgICBbdGVtcGxhdGVdPVwiY29ubmVjdGlvblRlbXBsYXRlRGlyZWN0aXZlPy50ZW1wbGF0ZVJlZlwiXG4gICAgLz5cblxuICAgIDwhLS0gRWRnZXMgIC0tPlxuICAgIDxzdmc6Z1xuICAgICAgKm5nRm9yPVwibGV0IG1vZGVsIG9mIGVkZ2VNb2RlbHM7IHRyYWNrQnk6IHRyYWNrRWRnZXNcIlxuICAgICAgZWRnZVxuICAgICAgW21vZGVsXT1cIm1vZGVsXCJcbiAgICAgIFtlZGdlVGVtcGxhdGVdPVwiZWRnZVRlbXBsYXRlRGlyZWN0aXZlPy50ZW1wbGF0ZVJlZlwiXG4gICAgICBbZWRnZUxhYmVsSHRtbFRlbXBsYXRlXT1cImVkZ2VMYWJlbEh0bWxEaXJlY3RpdmU/LnRlbXBsYXRlUmVmXCJcbiAgICAvPlxuXG4gICAgPCEtLSBOb2RlcyAtLT5cbiAgICA8c3ZnOmdcbiAgICAgICpuZ0Zvcj1cImxldCBtb2RlbCBvZiBub2RlTW9kZWxzOyB0cmFja0J5OiB0cmFja05vZGVzXCJcbiAgICAgIG5vZGVcbiAgICAgIFtub2RlTW9kZWxdPVwibW9kZWxcIlxuICAgICAgW25vZGVIdG1sVGVtcGxhdGVdPVwibm9kZUh0bWxEaXJlY3RpdmU/LnRlbXBsYXRlUmVmXCJcbiAgICAgIFthdHRyLnRyYW5zZm9ybV09XCJtb2RlbC5wb2ludFRyYW5zZm9ybSgpXCJcbiAgICAvPlxuICA8L3N2ZzpnPlxuXG48L3N2Zzpzdmc+XG4iXX0=
252
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmZsb3cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2NvbXBvbmVudHMvdmZsb3cvdmZsb3cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2NvbXBvbmVudHMvdmZsb3cvdmZsb3cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFvQix1QkFBdUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFnQixRQUFRLEVBQUUsS0FBSyxFQUE0QyxTQUFTLEVBQW9CLE1BQU0sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV4TyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM3RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUVwRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbEUsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUdwRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsOEJBQThCLEVBQUUscUJBQXFCLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUVwSyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHNUIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdkUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDakcsT0FBTyxF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cUI7c0JBRDlCLFlBQVk7dUJBQUMscUJBQXFCO2dCQUl6QixzQkFBc0I7c0JBRC9CLFlBQVk7dUJBQUMsOEJBQThCO2dCQUlsQywyQkFBMkI7c0JBRHBDLFlBQVk7dUJBQUMsMkJBQTJCO2dCQU0vQixVQUFVO3NCQURuQixTQUFTO3VCQUFDLG1CQUFtQjs7QUFvR2hDLFNBQVMsZUFBZSxDQUFDLElBQWUsRUFBRSxLQUFrQjtJQUMxRCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0FBQ3RDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlckNvbnRlbnRJbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBDb250ZW50Q2hpbGQsIEV2ZW50RW1pdHRlciwgSW5qZWN0b3IsIElucHV0LCBPbkNoYW5nZXMsIE91dHB1dCwgU2lnbmFsLCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGQsIGNvbXB1dGVkLCBlZmZlY3QsIGluamVjdCwgcnVuSW5JbmplY3Rpb25Db250ZXh0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOb2RlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9ub2RlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBNYXBDb250ZXh0RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9tYXAtY29udGV4dC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRHJhZ2dhYmxlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RyYWdnYWJsZS5zZXJ2aWNlJztcbmltcG9ydCB7IE5vZGVNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9ub2RlLm1vZGVsJztcbmltcG9ydCB7IFZpZXdwb3J0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3ZpZXdwb3J0LnNlcnZpY2UnO1xuaW1wb3J0IHsgdG9PYnNlcnZhYmxlLCB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEVkZ2UgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2VkZ2UuaW50ZXJmYWNlJztcbmltcG9ydCB7IEVkZ2VNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9lZGdlLm1vZGVsJztcbmltcG9ydCB7IENvbm5lY3Rpb25UZW1wbGF0ZURpcmVjdGl2ZSwgRWRnZUxhYmVsSHRtbFRlbXBsYXRlRGlyZWN0aXZlLCBFZGdlVGVtcGxhdGVEaXJlY3RpdmUsIE5vZGVIdG1sVGVtcGxhdGVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL3RlbXBsYXRlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBIYW5kbGVQb3NpdGlvbnMgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2hhbmRsZS1wb3NpdGlvbnMuaW50ZXJmYWNlJztcbmltcG9ydCB7IGFkZE5vZGVzVG9FZGdlcyB9IGZyb20gJy4uLy4uL3V0aWxzL2FkZC1ub2Rlcy10by1lZGdlcyc7XG5pbXBvcnQgeyBGbG93TW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZmxvdy5tb2RlbCc7XG5pbXBvcnQgeyBza2lwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBQb2ludCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvcG9pbnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IFZpZXdwb3J0U3RhdGUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3ZpZXdwb3J0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBGbG93U3RhdHVzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Zsb3ctc3RhdHVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29ubmVjdGlvbkNvbnRyb2xsZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL2Nvbm5lY3Rpb24tY29udHJvbGxlci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRmxvd0VudGl0aWVzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Zsb3ctZW50aXRpZXMuc2VydmljZSc7XG5pbXBvcnQgeyBDb25uZWN0aW9uU2V0dGluZ3MgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2Nvbm5lY3Rpb24tc2V0dGluZ3MuaW50ZXJmYWNlJztcbmltcG9ydCB7IENvbm5lY3Rpb25Nb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9jb25uZWN0aW9uLm1vZGVsJztcbmltcG9ydCB7IFJlZmVyZW5jZUtlZXBlciB9IGZyb20gJy4uLy4uL3V0aWxzL3JlZmVyZW5jZS1rZWVwZXInO1xuaW1wb3J0IHsgTm9kZXNDaGFuZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm9kZS1jaGFuZ2VzLnNlcnZpY2UnO1xuaW1wb3J0IHsgRWRnZUNoYW5nZXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZWRnZS1jaGFuZ2VzLnNlcnZpY2UnO1xuaW1wb3J0IHsgTm9kZUNoYW5nZSB9IGZyb20gJy4uLy4uL3R5cGVzL25vZGUtY2hhbmdlLnR5cGUnO1xuaW1wb3J0IHsgQ2hhbmdlc0NvbnRyb2xsZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL2NoYW5nZXMtY29udHJvbGxlci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRWRnZUNoYW5nZSB9IGZyb20gJy4uLy4uL3R5cGVzL2VkZ2UtY2hhbmdlLnR5cGUnO1xuXG5jb25zdCBjb25uZWN0aW9uQ29udHJvbGxlckhvc3REaXJlY3RpdmUgPSB7XG4gIGRpcmVjdGl2ZTogQ29ubmVjdGlvbkNvbnRyb2xsZXJEaXJlY3RpdmUsXG4gIG91dHB1dHM6IFsnb25Db25uZWN0J11cbn1cblxuY29uc3QgY2hhbmdlc0NvbnRyb2xsZXJIb3N0RGlyZWN0aXZlID0ge1xuICBkaXJlY3RpdmU6IENoYW5nZXNDb250cm9sbGVyRGlyZWN0aXZlLFxuICBvdXRwdXRzOiBbJ29uTm9kZXNDaGFuZ2UnLCAnb25FZGdlc0NoYW5nZSddXG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZmbG93JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3ZmbG93LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdmZsb3cuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW1xuICAgIERyYWdnYWJsZVNlcnZpY2UsXG4gICAgVmlld3BvcnRTZXJ2aWNlLFxuICAgIEZsb3dTdGF0dXNTZXJ2aWNlLFxuICAgIEZsb3dFbnRpdGllc1NlcnZpY2UsXG4gICAgTm9kZXNDaGFuZ2VTZXJ2aWNlLFxuICAgIEVkZ2VDaGFuZ2VzU2VydmljZVxuICBdLFxuICBob3N0RGlyZWN0aXZlczogW1xuICAgIGNvbm5lY3Rpb25Db250cm9sbGVySG9zdERpcmVjdGl2ZSxcbiAgICBjaGFuZ2VzQ29udHJvbGxlckhvc3REaXJlY3RpdmVcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBWZmxvd0NvbXBvbmVudCB7XG4gIC8vICNyZWdpb24gRElcbiAgcHJpdmF0ZSB2aWV3cG9ydFNlcnZpY2UgPSBpbmplY3QoVmlld3BvcnRTZXJ2aWNlKVxuICBwcml2YXRlIGZsb3dFbnRpdGllc1NlcnZpY2UgPSBpbmplY3QoRmxvd0VudGl0aWVzU2VydmljZSlcbiAgcHJpdmF0ZSBub2Rlc0NoYW5nZVNlcnZpY2UgPSBpbmplY3QoTm9kZXNDaGFuZ2VTZXJ2aWNlKVxuICBwcml2YXRlIGVkZ2VzQ2hhbmdlU2VydmljZSA9IGluamVjdChFZGdlQ2hhbmdlc1NlcnZpY2UpXG4gIHByaXZhdGUgaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpXG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIFNFVFRJTkdTXG5cbiAgLyoqXG4gICAqIFNpemUgZm9yIGZsb3cgdmlld1xuICAgKlxuICAgKiBhY2NlcHRzXG4gICAqIC0gYWJzb2x1dGUgc2l6ZSBpbiBmb3JtYXQgW3dpZHRoLCBoZWlnaHRdIG9yXG4gICAqIC0gJ2F1dG8nIHRvIGNvbXB1dGUgc2l6ZSBiYXNlZCBvbiBwYXJlbnQgZWxlbWVudCBzaXplXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHZpZXcodmlldzogW251bWJlciwgbnVtYmVyXSB8ICdhdXRvJykge1xuICAgIHRoaXMuZmxvd01vZGVsLnZpZXcuc2V0KHZpZXcpXG4gIH1cblxuICAvKipcbiAgICogTWluaW11bSB6b29tIHZhbHVlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgbWluWm9vbSA9IDAuNVxuXG4gIC8qKlxuICAgKiBNYXhpbXVtIHpvb20gdmFsdWVcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBtYXhab29tID0gM1xuXG4gIC8qKlxuICAgKiBPYmplY3QgdGhhdCBjb250cm9scyBmbG93IGRpcmVjdGlvbi5cbiAgICpcbiAgICogRm9yIGV4YW1wbGUsIGlmIHlvdSB3YW50IHRvIGFyY2hpZXZlIHJpZ2h0IHRvIGxlZnQgZGlyZWN0aW9uXG4gICAqIHRoZW4geW91IG5lZWQgdG8gcGFzcyB0aGVzZSBwb3NpdGlvbnMgeyBzb3VyY2U6ICdsZWZ0JywgdGFyZ2V0OiAncmlnaHQnIH1cbiAgICpcbiAgICogQGRlcHJlY2F0ZWRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgaGFuZGxlUG9zaXRpb25zKGhhbmRsZVBvc2l0aW9uczogSGFuZGxlUG9zaXRpb25zKSB7XG4gICAgdGhpcy5mbG93TW9kZWwuaGFuZGxlUG9zaXRpb25zLnNldChoYW5kbGVQb3NpdGlvbnMpXG4gIH1cblxuICAvKipcbiAgICogQmFja2dyb3VuZCBjb2xvciBmb3IgZmxvd1xuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGJhY2tncm91bmQ6IHN0cmluZyA9ICcjRkZGRkZGJ1xuXG4gIC8qKlxuICAgKiBTZXR0aW5ncyBmb3IgY29ubmVjdGlvbiAoaXQgcmVuZGVycyB3aGVuIHVzZXIgdHJpZXMgdG8gY3JlYXRlIGVkZ2UgYmV0d2VlbiBub2RlcylcbiAgICpcbiAgICogWW91IG5lZWQgdG8gcGFzcyBgQ29ubmVjdGlvblNldHRpbmdzYCBpbiB0aGlzIGlucHV0LlxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiAoc2V0dGluZ3M6IENvbm5lY3Rpb25TZXR0aW5ncykgPT4gbmV3IENvbm5lY3Rpb25Nb2RlbChzZXR0aW5ncykgfSlcbiAgcHVibGljIHNldCBjb25uZWN0aW9uKGNvbm5lY3Rpb246IENvbm5lY3Rpb25Nb2RlbCkgeyB0aGlzLmZsb3dFbnRpdGllc1NlcnZpY2UuY29ubmVjdGlvbi5zZXQoY29ubmVjdGlvbikgfVxuXG4gIHB1YmxpYyBnZXQgY29ubmVjdGlvbigpIHsgcmV0dXJuIHRoaXMuZmxvd0VudGl0aWVzU2VydmljZS5jb25uZWN0aW9uKCkgfVxuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBNQUlOX0lOUFVUU1xuICAvKipcbiAgICogTm9kZXMgdG8gcmVuZGVyXG4gICAqL1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxuICBwdWJsaWMgc2V0IG5vZGVzKG5ld05vZGVzOiBOb2RlW10pIHtcbiAgICBjb25zdCBuZXdNb2RlbHMgPSBydW5JbkluamVjdGlvbkNvbnRleHQodGhpcy5pbmplY3RvcixcbiAgICAgICgpID0+IFJlZmVyZW5jZUtlZXBlci5ub2RlcyhuZXdOb2RlcywgdGhpcy5mbG93RW50aXRpZXNTZXJ2aWNlLm5vZGVzKCkpXG4gICAgKVxuXG4gICAgLy8gVE9ETyBiZXR0ZXIgdG8gc29sdmUgdGhpcyBieSBESVxuICAgIGJpbmRGbG93VG9Ob2Rlcyh0aGlzLmZsb3dNb2RlbCwgbmV3TW9kZWxzKVxuXG4gICAgLy8gcXVpY2sgYW5kIGRpcnR5IGJpbmRpbmcgbm9kZXMgdG8gZWRnZXNcbiAgICBhZGROb2Rlc1RvRWRnZXMobmV3TW9kZWxzLCB0aGlzLmZsb3dFbnRpdGllc1NlcnZpY2UuZWRnZXMoKSlcblxuICAgIHRoaXMuZmxvd0VudGl0aWVzU2VydmljZS5ub2Rlcy5zZXQobmV3TW9kZWxzKVxuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBub2RlTW9kZWxzKCkgeyByZXR1cm4gdGhpcy5mbG93RW50aXRpZXNTZXJ2aWNlLm5vZGVzKCkgfVxuXG4gIC8qKlxuICAgKiBFZGdlcyB0byByZW5kZXJcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZWRnZXMobmV3RWRnZXM6IEVkZ2VbXSkge1xuICAgIGNvbnN0IG5ld01vZGVscyA9IHJ1bkluSW5qZWN0aW9uQ29udGV4dCh0aGlzLmluamVjdG9yLFxuICAgICAgKCkgPT4gUmVmZXJlbmNlS2VlcGVyLmVkZ2VzKG5ld0VkZ2VzLCB0aGlzLmZsb3dFbnRpdGllc1NlcnZpY2UuZWRnZXMoKSlcbiAgICApXG5cbiAgICAvLyBxdWljayBhbmQgZGlydHkgYmluZGluZyBub2RlcyB0byBlZGdlc1xuICAgIGFkZE5vZGVzVG9FZGdlcyh0aGlzLm5vZGVNb2RlbHMsIG5ld01vZGVscylcblxuICAgIHRoaXMuZmxvd0VudGl0aWVzU2VydmljZS5lZGdlcy5zZXQobmV3TW9kZWxzKVxuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBlZGdlTW9kZWxzKCkgeyByZXR1cm4gdGhpcy5mbG93RW50aXRpZXNTZXJ2aWNlLnZhbGlkRWRnZXMoKSB9XG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIFRFTVBMQVRFU1xuICBAQ29udGVudENoaWxkKE5vZGVIdG1sVGVtcGxhdGVEaXJlY3RpdmUpXG4gIHByb3RlY3RlZCBub2RlSHRtbERpcmVjdGl2ZT86IE5vZGVIdG1sVGVtcGxhdGVEaXJlY3RpdmVcblxuICBAQ29udGVudENoaWxkKEVkZ2VUZW1wbGF0ZURpcmVjdGl2ZSlcbiAgcHJvdGVjdGVkIGVkZ2VUZW1wbGF0ZURpcmVjdGl2ZT86IEVkZ2VUZW1wbGF0ZURpcmVjdGl2ZVxuXG4gIEBDb250ZW50Q2hpbGQoRWRnZUxhYmVsSHRtbFRlbXBsYXRlRGlyZWN0aXZlKVxuICBwcm90ZWN0ZWQgZWRnZUxhYmVsSHRtbERpcmVjdGl2ZT86IEVkZ2VMYWJlbEh0bWxUZW1wbGF0ZURpcmVjdGl2ZVxuXG4gIEBDb250ZW50Q2hpbGQoQ29ubmVjdGlvblRlbXBsYXRlRGlyZWN0aXZlKVxuICBwcm90ZWN0ZWQgY29ubmVjdGlvblRlbXBsYXRlRGlyZWN0aXZlPzogQ29ubmVjdGlvblRlbXBsYXRlRGlyZWN0aXZlXG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIERJUkVDVElWRVNcbiAgQFZpZXdDaGlsZChNYXBDb250ZXh0RGlyZWN0aXZlKVxuICBwcm90ZWN0ZWQgbWFwQ29udGV4dCE6IE1hcENvbnRleHREaXJlY3RpdmVcbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gU0lHTkFMX0FQSVxuICAvKipcbiAgICogU2lnbmFsIGZvciByZWFkaW5nIHZpZXdwb3J0IGNoYW5nZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHZpZXdwb3J0ID0gdGhpcy52aWV3cG9ydFNlcnZpY2UucmVhZGFibGVWaWV3cG9ydC5hc1JlYWRvbmx5KClcblxuICAvKipcbiAgICogU2lnbmFsIGZvciByZWFkaW5nIG5vZGVzIGNoYW5nZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG5vZGVzQ2hhbmdlID1cbiAgICB0b1NpZ25hbCh0aGlzLm5vZGVzQ2hhbmdlU2VydmljZS5jaGFuZ2VzJCwgeyBpbml0aWFsVmFsdWU6IFtdIGFzIE5vZGVDaGFuZ2VbXSB9KVxuXG4gIC8qKlxuICAgKiBTaWduYWwgdG8gcmVhZGluZyBlZGdlcyBjaGFuZ2VcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBlZGdlc0NoYW5nZSA9XG4gICAgdG9TaWduYWwodGhpcy5lZGdlc0NoYW5nZVNlcnZpY2UuY2hhbmdlcyQsIHsgaW5pdGlhbFZhbHVlOiBbXSBhcyBFZGdlQ2hhbmdlW10gfSlcbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gUlhfQVBJXG4gIC8qKlxuICAgKiBPYnNlcnZhYmxlIHdpdGggdmlld3BvcnQgY2hhbmdlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdmlld3BvcnRDaGFuZ2UkID0gdG9PYnNlcnZhYmxlKHRoaXMudmlld3BvcnRTZXJ2aWNlLnJlYWRhYmxlVmlld3BvcnQpXG4gICAgLnBpcGUoc2tpcCgxKSkgLy8gc2tpcCBkZWZhdWx0IHZhbHVlIHRoYXQgc2V0IGJ5IHNpZ25hbFxuXG4gIC8qKlxuICAgKiBPYnNlcnZhYmxlIHdpdGggbm9kZXMgY2hhbmdlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbm9kZXNDaGFuZ2UkID0gdGhpcy5ub2Rlc0NoYW5nZVNlcnZpY2UuY2hhbmdlcyRcblxuICAvKipcbiAgICogT2JzZXJ2YWJsZSB3aXRoIG5vZGVzIGNoYW5nZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGVkZ2VzQ2hhbmdlJCA9IHRoaXMuZWRnZXNDaGFuZ2VTZXJ2aWNlLmNoYW5nZXMkXG4gIC8vICNlbmRyZWdpb25cblxuICAvLyBUT0RPOiBwcm9iYWJseSBiZXR0ZXIgdG8gbWFrZSBpdCBpbmplY3RhYmxlXG4gIHByb3RlY3RlZCBmbG93TW9kZWwgPSBuZXcgRmxvd01vZGVsKClcblxuICBwcm90ZWN0ZWQgbWFya2VycyA9IHRoaXMuZmxvd0VudGl0aWVzU2VydmljZS5tYXJrZXJzXG5cbiAgLy8gI3JlZ2lvbiBNRVRIT0RTX0FQSVxuICAvKipcbiAgICogQ2hhbmdlIHZpZXdwb3J0IHRvIHNwZWNpZmllZCBzdGF0ZVxuICAgKlxuICAgKiBAcGFyYW0gdmlld3BvcnQgdmlld3BvcnQgc3RhdGVcbiAgICovXG4gIHB1YmxpYyB2aWV3cG9ydFRvKHZpZXdwb3J0OiBWaWV3cG9ydFN0YXRlKTogdm9pZCB7XG4gICAgdGhpcy52aWV3cG9ydFNlcnZpY2Uud3JpdGFibGVWaWV3cG9ydC5zZXQoeyBjaGFuZ2VUeXBlOiAnYWJzb2x1dGUnLCBzdGF0ZTogdmlld3BvcnQgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGFuZ2Ugem9vbVxuICAgKlxuICAgKiBAcGFyYW0gem9vbSB6b29tIHZhbHVlXG4gICAqL1xuICBwdWJsaWMgem9vbVRvKHpvb206IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMudmlld3BvcnRTZXJ2aWNlLndyaXRhYmxlVmlld3BvcnQuc2V0KHsgY2hhbmdlVHlwZTogJ2Fic29sdXRlJywgc3RhdGU6IHsgem9vbSB9IH0pXG4gIH1cblxuICAvKipcbiAgICogTW92ZSB0byBzcGVjaWZpZWQgY29vcmRpbmF0ZVxuICAgKlxuICAgKiBAcGFyYW0gcG9pbnQgcG9pbnQgd2hlcmUgdG8gbW92ZVxuICAgKi9cbiAgcHVibGljIHBhblRvKHBvaW50OiBQb2ludCk6IHZvaWQge1xuICAgIHRoaXMudmlld3BvcnRTZXJ2aWNlLndyaXRhYmxlVmlld3BvcnQuc2V0KHsgY2hhbmdlVHlwZTogJ2Fic29sdXRlJywgc3RhdGU6IHBvaW50IH0pXG4gIH1cblxuICAvKipcbiAgICogR2V0IG5vZGUgYnkgaWRcbiAgICpcbiAgICogQHBhcmFtIGlkIG5vZGUgaWRcbiAgICovXG4gIHB1YmxpYyBnZXROb2RlPFQgPSB1bmtub3duPihpZDogc3RyaW5nKTogTm9kZTxUPiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZmxvd0VudGl0aWVzU2VydmljZS5nZXROb2RlPFQ+KGlkKT8ubm9kZVxuICB9XG5cbiAgLyoqXG4gICAqIFN5bmMgbWV0aG9kIHRvIGdldCBkZXRhY2hlZCBlZGdlc1xuICAgKi9cbiAgcHVibGljIGdldERldGFjaGVkRWRnZXMoKTogRWRnZVtdIHtcbiAgICByZXR1cm4gdGhpcy5mbG93RW50aXRpZXNTZXJ2aWNlLmdldERldGFjaGVkRWRnZXMoKS5tYXAoZSA9PiBlLmVkZ2UpXG4gIH1cbiAgLy8gI2VuZHJlZ2lvblxuXG4gIHByb3RlY3RlZCB0cmFja05vZGVzKGlkeDogbnVtYmVyLCB7IG5vZGUgfTogTm9kZU1vZGVsKSB7XG4gICAgcmV0dXJuIG5vZGVcbiAgfVxuXG4gIHByb3RlY3RlZCB0cmFja0VkZ2VzKGlkeDogbnVtYmVyLCB7IGVkZ2UgfTogRWRnZU1vZGVsKSB7XG4gICAgcmV0dXJuIGVkZ2VcbiAgfVxufVxuXG5mdW5jdGlvbiBiaW5kRmxvd1RvTm9kZXMoZmxvdzogRmxvd01vZGVsLCBub2RlczogTm9kZU1vZGVsW10pIHtcbiAgbm9kZXMuZm9yRWFjaChuID0+IG4uYmluZEZsb3coZmxvdykpXG59XG5cbiIsIjxzdmc6c3ZnXG4gIHJvb3RTdmdSZWZcbiAgcm9vdFN2Z0NvbnRleHRcbiAgY2xhc3M9XCJyb290LXN2Z1wiXG4gICNmbG93XG4gIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiYmFja2dyb3VuZFwiXG4gIFthdHRyLndpZHRoXT1cImZsb3dNb2RlbC5mbG93V2lkdGgoKVwiXG4gIFthdHRyLmhlaWdodF09XCJmbG93TW9kZWwuZmxvd0hlaWdodCgpXCJcbj5cbiAgPGRlZnMgW21hcmtlcnNdPVwibWFya2VycygpXCIgZmxvd0RlZnMgLz5cblxuICA8c3ZnOmdcbiAgICBtYXBDb250ZXh0XG4gICAgc3BhY2VQb2ludENvbnRleHRcbiAgICBbbWluWm9vbV09XCJtaW5ab29tXCJcbiAgICBbbWF4Wm9vbV09XCJtYXhab29tXCJcbiAgPlxuICAgIDwhLS0gQ29ubmVjdGlvbiAtLT5cbiAgICA8c3ZnOmdcbiAgICAgIGNvbm5lY3Rpb25cbiAgICAgIFttb2RlbF09XCJjb25uZWN0aW9uXCJcbiAgICAgIFt0ZW1wbGF0ZV09XCJjb25uZWN0aW9uVGVtcGxhdGVEaXJlY3RpdmU/LnRlbXBsYXRlUmVmXCJcbiAgICAvPlxuXG4gICAgPCEtLSBFZGdlcyAgLS0+XG4gICAgPHN2ZzpnXG4gICAgICAqbmdGb3I9XCJsZXQgbW9kZWwgb2YgZWRnZU1vZGVsczsgdHJhY2tCeTogdHJhY2tFZGdlc1wiXG4gICAgICBlZGdlXG4gICAgICBbbW9kZWxdPVwibW9kZWxcIlxuICAgICAgW2VkZ2VUZW1wbGF0ZV09XCJlZGdlVGVtcGxhdGVEaXJlY3RpdmU/LnRlbXBsYXRlUmVmXCJcbiAgICAgIFtlZGdlTGFiZWxIdG1sVGVtcGxhdGVdPVwiZWRnZUxhYmVsSHRtbERpcmVjdGl2ZT8udGVtcGxhdGVSZWZcIlxuICAgIC8+XG5cbiAgICA8IS0tIE5vZGVzIC0tPlxuICAgIDxzdmc6Z1xuICAgICAgKm5nRm9yPVwibGV0IG1vZGVsIG9mIG5vZGVNb2RlbHM7IHRyYWNrQnk6IHRyYWNrTm9kZXNcIlxuICAgICAgbm9kZVxuICAgICAgW25vZGVNb2RlbF09XCJtb2RlbFwiXG4gICAgICBbbm9kZUh0bWxUZW1wbGF0ZV09XCJub2RlSHRtbERpcmVjdGl2ZT8udGVtcGxhdGVSZWZcIlxuICAgICAgW2F0dHIudHJhbnNmb3JtXT1cIm1vZGVsLnBvaW50VHJhbnNmb3JtKClcIlxuICAgIC8+XG4gIDwvc3ZnOmc+XG5cbjwvc3ZnOnN2Zz5cbiJdfQ==
@@ -0,0 +1,11 @@
1
+ export function Microtask(target, key, descriptor) {
2
+ const originalMethod = descriptor.value;
3
+ descriptor.value = function (...args) {
4
+ queueMicrotask(() => {
5
+ originalMethod?.apply(this, args);
6
+ });
7
+ };
8
+ // Return the modified descriptor
9
+ return descriptor;
10
+ }
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWljcm90YXNrLmRlY29yYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC12Zmxvdy1saWIvc3JjL2xpYi92Zmxvdy9kZWNvcmF0b3JzL21pY3JvdGFzay5kZWNvcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxVQUFVLFNBQVMsQ0FBQyxNQUFXLEVBQUUsR0FBVyxFQUFFLFVBQTZEO0lBQy9HLE1BQU0sY0FBYyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUM7SUFFeEMsVUFBVSxDQUFDLEtBQUssR0FBRyxVQUFVLEdBQUcsSUFBVztRQUN6QyxjQUFjLENBQUMsR0FBRyxFQUFFO1lBQ2xCLGNBQWMsRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFBO1FBQ25DLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQyxDQUFDO0lBRUYsaUNBQWlDO0lBQ2pDLE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gTWljcm90YXNrKHRhcmdldDogYW55LCBrZXk6IHN0cmluZywgZGVzY3JpcHRvcjogVHlwZWRQcm9wZXJ0eURlc2NyaXB0b3I8KC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkPikge1xuICBjb25zdCBvcmlnaW5hbE1ldGhvZCA9IGRlc2NyaXB0b3IudmFsdWU7XG5cbiAgZGVzY3JpcHRvci52YWx1ZSA9IGZ1bmN0aW9uICguLi5hcmdzOiBhbnlbXSkge1xuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgIG9yaWdpbmFsTWV0aG9kPy5hcHBseSh0aGlzLCBhcmdzKVxuICAgIH0pXG4gIH07XG5cbiAgLy8gUmV0dXJuIHRoZSBtb2RpZmllZCBkZXNjcmlwdG9yXG4gIHJldHVybiBkZXNjcmlwdG9yO1xufVxuIl19
@@ -0,0 +1,26 @@
1
+ import { Directive, Injector, inject, runInInjectionContext } from "@angular/core";
2
+ import * as i0 from "@angular/core";
3
+ export function InjectionContext(target, key, descriptor) {
4
+ const originalMethod = descriptor.value;
5
+ descriptor.value = function (...args) {
6
+ if (this instanceof WithInjectorDirective) {
7
+ return runInInjectionContext(this.injector, () => originalMethod.apply(this, args));
8
+ }
9
+ else {
10
+ throw new Error('Class that contains decorated method must extends WithInjectorDirective class');
11
+ }
12
+ };
13
+ // Return the modified descriptor
14
+ return descriptor;
15
+ }
16
+ export class WithInjectorDirective {
17
+ constructor() {
18
+ this.injector = inject(Injector);
19
+ }
20
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WithInjectorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
21
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: WithInjectorDirective, ngImport: i0 }); }
22
+ }
23
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WithInjectorDirective, decorators: [{
24
+ type: Directive
25
+ }] });
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVuLWluLWluamVjdGlvbi1jb250ZXh0LmRlY29yYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC12Zmxvdy1saWIvc3JjL2xpYi92Zmxvdy9kZWNvcmF0b3JzL3J1bi1pbi1pbmplY3Rpb24tY29udGV4dC5kZWNvcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUVuRixNQUFNLFVBQVUsZ0JBQWdCLENBQUMsTUFBVyxFQUFFLEdBQVcsRUFBRSxVQUE4QjtJQUN2RixNQUFNLGNBQWMsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDO0lBRXhDLFVBQVUsQ0FBQyxLQUFLLEdBQUcsVUFBVSxHQUFHLElBQVc7UUFDekMsSUFBSSxJQUFJLFlBQVkscUJBQXFCLEVBQUU7WUFDekMsT0FBTyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUE7U0FDcEY7YUFBTTtZQUNMLE1BQU0sSUFBSSxLQUFLLENBQUMsK0VBQStFLENBQUMsQ0FBQTtTQUNqRztJQUNILENBQUMsQ0FBQztJQUVGLGlDQUFpQztJQUNqQyxPQUFPLFVBQVUsQ0FBQztBQUNwQixDQUFDO0FBR0QsTUFBTSxPQUFnQixxQkFBcUI7SUFEM0M7UUFFa0IsYUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQTtLQUM1QzsrR0FGcUIscUJBQXFCO21HQUFyQixxQkFBcUI7OzRGQUFyQixxQkFBcUI7a0JBRDFDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEluamVjdG9yLCBpbmplY3QsIHJ1bkluSW5qZWN0aW9uQ29udGV4dCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBJbmplY3Rpb25Db250ZXh0KHRhcmdldDogYW55LCBrZXk6IHN0cmluZywgZGVzY3JpcHRvcjogUHJvcGVydHlEZXNjcmlwdG9yKSB7XG4gIGNvbnN0IG9yaWdpbmFsTWV0aG9kID0gZGVzY3JpcHRvci52YWx1ZTtcblxuICBkZXNjcmlwdG9yLnZhbHVlID0gZnVuY3Rpb24gKC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBXaXRoSW5qZWN0b3JEaXJlY3RpdmUpIHtcbiAgICAgIHJldHVybiBydW5JbkluamVjdGlvbkNvbnRleHQodGhpcy5pbmplY3RvciwgKCkgPT4gb3JpZ2luYWxNZXRob2QuYXBwbHkodGhpcywgYXJncykpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2xhc3MgdGhhdCBjb250YWlucyBkZWNvcmF0ZWQgbWV0aG9kIG11c3QgZXh0ZW5kcyBXaXRoSW5qZWN0b3JEaXJlY3RpdmUgY2xhc3MnKVxuICAgIH1cbiAgfTtcblxuICAvLyBSZXR1cm4gdGhlIG1vZGlmaWVkIGRlc2NyaXB0b3JcbiAgcmV0dXJuIGRlc2NyaXB0b3I7XG59XG5cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFdpdGhJbmplY3RvckRpcmVjdGl2ZSB7XG4gIHB1YmxpYyByZWFkb25seSBpbmplY3RvciA9IGluamVjdChJbmplY3Rvcilcbn1cbiJdfQ==