@progress-chef/platform-shared-components 0.0.154 → 0.0.155

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 (32) hide show
  1. package/assets/icons/IconFont.css +6 -3
  2. package/assets/icons/IconFont.scss +6 -3
  3. package/assets/icons/IconFont.ttf +0 -0
  4. package/assets/icons/IconFont.woff +0 -0
  5. package/assets/icons/IconFont.woff2 +0 -0
  6. package/esm2022/lib/atoms/atoms.module.mjs +15 -1
  7. package/esm2022/lib/atoms/drag-and-drop/drag-and-drop.component.mjs +31 -3
  8. package/esm2022/lib/atoms/markdown-display/markdown-display.component.mjs +39 -0
  9. package/esm2022/lib/atoms/markdown-display/markdown-display.module.mjs +26 -0
  10. package/esm2022/lib/atoms/markdown-display/markdown-display.service.mjs +53 -0
  11. package/esm2022/lib/atoms/tree-list/tree-list.component.mjs +404 -0
  12. package/esm2022/lib/atoms/tree-list/tree-list.interfaces.mjs +2 -0
  13. package/esm2022/lib/atoms/tree-list/tree-list.module.mjs +44 -0
  14. package/esm2022/lib/atoms/tree-view/tree-view.component.mjs +521 -0
  15. package/esm2022/lib/atoms/tree-view/tree-view.interfaces.mjs +2 -0
  16. package/esm2022/lib/atoms/tree-view/tree-view.module.mjs +44 -0
  17. package/esm2022/public-api.mjs +7 -1
  18. package/fesm2022/progress-chef-platform-shared-components.mjs +1139 -13
  19. package/fesm2022/progress-chef-platform-shared-components.mjs.map +1 -1
  20. package/lib/atoms/atoms.module.d.ts +5 -3
  21. package/lib/atoms/drag-and-drop/drag-and-drop.component.d.ts +10 -1
  22. package/lib/atoms/markdown-display/markdown-display.component.d.ts +22 -0
  23. package/lib/atoms/markdown-display/markdown-display.module.d.ts +8 -0
  24. package/lib/atoms/markdown-display/markdown-display.service.d.ts +23 -0
  25. package/lib/atoms/tree-list/tree-list.component.d.ts +288 -0
  26. package/lib/atoms/tree-list/tree-list.interfaces.d.ts +31 -0
  27. package/lib/atoms/tree-list/tree-list.module.d.ts +13 -0
  28. package/lib/atoms/tree-view/tree-view.component.d.ts +279 -0
  29. package/lib/atoms/tree-view/tree-view.interfaces.d.ts +23 -0
  30. package/lib/atoms/tree-view/tree-view.module.d.ts +13 -0
  31. package/package.json +2 -1
  32. package/public-api.d.ts +6 -0
@@ -0,0 +1,404 @@
1
+ import { Component, Input, Output, EventEmitter, ViewChild } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { TreeListModule } from '@progress/kendo-angular-treelist';
4
+ import { IconsModule } from '@progress/kendo-angular-icons';
5
+ import { ButtonComponent } from '../button/button.component';
6
+ import { IconComponent } from '../icon/icon.component';
7
+ import { LoaderComponent } from '../loader/loader.component';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "@angular/common";
10
+ import * as i2 from "@progress/kendo-angular-treelist";
11
+ /**
12
+ * Custom TreeList component that wraps Kendo's TreeList with design system styling.
13
+ *
14
+ * This component provides a hierarchical data grid for displaying and editing tabular data.
15
+ * It supports selection, sorting, filtering, editing, and custom column templates.
16
+ */
17
+ export class TreeListComponent {
18
+ constructor() {
19
+ /**
20
+ * The data source for the tree list
21
+ */
22
+ this.data = [];
23
+ /**
24
+ * Column definitions for the tree list
25
+ */
26
+ this.columns = [];
27
+ /**
28
+ * Field name that contains the unique identifier for each node
29
+ */
30
+ this.idField = 'id';
31
+ /**
32
+ * Field name that contains the child nodes array (for hierarchical binding)
33
+ */
34
+ this.childrenField = 'children';
35
+ /**
36
+ * Field name that contains the parent identifier (for flat binding)
37
+ */
38
+ this.parentIdField = 'parentId';
39
+ /**
40
+ * Binding type: 'hierarchy' for nested data with children, 'flat' for parent-child relationship data
41
+ */
42
+ this.bindingType = 'hierarchy';
43
+ /**
44
+ * Enable selection functionality
45
+ */
46
+ this.selectable = false;
47
+ /**
48
+ * Enable sorting functionality
49
+ */
50
+ this.sortable = false;
51
+ /**
52
+ * Enable filtering functionality
53
+ */
54
+ this.filterable = false;
55
+ /**
56
+ * Enable resizing functionality
57
+ */
58
+ this.resizable = false;
59
+ /**
60
+ * Enable reordering functionality
61
+ */
62
+ this.reorderable = false;
63
+ /**
64
+ * Enable editing functionality
65
+ */
66
+ this.editable = false;
67
+ /**
68
+ * Loading state - shows loading indicator when true
69
+ */
70
+ this.loading = false;
71
+ /**
72
+ * Height of the tree list container
73
+ */
74
+ this.height = 'auto';
75
+ /**
76
+ * Enable virtual scrolling
77
+ */
78
+ this.scrollable = true;
79
+ /**
80
+ * Page size for pagination
81
+ */
82
+ this.pageSize = 0;
83
+ /**
84
+ * Enable pagination
85
+ */
86
+ this.pageable = false;
87
+ /**
88
+ * Current sort configuration
89
+ */
90
+ this.sort = [];
91
+ this.selectionChange = new EventEmitter();
92
+ this.expand = new EventEmitter();
93
+ this.collapse = new EventEmitter();
94
+ this.sortChange = new EventEmitter();
95
+ this.filterChange = new EventEmitter();
96
+ this.pageChange = new EventEmitter();
97
+ this.add = new EventEmitter();
98
+ this.edit = new EventEmitter();
99
+ this.cancelEvent = new EventEmitter();
100
+ this.save = new EventEmitter();
101
+ this.remove = new EventEmitter();
102
+ this.cellClick = new EventEmitter();
103
+ this.cellClose = new EventEmitter();
104
+ }
105
+ /**
106
+ * Generates CSS classes for the tree-list container element based on current state.
107
+ * Applies conditional classes for loading state and editing mode to enable appropriate styling.
108
+ *
109
+ * @returns A space-separated string of CSS class names to apply to the container
110
+ */
111
+ getTreeListClasses() {
112
+ const classes = ['lib-tree-list'];
113
+ if (this.loading) {
114
+ classes.push('lib-tree-list--loading');
115
+ }
116
+ if (this.editable) {
117
+ classes.push('lib-tree-list--editable');
118
+ }
119
+ return classes.join(' ');
120
+ }
121
+ /**
122
+ * Handles selection state changes when users select or deselect tree-list rows.
123
+ * Propagates the selection event to parent components for external handling.
124
+ *
125
+ * @param event - The selection change event containing selected items and metadata
126
+ */
127
+ onSelectionChange(event) {
128
+ this.selectionChange.emit(event);
129
+ }
130
+ /**
131
+ * Handles node expansion events when users expand collapsed hierarchical tree nodes.
132
+ * Emits the expand event to notify parent components of the state change for potential data loading.
133
+ *
134
+ * @param event - The expand event containing the expanded node data and index information
135
+ */
136
+ onExpand(event) {
137
+ this.expand.emit(event);
138
+ }
139
+ /**
140
+ * Handles node collapse events when users collapse expanded hierarchical tree nodes.
141
+ * Emits the collapse event to notify parent components of the state change for cleanup or optimization.
142
+ *
143
+ * @param event - The collapse event containing the collapsed node data and index information
144
+ */
145
+ onCollapse(event) {
146
+ this.collapse.emit(event);
147
+ }
148
+ /**
149
+ * Handles column sorting changes when users click on sortable column headers.
150
+ * Updates the internal sort state and propagates the change to parent components for data reordering.
151
+ *
152
+ * @param sort - Array of sort descriptors defining field names and sort directions (asc/desc)
153
+ */
154
+ onSortChange(sort) {
155
+ this.sort = sort;
156
+ this.sortChange.emit(sort);
157
+ }
158
+ /**
159
+ * Handles filter criteria changes when users interact with column filters or search functionality.
160
+ * Propagates filter events to parent components for server-side or client-side data filtering.
161
+ *
162
+ * @param filter - The filter object containing criteria, operators, and field specifications
163
+ */
164
+ onFilterChange(filter) {
165
+ this.filterChange.emit(filter);
166
+ }
167
+ /**
168
+ * Handles pagination navigation when users interact with pager controls.
169
+ * Propagates page change events to parent components for data loading of the requested page.
170
+ *
171
+ * @param event - The page change event containing skip, take, and page size information
172
+ */
173
+ onPageChange(event) {
174
+ this.pageChange.emit(event);
175
+ }
176
+ /**
177
+ * Handles add/create events when users initiate creation of new tree-list items.
178
+ * Propagates the add event to parent components for handling new item creation logic and validation.
179
+ *
180
+ * @param event - The add event containing parent item context and position information for insertion
181
+ */
182
+ onAdd(event) {
183
+ this.add.emit(event);
184
+ }
185
+ /**
186
+ * Handles edit mode activation when users enter editing mode for tree-list items.
187
+ * Propagates the edit event to parent components for setting up edit state and validation rules.
188
+ *
189
+ * @param event - The edit event containing the item data being edited and row context
190
+ */
191
+ onEdit(event) {
192
+ this.edit.emit(event);
193
+ }
194
+ /**
195
+ * Handles edit cancellation when users discard changes and exit editing mode without saving.
196
+ * Propagates the cancel event to parent components for cleanup and restoring original data state.
197
+ *
198
+ * @param event - The cancel event containing the item data that was being edited
199
+ */
200
+ onCancel(event) {
201
+ this.cancelEvent.emit(event);
202
+ }
203
+ /**
204
+ * Handles save operations when users commit changes after editing tree-list items.
205
+ * Propagates the save event to parent components for validation, persistence, and data refresh.
206
+ *
207
+ * @param event - The save event containing the modified item data and original values for comparison
208
+ */
209
+ onSave(event) {
210
+ this.save.emit(event);
211
+ }
212
+ /**
213
+ * Handles delete/removal operations when users confirm deletion of tree-list items.
214
+ * Propagates the remove event to parent components for confirmation dialogs and data deletion.
215
+ *
216
+ * @param event - The remove event containing the item data to be deleted and hierarchical context
217
+ */
218
+ onRemove(event) {
219
+ this.remove.emit(event);
220
+ }
221
+ /**
222
+ * Handles individual cell click events within the tree-list for custom interaction handling.
223
+ * Propagates cell click events to parent components for custom actions, navigation, or cell-specific logic.
224
+ *
225
+ * @param event - The cell click event containing cell data, coordinates, and column information
226
+ */
227
+ onCellClick(event) {
228
+ this.cellClick.emit(event);
229
+ }
230
+ /**
231
+ * Handles cell editor close events when users exit cell editing mode.
232
+ * Propagates cell close events to parent components for cleanup and state management.
233
+ *
234
+ * @param event - The cell close event containing editor state and any pending changes
235
+ */
236
+ onCellClose(event) {
237
+ this.cellClose.emit(event);
238
+ }
239
+ /**
240
+ * Handles edit button clicks from command column or custom templates to initiate item editing.
241
+ * Creates and emits a properly formatted EditEvent to notify parent components of edit intention.
242
+ * This method bridges custom UI elements with the standard Kendo TreeList editing workflow.
243
+ *
244
+ * @param dataItem - The tree-list item data object to be edited
245
+ */
246
+ onEditButtonClick(dataItem) {
247
+ // Emit the edit event to let parent component handle the editing logic
248
+ this.edit.emit({ dataItem });
249
+ }
250
+ /**
251
+ * Handles remove button clicks from command column or custom templates to initiate item deletion.
252
+ * Creates and emits a properly formatted RemoveEvent to notify parent components of deletion request.
253
+ * This method bridges custom UI elements with the standard Kendo TreeList removal workflow.
254
+ *
255
+ * @param dataItem - The tree-list item data object to be deleted
256
+ */
257
+ onRemoveButtonClick(dataItem) {
258
+ // Emit the remove event to let parent component handle the removal logic
259
+ this.remove.emit({ dataItem });
260
+ }
261
+ /**
262
+ * Recursively expands all collapsible nodes in the tree-list hierarchy.
263
+ * Iterates through all top-level data items and uses the Kendo TreeList API to expand each node,
264
+ * which triggers cascading expansion of all child nodes. Safely handles cases where the
265
+ * TreeList element is not yet initialized.
266
+ */
267
+ expandAll() {
268
+ if (this.treeListElement) {
269
+ // TreeList doesn't have expandAll, so we implement custom logic
270
+ this.data.forEach(item => {
271
+ if (this.treeListElement) {
272
+ this.treeListElement.expand(item);
273
+ }
274
+ });
275
+ }
276
+ }
277
+ /**
278
+ * Recursively collapses all expandable nodes in the tree-list hierarchy.
279
+ * Iterates through all top-level data items and uses the Kendo TreeList API to collapse each node,
280
+ * which triggers cascading collapse of all child nodes. Safely handles cases where the
281
+ * TreeList element is not yet initialized.
282
+ */
283
+ collapseAll() {
284
+ if (this.treeListElement) {
285
+ // TreeList doesn't have collapseAll, so we implement custom logic
286
+ this.data.forEach(item => {
287
+ if (this.treeListElement) {
288
+ this.treeListElement.collapse(item);
289
+ }
290
+ });
291
+ }
292
+ }
293
+ /**
294
+ * Provides a tracking function for Angular's ngFor optimization when rendering column definitions.
295
+ * Returns a unique identifier for each column to help Angular efficiently track and update
296
+ * column elements during re-rendering. Falls back to array index if no field property exists.
297
+ *
298
+ * @param index - The array index of the column in the columns collection
299
+ * @param column - The column configuration object containing field and other properties
300
+ * @returns A unique identifier for the column (field name or array index)
301
+ */
302
+ trackByColumn(index, column) {
303
+ return column.field || index;
304
+ }
305
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: TreeListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
306
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: TreeListComponent, isStandalone: true, selector: "lib-tree-list", inputs: { data: "data", columns: "columns", idField: "idField", childrenField: "childrenField", parentIdField: "parentIdField", bindingType: "bindingType", fetchChildren: "fetchChildren", hasChildren: "hasChildren", isExpanded: "isExpanded", selectable: "selectable", sortable: "sortable", filterable: "filterable", resizable: "resizable", reorderable: "reorderable", editable: "editable", loading: "loading", height: "height", scrollable: "scrollable", pageSize: "pageSize", pageable: "pageable", sort: "sort", cellTemplate: "cellTemplate", headerTemplate: "headerTemplate", footerTemplate: "footerTemplate", editTemplate: "editTemplate", commandTemplate: "commandTemplate", noRecordsTemplate: "noRecordsTemplate", loadingTemplate: "loadingTemplate" }, outputs: { selectionChange: "selectionChange", expand: "expand", collapse: "collapse", sortChange: "sortChange", filterChange: "filterChange", pageChange: "pageChange", add: "add", edit: "edit", cancelEvent: "cancelEvent", save: "save", remove: "remove", cellClick: "cellClick", cellClose: "cellClose" }, viewQueries: [{ propertyName: "treeListElement", first: true, predicate: ["treeListElement"], descendants: true }], ngImport: i0, template: "<div [class]=\"getTreeListClasses()\">\n <!-- Enhanced TreeList with Hierarchy Binding -->\n <kendo-treelist *ngIf=\"bindingType === 'hierarchy'\" [kendoTreeListHierarchyBinding]=\"data\"\n [childrenField]=\"childrenField\" [idField]=\"idField\" class=\"lib-tree-list__kendo-treelist\" [selectable]=\"selectable\"\n (selectionChange)=\"onSelectionChange($event)\" [sortable]=\"sortable\" [sort]=\"sort\"\n (sortChange)=\"onSortChange($event)\" [filterable]=\"filterable\" (filterChange)=\"onFilterChange($event)\"\n [pageable]=\"pageable\" [pageSize]=\"pageSize\" (pageChange)=\"onPageChange($event)\" [resizable]=\"resizable\"\n [reorderable]=\"reorderable\" [height]=\"height\" [scrollable]=\"scrollable\" [navigable]=\"editable\"\n (expand)=\"onExpand($event)\" (collapse)=\"onCollapse($event)\" (cellClick)=\"onCellClick($event)\"\n (cellClose)=\"onCellClose($event)\" (add)=\"onAdd($event)\" (edit)=\"onEdit($event)\" (cancel)=\"onCancel($event)\"\n (save)=\"onSave($event)\" (remove)=\"onRemove($event)\" kendoTreeListExpandable [initiallyExpanded]=\"true\"\n kendoTreeListSelectable>\n\n <!-- Dynamic columns with templates -->\n <kendo-treelist-column *ngFor=\"let column of columns; trackBy: trackByColumn; let i = index\" [field]=\"column.field\"\n [title]=\"column.title || column.field\" [width]=\"column.width\" [locked]=\"column.locked\" [hidden]=\"column.hidden\"\n [sortable]=\"column.sortable !== undefined ? column.sortable : sortable\"\n [filterable]=\"column.filterable !== undefined ? column.filterable : filterable\"\n [editable]=\"column.editable !== undefined ? column.editable : editable\" [format]=\"column.format\"\n [expandable]=\"i === 0\">\n\n <!-- Custom cell template -->\n <ng-template *ngIf=\"column.template\" kendoTreeListCellTemplate let-dataItem=\"dataItem\" let-rowIndex=\"rowIndex\"\n let-columnIndex=\"columnIndex\">\n <ng-container [ngTemplateOutlet]=\"column.template\" [ngTemplateOutletContext]=\"{ \n $implicit: dataItem, \n dataItem: dataItem, \n rowIndex: rowIndex, \n columnIndex: columnIndex,\n field: column.field,\n value: dataItem[column.field]\n }\">\n </ng-container>\n </ng-template>\n\n <!-- Custom header template -->\n <ng-template *ngIf=\"column.headerTemplate\" kendoTreeListHeaderTemplate>\n <ng-container [ngTemplateOutlet]=\"column.headerTemplate\" [ngTemplateOutletContext]=\"{ column: column }\">\n </ng-container>\n </ng-template>\n\n <!-- Custom footer template -->\n <ng-template *ngIf=\"column.footerTemplate\" kendoTreeListFooterTemplate>\n <ng-container [ngTemplateOutlet]=\"column.footerTemplate\" [ngTemplateOutletContext]=\"{ column: column }\">\n </ng-container>\n </ng-template>\n\n <!-- Edit template for inline editing -->\n <ng-template *ngIf=\"editable && column.editTemplate\" kendoTreeListEditTemplate let-dataItem=\"dataItem\"\n let-formGroup=\"formGroup\">\n <ng-container [ngTemplateOutlet]=\"column.editTemplate\" [ngTemplateOutletContext]=\"{ \n dataItem: dataItem, \n formGroup: formGroup,\n field: column.field\n }\">\n </ng-container>\n </ng-template>\n </kendo-treelist-column>\n\n <!-- Command column for editing actions -->\n <kendo-treelist-command-column *ngIf=\"editable\" title=\"Actions\" width=\"150\" [locked]=\"false\">\n <ng-template kendoTreeListCellTemplate let-isNew=\"isNew\" let-dataItem=\"dataItem\" let-cellContext=\"cellContext\">\n <lib-button *ngIf=\"!isNew\" label=\"\" iconName=\"edit\" size=\"medium\" fillMode=\"flat\" themeColor=\"primary\"\n [iconButton]=\"true\" (buttonClick)=\"onEditButtonClick(dataItem)\" [attr.aria-label]=\"'Edit ' + dataItem.name\">\n </lib-button>\n <lib-button *ngIf=\"!isNew\" label=\"\" iconName=\"delete\" size=\"medium\" fillMode=\"flat\" themeColor=\"error\"\n [iconButton]=\"true\" (buttonClick)=\"onRemoveButtonClick(dataItem)\"\n [attr.aria-label]=\"'Delete ' + dataItem.name\">\n </lib-button>\n </ng-template>\n </kendo-treelist-command-column>\n </kendo-treelist>\n\n <!-- Enhanced TreeList with Flat Binding -->\n <kendo-treelist *ngIf=\"bindingType === 'flat'\" [kendoTreeListFlatBinding]=\"data\" [parentIdField]=\"parentIdField\"\n [idField]=\"idField\" class=\"lib-tree-list__kendo-treelist\" [selectable]=\"selectable\"\n (selectionChange)=\"onSelectionChange($event)\" [sortable]=\"sortable\" [sort]=\"sort\"\n (sortChange)=\"onSortChange($event)\" [filterable]=\"filterable\" (filterChange)=\"onFilterChange($event)\"\n [pageable]=\"pageable\" [pageSize]=\"pageSize\" (pageChange)=\"onPageChange($event)\" [resizable]=\"resizable\"\n [reorderable]=\"reorderable\" [height]=\"height\" [scrollable]=\"scrollable\" [navigable]=\"editable\"\n (expand)=\"onExpand($event)\" (collapse)=\"onCollapse($event)\" (cellClick)=\"onCellClick($event)\"\n (cellClose)=\"onCellClose($event)\" (add)=\"onAdd($event)\" (edit)=\"onEdit($event)\" (cancel)=\"onCancel($event)\"\n (save)=\"onSave($event)\" (remove)=\"onRemove($event)\">\n\n <!-- Dynamic columns with templates for flat binding -->\n <kendo-treelist-column *ngFor=\"let column of columns; trackBy: trackByColumn; let i = index\" [field]=\"column.field\"\n [title]=\"column.title || column.field\" [width]=\"column.width\" [locked]=\"column.locked\" [hidden]=\"column.hidden\"\n [sortable]=\"column.sortable !== undefined ? column.sortable : sortable\"\n [filterable]=\"column.filterable !== undefined ? column.filterable : filterable\"\n [editable]=\"column.editable !== undefined ? column.editable : editable\" [format]=\"column.format\"\n [expandable]=\"i === 0\">\n\n <!-- Custom cell template -->\n <ng-template *ngIf=\"column.template\" kendoTreeListCellTemplate let-dataItem=\"dataItem\" let-rowIndex=\"rowIndex\"\n let-columnIndex=\"columnIndex\">\n <ng-container [ngTemplateOutlet]=\"column.template\" [ngTemplateOutletContext]=\"{ \n $implicit: dataItem, \n dataItem: dataItem, \n rowIndex: rowIndex, \n columnIndex: columnIndex,\n field: column.field,\n value: dataItem[column.field]\n }\">\n </ng-container>\n </ng-template>\n\n <!-- Custom header template -->\n <ng-template *ngIf=\"column.headerTemplate\" kendoTreeListHeaderTemplate>\n <ng-container [ngTemplateOutlet]=\"column.headerTemplate\" [ngTemplateOutletContext]=\"{ column: column }\">\n </ng-container>\n </ng-template>\n\n <!-- Custom footer template -->\n <ng-template *ngIf=\"column.footerTemplate\" kendoTreeListFooterTemplate>\n <ng-container [ngTemplateOutlet]=\"column.footerTemplate\" [ngTemplateOutletContext]=\"{ column: column }\">\n </ng-container>\n </ng-template>\n\n <!-- Edit template for inline editing -->\n <ng-template *ngIf=\"editable && column.editTemplate\" kendoTreeListEditTemplate let-dataItem=\"dataItem\"\n let-formGroup=\"formGroup\">\n <ng-container [ngTemplateOutlet]=\"column.editTemplate\" [ngTemplateOutletContext]=\"{ \n dataItem: dataItem, \n formGroup: formGroup,\n field: column.field\n }\">\n </ng-container>\n </ng-template>\n </kendo-treelist-column>\n\n <!-- Command column for editing actions -->\n <kendo-treelist-command-column *ngIf=\"editable\" title=\"Actions\" width=\"150\" [locked]=\"false\">\n <ng-template kendoTreeListCellTemplate let-isNew=\"isNew\" let-dataItem=\"dataItem\">\n <lib-button *ngIf=\"!isNew\" label=\"\" iconName=\"edit\" size=\"medium\" fillMode=\"flat\" themeColor=\"primary\"\n [iconButton]=\"true\" (buttonClick)=\"onEditButtonClick(dataItem)\" [attr.aria-label]=\"'Edit ' + dataItem.name\">\n </lib-button>\n <lib-button *ngIf=\"!isNew\" label=\"\" iconName=\"delete\" size=\"medium\" fillMode=\"flat\" themeColor=\"error\"\n [iconButton]=\"true\" (buttonClick)=\"onRemoveButtonClick(dataItem)\"\n [attr.aria-label]=\"'Delete ' + dataItem.name\">\n </lib-button>\n </ng-template>\n </kendo-treelist-command-column>\n </kendo-treelist>\n\n <!-- Loading indicator -->\n <div *ngIf=\"loading\" class=\"lib-tree-list__loading\">\n <lib-loader size=\"medium\" type=\"pulsing\" themeColor=\"primary\"></lib-loader>\n </div>\n</div>\n", styles: [".lib-tree-list{position:relative;width:100%}::ng-deep .k-grid tr{height:50px}::ng-deep .pagination-wrapper{display:flex;width:100%}::ng-deep .pagination-disabled{color:#6c6f72!important;pointer-events:none}::ng-deep .lib-grid-select-all-message-container{height:2rem;display:none;gap:.25rem;justify-content:center;align-items:center;background-color:#eceff5!important;font-family:Inter,sans-serif!important;font-weight:400!important;font-style:normal;font-size:12px!important;line-height:16px!important;letter-spacing:.25px!important}::ng-deep .lib-grid-select-all-message-container .select-all-handler{cursor:pointer}::ng-deep .lib-grid-select-all-message-container .lib-grid-select-all-message{display:flex;gap:.25rem}::ng-deep .lib-grid-select-all-message-container .lib-grid-select-all-message .all-selected-icon{color:#198038}::ng-deep .disabled{cursor:none!important;pointer-events:none;opacity:.5}::ng-deep .lib-grid-select-all-message-show{display:flex!important}::ng-deep .k-grid .k-table-th,::ng-deep .k-grid .k-table-th.k-sorted{font-family:Inter,sans-serif!important;font-weight:600!important;font-style:normal!important;font-size:12px!important;line-height:16px!important;letter-spacing:.25px!important;background-color:#dee6f7!important;border-bottom-color:#ebecec!important;border-bottom-style:solid!important;border-bottom-width:2px!important;border-right:0px!important;border-left:0px!important;cursor:default!important}::ng-deep .k-grid .k-table-th .k-cell-inner,::ng-deep .k-grid .k-table-th.k-sorted .k-cell-inner{padding-right:.5rem;border-right:2px solid #C2D2F3!important}::ng-deep .k-grid .k-table-th .k-cell-inner .k-link,::ng-deep .k-grid .k-table-th.k-sorted .k-cell-inner .k-link{cursor:default!important}::ng-deep .k-grid .k-table-th:focus,::ng-deep .k-grid .k-table-th.k-sorted:focus{box-shadow:none!important}::ng-deep .k-grid .k-table-th.k-sorted{font-family:Inter,sans-serif!important;font-weight:600!important;font-style:normal!important;font-size:12px!important;line-height:16px!important;letter-spacing:.25px!important;background-color:#dee6f7!important}::ng-deep .k-grid tbody>tr:not(.k-detail-row):hover{background-color:#d0dcf5!important}::ng-deep .k-grid .k-table-row.k-selected>.k-table-td{background-color:#c9d7f4!important}::ng-deep .k-grid .k-table-row.k-disabled>.k-table-td{background-color:#fff!important}::ng-deep .k-grid .k-table-td{border-bottom-color:#ebecec!important;border-bottom-style:solid!important;border-bottom-width:1px!important;border-right:0px!important;border-left:0px!important}::ng-deep .k-grid td,::ng-deep .k-grid .k-table-td{white-space:nowrap!important}::ng-deep .k-table-alt-row{background-color:inherit!important}::ng-deep .k-grid .k-table-td{font-family:Inter,sans-serif!important;font-weight:400!important;font-style:normal;font-size:12px!important;line-height:16px!important;letter-spacing:.25px!important}::ng-deep .k-grid-norecords{text-align:center!important;opacity:.4}::ng-deep .k-grid-norecords td{padding:14px 0 14px 24px!important}::ng-deep kendo-pager.k-pager-wrap.k-grid-pager{font-family:Inter,sans-serif!important;font-weight:400!important;font-style:normal!important;font-size:14px!important;line-height:20px!important;letter-spacing:.25px!important}::ng-deep .k-pager{border-style:none!important}::ng-deep .k-input-value-text{overflow:unset!important}::ng-deep .k-grid th.k-header{vertical-align:middle!important;padding-left:16px;padding-right:.5rem}::ng-deep .grid-column,::ng-deep .kebab-column,::ng-deep .delete-column{padding:0!important}::ng-deep .grid-column kendo-button,::ng-deep .kebab-column kendo-button,::ng-deep .delete-column kendo-button{align-items:center!important;justify-content:center!important;display:flex!important}::ng-deep .k-checkbox{width:20px!important;height:20px!important;border-radius:0!important}::ng-deep .k-grid .k-hierarchy-cell,::ng-deep .k-grid .k-hierarchy-col{width:0;display:none}::ng-deep .k-grid .k-detail-row .k-detail-cell{background-color:#f4f8fa!important;padding:16px!important}::ng-deep .delete-icon{color:#dc267f!important;padding-left:12px;cursor:pointer}::ng-deep .remove-tooltip kendo-tooltip.k-tooltip{background-color:#fff;color:#000}::ng-deep .hide-header .k-grid-header{border:0px!important}::ng-deep .k-grouping-header{background-color:#eceff5!important}::ng-deep .k-grid-toolbar{padding:4px 16px!important;height:54px;background-color:#eceff5!important}::ng-deep .k-grid td:not(.kebab-column):not(.expand-column){padding-left:16px!important;padding-right:16px!important}::ng-deep .view-header .k-table-thead tr{height:50px}::ng-deep .hide-header .k-table-thead tr{height:0px;padding:0;display:block}::ng-deep td.kebab-column{display:flex;justify-content:center;align-items:center;height:inherit}::ng-deep .k-grid .k-table-td>.k-checkbox{vertical-align:middle!important}::ng-deep .kebab .k-button,::ng-deep .expand-column .k-button{border:0px}::ng-deep .expand-column{pointer-events:all!important}::ng-deep .expand-column-text{margin-right:32px}::ng-deep .expand-row{display:flex;align-items:center;justify-content:flex-end}::ng-deep .column-cursor-pointer{cursor:pointer}::ng-deep .column-content-nowrap .k-grid .k-table-th,::ng-deep .column-content-nowrap .k-grid td,::ng-deep .column-content-nowrap .k-grid .k-table-td{white-space:nowrap;text-overflow:clip}::ng-deep kendo-grid.k-grid .k-table-alt-row .k-grid-content-sticky,::ng-deep kendo-grid.k-grid .k-grid-row-sticky.k-table-alt-row td,::ng-deep kendo-grid.k-grid .k-grid-row-sticky.k-table-alt-row .k-table-td,::ng-deep .k-master-row.k-table-alt-row .k-grid-content-sticky,::ng-deep .k-master-row.k-table-alt-row .k-grid-row-sticky{background-color:#fff}::ng-deep kendo-grid.k-grid .k-grid-content-sticky:hover,::ng-deep kendo-grid.k-grid .k-grid-content-sticky.k-hover,::ng-deep kendo-grid.k-grid .k-table-row:hover .k-grid-content-sticky{background-color:#d0dcf5!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: TreeListModule }, { kind: "component", type: i2.TreeListComponent, selector: "kendo-treelist", inputs: ["aria-label", "data", "pageSize", "height", "rowHeight", "skip", "scrollable", "sort", "trackBy", "filter", "virtualColumns", "filterable", "sortable", "pageable", "navigable", "autoSize", "rowClass", "resizable", "reorderable", "loading", "columnMenu", "hideHeader", "idField", "selectable", "isSelected", "rowReorderable", "columns", "fetchChildren", "hasChildren", "isExpanded"], outputs: ["selectionChange", "filterChange", "pageChange", "sortChange", "dataStateChange", "edit", "cancel", "save", "remove", "add", "cellClose", "cellClick", "pdfExport", "excelExport", "columnResize", "columnReorder", "columnVisibilityChange", "columnLockedChange", "scrollBottom", "contentScroll", "expand", "collapse", "expandStateChange", "rowReorder"], exportAs: ["kendoTreeList"] }, { kind: "directive", type: i2.HierarchyBindingDirective, selector: "[kendoTreeListHierarchyBinding]", inputs: ["childrenField", "kendoTreeListHierarchyBinding"], exportAs: ["kendoTreeListHierarchyBinding"] }, { kind: "directive", type: i2.FlatBindingDirective, selector: "[kendoTreeListFlatBinding]", inputs: ["parentIdField", "idField", "kendoTreeListFlatBinding"], exportAs: ["kendoTreeListFlatBinding"] }, { kind: "directive", type: i2.ExpandableDirective, selector: "[kendoTreeListExpandable]", inputs: ["expandedKeys", "initiallyExpanded", "expandBy"], outputs: ["expandedKeysChange"], exportAs: ["kendoTreeListExpandable"] }, { kind: "directive", type: i2.SelectableDirective, selector: "[kendoTreeListSelectable]", inputs: ["selectable", "selectedItems", "itemKey", "columnKey"], outputs: ["selectedItemsChange"], exportAs: ["kendoTreeListSelectable"] }, { kind: "component", type: i2.ColumnComponent, selector: "kendo-treelist-column", inputs: ["expandable", "field", "format", "sortable", "editor", "filter", "filterable", "editable"] }, { kind: "component", type: i2.CommandColumnComponent, selector: "kendo-treelist-command-column" }, { kind: "directive", type: i2.CellTemplateDirective, selector: "[kendoTreeListCellTemplate]" }, { kind: "directive", type: i2.EditTemplateDirective, selector: "[kendoTreeListEditTemplate]" }, { kind: "directive", type: i2.FooterTemplateDirective, selector: "[kendoTreeListFooterTemplate]" }, { kind: "directive", type: i2.HeaderTemplateDirective, selector: "[kendoTreeListHeaderTemplate]" }, { kind: "ngmodule", type: IconsModule }, { kind: "component", type: ButtonComponent, selector: "lib-button", inputs: ["size", "rounded", "fillMode", "themeColor", "label", "iconName", "disabled", "toggleable", "iconPosition", "fontType", "width", "iconButton", "projectedIcon", "formatFn", "iconFontSize"], outputs: ["buttonClick"] }, { kind: "component", type: LoaderComponent, selector: "lib-loader", inputs: ["size", "type", "themeColor"] }] }); }
307
+ }
308
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: TreeListComponent, decorators: [{
309
+ type: Component,
310
+ args: [{ standalone: true, selector: 'lib-tree-list', imports: [
311
+ CommonModule,
312
+ TreeListModule,
313
+ IconsModule,
314
+ ButtonComponent,
315
+ IconComponent,
316
+ LoaderComponent
317
+ ], template: "<div [class]=\"getTreeListClasses()\">\n <!-- Enhanced TreeList with Hierarchy Binding -->\n <kendo-treelist *ngIf=\"bindingType === 'hierarchy'\" [kendoTreeListHierarchyBinding]=\"data\"\n [childrenField]=\"childrenField\" [idField]=\"idField\" class=\"lib-tree-list__kendo-treelist\" [selectable]=\"selectable\"\n (selectionChange)=\"onSelectionChange($event)\" [sortable]=\"sortable\" [sort]=\"sort\"\n (sortChange)=\"onSortChange($event)\" [filterable]=\"filterable\" (filterChange)=\"onFilterChange($event)\"\n [pageable]=\"pageable\" [pageSize]=\"pageSize\" (pageChange)=\"onPageChange($event)\" [resizable]=\"resizable\"\n [reorderable]=\"reorderable\" [height]=\"height\" [scrollable]=\"scrollable\" [navigable]=\"editable\"\n (expand)=\"onExpand($event)\" (collapse)=\"onCollapse($event)\" (cellClick)=\"onCellClick($event)\"\n (cellClose)=\"onCellClose($event)\" (add)=\"onAdd($event)\" (edit)=\"onEdit($event)\" (cancel)=\"onCancel($event)\"\n (save)=\"onSave($event)\" (remove)=\"onRemove($event)\" kendoTreeListExpandable [initiallyExpanded]=\"true\"\n kendoTreeListSelectable>\n\n <!-- Dynamic columns with templates -->\n <kendo-treelist-column *ngFor=\"let column of columns; trackBy: trackByColumn; let i = index\" [field]=\"column.field\"\n [title]=\"column.title || column.field\" [width]=\"column.width\" [locked]=\"column.locked\" [hidden]=\"column.hidden\"\n [sortable]=\"column.sortable !== undefined ? column.sortable : sortable\"\n [filterable]=\"column.filterable !== undefined ? column.filterable : filterable\"\n [editable]=\"column.editable !== undefined ? column.editable : editable\" [format]=\"column.format\"\n [expandable]=\"i === 0\">\n\n <!-- Custom cell template -->\n <ng-template *ngIf=\"column.template\" kendoTreeListCellTemplate let-dataItem=\"dataItem\" let-rowIndex=\"rowIndex\"\n let-columnIndex=\"columnIndex\">\n <ng-container [ngTemplateOutlet]=\"column.template\" [ngTemplateOutletContext]=\"{ \n $implicit: dataItem, \n dataItem: dataItem, \n rowIndex: rowIndex, \n columnIndex: columnIndex,\n field: column.field,\n value: dataItem[column.field]\n }\">\n </ng-container>\n </ng-template>\n\n <!-- Custom header template -->\n <ng-template *ngIf=\"column.headerTemplate\" kendoTreeListHeaderTemplate>\n <ng-container [ngTemplateOutlet]=\"column.headerTemplate\" [ngTemplateOutletContext]=\"{ column: column }\">\n </ng-container>\n </ng-template>\n\n <!-- Custom footer template -->\n <ng-template *ngIf=\"column.footerTemplate\" kendoTreeListFooterTemplate>\n <ng-container [ngTemplateOutlet]=\"column.footerTemplate\" [ngTemplateOutletContext]=\"{ column: column }\">\n </ng-container>\n </ng-template>\n\n <!-- Edit template for inline editing -->\n <ng-template *ngIf=\"editable && column.editTemplate\" kendoTreeListEditTemplate let-dataItem=\"dataItem\"\n let-formGroup=\"formGroup\">\n <ng-container [ngTemplateOutlet]=\"column.editTemplate\" [ngTemplateOutletContext]=\"{ \n dataItem: dataItem, \n formGroup: formGroup,\n field: column.field\n }\">\n </ng-container>\n </ng-template>\n </kendo-treelist-column>\n\n <!-- Command column for editing actions -->\n <kendo-treelist-command-column *ngIf=\"editable\" title=\"Actions\" width=\"150\" [locked]=\"false\">\n <ng-template kendoTreeListCellTemplate let-isNew=\"isNew\" let-dataItem=\"dataItem\" let-cellContext=\"cellContext\">\n <lib-button *ngIf=\"!isNew\" label=\"\" iconName=\"edit\" size=\"medium\" fillMode=\"flat\" themeColor=\"primary\"\n [iconButton]=\"true\" (buttonClick)=\"onEditButtonClick(dataItem)\" [attr.aria-label]=\"'Edit ' + dataItem.name\">\n </lib-button>\n <lib-button *ngIf=\"!isNew\" label=\"\" iconName=\"delete\" size=\"medium\" fillMode=\"flat\" themeColor=\"error\"\n [iconButton]=\"true\" (buttonClick)=\"onRemoveButtonClick(dataItem)\"\n [attr.aria-label]=\"'Delete ' + dataItem.name\">\n </lib-button>\n </ng-template>\n </kendo-treelist-command-column>\n </kendo-treelist>\n\n <!-- Enhanced TreeList with Flat Binding -->\n <kendo-treelist *ngIf=\"bindingType === 'flat'\" [kendoTreeListFlatBinding]=\"data\" [parentIdField]=\"parentIdField\"\n [idField]=\"idField\" class=\"lib-tree-list__kendo-treelist\" [selectable]=\"selectable\"\n (selectionChange)=\"onSelectionChange($event)\" [sortable]=\"sortable\" [sort]=\"sort\"\n (sortChange)=\"onSortChange($event)\" [filterable]=\"filterable\" (filterChange)=\"onFilterChange($event)\"\n [pageable]=\"pageable\" [pageSize]=\"pageSize\" (pageChange)=\"onPageChange($event)\" [resizable]=\"resizable\"\n [reorderable]=\"reorderable\" [height]=\"height\" [scrollable]=\"scrollable\" [navigable]=\"editable\"\n (expand)=\"onExpand($event)\" (collapse)=\"onCollapse($event)\" (cellClick)=\"onCellClick($event)\"\n (cellClose)=\"onCellClose($event)\" (add)=\"onAdd($event)\" (edit)=\"onEdit($event)\" (cancel)=\"onCancel($event)\"\n (save)=\"onSave($event)\" (remove)=\"onRemove($event)\">\n\n <!-- Dynamic columns with templates for flat binding -->\n <kendo-treelist-column *ngFor=\"let column of columns; trackBy: trackByColumn; let i = index\" [field]=\"column.field\"\n [title]=\"column.title || column.field\" [width]=\"column.width\" [locked]=\"column.locked\" [hidden]=\"column.hidden\"\n [sortable]=\"column.sortable !== undefined ? column.sortable : sortable\"\n [filterable]=\"column.filterable !== undefined ? column.filterable : filterable\"\n [editable]=\"column.editable !== undefined ? column.editable : editable\" [format]=\"column.format\"\n [expandable]=\"i === 0\">\n\n <!-- Custom cell template -->\n <ng-template *ngIf=\"column.template\" kendoTreeListCellTemplate let-dataItem=\"dataItem\" let-rowIndex=\"rowIndex\"\n let-columnIndex=\"columnIndex\">\n <ng-container [ngTemplateOutlet]=\"column.template\" [ngTemplateOutletContext]=\"{ \n $implicit: dataItem, \n dataItem: dataItem, \n rowIndex: rowIndex, \n columnIndex: columnIndex,\n field: column.field,\n value: dataItem[column.field]\n }\">\n </ng-container>\n </ng-template>\n\n <!-- Custom header template -->\n <ng-template *ngIf=\"column.headerTemplate\" kendoTreeListHeaderTemplate>\n <ng-container [ngTemplateOutlet]=\"column.headerTemplate\" [ngTemplateOutletContext]=\"{ column: column }\">\n </ng-container>\n </ng-template>\n\n <!-- Custom footer template -->\n <ng-template *ngIf=\"column.footerTemplate\" kendoTreeListFooterTemplate>\n <ng-container [ngTemplateOutlet]=\"column.footerTemplate\" [ngTemplateOutletContext]=\"{ column: column }\">\n </ng-container>\n </ng-template>\n\n <!-- Edit template for inline editing -->\n <ng-template *ngIf=\"editable && column.editTemplate\" kendoTreeListEditTemplate let-dataItem=\"dataItem\"\n let-formGroup=\"formGroup\">\n <ng-container [ngTemplateOutlet]=\"column.editTemplate\" [ngTemplateOutletContext]=\"{ \n dataItem: dataItem, \n formGroup: formGroup,\n field: column.field\n }\">\n </ng-container>\n </ng-template>\n </kendo-treelist-column>\n\n <!-- Command column for editing actions -->\n <kendo-treelist-command-column *ngIf=\"editable\" title=\"Actions\" width=\"150\" [locked]=\"false\">\n <ng-template kendoTreeListCellTemplate let-isNew=\"isNew\" let-dataItem=\"dataItem\">\n <lib-button *ngIf=\"!isNew\" label=\"\" iconName=\"edit\" size=\"medium\" fillMode=\"flat\" themeColor=\"primary\"\n [iconButton]=\"true\" (buttonClick)=\"onEditButtonClick(dataItem)\" [attr.aria-label]=\"'Edit ' + dataItem.name\">\n </lib-button>\n <lib-button *ngIf=\"!isNew\" label=\"\" iconName=\"delete\" size=\"medium\" fillMode=\"flat\" themeColor=\"error\"\n [iconButton]=\"true\" (buttonClick)=\"onRemoveButtonClick(dataItem)\"\n [attr.aria-label]=\"'Delete ' + dataItem.name\">\n </lib-button>\n </ng-template>\n </kendo-treelist-command-column>\n </kendo-treelist>\n\n <!-- Loading indicator -->\n <div *ngIf=\"loading\" class=\"lib-tree-list__loading\">\n <lib-loader size=\"medium\" type=\"pulsing\" themeColor=\"primary\"></lib-loader>\n </div>\n</div>\n", styles: [".lib-tree-list{position:relative;width:100%}::ng-deep .k-grid tr{height:50px}::ng-deep .pagination-wrapper{display:flex;width:100%}::ng-deep .pagination-disabled{color:#6c6f72!important;pointer-events:none}::ng-deep .lib-grid-select-all-message-container{height:2rem;display:none;gap:.25rem;justify-content:center;align-items:center;background-color:#eceff5!important;font-family:Inter,sans-serif!important;font-weight:400!important;font-style:normal;font-size:12px!important;line-height:16px!important;letter-spacing:.25px!important}::ng-deep .lib-grid-select-all-message-container .select-all-handler{cursor:pointer}::ng-deep .lib-grid-select-all-message-container .lib-grid-select-all-message{display:flex;gap:.25rem}::ng-deep .lib-grid-select-all-message-container .lib-grid-select-all-message .all-selected-icon{color:#198038}::ng-deep .disabled{cursor:none!important;pointer-events:none;opacity:.5}::ng-deep .lib-grid-select-all-message-show{display:flex!important}::ng-deep .k-grid .k-table-th,::ng-deep .k-grid .k-table-th.k-sorted{font-family:Inter,sans-serif!important;font-weight:600!important;font-style:normal!important;font-size:12px!important;line-height:16px!important;letter-spacing:.25px!important;background-color:#dee6f7!important;border-bottom-color:#ebecec!important;border-bottom-style:solid!important;border-bottom-width:2px!important;border-right:0px!important;border-left:0px!important;cursor:default!important}::ng-deep .k-grid .k-table-th .k-cell-inner,::ng-deep .k-grid .k-table-th.k-sorted .k-cell-inner{padding-right:.5rem;border-right:2px solid #C2D2F3!important}::ng-deep .k-grid .k-table-th .k-cell-inner .k-link,::ng-deep .k-grid .k-table-th.k-sorted .k-cell-inner .k-link{cursor:default!important}::ng-deep .k-grid .k-table-th:focus,::ng-deep .k-grid .k-table-th.k-sorted:focus{box-shadow:none!important}::ng-deep .k-grid .k-table-th.k-sorted{font-family:Inter,sans-serif!important;font-weight:600!important;font-style:normal!important;font-size:12px!important;line-height:16px!important;letter-spacing:.25px!important;background-color:#dee6f7!important}::ng-deep .k-grid tbody>tr:not(.k-detail-row):hover{background-color:#d0dcf5!important}::ng-deep .k-grid .k-table-row.k-selected>.k-table-td{background-color:#c9d7f4!important}::ng-deep .k-grid .k-table-row.k-disabled>.k-table-td{background-color:#fff!important}::ng-deep .k-grid .k-table-td{border-bottom-color:#ebecec!important;border-bottom-style:solid!important;border-bottom-width:1px!important;border-right:0px!important;border-left:0px!important}::ng-deep .k-grid td,::ng-deep .k-grid .k-table-td{white-space:nowrap!important}::ng-deep .k-table-alt-row{background-color:inherit!important}::ng-deep .k-grid .k-table-td{font-family:Inter,sans-serif!important;font-weight:400!important;font-style:normal;font-size:12px!important;line-height:16px!important;letter-spacing:.25px!important}::ng-deep .k-grid-norecords{text-align:center!important;opacity:.4}::ng-deep .k-grid-norecords td{padding:14px 0 14px 24px!important}::ng-deep kendo-pager.k-pager-wrap.k-grid-pager{font-family:Inter,sans-serif!important;font-weight:400!important;font-style:normal!important;font-size:14px!important;line-height:20px!important;letter-spacing:.25px!important}::ng-deep .k-pager{border-style:none!important}::ng-deep .k-input-value-text{overflow:unset!important}::ng-deep .k-grid th.k-header{vertical-align:middle!important;padding-left:16px;padding-right:.5rem}::ng-deep .grid-column,::ng-deep .kebab-column,::ng-deep .delete-column{padding:0!important}::ng-deep .grid-column kendo-button,::ng-deep .kebab-column kendo-button,::ng-deep .delete-column kendo-button{align-items:center!important;justify-content:center!important;display:flex!important}::ng-deep .k-checkbox{width:20px!important;height:20px!important;border-radius:0!important}::ng-deep .k-grid .k-hierarchy-cell,::ng-deep .k-grid .k-hierarchy-col{width:0;display:none}::ng-deep .k-grid .k-detail-row .k-detail-cell{background-color:#f4f8fa!important;padding:16px!important}::ng-deep .delete-icon{color:#dc267f!important;padding-left:12px;cursor:pointer}::ng-deep .remove-tooltip kendo-tooltip.k-tooltip{background-color:#fff;color:#000}::ng-deep .hide-header .k-grid-header{border:0px!important}::ng-deep .k-grouping-header{background-color:#eceff5!important}::ng-deep .k-grid-toolbar{padding:4px 16px!important;height:54px;background-color:#eceff5!important}::ng-deep .k-grid td:not(.kebab-column):not(.expand-column){padding-left:16px!important;padding-right:16px!important}::ng-deep .view-header .k-table-thead tr{height:50px}::ng-deep .hide-header .k-table-thead tr{height:0px;padding:0;display:block}::ng-deep td.kebab-column{display:flex;justify-content:center;align-items:center;height:inherit}::ng-deep .k-grid .k-table-td>.k-checkbox{vertical-align:middle!important}::ng-deep .kebab .k-button,::ng-deep .expand-column .k-button{border:0px}::ng-deep .expand-column{pointer-events:all!important}::ng-deep .expand-column-text{margin-right:32px}::ng-deep .expand-row{display:flex;align-items:center;justify-content:flex-end}::ng-deep .column-cursor-pointer{cursor:pointer}::ng-deep .column-content-nowrap .k-grid .k-table-th,::ng-deep .column-content-nowrap .k-grid td,::ng-deep .column-content-nowrap .k-grid .k-table-td{white-space:nowrap;text-overflow:clip}::ng-deep kendo-grid.k-grid .k-table-alt-row .k-grid-content-sticky,::ng-deep kendo-grid.k-grid .k-grid-row-sticky.k-table-alt-row td,::ng-deep kendo-grid.k-grid .k-grid-row-sticky.k-table-alt-row .k-table-td,::ng-deep .k-master-row.k-table-alt-row .k-grid-content-sticky,::ng-deep .k-master-row.k-table-alt-row .k-grid-row-sticky{background-color:#fff}::ng-deep kendo-grid.k-grid .k-grid-content-sticky:hover,::ng-deep kendo-grid.k-grid .k-grid-content-sticky.k-hover,::ng-deep kendo-grid.k-grid .k-table-row:hover .k-grid-content-sticky{background-color:#d0dcf5!important}\n"] }]
318
+ }], propDecorators: { treeListElement: [{
319
+ type: ViewChild,
320
+ args: ['treeListElement', { static: false }]
321
+ }], data: [{
322
+ type: Input
323
+ }], columns: [{
324
+ type: Input
325
+ }], idField: [{
326
+ type: Input
327
+ }], childrenField: [{
328
+ type: Input
329
+ }], parentIdField: [{
330
+ type: Input
331
+ }], bindingType: [{
332
+ type: Input
333
+ }], fetchChildren: [{
334
+ type: Input
335
+ }], hasChildren: [{
336
+ type: Input
337
+ }], isExpanded: [{
338
+ type: Input
339
+ }], selectable: [{
340
+ type: Input
341
+ }], sortable: [{
342
+ type: Input
343
+ }], filterable: [{
344
+ type: Input
345
+ }], resizable: [{
346
+ type: Input
347
+ }], reorderable: [{
348
+ type: Input
349
+ }], editable: [{
350
+ type: Input
351
+ }], loading: [{
352
+ type: Input
353
+ }], height: [{
354
+ type: Input
355
+ }], scrollable: [{
356
+ type: Input
357
+ }], pageSize: [{
358
+ type: Input
359
+ }], pageable: [{
360
+ type: Input
361
+ }], sort: [{
362
+ type: Input
363
+ }], cellTemplate: [{
364
+ type: Input
365
+ }], headerTemplate: [{
366
+ type: Input
367
+ }], footerTemplate: [{
368
+ type: Input
369
+ }], editTemplate: [{
370
+ type: Input
371
+ }], commandTemplate: [{
372
+ type: Input
373
+ }], noRecordsTemplate: [{
374
+ type: Input
375
+ }], loadingTemplate: [{
376
+ type: Input
377
+ }], selectionChange: [{
378
+ type: Output
379
+ }], expand: [{
380
+ type: Output
381
+ }], collapse: [{
382
+ type: Output
383
+ }], sortChange: [{
384
+ type: Output
385
+ }], filterChange: [{
386
+ type: Output
387
+ }], pageChange: [{
388
+ type: Output
389
+ }], add: [{
390
+ type: Output
391
+ }], edit: [{
392
+ type: Output
393
+ }], cancelEvent: [{
394
+ type: Output
395
+ }], save: [{
396
+ type: Output
397
+ }], remove: [{
398
+ type: Output
399
+ }], cellClick: [{
400
+ type: Output
401
+ }], cellClose: [{
402
+ type: Output
403
+ }] } });
404
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NoYXJlZC9zcmMvbGliL2F0b21zL3RyZWUtbGlzdC90cmVlLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2hhcmVkL3NyYy9saWIvYXRvbXMvdHJlZS1saXN0L3RyZWUtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUNMLGNBQWMsRUFRZixNQUFNLGtDQUFrQyxDQUFDO0FBRTFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7OztBQUc3RDs7Ozs7R0FLRztBQWVILE1BQU0sT0FBTyxpQkFBaUI7SUFkOUI7UUFvQkU7O1dBRUc7UUFDTSxTQUFJLEdBQW1CLEVBQUUsQ0FBQztRQUVuQzs7V0FFRztRQUNNLFlBQU8sR0FBcUIsRUFBRSxDQUFDO1FBRXhDOztXQUVHO1FBQ00sWUFBTyxHQUFXLElBQUksQ0FBQztRQUVoQzs7V0FFRztRQUNNLGtCQUFhLEdBQVcsVUFBVSxDQUFDO1FBRTVDOztXQUVHO1FBQ00sa0JBQWEsR0FBVyxVQUFVLENBQUM7UUFFNUM7O1dBRUc7UUFDTSxnQkFBVyxHQUF5QixXQUFXLENBQUM7UUFpQnpEOztXQUVHO1FBQ00sZUFBVSxH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QUFXO3NCQUFwQixNQUFNO2dCQUNHLElBQUk7c0JBQWIsTUFBTTtnQkFDRyxNQUFNO3NCQUFmLE1BQU07Z0JBRUcsU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIFRyZWVMaXN0TW9kdWxlLFxuICBUcmVlTGlzdENvbXBvbmVudCBhcyBLZW5kb1RyZWVMaXN0Q29tcG9uZW50LFxuICBBZGRFdmVudCxcbiAgQ2FuY2VsRXZlbnQsXG4gIEVkaXRFdmVudCxcbiAgUmVtb3ZlRXZlbnQsXG4gIFNhdmVFdmVudCxcbiAgUGFnZUNoYW5nZUV2ZW50XG59IGZyb20gJ0Bwcm9ncmVzcy9rZW5kby1hbmd1bGFyLXRyZWVsaXN0JztcbmltcG9ydCB7IFNvcnREZXNjcmlwdG9yIH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWRhdGEtcXVlcnknO1xuaW1wb3J0IHsgSWNvbnNNb2R1bGUgfSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci1pY29ucyc7XG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi9idXR0b24vYnV0dG9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vaWNvbi9pY29uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBMb2FkZXJDb21wb25lbnQgfSBmcm9tICcuLi9sb2FkZXIvbG9hZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUcmVlTGlzdE5vZGUsIFRyZWVMaXN0Q29sdW1uIH0gZnJvbSAnLi90cmVlLWxpc3QuaW50ZXJmYWNlcyc7XG5cbi8qKlxuICogQ3VzdG9tIFRyZWVMaXN0IGNvbXBvbmVudCB0aGF0IHdyYXBzIEtlbmRvJ3MgVHJlZUxpc3Qgd2l0aCBkZXNpZ24gc3lzdGVtIHN0eWxpbmcuXG4gKiBcbiAqIFRoaXMgY29tcG9uZW50IHByb3ZpZGVzIGEgaGllcmFyY2hpY2FsIGRhdGEgZ3JpZCBmb3IgZGlzcGxheWluZyBhbmQgZWRpdGluZyB0YWJ1bGFyIGRhdGEuXG4gKiBJdCBzdXBwb3J0cyBzZWxlY3Rpb24sIHNvcnRpbmcsIGZpbHRlcmluZywgZWRpdGluZywgYW5kIGN1c3RvbSBjb2x1bW4gdGVtcGxhdGVzLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICdsaWItdHJlZS1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RyZWUtbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RyZWUtbGlzdC5jb21wb25lbnQuc2NzcyddLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFRyZWVMaXN0TW9kdWxlLFxuICAgIEljb25zTW9kdWxlLFxuICAgIEJ1dHRvbkNvbXBvbmVudCxcbiAgICBJY29uQ29tcG9uZW50LFxuICAgIExvYWRlckNvbXBvbmVudFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIFRyZWVMaXN0Q29tcG9uZW50IHtcbiAgLyoqXG4gICAqIFZpZXdDaGlsZCByZWZlcmVuY2UgdG8gdGhlIEtlbmRvIFRyZWVMaXN0IGNvbXBvbmVudCBpbnN0YW5jZVxuICAgKi9cbiAgQFZpZXdDaGlsZCgndHJlZUxpc3RFbGVtZW50JywgeyBzdGF0aWM6IGZhbHNlIH0pIHRyZWVMaXN0RWxlbWVudCE6IEtlbmRvVHJlZUxpc3RDb21wb25lbnQ7XG5cbiAgLyoqXG4gICAqIFRoZSBkYXRhIHNvdXJjZSBmb3IgdGhlIHRyZWUgbGlzdFxuICAgKi9cbiAgQElucHV0KCkgZGF0YTogVHJlZUxpc3ROb2RlW10gPSBbXTtcblxuICAvKipcbiAgICogQ29sdW1uIGRlZmluaXRpb25zIGZvciB0aGUgdHJlZSBsaXN0XG4gICAqL1xuICBASW5wdXQoKSBjb2x1bW5zOiBUcmVlTGlzdENvbHVtbltdID0gW107XG5cbiAgLyoqXG4gICAqIEZpZWxkIG5hbWUgdGhhdCBjb250YWlucyB0aGUgdW5pcXVlIGlkZW50aWZpZXIgZm9yIGVhY2ggbm9kZVxuICAgKi9cbiAgQElucHV0KCkgaWRGaWVsZDogc3RyaW5nID0gJ2lkJztcblxuICAvKipcbiAgICogRmllbGQgbmFtZSB0aGF0IGNvbnRhaW5zIHRoZSBjaGlsZCBub2RlcyBhcnJheSAoZm9yIGhpZXJhcmNoaWNhbCBiaW5kaW5nKVxuICAgKi9cbiAgQElucHV0KCkgY2hpbGRyZW5GaWVsZDogc3RyaW5nID0gJ2NoaWxkcmVuJztcblxuICAvKipcbiAgICogRmllbGQgbmFtZSB0aGF0IGNvbnRhaW5zIHRoZSBwYXJlbnQgaWRlbnRpZmllciAoZm9yIGZsYXQgYmluZGluZylcbiAgICovXG4gIEBJbnB1dCgpIHBhcmVudElkRmllbGQ6IHN0cmluZyA9ICdwYXJlbnRJZCc7XG5cbiAgLyoqXG4gICAqIEJpbmRpbmcgdHlwZTogJ2hpZXJhcmNoeScgZm9yIG5lc3RlZCBkYXRhIHdpdGggY2hpbGRyZW4sICdmbGF0JyBmb3IgcGFyZW50LWNoaWxkIHJlbGF0aW9uc2hpcCBkYXRhXG4gICAqL1xuICBASW5wdXQoKSBiaW5kaW5nVHlwZTogJ2hpZXJhcmNoeScgfCAnZmxhdCcgPSAnaGllcmFyY2h5JztcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZnVuY3Rpb24gdGhhdCByZXRyaWV2ZXMgY2hpbGQgbm9kZXMgZm9yIGEgcGFydGljdWxhciBub2RlIChmb3IgbWFudWFsIGJpbmRpbmcpXG4gICAqL1xuICBASW5wdXQoKSBmZXRjaENoaWxkcmVuOiAoKGl0ZW06IGFueSkgPT4gYW55W10pIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmdW5jdGlvbiB0aGF0IGRldGVybWluZXMgaWYgYSBwYXJ0aWN1bGFyIG5vZGUgaGFzIGNoaWxkcmVuIChmb3IgbWFudWFsIGJpbmRpbmcpXG4gICAqL1xuICBASW5wdXQoKSBoYXNDaGlsZHJlbjogKChpdGVtOiBhbnkpID0+IGJvb2xlYW4pIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmdW5jdGlvbiB0aGF0IGRldGVybWluZXMgaWYgYSBwYXJ0aWN1bGFyIG5vZGUgaXMgZXhwYW5kZWQgKGZvciBtYW51YWwgYmluZGluZylcbiAgICovXG4gIEBJbnB1dCgpIGlzRXhwYW5kZWQ6ICgoaXRlbTogYW55KSA9PiBib29sZWFuKSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogRW5hYmxlIHNlbGVjdGlvbiBmdW5jdGlvbmFsaXR5XG4gICAqL1xuICBASW5wdXQoKSBzZWxlY3RhYmxlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEVuYWJsZSBzb3J0aW5nIGZ1bmN0aW9uYWxpdHlcbiAgICovXG4gIEBJbnB1dCgpIHNvcnRhYmxlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEVuYWJsZSBmaWx0ZXJpbmcgZnVuY3Rpb25hbGl0eVxuICAgKi9cbiAgQElucHV0KCkgZmlsdGVyYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBFbmFibGUgcmVzaXppbmcgZnVuY3Rpb25hbGl0eVxuICAgKi9cbiAgQElucHV0KCkgcmVzaXphYmxlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEVuYWJsZSByZW9yZGVyaW5nIGZ1bmN0aW9uYWxpdHlcbiAgICovXG4gIEBJbnB1dCgpIHJlb3JkZXJhYmxlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEVuYWJsZSBlZGl0aW5nIGZ1bmN0aW9uYWxpdHlcbiAgICovXG4gIEBJbnB1dCgpIGVkaXRhYmxlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIExvYWRpbmcgc3RhdGUgLSBzaG93cyBsb2FkaW5nIGluZGljYXRvciB3aGVuIHRydWVcbiAgICovXG4gIEBJbnB1dCgpIGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogSGVpZ2h0IG9mIHRoZSB0cmVlIGxpc3QgY29udGFpbmVyXG4gICAqL1xuICBASW5wdXQoKSBoZWlnaHQ6IG51bWJlciB8IHN0cmluZyA9ICdhdXRvJztcblxuICAvKipcbiAgICogRW5hYmxlIHZpcnR1YWwgc2Nyb2xsaW5nXG4gICAqL1xuICBASW5wdXQoKSBzY3JvbGxhYmxlOiBib29sZWFuID0gdHJ1ZTtcblxuICAvKipcbiAgICogUGFnZSBzaXplIGZvciBwYWdpbmF0aW9uXG4gICAqL1xuICBASW5wdXQoKSBwYWdlU2l6ZTogbnVtYmVyID0gMDtcblxuICAvKipcbiAgICogRW5hYmxlIHBhZ2luYXRpb25cbiAgICovXG4gIEBJbnB1dCgpIHBhZ2VhYmxlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEN1cnJlbnQgc29ydCBjb25maWd1cmF0aW9uXG4gICAqL1xuICBASW5wdXQoKSBzb3J0OiBTb3J0RGVzY3JpcHRvcltdID0gW107XG5cbiAgLyoqXG4gICAqIEN1c3RvbSBjZWxsIHRlbXBsYXRlXG4gICAqL1xuICBASW5wdXQoKSBjZWxsVGVtcGxhdGU/OiBhbnk7XG5cbiAgLyoqXG4gICAqIEN1c3RvbSBoZWFkZXIgdGVtcGxhdGVcbiAgICovXG4gIEBJbnB1dCgpIGhlYWRlclRlbXBsYXRlPzogYW55O1xuXG4gIC8qKlxuICAgKiBDdXN0b20gZm9vdGVyIHRlbXBsYXRlXG4gICAqL1xuICBASW5wdXQoKSBmb290ZXJUZW1wbGF0ZT86IGFueTtcblxuICAvKipcbiAgICogQ3VzdG9tIGVkaXQgdGVtcGxhdGVcbiAgICovXG4gIEBJbnB1dCgpIGVkaXRUZW1wbGF0ZT86IGFueTtcblxuICAvKipcbiAgICogQ3VzdG9tIGNvbW1hbmQgY29sdW1uIHRlbXBsYXRlXG4gICAqL1xuICBASW5wdXQoKSBjb21tYW5kVGVtcGxhdGU/OiBhbnk7XG5cbiAgLyoqXG4gICAqIEN1c3RvbSBubyByZWNvcmRzIHRlbXBsYXRlXG4gICAqL1xuICBASW5wdXQoKSBub1JlY29yZHNUZW1wbGF0ZT86IGFueTtcblxuICAvKipcbiAgICogQ3VzdG9tIGxvYWRpbmcgdGVtcGxhdGVcbiAgICovXG4gIEBJbnB1dCgpIGxvYWRpbmdUZW1wbGF0ZT86IGFueTtcblxuXG5cbiAgQE91dHB1dCgpIHNlbGVjdGlvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgZXhwYW5kID0gbmV3IEV2ZW50RW1pdHRlcjx7IGRhdGFJdGVtOiBUcmVlTGlzdE5vZGU7IGluZGV4OiBzdHJpbmcgfT4oKTtcbiAgQE91dHB1dCgpIGNvbGxhcHNlID0gbmV3IEV2ZW50RW1pdHRlcjx7IGRhdGFJdGVtOiBUcmVlTGlzdE5vZGU7IGluZGV4OiBzdHJpbmcgfT4oKTtcbiAgQE91dHB1dCgpIHNvcnRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFNvcnREZXNjcmlwdG9yW10+KCk7XG4gIEBPdXRwdXQoKSBmaWx0ZXJDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHBhZ2VDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFBhZ2VDaGFuZ2VFdmVudD4oKTtcbiAgQE91dHB1dCgpIGFkZCA9IG5ldyBFdmVudEVtaXR0ZXI8QWRkRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBlZGl0ID0gbmV3IEV2ZW50RW1pdHRlcjxFZGl0RXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBjYW5jZWxFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8Q2FuY2VsRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBzYXZlID0gbmV3IEV2ZW50RW1pdHRlcjxTYXZlRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSByZW1vdmUgPSBuZXcgRXZlbnRFbWl0dGVyPFJlbW92ZUV2ZW50PigpO1xuXG4gIEBPdXRwdXQoKSBjZWxsQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGNlbGxDbG9zZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgQ1NTIGNsYXNzZXMgZm9yIHRoZSB0cmVlLWxpc3QgY29udGFpbmVyIGVsZW1lbnQgYmFzZWQgb24gY3VycmVudCBzdGF0ZS5cbiAgICogQXBwbGllcyBjb25kaXRpb25hbCBjbGFzc2VzIGZvciBsb2FkaW5nIHN0YXRlIGFuZCBlZGl0aW5nIG1vZGUgdG8gZW5hYmxlIGFwcHJvcHJpYXRlIHN0eWxpbmcuXG4gICAqIFxuICAgKiBAcmV0dXJucyBBIHNwYWNlLXNlcGFyYXRlZCBzdHJpbmcgb2YgQ1NTIGNsYXNzIG5hbWVzIHRvIGFwcGx5IHRvIHRoZSBjb250YWluZXJcbiAgICovXG4gIGdldFRyZWVMaXN0Q2xhc3NlcygpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNsYXNzZXMgPSBbJ2xpYi10cmVlLWxpc3QnXTtcblxuICAgIGlmICh0aGlzLmxvYWRpbmcpIHtcbiAgICAgIGNsYXNzZXMucHVzaCgnbGliLXRyZWUtbGlzdC0tbG9hZGluZycpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmVkaXRhYmxlKSB7XG4gICAgICBjbGFzc2VzLnB1c2goJ2xpYi10cmVlLWxpc3QtLWVkaXRhYmxlJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsYXNzZXMuam9pbignICcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgc2VsZWN0aW9uIHN0YXRlIGNoYW5nZXMgd2hlbiB1c2VycyBzZWxlY3Qgb3IgZGVzZWxlY3QgdHJlZS1saXN0IHJvd3MuXG4gICAqIFByb3BhZ2F0ZXMgdGhlIHNlbGVjdGlvbiBldmVudCB0byBwYXJlbnQgY29tcG9uZW50cyBmb3IgZXh0ZXJuYWwgaGFuZGxpbmcuXG4gICAqIFxuICAgKiBAcGFyYW0gZXZlbnQgLSBUaGUgc2VsZWN0aW9uIGNoYW5nZSBldmVudCBjb250YWluaW5nIHNlbGVjdGVkIGl0ZW1zIGFuZCBtZXRhZGF0YVxuICAgKi9cbiAgb25TZWxlY3Rpb25DaGFuZ2UoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgbm9kZSBleHBhbnNpb24gZXZlbnRzIHdoZW4gdXNlcnMgZXhwYW5kIGNvbGxhcHNlZCBoaWVyYXJjaGljYWwgdHJlZSBub2Rlcy5cbiAgICogRW1pdHMgdGhlIGV4cGFuZCBldmVudCB0byBub3RpZnkgcGFyZW50IGNvbXBvbmVudHMgb2YgdGhlIHN0YXRlIGNoYW5nZSBmb3IgcG90ZW50aWFsIGRhdGEgbG9hZGluZy5cbiAgICogXG4gICAqIEBwYXJhbSBldmVudCAtIFRoZSBleHBhbmQgZXZlbnQgY29udGFpbmluZyB0aGUgZXhwYW5kZWQgbm9kZSBkYXRhIGFuZCBpbmRleCBpbmZvcm1hdGlvblxuICAgKi9cbiAgb25FeHBhbmQoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuZXhwYW5kLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgbm9kZSBjb2xsYXBzZSBldmVudHMgd2hlbiB1c2VycyBjb2xsYXBzZSBleHBhbmRlZCBoaWVyYXJjaGljYWwgdHJlZSBub2Rlcy5cbiAgICogRW1pdHMgdGhlIGNvbGxhcHNlIGV2ZW50IHRvIG5vdGlmeSBwYXJlbnQgY29tcG9uZW50cyBvZiB0aGUgc3RhdGUgY2hhbmdlIGZvciBjbGVhbnVwIG9yIG9wdGltaXphdGlvbi5cbiAgICogXG4gICAqIEBwYXJhbSBldmVudCAtIFRoZSBjb2xsYXBzZSBldmVudCBjb250YWluaW5nIHRoZSBjb2xsYXBzZWQgbm9kZSBkYXRhIGFuZCBpbmRleCBpbmZvcm1hdGlvblxuICAgKi9cbiAgb25Db2xsYXBzZShldmVudDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5jb2xsYXBzZS5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIGNvbHVtbiBzb3J0aW5nIGNoYW5nZXMgd2hlbiB1c2VycyBjbGljayBvbiBzb3J0YWJsZSBjb2x1bW4gaGVhZGVycy5cbiAgICogVXBkYXRlcyB0aGUgaW50ZXJuYWwgc29ydCBzdGF0ZSBhbmQgcHJvcGFnYXRlcyB0aGUgY2hhbmdlIHRvIHBhcmVudCBjb21wb25lbnRzIGZvciBkYXRhIHJlb3JkZXJpbmcuXG4gICAqIFxuICAgKiBAcGFyYW0gc29ydCAtIEFycmF5IG9mIHNvcnQgZGVzY3JpcHRvcnMgZGVmaW5pbmcgZmllbGQgbmFtZXMgYW5kIHNvcnQgZGlyZWN0aW9ucyAoYXNjL2Rlc2MpXG4gICAqL1xuICBvblNvcnRDaGFuZ2Uoc29ydDogU29ydERlc2NyaXB0b3JbXSk6IHZvaWQge1xuICAgIHRoaXMuc29ydCA9IHNvcnQ7XG4gICAgdGhpcy5zb3J0Q2hhbmdlLmVtaXQoc29ydCk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyBmaWx0ZXIgY3JpdGVyaWEgY2hhbmdlcyB3aGVuIHVzZXJzIGludGVyYWN0IHdpdGggY29sdW1uIGZpbHRlcnMgb3Igc2VhcmNoIGZ1bmN0aW9uYWxpdHkuXG4gICAqIFByb3BhZ2F0ZXMgZmlsdGVyIGV2ZW50cyB0byBwYXJlbnQgY29tcG9uZW50cyBmb3Igc2VydmVyLXNpZGUgb3IgY2xpZW50LXNpZGUgZGF0YSBmaWx0ZXJpbmcuXG4gICAqIFxuICAgKiBAcGFyYW0gZmlsdGVyIC0gVGhlIGZpbHRlciBvYmplY3QgY29udGFpbmluZyBjcml0ZXJpYSwgb3BlcmF0b3JzLCBhbmQgZmllbGQgc3BlY2lmaWNhdGlvbnNcbiAgICovXG4gIG9uRmlsdGVyQ2hhbmdlKGZpbHRlcjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5maWx0ZXJDaGFuZ2UuZW1pdChmaWx0ZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgcGFnaW5hdGlvbiBuYXZpZ2F0aW9uIHdoZW4gdXNlcnMgaW50ZXJhY3Qgd2l0aCBwYWdlciBjb250cm9scy5cbiAgICogUHJvcGFnYXRlcyBwYWdlIGNoYW5nZSBldmVudHMgdG8gcGFyZW50IGNvbXBvbmVudHMgZm9yIGRhdGEgbG9hZGluZyBvZiB0aGUgcmVxdWVzdGVkIHBhZ2UuXG4gICAqIFxuICAgKiBAcGFyYW0gZXZlbnQgLSBUaGUgcGFnZSBjaGFuZ2UgZXZlbnQgY29udGFpbmluZyBza2lwLCB0YWtlLCBhbmQgcGFnZSBzaXplIGluZm9ybWF0aW9uXG4gICAqL1xuICBvblBhZ2VDaGFuZ2UoZXZlbnQ6IFBhZ2VDaGFuZ2VFdmVudCk6IHZvaWQge1xuICAgIHRoaXMucGFnZUNoYW5nZS5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIGFkZC9jcmVhdGUgZXZlbnRzIHdoZW4gdXNlcnMgaW5pdGlhdGUgY3JlYXRpb24gb2YgbmV3IHRyZWUtbGlzdCBpdGVtcy5cbiAgICogUHJvcGFnYXRlcyB0aGUgYWRkIGV2ZW50IHRvIHBhcmVudCBjb21wb25lbnRzIGZvciBoYW5kbGluZyBuZXcgaXRlbSBjcmVhdGlvbiBsb2dpYyBhbmQgdmFsaWRhdGlvbi5cbiAgICogXG4gICAqIEBwYXJhbSBldmVudCAtIFRoZSBhZGQgZXZlbnQgY29udGFpbmluZyBwYXJlbnQgaXRlbSBjb250ZXh0IGFuZCBwb3NpdGlvbiBpbmZvcm1hdGlvbiBmb3IgaW5zZXJ0aW9uXG4gICAqL1xuICBvbkFkZChldmVudDogQWRkRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmFkZC5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIGVkaXQgbW9kZSBhY3RpdmF0aW9uIHdoZW4gdXNlcnMgZW50ZXIgZWRpdGluZyBtb2RlIGZvciB0cmVlLWxpc3QgaXRlbXMuXG4gICAqIFByb3BhZ2F0ZXMgdGhlIGVkaXQgZXZlbnQgdG8gcGFyZW50IGNvbXBvbmVudHMgZm9yIHNldHRpbmcgdXAgZWRpdCBzdGF0ZSBhbmQgdmFsaWRhdGlvbiBydWxlcy5cbiAgICogXG4gICAqIEBwYXJhbSBldmVudCAtIFRoZSBlZGl0IGV2ZW50IGNvbnRhaW5pbmcgdGhlIGl0ZW0gZGF0YSBiZWluZyBlZGl0ZWQgYW5kIHJvdyBjb250ZXh0XG4gICAqL1xuICBvbkVkaXQoZXZlbnQ6IEVkaXRFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuZWRpdC5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIGVkaXQgY2FuY2VsbGF0aW9uIHdoZW4gdXNlcnMgZGlzY2FyZCBjaGFuZ2VzIGFuZCBleGl0IGVkaXRpbmcgbW9kZSB3aXRob3V0IHNhdmluZy5cbiAgICogUHJvcGFnYXRlcyB0aGUgY2FuY2VsIGV2ZW50IHRvIHBhcmVudCBjb21wb25lbnRzIGZvciBjbGVhbnVwIGFuZCByZXN0b3Jpbmcgb3JpZ2luYWwgZGF0YSBzdGF0ZS5cbiAgICogXG4gICAqIEBwYXJhbSBldmVudCAtIFRoZSBjYW5jZWwgZXZlbnQgY29udGFpbmluZyB0aGUgaXRlbSBkYXRhIHRoYXQgd2FzIGJlaW5nIGVkaXRlZFxuICAgKi9cbiAgb25DYW5jZWwoZXZlbnQ6IENhbmNlbEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5jYW5jZWxFdmVudC5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIHNhdmUgb3BlcmF0aW9ucyB3aGVuIHVzZXJzIGNvbW1pdCBjaGFuZ2VzIGFmdGVyIGVkaXRpbmcgdHJlZS1saXN0IGl0ZW1zLlxuICAgKiBQcm9wYWdhdGVzIHRoZSBzYXZlIGV2ZW50IHRvIHBhcmVudCBjb21wb25lbnRzIGZvciB2YWxpZGF0aW9uLCBwZXJzaXN0ZW5jZSwgYW5kIGRhdGEgcmVmcmVzaC5cbiAgICogXG4gICAqIEBwYXJhbSBldmVudCAtIFRoZSBzYXZlIGV2ZW50IGNvbnRhaW5pbmcgdGhlIG1vZGlmaWVkIGl0ZW0gZGF0YSBhbmQgb3JpZ2luYWwgdmFsdWVzIGZvciBjb21wYXJpc29uXG4gICAqL1xuICBvblNhdmUoZXZlbnQ6IFNhdmVFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuc2F2ZS5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIGRlbGV0ZS9yZW1vdmFsIG9wZXJhdGlvbnMgd2hlbiB1c2VycyBjb25maXJtIGRlbGV0aW9uIG9mIHRyZWUtbGlzdCBpdGVtcy5cbiAgICogUHJvcGFnYXRlcyB0aGUgcmVtb3ZlIGV2ZW50IHRvIHBhcmVudCBjb21wb25lbnRzIGZvciBjb25maXJtYXRpb24gZGlhbG9ncyBhbmQgZGF0YSBkZWxldGlvbi5cbiAgICogXG4gICAqIEBwYXJhbSBldmVudCAtIFRoZSByZW1vdmUgZXZlbnQgY29udGFpbmluZyB0aGUgaXRlbSBkYXRhIHRvIGJlIGRlbGV0ZWQgYW5kIGhpZXJhcmNoaWNhbCBjb250ZXh0XG4gICAqL1xuICBvblJlbW92ZShldmVudDogUmVtb3ZlRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnJlbW92ZS5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIGluZGl2aWR1YWwgY2VsbCBjbGljayBldmVudHMgd2l0aGluIHRoZSB0cmVlLWxpc3QgZm9yIGN1c3RvbSBpbnRlcmFjdGlvbiBoYW5kbGluZy5cbiAgICogUHJvcGFnYXRlcyBjZWxsIGNsaWNrIGV2ZW50cyB0byBwYXJlbnQgY29tcG9uZW50cyBmb3IgY3VzdG9tIGFjdGlvbnMsIG5hdmlnYXRpb24sIG9yIGNlbGwtc3BlY2lmaWMgbG9naWMuXG4gICAqIFxuICAgKiBAcGFyYW0gZXZlbnQgLSBUaGUgY2VsbCBjbGljayBldmVudCBjb250YWluaW5nIGNlbGwgZGF0YSwgY29vcmRpbmF0ZXMsIGFuZCBjb2x1bW4gaW5mb3JtYXRpb25cbiAgICovXG4gIG9uQ2VsbENsaWNrKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmNlbGxDbGljay5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIGNlbGwgZWRpdG9yIGNsb3NlIGV2ZW50cyB3aGVuIHVzZXJzIGV4aXQgY2VsbCBlZGl0aW5nIG1vZGUuXG4gICAqIFByb3BhZ2F0ZXMgY2VsbCBjbG9zZSBldmVudHMgdG8gcGFyZW50IGNvbXBvbmVudHMgZm9yIGNsZWFudXAgYW5kIHN0YXRlIG1hbmFnZW1lbnQuXG4gICAqIFxuICAgKiBAcGFyYW0gZXZlbnQgLSBUaGUgY2VsbCBjbG9zZSBldmVudCBjb250YWluaW5nIGVkaXRvciBzdGF0ZSBhbmQgYW55IHBlbmRpbmcgY2hhbmdlc1xuICAgKi9cbiAgb25DZWxsQ2xvc2UoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuY2VsbENsb3NlLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgZWRpdCBidXR0b24gY2xpY2tzIGZyb20gY29tbWFuZCBjb2x1bW4gb3IgY3VzdG9tIHRlbXBsYXRlcyB0byBpbml0aWF0ZSBpdGVtIGVkaXRpbmcuXG4gICAqIENyZWF0ZXMgYW5kIGVtaXRzIGEgcHJvcGVybHkgZm9ybWF0dGVkIEVkaXRFdmVudCB0byBub3RpZnkgcGFyZW50IGNvbXBvbmVudHMgb2YgZWRpdCBpbnRlbnRpb24uXG4gICAqIFRoaXMgbWV0aG9kIGJyaWRnZXMgY3VzdG9tIFVJIGVsZW1lbnRzIHdpdGggdGhlIHN0YW5kYXJkIEtlbmRvIFRyZWVMaXN0IGVkaXRpbmcgd29ya2Zsb3cuXG4gICAqIFxuICAgKiBAcGFyYW0gZGF0YUl0ZW0gLSBUaGUgdHJlZS1saXN0IGl0ZW0gZGF0YSBvYmplY3QgdG8gYmUgZWRpdGVkXG4gICAqL1xuICBvbkVkaXRCdXR0b25DbGljayhkYXRhSXRlbTogYW55KTogdm9pZCB7XG4gICAgLy8gRW1pdCB0aGUgZWRpdCBldmVudCB0byBsZXQgcGFyZW50IGNvbXBvbmVudCBoYW5kbGUgdGhlIGVkaXRpbmcgbG9naWNcbiAgICB0aGlzLmVkaXQuZW1pdCh7IGRhdGFJdGVtIH0gYXMgRWRpdEV2ZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIHJlbW92ZSBidXR0b24gY2xpY2tzIGZyb20gY29tbWFuZCBjb2x1bW4gb3IgY3VzdG9tIHRlbXBsYXRlcyB0byBpbml0aWF0ZSBpdGVtIGRlbGV0aW9uLlxuICAgKiBDcmVhdGVzIGFuZCBlbWl0cyBhIHByb3Blcmx5IGZvcm1hdHRlZCBSZW1vdmVFdmVudCB0byBub3RpZnkgcGFyZW50IGNvbXBvbmVudHMgb2YgZGVsZXRpb24gcmVxdWVzdC5cbiAgICogVGhpcyBtZXRob2QgYnJpZGdlcyBjdXN0b20gVUkgZWxlbWVudHMgd2l0aCB0aGUgc3RhbmRhcmQgS2VuZG8gVHJlZUxpc3QgcmVtb3ZhbCB3b3JrZmxvdy5cbiAgICogXG4gICAqIEBwYXJhbSBkYXRhSXRlbSAtIFRoZSB0cmVlLWxpc3QgaXRlbSBkYXRhIG9iamVjdCB0byBiZSBkZWxldGVkXG4gICAqL1xuICBvblJlbW92ZUJ1dHRvbkNsaWNrKGRhdGFJdGVtOiBhbnkpOiB2b2lkIHtcbiAgICAvLyBFbWl0IHRoZSByZW1vdmUgZXZlbnQgdG8gbGV0IHBhcmVudCBjb21wb25lbnQgaGFuZGxlIHRoZSByZW1vdmFsIGxvZ2ljXG4gICAgdGhpcy5yZW1vdmUuZW1pdCh7IGRhdGFJdGVtIH0gYXMgUmVtb3ZlRXZlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZWx5IGV4cGFuZHMgYWxsIGNvbGxhcHNpYmxlIG5vZGVzIGluIHRoZSB0cmVlLWxpc3QgaGllcmFyY2h5LlxuICAgKiBJdGVyYXRlcyB0aHJvdWdoIGFsbCB0b3AtbGV2ZWwgZGF0YSBpdGVtcyBhbmQgdXNlcyB0aGUgS2VuZG8gVHJlZUxpc3QgQVBJIHRvIGV4cGFuZCBlYWNoIG5vZGUsXG4gICAqIHdoaWNoIHRyaWdnZXJzIGNhc2NhZGluZyBleHBhbnNpb24gb2YgYWxsIGNoaWxkIG5vZGVzLiBTYWZlbHkgaGFuZGxlcyBjYXNlcyB3aGVyZSB0aGVcbiAgICogVHJlZUxpc3QgZWxlbWVudCBpcyBub3QgeWV0IGluaXRpYWxpemVkLlxuICAgKi9cbiAgZXhwYW5kQWxsKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnRyZWVMaXN0RWxlbWVudCkge1xuICAgICAgLy8gVHJlZUxpc3QgZG9lc24ndCBoYXZlIGV4cGFuZEFsbCwgc28gd2UgaW1wbGVtZW50IGN1c3RvbSBsb2dpY1xuICAgICAgdGhpcy5kYXRhLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnRyZWVMaXN0RWxlbWVudCkge1xuICAgICAgICAgIHRoaXMudHJlZUxpc3RFbGVtZW50LmV4cGFuZChpdGVtKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZWx5IGNvbGxhcHNlcyBhbGwgZXhwYW5kYWJsZSBub2RlcyBpbiB0aGUgdHJlZS1saXN0IGhpZXJhcmNoeS5cbiAgICogSXRlcmF0ZXMgdGhyb3VnaCBhbGwgdG9wLWxldmVsIGRhdGEgaXRlbXMgYW5kIHVzZXMgdGhlIEtlbmRvIFRyZWVMaXN0IEFQSSB0byBjb2xsYXBzZSBlYWNoIG5vZGUsXG4gICAqIHdoaWNoIHRyaWdnZXJzIGNhc2NhZGluZyBjb2xsYXBzZSBvZiBhbGwgY2hpbGQgbm9kZXMuIFNhZmVseSBoYW5kbGVzIGNhc2VzIHdoZXJlIHRoZVxuICAgKiBUcmVlTGlzdCBlbGVtZW50IGlzIG5vdCB5ZXQgaW5pdGlhbGl6ZWQuXG4gICAqL1xuICBjb2xsYXBzZUFsbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy50cmVlTGlzdEVsZW1lbnQpIHtcbiAgICAgIC8vIFRyZWVMaXN0IGRvZXNuJ3QgaGF2ZSBjb2xsYXBzZUFsbCwgc28gd2UgaW1wbGVtZW50IGN1c3RvbSBsb2dpY1xuICAgICAgdGhpcy5kYXRhLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnRyZWVMaXN0RWxlbWVudCkge1xuICAgICAgICAgIHRoaXMudHJlZUxpc3RFbGVtZW50LmNvbGxhcHNlKGl0ZW0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUHJvdmlkZXMgYSB0cmFja2luZyBmdW5jdGlvbiBmb3IgQW5ndWxhcidzIG5nRm9yIG9wdGltaXphdGlvbiB3aGVuIHJlbmRlcmluZyBjb2x1bW4gZGVmaW5pdGlvbnMuXG4gICAqIFJldHVybnMgYSB1bmlxdWUgaWRlbnRpZmllciBmb3IgZWFjaCBjb2x1bW4gdG8gaGVscCBBbmd1bGFyIGVmZmljaWVudGx5IHRyYWNrIGFuZCB1cGRhdGVcbiAgICogY29sdW1uIGVsZW1lbnRzIGR1cmluZyByZS1yZW5kZXJpbmcuIEZhbGxzIGJhY2sgdG8gYXJyYXkgaW5kZXggaWYgbm8gZmllbGQgcHJvcGVydHkgZXhpc3RzLlxuICAgKiBcbiAgICogQHBhcmFtIGluZGV4IC0gVGhlIGFycmF5IGluZGV4IG9mIHRoZSBjb2x1bW4gaW4gdGhlIGNvbHVtbnMgY29sbGVjdGlvblxuICAgKiBAcGFyYW0gY29sdW1uIC0gVGhlIGNvbHVtbiBjb25maWd1cmF0aW9uIG9iamVjdCBjb250YWluaW5nIGZpZWxkIGFuZCBvdGhlciBwcm9wZXJ0aWVzXG4gICAqIEByZXR1cm5zIEEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBjb2x1bW4gKGZpZWxkIG5hbWUgb3IgYXJyYXkgaW5kZXgpXG4gICAqL1xuICB0cmFja0J5Q29sdW1uKGluZGV4OiBudW1iZXIsIGNvbHVtbjogVHJlZUxpc3RDb2x1bW4pOiBhbnkge1xuICAgIHJldHVybiBjb2x1bW4uZmllbGQgfHwgaW5kZXg7XG4gIH1cbn1cbiIsIjxkaXYgW2NsYXNzXT1cImdldFRyZWVMaXN0Q2xhc3NlcygpXCI+XG4gIDwhLS0gRW5oYW5jZWQgVHJlZUxpc3Qgd2l0aCBIaWVyYXJjaHkgQmluZGluZyAtLT5cbiAgPGtlbmRvLXRyZWVsaXN0ICpuZ0lmPVwiYmluZGluZ1R5cGUgPT09ICdoaWVyYXJjaHknXCIgW2tlbmRvVHJlZUxpc3RIaWVyYXJjaHlCaW5kaW5nXT1cImRhdGFcIlxuICAgIFtjaGlsZHJlbkZpZWxkXT1cImNoaWxkcmVuRmllbGRcIiBbaWRGaWVsZF09XCJpZEZpZWxkXCIgY2xhc3M9XCJsaWItdHJlZS1saXN0X19rZW5kby10cmVlbGlzdFwiIFtzZWxlY3RhYmxlXT1cInNlbGVjdGFibGVcIlxuICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiIFtzb3J0YWJsZV09XCJzb3J0YWJsZVwiIFtzb3J0XT1cInNvcnRcIlxuICAgIChzb3J0Q2hhbmdlKT1cIm9uU29ydENoYW5nZSgkZXZlbnQpXCIgW2ZpbHRlcmFibGVdPVwiZmlsdGVyYWJsZVwiIChmaWx0ZXJDaGFuZ2UpPVwib25GaWx0ZXJDaGFuZ2UoJGV2ZW50KVwiXG4gICAgW3BhZ2VhYmxlXT1cInBhZ2VhYmxlXCIgW3BhZ2VTaXplXT1cInBhZ2VTaXplXCIgKHBhZ2VDaGFuZ2UpPVwib25QYWdlQ2hhbmdlKCRldmVudClcIiBbcmVzaXphYmxlXT1cInJlc2l6YWJsZVwiXG4gICAgW3Jlb3JkZXJhYmxlXT1cInJlb3JkZXJhYmxlXCIgW2hlaWdodF09XCJoZWlnaHRcIiBbc2Nyb2xsYWJsZV09XCJzY3JvbGxhYmxlXCIgW25hdmlnYWJsZV09XCJlZGl0YWJsZVwiXG4gICAgKGV4cGFuZCk9XCJvbkV4cGFuZCgkZXZlbnQpXCIgKGNvbGxhcHNlKT1cIm9uQ29sbGFwc2UoJGV2ZW50KVwiIChjZWxsQ2xpY2spPVwib25DZWxsQ2xpY2soJGV2ZW50KVwiXG4gICAgKGNlbGxDbG9zZSk9XCJvbkNlbGxDbG9zZSgkZXZlbnQpXCIgKGFkZCk9XCJvbkFkZCgkZXZlbnQpXCIgKGVkaXQpPVwib25FZGl0KCRldmVudClcIiAoY2FuY2VsKT1cIm9uQ2FuY2VsKCRldmVudClcIlxuICAgIChzYXZlKT1cIm9uU2F2ZSgkZXZlbnQpXCIgKHJlbW92ZSk9XCJvblJlbW92ZSgkZXZlbnQpXCIga2VuZG9UcmVlTGlzdEV4cGFuZGFibGUgW2luaXRpYWxseUV4cGFuZGVkXT1cInRydWVcIlxuICAgIGtlbmRvVHJlZUxpc3RTZWxlY3RhYmxlPlxuXG4gICAgPCEtLSBEeW5hbWljIGNvbHVtbnMgd2l0aCB0ZW1wbGF0ZXMgLS0+XG4gICAgPGtlbmRvLXRyZWVsaXN0LWNvbHVtbiAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbHVtbnM7IHRyYWNrQnk6IHRyYWNrQnlDb2x1bW47IGxldCBpID0gaW5kZXhcIiBbZmllbGRdPVwiY29sdW1uLmZpZWxkXCJcbiAgICAgIFt0aXRsZV09XCJjb2x1bW4udGl0bGUgfHwgY29sdW1uLmZpZWxkXCIgW3dpZHRoXT1cImNvbHVtbi53aWR0aFwiIFtsb2NrZWRdPVwiY29sdW1uLmxvY2tlZFwiIFtoaWRkZW5dPVwiY29sdW1uLmhpZGRlblwiXG4gICAgICBbc29ydGFibGVdPVwiY29sdW1uLnNvcnRhYmxlICE9PSB1bmRlZmluZWQgPyBjb2x1bW4uc29ydGFibGUgOiBzb3J0YWJsZVwiXG4gICAgICBbZmlsdGVyYWJsZV09XCJjb2x1bW4uZmlsdGVyYWJsZSAhPT0gdW5kZWZpbmVkID8gY29sdW1uLmZpbHRlcmFibGUgOiBmaWx0ZXJhYmxlXCJcbiAgICAgIFtlZGl0YWJsZV09XCJjb2x1bW4uZWRpdGFibGUgIT09IHVuZGVmaW5lZCA/IGNvbHVtbi5lZGl0YWJsZSA6IGVkaXRhYmxlXCIgW2Zvcm1hdF09XCJjb2x1bW4uZm9ybWF0XCJcbiAgICAgIFtleHBhbmRhYmxlXT1cImkgPT09IDBcIj5cblxuICAgICAgPCEtLSBDdXN0b20gY2VsbCB0ZW1wbGF0ZSAtLT5cbiAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cImNvbHVtbi50ZW1wbGF0ZVwiIGtlbmRvVHJlZUxpc3RDZWxsVGVtcGxhdGUgbGV0LWRhdGFJdGVtPVwiZGF0YUl0ZW1cIiBsZXQtcm93SW5kZXg9XCJyb3dJbmRleFwiXG4gICAgICAgIGxldC1jb2x1bW5JbmRleD1cImNvbHVtbkluZGV4XCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29sdW1uLnRlbXBsYXRlXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgXG4gICAgICAgICAgICAkaW1wbGljaXQ6IGRhdGFJdGVtLCBcbiAgICAgICAgICAgIGRhdGFJdGVtOiBkYXRhSXRlbSwgXG4gICAgICAgICAgICByb3dJbmRleDogcm93SW5kZXgsIFxuICAgICAgICAgICAgY29sdW1uSW5kZXg6IGNvbHVtbkluZGV4LFxuICAgICAgICAgICAgZmllbGQ6IGNvbHVtbi5maWVsZCxcbiAgICAgICAgICAgIHZhbHVlOiBkYXRhSXRlbVtjb2x1bW4uZmllbGRdXG4gICAgICAgICAgfVwiPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgIDwhLS0gQ3VzdG9tIGhlYWRlciB0ZW1wbGF0ZSAtLT5cbiAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cImNvbHVtbi5oZWFkZXJUZW1wbGF0ZVwiIGtlbmRvVHJlZUxpc3RIZWFkZXJUZW1wbGF0ZT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJjb2x1bW4uaGVhZGVyVGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBjb2x1bW46IGNvbHVtbiB9XCI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgPCEtLSBDdXN0b20gZm9vdGVyIHRlbXBsYXRlIC0tPlxuICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwiY29sdW1uLmZvb3RlclRlbXBsYXRlXCIga2VuZG9UcmVlTGlzdEZvb3RlclRlbXBsYXRlPlxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbHVtbi5mb290ZXJUZW1wbGF0ZVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGNvbHVtbjogY29sdW1uIH1cIj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICA8IS0tIEVkaXQgdGVtcGxhdGUgZm9yIGlubGluZSBlZGl0aW5nIC0tPlxuICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwiZWRpdGFibGUgJiYgY29sdW1uLmVkaXRUZW1wbGF0ZVwiIGtlbmRvVHJlZUxpc3RFZGl0VGVtcGxhdGUgbGV0LWRhdGFJdGVtPVwiZGF0YUl0ZW1cIlxuICAgICAgICBsZXQtZm9ybUdyb3VwPVwiZm9ybUdyb3VwXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29sdW1uLmVkaXRUZW1wbGF0ZVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IFxuICAgICAgICAgICAgZGF0YUl0ZW06IGRhdGFJdGVtLCBcbiAgICAgICAgICAgIGZvcm1Hcm91cDogZm9ybUdyb3VwLFxuICAgICAgICAgICAgZmllbGQ6IGNvbHVtbi5maWVsZFxuICAgICAgICAgIH1cIj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwva2VuZG8tdHJlZWxpc3QtY29sdW1uPlxuXG4gICAgPCEtLSBDb21tYW5kIGNvbHVtbiBmb3IgZWRpdGluZyBhY3Rpb25zIC0tPlxuICAgIDxrZW5kby10cmVlbGlzdC1jb21tYW5kLWNvbHVtbiAqbmdJZj1cImVkaXRhYmxlXCIgdGl0bGU9XCJBY3Rpb25zXCIgd2lkdGg9XCIxNTBcIiBbbG9ja2VkXT1cImZhbHNlXCI+XG4gICAgICA8bmctdGVtcGxhdGUga2VuZG9UcmVlTGlzdENlbGxUZW1wbGF0ZSBsZXQtaXNOZXc9XCJpc05ld1wiIGxldC1kYXRhSXRlbT1cImRhdGFJdGVtXCIgbGV0LWNlbGxDb250ZXh0PVwiY2VsbENvbnRleHRcIj5cbiAgICAgICAgPGxpYi1idXR0b24gKm5nSWY9XCIhaXNOZXdcIiBsYWJlbD1cIlwiIGljb25OYW1lPVwiZWRpdFwiIHNpemU9XCJtZWRpdW1cIiBmaWxsTW9kZT1cImZsYXRcIiB0aGVtZUNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgW2ljb25CdXR0b25dPVwidHJ1ZVwiIChidXR0b25DbGljayk9XCJvbkVkaXRCdXR0b25DbGljayhkYXRhSXRlbSlcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidFZGl0ICcgKyBkYXRhSXRlbS5uYW1lXCI+XG4gICAgICAgIDwvbGliLWJ1dHRvbj5cbiAgICAgICAgPGxpYi1idXR0b24gKm5nSWY9XCIhaXNOZXdcIiBsYWJlbD1cIlwiIGljb25OYW1lPVwiZGVsZXRlXCIgc2l6ZT1cIm1lZGl1bVwiIGZpbGxNb2RlPVwiZmxhdFwiIHRoZW1lQ29sb3I9XCJlcnJvclwiXG4gICAgICAgICAgW2ljb25CdXR0b25dPVwidHJ1ZVwiIChidXR0b25DbGljayk9XCJvblJlbW92ZUJ1dHRvbkNsaWNrKGRhdGFJdGVtKVwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInRGVsZXRlICcgKyBkYXRhSXRlbS5uYW1lXCI+XG4gICAgICAgIDwvbGliLWJ1dHRvbj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9rZW5kby10cmVlbGlzdC1jb21tYW5kLWNvbHVtbj5cbiAgPC9rZW5kby10cmVlbGlzdD5cblxuICA8IS0tIEVuaGFuY2VkIFRyZWVMaXN0IHdpdGggRmxhdCBCaW5kaW5nIC0tPlxuICA8a2VuZG8tdHJlZWxpc3QgKm5nSWY9XCJiaW5kaW5nVHlwZSA9PT0gJ2ZsYXQnXCIgW2tlbmRvVHJlZUxpc3RGbGF0QmluZGluZ109XCJkYXRhXCIgW3BhcmVudElkRmllbGRdPVwicGFyZW50SWRGaWVsZFwiXG4gICAgW2lkRmllbGRdPVwiaWRGaWVsZFwiIGNsYXNzPVwibGliLXRyZWUtbGlzdF9fa2VuZG8tdHJlZWxpc3RcIiBbc2VsZWN0YWJsZV09XCJzZWxlY3RhYmxlXCJcbiAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIiBbc29ydGFibGVdPVwic29ydGFibGVcIiBbc29ydF09XCJzb3J0XCJcbiAgICAoc29ydENoYW5nZSk9XCJvblNvcnRDaGFuZ2UoJGV2ZW50KVwiIFtmaWx0ZXJhYmxlXT1cImZpbHRlcmFibGVcIiAoZmlsdGVyQ2hhbmdlKT1cIm9uRmlsdGVyQ2hhbmdlKCRldmVudClcIlxuICAgIFtwYWdlYWJsZV09XCJwYWdlYWJsZVwiIFtwYWdlU2l6ZV09XCJwYWdlU2l6ZVwiIChwYWdlQ2hhbmdlKT1cIm9uUGFnZUNoYW5nZSgkZXZlbnQpXCIgW3Jlc2l6YWJsZV09XCJyZXNpemFibGVcIlxuICAgIFtyZW9yZGVyYWJsZV09XCJyZW9yZGVyYWJsZVwiIFtoZWlnaHRdPVwiaGVpZ2h0XCIgW3Njcm9sbGFibGVdPVwic2Nyb2xsYWJsZVwiIFtuYXZpZ2FibGVdPVwiZWRpdGFibGVcIlxuICAgIChleHBhbmQpPVwib25FeHBhbmQoJGV2ZW50KVwiIChjb2xsYXBzZSk9XCJvbkNvbGxhcHNlKCRldmVudClcIiAoY2VsbENsaWNrKT1cIm9uQ2VsbENsaWNrKCRldmVudClcIlxuICAgIChjZWxsQ2xvc2UpPVwib25DZWxsQ2xvc2UoJGV2ZW50KVwiIChhZGQpPVwib25BZGQoJGV2ZW50KVwiIChlZGl0KT1cIm9uRWRpdCgkZXZlbnQpXCIgKGNhbmNlbCk9XCJvbkNhbmNlbCgkZXZlbnQpXCJcbiAgICAoc2F2ZSk9XCJvblNhdmUoJGV2ZW50KVwiIChyZW1vdmUpPVwib25SZW1vdmUoJGV2ZW50KVwiPlxuXG4gICAgPCEtLSBEeW5hbWljIGNvbHVtbnMgd2l0aCB0ZW1wbGF0ZXMgZm9yIGZsYXQgYmluZGluZyAtLT5cbiAgICA8a2VuZG8tdHJlZWxpc3QtY29sdW1uICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sdW1uczsgdHJhY2tCeTogdHJhY2tCeUNvbHVtbjsgbGV0IGkgPSBpbmRleFwiIFtmaWVsZF09XCJjb2x1bW4uZmllbGRcIlxuICAgICAgW3RpdGxlXT1cImNvbHVtbi50aXRsZSB8fCBjb2x1bW4uZmllbGRcIiBbd2lkdGhdPVwiY29sdW1uLndpZHRoXCIgW2xvY2tlZF09XCJjb2x1bW4ubG9ja2VkXCIgW2hpZGRlbl09XCJjb2x1bW4uaGlkZGVuXCJcbiAgICAgIFtzb3J0YWJsZV09XCJjb2x1bW4uc29ydGFibGUgIT09IHVuZGVmaW5lZCA/IGNvbHVtbi5zb3J0YWJsZSA6IHNvcnRhYmxlXCJcbiAgICAgIFtmaWx0ZXJhYmxlXT1cImNvbHVtbi5maWx0ZXJhYmxlICE9PSB1bmRlZmluZWQgPyBjb2x1bW4uZmlsdGVyYWJsZSA6IGZpbHRlcmFibGVcIlxuICAgICAgW2VkaXRhYmxlXT1cImNvbHVtbi5lZGl0YWJsZSAhPT0gdW5kZWZpbmVkID8gY29sdW1uLmVkaXRhYmxlIDogZWRpdGFibGVcIiBbZm9ybWF0XT1cImNvbHVtbi5mb3JtYXRcIlxuICAgICAgW2V4cGFuZGFibGVdPVwiaSA9PT0gMFwiPlxuXG4gICAgICA8IS0tIEN1c3RvbSBjZWxsIHRlbXBsYXRlIC0tPlxuICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwiY29sdW1uLnRlbXBsYXRlXCIga2VuZG9UcmVlTGlzdENlbGxUZW1wbGF0ZSBsZXQtZGF0YUl0ZW09XCJkYXRhSXRlbVwiIGxldC1yb3dJbmRleD1cInJvd0luZGV4XCJcbiAgICAgICAgbGV0LWNvbHVtbkluZGV4PVwiY29sdW1uSW5kZXhcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJjb2x1bW4udGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBcbiAgICAgICAgICAgICRpbXBsaWNpdDogZGF0YUl0ZW0sIFxuICAgICAgICAgICAgZGF0YUl0ZW06IGRhdGFJdGVtLCBcbiAgICAgICAgICAgIHJvd0luZGV4OiByb3dJbmRleCwgXG4gICAgICAgICAgICBjb2x1bW5JbmRleDogY29sdW1uSW5kZXgsXG4gICAgICAgICAgICBmaWVsZDogY29sdW1uLmZpZWxkLFxuICAgICAgICAgICAgdmFsdWU6IGRhdGFJdGVtW2NvbHVtbi5maWVsZF1cbiAgICAgICAgICB9XCI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgPCEtLSBDdXN0b20gaGVhZGVyIHRlbXBsYXRlIC0tPlxuICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwiY29sdW1uLmhlYWRlclRlbXBsYXRlXCIga2VuZG9UcmVlTGlzdEhlYWRlclRlbXBsYXRlPlxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbHVtbi5oZWFkZXJUZW1wbGF0ZVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGNvbHVtbjogY29sdW1uIH1cIj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICA8IS0tIEN1c3RvbSBmb290ZXIgdGVtcGxhdGUgLS0+XG4gICAgICA8bmctdGVtcGxhdGUgKm5nSWY9XCJjb2x1bW4uZm9vdGVyVGVtcGxhdGVcIiBrZW5kb1RyZWVMaXN0Rm9vdGVyVGVtcGxhdGU+XG4gICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29sdW1uLmZvb3RlclRlbXBsYXRlXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgY29sdW1uOiBjb2x1bW4gfVwiPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgIDwhLS0gRWRpdCB0ZW1wbGF0ZSBmb3IgaW5saW5lIGVkaXRpbmcgLS0+XG4gICAgICA8bmctdGVtcGxhdGUgKm5nSWY9XCJlZGl0YWJsZSAmJiBjb2x1bW4uZWRpdFRlbXBsYXRlXCIga2VuZG9UcmVlTGlzdEVkaXRUZW1wbGF0ZSBsZXQtZGF0YUl0ZW09XCJkYXRhSXRlbVwiXG4gICAgICAgIGxldC1mb3JtR3JvdXA9XCJmb3JtR3JvdXBcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJjb2x1bW4uZWRpdFRlbXBsYXRlXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgXG4gICAgICAgICAgICBkYXRhSXRlbTogZGF0YUl0ZW0sIFxuICAgICAgICAgICAgZm9ybUdyb3VwOiBmb3JtR3JvdXAsXG4gICAgICAgICAgICBmaWVsZDogY29sdW1uLmZpZWxkXG4gICAgICAgICAgfVwiPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9rZW5kby10cmVlbGlzdC1jb2x1bW4+XG5cbiAgICA8IS0tIENvbW1hbmQgY29sdW1uIGZvciBlZGl0aW5nIGFjdGlvbnMgLS0+XG4gICAgPGtlbmRvLXRyZWVsaXN0LWNvbW1hbmQtY29sdW1uICpuZ0lmPVwiZWRpdGFibGVcIiB0aXRsZT1cIkFjdGlvbnNcIiB3aWR0aD1cIjE1MFwiIFtsb2NrZWRdPVwiZmFsc2VcIj5cbiAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb1RyZWVMaXN0Q2VsbFRlbXBsYXRlIGxldC1pc05ldz1cImlzTmV3XCIgbGV0LWRhdGFJdGVtPVwiZGF0YUl0ZW1cIj5cbiAgICAgICAgPGxpYi1idXR0b24gKm5nSWY9XCIhaXNOZXdcIiBsYWJlbD1cIlwiIGljb25OYW1lPVwiZWRpdFwiIHNpemU9XCJtZWRpdW1cIiBmaWxsTW9kZT1cImZsYXRcIiB0aGVtZUNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgW2ljb25CdXR0b25dPVwidHJ1ZVwiIChidXR0b25DbGljayk9XCJvbkVkaXRCdXR0b25DbGljayhkYXRhSXRlbSlcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidFZGl0ICcgKyBkYXRhSXRlbS5uYW1lXCI+XG4gICAgICAgIDwvbGliLWJ1dHRvbj5cbiAgICAgICAgPGxpYi1idXR0b24gKm5nSWY9XCIhaXNOZXdcIiBsYWJlbD1cIlwiIGljb25OYW1lPVwiZGVsZXRlXCIgc2l6ZT1cIm1lZGl1bVwiIGZpbGxNb2RlPVwiZmxhdFwiIHRoZW1lQ29sb3I9XCJlcnJvclwiXG4gICAgICAgICAgW2ljb25CdXR0b25dPVwidHJ1ZVwiIChidXR0b25DbGljayk9XCJvblJlbW92ZUJ1dHRvbkNsaWNrKGRhdGFJdGVtKVwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInRGVsZXRlICcgKyBkYXRhSXRlbS5uYW1lXCI+XG4gICAgICAgIDwvbGliLWJ1dHRvbj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9rZW5kby10cmVlbGlzdC1jb21tYW5kLWNvbHVtbj5cbiAgPC9rZW5kby10cmVlbGlzdD5cblxuICA8IS0tIExvYWRpbmcgaW5kaWNhdG9yIC0tPlxuICA8ZGl2ICpuZ0lmPVwibG9hZGluZ1wiIGNsYXNzPVwibGliLXRyZWUtbGlzdF9fbG9hZGluZ1wiPlxuICAgIDxsaWItbG9hZGVyIHNpemU9XCJtZWRpdW1cIiB0eXBlPVwicHVsc2luZ1wiIHRoZW1lQ29sb3I9XCJwcmltYXJ5XCI+PC9saWItbG9hZGVyPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1saXN0LmludGVyZmFjZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaGFyZWQvc3JjL2xpYi9hdG9tcy90cmVlLWxpc3QvdHJlZS1saXN0LmludGVyZmFjZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVHJlZUxpc3Qgbm9kZSBpbnRlcmZhY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUcmVlTGlzdE5vZGUge1xuICBba2V5OiBzdHJpbmddOiBhbnk7XG4gIGlkPzogYW55O1xuICBwYXJlbnRJZD86IGFueTtcbiAgZXhwYW5kZWQ/OiBib29sZWFuO1xuICBoYXNDaGlsZHJlbj86IGJvb2xlYW47XG4gIGNoaWxkcmVuPzogVHJlZUxpc3ROb2RlW107XG59XG5cbi8qKlxuICogQ29sdW1uIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHJlZUxpc3RDb2x1bW4ge1xuICBmaWVsZDogc3RyaW5nO1xuICB0aXRsZT86IHN0cmluZztcbiAgd2lkdGg/OiBudW1iZXIgfCBzdHJpbmc7XG4gIG1pbldpZHRoPzogbnVtYmVyO1xuICBtYXhXaWR0aD86IG51bWJlcjtcbiAgbG9ja2VkPzogYm9vbGVhbjtcbiAgaGlkZGVuPzogYm9vbGVhbjtcbiAgc29ydGFibGU/OiBib29sZWFuO1xuICBmaWx0ZXJhYmxlPzogYm9vbGVhbjtcbiAgZWRpdGFibGU/OiBib29sZWFuO1xuICBmb3JtYXQ/OiBzdHJpbmc7XG4gIHRlbXBsYXRlPzogYW55O1xuICBoZWFkZXJUZW1wbGF0ZT86IGFueTtcbiAgZm9vdGVyVGVtcGxhdGU/OiBhbnk7XG4gIFtrZXk6IHN0cmluZ106IGFueTtcbn1cbiJdfQ==
@@ -0,0 +1,44 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { TreeListComponent } from './tree-list.component';
4
+ import { TreeListModule as KendoTreeListModule } from '@progress/kendo-angular-treelist';
5
+ import { IconsModule } from '@progress/kendo-angular-icons';
6
+ import { ButtonModule } from '../button/button.module';
7
+ import { IconModule } from '../icon/icon.module';
8
+ import { LoaderModule } from '../loader/loader.module';
9
+ import * as i0 from "@angular/core";
10
+ export class TreeListModule {
11
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: TreeListModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
12
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.17", ngImport: i0, type: TreeListModule, imports: [TreeListComponent,
13
+ CommonModule,
14
+ KendoTreeListModule,
15
+ IconsModule,
16
+ ButtonModule,
17
+ IconModule,
18
+ LoaderModule], exports: [TreeListComponent] }); }
19
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: TreeListModule, imports: [TreeListComponent,
20
+ CommonModule,
21
+ KendoTreeListModule,
22
+ IconsModule,
23
+ ButtonModule,
24
+ IconModule,
25
+ LoaderModule] }); }
26
+ }
27
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: TreeListModule, decorators: [{
28
+ type: NgModule,
29
+ args: [{
30
+ imports: [
31
+ TreeListComponent,
32
+ CommonModule,
33
+ KendoTreeListModule,
34
+ IconsModule,
35
+ ButtonModule,
36
+ IconModule,
37
+ LoaderModule
38
+ ],
39
+ exports: [
40
+ TreeListComponent
41
+ ]
42
+ }]
43
+ }] });
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1saXN0Lm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NoYXJlZC9zcmMvbGliL2F0b21zL3RyZWUtbGlzdC90cmVlLWxpc3QubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzFELE9BQU8sRUFBRSxjQUFjLElBQUksbUJBQW1CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN6RixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7O0FBZ0J2RCxNQUFNLE9BQU8sY0FBYzsrR0FBZCxjQUFjO2dIQUFkLGNBQWMsWUFadkIsaUJBQWlCO1lBQ2pCLFlBQVk7WUFDWixtQkFBbUI7WUFDbkIsV0FBVztZQUNYLFlBQVk7WUFDWixVQUFVO1lBQ1YsWUFBWSxhQUdaLGlCQUFpQjtnSEFHUixjQUFjLFlBWnZCLGlCQUFpQjtZQUNqQixZQUFZO1lBQ1osbUJBQW1CO1lBQ25CLFdBQVc7WUFDWCxZQUFZO1lBQ1osVUFBVTtZQUNWLFlBQVk7OzRGQU1ILGNBQWM7a0JBZDFCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFO3dCQUNQLGlCQUFpQjt3QkFDakIsWUFBWTt3QkFDWixtQkFBbUI7d0JBQ25CLFdBQVc7d0JBQ1gsWUFBWTt3QkFDWixVQUFVO3dCQUNWLFlBQVk7cUJBQ2I7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLGlCQUFpQjtxQkFDbEI7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFRyZWVMaXN0Q29tcG9uZW50IH0gZnJvbSAnLi90cmVlLWxpc3QuY29tcG9uZW50JztcbmltcG9ydCB7IFRyZWVMaXN0TW9kdWxlIGFzIEtlbmRvVHJlZUxpc3RNb2R1bGUgfSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci10cmVlbGlzdCc7XG5pbXBvcnQgeyBJY29uc01vZHVsZSB9IGZyb20gJ0Bwcm9ncmVzcy9rZW5kby1hbmd1bGFyLWljb25zJztcbmltcG9ydCB7IEJ1dHRvbk1vZHVsZSB9IGZyb20gJy4uL2J1dHRvbi9idXR0b24ubW9kdWxlJztcbmltcG9ydCB7IEljb25Nb2R1bGUgfSBmcm9tICcuLi9pY29uL2ljb24ubW9kdWxlJztcbmltcG9ydCB7IExvYWRlck1vZHVsZSB9IGZyb20gJy4uL2xvYWRlci9sb2FkZXIubW9kdWxlJztcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW1xuICAgIFRyZWVMaXN0Q29tcG9uZW50LFxuICAgIENvbW1vbk1vZHVsZSxcbiAgICBLZW5kb1RyZWVMaXN0TW9kdWxlLFxuICAgIEljb25zTW9kdWxlLFxuICAgIEJ1dHRvbk1vZHVsZSxcbiAgICBJY29uTW9kdWxlLFxuICAgIExvYWRlck1vZHVsZVxuICBdLFxuICBleHBvcnRzOiBbXG4gICAgVHJlZUxpc3RDb21wb25lbnRcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBUcmVlTGlzdE1vZHVsZSB7IH1cbiJdfQ==