@wavemaker/app-ng-runtime 11.4.0-next.28701 → 11.4.0-rc.5342

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. app-ng-runtime/build-task/basic/tree/tree.build.d.ts +1 -2
  2. app-ng-runtime/build-task/bundles/index.umd.js +7 -9
  3. app-ng-runtime/build-task/bundles/index.umd.js.map +1 -1
  4. app-ng-runtime/build-task/esm2015/basic/tree/tree.build.js +3 -4
  5. app-ng-runtime/build-task/esm2015/navigation/popover/popover.build.js +3 -3
  6. app-ng-runtime/build-task/fesm2015/index.js +7 -9
  7. app-ng-runtime/build-task/fesm2015/index.js.map +1 -1
  8. app-ng-runtime/components/base/bundles/index.umd.js +7 -4
  9. app-ng-runtime/components/base/bundles/index.umd.js.map +1 -1
  10. app-ng-runtime/components/base/esm2015/utils/widget-utils.js +7 -4
  11. app-ng-runtime/components/base/esm2015/widgets/common/dialog/dialog.service.js +3 -3
  12. app-ng-runtime/components/base/fesm2015/index.js +8 -5
  13. app-ng-runtime/components/base/fesm2015/index.js.map +1 -1
  14. app-ng-runtime/components/base/utils/widget-utils.d.ts +1 -1
  15. app-ng-runtime/components/basic/tree/bundles/index.umd.js +280 -256
  16. app-ng-runtime/components/basic/tree/bundles/index.umd.js.map +1 -1
  17. app-ng-runtime/components/basic/tree/esm2015/public_api.js +2 -2
  18. app-ng-runtime/components/basic/tree/esm2015/tree.component.js +322 -0
  19. app-ng-runtime/components/basic/tree/esm2015/tree.module.js +3 -3
  20. app-ng-runtime/components/basic/tree/fesm2015/index.js +260 -248
  21. app-ng-runtime/components/basic/tree/fesm2015/index.js.map +1 -1
  22. app-ng-runtime/components/basic/tree/index.metadata.json +1 -1
  23. app-ng-runtime/components/basic/tree/public_api.d.ts +1 -1
  24. app-ng-runtime/components/basic/tree/tree.component.d.ts +34 -0
  25. app-ng-runtime/components/containers/tabs/bundles/index.umd.js +39 -23
  26. app-ng-runtime/components/containers/tabs/bundles/index.umd.js.map +1 -1
  27. app-ng-runtime/components/containers/tabs/esm2015/tab-pane/tab-pane.component.js +8 -1
  28. app-ng-runtime/components/containers/tabs/esm2015/tabs.animator.js +33 -13
  29. app-ng-runtime/components/containers/tabs/fesm2015/index.js +40 -13
  30. app-ng-runtime/components/containers/tabs/fesm2015/index.js.map +1 -1
  31. app-ng-runtime/components/containers/tabs/tabs.animator.d.ts +5 -1
  32. app-ng-runtime/components/data/list/bundles/index.umd.js +51 -42
  33. app-ng-runtime/components/data/list/bundles/index.umd.js.map +1 -1
  34. app-ng-runtime/components/data/list/esm2015/list.component.js +51 -42
  35. app-ng-runtime/components/data/list/fesm2015/index.js +50 -41
  36. app-ng-runtime/components/data/list/fesm2015/index.js.map +1 -1
  37. app-ng-runtime/components/data/list/index.metadata.json +1 -1
  38. app-ng-runtime/components/data/pagination/bundles/index.umd.js +21 -4
  39. app-ng-runtime/components/data/pagination/bundles/index.umd.js.map +1 -1
  40. app-ng-runtime/components/data/pagination/esm2015/pagination.component.js +22 -5
  41. app-ng-runtime/components/data/pagination/fesm2015/index.js +21 -4
  42. app-ng-runtime/components/data/pagination/fesm2015/index.js.map +1 -1
  43. app-ng-runtime/components/data/pagination/index.metadata.json +1 -1
  44. app-ng-runtime/components/data/pagination/pagination.component.d.ts +1 -0
  45. app-ng-runtime/components/data/table/bundles/index.umd.js +7 -0
  46. app-ng-runtime/components/data/table/bundles/index.umd.js.map +1 -1
  47. app-ng-runtime/components/data/table/esm2015/table.component.js +8 -1
  48. app-ng-runtime/components/data/table/fesm2015/index.js +7 -0
  49. app-ng-runtime/components/data/table/fesm2015/index.js.map +1 -1
  50. app-ng-runtime/components/data/table/index.metadata.json +1 -1
  51. app-ng-runtime/components/dialogs/default/base-dialog.d.ts +1 -0
  52. app-ng-runtime/components/dialogs/default/bundles/index.umd.js +13 -4
  53. app-ng-runtime/components/dialogs/default/bundles/index.umd.js.map +1 -1
  54. app-ng-runtime/components/dialogs/default/esm2015/base-dialog.js +14 -6
  55. app-ng-runtime/components/dialogs/default/fesm2015/index.js +13 -5
  56. app-ng-runtime/components/dialogs/default/fesm2015/index.js.map +1 -1
  57. app-ng-runtime/components/dialogs/default/index.metadata.json +1 -1
  58. app-ng-runtime/components/input/epoch/bundles/index.umd.js +66 -29
  59. app-ng-runtime/components/input/epoch/bundles/index.umd.js.map +1 -1
  60. app-ng-runtime/components/input/epoch/date-time/date-time-picker.component.d.ts +1 -0
  61. app-ng-runtime/components/input/epoch/esm2015/base-date-time.component.js +43 -25
  62. app-ng-runtime/components/input/epoch/esm2015/date/date.component.js +3 -3
  63. app-ng-runtime/components/input/epoch/esm2015/date-time/date-time-picker.component.js +31 -11
  64. app-ng-runtime/components/input/epoch/esm2015/date-time/date-time.component.js +2 -2
  65. app-ng-runtime/components/input/epoch/fesm2015/index.js +75 -37
  66. app-ng-runtime/components/input/epoch/fesm2015/index.js.map +1 -1
  67. app-ng-runtime/components/input/epoch/index.metadata.json +1 -1
  68. app-ng-runtime/components/navigation/popover/bundles/index.umd.js +3 -4
  69. app-ng-runtime/components/navigation/popover/bundles/index.umd.js.map +1 -1
  70. app-ng-runtime/components/navigation/popover/esm2015/popover.component.js +5 -6
  71. app-ng-runtime/components/navigation/popover/fesm2015/index.js +4 -5
  72. app-ng-runtime/components/navigation/popover/fesm2015/index.js.map +1 -1
  73. app-ng-runtime/mobile/components/page/default/bundles/index.umd.js +24 -6
  74. app-ng-runtime/mobile/components/page/default/bundles/index.umd.js.map +1 -1
  75. app-ng-runtime/mobile/components/page/default/esm2015/page.directive.js +20 -3
  76. app-ng-runtime/mobile/components/page/default/fesm2015/index.js +19 -2
  77. app-ng-runtime/mobile/components/page/default/fesm2015/index.js.map +1 -1
  78. app-ng-runtime/mobile/components/page/default/index.metadata.json +1 -1
  79. app-ng-runtime/mobile/components/page/default/page.directive.d.ts +4 -1
  80. app-ng-runtime/package.json +1 -1
  81. app-ng-runtime/scripts/datatable/datatable.js +23 -23
  82. app-ng-runtime/scripts/tree-keyboard-navigation/keyboard-navigation.js +251 -0
  83. app-ng-runtime/variables/bundles/index.umd.js +14 -4
  84. app-ng-runtime/variables/bundles/index.umd.js.map +1 -1
  85. app-ng-runtime/variables/esm2015/manager/action/notification-action.manager.js +5 -6
  86. app-ng-runtime/variables/esm2015/service/variables.service.js +8 -1
  87. app-ng-runtime/variables/fesm2015/index.js +11 -5
  88. app-ng-runtime/variables/fesm2015/index.js.map +1 -1
  89. app-ng-runtime/variables/index.metadata.json +1 -1
  90. app-ng-runtime/variables/service/variables.service.d.ts +4 -0
  91. app-ng-runtime/components/basic/tree/esm2015/tree.directive.js +0 -310
  92. app-ng-runtime/components/basic/tree/tree.directive.d.ts +0 -35
@@ -0,0 +1,322 @@
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
+ let path = this.getPath(treeNode, "");
183
+ const eventParams = {
184
+ '$event': event,
185
+ "$item": treeNode,
186
+ "$path": path
187
+ };
188
+ this.invokeEventCallback('select', eventParams);
189
+ }
190
+ // Adds tree icon classes to child nodes when expanded
191
+ onExpand(event, treeId, treeNode) {
192
+ let self = this;
193
+ let path = this.getPath(treeNode, "");
194
+ const eventParams = {
195
+ '$event': event,
196
+ "$item": treeNode,
197
+ "$path": path
198
+ };
199
+ this.invokeEventCallback('expand', eventParams);
200
+ treeNode.children ? treeNode.children.map((el) => {
201
+ if (el.isParent) {
202
+ let ele = $(`#${el.tId}_switch`);
203
+ $(ele).addClass(self.treeicon || defaultTreeIconClass);
204
+ $(ele).on("click", function (e) {
205
+ setTimeout(() => {
206
+ $(ele).addClass(self.treeicon || defaultTreeIconClass);
207
+ }, 0);
208
+ });
209
+ }
210
+ }) : '';
211
+ }
212
+ onCollapse(event, treeId, treeNode) {
213
+ let path = this.getPath(treeNode, "");
214
+ const eventParams = {
215
+ '$event': event,
216
+ "$item": treeNode,
217
+ "$path": path
218
+ };
219
+ this.invokeEventCallback('collapse', eventParams);
220
+ }
221
+ // function to support backward compatibility of objects
222
+ modifyObjects(array) {
223
+ array.forEach(obj => {
224
+ if (obj.label !== undefined) {
225
+ obj.name = obj.label;
226
+ delete obj.label;
227
+ }
228
+ if (obj.children !== undefined) {
229
+ this.modifyObjects(obj.children);
230
+ }
231
+ });
232
+ return array;
233
+ }
234
+ // sets the node children property to parent nodes
235
+ setNodeChildren(nodes, depth, level, parentNode) {
236
+ if (depth <= 0) {
237
+ return nodes;
238
+ }
239
+ for (let i = 0; i < nodes.length; i++) {
240
+ const node = nodes[i];
241
+ if (depth === level) {
242
+ parentNode = nodes[i];
243
+ }
244
+ if (node.children && node.children.length > 0) {
245
+ if (level === 1) {
246
+ parentNode.children = node.children.map(child => ({ name: child.name, children: child === null || child === void 0 ? void 0 : child.children }));
247
+ return;
248
+ }
249
+ else {
250
+ this.setNodeChildren(node.children, depth, level - 1, parentNode);
251
+ }
252
+ }
253
+ }
254
+ return nodes;
255
+ }
256
+ countDepth(str) {
257
+ const regex = /\[.*?\]/g;
258
+ let matches = str.match(regex);
259
+ let count = 1;
260
+ if (matches === null)
261
+ return count;
262
+ for (let match of matches) {
263
+ count++;
264
+ }
265
+ return count;
266
+ }
267
+ // Renders the tree on to the dom
268
+ renderTree() {
269
+ console.log(this.nodes, 'this.nodes');
270
+ if (this.nodes) {
271
+ this.nativeElement.setAttribute('id', this.name);
272
+ this.nodes = this.modifyObjects(this.nodes);
273
+ this.setTreeTemplate(this.treeClass);
274
+ if (this.nodelabel) {
275
+ let depth = 0;
276
+ if (this.nodelabel.includes("children")) {
277
+ depth = this.countDepth(this.nodelabel);
278
+ }
279
+ this.setNodeData(this.nodes, depth, depth, null, "name");
280
+ }
281
+ if (this.nodeicon) {
282
+ let depth = 0;
283
+ if (this.nodeicon.includes("children")) {
284
+ depth = this.countDepth(this.nodeicon);
285
+ }
286
+ this.setNodeData(this.nodes, depth, depth, null, "icon");
287
+ }
288
+ if (this.nodechildren) {
289
+ let depth = this.countDepth(this.nodechildren);
290
+ if (depth > 1) {
291
+ this.nodes = this.setNodeChildren(this.nodes, depth, depth, null);
292
+ }
293
+ }
294
+ }
295
+ this.setting.view['nodeClasses'] = this.setNodeclasses;
296
+ this.setting.callback["onClick"] = this.onClick.bind(this);
297
+ this.setting.callback["onExpand"] = this.onExpand.bind(this);
298
+ this.setting.callback["onCollapse"] = this.onCollapse.bind(this);
299
+ let zTree = $.fn.zTree.init($('ul[name="' + this.name + '"]'), this.setting, this.nodes);
300
+ $.fn.zTreeKeyboardNavigation(zTree, $('ul[name="' + this.name + '"]'), null, this.treeicon || defaultTreeIconClass);
301
+ }
302
+ ngAfterViewInit() {
303
+ setTimeout(() => {
304
+ this.changeTreeIcons(this.treeicon || defaultTreeIconClass);
305
+ }, 200);
306
+ }
307
+ }
308
+ TreeComponent.initializeProps = registerProps();
309
+ TreeComponent.decorators = [
310
+ { type: Component, args: [{
311
+ selector: 'ul[wmTree]',
312
+ template: "<ul #wmTree class=\"ztree\" id=\"ztree\"></ul> ",
313
+ providers: [
314
+ provideAsWidgetRef(TreeComponent)
315
+ ],
316
+ encapsulation: ViewEncapsulation.None
317
+ },] }
318
+ ];
319
+ TreeComponent.ctorParameters = () => [
320
+ { type: Injector }
321
+ ];
322
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvYmFzaWMvdHJlZS9zcmMvdHJlZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxRQUFRLEVBQVUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHOUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzFILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFJN0MsTUFBTSxXQUFXLEdBQUcsRUFBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUMsQ0FBQztBQUNuRSxNQUFNLG9CQUFvQixHQUFHLFlBQVksQ0FBQztBQVUxQyxNQUFNLE9BQU8sYUFBYyxTQUFRLGlCQUFpQjtJQW1DaEQsWUFDSSxHQUFhO1FBRWIsS0FBSyxDQUFDLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQztRQXhCcEIsWUFBTyxHQUFHO1lBQ2QsSUFBSSxFQUFFO2dCQUNGLFVBQVUsRUFBRTtvQkFDUixNQUFNLEVBQUUsSUFBSTtpQkFDZjthQUNKO1lBQ0QsSUFBSSxFQUFFO2dCQUNGLGNBQWMsRUFBRSxLQUFLO2dCQUNyQixPQUFPLEVBQUU7b0JBQ0wsY0FBYyxFQUFFLElBQUk7aUJBQ3JCO2dCQUNILFVBQVUsRUFBRSxFQUVYO2FBQ0o7WUFDRCxLQUFLLEVBQUUsRUFDTjtZQUNELFFBQVEsRUFBRSxFQUNUO1NBQ0osQ0FBQztRQU1FLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRU0sZ0JBQWdCLENBQUMsR0FBVyxF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LCBPbkluaXQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cblxuaW1wb3J0IHsgQVBQTFlfU1RZTEVTX1RZUEUsIGdldE9yZGVyZWREYXRhc2V0LCBwcm92aWRlQXNXaWRnZXRSZWYsIFN0eWxhYmxlQ29tcG9uZW50LCBzdHlsZXIgfSBmcm9tICdAd20vY29tcG9uZW50cy9iYXNlJztcbmltcG9ydCB7IHJlZ2lzdGVyUHJvcHMgfSBmcm9tICcuL3RyZWUucHJvcHMnO1xuXG5kZWNsYXJlIGNvbnN0IF8sICQ7XG5cbmNvbnN0IFdJREdFVF9JTkZPID0ge3dpZGdldFR5cGU6ICd3bS10cmVlJywgaG9zdENsYXNzOiAnYXBwLXRyZWUnfTtcbmNvbnN0IGRlZmF1bHRUcmVlSWNvbkNsYXNzID0gJ3BsdXMtbWludXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3VsW3dtVHJlZV0nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90cmVlLmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgcHJvdmlkZUFzV2lkZ2V0UmVmKFRyZWVDb21wb25lbnQpXG4gICAgXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIFRyZWVDb21wb25lbnQgZXh0ZW5kcyBTdHlsYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgc3RhdGljIGluaXRpYWxpemVQcm9wcyA9IHJlZ2lzdGVyUHJvcHMoKTtcblxuICAgIHByaXZhdGUgbm9kZXM7XG4gICAgcHJpdmF0ZSBsZXZlbDtcbiAgICBwcml2YXRlIG9yZGVyYnk7XG4gICAgcHJpdmF0ZSBub2RlbGFiZWw7XG4gICAgcHJpdmF0ZSB0cmVlaWNvbjtcbiAgICBwcml2YXRlIG5vZGVjaGlsZHJlbjtcbiAgICBwcml2YXRlIG5vZGVjbGljaztcbiAgICBwcml2YXRlIHRyZWVDbGFzcztcbiAgICBwcml2YXRlIG5vZGVpY29uO1xuICAgIHByaXZhdGUgbmFtZTtcblxuICAgIHByaXZhdGUgc2V0dGluZyA9IHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgc2ltcGxlRGF0YToge1xuICAgICAgICAgICAgICAgIGVuYWJsZTogdHJ1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgdmlldzoge1xuICAgICAgICAgICAgZGJsQ2xpY2tFeHBhbmQ6IGZhbHNlLFxuICAgICAgICAgICAgZm9udENzczoge1xuICAgICAgICAgICAgICAgICdmb250LWF3ZXNvbWUnOiB0cnVlXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzd2l0Y2hJY29uOiB7XG5cbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGNoZWNrOiB7XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGxiYWNrOiB7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIGluajogSW5qZWN0b3JcbiAgICApIHtcbiAgICAgICAgc3VwZXIoaW5qLCBXSURHRVRfSU5GTyk7XG4gICAgICAgIHN0eWxlcih0aGlzLm5hdGl2ZUVsZW1lbnQsIHRoaXMsIEFQUExZX1NUWUxFU19UWVBFLkNPTlRBSU5FUik7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUHJvcGVydHlDaGFuZ2Uoa2V5OiBzdHJpbmcsIG52OiBhbnksIG92PzogYW55KTogdm9pZCB7XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdkYXRhc2V0JzpcbiAgICAgICAgICAgICAgICB0aGlzLm5vZGVzID0gdGhpcy5nZXROb2Rlcyhudik7XG4gICAgICAgICAgICAgICAgaWYodGhpcy5sZXZlbCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBhbmRUcmVlKHRoaXMubGV2ZWwsIHRoaXMubm9kZXMsIDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlclRyZWUoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2xldmVscyc6XG4gICAgICAgICAgICAgICAgaWYgKG52ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxldmVsID0gbnY7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAndHJlZWljb25zJzpcbiAgICAgICAgICAgICAgICB0aGlzLnRyZWVpY29uID0gbnY7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdub2RlbGFiZWwnOlxuICAgICAgICAgICAgICAgIHRoaXMubm9kZWxhYmVsID0gbnY7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdpY29uJzpcbiAgICAgICAgICAgICAgICB0aGlzLm5vZGVpY29uID0gbnY7XG4gICAgICAgICAgICBjYXNlICdvcmRlcmJ5JzpcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlclRyZWUoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2NsYXNzJzpcbiAgICAgICAgICAgICAgICB0aGlzLnRyZWVDbGFzcyA9IG52O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBzdXBlci5vblByb3BlcnR5Q2hhbmdlKGtleSwgbnYsIG92KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGV4cGFuZHMgdGhlIHRyZWUgbm9kZXMgaWYgdGhlIHByb3BlcnR5IGlzIHNlbGVjdGVkLlxuICAgIHByaXZhdGUgZXhwYW5kVHJlZShsZXZlbCwgbm9kZSwgY2hpbGRMZXZlbCkge1xuICAgICAgICBub2RlLm1hcChjaGlsZE5vZGUgPT4ge1xuICAgICAgICAgICAgaWYgKFwiY2hpbGRyZW5cIiBpbiBjaGlsZE5vZGUgJiYgIShcIm9wZW5cIiBpbiBjaGlsZE5vZGUpICYmIGNoaWxkTGV2ZWwgPCBsZXZlbCkge1xuICAgICAgICAgICAgICAgIGNoaWxkTm9kZVtcIm9wZW5cIl0gPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuZXhwYW5kVHJlZShsZXZlbCwgY2hpbGROb2RlLmNoaWxkcmVuLCBjaGlsZExldmVsKzEpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjaGlsZExldmVsID0gMDtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gc2V0cyB0aGUgdGVtcGxhdGUgZm9yIHRoZSB0cmVlIGJhc2VkIG9uIHRoZSBwcm9wZXJ0eSBzZWxlY3RlZC5cbiAgICBwcml2YXRlIHNldFRyZWVUZW1wbGF0ZSh2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgPT09ICdDbGFzc2ljJykge1xuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmNoZWNrW1wiZW5hYmxlXCJdID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSBpZih2YWx1ZSA9PT0gJ0NoZWNrYm94Jykge1xuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmNoZWNrW1wiZW5hYmxlXCJdID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5jaGVja1tcImNoa1N0eWxlXCJdID0gJ2NoZWNrYm94JztcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gJ1JhZGlvJykge1xuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmNoZWNrW1wiZW5hYmxlXCJdID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5jaGVja1tcImNoa1N0eWxlXCJdID0gJ3JhZGlvJztcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5jaGVja1tcInJhZGlvVHlwZVwiXSA9IFwiYWxsXCI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBleHRyYWN0cyBub2RlcyBmcm9tIHN0cmluZyBmb3JtYXRcbiAgICBwcml2YXRlIGdldE5vZGVzRnJvbVN0cmluZyh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdmFsdWUuc3BsaXQoJywnKS5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiBpdGVtICYmIGl0ZW0udHJpbSgpXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBnZXRzIHRoZSBub2RlcyBhbmQgb3JkZXJzIHRoZSBub2RlcyBpZiByZXF1aXJlZFxuICAgIHByaXZhdGUgZ2V0Tm9kZXMobmV3VmFsKSB7XG4gICAgICAgIGxldCBub2RlcztcbiAgICAgICAgaWYgKF8uaXNBcnJheShuZXdWYWwpKSB7XG4gICAgICAgICAgICBub2RlcyA9IGdldE9yZGVyZWREYXRhc2V0KG5ld1ZhbCwgdGhpcy5vcmRlcmJ5KTtcbiAgICAgICAgfSBlbHNlIGlmIChfLmlzT2JqZWN0KG5ld1ZhbCkpIHtcbiAgICAgICAgICAgIG5vZGVzID0gW25ld1ZhbF07XG4gICAgICAgIH0gZWxzZSBpZiAoXy5pc1N0cmluZyhuZXdWYWwpICYmICFfLmlzRW1wdHkobmV3VmFsKSkge1xuICAgICAgICAgICAgbmV3VmFsID0gbmV3VmFsLnRyaW0oKTtcbiAgICAgICAgICAgIGlmIChuZXdWYWwpIHtcbiAgICAgICAgICAgICAgICBub2RlcyA9IHRoaXMuZ2V0Tm9kZXNGcm9tU3RyaW5nKG5ld1ZhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5vZGVzO1xuICAgIH1cblxuXG4gICAgLy8gYWRkcyBjbGFzcyB0byB0aGUgbm9kZXMgaW5vcmRlciB0byBhZGQgaWNvbnMgdG8gcmVzcGVjdGl2ZSBub2RlLlxuICAgIHByaXZhdGUgc2V0Tm9kZWNsYXNzZXModHJlZUlkLCB0cmVlTm9kZSkge1xuICAgICAgICByZXR1cm4gdHJlZU5vZGUuaWNvbiA/IHthZGQ6IFtgJHt0cmVlTm9kZS5pY29ufWBdfSA6ICcnO1xuICAgIH07XG5cbiAgICAvLyBTZXRzIHRoZSBub2RlIGxhYmVsIHdpdGggYW55IGljb24gaWYgYm91bmQgdG9cbiAgICBwcml2YXRlIHNldE5vZGVEYXRhKG5vZGVzLCBkZXB0aCwgbGV2ZWwsIHBhcmVudE5vZGUsIHR5cGUpIHtcbiAgICAgICAgaWYoZGVwdGggPT09IDApIHtcbiAgICAgICAgICAgIG5vZGVzLm1hcChub2RlID0+IHtcbiAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldE5vZGVEYXRhKG5vZGUuY2hpbGRyZW4sIGRlcHRoLCBsZXZlbCAsIHBhcmVudE5vZGUsIHR5cGUpO1xuICAgICAgICAgICAgICAgIH0gaWYgKG5vZGUuaWNvbiAmJiB0aGlzLm5vZGVsYWJlbCA9PSAnaWNvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZVt0eXBlXSA9IG5vZGUuaWNvbjtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYobm9kZS5uYW1lICYmIHRoaXMubm9kZWxhYmVsID09ICduYW1lJykge1xuICAgICAgICAgICAgICAgICAgICBub2RlW3R5cGVdID0gbm9kZS5uYW1lO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbm9kZXMubWFwKG5vZGUgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkcmVuICYmIGxldmVsID4gMSkge1xuICAgICAgICAgICAgICAgICAgICBpZihkZXB0aCA9PT0gbGV2ZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE5vZGUgPSBub2RlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0Tm9kZURhdGEobm9kZS5jaGlsZHJlbiwgZGVwdGgsIGxldmVsIC0gMSwgcGFyZW50Tm9kZSwgdHlwZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChsZXZlbCA9PT0gMSAmJiAodHlwZSA9PT0gXCJuYW1lXCIgPyB0aGlzLm5vZGVsYWJlbC5pbmNsdWRlcyhcImxhYmVsXCIpIHx8IHRoaXMubm9kZWxhYmVsLmluY2x1ZGVzKFwibmFtZVwiKTogdGhpcy5ub2RlaWNvbi5pbmNsdWRlcyhcImxhYmVsXCIpIHx8IHRoaXMubm9kZWljb24uaW5jbHVkZXMoXCJuYW1lXCIpICkpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Tm9kZVt0eXBlXSA9IG5vZGUubmFtZSB8fCBub2RlLmxhYmVsO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYobGV2ZWwgPT09IDEgJiYgKG5vZGUuaWNvbiAhPT0gdW5kZWZpbmVkKSAmJiAodHlwZSA9PT0gXCJuYW1lXCIgPyB0aGlzLm5vZGVsYWJlbC5pbmNsdWRlcyhcImljb25cIikgOiB0aGlzLm5vZGVpY29uLmluY2x1ZGVzKFwiaWNvblwiKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Tm9kZVt0eXBlXSA9IG5vZGUuaWNvbjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gYWRkcyB0cmVlIGljb25zIHRvIHRoZSBub2RlcyBvbiBsb2FkIG9mIHRoZSB0cmVlXG4gICAgcHJpdmF0ZSBjaGFuZ2VUcmVlSWNvbnMobnYpIHtcbiAgICAgICAgbGV0IGVsZUNsb3NlID0gJCgndWxbbmFtZT1cIicgKyB0aGlzLm5hbWUgKyAnXCJdIGxpIHNwYW4uYnV0dG9uLnN3aXRjaCcpO1xuXG4gICAgICAgICQoZWxlQ2xvc2UpLm1hcCgoaWR4LCBlbGUpID0+IHtcbiAgICAgICAgICAgICQoZWxlKS5hZGRDbGFzcyhudik7XG4gICAgICAgICAgICAkKGVsZSkub24oXCJjbGlja1wiLGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgJChlbGUpLmFkZENsYXNzKG52KTtcbiAgICAgICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UGF0aCh0cmVlTm9kZSwgcGF0aCkge1xuICAgICAgICBpZih0cmVlTm9kZS5nZXRQYXJlbnROb2RlKCkgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHBhdGggPSBcIi9cIiArIHRyZWVOb2RlLm5hbWUgKyBwYXRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGF0aCA9IHRoaXMuZ2V0UGF0aCh0cmVlTm9kZS5nZXRQYXJlbnROb2RlKCksIHBhdGgpICsgXCIvXCIgKyB0cmVlTm9kZS5uYW1lO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXRoO1xuICAgIH1cblxuICAgIC8vIGJpbmRzIHRoZSBjbGljayBldmVudCB0byBhbGwgbm9kZXMgdG8gb3BlbiB0aGUgY2hpbGQgbm9kZXNcbiAgICBwdWJsaWMgb25DbGljayhldmVudCwgdHJlZUlkLCB0cmVlTm9kZSwgY2xpY2tGbGFnKSB7XG4gICAgICAgIHZhciB0cmVlT2JqID0gJC5mbi56VHJlZS5nZXRaVHJlZU9iaihgJHt0aGlzLm5hbWV9YCk7XG4gICAgICAgIGxldCBwYXRoID0gdGhpcy5nZXRQYXRoKHRyZWVOb2RlLCBcIlwiKTtcblxuICAgICAgICBjb25zdCBldmVudFBhcmFtcyA9IHtcbiAgICAgICAgICAgICckZXZlbnQnICA6IGV2ZW50LFxuICAgICAgICAgICAgXCIkaXRlbVwiICAgOiB0cmVlTm9kZSxcbiAgICAgICAgICAgIFwiJHBhdGhcIiA6IHBhdGhcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdzZWxlY3QnLCBldmVudFBhcmFtcyk7XG4gICAgfVxuXG4gICAgLy8gQWRkcyB0cmVlIGljb24gY2xhc3NlcyB0byBjaGlsZCBub2RlcyB3aGVuIGV4cGFuZGVkXG4gICAgcHVibGljIG9uRXhwYW5kKGV2ZW50LCB0cmVlSWQsIHRyZWVOb2RlKSB7XG4gICAgICAgIGxldCBzZWxmID0gdGhpcztcbiAgICAgICAgbGV0IHBhdGggPSB0aGlzLmdldFBhdGgodHJlZU5vZGUsIFwiXCIpO1xuXG4gICAgICAgIGNvbnN0IGV2ZW50UGFyYW1zID0ge1xuICAgICAgICAgICAgJyRldmVudCcgIDogZXZlbnQsXG4gICAgICAgICAgICBcIiRpdGVtXCIgICA6IHRyZWVOb2RlLFxuICAgICAgICAgICAgXCIkcGF0aFwiIDogcGF0aFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2V4cGFuZCcsIGV2ZW50UGFyYW1zKTtcbiAgICAgICAgdHJlZU5vZGUuY2hpbGRyZW4gPyB0cmVlTm9kZS5jaGlsZHJlbi5tYXAoKGVsKSA9PiB7XG4gICAgICAgICAgICBpZiAoZWwuaXNQYXJlbnQpIHtcbiAgICAgICAgICAgICAgICBsZXQgZWxlID0gJChgIyR7ZWwudElkfV9zd2l0Y2hgKTtcbiAgICAgICAgICAgICAgICAkKGVsZSkuYWRkQ2xhc3Moc2VsZi50cmVlaWNvbiB8fCBkZWZhdWx0VHJlZUljb25DbGFzcyk7XG4gICAgICAgICAgICAgICAgJChlbGUpLm9uKFwiY2xpY2tcIiwgZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICQoZWxlKS5hZGRDbGFzcyhzZWxmLnRyZWVpY29uIHx8IGRlZmF1bHRUcmVlSWNvbkNsYXNzKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pIDogJyc7XG4gICAgfVxuXG4gICAgcHVibGljIG9uQ29sbGFwc2UoZXZlbnQsIHRyZWVJZCwgdHJlZU5vZGUpIHtcbiAgICAgICAgbGV0IHBhdGggPSB0aGlzLmdldFBhdGgodHJlZU5vZGUsIFwiXCIpO1xuXG4gICAgICAgIGNvbnN0IGV2ZW50UGFyYW1zID0ge1xuICAgICAgICAgICAgJyRldmVudCcgIDogZXZlbnQsXG4gICAgICAgICAgICBcIiRpdGVtXCIgICA6IHRyZWVOb2RlLFxuICAgICAgICAgICAgXCIkcGF0aFwiIDogcGF0aFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2NvbGxhcHNlJywgZXZlbnRQYXJhbXMpO1xuICAgIH1cblxuICAgIC8vIGZ1bmN0aW9uIHRvIHN1cHBvcnQgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBvZiBvYmplY3RzXG4gICAgcHVibGljIG1vZGlmeU9iamVjdHMoYXJyYXkpIHtcbiAgICAgICAgYXJyYXkuZm9yRWFjaChvYmogPT4ge1xuICAgICAgICAgIGlmIChvYmoubGFiZWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgb2JqLm5hbWUgPSBvYmoubGFiZWw7XG4gICAgICAgICAgICBkZWxldGUgb2JqLmxhYmVsO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAob2JqLmNoaWxkcmVuICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMubW9kaWZ5T2JqZWN0cyhvYmouY2hpbGRyZW4pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBhcnJheTtcbiAgICAgIH1cblxuICAgIC8vIHNldHMgdGhlIG5vZGUgY2hpbGRyZW4gcHJvcGVydHkgdG8gcGFyZW50IG5vZGVzXG4gICAgcHJpdmF0ZSBzZXROb2RlQ2hpbGRyZW4obm9kZXMsIGRlcHRoLCBsZXZlbCwgcGFyZW50Tm9kZSkge1xuICAgICAgICBpZiAoZGVwdGggPD0gMCkge1xuICAgICAgICAgIHJldHVybiBub2RlcztcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzW2ldO1xuXG4gICAgICAgICAgaWYoZGVwdGggPT09IGxldmVsKSB7XG4gICAgICAgICAgICBwYXJlbnROb2RlICA9IG5vZGVzW2ldO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobm9kZS5jaGlsZHJlbiAmJiBub2RlLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGlmIChsZXZlbCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHBhcmVudE5vZGUuY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuLm1hcChjaGlsZCA9PiAoeyBuYW1lOiBjaGlsZC5uYW1lLCBjaGlsZHJlbjogY2hpbGQ/LmNoaWxkcmVuIH0pKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLnNldE5vZGVDaGlsZHJlbihub2RlLmNoaWxkcmVuLCBkZXB0aCAsbGV2ZWwgLSAxLCBwYXJlbnROb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbm9kZXM7XG4gICAgICB9XG5cbiAgICBwcml2YXRlIGNvdW50RGVwdGgoc3RyKSB7XG4gICAgICAgIGNvbnN0IHJlZ2V4ID0gL1xcWy4qP1xcXS9nO1xuICAgICAgICBsZXQgbWF0Y2hlcyA9IHN0ci5tYXRjaChyZWdleCk7XG4gICAgICAgIGxldCBjb3VudCA9IDE7XG5cbiAgICAgICAgaWYobWF0Y2hlcyA9PT0gbnVsbCkgcmV0dXJuIGNvdW50O1xuXG4gICAgICAgIGZvciAobGV0IG1hdGNoIG9mIG1hdGNoZXMpIHtcbiAgICAgICAgICBjb3VudCsrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvdW50O1xuICAgICAgfVxuXG5cbiAgICAvLyBSZW5kZXJzIHRoZSB0cmVlIG9uIHRvIHRoZSBkb21cbiAgICBwdWJsaWMgcmVuZGVyVHJlZSgpIHtcbiAgICAgICAgY29uc29sZS5sb2codGhpcy5ub2RlcywgJ3RoaXMubm9kZXMnKTtcbiAgICAgICAgaWYodGhpcy5ub2Rlcykge1xuICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnaWQnLCB0aGlzLm5hbWUpO1xuICAgICAgICAgICAgdGhpcy5ub2RlcyA9IHRoaXMubW9kaWZ5T2JqZWN0cyh0aGlzLm5vZGVzKTtcbiAgICAgICAgICAgIHRoaXMuc2V0VHJlZVRlbXBsYXRlKHRoaXMudHJlZUNsYXNzKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMubm9kZWxhYmVsKSB7XG4gICAgICAgICAgICAgICAgbGV0IGRlcHRoID0wO1xuICAgICAgICAgICAgICAgIGlmKHRoaXMubm9kZWxhYmVsLmluY2x1ZGVzKFwiY2hpbGRyZW5cIikpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVwdGggPSB0aGlzLmNvdW50RGVwdGgodGhpcy5ub2RlbGFiZWwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnNldE5vZGVEYXRhKHRoaXMubm9kZXMsIGRlcHRoLCBkZXB0aCwgbnVsbCwgXCJuYW1lXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYodGhpcy5ub2RlaWNvbikgIHtcbiAgICAgICAgICAgICAgICBsZXQgZGVwdGggPTA7XG4gICAgICAgICAgICAgICAgaWYodGhpcy5ub2RlaWNvbi5pbmNsdWRlcyhcImNoaWxkcmVuXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlcHRoID0gdGhpcy5jb3VudERlcHRoKHRoaXMubm9kZWljb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnNldE5vZGVEYXRhKHRoaXMubm9kZXMsIGRlcHRoLCBkZXB0aCwgbnVsbCwgXCJpY29uXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5ub2RlY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICBsZXQgZGVwdGggPSB0aGlzLmNvdW50RGVwdGgodGhpcy5ub2RlY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgIGlmKGRlcHRoID4gMSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vZGVzID0gdGhpcy5zZXROb2RlQ2hpbGRyZW4odGhpcy5ub2RlcywgZGVwdGgsIGRlcHRoLCBudWxsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuXG4gICAgICAgIHRoaXMuc2V0dGluZy52aWV3Wydub2RlQ2xhc3NlcyddID0gdGhpcy5zZXROb2RlY2xhc3NlcztcbiAgICAgICAgdGhpcy5zZXR0aW5nLmNhbGxiYWNrW1wib25DbGlja1wiXSA9IHRoaXMub25DbGljay5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnNldHRpbmcuY2FsbGJhY2tbXCJvbkV4cGFuZFwiXSA9IHRoaXMub25FeHBhbmQuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5zZXR0aW5nLmNhbGxiYWNrW1wib25Db2xsYXBzZVwiXSA9IHRoaXMub25Db2xsYXBzZS5iaW5kKHRoaXMpO1xuXG4gICAgICAgIGxldCB6VHJlZSA9ICQuZm4uelRyZWUuaW5pdCgkKCd1bFtuYW1lPVwiJyArIHRoaXMubmFtZSArICdcIl0nKSwgdGhpcy5zZXR0aW5nLCB0aGlzLm5vZGVzKTtcblxuICAgICAgICAkLmZuLnpUcmVlS2V5Ym9hcmROYXZpZ2F0aW9uKHpUcmVlLCAkKCd1bFtuYW1lPVwiJyArIHRoaXMubmFtZSArICdcIl0nKSwgbnVsbCwgdGhpcy50cmVlaWNvbiB8fCBkZWZhdWx0VHJlZUljb25DbGFzcyk7XG5cbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VUcmVlSWNvbnModGhpcy50cmVlaWNvbiB8fCBkZWZhdWx0VHJlZUljb25DbGFzcyk7XG4gICAgICAgIH0sIDIwMCk7XG4gICAgfVxufVxuIl19
@@ -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==