ngx-vflow 0.1.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 (106) hide show
  1. package/README.md +24 -0
  2. package/esm2022/lib/vflow/components/connection/connection.component.mjs +100 -0
  3. package/esm2022/lib/vflow/components/defs/defs.component.mjs +19 -0
  4. package/esm2022/lib/vflow/components/edge/edge.component.mjs +42 -0
  5. package/esm2022/lib/vflow/components/edge-label/edge-label.component.mjs +58 -0
  6. package/esm2022/lib/vflow/components/node/node.component.mjs +146 -0
  7. package/esm2022/lib/vflow/components/vflow/vflow.component.mjs +183 -0
  8. package/esm2022/lib/vflow/directives/changes-controller.directive.mjs +34 -0
  9. package/esm2022/lib/vflow/directives/connection-controller.directive.mjs +36 -0
  10. package/esm2022/lib/vflow/directives/map-context.directive.mjs +62 -0
  11. package/esm2022/lib/vflow/directives/reference.directive.mjs +16 -0
  12. package/esm2022/lib/vflow/directives/root-svg-context.directive.mjs +26 -0
  13. package/esm2022/lib/vflow/directives/space-point-context.directive.mjs +29 -0
  14. package/esm2022/lib/vflow/directives/template.directive.mjs +58 -0
  15. package/esm2022/lib/vflow/interfaces/connection-settings.interface.mjs +2 -0
  16. package/esm2022/lib/vflow/interfaces/connection.interface.mjs +2 -0
  17. package/esm2022/lib/vflow/interfaces/edge-label.interface.mjs +2 -0
  18. package/esm2022/lib/vflow/interfaces/edge.interface.mjs +2 -0
  19. package/esm2022/lib/vflow/interfaces/handle-positions.interface.mjs +2 -0
  20. package/esm2022/lib/vflow/interfaces/marker.interface.mjs +2 -0
  21. package/esm2022/lib/vflow/interfaces/node.interface.mjs +2 -0
  22. package/esm2022/lib/vflow/interfaces/path-data.interface.mjs +2 -0
  23. package/esm2022/lib/vflow/interfaces/point.interface.mjs +2 -0
  24. package/esm2022/lib/vflow/interfaces/template-context.interface.mjs +2 -0
  25. package/esm2022/lib/vflow/interfaces/viewport.interface.mjs +2 -0
  26. package/esm2022/lib/vflow/math/edge-path/bezier-path.mjs +77 -0
  27. package/esm2022/lib/vflow/math/edge-path/straigh-path.mjs +18 -0
  28. package/esm2022/lib/vflow/math/point-on-line-by-ratio.mjs +12 -0
  29. package/esm2022/lib/vflow/models/connection.model.mjs +9 -0
  30. package/esm2022/lib/vflow/models/edge-label.model.mjs +8 -0
  31. package/esm2022/lib/vflow/models/edge.model.mjs +30 -0
  32. package/esm2022/lib/vflow/models/flow.model.mjs +16 -0
  33. package/esm2022/lib/vflow/models/node.model.mjs +90 -0
  34. package/esm2022/lib/vflow/services/draggable.service.mjs +66 -0
  35. package/esm2022/lib/vflow/services/edge-changes.service.mjs +38 -0
  36. package/esm2022/lib/vflow/services/flow-entities.service.mjs +49 -0
  37. package/esm2022/lib/vflow/services/flow-status.service.mjs +39 -0
  38. package/esm2022/lib/vflow/services/node-changes.service.mjs +32 -0
  39. package/esm2022/lib/vflow/services/viewport.service.mjs +32 -0
  40. package/esm2022/lib/vflow/types/edge-change.type.mjs +2 -0
  41. package/esm2022/lib/vflow/types/node-change.type.mjs +2 -0
  42. package/esm2022/lib/vflow/types/position.type.mjs +2 -0
  43. package/esm2022/lib/vflow/types/using-points.type.mjs +2 -0
  44. package/esm2022/lib/vflow/types/viewport-change-type.type.mjs +2 -0
  45. package/esm2022/lib/vflow/utils/add-nodes-to-edges.mjs +11 -0
  46. package/esm2022/lib/vflow/utils/hash.mjs +7 -0
  47. package/esm2022/lib/vflow/utils/is-defined.mjs +4 -0
  48. package/esm2022/lib/vflow/utils/reference-keeper.mjs +31 -0
  49. package/esm2022/lib/vflow/utils/round.mjs +2 -0
  50. package/esm2022/lib/vflow/vflow.module.mjs +68 -0
  51. package/esm2022/ngx-vflow.mjs +5 -0
  52. package/esm2022/public-api.mjs +23 -0
  53. package/fesm2022/ngx-vflow.mjs +1332 -0
  54. package/fesm2022/ngx-vflow.mjs.map +1 -0
  55. package/index.d.ts +5 -0
  56. package/lib/vflow/components/connection/connection.component.d.ts +20 -0
  57. package/lib/vflow/components/defs/defs.component.d.ts +8 -0
  58. package/lib/vflow/components/edge/edge.component.d.ts +16 -0
  59. package/lib/vflow/components/edge-label/edge-label.component.d.ts +31 -0
  60. package/lib/vflow/components/node/node.component.d.ts +53 -0
  61. package/lib/vflow/components/vflow/vflow.component.d.ts +73 -0
  62. package/lib/vflow/directives/changes-controller.directive.d.ts +16 -0
  63. package/lib/vflow/directives/connection-controller.directive.d.ts +11 -0
  64. package/lib/vflow/directives/map-context.directive.d.ts +19 -0
  65. package/lib/vflow/directives/reference.directive.d.ts +6 -0
  66. package/lib/vflow/directives/root-svg-context.directive.d.ts +7 -0
  67. package/lib/vflow/directives/space-point-context.directive.d.ts +14 -0
  68. package/lib/vflow/directives/template.directive.d.ts +28 -0
  69. package/lib/vflow/interfaces/connection-settings.interface.d.ts +10 -0
  70. package/lib/vflow/interfaces/connection.interface.d.ts +4 -0
  71. package/lib/vflow/interfaces/edge-label.interface.d.ts +6 -0
  72. package/lib/vflow/interfaces/edge.interface.d.ts +18 -0
  73. package/lib/vflow/interfaces/handle-positions.interface.d.ts +5 -0
  74. package/lib/vflow/interfaces/marker.interface.d.ts +9 -0
  75. package/lib/vflow/interfaces/node.interface.d.ts +16 -0
  76. package/lib/vflow/interfaces/path-data.interface.d.ts +8 -0
  77. package/lib/vflow/interfaces/point.interface.d.ts +4 -0
  78. package/lib/vflow/interfaces/template-context.interface.d.ts +10 -0
  79. package/lib/vflow/interfaces/viewport.interface.d.ts +9 -0
  80. package/lib/vflow/math/edge-path/bezier-path.d.ts +5 -0
  81. package/lib/vflow/math/edge-path/straigh-path.d.ts +4 -0
  82. package/lib/vflow/math/point-on-line-by-ratio.d.ts +7 -0
  83. package/lib/vflow/models/connection.model.d.ts +9 -0
  84. package/lib/vflow/models/edge-label.model.d.ts +9 -0
  85. package/lib/vflow/models/edge.model.d.ts +17 -0
  86. package/lib/vflow/models/flow.model.d.ts +14 -0
  87. package/lib/vflow/models/node.model.d.ts +70 -0
  88. package/lib/vflow/services/draggable.service.d.ts +32 -0
  89. package/lib/vflow/services/edge-changes.service.d.ts +22 -0
  90. package/lib/vflow/services/flow-entities.service.d.ts +15 -0
  91. package/lib/vflow/services/flow-status.service.d.ts +43 -0
  92. package/lib/vflow/services/node-changes.service.d.ts +26 -0
  93. package/lib/vflow/services/viewport.service.d.ts +24 -0
  94. package/lib/vflow/types/edge-change.type.d.ts +14 -0
  95. package/lib/vflow/types/node-change.type.d.ts +16 -0
  96. package/lib/vflow/types/position.type.d.ts +1 -0
  97. package/lib/vflow/types/using-points.type.d.ts +5 -0
  98. package/lib/vflow/types/viewport-change-type.type.d.ts +3 -0
  99. package/lib/vflow/utils/add-nodes-to-edges.d.ts +3 -0
  100. package/lib/vflow/utils/hash.d.ts +1 -0
  101. package/lib/vflow/utils/is-defined.d.ts +1 -0
  102. package/lib/vflow/utils/reference-keeper.d.ts +14 -0
  103. package/lib/vflow/utils/round.d.ts +1 -0
  104. package/lib/vflow/vflow.module.d.ts +18 -0
  105. package/package.json +25 -0
  106. package/public-api.d.ts +18 -0
@@ -0,0 +1,183 @@
1
+ import { ChangeDetectionStrategy, Component, ContentChild, Injector, Input, ViewChild, inject, runInInjectionContext } from '@angular/core';
2
+ import { MapContextDirective } from '../../directives/map-context.directive';
3
+ import { DraggableService } from '../../services/draggable.service';
4
+ import { ViewportService } from '../../services/viewport.service';
5
+ import { toObservable, toSignal } from '@angular/core/rxjs-interop';
6
+ import { ConnectionTemplateDirective, EdgeLabelHtmlTemplateDirective, EdgeTemplateDirective, HandleTemplateDirective, NodeHtmlTemplateDirective } from '../../directives/template.directive';
7
+ import { addNodesToEdges } from '../../utils/add-nodes-to-edges';
8
+ import { FlowModel } from '../../models/flow.model';
9
+ import { skip } from 'rxjs';
10
+ import { FlowStatusService } from '../../services/flow-status.service';
11
+ import { ConnectionControllerDirective } from '../../directives/connection-controller.directive';
12
+ import { FlowEntitiesService } from '../../services/flow-entities.service';
13
+ import { ConnectionModel } from '../../models/connection.model';
14
+ import { ReferenceKeeper } from '../../utils/reference-keeper';
15
+ import { NodesChangeService } from '../../services/node-changes.service';
16
+ import { EdgeChangesService } from '../../services/edge-changes.service';
17
+ import { ChangesControllerDirective } from '../../directives/changes-controller.directive';
18
+ import * as i0 from "@angular/core";
19
+ import * as i1 from "../../directives/connection-controller.directive";
20
+ import * as i2 from "../../directives/changes-controller.directive";
21
+ import * as i3 from "@angular/common";
22
+ import * as i4 from "../node/node.component";
23
+ import * as i5 from "../edge/edge.component";
24
+ import * as i6 from "../connection/connection.component";
25
+ import * as i7 from "../defs/defs.component";
26
+ import * as i8 from "../../directives/space-point-context.directive";
27
+ import * as i9 from "../../directives/map-context.directive";
28
+ import * as i10 from "../../directives/reference.directive";
29
+ import * as i11 from "../../directives/root-svg-context.directive";
30
+ const connectionControllerHostDirective = {
31
+ directive: ConnectionControllerDirective,
32
+ outputs: ['onConnect']
33
+ };
34
+ const changesControllerHostDirective = {
35
+ directive: ChangesControllerDirective,
36
+ outputs: ['onNodesChange', 'onEdgesChange']
37
+ };
38
+ export class VflowComponent {
39
+ constructor() {
40
+ // #region DI
41
+ this.viewportService = inject(ViewportService);
42
+ this.flowEntitiesService = inject(FlowEntitiesService);
43
+ this.nodesChangeService = inject(NodesChangeService);
44
+ this.edgesChangeService = inject(EdgeChangesService);
45
+ this.injector = inject(Injector);
46
+ this.minZoom = 0.5;
47
+ this.maxZoom = 3;
48
+ this.background = '#FFFFFF';
49
+ // #endregion
50
+ // #region SIGNAL_API
51
+ this.viewport = this.viewportService.readableViewport.asReadonly();
52
+ this.nodesChange = toSignal(this.nodesChangeService.changes$, { initialValue: [] });
53
+ this.edgesChange = toSignal(this.edgesChangeService.changes$, { initialValue: [] });
54
+ // #endregion
55
+ // #region RX_API
56
+ this.viewportChanges$ = toObservable(this.viewportService.readableViewport)
57
+ .pipe(skip(1)); // skip default value that set by signal
58
+ this.nodesChange$ = this.nodesChangeService.changes$;
59
+ this.edgesChange$ = this.edgesChangeService.changes$;
60
+ // #endregion
61
+ // TODO: probably better to make it injectable
62
+ this.flowModel = new FlowModel();
63
+ this.markers = this.flowEntitiesService.markers;
64
+ }
65
+ // #endregion
66
+ // #region SETTINGS
67
+ /**
68
+ * Size for flow view
69
+ *
70
+ * accepts
71
+ * - absolute size in format [width, height] or
72
+ * - 'auto' to compute size based on parent element size
73
+ */
74
+ set view(view) {
75
+ this.flowModel.view.set(view);
76
+ }
77
+ set handlePositions(handlePositions) {
78
+ this.flowModel.handlePositions.set(handlePositions);
79
+ }
80
+ set connection(connection) { this.flowEntitiesService.connection.set(connection); }
81
+ get connection() { return this.flowEntitiesService.connection(); }
82
+ // #endregion
83
+ // #region MAIN_INPUTS
84
+ set nodes(newNodes) {
85
+ const newModels = runInInjectionContext(this.injector, () => ReferenceKeeper.nodes(newNodes, this.flowEntitiesService.nodes()));
86
+ // TODO better to solve this by DI
87
+ bindFlowToNodes(this.flowModel, newModels);
88
+ // quick and dirty binding nodes to edges
89
+ addNodesToEdges(newModels, this.flowEntitiesService.edges());
90
+ this.flowEntitiesService.nodes.set(newModels);
91
+ }
92
+ get nodeModels() { return this.flowEntitiesService.nodes(); }
93
+ set edges(newEdges) {
94
+ const newModels = ReferenceKeeper.edges(newEdges, this.flowEntitiesService.edges());
95
+ // quick and dirty binding nodes to edges
96
+ addNodesToEdges(this.nodeModels, newModels);
97
+ this.flowEntitiesService.edges.set(newModels);
98
+ }
99
+ get edgeModels() { return this.flowEntitiesService.validEdges(); }
100
+ // #region METHODS_API
101
+ viewportTo(viewport) {
102
+ this.viewportService.writableViewport.set({ changeType: 'absolute', state: viewport });
103
+ }
104
+ zoomTo(zoom) {
105
+ this.viewportService.writableViewport.set({ changeType: 'absolute', state: { zoom } });
106
+ }
107
+ panTo(point) {
108
+ this.viewportService.writableViewport.set({ changeType: 'absolute', state: point });
109
+ }
110
+ getNode(id) {
111
+ return this.flowEntitiesService.getNode(id)?.node;
112
+ }
113
+ // #endregion
114
+ trackNodes(idx, { node }) {
115
+ return node.id;
116
+ }
117
+ trackEdges(idx, { edge }) {
118
+ return edge.id;
119
+ }
120
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: VflowComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
121
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "16.2.12", type: VflowComponent, selector: "vflow", inputs: { view: "view", minZoom: "minZoom", maxZoom: "maxZoom", handlePositions: "handlePositions", background: "background", connection: ["connection", "connection", (settings) => new ConnectionModel(settings)], nodes: "nodes", edges: "edges" }, providers: [
122
+ DraggableService,
123
+ ViewportService,
124
+ FlowStatusService,
125
+ FlowEntitiesService,
126
+ NodesChangeService,
127
+ EdgeChangesService
128
+ ], queries: [{ propertyName: "nodeHtmlDirective", first: true, predicate: NodeHtmlTemplateDirective, descendants: true }, { propertyName: "edgeTemplateDirective", first: true, predicate: EdgeTemplateDirective, descendants: true }, { propertyName: "edgeLabelHtmlDirective", first: true, predicate: EdgeLabelHtmlTemplateDirective, descendants: true }, { propertyName: "connectionTemplateDirective", first: true, predicate: ConnectionTemplateDirective, descendants: true }, { propertyName: "handleTemplateDirective", first: true, predicate: HandleTemplateDirective, descendants: true }], viewQueries: [{ propertyName: "mapContext", first: true, predicate: MapContextDirective, descendants: true }], hostDirectives: [{ directive: i1.ConnectionControllerDirective, outputs: ["onConnect", "onConnect"] }, { directive: i2.ChangesControllerDirective, outputs: ["onNodesChange", "onNodesChange", "onEdgesChange", "onEdgesChange"] }], ngImport: i0, template: "<svg:svg\n rootSvgRef\n rootSvgContext\n class=\"root-svg\"\n #flow\n [style.backgroundColor]=\"background\"\n [attr.width]=\"flowModel.flowWidth()\"\n [attr.height]=\"flowModel.flowHeight()\"\n>\n <defs [markers]=\"markers()\" flowDefs />\n\n <svg:g\n mapContext\n spacePointContext\n [minZoom]=\"minZoom\"\n [maxZoom]=\"maxZoom\"\n >\n <!-- Connection -->\n <svg:g\n connection\n [model]=\"connection\"\n [template]=\"connectionTemplateDirective?.templateRef\"\n />\n\n <!-- Edges -->\n <svg:g\n *ngFor=\"let model of edgeModels; trackBy: trackEdges\"\n edge\n [model]=\"model\"\n [edgeTemplate]=\"edgeTemplateDirective?.templateRef\"\n [edgeLabelHtmlTemplate]=\"edgeLabelHtmlDirective?.templateRef\"\n />\n\n <!-- Nodes -->\n <svg:g\n *ngFor=\"let model of nodeModels; trackBy: trackNodes\"\n node\n [nodeModel]=\"model\"\n [nodeHtmlTemplate]=\"nodeHtmlDirective?.templateRef\"\n [handleTemplate]=\"handleTemplateDirective?.templateRef\"\n [attr.transform]=\"model.pointTransform()\"\n />\n </svg:g>\n\n</svg:svg>\n", styles: [":host{display:block;width:100%;height:100%;-webkit-user-select:none;user-select:none}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i4.NodeComponent, selector: "g[node]", inputs: ["nodeModel", "nodeHtmlTemplate", "handleTemplate"] }, { kind: "component", type: i5.EdgeComponent, selector: "g[edge]", inputs: ["model", "edgeTemplate", "edgeLabelHtmlTemplate"] }, { kind: "component", type: i6.ConnectionComponent, selector: "g[connection]", inputs: ["model", "template"] }, { kind: "component", type: i7.DefsComponent, selector: "defs[flowDefs]", inputs: ["markers"] }, { kind: "directive", type: i8.SpacePointContextDirective, selector: "g[spacePointContext]" }, { kind: "directive", type: i9.MapContextDirective, selector: "g[mapContext]", inputs: ["minZoom", "maxZoom"] }, { kind: "directive", type: i10.RootSvgReferenceDirective, selector: "svg[rootSvgRef]" }, { kind: "directive", type: i11.RootSvgContextDirective, selector: "svg[rootSvgContext]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
129
+ }
130
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: VflowComponent, decorators: [{
131
+ type: Component,
132
+ args: [{ selector: 'vflow', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
133
+ DraggableService,
134
+ ViewportService,
135
+ FlowStatusService,
136
+ FlowEntitiesService,
137
+ NodesChangeService,
138
+ EdgeChangesService
139
+ ], hostDirectives: [
140
+ connectionControllerHostDirective,
141
+ changesControllerHostDirective
142
+ ], template: "<svg:svg\n rootSvgRef\n rootSvgContext\n class=\"root-svg\"\n #flow\n [style.backgroundColor]=\"background\"\n [attr.width]=\"flowModel.flowWidth()\"\n [attr.height]=\"flowModel.flowHeight()\"\n>\n <defs [markers]=\"markers()\" flowDefs />\n\n <svg:g\n mapContext\n spacePointContext\n [minZoom]=\"minZoom\"\n [maxZoom]=\"maxZoom\"\n >\n <!-- Connection -->\n <svg:g\n connection\n [model]=\"connection\"\n [template]=\"connectionTemplateDirective?.templateRef\"\n />\n\n <!-- Edges -->\n <svg:g\n *ngFor=\"let model of edgeModels; trackBy: trackEdges\"\n edge\n [model]=\"model\"\n [edgeTemplate]=\"edgeTemplateDirective?.templateRef\"\n [edgeLabelHtmlTemplate]=\"edgeLabelHtmlDirective?.templateRef\"\n />\n\n <!-- Nodes -->\n <svg:g\n *ngFor=\"let model of nodeModels; trackBy: trackNodes\"\n node\n [nodeModel]=\"model\"\n [nodeHtmlTemplate]=\"nodeHtmlDirective?.templateRef\"\n [handleTemplate]=\"handleTemplateDirective?.templateRef\"\n [attr.transform]=\"model.pointTransform()\"\n />\n </svg:g>\n\n</svg:svg>\n", styles: [":host{display:block;width:100%;height:100%;-webkit-user-select:none;user-select:none}\n"] }]
143
+ }], propDecorators: { view: [{
144
+ type: Input
145
+ }], minZoom: [{
146
+ type: Input
147
+ }], maxZoom: [{
148
+ type: Input
149
+ }], handlePositions: [{
150
+ type: Input
151
+ }], background: [{
152
+ type: Input
153
+ }], connection: [{
154
+ type: Input,
155
+ args: [{ transform: (settings) => new ConnectionModel(settings) }]
156
+ }], nodes: [{
157
+ type: Input,
158
+ args: [{ required: true }]
159
+ }], edges: [{
160
+ type: Input
161
+ }], nodeHtmlDirective: [{
162
+ type: ContentChild,
163
+ args: [NodeHtmlTemplateDirective]
164
+ }], edgeTemplateDirective: [{
165
+ type: ContentChild,
166
+ args: [EdgeTemplateDirective]
167
+ }], edgeLabelHtmlDirective: [{
168
+ type: ContentChild,
169
+ args: [EdgeLabelHtmlTemplateDirective]
170
+ }], connectionTemplateDirective: [{
171
+ type: ContentChild,
172
+ args: [ConnectionTemplateDirective]
173
+ }], handleTemplateDirective: [{
174
+ type: ContentChild,
175
+ args: [HandleTemplateDirective]
176
+ }], mapContext: [{
177
+ type: ViewChild,
178
+ args: [MapContextDirective]
179
+ }] } });
180
+ function bindFlowToNodes(flow, nodes) {
181
+ nodes.forEach(n => n.bindFlow(flow));
182
+ }
183
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmZsb3cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2NvbXBvbmVudHMvdmZsb3cvdmZsb3cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2NvbXBvbmVudHMvdmZsb3cvdmZsb3cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFvQix1QkFBdUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFnQixRQUFRLEVBQUUsS0FBSyxFQUE0QyxTQUFTLEVBQW9CLE1BQU0sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV4TyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM3RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUVwRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbEUsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUdwRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsOEJBQThCLEVBQUUscUJBQXFCLEVBQUUsdUJBQXVCLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUU3TCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHNUIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdkUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sa0RBQWtELENBQUM7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ckNvbnRlbnRJbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBDb250ZW50Q2hpbGQsIEV2ZW50RW1pdHRlciwgSW5qZWN0b3IsIElucHV0LCBPbkNoYW5nZXMsIE91dHB1dCwgU2lnbmFsLCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGQsIGNvbXB1dGVkLCBlZmZlY3QsIGluamVjdCwgcnVuSW5JbmplY3Rpb25Db250ZXh0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOb2RlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9ub2RlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBNYXBDb250ZXh0RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9tYXAtY29udGV4dC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRHJhZ2dhYmxlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RyYWdnYWJsZS5zZXJ2aWNlJztcbmltcG9ydCB7IE5vZGVNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9ub2RlLm1vZGVsJztcbmltcG9ydCB7IFZpZXdwb3J0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3ZpZXdwb3J0LnNlcnZpY2UnO1xuaW1wb3J0IHsgdG9PYnNlcnZhYmxlLCB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEVkZ2UgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2VkZ2UuaW50ZXJmYWNlJztcbmltcG9ydCB7IEVkZ2VNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9lZGdlLm1vZGVsJztcbmltcG9ydCB7IENvbm5lY3Rpb25UZW1wbGF0ZURpcmVjdGl2ZSwgRWRnZUxhYmVsSHRtbFRlbXBsYXRlRGlyZWN0aXZlLCBFZGdlVGVtcGxhdGVEaXJlY3RpdmUsIEhhbmRsZVRlbXBsYXRlRGlyZWN0aXZlLCBOb2RlSHRtbFRlbXBsYXRlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy90ZW1wbGF0ZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSGFuZGxlUG9zaXRpb25zIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9oYW5kbGUtcG9zaXRpb25zLmludGVyZmFjZSc7XG5pbXBvcnQgeyBhZGROb2Rlc1RvRWRnZXMgfSBmcm9tICcuLi8uLi91dGlscy9hZGQtbm9kZXMtdG8tZWRnZXMnO1xuaW1wb3J0IHsgRmxvd01vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2Zsb3cubW9kZWwnO1xuaW1wb3J0IHsgc2tpcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUG9pbnQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3BvaW50LmludGVyZmFjZSc7XG5pbXBvcnQgeyBWaWV3cG9ydFN0YXRlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy92aWV3cG9ydC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRmxvd1N0YXR1c1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mbG93LXN0YXR1cy5zZXJ2aWNlJztcbmltcG9ydCB7IENvbm5lY3Rpb25Db250cm9sbGVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9jb25uZWN0aW9uLWNvbnRyb2xsZXIuZGlyZWN0aXZlJztcbmltcG9ydCB7IEZsb3dFbnRpdGllc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mbG93LWVudGl0aWVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29ubmVjdGlvblNldHRpbmdzIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9jb25uZWN0aW9uLXNldHRpbmdzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBDb25uZWN0aW9uTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvY29ubmVjdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBSZWZlcmVuY2VLZWVwZXIgfSBmcm9tICcuLi8uLi91dGlscy9yZWZlcmVuY2Uta2VlcGVyJztcbmltcG9ydCB7IE5vZGVzQ2hhbmdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL25vZGUtY2hhbmdlcy5zZXJ2aWNlJztcbmltcG9ydCB7IEVkZ2VDaGFuZ2VzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2VkZ2UtY2hhbmdlcy5zZXJ2aWNlJztcbmltcG9ydCB7IE5vZGVDaGFuZ2UgfSBmcm9tICcuLi8uLi90eXBlcy9ub2RlLWNoYW5nZS50eXBlJztcbmltcG9ydCB7IENoYW5nZXNDb250cm9sbGVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9jaGFuZ2VzLWNvbnRyb2xsZXIuZGlyZWN0aXZlJztcbmltcG9ydCB7IEVkZ2VDaGFuZ2UgfSBmcm9tICcuLi8uLi90eXBlcy9lZGdlLWNoYW5nZS50eXBlJztcblxuY29uc3QgY29ubmVjdGlvbkNvbnRyb2xsZXJIb3N0RGlyZWN0aXZlID0ge1xuICBkaXJlY3RpdmU6IENvbm5lY3Rpb25Db250cm9sbGVyRGlyZWN0aXZlLFxuICBvdXRwdXRzOiBbJ29uQ29ubmVjdCddXG59XG5cbmNvbnN0IGNoYW5nZXNDb250cm9sbGVySG9zdERpcmVjdGl2ZSA9IHtcbiAgZGlyZWN0aXZlOiBDaGFuZ2VzQ29udHJvbGxlckRpcmVjdGl2ZSxcbiAgb3V0cHV0czogWydvbk5vZGVzQ2hhbmdlJywgJ29uRWRnZXNDaGFuZ2UnXVxufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2ZmxvdycsXG4gIHRlbXBsYXRlVXJsOiAnLi92Zmxvdy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3ZmbG93LmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtcbiAgICBEcmFnZ2FibGVTZXJ2aWNlLFxuICAgIFZpZXdwb3J0U2VydmljZSxcbiAgICBGbG93U3RhdHVzU2VydmljZSxcbiAgICBGbG93RW50aXRpZXNTZXJ2aWNlLFxuICAgIE5vZGVzQ2hhbmdlU2VydmljZSxcbiAgICBFZGdlQ2hhbmdlc1NlcnZpY2VcbiAgXSxcbiAgaG9zdERpcmVjdGl2ZXM6IFtcbiAgICBjb25uZWN0aW9uQ29udHJvbGxlckhvc3REaXJlY3RpdmUsXG4gICAgY2hhbmdlc0NvbnRyb2xsZXJIb3N0RGlyZWN0aXZlXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgVmZsb3dDb21wb25lbnQge1xuICAvLyAjcmVnaW9uIERJXG4gIHByb3RlY3RlZCB2aWV3cG9ydFNlcnZpY2UgPSBpbmplY3QoVmlld3BvcnRTZXJ2aWNlKVxuICBwcm90ZWN0ZWQgZmxvd0VudGl0aWVzU2VydmljZSA9IGluamVjdChGbG93RW50aXRpZXNTZXJ2aWNlKVxuICBwcm90ZWN0ZWQgbm9kZXNDaGFuZ2VTZXJ2aWNlID0gaW5qZWN0KE5vZGVzQ2hhbmdlU2VydmljZSlcbiAgcHJvdGVjdGVkIGVkZ2VzQ2hhbmdlU2VydmljZSA9IGluamVjdChFZGdlQ2hhbmdlc1NlcnZpY2UpXG4gIHByb3RlY3RlZCBpbmplY3RvciA9IGluamVjdChJbmplY3RvcilcbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gU0VUVElOR1NcblxuICAvKipcbiAgICogU2l6ZSBmb3IgZmxvdyB2aWV3XG4gICAqXG4gICAqIGFjY2VwdHNcbiAgICogLSBhYnNvbHV0ZSBzaXplIGluIGZvcm1hdCBbd2lkdGgsIGhlaWdodF0gb3JcbiAgICogLSAnYXV0bycgdG8gY29tcHV0ZSBzaXplIGJhc2VkIG9uIHBhcmVudCBlbGVtZW50IHNpemVcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgdmlldyh2aWV3OiBbbnVtYmVyLCBudW1iZXJdIHwgJ2F1dG8nKSB7XG4gICAgdGhpcy5mbG93TW9kZWwudmlldy5zZXQodmlldylcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBtaW5ab29tID0gMC41XG5cbiAgQElucHV0KClcbiAgcHVibGljIG1heFpvb20gPSAzXG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBoYW5kbGVQb3NpdGlvbnMoaGFuZGxlUG9zaXRpb25zOiBIYW5kbGVQb3NpdGlvbnMpIHtcbiAgICB0aGlzLmZsb3dNb2RlbC5oYW5kbGVQb3NpdGlvbnMuc2V0KGhhbmRsZVBvc2l0aW9ucylcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBiYWNrZ3JvdW5kOiBzdHJpbmcgPSAnI0ZGRkZGRidcblxuICBASW5wdXQoeyB0cmFuc2Zvcm06IChzZXR0aW5nczogQ29ubmVjdGlvblNldHRpbmdzKSA9PiBuZXcgQ29ubmVjdGlvbk1vZGVsKHNldHRpbmdzKSB9KVxuICBwdWJsaWMgc2V0IGNvbm5lY3Rpb24oY29ubmVjdGlvbjogQ29ubmVjdGlvbk1vZGVsKSB7IHRoaXMuZmxvd0VudGl0aWVzU2VydmljZS5jb25uZWN0aW9uLnNldChjb25uZWN0aW9uKSB9XG4gIHB1YmxpYyBnZXQgY29ubmVjdGlvbigpIHsgcmV0dXJuIHRoaXMuZmxvd0VudGl0aWVzU2VydmljZS5jb25uZWN0aW9uKCkgfVxuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBNQUlOX0lOUFVUU1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxuICBwdWJsaWMgc2V0IG5vZGVzKG5ld05vZGVzOiBOb2RlW10pIHtcbiAgICBjb25zdCBuZXdNb2RlbHMgPSBydW5JbkluamVjdGlvbkNvbnRleHQodGhpcy5pbmplY3RvcixcbiAgICAgICgpID0+IFJlZmVyZW5jZUtlZXBlci5ub2RlcyhuZXdOb2RlcywgdGhpcy5mbG93RW50aXRpZXNTZXJ2aWNlLm5vZGVzKCkpXG4gICAgKVxuXG4gICAgLy8gVE9ETyBiZXR0ZXIgdG8gc29sdmUgdGhpcyBieSBESVxuICAgIGJpbmRGbG93VG9Ob2Rlcyh0aGlzLmZsb3dNb2RlbCwgbmV3TW9kZWxzKVxuXG4gICAgLy8gcXVpY2sgYW5kIGRpcnR5IGJpbmRpbmcgbm9kZXMgdG8gZWRnZXNcbiAgICBhZGROb2Rlc1RvRWRnZXMobmV3TW9kZWxzLCB0aGlzLmZsb3dFbnRpdGllc1NlcnZpY2UuZWRnZXMoKSlcblxuICAgIHRoaXMuZmxvd0VudGl0aWVzU2VydmljZS5ub2Rlcy5zZXQobmV3TW9kZWxzKVxuICB9XG5cbiAgcHVibGljIGdldCBub2RlTW9kZWxzKCkgeyByZXR1cm4gdGhpcy5mbG93RW50aXRpZXNTZXJ2aWNlLm5vZGVzKCkgfVxuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZWRnZXMobmV3RWRnZXM6IEVkZ2VbXSkge1xuICAgIGNvbnN0IG5ld01vZGVscyA9IFJlZmVyZW5jZUtlZXBlci5lZGdlcyhuZXdFZGdlcywgdGhpcy5mbG93RW50aXRpZXNTZXJ2aWNlLmVkZ2VzKCkpXG5cbiAgICAvLyBxdWljayBhbmQgZGlydHkgYmluZGluZyBub2RlcyB0byBlZGdlc1xuICAgIGFkZE5vZGVzVG9FZGdlcyh0aGlzLm5vZGVNb2RlbHMsIG5ld01vZGVscylcblxuICAgIHRoaXMuZmxvd0VudGl0aWVzU2VydmljZS5lZGdlcy5zZXQobmV3TW9kZWxzKVxuICB9XG5cbiAgcHVibGljIGdldCBlZGdlTW9kZWxzKCkgeyByZXR1cm4gdGhpcy5mbG93RW50aXRpZXNTZXJ2aWNlLnZhbGlkRWRnZXMoKSB9XG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIFRFTVBMQVRFU1xuICBAQ29udGVudENoaWxkKE5vZGVIdG1sVGVtcGxhdGVEaXJlY3RpdmUpXG4gIHByb3RlY3RlZCBub2RlSHRtbERpcmVjdGl2ZT86IE5vZGVIdG1sVGVtcGxhdGVEaXJlY3RpdmVcblxuICBAQ29udGVudENoaWxkKEVkZ2VUZW1wbGF0ZURpcmVjdGl2ZSlcbiAgcHJvdGVjdGVkIGVkZ2VUZW1wbGF0ZURpcmVjdGl2ZT86IEVkZ2VUZW1wbGF0ZURpcmVjdGl2ZVxuXG4gIEBDb250ZW50Q2hpbGQoRWRnZUxhYmVsSHRtbFRlbXBsYXRlRGlyZWN0aXZlKVxuICBwcm90ZWN0ZWQgZWRnZUxhYmVsSHRtbERpcmVjdGl2ZT86IEVkZ2VMYWJlbEh0bWxUZW1wbGF0ZURpcmVjdGl2ZVxuXG4gIEBDb250ZW50Q2hpbGQoQ29ubmVjdGlvblRlbXBsYXRlRGlyZWN0aXZlKVxuICBwcm90ZWN0ZWQgY29ubmVjdGlvblRlbXBsYXRlRGlyZWN0aXZlPzogQ29ubmVjdGlvblRlbXBsYXRlRGlyZWN0aXZlXG5cbiAgQENvbnRlbnRDaGlsZChIYW5kbGVUZW1wbGF0ZURpcmVjdGl2ZSlcbiAgcHJvdGVjdGVkIGhhbmRsZVRlbXBsYXRlRGlyZWN0aXZlPzogSGFuZGxlVGVtcGxhdGVEaXJlY3RpdmVcbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gRElSRUNUSVZFU1xuICBAVmlld0NoaWxkKE1hcENvbnRleHREaXJlY3RpdmUpXG4gIHByb3RlY3RlZCBtYXBDb250ZXh0ITogTWFwQ29udGV4dERpcmVjdGl2ZVxuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBTSUdOQUxfQVBJXG4gIHB1YmxpYyByZWFkb25seSB2aWV3cG9ydCA9IHRoaXMudmlld3BvcnRTZXJ2aWNlLnJlYWRhYmxlVmlld3BvcnQuYXNSZWFkb25seSgpXG5cbiAgcHVibGljIHJlYWRvbmx5IG5vZGVzQ2hhbmdlID1cbiAgICB0b1NpZ25hbCh0aGlzLm5vZGVzQ2hhbmdlU2VydmljZS5jaGFuZ2VzJCwgeyBpbml0aWFsVmFsdWU6IFtdIGFzIE5vZGVDaGFuZ2VbXSB9KVxuXG4gIHB1YmxpYyByZWFkb25seSBlZGdlc0NoYW5nZSA9XG4gICAgdG9TaWduYWwodGhpcy5lZGdlc0NoYW5nZVNlcnZpY2UuY2hhbmdlcyQsIHsgaW5pdGlhbFZhbHVlOiBbXSBhcyBFZGdlQ2hhbmdlW10gfSlcbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gUlhfQVBJXG4gIHB1YmxpYyByZWFkb25seSB2aWV3cG9ydENoYW5nZXMkID0gdG9PYnNlcnZhYmxlKHRoaXMudmlld3BvcnRTZXJ2aWNlLnJlYWRhYmxlVmlld3BvcnQpXG4gICAgLnBpcGUoc2tpcCgxKSkgLy8gc2tpcCBkZWZhdWx0IHZhbHVlIHRoYXQgc2V0IGJ5IHNpZ25hbFxuXG4gIHB1YmxpYyByZWFkb25seSBub2Rlc0NoYW5nZSQgPSB0aGlzLm5vZGVzQ2hhbmdlU2VydmljZS5jaGFuZ2VzJFxuXG4gIHB1YmxpYyByZWFkb25seSBlZGdlc0NoYW5nZSQgPSB0aGlzLmVkZ2VzQ2hhbmdlU2VydmljZS5jaGFuZ2VzJFxuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gVE9ETzogcHJvYmFibHkgYmV0dGVyIHRvIG1ha2UgaXQgaW5qZWN0YWJsZVxuICBwcm90ZWN0ZWQgZmxvd01vZGVsID0gbmV3IEZsb3dNb2RlbCgpXG5cbiAgcHJvdGVjdGVkIG1hcmtlcnMgPSB0aGlzLmZsb3dFbnRpdGllc1NlcnZpY2UubWFya2Vyc1xuXG4gIC8vICNyZWdpb24gTUVUSE9EU19BUElcbiAgcHVibGljIHZpZXdwb3J0VG8odmlld3BvcnQ6IFZpZXdwb3J0U3RhdGUpOiB2b2lkIHtcbiAgICB0aGlzLnZpZXdwb3J0U2VydmljZS53cml0YWJsZVZpZXdwb3J0LnNldCh7IGNoYW5nZVR5cGU6ICdhYnNvbHV0ZScsIHN0YXRlOiB2aWV3cG9ydCB9KVxuICB9XG5cbiAgcHVibGljIHpvb21Ubyh6b29tOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnZpZXdwb3J0U2VydmljZS53cml0YWJsZVZpZXdwb3J0LnNldCh7IGNoYW5nZVR5cGU6ICdhYnNvbHV0ZScsIHN0YXRlOiB7IHpvb20gfSB9KVxuICB9XG5cbiAgcHVibGljIHBhblRvKHBvaW50OiBQb2ludCk6IHZvaWQge1xuICAgIHRoaXMudmlld3BvcnRTZXJ2aWNlLndyaXRhYmxlVmlld3BvcnQuc2V0KHsgY2hhbmdlVHlwZTogJ2Fic29sdXRlJywgc3RhdGU6IHBvaW50IH0pXG4gIH1cblxuICBwdWJsaWMgZ2V0Tm9kZTxUID0gdW5rbm93bj4oaWQ6IHN0cmluZyk6IE5vZGU8VD4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmZsb3dFbnRpdGllc1NlcnZpY2UuZ2V0Tm9kZTxUPihpZCk/Lm5vZGVcbiAgfVxuICAvLyAjZW5kcmVnaW9uXG5cbiAgcHJvdGVjdGVkIHRyYWNrTm9kZXMoaWR4OiBudW1iZXIsIHsgbm9kZSB9OiBOb2RlTW9kZWwpIHtcbiAgICByZXR1cm4gbm9kZS5pZFxuICB9XG5cbiAgcHJvdGVjdGVkIHRyYWNrRWRnZXMoaWR4OiBudW1iZXIsIHsgZWRnZSB9OiBFZGdlTW9kZWwpIHtcbiAgICByZXR1cm4gZWRnZS5pZFxuICB9XG59XG5cbmZ1bmN0aW9uIGJpbmRGbG93VG9Ob2RlcyhmbG93OiBGbG93TW9kZWwsIG5vZGVzOiBOb2RlTW9kZWxbXSkge1xuICBub2Rlcy5mb3JFYWNoKG4gPT4gbi5iaW5kRmxvdyhmbG93KSlcbn1cblxuIiwiPHN2ZzpzdmdcbiAgcm9vdFN2Z1JlZlxuICByb290U3ZnQ29udGV4dFxuICBjbGFzcz1cInJvb3Qtc3ZnXCJcbiAgI2Zsb3dcbiAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJiYWNrZ3JvdW5kXCJcbiAgW2F0dHIud2lkdGhdPVwiZmxvd01vZGVsLmZsb3dXaWR0aCgpXCJcbiAgW2F0dHIuaGVpZ2h0XT1cImZsb3dNb2RlbC5mbG93SGVpZ2h0KClcIlxuPlxuICA8ZGVmcyBbbWFya2Vyc109XCJtYXJrZXJzKClcIiBmbG93RGVmcyAvPlxuXG4gIDxzdmc6Z1xuICAgIG1hcENvbnRleHRcbiAgICBzcGFjZVBvaW50Q29udGV4dFxuICAgIFttaW5ab29tXT1cIm1pblpvb21cIlxuICAgIFttYXhab29tXT1cIm1heFpvb21cIlxuICA+XG4gICAgPCEtLSBDb25uZWN0aW9uIC0tPlxuICAgIDxzdmc6Z1xuICAgICAgY29ubmVjdGlvblxuICAgICAgW21vZGVsXT1cImNvbm5lY3Rpb25cIlxuICAgICAgW3RlbXBsYXRlXT1cImNvbm5lY3Rpb25UZW1wbGF0ZURpcmVjdGl2ZT8udGVtcGxhdGVSZWZcIlxuICAgIC8+XG5cbiAgICA8IS0tIEVkZ2VzICAtLT5cbiAgICA8c3ZnOmdcbiAgICAgICpuZ0Zvcj1cImxldCBtb2RlbCBvZiBlZGdlTW9kZWxzOyB0cmFja0J5OiB0cmFja0VkZ2VzXCJcbiAgICAgIGVkZ2VcbiAgICAgIFttb2RlbF09XCJtb2RlbFwiXG4gICAgICBbZWRnZVRlbXBsYXRlXT1cImVkZ2VUZW1wbGF0ZURpcmVjdGl2ZT8udGVtcGxhdGVSZWZcIlxuICAgICAgW2VkZ2VMYWJlbEh0bWxUZW1wbGF0ZV09XCJlZGdlTGFiZWxIdG1sRGlyZWN0aXZlPy50ZW1wbGF0ZVJlZlwiXG4gICAgLz5cblxuICAgIDwhLS0gTm9kZXMgLS0+XG4gICAgPHN2ZzpnXG4gICAgICAqbmdGb3I9XCJsZXQgbW9kZWwgb2Ygbm9kZU1vZGVsczsgdHJhY2tCeTogdHJhY2tOb2Rlc1wiXG4gICAgICBub2RlXG4gICAgICBbbm9kZU1vZGVsXT1cIm1vZGVsXCJcbiAgICAgIFtub2RlSHRtbFRlbXBsYXRlXT1cIm5vZGVIdG1sRGlyZWN0aXZlPy50ZW1wbGF0ZVJlZlwiXG4gICAgICBbaGFuZGxlVGVtcGxhdGVdPVwiaGFuZGxlVGVtcGxhdGVEaXJlY3RpdmU/LnRlbXBsYXRlUmVmXCJcbiAgICAgIFthdHRyLnRyYW5zZm9ybV09XCJtb2RlbC5wb2ludFRyYW5zZm9ybSgpXCJcbiAgICAvPlxuICA8L3N2ZzpnPlxuXG48L3N2Zzpzdmc+XG4iXX0=
@@ -0,0 +1,34 @@
1
+ import { Directive, EventEmitter, Output, inject } from '@angular/core';
2
+ import { EdgeChangesService } from '../services/edge-changes.service';
3
+ import { NodesChangeService } from '../services/node-changes.service';
4
+ import { tap } from 'rxjs';
5
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
6
+ import * as i0 from "@angular/core";
7
+ export class ChangesControllerDirective {
8
+ constructor() {
9
+ this.nodesChangeService = inject(NodesChangeService);
10
+ this.edgesChangeService = inject(EdgeChangesService);
11
+ this.onNodesChange = new EventEmitter();
12
+ this.onEdgesChange = new EventEmitter();
13
+ this.nodesChangeProxySubscription = this.nodesChangeService.changes$
14
+ .pipe(tap((changes) => this.onNodesChange.emit(changes)), takeUntilDestroyed())
15
+ .subscribe();
16
+ this.edgesChangeProxySubscription = this.edgesChangeService.changes$
17
+ .pipe(tap((changes) => this.onEdgesChange.emit(changes)), takeUntilDestroyed())
18
+ .subscribe();
19
+ }
20
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ChangesControllerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
21
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: ChangesControllerDirective, isStandalone: true, selector: "[changesController]", outputs: { onNodesChange: "onNodesChange", onEdgesChange: "onEdgesChange" }, ngImport: i0 }); }
22
+ }
23
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ChangesControllerDirective, decorators: [{
24
+ type: Directive,
25
+ args: [{
26
+ selector: '[changesController]',
27
+ standalone: true
28
+ }]
29
+ }], propDecorators: { onNodesChange: [{
30
+ type: Output
31
+ }], onEdgesChange: [{
32
+ type: Output
33
+ }] } });
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhbmdlcy1jb250cm9sbGVyLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC12Zmxvdy1saWIvc3JjL2xpYi92Zmxvdy9kaXJlY3RpdmVzL2NoYW5nZXMtY29udHJvbGxlci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVoRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDOztBQU9oRSxNQUFNLE9BQU8sMEJBQTBCO0lBSnZDO1FBS1ksdUJBQWtCLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUE7UUFDL0MsdUJBQWtCLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUE7UUFHbEQsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBZ0IsQ0FBQTtRQUdoRCxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFnQixDQUFBO1FBRTdDLGlDQUE0QixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRO2FBQ3RFLElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQ2xELGtCQUFrQixFQUFFLENBQ3JCO2FBQ0EsU0FBUyxFQUFFLENBQUE7UUFFSixpQ0FBNEIsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUTthQUN0RSxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUNsRCxrQkFBa0IsRUFBRSxDQUNyQjthQUNBLFNBQVMsRUFBRSxDQUFBO0tBQ2Y7K0dBdkJZLDBCQUEwQjttR0FBMUIsMEJBQTBCOzs0RkFBMUIsMEJBQTBCO2tCQUp0QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxxQkFBcUI7b0JBQy9CLFVBQVUsRUFBRSxJQUFJO2lCQUNqQjs4QkFNUSxhQUFhO3NCQURuQixNQUFNO2dCQUlBLGFBQWE7c0JBRG5CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEV2ZW50RW1pdHRlciwgT3V0cHV0LCBlZmZlY3QsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTm9kZUNoYW5nZSB9IGZyb20gJy4uL3R5cGVzL25vZGUtY2hhbmdlLnR5cGUnO1xuaW1wb3J0IHsgRWRnZUNoYW5nZXNTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZWRnZS1jaGFuZ2VzLnNlcnZpY2UnO1xuaW1wb3J0IHsgTm9kZXNDaGFuZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbm9kZS1jaGFuZ2VzLnNlcnZpY2UnO1xuaW1wb3J0IHsgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBFZGdlQ2hhbmdlIH0gZnJvbSAnLi4vdHlwZXMvZWRnZS1jaGFuZ2UudHlwZSc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tjaGFuZ2VzQ29udHJvbGxlcl0nLFxuICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIENoYW5nZXNDb250cm9sbGVyRGlyZWN0aXZlIHtcbiAgcHJvdGVjdGVkIG5vZGVzQ2hhbmdlU2VydmljZSA9IGluamVjdChOb2Rlc0NoYW5nZVNlcnZpY2UpXG4gIHByb3RlY3RlZCBlZGdlc0NoYW5nZVNlcnZpY2UgPSBpbmplY3QoRWRnZUNoYW5nZXNTZXJ2aWNlKVxuXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgb25Ob2Rlc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Tm9kZUNoYW5nZVtdPigpXG5cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBvbkVkZ2VzQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxFZGdlQ2hhbmdlW10+KClcblxuICBwcm90ZWN0ZWQgbm9kZXNDaGFuZ2VQcm94eVN1YnNjcmlwdGlvbiA9IHRoaXMubm9kZXNDaGFuZ2VTZXJ2aWNlLmNoYW5nZXMkXG4gICAgLnBpcGUoXG4gICAgICB0YXAoKGNoYW5nZXMpID0+IHRoaXMub25Ob2Rlc0NoYW5nZS5lbWl0KGNoYW5nZXMpKSxcbiAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpXG4gICAgKVxuICAgIC5zdWJzY3JpYmUoKVxuXG4gIHByb3RlY3RlZCBlZGdlc0NoYW5nZVByb3h5U3Vic2NyaXB0aW9uID0gdGhpcy5lZGdlc0NoYW5nZVNlcnZpY2UuY2hhbmdlcyRcbiAgICAucGlwZShcbiAgICAgIHRhcCgoY2hhbmdlcykgPT4gdGhpcy5vbkVkZ2VzQ2hhbmdlLmVtaXQoY2hhbmdlcykpLFxuICAgICAgdGFrZVVudGlsRGVzdHJveWVkKClcbiAgICApXG4gICAgLnN1YnNjcmliZSgpXG59XG4iXX0=
@@ -0,0 +1,36 @@
1
+ import { Directive, EventEmitter, Output, effect, inject } from '@angular/core';
2
+ import { FlowStatusService } from '../services/flow-status.service';
3
+ import { FlowEntitiesService } from '../services/flow-entities.service';
4
+ import * as i0 from "@angular/core";
5
+ export class ConnectionControllerDirective {
6
+ constructor() {
7
+ this.onConnect = new EventEmitter();
8
+ this.statusService = inject(FlowStatusService);
9
+ this.flowEntitiesService = inject(FlowEntitiesService);
10
+ this.connectEffect = effect(() => {
11
+ const status = this.statusService.status();
12
+ if (status.state === 'connection-end') {
13
+ const sourceModel = status.payload.sourceNode;
14
+ const targetModel = status.payload.targetNode;
15
+ const source = sourceModel.node.id;
16
+ const target = targetModel.node.id;
17
+ const connection = this.flowEntitiesService.connection();
18
+ if (connection.validator({ source, target })) {
19
+ this.onConnect.emit({ source, target });
20
+ }
21
+ }
22
+ }, { allowSignalWrites: true });
23
+ }
24
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ConnectionControllerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
25
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: ConnectionControllerDirective, isStandalone: true, selector: "[connectionController]", outputs: { onConnect: "onConnect" }, ngImport: i0 }); }
26
+ }
27
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ConnectionControllerDirective, decorators: [{
28
+ type: Directive,
29
+ args: [{
30
+ selector: '[connectionController]',
31
+ standalone: true
32
+ }]
33
+ }], propDecorators: { onConnect: [{
34
+ type: Output
35
+ }] } });
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ubmVjdGlvbi1jb250cm9sbGVyLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC12Zmxvdy1saWIvc3JjL2xpYi92Zmxvdy9kaXJlY3RpdmVzL2Nvbm5lY3Rpb24tY29udHJvbGxlci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFaEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFcEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7O0FBTXhFLE1BQU0sT0FBTyw2QkFBNkI7SUFKMUM7UUFNUyxjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQWMsQ0FBQTtRQUV6QyxrQkFBYSxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFBO1FBQ3pDLHdCQUFtQixHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFBO1FBRS9DLGtCQUFhLEdBQUcsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNwQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFBO1lBRTFDLElBQUksTUFBTSxDQUFDLEtBQUssS0FBSyxnQkFBZ0IsRUFBRTtnQkFDckMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUE7Z0JBQzdDLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFBO2dCQUU3QyxNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQTtnQkFDbEMsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUE7Z0JBRWxDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLEVBQUUsQ0FBQTtnQkFFeEQsSUFBSSxVQUFVLENBQUMsU0FBUyxDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUU7b0JBQzVDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUE7aUJBQ3hDO2FBQ0Y7UUFDSCxDQUFDLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO0tBQ2hDOytHQXhCWSw2QkFBNkI7bUdBQTdCLDZCQUE2Qjs7NEZBQTdCLDZCQUE2QjtrQkFKekMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsd0JBQXdCO29CQUNsQyxVQUFVLEVBQUUsSUFBSTtpQkFDakI7OEJBR1EsU0FBUztzQkFEZixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFdmVudEVtaXR0ZXIsIE91dHB1dCwgZWZmZWN0LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbm5lY3Rpb24gfSBmcm9tICcuLi9pbnRlcmZhY2VzL2Nvbm5lY3Rpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IEZsb3dTdGF0dXNTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZmxvdy1zdGF0dXMuc2VydmljZSc7XG5cbmltcG9ydCB7IEZsb3dFbnRpdGllc1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9mbG93LWVudGl0aWVzLnNlcnZpY2UnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbY29ubmVjdGlvbkNvbnRyb2xsZXJdJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBDb25uZWN0aW9uQ29udHJvbGxlckRpcmVjdGl2ZSB7XG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgb25Db25uZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxDb25uZWN0aW9uPigpXG5cbiAgcHJpdmF0ZSBzdGF0dXNTZXJ2aWNlID0gaW5qZWN0KEZsb3dTdGF0dXNTZXJ2aWNlKVxuICBwcml2YXRlIGZsb3dFbnRpdGllc1NlcnZpY2UgPSBpbmplY3QoRmxvd0VudGl0aWVzU2VydmljZSlcblxuICBwcm90ZWN0ZWQgY29ubmVjdEVmZmVjdCA9IGVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgc3RhdHVzID0gdGhpcy5zdGF0dXNTZXJ2aWNlLnN0YXR1cygpXG5cbiAgICBpZiAoc3RhdHVzLnN0YXRlID09PSAnY29ubmVjdGlvbi1lbmQnKSB7XG4gICAgICBjb25zdCBzb3VyY2VNb2RlbCA9IHN0YXR1cy5wYXlsb2FkLnNvdXJjZU5vZGVcbiAgICAgIGNvbnN0IHRhcmdldE1vZGVsID0gc3RhdHVzLnBheWxvYWQudGFyZ2V0Tm9kZVxuXG4gICAgICBjb25zdCBzb3VyY2UgPSBzb3VyY2VNb2RlbC5ub2RlLmlkXG4gICAgICBjb25zdCB0YXJnZXQgPSB0YXJnZXRNb2RlbC5ub2RlLmlkXG5cbiAgICAgIGNvbnN0IGNvbm5lY3Rpb24gPSB0aGlzLmZsb3dFbnRpdGllc1NlcnZpY2UuY29ubmVjdGlvbigpXG5cbiAgICAgIGlmIChjb25uZWN0aW9uLnZhbGlkYXRvcih7IHNvdXJjZSwgdGFyZ2V0IH0pKSB7XG4gICAgICAgIHRoaXMub25Db25uZWN0LmVtaXQoeyBzb3VyY2UsIHRhcmdldCB9KVxuICAgICAgfVxuICAgIH1cbiAgfSwgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9KVxufVxuIl19
@@ -0,0 +1,62 @@
1
+ import { Directive, ElementRef, Input, effect, inject } from '@angular/core';
2
+ import { select } from 'd3-selection';
3
+ import { zoom, zoomIdentity } from 'd3-zoom';
4
+ import { ViewportService } from '../services/viewport.service';
5
+ import { isDefined } from '../utils/is-defined';
6
+ import { RootSvgReferenceDirective } from './reference.directive';
7
+ import * as i0 from "@angular/core";
8
+ export class MapContextDirective {
9
+ constructor() {
10
+ this.rootSvg = inject(RootSvgReferenceDirective).element;
11
+ this.host = inject(ElementRef).nativeElement;
12
+ this.viewportService = inject(ViewportService);
13
+ this.rootSvgSelection = select(this.rootSvg);
14
+ this.zoomableSelection = select(this.host);
15
+ // under the hood this effect triggers handleZoom, so error throws without this flag
16
+ // TODO: hack with timer fixes wrong node scaling (handle positions not matched with content size)
17
+ this.manualViewportChangeEffect = effect(() => setTimeout(() => {
18
+ const viewport = this.viewportService.writableViewport();
19
+ const state = viewport.state;
20
+ if (viewport.changeType === 'initial') {
21
+ return;
22
+ }
23
+ // If only zoom provided
24
+ if (isDefined(state.zoom) && (!isDefined(state.x) && !isDefined(state.y))) {
25
+ this.rootSvgSelection.call(this.zoomBehavior.scaleTo, state.zoom);
26
+ return;
27
+ }
28
+ // If only pan provided
29
+ if ((isDefined(state.x) && isDefined(state.y)) && !isDefined(state.zoom)) {
30
+ this.rootSvgSelection.call(this.zoomBehavior.translateTo, state.x, state.y);
31
+ return;
32
+ }
33
+ // If whole viewort state provided
34
+ if (isDefined(state.x) && isDefined(state.y) && isDefined(state.zoom)) {
35
+ this.rootSvgSelection.call(this.zoomBehavior.transform, zoomIdentity.translate(state.x, state.y).scale(state.zoom));
36
+ return;
37
+ }
38
+ }), { allowSignalWrites: true });
39
+ this.handleZoom = ({ transform }) => {
40
+ // update public signal for user to read
41
+ this.viewportService.readableViewport.set({ zoom: transform.k, x: transform.x, y: transform.y });
42
+ this.zoomableSelection.attr('transform', transform.toString());
43
+ };
44
+ }
45
+ ngOnInit() {
46
+ this.zoomBehavior = zoom()
47
+ .scaleExtent([this.minZoom, this.maxZoom])
48
+ .on('zoom', this.handleZoom);
49
+ this.rootSvgSelection.call(this.zoomBehavior);
50
+ }
51
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MapContextDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
52
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: MapContextDirective, selector: "g[mapContext]", inputs: { minZoom: "minZoom", maxZoom: "maxZoom" }, ngImport: i0 }); }
53
+ }
54
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MapContextDirective, decorators: [{
55
+ type: Directive,
56
+ args: [{ selector: 'g[mapContext]' }]
57
+ }], propDecorators: { minZoom: [{
58
+ type: Input
59
+ }], maxZoom: [{
60
+ type: Input
61
+ }] } });
62
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLWNvbnRleHQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2RpcmVjdGl2ZXMvbWFwLWNvbnRleHQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFZLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxFQUF5QixNQUFNLGVBQWUsQ0FBQztBQUN0SCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3RDLE9BQU8sRUFBNkIsSUFBSSxFQUFFLFlBQVksRUFBaUIsTUFBTSxTQUFTLENBQUM7QUFDdkYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7QUFLbEUsTUFBTSxPQUFPLG1CQUFtQjtJQURoQztRQVFZLFlBQU8sR0FBRyxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQyxPQUFPLENBQUE7UUFDbkQsU0FBSSxHQUFHLE1BQU0sQ0FBMEIsVUFBVSxDQUFDLENBQUMsYUFBYSxDQUFBO1FBQ2hFLG9CQUFlLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFBO1FBRXpDLHFCQUFnQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDdkMsc0JBQWlCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUUvQyxvRkFBb0Y7UUFDcEYsa0dBQWtHO1FBQ3hGLCtCQUEwQixHQUFHLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2xFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQTtZQUN4RCxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFBO1lBRTVCLElBQUksUUFBUSxDQUFDLFVBQVUsS0FBSyxTQUFTLEVBQUU7Z0JBQ3JDLE9BQU07YUFDUDtZQUVELHdCQUF3QjtZQUN4QixJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3pFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUVqRSxPQUFNO2FBQ1A7WUFFRCx1QkFBdUI7WUFDdkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDeEUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTtnQkFFM0UsT0FBTTthQUNQO1lBRUQsa0NBQWtDO1lBQ2xDLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3JFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQ3BELFlBQVksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FDM0QsQ0FBQTtnQkFFRCxPQUFNO2FBQ1A7UUFDSCxDQUFDLENBQUMsRUFBRSxFQUFFLGlCQUFpQixFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7UUFZeEIsZUFBVSxHQUFHLENBQUMsRUFBRSxTQUFTLEVBQWEsRUFBRSxFQUFFO1lBQ2hELHdDQUF3QztZQUN4QyxJQUFJLENBQUMsZUFBZSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQTtZQUVoRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQTtRQUNoRSxDQUFDLENBQUE7S0FDRjtJQWRRLFFBQVE7UUFDYixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksRUFBMEI7YUFDL0MsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDekMsRUFBRSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUE7UUFFOUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUE7SUFDL0MsQ0FBQzsrR0F4RFUsbUJBQW1CO21HQUFuQixtQkFBbUI7OzRGQUFuQixtQkFBbUI7a0JBRC9CLFNBQVM7bUJBQUMsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFOzhCQUcvQixPQUFPO3NCQURiLEtBQUs7Z0JBSUMsT0FBTztzQkFEYixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBJbmplY3RvciwgSW5wdXQsIE9uSW5pdCwgZWZmZWN0LCBpbmplY3QsIHJ1bkluSW5qZWN0aW9uQ29udGV4dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgc2VsZWN0IH0gZnJvbSAnZDMtc2VsZWN0aW9uJztcbmltcG9ydCB7IEQzWm9vbUV2ZW50LCBab29tQmVoYXZpb3IsIHpvb20sIHpvb21JZGVudGl0eSwgem9vbVRyYW5zZm9ybSB9IGZyb20gJ2QzLXpvb20nO1xuaW1wb3J0IHsgVmlld3BvcnRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvdmlld3BvcnQuc2VydmljZSc7XG5pbXBvcnQgeyBpc0RlZmluZWQgfSBmcm9tICcuLi91dGlscy9pcy1kZWZpbmVkJztcbmltcG9ydCB7IFJvb3RTdmdSZWZlcmVuY2VEaXJlY3RpdmUgfSBmcm9tICcuL3JlZmVyZW5jZS5kaXJlY3RpdmUnO1xuXG50eXBlIFpvb21FdmVudCA9IEQzWm9vbUV2ZW50PFNWR1NWR0VsZW1lbnQsIHVua25vd24+XG5cbkBEaXJlY3RpdmUoeyBzZWxlY3RvcjogJ2dbbWFwQ29udGV4dF0nIH0pXG5leHBvcnQgY2xhc3MgTWFwQ29udGV4dERpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBtaW5ab29tITogbnVtYmVyXG5cbiAgQElucHV0KClcbiAgcHVibGljIG1heFpvb20hOiBudW1iZXJcblxuICBwcm90ZWN0ZWQgcm9vdFN2ZyA9IGluamVjdChSb290U3ZnUmVmZXJlbmNlRGlyZWN0aXZlKS5lbGVtZW50XG4gIHByb3RlY3RlZCBob3N0ID0gaW5qZWN0PEVsZW1lbnRSZWY8U1ZHR0VsZW1lbnQ+PihFbGVtZW50UmVmKS5uYXRpdmVFbGVtZW50XG4gIHByb3RlY3RlZCB2aWV3cG9ydFNlcnZpY2UgPSBpbmplY3QoVmlld3BvcnRTZXJ2aWNlKVxuXG4gIHByb3RlY3RlZCByb290U3ZnU2VsZWN0aW9uID0gc2VsZWN0KHRoaXMucm9vdFN2ZylcbiAgcHJvdGVjdGVkIHpvb21hYmxlU2VsZWN0aW9uID0gc2VsZWN0KHRoaXMuaG9zdClcblxuICAvLyB1bmRlciB0aGUgaG9vZCB0aGlzIGVmZmVjdCB0cmlnZ2VycyBoYW5kbGVab29tLCBzbyBlcnJvciB0aHJvd3Mgd2l0aG91dCB0aGlzIGZsYWdcbiAgLy8gVE9ETzogaGFjayB3aXRoIHRpbWVyIGZpeGVzIHdyb25nIG5vZGUgc2NhbGluZyAoaGFuZGxlIHBvc2l0aW9ucyBub3QgbWF0Y2hlZCB3aXRoIGNvbnRlbnQgc2l6ZSlcbiAgcHJvdGVjdGVkIG1hbnVhbFZpZXdwb3J0Q2hhbmdlRWZmZWN0ID0gZWZmZWN0KCgpID0+IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIGNvbnN0IHZpZXdwb3J0ID0gdGhpcy52aWV3cG9ydFNlcnZpY2Uud3JpdGFibGVWaWV3cG9ydCgpXG4gICAgY29uc3Qgc3RhdGUgPSB2aWV3cG9ydC5zdGF0ZVxuXG4gICAgaWYgKHZpZXdwb3J0LmNoYW5nZVR5cGUgPT09ICdpbml0aWFsJykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gSWYgb25seSB6b29tIHByb3ZpZGVkXG4gICAgaWYgKGlzRGVmaW5lZChzdGF0ZS56b29tKSAmJiAoIWlzRGVmaW5lZChzdGF0ZS54KSAmJiAhaXNEZWZpbmVkKHN0YXRlLnkpKSkge1xuICAgICAgdGhpcy5yb290U3ZnU2VsZWN0aW9uLmNhbGwodGhpcy56b29tQmVoYXZpb3Iuc2NhbGVUbywgc3RhdGUuem9vbSlcblxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gSWYgb25seSBwYW4gcHJvdmlkZWRcbiAgICBpZiAoKGlzRGVmaW5lZChzdGF0ZS54KSAmJiBpc0RlZmluZWQoc3RhdGUueSkpICYmICFpc0RlZmluZWQoc3RhdGUuem9vbSkpIHtcbiAgICAgIHRoaXMucm9vdFN2Z1NlbGVjdGlvbi5jYWxsKHRoaXMuem9vbUJlaGF2aW9yLnRyYW5zbGF0ZVRvLCBzdGF0ZS54LCBzdGF0ZS55KVxuXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBJZiB3aG9sZSB2aWV3b3J0IHN0YXRlIHByb3ZpZGVkXG4gICAgaWYgKGlzRGVmaW5lZChzdGF0ZS54KSAmJiBpc0RlZmluZWQoc3RhdGUueSkgJiYgaXNEZWZpbmVkKHN0YXRlLnpvb20pKSB7XG4gICAgICB0aGlzLnJvb3RTdmdTZWxlY3Rpb24uY2FsbCh0aGlzLnpvb21CZWhhdmlvci50cmFuc2Zvcm0sXG4gICAgICAgIHpvb21JZGVudGl0eS50cmFuc2xhdGUoc3RhdGUueCwgc3RhdGUueSkuc2NhbGUoc3RhdGUuem9vbSlcbiAgICAgIClcblxuICAgICAgcmV0dXJuXG4gICAgfVxuICB9KSwgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9KVxuXG4gIHByb3RlY3RlZCB6b29tQmVoYXZpb3IhOiBab29tQmVoYXZpb3I8U1ZHU1ZHRWxlbWVudCwgdW5rbm93bj47XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuem9vbUJlaGF2aW9yID0gem9vbTxTVkdTVkdFbGVtZW50LCB1bmtub3duPigpXG4gICAgICAuc2NhbGVFeHRlbnQoW3RoaXMubWluWm9vbSwgdGhpcy5tYXhab29tXSlcbiAgICAgIC5vbignem9vbScsIHRoaXMuaGFuZGxlWm9vbSlcblxuICAgIHRoaXMucm9vdFN2Z1NlbGVjdGlvbi5jYWxsKHRoaXMuem9vbUJlaGF2aW9yKVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVab29tID0gKHsgdHJhbnNmb3JtIH06IFpvb21FdmVudCkgPT4ge1xuICAgIC8vIHVwZGF0ZSBwdWJsaWMgc2lnbmFsIGZvciB1c2VyIHRvIHJlYWRcbiAgICB0aGlzLnZpZXdwb3J0U2VydmljZS5yZWFkYWJsZVZpZXdwb3J0LnNldCh7IHpvb206IHRyYW5zZm9ybS5rLCB4OiB0cmFuc2Zvcm0ueCwgeTogdHJhbnNmb3JtLnkgfSlcblxuICAgIHRoaXMuem9vbWFibGVTZWxlY3Rpb24uYXR0cigndHJhbnNmb3JtJywgdHJhbnNmb3JtLnRvU3RyaW5nKCkpXG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,16 @@
1
+ import { Directive, ElementRef, inject } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class RootSvgReferenceDirective {
4
+ constructor() {
5
+ this.element = inject(ElementRef).nativeElement;
6
+ }
7
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RootSvgReferenceDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
8
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: RootSvgReferenceDirective, selector: "svg[rootSvgRef]", ngImport: i0 }); }
9
+ }
10
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RootSvgReferenceDirective, decorators: [{
11
+ type: Directive,
12
+ args: [{
13
+ selector: 'svg[rootSvgRef]'
14
+ }]
15
+ }] });
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmZXJlbmNlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC12Zmxvdy1saWIvc3JjL2xpYi92Zmxvdy9kaXJlY3RpdmVzL3JlZmVyZW5jZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUs5RCxNQUFNLE9BQU8seUJBQXlCO0lBSHRDO1FBSWtCLFlBQU8sR0FBRyxNQUFNLENBQTRCLFVBQVUsQ0FBQyxDQUFDLGFBQWEsQ0FBQTtLQUN0RjsrR0FGWSx5QkFBeUI7bUdBQXpCLHlCQUF5Qjs7NEZBQXpCLHlCQUF5QjtrQkFIckMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsaUJBQWlCO2lCQUM1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ3N2Z1tyb290U3ZnUmVmXSdcbn0pXG5leHBvcnQgY2xhc3MgUm9vdFN2Z1JlZmVyZW5jZURpcmVjdGl2ZSB7XG4gIHB1YmxpYyByZWFkb25seSBlbGVtZW50ID0gaW5qZWN0PEVsZW1lbnRSZWY8U1ZHU1ZHRWxlbWVudD4+KEVsZW1lbnRSZWYpLm5hdGl2ZUVsZW1lbnRcbn1cbiJdfQ==
@@ -0,0 +1,26 @@
1
+ import { Directive, HostListener, inject } from '@angular/core';
2
+ import { FlowStatusService } from '../services/flow-status.service';
3
+ import * as i0 from "@angular/core";
4
+ // TODO: too general purpose nane
5
+ export class RootSvgContextDirective {
6
+ constructor() {
7
+ this.flowStatusService = inject(FlowStatusService);
8
+ }
9
+ // TODO: check for multiple instances on page
10
+ resetConnection() {
11
+ const status = this.flowStatusService.status();
12
+ if (status.state === 'connection-start') {
13
+ this.flowStatusService.setIdleStatus();
14
+ }
15
+ }
16
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RootSvgContextDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
17
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: RootSvgContextDirective, selector: "svg[rootSvgContext]", host: { listeners: { "document:mouseup": "resetConnection()" } }, ngImport: i0 }); }
18
+ }
19
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RootSvgContextDirective, decorators: [{
20
+ type: Directive,
21
+ args: [{ selector: 'svg[rootSvgContext]' }]
22
+ }], propDecorators: { resetConnection: [{
23
+ type: HostListener,
24
+ args: ['document:mouseup']
25
+ }] } });
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9vdC1zdmctY29udGV4dC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmZsb3ctbGliL3NyYy9saWIvdmZsb3cvZGlyZWN0aXZlcy9yb290LXN2Zy1jb250ZXh0LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUNBQWlDLENBQUM7O0FBRXBFLGlDQUFpQztBQUVqQyxNQUFNLE9BQU8sdUJBQXVCO0lBRHBDO1FBRVUsc0JBQWlCLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUE7S0FXdEQ7SUFUQyw2Q0FBNkM7SUFFbkMsZUFBZTtRQUN2QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLENBQUE7UUFFOUMsSUFBSSxNQUFNLENBQUMsS0FBSyxLQUFLLGtCQUFrQixFQUFFO1lBQ3ZDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQTtTQUN2QztJQUNILENBQUM7K0dBWFUsdUJBQXVCO21HQUF2Qix1QkFBdUI7OzRGQUF2Qix1QkFBdUI7a0JBRG5DLFNBQVM7bUJBQUMsRUFBRSxRQUFRLEVBQUUscUJBQXFCLEVBQUU7OEJBTWxDLGVBQWU7c0JBRHhCLFlBQVk7dUJBQUMsa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBIb3N0TGlzdGVuZXIsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRmxvd1N0YXR1c1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9mbG93LXN0YXR1cy5zZXJ2aWNlJztcblxuLy8gVE9ETzogdG9vIGdlbmVyYWwgcHVycG9zZSBuYW5lXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICdzdmdbcm9vdFN2Z0NvbnRleHRdJyB9KVxuZXhwb3J0IGNsYXNzIFJvb3RTdmdDb250ZXh0RGlyZWN0aXZlIHtcbiAgcHJpdmF0ZSBmbG93U3RhdHVzU2VydmljZSA9IGluamVjdChGbG93U3RhdHVzU2VydmljZSlcblxuICAvLyBUT0RPOiBjaGVjayBmb3IgbXVsdGlwbGUgaW5zdGFuY2VzIG9uIHBhZ2VcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6bW91c2V1cCcpXG4gIHByb3RlY3RlZCByZXNldENvbm5lY3Rpb24oKSB7XG4gICAgY29uc3Qgc3RhdHVzID0gdGhpcy5mbG93U3RhdHVzU2VydmljZS5zdGF0dXMoKVxuXG4gICAgaWYgKHN0YXR1cy5zdGF0ZSA9PT0gJ2Nvbm5lY3Rpb24tc3RhcnQnKSB7XG4gICAgICB0aGlzLmZsb3dTdGF0dXNTZXJ2aWNlLnNldElkbGVTdGF0dXMoKVxuICAgIH1cbiAgfVxufVxuIl19
@@ -0,0 +1,29 @@
1
+ import { Directive, ElementRef, computed, inject } from '@angular/core';
2
+ import { toSignal } from '@angular/core/rxjs-interop';
3
+ import { fromEvent, map } from 'rxjs';
4
+ import { RootSvgReferenceDirective } from './reference.directive';
5
+ import * as i0 from "@angular/core";
6
+ export class SpacePointContextDirective {
7
+ constructor() {
8
+ /**
9
+ * Signal with current mouse position in svg space
10
+ */
11
+ this.svgCurrentSpacePoint = computed(() => {
12
+ const movement = this.mouseMovement();
13
+ const point = this.rootSvg.createSVGPoint();
14
+ point.x = movement.x;
15
+ point.y = movement.y;
16
+ return point.matrixTransform(this.host.getScreenCTM().inverse());
17
+ });
18
+ this.rootSvg = inject(RootSvgReferenceDirective).element;
19
+ this.host = inject(ElementRef).nativeElement;
20
+ this.mouseMovement = toSignal(fromEvent(this.rootSvg, 'mousemove').pipe(map(event => ({ x: event.clientX, y: event.clientY }))), { initialValue: { x: 0, y: 0 } });
21
+ }
22
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SpacePointContextDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
23
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: SpacePointContextDirective, selector: "g[spacePointContext]", ngImport: i0 }); }
24
+ }
25
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SpacePointContextDirective, decorators: [{
26
+ type: Directive,
27
+ args: [{ selector: 'g[spacePointContext]' }]
28
+ }] });
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhY2UtcG9pbnQtY29udGV4dC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmZsb3ctbGliL3NyYy9saWIvdmZsb3cvZGlyZWN0aXZlcy9zcGFjZS1wb2ludC1jb250ZXh0LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBVSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBYSxNQUFNLE1BQU0sQ0FBQztBQUNqRCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7QUFJbEUsTUFBTSxPQUFPLDBCQUEwQjtJQUR2QztRQUVFOztXQUVHO1FBQ0kseUJBQW9CLEdBQWtCLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDekQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFBO1lBRXJDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLENBQUE7WUFDM0MsS0FBSyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFBO1lBQ3BCLEtBQUssQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQTtZQUVwQixPQUFPLEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFBO1FBQ25FLENBQUMsQ0FBQyxDQUFBO1FBRU0sWUFBTyxHQUFHLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLE9BQU8sQ0FBQTtRQUNuRCxTQUFJLEdBQUcsTUFBTSxDQUEwQixVQUFVLENBQUMsQ0FBQyxhQUFhLENBQUE7UUFFaEUsa0JBQWEsR0FBRyxRQUFRLENBQzlCLFNBQVMsQ0FBYSxJQUFJLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FDbkQsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUN2RCxFQUNELEVBQUUsWUFBWSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FDakMsQ0FBQTtLQUNGOytHQXZCWSwwQkFBMEI7bUdBQTFCLDBCQUEwQjs7NEZBQTFCLDBCQUEwQjtrQkFEdEMsU0FBUzttQkFBQyxFQUFFLFFBQVEsRUFBRSxzQkFBc0IsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgU2lnbmFsLCBjb21wdXRlZCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IGZyb21FdmVudCwgbWFwLCBzdGFydFdpdGggfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFJvb3RTdmdSZWZlcmVuY2VEaXJlY3RpdmUgfSBmcm9tICcuL3JlZmVyZW5jZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgUG9pbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3BvaW50LmludGVyZmFjZSc7XG5cbkBEaXJlY3RpdmUoeyBzZWxlY3RvcjogJ2dbc3BhY2VQb2ludENvbnRleHRdJyB9KVxuZXhwb3J0IGNsYXNzIFNwYWNlUG9pbnRDb250ZXh0RGlyZWN0aXZlIHtcbiAgLyoqXG4gICAqIFNpZ25hbCB3aXRoIGN1cnJlbnQgbW91c2UgcG9zaXRpb24gaW4gc3ZnIHNwYWNlXG4gICAqL1xuICBwdWJsaWMgc3ZnQ3VycmVudFNwYWNlUG9pbnQ6IFNpZ25hbDxQb2ludD4gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgbW92ZW1lbnQgPSB0aGlzLm1vdXNlTW92ZW1lbnQoKVxuXG4gICAgY29uc3QgcG9pbnQgPSB0aGlzLnJvb3RTdmcuY3JlYXRlU1ZHUG9pbnQoKVxuICAgIHBvaW50LnggPSBtb3ZlbWVudC54XG4gICAgcG9pbnQueSA9IG1vdmVtZW50LnlcblxuICAgIHJldHVybiBwb2ludC5tYXRyaXhUcmFuc2Zvcm0odGhpcy5ob3N0LmdldFNjcmVlbkNUTSgpIS5pbnZlcnNlKCkpXG4gIH0pXG5cbiAgcHJpdmF0ZSByb290U3ZnID0gaW5qZWN0KFJvb3RTdmdSZWZlcmVuY2VEaXJlY3RpdmUpLmVsZW1lbnRcbiAgcHJpdmF0ZSBob3N0ID0gaW5qZWN0PEVsZW1lbnRSZWY8U1ZHR0VsZW1lbnQ+PihFbGVtZW50UmVmKS5uYXRpdmVFbGVtZW50XG5cbiAgcHJpdmF0ZSBtb3VzZU1vdmVtZW50ID0gdG9TaWduYWwoXG4gICAgZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHRoaXMucm9vdFN2ZywgJ21vdXNlbW92ZScpLnBpcGUoXG4gICAgICBtYXAoZXZlbnQgPT4gKHsgeDogZXZlbnQuY2xpZW50WCwgeTogZXZlbnQuY2xpZW50WSB9KSksXG4gICAgKSxcbiAgICB7IGluaXRpYWxWYWx1ZTogeyB4OiAwLCB5OiAwIH0gfVxuICApXG59XG4iXX0=
@@ -0,0 +1,58 @@
1
+ import { Directive, TemplateRef, inject } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class EdgeTemplateDirective {
4
+ constructor() {
5
+ this.templateRef = inject(TemplateRef);
6
+ }
7
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EdgeTemplateDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
8
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: EdgeTemplateDirective, selector: "ng-template[edge]", ngImport: i0 }); }
9
+ }
10
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EdgeTemplateDirective, decorators: [{
11
+ type: Directive,
12
+ args: [{ selector: 'ng-template[edge]' }]
13
+ }] });
14
+ export class ConnectionTemplateDirective {
15
+ constructor() {
16
+ this.templateRef = inject(TemplateRef);
17
+ }
18
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ConnectionTemplateDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
19
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: ConnectionTemplateDirective, selector: "ng-template[connection]", ngImport: i0 }); }
20
+ }
21
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ConnectionTemplateDirective, decorators: [{
22
+ type: Directive,
23
+ args: [{ selector: 'ng-template[connection]' }]
24
+ }] });
25
+ export class EdgeLabelHtmlTemplateDirective {
26
+ constructor() {
27
+ this.templateRef = inject(TemplateRef);
28
+ }
29
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EdgeLabelHtmlTemplateDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
30
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: EdgeLabelHtmlTemplateDirective, selector: "ng-template[edgeLabelHtml]", ngImport: i0 }); }
31
+ }
32
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EdgeLabelHtmlTemplateDirective, decorators: [{
33
+ type: Directive,
34
+ args: [{ selector: 'ng-template[edgeLabelHtml]' }]
35
+ }] });
36
+ export class NodeHtmlTemplateDirective {
37
+ constructor() {
38
+ this.templateRef = inject(TemplateRef);
39
+ }
40
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NodeHtmlTemplateDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
41
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: NodeHtmlTemplateDirective, selector: "ng-template[nodeHtml]", ngImport: i0 }); }
42
+ }
43
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NodeHtmlTemplateDirective, decorators: [{
44
+ type: Directive,
45
+ args: [{ selector: 'ng-template[nodeHtml]' }]
46
+ }] });
47
+ export class HandleTemplateDirective {
48
+ constructor() {
49
+ this.templateRef = inject(TemplateRef);
50
+ }
51
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: HandleTemplateDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
52
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: HandleTemplateDirective, selector: "ng-template[handle]", ngImport: i0 }); }
53
+ }
54
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: HandleTemplateDirective, decorators: [{
55
+ type: Directive,
56
+ args: [{ selector: 'ng-template[handle]' }]
57
+ }] });
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2RpcmVjdGl2ZXMvdGVtcGxhdGUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFJL0QsTUFBTSxPQUFPLHFCQUFxQjtJQURsQztRQUVTLGdCQUFXLEdBQUcsTUFBTSxDQUEyQixXQUFXLENBQUMsQ0FBQTtLQUNuRTsrR0FGWSxxQkFBcUI7bUdBQXJCLHFCQUFxQjs7NEZBQXJCLHFCQUFxQjtrQkFEakMsU0FBUzttQkFBQyxFQUFFLFFBQVEsRUFBRSxtQkFBbUIsRUFBRTs7QUFNNUMsTUFBTSxPQUFPLDJCQUEyQjtJQUR4QztRQUVTLGdCQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFBO0tBQ3pDOytHQUZZLDJCQUEyQjttR0FBM0IsMkJBQTJCOzs0RkFBM0IsMkJBQTJCO2tCQUR2QyxTQUFTO21CQUFDLEVBQUUsUUFBUSxFQUFFLHlCQUF5QixFQUFFOztBQU1sRCxNQUFNLE9BQU8sOEJBQThCO0lBRDNDO1FBRVMsZ0JBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUE7S0FDekM7K0dBRlksOEJBQThCO21HQUE5Qiw4QkFBOEI7OzRGQUE5Qiw4QkFBOEI7a0JBRDFDLFNBQVM7bUJBQUMsRUFBRSxRQUFRLEVBQUUsNEJBQTRCLEVBQUU7O0FBTXJELE1BQU0sT0FBTyx5QkFBeUI7SUFEdEM7UUFFUyxnQkFBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQTtLQUN6QzsrR0FGWSx5QkFBeUI7bUdBQXpCLHlCQUF5Qjs7NEZBQXpCLHlCQUF5QjtrQkFEckMsU0FBUzttQkFBQyxFQUFFLFFBQVEsRUFBRSx1QkFBdUIsRUFBRTs7QUFNaEQsTUFBTSxPQUFPLHVCQUF1QjtJQURwQztRQUVTLGdCQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFBO0tBQ3pDOytHQUZZLHVCQUF1QjttR0FBdkIsdUJBQXVCOzs0RkFBdkIsdUJBQXVCO2tCQURuQyxTQUFTO21CQUFDLEVBQUUsUUFBUSxFQUFFLHFCQUFxQixFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBUZW1wbGF0ZVJlZiwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBFZGdlQ29udGV4dCB9IGZyb20gJy4uL2ludGVyZmFjZXMvdGVtcGxhdGUtY29udGV4dC5pbnRlcmZhY2UnO1xuXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICduZy10ZW1wbGF0ZVtlZGdlXScgfSlcbmV4cG9ydCBjbGFzcyBFZGdlVGVtcGxhdGVEaXJlY3RpdmUge1xuICBwdWJsaWMgdGVtcGxhdGVSZWYgPSBpbmplY3Q8VGVtcGxhdGVSZWY8RWRnZUNvbnRleHQ+PihUZW1wbGF0ZVJlZilcbn1cblxuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnbmctdGVtcGxhdGVbY29ubmVjdGlvbl0nIH0pXG5leHBvcnQgY2xhc3MgQ29ubmVjdGlvblRlbXBsYXRlRGlyZWN0aXZlIHtcbiAgcHVibGljIHRlbXBsYXRlUmVmID0gaW5qZWN0KFRlbXBsYXRlUmVmKVxufVxuXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICduZy10ZW1wbGF0ZVtlZGdlTGFiZWxIdG1sXScgfSlcbmV4cG9ydCBjbGFzcyBFZGdlTGFiZWxIdG1sVGVtcGxhdGVEaXJlY3RpdmUge1xuICBwdWJsaWMgdGVtcGxhdGVSZWYgPSBpbmplY3QoVGVtcGxhdGVSZWYpXG59XG5cbkBEaXJlY3RpdmUoeyBzZWxlY3RvcjogJ25nLXRlbXBsYXRlW25vZGVIdG1sXScgfSlcbmV4cG9ydCBjbGFzcyBOb2RlSHRtbFRlbXBsYXRlRGlyZWN0aXZlIHtcbiAgcHVibGljIHRlbXBsYXRlUmVmID0gaW5qZWN0KFRlbXBsYXRlUmVmKVxufVxuXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICduZy10ZW1wbGF0ZVtoYW5kbGVdJyB9KVxuZXhwb3J0IGNsYXNzIEhhbmRsZVRlbXBsYXRlRGlyZWN0aXZlIHtcbiAgcHVibGljIHRlbXBsYXRlUmVmID0gaW5qZWN0KFRlbXBsYXRlUmVmKVxufVxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ubmVjdGlvbi1zZXR0aW5ncy5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmZsb3ctbGliL3NyYy9saWIvdmZsb3cvaW50ZXJmYWNlcy9jb25uZWN0aW9uLXNldHRpbmdzLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29ubmVjdGlvbiB9IGZyb20gXCIuL2Nvbm5lY3Rpb24uaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBDdXJ2ZSwgRWRnZVR5cGUgfSBmcm9tIFwiLi9lZGdlLmludGVyZmFjZVwiO1xuaW1wb3J0IHsgTWFya2VyIH0gZnJvbSBcIi4vbWFya2VyLmludGVyZmFjZVwiO1xuXG5leHBvcnQgdHlwZSBDb25uZWN0aW9uVmFsaWRhdG9yRm4gPSAoY29ubmVjdGlvbjogQ29ubmVjdGlvbikgPT4gYm9vbGVhblxuXG5leHBvcnQgaW50ZXJmYWNlIENvbm5lY3Rpb25TZXR0aW5ncyB7XG4gIGN1cnZlPzogQ3VydmVcbiAgdHlwZT86IEVkZ2VUeXBlXG4gIHZhbGlkYXRvcj86IENvbm5lY3Rpb25WYWxpZGF0b3JGblxuICBtYXJrZXI/OiBNYXJrZXJcbn1cblxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ubmVjdGlvbi5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmZsb3ctbGliL3NyYy9saWIvdmZsb3cvaW50ZXJmYWNlcy9jb25uZWN0aW9uLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBDb25uZWN0aW9uIHtcbiAgc291cmNlOiBzdHJpbmdcbiAgdGFyZ2V0OiBzdHJpbmdcbn1cbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRnZS1sYWJlbC5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmZsb3ctbGliL3NyYy9saWIvdmZsb3cvaW50ZXJmYWNlcy9lZGdlLWxhYmVsLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgRWRnZUxhYmVsVHlwZSA9ICdodG1sLXRlbXBsYXRlJ1xuZXhwb3J0IHR5cGUgRWRnZUxhYmVsUG9zaXRpb24gPSAnc3RhcnQnIHwgJ2NlbnRlcicgfCAnZW5kJ1xuXG5leHBvcnQgaW50ZXJmYWNlIEVkZ2VMYWJlbDxUID0gdW5rbm93bj4ge1xuICB0eXBlOiBFZGdlTGFiZWxUeXBlXG4gIGRhdGE/OiBUXG59XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRnZS5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmZsb3ctbGliL3NyYy9saWIvdmZsb3cvaW50ZXJmYWNlcy9lZGdlLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29ubmVjdGlvbiB9IGZyb20gXCIuL2Nvbm5lY3Rpb24uaW50ZXJmYWNlXCJcbmltcG9ydCB7IEVkZ2VMYWJlbCwgRWRnZUxhYmVsUG9zaXRpb24gfSBmcm9tIFwiLi9lZGdlLWxhYmVsLmludGVyZmFjZVwiXG5pbXBvcnQgeyBNYXJrZXIgfSBmcm9tIFwiLi9tYXJrZXIuaW50ZXJmYWNlXCJcblxuZXhwb3J0IHR5cGUgRWRnZVR5cGUgPSAnZGVmYXVsdCcgfCAndGVtcGxhdGUnXG5leHBvcnQgdHlwZSBDdXJ2ZSA9ICdzdHJhaWdodCcgfCAnYmV6aWVyJ1xuXG5leHBvcnQgaW50ZXJmYWNlIEVkZ2U8VCA9IHVua25vd24+IGV4dGVuZHMgQ29ubmVjdGlvbiB7XG4gIGlkOiBzdHJpbmdcbiAgdHlwZT86IEVkZ2VUeXBlXG4gIGN1cnZlPzogQ3VydmVcbiAgZGF0YT86IFRcbiAgZWRnZUxhYmVscz86IHsgW3Bvc2l0aW9uIGluIEVkZ2VMYWJlbFBvc2l0aW9uXT86IEVkZ2VMYWJlbCB9XG4gIG1hcmtlcnM/OiB7XG4gICAgc3RhcnQ/OiBNYXJrZXJcbiAgICBlbmQ/OiBNYXJrZXJcbiAgfVxufVxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlLXBvc2l0aW9ucy5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmZsb3ctbGliL3NyYy9saWIvdmZsb3cvaW50ZXJmYWNlcy9oYW5kbGUtcG9zaXRpb25zLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUG9zaXRpb24gfSBmcm9tIFwiLi4vdHlwZXMvcG9zaXRpb24udHlwZVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEhhbmRsZVBvc2l0aW9ucyB7XG4gIHNvdXJjZTogUG9zaXRpb25cbiAgdGFyZ2V0OiBQb3NpdGlvblxufVxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2VyLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC12Zmxvdy1saWIvc3JjL2xpYi92Zmxvdy9pbnRlcmZhY2VzL21hcmtlci5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgTWFya2VyIHtcbiAgdHlwZT86ICdhcnJvdycgfCAnYXJyb3ctY2xvc2VkJ1xuICB3aWR0aD86IG51bWJlclxuICBoZWlnaHQ/OiBudW1iZXJcbiAgY29sb3I/OiBzdHJpbmdcbiAgb3JpZW50Pzogc3RyaW5nXG4gIG1hcmtlclVuaXRzPzogJ3VzZXJTcGFjZU9uVXNlJyB8ICdzdHJva2VXaWR0aCdcbiAgc3Ryb2tlV2lkdGg/OiBudW1iZXJcbn1cbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmZsb3ctbGliL3NyYy9saWIvdmZsb3cvaW50ZXJmYWNlcy9ub2RlLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUG9pbnQgfSBmcm9tIFwiLi9wb2ludC5pbnRlcmZhY2VcIlxuXG5leHBvcnQgdHlwZSBOb2RlPFQgPSB1bmtub3duPiA9IFNoYXJlZE5vZGUgJiAoXG4gIERlZmF1bHROb2RlIHxcbiAgSHRtbFRlbXBsYXRlTm9kZTxUPlxuKVxuaW50ZXJmYWNlIFNoYXJlZE5vZGUge1xuICBpZDogc3RyaW5nXG4gIHBvaW50OiBQb2ludFxuICBkcmFnZ2FibGU/OiBib29sZWFuXG59XG5cbmludGVyZmFjZSBEZWZhdWx0Tm9kZSB7XG4gIHR5cGU6ICdkZWZhdWx0J1xuICB0ZXh0Pzogc3RyaW5nXG59XG5cbmludGVyZmFjZSBIdG1sVGVtcGxhdGVOb2RlPFQgPSB1bmtub3duPiB7XG4gIHR5cGU6ICdodG1sLXRlbXBsYXRlJ1xuICBkYXRhPzogVFxufVxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0aC1kYXRhLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC12Zmxvdy1saWIvc3JjL2xpYi92Zmxvdy9pbnRlcmZhY2VzL3BhdGgtZGF0YS5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVkZ2VMYWJlbFBvc2l0aW9uIH0gZnJvbSBcIi4vZWRnZS1sYWJlbC5pbnRlcmZhY2VcIjtcbmltcG9ydCB7IFBvaW50IH0gZnJvbSBcIi4vcG9pbnQuaW50ZXJmYWNlXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGF0aERhdGEge1xuICBwYXRoOiBzdHJpbmc7XG4gIHBvaW50czogeyBba2V5IGluIEVkZ2VMYWJlbFBvc2l0aW9uXTogUG9pbnQgfVxufVxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9pbnQuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2ludGVyZmFjZXMvcG9pbnQuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIFBvaW50IHtcbiAgeDogbnVtYmVyXG4gIHk6IG51bWJlclxufVxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtY29udGV4dC5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmZsb3ctbGliL3NyYy9saWIvdmZsb3cvaW50ZXJmYWNlcy90ZW1wbGF0ZS1jb250ZXh0LmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2lnbmFsIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIlxuaW1wb3J0IHsgRWRnZSB9IGZyb20gXCIuL2VkZ2UuaW50ZXJmYWNlXCJcblxuZXhwb3J0IGludGVyZmFjZSBFZGdlQ29udGV4dCB7XG4gICRpbXBsaWNpdDoge1xuICAgIGVkZ2U6IEVkZ2VcbiAgICBwYXRoOiBTaWduYWw8c3RyaW5nPlxuICAgIG1hcmtlclN0YXJ0OiBTaWduYWw8c3RyaW5nPlxuICAgIG1hcmtlckVuZDogU2lnbmFsPHN0cmluZz5cbiAgfVxufVxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3BvcnQuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2ludGVyZmFjZXMvdmlld3BvcnQuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBWaWV3cG9ydENoYW5nZVR5cGUgfSBmcm9tIFwiLi4vdHlwZXMvdmlld3BvcnQtY2hhbmdlLXR5cGUudHlwZVwiO1xuaW1wb3J0IHsgUG9pbnQgfSBmcm9tIFwiLi9wb2ludC5pbnRlcmZhY2VcIjtcblxuZXhwb3J0IGludGVyZmFjZSBWaWV3cG9ydFN0YXRlIGV4dGVuZHMgUG9pbnQge1xuICB6b29tOiBudW1iZXJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXcml0YWJsZVZpZXdwb3J0IHtcbiAgY2hhbmdlVHlwZTogVmlld3BvcnRDaGFuZ2VUeXBlXG4gIHN0YXRlOiBQYXJ0aWFsPFZpZXdwb3J0U3RhdGU+XG59XG4iXX0=