@limble/limble-tree 2.0.0 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/README.md +2 -0
  2. package/esm2022/lib/components/branch/branch.component.mjs +79 -0
  3. package/esm2022/lib/components/dragover-no-change-detect.mjs +39 -0
  4. package/{esm2020 → esm2022}/lib/components/dropzone/dropzone.component.mjs +4 -4
  5. package/{esm2020 → esm2022}/lib/components/root/root.component.mjs +5 -5
  6. package/esm2022/lib/core/tree-branch/branch-controller.mjs +99 -0
  7. package/esm2022/lib/core/tree-branch/tree-branch.mjs +429 -0
  8. package/esm2022/lib/core/tree-node-base.mjs +77 -0
  9. package/esm2022/lib/core/tree-root/tree-root.mjs +193 -0
  10. package/{esm2020 → esm2022}/lib/core/tree-service/tree.service.mjs +4 -4
  11. package/{esm2020 → esm2022}/lib/extras/collapse/collapse.module.mjs +5 -5
  12. package/{esm2020 → esm2022}/lib/extras/collapse/collapse.service.mjs +4 -4
  13. package/esm2022/lib/extras/drag-and-drop/drag-and-drop.mjs +83 -0
  14. package/{esm2020 → esm2022}/lib/extras/drag-and-drop/drag-and-drop.module.mjs +5 -5
  15. package/{esm2020 → esm2022}/lib/extras/drag-and-drop/drag-and-drop.service.mjs +4 -4
  16. package/{esm2020 → esm2022}/lib/extras/drag-and-drop/draggable.directive.mjs +5 -5
  17. package/esm2022/lib/extras/drag-and-drop/dropzone-renderer.mjs +176 -0
  18. package/esm2022/lib/legacy/legacy-tree.mjs +73 -0
  19. package/esm2022/lib/legacy/limble-tree-legacy.module.mjs +20 -0
  20. package/esm2022/lib/legacy/limble-tree-root/limble-tree-root.component.mjs +78 -0
  21. package/{esm2020 → esm2022}/lib/limble-tree.module.mjs +5 -5
  22. package/esm2022/shared/assert.mjs +7 -0
  23. package/{fesm2020 → fesm2022}/limble-limble-tree.mjs +72 -75
  24. package/fesm2022/limble-limble-tree.mjs.map +1 -0
  25. package/lib/components/branch/branch.component.d.ts +1 -1
  26. package/lib/components/dropzone/dropzone.component.d.ts +1 -1
  27. package/lib/core/tree-node-base.d.ts +2 -1
  28. package/lib/extras/drag-and-drop/draggable.directive.d.ts +1 -1
  29. package/lib/legacy/limble-tree-root/limble-tree-root.component.d.ts +2 -2
  30. package/package.json +7 -13
  31. package/esm2020/lib/components/branch/branch.component.mjs +0 -79
  32. package/esm2020/lib/components/dragover-no-change-detect.mjs +0 -39
  33. package/esm2020/lib/core/tree-branch/branch-controller.mjs +0 -99
  34. package/esm2020/lib/core/tree-branch/tree-branch.mjs +0 -429
  35. package/esm2020/lib/core/tree-node-base.mjs +0 -80
  36. package/esm2020/lib/core/tree-root/tree-root.mjs +0 -193
  37. package/esm2020/lib/extras/drag-and-drop/drag-and-drop.mjs +0 -83
  38. package/esm2020/lib/extras/drag-and-drop/dropzone-renderer.mjs +0 -176
  39. package/esm2020/lib/legacy/legacy-tree.mjs +0 -73
  40. package/esm2020/lib/legacy/limble-tree-legacy.module.mjs +0 -20
  41. package/esm2020/lib/legacy/limble-tree-root/limble-tree-root.component.mjs +0 -78
  42. package/esm2020/shared/assert.mjs +0 -7
  43. package/fesm2015/limble-limble-tree.mjs +0 -1812
  44. package/fesm2015/limble-limble-tree.mjs.map +0 -1
  45. package/fesm2020/limble-limble-tree.mjs.map +0 -1
  46. /package/{esm2020 → esm2022}/lib/components/branch/index.mjs +0 -0
  47. /package/{esm2020 → esm2022}/lib/components/dropzone/index.mjs +0 -0
  48. /package/{esm2020 → esm2022}/lib/components/host-component.interface.mjs +0 -0
  49. /package/{esm2020 → esm2022}/lib/components/index.mjs +0 -0
  50. /package/{esm2020 → esm2022}/lib/components/node-component.interface.mjs +0 -0
  51. /package/{esm2020 → esm2022}/lib/components/root/index.mjs +0 -0
  52. /package/{esm2020 → esm2022}/lib/core/branch-options.interface.mjs +0 -0
  53. /package/{esm2020 → esm2022}/lib/core/branchable.interface.mjs +0 -0
  54. /package/{esm2020 → esm2022}/lib/core/component-container.interface.mjs +0 -0
  55. /package/{esm2020 → esm2022}/lib/core/configuration/configuration.mjs +0 -0
  56. /package/{esm2020 → esm2022}/lib/core/configuration/index.mjs +0 -0
  57. /package/{esm2020 → esm2022}/lib/core/configuration/tree-options.interface.mjs +0 -0
  58. /package/{esm2020 → esm2022}/lib/core/index.mjs +0 -0
  59. /package/{esm2020 → esm2022}/lib/core/tree-branch/graftable.interface.mjs +0 -0
  60. /package/{esm2020 → esm2022}/lib/core/tree-branch/index.mjs +0 -0
  61. /package/{esm2020 → esm2022}/lib/core/tree-node.interface.mjs +0 -0
  62. /package/{esm2020 → esm2022}/lib/core/tree-plot.interface.mjs +0 -0
  63. /package/{esm2020 → esm2022}/lib/core/tree-root/index.mjs +0 -0
  64. /package/{esm2020 → esm2022}/lib/core/tree-root/root-controller.mjs +0 -0
  65. /package/{esm2020 → esm2022}/lib/core/tree-service/index.mjs +0 -0
  66. /package/{esm2020 → esm2022}/lib/errors/index.mjs +0 -0
  67. /package/{esm2020 → esm2022}/lib/errors/tree-error.mjs +0 -0
  68. /package/{esm2020 → esm2022}/lib/events/drag/drag-end-event.mjs +0 -0
  69. /package/{esm2020 → esm2022}/lib/events/drag/drag-start-event.mjs +0 -0
  70. /package/{esm2020 → esm2022}/lib/events/drag/drop-event.mjs +0 -0
  71. /package/{esm2020 → esm2022}/lib/events/drag/index.mjs +0 -0
  72. /package/{esm2020 → esm2022}/lib/events/general/destruction-event.mjs +0 -0
  73. /package/{esm2020 → esm2022}/lib/events/general/index.mjs +0 -0
  74. /package/{esm2020 → esm2022}/lib/events/index.mjs +0 -0
  75. /package/{esm2020 → esm2022}/lib/events/relational/graft-event.mjs +0 -0
  76. /package/{esm2020 → esm2022}/lib/events/relational/index.mjs +0 -0
  77. /package/{esm2020 → esm2022}/lib/events/relational/prune-event.mjs +0 -0
  78. /package/{esm2020 → esm2022}/lib/events/relational/relational-tree-event.interface.mjs +0 -0
  79. /package/{esm2020 → esm2022}/lib/events/relational/tree-relationship.interface.mjs +0 -0
  80. /package/{esm2020 → esm2022}/lib/events/tree-event.interface.mjs +0 -0
  81. /package/{esm2020 → esm2022}/lib/extras/collapse/collapse.mjs +0 -0
  82. /package/{esm2020 → esm2022}/lib/extras/collapse/index.mjs +0 -0
  83. /package/{esm2020 → esm2022}/lib/extras/drag-and-drop/drag-state.mjs +0 -0
  84. /package/{esm2020 → esm2022}/lib/extras/drag-and-drop/index.mjs +0 -0
  85. /package/{esm2020 → esm2022}/lib/legacy/index.mjs +0 -0
  86. /package/{esm2020 → esm2022}/lib/legacy/legacy-component-obj.interface.mjs +0 -0
  87. /package/{esm2020 → esm2022}/lib/legacy/legacy-tree-data.interface.mjs +0 -0
  88. /package/{esm2020 → esm2022}/lib/legacy/legacy-tree-options.interface.mjs +0 -0
  89. /package/{esm2020 → esm2022}/limble-limble-tree.mjs +0 -0
  90. /package/{esm2020 → esm2022}/public-api.mjs +0 -0
  91. /package/{esm2020 → esm2022}/shared/has-property.mjs +0 -0
  92. /package/{esm2020 → esm2022}/shared/index.mjs +0 -0
@@ -1,80 +0,0 @@
1
- import { filter, Subject } from "rxjs";
2
- import { hasProperty } from "../../shared";
3
- import { TreeError } from "../errors";
4
- import { GraftEvent, PruneEvent } from "../events";
5
- export class TreeNodeBase {
6
- constructor() {
7
- this.destroyed = false;
8
- this._branches = [];
9
- this.events$ = new Subject();
10
- this.subscriptions = [
11
- this.graftsToSelf().subscribe((event) => {
12
- this.registerChildRelationship(event.child(), event.index());
13
- }),
14
- this.prunesToSelf().subscribe((event) => {
15
- this.deregisterChildRelationship(event.child());
16
- })
17
- ];
18
- }
19
- branches() {
20
- return [...this._branches];
21
- }
22
- destroy() {
23
- this.branches().forEach((branch) => {
24
- branch.destroy();
25
- });
26
- this.subscriptions.forEach((sub) => {
27
- sub.unsubscribe();
28
- });
29
- this.destroyed = true;
30
- }
31
- dispatch(event) {
32
- this.events$.next(event);
33
- }
34
- events() {
35
- return this.events$;
36
- }
37
- getBranch(index) {
38
- return this._branches[index];
39
- }
40
- handleUserlandError(error) {
41
- const message = hasProperty(error, "message")
42
- ? error.message
43
- : "Unknown error";
44
- throw new TreeError(`Failed to grow branch: ${message}`, {
45
- // This cast to `any` is due to an issue in typescript that has been
46
- // resolved at least by version 4.9.5. When we upgrade our typescript
47
- // version we can remove the cast.
48
- cause: error
49
- });
50
- }
51
- isDestroyed() {
52
- return this.destroyed;
53
- }
54
- plot() {
55
- return new Map(this.branches().map((branch, index) => [index, branch.plot()]));
56
- }
57
- traverse(callback) {
58
- this.branches().forEach((branch) => {
59
- branch.traverse(callback);
60
- });
61
- }
62
- deregisterChildRelationship(child) {
63
- const index = this.branches().findIndex((branch) => branch === child);
64
- this._branches.splice(index, 1);
65
- }
66
- graftsToSelf() {
67
- return this.events().pipe(filter((event) => event instanceof GraftEvent), filter((event) => event.parent().events() === this.events$));
68
- }
69
- prunesToSelf() {
70
- return this.events().pipe(filter((event) => event instanceof PruneEvent), filter((event) => event.parent().events() === this.events$));
71
- }
72
- registerChildRelationship(child, index) {
73
- const branches = this.branches();
74
- if (index < 0 || index > branches.length) {
75
- throw new TreeError(`Can't register child at index ${index}. Out of range.`);
76
- }
77
- this._branches.splice(index, 0, child);
78
- }
79
- }
80
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1ub2RlLWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saW1ibGUtdHJlZS9zcmMvbGliL2NvcmUvdHJlZS1ub2RlLWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBbUIsT0FBTyxFQUFxQixNQUFNLE1BQU0sQ0FBQztBQUMzRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDdEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQWtCLE1BQU0sV0FBVyxDQUFDO0FBS25FLE1BQU0sT0FBTyxZQUFZO0lBUXRCO1FBSFEsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUloQyxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLGFBQWEsR0FBRztZQUNsQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ3JDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDaEUsQ0FBQyxDQUFDO1lBQ0YsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUNyQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDbkQsQ0FBQyxDQUFDO1NBQ0osQ0FBQztJQUNMLENBQUM7SUFFTSxRQUFRO1FBQ1osT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFTSxPQUFPO1FB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QUM5QixLQUFvQyxFQUNwQyxLQUFhO1FBRWIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pDLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxLQUFLLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRTtZQUN2QyxNQUFNLElBQUksU0FBUyxDQUNoQixpQ0FBaUMsS0FBSyxpQkFBaUIsQ0FDekQsQ0FBQztTQUNKO1FBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMxQyxDQUFDO0NBQ0giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmaWx0ZXIsIHR5cGUgT2JzZXJ2YWJsZSwgU3ViamVjdCwgdHlwZSBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgaGFzUHJvcGVydHkgfSBmcm9tIFwiLi4vLi4vc2hhcmVkXCI7XG5pbXBvcnQgeyBUcmVlRXJyb3IgfSBmcm9tIFwiLi4vZXJyb3JzXCI7XG5pbXBvcnQgeyBHcmFmdEV2ZW50LCBQcnVuZUV2ZW50LCB0eXBlIFRyZWVFdmVudCB9IGZyb20gXCIuLi9ldmVudHNcIjtcbmltcG9ydCB7IFRyZWVCcmFuY2ggfSBmcm9tIFwiLi90cmVlLWJyYW5jaFwiO1xuaW1wb3J0IHR5cGUgeyBUcmVlUGxvdCB9IGZyb20gXCIuL3RyZWUtcGxvdC5pbnRlcmZhY2VcIjtcbmltcG9ydCB0eXBlIHsgVHJlZU5vZGUgfSBmcm9tIFwiLi90cmVlLW5vZGUuaW50ZXJmYWNlXCI7XG5cbmV4cG9ydCBjbGFzcyBUcmVlTm9kZUJhc2U8VXNlcmxhbmRDb21wb25lbnQ+XG4gICBpbXBsZW1lbnRzIFBhcnRpYWw8VHJlZU5vZGU8VXNlcmxhbmRDb21wb25lbnQ+Plxue1xuICAgcHJpdmF0ZSByZWFkb25seSBfYnJhbmNoZXM6IEFycmF5PFRyZWVCcmFuY2g8VXNlcmxhbmRDb21wb25lbnQ+PjtcbiAgIHByaXZhdGUgcmVhZG9ubHkgZXZlbnRzJDogU3ViamVjdDxUcmVlRXZlbnQ8VXNlcmxhbmRDb21wb25lbnQ+PjtcbiAgIHByaXZhdGUgZGVzdHJveWVkOiBib29sZWFuID0gZmFsc2U7XG4gICBwcml2YXRlIHJlYWRvbmx5IHN1YnNjcmlwdGlvbnM6IEFycmF5PFN1YnNjcmlwdGlvbj47XG5cbiAgIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICAgIHRoaXMuX2JyYW5jaGVzID0gW107XG4gICAgICB0aGlzLmV2ZW50cyQgPSBuZXcgU3ViamVjdCgpO1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zID0gW1xuICAgICAgICAgdGhpcy5ncmFmdHNUb1NlbGYoKS5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlZ2lzdGVyQ2hpbGRSZWxhdGlvbnNoaXAoZXZlbnQuY2hpbGQoKSwgZXZlbnQuaW5kZXgoKSk7XG4gICAgICAgICB9KSxcbiAgICAgICAgIHRoaXMucHJ1bmVzVG9TZWxmKCkuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5kZXJlZ2lzdGVyQ2hpbGRSZWxhdGlvbnNoaXAoZXZlbnQuY2hpbGQoKSk7XG4gICAgICAgICB9KVxuICAgICAgXTtcbiAgIH1cblxuICAgcHVibGljIGJyYW5jaGVzKCk6IEFycmF5PFRyZWVCcmFuY2g8VXNlcmxhbmRDb21wb25lbnQ+PiB7XG4gICAgICByZXR1cm4gWy4uLnRoaXMuX2JyYW5jaGVzXTtcbiAgIH1cblxuICAgcHVibGljIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgICB0aGlzLmJyYW5jaGVzKCkuZm9yRWFjaCgoYnJhbmNoKSA9PiB7XG4gICAgICAgICBicmFuY2guZGVzdHJveSgpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaCgoc3ViKSA9PiB7XG4gICAgICAgICBzdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5kZXN0cm95ZWQgPSB0cnVlO1xuICAgfVxuXG4gICBwdWJsaWMgZGlzcGF0Y2goZXZlbnQ6IFRyZWVFdmVudDxVc2VybGFuZENvbXBvbmVudD4pOiB2b2lkIHtcbiAgICAgIHRoaXMuZXZlbnRzJC5uZXh0KGV2ZW50KTtcbiAgIH1cblxuICAgcHVibGljIGV2ZW50cygpOiBPYnNlcnZhYmxlPFRyZWVFdmVudDxVc2VybGFuZENvbXBvbmVudD4+IHtcbiAgICAgIHJldHVybiB0aGlzLmV2ZW50cyQ7XG4gICB9XG5cbiAgIHB1YmxpYyBnZXRCcmFuY2goaW5kZXg6IG51bWJlcik6IFRyZWVCcmFuY2g8VXNlcmxhbmRDb21wb25lbnQ+IHwgdW5kZWZpbmVkIHtcbiAgICAgIHJldHVybiB0aGlzLl9icmFuY2hlc1tpbmRleF07XG4gICB9XG5cbiAgIHB1YmxpYyBoYW5kbGVVc2VybGFuZEVycm9yKGVycm9yOiB1bmtub3duKTogbmV2ZXIge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGhhc1Byb3BlcnR5KGVycm9yLCBcIm1lc3NhZ2VcIilcbiAgICAgICAgID8gZXJyb3IubWVzc2FnZVxuICAgICAgICAgOiBcIlVua25vd24gZXJyb3JcIjtcbiAgICAgIHRocm93IG5ldyBUcmVlRXJyb3IoYEZhaWxlZCB0byBncm93IGJyYW5jaDogJHttZXNzYWdlfWAsIHtcbiAgICAgICAgIC8vIFRoaXMgY2FzdCB0byBgYW55YCBpcyBkdWUgdG8gYW4gaXNzdWUgaW4gdHlwZXNjcmlwdCB0aGF0IGhhcyBiZWVuXG4gICAgICAgICAvLyByZXNvbHZlZCBhdCBsZWFzdCBieSB2ZXJzaW9uIDQuOS41LiBXaGVuIHdlIHVwZ3JhZGUgb3VyIHR5cGVzY3JpcHRcbiAgICAgICAgIC8vIHZlcnNpb24gd2UgY2FuIHJlbW92ZSB0aGUgY2FzdC5cbiAgICAgICAgIGNhdXNlOiBlcnJvciBhcyBhbnlcbiAgICAgIH0pO1xuICAgfVxuXG4gICBwdWJsaWMgaXNEZXN0cm95ZWQoKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gdGhpcy5kZXN0cm95ZWQ7XG4gICB9XG5cbiAgIHB1YmxpYyBwbG90KCk6IFRyZWVQbG90IHtcbiAgICAgIHJldHVybiBuZXcgTWFwKFxuICAgICAgICAgdGhpcy5icmFuY2hlcygpLm1hcCgoYnJhbmNoLCBpbmRleCkgPT4gW2luZGV4LCBicmFuY2gucGxvdCgpXSlcbiAgICAgICk7XG4gICB9XG5cbiAgIHB1YmxpYyB0cmF2ZXJzZShcbiAgICAgIGNhbGxiYWNrOiAobm9kZTogVHJlZUJyYW5jaDxVc2VybGFuZENvbXBvbmVudD4pID0+IHZvaWRcbiAgICk6IHZvaWQge1xuICAgICAgdGhpcy5icmFuY2hlcygpLmZvckVhY2goKGJyYW5jaCkgPT4ge1xuICAgICAgICAgYnJhbmNoLnRyYXZlcnNlKGNhbGxiYWNrKTtcbiAgICAgIH0pO1xuICAgfVxuXG4gICBwcml2YXRlIGRlcmVnaXN0ZXJDaGlsZFJlbGF0aW9uc2hpcChcbiAgICAgIGNoaWxkOiBUcmVlQnJhbmNoPFVzZXJsYW5kQ29tcG9uZW50PlxuICAgKTogdm9pZCB7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuYnJhbmNoZXMoKS5maW5kSW5kZXgoKGJyYW5jaCkgPT4gYnJhbmNoID09PSBjaGlsZCk7XG4gICAgICB0aGlzLl9icmFuY2hlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgfVxuXG4gICBwcml2YXRlIGdyYWZ0c1RvU2VsZigpOiBPYnNlcnZhYmxlPEdyYWZ0RXZlbnQ8VXNlcmxhbmRDb21wb25lbnQ+PiB7XG4gICAgICByZXR1cm4gdGhpcy5ldmVudHMoKS5waXBlKFxuICAgICAgICAgZmlsdGVyKFxuICAgICAgICAgICAgKGV2ZW50KTogZXZlbnQgaXMgR3JhZnRFdmVudDxVc2VybGFuZENvbXBvbmVudD4gPT5cbiAgICAgICAgICAgICAgIGV2ZW50IGluc3RhbmNlb2YgR3JhZnRFdmVudFxuICAgICAgICAgKSxcbiAgICAgICAgIGZpbHRlcigoZXZlbnQpID0+IGV2ZW50LnBhcmVudCgpLmV2ZW50cygpID09PSB0aGlzLmV2ZW50cyQpXG4gICAgICApO1xuICAgfVxuXG4gICBwcml2YXRlIHBydW5lc1RvU2VsZigpOiBPYnNlcnZhYmxlPFBydW5lRXZlbnQ8VXNlcmxhbmRDb21wb25lbnQ+PiB7XG4gICAgICByZXR1cm4gdGhpcy5ldmVudHMoKS5waXBlKFxuICAgICAgICAgZmlsdGVyKFxuICAgICAgICAgICAgKGV2ZW50KTogZXZlbnQgaXMgUHJ1bmVFdmVudDxVc2VybGFuZENvbXBvbmVudD4gPT5cbiAgICAgICAgICAgICAgIGV2ZW50IGluc3RhbmNlb2YgUHJ1bmVFdmVudFxuICAgICAgICAgKSxcbiAgICAgICAgIGZpbHRlcigoZXZlbnQpID0+IGV2ZW50LnBhcmVudCgpLmV2ZW50cygpID09PSB0aGlzLmV2ZW50cyQpXG4gICAgICApO1xuICAgfVxuXG4gICBwcml2YXRlIHJlZ2lzdGVyQ2hpbGRSZWxhdGlvbnNoaXAoXG4gICAgICBjaGlsZDogVHJlZUJyYW5jaDxVc2VybGFuZENvbXBvbmVudD4sXG4gICAgICBpbmRleDogbnVtYmVyXG4gICApOiB2b2lkIHtcbiAgICAgIGNvbnN0IGJyYW5jaGVzID0gdGhpcy5icmFuY2hlcygpO1xuICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+IGJyYW5jaGVzLmxlbmd0aCkge1xuICAgICAgICAgdGhyb3cgbmV3IFRyZWVFcnJvcihcbiAgICAgICAgICAgIGBDYW4ndCByZWdpc3RlciBjaGlsZCBhdCBpbmRleCAke2luZGV4fS4gT3V0IG9mIHJhbmdlLmBcbiAgICAgICAgICk7XG4gICAgICB9XG4gICAgICB0aGlzLl9icmFuY2hlcy5zcGxpY2UoaW5kZXgsIDAsIGNoaWxkKTtcbiAgIH1cbn1cbiJdfQ==
@@ -1,193 +0,0 @@
1
- import { TreeBranch } from "../tree-branch";
2
- import { TreeNodeBase } from "../tree-node-base";
3
- import { config } from "../configuration";
4
- import { RootController } from "../tree-root/root-controller";
5
- import { dropzoneRenderer } from "../../extras/drag-and-drop";
6
- import { TreeError } from "../../errors";
7
- import { DestructionEvent } from "../../events";
8
- /**
9
- * Represents the base of the tree. It renders a very simple container for child
10
- * branches. It has methods for creating and accessing those branches. It emits
11
- * events when things happen in the tree.
12
- */
13
- export class TreeRoot {
14
- constructor(viewContainerRef) {
15
- this.viewContainerRef = viewContainerRef;
16
- this.treeNodeBase = new TreeNodeBase();
17
- this.rootController = new RootController(this, viewContainerRef);
18
- this.detectChanges();
19
- }
20
- /** @returns All child branches as an array of TreeBranch instances */
21
- branches() {
22
- return this.treeNodeBase.branches();
23
- }
24
- /**
25
- * Recursively destroys all branches of the tree, as well as itself.
26
- *
27
- * @remarks
28
- * This releases all resources held or consumed by the tree.
29
- *
30
- * It is important to call this method when a tree is discarded, otherwise
31
- * the tree will remain in memory and continue to consume resources.
32
- */
33
- destroy() {
34
- if (this.isDestroyed()) {
35
- throw new TreeError("Cannot destroy a destroyed tree root");
36
- }
37
- dropzoneRenderer.clearTreeFromRegistry(this);
38
- this.treeNodeBase.destroy();
39
- this.rootController.destroy();
40
- this.viewContainerRef.clear();
41
- config.delete(this);
42
- this.dispatch(new DestructionEvent(this));
43
- }
44
- /** Run Angular change detection on the root of the tree */
45
- detectChanges() {
46
- this.rootController.detectChanges();
47
- }
48
- /**
49
- * Emits the specified TreeEvent.
50
- *
51
- * @remarks
52
- * Caution: It is not recommended to manually emit TreeEvents that are already
53
- * provided by the library. For example, it is not recommended to emit a
54
- * `GraftEvent`, `DestructionEvent`, etc. These events may be used by the tree,
55
- * and emitting them manually may cause unexpected behavior. Instead, we
56
- * recommend implementing the TreeEvent interface with your own custom events
57
- * and dispatching those.
58
- *
59
- * @param event - The TreeEvent that will be emitted.
60
- */
61
- dispatch(event) {
62
- this.treeNodeBase.dispatch(event);
63
- }
64
- /**
65
- * @returns
66
- * An observable that emits TreeEvents whenever an event is dispatched
67
- * in the root or any of its descendant branches.
68
- */
69
- events() {
70
- return this.treeNodeBase.events();
71
- }
72
- /**
73
- * @returns
74
- * The child branch at the specified index, or undefined if there is
75
- * no child branch at the specified index.
76
- */
77
- getBranch(index) {
78
- return this.treeNodeBase.getBranch(index);
79
- }
80
- /** @returns The ViewContainerRef in which child branches are rendered */
81
- getBranchesContainer() {
82
- if (this.isDestroyed()) {
83
- throw new TreeError("Cannot get branches container from a destroyed tree root");
84
- }
85
- return this.rootController.getBranchesContainer();
86
- }
87
- /**
88
- * Retrieves the RootComponent.
89
- *
90
- * @remarks
91
- * The RootComponent holds the BranchesContainer, as well as a single Dropzone
92
- * for drag-and-drop operations.
93
- *
94
- * @returns The instance of RootComponent that is rendered by this class.
95
- */
96
- getComponentInstance() {
97
- if (this.isDestroyed()) {
98
- throw new TreeError("Cannot get component instance from a destroyed tree root");
99
- }
100
- return this.rootController.getComponentInstance();
101
- }
102
- /** @returns The Host View in which the RootComponent is rendered */
103
- getHostView() {
104
- if (this.isDestroyed()) {
105
- throw new TreeError("Cannot get component host view from a destroyed tree root");
106
- }
107
- return this.rootController.getHostView();
108
- }
109
- /** @returns The RootComponent as a native HTML Element */
110
- getNativeElement() {
111
- if (this.isDestroyed()) {
112
- throw new TreeError("Cannot get native element from a destroyed tree root");
113
- }
114
- return this.rootController.getNativeElement();
115
- }
116
- /**
117
- * Appends a new child branch to this branch. The child branch will render
118
- * the specified component according to the (optional) configuration parameter.
119
- *
120
- * @param component - The component to render in the new child branch.
121
- * @param options - Configuration options for the new child branch.
122
- *
123
- * @returns
124
- * The newly-created child branch.
125
- */
126
- grow(component, options) {
127
- if (this.isDestroyed()) {
128
- throw new TreeError("Cannot grow a branch on a destroyed tree root");
129
- }
130
- try {
131
- return new TreeBranch(this, { component, ...options });
132
- }
133
- catch (error) {
134
- this.handleUserlandError(error);
135
- }
136
- }
137
- /** @returns `true` if the tree is destroyed, `false` otherwise */
138
- isDestroyed() {
139
- return this.treeNodeBase.isDestroyed();
140
- }
141
- /**
142
- * Provides a model describing the shape of the tree.
143
- *
144
- * @returns A multi-dimensional Map which describes the shape of the tree.
145
- *
146
- * @example
147
- * For example, an empty tree will return an empty Map. A tree with a single
148
- * branch will return a Map with a single entry, where the key is the index
149
- * of the branch (zero) and the value is an empty Map. A Tree like this:
150
- *
151
- * ```
152
- * ---Branch-------Branch
153
- * /
154
- * Root-------Branch
155
- * \
156
- * ---Branch
157
- * ```
158
- * Will return a Map of matching shape:
159
- * ```
160
- * Map {
161
- * 0: Map { 0: Map {}},
162
- * 1: Map {},
163
- * 2: Map {}
164
- * }
165
- * ```
166
- */
167
- plot() {
168
- return this.treeNodeBase.plot();
169
- }
170
- /** @returns Itself */
171
- root() {
172
- return this;
173
- }
174
- /**
175
- * Traverses the tree in depth-first pre-order, executing the provided
176
- * callback function on each node. Traversal includes the Root.
177
- *
178
- * @param callback - A function to execute on each node.
179
- */
180
- traverse(callback) {
181
- callback(this);
182
- this.treeNodeBase.traverse(callback);
183
- }
184
- handleUserlandError(error) {
185
- // When an error occurs in a userland component during a tree operation,
186
- // it can cause undefined, bizarre behavior in the tree. To prevent this,
187
- // we destroy the tree and throw an error instead. This helps protect
188
- // the end-user's data from corruption.
189
- this.destroy();
190
- this.treeNodeBase.handleUserlandError(error);
191
- }
192
- }
193
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1yb290LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbGltYmxlLXRyZWUvc3JjL2xpYi9jb3JlL3RyZWUtcm9vdC90cmVlLXJvb3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRzVDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVqRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDMUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRzlELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzlELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFFLGdCQUFnQixFQUFhLE1BQU0sY0FBYyxDQUFDO0FBRTNEOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8sUUFBUTtJQU1sQixZQUFvQyxnQkFBa0M7UUFBbEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNuRSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDdkMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLGNBQWMsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELHNFQUFzRTtJQUMvRCxRQUFRO1FBQ1osT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNJLE9BQU87UUFDWCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRTtZQUNyQixNQUFNLElBQUksU0FBUyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7U0FDOUQ7UUFDRCxnQkFBZ0IsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzlCLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELDJEQUEyRDtJQUNwRCxhQUFhO1FBQ2pCLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDdkMsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7T0FZRztJQUNJLFFBQVEsQ0FBQyxLQUFtQztRQUNoRCxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLE1BQU07UUFDVixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxTQUFTLENBQUMsS0FBYTtRQUMzQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCx5RUFBeUU7SUFDbEUsb0JBQW9CO1FBQ3hCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFO1lBQ3JCLE1BQU0sSUFBSSxTQUFTLENBQ2hCLDBEQUEwRCxDQUM1RCxDQUFDO1NBQ0o7UUFDRCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUNyRCxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSSxvQkFBb0I7UUFDeEIsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUU7WUFDckIsTUFBTSxJQUFJLFNBQVMsQ0FDaEIsMERBQTBELENBQzVELENBQUM7U0FDSjtRQUNELE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQ3JELENBQUM7SUFFRCxvRUFBb0U7SUFDN0QsV0FBVztRQUNmLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFO1lBQ3JCLE1BQU0sSUFBSSxTQUFTLENBQ2hCLDJEQUEyRCxDQUM3RCxDQUFDO1NBQ0o7UUFDRCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDNUMsQ0FBQztJQUVELDBEQUEwRDtJQUNuRCxnQkFBZ0I7UUFDcEIsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUU7WUFDckIsTUFBTSxJQUFJLFNBQVMsQ0FDaEIsc0RBQXNELENBQ3hELENBQUM7U0FDSjtRQUNELE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQ2pELENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSSxJQUFJLENBQ1IsU0FBa0MsRUFDbEMsT0FBMEM7UUFFMUMsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUU7WUFDckIsTUFBTSxJQUFJLFNBQVMsQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDO1NBQ3ZFO1FBQ0QsSUFBSTtZQUNELE9BQU8sSUFBSSxVQUFVLENBQUMsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUMsQ0FBQztTQUN6RDtRQUFDLE9BQU8sS0FBSyxFQUFFO1lBQ2IsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ2xDO0lBQ0osQ0FBQztJQUVELGtFQUFrRTtJQUMzRCxXQUFXO1FBQ2YsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzFDLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQXlCRztJQUNJLElBQUk7UUFDUixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELHNCQUFzQjtJQUNmLElBQUk7UUFDUixPQUFPLElBQUksQ0FBQztJQUNmLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLFFBQVEsQ0FDWixRQUFxRDtRQUVyRCxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRU8sbUJBQW1CLENBQUMsS0FBYztRQUN2Qyx3RUFBd0U7UUFDeEUseUVBQXlFO1FBQ3pFLHFFQUFxRTtRQUNyRSx1Q0FBdUM7UUFDdkMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2YsSUFBSSxDQUFDLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoRCxDQUFDO0NBQ0giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IE9ic2VydmFibGUgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgVHJlZUJyYW5jaCB9IGZyb20gXCIuLi90cmVlLWJyYW5jaFwiO1xuaW1wb3J0IHR5cGUgeyBUcmVlUGxvdCB9IGZyb20gXCIuLi90cmVlLXBsb3QuaW50ZXJmYWNlXCI7XG5pbXBvcnQgdHlwZSB7IFRyZWVOb2RlIH0gZnJvbSBcIi4uL3RyZWUtbm9kZS5pbnRlcmZhY2VcIjtcbmltcG9ydCB7IFRyZWVOb2RlQmFzZSB9IGZyb20gXCIuLi90cmVlLW5vZGUtYmFzZVwiO1xuaW1wb3J0IHR5cGUgeyBCcmFuY2hPcHRpb25zIH0gZnJvbSBcIi4uL2JyYW5jaC1vcHRpb25zLmludGVyZmFjZVwiO1xuaW1wb3J0IHsgY29uZmlnIH0gZnJvbSBcIi4uL2NvbmZpZ3VyYXRpb25cIjtcbmltcG9ydCB7IFJvb3RDb250cm9sbGVyIH0gZnJvbSBcIi4uL3RyZWUtcm9vdC9yb290LWNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIHsgVHlwZSwgVmlld0NvbnRhaW5lclJlZiwgVmlld1JlZiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBSb290Q29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL2NvbXBvbmVudHNcIjtcbmltcG9ydCB7IGRyb3B6b25lUmVuZGVyZXIgfSBmcm9tIFwiLi4vLi4vZXh0cmFzL2RyYWctYW5kLWRyb3BcIjtcbmltcG9ydCB7IFRyZWVFcnJvciB9IGZyb20gXCIuLi8uLi9lcnJvcnNcIjtcbmltcG9ydCB7IERlc3RydWN0aW9uRXZlbnQsIFRyZWVFdmVudCB9IGZyb20gXCIuLi8uLi9ldmVudHNcIjtcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBiYXNlIG9mIHRoZSB0cmVlLiBJdCByZW5kZXJzIGEgdmVyeSBzaW1wbGUgY29udGFpbmVyIGZvciBjaGlsZFxuICogYnJhbmNoZXMuIEl0IGhhcyBtZXRob2RzIGZvciBjcmVhdGluZyBhbmQgYWNjZXNzaW5nIHRob3NlIGJyYW5jaGVzLiBJdCBlbWl0c1xuICogZXZlbnRzIHdoZW4gdGhpbmdzIGhhcHBlbiBpbiB0aGUgdHJlZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFRyZWVSb290PFVzZXJsYW5kQ29tcG9uZW50PlxuICAgaW1wbGVtZW50cyBUcmVlTm9kZTxVc2VybGFuZENvbXBvbmVudD5cbntcbiAgIHByaXZhdGUgcmVhZG9ubHkgcm9vdENvbnRyb2xsZXI6IFJvb3RDb250cm9sbGVyPFVzZXJsYW5kQ29tcG9uZW50PjtcbiAgIHByaXZhdGUgcmVhZG9ubHkgdHJlZU5vZGVCYXNlOiBUcmVlTm9kZUJhc2U8VXNlcmxhbmRDb21wb25lbnQ+O1xuXG4gICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmKSB7XG4gICAgICB0aGlzLnRyZWVOb2RlQmFzZSA9IG5ldyBUcmVlTm9kZUJhc2UoKTtcbiAgICAgIHRoaXMucm9vdENvbnRyb2xsZXIgPSBuZXcgUm9vdENvbnRyb2xsZXIodGhpcywgdmlld0NvbnRhaW5lclJlZik7XG4gICAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcbiAgIH1cblxuICAgLyoqIEByZXR1cm5zIEFsbCBjaGlsZCBicmFuY2hlcyBhcyBhbiBhcnJheSBvZiBUcmVlQnJhbmNoIGluc3RhbmNlcyAqL1xuICAgcHVibGljIGJyYW5jaGVzKCk6IEFycmF5PFRyZWVCcmFuY2g8VXNlcmxhbmRDb21wb25lbnQ+PiB7XG4gICAgICByZXR1cm4gdGhpcy50cmVlTm9kZUJhc2UuYnJhbmNoZXMoKTtcbiAgIH1cblxuICAgLyoqXG4gICAgKiBSZWN1cnNpdmVseSBkZXN0cm95cyBhbGwgYnJhbmNoZXMgb2YgdGhlIHRyZWUsIGFzIHdlbGwgYXMgaXRzZWxmLlxuICAgICpcbiAgICAqIEByZW1hcmtzXG4gICAgKiBUaGlzIHJlbGVhc2VzIGFsbCByZXNvdXJjZXMgaGVsZCBvciBjb25zdW1lZCBieSB0aGUgdHJlZS5cbiAgICAqXG4gICAgKiBJdCBpcyBpbXBvcnRhbnQgdG8gY2FsbCB0aGlzIG1ldGhvZCB3aGVuIGEgdHJlZSBpcyBkaXNjYXJkZWQsIG90aGVyd2lzZVxuICAgICogdGhlIHRyZWUgd2lsbCByZW1haW4gaW4gbWVtb3J5IGFuZCBjb250aW51ZSB0byBjb25zdW1lIHJlc291cmNlcy5cbiAgICAqL1xuICAgcHVibGljIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCgpKSB7XG4gICAgICAgICB0aHJvdyBuZXcgVHJlZUVycm9yKFwiQ2Fubm90IGRlc3Ryb3kgYSBkZXN0cm95ZWQgdHJlZSByb290XCIpO1xuICAgICAgfVxuICAgICAgZHJvcHpvbmVSZW5kZXJlci5jbGVhclRyZWVGcm9tUmVnaXN0cnkodGhpcyk7XG4gICAgICB0aGlzLnRyZWVOb2RlQmFzZS5kZXN0cm95KCk7XG4gICAgICB0aGlzLnJvb3RDb250cm9sbGVyLmRlc3Ryb3koKTtcbiAgICAgIHRoaXMudmlld0NvbnRhaW5lclJlZi5jbGVhcigpO1xuICAgICAgY29uZmlnLmRlbGV0ZSh0aGlzKTtcbiAgICAgIHRoaXMuZGlzcGF0Y2gobmV3IERlc3RydWN0aW9uRXZlbnQodGhpcykpO1xuICAgfVxuXG4gICAvKiogUnVuIEFuZ3VsYXIgY2hhbmdlIGRldGVjdGlvbiBvbiB0aGUgcm9vdCBvZiB0aGUgdHJlZSAqL1xuICAgcHVibGljIGRldGVjdENoYW5nZXMoKTogdm9pZCB7XG4gICAgICB0aGlzLnJvb3RDb250cm9sbGVyLmRldGVjdENoYW5nZXMoKTtcbiAgIH1cblxuICAgLyoqXG4gICAgKiBFbWl0cyB0aGUgc3BlY2lmaWVkIFRyZWVFdmVudC5cbiAgICAqXG4gICAgKiBAcmVtYXJrc1xuICAgICogQ2F1dGlvbjogSXQgaXMgbm90IHJlY29tbWVuZGVkIHRvIG1hbnVhbGx5IGVtaXQgVHJlZUV2ZW50cyB0aGF0IGFyZSBhbHJlYWR5XG4gICAgKiBwcm92aWRlZCBieSB0aGUgbGlicmFyeS4gRm9yIGV4YW1wbGUsIGl0IGlzIG5vdCByZWNvbW1lbmRlZCB0byBlbWl0IGFcbiAgICAqIGBHcmFmdEV2ZW50YCwgYERlc3RydWN0aW9uRXZlbnRgLCBldGMuIFRoZXNlIGV2ZW50cyBtYXkgYmUgdXNlZCBieSB0aGUgdHJlZSxcbiAgICAqIGFuZCBlbWl0dGluZyB0aGVtIG1hbnVhbGx5IG1heSBjYXVzZSB1bmV4cGVjdGVkIGJlaGF2aW9yLiBJbnN0ZWFkLCB3ZVxuICAgICogcmVjb21tZW5kIGltcGxlbWVudGluZyB0aGUgVHJlZUV2ZW50IGludGVyZmFjZSB3aXRoIHlvdXIgb3duIGN1c3RvbSBldmVudHNcbiAgICAqIGFuZCBkaXNwYXRjaGluZyB0aG9zZS5cbiAgICAqXG4gICAgKiBAcGFyYW0gZXZlbnQgLSBUaGUgVHJlZUV2ZW50IHRoYXQgd2lsbCBiZSBlbWl0dGVkLlxuICAgICovXG4gICBwdWJsaWMgZGlzcGF0Y2goZXZlbnQ6IFRyZWVFdmVudDxVc2VybGFuZENvbXBvbmVudD4pOiB2b2lkIHtcbiAgICAgIHRoaXMudHJlZU5vZGVCYXNlLmRpc3BhdGNoKGV2ZW50KTtcbiAgIH1cblxuICAgLyoqXG4gICAgKiBAcmV0dXJuc1xuICAgICogQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIFRyZWVFdmVudHMgd2hlbmV2ZXIgYW4gZXZlbnQgaXMgZGlzcGF0Y2hlZFxuICAgICogaW4gdGhlIHJvb3Qgb3IgYW55IG9mIGl0cyBkZXNjZW5kYW50IGJyYW5jaGVzLlxuICAgICovXG4gICBwdWJsaWMgZXZlbnRzKCk6IE9ic2VydmFibGU8VHJlZUV2ZW50PFVzZXJsYW5kQ29tcG9uZW50Pj4ge1xuICAgICAgcmV0dXJuIHRoaXMudHJlZU5vZGVCYXNlLmV2ZW50cygpO1xuICAgfVxuXG4gICAvKipcbiAgICAqIEByZXR1cm5zXG4gICAgKiBUaGUgY2hpbGQgYnJhbmNoIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXgsIG9yIHVuZGVmaW5lZCBpZiB0aGVyZSBpc1xuICAgICogbm8gY2hpbGQgYnJhbmNoIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXguXG4gICAgKi9cbiAgIHB1YmxpYyBnZXRCcmFuY2goaW5kZXg6IG51bWJlcik6IFRyZWVCcmFuY2g8VXNlcmxhbmRDb21wb25lbnQ+IHwgdW5kZWZpbmVkIHtcbiAgICAgIHJldHVybiB0aGlzLnRyZWVOb2RlQmFzZS5nZXRCcmFuY2goaW5kZXgpO1xuICAgfVxuXG4gICAvKiogQHJldHVybnMgVGhlIFZpZXdDb250YWluZXJSZWYgaW4gd2hpY2ggY2hpbGQgYnJhbmNoZXMgYXJlIHJlbmRlcmVkICovXG4gICBwdWJsaWMgZ2V0QnJhbmNoZXNDb250YWluZXIoKTogVmlld0NvbnRhaW5lclJlZiB8IHVuZGVmaW5lZCB7XG4gICAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCgpKSB7XG4gICAgICAgICB0aHJvdyBuZXcgVHJlZUVycm9yKFxuICAgICAgICAgICAgXCJDYW5ub3QgZ2V0IGJyYW5jaGVzIGNvbnRhaW5lciBmcm9tIGEgZGVzdHJveWVkIHRyZWUgcm9vdFwiXG4gICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMucm9vdENvbnRyb2xsZXIuZ2V0QnJhbmNoZXNDb250YWluZXIoKTtcbiAgIH1cblxuICAgLyoqXG4gICAgKiBSZXRyaWV2ZXMgdGhlIFJvb3RDb21wb25lbnQuXG4gICAgKlxuICAgICogQHJlbWFya3NcbiAgICAqIFRoZSBSb290Q29tcG9uZW50IGhvbGRzIHRoZSBCcmFuY2hlc0NvbnRhaW5lciwgYXMgd2VsbCBhcyBhIHNpbmdsZSBEcm9wem9uZVxuICAgICogZm9yIGRyYWctYW5kLWRyb3Agb3BlcmF0aW9ucy5cbiAgICAqXG4gICAgKiBAcmV0dXJucyBUaGUgaW5zdGFuY2Ugb2YgUm9vdENvbXBvbmVudCB0aGF0IGlzIHJlbmRlcmVkIGJ5IHRoaXMgY2xhc3MuXG4gICAgKi9cbiAgIHB1YmxpYyBnZXRDb21wb25lbnRJbnN0YW5jZSgpOiBSb290Q29tcG9uZW50IHtcbiAgICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKCkpIHtcbiAgICAgICAgIHRocm93IG5ldyBUcmVlRXJyb3IoXG4gICAgICAgICAgICBcIkNhbm5vdCBnZXQgY29tcG9uZW50IGluc3RhbmNlIGZyb20gYSBkZXN0cm95ZWQgdHJlZSByb290XCJcbiAgICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5yb290Q29udHJvbGxlci5nZXRDb21wb25lbnRJbnN0YW5jZSgpO1xuICAgfVxuXG4gICAvKiogQHJldHVybnMgVGhlIEhvc3QgVmlldyBpbiB3aGljaCB0aGUgUm9vdENvbXBvbmVudCBpcyByZW5kZXJlZCAqL1xuICAgcHVibGljIGdldEhvc3RWaWV3KCk6IFZpZXdSZWYge1xuICAgICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQoKSkge1xuICAgICAgICAgdGhyb3cgbmV3IFRyZWVFcnJvcihcbiAgICAgICAgICAgIFwiQ2Fubm90IGdldCBjb21wb25lbnQgaG9zdCB2aWV3IGZyb20gYSBkZXN0cm95ZWQgdHJlZSByb290XCJcbiAgICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5yb290Q29udHJvbGxlci5nZXRIb3N0VmlldygpO1xuICAgfVxuXG4gICAvKiogQHJldHVybnMgVGhlIFJvb3RDb21wb25lbnQgYXMgYSBuYXRpdmUgSFRNTCBFbGVtZW50ICovXG4gICBwdWJsaWMgZ2V0TmF0aXZlRWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCgpKSB7XG4gICAgICAgICB0aHJvdyBuZXcgVHJlZUVycm9yKFxuICAgICAgICAgICAgXCJDYW5ub3QgZ2V0IG5hdGl2ZSBlbGVtZW50IGZyb20gYSBkZXN0cm95ZWQgdHJlZSByb290XCJcbiAgICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5yb290Q29udHJvbGxlci5nZXROYXRpdmVFbGVtZW50KCk7XG4gICB9XG5cbiAgIC8qKlxuICAgICogQXBwZW5kcyBhIG5ldyBjaGlsZCBicmFuY2ggdG8gdGhpcyBicmFuY2guIFRoZSBjaGlsZCBicmFuY2ggd2lsbCByZW5kZXJcbiAgICAqIHRoZSBzcGVjaWZpZWQgY29tcG9uZW50IGFjY29yZGluZyB0byB0aGUgKG9wdGlvbmFsKSBjb25maWd1cmF0aW9uIHBhcmFtZXRlci5cbiAgICAqXG4gICAgKiBAcGFyYW0gY29tcG9uZW50IC0gVGhlIGNvbXBvbmVudCB0byByZW5kZXIgaW4gdGhlIG5ldyBjaGlsZCBicmFuY2guXG4gICAgKiBAcGFyYW0gb3B0aW9ucyAtIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIG5ldyBjaGlsZCBicmFuY2guXG4gICAgKlxuICAgICogQHJldHVybnNcbiAgICAqIFRoZSBuZXdseS1jcmVhdGVkIGNoaWxkIGJyYW5jaC5cbiAgICAqL1xuICAgcHVibGljIGdyb3coXG4gICAgICBjb21wb25lbnQ6IFR5cGU8VXNlcmxhbmRDb21wb25lbnQ+LFxuICAgICAgb3B0aW9ucz86IEJyYW5jaE9wdGlvbnM8VXNlcmxhbmRDb21wb25lbnQ+XG4gICApOiBUcmVlQnJhbmNoPFVzZXJsYW5kQ29tcG9uZW50PiB7XG4gICAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCgpKSB7XG4gICAgICAgICB0aHJvdyBuZXcgVHJlZUVycm9yKFwiQ2Fubm90IGdyb3cgYSBicmFuY2ggb24gYSBkZXN0cm95ZWQgdHJlZSByb290XCIpO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgIHJldHVybiBuZXcgVHJlZUJyYW5jaCh0aGlzLCB7IGNvbXBvbmVudCwgLi4ub3B0aW9ucyB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICB0aGlzLmhhbmRsZVVzZXJsYW5kRXJyb3IoZXJyb3IpO1xuICAgICAgfVxuICAgfVxuXG4gICAvKiogQHJldHVybnMgYHRydWVgIGlmIHRoZSB0cmVlIGlzIGRlc3Ryb3llZCwgYGZhbHNlYCBvdGhlcndpc2UgKi9cbiAgIHB1YmxpYyBpc0Rlc3Ryb3llZCgpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiB0aGlzLnRyZWVOb2RlQmFzZS5pc0Rlc3Ryb3llZCgpO1xuICAgfVxuXG4gICAvKipcbiAgICAqIFByb3ZpZGVzIGEgbW9kZWwgZGVzY3JpYmluZyB0aGUgc2hhcGUgb2YgdGhlIHRyZWUuXG4gICAgKlxuICAgICogQHJldHVybnMgQSBtdWx0aS1kaW1lbnNpb25hbCBNYXAgd2hpY2ggZGVzY3JpYmVzIHRoZSBzaGFwZSBvZiB0aGUgdHJlZS5cbiAgICAqXG4gICAgKiBAZXhhbXBsZVxuICAgICogRm9yIGV4YW1wbGUsIGFuIGVtcHR5IHRyZWUgd2lsbCByZXR1cm4gYW4gZW1wdHkgTWFwLiBBIHRyZWUgd2l0aCBhIHNpbmdsZVxuICAgICogYnJhbmNoIHdpbGwgcmV0dXJuIGEgTWFwIHdpdGggYSBzaW5nbGUgZW50cnksIHdoZXJlIHRoZSBrZXkgaXMgdGhlIGluZGV4XG4gICAgKiBvZiB0aGUgYnJhbmNoICh6ZXJvKSBhbmQgdGhlIHZhbHVlIGlzIGFuIGVtcHR5IE1hcC4gQSBUcmVlIGxpa2UgdGhpczpcbiAgICAqXG4gICAgKiBgYGBcbiAgICAqICAgICAgICAgLS0tQnJhbmNoLS0tLS0tLUJyYW5jaFxuICAgICogICAgICAgIC9cbiAgICAqIFJvb3QtLS0tLS0tQnJhbmNoXG4gICAgKiAgICAgICAgXFxcbiAgICAqICAgICAgICAgLS0tQnJhbmNoXG4gICAgKiBgYGBcbiAgICAqIFdpbGwgcmV0dXJuIGEgTWFwIG9mIG1hdGNoaW5nIHNoYXBlOlxuICAgICogYGBgXG4gICAgKiBNYXAge1xuICAgICogICAgMDogTWFwIHsgMDogTWFwIHt9fSxcbiAgICAqICAgIDE6IE1hcCB7fSxcbiAgICAqICAgIDI6IE1hcCB7fVxuICAgICogfVxuICAgICogYGBgXG4gICAgKi9cbiAgIHB1YmxpYyBwbG90KCk6IFRyZWVQbG90IHtcbiAgICAgIHJldHVybiB0aGlzLnRyZWVOb2RlQmFzZS5wbG90KCk7XG4gICB9XG5cbiAgIC8qKiBAcmV0dXJucyBJdHNlbGYgKi9cbiAgIHB1YmxpYyByb290KCk6IHRoaXMge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICB9XG5cbiAgIC8qKlxuICAgICogVHJhdmVyc2VzIHRoZSB0cmVlIGluIGRlcHRoLWZpcnN0IHByZS1vcmRlciwgZXhlY3V0aW5nIHRoZSBwcm92aWRlZFxuICAgICogY2FsbGJhY2sgZnVuY3Rpb24gb24gZWFjaCBub2RlLiBUcmF2ZXJzYWwgaW5jbHVkZXMgdGhlIFJvb3QuXG4gICAgKlxuICAgICogQHBhcmFtIGNhbGxiYWNrIC0gQSBmdW5jdGlvbiB0byBleGVjdXRlIG9uIGVhY2ggbm9kZS5cbiAgICAqL1xuICAgcHVibGljIHRyYXZlcnNlKFxuICAgICAgY2FsbGJhY2s6IChub2RlOiBUcmVlTm9kZTxVc2VybGFuZENvbXBvbmVudD4pID0+IHZvaWRcbiAgICk6IHZvaWQge1xuICAgICAgY2FsbGJhY2sodGhpcyk7XG4gICAgICB0aGlzLnRyZWVOb2RlQmFzZS50cmF2ZXJzZShjYWxsYmFjayk7XG4gICB9XG5cbiAgIHByaXZhdGUgaGFuZGxlVXNlcmxhbmRFcnJvcihlcnJvcjogdW5rbm93bik6IG5ldmVyIHtcbiAgICAgIC8vIFdoZW4gYW4gZXJyb3Igb2NjdXJzIGluIGEgdXNlcmxhbmQgY29tcG9uZW50IGR1cmluZyBhIHRyZWUgb3BlcmF0aW9uLFxuICAgICAgLy8gaXQgY2FuIGNhdXNlIHVuZGVmaW5lZCwgYml6YXJyZSBiZWhhdmlvciBpbiB0aGUgdHJlZS4gVG8gcHJldmVudCB0aGlzLFxuICAgICAgLy8gd2UgZGVzdHJveSB0aGUgdHJlZSBhbmQgdGhyb3cgYW4gZXJyb3IgaW5zdGVhZC4gVGhpcyBoZWxwcyBwcm90ZWN0XG4gICAgICAvLyB0aGUgZW5kLXVzZXIncyBkYXRhIGZyb20gY29ycnVwdGlvbi5cbiAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgICAgdGhpcy50cmVlTm9kZUJhc2UuaGFuZGxlVXNlcmxhbmRFcnJvcihlcnJvcik7XG4gICB9XG59XG4iXX0=
@@ -1,83 +0,0 @@
1
- import { Subject } from "rxjs";
2
- import { config } from "../../core";
3
- import { TreeError } from "../../errors";
4
- import { DragEndEvent, DragStartEvent, DropEvent } from "../../events";
5
- import { dragState, DragStates } from "./drag-state";
6
- import { assert } from "../../../shared";
7
- class DragAndDrop {
8
- constructor() {
9
- this.dragAborted$ = new Subject();
10
- }
11
- dragStart(treeBranch, event) {
12
- if (!this.draggingAllowed(treeBranch)) {
13
- event.preventDefault();
14
- return;
15
- }
16
- treeBranch.dispatch(new DragStartEvent(treeBranch));
17
- this.setDragEffects(treeBranch, event);
18
- this.watchForDragend(treeBranch, event);
19
- // We have to do a setTimeout because DOM changes are not allowed during a
20
- // dragstart event.
21
- setTimeout(() => {
22
- dragState.starting(treeBranch);
23
- treeBranch.prune();
24
- dragState.dragging();
25
- });
26
- }
27
- drop(parent, index) {
28
- const treeBranch = dragState.getDragData();
29
- if (treeBranch === undefined) {
30
- throw new TreeError("Cannot get dragged branch");
31
- }
32
- this.graftDraggedBranch(treeBranch, parent, index);
33
- treeBranch.dispatch(new DropEvent(treeBranch, parent, index));
34
- }
35
- getDragImageOffsets(event, element) {
36
- const bounds = element.getBoundingClientRect();
37
- const xOffset = event.clientX - bounds.left;
38
- const yOffset = event.clientY - bounds.top;
39
- return [xOffset, yOffset];
40
- }
41
- setDragEffects(treeBranch, event) {
42
- const dataTransfer = event.dataTransfer;
43
- assert(dataTransfer instanceof DataTransfer);
44
- const nativeElement = treeBranch.getNativeElement();
45
- const [xOffset, yOffset] = this.getDragImageOffsets(event, nativeElement);
46
- dataTransfer.setDragImage(nativeElement, xOffset, yOffset);
47
- }
48
- watchForDragend(treeBranch, event) {
49
- const oldParent = treeBranch.parent();
50
- const oldIndex = treeBranch.index();
51
- assert(oldParent !== undefined && oldIndex !== undefined);
52
- event.target?.addEventListener("dragend", (dragend) => {
53
- if (dragState.state() !== DragStates.Dropped) {
54
- //The drag ended but a drop never occurred, so put the dragged branch back where it started.
55
- this.dragAborted$.next(dragend);
56
- this.graftDraggedBranch(treeBranch, oldParent, oldIndex);
57
- }
58
- dragState.restart();
59
- const newParent = treeBranch.parent();
60
- assert(newParent !== undefined);
61
- const newIndex = treeBranch.index();
62
- assert(newIndex !== undefined);
63
- treeBranch.dispatch(new DragEndEvent(treeBranch, {
64
- oldParent,
65
- oldIndex,
66
- newParent,
67
- newIndex
68
- }));
69
- }, { once: true });
70
- }
71
- draggingAllowed(treeBranch) {
72
- const allowDragging = config.getConfig(treeBranch.root())?.dragAndDrop?.allowDragging ??
73
- (() => true);
74
- return allowDragging(treeBranch);
75
- }
76
- graftDraggedBranch(treeBranch, parent, index) {
77
- treeBranch.graftTo(parent, index);
78
- treeBranch.getNativeElement().style.display = "block";
79
- dragState.dropped();
80
- }
81
- }
82
- export const dragAndDrop = new DragAndDrop();
83
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy1hbmQtZHJvcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2xpbWJsZS10cmVlL3NyYy9saWIvZXh0cmFzL2RyYWctYW5kLWRyb3AvZHJhZy1hbmQtZHJvcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBa0MsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3JELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV6QyxNQUFNLFdBQVc7SUFBakI7UUFDbUIsaUJBQVksR0FBRyxJQUFJLE9BQU8sRUFBYSxDQUFDO0lBa0czRCxDQUFDO0lBaEdTLFNBQVMsQ0FBSSxVQUF5QixFQUFFLEtBQWdCO1FBQzVELElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ3BDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixPQUFPO1NBQ1Q7UUFDRCxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDeEMsMEVBQTBFO1FBQzFFLG1CQUFtQjtRQUNuQixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2IsU0FBUyxDQUFDLFFBQVEsQ0FBQyxVQUFV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LEVBQUUsQ0FDaEIsQ0FBQztJQUNMLENBQUM7SUFFTyxlQUFlLENBQUksVUFBeUI7UUFDakQsTUFBTSxhQUFhLEdBQ2hCLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLGFBQWE7WUFDL0QsQ0FBQyxHQUFTLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QixPQUFPLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRU8sa0JBQWtCLENBQ3ZCLFVBQXlCLEVBQ3pCLE1BQW1CLEVBQ25CLEtBQWE7UUFFYixVQUFVLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNsQyxVQUFVLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN0RCxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDdkIsQ0FBQztDQUNIO0FBRUQsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IHR5cGUgVHJlZUJyYW5jaCwgdHlwZSBUcmVlTm9kZSwgY29uZmlnIH0gZnJvbSBcIi4uLy4uL2NvcmVcIjtcbmltcG9ydCB7IFRyZWVFcnJvciB9IGZyb20gXCIuLi8uLi9lcnJvcnNcIjtcbmltcG9ydCB7IERyYWdFbmRFdmVudCwgRHJhZ1N0YXJ0RXZlbnQsIERyb3BFdmVudCB9IGZyb20gXCIuLi8uLi9ldmVudHNcIjtcbmltcG9ydCB7IGRyYWdTdGF0ZSwgRHJhZ1N0YXRlcyB9IGZyb20gXCIuL2RyYWctc3RhdGVcIjtcbmltcG9ydCB7IGFzc2VydCB9IGZyb20gXCIuLi8uLi8uLi9zaGFyZWRcIjtcblxuY2xhc3MgRHJhZ0FuZERyb3Age1xuICAgcHVibGljIHJlYWRvbmx5IGRyYWdBYm9ydGVkJCA9IG5ldyBTdWJqZWN0PERyYWdFdmVudD4oKTtcblxuICAgcHVibGljIGRyYWdTdGFydDxUPih0cmVlQnJhbmNoOiBUcmVlQnJhbmNoPFQ+LCBldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XG4gICAgICBpZiAoIXRoaXMuZHJhZ2dpbmdBbGxvd2VkKHRyZWVCcmFuY2gpKSB7XG4gICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdHJlZUJyYW5jaC5kaXNwYXRjaChuZXcgRHJhZ1N0YXJ0RXZlbnQodHJlZUJyYW5jaCkpO1xuICAgICAgdGhpcy5zZXREcmFnRWZmZWN0cyh0cmVlQnJhbmNoLCBldmVudCk7XG4gICAgICB0aGlzLndhdGNoRm9yRHJhZ2VuZCh0cmVlQnJhbmNoLCBldmVudCk7XG4gICAgICAvLyBXZSBoYXZlIHRvIGRvIGEgc2V0VGltZW91dCBiZWNhdXNlIERPTSBjaGFuZ2VzIGFyZSBub3QgYWxsb3dlZCBkdXJpbmcgYVxuICAgICAgLy8gZHJhZ3N0YXJ0IGV2ZW50LlxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICBkcmFnU3RhdGUuc3RhcnRpbmcodHJlZUJyYW5jaCk7XG4gICAgICAgICB0cmVlQnJhbmNoLnBydW5lKCk7XG4gICAgICAgICBkcmFnU3RhdGUuZHJhZ2dpbmcoKTtcbiAgICAgIH0pO1xuICAgfVxuXG4gICBwdWJsaWMgZHJvcDxUPihwYXJlbnQ6IFRyZWVOb2RlPFQ+LCBpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICBjb25zdCB0cmVlQnJhbmNoID0gZHJhZ1N0YXRlLmdldERyYWdEYXRhPFQ+KCk7XG4gICAgICBpZiAodHJlZUJyYW5jaCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICB0aHJvdyBuZXcgVHJlZUVycm9yKFwiQ2Fubm90IGdldCBkcmFnZ2VkIGJyYW5jaFwiKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZ3JhZnREcmFnZ2VkQnJhbmNoKHRyZWVCcmFuY2gsIHBhcmVudCwgaW5kZXgpO1xuICAgICAgdHJlZUJyYW5jaC5kaXNwYXRjaChuZXcgRHJvcEV2ZW50KHRyZWVCcmFuY2gsIHBhcmVudCwgaW5kZXgpKTtcbiAgIH1cblxuICAgcHJpdmF0ZSBnZXREcmFnSW1hZ2VPZmZzZXRzKFxuICAgICAgZXZlbnQ6IERyYWdFdmVudCxcbiAgICAgIGVsZW1lbnQ6IEVsZW1lbnRcbiAgICk6IFtudW1iZXIsIG51bWJlcl0ge1xuICAgICAgY29uc3QgYm91bmRzID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNvbnN0IHhPZmZzZXQgPSBldmVudC5jbGllbnRYIC0gYm91bmRzLmxlZnQ7XG4gICAgICBjb25zdCB5T2Zmc2V0ID0gZXZlbnQuY2xpZW50WSAtIGJvdW5kcy50b3A7XG4gICAgICByZXR1cm4gW3hPZmZzZXQsIHlPZmZzZXRdO1xuICAgfVxuXG4gICBwcml2YXRlIHNldERyYWdFZmZlY3RzPFQ+KFxuICAgICAgdHJlZUJyYW5jaDogVHJlZUJyYW5jaDxUPixcbiAgICAgIGV2ZW50OiBEcmFnRXZlbnRcbiAgICk6IHZvaWQge1xuICAgICAgY29uc3QgZGF0YVRyYW5zZmVyID0gZXZlbnQuZGF0YVRyYW5zZmVyO1xuICAgICAgYXNzZXJ0KGRhdGFUcmFuc2ZlciBpbnN0YW5jZW9mIERhdGFUcmFuc2Zlcik7XG4gICAgICBjb25zdCBuYXRpdmVFbGVtZW50ID0gdHJlZUJyYW5jaC5nZXROYXRpdmVFbGVtZW50KCk7XG4gICAgICBjb25zdCBbeE9mZnNldCwgeU9mZnNldF0gPSB0aGlzLmdldERyYWdJbWFnZU9mZnNldHMoZXZlbnQsIG5hdGl2ZUVsZW1lbnQpO1xuICAgICAgZGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZShuYXRpdmVFbGVtZW50LCB4T2Zmc2V0LCB5T2Zmc2V0KTtcbiAgIH1cblxuICAgcHJpdmF0ZSB3YXRjaEZvckRyYWdlbmQ8VD4oXG4gICAgICB0cmVlQnJhbmNoOiBUcmVlQnJhbmNoPFQ+LFxuICAgICAgZXZlbnQ6IERyYWdFdmVudFxuICAgKTogdm9pZCB7XG4gICAgICBjb25zdCBvbGRQYXJlbnQgPSB0cmVlQnJhbmNoLnBhcmVudCgpO1xuICAgICAgY29uc3Qgb2xkSW5kZXggPSB0cmVlQnJhbmNoLmluZGV4KCk7XG4gICAgICBhc3NlcnQob2xkUGFyZW50ICE9PSB1bmRlZmluZWQgJiYgb2xkSW5kZXggIT09IHVuZGVmaW5lZCk7XG4gICAgICBldmVudC50YXJnZXQ/LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICBcImRyYWdlbmRcIixcbiAgICAgICAgIChkcmFnZW5kKSA9PiB7XG4gICAgICAgICAgICBpZiAoZHJhZ1N0YXRlLnN0YXRlKCkgIT09IERyYWdTdGF0ZXMuRHJvcHBlZCkge1xuICAgICAgICAgICAgICAgLy9UaGUgZHJhZyBlbmRlZCBidXQgYSBkcm9wIG5ldmVyIG9jY3VycmVkLCBzbyBwdXQgdGhlIGRyYWdnZWQgYnJhbmNoIGJhY2sgd2hlcmUgaXQgc3RhcnRlZC5cbiAgICAgICAgICAgICAgIHRoaXMuZHJhZ0Fib3J0ZWQkLm5leHQoZHJhZ2VuZCBhcyBEcmFnRXZlbnQpO1xuICAgICAgICAgICAgICAgdGhpcy5ncmFmdERyYWdnZWRCcmFuY2godHJlZUJyYW5jaCwgb2xkUGFyZW50LCBvbGRJbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkcmFnU3RhdGUucmVzdGFydCgpO1xuICAgICAgICAgICAgY29uc3QgbmV3UGFyZW50ID0gdHJlZUJyYW5jaC5wYXJlbnQoKTtcbiAgICAgICAgICAgIGFzc2VydChuZXdQYXJlbnQgIT09IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICBjb25zdCBuZXdJbmRleCA9IHRyZWVCcmFuY2guaW5kZXgoKTtcbiAgICAgICAgICAgIGFzc2VydChuZXdJbmRleCAhPT0gdW5kZWZpbmVkKTtcbiAgICAgICAgICAgIHRyZWVCcmFuY2guZGlzcGF0Y2goXG4gICAgICAgICAgICAgICBuZXcgRHJhZ0VuZEV2ZW50KHRyZWVCcmFuY2gsIHtcbiAgICAgICAgICAgICAgICAgIG9sZFBhcmVudCxcbiAgICAgICAgICAgICAgICAgIG9sZEluZGV4LFxuICAgICAgICAgICAgICAgICAgbmV3UGFyZW50LFxuICAgICAgICAgICAgICAgICAgbmV3SW5kZXhcbiAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICAgfSxcbiAgICAgICAgIHsgb25jZTogdHJ1ZSB9XG4gICAgICApO1xuICAgfVxuXG4gICBwcml2YXRlIGRyYWdnaW5nQWxsb3dlZDxUPih0cmVlQnJhbmNoOiBUcmVlQnJhbmNoPFQ+KTogYm9vbGVhbiB7XG4gICAgICBjb25zdCBhbGxvd0RyYWdnaW5nID1cbiAgICAgICAgIGNvbmZpZy5nZXRDb25maWcodHJlZUJyYW5jaC5yb290KCkpPy5kcmFnQW5kRHJvcD8uYWxsb3dEcmFnZ2luZyA/P1xuICAgICAgICAgKCgpOiB0cnVlID0+IHRydWUpO1xuICAgICAgcmV0dXJuIGFsbG93RHJhZ2dpbmcodHJlZUJyYW5jaCk7XG4gICB9XG5cbiAgIHByaXZhdGUgZ3JhZnREcmFnZ2VkQnJhbmNoPFQ+KFxuICAgICAgdHJlZUJyYW5jaDogVHJlZUJyYW5jaDxUPixcbiAgICAgIHBhcmVudDogVHJlZU5vZGU8VD4sXG4gICAgICBpbmRleDogbnVtYmVyXG4gICApOiB2b2lkIHtcbiAgICAgIHRyZWVCcmFuY2guZ3JhZnRUbyhwYXJlbnQsIGluZGV4KTtcbiAgICAgIHRyZWVCcmFuY2guZ2V0TmF0aXZlRWxlbWVudCgpLnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG4gICAgICBkcmFnU3RhdGUuZHJvcHBlZCgpO1xuICAgfVxufVxuXG5leHBvcnQgY29uc3QgZHJhZ0FuZERyb3AgPSBuZXcgRHJhZ0FuZERyb3AoKTtcbiJdfQ==
@@ -1,176 +0,0 @@
1
- import { assert } from "../../../shared";
2
- import { BranchComponent } from "../../components";
3
- import { dragState, DragStates } from "./drag-state";
4
- import { dragAndDrop } from "./drag-and-drop";
5
- import { TreeBranch, TreeRoot, config } from "../../core";
6
- import { filter, first } from "rxjs";
7
- import { PruneEvent } from "../../events";
8
- class DropzoneRenderer {
9
- constructor() {
10
- this.registry = new Map();
11
- this.currentDisplay = null;
12
- dragAndDrop.dragAborted$.subscribe(() => {
13
- this.clearCurrentDisplay();
14
- });
15
- dragState
16
- .events()
17
- .pipe(filter((event) => event === DragStates.Starting))
18
- .subscribe(() => {
19
- const branch = dragState.getDragData();
20
- assert(branch !== undefined);
21
- let cursor = branch.parent()?.getBranch((branch.index() ?? 0) - 1);
22
- let final = branch.parent();
23
- while (cursor !== undefined) {
24
- final = cursor;
25
- cursor = cursor.branches().at(-1);
26
- }
27
- branch
28
- .events()
29
- .pipe(filter((event) => event instanceof PruneEvent), first())
30
- .subscribe(() => {
31
- assert(final !== undefined);
32
- this.showLowerZones(final);
33
- });
34
- });
35
- }
36
- clearCurrentDisplay() {
37
- if (this.currentDisplay === null)
38
- return;
39
- for (const branch of this.registry.values()) {
40
- const instance = branch.getComponentInstance();
41
- instance.showInnerDropzone = false;
42
- if (instance instanceof BranchComponent) {
43
- instance.showLateralDropzone = false;
44
- }
45
- }
46
- this.currentDisplay = null;
47
- }
48
- clearTreeFromRegistry(tree) {
49
- const nodes = [];
50
- tree.traverse((node) => nodes.push(node));
51
- for (const [dropzoneComponent, treeNode] of this.registry) {
52
- if (nodes.includes(treeNode)) {
53
- this.registry.delete(dropzoneComponent);
54
- }
55
- }
56
- }
57
- getCurrentDisplay() {
58
- if (this.currentDisplay === null)
59
- return null;
60
- return { ...this.currentDisplay };
61
- }
62
- getDropzoneLocation(dropzone) {
63
- const branch = this.registry.get(dropzone);
64
- const placement = dropzone.placement;
65
- if (branch === undefined) {
66
- throw new Error("dropzone not found in registry");
67
- }
68
- if (placement === undefined) {
69
- throw new Error("dropzone has an undefined placement");
70
- }
71
- return [branch, placement];
72
- }
73
- handleDrop(treeNode, placement) {
74
- if (placement === "inner") {
75
- dragAndDrop.drop(treeNode, 0);
76
- }
77
- else if (treeNode instanceof TreeBranch && placement === "lateral") {
78
- const currentParent = treeNode.parent();
79
- const index = treeNode.index();
80
- if (currentParent === undefined || index === undefined) {
81
- throw new Error("branch must have a parent");
82
- }
83
- dragAndDrop.drop(currentParent, index + 1);
84
- }
85
- this.clearCurrentDisplay();
86
- }
87
- registerDropzone(dropzone, treeNode) {
88
- this.registry.set(dropzone, treeNode);
89
- }
90
- registerDropzones(dropzones, treeBranch) {
91
- for (const dropzone of dropzones) {
92
- this.registry.set(dropzone, treeBranch);
93
- }
94
- }
95
- showLowerZones(treeNode) {
96
- this.clearCurrentDisplay();
97
- this.showInnerZone(treeNode);
98
- if (treeNode.branches().length === 0) {
99
- this.loopThroughLowerZones(treeNode);
100
- }
101
- this.currentDisplay = { treeBranch: treeNode, direction: "lower" };
102
- }
103
- showUpperZones(treeBranch) {
104
- this.clearCurrentDisplay();
105
- this.loopThroughUpperZones(treeBranch);
106
- this.currentDisplay = { treeBranch, direction: "upper" };
107
- }
108
- loopThroughLowerZones(treeNode) {
109
- let cursor = treeNode;
110
- while (cursor instanceof TreeBranch) {
111
- this.showLateralZone(cursor);
112
- const parent = cursor.parent();
113
- const index = cursor.index();
114
- assert(parent !== undefined && index !== undefined);
115
- if (parent.branches().length > index + 1) {
116
- return;
117
- }
118
- cursor = cursor.parent();
119
- }
120
- }
121
- loopThroughUpperZones(treeBranch) {
122
- let cursor = treeBranch
123
- .parent()
124
- ?.getBranch((treeBranch.index() ?? 0) - 1);
125
- let final = treeBranch.parent();
126
- while (cursor !== undefined) {
127
- this.showLateralZone(cursor);
128
- final = cursor;
129
- cursor = cursor.branches().at(-1);
130
- }
131
- if (final !== undefined &&
132
- (final instanceof TreeRoot || final instanceof TreeBranch)) {
133
- this.showInnerZone(final);
134
- }
135
- }
136
- nestingAllowed(treeNode) {
137
- if (treeNode instanceof TreeRoot) {
138
- return true;
139
- }
140
- if (treeNode instanceof TreeBranch) {
141
- const allowNesting = config.getConfig(treeNode.root())?.dragAndDrop?.allowNesting ??
142
- (() => true);
143
- return allowNesting(treeNode);
144
- }
145
- throw new Error("unsupported treeNode type");
146
- }
147
- dropAllowed(parent, index) {
148
- const sourceNode = dragState.getDragData();
149
- assert(sourceNode instanceof TreeBranch);
150
- if (parent instanceof TreeRoot) {
151
- const allowDrop = config.getConfig(parent)?.dragAndDrop?.allowDrop ??
152
- (() => true);
153
- return allowDrop(sourceNode, parent, index);
154
- }
155
- if (parent instanceof TreeBranch) {
156
- const allowDrop = config.getConfig(parent.root())?.dragAndDrop?.allowDrop ??
157
- (() => true);
158
- return allowDrop(sourceNode, parent, index);
159
- }
160
- throw new Error("unsupported treeNode type");
161
- }
162
- showInnerZone(treeNode) {
163
- if (!this.nestingAllowed(treeNode) || !this.dropAllowed(treeNode, 0))
164
- return;
165
- treeNode.getComponentInstance().showInnerDropzone = true;
166
- }
167
- showLateralZone(treeBranch) {
168
- const index = treeBranch.index();
169
- assert(index !== undefined);
170
- if (!this.dropAllowed(treeBranch.parent(), index + 1))
171
- return;
172
- treeBranch.getComponentInstance().showLateralDropzone = true;
173
- }
174
- }
175
- export const dropzoneRenderer = new DropzoneRenderer();
176
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcHpvbmUtcmVuZGVyZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saW1ibGUtdHJlZS9zcmMvbGliL2V4dHJhcy9kcmFnLWFuZC1kcm9wL2Ryb3B6b25lLXJlbmRlcmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsZUFBZSxFQUEwQixNQUFNLGtCQUFrQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3JELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsVUFBVSxFQUFpQixRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFMUMsTUFBTSxnQkFBZ0I7SUFPbkI7UUFDRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7UUFDM0IsV0FBVyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ3JDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzlCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsU0FBUzthQUNMLE1BQU0sRUFBRTthQUNSLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssS0FBSyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDdEQsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNiLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxXQUFXLEVBQUUs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QUFLLENBQUMsQ0FBQztTQUM5QztRQUNELElBQUksTUFBTSxZQUFZLFVBQVUsRUFBRTtZQUMvQixNQUFNLFNBQVMsR0FDWixNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxTQUFTO2dCQUN2RCxDQUFDLEdBQVMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3RCLE9BQU8sU0FBUyxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDOUM7UUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVPLGFBQWEsQ0FBSSxRQUFxQjtRQUMzQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUNqRSxPQUFPO1FBQ1YsUUFBUSxDQUFDLG9CQUFvQixFQUFFLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO0lBQzVELENBQUM7SUFFTyxlQUFlLENBQUksVUFBeUI7UUFDakQsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2pDLE1BQU0sQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUM7WUFBRSxPQUFPO1FBQzlELFVBQVUsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQztJQUNoRSxDQUFDO0NBQ0g7QUFFRCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLGdCQUFnQixFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhc3NlcnQgfSBmcm9tIFwiLi4vLi4vLi4vc2hhcmVkXCI7XG5pbXBvcnQgeyBCcmFuY2hDb21wb25lbnQsIHR5cGUgRHJvcHpvbmVDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vY29tcG9uZW50c1wiO1xuaW1wb3J0IHsgZHJhZ1N0YXRlLCBEcmFnU3RhdGVzIH0gZnJvbSBcIi4vZHJhZy1zdGF0ZVwiO1xuaW1wb3J0IHsgZHJhZ0FuZERyb3AgfSBmcm9tIFwiLi9kcmFnLWFuZC1kcm9wXCI7XG5pbXBvcnQgeyBUcmVlQnJhbmNoLCB0eXBlIFRyZWVOb2RlLCBUcmVlUm9vdCwgY29uZmlnIH0gZnJvbSBcIi4uLy4uL2NvcmVcIjtcbmltcG9ydCB7IGZpbHRlciwgZmlyc3QgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgUHJ1bmVFdmVudCB9IGZyb20gXCIuLi8uLi9ldmVudHNcIjtcblxuY2xhc3MgRHJvcHpvbmVSZW5kZXJlciB7XG4gICBwcml2YXRlIGN1cnJlbnREaXNwbGF5OiB7XG4gICAgICB0cmVlQnJhbmNoOiBUcmVlTm9kZTxhbnk+O1xuICAgICAgZGlyZWN0aW9uOiBcInVwcGVyXCIgfCBcImxvd2VyXCI7XG4gICB9IHwgbnVsbDtcbiAgIHByaXZhdGUgcmVhZG9ubHkgcmVnaXN0cnk6IE1hcDxEcm9wem9uZUNvbXBvbmVudCwgVHJlZU5vZGU8YW55Pj47XG5cbiAgIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICAgIHRoaXMucmVnaXN0cnkgPSBuZXcgTWFwKCk7XG4gICAgICB0aGlzLmN1cnJlbnREaXNwbGF5ID0gbnVsbDtcbiAgICAgIGRyYWdBbmREcm9wLmRyYWdBYm9ydGVkJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgdGhpcy5jbGVhckN1cnJlbnREaXNwbGF5KCk7XG4gICAgICB9KTtcbiAgICAgIGRyYWdTdGF0ZVxuICAgICAgICAgLmV2ZW50cygpXG4gICAgICAgICAucGlwZShmaWx0ZXIoKGV2ZW50KSA9PiBldmVudCA9PT0gRHJhZ1N0YXRlcy5TdGFydGluZykpXG4gICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGJyYW5jaCA9IGRyYWdTdGF0ZS5nZXREcmFnRGF0YSgpO1xuICAgICAgICAgICAgYXNzZXJ0KGJyYW5jaCAhPT0gdW5kZWZpbmVkKTtcbiAgICAgICAgICAgIGxldCBjdXJzb3IgPSBicmFuY2gucGFyZW50KCk/LmdldEJyYW5jaCgoYnJhbmNoLmluZGV4KCkgPz8gMCkgLSAxKTtcbiAgICAgICAgICAgIGxldCBmaW5hbCA9IGJyYW5jaC5wYXJlbnQoKTtcbiAgICAgICAgICAgIHdoaWxlIChjdXJzb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgZmluYWwgPSBjdXJzb3I7XG4gICAgICAgICAgICAgICBjdXJzb3IgPSBjdXJzb3IuYnJhbmNoZXMoKS5hdCgtMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmFuY2hcbiAgICAgICAgICAgICAgIC5ldmVudHMoKVxuICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICBmaWx0ZXIoKGV2ZW50KSA9PiBldmVudCBpbnN0YW5jZW9mIFBydW5lRXZlbnQpLFxuICAgICAgICAgICAgICAgICAgZmlyc3QoKVxuICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBhc3NlcnQoZmluYWwgIT09IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICB0aGlzLnNob3dMb3dlclpvbmVzKGZpbmFsKTtcbiAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgfSk7XG4gICB9XG5cbiAgIHB1YmxpYyBjbGVhckN1cnJlbnREaXNwbGF5KCk6IHZvaWQge1xuICAgICAgaWYgKHRoaXMuY3VycmVudERpc3BsYXkgPT09IG51bGwpIHJldHVybjtcbiAgICAgIGZvciAoY29uc3QgYnJhbmNoIG9mIHRoaXMucmVnaXN0cnkudmFsdWVzKCkpIHtcbiAgICAgICAgIGNvbnN0IGluc3RhbmNlID0gYnJhbmNoLmdldENvbXBvbmVudEluc3RhbmNlKCk7XG4gICAgICAgICBpbnN0YW5jZS5zaG93SW5uZXJEcm9wem9uZSA9IGZhbHNlO1xuICAgICAgICAgaWYgKGluc3RhbmNlIGluc3RhbmNlb2YgQnJhbmNoQ29tcG9uZW50KSB7XG4gICAgICAgICAgICBpbnN0YW5jZS5zaG93TGF0ZXJhbERyb3B6b25lID0gZmFsc2U7XG4gICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmN1cnJlbnREaXNwbGF5ID0gbnVsbDtcbiAgIH1cblxuICAgcHVibGljIGNsZWFyVHJlZUZyb21SZWdpc3RyeSh0cmVlOiBUcmVlTm9kZTxhbnk+KTogdm9pZCB7XG4gICAgICBjb25zdCBub2RlczogQXJyYXk8VHJlZU5vZGU8YW55Pj4gPSBbXTtcbiAgICAgIHRyZWUudHJhdmVyc2UoKG5vZGUpID0+IG5vZGVzLnB1c2gobm9kZSkpO1xuICAgICAgZm9yIChjb25zdCBbZHJvcHpvbmVDb21wb25lbnQsIHRyZWVOb2RlXSBvZiB0aGlzLnJlZ2lzdHJ5KSB7XG4gICAgICAgICBpZiAobm9kZXMuaW5jbHVkZXModHJlZU5vZGUpKSB7XG4gICAgICAgICAgICB0aGlzLnJlZ2lzdHJ5LmRlbGV0ZShkcm9wem9uZUNvbXBvbmVudCk7XG4gICAgICAgICB9XG4gICAgICB9XG4gICB9XG5cbiAgIHB1YmxpYyBnZXRDdXJyZW50RGlzcGxheSgpOiB7XG4gICAgICB0cmVlQnJhbmNoOiBUcmVlTm9kZTxhbnk+O1xuICAgICAgZGlyZWN0aW9uOiBcInVwcGVyXCIgfCBcImxvd2VyXCI7XG4gICB9IHwgbnVsbCB7XG4gICAgICBpZiAodGhpcy5jdXJyZW50RGlzcGxheSA9PT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gICAgICByZXR1cm4geyAuLi50aGlzLmN1cnJlbnREaXNwbGF5IH07XG4gICB9XG5cbiAgIHB1YmxpYyBnZXREcm9wem9uZUxvY2F0aW9uPFQ+KFxuICAgICAgZHJvcHpvbmU6IERyb3B6b25lQ29tcG9uZW50XG4gICApOiBbVHJlZU5vZGU8VD4sIFwiaW5uZXJcIiB8IFwibGF0ZXJhbFwiXSB7XG4gICAgICBjb25zdCBicmFuY2ggPSB0aGlzLnJlZ2lzdHJ5LmdldChkcm9wem9uZSk7XG4gICAgICBjb25zdCBwbGFjZW1lbnQgPSBkcm9wem9uZS5wbGFjZW1lbnQ7XG4gICAgICBpZiAoYnJhbmNoID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImRyb3B6b25lIG5vdCBmb3VuZCBpbiByZWdpc3RyeVwiKTtcbiAgICAgIH1cbiAgICAgIGlmIChwbGFjZW1lbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZHJvcHpvbmUgaGFzIGFuIHVuZGVmaW5lZCBwbGFjZW1lbnRcIik7XG4gICAgICB9XG4gICAgICByZXR1cm4gW2JyYW5jaCwgcGxhY2VtZW50XTtcbiAgIH1cblxuICAgcHVibGljIGhhbmRsZURyb3A8VD4oXG4gICAgICB0cmVlTm9kZTogVHJlZU5vZGU8VD4sXG4gICAgICBwbGFjZW1lbnQ6IFwiaW5uZXJcIiB8IFwibGF0ZXJhbFwiXG4gICApOiB2b2lkIHtcbiAgICAgIGlmIChwbGFjZW1lbnQgPT09IFwiaW5uZXJcIikge1xuICAgICAgICAgZHJhZ0FuZERyb3AuZHJvcCh0cmVlTm9kZSwgMCk7XG4gICAgICB9IGVsc2UgaWYgKHRyZWVOb2RlIGluc3RhbmNlb2YgVHJlZUJyYW5jaCAmJiBwbGFjZW1lbnQgPT09IFwibGF0ZXJhbFwiKSB7XG4gICAgICAgICBjb25zdCBjdXJyZW50UGFyZW50ID0gdHJlZU5vZGUucGFyZW50KCk7XG4gICAgICAgICBjb25zdCBpbmRleCA9IHRyZWVOb2RlLmluZGV4KCk7XG4gICAgICAgICBpZiAoY3VycmVudFBhcmVudCA9PT0gdW5kZWZpbmVkIHx8IGluZGV4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImJyYW5jaCBtdXN0IGhhdmUgYSBwYXJlbnRcIik7XG4gICAgICAgICB9XG4gICAgICAgICBkcmFnQW5kRHJvcC5kcm9wKGN1cnJlbnRQYXJlbnQsIGluZGV4ICsgMSk7XG4gICAgICB9XG4gICAgICB0aGlzLmNsZWFyQ3VycmVudERpc3BsYXkoKTtcbiAgIH1cblxuICAgcHVibGljIHJlZ2lzdGVyRHJvcHpvbmU8VD4oXG4gICAgICBkcm9wem9uZTogRHJvcHpvbmVDb21wb25lbnQsXG4gICAgICB0cmVlTm9kZTogVHJlZU5vZGU8VD5cbiAgICk6IHZvaWQge1xuICAgICAgdGhpcy5yZWdpc3RyeS5zZXQoZHJvcHpvbmUsIHRyZWVOb2RlKTtcbiAgIH1cblxuICAgcHVibGljIHJlZ2lzdGVyRHJvcHpvbmVzPFQ+KFxuICAgICAgZHJvcHpvbmVzOiBJdGVyYWJsZTxEcm9wem9uZUNvbXBvbmVudD4sXG4gICAgICB0cmVlQnJhbmNoOiBUcmVlQnJhbmNoPFQ+XG4gICApOiB2b2lkIHtcbiAgICAgIGZvciAoY29uc3QgZHJvcHpvbmUgb2YgZHJvcHpvbmVzKSB7XG4gICAgICAgICB0aGlzLnJlZ2lzdHJ5LnNldChkcm9wem9uZSwgdHJlZUJyYW5jaCk7XG4gICAgICB9XG4gICB9XG5cbiAgIHB1YmxpYyBzaG93TG93ZXJab25lczxUPih0cmVlTm9kZTogVHJlZU5vZGU8VD4pOiB2b2lkIHtcbiAgICAgIHRoaXMuY2xlYXJDdXJyZW50RGlzcGxheSgpO1xuICAgICAgdGhpcy5zaG93SW5uZXJab25lKHRyZWVOb2RlKTtcbiAgICAgIGlmICh0cmVlTm9kZS5icmFuY2hlcygpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgdGhpcy5sb29wVGhyb3VnaExvd2VyWm9uZXModHJlZU5vZGUpO1xuICAgICAgfVxuICAgICAgdGhpcy5jdXJyZW50RGlzcGxheSA9IHsgdHJlZUJyYW5jaDogdHJlZU5vZGUsIGRpcmVjdGlvbjogXCJsb3dlclwiIH07XG4gICB9XG5cbiAgIHB1YmxpYyBzaG93VXBwZXJab25lczxUPih0cmVlQnJhbmNoOiBUcmVlQnJhbmNoPFQ+KTogdm9pZCB7XG4gICAgICB0aGlzLmNsZWFyQ3VycmVudERpc3BsYXkoKTtcbiAgICAgIHRoaXMubG9vcFRocm91Z2hVcHBlclpvbmVzKHRyZWVCcmFuY2gpO1xuICAgICAgdGhpcy5jdXJyZW50RGlzcGxheSA9IHsgdHJlZUJyYW5jaCwgZGlyZWN0aW9uOiBcInVwcGVyXCIgfTtcbiAgIH1cblxuICAgcHJpdmF0ZSBsb29wVGhyb3VnaExvd2VyWm9uZXM8VD4odHJlZU5vZGU6IFRyZWVOb2RlPFQ+KTogdm9pZCB7XG4gICAgICBsZXQgY3Vyc29yOiBUcmVlTm9kZTxUPiB8IHVuZGVmaW5lZCA9IHRyZWVOb2RlO1xuICAgICAgd2hpbGUgKGN1cnNvciBpbnN0YW5jZW9mIFRyZWVCcmFuY2gpIHtcbiAgICAgICAgIHRoaXMuc2hvd0xhdGVyYWxab25lKGN1cnNvcik7XG4gICAgICAgICBjb25zdCBwYXJlbnQgPSBjdXJzb3IucGFyZW50KCk7XG4gICAgICAgICBjb25zdCBpbmRleCA9IGN1cnNvci5pbmRleCgpO1xuICAgICAgICAgYXNzZXJ0KHBhcmVudCAhPT0gdW5kZWZpbmVkICYmIGluZGV4ICE9PSB1bmRlZmluZWQpO1xuICAgICAgICAgaWYgKHBhcmVudC5icmFuY2hlcygpLmxlbmd0aCA+IGluZGV4ICsgMSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgfVxuICAgICAgICAgY3Vyc29yID0gY3Vyc29yLnBhcmVudCgpO1xuICAgICAgfVxuICAgfVxuXG4gICBwcml2YXRlIGxvb3BUaHJvdWdoVXBwZXJab25lczxUPih0cmVlQnJhbmNoOiBUcmVlQnJhbmNoPFQ+KTogdm9pZCB7XG4gICAgICBsZXQgY3Vyc29yID0gdHJlZUJyYW5jaFxuICAgICAgICAgLnBhcmVudCgpXG4gICAgICAgICA/LmdldEJyYW5jaCgodHJlZUJyYW5jaC5pbmRleCgpID8/IDApIC0gMSk7XG4gICAgICBsZXQgZmluYWwgPSB0cmVlQnJhbmNoLnBhcmVudCgpO1xuICAgICAgd2hpbGUgKGN1cnNvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICB0aGlzLnNob3dMYXRlcmFsWm9uZShjdXJzb3IpO1xuICAgICAgICAgZmluYWwgPSBjdXJzb3I7XG4gICAgICAgICBjdXJzb3IgPSBjdXJzb3IuYnJhbmNoZXMoKS5hdCgtMSk7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgICBmaW5hbCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAoZmluYWwgaW5zdGFuY2VvZiBUcmVlUm9vdCB8fCBmaW5hbCBpbnN0YW5jZW9mIFRyZWVCcmFuY2gpXG4gICAgICApIHtcbiAgICAgICAgIHRoaXMuc2hvd0lubmVyWm9uZShmaW5hbCk7XG4gICAgICB9XG4gICB9XG5cbiAgIHByaXZhdGUgbmVzdGluZ0FsbG93ZWQ8VD4odHJlZU5vZGU6IFRyZWVOb2RlPFQ+KTogYm9vbGVhbiB7XG4gICAgICBpZiAodHJlZU5vZGUgaW5zdGFuY2VvZiBUcmVlUm9vdCkge1xuICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBpZiAodHJlZU5vZGUgaW5zdGFuY2VvZiBUcmVlQnJhbmNoKSB7XG4gICAgICAgICBjb25zdCBhbGxvd05lc3RpbmcgPVxuICAgICAgICAgICAgY29uZmlnLmdldENvbmZpZyh0cmVlTm9kZS5yb290KCkpPy5kcmFnQW5kRHJvcD8uYWxsb3dOZXN0aW5nID8/XG4gICAgICAgICAgICAoKCk6IHRydWUgPT4gdHJ1ZSk7XG4gICAgICAgICByZXR1cm4gYWxsb3dOZXN0aW5nKHRyZWVOb2RlKTtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcihcInVuc3VwcG9ydGVkIHRyZWVOb2RlIHR5cGVcIik7XG4gICB9XG5cbiAgIHByaXZhdGUgZHJvcEFsbG93ZWQocGFyZW50OiB1bmtub3duLCBpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICBjb25zdCBzb3VyY2VOb2RlID0gZHJhZ1N0YXRlLmdldERyYWdEYXRhKCk7XG4gICAgICBhc3NlcnQoc291cmNlTm9kZSBpbnN0YW5jZW9mIFRyZWVCcmFuY2gpO1xuICAgICAgaWYgKHBhcmVudCBpbnN0YW5jZW9mIFRyZWVSb290KSB7XG4gICAgICAgICBjb25zdCBhbGxvd0Ryb3AgPVxuICAgICAgICAgICAgY29uZmlnLmdldENvbmZpZyhwYXJlbnQpPy5kcmFnQW5kRHJvcD8uYWxsb3dEcm9wID8/XG4gICAgICAgICAgICAoKCk6IHRydWUgPT4gdHJ1ZSk7XG4gICAgICAgICByZXR1cm4gYWxsb3dEcm9wKHNvdXJjZU5vZGUsIHBhcmVudCwgaW5kZXgpO1xuICAgICAgfVxuICAgICAgaWYgKHBhcmVudCBpbnN0YW5jZW9mIFRyZWVCcmFuY2gpIHtcbiAgICAgICAgIGNvbnN0IGFsbG93RHJvcCA9XG4gICAgICAgICAgICBjb25maWcuZ2V0Q29uZmlnKHBhcmVudC5yb290KCkpPy5kcmFnQW5kRHJvcD8uYWxsb3dEcm9wID8/XG4gICAgICAgICAgICAoKCk6IHRydWUgPT4gdHJ1ZSk7XG4gICAgICAgICByZXR1cm4gYWxsb3dEcm9wKHNvdXJjZU5vZGUsIHBhcmVudCwgaW5kZXgpO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgdHJlZU5vZGUgdHlwZVwiKTtcbiAgIH1cblxuICAgcHJpdmF0ZSBzaG93SW5uZXJab25lPFQ+KHRyZWVOb2RlOiBUcmVlTm9kZTxUPik6IHZvaWQge1xuICAgICAgaWYgKCF0aGlzLm5lc3RpbmdBbGxvd2VkKHRyZWVOb2RlKSB8fCAhdGhpcy5kcm9wQWxsb3dlZCh0cmVlTm9kZSwgMCkpXG4gICAgICAgICByZXR1cm47XG4gICAgICB0cmVlTm9kZS5nZXRDb21wb25lbnRJbnN0YW5jZSgpLnNob3dJbm5lckRyb3B6b25lID0gdHJ1ZTtcbiAgIH1cblxuICAgcHJpdmF0ZSBzaG93TGF0ZXJhbFpvbmU8VD4odHJlZUJyYW5jaDogVHJlZUJyYW5jaDxUPik6IHZvaWQge1xuICAgICAgY29uc3QgaW5kZXggPSB0cmVlQnJhbmNoLmluZGV4KCk7XG4gICAgICBhc3NlcnQoaW5kZXggIT09IHVuZGVmaW5lZCk7XG4gICAgICBpZiAoIXRoaXMuZHJvcEFsbG93ZWQodHJlZUJyYW5jaC5wYXJlbnQoKSwgaW5kZXggKyAxKSkgcmV0dXJuO1xuICAgICAgdHJlZUJyYW5jaC5nZXRDb21wb25lbnRJbnN0YW5jZSgpLnNob3dMYXRlcmFsRHJvcHpvbmUgPSB0cnVlO1xuICAgfVxufVxuXG5leHBvcnQgY29uc3QgZHJvcHpvbmVSZW5kZXJlciA9IG5ldyBEcm9wem9uZVJlbmRlcmVyKCk7XG4iXX0=