@wavemaker/app-ng-runtime 11.4.0-next.24577 → 11.4.0-next.24579

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.
@@ -0,0 +1,314 @@
1
+ import { Component, Injector, ViewEncapsulation } from '@angular/core';
2
+ import { APPLY_STYLES_TYPE, getOrderedDataset, provideAsWidgetRef, StylableComponent, styler } from '@wm/components/base';
3
+ import { registerProps } from './tree.props';
4
+ const WIDGET_INFO = { widgetType: 'wm-tree', hostClass: 'app-tree' };
5
+ const defaultTreeIconClass = 'plus-minus';
6
+ export class TreeComponent extends StylableComponent {
7
+ constructor(inj) {
8
+ super(inj, WIDGET_INFO);
9
+ this.setting = {
10
+ data: {
11
+ simpleData: {
12
+ enable: true
13
+ },
14
+ },
15
+ view: {
16
+ dblClickExpand: false,
17
+ fontCss: {
18
+ 'font-awesome': true
19
+ },
20
+ switchIcon: {},
21
+ },
22
+ check: {},
23
+ callback: {}
24
+ };
25
+ styler(this.nativeElement, this, APPLY_STYLES_TYPE.CONTAINER);
26
+ }
27
+ onPropertyChange(key, nv, ov) {
28
+ switch (key) {
29
+ case 'dataset':
30
+ this.nodes = this.getNodes(nv);
31
+ if (this.level > 0) {
32
+ this.expandTree(this.level, this.nodes, 0);
33
+ }
34
+ this.renderTree();
35
+ break;
36
+ case 'levels':
37
+ if (nv > 0) {
38
+ this.level = nv;
39
+ }
40
+ break;
41
+ case 'treeicons':
42
+ this.treeicon = nv;
43
+ break;
44
+ case 'nodelabel':
45
+ this.nodelabel = nv;
46
+ break;
47
+ case 'icon':
48
+ this.nodeicon = nv;
49
+ case 'orderby':
50
+ this.renderTree();
51
+ break;
52
+ case 'class':
53
+ this.treeClass = nv;
54
+ break;
55
+ default:
56
+ super.onPropertyChange(key, nv, ov);
57
+ break;
58
+ }
59
+ }
60
+ // expands the tree nodes if the property is selected.
61
+ expandTree(level, node, childLevel) {
62
+ node.map(childNode => {
63
+ if ("children" in childNode && !("open" in childNode) && childLevel < level) {
64
+ childNode["open"] = true;
65
+ this.expandTree(level, childNode.children, childLevel + 1);
66
+ }
67
+ else {
68
+ childLevel = 0;
69
+ return;
70
+ }
71
+ });
72
+ }
73
+ // sets the template for the tree based on the property selected.
74
+ setTreeTemplate(value) {
75
+ if (value === 'Classic') {
76
+ this.setting.check["enable"] = false;
77
+ }
78
+ else if (value === 'Checkbox') {
79
+ this.setting.check["enable"] = true;
80
+ this.setting.check["chkStyle"] = 'checkbox';
81
+ }
82
+ else if (value === 'Radio') {
83
+ this.setting.check["enable"] = true;
84
+ this.setting.check["chkStyle"] = 'radio';
85
+ this.setting.check["radioType"] = "all";
86
+ }
87
+ }
88
+ // extracts nodes from string format
89
+ getNodesFromString(value) {
90
+ return value.split(',').map((item) => {
91
+ return {
92
+ 'name': item && item.trim()
93
+ };
94
+ });
95
+ }
96
+ // gets the nodes and orders the nodes if required
97
+ getNodes(newVal) {
98
+ let nodes;
99
+ if (_.isArray(newVal)) {
100
+ nodes = getOrderedDataset(newVal, this.orderby);
101
+ }
102
+ else if (_.isObject(newVal)) {
103
+ nodes = [newVal];
104
+ }
105
+ else if (_.isString(newVal) && !_.isEmpty(newVal)) {
106
+ newVal = newVal.trim();
107
+ if (newVal) {
108
+ nodes = this.getNodesFromString(newVal);
109
+ }
110
+ }
111
+ return nodes;
112
+ }
113
+ // adds class to the nodes inorder to add icons to respective node.
114
+ setNodeclasses(treeId, treeNode) {
115
+ return treeNode.icon ? { add: [`${treeNode.icon}`] } : '';
116
+ }
117
+ ;
118
+ // Sets the node label with any icon if bound to
119
+ setNodeData(nodes, depth, level, parentNode, type) {
120
+ if (depth === 0) {
121
+ nodes.map(node => {
122
+ if (node.children) {
123
+ this.setNodeData(node.children, depth, level, parentNode, type);
124
+ }
125
+ if (node.icon && this.nodelabel == 'icon') {
126
+ node[type] = node.icon;
127
+ }
128
+ else if (node.name && this.nodelabel == 'name') {
129
+ node[type] = node.name;
130
+ }
131
+ else {
132
+ return;
133
+ }
134
+ });
135
+ }
136
+ else {
137
+ nodes.map(node => {
138
+ if (node.children && level > 1) {
139
+ if (depth === level) {
140
+ parentNode = node;
141
+ }
142
+ this.setNodeData(node.children, depth, level - 1, parentNode, type);
143
+ }
144
+ if (level === 1 && (type === "name" ? this.nodelabel.includes("label") || this.nodelabel.includes("name") : this.nodeicon.includes("label") || this.nodeicon.includes("name"))) {
145
+ parentNode[type] = node.name || node.label;
146
+ return;
147
+ }
148
+ else if (level === 1 && (node.icon !== undefined) && (type === "name" ? this.nodelabel.includes("icon") : this.nodeicon.includes("icon"))) {
149
+ parentNode[type] = node.icon;
150
+ return;
151
+ }
152
+ else {
153
+ return;
154
+ }
155
+ });
156
+ }
157
+ }
158
+ // adds tree icons to the nodes on load of the tree
159
+ changeTreeIcons(nv) {
160
+ let eleClose = $('ul[name="' + this.name + '"] li span.button.switch');
161
+ $(eleClose).map((idx, ele) => {
162
+ $(ele).addClass(nv);
163
+ $(ele).on("click", function (e) {
164
+ setTimeout(() => {
165
+ $(ele).addClass(nv);
166
+ }, 0);
167
+ });
168
+ });
169
+ }
170
+ getPath(treeNode, path) {
171
+ if (treeNode.getParentNode() === null) {
172
+ path = "/" + treeNode.name + path;
173
+ }
174
+ else {
175
+ path = this.getPath(treeNode.getParentNode(), path) + "/" + treeNode.name;
176
+ }
177
+ return path;
178
+ }
179
+ // binds the click event to all nodes to open the child nodes
180
+ onClick(event, treeId, treeNode, clickFlag) {
181
+ var treeObj = $.fn.zTree.getZTreeObj(`${this.name}`);
182
+ if (this.nodeclick === 'expand') {
183
+ treeObj.expandNode(treeNode, treeNode.open ? false : true, false, true);
184
+ this.changeTreeIcons(this.treeicon || defaultTreeIconClass);
185
+ let path = this.getPath(treeNode, "");
186
+ const eventParams = {
187
+ '$event': event,
188
+ "$item": treeNode,
189
+ "$path": path
190
+ };
191
+ this.invokeEventCallback('select', eventParams);
192
+ if (treeNode.open) {
193
+ // this.invokeEventCallback('expand', eventParams);
194
+ }
195
+ else {
196
+ this.invokeEventCallback('collapse', eventParams);
197
+ }
198
+ }
199
+ }
200
+ // Adds tree icon classes to child nodes when expanded
201
+ onExpand(event, treeId, treeNode) {
202
+ let self = this;
203
+ treeNode.children ? treeNode.children.map((el) => {
204
+ if (el.isParent) {
205
+ let ele = $(`#${el.tId}_switch`);
206
+ $(ele).addClass(self.treeicon || defaultTreeIconClass);
207
+ $(ele).on("click", function (e) {
208
+ setTimeout(() => {
209
+ $(ele).addClass(self.treeicon || defaultTreeIconClass);
210
+ }, 0);
211
+ });
212
+ }
213
+ }) : '';
214
+ }
215
+ // function to support backward compatibility of objects
216
+ modifyObjects(array) {
217
+ array.forEach(obj => {
218
+ if (obj.label !== undefined) {
219
+ obj.name = obj.label;
220
+ delete obj.label;
221
+ }
222
+ if (obj.children !== undefined) {
223
+ this.modifyObjects(obj.children);
224
+ }
225
+ });
226
+ return array;
227
+ }
228
+ // sets the node children property to parent nodes
229
+ setNodeChildren(nodes, depth, level, parentNode) {
230
+ if (depth <= 0) {
231
+ return nodes;
232
+ }
233
+ for (let i = 0; i < nodes.length; i++) {
234
+ const node = nodes[i];
235
+ if (depth === level) {
236
+ parentNode = nodes[i];
237
+ }
238
+ if (node.children && node.children.length > 0) {
239
+ if (level === 1) {
240
+ parentNode.children = node.children.map(child => ({ name: child.name, children: child === null || child === void 0 ? void 0 : child.children }));
241
+ return;
242
+ }
243
+ else {
244
+ this.setNodeChildren(node.children, depth, level - 1, parentNode);
245
+ }
246
+ }
247
+ }
248
+ return nodes;
249
+ }
250
+ countDepth(str) {
251
+ const regex = /\[.*?\]/g;
252
+ let matches = str.match(regex);
253
+ let count = 1;
254
+ if (matches === null)
255
+ return count;
256
+ for (let match of matches) {
257
+ count++;
258
+ }
259
+ return count;
260
+ }
261
+ // Renders the tree on to the dom
262
+ renderTree() {
263
+ if (this.nodes) {
264
+ this.nativeElement.setAttribute('id', this.name);
265
+ this.nodes = this.modifyObjects(this.nodes);
266
+ this.setTreeTemplate(this.treeClass);
267
+ if (this.nodelabel) {
268
+ let depth = 0;
269
+ if (this.nodelabel.includes("children")) {
270
+ depth = this.countDepth(this.nodelabel);
271
+ }
272
+ this.setNodeData(this.nodes, depth, depth, null, "name");
273
+ }
274
+ if (this.nodeicon) {
275
+ let depth = 0;
276
+ if (this.nodeicon.includes("children")) {
277
+ depth = this.countDepth(this.nodeicon);
278
+ }
279
+ this.setNodeData(this.nodes, depth, depth, null, "icon");
280
+ }
281
+ if (this.nodechildren) {
282
+ let depth = this.countDepth(this.nodechildren);
283
+ if (depth > 1) {
284
+ this.nodes = this.setNodeChildren(this.nodes, depth, depth, null);
285
+ }
286
+ }
287
+ }
288
+ this.setting.view['nodeClasses'] = this.setNodeclasses;
289
+ this.setting.callback["onClick"] = this.onClick.bind(this);
290
+ this.setting.callback["onExpand"] = this.onExpand.bind(this);
291
+ let zTree = $.fn.zTree.init($('ul[name="' + this.name + '"]'), this.setting, this.nodes);
292
+ $.fn.zTreeKeyboardNavigation(zTree, $('ul[name="' + this.name + '"]'), null, this.treeicon || defaultTreeIconClass);
293
+ }
294
+ ngAfterViewInit() {
295
+ setTimeout(() => {
296
+ this.changeTreeIcons(this.treeicon || defaultTreeIconClass);
297
+ }, 200);
298
+ }
299
+ }
300
+ TreeComponent.initializeProps = registerProps();
301
+ TreeComponent.decorators = [
302
+ { type: Component, args: [{
303
+ selector: 'ul[wmTree]',
304
+ template: "<ul #wmTree class=\"ztree\" id=\"ztree\"></ul> ",
305
+ providers: [
306
+ provideAsWidgetRef(TreeComponent)
307
+ ],
308
+ encapsulation: ViewEncapsulation.None
309
+ },] }
310
+ ];
311
+ TreeComponent.ctorParameters = () => [
312
+ { type: Injector }
313
+ ];
314
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvYmFzaWMvdHJlZS9zcmMvdHJlZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxRQUFRLEVBQVUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHOUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzFILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFJN0MsTUFBTSxXQUFXLEdBQUcsRUFBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUMsQ0FBQztBQUNuRSxNQUFNLG9CQUFvQixHQUFHLFlBQVksQ0FBQztBQVUxQyxNQUFNLE9BQU8sYUFBYyxTQUFRLGlCQUFpQjtJQW1DaEQsWUFDSSxHQUFhO1FBRWIsS0FBSyxDQUFDLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQztRQXhCcEIsWUFBTyxHQUFHO1lBQ2QsSUFBSSxFQUFFO2dCQUNGLFVBQVUsRUFBRTtvQkFDUixNQUFNLEVBQUUsSUFBSTtpQkFDZjthQUNKO1lBQ0QsSUFBSSxFQUFFO2dCQUNGLGNBQWMsRUFBRSxLQUFLO2dCQUNyQixPQUFPLEVBQUU7b0JBQ0wsY0FBYyxFQUFFLElBQUk7aUJBQ3JCO2dCQUNILFVBQVUsRUFBRSxFQUVYO2FBQ0o7WUFDRCxLQUFLLEVBQUUsRUFDTjtZQUNELFFBQVEsRUFBRSxFQUNUO1NBQ0osQ0FBQztRQU1FLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRU0sZ0JBQWdCLENBQUMsR0FBVyxF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SSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV6RixDQUFDLENBQUMsRUFBRSxDQUFDLHVCQUF1QixDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLElBQUksb0JBQW9CLENBQUMsQ0FBQztJQUV4SCxDQUFDO0lBRUQsZUFBZTtRQUNYLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksb0JBQW9CLENBQUMsQ0FBQztRQUNoRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDWixDQUFDOztBQTFVTSw2QkFBZSxHQUFHLGFBQWEsRUFBRSxDQUFDOztZQVQ1QyxTQUFTLFNBQUM7Z0JBQ1AsUUFBUSxFQUFFLFlBQVk7Z0JBQ3RCLDREQUFvQztnQkFDcEMsU0FBUyxFQUFFO29CQUNQLGtCQUFrQixDQUFDLGFBQWEsQ0FBQztpQkFDcEM7Z0JBQ0QsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7YUFDeEM7OztZQWxCa0IsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBJbmplY3RvciwgT25Jbml0LCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5cbmltcG9ydCB7IEFQUExZX1NUWUxFU19UWVBFLCBnZXRPcmRlcmVkRGF0YXNldCwgcHJvdmlkZUFzV2lkZ2V0UmVmLCBTdHlsYWJsZUNvbXBvbmVudCwgc3R5bGVyIH0gZnJvbSAnQHdtL2NvbXBvbmVudHMvYmFzZSc7XG5pbXBvcnQgeyByZWdpc3RlclByb3BzIH0gZnJvbSAnLi90cmVlLnByb3BzJztcbiBcbmRlY2xhcmUgY29uc3QgXywgJDtcblxuY29uc3QgV0lER0VUX0lORk8gPSB7d2lkZ2V0VHlwZTogJ3dtLXRyZWUnLCBob3N0Q2xhc3M6ICdhcHAtdHJlZSd9O1xuY29uc3QgZGVmYXVsdFRyZWVJY29uQ2xhc3MgPSAncGx1cy1taW51cyc7XG5cbkBDb21wb25lbnQoeyBcbiAgICBzZWxlY3RvcjogJ3VsW3dtVHJlZV0nLCBcbiAgICB0ZW1wbGF0ZVVybDogJy4vdHJlZS5jb21wb25lbnQuaHRtbCcsIFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBwcm92aWRlQXNXaWRnZXRSZWYoVHJlZUNvbXBvbmVudClcbiAgICBdLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pICBcbmV4cG9ydCBjbGFzcyBUcmVlQ29tcG9uZW50IGV4dGVuZHMgU3R5bGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIHN0YXRpYyBpbml0aWFsaXplUHJvcHMgPSByZWdpc3RlclByb3BzKCk7XG5cbiAgICBwcml2YXRlIG5vZGVzO1xuICAgIHByaXZhdGUgbGV2ZWw7XG4gICAgcHJpdmF0ZSBvcmRlcmJ5O1xuICAgIHByaXZhdGUgbm9kZWxhYmVsO1xuICAgIHByaXZhdGUgdHJlZWljb247XG4gICAgcHJpdmF0ZSBub2RlY2hpbGRyZW47XG4gICAgcHJpdmF0ZSBub2RlY2xpY2s7XG4gICAgcHJpdmF0ZSB0cmVlQ2xhc3M7XG4gICAgcHJpdmF0ZSBub2RlaWNvbjtcbiAgICBwcml2YXRlIG5hbWU7XG5cbiAgICBwcml2YXRlIHNldHRpbmcgPSB7XG4gICAgICAgIGRhdGE6IHsgXG4gICAgICAgICAgICBzaW1wbGVEYXRhOiB7XG4gICAgICAgICAgICAgICAgZW5hYmxlOiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB2aWV3OiB7XG4gICAgICAgICAgICBkYmxDbGlja0V4cGFuZDogZmFsc2UsXG4gICAgICAgICAgICBmb250Q3NzOiB7XG4gICAgICAgICAgICAgICAgJ2ZvbnQtYXdlc29tZSc6IHRydWVcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHN3aXRjaEljb246IHtcbiAgICBcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sIFxuICAgICAgICBjaGVjazogeyBcbiAgICAgICAgfSxcbiAgICAgICAgY2FsbGJhY2s6IHtcbiAgICAgICAgfVxuICAgIH07XG4gICAgXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIGluajogSW5qZWN0b3JcbiAgICApIHtcbiAgICAgICAgc3VwZXIoaW5qLCBXSURHRVRfSU5GTyk7XG4gICAgICAgIHN0eWxlcih0aGlzLm5hdGl2ZUVsZW1lbnQsIHRoaXMsIEFQUExZX1NUWUxFU19UWVBFLkNPTlRBSU5FUik7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUHJvcGVydHlDaGFuZ2Uoa2V5OiBzdHJpbmcsIG52OiBhbnksIG92PzogYW55KTogdm9pZCB7XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdkYXRhc2V0JzogXG4gICAgICAgICAgICAgICAgdGhpcy5ub2RlcyA9IHRoaXMuZ2V0Tm9kZXMobnYpO1xuICAgICAgICAgICAgICAgIGlmKHRoaXMubGV2ZWwgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwYW5kVHJlZSh0aGlzLmxldmVsLCB0aGlzLm5vZGVzLCAwKTtcbiAgICAgICAgICAgICAgICB9ICBcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlclRyZWUoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2xldmVscyc6XG4gICAgICAgICAgICAgICAgaWYgKG52ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxldmVsID0gbnY7IFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3RyZWVpY29ucyc6XG4gICAgICAgICAgICAgICAgdGhpcy50cmVlaWNvbiA9IG52O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbm9kZWxhYmVsJzpcbiAgICAgICAgICAgICAgICB0aGlzLm5vZGVsYWJlbCA9IG52O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaWNvbic6XG4gICAgICAgICAgICAgICAgdGhpcy5ub2RlaWNvbiA9IG52O1xuICAgICAgICAgICAgY2FzZSAnb3JkZXJieSc6XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJUcmVlKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdjbGFzcyc6XG4gICAgICAgICAgICAgICAgdGhpcy50cmVlQ2xhc3MgPSBudjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgc3VwZXIub25Qcm9wZXJ0eUNoYW5nZShrZXksIG52LCBvdik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBleHBhbmRzIHRoZSB0cmVlIG5vZGVzIGlmIHRoZSBwcm9wZXJ0eSBpcyBzZWxlY3RlZC5cbiAgICBwcml2YXRlIGV4cGFuZFRyZWUobGV2ZWwsIG5vZGUsIGNoaWxkTGV2ZWwpIHtcbiAgICAgICAgbm9kZS5tYXAoY2hpbGROb2RlID0+IHtcbiAgICAgICAgICAgIGlmIChcImNoaWxkcmVuXCIgaW4gY2hpbGROb2RlICYmICEoXCJvcGVuXCIgaW4gY2hpbGROb2RlKSAmJiBjaGlsZExldmVsIDwgbGV2ZWwpIHtcbiAgICAgICAgICAgICAgICBjaGlsZE5vZGVbXCJvcGVuXCJdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmV4cGFuZFRyZWUobGV2ZWwsIGNoaWxkTm9kZS5jaGlsZHJlbiwgY2hpbGRMZXZlbCsxKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2hpbGRMZXZlbCA9IDA7XG4gICAgICAgICAgICAgICAgcmV0dXJuOyBcbiAgICAgICAgICAgIH0gXG4gICAgICAgIH0pICAgXG4gICAgfVxuIFxuICAgIC8vIHNldHMgdGhlIHRlbXBsYXRlIGZvciB0aGUgdHJlZSBiYXNlZCBvbiB0aGUgcHJvcGVydHkgc2VsZWN0ZWQuXG4gICAgcHJpdmF0ZSBzZXRUcmVlVGVtcGxhdGUodmFsdWUpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSAnQ2xhc3NpYycpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5jaGVja1tcImVuYWJsZVwiXSA9IGZhbHNlO1xuICAgICAgICB9IGVsc2UgaWYodmFsdWUgPT09ICdDaGVja2JveCcpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5jaGVja1tcImVuYWJsZVwiXSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuY2hlY2tbXCJjaGtTdHlsZVwiXSA9ICdjaGVja2JveCc7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09ICdSYWRpbycpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5jaGVja1tcImVuYWJsZVwiXSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuY2hlY2tbXCJjaGtTdHlsZVwiXSA9ICdyYWRpbyc7XG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuY2hlY2tbXCJyYWRpb1R5cGVcIl0gPSBcImFsbFwiO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gZXh0cmFjdHMgbm9kZXMgZnJvbSBzdHJpbmcgZm9ybWF0XG4gICAgcHJpdmF0ZSBnZXROb2Rlc0Zyb21TdHJpbmcodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLnNwbGl0KCcsJykubWFwKChpdGVtKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICduYW1lJzogaXRlbSAmJiBpdGVtLnRyaW0oKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gZ2V0cyB0aGUgbm9kZXMgYW5kIG9yZGVycyB0aGUgbm9kZXMgaWYgcmVxdWlyZWQgXG4gICAgcHJpdmF0ZSBnZXROb2RlcyhuZXdWYWwpIHtcbiAgICAgICAgbGV0IG5vZGVzO1xuICAgICAgICBpZiAoXy5pc0FycmF5KG5ld1ZhbCkpIHtcbiAgICAgICAgICAgIG5vZGVzID0gZ2V0T3JkZXJlZERhdGFzZXQobmV3VmFsLCB0aGlzLm9yZGVyYnkpO1xuICAgICAgICB9IGVsc2UgaWYgKF8uaXNPYmplY3QobmV3VmFsKSkge1xuICAgICAgICAgICAgbm9kZXMgPSBbbmV3VmFsXTtcbiAgICAgICAgfSBlbHNlIGlmIChfLmlzU3RyaW5nKG5ld1ZhbCkgJiYgIV8uaXNFbXB0eShuZXdWYWwpKSB7XG4gICAgICAgICAgICBuZXdWYWwgPSBuZXdWYWwudHJpbSgpO1xuICAgICAgICAgICAgaWYgKG5ld1ZhbCkge1xuICAgICAgICAgICAgICAgIG5vZGVzID0gdGhpcy5nZXROb2Rlc0Zyb21TdHJpbmcobmV3VmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBcbiAgICAgICAgcmV0dXJuIG5vZGVzO1xuICAgIH1cblxuXG4gICAgLy8gYWRkcyBjbGFzcyB0byB0aGUgbm9kZXMgaW5vcmRlciB0byBhZGQgaWNvbnMgdG8gcmVzcGVjdGl2ZSBub2RlLlxuICAgIHByaXZhdGUgc2V0Tm9kZWNsYXNzZXModHJlZUlkLCB0cmVlTm9kZSkge1xuICAgICAgICByZXR1cm4gdHJlZU5vZGUuaWNvbiA/IHthZGQ6IFtgJHt0cmVlTm9kZS5pY29ufWBdfSA6ICcnO1xuICAgIH07XG5cbiAgICAvLyBTZXRzIHRoZSBub2RlIGxhYmVsIHdpdGggYW55IGljb24gaWYgYm91bmQgdG9cbiAgICBwcml2YXRlIHNldE5vZGVEYXRhKG5vZGVzLCBkZXB0aCwgbGV2ZWwsIHBhcmVudE5vZGUsIHR5cGUpIHtcbiAgICAgICAgaWYoZGVwdGggPT09IDApIHtcbiAgICAgICAgICAgIG5vZGVzLm1hcChub2RlID0+IHtcbiAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldE5vZGVEYXRhKG5vZGUuY2hpbGRyZW4sIGRlcHRoLCBsZXZlbCAsIHBhcmVudE5vZGUsIHR5cGUpO1xuICAgICAgICAgICAgICAgIH0gaWYgKG5vZGUuaWNvbiAmJiB0aGlzLm5vZGVsYWJlbCA9PSAnaWNvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZVt0eXBlXSA9IG5vZGUuaWNvbjtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYobm9kZS5uYW1lICYmIHRoaXMubm9kZWxhYmVsID09ICduYW1lJykge1xuICAgICAgICAgICAgICAgICAgICBub2RlW3R5cGVdID0gbm9kZS5uYW1lO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbm9kZXMubWFwKG5vZGUgPT4geyAgIFxuICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkcmVuICYmIGxldmVsID4gMSkgeyBcbiAgICAgICAgICAgICAgICAgICAgaWYoZGVwdGggPT09IGxldmVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnROb2RlID0gbm9kZTtcbiAgICAgICAgICAgICAgICAgICAgfSBcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXROb2RlRGF0YShub2RlLmNoaWxkcmVuLCBkZXB0aCwgbGV2ZWwgLSAxLCBwYXJlbnROb2RlLCB0eXBlKTtcbiAgICAgICAgICAgICAgICB9ICBcbiAgICAgICAgICAgICAgICBpZiAobGV2ZWwgPT09IDEgJiYgKHR5cGUgPT09IFwibmFtZVwiID8gdGhpcy5ub2RlbGFiZWwuaW5jbHVkZXMoXCJsYWJlbFwiKSB8fCB0aGlzLm5vZGVsYWJlbC5pbmNsdWRlcyhcIm5hbWVcIik6IHRoaXMubm9kZWljb24uaW5jbHVkZXMoXCJsYWJlbFwiKSB8fCB0aGlzLm5vZGVpY29uLmluY2x1ZGVzKFwibmFtZVwiKSApKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudE5vZGVbdHlwZV0gPSBub2RlLm5hbWUgfHwgbm9kZS5sYWJlbDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmKGxldmVsID09PSAxICYmIChub2RlLmljb24gIT09IHVuZGVmaW5lZCkgJiYgKHR5cGUgPT09IFwibmFtZVwiID8gdGhpcy5ub2RlbGFiZWwuaW5jbHVkZXMoXCJpY29uXCIpIDogdGhpcy5ub2RlaWNvbi5pbmNsdWRlcyhcImljb25cIikpKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudE5vZGVbdHlwZV0gPSBub2RlLmljb247XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkgXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBhZGRzIHRyZWUgaWNvbnMgdG8gdGhlIG5vZGVzIG9uIGxvYWQgb2YgdGhlIHRyZWUgXG4gICAgcHJpdmF0ZSBjaGFuZ2VUcmVlSWNvbnMobnYpIHsgXG4gICAgICAgIGxldCBlbGVDbG9zZSA9ICQoJ3VsW25hbWU9XCInICsgdGhpcy5uYW1lICsgJ1wiXSBsaSBzcGFuLmJ1dHRvbi5zd2l0Y2gnKTtcblxuICAgICAgICAkKGVsZUNsb3NlKS5tYXAoKGlkeCwgZWxlKSA9PiB7XG4gICAgICAgICAgICAkKGVsZSkuYWRkQ2xhc3MobnYpOyBcbiAgICAgICAgICAgICQoZWxlKS5vbihcImNsaWNrXCIsZnVuY3Rpb24oZSkgeyBcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgJChlbGUpLmFkZENsYXNzKG52KTsgXG4gICAgICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSkgIFxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UGF0aCh0cmVlTm9kZSwgcGF0aCkgeyBcbiAgICAgICAgaWYodHJlZU5vZGUuZ2V0UGFyZW50Tm9kZSgpID09PSBudWxsKSB7XG4gICAgICAgICAgICBwYXRoID0gXCIvXCIgKyB0cmVlTm9kZS5uYW1lICsgcGF0aDtcbiAgICAgICAgfSBlbHNlIHsgICBcbiAgICAgICAgICAgIHBhdGggPSB0aGlzLmdldFBhdGgodHJlZU5vZGUuZ2V0UGFyZW50Tm9kZSgpLCBwYXRoKSArIFwiL1wiICsgdHJlZU5vZGUubmFtZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGF0aDsgXG4gICAgfVxuXG4gICAgLy8gYmluZHMgdGhlIGNsaWNrIGV2ZW50IHRvIGFsbCBub2RlcyB0byBvcGVuIHRoZSBjaGlsZCBub2Rlc1xuICAgIHB1YmxpYyBvbkNsaWNrKGV2ZW50LCB0cmVlSWQsIHRyZWVOb2RlLCBjbGlja0ZsYWcpIHtcbiAgICAgICAgdmFyIHRyZWVPYmogPSAkLmZuLnpUcmVlLmdldFpUcmVlT2JqKGAke3RoaXMubmFtZX1gKTtcbiAgICAgICAgaWYgKHRoaXMubm9kZWNsaWNrID09PSAnZXhwYW5kJykge1xuICAgICAgICAgICAgdHJlZU9iai5leHBhbmROb2RlKHRyZWVOb2RlLCB0cmVlTm9kZS5vcGVuID8gZmFsc2UgOiB0cnVlLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZVRyZWVJY29ucyh0aGlzLnRyZWVpY29uIHx8IGRlZmF1bHRUcmVlSWNvbkNsYXNzKVxuXG4gICAgICAgICAgICBsZXQgcGF0aCA9IHRoaXMuZ2V0UGF0aCh0cmVlTm9kZSwgXCJcIik7XG5cbiAgICAgICAgICAgIGNvbnN0IGV2ZW50UGFyYW1zID0ge1xuICAgICAgICAgICAgICAgICckZXZlbnQnICA6IGV2ZW50LFxuICAgICAgICAgICAgICAgIFwiJGl0ZW1cIiAgIDogdHJlZU5vZGUsIFxuICAgICAgICAgICAgICAgIFwiJHBhdGhcIiA6IHBhdGhcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnc2VsZWN0JywgZXZlbnRQYXJhbXMpO1xuXG4gICAgICAgICAgICBpZih0cmVlTm9kZS5vcGVuKSB7XG4gICAgICAgICAgICAgICAgLy8gdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdleHBhbmQnLCBldmVudFBhcmFtcyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnY29sbGFwc2UnLCBldmVudFBhcmFtcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gXG4gICAgfVxuXG4gICAgLy8gQWRkcyB0cmVlIGljb24gY2xhc3NlcyB0byBjaGlsZCBub2RlcyB3aGVuIGV4cGFuZGVkIFxuICAgIHB1YmxpYyBvbkV4cGFuZChldmVudCwgdHJlZUlkLCB0cmVlTm9kZSkge1xuICAgICAgICBsZXQgc2VsZiA9IHRoaXM7XG4gICAgICAgIHRyZWVOb2RlLmNoaWxkcmVuID8gdHJlZU5vZGUuY2hpbGRyZW4ubWFwKChlbCkgPT4ge1xuICAgICAgICAgICAgaWYgKGVsLmlzUGFyZW50KSB7XG4gICAgICAgICAgICAgICAgbGV0IGVsZSA9ICQoYCMke2VsLnRJZH1fc3dpdGNoYCk7XG4gICAgICAgICAgICAgICAgJChlbGUpLmFkZENsYXNzKHNlbGYudHJlZWljb24gfHwgZGVmYXVsdFRyZWVJY29uQ2xhc3MpO1xuICAgICAgICAgICAgICAgICQoZWxlKS5vbihcImNsaWNrXCIsZnVuY3Rpb24oZSkgeyBcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkKGVsZSkuYWRkQ2xhc3Moc2VsZi50cmVlaWNvbiB8fCBkZWZhdWx0VHJlZUljb25DbGFzcyk7IFxuICAgICAgICAgICAgICAgICAgICB9LCAwKTsgXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IFxuICAgICAgICB9KSA6ICcnO1xuICAgIH1cblxuICAgIC8vIGZ1bmN0aW9uIHRvIHN1cHBvcnQgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBvZiBvYmplY3RzXG4gICAgcHVibGljIG1vZGlmeU9iamVjdHMoYXJyYXkpIHtcbiAgICAgICAgYXJyYXkuZm9yRWFjaChvYmogPT4ge1xuICAgICAgICAgIGlmIChvYmoubGFiZWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgb2JqLm5hbWUgPSBvYmoubGFiZWw7XG4gICAgICAgICAgICBkZWxldGUgb2JqLmxhYmVsO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAob2JqLmNoaWxkcmVuICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMubW9kaWZ5T2JqZWN0cyhvYmouY2hpbGRyZW4pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBhcnJheTtcbiAgICAgIH1cblxuICAgIC8vIHNldHMgdGhlIG5vZGUgY2hpbGRyZW4gcHJvcGVydHkgdG8gcGFyZW50IG5vZGVzXG4gICAgcHJpdmF0ZSBzZXROb2RlQ2hpbGRyZW4obm9kZXMsIGRlcHRoLCBsZXZlbCwgcGFyZW50Tm9kZSkge1xuICAgICAgICBpZiAoZGVwdGggPD0gMCkge1xuICAgICAgICAgIHJldHVybiBub2RlcztcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzW2ldO1xuXG4gICAgICAgICAgaWYoZGVwdGggPT09IGxldmVsKSB7XG4gICAgICAgICAgICBwYXJlbnROb2RlICA9IG5vZGVzW2ldO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobm9kZS5jaGlsZHJlbiAmJiBub2RlLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGlmIChsZXZlbCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHBhcmVudE5vZGUuY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuLm1hcChjaGlsZCA9PiAoeyBuYW1lOiBjaGlsZC5uYW1lLCBjaGlsZHJlbjogY2hpbGQ/LmNoaWxkcmVuIH0pKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLnNldE5vZGVDaGlsZHJlbihub2RlLmNoaWxkcmVuLCBkZXB0aCAsbGV2ZWwgLSAxLCBwYXJlbnROb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIFxuICAgICAgICByZXR1cm4gbm9kZXM7XG4gICAgICB9XG4gICAgXG4gICAgcHJpdmF0ZSBjb3VudERlcHRoKHN0cikge1xuICAgICAgICBjb25zdCByZWdleCA9IC9cXFsuKj9cXF0vZztcbiAgICAgICAgbGV0IG1hdGNoZXMgPSBzdHIubWF0Y2gocmVnZXgpOyBcbiAgICAgICAgbGV0IGNvdW50ID0gMTsgXG5cbiAgICAgICAgaWYobWF0Y2hlcyA9PT0gbnVsbCkgcmV0dXJuIGNvdW50O1xuICAgICAgICBcbiAgICAgICAgZm9yIChsZXQgbWF0Y2ggb2YgbWF0Y2hlcykge1xuICAgICAgICAgIGNvdW50Kys7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIHJldHVybiBjb3VudDtcbiAgICAgIH1cblxuXG4gICAgLy8gUmVuZGVycyB0aGUgdHJlZSBvbiB0byB0aGUgZG9tIFxuICAgIHB1YmxpYyByZW5kZXJUcmVlKCkgeyBcbiAgICAgICAgaWYodGhpcy5ub2Rlcykge1xuICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnaWQnLCB0aGlzLm5hbWUpO1xuICAgICAgICAgICAgdGhpcy5ub2RlcyA9IHRoaXMubW9kaWZ5T2JqZWN0cyh0aGlzLm5vZGVzKTtcbiAgICAgICAgICAgIHRoaXMuc2V0VHJlZVRlbXBsYXRlKHRoaXMudHJlZUNsYXNzKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMubm9kZWxhYmVsKSB7XG4gICAgICAgICAgICAgICAgbGV0IGRlcHRoID0wO1xuICAgICAgICAgICAgICAgIGlmKHRoaXMubm9kZWxhYmVsLmluY2x1ZGVzKFwiY2hpbGRyZW5cIikpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVwdGggPSB0aGlzLmNvdW50RGVwdGgodGhpcy5ub2RlbGFiZWwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnNldE5vZGVEYXRhKHRoaXMubm9kZXMsIGRlcHRoLCBkZXB0aCwgbnVsbCwgXCJuYW1lXCIpO1xuICAgICAgICAgICAgfSAgXG4gICAgICAgICAgICBpZih0aGlzLm5vZGVpY29uKSAge1xuICAgICAgICAgICAgICAgIGxldCBkZXB0aCA9MDtcbiAgICAgICAgICAgICAgICBpZih0aGlzLm5vZGVpY29uLmluY2x1ZGVzKFwiY2hpbGRyZW5cIikpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVwdGggPSB0aGlzLmNvdW50RGVwdGgodGhpcy5ub2RlaWNvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuc2V0Tm9kZURhdGEodGhpcy5ub2RlcywgZGVwdGgsIGRlcHRoLCBudWxsLCBcImljb25cIik7XG4gICAgICAgICAgICB9XG4gICAgXG4gICAgICAgICAgICBpZiAodGhpcy5ub2RlY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICBsZXQgZGVwdGggPSB0aGlzLmNvdW50RGVwdGgodGhpcy5ub2RlY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgIGlmKGRlcHRoID4gMSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vZGVzID0gdGhpcy5zZXROb2RlQ2hpbGRyZW4odGhpcy5ub2RlcywgZGVwdGgsIGRlcHRoLCBudWxsKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG5cbiAgICAgICAgdGhpcy5zZXR0aW5nLnZpZXdbJ25vZGVDbGFzc2VzJ10gPSB0aGlzLnNldE5vZGVjbGFzc2VzO1xuICAgICAgICB0aGlzLnNldHRpbmcuY2FsbGJhY2tbXCJvbkNsaWNrXCJdID0gdGhpcy5vbkNsaWNrLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuc2V0dGluZy5jYWxsYmFja1tcIm9uRXhwYW5kXCJdID0gdGhpcy5vbkV4cGFuZC5iaW5kKHRoaXMpOyBcblxuICAgICAgICBsZXQgelRyZWUgPSAkLmZuLnpUcmVlLmluaXQoJCgndWxbbmFtZT1cIicgKyB0aGlzLm5hbWUgKyAnXCJdJyksIHRoaXMuc2V0dGluZywgdGhpcy5ub2Rlcyk7XG5cbiAgICAgICAgJC5mbi56VHJlZUtleWJvYXJkTmF2aWdhdGlvbih6VHJlZSwgJCgndWxbbmFtZT1cIicgKyB0aGlzLm5hbWUgKyAnXCJdJyksIG51bGwsIHRoaXMudHJlZWljb24gfHwgZGVmYXVsdFRyZWVJY29uQ2xhc3MpO1xuXG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQgeyAgICBcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZVRyZWVJY29ucyh0aGlzLnRyZWVpY29uIHx8IGRlZmF1bHRUcmVlSWNvbkNsYXNzKTtcbiAgICAgICAgfSwgMjAwKTtcbiAgICB9XG59XG4iXX0=
@@ -1,9 +1,9 @@
1
1
  import { NgModule } from '@angular/core';
2
2
  import { CommonModule } from '@angular/common';
3
3
  import { WmComponentsModule } from '@wm/components/base';
4
- import { TreeDirective } from './tree.directive';
4
+ import { TreeComponent } from './tree.component';
5
5
  const components = [
6
- TreeDirective
6
+ TreeComponent
7
7
  ];
8
8
  export class TreeModule {
9
9
  }
@@ -18,4 +18,4 @@ TreeModule.decorators = [
18
18
  entryComponents: []
19
19
  },] }
20
20
  ];
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvYmFzaWMvdHJlZS9zcmMvdHJlZS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFL0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFekQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRWpELE1BQU0sVUFBVSxHQUFHO0lBQ2YsYUFBYTtDQUNoQixDQUFDO0FBV0YsTUFBTSxPQUFPLFVBQVU7OztZQVR0QixRQUFRLFNBQUM7Z0JBQ04sT0FBTyxFQUFFO29CQUNMLFlBQVk7b0JBQ1osa0JBQWtCO2lCQUNyQjtnQkFDRCxZQUFZLEVBQUUsQ0FBQyxHQUFHLFVBQVUsQ0FBQztnQkFDN0IsT0FBTyxFQUFFLENBQUMsR0FBRyxVQUFVLENBQUM7Z0JBQ3hCLGVBQWUsRUFBRSxFQUFFO2FBQ3RCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbmltcG9ydCB7IFdtQ29tcG9uZW50c01vZHVsZSB9IGZyb20gJ0B3bS9jb21wb25lbnRzL2Jhc2UnO1xuXG5pbXBvcnQgeyBUcmVlRGlyZWN0aXZlIH0gZnJvbSAnLi90cmVlLmRpcmVjdGl2ZSc7XG5cbmNvbnN0IGNvbXBvbmVudHMgPSBbXG4gICAgVHJlZURpcmVjdGl2ZVxuXTtcblxuQE5nTW9kdWxlKHtcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgV21Db21wb25lbnRzTW9kdWxlXG4gICAgXSxcbiAgICBkZWNsYXJhdGlvbnM6IFsuLi5jb21wb25lbnRzXSxcbiAgICBleHBvcnRzOiBbLi4uY29tcG9uZW50c10sXG4gICAgZW50cnlDb21wb25lbnRzOiBbXVxufSlcbmV4cG9ydCBjbGFzcyBUcmVlTW9kdWxlIHtcbn1cbiJdfQ==
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvYmFzaWMvdHJlZS9zcmMvdHJlZS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFL0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFekQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRWpELE1BQU0sVUFBVSxHQUFHO0lBQ2YsYUFBYTtDQUNoQixDQUFDO0FBV0YsTUFBTSxPQUFPLFVBQVU7OztZQVR0QixRQUFRLFNBQUM7Z0JBQ04sT0FBTyxFQUFFO29CQUNMLFlBQVk7b0JBQ1osa0JBQWtCO2lCQUNyQjtnQkFDRCxZQUFZLEVBQUUsQ0FBQyxHQUFHLFVBQVUsQ0FBQztnQkFDN0IsT0FBTyxFQUFFLENBQUMsR0FBRyxVQUFVLENBQUM7Z0JBQ3hCLGVBQWUsRUFBRSxFQUFFO2FBQ3RCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbmltcG9ydCB7IFdtQ29tcG9uZW50c01vZHVsZSB9IGZyb20gJ0B3bS9jb21wb25lbnRzL2Jhc2UnO1xuXG5pbXBvcnQgeyBUcmVlQ29tcG9uZW50IH0gZnJvbSAnLi90cmVlLmNvbXBvbmVudCc7XG5cbmNvbnN0IGNvbXBvbmVudHMgPSBbXG4gICAgVHJlZUNvbXBvbmVudFxuXTtcblxuQE5nTW9kdWxlKHtcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgV21Db21wb25lbnRzTW9kdWxlXG4gICAgXSxcbiAgICBkZWNsYXJhdGlvbnM6IFsuLi5jb21wb25lbnRzXSxcbiAgICBleHBvcnRzOiBbLi4uY29tcG9uZW50c10sXG4gICAgZW50cnlDb21wb25lbnRzOiBbXVxufSlcbmV4cG9ydCBjbGFzcyBUcmVlTW9kdWxlIHtcbn1cbiJdfQ==