@ali-hm/angular-tree-component 18.0.5 → 19.0.1
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 +2 -1
- package/fesm2022/ali-hm-angular-tree-component.mjs +80 -71
- package/fesm2022/ali-hm-angular-tree-component.mjs.map +1 -1
- package/package.json +4 -6
- package/esm2022/ali-hm-angular-tree-component.mjs +0 -5
- package/esm2022/lib/angular-tree-component.module.mjs +0 -100
- package/esm2022/lib/components/loading.component.mjs +0 -32
- package/esm2022/lib/components/tree-node-checkbox.component.mjs +0 -34
- package/esm2022/lib/components/tree-node-collection.component.mjs +0 -284
- package/esm2022/lib/components/tree-node-content.component.mjs +0 -32
- package/esm2022/lib/components/tree-node-drop-slot.component.mjs +0 -39
- package/esm2022/lib/components/tree-node-expander.component.mjs +0 -43
- package/esm2022/lib/components/tree-node-wrapper.component.mjs +0 -81
- package/esm2022/lib/components/tree-viewport.component.mjs +0 -66
- package/esm2022/lib/components/tree.component.mjs +0 -186
- package/esm2022/lib/constants/events.mjs +0 -20
- package/esm2022/lib/constants/keys.mjs +0 -10
- package/esm2022/lib/defs/api.mjs +0 -2
- package/esm2022/lib/directives/tree-animate-open.directive.mjs +0 -101
- package/esm2022/lib/directives/tree-drag.directive.mjs +0 -65
- package/esm2022/lib/directives/tree-drop.directive.mjs +0 -127
- package/esm2022/lib/mobx-angular/mobx-proxy.mjs +0 -17
- package/esm2022/lib/mobx-angular/tree-mobx-autorun.directive.mjs +0 -40
- package/esm2022/lib/models/tree-dragged-element.model.mjs +0 -25
- package/esm2022/lib/models/tree-node.model.mjs +0 -390
- package/esm2022/lib/models/tree-options.model.mjs +0 -150
- package/esm2022/lib/models/tree-virtual-scroll.model.mjs +0 -197
- package/esm2022/lib/models/tree.model.mjs +0 -546
- package/esm2022/public-api.mjs +0 -5
|
@@ -1,546 +0,0 @@
|
|
|
1
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
-
};
|
|
7
|
-
import { Injectable } from '@angular/core';
|
|
8
|
-
import { observable, computed, action, autorun } from 'mobx';
|
|
9
|
-
import { TreeNode } from './tree-node.model';
|
|
10
|
-
import { TreeOptions } from './tree-options.model';
|
|
11
|
-
import { TREE_EVENTS } from '../constants/events';
|
|
12
|
-
import * as i0 from "@angular/core";
|
|
13
|
-
export class TreeModel {
|
|
14
|
-
constructor() {
|
|
15
|
-
this.options = new TreeOptions();
|
|
16
|
-
this.eventNames = Object.keys(TREE_EVENTS);
|
|
17
|
-
this.expandedNodeIds = {};
|
|
18
|
-
this.selectedLeafNodeIds = {};
|
|
19
|
-
this.activeNodeIds = {};
|
|
20
|
-
this.hiddenNodeIds = {};
|
|
21
|
-
this.focusedNodeId = null;
|
|
22
|
-
this.firstUpdate = true;
|
|
23
|
-
this.subscriptions = [];
|
|
24
|
-
}
|
|
25
|
-
static { this.focusedTree = null; }
|
|
26
|
-
// events
|
|
27
|
-
fireEvent(event) {
|
|
28
|
-
event.treeModel = this;
|
|
29
|
-
this.events[event.eventName].emit(event);
|
|
30
|
-
this.events.event.emit(event);
|
|
31
|
-
}
|
|
32
|
-
subscribe(eventName, fn) {
|
|
33
|
-
const subscription = this.events[eventName].subscribe(fn);
|
|
34
|
-
this.subscriptions.push(subscription);
|
|
35
|
-
}
|
|
36
|
-
// getters
|
|
37
|
-
getFocusedNode() {
|
|
38
|
-
return this.focusedNode;
|
|
39
|
-
}
|
|
40
|
-
getActiveNode() {
|
|
41
|
-
return this.activeNodes[0];
|
|
42
|
-
}
|
|
43
|
-
getActiveNodes() {
|
|
44
|
-
return this.activeNodes;
|
|
45
|
-
}
|
|
46
|
-
getVisibleRoots() {
|
|
47
|
-
return this.virtualRoot.visibleChildren;
|
|
48
|
-
}
|
|
49
|
-
getFirstRoot(skipHidden = false) {
|
|
50
|
-
const root = skipHidden ? this.getVisibleRoots() : this.roots;
|
|
51
|
-
return root != null && root.length ? root[0] : null;
|
|
52
|
-
}
|
|
53
|
-
getLastRoot(skipHidden = false) {
|
|
54
|
-
const root = skipHidden ? this.getVisibleRoots() : this.roots;
|
|
55
|
-
return root != null && root.length ? root[root.length - 1] : null;
|
|
56
|
-
}
|
|
57
|
-
get isFocused() {
|
|
58
|
-
return TreeModel.focusedTree === this;
|
|
59
|
-
}
|
|
60
|
-
isNodeFocused(node) {
|
|
61
|
-
return this.focusedNode === node;
|
|
62
|
-
}
|
|
63
|
-
isEmptyTree() {
|
|
64
|
-
return this.roots && this.roots.length === 0;
|
|
65
|
-
}
|
|
66
|
-
get focusedNode() {
|
|
67
|
-
return this.focusedNodeId ? this.getNodeById(this.focusedNodeId) : null;
|
|
68
|
-
}
|
|
69
|
-
get expandedNodes() {
|
|
70
|
-
const nodes = Object.keys(this.expandedNodeIds)
|
|
71
|
-
.filter((id) => this.expandedNodeIds[id])
|
|
72
|
-
.map((id) => this.getNodeById(id));
|
|
73
|
-
return nodes.filter(Boolean);
|
|
74
|
-
}
|
|
75
|
-
get activeNodes() {
|
|
76
|
-
const nodes = Object.keys(this.activeNodeIds)
|
|
77
|
-
.filter((id) => this.activeNodeIds[id])
|
|
78
|
-
.map((id) => this.getNodeById(id));
|
|
79
|
-
return nodes.filter(Boolean);
|
|
80
|
-
}
|
|
81
|
-
get hiddenNodes() {
|
|
82
|
-
const nodes = Object.keys(this.hiddenNodeIds)
|
|
83
|
-
.filter((id) => this.hiddenNodeIds[id])
|
|
84
|
-
.map((id) => this.getNodeById(id));
|
|
85
|
-
return nodes.filter(Boolean);
|
|
86
|
-
}
|
|
87
|
-
get selectedLeafNodes() {
|
|
88
|
-
const nodes = Object.keys(this.selectedLeafNodeIds)
|
|
89
|
-
.filter((id) => this.selectedLeafNodeIds[id])
|
|
90
|
-
.map((id) => this.getNodeById(id));
|
|
91
|
-
return nodes.filter(Boolean);
|
|
92
|
-
}
|
|
93
|
-
// locating nodes
|
|
94
|
-
getNodeByPath(path, startNode = null) {
|
|
95
|
-
if (!path)
|
|
96
|
-
return null;
|
|
97
|
-
startNode = startNode || this.virtualRoot;
|
|
98
|
-
if (path.length === 0)
|
|
99
|
-
return startNode;
|
|
100
|
-
if (!startNode.children)
|
|
101
|
-
return null;
|
|
102
|
-
const childId = path.shift();
|
|
103
|
-
const childNode = startNode.children.find(c => c.id === childId);
|
|
104
|
-
if (!childNode)
|
|
105
|
-
return null;
|
|
106
|
-
return this.getNodeByPath(path, childNode);
|
|
107
|
-
}
|
|
108
|
-
getNodeById(id) {
|
|
109
|
-
const idStr = id.toString();
|
|
110
|
-
return this.getNodeBy((node) => node.id.toString() === idStr);
|
|
111
|
-
}
|
|
112
|
-
getNodeBy(predicate, startNode = null) {
|
|
113
|
-
startNode = startNode || this.virtualRoot;
|
|
114
|
-
if (!startNode.children)
|
|
115
|
-
return null;
|
|
116
|
-
const found = startNode.children.find(predicate);
|
|
117
|
-
if (found) { // found in children
|
|
118
|
-
return found;
|
|
119
|
-
}
|
|
120
|
-
else { // look in children's children
|
|
121
|
-
for (let child of startNode.children) {
|
|
122
|
-
const foundInChildren = this.getNodeBy(predicate, child);
|
|
123
|
-
if (foundInChildren)
|
|
124
|
-
return foundInChildren;
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
isExpanded(node) {
|
|
129
|
-
return this.expandedNodeIds[node.id];
|
|
130
|
-
}
|
|
131
|
-
isHidden(node) {
|
|
132
|
-
return this.hiddenNodeIds[node.id];
|
|
133
|
-
}
|
|
134
|
-
isActive(node) {
|
|
135
|
-
return this.activeNodeIds[node.id];
|
|
136
|
-
}
|
|
137
|
-
isSelected(node) {
|
|
138
|
-
return this.selectedLeafNodeIds[node.id];
|
|
139
|
-
}
|
|
140
|
-
ngOnDestroy() {
|
|
141
|
-
this.dispose();
|
|
142
|
-
this.unsubscribeAll();
|
|
143
|
-
}
|
|
144
|
-
dispose() {
|
|
145
|
-
// Dispose reactions of the replaced nodes
|
|
146
|
-
if (this.virtualRoot) {
|
|
147
|
-
this.virtualRoot.dispose();
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
unsubscribeAll() {
|
|
151
|
-
this.subscriptions.forEach(subscription => subscription.unsubscribe());
|
|
152
|
-
this.subscriptions = [];
|
|
153
|
-
}
|
|
154
|
-
// actions
|
|
155
|
-
setData({ nodes, options = null, events = null }) {
|
|
156
|
-
if (options) {
|
|
157
|
-
this.options = new TreeOptions(options);
|
|
158
|
-
}
|
|
159
|
-
if (events) {
|
|
160
|
-
this.events = events;
|
|
161
|
-
}
|
|
162
|
-
if (nodes) {
|
|
163
|
-
this.nodes = nodes;
|
|
164
|
-
}
|
|
165
|
-
this.update();
|
|
166
|
-
}
|
|
167
|
-
update() {
|
|
168
|
-
// Rebuild tree:
|
|
169
|
-
let virtualRootConfig = {
|
|
170
|
-
id: this.options.rootId,
|
|
171
|
-
virtual: true,
|
|
172
|
-
[this.options.childrenField]: this.nodes
|
|
173
|
-
};
|
|
174
|
-
this.dispose();
|
|
175
|
-
this.virtualRoot = new TreeNode(virtualRootConfig, null, this, 0);
|
|
176
|
-
this.roots = this.virtualRoot.children;
|
|
177
|
-
// Fire event:
|
|
178
|
-
if (this.firstUpdate) {
|
|
179
|
-
if (this.roots) {
|
|
180
|
-
this.firstUpdate = false;
|
|
181
|
-
this._calculateExpandedNodes();
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
else {
|
|
185
|
-
this.fireEvent({ eventName: TREE_EVENTS.updateData });
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
setFocusedNode(node) {
|
|
189
|
-
this.focusedNodeId = node ? node.id : null;
|
|
190
|
-
}
|
|
191
|
-
setFocus(value) {
|
|
192
|
-
TreeModel.focusedTree = value ? this : null;
|
|
193
|
-
}
|
|
194
|
-
doForAll(fn) {
|
|
195
|
-
this.roots.forEach((root) => root.doForAll(fn));
|
|
196
|
-
}
|
|
197
|
-
focusNextNode() {
|
|
198
|
-
let previousNode = this.getFocusedNode();
|
|
199
|
-
let nextNode = previousNode ? previousNode.findNextNode(true, true) : this.getFirstRoot(true);
|
|
200
|
-
if (nextNode)
|
|
201
|
-
nextNode.focus();
|
|
202
|
-
}
|
|
203
|
-
focusPreviousNode() {
|
|
204
|
-
let previousNode = this.getFocusedNode();
|
|
205
|
-
let nextNode = previousNode ? previousNode.findPreviousNode(true) : this.getLastRoot(true);
|
|
206
|
-
if (nextNode)
|
|
207
|
-
nextNode.focus();
|
|
208
|
-
}
|
|
209
|
-
focusDrillDown() {
|
|
210
|
-
let previousNode = this.getFocusedNode();
|
|
211
|
-
if (previousNode && previousNode.isCollapsed && previousNode.hasChildren) {
|
|
212
|
-
previousNode.toggleExpanded();
|
|
213
|
-
}
|
|
214
|
-
else {
|
|
215
|
-
let nextNode = previousNode ? previousNode.getFirstChild(true) : this.getFirstRoot(true);
|
|
216
|
-
if (nextNode)
|
|
217
|
-
nextNode.focus();
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
focusDrillUp() {
|
|
221
|
-
let previousNode = this.getFocusedNode();
|
|
222
|
-
if (!previousNode)
|
|
223
|
-
return;
|
|
224
|
-
if (previousNode.isExpanded) {
|
|
225
|
-
previousNode.toggleExpanded();
|
|
226
|
-
}
|
|
227
|
-
else {
|
|
228
|
-
let nextNode = previousNode.realParent;
|
|
229
|
-
if (nextNode)
|
|
230
|
-
nextNode.focus();
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
setActiveNode(node, value, multi = false) {
|
|
234
|
-
if (multi) {
|
|
235
|
-
this._setActiveNodeMulti(node, value);
|
|
236
|
-
}
|
|
237
|
-
else {
|
|
238
|
-
this._setActiveNodeSingle(node, value);
|
|
239
|
-
}
|
|
240
|
-
if (value) {
|
|
241
|
-
node.focus(this.options.scrollOnActivate);
|
|
242
|
-
this.fireEvent({ eventName: TREE_EVENTS.activate, node });
|
|
243
|
-
this.fireEvent({ eventName: TREE_EVENTS.nodeActivate, node }); // For IE11
|
|
244
|
-
}
|
|
245
|
-
else {
|
|
246
|
-
this.fireEvent({ eventName: TREE_EVENTS.deactivate, node });
|
|
247
|
-
this.fireEvent({ eventName: TREE_EVENTS.nodeDeactivate, node }); // For IE11
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
setSelectedNode(node, value) {
|
|
251
|
-
this.selectedLeafNodeIds = Object.assign({}, this.selectedLeafNodeIds, { [node.id]: value });
|
|
252
|
-
if (value) {
|
|
253
|
-
node.focus();
|
|
254
|
-
this.fireEvent({ eventName: TREE_EVENTS.select, node });
|
|
255
|
-
}
|
|
256
|
-
else {
|
|
257
|
-
this.fireEvent({ eventName: TREE_EVENTS.deselect, node });
|
|
258
|
-
}
|
|
259
|
-
}
|
|
260
|
-
setExpandedNode(node, value) {
|
|
261
|
-
this.expandedNodeIds = Object.assign({}, this.expandedNodeIds, { [node.id]: value });
|
|
262
|
-
this.fireEvent({ eventName: TREE_EVENTS.toggleExpanded, node, isExpanded: value });
|
|
263
|
-
}
|
|
264
|
-
expandAll() {
|
|
265
|
-
this.roots.forEach((root) => root.expandAll());
|
|
266
|
-
}
|
|
267
|
-
collapseAll() {
|
|
268
|
-
this.roots.forEach((root) => root.collapseAll());
|
|
269
|
-
}
|
|
270
|
-
setIsHidden(node, value) {
|
|
271
|
-
this.hiddenNodeIds = Object.assign({}, this.hiddenNodeIds, { [node.id]: value });
|
|
272
|
-
}
|
|
273
|
-
setHiddenNodeIds(nodeIds) {
|
|
274
|
-
this.hiddenNodeIds = nodeIds.reduce((hiddenNodeIds, id) => Object.assign(hiddenNodeIds, {
|
|
275
|
-
[id]: true
|
|
276
|
-
}), {});
|
|
277
|
-
}
|
|
278
|
-
performKeyAction(node, $event) {
|
|
279
|
-
const keyAction = this.options.actionMapping.keys[$event.keyCode];
|
|
280
|
-
if (keyAction) {
|
|
281
|
-
$event.preventDefault();
|
|
282
|
-
keyAction(this, node, $event);
|
|
283
|
-
return true;
|
|
284
|
-
}
|
|
285
|
-
else {
|
|
286
|
-
return false;
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
filterNodes(filter, autoShow = true) {
|
|
290
|
-
let filterFn;
|
|
291
|
-
if (!filter) {
|
|
292
|
-
return this.clearFilter();
|
|
293
|
-
}
|
|
294
|
-
// support function and string filter
|
|
295
|
-
if (filter && typeof filter.valueOf() === 'string') {
|
|
296
|
-
filterFn = (node) => node.displayField.toLowerCase().indexOf(filter.toLowerCase()) !== -1;
|
|
297
|
-
}
|
|
298
|
-
else if (filter && typeof filter === 'function') {
|
|
299
|
-
filterFn = filter;
|
|
300
|
-
}
|
|
301
|
-
else {
|
|
302
|
-
console.error('Don\'t know what to do with filter', filter);
|
|
303
|
-
console.error('Should be either a string or function');
|
|
304
|
-
return;
|
|
305
|
-
}
|
|
306
|
-
const ids = {};
|
|
307
|
-
this.roots.forEach((node) => this._filterNode(ids, node, filterFn, autoShow));
|
|
308
|
-
this.hiddenNodeIds = ids;
|
|
309
|
-
this.fireEvent({ eventName: TREE_EVENTS.changeFilter });
|
|
310
|
-
}
|
|
311
|
-
clearFilter() {
|
|
312
|
-
this.hiddenNodeIds = {};
|
|
313
|
-
this.fireEvent({ eventName: TREE_EVENTS.changeFilter });
|
|
314
|
-
}
|
|
315
|
-
moveNode(node, to) {
|
|
316
|
-
const fromIndex = node.getIndexInParent();
|
|
317
|
-
const fromParent = node.parent;
|
|
318
|
-
if (!this.canMoveNode(node, to, fromIndex))
|
|
319
|
-
return;
|
|
320
|
-
const fromChildren = fromParent.getField('children');
|
|
321
|
-
// If node doesn't have children - create children array
|
|
322
|
-
if (!to.parent.getField('children')) {
|
|
323
|
-
to.parent.setField('children', []);
|
|
324
|
-
}
|
|
325
|
-
const toChildren = to.parent.getField('children');
|
|
326
|
-
const originalNode = fromChildren.splice(fromIndex, 1)[0];
|
|
327
|
-
// Compensate for index if already removed from parent:
|
|
328
|
-
let toIndex = (fromParent === to.parent && to.index > fromIndex) ? to.index - 1 : to.index;
|
|
329
|
-
toChildren.splice(toIndex, 0, originalNode);
|
|
330
|
-
fromParent.treeModel.update();
|
|
331
|
-
if (to.parent.treeModel !== fromParent.treeModel) {
|
|
332
|
-
to.parent.treeModel.update();
|
|
333
|
-
}
|
|
334
|
-
this.fireEvent({
|
|
335
|
-
eventName: TREE_EVENTS.moveNode,
|
|
336
|
-
node: originalNode,
|
|
337
|
-
to: { parent: to.parent.data, index: toIndex },
|
|
338
|
-
from: { parent: fromParent.data, index: fromIndex }
|
|
339
|
-
});
|
|
340
|
-
}
|
|
341
|
-
copyNode(node, to) {
|
|
342
|
-
const fromIndex = node.getIndexInParent();
|
|
343
|
-
if (!this.canMoveNode(node, to, fromIndex))
|
|
344
|
-
return;
|
|
345
|
-
// If node doesn't have children - create children array
|
|
346
|
-
if (!to.parent.getField('children')) {
|
|
347
|
-
to.parent.setField('children', []);
|
|
348
|
-
}
|
|
349
|
-
const toChildren = to.parent.getField('children');
|
|
350
|
-
const nodeCopy = this.options.getNodeClone(node);
|
|
351
|
-
toChildren.splice(to.index, 0, nodeCopy);
|
|
352
|
-
node.treeModel.update();
|
|
353
|
-
if (to.parent.treeModel !== node.treeModel) {
|
|
354
|
-
to.parent.treeModel.update();
|
|
355
|
-
}
|
|
356
|
-
this.fireEvent({ eventName: TREE_EVENTS.copyNode, node: nodeCopy, to: { parent: to.parent.data, index: to.index } });
|
|
357
|
-
}
|
|
358
|
-
getState() {
|
|
359
|
-
return {
|
|
360
|
-
expandedNodeIds: this.expandedNodeIds,
|
|
361
|
-
selectedLeafNodeIds: this.selectedLeafNodeIds,
|
|
362
|
-
activeNodeIds: this.activeNodeIds,
|
|
363
|
-
hiddenNodeIds: this.hiddenNodeIds,
|
|
364
|
-
focusedNodeId: this.focusedNodeId
|
|
365
|
-
};
|
|
366
|
-
}
|
|
367
|
-
setState(state) {
|
|
368
|
-
if (!state)
|
|
369
|
-
return;
|
|
370
|
-
Object.assign(this, {
|
|
371
|
-
expandedNodeIds: state.expandedNodeIds || {},
|
|
372
|
-
selectedLeafNodeIds: state.selectedLeafNodeIds || {},
|
|
373
|
-
activeNodeIds: state.activeNodeIds || {},
|
|
374
|
-
hiddenNodeIds: state.hiddenNodeIds || {},
|
|
375
|
-
focusedNodeId: state.focusedNodeId
|
|
376
|
-
});
|
|
377
|
-
}
|
|
378
|
-
subscribeToState(fn) {
|
|
379
|
-
autorun(() => fn(this.getState()));
|
|
380
|
-
}
|
|
381
|
-
canMoveNode(node, to, fromIndex = undefined) {
|
|
382
|
-
const fromNodeIndex = fromIndex || node.getIndexInParent();
|
|
383
|
-
// same node:
|
|
384
|
-
if (node.parent === to.parent && fromIndex === to.index) {
|
|
385
|
-
return false;
|
|
386
|
-
}
|
|
387
|
-
return !to.parent.isDescendantOf(node);
|
|
388
|
-
}
|
|
389
|
-
calculateExpandedNodes() {
|
|
390
|
-
this._calculateExpandedNodes();
|
|
391
|
-
}
|
|
392
|
-
// private methods
|
|
393
|
-
_filterNode(ids, node, filterFn, autoShow) {
|
|
394
|
-
// if node passes function then it's visible
|
|
395
|
-
let isVisible = filterFn(node);
|
|
396
|
-
if (node.children) {
|
|
397
|
-
// if one of node's children passes filter then this node is also visible
|
|
398
|
-
node.children.forEach((child) => {
|
|
399
|
-
if (this._filterNode(ids, child, filterFn, autoShow)) {
|
|
400
|
-
isVisible = true;
|
|
401
|
-
}
|
|
402
|
-
});
|
|
403
|
-
}
|
|
404
|
-
// mark node as hidden
|
|
405
|
-
if (!isVisible) {
|
|
406
|
-
ids[node.id] = true;
|
|
407
|
-
}
|
|
408
|
-
// auto expand parents to make sure the filtered nodes are visible
|
|
409
|
-
if (autoShow && isVisible) {
|
|
410
|
-
node.ensureVisible();
|
|
411
|
-
}
|
|
412
|
-
return isVisible;
|
|
413
|
-
}
|
|
414
|
-
_calculateExpandedNodes(startNode = null) {
|
|
415
|
-
startNode = startNode || this.virtualRoot;
|
|
416
|
-
if (startNode.data[this.options.isExpandedField]) {
|
|
417
|
-
this.expandedNodeIds = Object.assign({}, this.expandedNodeIds, { [startNode.id]: true });
|
|
418
|
-
}
|
|
419
|
-
if (startNode.children) {
|
|
420
|
-
startNode.children.forEach((child) => this._calculateExpandedNodes(child));
|
|
421
|
-
}
|
|
422
|
-
}
|
|
423
|
-
_setActiveNodeSingle(node, value) {
|
|
424
|
-
// Deactivate all other nodes:
|
|
425
|
-
this.activeNodes
|
|
426
|
-
.filter((activeNode) => activeNode !== node)
|
|
427
|
-
.forEach((activeNode) => {
|
|
428
|
-
this.fireEvent({ eventName: TREE_EVENTS.deactivate, node: activeNode });
|
|
429
|
-
this.fireEvent({ eventName: TREE_EVENTS.nodeDeactivate, node: activeNode }); // For IE11
|
|
430
|
-
});
|
|
431
|
-
if (value) {
|
|
432
|
-
this.activeNodeIds = { [node.id]: true };
|
|
433
|
-
}
|
|
434
|
-
else {
|
|
435
|
-
this.activeNodeIds = {};
|
|
436
|
-
}
|
|
437
|
-
}
|
|
438
|
-
_setActiveNodeMulti(node, value) {
|
|
439
|
-
this.activeNodeIds = Object.assign({}, this.activeNodeIds, { [node.id]: value });
|
|
440
|
-
}
|
|
441
|
-
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: TreeModel, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
442
|
-
/** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: TreeModel }); }
|
|
443
|
-
}
|
|
444
|
-
__decorate([
|
|
445
|
-
observable
|
|
446
|
-
], TreeModel.prototype, "roots", void 0);
|
|
447
|
-
__decorate([
|
|
448
|
-
observable
|
|
449
|
-
], TreeModel.prototype, "expandedNodeIds", void 0);
|
|
450
|
-
__decorate([
|
|
451
|
-
observable
|
|
452
|
-
], TreeModel.prototype, "selectedLeafNodeIds", void 0);
|
|
453
|
-
__decorate([
|
|
454
|
-
observable
|
|
455
|
-
], TreeModel.prototype, "activeNodeIds", void 0);
|
|
456
|
-
__decorate([
|
|
457
|
-
observable
|
|
458
|
-
], TreeModel.prototype, "hiddenNodeIds", void 0);
|
|
459
|
-
__decorate([
|
|
460
|
-
observable
|
|
461
|
-
], TreeModel.prototype, "focusedNodeId", void 0);
|
|
462
|
-
__decorate([
|
|
463
|
-
observable
|
|
464
|
-
], TreeModel.prototype, "virtualRoot", void 0);
|
|
465
|
-
__decorate([
|
|
466
|
-
computed
|
|
467
|
-
], TreeModel.prototype, "focusedNode", null);
|
|
468
|
-
__decorate([
|
|
469
|
-
computed
|
|
470
|
-
], TreeModel.prototype, "expandedNodes", null);
|
|
471
|
-
__decorate([
|
|
472
|
-
computed
|
|
473
|
-
], TreeModel.prototype, "activeNodes", null);
|
|
474
|
-
__decorate([
|
|
475
|
-
computed
|
|
476
|
-
], TreeModel.prototype, "hiddenNodes", null);
|
|
477
|
-
__decorate([
|
|
478
|
-
computed
|
|
479
|
-
], TreeModel.prototype, "selectedLeafNodes", null);
|
|
480
|
-
__decorate([
|
|
481
|
-
action
|
|
482
|
-
], TreeModel.prototype, "setData", null);
|
|
483
|
-
__decorate([
|
|
484
|
-
action
|
|
485
|
-
], TreeModel.prototype, "update", null);
|
|
486
|
-
__decorate([
|
|
487
|
-
action
|
|
488
|
-
], TreeModel.prototype, "setFocusedNode", null);
|
|
489
|
-
__decorate([
|
|
490
|
-
action
|
|
491
|
-
], TreeModel.prototype, "setFocus", null);
|
|
492
|
-
__decorate([
|
|
493
|
-
action
|
|
494
|
-
], TreeModel.prototype, "doForAll", null);
|
|
495
|
-
__decorate([
|
|
496
|
-
action
|
|
497
|
-
], TreeModel.prototype, "focusNextNode", null);
|
|
498
|
-
__decorate([
|
|
499
|
-
action
|
|
500
|
-
], TreeModel.prototype, "focusPreviousNode", null);
|
|
501
|
-
__decorate([
|
|
502
|
-
action
|
|
503
|
-
], TreeModel.prototype, "focusDrillDown", null);
|
|
504
|
-
__decorate([
|
|
505
|
-
action
|
|
506
|
-
], TreeModel.prototype, "focusDrillUp", null);
|
|
507
|
-
__decorate([
|
|
508
|
-
action
|
|
509
|
-
], TreeModel.prototype, "setActiveNode", null);
|
|
510
|
-
__decorate([
|
|
511
|
-
action
|
|
512
|
-
], TreeModel.prototype, "setSelectedNode", null);
|
|
513
|
-
__decorate([
|
|
514
|
-
action
|
|
515
|
-
], TreeModel.prototype, "setExpandedNode", null);
|
|
516
|
-
__decorate([
|
|
517
|
-
action
|
|
518
|
-
], TreeModel.prototype, "expandAll", null);
|
|
519
|
-
__decorate([
|
|
520
|
-
action
|
|
521
|
-
], TreeModel.prototype, "collapseAll", null);
|
|
522
|
-
__decorate([
|
|
523
|
-
action
|
|
524
|
-
], TreeModel.prototype, "setIsHidden", null);
|
|
525
|
-
__decorate([
|
|
526
|
-
action
|
|
527
|
-
], TreeModel.prototype, "setHiddenNodeIds", null);
|
|
528
|
-
__decorate([
|
|
529
|
-
action
|
|
530
|
-
], TreeModel.prototype, "filterNodes", null);
|
|
531
|
-
__decorate([
|
|
532
|
-
action
|
|
533
|
-
], TreeModel.prototype, "clearFilter", null);
|
|
534
|
-
__decorate([
|
|
535
|
-
action
|
|
536
|
-
], TreeModel.prototype, "moveNode", null);
|
|
537
|
-
__decorate([
|
|
538
|
-
action
|
|
539
|
-
], TreeModel.prototype, "copyNode", null);
|
|
540
|
-
__decorate([
|
|
541
|
-
action
|
|
542
|
-
], TreeModel.prototype, "setState", null);
|
|
543
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: TreeModel, decorators: [{
|
|
544
|
-
type: Injectable
|
|
545
|
-
}], propDecorators: { roots: [], expandedNodeIds: [], selectedLeafNodeIds: [], activeNodeIds: [], hiddenNodeIds: [], focusedNodeId: [], virtualRoot: [], focusedNode: [], expandedNodes: [], activeNodes: [], hiddenNodes: [], selectedLeafNodes: [], setData: [], update: [], setFocusedNode: [], setFocus: [], doForAll: [], focusNextNode: [], focusPreviousNode: [], focusDrillDown: [], focusDrillUp: [], setActiveNode: [], setSelectedNode: [], setExpandedNode: [], expandAll: [], collapseAll: [], setIsHidden: [], setHiddenNodeIds: [], filterNodes: [], clearFilter: [], moveNode: [], copyNode: [], setState: [] } });
|
|
546
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdHJlZS1jb21wb25lbnQvc3JjL2xpYi9tb2RlbHMvdHJlZS5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFN0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUduRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7O0FBR2xELE1BQU0sT0FBTyxTQUFTO0lBRHRCO1FBSUUsWUFBTyxHQUFnQixJQUFJLFdBQVcsRUFBRSxDQUFDO1FBRXpDLGVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBSTFCLG9CQUFlLEdBQXFCLEVBQUUsQ0FBQztRQUN2Qyx3QkFBbUIsR0FBcUIsRUFBRSxDQUFDO1FBQzNDLGtCQUFhLEdBQXFCLEVBQUUsQ0FBQztRQUNyQyxrQkFBYSxHQUFxQixFQUFFLENBQUM7UUFDckMsa0JBQWEsR0FBVyxJQUFJLENBQUM7UUFHakMsZ0JBQVcsR0FBRyxJQUFJLENBQUM7UUFFbkIsa0JBQWEsR0FBbUIsRUFBRSxDQUFDO0tBcWY1QzthQXRnQlEsZ0JBQVcsR0FBRyxJQUFJLEFBQVAsQ0FBUTtJQW1CMUIsU0FBUztJQUNULFNBQVMsQ0FBQyxLQUFLO1FBQ2IsS0FBSyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxD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SUFBUCxNQUFNO3lDQUVOO0FBRU87SUFBUCxNQUFNO3lDQUVOO0FBRU87SUFBUCxNQUFNOzhDQUlOO0FBRU87SUFBUCxNQUFNO2tEQUlOO0FBRU87SUFBUCxNQUFNOytDQVNOO0FBRU87SUFBUCxNQUFNOzZDQVVOO0FBRU87SUFBUCxNQUFNOzhDQWdCTjtBQUVPO0lBQVAsTUFBTTtnREFTTjtBQUVPO0lBQVAsTUFBTTtnREFHTjtBQUVPO0lBQVAsTUFBTTswQ0FFTjtBQUVPO0lBQVAsTUFBTTs0Q0FFTjtBQUVPO0lBQVAsTUFBTTs0Q0FFTjtBQUVPO0lBQVAsTUFBTTtpREFJTjtBQWFPO0lBQVAsTUFBTTs0Q0F3Qk47QUFFTztJQUFQLE1BQU07NENBR047QUFFTztJQUFQLE1BQU07eUNBZ0NOO0FBRU87SUFBUCxNQUFNO3lDQXFCTjtBQVlPO0lBQVAsTUFBTTt5Q0FVTjsyRkF6YlUsU0FBUztrQkFEckIsVUFBVTs4QkFTRyxLQUFLLE1BQ0wsZUFBZSxNQUNmLG1CQUFtQixNQUNuQixhQUFhLE1BQ2IsYUFBYSxNQUNiLGFBQWEsTUFDYixXQUFXLE1BMkRULFdBQVcsTUFJWCxhQUFhLE1BUWIsV0FBVyxNQVFYLFdBQVcsTUFRWCxpQkFBaUIsTUFrRnZCLE9BQU8sTUFjUCxNQUFNLE1BMEJOLGNBQWMsTUFJZCxRQUFRLE1BSVIsUUFBUSxNQUlSLGFBQWEsTUFNYixpQkFBaUIsTUFNakIsY0FBYyxNQVdkLFlBQVksTUFZWixhQUFhLE1Ba0JiLGVBQWUsTUFXZixlQUFlLE1BS2YsU0FBUyxNQUlULFdBQVcsTUFJWCxXQUFXLE1BSVgsZ0JBQWdCLE1BaUJoQixXQUFXLE1BMEJYLFdBQVcsTUFLWCxRQUFRLE1Ba0NSLFFBQVEsTUFpQ1IsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBvYnNlcnZhYmxlLCBjb21wdXRlZCwgYWN0aW9uLCBhdXRvcnVuIH0gZnJvbSAnbW9ieCc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBUcmVlTm9kZSB9IGZyb20gJy4vdHJlZS1ub2RlLm1vZGVsJztcclxuaW1wb3J0IHsgVHJlZU9wdGlvbnMgfSBmcm9tICcuL3RyZWUtb3B0aW9ucy5tb2RlbCc7XHJcbmltcG9ydCB7IFRyZWVWaXJ0dWFsU2Nyb2xsIH0gZnJvbSAnLi90cmVlLXZpcnR1YWwtc2Nyb2xsLm1vZGVsJztcclxuaW1wb3J0IHsgSVRyZWVNb2RlbCwgSURUeXBlLCBJRFR5cGVEaWN0aW9uYXJ5IH0gZnJvbSAnLi4vZGVmcy9hcGknO1xyXG5pbXBvcnQgeyBUUkVFX0VWRU5UUyB9IGZyb20gJy4uL2NvbnN0YW50cy9ldmVudHMnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgVHJlZU1vZGVsIGltcGxlbWVudHMgSVRyZWVNb2RlbCwgT25EZXN0cm95IHtcclxuICBzdGF0aWMgZm9jdXNlZFRyZWUgPSBudWxsO1xyXG5cclxuICBvcHRpb25zOiBUcmVlT3B0aW9ucyA9IG5ldyBUcmVlT3B0aW9ucygpO1xyXG4gIG5vZGVzOiBhbnlbXTtcclxuICBldmVudE5hbWVzID0gT2JqZWN0LmtleXMoVFJFRV9FVkVOVFMpO1xyXG4gIHZpcnR1YWxTY3JvbGw6IFRyZWVWaXJ0dWFsU2Nyb2xsO1xyXG5cclxuICBAb2JzZXJ2YWJsZSByb290czogVHJlZU5vZGVbXTtcclxuICBAb2JzZXJ2YWJsZSBleHBhbmRlZE5vZGVJZHM6IElEVHlwZURpY3Rpb25hcnkgPSB7fTtcclxuICBAb2JzZXJ2YWJsZSBzZWxlY3RlZExlYWZOb2RlSWRzOiBJRFR5cGVEaWN0aW9uYXJ5ID0ge307XHJcbiAgQG9ic2VydmFibGUgYWN0aXZlTm9kZUlkczogSURUeXBlRGljdGlvbmFyeSA9IHt9O1xyXG4gIEBvYnNlcnZhYmxlIGhpZGRlbk5vZGVJZHM6IElEVHlwZURpY3Rpb25hcnkgPSB7fTtcclxuICBAb2JzZXJ2YWJsZSBmb2N1c2VkTm9kZUlkOiBJRFR5cGUgPSBudWxsO1xyXG4gIEBvYnNlcnZhYmxlIHZpcnR1YWxSb290OiBUcmVlTm9kZTtcclxuXHJcbiAgcHJpdmF0ZSBmaXJzdFVwZGF0ZSA9IHRydWU7XHJcbiAgcHJpdmF0ZSBldmVudHM6IGFueTtcclxuICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XHJcblxyXG4gIC8vIGV2ZW50c1xyXG4gIGZpcmVFdmVudChldmVudCkge1xyXG4gICAgZXZlbnQudHJlZU1vZGVsID0gdGhpcztcclxuICAgIHRoaXMuZXZlbnRzW2V2ZW50LmV2ZW50TmFtZV0uZW1pdChldmVudCk7XHJcbiAgICB0aGlzLmV2ZW50cy5ldmVudC5lbWl0KGV2ZW50KTtcclxuICB9XHJcblxyXG4gIHN1YnNjcmliZShldmVudE5hbWUsIGZuKSB7XHJcbiAgICBjb25zdCBzdWJzY3JpcHRpb24gPSB0aGlzLmV2ZW50c1tldmVudE5hbWVdLnN1YnNjcmliZShmbik7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChzdWJzY3JpcHRpb24pO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vIGdldHRlcnNcclxuICBnZXRGb2N1c2VkTm9kZSgpOiBUcmVlTm9kZSB7XHJcbiAgICByZXR1cm4gdGhpcy5mb2N1c2VkTm9kZTtcclxuICB9XHJcblxyXG5cclxuICBnZXRBY3RpdmVOb2RlKCk6IFRyZWVOb2RlIHtcclxuICAgIHJldHVybiB0aGlzLmFjdGl2ZU5vZGVzWzBdO1xyXG4gIH1cclxuXHJcbiAgZ2V0QWN0aXZlTm9kZXMoKTogVHJlZU5vZGVbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5hY3RpdmVOb2RlcztcclxuICB9XHJcblxyXG4gIGdldFZpc2libGVSb290cygpIHtcclxuICAgIHJldHVybiB0aGlzLnZpcnR1YWxSb290LnZpc2libGVDaGlsZHJlbjtcclxuICB9XHJcblxyXG4gIGdldEZpcnN0Um9vdChza2lwSGlkZGVuID0gZmFsc2UpIHtcclxuICAgIGNvbnN0IHJvb3QgPSBza2lwSGlkZGVuID8gdGhpcy5nZXRWaXNpYmxlUm9vdHMoKSA6IHRoaXMucm9vdHM7XHJcbiAgICByZXR1cm4gcm9vdCAhPSBudWxsICYmIHJvb3QubGVuZ3RoID8gcm9vdFswXSA6IG51bGw7XHJcbiAgfVxyXG5cclxuICBnZXRMYXN0Um9vdChza2lwSGlkZGVuID0gZmFsc2UpIHtcclxuICAgIGNvbnN0IHJvb3QgPSBza2lwSGlkZGVuID8gdGhpcy5nZXRWaXNpYmxlUm9vdHMoKSA6IHRoaXMucm9vdHM7XHJcbiAgICByZXR1cm4gcm9vdCAhPSBudWxsICYmIHJvb3QubGVuZ3RoID8gcm9vdFtyb290Lmxlbmd0aCAtIDFdIDogbnVsbDtcclxuICB9XHJcblxyXG4gIGdldCBpc0ZvY3VzZWQoKSB7XHJcbiAgICByZXR1cm4gVHJlZU1vZGVsLmZvY3VzZWRUcmVlID09PSB0aGlzO1xyXG4gIH1cclxuXHJcbiAgaXNOb2RlRm9jdXNlZChub2RlKSB7XHJcbiAgICByZXR1cm4gdGhpcy5mb2N1c2VkTm9kZSA9PT0gbm9kZTtcclxuICB9XHJcblxyXG4gIGlzRW1wdHlUcmVlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMucm9vdHMgJiYgdGhpcy5yb290cy5sZW5ndGggPT09IDA7XHJcbiAgfVxyXG5cclxuICBAY29tcHV0ZWQgZ2V0IGZvY3VzZWROb2RlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9jdXNlZE5vZGVJZCA/IHRoaXMuZ2V0Tm9kZUJ5SWQodGhpcy5mb2N1c2VkTm9kZUlkKSA6IG51bGw7XHJcbiAgfVxyXG5cclxuICBAY29tcHV0ZWQgZ2V0IGV4cGFuZGVkTm9kZXMoKSB7XHJcbiAgICBjb25zdCBub2RlcyA9IE9iamVjdC5rZXlzKHRoaXMuZXhwYW5kZWROb2RlSWRzKVxyXG4gICAgICAuZmlsdGVyKChpZCkgPT4gdGhpcy5leHBhbmRlZE5vZGVJZHNbaWRdKVxyXG4gICAgICAubWFwKChpZCkgPT4gdGhpcy5nZXROb2RlQnlJZChpZCkpO1xyXG5cclxuICAgIHJldHVybiBub2Rlcy5maWx0ZXIoQm9vbGVhbik7XHJcbiAgfVxyXG5cclxuICBAY29tcHV0ZWQgZ2V0IGFjdGl2ZU5vZGVzKCkge1xyXG4gICAgY29uc3Qgbm9kZXMgPSBPYmplY3Qua2V5cyh0aGlzLmFjdGl2ZU5vZGVJZHMpXHJcbiAgICAgIC5maWx0ZXIoKGlkKSA9PiB0aGlzLmFjdGl2ZU5vZGVJZHNbaWRdKVxyXG4gICAgICAubWFwKChpZCkgPT4gdGhpcy5nZXROb2RlQnlJZChpZCkpO1xyXG5cclxuICAgIHJldHVybiBub2Rlcy5maWx0ZXIoQm9vbGVhbik7XHJcbiAgfVxyXG5cclxuICBAY29tcHV0ZWQgZ2V0IGhpZGRlbk5vZGVzKCkge1xyXG4gICAgY29uc3Qgbm9kZXMgPSBPYmplY3Qua2V5cyh0aGlzLmhpZGRlbk5vZGVJZHMpXHJcbiAgICAgICAgLmZpbHRlcigoaWQpID0+IHRoaXMuaGlkZGVuTm9kZUlkc1tpZF0pXHJcbiAgICAgICAgLm1hcCgoaWQpID0+IHRoaXMuZ2V0Tm9kZUJ5SWQoaWQpKTtcclxuXHJcbiAgICByZXR1cm4gbm9kZXMuZmlsdGVyKEJvb2xlYW4pO1xyXG4gIH1cclxuXHJcbiAgQGNvbXB1dGVkIGdldCBzZWxlY3RlZExlYWZOb2RlcygpIHtcclxuICAgIGNvbnN0IG5vZGVzID0gT2JqZWN0LmtleXModGhpcy5zZWxlY3RlZExlYWZOb2RlSWRzKVxyXG4gICAgICAgIC5maWx0ZXIoKGlkKSA9PiB0aGlzLnNlbGVjdGVkTGVhZk5vZGVJZHNbaWRdKVxyXG4gICAgICAgIC5tYXAoKGlkKSA9PiB0aGlzLmdldE5vZGVCeUlkKGlkKSk7XHJcblxyXG4gICAgcmV0dXJuIG5vZGVzLmZpbHRlcihCb29sZWFuKTtcclxuICB9XHJcblxyXG4gIC8vIGxvY2F0aW5nIG5vZGVzXHJcbiAgZ2V0Tm9kZUJ5UGF0aChwYXRoOiBhbnlbXSwgc3RhcnROb2RlPSBudWxsKTogVHJlZU5vZGUge1xyXG4gICAgaWYgKCFwYXRoKSByZXR1cm4gbnVsbDtcclxuXHJcbiAgICBzdGFydE5vZGUgPSBzdGFydE5vZGUgfHwgdGhpcy52aXJ0dWFsUm9vdDtcclxuICAgIGlmIChwYXRoLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHN0YXJ0Tm9kZTtcclxuXHJcbiAgICBpZiAoIXN0YXJ0Tm9kZS5jaGlsZHJlbikgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgY29uc3QgY2hpbGRJZCA9IHBhdGguc2hpZnQoKTtcclxuICAgIGNvbnN0IGNoaWxkTm9kZSA9IHN0YXJ0Tm9kZS5jaGlsZHJlbi5maW5kKGMgPT4gYy5pZCA9PT0gY2hpbGRJZCk7XHJcblxyXG4gICAgaWYgKCFjaGlsZE5vZGUpIHJldHVybiBudWxsO1xyXG5cclxuICAgIHJldHVybiB0aGlzLmdldE5vZGVCeVBhdGgocGF0aCwgY2hpbGROb2RlKTtcclxuICB9XHJcblxyXG4gIGdldE5vZGVCeUlkKGlkKSB7XHJcbiAgICBjb25zdCBpZFN0ciA9IGlkLnRvU3RyaW5nKCk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuZ2V0Tm9kZUJ5KChub2RlKSA9PiBub2RlLmlkLnRvU3RyaW5nKCkgPT09IGlkU3RyKTtcclxuICB9XHJcblxyXG4gIGdldE5vZGVCeShwcmVkaWNhdGUsIHN0YXJ0Tm9kZSA9IG51bGwpIHtcclxuICAgIHN0YXJ0Tm9kZSA9IHN0YXJ0Tm9kZSB8fCB0aGlzLnZpcnR1YWxSb290O1xyXG5cclxuICAgIGlmICghc3RhcnROb2RlLmNoaWxkcmVuKSByZXR1cm4gbnVsbDtcclxuXHJcbiAgICBjb25zdCBmb3VuZCA9IHN0YXJ0Tm9kZS5jaGlsZHJlbi5maW5kKHByZWRpY2F0ZSk7XHJcblxyXG4gICAgaWYgKGZvdW5kKSB7IC8vIGZvdW5kIGluIGNoaWxkcmVuXHJcbiAgICAgIHJldHVybiBmb3VuZDtcclxuICAgIH0gZWxzZSB7IC8vIGxvb2sgaW4gY2hpbGRyZW4ncyBjaGlsZHJlblxyXG4gICAgICBmb3IgKGxldCBjaGlsZCBvZiBzdGFydE5vZGUuY2hpbGRyZW4pIHtcclxuICAgICAgICBjb25zdCBmb3VuZEluQ2hpbGRyZW4gPSB0aGlzLmdldE5vZGVCeShwcmVkaWNhdGUsIGNoaWxkKTtcclxuICAgICAgICBpZiAoZm91bmRJbkNoaWxkcmVuKSByZXR1cm4gZm91bmRJbkNoaWxkcmVuO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpc0V4cGFuZGVkKG5vZGUpIHtcclxuICAgIHJldHVybiB0aGlzLmV4cGFuZGVkTm9kZUlkc1tub2RlLmlkXTtcclxuICB9XHJcblxyXG4gIGlzSGlkZGVuKG5vZGUpIHtcclxuICAgIHJldHVybiB0aGlzLmhpZGRlbk5vZGVJZHNbbm9kZS5pZF07XHJcbiAgfVxyXG5cclxuICBpc0FjdGl2ZShub2RlKSB7XHJcbiAgICByZXR1cm4gdGhpcy5hY3RpdmVOb2RlSWRzW25vZGUuaWRdO1xyXG4gIH1cclxuXHJcbiAgaXNTZWxlY3RlZChub2RlKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZExlYWZOb2RlSWRzW25vZGUuaWRdO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLmRpc3Bvc2UoKTtcclxuICAgIHRoaXMudW5zdWJzY3JpYmVBbGwoKTtcclxuICB9XHJcblxyXG4gIGRpc3Bvc2UoKSB7XHJcbiAgICAvLyBEaXNwb3NlIHJlYWN0aW9ucyBvZiB0aGUgcmVwbGFjZWQgbm9kZXNcclxuICAgIGlmICh0aGlzLnZpcnR1YWxSb290KSB7XHJcbiAgICAgIHRoaXMudmlydHVhbFJvb3QuZGlzcG9zZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdW5zdWJzY3JpYmVBbGwoKSB7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChzdWJzY3JpcHRpb24gPT4gc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkpO1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zID0gW107XHJcbiAgfVxyXG5cclxuICAvLyBhY3Rpb25zXHJcbiAgQGFjdGlvbiBzZXREYXRhKHsgbm9kZXMsIG9wdGlvbnMgPSBudWxsLCBldmVudHMgPSBudWxsIH06IHtub2RlczogYW55LCBvcHRpb25zOiBhbnksIGV2ZW50czogYW55fSkge1xyXG4gICAgaWYgKG9wdGlvbnMpIHtcclxuICAgICAgdGhpcy5vcHRpb25zID0gbmV3IFRyZWVPcHRpb25zKG9wdGlvbnMpO1xyXG4gICAgfVxyXG4gICAgaWYgKGV2ZW50cykge1xyXG4gICAgICB0aGlzLmV2ZW50cyA9IGV2ZW50cztcclxuICAgIH1cclxuICAgIGlmIChub2Rlcykge1xyXG4gICAgICB0aGlzLm5vZGVzID0gbm9kZXM7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy51cGRhdGUoKTtcclxuICB9XHJcblxyXG4gIEBhY3Rpb24gdXBkYXRlKCkge1xyXG4gICAgLy8gUmVidWlsZCB0cmVlOlxyXG4gICAgbGV0IHZpcnR1YWxSb290Q29uZmlnID0ge1xyXG4gICAgICBpZDogdGhpcy5vcHRpb25zLnJvb3RJZCxcclxuICAgICAgdmlydHVhbDogdHJ1ZSxcclxuICAgICAgW3RoaXMub3B0aW9ucy5jaGlsZHJlbkZpZWxkXTogdGhpcy5ub2Rlc1xyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmRpc3Bvc2UoKTtcclxuXHJcbiAgICB0aGlzLnZpcnR1YWxSb290ID0gbmV3IFRyZWVOb2RlKHZpcnR1YWxSb290Q29uZmlnLCBudWxsLCB0aGlzLCAwKTtcclxuXHJcbiAgICB0aGlzLnJvb3RzID0gdGhpcy52aXJ0dWFsUm9vdC5jaGlsZHJlbjtcclxuXHJcbiAgICAvLyBGaXJlIGV2ZW50OlxyXG4gICAgaWYgKHRoaXMuZmlyc3RVcGRhdGUpIHtcclxuICAgICAgaWYgKHRoaXMucm9vdHMpIHtcclxuICAgICAgICB0aGlzLmZpcnN0VXBkYXRlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5fY2FsY3VsYXRlRXhwYW5kZWROb2RlcygpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZpcmVFdmVudCh7IGV2ZW50TmFtZTogVFJFRV9FVkVOVFMudXBkYXRlRGF0YSB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBAYWN0aW9uIHNldEZvY3VzZWROb2RlKG5vZGUpIHtcclxuICAgIHRoaXMuZm9jdXNlZE5vZGVJZCA9IG5vZGUgPyBub2RlLmlkIDogbnVsbDtcclxuICB9XHJcblxyXG4gIEBhY3Rpb24gc2V0Rm9jdXModmFsdWUpIHtcclxuICAgIFRyZWVNb2RlbC5mb2N1c2VkVHJlZSA9IHZhbHVlID8gdGhpcyA6IG51bGw7XHJcbiAgfVxyXG5cclxuICBAYWN0aW9uIGRvRm9yQWxsKGZuKSB7XHJcbiAgICB0aGlzLnJvb3RzLmZvckVhY2goKHJvb3QpID0+IHJvb3QuZG9Gb3JBbGwoZm4pKTtcclxuICB9XHJcblxyXG4gIEBhY3Rpb24gZm9jdXNOZXh0Tm9kZSgpIHtcclxuICAgIGxldCBwcmV2aW91c05vZGUgPSB0aGlzLmdldEZvY3VzZWROb2RlKCk7XHJcbiAgICBsZXQgbmV4dE5vZGUgPSBwcmV2aW91c05vZGUgPyBwcmV2aW91c05vZGUuZmluZE5leHROb2RlKHRydWUsIHRydWUpIDogdGhpcy5nZXRGaXJzdFJvb3QodHJ1ZSk7XHJcbiAgICBpZiAobmV4dE5vZGUpIG5leHROb2RlLmZvY3VzKCk7XHJcbiAgfVxyXG5cclxuICBAYWN0aW9uIGZvY3VzUHJldmlvdXNOb2RlKCkge1xyXG4gICAgbGV0IHByZXZpb3VzTm9kZSA9IHRoaXMuZ2V0Rm9jdXNlZE5vZGUoKTtcclxuICAgIGxldCBuZXh0Tm9kZSA9IHByZXZpb3VzTm9kZSA/IHByZXZpb3VzTm9kZS5maW5kUHJldmlvdXNOb2RlKHRydWUpIDogdGhpcy5nZXRMYXN0Um9vdCh0cnVlKTtcclxuICAgIGlmIChuZXh0Tm9kZSkgbmV4dE5vZGUuZm9jdXMoKTtcclxuICB9XHJcblxyXG4gIEBhY3Rpb24gZm9jdXNEcmlsbERvd24oKSB7XHJcbiAgICBsZXQgcHJldmlvdXNOb2RlID0gdGhpcy5nZXRGb2N1c2VkTm9kZSgpO1xyXG4gICAgaWYgKHByZXZpb3VzTm9kZSAmJiBwcmV2aW91c05vZGUuaXNDb2xsYXBzZWQgJiYgcHJldmlvdXNOb2RlLmhhc0NoaWxkcmVuKSB7XHJcbiAgICAgIHByZXZpb3VzTm9kZS50b2dnbGVFeHBhbmRlZCgpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCBuZXh0Tm9kZSA9IHByZXZpb3VzTm9kZSA/IHByZXZpb3VzTm9kZS5nZXRGaXJzdENoaWxkKHRydWUpIDogdGhpcy5nZXRGaXJzdFJvb3QodHJ1ZSk7XHJcbiAgICAgIGlmIChuZXh0Tm9kZSkgbmV4dE5vZGUuZm9jdXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBhY3Rpb24gZm9jdXNEcmlsbFVwKCkge1xyXG4gICAgbGV0IHByZXZpb3VzTm9kZSA9IHRoaXMuZ2V0Rm9jdXNlZE5vZGUoKTtcclxuICAgIGlmICghcHJldmlvdXNOb2RlKSByZXR1cm47XHJcbiAgICBpZiAocHJldmlvdXNOb2RlLmlzRXhwYW5kZWQpIHtcclxuICAgICAgcHJldmlvdXNOb2RlLnRvZ2dsZUV4cGFuZGVkKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgbGV0IG5leHROb2RlID0gcHJldmlvdXNOb2RlLnJlYWxQYXJlbnQ7XHJcbiAgICAgIGlmIChuZXh0Tm9kZSkgbmV4dE5vZGUuZm9jdXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBhY3Rpb24gc2V0QWN0aXZlTm9kZShub2RlLCB2YWx1ZSwgbXVsdGkgPSBmYWxzZSkge1xyXG4gICAgaWYgKG11bHRpKSB7XHJcbiAgICAgIHRoaXMuX3NldEFjdGl2ZU5vZGVNdWx0aShub2RlLCB2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5fc2V0QWN0aXZlTm9kZVNpbmdsZShub2RlLCB2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgIG5vZGUuZm9jdXModGhpcy5vcHRpb25zLnNjcm9sbE9uQWN0aXZhdGUpO1xyXG4gICAgICB0aGlzLmZpcmVFdmVudCh7IGV2ZW50TmFtZTogVFJFRV9FVkVOVFMuYWN0aXZhdGUsIG5vZGUgfSk7XHJcbiAgICAgIHRoaXMuZmlyZUV2ZW50KHsgZXZlbnROYW1lOiBUUkVFX0VWRU5UUy5ub2RlQWN0aXZhdGUsIG5vZGUgfSk7IC8vIEZvciBJRTExXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZpcmVFdmVudCh7IGV2ZW50TmFtZTogVFJFRV9FVkVOVFMuZGVhY3RpdmF0ZSwgbm9kZSB9KTtcclxuICAgICAgdGhpcy5maXJlRXZlbnQoeyBldmVudE5hbWU6IFRSRUVfRVZFTlRTLm5vZGVEZWFjdGl2YXRlLCBub2RlIH0pOyAvLyBGb3IgSUUxMVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQGFjdGlvbiBzZXRTZWxlY3RlZE5vZGUobm9kZSwgdmFsdWUpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRMZWFmTm9kZUlkcyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuc2VsZWN0ZWRMZWFmTm9kZUlkcywge1tub2RlLmlkXTogdmFsdWV9KTtcclxuXHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgbm9kZS5mb2N1cygpO1xyXG4gICAgICB0aGlzLmZpcmVFdmVudCh7IGV2ZW50TmFtZTogVFJFRV9FVkVOVFMuc2VsZWN0LCBub2RlIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5maXJlRXZlbnQoeyBldmVudE5hbWU6IFRSRUVfRVZFTlRTLmRlc2VsZWN0LCBub2RlIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQGFjdGlvbiBzZXRFeHBhbmRlZE5vZGUobm9kZSwgdmFsdWUpIHtcclxuICAgIHRoaXMuZXhwYW5kZWROb2RlSWRzID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5leHBhbmRlZE5vZGVJZHMsIHtbbm9kZS5pZF06IHZhbHVlfSk7XHJcbiAgICB0aGlzLmZpcmVFdmVudCh7IGV2ZW50TmFtZTogVFJFRV9FVkVOVFMudG9nZ2xlRXhwYW5kZWQsIG5vZGUsIGlzRXhwYW5kZWQ6IHZhbHVlIH0pO1xyXG4gIH1cclxuXHJcbiAgQGFjdGlvbiBleHBhbmRBbGwoKSB7XHJcbiAgICB0aGlzLnJvb3RzLmZvckVhY2goKHJvb3QpID0+IHJvb3QuZXhwYW5kQWxsKCkpO1xyXG4gIH1cclxuXHJcbiAgQGFjdGlvbiBjb2xsYXBzZUFsbCgpIHtcclxuICAgIHRoaXMucm9vdHMuZm9yRWFjaCgocm9vdCkgPT4gcm9vdC5jb2xsYXBzZUFsbCgpKTtcclxuICB9XHJcblxyXG4gIEBhY3Rpb24gc2V0SXNIaWRkZW4obm9kZSwgdmFsdWUpIHtcclxuICAgIHRoaXMuaGlkZGVuTm9kZUlkcyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuaGlkZGVuTm9kZUlkcywge1tub2RlLmlkXTogdmFsdWV9KTtcclxuICB9XHJcblxyXG4gIEBhY3Rpb24gc2V0SGlkZGVuTm9kZUlkcyhub2RlSWRzKSB7XHJcbiAgICB0aGlzLmhpZGRlbk5vZGVJZHMgPSBub2RlSWRzLnJlZHVjZSgoaGlkZGVuTm9kZUlkcywgaWQpID0+IE9iamVjdC5hc3NpZ24oaGlkZGVuTm9kZUlkcywge1xyXG4gICAgICBbaWRdOiB0cnVlXHJcbiAgICB9KSwge30pO1xyXG4gIH1cclxuXHJcbiAgcGVyZm9ybUtleUFjdGlvbihub2RlLCAkZXZlbnQpIHtcclxuICAgIGNvbnN0IGtleUFjdGlvbiA9IHRoaXMub3B0aW9ucy5hY3Rpb25NYXBwaW5nLmtleXNbJGV2ZW50LmtleUNvZGVdO1xyXG4gICAgaWYgKGtleUFjdGlvbikge1xyXG4gICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAga2V5QWN0aW9uKHRoaXMsIG5vZGUsICRldmVudCk7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQGFjdGlvbiBmaWx0ZXJOb2RlcyhmaWx0ZXIsIGF1dG9TaG93ID0gdHJ1ZSkge1xyXG4gICAgbGV0IGZpbHRlckZuO1xyXG5cclxuICAgIGlmICghZmlsdGVyKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNsZWFyRmlsdGVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gc3VwcG9ydCBmdW5jdGlvbiBhbmQgc3RyaW5nIGZpbHRlclxyXG4gICAgaWYgKGZpbHRlciAmJiB0eXBlb2YgZmlsdGVyLnZhbHVlT2YoKSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgZmlsdGVyRm4gPSAobm9kZSkgPT4gbm9kZS5kaXNwbGF5RmllbGQudG9Mb3dlckNhc2UoKS5pbmRleE9mKGZpbHRlci50b0xvd2VyQ2FzZSgpKSAhPT0gLTE7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChmaWx0ZXIgJiYgdHlwZW9mIGZpbHRlciA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgZmlsdGVyRm4gPSBmaWx0ZXI7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgY29uc29sZS5lcnJvcignRG9uXFwndCBrbm93IHdoYXQgdG8gZG8gd2l0aCBmaWx0ZXInLCBmaWx0ZXIpO1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdTaG91bGQgYmUgZWl0aGVyIGEgc3RyaW5nIG9yIGZ1bmN0aW9uJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBpZHMgPSB7fTtcclxuICAgIHRoaXMucm9vdHMuZm9yRWFjaCgobm9kZSkgPT4gdGhpcy5fZmlsdGVyTm9kZShpZHMsIG5vZGUsIGZpbHRlckZuLCBhdXRvU2hvdykpO1xyXG4gICAgdGhpcy5oaWRkZW5Ob2RlSWRzID0gaWRzO1xyXG4gICAgdGhpcy5maXJlRXZlbnQoeyBldmVudE5hbWU6IFRSRUVfRVZFTlRTLmNoYW5nZUZpbHRlciB9KTtcclxuICB9XHJcblxyXG4gIEBhY3Rpb24gY2xlYXJGaWx0ZXIoKSB7XHJcbiAgICB0aGlzLmhpZGRlbk5vZGVJZHMgPSB7fTtcclxuICAgIHRoaXMuZmlyZUV2ZW50KHsgZXZlbnROYW1lOiBUUkVFX0VWRU5UUy5jaGFuZ2VGaWx0ZXIgfSk7XHJcbiAgfVxyXG5cclxuICBAYWN0aW9uIG1vdmVOb2RlKG5vZGUsIHRvKSB7XHJcbiAgICBjb25zdCBmcm9tSW5kZXggPSBub2RlLmdldEluZGV4SW5QYXJlbnQoKTtcclxuICAgIGNvbnN0IGZyb21QYXJlbnQgPSBub2RlLnBhcmVudDtcclxuXHJcbiAgICBpZiAoIXRoaXMuY2FuTW92ZU5vZGUobm9kZSwgdG8sIGZyb21JbmRleCkpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBmcm9tQ2hpbGRyZW4gPSBmcm9tUGFyZW50LmdldEZpZWxkKCdjaGlsZHJlbicpO1xyXG5cclxuICAgIC8vIElmIG5vZGUgZG9lc24ndCBoYXZlIGNoaWxkcmVuIC0gY3JlYXRlIGNoaWxkcmVuIGFycmF5XHJcbiAgICBpZiAoIXRvLnBhcmVudC5nZXRGaWVsZCgnY2hpbGRyZW4nKSkge1xyXG4gICAgICB0by5wYXJlbnQuc2V0RmllbGQoJ2NoaWxkcmVuJywgW10pO1xyXG4gICAgfVxyXG4gICAgY29uc3QgdG9DaGlsZHJlbiA9IHRvLnBhcmVudC5nZXRGaWVsZCgnY2hpbGRyZW4nKTtcclxuXHJcbiAgICBjb25zdCBvcmlnaW5hbE5vZGUgPSBmcm9tQ2hpbGRyZW4uc3BsaWNlKGZyb21JbmRleCwgMSlbMF07XHJcblxyXG4gICAgLy8gQ29tcGVuc2F0ZSBmb3IgaW5kZXggaWYgYWxyZWFkeSByZW1vdmVkIGZyb20gcGFyZW50OlxyXG4gICAgbGV0IHRvSW5kZXggPSAoZnJvbVBhcmVudCA9PT0gdG8ucGFyZW50ICYmIHRvLmluZGV4ID4gZnJvbUluZGV4KSA/IHRvLmluZGV4IC0gMSA6IHRvLmluZGV4O1xyXG5cclxuICAgIHRvQ2hpbGRyZW4uc3BsaWNlKHRvSW5kZXgsIDAsIG9yaWdpbmFsTm9kZSk7XHJcblxyXG4gICAgZnJvbVBhcmVudC50cmVlTW9kZWwudXBkYXRlKCk7XHJcbiAgICBpZiAodG8ucGFyZW50LnRyZWVNb2RlbCAhPT0gZnJvbVBhcmVudC50cmVlTW9kZWwpIHtcclxuICAgICAgdG8ucGFyZW50LnRyZWVNb2RlbC51cGRhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZpcmVFdmVudCh7XHJcbiAgICAgIGV2ZW50TmFtZTogVFJFRV9FVkVOVFMubW92ZU5vZGUsXHJcbiAgICAgIG5vZGU6IG9yaWdpbmFsTm9kZSxcclxuICAgICAgdG86IHsgcGFyZW50OiB0by5wYXJlbnQuZGF0YSwgaW5kZXg6IHRvSW5kZXggfSxcclxuICAgICAgZnJvbTogeyBwYXJlbnQ6IGZyb21QYXJlbnQuZGF0YSwgaW5kZXg6IGZyb21JbmRleH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgQGFjdGlvbiBjb3B5Tm9kZShub2RlLCB0bykge1xyXG4gICAgY29uc3QgZnJvbUluZGV4ID0gbm9kZS5nZXRJbmRleEluUGFyZW50KCk7XHJcblxyXG4gICAgaWYgKCF0aGlzLmNhbk1vdmVOb2RlKG5vZGUsIHRvLCBmcm9tSW5kZXgpKSByZXR1cm47XHJcblxyXG4gICAgLy8gSWYgbm9kZSBkb2Vzbid0IGhhdmUgY2hpbGRyZW4gLSBjcmVhdGUgY2hpbGRyZW4gYXJyYXlcclxuICAgIGlmICghdG8ucGFyZW50LmdldEZpZWxkKCdjaGlsZHJlbicpKSB7XHJcbiAgICAgIHRvLnBhcmVudC5zZXRGaWVsZCgnY2hpbGRyZW4nLCBbXSk7XHJcbiAgICB9XHJcbiAgICBjb25zdCB0b0NoaWxkcmVuID0gdG8ucGFyZW50LmdldEZpZWxkKCdjaGlsZHJlbicpO1xyXG5cclxuICAgIGNvbnN0IG5vZGVDb3B5ID0gdGhpcy5vcHRpb25zLmdldE5vZGVDbG9uZShub2RlKTtcclxuXHJcbiAgICB0b0NoaWxkcmVuLnNwbGljZSh0by5pbmRleCwgMCwgbm9kZUNvcHkpO1xyXG5cclxuICAgIG5vZGUudHJlZU1vZGVsLnVwZGF0ZSgpO1xyXG4gICAgaWYgKHRvLnBhcmVudC50cmVlTW9kZWwgIT09IG5vZGUudHJlZU1vZGVsKSB7XHJcbiAgICAgIHRvLnBhcmVudC50cmVlTW9kZWwudXBkYXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5maXJlRXZlbnQoeyBldmVudE5hbWU6IFRSRUVfRVZFTlRTLmNvcHlOb2RlLCBub2RlOiBub2RlQ29weSwgdG86IHsgcGFyZW50OiB0by5wYXJlbnQuZGF0YSwgaW5kZXg6IHRvLmluZGV4IH0gfSk7XHJcbiAgfVxyXG5cclxuICBnZXRTdGF0ZSgpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGV4cGFuZGVkTm9kZUlkczogdGhpcy5leHBhbmRlZE5vZGVJZHMsXHJcbiAgICAgIHNlbGVjdGVkTGVhZk5vZGVJZHM6IHRoaXMuc2VsZWN0ZWRMZWFmTm9kZUlkcyxcclxuICAgICAgYWN0aXZlTm9kZUlkczogdGhpcy5hY3RpdmVOb2RlSWRzLFxyXG4gICAgICBoaWRkZW5Ob2RlSWRzOiB0aGlzLmhpZGRlbk5vZGVJZHMsXHJcbiAgICAgIGZvY3VzZWROb2RlSWQ6IHRoaXMuZm9jdXNlZE5vZGVJZFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIEBhY3Rpb24gc2V0U3RhdGUoc3RhdGUpIHtcclxuICAgIGlmICghc3RhdGUpIHJldHVybjtcclxuXHJcbiAgICBPYmplY3QuYXNzaWduKHRoaXMsIHtcclxuICAgICAgZXhwYW5kZWROb2RlSWRzOiBzdGF0ZS5leHBhbmRlZE5vZGVJZHMgfHwge30sXHJcbiAgICAgIHNlbGVjdGVkTGVhZk5vZGVJZHM6IHN0YXRlLnNlbGVjdGVkTGVhZk5vZGVJZHMgfHwge30sXHJcbiAgICAgIGFjdGl2ZU5vZGVJZHM6IHN0YXRlLmFjdGl2ZU5vZGVJZHMgfHwge30sXHJcbiAgICAgIGhpZGRlbk5vZGVJZHM6IHN0YXRlLmhpZGRlbk5vZGVJZHMgfHwge30sXHJcbiAgICAgIGZvY3VzZWROb2RlSWQ6IHN0YXRlLmZvY3VzZWROb2RlSWRcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc3Vic2NyaWJlVG9TdGF0ZShmbikge1xyXG4gICAgYXV0b3J1bigoKSA9PiBmbih0aGlzLmdldFN0YXRlKCkpKTtcclxuICB9XHJcblxyXG4gIGNhbk1vdmVOb2RlKG5vZGUsIHRvLCBmcm9tSW5kZXggPSB1bmRlZmluZWQpIHtcclxuICAgIGNvbnN0IGZyb21Ob2RlSW5kZXggPSBmcm9tSW5kZXggfHwgbm9kZS5nZXRJbmRleEluUGFyZW50KCk7XHJcblxyXG4gICAgLy8gc2FtZSBub2RlOlxyXG4gICAgaWYgKG5vZGUucGFyZW50ID09PSB0by5wYXJlbnQgJiYgZnJvbUluZGV4ID09PSB0by5pbmRleCkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuICF0by5wYXJlbnQuaXNEZXNjZW5kYW50T2Yobm9kZSk7XHJcbiAgfVxyXG5cclxuICBjYWxjdWxhdGVFeHBhbmRlZE5vZGVzKCkge1xyXG4gICAgICB0aGlzLl9jYWxjdWxhdGVFeHBhbmRlZE5vZGVzKCk7XHJcbiAgfVxyXG5cclxuICAvLyBwcml2YXRlIG1ldGhvZHNcclxuICBwcml2YXRlIF9maWx0ZXJOb2RlKGlkcywgbm9kZSwgZmlsdGVyRm4sIGF1dG9TaG93KSB7XHJcbiAgICAvLyBpZiBub2RlIHBhc3NlcyBmdW5jdGlvbiB0aGVuIGl0J3MgdmlzaWJsZVxyXG4gICAgbGV0IGlzVmlzaWJsZSA9IGZpbHRlckZuKG5vZGUpO1xyXG5cclxuICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XHJcbiAgICAgIC8vIGlmIG9uZSBvZiBub2RlJ3MgY2hpbGRyZW4gcGFzc2VzIGZpbHRlciB0aGVuIHRoaXMgbm9kZSBpcyBhbHNvIHZpc2libGVcclxuICAgICAgbm9kZS5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLl9maWx0ZXJOb2RlKGlkcywgY2hpbGQsIGZpbHRlckZuLCBhdXRvU2hvdykpIHtcclxuICAgICAgICAgIGlzVmlzaWJsZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBtYXJrIG5vZGUgYXMgaGlkZGVuXHJcbiAgICBpZiAoIWlzVmlzaWJsZSkge1xyXG4gICAgICBpZHNbbm9kZS5pZF0gPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgLy8gYXV0byBleHBhbmQgcGFyZW50cyB0byBtYWtlIHN1cmUgdGhlIGZpbHRlcmVkIG5vZGVzIGFyZSB2aXNpYmxlXHJcbiAgICBpZiAoYXV0b1Nob3cgJiYgaXNWaXNpYmxlKSB7XHJcbiAgICAgIG5vZGUuZW5zdXJlVmlzaWJsZSgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGlzVmlzaWJsZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NhbGN1bGF0ZUV4cGFuZGVkTm9kZXMoc3RhcnROb2RlID0gbnVsbCkge1xyXG4gICAgc3RhcnROb2RlID0gc3RhcnROb2RlIHx8IHRoaXMudmlydHVhbFJvb3Q7XHJcblxyXG4gICAgaWYgKHN0YXJ0Tm9kZS5kYXRhW3RoaXMub3B0aW9ucy5pc0V4cGFuZGVkRmllbGRdKSB7XHJcbiAgICAgIHRoaXMuZXhwYW5kZWROb2RlSWRzID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5leHBhbmRlZE5vZGVJZHMsIHtbc3RhcnROb2RlLmlkXTogdHJ1ZX0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHN0YXJ0Tm9kZS5jaGlsZHJlbikge1xyXG4gICAgICBzdGFydE5vZGUuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpID0+IHRoaXMuX2NhbGN1bGF0ZUV4cGFuZGVkTm9kZXMoY2hpbGQpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NldEFjdGl2ZU5vZGVTaW5nbGUobm9kZSwgdmFsdWUpIHtcclxuICAgIC8vIERlYWN0aXZhdGUgYWxsIG90aGVyIG5vZGVzOlxyXG4gICAgdGhpcy5hY3RpdmVOb2Rlc1xyXG4gICAgICAuZmlsdGVyKChhY3RpdmVOb2RlKSA9PiBhY3RpdmVOb2RlICE9PSBub2RlKVxyXG4gICAgICAuZm9yRWFjaCgoYWN0aXZlTm9kZSkgPT4ge1xyXG4gICAgICAgIHRoaXMuZmlyZUV2ZW50KHsgZXZlbnROYW1lOiBUUkVFX0VWRU5UUy5kZWFjdGl2YXRlLCBub2RlOiBhY3RpdmVOb2RlIH0pO1xyXG4gICAgICAgIHRoaXMuZmlyZUV2ZW50KHsgZXZlbnROYW1lOiBUUkVFX0VWRU5UUy5ub2RlRGVhY3RpdmF0ZSwgbm9kZTogYWN0aXZlTm9kZSB9KTsgLy8gRm9yIElFMTFcclxuICAgICAgfSk7XHJcblxyXG4gICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgIHRoaXMuYWN0aXZlTm9kZUlkcyA9IHtbbm9kZS5pZF06IHRydWV9O1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuYWN0aXZlTm9kZUlkcyA9IHt9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2V0QWN0aXZlTm9kZU11bHRpKG5vZGUsIHZhbHVlKSB7XHJcbiAgICB0aGlzLmFjdGl2ZU5vZGVJZHMgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmFjdGl2ZU5vZGVJZHMsIHtbbm9kZS5pZF06IHZhbHVlfSk7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
|
package/esm2022/public-api.mjs
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Public API Surface of angular-tree-component
|
|
3
|
-
*/
|
|
4
|
-
export * from './lib/angular-tree-component.module';
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdHJlZS1jb21wb25lbnQvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLHFDQUFxQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIGFuZ3VsYXItdHJlZS1jb21wb25lbnRcclxuICovXHJcblxyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9hbmd1bGFyLXRyZWUtY29tcG9uZW50Lm1vZHVsZSc7XHJcbiJdfQ==
|