ngx-vflow 0.15.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. package/README.md +8 -1
  2. package/esm2022/lib/vflow/components/background/background.component.mjs +75 -8
  3. package/esm2022/lib/vflow/components/connection/connection.component.mjs +67 -49
  4. package/esm2022/lib/vflow/components/custom-node-base/custom-node-base.component.mjs +32 -25
  5. package/esm2022/lib/vflow/components/default-node/default-node.component.mjs +9 -11
  6. package/esm2022/lib/vflow/components/defs/defs.component.mjs +9 -12
  7. package/esm2022/lib/vflow/components/edge/edge.component.mjs +21 -24
  8. package/esm2022/lib/vflow/components/edge-label/edge-label.component.mjs +26 -31
  9. package/esm2022/lib/vflow/components/node/node.component.mjs +54 -50
  10. package/esm2022/lib/vflow/components/vflow/vflow.component.mjs +95 -90
  11. package/esm2022/lib/vflow/decorators/run-in-injection-context.decorator.mjs +1 -1
  12. package/esm2022/lib/vflow/directives/changes-controller.directive.mjs +41 -125
  13. package/esm2022/lib/vflow/directives/connection-controller.directive.mjs +16 -16
  14. package/esm2022/lib/vflow/directives/drag-handle.directive.mjs +7 -6
  15. package/esm2022/lib/vflow/directives/flow-size-controller.directive.mjs +7 -6
  16. package/esm2022/lib/vflow/directives/handle-size-controller.directive.mjs +15 -12
  17. package/esm2022/lib/vflow/directives/map-context.directive.mjs +8 -5
  18. package/esm2022/lib/vflow/directives/pointer.directive.mjs +18 -19
  19. package/esm2022/lib/vflow/directives/reference.directive.mjs +6 -5
  20. package/esm2022/lib/vflow/directives/root-pointer.directive.mjs +8 -5
  21. package/esm2022/lib/vflow/directives/root-svg-context.directive.mjs +8 -5
  22. package/esm2022/lib/vflow/directives/selectable.directive.mjs +10 -7
  23. package/esm2022/lib/vflow/directives/space-point-context.directive.mjs +8 -5
  24. package/esm2022/lib/vflow/directives/template.directive.mjs +43 -25
  25. package/esm2022/lib/vflow/interfaces/component-node-event.interface.mjs +1 -1
  26. package/esm2022/lib/vflow/interfaces/edge.interface.mjs +1 -1
  27. package/esm2022/lib/vflow/interfaces/node.interface.mjs +1 -1
  28. package/esm2022/lib/vflow/interfaces/optimization.interface.mjs +1 -1
  29. package/esm2022/lib/vflow/math/edge-path/bezier-path.mjs +1 -1
  30. package/esm2022/lib/vflow/math/edge-path/smooth-step-path.mjs +170 -0
  31. package/esm2022/lib/vflow/models/connection.model.mjs +1 -1
  32. package/esm2022/lib/vflow/models/edge.model.mjs +6 -1
  33. package/esm2022/lib/vflow/models/handle.model.mjs +2 -2
  34. package/esm2022/lib/vflow/models/node.model.mjs +4 -10
  35. package/esm2022/lib/vflow/models/toolbar.model.mjs +1 -1
  36. package/esm2022/lib/vflow/public-components/custom-dynamic-node/custom-dynamic-node.component.mjs +16 -10
  37. package/esm2022/lib/vflow/public-components/custom-node/custom-node.component.mjs +15 -10
  38. package/esm2022/lib/vflow/public-components/handle/handle.component.mjs +52 -0
  39. package/esm2022/lib/vflow/public-components/minimap/minimap.component.mjs +42 -45
  40. package/esm2022/lib/vflow/public-components/node-toolbar/node-toolbar.component.mjs +24 -27
  41. package/esm2022/lib/vflow/public-components/resizable/resizable.component.mjs +60 -45
  42. package/esm2022/lib/vflow/services/component-event-bus.service.mjs +3 -3
  43. package/esm2022/lib/vflow/services/draggable.service.mjs +4 -4
  44. package/esm2022/lib/vflow/services/edge-changes.service.mjs +3 -3
  45. package/esm2022/lib/vflow/services/flow-entities.service.mjs +4 -4
  46. package/esm2022/lib/vflow/services/flow-settings.service.mjs +4 -10
  47. package/esm2022/lib/vflow/services/flow-status.service.mjs +4 -4
  48. package/esm2022/lib/vflow/services/handle.service.mjs +4 -4
  49. package/esm2022/lib/vflow/services/keyboard.service.mjs +5 -5
  50. package/esm2022/lib/vflow/services/node-accessor.service.mjs +3 -3
  51. package/esm2022/lib/vflow/services/node-changes.service.mjs +3 -3
  52. package/esm2022/lib/vflow/services/node-rendering.service.mjs +11 -4
  53. package/esm2022/lib/vflow/services/overlays.service.mjs +3 -3
  54. package/esm2022/lib/vflow/services/selection.service.mjs +4 -4
  55. package/esm2022/lib/vflow/services/viewport.service.mjs +3 -3
  56. package/esm2022/lib/vflow/types/background.type.mjs +1 -1
  57. package/esm2022/lib/vflow/utils/adjust-direction.mjs +1 -1
  58. package/esm2022/lib/vflow/utils/get-os.mjs +1 -1
  59. package/esm2022/lib/vflow/utils/is-group-node.mjs +4 -0
  60. package/esm2022/lib/vflow/utils/nodes.mjs +1 -1
  61. package/esm2022/lib/vflow/vflow.mjs +24 -0
  62. package/esm2022/public-api.mjs +4 -5
  63. package/fesm2022/ngx-vflow.mjs +1160 -1005
  64. package/fesm2022/ngx-vflow.mjs.map +1 -1
  65. package/lib/vflow/components/background/background.component.d.ts +14 -1
  66. package/lib/vflow/components/connection/connection.component.d.ts +3 -3
  67. package/lib/vflow/components/custom-node-base/custom-node-base.component.d.ts +4 -9
  68. package/lib/vflow/components/default-node/default-node.component.d.ts +2 -2
  69. package/lib/vflow/components/defs/defs.component.d.ts +2 -2
  70. package/lib/vflow/components/edge/edge.component.d.ts +7 -7
  71. package/lib/vflow/components/edge-label/edge-label.component.d.ts +9 -8
  72. package/lib/vflow/components/node/node.component.d.ts +5 -6
  73. package/lib/vflow/components/vflow/vflow.component.d.ts +19 -27
  74. package/lib/vflow/directives/changes-controller.directive.d.ts +29 -30
  75. package/lib/vflow/directives/connection-controller.directive.d.ts +1 -2
  76. package/lib/vflow/directives/drag-handle.directive.d.ts +1 -1
  77. package/lib/vflow/directives/flow-size-controller.directive.d.ts +1 -1
  78. package/lib/vflow/directives/handle-size-controller.directive.d.ts +2 -2
  79. package/lib/vflow/directives/map-context.directive.d.ts +1 -1
  80. package/lib/vflow/directives/pointer.directive.d.ts +9 -6
  81. package/lib/vflow/directives/reference.directive.d.ts +1 -1
  82. package/lib/vflow/directives/root-pointer.directive.d.ts +1 -1
  83. package/lib/vflow/directives/root-svg-context.directive.d.ts +1 -1
  84. package/lib/vflow/directives/selectable.directive.d.ts +1 -1
  85. package/lib/vflow/directives/space-point-context.directive.d.ts +1 -1
  86. package/lib/vflow/directives/template.directive.d.ts +6 -6
  87. package/lib/vflow/interfaces/component-node-event.interface.d.ts +3 -3
  88. package/lib/vflow/interfaces/edge.interface.d.ts +1 -1
  89. package/lib/vflow/interfaces/node.interface.d.ts +14 -14
  90. package/lib/vflow/interfaces/optimization.interface.d.ts +7 -1
  91. package/lib/vflow/math/edge-path/smooth-step-path.d.ts +5 -0
  92. package/lib/vflow/models/edge.model.d.ts +1 -17
  93. package/lib/vflow/models/handle.model.d.ts +4 -4
  94. package/lib/vflow/models/node.model.d.ts +2 -5
  95. package/lib/vflow/public-components/custom-dynamic-node/custom-dynamic-node.component.d.ts +3 -3
  96. package/lib/vflow/public-components/custom-node/custom-node.component.d.ts +3 -3
  97. package/lib/vflow/{components → public-components}/handle/handle.component.d.ts +5 -5
  98. package/lib/vflow/public-components/minimap/minimap.component.d.ts +8 -10
  99. package/lib/vflow/public-components/node-toolbar/node-toolbar.component.d.ts +6 -5
  100. package/lib/vflow/public-components/resizable/resizable.component.d.ts +5 -4
  101. package/lib/vflow/services/flow-settings.service.d.ts +0 -7
  102. package/lib/vflow/services/node-rendering.service.d.ts +2 -0
  103. package/lib/vflow/types/background.type.d.ts +24 -1
  104. package/lib/vflow/utils/is-group-node.d.ts +2 -0
  105. package/lib/vflow/utils/reference-keeper.d.ts +1 -1
  106. package/lib/vflow/vflow.d.ts +9 -0
  107. package/package.json +3 -3
  108. package/public-api.d.ts +2 -3
  109. package/esm2022/lib/vflow/components/handle/handle.component.mjs +0 -49
  110. package/esm2022/lib/vflow/interfaces/handle-positions.interface.mjs +0 -2
  111. package/esm2022/lib/vflow/vflow.module.mjs +0 -121
  112. package/lib/vflow/interfaces/handle-positions.interface.d.ts +0 -5
  113. package/lib/vflow/vflow.module.d.ts +0 -30
@@ -1,19 +1,24 @@
1
- import { Directive, Input } from "@angular/core";
1
+ import { Directive, input } from "@angular/core";
2
2
  import { CustomNodeBaseComponent } from "../../components/custom-node-base/custom-node-base.component";
3
3
  import * as i0 from "@angular/core";
4
4
  export class CustomNodeComponent extends CustomNodeBaseComponent {
5
+ constructor() {
6
+ super(...arguments);
7
+ /**
8
+ * Reference to node bound to this component
9
+ */
10
+ this.node = input.required();
11
+ }
5
12
  ngOnInit() {
6
- if (this.node.data) {
7
- this.data.set(this.node.data);
13
+ if (this.node().data) {
14
+ this.data.set(this.node().data);
8
15
  }
9
16
  super.ngOnInit();
10
17
  }
11
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CustomNodeComponent, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
12
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: CustomNodeComponent, inputs: { node: "node" }, usesInheritance: true, ngImport: i0 }); }
18
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CustomNodeComponent, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
19
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "17.3.12", type: CustomNodeComponent, inputs: { node: { classPropertyName: "node", publicName: "node", isSignal: true, isRequired: true, transformFunction: null } }, usesInheritance: true, ngImport: i0 }); }
13
20
  }
14
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CustomNodeComponent, decorators: [{
21
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CustomNodeComponent, decorators: [{
15
22
  type: Directive
16
- }], propDecorators: { node: [{
17
- type: Input
18
- }] } });
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLW5vZGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L3B1YmxpYy1jb21wb25lbnRzL2N1c3RvbS1ub2RlL2N1c3RvbS1ub2RlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQTtBQUV4RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4REFBOEQsQ0FBQzs7QUFHdkcsTUFBTSxPQUFnQixtQkFBaUMsU0FBUSx1QkFBMEI7SUFPdkUsUUFBUTtRQUN0QixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ2xCLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7U0FDOUI7UUFFRCxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUE7SUFDbEIsQ0FBQzsrR0FibUIsbUJBQW1CO21HQUFuQixtQkFBbUI7OzRGQUFuQixtQkFBbUI7a0JBRHhDLFNBQVM7OEJBTVEsSUFBSTtzQkFEbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgSW5wdXQsIE9uSW5pdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCJcbmltcG9ydCB7IENvbXBvbmVudE5vZGUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL25vZGUuaW50ZXJmYWNlJztcbmltcG9ydCB7IEN1c3RvbU5vZGVCYXNlQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL2NvbXBvbmVudHMvY3VzdG9tLW5vZGUtYmFzZS9jdXN0b20tbm9kZS1iYXNlLmNvbXBvbmVudFwiO1xuXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDdXN0b21Ob2RlQ29tcG9uZW50PFQgPSB1bmtub3duPiBleHRlbmRzIEN1c3RvbU5vZGVCYXNlQ29tcG9uZW50PFQ+IGltcGxlbWVudHMgT25Jbml0IHtcbiAgLyoqXG4gICAqIFJlZmVyZW5jZSB0byBub2RlIGJvdW5kIHRvIHRoaXMgY29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgb3ZlcnJpZGUgbm9kZSE6IENvbXBvbmVudE5vZGU8VD5cblxuICBwdWJsaWMgb3ZlcnJpZGUgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubm9kZS5kYXRhKSB7XG4gICAgICB0aGlzLmRhdGEuc2V0KHRoaXMubm9kZS5kYXRhKVxuICAgIH1cblxuICAgIHN1cGVyLm5nT25Jbml0KClcbiAgfVxufVxuXG4iXX0=
23
+ }] });
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLW5vZGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L3B1YmxpYy1jb21wb25lbnRzL2N1c3RvbS1ub2RlL2N1c3RvbS1ub2RlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBaUIsTUFBTSxlQUFlLENBQUE7QUFFL0QsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOERBQThELENBQUM7O0FBR3ZHLE1BQU0sT0FBZ0IsbUJBQTZCLFNBQVEsdUJBQTBCO0lBRHJGOztRQUVFOztXQUVHO1FBQ0ksU0FBSSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQW9CLENBQUE7S0FTakQ7SUFQaUIsUUFBUTtRQUN0QixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDakMsQ0FBQztRQUVELEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQTtJQUNsQixDQUFDOytHQVptQixtQkFBbUI7bUdBQW5CLG1CQUFtQjs7NEZBQW5CLG1CQUFtQjtrQkFEeEMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgaW5wdXQsIElucHV0LCBPbkluaXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiXG5pbXBvcnQgeyBDb21wb25lbnROb2RlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9ub2RlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBDdXN0b21Ob2RlQmFzZUNvbXBvbmVudCB9IGZyb20gXCIuLi8uLi9jb21wb25lbnRzL2N1c3RvbS1ub2RlLWJhc2UvY3VzdG9tLW5vZGUtYmFzZS5jb21wb25lbnRcIjtcblxuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ3VzdG9tTm9kZUNvbXBvbmVudDxUID0gYW55PiBleHRlbmRzIEN1c3RvbU5vZGVCYXNlQ29tcG9uZW50PFQ+IGltcGxlbWVudHMgT25Jbml0IHtcbiAgLyoqXG4gICAqIFJlZmVyZW5jZSB0byBub2RlIGJvdW5kIHRvIHRoaXMgY29tcG9uZW50XG4gICAqL1xuICBwdWJsaWMgbm9kZSA9IGlucHV0LnJlcXVpcmVkPENvbXBvbmVudE5vZGU8VD4+KClcblxuICBwdWJsaWMgb3ZlcnJpZGUgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubm9kZSgpLmRhdGEpIHtcbiAgICAgIHRoaXMuZGF0YS5zZXQodGhpcy5ub2RlKCkuZGF0YSlcbiAgICB9XG5cbiAgICBzdXBlci5uZ09uSW5pdCgpXG4gIH1cbn1cblxuIl19
@@ -0,0 +1,52 @@
1
+ import { __decorate } from "tslib";
2
+ import { ChangeDetectionStrategy, Component, DestroyRef, ElementRef, Injector, inject, input, } from '@angular/core';
3
+ import { HandleService } from '../../services/handle.service';
4
+ import { HandleModel } from '../../models/handle.model';
5
+ import { InjectionContext, } from '../../decorators/run-in-injection-context.decorator';
6
+ import * as i0 from "@angular/core";
7
+ export class HandleComponent {
8
+ constructor() {
9
+ this.injector = inject(Injector);
10
+ this.handleService = inject(HandleService);
11
+ this.element = inject(ElementRef).nativeElement;
12
+ this.destroyRef = inject(DestroyRef);
13
+ /**
14
+ * At what side of node this component should be placed
15
+ */
16
+ this.position = input.required();
17
+ /**
18
+ * Source or target
19
+ */
20
+ this.type = input.required();
21
+ /**
22
+ * Should be used if node has more than one source/target
23
+ */
24
+ this.id = input();
25
+ this.template = input();
26
+ }
27
+ ngOnInit() {
28
+ const node = this.handleService.node();
29
+ if (node) {
30
+ this.model = new HandleModel({
31
+ position: this.position(),
32
+ type: this.type(),
33
+ id: this.id(),
34
+ parentReference: this.element.parentElement,
35
+ template: this.template(),
36
+ }, node);
37
+ this.handleService.createHandle(this.model);
38
+ requestAnimationFrame(() => this.model.updateParent());
39
+ this.destroyRef.onDestroy(() => this.handleService.destroyHandle(this.model));
40
+ }
41
+ }
42
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HandleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
43
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "17.3.12", type: HandleComponent, isStandalone: true, selector: "handle", inputs: { position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: true, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: true, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, template: { classPropertyName: "template", publicName: "template", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "", changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
44
+ }
45
+ __decorate([
46
+ InjectionContext
47
+ ], HandleComponent.prototype, "ngOnInit", null);
48
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HandleComponent, decorators: [{
49
+ type: Component,
50
+ args: [{ standalone: true, selector: 'handle', changeDetection: ChangeDetectionStrategy.OnPush, template: "" }]
51
+ }], propDecorators: { ngOnInit: [] } });
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC12Zmxvdy1saWIvc3JjL2xpYi92Zmxvdy9wdWJsaWMtY29tcG9uZW50cy9oYW5kbGUvaGFuZGxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC12Zmxvdy1saWIvc3JjL2xpYi92Zmxvdy9wdWJsaWMtY29tcG9uZW50cy9oYW5kbGUvaGFuZGxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsVUFBVSxFQUNWLFFBQVEsRUFHUixNQUFNLEVBQ04sS0FBSyxHQUNOLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDeEQsT0FBTyxFQUNMLGdCQUFnQixHQUVqQixNQUFNLHFEQUFxRCxDQUFDOztBQVE3RCxNQUFNLE9BQU8sZUFBZTtJQU41QjtRQU9TLGFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDM0Isa0JBQWEsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDdEMsWUFBTyxHQUFHLE1BQU0sQ0FBMEIsVUFBVSxDQUFDLENBQUMsYUFBYSxDQUFDO1FBQ3BFLGVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFeEM7O1dBRUc7UUFDSSxhQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBWSxDQUFDO1FBRTdDOztXQUVHO1FBQ0ksU0FBSSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQXVCLENBQUM7UUFFcEQ7O1dBRUc7UUFDSSxPQUFFLEdBQUcsS0FBSyxFQUFVLENBQUM7UUFFckIsYUFBUSxHQUFHLEtBQUssRUFBb0IsQ0FBQztLQTZCN0M7SUF4QlEsUUFBUTtRQUNiLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFdkMsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNULElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxXQUFXLENBQzFCO2dCQUNFLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUN6QixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRTtnQkFDakIsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUU7Z0JBQ2IsZUFBZSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYztnQkFDNUMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUU7YUFDMUIsRUFDRCxJQUFJLENBQ0wsQ0FBQztZQUVGLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUU1QyxxQkFBcUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7WUFFdkQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQzdCLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FDN0MsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDOytHQWpEVSxlQUFlO21HQUFmLGVBQWUsa2pCQ3pCNUIsRUFBQTs7QURtRFM7SUFETixnQkFBZ0I7K0NBd0JoQjs0RkFqRFUsZUFBZTtrQkFOM0IsU0FBUztpQ0FDSSxJQUFJLFlBQ04sUUFBUSxtQkFFRCx1QkFBdUIsQ0FBQyxNQUFNOzhCQTRCeEMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIERlc3Ryb3lSZWYsXG4gIEVsZW1lbnRSZWYsXG4gIEluamVjdG9yLFxuICBPbkluaXQsXG4gIFRlbXBsYXRlUmVmLFxuICBpbmplY3QsXG4gIGlucHV0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBvc2l0aW9uIH0gZnJvbSAnLi4vLi4vdHlwZXMvcG9zaXRpb24udHlwZSc7XG5pbXBvcnQgeyBIYW5kbGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaGFuZGxlLnNlcnZpY2UnO1xuaW1wb3J0IHsgSGFuZGxlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvaGFuZGxlLm1vZGVsJztcbmltcG9ydCB7XG4gIEluamVjdGlvbkNvbnRleHQsXG4gIFdpdGhJbmplY3Rvcixcbn0gZnJvbSAnLi4vLi4vZGVjb3JhdG9ycy9ydW4taW4taW5qZWN0aW9uLWNvbnRleHQuZGVjb3JhdG9yJztcblxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAnaGFuZGxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2hhbmRsZS5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBIYW5kbGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIFdpdGhJbmplY3RvciB7XG4gIHB1YmxpYyBpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG4gIHByaXZhdGUgaGFuZGxlU2VydmljZSA9IGluamVjdChIYW5kbGVTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBlbGVtZW50ID0gaW5qZWN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PihFbGVtZW50UmVmKS5uYXRpdmVFbGVtZW50O1xuICBwcml2YXRlIGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgLyoqXG4gICAqIEF0IHdoYXQgc2lkZSBvZiBub2RlIHRoaXMgY29tcG9uZW50IHNob3VsZCBiZSBwbGFjZWRcbiAgICovXG4gIHB1YmxpYyBwb3NpdGlvbiA9IGlucHV0LnJlcXVpcmVkPFBvc2l0aW9uPigpO1xuXG4gIC8qKlxuICAgKiBTb3VyY2Ugb3IgdGFyZ2V0XG4gICAqL1xuICBwdWJsaWMgdHlwZSA9IGlucHV0LnJlcXVpcmVkPCdzb3VyY2UnIHwgJ3RhcmdldCc+KCk7XG5cbiAgLyoqXG4gICAqIFNob3VsZCBiZSB1c2VkIGlmIG5vZGUgaGFzIG1vcmUgdGhhbiBvbmUgc291cmNlL3RhcmdldFxuICAgKi9cbiAgcHVibGljIGlkID0gaW5wdXQ8c3RyaW5nPigpO1xuXG4gIHB1YmxpYyB0ZW1wbGF0ZSA9IGlucHV0PFRlbXBsYXRlUmVmPGFueT4+KCk7XG5cbiAgcHVibGljIG1vZGVsITogSGFuZGxlTW9kZWw7XG5cbiAgQEluamVjdGlvbkNvbnRleHRcbiAgcHVibGljIG5nT25Jbml0KCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmhhbmRsZVNlcnZpY2Uubm9kZSgpO1xuXG4gICAgaWYgKG5vZGUpIHtcbiAgICAgIHRoaXMubW9kZWwgPSBuZXcgSGFuZGxlTW9kZWwoXG4gICAgICAgIHtcbiAgICAgICAgICBwb3NpdGlvbjogdGhpcy5wb3NpdGlvbigpLFxuICAgICAgICAgIHR5cGU6IHRoaXMudHlwZSgpLFxuICAgICAgICAgIGlkOiB0aGlzLmlkKCksXG4gICAgICAgICAgcGFyZW50UmVmZXJlbmNlOiB0aGlzLmVsZW1lbnQucGFyZW50RWxlbWVudCEsXG4gICAgICAgICAgdGVtcGxhdGU6IHRoaXMudGVtcGxhdGUoKSxcbiAgICAgICAgfSxcbiAgICAgICAgbm9kZSxcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuaGFuZGxlU2VydmljZS5jcmVhdGVIYW5kbGUodGhpcy5tb2RlbCk7XG5cbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB0aGlzLm1vZGVsLnVwZGF0ZVBhcmVudCgpKTtcblxuICAgICAgdGhpcy5kZXN0cm95UmVmLm9uRGVzdHJveSgoKSA9PlxuICAgICAgICB0aGlzLmhhbmRsZVNlcnZpY2UuZGVzdHJveUhhbmRsZSh0aGlzLm1vZGVsKSxcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG4iLCIiXX0=
@@ -1,13 +1,12 @@
1
- import { Component, computed, inject, Injector, Input, signal, ViewChild } from '@angular/core';
1
+ import { Component, computed, inject, Injector, signal, input, viewChild, } from '@angular/core';
2
2
  import { FlowEntitiesService } from '../../services/flow-entities.service';
3
3
  import { MinimapModel } from '../../models/minimap.model';
4
4
  import { FlowSettingsService } from '../../services/flow-settings.service';
5
5
  import { getViewportForBounds } from '../../utils/viewport';
6
6
  import { getNodesBounds } from '../../utils/nodes';
7
7
  import { ViewportService } from '../../services/viewport.service';
8
+ import { DefaultNodeComponent } from '../../components/default-node/default-node.component';
8
9
  import * as i0 from "@angular/core";
9
- import * as i1 from "@angular/common";
10
- import * as i2 from "../../components/default-node/default-node.component";
11
10
  export class MiniMapComponent {
12
11
  constructor() {
13
12
  this.entitiesService = inject(FlowEntitiesService);
@@ -17,38 +16,61 @@ export class MiniMapComponent {
17
16
  /**
18
17
  * The color outside the viewport (invisible area)
19
18
  */
20
- this.maskColor = `rgba(215, 215, 215, 0.6)`;
19
+ this.maskColor = input(`rgba(215, 215, 215, 0.6)`);
21
20
  /**
22
21
  * The minimap stroke color
23
22
  */
24
- this.strokeColor = `rgb(200, 200, 200)`;
23
+ this.strokeColor = input(`rgb(200, 200, 200)`);
24
+ /**
25
+ * The corner of the flow where to render a mini-map
26
+ */
27
+ this.position = input('bottom-right');
28
+ /**
29
+ * Make a minimap bigger on hover
30
+ */
31
+ this.scaleOnHover = input(false);
32
+ this.minimap = viewChild.required('minimap');
25
33
  this.minimapOffset = 10;
26
34
  this.minimapScale = computed(() => {
27
- if (this.scaleOnHoverSignal()) {
35
+ if (this.scaleOnHover()) {
28
36
  return this.hovered() ? 0.4 : 0.2;
29
37
  }
30
38
  return 0.2;
31
39
  });
32
- this.viewportColor = computed(() => this.flowSettingsService.background().color ?? '#fff');
40
+ this.viewportColor = computed(() => {
41
+ const bg = this.flowSettingsService.background();
42
+ if (bg.type === 'dots' || bg.type === 'solid') {
43
+ return bg.color ?? '#fff';
44
+ }
45
+ return '#fff';
46
+ });
33
47
  this.hovered = signal(false);
34
48
  this.minimapPoint = computed(() => {
35
- switch (this.minimapPosition()) {
49
+ switch (this.position()) {
36
50
  case 'top-left':
37
51
  return { x: this.minimapOffset, y: this.minimapOffset };
38
52
  case 'top-right':
39
53
  return {
40
- x: this.flowSettingsService.computedFlowWidth() - this.minimapWidth() - this.minimapOffset,
41
- y: this.minimapOffset
54
+ x: this.flowSettingsService.computedFlowWidth() -
55
+ this.minimapWidth() -
56
+ this.minimapOffset,
57
+ y: this.minimapOffset,
42
58
  };
43
59
  case 'bottom-left':
44
60
  return {
45
61
  x: this.minimapOffset,
46
- y: this.flowSettingsService.computedFlowHeight() - this.minimapHeight() - this.minimapOffset
62
+ y: this.flowSettingsService.computedFlowHeight() -
63
+ this.minimapHeight() -
64
+ this.minimapOffset,
47
65
  };
48
66
  case 'bottom-right':
49
67
  return {
50
- x: this.flowSettingsService.computedFlowWidth() - this.minimapWidth() - this.minimapOffset,
51
- y: this.flowSettingsService.computedFlowHeight() - this.minimapHeight() - this.minimapOffset
68
+ x: this.flowSettingsService.computedFlowWidth() -
69
+ this.minimapWidth() -
70
+ this.minimapOffset,
71
+ y: this.flowSettingsService.computedFlowHeight() -
72
+ this.minimapHeight() -
73
+ this.minimapOffset,
52
74
  };
53
75
  }
54
76
  });
@@ -75,45 +97,20 @@ export class MiniMapComponent {
75
97
  const scale = vport.zoom * this.minimapScale();
76
98
  return `translate(${x} ${y}) scale(${scale})`;
77
99
  });
78
- this.minimapPosition = signal('bottom-right');
79
- this.scaleOnHoverSignal = signal(false);
80
- }
81
- /**
82
- * The corner of the flow where to render a mini-map
83
- */
84
- set position(value) {
85
- this.minimapPosition.set(value);
86
- }
87
- /**
88
- * Make a minimap bigger on hover
89
- */
90
- set scaleOnHover(value) {
91
- this.scaleOnHoverSignal.set(value);
92
100
  }
93
101
  ngOnInit() {
94
102
  const model = new MinimapModel();
95
- model.template.set(this.minimap);
103
+ model.template.set(this.minimap());
96
104
  this.entitiesService.minimap.set(model);
97
105
  }
98
106
  trackNodes(idx, { node }) {
99
107
  return node;
100
108
  }
101
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MiniMapComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
102
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: MiniMapComponent, selector: "mini-map", inputs: { position: "position", maskColor: "maskColor", strokeColor: "strokeColor", scaleOnHover: "scaleOnHover" }, viewQueries: [{ propertyName: "minimap", first: true, predicate: ["minimap"], descendants: true, static: true }], ngImport: i0, template: "<ng-template #minimap>\n <svg:rect\n [attr.x]=\"minimapPoint().x\"\n [attr.y]=\"minimapPoint().y\"\n [attr.width]=\"minimapWidth()\"\n [attr.height]=\"minimapHeight()\"\n [attr.stroke]=\"strokeColor\"\n fill=\"none\"\n />\n\n <svg:svg\n [attr.x]=\"minimapPoint().x\"\n [attr.y]=\"minimapPoint().y\"\n [attr.width]=\"minimapWidth()\"\n [attr.height]=\"minimapHeight()\"\n (mouseover)=\"hovered.set(true)\"\n (mouseleave)=\"hovered.set(false)\"\n >\n <svg:rect\n [attr.width]=\"minimapWidth()\"\n [attr.height]=\"minimapHeight()\"\n [attr.fill]=\"maskColor\"\n />\n\n <svg:g [attr.transform]=\"minimapTransform()\">\n <svg:rect\n [attr.fill]=\"viewportColor()\"\n [attr.transform]=\"viewportTransform()\"\n [attr.width]=\"minimapWidth()\"\n [attr.height]=\"minimapHeight()\"\n />\n\n <ng-container\n *ngFor=\"let model of entitiesService.nodes(); trackBy: trackNodes\"\n >\n <svg:foreignObject\n *ngIf=\"model.node.type === 'default' || model.node.type === 'html-template' || model.isComponentType\"\n [attr.transform]=\"model.pointTransform()\"\n [attr.width]=\"model.size().width\"\n [attr.height]=\"model.size().height\"\n >\n <default-node\n [selected]=\"model.selected()\"\n [style.width.px]=\"model.size().width\"\n [style.height.px]=\"model.size().height\"\n [style.max-width.px]=\"model.size().width\"\n [style.max-height.px]=\"model.size().height\"\n >\n <div [outerHTML]=\"model.text()\"></div>\n </default-node>\n </svg:foreignObject>\n\n <svg:rect\n *ngIf=\"model.node.type === 'default-group' || model.node.type === 'template-group'\"\n class=\"default-group-node\"\n rx=\"5\"\n ry=\"5\"\n [attr.transform]=\"model.pointTransform()\"\n [class.default-group-node_selected]=\"model.selected()\"\n [attr.width]=\"model.size().width\"\n [attr.height]=\"model.size().height\"\n [style.stroke]=\"model.color()\"\n [style.fill]=\"model.color()\"\n />\n\n </ng-container>\n </svg:g>\n </svg:svg>\n</ng-template>\n", styles: [".default-group-node{stroke-width:1.5px;fill-opacity:.05}.default-group-node_selected{stroke-width:2px}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i2.DefaultNodeComponent, selector: "default-node", inputs: ["selected"] }] }); }
109
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MiniMapComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
110
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: MiniMapComponent, isStandalone: true, selector: "mini-map", inputs: { maskColor: { classPropertyName: "maskColor", publicName: "maskColor", isSignal: true, isRequired: false, transformFunction: null }, strokeColor: { classPropertyName: "strokeColor", publicName: "strokeColor", isSignal: true, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, scaleOnHover: { classPropertyName: "scaleOnHover", publicName: "scaleOnHover", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "minimap", first: true, predicate: ["minimap"], descendants: true, isSignal: true }], ngImport: i0, template: "<ng-template #minimap>\n <svg:rect\n [attr.x]=\"minimapPoint().x\"\n [attr.y]=\"minimapPoint().y\"\n [attr.width]=\"minimapWidth()\"\n [attr.height]=\"minimapHeight()\"\n [attr.stroke]=\"strokeColor()\"\n fill=\"none\"\n />\n\n <svg:svg\n [attr.x]=\"minimapPoint().x\"\n [attr.y]=\"minimapPoint().y\"\n [attr.width]=\"minimapWidth()\"\n [attr.height]=\"minimapHeight()\"\n (mouseover)=\"hovered.set(true)\"\n (mouseleave)=\"hovered.set(false)\"\n >\n <svg:rect\n [attr.width]=\"minimapWidth()\"\n [attr.height]=\"minimapHeight()\"\n [attr.fill]=\"maskColor()\"\n />\n\n <svg:g [attr.transform]=\"minimapTransform()\">\n <svg:rect\n [attr.fill]=\"viewportColor()\"\n [attr.transform]=\"viewportTransform()\"\n [attr.width]=\"minimapWidth()\"\n [attr.height]=\"minimapHeight()\"\n />\n\n @for (model of entitiesService.nodes(); track trackNodes($index, model)) {\n <ng-container>\n @if (\n model.node.type === \"default\" ||\n model.node.type === \"html-template\" ||\n model.isComponentType\n ) {\n <svg:foreignObject\n [attr.transform]=\"model.pointTransform()\"\n [attr.width]=\"model.size().width\"\n [attr.height]=\"model.size().height\"\n >\n <default-node\n [selected]=\"model.selected()\"\n [style.width.px]=\"model.size().width\"\n [style.height.px]=\"model.size().height\"\n [style.max-width.px]=\"model.size().width\"\n [style.max-height.px]=\"model.size().height\"\n >\n <div [outerHTML]=\"model.text()\"></div>\n </default-node>\n </svg:foreignObject>\n }\n @if (\n model.node.type === \"default-group\" ||\n model.node.type === \"template-group\"\n ) {\n <svg:rect\n class=\"default-group-node\"\n rx=\"5\"\n ry=\"5\"\n [attr.transform]=\"model.pointTransform()\"\n [class.default-group-node_selected]=\"model.selected()\"\n [attr.width]=\"model.size().width\"\n [attr.height]=\"model.size().height\"\n [style.stroke]=\"model.color()\"\n [style.fill]=\"model.color()\"\n />\n }\n </ng-container>\n }\n </svg:g>\n </svg:svg>\n</ng-template>\n", styles: [".default-group-node{stroke-width:1.5px;fill-opacity:.05}.default-group-node_selected{stroke-width:2px}\n"], dependencies: [{ kind: "component", type: DefaultNodeComponent, selector: "default-node", inputs: ["selected"] }] }); }
103
111
  }
104
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MiniMapComponent, decorators: [{
112
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MiniMapComponent, decorators: [{
105
113
  type: Component,
106
- args: [{ selector: 'mini-map', template: "<ng-template #minimap>\n <svg:rect\n [attr.x]=\"minimapPoint().x\"\n [attr.y]=\"minimapPoint().y\"\n [attr.width]=\"minimapWidth()\"\n [attr.height]=\"minimapHeight()\"\n [attr.stroke]=\"strokeColor\"\n fill=\"none\"\n />\n\n <svg:svg\n [attr.x]=\"minimapPoint().x\"\n [attr.y]=\"minimapPoint().y\"\n [attr.width]=\"minimapWidth()\"\n [attr.height]=\"minimapHeight()\"\n (mouseover)=\"hovered.set(true)\"\n (mouseleave)=\"hovered.set(false)\"\n >\n <svg:rect\n [attr.width]=\"minimapWidth()\"\n [attr.height]=\"minimapHeight()\"\n [attr.fill]=\"maskColor\"\n />\n\n <svg:g [attr.transform]=\"minimapTransform()\">\n <svg:rect\n [attr.fill]=\"viewportColor()\"\n [attr.transform]=\"viewportTransform()\"\n [attr.width]=\"minimapWidth()\"\n [attr.height]=\"minimapHeight()\"\n />\n\n <ng-container\n *ngFor=\"let model of entitiesService.nodes(); trackBy: trackNodes\"\n >\n <svg:foreignObject\n *ngIf=\"model.node.type === 'default' || model.node.type === 'html-template' || model.isComponentType\"\n [attr.transform]=\"model.pointTransform()\"\n [attr.width]=\"model.size().width\"\n [attr.height]=\"model.size().height\"\n >\n <default-node\n [selected]=\"model.selected()\"\n [style.width.px]=\"model.size().width\"\n [style.height.px]=\"model.size().height\"\n [style.max-width.px]=\"model.size().width\"\n [style.max-height.px]=\"model.size().height\"\n >\n <div [outerHTML]=\"model.text()\"></div>\n </default-node>\n </svg:foreignObject>\n\n <svg:rect\n *ngIf=\"model.node.type === 'default-group' || model.node.type === 'template-group'\"\n class=\"default-group-node\"\n rx=\"5\"\n ry=\"5\"\n [attr.transform]=\"model.pointTransform()\"\n [class.default-group-node_selected]=\"model.selected()\"\n [attr.width]=\"model.size().width\"\n [attr.height]=\"model.size().height\"\n [style.stroke]=\"model.color()\"\n [style.fill]=\"model.color()\"\n />\n\n </ng-container>\n </svg:g>\n </svg:svg>\n</ng-template>\n", styles: [".default-group-node{stroke-width:1.5px;fill-opacity:.05}.default-group-node_selected{stroke-width:2px}\n"] }]
107
- }], propDecorators: { position: [{
108
- type: Input
109
- }], maskColor: [{
110
- type: Input
111
- }], strokeColor: [{
112
- type: Input
113
- }], scaleOnHover: [{
114
- type: Input
115
- }], minimap: [{
116
- type: ViewChild,
117
- args: ['minimap', { static: true }]
118
- }] } });
119
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWluaW1hcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmZsb3ctbGliL3NyYy9saWIvdmZsb3cvcHVibGljLWNvbXBvbmVudHMvbWluaW1hcC9taW5pbWFwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC12Zmxvdy1saWIvc3JjL2xpYi92Zmxvdy9wdWJsaWMtY29tcG9uZW50cy9taW5pbWFwL21pbmltYXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFlLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNySCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFMUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7OztBQVNsRSxNQUFNLE9BQU8sZ0JBQWdCO0lBTDdCO1FBTVksb0JBQWUsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQTtRQUM3Qyx3QkFBbUIsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQTtRQUNqRCxvQkFBZSxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQTtRQUN6QyxhQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBVXJDOztXQUVHO1FBRUksY0FBUyxH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eEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDakMsQ0FBQztJQWNEOztPQUVHO0lBQ0gsSUFDVyxZQUFZLENBQUMsS0FBYztRQUNwQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3BDLENBQUM7SUE0Rk0sUUFBUTtRQUNiLE1BQU0sS0FBSyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUE7UUFDaEMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBRWhDLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUN6QyxDQUFDO0lBRVMsVUFBVSxDQUFDLEdBQVcsRUFBRSxFQUFFLElBQUksRUFBYTtRQUNuRCxPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7K0dBcklVLGdCQUFnQjttR0FBaEIsZ0JBQWdCLHNSQ2hCN0IsNHZFQXFFQTs7NEZEckRhLGdCQUFnQjtrQkFMNUIsU0FBUzsrQkFDRSxVQUFVOzhCQWNULFFBQVE7c0JBRGxCLEtBQUs7Z0JBU0MsU0FBUztzQkFEZixLQUFLO2dCQU9DLFdBQVc7c0JBRGpCLEtBQUs7Z0JBT0ssWUFBWTtzQkFEdEIsS0FBSztnQkFNRSxPQUFPO3NCQURkLFNBQVM7dUJBQUMsU0FBUyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgY29tcHV0ZWQsIGluamVjdCwgSW5qZWN0b3IsIElucHV0LCBPbkluaXQsIHNpZ25hbCwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRmxvd0VudGl0aWVzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Zsb3ctZW50aXRpZXMuc2VydmljZSc7XG5pbXBvcnQgeyBNaW5pbWFwTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvbWluaW1hcC5tb2RlbCc7XG5pbXBvcnQgeyBOb2RlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvbm9kZS5tb2RlbCc7XG5pbXBvcnQgeyBGbG93U2V0dGluZ3NTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmxvdy1zZXR0aW5ncy5zZXJ2aWNlJztcbmltcG9ydCB7IGdldFZpZXdwb3J0Rm9yQm91bmRzIH0gZnJvbSAnLi4vLi4vdXRpbHMvdmlld3BvcnQnO1xuaW1wb3J0IHsgZ2V0Tm9kZXNCb3VuZHMgfSBmcm9tICcuLi8uLi91dGlscy9ub2Rlcyc7XG5pbXBvcnQgeyBWaWV3cG9ydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy92aWV3cG9ydC5zZXJ2aWNlJztcblxuZXhwb3J0IHR5cGUgTWluaU1hcFBvc2l0aW9uID0gJ3RvcC1sZWZ0JyB8ICd0b3AtcmlnaHQnIHwgJ2JvdHRvbS1sZWZ0JyB8ICdib3R0b20tcmlnaHQnXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21pbmktbWFwJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21pbmltYXAuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFtgLi9taW5pbWFwLmNvbXBvbmVudC5zY3NzYF1cbn0pXG5leHBvcnQgY2xhc3MgTWluaU1hcENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHByb3RlY3RlZCBlbnRpdGllc1NlcnZpY2UgPSBpbmplY3QoRmxvd0VudGl0aWVzU2VydmljZSlcbiAgcHJvdGVjdGVkIGZsb3dTZXR0aW5nc1NlcnZpY2UgPSBpbmplY3QoRmxvd1NldHRpbmdzU2VydmljZSlcbiAgcHJvdGVjdGVkIHZpZXdwb3J0U2VydmljZSA9IGluamVjdChWaWV3cG9ydFNlcnZpY2UpXG4gIHByb3RlY3RlZCBpbmplY3RvciA9IGluamVjdChJbmplY3RvcilcblxuICAvKipcbiAgICogVGhlIGNvcm5lciBvZiB0aGUgZmxvdyB3aGVyZSB0byByZW5kZXIgYSBtaW5pLW1hcFxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBwb3NpdGlvbih2YWx1ZTogTWluaU1hcFBvc2l0aW9uKSB7XG4gICAgdGhpcy5taW5pbWFwUG9zaXRpb24uc2V0KHZhbHVlKVxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBjb2xvciBvdXRzaWRlIHRoZSB2aWV3cG9ydCAoaW52aXNpYmxlIGFyZWEpXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgbWFza0NvbG9yID0gYHJnYmEoMjE1LCAyMTUsIDIxNSwgMC42KWBcblxuICAvKipcbiAgICogVGhlIG1pbmltYXAgc3Ryb2tlIGNvbG9yXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc3Ryb2tlQ29sb3IgPSBgcmdiKDIwMCwgMjAwLCAyMDApYFxuXG4gIC8qKlxuICAgKiBNYWtlIGEgbWluaW1hcCBiaWdnZXIgb24gaG92ZXJcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgc2NhbGVPbkhvdmVyKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5zY2FsZU9uSG92ZXJTaWduYWwuc2V0KHZhbHVlKVxuICB9XG5cbiAgQFZpZXdDaGlsZCgnbWluaW1hcCcsIHsgc3RhdGljOiB0cnVlIH0pXG4gIHByaXZhdGUgbWluaW1hcCE6IFRlbXBsYXRlUmVmPHVua25vd24+XG5cbiAgcHJpdmF0ZSByZWFkb25seSBtaW5pbWFwT2Zmc2V0ID0gMTBcblxuICBwcml2YXRlIHJlYWRvbmx5IG1pbmltYXBTY2FsZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBpZiAodGhpcy5zY2FsZU9uSG92ZXJTaWduYWwoKSkge1xuICAgICAgcmV0dXJuIHRoaXMuaG92ZXJlZCgpID8gMC40IDogMC4yXG4gICAgfVxuXG4gICAgcmV0dXJuIDAuMlxuICB9KVxuXG4gIHByb3RlY3RlZCB2aWV3cG9ydENvbG9yID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5mbG93U2V0dGluZ3NTZXJ2aWNlLmJhY2tncm91bmQoKS5jb2xvciA/PyAnI2ZmZicpXG5cbiAgcHJvdGVjdGVkIGhvdmVyZWQgPSBzaWduYWwoZmFsc2UpXG5cbiAgcHJvdGVjdGVkIG1pbmltYXBQb2ludCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBzd2l0Y2ggKHRoaXMubWluaW1hcFBvc2l0aW9uKCkpIHtcbiAgICAgIGNhc2UgJ3RvcC1sZWZ0JzpcbiAgICAgICAgcmV0dXJuIHsgeDogdGhpcy5taW5pbWFwT2Zmc2V0LCB5OiB0aGlzLm1pbmltYXBPZmZzZXQgfVxuICAgICAgY2FzZSAndG9wLXJpZ2h0JzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB4OiB0aGlzLmZsb3dTZXR0aW5nc1NlcnZpY2UuY29tcHV0ZWRGbG93V2lkdGgoKSAtIHRoaXMubWluaW1hcFdpZHRoKCkgLSB0aGlzLm1pbmltYXBPZmZzZXQsXG4gICAgICAgICAgeTogdGhpcy5taW5pbWFwT2Zmc2V0XG4gICAgICAgIH1cbiAgICAgIGNhc2UgJ2JvdHRvbS1sZWZ0JzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB4OiB0aGlzLm1pbmltYXBPZmZzZXQsXG4gICAgICAgICAgeTogdGhpcy5mbG93U2V0dGluZ3NTZXJ2aWNlLmNvbXB1dGVkRmxvd0hlaWdodCgpIC0gdGhpcy5taW5pbWFwSGVpZ2h0KCkgLSB0aGlzLm1pbmltYXBPZmZzZXRcbiAgICAgICAgfVxuICAgICAgY2FzZSAnYm90dG9tLXJpZ2h0JzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB4OiB0aGlzLmZsb3dTZXR0aW5nc1NlcnZpY2UuY29tcHV0ZWRGbG93V2lkdGgoKSAtIHRoaXMubWluaW1hcFdpZHRoKCkgLSB0aGlzLm1pbmltYXBPZmZzZXQsXG4gICAgICAgICAgeTogdGhpcy5mbG93U2V0dGluZ3NTZXJ2aWNlLmNvbXB1dGVkRmxvd0hlaWdodCgpIC0gdGhpcy5taW5pbWFwSGVpZ2h0KCkgLSB0aGlzLm1pbmltYXBPZmZzZXRcbiAgICAgICAgfVxuICAgIH1cbiAgfSlcblxuICBwcm90ZWN0ZWQgbWluaW1hcFdpZHRoID0gY29tcHV0ZWQoKCkgPT5cbiAgICB0aGlzLmZsb3dTZXR0aW5nc1NlcnZpY2UuY29tcHV0ZWRGbG93V2lkdGgoKSAqIHRoaXMubWluaW1hcFNjYWxlKClcbiAgKVxuICBwcm90ZWN0ZWQgbWluaW1hcEhlaWdodCA9IGNvbXB1dGVkKCgpID0+XG4gICAgdGhpcy5mbG93U2V0dGluZ3NTZXJ2aWNlLmNvbXB1dGVkRmxvd0hlaWdodCgpICogdGhpcy5taW5pbWFwU2NhbGUoKVxuICApXG5cbiAgcHJvdGVjdGVkIHZpZXdwb3J0VHJhbnNmb3JtID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHZpZXdwb3J0ID0gdGhpcy52aWV3cG9ydFNlcnZpY2UucmVhZGFibGVWaWV3cG9ydCgpO1xuICAgIGxldCBzY2FsZSA9IDEgLyB2aWV3cG9ydC56b29tXG5cbiAgICBsZXQgeCA9IC0odmlld3BvcnQueCAqIHRoaXMubWluaW1hcFNjYWxlKCkpICogc2NhbGVcbiAgICB4IC89IHRoaXMubWluaW1hcFNjYWxlKClcblxuICAgIGxldCB5ID0gLSh2aWV3cG9ydC55ICogdGhpcy5taW5pbWFwU2NhbGUoKSkgKiBzY2FsZVxuICAgIHkgLz0gdGhpcy5taW5pbWFwU2NhbGUoKVxuXG4gICAgc2NhbGUgLz0gdGhpcy5taW5pbWFwU2NhbGUoKVxuXG4gICAgcmV0dXJuIGB0cmFuc2xhdGUoJHt4fSwgJHt5fSkgc2NhbGUoJHtzY2FsZX0pYDtcbiAgfSk7XG5cblxuICBwcm90ZWN0ZWQgYm91bmRzVmlld3BvcnQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLmVudGl0aWVzU2VydmljZS5ub2RlcygpXG5cbiAgICByZXR1cm4gZ2V0Vmlld3BvcnRGb3JCb3VuZHMoXG4gICAgICBnZXROb2Rlc0JvdW5kcyhub2RlcyksXG4gICAgICB0aGlzLmZsb3dTZXR0aW5nc1NlcnZpY2UuY29tcHV0ZWRGbG93V2lkdGgoKSxcbiAgICAgIHRoaXMuZmxvd1NldHRpbmdzU2VydmljZS5jb21wdXRlZEZsb3dIZWlnaHQoKSxcbiAgICAgIC1JbmZpbml0eSxcbiAgICAgIDEuNSxcbiAgICAgIDBcbiAgICApXG5cbiAgfSlcblxuICBwcm90ZWN0ZWQgbWluaW1hcFRyYW5zZm9ybSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCB2cG9ydCA9IHRoaXMuYm91bmRzVmlld3BvcnQoKVxuXG4gICAgY29uc3QgeCA9IHZwb3J0LnggKiB0aGlzLm1pbmltYXBTY2FsZSgpXG4gICAgY29uc3QgeSA9IHZwb3J0LnkgKiB0aGlzLm1pbmltYXBTY2FsZSgpXG4gICAgY29uc3Qgc2NhbGUgPSB2cG9ydC56b29tICogdGhpcy5taW5pbWFwU2NhbGUoKVxuXG4gICAgcmV0dXJuIGB0cmFuc2xhdGUoJHt4fSAke3l9KSBzY2FsZSgke3NjYWxlfSlgXG4gIH0pXG5cbiAgcHJpdmF0ZSBtaW5pbWFwUG9zaXRpb24gPSBzaWduYWw8TWluaU1hcFBvc2l0aW9uPignYm90dG9tLXJpZ2h0JylcblxuICBwcml2YXRlIHNjYWxlT25Ib3ZlclNpZ25hbCA9IHNpZ25hbChmYWxzZSlcblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgY29uc3QgbW9kZWwgPSBuZXcgTWluaW1hcE1vZGVsKClcbiAgICBtb2RlbC50ZW1wbGF0ZS5zZXQodGhpcy5taW5pbWFwKVxuXG4gICAgdGhpcy5lbnRpdGllc1NlcnZpY2UubWluaW1hcC5zZXQobW9kZWwpXG4gIH1cblxuICBwcm90ZWN0ZWQgdHJhY2tOb2RlcyhpZHg6IG51bWJlciwgeyBub2RlIH06IE5vZGVNb2RlbCkge1xuICAgIHJldHVybiBub2RlXG4gIH1cbn1cbiIsIjxuZy10ZW1wbGF0ZSAjbWluaW1hcD5cbiAgPHN2ZzpyZWN0XG4gICAgW2F0dHIueF09XCJtaW5pbWFwUG9pbnQoKS54XCJcbiAgICBbYXR0ci55XT1cIm1pbmltYXBQb2ludCgpLnlcIlxuICAgIFthdHRyLndpZHRoXT1cIm1pbmltYXBXaWR0aCgpXCJcbiAgICBbYXR0ci5oZWlnaHRdPVwibWluaW1hcEhlaWdodCgpXCJcbiAgICBbYXR0ci5zdHJva2VdPVwic3Ryb2tlQ29sb3JcIlxuICAgIGZpbGw9XCJub25lXCJcbiAgLz5cblxuICA8c3ZnOnN2Z1xuICAgIFthdHRyLnhdPVwibWluaW1hcFBvaW50KCkueFwiXG4gICAgW2F0dHIueV09XCJtaW5pbWFwUG9pbnQoKS55XCJcbiAgICBbYXR0ci53aWR0aF09XCJtaW5pbWFwV2lkdGgoKVwiXG4gICAgW2F0dHIuaGVpZ2h0XT1cIm1pbmltYXBIZWlnaHQoKVwiXG4gICAgKG1vdXNlb3Zlcik9XCJob3ZlcmVkLnNldCh0cnVlKVwiXG4gICAgKG1vdXNlbGVhdmUpPVwiaG92ZXJlZC5zZXQoZmFsc2UpXCJcbiAgPlxuICAgIDxzdmc6cmVjdFxuICAgICAgW2F0dHIud2lkdGhdPVwibWluaW1hcFdpZHRoKClcIlxuICAgICAgW2F0dHIuaGVpZ2h0XT1cIm1pbmltYXBIZWlnaHQoKVwiXG4gICAgICBbYXR0ci5maWxsXT1cIm1hc2tDb2xvclwiXG4gICAgLz5cblxuICAgIDxzdmc6ZyBbYXR0ci50cmFuc2Zvcm1dPVwibWluaW1hcFRyYW5zZm9ybSgpXCI+XG4gICAgICA8c3ZnOnJlY3RcbiAgICAgICAgW2F0dHIuZmlsbF09XCJ2aWV3cG9ydENvbG9yKClcIlxuICAgICAgICBbYXR0ci50cmFuc2Zvcm1dPVwidmlld3BvcnRUcmFuc2Zvcm0oKVwiXG4gICAgICAgIFthdHRyLndpZHRoXT1cIm1pbmltYXBXaWR0aCgpXCJcbiAgICAgICAgW2F0dHIuaGVpZ2h0XT1cIm1pbmltYXBIZWlnaHQoKVwiXG4gICAgICAvPlxuXG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ0Zvcj1cImxldCBtb2RlbCBvZiBlbnRpdGllc1NlcnZpY2Uubm9kZXMoKTsgdHJhY2tCeTogdHJhY2tOb2Rlc1wiXG4gICAgICA+XG4gICAgICAgIDxzdmc6Zm9yZWlnbk9iamVjdFxuICAgICAgICAgICpuZ0lmPVwibW9kZWwubm9kZS50eXBlID09PSAnZGVmYXVsdCcgfHwgbW9kZWwubm9kZS50eXBlID09PSAnaHRtbC10ZW1wbGF0ZScgfHwgbW9kZWwuaXNDb21wb25lbnRUeXBlXCJcbiAgICAgICAgICBbYXR0ci50cmFuc2Zvcm1dPVwibW9kZWwucG9pbnRUcmFuc2Zvcm0oKVwiXG4gICAgICAgICAgW2F0dHIud2lkdGhdPVwibW9kZWwuc2l6ZSgpLndpZHRoXCJcbiAgICAgICAgICBbYXR0ci5oZWlnaHRdPVwibW9kZWwuc2l6ZSgpLmhlaWdodFwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGVmYXVsdC1ub2RlXG4gICAgICAgICAgICBbc2VsZWN0ZWRdPVwibW9kZWwuc2VsZWN0ZWQoKVwiXG4gICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwibW9kZWwuc2l6ZSgpLndpZHRoXCJcbiAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwibW9kZWwuc2l6ZSgpLmhlaWdodFwiXG4gICAgICAgICAgICBbc3R5bGUubWF4LXdpZHRoLnB4XT1cIm1vZGVsLnNpemUoKS53aWR0aFwiXG4gICAgICAgICAgICBbc3R5bGUubWF4LWhlaWdodC5weF09XCJtb2RlbC5zaXplKCkuaGVpZ2h0XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IFtvdXRlckhUTUxdPVwibW9kZWwudGV4dCgpXCI+PC9kaXY+XG4gICAgICAgICAgPC9kZWZhdWx0LW5vZGU+XG4gICAgICAgIDwvc3ZnOmZvcmVpZ25PYmplY3Q+XG5cbiAgICAgICAgPHN2ZzpyZWN0XG4gICAgICAgICAgKm5nSWY9XCJtb2RlbC5ub2RlLnR5cGUgPT09ICdkZWZhdWx0LWdyb3VwJyB8fCBtb2RlbC5ub2RlLnR5cGUgPT09ICd0ZW1wbGF0ZS1ncm91cCdcIlxuICAgICAgICAgIGNsYXNzPVwiZGVmYXVsdC1ncm91cC1ub2RlXCJcbiAgICAgICAgICByeD1cIjVcIlxuICAgICAgICAgIHJ5PVwiNVwiXG4gICAgICAgICAgW2F0dHIudHJhbnNmb3JtXT1cIm1vZGVsLnBvaW50VHJhbnNmb3JtKClcIlxuICAgICAgICAgIFtjbGFzcy5kZWZhdWx0LWdyb3VwLW5vZGVfc2VsZWN0ZWRdPVwibW9kZWwuc2VsZWN0ZWQoKVwiXG4gICAgICAgICAgW2F0dHIud2lkdGhdPVwibW9kZWwuc2l6ZSgpLndpZHRoXCJcbiAgICAgICAgICBbYXR0ci5oZWlnaHRdPVwibW9kZWwuc2l6ZSgpLmhlaWdodFwiXG4gICAgICAgICAgW3N0eWxlLnN0cm9rZV09XCJtb2RlbC5jb2xvcigpXCJcbiAgICAgICAgICBbc3R5bGUuZmlsbF09XCJtb2RlbC5jb2xvcigpXCJcbiAgICAgICAgLz5cblxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9zdmc6Zz5cbiAgPC9zdmc6c3ZnPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
114
+ args: [{ standalone: true, selector: 'mini-map', imports: [DefaultNodeComponent], template: "<ng-template #minimap>\n <svg:rect\n [attr.x]=\"minimapPoint().x\"\n [attr.y]=\"minimapPoint().y\"\n [attr.width]=\"minimapWidth()\"\n [attr.height]=\"minimapHeight()\"\n [attr.stroke]=\"strokeColor()\"\n fill=\"none\"\n />\n\n <svg:svg\n [attr.x]=\"minimapPoint().x\"\n [attr.y]=\"minimapPoint().y\"\n [attr.width]=\"minimapWidth()\"\n [attr.height]=\"minimapHeight()\"\n (mouseover)=\"hovered.set(true)\"\n (mouseleave)=\"hovered.set(false)\"\n >\n <svg:rect\n [attr.width]=\"minimapWidth()\"\n [attr.height]=\"minimapHeight()\"\n [attr.fill]=\"maskColor()\"\n />\n\n <svg:g [attr.transform]=\"minimapTransform()\">\n <svg:rect\n [attr.fill]=\"viewportColor()\"\n [attr.transform]=\"viewportTransform()\"\n [attr.width]=\"minimapWidth()\"\n [attr.height]=\"minimapHeight()\"\n />\n\n @for (model of entitiesService.nodes(); track trackNodes($index, model)) {\n <ng-container>\n @if (\n model.node.type === \"default\" ||\n model.node.type === \"html-template\" ||\n model.isComponentType\n ) {\n <svg:foreignObject\n [attr.transform]=\"model.pointTransform()\"\n [attr.width]=\"model.size().width\"\n [attr.height]=\"model.size().height\"\n >\n <default-node\n [selected]=\"model.selected()\"\n [style.width.px]=\"model.size().width\"\n [style.height.px]=\"model.size().height\"\n [style.max-width.px]=\"model.size().width\"\n [style.max-height.px]=\"model.size().height\"\n >\n <div [outerHTML]=\"model.text()\"></div>\n </default-node>\n </svg:foreignObject>\n }\n @if (\n model.node.type === \"default-group\" ||\n model.node.type === \"template-group\"\n ) {\n <svg:rect\n class=\"default-group-node\"\n rx=\"5\"\n ry=\"5\"\n [attr.transform]=\"model.pointTransform()\"\n [class.default-group-node_selected]=\"model.selected()\"\n [attr.width]=\"model.size().width\"\n [attr.height]=\"model.size().height\"\n [style.stroke]=\"model.color()\"\n [style.fill]=\"model.color()\"\n />\n }\n </ng-container>\n }\n </svg:g>\n </svg:svg>\n</ng-template>\n", styles: [".default-group-node{stroke-width:1.5px;fill-opacity:.05}.default-group-node_selected{stroke-width:2px}\n"] }]
115
+ }] });
116
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWluaW1hcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmZsb3ctbGliL3NyYy9saWIvdmZsb3cvcHVibGljLWNvbXBvbmVudHMvbWluaW1hcC9taW5pbWFwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC12Zmxvdy1saWIvc3JjL2xpYi92Zmxvdy9wdWJsaWMtY29tcG9uZW50cy9taW5pbWFwL21pbmltYXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFFBQVEsRUFHUixNQUFNLEVBRU4sS0FBSyxFQUNMLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFMUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzREFBc0QsQ0FBQzs7QUFlNUYsTUFBTSxPQUFPLGdCQUFnQjtJQVA3QjtRQVFZLG9CQUFlLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDOUMsd0JBQW1CLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDbEQsb0JBQWUsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDMUMsYUFBUSxHQUFHLE1BQU0s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QUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUVwQyxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN4QyxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN4QyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUUvQyxPQUFPLGFBQWEsQ0FBQyxJQUFJLENBQUMsV0FBVyxLQUFLLEdBQUcsQ0FBQztRQUNoRCxDQUFDLENBQUMsQ0FBQztLQVlKO0lBVlEsUUFBUTtRQUNiLE1BQU0sS0FBSyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDakMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFFbkMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFUyxVQUFVLENBQUMsR0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFhO1FBQ25ELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzsrR0ExSVUsZ0JBQWdCO21HQUFoQixnQkFBZ0IsZ3VCQ2xDN0IscytFQTRFQSxrS0Q1Q1ksb0JBQW9COzs0RkFFbkIsZ0JBQWdCO2tCQVA1QixTQUFTO2lDQUNJLElBQUksWUFDTixVQUFVLFdBR1gsQ0FBQyxvQkFBb0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgY29tcHV0ZWQsXG4gIGluamVjdCxcbiAgSW5qZWN0b3IsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIHNpZ25hbCxcbiAgVGVtcGxhdGVSZWYsXG4gIGlucHV0LFxuICB2aWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRmxvd0VudGl0aWVzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Zsb3ctZW50aXRpZXMuc2VydmljZSc7XG5pbXBvcnQgeyBNaW5pbWFwTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvbWluaW1hcC5tb2RlbCc7XG5pbXBvcnQgeyBOb2RlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvbm9kZS5tb2RlbCc7XG5pbXBvcnQgeyBGbG93U2V0dGluZ3NTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmxvdy1zZXR0aW5ncy5zZXJ2aWNlJztcbmltcG9ydCB7IGdldFZpZXdwb3J0Rm9yQm91bmRzIH0gZnJvbSAnLi4vLi4vdXRpbHMvdmlld3BvcnQnO1xuaW1wb3J0IHsgZ2V0Tm9kZXNCb3VuZHMgfSBmcm9tICcuLi8uLi91dGlscy9ub2Rlcyc7XG5pbXBvcnQgeyBWaWV3cG9ydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy92aWV3cG9ydC5zZXJ2aWNlJztcbmltcG9ydCB7IERlZmF1bHROb2RlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9kZWZhdWx0LW5vZGUvZGVmYXVsdC1ub2RlLmNvbXBvbmVudCc7XG5cbmV4cG9ydCB0eXBlIE1pbmlNYXBQb3NpdGlvbiA9XG4gIHwgJ3RvcC1sZWZ0J1xuICB8ICd0b3AtcmlnaHQnXG4gIHwgJ2JvdHRvbS1sZWZ0J1xuICB8ICdib3R0b20tcmlnaHQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICdtaW5pLW1hcCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9taW5pbWFwLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbYC4vbWluaW1hcC5jb21wb25lbnQuc2Nzc2BdLFxuICBpbXBvcnRzOiBbRGVmYXVsdE5vZGVDb21wb25lbnRdLFxufSlcbmV4cG9ydCBjbGFzcyBNaW5pTWFwQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHJvdGVjdGVkIGVudGl0aWVzU2VydmljZSA9IGluamVjdChGbG93RW50aXRpZXNTZXJ2aWNlKTtcbiAgcHJvdGVjdGVkIGZsb3dTZXR0aW5nc1NlcnZpY2UgPSBpbmplY3QoRmxvd1NldHRpbmdzU2VydmljZSk7XG4gIHByb3RlY3RlZCB2aWV3cG9ydFNlcnZpY2UgPSBpbmplY3QoVmlld3BvcnRTZXJ2aWNlKTtcbiAgcHJvdGVjdGVkIGluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcblxuICAvKipcbiAgICogVGhlIGNvbG9yIG91dHNpZGUgdGhlIHZpZXdwb3J0IChpbnZpc2libGUgYXJlYSlcbiAgICovXG4gIHB1YmxpYyBtYXNrQ29sb3IgPSBpbnB1dChgcmdiYSgyMTUsIDIxNSwgMjE1LCAwLjYpYCk7XG5cbiAgLyoqXG4gICAqIFRoZSBtaW5pbWFwIHN0cm9rZSBjb2xvclxuICAgKi9cbiAgcHVibGljIHN0cm9rZUNvbG9yID0gaW5wdXQoYHJnYigyMDAsIDIwMCwgMjAwKWApO1xuXG4gIC8qKlxuICAgKiBUaGUgY29ybmVyIG9mIHRoZSBmbG93IHdoZXJlIHRvIHJlbmRlciBhIG1pbmktbWFwXG4gICAqL1xuICBwdWJsaWMgcG9zaXRpb24gPSBpbnB1dDxNaW5pTWFwUG9zaXRpb24+KCdib3R0b20tcmlnaHQnKTtcblxuICAvKipcbiAgICogTWFrZSBhIG1pbmltYXAgYmlnZ2VyIG9uIGhvdmVyXG4gICAqL1xuICBwdWJsaWMgc2NhbGVPbkhvdmVyID0gaW5wdXQoZmFsc2UpO1xuXG4gIHByaXZhdGUgbWluaW1hcCA9IHZpZXdDaGlsZC5yZXF1aXJlZDxUZW1wbGF0ZVJlZjx1bmtub3duPj4oJ21pbmltYXAnKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IG1pbmltYXBPZmZzZXQgPSAxMDtcblxuICBwcml2YXRlIHJlYWRvbmx5IG1pbmltYXBTY2FsZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBpZiAodGhpcy5zY2FsZU9uSG92ZXIoKSkge1xuICAgICAgcmV0dXJuIHRoaXMuaG92ZXJlZCgpID8gMC40IDogMC4yO1xuICAgIH1cblxuICAgIHJldHVybiAwLjI7XG4gIH0pO1xuXG4gIHByb3RlY3RlZCB2aWV3cG9ydENvbG9yID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGJnID0gdGhpcy5mbG93U2V0dGluZ3NTZXJ2aWNlLmJhY2tncm91bmQoKTtcblxuICAgIGlmIChiZy50eXBlID09PSAnZG90cycgfHwgYmcudHlwZSA9PT0gJ3NvbGlkJykge1xuICAgICAgcmV0dXJuIGJnLmNvbG9yID8/ICcjZmZmJztcbiAgICB9XG5cbiAgICByZXR1cm4gJyNmZmYnO1xuICB9KTtcblxuICBwcm90ZWN0ZWQgaG92ZXJlZCA9IHNpZ25hbChmYWxzZSk7XG5cbiAgcHJvdGVjdGVkIG1pbmltYXBQb2ludCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBzd2l0Y2ggKHRoaXMucG9zaXRpb24oKSkge1xuICAgICAgY2FzZSAndG9wLWxlZnQnOlxuICAgICAgICByZXR1cm4geyB4OiB0aGlzLm1pbmltYXBPZmZzZXQsIHk6IHRoaXMubWluaW1hcE9mZnNldCB9O1xuICAgICAgY2FzZSAndG9wLXJpZ2h0JzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB4OlxuICAgICAgICAgICAgdGhpcy5mbG93U2V0dGluZ3NTZXJ2aWNlLmNvbXB1dGVkRmxvd1dpZHRoKCkgLVxuICAgICAgICAgICAgdGhpcy5taW5pbWFwV2lkdGgoKSAtXG4gICAgICAgICAgICB0aGlzLm1pbmltYXBPZmZzZXQsXG4gICAgICAgICAgeTogdGhpcy5taW5pbWFwT2Zmc2V0LFxuICAgICAgICB9O1xuICAgICAgY2FzZSAnYm90dG9tLWxlZnQnOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHg6IHRoaXMubWluaW1hcE9mZnNldCxcbiAgICAgICAgICB5OlxuICAgICAgICAgICAgdGhpcy5mbG93U2V0dGluZ3NTZXJ2aWNlLmNvbXB1dGVkRmxvd0hlaWdodCgpIC1cbiAgICAgICAgICAgIHRoaXMubWluaW1hcEhlaWdodCgpIC1cbiAgICAgICAgICAgIHRoaXMubWluaW1hcE9mZnNldCxcbiAgICAgICAgfTtcbiAgICAgIGNhc2UgJ2JvdHRvbS1yaWdodCc6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgeDpcbiAgICAgICAgICAgIHRoaXMuZmxvd1NldHRpbmdzU2VydmljZS5jb21wdXRlZEZsb3dXaWR0aCgpIC1cbiAgICAgICAgICAgIHRoaXMubWluaW1hcFdpZHRoKCkgLVxuICAgICAgICAgICAgdGhpcy5taW5pbWFwT2Zmc2V0LFxuICAgICAgICAgIHk6XG4gICAgICAgICAgICB0aGlzLmZsb3dTZXR0aW5nc1NlcnZpY2UuY29tcHV0ZWRGbG93SGVpZ2h0KCkgLVxuICAgICAgICAgICAgdGhpcy5taW5pbWFwSGVpZ2h0KCkgLVxuICAgICAgICAgICAgdGhpcy5taW5pbWFwT2Zmc2V0LFxuICAgICAgICB9O1xuICAgIH1cbiAgfSk7XG5cbiAgcHJvdGVjdGVkIG1pbmltYXBXaWR0aCA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMuZmxvd1NldHRpbmdzU2VydmljZS5jb21wdXRlZEZsb3dXaWR0aCgpICogdGhpcy5taW5pbWFwU2NhbGUoKSxcbiAgKTtcbiAgcHJvdGVjdGVkIG1pbmltYXBIZWlnaHQgPSBjb21wdXRlZChcbiAgICAoKSA9PiB0aGlzLmZsb3dTZXR0aW5nc1NlcnZpY2UuY29tcHV0ZWRGbG93SGVpZ2h0KCkgKiB0aGlzLm1pbmltYXBTY2FsZSgpLFxuICApO1xuXG4gIHByb3RlY3RlZCB2aWV3cG9ydFRyYW5zZm9ybSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCB2aWV3cG9ydCA9IHRoaXMudmlld3BvcnRTZXJ2aWNlLnJlYWRhYmxlVmlld3BvcnQoKTtcbiAgICBsZXQgc2NhbGUgPSAxIC8gdmlld3BvcnQuem9vbTtcblxuICAgIGxldCB4ID0gLSh2aWV3cG9ydC54ICogdGhpcy5taW5pbWFwU2NhbGUoKSkgKiBzY2FsZTtcbiAgICB4IC89IHRoaXMubWluaW1hcFNjYWxlKCk7XG5cbiAgICBsZXQgeSA9IC0odmlld3BvcnQueSAqIHRoaXMubWluaW1hcFNjYWxlKCkpICogc2NhbGU7XG4gICAgeSAvPSB0aGlzLm1pbmltYXBTY2FsZSgpO1xuXG4gICAgc2NhbGUgLz0gdGhpcy5taW5pbWFwU2NhbGUoKTtcblxuICAgIHJldHVybiBgdHJhbnNsYXRlKCR7eH0sICR7eX0pIHNjYWxlKCR7c2NhbGV9KWA7XG4gIH0pO1xuXG4gIHByb3RlY3RlZCBib3VuZHNWaWV3cG9ydCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBub2RlcyA9IHRoaXMuZW50aXRpZXNTZXJ2aWNlLm5vZGVzKCk7XG5cbiAgICByZXR1cm4gZ2V0Vmlld3BvcnRGb3JCb3VuZHMoXG4gICAgICBnZXROb2Rlc0JvdW5kcyhub2RlcyksXG4gICAgICB0aGlzLmZsb3dTZXR0aW5nc1NlcnZpY2UuY29tcHV0ZWRGbG93V2lkdGgoKSxcbiAgICAgIHRoaXMuZmxvd1NldHRpbmdzU2VydmljZS5jb21wdXRlZEZsb3dIZWlnaHQoKSxcbiAgICAgIC1JbmZpbml0eSxcbiAgICAgIDEuNSxcbiAgICAgIDAsXG4gICAgKTtcbiAgfSk7XG5cbiAgcHJvdGVjdGVkIG1pbmltYXBUcmFuc2Zvcm0gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgdnBvcnQgPSB0aGlzLmJvdW5kc1ZpZXdwb3J0KCk7XG5cbiAgICBjb25zdCB4ID0gdnBvcnQueCAqIHRoaXMubWluaW1hcFNjYWxlKCk7XG4gICAgY29uc3QgeSA9IHZwb3J0LnkgKiB0aGlzLm1pbmltYXBTY2FsZSgpO1xuICAgIGNvbnN0IHNjYWxlID0gdnBvcnQuem9vbSAqIHRoaXMubWluaW1hcFNjYWxlKCk7XG5cbiAgICByZXR1cm4gYHRyYW5zbGF0ZSgke3h9ICR7eX0pIHNjYWxlKCR7c2NhbGV9KWA7XG4gIH0pO1xuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBjb25zdCBtb2RlbCA9IG5ldyBNaW5pbWFwTW9kZWwoKTtcbiAgICBtb2RlbC50ZW1wbGF0ZS5zZXQodGhpcy5taW5pbWFwKCkpO1xuXG4gICAgdGhpcy5lbnRpdGllc1NlcnZpY2UubWluaW1hcC5zZXQobW9kZWwpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHRyYWNrTm9kZXMoaWR4OiBudW1iZXIsIHsgbm9kZSB9OiBOb2RlTW9kZWwpIHtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxufVxuIiwiPG5nLXRlbXBsYXRlICNtaW5pbWFwPlxuICA8c3ZnOnJlY3RcbiAgICBbYXR0ci54XT1cIm1pbmltYXBQb2ludCgpLnhcIlxuICAgIFthdHRyLnldPVwibWluaW1hcFBvaW50KCkueVwiXG4gICAgW2F0dHIud2lkdGhdPVwibWluaW1hcFdpZHRoKClcIlxuICAgIFthdHRyLmhlaWdodF09XCJtaW5pbWFwSGVpZ2h0KClcIlxuICAgIFthdHRyLnN0cm9rZV09XCJzdHJva2VDb2xvcigpXCJcbiAgICBmaWxsPVwibm9uZVwiXG4gIC8+XG5cbiAgPHN2ZzpzdmdcbiAgICBbYXR0ci54XT1cIm1pbmltYXBQb2ludCgpLnhcIlxuICAgIFthdHRyLnldPVwibWluaW1hcFBvaW50KCkueVwiXG4gICAgW2F0dHIud2lkdGhdPVwibWluaW1hcFdpZHRoKClcIlxuICAgIFthdHRyLmhlaWdodF09XCJtaW5pbWFwSGVpZ2h0KClcIlxuICAgIChtb3VzZW92ZXIpPVwiaG92ZXJlZC5zZXQodHJ1ZSlcIlxuICAgIChtb3VzZWxlYXZlKT1cImhvdmVyZWQuc2V0KGZhbHNlKVwiXG4gID5cbiAgICA8c3ZnOnJlY3RcbiAgICAgIFthdHRyLndpZHRoXT1cIm1pbmltYXBXaWR0aCgpXCJcbiAgICAgIFthdHRyLmhlaWdodF09XCJtaW5pbWFwSGVpZ2h0KClcIlxuICAgICAgW2F0dHIuZmlsbF09XCJtYXNrQ29sb3IoKVwiXG4gICAgLz5cblxuICAgIDxzdmc6ZyBbYXR0ci50cmFuc2Zvcm1dPVwibWluaW1hcFRyYW5zZm9ybSgpXCI+XG4gICAgICA8c3ZnOnJlY3RcbiAgICAgICAgW2F0dHIuZmlsbF09XCJ2aWV3cG9ydENvbG9yKClcIlxuICAgICAgICBbYXR0ci50cmFuc2Zvcm1dPVwidmlld3BvcnRUcmFuc2Zvcm0oKVwiXG4gICAgICAgIFthdHRyLndpZHRoXT1cIm1pbmltYXBXaWR0aCgpXCJcbiAgICAgICAgW2F0dHIuaGVpZ2h0XT1cIm1pbmltYXBIZWlnaHQoKVwiXG4gICAgICAvPlxuXG4gICAgICBAZm9yIChtb2RlbCBvZiBlbnRpdGllc1NlcnZpY2Uubm9kZXMoKTsgdHJhY2sgdHJhY2tOb2RlcygkaW5kZXgsIG1vZGVsKSkge1xuICAgICAgICA8bmctY29udGFpbmVyPlxuICAgICAgICAgIEBpZiAoXG4gICAgICAgICAgICBtb2RlbC5ub2RlLnR5cGUgPT09IFwiZGVmYXVsdFwiIHx8XG4gICAgICAgICAgICBtb2RlbC5ub2RlLnR5cGUgPT09IFwiaHRtbC10ZW1wbGF0ZVwiIHx8XG4gICAgICAgICAgICBtb2RlbC5pc0NvbXBvbmVudFR5cGVcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIDxzdmc6Zm9yZWlnbk9iamVjdFxuICAgICAgICAgICAgICBbYXR0ci50cmFuc2Zvcm1dPVwibW9kZWwucG9pbnRUcmFuc2Zvcm0oKVwiXG4gICAgICAgICAgICAgIFthdHRyLndpZHRoXT1cIm1vZGVsLnNpemUoKS53aWR0aFwiXG4gICAgICAgICAgICAgIFthdHRyLmhlaWdodF09XCJtb2RlbC5zaXplKCkuaGVpZ2h0XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRlZmF1bHQtbm9kZVxuICAgICAgICAgICAgICAgIFtzZWxlY3RlZF09XCJtb2RlbC5zZWxlY3RlZCgpXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwibW9kZWwuc2l6ZSgpLndpZHRoXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cIm1vZGVsLnNpemUoKS5oZWlnaHRcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5tYXgtd2lkdGgucHhdPVwibW9kZWwuc2l6ZSgpLndpZHRoXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUubWF4LWhlaWdodC5weF09XCJtb2RlbC5zaXplKCkuaGVpZ2h0XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxkaXYgW291dGVySFRNTF09XCJtb2RlbC50ZXh0KClcIj48L2Rpdj5cbiAgICAgICAgICAgICAgPC9kZWZhdWx0LW5vZGU+XG4gICAgICAgICAgICA8L3N2Zzpmb3JlaWduT2JqZWN0PlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKFxuICAgICAgICAgICAgbW9kZWwubm9kZS50eXBlID09PSBcImRlZmF1bHQtZ3JvdXBcIiB8fFxuICAgICAgICAgICAgbW9kZWwubm9kZS50eXBlID09PSBcInRlbXBsYXRlLWdyb3VwXCJcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIDxzdmc6cmVjdFxuICAgICAgICAgICAgICBjbGFzcz1cImRlZmF1bHQtZ3JvdXAtbm9kZVwiXG4gICAgICAgICAgICAgIHJ4PVwiNVwiXG4gICAgICAgICAgICAgIHJ5PVwiNVwiXG4gICAgICAgICAgICAgIFthdHRyLnRyYW5zZm9ybV09XCJtb2RlbC5wb2ludFRyYW5zZm9ybSgpXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmRlZmF1bHQtZ3JvdXAtbm9kZV9zZWxlY3RlZF09XCJtb2RlbC5zZWxlY3RlZCgpXCJcbiAgICAgICAgICAgICAgW2F0dHIud2lkdGhdPVwibW9kZWwuc2l6ZSgpLndpZHRoXCJcbiAgICAgICAgICAgICAgW2F0dHIuaGVpZ2h0XT1cIm1vZGVsLnNpemUoKS5oZWlnaHRcIlxuICAgICAgICAgICAgICBbc3R5bGUuc3Ryb2tlXT1cIm1vZGVsLmNvbG9yKClcIlxuICAgICAgICAgICAgICBbc3R5bGUuZmlsbF09XCJtb2RlbC5jb2xvcigpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgfVxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIH1cbiAgICA8L3N2ZzpnPlxuICA8L3N2Zzpzdmc+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -1,4 +1,4 @@
1
- import { ChangeDetectionStrategy, Component, ElementRef, inject, Input, ViewChild } from '@angular/core';
1
+ import { ChangeDetectionStrategy, Component, ElementRef, inject, input, viewChild, effect, forwardRef } from '@angular/core';
2
2
  import { Directive } from '@angular/core';
3
3
  import { ToolbarModel } from '../../models/toolbar.model';
4
4
  import { OverlaysService } from '../../services/overlays.service';
@@ -8,59 +8,56 @@ export class NodeToolbarComponent {
8
8
  constructor() {
9
9
  this.overlaysService = inject(OverlaysService);
10
10
  this.nodeService = inject(NodeAccessorService);
11
+ this.position = input('top');
12
+ this.toolbarContentTemplate = viewChild.required('toolbar');
11
13
  this.model = new ToolbarModel(this.nodeService.model());
12
- }
13
- set position(value) {
14
- this.model.position.set(value);
14
+ effect(() => this.model.position.set(this.position()), { allowSignalWrites: true });
15
15
  }
16
16
  ngOnInit() {
17
- this.model.template.set(this.toolbarContentTemplate);
17
+ this.model.template.set(this.toolbarContentTemplate());
18
18
  this.overlaysService.addToolbar(this.model);
19
19
  }
20
20
  ngOnDestroy() {
21
21
  this.overlaysService.removeToolbar(this.model);
22
22
  }
23
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NodeToolbarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
24
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: NodeToolbarComponent, selector: "node-toolbar", inputs: { position: "position" }, viewQueries: [{ propertyName: "toolbarContentTemplate", first: true, predicate: ["toolbar"], descendants: true, static: true }], ngImport: i0, template: `
23
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NodeToolbarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
24
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "17.3.12", type: NodeToolbarComponent, isStandalone: true, selector: "node-toolbar", inputs: { position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "toolbarContentTemplate", first: true, predicate: ["toolbar"], descendants: true, isSignal: true }], ngImport: i0, template: `
25
25
  <ng-template #toolbar>
26
26
  <div class="wrapper" nodeToolbarWrapper [model]="model">
27
27
  <ng-content />
28
28
  </div>
29
29
  </ng-template>
30
- `, isInline: true, styles: [".wrapper{width:max-content}\n"], dependencies: [{ kind: "directive", type: i0.forwardRef(function () { return NodeToolbarWrapperDirective; }), selector: "[nodeToolbarWrapper]", inputs: ["model"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
30
+ `, isInline: true, styles: [".wrapper{width:max-content}\n"], dependencies: [{ kind: "directive", type: i0.forwardRef(() => NodeToolbarWrapperDirective), selector: "[nodeToolbarWrapper]", inputs: ["model"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
31
31
  }
32
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NodeToolbarComponent, decorators: [{
32
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NodeToolbarComponent, decorators: [{
33
33
  type: Component,
34
- args: [{ selector: 'node-toolbar', template: `
34
+ args: [{ standalone: true, selector: 'node-toolbar', template: `
35
35
  <ng-template #toolbar>
36
36
  <div class="wrapper" nodeToolbarWrapper [model]="model">
37
37
  <ng-content />
38
38
  </div>
39
39
  </ng-template>
40
- `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [".wrapper{width:max-content}\n"] }]
41
- }], propDecorators: { position: [{
42
- type: Input
43
- }], toolbarContentTemplate: [{
44
- type: ViewChild,
45
- args: ['toolbar', { static: true }]
46
- }] } });
40
+ `, changeDetection: ChangeDetectionStrategy.OnPush, imports: [forwardRef(() => NodeToolbarWrapperDirective)], styles: [".wrapper{width:max-content}\n"] }]
41
+ }], ctorParameters: () => [] });
47
42
  export class NodeToolbarWrapperDirective {
48
43
  constructor() {
49
44
  this.element = inject(ElementRef);
45
+ this.model = input.required();
50
46
  }
51
47
  ngOnInit() {
52
- this.model.size.set({
48
+ this.model().size.set({
53
49
  width: this.element.nativeElement.clientWidth,
54
- height: this.element.nativeElement.clientHeight
50
+ height: this.element.nativeElement.clientHeight,
55
51
  });
56
52
  }
57
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NodeToolbarWrapperDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
58
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: NodeToolbarWrapperDirective, selector: "[nodeToolbarWrapper]", inputs: { model: "model" }, ngImport: i0 }); }
53
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NodeToolbarWrapperDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
54
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "17.3.12", type: NodeToolbarWrapperDirective, isStandalone: true, selector: "[nodeToolbarWrapper]", inputs: { model: { classPropertyName: "model", publicName: "model", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0 }); }
59
55
  }
60
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NodeToolbarWrapperDirective, decorators: [{
56
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NodeToolbarWrapperDirective, decorators: [{
61
57
  type: Directive,
62
- args: [{ selector: '[nodeToolbarWrapper]' }]
63
- }], propDecorators: { model: [{
64
- type: Input
65
- }] } });
66
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS10b29sYmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC12Zmxvdy1saWIvc3JjL2xpYi92Zmxvdy9wdWJsaWMtY29tcG9uZW50cy9ub2RlLXRvb2xiYXIvbm9kZS10b29sYmFyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQXFCLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBa0MsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVKLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFMUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQzs7QUFrQjNFLE1BQU0sT0FBTyxvQkFBb0I7SUFoQmpDO1FBaUJVLG9CQUFlLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzFDLGdCQUFXLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUE7UUFVdkMsVUFBSyxHQUFHLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFHLENBQUMsQ0FBQTtLQVc5RDtJQW5CQyxJQUNXLFFBQVEsQ0FBQyxLQUFlO1FBQ2pDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBT00sUUFBUTtRQUNiLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQTtRQUVwRCxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDN0MsQ0FBQztJQUVNLFdBQVc7UUFDaEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ2hELENBQUM7K0dBdEJVLG9CQUFvQjttR0FBcEIsb0JBQW9CLHVOQWRyQjs7Ozs7O0dBTVQsMElBa0NVLDJCQUEyQjs7NEZBMUIzQixvQkFBb0I7a0JBaEJoQyxTQUFTOytCQUNFLGNBQWMsWUFDZDs7Ozs7O0dBTVQsbUJBTWdCLHVCQUF1QixDQUFDLE1BQU07OEJBT3BDLFFBQVE7c0JBRGxCLEtBQUs7Z0JBTUMsc0JBQXNCO3NCQUQ1QixTQUFTO3VCQUFDLFNBQVMsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7O0FBaUJ4QyxNQUFNLE9BQU8sMkJBQTJCO0lBRHhDO1FBRVUsWUFBTyxHQUFHLE1BQU0sQ0FBMEIsVUFBVSxDQUFDLENBQUE7S0FXOUQ7SUFOUSxRQUFRO1FBQ2IsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO1lBQ2xCLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxXQUFXO1lBQzdDLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxZQUFZO1NBQ2hELENBQUMsQ0FBQTtJQUNKLENBQUM7K0dBWFUsMkJBQTJCO21HQUEzQiwyQkFBMkI7OzRGQUEzQiwyQkFBMkI7a0JBRHZDLFNBQVM7bUJBQUMsRUFBRSxRQUFRLEVBQUUsc0JBQXNCLEVBQUU7OEJBS3RDLEtBQUs7c0JBRFgsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBpbmplY3QsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGlyZWN0aXZlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBQb3NpdGlvbiB9IGZyb20gJy4uLy4uL3R5cGVzL3Bvc2l0aW9uLnR5cGUnO1xuaW1wb3J0IHsgVG9vbGJhck1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3Rvb2xiYXIubW9kZWwnO1xuaW1wb3J0IHsgT3ZlcmxheXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvb3ZlcmxheXMuc2VydmljZSc7XG5pbXBvcnQgeyBOb2RlQWNjZXNzb3JTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm9kZS1hY2Nlc3Nvci5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbm9kZS10b29sYmFyJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8bmctdGVtcGxhdGUgI3Rvb2xiYXI+XG4gICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiIG5vZGVUb29sYmFyV3JhcHBlciBbbW9kZWxdPVwibW9kZWxcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIGAsXG4gIHN0eWxlczogW2BcbiAgICAud3JhcHBlciB7XG4gICAgICB3aWR0aDogbWF4LWNvbnRlbnQ7XG4gICAgfVxuICBgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE5vZGVUb29sYmFyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIG92ZXJsYXlzU2VydmljZSA9IGluamVjdChPdmVybGF5c1NlcnZpY2UpO1xuICBwcml2YXRlIG5vZGVTZXJ2aWNlID0gaW5qZWN0KE5vZGVBY2Nlc3NvclNlcnZpY2UpXG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBwb3NpdGlvbih2YWx1ZTogUG9zaXRpb24pIHtcbiAgICB0aGlzLm1vZGVsLnBvc2l0aW9uLnNldCh2YWx1ZSk7XG4gIH1cblxuICBAVmlld0NoaWxkKCd0b29sYmFyJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgcHVibGljIHRvb2xiYXJDb250ZW50VGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcblxuICBwcm90ZWN0ZWQgbW9kZWwgPSBuZXcgVG9vbGJhck1vZGVsKHRoaXMubm9kZVNlcnZpY2UubW9kZWwoKSEpXG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMubW9kZWwudGVtcGxhdGUuc2V0KHRoaXMudG9vbGJhckNvbnRlbnRUZW1wbGF0ZSlcblxuICAgIHRoaXMub3ZlcmxheXNTZXJ2aWNlLmFkZFRvb2xiYXIodGhpcy5tb2RlbClcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLm92ZXJsYXlzU2VydmljZS5yZW1vdmVUb29sYmFyKHRoaXMubW9kZWwpXG4gIH1cbn1cblxuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnW25vZGVUb29sYmFyV3JhcHBlcl0nIH0pXG5leHBvcnQgY2xhc3MgTm9kZVRvb2xiYXJXcmFwcGVyRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHJpdmF0ZSBlbGVtZW50ID0gaW5qZWN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PihFbGVtZW50UmVmKVxuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBtb2RlbCE6IFRvb2xiYXJNb2RlbFxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGVsLnNpemUuc2V0KHtcbiAgICAgIHdpZHRoOiB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCxcbiAgICAgIGhlaWdodDogdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0XG4gICAgfSlcbiAgfVxufVxuIl19
58
+ args: [{
59
+ selector: '[nodeToolbarWrapper]',
60
+ standalone: true
61
+ }]
62
+ }] });
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS10b29sYmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC12Zmxvdy1saWIvc3JjL2xpYi92Zmxvdy9wdWJsaWMtY29tcG9uZW50cy9ub2RlLXRvb2xiYXIvbm9kZS10b29sYmFyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQXFCLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUF5QyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkwsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUxQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDOztBQXNCM0UsTUFBTSxPQUFPLG9CQUFvQjtJQVUvQjtRQVRRLG9CQUFlLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzFDLGdCQUFXLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFFM0MsYUFBUSxHQUFHLEtBQUssQ0FBVyxLQUFLLENBQUMsQ0FBQztRQUVsQywyQkFBc0IsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUF1QixTQUFTLENBQUMsQ0FBQztRQUUxRSxVQUFLLEdBQUcsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUcsQ0FBQyxDQUFDO1FBRzVELE1BQU0sQ0FDSixHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQzlDLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLENBQzVCLENBQUM7SUFDSixDQUFDO0lBRU0sUUFBUTtRQUNiLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDO1FBRXZELElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRU0sV0FBVztRQUNoQixJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakQsQ0FBQzsrR0F6QlUsb0JBQW9CO21HQUFwQixvQkFBb0Isd1ZBakJyQjs7Ozs7O0dBTVQsMkhBMkNVLDJCQUEyQjs7NEZBaEMzQixvQkFBb0I7a0JBcEJoQyxTQUFTO2lDQUNJLElBQUksWUFDTixjQUFjLFlBQ2Q7Ozs7OztHQU1ULG1CQVFnQix1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLDJCQUEyQixDQUFDLENBQUM7O0FBa0MxRCxNQUFNLE9BQU8sMkJBQTJCO0lBSnhDO1FBS1UsWUFBTyxHQUFHLE1BQU0sQ0FBMEIsVUFBVSxDQUFDLENBQUM7UUFFdkQsVUFBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQWdCLENBQUM7S0FRL0M7SUFOUSxRQUFRO1FBQ2IsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7WUFDcEIsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFdBQVc7WUFDN0MsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFlBQVk7U0FDaEQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzsrR0FWVSwyQkFBMkI7bUdBQTNCLDJCQUEyQjs7NEZBQTNCLDJCQUEyQjtrQkFKdkMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsc0JBQXNCO29CQUNoQyxVQUFVLEVBQUUsSUFBSTtpQkFDakIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgaW5qZWN0LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIFRlbXBsYXRlUmVmLCBpbnB1dCwgdmlld0NoaWxkLCBlZmZlY3QsIGZvcndhcmRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERpcmVjdGl2ZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUG9zaXRpb24gfSBmcm9tICcuLi8uLi90eXBlcy9wb3NpdGlvbi50eXBlJztcbmltcG9ydCB7IFRvb2xiYXJNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy90b29sYmFyLm1vZGVsJztcbmltcG9ydCB7IE92ZXJsYXlzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL292ZXJsYXlzLnNlcnZpY2UnO1xuaW1wb3J0IHsgTm9kZUFjY2Vzc29yU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL25vZGUtYWNjZXNzb3Iuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ25vZGUtdG9vbGJhcicsXG4gIHRlbXBsYXRlOiBgXG4gICAgPG5nLXRlbXBsYXRlICN0b29sYmFyPlxuICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIiBub2RlVG9vbGJhcldyYXBwZXIgW21vZGVsXT1cIm1vZGVsXCI+XG4gICAgICAgIDxuZy1jb250ZW50IC8+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICBgLFxuICBzdHlsZXM6IFtcbiAgICBgXG4gICAgICAud3JhcHBlciB7XG4gICAgICAgIHdpZHRoOiBtYXgtY29udGVudDtcbiAgICAgIH1cbiAgICBgLFxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW2ZvcndhcmRSZWYoKCkgPT4gTm9kZVRvb2xiYXJXcmFwcGVyRGlyZWN0aXZlKV0sXG59KVxuZXhwb3J0IGNsYXNzIE5vZGVUb29sYmFyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIG92ZXJsYXlzU2VydmljZSA9IGluamVjdChPdmVybGF5c1NlcnZpY2UpO1xuICBwcml2YXRlIG5vZGVTZXJ2aWNlID0gaW5qZWN0KE5vZGVBY2Nlc3NvclNlcnZpY2UpO1xuXG4gIHB1YmxpYyBwb3NpdGlvbiA9IGlucHV0PFBvc2l0aW9uPigndG9wJyk7XG5cbiAgcHVibGljIHRvb2xiYXJDb250ZW50VGVtcGxhdGUgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8VGVtcGxhdGVSZWY8dW5rbm93bj4+KCd0b29sYmFyJyk7XG5cbiAgcHJvdGVjdGVkIG1vZGVsID0gbmV3IFRvb2xiYXJNb2RlbCh0aGlzLm5vZGVTZXJ2aWNlLm1vZGVsKCkhKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBlZmZlY3QoXG4gICAgICAoKSA9PiB0aGlzLm1vZGVsLnBvc2l0aW9uLnNldCh0aGlzLnBvc2l0aW9uKCkpLFxuICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9XG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGVsLnRlbXBsYXRlLnNldCh0aGlzLnRvb2xiYXJDb250ZW50VGVtcGxhdGUoKSk7XG5cbiAgICB0aGlzLm92ZXJsYXlzU2VydmljZS5hZGRUb29sYmFyKHRoaXMubW9kZWwpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMub3ZlcmxheXNTZXJ2aWNlLnJlbW92ZVRvb2xiYXIodGhpcy5tb2RlbCk7XG4gIH1cbn1cblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW25vZGVUb29sYmFyV3JhcHBlcl0nLFxuICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIE5vZGVUb29sYmFyV3JhcHBlckRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHByaXZhdGUgZWxlbWVudCA9IGluamVjdDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj4oRWxlbWVudFJlZik7XG5cbiAgcHVibGljIG1vZGVsID0gaW5wdXQucmVxdWlyZWQ8VG9vbGJhck1vZGVsPigpO1xuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGVsKCkuc2l6ZS5zZXQoe1xuICAgICAgd2lkdGg6IHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoLFxuICAgICAgaGVpZ2h0OiB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHQsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==