@porscheinformatik/clr-addons 17.4.0 → 17.4.2
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/datagrid/enum-filter/enum-filter.component.d.ts +9 -2
- package/esm2022/datagrid/enum-filter/enum-filter.component.mjs +49 -12
- package/fesm2022/clr-addons.mjs +48 -11
- package/fesm2022/clr-addons.mjs.map +1 -1
- package/package.json +2 -2
- package/styles/clr-addons-phs.css +0 -4
- package/styles/clr-addons-phs.css.map +1 -1
- package/styles/clr-addons-phs.min.css +1 -1
- package/styles/clr-addons-phs.min.css.map +1 -1
|
@@ -10,19 +10,24 @@ export declare class ClrEnumFilterComponent<T extends {
|
|
|
10
10
|
[key: string]: any;
|
|
11
11
|
}> implements ClrDatagridFilterInterface<T>, OnDestroy {
|
|
12
12
|
property: string;
|
|
13
|
+
set setEmptyValuesTranslation(translatedValue: string);
|
|
13
14
|
set value(values: string[]);
|
|
15
|
+
private setFilteredValues;
|
|
16
|
+
set clrPossibleValues(values: (string | FilterValue)[]);
|
|
14
17
|
clrFilterValuesChange: EventEmitter<string[]>;
|
|
15
18
|
possibleValues: FilterValue[];
|
|
16
19
|
customPossibleValues: boolean;
|
|
17
20
|
filteredValues: FilterValue[];
|
|
21
|
+
emptyDefaultValue: string;
|
|
22
|
+
emptyValue: string;
|
|
18
23
|
changes: EventEmitter<boolean>;
|
|
19
24
|
destroyed$: Subject<void>;
|
|
20
|
-
set clrPossibleValues(values: (string | FilterValue)[]);
|
|
21
25
|
constructor(filterContainer: ClrDatagridFilter, datagrid: ClrDatagrid);
|
|
22
26
|
setPossibleValues(values: (string | FilterValue)[]): void;
|
|
23
27
|
onChange(selectedValue: FilterValue, checkboxState: boolean): void;
|
|
24
28
|
isActive(): boolean;
|
|
25
29
|
accepts(item: T): boolean;
|
|
30
|
+
private acceptEmptyValue;
|
|
26
31
|
get state(): any;
|
|
27
32
|
clearFilters(): void;
|
|
28
33
|
private emitFilterChanged;
|
|
@@ -30,7 +35,9 @@ export declare class ClrEnumFilterComponent<T extends {
|
|
|
30
35
|
protected containsFilterValue(entries: FilterValue[], filtered: FilterValue): boolean;
|
|
31
36
|
private getDisplayValues;
|
|
32
37
|
private getValues;
|
|
38
|
+
private mapValues;
|
|
39
|
+
private mapValue;
|
|
33
40
|
static ɵfac: i0.ɵɵFactoryDeclaration<ClrEnumFilterComponent<any>, never>;
|
|
34
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<ClrEnumFilterComponent<any>, "clr-enum-filter", never, { "property": { "alias": "clrProperty"; "required": false; }; "value": { "alias": "clrFilterValues"; "required": false; }; "clrPossibleValues": { "alias": "clrPossibleValues"; "required": false; }; }, { "clrFilterValuesChange": "clrFilterValuesChange"; }, never, never, false, never>;
|
|
41
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ClrEnumFilterComponent<any>, "clr-enum-filter", never, { "property": { "alias": "clrProperty"; "required": false; }; "setEmptyValuesTranslation": { "alias": "clrEmptyValuesTranslation"; "required": false; }; "value": { "alias": "clrFilterValues"; "required": false; }; "clrPossibleValues": { "alias": "clrPossibleValues"; "required": false; }; }, { "clrFilterValuesChange": "clrFilterValuesChange"; }, never, never, false, never>;
|
|
35
42
|
}
|
|
36
43
|
export {};
|
|
@@ -8,16 +8,29 @@ import * as i2 from "@angular/common";
|
|
|
8
8
|
import * as i3 from "@angular/forms";
|
|
9
9
|
ClarityIcons.addIcons(trashIcon);
|
|
10
10
|
export class ClrEnumFilterComponent {
|
|
11
|
-
set
|
|
12
|
-
if (
|
|
13
|
-
|
|
11
|
+
set setEmptyValuesTranslation(translatedValue) {
|
|
12
|
+
if (translatedValue !== this.emptyDefaultValue) {
|
|
13
|
+
this.emptyValue = translatedValue;
|
|
14
|
+
/* update values if translation set */
|
|
15
|
+
this.setFilteredValues(this.filteredValues);
|
|
16
|
+
if (this.possibleValues.length !== 0) {
|
|
17
|
+
this.setPossibleValues(this.possibleValues);
|
|
18
|
+
}
|
|
14
19
|
}
|
|
20
|
+
}
|
|
21
|
+
set value(values) {
|
|
22
|
+
this.setFilteredValues(values);
|
|
23
|
+
}
|
|
24
|
+
setFilteredValues(values) {
|
|
25
|
+
const mappedValues = this.mapValues(values);
|
|
15
26
|
if (this.possibleValues?.length) {
|
|
16
|
-
|
|
27
|
+
const mappedPossibleValues = this.possibleValues.map(v => this.mapValue(v));
|
|
28
|
+
const values = mappedValues.map(v => v.value);
|
|
29
|
+
this.filteredValues = mappedPossibleValues.filter(possibleValue => values?.includes(possibleValue.value));
|
|
17
30
|
this.clrFilterValuesChange.emit(this.getDisplayValues(this.filteredValues));
|
|
18
31
|
}
|
|
19
32
|
else {
|
|
20
|
-
this.filteredValues =
|
|
33
|
+
this.filteredValues = mappedValues;
|
|
21
34
|
}
|
|
22
35
|
this.changes.emit(true);
|
|
23
36
|
}
|
|
@@ -31,6 +44,8 @@ export class ClrEnumFilterComponent {
|
|
|
31
44
|
this.possibleValues = [];
|
|
32
45
|
this.customPossibleValues = false;
|
|
33
46
|
this.filteredValues = [];
|
|
47
|
+
this.emptyDefaultValue = '(Empty)';
|
|
48
|
+
this.emptyValue = this.emptyDefaultValue;
|
|
34
49
|
this.changes = new EventEmitter(false);
|
|
35
50
|
this.destroyed$ = new Subject();
|
|
36
51
|
filterContainer.setFilter(this);
|
|
@@ -44,7 +59,7 @@ export class ClrEnumFilterComponent {
|
|
|
44
59
|
if (values === null) {
|
|
45
60
|
values = [];
|
|
46
61
|
}
|
|
47
|
-
this.possibleValues = values.map(
|
|
62
|
+
this.possibleValues = values.map(value => this.mapValue(value));
|
|
48
63
|
this.possibleValues.sort((v1, v2) => v1.displayValue.localeCompare(v2.displayValue));
|
|
49
64
|
this.filteredValues = this.filteredValues.filter(filtered => this.containsFilterValue(this.possibleValues, filtered));
|
|
50
65
|
this.emitFilterChanged();
|
|
@@ -62,7 +77,14 @@ export class ClrEnumFilterComponent {
|
|
|
62
77
|
return this.filteredValues.length > 0;
|
|
63
78
|
}
|
|
64
79
|
accepts(item) {
|
|
65
|
-
|
|
80
|
+
const displayValues = this.getDisplayValues(this.filteredValues);
|
|
81
|
+
if (this.acceptEmptyValue(displayValues, item)) {
|
|
82
|
+
return true;
|
|
83
|
+
}
|
|
84
|
+
return displayValues.includes(item[this.property]);
|
|
85
|
+
}
|
|
86
|
+
acceptEmptyValue(displayValues, item) {
|
|
87
|
+
return displayValues.some(value => !value) && !item[this.property];
|
|
66
88
|
}
|
|
67
89
|
get state() {
|
|
68
90
|
return {
|
|
@@ -86,13 +108,25 @@ export class ClrEnumFilterComponent {
|
|
|
86
108
|
return entries.some(v => v.value === filtered.value);
|
|
87
109
|
}
|
|
88
110
|
getDisplayValues(entries) {
|
|
89
|
-
return entries.map(entry => entry.displayValue);
|
|
111
|
+
return entries.map(entry => (!entry.value ? entry.value : entry.displayValue));
|
|
90
112
|
}
|
|
91
113
|
getValues(entries) {
|
|
92
114
|
return entries.map(entry => entry.value);
|
|
93
115
|
}
|
|
116
|
+
mapValues(values) {
|
|
117
|
+
if (values === null || values.length === 0) {
|
|
118
|
+
return [];
|
|
119
|
+
}
|
|
120
|
+
return values.map(value => this.mapValue(value));
|
|
121
|
+
}
|
|
122
|
+
mapValue(value) {
|
|
123
|
+
if (value instanceof Object) {
|
|
124
|
+
return !value.value ? { value: '', displayValue: this.emptyValue } : value;
|
|
125
|
+
}
|
|
126
|
+
return value ? { value: value, displayValue: value } : { value: '', displayValue: this.emptyValue };
|
|
127
|
+
}
|
|
94
128
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: ClrEnumFilterComponent, deps: [{ token: i1.ClrDatagridFilter }, { token: i1.ClrDatagrid }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
95
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.0", type: ClrEnumFilterComponent, selector: "clr-enum-filter", inputs: { property: ["clrProperty", "property"], value: ["clrFilterValues", "value"], clrPossibleValues: "clrPossibleValues" }, outputs: { clrFilterValuesChange: "clrFilterValuesChange" }, ngImport: i0, template: "<button class=\"btn btn-sm btn-icon btn-link btn-trash\" (click)=\"clearFilters()\">\n <cds-icon shape=\"trash\"></cds-icon>\n</button>\n<clr-checkbox-container class=\"filter-selection\">\n <clr-checkbox-wrapper *ngFor=\"let possibleValue of possibleValues\">\n <input\n type=\"checkbox\"\n clrCheckbox\n value=\"{{ possibleValue.displayValue ?? possibleValue }}\"\n name=\"possibleValue\"\n [ngModel]=\"containsFilterValue(filteredValues, possibleValue)\"\n (ngModelChange)=\"onChange(possibleValue, $event)\"\n />\n <label>{{ possibleValue.displayValue ?? possibleValue }}</label>\n </clr-checkbox-wrapper>\n</clr-checkbox-container>\n", styles: [".filter-selection{margin-top:0}.btn-trash{position:absolute;top:15px;right:40px;padding:0}\n"], dependencies: [{ kind: "directive", type: i1.CdsIconCustomTag, selector: "cds-icon" }, { kind: "directive", type: i1.ClrLabel, selector: "label", inputs: ["for"] }, { kind: "directive", type: i1.ClrCheckbox, selector: "[clrCheckbox],[clrToggle]" }, { kind: "component", type: i1.ClrCheckboxContainer, selector: "clr-checkbox-container,clr-toggle-container", inputs: ["clrInline"] }, { kind: "component", type: i1.ClrCheckboxWrapper, selector: "clr-checkbox-wrapper,clr-toggle-wrapper" }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); }
|
|
129
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.0", type: ClrEnumFilterComponent, selector: "clr-enum-filter", inputs: { property: ["clrProperty", "property"], setEmptyValuesTranslation: ["clrEmptyValuesTranslation", "setEmptyValuesTranslation"], value: ["clrFilterValues", "value"], clrPossibleValues: "clrPossibleValues" }, outputs: { clrFilterValuesChange: "clrFilterValuesChange" }, ngImport: i0, template: "<button class=\"btn btn-sm btn-icon btn-link btn-trash\" (click)=\"clearFilters()\">\n <cds-icon shape=\"trash\"></cds-icon>\n</button>\n<clr-checkbox-container class=\"filter-selection\">\n <clr-checkbox-wrapper *ngFor=\"let possibleValue of possibleValues\">\n <input\n type=\"checkbox\"\n clrCheckbox\n value=\"{{ possibleValue.displayValue ?? possibleValue }}\"\n name=\"possibleValue\"\n [ngModel]=\"containsFilterValue(filteredValues, possibleValue)\"\n (ngModelChange)=\"onChange(possibleValue, $event)\"\n />\n <label>{{ possibleValue.displayValue ?? possibleValue }}</label>\n </clr-checkbox-wrapper>\n</clr-checkbox-container>\n", styles: [".filter-selection{margin-top:0}.btn-trash{position:absolute;top:15px;right:40px;padding:0}\n"], dependencies: [{ kind: "directive", type: i1.CdsIconCustomTag, selector: "cds-icon" }, { kind: "directive", type: i1.ClrLabel, selector: "label", inputs: ["for"] }, { kind: "directive", type: i1.ClrCheckbox, selector: "[clrCheckbox],[clrToggle]" }, { kind: "component", type: i1.ClrCheckboxContainer, selector: "clr-checkbox-container,clr-toggle-container", inputs: ["clrInline"] }, { kind: "component", type: i1.ClrCheckboxWrapper, selector: "clr-checkbox-wrapper,clr-toggle-wrapper" }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); }
|
|
96
130
|
}
|
|
97
131
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: ClrEnumFilterComponent, decorators: [{
|
|
98
132
|
type: Component,
|
|
@@ -100,12 +134,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImpor
|
|
|
100
134
|
}], ctorParameters: () => [{ type: i1.ClrDatagridFilter }, { type: i1.ClrDatagrid }], propDecorators: { property: [{
|
|
101
135
|
type: Input,
|
|
102
136
|
args: ['clrProperty']
|
|
137
|
+
}], setEmptyValuesTranslation: [{
|
|
138
|
+
type: Input,
|
|
139
|
+
args: ['clrEmptyValuesTranslation']
|
|
103
140
|
}], value: [{
|
|
104
141
|
type: Input,
|
|
105
142
|
args: ['clrFilterValues']
|
|
106
|
-
}], clrFilterValuesChange: [{
|
|
107
|
-
type: Output
|
|
108
143
|
}], clrPossibleValues: [{
|
|
109
144
|
type: Input
|
|
145
|
+
}], clrFilterValuesChange: [{
|
|
146
|
+
type: Output
|
|
110
147
|
}] } });
|
|
111
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW51bS1maWx0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2Nsci1hZGRvbnMvZGF0YWdyaWQvZW51bS1maWx0ZXIvZW51bS1maWx0ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vc3JjL2Nsci1hZGRvbnMvZGF0YWdyaWQvZW51bS1maWx0ZXIvZW51bS1maWx0ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFhLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRixPQUFPLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUE4QixNQUFNLGNBQWMsQ0FBQztBQUMxRixPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7OztBQUV6RCxZQUFZLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBWWpDLE1BQU0sT0FBTyxzQkFBc0I7SUFLakMsSUFDVyxLQUFLLENBQUMsTUFBZ0I7UUFDL0IsSUFBSSxNQUFNLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDcEIsTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNkLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsTUFBTSxFQUFFLENBQUM7WUFDaEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDekcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FB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QUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsT0FBc0I7UUFDN0MsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFTyxTQUFTLENBQUMsT0FBc0I7UUFDdEMsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNDLENBQUM7OEdBM0dVLHNCQUFzQjtrR0FBdEIsc0JBQXNCLG9QQ2pCbkMsMHFCQWdCQTs7MkZEQ2Esc0JBQXNCO2tCQUxsQyxTQUFTOytCQUNFLGlCQUFpQjtnSEFPTCxRQUFRO3NCQUE3QixLQUFLO3VCQUFDLGFBQWE7Z0JBR1QsS0FBSztzQkFEZixLQUFLO3VCQUFDLGlCQUFpQjtnQkFjZCxxQkFBcUI7c0JBQTlCLE1BQU07Z0JBU00saUJBQWlCO3NCQUE3QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ2xyRGF0YWdyaWQsIENsckRhdGFncmlkRmlsdGVyLCBDbHJEYXRhZ3JpZEZpbHRlckludGVyZmFjZSB9IGZyb20gJ0BjbHIvYW5ndWxhcic7XG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENsYXJpdHlJY29ucywgdHJhc2hJY29uIH0gZnJvbSAnQGNkcy9jb3JlL2ljb24nO1xuXG5DbGFyaXR5SWNvbnMuYWRkSWNvbnModHJhc2hJY29uKTtcblxuaW50ZXJmYWNlIEZpbHRlclZhbHVlIHtcbiAgdmFsdWU6IHN0cmluZztcbiAgZGlzcGxheVZhbHVlOiBzdHJpbmc7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Nsci1lbnVtLWZpbHRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9lbnVtLWZpbHRlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2VudW0tZmlsdGVyLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIENsckVudW1GaWx0ZXJDb21wb25lbnQ8VCBleHRlbmRzIHsgW2tleTogc3RyaW5nXTogYW55IH0+XG4gIGltcGxlbWVudHMgQ2xyRGF0YWdyaWRGaWx0ZXJJbnRlcmZhY2U8VD4sIE9uRGVzdHJveVxue1xuICBASW5wdXQoJ2NsclByb3BlcnR5JykgcHJvcGVydHkgPSAnJztcblxuICBASW5wdXQoJ2NsckZpbHRlclZhbHVlcycpXG4gIHB1YmxpYyBzZXQgdmFsdWUodmFsdWVzOiBzdHJpbmdbXSkge1xuICAgIGlmICh2YWx1ZXMgPT09IG51bGwpIHtcbiAgICAgIHZhbHVlcyA9IFtdO1xuICAgIH1cbiAgICBpZiAodGhpcy5wb3NzaWJsZVZhbHVlcz8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLmZpbHRlcmVkVmFsdWVzID0gdGhpcy5wb3NzaWJsZVZhbHVlcy5maWx0ZXIocG9zc2libGVWYWx1ZSA9PiB2YWx1ZXM/LmluY2x1ZGVzKHBvc3NpYmxlVmFsdWUudmFsdWUpKTtcbiAgICAgIHRoaXMuY2xyRmlsdGVyVmFsdWVzQ2hhbmdlLmVtaXQodGhpcy5nZXREaXNwbGF5VmFsdWVzKHRoaXMuZmlsdGVyZWRWYWx1ZXMpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5maWx0ZXJlZFZhbHVlcyA9IHZhbHVlcy5tYXAoZmlsdGVyZWQgPT4gKHsgdmFsdWU6IGZpbHRlcmVkLCBkaXNwbGF5VmFsdWU6IGZpbHRlcmVkIH0pKTtcbiAgICB9XG4gICAgdGhpcy5jaGFuZ2VzLmVtaXQodHJ1ZSk7XG4gIH1cblxuICBAT3V0cHV0KCkgY2xyRmlsdGVyVmFsdWVzQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmdbXT4oKTtcblxuICBwb3NzaWJsZVZhbHVlczogRmlsdGVyVmFsdWVbXSA9IFtdO1xuICBjdXN0b21Qb3NzaWJsZVZhbHVlcyA9IGZhbHNlO1xuICBmaWx0ZXJlZFZhbHVlczogRmlsdGVyVmFsdWVbXSA9IFtdO1xuICBjaGFuZ2VzID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPihmYWxzZSk7XG5cbiAgZGVzdHJveWVkJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgQElucHV0KCkgc2V0IGNsclBvc3NpYmxlVmFsdWVzKHZhbHVlczogKHN0cmluZyB8IEZpbHRlclZhbHVlKVtdKSB7XG4gICAgdGhpcy5zZXRQb3NzaWJsZVZhbHVlcyh2YWx1ZXMpO1xuICAgIHRoaXMuY3VzdG9tUG9zc2libGVWYWx1ZXMgPSB0cnVlO1xuICB9XG5cbiAgY29uc3RydWN0b3IoZmlsdGVyQ29udGFpbmVyOiBDbHJEYXRhZ3JpZEZpbHRlciwgZGF0YWdyaWQ6IENsckRhdGFncmlkKSB7XG4gICAgZmlsdGVyQ29udGFpbmVyLnNldEZpbHRlcih0aGlzKTtcbiAgICBkYXRhZ3JpZC5pdGVtcy5hbGxDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveWVkJCkpLnN1YnNjcmliZShpdGVtcyA9PiB7XG4gICAgICBpZiAoIXRoaXMuY3VzdG9tUG9zc2libGVWYWx1ZXMpIHtcbiAgICAgICAgdGhpcy5zZXRQb3NzaWJsZVZhbHVlcyhcbiAgICAgICAgICBpdGVtcy5tYXAoaXRlbSA9PiBpdGVtW3RoaXMucHJvcGVydHldKS5maWx0ZXIoKHZhbHVlLCBpbmRleCwgc2VsZikgPT4gc2VsZi5pbmRleE9mKHZhbHVlKSA9PT0gaW5kZXgpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzZXRQb3NzaWJsZVZhbHVlcyh2YWx1ZXM6IChzdHJpbmcgfCBGaWx0ZXJWYWx1ZSlbXSkge1xuICAgIGlmICh2YWx1ZXMgPT09IG51bGwpIHtcbiAgICAgIHZhbHVlcyA9IFtdO1xuICAgIH1cbiAgICB0aGlzLnBvc3NpYmxlVmFsdWVzID0gdmFsdWVzLm1hcCh2ID0+ICh2IGluc3RhbmNlb2YgT2JqZWN0ID8gdiA6IHsgdmFsdWU6IHYsIGRpc3BsYXlWYWx1ZTogdiB9KSk7XG4gICAgdGhpcy5wb3NzaWJsZVZhbHVlcy5zb3J0KCh2MSwgdjIpID0+IHYxLmRpc3BsYXlWYWx1ZS5sb2NhbGVDb21wYXJlKHYyLmRpc3BsYXlWYWx1ZSkpO1xuICAgIHRoaXMuZmlsdGVyZWRWYWx1ZXMgPSB0aGlzLmZpbHRlcmVkVmFsdWVzLmZpbHRlcihmaWx0ZXJlZCA9PlxuICAgICAgdGhpcy5jb250YWluc0ZpbHRlclZhbHVlKHRoaXMucG9zc2libGVWYWx1ZXMsIGZpbHRlcmVkKVxuICAgICk7XG5cbiAgICB0aGlzLmVtaXRGaWx0ZXJDaGFuZ2VkKCk7XG4gIH1cblxuICBvbkNoYW5nZShzZWxlY3RlZFZhbHVlOiBGaWx0ZXJWYWx1ZSwgY2hlY2tib3hTdGF0ZTogYm9vbGVhbikge1xuICAgIGlmIChjaGVja2JveFN0YXRlKSB7XG4gICAgICB0aGlzLmZpbHRlcmVkVmFsdWVzLnB1c2goc2VsZWN0ZWRWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmlsdGVyZWRWYWx1ZXMgPSB0aGlzLmZpbHRlcmVkVmFsdWVzLmZpbHRlcihmaWx0ZXJlZCA9PiBmaWx0ZXJlZC52YWx1ZSAhPT0gc2VsZWN0ZWRWYWx1ZS52YWx1ZSk7XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0RmlsdGVyQ2hhbmdlZCgpO1xuICB9XG5cbiAgaXNBY3RpdmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyZWRWYWx1ZXMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIGFjY2VwdHMoaXRlbTogVCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldERpc3BsYXlWYWx1ZXModGhpcy5maWx0ZXJlZFZhbHVlcykuaW5jbHVkZXMoaXRlbVt0aGlzLnByb3BlcnR5XSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHN0YXRlKCk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb3BlcnR5OiB0aGlzLnByb3BlcnR5LFxuICAgICAgdmFsdWU6IHRoaXMuZ2V0VmFsdWVzKHRoaXMuZmlsdGVyZWRWYWx1ZXMpLFxuICAgIH07XG4gIH1cblxuICBjbGVhckZpbHRlcnMoKSB7XG4gICAgdGhpcy5maWx0ZXJlZFZhbHVlcyA9IFtdO1xuICAgIHRoaXMuZW1pdEZpbHRlckNoYW5nZWQoKTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdEZpbHRlckNoYW5nZWQoKSB7XG4gICAgdGhpcy5jbHJGaWx0ZXJWYWx1ZXNDaGFuZ2UuZW1pdCh0aGlzLmdldERpc3BsYXlWYWx1ZXModGhpcy5maWx0ZXJlZFZhbHVlcykpO1xuICAgIHRoaXMuY2hhbmdlcy5lbWl0KHRydWUpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5kZXN0cm95ZWQkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3llZCQuY29tcGxldGUoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjb250YWluc0ZpbHRlclZhbHVlKGVudHJpZXM6IEZpbHRlclZhbHVlW10sIGZpbHRlcmVkOiBGaWx0ZXJWYWx1ZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBlbnRyaWVzLnNvbWUodiA9PiB2LnZhbHVlID09PSBmaWx0ZXJlZC52YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIGdldERpc3BsYXlWYWx1ZXMoZW50cmllczogRmlsdGVyVmFsdWVbXSk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gZW50cmllcy5tYXAoZW50cnkgPT4gZW50cnkuZGlzcGxheVZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VmFsdWVzKGVudHJpZXM6IEZpbHRlclZhbHVlW10pOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGVudHJpZXMubWFwKGVudHJ5ID0+IGVudHJ5LnZhbHVlKTtcbiAgfVxufVxuIiwiPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWxpbmsgYnRuLXRyYXNoXCIgKGNsaWNrKT1cImNsZWFyRmlsdGVycygpXCI+XG4gIDxjZHMtaWNvbiBzaGFwZT1cInRyYXNoXCI+PC9jZHMtaWNvbj5cbjwvYnV0dG9uPlxuPGNsci1jaGVja2JveC1jb250YWluZXIgY2xhc3M9XCJmaWx0ZXItc2VsZWN0aW9uXCI+XG4gIDxjbHItY2hlY2tib3gtd3JhcHBlciAqbmdGb3I9XCJsZXQgcG9zc2libGVWYWx1ZSBvZiBwb3NzaWJsZVZhbHVlc1wiPlxuICAgIDxpbnB1dFxuICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgIGNsckNoZWNrYm94XG4gICAgICB2YWx1ZT1cInt7IHBvc3NpYmxlVmFsdWUuZGlzcGxheVZhbHVlID8/IHBvc3NpYmxlVmFsdWUgfX1cIlxuICAgICAgbmFtZT1cInBvc3NpYmxlVmFsdWVcIlxuICAgICAgW25nTW9kZWxdPVwiY29udGFpbnNGaWx0ZXJWYWx1ZShmaWx0ZXJlZFZhbHVlcywgcG9zc2libGVWYWx1ZSlcIlxuICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGFuZ2UocG9zc2libGVWYWx1ZSwgJGV2ZW50KVwiXG4gICAgLz5cbiAgICA8bGFiZWw+e3sgcG9zc2libGVWYWx1ZS5kaXNwbGF5VmFsdWUgPz8gcG9zc2libGVWYWx1ZSB9fTwvbGFiZWw+XG4gIDwvY2xyLWNoZWNrYm94LXdyYXBwZXI+XG48L2Nsci1jaGVja2JveC1jb250YWluZXI+XG4iXX0=
|
|
148
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW51bS1maWx0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2Nsci1hZGRvbnMvZGF0YWdyaWQvZW51bS1maWx0ZXIvZW51bS1maWx0ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vc3JjL2Nsci1hZGRvbnMvZGF0YWdyaWQvZW51bS1maWx0ZXIvZW51bS1maWx0ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFhLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRixPQUFPLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUE4QixNQUFNLGNBQWMsQ0FBQztBQUMxRixPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7OztBQUV6RCxZQUFZLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBWWpDLE1BQU0sT0FBTyxzQkFBc0I7SUFLakMsSUFDVyx5QkFBeUIsQ0FBQyxlQUF1QjtRQUMxRCxJQUFJLGVBQWUsS0FBSyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUMvQyxJQUFJLENBQUMsVUFBVSxHQUFHLGVBQWUsQ0FBQztZQUNsQyxzQ0FBc0M7WUFDdEMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUM1QyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUNyQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQzlDLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELElBQ1csS0FBSyxDQUFDLE1BQWdCO1FB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T0wsUUFBUTtzQkFBN0IsS0FBSzt1QkFBQyxhQUFhO2dCQUdULHlCQUF5QjtzQkFEbkMsS0FBSzt1QkFBQywyQkFBMkI7Z0JBYXZCLEtBQUs7c0JBRGYsS0FBSzt1QkFBQyxpQkFBaUI7Z0JBbUJYLGlCQUFpQjtzQkFBN0IsS0FBSztnQkFLSSxxQkFBcUI7c0JBQTlCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDbHJEYXRhZ3JpZCwgQ2xyRGF0YWdyaWRGaWx0ZXIsIENsckRhdGFncmlkRmlsdGVySW50ZXJmYWNlIH0gZnJvbSAnQGNsci9hbmd1bGFyJztcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ2xhcml0eUljb25zLCB0cmFzaEljb24gfSBmcm9tICdAY2RzL2NvcmUvaWNvbic7XG5cbkNsYXJpdHlJY29ucy5hZGRJY29ucyh0cmFzaEljb24pO1xuXG5pbnRlcmZhY2UgRmlsdGVyVmFsdWUge1xuICB2YWx1ZTogc3RyaW5nO1xuICBkaXNwbGF5VmFsdWU6IHN0cmluZztcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY2xyLWVudW0tZmlsdGVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2VudW0tZmlsdGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZW51bS1maWx0ZXIuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgQ2xyRW51bUZpbHRlckNvbXBvbmVudDxUIGV4dGVuZHMgeyBba2V5OiBzdHJpbmddOiBhbnkgfT5cbiAgaW1wbGVtZW50cyBDbHJEYXRhZ3JpZEZpbHRlckludGVyZmFjZTxUPiwgT25EZXN0cm95XG57XG4gIEBJbnB1dCgnY2xyUHJvcGVydHknKSBwcm9wZXJ0eSA9ICcnO1xuXG4gIEBJbnB1dCgnY2xyRW1wdHlWYWx1ZXNUcmFuc2xhdGlvbicpXG4gIHB1YmxpYyBzZXQgc2V0RW1wdHlWYWx1ZXNUcmFuc2xhdGlvbih0cmFuc2xhdGVkVmFsdWU6IHN0cmluZykge1xuICAgIGlmICh0cmFuc2xhdGVkVmFsdWUgIT09IHRoaXMuZW1wdHlEZWZhdWx0VmFsdWUpIHtcbiAgICAgIHRoaXMuZW1wdHlWYWx1ZSA9IHRyYW5zbGF0ZWRWYWx1ZTtcbiAgICAgIC8qIHVwZGF0ZSB2YWx1ZXMgaWYgdHJhbnNsYXRpb24gc2V0ICovXG4gICAgICB0aGlzLnNldEZpbHRlcmVkVmFsdWVzKHRoaXMuZmlsdGVyZWRWYWx1ZXMpO1xuICAgICAgaWYgKHRoaXMucG9zc2libGVWYWx1ZXMubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIHRoaXMuc2V0UG9zc2libGVWYWx1ZXModGhpcy5wb3NzaWJsZVZhbHVlcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQElucHV0KCdjbHJGaWx0ZXJWYWx1ZXMnKVxuICBwdWJsaWMgc2V0IHZhbHVlKHZhbHVlczogc3RyaW5nW10pIHtcbiAgICB0aGlzLnNldEZpbHRlcmVkVmFsdWVzKHZhbHVlcyk7XG4gIH1cblxuICBwcml2YXRlIHNldEZpbHRlcmVkVmFsdWVzKHZhbHVlczogKHN0cmluZyB8IEZpbHRlclZhbHVlKVtdKTogdm9pZCB7XG4gICAgY29uc3QgbWFwcGVkVmFsdWVzID0gdGhpcy5tYXBWYWx1ZXModmFsdWVzKTtcbiAgICBpZiAodGhpcy5wb3NzaWJsZVZhbHVlcz8ubGVuZ3RoKSB7XG4gICAgICBjb25zdCBtYXBwZWRQb3NzaWJsZVZhbHVlcyA9IHRoaXMucG9zc2libGVWYWx1ZXMubWFwKHYgPT4gdGhpcy5tYXBWYWx1ZSh2KSk7XG4gICAgICBjb25zdCB2YWx1ZXMgPSBtYXBwZWRWYWx1ZXMubWFwKHYgPT4gdi52YWx1ZSk7XG4gICAgICB0aGlzLmZpbHRlcmVkVmFsdWVzID0gbWFwcGVkUG9zc2libGVWYWx1ZXMuZmlsdGVyKHBvc3NpYmxlVmFsdWUgPT4gdmFsdWVzPy5pbmNsdWRlcyhwb3NzaWJsZVZhbHVlLnZhbHVlKSk7XG4gICAgICB0aGlzLmNsckZpbHRlclZhbHVlc0NoYW5nZS5lbWl0KHRoaXMuZ2V0RGlzcGxheVZhbHVlcyh0aGlzLmZpbHRlcmVkVmFsdWVzKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmlsdGVyZWRWYWx1ZXMgPSBtYXBwZWRWYWx1ZXM7XG4gICAgfVxuXG4gICAgdGhpcy5jaGFuZ2VzLmVtaXQodHJ1ZSk7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgY2xyUG9zc2libGVWYWx1ZXModmFsdWVzOiAoc3RyaW5nIHwgRmlsdGVyVmFsdWUpW10pIHtcbiAgICB0aGlzLnNldFBvc3NpYmxlVmFsdWVzKHZhbHVlcyk7XG4gICAgdGhpcy5jdXN0b21Qb3NzaWJsZVZhbHVlcyA9IHRydWU7XG4gIH1cblxuICBAT3V0cHV0KCkgY2xyRmlsdGVyVmFsdWVzQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmdbXT4oKTtcblxuICBwb3NzaWJsZVZhbHVlczogRmlsdGVyVmFsdWVbXSA9IFtdO1xuICBjdXN0b21Qb3NzaWJsZVZhbHVlcyA9IGZhbHNlO1xuICBmaWx0ZXJlZFZhbHVlczogRmlsdGVyVmFsdWVbXSA9IFtdO1xuICBlbXB0eURlZmF1bHRWYWx1ZTogc3RyaW5nID0gJyhFbXB0eSknO1xuICBlbXB0eVZhbHVlOiBzdHJpbmcgPSB0aGlzLmVtcHR5RGVmYXVsdFZhbHVlO1xuICBjaGFuZ2VzID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPihmYWxzZSk7XG5cbiAgZGVzdHJveWVkJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IoZmlsdGVyQ29udGFpbmVyOiBDbHJEYXRhZ3JpZEZpbHRlciwgZGF0YWdyaWQ6IENsckRhdGFncmlkKSB7XG4gICAgZmlsdGVyQ29udGFpbmVyLnNldEZpbHRlcih0aGlzKTtcbiAgICBkYXRhZ3JpZC5pdGVtcy5hbGxDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveWVkJCkpLnN1YnNjcmliZShpdGVtcyA9PiB7XG4gICAgICBpZiAoIXRoaXMuY3VzdG9tUG9zc2libGVWYWx1ZXMpIHtcbiAgICAgICAgdGhpcy5zZXRQb3NzaWJsZVZhbHVlcyhcbiAgICAgICAgICBpdGVtcy5tYXAoaXRlbSA9PiBpdGVtW3RoaXMucHJvcGVydHldKS5maWx0ZXIoKHZhbHVlLCBpbmRleCwgc2VsZikgPT4gc2VsZi5pbmRleE9mKHZhbHVlKSA9PT0gaW5kZXgpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzZXRQb3NzaWJsZVZhbHVlcyh2YWx1ZXM6IChzdHJpbmcgfCBGaWx0ZXJWYWx1ZSlbXSkge1xuICAgIGlmICh2YWx1ZXMgPT09IG51bGwpIHtcbiAgICAgIHZhbHVlcyA9IFtdO1xuICAgIH1cbiAgICB0aGlzLnBvc3NpYmxlVmFsdWVzID0gdmFsdWVzLm1hcCh2YWx1ZSA9PiB0aGlzLm1hcFZhbHVlKHZhbHVlKSk7XG4gICAgdGhpcy5wb3NzaWJsZVZhbHVlcy5zb3J0KCh2MSwgdjIpID0+IHYxLmRpc3BsYXlWYWx1ZS5sb2NhbGVDb21wYXJlKHYyLmRpc3BsYXlWYWx1ZSkpO1xuICAgIHRoaXMuZmlsdGVyZWRWYWx1ZXMgPSB0aGlzLmZpbHRlcmVkVmFsdWVzLmZpbHRlcihmaWx0ZXJlZCA9PlxuICAgICAgdGhpcy5jb250YWluc0ZpbHRlclZhbHVlKHRoaXMucG9zc2libGVWYWx1ZXMsIGZpbHRlcmVkKVxuICAgICk7XG5cbiAgICB0aGlzLmVtaXRGaWx0ZXJDaGFuZ2VkKCk7XG4gIH1cblxuICBvbkNoYW5nZShzZWxlY3RlZFZhbHVlOiBGaWx0ZXJWYWx1ZSwgY2hlY2tib3hTdGF0ZTogYm9vbGVhbikge1xuICAgIGlmIChjaGVja2JveFN0YXRlKSB7XG4gICAgICB0aGlzLmZpbHRlcmVkVmFsdWVzLnB1c2goc2VsZWN0ZWRWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmlsdGVyZWRWYWx1ZXMgPSB0aGlzLmZpbHRlcmVkVmFsdWVzLmZpbHRlcihmaWx0ZXJlZCA9PiBmaWx0ZXJlZC52YWx1ZSAhPT0gc2VsZWN0ZWRWYWx1ZS52YWx1ZSk7XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0RmlsdGVyQ2hhbmdlZCgpO1xuICB9XG5cbiAgaXNBY3RpdmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyZWRWYWx1ZXMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIGFjY2VwdHMoaXRlbTogVCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGRpc3BsYXlWYWx1ZXMgPSB0aGlzLmdldERpc3BsYXlWYWx1ZXModGhpcy5maWx0ZXJlZFZhbHVlcyk7XG4gICAgaWYgKHRoaXMuYWNjZXB0RW1wdHlWYWx1ZShkaXNwbGF5VmFsdWVzLCBpdGVtKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBkaXNwbGF5VmFsdWVzLmluY2x1ZGVzKGl0ZW1bdGhpcy5wcm9wZXJ0eV0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhY2NlcHRFbXB0eVZhbHVlKGRpc3BsYXlWYWx1ZXM6IHN0cmluZ1tdLCBpdGVtOiBUKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGRpc3BsYXlWYWx1ZXMuc29tZSh2YWx1ZSA9PiAhdmFsdWUpICYmICFpdGVtW3RoaXMucHJvcGVydHldO1xuICB9XG5cbiAgcHVibGljIGdldCBzdGF0ZSgpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICBwcm9wZXJ0eTogdGhpcy5wcm9wZXJ0eSxcbiAgICAgIHZhbHVlOiB0aGlzLmdldFZhbHVlcyh0aGlzLmZpbHRlcmVkVmFsdWVzKSxcbiAgICB9O1xuICB9XG5cbiAgY2xlYXJGaWx0ZXJzKCkge1xuICAgIHRoaXMuZmlsdGVyZWRWYWx1ZXMgPSBbXTtcbiAgICB0aGlzLmVtaXRGaWx0ZXJDaGFuZ2VkKCk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRGaWx0ZXJDaGFuZ2VkKCkge1xuICAgIHRoaXMuY2xyRmlsdGVyVmFsdWVzQ2hhbmdlLmVtaXQodGhpcy5nZXREaXNwbGF5VmFsdWVzKHRoaXMuZmlsdGVyZWRWYWx1ZXMpKTtcbiAgICB0aGlzLmNoYW5nZXMuZW1pdCh0cnVlKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuZGVzdHJveWVkJC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95ZWQkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY29udGFpbnNGaWx0ZXJWYWx1ZShlbnRyaWVzOiBGaWx0ZXJWYWx1ZVtdLCBmaWx0ZXJlZDogRmlsdGVyVmFsdWUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZW50cmllcy5zb21lKHYgPT4gdi52YWx1ZSA9PT0gZmlsdGVyZWQudmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREaXNwbGF5VmFsdWVzKGVudHJpZXM6IEZpbHRlclZhbHVlW10pOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGVudHJpZXMubWFwKGVudHJ5ID0+ICghZW50cnkudmFsdWUgPyBlbnRyeS52YWx1ZSA6IGVudHJ5LmRpc3BsYXlWYWx1ZSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRWYWx1ZXMoZW50cmllczogRmlsdGVyVmFsdWVbXSk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gZW50cmllcy5tYXAoZW50cnkgPT4gZW50cnkudmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXBWYWx1ZXModmFsdWVzOiAoc3RyaW5nIHwgRmlsdGVyVmFsdWUpW10pOiBGaWx0ZXJWYWx1ZVtdIHtcbiAgICBpZiAodmFsdWVzID09PSBudWxsIHx8IHZhbHVlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlcy5tYXAodmFsdWUgPT4gdGhpcy5tYXBWYWx1ZSh2YWx1ZSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXBWYWx1ZSh2YWx1ZTogc3RyaW5nIHwgRmlsdGVyVmFsdWUpOiBGaWx0ZXJWYWx1ZSB7XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICByZXR1cm4gIXZhbHVlLnZhbHVlID8geyB2YWx1ZTogJycsIGRpc3BsYXlWYWx1ZTogdGhpcy5lbXB0eVZhbHVlIH0gOiB2YWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWUgPyB7IHZhbHVlOiB2YWx1ZSwgZGlzcGxheVZhbHVlOiB2YWx1ZSB9IDogeyB2YWx1ZTogJycsIGRpc3BsYXlWYWx1ZTogdGhpcy5lbXB0eVZhbHVlIH07XG4gIH1cbn1cbiIsIjxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1pY29uIGJ0bi1saW5rIGJ0bi10cmFzaFwiIChjbGljayk9XCJjbGVhckZpbHRlcnMoKVwiPlxuICA8Y2RzLWljb24gc2hhcGU9XCJ0cmFzaFwiPjwvY2RzLWljb24+XG48L2J1dHRvbj5cbjxjbHItY2hlY2tib3gtY29udGFpbmVyIGNsYXNzPVwiZmlsdGVyLXNlbGVjdGlvblwiPlxuICA8Y2xyLWNoZWNrYm94LXdyYXBwZXIgKm5nRm9yPVwibGV0IHBvc3NpYmxlVmFsdWUgb2YgcG9zc2libGVWYWx1ZXNcIj5cbiAgICA8aW5wdXRcbiAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICBjbHJDaGVja2JveFxuICAgICAgdmFsdWU9XCJ7eyBwb3NzaWJsZVZhbHVlLmRpc3BsYXlWYWx1ZSA/PyBwb3NzaWJsZVZhbHVlIH19XCJcbiAgICAgIG5hbWU9XCJwb3NzaWJsZVZhbHVlXCJcbiAgICAgIFtuZ01vZGVsXT1cImNvbnRhaW5zRmlsdGVyVmFsdWUoZmlsdGVyZWRWYWx1ZXMsIHBvc3NpYmxlVmFsdWUpXCJcbiAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlKHBvc3NpYmxlVmFsdWUsICRldmVudClcIlxuICAgIC8+XG4gICAgPGxhYmVsPnt7IHBvc3NpYmxlVmFsdWUuZGlzcGxheVZhbHVlID8/IHBvc3NpYmxlVmFsdWUgfX08L2xhYmVsPlxuICA8L2Nsci1jaGVja2JveC13cmFwcGVyPlxuPC9jbHItY2hlY2tib3gtY29udGFpbmVyPlxuIl19
|
package/fesm2022/clr-addons.mjs
CHANGED
|
@@ -6040,16 +6040,29 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImpor
|
|
|
6040
6040
|
|
|
6041
6041
|
ClarityIcons.addIcons(trashIcon);
|
|
6042
6042
|
class ClrEnumFilterComponent {
|
|
6043
|
-
set
|
|
6044
|
-
if (
|
|
6045
|
-
|
|
6043
|
+
set setEmptyValuesTranslation(translatedValue) {
|
|
6044
|
+
if (translatedValue !== this.emptyDefaultValue) {
|
|
6045
|
+
this.emptyValue = translatedValue;
|
|
6046
|
+
/* update values if translation set */
|
|
6047
|
+
this.setFilteredValues(this.filteredValues);
|
|
6048
|
+
if (this.possibleValues.length !== 0) {
|
|
6049
|
+
this.setPossibleValues(this.possibleValues);
|
|
6050
|
+
}
|
|
6046
6051
|
}
|
|
6052
|
+
}
|
|
6053
|
+
set value(values) {
|
|
6054
|
+
this.setFilteredValues(values);
|
|
6055
|
+
}
|
|
6056
|
+
setFilteredValues(values) {
|
|
6057
|
+
const mappedValues = this.mapValues(values);
|
|
6047
6058
|
if (this.possibleValues?.length) {
|
|
6048
|
-
|
|
6059
|
+
const mappedPossibleValues = this.possibleValues.map(v => this.mapValue(v));
|
|
6060
|
+
const values = mappedValues.map(v => v.value);
|
|
6061
|
+
this.filteredValues = mappedPossibleValues.filter(possibleValue => values?.includes(possibleValue.value));
|
|
6049
6062
|
this.clrFilterValuesChange.emit(this.getDisplayValues(this.filteredValues));
|
|
6050
6063
|
}
|
|
6051
6064
|
else {
|
|
6052
|
-
this.filteredValues =
|
|
6065
|
+
this.filteredValues = mappedValues;
|
|
6053
6066
|
}
|
|
6054
6067
|
this.changes.emit(true);
|
|
6055
6068
|
}
|
|
@@ -6063,6 +6076,8 @@ class ClrEnumFilterComponent {
|
|
|
6063
6076
|
this.possibleValues = [];
|
|
6064
6077
|
this.customPossibleValues = false;
|
|
6065
6078
|
this.filteredValues = [];
|
|
6079
|
+
this.emptyDefaultValue = '(Empty)';
|
|
6080
|
+
this.emptyValue = this.emptyDefaultValue;
|
|
6066
6081
|
this.changes = new EventEmitter(false);
|
|
6067
6082
|
this.destroyed$ = new Subject();
|
|
6068
6083
|
filterContainer.setFilter(this);
|
|
@@ -6076,7 +6091,7 @@ class ClrEnumFilterComponent {
|
|
|
6076
6091
|
if (values === null) {
|
|
6077
6092
|
values = [];
|
|
6078
6093
|
}
|
|
6079
|
-
this.possibleValues = values.map(
|
|
6094
|
+
this.possibleValues = values.map(value => this.mapValue(value));
|
|
6080
6095
|
this.possibleValues.sort((v1, v2) => v1.displayValue.localeCompare(v2.displayValue));
|
|
6081
6096
|
this.filteredValues = this.filteredValues.filter(filtered => this.containsFilterValue(this.possibleValues, filtered));
|
|
6082
6097
|
this.emitFilterChanged();
|
|
@@ -6094,7 +6109,14 @@ class ClrEnumFilterComponent {
|
|
|
6094
6109
|
return this.filteredValues.length > 0;
|
|
6095
6110
|
}
|
|
6096
6111
|
accepts(item) {
|
|
6097
|
-
|
|
6112
|
+
const displayValues = this.getDisplayValues(this.filteredValues);
|
|
6113
|
+
if (this.acceptEmptyValue(displayValues, item)) {
|
|
6114
|
+
return true;
|
|
6115
|
+
}
|
|
6116
|
+
return displayValues.includes(item[this.property]);
|
|
6117
|
+
}
|
|
6118
|
+
acceptEmptyValue(displayValues, item) {
|
|
6119
|
+
return displayValues.some(value => !value) && !item[this.property];
|
|
6098
6120
|
}
|
|
6099
6121
|
get state() {
|
|
6100
6122
|
return {
|
|
@@ -6118,13 +6140,25 @@ class ClrEnumFilterComponent {
|
|
|
6118
6140
|
return entries.some(v => v.value === filtered.value);
|
|
6119
6141
|
}
|
|
6120
6142
|
getDisplayValues(entries) {
|
|
6121
|
-
return entries.map(entry => entry.displayValue);
|
|
6143
|
+
return entries.map(entry => (!entry.value ? entry.value : entry.displayValue));
|
|
6122
6144
|
}
|
|
6123
6145
|
getValues(entries) {
|
|
6124
6146
|
return entries.map(entry => entry.value);
|
|
6125
6147
|
}
|
|
6148
|
+
mapValues(values) {
|
|
6149
|
+
if (values === null || values.length === 0) {
|
|
6150
|
+
return [];
|
|
6151
|
+
}
|
|
6152
|
+
return values.map(value => this.mapValue(value));
|
|
6153
|
+
}
|
|
6154
|
+
mapValue(value) {
|
|
6155
|
+
if (value instanceof Object) {
|
|
6156
|
+
return !value.value ? { value: '', displayValue: this.emptyValue } : value;
|
|
6157
|
+
}
|
|
6158
|
+
return value ? { value: value, displayValue: value } : { value: '', displayValue: this.emptyValue };
|
|
6159
|
+
}
|
|
6126
6160
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: ClrEnumFilterComponent, deps: [{ token: i1$1.ClrDatagridFilter }, { token: i1$1.ClrDatagrid }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
6127
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.0", type: ClrEnumFilterComponent, selector: "clr-enum-filter", inputs: { property: ["clrProperty", "property"], value: ["clrFilterValues", "value"], clrPossibleValues: "clrPossibleValues" }, outputs: { clrFilterValuesChange: "clrFilterValuesChange" }, ngImport: i0, template: "<button class=\"btn btn-sm btn-icon btn-link btn-trash\" (click)=\"clearFilters()\">\n <cds-icon shape=\"trash\"></cds-icon>\n</button>\n<clr-checkbox-container class=\"filter-selection\">\n <clr-checkbox-wrapper *ngFor=\"let possibleValue of possibleValues\">\n <input\n type=\"checkbox\"\n clrCheckbox\n value=\"{{ possibleValue.displayValue ?? possibleValue }}\"\n name=\"possibleValue\"\n [ngModel]=\"containsFilterValue(filteredValues, possibleValue)\"\n (ngModelChange)=\"onChange(possibleValue, $event)\"\n />\n <label>{{ possibleValue.displayValue ?? possibleValue }}</label>\n </clr-checkbox-wrapper>\n</clr-checkbox-container>\n", styles: [".filter-selection{margin-top:0}.btn-trash{position:absolute;top:15px;right:40px;padding:0}\n"], dependencies: [{ kind: "directive", type: i1$1.CdsIconCustomTag, selector: "cds-icon" }, { kind: "directive", type: i1$1.ClrLabel, selector: "label", inputs: ["for"] }, { kind: "directive", type: i1$1.ClrCheckbox, selector: "[clrCheckbox],[clrToggle]" }, { kind: "component", type: i1$1.ClrCheckboxContainer, selector: "clr-checkbox-container,clr-toggle-container", inputs: ["clrInline"] }, { kind: "component", type: i1$1.ClrCheckboxWrapper, selector: "clr-checkbox-wrapper,clr-toggle-wrapper" }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3$1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i3$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); }
|
|
6161
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.0", type: ClrEnumFilterComponent, selector: "clr-enum-filter", inputs: { property: ["clrProperty", "property"], setEmptyValuesTranslation: ["clrEmptyValuesTranslation", "setEmptyValuesTranslation"], value: ["clrFilterValues", "value"], clrPossibleValues: "clrPossibleValues" }, outputs: { clrFilterValuesChange: "clrFilterValuesChange" }, ngImport: i0, template: "<button class=\"btn btn-sm btn-icon btn-link btn-trash\" (click)=\"clearFilters()\">\n <cds-icon shape=\"trash\"></cds-icon>\n</button>\n<clr-checkbox-container class=\"filter-selection\">\n <clr-checkbox-wrapper *ngFor=\"let possibleValue of possibleValues\">\n <input\n type=\"checkbox\"\n clrCheckbox\n value=\"{{ possibleValue.displayValue ?? possibleValue }}\"\n name=\"possibleValue\"\n [ngModel]=\"containsFilterValue(filteredValues, possibleValue)\"\n (ngModelChange)=\"onChange(possibleValue, $event)\"\n />\n <label>{{ possibleValue.displayValue ?? possibleValue }}</label>\n </clr-checkbox-wrapper>\n</clr-checkbox-container>\n", styles: [".filter-selection{margin-top:0}.btn-trash{position:absolute;top:15px;right:40px;padding:0}\n"], dependencies: [{ kind: "directive", type: i1$1.CdsIconCustomTag, selector: "cds-icon" }, { kind: "directive", type: i1$1.ClrLabel, selector: "label", inputs: ["for"] }, { kind: "directive", type: i1$1.ClrCheckbox, selector: "[clrCheckbox],[clrToggle]" }, { kind: "component", type: i1$1.ClrCheckboxContainer, selector: "clr-checkbox-container,clr-toggle-container", inputs: ["clrInline"] }, { kind: "component", type: i1$1.ClrCheckboxWrapper, selector: "clr-checkbox-wrapper,clr-toggle-wrapper" }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3$1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i3$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); }
|
|
6128
6162
|
}
|
|
6129
6163
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: ClrEnumFilterComponent, decorators: [{
|
|
6130
6164
|
type: Component,
|
|
@@ -6132,13 +6166,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImpor
|
|
|
6132
6166
|
}], ctorParameters: () => [{ type: i1$1.ClrDatagridFilter }, { type: i1$1.ClrDatagrid }], propDecorators: { property: [{
|
|
6133
6167
|
type: Input,
|
|
6134
6168
|
args: ['clrProperty']
|
|
6169
|
+
}], setEmptyValuesTranslation: [{
|
|
6170
|
+
type: Input,
|
|
6171
|
+
args: ['clrEmptyValuesTranslation']
|
|
6135
6172
|
}], value: [{
|
|
6136
6173
|
type: Input,
|
|
6137
6174
|
args: ['clrFilterValues']
|
|
6138
|
-
}], clrFilterValuesChange: [{
|
|
6139
|
-
type: Output
|
|
6140
6175
|
}], clrPossibleValues: [{
|
|
6141
6176
|
type: Input
|
|
6177
|
+
}], clrFilterValuesChange: [{
|
|
6178
|
+
type: Output
|
|
6142
6179
|
}] } });
|
|
6143
6180
|
|
|
6144
6181
|
class ClrEnumFilterModule {
|