@limble/limble-tree 2.0.0 → 3.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.
- package/README.md +1 -0
- package/esm2022/lib/components/branch/branch.component.mjs +79 -0
- package/{esm2020 → esm2022}/lib/components/dragover-no-change-detect.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/dropzone/dropzone.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/root/root.component.mjs +5 -5
- package/esm2022/lib/core/tree-branch/tree-branch.mjs +429 -0
- package/esm2022/lib/core/tree-node-base.mjs +77 -0
- package/esm2022/lib/core/tree-root/tree-root.mjs +193 -0
- package/{esm2020 → esm2022}/lib/core/tree-service/tree.service.mjs +4 -4
- package/{esm2020 → esm2022}/lib/extras/collapse/collapse.module.mjs +5 -5
- package/{esm2020 → esm2022}/lib/extras/collapse/collapse.service.mjs +4 -4
- package/esm2022/lib/extras/drag-and-drop/drag-and-drop.mjs +83 -0
- package/{esm2020 → esm2022}/lib/extras/drag-and-drop/drag-and-drop.module.mjs +5 -5
- package/{esm2020 → esm2022}/lib/extras/drag-and-drop/drag-and-drop.service.mjs +4 -4
- package/{esm2020 → esm2022}/lib/extras/drag-and-drop/draggable.directive.mjs +4 -4
- package/esm2022/lib/legacy/limble-tree-legacy.module.mjs +20 -0
- package/{esm2020 → esm2022}/lib/legacy/limble-tree-root/limble-tree-root.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/limble-tree.module.mjs +5 -5
- package/{fesm2020 → fesm2022}/limble-limble-tree.mjs +59 -62
- package/fesm2022/limble-limble-tree.mjs.map +1 -0
- package/lib/components/branch/branch.component.d.ts +1 -1
- package/lib/components/dropzone/dropzone.component.d.ts +1 -1
- package/lib/extras/drag-and-drop/draggable.directive.d.ts +1 -1
- package/lib/legacy/limble-tree-root/limble-tree-root.component.d.ts +1 -1
- package/package.json +7 -13
- package/esm2020/lib/components/branch/branch.component.mjs +0 -79
- package/esm2020/lib/core/tree-branch/tree-branch.mjs +0 -429
- package/esm2020/lib/core/tree-node-base.mjs +0 -80
- package/esm2020/lib/core/tree-root/tree-root.mjs +0 -193
- package/esm2020/lib/extras/drag-and-drop/drag-and-drop.mjs +0 -83
- package/esm2020/lib/legacy/limble-tree-legacy.module.mjs +0 -20
- package/fesm2015/limble-limble-tree.mjs +0 -1812
- package/fesm2015/limble-limble-tree.mjs.map +0 -1
- package/fesm2020/limble-limble-tree.mjs.map +0 -1
- /package/{esm2020 → esm2022}/lib/components/branch/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/dropzone/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/host-component.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/node-component.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/root/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/core/branch-options.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/core/branchable.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/core/component-container.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/core/configuration/configuration.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/core/configuration/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/core/configuration/tree-options.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/core/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/core/tree-branch/branch-controller.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/core/tree-branch/graftable.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/core/tree-branch/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/core/tree-node.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/core/tree-plot.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/core/tree-root/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/core/tree-root/root-controller.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/core/tree-service/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/errors/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/errors/tree-error.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/events/drag/drag-end-event.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/events/drag/drag-start-event.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/events/drag/drop-event.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/events/drag/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/events/general/destruction-event.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/events/general/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/events/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/events/relational/graft-event.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/events/relational/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/events/relational/prune-event.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/events/relational/relational-tree-event.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/events/relational/tree-relationship.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/events/tree-event.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/extras/collapse/collapse.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/extras/collapse/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/extras/drag-and-drop/drag-state.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/extras/drag-and-drop/dropzone-renderer.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/extras/drag-and-drop/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/legacy/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/legacy/legacy-component-obj.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/legacy/legacy-tree-data.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/legacy/legacy-tree-options.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/legacy/legacy-tree.mjs +0 -0
- /package/{esm2020 → esm2022}/limble-limble-tree.mjs +0 -0
- /package/{esm2020 → esm2022}/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/assert.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/has-property.mjs +0 -0
- /package/{esm2020 → esm2022}/shared/index.mjs +0 -0
|
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1yb290LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbGltYmxlLXRyZWUvc3JjL2xpYi9jb3JlL3RyZWUtcm9vdC90cmVlLXJvb3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRzVDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVqRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDMUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRzlELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzlELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFFLGdCQUFnQixFQUFhLE1BQU0sY0FBYyxDQUFDO0FBRTNEOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8sUUFBUTtJQU1sQixZQUFvQyxnQkFBa0M7UUFBbEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNuRSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDdkMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLGNBQWMsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELHNFQUFzRTtJQUMvRCxRQUFRO1FBQ1osT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNJLE9BQU87UUFDWCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRTtZQUNyQixNQUFNLElBQUksU0FBUyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7U0FDOUQ7UUFDRCxn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LHNCQUFzQjtJQUNmLElBQUk7UUFDUixPQUFPLElBQUksQ0FBQztJQUNmLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLFFBQVEsQ0FDWixRQUFxRDtRQUVyRCxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRU8sbUJBQW1CLENBQUMsS0FBYztRQUN2Qyx3RUFBd0U7UUFDeEUseUVBQXlFO1FBQ3pFLHFFQUFxRTtRQUNyRSx1Q0FBdUM7UUFDdkMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2YsSUFBSSxDQUFDLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoRCxDQUFDO0NBQ0giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IE9ic2VydmFibGUgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgVHJlZUJyYW5jaCB9IGZyb20gXCIuLi90cmVlLWJyYW5jaFwiO1xuaW1wb3J0IHR5cGUgeyBUcmVlUGxvdCB9IGZyb20gXCIuLi90cmVlLXBsb3QuaW50ZXJmYWNlXCI7XG5pbXBvcnQgdHlwZSB7IFRyZWVOb2RlIH0gZnJvbSBcIi4uL3RyZWUtbm9kZS5pbnRlcmZhY2VcIjtcbmltcG9ydCB7IFRyZWVOb2RlQmFzZSB9IGZyb20gXCIuLi90cmVlLW5vZGUtYmFzZVwiO1xuaW1wb3J0IHR5cGUgeyBCcmFuY2hPcHRpb25zIH0gZnJvbSBcIi4uL2JyYW5jaC1vcHRpb25zLmludGVyZmFjZVwiO1xuaW1wb3J0IHsgY29uZmlnIH0gZnJvbSBcIi4uL2NvbmZpZ3VyYXRpb25cIjtcbmltcG9ydCB7IFJvb3RDb250cm9sbGVyIH0gZnJvbSBcIi4uL3RyZWUtcm9vdC9yb290LWNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIHsgVHlwZSwgVmlld0NvbnRhaW5lclJlZiwgVmlld1JlZiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBSb290Q29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL2NvbXBvbmVudHNcIjtcbmltcG9ydCB7IGRyb3B6b25lUmVuZGVyZXIgfSBmcm9tIFwiLi4vLi4vZXh0cmFzL2RyYWctYW5kLWRyb3BcIjtcbmltcG9ydCB7IFRyZWVFcnJvciB9IGZyb20gXCIuLi8uLi9lcnJvcnNcIjtcbmltcG9ydCB7IERlc3RydWN0aW9uRXZlbnQsIFRyZWVFdmVudCB9IGZyb20gXCIuLi8uLi9ldmVudHNcIjtcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBiYXNlIG9mIHRoZSB0cmVlLiBJdCByZW5kZXJzIGEgdmVyeSBzaW1wbGUgY29udGFpbmVyIGZvciBjaGlsZFxuICogYnJhbmNoZXMuIEl0IGhhcyBtZXRob2RzIGZvciBjcmVhdGluZyBhbmQgYWNjZXNzaW5nIHRob3NlIGJyYW5jaGVzLiBJdCBlbWl0c1xuICogZXZlbnRzIHdoZW4gdGhpbmdzIGhhcHBlbiBpbiB0aGUgdHJlZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFRyZWVSb290PFVzZXJsYW5kQ29tcG9uZW50PlxuICAgaW1wbGVtZW50cyBUcmVlTm9kZTxVc2VybGFuZENvbXBvbmVudD5cbntcbiAgIHByaXZhdGUgcmVhZG9ubHkgcm9vdENvbnRyb2xsZXI6IFJvb3RDb250cm9sbGVyPFVzZXJsYW5kQ29tcG9uZW50PjtcbiAgIHByaXZhdGUgcmVhZG9ubHkgdHJlZU5vZGVCYXNlOiBUcmVlTm9kZUJhc2U8VXNlcmxhbmRDb21wb25lbnQ+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,20 +0,0 @@
|
|
|
1
|
-
import { NgModule } from "@angular/core";
|
|
2
|
-
import { LimbleTreeRootComponent } from "./limble-tree-root/limble-tree-root.component";
|
|
3
|
-
import { LegacyTree } from "./legacy-tree";
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
/** @deprecated */
|
|
6
|
-
export class LimbleTreeLegacyModule {
|
|
7
|
-
}
|
|
8
|
-
LimbleTreeLegacyModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: LimbleTreeLegacyModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
9
|
-
LimbleTreeLegacyModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: LimbleTreeLegacyModule, imports: [LimbleTreeRootComponent], exports: [LimbleTreeRootComponent] });
|
|
10
|
-
LimbleTreeLegacyModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: LimbleTreeLegacyModule, providers: [LegacyTree], imports: [LimbleTreeRootComponent] });
|
|
11
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: LimbleTreeLegacyModule, decorators: [{
|
|
12
|
-
type: NgModule,
|
|
13
|
-
args: [{
|
|
14
|
-
declarations: [],
|
|
15
|
-
imports: [LimbleTreeRootComponent],
|
|
16
|
-
providers: [LegacyTree],
|
|
17
|
-
exports: [LimbleTreeRootComponent]
|
|
18
|
-
}]
|
|
19
|
-
}] });
|
|
20
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGltYmxlLXRyZWUtbGVnYWN5Lm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2xpbWJsZS10cmVlL3NyYy9saWIvbGVnYWN5L2xpbWJsZS10cmVlLWxlZ2FjeS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUN4RixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUUzQyxrQkFBa0I7QUFPbEIsTUFBTSxPQUFPLHNCQUFzQjs7bUhBQXRCLHNCQUFzQjtvSEFBdEIsc0JBQXNCLFlBSnRCLHVCQUF1QixhQUV2Qix1QkFBdUI7b0hBRXZCLHNCQUFzQixhQUhyQixDQUFDLFVBQVUsQ0FBQyxZQURiLHVCQUF1QjsyRkFJdkIsc0JBQXNCO2tCQU5sQyxRQUFRO21CQUFDO29CQUNQLFlBQVksRUFBRSxFQUFFO29CQUNoQixPQUFPLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQztvQkFDbEMsU0FBUyxFQUFFLENBQUMsVUFBVSxDQUFDO29CQUN2QixPQUFPLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQztpQkFDcEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBMaW1ibGVUcmVlUm9vdENvbXBvbmVudCB9IGZyb20gXCIuL2xpbWJsZS10cmVlLXJvb3QvbGltYmxlLXRyZWUtcm9vdC5jb21wb25lbnRcIjtcbmltcG9ydCB7IExlZ2FjeVRyZWUgfSBmcm9tIFwiLi9sZWdhY3ktdHJlZVwiO1xuXG4vKiogQGRlcHJlY2F0ZWQgKi9cbkBOZ01vZHVsZSh7XG4gICBkZWNsYXJhdGlvbnM6IFtdLFxuICAgaW1wb3J0czogW0xpbWJsZVRyZWVSb290Q29tcG9uZW50XSxcbiAgIHByb3ZpZGVyczogW0xlZ2FjeVRyZWVdLFxuICAgZXhwb3J0czogW0xpbWJsZVRyZWVSb290Q29tcG9uZW50XVxufSlcbmV4cG9ydCBjbGFzcyBMaW1ibGVUcmVlTGVnYWN5TW9kdWxlIHt9XG4iXX0=
|