concepto-user-controls 0.0.7 → 0.0.9
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/esm2022/lib/concepto-context-menu/concepto-context-menu.component.mjs +3 -7
- package/esm2022/lib/concepto-tree/components/tree-node/tree-node.component.mjs +301 -0
- package/esm2022/lib/concepto-tree/components/tree-node-checkbox/tree-node-checkbox.component.mjs +90 -0
- package/esm2022/lib/concepto-tree/components/tree-node-content/tree-node-content.component.mjs +65 -0
- package/esm2022/lib/concepto-tree/components/tree-node-expander/tree-node-expander.component.mjs +74 -0
- package/esm2022/lib/concepto-tree/components/tree-root/tree-root.component.mjs +230 -0
- package/esm2022/lib/concepto-tree/components/tree-viewport/tree-viewport.component.mjs +216 -0
- package/esm2022/lib/concepto-tree/concepto-tree.component.mjs +220 -0
- package/esm2022/lib/concepto-tree/core/models/tree-events.model.mjs +2 -0
- package/esm2022/lib/concepto-tree/core/models/tree-node.model.mjs +102 -0
- package/esm2022/lib/concepto-tree/core/models/tree-options.model.mjs +24 -0
- package/esm2022/lib/concepto-tree/core/models/tree.model.mjs +313 -0
- package/esm2022/lib/concepto-tree/core/services/tree-drag-drop.service.mjs +27 -0
- package/esm2022/lib/concepto-tree/directives/tree-drag.directive.mjs +69 -0
- package/esm2022/lib/concepto-tree/directives/tree-drop.directive.mjs +124 -0
- package/esm2022/lib/concepto-tree/directives/tree-node-template.directive.mjs +19 -0
- package/esm2022/lib/entity-comparison/components/entity-comparison.component.mjs +218 -0
- package/esm2022/lib/entity-comparison/core/services/entity-comparison.service.mjs +111 -0
- package/esm2022/public-api.mjs +4 -1
- package/fesm2022/concepto-user-controls.mjs +2147 -7
- package/fesm2022/concepto-user-controls.mjs.map +1 -1
- package/lib/concepto-context-menu/concepto-context-menu.component.d.ts +2 -3
- package/lib/concepto-tree/components/tree-node/tree-node.component.d.ts +19 -0
- package/lib/concepto-tree/components/tree-node-checkbox/tree-node-checkbox.component.d.ts +17 -0
- package/lib/concepto-tree/components/tree-node-content/tree-node-content.component.d.ts +18 -0
- package/lib/concepto-tree/components/tree-node-expander/tree-node-expander.component.d.ts +12 -0
- package/lib/concepto-tree/components/tree-root/tree-root.component.d.ts +35 -0
- package/lib/concepto-tree/components/tree-viewport/tree-viewport.component.d.ts +33 -0
- package/lib/concepto-tree/concepto-tree.component.d.ts +36 -0
- package/lib/concepto-tree/core/models/tree-events.model.d.ts +13 -0
- package/lib/concepto-tree/core/models/tree-node.model.d.ts +39 -0
- package/lib/concepto-tree/core/models/tree-options.model.d.ts +28 -0
- package/lib/concepto-tree/core/models/tree.model.d.ts +54 -0
- package/lib/concepto-tree/core/services/tree-drag-drop.service.d.ts +11 -0
- package/lib/concepto-tree/directives/tree-drag.directive.d.ts +16 -0
- package/lib/concepto-tree/directives/tree-drop.directive.d.ts +25 -0
- package/lib/concepto-tree/directives/tree-node-template.directive.d.ts +8 -0
- package/lib/entity-comparison/components/entity-comparison.component.d.ts +49 -0
- package/lib/entity-comparison/core/services/entity-comparison.service.d.ts +10 -0
- package/package.json +1 -1
- package/public-api.d.ts +3 -0
|
@@ -0,0 +1,313 @@
|
|
|
1
|
+
// lib/core/models/tree.model.ts
|
|
2
|
+
import { signal, computed } from '@angular/core';
|
|
3
|
+
import { Subject } from 'rxjs';
|
|
4
|
+
import { TreeNode } from './tree-node.model';
|
|
5
|
+
export class TreeModel {
|
|
6
|
+
options;
|
|
7
|
+
// Reactive state with signals
|
|
8
|
+
roots = signal([]);
|
|
9
|
+
focusedNodeId = signal(null);
|
|
10
|
+
expandedNodeIds = signal(new Set());
|
|
11
|
+
activeNodeIds = signal(new Set());
|
|
12
|
+
selectedNodeIds = signal(new Set());
|
|
13
|
+
hiddenNodeIds = signal(new Set());
|
|
14
|
+
// Computed signals
|
|
15
|
+
focusedNode = computed(() => {
|
|
16
|
+
const id = this.focusedNodeId();
|
|
17
|
+
return id ? this.getNodeById(id) : null;
|
|
18
|
+
});
|
|
19
|
+
expandedNodes = computed(() => this.getAllNodes().filter(node => this.expandedNodeIds().has(node.id)));
|
|
20
|
+
activeNodes = computed(() => this.getAllNodes().filter(node => this.activeNodeIds().has(node.id)));
|
|
21
|
+
selectedNodes = computed(() => this.getAllNodes().filter(node => this.selectedNodeIds().has(node.id)));
|
|
22
|
+
visibleNodes = computed(() => this.getAllNodes().filter(node => !node.isHidden()));
|
|
23
|
+
flattenedNodes = computed(() => {
|
|
24
|
+
const flattened = [];
|
|
25
|
+
const traverse = (nodes) => {
|
|
26
|
+
nodes.forEach(node => {
|
|
27
|
+
if (!node.isHidden()) {
|
|
28
|
+
flattened.push(node);
|
|
29
|
+
if (node.isExpanded() && node.children.length > 0) {
|
|
30
|
+
traverse(node.children);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
};
|
|
35
|
+
traverse(this.roots());
|
|
36
|
+
return flattened;
|
|
37
|
+
});
|
|
38
|
+
// Event streams
|
|
39
|
+
events$ = new Subject();
|
|
40
|
+
// Virtual root for unified handling
|
|
41
|
+
virtualRoot = null;
|
|
42
|
+
// Node registry for quick lookup
|
|
43
|
+
nodeRegistry = new Map();
|
|
44
|
+
constructor(options) {
|
|
45
|
+
this.options = options;
|
|
46
|
+
// Constructor sin effects - se sincronizan en las operaciones
|
|
47
|
+
}
|
|
48
|
+
// Data management
|
|
49
|
+
setData(data) {
|
|
50
|
+
this.nodeRegistry.clear();
|
|
51
|
+
const roots = this.buildNodes(data, null, 0);
|
|
52
|
+
this.roots.set(roots);
|
|
53
|
+
this.emitEvent({ type: 'initialized', treeModel: this });
|
|
54
|
+
}
|
|
55
|
+
buildNodes(data, parent, level) {
|
|
56
|
+
return data.map((item, index) => {
|
|
57
|
+
const node = new TreeNode(item, parent, level, index, this.options);
|
|
58
|
+
this.nodeRegistry.set(node.id, node);
|
|
59
|
+
// Recursively build children
|
|
60
|
+
const childrenData = item[this.options.childrenField || 'children'];
|
|
61
|
+
if (Array.isArray(childrenData) && childrenData.length > 0) {
|
|
62
|
+
node.children = this.buildNodes(childrenData, node, level + 1);
|
|
63
|
+
}
|
|
64
|
+
return node;
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
update() {
|
|
68
|
+
// Trigger change detection by creating new signal values
|
|
69
|
+
this.roots.set([...this.roots()]);
|
|
70
|
+
this.emitEvent({ type: 'update', treeModel: this });
|
|
71
|
+
}
|
|
72
|
+
// Node lookup
|
|
73
|
+
getNodeById(id) {
|
|
74
|
+
return this.nodeRegistry.get(id) || null;
|
|
75
|
+
}
|
|
76
|
+
getNodeBy(predicate) {
|
|
77
|
+
return this.getAllNodes().find(predicate) || null;
|
|
78
|
+
}
|
|
79
|
+
getAllNodes() {
|
|
80
|
+
const nodes = [];
|
|
81
|
+
const traverse = (nodeList) => {
|
|
82
|
+
nodeList.forEach(node => {
|
|
83
|
+
nodes.push(node);
|
|
84
|
+
if (node.children.length > 0) {
|
|
85
|
+
traverse(node.children);
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
};
|
|
89
|
+
traverse(this.roots());
|
|
90
|
+
return nodes;
|
|
91
|
+
}
|
|
92
|
+
// Navigation
|
|
93
|
+
focusNode(node) {
|
|
94
|
+
if (this.focusedNode()) {
|
|
95
|
+
this.focusedNode().setFocus(false);
|
|
96
|
+
}
|
|
97
|
+
if (node) {
|
|
98
|
+
this.focusedNodeId.set(node.id);
|
|
99
|
+
node.setFocus(true);
|
|
100
|
+
this.emitEvent({ type: 'focus', node });
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
this.focusedNodeId.set(null);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
focusNextNode() {
|
|
107
|
+
const flattened = this.flattenedNodes();
|
|
108
|
+
const currentIndex = flattened.findIndex(n => n.id === this.focusedNodeId());
|
|
109
|
+
if (currentIndex < flattened.length - 1) {
|
|
110
|
+
this.focusNode(flattened[currentIndex + 1]);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
focusPreviousNode() {
|
|
114
|
+
const flattened = this.flattenedNodes();
|
|
115
|
+
const currentIndex = flattened.findIndex(n => n.id === this.focusedNodeId());
|
|
116
|
+
if (currentIndex > 0) {
|
|
117
|
+
this.focusNode(flattened[currentIndex - 1]);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
focusDrillDown() {
|
|
121
|
+
const focused = this.focusedNode();
|
|
122
|
+
if (focused) {
|
|
123
|
+
if (!focused.isExpanded() && focused.hasChildren) {
|
|
124
|
+
focused.expand();
|
|
125
|
+
}
|
|
126
|
+
else if (focused.children.length > 0) {
|
|
127
|
+
this.focusNode(focused.children[0]);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
focusDrillUp() {
|
|
132
|
+
const focused = this.focusedNode();
|
|
133
|
+
if (focused) {
|
|
134
|
+
if (focused.isExpanded() && focused.hasChildren) {
|
|
135
|
+
focused.collapse();
|
|
136
|
+
}
|
|
137
|
+
else if (focused.parent) {
|
|
138
|
+
this.focusNode(focused.parent);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
// Operations
|
|
143
|
+
expandAll() {
|
|
144
|
+
const ids = new Set(this.getAllNodes().map(n => n.id));
|
|
145
|
+
this.expandedNodeIds.set(ids);
|
|
146
|
+
this.emitEvent({ type: 'expandAll', treeModel: this });
|
|
147
|
+
}
|
|
148
|
+
collapseAll() {
|
|
149
|
+
this.expandedNodeIds.set(new Set());
|
|
150
|
+
this.emitEvent({ type: 'collapseAll', treeModel: this });
|
|
151
|
+
}
|
|
152
|
+
expandNode(node) {
|
|
153
|
+
this.expandedNodeIds.update(ids => {
|
|
154
|
+
const newIds = new Set(ids);
|
|
155
|
+
newIds.add(node.id);
|
|
156
|
+
return newIds;
|
|
157
|
+
});
|
|
158
|
+
node.isExpanded.set(true);
|
|
159
|
+
this.emitEvent({ type: 'expand', node });
|
|
160
|
+
}
|
|
161
|
+
collapseNode(node) {
|
|
162
|
+
this.expandedNodeIds.update(ids => {
|
|
163
|
+
const newIds = new Set(ids);
|
|
164
|
+
newIds.delete(node.id);
|
|
165
|
+
return newIds;
|
|
166
|
+
});
|
|
167
|
+
node.isExpanded.set(false);
|
|
168
|
+
this.emitEvent({ type: 'collapse', node });
|
|
169
|
+
}
|
|
170
|
+
activateNode(node, multi = false) {
|
|
171
|
+
if (!multi) {
|
|
172
|
+
this.activeNodeIds.set(new Set([node.id]));
|
|
173
|
+
this.getAllNodes().forEach(n => n.isActive.set(n.id === node.id));
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
this.activeNodeIds.update(ids => {
|
|
177
|
+
const newIds = new Set(ids);
|
|
178
|
+
newIds.add(node.id);
|
|
179
|
+
return newIds;
|
|
180
|
+
});
|
|
181
|
+
node.isActive.set(true);
|
|
182
|
+
}
|
|
183
|
+
this.emitEvent({ type: 'activate', node });
|
|
184
|
+
}
|
|
185
|
+
deactivateNode(node) {
|
|
186
|
+
this.activeNodeIds.update(ids => {
|
|
187
|
+
const newIds = new Set(ids);
|
|
188
|
+
newIds.delete(node.id);
|
|
189
|
+
return newIds;
|
|
190
|
+
});
|
|
191
|
+
node.isActive.set(false);
|
|
192
|
+
this.emitEvent({ type: 'deactivate', node });
|
|
193
|
+
}
|
|
194
|
+
selectNode(node, multi = false) {
|
|
195
|
+
if (!multi) {
|
|
196
|
+
this.selectedNodeIds.set(new Set([node.id]));
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
this.selectedNodeIds.update(ids => {
|
|
200
|
+
const newIds = new Set(ids);
|
|
201
|
+
if (ids.has(node.id)) {
|
|
202
|
+
newIds.delete(node.id);
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
newIds.add(node.id);
|
|
206
|
+
}
|
|
207
|
+
return newIds;
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
this.emitEvent({ type: 'select', node });
|
|
211
|
+
}
|
|
212
|
+
// Filtering
|
|
213
|
+
filterNodes(filterFn, autoShow = true) {
|
|
214
|
+
const hiddenIds = new Set();
|
|
215
|
+
this.getAllNodes().forEach(node => {
|
|
216
|
+
const matches = filterFn(node);
|
|
217
|
+
if (!matches) {
|
|
218
|
+
hiddenIds.add(node.id);
|
|
219
|
+
}
|
|
220
|
+
else if (autoShow) {
|
|
221
|
+
// Show ancestors of matching nodes
|
|
222
|
+
node.getAncestors().forEach(ancestor => {
|
|
223
|
+
hiddenIds.delete(ancestor.id);
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
});
|
|
227
|
+
this.hiddenNodeIds.set(hiddenIds);
|
|
228
|
+
this.emitEvent({ type: 'filter', treeModel: this });
|
|
229
|
+
}
|
|
230
|
+
clearFilter() {
|
|
231
|
+
this.hiddenNodeIds.set(new Set());
|
|
232
|
+
this.emitEvent({ type: 'clearFilter', treeModel: this });
|
|
233
|
+
}
|
|
234
|
+
// Drag & Drop
|
|
235
|
+
canMoveNode(node, to) {
|
|
236
|
+
// Prevent moving to itself or descendants
|
|
237
|
+
if (node === to.parent)
|
|
238
|
+
return false;
|
|
239
|
+
if (to.parent.getAncestors().includes(node))
|
|
240
|
+
return false;
|
|
241
|
+
// Custom validation
|
|
242
|
+
if (this.options.allowDrop) {
|
|
243
|
+
if (typeof this.options.allowDrop === 'function') {
|
|
244
|
+
return this.options.allowDrop(node, to);
|
|
245
|
+
}
|
|
246
|
+
return this.options.allowDrop;
|
|
247
|
+
}
|
|
248
|
+
return true;
|
|
249
|
+
}
|
|
250
|
+
moveNode(node, to) {
|
|
251
|
+
if (!this.canMoveNode(node, to))
|
|
252
|
+
return;
|
|
253
|
+
// Remove from old parent
|
|
254
|
+
if (node.parent) {
|
|
255
|
+
const oldIndex = node.parent.children.indexOf(node);
|
|
256
|
+
if (oldIndex !== -1) {
|
|
257
|
+
// Create new array to trigger change detection
|
|
258
|
+
node.parent.children = [
|
|
259
|
+
...node.parent.children.slice(0, oldIndex),
|
|
260
|
+
...node.parent.children.slice(oldIndex + 1)
|
|
261
|
+
];
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
else {
|
|
265
|
+
// Handle root nodes
|
|
266
|
+
const rootIndex = this.roots().indexOf(node);
|
|
267
|
+
if (rootIndex !== -1) {
|
|
268
|
+
this.roots.set([
|
|
269
|
+
...this.roots().slice(0, rootIndex),
|
|
270
|
+
...this.roots().slice(rootIndex + 1)
|
|
271
|
+
]);
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
// Add to new parent - create new array to trigger change detection
|
|
275
|
+
const newChildren = [...to.parent.children];
|
|
276
|
+
newChildren.splice(to.index, 0, node);
|
|
277
|
+
to.parent.children = newChildren;
|
|
278
|
+
node.parent = to.parent;
|
|
279
|
+
// Update levels
|
|
280
|
+
this.updateNodeLevels(node);
|
|
281
|
+
this.emitEvent({ type: 'moveNode', node, to });
|
|
282
|
+
this.update();
|
|
283
|
+
}
|
|
284
|
+
updateNodeLevels(node) {
|
|
285
|
+
const newLevel = node.parent ? node.parent.level + 1 : 0;
|
|
286
|
+
node.level = newLevel;
|
|
287
|
+
node.children.forEach(child => this.updateNodeLevels(child));
|
|
288
|
+
}
|
|
289
|
+
// Async children loading
|
|
290
|
+
async loadChildren(node) {
|
|
291
|
+
if (!this.options.getChildren)
|
|
292
|
+
return;
|
|
293
|
+
node.setLoading(true);
|
|
294
|
+
try {
|
|
295
|
+
const childrenData = await this.options.getChildren(node);
|
|
296
|
+
node.children = this.buildNodes(childrenData, node, node.level + 1);
|
|
297
|
+
node.hasChildren = node.children.length > 0;
|
|
298
|
+
this.emitEvent({ type: 'loadChildren', node });
|
|
299
|
+
this.update();
|
|
300
|
+
}
|
|
301
|
+
catch (error) {
|
|
302
|
+
this.emitEvent({ type: 'loadChildrenError', node, error });
|
|
303
|
+
}
|
|
304
|
+
finally {
|
|
305
|
+
node.setLoading(false);
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
// Events
|
|
309
|
+
emitEvent(event) {
|
|
310
|
+
this.events$.next(event);
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbmNlcHRvLXVzZXItY29udHJvbHMvc3JjL2xpYi9jb25jZXB0by10cmVlL2NvcmUvbW9kZWxzL3RyZWUubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZ0NBQWdDO0FBQ2hDLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBSTdDLE1BQU0sT0FBTyxTQUFTO0lBOEREO0lBN0RuQiw4QkFBOEI7SUFDckIsS0FBSyxHQUFHLE1BQU0sQ0FBYSxFQUFFLENBQUMsQ0FBQztJQUMvQixhQUFhLEdBQUcsTUFBTSxDQUF5QixJQUFJLENBQUMsQ0FBQztJQUNyRCxlQUFlLEdBQUcsTUFBTSxDQUF1QixJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDMUQsYUFBYSxHQUFHLE1BQU0sQ0FBdUIsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ3hELGVBQWUsR0FBRyxNQUFNLENBQXVCLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQztJQUMxRCxhQUFhLEdBQUcsTUFBTSxDQUF1QixJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFFakUsbUJBQW1CO0lBQ1YsV0FBVyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7UUFDbkMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ2hDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDMUMsQ0FBQyxDQUFDLENBQUM7SUFFTSxhQUFhLEdBQUcsUUFBUSxDQUFDLEdBQUcs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QUUsbUJBQW1CLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDN0QsQ0FBQztnQkFBUyxDQUFDO1lBQ1QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QixDQUFDO0lBQ0gsQ0FBQztJQUVELFNBQVM7SUFDRCxTQUFTLENBQUMsS0FBZ0I7UUFDaEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0IsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gbGliL2NvcmUvbW9kZWxzL3RyZWUubW9kZWwudHNcclxuaW1wb3J0IHsgc2lnbmFsLCBjb21wdXRlZCwgZWZmZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgVHJlZU5vZGUgfSBmcm9tICcuL3RyZWUtbm9kZS5tb2RlbCc7XHJcbmltcG9ydCB7IFRyZWVPcHRpb25zIH0gZnJvbSAnLi90cmVlLW9wdGlvbnMubW9kZWwnO1xyXG5pbXBvcnQgeyBUcmVlRXZlbnQgfSBmcm9tICcuL3RyZWUtZXZlbnRzLm1vZGVsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBUcmVlTW9kZWwge1xyXG4gIC8vIFJlYWN0aXZlIHN0YXRlIHdpdGggc2lnbmFsc1xyXG4gIHJlYWRvbmx5IHJvb3RzID0gc2lnbmFsPFRyZWVOb2RlW10+KFtdKTtcclxuICByZWFkb25seSBmb2N1c2VkTm9kZUlkID0gc2lnbmFsPHN0cmluZyB8IG51bWJlciB8IG51bGw+KG51bGwpO1xyXG4gIHJlYWRvbmx5IGV4cGFuZGVkTm9kZUlkcyA9IHNpZ25hbDxTZXQ8c3RyaW5nIHwgbnVtYmVyPj4obmV3IFNldCgpKTtcclxuICByZWFkb25seSBhY3RpdmVOb2RlSWRzID0gc2lnbmFsPFNldDxzdHJpbmcgfCBudW1iZXI+PihuZXcgU2V0KCkpO1xyXG4gIHJlYWRvbmx5IHNlbGVjdGVkTm9kZUlkcyA9IHNpZ25hbDxTZXQ8c3RyaW5nIHwgbnVtYmVyPj4obmV3IFNldCgpKTtcclxuICByZWFkb25seSBoaWRkZW5Ob2RlSWRzID0gc2lnbmFsPFNldDxzdHJpbmcgfCBudW1iZXI+PihuZXcgU2V0KCkpO1xyXG4gIFxyXG4gIC8vIENvbXB1dGVkIHNpZ25hbHNcclxuICByZWFkb25seSBmb2N1c2VkTm9kZSA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgIGNvbnN0IGlkID0gdGhpcy5mb2N1c2VkTm9kZUlkKCk7XHJcbiAgICByZXR1cm4gaWQgPyB0aGlzLmdldE5vZGVCeUlkKGlkKSA6IG51bGw7XHJcbiAgfSk7XHJcbiAgXHJcbiAgcmVhZG9ubHkgZXhwYW5kZWROb2RlcyA9IGNvbXB1dGVkKCgpID0+IFxyXG4gICAgdGhpcy5nZXRBbGxOb2RlcygpLmZpbHRlcihub2RlID0+IFxyXG4gICAgICB0aGlzLmV4cGFuZGVkTm9kZUlkcygpLmhhcyhub2RlLmlkKVxyXG4gICAgKVxyXG4gICk7XHJcbiAgXHJcbiAgcmVhZG9ubHkgYWN0aXZlTm9kZXMgPSBjb21wdXRlZCgoKSA9PlxyXG4gICAgdGhpcy5nZXRBbGxOb2RlcygpLmZpbHRlcihub2RlID0+XHJcbiAgICAgIHRoaXMuYWN0aXZlTm9kZUlkcygpLmhhcyhub2RlLmlkKVxyXG4gICAgKVxyXG4gICk7XHJcbiAgXHJcbiAgcmVhZG9ubHkgc2VsZWN0ZWROb2RlcyA9IGNvbXB1dGVkKCgpID0+XHJcbiAgICB0aGlzLmdldEFsbE5vZGVzKCkuZmlsdGVyKG5vZGUgPT5cclxuICAgICAgdGhpcy5zZWxlY3RlZE5vZGVJZHMoKS5oYXMobm9kZS5pZClcclxuICAgIClcclxuICApO1xyXG4gIFxyXG4gIHJlYWRvbmx5IHZpc2libGVOb2RlcyA9IGNvbXB1dGVkKCgpID0+XHJcbiAgICB0aGlzLmdldEFsbE5vZGVzKCkuZmlsdGVyKG5vZGUgPT4gIW5vZGUuaXNIaWRkZW4oKSlcclxuICApO1xyXG4gIFxyXG4gIHJlYWRvbmx5IGZsYXR0ZW5lZE5vZGVzID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgY29uc3QgZmxhdHRlbmVkOiBUcmVlTm9kZVtdID0gW107XHJcbiAgICBjb25zdCB0cmF2ZXJzZSA9IChub2RlczogVHJlZU5vZGVbXSkgPT4ge1xyXG4gICAgICBub2Rlcy5mb3JFYWNoKG5vZGUgPT4ge1xyXG4gICAgICAgIGlmICghbm9kZS5pc0hpZGRlbigpKSB7XHJcbiAgICAgICAgICBmbGF0dGVuZWQucHVzaChub2RlKTtcclxuICAgICAgICAgIGlmIChub2RlLmlzRXhwYW5kZWQoKSAmJiBub2RlLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdHJhdmVyc2Uobm9kZS5jaGlsZHJlbik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH07XHJcbiAgICB0cmF2ZXJzZSh0aGlzLnJvb3RzKCkpO1xyXG4gICAgcmV0dXJuIGZsYXR0ZW5lZDtcclxuICB9KTtcclxuICBcclxuICAvLyBFdmVudCBzdHJlYW1zXHJcbiAgcmVhZG9ubHkgZXZlbnRzJCA9IG5ldyBTdWJqZWN0PFRyZWVFdmVudD4oKTtcclxuICBcclxuICAvLyBWaXJ0dWFsIHJvb3QgZm9yIHVuaWZpZWQgaGFuZGxpbmdcclxuICB2aXJ0dWFsUm9vdDogVHJlZU5vZGUgfCBudWxsID0gbnVsbDtcclxuICBcclxuICAvLyBOb2RlIHJlZ2lzdHJ5IGZvciBxdWljayBsb29rdXBcclxuICBwcml2YXRlIG5vZGVSZWdpc3RyeSA9IG5ldyBNYXA8c3RyaW5nIHwgbnVtYmVyLCBUcmVlTm9kZT4oKTtcclxuICBcclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgb3B0aW9uczogVHJlZU9wdGlvbnMpIHtcclxuICAgIC8vIENvbnN0cnVjdG9yIHNpbiBlZmZlY3RzIC0gc2Ugc2luY3Jvbml6YW4gZW4gbGFzIG9wZXJhY2lvbmVzXHJcbiAgfVxyXG4gIFxyXG4gIC8vIERhdGEgbWFuYWdlbWVudFxyXG4gIHNldERhdGEoZGF0YTogYW55W10pOiB2b2lkIHtcclxuICAgIHRoaXMubm9kZVJlZ2lzdHJ5LmNsZWFyKCk7XHJcbiAgICBjb25zdCByb290cyA9IHRoaXMuYnVpbGROb2RlcyhkYXRhLCBudWxsLCAwKTtcclxuICAgIHRoaXMucm9vdHMuc2V0KHJvb3RzKTtcclxuICAgIHRoaXMuZW1pdEV2ZW50KHsgdHlwZTogJ2luaXRpYWxpemVkJywgdHJlZU1vZGVsOiB0aGlzIH0pO1xyXG4gIH1cclxuICBcclxuICBwcml2YXRlIGJ1aWxkTm9kZXMoXHJcbiAgICBkYXRhOiBhbnlbXSxcclxuICAgIHBhcmVudDogVHJlZU5vZGUgfCBudWxsLFxyXG4gICAgbGV2ZWw6IG51bWJlclxyXG4gICk6IFRyZWVOb2RlW10ge1xyXG4gICAgcmV0dXJuIGRhdGEubWFwKChpdGVtLCBpbmRleCkgPT4ge1xyXG4gICAgICBjb25zdCBub2RlID0gbmV3IFRyZWVOb2RlKGl0ZW0sIHBhcmVudCwgbGV2ZWwsIGluZGV4LCB0aGlzLm9wdGlvbnMpO1xyXG4gICAgICB0aGlzLm5vZGVSZWdpc3RyeS5zZXQobm9kZS5pZCwgbm9kZSk7XHJcbiAgICAgIFxyXG4gICAgICAvLyBSZWN1cnNpdmVseSBidWlsZCBjaGlsZHJlblxyXG4gICAgICBjb25zdCBjaGlsZHJlbkRhdGEgPSBpdGVtW3RoaXMub3B0aW9ucy5jaGlsZHJlbkZpZWxkIHx8ICdjaGlsZHJlbiddO1xyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbkRhdGEpICYmIGNoaWxkcmVuRGF0YS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgbm9kZS5jaGlsZHJlbiA9IHRoaXMuYnVpbGROb2RlcyhjaGlsZHJlbkRhdGEsIG5vZGUsIGxldmVsICsgMSk7XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICAgIHJldHVybiBub2RlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIFxyXG4gIHVwZGF0ZSgpOiB2b2lkIHtcclxuICAgIC8vIFRyaWdnZXIgY2hhbmdlIGRldGVjdGlvbiBieSBjcmVhdGluZyBuZXcgc2lnbmFsIHZhbHVlc1xyXG4gICAgdGhpcy5yb290cy5zZXQoWy4uLnRoaXMucm9vdHMoKV0pO1xyXG4gICAgdGhpcy5lbWl0RXZlbnQoeyB0eXBlOiAndXBkYXRlJywgdHJlZU1vZGVsOiB0aGlzIH0pO1xyXG4gIH1cclxuICBcclxuICAvLyBOb2RlIGxvb2t1cFxyXG4gIGdldE5vZGVCeUlkKGlkOiBzdHJpbmcgfCBudW1iZXIpOiBUcmVlTm9kZSB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMubm9kZVJlZ2lzdHJ5LmdldChpZCkgfHwgbnVsbDtcclxuICB9XHJcbiAgXHJcbiAgZ2V0Tm9kZUJ5KHByZWRpY2F0ZTogKG5vZGU6IFRyZWVOb2RlKSA9PiBib29sZWFuKTogVHJlZU5vZGUgfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLmdldEFsbE5vZGVzKCkuZmluZChwcmVkaWNhdGUpIHx8IG51bGw7XHJcbiAgfVxyXG4gIFxyXG4gIGdldEFsbE5vZGVzKCk6IFRyZWVOb2RlW10ge1xyXG4gICAgY29uc3Qgbm9kZXM6IFRyZWVOb2RlW10gPSBbXTtcclxuICAgIGNvbnN0IHRyYXZlcnNlID0gKG5vZGVMaXN0OiBUcmVlTm9kZVtdKSA9PiB7XHJcbiAgICAgIG5vZGVMaXN0LmZvckVhY2gobm9kZSA9PiB7XHJcbiAgICAgICAgbm9kZXMucHVzaChub2RlKTtcclxuICAgICAgICBpZiAobm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICB0cmF2ZXJzZShub2RlLmNoaWxkcmVuKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIHRyYXZlcnNlKHRoaXMucm9vdHMoKSk7XHJcbiAgICByZXR1cm4gbm9kZXM7XHJcbiAgfVxyXG4gIFxyXG4gIC8vIE5hdmlnYXRpb25cclxuICBmb2N1c05vZGUobm9kZTogVHJlZU5vZGUgfCBudWxsKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5mb2N1c2VkTm9kZSgpKSB7XHJcbiAgICAgIHRoaXMuZm9jdXNlZE5vZGUoKSEuc2V0Rm9jdXMoZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgaWYgKG5vZGUpIHtcclxuICAgICAgdGhpcy5mb2N1c2VkTm9kZUlkLnNldChub2RlLmlkKTtcclxuICAgICAgbm9kZS5zZXRGb2N1cyh0cnVlKTtcclxuICAgICAgdGhpcy5lbWl0RXZlbnQoeyB0eXBlOiAnZm9jdXMnLCBub2RlIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5mb2N1c2VkTm9kZUlkLnNldChudWxsKTtcclxuICAgIH1cclxuICB9XHJcbiAgXHJcbiAgZm9jdXNOZXh0Tm9kZSgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGZsYXR0ZW5lZCA9IHRoaXMuZmxhdHRlbmVkTm9kZXMoKTtcclxuICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGZsYXR0ZW5lZC5maW5kSW5kZXgoXHJcbiAgICAgIG4gPT4gbi5pZCA9PT0gdGhpcy5mb2N1c2VkTm9kZUlkKClcclxuICAgICk7XHJcbiAgICBpZiAoY3VycmVudEluZGV4IDwgZmxhdHRlbmVkLmxlbmd0aCAtIDEpIHtcclxuICAgICAgdGhpcy5mb2N1c05vZGUoZmxhdHRlbmVkW2N1cnJlbnRJbmRleCArIDFdKTtcclxuICAgIH1cclxuICB9XHJcbiAgXHJcbiAgZm9jdXNQcmV2aW91c05vZGUoKTogdm9pZCB7XHJcbiAgICBjb25zdCBmbGF0dGVuZWQgPSB0aGlzLmZsYXR0ZW5lZE5vZGVzKCk7XHJcbiAgICBjb25zdCBjdXJyZW50SW5kZXggPSBmbGF0dGVuZWQuZmluZEluZGV4KFxyXG4gICAgICBuID0+IG4uaWQgPT09IHRoaXMuZm9jdXNlZE5vZGVJZCgpXHJcbiAgICApO1xyXG4gICAgaWYgKGN1cnJlbnRJbmRleCA+IDApIHtcclxuICAgICAgdGhpcy5mb2N1c05vZGUoZmxhdHRlbmVkW2N1cnJlbnRJbmRleCAtIDFdKTtcclxuICAgIH1cclxuICB9XHJcbiAgXHJcbiAgZm9jdXNEcmlsbERvd24oKTogdm9pZCB7XHJcbiAgICBjb25zdCBmb2N1c2VkID0gdGhpcy5mb2N1c2VkTm9kZSgpO1xyXG4gICAgaWYgKGZvY3VzZWQpIHtcclxuICAgICAgaWYgKCFmb2N1c2VkLmlzRXhwYW5kZWQoKSAmJiBmb2N1c2VkLmhhc0NoaWxkcmVuKSB7XHJcbiAgICAgICAgZm9jdXNlZC5leHBhbmQoKTtcclxuICAgICAgfSBlbHNlIGlmIChmb2N1c2VkLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLmZvY3VzTm9kZShmb2N1c2VkLmNoaWxkcmVuWzBdKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBcclxuICBmb2N1c0RyaWxsVXAoKTogdm9pZCB7XHJcbiAgICBjb25zdCBmb2N1c2VkID0gdGhpcy5mb2N1c2VkTm9kZSgpO1xyXG4gICAgaWYgKGZvY3VzZWQpIHtcclxuICAgICAgaWYgKGZvY3VzZWQuaXNFeHBhbmRlZCgpICYmIGZvY3VzZWQuaGFzQ2hpbGRyZW4pIHtcclxuICAgICAgICBmb2N1c2VkLmNvbGxhcHNlKCk7XHJcbiAgICAgIH0gZWxzZSBpZiAoZm9jdXNlZC5wYXJlbnQpIHtcclxuICAgICAgICB0aGlzLmZvY3VzTm9kZShmb2N1c2VkLnBhcmVudCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgXHJcbiAgLy8gT3BlcmF0aW9uc1xyXG4gIGV4cGFuZEFsbCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGlkcyA9IG5ldyBTZXQodGhpcy5nZXRBbGxOb2RlcygpLm1hcChuID0+IG4uaWQpKTtcclxuICAgIHRoaXMuZXhwYW5kZWROb2RlSWRzLnNldChpZHMpO1xyXG4gICAgdGhpcy5lbWl0RXZlbnQoeyB0eXBlOiAnZXhwYW5kQWxsJywgdHJlZU1vZGVsOiB0aGlzIH0pO1xyXG4gIH1cclxuICBcclxuICBjb2xsYXBzZUFsbCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZXhwYW5kZWROb2RlSWRzLnNldChuZXcgU2V0KCkpO1xyXG4gICAgdGhpcy5lbWl0RXZlbnQoeyB0eXBlOiAnY29sbGFwc2VBbGwnLCB0cmVlTW9kZWw6IHRoaXMgfSk7XHJcbiAgfVxyXG4gIFxyXG4gIGV4cGFuZE5vZGUobm9kZTogVHJlZU5vZGUpOiB2b2lkIHtcclxuICAgIHRoaXMuZXhwYW5kZWROb2RlSWRzLnVwZGF0ZShpZHMgPT4ge1xyXG4gICAgICBjb25zdCBuZXdJZHMgPSBuZXcgU2V0KGlkcyk7XHJcbiAgICAgIG5ld0lkcy5hZGQobm9kZS5pZCk7XHJcbiAgICAgIHJldHVybiBuZXdJZHM7XHJcbiAgICB9KTtcclxuICAgIG5vZGUuaXNFeHBhbmRlZC5zZXQodHJ1ZSk7XHJcbiAgICB0aGlzLmVtaXRFdmVudCh7IHR5cGU6ICdleHBhbmQnLCBub2RlIH0pO1xyXG4gIH1cclxuXHJcbiAgY29sbGFwc2VOb2RlKG5vZGU6IFRyZWVOb2RlKTogdm9pZCB7XHJcbiAgICB0aGlzLmV4cGFuZGVkTm9kZUlkcy51cGRhdGUoaWRzID0+IHtcclxuICAgICAgY29uc3QgbmV3SWRzID0gbmV3IFNldChpZHMpO1xyXG4gICAgICBuZXdJZHMuZGVsZXRlKG5vZGUuaWQpO1xyXG4gICAgICByZXR1cm4gbmV3SWRzO1xyXG4gICAgfSk7XHJcbiAgICBub2RlLmlzRXhwYW5kZWQuc2V0KGZhbHNlKTtcclxuICAgIHRoaXMuZW1pdEV2ZW50KHsgdHlwZTogJ2NvbGxhcHNlJywgbm9kZSB9KTtcclxuICB9XHJcblxyXG4gIGFjdGl2YXRlTm9kZShub2RlOiBUcmVlTm9kZSwgbXVsdGk6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xyXG4gICAgaWYgKCFtdWx0aSkge1xyXG4gICAgICB0aGlzLmFjdGl2ZU5vZGVJZHMuc2V0KG5ldyBTZXQoW25vZGUuaWRdKSk7XHJcbiAgICAgIHRoaXMuZ2V0QWxsTm9kZXMoKS5mb3JFYWNoKG4gPT4gbi5pc0FjdGl2ZS5zZXQobi5pZCA9PT0gbm9kZS5pZCkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5hY3RpdmVOb2RlSWRzLnVwZGF0ZShpZHMgPT4ge1xyXG4gICAgICAgIGNvbnN0IG5ld0lkcyA9IG5ldyBTZXQoaWRzKTtcclxuICAgICAgICBuZXdJZHMuYWRkKG5vZGUuaWQpO1xyXG4gICAgICAgIHJldHVybiBuZXdJZHM7XHJcbiAgICAgIH0pO1xyXG4gICAgICBub2RlLmlzQWN0aXZlLnNldCh0cnVlKTtcclxuICAgIH1cclxuICAgIHRoaXMuZW1pdEV2ZW50KHsgdHlwZTogJ2FjdGl2YXRlJywgbm9kZSB9KTtcclxuICB9XHJcbiAgXHJcbiAgZGVhY3RpdmF0ZU5vZGUobm9kZTogVHJlZU5vZGUpOiB2b2lkIHtcclxuICAgIHRoaXMuYWN0aXZlTm9kZUlkcy51cGRhdGUoaWRzID0+IHtcclxuICAgICAgY29uc3QgbmV3SWRzID0gbmV3IFNldChpZHMpO1xyXG4gICAgICBuZXdJZHMuZGVsZXRlKG5vZGUuaWQpO1xyXG4gICAgICByZXR1cm4gbmV3SWRzO1xyXG4gICAgfSk7XHJcbiAgICBub2RlLmlzQWN0aXZlLnNldChmYWxzZSk7XHJcbiAgICB0aGlzLmVtaXRFdmVudCh7IHR5cGU6ICdkZWFjdGl2YXRlJywgbm9kZSB9KTtcclxuICB9XHJcbiAgXHJcbiAgc2VsZWN0Tm9kZShub2RlOiBUcmVlTm9kZSwgbXVsdGk6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xyXG4gICAgaWYgKCFtdWx0aSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkTm9kZUlkcy5zZXQobmV3IFNldChbbm9kZS5pZF0pKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWROb2RlSWRzLnVwZGF0ZShpZHMgPT4ge1xyXG4gICAgICAgIGNvbnN0IG5ld0lkcyA9IG5ldyBTZXQoaWRzKTtcclxuICAgICAgICBpZiAoaWRzLmhhcyhub2RlLmlkKSkge1xyXG4gICAgICAgICAgbmV3SWRzLmRlbGV0ZShub2RlLmlkKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbmV3SWRzLmFkZChub2RlLmlkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ld0lkcztcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmVtaXRFdmVudCh7IHR5cGU6ICdzZWxlY3QnLCBub2RlIH0pO1xyXG4gIH1cclxuICBcclxuICAvLyBGaWx0ZXJpbmdcclxuICBmaWx0ZXJOb2RlcyhmaWx0ZXJGbjogKG5vZGU6IFRyZWVOb2RlKSA9PiBib29sZWFuLCBhdXRvU2hvdyA9IHRydWUpOiB2b2lkIHtcclxuICAgIGNvbnN0IGhpZGRlbklkcyA9IG5ldyBTZXQ8c3RyaW5nIHwgbnVtYmVyPigpO1xyXG4gICAgXHJcbiAgICB0aGlzLmdldEFsbE5vZGVzKCkuZm9yRWFjaChub2RlID0+IHtcclxuICAgICAgY29uc3QgbWF0Y2hlcyA9IGZpbHRlckZuKG5vZGUpO1xyXG4gICAgICBpZiAoIW1hdGNoZXMpIHtcclxuICAgICAgICBoaWRkZW5JZHMuYWRkKG5vZGUuaWQpO1xyXG4gICAgICB9IGVsc2UgaWYgKGF1dG9TaG93KSB7XHJcbiAgICAgICAgLy8gU2hvdyBhbmNlc3RvcnMgb2YgbWF0Y2hpbmcgbm9kZXNcclxuICAgICAgICBub2RlLmdldEFuY2VzdG9ycygpLmZvckVhY2goYW5jZXN0b3IgPT4ge1xyXG4gICAgICAgICAgaGlkZGVuSWRzLmRlbGV0ZShhbmNlc3Rvci5pZCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgXHJcbiAgICB0aGlzLmhpZGRlbk5vZGVJZHMuc2V0KGhpZGRlbklkcyk7XHJcbiAgICB0aGlzLmVtaXRFdmVudCh7IHR5cGU6ICdmaWx0ZXInLCB0cmVlTW9kZWw6IHRoaXMgfSk7XHJcbiAgfVxyXG4gIFxyXG4gIGNsZWFyRmlsdGVyKCk6IHZvaWQge1xyXG4gICAgdGhpcy5oaWRkZW5Ob2RlSWRzLnNldChuZXcgU2V0KCkpO1xyXG4gICAgdGhpcy5lbWl0RXZlbnQoeyB0eXBlOiAnY2xlYXJGaWx0ZXInLCB0cmVlTW9kZWw6IHRoaXMgfSk7XHJcbiAgfVxyXG4gIFxyXG4gIC8vIERyYWcgJiBEcm9wXHJcbiAgY2FuTW92ZU5vZGUoXHJcbiAgICBub2RlOiBUcmVlTm9kZSxcclxuICAgIHRvOiB7IHBhcmVudDogVHJlZU5vZGU7IGluZGV4OiBudW1iZXIgfVxyXG4gICk6IGJvb2xlYW4ge1xyXG4gICAgLy8gUHJldmVudCBtb3ZpbmcgdG8gaXRzZWxmIG9yIGRlc2NlbmRhbnRzXHJcbiAgICBpZiAobm9kZSA9PT0gdG8ucGFyZW50KSByZXR1cm4gZmFsc2U7XHJcbiAgICBpZiAodG8ucGFyZW50LmdldEFuY2VzdG9ycygpLmluY2x1ZGVzKG5vZGUpKSByZXR1cm4gZmFsc2U7XHJcbiAgICBcclxuICAgIC8vIEN1c3RvbSB2YWxpZGF0aW9uXHJcbiAgICBpZiAodGhpcy5vcHRpb25zLmFsbG93RHJvcCkge1xyXG4gICAgICBpZiAodHlwZW9mIHRoaXMub3B0aW9ucy5hbGxvd0Ryb3AgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmFsbG93RHJvcChub2RlLCB0byk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5hbGxvd0Ryb3A7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuICBcclxuICBtb3ZlTm9kZShub2RlOiBUcmVlTm9kZSwgdG86IHsgcGFyZW50OiBUcmVlTm9kZTsgaW5kZXg6IG51bWJlciB9KTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuY2FuTW92ZU5vZGUobm9kZSwgdG8pKSByZXR1cm47XHJcblxyXG4gICAgLy8gUmVtb3ZlIGZyb20gb2xkIHBhcmVudFxyXG4gICAgaWYgKG5vZGUucGFyZW50KSB7XHJcbiAgICAgIGNvbnN0IG9sZEluZGV4ID0gbm9kZS5wYXJlbnQuY2hpbGRyZW4uaW5kZXhPZihub2RlKTtcclxuICAgICAgaWYgKG9sZEluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgIC8vIENyZWF0ZSBuZXcgYXJyYXkgdG8gdHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uXHJcbiAgICAgICAgbm9kZS5wYXJlbnQuY2hpbGRyZW4gPSBbXHJcbiAgICAgICAgICAuLi5ub2RlLnBhcmVudC5jaGlsZHJlbi5zbGljZSgwLCBvbGRJbmRleCksXHJcbiAgICAgICAgICAuLi5ub2RlLnBhcmVudC5jaGlsZHJlbi5zbGljZShvbGRJbmRleCArIDEpXHJcbiAgICAgICAgXTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gSGFuZGxlIHJvb3Qgbm9kZXNcclxuICAgICAgY29uc3Qgcm9vdEluZGV4ID0gdGhpcy5yb290cygpLmluZGV4T2Yobm9kZSk7XHJcbiAgICAgIGlmIChyb290SW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgdGhpcy5yb290cy5zZXQoW1xyXG4gICAgICAgICAgLi4udGhpcy5yb290cygpLnNsaWNlKDAsIHJvb3RJbmRleCksXHJcbiAgICAgICAgICAuLi50aGlzLnJvb3RzKCkuc2xpY2Uocm9vdEluZGV4ICsgMSlcclxuICAgICAgICBdKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIEFkZCB0byBuZXcgcGFyZW50IC0gY3JlYXRlIG5ldyBhcnJheSB0byB0cmlnZ2VyIGNoYW5nZSBkZXRlY3Rpb25cclxuICAgIGNvbnN0IG5ld0NoaWxkcmVuID0gWy4uLnRvLnBhcmVudC5jaGlsZHJlbl07XHJcbiAgICBuZXdDaGlsZHJlbi5zcGxpY2UodG8uaW5kZXgsIDAsIG5vZGUpO1xyXG4gICAgdG8ucGFyZW50LmNoaWxkcmVuID0gbmV3Q2hpbGRyZW47XHJcbiAgICBub2RlLnBhcmVudCA9IHRvLnBhcmVudDtcclxuXHJcbiAgICAvLyBVcGRhdGUgbGV2ZWxzXHJcbiAgICB0aGlzLnVwZGF0ZU5vZGVMZXZlbHMobm9kZSk7XHJcblxyXG4gICAgdGhpcy5lbWl0RXZlbnQoeyB0eXBlOiAnbW92ZU5vZGUnLCBub2RlLCB0byB9KTtcclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgfVxyXG4gIFxyXG4gIHByaXZhdGUgdXBkYXRlTm9kZUxldmVscyhub2RlOiBUcmVlTm9kZSk6IHZvaWQge1xyXG4gICAgY29uc3QgbmV3TGV2ZWwgPSBub2RlLnBhcmVudCA/IG5vZGUucGFyZW50LmxldmVsICsgMSA6IDA7XHJcbiAgICBub2RlLmxldmVsID0gbmV3TGV2ZWw7XHJcbiAgICBcclxuICAgIG5vZGUuY2hpbGRyZW4uZm9yRWFjaChjaGlsZCA9PiB0aGlzLnVwZGF0ZU5vZGVMZXZlbHMoY2hpbGQpKTtcclxuICB9XHJcbiAgXHJcbiAgLy8gQXN5bmMgY2hpbGRyZW4gbG9hZGluZ1xyXG4gIGFzeW5jIGxvYWRDaGlsZHJlbihub2RlOiBUcmVlTm9kZSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKCF0aGlzLm9wdGlvbnMuZ2V0Q2hpbGRyZW4pIHJldHVybjtcclxuICAgIFxyXG4gICAgbm9kZS5zZXRMb2FkaW5nKHRydWUpO1xyXG4gICAgXHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBjaGlsZHJlbkRhdGEgPSBhd2FpdCB0aGlzLm9wdGlvbnMuZ2V0Q2hpbGRyZW4obm9kZSk7XHJcbiAgICAgIG5vZGUuY2hpbGRyZW4gPSB0aGlzLmJ1aWxkTm9kZXMoY2hpbGRyZW5EYXRhLCBub2RlLCBub2RlLmxldmVsICsgMSk7XHJcbiAgICAgIG5vZGUuaGFzQ2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuLmxlbmd0aCA+IDA7XHJcbiAgICAgIFxyXG4gICAgICB0aGlzLmVtaXRFdmVudCh7IHR5cGU6ICdsb2FkQ2hpbGRyZW4nLCBub2RlIH0pO1xyXG4gICAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgdGhpcy5lbWl0RXZlbnQoeyB0eXBlOiAnbG9hZENoaWxkcmVuRXJyb3InLCBub2RlLCBlcnJvciB9KTtcclxuICAgIH0gZmluYWxseSB7XHJcbiAgICAgIG5vZGUuc2V0TG9hZGluZyhmYWxzZSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIFxyXG4gIC8vIEV2ZW50c1xyXG4gIHByaXZhdGUgZW1pdEV2ZW50KGV2ZW50OiBUcmVlRXZlbnQpOiB2b2lkIHtcclxuICAgIHRoaXMuZXZlbnRzJC5uZXh0KGV2ZW50KTtcclxuICB9XHJcbn0iXX0=
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
// lib/core/services/tree-drag-drop.service.ts
|
|
2
|
+
import { Injectable, signal } from '@angular/core';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class TreeDragDropService {
|
|
5
|
+
draggedNode = signal(null);
|
|
6
|
+
setDraggedNode(node) {
|
|
7
|
+
this.draggedNode.set(node);
|
|
8
|
+
}
|
|
9
|
+
getDraggedNode() {
|
|
10
|
+
return this.draggedNode();
|
|
11
|
+
}
|
|
12
|
+
clearDraggedNode() {
|
|
13
|
+
this.draggedNode.set(null);
|
|
14
|
+
}
|
|
15
|
+
isDragging() {
|
|
16
|
+
return this.draggedNode() !== null;
|
|
17
|
+
}
|
|
18
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TreeDragDropService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
19
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TreeDragDropService, providedIn: 'root' });
|
|
20
|
+
}
|
|
21
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TreeDragDropService, decorators: [{
|
|
22
|
+
type: Injectable,
|
|
23
|
+
args: [{
|
|
24
|
+
providedIn: 'root',
|
|
25
|
+
}]
|
|
26
|
+
}] });
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1kcmFnLWRyb3Auc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbmNlcHRvLXVzZXItY29udHJvbHMvc3JjL2xpYi9jb25jZXB0by10cmVlL2NvcmUvc2VydmljZXMvdHJlZS1kcmFnLWRyb3Auc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw4Q0FBOEM7QUFDOUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBTW5ELE1BQU0sT0FBTyxtQkFBbUI7SUFDYixXQUFXLEdBQUcsTUFBTSxDQUFrQixJQUFJLENBQUMsQ0FBQztJQUU5RCxjQUFjLENBQUMsSUFBYztRQUMxQixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsY0FBYztRQUNaLE9BQU8sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsVUFBVTtRQUNSLE9BQU8sSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLElBQUksQ0FBQztJQUNyQyxDQUFDO3dHQWpCVSxtQkFBbUI7NEdBQW5CLG1CQUFtQixjQUZsQixNQUFNOzs0RkFFUCxtQkFBbUI7a0JBSC9CLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiLy8gbGliL2NvcmUvc2VydmljZXMvdHJlZS1kcmFnLWRyb3Auc2VydmljZS50c1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVHJlZU5vZGUgfSBmcm9tICcuLi9tb2RlbHMvdHJlZS1ub2RlLm1vZGVsJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUcmVlRHJhZ0Ryb3BTZXJ2aWNlIHtcclxuICBwcml2YXRlIHJlYWRvbmx5IGRyYWdnZWROb2RlID0gc2lnbmFsPFRyZWVOb2RlIHwgbnVsbD4obnVsbCk7XHJcbiAgXHJcbiBzZXREcmFnZ2VkTm9kZShub2RlOiBUcmVlTm9kZSk6IHZvaWQge1xyXG4gICAgdGhpcy5kcmFnZ2VkTm9kZS5zZXQobm9kZSk7XHJcbiAgfVxyXG4gIFxyXG4gIGdldERyYWdnZWROb2RlKCk6IFRyZWVOb2RlIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5kcmFnZ2VkTm9kZSgpO1xyXG4gIH1cclxuICBcclxuICBjbGVhckRyYWdnZWROb2RlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5kcmFnZ2VkTm9kZS5zZXQobnVsbCk7XHJcbiAgfVxyXG4gIFxyXG4gIGlzRHJhZ2dpbmcoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5kcmFnZ2VkTm9kZSgpICE9PSBudWxsO1xyXG4gIH1cclxufSJdfQ==
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
// lib/directives/tree-drag.directive.ts
|
|
2
|
+
import { Directive, Input, HostListener, HostBinding, ElementRef, inject, // Add inject
|
|
3
|
+
} from '@angular/core';
|
|
4
|
+
import { TreeDragDropService } from '../core/services/tree-drag-drop.service';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export class TreeDragDirective {
|
|
7
|
+
node;
|
|
8
|
+
treeModel;
|
|
9
|
+
options;
|
|
10
|
+
// Use inject() function instead of constructor injection
|
|
11
|
+
elementRef = inject(ElementRef);
|
|
12
|
+
dragDropService = inject(TreeDragDropService);
|
|
13
|
+
get draggable() {
|
|
14
|
+
if (typeof this.options.allowDrag === 'function') {
|
|
15
|
+
return this.options.allowDrag(this.node);
|
|
16
|
+
}
|
|
17
|
+
return this.options.allowDrag || false;
|
|
18
|
+
}
|
|
19
|
+
onDragStart(event) {
|
|
20
|
+
if (!this.draggable) {
|
|
21
|
+
event.preventDefault();
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
this.dragDropService.setDraggedNode(this.node);
|
|
25
|
+
if (event.dataTransfer) {
|
|
26
|
+
event.dataTransfer.effectAllowed = 'move';
|
|
27
|
+
event.dataTransfer.setData('text/plain', this.node.id.toString());
|
|
28
|
+
// Create drag image
|
|
29
|
+
const dragImage = this.elementRef.nativeElement.cloneNode(true);
|
|
30
|
+
dragImage.style.opacity = '0.7';
|
|
31
|
+
document.body.appendChild(dragImage);
|
|
32
|
+
event.dataTransfer.setDragImage(dragImage, 0, 0);
|
|
33
|
+
setTimeout(() => document.body.removeChild(dragImage), 0);
|
|
34
|
+
}
|
|
35
|
+
this.elementRef.nativeElement.classList.add('tree-node-dragging');
|
|
36
|
+
}
|
|
37
|
+
onDragEnd(event) {
|
|
38
|
+
this.dragDropService.clearDraggedNode();
|
|
39
|
+
this.elementRef.nativeElement.classList.remove('tree-node-dragging');
|
|
40
|
+
}
|
|
41
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TreeDragDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
42
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: TreeDragDirective, isStandalone: true, selector: "[treeDrag]", inputs: { node: ["treeDrag", "node"], treeModel: "treeModel", options: "options" }, host: { listeners: { "dragstart": "onDragStart($event)", "dragend": "onDragEnd($event)" }, properties: { "attr.draggable": "this.draggable" } }, ngImport: i0 });
|
|
43
|
+
}
|
|
44
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TreeDragDirective, decorators: [{
|
|
45
|
+
type: Directive,
|
|
46
|
+
args: [{
|
|
47
|
+
selector: '[treeDrag]',
|
|
48
|
+
standalone: true,
|
|
49
|
+
}]
|
|
50
|
+
}], propDecorators: { node: [{
|
|
51
|
+
type: Input,
|
|
52
|
+
args: [{ required: true, alias: 'treeDrag' }]
|
|
53
|
+
}], treeModel: [{
|
|
54
|
+
type: Input,
|
|
55
|
+
args: [{ required: true }]
|
|
56
|
+
}], options: [{
|
|
57
|
+
type: Input,
|
|
58
|
+
args: [{ required: true }]
|
|
59
|
+
}], draggable: [{
|
|
60
|
+
type: HostBinding,
|
|
61
|
+
args: ['attr.draggable']
|
|
62
|
+
}], onDragStart: [{
|
|
63
|
+
type: HostListener,
|
|
64
|
+
args: ['dragstart', ['$event']]
|
|
65
|
+
}], onDragEnd: [{
|
|
66
|
+
type: HostListener,
|
|
67
|
+
args: ['dragend', ['$event']]
|
|
68
|
+
}] } });
|
|
69
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1kcmFnLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbmNlcHRvLXVzZXItY29udHJvbHMvc3JjL2xpYi9jb25jZXB0by10cmVlL2RpcmVjdGl2ZXMvdHJlZS1kcmFnLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx3Q0FBd0M7QUFDeEMsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsWUFBWSxFQUNaLFdBQVcsRUFDWCxVQUFVLEVBQ1YsTUFBTSxFQUFFLGFBQWE7RUFDdEIsTUFBTSxlQUFlLENBQUM7QUFJdkIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUNBQXlDLENBQUM7O0FBTTlFLE1BQU0sT0FBTyxpQkFBaUI7SUFDa0IsSUFBSSxDQUFZO0lBQ25DLFNBQVMsQ0FBYTtJQUN0QixPQUFPLENBQWU7SUFFakQseURBQXlEO0lBQ3hDLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDaEMsZUFBZSxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBRS9ELElBQ0ksU0FBUztRQUNYLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUNqRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQyxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUM7SUFDekMsQ0FBQztJQUdELFdBQVcsQ0FBQyxLQUFnQjtRQUMxQixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3BCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUUvQyxJQUFJLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN2QixLQUFLLENBQUMsWUFBWSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUM7WUFDMUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFFbEUsb0JBQW9CO1lBQ3BCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQWdCLENBQUM7WUFDL0UsU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ2hDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3JDLEtBQUssQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFFakQsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzVELENBQUM7UUFFRCxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUdELFNBQVMsQ0FBQyxLQUFnQjtRQUN4QixJQUFJLENBQUMsZUFBZSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDeEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7d0dBOUNVLGlCQUFpQjs0RkFBakIsaUJBQWlCOzs0RkFBakIsaUJBQWlCO2tCQUo3QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxZQUFZO29CQUN0QixVQUFVLEVBQUUsSUFBSTtpQkFDakI7OEJBRStDLElBQUk7c0JBQWpELEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUU7Z0JBQ2pCLFNBQVM7c0JBQW5DLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUNFLE9BQU87c0JBQWpDLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQU9yQixTQUFTO3NCQURaLFdBQVc7dUJBQUMsZ0JBQWdCO2dCQVM3QixXQUFXO3NCQURWLFlBQVk7dUJBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQTBCckMsU0FBUztzQkFEUixZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGxpYi9kaXJlY3RpdmVzL3RyZWUtZHJhZy5kaXJlY3RpdmUudHNcclxuaW1wb3J0IHtcclxuICBEaXJlY3RpdmUsXHJcbiAgSW5wdXQsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIEhvc3RCaW5kaW5nLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgaW5qZWN0LCAvLyBBZGQgaW5qZWN0XHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFRyZWVOb2RlIH0gZnJvbSAnLi4vY29yZS9tb2RlbHMvdHJlZS1ub2RlLm1vZGVsJztcclxuaW1wb3J0IHsgVHJlZU1vZGVsIH0gZnJvbSAnLi4vY29yZS9tb2RlbHMvdHJlZS5tb2RlbCc7XHJcbmltcG9ydCB7IFRyZWVPcHRpb25zIH0gZnJvbSAnLi4vY29yZS9tb2RlbHMvdHJlZS1vcHRpb25zLm1vZGVsJztcclxuaW1wb3J0IHsgVHJlZURyYWdEcm9wU2VydmljZSB9IGZyb20gJy4uL2NvcmUvc2VydmljZXMvdHJlZS1kcmFnLWRyb3Auc2VydmljZSc7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ1t0cmVlRHJhZ10nLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUcmVlRHJhZ0RpcmVjdGl2ZSB7XHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUsIGFsaWFzOiAndHJlZURyYWcnIH0pIG5vZGUhOiBUcmVlTm9kZTtcclxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSB0cmVlTW9kZWwhOiBUcmVlTW9kZWw7XHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgb3B0aW9ucyE6IFRyZWVPcHRpb25zO1xyXG4gIFxyXG4gIC8vIFVzZSBpbmplY3QoKSBmdW5jdGlvbiBpbnN0ZWFkIG9mIGNvbnN0cnVjdG9yIGluamVjdGlvblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgZWxlbWVudFJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGRyYWdEcm9wU2VydmljZSA9IGluamVjdChUcmVlRHJhZ0Ryb3BTZXJ2aWNlKTtcclxuICBcclxuICBASG9zdEJpbmRpbmcoJ2F0dHIuZHJhZ2dhYmxlJylcclxuICBnZXQgZHJhZ2dhYmxlKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMuYWxsb3dEcmFnID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMuYWxsb3dEcmFnKHRoaXMubm9kZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmFsbG93RHJhZyB8fCBmYWxzZTtcclxuICB9XHJcbiAgXHJcbiAgQEhvc3RMaXN0ZW5lcignZHJhZ3N0YXJ0JywgWyckZXZlbnQnXSlcclxuICBvbkRyYWdTdGFydChldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuZHJhZ2dhYmxlKSB7XHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIFxyXG4gICAgdGhpcy5kcmFnRHJvcFNlcnZpY2Uuc2V0RHJhZ2dlZE5vZGUodGhpcy5ub2RlKTtcclxuICAgIFxyXG4gICAgaWYgKGV2ZW50LmRhdGFUcmFuc2Zlcikge1xyXG4gICAgICBldmVudC5kYXRhVHJhbnNmZXIuZWZmZWN0QWxsb3dlZCA9ICdtb3ZlJztcclxuICAgICAgZXZlbnQuZGF0YVRyYW5zZmVyLnNldERhdGEoJ3RleHQvcGxhaW4nLCB0aGlzLm5vZGUuaWQudG9TdHJpbmcoKSk7XHJcbiAgICAgIFxyXG4gICAgICAvLyBDcmVhdGUgZHJhZyBpbWFnZVxyXG4gICAgICBjb25zdCBkcmFnSW1hZ2UgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbG9uZU5vZGUodHJ1ZSkgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgIGRyYWdJbWFnZS5zdHlsZS5vcGFjaXR5ID0gJzAuNyc7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZHJhZ0ltYWdlKTtcclxuICAgICAgZXZlbnQuZGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZShkcmFnSW1hZ2UsIDAsIDApO1xyXG4gICAgICBcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGRyYWdJbWFnZSksIDApO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCd0cmVlLW5vZGUtZHJhZ2dpbmcnKTtcclxuICB9XHJcbiAgXHJcbiAgQEhvc3RMaXN0ZW5lcignZHJhZ2VuZCcsIFsnJGV2ZW50J10pXHJcbiAgb25EcmFnRW5kKGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcclxuICAgIHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLmNsZWFyRHJhZ2dlZE5vZGUoKTtcclxuICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ3RyZWUtbm9kZS1kcmFnZ2luZycpO1xyXG4gIH1cclxufSJdfQ==
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
// lib/directives/tree-drop.directive.ts
|
|
2
|
+
import { Directive, Input, HostListener, HostBinding, ElementRef, signal, inject, // Add inject
|
|
3
|
+
} from '@angular/core';
|
|
4
|
+
import { TreeDragDropService } from '../core/services/tree-drag-drop.service';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export class TreeDropDirective {
|
|
7
|
+
node;
|
|
8
|
+
treeModel;
|
|
9
|
+
options;
|
|
10
|
+
dropPosition = 'inside';
|
|
11
|
+
// Use inject() function instead of constructor injection
|
|
12
|
+
elementRef = inject(ElementRef);
|
|
13
|
+
dragDropService = inject(TreeDragDropService);
|
|
14
|
+
isDraggingOver = signal(false);
|
|
15
|
+
canDrop = signal(false);
|
|
16
|
+
get isDropTarget() {
|
|
17
|
+
return this.isDraggingOver() && this.canDrop();
|
|
18
|
+
}
|
|
19
|
+
get isDropDisabled() {
|
|
20
|
+
return this.isDraggingOver() && !this.canDrop();
|
|
21
|
+
}
|
|
22
|
+
onDragEnter(event) {
|
|
23
|
+
event.preventDefault();
|
|
24
|
+
const draggedNode = this.dragDropService.getDraggedNode();
|
|
25
|
+
if (!draggedNode)
|
|
26
|
+
return;
|
|
27
|
+
this.isDraggingOver.set(true);
|
|
28
|
+
const dropTarget = this.getDropTarget();
|
|
29
|
+
const canDrop = this.treeModel.canMoveNode(draggedNode, dropTarget);
|
|
30
|
+
this.canDrop.set(canDrop);
|
|
31
|
+
if (canDrop && event.dataTransfer) {
|
|
32
|
+
event.dataTransfer.dropEffect = 'move';
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
onDragOver(event) {
|
|
36
|
+
if (this.canDrop()) {
|
|
37
|
+
event.preventDefault();
|
|
38
|
+
if (event.dataTransfer) {
|
|
39
|
+
event.dataTransfer.dropEffect = 'move';
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
onDragLeave(event) {
|
|
44
|
+
// Check if we're really leaving (not just entering a child element)
|
|
45
|
+
const rect = this.elementRef.nativeElement.getBoundingClientRect();
|
|
46
|
+
const x = event.clientX;
|
|
47
|
+
const y = event.clientY;
|
|
48
|
+
if (x < rect.left || x >= rect.right || y < rect.top || y >= rect.bottom) {
|
|
49
|
+
this.isDraggingOver.set(false);
|
|
50
|
+
this.canDrop.set(false);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
onDrop(event) {
|
|
54
|
+
event.preventDefault();
|
|
55
|
+
event.stopPropagation();
|
|
56
|
+
const draggedNode = this.dragDropService.getDraggedNode();
|
|
57
|
+
if (!draggedNode || !this.canDrop())
|
|
58
|
+
return;
|
|
59
|
+
const dropTarget = this.getDropTarget();
|
|
60
|
+
this.treeModel.moveNode(draggedNode, dropTarget);
|
|
61
|
+
this.isDraggingOver.set(false);
|
|
62
|
+
this.canDrop.set(false);
|
|
63
|
+
this.dragDropService.clearDraggedNode();
|
|
64
|
+
}
|
|
65
|
+
getDropTarget() {
|
|
66
|
+
switch (this.dropPosition) {
|
|
67
|
+
case 'before':
|
|
68
|
+
return {
|
|
69
|
+
parent: this.node.parent,
|
|
70
|
+
index: this.node.index,
|
|
71
|
+
};
|
|
72
|
+
case 'after':
|
|
73
|
+
return {
|
|
74
|
+
parent: this.node.parent,
|
|
75
|
+
index: this.node.index + 1,
|
|
76
|
+
};
|
|
77
|
+
case 'inside':
|
|
78
|
+
default:
|
|
79
|
+
return {
|
|
80
|
+
parent: this.node,
|
|
81
|
+
index: this.node.children.length,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TreeDropDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
86
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: TreeDropDirective, isStandalone: true, selector: "[treeDrop]", inputs: { node: ["treeDrop", "node"], treeModel: "treeModel", options: "options", dropPosition: "dropPosition" }, host: { listeners: { "dragenter": "onDragEnter($event)", "dragover": "onDragOver($event)", "dragleave": "onDragLeave($event)", "drop": "onDrop($event)" }, properties: { "class.tree-drop-target": "this.isDropTarget", "class.tree-drop-disabled": "this.isDropDisabled" } }, ngImport: i0 });
|
|
87
|
+
}
|
|
88
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TreeDropDirective, decorators: [{
|
|
89
|
+
type: Directive,
|
|
90
|
+
args: [{
|
|
91
|
+
selector: '[treeDrop]',
|
|
92
|
+
standalone: true,
|
|
93
|
+
}]
|
|
94
|
+
}], propDecorators: { node: [{
|
|
95
|
+
type: Input,
|
|
96
|
+
args: [{ required: true, alias: 'treeDrop' }]
|
|
97
|
+
}], treeModel: [{
|
|
98
|
+
type: Input,
|
|
99
|
+
args: [{ required: true }]
|
|
100
|
+
}], options: [{
|
|
101
|
+
type: Input,
|
|
102
|
+
args: [{ required: true }]
|
|
103
|
+
}], dropPosition: [{
|
|
104
|
+
type: Input
|
|
105
|
+
}], isDropTarget: [{
|
|
106
|
+
type: HostBinding,
|
|
107
|
+
args: ['class.tree-drop-target']
|
|
108
|
+
}], isDropDisabled: [{
|
|
109
|
+
type: HostBinding,
|
|
110
|
+
args: ['class.tree-drop-disabled']
|
|
111
|
+
}], onDragEnter: [{
|
|
112
|
+
type: HostListener,
|
|
113
|
+
args: ['dragenter', ['$event']]
|
|
114
|
+
}], onDragOver: [{
|
|
115
|
+
type: HostListener,
|
|
116
|
+
args: ['dragover', ['$event']]
|
|
117
|
+
}], onDragLeave: [{
|
|
118
|
+
type: HostListener,
|
|
119
|
+
args: ['dragleave', ['$event']]
|
|
120
|
+
}], onDrop: [{
|
|
121
|
+
type: HostListener,
|
|
122
|
+
args: ['drop', ['$event']]
|
|
123
|
+
}] } });
|
|
124
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1kcm9wLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbmNlcHRvLXVzZXItY29udHJvbHMvc3JjL2xpYi9jb25jZXB0by10cmVlL2RpcmVjdGl2ZXMvdHJlZS1kcm9wLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx3Q0FBd0M7QUFDeEMsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsWUFBWSxFQUNaLFdBQVcsRUFDWCxVQUFVLEVBQ1YsTUFBTSxFQUNOLE1BQU0sRUFBRSxhQUFhO0VBQ3RCLE1BQU0sZUFBZSxDQUFDO0FBSXZCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDOztBQVE5RSxNQUFNLE9BQU8saUJBQWlCO0lBQ2tCLElBQUksQ0FBWTtJQUNuQyxTQUFTLENBQWE7SUFDdEIsT0FBTyxDQUFlO0lBQ3hDLFlBQVksR0FBaUIsUUFBUSxDQUFDO0lBRS9DLHlEQUF5RDtJQUN4QyxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2hDLGVBQWUsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUV0RCxjQUFjLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9CLE9BQU8sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFakMsSUFDSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsY0FBYyxFQUFFLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2pELENBQUM7SUFFRCxJQUNJLGNBQWM7UUFDaEIsT0FBTyxJQUFJLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDbEQsQ0FBQztJQUdELFdBQVcsQ0FBQyxLQUFnQjtRQUMxQixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFdkIsTUFBTSxXQUFXLEdB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LENBQUM7aUJBQzNCLENBQUM7WUFDSixLQUFLLFFBQVEsQ0FBQztZQUNkO2dCQUNFLE9BQU87b0JBQ0wsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJO29CQUNqQixLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTTtpQkFDakMsQ0FBQztRQUNOLENBQUM7SUFDSCxDQUFDO3dHQW5HVSxpQkFBaUI7NEZBQWpCLGlCQUFpQjs7NEZBQWpCLGlCQUFpQjtrQkFKN0IsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsWUFBWTtvQkFDdEIsVUFBVSxFQUFFLElBQUk7aUJBQ2pCOzhCQUUrQyxJQUFJO3NCQUFqRCxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFO2dCQUNqQixTQUFTO3NCQUFuQyxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFDRSxPQUFPO3NCQUFqQyxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFDaEIsWUFBWTtzQkFBcEIsS0FBSztnQkFVRixZQUFZO3NCQURmLFdBQVc7dUJBQUMsd0JBQXdCO2dCQU1qQyxjQUFjO3NCQURqQixXQUFXO3VCQUFDLDBCQUEwQjtnQkFNdkMsV0FBVztzQkFEVixZQUFZO3VCQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFtQnJDLFVBQVU7c0JBRFQsWUFBWTt1QkFBQyxVQUFVLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBV3BDLFdBQVc7c0JBRFYsWUFBWTt1QkFBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBY3JDLE1BQU07c0JBREwsWUFBWTt1QkFBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBsaWIvZGlyZWN0aXZlcy90cmVlLWRyb3AuZGlyZWN0aXZlLnRzXHJcbmltcG9ydCB7XHJcbiAgRGlyZWN0aXZlLFxyXG4gIElucHV0LFxyXG4gIEhvc3RMaXN0ZW5lcixcclxuICBIb3N0QmluZGluZyxcclxuICBFbGVtZW50UmVmLFxyXG4gIHNpZ25hbCxcclxuICBpbmplY3QsIC8vIEFkZCBpbmplY3RcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVHJlZU5vZGUgfSBmcm9tICcuLi9jb3JlL21vZGVscy90cmVlLW5vZGUubW9kZWwnO1xyXG5pbXBvcnQgeyBUcmVlTW9kZWwgfSBmcm9tICcuLi9jb3JlL21vZGVscy90cmVlLm1vZGVsJztcclxuaW1wb3J0IHsgVHJlZU9wdGlvbnMgfSBmcm9tICcuLi9jb3JlL21vZGVscy90cmVlLW9wdGlvbnMubW9kZWwnO1xyXG5pbXBvcnQgeyBUcmVlRHJhZ0Ryb3BTZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS9zZXJ2aWNlcy90cmVlLWRyYWctZHJvcC5zZXJ2aWNlJztcclxuXHJcbnR5cGUgRHJvcFBvc2l0aW9uID0gJ2JlZm9yZScgfCAnYWZ0ZXInIHwgJ2luc2lkZSc7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ1t0cmVlRHJvcF0nLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUcmVlRHJvcERpcmVjdGl2ZSB7XHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUsIGFsaWFzOiAndHJlZURyb3AnIH0pIG5vZGUhOiBUcmVlTm9kZTtcclxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSB0cmVlTW9kZWwhOiBUcmVlTW9kZWw7XHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgb3B0aW9ucyE6IFRyZWVPcHRpb25zO1xyXG4gIEBJbnB1dCgpIGRyb3BQb3NpdGlvbjogRHJvcFBvc2l0aW9uID0gJ2luc2lkZSc7XHJcbiAgXHJcbiAgLy8gVXNlIGluamVjdCgpIGZ1bmN0aW9uIGluc3RlYWQgb2YgY29uc3RydWN0b3IgaW5qZWN0aW9uXHJcbiAgcHJpdmF0ZSByZWFkb25seSBlbGVtZW50UmVmID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgZHJhZ0Ryb3BTZXJ2aWNlID0gaW5qZWN0KFRyZWVEcmFnRHJvcFNlcnZpY2UpO1xyXG4gIFxyXG4gIHJlYWRvbmx5IGlzRHJhZ2dpbmdPdmVyID0gc2lnbmFsKGZhbHNlKTtcclxuICByZWFkb25seSBjYW5Ecm9wID0gc2lnbmFsKGZhbHNlKTtcclxuICBcclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnRyZWUtZHJvcC10YXJnZXQnKVxyXG4gIGdldCBpc0Ryb3BUYXJnZXQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5pc0RyYWdnaW5nT3ZlcigpICYmIHRoaXMuY2FuRHJvcCgpO1xyXG4gIH1cclxuICBcclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnRyZWUtZHJvcC1kaXNhYmxlZCcpXHJcbiAgZ2V0IGlzRHJvcERpc2FibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaXNEcmFnZ2luZ092ZXIoKSAmJiAhdGhpcy5jYW5Ecm9wKCk7XHJcbiAgfVxyXG4gIFxyXG4gIEBIb3N0TGlzdGVuZXIoJ2RyYWdlbnRlcicsIFsnJGV2ZW50J10pXHJcbiAgb25EcmFnRW50ZXIoZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIFxyXG4gICAgY29uc3QgZHJhZ2dlZE5vZGUgPSB0aGlzLmRyYWdEcm9wU2VydmljZS5nZXREcmFnZ2VkTm9kZSgpO1xyXG4gICAgaWYgKCFkcmFnZ2VkTm9kZSkgcmV0dXJuO1xyXG4gICAgXHJcbiAgICB0aGlzLmlzRHJhZ2dpbmdPdmVyLnNldCh0cnVlKTtcclxuICAgIFxyXG4gICAgY29uc3QgZHJvcFRhcmdldCA9IHRoaXMuZ2V0RHJvcFRhcmdldCgpO1xyXG4gICAgY29uc3QgY2FuRHJvcCA9IHRoaXMudHJlZU1vZGVsLmNhbk1vdmVOb2RlKGRyYWdnZWROb2RlLCBkcm9wVGFyZ2V0KTtcclxuICAgIHRoaXMuY2FuRHJvcC5zZXQoY2FuRHJvcCk7XHJcbiAgICBcclxuICAgIGlmIChjYW5Ecm9wICYmIGV2ZW50LmRhdGFUcmFuc2Zlcikge1xyXG4gICAgICBldmVudC5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9ICdtb3ZlJztcclxuICAgIH1cclxuICB9XHJcbiAgXHJcbiAgQEhvc3RMaXN0ZW5lcignZHJhZ292ZXInLCBbJyRldmVudCddKVxyXG4gIG9uRHJhZ092ZXIoZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY2FuRHJvcCgpKSB7XHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIGlmIChldmVudC5kYXRhVHJhbnNmZXIpIHtcclxuICAgICAgICBldmVudC5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9ICdtb3ZlJztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBcclxuICBASG9zdExpc3RlbmVyKCdkcmFnbGVhdmUnLCBbJyRldmVudCddKVxyXG4gIG9uRHJhZ0xlYXZlKGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcclxuICAgIC8vIENoZWNrIGlmIHdlJ3JlIHJlYWxseSBsZWF2aW5nIChub3QganVzdCBlbnRlcmluZyBhIGNoaWxkIGVsZW1lbnQpXHJcbiAgICBjb25zdCByZWN0ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICBjb25zdCB4ID0gZXZlbnQuY2xpZW50WDtcclxuICAgIGNvbnN0IHkgPSBldmVudC5jbGllbnRZO1xyXG4gICAgXHJcbiAgICBpZiAoeCA8IHJlY3QubGVmdCB8fCB4ID49IHJlY3QucmlnaHQgfHwgeSA8IHJlY3QudG9wIHx8IHkgPj0gcmVjdC5ib3R0b20pIHtcclxuICAgICAgdGhpcy5pc0RyYWdnaW5nT3Zlci5zZXQoZmFsc2UpO1xyXG4gICAgICB0aGlzLmNhbkRyb3Auc2V0KGZhbHNlKTtcclxuICAgIH1cclxuICB9XHJcbiAgXHJcbiAgQEhvc3RMaXN0ZW5lcignZHJvcCcsIFsnJGV2ZW50J10pXHJcbiAgb25Ecm9wKGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIFxyXG4gICAgY29uc3QgZHJhZ2dlZE5vZGUgPSB0aGlzLmRyYWdEcm9wU2VydmljZS5nZXREcmFnZ2VkTm9kZSgpO1xyXG4gICAgaWYgKCFkcmFnZ2VkTm9kZSB8fCAhdGhpcy5jYW5Ecm9wKCkpIHJldHVybjtcclxuICAgIFxyXG4gICAgY29uc3QgZHJvcFRhcmdldCA9IHRoaXMuZ2V0RHJvcFRhcmdldCgpO1xyXG4gICAgdGhpcy50cmVlTW9kZWwubW92ZU5vZGUoZHJhZ2dlZE5vZGUsIGRyb3BUYXJnZXQpO1xyXG4gICAgXHJcbiAgICB0aGlzLmlzRHJhZ2dpbmdPdmVyLnNldChmYWxzZSk7XHJcbiAgICB0aGlzLmNhbkRyb3Auc2V0KGZhbHNlKTtcclxuICAgIHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLmNsZWFyRHJhZ2dlZE5vZGUoKTtcclxuICB9XHJcbiAgXHJcbiAgcHJpdmF0ZSBnZXREcm9wVGFyZ2V0KCk6IHsgcGFyZW50OiBUcmVlTm9kZTsgaW5kZXg6IG51bWJlciB9IHtcclxuICAgIHN3aXRjaCAodGhpcy5kcm9wUG9zaXRpb24pIHtcclxuICAgICAgY2FzZSAnYmVmb3JlJzpcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgcGFyZW50OiB0aGlzLm5vZGUucGFyZW50ISxcclxuICAgICAgICAgIGluZGV4OiB0aGlzLm5vZGUuaW5kZXgsXHJcbiAgICAgICAgfTtcclxuICAgICAgY2FzZSAnYWZ0ZXInOlxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICBwYXJlbnQ6IHRoaXMubm9kZS5wYXJlbnQhLFxyXG4gICAgICAgICAgaW5kZXg6IHRoaXMubm9kZS5pbmRleCArIDEsXHJcbiAgICAgICAgfTtcclxuICAgICAgY2FzZSAnaW5zaWRlJzpcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgcGFyZW50OiB0aGlzLm5vZGUsXHJcbiAgICAgICAgICBpbmRleDogdGhpcy5ub2RlLmNoaWxkcmVuLmxlbmd0aCxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gIH1cclxufSJdfQ==
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// lib/directives/tree-node-template.directive.ts
|
|
2
|
+
import { Directive } from '@angular/core';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class TreeNodeTemplateDirective {
|
|
5
|
+
template;
|
|
6
|
+
constructor(template) {
|
|
7
|
+
this.template = template;
|
|
8
|
+
}
|
|
9
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TreeNodeTemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
10
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: TreeNodeTemplateDirective, isStandalone: true, selector: "[treeNodeTemplate]", ngImport: i0 });
|
|
11
|
+
}
|
|
12
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TreeNodeTemplateDirective, decorators: [{
|
|
13
|
+
type: Directive,
|
|
14
|
+
args: [{
|
|
15
|
+
selector: '[treeNodeTemplate]',
|
|
16
|
+
standalone: true,
|
|
17
|
+
}]
|
|
18
|
+
}], ctorParameters: () => [{ type: i0.TemplateRef }] });
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1ub2RlLXRlbXBsYXRlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbmNlcHRvLXVzZXItY29udHJvbHMvc3JjL2xpYi9jb25jZXB0by10cmVlL2RpcmVjdGl2ZXMvdHJlZS1ub2RlLXRlbXBsYXRlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxpREFBaUQ7QUFDakQsT0FBTyxFQUFFLFNBQVMsRUFBZSxNQUFNLGVBQWUsQ0FBQzs7QUFNdkQsTUFBTSxPQUFPLHlCQUF5QjtJQUNqQjtJQUFuQixZQUFtQixRQUEwQjtRQUExQixhQUFRLEdBQVIsUUFBUSxDQUFrQjtJQUFHLENBQUM7d0dBRHRDLHlCQUF5Qjs0RkFBekIseUJBQXlCOzs0RkFBekIseUJBQXlCO2tCQUpyQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxvQkFBb0I7b0JBQzlCLFVBQVUsRUFBRSxJQUFJO2lCQUNqQiIsInNvdXJjZXNDb250ZW50IjpbIi8vIGxpYi9kaXJlY3RpdmVzL3RyZWUtbm9kZS10ZW1wbGF0ZS5kaXJlY3RpdmUudHNcclxuaW1wb3J0IHsgRGlyZWN0aXZlLCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbdHJlZU5vZGVUZW1wbGF0ZV0nLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUcmVlTm9kZVRlbXBsYXRlRGlyZWN0aXZlIHtcclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgdGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4pIHt9XHJcbn0iXX0=
|