@smartbit4all/ng-client 1.2.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. package/esm2020/lib/session/api/api/session.service.mjs +4 -4
  2. package/esm2020/lib/session/cookie-service/smart-cookie.service.mjs +4 -4
  3. package/esm2020/lib/session/dev-tool/smart-dev-tool-dialog/smart-dev-tool-dialog.component.mjs +4 -4
  4. package/esm2020/lib/session/dev-tool/smart-dev-tool-dialog/smart-dev-tool-dialog.service.mjs +4 -4
  5. package/esm2020/lib/session/dev-tool/smart-dev-tool-floating-button/smart-dev-tool-floating-button.component.mjs +4 -4
  6. package/esm2020/lib/session/dev-tool/smart-dev-tool.interceptor.mjs +7 -7
  7. package/esm2020/lib/session/dev-tool/smart-dev-tool.service.mjs +7 -7
  8. package/esm2020/lib/session/smart-error-catching.interceptor.mjs +4 -4
  9. package/esm2020/lib/session/smart-header-maintainer.interceptor.mjs +4 -4
  10. package/esm2020/lib/session/smart-session.module.mjs +5 -5
  11. package/esm2020/lib/session/smart-session.service.mjs +4 -4
  12. package/esm2020/lib/session/smart-timer/smart-session-timer.component.mjs +4 -4
  13. package/esm2020/lib/session/smart-timer/smart-session-timer.service.mjs +4 -4
  14. package/esm2020/lib/smart-client/smart-authentication.service.mjs +4 -4
  15. package/esm2020/lib/smart-client/smart-component-api-client.mjs +2 -2
  16. package/esm2020/lib/smart-client/smart-file-uploader/smart-file-uploader.component.mjs +4 -4
  17. package/esm2020/lib/smart-client/smart.component.mjs +4 -4
  18. package/esm2020/lib/smart-client/smart.service.mjs +4 -4
  19. package/esm2020/lib/smart-ng-client.module.mjs +19 -8
  20. package/esm2020/lib/smart-ng-client.service.mjs +4 -4
  21. package/esm2020/lib/smart-tree/projects.mjs +9 -0
  22. package/esm2020/lib/smart-tree/smarttree-generic.service.mjs +292 -0
  23. package/esm2020/lib/smart-tree/smarttree.component.mjs +180 -0
  24. package/esm2020/lib/smart-tree/smarttree.model.mjs +7 -0
  25. package/esm2020/lib/smart-tree/smarttree.module.mjs +50 -0
  26. package/esm2020/lib/smart-tree/smarttree.node.model.mjs +6 -0
  27. package/esm2020/lib/smart-tree/smarttree.service.interface.mjs +2 -0
  28. package/esm2020/lib/smart-tree/smarttree.service.mjs +47 -0
  29. package/esm2020/lib/smart-tree/tree-api/api/tree.service.mjs +644 -0
  30. package/esm2020/lib/smart-tree/tree-api/configuration.mjs +91 -0
  31. package/esm2020/lib/smart-tree/tree-api/encoder.mjs +19 -0
  32. package/esm2020/lib/smart-tree/tree-api/param.mjs +2 -0
  33. package/esm2020/lib/smart-tree/tree-api/variables.mjs +9 -0
  34. package/esm2020/lib/view-context/api/api/view.service.mjs +4 -4
  35. package/esm2020/lib/view-context/api/api.module.mjs +5 -5
  36. package/esm2020/lib/view-context/message-dialog/message-dialog.component.mjs +4 -4
  37. package/esm2020/lib/view-context/smart-ui-action/components/success-snack-bar/success-snack-bar.component.mjs +4 -4
  38. package/esm2020/lib/view-context/smart-ui-action/dialogs/ui-action-confirm-dialog/ui-action-confirm-dialog.component.mjs +4 -4
  39. package/esm2020/lib/view-context/smart-ui-action/dialogs/ui-action-confirm-dialog/ui-action-confirm-dialog.service.mjs +4 -4
  40. package/esm2020/lib/view-context/smart-ui-action/dialogs/ui-action-file-upload-dialog/ui-action-file-upload-dialog.component.mjs +4 -4
  41. package/esm2020/lib/view-context/smart-ui-action/dialogs/ui-action-file-upload-dialog/ui-action-file-upload-dialog.service.mjs +4 -4
  42. package/esm2020/lib/view-context/smart-ui-action/dialogs/ui-action-input-dialog/ui-action-input-dialog.component.mjs +4 -4
  43. package/esm2020/lib/view-context/smart-ui-action/dialogs/ui-action-input-dialog/ui-action-input-dialog.service.mjs +4 -4
  44. package/esm2020/lib/view-context/smart-ui-action/ui-action-toolbar.component.mjs +4 -4
  45. package/esm2020/lib/view-context/smart-ui-action/ui-action.descriptor.service.mjs +4 -4
  46. package/esm2020/lib/view-context/smart-ui-action/ui-action.service.mjs +4 -4
  47. package/esm2020/lib/view-context/smart-view-context-error-dialog/smart-view-context-error-dialog.component.mjs +4 -4
  48. package/esm2020/lib/view-context/smart-view-context-error-dialog/smart-view-context-error-dialog.service.mjs +4 -4
  49. package/esm2020/lib/view-context/smart-view-context.interceptor.mjs +4 -4
  50. package/esm2020/lib/view-context/smart-view-context.module.mjs +5 -5
  51. package/esm2020/lib/view-context/smart-view-context.service.mjs +7 -7
  52. package/esm2020/lib/view-context/smart-view-redirect/smart-view-redirect.mjs +4 -4
  53. package/esm2020/lib/view-context/value-api/api/value.service.mjs +4 -4
  54. package/esm2020/lib/view-context/value-api/api.module.mjs +5 -5
  55. package/esm2020/projects.mjs +2 -1
  56. package/fesm2015/smartbit4all-ng-client.mjs +1536 -188
  57. package/fesm2015/smartbit4all-ng-client.mjs.map +1 -1
  58. package/fesm2020/smartbit4all-ng-client.mjs +1498 -188
  59. package/fesm2020/smartbit4all-ng-client.mjs.map +1 -1
  60. package/lib/smart-client/smart-component-api-client.d.ts +1 -1
  61. package/lib/smart-ng-client.module.d.ts +2 -1
  62. package/lib/smart-tree/projects.d.ts +5 -0
  63. package/lib/smart-tree/smarttree-generic.service.d.ts +50 -0
  64. package/lib/smart-tree/smarttree.component.d.ts +42 -0
  65. package/lib/smart-tree/smarttree.model.d.ts +41 -0
  66. package/lib/smart-tree/smarttree.module.d.ts +14 -0
  67. package/lib/smart-tree/smarttree.node.model.d.ts +13 -0
  68. package/lib/smart-tree/smarttree.service.d.ts +24 -0
  69. package/lib/smart-tree/smarttree.service.interface.d.ts +43 -0
  70. package/lib/smart-tree/tree-api/api/tree.service.d.ts +177 -0
  71. package/lib/smart-tree/tree-api/configuration.d.ts +104 -0
  72. package/lib/smart-tree/tree-api/encoder.d.ts +11 -0
  73. package/lib/smart-tree/tree-api/param.d.ts +37 -0
  74. package/lib/smart-tree/tree-api/variables.d.ts +8 -0
  75. package/package.json +1 -2
  76. package/projects.d.ts +1 -0
  77. package/smartbit4all-ng-client-2.0.0.tgz +0 -0
  78. package/src/lib/smart-tree/tree-api/README.md +226 -0
  79. package/schematics/collection.json +0 -11
  80. package/schematics/smart-component/index.ts +0 -26
  81. package/schematics/smart-component/schema.json +0 -20
  82. package/schematics/smart-component/smart-component.schema.ts +0 -4
  83. package/schematics/smart-component/templates/__name@dasherize__.component.css.template +0 -0
  84. package/schematics/smart-component/templates/__name@dasherize__.component.html.template +0 -3
  85. package/schematics/smart-component/templates/__name@dasherize__.component.ts.template +0 -26
  86. package/smartbit4all-ng-client-1.2.0.tgz +0 -0
@@ -0,0 +1,292 @@
1
+ import { Inject, Injectable } from '@angular/core';
2
+ import { SmartViewContextService, UiActionDescriptorService, UiActionService, } from '../view-context/projects';
3
+ import { TreeService } from './tree-api/api/tree.service';
4
+ import { SmartTreeNodeButtonType } from './smarttree.model';
5
+ import { SmarttreeService } from './smarttree.service';
6
+ import { Subject } from 'rxjs';
7
+ import * as i0 from "@angular/core";
8
+ export class SmarttreeGenericService extends SmarttreeService {
9
+ constructor(inject, pageName, treeId) {
10
+ super();
11
+ this.pageName = pageName;
12
+ this.treeId = treeId;
13
+ // UseUiAction properties
14
+ this.submit = new Subject();
15
+ this.reSubscribeToChange = new Subject();
16
+ this.uiActionDescriptors = new Map();
17
+ this.viewContextName = 'viewContextUuid';
18
+ this.configureTree({
19
+ pageName: this.pageName,
20
+ treeid: this.treeId,
21
+ viewContextName: this.viewContextName,
22
+ });
23
+ this.viewContext = inject.get(SmartViewContextService);
24
+ this.service = inject.get(TreeService);
25
+ this.uiActionService = inject.get(UiActionService);
26
+ this.uiActionDescriptorService = inject.get(UiActionDescriptorService);
27
+ this.initialize();
28
+ }
29
+ constructUiActionModels(uiActions) {
30
+ this.uiActionModels = uiActions.map((uiAction) => {
31
+ return {
32
+ serviceToUse: this,
33
+ uiAction,
34
+ };
35
+ });
36
+ }
37
+ configureTree(configuration) {
38
+ this.treeId = configuration.treeid;
39
+ this.viewContextName = configuration.viewContextName;
40
+ this.pageName = configuration.pageName;
41
+ }
42
+ async initialize() {
43
+ if (sessionStorage.getItem(this.viewContextName)) {
44
+ await this.downloadTree().then((rootNodes) => {
45
+ this.treeFromBackend = rootNodes;
46
+ this.syncTree();
47
+ });
48
+ }
49
+ }
50
+ async downloadTree() {
51
+ let uuid = this.viewContext.getUuidOfPage(this.pageName);
52
+ const rootNodes = await this.service.getRootNodes(uuid, this.treeId).toPromise();
53
+ const uiActions = await this.service.getMainActions(uuid, this.treeId).toPromise();
54
+ if (uiActions) {
55
+ this.constructUiActionModels(uiActions);
56
+ }
57
+ if (!rootNodes) {
58
+ throw new Error('RootNodes are undefined!');
59
+ }
60
+ return rootNodes;
61
+ }
62
+ async downloadChildren(parentNode) {
63
+ let uuid = this.viewContext.getUuidOfPage(this.pageName);
64
+ const children = await this.service
65
+ .getChildrenNodes(uuid, this.treeId, parentNode.identifier)
66
+ .toPromise();
67
+ if (!children) {
68
+ throw new Error(`Node with identifier ${parentNode.identifier} does not have children.`);
69
+ }
70
+ return children;
71
+ }
72
+ async onTreeNodeOpen(treeNode) {
73
+ let viewUuid = this.viewContext.getUuidOfPage(this.pageName);
74
+ if (treeNode?.expanded) {
75
+ let tempTreeNode = await this.service
76
+ .collapseNode(viewUuid, this.treeId, treeNode.identifier)
77
+ .toPromise();
78
+ treeNode = tempTreeNode;
79
+ }
80
+ else if (!treeNode?.expanded) {
81
+ let tempTreeNode = await this.service
82
+ .expandNode(viewUuid, this.treeId, treeNode?.identifier)
83
+ .toPromise();
84
+ treeNode = tempTreeNode;
85
+ }
86
+ let node = this.deepSearchTreeNode(treeNode?.identifier, this.treeFromBackend);
87
+ node.expanded = treeNode?.expanded;
88
+ node.childrenNodes = treeNode?.childrenNodes;
89
+ this.syncTree();
90
+ }
91
+ onTreeNodeClick(treeNode) {
92
+ this.selectFolder(treeNode.identifier, treeNode);
93
+ }
94
+ async selectFolder(folderUri, treeNode) {
95
+ let viewUuid = this.viewContext.getUuidOfPage(this.pageName);
96
+ await this.service
97
+ .selectNode(viewUuid, this.treeId, treeNode.identifier)
98
+ .toPromise()
99
+ .then((updatedTreeNode) => {
100
+ if (this.selectedNode) {
101
+ this.selectedNode.selected = false;
102
+ }
103
+ this.selectedNode = updatedTreeNode;
104
+ let node = this.deepSearchTreeNode(updatedTreeNode?.identifier, this.treeFromBackend);
105
+ if (!node) {
106
+ throw Error('Tree node does not exist');
107
+ }
108
+ node.expanded = updatedTreeNode?.expanded;
109
+ node.childrenNodes = updatedTreeNode?.childrenNodes;
110
+ node.selected = updatedTreeNode?.selected;
111
+ treeNode = updatedTreeNode;
112
+ this.syncTree();
113
+ this.viewContext.getAndSyncViewContext(this.viewContext.getUuidOfPage(this.viewContextName));
114
+ });
115
+ }
116
+ async updateTreeOnTheFly() {
117
+ await this.initialize();
118
+ }
119
+ async syncTree() {
120
+ await this.cacheActionDesciptors(this.getAllNodes(this.treeFromBackend));
121
+ if (!this.treeFromBackend) {
122
+ throw new Error('There is no treeFromBackend available!');
123
+ }
124
+ if (!this.smartTreeModel) {
125
+ this.smartTreeModel = {
126
+ rootNodes: [],
127
+ };
128
+ }
129
+ let smartTreeNodes = this.createButtonsForTreeNodes(this.treeFromBackend);
130
+ this.smartTreeModel = undefined;
131
+ this.smartTreeModel = {
132
+ rootNodes: [],
133
+ };
134
+ this.smartTreeModelChanged.next(this.smartTreeModel);
135
+ this.smartTreeModel.rootNodes = smartTreeNodes;
136
+ this.findSelected(this.smartTreeModel.rootNodes);
137
+ this.smartTreeModelChanged.next(this.smartTreeModel);
138
+ }
139
+ deepSearchTreeNode(identifier, nodes) {
140
+ let treeNode;
141
+ for (let index = 0; index < nodes.length; index++) {
142
+ const node = nodes[index];
143
+ if (node.identifier === identifier) {
144
+ treeNode = node;
145
+ break;
146
+ }
147
+ if (node.childrenNodes && node.childrenNodes.length) {
148
+ treeNode = this.deepSearchTreeNode(identifier, node.childrenNodes);
149
+ if (treeNode) {
150
+ break;
151
+ }
152
+ }
153
+ }
154
+ return treeNode;
155
+ }
156
+ findSelected(nodes) {
157
+ return nodes.forEach((node) => {
158
+ if (node.selected) {
159
+ this.selectedNode = node;
160
+ return;
161
+ }
162
+ else if (node.childrenNodes && node.childrenNodes.length) {
163
+ return this.findSelected(node.childrenNodes);
164
+ }
165
+ });
166
+ }
167
+ createButtonsForTreeNodes(nodes) {
168
+ nodes.map((node) => {
169
+ node.button = node.actions?.length
170
+ ? {
171
+ type: SmartTreeNodeButtonType.MENU,
172
+ icon: 'more_vert',
173
+ menuItemButtons: node.actions.map((action) => {
174
+ return {
175
+ type: SmartTreeNodeButtonType.NORMAL,
176
+ label: this.getLabelByAction(action),
177
+ callback: this.doAction.bind(this),
178
+ args: [action, node.identifier],
179
+ };
180
+ }),
181
+ }
182
+ : undefined;
183
+ node.icon = 'Folders';
184
+ if (node.childrenNodes) {
185
+ node.childrenNodes = this.createButtonsForTreeNodes(node.childrenNodes);
186
+ }
187
+ });
188
+ return nodes;
189
+ }
190
+ async doAction(args) {
191
+ let uiAction = args[0];
192
+ let nodeUuid = args[1];
193
+ if (uiAction.params) {
194
+ uiAction.params['nodeUuid'] = nodeUuid;
195
+ }
196
+ else {
197
+ uiAction.params = {
198
+ nodeUuid: nodeUuid,
199
+ };
200
+ }
201
+ let uiActionModel = {
202
+ serviceToUse: this,
203
+ uiAction,
204
+ };
205
+ this.uiActionService.uiActionModel = uiActionModel;
206
+ this.uiActionService.execute(uiAction);
207
+ }
208
+ getAllNodes(nodes) {
209
+ return nodes.flatMap((n) => [n, ...this.getAllNodes(n.childrenNodes)]);
210
+ }
211
+ async cacheActionDesciptors(nodes) {
212
+ await Promise.all(nodes.map(async (node) => {
213
+ let newUiActions = node.actions?.filter((uiAction) => !this.uiActionDescriptors.get(uiAction.code));
214
+ if (!newUiActions) {
215
+ return;
216
+ }
217
+ await Promise.all(newUiActions.map(async (uiAction) => {
218
+ if (!this.uiActionDescriptors.get(uiAction.code)) {
219
+ let descriptor = await this.uiActionDescriptorService.getActionDescriptor(uiAction);
220
+ this.uiActionDescriptors.set(uiAction.code, descriptor);
221
+ }
222
+ }));
223
+ }));
224
+ }
225
+ getLabelByAction(action) {
226
+ let desc = this.uiActionDescriptors.get(action.code);
227
+ return desc.title;
228
+ }
229
+ // #region UseUiAction
230
+ getAdditionalParams(uiAction) {
231
+ if (uiAction.params && uiAction.params['nodeUuid']) {
232
+ let nodeUuid = uiAction.params['nodeUuid'];
233
+ let nodeName;
234
+ if (uiAction.code === 'RENAME') {
235
+ nodeName = this.deepSearchTreeNode(nodeUuid, this.treeFromBackend)?.caption;
236
+ }
237
+ return {
238
+ forTextArea: '',
239
+ forTextField: nodeName ? nodeName : '',
240
+ };
241
+ }
242
+ return {
243
+ forTextArea: '',
244
+ forTextField: '',
245
+ };
246
+ }
247
+ getModel() {
248
+ return {};
249
+ }
250
+ async performUiActionRequest(uiActionRequest) {
251
+ if (uiActionRequest.params['nodeUuid']) {
252
+ await this.performNodeUiActionRequest(uiActionRequest);
253
+ }
254
+ else {
255
+ await this.performMainUiActionRequest(uiActionRequest);
256
+ }
257
+ await this.viewContext.getAndSyncViewContext();
258
+ this.syncTree();
259
+ }
260
+ async performNodeUiActionRequest(uiActionRequest) {
261
+ let nodeId = uiActionRequest.params['nodeUuid'];
262
+ delete uiActionRequest.params['nodeUuid'];
263
+ let viewUuid = this.viewContext.getUuidOfPage(this.pageName);
264
+ this.treeFromBackend = await this.service
265
+ .performAction(viewUuid, this.treeId, nodeId, uiActionRequest)
266
+ .toPromise();
267
+ }
268
+ async performMainUiActionRequest(uiActionRequest) {
269
+ let viewUuid = this.viewContext.getUuidOfPage(this.pageName);
270
+ this.treeFromBackend = await this.service
271
+ .performMainAction(viewUuid, this.treeId, uiActionRequest)
272
+ .toPromise();
273
+ }
274
+ handleSpecificDemandsAsynchronously(uiAction, uiActionRequest) {
275
+ throw new Error('Method not implemented.');
276
+ }
277
+ }
278
+ SmarttreeGenericService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: SmarttreeGenericService, deps: [{ token: i0.Injector }, { token: 'pageName' }, { token: 'treeId' }], target: i0.ɵɵFactoryTarget.Injectable });
279
+ SmarttreeGenericService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: SmarttreeGenericService, providedIn: 'root' });
280
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: SmarttreeGenericService, decorators: [{
281
+ type: Injectable,
282
+ args: [{
283
+ providedIn: 'root',
284
+ }]
285
+ }], ctorParameters: function () { return [{ type: i0.Injector }, { type: undefined, decorators: [{
286
+ type: Inject,
287
+ args: ['pageName']
288
+ }] }, { type: undefined, decorators: [{
289
+ type: Inject,
290
+ args: ['treeId']
291
+ }] }]; } });
292
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnR0cmVlLWdlbmVyaWMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LW5nLWNsaWVudC9zcmMvbGliL3NtYXJ0LXRyZWUvc21hcnR0cmVlLWdlbmVyaWMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQ0wsdUJBQXVCLEVBSXZCLHlCQUF5QixFQUd6QixlQUFlLEdBR2hCLE1BQU0sMEJBQTBCLENBQUM7QUFDbEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzFELE9BQU8sRUFBaUIsdUJBQXVCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQVcvQixNQUFNLE9BQU8sdUJBQ1gsU0FBUSxnQkFBaUM7SUFtQnpDLFlBQ0UsTUFBZ0IsRUFDYyxRQUFnQixFQUNsQixNQUFjO1FBRTFDLEtBQUssRUFBRSxDQUFDO1FBSHNCLGFBQVEsR0FBUixRQUFRLENBQVE7UUFDbEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQW5CNUMseUJBQXlCO1FBQ3pCLFdBQU0sR0FBa0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUN0Qyx3QkFBbUIsR0FBa0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUVuRCx3QkFBbUIsR0FBb0MsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUlqRSxvQkFBZSxHQUFXLGlCQUFpQixDQUFDO1FBZTFDLElBQUksQ0FBQyxhQUFhLENBQUM7WUFDakIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3ZCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNuQixlQUFlLEVBQUUsSUFB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QyxXQUFXLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUU3RCxJQUFJLENBQUMsZUFBZSxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU87YUFDdEMsYUFBYSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTyxFQUFFLE1BQU0sRUFBRSxlQUFlLENBQUM7YUFDOUQsU0FBUyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUNELEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxlQUFnQztRQUMvRCxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFN0QsSUFBSSxDQUFDLGVBQWUsR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPO2FBQ3RDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTyxFQUFFLGVBQWUsQ0FBQzthQUMxRCxTQUFTLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBRUQsbUNBQW1DLENBQ2pDLFFBQWtCLEVBQ2xCLGVBQWdDO1FBRWhDLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUM3QyxDQUFDOztvSEE5VVUsdUJBQXVCLDBDQXNCeEIsVUFBVSxhQUNWLFFBQVE7d0hBdkJQLHVCQUF1QixjQUZ0QixNQUFNOzJGQUVQLHVCQUF1QjtrQkFIbkMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQXVCSSxNQUFNOzJCQUFDLFVBQVU7OzBCQUNqQixNQUFNOzJCQUFDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgU21hcnRWaWV3Q29udGV4dFNlcnZpY2UsXHJcbiAgVWlBY3Rpb24sXHJcbiAgVWlBY3Rpb25BZGRpdGlvbmFsUGFyYW1zLFxyXG4gIFVpQWN0aW9uRGVzY3JpcHRvcixcclxuICBVaUFjdGlvbkRlc2NyaXB0b3JTZXJ2aWNlLFxyXG4gIFVpQWN0aW9uTW9kZWwsXHJcbiAgVWlBY3Rpb25SZXF1ZXN0LFxyXG4gIFVpQWN0aW9uU2VydmljZSxcclxuICBVaUFjdGlvblNwZWNpZmljRGVtYW5kUmVzcG9uc2UsXHJcbiAgVXNlVWlBY3Rpb24sXHJcbn0gZnJvbSAnLi4vdmlldy1jb250ZXh0L3Byb2plY3RzJztcclxuaW1wb3J0IHsgVHJlZVNlcnZpY2UgfSBmcm9tICcuL3RyZWUtYXBpL2FwaS90cmVlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTbWFydFRyZWVOb2RlLCBTbWFydFRyZWVOb2RlQnV0dG9uVHlwZSB9IGZyb20gJy4vc21hcnR0cmVlLm1vZGVsJztcclxuaW1wb3J0IHsgU21hcnR0cmVlU2VydmljZSB9IGZyb20gJy4vc21hcnR0cmVlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNtYXJ0dHJlZUNvbmZpZ3VyYXRpb24ge1xyXG4gIHRyZWVpZDogc3RyaW5nO1xyXG4gIHZpZXdDb250ZXh0TmFtZTogc3RyaW5nO1xyXG4gIHBhZ2VOYW1lOiBzdHJpbmc7XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTbWFydHRyZWVHZW5lcmljU2VydmljZVxyXG4gIGV4dGVuZHMgU21hcnR0cmVlU2VydmljZTxTbWFydFRyZWVOb2RlW10+XHJcbiAgaW1wbGVtZW50cyBVc2VVaUFjdGlvblxyXG57XHJcbiAgLy8gVXNlVWlBY3Rpb24gcHJvcGVydGllc1xyXG4gIHN1Ym1pdDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgcmVTdWJzY3JpYmVUb0NoYW5nZTogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIHVpQWN0aW9uRGVzY3JpcHRvcnM6IE1hcDxzdHJpbmcsIFVpQWN0aW9uRGVzY3JpcHRvcj4gPSBuZXcgTWFwKCk7XHJcblxyXG4gIHNlbGVjdGVkTm9kZT86IFNtYXJ0VHJlZU5vZGU7XHJcblxyXG4gIHZpZXdDb250ZXh0TmFtZTogc3RyaW5nID0gJ3ZpZXdDb250ZXh0VXVpZCc7XHJcblxyXG4gIHByb3RlY3RlZCB2aWV3Q29udGV4dCE6IFNtYXJ0Vmlld0NvbnRleHRTZXJ2aWNlO1xyXG4gIHByaXZhdGUgc2VydmljZSE6IFRyZWVTZXJ2aWNlO1xyXG5cclxuICBwcml2YXRlIHVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2UhOiBVaUFjdGlvbkRlc2NyaXB0b3JTZXJ2aWNlO1xyXG4gIHByaXZhdGUgdWlBY3Rpb25TZXJ2aWNlITogVWlBY3Rpb25TZXJ2aWNlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIGluamVjdDogSW5qZWN0b3IsXHJcbiAgICBASW5qZWN0KCdwYWdlTmFtZScpIHByb3RlY3RlZCBwYWdlTmFtZTogc3RyaW5nLFxyXG4gICAgQEluamVjdCgndHJlZUlkJykgcHJvdGVjdGVkIHRyZWVJZDogc3RyaW5nXHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG5cclxuICAgIHRoaXMuY29uZmlndXJlVHJlZSh7XHJcbiAgICAgIHBhZ2VOYW1lOiB0aGlzLnBhZ2VOYW1lLFxyXG4gICAgICB0cmVlaWQ6IHRoaXMudHJlZUlkLFxyXG4gICAgICB2aWV3Q29udGV4dE5hbWU6IHRoaXMudmlld0NvbnRleHROYW1lLFxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy52aWV3Q29udGV4dCA9IGluamVjdC5nZXQoU21hcnRWaWV3Q29udGV4dFNlcnZpY2UpO1xyXG4gICAgdGhpcy5zZXJ2aWNlID0gaW5qZWN0LmdldChUcmVlU2VydmljZSk7XHJcblxyXG4gICAgdGhpcy51aUFjdGlvblNlcnZpY2UgPSBpbmplY3QuZ2V0KFVpQWN0aW9uU2VydmljZSk7XHJcbiAgICB0aGlzLnVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2UgPSBpbmplY3QuZ2V0KFVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2UpO1xyXG5cclxuICAgIHRoaXMuaW5pdGlhbGl6ZSgpO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0VWlBY3Rpb25Nb2RlbHModWlBY3Rpb25zOiBVaUFjdGlvbltdKTogdm9pZCB7XHJcbiAgICB0aGlzLnVpQWN0aW9uTW9kZWxzID0gdWlBY3Rpb25zLm1hcCgodWlBY3Rpb246IFVpQWN0aW9uKSA9PiB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgc2VydmljZVRvVXNlOiB0aGlzLFxyXG4gICAgICAgIHVpQWN0aW9uLFxyXG4gICAgICB9O1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjb25maWd1cmVUcmVlKGNvbmZpZ3VyYXRpb246IFNtYXJ0dHJlZUNvbmZpZ3VyYXRpb24pOiB2b2lkIHtcclxuICAgIHRoaXMudHJlZUlkID0gY29uZmlndXJhdGlvbi50cmVlaWQ7XHJcbiAgICB0aGlzLnZpZXdDb250ZXh0TmFtZSA9IGNvbmZpZ3VyYXRpb24udmlld0NvbnRleHROYW1lO1xyXG4gICAgdGhpcy5wYWdlTmFtZSA9IGNvbmZpZ3VyYXRpb24ucGFnZU5hbWU7XHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSBhc3luYyBpbml0aWFsaXplKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0odGhpcy52aWV3Q29udGV4dE5hbWUhKSkge1xyXG4gICAgICBhd2FpdCB0aGlzLmRvd25sb2FkVHJlZSgpLnRoZW4oKHJvb3ROb2RlczogU21hcnRUcmVlTm9kZVtdKSA9PiB7XHJcbiAgICAgICAgdGhpcy50cmVlRnJvbUJhY2tlbmQgPSByb290Tm9kZXM7XHJcbiAgICAgICAgdGhpcy5zeW5jVHJlZSgpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcbiAgb3ZlcnJpZGUgYXN5bmMgZG93bmxvYWRUcmVlKCk6IFByb21pc2U8U21hcnRUcmVlTm9kZVtdPiB7XHJcbiAgICBsZXQgdXVpZCA9IHRoaXMudmlld0NvbnRleHQuZ2V0VXVpZE9mUGFnZSh0aGlzLnBhZ2VOYW1lISk7XHJcbiAgICBjb25zdCByb290Tm9kZXMgPSBhd2FpdCB0aGlzLnNlcnZpY2UuZ2V0Um9vdE5vZGVzKHV1aWQsIHRoaXMudHJlZUlkISkudG9Qcm9taXNlKCk7XHJcbiAgICBjb25zdCB1aUFjdGlvbnMgPSBhd2FpdCB0aGlzLnNlcnZpY2UuZ2V0TWFpbkFjdGlvbnModXVpZCwgdGhpcy50cmVlSWQhKS50b1Byb21pc2UoKTtcclxuXHJcbiAgICBpZiAodWlBY3Rpb25zKSB7XHJcbiAgICAgIHRoaXMuY29uc3RydWN0VWlBY3Rpb25Nb2RlbHModWlBY3Rpb25zKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXJvb3ROb2Rlcykge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Jvb3ROb2RlcyBhcmUgdW5kZWZpbmVkIScpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJvb3ROb2RlcztcclxuICB9XHJcbiAgb3ZlcnJpZGUgYXN5bmMgZG93bmxvYWRDaGlsZHJlbihwYXJlbnROb2RlOiBTbWFydFRyZWVOb2RlKTogUHJvbWlzZTxTbWFydFRyZWVOb2RlW10+IHtcclxuICAgIGxldCB1dWlkID0gdGhpcy52aWV3Q29udGV4dC5nZXRVdWlkT2ZQYWdlKHRoaXMucGFnZU5hbWUhKTtcclxuICAgIGNvbnN0IGNoaWxkcmVuID0gYXdhaXQgdGhpcy5zZXJ2aWNlXHJcbiAgICAgIC5nZXRDaGlsZHJlbk5vZGVzKHV1aWQsIHRoaXMudHJlZUlkISwgcGFyZW50Tm9kZS5pZGVudGlmaWVyISlcclxuICAgICAgLnRvUHJvbWlzZSgpO1xyXG4gICAgaWYgKCFjaGlsZHJlbikge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vZGUgd2l0aCBpZGVudGlmaWVyICR7cGFyZW50Tm9kZS5pZGVudGlmaWVyfSBkb2VzIG5vdCBoYXZlIGNoaWxkcmVuLmApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjaGlsZHJlbjtcclxuICB9XHJcbiAgb3ZlcnJpZGUgYXN5bmMgb25UcmVlTm9kZU9wZW4odHJlZU5vZGU6IFNtYXJ0VHJlZU5vZGUpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGxldCB2aWV3VXVpZCA9IHRoaXMudmlld0NvbnRleHQuZ2V0VXVpZE9mUGFnZSh0aGlzLnBhZ2VOYW1lISk7XHJcblxyXG4gICAgaWYgKHRyZWVOb2RlPy5leHBhbmRlZCkge1xyXG4gICAgICBsZXQgdGVtcFRyZWVOb2RlID0gYXdhaXQgdGhpcy5zZXJ2aWNlXHJcbiAgICAgICAgLmNvbGxhcHNlTm9kZSh2aWV3VXVpZCwgdGhpcy50cmVlSWQhLCB0cmVlTm9kZS5pZGVudGlmaWVyISlcclxuICAgICAgICAudG9Qcm9taXNlKCk7XHJcbiAgICAgIHRyZWVOb2RlID0gdGVtcFRyZWVOb2RlITtcclxuICAgIH0gZWxzZSBpZiAoIXRyZWVOb2RlPy5leHBhbmRlZCkge1xyXG4gICAgICBsZXQgdGVtcFRyZWVOb2RlID0gYXdhaXQgdGhpcy5zZXJ2aWNlXHJcbiAgICAgICAgLmV4cGFuZE5vZGUodmlld1V1aWQsIHRoaXMudHJlZUlkISwgdHJlZU5vZGU/LmlkZW50aWZpZXIhKVxyXG4gICAgICAgIC50b1Byb21pc2UoKTtcclxuICAgICAgdHJlZU5vZGUgPSB0ZW1wVHJlZU5vZGUhO1xyXG4gICAgfVxyXG4gICAgbGV0IG5vZGUgPSB0aGlzLmRlZXBTZWFyY2hUcmVlTm9kZSh0cmVlTm9kZT8uaWRlbnRpZmllciEsIHRoaXMudHJlZUZyb21CYWNrZW5kISk7XHJcblxyXG4gICAgbm9kZSEuZXhwYW5kZWQgPSB0cmVlTm9kZT8uZXhwYW5kZWQ7XHJcbiAgICBub2RlIS5jaGlsZHJlbk5vZGVzID0gdHJlZU5vZGU/LmNoaWxkcmVuTm9kZXM7XHJcbiAgICB0aGlzLnN5bmNUcmVlKCk7XHJcbiAgfVxyXG4gIG92ZXJyaWRlIG9uVHJlZU5vZGVDbGljayh0cmVlTm9kZTogU21hcnRUcmVlTm9kZSk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWxlY3RGb2xkZXIodHJlZU5vZGUuaWRlbnRpZmllciEsIHRyZWVOb2RlKTtcclxuICB9XHJcbiAgYXN5bmMgc2VsZWN0Rm9sZGVyKGZvbGRlclVyaTogc3RyaW5nLCB0cmVlTm9kZT86IFNtYXJ0VHJlZU5vZGUpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGxldCB2aWV3VXVpZCA9IHRoaXMudmlld0NvbnRleHQuZ2V0VXVpZE9mUGFnZSh0aGlzLnBhZ2VOYW1lISk7XHJcblxyXG4gICAgYXdhaXQgdGhpcy5zZXJ2aWNlXHJcbiAgICAgIC5zZWxlY3ROb2RlKHZpZXdVdWlkLCB0aGlzLnRyZWVJZCEsIHRyZWVOb2RlIS5pZGVudGlmaWVyISlcclxuICAgICAgLnRvUHJvbWlzZSgpXHJcbiAgICAgIC50aGVuKCh1cGRhdGVkVHJlZU5vZGU6IFNtYXJ0VHJlZU5vZGUgfCB1bmRlZmluZWQpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZE5vZGUpIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWROb2RlLnNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWROb2RlID0gdXBkYXRlZFRyZWVOb2RlO1xyXG4gICAgICAgIGxldCBub2RlID0gdGhpcy5kZWVwU2VhcmNoVHJlZU5vZGUodXBkYXRlZFRyZWVOb2RlPy5pZGVudGlmaWVyISwgdGhpcy50cmVlRnJvbUJhY2tlbmQhKTtcclxuICAgICAgICBpZiAoIW5vZGUpIHtcclxuICAgICAgICAgIHRocm93IEVycm9yKCdUcmVlIG5vZGUgZG9lcyBub3QgZXhpc3QnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbm9kZS5leHBhbmRlZCA9IHVwZGF0ZWRUcmVlTm9kZT8uZXhwYW5kZWQhO1xyXG4gICAgICAgIG5vZGUuY2hpbGRyZW5Ob2RlcyA9IHVwZGF0ZWRUcmVlTm9kZT8uY2hpbGRyZW5Ob2RlcyE7XHJcbiAgICAgICAgbm9kZS5zZWxlY3RlZCA9IHVwZGF0ZWRUcmVlTm9kZT8uc2VsZWN0ZWQhO1xyXG4gICAgICAgIHRyZWVOb2RlID0gdXBkYXRlZFRyZWVOb2RlO1xyXG4gICAgICAgIHRoaXMuc3luY1RyZWUoKTtcclxuICAgICAgICB0aGlzLnZpZXdDb250ZXh0LmdldEFuZFN5bmNWaWV3Q29udGV4dChcclxuICAgICAgICAgIHRoaXMudmlld0NvbnRleHQuZ2V0VXVpZE9mUGFnZSh0aGlzLnZpZXdDb250ZXh0TmFtZSEpXHJcbiAgICAgICAgKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyB1cGRhdGVUcmVlT25UaGVGbHkoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBhd2FpdCB0aGlzLmluaXRpYWxpemUoKTtcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIGFzeW5jIHN5bmNUcmVlKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgYXdhaXQgdGhpcy5jYWNoZUFjdGlvbkRlc2NpcHRvcnModGhpcy5nZXRBbGxOb2Rlcyh0aGlzLnRyZWVGcm9tQmFja2VuZCEpKTtcclxuXHJcbiAgICBpZiAoIXRoaXMudHJlZUZyb21CYWNrZW5kKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlcmUgaXMgbm8gdHJlZUZyb21CYWNrZW5kIGF2YWlsYWJsZSEnKTtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5zbWFydFRyZWVNb2RlbCkge1xyXG4gICAgICB0aGlzLnNtYXJ0VHJlZU1vZGVsID0ge1xyXG4gICAgICAgIHJvb3ROb2RlczogW10sXHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHNtYXJ0VHJlZU5vZGVzOiBTbWFydFRyZWVOb2RlW10gPSB0aGlzLmNyZWF0ZUJ1dHRvbnNGb3JUcmVlTm9kZXModGhpcy50cmVlRnJvbUJhY2tlbmQpO1xyXG4gICAgdGhpcy5zbWFydFRyZWVNb2RlbCA9IHVuZGVmaW5lZDtcclxuXHJcbiAgICB0aGlzLnNtYXJ0VHJlZU1vZGVsID0ge1xyXG4gICAgICByb290Tm9kZXM6IFtdLFxyXG4gICAgfTtcclxuICAgIHRoaXMuc21hcnRUcmVlTW9kZWxDaGFuZ2VkLm5leHQodGhpcy5zbWFydFRyZWVNb2RlbCk7XHJcblxyXG4gICAgdGhpcy5zbWFydFRyZWVNb2RlbC5yb290Tm9kZXMgPSBzbWFydFRyZWVOb2RlcztcclxuXHJcbiAgICB0aGlzLmZpbmRTZWxlY3RlZCh0aGlzLnNtYXJ0VHJlZU1vZGVsLnJvb3ROb2Rlcyk7XHJcblxyXG4gICAgdGhpcy5zbWFydFRyZWVNb2RlbENoYW5nZWQubmV4dCh0aGlzLnNtYXJ0VHJlZU1vZGVsKTtcclxuICB9XHJcblxyXG4gIGRlZXBTZWFyY2hUcmVlTm9kZShpZGVudGlmaWVyOiBzdHJpbmcsIG5vZGVzOiBTbWFydFRyZWVOb2RlW10pOiBTbWFydFRyZWVOb2RlIHwgdW5kZWZpbmVkIHtcclxuICAgIGxldCB0cmVlTm9kZTogU21hcnRUcmVlTm9kZSB8IHVuZGVmaW5lZDtcclxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBub2Rlcy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzW2luZGV4XTtcclxuXHJcbiAgICAgIGlmIChub2RlLmlkZW50aWZpZXIgPT09IGlkZW50aWZpZXIpIHtcclxuICAgICAgICB0cmVlTm9kZSA9IG5vZGU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKG5vZGUuY2hpbGRyZW5Ob2RlcyAmJiBub2RlLmNoaWxkcmVuTm9kZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgdHJlZU5vZGUgPSB0aGlzLmRlZXBTZWFyY2hUcmVlTm9kZShpZGVudGlmaWVyLCBub2RlLmNoaWxkcmVuTm9kZXMpO1xyXG4gICAgICAgIGlmICh0cmVlTm9kZSkge1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJlZU5vZGU7XHJcbiAgfVxyXG5cclxuICBmaW5kU2VsZWN0ZWQobm9kZXM6IFNtYXJ0VHJlZU5vZGVbXSk6IHZvaWQge1xyXG4gICAgcmV0dXJuIG5vZGVzLmZvckVhY2goKG5vZGU6IFNtYXJ0VHJlZU5vZGUpID0+IHtcclxuICAgICAgaWYgKG5vZGUuc2VsZWN0ZWQpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkTm9kZSA9IG5vZGU7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9IGVsc2UgaWYgKG5vZGUuY2hpbGRyZW5Ob2RlcyAmJiBub2RlLmNoaWxkcmVuTm9kZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZmluZFNlbGVjdGVkKG5vZGUuY2hpbGRyZW5Ob2Rlcyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlQnV0dG9uc0ZvclRyZWVOb2Rlcyhub2RlczogU21hcnRUcmVlTm9kZVtdKTogU21hcnRUcmVlTm9kZVtdIHtcclxuICAgIG5vZGVzLm1hcCgobm9kZTogU21hcnRUcmVlTm9kZSkgPT4ge1xyXG4gICAgICBub2RlLmJ1dHRvbiA9IG5vZGUuYWN0aW9ucz8ubGVuZ3RoXHJcbiAgICAgICAgPyB7XHJcbiAgICAgICAgICAgIHR5cGU6IFNtYXJ0VHJlZU5vZGVCdXR0b25UeXBlLk1FTlUsXHJcbiAgICAgICAgICAgIGljb246ICdtb3JlX3ZlcnQnLFxyXG4gICAgICAgICAgICBtZW51SXRlbUJ1dHRvbnM6IG5vZGUuYWN0aW9ucy5tYXAoKGFjdGlvbjogVWlBY3Rpb24pID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogU21hcnRUcmVlTm9kZUJ1dHRvblR5cGUuTk9STUFMLFxyXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuZ2V0TGFiZWxCeUFjdGlvbihhY3Rpb24pLFxyXG4gICAgICAgICAgICAgICAgY2FsbGJhY2s6IHRoaXMuZG9BY3Rpb24uYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgICAgIGFyZ3M6IFthY3Rpb24sIG5vZGUuaWRlbnRpZmllcl0sXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgOiB1bmRlZmluZWQ7XHJcbiAgICAgIG5vZGUuaWNvbiA9ICdGb2xkZXJzJztcclxuICAgICAgaWYgKG5vZGUuY2hpbGRyZW5Ob2Rlcykge1xyXG4gICAgICAgIG5vZGUuY2hpbGRyZW5Ob2RlcyA9IHRoaXMuY3JlYXRlQnV0dG9uc0ZvclRyZWVOb2Rlcyhub2RlLmNoaWxkcmVuTm9kZXMpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBub2RlcztcclxuICB9XHJcblxyXG4gIGFzeW5jIGRvQWN0aW9uKGFyZ3M6IGFueVtdKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBsZXQgdWlBY3Rpb246IFVpQWN0aW9uID0gYXJnc1swXTtcclxuICAgIGxldCBub2RlVXVpZDogc3RyaW5nID0gYXJnc1sxXTtcclxuXHJcbiAgICBpZiAodWlBY3Rpb24ucGFyYW1zKSB7XHJcbiAgICAgIHVpQWN0aW9uLnBhcmFtc1snbm9kZVV1aWQnXSA9IG5vZGVVdWlkO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdWlBY3Rpb24ucGFyYW1zID0ge1xyXG4gICAgICAgIG5vZGVVdWlkOiBub2RlVXVpZCxcclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgdWlBY3Rpb25Nb2RlbDogVWlBY3Rpb25Nb2RlbCA9IHtcclxuICAgICAgc2VydmljZVRvVXNlOiB0aGlzLFxyXG4gICAgICB1aUFjdGlvbixcclxuICAgIH07XHJcbiAgICB0aGlzLnVpQWN0aW9uU2VydmljZS51aUFjdGlvbk1vZGVsID0gdWlBY3Rpb25Nb2RlbDtcclxuICAgIHRoaXMudWlBY3Rpb25TZXJ2aWNlLmV4ZWN1dGUodWlBY3Rpb24pO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGdldEFsbE5vZGVzKG5vZGVzOiBTbWFydFRyZWVOb2RlW10pOiBTbWFydFRyZWVOb2RlW10ge1xyXG4gICAgcmV0dXJuIG5vZGVzLmZsYXRNYXAoKG4pID0+IFtuLCAuLi50aGlzLmdldEFsbE5vZGVzKG4uY2hpbGRyZW5Ob2RlcyldKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBhc3luYyBjYWNoZUFjdGlvbkRlc2NpcHRvcnMobm9kZXM6IFNtYXJ0VHJlZU5vZGVbXSkge1xyXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgIG5vZGVzLm1hcChhc3luYyAobm9kZTogU21hcnRUcmVlTm9kZSkgPT4ge1xyXG4gICAgICAgIGxldCBuZXdVaUFjdGlvbnMgPSBub2RlLmFjdGlvbnM/LmZpbHRlcihcclxuICAgICAgICAgICh1aUFjdGlvbjogVWlBY3Rpb24pID0+ICF0aGlzLnVpQWN0aW9uRGVzY3JpcHRvcnMuZ2V0KHVpQWN0aW9uLmNvZGUhKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKCFuZXdVaUFjdGlvbnMpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICAgICAgbmV3VWlBY3Rpb25zIS5tYXAoYXN5bmMgKHVpQWN0aW9uOiBVaUFjdGlvbikgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMudWlBY3Rpb25EZXNjcmlwdG9ycy5nZXQodWlBY3Rpb24uY29kZSEpKSB7XHJcbiAgICAgICAgICAgICAgbGV0IGRlc2NyaXB0b3IgPSBhd2FpdCB0aGlzLnVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2UuZ2V0QWN0aW9uRGVzY3JpcHRvcih1aUFjdGlvbik7XHJcbiAgICAgICAgICAgICAgdGhpcy51aUFjdGlvbkRlc2NyaXB0b3JzLnNldCh1aUFjdGlvbi5jb2RlISwgZGVzY3JpcHRvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG4gIGdldExhYmVsQnlBY3Rpb24oYWN0aW9uOiBVaUFjdGlvbik6IHN0cmluZyB7XHJcbiAgICBsZXQgZGVzYyA9IHRoaXMudWlBY3Rpb25EZXNjcmlwdG9ycy5nZXQoYWN0aW9uLmNvZGUhKTtcclxuICAgIHJldHVybiBkZXNjIS50aXRsZTtcclxuICB9XHJcblxyXG4gIC8vICNyZWdpb24gVXNlVWlBY3Rpb25cclxuICBnZXRBZGRpdGlvbmFsUGFyYW1zKHVpQWN0aW9uOiBVaUFjdGlvbik6IFVpQWN0aW9uQWRkaXRpb25hbFBhcmFtcyB7XHJcbiAgICBpZiAodWlBY3Rpb24ucGFyYW1zICYmIHVpQWN0aW9uLnBhcmFtc1snbm9kZVV1aWQnXSkge1xyXG4gICAgICBsZXQgbm9kZVV1aWQgPSB1aUFjdGlvbi5wYXJhbXMhWydub2RlVXVpZCddO1xyXG5cclxuICAgICAgbGV0IG5vZGVOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgICAgIGlmICh1aUFjdGlvbi5jb2RlID09PSAnUkVOQU1FJykge1xyXG4gICAgICAgIG5vZGVOYW1lID0gdGhpcy5kZWVwU2VhcmNoVHJlZU5vZGUobm9kZVV1aWQsIHRoaXMudHJlZUZyb21CYWNrZW5kISk/LmNhcHRpb247XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgZm9yVGV4dEFyZWE6ICcnLFxyXG4gICAgICAgIGZvclRleHRGaWVsZDogbm9kZU5hbWUgPyBub2RlTmFtZSA6ICcnLFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIGZvclRleHRBcmVhOiAnJyxcclxuICAgICAgZm9yVGV4dEZpZWxkOiAnJyxcclxuICAgIH07XHJcbiAgfVxyXG4gIGdldE1vZGVsKCkge1xyXG4gICAgcmV0dXJuIHt9O1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgcGVyZm9ybVVpQWN0aW9uUmVxdWVzdCh1aUFjdGlvblJlcXVlc3Q6IFVpQWN0aW9uUmVxdWVzdCk6IFByb21pc2U8YW55PiB7XHJcbiAgICBpZiAodWlBY3Rpb25SZXF1ZXN0LnBhcmFtc1snbm9kZVV1aWQnXSkge1xyXG4gICAgICBhd2FpdCB0aGlzLnBlcmZvcm1Ob2RlVWlBY3Rpb25SZXF1ZXN0KHVpQWN0aW9uUmVxdWVzdCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBhd2FpdCB0aGlzLnBlcmZvcm1NYWluVWlBY3Rpb25SZXF1ZXN0KHVpQWN0aW9uUmVxdWVzdCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXdhaXQgdGhpcy52aWV3Q29udGV4dC5nZXRBbmRTeW5jVmlld0NvbnRleHQoKTtcclxuXHJcbiAgICB0aGlzLnN5bmNUcmVlKCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBwZXJmb3JtTm9kZVVpQWN0aW9uUmVxdWVzdCh1aUFjdGlvblJlcXVlc3Q6IFVpQWN0aW9uUmVxdWVzdCk6IFByb21pc2U8YW55PiB7XHJcbiAgICBsZXQgbm9kZUlkID0gdWlBY3Rpb25SZXF1ZXN0LnBhcmFtc1snbm9kZVV1aWQnXTtcclxuICAgIGRlbGV0ZSB1aUFjdGlvblJlcXVlc3QucGFyYW1zWydub2RlVXVpZCddO1xyXG5cclxuICAgIGxldCB2aWV3VXVpZCA9IHRoaXMudmlld0NvbnRleHQuZ2V0VXVpZE9mUGFnZSh0aGlzLnBhZ2VOYW1lKTtcclxuXHJcbiAgICB0aGlzLnRyZWVGcm9tQmFja2VuZCA9IGF3YWl0IHRoaXMuc2VydmljZVxyXG4gICAgICAucGVyZm9ybUFjdGlvbih2aWV3VXVpZCwgdGhpcy50cmVlSWQhLCBub2RlSWQsIHVpQWN0aW9uUmVxdWVzdClcclxuICAgICAgLnRvUHJvbWlzZSgpO1xyXG4gIH1cclxuICBhc3luYyBwZXJmb3JtTWFpblVpQWN0aW9uUmVxdWVzdCh1aUFjdGlvblJlcXVlc3Q6IFVpQWN0aW9uUmVxdWVzdCk6IFByb21pc2U8YW55PiB7XHJcbiAgICBsZXQgdmlld1V1aWQgPSB0aGlzLnZpZXdDb250ZXh0LmdldFV1aWRPZlBhZ2UodGhpcy5wYWdlTmFtZSk7XHJcblxyXG4gICAgdGhpcy50cmVlRnJvbUJhY2tlbmQgPSBhd2FpdCB0aGlzLnNlcnZpY2VcclxuICAgICAgLnBlcmZvcm1NYWluQWN0aW9uKHZpZXdVdWlkLCB0aGlzLnRyZWVJZCEsIHVpQWN0aW9uUmVxdWVzdClcclxuICAgICAgLnRvUHJvbWlzZSgpO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlU3BlY2lmaWNEZW1hbmRzQXN5bmNocm9ub3VzbHkoXHJcbiAgICB1aUFjdGlvbjogVWlBY3Rpb24sXHJcbiAgICB1aUFjdGlvblJlcXVlc3Q6IFVpQWN0aW9uUmVxdWVzdFxyXG4gICk6IFByb21pc2U8VWlBY3Rpb25TcGVjaWZpY0RlbWFuZFJlc3BvbnNlPiB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XHJcbiAgfVxyXG4gIC8vICNlbmRyZWdpb25cclxufVxyXG4iXX0=
@@ -0,0 +1,180 @@
1
+ import { NestedTreeControl } from '@angular/cdk/tree';
2
+ import { Component, Input, ViewChild, ViewChildren, } from '@angular/core';
3
+ import { MatMenuTrigger } from '@angular/material/menu';
4
+ import { MatTreeNestedDataSource } from '@angular/material/tree';
5
+ import { SmartTreeNodeButtonType, } from './smarttree.model';
6
+ import { Subject, takeUntil } from 'rxjs';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@angular/material/tree";
9
+ import * as i2 from "@angular/material/button";
10
+ import * as i3 from "@angular/material/icon";
11
+ import * as i4 from "@smartbit4all/icon";
12
+ import * as i5 from "@angular/material/menu";
13
+ import * as i6 from "@angular/common";
14
+ export class SmartTreeComponent {
15
+ constructor(cdr) {
16
+ this.cdr = cdr;
17
+ this._destroy$ = new Subject();
18
+ this.treeControl = new NestedTreeControl((node) => node.childrenNodes);
19
+ this.dataSource = new MatTreeNestedDataSource();
20
+ this.smartTreeNodeButtonType = SmartTreeNodeButtonType;
21
+ this.uiActionModels = [];
22
+ this.hasChild = (_, node) => node.hasChildren;
23
+ }
24
+ ngOnInit() {
25
+ if (!this.treeService) {
26
+ throw new Error('TreeService has not been given!');
27
+ }
28
+ this.errorMessage = this.treeService.errorMessage;
29
+ this.treeService.smartTreeModelChanged.subscribe((newSmartTree) => {
30
+ this.treeData = newSmartTree;
31
+ this.dataSource.data = this.treeData.rootNodes;
32
+ this.expandTreeNodes();
33
+ });
34
+ this.treeService.uiActionModelsChanged.pipe(takeUntil(this._destroy$)).subscribe(() => {
35
+ if (this.treeService.uiActionModels) {
36
+ this.uiActionModels = this.treeService.uiActionModels;
37
+ }
38
+ });
39
+ }
40
+ ngOnDestroy() {
41
+ this._destroy$.next();
42
+ this._destroy$.complete();
43
+ }
44
+ getIfExpanded(node) {
45
+ return this.treeControl.isExpanded(node);
46
+ }
47
+ expandTreeNodes() {
48
+ this.expandTreeNodesDeeply(this.dataSource.data);
49
+ }
50
+ expandTreeNodesDeeply(nodes) {
51
+ nodes.forEach((node) => {
52
+ if (node.expanded) {
53
+ this.treeControl.expand(node);
54
+ this.cdr.markForCheck();
55
+ if (node.childrenNodes && node.childrenNodes.length) {
56
+ this.expandTreeNodesDeeply(node.childrenNodes);
57
+ }
58
+ }
59
+ else {
60
+ this.treeControl.collapse(node);
61
+ }
62
+ });
63
+ }
64
+ onNodeClick(event, node) {
65
+ event.stopPropagation();
66
+ if (this.tempActiveNode)
67
+ this.tempActiveNode.selected = false;
68
+ node.selected = true;
69
+ this.tempActiveNode = node;
70
+ this.treeService.onTreeNodeClick(node);
71
+ }
72
+ onOpenNode(event, node) {
73
+ event.stopPropagation();
74
+ this.treeService.onTreeNodeOpen(node);
75
+ }
76
+ getNodeStyle(node) {
77
+ if (this.treeStyle) {
78
+ var style = node.selected
79
+ ? {
80
+ background: this.treeStyle.activeStyle?.backgroundColor,
81
+ color: this.treeStyle.activeStyle?.color,
82
+ }
83
+ : {
84
+ background: this.treeStyle.levelBackgroundColor[node.level],
85
+ color: this.treeStyle.color,
86
+ };
87
+ return style;
88
+ }
89
+ return {};
90
+ }
91
+ getNodePadding(node) {
92
+ if (this.treeStyle) {
93
+ var style = node.selected
94
+ ? {
95
+ 'padding-left': 15 * node.level + 'px',
96
+ }
97
+ : {
98
+ 'padding-left': 15 * node.level + 'px',
99
+ };
100
+ return style;
101
+ }
102
+ return {};
103
+ }
104
+ customButtonClicked(event, button, close) {
105
+ event.stopPropagation();
106
+ if (button.type === SmartTreeNodeButtonType.MENU) {
107
+ return;
108
+ }
109
+ if (!button.callback) {
110
+ throw new Error(`Button with name ${button.label || button.icon} does not have a callback!`);
111
+ }
112
+ button.callback(button.args);
113
+ if (close) {
114
+ let openMenus = this.trigger.filter((matMenuTrigger) => matMenuTrigger.menuOpen);
115
+ openMenus.forEach((matMenuTrigger) => {
116
+ matMenuTrigger.closeMenu();
117
+ });
118
+ }
119
+ }
120
+ getClassesForTreeNode(node) {
121
+ let classes = [];
122
+ if (node.expanded) {
123
+ classes.push(this.getCustomClass('expanded', node.level));
124
+ }
125
+ else {
126
+ classes.push(this.getCustomClass('collapsed', node.level));
127
+ }
128
+ if (node.selected) {
129
+ classes.push(this.getCustomClass('selected', node.level));
130
+ }
131
+ else {
132
+ classes.push(this.getCustomClass('unselected', node.level));
133
+ }
134
+ if (node.level !== 0) {
135
+ classes.push(this.getCustomClass('child', node.level));
136
+ }
137
+ return classes;
138
+ }
139
+ getInnerClassesForTreeNode(node) {
140
+ let classes = [];
141
+ if (node.expanded) {
142
+ classes.push(this.getCustomClass('inner-expanded', node.level));
143
+ }
144
+ else {
145
+ classes.push(this.getCustomClass('inner-collapsed', node.level));
146
+ }
147
+ if (node.selected) {
148
+ classes.push(this.getCustomClass('inner-selected', node.level));
149
+ }
150
+ else {
151
+ classes.push(this.getCustomClass('inner-unselected', node.level));
152
+ }
153
+ return classes;
154
+ }
155
+ getClassesForTreeNodeChildren(node) {
156
+ let classes = [];
157
+ classes.push(this.getCustomClass('group', node.level));
158
+ return classes;
159
+ }
160
+ getCustomClass(cssClass, plusProperty) {
161
+ return `${cssClass}-${plusProperty}`;
162
+ }
163
+ }
164
+ SmartTreeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: SmartTreeComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
165
+ SmartTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: SmartTreeComponent, selector: "smart-tree", inputs: { treeStyle: "treeStyle", treeService: "treeService" }, viewQueries: [{ propertyName: "tree", first: true, predicate: ["tree"], descendants: true }, { propertyName: "trigger", predicate: MatMenuTrigger, descendants: true }], ngImport: i0, template: "<div class=\"smartTreeContainer\">\r\n <smart-ui-action-toolbar\r\n *ngIf=\"uiActionModels.length\"\r\n [uiActionModels]=\"uiActionModels\"\r\n ></smart-ui-action-toolbar>\r\n <mat-tree\r\n #tree\r\n *ngIf=\"treeData\"\r\n [dataSource]=\"dataSource\"\r\n [treeControl]=\"treeControl\"\r\n class=\"sm-tree\"\r\n >\r\n <mat-nested-tree-node\r\n *matTreeNodeDef=\"let node; when: hasChild\"\r\n matTreeNodeToggle=\"{{ getIfExpanded(node) }}\"\r\n [ngClass]=\"getClassesForTreeNode(node)\"\r\n [ngStyle]=\"getNodeStyle(node)\"\r\n >\r\n <div\r\n [ngStyle]=\"getNodePadding(node)\"\r\n [ngClass]=\"getInnerClassesForTreeNode(node)\"\r\n class=\"mat-tree-node sm-tree-node\"\r\n (click)=\"onNodeClick($event, node)\"\r\n >\r\n <button mat-icon-button [attr.aria-label]=\"'Toggle ' + node.name\">\r\n <mat-icon\r\n class=\"mat-icon-rtl-mirror\"\r\n matTreeNodeToggle\r\n (click)=\"onOpenNode($event, node)\"\r\n >\r\n <div *ngIf=\"hasChild(node.level, node)\">\r\n {{ treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right' }}\r\n </div>\r\n </mat-icon>\r\n </button>\r\n <smart-icon [icon]=\"node.icon\"> </smart-icon>\r\n <div class=\"sm-tree-row\" [ngClass]=\"node.classes\">\r\n <div class=\"sm-tree-row-caption\">\r\n {{ node.caption }}\r\n </div>\r\n <div class=\"sm-shortDescription-spacer\"></div>\r\n <div class=\"sm-tree-row-shortDescription\">\r\n {{ node.shortDescription }}\r\n </div>\r\n <div class=\"sm-shortDescription-button-spacer\"></div>\r\n <div *ngIf=\"node.button\" class=\"sm-tree-node-button\" [ngSwitch]=\"node.button.type\">\r\n <button\r\n (click)=\"customButtonClicked($event, node.button)\"\r\n *ngSwitchCase=\"smartTreeNodeButtonType.ICON\"\r\n mat-icon-button\r\n >\r\n <smart-icon title=\"{{ node.button.icon }}\" [icon]=\"node.button.icon\"></smart-icon>\r\n </button>\r\n <div *ngSwitchCase=\"smartTreeNodeButtonType.MENU\">\r\n <button\r\n mat-button\r\n [matMenuTriggerFor]=\"menu\"\r\n (click)=\"customButtonClicked($event, node.button, true)\"\r\n >\r\n <smart-icon *ngIf=\"node.button.icon\" [icon]=\"node.button.icon\"></smart-icon\r\n >{{ node.button.label }}\r\n </button>\r\n <mat-menu #menu=\"matMenu\">\r\n <button\r\n *ngFor=\"let button of node.button.menuItemButtons\"\r\n (click)=\"customButtonClicked($event, button, true)\"\r\n mat-menu-item\r\n >\r\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon\r\n >{{ button.label }}\r\n </button>\r\n </mat-menu>\r\n </div>\r\n <button\r\n (click)=\"customButtonClicked($event, node.button)\"\r\n *ngSwitchCase=\"smartTreeNodeButtonType.NORMAL\"\r\n mat-raised-button\r\n >\r\n <smart-icon *ngIf=\"node.button.icon\" [icon]=\"node.button.icon\"></smart-icon>\r\n {{ node.button.icon }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n [class.sm-tree-invisible]=\"!treeControl.isExpanded(node)\"\r\n [ngClass]=\"getClassesForTreeNodeChildren(node)\"\r\n role=\"group\"\r\n >\r\n <ng-container matTreeNodeOutlet></ng-container>\r\n </div>\r\n </mat-nested-tree-node>\r\n </mat-tree>\r\n <div *ngIf=\"!treeData\">\r\n <h3>\r\n {{ errorMessage }}\r\n </h3>\r\n </div>\r\n</div>\r\n", styles: [".smartTreeContainer{display:flex;flex-direction:column;gap:.5rem}.sm-tree-invisible{display:none}.sm-tree ul,.sm-tree li{margin-top:0;margin-bottom:0;list-style-type:none}.sm-tree div[role=group]>.mat-tree-node{padding-left:40px}.sm-tee-node{padding-left:40px}.sm-tree-node-name{padding-left:15px;padding-top:15px;display:flex;flex-direction:column}.sm-tree-node-name-row{padding-left:15px;padding-top:15px;display:flex;flex-direction:row;justify-content:space-between}.sm-tree-node-name-col{padding-left:15px;padding-top:15px;display:flex;flex-direction:column}.sm-tee-node-id{font-weight:lighter}.mat-tree-node:hover{cursor:pointer}::ng-deep .mat-icon-rtl-mirror{display:flex;flex-direction:row}.sm-tree-row{display:flex;flex-direction:row;flex:1;align-items:center}.sm-shortDescription-spacer{flex:1}\n"], components: [{ type: i1.MatTree, selector: "mat-tree", exportAs: ["matTree"] }, { type: i2.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i4.SmartIconComponent, selector: "smart-icon", inputs: ["icon", "color"] }, { type: i5.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i5.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.MatTreeNodeDef, selector: "[matTreeNodeDef]", inputs: ["matTreeNodeDefWhen", "matTreeNode"] }, { type: i1.MatNestedTreeNode, selector: "mat-nested-tree-node", inputs: ["role", "disabled", "tabIndex", "matNestedTreeNode"], exportAs: ["matNestedTreeNode"] }, { type: i1.MatTreeNodeToggle, selector: "[matTreeNodeToggle]", inputs: ["matTreeNodeToggleRecursive"] }, { type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i6.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i6.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i6.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i5.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.MatTreeNodeOutlet, selector: "[matTreeNodeOutlet]" }] });
166
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: SmartTreeComponent, decorators: [{
167
+ type: Component,
168
+ args: [{ selector: 'smart-tree', template: "<div class=\"smartTreeContainer\">\r\n <smart-ui-action-toolbar\r\n *ngIf=\"uiActionModels.length\"\r\n [uiActionModels]=\"uiActionModels\"\r\n ></smart-ui-action-toolbar>\r\n <mat-tree\r\n #tree\r\n *ngIf=\"treeData\"\r\n [dataSource]=\"dataSource\"\r\n [treeControl]=\"treeControl\"\r\n class=\"sm-tree\"\r\n >\r\n <mat-nested-tree-node\r\n *matTreeNodeDef=\"let node; when: hasChild\"\r\n matTreeNodeToggle=\"{{ getIfExpanded(node) }}\"\r\n [ngClass]=\"getClassesForTreeNode(node)\"\r\n [ngStyle]=\"getNodeStyle(node)\"\r\n >\r\n <div\r\n [ngStyle]=\"getNodePadding(node)\"\r\n [ngClass]=\"getInnerClassesForTreeNode(node)\"\r\n class=\"mat-tree-node sm-tree-node\"\r\n (click)=\"onNodeClick($event, node)\"\r\n >\r\n <button mat-icon-button [attr.aria-label]=\"'Toggle ' + node.name\">\r\n <mat-icon\r\n class=\"mat-icon-rtl-mirror\"\r\n matTreeNodeToggle\r\n (click)=\"onOpenNode($event, node)\"\r\n >\r\n <div *ngIf=\"hasChild(node.level, node)\">\r\n {{ treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right' }}\r\n </div>\r\n </mat-icon>\r\n </button>\r\n <smart-icon [icon]=\"node.icon\"> </smart-icon>\r\n <div class=\"sm-tree-row\" [ngClass]=\"node.classes\">\r\n <div class=\"sm-tree-row-caption\">\r\n {{ node.caption }}\r\n </div>\r\n <div class=\"sm-shortDescription-spacer\"></div>\r\n <div class=\"sm-tree-row-shortDescription\">\r\n {{ node.shortDescription }}\r\n </div>\r\n <div class=\"sm-shortDescription-button-spacer\"></div>\r\n <div *ngIf=\"node.button\" class=\"sm-tree-node-button\" [ngSwitch]=\"node.button.type\">\r\n <button\r\n (click)=\"customButtonClicked($event, node.button)\"\r\n *ngSwitchCase=\"smartTreeNodeButtonType.ICON\"\r\n mat-icon-button\r\n >\r\n <smart-icon title=\"{{ node.button.icon }}\" [icon]=\"node.button.icon\"></smart-icon>\r\n </button>\r\n <div *ngSwitchCase=\"smartTreeNodeButtonType.MENU\">\r\n <button\r\n mat-button\r\n [matMenuTriggerFor]=\"menu\"\r\n (click)=\"customButtonClicked($event, node.button, true)\"\r\n >\r\n <smart-icon *ngIf=\"node.button.icon\" [icon]=\"node.button.icon\"></smart-icon\r\n >{{ node.button.label }}\r\n </button>\r\n <mat-menu #menu=\"matMenu\">\r\n <button\r\n *ngFor=\"let button of node.button.menuItemButtons\"\r\n (click)=\"customButtonClicked($event, button, true)\"\r\n mat-menu-item\r\n >\r\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon\r\n >{{ button.label }}\r\n </button>\r\n </mat-menu>\r\n </div>\r\n <button\r\n (click)=\"customButtonClicked($event, node.button)\"\r\n *ngSwitchCase=\"smartTreeNodeButtonType.NORMAL\"\r\n mat-raised-button\r\n >\r\n <smart-icon *ngIf=\"node.button.icon\" [icon]=\"node.button.icon\"></smart-icon>\r\n {{ node.button.icon }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n [class.sm-tree-invisible]=\"!treeControl.isExpanded(node)\"\r\n [ngClass]=\"getClassesForTreeNodeChildren(node)\"\r\n role=\"group\"\r\n >\r\n <ng-container matTreeNodeOutlet></ng-container>\r\n </div>\r\n </mat-nested-tree-node>\r\n </mat-tree>\r\n <div *ngIf=\"!treeData\">\r\n <h3>\r\n {{ errorMessage }}\r\n </h3>\r\n </div>\r\n</div>\r\n", styles: [".smartTreeContainer{display:flex;flex-direction:column;gap:.5rem}.sm-tree-invisible{display:none}.sm-tree ul,.sm-tree li{margin-top:0;margin-bottom:0;list-style-type:none}.sm-tree div[role=group]>.mat-tree-node{padding-left:40px}.sm-tee-node{padding-left:40px}.sm-tree-node-name{padding-left:15px;padding-top:15px;display:flex;flex-direction:column}.sm-tree-node-name-row{padding-left:15px;padding-top:15px;display:flex;flex-direction:row;justify-content:space-between}.sm-tree-node-name-col{padding-left:15px;padding-top:15px;display:flex;flex-direction:column}.sm-tee-node-id{font-weight:lighter}.mat-tree-node:hover{cursor:pointer}::ng-deep .mat-icon-rtl-mirror{display:flex;flex-direction:row}.sm-tree-row{display:flex;flex-direction:row;flex:1;align-items:center}.sm-shortDescription-spacer{flex:1}\n"] }]
169
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { trigger: [{
170
+ type: ViewChildren,
171
+ args: [MatMenuTrigger]
172
+ }], tree: [{
173
+ type: ViewChild,
174
+ args: ['tree']
175
+ }], treeStyle: [{
176
+ type: Input
177
+ }], treeService: [{
178
+ type: Input
179
+ }] } });
180
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnR0cmVlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LW5nLWNsaWVudC9zcmMvbGliL3NtYXJ0LXRyZWUvc21hcnR0cmVlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LW5nLWNsaWVudC9zcmMvbGliL3NtYXJ0LXRyZWUvc21hcnR0cmVlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3RELE9BQU8sRUFFTCxTQUFTLEVBQ1QsS0FBSyxFQUlMLFNBQVMsRUFDVCxZQUFZLEdBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3hELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pFLE9BQU8sRUFJTCx1QkFBdUIsR0FDeEIsTUFBTSxtQkFBbUIsQ0FBQztBQUczQixPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7QUFRMUMsTUFBTSxPQUFPLGtCQUFrQjtJQW1CN0IsWUFBb0IsR0FBc0I7UUFBdEIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFsQmxDLGNBQVMsR0FBa0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQU1qRCxnQkFBVyxHQUFHLElBQUksaUJBQWlCLENBQWdCLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDakYsZUFBVSxHQUFHLElBQUksdUJBQXVCLEVBQWlCLENBQUM7UUFLMUQsNEJBQXVCLEdBQUcsdUJBQXVCLENBQUM7UUFJbEQsbUJBQWMsR0FBb0IsRUFBRSxDQUFDO1FBOERyQyxhQUFRLEdBQUcsQ0FBQyxDQUFTLEVBQUUsSUFBbUIs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RHRFYSxrQkFBa0I7a0JBTDlCLFNBQVM7K0JBQ0UsWUFBWTt3R0FPUSxPQUFPO3NCQUFwQyxZQUFZO3VCQUFDLGNBQWM7Z0JBRVQsSUFBSTtzQkFBdEIsU0FBUzt1QkFBQyxNQUFNO2dCQU1SLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5lc3RlZFRyZWVDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3RyZWUnO1xyXG5pbXBvcnQge1xyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBJbnB1dCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIFF1ZXJ5TGlzdCxcclxuICBWaWV3Q2hpbGQsXHJcbiAgVmlld0NoaWxkcmVuLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRNZW51VHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xyXG5pbXBvcnQgeyBNYXRUcmVlTmVzdGVkRGF0YVNvdXJjZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RyZWUnO1xyXG5pbXBvcnQge1xyXG4gIFNtYXJ0VHJlZU1vZGVsLFxyXG4gIFNtYXJ0VHJlZU5vZGUsXHJcbiAgU21hcnRUcmVlTm9kZUJ1dHRvbixcclxuICBTbWFydFRyZWVOb2RlQnV0dG9uVHlwZSxcclxufSBmcm9tICcuL3NtYXJ0dHJlZS5tb2RlbCc7XHJcbmltcG9ydCB7IFRyZWVTdHlsZSB9IGZyb20gJy4vc21hcnR0cmVlLm5vZGUubW9kZWwnO1xyXG5pbXBvcnQgeyBTbWFydHRyZWVTZXJ2aWNlIH0gZnJvbSAnLi9zbWFydHRyZWUuc2VydmljZSc7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBVaUFjdGlvbk1vZGVsIH0gZnJvbSAnLi4vdmlldy1jb250ZXh0L3Byb2plY3RzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc21hcnQtdHJlZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3NtYXJ0dHJlZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vc21hcnR0cmVlLmNvbXBvbmVudC5jc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFNtYXJ0VHJlZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBwcml2YXRlIF9kZXN0cm95JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIEBWaWV3Q2hpbGRyZW4oTWF0TWVudVRyaWdnZXIpIHRyaWdnZXIhOiBRdWVyeUxpc3Q8TWF0TWVudVRyaWdnZXI+O1xyXG5cclxuICBAVmlld0NoaWxkKCd0cmVlJykgdHJlZTogYW55O1xyXG5cclxuICB0cmVlQ29udHJvbCA9IG5ldyBOZXN0ZWRUcmVlQ29udHJvbDxTbWFydFRyZWVOb2RlPigobm9kZSkgPT4gbm9kZS5jaGlsZHJlbk5vZGVzKTtcclxuICBkYXRhU291cmNlID0gbmV3IE1hdFRyZWVOZXN0ZWREYXRhU291cmNlPFNtYXJ0VHJlZU5vZGU+KCk7XHJcbiAgdGVtcEFjdGl2ZU5vZGU/OiBTbWFydFRyZWVOb2RlO1xyXG4gIHRyZWVEYXRhPzogU21hcnRUcmVlTW9kZWw7XHJcbiAgQElucHV0KCkgdHJlZVN0eWxlPzogVHJlZVN0eWxlO1xyXG4gIEBJbnB1dCgpIHRyZWVTZXJ2aWNlITogU21hcnR0cmVlU2VydmljZTxhbnk+O1xyXG4gIHNtYXJ0VHJlZU5vZGVCdXR0b25UeXBlID0gU21hcnRUcmVlTm9kZUJ1dHRvblR5cGU7XHJcblxyXG4gIGVycm9yTWVzc2FnZT86IHN0cmluZztcclxuXHJcbiAgdWlBY3Rpb25Nb2RlbHM6IFVpQWN0aW9uTW9kZWxbXSA9IFtdO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMudHJlZVNlcnZpY2UpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUcmVlU2VydmljZSBoYXMgbm90IGJlZW4gZ2l2ZW4hJyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHRoaXMudHJlZVNlcnZpY2UuZXJyb3JNZXNzYWdlO1xyXG5cclxuICAgIHRoaXMudHJlZVNlcnZpY2Uuc21hcnRUcmVlTW9kZWxDaGFuZ2VkLnN1YnNjcmliZSgobmV3U21hcnRUcmVlOiBTbWFydFRyZWVNb2RlbCkgPT4ge1xyXG4gICAgICB0aGlzLnRyZWVEYXRhID0gbmV3U21hcnRUcmVlO1xyXG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHRoaXMudHJlZURhdGEucm9vdE5vZGVzITtcclxuICAgICAgdGhpcy5leHBhbmRUcmVlTm9kZXMoKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy50cmVlU2VydmljZS51aUFjdGlvbk1vZGVsc0NoYW5nZWQucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy50cmVlU2VydmljZS51aUFjdGlvbk1vZGVscykge1xyXG4gICAgICAgIHRoaXMudWlBY3Rpb25Nb2RlbHMgPSB0aGlzLnRyZWVTZXJ2aWNlLnVpQWN0aW9uTW9kZWxzO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl9kZXN0cm95JC5uZXh0KCk7XHJcbiAgICB0aGlzLl9kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0SWZFeHBhbmRlZChub2RlOiBTbWFydFRyZWVOb2RlKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy50cmVlQ29udHJvbC5pc0V4cGFuZGVkKG5vZGUpO1xyXG4gIH1cclxuXHJcbiAgZXhwYW5kVHJlZU5vZGVzKCkge1xyXG4gICAgdGhpcy5leHBhbmRUcmVlTm9kZXNEZWVwbHkodGhpcy5kYXRhU291cmNlLmRhdGEpO1xyXG4gIH1cclxuXHJcbiAgZXhwYW5kVHJlZU5vZGVzRGVlcGx5KG5vZGVzOiBTbWFydFRyZWVOb2RlW10pIHtcclxuICAgIG5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcclxuICAgICAgaWYgKG5vZGUuZXhwYW5kZWQpIHtcclxuICAgICAgICB0aGlzLnRyZWVDb250cm9sLmV4cGFuZChub2RlKTtcclxuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICBpZiAobm9kZS5jaGlsZHJlbk5vZGVzICYmIG5vZGUuY2hpbGRyZW5Ob2Rlcy5sZW5ndGgpIHtcclxuICAgICAgICAgIHRoaXMuZXhwYW5kVHJlZU5vZGVzRGVlcGx5KG5vZGUuY2hpbGRyZW5Ob2Rlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMudHJlZUNvbnRyb2wuY29sbGFwc2Uobm9kZSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25Ob2RlQ2xpY2soZXZlbnQ6IGFueSwgbm9kZTogU21hcnRUcmVlTm9kZSkge1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgaWYgKHRoaXMudGVtcEFjdGl2ZU5vZGUpIHRoaXMudGVtcEFjdGl2ZU5vZGUuc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgIG5vZGUuc2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgdGhpcy50ZW1wQWN0aXZlTm9kZSA9IG5vZGU7XHJcblxyXG4gICAgdGhpcy50cmVlU2VydmljZS5vblRyZWVOb2RlQ2xpY2sobm9kZSk7XHJcbiAgfVxyXG5cclxuICBvbk9wZW5Ob2RlKGV2ZW50OiBhbnksIG5vZGU6IFNtYXJ0VHJlZU5vZGUpIHtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgdGhpcy50cmVlU2VydmljZS5vblRyZWVOb2RlT3Blbihub2RlKTtcclxuICB9XHJcblxyXG4gIGhhc0NoaWxkID0gKF86IG51bWJlciwgbm9kZTogU21hcnRUcmVlTm9kZSkgPT4gbm9kZS5oYXNDaGlsZHJlbjtcclxuXHJcbiAgZ2V0Tm9kZVN0eWxlKG5vZGU6IFNtYXJ0VHJlZU5vZGUpIHtcclxuICAgIGlmICh0aGlzLnRyZWVTdHlsZSkge1xyXG4gICAgICB2YXIgc3R5bGUgPSBub2RlLnNlbGVjdGVkXHJcbiAgICAgICAgPyB7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQ6IHRoaXMudHJlZVN0eWxlLmFjdGl2ZVN0eWxlPy5iYWNrZ3JvdW5kQ29sb3IsXHJcbiAgICAgICAgICAgIGNvbG9yOiB0aGlzLnRyZWVTdHlsZS5hY3RpdmVTdHlsZT8uY29sb3IsXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgOiB7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQ6IHRoaXMudHJlZVN0eWxlLmxldmVsQmFja2dyb3VuZENvbG9yIVtub2RlLmxldmVsIV0sXHJcbiAgICAgICAgICAgIGNvbG9yOiB0aGlzLnRyZWVTdHlsZS5jb2xvciEsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICByZXR1cm4gc3R5bGU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge307XHJcbiAgfVxyXG4gIGdldE5vZGVQYWRkaW5nKG5vZGU6IFNtYXJ0VHJlZU5vZGUpIHtcclxuICAgIGlmICh0aGlzLnRyZWVTdHlsZSkge1xyXG4gICAgICB2YXIgc3R5bGUgPSBub2RlLnNlbGVjdGVkXHJcbiAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICdwYWRkaW5nLWxlZnQnOiAxNSAqIG5vZGUubGV2ZWwhICsgJ3B4JyxcclxuICAgICAgICAgIH1cclxuICAgICAgICA6IHtcclxuICAgICAgICAgICAgJ3BhZGRpbmctbGVmdCc6IDE1ICogbm9kZS5sZXZlbCEgKyAncHgnLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgcmV0dXJuIHN0eWxlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHt9O1xyXG4gIH1cclxuXHJcbiAgY3VzdG9tQnV0dG9uQ2xpY2tlZChldmVudDogYW55LCBidXR0b246IFNtYXJ0VHJlZU5vZGVCdXR0b24sIGNsb3NlPzogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgaWYgKGJ1dHRvbi50eXBlID09PSBTbWFydFRyZWVOb2RlQnV0dG9uVHlwZS5NRU5VKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWJ1dHRvbi5jYWxsYmFjaykge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEJ1dHRvbiB3aXRoIG5hbWUgJHtidXR0b24ubGFiZWwgfHwgYnV0dG9uLmljb259IGRvZXMgbm90IGhhdmUgYSBjYWxsYmFjayFgKTtcclxuICAgIH1cclxuICAgIGJ1dHRvbi5jYWxsYmFjayhidXR0b24uYXJncyk7XHJcbiAgICBpZiAoY2xvc2UpIHtcclxuICAgICAgbGV0IG9wZW5NZW51cyA9IHRoaXMudHJpZ2dlci5maWx0ZXIoXHJcbiAgICAgICAgKG1hdE1lbnVUcmlnZ2VyOiBNYXRNZW51VHJpZ2dlcikgPT4gbWF0TWVudVRyaWdnZXIubWVudU9wZW5cclxuICAgICAgKTtcclxuICAgICAgb3Blbk1lbnVzLmZvckVhY2goKG1hdE1lbnVUcmlnZ2VyOiBNYXRNZW51VHJpZ2dlcikgPT4ge1xyXG4gICAgICAgIG1hdE1lbnVUcmlnZ2VyLmNsb3NlTWVudSgpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldENsYXNzZXNGb3JUcmVlTm9kZShub2RlOiBTbWFydFRyZWVOb2RlKTogc3RyaW5nW10ge1xyXG4gICAgbGV0IGNsYXNzZXM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gICAgaWYgKG5vZGUuZXhwYW5kZWQpIHtcclxuICAgICAgY2xhc3Nlcy5wdXNoKHRoaXMuZ2V0Q3VzdG9tQ2xhc3MoJ2V4cGFuZGVkJywgbm9kZS5sZXZlbCkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY2xhc3Nlcy5wdXNoKHRoaXMuZ2V0Q3VzdG9tQ2xhc3MoJ2NvbGxhcHNlZCcsIG5vZGUubGV2ZWwpKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobm9kZS5zZWxlY3RlZCkge1xyXG4gICAgICBjbGFzc2VzLnB1c2godGhpcy5nZXRDdXN0b21DbGFzcygnc2VsZWN0ZWQnLCBub2RlLmxldmVsKSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjbGFzc2VzLnB1c2godGhpcy5nZXRDdXN0b21DbGFzcygndW5zZWxlY3RlZCcsIG5vZGUubGV2ZWwpKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobm9kZS5sZXZlbCAhPT0gMCkge1xyXG4gICAgICBjbGFzc2VzLnB1c2godGhpcy5nZXRDdXN0b21DbGFzcygnY2hpbGQnLCBub2RlLmxldmVsKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGNsYXNzZXM7XHJcbiAgfVxyXG5cclxuICBnZXRJbm5lckNsYXNzZXNGb3JUcmVlTm9kZShub2RlOiBTbWFydFRyZWVOb2RlKTogc3RyaW5nW10ge1xyXG4gICAgbGV0IGNsYXNzZXM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gICAgaWYgKG5vZGUuZXhwYW5kZWQpIHtcclxuICAgICAgY2xhc3Nlcy5wdXNoKHRoaXMuZ2V0Q3VzdG9tQ2xhc3MoJ2lubmVyLWV4cGFuZGVkJywgbm9kZS5sZXZlbCkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY2xhc3Nlcy5wdXNoKHRoaXMuZ2V0Q3VzdG9tQ2xhc3MoJ2lubmVyLWNvbGxhcHNlZCcsIG5vZGUubGV2ZWwpKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobm9kZS5zZWxlY3RlZCkge1xyXG4gICAgICBjbGFzc2VzLnB1c2godGhpcy5nZXRDdXN0b21DbGFzcygnaW5uZXItc2VsZWN0ZWQnLCBub2RlLmxldmVsKSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjbGFzc2VzLnB1c2godGhpcy5nZXRDdXN0b21DbGFzcygnaW5uZXItdW5zZWxlY3RlZCcsIG5vZGUubGV2ZWwpKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY2xhc3NlcztcclxuICB9XHJcblxyXG4gIGdldENsYXNzZXNGb3JUcmVlTm9kZUNoaWxkcmVuKG5vZGU6IFNtYXJ0VHJlZU5vZGUpOiBzdHJpbmdbXSB7XHJcbiAgICBsZXQgY2xhc3Nlczogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgICBjbGFzc2VzLnB1c2godGhpcy5nZXRDdXN0b21DbGFzcygnZ3JvdXAnLCBub2RlLmxldmVsKSk7XHJcblxyXG4gICAgcmV0dXJuIGNsYXNzZXM7XHJcbiAgfVxyXG5cclxuICBnZXRDdXN0b21DbGFzcyhjc3NDbGFzczogc3RyaW5nLCBwbHVzUHJvcGVydHk6IGFueSk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYCR7Y3NzQ2xhc3N9LSR7cGx1c1Byb3BlcnR5fWA7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJzbWFydFRyZWVDb250YWluZXJcIj5cclxuICA8c21hcnQtdWktYWN0aW9uLXRvb2xiYXJcclxuICAgICpuZ0lmPVwidWlBY3Rpb25Nb2RlbHMubGVuZ3RoXCJcclxuICAgIFt1aUFjdGlvbk1vZGVsc109XCJ1aUFjdGlvbk1vZGVsc1wiXHJcbiAgPjwvc21hcnQtdWktYWN0aW9uLXRvb2xiYXI+XHJcbiAgPG1hdC10cmVlXHJcbiAgICAjdHJlZVxyXG4gICAgKm5nSWY9XCJ0cmVlRGF0YVwiXHJcbiAgICBbZGF0YVNvdXJjZV09XCJkYXRhU291cmNlXCJcclxuICAgIFt0cmVlQ29udHJvbF09XCJ0cmVlQ29udHJvbFwiXHJcbiAgICBjbGFzcz1cInNtLXRyZWVcIlxyXG4gID5cclxuICAgIDxtYXQtbmVzdGVkLXRyZWUtbm9kZVxyXG4gICAgICAqbWF0VHJlZU5vZGVEZWY9XCJsZXQgbm9kZTsgd2hlbjogaGFzQ2hpbGRcIlxyXG4gICAgICBtYXRUcmVlTm9kZVRvZ2dsZT1cInt7IGdldElmRXhwYW5kZWQobm9kZSkgfX1cIlxyXG4gICAgICBbbmdDbGFzc109XCJnZXRDbGFzc2VzRm9yVHJlZU5vZGUobm9kZSlcIlxyXG4gICAgICBbbmdTdHlsZV09XCJnZXROb2RlU3R5bGUobm9kZSlcIlxyXG4gICAgPlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgW25nU3R5bGVdPVwiZ2V0Tm9kZVBhZGRpbmcobm9kZSlcIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cImdldElubmVyQ2xhc3Nlc0ZvclRyZWVOb2RlKG5vZGUpXCJcclxuICAgICAgICBjbGFzcz1cIm1hdC10cmVlLW5vZGUgc20tdHJlZS1ub2RlXCJcclxuICAgICAgICAoY2xpY2spPVwib25Ob2RlQ2xpY2soJGV2ZW50LCBub2RlKVwiXHJcbiAgICAgID5cclxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBbYXR0ci5hcmlhLWxhYmVsXT1cIidUb2dnbGUgJyArIG5vZGUubmFtZVwiPlxyXG4gICAgICAgICAgPG1hdC1pY29uXHJcbiAgICAgICAgICAgIGNsYXNzPVwibWF0LWljb24tcnRsLW1pcnJvclwiXHJcbiAgICAgICAgICAgIG1hdFRyZWVOb2RlVG9nZ2xlXHJcbiAgICAgICAgICAgIChjbGljayk9XCJvbk9wZW5Ob2RlKCRldmVudCwgbm9kZSlcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaGFzQ2hpbGQobm9kZS5sZXZlbCwgbm9kZSlcIj5cclxuICAgICAgICAgICAgICB7eyB0cmVlQ29udHJvbC5pc0V4cGFuZGVkKG5vZGUpID8gJ2V4cGFuZF9tb3JlJyA6ICdjaGV2cm9uX3JpZ2h0JyB9fVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbWF0LWljb24+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPHNtYXJ0LWljb24gW2ljb25dPVwibm9kZS5pY29uXCI+IDwvc21hcnQtaWNvbj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic20tdHJlZS1yb3dcIiBbbmdDbGFzc109XCJub2RlLmNsYXNzZXNcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzbS10cmVlLXJvdy1jYXB0aW9uXCI+XHJcbiAgICAgICAgICAgIHt7IG5vZGUuY2FwdGlvbiB9fVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic20tc2hvcnREZXNjcmlwdGlvbi1zcGFjZXJcIj48L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzbS10cmVlLXJvdy1zaG9ydERlc2NyaXB0aW9uXCI+XHJcbiAgICAgICAgICAgIHt7IG5vZGUuc2hvcnREZXNjcmlwdGlvbiB9fVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic20tc2hvcnREZXNjcmlwdGlvbi1idXR0b24tc3BhY2VyXCI+PC9kaXY+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwibm9kZS5idXR0b25cIiBjbGFzcz1cInNtLXRyZWUtbm9kZS1idXR0b25cIiBbbmdTd2l0Y2hdPVwibm9kZS5idXR0b24udHlwZVwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImN1c3RvbUJ1dHRvbkNsaWNrZWQoJGV2ZW50LCBub2RlLmJ1dHRvbilcIlxyXG4gICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCJzbWFydFRyZWVOb2RlQnV0dG9uVHlwZS5JQ09OXCJcclxuICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxzbWFydC1pY29uIHRpdGxlPVwie3sgbm9kZS5idXR0b24uaWNvbiB9fVwiIFtpY29uXT1cIm5vZGUuYnV0dG9uLmljb25cIj48L3NtYXJ0LWljb24+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCJzbWFydFRyZWVOb2RlQnV0dG9uVHlwZS5NRU5VXCI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgbWF0LWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImN1c3RvbUJ1dHRvbkNsaWNrZWQoJGV2ZW50LCBub2RlLmJ1dHRvbiwgdHJ1ZSlcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxzbWFydC1pY29uICpuZ0lmPVwibm9kZS5idXR0b24uaWNvblwiIFtpY29uXT1cIm5vZGUuYnV0dG9uLmljb25cIj48L3NtYXJ0LWljb25cclxuICAgICAgICAgICAgICAgID57eyBub2RlLmJ1dHRvbi5sYWJlbCB9fVxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDxtYXQtbWVudSAjbWVudT1cIm1hdE1lbnVcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGJ1dHRvbiBvZiBub2RlLmJ1dHRvbi5tZW51SXRlbUJ1dHRvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY3VzdG9tQnV0dG9uQ2xpY2tlZCgkZXZlbnQsIGJ1dHRvbiwgdHJ1ZSlcIlxyXG4gICAgICAgICAgICAgICAgICBtYXQtbWVudS1pdGVtXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDxzbWFydC1pY29uICpuZ0lmPVwiYnV0dG9uLmljb25cIiBbaWNvbl09XCJidXR0b24uaWNvblwiPjwvc21hcnQtaWNvblxyXG4gICAgICAgICAgICAgICAgICA+e3sgYnV0dG9uLmxhYmVsIH19XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8L21hdC1tZW51PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJjdXN0b21CdXR0b25DbGlja2VkKCRldmVudCwgbm9kZS5idXR0b24pXCJcclxuICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwic21hcnRUcmVlTm9kZUJ1dHRvblR5cGUuTk9STUFMXCJcclxuICAgICAgICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPHNtYXJ0LWljb24gKm5nSWY9XCJub2RlLmJ1dHRvbi5pY29uXCIgW2ljb25dPVwibm9kZS5idXR0b24uaWNvblwiPjwvc21hcnQtaWNvbj5cclxuICAgICAgICAgICAgICB7eyBub2RlLmJ1dHRvbi5pY29uIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgW2NsYXNzLnNtLXRyZWUtaW52aXNpYmxlXT1cIiF0cmVlQ29udHJvbC5pc0V4cGFuZGVkKG5vZGUpXCJcclxuICAgICAgICBbbmdDbGFzc109XCJnZXRDbGFzc2VzRm9yVHJlZU5vZGVDaGlsZHJlbihub2RlKVwiXHJcbiAgICAgICAgcm9sZT1cImdyb3VwXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgbWF0VHJlZU5vZGVPdXRsZXQ+PC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9tYXQtbmVzdGVkLXRyZWUtbm9kZT5cclxuICA8L21hdC10cmVlPlxyXG4gIDxkaXYgKm5nSWY9XCIhdHJlZURhdGFcIj5cclxuICAgIDxoMz5cclxuICAgICAge3sgZXJyb3JNZXNzYWdlIH19XHJcbiAgICA8L2gzPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
@@ -0,0 +1,7 @@
1
+ export var SmartTreeNodeButtonType;
2
+ (function (SmartTreeNodeButtonType) {
3
+ SmartTreeNodeButtonType["MENU"] = "MENU";
4
+ SmartTreeNodeButtonType["ICON"] = "ICON";
5
+ SmartTreeNodeButtonType["NORMAL"] = "NORMAL";
6
+ })(SmartTreeNodeButtonType || (SmartTreeNodeButtonType = {}));
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnR0cmVlLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtbmctY2xpZW50L3NyYy9saWIvc21hcnQtdHJlZS9zbWFydHRyZWUubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBcUNBLE1BQU0sQ0FBTixJQUFZLHVCQUlYO0FBSkQsV0FBWSx1QkFBdUI7SUFDakMsd0NBQWEsQ0FBQTtJQUNiLHdDQUFhLENBQUE7SUFDYiw0Q0FBaUIsQ0FBQTtBQUNuQixDQUFDLEVBSlcsdUJBQXVCLEtBQXZCLHVCQUF1QixRQUlsQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFVpQWN0aW9uIH0gZnJvbSAnLi4vdmlldy1jb250ZXh0L3Byb2plY3RzJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU21hcnRUcmVlTW9kZWwge1xyXG4gIC8vIG5lbSB0ZW1wb3LDoWxpcyBzdG9yYWdlLWJhIHRlbm5pIGEgVUkgYmVhbi1la2V0XHJcbiAgaWRlbnRpZmllcj86IHN0cmluZztcclxuICByb290Tm9kZXM6IEFycmF5PFNtYXJ0VHJlZU5vZGU+O1xyXG4gIHNlbGVjdGVkTm9kZUlkZW50aWZpZXI/OiBzdHJpbmc7XHJcbiAgbmF2aWdhdGlvblVybHNCeU5vZGVUeXBlPzogQXJyYXk8U21hcnRUcmVlTm9kZVR5cGU+O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNtYXJ0VHJlZU5vZGUge1xyXG4gIGljb24/OiBzdHJpbmc7XHJcbiAgY2FwdGlvbjogc3RyaW5nO1xyXG4gIGNsYXNzZXM/OiBBcnJheTxzdHJpbmc+O1xyXG4gIGhhc0NoaWxkcmVuOiBib29sZWFuO1xyXG4gIGNoaWxkcmVuTm9kZXM6IEFycmF5PFNtYXJ0VHJlZU5vZGU+O1xyXG4gIGV4cGFuZGVkOiBib29sZWFuO1xyXG4gIHNlbGVjdGVkOiBib29sZWFuO1xyXG4gIGNoaWxkcmVuTm9kZXNMb2FkZWQ6IGJvb2xlYW47XHJcbiAgbGV2ZWw6IG51bWJlcjtcclxuICBzaG9ydERlc2NyaXB0aW9uPzogc3RyaW5nO1xyXG4gIGlkZW50aWZpZXI/OiBzdHJpbmc7XHJcbiAgb2JqZWN0VXJpPzogc3RyaW5nO1xyXG4gIG5vZGVUeXBlOiBzdHJpbmc7XHJcbiAgYnV0dG9uPzogU21hcnRUcmVlTm9kZUJ1dHRvbjtcclxuICBhY3Rpb25zPzogQXJyYXk8VWlBY3Rpb24+O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNtYXJ0VHJlZU5vZGVCdXR0b24ge1xyXG4gIGljb24/OiBzdHJpbmc7XHJcbiAgbGFiZWw/OiBzdHJpbmc7XHJcbiAgdHlwZTogU21hcnRUcmVlTm9kZUJ1dHRvblR5cGU7XHJcbiAgbWVudUl0ZW1CdXR0b25zPzogU21hcnRUcmVlTm9kZUJ1dHRvbltdO1xyXG4gIGNhbGxiYWNrPzogKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnk7XHJcbiAgYXJncz86IGFueVtdO1xyXG59XHJcblxyXG5leHBvcnQgZW51bSBTbWFydFRyZWVOb2RlQnV0dG9uVHlwZSB7XHJcbiAgTUVOVSA9ICdNRU5VJyxcclxuICBJQ09OID0gJ0lDT04nLFxyXG4gIE5PUk1BTCA9ICdOT1JNQUwnLFxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNtYXJ0VHJlZU5vZGVUeXBlIHtcclxuICBub2RlVHlwZTogc3RyaW5nO1xyXG4gIG5hdmlnYXRpb25Vcmw6IGFueVtdO1xyXG59XHJcbiJdfQ==