@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
@@ -1,116 +0,0 @@
1
- import { Component, Input, ViewChild, ViewContainerRef } from "@angular/core";
2
- import { DropZone } from "../classes/DropZone";
3
- import { filter } from "rxjs/operators";
4
- import { isNestingAllowed } from "../util";
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "../limble-tree-root/tree.service";
7
- import * as i2 from "../limble-tree-root/drop-zone.service";
8
- import * as i3 from "../limble-tree-root/tree-construction-status.service";
9
- import * as i4 from "@angular/common";
10
- import * as i5 from "../drop-zone/drop-zone.component";
11
- const _c0 = ["children"];
12
- function LimbleTreeBranchComponent_drop_zone_1_Template(rf, ctx) { if (rf & 1) {
13
- i0.ɵɵelement(0, "drop-zone", 3);
14
- } if (rf & 2) {
15
- const ctx_r0 = i0.ɵɵnextContext();
16
- i0.ɵɵproperty("dropZone", ctx_r0.dropZoneInside);
17
- } }
18
- function LimbleTreeBranchComponent_ng_template_3_Template(rf, ctx) { }
19
- export class LimbleTreeBranchComponent {
20
- constructor(treeService, changeDetectorRef, dropZoneService, treeConstructionStatus, ngZone) {
21
- var _a;
22
- this.treeService = treeService;
23
- this.changeDetectorRef = changeDetectorRef;
24
- this.dropZoneService = dropZoneService;
25
- this.treeConstructionStatus = treeConstructionStatus;
26
- this.ngZone = ngZone;
27
- this.treeConstructionStatus.constructing();
28
- this.indent = (_a = this.treeService.treeOptions) === null || _a === void 0 ? void 0 : _a.indent;
29
- this.renderDropZoneInside = false;
30
- }
31
- ngOnInit() {
32
- this.addDropZoneInside();
33
- this.ngZone.runOutsideAngular(() => {
34
- if (this.dropZoneInside === undefined) {
35
- throw new Error("drop zone inside is not defined");
36
- }
37
- this.dropZoneInside
38
- .getCommChannel()
39
- .pipe(filter((message) => message === "checkRendered"))
40
- .subscribe(() => {
41
- if (this.dropZoneInside === undefined ||
42
- this.branch === undefined) {
43
- throw new Error("Zones not registered");
44
- }
45
- if (isNestingAllowed(this.treeService.treeOptions, this.branch.data)) {
46
- this.renderDropZoneInside = this.dropZoneInside.isRendered();
47
- }
48
- });
49
- });
50
- }
51
- ngAfterViewInit() {
52
- this.reRender();
53
- this.setDropZoneHost();
54
- this.treeConstructionStatus.doneConstructing();
55
- this.changeDetectorRef.detectChanges();
56
- }
57
- ngOnDestroy() {
58
- if (this.dropZoneInside !== undefined) {
59
- this.dropZoneService.removeDropZone(this.dropZoneInside);
60
- }
61
- this.treeService.cleanupSignal$.next(true);
62
- }
63
- addDropZoneInside() {
64
- if (this.branch === undefined) {
65
- throw new Error("failed to register drop zone inside");
66
- }
67
- this.dropZoneInside = new DropZone([...this.branch.getCoordinates()], 0);
68
- this.dropZoneService.addDropZone(this.dropZoneInside);
69
- }
70
- reRender() {
71
- if (this.children === undefined || this.branch === undefined) {
72
- throw new Error("Failed to render limble tree branch");
73
- }
74
- this.treeService.renderBranch(this.children, this.branch);
75
- }
76
- setDropZoneHost() {
77
- if (this.children === undefined || this.dropZoneInside === undefined) {
78
- throw new Error("Failed to add drop zone host");
79
- }
80
- this.dropZoneInside.setHost(this.children);
81
- }
82
- }
83
- LimbleTreeBranchComponent.ɵfac = function LimbleTreeBranchComponent_Factory(t) { return new (t || LimbleTreeBranchComponent)(i0.ɵɵdirectiveInject(i1.TreeService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i2.DropZoneService), i0.ɵɵdirectiveInject(i3.TreeConstructionStatus), i0.ɵɵdirectiveInject(i0.NgZone)); };
84
- LimbleTreeBranchComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: LimbleTreeBranchComponent, selectors: [["limble-tree-branch"]], viewQuery: function LimbleTreeBranchComponent_Query(rf, ctx) { if (rf & 1) {
85
- i0.ɵɵviewQuery(_c0, 5, ViewContainerRef);
86
- } if (rf & 2) {
87
- let _t;
88
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.children = _t.first);
89
- } }, inputs: { branch: "branch" }, decls: 5, vars: 4, consts: [[3, "dropZone", 4, "ngIf"], [1, "limble-child-nodes", 3, "hidden"], ["children", ""], [3, "dropZone"]], template: function LimbleTreeBranchComponent_Template(rf, ctx) { if (rf & 1) {
90
- i0.ɵɵelementStart(0, "div");
91
- i0.ɵɵtemplate(1, LimbleTreeBranchComponent_drop_zone_1_Template, 1, 1, "drop-zone", 0);
92
- i0.ɵɵelementStart(2, "span", 1);
93
- i0.ɵɵtemplate(3, LimbleTreeBranchComponent_ng_template_3_Template, 0, 0, "ng-template", null, 2, i0.ɵɵtemplateRefExtractor);
94
- i0.ɵɵelementEnd();
95
- i0.ɵɵelementEnd();
96
- } if (rf & 2) {
97
- i0.ɵɵstyleProp("margin-left", ctx.indent, "px");
98
- i0.ɵɵadvance(1);
99
- i0.ɵɵproperty("ngIf", ctx.renderDropZoneInside);
100
- i0.ɵɵadvance(1);
101
- i0.ɵɵproperty("hidden", ctx.branch && ctx.branch.data.collapsed);
102
- } }, directives: [i4.NgIf, i5.DropZoneComponent], styles: [""] });
103
- (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(LimbleTreeBranchComponent, [{
104
- type: Component,
105
- args: [{
106
- selector: "limble-tree-branch",
107
- templateUrl: "./limble-tree-branch.component.html",
108
- styleUrls: ["./limble-tree-branch.component.scss"]
109
- }]
110
- }], function () { return [{ type: i1.TreeService }, { type: i0.ChangeDetectorRef }, { type: i2.DropZoneService }, { type: i3.TreeConstructionStatus }, { type: i0.NgZone }]; }, { branch: [{
111
- type: Input
112
- }], children: [{
113
- type: ViewChild,
114
- args: ["children", { read: ViewContainerRef }]
115
- }] }); })();
116
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGltYmxlLXRyZWUtYnJhbmNoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2xpbWJsZS10cmVlL3NyYy9saWIvbGltYmxlLXRyZWUtYnJhbmNoL2xpbWJsZS10cmVlLWJyYW5jaC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saW1ibGUtdHJlZS9zcmMvbGliL2xpbWJsZS10cmVlLWJyYW5jaC9saW1ibGUtdHJlZS1icmFuY2guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdKLFNBQVMsRUFDVCxLQUFLLEVBSUwsU0FBUyxFQUNULGdCQUFnQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDL0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFNBQVMsQ0FBQzs7Ozs7Ozs7O0lDZHhDLCtCQUdhOzs7SUFEVixnREFBMkI7OztBRHFCakMsTUFBTSxPQUFPLHlCQUF5QjtJQWFuQyxZQUNXLFdBQXdCLEVBQ2YsaUJBQW9DLEVBQ3BDLGVBQWdDLEVBQ2hDLHNCQUE4QyxFQUM5QyxNQUFjOztRQUp2QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUNmLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBd0I7UUFDOUMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUUvQixJQUFJLENBQUMsc0JBQXNCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDM0MsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFBLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVywwQ0FBRSxNQUFNLENBQUM7UUFDbkQsSUFBSSxD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QmxELDJCQUFvQztRQUNqQyxzRkFHYTtRQUNiLCtCQUE0RTtRQUN6RSwySEFBcUM7UUFDeEMsaUJBQU87UUFDVixpQkFBTTs7UUFSRCwrQ0FBOEI7UUFFNUIsZUFBMEI7UUFBMUIsK0NBQTBCO1FBR3hCLGVBQTBDO1FBQTFDLGdFQUEwQzs7dUZEbUJ0Qyx5QkFBeUI7Y0FMckMsU0FBUztlQUFDO2dCQUNSLFFBQVEsRUFBRSxvQkFBb0I7Z0JBQzlCLFdBQVcsRUFBRSxxQ0FBcUM7Z0JBQ2xELFNBQVMsRUFBRSxDQUFDLHFDQUFxQyxDQUFDO2FBQ3BEO3NMQUdXLE1BQU07a0JBQWQsS0FBSztZQUU2QyxRQUFRO2tCQUExRCxTQUFTO21CQUFDLFVBQVUsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgIEFmdGVyVmlld0luaXQsXHJcbiAgIENoYW5nZURldGVjdG9yUmVmLFxyXG4gICBDb21wb25lbnQsXHJcbiAgIElucHV0LFxyXG4gICBOZ1pvbmUsXHJcbiAgIE9uRGVzdHJveSxcclxuICAgT25Jbml0LFxyXG4gICBWaWV3Q2hpbGQsXHJcbiAgIFZpZXdDb250YWluZXJSZWZcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBUcmVlU2VydmljZSB9IGZyb20gXCIuLi9saW1ibGUtdHJlZS1yb290L3RyZWUuc2VydmljZVwiO1xyXG5pbXBvcnQgdHlwZSB7IEJyYW5jaCB9IGZyb20gXCIuLi9jbGFzc2VzL0JyYW5jaFwiO1xyXG5pbXBvcnQgeyBEcm9wWm9uZSB9IGZyb20gXCIuLi9jbGFzc2VzL0Ryb3Bab25lXCI7XHJcbmltcG9ydCB7IGZpbHRlciB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5pbXBvcnQgeyBpc05lc3RpbmdBbGxvd2VkIH0gZnJvbSBcIi4uL3V0aWxcIjtcclxuaW1wb3J0IHsgRHJvcFpvbmVTZXJ2aWNlIH0gZnJvbSBcIi4uL2xpbWJsZS10cmVlLXJvb3QvZHJvcC16b25lLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgVHJlZUNvbnN0cnVjdGlvblN0YXR1cyB9IGZyb20gXCIuLi9saW1ibGUtdHJlZS1yb290L3RyZWUtY29uc3RydWN0aW9uLXN0YXR1cy5zZXJ2aWNlXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgc2VsZWN0b3I6IFwibGltYmxlLXRyZWUtYnJhbmNoXCIsXHJcbiAgIHRlbXBsYXRlVXJsOiBcIi4vbGltYmxlLXRyZWUtYnJhbmNoLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgIHN0eWxlVXJsczogW1wiLi9saW1ibGUtdHJlZS1icmFuY2guY29tcG9uZW50LnNjc3NcIl1cclxufSlcclxuZXhwb3J0IGNsYXNzIExpbWJsZVRyZWVCcmFuY2hDb21wb25lbnRcclxuICAgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgIEBJbnB1dCgpIGJyYW5jaDogQnJhbmNoPGFueT4gfCB1bmRlZmluZWQ7XHJcblxyXG4gICBAVmlld0NoaWxkKFwiY2hpbGRyZW5cIiwgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pIGNoaWxkcmVuOlxyXG4gICAgICB8IFZpZXdDb250YWluZXJSZWZcclxuICAgICAgfCB1bmRlZmluZWQ7XHJcblxyXG4gICBwdWJsaWMgZHJvcFpvbmVJbnNpZGU6IERyb3Bab25lIHwgdW5kZWZpbmVkO1xyXG4gICBwdWJsaWMgcmVuZGVyRHJvcFpvbmVJbnNpZGU6IGJvb2xlYW47XHJcblxyXG4gICBwdWJsaWMgcmVhZG9ubHkgaW5kZW50O1xyXG5cclxuICAgY29uc3RydWN0b3IoXHJcbiAgICAgIHByaXZhdGUgdHJlZVNlcnZpY2U6IFRyZWVTZXJ2aWNlLFxyXG4gICAgICBwcml2YXRlIHJlYWRvbmx5IGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgICAgcHJpdmF0ZSByZWFkb25seSBkcm9wWm9uZVNlcnZpY2U6IERyb3Bab25lU2VydmljZSxcclxuICAgICAgcHJpdmF0ZSByZWFkb25seSB0cmVlQ29uc3RydWN0aW9uU3RhdHVzOiBUcmVlQ29uc3RydWN0aW9uU3RhdHVzLFxyXG4gICAgICBwcml2YXRlIHJlYWRvbmx5IG5nWm9uZTogTmdab25lXHJcbiAgICkge1xyXG4gICAgICB0aGlzLnRyZWVDb25zdHJ1Y3Rpb25TdGF0dXMuY29uc3RydWN0aW5nKCk7XHJcbiAgICAgIHRoaXMuaW5kZW50ID0gdGhpcy50cmVlU2VydmljZS50cmVlT3B0aW9ucz8uaW5kZW50O1xyXG4gICAgICB0aGlzLnJlbmRlckRyb3Bab25lSW5zaWRlID0gZmFsc2U7XHJcbiAgIH1cclxuXHJcbiAgIHB1YmxpYyBuZ09uSW5pdCgpIHtcclxuICAgICAgdGhpcy5hZGREcm9wWm9uZUluc2lkZSgpO1xyXG4gICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XHJcbiAgICAgICAgIGlmICh0aGlzLmRyb3Bab25lSW5zaWRlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZHJvcCB6b25lIGluc2lkZSBpcyBub3QgZGVmaW5lZFwiKTtcclxuICAgICAgICAgfVxyXG4gICAgICAgICB0aGlzLmRyb3Bab25lSW5zaWRlXHJcbiAgICAgICAgICAgIC5nZXRDb21tQ2hhbm5lbCgpXHJcbiAgICAgICAgICAgIC5waXBlKGZpbHRlcigobWVzc2FnZSkgPT4gbWVzc2FnZSA9PT0gXCJjaGVja1JlbmRlcmVkXCIpKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmRyb3Bab25lSW5zaWRlID09PSB1bmRlZmluZWQgfHxcclxuICAgICAgICAgICAgICAgICAgdGhpcy5icmFuY2ggPT09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiWm9uZXMgbm90IHJlZ2lzdGVyZWRcIik7XHJcbiAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICBpc05lc3RpbmdBbGxvd2VkKFxyXG4gICAgICAgICAgICAgICAgICAgICB0aGlzLnRyZWVTZXJ2aWNlLnRyZWVPcHRpb25zLFxyXG4gICAgICAgICAgICAgICAgICAgICB0aGlzLmJyYW5jaC5kYXRhXHJcbiAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyRHJvcFpvbmVJbnNpZGUgPSB0aGlzLmRyb3Bab25lSW5zaWRlLmlzUmVuZGVyZWQoKTtcclxuICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgIH1cclxuXHJcbiAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICAgIHRoaXMucmVSZW5kZXIoKTtcclxuICAgICAgdGhpcy5zZXREcm9wWm9uZUhvc3QoKTtcclxuICAgICAgdGhpcy50cmVlQ29uc3RydWN0aW9uU3RhdHVzLmRvbmVDb25zdHJ1Y3RpbmcoKTtcclxuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgIH1cclxuXHJcbiAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgaWYgKHRoaXMuZHJvcFpvbmVJbnNpZGUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICB0aGlzLmRyb3Bab25lU2VydmljZS5yZW1vdmVEcm9wWm9uZSh0aGlzLmRyb3Bab25lSW5zaWRlKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnRyZWVTZXJ2aWNlLmNsZWFudXBTaWduYWwkLm5leHQodHJ1ZSk7XHJcbiAgIH1cclxuXHJcbiAgIHByaXZhdGUgYWRkRHJvcFpvbmVJbnNpZGUoKSB7XHJcbiAgICAgIGlmICh0aGlzLmJyYW5jaCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImZhaWxlZCB0byByZWdpc3RlciBkcm9wIHpvbmUgaW5zaWRlXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZHJvcFpvbmVJbnNpZGUgPSBuZXcgRHJvcFpvbmUoWy4uLnRoaXMuYnJhbmNoLmdldENvb3JkaW5hdGVzKCldLCAwKTtcclxuICAgICAgdGhpcy5kcm9wWm9uZVNlcnZpY2UuYWRkRHJvcFpvbmUodGhpcy5kcm9wWm9uZUluc2lkZSk7XHJcbiAgIH1cclxuXHJcbiAgIHB1YmxpYyByZVJlbmRlcigpIHtcclxuICAgICAgaWYgKHRoaXMuY2hpbGRyZW4gPT09IHVuZGVmaW5lZCB8fCB0aGlzLmJyYW5jaCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byByZW5kZXIgbGltYmxlIHRyZWUgYnJhbmNoXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudHJlZVNlcnZpY2UucmVuZGVyQnJhbmNoKHRoaXMuY2hpbGRyZW4sIHRoaXMuYnJhbmNoKTtcclxuICAgfVxyXG5cclxuICAgcHJpdmF0ZSBzZXREcm9wWm9uZUhvc3QoKSB7XHJcbiAgICAgIGlmICh0aGlzLmNoaWxkcmVuID09PSB1bmRlZmluZWQgfHwgdGhpcy5kcm9wWm9uZUluc2lkZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byBhZGQgZHJvcCB6b25lIGhvc3RcIik7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5kcm9wWm9uZUluc2lkZS5zZXRIb3N0KHRoaXMuY2hpbGRyZW4pO1xyXG4gICB9XHJcbn1cclxuIiwiPGRpdiBbc3R5bGUubWFyZ2luTGVmdC5weF09XCJpbmRlbnRcIj5cclxuICAgPGRyb3Atem9uZVxyXG4gICAgICAqbmdJZj1cInJlbmRlckRyb3Bab25lSW5zaWRlXCJcclxuICAgICAgW2Ryb3Bab25lXT1cImRyb3Bab25lSW5zaWRlXCJcclxuICAgPjwvZHJvcC16b25lPlxyXG4gICA8c3BhbiBbaGlkZGVuXT1cImJyYW5jaCAmJiBicmFuY2guZGF0YS5jb2xsYXBzZWRcIiBjbGFzcz1cImxpbWJsZS1jaGlsZC1ub2Rlc1wiPlxyXG4gICAgICA8bmctdGVtcGxhdGUgI2NoaWxkcmVuPjwvbmctdGVtcGxhdGU+XHJcbiAgIDwvc3Bhbj5cclxuPC9kaXY+XHJcbiJdfQ==