@porscheinformatik/clr-addons 17.4.1 → 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.
@@ -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 value(values) {
12
- if (values === null) {
13
- values = [];
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
- this.filteredValues = this.possibleValues.filter(possibleValue => values?.includes(possibleValue.value));
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 = values.map(filtered => ({ value: filtered, displayValue: filtered }));
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(v => (v instanceof Object ? v : { value: v, displayValue: v }));
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
- return this.getDisplayValues(this.filteredValues).includes(item[this.property]);
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
@@ -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 value(values) {
6044
- if (values === null) {
6045
- values = [];
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
- this.filteredValues = this.possibleValues.filter(possibleValue => values?.includes(possibleValue.value));
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 = values.map(filtered => ({ value: filtered, displayValue: filtered }));
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(v => (v instanceof Object ? v : { value: v, displayValue: v }));
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
- return this.getDisplayValues(this.filteredValues).includes(item[this.property]);
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 {