cps-ui-kit 0.165.0 → 17.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/cps-autocomplete/cps-autocomplete.component.mjs +824 -0
- package/esm2022/lib/components/cps-button/cps-button.component.mjs +190 -0
- package/esm2022/lib/components/cps-button-toggle/cps-button-toggle.component.mjs +235 -0
- package/esm2022/lib/components/cps-checkbox/cps-checkbox.component.mjs +149 -0
- package/esm2022/lib/components/cps-chip/cps-chip.component.mjs +94 -0
- package/esm2022/lib/components/cps-datepicker/cps-datepicker.component.mjs +382 -0
- package/esm2022/lib/components/cps-expansion-panel/cps-expansion-panel.component.mjs +209 -0
- package/esm2022/lib/components/cps-file-upload/cps-file-upload.component.mjs +138 -0
- package/esm2022/lib/components/cps-icon/cps-icon.component.mjs +193 -0
- package/esm2022/lib/components/cps-info-circle/cps-info-circle.component.mjs +61 -0
- package/esm2022/lib/components/cps-input/cps-input.component.mjs +386 -0
- package/{esm2020 → esm2022}/lib/components/cps-loader/cps-loader.component.mjs +5 -5
- package/esm2022/lib/components/cps-menu/cps-menu.component.mjs +552 -0
- package/esm2022/lib/components/cps-paginator/cps-paginator.component.mjs +114 -0
- package/esm2022/lib/components/cps-paginator/pipes/cps-paginate.pipe.mjs +30 -0
- package/{esm2020 → esm2022}/lib/components/cps-progress-circular/cps-progress-circular.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/cps-progress-linear/cps-progress-linear.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/cps-radio-group/cps-radio/cps-radio.component.mjs +7 -7
- package/esm2022/lib/components/cps-radio-group/cps-radio-button/cps-radio-button.component.mjs +55 -0
- package/esm2022/lib/components/cps-radio-group/cps-radio-group.component.mjs +158 -0
- package/esm2022/lib/components/cps-select/cps-select.component.mjs +615 -0
- package/esm2022/lib/components/cps-sidebar-menu/cps-sidebar-menu.component.mjs +110 -0
- package/{esm2020 → esm2022}/lib/components/cps-tab-group/cps-tab/cps-tab.component.mjs +4 -4
- package/esm2022/lib/components/cps-tab-group/cps-tab-group.component.mjs +303 -0
- package/esm2022/lib/components/cps-table/components/internal/cps-sort-icon/cps-sort-icon.component.mjs +79 -0
- package/esm2022/lib/components/cps-table/components/internal/table-column-filter/table-column-filter.component.mjs +408 -0
- package/esm2022/lib/components/cps-table/components/internal/table-column-filter-constraint/table-column-filter-constraint.component.mjs +149 -0
- package/esm2022/lib/components/cps-table/components/internal/table-row-menu/table-row-menu.component.mjs +88 -0
- package/esm2022/lib/components/cps-table/cps-table.component.mjs +941 -0
- package/esm2022/lib/components/cps-table/directives/cps-table-column-filter.directive.mjs +181 -0
- package/{esm2020 → esm2022}/lib/components/cps-table/directives/cps-table-column-sortable.directive.mjs +5 -5
- package/{esm2020 → esm2022}/lib/components/cps-table/directives/cps-table-header-selectable.directive.mjs +5 -5
- package/{esm2020 → esm2022}/lib/components/cps-table/directives/cps-table-row-selectable.directive.mjs +5 -5
- package/esm2022/lib/components/cps-table/directives/internal/table-unsort.directive.mjs +220 -0
- package/esm2022/lib/components/cps-tag/cps-tag.component.mjs +136 -0
- package/esm2022/lib/components/cps-textarea/cps-textarea.component.mjs +291 -0
- package/esm2022/lib/components/cps-timepicker/cps-timepicker.component.mjs +351 -0
- package/esm2022/lib/components/cps-tree-autocomplete/cps-tree-autocomplete.component.mjs +251 -0
- package/esm2022/lib/components/cps-tree-select/cps-tree-select.component.mjs +87 -0
- package/esm2022/lib/components/cps-tree-table/cps-tree-table.component.mjs +1196 -0
- package/{esm2020 → esm2022}/lib/components/cps-tree-table/directives/cps-tree-table-column-filter.directive.mjs +5 -5
- package/{esm2020 → esm2022}/lib/components/cps-tree-table/directives/cps-tree-table-column-sortable.directive.mjs +5 -5
- package/{esm2020 → esm2022}/lib/components/cps-tree-table/directives/cps-tree-table-header-selectable.directive.mjs +5 -5
- package/{esm2020 → esm2022}/lib/components/cps-tree-table/directives/cps-tree-table-row-selectable.directive.mjs +5 -5
- package/esm2022/lib/components/cps-tree-table/directives/cps-tree-table-row-toggler.directive.mjs +43 -0
- package/esm2022/lib/components/cps-tree-table/directives/internal/tree-table-unsort.directive.mjs +354 -0
- package/esm2022/lib/components/internal/cps-base-tree-dropdown/cps-base-tree-dropdown.component.mjs +619 -0
- package/esm2022/lib/directives/cps-tooltip/cps-tooltip.directive.mjs +257 -0
- package/{esm2020 → esm2022}/lib/pipes/internal/check-option-selected.pipe.mjs +4 -4
- package/esm2022/lib/pipes/internal/combine-labels.pipe.mjs +25 -0
- package/{esm2020 → esm2022}/lib/pipes/internal/label-by-value.pipe.mjs +4 -4
- package/esm2022/lib/services/cps-dialog/cps-dialog.service.mjs +99 -0
- package/{esm2020 → esm2022}/lib/services/cps-dialog/internal/components/cps-confirmation/cps-confirmation.component.mjs +5 -5
- package/esm2022/lib/services/cps-dialog/internal/components/cps-dialog/cps-dialog.component.mjs +470 -0
- package/{esm2020 → esm2022}/lib/services/cps-dialog/internal/directives/cps-dialog-content.directive.mjs +5 -5
- package/esm2022/lib/services/cps-dialog/utils/cps-dialog-config.mjs +3 -0
- package/esm2022/lib/services/cps-notification/cps-notification.service.mjs +126 -0
- package/esm2022/lib/services/cps-notification/internal/components/cps-notification-container/cps-notification-container.component.mjs +91 -0
- package/{esm2020 → esm2022}/lib/services/cps-notification/internal/components/cps-toast/cps-toast.component.mjs +23 -23
- package/esm2022/lib/utils/colors-utils.mjs +57 -0
- package/esm2022/lib/utils/internal/size-utils.mjs +24 -0
- package/{esm2020 → esm2022}/public-api.mjs +2 -2
- package/{fesm2020 → fesm2022}/cps-ui-kit.mjs +481 -391
- package/fesm2022/cps-ui-kit.mjs.map +1 -0
- package/lib/components/cps-autocomplete/cps-autocomplete.component.d.ts +2 -2
- package/lib/components/cps-button/cps-button.component.d.ts +1 -1
- package/lib/components/cps-button-toggle/cps-button-toggle.component.d.ts +2 -2
- package/lib/components/cps-checkbox/cps-checkbox.component.d.ts +2 -2
- package/lib/components/cps-chip/cps-chip.component.d.ts +1 -1
- package/lib/components/cps-datepicker/cps-datepicker.component.d.ts +2 -2
- package/lib/components/cps-expansion-panel/cps-expansion-panel.component.d.ts +1 -1
- package/lib/components/cps-file-upload/cps-file-upload.component.d.ts +1 -1
- package/lib/components/cps-icon/cps-icon.component.d.ts +1 -1
- package/lib/components/cps-info-circle/cps-info-circle.component.d.ts +2 -2
- package/lib/components/cps-input/cps-input.component.d.ts +2 -2
- package/lib/components/cps-loader/cps-loader.component.d.ts +1 -1
- package/lib/components/cps-menu/cps-menu.component.d.ts +1 -1
- package/lib/components/cps-paginator/cps-paginator.component.d.ts +1 -1
- package/lib/components/cps-progress-circular/cps-progress-circular.component.d.ts +1 -1
- package/lib/components/cps-progress-linear/cps-progress-linear.component.d.ts +1 -1
- package/lib/components/cps-radio-group/cps-radio/cps-radio.component.d.ts +1 -1
- package/lib/components/cps-radio-group/cps-radio-button/cps-radio-button.component.d.ts +1 -1
- package/lib/components/cps-radio-group/cps-radio-group.component.d.ts +2 -2
- package/lib/components/cps-select/cps-select.component.d.ts +2 -2
- package/lib/components/cps-sidebar-menu/cps-sidebar-menu.component.d.ts +1 -1
- package/lib/components/cps-tab-group/cps-tab/cps-tab.component.d.ts +1 -1
- package/lib/components/cps-tab-group/cps-tab-group.component.d.ts +1 -1
- package/lib/components/cps-table/components/internal/cps-sort-icon/cps-sort-icon.component.d.ts +1 -1
- package/lib/components/cps-table/components/internal/table-column-filter/table-column-filter.component.d.ts +1 -1
- package/lib/components/cps-table/components/internal/table-column-filter-constraint/table-column-filter-constraint.component.d.ts +1 -1
- package/lib/components/cps-table/components/internal/table-row-menu/table-row-menu.component.d.ts +1 -1
- package/lib/components/cps-table/cps-table.component.d.ts +1 -1
- package/lib/components/cps-table/directives/cps-table-column-filter.directive.d.ts +1 -1
- package/lib/components/cps-table/directives/cps-table-column-sortable.directive.d.ts +1 -1
- package/lib/components/cps-table/directives/cps-table-row-selectable.directive.d.ts +1 -1
- package/lib/components/cps-tag/cps-tag.component.d.ts +1 -1
- package/lib/components/cps-textarea/cps-textarea.component.d.ts +2 -2
- package/lib/components/cps-timepicker/cps-timepicker.component.d.ts +2 -2
- package/lib/components/cps-tree-autocomplete/cps-tree-autocomplete.component.d.ts +1 -1
- package/lib/components/cps-tree-select/cps-tree-select.component.d.ts +1 -1
- package/lib/components/cps-tree-table/cps-tree-table.component.d.ts +4 -4
- package/lib/components/cps-tree-table/directives/cps-tree-table-column-filter.directive.d.ts +1 -1
- package/lib/components/cps-tree-table/directives/cps-tree-table-column-sortable.directive.d.ts +1 -1
- package/lib/components/cps-tree-table/directives/cps-tree-table-row-selectable.directive.d.ts +1 -1
- package/lib/components/cps-tree-table/directives/cps-tree-table-row-toggler.directive.d.ts +1 -1
- package/lib/components/internal/cps-base-tree-dropdown/cps-base-tree-dropdown.component.d.ts +2 -2
- package/lib/directives/{cps-tooltip.directive.d.ts → cps-tooltip/cps-tooltip.directive.d.ts} +2 -2
- package/lib/services/cps-dialog/cps-dialog.service.d.ts +13 -0
- package/lib/services/cps-dialog/utils/cps-dialog-config.d.ts +1 -1
- package/lib/services/cps-notification/cps-notification.service.d.ts +32 -0
- package/lib/services/cps-notification/internal/components/cps-notification-container/cps-notification-container.component.d.ts +1 -1
- package/lib/services/cps-notification/internal/components/cps-toast/cps-toast.component.d.ts +1 -1
- package/package.json +12 -18
- package/public-api.d.ts +1 -1
- package/esm2020/lib/components/cps-autocomplete/cps-autocomplete.component.mjs +0 -824
- package/esm2020/lib/components/cps-button/cps-button.component.mjs +0 -190
- package/esm2020/lib/components/cps-button-toggle/cps-button-toggle.component.mjs +0 -235
- package/esm2020/lib/components/cps-checkbox/cps-checkbox.component.mjs +0 -149
- package/esm2020/lib/components/cps-chip/cps-chip.component.mjs +0 -94
- package/esm2020/lib/components/cps-datepicker/cps-datepicker.component.mjs +0 -382
- package/esm2020/lib/components/cps-expansion-panel/cps-expansion-panel.component.mjs +0 -209
- package/esm2020/lib/components/cps-file-upload/cps-file-upload.component.mjs +0 -138
- package/esm2020/lib/components/cps-icon/cps-icon.component.mjs +0 -193
- package/esm2020/lib/components/cps-info-circle/cps-info-circle.component.mjs +0 -61
- package/esm2020/lib/components/cps-input/cps-input.component.mjs +0 -386
- package/esm2020/lib/components/cps-menu/cps-menu.component.mjs +0 -552
- package/esm2020/lib/components/cps-paginator/cps-paginator.component.mjs +0 -113
- package/esm2020/lib/components/cps-paginator/pipes/cps-paginate.pipe.mjs +0 -30
- package/esm2020/lib/components/cps-radio-group/cps-radio-button/cps-radio-button.component.mjs +0 -55
- package/esm2020/lib/components/cps-radio-group/cps-radio-group.component.mjs +0 -158
- package/esm2020/lib/components/cps-select/cps-select.component.mjs +0 -615
- package/esm2020/lib/components/cps-sidebar-menu/cps-sidebar-menu.component.mjs +0 -110
- package/esm2020/lib/components/cps-tab-group/cps-tab-group.component.mjs +0 -299
- package/esm2020/lib/components/cps-table/components/internal/cps-sort-icon/cps-sort-icon.component.mjs +0 -79
- package/esm2020/lib/components/cps-table/components/internal/table-column-filter/table-column-filter.component.mjs +0 -408
- package/esm2020/lib/components/cps-table/components/internal/table-column-filter-constraint/table-column-filter-constraint.component.mjs +0 -148
- package/esm2020/lib/components/cps-table/components/internal/table-row-menu/table-row-menu.component.mjs +0 -88
- package/esm2020/lib/components/cps-table/cps-table.component.mjs +0 -940
- package/esm2020/lib/components/cps-table/directives/cps-table-column-filter.directive.mjs +0 -181
- package/esm2020/lib/components/cps-table/directives/internal/table-unsort.directive.mjs +0 -210
- package/esm2020/lib/components/cps-tag/cps-tag.component.mjs +0 -136
- package/esm2020/lib/components/cps-textarea/cps-textarea.component.mjs +0 -291
- package/esm2020/lib/components/cps-timepicker/cps-timepicker.component.mjs +0 -351
- package/esm2020/lib/components/cps-tree-autocomplete/cps-tree-autocomplete.component.mjs +0 -250
- package/esm2020/lib/components/cps-tree-select/cps-tree-select.component.mjs +0 -87
- package/esm2020/lib/components/cps-tree-table/cps-tree-table.component.mjs +0 -1192
- package/esm2020/lib/components/cps-tree-table/directives/cps-tree-table-row-toggler.directive.mjs +0 -43
- package/esm2020/lib/components/cps-tree-table/directives/internal/tree-table-unsort.directive.mjs +0 -334
- package/esm2020/lib/components/internal/cps-base-tree-dropdown/cps-base-tree-dropdown.component.mjs +0 -616
- package/esm2020/lib/directives/cps-tooltip.directive.mjs +0 -257
- package/esm2020/lib/pipes/internal/combine-labels.pipe.mjs +0 -25
- package/esm2020/lib/services/cps-dialog/cps-dialog.service.mjs +0 -86
- package/esm2020/lib/services/cps-dialog/internal/components/cps-dialog/cps-dialog.component.mjs +0 -470
- package/esm2020/lib/services/cps-dialog/utils/cps-dialog-config.mjs +0 -3
- package/esm2020/lib/services/cps-notification/cps-notification.service.mjs +0 -94
- package/esm2020/lib/services/cps-notification/internal/components/cps-notification-container/cps-notification-container.component.mjs +0 -91
- package/esm2020/lib/utils/colors-utils.mjs +0 -57
- package/esm2020/lib/utils/internal/size-utils.mjs +0 -24
- package/fesm2015/cps-ui-kit.mjs +0 -12086
- package/fesm2015/cps-ui-kit.mjs.map +0 -1
- package/fesm2020/cps-ui-kit.mjs.map +0 -1
- /package/{esm2020 → esm2022}/cps-ui-kit.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/cps-table/cps-column-filter-types.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/cps-dialog/utils/cps-dialog-ref.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/cps-notification/utils/cps-notification-config.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/cps-notification/utils/internal/cps-notification-data.mjs +0 -0
|
@@ -0,0 +1,941 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, ContentChild, EventEmitter, Input, Output, ViewChild } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { FormsModule } from '@angular/forms';
|
|
4
|
+
import { Table, TableService, TableModule } from 'primeng/table';
|
|
5
|
+
import { CpsInputComponent } from '../cps-input/cps-input.component';
|
|
6
|
+
import { CpsButtonComponent } from '../cps-button/cps-button.component';
|
|
7
|
+
import { CpsSelectComponent } from '../cps-select/cps-select.component';
|
|
8
|
+
import { CpsIconComponent } from '../cps-icon/cps-icon.component';
|
|
9
|
+
import { CpsMenuComponent } from '../cps-menu/cps-menu.component';
|
|
10
|
+
import { CpsLoaderComponent } from '../cps-loader/cps-loader.component';
|
|
11
|
+
import { TableRowMenuComponent } from './components/internal/table-row-menu/table-row-menu.component';
|
|
12
|
+
import { CpsTableColumnSortableDirective } from './directives/cps-table-column-sortable.directive';
|
|
13
|
+
import { TableUnsortDirective } from './directives/internal/table-unsort.directive';
|
|
14
|
+
import { convertSize } from '../../utils/internal/size-utils';
|
|
15
|
+
import { isEqual } from 'lodash-es';
|
|
16
|
+
import * as i0 from "@angular/core";
|
|
17
|
+
import * as i1 from "@angular/forms";
|
|
18
|
+
import * as i2 from "@angular/common";
|
|
19
|
+
import * as i3 from "primeng/table";
|
|
20
|
+
import * as i4 from "primeng/api";
|
|
21
|
+
// import jsPDF from 'jspdf';
|
|
22
|
+
// import 'jspdf-autotable';
|
|
23
|
+
export function tableFactory(tableComponent) {
|
|
24
|
+
return tableComponent.primengTable;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* CpsTableComponent displays data in tabular format.
|
|
28
|
+
* @group Components
|
|
29
|
+
*/
|
|
30
|
+
export class CpsTableComponent {
|
|
31
|
+
/**
|
|
32
|
+
* An array of objects to display.
|
|
33
|
+
* @group Props
|
|
34
|
+
*/
|
|
35
|
+
set data(value) {
|
|
36
|
+
this._data = [...value];
|
|
37
|
+
}
|
|
38
|
+
get data() {
|
|
39
|
+
return this._data;
|
|
40
|
+
}
|
|
41
|
+
// eslint-disable-next-line no-useless-constructor
|
|
42
|
+
constructor(cdRef) {
|
|
43
|
+
this.cdRef = cdRef;
|
|
44
|
+
/**
|
|
45
|
+
* An array of objects to represent dynamic columns.
|
|
46
|
+
* @group Props
|
|
47
|
+
*/
|
|
48
|
+
this.columns = [];
|
|
49
|
+
/**
|
|
50
|
+
* A key used to retrieve the header from columns.
|
|
51
|
+
* @group Props
|
|
52
|
+
*/
|
|
53
|
+
this.colHeaderName = 'header';
|
|
54
|
+
/**
|
|
55
|
+
* A key used to retrieve the field from columns.
|
|
56
|
+
* @group Props
|
|
57
|
+
*/
|
|
58
|
+
this.colFieldName = 'field';
|
|
59
|
+
/**
|
|
60
|
+
* Determines whether the table should have alternating stripes.
|
|
61
|
+
* @group Props
|
|
62
|
+
*/
|
|
63
|
+
this.striped = true;
|
|
64
|
+
/**
|
|
65
|
+
* Determines whether the table should have borders.
|
|
66
|
+
* @group Props
|
|
67
|
+
*/
|
|
68
|
+
this.bordered = true;
|
|
69
|
+
/**
|
|
70
|
+
* Size of table cells, it can be "small", "normal" or "large".
|
|
71
|
+
* @group Props
|
|
72
|
+
*/
|
|
73
|
+
this.size = 'normal';
|
|
74
|
+
/**
|
|
75
|
+
* Determines whether the table should have row selection.
|
|
76
|
+
* @group Props
|
|
77
|
+
*/
|
|
78
|
+
this.selectable = false;
|
|
79
|
+
/**
|
|
80
|
+
* Determines whether the table should have rows highlighting on hover.
|
|
81
|
+
* @group Props
|
|
82
|
+
*/
|
|
83
|
+
this.rowHover = true;
|
|
84
|
+
/**
|
|
85
|
+
* Field, that uniquely identifies a record in data (needed for expandable rows).
|
|
86
|
+
* @group Props
|
|
87
|
+
*/
|
|
88
|
+
this.dataKey = '';
|
|
89
|
+
/**
|
|
90
|
+
* Determines whether the table should show row menus.
|
|
91
|
+
* @group Props
|
|
92
|
+
*/
|
|
93
|
+
this.showRowMenu = false;
|
|
94
|
+
/**
|
|
95
|
+
* Determines whether the 'Remove' button should be displayed in the row menu.
|
|
96
|
+
* Note: This setting only takes effect if 'showRowMenu' is true.
|
|
97
|
+
* @group Props
|
|
98
|
+
*/
|
|
99
|
+
this.showRowRemoveButton = true;
|
|
100
|
+
/**
|
|
101
|
+
* Determines whether the 'Edit' button should be displayed in the row menu.
|
|
102
|
+
* Note: This setting only takes effect if 'showRowMenu' is true.
|
|
103
|
+
* @group Props
|
|
104
|
+
*/
|
|
105
|
+
this.showRowEditButton = true;
|
|
106
|
+
/**
|
|
107
|
+
* Determines whether the table should have re-orderable rows.
|
|
108
|
+
* @group Props
|
|
109
|
+
*/
|
|
110
|
+
this.reorderableRows = false;
|
|
111
|
+
/**
|
|
112
|
+
* When enabled, a loader component is displayed.
|
|
113
|
+
* @group Props
|
|
114
|
+
*/
|
|
115
|
+
this.loading = false;
|
|
116
|
+
/**
|
|
117
|
+
* Inline style of the table.
|
|
118
|
+
* @group Props
|
|
119
|
+
*/
|
|
120
|
+
this.tableStyle = undefined;
|
|
121
|
+
/**
|
|
122
|
+
* Style class of the table.
|
|
123
|
+
* @group Props
|
|
124
|
+
*/
|
|
125
|
+
this.tableStyleClass = '';
|
|
126
|
+
/**
|
|
127
|
+
* Makes all columns sortable if columns prop is provided.
|
|
128
|
+
* @group Props
|
|
129
|
+
*/
|
|
130
|
+
this.sortable = false;
|
|
131
|
+
/**
|
|
132
|
+
* Determines whether sorting works on single column or on multiple columns.
|
|
133
|
+
* @group Props
|
|
134
|
+
*/
|
|
135
|
+
this.sortMode = 'single';
|
|
136
|
+
/**
|
|
137
|
+
* Determines whether to use the default sorting or a custom one using sortFunction.
|
|
138
|
+
* @group Props
|
|
139
|
+
*/
|
|
140
|
+
this.customSort = false;
|
|
141
|
+
/**
|
|
142
|
+
* Determines whether the table has a toolbar.
|
|
143
|
+
* @group Props
|
|
144
|
+
*/
|
|
145
|
+
this.hasToolbar = true;
|
|
146
|
+
/**
|
|
147
|
+
* Toolbar size, it can be "small" or "normal".
|
|
148
|
+
* @group Props
|
|
149
|
+
*/
|
|
150
|
+
this.toolbarSize = 'normal';
|
|
151
|
+
/**
|
|
152
|
+
* Toolbar title.
|
|
153
|
+
* @group Props
|
|
154
|
+
*/
|
|
155
|
+
this.toolbarTitle = '';
|
|
156
|
+
/**
|
|
157
|
+
* Toolbar icon name.
|
|
158
|
+
* @group Props
|
|
159
|
+
*/
|
|
160
|
+
this.toolbarIcon = '';
|
|
161
|
+
/**
|
|
162
|
+
* Toolbar icon color.
|
|
163
|
+
* @group Props
|
|
164
|
+
*/
|
|
165
|
+
this.toolbarIconColor = '';
|
|
166
|
+
/**
|
|
167
|
+
* Makes table scrollable.
|
|
168
|
+
* @group Props
|
|
169
|
+
*/
|
|
170
|
+
this.scrollable = true;
|
|
171
|
+
/**
|
|
172
|
+
* Height of the scroll viewport in fixed pixels or the "flex" keyword for a dynamic size.
|
|
173
|
+
* @group Props
|
|
174
|
+
*/
|
|
175
|
+
this.scrollHeight = '';
|
|
176
|
+
/**
|
|
177
|
+
* Determines whether only the elements within scrollable area should be added into the DOM. Works only if scrollable prop is true.
|
|
178
|
+
* @group Props
|
|
179
|
+
*/
|
|
180
|
+
this.virtualScroll = false;
|
|
181
|
+
/**
|
|
182
|
+
* Determines how many additional elements to add to the DOM outside of the view.
|
|
183
|
+
* @group Props
|
|
184
|
+
*/
|
|
185
|
+
this.numToleratedItems = 10;
|
|
186
|
+
/**
|
|
187
|
+
* Determines whether the table should have paginator.
|
|
188
|
+
* @group Props
|
|
189
|
+
*/
|
|
190
|
+
this.paginator = false;
|
|
191
|
+
/**
|
|
192
|
+
* Determines whether to show paginator even if there is only one page.
|
|
193
|
+
* @group Props
|
|
194
|
+
*/
|
|
195
|
+
this.alwaysShowPaginator = true;
|
|
196
|
+
/**
|
|
197
|
+
* Array of integer values to display inside rows per page dropdown of paginator.
|
|
198
|
+
* @group Props
|
|
199
|
+
*/
|
|
200
|
+
this.rowsPerPageOptions = [];
|
|
201
|
+
/**
|
|
202
|
+
* Index of the first row to be displayed.
|
|
203
|
+
* @group Props
|
|
204
|
+
*/
|
|
205
|
+
this.first = 0;
|
|
206
|
+
/**
|
|
207
|
+
* Number of rows to display per page.
|
|
208
|
+
* @group Props
|
|
209
|
+
*/
|
|
210
|
+
this.rows = 0;
|
|
211
|
+
/**
|
|
212
|
+
* Determines whether to reset page on rows change.
|
|
213
|
+
* @group Props
|
|
214
|
+
*/
|
|
215
|
+
this.resetPageOnRowsChange = false;
|
|
216
|
+
/**
|
|
217
|
+
* Determines whether to reset page on table data sorting.
|
|
218
|
+
* @group Props
|
|
219
|
+
*/
|
|
220
|
+
this.resetPageOnSort = true;
|
|
221
|
+
/**
|
|
222
|
+
* Number of total records.
|
|
223
|
+
* @group Props
|
|
224
|
+
*/
|
|
225
|
+
this.totalRecords = 0;
|
|
226
|
+
/**
|
|
227
|
+
* Text to display when there is no data.
|
|
228
|
+
* @group Props
|
|
229
|
+
*/
|
|
230
|
+
this.emptyMessage = 'No data';
|
|
231
|
+
/**
|
|
232
|
+
* Height of table's body when there is no data, of type number denoting pixels or string.
|
|
233
|
+
* @group Props
|
|
234
|
+
*/
|
|
235
|
+
this.emptyBodyHeight = '';
|
|
236
|
+
/**
|
|
237
|
+
* Defines if data is loaded and interacted with in lazy manner.
|
|
238
|
+
* @group Props
|
|
239
|
+
*/
|
|
240
|
+
this.lazy = false;
|
|
241
|
+
/**
|
|
242
|
+
* Determines whether to call lazy loading on initialization.
|
|
243
|
+
* @group Props
|
|
244
|
+
*/
|
|
245
|
+
this.lazyLoadOnInit = true;
|
|
246
|
+
/**
|
|
247
|
+
* Determines whether to show global filter in the toolbar.
|
|
248
|
+
* @group Props
|
|
249
|
+
*/
|
|
250
|
+
this.showGlobalFilter = false;
|
|
251
|
+
/**
|
|
252
|
+
* Global filter placeholder.
|
|
253
|
+
* @group Props
|
|
254
|
+
*/
|
|
255
|
+
this.globalFilterPlaceholder = 'Search';
|
|
256
|
+
/**
|
|
257
|
+
* An array of fields to use in global filtering.
|
|
258
|
+
* @group Props
|
|
259
|
+
*/
|
|
260
|
+
this.globalFilterFields = [];
|
|
261
|
+
/**
|
|
262
|
+
* Determines whether to clear global filter on data loading.
|
|
263
|
+
* @group Props
|
|
264
|
+
*/
|
|
265
|
+
this.clearGlobalFilterOnLoading = false;
|
|
266
|
+
/**
|
|
267
|
+
* Determines whether to show remove button in the toolbar when rows are selected.
|
|
268
|
+
* @group Props
|
|
269
|
+
*/
|
|
270
|
+
this.showRemoveBtnOnSelect = true;
|
|
271
|
+
/**
|
|
272
|
+
* Determines whether removeBtnOnSelect is disabled.
|
|
273
|
+
* @group Props
|
|
274
|
+
*/
|
|
275
|
+
this.removeBtnOnSelectDisabled = false;
|
|
276
|
+
/**
|
|
277
|
+
* Determines whether to show additional button in the toolbar when rows are selected.
|
|
278
|
+
* @group Props
|
|
279
|
+
*/
|
|
280
|
+
this.showAdditionalBtnOnSelect = false;
|
|
281
|
+
/**
|
|
282
|
+
* AdditionalBtnOnSelect title.
|
|
283
|
+
* @group Props
|
|
284
|
+
*/
|
|
285
|
+
this.additionalBtnOnSelectTitle = 'Select action';
|
|
286
|
+
/**
|
|
287
|
+
* Determines whether additionalBtnOnSelect is disabled.
|
|
288
|
+
* @group Props
|
|
289
|
+
*/
|
|
290
|
+
this.additionalBtnOnSelectDisabled = false;
|
|
291
|
+
/**
|
|
292
|
+
* Determines whether to show action button in the toolbar.
|
|
293
|
+
* @group Props
|
|
294
|
+
*/
|
|
295
|
+
this.showActionBtn = false;
|
|
296
|
+
/**
|
|
297
|
+
* Action button title.
|
|
298
|
+
* @group Props
|
|
299
|
+
*/
|
|
300
|
+
this.actionBtnTitle = 'Action';
|
|
301
|
+
/**
|
|
302
|
+
* Determines whether actionBtn is disabled.
|
|
303
|
+
* @group Props
|
|
304
|
+
*/
|
|
305
|
+
this.actionBtnDisabled = false;
|
|
306
|
+
/**
|
|
307
|
+
* Determines whether to show export button in the toolbar.
|
|
308
|
+
* @group Props
|
|
309
|
+
*/
|
|
310
|
+
this.showExportBtn = false;
|
|
311
|
+
/**
|
|
312
|
+
* Determines whether exportBtn is disabled.
|
|
313
|
+
* @group Props
|
|
314
|
+
*/
|
|
315
|
+
this.exportBtnDisabled = false;
|
|
316
|
+
/**
|
|
317
|
+
* Name of the exported file.
|
|
318
|
+
* @group Props
|
|
319
|
+
*/
|
|
320
|
+
this.exportFilename = 'download';
|
|
321
|
+
/**
|
|
322
|
+
* Character to use as the csv separator.
|
|
323
|
+
* @group Props
|
|
324
|
+
*/
|
|
325
|
+
this.csvSeparator = ',';
|
|
326
|
+
/**
|
|
327
|
+
* Determines whether to show data reload button in the toolbar.
|
|
328
|
+
* @group Props
|
|
329
|
+
*/
|
|
330
|
+
this.showDataReloadBtn = false;
|
|
331
|
+
/**
|
|
332
|
+
* Determines whether dataReloadBtn is disabled.
|
|
333
|
+
* @group Props
|
|
334
|
+
*/
|
|
335
|
+
this.dataReloadBtnDisabled = false;
|
|
336
|
+
/**
|
|
337
|
+
* Determines whether the table should show columnsToggle menu, where you can choose which columns to be displayed. If external body template is provided, use columnsSelected event emitter.
|
|
338
|
+
* @group Props
|
|
339
|
+
*/
|
|
340
|
+
this.showColumnsToggleBtn = false;
|
|
341
|
+
/**
|
|
342
|
+
* Determines whether columnsToggle button is disabled.
|
|
343
|
+
* @group Props
|
|
344
|
+
*/
|
|
345
|
+
this.columnsToggleBtnDisabled = false;
|
|
346
|
+
/**
|
|
347
|
+
* Array of initial columns to show in the table. If not provided, all columns are initially visible.
|
|
348
|
+
* @group Props
|
|
349
|
+
*/
|
|
350
|
+
this.initialColumns = [];
|
|
351
|
+
/**
|
|
352
|
+
* Callback to invoke on selection changed. Returns selected rows.
|
|
353
|
+
* @param {any[]} any[] - selected rows.
|
|
354
|
+
* @group Emits
|
|
355
|
+
*/
|
|
356
|
+
this.rowsSelected = new EventEmitter();
|
|
357
|
+
/**
|
|
358
|
+
* Callback to invoke on selection changed. Returns selected rows indexes.
|
|
359
|
+
* @param {number[]} number[] - selected rows indexes.
|
|
360
|
+
* @group Emits
|
|
361
|
+
*/
|
|
362
|
+
this.selectedRowIndexes = new EventEmitter();
|
|
363
|
+
/**
|
|
364
|
+
* Callback to invoke when action button is clicked.
|
|
365
|
+
* @param {void} void - action button clicked.
|
|
366
|
+
* @group Emits
|
|
367
|
+
*/
|
|
368
|
+
this.actionBtnClicked = new EventEmitter();
|
|
369
|
+
/**
|
|
370
|
+
* Callback to invoke when edit-row button is clicked.
|
|
371
|
+
* @param {{row: any, index: number}} {row: any, index: number} - edit-row button clicked.
|
|
372
|
+
* @group Emits
|
|
373
|
+
*/
|
|
374
|
+
this.editRowBtnClicked = new EventEmitter();
|
|
375
|
+
/**
|
|
376
|
+
* Callback to invoke on rows removal. Returns rows.
|
|
377
|
+
* @param {any[]} any[] - array of rows to remove.
|
|
378
|
+
* @group Emits
|
|
379
|
+
*/
|
|
380
|
+
this.rowsToRemove = new EventEmitter();
|
|
381
|
+
/**
|
|
382
|
+
* Callback to invoke on rows removal. Returns rows indexes.
|
|
383
|
+
* @param {number[]} number[] - array of indexes of rows to remove.
|
|
384
|
+
* @group Emits
|
|
385
|
+
*/
|
|
386
|
+
this.rowIndexesToRemove = new EventEmitter();
|
|
387
|
+
/**
|
|
388
|
+
* Callback to invoke on page changed.
|
|
389
|
+
* @param {any} any - page changed.
|
|
390
|
+
* @group Emits
|
|
391
|
+
*/
|
|
392
|
+
this.pageChanged = new EventEmitter();
|
|
393
|
+
/**
|
|
394
|
+
* Callback to invoke when data is sorted.
|
|
395
|
+
* @param {any} any - sort meta.
|
|
396
|
+
* @group Emits
|
|
397
|
+
*/
|
|
398
|
+
this.sorted = new EventEmitter();
|
|
399
|
+
/**
|
|
400
|
+
* Callback to invoke when data is filtered.
|
|
401
|
+
* @param {any} any - custom filtering event.
|
|
402
|
+
* @group Emits
|
|
403
|
+
*/
|
|
404
|
+
this.filtered = new EventEmitter();
|
|
405
|
+
/**
|
|
406
|
+
* Callback to invoke when rows are reordered.
|
|
407
|
+
* @param {any} any - rows reordered.
|
|
408
|
+
* @group Emits
|
|
409
|
+
*/
|
|
410
|
+
this.rowsReordered = new EventEmitter();
|
|
411
|
+
/**
|
|
412
|
+
* Callback to invoke on columns selection.
|
|
413
|
+
* @param {object} object - selected column.
|
|
414
|
+
* @group Emits
|
|
415
|
+
*/
|
|
416
|
+
this.columnsSelected = new EventEmitter();
|
|
417
|
+
/**
|
|
418
|
+
* Callback to invoke when paging, sorting or filtering happens in lazy mode.
|
|
419
|
+
* @param {any} any - custom lazy loading event.
|
|
420
|
+
* @group Emits
|
|
421
|
+
*/
|
|
422
|
+
this.lazyLoaded = new EventEmitter();
|
|
423
|
+
/**
|
|
424
|
+
* Callback to invoke when data-reload button is clicked.
|
|
425
|
+
* @param {any} any - button clicked.
|
|
426
|
+
* @group Emits
|
|
427
|
+
*/
|
|
428
|
+
this.dataReloadBtnClicked = new EventEmitter();
|
|
429
|
+
/**
|
|
430
|
+
* Callback to invoke when additional button on select is clicked.
|
|
431
|
+
* @param {any[]} any[] - selected data.
|
|
432
|
+
* @group Emits
|
|
433
|
+
*/
|
|
434
|
+
this.additionalBtnOnSelectClicked = new EventEmitter();
|
|
435
|
+
/**
|
|
436
|
+
* A function to implement custom sorting. customSort must be true.
|
|
437
|
+
* @param {any} any - sort meta.
|
|
438
|
+
* @group Emits
|
|
439
|
+
*/
|
|
440
|
+
this.customSortFunction = new EventEmitter();
|
|
441
|
+
this._data = [];
|
|
442
|
+
this.selectedRows = [];
|
|
443
|
+
this.virtualScrollItemSize = 0;
|
|
444
|
+
this.rowOptions = [];
|
|
445
|
+
this.selectedColumns = [];
|
|
446
|
+
this.exportMenuItems = [
|
|
447
|
+
{
|
|
448
|
+
title: 'CSV',
|
|
449
|
+
icon: 'csv',
|
|
450
|
+
action: () => {
|
|
451
|
+
this.exportTable('csv');
|
|
452
|
+
}
|
|
453
|
+
},
|
|
454
|
+
{
|
|
455
|
+
title: 'XLSX',
|
|
456
|
+
icon: 'xls',
|
|
457
|
+
action: () => {
|
|
458
|
+
this.exportTable('xlsx');
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
// {
|
|
462
|
+
// title: 'PDF',
|
|
463
|
+
// icon: 'pdf',
|
|
464
|
+
// action: () => {
|
|
465
|
+
// this.exportTable('pdf');
|
|
466
|
+
// }
|
|
467
|
+
// }
|
|
468
|
+
];
|
|
469
|
+
}
|
|
470
|
+
ngOnInit() {
|
|
471
|
+
this.emptyBodyHeight = convertSize(this.emptyBodyHeight);
|
|
472
|
+
if (!this.scrollable)
|
|
473
|
+
this.virtualScroll = false;
|
|
474
|
+
if (this.showAdditionalBtnOnSelect)
|
|
475
|
+
this.showRemoveBtnOnSelect = false;
|
|
476
|
+
if (this.paginator) {
|
|
477
|
+
if (this.rowsPerPageOptions.length < 1)
|
|
478
|
+
this.rowsPerPageOptions = [5, 10, 25, 50];
|
|
479
|
+
if (!this.rows)
|
|
480
|
+
this.rows = this.rowsPerPageOptions[0];
|
|
481
|
+
else {
|
|
482
|
+
if (!this.rowsPerPageOptions.includes(this.rows)) {
|
|
483
|
+
throw new Error('rowsPerPageOptions must include rows');
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
this.rowOptions = this.rowsPerPageOptions.map((v) => ({
|
|
487
|
+
label: '' + v,
|
|
488
|
+
value: v
|
|
489
|
+
}));
|
|
490
|
+
}
|
|
491
|
+
if (this.showGlobalFilter &&
|
|
492
|
+
this.globalFilterFields?.length < 1 &&
|
|
493
|
+
this.data?.length > 0) {
|
|
494
|
+
this.globalFilterFields = Object.keys(this.data[0]);
|
|
495
|
+
}
|
|
496
|
+
this.selectedColumns =
|
|
497
|
+
this.initialColumns.length > 0 ? this.initialColumns : this.columns;
|
|
498
|
+
}
|
|
499
|
+
get styleClass() {
|
|
500
|
+
const classesList = [];
|
|
501
|
+
switch (this.size) {
|
|
502
|
+
case 'small':
|
|
503
|
+
classesList.push('p-datatable-sm');
|
|
504
|
+
break;
|
|
505
|
+
case 'large':
|
|
506
|
+
classesList.push('p-datatable-lg');
|
|
507
|
+
break;
|
|
508
|
+
}
|
|
509
|
+
if (this.hasToolbar) {
|
|
510
|
+
switch (this.toolbarSize) {
|
|
511
|
+
case 'small':
|
|
512
|
+
classesList.push('cps-tbar-small');
|
|
513
|
+
break;
|
|
514
|
+
case 'normal':
|
|
515
|
+
classesList.push('cps-tbar-normal');
|
|
516
|
+
break;
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
if (this.striped) {
|
|
520
|
+
classesList.push('p-datatable-striped');
|
|
521
|
+
}
|
|
522
|
+
if (this.bordered) {
|
|
523
|
+
classesList.push('p-datatable-gridlines');
|
|
524
|
+
}
|
|
525
|
+
return classesList.join(' ');
|
|
526
|
+
}
|
|
527
|
+
ngAfterViewChecked() {
|
|
528
|
+
if (!this.virtualScroll || this.virtualScrollItemSize)
|
|
529
|
+
return;
|
|
530
|
+
this.virtualScrollItemSize =
|
|
531
|
+
this.primengTable?.el?.nativeElement
|
|
532
|
+
?.querySelector('.p-datatable-tbody')
|
|
533
|
+
?.querySelector('tr')?.clientHeight || 0;
|
|
534
|
+
this.cdRef.detectChanges();
|
|
535
|
+
}
|
|
536
|
+
ngOnChanges(changes) {
|
|
537
|
+
if (this.loading) {
|
|
538
|
+
this.clearSelection();
|
|
539
|
+
if (this.clearGlobalFilterOnLoading)
|
|
540
|
+
this.clearGlobalFilter();
|
|
541
|
+
}
|
|
542
|
+
if (changes?.data) {
|
|
543
|
+
this.resetSortingState();
|
|
544
|
+
this.selectedRows = this.selectedRows.filter((sr) => this.data.includes(sr));
|
|
545
|
+
}
|
|
546
|
+
}
|
|
547
|
+
resetSortingState() {
|
|
548
|
+
this.tUnsortDirective?.resetDefaultSortOrder();
|
|
549
|
+
}
|
|
550
|
+
clearSelection() {
|
|
551
|
+
this.selectedRows = [];
|
|
552
|
+
}
|
|
553
|
+
clearGlobalFilter() {
|
|
554
|
+
this.globalFilterComp?.clear();
|
|
555
|
+
}
|
|
556
|
+
onSelectionChanged(selection) {
|
|
557
|
+
this.rowsSelected.emit(selection);
|
|
558
|
+
const indexes = this._getIndexes(selection);
|
|
559
|
+
this.selectedRowIndexes.emit(indexes);
|
|
560
|
+
}
|
|
561
|
+
onSortFunction(event) {
|
|
562
|
+
this.customSortFunction.emit(event);
|
|
563
|
+
}
|
|
564
|
+
onFilterGlobal(value) {
|
|
565
|
+
this.primengTable.filterGlobal(value, 'contains');
|
|
566
|
+
}
|
|
567
|
+
removeSelected() {
|
|
568
|
+
this.rowsToRemove.emit(this.selectedRows);
|
|
569
|
+
const indexes = this._getIndexes(this.selectedRows);
|
|
570
|
+
this.rowIndexesToRemove.emit(indexes);
|
|
571
|
+
}
|
|
572
|
+
onClickAdditionalBtnOnSelect() {
|
|
573
|
+
this.additionalBtnOnSelectClicked.emit(this.selectedRows);
|
|
574
|
+
}
|
|
575
|
+
onClickActionBtn() {
|
|
576
|
+
this.actionBtnClicked.emit();
|
|
577
|
+
}
|
|
578
|
+
onRowsPerPageChanged() {
|
|
579
|
+
if (this.resetPageOnRowsChange) {
|
|
580
|
+
this.primengTable.first = 0;
|
|
581
|
+
}
|
|
582
|
+
this.changePage(this.getPage());
|
|
583
|
+
}
|
|
584
|
+
getPageCount() {
|
|
585
|
+
return Math.ceil(this.primengTable.totalRecords / this.rows);
|
|
586
|
+
}
|
|
587
|
+
getPage() {
|
|
588
|
+
// Todo: Use explicit type
|
|
589
|
+
return Math.floor(this.primengTable.first / this.rows);
|
|
590
|
+
}
|
|
591
|
+
changePage(p) {
|
|
592
|
+
const pc = Math.ceil(this.getPageCount());
|
|
593
|
+
if (p >= 0 && p < pc) {
|
|
594
|
+
this.first = this.rows * p;
|
|
595
|
+
this.primengTable.onPageChange({ first: this.first, rows: this.rows });
|
|
596
|
+
}
|
|
597
|
+
}
|
|
598
|
+
onPageChange(event) {
|
|
599
|
+
this.first = event.first;
|
|
600
|
+
this.rows = event.rows;
|
|
601
|
+
const state = {
|
|
602
|
+
page: this.getPage(),
|
|
603
|
+
first: this.first,
|
|
604
|
+
rows: this.rows,
|
|
605
|
+
pageCount: Math.ceil(this.getPageCount())
|
|
606
|
+
};
|
|
607
|
+
this.pageChanged.emit(state);
|
|
608
|
+
}
|
|
609
|
+
toggleAllColumns() {
|
|
610
|
+
this.selectedColumns =
|
|
611
|
+
this.selectedColumns.length < this.columns.length ? this.columns : [];
|
|
612
|
+
this.columnsSelected.emit(this.selectedColumns);
|
|
613
|
+
}
|
|
614
|
+
isColumnSelected(col) {
|
|
615
|
+
return this.selectedColumns.some((item) => isEqual(item, col));
|
|
616
|
+
}
|
|
617
|
+
onSelectColumn(col) {
|
|
618
|
+
let res = [];
|
|
619
|
+
if (this.isColumnSelected(col)) {
|
|
620
|
+
res = this.selectedColumns.filter((v) => !isEqual(v, col));
|
|
621
|
+
}
|
|
622
|
+
else {
|
|
623
|
+
this.columns.forEach((o) => {
|
|
624
|
+
if (this.selectedColumns.some((v) => isEqual(v, o)) ||
|
|
625
|
+
isEqual(col, o)) {
|
|
626
|
+
res.push(o);
|
|
627
|
+
}
|
|
628
|
+
});
|
|
629
|
+
}
|
|
630
|
+
this.selectedColumns = res;
|
|
631
|
+
this.columnsSelected.emit(this.selectedColumns);
|
|
632
|
+
}
|
|
633
|
+
onEditRowClicked(row) {
|
|
634
|
+
const [index] = this._getIndexes([row]);
|
|
635
|
+
this.editRowBtnClicked.emit({ row, index });
|
|
636
|
+
}
|
|
637
|
+
onRemoveRowClicked(item) {
|
|
638
|
+
this.rowsToRemove.emit([item]);
|
|
639
|
+
const indexes = this._getIndexes([item]);
|
|
640
|
+
this.rowIndexesToRemove.emit(indexes);
|
|
641
|
+
}
|
|
642
|
+
onSort(event) {
|
|
643
|
+
this.sorted.emit(event);
|
|
644
|
+
}
|
|
645
|
+
onFilter(event) {
|
|
646
|
+
this.filtered.emit(event);
|
|
647
|
+
}
|
|
648
|
+
onRowReorder(event) {
|
|
649
|
+
this.rowsReordered.emit(event);
|
|
650
|
+
}
|
|
651
|
+
onLazyLoaded(event) {
|
|
652
|
+
this.lazyLoaded.emit(event);
|
|
653
|
+
}
|
|
654
|
+
onReloadData() {
|
|
655
|
+
if (this.dataReloadBtnDisabled)
|
|
656
|
+
return;
|
|
657
|
+
this.dataReloadBtnClicked.emit();
|
|
658
|
+
}
|
|
659
|
+
onExportData(event) {
|
|
660
|
+
if (this.exportBtnDisabled)
|
|
661
|
+
return;
|
|
662
|
+
this.exportMenu?.toggle(event);
|
|
663
|
+
}
|
|
664
|
+
onColumnsToggle(event) {
|
|
665
|
+
if (this.columnsToggleBtnDisabled)
|
|
666
|
+
return;
|
|
667
|
+
this.colToggleMenu?.toggle(event);
|
|
668
|
+
}
|
|
669
|
+
_getIndexes(rows) {
|
|
670
|
+
let indexes = rows.map((row) => this.primengTable.value.indexOf(row));
|
|
671
|
+
const indexesMap = this.tUnsortDirective?.sortIndices;
|
|
672
|
+
if (indexesMap && indexesMap.length > 0) {
|
|
673
|
+
indexes = indexes.map((i) => indexesMap.indexOf(i));
|
|
674
|
+
}
|
|
675
|
+
return indexes;
|
|
676
|
+
}
|
|
677
|
+
exportTable(format) {
|
|
678
|
+
if (this.columns.length < 1)
|
|
679
|
+
throw new Error('Columns must be defined!');
|
|
680
|
+
if (this.selectedColumns.length < 1)
|
|
681
|
+
throw new Error('Nothing to export!');
|
|
682
|
+
switch (format) {
|
|
683
|
+
case 'csv':
|
|
684
|
+
this.primengTable.exportCSV();
|
|
685
|
+
break;
|
|
686
|
+
case 'xlsx':
|
|
687
|
+
this.exportXLSX();
|
|
688
|
+
break;
|
|
689
|
+
// case 'pdf':
|
|
690
|
+
// this.exportPDF();
|
|
691
|
+
// break;
|
|
692
|
+
}
|
|
693
|
+
}
|
|
694
|
+
exportXLSX() {
|
|
695
|
+
import('xlsx').then((xlsx) => {
|
|
696
|
+
const sheetData = [
|
|
697
|
+
this.selectedColumns.map((c) => c[this.colHeaderName]),
|
|
698
|
+
...this.primengTable.value.map((item) => this.selectedColumns.map((c) => item[c[this.colFieldName]]))
|
|
699
|
+
];
|
|
700
|
+
const worksheet = xlsx.utils.json_to_sheet(sheetData, {
|
|
701
|
+
skipHeader: true
|
|
702
|
+
});
|
|
703
|
+
const workbook = {
|
|
704
|
+
Sheets: { [this.exportFilename]: worksheet },
|
|
705
|
+
SheetNames: [this.exportFilename]
|
|
706
|
+
};
|
|
707
|
+
const xlsxBuffer = xlsx.write(workbook, {
|
|
708
|
+
bookType: 'xlsx',
|
|
709
|
+
type: 'array'
|
|
710
|
+
});
|
|
711
|
+
const EXCEL_TYPE = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8';
|
|
712
|
+
const blob = new Blob([xlsxBuffer], {
|
|
713
|
+
type: EXCEL_TYPE
|
|
714
|
+
});
|
|
715
|
+
const downloadLink = document.createElement('a');
|
|
716
|
+
downloadLink.href = URL.createObjectURL(blob);
|
|
717
|
+
downloadLink.download = `${this.exportFilename}.xlsx`;
|
|
718
|
+
downloadLink.click();
|
|
719
|
+
});
|
|
720
|
+
}
|
|
721
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: CpsTableComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
722
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.2", type: CpsTableComponent, isStandalone: true, selector: "cps-table", inputs: { columns: "columns", colHeaderName: "colHeaderName", colFieldName: "colFieldName", striped: "striped", bordered: "bordered", size: "size", selectable: "selectable", rowHover: "rowHover", dataKey: "dataKey", showRowMenu: "showRowMenu", showRowRemoveButton: "showRowRemoveButton", showRowEditButton: "showRowEditButton", reorderableRows: "reorderableRows", loading: "loading", tableStyle: "tableStyle", tableStyleClass: "tableStyleClass", sortable: "sortable", sortMode: "sortMode", customSort: "customSort", hasToolbar: "hasToolbar", toolbarSize: "toolbarSize", toolbarTitle: "toolbarTitle", toolbarIcon: "toolbarIcon", toolbarIconColor: "toolbarIconColor", scrollable: "scrollable", scrollHeight: "scrollHeight", virtualScroll: "virtualScroll", numToleratedItems: "numToleratedItems", paginator: "paginator", alwaysShowPaginator: "alwaysShowPaginator", rowsPerPageOptions: "rowsPerPageOptions", first: "first", rows: "rows", resetPageOnRowsChange: "resetPageOnRowsChange", resetPageOnSort: "resetPageOnSort", totalRecords: "totalRecords", emptyMessage: "emptyMessage", emptyBodyHeight: "emptyBodyHeight", lazy: "lazy", lazyLoadOnInit: "lazyLoadOnInit", showGlobalFilter: "showGlobalFilter", globalFilterPlaceholder: "globalFilterPlaceholder", globalFilterFields: "globalFilterFields", clearGlobalFilterOnLoading: "clearGlobalFilterOnLoading", showRemoveBtnOnSelect: "showRemoveBtnOnSelect", removeBtnOnSelectDisabled: "removeBtnOnSelectDisabled", showAdditionalBtnOnSelect: "showAdditionalBtnOnSelect", additionalBtnOnSelectTitle: "additionalBtnOnSelectTitle", additionalBtnOnSelectDisabled: "additionalBtnOnSelectDisabled", showActionBtn: "showActionBtn", actionBtnTitle: "actionBtnTitle", actionBtnDisabled: "actionBtnDisabled", showExportBtn: "showExportBtn", exportBtnDisabled: "exportBtnDisabled", exportFilename: "exportFilename", csvSeparator: "csvSeparator", showDataReloadBtn: "showDataReloadBtn", dataReloadBtnDisabled: "dataReloadBtnDisabled", showColumnsToggleBtn: "showColumnsToggleBtn", columnsToggleBtnDisabled: "columnsToggleBtnDisabled", initialColumns: "initialColumns", data: "data" }, outputs: { rowsSelected: "rowsSelected", selectedRowIndexes: "selectedRowIndexes", actionBtnClicked: "actionBtnClicked", editRowBtnClicked: "editRowBtnClicked", rowsToRemove: "rowsToRemove", rowIndexesToRemove: "rowIndexesToRemove", pageChanged: "pageChanged", sorted: "sorted", filtered: "filtered", rowsReordered: "rowsReordered", columnsSelected: "columnsSelected", lazyLoaded: "lazyLoaded", dataReloadBtnClicked: "dataReloadBtnClicked", additionalBtnOnSelectClicked: "additionalBtnOnSelectClicked", customSortFunction: "customSortFunction" }, providers: [
|
|
723
|
+
TableService,
|
|
724
|
+
{
|
|
725
|
+
provide: Table,
|
|
726
|
+
useFactory: tableFactory,
|
|
727
|
+
// eslint-disable-next-line no-use-before-define
|
|
728
|
+
deps: [CpsTableComponent]
|
|
729
|
+
}
|
|
730
|
+
], queries: [{ propertyName: "toolbarTemplate", first: true, predicate: ["toolbar"], descendants: true }, { propertyName: "headerTemplate", first: true, predicate: ["header"], descendants: true }, { propertyName: "nestedHeaderTemplate", first: true, predicate: ["nestedHeader"], descendants: true }, { propertyName: "bodyTemplate", first: true, predicate: ["body"], descendants: true }, { propertyName: "rowExpansionTemplate", first: true, predicate: ["rowexpansion"], descendants: true }], viewQueries: [{ propertyName: "primengTable", first: true, predicate: ["primengTable"], descendants: true, static: true }, { propertyName: "globalFilterComp", first: true, predicate: ["globalFilterComp"], descendants: true }, { propertyName: "exportMenu", first: true, predicate: ["exportMenu"], descendants: true }, { propertyName: "colToggleMenu", first: true, predicate: ["colToggleMenu"], descendants: true }, { propertyName: "tUnsortDirective", first: true, predicate: ["tUnsortDirective"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<p-table\n #primengTable\n #tUnsortDirective=\"tWithUnsort\"\n tWithUnsort\n [ngClass]=\"{ 'cps-table-loading': loading }\"\n [styleClass]=\"styleClass\"\n [tableStyle]=\"tableStyle\"\n [tableStyleClass]=\"tableStyleClass\"\n [value]=\"data\"\n [dataKey]=\"dataKey\"\n [columns]=\"selectedColumns\"\n (selectionChange)=\"onSelectionChanged($event)\"\n [globalFilterFields]=\"globalFilterFields\"\n [showInitialSortBadge]=\"false\"\n [loading]=\"loading\"\n [scrollable]=\"scrollable\"\n [scrollHeight]=\"scrollHeight\"\n [lazy]=\"lazy\"\n [lazyLoadOnInit]=\"lazyLoadOnInit\"\n [virtualScroll]=\"virtualScroll\"\n [virtualScrollItemSize]=\"virtualScrollItemSize\"\n [virtualScrollOptions]=\"{ numToleratedItems: numToleratedItems }\"\n [paginator]=\"paginator\"\n [showCurrentPageReport]=\"true\"\n [alwaysShowPaginator]=\"alwaysShowPaginator\"\n [rows]=\"rows\"\n [first]=\"first\"\n [totalRecords]=\"totalRecords\"\n [resetPageOnSort]=\"resetPageOnSort\"\n currentPageReportTemplate=\"{first} - {last} of {totalRecords}\"\n [(selection)]=\"selectedRows\"\n [metaKeySelection]=\"false\"\n [rowHover]=\"rowHover\"\n [customSort]=\"customSort\"\n [sortMode]=\"sortMode\"\n [exportFilename]=\"exportFilename\"\n [csvSeparator]=\"csvSeparator\"\n (onPage)=\"onPageChange($event)\"\n (onLazyLoad)=\"onLazyLoaded($event)\"\n (sortFunction)=\"onSortFunction($event)\"\n (onSort)=\"onSort($event)\"\n (onFilter)=\"onFilter($event)\"\n (onRowReorder)=\"onRowReorder($event)\">\n <ng-template pTemplate=\"caption\" *ngIf=\"hasToolbar\">\n <ng-container *ngIf=\"toolbarTemplate\">\n <ng-container *ngTemplateOutlet=\"toolbarTemplate\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!toolbarTemplate\">\n <div class=\"cps-table-tbar-left\">\n <div *ngIf=\"toolbarIcon\" class=\"cps-table-tbar-icon\">\n <cps-icon [icon]=\"toolbarIcon\" [color]=\"toolbarIconColor\"></cps-icon>\n </div>\n <div class=\"cps-table-tbar-title\">{{ toolbarTitle }}</div>\n <div *ngIf=\"showGlobalFilter\" class=\"cps-table-tbar-global-filter\">\n <cps-input\n #globalFilterComp\n prefixIcon=\"search\"\n [placeholder]=\"globalFilterPlaceholder\"\n (valueChanged)=\"onFilterGlobal($event)\"\n [clearable]=\"true\"\n [disabled]=\"loading\"\n [appearance]=\"toolbarSize === 'small' ? 'underlined' : 'outlined'\"\n [hideDetails]=\"true\">\n </cps-input>\n </div>\n </div>\n <div class=\"cps-table-tbar-right\">\n <div\n *ngIf=\"showRemoveBtnOnSelect && selectedRows.length > 0\"\n class=\"cps-table-tbar-btn-on-select\">\n <cps-button\n label=\"Remove\"\n [disabled]=\"removeBtnOnSelectDisabled\"\n color=\"prepared\"\n type=\"borderless\"\n icon=\"remove\"\n [size]=\"toolbarSize\"\n (clicked)=\"removeSelected()\">\n </cps-button>\n </div>\n <div\n *ngIf=\"showAdditionalBtnOnSelect && selectedRows.length > 0\"\n class=\"cps-table-tbar-btn-on-select\">\n <cps-button\n [label]=\"additionalBtnOnSelectTitle\"\n [disabled]=\"additionalBtnOnSelectDisabled\"\n color=\"prepared\"\n type=\"borderless\"\n [size]=\"toolbarSize\"\n (clicked)=\"onClickAdditionalBtnOnSelect()\">\n </cps-button>\n </div>\n <div *ngIf=\"showActionBtn\" class=\"cps-table-tbar-action-btn\">\n <cps-button\n [label]=\"actionBtnTitle\"\n [disabled]=\"actionBtnDisabled\"\n color=\"prepared\"\n type=\"outlined\"\n [size]=\"toolbarSize\"\n (clicked)=\"onClickActionBtn()\">\n </cps-button>\n </div>\n <div\n *ngIf=\"showColumnsToggleBtn && columns.length > 0\"\n class=\"cps-table-tbar-coltoggle-btn\"\n [ngClass]=\"{ 'btn-disabled': columnsToggleBtnDisabled }\">\n <cps-icon\n icon=\"columns\"\n size=\"normal\"\n [color]=\"\n columnsToggleBtnDisabled ? 'text-lightest' : 'prepared-lighten1'\n \"\n (click)=\"onColumnsToggle($event)\"></cps-icon>\n <cps-menu #colToggleMenu [withArrow]=\"false\">\n <div class=\"cps-table-coltoggle-menu\">\n <div\n class=\"cps-table-coltoggle-menu-item select-all-option\"\n [class.allselected]=\"selectedColumns.length === columns.length\"\n (click)=\"toggleAllColumns()\">\n <span class=\"cps-table-coltoggle-menu-item-left\">\n <span class=\"cps-table-coltoggle-menu-item-check\"> </span>\n <span class=\"cps-table-coltoggle-menu-item-label\"\n >Show all columns</span\n >\n </span>\n </div>\n <div\n *ngFor=\"let col of columns\"\n class=\"cps-table-coltoggle-menu-item\"\n (click)=\"onSelectColumn(col)\"\n [class.selected]=\"isColumnSelected(col)\">\n <span class=\"cps-table-coltoggle-menu-item-left\">\n <span class=\"cps-table-coltoggle-menu-item-check\"></span>\n <span class=\"cps-table-coltoggle-menu-item-label\">{{\n col[colHeaderName]\n }}</span>\n </span>\n </div>\n </div>\n </cps-menu>\n </div>\n <div\n *ngIf=\"showExportBtn\"\n class=\"cps-table-tbar-export-btn\"\n [ngClass]=\"{ 'btn-disabled': exportBtnDisabled }\">\n <cps-icon\n icon=\"export\"\n size=\"20\"\n [color]=\"exportBtnDisabled ? 'text-light' : 'prepared-lighten1'\"\n (click)=\"onExportData($event)\"></cps-icon>\n <cps-menu\n #exportMenu\n [items]=\"exportMenuItems\"\n [compressed]=\"true\"\n [withArrow]=\"false\">\n </cps-menu>\n </div>\n <div\n *ngIf=\"showDataReloadBtn\"\n class=\"cps-table-tbar-reload-btn\"\n [ngClass]=\"{ 'btn-disabled': dataReloadBtnDisabled }\">\n <cps-icon\n icon=\"refresh\"\n size=\"18\"\n [color]=\"dataReloadBtnDisabled ? 'text-light' : 'prepared-lighten1'\"\n (click)=\"onReloadData()\">\n </cps-icon>\n </div>\n </div>\n </ng-container>\n </ng-template>\n\n <ng-template pTemplate=\"header\" *ngIf=\"nestedHeaderTemplate\" let-columns>\n <ng-container\n *ngTemplateOutlet=\"\n nestedHeaderTemplate;\n context: {\n $implicit: columns,\n }\n \"></ng-container>\n </ng-template>\n\n <ng-template pTemplate=\"header\" *ngIf=\"!nestedHeaderTemplate\" let-columns>\n <tr>\n <th style=\"width: 3rem\" *ngIf=\"rowExpansionTemplate\"></th>\n <th style=\"width: 3rem\" *ngIf=\"reorderableRows\"></th>\n <th style=\"width: 4rem\" *ngIf=\"selectable\">\n <p-tableHeaderCheckbox></p-tableHeaderCheckbox>\n </th>\n <ng-container *ngIf=\"headerTemplate\">\n <ng-container\n *ngTemplateOutlet=\"\n headerTemplate;\n context: {\n $implicit: columns,\n }\n \"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!headerTemplate && columns.length > 0\">\n <ng-container *ngIf=\"sortable\">\n <th *ngFor=\"let col of columns\" [cpsTColSortable]=\"col[colFieldName]\">\n {{ col[colHeaderName] }}\n </th>\n </ng-container>\n <ng-container *ngIf=\"!sortable\">\n <th *ngFor=\"let col of columns\">\n {{ col[colHeaderName] }}\n </th>\n </ng-container>\n </ng-container>\n <th\n style=\"width: 2rem\"\n class=\"cps-table-row-menu-cell\"\n *ngIf=\"showRowMenu && (showRowRemoveButton || showRowEditButton)\"></th>\n </tr>\n </ng-template>\n\n <ng-template\n pTemplate=\"body\"\n let-rowData\n let-columns=\"columns\"\n let-item\n let-rowIndex=\"rowIndex\"\n let-expanded=\"expanded\">\n <tr\n [pReorderableRow]=\"rowIndex\"\n [ngClass]=\"{\n 'cps-table-row-selected': selectable && primengTable.isSelected(item)\n }\">\n <td *ngIf=\"rowExpansionTemplate\" class=\"cps-table-row-chevron-cell\">\n <div\n class=\"cps-table-row-chevron\"\n [ngClass]=\"{ 'cps-table-row-chevron-expanded': expanded }\">\n <cps-icon\n icon=\"chevron-down\"\n size=\"small\"\n color=\"text-dark\"\n [pRowToggler]=\"item\">\n </cps-icon>\n </div>\n </td>\n <td *ngIf=\"reorderableRows\" class=\"cps-table-row-drag-handle-cell\">\n <span class=\"cps-table-row-drag-handle\" pReorderableRowHandle>\u2630</span>\n </td>\n <td *ngIf=\"selectable\">\n <p-tableCheckbox [value]=\"item\"></p-tableCheckbox>\n </td>\n <ng-container *ngIf=\"bodyTemplate\">\n <ng-container\n *ngTemplateOutlet=\"\n bodyTemplate;\n context: {\n $implicit: item,\n rowIndex: rowIndex,\n columns: columns,\n rowData: rowData\n }\n \">\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"!bodyTemplate\">\n <ng-container *ngIf=\"columns.length > 0\">\n <td *ngFor=\"let col of columns\">\n {{ rowData[col[colFieldName]] }}\n </td>\n </ng-container>\n </ng-container>\n <td\n *ngIf=\"showRowMenu && (showRowRemoveButton || showRowEditButton)\"\n class=\"cps-table-row-menu-cell\">\n <table-row-menu\n (editRowBtnClicked)=\"onEditRowClicked(item)\"\n (removeRowBtnClicked)=\"onRemoveRowClicked(item)\"\n [showRowRemoveButton]=\"showRowRemoveButton\"\n [showRowEditButton]=\"showRowEditButton\">\n </table-row-menu>\n </td>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"rowexpansion\" *ngIf=\"rowExpansionTemplate\" let-item>\n <tr class=\"cps-table-row-expanded-content\">\n <td colspan=\"100\">\n <ng-container\n *ngTemplateOutlet=\"\n rowExpansionTemplate;\n context: {\n $implicit: item\n }\n \"></ng-container>\n </td>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"emptymessage\">\n <tr>\n <td\n colspan=\"100\"\n class=\"cps-table-empty-message-td\"\n [ngStyle]=\"{ height: emptyBodyHeight }\">\n {{ emptyMessage }}\n </td>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"loadingicon\">\n <cps-loader [fullScreen]=\"false\" opacity=\"0\"></cps-loader>\n </ng-template>\n <ng-template pTemplate=\"paginatorleft\">\n <div class=\"cps-table-paginator-itms-per-page\">\n <span class=\"cps-table-paginator-items-per-page-title\"\n >Rows per page:\n </span>\n <cps-select\n [options]=\"rowOptions\"\n [hideDetails]=\"true\"\n [(ngModel)]=\"rows\"\n (valueChanged)=\"onRowsPerPageChanged()\"\n [returnObject]=\"false\"\n optionsClass=\"cps-paginator-page-options\">\n </cps-select>\n </div>\n </ng-template>\n</p-table>\n", styles: [":host ::ng-deep .p-component{font-family:Source Sans Pro,sans-serif;font-size:14px;font-weight:400}:host ::ng-deep .p-datatable-flex-scrollable{display:flex;flex-direction:column;height:100%}:host ::ng-deep .p-datatable{position:relative}:host ::ng-deep .p-datatable.p-datatable-gridlines .p-datatable-header{border-width:1px 1px 0 1px}:host ::ng-deep .p-datatable .p-datatable-header{font-weight:600;display:flex;justify-content:space-between;align-items:center;padding:0 10px;border:unset;background:unset;border-top:1px solid var(--cps-color-line-mid);border-right:1px solid var(--cps-color-line-mid);border-left:4px solid var(--cps-color-surprise)!important;border-radius:4px 4px 0 0;font-size:16px;line-height:150%;background-color:#fff;color:var(--cps-color-text-darkest);overflow:auto}:host ::ng-deep .p-datatable .p-datatable-header .cps-table-tbar-left{display:flex;align-items:center}:host ::ng-deep .p-datatable .p-datatable-header .cps-table-tbar-left .cps-table-tbar-global-filter{margin-left:12px}:host ::ng-deep .p-datatable .p-datatable-header .cps-table-tbar-left .cps-table-tbar-icon{display:flex;margin-right:8px}:host ::ng-deep .p-datatable .p-datatable-header .cps-table-tbar-left .cps-table-tbar-title{cursor:default}:host ::ng-deep .p-datatable .p-datatable-header .cps-table-tbar-right{display:flex;align-items:center}:host ::ng-deep .p-datatable .p-datatable-header .cps-table-tbar-right .cps-table-tbar-btn-on-select{margin-right:4px}:host ::ng-deep .p-datatable .p-datatable-header .cps-table-tbar-right .cps-table-tbar-action-btn{margin-right:4px;margin-left:8px}:host ::ng-deep .p-datatable .p-datatable-header .cps-table-tbar-right .cps-table-tbar-coltoggle-btn,:host ::ng-deep .p-datatable .p-datatable-header .cps-table-tbar-right .cps-table-tbar-export-btn,:host ::ng-deep .p-datatable .p-datatable-header .cps-table-tbar-right .cps-table-tbar-reload-btn{display:contents}:host ::ng-deep .p-datatable .p-datatable-header .cps-table-tbar-right .cps-table-tbar-coltoggle-btn cps-icon,:host ::ng-deep .p-datatable .p-datatable-header .cps-table-tbar-right .cps-table-tbar-export-btn cps-icon,:host ::ng-deep .p-datatable .p-datatable-header .cps-table-tbar-right .cps-table-tbar-reload-btn cps-icon{margin-left:12px;margin-right:4px}:host ::ng-deep .p-datatable .p-datatable-header .cps-table-tbar-right .cps-table-tbar-coltoggle-btn:not(.btn-disabled) cps-icon,:host ::ng-deep .p-datatable .p-datatable-header .cps-table-tbar-right .cps-table-tbar-export-btn:not(.btn-disabled) cps-icon,:host ::ng-deep .p-datatable .p-datatable-header .cps-table-tbar-right .cps-table-tbar-reload-btn:not(.btn-disabled) cps-icon{cursor:pointer}:host ::ng-deep .p-datatable .p-datatable-header .cps-table-tbar-right .cps-table-tbar-coltoggle-btn:not(.btn-disabled) cps-icon:hover .cps-icon,:host ::ng-deep .p-datatable .p-datatable-header .cps-table-tbar-right .cps-table-tbar-export-btn:not(.btn-disabled) cps-icon:hover .cps-icon,:host ::ng-deep .p-datatable .p-datatable-header .cps-table-tbar-right .cps-table-tbar-reload-btn:not(.btn-disabled) cps-icon:hover .cps-icon{color:var(--cps-color-prepared)!important}:host ::ng-deep .cps-tbar-small.p-datatable .p-datatable-header{height:43px}:host ::ng-deep .cps-tbar-normal.p-datatable .p-datatable-header{height:72px}:host ::ng-deep .p-datatable-flex-scrollable>.p-datatable-wrapper{display:flex;flex-direction:column;flex:1;height:100%}:host ::ng-deep .p-datatable-scrollable>.p-datatable-wrapper{position:relative}:host ::ng-deep .p-datatable>.p-datatable-wrapper{overflow:auto}:host ::ng-deep .p-datatable-table{border-spacing:0px;width:100%}:host ::ng-deep .p-datatable.p-datatable-scrollable>.p-datatable-wrapper>.p-datatable-table>.p-datatable-thead,:host ::ng-deep .p-datatable.p-datatable-scrollable>.p-datatable-wrapper>.p-datatable-table>.p-datatable-tfoot,:host ::ng-deep .p-datatable.p-datatable-scrollable>.p-datatable-wrapper>.p-scroller-viewport>.p-scroller>.p-datatable-table>.p-datatable-thead,:host ::ng-deep .p-datatable.p-datatable-scrollable>.p-datatable-wrapper>.p-scroller-viewport>.p-scroller>.p-datatable-table>.p-datatable-tfoot{background-color:#fff}:host ::ng-deep .p-datatable-scrollable-table>.p-datatable-thead{position:sticky;top:0;z-index:1}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th{padding:.5rem}:host ::ng-deep .p-datatable.p-datatable-lg .p-datatable-thead>tr>th{padding:1.25rem}:host ::ng-deep .p-datatable .p-datatable-thead>tr>th{text-align:left;padding:1rem;border:1px solid var(--cps-color-line-mid);border-width:0 0 1px 1px;font-weight:400;color:var(--cps-color-text-mild);background:#fff;transition:box-shadow .2s}:host ::ng-deep .p-datatable .p-datatable-thead>tr>th:last-child{border-width:1px}:host ::ng-deep .p-datatable .p-datatable-thead>tr>th{border-width:1px 0 1px 1px}:host ::ng-deep .p-datatable .p-datatable-thead tr:not(:first-child) th{border-top:unset}:host ::ng-deep .p-datatable .p-sortable-column:not(.p-highlight):hover .cps-sortable-column-icon.sort-unsorted .sort-unsorted-arrow-up{border-bottom-color:var(--cps-color-text-mild)}:host ::ng-deep .p-datatable .p-sortable-column:not(.p-highlight):hover .cps-sortable-column-icon.sort-unsorted .sort-unsorted-arrow-down{border-top-color:var(--cps-color-text-mild)}:host ::ng-deep .p-icon{display:inline-block;width:1rem;height:1rem}:host ::ng-deep .p-datatable .p-sortable-column .cps-sortable-column-badge{display:inline-flex;align-items:center;justify-content:center;font-size:12px;vertical-align:top;color:var(--cps-color-calm);margin-left:.25rem}:host ::ng-deep .p-link{text-align:left;background-color:transparent;margin:0;padding:0;border:none;cursor:pointer;-webkit-user-select:none;user-select:none}:host ::ng-deep .p-datatable .p-sortable-column{cursor:pointer;-webkit-user-select:none;user-select:none}:host ::ng-deep .p-datatable .p-sortable-column:focus{box-shadow:none;outline:0 none}:host ::ng-deep .p-datatable.p-datatable-striped .p-datatable-tbody>tr:nth-child(odd){background:var(--cps-color-bg-light)}:host ::ng-deep .p-datatable.p-datatable-striped .p-datatable-tbody>tr:nth-child(2n){background:#fff}:host ::ng-deep .p-datatable.p-datatable-hoverable-rows .p-datatable-tbody>tr:not(.p-highlight):not(.cps-table-row-expanded-content):hover{background:var(--cps-color-highlight-hover)}:host ::ng-deep .p-datatable .p-datatable-tbody>tr{background:#fff;color:var(--cps-color-text-dark);transition:box-shadow .2s}:host ::ng-deep .p-datatable .p-datatable-tbody>tr.cps-table-row-selected{background-color:var(--cps-color-highlight-active)!important}:host ::ng-deep .p-datatable.p-datatable-gridlines:has(.p-datatable-thead):has(.p-datatable-tbody) .p-datatable-tbody>tr>td:last-child{border-width:0 1px 1px 1px}:host ::ng-deep .p-datatable.p-datatable-gridlines:has(.p-datatable-thead):has(.p-datatable-tbody) .p-datatable-tbody>tr>td{border-width:0 0 1px 1px}:host ::ng-deep .p-datatable.p-datatable-gridlines .p-datatable-tbody>tr>td:last-child{border-width:1px 1px 0 1px}:host ::ng-deep .p-datatable.p-datatable-gridlines .p-datatable-tbody>tr>td{border-width:1px 0 0 1px}:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td{text-align:left;border:1px solid var(--cps-color-line-mid);border-width:0 0 1px 0;padding:1rem}:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td:first-child{border-width:0 0 1px 1px}:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td:last-child{border-width:0 1px 1px 0}:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td:only-child{border-width:0 1px 1px 1px}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td{padding:.5rem}:host ::ng-deep .p-datatable.p-datatable-lg .p-datatable-tbody>tr>td{padding:1.25rem}:host ::ng-deep td:has(p-tablecheckbox){text-align:center!important}:host ::ng-deep th:has(p-tableheadercheckbox){text-align:center!important;width:3rem!important}:host ::ng-deep .p-checkbox{display:inline-flex;cursor:pointer;-webkit-user-select:none;user-select:none;vertical-align:bottom;position:relative;width:18px;height:18px}:host ::ng-deep .p-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}:host ::ng-deep .p-hidden-accessible input,:host ::ng-deep .p-hidden-accessible select{transform:scale(0)}:host ::ng-deep .p-checkbox .p-checkbox-box{background:#fff;width:18px;height:18px;color:var(--cps-color-text-dark);border:2px solid var(--cps-color-text-mild);border-radius:2px;transition:background-color .2s,color .2s,border-color .2s,box-shadow .2s}:host ::ng-deep .p-checkbox-box{display:flex;justify-content:center;align-items:center}:host ::ng-deep .p-checkbox .p-checkbox-box.p-highlight{border-color:var(--cps-color-calm);background:var(--cps-color-calm)}:host ::ng-deep .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box.p-highlight:hover{border-color:var(--cps-color-calm);background:var(--cps-color-calm);color:#fff}:host ::ng-deep .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box:hover{border-color:var(--cps-color-calm)}:host ::ng-deep .p-checkbox .p-checkbox-box .p-icon{width:14px;height:14px}:host ::ng-deep .p-checkbox .p-checkbox-box .p-checkbox-icon{transition-duration:.2s;color:#fff;font-size:14px}:host ::ng-deep .p-datatable-reorderablerow-handle,:host ::ng-deep [pReorderableColumn]{cursor:move;font-size:20px;line-height:1}:host ::ng-deep .p-datatable-reorderablerow-handle:hover,:host ::ng-deep [pReorderableColumn]:hover{color:var(--cps-color-calm)}:host ::ng-deep .p-datatable .p-datatable-tbody>tr.p-datatable-dragpoint-top>td{box-shadow:inset 0 2px 0 0 var(--cps-color-calm)}:host ::ng-deep .p-datatable .p-datatable-tbody>tr.p-datatable-dragpoint-bottom>td{box-shadow:inset 0 -2px 0 0 var(--cps-color-calm)}:host ::ng-deep .p-datatable .p-paginator-bottom{border-width:0 1px 1px 1px;border-radius:0}:host ::ng-deep .p-paginator{background:#fff;display:flex;align-items:center;justify-content:center;flex-wrap:wrap;color:var(--cps-color-text-dark);padding:1rem;border:1px solid var(--cps-color-line-mid)}:host ::ng-deep .p-paginator-left-content{margin-right:auto}:host ::ng-deep .p-paginator-left-content .cps-table-paginator-itms-per-page{display:inline-flex;align-items:center}:host ::ng-deep .p-paginator-left-content .cps-table-paginator-itms-per-page .cps-table-paginator-items-per-page-title{font-family:Source Sans Pro,sans-serif;font-size:14px;margin-right:12px;cursor:default}:host ::ng-deep .p-paginator-left-content .cps-table-paginator-itms-per-page .cps-select-box{min-height:32px!important;background:transparent!important}:host ::ng-deep .p-paginator-left-content .cps-table-paginator-itms-per-page .cps-select-box .cps-select-box-items{font-size:14px!important}:host ::ng-deep .p-paginator-left-content .cps-table-paginator-itms-per-page .cps-select-box .cps-select-box-chevron .cps-icon{width:14px;height:14px}:host ::ng-deep .p-paginator .p-paginator-current{background-color:transparent;border:0 none;color:var(--cps-color-text-dark);min-width:3rem;margin:.143rem;padding:0 .5rem;font-family:Source Sans Pro,sans-serif;font-size:14px;height:unset}:host ::ng-deep .p-paginator-page,:host ::ng-deep .p-paginator-next,:host ::ng-deep .p-paginator-last,:host ::ng-deep .p-paginator-first,:host ::ng-deep .p-paginator-prev,:host ::ng-deep .p-paginator-current{cursor:pointer;display:inline-flex;align-items:center;justify-content:center;line-height:1;-webkit-user-select:none;user-select:none;overflow:hidden;position:relative}:host ::ng-deep .p-paginator-current{cursor:default}:host ::ng-deep .p-paginator .p-paginator-first:not(.p-disabled):not(.p-highlight):hover,:host ::ng-deep .p-paginator .p-paginator-prev:not(.p-disabled):not(.p-highlight):hover,:host ::ng-deep .p-paginator .p-paginator-next:not(.p-disabled):not(.p-highlight):hover,:host ::ng-deep .p-paginator .p-paginator-last:not(.p-disabled):not(.p-highlight):hover{background:var(--cps-color-highlight-hover);border-color:unset}:host ::ng-deep .p-paginator .p-paginator-first:not(.p-disabled):not(.p-highlight):active,:host ::ng-deep .p-paginator .p-paginator-prev:not(.p-disabled):not(.p-highlight):active,:host ::ng-deep .p-paginator .p-paginator-next:not(.p-disabled):not(.p-highlight):active,:host ::ng-deep .p-paginator .p-paginator-last:not(.p-disabled):not(.p-highlight):active{background:var(--cps-color-highlight-active)}:host ::ng-deep .p-paginator .p-paginator-first,:host ::ng-deep .p-paginator .p-paginator-prev,:host ::ng-deep .p-paginator .p-paginator-next,:host ::ng-deep .p-paginator .p-paginator-last{background-color:transparent;border:1px solid var(--cps-color-text-dark);border-radius:4px;color:var(--cps-color-text-dark);min-width:32px;height:32px;margin:.143rem;transition:box-shadow .2s}:host ::ng-deep .p-icon-wrapper{display:inline-flex}:host ::ng-deep .p-disabled,:host ::ng-deep .p-disabled *{cursor:default!important;pointer-events:none}:host ::ng-deep .p-paginator .p-paginator-pages .p-paginator-page.p-highlight{background:var(--cps-color-calm);border-color:var(--cps-color-calm);color:#fff}:host ::ng-deep .p-paginator .p-paginator-pages .p-paginator-page:not(.p-highlight):hover{background:var(--cps-color-highlight-hover);border-color:unset}:host ::ng-deep .p-paginator .p-paginator-pages .p-paginator-page:not(.p-highlight):active{background:var(--cps-color-highlight-active)}:host ::ng-deep .p-paginator .p-paginator-pages .p-paginator-page{background-color:transparent;border:1px solid var(--cps-color-text-dark);border-radius:4px;color:var(--cps-color-text-dark);min-width:32px;height:32px;margin:.143rem;transition:box-shadow .2s}:host ::ng-deep .p-paginator-element:focus{z-index:1;position:relative}:host ::ng-deep .p-link:focus{outline:0 none;outline-offset:0;box-shadow:unset}:host ::ng-deep .p-link{text-align:left;background-color:transparent;margin:0;padding:0;border:none;cursor:pointer;-webkit-user-select:none;user-select:none;font-size:14px;font-family:Source Sans Pro,sans-serif}:host ::ng-deep .p-disabled,:host ::ng-deep .p-component:disabled{opacity:.4}:host ::ng-deep .cps-table-empty-message-td{text-align:center!important;font-weight:600;background:#fff}:host ::ng-deep .cps-table-row-drag-handle-cell{text-align:center!important}:host ::ng-deep .cps-table-row-drag-handle-cell .cps-table-row-drag-handle{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}:host ::ng-deep .cps-table-row-chevron-cell{text-align:center!important}:host ::ng-deep .cps-table-row-chevron-cell .cps-table-row-chevron{transition-duration:.2s;cursor:pointer;display:inline-flex}:host ::ng-deep .cps-table-row-chevron-cell .cps-table-row-chevron:hover cps-icon .cps-icon{color:var(--cps-color-calm)!important}:host ::ng-deep .cps-table-row-chevron-cell .cps-table-row-chevron-expanded{transform:rotate(180deg)}:host ::ng-deep .cps-table-row-menu-cell{border-left:none!important}:host ::ng-deep .p-datatable .p-datatable-loading-overlay{position:absolute;display:flex;align-items:center;justify-content:center;z-index:1001;top:0;left:0;width:100%;height:100%;background-color:#fff;transition-duration:.2s;border:1px solid var(--cps-color-line-mid)}:host ::ng-deep .p-datatable.cps-tbar-small .p-datatable-loading-overlay{top:43px;height:calc(100% - 43px)}:host ::ng-deep .p-datatable.cps-tbar-normal .p-datatable-loading-overlay{top:72px;height:calc(100% - 72px)}:host ::ng-deep .cps-table-loading .p-datatable{min-height:200px}:host ::ng-deep .cps-table-loading .p-datatable.cps-tbar-normal{min-height:272px}:host ::ng-deep .cps-table-loading .p-datatable.cps-tbar-small{min-height:243px}:host ::ng-deep .cps-table-col-filter-menu-open .cps-table-col-filter-menu-button{color:var(--cps-color-text-dark)}.cps-table-coltoggle-menu{display:block;max-height:242px;overflow-x:hidden;background:#fff}.cps-table-coltoggle-menu .cps-table-coltoggle-menu-item{padding:12px;justify-content:space-between;display:flex;cursor:pointer}.cps-table-coltoggle-menu .cps-table-coltoggle-menu-item:hover{background:var(--cps-color-highlight-hover)}.cps-table-coltoggle-menu .cps-table-coltoggle-menu-item-label{color:var(--cps-color-text-dark)}.cps-table-coltoggle-menu .cps-table-coltoggle-menu-item-left{display:flex;align-items:center;margin-right:8px}.cps-table-coltoggle-menu .cps-table-coltoggle-menu-item-check{background-color:transparent;border:0;width:16px;height:16px;cursor:pointer;display:inline-block;vertical-align:middle;box-sizing:border-box;position:relative;flex-shrink:0;transition:border-color 90ms cubic-bezier(0,0,.2,.1),background-color 90ms cubic-bezier(0,0,.2,.1);margin-right:8px;opacity:0}.cps-table-coltoggle-menu .cps-table-coltoggle-menu-item-check:after{color:var(--cps-color-calm);top:4px;left:1px;width:8px;height:3px;border-left:2px solid currentColor;transform:rotate(-45deg);opacity:1;box-sizing:content-box;position:absolute;content:\"\";border-bottom:2px solid currentColor;transition:opacity 90ms cubic-bezier(0,0,.2,.1)}.cps-table-coltoggle-menu .cps-table-coltoggle-menu-item.selected,.cps-table-coltoggle-menu .cps-table-coltoggle-menu-item.allselected{font-weight:600}.cps-table-coltoggle-menu .cps-table-coltoggle-menu-item.selected .cps-table-coltoggle-menu-item-label,.cps-table-coltoggle-menu .cps-table-coltoggle-menu-item.allselected .cps-table-coltoggle-menu-item-label{color:var(--cps-color-calm)}.cps-table-coltoggle-menu .cps-table-coltoggle-menu-item.selected .cps-table-coltoggle-menu-item-check,.cps-table-coltoggle-menu .cps-table-coltoggle-menu-item.allselected .cps-table-coltoggle-menu-item-check{opacity:1}.cps-table-coltoggle-menu .cps-table-coltoggle-menu-item.selected{background:var(--cps-color-highlight-selected)}.cps-table-coltoggle-menu .cps-table-coltoggle-menu-item.highlighten{background:var(--cps-color-highlight-active)}.cps-table-coltoggle-menu .cps-table-coltoggle-menu-item.selected.highlighten{background:var(--cps-color-highlight-selected-dark)}.cps-table-coltoggle-menu .select-all-option{border-bottom:1px solid lightgrey;font-weight:600}::ng-deep .cps-select-options-menu.cps-paginator-page-options .cps-select-options-option{font-size:14px}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: TableModule }, { kind: "component", type: i3.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i4.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i3.RowToggler, selector: "[pRowToggler]", inputs: ["pRowToggler", "pRowTogglerDisabled"] }, { kind: "component", type: i3.TableCheckbox, selector: "p-tableCheckbox", inputs: ["disabled", "value", "index", "inputId", "name", "required", "ariaLabel"] }, { kind: "component", type: i3.TableHeaderCheckbox, selector: "p-tableHeaderCheckbox", inputs: ["disabled", "inputId", "name", "ariaLabel"] }, { kind: "directive", type: i3.ReorderableRowHandle, selector: "[pReorderableRowHandle]" }, { kind: "directive", type: i3.ReorderableRow, selector: "[pReorderableRow]", inputs: ["pReorderableRow", "pReorderableRowDisabled"] }, { kind: "directive", type: TableUnsortDirective, selector: "[tWithUnsort]", exportAs: ["tWithUnsort"] }, { kind: "component", type: CpsInputComponent, selector: "cps-input", inputs: ["label", "hint", "placeholder", "disabled", "readonly", "width", "type", "loading", "clearable", "prefixIcon", "prefixIconClickable", "prefixIconSize", "prefixText", "hideDetails", "persistentClear", "error", "infoTooltip", "infoTooltipClass", "infoTooltipMaxWidth", "infoTooltipPersistent", "infoTooltipPosition", "appearance", "valueToDisplay", "value"], outputs: ["valueChanged", "focused", "prefixIconClicked", "blurred", "cleared", "enterClicked"] }, { kind: "component", type: CpsButtonComponent, selector: "cps-button", inputs: ["color", "contentColor", "type", "label", "icon", "iconPosition", "size", "width", "height", "disabled", "loading"], outputs: ["clicked"] }, { kind: "component", type: CpsSelectComponent, selector: "cps-select", inputs: ["label", "placeholder", "hint", "returnObject", "multiple", "disabled", "width", "selectAll", "chips", "closableChips", "clearable", "openOnClear", "options", "keepInitialOrder", "optionLabel", "optionValue", "optionInfo", "hideDetails", "persistentClear", "prefixIcon", "prefixIconSize", "loading", "virtualScroll", "numToleratedItems", "infoTooltip", "infoTooltipClass", "infoTooltipMaxWidth", "infoTooltipPersistent", "infoTooltipPosition", "optionsClass", "appearance", "value"], outputs: ["valueChanged"] }, { kind: "component", type: CpsIconComponent, selector: "cps-icon", inputs: ["icon", "size", "color"] }, { kind: "component", type: CpsMenuComponent, selector: "cps-menu", inputs: ["header", "items", "withArrow", "compressed", "focusOnShow", "persistent", "containerClass", "showTransitionOptions", "hideTransitionOptions"], outputs: ["menuShown", "menuHidden", "beforeMenuHidden", "contentClicked"] }, { kind: "component", type: CpsLoaderComponent, selector: "cps-loader", inputs: ["fullScreen", "opacity", "labelColor", "showLabel"] }, { kind: "component", type: TableRowMenuComponent, selector: "table-row-menu", inputs: ["showRowRemoveButton", "showRowEditButton"], outputs: ["editRowBtnClicked", "removeRowBtnClicked"] }, { kind: "directive", type: CpsTableColumnSortableDirective, selector: "[cpsTColSortable]", inputs: ["cpsTColSortable"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
731
|
+
}
|
|
732
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: CpsTableComponent, decorators: [{
|
|
733
|
+
type: Component,
|
|
734
|
+
args: [{ selector: 'cps-table', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
735
|
+
FormsModule,
|
|
736
|
+
CommonModule,
|
|
737
|
+
TableModule,
|
|
738
|
+
TableUnsortDirective,
|
|
739
|
+
CpsInputComponent,
|
|
740
|
+
CpsButtonComponent,
|
|
741
|
+
CpsSelectComponent,
|
|
742
|
+
CpsIconComponent,
|
|
743
|
+
CpsMenuComponent,
|
|
744
|
+
CpsLoaderComponent,
|
|
745
|
+
TableRowMenuComponent,
|
|
746
|
+
CpsTableColumnSortableDirective
|
|
747
|
+
], providers: [
|
|
748
|
+
TableService,
|
|
749
|
+
{
|
|
750
|
+
provide: Table,
|
|
751
|
+
useFactory: tableFactory,
|
|
752
|
+
// eslint-disable-next-line no-use-before-define
|
|
753
|
+
deps: [CpsTableComponent]
|
|
754
|
+
}
|
|
755
|
+
], template: "<p-table\n #primengTable\n #tUnsortDirective=\"tWithUnsort\"\n tWithUnsort\n [ngClass]=\"{ 'cps-table-loading': loading }\"\n [styleClass]=\"styleClass\"\n [tableStyle]=\"tableStyle\"\n [tableStyleClass]=\"tableStyleClass\"\n [value]=\"data\"\n [dataKey]=\"dataKey\"\n [columns]=\"selectedColumns\"\n (selectionChange)=\"onSelectionChanged($event)\"\n [globalFilterFields]=\"globalFilterFields\"\n [showInitialSortBadge]=\"false\"\n [loading]=\"loading\"\n [scrollable]=\"scrollable\"\n [scrollHeight]=\"scrollHeight\"\n [lazy]=\"lazy\"\n [lazyLoadOnInit]=\"lazyLoadOnInit\"\n [virtualScroll]=\"virtualScroll\"\n [virtualScrollItemSize]=\"virtualScrollItemSize\"\n [virtualScrollOptions]=\"{ numToleratedItems: numToleratedItems }\"\n [paginator]=\"paginator\"\n [showCurrentPageReport]=\"true\"\n [alwaysShowPaginator]=\"alwaysShowPaginator\"\n [rows]=\"rows\"\n [first]=\"first\"\n [totalRecords]=\"totalRecords\"\n [resetPageOnSort]=\"resetPageOnSort\"\n currentPageReportTemplate=\"{first} - {last} of {totalRecords}\"\n [(selection)]=\"selectedRows\"\n [metaKeySelection]=\"false\"\n [rowHover]=\"rowHover\"\n [customSort]=\"customSort\"\n [sortMode]=\"sortMode\"\n [exportFilename]=\"exportFilename\"\n [csvSeparator]=\"csvSeparator\"\n (onPage)=\"onPageChange($event)\"\n (onLazyLoad)=\"onLazyLoaded($event)\"\n (sortFunction)=\"onSortFunction($event)\"\n (onSort)=\"onSort($event)\"\n (onFilter)=\"onFilter($event)\"\n (onRowReorder)=\"onRowReorder($event)\">\n <ng-template pTemplate=\"caption\" *ngIf=\"hasToolbar\">\n <ng-container *ngIf=\"toolbarTemplate\">\n <ng-container *ngTemplateOutlet=\"toolbarTemplate\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!toolbarTemplate\">\n <div class=\"cps-table-tbar-left\">\n <div *ngIf=\"toolbarIcon\" class=\"cps-table-tbar-icon\">\n <cps-icon [icon]=\"toolbarIcon\" [color]=\"toolbarIconColor\"></cps-icon>\n </div>\n <div class=\"cps-table-tbar-title\">{{ toolbarTitle }}</div>\n <div *ngIf=\"showGlobalFilter\" class=\"cps-table-tbar-global-filter\">\n <cps-input\n #globalFilterComp\n prefixIcon=\"search\"\n [placeholder]=\"globalFilterPlaceholder\"\n (valueChanged)=\"onFilterGlobal($event)\"\n [clearable]=\"true\"\n [disabled]=\"loading\"\n [appearance]=\"toolbarSize === 'small' ? 'underlined' : 'outlined'\"\n [hideDetails]=\"true\">\n </cps-input>\n </div>\n </div>\n <div class=\"cps-table-tbar-right\">\n <div\n *ngIf=\"showRemoveBtnOnSelect && selectedRows.length > 0\"\n class=\"cps-table-tbar-btn-on-select\">\n <cps-button\n label=\"Remove\"\n [disabled]=\"removeBtnOnSelectDisabled\"\n color=\"prepared\"\n type=\"borderless\"\n icon=\"remove\"\n [size]=\"toolbarSize\"\n (clicked)=\"removeSelected()\">\n </cps-button>\n </div>\n <div\n *ngIf=\"showAdditionalBtnOnSelect && selectedRows.length > 0\"\n class=\"cps-table-tbar-btn-on-select\">\n <cps-button\n [label]=\"additionalBtnOnSelectTitle\"\n [disabled]=\"additionalBtnOnSelectDisabled\"\n color=\"prepared\"\n type=\"borderless\"\n [size]=\"toolbarSize\"\n (clicked)=\"onClickAdditionalBtnOnSelect()\">\n </cps-button>\n </div>\n <div *ngIf=\"showActionBtn\" class=\"cps-table-tbar-action-btn\">\n <cps-button\n [label]=\"actionBtnTitle\"\n [disabled]=\"actionBtnDisabled\"\n color=\"prepared\"\n type=\"outlined\"\n [size]=\"toolbarSize\"\n (clicked)=\"onClickActionBtn()\">\n </cps-button>\n </div>\n <div\n *ngIf=\"showColumnsToggleBtn && columns.length > 0\"\n class=\"cps-table-tbar-coltoggle-btn\"\n [ngClass]=\"{ 'btn-disabled': columnsToggleBtnDisabled }\">\n <cps-icon\n icon=\"columns\"\n size=\"normal\"\n [color]=\"\n columnsToggleBtnDisabled ? 'text-lightest' : 'prepared-lighten1'\n \"\n (click)=\"onColumnsToggle($event)\"></cps-icon>\n <cps-menu #colToggleMenu [withArrow]=\"false\">\n <div class=\"cps-table-coltoggle-menu\">\n <div\n class=\"cps-table-coltoggle-menu-item select-all-option\"\n [class.allselected]=\"selectedColumns.length === columns.length\"\n (click)=\"toggleAllColumns()\">\n <span class=\"cps-table-coltoggle-menu-item-left\">\n <span class=\"cps-table-coltoggle-menu-item-check\"> </span>\n <span class=\"cps-table-coltoggle-menu-item-label\"\n >Show all columns</span\n >\n </span>\n </div>\n <div\n *ngFor=\"let col of columns\"\n class=\"cps-table-coltoggle-menu-item\"\n (click)=\"onSelectColumn(col)\"\n [class.selected]=\"isColumnSelected(col)\">\n <span class=\"cps-table-coltoggle-menu-item-left\">\n <span class=\"cps-table-coltoggle-menu-item-check\"></span>\n <span class=\"cps-table-coltoggle-menu-item-label\">{{\n col[colHeaderName]\n }}</span>\n </span>\n </div>\n </div>\n </cps-menu>\n </div>\n <div\n *ngIf=\"showExportBtn\"\n class=\"cps-table-tbar-export-btn\"\n [ngClass]=\"{ 'btn-disabled': exportBtnDisabled }\">\n <cps-icon\n icon=\"export\"\n size=\"20\"\n [color]=\"exportBtnDisabled ? 'text-light' : 'prepared-lighten1'\"\n (click)=\"onExportData($event)\"></cps-icon>\n <cps-menu\n #exportMenu\n [items]=\"exportMenuItems\"\n [compressed]=\"true\"\n [withArrow]=\"false\">\n </cps-menu>\n </div>\n <div\n *ngIf=\"showDataReloadBtn\"\n class=\"cps-table-tbar-reload-btn\"\n [ngClass]=\"{ 'btn-disabled': dataReloadBtnDisabled }\">\n <cps-icon\n icon=\"refresh\"\n size=\"18\"\n [color]=\"dataReloadBtnDisabled ? 'text-light' : 'prepared-lighten1'\"\n (click)=\"onReloadData()\">\n </cps-icon>\n </div>\n </div>\n </ng-container>\n </ng-template>\n\n <ng-template pTemplate=\"header\" *ngIf=\"nestedHeaderTemplate\" let-columns>\n <ng-container\n *ngTemplateOutlet=\"\n nestedHeaderTemplate;\n context: {\n $implicit: columns,\n }\n \"></ng-container>\n </ng-template>\n\n <ng-template pTemplate=\"header\" *ngIf=\"!nestedHeaderTemplate\" let-columns>\n <tr>\n <th style=\"width: 3rem\" *ngIf=\"rowExpansionTemplate\"></th>\n <th style=\"width: 3rem\" *ngIf=\"reorderableRows\"></th>\n <th style=\"width: 4rem\" *ngIf=\"selectable\">\n <p-tableHeaderCheckbox></p-tableHeaderCheckbox>\n </th>\n <ng-container *ngIf=\"headerTemplate\">\n <ng-container\n *ngTemplateOutlet=\"\n headerTemplate;\n context: {\n $implicit: columns,\n }\n \"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!headerTemplate && columns.length > 0\">\n <ng-container *ngIf=\"sortable\">\n <th *ngFor=\"let col of columns\" [cpsTColSortable]=\"col[colFieldName]\">\n {{ col[colHeaderName] }}\n </th>\n </ng-container>\n <ng-container *ngIf=\"!sortable\">\n <th *ngFor=\"let col of columns\">\n {{ col[colHeaderName] }}\n </th>\n </ng-container>\n </ng-container>\n <th\n style=\"width: 2rem\"\n class=\"cps-table-row-menu-cell\"\n *ngIf=\"showRowMenu && (showRowRemoveButton || showRowEditButton)\"></th>\n </tr>\n </ng-template>\n\n <ng-template\n pTemplate=\"body\"\n let-rowData\n let-columns=\"columns\"\n let-item\n let-rowIndex=\"rowIndex\"\n let-expanded=\"expanded\">\n <tr\n [pReorderableRow]=\"rowIndex\"\n [ngClass]=\"{\n 'cps-table-row-selected': selectable && primengTable.isSelected(item)\n }\">\n <td *ngIf=\"rowExpansionTemplate\" class=\"cps-table-row-chevron-cell\">\n <div\n class=\"cps-table-row-chevron\"\n [ngClass]=\"{ 'cps-table-row-chevron-expanded': expanded }\">\n <cps-icon\n icon=\"chevron-down\"\n size=\"small\"\n color=\"text-dark\"\n [pRowToggler]=\"item\">\n </cps-icon>\n </div>\n </td>\n <td *ngIf=\"reorderableRows\" class=\"cps-table-row-drag-handle-cell\">\n <span class=\"cps-table-row-drag-handle\" pReorderableRowHandle>\u2630</span>\n </td>\n <td *ngIf=\"selectable\">\n <p-tableCheckbox [value]=\"item\"></p-tableCheckbox>\n </td>\n <ng-container *ngIf=\"bodyTemplate\">\n <ng-container\n *ngTemplateOutlet=\"\n bodyTemplate;\n context: {\n $implicit: item,\n rowIndex: rowIndex,\n columns: columns,\n rowData: rowData\n }\n \">\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"!bodyTemplate\">\n <ng-container *ngIf=\"columns.length > 0\">\n <td *ngFor=\"let col of columns\">\n {{ rowData[col[colFieldName]] }}\n </td>\n </ng-container>\n </ng-container>\n <td\n *ngIf=\"showRowMenu && (showRowRemoveButton || showRowEditButton)\"\n class=\"cps-table-row-menu-cell\">\n <table-row-menu\n (editRowBtnClicked)=\"onEditRowClicked(item)\"\n (removeRowBtnClicked)=\"onRemoveRowClicked(item)\"\n [showRowRemoveButton]=\"showRowRemoveButton\"\n [showRowEditButton]=\"showRowEditButton\">\n </table-row-menu>\n </td>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"rowexpansion\" *ngIf=\"rowExpansionTemplate\" let-item>\n <tr class=\"cps-table-row-expanded-content\">\n <td colspan=\"100\">\n <ng-container\n *ngTemplateOutlet=\"\n rowExpansionTemplate;\n context: {\n $implicit: item\n }\n \"></ng-container>\n </td>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"emptymessage\">\n <tr>\n <td\n colspan=\"100\"\n class=\"cps-table-empty-message-td\"\n [ngStyle]=\"{ height: emptyBodyHeight }\">\n {{ emptyMessage }}\n </td>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"loadingicon\">\n <cps-loader [fullScreen]=\"false\" opacity=\"0\"></cps-loader>\n </ng-template>\n <ng-template pTemplate=\"paginatorleft\">\n <div class=\"cps-table-paginator-itms-per-page\">\n <span class=\"cps-table-paginator-items-per-page-title\"\n >Rows per page:\n </span>\n <cps-select\n [options]=\"rowOptions\"\n [hideDetails]=\"true\"\n [(ngModel)]=\"rows\"\n (valueChanged)=\"onRowsPerPageChanged()\"\n [returnObject]=\"false\"\n optionsClass=\"cps-paginator-page-options\">\n </cps-select>\n </div>\n </ng-template>\n</p-table>\n", styles: [":host ::ng-deep .p-component{font-family:Source Sans Pro,sans-serif;font-size:14px;font-weight:400}:host ::ng-deep .p-datatable-flex-scrollable{display:flex;flex-direction:column;height:100%}:host ::ng-deep .p-datatable{position:relative}:host ::ng-deep .p-datatable.p-datatable-gridlines .p-datatable-header{border-width:1px 1px 0 1px}:host ::ng-deep .p-datatable .p-datatable-header{font-weight:600;display:flex;justify-content:space-between;align-items:center;padding:0 10px;border:unset;background:unset;border-top:1px solid var(--cps-color-line-mid);border-right:1px solid var(--cps-color-line-mid);border-left:4px solid var(--cps-color-surprise)!important;border-radius:4px 4px 0 0;font-size:16px;line-height:150%;background-color:#fff;color:var(--cps-color-text-darkest);overflow:auto}:host ::ng-deep .p-datatable .p-datatable-header .cps-table-tbar-left{display:flex;align-items:center}:host ::ng-deep .p-datatable .p-datatable-header .cps-table-tbar-left .cps-table-tbar-global-filter{margin-left:12px}:host ::ng-deep .p-datatable .p-datatable-header .cps-table-tbar-left .cps-table-tbar-icon{display:flex;margin-right:8px}:host ::ng-deep .p-datatable .p-datatable-header .cps-table-tbar-left .cps-table-tbar-title{cursor:default}:host ::ng-deep .p-datatable .p-datatable-header .cps-table-tbar-right{display:flex;align-items:center}:host ::ng-deep .p-datatable .p-datatable-header .cps-table-tbar-right .cps-table-tbar-btn-on-select{margin-right:4px}:host ::ng-deep .p-datatable .p-datatable-header .cps-table-tbar-right .cps-table-tbar-action-btn{margin-right:4px;margin-left:8px}:host ::ng-deep .p-datatable .p-datatable-header .cps-table-tbar-right .cps-table-tbar-coltoggle-btn,:host ::ng-deep .p-datatable .p-datatable-header .cps-table-tbar-right .cps-table-tbar-export-btn,:host ::ng-deep .p-datatable .p-datatable-header .cps-table-tbar-right .cps-table-tbar-reload-btn{display:contents}:host ::ng-deep .p-datatable .p-datatable-header .cps-table-tbar-right .cps-table-tbar-coltoggle-btn cps-icon,:host ::ng-deep .p-datatable .p-datatable-header .cps-table-tbar-right .cps-table-tbar-export-btn cps-icon,:host ::ng-deep .p-datatable .p-datatable-header .cps-table-tbar-right .cps-table-tbar-reload-btn cps-icon{margin-left:12px;margin-right:4px}:host ::ng-deep .p-datatable .p-datatable-header .cps-table-tbar-right .cps-table-tbar-coltoggle-btn:not(.btn-disabled) cps-icon,:host ::ng-deep .p-datatable .p-datatable-header .cps-table-tbar-right .cps-table-tbar-export-btn:not(.btn-disabled) cps-icon,:host ::ng-deep .p-datatable .p-datatable-header .cps-table-tbar-right .cps-table-tbar-reload-btn:not(.btn-disabled) cps-icon{cursor:pointer}:host ::ng-deep .p-datatable .p-datatable-header .cps-table-tbar-right .cps-table-tbar-coltoggle-btn:not(.btn-disabled) cps-icon:hover .cps-icon,:host ::ng-deep .p-datatable .p-datatable-header .cps-table-tbar-right .cps-table-tbar-export-btn:not(.btn-disabled) cps-icon:hover .cps-icon,:host ::ng-deep .p-datatable .p-datatable-header .cps-table-tbar-right .cps-table-tbar-reload-btn:not(.btn-disabled) cps-icon:hover .cps-icon{color:var(--cps-color-prepared)!important}:host ::ng-deep .cps-tbar-small.p-datatable .p-datatable-header{height:43px}:host ::ng-deep .cps-tbar-normal.p-datatable .p-datatable-header{height:72px}:host ::ng-deep .p-datatable-flex-scrollable>.p-datatable-wrapper{display:flex;flex-direction:column;flex:1;height:100%}:host ::ng-deep .p-datatable-scrollable>.p-datatable-wrapper{position:relative}:host ::ng-deep .p-datatable>.p-datatable-wrapper{overflow:auto}:host ::ng-deep .p-datatable-table{border-spacing:0px;width:100%}:host ::ng-deep .p-datatable.p-datatable-scrollable>.p-datatable-wrapper>.p-datatable-table>.p-datatable-thead,:host ::ng-deep .p-datatable.p-datatable-scrollable>.p-datatable-wrapper>.p-datatable-table>.p-datatable-tfoot,:host ::ng-deep .p-datatable.p-datatable-scrollable>.p-datatable-wrapper>.p-scroller-viewport>.p-scroller>.p-datatable-table>.p-datatable-thead,:host ::ng-deep .p-datatable.p-datatable-scrollable>.p-datatable-wrapper>.p-scroller-viewport>.p-scroller>.p-datatable-table>.p-datatable-tfoot{background-color:#fff}:host ::ng-deep .p-datatable-scrollable-table>.p-datatable-thead{position:sticky;top:0;z-index:1}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th{padding:.5rem}:host ::ng-deep .p-datatable.p-datatable-lg .p-datatable-thead>tr>th{padding:1.25rem}:host ::ng-deep .p-datatable .p-datatable-thead>tr>th{text-align:left;padding:1rem;border:1px solid var(--cps-color-line-mid);border-width:0 0 1px 1px;font-weight:400;color:var(--cps-color-text-mild);background:#fff;transition:box-shadow .2s}:host ::ng-deep .p-datatable .p-datatable-thead>tr>th:last-child{border-width:1px}:host ::ng-deep .p-datatable .p-datatable-thead>tr>th{border-width:1px 0 1px 1px}:host ::ng-deep .p-datatable .p-datatable-thead tr:not(:first-child) th{border-top:unset}:host ::ng-deep .p-datatable .p-sortable-column:not(.p-highlight):hover .cps-sortable-column-icon.sort-unsorted .sort-unsorted-arrow-up{border-bottom-color:var(--cps-color-text-mild)}:host ::ng-deep .p-datatable .p-sortable-column:not(.p-highlight):hover .cps-sortable-column-icon.sort-unsorted .sort-unsorted-arrow-down{border-top-color:var(--cps-color-text-mild)}:host ::ng-deep .p-icon{display:inline-block;width:1rem;height:1rem}:host ::ng-deep .p-datatable .p-sortable-column .cps-sortable-column-badge{display:inline-flex;align-items:center;justify-content:center;font-size:12px;vertical-align:top;color:var(--cps-color-calm);margin-left:.25rem}:host ::ng-deep .p-link{text-align:left;background-color:transparent;margin:0;padding:0;border:none;cursor:pointer;-webkit-user-select:none;user-select:none}:host ::ng-deep .p-datatable .p-sortable-column{cursor:pointer;-webkit-user-select:none;user-select:none}:host ::ng-deep .p-datatable .p-sortable-column:focus{box-shadow:none;outline:0 none}:host ::ng-deep .p-datatable.p-datatable-striped .p-datatable-tbody>tr:nth-child(odd){background:var(--cps-color-bg-light)}:host ::ng-deep .p-datatable.p-datatable-striped .p-datatable-tbody>tr:nth-child(2n){background:#fff}:host ::ng-deep .p-datatable.p-datatable-hoverable-rows .p-datatable-tbody>tr:not(.p-highlight):not(.cps-table-row-expanded-content):hover{background:var(--cps-color-highlight-hover)}:host ::ng-deep .p-datatable .p-datatable-tbody>tr{background:#fff;color:var(--cps-color-text-dark);transition:box-shadow .2s}:host ::ng-deep .p-datatable .p-datatable-tbody>tr.cps-table-row-selected{background-color:var(--cps-color-highlight-active)!important}:host ::ng-deep .p-datatable.p-datatable-gridlines:has(.p-datatable-thead):has(.p-datatable-tbody) .p-datatable-tbody>tr>td:last-child{border-width:0 1px 1px 1px}:host ::ng-deep .p-datatable.p-datatable-gridlines:has(.p-datatable-thead):has(.p-datatable-tbody) .p-datatable-tbody>tr>td{border-width:0 0 1px 1px}:host ::ng-deep .p-datatable.p-datatable-gridlines .p-datatable-tbody>tr>td:last-child{border-width:1px 1px 0 1px}:host ::ng-deep .p-datatable.p-datatable-gridlines .p-datatable-tbody>tr>td{border-width:1px 0 0 1px}:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td{text-align:left;border:1px solid var(--cps-color-line-mid);border-width:0 0 1px 0;padding:1rem}:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td:first-child{border-width:0 0 1px 1px}:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td:last-child{border-width:0 1px 1px 0}:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td:only-child{border-width:0 1px 1px 1px}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td{padding:.5rem}:host ::ng-deep .p-datatable.p-datatable-lg .p-datatable-tbody>tr>td{padding:1.25rem}:host ::ng-deep td:has(p-tablecheckbox){text-align:center!important}:host ::ng-deep th:has(p-tableheadercheckbox){text-align:center!important;width:3rem!important}:host ::ng-deep .p-checkbox{display:inline-flex;cursor:pointer;-webkit-user-select:none;user-select:none;vertical-align:bottom;position:relative;width:18px;height:18px}:host ::ng-deep .p-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}:host ::ng-deep .p-hidden-accessible input,:host ::ng-deep .p-hidden-accessible select{transform:scale(0)}:host ::ng-deep .p-checkbox .p-checkbox-box{background:#fff;width:18px;height:18px;color:var(--cps-color-text-dark);border:2px solid var(--cps-color-text-mild);border-radius:2px;transition:background-color .2s,color .2s,border-color .2s,box-shadow .2s}:host ::ng-deep .p-checkbox-box{display:flex;justify-content:center;align-items:center}:host ::ng-deep .p-checkbox .p-checkbox-box.p-highlight{border-color:var(--cps-color-calm);background:var(--cps-color-calm)}:host ::ng-deep .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box.p-highlight:hover{border-color:var(--cps-color-calm);background:var(--cps-color-calm);color:#fff}:host ::ng-deep .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box:hover{border-color:var(--cps-color-calm)}:host ::ng-deep .p-checkbox .p-checkbox-box .p-icon{width:14px;height:14px}:host ::ng-deep .p-checkbox .p-checkbox-box .p-checkbox-icon{transition-duration:.2s;color:#fff;font-size:14px}:host ::ng-deep .p-datatable-reorderablerow-handle,:host ::ng-deep [pReorderableColumn]{cursor:move;font-size:20px;line-height:1}:host ::ng-deep .p-datatable-reorderablerow-handle:hover,:host ::ng-deep [pReorderableColumn]:hover{color:var(--cps-color-calm)}:host ::ng-deep .p-datatable .p-datatable-tbody>tr.p-datatable-dragpoint-top>td{box-shadow:inset 0 2px 0 0 var(--cps-color-calm)}:host ::ng-deep .p-datatable .p-datatable-tbody>tr.p-datatable-dragpoint-bottom>td{box-shadow:inset 0 -2px 0 0 var(--cps-color-calm)}:host ::ng-deep .p-datatable .p-paginator-bottom{border-width:0 1px 1px 1px;border-radius:0}:host ::ng-deep .p-paginator{background:#fff;display:flex;align-items:center;justify-content:center;flex-wrap:wrap;color:var(--cps-color-text-dark);padding:1rem;border:1px solid var(--cps-color-line-mid)}:host ::ng-deep .p-paginator-left-content{margin-right:auto}:host ::ng-deep .p-paginator-left-content .cps-table-paginator-itms-per-page{display:inline-flex;align-items:center}:host ::ng-deep .p-paginator-left-content .cps-table-paginator-itms-per-page .cps-table-paginator-items-per-page-title{font-family:Source Sans Pro,sans-serif;font-size:14px;margin-right:12px;cursor:default}:host ::ng-deep .p-paginator-left-content .cps-table-paginator-itms-per-page .cps-select-box{min-height:32px!important;background:transparent!important}:host ::ng-deep .p-paginator-left-content .cps-table-paginator-itms-per-page .cps-select-box .cps-select-box-items{font-size:14px!important}:host ::ng-deep .p-paginator-left-content .cps-table-paginator-itms-per-page .cps-select-box .cps-select-box-chevron .cps-icon{width:14px;height:14px}:host ::ng-deep .p-paginator .p-paginator-current{background-color:transparent;border:0 none;color:var(--cps-color-text-dark);min-width:3rem;margin:.143rem;padding:0 .5rem;font-family:Source Sans Pro,sans-serif;font-size:14px;height:unset}:host ::ng-deep .p-paginator-page,:host ::ng-deep .p-paginator-next,:host ::ng-deep .p-paginator-last,:host ::ng-deep .p-paginator-first,:host ::ng-deep .p-paginator-prev,:host ::ng-deep .p-paginator-current{cursor:pointer;display:inline-flex;align-items:center;justify-content:center;line-height:1;-webkit-user-select:none;user-select:none;overflow:hidden;position:relative}:host ::ng-deep .p-paginator-current{cursor:default}:host ::ng-deep .p-paginator .p-paginator-first:not(.p-disabled):not(.p-highlight):hover,:host ::ng-deep .p-paginator .p-paginator-prev:not(.p-disabled):not(.p-highlight):hover,:host ::ng-deep .p-paginator .p-paginator-next:not(.p-disabled):not(.p-highlight):hover,:host ::ng-deep .p-paginator .p-paginator-last:not(.p-disabled):not(.p-highlight):hover{background:var(--cps-color-highlight-hover);border-color:unset}:host ::ng-deep .p-paginator .p-paginator-first:not(.p-disabled):not(.p-highlight):active,:host ::ng-deep .p-paginator .p-paginator-prev:not(.p-disabled):not(.p-highlight):active,:host ::ng-deep .p-paginator .p-paginator-next:not(.p-disabled):not(.p-highlight):active,:host ::ng-deep .p-paginator .p-paginator-last:not(.p-disabled):not(.p-highlight):active{background:var(--cps-color-highlight-active)}:host ::ng-deep .p-paginator .p-paginator-first,:host ::ng-deep .p-paginator .p-paginator-prev,:host ::ng-deep .p-paginator .p-paginator-next,:host ::ng-deep .p-paginator .p-paginator-last{background-color:transparent;border:1px solid var(--cps-color-text-dark);border-radius:4px;color:var(--cps-color-text-dark);min-width:32px;height:32px;margin:.143rem;transition:box-shadow .2s}:host ::ng-deep .p-icon-wrapper{display:inline-flex}:host ::ng-deep .p-disabled,:host ::ng-deep .p-disabled *{cursor:default!important;pointer-events:none}:host ::ng-deep .p-paginator .p-paginator-pages .p-paginator-page.p-highlight{background:var(--cps-color-calm);border-color:var(--cps-color-calm);color:#fff}:host ::ng-deep .p-paginator .p-paginator-pages .p-paginator-page:not(.p-highlight):hover{background:var(--cps-color-highlight-hover);border-color:unset}:host ::ng-deep .p-paginator .p-paginator-pages .p-paginator-page:not(.p-highlight):active{background:var(--cps-color-highlight-active)}:host ::ng-deep .p-paginator .p-paginator-pages .p-paginator-page{background-color:transparent;border:1px solid var(--cps-color-text-dark);border-radius:4px;color:var(--cps-color-text-dark);min-width:32px;height:32px;margin:.143rem;transition:box-shadow .2s}:host ::ng-deep .p-paginator-element:focus{z-index:1;position:relative}:host ::ng-deep .p-link:focus{outline:0 none;outline-offset:0;box-shadow:unset}:host ::ng-deep .p-link{text-align:left;background-color:transparent;margin:0;padding:0;border:none;cursor:pointer;-webkit-user-select:none;user-select:none;font-size:14px;font-family:Source Sans Pro,sans-serif}:host ::ng-deep .p-disabled,:host ::ng-deep .p-component:disabled{opacity:.4}:host ::ng-deep .cps-table-empty-message-td{text-align:center!important;font-weight:600;background:#fff}:host ::ng-deep .cps-table-row-drag-handle-cell{text-align:center!important}:host ::ng-deep .cps-table-row-drag-handle-cell .cps-table-row-drag-handle{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}:host ::ng-deep .cps-table-row-chevron-cell{text-align:center!important}:host ::ng-deep .cps-table-row-chevron-cell .cps-table-row-chevron{transition-duration:.2s;cursor:pointer;display:inline-flex}:host ::ng-deep .cps-table-row-chevron-cell .cps-table-row-chevron:hover cps-icon .cps-icon{color:var(--cps-color-calm)!important}:host ::ng-deep .cps-table-row-chevron-cell .cps-table-row-chevron-expanded{transform:rotate(180deg)}:host ::ng-deep .cps-table-row-menu-cell{border-left:none!important}:host ::ng-deep .p-datatable .p-datatable-loading-overlay{position:absolute;display:flex;align-items:center;justify-content:center;z-index:1001;top:0;left:0;width:100%;height:100%;background-color:#fff;transition-duration:.2s;border:1px solid var(--cps-color-line-mid)}:host ::ng-deep .p-datatable.cps-tbar-small .p-datatable-loading-overlay{top:43px;height:calc(100% - 43px)}:host ::ng-deep .p-datatable.cps-tbar-normal .p-datatable-loading-overlay{top:72px;height:calc(100% - 72px)}:host ::ng-deep .cps-table-loading .p-datatable{min-height:200px}:host ::ng-deep .cps-table-loading .p-datatable.cps-tbar-normal{min-height:272px}:host ::ng-deep .cps-table-loading .p-datatable.cps-tbar-small{min-height:243px}:host ::ng-deep .cps-table-col-filter-menu-open .cps-table-col-filter-menu-button{color:var(--cps-color-text-dark)}.cps-table-coltoggle-menu{display:block;max-height:242px;overflow-x:hidden;background:#fff}.cps-table-coltoggle-menu .cps-table-coltoggle-menu-item{padding:12px;justify-content:space-between;display:flex;cursor:pointer}.cps-table-coltoggle-menu .cps-table-coltoggle-menu-item:hover{background:var(--cps-color-highlight-hover)}.cps-table-coltoggle-menu .cps-table-coltoggle-menu-item-label{color:var(--cps-color-text-dark)}.cps-table-coltoggle-menu .cps-table-coltoggle-menu-item-left{display:flex;align-items:center;margin-right:8px}.cps-table-coltoggle-menu .cps-table-coltoggle-menu-item-check{background-color:transparent;border:0;width:16px;height:16px;cursor:pointer;display:inline-block;vertical-align:middle;box-sizing:border-box;position:relative;flex-shrink:0;transition:border-color 90ms cubic-bezier(0,0,.2,.1),background-color 90ms cubic-bezier(0,0,.2,.1);margin-right:8px;opacity:0}.cps-table-coltoggle-menu .cps-table-coltoggle-menu-item-check:after{color:var(--cps-color-calm);top:4px;left:1px;width:8px;height:3px;border-left:2px solid currentColor;transform:rotate(-45deg);opacity:1;box-sizing:content-box;position:absolute;content:\"\";border-bottom:2px solid currentColor;transition:opacity 90ms cubic-bezier(0,0,.2,.1)}.cps-table-coltoggle-menu .cps-table-coltoggle-menu-item.selected,.cps-table-coltoggle-menu .cps-table-coltoggle-menu-item.allselected{font-weight:600}.cps-table-coltoggle-menu .cps-table-coltoggle-menu-item.selected .cps-table-coltoggle-menu-item-label,.cps-table-coltoggle-menu .cps-table-coltoggle-menu-item.allselected .cps-table-coltoggle-menu-item-label{color:var(--cps-color-calm)}.cps-table-coltoggle-menu .cps-table-coltoggle-menu-item.selected .cps-table-coltoggle-menu-item-check,.cps-table-coltoggle-menu .cps-table-coltoggle-menu-item.allselected .cps-table-coltoggle-menu-item-check{opacity:1}.cps-table-coltoggle-menu .cps-table-coltoggle-menu-item.selected{background:var(--cps-color-highlight-selected)}.cps-table-coltoggle-menu .cps-table-coltoggle-menu-item.highlighten{background:var(--cps-color-highlight-active)}.cps-table-coltoggle-menu .cps-table-coltoggle-menu-item.selected.highlighten{background:var(--cps-color-highlight-selected-dark)}.cps-table-coltoggle-menu .select-all-option{border-bottom:1px solid lightgrey;font-weight:600}::ng-deep .cps-select-options-menu.cps-paginator-page-options .cps-select-options-option{font-size:14px}\n"] }]
|
|
756
|
+
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { columns: [{
|
|
757
|
+
type: Input
|
|
758
|
+
}], colHeaderName: [{
|
|
759
|
+
type: Input
|
|
760
|
+
}], colFieldName: [{
|
|
761
|
+
type: Input
|
|
762
|
+
}], striped: [{
|
|
763
|
+
type: Input
|
|
764
|
+
}], bordered: [{
|
|
765
|
+
type: Input
|
|
766
|
+
}], size: [{
|
|
767
|
+
type: Input
|
|
768
|
+
}], selectable: [{
|
|
769
|
+
type: Input
|
|
770
|
+
}], rowHover: [{
|
|
771
|
+
type: Input
|
|
772
|
+
}], dataKey: [{
|
|
773
|
+
type: Input
|
|
774
|
+
}], showRowMenu: [{
|
|
775
|
+
type: Input
|
|
776
|
+
}], showRowRemoveButton: [{
|
|
777
|
+
type: Input
|
|
778
|
+
}], showRowEditButton: [{
|
|
779
|
+
type: Input
|
|
780
|
+
}], reorderableRows: [{
|
|
781
|
+
type: Input
|
|
782
|
+
}], loading: [{
|
|
783
|
+
type: Input
|
|
784
|
+
}], tableStyle: [{
|
|
785
|
+
type: Input
|
|
786
|
+
}], tableStyleClass: [{
|
|
787
|
+
type: Input
|
|
788
|
+
}], sortable: [{
|
|
789
|
+
type: Input
|
|
790
|
+
}], sortMode: [{
|
|
791
|
+
type: Input
|
|
792
|
+
}], customSort: [{
|
|
793
|
+
type: Input
|
|
794
|
+
}], hasToolbar: [{
|
|
795
|
+
type: Input
|
|
796
|
+
}], toolbarSize: [{
|
|
797
|
+
type: Input
|
|
798
|
+
}], toolbarTitle: [{
|
|
799
|
+
type: Input
|
|
800
|
+
}], toolbarIcon: [{
|
|
801
|
+
type: Input
|
|
802
|
+
}], toolbarIconColor: [{
|
|
803
|
+
type: Input
|
|
804
|
+
}], scrollable: [{
|
|
805
|
+
type: Input
|
|
806
|
+
}], scrollHeight: [{
|
|
807
|
+
type: Input
|
|
808
|
+
}], virtualScroll: [{
|
|
809
|
+
type: Input
|
|
810
|
+
}], numToleratedItems: [{
|
|
811
|
+
type: Input
|
|
812
|
+
}], paginator: [{
|
|
813
|
+
type: Input
|
|
814
|
+
}], alwaysShowPaginator: [{
|
|
815
|
+
type: Input
|
|
816
|
+
}], rowsPerPageOptions: [{
|
|
817
|
+
type: Input
|
|
818
|
+
}], first: [{
|
|
819
|
+
type: Input
|
|
820
|
+
}], rows: [{
|
|
821
|
+
type: Input
|
|
822
|
+
}], resetPageOnRowsChange: [{
|
|
823
|
+
type: Input
|
|
824
|
+
}], resetPageOnSort: [{
|
|
825
|
+
type: Input
|
|
826
|
+
}], totalRecords: [{
|
|
827
|
+
type: Input
|
|
828
|
+
}], emptyMessage: [{
|
|
829
|
+
type: Input
|
|
830
|
+
}], emptyBodyHeight: [{
|
|
831
|
+
type: Input
|
|
832
|
+
}], lazy: [{
|
|
833
|
+
type: Input
|
|
834
|
+
}], lazyLoadOnInit: [{
|
|
835
|
+
type: Input
|
|
836
|
+
}], showGlobalFilter: [{
|
|
837
|
+
type: Input
|
|
838
|
+
}], globalFilterPlaceholder: [{
|
|
839
|
+
type: Input
|
|
840
|
+
}], globalFilterFields: [{
|
|
841
|
+
type: Input
|
|
842
|
+
}], clearGlobalFilterOnLoading: [{
|
|
843
|
+
type: Input
|
|
844
|
+
}], showRemoveBtnOnSelect: [{
|
|
845
|
+
type: Input
|
|
846
|
+
}], removeBtnOnSelectDisabled: [{
|
|
847
|
+
type: Input
|
|
848
|
+
}], showAdditionalBtnOnSelect: [{
|
|
849
|
+
type: Input
|
|
850
|
+
}], additionalBtnOnSelectTitle: [{
|
|
851
|
+
type: Input
|
|
852
|
+
}], additionalBtnOnSelectDisabled: [{
|
|
853
|
+
type: Input
|
|
854
|
+
}], showActionBtn: [{
|
|
855
|
+
type: Input
|
|
856
|
+
}], actionBtnTitle: [{
|
|
857
|
+
type: Input
|
|
858
|
+
}], actionBtnDisabled: [{
|
|
859
|
+
type: Input
|
|
860
|
+
}], showExportBtn: [{
|
|
861
|
+
type: Input
|
|
862
|
+
}], exportBtnDisabled: [{
|
|
863
|
+
type: Input
|
|
864
|
+
}], exportFilename: [{
|
|
865
|
+
type: Input
|
|
866
|
+
}], csvSeparator: [{
|
|
867
|
+
type: Input
|
|
868
|
+
}], showDataReloadBtn: [{
|
|
869
|
+
type: Input
|
|
870
|
+
}], dataReloadBtnDisabled: [{
|
|
871
|
+
type: Input
|
|
872
|
+
}], showColumnsToggleBtn: [{
|
|
873
|
+
type: Input
|
|
874
|
+
}], columnsToggleBtnDisabled: [{
|
|
875
|
+
type: Input
|
|
876
|
+
}], initialColumns: [{
|
|
877
|
+
type: Input
|
|
878
|
+
}], data: [{
|
|
879
|
+
type: Input
|
|
880
|
+
}], rowsSelected: [{
|
|
881
|
+
type: Output
|
|
882
|
+
}], selectedRowIndexes: [{
|
|
883
|
+
type: Output
|
|
884
|
+
}], actionBtnClicked: [{
|
|
885
|
+
type: Output
|
|
886
|
+
}], editRowBtnClicked: [{
|
|
887
|
+
type: Output
|
|
888
|
+
}], rowsToRemove: [{
|
|
889
|
+
type: Output
|
|
890
|
+
}], rowIndexesToRemove: [{
|
|
891
|
+
type: Output
|
|
892
|
+
}], pageChanged: [{
|
|
893
|
+
type: Output
|
|
894
|
+
}], sorted: [{
|
|
895
|
+
type: Output
|
|
896
|
+
}], filtered: [{
|
|
897
|
+
type: Output
|
|
898
|
+
}], rowsReordered: [{
|
|
899
|
+
type: Output
|
|
900
|
+
}], columnsSelected: [{
|
|
901
|
+
type: Output
|
|
902
|
+
}], lazyLoaded: [{
|
|
903
|
+
type: Output
|
|
904
|
+
}], dataReloadBtnClicked: [{
|
|
905
|
+
type: Output
|
|
906
|
+
}], additionalBtnOnSelectClicked: [{
|
|
907
|
+
type: Output
|
|
908
|
+
}], customSortFunction: [{
|
|
909
|
+
type: Output
|
|
910
|
+
}], toolbarTemplate: [{
|
|
911
|
+
type: ContentChild,
|
|
912
|
+
args: ['toolbar', { static: false }]
|
|
913
|
+
}], headerTemplate: [{
|
|
914
|
+
type: ContentChild,
|
|
915
|
+
args: ['header', { static: false }]
|
|
916
|
+
}], nestedHeaderTemplate: [{
|
|
917
|
+
type: ContentChild,
|
|
918
|
+
args: ['nestedHeader', { static: false }]
|
|
919
|
+
}], bodyTemplate: [{
|
|
920
|
+
type: ContentChild,
|
|
921
|
+
args: ['body', { static: false }]
|
|
922
|
+
}], rowExpansionTemplate: [{
|
|
923
|
+
type: ContentChild,
|
|
924
|
+
args: ['rowexpansion', { static: false }]
|
|
925
|
+
}], primengTable: [{
|
|
926
|
+
type: ViewChild,
|
|
927
|
+
args: ['primengTable', { static: true }]
|
|
928
|
+
}], globalFilterComp: [{
|
|
929
|
+
type: ViewChild,
|
|
930
|
+
args: ['globalFilterComp']
|
|
931
|
+
}], exportMenu: [{
|
|
932
|
+
type: ViewChild,
|
|
933
|
+
args: ['exportMenu']
|
|
934
|
+
}], colToggleMenu: [{
|
|
935
|
+
type: ViewChild,
|
|
936
|
+
args: ['colToggleMenu']
|
|
937
|
+
}], tUnsortDirective: [{
|
|
938
|
+
type: ViewChild,
|
|
939
|
+
args: ['tUnsortDirective']
|
|
940
|
+
}] } });
|
|
941
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3BzLXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nwcy11aS1raXQvc3JjL2xpYi9jb21wb25lbnRzL2Nwcy10YWJsZS9jcHMtdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3BzLXVpLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvY3BzLXRhYmxlL2Nwcy10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBR04sU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWpFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBZSxNQUFNLGdDQUFnQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLCtEQUErRCxDQUFDO0FBQ3RHLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQ25HLE9B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QUUsS0FBSyxFQUFFO2dCQUl4QyxZQUFZO3NCQURsQixZQUFZO3VCQUFDLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBSWhDLG9CQUFvQjtzQkFEMUIsWUFBWTt1QkFBQyxjQUFjLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUkvQyxZQUFZO3NCQURYLFNBQVM7dUJBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFJM0MsZ0JBQWdCO3NCQURmLFNBQVM7dUJBQUMsa0JBQWtCO2dCQUk3QixVQUFVO3NCQURULFNBQVM7dUJBQUMsWUFBWTtnQkFJdkIsYUFBYTtzQkFEWixTQUFTO3VCQUFDLGVBQWU7Z0JBR0ssZ0JBQWdCO3NCQUE5QyxTQUFTO3VCQUFDLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0NoZWNrZWQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBUYWJsZSwgVGFibGVTZXJ2aWNlLCBUYWJsZU1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdGFibGUnO1xuaW1wb3J0IHsgU29ydEV2ZW50IH0gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHsgQ3BzSW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi9jcHMtaW5wdXQvY3BzLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDcHNCdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi9jcHMtYnV0dG9uL2Nwcy1idXR0b24uY29tcG9uZW50JztcbmltcG9ydCB7IENwc1NlbGVjdENvbXBvbmVudCB9IGZyb20gJy4uL2Nwcy1zZWxlY3QvY3BzLXNlbGVjdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3BzSWNvbkNvbXBvbmVudCB9IGZyb20gJy4uL2Nwcy1pY29uL2Nwcy1pY29uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDcHNNZW51Q29tcG9uZW50LCBDcHNNZW51SXRlbSB9IGZyb20gJy4uL2Nwcy1tZW51L2Nwcy1tZW51LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDcHNMb2FkZXJDb21wb25lbnQgfSBmcm9tICcuLi9jcHMtbG9hZGVyL2Nwcy1sb2FkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFRhYmxlUm93TWVudUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9pbnRlcm5hbC90YWJsZS1yb3ctbWVudS90YWJsZS1yb3ctbWVudS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3BzVGFibGVDb2x1bW5Tb3J0YWJsZURpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcy9jcHMtdGFibGUtY29sdW1uLXNvcnRhYmxlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBUYWJsZVVuc29ydERpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcy9pbnRlcm5hbC90YWJsZS11bnNvcnQuZGlyZWN0aXZlJztcbmltcG9ydCB7IGNvbnZlcnRTaXplIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW50ZXJuYWwvc2l6ZS11dGlscyc7XG5pbXBvcnQgeyBpc0VxdWFsIH0gZnJvbSAnbG9kYXNoLWVzJztcblxuLy8gaW1wb3J0IGpzUERGIGZyb20gJ2pzcGRmJztcbi8vIGltcG9ydCAnanNwZGYtYXV0b3RhYmxlJztcblxuZXhwb3J0IGZ1bmN0aW9uIHRhYmxlRmFjdG9yeSh0YWJsZUNvbXBvbmVudDogQ3BzVGFibGVDb21wb25lbnQpIHtcbiAgcmV0dXJuIHRhYmxlQ29tcG9uZW50LnByaW1lbmdUYWJsZTtcbn1cblxuZXhwb3J0IHR5cGUgQ3BzVGFibGVFeHBvcnRGb3JtYXQgPSAnY3N2JyB8ICd4bHN4JzsgLy8gfCAncGRmJztcbmV4cG9ydCB0eXBlIENwc1RhYmxlU2l6ZSA9ICdzbWFsbCcgfCAnbm9ybWFsJyB8ICdsYXJnZSc7XG5leHBvcnQgdHlwZSBDcHNUYWJsZVRvb2xiYXJTaXplID0gJ3NtYWxsJyB8ICdub3JtYWwnO1xuZXhwb3J0IHR5cGUgQ3BzVGFibGVTb3J0TW9kZSA9ICdzaW5nbGUnIHwgJ211bHRpcGxlJztcblxuLyoqXG4gKiBDcHNUYWJsZUNvbXBvbmVudCBkaXNwbGF5cyBkYXRhIGluIHRhYnVsYXIgZm9ybWF0LlxuICogQGdyb3VwIENvbXBvbmVudHNcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3BzLXRhYmxlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgVGFibGVNb2R1bGUsXG4gICAgVGFibGVVbnNvcnREaXJlY3RpdmUsXG4gICAgQ3BzSW5wdXRDb21wb25lbnQsXG4gICAgQ3BzQnV0dG9uQ29tcG9uZW50LFxuICAgIENwc1NlbGVjdENvbXBvbmVudCxcbiAgICBDcHNJY29uQ29tcG9uZW50LFxuICAgIENwc01lbnVDb21wb25lbnQsXG4gICAgQ3BzTG9hZGVyQ29tcG9uZW50LFxuICAgIFRhYmxlUm93TWVudUNvbXBvbmVudCxcbiAgICBDcHNUYWJsZUNvbHVtblNvcnRhYmxlRGlyZWN0aXZlXG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9jcHMtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jcHMtdGFibGUuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgVGFibGVTZXJ2aWNlLFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IFRhYmxlLFxuICAgICAgdXNlRmFjdG9yeTogdGFibGVGYWN0b3J5LFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgICBkZXBzOiBbQ3BzVGFibGVDb21wb25lbnRdXG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIENwc1RhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdDaGVja2VkLCBPbkNoYW5nZXMge1xuICAvKipcbiAgICogQW4gYXJyYXkgb2Ygb2JqZWN0cyB0byByZXByZXNlbnQgZHluYW1pYyBjb2x1bW5zLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGNvbHVtbnM6IHsgW2tleTogc3RyaW5nXTogYW55IH1bXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBBIGtleSB1c2VkIHRvIHJldHJpZXZlIHRoZSBoZWFkZXIgZnJvbSBjb2x1bW5zLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGNvbEhlYWRlck5hbWUgPSAnaGVhZGVyJztcblxuICAvKipcbiAgICogQSBrZXkgdXNlZCB0byByZXRyaWV2ZSB0aGUgZmllbGQgZnJvbSBjb2x1bW5zLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGNvbEZpZWxkTmFtZSA9ICdmaWVsZCc7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0aGUgdGFibGUgc2hvdWxkIGhhdmUgYWx0ZXJuYXRpbmcgc3RyaXBlcy5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBzdHJpcGVkID0gdHJ1ZTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSB0YWJsZSBzaG91bGQgaGF2ZSBib3JkZXJzLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGJvcmRlcmVkID0gdHJ1ZTtcblxuICAvKipcbiAgICogU2l6ZSBvZiB0YWJsZSBjZWxscywgaXQgY2FuIGJlIFwic21hbGxcIiwgXCJub3JtYWxcIiBvciBcImxhcmdlXCIuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgc2l6ZTogQ3BzVGFibGVTaXplID0gJ25vcm1hbCc7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0aGUgdGFibGUgc2hvdWxkIGhhdmUgcm93IHNlbGVjdGlvbi5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBzZWxlY3RhYmxlID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0aGUgdGFibGUgc2hvdWxkIGhhdmUgcm93cyBoaWdobGlnaHRpbmcgb24gaG92ZXIuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgcm93SG92ZXIgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBGaWVsZCwgdGhhdCB1bmlxdWVseSBpZGVudGlmaWVzIGEgcmVjb3JkIGluIGRhdGEgKG5lZWRlZCBmb3IgZXhwYW5kYWJsZSByb3dzKS5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBkYXRhS2V5ID0gJyc7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0aGUgdGFibGUgc2hvdWxkIHNob3cgcm93IG1lbnVzLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIHNob3dSb3dNZW51ID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0aGUgJ1JlbW92ZScgYnV0dG9uIHNob3VsZCBiZSBkaXNwbGF5ZWQgaW4gdGhlIHJvdyBtZW51LlxuICAgKiBOb3RlOiBUaGlzIHNldHRpbmcgb25seSB0YWtlcyBlZmZlY3QgaWYgJ3Nob3dSb3dNZW51JyBpcyB0cnVlLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIHNob3dSb3dSZW1vdmVCdXR0b24gPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlICdFZGl0JyBidXR0b24gc2hvdWxkIGJlIGRpc3BsYXllZCBpbiB0aGUgcm93IG1lbnUuXG4gICAqIE5vdGU6IFRoaXMgc2V0dGluZyBvbmx5IHRha2VzIGVmZmVjdCBpZiAnc2hvd1Jvd01lbnUnIGlzIHRydWUuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgc2hvd1Jvd0VkaXRCdXR0b24gPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHRhYmxlIHNob3VsZCBoYXZlIHJlLW9yZGVyYWJsZSByb3dzLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIHJlb3JkZXJhYmxlUm93cyA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBXaGVuIGVuYWJsZWQsIGEgbG9hZGVyIGNvbXBvbmVudCBpcyBkaXNwbGF5ZWQuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgbG9hZGluZyA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBJbmxpbmUgc3R5bGUgb2YgdGhlIHRhYmxlLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIHRhYmxlU3R5bGUgPSB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFN0eWxlIGNsYXNzIG9mIHRoZSB0YWJsZS5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSB0YWJsZVN0eWxlQ2xhc3MgPSAnJztcblxuICAvKipcbiAgICogTWFrZXMgYWxsIGNvbHVtbnMgc29ydGFibGUgaWYgY29sdW1ucyBwcm9wIGlzIHByb3ZpZGVkLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIHNvcnRhYmxlID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciBzb3J0aW5nIHdvcmtzIG9uIHNpbmdsZSBjb2x1bW4gb3Igb24gbXVsdGlwbGUgY29sdW1ucy5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBzb3J0TW9kZTogQ3BzVGFibGVTb3J0TW9kZSA9ICdzaW5nbGUnO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gdXNlIHRoZSBkZWZhdWx0IHNvcnRpbmcgb3IgYSBjdXN0b20gb25lIHVzaW5nIHNvcnRGdW5jdGlvbi5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBjdXN0b21Tb3J0ID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0aGUgdGFibGUgaGFzIGEgdG9vbGJhci5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBoYXNUb29sYmFyID0gdHJ1ZTtcblxuICAvKipcbiAgICogVG9vbGJhciBzaXplLCBpdCBjYW4gYmUgXCJzbWFsbFwiIG9yIFwibm9ybWFsXCIuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgdG9vbGJhclNpemU6IENwc1RhYmxlVG9vbGJhclNpemUgPSAnbm9ybWFsJztcblxuICAvKipcbiAgICogVG9vbGJhciB0aXRsZS5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSB0b29sYmFyVGl0bGUgPSAnJztcblxuICAvKipcbiAgICogVG9vbGJhciBpY29uIG5hbWUuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgdG9vbGJhckljb24gPSAnJztcblxuICAvKipcbiAgICogVG9vbGJhciBpY29uIGNvbG9yLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIHRvb2xiYXJJY29uQ29sb3IgPSAnJztcblxuICAvKipcbiAgICogTWFrZXMgdGFibGUgc2Nyb2xsYWJsZS5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBzY3JvbGxhYmxlID0gdHJ1ZTtcblxuICAvKipcbiAgICogSGVpZ2h0IG9mIHRoZSBzY3JvbGwgdmlld3BvcnQgaW4gZml4ZWQgcGl4ZWxzIG9yIHRoZSBcImZsZXhcIiBrZXl3b3JkIGZvciBhIGR5bmFtaWMgc2l6ZS5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBzY3JvbGxIZWlnaHQgPSAnJztcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIG9ubHkgdGhlIGVsZW1lbnRzIHdpdGhpbiBzY3JvbGxhYmxlIGFyZWEgc2hvdWxkIGJlIGFkZGVkIGludG8gdGhlIERPTS4gV29ya3Mgb25seSBpZiBzY3JvbGxhYmxlIHByb3AgaXMgdHJ1ZS5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSB2aXJ0dWFsU2Nyb2xsID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgaG93IG1hbnkgYWRkaXRpb25hbCBlbGVtZW50cyB0byBhZGQgdG8gdGhlIERPTSBvdXRzaWRlIG9mIHRoZSB2aWV3LlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIG51bVRvbGVyYXRlZEl0ZW1zID0gMTA7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0aGUgdGFibGUgc2hvdWxkIGhhdmUgcGFnaW5hdG9yLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIHBhZ2luYXRvciA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gc2hvdyBwYWdpbmF0b3IgZXZlbiBpZiB0aGVyZSBpcyBvbmx5IG9uZSBwYWdlLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGFsd2F5c1Nob3dQYWdpbmF0b3IgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBBcnJheSBvZiBpbnRlZ2VyIHZhbHVlcyB0byBkaXNwbGF5IGluc2lkZSByb3dzIHBlciBwYWdlIGRyb3Bkb3duIG9mIHBhZ2luYXRvci5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSByb3dzUGVyUGFnZU9wdGlvbnM6IG51bWJlcltdID0gW107XG5cbiAgLyoqXG4gICAqIEluZGV4IG9mIHRoZSBmaXJzdCByb3cgdG8gYmUgZGlzcGxheWVkLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGZpcnN0ID0gMDtcblxuICAvKipcbiAgICogTnVtYmVyIG9mIHJvd3MgdG8gZGlzcGxheSBwZXIgcGFnZS5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSByb3dzID0gMDtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHJlc2V0IHBhZ2Ugb24gcm93cyBjaGFuZ2UuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgcmVzZXRQYWdlT25Sb3dzQ2hhbmdlID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0byByZXNldCBwYWdlIG9uIHRhYmxlIGRhdGEgc29ydGluZy5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSByZXNldFBhZ2VPblNvcnQgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBOdW1iZXIgb2YgdG90YWwgcmVjb3Jkcy5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSB0b3RhbFJlY29yZHMgPSAwO1xuXG4gIC8qKlxuICAgKiBUZXh0IHRvIGRpc3BsYXkgd2hlbiB0aGVyZSBpcyBubyBkYXRhLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGVtcHR5TWVzc2FnZSA9ICdObyBkYXRhJztcblxuICAvKipcbiAgICogSGVpZ2h0IG9mIHRhYmxlJ3MgYm9keSB3aGVuIHRoZXJlIGlzIG5vIGRhdGEsIG9mIHR5cGUgbnVtYmVyIGRlbm90aW5nIHBpeGVscyBvciBzdHJpbmcuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgZW1wdHlCb2R5SGVpZ2h0OiBudW1iZXIgfCBzdHJpbmcgPSAnJztcblxuICAvKipcbiAgICogRGVmaW5lcyBpZiBkYXRhIGlzIGxvYWRlZCBhbmQgaW50ZXJhY3RlZCB3aXRoIGluIGxhenkgbWFubmVyLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGxhenkgPSBmYWxzZTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGNhbGwgbGF6eSBsb2FkaW5nIG9uIGluaXRpYWxpemF0aW9uLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGxhenlMb2FkT25Jbml0ID0gdHJ1ZTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHNob3cgZ2xvYmFsIGZpbHRlciBpbiB0aGUgdG9vbGJhci5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBzaG93R2xvYmFsRmlsdGVyID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEdsb2JhbCBmaWx0ZXIgcGxhY2Vob2xkZXIuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgZ2xvYmFsRmlsdGVyUGxhY2Vob2xkZXIgPSAnU2VhcmNoJztcblxuICAvKipcbiAgICogQW4gYXJyYXkgb2YgZmllbGRzIHRvIHVzZSBpbiBnbG9iYWwgZmlsdGVyaW5nLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGdsb2JhbEZpbHRlckZpZWxkczogc3RyaW5nW10gPSBbXTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGNsZWFyIGdsb2JhbCBmaWx0ZXIgb24gZGF0YSBsb2FkaW5nLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGNsZWFyR2xvYmFsRmlsdGVyT25Mb2FkaW5nID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0byBzaG93IHJlbW92ZSBidXR0b24gaW4gdGhlIHRvb2xiYXIgd2hlbiByb3dzIGFyZSBzZWxlY3RlZC5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBzaG93UmVtb3ZlQnRuT25TZWxlY3QgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgcmVtb3ZlQnRuT25TZWxlY3QgaXMgZGlzYWJsZWQuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgcmVtb3ZlQnRuT25TZWxlY3REaXNhYmxlZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gc2hvdyBhZGRpdGlvbmFsIGJ1dHRvbiBpbiB0aGUgdG9vbGJhciB3aGVuIHJvd3MgYXJlIHNlbGVjdGVkLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIHNob3dBZGRpdGlvbmFsQnRuT25TZWxlY3QgPSBmYWxzZTtcblxuICAvKipcbiAgICogQWRkaXRpb25hbEJ0bk9uU2VsZWN0IHRpdGxlLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGFkZGl0aW9uYWxCdG5PblNlbGVjdFRpdGxlID0gJ1NlbGVjdCBhY3Rpb24nO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgYWRkaXRpb25hbEJ0bk9uU2VsZWN0IGlzIGRpc2FibGVkLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGFkZGl0aW9uYWxCdG5PblNlbGVjdERpc2FibGVkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0byBzaG93IGFjdGlvbiBidXR0b24gaW4gdGhlIHRvb2xiYXIuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgc2hvd0FjdGlvbkJ0biA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBBY3Rpb24gYnV0dG9uIHRpdGxlLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGFjdGlvbkJ0blRpdGxlID0gJ0FjdGlvbic7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciBhY3Rpb25CdG4gaXMgZGlzYWJsZWQuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgYWN0aW9uQnRuRGlzYWJsZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHNob3cgZXhwb3J0IGJ1dHRvbiBpbiB0aGUgdG9vbGJhci5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBzaG93RXhwb3J0QnRuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciBleHBvcnRCdG4gaXMgZGlzYWJsZWQuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgZXhwb3J0QnRuRGlzYWJsZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogTmFtZSBvZiB0aGUgZXhwb3J0ZWQgZmlsZS5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBleHBvcnRGaWxlbmFtZSA9ICdkb3dubG9hZCc7XG5cbiAgLyoqXG4gICAqIENoYXJhY3RlciB0byB1c2UgYXMgdGhlIGNzdiBzZXBhcmF0b3IuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgY3N2U2VwYXJhdG9yID0gJywnO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gc2hvdyBkYXRhIHJlbG9hZCBidXR0b24gaW4gdGhlIHRvb2xiYXIuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgc2hvd0RhdGFSZWxvYWRCdG4gPSBmYWxzZTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIGRhdGFSZWxvYWRCdG4gaXMgZGlzYWJsZWQuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgZGF0YVJlbG9hZEJ0bkRpc2FibGVkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0aGUgdGFibGUgc2hvdWxkIHNob3cgY29sdW1uc1RvZ2dsZSBtZW51LCB3aGVyZSB5b3UgY2FuIGNob29zZSB3aGljaCBjb2x1bW5zIHRvIGJlIGRpc3BsYXllZC4gSWYgZXh0ZXJuYWwgYm9keSB0ZW1wbGF0ZSBpcyBwcm92aWRlZCwgdXNlIGNvbHVtbnNTZWxlY3RlZCBldmVudCBlbWl0dGVyLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIHNob3dDb2x1bW5zVG9nZ2xlQnRuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciBjb2x1bW5zVG9nZ2xlIGJ1dHRvbiBpcyBkaXNhYmxlZC5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBjb2x1bW5zVG9nZ2xlQnRuRGlzYWJsZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogQXJyYXkgb2YgaW5pdGlhbCBjb2x1bW5zIHRvIHNob3cgaW4gdGhlIHRhYmxlLiBJZiBub3QgcHJvdmlkZWQsIGFsbCBjb2x1bW5zIGFyZSBpbml0aWFsbHkgdmlzaWJsZS5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBpbml0aWFsQ29sdW1uczogeyBba2V5OiBzdHJpbmddOiBhbnkgfVtdID0gW107XG5cbiAgLyoqXG4gICAqIEFuIGFycmF5IG9mIG9iamVjdHMgdG8gZGlzcGxheS5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBzZXQgZGF0YSh2YWx1ZTogYW55W10pIHtcbiAgICB0aGlzLl9kYXRhID0gWy4uLnZhbHVlXTtcbiAgfVxuXG4gIGdldCBkYXRhKCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayB0byBpbnZva2Ugb24gc2VsZWN0aW9uIGNoYW5nZWQuIFJldHVybnMgc2VsZWN0ZWQgcm93cy5cbiAgICogQHBhcmFtIHthbnlbXX0gYW55W10gLSBzZWxlY3RlZCByb3dzLlxuICAgKiBAZ3JvdXAgRW1pdHNcbiAgICovXG4gIEBPdXRwdXQoKSByb3dzU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueVtdPigpO1xuXG4gIC8qKlxuICAgKiBDYWxsYmFjayB0byBpbnZva2Ugb24gc2VsZWN0aW9uIGNoYW5nZWQuIFJldHVybnMgc2VsZWN0ZWQgcm93cyBpbmRleGVzLlxuICAgKiBAcGFyYW0ge251bWJlcltdfSBudW1iZXJbXSAtIHNlbGVjdGVkIHJvd3MgaW5kZXhlcy5cbiAgICogQGdyb3VwIEVtaXRzXG4gICAqL1xuICBAT3V0cHV0KCkgc2VsZWN0ZWRSb3dJbmRleGVzID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXJbXT4oKTtcblxuICAvKipcbiAgICogQ2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gYWN0aW9uIGJ1dHRvbiBpcyBjbGlja2VkLlxuICAgKiBAcGFyYW0ge3ZvaWR9IHZvaWQgLSBhY3Rpb24gYnV0dG9uIGNsaWNrZWQuXG4gICAqIEBncm91cCBFbWl0c1xuICAgKi9cbiAgQE91dHB1dCgpIGFjdGlvbkJ0bkNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIHRvIGludm9rZSB3aGVuIGVkaXQtcm93IGJ1dHRvbiBpcyBjbGlja2VkLlxuICAgKiBAcGFyYW0ge3tyb3c6IGFueSwgaW5kZXg6IG51bWJlcn19IHtyb3c6IGFueSwgaW5kZXg6IG51bWJlcn0gLSBlZGl0LXJvdyBidXR0b24gY2xpY2tlZC5cbiAgICogQGdyb3VwIEVtaXRzXG4gICAqL1xuICBAT3V0cHV0KCkgZWRpdFJvd0J0bkNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHsgcm93OiBhbnk7IGluZGV4OiBudW1iZXIgfT4oKTtcblxuICAvKipcbiAgICogQ2FsbGJhY2sgdG8gaW52b2tlIG9uIHJvd3MgcmVtb3ZhbC4gUmV0dXJucyByb3dzLlxuICAgKiBAcGFyYW0ge2FueVtdfSBhbnlbXSAtIGFycmF5IG9mIHJvd3MgdG8gcmVtb3ZlLlxuICAgKiBAZ3JvdXAgRW1pdHNcbiAgICovXG4gIEBPdXRwdXQoKSByb3dzVG9SZW1vdmUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueVtdPigpO1xuXG4gIC8qKlxuICAgKiBDYWxsYmFjayB0byBpbnZva2Ugb24gcm93cyByZW1vdmFsLiBSZXR1cm5zIHJvd3MgaW5kZXhlcy5cbiAgICogQHBhcmFtIHtudW1iZXJbXX0gbnVtYmVyW10gLSBhcnJheSBvZiBpbmRleGVzIG9mIHJvd3MgdG8gcmVtb3ZlLlxuICAgKiBAZ3JvdXAgRW1pdHNcbiAgICovXG4gIEBPdXRwdXQoKSByb3dJbmRleGVzVG9SZW1vdmUgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcltdPigpO1xuXG4gIC8qKlxuICAgKiBDYWxsYmFjayB0byBpbnZva2Ugb24gcGFnZSBjaGFuZ2VkLlxuICAgKiBAcGFyYW0ge2FueX0gYW55IC0gcGFnZSBjaGFuZ2VkLlxuICAgKiBAZ3JvdXAgRW1pdHNcbiAgICovXG4gIEBPdXRwdXQoKSBwYWdlQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIC8qKlxuICAgKiBDYWxsYmFjayB0byBpbnZva2Ugd2hlbiBkYXRhIGlzIHNvcnRlZC5cbiAgICogQHBhcmFtIHthbnl9IGFueSAtIHNvcnQgbWV0YS5cbiAgICogQGdyb3VwIEVtaXRzXG4gICAqL1xuICBAT3V0cHV0KCkgc29ydGVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIHRvIGludm9rZSB3aGVuIGRhdGEgaXMgZmlsdGVyZWQuXG4gICAqIEBwYXJhbSB7YW55fSBhbnkgLSBjdXN0b20gZmlsdGVyaW5nIGV2ZW50LlxuICAgKiBAZ3JvdXAgRW1pdHNcbiAgICovXG4gIEBPdXRwdXQoKSBmaWx0ZXJlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIC8qKlxuICAgKiBDYWxsYmFjayB0byBpbnZva2Ugd2hlbiByb3dzIGFyZSByZW9yZGVyZWQuXG4gICAqIEBwYXJhbSB7YW55fSBhbnkgLSByb3dzIHJlb3JkZXJlZC5cbiAgICogQGdyb3VwIEVtaXRzXG4gICAqL1xuICBAT3V0cHV0KCkgcm93c1Jlb3JkZXJlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIC8qKlxuICAgKiBDYWxsYmFjayB0byBpbnZva2Ugb24gY29sdW1ucyBzZWxlY3Rpb24uXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvYmplY3QgLSBzZWxlY3RlZCBjb2x1bW4uXG4gICAqIEBncm91cCBFbWl0c1xuICAgKi9cbiAgQE91dHB1dCgpIGNvbHVtbnNTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBba2V5OiBzdHJpbmddOiBhbnkgfVtdPigpO1xuXG4gIC8qKlxuICAgKiBDYWxsYmFjayB0byBpbnZva2Ugd2hlbiBwYWdpbmcsIHNvcnRpbmcgb3IgZmlsdGVyaW5nIGhhcHBlbnMgaW4gbGF6eSBtb2RlLlxuICAgKiBAcGFyYW0ge2FueX0gYW55IC0gY3VzdG9tIGxhenkgbG9hZGluZyBldmVudC5cbiAgICogQGdyb3VwIEVtaXRzXG4gICAqL1xuICBAT3V0cHV0KCkgbGF6eUxvYWRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIC8qKlxuICAgKiBDYWxsYmFjayB0byBpbnZva2Ugd2hlbiBkYXRhLXJlbG9hZCBidXR0b24gaXMgY2xpY2tlZC5cbiAgICogQHBhcmFtIHthbnl9IGFueSAtIGJ1dHRvbiBjbGlja2VkLlxuICAgKiBAZ3JvdXAgRW1pdHNcbiAgICovXG4gIEBPdXRwdXQoKSBkYXRhUmVsb2FkQnRuQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIC8qKlxuICAgKiBDYWxsYmFjayB0byBpbnZva2Ugd2hlbiBhZGRpdGlvbmFsIGJ1dHRvbiBvbiBzZWxlY3QgaXMgY2xpY2tlZC5cbiAgICogQHBhcmFtIHthbnlbXX0gYW55W10gLSBzZWxlY3RlZCBkYXRhLlxuICAgKiBAZ3JvdXAgRW1pdHNcbiAgICovXG4gIEBPdXRwdXQoKSBhZGRpdGlvbmFsQnRuT25TZWxlY3RDbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXT4oKTtcblxuICAvKipcbiAgICogQSBmdW5jdGlvbiB0byBpbXBsZW1lbnQgY3VzdG9tIHNvcnRpbmcuIGN1c3RvbVNvcnQgbXVzdCBiZSB0cnVlLlxuICAgKiBAcGFyYW0ge2FueX0gYW55IC0gc29ydCBtZXRhLlxuICAgKiBAZ3JvdXAgRW1pdHNcbiAgICovXG4gIEBPdXRwdXQoKSBjdXN0b21Tb3J0RnVuY3Rpb246IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQENvbnRlbnRDaGlsZCgndG9vbGJhcicsIHsgc3RhdGljOiBmYWxzZSB9KVxuICBwdWJsaWMgdG9vbGJhclRlbXBsYXRlITogVGVtcGxhdGVSZWY8YW55PjtcblxuICBAQ29udGVudENoaWxkKCdoZWFkZXInLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgcHVibGljIGhlYWRlclRlbXBsYXRlITogVGVtcGxhdGVSZWY8YW55PjtcblxuICBAQ29udGVudENoaWxkKCduZXN0ZWRIZWFkZXInLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgcHVibGljIG5lc3RlZEhlYWRlclRlbXBsYXRlITogVGVtcGxhdGVSZWY8YW55PjtcblxuICBAQ29udGVudENoaWxkKCdib2R5JywgeyBzdGF0aWM6IGZhbHNlIH0pXG4gIHB1YmxpYyBib2R5VGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIEBDb250ZW50Q2hpbGQoJ3Jvd2V4cGFuc2lvbicsIHsgc3RhdGljOiBmYWxzZSB9KVxuICBwdWJsaWMgcm93RXhwYW5zaW9uVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIEBWaWV3Q2hpbGQoJ3ByaW1lbmdUYWJsZScsIHsgc3RhdGljOiB0cnVlIH0pXG4gIHByaW1lbmdUYWJsZSE6IFRhYmxlO1xuXG4gIEBWaWV3Q2hpbGQoJ2dsb2JhbEZpbHRlckNvbXAnKVxuICBnbG9iYWxGaWx0ZXJDb21wITogQ3BzSW5wdXRDb21wb25lbnQ7XG5cbiAgQFZpZXdDaGlsZCgnZXhwb3J0TWVudScpXG4gIGV4cG9ydE1lbnUhOiBDcHNNZW51Q29tcG9uZW50O1xuXG4gIEBWaWV3Q2hpbGQoJ2NvbFRvZ2dsZU1lbnUnKVxuICBjb2xUb2dnbGVNZW51ITogQ3BzTWVudUNvbXBvbmVudDtcblxuICBAVmlld0NoaWxkKCd0VW5zb3J0RGlyZWN0aXZlJykgdFVuc29ydERpcmVjdGl2ZSE6IFRhYmxlVW5zb3J0RGlyZWN0aXZlO1xuXG4gIF9kYXRhOiBhbnlbXSA9IFtdO1xuXG4gIHNlbGVjdGVkUm93czogYW55W10gPSBbXTtcblxuICB2aXJ0dWFsU2Nyb2xsSXRlbVNpemUgPSAwO1xuXG4gIHJvd09wdGlvbnM6IHsgbGFiZWw6IHN0cmluZzsgdmFsdWU6IG51bWJlciB9W10gPSBbXTtcblxuICBzZWxlY3RlZENvbHVtbnM6IHsgW2tleTogc3RyaW5nXTogYW55IH1bXSA9IFtdO1xuXG4gIGV4cG9ydE1lbnVJdGVtcyA9IFtcbiAgICB7XG4gICAgICB0aXRsZTogJ0NTVicsXG4gICAgICBpY29uOiAnY3N2JyxcbiAgICAgIGFjdGlvbjogKCkgPT4ge1xuICAgICAgICB0aGlzLmV4cG9ydFRhYmxlKCdjc3YnKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIHRpdGxlOiAnWExTWCcsXG4gICAgICBpY29uOiAneGxzJyxcbiAgICAgIGFjdGlvbjogKCkgPT4ge1xuICAgICAgICB0aGlzLmV4cG9ydFRhYmxlKCd4bHN4Jyk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIHtcbiAgICAvLyAgIHRpdGxlOiAnUERGJyxcbiAgICAvLyAgIGljb246ICdwZGYnLFxuICAgIC8vICAgYWN0aW9uOiAoKSA9PiB7XG4gICAgLy8gICAgIHRoaXMuZXhwb3J0VGFibGUoJ3BkZicpO1xuICAgIC8vICAgfVxuICAgIC8vIH1cbiAgXSBhcyBDcHNNZW51SXRlbVtdO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWNvbnN0cnVjdG9yXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZW1wdHlCb2R5SGVpZ2h0ID0gY29udmVydFNpemUodGhpcy5lbXB0eUJvZHlIZWlnaHQpO1xuICAgIGlmICghdGhpcy5zY3JvbGxhYmxlKSB0aGlzLnZpcnR1YWxTY3JvbGwgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLnNob3dBZGRpdGlvbmFsQnRuT25TZWxlY3QpIHRoaXMuc2hvd1JlbW92ZUJ0bk9uU2VsZWN0ID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5wYWdpbmF0b3IpIHtcbiAgICAgIGlmICh0aGlzLnJvd3NQZXJQYWdlT3B0aW9ucy5sZW5ndGggPCAxKVxuICAgICAgICB0aGlzLnJvd3NQZXJQYWdlT3B0aW9ucyA9IFs1LCAxMCwgMjUsIDUwXTtcblxuICAgICAgaWYgKCF0aGlzLnJvd3MpIHRoaXMucm93cyA9IHRoaXMucm93c1BlclBhZ2VPcHRpb25zWzBdO1xuICAgICAgZWxzZSB7XG4gICAgICAgIGlmICghdGhpcy5yb3dzUGVyUGFnZU9wdGlvbnMuaW5jbHVkZXModGhpcy5yb3dzKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncm93c1BlclBhZ2VPcHRpb25zIG11c3QgaW5jbHVkZSByb3dzJyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5yb3dPcHRpb25zID0gdGhpcy5yb3dzUGVyUGFnZU9wdGlvbnMubWFwKCh2KSA9PiAoe1xuICAgICAgICBsYWJlbDogJycgKyB2LFxuICAgICAgICB2YWx1ZTogdlxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHRoaXMuc2hvd0dsb2JhbEZpbHRlciAmJlxuICAgICAgdGhpcy5nbG9iYWxGaWx0ZXJGaWVsZHM/Lmxlbmd0aCA8IDEgJiZcbiAgICAgIHRoaXMuZGF0YT8ubGVuZ3RoID4gMFxuICAgICkge1xuICAgICAgdGhpcy5nbG9iYWxGaWx0ZXJGaWVsZHMgPSBPYmplY3Qua2V5cyh0aGlzLmRhdGFbMF0pO1xuICAgIH1cblxuICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zID1cbiAgICAgIHRoaXMuaW5pdGlhbENvbHVtbnMubGVuZ3RoID4gMCA/IHRoaXMuaW5pdGlhbENvbHVtbnMgOiB0aGlzLmNvbHVtbnM7XG4gIH1cblxuICBnZXQgc3R5bGVDbGFzcygpIHtcbiAgICBjb25zdCBjbGFzc2VzTGlzdCA9IFtdO1xuICAgIHN3aXRjaCAodGhpcy5zaXplKSB7XG4gICAgICBjYXNlICdzbWFsbCc6XG4gICAgICAgIGNsYXNzZXNMaXN0LnB1c2goJ3AtZGF0YXRhYmxlLXNtJyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbGFyZ2UnOlxuICAgICAgICBjbGFzc2VzTGlzdC5wdXNoKCdwLWRhdGF0YWJsZS1sZycpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgaWYgKHRoaXMuaGFzVG9vbGJhcikge1xuICAgICAgc3dpdGNoICh0aGlzLnRvb2xiYXJTaXplKSB7XG4gICAgICAgIGNhc2UgJ3NtYWxsJzpcbiAgICAgICAgICBjbGFzc2VzTGlzdC5wdXNoKCdjcHMtdGJhci1zbWFsbCcpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdub3JtYWwnOlxuICAgICAgICAgIGNsYXNzZXNMaXN0LnB1c2goJ2Nwcy10YmFyLW5vcm1hbCcpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLnN0cmlwZWQpIHtcbiAgICAgIGNsYXNzZXNMaXN0LnB1c2goJ3AtZGF0YXRhYmxlLXN0cmlwZWQnKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuYm9yZGVyZWQpIHtcbiAgICAgIGNsYXNzZXNMaXN0LnB1c2goJ3AtZGF0YXRhYmxlLWdyaWRsaW5lcycpO1xuICAgIH1cblxuICAgIHJldHVybiBjbGFzc2VzTGlzdC5qb2luKCcgJyk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0NoZWNrZWQoKSB7XG4gICAgaWYgKCF0aGlzLnZpcnR1YWxTY3JvbGwgfHwgdGhpcy52aXJ0dWFsU2Nyb2xsSXRlbVNpemUpIHJldHVybjtcbiAgICB0aGlzLnZpcnR1YWxTY3JvbGxJdGVtU2l6ZSA9XG4gICAgICB0aGlzLnByaW1lbmdUYWJsZT8uZWw/Lm5hdGl2ZUVsZW1lbnRcbiAgICAgICAgPy5xdWVyeVNlbGVjdG9yKCcucC1kYXRhdGFibGUtdGJvZHknKVxuICAgICAgICA/LnF1ZXJ5U2VsZWN0b3IoJ3RyJyk/LmNsaWVudEhlaWdodCB8fCAwO1xuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmICh0aGlzLmxvYWRpbmcpIHtcbiAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgIGlmICh0aGlzLmNsZWFyR2xvYmFsRmlsdGVyT25Mb2FkaW5nKSB0aGlzLmNsZWFyR2xvYmFsRmlsdGVyKCk7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXM/LmRhdGEpIHtcbiAgICAgIHRoaXMucmVzZXRTb3J0aW5nU3RhdGUoKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzID0gdGhpcy5zZWxlY3RlZFJvd3MuZmlsdGVyKChzcikgPT5cbiAgICAgICAgdGhpcy5kYXRhLmluY2x1ZGVzKHNyKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXNldFNvcnRpbmdTdGF0ZSgpIHtcbiAgICB0aGlzLnRVbnNvcnREaXJlY3RpdmU/LnJlc2V0RGVmYXVsdFNvcnRPcmRlcigpO1xuICB9XG5cbiAgY2xlYXJTZWxlY3Rpb24oKSB7XG4gICAgdGhpcy5zZWxlY3RlZFJvd3MgPSBbXTtcbiAgfVxuXG4gIGNsZWFyR2xvYmFsRmlsdGVyKCkge1xuICAgIHRoaXMuZ2xvYmFsRmlsdGVyQ29tcD8uY2xlYXIoKTtcbiAgfVxuXG4gIG9uU2VsZWN0aW9uQ2hhbmdlZChzZWxlY3Rpb246IGFueVtdKSB7XG4gICAgdGhpcy5yb3dzU2VsZWN0ZWQuZW1pdChzZWxlY3Rpb24pO1xuXG4gICAgY29uc3QgaW5kZXhlcyA9IHRoaXMuX2dldEluZGV4ZXMoc2VsZWN0aW9uKTtcbiAgICB0aGlzLnNlbGVjdGVkUm93SW5kZXhlcy5lbWl0KGluZGV4ZXMpO1xuICB9XG5cbiAgb25Tb3J0RnVuY3Rpb24oZXZlbnQ6IFNvcnRFdmVudCkge1xuICAgIHRoaXMuY3VzdG9tU29ydEZ1bmN0aW9uLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgb25GaWx0ZXJHbG9iYWwodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMucHJpbWVuZ1RhYmxlLmZpbHRlckdsb2JhbCh2YWx1ZSwgJ2NvbnRhaW5zJyk7XG4gIH1cblxuICByZW1vdmVTZWxlY3RlZCgpIHtcbiAgICB0aGlzLnJvd3NUb1JlbW92ZS5lbWl0KHRoaXMuc2VsZWN0ZWRSb3dzKTtcblxuICAgIGNvbnN0IGluZGV4ZXMgPSB0aGlzLl9nZXRJbmRleGVzKHRoaXMuc2VsZWN0ZWRSb3dzKTtcbiAgICB0aGlzLnJvd0luZGV4ZXNUb1JlbW92ZS5lbWl0KGluZGV4ZXMpO1xuICB9XG5cbiAgb25DbGlja0FkZGl0aW9uYWxCdG5PblNlbGVjdCgpIHtcbiAgICB0aGlzLmFkZGl0aW9uYWxCdG5PblNlbGVjdENsaWNrZWQuZW1pdCh0aGlzLnNlbGVjdGVkUm93cyk7XG4gIH1cblxuICBvbkNsaWNrQWN0aW9uQnRuKCkge1xuICAgIHRoaXMuYWN0aW9uQnRuQ2xpY2tlZC5lbWl0KCk7XG4gIH1cblxuICBvblJvd3NQZXJQYWdlQ2hhbmdlZCgpIHtcbiAgICBpZiAodGhpcy5yZXNldFBhZ2VPblJvd3NDaGFuZ2UpIHtcbiAgICAgIHRoaXMucHJpbWVuZ1RhYmxlLmZpcnN0ID0gMDtcbiAgICB9XG4gICAgdGhpcy5jaGFuZ2VQYWdlKHRoaXMuZ2V0UGFnZSgpKTtcbiAgfVxuXG4gIGdldFBhZ2VDb3VudCgpIHtcbiAgICByZXR1cm4gTWF0aC5jZWlsKHRoaXMucHJpbWVuZ1RhYmxlLnRvdGFsUmVjb3JkcyAvIHRoaXMucm93cyk7XG4gIH1cblxuICBnZXRQYWdlKCk6IG51bWJlciB7XG4gICAgLy8gVG9kbzogVXNlIGV4cGxpY2l0IHR5cGVcbiAgICByZXR1cm4gTWF0aC5mbG9vcigodGhpcy5wcmltZW5nVGFibGUuZmlyc3QgYXMgYW55KSAvIHRoaXMucm93cyk7XG4gIH1cblxuICBjaGFuZ2VQYWdlKHA6IG51bWJlcikge1xuICAgIGNvbnN0IHBjID0gTWF0aC5jZWlsKHRoaXMuZ2V0UGFnZUNvdW50KCkpO1xuXG4gICAgaWYgKHAgPj0gMCAmJiBwIDwgcGMpIHtcbiAgICAgIHRoaXMuZmlyc3QgPSB0aGlzLnJvd3MgKiBwO1xuICAgICAgdGhpcy5wcmltZW5nVGFibGUub25QYWdlQ2hhbmdlKHsgZmlyc3Q6IHRoaXMuZmlyc3QsIHJvd3M6IHRoaXMucm93cyB9KTtcbiAgICB9XG4gIH1cblxuICBvblBhZ2VDaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuZmlyc3QgPSBldmVudC5maXJzdDtcbiAgICB0aGlzLnJvd3MgPSBldmVudC5yb3dzO1xuXG4gICAgY29uc3Qgc3RhdGUgPSB7XG4gICAgICBwYWdlOiB0aGlzLmdldFBhZ2UoKSxcbiAgICAgIGZpcnN0OiB0aGlzLmZpcnN0LFxuICAgICAgcm93czogdGhpcy5yb3dzLFxuICAgICAgcGFnZUNvdW50OiBNYXRoLmNlaWwodGhpcy5nZXRQYWdlQ291bnQoKSlcbiAgICB9O1xuXG4gICAgdGhpcy5wYWdlQ2hhbmdlZC5lbWl0KHN0YXRlKTtcbiAgfVxuXG4gIHRvZ2dsZUFsbENvbHVtbnMoKSB7XG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbnMgPVxuICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMubGVuZ3RoIDwgdGhpcy5jb2x1bW5zLmxlbmd0aCA/IHRoaXMuY29sdW1ucyA6IFtdO1xuICAgIHRoaXMuY29sdW1uc1NlbGVjdGVkLmVtaXQodGhpcy5zZWxlY3RlZENvbHVtbnMpO1xuICB9XG5cbiAgaXNDb2x1bW5TZWxlY3RlZChjb2w6IGFueSkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkQ29sdW1ucy5zb21lKChpdGVtKSA9PiBpc0VxdWFsKGl0ZW0sIGNvbCkpO1xuICB9XG5cbiAgb25TZWxlY3RDb2x1bW4oY29sOiBhbnkpIHtcbiAgICBsZXQgcmVzID0gW10gYXMgYW55O1xuICAgIGlmICh0aGlzLmlzQ29sdW1uU2VsZWN0ZWQoY29sKSkge1xuICAgICAgcmVzID0gdGhpcy5zZWxlY3RlZENvbHVtbnMuZmlsdGVyKCh2OiBhbnkpID0+ICFpc0VxdWFsKHYsIGNvbCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgobykgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMuc29tZSgodjogYW55KSA9PiBpc0VxdWFsKHYsIG8pKSB8fFxuICAgICAgICAgIGlzRXF1YWwoY29sLCBvKVxuICAgICAgICApIHtcbiAgICAgICAgICByZXMucHVzaChvKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zID0gcmVzO1xuICAgIHRoaXMuY29sdW1uc1NlbGVjdGVkLmVtaXQodGhpcy5zZWxlY3RlZENvbHVtbnMpO1xuICB9XG5cbiAgb25FZGl0Um93Q2xpY2tlZChyb3c6IGFueSkge1xuICAgIGNvbnN0IFtpbmRleF0gPSB0aGlzLl9nZXRJbmRleGVzKFtyb3ddKTtcbiAgICB0aGlzLmVkaXRSb3dCdG5DbGlja2VkLmVtaXQoeyByb3csIGluZGV4IH0pO1xuICB9XG5cbiAgb25SZW1vdmVSb3dDbGlja2VkKGl0ZW06IGFueSkge1xuICAgIHRoaXMucm93c1RvUmVtb3ZlLmVtaXQoW2l0ZW1dKTtcblxuICAgIGNvbnN0IGluZGV4ZXMgPSB0aGlzLl9nZXRJbmRleGVzKFtpdGVtXSk7XG4gICAgdGhpcy5yb3dJbmRleGVzVG9SZW1vdmUuZW1pdChpbmRleGVzKTtcbiAgfVxuXG4gIG9uU29ydChldmVudDogYW55KSB7XG4gICAgdGhpcy5zb3J0ZWQuZW1pdChldmVudCk7XG4gIH1cblxuICBvbkZpbHRlcihldmVudDogYW55KSB7XG4gICAgdGhpcy5maWx0ZXJlZC5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIG9uUm93UmVvcmRlcihldmVudDogYW55KSB7XG4gICAgdGhpcy5yb3dzUmVvcmRlcmVkLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgb25MYXp5TG9hZGVkKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmxhenlMb2FkZWQuZW1pdChldmVudCk7XG4gIH1cblxuICBvblJlbG9hZERhdGEoKSB7XG4gICAgaWYgKHRoaXMuZGF0YVJlbG9hZEJ0bkRpc2FibGVkKSByZXR1cm47XG4gICAgdGhpcy5kYXRhUmVsb2FkQnRuQ2xpY2tlZC5lbWl0KCk7XG4gIH1cblxuICBvbkV4cG9ydERhdGEoZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLmV4cG9ydEJ0bkRpc2FibGVkKSByZXR1cm47XG4gICAgdGhpcy5leHBvcnRNZW51Py50b2dnbGUoZXZlbnQpO1xuICB9XG5cbiAgb25Db2x1bW5zVG9nZ2xlKGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5jb2x1bW5zVG9nZ2xlQnRuRGlzYWJsZWQpIHJldHVybjtcbiAgICB0aGlzLmNvbFRvZ2dsZU1lbnU/LnRvZ2dsZShldmVudCk7XG4gIH1cblxuICBwcml2YXRlIF9nZXRJbmRleGVzKHJvd3M6IGFueVtdKSB7XG4gICAgbGV0IGluZGV4ZXM6IG51bWJlcltdID0gcm93cy5tYXAoKHJvdykgPT5cbiAgICAgIHRoaXMucHJpbWVuZ1RhYmxlLnZhbHVlLmluZGV4T2Yocm93KVxuICAgICk7XG5cbiAgICBjb25zdCBpbmRleGVzTWFwID0gdGhpcy50VW5zb3J0RGlyZWN0aXZlPy5zb3J0SW5kaWNlcztcbiAgICBpZiAoaW5kZXhlc01hcCAmJiBpbmRleGVzTWFwLmxlbmd0aCA+IDApIHtcbiAgICAgIGluZGV4ZXMgPSBpbmRleGVzLm1hcCgoaSkgPT4gaW5kZXhlc01hcC5pbmRleE9mKGkpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW5kZXhlcztcbiAgfVxuXG4gIGV4cG9ydFRhYmxlKGZvcm1hdDogQ3BzVGFibGVFeHBvcnRGb3JtYXQpIHtcbiAgICBpZiAodGhpcy5jb2x1bW5zLmxlbmd0aCA8IDEpIHRocm93IG5ldyBFcnJvcignQ29sdW1ucyBtdXN0IGJlIGRlZmluZWQhJyk7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmxlbmd0aCA8IDEpIHRocm93IG5ldyBFcnJvcignTm90aGluZyB0byBleHBvcnQhJyk7XG5cbiAgICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgICAgY2FzZSAnY3N2JzpcbiAgICAgICAgdGhpcy5wcmltZW5nVGFibGUuZXhwb3J0Q1NWKCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICd4bHN4JzpcbiAgICAgICAgdGhpcy5leHBvcnRYTFNYKCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICAvLyBjYXNlICdwZGYnOlxuICAgICAgLy8gICB0aGlzLmV4cG9ydFBERigpO1xuICAgICAgLy8gICBicmVhaztcbiAgICB9XG4gIH1cblxuICBleHBvcnRYTFNYKCkge1xuICAgIGltcG9ydCgneGxzeCcpLnRoZW4oKHhsc3gpID0+IHtcbiAgICAgIGNvbnN0IHNoZWV0RGF0YSA9IFtcbiAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMubWFwKFxuICAgICAgICAgIChjOiB7IFtrZXk6IHN0cmluZ106IGFueSB9KSA9PiBjW3RoaXMuY29sSGVhZGVyTmFtZV1cbiAgICAgICAgKSxcbiAgICAgICAgLi4udGhpcy5wcmltZW5nVGFibGUudmFsdWUubWFwKChpdGVtOiBhbnkpID0+XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMubWFwKFxuICAgICAgICAgICAgKGM6IHsgW2tleTogc3RyaW5nXTogYW55IH0pID0+IGl0ZW1bY1t0aGlzLmNvbEZpZWxkTmFtZV1dXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICBdO1xuXG4gICAgICBjb25zdCB3b3Jrc2hlZXQgPSB4bHN4LnV0aWxzLmpzb25fdG9fc2hlZXQoc2hlZXREYXRhLCB7XG4gICAgICAgIHNraXBIZWFkZXI6IHRydWVcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgd29ya2Jvb2sgPSB7XG4gICAgICAgIFNoZWV0czogeyBbdGhpcy5leHBvcnRGaWxlbmFtZV06IHdvcmtzaGVldCB9LFxuICAgICAgICBTaGVldE5hbWVzOiBbdGhpcy5leHBvcnRGaWxlbmFtZV1cbiAgICAgIH07XG4gICAgICBjb25zdCB4bHN4QnVmZmVyOiBhbnkgPSB4bHN4LndyaXRlKHdvcmtib29rLCB7XG4gICAgICAgIGJvb2tUeXBlOiAneGxzeCcsXG4gICAgICAgIHR5cGU6ICdhcnJheSdcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBFWENFTF9UWVBFID1cbiAgICAgICAgJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0O2NoYXJzZXQ9VVRGLTgnO1xuICAgICAgY29uc3QgYmxvYjogQmxvYiA9IG5ldyBCbG9iKFt4bHN4QnVmZmVyXSwge1xuICAgICAgICB0eXBlOiBFWENFTF9UWVBFXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgZG93bmxvYWRMaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgZG93bmxvYWRMaW5rLmhyZWYgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgICAgZG93bmxvYWRMaW5rLmRvd25sb2FkID0gYCR7dGhpcy5leHBvcnRGaWxlbmFtZX0ueGxzeGA7XG4gICAgICBkb3dubG9hZExpbmsuY2xpY2soKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIGV4cG9ydFBERigpIHtcbiAgLy8gICBjb25zdCBleHBvcnRDb2x1bW5zID0gdGhpcy5zZWxlY3RlZENvbHVtbnMubWFwKChjb2wpID0+ICh7XG4gIC8vICAgICB0aXRsZTogY29sW3RoaXMuY29sSGVhZGVyTmFtZV0sXG4gIC8vICAgICBkYXRhS2V5OiBjb2xbdGhpcy5jb2xGaWVsZE5hbWVdXG4gIC8vICAgfSkpO1xuICAvLyAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuZXctY2FwXG4gIC8vICAgY29uc3QgZG9jID0gbmV3IGpzUERGKHtcbiAgLy8gICAgIG9yaWVudGF0aW9uOiB0aGlzLnNlbGVjdGVkQ29sdW1ucy5sZW5ndGggPiAzID8gJ2wnIDogJ3AnLFxuICAvLyAgICAgdW5pdDogJ3B4JyxcbiAgLy8gICAgIGZvcm1hdDogJ2E0J1xuICAvLyAgIH0pO1xuICAvLyAgIChkb2MgYXMgYW55KS5hdXRvVGFibGUoe1xuICAvLyAgICAgaGVhZFN0eWxlczogeyBmaWxsQ29sb3I6ICcjODcwYTNjJyB9LFxuICAvLyAgICAgY29sdW1uczogZXhwb3J0Q29sdW1ucyxcbiAgLy8gICAgIGJvZHk6IHRoaXMucHJpbWVuZ1RhYmxlLnZhbHVlXG4gIC8vICAgfSk7XG4gIC8vICAgZG9jLnNhdmUoYCR7dGhpcy5leHBvcnRGaWxlbmFtZX0ucGRmYCk7XG4gIC8vIH1cbn1cbiIsIjxwLXRhYmxlXG4gICNwcmltZW5nVGFibGVcbiAgI3RVbnNvcnREaXJlY3RpdmU9XCJ0V2l0aFVuc29ydFwiXG4gIHRXaXRoVW5zb3J0XG4gIFtuZ0NsYXNzXT1cInsgJ2Nwcy10YWJsZS1sb2FkaW5nJzogbG9hZGluZyB9XCJcbiAgW3N0eWxlQ2xhc3NdPVwic3R5bGVDbGFzc1wiXG4gIFt0YWJsZVN0eWxlXT1cInRhYmxlU3R5bGVcIlxuICBbdGFibGVTdHlsZUNsYXNzXT1cInRhYmxlU3R5bGVDbGFzc1wiXG4gIFt2YWx1ZV09XCJkYXRhXCJcbiAgW2RhdGFLZXldPVwiZGF0YUtleVwiXG4gIFtjb2x1bW5zXT1cInNlbGVjdGVkQ29sdW1uc1wiXG4gIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2VkKCRldmVudClcIlxuICBbZ2xvYmFsRmlsdGVyRmllbGRzXT1cImdsb2JhbEZpbHRlckZpZWxkc1wiXG4gIFtzaG93SW5pdGlhbFNvcnRCYWRnZV09XCJmYWxzZVwiXG4gIFtsb2FkaW5nXT1cImxvYWRpbmdcIlxuICBbc2Nyb2xsYWJsZV09XCJzY3JvbGxhYmxlXCJcbiAgW3Njcm9sbEhlaWdodF09XCJzY3JvbGxIZWlnaHRcIlxuICBbbGF6eV09XCJsYXp5XCJcbiAgW2xhenlMb2FkT25Jbml0XT1cImxhenlMb2FkT25Jbml0XCJcbiAgW3ZpcnR1YWxTY3JvbGxdPVwidmlydHVhbFNjcm9sbFwiXG4gIFt2aXJ0dWFsU2Nyb2xsSXRlbVNpemVdPVwidmlydHVhbFNjcm9sbEl0ZW1TaXplXCJcbiAgW3ZpcnR1YWxTY3JvbGxPcHRpb25zXT1cInsgbnVtVG9sZXJhdGVkSXRlbXM6IG51bVRvbGVyYXRlZEl0ZW1zIH1cIlxuICBbcGFnaW5hdG9yXT1cInBhZ2luYXRvclwiXG4gIFtzaG93Q3VycmVudFBhZ2VSZXBvcnRdPVwidHJ1ZVwiXG4gIFthbHdheXNTaG93UGFnaW5hdG9yXT1cImFsd2F5c1Nob3dQYWdpbmF0b3JcIlxuICBbcm93c109XCJyb3dzXCJcbiAgW2ZpcnN0XT1cImZpcnN0XCJcbiAgW3RvdGFsUmVjb3Jkc109XCJ0b3RhbFJlY29yZHNcIlxuICBbcmVzZXRQYWdlT25Tb3J0XT1cInJlc2V0UGFnZU9uU29ydFwiXG4gIGN1cnJlbnRQYWdlUmVwb3J0VGVtcGxhdGU9XCJ7Zmlyc3R9IC0ge2xhc3R9IG9mIHt0b3RhbFJlY29yZHN9XCJcbiAgWyhzZWxlY3Rpb24pXT1cInNlbGVjdGVkUm93c1wiXG4gIFttZXRhS2V5U2VsZWN0aW9uXT1cImZhbHNlXCJcbiAgW3Jvd0hvdmVyXT1cInJvd0hvdmVyXCJcbiAgW2N1c3RvbVNvcnRdPVwiY3VzdG9tU29ydFwiXG4gIFtzb3J0TW9kZV09XCJzb3J0TW9kZVwiXG4gIFtleHBvcnRGaWxlbmFtZV09XCJleHBvcnRGaWxlbmFtZVwiXG4gIFtjc3ZTZXBhcmF0b3JdPVwiY3N2U2VwYXJhdG9yXCJcbiAgKG9uUGFnZSk9XCJvblBhZ2VDaGFuZ2UoJGV2ZW50KVwiXG4gIChvbkxhenlMb2FkKT1cIm9uTGF6eUxvYWRlZCgkZXZlbnQpXCJcbiAgKHNvcnRGdW5jdGlvbik9XCJvblNvcnRGdW5jdGlvbigkZXZlbnQpXCJcbiAgKG9uU29ydCk9XCJvblNvcnQoJGV2ZW50KVwiXG4gIChvbkZpbHRlcik9XCJvbkZpbHRlcigkZXZlbnQpXCJcbiAgKG9uUm93UmVvcmRlcik9XCJvblJvd1Jlb3JkZXIoJGV2ZW50KVwiPlxuICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiY2FwdGlvblwiICpuZ0lmPVwiaGFzVG9vbGJhclwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0b29sYmFyVGVtcGxhdGVcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0b29sYmFyVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXRvb2xiYXJUZW1wbGF0ZVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNwcy10YWJsZS10YmFyLWxlZnRcIj5cbiAgICAgICAgPGRpdiAqbmdJZj1cInRvb2xiYXJJY29uXCIgY2xhc3M9XCJjcHMtdGFibGUtdGJhci1pY29uXCI+XG4gICAgICAgICAgPGNwcy1pY29uIFtpY29uXT1cInRvb2xiYXJJY29uXCIgW2NvbG9yXT1cInRvb2xiYXJJY29uQ29sb3JcIj48L2Nwcy1pY29uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNwcy10YWJsZS10YmFyLXRpdGxlXCI+e3sgdG9vbGJhclRpdGxlIH19PC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJzaG93R2xvYmFsRmlsdGVyXCIgY2xhc3M9XCJjcHMtdGFibGUtdGJhci1nbG9iYWwtZmlsdGVyXCI+XG4gICAgICAgICAgPGNwcy1pbnB1dFxuICAgICAgICAgICAgI2dsb2JhbEZpbHRlckNvbXBcbiAgICAgICAgICAgIHByZWZpeEljb249XCJzZWFyY2hcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImdsb2JhbEZpbHRlclBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICh2YWx1ZUNoYW5nZWQpPVwib25GaWx0ZXJHbG9iYWwoJGV2ZW50KVwiXG4gICAgICAgICAgICBbY2xlYXJhYmxlXT1cInRydWVcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImxvYWRpbmdcIlxuICAgICAgICAgICAgW2FwcGVhcmFuY2VdPVwidG9vbGJhclNpemUgPT09ICdzbWFsbCcgPyAndW5kZXJsaW5lZCcgOiAnb3V0bGluZWQnXCJcbiAgICAgICAgICAgIFtoaWRlRGV0YWlsc109XCJ0cnVlXCI+XG4gICAgICAgICAgPC9jcHMtaW5wdXQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3BzLXRhYmxlLXRiYXItcmlnaHRcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwic2hvd1JlbW92ZUJ0bk9uU2VsZWN0ICYmIHNlbGVjdGVkUm93cy5sZW5ndGggPiAwXCJcbiAgICAgICAgICBjbGFzcz1cImNwcy10YWJsZS10YmFyLWJ0bi1vbi1zZWxlY3RcIj5cbiAgICAgICAgICA8Y3BzLWJ1dHRvblxuICAgICAgICAgICAgbGFiZWw9XCJSZW1vdmVcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cInJlbW92ZUJ0bk9uU2VsZWN0RGlzYWJsZWRcIlxuICAgICAgICAgICAgY29sb3I9XCJwcmVwYXJlZFwiXG4gICAgICAgICAgICB0eXBlPVwiYm9yZGVybGVzc1wiXG4gICAgICAgICAgICBpY29uPVwicmVtb3ZlXCJcbiAgICAgICAgICAgIFtzaXplXT1cInRvb2xiYXJTaXplXCJcbiAgICAgICAgICAgIChjbGlja2VkKT1cInJlbW92ZVNlbGVjdGVkKClcIj5cbiAgICAgICAgICA8L2Nwcy1idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgKm5nSWY9XCJzaG93QWRkaXRpb25hbEJ0bk9uU2VsZWN0ICYmIHNlbGVjdGVkUm93cy5sZW5ndGggPiAwXCJcbiAgICAgICAgICBjbGFzcz1cImNwcy10YWJsZS10YmFyLWJ0bi1vbi1zZWxlY3RcIj5cbiAgICAgICAgICA8Y3BzLWJ1dHRvblxuICAgICAgICAgICAgW2xhYmVsXT1cImFkZGl0aW9uYWxCdG5PblNlbGVjdFRpdGxlXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJhZGRpdGlvbmFsQnRuT25TZWxlY3REaXNhYmxlZFwiXG4gICAgICAgICAgICBjb2xvcj1cInByZXBhcmVkXCJcbiAgICAgICAgICAgIHR5cGU9XCJib3JkZXJsZXNzXCJcbiAgICAgICAgICAgIFtzaXplXT1cInRvb2xiYXJTaXplXCJcbiAgICAgICAgICAgIChjbGlja2VkKT1cIm9uQ2xpY2tBZGRpdGlvbmFsQnRuT25TZWxlY3QoKVwiPlxuICAgICAgICAgIDwvY3BzLWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJzaG93QWN0aW9uQnRuXCIgY2xhc3M9XCJjcHMtdGFibGUtdGJhci1hY3Rpb24tYnRuXCI+XG4gICAgICAgICAgPGNwcy1idXR0b25cbiAgICAgICAgICAgIFtsYWJlbF09XCJhY3Rpb25CdG5UaXRsZVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiYWN0aW9uQnRuRGlzYWJsZWRcIlxuICAgICAgICAgICAgY29sb3I9XCJwcmVwYXJlZFwiXG4gICAgICAgICAgICB0eXBlPVwib3V0bGluZWRcIlxuICAgICAgICAgICAgW3NpemVdPVwidG9vbGJhclNpemVcIlxuICAgICAgICAgICAgKGNsaWNrZWQpPVwib25DbGlja0FjdGlvbkJ0bigpXCI+XG4gICAgICAgICAgPC9jcHMtYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwic2hvd0NvbHVtbnNUb2dnbGVCdG4gJiYgY29sdW1ucy5sZW5ndGggPiAwXCJcbiAgICAgICAgICBjbGFzcz1cImNwcy10YWJsZS10YmFyLWNvbHRvZ2dsZS1idG5cIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2J0bi1kaXNhYmxlZCc6IGNvbHVtbnNUb2dnbGVCdG5EaXNhYmxlZCB9XCI+XG4gICAgICAgICAgPGNwcy1pY29uXG4gICAgICAgICAgICBpY29uPVwiY29sdW1uc1wiXG4gICAgICAgICAgICBzaXplPVwibm9ybWFsXCJcbiAgICAgICAgICAgIFtjb2xvcl09XCJcbiAgICAgICAgICAgICAgY29sdW1uc1RvZ2dsZUJ0bkRpc2FibGVkID8gJ3RleHQtbGlnaHRlc3QnIDogJ3ByZXBhcmVkLWxpZ2h0ZW4xJ1xuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvbkNvbHVtbnNUb2dnbGUoJGV2ZW50KVwiPjwvY3BzLWljb24+XG4gICAgICAgICAgPGNwcy1tZW51ICNjb2xUb2dnbGVNZW51IFt3aXRoQXJyb3ddPVwiZmFsc2VcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcHMtdGFibGUtY29sdG9nZ2xlLW1lbnVcIj5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY3BzLXRhYmxlLWNvbHRvZ2dsZS1tZW51LWl0ZW0gc2VsZWN0LWFsbC1vcHRpb25cIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5hbGxzZWxlY3RlZF09XCJzZWxlY3RlZENvbHVtbnMubGVuZ3RoID09PSBjb2x1bW5zLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUFsbENvbHVtbnMoKVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3BzLXRhYmxlLWNvbHRvZ2dsZS1tZW51LWl0ZW0tbGVmdFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcHMtdGFibGUtY29sdG9nZ2xlLW1lbnUtaXRlbS1jaGVja1wiPiA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNwcy10YWJsZS1jb2x0b2dnbGUtbWVudS1pdGVtLWxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgPlNob3cgYWxsIGNvbHVtbnM8L3NwYW5cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNwcy10YWJsZS1jb2x0b2dnbGUtbWVudS1pdGVtXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25TZWxlY3RDb2x1bW4oY29sKVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cImlzQ29sdW1uU2VsZWN0ZWQoY29sKVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3BzLXRhYmxlLWNvbHRvZ2dsZS1tZW51LWl0ZW0tbGVmdFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcHMtdGFibGUtY29sdG9nZ2xlLW1lbnUtaXRlbS1jaGVja1wiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3BzLXRhYmxlLWNvbHRvZ2dsZS1tZW51LWl0ZW0tbGFiZWxcIj57e1xuICAgICAgICAgICAgICAgICAgICBjb2xbY29sSGVhZGVyTmFtZV1cbiAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Nwcy1tZW51PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwic2hvd0V4cG9ydEJ0blwiXG4gICAgICAgICAgY2xhc3M9XCJjcHMtdGFibGUtdGJhci1leHBvcnQtYnRuXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7ICdidG4tZGlzYWJsZWQnOiBleHBvcnRCdG5EaXNhYmxlZCB9XCI+XG4gICAgICAgICAgPGNwcy1pY29uXG4gICAgICAgICAgICBpY29uPVwiZXhwb3J0XCJcbiAgICAgICAgICAgIHNpemU9XCIyMFwiXG4gICAgICAgICAgICBbY29sb3JdPVwiZXhwb3J0QnRuRGlzYWJsZWQgPyAndGV4dC1saWdodCcgOiAncHJlcGFyZWQtbGlnaHRlbjEnXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvbkV4cG9ydERhdGEoJGV2ZW50KVwiPjwvY3BzLWljb24+XG4gICAgICAgICAgPGNwcy1tZW51XG4gICAgICAgICAgICAjZXhwb3J0TWVudVxuICAgICAgICAgICAgW2l0ZW1zXT1cImV4cG9ydE1lbnVJdGVtc1wiXG4gICAgICAgICAgICBbY29tcHJlc3NlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgIFt3aXRoQXJyb3ddPVwiZmFsc2VcIj5cbiAgICAgICAgICA8L2Nwcy1tZW51PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwic2hvd0RhdGFSZWxvYWRCdG5cIlxuICAgICAgICAgIGNsYXNzPVwiY3BzLXRhYmxlLXRiYXItcmVsb2FkLWJ0blwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwieyAnYnRuLWRpc2FibGVkJzogZGF0YVJlbG9hZEJ0bkRpc2FibGVkIH1cIj5cbiAgICAgICAgICA8Y3BzLWljb25cbiAgICAgICAgICAgIGljb249XCJyZWZyZXNoXCJcbiAgICAgICAgICAgIHNpemU9XCIxOFwiXG4gICAgICAgICAgICBbY29sb3JdPVwiZGF0YVJlbG9hZEJ0bkRpc2FibGVkID8gJ3RleHQtbGlnaHQnIDogJ3ByZXBhcmVkLWxpZ2h0ZW4xJ1wiXG4gICAgICAgICAgICAoY2xpY2spPVwib25SZWxvYWREYXRhKClcIj5cbiAgICAgICAgICA8L2Nwcy1pY29uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLXRlbXBsYXRlPlxuXG4gIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIiAqbmdJZj1cIm5lc3RlZEhlYWRlclRlbXBsYXRlXCIgbGV0LWNvbHVtbnM+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgIG5lc3RlZEhlYWRlclRlbXBsYXRlO1xuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgJGltcGxpY2l0OiBjb2x1bW5zLFxuICAgICAgICB9XG4gICAgICBcIj48L25nLWNvbnRhaW5lcj5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCIgKm5nSWY9XCIhbmVzdGVkSGVhZGVyVGVtcGxhdGVcIiBsZXQtY29sdW1ucz5cbiAgICA8dHI+XG4gICAgICA8dGggc3R5bGU9XCJ3aWR0aDogM3JlbVwiICpuZ0lmPVwicm93RXhwYW5zaW9uVGVtcGxhdGVcIj48L3RoPlxuICAgICAgPHRoIHN0eWxlPVwid2lkdGg6IDNyZW1cIiAqbmdJZj1cInJlb3JkZXJhYmxlUm93c1wiPjwvdGg+XG4gICAgICA8dGggc3R5bGU9XCJ3aWR0aDogNHJlbVwiICpuZ0lmPVwic2VsZWN0YWJsZVwiPlxuICAgICAgICA8cC10YWJsZUhlYWRlckNoZWNrYm94PjwvcC10YWJsZUhlYWRlckNoZWNrYm94PlxuICAgICAgPC90aD5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJoZWFkZXJUZW1wbGF0ZVwiPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgIGhlYWRlclRlbXBsYXRlO1xuICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAkaW1wbGljaXQ6IGNvbHVtbnMsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaGVhZGVyVGVtcGxhdGUgJiYgY29sdW1ucy5sZW5ndGggPiAwXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzb3J0YWJsZVwiPlxuICAgICAgICAgIDx0aCAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnNcIiBbY3BzVENvbFNvcnRhYmxlXT1cImNvbFtjb2xGaWVsZE5hbWVdXCI+XG4gICAgICAgICAgICB7eyBjb2xbY29sSGVhZGVyTmFtZV0gfX1cbiAgICAgICAgICA8L3RoPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFzb3J0YWJsZVwiPlxuICAgICAgICAgIDx0aCAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnNcIj5cbiAgICAgICAgICAgIHt7IGNvbFtjb2xIZWFkZXJOYW1lXSB9fVxuICAgICAgICAgIDwvdGg+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8dGhcbiAgICAgICAgc3R5bGU9XCJ3aWR0aDogMnJlbVwiXG4gICAgICAgIGNsYXNzPVwiY3BzLXRhYmxlLXJvdy1tZW51LWNlbGxcIlxuICAgICAgICAqbmdJZj1cInNob3dSb3dNZW51ICYmIChzaG93Um93UmVtb3ZlQnV0dG9uIHx8IHNob3dSb3dFZGl0QnV0dG9uKVwiPjwvdGg+XG4gICAgPC90cj5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuICA8bmctdGVtcGxhdGVcbiAgICBwVGVtcGxhdGU9XCJib2R5XCJcbiAgICBsZXQtcm93RGF0YVxuICAgIGxldC1jb2x1bW5zPVwiY29sdW1uc1wiXG4gICAgbGV0LWl0ZW1cbiAgICBsZXQtcm93SW5kZXg9XCJyb3dJbmRleFwiXG4gICAgbGV0LWV4cGFuZGVkPVwiZXhwYW5kZWRcIj5cbiAgICA8dHJcbiAgICAgIFtwUmVvcmRlcmFibGVSb3ddPVwicm93SW5kZXhcIlxuICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAnY3BzLXRhYmxlLXJvdy1zZWxlY3RlZCc6IHNlbGVjdGFibGUgJiYgcHJpbWVuZ1RhYmxlLmlzU2VsZWN0ZWQoaXRlbSlcbiAgICAgIH1cIj5cbiAgICAgIDx0ZCAqbmdJZj1cInJvd0V4cGFuc2lvblRlbXBsYXRlXCIgY2xhc3M9XCJjcHMtdGFibGUtcm93LWNoZXZyb24tY2VsbFwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJjcHMtdGFibGUtcm93LWNoZXZyb25cIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2Nwcy10YWJsZS1yb3ctY2hldnJvbi1leHBhbmRlZCc6IGV4cGFuZGVkIH1cIj5cbiAgICAgICAgICA8Y3BzLWljb25cbiAgICAgICAgICAgIGljb249XCJjaGV2cm9uLWRvd25cIlxuICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgIGNvbG9yPVwidGV4dC1kYXJrXCJcbiAgICAgICAgICAgIFtwUm93VG9nZ2xlcl09XCJpdGVtXCI+XG4gICAgICAgICAgPC9jcHMtaWNvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3RkPlxuICAgICAgPHRkICpuZ0lmPVwicmVvcmRlcmFibGVSb3dzXCIgY2xhc3M9XCJjcHMtdGFibGUtcm93LWRyYWctaGFuZGxlLWNlbGxcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjcHMtdGFibGUtcm93LWRyYWctaGFuZGxlXCIgcFJlb3JkZXJhYmxlUm93SGFuZGxlPuKYsDwvc3Bhbj5cbiAgICAgIDwvdGQ+XG4gICAgICA8dGQgKm5nSWY9XCJzZWxlY3RhYmxlXCI+XG4gICAgICAgIDxwLXRhYmxlQ2hlY2tib3ggW3ZhbHVlXT1cIml0ZW1cIj48L3AtdGFibGVDaGVja2JveD5cbiAgICAgIDwvdGQ+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYm9keVRlbXBsYXRlXCI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgYm9keVRlbXBsYXRlO1xuICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAkaW1wbGljaXQ6IGl0ZW0sXG4gICAgICAgICAgICAgIHJvd0luZGV4OiByb3dJbmRleCxcbiAgICAgICAgICAgICAgY29sdW1uczogY29sdW1ucyxcbiAgICAgICAgICAgICAgcm93RGF0YTogcm93RGF0YVxuICAgICAgICAgICAgfVxuICAgICAgICAgIFwiPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFib2R5VGVtcGxhdGVcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbnMubGVuZ3RoID4gMFwiPlxuICAgICAgICAgIDx0ZCAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnNcIj5cbiAgICAgICAgICAgIHt7IHJvd0RhdGFbY29sW2NvbEZpZWxkTmFtZV1dIH19XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDx0ZFxuICAgICAgICAqbmdJZj1cInNob3dSb3dNZW51ICYmIChzaG93Um93UmVtb3ZlQnV0dG9uIHx8IHNob3dSb3dFZGl0QnV0dG9uKVwiXG4gICAgICAgIGNsYXNzPVwiY3BzLXRhYmxlLXJvdy1tZW51LWNlbGxcIj5cbiAgICAgICAgPHRhYmxlLXJvdy1tZW51XG4gICAgICAgICAgKGVkaXRSb3dCdG5DbGlja2VkKT1cIm9uRWRpdFJvd0NsaWNrZWQoaXRlbSlcIlxuICAgICAgICAgIChyZW1vdmVSb3dCdG5DbGlja2VkKT1cIm9uUmVtb3ZlUm93Q2xpY2tlZChpdGVtKVwiXG4gICAgICAgICAgW3Nob3dSb3dSZW1vdmVCdXR0b25dPVwic2hvd1Jvd1JlbW92ZUJ1dHRvblwiXG4gICAgICAgICAgW3Nob3dSb3dFZGl0QnV0dG9uXT1cInNob3dSb3dFZGl0QnV0dG9uXCI+XG4gICAgICAgIDwvdGFibGUtcm93LW1lbnU+XG4gICAgICA8L3RkPlxuICAgIDwvdHI+XG4gIDwvbmctdGVtcGxhdGU+XG4gIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJyb3dleHBhbnNpb25cIiAqbmdJZj1cInJvd0V4cGFuc2lvblRlbXBsYXRlXCIgbGV0LWl0ZW0+XG4gICAgPHRyIGNsYXNzPVwiY3BzLXRhYmxlLXJvdy1leHBhbmRlZC1jb250ZW50XCI+XG4gICAgICA8dGQgY29sc3Bhbj1cIjEwMFwiPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgIHJvd0V4cGFuc2lvblRlbXBsYXRlO1xuICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAkaW1wbGljaXQ6IGl0ZW1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICBcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvdGQ+XG4gICAgPC90cj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImVtcHR5bWVzc2FnZVwiPlxuICAgIDx0cj5cbiAgICAgIDx0ZFxuICAgICAgICBjb2xzcGFuPVwiMTAwXCJcbiAgICAgICAgY2xhc3M9XCJjcHMtdGFibGUtZW1wdHktbWVzc2FnZS10ZFwiXG4gICAgICAgIFtuZ1N0eWxlXT1cInsgaGVpZ2h0OiBlbXB0eUJvZHlIZWlnaHQgfVwiPlxuICAgICAgICB7eyBlbXB0eU1lc3NhZ2UgfX1cbiAgICAgIDwvdGQ+XG4gICAgPC90cj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImxvYWRpbmdpY29uXCI+XG4gICAgPGNwcy1sb2FkZXIgW2Z1bGxTY3JlZW5dPVwiZmFsc2VcIiBvcGFjaXR5PVwiMFwiPjwvY3BzLWxvYWRlcj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cInBhZ2luYXRvcmxlZnRcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY3BzLXRhYmxlLXBhZ2luYXRvci1pdG1zLXBlci1wYWdlXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImNwcy10YWJsZS1wYWdpbmF0b3ItaXRlbXMtcGVyLXBhZ2UtdGl0bGVcIlxuICAgICAgICA+Um93cyBwZXIgcGFnZTpcbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxjcHMtc2VsZWN0XG4gICAgICAgIFtvcHRpb25zXT1cInJvd09wdGlvbnNcIlxuICAgICAgICBbaGlkZURldGFpbHNdPVwidHJ1ZVwiXG4gICAgICAgIFsobmdNb2RlbCldPVwicm93c1wiXG4gICAgICAgICh2YWx1ZUNoYW5nZWQpPVwib25Sb3dzUGVyUGFnZUNoYW5nZWQoKVwiXG4gICAgICAgIFtyZXR1cm5PYmplY3RdPVwiZmFsc2VcIlxuICAgICAgICBvcHRpb25zQ2xhc3M9XCJjcHMtcGFnaW5hdG9yLXBhZ2Utb3B0aW9uc1wiPlxuICAgICAgPC9jcHMtc2VsZWN0PlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuPC9wLXRhYmxlPlxuIl19
|