@limble/limble-tree 0.13.0 → 1.0.0-alpha.2

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 (163) hide show
  1. package/README.md +418 -96
  2. package/esm2020/lib/components/branch/branch.component.mjs +79 -0
  3. package/esm2020/lib/components/dropzone/dropzone.component.mjs +35 -0
  4. package/esm2020/lib/components/host-component.interface.mjs +2 -0
  5. package/esm2020/lib/components/node-component.interface.mjs +2 -0
  6. package/esm2020/lib/components/root/root.component.mjs +36 -0
  7. package/esm2020/lib/core/branch-options.interface.mjs +2 -0
  8. package/esm2020/lib/core/configuration/configuration.mjs +17 -0
  9. package/esm2020/lib/core/configuration/tree-options.interface.mjs +2 -0
  10. package/esm2020/lib/core/index.mjs +6 -0
  11. package/esm2020/lib/core/relationship.interface.mjs +2 -0
  12. package/esm2020/lib/core/tree-branch/branch-controller.mjs +99 -0
  13. package/esm2020/lib/core/tree-branch/tree-branch.mjs +224 -0
  14. package/esm2020/lib/core/tree-node-base.mjs +69 -0
  15. package/esm2020/lib/core/tree-root/root-controller.mjs +42 -0
  16. package/esm2020/lib/core/tree-root/tree-root.mjs +85 -0
  17. package/esm2020/lib/core/tree-service/tree.service.mjs +19 -0
  18. package/esm2020/lib/errors/index.mjs +2 -0
  19. package/esm2020/lib/errors/tree-error.mjs +3 -0
  20. package/esm2020/lib/events/drag/drag-end-event.mjs +28 -0
  21. package/esm2020/lib/events/drag/drag-start-event.mjs +12 -0
  22. package/esm2020/lib/events/drag/drop-event.mjs +20 -0
  23. package/esm2020/lib/events/drag/index.mjs +4 -0
  24. package/esm2020/lib/events/general/destruction-event.mjs +12 -0
  25. package/esm2020/lib/events/general/index.mjs +2 -0
  26. package/esm2020/lib/events/index.mjs +4 -0
  27. package/esm2020/lib/events/relational/graft-event.mjs +24 -0
  28. package/esm2020/lib/events/relational/index.mjs +4 -0
  29. package/esm2020/lib/events/relational/prune-event.mjs +24 -0
  30. package/esm2020/lib/events/relational/relational-tree-event.interface.mjs +2 -0
  31. package/esm2020/lib/extras/collapse/collapse.mjs +33 -0
  32. package/esm2020/lib/extras/collapse/collapse.module.mjs +15 -0
  33. package/esm2020/lib/extras/collapse/collapse.service.mjs +20 -0
  34. package/esm2020/lib/extras/collapse/index.mjs +3 -0
  35. package/esm2020/lib/extras/drag-and-drop/drag-and-drop.mjs +85 -0
  36. package/esm2020/lib/extras/drag-and-drop/drag-and-drop.module.mjs +19 -0
  37. package/esm2020/lib/extras/drag-and-drop/drag-and-drop.service.mjs +28 -0
  38. package/esm2020/lib/extras/drag-and-drop/drag-state.mjs +47 -0
  39. package/esm2020/lib/extras/drag-and-drop/draggable.directive.mjs +30 -0
  40. package/esm2020/lib/extras/drag-and-drop/dragover-no-change-detect.mjs +40 -0
  41. package/esm2020/lib/extras/drag-and-drop/dropzone-renderer.mjs +178 -0
  42. package/esm2020/lib/extras/drag-and-drop/index.mjs +5 -0
  43. package/esm2020/lib/legacy/index.mjs +7 -0
  44. package/esm2020/lib/legacy/legacy-component-obj.interface.mjs +2 -0
  45. package/esm2020/lib/legacy/legacy-tree-data.interface.mjs +2 -0
  46. package/esm2020/lib/legacy/legacy-tree-options.interface.mjs +2 -0
  47. package/esm2020/lib/legacy/legacy-tree.mjs +73 -0
  48. package/esm2020/lib/legacy/limble-tree-legacy.module.mjs +20 -0
  49. package/esm2020/lib/legacy/limble-tree-root/limble-tree-root.component.mjs +78 -0
  50. package/esm2020/lib/limble-tree.module.mjs +21 -47
  51. package/esm2020/lib/structure/branchable.interface.mjs +2 -0
  52. package/esm2020/lib/structure/component-container.interface.mjs +2 -0
  53. package/esm2020/lib/structure/event-conduit.interface.mjs +2 -0
  54. package/esm2020/lib/structure/graftable.interface.mjs +2 -0
  55. package/esm2020/lib/structure/index.mjs +10 -0
  56. package/esm2020/lib/structure/tree-branch-node.interface.mjs +2 -0
  57. package/esm2020/lib/structure/tree-event.interface.mjs +2 -0
  58. package/esm2020/lib/structure/tree-node.interface.mjs +2 -0
  59. package/esm2020/lib/structure/tree-plot.mjs +2 -0
  60. package/esm2020/lib/structure/tree-relationship.interface.mjs +2 -0
  61. package/esm2020/limble-limble-tree.mjs +4 -4
  62. package/esm2020/public-api.mjs +12 -6
  63. package/esm2020/shared/assert.mjs +7 -0
  64. package/fesm2015/limble-limble-tree.mjs +1404 -2226
  65. package/fesm2015/limble-limble-tree.mjs.map +1 -1
  66. package/fesm2020/limble-limble-tree.mjs +1396 -2132
  67. package/fesm2020/limble-limble-tree.mjs.map +1 -1
  68. package/index.d.ts +5 -5
  69. package/lib/components/branch/branch.component.d.ts +26 -0
  70. package/lib/components/dropzone/dropzone.component.d.ts +13 -0
  71. package/lib/components/host-component.interface.d.ts +6 -0
  72. package/lib/components/node-component.interface.d.ts +5 -0
  73. package/lib/components/root/root.component.d.ts +14 -0
  74. package/lib/core/branch-options.interface.d.ts +14 -0
  75. package/lib/core/configuration/configuration.d.ts +11 -0
  76. package/lib/core/configuration/tree-options.interface.d.ts +32 -0
  77. package/lib/core/index.d.ts +5 -0
  78. package/lib/core/relationship.interface.d.ts +5 -0
  79. package/lib/core/tree-branch/branch-controller.d.ts +25 -0
  80. package/lib/core/tree-branch/tree-branch.d.ts +44 -0
  81. package/lib/core/tree-node-base.d.ts +25 -0
  82. package/lib/core/tree-root/root-controller.d.ts +19 -0
  83. package/lib/core/tree-root/tree-root.d.ts +30 -0
  84. package/lib/core/tree-service/tree.service.d.ts +9 -0
  85. package/lib/errors/index.d.ts +1 -0
  86. package/lib/errors/tree-error.d.ts +2 -0
  87. package/lib/events/drag/drag-end-event.d.ts +24 -0
  88. package/lib/events/drag/drag-start-event.d.ts +8 -0
  89. package/lib/events/drag/drop-event.d.ts +13 -0
  90. package/lib/events/drag/index.d.ts +3 -0
  91. package/lib/events/general/destruction-event.d.ts +8 -0
  92. package/lib/events/general/index.d.ts +1 -0
  93. package/lib/events/index.d.ts +3 -0
  94. package/lib/events/relational/graft-event.d.ts +15 -0
  95. package/lib/events/relational/index.d.ts +3 -0
  96. package/lib/events/relational/prune-event.d.ts +15 -0
  97. package/lib/events/relational/relational-tree-event.interface.d.ts +6 -0
  98. package/lib/extras/collapse/collapse.d.ts +11 -0
  99. package/lib/extras/collapse/collapse.module.d.ts +6 -0
  100. package/lib/extras/collapse/collapse.service.d.ts +9 -0
  101. package/lib/extras/collapse/index.d.ts +2 -0
  102. package/lib/extras/drag-and-drop/drag-and-drop.d.ts +16 -0
  103. package/lib/extras/drag-and-drop/drag-and-drop.module.d.ts +8 -0
  104. package/lib/extras/drag-and-drop/drag-and-drop.service.d.ts +16 -0
  105. package/lib/extras/drag-and-drop/drag-state.d.ts +23 -0
  106. package/lib/extras/drag-and-drop/draggable.directive.d.ts +12 -0
  107. package/lib/{custom-event-bindings/dragover-no-change-detect.directive.d.ts → extras/drag-and-drop/dragover-no-change-detect.d.ts} +14 -14
  108. package/lib/extras/drag-and-drop/dropzone-renderer.d.ts +28 -0
  109. package/lib/extras/drag-and-drop/index.d.ts +4 -0
  110. package/lib/legacy/index.d.ts +6 -0
  111. package/lib/legacy/legacy-component-obj.interface.d.ts +13 -0
  112. package/lib/legacy/legacy-tree-data.interface.d.ts +18 -0
  113. package/lib/legacy/legacy-tree-options.interface.d.ts +34 -0
  114. package/lib/legacy/legacy-tree.d.ts +14 -0
  115. package/lib/legacy/limble-tree-legacy.module.d.ts +8 -0
  116. package/lib/legacy/limble-tree-root/limble-tree-root.component.d.ts +28 -0
  117. package/lib/limble-tree.module.d.ts +9 -14
  118. package/lib/structure/branchable.interface.d.ts +4 -0
  119. package/lib/structure/component-container.interface.d.ts +8 -0
  120. package/lib/structure/event-conduit.interface.d.ts +6 -0
  121. package/lib/structure/graftable.interface.d.ts +6 -0
  122. package/lib/structure/index.d.ts +9 -0
  123. package/lib/structure/tree-branch-node.interface.d.ts +5 -0
  124. package/lib/structure/tree-event.interface.d.ts +5 -0
  125. package/lib/structure/tree-node.interface.d.ts +11 -0
  126. package/lib/structure/tree-plot.d.ts +1 -0
  127. package/lib/structure/tree-relationship.interface.d.ts +7 -0
  128. package/package.json +6 -14
  129. package/public-api.d.ts +8 -3
  130. package/shared/assert.d.ts +1 -0
  131. package/esm2020/lib/classes/Branch.mjs +0 -153
  132. package/esm2020/lib/classes/DropZone.mjs +0 -71
  133. package/esm2020/lib/classes/DropZoneLocation.mjs +0 -16
  134. package/esm2020/lib/custom-event-bindings/dragleave-no-change-detect.directive.mjs +0 -33
  135. package/esm2020/lib/custom-event-bindings/dragover-no-change-detect.directive.mjs +0 -39
  136. package/esm2020/lib/drop-zone/drop-zone.component.mjs +0 -75
  137. package/esm2020/lib/limble-tree-branch/limble-tree-branch.component.mjs +0 -110
  138. package/esm2020/lib/limble-tree-node/limble-tree-node.component.mjs +0 -467
  139. package/esm2020/lib/limble-tree-placeholder/limble-tree-placeholder.component.mjs +0 -70
  140. package/esm2020/lib/limble-tree-root/drop-zone.service.mjs +0 -376
  141. package/esm2020/lib/limble-tree-root/limble-tree-root.component.mjs +0 -172
  142. package/esm2020/lib/limble-tree-root/tree-construction-status.service.mjs +0 -33
  143. package/esm2020/lib/limble-tree-root/tree.service.mjs +0 -297
  144. package/esm2020/lib/singletons/component-creator.service.mjs +0 -19
  145. package/esm2020/lib/singletons/drag-state.service.mjs +0 -63
  146. package/esm2020/lib/singletons/global-events.service.mjs +0 -136
  147. package/esm2020/lib/util.mjs +0 -74
  148. package/lib/classes/Branch.d.ts +0 -26
  149. package/lib/classes/DropZone.d.ts +0 -27
  150. package/lib/classes/DropZoneLocation.d.ts +0 -9
  151. package/lib/custom-event-bindings/dragleave-no-change-detect.directive.d.ts +0 -13
  152. package/lib/drop-zone/drop-zone.component.d.ts +0 -18
  153. package/lib/limble-tree-branch/limble-tree-branch.component.d.ts +0 -28
  154. package/lib/limble-tree-node/limble-tree-node.component.d.ts +0 -53
  155. package/lib/limble-tree-placeholder/limble-tree-placeholder.component.d.ts +0 -21
  156. package/lib/limble-tree-root/drop-zone.service.d.ts +0 -62
  157. package/lib/limble-tree-root/limble-tree-root.component.d.ts +0 -37
  158. package/lib/limble-tree-root/tree-construction-status.service.d.ts +0 -15
  159. package/lib/limble-tree-root/tree.service.d.ts +0 -132
  160. package/lib/singletons/component-creator.service.d.ts +0 -9
  161. package/lib/singletons/drag-state.service.d.ts +0 -35
  162. package/lib/singletons/global-events.service.d.ts +0 -13
  163. package/lib/util.d.ts +0 -13
@@ -1,39 +0,0 @@
1
- import { Directive, EventEmitter, Input, Output } from "@angular/core";
2
- import { fromEvent } from "rxjs";
3
- import { throttleTime } from "rxjs/operators";
4
- import * as i0 from "@angular/core";
5
- export class DragoverNoChangeDetectDirective {
6
- constructor(ngZone, el) {
7
- this.ngZone = ngZone;
8
- this.el = el;
9
- this.dragoverNoChangeDetect = new EventEmitter();
10
- this.dragoverEventThrottle = 25;
11
- }
12
- ngOnInit() {
13
- this.ngZone.runOutsideAngular(() => {
14
- this.eventSubscription = fromEvent(this.el.nativeElement, "dragover")
15
- .pipe(throttleTime(this.dragoverEventThrottle))
16
- .subscribe(($event) => {
17
- this.dragoverNoChangeDetect.emit($event);
18
- });
19
- });
20
- }
21
- ngOnDestroy() {
22
- if (this.eventSubscription !== undefined) {
23
- this.eventSubscription.unsubscribe();
24
- }
25
- }
26
- }
27
- DragoverNoChangeDetectDirective.ɵfac = function DragoverNoChangeDetectDirective_Factory(t) { return new (t || DragoverNoChangeDetectDirective)(i0.ɵɵdirectiveInject(i0.NgZone), i0.ɵɵdirectiveInject(i0.ElementRef)); };
28
- DragoverNoChangeDetectDirective.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: DragoverNoChangeDetectDirective, selectors: [["", "dragoverNoChangeDetect", ""]], inputs: { dragoverEventThrottle: "dragoverEventThrottle" }, outputs: { dragoverNoChangeDetect: "dragoverNoChangeDetect" } });
29
- (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(DragoverNoChangeDetectDirective, [{
30
- type: Directive,
31
- args: [{
32
- selector: "[dragoverNoChangeDetect]"
33
- }]
34
- }], function () { return [{ type: i0.NgZone }, { type: i0.ElementRef }]; }, { dragoverEventThrottle: [{
35
- type: Input
36
- }], dragoverNoChangeDetect: [{
37
- type: Output
38
- }] }); })();
39
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZ292ZXItbm8tY2hhbmdlLWRldGVjdC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saW1ibGUtdHJlZS9zcmMvbGliL2N1c3RvbS1ldmVudC1iaW5kaW5ncy9kcmFnb3Zlci1uby1jaGFuZ2UtZGV0ZWN0LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0osU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBSUwsTUFBTSxFQUNSLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFLOUMsTUFBTSxPQUFPLCtCQUErQjtJQUt6QyxZQUNvQixNQUFjLEVBQ2QsRUFBdUI7UUFEdkIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLE9BQUUsR0FBRixFQUFFLENBQXFCO1FBRXhDLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLFlBQVksRUFBYSxDQUFDO1FBQzVELElBQUksQ0FBQyxxQkFBcUIsR0FBRyxFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELFFBQVE7UUFDTCxJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRTtZQUNoQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsU0FBUyxDQUMvQixJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFDckIsVUFBVSxDQUNaO2lCQUNHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7aUJBQzlDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUNuQixJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzVDLENBQUMsQ0FBQyxDQUFDO1FBQ1QsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBRUQsV0FBVztRQUNSLElBQUksSUFBSSxDQUFDLGlCQUFpQixLQUFLLFNBQVMsRUFBRTtZQUN2QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDdkM7SUFDSixDQUFDOzs4R0E5QlMsK0JBQStCO2tGQUEvQiwrQkFBK0I7dUZBQS9CLCtCQUErQjtjQUgzQyxTQUFTO2VBQUM7Z0JBQ1IsUUFBUSxFQUFFLDBCQUEwQjthQUN0QztrRkFFVyxxQkFBcUI7a0JBQTdCLEtBQUs7WUFDYSxzQkFBc0I7a0JBQXhDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgRGlyZWN0aXZlLFxuICAgRWxlbWVudFJlZixcbiAgIEV2ZW50RW1pdHRlcixcbiAgIElucHV0LFxuICAgTmdab25lLFxuICAgT25EZXN0cm95LFxuICAgT25Jbml0LFxuICAgT3V0cHV0XG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBmcm9tRXZlbnQsIFN1YnNjcmlwdGlvbiB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyB0aHJvdHRsZVRpbWUgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcblxuQERpcmVjdGl2ZSh7XG4gICBzZWxlY3RvcjogXCJbZHJhZ292ZXJOb0NoYW5nZURldGVjdF1cIlxufSlcbmV4cG9ydCBjbGFzcyBEcmFnb3Zlck5vQ2hhbmdlRGV0ZWN0RGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgQElucHV0KCkgZHJhZ292ZXJFdmVudFRocm90dGxlOiBudW1iZXI7XG4gICBAT3V0cHV0KCkgcmVhZG9ubHkgZHJhZ292ZXJOb0NoYW5nZURldGVjdDogRXZlbnRFbWl0dGVyPERyYWdFdmVudD47XG4gICBwcml2YXRlIGV2ZW50U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XG5cbiAgIGNvbnN0cnVjdG9yKFxuICAgICAgcHJpdmF0ZSByZWFkb25seSBuZ1pvbmU6IE5nWm9uZSxcbiAgICAgIHByaXZhdGUgcmVhZG9ubHkgZWw6IEVsZW1lbnRSZWY8RWxlbWVudD5cbiAgICkge1xuICAgICAgdGhpcy5kcmFnb3Zlck5vQ2hhbmdlRGV0ZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxEcmFnRXZlbnQ+KCk7XG4gICAgICB0aGlzLmRyYWdvdmVyRXZlbnRUaHJvdHRsZSA9IDI1O1xuICAgfVxuXG4gICBuZ09uSW5pdCgpIHtcbiAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgIHRoaXMuZXZlbnRTdWJzY3JpcHRpb24gPSBmcm9tRXZlbnQ8RHJhZ0V2ZW50PihcbiAgICAgICAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgIFwiZHJhZ292ZXJcIlxuICAgICAgICAgKVxuICAgICAgICAgICAgLnBpcGUodGhyb3R0bGVUaW1lKHRoaXMuZHJhZ292ZXJFdmVudFRocm90dGxlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCRldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgdGhpcy5kcmFnb3Zlck5vQ2hhbmdlRGV0ZWN0LmVtaXQoJGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgfSk7XG4gICB9XG5cbiAgIG5nT25EZXN0cm95KCkge1xuICAgICAgaWYgKHRoaXMuZXZlbnRTdWJzY3JpcHRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgdGhpcy5ldmVudFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgfVxuICAgfVxufVxuIl19
@@ -1,75 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, Input } from "@angular/core";
2
- import * as i0 from "@angular/core";
3
- import * as i1 from "../limble-tree-root/drop-zone.service";
4
- import * as i2 from "@angular/common";
5
- const _c0 = function (a0, a1) { return { active: a0, related: a1 }; };
6
- function DropZoneComponent_div_0_Template(rf, ctx) { if (rf & 1) {
7
- const _r2 = i0.ɵɵgetCurrentView();
8
- i0.ɵɵelementStart(0, "div", 1);
9
- i0.ɵɵlistener("dragenter", function DropZoneComponent_div_0_Template_div_dragenter_0_listener() { i0.ɵɵrestoreView(_r2); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.dragenterHandler()); });
10
- i0.ɵɵelement(1, "div", 2);
11
- i0.ɵɵelementEnd();
12
- } if (rf & 2) {
13
- const ctx_r0 = i0.ɵɵnextContext();
14
- i0.ɵɵadvance(1);
15
- i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction2(1, _c0, ctx_r0.active, !ctx_r0.active));
16
- } }
17
- export class DropZoneComponent {
18
- constructor(dropZoneService, changeDetectorRef) {
19
- this.dropZoneService = dropZoneService;
20
- this.changeDetectorRef = changeDetectorRef;
21
- this.visible = false;
22
- this.active = false;
23
- }
24
- dragenterHandler() {
25
- if (this.dropZone === undefined || this.active === true) {
26
- return;
27
- }
28
- this.dropZoneService.swapActiveDropZone(this.dropZone);
29
- }
30
- ngOnInit() {
31
- if (this.dropZone === undefined) {
32
- throw new Error("No drop zone object at component initialization");
33
- }
34
- this.commSubscription = this.dropZone
35
- .getCommChannel()
36
- .subscribe((message) => {
37
- switch (message) {
38
- case "checkVisible": {
39
- this.visible = this.dropZone?.isVisible() ?? false;
40
- break;
41
- }
42
- case "checkActive": {
43
- this.active = this.dropZone?.isActive() ?? false;
44
- break;
45
- }
46
- case "checkRendered": {
47
- //Do nothing. This message is for other subscribers
48
- break;
49
- }
50
- default: {
51
- throw new Error("unhandled comm message");
52
- }
53
- }
54
- this.changeDetectorRef.detectChanges();
55
- });
56
- }
57
- ngOnDestroy() {
58
- if (this.commSubscription !== undefined) {
59
- this.commSubscription.unsubscribe();
60
- }
61
- }
62
- }
63
- DropZoneComponent.ɵfac = function DropZoneComponent_Factory(t) { return new (t || DropZoneComponent)(i0.ɵɵdirectiveInject(i1.DropZoneService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
64
- DropZoneComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: DropZoneComponent, selectors: [["drop-zone"]], inputs: { dropZone: "dropZone" }, decls: 1, vars: 1, consts: [["class", "dropZoneContainer", 3, "dragenter", 4, "ngIf"], [1, "dropZoneContainer", 3, "dragenter"], [3, "ngClass"]], template: function DropZoneComponent_Template(rf, ctx) { if (rf & 1) {
65
- i0.ɵɵtemplate(0, DropZoneComponent_div_0_Template, 2, 4, "div", 0);
66
- } if (rf & 2) {
67
- i0.ɵɵproperty("ngIf", ctx.visible);
68
- } }, dependencies: [i2.NgClass, i2.NgIf], styles: [".active[_ngcontent-%COMP%]{margin:10px 0;width:calc(100% - 20px);height:105px;border-radius:5px;background:#f0f9ff;border:2px dashed #bed2db;box-sizing:border-box}.related[_ngcontent-%COMP%]{margin:10px 0;width:calc(100% - 20px);height:30px;border-radius:5px;background:#fff6f0;border:1px dashed #dbccbe;box-sizing:border-box;opacity:.8}.dropZoneContainer[_ngcontent-%COMP%]{position:relative}"], changeDetection: 0 });
69
- (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(DropZoneComponent, [{
70
- type: Component,
71
- args: [{ selector: "drop-zone", changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"dropZoneContainer\" (dragenter)=\"dragenterHandler()\" *ngIf=\"visible\">\n <div [ngClass]=\"{ active: active, related: !active }\"></div>\n</div>\n", styles: [".active{margin:10px 0;width:calc(100% - 20px);height:105px;border-radius:5px;background:#f0f9ff;border:2px dashed #bed2db;box-sizing:border-box}.related{margin:10px 0;width:calc(100% - 20px);height:30px;border-radius:5px;background:#fff6f0;border:1px dashed #dbccbe;box-sizing:border-box;opacity:.8}.dropZoneContainer{position:relative}\n"] }]
72
- }], function () { return [{ type: i1.DropZoneService }, { type: i0.ChangeDetectorRef }]; }, { dropZone: [{
73
- type: Input
74
- }] }); })();
75
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcC16b25lLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2xpbWJsZS10cmVlL3NyYy9saWIvZHJvcC16b25lL2Ryb3Atem9uZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saW1ibGUtdHJlZS9zcmMvbGliL2Ryb3Atem9uZS9kcm9wLXpvbmUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNKLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsS0FBSyxFQUdQLE1BQU0sZUFBZSxDQUFDOzs7Ozs7O0lDUHZCLDhCQUFnRjtJQUFqRCxtS0FBYSxlQUFBLHlCQUFrQixDQUFBLElBQUM7SUFDNUQseUJBQTREO0lBQy9ELGlCQUFNOzs7SUFERSxlQUFnRDtJQUFoRCxtRkFBZ0Q7O0FEaUJ4RCxNQUFNLE9BQU8saUJBQWlCO0lBTTNCLFlBQ29CLGVBQWdDLEVBQ2hDLGlCQUFvQztRQURwQyxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUVyRCxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUN2QixDQUFDO0lBRU0sZ0JBQWdCO1FBQ3BCLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLEVBQUU7WUFDdEQsT0FBTztTQUNUO1FBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVNLFFBQVE7UUFDWixJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFO1lBQzlCLE1BQU0sSUFBSSxLQUFLLENBQUMsaURBQWlELENBQUMsQ0FBQztTQUNyRTtRQUNELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsUUFBUTthQUNqQyxjQUFjLEVBQUU7YUFDaEIsU0FBUyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDcEIsUUFBUSxPQUFPLEVBQUU7Z0JBQ2QsS0FBSyxjQUFjLENBQUMsQ0FBQztvQkFDbEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxJQUFJLEtBQUssQ0FBQztvQkFDbkQsTUFBTTtpQkFDUjtnQkFDRCxLQUFLLGFBQWEsQ0FBQyxDQUFDO29CQUNqQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksS0FBSyxDQUFDO29CQUNqRCxNQUFNO2lCQUNSO2dCQUNELEtBQUssZUFBZSxDQUFDLENBQUM7b0JBQ25CLG1EQUFtRDtvQkFDbkQsTUFBTTtpQkFDUjtnQkFDRCxPQUFPLENBQUMsQ0FBQztvQkFDTixNQUFNLElBQUksS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUM7aUJBQzVDO2FBQ0g7WUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDMUMsQ0FBQyxDQUFDLENBQUM7SUFDVCxDQUFDO0lBRU0sV0FBVztRQUNmLElBQUksSUFBSSxDQUFDLGdCQUFnQixLQUFLLFNBQVMsRUFBRTtZQUN0QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDdEM7SUFDSixDQUFDOztrRkFyRFMsaUJBQWlCO29FQUFqQixpQkFBaUI7UUNsQjlCLGtFQUVNOztRQUYyRCxrQ0FBYTs7dUZEa0JqRSxpQkFBaUI7Y0FON0IsU0FBUzsyQkFDRyxXQUFXLG1CQUdKLHVCQUF1QixDQUFDLE1BQU07a0dBR3RDLFFBQVE7a0JBQWhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgIENvbXBvbmVudCxcbiAgIElucHV0LFxuICAgT25EZXN0cm95LFxuICAgT25Jbml0XG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgRHJvcFpvbmUgfSBmcm9tIFwiLi4vY2xhc3Nlcy9Ecm9wWm9uZVwiO1xuaW1wb3J0IHsgRHJvcFpvbmVTZXJ2aWNlIH0gZnJvbSBcIi4uL2xpbWJsZS10cmVlLXJvb3QvZHJvcC16b25lLnNlcnZpY2VcIjtcblxuQENvbXBvbmVudCh7XG4gICBzZWxlY3RvcjogXCJkcm9wLXpvbmVcIixcbiAgIHRlbXBsYXRlVXJsOiBcIi4vZHJvcC16b25lLmNvbXBvbmVudC5odG1sXCIsXG4gICBzdHlsZVVybHM6IFtcIi4vZHJvcC16b25lLmNvbXBvbmVudC5zY3NzXCJdLFxuICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgRHJvcFpvbmVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gICBASW5wdXQoKSBkcm9wWm9uZTogRHJvcFpvbmUgfCB1bmRlZmluZWQ7XG4gICBwcml2YXRlIGNvbW1TdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZDtcbiAgIHB1YmxpYyB2aXNpYmxlOiBib29sZWFuO1xuICAgcHVibGljIGFjdGl2ZTogYm9vbGVhbjtcblxuICAgY29uc3RydWN0b3IoXG4gICAgICBwcml2YXRlIHJlYWRvbmx5IGRyb3Bab25lU2VydmljZTogRHJvcFpvbmVTZXJ2aWNlLFxuICAgICAgcHJpdmF0ZSByZWFkb25seSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgICkge1xuICAgICAgdGhpcy52aXNpYmxlID0gZmFsc2U7XG4gICAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuICAgfVxuXG4gICBwdWJsaWMgZHJhZ2VudGVySGFuZGxlcigpIHtcbiAgICAgIGlmICh0aGlzLmRyb3Bab25lID09PSB1bmRlZmluZWQgfHwgdGhpcy5hY3RpdmUgPT09IHRydWUpIHtcbiAgICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuZHJvcFpvbmVTZXJ2aWNlLnN3YXBBY3RpdmVEcm9wWm9uZSh0aGlzLmRyb3Bab25lKTtcbiAgIH1cblxuICAgcHVibGljIG5nT25Jbml0KCkge1xuICAgICAgaWYgKHRoaXMuZHJvcFpvbmUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZHJvcCB6b25lIG9iamVjdCBhdCBjb21wb25lbnQgaW5pdGlhbGl6YXRpb25cIik7XG4gICAgICB9XG4gICAgICB0aGlzLmNvbW1TdWJzY3JpcHRpb24gPSB0aGlzLmRyb3Bab25lXG4gICAgICAgICAuZ2V0Q29tbUNoYW5uZWwoKVxuICAgICAgICAgLnN1YnNjcmliZSgobWVzc2FnZSkgPT4ge1xuICAgICAgICAgICAgc3dpdGNoIChtZXNzYWdlKSB7XG4gICAgICAgICAgICAgICBjYXNlIFwiY2hlY2tWaXNpYmxlXCI6IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMudmlzaWJsZSA9IHRoaXMuZHJvcFpvbmU/LmlzVmlzaWJsZSgpID8/IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICBjYXNlIFwiY2hlY2tBY3RpdmVcIjoge1xuICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmUgPSB0aGlzLmRyb3Bab25lPy5pc0FjdGl2ZSgpID8/IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICBjYXNlIFwiY2hlY2tSZW5kZXJlZFwiOiB7XG4gICAgICAgICAgICAgICAgICAvL0RvIG5vdGhpbmcuIFRoaXMgbWVzc2FnZSBpcyBmb3Igb3RoZXIgc3Vic2NyaWJlcnNcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidW5oYW5kbGVkIGNvbW0gbWVzc2FnZVwiKTtcbiAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgfSk7XG4gICB9XG5cbiAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICAgIGlmICh0aGlzLmNvbW1TdWJzY3JpcHRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgdGhpcy5jb21tU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZHJvcFpvbmVDb250YWluZXJcIiAoZHJhZ2VudGVyKT1cImRyYWdlbnRlckhhbmRsZXIoKVwiICpuZ0lmPVwidmlzaWJsZVwiPlxuICAgPGRpdiBbbmdDbGFzc109XCJ7IGFjdGl2ZTogYWN0aXZlLCByZWxhdGVkOiAhYWN0aXZlIH1cIj48L2Rpdj5cbjwvZGl2PlxuIl19
@@ -1,110 +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
- this.treeService = treeService;
22
- this.changeDetectorRef = changeDetectorRef;
23
- this.dropZoneService = dropZoneService;
24
- this.treeConstructionStatus = treeConstructionStatus;
25
- this.ngZone = ngZone;
26
- this.treeConstructionStatus.constructing();
27
- this.indent = this.treeService.treeOptions?.indent;
28
- this.renderDropZoneInside = false;
29
- }
30
- ngOnInit() {
31
- this.addDropZoneInside();
32
- this.ngZone.runOutsideAngular(() => {
33
- if (this.dropZoneInside === undefined) {
34
- throw new Error("drop zone inside is not defined");
35
- }
36
- this.dropZoneInside
37
- .getCommChannel()
38
- .pipe(filter((message) => message === "checkRendered"))
39
- .subscribe(() => {
40
- if (this.dropZoneInside === undefined ||
41
- this.branch === undefined) {
42
- throw new Error("Zones not registered");
43
- }
44
- if (isNestingAllowed(this.treeService.treeOptions, this.branch.data)) {
45
- this.renderDropZoneInside = this.dropZoneInside.isRendered();
46
- }
47
- });
48
- });
49
- }
50
- ngAfterViewInit() {
51
- this.reRender();
52
- this.setDropZoneHost();
53
- this.treeConstructionStatus.doneConstructing();
54
- this.changeDetectorRef.detectChanges();
55
- }
56
- ngOnDestroy() {
57
- if (this.dropZoneInside !== undefined) {
58
- this.dropZoneService.removeDropZone(this.dropZoneInside);
59
- }
60
- this.treeService.cleanupSignal$.next(true);
61
- }
62
- addDropZoneInside() {
63
- if (this.branch === undefined) {
64
- throw new Error("failed to register drop zone inside");
65
- }
66
- this.dropZoneInside = new DropZone([...this.branch.getCoordinates()], 0);
67
- this.dropZoneService.addDropZone(this.dropZoneInside);
68
- }
69
- reRender() {
70
- if (this.children === undefined || this.branch === undefined) {
71
- throw new Error("Failed to render limble tree branch");
72
- }
73
- this.treeService.renderBranch(this.children, this.branch);
74
- }
75
- setDropZoneHost() {
76
- if (this.children === undefined || this.dropZoneInside === undefined) {
77
- throw new Error("Failed to add drop zone host");
78
- }
79
- this.dropZoneInside.setHost(this.children);
80
- }
81
- }
82
- 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)); };
83
- LimbleTreeBranchComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: LimbleTreeBranchComponent, selectors: [["limble-tree-branch"]], viewQuery: function LimbleTreeBranchComponent_Query(rf, ctx) { if (rf & 1) {
84
- i0.ɵɵviewQuery(_c0, 5, ViewContainerRef);
85
- } if (rf & 2) {
86
- let _t;
87
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.children = _t.first);
88
- } }, 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) {
89
- i0.ɵɵelementStart(0, "div");
90
- i0.ɵɵtemplate(1, LimbleTreeBranchComponent_drop_zone_1_Template, 1, 1, "drop-zone", 0);
91
- i0.ɵɵelementStart(2, "span", 1);
92
- i0.ɵɵtemplate(3, LimbleTreeBranchComponent_ng_template_3_Template, 0, 0, "ng-template", null, 2, i0.ɵɵtemplateRefExtractor);
93
- i0.ɵɵelementEnd()();
94
- } if (rf & 2) {
95
- i0.ɵɵstyleProp("margin-left", ctx.indent, "px");
96
- i0.ɵɵadvance(1);
97
- i0.ɵɵproperty("ngIf", ctx.renderDropZoneInside);
98
- i0.ɵɵadvance(1);
99
- i0.ɵɵproperty("hidden", ctx.branch && ctx.branch.data.collapsed);
100
- } }, dependencies: [i4.NgIf, i5.DropZoneComponent] });
101
- (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(LimbleTreeBranchComponent, [{
102
- type: Component,
103
- args: [{ selector: "limble-tree-branch", template: "<div [style.marginLeft.px]=\"indent\">\n <drop-zone\n *ngIf=\"renderDropZoneInside\"\n [dropZone]=\"dropZoneInside\"\n ></drop-zone>\n <span [hidden]=\"branch && branch.data.collapsed\" class=\"limble-child-nodes\">\n <ng-template #children></ng-template>\n </span>\n</div>\n" }]
104
- }], function () { return [{ type: i1.TreeService }, { type: i0.ChangeDetectorRef }, { type: i2.DropZoneService }, { type: i3.TreeConstructionStatus }, { type: i0.NgZone }]; }, { branch: [{
105
- type: Input
106
- }], children: [{
107
- type: ViewChild,
108
- args: ["children", { read: ViewContainerRef }]
109
- }] }); })();
110
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGltYmxlLXRyZWUtYnJhbmNoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2xpbWJsZS10cmVlL3NyYy9saWIvbGltYmxlLXRyZWUtYnJhbmNoL2xpbWJsZS10cmVlLWJyYW5jaC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saW1ibGUtdHJlZS9zcmMvbGliL2xpbWJsZS10cmVlLWJyYW5jaC9saW1ibGUtdHJlZS1icmFuY2guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdKLFNBQVMsRUFDVCxLQUFLLEVBSUwsU0FBUyxFQUNULGdCQUFnQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDL0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFNBQVMsQ0FBQzs7Ozs7Ozs7O0lDZHhDLCtCQUdhOzs7SUFEVixnREFBMkI7OztBRHFCakMsTUFBTSxPQUFPLHlCQUF5QjtJQWFuQyxZQUNXLFdBQXdCLEVBQ2YsaUJBQW9DLEVBQ3BDLGVBQWdDLEVBQ2hDLHNCQUE4QyxFQUM5QyxNQUFjO1FBSnZCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ2Ysc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUM5QyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBRS9CLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUMzQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQztRQUNuRCxJQUFJLENBQUMsb0JB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QW9DO1FBQ2pDLHNGQUdhO1FBQ2IsK0JBQTRFO1FBQ3pFLDJIQUFxQztRQUN4QyxpQkFBTyxFQUFBOztRQVBMLCtDQUE4QjtRQUU1QixlQUEwQjtRQUExQiwrQ0FBMEI7UUFHeEIsZUFBMEM7UUFBMUMsZ0VBQTBDOzt1RkRtQnRDLHlCQUF5QjtjQUxyQyxTQUFTOzJCQUNHLG9CQUFvQjtzTEFNckIsTUFBTTtrQkFBZCxLQUFLO1lBRTZDLFFBQVE7a0JBQTFELFNBQVM7bUJBQUMsVUFBVSxFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgIEFmdGVyVmlld0luaXQsXG4gICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgIENvbXBvbmVudCxcbiAgIElucHV0LFxuICAgTmdab25lLFxuICAgT25EZXN0cm95LFxuICAgT25Jbml0LFxuICAgVmlld0NoaWxkLFxuICAgVmlld0NvbnRhaW5lclJlZlxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgVHJlZVNlcnZpY2UgfSBmcm9tIFwiLi4vbGltYmxlLXRyZWUtcm9vdC90cmVlLnNlcnZpY2VcIjtcbmltcG9ydCB0eXBlIHsgQnJhbmNoIH0gZnJvbSBcIi4uL2NsYXNzZXMvQnJhbmNoXCI7XG5pbXBvcnQgeyBEcm9wWm9uZSB9IGZyb20gXCIuLi9jbGFzc2VzL0Ryb3Bab25lXCI7XG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcbmltcG9ydCB7IGlzTmVzdGluZ0FsbG93ZWQgfSBmcm9tIFwiLi4vdXRpbFwiO1xuaW1wb3J0IHsgRHJvcFpvbmVTZXJ2aWNlIH0gZnJvbSBcIi4uL2xpbWJsZS10cmVlLXJvb3QvZHJvcC16b25lLnNlcnZpY2VcIjtcbmltcG9ydCB7IFRyZWVDb25zdHJ1Y3Rpb25TdGF0dXMgfSBmcm9tIFwiLi4vbGltYmxlLXRyZWUtcm9vdC90cmVlLWNvbnN0cnVjdGlvbi1zdGF0dXMuc2VydmljZVwiO1xuXG5AQ29tcG9uZW50KHtcbiAgIHNlbGVjdG9yOiBcImxpbWJsZS10cmVlLWJyYW5jaFwiLFxuICAgdGVtcGxhdGVVcmw6IFwiLi9saW1ibGUtdHJlZS1icmFuY2guY29tcG9uZW50Lmh0bWxcIixcbiAgIHN0eWxlVXJsczogW1wiLi9saW1ibGUtdHJlZS1icmFuY2guY29tcG9uZW50LnNjc3NcIl1cbn0pXG5leHBvcnQgY2xhc3MgTGltYmxlVHJlZUJyYW5jaENvbXBvbmVudFxuICAgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkluaXQsIE9uRGVzdHJveSB7XG4gICBASW5wdXQoKSBicmFuY2g6IEJyYW5jaDxhbnk+IHwgdW5kZWZpbmVkO1xuXG4gICBAVmlld0NoaWxkKFwiY2hpbGRyZW5cIiwgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pIGNoaWxkcmVuOlxuICAgICAgfCBWaWV3Q29udGFpbmVyUmVmXG4gICAgICB8IHVuZGVmaW5lZDtcblxuICAgcHVibGljIGRyb3Bab25lSW5zaWRlOiBEcm9wWm9uZSB8IHVuZGVmaW5lZDtcbiAgIHB1YmxpYyByZW5kZXJEcm9wWm9uZUluc2lkZTogYm9vbGVhbjtcblxuICAgcHVibGljIHJlYWRvbmx5IGluZGVudDtcblxuICAgY29uc3RydWN0b3IoXG4gICAgICBwcml2YXRlIHRyZWVTZXJ2aWNlOiBUcmVlU2VydmljZSxcbiAgICAgIHByaXZhdGUgcmVhZG9ubHkgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgcHJpdmF0ZSByZWFkb25seSBkcm9wWm9uZVNlcnZpY2U6IERyb3Bab25lU2VydmljZSxcbiAgICAgIHByaXZhdGUgcmVhZG9ubHkgdHJlZUNvbnN0cnVjdGlvblN0YXR1czogVHJlZUNvbnN0cnVjdGlvblN0YXR1cyxcbiAgICAgIHByaXZhdGUgcmVhZG9ubHkgbmdab25lOiBOZ1pvbmVcbiAgICkge1xuICAgICAgdGhpcy50cmVlQ29uc3RydWN0aW9uU3RhdHVzLmNvbnN0cnVjdGluZygpO1xuICAgICAgdGhpcy5pbmRlbnQgPSB0aGlzLnRyZWVTZXJ2aWNlLnRyZWVPcHRpb25zPy5pbmRlbnQ7XG4gICAgICB0aGlzLnJlbmRlckRyb3Bab25lSW5zaWRlID0gZmFsc2U7XG4gICB9XG5cbiAgIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICAgIHRoaXMuYWRkRHJvcFpvbmVJbnNpZGUoKTtcbiAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgIGlmICh0aGlzLmRyb3Bab25lSW5zaWRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImRyb3Agem9uZSBpbnNpZGUgaXMgbm90IGRlZmluZWRcIik7XG4gICAgICAgICB9XG4gICAgICAgICB0aGlzLmRyb3Bab25lSW5zaWRlXG4gICAgICAgICAgICAuZ2V0Q29tbUNoYW5uZWwoKVxuICAgICAgICAgICAgLnBpcGUoZmlsdGVyKChtZXNzYWdlKSA9PiBtZXNzYWdlID09PSBcImNoZWNrUmVuZGVyZWRcIikpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIHRoaXMuZHJvcFpvbmVJbnNpZGUgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICAgICAgdGhpcy5icmFuY2ggPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJab25lcyBub3QgcmVnaXN0ZXJlZFwiKTtcbiAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIGlzTmVzdGluZ0FsbG93ZWQoXG4gICAgICAgICAgICAgICAgICAgICB0aGlzLnRyZWVTZXJ2aWNlLnRyZWVPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgdGhpcy5icmFuY2guZGF0YVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckRyb3Bab25lSW5zaWRlID0gdGhpcy5kcm9wWm9uZUluc2lkZS5pc1JlbmRlcmVkKCk7XG4gICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgfVxuXG4gICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgdGhpcy5yZVJlbmRlcigpO1xuICAgICAgdGhpcy5zZXREcm9wWm9uZUhvc3QoKTtcbiAgICAgIHRoaXMudHJlZUNvbnN0cnVjdGlvblN0YXR1cy5kb25lQ29uc3RydWN0aW5nKCk7XG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgIH1cblxuICAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgICAgaWYgKHRoaXMuZHJvcFpvbmVJbnNpZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgdGhpcy5kcm9wWm9uZVNlcnZpY2UucmVtb3ZlRHJvcFpvbmUodGhpcy5kcm9wWm9uZUluc2lkZSk7XG4gICAgICB9XG4gICAgICB0aGlzLnRyZWVTZXJ2aWNlLmNsZWFudXBTaWduYWwkLm5leHQodHJ1ZSk7XG4gICB9XG5cbiAgIHByaXZhdGUgYWRkRHJvcFpvbmVJbnNpZGUoKSB7XG4gICAgICBpZiAodGhpcy5icmFuY2ggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZmFpbGVkIHRvIHJlZ2lzdGVyIGRyb3Agem9uZSBpbnNpZGVcIik7XG4gICAgICB9XG4gICAgICB0aGlzLmRyb3Bab25lSW5zaWRlID0gbmV3IERyb3Bab25lKFsuLi50aGlzLmJyYW5jaC5nZXRDb29yZGluYXRlcygpXSwgMCk7XG4gICAgICB0aGlzLmRyb3Bab25lU2VydmljZS5hZGREcm9wWm9uZSh0aGlzLmRyb3Bab25lSW5zaWRlKTtcbiAgIH1cblxuICAgcHVibGljIHJlUmVuZGVyKCkge1xuICAgICAgaWYgKHRoaXMuY2hpbGRyZW4gPT09IHVuZGVmaW5lZCB8fCB0aGlzLmJyYW5jaCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gcmVuZGVyIGxpbWJsZSB0cmVlIGJyYW5jaFwiKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudHJlZVNlcnZpY2UucmVuZGVyQnJhbmNoKHRoaXMuY2hpbGRyZW4sIHRoaXMuYnJhbmNoKTtcbiAgIH1cblxuICAgcHJpdmF0ZSBzZXREcm9wWm9uZUhvc3QoKSB7XG4gICAgICBpZiAodGhpcy5jaGlsZHJlbiA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuZHJvcFpvbmVJbnNpZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIGFkZCBkcm9wIHpvbmUgaG9zdFwiKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZHJvcFpvbmVJbnNpZGUuc2V0SG9zdCh0aGlzLmNoaWxkcmVuKTtcbiAgIH1cbn1cbiIsIjxkaXYgW3N0eWxlLm1hcmdpbkxlZnQucHhdPVwiaW5kZW50XCI+XG4gICA8ZHJvcC16b25lXG4gICAgICAqbmdJZj1cInJlbmRlckRyb3Bab25lSW5zaWRlXCJcbiAgICAgIFtkcm9wWm9uZV09XCJkcm9wWm9uZUluc2lkZVwiXG4gICA+PC9kcm9wLXpvbmU+XG4gICA8c3BhbiBbaGlkZGVuXT1cImJyYW5jaCAmJiBicmFuY2guZGF0YS5jb2xsYXBzZWRcIiBjbGFzcz1cImxpbWJsZS1jaGlsZC1ub2Rlc1wiPlxuICAgICAgPG5nLXRlbXBsYXRlICNjaGlsZHJlbj48L25nLXRlbXBsYXRlPlxuICAgPC9zcGFuPlxuPC9kaXY+XG4iXX0=