@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.
- package/assets/icons/IconFont.css +6 -3
- package/assets/icons/IconFont.scss +6 -3
- package/assets/icons/IconFont.ttf +0 -0
- package/assets/icons/IconFont.woff +0 -0
- package/assets/icons/IconFont.woff2 +0 -0
- package/esm2022/lib/atoms/alert/alert.component.mjs +3 -3
- package/esm2022/lib/atoms/alert/alert.module.mjs +4 -4
- package/esm2022/lib/atoms/angular-popup/angular-popup.component.mjs +3 -3
- package/esm2022/lib/atoms/angular-popup/angular-popup.module.mjs +4 -4
- package/esm2022/lib/atoms/atoms.module.mjs +19 -5
- package/esm2022/lib/atoms/avatar/avatar.component.mjs +3 -3
- package/esm2022/lib/atoms/avatar/avatar.module.mjs +4 -4
- package/esm2022/lib/atoms/breadcrumb/breadcrumb.component.mjs +3 -3
- package/esm2022/lib/atoms/breadcrumb/breadcrumb.module.mjs +4 -4
- package/esm2022/lib/atoms/button/button.component.mjs +3 -3
- package/esm2022/lib/atoms/button/button.module.mjs +4 -4
- package/esm2022/lib/atoms/button-group/button-group.component.mjs +3 -3
- package/esm2022/lib/atoms/button-group/button-group.module.mjs +4 -4
- package/esm2022/lib/atoms/checkbox/checkbox.component.mjs +3 -3
- package/esm2022/lib/atoms/checkbox/checkbox.module.mjs +4 -4
- package/esm2022/lib/atoms/chip/chip.component.mjs +3 -3
- package/esm2022/lib/atoms/chip/chip.module.mjs +4 -4
- package/esm2022/lib/atoms/chip-list/chip-list.component.mjs +3 -3
- package/esm2022/lib/atoms/chip-list/chip-list.module.mjs +4 -4
- package/esm2022/lib/atoms/clipboard/clipboard.component.mjs +3 -3
- package/esm2022/lib/atoms/clipboard/clipboard.module.mjs +4 -4
- package/esm2022/lib/atoms/container/container.component.mjs +3 -3
- package/esm2022/lib/atoms/container/container.module.mjs +4 -4
- package/esm2022/lib/atoms/date-range/date-range.component.mjs +3 -3
- package/esm2022/lib/atoms/date-range/date-range.module.mjs +4 -4
- package/esm2022/lib/atoms/datepicker/datepicker.component.mjs +3 -3
- package/esm2022/lib/atoms/datepicker/datepicker.module.mjs +4 -4
- package/esm2022/lib/atoms/drag-and-drop/drag-and-drop.component.mjs +33 -5
- package/esm2022/lib/atoms/drag-and-drop/drag-and-drop.module.mjs +4 -4
- package/esm2022/lib/atoms/dropdown/dropdown.component.mjs +3 -3
- package/esm2022/lib/atoms/dropdown/dropdown.module.mjs +4 -4
- package/esm2022/lib/atoms/dropdown-button/dropdown-button.component.mjs +3 -3
- package/esm2022/lib/atoms/dropdown-button/dropdown-button.module.mjs +4 -4
- package/esm2022/lib/atoms/dropdown-tree/dropdowntree.component.mjs +3 -3
- package/esm2022/lib/atoms/dropdown-tree/dropdowntree.module.mjs +4 -4
- package/esm2022/lib/atoms/expansion-panel/expansion-panel.component.mjs +3 -3
- package/esm2022/lib/atoms/expansion-panel/expansion-panel.module.mjs +4 -4
- package/esm2022/lib/atoms/icon/icon.component.mjs +4 -4
- package/esm2022/lib/atoms/icon/icon.module.mjs +4 -4
- package/esm2022/lib/atoms/labels/label.component.mjs +3 -3
- package/esm2022/lib/atoms/labels/label.module.mjs +4 -4
- package/esm2022/lib/atoms/list-views/list-view.component.mjs +3 -3
- package/esm2022/lib/atoms/list-views/list-view.module.mjs +4 -4
- package/esm2022/lib/atoms/loader/loader.component.mjs +3 -3
- package/esm2022/lib/atoms/loader/loader.module.mjs +4 -4
- package/esm2022/lib/atoms/loading-spinner/loading-spinner.component.mjs +3 -3
- package/esm2022/lib/atoms/loading-spinner/loading-spinner.module.mjs +4 -4
- package/esm2022/lib/atoms/markdown-display/markdown-display.component.mjs +39 -0
- package/esm2022/lib/atoms/markdown-display/markdown-display.module.mjs +26 -0
- package/esm2022/lib/atoms/markdown-display/markdown-display.service.mjs +53 -0
- package/esm2022/lib/atoms/multi-select-dropdown/multi-select-dropdown.component.mjs +3 -3
- package/esm2022/lib/atoms/multi-select-dropdown/multi-select-dropdown.module.mjs +4 -4
- package/esm2022/lib/atoms/notification/notification.component.mjs +3 -3
- package/esm2022/lib/atoms/notification/notification.module.mjs +4 -4
- package/esm2022/lib/atoms/numeric-textbox/numeric-textbox.component.mjs +3 -3
- package/esm2022/lib/atoms/numeric-textbox/numeric-textbox.module.mjs +4 -4
- package/esm2022/lib/atoms/progress-bar/progress-bar.component.mjs +3 -3
- package/esm2022/lib/atoms/progress-bar/progress-bar.module.mjs +4 -4
- package/esm2022/lib/atoms/radio-button/radio-button.component.mjs +3 -3
- package/esm2022/lib/atoms/radio-button/radio-button.module.mjs +4 -4
- package/esm2022/lib/atoms/search-box/search-box.component.mjs +3 -3
- package/esm2022/lib/atoms/search-box/search-box.module.mjs +4 -4
- package/esm2022/lib/atoms/slider/slider.component.mjs +3 -3
- package/esm2022/lib/atoms/slider/slider.module.mjs +4 -4
- package/esm2022/lib/atoms/stepper/stepper.component.mjs +3 -3
- package/esm2022/lib/atoms/stepper/stepper.module.mjs +4 -4
- package/esm2022/lib/atoms/switch/switch.component.mjs +3 -3
- package/esm2022/lib/atoms/switch/switch.module.mjs +4 -4
- package/esm2022/lib/atoms/text-area/text-area.component.mjs +3 -3
- package/esm2022/lib/atoms/text-area/text-area.module.mjs +4 -4
- package/esm2022/lib/atoms/textbox/textbox.component.mjs +3 -3
- package/esm2022/lib/atoms/textbox/textbox.module.mjs +4 -4
- package/esm2022/lib/atoms/time-picker/time-picker.component.mjs +3 -3
- package/esm2022/lib/atoms/time-picker/time-picker.module.mjs +4 -4
- package/esm2022/lib/atoms/timescheduler/timescheduler.component.mjs +3 -3
- package/esm2022/lib/atoms/timescheduler/timescheduler.module.mjs +4 -4
- package/esm2022/lib/atoms/tooltip/tooltip.component.mjs +3 -3
- package/esm2022/lib/atoms/tooltip/tooltip.module.mjs +4 -4
- package/esm2022/lib/atoms/tree-list/tree-list.component.mjs +404 -0
- package/esm2022/lib/atoms/tree-list/tree-list.interfaces.mjs +2 -0
- package/esm2022/lib/atoms/tree-list/tree-list.module.mjs +44 -0
- package/esm2022/lib/atoms/tree-view/tree-view.component.mjs +521 -0
- package/esm2022/lib/atoms/tree-view/tree-view.interfaces.mjs +2 -0
- package/esm2022/lib/atoms/tree-view/tree-view.module.mjs +44 -0
- package/esm2022/lib/atoms/typography/typography.component.mjs +3 -3
- package/esm2022/lib/atoms/typography/typography.module.mjs +4 -4
- package/esm2022/lib/atoms/uploader/uploader.component.mjs +3 -3
- package/esm2022/lib/atoms/uploader/uploader.module.mjs +4 -4
- package/esm2022/lib/molecules/card/card-actions/card-actions.component.mjs +3 -3
- package/esm2022/lib/molecules/card/card-body/card-body.component.mjs +3 -3
- package/esm2022/lib/molecules/card/card-footer/card-footer.component.mjs +3 -3
- package/esm2022/lib/molecules/card/card-header/card-header.component.mjs +3 -3
- package/esm2022/lib/molecules/card/card.component.mjs +3 -3
- package/esm2022/lib/molecules/card/card.module.mjs +4 -4
- package/esm2022/lib/molecules/dialog/confirmation-dialog/confirmation-dialog.component.mjs +3 -3
- package/esm2022/lib/molecules/dialog/dialog-actions/dialog-actions.component.mjs +3 -3
- package/esm2022/lib/molecules/dialog/dialog-titlebar/dialog-titlebar.component.mjs +3 -3
- package/esm2022/lib/molecules/dialog/dialog.component.mjs +3 -3
- package/esm2022/lib/molecules/dialog/dialog.module.mjs +4 -4
- package/esm2022/lib/molecules/grid-form/grid-form.component.mjs +3 -3
- package/esm2022/lib/molecules/grid-form/grid-form.module.mjs +4 -4
- package/esm2022/lib/molecules/grid-layout/grid-layout-item/grid-layout-item.component.mjs +3 -3
- package/esm2022/lib/molecules/grid-layout/grid-layout.component.mjs +3 -3
- package/esm2022/lib/molecules/grid-layout/grid-layout.module.mjs +4 -4
- package/esm2022/lib/molecules/grid-pagination/grid-pagination-spacer/grid-pagination-spacer.component.mjs +3 -3
- package/esm2022/lib/molecules/grid-pagination/grid-pagination.component.mjs +6 -6
- package/esm2022/lib/molecules/grid-pagination/grid-pagination.module.mjs +4 -4
- package/esm2022/lib/molecules/grid-pagination/kebab-menu-filter.pipe.mjs +3 -3
- package/esm2022/lib/molecules/molecules.module.mjs +4 -4
- package/esm2022/lib/molecules/tabstrip/tabstrip-tab/tabstrip-tab.component.mjs +3 -3
- package/esm2022/lib/molecules/tabstrip/tabstrip.component.mjs +3 -3
- package/esm2022/lib/molecules/tabstrip/tabstrip.module.mjs +4 -4
- package/esm2022/lib/shared.component.mjs +3 -3
- package/esm2022/lib/shared.module.mjs +4 -4
- package/esm2022/public-api.mjs +7 -1
- package/fesm2022/progress-chef-platform-shared-components.mjs +1501 -375
- package/fesm2022/progress-chef-platform-shared-components.mjs.map +1 -1
- package/lib/atoms/atoms.module.d.ts +5 -3
- package/lib/atoms/drag-and-drop/drag-and-drop.component.d.ts +10 -1
- package/lib/atoms/markdown-display/markdown-display.component.d.ts +22 -0
- package/lib/atoms/markdown-display/markdown-display.module.d.ts +8 -0
- package/lib/atoms/markdown-display/markdown-display.service.d.ts +23 -0
- package/lib/atoms/tree-list/tree-list.component.d.ts +288 -0
- package/lib/atoms/tree-list/tree-list.interfaces.d.ts +31 -0
- package/lib/atoms/tree-list/tree-list.module.d.ts +13 -0
- package/lib/atoms/tree-view/tree-view.component.d.ts +279 -0
- package/lib/atoms/tree-view/tree-view.interfaces.d.ts +23 -0
- package/lib/atoms/tree-view/tree-view.module.d.ts +13 -0
- package/package.json +2 -1
- 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NoYXJlZC9zcmMvbGliL2F0b21zL3RyZWUtbGlzdC90cmVlLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2hhcmVkL3NyYy9saWIvYXRvbXMvdHJlZS1saXN0L3RyZWUtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUNMLGNBQWMsRUFRZixNQUFNLGtDQUFrQyxDQUFDO0FBRTFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7OztBQUc3RDs7Ozs7R0FLRztBQWVILE1BQU0sT0FBTyxpQkFBaUI7SUFkOUI7UUFvQkU7O1dBRUc7UUFDTSxTQUFJLEdBQW1CLEVBQUUsQ0FBQztRQUVuQzs7V0FFRztRQUNNLFlBQU8sR0FBcUIsRUFBRSxDQUFDO1FBRXhDOztXQUVHO1FBQ00sWUFBTyxHQUFXLElBQUksQ0FBQztRQUVoQzs7V0FFRztRQUNNLGtCQUFhLEdBQVcsVUFBVSxDQUFDO1FBRTVDOztXQUVHO1FBQ00sa0JBQWEsR0FBVyxVQUFVLENBQUM7UUFFNUM7O1dBRUc7UUFDTSxnQkFBVyxHQUF5QixXQUFXLENBQUM7UUFpQnpEOztXQUVHO1FBQ00sZUFBVSxHQUFZLEtBQUssQ0FBQztRQUVyQzs7V0FFRztRQUNNLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFFbkM7O1dBRUc7UUFDTSxlQUFVLEdBQVksS0FBSyxDQUFDO1FBRXJDOztXQUVHO1FBQ00sY0FBUyxHQUFZLEtBQUssQ0FBQztRQUVwQzs7V0FFRztRQUNNLGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBRXRDOztXQUVHO1FBQ00sYUFBUSxHQUFZLEtBQUssQ0FBQztRQUVuQzs7V0FFRztRQUNNLFlBQU8sR0FBWSxLQUFLLENBQUM7UUFFbEM7O1dBRUc7UUFDTSxXQUFNLEdBQW9CLE1BQU0sQ0FBQztRQUUxQzs7V0FFRztRQUNNLGVBQVUsR0FBWSxJQUFJLENBQUM7UUFFcEM7O1dBRUc7UUFDTSxhQUFRLEdBQVcsQ0FBQyxDQUFDO1FBRTlCOztXQUVHO1FBQ00sYUFBUSxHQUFZLEtBQUssQ0FBQztRQUVuQzs7V0FFRztRQUNNLFNBQUksR0FBcUIsRUFBRSxDQUFDO1FBdUMzQixvQkFBZSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDMUMsV0FBTSxHQUFHLElBQUksWUFBWSxFQUE2QyxDQUFDO1FBQ3ZFLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBNkMsQ0FBQztRQUN6RSxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQW9CLENBQUM7UUFDbEQsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ3ZDLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBbUIsQ0FBQztRQUNqRCxRQUFHLEdBQUcsSUFBSSxZQUFZLEVBQVksQ0FBQztRQUNuQyxTQUFJLEdBQUcsSUFBSSxZQUFZLEVBQWEsQ0FBQztRQUNyQyxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFlLENBQUM7UUFDOUMsU0FBSSxHQUFHLElBQUksWUFBWSxFQUFhLENBQUM7UUFDckMsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFlLENBQUM7UUFFekMsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDcEMsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7S0ErTi9DO0lBN05DOzs7OztPQUtHO0lBQ0gsa0JBQWtCO1FBQ2hCLE1BQU0sT0FBTyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7UUFFbEMsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakIsT0FBTyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQ3pDLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQixPQUFPLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLENBQUM7UUFDMUMsQ0FBQztRQUVELE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxpQkFBaUIsQ0FBQyxLQUFVO1FBQzFCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFFBQVEsQ0FBQyxLQUFVO1FBQ2pCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFVBQVUsQ0FBQyxLQUFVO1FBQ25CLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFlBQVksQ0FBQyxJQUFzQjtRQUNqQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxjQUFjLENBQUMsTUFBVztRQUN4QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxZQUFZLENBQUMsS0FBc0I7UUFDakMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLEtBQWU7UUFDbkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsTUFBTSxDQUFDLEtBQWdCO1FBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFFBQVEsQ0FBQyxLQUFrQjtRQUN6QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsS0FBZ0I7UUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsUUFBUSxDQUFDLEtBQWtCO1FBQ3pCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFdBQVcsQ0FBQyxLQUFVO1FBQ3BCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFdBQVcsQ0FBQyxLQUFVO1FBQ3BCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxpQkFBaUIsQ0FBQyxRQUFhO1FBQzdCLHVFQUF1RTtRQUN2RSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBZSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILG1CQUFtQixDQUFDLFFBQWE7UUFDL0IseUVBQXlFO1FBQ3pFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFpQixDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsU0FBUztRQUNQLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3pCLGdFQUFnRTtZQUNoRSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDdkIsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7b0JBQ3pCLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNwQyxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsV0FBVztRQUNULElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3pCLGtFQUFrRTtZQUNsRSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDdkIsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7b0JBQ3pCLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN0QyxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsYUFBYSxDQUFDLEtBQWEsRUFBRSxNQUFzQjtRQUNqRCxPQUFPLE1BQU0sQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDO0lBQy9CLENBQUM7K0dBL1hVLGlCQUFpQjttR0FBakIsaUJBQWlCLGd1Q0N2QzlCLG05UUFxSkEscXpMRHRISSxZQUFZLHNhQUNaLGNBQWMsNjNFQUNkLFdBQVcsK0JBQ1gsZUFBZSx1UkFFZixlQUFlOzs0RkFHTixpQkFBaUI7a0JBZDdCLFNBQVM7aUNBQ0ksSUFBSSxZQUNOLGVBQWUsV0FHaEI7d0JBQ1AsWUFBWTt3QkFDWixjQUFjO3dCQUNkLFdBQVc7d0JBQ1gsZUFBZTt3QkFDZixhQUFhO3dCQUNiLGVBQWU7cUJBQ2hCOzhCQU1nRCxlQUFlO3NCQUEvRCxTQUFTO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFLdEMsSUFBSTtzQkFBWixLQUFLO2dCQUtHLE9BQU87c0JBQWYsS0FBSztnQkFLRyxPQUFPO3NCQUFmLEtBQUs7Z0JBS0csYUFBYTtzQkFBckIsS0FBSztnQkFLRyxhQUFhO3NCQUFyQixLQUFLO2dCQUtHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBS0csYUFBYTtzQkFBckIsS0FBSztnQkFLRyxXQUFXO3NCQUFuQixLQUFLO2dCQUtHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBS0csVUFBVTtzQkFBbEIsS0FBSztnQkFLRyxRQUFRO3NCQUFoQixLQUFLO2dCQUtHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBS0csU0FBUztzQkFBakIsS0FBSztnQkFLRyxXQUFXO3NCQUFuQixLQUFLO2dCQUtHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBS0csT0FBTztzQkFBZixLQUFLO2dCQUtHLE1BQU07c0JBQWQsS0FBSztnQkFLRyxVQUFVO3NCQUFsQixLQUFLO2dCQUtHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBS0csUUFBUTtzQkFBaEIsS0FBSztnQkFLRyxJQUFJO3NCQUFaLEtBQUs7Z0JBS0csWUFBWTtzQkFBcEIsS0FBSztnQkFLRyxjQUFjO3NCQUF0QixLQUFLO2dCQUtHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBS0csWUFBWTtzQkFBcEIsS0FBSztnQkFLRyxlQUFlO3NCQUF2QixLQUFLO2dCQUtHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFLRyxlQUFlO3NCQUF2QixLQUFLO2dCQUlJLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csR0FBRztzQkFBWixNQUFNO2dCQUNHLElBQUk7c0JBQWIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLElBQUk7c0JBQWIsTUFBTTtnQkFDRyxNQUFNO3NCQUFmLE1BQU07Z0JBRUcsU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIFRyZWVMaXN0TW9kdWxlLFxuICBUcmVlTGlzdENvbXBvbmVudCBhcyBLZW5kb1RyZWVMaXN0Q29tcG9uZW50LFxuICBBZGRFdmVudCxcbiAgQ2FuY2VsRXZlbnQsXG4gIEVkaXRFdmVudCxcbiAgUmVtb3ZlRXZlbnQsXG4gIFNhdmVFdmVudCxcbiAgUGFnZUNoYW5nZUV2ZW50XG59IGZyb20gJ0Bwcm9ncmVzcy9rZW5kby1hbmd1bGFyLXRyZWVsaXN0JztcbmltcG9ydCB7IFNvcnREZXNjcmlwdG9yIH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWRhdGEtcXVlcnknO1xuaW1wb3J0IHsgSWNvbnNNb2R1bGUgfSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci1pY29ucyc7XG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi9idXR0b24vYnV0dG9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vaWNvbi9pY29uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBMb2FkZXJDb21wb25lbnQgfSBmcm9tICcuLi9sb2FkZXIvbG9hZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUcmVlTGlzdE5vZGUsIFRyZWVMaXN0Q29sdW1uIH0gZnJvbSAnLi90cmVlLWxpc3QuaW50ZXJmYWNlcyc7XG5cbi8qKlxuICogQ3VzdG9tIFRyZWVMaXN0IGNvbXBvbmVudCB0aGF0IHdyYXBzIEtlbmRvJ3MgVHJlZUxpc3Qgd2l0aCBkZXNpZ24gc3lzdGVtIHN0eWxpbmcuXG4gKiBcbiAqIFRoaXMgY29tcG9uZW50IHByb3ZpZGVzIGEgaGllcmFyY2hpY2FsIGRhdGEgZ3JpZCBmb3IgZGlzcGxheWluZyBhbmQgZWRpdGluZyB0YWJ1bGFyIGRhdGEuXG4gKiBJdCBzdXBwb3J0cyBzZWxlY3Rpb24sIHNvcnRpbmcsIGZpbHRlcmluZywgZWRpdGluZywgYW5kIGN1c3RvbSBjb2x1bW4gdGVtcGxhdGVzLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICdsaWItdHJlZS1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RyZWUtbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RyZWUtbGlzdC5jb21wb25lbnQuc2NzcyddLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFRyZWVMaXN0TW9kdWxlLFxuICAgIEljb25zTW9kdWxlLFxuICAgIEJ1dHRvbkNvbXBvbmVudCxcbiAgICBJY29uQ29tcG9uZW50LFxuICAgIExvYWRlckNvbXBvbmVudFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIFRyZWVMaXN0Q29tcG9uZW50IHtcbiAgLyoqXG4gICAqIFZpZXdDaGlsZCByZWZlcmVuY2UgdG8gdGhlIEtlbmRvIFRyZWVMaXN0IGNvbXBvbmVudCBpbnN0YW5jZVxuICAgKi9cbiAgQFZpZXdDaGlsZCgndHJlZUxpc3RFbGVtZW50JywgeyBzdGF0aWM6IGZhbHNlIH0pIHRyZWVMaXN0RWxlbWVudCE6IEtlbmRvVHJlZUxpc3RDb21wb25lbnQ7XG5cbiAgLyoqXG4gICAqIFRoZSBkYXRhIHNvdXJjZSBmb3IgdGhlIHRyZWUgbGlzdFxuICAgKi9cbiAgQElucHV0KCkgZGF0YTogVHJlZUxpc3ROb2RlW10gPSBbXTtcblxuICAvKipcbiAgICogQ29sdW1uIGRlZmluaXRpb25zIGZvciB0aGUgdHJlZSBsaXN0XG4gICAqL1xuICBASW5wdXQoKSBjb2x1bW5zOiBUcmVlTGlzdENvbHVtbltdID0gW107XG5cbiAgLyoqXG4gICAqIEZpZWxkIG5hbWUgdGhhdCBjb250YWlucyB0aGUgdW5pcXVlIGlkZW50aWZpZXIgZm9yIGVhY2ggbm9kZVxuICAgKi9cbiAgQElucHV0KCkgaWRGaWVsZDogc3RyaW5nID0gJ2lkJztcblxuICAvKipcbiAgICogRmllbGQgbmFtZSB0aGF0IGNvbnRhaW5zIHRoZSBjaGlsZCBub2RlcyBhcnJheSAoZm9yIGhpZXJhcmNoaWNhbCBiaW5kaW5nKVxuICAgKi9cbiAgQElucHV0KCkgY2hpbGRyZW5GaWVsZDogc3RyaW5nID0gJ2NoaWxkcmVuJztcblxuICAvKipcbiAgICogRmllbGQgbmFtZSB0aGF0IGNvbnRhaW5zIHRoZSBwYXJlbnQgaWRlbnRpZmllciAoZm9yIGZsYXQgYmluZGluZylcbiAgICovXG4gIEBJbnB1dCgpIHBhcmVudElkRmllbGQ6IHN0cmluZyA9ICdwYXJlbnRJZCc7XG5cbiAgLyoqXG4gICAqIEJpbmRpbmcgdHlwZTogJ2hpZXJhcmNoeScgZm9yIG5lc3RlZCBkYXRhIHdpdGggY2hpbGRyZW4sICdmbGF0JyBmb3IgcGFyZW50LWNoaWxkIHJlbGF0aW9uc2hpcCBkYXRhXG4gICAqL1xuICBASW5wdXQoKSBiaW5kaW5nVHlwZTogJ2hpZXJhcmNoeScgfCAnZmxhdCcgPSAnaGllcmFyY2h5JztcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZnVuY3Rpb24gdGhhdCByZXRyaWV2ZXMgY2hpbGQgbm9kZXMgZm9yIGEgcGFydGljdWxhciBub2RlIChmb3IgbWFudWFsIGJpbmRpbmcpXG4gICAqL1xuICBASW5wdXQoKSBmZXRjaENoaWxkcmVuOiAoKGl0ZW06IGFueSkgPT4gYW55W10pIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmdW5jdGlvbiB0aGF0IGRldGVybWluZXMgaWYgYSBwYXJ0aWN1bGFyIG5vZGUgaGFzIGNoaWxkcmVuIChmb3IgbWFudWFsIGJpbmRpbmcpXG4gICAqL1xuICBASW5wdXQoKSBoYXNDaGlsZHJlbjogKChpdGVtOiBhbnkpID0+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==
|