@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
@@ -0,0 +1,224 @@
1
+ import { assert } from "../../../shared/assert";
2
+ import { GraftEvent } from "../../events/relational/graft-event";
3
+ import { PruneEvent } from "../../events/relational/prune-event";
4
+ import { TreeNodeBase } from "../tree-node-base";
5
+ import { TreeError } from "../../errors/tree-error";
6
+ import { dropzoneRenderer } from "../../extras/drag-and-drop/dropzone-renderer";
7
+ import { config } from "../configuration/configuration";
8
+ import { TreeRoot } from "..";
9
+ import { treeCollapser } from "../../extras/collapse/collapse";
10
+ import { DestructionEvent } from "../../events/general";
11
+ import { BranchController } from "./branch-controller";
12
+ export class TreeBranch {
13
+ constructor(parent, branchOptions) {
14
+ this.branchOptions = branchOptions;
15
+ this.detachedView = null;
16
+ this.treeNodeBase = new TreeNodeBase();
17
+ const parentBranchesContainer = parent.getBranchesContainer();
18
+ assert(parentBranchesContainer !== undefined);
19
+ this.branchController = new BranchController(this, parentBranchesContainer);
20
+ this.setIndentation(parent);
21
+ if (parent instanceof TreeBranch &&
22
+ parent.branchOptions.defaultCollapsed === true) {
23
+ treeCollapser.storePrecollapsedNode(parent, this);
24
+ this.detachedView = this.branchController.getHostView();
25
+ }
26
+ else {
27
+ parentBranchesContainer.insert(this.branchController.getHostView());
28
+ this.detectChanges();
29
+ this._parent = parent;
30
+ this.dispatch(new GraftEvent(this, {
31
+ parent: this._parent,
32
+ child: this,
33
+ index: this._parent.branches().length
34
+ }));
35
+ }
36
+ }
37
+ branches() {
38
+ return this.treeNodeBase.branches();
39
+ }
40
+ destroy() {
41
+ if (this.isDestroyed()) {
42
+ throw new TreeError("Cannot destroy a destroyed tree branch");
43
+ }
44
+ this.prune();
45
+ treeCollapser.expand(this);
46
+ dropzoneRenderer.clearTreeFromRegistry(this);
47
+ this.branchController.getHostView().destroy();
48
+ this.treeNodeBase.destroy();
49
+ this.branchController.destroy();
50
+ this.dispatch(new DestructionEvent(this));
51
+ }
52
+ detectChanges() {
53
+ this.branchController.detectChanges();
54
+ }
55
+ dispatch(event) {
56
+ this.treeNodeBase.dispatch(event);
57
+ this._parent?.dispatch(event);
58
+ }
59
+ events() {
60
+ return this.treeNodeBase.events();
61
+ }
62
+ getBranch(index) {
63
+ return this.treeNodeBase.getBranch(index);
64
+ }
65
+ getBranchesContainer() {
66
+ if (this.isDestroyed()) {
67
+ throw new TreeError("Cannot get branches container from a destroyed tree branch");
68
+ }
69
+ return this.branchController.getBranchesContainer();
70
+ }
71
+ getComponentInstance() {
72
+ if (this.isDestroyed()) {
73
+ throw new TreeError("Cannot get component instance from a destroyed tree branch");
74
+ }
75
+ return this.branchController.getComponentInstance();
76
+ }
77
+ getHostView() {
78
+ if (this.isDestroyed()) {
79
+ throw new TreeError("Cannot get component host view from a destroyed tree branch");
80
+ }
81
+ return this.branchController.getHostView();
82
+ }
83
+ getNativeElement() {
84
+ if (this.isDestroyed()) {
85
+ throw new TreeError("Cannot get native element from a destroyed tree branch");
86
+ }
87
+ return this.branchController.getNativeElement();
88
+ }
89
+ getUserlandComponentRef() {
90
+ if (this.isDestroyed()) {
91
+ throw new TreeError("Cannot get userland component from a destroyed tree branch");
92
+ }
93
+ return this.branchController.getUserlandComponentRef();
94
+ }
95
+ graftTo(newParent, index) {
96
+ this.checkGraftLocationValidity(newParent, index);
97
+ const ownIndex = this.index();
98
+ if (ownIndex !== undefined) {
99
+ this.prune();
100
+ }
101
+ this._parent = newParent;
102
+ const newIndex = index ?? newParent.branches().length;
103
+ this.reattachView(newIndex);
104
+ this.dispatch(new GraftEvent(this, {
105
+ parent: newParent,
106
+ child: this,
107
+ index: newIndex
108
+ }));
109
+ return newIndex;
110
+ }
111
+ grow(component, options) {
112
+ if (this.isDestroyed()) {
113
+ throw new TreeError("Cannot grow a branch on a destroyed tree branch");
114
+ }
115
+ return new TreeBranch(this, { component, ...options });
116
+ }
117
+ index() {
118
+ if (!this._parent) {
119
+ return undefined;
120
+ }
121
+ const index = this._parent
122
+ .branches()
123
+ .findIndex((branch) => branch === this);
124
+ assert(index >= 0);
125
+ return index;
126
+ }
127
+ isDestroyed() {
128
+ return this.treeNodeBase.isDestroyed();
129
+ }
130
+ meta() {
131
+ return this.branchOptions.meta ?? {};
132
+ }
133
+ parent() {
134
+ return this._parent;
135
+ }
136
+ plot() {
137
+ return this.treeNodeBase.plot();
138
+ }
139
+ position() {
140
+ const index = this.index();
141
+ if (index === undefined) {
142
+ throw new TreeError("branch has no parent. Position cannot be determined.");
143
+ }
144
+ if (this._parent instanceof TreeBranch) {
145
+ const parentPosition = this._parent.position();
146
+ return [...parentPosition, index];
147
+ }
148
+ return [index];
149
+ }
150
+ prune() {
151
+ if (this.isDestroyed()) {
152
+ throw new TreeError("Cannot prune a destroyed tree branch");
153
+ }
154
+ const parent = this._parent;
155
+ const index = this.index();
156
+ if (index === undefined || parent === undefined)
157
+ return;
158
+ const container = parent.getBranchesContainer();
159
+ assert(container !== undefined);
160
+ this.detachedView = container.detach(index);
161
+ assert(this.detachedView !== null);
162
+ this.detachedView.detach();
163
+ this.dispatch(new PruneEvent(this, {
164
+ parent: parent,
165
+ child: this,
166
+ index: index
167
+ }));
168
+ this._parent = undefined;
169
+ return this;
170
+ }
171
+ root() {
172
+ const parent = this.parent();
173
+ if (parent instanceof TreeBranch) {
174
+ return parent.root();
175
+ }
176
+ assert(parent instanceof TreeRoot || parent === undefined);
177
+ return parent;
178
+ }
179
+ traverse(callback) {
180
+ callback(this);
181
+ this.treeNodeBase.traverse(callback);
182
+ }
183
+ checkGraftLocationValidity(newParent, index) {
184
+ if (this.isDestroyed()) {
185
+ throw new TreeError("Cannot graft a destroyed tree branch");
186
+ }
187
+ if (newParent.isDestroyed()) {
188
+ throw new TreeError("Cannot graft to a destroyed tree branch");
189
+ }
190
+ if (typeof index === "number" &&
191
+ this.indexIsOutOfRange(newParent, index)) {
192
+ throw new TreeError(`Cannot graft branch at index ${index} of the parent. Out of range.`);
193
+ }
194
+ this.traverse((node) => {
195
+ if (node === newParent) {
196
+ throw new TreeError("Cannot graft a branch to itself or any of its own descendants");
197
+ }
198
+ });
199
+ }
200
+ indexIsOutOfRange(parent, index) {
201
+ return index < 0 || index > parent.branches().length;
202
+ }
203
+ reattachView(index) {
204
+ assert(this._parent !== undefined);
205
+ assert(this.detachedView !== null);
206
+ const container = this._parent.getBranchesContainer();
207
+ assert(container !== undefined);
208
+ this.detachedView.reattach();
209
+ container.insert(this.detachedView, index);
210
+ this.detachedView = null;
211
+ }
212
+ setIndentation(parent) {
213
+ const root = parent.root();
214
+ assert(root !== undefined);
215
+ const options = config.getConfig(root);
216
+ const branchesContainerEl = this.branchController
217
+ .getNativeElement()
218
+ .getElementsByClassName("branches-container")
219
+ .item(0);
220
+ assert(branchesContainerEl instanceof HTMLElement);
221
+ branchesContainerEl.style.marginLeft = `${options?.indentation ?? 16}px`;
222
+ }
223
+ }
224
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1icmFuY2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saW1ibGUtdHJlZS9zcmMvbGliL2NvcmUvdHJlZS1icmFuY2gvdHJlZS1icmFuY2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBR2hELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNqRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFNakUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUVwRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUNoRixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDeEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLElBQUksQ0FBQztBQUM5QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDL0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFeEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFdkQsTUFBTSxPQUFPLFVBQVU7SUFlcEIsWUFDRyxNQUE4RCxFQUM5QyxhQUFtRDtRQUFuRCxrQkFBYSxHQUFiLGFBQWEsQ0FBc0M7UUFSOUQsaUJBQVksR0FBbUIsSUFBSSxDQUFDO1FBVXpDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUN2QyxNQUFNLHVCQUF1QixHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzlELE1BQU0sQ0FBQyx1QkFBdUIsS0FBSyxTQUFTLENBQUMsQ0FBQztRQUM5QyxJQUFJ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ZXJ0XCI7XG5pbXBvcnQgeyBUcmVlUGxvdCB9IGZyb20gXCIuLi8uLi9zdHJ1Y3R1cmUvdHJlZS1wbG90XCI7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IEdyYWZ0RXZlbnQgfSBmcm9tIFwiLi4vLi4vZXZlbnRzL3JlbGF0aW9uYWwvZ3JhZnQtZXZlbnRcIjtcbmltcG9ydCB7IFBydW5lRXZlbnQgfSBmcm9tIFwiLi4vLi4vZXZlbnRzL3JlbGF0aW9uYWwvcHJ1bmUtZXZlbnRcIjtcbmltcG9ydCB7IFRyZWVFdmVudCB9IGZyb20gXCIuLi8uLi9zdHJ1Y3R1cmUvdHJlZS1ldmVudC5pbnRlcmZhY2VcIjtcbmltcG9ydCB7IFRyZWVCcmFuY2hOb2RlIH0gZnJvbSBcIi4uLy4uL3N0cnVjdHVyZS90cmVlLWJyYW5jaC1ub2RlLmludGVyZmFjZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50UmVmLCBUeXBlLCBWaWV3Q29udGFpbmVyUmVmLCBWaWV3UmVmIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEJyYW5jaENvbXBvbmVudCB9IGZyb20gXCIuLi8uLi9jb21wb25lbnRzL2JyYW5jaC9icmFuY2guY29tcG9uZW50XCI7XG5pbXBvcnQgeyBOb2RlQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL2NvbXBvbmVudHMvbm9kZS1jb21wb25lbnQuaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBUcmVlTm9kZUJhc2UgfSBmcm9tIFwiLi4vdHJlZS1ub2RlLWJhc2VcIjtcbmltcG9ydCB7IFRyZWVFcnJvciB9IGZyb20gXCIuLi8uLi9lcnJvcnMvdHJlZS1lcnJvclwiO1xuaW1wb3J0IHsgQnJhbmNoT3B0aW9ucywgRnVsbEJyYW5jaE9wdGlvbnMgfSBmcm9tIFwiLi4vYnJhbmNoLW9wdGlvbnMuaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBkcm9wem9uZVJlbmRlcmVyIH0gZnJvbSBcIi4uLy4uL2V4dHJhcy9kcmFnLWFuZC1kcm9wL2Ryb3B6b25lLXJlbmRlcmVyXCI7XG5pbXBvcnQgeyBjb25maWcgfSBmcm9tIFwiLi4vY29uZmlndXJhdGlvbi9jb25maWd1cmF0aW9uXCI7XG5pbXBvcnQgeyBUcmVlUm9vdCB9IGZyb20gXCIuLlwiO1xuaW1wb3J0IHsgdHJlZUNvbGxhcHNlciB9IGZyb20gXCIuLi8uLi9leHRyYXMvY29sbGFwc2UvY29sbGFwc2VcIjtcbmltcG9ydCB7IERlc3RydWN0aW9uRXZlbnQgfSBmcm9tIFwiLi4vLi4vZXZlbnRzL2dlbmVyYWxcIjtcbmltcG9ydCB7IFRyZWVOb2RlIH0gZnJvbSBcIi4uLy4uL3N0cnVjdHVyZVwiO1xuaW1wb3J0IHsgQnJhbmNoQ29udHJvbGxlciB9IGZyb20gXCIuL2JyYW5jaC1jb250cm9sbGVyXCI7XG5cbmV4cG9ydCBjbGFzcyBUcmVlQnJhbmNoPFVzZXJsYW5kQ29tcG9uZW50PlxuICAgaW1wbGVtZW50c1xuICAgICAgVHJlZUJyYW5jaE5vZGU8XG4gICAgICAgICBCcmFuY2hDb21wb25lbnQ8VXNlcmxhbmRDb21wb25lbnQ+LFxuICAgICAgICAgVHJlZUJyYW5jaDxVc2VybGFuZENvbXBvbmVudD4sXG4gICAgICAgICBOb2RlQ29tcG9uZW50XG4gICAgICA+XG57XG4gICBwcml2YXRlIHJlYWRvbmx5IGJyYW5jaENvbnRyb2xsZXI6IEJyYW5jaENvbnRyb2xsZXI8VXNlcmxhbmRDb21wb25lbnQ+O1xuICAgcHJpdmF0ZSBkZXRhY2hlZFZpZXc6IFZpZXdSZWYgfCBudWxsID0gbnVsbDtcbiAgIHByaXZhdGUgX3BhcmVudDpcbiAgICAgIHwgVHJlZU5vZGU8VHJlZUJyYW5jaDxVc2VybGFuZENvbXBvbmVudD4sIE5vZGVDb21wb25lbnQ+XG4gICAgICB8IHVuZGVmaW5lZDtcbiAgIHByaXZhdGUgcmVhZG9ubHkgdHJlZU5vZGVCYXNlOiBUcmVlTm9kZUJhc2U8VXNlcmxhbmRDb21wb25lbnQ+O1xuXG4gICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICBwYXJlbnQ6IFRyZWVOb2RlPFRyZWVCcmFuY2g8VXNlcmxhbmRDb21wb25lbnQ+LCBOb2RlQ29tcG9uZW50PixcbiAgICAgIHB1YmxpYyByZWFkb25seSBicmFuY2hPcHRpb25zOiBGdWxsQnJhbmNoT3B0aW9uczxVc2VybGFuZENvbXBvbmVudD5cbiAgICkge1xuICAgICAgdGhpcy50cmVlTm9kZUJhc2UgPSBuZXcgVHJlZU5vZGVCYXNlKCk7XG4gICAgICBjb25zdCBwYXJlbnRCcmFuY2hlc0NvbnRhaW5lciA9IHBhcmVudC5nZXRCcmFuY2hlc0NvbnRhaW5lcigpO1xuICAgICAgYXNzZXJ0KHBhcmVudEJyYW5jaGVzQ29udGFpbmVyICE9PSB1bmRlZmluZWQpO1xuICAgICAgdGhpcy5icmFuY2hDb250cm9sbGVyID0gbmV3IEJyYW5jaENvbnRyb2xsZXIoXG4gICAgICAgICB0aGlzLFxuICAgICAgICAgcGFyZW50QnJhbmNoZXNDb250YWluZXJcbiAgICAgICk7XG4gICAgICB0aGlzLnNldEluZGVudGF0aW9uKHBhcmVudCk7XG4gICAgICBpZiAoXG4gICAgICAgICBwYXJlbnQgaW5zdGFuY2VvZiBUcmVlQnJhbmNoICYmXG4gICAgICAgICBwYXJlbnQuYnJhbmNoT3B0aW9ucy5kZWZhdWx0Q29sbGFwc2VkID09PSB0cnVlXG4gICAgICApIHtcbiAgICAgICAgIHRyZWVDb2xsYXBzZXIuc3RvcmVQcmVjb2xsYXBzZWROb2RlKHBhcmVudCwgdGhpcyk7XG4gICAgICAgICB0aGlzLmRldGFjaGVkVmlldyA9IHRoaXMuYnJhbmNoQ29udHJvbGxlci5nZXRIb3N0VmlldygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgIHBhcmVudEJyYW5jaGVzQ29udGFpbmVyLmluc2VydCh0aGlzLmJyYW5jaENvbnRyb2xsZXIuZ2V0SG9zdFZpZXcoKSk7XG4gICAgICAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgIHRoaXMuX3BhcmVudCA9IHBhcmVudDtcbiAgICAgICAgIHRoaXMuZGlzcGF0Y2goXG4gICAgICAgICAgICBuZXcgR3JhZnRFdmVudCh0aGlzLCB7XG4gICAgICAgICAgICAgICBwYXJlbnQ6IHRoaXMuX3BhcmVudCxcbiAgICAgICAgICAgICAgIGNoaWxkOiB0aGlzLFxuICAgICAgICAgICAgICAgaW5kZXg6IHRoaXMuX3BhcmVudC5icmFuY2hlcygpLmxlbmd0aFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICk7XG4gICAgICB9XG4gICB9XG5cbiAgIHB1YmxpYyBicmFuY2hlcygpOiBBcnJheTxUcmVlQnJhbmNoPFVzZXJsYW5kQ29tcG9uZW50Pj4ge1xuICAgICAgcmV0dXJuIHRoaXMudHJlZU5vZGVCYXNlLmJyYW5jaGVzKCk7XG4gICB9XG5cbiAgIHB1YmxpYyBkZXN0cm95KCk6IHZvaWQge1xuICAgICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQoKSkge1xuICAgICAgICAgdGhyb3cgbmV3IFRyZWVFcnJvcihcIkNhbm5vdCBkZXN0cm95IGEgZGVzdHJveWVkIHRyZWUgYnJhbmNoXCIpO1xuICAgICAgfVxuICAgICAgdGhpcy5wcnVuZSgpO1xuICAgICAgdHJlZUNvbGxhcHNlci5leHBhbmQodGhpcyk7XG4gICAgICBkcm9wem9uZVJlbmRlcmVyLmNsZWFyVHJlZUZyb21SZWdpc3RyeSh0aGlzKTtcbiAgICAgIHRoaXMuYnJhbmNoQ29udHJvbGxlci5nZXRIb3N0VmlldygpLmRlc3Ryb3koKTtcbiAgICAgIHRoaXMudHJlZU5vZGVCYXNlLmRlc3Ryb3koKTtcbiAgICAgIHRoaXMuYnJhbmNoQ29udHJvbGxlci5kZXN0cm95KCk7XG4gICAgICB0aGlzLmRpc3BhdGNoKG5ldyBEZXN0cnVjdGlvbkV2ZW50KHRoaXMpKTtcbiAgIH1cblxuICAgcHVibGljIGRldGVjdENoYW5nZXMoKTogdm9pZCB7XG4gICAgICB0aGlzLmJyYW5jaENvbnRyb2xsZXIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgfVxuXG4gICBwdWJsaWMgZGlzcGF0Y2goZXZlbnQ6IFRyZWVFdmVudCk6IHZvaWQge1xuICAgICAgdGhpcy50cmVlTm9kZUJhc2UuZGlzcGF0Y2goZXZlbnQpO1xuICAgICAgdGhpcy5fcGFyZW50Py5kaXNwYXRjaChldmVudCk7XG4gICB9XG5cbiAgIHB1YmxpYyBldmVudHMoKTogT2JzZXJ2YWJsZTxUcmVlRXZlbnQ+IHtcbiAgICAgIHJldHVybiB0aGlzLnRyZWVOb2RlQmFzZS5ldmVudHMoKTtcbiAgIH1cblxuICAgcHVibGljIGdldEJyYW5jaChpbmRleDogbnVtYmVyKTogVHJlZUJyYW5jaDxVc2VybGFuZENvbXBvbmVudD4gfCB1bmRlZmluZWQge1xuICAgICAgcmV0dXJuIHRoaXMudHJlZU5vZGVCYXNlLmdldEJyYW5jaChpbmRleCk7XG4gICB9XG5cbiAgIHB1YmxpYyBnZXRCcmFuY2hlc0NvbnRhaW5lcigpOiBWaWV3Q29udGFpbmVyUmVmIHwgdW5kZWZpbmVkIHtcbiAgICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKCkpIHtcbiAgICAgICAgIHRocm93IG5ldyBUcmVlRXJyb3IoXG4gICAgICAgICAgICBcIkNhbm5vdCBnZXQgYnJhbmNoZXMgY29udGFpbmVyIGZyb20gYSBkZXN0cm95ZWQgdHJlZSBicmFuY2hcIlxuICAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmJyYW5jaENvbnRyb2xsZXIuZ2V0QnJhbmNoZXNDb250YWluZXIoKTtcbiAgIH1cblxuICAgcHVibGljIGdldENvbXBvbmVudEluc3RhbmNlKCk6IEJyYW5jaENvbXBvbmVudDxVc2VybGFuZENvbXBvbmVudD4ge1xuICAgICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQoKSkge1xuICAgICAgICAgdGhyb3cgbmV3IFRyZWVFcnJvcihcbiAgICAgICAgICAgIFwiQ2Fubm90IGdldCBjb21wb25lbnQgaW5zdGFuY2UgZnJvbSBhIGRlc3Ryb3llZCB0cmVlIGJyYW5jaFwiXG4gICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuYnJhbmNoQ29udHJvbGxlci5nZXRDb21wb25lbnRJbnN0YW5jZSgpO1xuICAgfVxuXG4gICBwdWJsaWMgZ2V0SG9zdFZpZXcoKTogVmlld1JlZiB7XG4gICAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCgpKSB7XG4gICAgICAgICB0aHJvdyBuZXcgVHJlZUVycm9yKFxuICAgICAgICAgICAgXCJDYW5ub3QgZ2V0IGNvbXBvbmVudCBob3N0IHZpZXcgZnJvbSBhIGRlc3Ryb3llZCB0cmVlIGJyYW5jaFwiXG4gICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuYnJhbmNoQ29udHJvbGxlci5nZXRIb3N0VmlldygpO1xuICAgfVxuXG4gICBwdWJsaWMgZ2V0TmF0aXZlRWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCgpKSB7XG4gICAgICAgICB0aHJvdyBuZXcgVHJlZUVycm9yKFxuICAgICAgICAgICAgXCJDYW5ub3QgZ2V0IG5hdGl2ZSBlbGVtZW50IGZyb20gYSBkZXN0cm95ZWQgdHJlZSBicmFuY2hcIlxuICAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmJyYW5jaENvbnRyb2xsZXIuZ2V0TmF0aXZlRWxlbWVudCgpO1xuICAgfVxuXG4gICBwdWJsaWMgZ2V0VXNlcmxhbmRDb21wb25lbnRSZWYoKTpcbiAgICAgIHwgQ29tcG9uZW50UmVmPFVzZXJsYW5kQ29tcG9uZW50PlxuICAgICAgfCB1bmRlZmluZWQge1xuICAgICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQoKSkge1xuICAgICAgICAgdGhyb3cgbmV3IFRyZWVFcnJvcihcbiAgICAgICAgICAgIFwiQ2Fubm90IGdldCB1c2VybGFuZCBjb21wb25lbnQgZnJvbSBhIGRlc3Ryb3llZCB0cmVlIGJyYW5jaFwiXG4gICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuYnJhbmNoQ29udHJvbGxlci5nZXRVc2VybGFuZENvbXBvbmVudFJlZigpO1xuICAgfVxuXG4gICBwdWJsaWMgZ3JhZnRUbyhcbiAgICAgIG5ld1BhcmVudDogVHJlZU5vZGU8VHJlZUJyYW5jaDxVc2VybGFuZENvbXBvbmVudD4sIE5vZGVDb21wb25lbnQ+LFxuICAgICAgaW5kZXg/OiBudW1iZXJcbiAgICk6IG51bWJlciB7XG4gICAgICB0aGlzLmNoZWNrR3JhZnRMb2NhdGlvblZhbGlkaXR5KG5ld1BhcmVudCwgaW5kZXgpO1xuICAgICAgY29uc3Qgb3duSW5kZXggPSB0aGlzLmluZGV4KCk7XG4gICAgICBpZiAob3duSW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgdGhpcy5wcnVuZSgpO1xuICAgICAgfVxuICAgICAgdGhpcy5fcGFyZW50ID0gbmV3UGFyZW50O1xuICAgICAgY29uc3QgbmV3SW5kZXggPSBpbmRleCA/PyBuZXdQYXJlbnQuYnJhbmNoZXMoKS5sZW5ndGg7XG4gICAgICB0aGlzLnJlYXR0YWNoVmlldyhuZXdJbmRleCk7XG4gICAgICB0aGlzLmRpc3BhdGNoKFxuICAgICAgICAgbmV3IEdyYWZ0RXZlbnQodGhpcywge1xuICAgICAgICAgICAgcGFyZW50OiBuZXdQYXJlbnQsXG4gICAgICAgICAgICBjaGlsZDogdGhpcyxcbiAgICAgICAgICAgIGluZGV4OiBuZXdJbmRleFxuICAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICByZXR1cm4gbmV3SW5kZXg7XG4gICB9XG5cbiAgIHB1YmxpYyBncm93KFxuICAgICAgY29tcG9uZW50OiBUeXBlPFVzZXJsYW5kQ29tcG9uZW50PixcbiAgICAgIG9wdGlvbnM/OiBCcmFuY2hPcHRpb25zPFVzZXJsYW5kQ29tcG9uZW50PlxuICAgKTogVHJlZUJyYW5jaDxVc2VybGFuZENvbXBvbmVudD4ge1xuICAgICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQoKSkge1xuICAgICAgICAgdGhyb3cgbmV3IFRyZWVFcnJvcihcIkNhbm5vdCBncm93IGEgYnJhbmNoIG9uIGEgZGVzdHJveWVkIHRyZWUgYnJhbmNoXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBUcmVlQnJhbmNoKHRoaXMsIHsgY29tcG9uZW50LCAuLi5vcHRpb25zIH0pO1xuICAgfVxuXG4gICBwdWJsaWMgaW5kZXgoKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICAgIGlmICghdGhpcy5fcGFyZW50KSB7XG4gICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLl9wYXJlbnRcbiAgICAgICAgIC5icmFuY2hlcygpXG4gICAgICAgICAuZmluZEluZGV4KChicmFuY2gpID0+IGJyYW5jaCA9PT0gdGhpcyk7XG4gICAgICBhc3NlcnQoaW5kZXggPj0gMCk7XG4gICAgICByZXR1cm4gaW5kZXg7XG4gICB9XG5cbiAgIHB1YmxpYyBpc0Rlc3Ryb3llZCgpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiB0aGlzLnRyZWVOb2RlQmFzZS5pc0Rlc3Ryb3llZCgpO1xuICAgfVxuXG4gICBwdWJsaWMgbWV0YSgpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICAgIHJldHVybiB0aGlzLmJyYW5jaE9wdGlvbnMubWV0YSA/PyB7fTtcbiAgIH1cblxuICAgcHVibGljIHBhcmVudCgpOlxuICAgICAgfCBUcmVlTm9kZTxUcmVlQnJhbmNoPFVzZXJsYW5kQ29tcG9uZW50PiwgTm9kZUNvbXBvbmVudD5cbiAgICAgIHwgdW5kZWZpbmVkIHtcbiAgICAgIHJldHVybiB0aGlzLl9wYXJlbnQ7XG4gICB9XG5cbiAgIHB1YmxpYyBwbG90KCk6IFRyZWVQbG90IHtcbiAgICAgIHJldHVybiB0aGlzLnRyZWVOb2RlQmFzZS5wbG90KCk7XG4gICB9XG5cbiAgIHB1YmxpYyBwb3NpdGlvbigpOiBBcnJheTxudW1iZXI+IHtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5pbmRleCgpO1xuICAgICAgaWYgKGluZGV4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgIHRocm93IG5ldyBUcmVlRXJyb3IoXG4gICAgICAgICAgICBcImJyYW5jaCBoYXMgbm8gcGFyZW50LiBQb3NpdGlvbiBjYW5ub3QgYmUgZGV0ZXJtaW5lZC5cIlxuICAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9wYXJlbnQgaW5zdGFuY2VvZiBUcmVlQnJhbmNoKSB7XG4gICAgICAgICBjb25zdCBwYXJlbnRQb3NpdGlvbiA9IHRoaXMuX3BhcmVudC5wb3NpdGlvbigpO1xuICAgICAgICAgcmV0dXJuIFsuLi5wYXJlbnRQb3NpdGlvbiwgaW5kZXhdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFtpbmRleF07XG4gICB9XG5cbiAgIHB1YmxpYyBwcnVuZSgpOiB0aGlzIHwgdW5kZWZpbmVkIHtcbiAgICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKCkpIHtcbiAgICAgICAgIHRocm93IG5ldyBUcmVlRXJyb3IoXCJDYW5ub3QgcHJ1bmUgYSBkZXN0cm95ZWQgdHJlZSBicmFuY2hcIik7XG4gICAgICB9XG4gICAgICBjb25zdCBwYXJlbnQgPSB0aGlzLl9wYXJlbnQ7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuaW5kZXgoKTtcbiAgICAgIGlmIChpbmRleCA9PT0gdW5kZWZpbmVkIHx8IHBhcmVudCA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG4gICAgICBjb25zdCBjb250YWluZXIgPSBwYXJlbnQuZ2V0QnJhbmNoZXNDb250YWluZXIoKTtcbiAgICAgIGFzc2VydChjb250YWluZXIgIT09IHVuZGVmaW5lZCk7XG4gICAgICB0aGlzLmRldGFjaGVkVmlldyA9IGNvbnRhaW5lci5kZXRhY2goaW5kZXgpO1xuICAgICAgYXNzZXJ0KHRoaXMuZGV0YWNoZWRWaWV3ICE9PSBudWxsKTtcbiAgICAgIHRoaXMuZGV0YWNoZWRWaWV3LmRldGFjaCgpO1xuICAgICAgdGhpcy5kaXNwYXRjaChcbiAgICAgICAgIG5ldyBQcnVuZUV2ZW50KHRoaXMsIHtcbiAgICAgICAgICAgIHBhcmVudDogcGFyZW50LFxuICAgICAgICAgICAgY2hpbGQ6IHRoaXMsXG4gICAgICAgICAgICBpbmRleDogaW5kZXhcbiAgICAgICAgIH0pXG4gICAgICApO1xuICAgICAgdGhpcy5fcGFyZW50ID0gdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICB9XG5cbiAgIHB1YmxpYyByb290KCk6IFRyZWVSb290PFVzZXJsYW5kQ29tcG9uZW50PiB8IHVuZGVmaW5lZCB7XG4gICAgICBjb25zdCBwYXJlbnQgPSB0aGlzLnBhcmVudCgpO1xuICAgICAgaWYgKHBhcmVudCBpbnN0YW5jZW9mIFRyZWVCcmFuY2gpIHtcbiAgICAgICAgIHJldHVybiBwYXJlbnQucm9vdCgpO1xuICAgICAgfVxuICAgICAgYXNzZXJ0KHBhcmVudCBpbnN0YW5jZW9mIFRyZWVSb290IHx8IHBhcmVudCA9PT0gdW5kZWZpbmVkKTtcbiAgICAgIHJldHVybiBwYXJlbnQ7XG4gICB9XG5cbiAgIHB1YmxpYyB0cmF2ZXJzZShcbiAgICAgIGNhbGxiYWNrOiAoXG4gICAgICAgICBub2RlOiBUcmVlTm9kZTxUcmVlQnJhbmNoPFVzZXJsYW5kQ29tcG9uZW50PiwgTm9kZUNvbXBvbmVudD5cbiAgICAgICkgPT4gdm9pZFxuICAgKTogdm9pZCB7XG4gICAgICBjYWxsYmFjayh0aGlzKTtcbiAgICAgIHRoaXMudHJlZU5vZGVCYXNlLnRyYXZlcnNlKGNhbGxiYWNrKTtcbiAgIH1cblxuICAgcHJpdmF0ZSBjaGVja0dyYWZ0TG9jYXRpb25WYWxpZGl0eShcbiAgICAgIG5ld1BhcmVudDogVHJlZU5vZGU8VHJlZUJyYW5jaDxVc2VybGFuZENvbXBvbmVudD4sIE5vZGVDb21wb25lbnQ+LFxuICAgICAgaW5kZXg/OiBudW1iZXJcbiAgICk6IHZvaWQge1xuICAgICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQoKSkge1xuICAgICAgICAgdGhyb3cgbmV3IFRyZWVFcnJvcihcIkNhbm5vdCBncmFmdCBhIGRlc3Ryb3llZCB0cmVlIGJyYW5jaFwiKTtcbiAgICAgIH1cbiAgICAgIGlmIChuZXdQYXJlbnQuaXNEZXN0cm95ZWQoKSkge1xuICAgICAgICAgdGhyb3cgbmV3IFRyZWVFcnJvcihcIkNhbm5vdCBncmFmdCB0byBhIGRlc3Ryb3llZCB0cmVlIGJyYW5jaFwiKTtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgIHR5cGVvZiBpbmRleCA9PT0gXCJudW1iZXJcIiAmJlxuICAgICAgICAgdGhpcy5pbmRleElzT3V0T2ZSYW5nZShuZXdQYXJlbnQsIGluZGV4KVxuICAgICAgKSB7XG4gICAgICAgICB0aHJvdyBuZXcgVHJlZUVycm9yKFxuICAgICAgICAgICAgYENhbm5vdCBncmFmdCBicmFuY2ggYXQgaW5kZXggJHtpbmRleH0gb2YgdGhlIHBhcmVudC4gT3V0IG9mIHJhbmdlLmBcbiAgICAgICAgICk7XG4gICAgICB9XG4gICAgICB0aGlzLnRyYXZlcnNlKChub2RlKSA9PiB7XG4gICAgICAgICBpZiAobm9kZSA9PT0gbmV3UGFyZW50KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHJlZUVycm9yKFxuICAgICAgICAgICAgICAgXCJDYW5ub3QgZ3JhZnQgYSBicmFuY2ggdG8gaXRzZWxmIG9yIGFueSBvZiBpdHMgb3duIGRlc2NlbmRhbnRzXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICB9XG4gICAgICB9KTtcbiAgIH1cblxuICAgcHJpdmF0ZSBpbmRleElzT3V0T2ZSYW5nZShcbiAgICAgIHBhcmVudDogVHJlZU5vZGU8VHJlZUJyYW5jaDxVc2VybGFuZENvbXBvbmVudD4sIE5vZGVDb21wb25lbnQ+LFxuICAgICAgaW5kZXg6IG51bWJlclxuICAgKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gaW5kZXggPCAwIHx8IGluZGV4ID4gcGFyZW50LmJyYW5jaGVzKCkubGVuZ3RoO1xuICAgfVxuXG4gICBwcml2YXRlIHJlYXR0YWNoVmlldyhpbmRleD86IG51bWJlcik6IHZvaWQge1xuICAgICAgYXNzZXJ0KHRoaXMuX3BhcmVudCAhPT0gdW5kZWZpbmVkKTtcbiAgICAgIGFzc2VydCh0aGlzLmRldGFjaGVkVmlldyAhPT0gbnVsbCk7XG4gICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLl9wYXJlbnQuZ2V0QnJhbmNoZXNDb250YWluZXIoKTtcbiAgICAgIGFzc2VydChjb250YWluZXIgIT09IHVuZGVmaW5lZCk7XG4gICAgICB0aGlzLmRldGFjaGVkVmlldy5yZWF0dGFjaCgpO1xuICAgICAgY29udGFpbmVyLmluc2VydCh0aGlzLmRldGFjaGVkVmlldywgaW5kZXgpO1xuICAgICAgdGhpcy5kZXRhY2hlZFZpZXcgPSBudWxsO1xuICAgfVxuXG4gICBwcml2YXRlIHNldEluZGVudGF0aW9uKFxuICAgICAgcGFyZW50OiBUcmVlTm9kZTxUcmVlQnJhbmNoPFVzZXJsYW5kQ29tcG9uZW50PiwgTm9kZUNvbXBvbmVudD5cbiAgICk6IHZvaWQge1xuICAgICAgY29uc3Qgcm9vdCA9IHBhcmVudC5yb290KCk7XG4gICAgICBhc3NlcnQocm9vdCAhPT0gdW5kZWZpbmVkKTtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSBjb25maWcuZ2V0Q29uZmlnKHJvb3QpO1xuICAgICAgY29uc3QgYnJhbmNoZXNDb250YWluZXJFbCA9IHRoaXMuYnJhbmNoQ29udHJvbGxlclxuICAgICAgICAgLmdldE5hdGl2ZUVsZW1lbnQoKVxuICAgICAgICAgLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJicmFuY2hlcy1jb250YWluZXJcIilcbiAgICAgICAgIC5pdGVtKDApO1xuICAgICAgYXNzZXJ0KGJyYW5jaGVzQ29udGFpbmVyRWwgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCk7XG4gICAgICBicmFuY2hlc0NvbnRhaW5lckVsLnN0eWxlLm1hcmdpbkxlZnQgPSBgJHtvcHRpb25zPy5pbmRlbnRhdGlvbiA/PyAxNn1weGA7XG4gICB9XG59XG4iXX0=
@@ -0,0 +1,69 @@
1
+ import { filter, Subject } from "rxjs";
2
+ import { TreeError } from "../errors";
3
+ import { GraftEvent } from "../events/relational/graft-event";
4
+ import { PruneEvent } from "../events/relational/prune-event";
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
+ isDestroyed() {
41
+ return this.destroyed;
42
+ }
43
+ plot() {
44
+ return new Map(this.branches().map((branch, index) => [index, branch.plot()]));
45
+ }
46
+ traverse(callback) {
47
+ this.branches().forEach((branch) => {
48
+ branch.traverse(callback);
49
+ });
50
+ }
51
+ deregisterChildRelationship(child) {
52
+ const index = this.branches().findIndex((branch) => branch === child);
53
+ this._branches.splice(index, 1);
54
+ }
55
+ graftsToSelf() {
56
+ return this.events().pipe(filter((event) => event instanceof GraftEvent), filter((event) => event.parent().events() === this.events$));
57
+ }
58
+ prunesToSelf() {
59
+ return this.events().pipe(filter((event) => event instanceof PruneEvent), filter((event) => event.parent().events() === this.events$));
60
+ }
61
+ registerChildRelationship(child, index) {
62
+ const branches = this.branches();
63
+ if (index < 0 || index > branches.length) {
64
+ throw new TreeError(`Can't register child at index ${index}. Out of range.`);
65
+ }
66
+ this._branches.splice(index, 0, child);
67
+ }
68
+ }
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1ub2RlLWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saW1ibGUtdHJlZS9zcmMvbGliL2NvcmUvdHJlZS1ub2RlLWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBYyxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBRWpFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDdEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzlELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQU85RCxNQUFNLE9BQU8sWUFBWTtJQVF0QjtRQUhRLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFJaEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxhQUFhLEdBQUc7WUFDbEIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUNyQyxJQUFJLENBQUMseUJBQXlCLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQ2hFLENBQUMsQ0FBQztZQUNGLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDckMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQ25ELENBQUMsQ0FBQztTQUNKLENBQUM7SUFDTCxDQUFDO0lBRU0sUUFBUTtRQUNaLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRU0sT0FBTztRQUNYLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNoQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDcEIsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ2hDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNyQixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0lBQ3pCLENBQUM7SUFFTSxRQUFRLENBQUMsS0FBZ0I7UUFDN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVNLE1BQU07UUFDVixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdkIsQ0FBQztJQUVNLFNBQVMsQ0FBQyxLQUFhO1FBQzNCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRU0sV0FBVztRQUNmLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN6QixDQUFDO0lBRU0sSUFBSTtRQUNSLE9BQU8sSUFBSSxHQUFHLENBQ1gsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQ2hFLENBQUM7SUFDTCxDQUFDO0lBRU0sUUFBUSxDQUNaLFFBRVM7UUFFVCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDaEMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFTywyQkFBMkIsQ0FDaEMsS0FBb0M7UUFFcEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxLQUFLLEtBQUssQ0FBQyxDQUFDO1FBQ3RFLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRU8sWUFBWTtRQUdqQixPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQ3RCLE1BQU0sQ0FDSCxDQUFDLEtBQUssRUFBd0QsRUFBRSxDQUM3RCxLQUFLLFlBQVksVUFBVSxDQUNoQyxFQUNELE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sRUFBRSxLQUFLLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FDN0QsQ0FBQztJQUNMLENBQUM7SUFFTyxZQUFZO1FBR2pCLE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FDdEIsTUFBTSxDQUNILENBQUMsS0FBSyxFQUF3RCxFQUFFLENBQzdELEtBQUssWUFBWSxVQUFVLENBQ2hDLEVBQ0QsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxFQUFFLEtBQUssSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUM3RCxDQUFDO0lBQ0wsQ0FBQztJQUVPLHlCQUF5QixDQUM5QixLQUFvQyxFQUNwQyxLQUFhO1FBRWIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pDLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxLQUFLLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRTtZQUN2QyxNQUFNLElBQUksU0FBUyxDQUNoQixpQ0FBaUMsS0FBSyxpQkFBaUIsQ0FDekQsQ0FBQztTQUNKO1FBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMxQyxDQUFDO0NBQ0giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmaWx0ZXIsIE9ic2VydmFibGUsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBOb2RlQ29tcG9uZW50IH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvbm9kZS1jb21wb25lbnQuaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBUcmVlRXJyb3IgfSBmcm9tIFwiLi4vZXJyb3JzXCI7XG5pbXBvcnQgeyBHcmFmdEV2ZW50IH0gZnJvbSBcIi4uL2V2ZW50cy9yZWxhdGlvbmFsL2dyYWZ0LWV2ZW50XCI7XG5pbXBvcnQgeyBQcnVuZUV2ZW50IH0gZnJvbSBcIi4uL2V2ZW50cy9yZWxhdGlvbmFsL3BydW5lLWV2ZW50XCI7XG5pbXBvcnQgeyBUcmVlRXZlbnQgfSBmcm9tIFwiLi4vc3RydWN0dXJlL3RyZWUtZXZlbnQuaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBUcmVlTm9kZSB9IGZyb20gXCIuLi9zdHJ1Y3R1cmUvdHJlZS1ub2RlLmludGVyZmFjZVwiO1xuaW1wb3J0IHsgVHJlZVBsb3QgfSBmcm9tIFwiLi4vc3RydWN0dXJlL3RyZWUtcGxvdFwiO1xuaW1wb3J0IHsgUmVsYXRpb25zaGlwIH0gZnJvbSBcIi4vcmVsYXRpb25zaGlwLmludGVyZmFjZVwiO1xuaW1wb3J0IHsgVHJlZUJyYW5jaCB9IGZyb20gXCIuL3RyZWUtYnJhbmNoL3RyZWUtYnJhbmNoXCI7XG5cbmV4cG9ydCBjbGFzcyBUcmVlTm9kZUJhc2U8VXNlcmxhbmRDb21wb25lbnQ+XG4gICBpbXBsZW1lbnRzIFBhcnRpYWw8VHJlZU5vZGU8VHJlZUJyYW5jaDxVc2VybGFuZENvbXBvbmVudD4sIE5vZGVDb21wb25lbnQ+Plxue1xuICAgcHJpdmF0ZSByZWFkb25seSBfYnJhbmNoZXM6IEFycmF5PFRyZWVCcmFuY2g8VXNlcmxhbmRDb21wb25lbnQ+PjtcbiAgIHByaXZhdGUgcmVhZG9ubHkgZXZlbnRzJDogU3ViamVjdDxUcmVlRXZlbnQ+O1xuICAgcHJpdmF0ZSBkZXN0cm95ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgIHByaXZhdGUgcmVhZG9ubHkgc3Vic2NyaXB0aW9uczogQXJyYXk8U3Vic2NyaXB0aW9uPjtcblxuICAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgICAgdGhpcy5fYnJhbmNoZXMgPSBbXTtcbiAgICAgIHRoaXMuZXZlbnRzJCA9IG5ldyBTdWJqZWN0KCk7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMgPSBbXG4gICAgICAgICB0aGlzLmdyYWZ0c1RvU2VsZigpLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJDaGlsZFJlbGF0aW9uc2hpcChldmVudC5jaGlsZCgpLCBldmVudC5pbmRleCgpKTtcbiAgICAgICAgIH0pLFxuICAgICAgICAgdGhpcy5wcnVuZXNUb1NlbGYoKS5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRlcmVnaXN0ZXJDaGlsZFJlbGF0aW9uc2hpcChldmVudC5jaGlsZCgpKTtcbiAgICAgICAgIH0pXG4gICAgICBdO1xuICAgfVxuXG4gICBwdWJsaWMgYnJhbmNoZXMoKTogQXJyYXk8VHJlZUJyYW5jaDxVc2VybGFuZENvbXBvbmVudD4+IHtcbiAgICAgIHJldHVybiBbLi4udGhpcy5fYnJhbmNoZXNdO1xuICAgfVxuXG4gICBwdWJsaWMgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAgIHRoaXMuYnJhbmNoZXMoKS5mb3JFYWNoKChicmFuY2gpID0+IHtcbiAgICAgICAgIGJyYW5jaC5kZXN0cm95KCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKChzdWIpID0+IHtcbiAgICAgICAgIHN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmRlc3Ryb3llZCA9IHRydWU7XG4gICB9XG5cbiAgIHB1YmxpYyBkaXNwYXRjaChldmVudDogVHJlZUV2ZW50KTogdm9pZCB7XG4gICAgICB0aGlzLmV2ZW50cyQubmV4dChldmVudCk7XG4gICB9XG5cbiAgIHB1YmxpYyBldmVudHMoKTogT2JzZXJ2YWJsZTxUcmVlRXZlbnQ+IHtcbiAgICAgIHJldHVybiB0aGlzLmV2ZW50cyQ7XG4gICB9XG5cbiAgIHB1YmxpYyBnZXRCcmFuY2goaW5kZXg6IG51bWJlcik6IFRyZWVCcmFuY2g8VXNlcmxhbmRDb21wb25lbnQ+IHwgdW5kZWZpbmVkIHtcbiAgICAgIHJldHVybiB0aGlzLl9icmFuY2hlc1tpbmRleF07XG4gICB9XG5cbiAgIHB1YmxpYyBpc0Rlc3Ryb3llZCgpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiB0aGlzLmRlc3Ryb3llZDtcbiAgIH1cblxuICAgcHVibGljIHBsb3QoKTogVHJlZVBsb3Qge1xuICAgICAgcmV0dXJuIG5ldyBNYXAoXG4gICAgICAgICB0aGlzLmJyYW5jaGVzKCkubWFwKChicmFuY2gsIGluZGV4KSA9PiBbaW5kZXgsIGJyYW5jaC5wbG90KCldKVxuICAgICAgKTtcbiAgIH1cblxuICAgcHVibGljIHRyYXZlcnNlKFxuICAgICAgY2FsbGJhY2s6IChcbiAgICAgICAgIG5vZGU6IFRyZWVOb2RlPFRyZWVCcmFuY2g8VXNlcmxhbmRDb21wb25lbnQ+LCBOb2RlQ29tcG9uZW50PlxuICAgICAgKSA9PiB2b2lkXG4gICApOiB2b2lkIHtcbiAgICAgIHRoaXMuYnJhbmNoZXMoKS5mb3JFYWNoKChicmFuY2gpID0+IHtcbiAgICAgICAgIGJyYW5jaC50cmF2ZXJzZShjYWxsYmFjayk7XG4gICAgICB9KTtcbiAgIH1cblxuICAgcHJpdmF0ZSBkZXJlZ2lzdGVyQ2hpbGRSZWxhdGlvbnNoaXAoXG4gICAgICBjaGlsZDogVHJlZUJyYW5jaDxVc2VybGFuZENvbXBvbmVudD5cbiAgICk6IHZvaWQge1xuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmJyYW5jaGVzKCkuZmluZEluZGV4KChicmFuY2gpID0+IGJyYW5jaCA9PT0gY2hpbGQpO1xuICAgICAgdGhpcy5fYnJhbmNoZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgIH1cblxuICAgcHJpdmF0ZSBncmFmdHNUb1NlbGYoKTogT2JzZXJ2YWJsZTxcbiAgICAgIEdyYWZ0RXZlbnQ8UmVsYXRpb25zaGlwPFVzZXJsYW5kQ29tcG9uZW50Pj5cbiAgID4ge1xuICAgICAgcmV0dXJuIHRoaXMuZXZlbnRzKCkucGlwZShcbiAgICAgICAgIGZpbHRlcihcbiAgICAgICAgICAgIChldmVudCk6IGV2ZW50IGlzIEdyYWZ0RXZlbnQ8UmVsYXRpb25zaGlwPFVzZXJsYW5kQ29tcG9uZW50Pj4gPT5cbiAgICAgICAgICAgICAgIGV2ZW50IGluc3RhbmNlb2YgR3JhZnRFdmVudFxuICAgICAgICAgKSxcbiAgICAgICAgIGZpbHRlcigoZXZlbnQpID0+IGV2ZW50LnBhcmVudCgpLmV2ZW50cygpID09PSB0aGlzLmV2ZW50cyQpXG4gICAgICApO1xuICAgfVxuXG4gICBwcml2YXRlIHBydW5lc1RvU2VsZigpOiBPYnNlcnZhYmxlPFxuICAgICAgUHJ1bmVFdmVudDxSZWxhdGlvbnNoaXA8VXNlcmxhbmRDb21wb25lbnQ+PlxuICAgPiB7XG4gICAgICByZXR1cm4gdGhpcy5ldmVudHMoKS5waXBlKFxuICAgICAgICAgZmlsdGVyKFxuICAgICAgICAgICAgKGV2ZW50KTogZXZlbnQgaXMgUHJ1bmVFdmVudDxSZWxhdGlvbnNoaXA8VXNlcmxhbmRDb21wb25lbnQ+PiA9PlxuICAgICAgICAgICAgICAgZXZlbnQgaW5zdGFuY2VvZiBQcnVuZUV2ZW50XG4gICAgICAgICApLFxuICAgICAgICAgZmlsdGVyKChldmVudCkgPT4gZXZlbnQucGFyZW50KCkuZXZlbnRzKCkgPT09IHRoaXMuZXZlbnRzJClcbiAgICAgICk7XG4gICB9XG5cbiAgIHByaXZhdGUgcmVnaXN0ZXJDaGlsZFJlbGF0aW9uc2hpcChcbiAgICAgIGNoaWxkOiBUcmVlQnJhbmNoPFVzZXJsYW5kQ29tcG9uZW50PixcbiAgICAgIGluZGV4OiBudW1iZXJcbiAgICk6IHZvaWQge1xuICAgICAgY29uc3QgYnJhbmNoZXMgPSB0aGlzLmJyYW5jaGVzKCk7XG4gICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID4gYnJhbmNoZXMubGVuZ3RoKSB7XG4gICAgICAgICB0aHJvdyBuZXcgVHJlZUVycm9yKFxuICAgICAgICAgICAgYENhbid0IHJlZ2lzdGVyIGNoaWxkIGF0IGluZGV4ICR7aW5kZXh9LiBPdXQgb2YgcmFuZ2UuYFxuICAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2JyYW5jaGVzLnNwbGljZShpbmRleCwgMCwgY2hpbGQpO1xuICAgfVxufVxuIl19
@@ -0,0 +1,42 @@
1
+ import { assert } from "../../../shared/assert";
2
+ import { RootComponent } from "../../components/root/root.component";
3
+ import { dropzoneRenderer } from "../../extras/drag-and-drop/dropzone-renderer";
4
+ /**
5
+ * A wrapper around the BranchComponent that helps instantiate it and handles its events.
6
+ */
7
+ export class RootController {
8
+ constructor(treeRoot, viewContainerRef) {
9
+ this.treeRoot = treeRoot;
10
+ this.rootComponentRef = viewContainerRef.createComponent(RootComponent);
11
+ const viewInitSub = this.rootComponentRef.instance.afterViewInit.subscribe(() => {
12
+ const dropzone = this.rootComponentRef.instance.dropzone;
13
+ assert(dropzone !== undefined);
14
+ dropzoneRenderer.registerDropzone(dropzone, this.treeRoot);
15
+ });
16
+ const droppedSub = this.rootComponentRef.instance.dropped.subscribe(() => {
17
+ dropzoneRenderer.handleDrop(this.treeRoot, "inner");
18
+ });
19
+ this.instanceSubscriptions = [viewInitSub, droppedSub];
20
+ }
21
+ destroy() {
22
+ this.instanceSubscriptions.forEach((sub) => {
23
+ sub.unsubscribe();
24
+ });
25
+ }
26
+ detectChanges() {
27
+ this.rootComponentRef.changeDetectorRef.detectChanges();
28
+ }
29
+ getBranchesContainer() {
30
+ return this.rootComponentRef.instance.branchesContainer;
31
+ }
32
+ getComponentInstance() {
33
+ return this.rootComponentRef.instance;
34
+ }
35
+ getHostView() {
36
+ return this.rootComponentRef.hostView;
37
+ }
38
+ getNativeElement() {
39
+ return this.rootComponentRef.location.nativeElement;
40
+ }
41
+ }
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9vdC1jb250cm9sbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbGltYmxlLXRyZWUvc3JjL2xpYi9jb3JlL3RyZWUtcm9vdC9yb290LWNvbnRyb2xsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRWhELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUloRjs7R0FFRztBQUNILE1BQU0sT0FBTyxjQUFjO0lBSXhCLFlBQ29CLFFBQXFCLEVBQ3RDLGdCQUFrQztRQURqQixhQUFRLEdBQVIsUUFBUSxDQUFhO1FBR3RDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDeEUsTUFBTSxXQUFXLEdBQ2QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUN6RCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztZQUN6RCxNQUFNLENBQUMsUUFBUSxLQUFLLFNBQVMsQ0FBQyxDQUFDO1lBQy9CLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDOUQsQ0FBQyxDQUFDLENBQUM7UUFDTixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQ2hFLEdBQUcsRUFBRTtZQUNGLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZELENBQUMsQ0FDSCxDQUFDO1FBQ0YsSUFBSSxDQUFDLHFCQUFxQixHQUFHLENBQUMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFTSxPQUFPO1FBQ1gsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ3hDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNyQixDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFTSxhQUFhO1FBQ2pCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMzRCxDQUFDO0lBRU0sb0JBQW9CO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQztJQUMzRCxDQUFDO0lBRU0sb0JBQW9CO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQztJQUN6QyxDQUFDO0lBRU0sV0FBVztRQUNmLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQztJQUN6QyxDQUFDO0lBRU0sZ0JBQWdCO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUM7SUFDdkQsQ0FBQztDQUNIIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50UmVmLCBWaWV3Q29udGFpbmVyUmVmLCBWaWV3UmVmIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IGFzc2VydCB9IGZyb20gXCIuLi8uLi8uLi9zaGFyZWQvYXNzZXJ0XCI7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgUm9vdENvbXBvbmVudCB9IGZyb20gXCIuLi8uLi9jb21wb25lbnRzL3Jvb3Qvcm9vdC5jb21wb25lbnRcIjtcbmltcG9ydCB7IGRyb3B6b25lUmVuZGVyZXIgfSBmcm9tIFwiLi4vLi4vZXh0cmFzL2RyYWctYW5kLWRyb3AvZHJvcHpvbmUtcmVuZGVyZXJcIjtcbmltcG9ydCB7IENvbXBvbmVudENvbnRhaW5lciB9IGZyb20gXCIuLi8uLi9zdHJ1Y3R1cmVcIjtcbmltcG9ydCB7IFRyZWVSb290IH0gZnJvbSBcIi4vdHJlZS1yb290XCI7XG5cbi8qKlxuICogQSB3cmFwcGVyIGFyb3VuZCB0aGUgQnJhbmNoQ29tcG9uZW50IHRoYXQgaGVscHMgaW5zdGFudGlhdGUgaXQgYW5kIGhhbmRsZXMgaXRzIGV2ZW50cy5cbiAqL1xuZXhwb3J0IGNsYXNzIFJvb3RDb250cm9sbGVyPFQ+IGltcGxlbWVudHMgQ29tcG9uZW50Q29udGFpbmVyPFJvb3RDb21wb25lbnQ+IHtcbiAgIHByaXZhdGUgcmVhZG9ubHkgcm9vdENvbXBvbmVudFJlZjogQ29tcG9uZW50UmVmPFJvb3RDb21wb25lbnQ+O1xuICAgcHJpdmF0ZSByZWFkb25seSBpbnN0YW5jZVN1YnNjcmlwdGlvbnM6IEFycmF5PFN1YnNjcmlwdGlvbj47XG5cbiAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgIHByaXZhdGUgcmVhZG9ubHkgdHJlZVJvb3Q6IFRyZWVSb290PFQ+LFxuICAgICAgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZlxuICAgKSB7XG4gICAgICB0aGlzLnJvb3RDb21wb25lbnRSZWYgPSB2aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChSb290Q29tcG9uZW50KTtcbiAgICAgIGNvbnN0IHZpZXdJbml0U3ViID1cbiAgICAgICAgIHRoaXMucm9vdENvbXBvbmVudFJlZi5pbnN0YW5jZS5hZnRlclZpZXdJbml0LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkcm9wem9uZSA9IHRoaXMucm9vdENvbXBvbmVudFJlZi5pbnN0YW5jZS5kcm9wem9uZTtcbiAgICAgICAgICAgIGFzc2VydChkcm9wem9uZSAhPT0gdW5kZWZpbmVkKTtcbiAgICAgICAgICAgIGRyb3B6b25lUmVuZGVyZXIucmVnaXN0ZXJEcm9wem9uZShkcm9wem9uZSwgdGhpcy50cmVlUm9vdCk7XG4gICAgICAgICB9KTtcbiAgICAgIGNvbnN0IGRyb3BwZWRTdWIgPSB0aGlzLnJvb3RDb21wb25lbnRSZWYuaW5zdGFuY2UuZHJvcHBlZC5zdWJzY3JpYmUoXG4gICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICBkcm9wem9uZVJlbmRlcmVyLmhhbmRsZURyb3AodGhpcy50cmVlUm9vdCwgXCJpbm5lclwiKTtcbiAgICAgICAgIH1cbiAgICAgICk7XG4gICAgICB0aGlzLmluc3RhbmNlU3Vic2NyaXB0aW9ucyA9IFt2aWV3SW5pdFN1YiwgZHJvcHBlZFN1Yl07XG4gICB9XG5cbiAgIHB1YmxpYyBkZXN0cm95KCk6IHZvaWQge1xuICAgICAgdGhpcy5pbnN0YW5jZVN1YnNjcmlwdGlvbnMuZm9yRWFjaCgoc3ViKSA9PiB7XG4gICAgICAgICBzdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgIH0pO1xuICAgfVxuXG4gICBwdWJsaWMgZGV0ZWN0Q2hhbmdlcygpOiB2b2lkIHtcbiAgICAgIHRoaXMucm9vdENvbXBvbmVudFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICB9XG5cbiAgIHB1YmxpYyBnZXRCcmFuY2hlc0NvbnRhaW5lcigpOiBWaWV3Q29udGFpbmVyUmVmIHwgdW5kZWZpbmVkIHtcbiAgICAgIHJldHVybiB0aGlzLnJvb3RDb21wb25lbnRSZWYuaW5zdGFuY2UuYnJhbmNoZXNDb250YWluZXI7XG4gICB9XG5cbiAgIHB1YmxpYyBnZXRDb21wb25lbnRJbnN0YW5jZSgpOiBSb290Q29tcG9uZW50IHtcbiAgICAgIHJldHVybiB0aGlzLnJvb3RDb21wb25lbnRSZWYuaW5zdGFuY2U7XG4gICB9XG5cbiAgIHB1YmxpYyBnZXRIb3N0VmlldygpOiBWaWV3UmVmIHtcbiAgICAgIHJldHVybiB0aGlzLnJvb3RDb21wb25lbnRSZWYuaG9zdFZpZXc7XG4gICB9XG5cbiAgIHB1YmxpYyBnZXROYXRpdmVFbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICAgIHJldHVybiB0aGlzLnJvb3RDb21wb25lbnRSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudDtcbiAgIH1cbn1cbiJdfQ==
@@ -0,0 +1,85 @@
1
+ import { TreeBranch } from "../tree-branch/tree-branch";
2
+ import { TreeNodeBase } from "../tree-node-base";
3
+ import { dropzoneRenderer } from "../../extras/drag-and-drop/dropzone-renderer";
4
+ import { config } from "../configuration/configuration";
5
+ import { TreeError } from "../../errors";
6
+ import { DestructionEvent } from "../../events/general";
7
+ import { RootController } from "./root-controller";
8
+ export class TreeRoot {
9
+ constructor(viewContainerRef) {
10
+ this.viewContainerRef = viewContainerRef;
11
+ this.treeNodeBase = new TreeNodeBase();
12
+ this.rootController = new RootController(this, viewContainerRef);
13
+ this.detectChanges();
14
+ }
15
+ branches() {
16
+ return this.treeNodeBase.branches();
17
+ }
18
+ destroy() {
19
+ if (this.isDestroyed()) {
20
+ throw new TreeError("Cannot destroy a destroyed tree root");
21
+ }
22
+ dropzoneRenderer.clearTreeFromRegistry(this);
23
+ this.treeNodeBase.destroy();
24
+ this.rootController.destroy();
25
+ this.viewContainerRef.clear();
26
+ config.delete(this);
27
+ this.dispatch(new DestructionEvent(this));
28
+ }
29
+ detectChanges() {
30
+ this.rootController.detectChanges();
31
+ }
32
+ dispatch(event) {
33
+ this.treeNodeBase.dispatch(event);
34
+ }
35
+ events() {
36
+ return this.treeNodeBase.events();
37
+ }
38
+ getBranch(index) {
39
+ return this.treeNodeBase.getBranch(index);
40
+ }
41
+ getBranchesContainer() {
42
+ if (this.isDestroyed()) {
43
+ throw new TreeError("Cannot get branches container from a destroyed tree root");
44
+ }
45
+ return this.rootController.getBranchesContainer();
46
+ }
47
+ getComponentInstance() {
48
+ if (this.isDestroyed()) {
49
+ throw new TreeError("Cannot get component instance from a destroyed tree root");
50
+ }
51
+ return this.rootController.getComponentInstance();
52
+ }
53
+ getHostView() {
54
+ if (this.isDestroyed()) {
55
+ throw new TreeError("Cannot get component host view from a destroyed tree root");
56
+ }
57
+ return this.rootController.getHostView();
58
+ }
59
+ getNativeElement() {
60
+ if (this.isDestroyed()) {
61
+ throw new TreeError("Cannot get native element from a destroyed tree root");
62
+ }
63
+ return this.rootController.getNativeElement();
64
+ }
65
+ grow(component, options) {
66
+ if (this.isDestroyed()) {
67
+ throw new TreeError("Cannot grow a branch on a destroyed tree root");
68
+ }
69
+ return new TreeBranch(this, { component, ...options });
70
+ }
71
+ isDestroyed() {
72
+ return this.treeNodeBase.isDestroyed();
73
+ }
74
+ plot() {
75
+ return this.treeNodeBase.plot();
76
+ }
77
+ root() {
78
+ return this;
79
+ }
80
+ traverse(callback) {
81
+ callback(this);
82
+ this.treeNodeBase.traverse(callback);
83
+ }
84
+ }
85
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1yb290LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbGltYmxlLXRyZWUvc3JjL2xpYi9jb3JlL3RyZWUtcm9vdC90cmVlLXJvb3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBR3hELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUdqRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUNoRixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDeEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV4RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFbkQsTUFBTSxPQUFPLFFBQVE7SUFNbEIsWUFBb0MsZ0JBQWtDO1FBQWxDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbkUsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxjQUFjLENBQUMsSUFBSSxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDakUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFTSxRQUFRO1FBQ1osT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFTSxPQUFPO1FBQ1gsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUU7WUFDckIsTUFBTSxJQUFJLFNBQVMsQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO1NBQzlEO1FBQ0QsZ0JBQWdCLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM5QixNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFTSxhQUFhO1FBQ2pCLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDdkMsQ0FBQztJQUVNLFFBQVEsQ0FBQyxLQUFnQjtRQUM3QixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRU0sTUFBTTtRQUNWLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBRU0sU0FBUyxDQUFDLEtBQWE7UUFDM0IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRU0sb0JBQW9CO1FBQ3hCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFO1lBQ3JCLE1BQU0sSUFBSSxTQUFTLENBQ2hCLDBEQUEwRCxDQUM1RCxDQUFDO1NBQ0o7UUFDRCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUNyRCxDQUFDO0lBRU0sb0JBQW9CO1FBQ3hCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFO1lBQ3JCLE1BQU0sSUFBSSxTQUFTLENBQ2hCLDBEQUEwRCxDQUM1RCxDQUFDO1NBQ0o7UUFDRCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUNyRCxDQUFDO0lBRU0sV0FBVztRQUNmLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFO1lBQ3JCLE1BQU0sSUFBSSxTQUFTLENBQ2hCLDJEQUEyRCxDQUM3RCxDQUFDO1NBQ0o7UUFDRCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDNUMsQ0FBQztJQUVNLGdCQUFnQjtRQUNwQixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRTtZQUNyQixNQUFNLElBQUksU0FBUyxDQUNoQixzREFBc0QsQ0FDeEQsQ0FBQztTQUNKO1FBQ0QsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDakQsQ0FBQztJQUVNLElBQUksQ0FDUixTQUFrQyxFQUNsQyxPQUEwQztRQUUxQyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRTtZQUNyQixNQUFNLElBQUksU0FBUyxDQUFDLCtDQUErQyxDQUFDLENBQUM7U0FDdkU7UUFDRCxPQUFPLElBQUksVUFBVSxDQUFDLElBQUksRUFBRSxFQUFFLFNBQVMsRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVNLFdBQVc7UUFDZixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDMUMsQ0FBQztJQUVNLElBQUk7UUFDUixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVNLElBQUk7UUFDUixPQUFPLElBQUksQ0FBQztJQUNmLENBQUM7SUFFTSxRQUFRLENBQ1osUUFFUztRQUVULFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNmLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7Q0FDSCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRyZWVQbG90IH0gZnJvbSBcIi4uLy4uL3N0cnVjdHVyZS90cmVlLXBsb3RcIjtcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgVHJlZUV2ZW50IH0gZnJvbSBcIi4uLy4uL3N0cnVjdHVyZS90cmVlLWV2ZW50LmludGVyZmFjZVwiO1xuaW1wb3J0IHsgVHJlZUJyYW5jaCB9IGZyb20gXCIuLi90cmVlLWJyYW5jaC90cmVlLWJyYW5jaFwiO1xuaW1wb3J0IHsgVHlwZSwgVmlld0NvbnRhaW5lclJlZiwgVmlld1JlZiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBSb290Q29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL2NvbXBvbmVudHMvcm9vdC9yb290LmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgVHJlZU5vZGVCYXNlIH0gZnJvbSBcIi4uL3RyZWUtbm9kZS1iYXNlXCI7XG5pbXBvcnQgeyBOb2RlQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL2NvbXBvbmVudHMvbm9kZS1jb21wb25lbnQuaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBCcmFuY2hPcHRpb25zIH0gZnJvbSBcIi4uL2JyYW5jaC1vcHRpb25zLmludGVyZmFjZVwiO1xuaW1wb3J0IHsgZHJvcHpvbmVSZW5kZXJlciB9IGZyb20gXCIuLi8uLi9leHRyYXMvZHJhZy1hbmQtZHJvcC9kcm9wem9uZS1yZW5kZXJlclwiO1xuaW1wb3J0IHsgY29uZmlnIH0gZnJvbSBcIi4uL2NvbmZpZ3VyYXRpb24vY29uZmlndXJhdGlvblwiO1xuaW1wb3J0IHsgVHJlZUVycm9yIH0gZnJvbSBcIi4uLy4uL2Vycm9yc1wiO1xuaW1wb3J0IHsgRGVzdHJ1Y3Rpb25FdmVudCB9IGZyb20gXCIuLi8uLi9ldmVudHMvZ2VuZXJhbFwiO1xuaW1wb3J0IHsgVHJlZU5vZGUgfSBmcm9tIFwiLi4vLi4vc3RydWN0dXJlXCI7XG5pbXBvcnQgeyBSb290Q29udHJvbGxlciB9IGZyb20gXCIuL3Jvb3QtY29udHJvbGxlclwiO1xuXG5leHBvcnQgY2xhc3MgVHJlZVJvb3Q8VXNlcmxhbmRDb21wb25lbnQ+XG4gICBpbXBsZW1lbnRzIFRyZWVOb2RlPFRyZWVCcmFuY2g8VXNlcmxhbmRDb21wb25lbnQ+LCBSb290Q29tcG9uZW50Plxue1xuICAgcHJpdmF0ZSByZWFkb25seSByb290Q29udHJvbGxlcjogUm9vdENvbnRyb2xsZXI8VXNlcmxhbmRDb21wb25lbnQ+O1xuICAgcHJpdmF0ZSByZWFkb25seSB0cmVlTm9kZUJhc2U6IFRyZWVOb2RlQmFzZTxVc2VybGFuZENvbXBvbmVudD47XG5cbiAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYpIHtcbiAgICAgIHRoaXMudHJlZU5vZGVCYXNlID0gbmV3IFRyZWVOb2RlQmFzZSgpO1xuICAgICAgdGhpcy5yb290Q29udHJvbGxlciA9IG5ldyBSb290Q29udHJvbGxlcih0aGlzLCB2aWV3Q29udGFpbmVyUmVmKTtcbiAgICAgIHRoaXMuZGV0ZWN0Q2hhbmdlcygpO1xuICAgfVxuXG4gICBwdWJsaWMgYnJhbmNoZXMoKTogQXJyYXk8VHJlZUJyYW5jaDxVc2VybGFuZENvbXBvbmVudD4+IHtcbiAgICAgIHJldHVybiB0aGlzLnRyZWVOb2RlQmFzZS5icmFuY2hlcygpO1xuICAgfVxuXG4gICBwdWJsaWMgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKCkpIHtcbiAgICAgICAgIHRocm93IG5ldyBUcmVlRXJyb3IoXCJDYW5ub3QgZGVzdHJveSBhIGRlc3Ryb3llZCB0cmVlIHJvb3RcIik7XG4gICAgICB9XG4gICAgICBkcm9wem9uZVJlbmRlcmVyLmNsZWFyVHJlZUZyb21SZWdpc3RyeSh0aGlzKTtcbiAgICAgIHRoaXMudHJlZU5vZGVCYXNlLmRlc3Ryb3koKTtcbiAgICAgIHRoaXMucm9vdENvbnRyb2xsZXIuZGVzdHJveSgpO1xuICAgICAgdGhpcy52aWV3Q29udGFpbmVyUmVmLmNsZWFyKCk7XG4gICAgICBjb25maWcuZGVsZXRlKHRoaXMpO1xuICAgICAgdGhpcy5kaXNwYXRjaChuZXcgRGVzdHJ1Y3Rpb25FdmVudCh0aGlzKSk7XG4gICB9XG5cbiAgIHB1YmxpYyBkZXRlY3RDaGFuZ2VzKCk6IHZvaWQge1xuICAgICAgdGhpcy5yb290Q29udHJvbGxlci5kZXRlY3RDaGFuZ2VzKCk7XG4gICB9XG5cbiAgIHB1YmxpYyBkaXNwYXRjaChldmVudDogVHJlZUV2ZW50KTogdm9pZCB7XG4gICAgICB0aGlzLnRyZWVOb2RlQmFzZS5kaXNwYXRjaChldmVudCk7XG4gICB9XG5cbiAgIHB1YmxpYyBldmVudHMoKTogT2JzZXJ2YWJsZTxUcmVlRXZlbnQ+IHtcbiAgICAgIHJldHVybiB0aGlzLnRyZWVOb2RlQmFzZS5ldmVudHMoKTtcbiAgIH1cblxuICAgcHVibGljIGdldEJyYW5jaChpbmRleDogbnVtYmVyKTogVHJlZUJyYW5jaDxVc2VybGFuZENvbXBvbmVudD4gfCB1bmRlZmluZWQge1xuICAgICAgcmV0dXJuIHRoaXMudHJlZU5vZGVCYXNlLmdldEJyYW5jaChpbmRleCk7XG4gICB9XG5cbiAgIHB1YmxpYyBnZXRCcmFuY2hlc0NvbnRhaW5lcigpOiBWaWV3Q29udGFpbmVyUmVmIHwgdW5kZWZpbmVkIHtcbiAgICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKCkpIHtcbiAgICAgICAgIHRocm93IG5ldyBUcmVlRXJyb3IoXG4gICAgICAgICAgICBcIkNhbm5vdCBnZXQgYnJhbmNoZXMgY29udGFpbmVyIGZyb20gYSBkZXN0cm95ZWQgdHJlZSByb290XCJcbiAgICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5yb290Q29udHJvbGxlci5nZXRCcmFuY2hlc0NvbnRhaW5lcigpO1xuICAgfVxuXG4gICBwdWJsaWMgZ2V0Q29tcG9uZW50SW5zdGFuY2UoKTogUm9vdENvbXBvbmVudCB7XG4gICAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCgpKSB7XG4gICAgICAgICB0aHJvdyBuZXcgVHJlZUVycm9yKFxuICAgICAgICAgICAgXCJDYW5ub3QgZ2V0IGNvbXBvbmVudCBpbnN0YW5jZSBmcm9tIGEgZGVzdHJveWVkIHRyZWUgcm9vdFwiXG4gICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMucm9vdENvbnRyb2xsZXIuZ2V0Q29tcG9uZW50SW5zdGFuY2UoKTtcbiAgIH1cblxuICAgcHVibGljIGdldEhvc3RWaWV3KCk6IFZpZXdSZWYge1xuICAgICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQoKSkge1xuICAgICAgICAgdGhyb3cgbmV3IFRyZWVFcnJvcihcbiAgICAgICAgICAgIFwiQ2Fubm90IGdldCBjb21wb25lbnQgaG9zdCB2aWV3IGZyb20gYSBkZXN0cm95ZWQgdHJlZSByb290XCJcbiAgICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5yb290Q29udHJvbGxlci5nZXRIb3N0VmlldygpO1xuICAgfVxuXG4gICBwdWJsaWMgZ2V0TmF0aXZlRWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCgpKSB7XG4gICAgICAgICB0aHJvdyBuZXcgVHJlZUVycm9yKFxuICAgICAgICAgICAgXCJDYW5ub3QgZ2V0IG5hdGl2ZSBlbGVtZW50IGZyb20gYSBkZXN0cm95ZWQgdHJlZSByb290XCJcbiAgICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5yb290Q29udHJvbGxlci5nZXROYXRpdmVFbGVtZW50KCk7XG4gICB9XG5cbiAgIHB1YmxpYyBncm93KFxuICAgICAgY29tcG9uZW50OiBUeXBlPFVzZXJsYW5kQ29tcG9uZW50PixcbiAgICAgIG9wdGlvbnM/OiBCcmFuY2hPcHRpb25zPFVzZXJsYW5kQ29tcG9uZW50PlxuICAgKTogVHJlZUJyYW5jaDxVc2VybGFuZENvbXBvbmVudD4ge1xuICAgICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQoKSkge1xuICAgICAgICAgdGhyb3cgbmV3IFRyZWVFcnJvcihcIkNhbm5vdCBncm93IGEgYnJhbmNoIG9uIGEgZGVzdHJveWVkIHRyZWUgcm9vdFwiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgVHJlZUJyYW5jaCh0aGlzLCB7IGNvbXBvbmVudCwgLi4ub3B0aW9ucyB9KTtcbiAgIH1cblxuICAgcHVibGljIGlzRGVzdHJveWVkKCk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIHRoaXMudHJlZU5vZGVCYXNlLmlzRGVzdHJveWVkKCk7XG4gICB9XG5cbiAgIHB1YmxpYyBwbG90KCk6IFRyZWVQbG90IHtcbiAgICAgIHJldHVybiB0aGlzLnRyZWVOb2RlQmFzZS5wbG90KCk7XG4gICB9XG5cbiAgIHB1YmxpYyByb290KCk6IHRoaXMge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICB9XG5cbiAgIHB1YmxpYyB0cmF2ZXJzZShcbiAgICAgIGNhbGxiYWNrOiAoXG4gICAgICAgICBub2RlOiBUcmVlTm9kZTxUcmVlQnJhbmNoPFVzZXJsYW5kQ29tcG9uZW50PiwgTm9kZUNvbXBvbmVudD5cbiAgICAgICkgPT4gdm9pZFxuICAgKTogdm9pZCB7XG4gICAgICBjYWxsYmFjayh0aGlzKTtcbiAgICAgIHRoaXMudHJlZU5vZGVCYXNlLnRyYXZlcnNlKGNhbGxiYWNrKTtcbiAgIH1cbn1cbiJdfQ==
@@ -0,0 +1,19 @@
1
+ import { Injectable } from "@angular/core";
2
+ import { config } from "../configuration/configuration";
3
+ import { TreeRoot } from "../tree-root/tree-root";
4
+ import * as i0 from "@angular/core";
5
+ export class TreeService {
6
+ createEmptyTree(container, options = {}) {
7
+ container.clear();
8
+ const root = new TreeRoot(container);
9
+ config.setConfig(root, options);
10
+ return root;
11
+ }
12
+ }
13
+ TreeService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: TreeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
14
+ TreeService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: TreeService, providedIn: "root" });
15
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: TreeService, decorators: [{
16
+ type: Injectable,
17
+ args: [{ providedIn: "root" }]
18
+ }] });
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbGltYmxlLXRyZWUvc3JjL2xpYi9jb3JlL3RyZWUtc2VydmljZS90cmVlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBb0IsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRXhELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7QUFHbEQsTUFBTSxPQUFPLFdBQVc7SUFDZCxlQUFlLENBQ25CLFNBQTJCLEVBQzNCLFVBQXVCLEVBQUU7UUFFekIsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2xCLE1BQU0sSUFBSSxHQUFHLElBQUksUUFBUSxDQUFZLFNBQVMsQ0FBQyxDQUFDO1FBQ2hELE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ2hDLE9BQU8sSUFBSSxDQUFDO0lBQ2YsQ0FBQzs7eUdBVFMsV0FBVzs2R0FBWCxXQUFXLGNBREUsTUFBTTs0RkFDbkIsV0FBVztrQkFEdkIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IGNvbmZpZyB9IGZyb20gXCIuLi9jb25maWd1cmF0aW9uL2NvbmZpZ3VyYXRpb25cIjtcbmltcG9ydCB7IFRyZWVPcHRpb25zIH0gZnJvbSBcIi4uL2NvbmZpZ3VyYXRpb24vdHJlZS1vcHRpb25zLmludGVyZmFjZVwiO1xuaW1wb3J0IHsgVHJlZVJvb3QgfSBmcm9tIFwiLi4vdHJlZS1yb290L3RyZWUtcm9vdFwiO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46IFwicm9vdFwiIH0pXG5leHBvcnQgY2xhc3MgVHJlZVNlcnZpY2Uge1xuICAgcHVibGljIGNyZWF0ZUVtcHR5VHJlZTxDb21wb25lbnQ+KFxuICAgICAgY29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgICAgb3B0aW9uczogVHJlZU9wdGlvbnMgPSB7fVxuICAgKTogVHJlZVJvb3Q8Q29tcG9uZW50PiB7XG4gICAgICBjb250YWluZXIuY2xlYXIoKTtcbiAgICAgIGNvbnN0IHJvb3QgPSBuZXcgVHJlZVJvb3Q8Q29tcG9uZW50Pihjb250YWluZXIpO1xuICAgICAgY29uZmlnLnNldENvbmZpZyhyb290LCBvcHRpb25zKTtcbiAgICAgIHJldHVybiByb290O1xuICAgfVxufVxuIl19
@@ -0,0 +1,2 @@
1
+ export * from "./tree-error";
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saW1ibGUtdHJlZS9zcmMvbGliL2Vycm9ycy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL3RyZWUtZXJyb3JcIjtcbiJdfQ==
@@ -0,0 +1,3 @@
1
+ export class TreeError extends Error {
2
+ }
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1lcnJvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2xpbWJsZS10cmVlL3NyYy9saWIvZXJyb3JzL3RyZWUtZXJyb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxPQUFPLFNBQVUsU0FBUSxLQUFLO0NBQUciLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgVHJlZUVycm9yIGV4dGVuZHMgRXJyb3Ige31cbiJdfQ==
@@ -0,0 +1,28 @@
1
+ export class DragEndEvent {
2
+ constructor(source, endpoints) {
3
+ this._source = source;
4
+ this._oldParent = endpoints.oldParent;
5
+ this._oldIndex = endpoints.oldIndex;
6
+ this._newParent = endpoints.newParent;
7
+ this._newIndex = endpoints.newIndex;
8
+ }
9
+ type() {
10
+ return "drag end";
11
+ }
12
+ source() {
13
+ return this._source;
14
+ }
15
+ newIndex() {
16
+ return this._newIndex;
17
+ }
18
+ newParent() {
19
+ return this._newParent;
20
+ }
21
+ oldIndex() {
22
+ return this._oldIndex;
23
+ }
24
+ oldParent() {
25
+ return this._oldParent;
26
+ }
27
+ }
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy1lbmQtZXZlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saW1ibGUtdHJlZS9zcmMvbGliL2V2ZW50cy9kcmFnL2RyYWctZW5kLWV2ZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU1BLE1BQU0sT0FBTyxZQUFZO0lBT3RCLFlBQ0csTUFBb0IsRUFDcEIsU0FLQztRQUVELElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQztRQUN0QyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUM7UUFDcEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQztJQUN2QyxDQUFDO0lBRU0sSUFBSTtRQUNSLE9BQU8sVUFBVSxDQUFDO0lBQ3JCLENBQUM7SUFFTSxNQUFNO1FBQ1YsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3ZCLENBQUM7SUFFTSxRQUFRO1FBQ1osT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3pCLENBQUM7SUFFTSxTQUFTO1FBQ2IsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQzFCLENBQUM7SUFFTSxRQUFRO1FBQ1osT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3pCLENBQUM7SUFFTSxTQUFTO1FBQ2IsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQzFCLENBQUM7Q0FDSCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5vZGVDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vY29tcG9uZW50cy9ub2RlLWNvbXBvbmVudC5pbnRlcmZhY2VcIjtcbmltcG9ydCB7IFRyZWVCcmFuY2ggfSBmcm9tIFwiLi4vLi4vY29yZVwiO1xuaW1wb3J0IHsgVHJlZU5vZGUgfSBmcm9tIFwiLi4vLi4vc3RydWN0dXJlXCI7XG5pbXBvcnQgeyBFdmVudENvbmR1aXQgfSBmcm9tIFwiLi4vLi4vc3RydWN0dXJlL2V2ZW50LWNvbmR1aXQuaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBUcmVlRXZlbnQgfSBmcm9tIFwiLi4vLi4vc3RydWN0dXJlL3RyZWUtZXZlbnQuaW50ZXJmYWNlXCI7XG5cbmV4cG9ydCBjbGFzcyBEcmFnRW5kRXZlbnQ8VD4gaW1wbGVtZW50cyBUcmVlRXZlbnQge1xuICAgcHJpdmF0ZSByZWFkb25seSBfc291cmNlOiBFdmVudENvbmR1aXQ7XG4gICBwcml2YXRlIHJlYWRvbmx5IF9uZXdQYXJlbnQ6IFRyZWVOb2RlPFRyZWVCcmFuY2g8VD4sIE5vZGVDb21wb25lbnQ+O1xuICAgcHJpdmF0ZSByZWFkb25seSBfbmV3SW5kZXg6IG51bWJlcjtcbiAgIHByaXZhdGUgcmVhZG9ubHkgX29sZFBhcmVudDogVHJlZU5vZGU8VHJlZUJyYW5jaDxUPiwgTm9kZUNvbXBvbmVudD47XG4gICBwcml2YXRlIHJlYWRvbmx5IF9vbGRJbmRleDogbnVtYmVyO1xuXG4gICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICBzb3VyY2U6IEV2ZW50Q29uZHVpdCxcbiAgICAgIGVuZHBvaW50czoge1xuICAgICAgICAgb2xkUGFyZW50OiBUcmVlTm9kZTxUcmVlQnJhbmNoPFQ+LCBOb2RlQ29tcG9uZW50PjtcbiAgICAgICAgIG9sZEluZGV4OiBudW1iZXI7XG4gICAgICAgICBuZXdQYXJlbnQ6IFRyZWVOb2RlPFRyZWVCcmFuY2g8VD4sIE5vZGVDb21wb25lbnQ+O1xuICAgICAgICAgbmV3SW5kZXg6IG51bWJlcjtcbiAgICAgIH1cbiAgICkge1xuICAgICAgdGhpcy5fc291cmNlID0gc291cmNlO1xuICAgICAgdGhpcy5fb2xkUGFyZW50ID0gZW5kcG9pbnRzLm9sZFBhcmVudDtcbiAgICAgIHRoaXMuX29sZEluZGV4ID0gZW5kcG9pbnRzLm9sZEluZGV4O1xuICAgICAgdGhpcy5fbmV3UGFyZW50ID0gZW5kcG9pbnRzLm5ld1BhcmVudDtcbiAgICAgIHRoaXMuX25ld0luZGV4ID0gZW5kcG9pbnRzLm5ld0luZGV4O1xuICAgfVxuXG4gICBwdWJsaWMgdHlwZSgpOiBcImRyYWcgZW5kXCIge1xuICAgICAgcmV0dXJuIFwiZHJhZyBlbmRcIjtcbiAgIH1cblxuICAgcHVibGljIHNvdXJjZSgpOiBFdmVudENvbmR1aXQge1xuICAgICAgcmV0dXJuIHRoaXMuX3NvdXJjZTtcbiAgIH1cblxuICAgcHVibGljIG5ld0luZGV4KCk6IG51bWJlciB7XG4gICAgICByZXR1cm4gdGhpcy5fbmV3SW5kZXg7XG4gICB9XG5cbiAgIHB1YmxpYyBuZXdQYXJlbnQoKTogVHJlZU5vZGU8VHJlZUJyYW5jaDxUPiwgTm9kZUNvbXBvbmVudD4ge1xuICAgICAgcmV0dXJuIHRoaXMuX25ld1BhcmVudDtcbiAgIH1cblxuICAgcHVibGljIG9sZEluZGV4KCk6IG51bWJlciB7XG4gICAgICByZXR1cm4gdGhpcy5fb2xkSW5kZXg7XG4gICB9XG5cbiAgIHB1YmxpYyBvbGRQYXJlbnQoKTogVHJlZU5vZGU8VHJlZUJyYW5jaDxUPiwgTm9kZUNvbXBvbmVudD4ge1xuICAgICAgcmV0dXJuIHRoaXMuX29sZFBhcmVudDtcbiAgIH1cbn1cbiJdfQ==
@@ -0,0 +1,12 @@
1
+ export class DragStartEvent {
2
+ constructor(source) {
3
+ this._source = source;
4
+ }
5
+ type() {
6
+ return "drag start";
7
+ }
8
+ source() {
9
+ return this._source;
10
+ }
11
+ }
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy1zdGFydC1ldmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2xpbWJsZS10cmVlL3NyYy9saWIvZXZlbnRzL2RyYWcvZHJhZy1zdGFydC1ldmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxNQUFNLE9BQU8sY0FBYztJQUd4QixZQUFtQixNQUFvQjtRQUNwQyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztJQUN6QixDQUFDO0lBRU0sSUFBSTtRQUNSLE9BQU8sWUFBWSxDQUFDO0lBQ3ZCLENBQUM7SUFFTSxNQUFNO1FBQ1YsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3ZCLENBQUM7Q0FDSCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50Q29uZHVpdCB9IGZyb20gXCIuLi8uLi9zdHJ1Y3R1cmUvZXZlbnQtY29uZHVpdC5pbnRlcmZhY2VcIjtcbmltcG9ydCB7IFRyZWVFdmVudCB9IGZyb20gXCIuLi8uLi9zdHJ1Y3R1cmUvdHJlZS1ldmVudC5pbnRlcmZhY2VcIjtcblxuZXhwb3J0IGNsYXNzIERyYWdTdGFydEV2ZW50IGltcGxlbWVudHMgVHJlZUV2ZW50IHtcbiAgIHByaXZhdGUgcmVhZG9ubHkgX3NvdXJjZTogRXZlbnRDb25kdWl0O1xuXG4gICBwdWJsaWMgY29uc3RydWN0b3Ioc291cmNlOiBFdmVudENvbmR1aXQpIHtcbiAgICAgIHRoaXMuX3NvdXJjZSA9IHNvdXJjZTtcbiAgIH1cblxuICAgcHVibGljIHR5cGUoKTogXCJkcmFnIHN0YXJ0XCIge1xuICAgICAgcmV0dXJuIFwiZHJhZyBzdGFydFwiO1xuICAgfVxuXG4gICBwdWJsaWMgc291cmNlKCk6IEV2ZW50Q29uZHVpdCB7XG4gICAgICByZXR1cm4gdGhpcy5fc291cmNlO1xuICAgfVxufVxuIl19
@@ -0,0 +1,20 @@
1
+ export class DropEvent {
2
+ constructor(source, parent, index) {
3
+ this._source = source;
4
+ this._parent = parent;
5
+ this._index = index;
6
+ }
7
+ type() {
8
+ return "drag end";
9
+ }
10
+ source() {
11
+ return this._source;
12
+ }
13
+ index() {
14
+ return this._index;
15
+ }
16
+ parent() {
17
+ return this._parent;
18
+ }
19
+ }
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcC1ldmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2xpbWJsZS10cmVlL3NyYy9saWIvZXZlbnRzL2RyYWcvZHJvcC1ldmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxNQUFNLE9BQU8sU0FBUztJQUtuQixZQUNHLE1BQW9CLEVBQ3BCLE1BQThDLEVBQzlDLEtBQWE7UUFFYixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUN0QixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUN0QixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUN2QixDQUFDO0lBRU0sSUFBSTtRQUNSLE9BQU8sVUFBVSxDQUFDO0lBQ3JCLENBQUM7SUFFTSxNQUFNO1FBQ1YsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3ZCLENBQUM7SUFFTSxLQUFLO1FBQ1QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3RCLENBQUM7SUFFTSxNQUFNO1FBQ1YsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3ZCLENBQUM7Q0FDSCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5vZGVDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vY29tcG9uZW50cy9ub2RlLWNvbXBvbmVudC5pbnRlcmZhY2VcIjtcbmltcG9ydCB7IFRyZWVCcmFuY2ggfSBmcm9tIFwiLi4vLi4vY29yZVwiO1xuaW1wb3J0IHsgVHJlZU5vZGUsIEV2ZW50Q29uZHVpdCwgVHJlZUV2ZW50IH0gZnJvbSBcIi4uLy4uL3N0cnVjdHVyZVwiO1xuXG5leHBvcnQgY2xhc3MgRHJvcEV2ZW50PFQ+IGltcGxlbWVudHMgVHJlZUV2ZW50IHtcbiAgIHByaXZhdGUgcmVhZG9ubHkgX3NvdXJjZTogRXZlbnRDb25kdWl0O1xuICAgcHJpdmF0ZSByZWFkb25seSBfcGFyZW50OiBUcmVlTm9kZTxUcmVlQnJhbmNoPFQ+LCBOb2RlQ29tcG9uZW50PjtcbiAgIHByaXZhdGUgcmVhZG9ubHkgX2luZGV4OiBudW1iZXI7XG5cbiAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgIHNvdXJjZTogRXZlbnRDb25kdWl0LFxuICAgICAgcGFyZW50OiBUcmVlTm9kZTxUcmVlQnJhbmNoPFQ+LCBOb2RlQ29tcG9uZW50PixcbiAgICAgIGluZGV4OiBudW1iZXJcbiAgICkge1xuICAgICAgdGhpcy5fc291cmNlID0gc291cmNlO1xuICAgICAgdGhpcy5fcGFyZW50ID0gcGFyZW50O1xuICAgICAgdGhpcy5faW5kZXggPSBpbmRleDtcbiAgIH1cblxuICAgcHVibGljIHR5cGUoKTogXCJkcmFnIGVuZFwiIHtcbiAgICAgIHJldHVybiBcImRyYWcgZW5kXCI7XG4gICB9XG5cbiAgIHB1YmxpYyBzb3VyY2UoKTogRXZlbnRDb25kdWl0IHtcbiAgICAgIHJldHVybiB0aGlzLl9zb3VyY2U7XG4gICB9XG5cbiAgIHB1YmxpYyBpbmRleCgpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIHRoaXMuX2luZGV4O1xuICAgfVxuXG4gICBwdWJsaWMgcGFyZW50KCk6IFRyZWVOb2RlPFRyZWVCcmFuY2g8VD4sIE5vZGVDb21wb25lbnQ+IHtcbiAgICAgIHJldHVybiB0aGlzLl9wYXJlbnQ7XG4gICB9XG59XG4iXX0=
@@ -0,0 +1,4 @@
1
+ export * from "./drag-end-event";
2
+ export * from "./drag-start-event";
3
+ export * from "./drop-event";
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saW1ibGUtdHJlZS9zcmMvbGliL2V2ZW50cy9kcmFnL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2RyYWctZW5kLWV2ZW50XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kcmFnLXN0YXJ0LWV2ZW50XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kcm9wLWV2ZW50XCI7XG4iXX0=
@@ -0,0 +1,12 @@
1
+ export class DestructionEvent {
2
+ constructor(source) {
3
+ this._source = source;
4
+ }
5
+ type() {
6
+ return "destruction";
7
+ }
8
+ source() {
9
+ return this._source;
10
+ }
11
+ }
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzdHJ1Y3Rpb24tZXZlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saW1ibGUtdHJlZS9zcmMvbGliL2V2ZW50cy9nZW5lcmFsL2Rlc3RydWN0aW9uLWV2ZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE1BQU0sT0FBTyxnQkFBZ0I7SUFHMUIsWUFBbUIsTUFBb0I7UUFDcEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7SUFDekIsQ0FBQztJQUVNLElBQUk7UUFDUixPQUFPLGFBQWEsQ0FBQztJQUN4QixDQUFDO0lBRU0sTUFBTTtRQUNWLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN2QixDQUFDO0NBQ0giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudENvbmR1aXQgfSBmcm9tIFwiLi4vLi4vc3RydWN0dXJlL2V2ZW50LWNvbmR1aXQuaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBUcmVlRXZlbnQgfSBmcm9tIFwiLi4vLi4vc3RydWN0dXJlL3RyZWUtZXZlbnQuaW50ZXJmYWNlXCI7XG5cbmV4cG9ydCBjbGFzcyBEZXN0cnVjdGlvbkV2ZW50IGltcGxlbWVudHMgVHJlZUV2ZW50IHtcbiAgIHByaXZhdGUgcmVhZG9ubHkgX3NvdXJjZTogRXZlbnRDb25kdWl0O1xuXG4gICBwdWJsaWMgY29uc3RydWN0b3Ioc291cmNlOiBFdmVudENvbmR1aXQpIHtcbiAgICAgIHRoaXMuX3NvdXJjZSA9IHNvdXJjZTtcbiAgIH1cblxuICAgcHVibGljIHR5cGUoKTogXCJkZXN0cnVjdGlvblwiIHtcbiAgICAgIHJldHVybiBcImRlc3RydWN0aW9uXCI7XG4gICB9XG5cbiAgIHB1YmxpYyBzb3VyY2UoKTogRXZlbnRDb25kdWl0IHtcbiAgICAgIHJldHVybiB0aGlzLl9zb3VyY2U7XG4gICB9XG59XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export * from "./destruction-event";
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saW1ibGUtdHJlZS9zcmMvbGliL2V2ZW50cy9nZW5lcmFsL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMscUJBQXFCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9kZXN0cnVjdGlvbi1ldmVudFwiO1xuIl19