@limble/limble-tree 0.12.2 → 0.13.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 (45) hide show
  1. package/README.md +149 -149
  2. package/{esm2015/lib/classes/Branch.js → esm2020/lib/classes/Branch.mjs} +1 -1
  3. package/{esm2015/lib/classes/DropZone.js → esm2020/lib/classes/DropZone.mjs} +1 -1
  4. package/{esm2015/lib/classes/DropZoneLocation.js → esm2020/lib/classes/DropZoneLocation.mjs} +1 -1
  5. package/{esm2015/lib/custom-event-bindings/dragleave-no-change-detect.directive.js → esm2020/lib/custom-event-bindings/dragleave-no-change-detect.directive.mjs} +0 -0
  6. package/{esm2015/lib/custom-event-bindings/dragover-no-change-detect.directive.js → esm2020/lib/custom-event-bindings/dragover-no-change-detect.directive.mjs} +1 -1
  7. package/esm2020/lib/drop-zone/drop-zone.component.mjs +75 -0
  8. package/esm2020/lib/limble-tree-branch/limble-tree-branch.component.mjs +110 -0
  9. package/esm2020/lib/limble-tree-node/limble-tree-node.component.mjs +467 -0
  10. package/{esm2015/lib/limble-tree-placeholder/limble-tree-placeholder.component.js → esm2020/lib/limble-tree-placeholder/limble-tree-placeholder.component.mjs} +3 -8
  11. package/esm2020/lib/limble-tree-root/drop-zone.service.mjs +376 -0
  12. package/esm2020/lib/limble-tree-root/limble-tree-root.component.mjs +172 -0
  13. package/{esm2015/lib/limble-tree-root/tree-construction-status.service.js → esm2020/lib/limble-tree-root/tree-construction-status.service.mjs} +1 -1
  14. package/esm2020/lib/limble-tree-root/tree.service.mjs +297 -0
  15. package/{esm2015/lib/limble-tree.module.js → esm2020/lib/limble-tree.module.mjs} +5 -5
  16. package/{esm2015/lib/singletons/component-creator.service.js → esm2020/lib/singletons/component-creator.service.mjs} +1 -1
  17. package/esm2020/lib/singletons/drag-state.service.mjs +63 -0
  18. package/esm2020/lib/singletons/global-events.service.mjs +136 -0
  19. package/{esm2015/lib/util.js → esm2020/lib/util.mjs} +1 -1
  20. package/{esm2015/limble-limble-tree.js → esm2020/limble-limble-tree.mjs} +0 -0
  21. package/{esm2015/public-api.js → esm2020/public-api.mjs} +1 -1
  22. package/fesm2015/limble-limble-tree.mjs +2256 -0
  23. package/fesm2015/limble-limble-tree.mjs.map +1 -0
  24. package/{fesm2015/limble-limble-tree.js → fesm2020/limble-limble-tree.mjs} +105 -147
  25. package/fesm2020/limble-limble-tree.mjs.map +1 -0
  26. package/{limble-limble-tree.d.ts → index.d.ts} +0 -0
  27. package/lib/custom-event-bindings/dragleave-no-change-detect.directive.d.ts +1 -1
  28. package/lib/custom-event-bindings/dragover-no-change-detect.directive.d.ts +1 -1
  29. package/lib/drop-zone/drop-zone.component.d.ts +1 -1
  30. package/lib/limble-tree-branch/limble-tree-branch.component.d.ts +1 -1
  31. package/lib/limble-tree-node/limble-tree-node.component.d.ts +1 -1
  32. package/lib/limble-tree-placeholder/limble-tree-placeholder.component.d.ts +1 -1
  33. package/lib/limble-tree-root/limble-tree-root.component.d.ts +1 -1
  34. package/package.json +24 -10
  35. package/bundles/limble-limble-tree.umd.js +0 -2905
  36. package/bundles/limble-limble-tree.umd.js.map +0 -1
  37. package/esm2015/lib/drop-zone/drop-zone.component.js +0 -81
  38. package/esm2015/lib/limble-tree-branch/limble-tree-branch.component.js +0 -116
  39. package/esm2015/lib/limble-tree-node/limble-tree-node.component.js +0 -484
  40. package/esm2015/lib/limble-tree-root/drop-zone.service.js +0 -372
  41. package/esm2015/lib/limble-tree-root/limble-tree-root.component.js +0 -178
  42. package/esm2015/lib/limble-tree-root/tree.service.js +0 -301
  43. package/esm2015/lib/singletons/drag-state.service.js +0 -64
  44. package/esm2015/lib/singletons/global-events.service.js +0 -137
  45. package/fesm2015/limble-limble-tree.js.map +0 -1
@@ -0,0 +1,172 @@
1
+ import { Component, EventEmitter, Input, NgZone, Output, ViewChild, ViewContainerRef } from "@angular/core";
2
+ import { DropZoneService } from "./drop-zone.service";
3
+ import { TreeService } from "./tree.service";
4
+ import { isElementDescendant, isFirefox } from "../util";
5
+ import { first } from "rxjs/operators";
6
+ import { TreeConstructionStatus } from "./tree-construction-status.service";
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "./tree.service";
9
+ import * as i2 from "./drop-zone.service";
10
+ import * as i3 from "../singletons/drag-state.service";
11
+ import * as i4 from "../singletons/global-events.service";
12
+ import * as i5 from "@angular/common";
13
+ import * as i6 from "../limble-tree-placeholder/limble-tree-placeholder.component";
14
+ import * as i7 from "../custom-event-bindings/dragover-no-change-detect.directive";
15
+ import * as i8 from "../custom-event-bindings/dragleave-no-change-detect.directive";
16
+ const _c0 = ["host"];
17
+ function LimbleTreeRootComponent_limble_tree_placeholder_1_Template(rf, ctx) { if (rf & 1) {
18
+ i0.ɵɵelement(0, "limble-tree-placeholder");
19
+ } }
20
+ function LimbleTreeRootComponent_ng_template_2_Template(rf, ctx) { }
21
+ export class LimbleTreeRootComponent {
22
+ constructor(treeService, dropZoneService, dragStateService, globalEventsService, ngZone, changeDetectorRef, el) {
23
+ this.treeService = treeService;
24
+ this.dropZoneService = dropZoneService;
25
+ this.dragStateService = dragStateService;
26
+ this.globalEventsService = globalEventsService;
27
+ this.ngZone = ngZone;
28
+ this.changeDetectorRef = changeDetectorRef;
29
+ this.el = el;
30
+ this.treeChange = new EventEmitter();
31
+ this.treeDrop = new EventEmitter();
32
+ this.changesSubscription = this.treeService.changes$.subscribe(() => {
33
+ //"In dev mode, Angular performs an additional check after each change
34
+ //detection run, to ensure the bindings haven’t changed." We use a timeout here
35
+ //to preclude the possibility of causing a binding to update in the parent
36
+ //component after change detection runs but before the additional check.
37
+ //See https://angular.io/errors/NG0100 for details.
38
+ setTimeout(() => {
39
+ this.treeChange.emit();
40
+ });
41
+ });
42
+ this.dropSubscription = this.treeService.drops$.subscribe((drop) => {
43
+ setTimeout(() => {
44
+ this.treeDrop.emit(drop);
45
+ });
46
+ });
47
+ this.placeholder = false;
48
+ this.treeService.placeholder$.subscribe((value) => {
49
+ this.placeholder = value;
50
+ if (!NgZone.isInAngularZone()) {
51
+ this.changeDetectorRef.detectChanges();
52
+ }
53
+ });
54
+ }
55
+ ngAfterViewInit() {
56
+ if (this.options?.listMode !== true &&
57
+ (this.itemsPerPage !== undefined || this.page !== undefined)) {
58
+ console.warn("pagination is only allowed in listMode; `itemsPerPage` and `page` inputs will be ignored");
59
+ }
60
+ this.update();
61
+ this.changeDetectorRef.detectChanges();
62
+ this.ngZone.runOutsideAngular(() => {
63
+ //this is for mac os - without this dragover handler drop events aren't firing correctly
64
+ this.el.nativeElement.addEventListener("dragover", (event) => {
65
+ event.preventDefault();
66
+ });
67
+ });
68
+ }
69
+ ngOnChanges() {
70
+ if (this.host !== undefined && this.data !== undefined) {
71
+ this.update();
72
+ }
73
+ }
74
+ /** Rebuild the tree */
75
+ update() {
76
+ if (this.host === undefined) {
77
+ throw new Error("Failed to render limble tree. Failure occurred at root.");
78
+ }
79
+ if (this.data === undefined) {
80
+ throw new Error(`limbleTree requires a data object`);
81
+ }
82
+ this.treeService.init(this.host, this.data, this.options, this.itemsPerPage, this.page);
83
+ //We check for firefox here because there is a bug in Firefox that causes the
84
+ //custom scrolling to break. See https://bugzilla.mozilla.org/show_bug.cgi?id=505521#c80
85
+ if (!isFirefox()) {
86
+ this.globalEventsService.addScrolling();
87
+ }
88
+ }
89
+ dragoverHandler(event) {
90
+ if (event.dataTransfer === null) {
91
+ return;
92
+ }
93
+ event.stopPropagation();
94
+ event.preventDefault();
95
+ event.dataTransfer.dropEffect = "move";
96
+ }
97
+ dragleaveHandler(event) {
98
+ const currentTarget = event.currentTarget;
99
+ const relatedTarget = event.relatedTarget;
100
+ if (!(currentTarget instanceof Node) ||
101
+ !(relatedTarget instanceof Node) ||
102
+ isElementDescendant(currentTarget, relatedTarget) !== false) {
103
+ //event came from deeper in the tree. Ignore it.
104
+ return;
105
+ }
106
+ //Mouse has left the tree, so clear the drop zones
107
+ this.dropZoneService.clearVisibleZones();
108
+ this.changeDetectorRef.detectChanges();
109
+ }
110
+ dropHandler(event) {
111
+ event.stopPropagation();
112
+ if (this.dragStateService.getState() !== "droppable") {
113
+ return;
114
+ }
115
+ const sourceBranch = this.dragStateService.capture();
116
+ if (sourceBranch === undefined) {
117
+ throw new Error("failed to get current branch in dragendHandler");
118
+ }
119
+ const dropZone = this.dropZoneService.getActiveDropZone();
120
+ if (dropZone === null) {
121
+ throw new Error("failed to get active drop zone at drop handler");
122
+ }
123
+ this.treeService.captured = true;
124
+ this.dragStateService.state$
125
+ .pipe(first((message) => message === "idle"))
126
+ .subscribe(() => {
127
+ this.treeService.captured = false;
128
+ });
129
+ this.dropZoneService.clearVisibleZones();
130
+ this.treeService.drop(sourceBranch, dropZone.getFullInsertCoordinates());
131
+ }
132
+ ngOnDestroy() {
133
+ this.changesSubscription.unsubscribe();
134
+ this.dropSubscription.unsubscribe();
135
+ }
136
+ }
137
+ LimbleTreeRootComponent.ɵfac = function LimbleTreeRootComponent_Factory(t) { return new (t || LimbleTreeRootComponent)(i0.ɵɵdirectiveInject(i1.TreeService), i0.ɵɵdirectiveInject(i2.DropZoneService), i0.ɵɵdirectiveInject(i3.DragStateService), i0.ɵɵdirectiveInject(i4.GlobalEventsService), i0.ɵɵdirectiveInject(i0.NgZone), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i0.ElementRef)); };
138
+ LimbleTreeRootComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: LimbleTreeRootComponent, selectors: [["limble-tree-root"]], viewQuery: function LimbleTreeRootComponent_Query(rf, ctx) { if (rf & 1) {
139
+ i0.ɵɵviewQuery(_c0, 5, ViewContainerRef);
140
+ } if (rf & 2) {
141
+ let _t;
142
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.host = _t.first);
143
+ } }, inputs: { data: "data", options: "options", itemsPerPage: "itemsPerPage", page: "page" }, outputs: { treeChange: "treeChange", treeDrop: "treeDrop" }, features: [i0.ɵɵProvidersFeature([TreeService, DropZoneService, TreeConstructionStatus]), i0.ɵɵNgOnChangesFeature], decls: 4, vars: 1, consts: [[1, "tree-event-host", 3, "dragoverNoChangeDetect", "dragleaveNoChangeDetect", "drop"], [4, "ngIf"], ["host", ""]], template: function LimbleTreeRootComponent_Template(rf, ctx) { if (rf & 1) {
144
+ i0.ɵɵelementStart(0, "div", 0);
145
+ i0.ɵɵlistener("dragoverNoChangeDetect", function LimbleTreeRootComponent_Template_div_dragoverNoChangeDetect_0_listener($event) { return ctx.dragoverHandler($event); })("dragleaveNoChangeDetect", function LimbleTreeRootComponent_Template_div_dragleaveNoChangeDetect_0_listener($event) { return ctx.dragleaveHandler($event); })("drop", function LimbleTreeRootComponent_Template_div_drop_0_listener($event) { return ctx.dropHandler($event); });
146
+ i0.ɵɵtemplate(1, LimbleTreeRootComponent_limble_tree_placeholder_1_Template, 1, 0, "limble-tree-placeholder", 1);
147
+ i0.ɵɵtemplate(2, LimbleTreeRootComponent_ng_template_2_Template, 0, 0, "ng-template", null, 2, i0.ɵɵtemplateRefExtractor);
148
+ i0.ɵɵelementEnd();
149
+ } if (rf & 2) {
150
+ i0.ɵɵadvance(1);
151
+ i0.ɵɵproperty("ngIf", ctx.placeholder === true);
152
+ } }, dependencies: [i5.NgIf, i6.LimbleTreePlaceholderComponent, i7.DragoverNoChangeDetectDirective, i8.DragleaveNoChangeDetectDirective] });
153
+ (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(LimbleTreeRootComponent, [{
154
+ type: Component,
155
+ args: [{ selector: "limble-tree-root", providers: [TreeService, DropZoneService, TreeConstructionStatus], template: "<div\n (dragoverNoChangeDetect)=\"dragoverHandler($event)\"\n (dragleaveNoChangeDetect)=\"dragleaveHandler($event)\"\n (drop)=\"dropHandler($event)\"\n class=\"tree-event-host\"\n>\n <limble-tree-placeholder\n *ngIf=\"placeholder === true\"\n ></limble-tree-placeholder>\n <ng-template #host></ng-template>\n</div>\n" }]
156
+ }], function () { return [{ type: i1.TreeService }, { type: i2.DropZoneService }, { type: i3.DragStateService }, { type: i4.GlobalEventsService }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }]; }, { data: [{
157
+ type: Input
158
+ }], options: [{
159
+ type: Input
160
+ }], itemsPerPage: [{
161
+ type: Input
162
+ }], page: [{
163
+ type: Input
164
+ }], host: [{
165
+ type: ViewChild,
166
+ args: ["host", { read: ViewContainerRef }]
167
+ }], treeChange: [{
168
+ type: Output
169
+ }], treeDrop: [{
170
+ type: Output
171
+ }] }); })();
172
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGltYmxlLXRyZWUtcm9vdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saW1ibGUtdHJlZS9zcmMvbGliL2xpbWJsZS10cmVlLXJvb3QvbGltYmxlLXRyZWUtcm9vdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saW1ibGUtdHJlZS9zcmMvbGliL2xpbWJsZS10cmVlLXJvb3QvbGltYmxlLXRyZWUtcm9vdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0osU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUdOLE1BQU0sRUFDTixTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQU10RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFNBQVMsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUd6RCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7Ozs7Ozs7Ozs7OztJQ3BCekUsMENBRTJCOzs7QUQwQjlCLE1BQU0sT0FBTyx1QkFBdUI7SUFvQmpDLFlBQ29CLFdBQXdCLEVBQ3hCLGVBQWdDLEVBQ2hDLGdCQUFrQyxFQUNsQyxtQkFBd0MsRUFDeEMsTUFBYyxFQUNkLGlCQUFvQyxFQUNwQyxFQUF1QjtRQU52QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3hDLFdBQU0sR0FBTixN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dUJBQXVCO2NBTm5DLFNBQVM7MkJBQ0csa0JBQWtCLGFBR2pCLENBQUMsV0FBVyxFQUFFLGVBQWUsRUFBRSxzQkFBc0IsQ0FBQzsyT0FLeEQsSUFBSTtrQkFBWixLQUFLO1lBQ0csT0FBTztrQkFBZixLQUFLO1lBQ0csWUFBWTtrQkFBcEIsS0FBSztZQUNHLElBQUk7a0JBQVosS0FBSztZQUVpRCxJQUFJO2tCQUExRCxTQUFTO21CQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtZQUkxQixVQUFVO2tCQUE1QixNQUFNO1lBRVksUUFBUTtrQkFBMUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICBBZnRlclZpZXdJbml0LFxuICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICBDb21wb25lbnQsXG4gICBFbGVtZW50UmVmLFxuICAgRXZlbnRFbWl0dGVyLFxuICAgSW5wdXQsXG4gICBOZ1pvbmUsXG4gICBPbkNoYW5nZXMsXG4gICBPbkRlc3Ryb3ksXG4gICBPdXRwdXQsXG4gICBWaWV3Q2hpbGQsXG4gICBWaWV3Q29udGFpbmVyUmVmXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgRHJvcFpvbmVTZXJ2aWNlIH0gZnJvbSBcIi4vZHJvcC16b25lLnNlcnZpY2VcIjtcbmltcG9ydCB7XG4gICBMaW1ibGVUcmVlRGF0YSxcbiAgIExpbWJsZVRyZWVPcHRpb25zLFxuICAgVHJlZURyb3Bcbn0gZnJvbSBcIi4uL2xpbWJsZS10cmVlLXJvb3QvdHJlZS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBUcmVlU2VydmljZSB9IGZyb20gXCIuL3RyZWUuc2VydmljZVwiO1xuaW1wb3J0IHsgaXNFbGVtZW50RGVzY2VuZGFudCwgaXNGaXJlZm94IH0gZnJvbSBcIi4uL3V0aWxcIjtcbmltcG9ydCB7IERyYWdTdGF0ZVNlcnZpY2UgfSBmcm9tIFwiLi4vc2luZ2xldG9ucy9kcmFnLXN0YXRlLnNlcnZpY2VcIjtcbmltcG9ydCB7IEdsb2JhbEV2ZW50c1NlcnZpY2UgfSBmcm9tIFwiLi4vc2luZ2xldG9ucy9nbG9iYWwtZXZlbnRzLnNlcnZpY2VcIjtcbmltcG9ydCB7IGZpcnN0IH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5pbXBvcnQgeyBUcmVlQ29uc3RydWN0aW9uU3RhdHVzIH0gZnJvbSBcIi4vdHJlZS1jb25zdHJ1Y3Rpb24tc3RhdHVzLnNlcnZpY2VcIjtcblxuQENvbXBvbmVudCh7XG4gICBzZWxlY3RvcjogXCJsaW1ibGUtdHJlZS1yb290XCIsXG4gICB0ZW1wbGF0ZVVybDogXCIuL2xpbWJsZS10cmVlLXJvb3QuY29tcG9uZW50Lmh0bWxcIixcbiAgIHN0eWxlVXJsczogW1wiLi9saW1ibGUtdHJlZS1yb290LmNvbXBvbmVudC5zY3NzXCJdLFxuICAgcHJvdmlkZXJzOiBbVHJlZVNlcnZpY2UsIERyb3Bab25lU2VydmljZSwgVHJlZUNvbnN0cnVjdGlvblN0YXR1c11cbn0pXG5leHBvcnQgY2xhc3MgTGltYmxlVHJlZVJvb3RDb21wb25lbnRcbiAgIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3lcbntcbiAgIEBJbnB1dCgpIGRhdGE6IExpbWJsZVRyZWVEYXRhIHwgdW5kZWZpbmVkO1xuICAgQElucHV0KCkgb3B0aW9uczogTGltYmxlVHJlZU9wdGlvbnMgfCB1bmRlZmluZWQ7XG4gICBASW5wdXQoKSBpdGVtc1BlclBhZ2U6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgIEBJbnB1dCgpIHBhZ2U6IG51bWJlciB8IHVuZGVmaW5lZDtcblxuICAgQFZpZXdDaGlsZChcImhvc3RcIiwgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pIHByaXZhdGUgaG9zdDpcbiAgICAgIHwgVmlld0NvbnRhaW5lclJlZlxuICAgICAgfCB1bmRlZmluZWQ7XG5cbiAgIEBPdXRwdXQoKSByZWFkb25seSB0cmVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudWxsPigpO1xuXG4gICBAT3V0cHV0KCkgcmVhZG9ubHkgdHJlZURyb3AgPSBuZXcgRXZlbnRFbWl0dGVyPFRyZWVEcm9wPigpO1xuXG4gICBwcml2YXRlIHJlYWRvbmx5IGNoYW5nZXNTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgIHByaXZhdGUgcmVhZG9ubHkgZHJvcFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICAgcHVibGljIHBsYWNlaG9sZGVyOiBib29sZWFuO1xuXG4gICBjb25zdHJ1Y3RvcihcbiAgICAgIHByaXZhdGUgcmVhZG9ubHkgdHJlZVNlcnZpY2U6IFRyZWVTZXJ2aWNlLFxuICAgICAgcHJpdmF0ZSByZWFkb25seSBkcm9wWm9uZVNlcnZpY2U6IERyb3Bab25lU2VydmljZSxcbiAgICAgIHByaXZhdGUgcmVhZG9ubHkgZHJhZ1N0YXRlU2VydmljZTogRHJhZ1N0YXRlU2VydmljZSxcbiAgICAgIHByaXZhdGUgcmVhZG9ubHkgZ2xvYmFsRXZlbnRzU2VydmljZTogR2xvYmFsRXZlbnRzU2VydmljZSxcbiAgICAgIHByaXZhdGUgcmVhZG9ubHkgbmdab25lOiBOZ1pvbmUsXG4gICAgICBwcml2YXRlIHJlYWRvbmx5IGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgIHByaXZhdGUgcmVhZG9ubHkgZWw6IEVsZW1lbnRSZWY8RWxlbWVudD5cbiAgICkge1xuICAgICAgdGhpcy5jaGFuZ2VzU3Vic2NyaXB0aW9uID0gdGhpcy50cmVlU2VydmljZS5jaGFuZ2VzJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgLy9cIkluIGRldiBtb2RlLCBBbmd1bGFyIHBlcmZvcm1zIGFuIGFkZGl0aW9uYWwgY2hlY2sgYWZ0ZXIgZWFjaCBjaGFuZ2VcbiAgICAgICAgIC8vZGV0ZWN0aW9uIHJ1biwgdG8gZW5zdXJlIHRoZSBiaW5kaW5ncyBoYXZlbuKAmXQgY2hhbmdlZC5cIiBXZSB1c2UgYSB0aW1lb3V0IGhlcmVcbiAgICAgICAgIC8vdG8gcHJlY2x1ZGUgdGhlIHBvc3NpYmlsaXR5IG9mIGNhdXNpbmcgYSBiaW5kaW5nIHRvIHVwZGF0ZSBpbiB0aGUgcGFyZW50XG4gICAgICAgICAvL2NvbXBvbmVudCBhZnRlciBjaGFuZ2UgZGV0ZWN0aW9uIHJ1bnMgYnV0IGJlZm9yZSB0aGUgYWRkaXRpb25hbCBjaGVjay5cbiAgICAgICAgIC8vU2VlIGh0dHBzOi8vYW5ndWxhci5pby9lcnJvcnMvTkcwMTAwIGZvciBkZXRhaWxzLlxuICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnRyZWVDaGFuZ2UuZW1pdCgpO1xuICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZHJvcFN1YnNjcmlwdGlvbiA9IHRoaXMudHJlZVNlcnZpY2UuZHJvcHMkLnN1YnNjcmliZSgoZHJvcCkgPT4ge1xuICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnRyZWVEcm9wLmVtaXQoZHJvcCk7XG4gICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5wbGFjZWhvbGRlciA9IGZhbHNlO1xuICAgICAgdGhpcy50cmVlU2VydmljZS5wbGFjZWhvbGRlciQuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgdGhpcy5wbGFjZWhvbGRlciA9IHZhbHVlO1xuICAgICAgICAgaWYgKCFOZ1pvbmUuaXNJbkFuZ3VsYXJab25lKCkpIHtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgfVxuICAgICAgfSk7XG4gICB9XG5cbiAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgIGlmIChcbiAgICAgICAgIHRoaXMub3B0aW9ucz8ubGlzdE1vZGUgIT09IHRydWUgJiZcbiAgICAgICAgICh0aGlzLml0ZW1zUGVyUGFnZSAhPT0gdW5kZWZpbmVkIHx8IHRoaXMucGFnZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgKSB7XG4gICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICBcInBhZ2luYXRpb24gaXMgb25seSBhbGxvd2VkIGluIGxpc3RNb2RlOyBgaXRlbXNQZXJQYWdlYCBhbmQgYHBhZ2VgIGlucHV0cyB3aWxsIGJlIGlnbm9yZWRcIlxuICAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudXBkYXRlKCk7XG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcblxuICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgLy90aGlzIGlzIGZvciBtYWMgb3MgLSB3aXRob3V0IHRoaXMgZHJhZ292ZXIgaGFuZGxlciBkcm9wIGV2ZW50cyBhcmVuJ3QgZmlyaW5nIGNvcnJlY3RseVxuICAgICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJkcmFnb3ZlclwiLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgfVxuXG4gICBuZ09uQ2hhbmdlcygpIHtcbiAgICAgIGlmICh0aGlzLmhvc3QgIT09IHVuZGVmaW5lZCAmJiB0aGlzLmRhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgdGhpcy51cGRhdGUoKTtcbiAgICAgIH1cbiAgIH1cblxuICAgLyoqIFJlYnVpbGQgdGhlIHRyZWUgKi9cbiAgIHB1YmxpYyB1cGRhdGUoKSB7XG4gICAgICBpZiAodGhpcy5ob3N0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIFwiRmFpbGVkIHRvIHJlbmRlciBsaW1ibGUgdHJlZS4gRmFpbHVyZSBvY2N1cnJlZCBhdCByb290LlwiXG4gICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZGF0YSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGxpbWJsZVRyZWUgcmVxdWlyZXMgYSBkYXRhIG9iamVjdGApO1xuICAgICAgfVxuICAgICAgdGhpcy50cmVlU2VydmljZS5pbml0KFxuICAgICAgICAgdGhpcy5ob3N0LFxuICAgICAgICAgdGhpcy5kYXRhLFxuICAgICAgICAgdGhpcy5vcHRpb25zLFxuICAgICAgICAgdGhpcy5pdGVtc1BlclBhZ2UsXG4gICAgICAgICB0aGlzLnBhZ2VcbiAgICAgICk7XG4gICAgICAvL1dlIGNoZWNrIGZvciBmaXJlZm94IGhlcmUgYmVjYXVzZSB0aGVyZSBpcyBhIGJ1ZyBpbiBGaXJlZm94IHRoYXQgY2F1c2VzIHRoZVxuICAgICAgLy9jdXN0b20gc2Nyb2xsaW5nIHRvIGJyZWFrLiBTZWUgaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTA1NTIxI2M4MFxuICAgICAgaWYgKCFpc0ZpcmVmb3goKSkge1xuICAgICAgICAgdGhpcy5nbG9iYWxFdmVudHNTZXJ2aWNlLmFkZFNjcm9sbGluZygpO1xuICAgICAgfVxuICAgfVxuXG4gICBwdWJsaWMgZHJhZ292ZXJIYW5kbGVyKGV2ZW50OiBEcmFnRXZlbnQpIHtcbiAgICAgIGlmIChldmVudC5kYXRhVHJhbnNmZXIgPT09IG51bGwpIHtcbiAgICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gXCJtb3ZlXCI7XG4gICB9XG5cbiAgIHB1YmxpYyBkcmFnbGVhdmVIYW5kbGVyKGV2ZW50OiBEcmFnRXZlbnQpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRUYXJnZXQgPSBldmVudC5jdXJyZW50VGFyZ2V0O1xuICAgICAgY29uc3QgcmVsYXRlZFRhcmdldCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQ7XG4gICAgICBpZiAoXG4gICAgICAgICAhKGN1cnJlbnRUYXJnZXQgaW5zdGFuY2VvZiBOb2RlKSB8fFxuICAgICAgICAgIShyZWxhdGVkVGFyZ2V0IGluc3RhbmNlb2YgTm9kZSkgfHxcbiAgICAgICAgIGlzRWxlbWVudERlc2NlbmRhbnQoY3VycmVudFRhcmdldCwgcmVsYXRlZFRhcmdldCkgIT09IGZhbHNlXG4gICAgICApIHtcbiAgICAgICAgIC8vZXZlbnQgY2FtZSBmcm9tIGRlZXBlciBpbiB0aGUgdHJlZS4gSWdub3JlIGl0LlxuICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy9Nb3VzZSBoYXMgbGVmdCB0aGUgdHJlZSwgc28gY2xlYXIgdGhlIGRyb3Agem9uZXNcbiAgICAgIHRoaXMuZHJvcFpvbmVTZXJ2aWNlLmNsZWFyVmlzaWJsZVpvbmVzKCk7XG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgIH1cblxuICAgcHVibGljIGRyb3BIYW5kbGVyKGV2ZW50OiBEcmFnRXZlbnQpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgaWYgKHRoaXMuZHJhZ1N0YXRlU2VydmljZS5nZXRTdGF0ZSgpICE9PSBcImRyb3BwYWJsZVwiKSB7XG4gICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBzb3VyY2VCcmFuY2ggPSB0aGlzLmRyYWdTdGF0ZVNlcnZpY2UuY2FwdHVyZSgpO1xuICAgICAgaWYgKHNvdXJjZUJyYW5jaCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJmYWlsZWQgdG8gZ2V0IGN1cnJlbnQgYnJhbmNoIGluIGRyYWdlbmRIYW5kbGVyXCIpO1xuICAgICAgfVxuICAgICAgY29uc3QgZHJvcFpvbmUgPSB0aGlzLmRyb3Bab25lU2VydmljZS5nZXRBY3RpdmVEcm9wWm9uZSgpO1xuICAgICAgaWYgKGRyb3Bab25lID09PSBudWxsKSB7XG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJmYWlsZWQgdG8gZ2V0IGFjdGl2ZSBkcm9wIHpvbmUgYXQgZHJvcCBoYW5kbGVyXCIpO1xuICAgICAgfVxuICAgICAgdGhpcy50cmVlU2VydmljZS5jYXB0dXJlZCA9IHRydWU7XG4gICAgICB0aGlzLmRyYWdTdGF0ZVNlcnZpY2Uuc3RhdGUkXG4gICAgICAgICAucGlwZShmaXJzdCgobWVzc2FnZSkgPT4gbWVzc2FnZSA9PT0gXCJpZGxlXCIpKVxuICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnRyZWVTZXJ2aWNlLmNhcHR1cmVkID0gZmFsc2U7XG4gICAgICAgICB9KTtcbiAgICAgIHRoaXMuZHJvcFpvbmVTZXJ2aWNlLmNsZWFyVmlzaWJsZVpvbmVzKCk7XG4gICAgICB0aGlzLnRyZWVTZXJ2aWNlLmRyb3Aoc291cmNlQnJhbmNoLCBkcm9wWm9uZS5nZXRGdWxsSW5zZXJ0Q29vcmRpbmF0ZXMoKSk7XG4gICB9XG5cbiAgIG5nT25EZXN0cm95KCkge1xuICAgICAgdGhpcy5jaGFuZ2VzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aGlzLmRyb3BTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgIH1cbn1cbiIsIjxkaXZcbiAgIChkcmFnb3Zlck5vQ2hhbmdlRGV0ZWN0KT1cImRyYWdvdmVySGFuZGxlcigkZXZlbnQpXCJcbiAgIChkcmFnbGVhdmVOb0NoYW5nZURldGVjdCk9XCJkcmFnbGVhdmVIYW5kbGVyKCRldmVudClcIlxuICAgKGRyb3ApPVwiZHJvcEhhbmRsZXIoJGV2ZW50KVwiXG4gICBjbGFzcz1cInRyZWUtZXZlbnQtaG9zdFwiXG4+XG4gICA8bGltYmxlLXRyZWUtcGxhY2Vob2xkZXJcbiAgICAgICpuZ0lmPVwicGxhY2Vob2xkZXIgPT09IHRydWVcIlxuICAgPjwvbGltYmxlLXRyZWUtcGxhY2Vob2xkZXI+XG4gICA8bmctdGVtcGxhdGUgI2hvc3Q+PC9uZy10ZW1wbGF0ZT5cbjwvZGl2PlxuIl19
@@ -30,4 +30,4 @@ TreeConstructionStatus.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: T
30
30
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TreeConstructionStatus, [{
31
31
  type: Injectable
32
32
  }], function () { return []; }, null); })();
33
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1jb25zdHJ1Y3Rpb24tc3RhdHVzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saW1ibGUtdHJlZS9zcmMvbGliL2xpbWJsZS10cmVlLXJvb3QvdHJlZS1jb25zdHJ1Y3Rpb24tc3RhdHVzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUd2QyxNQUFNLE9BQU8sc0JBQXNCO0lBS2hDO1FBQ0csSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUM7UUFDcEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDckIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRU0sWUFBWTtRQUNoQixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2YsQ0FBQztJQUVNLGdCQUFnQjtRQUNwQixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2YsQ0FBQztJQUVNLFlBQVk7UUFDaEIsT0FBTyxJQUFJLENBQUMsT0FBTyxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRU0sS0FBSyxDQUFDLEdBQVk7UUFDdEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7SUFDdEIsQ0FBQztJQUVNLElBQUk7UUFDUixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztJQUMxQyxDQUFDOzs0RkEvQlMsc0JBQXNCOzRFQUF0QixzQkFBc0IsV0FBdEIsc0JBQXNCO3VGQUF0QixzQkFBc0I7Y0FEbEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgVHJlZUNvbnN0cnVjdGlvblN0YXR1cyB7XHJcbiAgIHByaXZhdGUgYmVpbmdCdWlsdDogbnVtYmVyO1xyXG4gICBwcml2YXRlIGlzUmVhZHk6IGJvb2xlYW47XHJcbiAgIHB1YmxpYyByZWFkb25seSBzdGFibGUkOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj47XHJcblxyXG4gICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgIHRoaXMuYmVpbmdCdWlsdCA9IDA7XHJcbiAgICAgIHRoaXMuaXNSZWFkeSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnN0YWJsZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHRoaXMudHJlZUlzU3RhYmxlKCkpO1xyXG4gICB9XHJcblxyXG4gICBwdWJsaWMgY29uc3RydWN0aW5nKCk6IHZvaWQge1xyXG4gICAgICB0aGlzLmJlaW5nQnVpbHQrKztcclxuICAgICAgdGhpcy5lbWl0KCk7XHJcbiAgIH1cclxuXHJcbiAgIHB1YmxpYyBkb25lQ29uc3RydWN0aW5nKCk6IHZvaWQge1xyXG4gICAgICB0aGlzLmJlaW5nQnVpbHQtLTtcclxuICAgICAgdGhpcy5lbWl0KCk7XHJcbiAgIH1cclxuXHJcbiAgIHB1YmxpYyB0cmVlSXNTdGFibGUoKTogYm9vbGVhbiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmlzUmVhZHkgPT09IHRydWUgJiYgdGhpcy5iZWluZ0J1aWx0ID09PSAwO1xyXG4gICB9XHJcblxyXG4gICBwdWJsaWMgcmVhZHkodmFsOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICAgIHRoaXMuaXNSZWFkeSA9IHZhbDtcclxuICAgfVxyXG5cclxuICAgcHVibGljIGVtaXQoKTogdm9pZCB7XHJcbiAgICAgIHRoaXMuc3RhYmxlJC5uZXh0KHRoaXMudHJlZUlzU3RhYmxlKCkpO1xyXG4gICB9XHJcbn1cclxuIl19
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1jb25zdHJ1Y3Rpb24tc3RhdHVzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saW1ibGUtdHJlZS9zcmMvbGliL2xpbWJsZS10cmVlLXJvb3QvdHJlZS1jb25zdHJ1Y3Rpb24tc3RhdHVzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUd2QyxNQUFNLE9BQU8sc0JBQXNCO0lBS2hDO1FBQ0csSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUM7UUFDcEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDckIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRU0sWUFBWTtRQUNoQixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2YsQ0FBQztJQUVNLGdCQUFnQjtRQUNwQixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2YsQ0FBQztJQUVNLFlBQVk7UUFDaEIsT0FBTyxJQUFJLENBQUMsT0FBTyxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRU0sS0FBSyxDQUFDLEdBQVk7UUFDdEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7SUFDdEIsQ0FBQztJQUVNLElBQUk7UUFDUixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztJQUMxQyxDQUFDOzs0RkEvQlMsc0JBQXNCOzRFQUF0QixzQkFBc0IsV0FBdEIsc0JBQXNCO3VGQUF0QixzQkFBc0I7Y0FEbEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSBcInJ4anNcIjtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFRyZWVDb25zdHJ1Y3Rpb25TdGF0dXMge1xuICAgcHJpdmF0ZSBiZWluZ0J1aWx0OiBudW1iZXI7XG4gICBwcml2YXRlIGlzUmVhZHk6IGJvb2xlYW47XG4gICBwdWJsaWMgcmVhZG9ubHkgc3RhYmxlJDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+O1xuXG4gICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgICB0aGlzLmJlaW5nQnVpbHQgPSAwO1xuICAgICAgdGhpcy5pc1JlYWR5ID0gZmFsc2U7XG4gICAgICB0aGlzLnN0YWJsZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHRoaXMudHJlZUlzU3RhYmxlKCkpO1xuICAgfVxuXG4gICBwdWJsaWMgY29uc3RydWN0aW5nKCk6IHZvaWQge1xuICAgICAgdGhpcy5iZWluZ0J1aWx0Kys7XG4gICAgICB0aGlzLmVtaXQoKTtcbiAgIH1cblxuICAgcHVibGljIGRvbmVDb25zdHJ1Y3RpbmcoKTogdm9pZCB7XG4gICAgICB0aGlzLmJlaW5nQnVpbHQtLTtcbiAgICAgIHRoaXMuZW1pdCgpO1xuICAgfVxuXG4gICBwdWJsaWMgdHJlZUlzU3RhYmxlKCk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIHRoaXMuaXNSZWFkeSA9PT0gdHJ1ZSAmJiB0aGlzLmJlaW5nQnVpbHQgPT09IDA7XG4gICB9XG5cbiAgIHB1YmxpYyByZWFkeSh2YWw6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgIHRoaXMuaXNSZWFkeSA9IHZhbDtcbiAgIH1cblxuICAgcHVibGljIGVtaXQoKTogdm9pZCB7XG4gICAgICB0aGlzLnN0YWJsZSQubmV4dCh0aGlzLnRyZWVJc1N0YWJsZSgpKTtcbiAgIH1cbn1cbiJdfQ==
@@ -0,0 +1,297 @@
1
+ import { Injectable } from "@angular/core";
2
+ import { Branch } from "../classes/Branch";
3
+ import { LimbleTreeNodeComponent } from "../limble-tree-node/limble-tree-node.component";
4
+ import { BehaviorSubject, EMPTY, Subject } from "rxjs";
5
+ import { arraysAreEqual } from "../util";
6
+ import { debounce, debounceTime, filter, tap } from "rxjs/operators";
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "../singletons/component-creator.service";
9
+ import * as i2 from "./drop-zone.service";
10
+ import * as i3 from "../singletons/drag-state.service";
11
+ import * as i4 from "./tree-construction-status.service";
12
+ /** The default value for the `indent` option */
13
+ export const INDENT = 45;
14
+ export class TreeService {
15
+ constructor(componentCreatorService, dropZoneService, dragStateService, treeConstructionStatus) {
16
+ this.componentCreatorService = componentCreatorService;
17
+ this.dropZoneService = dropZoneService;
18
+ this.dragStateService = dragStateService;
19
+ this.treeConstructionStatus = treeConstructionStatus;
20
+ this.changes$ = new Subject();
21
+ this.drops$ = new Subject();
22
+ this.treeModel = new Branch(null);
23
+ this.placeholder = false;
24
+ this.captured = false;
25
+ this.cleanupSignal$ = new Subject();
26
+ let rebuild = false;
27
+ let treeIsStable = false;
28
+ const treeIsStable$ = this.treeConstructionStatus.stable$.pipe(tap((value) => {
29
+ treeIsStable = value;
30
+ }), filter((value) => value === true));
31
+ this.cleanupSignal$
32
+ .pipe(tap((value) => {
33
+ rebuild = value;
34
+ }), debounce(() => {
35
+ if (treeIsStable === true) {
36
+ //If tree is stable, continue right away
37
+ return EMPTY;
38
+ }
39
+ //If tree is not stable, wait for it to become so.
40
+ return treeIsStable$;
41
+ }),
42
+ //We use this timed debounce to throttle chained destruction of components
43
+ debounceTime(5))
44
+ .subscribe(() => {
45
+ this.cleanup(rebuild);
46
+ rebuild = false;
47
+ });
48
+ this.placeholder$ = new BehaviorSubject(false);
49
+ this.placeholder$.subscribe((value) => {
50
+ this.placeholder = value;
51
+ });
52
+ }
53
+ drop(source, targetCoordinates) {
54
+ //prep
55
+ const sourceParent = source.getParent();
56
+ if (sourceParent === null) {
57
+ throw new Error("can't drop root of tree");
58
+ }
59
+ const sourceIndex = source.getIndex();
60
+ if (sourceIndex === undefined || sourceIndex === null) {
61
+ throw new Error("Cannot move the hidden root node");
62
+ }
63
+ let targetParentCoordinates;
64
+ let newIndex;
65
+ if (this.placeholder === true) {
66
+ targetParentCoordinates = [];
67
+ newIndex = 0;
68
+ }
69
+ else {
70
+ targetParentCoordinates = [...targetCoordinates];
71
+ newIndex = targetParentCoordinates.pop();
72
+ }
73
+ if (newIndex === undefined) {
74
+ throw new Error("target coordinates are empty");
75
+ }
76
+ const targetParent = this.treeModel.getDescendant(targetParentCoordinates);
77
+ if (targetParent === undefined) {
78
+ throw new Error("could not get to target");
79
+ }
80
+ const target = this.dropZoneService.getDropZone(targetCoordinates);
81
+ const targetIndex = target?.getLocation().insertIndex;
82
+ const targetHost = target?.getHost();
83
+ const sourceHost = this.dragStateService.getData()?.parentContainer;
84
+ if (this.placeholder === true) {
85
+ this.placeholder$.next(false);
86
+ }
87
+ //Change the treeModel
88
+ targetParent.insertChild(source, newIndex);
89
+ //Prepare to update the view
90
+ if (targetHost === undefined ||
91
+ sourceHost === undefined ||
92
+ targetIndex === undefined) {
93
+ //Hitting this means there is a bug, but not a fatal one.
94
+ //Just render the whole tree again.
95
+ console.warn("Could not perform a precise update. Re-rendering the entire tree instead");
96
+ this.render();
97
+ this.changes$.next(null);
98
+ return;
99
+ }
100
+ //Update the view
101
+ const nodesInSource = sourceHost.length;
102
+ const componentRef = this.componentCreatorService.appendComponent(LimbleTreeNodeComponent, targetHost, newIndex);
103
+ componentRef.instance.branch = source;
104
+ componentRef.instance.parentHost = targetHost;
105
+ if (targetIndex < sourceIndex &&
106
+ sourceHost.length > nodesInSource &&
107
+ arraysAreEqual(sourceParent.getCoordinates(), targetParentCoordinates)) {
108
+ sourceHost.remove(sourceIndex + 1);
109
+ }
110
+ else {
111
+ sourceHost.remove(sourceIndex);
112
+ }
113
+ //Update the tree data
114
+ this.rebuildTreeData();
115
+ //Publish drop data
116
+ this.drops$.next({
117
+ target: source.data,
118
+ oldParent: sourceParent.data,
119
+ oldIndex: sourceIndex,
120
+ newParent: targetParent.data,
121
+ newIndex: newIndex
122
+ });
123
+ this.cleanupSignal$.next(false);
124
+ }
125
+ /** Initializes the service and renders the tree.
126
+ * @param host - The ViewContainerRef into which the tree will be rendered.
127
+ * @param data - The data array that was passed in to LimbleTreeRoot, which is
128
+ * the users' representation of the tree
129
+ * @param options - The options object that was passed in to LimbleTreeRoot
130
+ */
131
+ init(host, data, options, itemsPerPage, page) {
132
+ this.host = host;
133
+ this.originalData = data;
134
+ this.treeOptions = this.processOptions(options, itemsPerPage, page);
135
+ if (this.treeOptions.listMode === true) {
136
+ let start = this.treeOptions.itemsPerPage * (this.treeOptions.page - 1);
137
+ if (isNaN(start)) {
138
+ //This catches the case where itemsPerPage was not passed by the user,
139
+ //causing `start` to equal infinity*0, which is NaN.
140
+ start = 0;
141
+ }
142
+ const end = start + this.treeOptions.itemsPerPage;
143
+ this.treeData = this.originalData.slice(start, end);
144
+ }
145
+ else {
146
+ this.treeData = [...this.originalData];
147
+ }
148
+ this.render();
149
+ }
150
+ cleanup(rebuild = false) {
151
+ if (rebuild) {
152
+ this.rebuildTreeData();
153
+ }
154
+ if (this.treeData?.length === 0) {
155
+ //We do a full render here because it isn't actually any slower
156
+ //when there are no nodes, and it is a little more straightforward
157
+ this.render();
158
+ }
159
+ else {
160
+ this.changes$.next(null);
161
+ this.dropZoneService.update();
162
+ }
163
+ }
164
+ /** Renders the entire tree from root to leaves */
165
+ render() {
166
+ if (this.host === undefined ||
167
+ this.treeData === undefined ||
168
+ this.treeOptions === undefined) {
169
+ throw new Error("TreeModel not initialized");
170
+ }
171
+ this.treeConstructionStatus.ready(false);
172
+ this.host.clear();
173
+ this.dropZoneService.restart();
174
+ this.placeholder$.next(false);
175
+ this.treeModel = new Branch(null);
176
+ if (this.treeData.length === 0) {
177
+ //Tree is empty, but we have to to have something there so other trees' items can be dropped into it
178
+ this.placeholder$.next(true);
179
+ }
180
+ else {
181
+ for (const node of this.treeData) {
182
+ const branch = new Branch(node);
183
+ this.treeModel.appendChild(branch);
184
+ }
185
+ for (const branch of this.treeModel.getChildren()) {
186
+ const componentRef = this.componentCreatorService.appendComponent(LimbleTreeNodeComponent, this.host);
187
+ componentRef.instance.branch = branch;
188
+ componentRef.instance.parentHost = this.host;
189
+ //The LimbleTreeNodeComponent will (indirectly) call the `renderBranch` method of this service to render
190
+ //its own children
191
+ }
192
+ }
193
+ this.treeConstructionStatus.ready(true);
194
+ this.changes$.next(null);
195
+ this.dropZoneService.init(this.treeModel, this.treeOptions);
196
+ }
197
+ /** Renders a branch of the tree and all of its descendants */
198
+ renderBranch(host, branch) {
199
+ if (this.treeModel === undefined) {
200
+ throw new Error("TreeModel not initialized");
201
+ }
202
+ host.clear();
203
+ branch.clearChildren();
204
+ for (const node of branch.data?.nodes ?? []) {
205
+ const newBranch = new Branch(node);
206
+ branch.appendChild(newBranch);
207
+ const componentRef = this.componentCreatorService.appendComponent(LimbleTreeNodeComponent, host);
208
+ componentRef.instance.branch = newBranch;
209
+ componentRef.instance.parentHost = host;
210
+ //The LimbleTreeNodeComponent will (indirectly) call the `renderBranch` method of this service to render
211
+ //its own children
212
+ }
213
+ }
214
+ processOptions(options = {}, itemsPerPage = Infinity, page = 1) {
215
+ if (options.listMode === true &&
216
+ options.allowNesting !== undefined &&
217
+ options.allowNesting !== false) {
218
+ console.warn("The value of `allowNesting` will be ignored; it must be false when `listMode` is true");
219
+ }
220
+ const result = {
221
+ defaultComponent: options.defaultComponent,
222
+ indent: options.indent ?? INDENT,
223
+ allowNesting: options.listMode !== true && (options.allowNesting ?? true),
224
+ allowDragging: options.allowDragging ?? true,
225
+ allowDrop: options.allowDrop ?? (() => true),
226
+ listMode: options.listMode ?? false,
227
+ itemsPerPage: options.listMode ? itemsPerPage : undefined,
228
+ page: options.listMode ? page : undefined
229
+ };
230
+ return result;
231
+ }
232
+ rebuildTreeData() {
233
+ if (this.originalData === undefined ||
234
+ this.treeData === undefined ||
235
+ this.treeOptions === undefined ||
236
+ this.host === undefined) {
237
+ throw new Error("Tree data not initialized");
238
+ }
239
+ this.treeData = [];
240
+ for (const branch of this.treeModel.getChildren()) {
241
+ this.treeData.push(this.rebuildBranch(branch));
242
+ }
243
+ if (this.treeOptions.listMode === true &&
244
+ this.treeOptions.itemsPerPage < Infinity) {
245
+ const itemsPerPage = this.treeOptions.itemsPerPage;
246
+ const start = itemsPerPage * (this.treeOptions.page - 1);
247
+ this.originalData.splice(start, itemsPerPage, ...this.treeData);
248
+ if (this.treeData.length !== itemsPerPage) {
249
+ let action = false;
250
+ if (this.treeData.length < itemsPerPage &&
251
+ start + itemsPerPage <= this.originalData.length) {
252
+ //The current page does not have enough nodes. Add some to the view from the next page.
253
+ const count = itemsPerPage - this.treeData.length;
254
+ for (let index = itemsPerPage - 1; index < itemsPerPage + count - 1; index++) {
255
+ const branch = new Branch(this.originalData[start + index]);
256
+ this.treeModel.appendChild(branch);
257
+ const componentRef = this.componentCreatorService.appendComponent(LimbleTreeNodeComponent, this.host);
258
+ componentRef.instance.branch = branch;
259
+ componentRef.instance.parentHost = this.host;
260
+ }
261
+ action = true;
262
+ }
263
+ else if (this.treeData.length > itemsPerPage) {
264
+ //The current page has too many nodes. Remove some of them from the view.
265
+ const count = this.treeData.length - itemsPerPage;
266
+ for (let index = itemsPerPage + count - 1; index >= itemsPerPage; index--) {
267
+ this.treeModel.removeChild(index);
268
+ this.host.remove(index);
269
+ }
270
+ action = true;
271
+ }
272
+ if (action === true) {
273
+ const end = start + itemsPerPage;
274
+ this.treeData = this.originalData.slice(start, end);
275
+ }
276
+ }
277
+ }
278
+ else {
279
+ this.originalData.length = 0;
280
+ this.originalData.push(...this.treeData);
281
+ }
282
+ }
283
+ rebuildBranch(branch) {
284
+ const temp = branch.data;
285
+ temp.nodes = [];
286
+ for (const child of branch.getChildren()) {
287
+ temp.nodes.push(this.rebuildBranch(child));
288
+ }
289
+ return temp;
290
+ }
291
+ }
292
+ TreeService.ɵfac = function TreeService_Factory(t) { return new (t || TreeService)(i0.ɵɵinject(i1.ComponentCreatorService), i0.ɵɵinject(i2.DropZoneService), i0.ɵɵinject(i3.DragStateService), i0.ɵɵinject(i4.TreeConstructionStatus)); };
293
+ TreeService.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: TreeService, factory: TreeService.ɵfac });
294
+ (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TreeService, [{
295
+ type: Injectable
296
+ }], function () { return [{ type: i1.ComponentCreatorService }, { type: i2.DropZoneService }, { type: i3.DragStateService }, { type: i4.TreeConstructionStatus }]; }, null); })();
297
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbGltYmxlLXRyZWUvc3JjL2xpYi9saW1ibGUtdHJlZS1yb290L3RyZWUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUEwQixNQUFNLGVBQWUsQ0FBQztBQUduRSxPQUFPLEVBQUUsTUFBTSxFQUFxQixNQUFNLG1CQUFtQixDQUFDO0FBQzlELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBRXpGLE9BQU8sRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7O0FBK0RyRSxnREFBZ0Q7QUFDaEQsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztBQWtEekIsTUFBTSxPQUFPLFdBQVc7SUFjckIsWUFDb0IsdUJBQWdELEVBQ2hELGVBQWdDLEVBQ2hDLGdCQUFrQyxFQUNsQyxzQkFBOEM7UUFIOUMsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUF5QjtRQUNoRCxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQywyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBRS9ELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMs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O1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZixDQUFDOztzRUE5VlMsV0FBVztpRUFBWCxXQUFXLFdBQVgsV0FBVzt1RkFBWCxXQUFXO2NBRHZCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBUeXBlLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IENvbXBvbmVudENyZWF0b3JTZXJ2aWNlIH0gZnJvbSBcIi4uL3NpbmdsZXRvbnMvY29tcG9uZW50LWNyZWF0b3Iuc2VydmljZVwiO1xuaW1wb3J0IHsgRHJvcFpvbmVTZXJ2aWNlIH0gZnJvbSBcIi4vZHJvcC16b25lLnNlcnZpY2VcIjtcbmltcG9ydCB7IEJyYW5jaCwgQnJhbmNoQ29vcmRpbmF0ZXMgfSBmcm9tIFwiLi4vY2xhc3Nlcy9CcmFuY2hcIjtcbmltcG9ydCB7IExpbWJsZVRyZWVOb2RlQ29tcG9uZW50IH0gZnJvbSBcIi4uL2xpbWJsZS10cmVlLW5vZGUvbGltYmxlLXRyZWUtbm9kZS5jb21wb25lbnRcIjtcbmltcG9ydCB7IERyYWdTdGF0ZVNlcnZpY2UgfSBmcm9tIFwiLi4vc2luZ2xldG9ucy9kcmFnLXN0YXRlLnNlcnZpY2VcIjtcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgRU1QVFksIFN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgYXJyYXlzQXJlRXF1YWwgfSBmcm9tIFwiLi4vdXRpbFwiO1xuaW1wb3J0IHsgZGVib3VuY2UsIGRlYm91bmNlVGltZSwgZmlsdGVyLCB0YXAgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcbmltcG9ydCB7IFRyZWVDb25zdHJ1Y3Rpb25TdGF0dXMgfSBmcm9tIFwiLi90cmVlLWNvbnN0cnVjdGlvbi1zdGF0dXMuc2VydmljZVwiO1xuXG4vKiogQW4gb2JqZWN0IGRlc2NyaWJpbmcgYSBub2RlIG9mIHRoZSB0cmVlICovXG5leHBvcnQgaW50ZXJmYWNlIExpbWJsZVRyZWVOb2RlIHtcbiAgIC8qKiBBIGxpc3Qgb2Ygbm9kZXMgdG8gYmUgcmVuZGVyZWQgXCJ1bmRlclwiIHRoaXMgb25lLCBvbmUgbGV2ZWwgZGVlcGVyIGluIHRoZSB0cmVlLiAqL1xuICAgbm9kZXM/OiBMaW1ibGVUcmVlRGF0YTtcbiAgIC8vIC8qKiBBIGN1c3RvbSBkYXRhIG9iamVjdCB0aGF0IHdpbGwgYmUgcGFzc2VkIGludG8gdGhlIGNvbXBvbmVudCBhcyBhbiBgSW5wdXQoKWAgYmluZGluZyBjYWxsZWQgYG5vZGVEYXRhYCAqL1xuICAgLy8gZGF0YTogdW5rbm93bjtcbiAgIC8qKiBBbiBvYmplY3QgdGhhdCBkZXNjcmliZXMgdGhlIGNvbXBvbmVudCB3aGljaCB3aWxsIHJlcHJlc2VudCB0aGlzIG5vZGUgaW4gdGhlIHZpc3VhbCB0cmVlICovXG4gICBjb21wb25lbnQ/OiBDb21wb25lbnRPYmo7XG4gICBjb2xsYXBzZWQ/OiBib29sZWFuO1xuICAgW2luZGV4OiBzdHJpbmddOiB1bmtub3duO1xufVxuXG4vKiogQW4gb2JqZWN0IHRoYXQgdGhlIGxpbWJsZS10cmVlLXJvb3QgY29tcG9uZW50IHVzZXMgdG8gYnVpbGQgdGhlIHRyZWUgKi9cbmV4cG9ydCB0eXBlIExpbWJsZVRyZWVEYXRhID0gQXJyYXk8TGltYmxlVHJlZU5vZGU+O1xuXG4vKiogQSBncm91cCBvZiBzZXR0aW5ncyBmb3IgY2hhbmdpbmcgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIHRyZWUgKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGltYmxlVHJlZU9wdGlvbnMge1xuICAgLyoqIFRoZSBjb21wb25lbnQgb2JqZWN0IHRvIHVzZSBpZiBvbmUgaXMgbm90IHNwZWNpZmllZCBmb3IgYSBwYXJ0aWN1bGFyIG5vZGUgKi9cbiAgIGRlZmF1bHRDb21wb25lbnQ/OiBDb21wb25lbnRPYmo7XG4gICAvKiogVGhlIG51bWJlciBvZiBwaXhlbHMgdG8gaW5kZW50IGVhY2ggbGV2ZWwgb2YgdGhlIHRyZWUuIERlZmF1bHRzIHRvIDQ1ICovXG4gICBpbmRlbnQ/OiBudW1iZXI7XG4gICAvKipcbiAgICAqIFdoZXRoZXIgdG8gYWxsb3cgXCJuZXN0aW5nXCIgKHBsYWNpbmcgYSBub2RlIG9uZSBsZXZlbCBkZWVwZXIgdGhhbiBjdXJyZW50bHkgZXhpc3RzIG9uIHRoZSBicmFuY2gpLlxuICAgICogV2hlbiB0aGlzIGlzIGEgYm9vbGVhbiwgaXQgYXBwbGllcyB0byBhbGwgbm9kZXMuIFdoZW4gdGhpcyBpcyBhIGZ1bmN0aW9uLCB0aGUgbm9kZSBpbiBxdWVzdGlvblxuICAgICogaXMgcGFzc2VkIGluLiBEZWZhdWx0cyB0byB0cnVlLlxuICAgICovXG4gICBhbGxvd05lc3Rpbmc/OiBib29sZWFuIHwgKChub2RlRGF0YTogTGltYmxlVHJlZU5vZGUpID0+IGJvb2xlYW4pO1xuICAgLyoqXG4gICAgKiBXaGV0aGVyIHRvIGFsbG93IGEgbm9kZSB0byBiZSBkcmFnZ2VkLiBXaGVuIHRoaXMgaXMgYSBib29sZWFuLCBpdCBhcHBsaWVzIHRvIGFsbCBub2Rlcy4gV2hlbiB0aGlzXG4gICAgKiBpcyBhIGZ1bmN0aW9uLCB0aGUgbm9kZSBpbiBxdWVzdGlvbiBpcyBwYXNzZWQgaW4uIERlZmF1bHRzIHRvIHRydWUuXG4gICAgKi9cbiAgIGFsbG93RHJhZ2dpbmc/OiBib29sZWFuIHwgKChub2RlRGF0YTogTGltYmxlVHJlZU5vZGUpID0+IGJvb2xlYW4pO1xuICAgLyoqIEEgY2FsbGJhY2sgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBzb3VyY2VOb2RlIGNhbiBiZSBkcm9wcGVkIGF0IGEgcGFydGljdWxhciBsb2NhdGlvbi4gKi9cbiAgIGFsbG93RHJvcD86IChcbiAgICAgIHNvdXJjZU5vZGU6IExpbWJsZVRyZWVOb2RlLFxuICAgICAgcHJvcG9zZWRQYXJlbnQ6IExpbWJsZVRyZWVOb2RlIHwgbnVsbCxcbiAgICAgIHByb3Bvc2VkSW5kZXg6IG51bWJlclxuICAgKSA9PiBib29sZWFuO1xuICAgLyoqIFdoZW4gc2V0IHRvIHRydWUsIGxpc3QgbW9kZSB3aWxsIGVuZm9yY2UgYSBmbGF0IHRyZWUgc3RydWN0dXJlLCBtZWFuaW5nIHRoZXJlXG4gICAgKiBjYW4gb25seSBiZSBvbmUgbGV2ZWwgb2YgdGhlIHRyZWUuIGBhbGxvd05lc3RpbmdgIGlzIGF1dG9tYXRpY2FsbHkgc2V0IHRvIGBmYWxzZWBcbiAgICAqIGFuZCBhbnkgY2hpbGRyZW4gd2lsbCBiZSBkZWxldGVkLlxuICAgICpcbiAgICAqIFRoaXMgbW9kZSBjYW4gYmUgdXNlZCB3aGVuIHRoZSBzYW1lIGR5bmFtaWMgZHJhZyBhbmQgZHJvcCBmdW5jdGlvbmFsaXR5IG9mXG4gICAgKiB0aGUgdHJlZSBpcyBkZXNpcmVkLCBidXQgdGhlIHRyZWUgc3RydWN0dXJlIGl0c2VsZiBpcyBub3QgbmVjZXNzYXJ5LiBUaGlzXG4gICAgKiBhbHNvIG9wZW5zIHVwIHRoZSBwYWdpbmF0aW9uIEFQSSBvbiB0aGUgbGltYmxlLXRyZWUtcm9vdCBjb21wb25lbnQuIFNlZSB0aGVcbiAgICAqIFJFQURNRSBmb3IgZGV0YWlscyBvbiBwYWdpbmF0aW9uLlxuICAgICovXG4gICBsaXN0TW9kZT86IGJvb2xlYW47XG59XG5cbi8qKiBBbiBvYmplY3QgdGhhdCByZWZlcmVuY2VzIHRoZSBjb21wb25lbnQgdG8gYmUgcmVuZGVyZWQgYW5kIGl0cyBiaW5kaW5ncyAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnRPYmoge1xuICAgLyoqIFRoZSBjb21wb25lbnQgY2xhc3MgKi9cbiAgIGNsYXNzOiBUeXBlPHVua25vd24+O1xuICAgLyoqIFRoZSBiaW5kaW5ncyAoaW5wdXRzIGFuZCBvdXRwdXRzKSBvZiB0aGUgY2xhc3MgKi9cbiAgIGJpbmRpbmdzPzoge1xuICAgICAgW2luZGV4OiBzdHJpbmddOiB1bmtub3duO1xuICAgfTtcbn1cblxuLyoqIFRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgYGluZGVudGAgb3B0aW9uICovXG5leHBvcnQgY29uc3QgSU5ERU5UID0gNDU7XG5cbi8qKiBBbiBvcHRpb25zIG9iamVjdCB3aXRoIGRlZmF1bHQgdmFsdWVzIGxvYWRlZCB3aGVyZSBhcHBsaWNhYmxlICovXG5leHBvcnQgaW50ZXJmYWNlIFByb2Nlc3NlZE9wdGlvbnNCYXNlIGV4dGVuZHMgTGltYmxlVHJlZU9wdGlvbnMge1xuICAgZGVmYXVsdENvbXBvbmVudD86IENvbXBvbmVudE9iajtcbiAgIGluZGVudDogbnVtYmVyO1xuICAgYWxsb3dOZXN0aW5nOiBib29sZWFuIHwgKChub2RlRGF0YTogTGltYmxlVHJlZU5vZGUpID0+IGJvb2xlYW4pO1xuICAgYWxsb3dEcmFnZ2luZzogYm9vbGVhbiB8ICgobm9kZURhdGE6IExpbWJsZVRyZWVOb2RlKSA9PiBib29sZWFuKTtcbiAgIGFsbG93RHJvcDogKFxuICAgICAgc291cmNlTm9kZTogTGltYmxlVHJlZU5vZGUsXG4gICAgICBwcm9wb3NlZFBhcmVudDogTGltYmxlVHJlZU5vZGUgfCBudWxsLFxuICAgICAgcHJvcG9zZWRJbmRleDogbnVtYmVyXG4gICApID0+IGJvb2xlYW47XG4gICBsaXN0TW9kZTogYm9vbGVhbjtcbiAgIGl0ZW1zUGVyUGFnZTogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgcGFnZTogbnVtYmVyIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb2Nlc3NlZE9wdGlvbnNXaXRoUGFnaW5hdGlvbiBleHRlbmRzIFByb2Nlc3NlZE9wdGlvbnNCYXNlIHtcbiAgIGxpc3RNb2RlOiB0cnVlO1xuICAgaXRlbXNQZXJQYWdlOiBudW1iZXI7XG4gICBwYWdlOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvY2Vzc2VkT3B0aW9uc1dpdGhvdXRQYWdpbmF0aW9uXG4gICBleHRlbmRzIFByb2Nlc3NlZE9wdGlvbnNCYXNlIHtcbiAgIGxpc3RNb2RlOiBmYWxzZTtcbiAgIGl0ZW1zUGVyUGFnZTogdW5kZWZpbmVkO1xuICAgcGFnZTogdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgdHlwZSBQcm9jZXNzZWRPcHRpb25zID1cbiAgIHwgUHJvY2Vzc2VkT3B0aW9uc1dpdGhQYWdpbmF0aW9uXG4gICB8IFByb2Nlc3NlZE9wdGlvbnNXaXRob3V0UGFnaW5hdGlvbjtcblxuLyoqIHRoZSB2YWx1ZSBlbWl0dGVkIGZyb20gdGhlIHJvb3QgY29tcG9uZW50IGFmdGVyIGEgbm9kZSBpcyBkcm9wcGVkICovXG5leHBvcnQgaW50ZXJmYWNlIFRyZWVEcm9wIHtcbiAgIC8qKiBUaGUgbm9kZSB0aGF0IHdhcyBkcm9wcGVkICovXG4gICB0YXJnZXQ6IExpbWJsZVRyZWVOb2RlO1xuICAgLyoqIHRoZSB0YXJnZXQncyBwYXJlbnQgYmVmb3JlIHRoZSBkcmFnIGFuZCBkcm9wLCBvciBudWxsIGlmIGl0IHdhcyBhIHRvcC1sZXZlbCBub2RlICovXG4gICBvbGRQYXJlbnQ6IExpbWJsZVRyZWVOb2RlIHwgbnVsbDtcbiAgIC8qKiB0aGUgaW5kZXggb2YgdGhlIG5vZGUgYmVmb3JlIHRoZSBkcmFnIGFuZCBkcm9wIHJlbGF0aXZlIHRvIGl0cyBvbGQgc2libGluZ3MgKi9cbiAgIG9sZEluZGV4OiBudW1iZXI7XG4gICAvKiogdGhlIHRhcmdldCdzIHBhcmVudCBhZnRlciB0aGUgZHJhZyBhbmQgZHJvcCwgb3IgbnVsbCBpZiBpdCBpcyBub3cgYSB0b3AtbGV2ZWwgbm9kZSAqL1xuICAgbmV3UGFyZW50OiBMaW1ibGVUcmVlTm9kZSB8IG51bGw7XG4gICAvKiogdGhlIGluZGV4IG9mIHRoZSBub2RlIGFmdGVyIHRoZSBkcmFnIGFuZCBkcm9wIHJlbGF0aXZlIHRvIGl0cyBuZXcgc2libGluZ3MgKi9cbiAgIG5ld0luZGV4OiBudW1iZXI7XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBUcmVlU2VydmljZSB7XG4gICBwdWJsaWMgcmVhZG9ubHkgY2hhbmdlcyQ6IFN1YmplY3Q8bnVsbD47XG4gICBwdWJsaWMgcmVhZG9ubHkgZHJvcHMkOiBTdWJqZWN0PFRyZWVEcm9wPjtcbiAgIHB1YmxpYyBob3N0OiBWaWV3Q29udGFpbmVyUmVmIHwgdW5kZWZpbmVkO1xuICAgcHVibGljIHRyZWVEYXRhOiBMaW1ibGVUcmVlRGF0YSB8IHVuZGVmaW5lZDtcbiAgIC8qKiBUaGlzIHNob3VsZCBuZXZlciBiZSByZWFzc2lnbmVkLiBJdCBpcyBhc3NpZ25lZCBpbiBpbml0KCkgYW5kIG5vIHdoZXJlIGVsc2UuIFdlIG5lZWQgdG8ga2VlcCB0aGUgcmVmZXJlbmNlIGZyb20gYnJlYWtpbmcuICovXG4gICBwcml2YXRlIG9yaWdpbmFsRGF0YTogTGltYmxlVHJlZURhdGEgfCB1bmRlZmluZWQ7XG4gICBwdWJsaWMgdHJlZU9wdGlvbnM6IFByb2Nlc3NlZE9wdGlvbnMgfCB1bmRlZmluZWQ7XG4gICBwdWJsaWMgdHJlZU1vZGVsOiBCcmFuY2g8YW55PjtcbiAgIHByaXZhdGUgcGxhY2Vob2xkZXI6IGJvb2xlYW47XG4gICBwdWJsaWMgY2FwdHVyZWQ6IGJvb2xlYW47XG4gICBwdWJsaWMgcmVhZG9ubHkgY2xlYW51cFNpZ25hbCQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gICBwdWJsaWMgcGxhY2Vob2xkZXIkOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj47XG5cbiAgIGNvbnN0cnVjdG9yKFxuICAgICAgcHJpdmF0ZSByZWFkb25seSBjb21wb25lbnRDcmVhdG9yU2VydmljZTogQ29tcG9uZW50Q3JlYXRvclNlcnZpY2UsXG4gICAgICBwcml2YXRlIHJlYWRvbmx5IGRyb3Bab25lU2VydmljZTogRHJvcFpvbmVTZXJ2aWNlLFxuICAgICAgcHJpdmF0ZSByZWFkb25seSBkcmFnU3RhdGVTZXJ2aWNlOiBEcmFnU3RhdGVTZXJ2aWNlLFxuICAgICAgcHJpdmF0ZSByZWFkb25seSB0cmVlQ29uc3RydWN0aW9uU3RhdHVzOiBUcmVlQ29uc3RydWN0aW9uU3RhdHVzXG4gICApIHtcbiAgICAgIHRoaXMuY2hhbmdlcyQgPSBuZXcgU3ViamVjdCgpO1xuICAgICAgdGhpcy5kcm9wcyQgPSBuZXcgU3ViamVjdCgpO1xuICAgICAgdGhpcy50cmVlTW9kZWwgPSBuZXcgQnJhbmNoKG51bGwpO1xuICAgICAgdGhpcy5wbGFjZWhvbGRlciA9IGZhbHNlO1xuICAgICAgdGhpcy5jYXB0dXJlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5jbGVhbnVwU2lnbmFsJCA9IG5ldyBTdWJqZWN0KCk7XG4gICAgICBsZXQgcmVidWlsZCA9IGZhbHNlO1xuICAgICAgbGV0IHRyZWVJc1N0YWJsZSA9IGZhbHNlO1xuICAgICAgY29uc3QgdHJlZUlzU3RhYmxlJCA9IHRoaXMudHJlZUNvbnN0cnVjdGlvblN0YXR1cy5zdGFibGUkLnBpcGUoXG4gICAgICAgICB0YXAoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICB0cmVlSXNTdGFibGUgPSB2YWx1ZTtcbiAgICAgICAgIH0pLFxuICAgICAgICAgZmlsdGVyKCh2YWx1ZSkgPT4gdmFsdWUgPT09IHRydWUpXG4gICAgICApO1xuICAgICAgdGhpcy5jbGVhbnVwU2lnbmFsJFxuICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICB0YXAoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICByZWJ1aWxkID0gdmFsdWU7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGRlYm91bmNlKCgpID0+IHtcbiAgICAgICAgICAgICAgIGlmICh0cmVlSXNTdGFibGUgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgIC8vSWYgdHJlZSBpcyBzdGFibGUsIGNvbnRpbnVlIHJpZ2h0IGF3YXlcbiAgICAgICAgICAgICAgICAgIHJldHVybiBFTVBUWTtcbiAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgIC8vSWYgdHJlZSBpcyBub3Qgc3RhYmxlLCB3YWl0IGZvciBpdCB0byBiZWNvbWUgc28uXG4gICAgICAgICAgICAgICByZXR1cm4gdHJlZUlzU3RhYmxlJDtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgLy9XZSB1c2UgdGhpcyB0aW1lZCBkZWJvdW5jZSB0byB0aHJvdHRsZSBjaGFpbmVkIGRlc3RydWN0aW9uIG9mIGNvbXBvbmVudHNcbiAgICAgICAgICAgIGRlYm91bmNlVGltZSg1KVxuICAgICAgICAgKVxuICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNsZWFudXAocmVidWlsZCk7XG4gICAgICAgICAgICByZWJ1aWxkID0gZmFsc2U7XG4gICAgICAgICB9KTtcbiAgICAgIHRoaXMucGxhY2Vob2xkZXIkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgICB0aGlzLnBsYWNlaG9sZGVyJC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgICB0aGlzLnBsYWNlaG9sZGVyID0gdmFsdWU7XG4gICAgICB9KTtcbiAgIH1cblxuICAgcHVibGljIGRyb3Aoc291cmNlOiBCcmFuY2g8YW55PiwgdGFyZ2V0Q29vcmRpbmF0ZXM6IEJyYW5jaENvb3JkaW5hdGVzKSB7XG4gICAgICAvL3ByZXBcbiAgICAgIGNvbnN0IHNvdXJjZVBhcmVudCA9IHNvdXJjZS5nZXRQYXJlbnQoKTtcbiAgICAgIGlmIChzb3VyY2VQYXJlbnQgPT09IG51bGwpIHtcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImNhbid0IGRyb3Agcm9vdCBvZiB0cmVlXCIpO1xuICAgICAgfVxuICAgICAgY29uc3Qgc291cmNlSW5kZXggPSBzb3VyY2UuZ2V0SW5kZXgoKTtcbiAgICAgIGlmIChzb3VyY2VJbmRleCA9PT0gdW5kZWZpbmVkIHx8IHNvdXJjZUluZGV4ID09PSBudWxsKSB7XG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgbW92ZSB0aGUgaGlkZGVuIHJvb3Qgbm9kZVwiKTtcbiAgICAgIH1cbiAgICAgIGxldCB0YXJnZXRQYXJlbnRDb29yZGluYXRlczogQnJhbmNoQ29vcmRpbmF0ZXM7XG4gICAgICBsZXQgbmV3SW5kZXg6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICAgIGlmICh0aGlzLnBsYWNlaG9sZGVyID09PSB0cnVlKSB7XG4gICAgICAgICB0YXJnZXRQYXJlbnRDb29yZGluYXRlcyA9IFtdO1xuICAgICAgICAgbmV3SW5kZXggPSAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgIHRhcmdldFBhcmVudENvb3JkaW5hdGVzID0gWy4uLnRhcmdldENvb3JkaW5hdGVzXTtcbiAgICAgICAgIG5ld0luZGV4ID0gdGFyZ2V0UGFyZW50Q29vcmRpbmF0ZXMucG9wKCk7XG4gICAgICB9XG4gICAgICBpZiAobmV3SW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidGFyZ2V0IGNvb3JkaW5hdGVzIGFyZSBlbXB0eVwiKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHRhcmdldFBhcmVudCA9IHRoaXMudHJlZU1vZGVsLmdldERlc2NlbmRhbnQoXG4gICAgICAgICB0YXJnZXRQYXJlbnRDb29yZGluYXRlc1xuICAgICAgKTtcbiAgICAgIGlmICh0YXJnZXRQYXJlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiY291bGQgbm90IGdldCB0byB0YXJnZXRcIik7XG4gICAgICB9XG4gICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLmRyb3Bab25lU2VydmljZS5nZXREcm9wWm9uZSh0YXJnZXRDb29yZGluYXRlcyk7XG4gICAgICBjb25zdCB0YXJnZXRJbmRleCA9IHRhcmdldD8uZ2V0TG9jYXRpb24oKS5pbnNlcnRJbmRleDtcbiAgICAgIGNvbnN0IHRhcmdldEhvc3QgPSB0YXJnZXQ/LmdldEhvc3QoKTtcbiAgICAgIGNvbnN0IHNvdXJjZUhvc3QgPSB0aGlzLmRyYWdTdGF0ZVNlcnZpY2UuZ2V0RGF0YSgpPy5wYXJlbnRDb250YWluZXI7XG4gICAgICBpZiAodGhpcy5wbGFjZWhvbGRlciA9PT0gdHJ1ZSkge1xuICAgICAgICAgdGhpcy5wbGFjZWhvbGRlciQubmV4dChmYWxzZSk7XG4gICAgICB9XG4gICAgICAvL0NoYW5nZSB0aGUgdHJlZU1vZGVsXG4gICAgICB0YXJnZXRQYXJlbnQuaW5zZXJ0Q2hpbGQoc291cmNlLCBuZXdJbmRleCk7XG4gICAgICAvL1ByZXBhcmUgdG8gdXBkYXRlIHRoZSB2aWV3XG4gICAgICBpZiAoXG4gICAgICAgICB0YXJnZXRIb3N0ID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgIHNvdXJjZUhvc3QgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgdGFyZ2V0SW5kZXggPT09IHVuZGVmaW5lZFxuICAgICAgKSB7XG4gICAgICAgICAvL0hpdHRpbmcgdGhpcyBtZWFucyB0aGVyZSBpcyBhIGJ1ZywgYnV0IG5vdCBhIGZhdGFsIG9uZS5cbiAgICAgICAgIC8vSnVzdCByZW5kZXIgdGhlIHdob2xlIHRyZWUgYWdhaW4uXG4gICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICBcIkNvdWxkIG5vdCBwZXJmb3JtIGEgcHJlY2lzZSB1cGRhdGUuIFJlLXJlbmRlcmluZyB0aGUgZW50aXJlIHRyZWUgaW5zdGVhZFwiXG4gICAgICAgICApO1xuICAgICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICAgICAgIHRoaXMuY2hhbmdlcyQubmV4dChudWxsKTtcbiAgICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vVXBkYXRlIHRoZSB2aWV3XG4gICAgICBjb25zdCBub2Rlc0luU291cmNlID0gc291cmNlSG9zdC5sZW5ndGg7XG4gICAgICBjb25zdCBjb21wb25lbnRSZWYgPSB0aGlzLmNvbXBvbmVudENyZWF0b3JTZXJ2aWNlLmFwcGVuZENvbXBvbmVudChcbiAgICAgICAgIExpbWJsZVRyZWVOb2RlQ29tcG9uZW50LFxuICAgICAgICAgdGFyZ2V0SG9zdCxcbiAgICAgICAgIG5ld0luZGV4XG4gICAgICApO1xuICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmJyYW5jaCA9IHNvdXJjZTtcbiAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5wYXJlbnRIb3N0ID0gdGFyZ2V0SG9zdDtcbiAgICAgIGlmIChcbiAgICAgICAgIHRhcmdldEluZGV4IDwgc291cmNlSW5kZXggJiZcbiAgICAgICAgIHNvdXJjZUhvc3QubGVuZ3RoID4gbm9kZXNJblNvdXJjZSAmJlxuICAgICAgICAgYXJyYXlzQXJlRXF1YWwoc291cmNlUGFyZW50LmdldENvb3JkaW5hdGVzKCksIHRhcmdldFBhcmVudENvb3JkaW5hdGVzKVxuICAgICAgKSB7XG4gICAgICAgICBzb3VyY2VIb3N0LnJlbW92ZShzb3VyY2VJbmRleCArIDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgIHNvdXJjZUhvc3QucmVtb3ZlKHNvdXJjZUluZGV4KTtcbiAgICAgIH1cbiAgICAgIC8vVXBkYXRlIHRoZSB0cmVlIGRhdGFcbiAgICAgIHRoaXMucmVidWlsZFRyZWVEYXRhKCk7XG4gICAgICAvL1B1Ymxpc2ggZHJvcCBkYXRhXG4gICAgICB0aGlzLmRyb3BzJC5uZXh0KHtcbiAgICAgICAgIHRhcmdldDogc291cmNlLmRhdGEsXG4gICAgICAgICBvbGRQYXJlbnQ6IHNvdXJjZVBhcmVudC5kYXRhIGFzIExpbWJsZVRyZWVOb2RlLFxuICAgICAgICAgb2xkSW5kZXg6IHNvdXJjZUluZGV4LFxuICAgICAgICAgbmV3UGFyZW50OiB0YXJnZXRQYXJlbnQuZGF0YSxcbiAgICAgICAgIG5ld0luZGV4OiBuZXdJbmRleFxuICAgICAgfSk7XG4gICAgICB0aGlzLmNsZWFudXBTaWduYWwkLm5leHQoZmFsc2UpO1xuICAgfVxuXG4gICAvKiogSW5pdGlhbGl6ZXMgdGhlIHNlcnZpY2UgYW5kIHJlbmRlcnMgdGhlIHRyZWUuXG4gICAgKiBAcGFyYW0gaG9zdCAtIFRoZSBWaWV3Q29udGFpbmVyUmVmIGludG8gd2hpY2ggdGhlIHRyZWUgd2lsbCBiZSByZW5kZXJlZC5cbiAgICAqIEBwYXJhbSBkYXRhIC0gVGhlIGRhdGEgYXJyYXkgdGhhdCB3YXMgcGFzc2VkIGluIHRvIExpbWJsZVRyZWVSb290LCB3aGljaCBpc1xuICAgICogdGhlIHVzZXJzJyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdHJlZVxuICAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBvYmplY3QgdGhhdCB3YXMgcGFzc2VkIGluIHRvIExpbWJsZVRyZWVSb290XG4gICAgKi9cbiAgIHB1YmxpYyBpbml0KFxuICAgICAgaG9zdDogVmlld0NvbnRhaW5lclJlZixcbiAgICAgIGRhdGE6IExpbWJsZVRyZWVEYXRhLFxuICAgICAgb3B0aW9ucz86IExpbWJsZVRyZWVPcHRpb25zLFxuICAgICAgaXRlbXNQZXJQYWdlPzogbnVtYmVyLFxuICAgICAgcGFnZT86IG51bWJlclxuICAgKTogdm9pZCB7XG4gICAgICB0aGlzLmhvc3QgPSBob3N0O1xuICAgICAgdGhpcy5vcmlnaW5hbERhdGEgPSBkYXRhO1xuICAgICAgdGhpcy50cmVlT3B0aW9ucyA9IHRoaXMucHJvY2Vzc09wdGlvbnMob3B0aW9ucywgaXRlbXNQZXJQYWdlLCBwYWdlKTtcbiAgICAgIGlmICh0aGlzLnRyZWVPcHRpb25zLmxpc3RNb2RlID09PSB0cnVlKSB7XG4gICAgICAgICBsZXQgc3RhcnQgPVxuICAgICAgICAgICAgdGhpcy50cmVlT3B0aW9ucy5pdGVtc1BlclBhZ2UgKiAodGhpcy50cmVlT3B0aW9ucy5wYWdlIC0gMSk7XG4gICAgICAgICBpZiAoaXNOYU4oc3RhcnQpKSB7XG4gICAgICAgICAgICAvL1RoaXMgY2F0Y2hlcyB0aGUgY2FzZSB3aGVyZSBpdGVtc1BlclBhZ2Ugd2FzIG5vdCBwYXNzZWQgYnkgdGhlIHVzZXIsXG4gICAgICAgICAgICAvL2NhdXNpbmcgYHN0YXJ0YCB0byBlcXVhbCBpbmZpbml0eSowLCB3aGljaCBpcyBOYU4uXG4gICAgICAgICAgICBzdGFydCA9IDA7XG4gICAgICAgICB9XG4gICAgICAgICBjb25zdCBlbmQgPSBzdGFydCArIHRoaXMudHJlZU9wdGlvbnMuaXRlbXNQZXJQYWdlO1xuICAgICAgICAgdGhpcy50cmVlRGF0YSA9IHRoaXMub3JpZ2luYWxEYXRhLnNsaWNlKHN0YXJ0LCBlbmQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgIHRoaXMudHJlZURhdGEgPSBbLi4udGhpcy5vcmlnaW5hbERhdGFdO1xuICAgICAgfVxuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgIH1cblxuICAgcHJpdmF0ZSBjbGVhbnVwKHJlYnVpbGQgPSBmYWxzZSk6IHZvaWQge1xuICAgICAgaWYgKHJlYnVpbGQpIHtcbiAgICAgICAgIHRoaXMucmVidWlsZFRyZWVEYXRhKCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy50cmVlRGF0YT8ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAvL1dlIGRvIGEgZnVsbCByZW5kZXIgaGVyZSBiZWNhdXNlIGl0IGlzbid0IGFjdHVhbGx5IGFueSBzbG93ZXJcbiAgICAgICAgIC8vd2hlbiB0aGVyZSBhcmUgbm8gbm9kZXMsIGFuZCBpdCBpcyBhIGxpdHRsZSBtb3JlIHN0cmFpZ2h0Zm9yd2FyZFxuICAgICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICB0aGlzLmNoYW5nZXMkLm5leHQobnVsbCk7XG4gICAgICAgICB0aGlzLmRyb3Bab25lU2VydmljZS51cGRhdGUoKTtcbiAgICAgIH1cbiAgIH1cblxuICAgLyoqIFJlbmRlcnMgdGhlIGVudGlyZSB0cmVlIGZyb20gcm9vdCB0byBsZWF2ZXMgKi9cbiAgIHByaXZhdGUgcmVuZGVyKCkge1xuICAgICAgaWYgKFxuICAgICAgICAgdGhpcy5ob3N0ID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgIHRoaXMudHJlZURhdGEgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgdGhpcy50cmVlT3B0aW9ucyA9PT0gdW5kZWZpbmVkXG4gICAgICApIHtcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRyZWVNb2RlbCBub3QgaW5pdGlhbGl6ZWRcIik7XG4gICAgICB9XG4gICAgICB0aGlzLnRyZWVDb25zdHJ1Y3Rpb25TdGF0dXMucmVhZHkoZmFsc2UpO1xuICAgICAgdGhpcy5ob3N0LmNsZWFyKCk7XG4gICAgICB0aGlzLmRyb3Bab25lU2VydmljZS5yZXN0YXJ0KCk7XG4gICAgICB0aGlzLnBsYWNlaG9sZGVyJC5uZXh0KGZhbHNlKTtcbiAgICAgIHRoaXMudHJlZU1vZGVsID0gbmV3IEJyYW5jaChudWxsKTtcbiAgICAgIGlmICh0aGlzLnRyZWVEYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgLy9UcmVlIGlzIGVtcHR5LCBidXQgd2UgaGF2ZSB0byB0byBoYXZlIHNvbWV0aGluZyB0aGVyZSBzbyBvdGhlciB0cmVlcycgaXRlbXMgY2FuIGJlIGRyb3BwZWQgaW50byBpdFxuICAgICAgICAgdGhpcy5wbGFjZWhvbGRlciQubmV4dCh0cnVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICBmb3IgKGNvbnN0IG5vZGUgb2YgdGhpcy50cmVlRGF0YSkge1xuICAgICAgICAgICAgY29uc3QgYnJhbmNoID0gbmV3IEJyYW5jaChub2RlKTtcbiAgICAgICAgICAgIHRoaXMudHJlZU1vZGVsLmFwcGVuZENoaWxkKGJyYW5jaCk7XG4gICAgICAgICB9XG4gICAgICAgICBmb3IgKGNvbnN0IGJyYW5jaCBvZiB0aGlzLnRyZWVNb2RlbC5nZXRDaGlsZHJlbigpKSB7XG4gICAgICAgICAgICBjb25zdCBjb21wb25lbnRSZWYgPSB0aGlzLmNvbXBvbmVudENyZWF0b3JTZXJ2aWNlLmFwcGVuZENvbXBvbmVudDxMaW1ibGVUcmVlTm9kZUNvbXBvbmVudD4oXG4gICAgICAgICAgICAgICBMaW1ibGVUcmVlTm9kZUNvbXBvbmVudCxcbiAgICAgICAgICAgICAgIHRoaXMuaG9zdFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5icmFuY2ggPSBicmFuY2g7XG4gICAgICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UucGFyZW50SG9zdCA9IHRoaXMuaG9zdDtcbiAgICAgICAgICAgIC8vVGhlIExpbWJsZVRyZWVOb2RlQ29tcG9uZW50IHdpbGwgKGluZGlyZWN0bHkpIGNhbGwgdGhlIGByZW5kZXJCcmFuY2hgIG1ldGhvZCBvZiB0aGlzIHNlcnZpY2UgdG8gcmVuZGVyXG4gICAgICAgICAgICAvL2l0cyBvd24gY2hpbGRyZW5cbiAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMudHJlZUNvbnN0cnVjdGlvblN0YXR1cy5yZWFkeSh0cnVlKTtcbiAgICAgIHRoaXMuY2hhbmdlcyQubmV4dChudWxsKTtcbiAgICAgIHRoaXMuZHJvcFpvbmVTZXJ2aWNlLmluaXQodGhpcy50cmVlTW9kZWwsIHRoaXMudHJlZU9wdGlvbnMpO1xuICAgfVxuXG4gICAvKiogUmVuZGVycyBhIGJyYW5jaCBvZiB0aGUgdHJlZSBhbmQgYWxsIG9mIGl0cyBkZXNjZW5kYW50cyAqL1xuICAgcHVibGljIHJlbmRlckJyYW5jaChob3N0OiBWaWV3Q29udGFpbmVyUmVmLCBicmFuY2g6IEJyYW5jaDxhbnk+KSB7XG4gICAgICBpZiAodGhpcy50cmVlTW9kZWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVHJlZU1vZGVsIG5vdCBpbml0aWFsaXplZFwiKTtcbiAgICAgIH1cbiAgICAgIGhvc3QuY2xlYXIoKTtcbiAgICAgIGJyYW5jaC5jbGVhckNoaWxkcmVuKCk7XG4gICAgICBmb3IgKGNvbnN0IG5vZGUgb2YgYnJhbmNoLmRhdGE/Lm5vZGVzID8/IFtdKSB7XG4gICAgICAgICBjb25zdCBuZXdCcmFuY2ggPSBuZXcgQnJhbmNoKG5vZGUpO1xuICAgICAgICAgYnJhbmNoLmFwcGVuZENoaWxkKG5ld0JyYW5jaCk7XG4gICAgICAgICBjb25zdCBjb21wb25lbnRSZWYgPSB0aGlzLmNvbXBvbmVudENyZWF0b3JTZXJ2aWNlLmFwcGVuZENvbXBvbmVudDxMaW1ibGVUcmVlTm9kZUNvbXBvbmVudD4oXG4gICAgICAgICAgICBMaW1ibGVUcmVlTm9kZUNvbXBvbmVudCxcbiAgICAgICAgICAgIGhvc3RcbiAgICAgICAgICk7XG4gICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UuYnJhbmNoID0gbmV3QnJhbmNoO1xuICAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLnBhcmVudEhvc3QgPSBob3N0O1xuICAgICAgICAgLy9UaGUgTGltYmxlVHJlZU5vZGVDb21wb25lbnQgd2lsbCAoaW5kaXJlY3RseSkgY2FsbCB0aGUgYHJlbmRlckJyYW5jaGAgbWV0aG9kIG9mIHRoaXMgc2VydmljZSB0byByZW5kZXJcbiAgICAgICAgIC8vaXRzIG93biBjaGlsZHJlblxuICAgICAgfVxuICAgfVxuXG4gICBwcml2YXRlIHByb2Nlc3NPcHRpb25zKFxuICAgICAgb3B0aW9uczogTGltYmxlVHJlZU9wdGlvbnMgPSB7fSxcbiAgICAgIGl0ZW1zUGVyUGFnZTogbnVtYmVyID0gSW5maW5pdHksXG4gICAgICBwYWdlOiBudW1iZXIgPSAxXG4gICApOiBQcm9jZXNzZWRPcHRpb25zIHtcbiAgICAgIGlmIChcbiAgICAgICAgIG9wdGlvbnMubGlzdE1vZGUgPT09IHRydWUgJiZcbiAgICAgICAgIG9wdGlvbnMuYWxsb3dOZXN0aW5nICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgIG9wdGlvbnMuYWxsb3dOZXN0aW5nICE9PSBmYWxzZVxuICAgICAgKSB7XG4gICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICBcIlRoZSB2YWx1ZSBvZiBgYWxsb3dOZXN0aW5nYCB3aWxsIGJlIGlnbm9yZWQ7IGl0IG11c3QgYmUgZmFsc2Ugd2hlbiBgbGlzdE1vZGVgIGlzIHRydWVcIlxuICAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlc3VsdDogUHJvY2Vzc2VkT3B0aW9uc0Jhc2UgPSB7XG4gICAgICAgICBkZWZhdWx0Q29tcG9uZW50OiBvcHRpb25zLmRlZmF1bHRDb21wb25lbnQsXG4gICAgICAgICBpbmRlbnQ6IG9wdGlvbnMuaW5kZW50ID8/IElOREVOVCxcbiAgICAgICAgIGFsbG93TmVzdGluZzpcbiAgICAgICAgICAgIG9wdGlvbnMubGlzdE1vZGUgIT09IHRydWUgJiYgKG9wdGlvbnMuYWxsb3dOZXN0aW5nID8/IHRydWUpLFxuICAgICAgICAgYWxsb3dEcmFnZ2luZzogb3B0aW9ucy5hbGxvd0RyYWdnaW5nID8/IHRydWUsXG4gICAgICAgICBhbGxvd0Ryb3A6IG9wdGlvbnMuYWxsb3dEcm9wID8/ICgoKSA9PiB0cnVlKSxcbiAgICAgICAgIGxpc3RNb2RlOiBvcHRpb25zLmxpc3RNb2RlID8/IGZhbHNlLFxuICAgICAgICAgaXRlbXNQZXJQYWdlOiBvcHRpb25zLmxpc3RNb2RlID8gaXRlbXNQZXJQYWdlIDogdW5kZWZpbmVkLFxuICAgICAgICAgcGFnZTogb3B0aW9ucy5saXN0TW9kZSA/IHBhZ2UgOiB1bmRlZmluZWRcbiAgICAgIH07XG4gICAgICByZXR1cm4gcmVzdWx0IGFzIFByb2Nlc3NlZE9wdGlvbnM7XG4gICB9XG5cbiAgIHByaXZhdGUgcmVidWlsZFRyZWVEYXRhKCk6IHZvaWQge1xuICAgICAgaWYgKFxuICAgICAgICAgdGhpcy5vcmlnaW5hbERhdGEgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgdGhpcy50cmVlRGF0YSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICB0aGlzLnRyZWVPcHRpb25zID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgIHRoaXMuaG9zdCA9PT0gdW5kZWZpbmVkXG4gICAgICApIHtcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRyZWUgZGF0YSBub3QgaW5pdGlhbGl6ZWRcIik7XG4gICAgICB9XG4gICAgICB0aGlzLnRyZWVEYXRhID0gW107XG4gICAgICBmb3IgKGNvbnN0IGJyYW5jaCBvZiB0aGlzLnRyZWVNb2RlbC5nZXRDaGlsZHJlbigpKSB7XG4gICAgICAgICB0aGlzLnRyZWVEYXRhLnB1c2godGhpcy5yZWJ1aWxkQnJhbmNoKGJyYW5jaCkpO1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICAgdGhpcy50cmVlT3B0aW9ucy5saXN0TW9kZSA9PT0gdHJ1ZSAmJlxuICAgICAgICAgdGhpcy50cmVlT3B0aW9ucy5pdGVtc1BlclBhZ2UgPCBJbmZpbml0eVxuICAgICAgKSB7XG4gICAgICAgICBjb25zdCBpdGVtc1BlclBhZ2UgPSB0aGlzLnRyZWVPcHRpb25zLml0ZW1zUGVyUGFnZTtcbiAgICAgICAgIGNvbnN0IHN0YXJ0ID0gaXRlbXNQZXJQYWdlICogKHRoaXMudHJlZU9wdGlvbnMucGFnZSAtIDEpO1xuICAgICAgICAgdGhpcy5vcmlnaW5hbERhdGEuc3BsaWNlKHN0YXJ0LCBpdGVtc1BlclBhZ2UsIC4uLnRoaXMudHJlZURhdGEpO1xuICAgICAgICAgaWYgKHRoaXMudHJlZURhdGEubGVuZ3RoICE9PSBpdGVtc1BlclBhZ2UpIHtcbiAgICAgICAgICAgIGxldCBhY3Rpb24gPSBmYWxzZTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgIHRoaXMudHJlZURhdGEubGVuZ3RoIDwgaXRlbXNQZXJQYWdlICYmXG4gICAgICAgICAgICAgICBzdGFydCArIGl0ZW1zUGVyUGFnZSA8PSB0aGlzLm9yaWdpbmFsRGF0YS5sZW5ndGhcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgLy9UaGUgY3VycmVudCBwYWdlIGRvZXMgbm90IGhhdmUgZW5vdWdoIG5vZGVzLiBBZGQgc29tZSB0byB0aGUgdmlldyBmcm9tIHRoZSBuZXh0IHBhZ2UuXG4gICAgICAgICAgICAgICBjb25zdCBjb3VudCA9IGl0ZW1zUGVyUGFnZSAtIHRoaXMudHJlZURhdGEubGVuZ3RoO1xuICAgICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgICAgIGxldCBpbmRleCA9IGl0ZW1zUGVyUGFnZSAtIDE7XG4gICAgICAgICAgICAgICAgICBpbmRleCA8IGl0ZW1zUGVyUGFnZSArIGNvdW50IC0gMTtcbiAgICAgICAgICAgICAgICAgIGluZGV4KytcbiAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgYnJhbmNoID0gbmV3IEJyYW5jaCh0aGlzLm9yaWdpbmFsRGF0YVtzdGFydCArIGluZGV4XSk7XG4gICAgICAgICAgICAgICAgICB0aGlzLnRyZWVNb2RlbC5hcHBlbmRDaGlsZChicmFuY2gpO1xuICAgICAgICAgICAgICAgICAgY29uc3QgY29tcG9uZW50UmVmID0gdGhpcy5jb21wb25lbnRDcmVhdG9yU2VydmljZS5hcHBlbmRDb21wb25lbnQ8TGltYmxlVHJlZU5vZGVDb21wb25lbnQ+KFxuICAgICAgICAgICAgICAgICAgICAgTGltYmxlVHJlZU5vZGVDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgICAgICB0aGlzLmhvc3RcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UuYnJhbmNoID0gYnJhbmNoO1xuICAgICAgICAgICAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLnBhcmVudEhvc3QgPSB0aGlzLmhvc3Q7XG4gICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICBhY3Rpb24gPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnRyZWVEYXRhLmxlbmd0aCA+IGl0ZW1zUGVyUGFnZSkge1xuICAgICAgICAgICAgICAgLy9UaGUgY3VycmVudCBwYWdlIGhhcyB0b28gbWFueSBub2Rlcy4gUmVtb3ZlIHNvbWUgb2YgdGhlbSBmcm9tIHRoZSB2aWV3LlxuICAgICAgICAgICAgICAgY29uc3QgY291bnQgPSB0aGlzLnRyZWVEYXRhLmxlbmd0aCAtIGl0ZW1zUGVyUGFnZTtcbiAgICAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgICAgICBsZXQgaW5kZXggPSBpdGVtc1BlclBhZ2UgKyBjb3VudCAtIDE7XG4gICAgICAgICAgICAgICAgICBpbmRleCA+PSBpdGVtc1BlclBhZ2U7XG4gICAgICAgICAgICAgICAgICBpbmRleC0tXG4gICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMudHJlZU1vZGVsLnJlbW92ZUNoaWxkKGluZGV4KTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuaG9zdC5yZW1vdmUoaW5kZXgpO1xuICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgYWN0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhY3Rpb24gPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgaXRlbXNQZXJQYWdlO1xuICAgICAgICAgICAgICAgdGhpcy50cmVlRGF0YSA9IHRoaXMub3JpZ2luYWxEYXRhLnNsaWNlKHN0YXJ0LCBlbmQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgIHRoaXMub3JpZ2luYWxEYXRhLmxlbmd0aCA9IDA7XG4gICAgICAgICB0aGlzLm9yaWdpbmFsRGF0YS5wdXNoKC4uLnRoaXMudHJlZURhdGEpO1xuICAgICAgfVxuICAgfVxuXG4gICBwcml2YXRlIHJlYnVpbGRCcmFuY2goYnJhbmNoOiBCcmFuY2g8YW55Pik6IExpbWJsZVRyZWVOb2RlIHtcbiAgICAgIGNvbnN0IHRlbXA6IExpbWJsZVRyZWVOb2RlID0gYnJhbmNoLmRhdGE7XG4gICAgICB0ZW1wLm5vZGVzID0gW107XG4gICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGJyYW5jaC5nZXRDaGlsZHJlbigpKSB7XG4gICAgICAgICB0ZW1wLm5vZGVzLnB1c2godGhpcy5yZWJ1aWxkQnJhbmNoKGNoaWxkKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGVtcDtcbiAgIH1cbn1cbiJdfQ==
@@ -16,7 +16,7 @@ export class LimbleTreeModule {
16
16
  }
17
17
  LimbleTreeModule.ɵfac = function LimbleTreeModule_Factory(t) { return new (t || LimbleTreeModule)(); };
18
18
  LimbleTreeModule.ɵmod = /*@__PURE__*/ i0.ɵɵdefineNgModule({ type: LimbleTreeModule });
19
- LimbleTreeModule.ɵinj = /*@__PURE__*/ i0.ɵɵdefineInjector({ providers: [ComponentCreatorService, DragStateService, GlobalEventsService], imports: [[CommonModule]] });
19
+ LimbleTreeModule.ɵinj = /*@__PURE__*/ i0.ɵɵdefineInjector({ providers: [ComponentCreatorService, DragStateService, GlobalEventsService], imports: [CommonModule] });
20
20
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(LimbleTreeModule, [{
21
21
  type: NgModule,
22
22
  args: [{
@@ -41,7 +41,7 @@ LimbleTreeModule.ɵinj = /*@__PURE__*/ i0.ɵɵdefineInjector({ providers: [Compo
41
41
  LimbleTreePlaceholderComponent,
42
42
  DragoverNoChangeDetectDirective,
43
43
  DragleaveNoChangeDetectDirective], imports: [CommonModule], exports: [LimbleTreeRootComponent] }); })();
44
- i0.ɵɵsetComponentScope(LimbleTreeNodeComponent, [i1.NgIf, DropZoneComponent,
45
- DragoverNoChangeDetectDirective,
46
- LimbleTreeBranchComponent], []);
47
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGltYmxlLXRyZWUubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbGltYmxlLXRyZWUvc3JjL2xpYi9saW1ibGUtdHJlZS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUNqRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUM5RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDeEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbkUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDeEYsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sNkRBQTZELENBQUM7QUFDN0csT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDekUsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sNkRBQTZELENBQUM7QUFDOUcsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sOERBQThELENBQUM7OztBQWdCaEgsTUFBTSxPQUFPLGdCQUFnQjs7Z0ZBQWhCLGdCQUFnQjtrRUFBaEIsZ0JBQWdCO3VFQUZmLENBQUMsdUJBQXVCLEVBQUUsZ0JBQWdCLEVBQUUsbUJBQW1CLENBQUMsWUFGbEUsQ0FBQyxZQUFZLENBQUM7dUZBSWIsZ0JBQWdCO2NBZDVCLFFBQVE7ZUFBQztnQkFDUCxZQUFZLEVBQUU7b0JBQ1gseUJBQXlCO29CQUN6QixpQkFBaUI7b0JBQ2pCLHVCQUF1QjtvQkFDdkIsdUJBQXVCO29CQUN2Qiw4QkFBOEI7b0JBQzlCLCtCQUErQjtvQkFDL0IsZ0NBQWdDO2lCQUNsQztnQkFDRCxPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUM7Z0JBQ3ZCLE9BQU8sRUFBRSxDQUFDLHVCQUF1QixDQUFDO2dCQUNsQyxTQUFTLEVBQUUsQ0FBQyx1QkFBdUIsRUFBRSxnQkFBZ0IsRUFBRSxtQkFBbUIsQ0FBQzthQUM3RTs7d0ZBQ1ksZ0JBQWdCLG1CQVp2Qix5QkFBeUI7UUFDekIsaUJBQWlCO1FBQ2pCLHVCQUF1QjtRQUN2Qix1QkFBdUI7UUFDdkIsOEJBQThCO1FBQzlCLCtCQUErQjtRQUMvQixnQ0FBZ0MsYUFFekIsWUFBWSxhQUNaLHVCQUF1Qjt1QkFQOUIsdUJBQXVCLFlBRHZCLGlCQUFpQjtJQUlqQiwrQkFBK0I7SUFML0IseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBDb21wb25lbnRDcmVhdG9yU2VydmljZSB9IGZyb20gXCIuL3NpbmdsZXRvbnMvY29tcG9uZW50LWNyZWF0b3Iuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBEcm9wWm9uZUNvbXBvbmVudCB9IGZyb20gXCIuL2Ryb3Atem9uZS9kcm9wLXpvbmUuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IExpbWJsZVRyZWVCcmFuY2hDb21wb25lbnQgfSBmcm9tIFwiLi9saW1ibGUtdHJlZS1icmFuY2gvbGltYmxlLXRyZWUtYnJhbmNoLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XHJcbmltcG9ydCB7IExpbWJsZVRyZWVOb2RlQ29tcG9uZW50IH0gZnJvbSBcIi4vbGltYmxlLXRyZWUtbm9kZS9saW1ibGUtdHJlZS1ub2RlLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBEcmFnU3RhdGVTZXJ2aWNlIH0gZnJvbSBcIi4vc2luZ2xldG9ucy9kcmFnLXN0YXRlLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgTGltYmxlVHJlZVJvb3RDb21wb25lbnQgfSBmcm9tIFwiLi9saW1ibGUtdHJlZS1yb290L2xpbWJsZS10cmVlLXJvb3QuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IExpbWJsZVRyZWVQbGFjZWhvbGRlckNvbXBvbmVudCB9IGZyb20gXCIuL2xpbWJsZS10cmVlLXBsYWNlaG9sZGVyL2xpbWJsZS10cmVlLXBsYWNlaG9sZGVyLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBHbG9iYWxFdmVudHNTZXJ2aWNlIH0gZnJvbSBcIi4vc2luZ2xldG9ucy9nbG9iYWwtZXZlbnRzLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgRHJhZ292ZXJOb0NoYW5nZURldGVjdERpcmVjdGl2ZSB9IGZyb20gXCIuL2N1c3RvbS1ldmVudC1iaW5kaW5ncy9kcmFnb3Zlci1uby1jaGFuZ2UtZGV0ZWN0LmRpcmVjdGl2ZVwiO1xyXG5pbXBvcnQgeyBEcmFnbGVhdmVOb0NoYW5nZURldGVjdERpcmVjdGl2ZSB9IGZyb20gXCIuL2N1c3RvbS1ldmVudC1iaW5kaW5ncy9kcmFnbGVhdmUtbm8tY2hhbmdlLWRldGVjdC5kaXJlY3RpdmVcIjtcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgIGRlY2xhcmF0aW9uczogW1xyXG4gICAgICBMaW1ibGVUcmVlQnJhbmNoQ29tcG9uZW50LFxyXG4gICAgICBEcm9wWm9uZUNvbXBvbmVudCxcclxuICAgICAgTGltYmxlVHJlZU5vZGVDb21wb25lbnQsXHJcbiAgICAgIExpbWJsZVRyZWVSb290Q29tcG9uZW50LFxyXG4gICAgICBMaW1ibGVUcmVlUGxhY2Vob2xkZXJDb21wb25lbnQsXHJcbiAgICAgIERyYWdvdmVyTm9DaGFuZ2VEZXRlY3REaXJlY3RpdmUsXHJcbiAgICAgIERyYWdsZWF2ZU5vQ2hhbmdlRGV0ZWN0RGlyZWN0aXZlXHJcbiAgIF0sXHJcbiAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxyXG4gICBleHBvcnRzOiBbTGltYmxlVHJlZVJvb3RDb21wb25lbnRdLFxyXG4gICBwcm92aWRlcnM6IFtDb21wb25lbnRDcmVhdG9yU2VydmljZSwgRHJhZ1N0YXRlU2VydmljZSwgR2xvYmFsRXZlbnRzU2VydmljZV1cclxufSlcclxuZXhwb3J0IGNsYXNzIExpbWJsZVRyZWVNb2R1bGUge31cclxuIl19
44
+ i0.ɵɵsetComponentScope(LimbleTreeNodeComponent, [i1.NgIf, LimbleTreeBranchComponent,
45
+ DropZoneComponent,
46
+ DragoverNoChangeDetectDirective], []);
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGltYmxlLXRyZWUubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbGltYmxlLXRyZWUvc3JjL2xpYi9saW1ibGUtdHJlZS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUNqRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUM5RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDeEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbkUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDeEYsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sNkRBQTZELENBQUM7QUFDN0csT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDekUsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sNkRBQTZELENBQUM7QUFDOUcsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sOERBQThELENBQUM7OztBQWdCaEgsTUFBTSxPQUFPLGdCQUFnQjs7Z0ZBQWhCLGdCQUFnQjtrRUFBaEIsZ0JBQWdCO3VFQUZmLENBQUMsdUJBQXVCLEVBQUUsZ0JBQWdCLEVBQUUsbUJBQW1CLENBQUMsWUFGakUsWUFBWTt1RkFJWixnQkFBZ0I7Y0FkNUIsUUFBUTtlQUFDO2dCQUNQLFlBQVksRUFBRTtvQkFDWCx5QkFBeUI7b0JBQ3pCLGlCQUFpQjtvQkFDakIsdUJBQXVCO29CQUN2Qix1QkFBdUI7b0JBQ3ZCLDhCQUE4QjtvQkFDOUIsK0JBQStCO29CQUMvQixnQ0FBZ0M7aUJBQ2xDO2dCQUNELE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztnQkFDdkIsT0FBTyxFQUFFLENBQUMsdUJBQXVCLENBQUM7Z0JBQ2xDLFNBQVMsRUFBRSxDQUFDLHVCQUF1QixFQUFFLGdCQUFnQixFQUFFLG1CQUFtQixDQUFDO2FBQzdFOzt3RkFDWSxnQkFBZ0IsbUJBWnZCLHlCQUF5QjtRQUN6QixpQkFBaUI7UUFDakIsdUJBQXVCO1FBQ3ZCLHVCQUF1QjtRQUN2Qiw4QkFBOEI7UUFDOUIsK0JBQStCO1FBQy9CLGdDQUFnQyxhQUV6QixZQUFZLGFBQ1osdUJBQXVCO3VCQVA5Qix1QkFBdUIsWUFGdkIseUJBQXlCO0lBQ3pCLGlCQUFpQjtJQUlqQiwrQkFBK0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBDb21wb25lbnRDcmVhdG9yU2VydmljZSB9IGZyb20gXCIuL3NpbmdsZXRvbnMvY29tcG9uZW50LWNyZWF0b3Iuc2VydmljZVwiO1xuaW1wb3J0IHsgRHJvcFpvbmVDb21wb25lbnQgfSBmcm9tIFwiLi9kcm9wLXpvbmUvZHJvcC16b25lLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgTGltYmxlVHJlZUJyYW5jaENvbXBvbmVudCB9IGZyb20gXCIuL2xpbWJsZS10cmVlLWJyYW5jaC9saW1ibGUtdHJlZS1icmFuY2guY29tcG9uZW50XCI7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5pbXBvcnQgeyBMaW1ibGVUcmVlTm9kZUNvbXBvbmVudCB9IGZyb20gXCIuL2xpbWJsZS10cmVlLW5vZGUvbGltYmxlLXRyZWUtbm9kZS5jb21wb25lbnRcIjtcbmltcG9ydCB7IERyYWdTdGF0ZVNlcnZpY2UgfSBmcm9tIFwiLi9zaW5nbGV0b25zL2RyYWctc3RhdGUuc2VydmljZVwiO1xuaW1wb3J0IHsgTGltYmxlVHJlZVJvb3RDb21wb25lbnQgfSBmcm9tIFwiLi9saW1ibGUtdHJlZS1yb290L2xpbWJsZS10cmVlLXJvb3QuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBMaW1ibGVUcmVlUGxhY2Vob2xkZXJDb21wb25lbnQgfSBmcm9tIFwiLi9saW1ibGUtdHJlZS1wbGFjZWhvbGRlci9saW1ibGUtdHJlZS1wbGFjZWhvbGRlci5jb21wb25lbnRcIjtcbmltcG9ydCB7IEdsb2JhbEV2ZW50c1NlcnZpY2UgfSBmcm9tIFwiLi9zaW5nbGV0b25zL2dsb2JhbC1ldmVudHMuc2VydmljZVwiO1xuaW1wb3J0IHsgRHJhZ292ZXJOb0NoYW5nZURldGVjdERpcmVjdGl2ZSB9IGZyb20gXCIuL2N1c3RvbS1ldmVudC1iaW5kaW5ncy9kcmFnb3Zlci1uby1jaGFuZ2UtZGV0ZWN0LmRpcmVjdGl2ZVwiO1xuaW1wb3J0IHsgRHJhZ2xlYXZlTm9DaGFuZ2VEZXRlY3REaXJlY3RpdmUgfSBmcm9tIFwiLi9jdXN0b20tZXZlbnQtYmluZGluZ3MvZHJhZ2xlYXZlLW5vLWNoYW5nZS1kZXRlY3QuZGlyZWN0aXZlXCI7XG5cbkBOZ01vZHVsZSh7XG4gICBkZWNsYXJhdGlvbnM6IFtcbiAgICAgIExpbWJsZVRyZWVCcmFuY2hDb21wb25lbnQsXG4gICAgICBEcm9wWm9uZUNvbXBvbmVudCxcbiAgICAgIExpbWJsZVRyZWVOb2RlQ29tcG9uZW50LFxuICAgICAgTGltYmxlVHJlZVJvb3RDb21wb25lbnQsXG4gICAgICBMaW1ibGVUcmVlUGxhY2Vob2xkZXJDb21wb25lbnQsXG4gICAgICBEcmFnb3Zlck5vQ2hhbmdlRGV0ZWN0RGlyZWN0aXZlLFxuICAgICAgRHJhZ2xlYXZlTm9DaGFuZ2VEZXRlY3REaXJlY3RpdmVcbiAgIF0sXG4gICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgIGV4cG9ydHM6IFtMaW1ibGVUcmVlUm9vdENvbXBvbmVudF0sXG4gICBwcm92aWRlcnM6IFtDb21wb25lbnRDcmVhdG9yU2VydmljZSwgRHJhZ1N0YXRlU2VydmljZSwgR2xvYmFsRXZlbnRzU2VydmljZV1cbn0pXG5leHBvcnQgY2xhc3MgTGltYmxlVHJlZU1vZHVsZSB7fVxuIl19