@seniorsistemas/angular-components 19.6.2 → 19.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dynamic-form/dynamic-form/components/lookup/lookup.component.d.ts +2 -1
- package/dynamic-form/dynamic-form/components/lookup/types/lookup-models.d.ts +2 -1
- package/dynamic-form/dynamic-form/form-field/configurations/fields/number-field.d.ts +1 -1
- package/dynamic-form/dynamic-form/form-field/fields/bignumber/bignumber-field.component.d.ts +1 -1
- package/dynamic-form/dynamic-form/form-field/fields/currency/currency-field.component.d.ts +1 -1
- package/dynamic-form/dynamic-form/form-field/fields/text/text-field.component.d.ts +1 -2
- package/esm2022/alert/lib/alert/alert.component.mjs +3 -3
- package/esm2022/dynamic-form/dynamic-form/components/lookup/lookup.component.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/components/lookup/types/lookup-models.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/number-field.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/bignumber/bignumber-field.component.mjs +16 -17
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/currency/currency-field.component.mjs +20 -23
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/number/number-field.component.mjs +9 -10
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/text/text-field.component.mjs +9 -15
- package/esm2022/inline-edit/lib/inline-edit/components/fields/inline-edit-number/inline-edit-number.component.mjs +4 -4
- package/esm2022/inline-edit/lib/inline-edit/fields/inline-edit-number-field.mjs +1 -1
- package/esm2022/inline-edit/lib/inline-edit/inline-edit.module.mjs +4 -5
- package/esm2022/input-mask/lib/input-mask/input-mask.directive.mjs +460 -0
- package/esm2022/input-mask/lib/input-mask/input-mask.module.mjs +16 -0
- package/esm2022/input-mask/public-api.mjs +3 -0
- package/esm2022/input-mask/seniorsistemas-angular-components-input-mask.mjs +5 -0
- package/esm2022/lib/locale/fallback.mjs +3 -1
- package/esm2022/table/lib/table/table-column/column-number-format.utils.mjs +24 -0
- package/esm2022/table/lib/table/table-paging/export-number-format.mjs +104 -0
- package/esm2022/table/lib/table/table-paging/models/export-number-format.enum.mjs +6 -0
- package/esm2022/table/lib/table/table-paging/models/index.mjs +2 -2
- package/esm2022/table/lib/table/table-paging/table-paging.component.mjs +58 -99
- package/fesm2022/seniorsistemas-angular-components-alert.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-alert.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs +53 -62
- package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs +6 -7
- package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-input-mask.mjs +480 -0
- package/fesm2022/seniorsistemas-angular-components-input-mask.mjs.map +1 -0
- package/fesm2022/seniorsistemas-angular-components-table.mjs +181 -98
- package/fesm2022/seniorsistemas-angular-components-table.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components.mjs +2 -0
- package/fesm2022/seniorsistemas-angular-components.mjs.map +1 -1
- package/inline-edit/lib/inline-edit/fields/inline-edit-number-field.d.ts +2 -2
- package/inline-edit/lib/inline-edit/inline-edit.module.d.ts +2 -2
- package/input-mask/README.md +183 -0
- package/input-mask/index.d.ts +5 -0
- package/input-mask/lib/input-mask/input-mask.directive.d.ts +103 -0
- package/input-mask/lib/input-mask/input-mask.module.d.ts +7 -0
- package/input-mask/public-api.d.ts +2 -0
- package/package.json +18 -12
- package/schematics/migrations/migrate-dynamic-form-v19/index.d.ts +2 -0
- package/schematics/migrations/migrate-dynamic-form-v19/index.js +964 -0
- package/schematics/migrations/migrate-dynamic-form-v19/index.js.map +1 -0
- package/schematics/migrations/migrate-dynamic-form-v19/index.test.d.ts +1 -0
- package/schematics/migrations/migrate-dynamic-form-v19/index.test.js +888 -0
- package/schematics/migrations/migrate-dynamic-form-v19/index.test.js.map +1 -0
- package/schematics/migrations/migrate-p-datepicker/index.js +4 -8
- package/schematics/migrations/migrate-p-datepicker/index.js.map +1 -1
- package/schematics/migrations/migrate-p-editor/index.d.ts +2 -0
- package/schematics/migrations/migrate-p-editor/index.js +301 -0
- package/schematics/migrations/migrate-p-editor/index.js.map +1 -0
- package/schematics/migrations/migrate-p-editor/index.test.d.ts +1 -0
- package/schematics/migrations/migrate-p-editor/index.test.js +393 -0
- package/schematics/migrations/migrate-p-editor/index.test.js.map +1 -0
- package/schematics/migrations.json +11 -0
- package/schematics/utils/ast-utils.d.ts +7 -0
- package/schematics/utils/ast-utils.js +20 -0
- package/schematics/utils/ast-utils.js.map +1 -1
- package/schematics/utils/html-utils.d.ts +6 -0
- package/schematics/utils/html-utils.js +15 -0
- package/schematics/utils/html-utils.js.map +1 -0
- package/table/README.md +28 -0
- package/table/lib/table/table-column/column-number-format.utils.d.ts +5 -0
- package/table/lib/table/table-paging/export-number-format.d.ts +15 -0
- package/table/lib/table/table-paging/models/export-number-format.enum.d.ts +4 -0
- package/table/lib/table/table-paging/models/index.d.ts +1 -0
- package/table/lib/table/table-paging/table-paging.component.d.ts +10 -27
|
@@ -1,9 +1,12 @@
|
|
|
1
|
-
import { Component,
|
|
1
|
+
import { Component, Input, inject, input } from '@angular/core';
|
|
2
2
|
import { TranslateService } from '@ngx-translate/core';
|
|
3
|
-
import { ExportUtils } from '../export-utils';
|
|
4
|
-
import { deepClone, isNullOrUndefined } from '@seniorsistemas/angular-components/utils';
|
|
5
|
-
import { LocaleService } from '@seniorsistemas/angular-components/locale';
|
|
6
3
|
import { HostProjectConfigsInjectionToken } from '@seniorsistemas/angular-components/common';
|
|
4
|
+
import { LocaleService } from '@seniorsistemas/angular-components/locale';
|
|
5
|
+
import { NumericService } from '@seniorsistemas/angular-components/numeric';
|
|
6
|
+
import { deepClone } from '@seniorsistemas/angular-components/utils';
|
|
7
|
+
import { ExportUtils } from '../export-utils';
|
|
8
|
+
import { mapExportValuesLocalized, mapExportValuesRaw } from './export-number-format';
|
|
9
|
+
import { ExportNumberFormat } from './models';
|
|
7
10
|
import * as i0 from "@angular/core";
|
|
8
11
|
import * as i1 from "@seniorsistemas/angular-components/button";
|
|
9
12
|
export class TablePagingComponent {
|
|
@@ -18,8 +21,10 @@ export class TablePagingComponent {
|
|
|
18
21
|
loadAllRecords;
|
|
19
22
|
loadCurrentPageRecords;
|
|
20
23
|
loadSelectedRecords;
|
|
24
|
+
exportNumberFormat = input();
|
|
21
25
|
totalRecordsText = '';
|
|
22
|
-
localeService =
|
|
26
|
+
localeService = inject(LocaleService);
|
|
27
|
+
numericService = inject(NumericService);
|
|
23
28
|
ngOnChanges(changes) {
|
|
24
29
|
if (changes['totalRecords']?.currentValue) {
|
|
25
30
|
this.totalRecordsText = this.translate.instant(`${this.getTranslatePrefix()}total_records`, {
|
|
@@ -35,25 +40,13 @@ export class TablePagingComponent {
|
|
|
35
40
|
}
|
|
36
41
|
getActions() {
|
|
37
42
|
const actions = [
|
|
38
|
-
{
|
|
39
|
-
dataKey: 'exportCurrentPage',
|
|
40
|
-
label: this.translate.instant(`${this.getTranslatePrefix()}export_current_page`),
|
|
41
|
-
command: () => this.exportCurrentPage(),
|
|
42
|
-
},
|
|
43
|
+
this.buildScopeAction('exportCurrentPage', `${this.getTranslatePrefix()}export_current_page`, (format) => this.exportCurrentPage(format)),
|
|
43
44
|
];
|
|
44
45
|
if (this.enableExportSelectedRecords) {
|
|
45
|
-
actions.push({
|
|
46
|
-
dataKey: 'exportSelected',
|
|
47
|
-
label: this.translate.instant(`${this.getTranslatePrefix()}export_selected_records`),
|
|
48
|
-
command: () => this.exportSelectedRecords(),
|
|
49
|
-
});
|
|
46
|
+
actions.push(this.buildScopeAction('exportSelected', `${this.getTranslatePrefix()}export_selected_records`, (format) => this.exportSelectedRecords(format)));
|
|
50
47
|
}
|
|
51
48
|
if (this.loadAllRecords) {
|
|
52
|
-
actions.push({
|
|
53
|
-
dataKey: 'exportAll',
|
|
54
|
-
label: this.translate.instant(`${this.getTranslatePrefix()}export_all_records`),
|
|
55
|
-
command: () => this.exportAllRecords(),
|
|
56
|
-
});
|
|
49
|
+
actions.push(this.buildScopeAction('exportAll', `${this.getTranslatePrefix()}export_all_records`, (format) => this.exportAllRecords(format)));
|
|
57
50
|
}
|
|
58
51
|
if (this.customActions?.length) {
|
|
59
52
|
const customMenus = this.customActions.map((p, $index) => ({
|
|
@@ -65,6 +58,32 @@ export class TablePagingComponent {
|
|
|
65
58
|
}
|
|
66
59
|
return actions;
|
|
67
60
|
}
|
|
61
|
+
buildScopeAction(dataKey, label, run) {
|
|
62
|
+
const fixedFormat = this.exportNumberFormat();
|
|
63
|
+
if (fixedFormat) {
|
|
64
|
+
return {
|
|
65
|
+
dataKey,
|
|
66
|
+
label: this.translate.instant(label),
|
|
67
|
+
command: () => run(fixedFormat),
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
return {
|
|
71
|
+
dataKey,
|
|
72
|
+
label: this.translate.instant(label),
|
|
73
|
+
submenu: [
|
|
74
|
+
{
|
|
75
|
+
dataKey: `${dataKey}_raw`,
|
|
76
|
+
label: this.translate.instant('platform.angular_components.export_raw_data'),
|
|
77
|
+
command: () => run(ExportNumberFormat.Raw),
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
dataKey: `${dataKey}_localized`,
|
|
81
|
+
label: this.translate.instant('platform.angular_components.export_localized_data'),
|
|
82
|
+
command: () => run(ExportNumberFormat.Localized),
|
|
83
|
+
},
|
|
84
|
+
],
|
|
85
|
+
};
|
|
86
|
+
}
|
|
68
87
|
validateComponent() {
|
|
69
88
|
if (!this.table) {
|
|
70
89
|
throw new Error('Table component not defined');
|
|
@@ -95,22 +114,29 @@ export class TablePagingComponent {
|
|
|
95
114
|
return exportColumn;
|
|
96
115
|
});
|
|
97
116
|
}
|
|
98
|
-
getCurrentPageRowsToExport(columns) {
|
|
117
|
+
getCurrentPageRowsToExport(columns, format) {
|
|
99
118
|
let tableData = deepClone(this.table.value);
|
|
100
119
|
if (this.loadCurrentPageRecords) {
|
|
101
120
|
tableData = this.loadCurrentPageRecords();
|
|
102
121
|
}
|
|
103
|
-
tableData = this.
|
|
122
|
+
tableData = this.mapCustomExport(columns, tableData);
|
|
123
|
+
tableData = this.mapNumberFormat(columns, tableData, format);
|
|
104
124
|
return this.mapColumnsTranslations(columns, tableData);
|
|
105
125
|
}
|
|
106
|
-
getSelectedRowsToExport(columns) {
|
|
126
|
+
getSelectedRowsToExport(columns, format) {
|
|
107
127
|
let tableData = deepClone(this.table.selection);
|
|
108
128
|
if (this.loadSelectedRecords) {
|
|
109
129
|
tableData = this.loadSelectedRecords();
|
|
110
130
|
}
|
|
111
|
-
tableData = this.
|
|
131
|
+
tableData = this.mapCustomExport(columns, tableData);
|
|
132
|
+
tableData = this.mapNumberFormat(columns, tableData, format);
|
|
112
133
|
return this.mapColumnsTranslations(columns, tableData);
|
|
113
134
|
}
|
|
135
|
+
mapNumberFormat(columns, tableData, format) {
|
|
136
|
+
return format === ExportNumberFormat.Raw
|
|
137
|
+
? mapExportValuesRaw(columns, tableData)
|
|
138
|
+
: mapExportValuesLocalized(columns, tableData, this.numericService, this.localeService.getLocaleOptions());
|
|
139
|
+
}
|
|
114
140
|
getPropertyValue(obj, path) {
|
|
115
141
|
return path
|
|
116
142
|
.split('.')
|
|
@@ -199,19 +225,19 @@ export class TablePagingComponent {
|
|
|
199
225
|
const formattedTime = date.toLocaleTimeString(lang).replace(' ', '-');
|
|
200
226
|
return `${fileName}_${formattedDate}_${formattedTime}`;
|
|
201
227
|
}
|
|
202
|
-
exportCurrentPage() {
|
|
228
|
+
exportCurrentPage(format = ExportNumberFormat.Localized) {
|
|
203
229
|
this.validateComponent();
|
|
204
230
|
const columns = this.getColumnsToExport();
|
|
205
|
-
const dataToExport = this.getCurrentPageRowsToExport(columns);
|
|
231
|
+
const dataToExport = this.getCurrentPageRowsToExport(columns, format);
|
|
206
232
|
ExportUtils.exportCSV(columns, dataToExport, undefined, this.getExportFileName());
|
|
207
233
|
}
|
|
208
|
-
exportSelectedRecords() {
|
|
234
|
+
exportSelectedRecords(format = ExportNumberFormat.Localized) {
|
|
209
235
|
this.validateComponent();
|
|
210
236
|
const columns = this.getColumnsToExport();
|
|
211
|
-
const dataToExport = this.getSelectedRowsToExport(columns);
|
|
237
|
+
const dataToExport = this.getSelectedRowsToExport(columns, format);
|
|
212
238
|
ExportUtils.exportCSV(columns, dataToExport, undefined, this.getExportFileName());
|
|
213
239
|
}
|
|
214
|
-
async exportAllRecords() {
|
|
240
|
+
async exportAllRecords(format = ExportNumberFormat.Localized) {
|
|
215
241
|
this.validateComponent();
|
|
216
242
|
if (!this.loadAllRecords) {
|
|
217
243
|
return;
|
|
@@ -219,79 +245,12 @@ export class TablePagingComponent {
|
|
|
219
245
|
let serverData = await this.loadAllRecords();
|
|
220
246
|
const columns = this.getColumnsToExport();
|
|
221
247
|
serverData = this.mapCustomExport(columns, serverData);
|
|
222
|
-
serverData = this.
|
|
248
|
+
serverData = this.mapNumberFormat(columns, serverData, format);
|
|
223
249
|
const dataToExport = this.mapColumnsTranslations(columns, serverData);
|
|
224
250
|
ExportUtils.exportCSV(columns, dataToExport, undefined, this.getExportFileName());
|
|
225
251
|
}
|
|
226
|
-
/**
|
|
227
|
-
* The purpose of this method is to map values
|
|
228
|
-
* from the TableColumnsComponent, which uses the numberFormatOptions
|
|
229
|
-
* field, along with rows that have a custom numberFormatOptions,
|
|
230
|
-
* to ensure the correct values are exported by the TablePagingComponent.
|
|
231
|
-
*
|
|
232
|
-
* @returns Returns the correctly mapped tableData.
|
|
233
|
-
*/
|
|
234
|
-
mapNumberFormatOptionsExport(columns, tableData) {
|
|
235
|
-
const hasNumberFormatOptionsColumns = columns.some((column) => column.numberFormatOptions);
|
|
236
|
-
const hasNumberFormatOptionsRows = tableData.some((rowData) => Object.keys(rowData).some((key) => rowData[key]?.options?.numberFormatOptions));
|
|
237
|
-
if (!hasNumberFormatOptionsColumns && !hasNumberFormatOptionsRows)
|
|
238
|
-
return tableData;
|
|
239
|
-
if (hasNumberFormatOptionsColumns) {
|
|
240
|
-
tableData = tableData.map((rowData) => {
|
|
241
|
-
const columnsWithNumberFormatOptions = columns.filter((column) => column.numberFormatOptions);
|
|
242
|
-
for (const column of columnsWithNumberFormatOptions) {
|
|
243
|
-
const attributes = column.attributes;
|
|
244
|
-
const numberFormatOptions = typeof column.numberFormatOptions === 'function'
|
|
245
|
-
? column.numberFormatOptions({
|
|
246
|
-
rowData,
|
|
247
|
-
})
|
|
248
|
-
: column.numberFormatOptions;
|
|
249
|
-
for (const attribute of attributes) {
|
|
250
|
-
if (isNullOrUndefined(rowData[attribute]))
|
|
251
|
-
continue;
|
|
252
|
-
if (rowData[attribute].options?.numberFormatOptions) {
|
|
253
|
-
continue;
|
|
254
|
-
}
|
|
255
|
-
const value = rowData[attribute];
|
|
256
|
-
const mappedValue = numberFormatOptions?.style === 'percent'
|
|
257
|
-
? new BigNumber(value).times(100)
|
|
258
|
-
: new BigNumber(value);
|
|
259
|
-
const numberFormat = new Intl.NumberFormat(this.localeService.getLocaleOptions().locale, {
|
|
260
|
-
...numberFormatOptions,
|
|
261
|
-
style: 'decimal',
|
|
262
|
-
useGrouping: false,
|
|
263
|
-
roundingMode: 'trunc',
|
|
264
|
-
});
|
|
265
|
-
rowData[attribute] = numberFormat.format(mappedValue.toNumber());
|
|
266
|
-
}
|
|
267
|
-
}
|
|
268
|
-
return rowData;
|
|
269
|
-
});
|
|
270
|
-
}
|
|
271
|
-
if (hasNumberFormatOptionsRows) {
|
|
272
|
-
tableData = tableData.map((rowData) => {
|
|
273
|
-
const keysWithNumberFormatOptions = Object.keys(rowData).filter((key) => rowData[key]?.options?.numberFormatOptions);
|
|
274
|
-
for (const key of keysWithNumberFormatOptions) {
|
|
275
|
-
const value = rowData[key].value;
|
|
276
|
-
const numberFormatOptions = rowData[key].options?.numberFormatOptions;
|
|
277
|
-
const mappedValue = numberFormatOptions?.style === 'percent'
|
|
278
|
-
? new BigNumber(value).times(100)
|
|
279
|
-
: new BigNumber(value);
|
|
280
|
-
const numberFormat = new Intl.NumberFormat(this.localeService.getLocaleOptions().locale, {
|
|
281
|
-
...numberFormatOptions,
|
|
282
|
-
style: 'decimal',
|
|
283
|
-
useGrouping: false,
|
|
284
|
-
roundingMode: 'trunc',
|
|
285
|
-
});
|
|
286
|
-
rowData[key] = numberFormat.format(mappedValue.toNumber());
|
|
287
|
-
}
|
|
288
|
-
return rowData;
|
|
289
|
-
});
|
|
290
|
-
}
|
|
291
|
-
return tableData;
|
|
292
|
-
}
|
|
293
252
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TablePagingComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
294
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: TablePagingComponent, selector: "s-table-paging", inputs: { totalRecords: "totalRecords", exportFileName: "exportFileName", table: "table", exportable: "exportable", enableExportSelectedRecords: "enableExportSelectedRecords", customActions: "customActions", loadAllRecords: "loadAllRecords", loadCurrentPageRecords: "loadCurrentPageRecords", loadSelectedRecords: "loadSelectedRecords" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"paging-container\">\n <span class=\"total-records\">\n {{ totalRecordsText }}\n </span>\n @if (exportable) {\n <s-button\n class=\"export-button\"\n priority=\"default\"\n iconClass=\"fa fa-fw fa-file-export\"\n [disabled]=\"false\"\n [auxiliary]=\"true\"\n [tooltip]=\"getTooltipText()\"\n [menuOptions]=\"getActions()\"\n >\n </s-button>\n }\n</div>\n", styles: [".paging-container{display:flex;align-items:center}.export-button{margin-left:6px}\n"], dependencies: [{ kind: "component", type: i1.ButtonComponent, selector: "s-button", inputs: ["id", "label", "tooltip", "tooltipPosition", "iconClass", "rightIconClass", "caret", "styleClass", "baseZIndex", "disabled", "auxiliary", "type", "priority", "menuOptions", "size", "slide", "animation", "badge", "iconColor", "menuAriaLabel", "ariaLabel"], outputs: ["clicked"] }] });
|
|
253
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: TablePagingComponent, selector: "s-table-paging", inputs: { totalRecords: { classPropertyName: "totalRecords", publicName: "totalRecords", isSignal: false, isRequired: false, transformFunction: null }, exportFileName: { classPropertyName: "exportFileName", publicName: "exportFileName", isSignal: false, isRequired: false, transformFunction: null }, table: { classPropertyName: "table", publicName: "table", isSignal: false, isRequired: false, transformFunction: null }, exportable: { classPropertyName: "exportable", publicName: "exportable", isSignal: false, isRequired: false, transformFunction: null }, enableExportSelectedRecords: { classPropertyName: "enableExportSelectedRecords", publicName: "enableExportSelectedRecords", isSignal: false, isRequired: false, transformFunction: null }, customActions: { classPropertyName: "customActions", publicName: "customActions", isSignal: false, isRequired: false, transformFunction: null }, loadAllRecords: { classPropertyName: "loadAllRecords", publicName: "loadAllRecords", isSignal: false, isRequired: false, transformFunction: null }, loadCurrentPageRecords: { classPropertyName: "loadCurrentPageRecords", publicName: "loadCurrentPageRecords", isSignal: false, isRequired: false, transformFunction: null }, loadSelectedRecords: { classPropertyName: "loadSelectedRecords", publicName: "loadSelectedRecords", isSignal: false, isRequired: false, transformFunction: null }, exportNumberFormat: { classPropertyName: "exportNumberFormat", publicName: "exportNumberFormat", isSignal: true, isRequired: false, transformFunction: null } }, usesOnChanges: true, ngImport: i0, template: "<div class=\"paging-container\">\n <span class=\"total-records\">\n {{ totalRecordsText }}\n </span>\n @if (exportable) {\n <s-button\n class=\"export-button\"\n priority=\"default\"\n iconClass=\"fa fa-fw fa-file-export\"\n [disabled]=\"false\"\n [auxiliary]=\"true\"\n [tooltip]=\"getTooltipText()\"\n [menuOptions]=\"getActions()\"\n >\n </s-button>\n }\n</div>\n", styles: [".paging-container{display:flex;align-items:center}.export-button{margin-left:6px}\n"], dependencies: [{ kind: "component", type: i1.ButtonComponent, selector: "s-button", inputs: ["id", "label", "tooltip", "tooltipPosition", "iconClass", "rightIconClass", "caret", "styleClass", "baseZIndex", "disabled", "auxiliary", "type", "priority", "menuOptions", "size", "slide", "animation", "badge", "iconColor", "menuAriaLabel", "ariaLabel"], outputs: ["clicked"] }] });
|
|
295
254
|
}
|
|
296
255
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TablePagingComponent, decorators: [{
|
|
297
256
|
type: Component,
|
|
@@ -315,4 +274,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
315
274
|
}], loadSelectedRecords: [{
|
|
316
275
|
type: Input
|
|
317
276
|
}] } });
|
|
318
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtcGFnaW5nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy90YWJsZS9zcmMvbGliL3RhYmxlL3RhYmxlLXBhZ2luZy90YWJsZS1wYWdpbmcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL3RhYmxlL3NyYy9saWIvdGFibGUvdGFibGUtcGFnaW5nL3RhYmxlLXBhZ2luZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQTRCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUl2RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUUxRSxPQUFPLEVBQXNCLGdDQUFnQyxFQUFFLE1BQU0sMkNBQTJDLENBQUM7OztBQWNqSCxNQUFNLE9BQU8sb0JBQW9CO0lBQ1osU0FBUyxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3JDLGtCQUFrQixHQUFHLE1BQU0sQ0FBcUIsZ0NBQWdDLENBQUMsQ0FBQztJQUc1RixZQUFZLENBQVU7SUFHdEIsY0FBYyxDQUFVO0lBR3hCLEtBQUssQ0FBUztJQUdkLFVBQVUsR0FBRyxJQUFJLENBQUM7SUFHbEIsMkJBQTJCLEdBQUcsSUFBSSxDQUFDO0lBR25DLGFBQWEsQ0FBa0I7SUFHL0IsY0FBYyxDQUF3QjtJQUd0QyxzQkFBc0IsQ0FBZTtJQUdyQyxtQkFBbUIsQ0FB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QyxhQUFhO3NCQURuQixLQUFLO2dCQUlDLGNBQWM7c0JBRHBCLEtBQUs7Z0JBSUMsc0JBQXNCO3NCQUQ1QixLQUFLO2dCQUlDLG1CQUFtQjtzQkFEekIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0LCBJbnB1dCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IFRhYmxlIH0gZnJvbSAncHJpbWVuZy90YWJsZSc7XG5pbXBvcnQgeyBDdXN0b21BY3Rpb24gfSBmcm9tICcuL21vZGVscyc7XG5pbXBvcnQgeyBDb2x1bW4gfSBmcm9tICcuLi90YWJsZS1jb2x1bW4vbW9kZWxzJztcbmltcG9ydCB7IEV4cG9ydFV0aWxzIH0gZnJvbSAnLi4vZXhwb3J0LXV0aWxzJztcbmltcG9ydCB7IGRlZXBDbG9uZSwgaXNOdWxsT3JVbmRlZmluZWQgfSBmcm9tICdAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzL3V0aWxzJztcbmltcG9ydCB7IExvY2FsZVNlcnZpY2UgfSBmcm9tICdAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzL2xvY2FsZSc7XG5pbXBvcnQgeyBUaWVyZWRNZW51SXRlbURhdGEgfSBmcm9tICdAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzL3RpZXJlZC1tZW51JztcbmltcG9ydCB7IEhvc3RQcm9qZWN0Q29uZmlncywgSG9zdFByb2plY3RDb25maWdzSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzL2NvbW1vbic7XG5cbnR5cGUgUm93VmFsdWVGb3JtYXRPcHRpb24gPSB7XG4gICAgdmFsdWU/OiBudW1iZXI7XG4gICAgb3B0aW9ucz86IHtcbiAgICAgICAgbnVtYmVyRm9ybWF0T3B0aW9ucz86IEludGwuTnVtYmVyRm9ybWF0T3B0aW9ucztcbiAgICB9O1xufTtcblxuQENvbXBvbmVudCh7XG4gICAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLXBhZ2luZy5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vdGFibGUtcGFnaW5nLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgc2VsZWN0b3I6ICdzLXRhYmxlLXBhZ2luZycsXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlUGFnaW5nQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZSA9IGluamVjdChUcmFuc2xhdGVTZXJ2aWNlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGhvc3RQcm9qZWN0Q29uZmlncyA9IGluamVjdDxIb3N0UHJvamVjdENvbmZpZ3M+KEhvc3RQcm9qZWN0Q29uZmlnc0luamVjdGlvblRva2VuKTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHRvdGFsUmVjb3JkcyE6IG51bWJlcjtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGV4cG9ydEZpbGVOYW1lPzogc3RyaW5nO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgdGFibGUhOiBUYWJsZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGV4cG9ydGFibGUgPSB0cnVlO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZW5hYmxlRXhwb3J0U2VsZWN0ZWRSZWNvcmRzID0gdHJ1ZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGN1c3RvbUFjdGlvbnM/OiBDdXN0b21BY3Rpb25bXTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGxvYWRBbGxSZWNvcmRzPzogKCkgPT4gUHJvbWlzZTxhbnlbXT47XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBsb2FkQ3VycmVudFBhZ2VSZWNvcmRzPzogKCkgPT4gYW55W107XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBsb2FkU2VsZWN0ZWRSZWNvcmRzPzogKCkgPT4gYW55W107XG5cbiAgICBwdWJsaWMgdG90YWxSZWNvcmRzVGV4dCA9ICcnO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2NhbGVTZXJ2aWNlOiBMb2NhbGVTZXJ2aWNlID0gSW5qZWN0KExvY2FsZVNlcnZpY2UpO1xuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoY2hhbmdlc1sndG90YWxSZWNvcmRzJ10/LmN1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy50b3RhbFJlY29yZHNUZXh0ID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudChgJHt0aGlzLmdldFRyYW5zbGF0ZVByZWZpeCgpfXRvdGFsX3JlY29yZHNgLCB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IGNoYW5nZXNbJ3RvdGFsUmVjb3JkcyddLmN1cnJlbnRWYWx1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRUcmFuc2xhdGVQcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmhvc3RQcm9qZWN0Q29uZmlncy5kb21haW59LiR7dGhpcy5ob3N0UHJvamVjdENvbmZpZ3Muc2VydmljZX0uYDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VG9vbHRpcFRleHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGAke3RoaXMuZ2V0VHJhbnNsYXRlUHJlZml4KCl9ZXhwb3J0X3RvX2NzdmApO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRBY3Rpb25zKCk6IFRpZXJlZE1lbnVJdGVtRGF0YVtdIHtcbiAgICAgICAgY29uc3QgYWN0aW9uczogVGllcmVkTWVudUl0ZW1EYXRhW10gPSBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZGF0YUtleTogJ2V4cG9ydEN1cnJlbnRQYWdlJyxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChgJHt0aGlzLmdldFRyYW5zbGF0ZVByZWZpeCgpfWV4cG9ydF9jdXJyZW50X3BhZ2VgKSxcbiAgICAgICAgICAgICAgICBjb21tYW5kOiAoKSA9PiB0aGlzLmV4cG9ydEN1cnJlbnRQYWdlKCksXG4gICAgICAgICAgICB9LFxuICAgICAgICBdO1xuXG4gICAgICAgIGlmICh0aGlzLmVuYWJsZUV4cG9ydFNlbGVjdGVkUmVjb3Jkcykge1xuICAgICAgICAgICAgYWN0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICBkYXRhS2V5OiAnZXhwb3J0U2VsZWN0ZWQnLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGAke3RoaXMuZ2V0VHJhbnNsYXRlUHJlZml4KCl9ZXhwb3J0X3NlbGVjdGVkX3JlY29yZHNgKSxcbiAgICAgICAgICAgICAgICBjb21tYW5kOiAoKSA9PiB0aGlzLmV4cG9ydFNlbGVjdGVkUmVjb3JkcygpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5sb2FkQWxsUmVjb3Jkcykge1xuICAgICAgICAgICAgYWN0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICBkYXRhS2V5OiAnZXhwb3J0QWxsJyxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChgJHt0aGlzLmdldFRyYW5zbGF0ZVByZWZpeCgpfWV4cG9ydF9hbGxfcmVjb3Jkc2ApLFxuICAgICAgICAgICAgICAgIGNvbW1hbmQ6ICgpID0+IHRoaXMuZXhwb3J0QWxsUmVjb3JkcygpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jdXN0b21BY3Rpb25zPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGN1c3RvbU1lbnVzID0gdGhpcy5jdXN0b21BY3Rpb25zLm1hcCgocCwgJGluZGV4KSA9PiAoe1xuICAgICAgICAgICAgICAgIGRhdGFLZXk6IGBjdXN0b21BY3Rpb25fJHskaW5kZXh9YCxcbiAgICAgICAgICAgICAgICBsYWJlbDogcC5sYWJlbCxcbiAgICAgICAgICAgICAgICBjb21tYW5kOiBwLmNvbW1hbmQsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICBhY3Rpb25zLnB1c2goLi4uY3VzdG9tTWVudXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFjdGlvbnM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB2YWxpZGF0ZUNvbXBvbmVudCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnRhYmxlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RhYmxlIGNvbXBvbmVudCBub3QgZGVmaW5lZCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldENvbHVtbnNUb0V4cG9ydCgpIHtcbiAgICAgICAgcmV0dXJuIFsuLi4odGhpcy50YWJsZS5jb2x1bW5zID8/IFtdKV0ubWFwKChjb2x1bW4pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGV4cG9ydENvbHVtbiA9IHtcbiAgICAgICAgICAgICAgICAuLi5jb2x1bW4sXG4gICAgICAgICAgICAgICAgaGVhZGVyOiBjb2x1bW4uaGVhZGVyLFxuICAgICAgICAgICAgICAgIGV4cG9ydGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgZmllbGQ6IGNvbHVtbi5maWVsZCxcbiAgICAgICAgICAgICAgICBzZXBhcmF0b3I6IGNvbHVtbi5zZXBhcmF0b3IgPz8gJyAtICcsXG4gICAgICAgICAgICAgICAgZW51bVByZWZpeDogY29sdW1uLmVudW1QcmVmaXgsXG4gICAgICAgICAgICAgICAgY3VzdG9tRXhwb3J0OiBjb2x1bW4uY3VzdG9tRXhwb3J0LFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgaWYgKGNvbHVtbi5leHBvcnRhYmxlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIGV4cG9ydENvbHVtbi5leHBvcnRhYmxlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb2x1bW4uYXR0cmlidXRlcyAmJiBjb2x1bW4uYXR0cmlidXRlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29sdW1uLmF0dHJpYnV0ZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cG9ydENvbHVtbi5maWVsZCA9IGNvbHVtbi5hdHRyaWJ1dGVzWzBdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cG9ydENvbHVtbi5maWVsZCA9IGNvbHVtbi5hdHRyaWJ1dGVzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGV4cG9ydENvbHVtbjtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDdXJyZW50UGFnZVJvd3NUb0V4cG9ydChjb2x1bW5zOiBhbnlbXSkge1xuICAgICAgICBsZXQgdGFibGVEYXRhID0gZGVlcENsb25lKHRoaXMudGFibGUudmFsdWUpO1xuXG4gICAgICAgIGlmICh0aGlzLmxvYWRDdXJyZW50UGFnZVJlY29yZHMpIHtcbiAgICAgICAgICAgIHRhYmxlRGF0YSA9IHRoaXMubG9hZEN1cnJlbnRQYWdlUmVjb3JkcygpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGFibGVEYXRhID0gdGhpcy5tYXBOdW1iZXJGb3JtYXRPcHRpb25zRXhwb3J0KGNvbHVtbnMsIHRhYmxlRGF0YSk7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcENvbHVtbnNUcmFuc2xhdGlvbnMoY29sdW1ucywgdGFibGVEYXRhKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFNlbGVjdGVkUm93c1RvRXhwb3J0KGNvbHVtbnM6IGFueVtdKSB7XG4gICAgICAgIGxldCB0YWJsZURhdGEgPSBkZWVwQ2xvbmUodGhpcy50YWJsZS5zZWxlY3Rpb24pO1xuICAgICAgICBpZiAodGhpcy5sb2FkU2VsZWN0ZWRSZWNvcmRzKSB7XG4gICAgICAgICAgICB0YWJsZURhdGEgPSB0aGlzLmxvYWRTZWxlY3RlZFJlY29yZHMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRhYmxlRGF0YSA9IHRoaXMubWFwTnVtYmVyRm9ybWF0T3B0aW9uc0V4cG9ydChjb2x1bW5zLCB0YWJsZURhdGEpO1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBDb2x1bW5zVHJhbnNsYXRpb25zKGNvbHVtbnMsIHRhYmxlRGF0YSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRQcm9wZXJ0eVZhbHVlKG9iajogYW55LCBwYXRoOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHBhdGhcbiAgICAgICAgICAgIC5zcGxpdCgnLicpXG4gICAgICAgICAgICAucmVkdWNlKChyZXN1bHQ6IGFueSwgcHJvcDogYW55KSA9PiAocmVzdWx0W3Byb3BdID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiByZXN1bHRbcHJvcF0pLCBvYmopO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0UHJvcGVydHlWYWx1ZShvYmo6IGFueSwgcGF0aDogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgICAgIHRoaXMucmVjdXJzaW9uU2V0VmFsdWUob2JqLCBwYXRoLnNwbGl0KCcuJyksIHZhbHVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlY3Vyc2lvblNldFZhbHVlKG9iajogYW55LCBrZXlzTGlzdDogc3RyaW5nW10sIHZhbHVlOiBhbnkpOiBhbnkge1xuICAgICAgICBjb25zdCBrZXkgPSBrZXlzTGlzdFswXTtcbiAgICAgICAgaWYgKGtleXNMaXN0Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIHJldHVybiBvYmo7XG4gICAgICAgIH1cbiAgICAgICAgb2JqW2tleV0gPSB0aGlzLnJlY3Vyc2lvblNldFZhbHVlKG9iaj8uW2tleV0gfHwge30sIGtleXNMaXN0LnNsaWNlKDEpLCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuXG4gICAgcHVibGljIG1hcENvbHVtbnNUcmFuc2xhdGlvbnMoY29sdW1uczogYW55W10sIHJvd3M6IGFueVtdKSB7XG4gICAgICAgIGNvbnN0IGVudW1Db2x1bW5zID0gY29sdW1ucy5maWx0ZXIoKHApID0+IHAuZW51bVByZWZpeCk7XG4gICAgICAgIGlmICghZW51bUNvbHVtbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gcm93cztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbLi4ucm93c10ubWFwKChyb3cpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1JvdyA9IHsgLi4ucm93IH07XG4gICAgICAgICAgICBlbnVtQ29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZHMgPSAhQXJyYXkuaXNBcnJheShjb2x1bW4uZmllbGQpID8gW2NvbHVtbi5maWVsZF0gOiBjb2x1bW4uZmllbGQ7XG4gICAgICAgICAgICAgICAgZmllbGRzLmZvckVhY2goKGZpZWxkTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbkRhdGEgPSB0aGlzLmdldFByb3BlcnR5VmFsdWUocm93LCBmaWVsZE5hbWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29sdW1uRGF0YSA9PT0gbnVsbCB8fCBjb2x1bW5EYXRhID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gdGhpcy50cmFuc2xhdGVWYWx1ZShjb2x1bW4sIGNvbHVtbkRhdGEpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUobmV3Um93LCBmaWVsZE5hbWUsIG5ld1ZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gbmV3Um93O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbWFwQ3VzdG9tRXhwb3J0KGNvbHVtbnM6IGFueVtdLCByb3dzOiBhbnlbXSkge1xuICAgICAgICBjb25zdCBjdXN0b21Db2x1bW5zID0gY29sdW1ucy5maWx0ZXIoKHApID0+IHAuY3VzdG9tRXhwb3J0KTtcbiAgICAgICAgaWYgKCFjdXN0b21Db2x1bW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHJvd3M7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gWy4uLnJvd3NdLm1hcCgocm93KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuZXdSb3cgPSB7IC4uLnJvdyB9O1xuICAgICAgICAgICAgY3VzdG9tQ29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZHMgPSAhQXJyYXkuaXNBcnJheShjb2x1bW4uZmllbGQpID8gW2NvbHVtbi5maWVsZF0gOiBjb2x1bW4uZmllbGQ7XG4gICAgICAgICAgICAgICAgZmllbGRzLmZvckVhY2goKGZpZWxkTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbkRhdGEgPSB0aGlzLmdldFByb3BlcnR5VmFsdWUocm93LCBmaWVsZE5hbWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29sdW1uRGF0YSA9PT0gbnVsbCB8fCBjb2x1bW5EYXRhID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IGNvbHVtbi5jdXN0b21FeHBvcnQoY29sdW1uRGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShuZXdSb3csIGZpZWxkTmFtZSwgbmV3VmFsdWUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBuZXdSb3c7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgdHJhbnNsYXRlVmFsdWUoY29sdW1uOiBhbnksIGNvbHVtbkRhdGE6IGFueSkge1xuICAgICAgICAvLyBEZWZhdWx0IHVzYWdlOiBFTlVNX1ZBTFVFIC0+IGRvbWFpbi5zZXJ2aWNlLmVudW1fdmFsdWVcbiAgICAgICAgY29uc3QgZW51bVZhbHVlID0gY29sdW1uRGF0YS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGxldCB0cmFuc2xhdGlvbktleSA9IGNvbHVtbi5lbnVtUHJlZml4ICsgZW51bVZhbHVlO1xuICAgICAgICBsZXQgdHJhbnNsYXRlZFZhbHVlID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudCh0cmFuc2xhdGlvbktleSk7XG5cbiAgICAgICAgLy8gQ3VzdG9tIHVzYWdlIDE6IFY5IC0+IGRvbWFpbi5zZXJ2aWNlLnZfOVxuICAgICAgICBpZiAodHJhbnNsYXRpb25LZXkgPT09IHRyYW5zbGF0ZWRWYWx1ZSAmJiBlbnVtVmFsdWUubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgdHJhbnNsYXRpb25LZXkgPSBgJHtjb2x1bW4uZW51bVByZWZpeH0ke2VudW1WYWx1ZS5zdWJzdHJpbmcoMCwgMSl9XyR7ZW51bVZhbHVlLnN1YnN0cigxKX1gO1xuICAgICAgICAgICAgdHJhbnNsYXRlZFZhbHVlID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudCh0cmFuc2xhdGlvbktleSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDdXN0b20gdXNhZ2UgMjogRW51bVZhbHVlIC0+IGRvbWFpbi5zZXJ2aWNlLmVudW1fdmFsdWVcbiAgICAgICAgaWYgKHRyYW5zbGF0aW9uS2V5ID09PSB0cmFuc2xhdGVkVmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IGVudW1LZXkgPSB0aGlzLmNvbnZlcnRUb1NuYWtlQ2FzZShjb2x1bW5EYXRhLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgdHJhbnNsYXRpb25LZXkgPSBgJHtjb2x1bW4uZW51bVByZWZpeH0ke2VudW1LZXl9YDtcbiAgICAgICAgICAgIHRyYW5zbGF0ZWRWYWx1ZSA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQodHJhbnNsYXRpb25LZXkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRyYW5zbGF0ZWRWYWx1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbnZlcnRUb1NuYWtlQ2FzZShzdHI6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gc3RyLnJlcGxhY2UoLyhbQS1aXSkvZywgKF9tYXRjaCwgZ3JvdXApID0+IGBfJHtncm91cC50b0xvd2VyQ2FzZSgpfWApLnJlcGxhY2UoL15fLywgJycpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RXhwb3J0RmlsZU5hbWUoKSB7XG4gICAgICAgIGNvbnN0IGxhbmcgPSB0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZyA/PyAncHQtQlInO1xuICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoKTtcblxuICAgICAgICBjb25zdCBmaWxlTmFtZSA9IHRoaXMuZXhwb3J0RmlsZU5hbWUgPz8gJ2Rvd25sb2FkJztcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkRGF0ZSA9IGRhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKGxhbmcpLnJlcGxhY2UoJ18nLCAnLScpO1xuICAgICAgICBjb25zdCBmb3JtYXR0ZWRUaW1lID0gZGF0ZS50b0xvY2FsZVRpbWVTdHJpbmcobGFuZykucmVwbGFjZSgnICcsICctJyk7XG5cbiAgICAgICAgcmV0dXJuIGAke2ZpbGVOYW1lfV8ke2Zvcm1hdHRlZERhdGV9XyR7Zm9ybWF0dGVkVGltZX1gO1xuICAgIH1cblxuICAgIHB1YmxpYyBleHBvcnRDdXJyZW50UGFnZSgpIHtcbiAgICAgICAgdGhpcy52YWxpZGF0ZUNvbXBvbmVudCgpO1xuICAgICAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5nZXRDb2x1bW5zVG9FeHBvcnQoKTtcbiAgICAgICAgY29uc3QgZGF0YVRvRXhwb3J0ID0gdGhpcy5nZXRDdXJyZW50UGFnZVJvd3NUb0V4cG9ydChjb2x1bW5zKTtcbiAgICAgICAgRXhwb3J0VXRpbHMuZXhwb3J0Q1NWKGNvbHVtbnMsIGRhdGFUb0V4cG9ydCwgdW5kZWZpbmVkLCB0aGlzLmdldEV4cG9ydEZpbGVOYW1lKCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBleHBvcnRTZWxlY3RlZFJlY29yZHMoKSB7XG4gICAgICAgIHRoaXMudmFsaWRhdGVDb21wb25lbnQoKTtcbiAgICAgICAgY29uc3QgY29sdW1ucyA9IHRoaXMuZ2V0Q29sdW1uc1RvRXhwb3J0KCk7XG4gICAgICAgIGNvbnN0IGRhdGFUb0V4cG9ydCA9IHRoaXMuZ2V0U2VsZWN0ZWRSb3dzVG9FeHBvcnQoY29sdW1ucyk7XG4gICAgICAgIEV4cG9ydFV0aWxzLmV4cG9ydENTVihjb2x1bW5zLCBkYXRhVG9FeHBvcnQsIHVuZGVmaW5lZCwgdGhpcy5nZXRFeHBvcnRGaWxlTmFtZSgpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZXhwb3J0QWxsUmVjb3JkcygpIHtcbiAgICAgICAgdGhpcy52YWxpZGF0ZUNvbXBvbmVudCgpO1xuXG4gICAgICAgIGlmICghdGhpcy5sb2FkQWxsUmVjb3Jkcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCBzZXJ2ZXJEYXRhID0gYXdhaXQgdGhpcy5sb2FkQWxsUmVjb3JkcygpO1xuXG4gICAgICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmdldENvbHVtbnNUb0V4cG9ydCgpO1xuXG4gICAgICAgIHNlcnZlckRhdGEgPSB0aGlzLm1hcEN1c3RvbUV4cG9ydChjb2x1bW5zLCBzZXJ2ZXJEYXRhKTtcblxuICAgICAgICBzZXJ2ZXJEYXRhID0gdGhpcy5tYXBOdW1iZXJGb3JtYXRPcHRpb25zRXhwb3J0KGNvbHVtbnMsIHNlcnZlckRhdGEpO1xuXG4gICAgICAgIGNvbnN0IGRhdGFUb0V4cG9ydCA9IHRoaXMubWFwQ29sdW1uc1RyYW5zbGF0aW9ucyhjb2x1bW5zLCBzZXJ2ZXJEYXRhKTtcblxuICAgICAgICBFeHBvcnRVdGlscy5leHBvcnRDU1YoY29sdW1ucywgZGF0YVRvRXhwb3J0LCB1bmRlZmluZWQsIHRoaXMuZ2V0RXhwb3J0RmlsZU5hbWUoKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIHB1cnBvc2Ugb2YgdGhpcyBtZXRob2QgaXMgdG8gbWFwIHZhbHVlc1xuICAgICAqIGZyb20gdGhlIFRhYmxlQ29sdW1uc0NvbXBvbmVudCwgd2hpY2ggdXNlcyB0aGUgbnVtYmVyRm9ybWF0T3B0aW9uc1xuICAgICAqIGZpZWxkLCBhbG9uZyB3aXRoIHJvd3MgdGhhdCBoYXZlIGEgY3VzdG9tIG51bWJlckZvcm1hdE9wdGlvbnMsXG4gICAgICogdG8gZW5zdXJlIHRoZSBjb3JyZWN0IHZhbHVlcyBhcmUgZXhwb3J0ZWQgYnkgdGhlIFRhYmxlUGFnaW5nQ29tcG9uZW50LlxuICAgICAqXG4gICAgICogQHJldHVybnMgUmV0dXJucyB0aGUgY29ycmVjdGx5IG1hcHBlZCB0YWJsZURhdGEuXG4gICAgICovXG4gICAgcHVibGljIG1hcE51bWJlckZvcm1hdE9wdGlvbnNFeHBvcnQoXG4gICAgICAgIGNvbHVtbnM6IFBhcnRpYWw8Q29sdW1uPltdLFxuICAgICAgICB0YWJsZURhdGE6IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IFJvd1ZhbHVlRm9ybWF0T3B0aW9uIHwgbnVtYmVyIHwgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgICAgICAgfVtdLFxuICAgICkge1xuICAgICAgICBjb25zdCBoYXNOdW1iZXJGb3JtYXRPcHRpb25zQ29sdW1ucyA9IGNvbHVtbnMuc29tZSgoY29sdW1uKSA9PiBjb2x1bW4ubnVtYmVyRm9ybWF0T3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGhhc051bWJlckZvcm1hdE9wdGlvbnNSb3dzID0gdGFibGVEYXRhLnNvbWUoKHJvd0RhdGEpID0+XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhyb3dEYXRhKS5zb21lKChrZXkpID0+IChyb3dEYXRhW2tleV0gYXMgUm93VmFsdWVGb3JtYXRPcHRpb24pPy5vcHRpb25zPy5udW1iZXJGb3JtYXRPcHRpb25zKSxcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoIWhhc051bWJlckZvcm1hdE9wdGlvbnNDb2x1bW5zICYmICFoYXNOdW1iZXJGb3JtYXRPcHRpb25zUm93cykgcmV0dXJuIHRhYmxlRGF0YTtcblxuICAgICAgICBpZiAoaGFzTnVtYmVyRm9ybWF0T3B0aW9uc0NvbHVtbnMpIHtcbiAgICAgICAgICAgIHRhYmxlRGF0YSA9IHRhYmxlRGF0YS5tYXAoKHJvd0RhdGEpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5zV2l0aE51bWJlckZvcm1hdE9wdGlvbnMgPSBjb2x1bW5zLmZpbHRlcigoY29sdW1uKSA9PiBjb2x1bW4ubnVtYmVyRm9ybWF0T3B0aW9ucyk7XG5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zV2l0aE51bWJlckZvcm1hdE9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IGNvbHVtbi5hdHRyaWJ1dGVzO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG51bWJlckZvcm1hdE9wdGlvbnMgPVxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGNvbHVtbi5udW1iZXJGb3JtYXRPcHRpb25zID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBjb2x1bW4ubnVtYmVyRm9ybWF0T3B0aW9ucyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93RGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjb2x1bW4ubnVtYmVyRm9ybWF0T3B0aW9ucztcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGF0dHJpYnV0ZSBvZiBhdHRyaWJ1dGVzISkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKHJvd0RhdGFbYXR0cmlidXRlIGFzIHN0cmluZ10pKSBjb250aW51ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChyb3dEYXRhW2F0dHJpYnV0ZSBhcyBzdHJpbmddIGFzIFJvd1ZhbHVlRm9ybWF0T3B0aW9uKS5vcHRpb25zPy5udW1iZXJGb3JtYXRPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcm93RGF0YVthdHRyaWJ1dGUgYXMgc3RyaW5nXSBhcyBzdHJpbmcgfCBudW1iZXI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hcHBlZFZhbHVlID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJGb3JtYXRPcHRpb25zPy5zdHlsZSA9PT0gJ3BlcmNlbnQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gbmV3IEJpZ051bWJlcih2YWx1ZSkudGltZXMoMTAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG5ldyBCaWdOdW1iZXIodmFsdWUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBudW1iZXJGb3JtYXQgPSBuZXcgSW50bC5OdW1iZXJGb3JtYXQodGhpcy5sb2NhbGVTZXJ2aWNlLmdldExvY2FsZU9wdGlvbnMoKSEubG9jYWxlLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ubnVtYmVyRm9ybWF0T3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZTogJ2RlY2ltYWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZUdyb3VwaW5nOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3VuZGluZ01vZGU6ICd0cnVuYycsXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGFzIGFueSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd0RhdGFbYXR0cmlidXRlIGFzIHN0cmluZ10gPSBudW1iZXJGb3JtYXQuZm9ybWF0KG1hcHBlZFZhbHVlLnRvTnVtYmVyKCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJvd0RhdGE7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXNOdW1iZXJGb3JtYXRPcHRpb25zUm93cykge1xuICAgICAgICAgICAgdGFibGVEYXRhID0gdGFibGVEYXRhLm1hcCgocm93RGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleXNXaXRoTnVtYmVyRm9ybWF0T3B0aW9ucyA9IE9iamVjdC5rZXlzKHJvd0RhdGEpLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgKGtleSkgPT4gKHJvd0RhdGFba2V5XSBhcyBSb3dWYWx1ZUZvcm1hdE9wdGlvbik/Lm9wdGlvbnM/Lm51bWJlckZvcm1hdE9wdGlvbnMsXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXNXaXRoTnVtYmVyRm9ybWF0T3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IChyb3dEYXRhW2tleV0gYXMgUm93VmFsdWVGb3JtYXRPcHRpb24pLnZhbHVlO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG51bWJlckZvcm1hdE9wdGlvbnMgPSAocm93RGF0YVtrZXldIGFzIFJvd1ZhbHVlRm9ybWF0T3B0aW9uKS5vcHRpb25zPy5udW1iZXJGb3JtYXRPcHRpb25zO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hcHBlZFZhbHVlID1cbiAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlckZvcm1hdE9wdGlvbnM/LnN0eWxlID09PSAncGVyY2VudCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IG5ldyBCaWdOdW1iZXIodmFsdWUhKS50aW1lcygxMDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBuZXcgQmlnTnVtYmVyKHZhbHVlISk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbnVtYmVyRm9ybWF0ID0gbmV3IEludGwuTnVtYmVyRm9ybWF0KHRoaXMubG9jYWxlU2VydmljZS5nZXRMb2NhbGVPcHRpb25zKCkhLmxvY2FsZSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4ubnVtYmVyRm9ybWF0T3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlOiAnZGVjaW1hbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VHcm91cGluZzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICByb3VuZGluZ01vZGU6ICd0cnVuYycsXG4gICAgICAgICAgICAgICAgICAgIH0gYXMgYW55KTtcblxuICAgICAgICAgICAgICAgICAgICAocm93RGF0YVtrZXldIGFzIHN0cmluZyB8IG51bWJlcikgPSBudW1iZXJGb3JtYXQuZm9ybWF0KG1hcHBlZFZhbHVlLnRvTnVtYmVyKCkpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiByb3dEYXRhO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGFibGVEYXRhO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJwYWdpbmctY29udGFpbmVyXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJ0b3RhbC1yZWNvcmRzXCI+XG4gICAgICAgIHt7IHRvdGFsUmVjb3Jkc1RleHQgfX1cbiAgICA8L3NwYW4+XG4gICAgQGlmIChleHBvcnRhYmxlKSB7XG4gICAgICAgIDxzLWJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJleHBvcnQtYnV0dG9uXCJcbiAgICAgICAgICAgIHByaW9yaXR5PVwiZGVmYXVsdFwiXG4gICAgICAgICAgICBpY29uQ2xhc3M9XCJmYSBmYS1mdyBmYS1maWxlLWV4cG9ydFwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmFsc2VcIlxuICAgICAgICAgICAgW2F1eGlsaWFyeV09XCJ0cnVlXCJcbiAgICAgICAgICAgIFt0b29sdGlwXT1cImdldFRvb2x0aXBUZXh0KClcIlxuICAgICAgICAgICAgW21lbnVPcHRpb25zXT1cImdldEFjdGlvbnMoKVwiXG4gICAgICAgID5cbiAgICAgICAgPC9zLWJ1dHRvbj5cbiAgICB9XG48L2Rpdj5cbiJdfQ==
|
|
277
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtcGFnaW5nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy90YWJsZS9zcmMvbGliL3RhYmxlL3RhYmxlLXBhZ2luZy90YWJsZS1wYWdpbmcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL3RhYmxlL3NyYy9saWIvdGFibGUvdGFibGUtcGFnaW5nL3RhYmxlLXBhZ2luZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBNEIsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUxRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQXNCLGdDQUFnQyxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDakgsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUU1RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFHckUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTlDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RGLE9BQU8sRUFBZ0Isa0JBQWtCLEVBQUUsTUFBTSxVQUFVLENBQUM7OztBQU81RCxNQUFNLE9BQU8sb0JBQW9CO0lBQ1osU0FBUyxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3JDLGtCQUFrQixHQUFHLE1BQU0sQ0FBcUIsZ0NBQWdDLENBQUMsQ0FBQztJQUc1RixZQUFZLENBQVU7SUFHdEIsY0FBYyxDQUFVO0lBR3hC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QUFFLENBQUM7WUFDdkIsT0FBTztRQUNYLENBQUM7UUFDRCxJQUFJLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUU3QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUUxQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFFdkQsVUFBVSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUUvRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBRXRFLFdBQVcsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQztJQUN0RixDQUFDO3dHQW5VUSxvQkFBb0I7NEZBQXBCLG9CQUFvQix3a0RDcEJqQyxxZUFpQkE7OzRGREdhLG9CQUFvQjtrQkFMaEMsU0FBUzsrQkFHSSxnQkFBZ0I7OEJBT25CLFlBQVk7c0JBRGxCLEtBQUs7Z0JBSUMsY0FBYztzQkFEcEIsS0FBSztnQkFJQyxLQUFLO3NCQURYLEtBQUs7Z0JBSUMsVUFBVTtzQkFEaEIsS0FBSztnQkFJQywyQkFBMkI7c0JBRGpDLEtBQUs7Z0JBSUMsYUFBYTtzQkFEbkIsS0FBSztnQkFJQyxjQUFjO3NCQURwQixLQUFLO2dCQUlDLHNCQUFzQjtzQkFENUIsS0FBSztnQkFJQyxtQkFBbUI7c0JBRHpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIGluamVjdCwgaW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgSG9zdFByb2plY3RDb25maWdzLCBIb3N0UHJvamVjdENvbmZpZ3NJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvY29tbW9uJztcbmltcG9ydCB7IExvY2FsZVNlcnZpY2UgfSBmcm9tICdAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzL2xvY2FsZSc7XG5pbXBvcnQgeyBOdW1lcmljU2VydmljZSB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvbnVtZXJpYyc7XG5pbXBvcnQgeyBUaWVyZWRNZW51SXRlbURhdGEgfSBmcm9tICdAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzL3RpZXJlZC1tZW51JztcbmltcG9ydCB7IGRlZXBDbG9uZSB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvdXRpbHMnO1xuaW1wb3J0IHsgVGFibGUgfSBmcm9tICdwcmltZW5nL3RhYmxlJztcblxuaW1wb3J0IHsgRXhwb3J0VXRpbHMgfSBmcm9tICcuLi9leHBvcnQtdXRpbHMnO1xuaW1wb3J0IHsgQ29sdW1uIH0gZnJvbSAnLi4vdGFibGUtY29sdW1uL21vZGVscyc7XG5pbXBvcnQgeyBtYXBFeHBvcnRWYWx1ZXNMb2NhbGl6ZWQsIG1hcEV4cG9ydFZhbHVlc1JhdyB9IGZyb20gJy4vZXhwb3J0LW51bWJlci1mb3JtYXQnO1xuaW1wb3J0IHsgQ3VzdG9tQWN0aW9uLCBFeHBvcnROdW1iZXJGb3JtYXQgfSBmcm9tICcuL21vZGVscyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHRlbXBsYXRlVXJsOiAnLi90YWJsZS1wYWdpbmcuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3RhYmxlLXBhZ2luZy5jb21wb25lbnQuc2NzcyddLFxuICAgIHNlbGVjdG9yOiAncy10YWJsZS1wYWdpbmcnLFxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZVBhZ2luZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGUgPSBpbmplY3QoVHJhbnNsYXRlU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBob3N0UHJvamVjdENvbmZpZ3MgPSBpbmplY3Q8SG9zdFByb2plY3RDb25maWdzPihIb3N0UHJvamVjdENvbmZpZ3NJbmplY3Rpb25Ub2tlbik7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyB0b3RhbFJlY29yZHMhOiBudW1iZXI7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBleHBvcnRGaWxlTmFtZT86IHN0cmluZztcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHRhYmxlITogVGFibGU7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBleHBvcnRhYmxlID0gdHJ1ZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGVuYWJsZUV4cG9ydFNlbGVjdGVkUmVjb3JkcyA9IHRydWU7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBjdXN0b21BY3Rpb25zPzogQ3VzdG9tQWN0aW9uW107XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBsb2FkQWxsUmVjb3Jkcz86ICgpID0+IFByb21pc2U8YW55W10+O1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgbG9hZEN1cnJlbnRQYWdlUmVjb3Jkcz86ICgpID0+IGFueVtdO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgbG9hZFNlbGVjdGVkUmVjb3Jkcz86ICgpID0+IGFueVtdO1xuXG4gICAgcHVibGljIGV4cG9ydE51bWJlckZvcm1hdCA9IGlucHV0PEV4cG9ydE51bWJlckZvcm1hdD4oKTtcblxuICAgIHB1YmxpYyB0b3RhbFJlY29yZHNUZXh0ID0gJyc7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGxvY2FsZVNlcnZpY2UgPSBpbmplY3QoTG9jYWxlU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBudW1lcmljU2VydmljZSA9IGluamVjdChOdW1lcmljU2VydmljZSk7XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmIChjaGFuZ2VzWyd0b3RhbFJlY29yZHMnXT8uY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnRvdGFsUmVjb3Jkc1RleHQgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGAke3RoaXMuZ2V0VHJhbnNsYXRlUHJlZml4KCl9dG90YWxfcmVjb3Jkc2AsIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogY2hhbmdlc1sndG90YWxSZWNvcmRzJ10uY3VycmVudFZhbHVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFRyYW5zbGF0ZVByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuaG9zdFByb2plY3RDb25maWdzLmRvbWFpbn0uJHt0aGlzLmhvc3RQcm9qZWN0Q29uZmlncy5zZXJ2aWNlfS5gO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRUb29sdGlwVGV4dCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoYCR7dGhpcy5nZXRUcmFuc2xhdGVQcmVmaXgoKX1leHBvcnRfdG9fY3N2YCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEFjdGlvbnMoKTogVGllcmVkTWVudUl0ZW1EYXRhW10ge1xuICAgICAgICBjb25zdCBhY3Rpb25zOiBUaWVyZWRNZW51SXRlbURhdGFbXSA9IFtcbiAgICAgICAgICAgIHRoaXMuYnVpbGRTY29wZUFjdGlvbignZXhwb3J0Q3VycmVudFBhZ2UnLCBgJHt0aGlzLmdldFRyYW5zbGF0ZVByZWZpeCgpfWV4cG9ydF9jdXJyZW50X3BhZ2VgLCAoZm9ybWF0KSA9PlxuICAgICAgICAgICAgICAgIHRoaXMuZXhwb3J0Q3VycmVudFBhZ2UoZm9ybWF0KSxcbiAgICAgICAgICAgICksXG4gICAgICAgIF07XG5cbiAgICAgICAgaWYgKHRoaXMuZW5hYmxlRXhwb3J0U2VsZWN0ZWRSZWNvcmRzKSB7XG4gICAgICAgICAgICBhY3Rpb25zLnB1c2goXG4gICAgICAgICAgICAgICAgdGhpcy5idWlsZFNjb3BlQWN0aW9uKFxuICAgICAgICAgICAgICAgICAgICAnZXhwb3J0U2VsZWN0ZWQnLFxuICAgICAgICAgICAgICAgICAgICBgJHt0aGlzLmdldFRyYW5zbGF0ZVByZWZpeCgpfWV4cG9ydF9zZWxlY3RlZF9yZWNvcmRzYCxcbiAgICAgICAgICAgICAgICAgICAgKGZvcm1hdCkgPT4gdGhpcy5leHBvcnRTZWxlY3RlZFJlY29yZHMoZm9ybWF0KSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmxvYWRBbGxSZWNvcmRzKSB7XG4gICAgICAgICAgICBhY3Rpb25zLnB1c2goXG4gICAgICAgICAgICAgICAgdGhpcy5idWlsZFNjb3BlQWN0aW9uKCdleHBvcnRBbGwnLCBgJHt0aGlzLmdldFRyYW5zbGF0ZVByZWZpeCgpfWV4cG9ydF9hbGxfcmVjb3Jkc2AsIChmb3JtYXQpID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwb3J0QWxsUmVjb3Jkcyhmb3JtYXQpLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuY3VzdG9tQWN0aW9ucz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBjdXN0b21NZW51cyA9IHRoaXMuY3VzdG9tQWN0aW9ucy5tYXAoKHAsICRpbmRleCkgPT4gKHtcbiAgICAgICAgICAgICAgICBkYXRhS2V5OiBgY3VzdG9tQWN0aW9uXyR7JGluZGV4fWAsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHAubGFiZWwsXG4gICAgICAgICAgICAgICAgY29tbWFuZDogcC5jb21tYW5kLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgYWN0aW9ucy5wdXNoKC4uLmN1c3RvbU1lbnVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhY3Rpb25zO1xuICAgIH1cblxuICAgIHByaXZhdGUgYnVpbGRTY29wZUFjdGlvbihcbiAgICAgICAgZGF0YUtleTogc3RyaW5nLFxuICAgICAgICBsYWJlbDogc3RyaW5nLFxuICAgICAgICBydW46IChmb3JtYXQ6IEV4cG9ydE51bWJlckZvcm1hdCkgPT4gdm9pZCxcbiAgICApOiBUaWVyZWRNZW51SXRlbURhdGEge1xuICAgICAgICBjb25zdCBmaXhlZEZvcm1hdCA9IHRoaXMuZXhwb3J0TnVtYmVyRm9ybWF0KCk7XG4gICAgICAgIGlmIChmaXhlZEZvcm1hdCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBkYXRhS2V5LFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGxhYmVsKSxcbiAgICAgICAgICAgICAgICBjb21tYW5kOiAoKSA9PiBydW4oZml4ZWRGb3JtYXQpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkYXRhS2V5LFxuICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQobGFiZWwpLFxuICAgICAgICAgICAgc3VibWVudTogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YUtleTogYCR7ZGF0YUtleX1fcmF3YCxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5leHBvcnRfcmF3X2RhdGEnKSxcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZDogKCkgPT4gcnVuKEV4cG9ydE51bWJlckZvcm1hdC5SYXcpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBkYXRhS2V5OiBgJHtkYXRhS2V5fV9sb2NhbGl6ZWRgLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLmV4cG9ydF9sb2NhbGl6ZWRfZGF0YScpLFxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kOiAoKSA9PiBydW4oRXhwb3J0TnVtYmVyRm9ybWF0LkxvY2FsaXplZCksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB2YWxpZGF0ZUNvbXBvbmVudCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnRhYmxlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RhYmxlIGNvbXBvbmVudCBub3QgZGVmaW5lZCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldENvbHVtbnNUb0V4cG9ydCgpIHtcbiAgICAgICAgcmV0dXJuIFsuLi4odGhpcy50YWJsZS5jb2x1bW5zID8/IFtdKV0ubWFwKChjb2x1bW4pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGV4cG9ydENvbHVtbiA9IHtcbiAgICAgICAgICAgICAgICAuLi5jb2x1bW4sXG4gICAgICAgICAgICAgICAgaGVhZGVyOiBjb2x1bW4uaGVhZGVyLFxuICAgICAgICAgICAgICAgIGV4cG9ydGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgZmllbGQ6IGNvbHVtbi5maWVsZCxcbiAgICAgICAgICAgICAgICBzZXBhcmF0b3I6IGNvbHVtbi5zZXBhcmF0b3IgPz8gJyAtICcsXG4gICAgICAgICAgICAgICAgZW51bVByZWZpeDogY29sdW1uLmVudW1QcmVmaXgsXG4gICAgICAgICAgICAgICAgY3VzdG9tRXhwb3J0OiBjb2x1bW4uY3VzdG9tRXhwb3J0LFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgaWYgKGNvbHVtbi5leHBvcnRhYmxlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIGV4cG9ydENvbHVtbi5leHBvcnRhYmxlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb2x1bW4uYXR0cmlidXRlcyAmJiBjb2x1bW4uYXR0cmlidXRlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29sdW1uLmF0dHJpYnV0ZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cG9ydENvbHVtbi5maWVsZCA9IGNvbHVtbi5hdHRyaWJ1dGVzWzBdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cG9ydENvbHVtbi5maWVsZCA9IGNvbHVtbi5hdHRyaWJ1dGVzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGV4cG9ydENvbHVtbjtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDdXJyZW50UGFnZVJvd3NUb0V4cG9ydChjb2x1bW5zOiBhbnlbXSwgZm9ybWF0OiBFeHBvcnROdW1iZXJGb3JtYXQpIHtcbiAgICAgICAgbGV0IHRhYmxlRGF0YSA9IGRlZXBDbG9uZSh0aGlzLnRhYmxlLnZhbHVlKTtcblxuICAgICAgICBpZiAodGhpcy5sb2FkQ3VycmVudFBhZ2VSZWNvcmRzKSB7XG4gICAgICAgICAgICB0YWJsZURhdGEgPSB0aGlzLmxvYWRDdXJyZW50UGFnZVJlY29yZHMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRhYmxlRGF0YSA9IHRoaXMubWFwQ3VzdG9tRXhwb3J0KGNvbHVtbnMsIHRhYmxlRGF0YSk7XG4gICAgICAgIHRhYmxlRGF0YSA9IHRoaXMubWFwTnVtYmVyRm9ybWF0KGNvbHVtbnMsIHRhYmxlRGF0YSwgZm9ybWF0KTtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwQ29sdW1uc1RyYW5zbGF0aW9ucyhjb2x1bW5zLCB0YWJsZURhdGEpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U2VsZWN0ZWRSb3dzVG9FeHBvcnQoY29sdW1uczogYW55W10sIGZvcm1hdDogRXhwb3J0TnVtYmVyRm9ybWF0KSB7XG4gICAgICAgIGxldCB0YWJsZURhdGEgPSBkZWVwQ2xvbmUodGhpcy50YWJsZS5zZWxlY3Rpb24pO1xuICAgICAgICBpZiAodGhpcy5sb2FkU2VsZWN0ZWRSZWNvcmRzKSB7XG4gICAgICAgICAgICB0YWJsZURhdGEgPSB0aGlzLmxvYWRTZWxlY3RlZFJlY29yZHMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRhYmxlRGF0YSA9IHRoaXMubWFwQ3VzdG9tRXhwb3J0KGNvbHVtbnMsIHRhYmxlRGF0YSk7XG4gICAgICAgIHRhYmxlRGF0YSA9IHRoaXMubWFwTnVtYmVyRm9ybWF0KGNvbHVtbnMsIHRhYmxlRGF0YSwgZm9ybWF0KTtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwQ29sdW1uc1RyYW5zbGF0aW9ucyhjb2x1bW5zLCB0YWJsZURhdGEpO1xuICAgIH1cblxuICAgIHByaXZhdGUgbWFwTnVtYmVyRm9ybWF0KGNvbHVtbnM6IFBhcnRpYWw8Q29sdW1uPltdLCB0YWJsZURhdGE6IGFueVtdLCBmb3JtYXQ6IEV4cG9ydE51bWJlckZvcm1hdCkge1xuICAgICAgICByZXR1cm4gZm9ybWF0ID09PSBFeHBvcnROdW1iZXJGb3JtYXQuUmF3XG4gICAgICAgICAgICA/IG1hcEV4cG9ydFZhbHVlc1Jhdyhjb2x1bW5zLCB0YWJsZURhdGEpXG4gICAgICAgICAgICA6IG1hcEV4cG9ydFZhbHVlc0xvY2FsaXplZChjb2x1bW5zLCB0YWJsZURhdGEsIHRoaXMubnVtZXJpY1NlcnZpY2UsIHRoaXMubG9jYWxlU2VydmljZS5nZXRMb2NhbGVPcHRpb25zKCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UHJvcGVydHlWYWx1ZShvYmo6IGFueSwgcGF0aDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBwYXRoXG4gICAgICAgICAgICAuc3BsaXQoJy4nKVxuICAgICAgICAgICAgLnJlZHVjZSgocmVzdWx0OiBhbnksIHByb3A6IGFueSkgPT4gKHJlc3VsdFtwcm9wXSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogcmVzdWx0W3Byb3BdKSwgb2JqKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFByb3BlcnR5VmFsdWUob2JqOiBhbnksIHBhdGg6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgICAgICB0aGlzLnJlY3Vyc2lvblNldFZhbHVlKG9iaiwgcGF0aC5zcGxpdCgnLicpLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWN1cnNpb25TZXRWYWx1ZShvYmo6IGFueSwga2V5c0xpc3Q6IHN0cmluZ1tdLCB2YWx1ZTogYW55KTogYW55IHtcbiAgICAgICAgY29uc3Qga2V5ID0ga2V5c0xpc3RbMF07XG4gICAgICAgIGlmIChrZXlzTGlzdC5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIG9ialtrZXldID0gdmFsdWU7XG4gICAgICAgICAgICByZXR1cm4gb2JqO1xuICAgICAgICB9XG4gICAgICAgIG9ialtrZXldID0gdGhpcy5yZWN1cnNpb25TZXRWYWx1ZShvYmo/LltrZXldIHx8IHt9LCBrZXlzTGlzdC5zbGljZSgxKSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gb2JqO1xuICAgIH1cblxuICAgIHB1YmxpYyBtYXBDb2x1bW5zVHJhbnNsYXRpb25zKGNvbHVtbnM6IGFueVtdLCByb3dzOiBhbnlbXSkge1xuICAgICAgICBjb25zdCBlbnVtQ29sdW1ucyA9IGNvbHVtbnMuZmlsdGVyKChwKSA9PiBwLmVudW1QcmVmaXgpO1xuICAgICAgICBpZiAoIWVudW1Db2x1bW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHJvd3M7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gWy4uLnJvd3NdLm1hcCgocm93KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuZXdSb3cgPSB7IC4uLnJvdyB9O1xuICAgICAgICAgICAgZW51bUNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGRzID0gIUFycmF5LmlzQXJyYXkoY29sdW1uLmZpZWxkKSA/IFtjb2x1bW4uZmllbGRdIDogY29sdW1uLmZpZWxkO1xuICAgICAgICAgICAgICAgIGZpZWxkcy5mb3JFYWNoKChmaWVsZE5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5EYXRhID0gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKHJvdywgZmllbGROYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbHVtbkRhdGEgPT09IG51bGwgfHwgY29sdW1uRGF0YSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXMudHJhbnNsYXRlVmFsdWUoY29sdW1uLCBjb2x1bW5EYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKG5ld1JvdywgZmllbGROYW1lLCBuZXdWYWx1ZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIG5ld1JvdztcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG1hcEN1c3RvbUV4cG9ydChjb2x1bW5zOiBhbnlbXSwgcm93czogYW55W10pIHtcbiAgICAgICAgY29uc3QgY3VzdG9tQ29sdW1ucyA9IGNvbHVtbnMuZmlsdGVyKChwKSA9PiBwLmN1c3RvbUV4cG9ydCk7XG4gICAgICAgIGlmICghY3VzdG9tQ29sdW1ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiByb3dzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFsuLi5yb3dzXS5tYXAoKHJvdykgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV3Um93ID0geyAuLi5yb3cgfTtcbiAgICAgICAgICAgIGN1c3RvbUNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGRzID0gIUFycmF5LmlzQXJyYXkoY29sdW1uLmZpZWxkKSA/IFtjb2x1bW4uZmllbGRdIDogY29sdW1uLmZpZWxkO1xuICAgICAgICAgICAgICAgIGZpZWxkcy5mb3JFYWNoKChmaWVsZE5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5EYXRhID0gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKHJvdywgZmllbGROYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbHVtbkRhdGEgPT09IG51bGwgfHwgY29sdW1uRGF0YSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBjb2x1bW4uY3VzdG9tRXhwb3J0KGNvbHVtbkRhdGEpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUobmV3Um93LCBmaWVsZE5hbWUsIG5ld1ZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gbmV3Um93O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHRyYW5zbGF0ZVZhbHVlKGNvbHVtbjogYW55LCBjb2x1bW5EYXRhOiBhbnkpIHtcbiAgICAgICAgLy8gRGVmYXVsdCB1c2FnZTogRU5VTV9WQUxVRSAtPiBkb21haW4uc2VydmljZS5lbnVtX3ZhbHVlXG4gICAgICAgIGNvbnN0IGVudW1WYWx1ZSA9IGNvbHVtbkRhdGEudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBsZXQgdHJhbnNsYXRpb25LZXkgPSBjb2x1bW4uZW51bVByZWZpeCArIGVudW1WYWx1ZTtcbiAgICAgICAgbGV0IHRyYW5zbGF0ZWRWYWx1ZSA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQodHJhbnNsYXRpb25LZXkpO1xuXG4gICAgICAgIC8vIEN1c3RvbSB1c2FnZSAxOiBWOSAtPiBkb21haW4uc2VydmljZS52XzlcbiAgICAgICAgaWYgKHRyYW5zbGF0aW9uS2V5ID09PSB0cmFuc2xhdGVkVmFsdWUgJiYgZW51bVZhbHVlLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHRyYW5zbGF0aW9uS2V5ID0gYCR7Y29sdW1uLmVudW1QcmVmaXh9JHtlbnVtVmFsdWUuc3Vic3RyaW5nKDAsIDEpfV8ke2VudW1WYWx1ZS5zdWJzdHIoMSl9YDtcbiAgICAgICAgICAgIHRyYW5zbGF0ZWRWYWx1ZSA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQodHJhbnNsYXRpb25LZXkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ3VzdG9tIHVzYWdlIDI6IEVudW1WYWx1ZSAtPiBkb21haW4uc2VydmljZS5lbnVtX3ZhbHVlXG4gICAgICAgIGlmICh0cmFuc2xhdGlvbktleSA9PT0gdHJhbnNsYXRlZFZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBlbnVtS2V5ID0gdGhpcy5jb252ZXJ0VG9TbmFrZUNhc2UoY29sdW1uRGF0YS50b1N0cmluZygpKTtcbiAgICAgICAgICAgIHRyYW5zbGF0aW9uS2V5ID0gYCR7Y29sdW1uLmVudW1QcmVmaXh9JHtlbnVtS2V5fWA7XG4gICAgICAgICAgICB0cmFuc2xhdGVkVmFsdWUgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KHRyYW5zbGF0aW9uS2V5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cmFuc2xhdGVkVmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb252ZXJ0VG9TbmFrZUNhc2Uoc3RyOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKC8oW0EtWl0pL2csIChfbWF0Y2gsIGdyb3VwKSA9PiBgXyR7Z3JvdXAudG9Mb3dlckNhc2UoKX1gKS5yZXBsYWNlKC9eXy8sICcnKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEV4cG9ydEZpbGVOYW1lKCkge1xuICAgICAgICBjb25zdCBsYW5nID0gdGhpcy50cmFuc2xhdGUuY3VycmVudExhbmcgPz8gJ3B0LUJSJztcbiAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XG5cbiAgICAgICAgY29uc3QgZmlsZU5hbWUgPSB0aGlzLmV4cG9ydEZpbGVOYW1lID8/ICdkb3dubG9hZCc7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZERhdGUgPSBkYXRlLnRvTG9jYWxlRGF0ZVN0cmluZyhsYW5nKS5yZXBsYWNlKCdfJywgJy0nKTtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkVGltZSA9IGRhdGUudG9Mb2NhbGVUaW1lU3RyaW5nKGxhbmcpLnJlcGxhY2UoJyAnLCAnLScpO1xuXG4gICAgICAgIHJldHVybiBgJHtmaWxlTmFtZX1fJHtmb3JtYXR0ZWREYXRlfV8ke2Zvcm1hdHRlZFRpbWV9YDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZXhwb3J0Q3VycmVudFBhZ2UoZm9ybWF0OiBFeHBvcnROdW1iZXJGb3JtYXQgPSBFeHBvcnROdW1iZXJGb3JtYXQuTG9jYWxpemVkKSB7XG4gICAgICAgIHRoaXMudmFsaWRhdGVDb21wb25lbnQoKTtcbiAgICAgICAgY29uc3QgY29sdW1ucyA9IHRoaXMuZ2V0Q29sdW1uc1RvRXhwb3J0KCk7XG4gICAgICAgIGNvbnN0IGRhdGFUb0V4cG9ydCA9IHRoaXMuZ2V0Q3VycmVudFBhZ2VSb3dzVG9FeHBvcnQoY29sdW1ucywgZm9ybWF0KTtcbiAgICAgICAgRXhwb3J0VXRpbHMuZXhwb3J0Q1NWKGNvbHVtbnMsIGRhdGFUb0V4cG9ydCwgdW5kZWZpbmVkLCB0aGlzLmdldEV4cG9ydEZpbGVOYW1lKCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBleHBvcnRTZWxlY3RlZFJlY29yZHMoZm9ybWF0OiBFeHBvcnROdW1iZXJGb3JtYXQgPSBFeHBvcnROdW1iZXJGb3JtYXQuTG9jYWxpemVkKSB7XG4gICAgICAgIHRoaXMudmFsaWRhdGVDb21wb25lbnQoKTtcbiAgICAgICAgY29uc3QgY29sdW1ucyA9IHRoaXMuZ2V0Q29sdW1uc1RvRXhwb3J0KCk7XG4gICAgICAgIGNvbnN0IGRhdGFUb0V4cG9ydCA9IHRoaXMuZ2V0U2VsZWN0ZWRSb3dzVG9FeHBvcnQoY29sdW1ucywgZm9ybWF0KTtcbiAgICAgICAgRXhwb3J0VXRpbHMuZXhwb3J0Q1NWKGNvbHVtbnMsIGRhdGFUb0V4cG9ydCwgdW5kZWZpbmVkLCB0aGlzLmdldEV4cG9ydEZpbGVOYW1lKCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBleHBvcnRBbGxSZWNvcmRzKGZvcm1hdDogRXhwb3J0TnVtYmVyRm9ybWF0ID0gRXhwb3J0TnVtYmVyRm9ybWF0LkxvY2FsaXplZCkge1xuICAgICAgICB0aGlzLnZhbGlkYXRlQ29tcG9uZW50KCk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmxvYWRBbGxSZWNvcmRzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHNlcnZlckRhdGEgPSBhd2FpdCB0aGlzLmxvYWRBbGxSZWNvcmRzKCk7XG5cbiAgICAgICAgY29uc3QgY29sdW1ucyA9IHRoaXMuZ2V0Q29sdW1uc1RvRXhwb3J0KCk7XG5cbiAgICAgICAgc2VydmVyRGF0YSA9IHRoaXMubWFwQ3VzdG9tRXhwb3J0KGNvbHVtbnMsIHNlcnZlckRhdGEpO1xuXG4gICAgICAgIHNlcnZlckRhdGEgPSB0aGlzLm1hcE51bWJlckZvcm1hdChjb2x1bW5zLCBzZXJ2ZXJEYXRhLCBmb3JtYXQpO1xuXG4gICAgICAgIGNvbnN0IGRhdGFUb0V4cG9ydCA9IHRoaXMubWFwQ29sdW1uc1RyYW5zbGF0aW9ucyhjb2x1bW5zLCBzZXJ2ZXJEYXRhKTtcblxuICAgICAgICBFeHBvcnRVdGlscy5leHBvcnRDU1YoY29sdW1ucywgZGF0YVRvRXhwb3J0LCB1bmRlZmluZWQsIHRoaXMuZ2V0RXhwb3J0RmlsZU5hbWUoKSk7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInBhZ2luZy1jb250YWluZXJcIj5cbiAgICA8c3BhbiBjbGFzcz1cInRvdGFsLXJlY29yZHNcIj5cbiAgICAgICAge3sgdG90YWxSZWNvcmRzVGV4dCB9fVxuICAgIDwvc3Bhbj5cbiAgICBAaWYgKGV4cG9ydGFibGUpIHtcbiAgICAgICAgPHMtYnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cImV4cG9ydC1idXR0b25cIlxuICAgICAgICAgICAgcHJpb3JpdHk9XCJkZWZhdWx0XCJcbiAgICAgICAgICAgIGljb25DbGFzcz1cImZhIGZhLWZ3IGZhLWZpbGUtZXhwb3J0XCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmYWxzZVwiXG4gICAgICAgICAgICBbYXV4aWxpYXJ5XT1cInRydWVcIlxuICAgICAgICAgICAgW3Rvb2x0aXBdPVwiZ2V0VG9vbHRpcFRleHQoKVwiXG4gICAgICAgICAgICBbbWVudU9wdGlvbnNdPVwiZ2V0QWN0aW9ucygpXCJcbiAgICAgICAgPlxuICAgICAgICA8L3MtYnV0dG9uPlxuICAgIH1cbjwvZGl2PlxuIl19
|
|
@@ -65,11 +65,11 @@ class AlertComponent {
|
|
|
65
65
|
}
|
|
66
66
|
_isOpen = true;
|
|
67
67
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AlertComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
68
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: AlertComponent, selector: "s-alert", inputs: { severity: "severity", summary: "summary", detail: "detail", closable: "closable" }, outputs: { closed: "closed" }, ngImport: i0, template: "<div\n class=\"alert\"\n [ngClass]=\"{\n 'alert--info': severity === 'info',\n 'alert--success': severity === 'success',\n 'alert--warning': severity === 'warning',\n 'alert--error': severity === 'error',\n }\"\n>\n <div class=\"content\">\n <div class=\"icon-container\">\n <i\n class=\"fas fa-info\"\n [ngClass]=\"{\n 'fa-info': severity === 'info',\n 'fa-check': severity === 'success',\n 'fa-exclamation-triangle': severity === 'warning',\n 'fa-times': severity === 'error',\n }\"\n ></i>\n </div>\n <div class=\"text-container\">\n <div class=\"text\">\n @if (summary) {\n <span class=\"summary\">{{ summary }}</span>\n }\n\n @if (detail) {\n <span class=\"detail\">{{ detail }}</span>\n }\n </div>\n </div>\n </div>\n @if (closable) {\n <button\n class=\"close-option\"\n (click)=\"onClose()\"\n >\n <i class=\"fas fa-times\"></i>\n </button>\n }\n</div>\n", styles: [".alert{align-items:center;background-color:#f1f7f8;border-left:4px solid #428bca;border-radius:4px;box-shadow:1px 1px 2px #0003;display:flex;gap:16px;justify-content:space-between;margin:8px;padding:12px 16px}.alert .content{align-items:center;display:flex;gap:16px}.alert .content .icon-container{align-items:center;background-color:#428bca;border-radius:50%;color:#fff;display:inline-flex;flex-shrink:0;height:40px;justify-content:center;width:40px}.alert .content .text-container{display:flex;flex-direction:column;gap:16px}.alert .content .text-container .text{display:flex;flex-direction:column;justify-content:flex-start}.alert .content .text-container .text .summary,.alert .content .text-container .text .detail{color:#212533;font-family:Open Sans,sans-serif;font-size:14px}.alert .content .text-container .text .summary{font-weight:700}.alert .close-option{background-color:transparent;border:none;color:#212533;cursor:pointer;font-size:16px;padding:4px}.alert--info{background-color:#f1f7f8;border-color:#428bca}.alert--info .content .icon-container{background-color:#428bca;color:#fff}.alert--success{background-color:#e0f0f0;border-color:#0c9348}.alert--success .content .icon-container{background-color:#0c9348;color:#fff}.alert--warning{background-color:#fef4e3;border-color:#fcbf10}.alert--warning .content .icon-container{background-color:#fcbf10;color:#212533}.alert--error{background-color:#fef0f0;border-color:#c13018}.alert--error .content .icon-container{background-color:#c13018;color:#fff}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
|
|
68
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: AlertComponent, selector: "s-alert", inputs: { severity: "severity", summary: "summary", detail: "detail", closable: "closable" }, outputs: { closed: "closed" }, ngImport: i0, template: "@if (isOpen) {\n<div\n class=\"alert\"\n [ngClass]=\"{\n 'alert--info': severity === 'info',\n 'alert--success': severity === 'success',\n 'alert--warning': severity === 'warning',\n 'alert--error': severity === 'error',\n }\"\n>\n <div class=\"content\">\n <div class=\"icon-container\">\n <i\n class=\"fas fa-info\"\n [ngClass]=\"{\n 'fa-info': severity === 'info',\n 'fa-check': severity === 'success',\n 'fa-exclamation-triangle': severity === 'warning',\n 'fa-times': severity === 'error',\n }\"\n ></i>\n </div>\n <div class=\"text-container\">\n <div class=\"text\">\n @if (summary) {\n <span class=\"summary\">{{ summary }}</span>\n }\n\n @if (detail) {\n <span class=\"detail\">{{ detail }}</span>\n }\n </div>\n </div>\n </div>\n @if (closable) {\n <button\n class=\"close-option\"\n (click)=\"onClose()\"\n >\n <i class=\"fas fa-times\"></i>\n </button>\n }\n</div>\n}\n", styles: [".alert{align-items:center;background-color:#f1f7f8;border-left:4px solid #428bca;border-radius:4px;box-shadow:1px 1px 2px #0003;display:flex;gap:16px;justify-content:space-between;margin:8px;padding:12px 16px}.alert .content{align-items:center;display:flex;gap:16px}.alert .content .icon-container{align-items:center;background-color:#428bca;border-radius:50%;color:#fff;display:inline-flex;flex-shrink:0;height:40px;justify-content:center;width:40px}.alert .content .text-container{display:flex;flex-direction:column;gap:16px}.alert .content .text-container .text{display:flex;flex-direction:column;justify-content:flex-start}.alert .content .text-container .text .summary,.alert .content .text-container .text .detail{color:#212533;font-family:Open Sans,sans-serif;font-size:14px}.alert .content .text-container .text .summary{font-weight:700}.alert .close-option{background-color:transparent;border:none;color:#212533;cursor:pointer;font-size:16px;padding:4px}.alert--info{background-color:#f1f7f8;border-color:#428bca}.alert--info .content .icon-container{background-color:#428bca;color:#fff}.alert--success{background-color:#e0f0f0;border-color:#0c9348}.alert--success .content .icon-container{background-color:#0c9348;color:#fff}.alert--warning{background-color:#fef4e3;border-color:#fcbf10}.alert--warning .content .icon-container{background-color:#fcbf10;color:#212533}.alert--error{background-color:#fef0f0;border-color:#c13018}.alert--error .content .icon-container{background-color:#c13018;color:#fff}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
|
|
69
69
|
}
|
|
70
70
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AlertComponent, decorators: [{
|
|
71
71
|
type: Component,
|
|
72
|
-
args: [{ selector: 's-alert', template: "<div\n class=\"alert\"\n [ngClass]=\"{\n 'alert--info': severity === 'info',\n 'alert--success': severity === 'success',\n 'alert--warning': severity === 'warning',\n 'alert--error': severity === 'error',\n }\"\n>\n <div class=\"content\">\n <div class=\"icon-container\">\n <i\n class=\"fas fa-info\"\n [ngClass]=\"{\n 'fa-info': severity === 'info',\n 'fa-check': severity === 'success',\n 'fa-exclamation-triangle': severity === 'warning',\n 'fa-times': severity === 'error',\n }\"\n ></i>\n </div>\n <div class=\"text-container\">\n <div class=\"text\">\n @if (summary) {\n <span class=\"summary\">{{ summary }}</span>\n }\n\n @if (detail) {\n <span class=\"detail\">{{ detail }}</span>\n }\n </div>\n </div>\n </div>\n @if (closable) {\n <button\n class=\"close-option\"\n (click)=\"onClose()\"\n >\n <i class=\"fas fa-times\"></i>\n </button>\n }\n</div>\n", styles: [".alert{align-items:center;background-color:#f1f7f8;border-left:4px solid #428bca;border-radius:4px;box-shadow:1px 1px 2px #0003;display:flex;gap:16px;justify-content:space-between;margin:8px;padding:12px 16px}.alert .content{align-items:center;display:flex;gap:16px}.alert .content .icon-container{align-items:center;background-color:#428bca;border-radius:50%;color:#fff;display:inline-flex;flex-shrink:0;height:40px;justify-content:center;width:40px}.alert .content .text-container{display:flex;flex-direction:column;gap:16px}.alert .content .text-container .text{display:flex;flex-direction:column;justify-content:flex-start}.alert .content .text-container .text .summary,.alert .content .text-container .text .detail{color:#212533;font-family:Open Sans,sans-serif;font-size:14px}.alert .content .text-container .text .summary{font-weight:700}.alert .close-option{background-color:transparent;border:none;color:#212533;cursor:pointer;font-size:16px;padding:4px}.alert--info{background-color:#f1f7f8;border-color:#428bca}.alert--info .content .icon-container{background-color:#428bca;color:#fff}.alert--success{background-color:#e0f0f0;border-color:#0c9348}.alert--success .content .icon-container{background-color:#0c9348;color:#fff}.alert--warning{background-color:#fef4e3;border-color:#fcbf10}.alert--warning .content .icon-container{background-color:#fcbf10;color:#212533}.alert--error{background-color:#fef0f0;border-color:#c13018}.alert--error .content .icon-container{background-color:#c13018;color:#fff}\n"] }]
|
|
72
|
+
args: [{ selector: 's-alert', template: "@if (isOpen) {\n<div\n class=\"alert\"\n [ngClass]=\"{\n 'alert--info': severity === 'info',\n 'alert--success': severity === 'success',\n 'alert--warning': severity === 'warning',\n 'alert--error': severity === 'error',\n }\"\n>\n <div class=\"content\">\n <div class=\"icon-container\">\n <i\n class=\"fas fa-info\"\n [ngClass]=\"{\n 'fa-info': severity === 'info',\n 'fa-check': severity === 'success',\n 'fa-exclamation-triangle': severity === 'warning',\n 'fa-times': severity === 'error',\n }\"\n ></i>\n </div>\n <div class=\"text-container\">\n <div class=\"text\">\n @if (summary) {\n <span class=\"summary\">{{ summary }}</span>\n }\n\n @if (detail) {\n <span class=\"detail\">{{ detail }}</span>\n }\n </div>\n </div>\n </div>\n @if (closable) {\n <button\n class=\"close-option\"\n (click)=\"onClose()\"\n >\n <i class=\"fas fa-times\"></i>\n </button>\n }\n</div>\n}\n", styles: [".alert{align-items:center;background-color:#f1f7f8;border-left:4px solid #428bca;border-radius:4px;box-shadow:1px 1px 2px #0003;display:flex;gap:16px;justify-content:space-between;margin:8px;padding:12px 16px}.alert .content{align-items:center;display:flex;gap:16px}.alert .content .icon-container{align-items:center;background-color:#428bca;border-radius:50%;color:#fff;display:inline-flex;flex-shrink:0;height:40px;justify-content:center;width:40px}.alert .content .text-container{display:flex;flex-direction:column;gap:16px}.alert .content .text-container .text{display:flex;flex-direction:column;justify-content:flex-start}.alert .content .text-container .text .summary,.alert .content .text-container .text .detail{color:#212533;font-family:Open Sans,sans-serif;font-size:14px}.alert .content .text-container .text .summary{font-weight:700}.alert .close-option{background-color:transparent;border:none;color:#212533;cursor:pointer;font-size:16px;padding:4px}.alert--info{background-color:#f1f7f8;border-color:#428bca}.alert--info .content .icon-container{background-color:#428bca;color:#fff}.alert--success{background-color:#e0f0f0;border-color:#0c9348}.alert--success .content .icon-container{background-color:#0c9348;color:#fff}.alert--warning{background-color:#fef4e3;border-color:#fcbf10}.alert--warning .content .icon-container{background-color:#fcbf10;color:#212533}.alert--error{background-color:#fef0f0;border-color:#c13018}.alert--error .content .icon-container{background-color:#c13018;color:#fff}\n"] }]
|
|
73
73
|
}], propDecorators: { severity: [{
|
|
74
74
|
type: Input
|
|
75
75
|
}], summary: [{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seniorsistemas-angular-components-alert.mjs","sources":["../../projects/angular-components/alert/src/lib/alert/alert.component.ts","../../projects/angular-components/alert/src/lib/alert/alert.component.html","../../projects/angular-components/alert/src/lib/alert/alert.module.ts","../../projects/angular-components/alert/src/seniorsistemas-angular-components-alert.ts"],"sourcesContent":["import { Component, EventEmitter, Input, Output } from '@angular/core';\n\n/**\n * @description Componente de alerta que exibe mensagens informativas, de sucesso, aviso ou erro.\n * Suporta fechamento manual pelo usuário e emite um evento ao ser fechado.\n *\n * @example\n * ```html\n * <s-alert\n * severity=\"warning\"\n * summary=\"Atenção\"\n * detail=\"Verifique os dados antes de continuar.\"\n * (closed)=\"onAlertClosed()\"\n * />\n * ```\n *\n * @category Feedback\n */\n@Component({\n selector: 's-alert',\n templateUrl: './alert.component.html',\n styleUrls: ['./alert.component.scss'],\n})\nexport class AlertComponent {\n /**\n * @description Nível de severidade do alerta, que define a cor e o ícone exibidos.\n * - `'info'`: alerta informativo (padrão).\n * - `'success'`: alerta de sucesso.\n * - `'warning'`: alerta de aviso.\n * - `'error'`: alerta de erro.\n *\n * @default 'info'\n */\n // sonar-ignore: Refactor this union type to have less than 3 elements\n @Input()\n public severity: 'info' | 'success' | 'warning' | 'error' = 'info';\n\n /**\n * @description Título principal do alerta exibido em destaque. Campo obrigatório.\n */\n @Input({ required: true })\n public summary!: string;\n\n /**\n * @description Mensagem detalhada exibida abaixo do título do alerta. Campo obrigatório.\n */\n @Input({ required: true })\n public detail!: string;\n\n /**\n * @description Quando `true`, exibe o botão de fechar o alerta.\n * Quando `false`, o alerta não pode ser dispensado pelo usuário.\n *\n * @default true\n */\n @Input()\n public closable = true;\n\n /**\n * @description Emitido quando o usuário fecha o alerta clicando no botão de fechar.\n */\n @Output()\n public closed = new EventEmitter<void>();\n\n public get isOpen(): boolean {\n return this._isOpen;\n }\n\n public closeAlert(): void {\n this._isOpen = false;\n }\n\n public showAlert(): void {\n this._isOpen = true;\n }\n\n public onClose(): void {\n this.closed.emit();\n this.closeAlert();\n }\n\n private _isOpen = true;\n}\n\n","<div\n class=\"alert\"\n [ngClass]=\"{\n 'alert--info': severity === 'info',\n 'alert--success': severity === 'success',\n 'alert--warning': severity === 'warning',\n 'alert--error': severity === 'error',\n }\"\n>\n <div class=\"content\">\n <div class=\"icon-container\">\n <i\n class=\"fas fa-info\"\n [ngClass]=\"{\n 'fa-info': severity === 'info',\n 'fa-check': severity === 'success',\n 'fa-exclamation-triangle': severity === 'warning',\n 'fa-times': severity === 'error',\n }\"\n ></i>\n </div>\n <div class=\"text-container\">\n <div class=\"text\">\n @if (summary) {\n <span class=\"summary\">{{ summary }}</span>\n }\n\n @if (detail) {\n <span class=\"detail\">{{ detail }}</span>\n }\n </div>\n </div>\n </div>\n @if (closable) {\n <button\n class=\"close-option\"\n (click)=\"onClose()\"\n >\n <i class=\"fas fa-times\"></i>\n </button>\n }\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { AlertComponent } from './alert.component';\n\n@NgModule({\n imports: [CommonModule],\n declarations: [AlertComponent],\n exports: [AlertComponent],\n})\nexport class AlertModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;AAEA;;;;;;;;;;;;;;;AAeG;MAMU,cAAc,CAAA;AACvB;;;;;;;;AAQG;;IAGI,QAAQ,GAA6C,MAAM,CAAC;AAEnE;;AAEG;AAEI,IAAA,OAAO,CAAU;AAExB;;AAEG;AAEI,IAAA,MAAM,CAAU;AAEvB;;;;;AAKG;IAEI,QAAQ,GAAG,IAAI,CAAC;AAEvB;;AAEG;AAEI,IAAA,MAAM,GAAG,IAAI,YAAY,EAAQ,CAAC;AAEzC,IAAA,IAAW,MAAM,GAAA;QACb,OAAO,IAAI,CAAC,OAAO,CAAC;KACvB;IAEM,UAAU,GAAA;AACb,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;KACxB;IAEM,SAAS,GAAA;AACZ,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;KACvB;IAEM,OAAO,GAAA;AACV,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACnB,IAAI,CAAC,UAAU,EAAE,CAAC;KACrB;IAEO,OAAO,GAAG,IAAI,CAAC;wGA1Dd,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAd,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,cAAc,4KCvB3B,
|
|
1
|
+
{"version":3,"file":"seniorsistemas-angular-components-alert.mjs","sources":["../../projects/angular-components/alert/src/lib/alert/alert.component.ts","../../projects/angular-components/alert/src/lib/alert/alert.component.html","../../projects/angular-components/alert/src/lib/alert/alert.module.ts","../../projects/angular-components/alert/src/seniorsistemas-angular-components-alert.ts"],"sourcesContent":["import { Component, EventEmitter, Input, Output } from '@angular/core';\n\n/**\n * @description Componente de alerta que exibe mensagens informativas, de sucesso, aviso ou erro.\n * Suporta fechamento manual pelo usuário e emite um evento ao ser fechado.\n *\n * @example\n * ```html\n * <s-alert\n * severity=\"warning\"\n * summary=\"Atenção\"\n * detail=\"Verifique os dados antes de continuar.\"\n * (closed)=\"onAlertClosed()\"\n * />\n * ```\n *\n * @category Feedback\n */\n@Component({\n selector: 's-alert',\n templateUrl: './alert.component.html',\n styleUrls: ['./alert.component.scss'],\n})\nexport class AlertComponent {\n /**\n * @description Nível de severidade do alerta, que define a cor e o ícone exibidos.\n * - `'info'`: alerta informativo (padrão).\n * - `'success'`: alerta de sucesso.\n * - `'warning'`: alerta de aviso.\n * - `'error'`: alerta de erro.\n *\n * @default 'info'\n */\n // sonar-ignore: Refactor this union type to have less than 3 elements\n @Input()\n public severity: 'info' | 'success' | 'warning' | 'error' = 'info';\n\n /**\n * @description Título principal do alerta exibido em destaque. Campo obrigatório.\n */\n @Input({ required: true })\n public summary!: string;\n\n /**\n * @description Mensagem detalhada exibida abaixo do título do alerta. Campo obrigatório.\n */\n @Input({ required: true })\n public detail!: string;\n\n /**\n * @description Quando `true`, exibe o botão de fechar o alerta.\n * Quando `false`, o alerta não pode ser dispensado pelo usuário.\n *\n * @default true\n */\n @Input()\n public closable = true;\n\n /**\n * @description Emitido quando o usuário fecha o alerta clicando no botão de fechar.\n */\n @Output()\n public closed = new EventEmitter<void>();\n\n public get isOpen(): boolean {\n return this._isOpen;\n }\n\n public closeAlert(): void {\n this._isOpen = false;\n }\n\n public showAlert(): void {\n this._isOpen = true;\n }\n\n public onClose(): void {\n this.closed.emit();\n this.closeAlert();\n }\n\n private _isOpen = true;\n}\n\n","@if (isOpen) {\n<div\n class=\"alert\"\n [ngClass]=\"{\n 'alert--info': severity === 'info',\n 'alert--success': severity === 'success',\n 'alert--warning': severity === 'warning',\n 'alert--error': severity === 'error',\n }\"\n>\n <div class=\"content\">\n <div class=\"icon-container\">\n <i\n class=\"fas fa-info\"\n [ngClass]=\"{\n 'fa-info': severity === 'info',\n 'fa-check': severity === 'success',\n 'fa-exclamation-triangle': severity === 'warning',\n 'fa-times': severity === 'error',\n }\"\n ></i>\n </div>\n <div class=\"text-container\">\n <div class=\"text\">\n @if (summary) {\n <span class=\"summary\">{{ summary }}</span>\n }\n\n @if (detail) {\n <span class=\"detail\">{{ detail }}</span>\n }\n </div>\n </div>\n </div>\n @if (closable) {\n <button\n class=\"close-option\"\n (click)=\"onClose()\"\n >\n <i class=\"fas fa-times\"></i>\n </button>\n }\n</div>\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { AlertComponent } from './alert.component';\n\n@NgModule({\n imports: [CommonModule],\n declarations: [AlertComponent],\n exports: [AlertComponent],\n})\nexport class AlertModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;AAEA;;;;;;;;;;;;;;;AAeG;MAMU,cAAc,CAAA;AACvB;;;;;;;;AAQG;;IAGI,QAAQ,GAA6C,MAAM,CAAC;AAEnE;;AAEG;AAEI,IAAA,OAAO,CAAU;AAExB;;AAEG;AAEI,IAAA,MAAM,CAAU;AAEvB;;;;;AAKG;IAEI,QAAQ,GAAG,IAAI,CAAC;AAEvB;;AAEG;AAEI,IAAA,MAAM,GAAG,IAAI,YAAY,EAAQ,CAAC;AAEzC,IAAA,IAAW,MAAM,GAAA;QACb,OAAO,IAAI,CAAC,OAAO,CAAC;KACvB;IAEM,UAAU,GAAA;AACb,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;KACxB;IAEM,SAAS,GAAA;AACZ,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;KACvB;IAEM,OAAO,GAAA;AACV,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACnB,IAAI,CAAC,UAAU,EAAE,CAAC;KACrB;IAEO,OAAO,GAAG,IAAI,CAAC;wGA1Dd,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAd,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,cAAc,4KCvB3B,6vCA4CA,EAAA,MAAA,EAAA,CAAA,4+CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDrBa,cAAc,EAAA,UAAA,EAAA,CAAA;kBAL1B,SAAS;+BACI,SAAS,EAAA,QAAA,EAAA,6vCAAA,EAAA,MAAA,EAAA,CAAA,4+CAAA,CAAA,EAAA,CAAA;8BAgBZ,QAAQ,EAAA,CAAA;sBADd,KAAK;gBAOC,OAAO,EAAA,CAAA;sBADb,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;gBAOlB,MAAM,EAAA,CAAA;sBADZ,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;gBAUlB,QAAQ,EAAA,CAAA;sBADd,KAAK;gBAOC,MAAM,EAAA,CAAA;sBADZ,MAAM;;;MEnDE,WAAW,CAAA;wGAAX,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAX,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,EAHL,YAAA,EAAA,CAAA,cAAc,CADnB,EAAA,OAAA,EAAA,CAAA,YAAY,aAEZ,cAAc,CAAA,EAAA,CAAA,CAAA;AAEf,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,YAJV,YAAY,CAAA,EAAA,CAAA,CAAA;;4FAIb,WAAW,EAAA,UAAA,EAAA,CAAA;kBALvB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACN,OAAO,EAAE,CAAC,YAAY,CAAC;oBACvB,YAAY,EAAE,CAAC,cAAc,CAAC;oBAC9B,OAAO,EAAE,CAAC,cAAc,CAAC;AAC5B,iBAAA,CAAA;;;ACTD;;AAEG;;;;"}
|