@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.
- package/esm2020/lib/session/api/api/session.service.mjs +4 -4
- package/esm2020/lib/session/cookie-service/smart-cookie.service.mjs +4 -4
- package/esm2020/lib/session/dev-tool/smart-dev-tool-dialog/smart-dev-tool-dialog.component.mjs +4 -4
- package/esm2020/lib/session/dev-tool/smart-dev-tool-dialog/smart-dev-tool-dialog.service.mjs +4 -4
- package/esm2020/lib/session/dev-tool/smart-dev-tool-floating-button/smart-dev-tool-floating-button.component.mjs +4 -4
- package/esm2020/lib/session/dev-tool/smart-dev-tool.interceptor.mjs +7 -7
- package/esm2020/lib/session/dev-tool/smart-dev-tool.service.mjs +7 -7
- package/esm2020/lib/session/smart-error-catching.interceptor.mjs +4 -4
- package/esm2020/lib/session/smart-header-maintainer.interceptor.mjs +4 -4
- package/esm2020/lib/session/smart-session.module.mjs +5 -5
- package/esm2020/lib/session/smart-session.service.mjs +4 -4
- package/esm2020/lib/session/smart-timer/smart-session-timer.component.mjs +4 -4
- package/esm2020/lib/session/smart-timer/smart-session-timer.service.mjs +4 -4
- package/esm2020/lib/smart-client/smart-authentication.service.mjs +4 -4
- package/esm2020/lib/smart-client/smart-component-api-client.mjs +2 -2
- package/esm2020/lib/smart-client/smart-file-uploader/smart-file-uploader.component.mjs +4 -4
- package/esm2020/lib/smart-client/smart.component.mjs +4 -4
- package/esm2020/lib/smart-client/smart.service.mjs +4 -4
- package/esm2020/lib/smart-ng-client.module.mjs +19 -8
- package/esm2020/lib/smart-ng-client.service.mjs +4 -4
- package/esm2020/lib/smart-tree/projects.mjs +9 -0
- package/esm2020/lib/smart-tree/smarttree-generic.service.mjs +292 -0
- package/esm2020/lib/smart-tree/smarttree.component.mjs +180 -0
- package/esm2020/lib/smart-tree/smarttree.model.mjs +7 -0
- package/esm2020/lib/smart-tree/smarttree.module.mjs +50 -0
- package/esm2020/lib/smart-tree/smarttree.node.model.mjs +6 -0
- package/esm2020/lib/smart-tree/smarttree.service.interface.mjs +2 -0
- package/esm2020/lib/smart-tree/smarttree.service.mjs +47 -0
- package/esm2020/lib/smart-tree/tree-api/api/tree.service.mjs +644 -0
- package/esm2020/lib/smart-tree/tree-api/configuration.mjs +91 -0
- package/esm2020/lib/smart-tree/tree-api/encoder.mjs +19 -0
- package/esm2020/lib/smart-tree/tree-api/param.mjs +2 -0
- package/esm2020/lib/smart-tree/tree-api/variables.mjs +9 -0
- package/esm2020/lib/view-context/api/api/view.service.mjs +4 -4
- package/esm2020/lib/view-context/api/api.module.mjs +5 -5
- package/esm2020/lib/view-context/message-dialog/message-dialog.component.mjs +4 -4
- package/esm2020/lib/view-context/smart-ui-action/components/success-snack-bar/success-snack-bar.component.mjs +4 -4
- package/esm2020/lib/view-context/smart-ui-action/dialogs/ui-action-confirm-dialog/ui-action-confirm-dialog.component.mjs +4 -4
- package/esm2020/lib/view-context/smart-ui-action/dialogs/ui-action-confirm-dialog/ui-action-confirm-dialog.service.mjs +4 -4
- package/esm2020/lib/view-context/smart-ui-action/dialogs/ui-action-file-upload-dialog/ui-action-file-upload-dialog.component.mjs +4 -4
- package/esm2020/lib/view-context/smart-ui-action/dialogs/ui-action-file-upload-dialog/ui-action-file-upload-dialog.service.mjs +4 -4
- package/esm2020/lib/view-context/smart-ui-action/dialogs/ui-action-input-dialog/ui-action-input-dialog.component.mjs +4 -4
- package/esm2020/lib/view-context/smart-ui-action/dialogs/ui-action-input-dialog/ui-action-input-dialog.service.mjs +4 -4
- package/esm2020/lib/view-context/smart-ui-action/ui-action-toolbar.component.mjs +4 -4
- package/esm2020/lib/view-context/smart-ui-action/ui-action.descriptor.service.mjs +4 -4
- package/esm2020/lib/view-context/smart-ui-action/ui-action.service.mjs +4 -4
- package/esm2020/lib/view-context/smart-view-context-error-dialog/smart-view-context-error-dialog.component.mjs +4 -4
- package/esm2020/lib/view-context/smart-view-context-error-dialog/smart-view-context-error-dialog.service.mjs +4 -4
- package/esm2020/lib/view-context/smart-view-context.interceptor.mjs +4 -4
- package/esm2020/lib/view-context/smart-view-context.module.mjs +5 -5
- package/esm2020/lib/view-context/smart-view-context.service.mjs +7 -7
- package/esm2020/lib/view-context/smart-view-redirect/smart-view-redirect.mjs +4 -4
- package/esm2020/lib/view-context/value-api/api/value.service.mjs +4 -4
- package/esm2020/lib/view-context/value-api/api.module.mjs +5 -5
- package/esm2020/projects.mjs +2 -1
- package/fesm2015/smartbit4all-ng-client.mjs +1536 -188
- package/fesm2015/smartbit4all-ng-client.mjs.map +1 -1
- package/fesm2020/smartbit4all-ng-client.mjs +1498 -188
- package/fesm2020/smartbit4all-ng-client.mjs.map +1 -1
- package/lib/smart-client/smart-component-api-client.d.ts +1 -1
- package/lib/smart-ng-client.module.d.ts +2 -1
- package/lib/smart-tree/projects.d.ts +5 -0
- package/lib/smart-tree/smarttree-generic.service.d.ts +50 -0
- package/lib/smart-tree/smarttree.component.d.ts +42 -0
- package/lib/smart-tree/smarttree.model.d.ts +41 -0
- package/lib/smart-tree/smarttree.module.d.ts +14 -0
- package/lib/smart-tree/smarttree.node.model.d.ts +13 -0
- package/lib/smart-tree/smarttree.service.d.ts +24 -0
- package/lib/smart-tree/smarttree.service.interface.d.ts +43 -0
- package/lib/smart-tree/tree-api/api/tree.service.d.ts +177 -0
- package/lib/smart-tree/tree-api/configuration.d.ts +104 -0
- package/lib/smart-tree/tree-api/encoder.d.ts +11 -0
- package/lib/smart-tree/tree-api/param.d.ts +37 -0
- package/lib/smart-tree/tree-api/variables.d.ts +8 -0
- package/package.json +1 -2
- package/projects.d.ts +1 -0
- package/smartbit4all-ng-client-2.0.0.tgz +0 -0
- package/src/lib/smart-tree/tree-api/README.md +226 -0
- package/schematics/collection.json +0 -11
- package/schematics/smart-component/index.ts +0 -26
- package/schematics/smart-component/schema.json +0 -20
- package/schematics/smart-component/smart-component.schema.ts +0 -4
- package/schematics/smart-component/templates/__name@dasherize__.component.css.template +0 -0
- package/schematics/smart-component/templates/__name@dasherize__.component.html.template +0 -3
- package/schematics/smart-component/templates/__name@dasherize__.component.ts.template +0 -26
- 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==
|