ngx-vflow 0.16.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 (105) hide show
  1. package/README.md +8 -1
  2. package/esm2022/lib/vflow/components/background/background.component.mjs +6 -7
  3. package/esm2022/lib/vflow/components/connection/connection.component.mjs +66 -53
  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 +93 -91
  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/node.interface.mjs +1 -1
  27. package/esm2022/lib/vflow/interfaces/optimization.interface.mjs +1 -1
  28. package/esm2022/lib/vflow/math/edge-path/bezier-path.mjs +1 -1
  29. package/esm2022/lib/vflow/math/edge-path/smooth-step-path.mjs +1 -1
  30. package/esm2022/lib/vflow/models/connection.model.mjs +1 -1
  31. package/esm2022/lib/vflow/models/edge.model.mjs +1 -1
  32. package/esm2022/lib/vflow/models/handle.model.mjs +2 -2
  33. package/esm2022/lib/vflow/models/node.model.mjs +4 -10
  34. package/esm2022/lib/vflow/models/toolbar.model.mjs +1 -1
  35. package/esm2022/lib/vflow/public-components/custom-dynamic-node/custom-dynamic-node.component.mjs +16 -10
  36. package/esm2022/lib/vflow/public-components/custom-node/custom-node.component.mjs +15 -10
  37. package/esm2022/lib/vflow/public-components/handle/handle.component.mjs +52 -0
  38. package/esm2022/lib/vflow/public-components/minimap/minimap.component.mjs +35 -44
  39. package/esm2022/lib/vflow/public-components/node-toolbar/node-toolbar.component.mjs +24 -27
  40. package/esm2022/lib/vflow/public-components/resizable/resizable.component.mjs +60 -45
  41. package/esm2022/lib/vflow/services/component-event-bus.service.mjs +3 -3
  42. package/esm2022/lib/vflow/services/draggable.service.mjs +4 -4
  43. package/esm2022/lib/vflow/services/edge-changes.service.mjs +3 -3
  44. package/esm2022/lib/vflow/services/flow-entities.service.mjs +4 -4
  45. package/esm2022/lib/vflow/services/flow-settings.service.mjs +4 -10
  46. package/esm2022/lib/vflow/services/flow-status.service.mjs +4 -4
  47. package/esm2022/lib/vflow/services/handle.service.mjs +4 -4
  48. package/esm2022/lib/vflow/services/keyboard.service.mjs +5 -5
  49. package/esm2022/lib/vflow/services/node-accessor.service.mjs +3 -3
  50. package/esm2022/lib/vflow/services/node-changes.service.mjs +3 -3
  51. package/esm2022/lib/vflow/services/node-rendering.service.mjs +3 -3
  52. package/esm2022/lib/vflow/services/overlays.service.mjs +3 -3
  53. package/esm2022/lib/vflow/services/selection.service.mjs +4 -4
  54. package/esm2022/lib/vflow/services/viewport.service.mjs +3 -3
  55. package/esm2022/lib/vflow/utils/adjust-direction.mjs +1 -1
  56. package/esm2022/lib/vflow/utils/get-os.mjs +1 -1
  57. package/esm2022/lib/vflow/utils/nodes.mjs +1 -1
  58. package/esm2022/lib/vflow/vflow.mjs +24 -0
  59. package/esm2022/public-api.mjs +4 -5
  60. package/fesm2022/ngx-vflow.mjs +914 -1022
  61. package/fesm2022/ngx-vflow.mjs.map +1 -1
  62. package/lib/vflow/components/background/background.component.d.ts +3 -3
  63. package/lib/vflow/components/connection/connection.component.d.ts +3 -3
  64. package/lib/vflow/components/custom-node-base/custom-node-base.component.d.ts +4 -9
  65. package/lib/vflow/components/default-node/default-node.component.d.ts +2 -2
  66. package/lib/vflow/components/defs/defs.component.d.ts +2 -2
  67. package/lib/vflow/components/edge/edge.component.d.ts +7 -7
  68. package/lib/vflow/components/edge-label/edge-label.component.d.ts +9 -8
  69. package/lib/vflow/components/node/node.component.d.ts +5 -6
  70. package/lib/vflow/components/vflow/vflow.component.d.ts +19 -29
  71. package/lib/vflow/directives/changes-controller.directive.d.ts +29 -30
  72. package/lib/vflow/directives/connection-controller.directive.d.ts +1 -2
  73. package/lib/vflow/directives/drag-handle.directive.d.ts +1 -1
  74. package/lib/vflow/directives/flow-size-controller.directive.d.ts +1 -1
  75. package/lib/vflow/directives/handle-size-controller.directive.d.ts +2 -2
  76. package/lib/vflow/directives/map-context.directive.d.ts +1 -1
  77. package/lib/vflow/directives/pointer.directive.d.ts +9 -6
  78. package/lib/vflow/directives/reference.directive.d.ts +1 -1
  79. package/lib/vflow/directives/root-pointer.directive.d.ts +1 -1
  80. package/lib/vflow/directives/root-svg-context.directive.d.ts +1 -1
  81. package/lib/vflow/directives/selectable.directive.d.ts +1 -1
  82. package/lib/vflow/directives/space-point-context.directive.d.ts +1 -1
  83. package/lib/vflow/directives/template.directive.d.ts +6 -6
  84. package/lib/vflow/interfaces/component-node-event.interface.d.ts +3 -3
  85. package/lib/vflow/interfaces/node.interface.d.ts +14 -14
  86. package/lib/vflow/interfaces/optimization.interface.d.ts +0 -7
  87. package/lib/vflow/models/edge.model.d.ts +1 -17
  88. package/lib/vflow/models/handle.model.d.ts +4 -4
  89. package/lib/vflow/models/node.model.d.ts +2 -5
  90. package/lib/vflow/public-components/custom-dynamic-node/custom-dynamic-node.component.d.ts +3 -3
  91. package/lib/vflow/public-components/custom-node/custom-node.component.d.ts +3 -3
  92. package/lib/vflow/{components → public-components}/handle/handle.component.d.ts +5 -5
  93. package/lib/vflow/public-components/minimap/minimap.component.d.ts +8 -10
  94. package/lib/vflow/public-components/node-toolbar/node-toolbar.component.d.ts +6 -5
  95. package/lib/vflow/public-components/resizable/resizable.component.d.ts +5 -4
  96. package/lib/vflow/services/flow-settings.service.d.ts +0 -7
  97. package/lib/vflow/utils/reference-keeper.d.ts +1 -1
  98. package/lib/vflow/vflow.d.ts +9 -0
  99. package/package.json +3 -3
  100. package/public-api.d.ts +2 -3
  101. package/esm2022/lib/vflow/components/handle/handle.component.mjs +0 -49
  102. package/esm2022/lib/vflow/interfaces/handle-positions.interface.mjs +0 -2
  103. package/esm2022/lib/vflow/vflow.module.mjs +0 -121
  104. package/lib/vflow/interfaces/handle-positions.interface.d.ts +0 -5
  105. package/lib/vflow/vflow.module.d.ts +0 -30
@@ -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,14 +16,23 @@ 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;
@@ -38,23 +46,31 @@ export class MiniMapComponent {
38
46
  });
39
47
  this.hovered = signal(false);
40
48
  this.minimapPoint = computed(() => {
41
- switch (this.minimapPosition()) {
49
+ switch (this.position()) {
42
50
  case 'top-left':
43
51
  return { x: this.minimapOffset, y: this.minimapOffset };
44
52
  case 'top-right':
45
53
  return {
46
- x: this.flowSettingsService.computedFlowWidth() - this.minimapWidth() - this.minimapOffset,
47
- y: this.minimapOffset
54
+ x: this.flowSettingsService.computedFlowWidth() -
55
+ this.minimapWidth() -
56
+ this.minimapOffset,
57
+ y: this.minimapOffset,
48
58
  };
49
59
  case 'bottom-left':
50
60
  return {
51
61
  x: this.minimapOffset,
52
- y: this.flowSettingsService.computedFlowHeight() - this.minimapHeight() - this.minimapOffset
62
+ y: this.flowSettingsService.computedFlowHeight() -
63
+ this.minimapHeight() -
64
+ this.minimapOffset,
53
65
  };
54
66
  case 'bottom-right':
55
67
  return {
56
- x: this.flowSettingsService.computedFlowWidth() - this.minimapWidth() - this.minimapOffset,
57
- 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,
58
74
  };
59
75
  }
60
76
  });
@@ -81,45 +97,20 @@ export class MiniMapComponent {
81
97
  const scale = vport.zoom * this.minimapScale();
82
98
  return `translate(${x} ${y}) scale(${scale})`;
83
99
  });
84
- this.minimapPosition = signal('bottom-right');
85
- this.scaleOnHoverSignal = signal(false);
86
- }
87
- /**
88
- * The corner of the flow where to render a mini-map
89
- */
90
- set position(value) {
91
- this.minimapPosition.set(value);
92
- }
93
- /**
94
- * Make a minimap bigger on hover
95
- */
96
- set scaleOnHover(value) {
97
- this.scaleOnHoverSignal.set(value);
98
100
  }
99
101
  ngOnInit() {
100
102
  const model = new MinimapModel();
101
- model.template.set(this.minimap);
103
+ model.template.set(this.minimap());
102
104
  this.entitiesService.minimap.set(model);
103
105
  }
104
106
  trackNodes(idx, { node }) {
105
107
  return node;
106
108
  }
107
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MiniMapComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
108
- 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"] }] }); }
109
111
  }
110
- 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: [{
111
113
  type: Component,
112
- 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"] }]
113
- }], propDecorators: { position: [{
114
- type: Input
115
- }], maskColor: [{
116
- type: Input
117
- }], strokeColor: [{
118
- type: Input
119
- }], scaleOnHover: [{
120
- type: Input
121
- }], minimap: [{
122
- type: ViewChild,
123
- args: ['minimap', { static: true }]
124
- }] } });
125
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWluaW1hcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmZsb3ctbGliL3NyYy9saWIvdmZsb3cvcHVibGljLWNvbXBvbmVudHMvbWluaW1hcC9taW5pbWFwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC12Zmxvdy1saWIvc3JjL2xpYi92Zmxvdy9wdWJsaWMtY29tcG9uZW50cy9taW5pbWFwL21pbmltYXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFlLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNySCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFMUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7OztBQVNsRSxNQUFNLE9BQU8sZ0JBQWdCO0lBTDdCO1FBTVksb0JBQWUsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQTtRQUM3Qyx3QkFBbUIsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQTtRQUNqRCxvQkFBZSxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQTtRQUN6QyxhQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBVXJDOztXQUVHO1FBRUksY0FBUyxH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QyxDQUFDLENBQUMsQ0FBQTtRQUVNLG9CQUFlLEdBQUcsTUFBTSxDQUFrQixjQUFjLENBQUMsQ0FBQTtRQUV6RCx1QkFBa0IsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7S0FZM0M7SUF4SUM7O09BRUc7SUFDSCxJQUNXLFFBQVEsQ0FBQyxLQUFzQjtRQUN4QyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUNqQyxDQUFDO0lBY0Q7O09BRUc7SUFDSCxJQUNXLFlBQVksQ0FBQyxLQUFjO1FBQ3BDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDcEMsQ0FBQztJQW9HTSxRQUFRO1FBQ2IsTUFBTSxLQUFLLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQTtRQUNoQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7UUFFaEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3pDLENBQUM7SUFFUyxVQUFVLENBQUMsR0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFhO1FBQ25ELE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQzsrR0E3SVUsZ0JBQWdCO21HQUFoQixnQkFBZ0Isc1JDaEI3Qiw0dkVBcUVBOzs0RkRyRGEsZ0JBQWdCO2tCQUw1QixTQUFTOytCQUNFLFVBQVU7OEJBY1QsUUFBUTtzQkFEbEIsS0FBSztnQkFTQyxTQUFTO3NCQURmLEtBQUs7Z0JBT0MsV0FBVztzQkFEakIsS0FBSztnQkFPSyxZQUFZO3NCQUR0QixLQUFLO2dCQU1FLE9BQU87c0JBRGQsU0FBUzt1QkFBQyxTQUFTLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBjb21wdXRlZCwgaW5qZWN0LCBJbmplY3RvciwgSW5wdXQsIE9uSW5pdCwgc2lnbmFsLCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGbG93RW50aXRpZXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmxvdy1lbnRpdGllcy5zZXJ2aWNlJztcbmltcG9ydCB7IE1pbmltYXBNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9taW5pbWFwLm1vZGVsJztcbmltcG9ydCB7IE5vZGVNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9ub2RlLm1vZGVsJztcbmltcG9ydCB7IEZsb3dTZXR0aW5nc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mbG93LXNldHRpbmdzLnNlcnZpY2UnO1xuaW1wb3J0IHsgZ2V0Vmlld3BvcnRGb3JCb3VuZHMgfSBmcm9tICcuLi8uLi91dGlscy92aWV3cG9ydCc7XG5pbXBvcnQgeyBnZXROb2Rlc0JvdW5kcyB9IGZyb20gJy4uLy4uL3V0aWxzL25vZGVzJztcbmltcG9ydCB7IFZpZXdwb3J0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3ZpZXdwb3J0LnNlcnZpY2UnO1xuXG5leHBvcnQgdHlwZSBNaW5pTWFwUG9zaXRpb24gPSAndG9wLWxlZnQnIHwgJ3RvcC1yaWdodCcgfCAnYm90dG9tLWxlZnQnIHwgJ2JvdHRvbS1yaWdodCdcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbWluaS1tYXAnLFxuICB0ZW1wbGF0ZVVybDogJy4vbWluaW1hcC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogW2AuL21pbmltYXAuY29tcG9uZW50LnNjc3NgXVxufSlcbmV4cG9ydCBjbGFzcyBNaW5pTWFwQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHJvdGVjdGVkIGVudGl0aWVzU2VydmljZSA9IGluamVjdChGbG93RW50aXRpZXNTZXJ2aWNlKVxuICBwcm90ZWN0ZWQgZmxvd1NldHRpbmdzU2VydmljZSA9IGluamVjdChGbG93U2V0dGluZ3NTZXJ2aWNlKVxuICBwcm90ZWN0ZWQgdmlld3BvcnRTZXJ2aWNlID0gaW5qZWN0KFZpZXdwb3J0U2VydmljZSlcbiAgcHJvdGVjdGVkIGluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKVxuXG4gIC8qKlxuICAgKiBUaGUgY29ybmVyIG9mIHRoZSBmbG93IHdoZXJlIHRvIHJlbmRlciBhIG1pbmktbWFwXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHBvc2l0aW9uKHZhbHVlOiBNaW5pTWFwUG9zaXRpb24pIHtcbiAgICB0aGlzLm1pbmltYXBQb3NpdGlvbi5zZXQodmFsdWUpXG4gIH1cblxuICAvKipcbiAgICogVGhlIGNvbG9yIG91dHNpZGUgdGhlIHZpZXdwb3J0IChpbnZpc2libGUgYXJlYSlcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBtYXNrQ29sb3IgPSBgcmdiYSgyMTUsIDIxNSwgMjE1LCAwLjYpYFxuXG4gIC8qKlxuICAgKiBUaGUgbWluaW1hcCBzdHJva2UgY29sb3JcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzdHJva2VDb2xvciA9IGByZ2IoMjAwLCAyMDAsIDIwMClgXG5cbiAgLyoqXG4gICAqIE1ha2UgYSBtaW5pbWFwIGJpZ2dlciBvbiBob3ZlclxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBzY2FsZU9uSG92ZXIodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNjYWxlT25Ib3ZlclNpZ25hbC5zZXQodmFsdWUpXG4gIH1cblxuICBAVmlld0NoaWxkKCdtaW5pbWFwJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgcHJpdmF0ZSBtaW5pbWFwITogVGVtcGxhdGVSZWY8dW5rbm93bj5cblxuICBwcml2YXRlIHJlYWRvbmx5IG1pbmltYXBPZmZzZXQgPSAxMFxuXG4gIHByaXZhdGUgcmVhZG9ubHkgbWluaW1hcFNjYWxlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGlmICh0aGlzLnNjYWxlT25Ib3ZlclNpZ25hbCgpKSB7XG4gICAgICByZXR1cm4gdGhpcy5ob3ZlcmVkKCkgPyAwLjQgOiAwLjJcbiAgICB9XG5cbiAgICByZXR1cm4gMC4yXG4gIH0pXG5cbiAgcHJvdGVjdGVkIHZpZXdwb3J0Q29sb3IgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgYmcgPSB0aGlzLmZsb3dTZXR0aW5nc1NlcnZpY2UuYmFja2dyb3VuZCgpXG5cbiAgICBpZiAoYmcudHlwZSA9PT0gJ2RvdHMnIHx8IGJnLnR5cGUgPT09ICdzb2xpZCcpIHtcbiAgICAgIHJldHVybiBiZy5jb2xvciA/PyAnI2ZmZidcbiAgICB9XG5cbiAgICByZXR1cm4gJyNmZmYnXG4gIH0pXG5cbiAgcHJvdGVjdGVkIGhvdmVyZWQgPSBzaWduYWwoZmFsc2UpXG5cbiAgcHJvdGVjdGVkIG1pbmltYXBQb2ludCA9IGNvbXB1dGVkKCgpID0+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==