@progress-chef/platform-shared-components 0.0.154 → 0.0.156-rc.1

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 (135) 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/alert/alert.component.mjs +3 -3
  7. package/esm2022/lib/atoms/alert/alert.module.mjs +4 -4
  8. package/esm2022/lib/atoms/angular-popup/angular-popup.component.mjs +3 -3
  9. package/esm2022/lib/atoms/angular-popup/angular-popup.module.mjs +4 -4
  10. package/esm2022/lib/atoms/atoms.module.mjs +19 -5
  11. package/esm2022/lib/atoms/avatar/avatar.component.mjs +3 -3
  12. package/esm2022/lib/atoms/avatar/avatar.module.mjs +4 -4
  13. package/esm2022/lib/atoms/breadcrumb/breadcrumb.component.mjs +3 -3
  14. package/esm2022/lib/atoms/breadcrumb/breadcrumb.module.mjs +4 -4
  15. package/esm2022/lib/atoms/button/button.component.mjs +3 -3
  16. package/esm2022/lib/atoms/button/button.module.mjs +4 -4
  17. package/esm2022/lib/atoms/button-group/button-group.component.mjs +3 -3
  18. package/esm2022/lib/atoms/button-group/button-group.module.mjs +4 -4
  19. package/esm2022/lib/atoms/checkbox/checkbox.component.mjs +3 -3
  20. package/esm2022/lib/atoms/checkbox/checkbox.module.mjs +4 -4
  21. package/esm2022/lib/atoms/chip/chip.component.mjs +3 -3
  22. package/esm2022/lib/atoms/chip/chip.module.mjs +4 -4
  23. package/esm2022/lib/atoms/chip-list/chip-list.component.mjs +3 -3
  24. package/esm2022/lib/atoms/chip-list/chip-list.module.mjs +4 -4
  25. package/esm2022/lib/atoms/clipboard/clipboard.component.mjs +3 -3
  26. package/esm2022/lib/atoms/clipboard/clipboard.module.mjs +4 -4
  27. package/esm2022/lib/atoms/container/container.component.mjs +3 -3
  28. package/esm2022/lib/atoms/container/container.module.mjs +4 -4
  29. package/esm2022/lib/atoms/date-range/date-range.component.mjs +3 -3
  30. package/esm2022/lib/atoms/date-range/date-range.module.mjs +4 -4
  31. package/esm2022/lib/atoms/datepicker/datepicker.component.mjs +3 -3
  32. package/esm2022/lib/atoms/datepicker/datepicker.module.mjs +4 -4
  33. package/esm2022/lib/atoms/drag-and-drop/drag-and-drop.component.mjs +33 -5
  34. package/esm2022/lib/atoms/drag-and-drop/drag-and-drop.module.mjs +4 -4
  35. package/esm2022/lib/atoms/dropdown/dropdown.component.mjs +3 -3
  36. package/esm2022/lib/atoms/dropdown/dropdown.module.mjs +4 -4
  37. package/esm2022/lib/atoms/dropdown-button/dropdown-button.component.mjs +3 -3
  38. package/esm2022/lib/atoms/dropdown-button/dropdown-button.module.mjs +4 -4
  39. package/esm2022/lib/atoms/dropdown-tree/dropdowntree.component.mjs +3 -3
  40. package/esm2022/lib/atoms/dropdown-tree/dropdowntree.module.mjs +4 -4
  41. package/esm2022/lib/atoms/expansion-panel/expansion-panel.component.mjs +3 -3
  42. package/esm2022/lib/atoms/expansion-panel/expansion-panel.module.mjs +4 -4
  43. package/esm2022/lib/atoms/icon/icon.component.mjs +4 -4
  44. package/esm2022/lib/atoms/icon/icon.module.mjs +4 -4
  45. package/esm2022/lib/atoms/labels/label.component.mjs +3 -3
  46. package/esm2022/lib/atoms/labels/label.module.mjs +4 -4
  47. package/esm2022/lib/atoms/list-views/list-view.component.mjs +3 -3
  48. package/esm2022/lib/atoms/list-views/list-view.module.mjs +4 -4
  49. package/esm2022/lib/atoms/loader/loader.component.mjs +3 -3
  50. package/esm2022/lib/atoms/loader/loader.module.mjs +4 -4
  51. package/esm2022/lib/atoms/loading-spinner/loading-spinner.component.mjs +3 -3
  52. package/esm2022/lib/atoms/loading-spinner/loading-spinner.module.mjs +4 -4
  53. package/esm2022/lib/atoms/markdown-display/markdown-display.component.mjs +39 -0
  54. package/esm2022/lib/atoms/markdown-display/markdown-display.module.mjs +26 -0
  55. package/esm2022/lib/atoms/markdown-display/markdown-display.service.mjs +53 -0
  56. package/esm2022/lib/atoms/multi-select-dropdown/multi-select-dropdown.component.mjs +3 -3
  57. package/esm2022/lib/atoms/multi-select-dropdown/multi-select-dropdown.module.mjs +4 -4
  58. package/esm2022/lib/atoms/notification/notification.component.mjs +3 -3
  59. package/esm2022/lib/atoms/notification/notification.module.mjs +4 -4
  60. package/esm2022/lib/atoms/numeric-textbox/numeric-textbox.component.mjs +3 -3
  61. package/esm2022/lib/atoms/numeric-textbox/numeric-textbox.module.mjs +4 -4
  62. package/esm2022/lib/atoms/progress-bar/progress-bar.component.mjs +3 -3
  63. package/esm2022/lib/atoms/progress-bar/progress-bar.module.mjs +4 -4
  64. package/esm2022/lib/atoms/radio-button/radio-button.component.mjs +3 -3
  65. package/esm2022/lib/atoms/radio-button/radio-button.module.mjs +4 -4
  66. package/esm2022/lib/atoms/search-box/search-box.component.mjs +3 -3
  67. package/esm2022/lib/atoms/search-box/search-box.module.mjs +4 -4
  68. package/esm2022/lib/atoms/slider/slider.component.mjs +3 -3
  69. package/esm2022/lib/atoms/slider/slider.module.mjs +4 -4
  70. package/esm2022/lib/atoms/stepper/stepper.component.mjs +3 -3
  71. package/esm2022/lib/atoms/stepper/stepper.module.mjs +4 -4
  72. package/esm2022/lib/atoms/switch/switch.component.mjs +3 -3
  73. package/esm2022/lib/atoms/switch/switch.module.mjs +4 -4
  74. package/esm2022/lib/atoms/text-area/text-area.component.mjs +3 -3
  75. package/esm2022/lib/atoms/text-area/text-area.module.mjs +4 -4
  76. package/esm2022/lib/atoms/textbox/textbox.component.mjs +3 -3
  77. package/esm2022/lib/atoms/textbox/textbox.module.mjs +4 -4
  78. package/esm2022/lib/atoms/time-picker/time-picker.component.mjs +3 -3
  79. package/esm2022/lib/atoms/time-picker/time-picker.module.mjs +4 -4
  80. package/esm2022/lib/atoms/timescheduler/timescheduler.component.mjs +3 -3
  81. package/esm2022/lib/atoms/timescheduler/timescheduler.module.mjs +4 -4
  82. package/esm2022/lib/atoms/tooltip/tooltip.component.mjs +3 -3
  83. package/esm2022/lib/atoms/tooltip/tooltip.module.mjs +4 -4
  84. package/esm2022/lib/atoms/tree-list/tree-list.component.mjs +404 -0
  85. package/esm2022/lib/atoms/tree-list/tree-list.interfaces.mjs +2 -0
  86. package/esm2022/lib/atoms/tree-list/tree-list.module.mjs +44 -0
  87. package/esm2022/lib/atoms/tree-view/tree-view.component.mjs +521 -0
  88. package/esm2022/lib/atoms/tree-view/tree-view.interfaces.mjs +2 -0
  89. package/esm2022/lib/atoms/tree-view/tree-view.module.mjs +44 -0
  90. package/esm2022/lib/atoms/typography/typography.component.mjs +3 -3
  91. package/esm2022/lib/atoms/typography/typography.module.mjs +4 -4
  92. package/esm2022/lib/atoms/uploader/uploader.component.mjs +3 -3
  93. package/esm2022/lib/atoms/uploader/uploader.module.mjs +4 -4
  94. package/esm2022/lib/molecules/card/card-actions/card-actions.component.mjs +3 -3
  95. package/esm2022/lib/molecules/card/card-body/card-body.component.mjs +3 -3
  96. package/esm2022/lib/molecules/card/card-footer/card-footer.component.mjs +3 -3
  97. package/esm2022/lib/molecules/card/card-header/card-header.component.mjs +3 -3
  98. package/esm2022/lib/molecules/card/card.component.mjs +3 -3
  99. package/esm2022/lib/molecules/card/card.module.mjs +4 -4
  100. package/esm2022/lib/molecules/dialog/confirmation-dialog/confirmation-dialog.component.mjs +3 -3
  101. package/esm2022/lib/molecules/dialog/dialog-actions/dialog-actions.component.mjs +3 -3
  102. package/esm2022/lib/molecules/dialog/dialog-titlebar/dialog-titlebar.component.mjs +3 -3
  103. package/esm2022/lib/molecules/dialog/dialog.component.mjs +3 -3
  104. package/esm2022/lib/molecules/dialog/dialog.module.mjs +4 -4
  105. package/esm2022/lib/molecules/grid-form/grid-form.component.mjs +3 -3
  106. package/esm2022/lib/molecules/grid-form/grid-form.module.mjs +4 -4
  107. package/esm2022/lib/molecules/grid-layout/grid-layout-item/grid-layout-item.component.mjs +3 -3
  108. package/esm2022/lib/molecules/grid-layout/grid-layout.component.mjs +3 -3
  109. package/esm2022/lib/molecules/grid-layout/grid-layout.module.mjs +4 -4
  110. package/esm2022/lib/molecules/grid-pagination/grid-pagination-spacer/grid-pagination-spacer.component.mjs +3 -3
  111. package/esm2022/lib/molecules/grid-pagination/grid-pagination.component.mjs +6 -6
  112. package/esm2022/lib/molecules/grid-pagination/grid-pagination.module.mjs +4 -4
  113. package/esm2022/lib/molecules/grid-pagination/kebab-menu-filter.pipe.mjs +3 -3
  114. package/esm2022/lib/molecules/molecules.module.mjs +4 -4
  115. package/esm2022/lib/molecules/tabstrip/tabstrip-tab/tabstrip-tab.component.mjs +3 -3
  116. package/esm2022/lib/molecules/tabstrip/tabstrip.component.mjs +3 -3
  117. package/esm2022/lib/molecules/tabstrip/tabstrip.module.mjs +4 -4
  118. package/esm2022/lib/shared.component.mjs +3 -3
  119. package/esm2022/lib/shared.module.mjs +4 -4
  120. package/esm2022/public-api.mjs +7 -1
  121. package/fesm2022/progress-chef-platform-shared-components.mjs +1501 -375
  122. package/fesm2022/progress-chef-platform-shared-components.mjs.map +1 -1
  123. package/lib/atoms/atoms.module.d.ts +5 -3
  124. package/lib/atoms/drag-and-drop/drag-and-drop.component.d.ts +10 -1
  125. package/lib/atoms/markdown-display/markdown-display.component.d.ts +22 -0
  126. package/lib/atoms/markdown-display/markdown-display.module.d.ts +8 -0
  127. package/lib/atoms/markdown-display/markdown-display.service.d.ts +23 -0
  128. package/lib/atoms/tree-list/tree-list.component.d.ts +288 -0
  129. package/lib/atoms/tree-list/tree-list.interfaces.d.ts +31 -0
  130. package/lib/atoms/tree-list/tree-list.module.d.ts +13 -0
  131. package/lib/atoms/tree-view/tree-view.component.d.ts +279 -0
  132. package/lib/atoms/tree-view/tree-view.interfaces.d.ts +23 -0
  133. package/lib/atoms/tree-view/tree-view.module.d.ts +13 -0
  134. package/package.json +2 -1
  135. 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.18", ngImport: i0, type: TreeListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
306
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.18", 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.18", 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.18", ngImport: i0, type: TreeListModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
12
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.18", 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.18", 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.18", 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==