@progress/kendo-angular-filter 2.2.3-dev.202210120943 → 2.3.0-dev.202210180721

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.
Files changed (33) hide show
  1. package/aria-label.directive.d.ts +1 -1
  2. package/base-filter-row.component.d.ts +28 -0
  3. package/bundles/kendo-angular-filter.umd.js +1 -1
  4. package/editors/boolean-editor.component.d.ts +1 -0
  5. package/editors/date-editor.component.d.ts +1 -0
  6. package/editors/numeric-editor.component.d.ts +1 -0
  7. package/editors/text-editor.component.d.ts +1 -0
  8. package/error-messages.d.ts +8 -0
  9. package/esm2015/aria-label.directive.js +2 -2
  10. package/esm2015/base-filter-row.component.js +69 -0
  11. package/esm2015/editors/boolean-editor.component.js +10 -4
  12. package/esm2015/editors/date-editor.component.js +10 -4
  13. package/esm2015/editors/numeric-editor.component.js +10 -4
  14. package/esm2015/editors/text-editor.component.js +10 -4
  15. package/esm2015/error-messages.js +16 -0
  16. package/esm2015/filter-expression-operators.component.js +2 -0
  17. package/esm2015/filter-expression.component.js +60 -47
  18. package/esm2015/filter-group.component.js +76 -38
  19. package/esm2015/filter.component.js +107 -32
  20. package/esm2015/filter.module.js +2 -1
  21. package/esm2015/localization/messages.js +3 -3
  22. package/esm2015/navigation.service.js +159 -0
  23. package/esm2015/package-metadata.js +1 -1
  24. package/esm2015/util.js +33 -0
  25. package/fesm2015/kendo-angular-filter.js +523 -122
  26. package/filter-expression.component.d.ts +7 -10
  27. package/filter-group.component.d.ts +11 -10
  28. package/filter.component.d.ts +24 -4
  29. package/localization/messages.d.ts +3 -3
  30. package/model/filter-expression.d.ts +1 -1
  31. package/navigation.service.d.ts +40 -0
  32. package/package.json +1 -1
  33. package/util.d.ts +12 -0
@@ -42,13 +42,18 @@ export class FilterBooleanEditorComponent {
42
42
  messageFor(key) {
43
43
  return this.localization.get(key);
44
44
  }
45
+ onValueChange(value) {
46
+ this.currentItem.value = value;
47
+ this.valueChange.emit();
48
+ }
45
49
  }
46
50
  FilterBooleanEditorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FilterBooleanEditorComponent, deps: [{ token: i1.LocalizationService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
47
51
  FilterBooleanEditorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: FilterBooleanEditorComponent, selector: "kendo-filter-boolean-editor", inputs: { currentItem: "currentItem" }, outputs: { valueChange: "valueChange" }, ngImport: i0, template: `
48
52
  <kendo-dropdownlist
53
+ [tabindex]="-1"
49
54
  [kendoAriaLabelValue]="messageFor('filterValueAriaLabel')"
50
- [(value)]="currentItem.value"
51
- (valueChange)="valueChange.emit()"
55
+ [value]="currentItem.value"
56
+ (valueChange)="onValueChange($event)"
52
57
  [data]="items"
53
58
  [defaultItem]="defaultItem"
54
59
  [valuePrimitive]="true"
@@ -63,9 +68,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
63
68
  selector: 'kendo-filter-boolean-editor',
64
69
  template: `
65
70
  <kendo-dropdownlist
71
+ [tabindex]="-1"
66
72
  [kendoAriaLabelValue]="messageFor('filterValueAriaLabel')"
67
- [(value)]="currentItem.value"
68
- (valueChange)="valueChange.emit()"
73
+ [value]="currentItem.value"
74
+ (valueChange)="onValueChange($event)"
69
75
  [data]="items"
70
76
  [defaultItem]="defaultItem"
71
77
  [valuePrimitive]="true"
@@ -18,13 +18,18 @@ export class FilterDateEditorComponent {
18
18
  messageFor(key) {
19
19
  return this.localization.get(key);
20
20
  }
21
+ onValueChange(value) {
22
+ this.currentItem.value = value;
23
+ this.valueChange.emit();
24
+ }
21
25
  }
22
26
  FilterDateEditorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FilterDateEditorComponent, deps: [{ token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });
23
27
  FilterDateEditorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: FilterDateEditorComponent, selector: "kendo-filter-date-editor", inputs: { currentItem: "currentItem", isDisabled: "isDisabled", format: "format" }, outputs: { valueChange: "valueChange" }, ngImport: i0, template: `
24
28
  <kendo-datepicker
29
+ [tabindex]="-1"
25
30
  [kendoAriaLabelValue]="messageFor('filterValueAriaLabel')"
26
- [(value)]="currentItem.value"
27
- (valueChange)="valueChange.emit()"
31
+ [value]="currentItem.value"
32
+ (valueChange)="onValueChange($event)"
28
33
  [disabled]="isDisabled"
29
34
  [format]="format">
30
35
  <kendo-datepicker-messages
@@ -39,9 +44,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
39
44
  selector: 'kendo-filter-date-editor',
40
45
  template: `
41
46
  <kendo-datepicker
47
+ [tabindex]="-1"
42
48
  [kendoAriaLabelValue]="messageFor('filterValueAriaLabel')"
43
- [(value)]="currentItem.value"
44
- (valueChange)="valueChange.emit()"
49
+ [value]="currentItem.value"
50
+ (valueChange)="onValueChange($event)"
45
51
  [disabled]="isDisabled"
46
52
  [format]="format">
47
53
  <kendo-datepicker-messages
@@ -18,13 +18,18 @@ export class FilterNumericEditorComponent {
18
18
  messageFor(key) {
19
19
  return this.localization.get(key);
20
20
  }
21
+ onValueChange(value) {
22
+ this.currentItem.value = value;
23
+ this.valueChange.emit();
24
+ }
21
25
  }
22
26
  FilterNumericEditorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FilterNumericEditorComponent, deps: [{ token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });
23
27
  FilterNumericEditorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: FilterNumericEditorComponent, selector: "kendo-filter-numeric-editor", inputs: { currentItem: "currentItem", isDisabled: "isDisabled", format: "format" }, outputs: { valueChange: "valueChange" }, ngImport: i0, template: `
24
28
  <kendo-numerictextbox
29
+ [tabindex]="-1"
25
30
  [kendoAriaLabelValue]="messageFor('filterValueAriaLabel')"
26
- [(value)]="currentItem.value"
27
- (valueChange)="valueChange.emit()"
31
+ [value]="currentItem.value"
32
+ (valueChange)="onValueChange($event)"
28
33
  [disabled]="isDisabled"
29
34
  [format]="format">
30
35
  <kendo-numerictextbox-messages
@@ -39,9 +44,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
39
44
  selector: 'kendo-filter-numeric-editor',
40
45
  template: `
41
46
  <kendo-numerictextbox
47
+ [tabindex]="-1"
42
48
  [kendoAriaLabelValue]="messageFor('filterValueAriaLabel')"
43
- [(value)]="currentItem.value"
44
- (valueChange)="valueChange.emit()"
49
+ [value]="currentItem.value"
50
+ (valueChange)="onValueChange($event)"
45
51
  [disabled]="isDisabled"
46
52
  [format]="format">
47
53
  <kendo-numerictextbox-messages
@@ -18,13 +18,18 @@ export class FilterTextEditorComponent {
18
18
  messageFor(key) {
19
19
  return this.localization.get(key);
20
20
  }
21
+ onValueChange(value) {
22
+ this.currentItem.value = value;
23
+ this.valueChange.emit();
24
+ }
21
25
  }
22
26
  FilterTextEditorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FilterTextEditorComponent, deps: [{ token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });
23
27
  FilterTextEditorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: FilterTextEditorComponent, selector: "kendo-filter-text-editor", inputs: { currentItem: "currentItem", isDisabled: "isDisabled" }, outputs: { valueChange: "valueChange" }, ngImport: i0, template: `
24
28
  <kendo-textbox
29
+ [tabindex]="-1"
25
30
  [kendoAriaLabelValue]="messageFor('filterValueAriaLabel')"
26
- [(value)]="currentItem.value"
27
- (valueChange)="valueChange.emit()"
31
+ [value]="currentItem.value"
32
+ (valueChange)="onValueChange($event)"
28
33
  [disabled]="isDisabled">
29
34
  </kendo-textbox>
30
35
  `, isInline: true, components: [{ type: i2.TextBoxComponent, selector: "kendo-textbox", inputs: ["focusableId", "title", "disabled", "readonly", "tabindex", "value", "selectOnFocus", "showSuccessIcon", "showErrorIcon", "clearButton", "successIcon", "errorIcon", "clearButtonIcon", "size", "rounded", "fillMode", "tabIndex", "placeholder", "maxlength"], outputs: ["valueChange", "inputFocus", "inputBlur", "focus", "blur"], exportAs: ["kendoTextBox"] }], directives: [{ type: i3.AriaLabelValueDirective, selector: "[kendoAriaLabelValue]", inputs: ["kendoAriaLabelValue"] }] });
@@ -34,9 +39,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
34
39
  selector: 'kendo-filter-text-editor',
35
40
  template: `
36
41
  <kendo-textbox
42
+ [tabindex]="-1"
37
43
  [kendoAriaLabelValue]="messageFor('filterValueAriaLabel')"
38
- [(value)]="currentItem.value"
39
- (valueChange)="valueChange.emit()"
44
+ [value]="currentItem.value"
45
+ (valueChange)="onValueChange($event)"
40
46
  [disabled]="isDisabled">
41
47
  </kendo-textbox>
42
48
  `
@@ -0,0 +1,16 @@
1
+ /**-----------------------------------------------------------------------------------------
2
+ * Copyright © 2021 Progress Software Corporation. All rights reserved.
3
+ * Licensed under commercial license. See LICENSE.md in the project root for more information
4
+ *-------------------------------------------------------------------------------------------*/
5
+ /**
6
+ * @hidden
7
+ */
8
+ export const FilterErrorMessages = {
9
+ missingFilters: `Pass at least one user-defined filter through the [filters] input property or nest kendo-filter-field components. See http://www.telerik.com/kendo-angular-ui/components/filter/#data-binding`,
10
+ missingFilterForUsedField: (field) => `There is no user-defined filter with '${field}' field provided through the [filters] input property.`,
11
+ missingValueForBooleanField: (field) => `Provide a value for the boolean '${field}' user-defined filter as the operator is always set to 'eq'.`,
12
+ operatorBooleanField: (field) => `The operator of the boolean '${field}' user-defined filter is always set to 'eq'.`,
13
+ filterMissingUsedOperator: (field, operator) => `The user-defined filter with field '${field}' is missing the '${operator}' operator.`,
14
+ improperNumericEditorValue: (title) => `The provided value for the numeric editor of the '${title}' filter expression isn't one of a supported type string or NumberFormat. See http://www.telerik.com/kendo-angular-ui/components/filter/#editor-formats/`,
15
+ improperDateEditorValue: (title) => `The provided value for the date editor of the '${title}' filter expression isn't one of a supported type string or DateFormat. See http://www.telerik.com/kendo-angular-ui/components/filter/#editor-formats/`
16
+ };
@@ -30,6 +30,7 @@ export class FilterExpressionOperatorsComponent {
30
30
  FilterExpressionOperatorsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FilterExpressionOperatorsComponent, deps: [{ token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });
31
31
  FilterExpressionOperatorsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: FilterExpressionOperatorsComponent, selector: "kendo-filter-expression-operators", inputs: { currentItem: "currentItem", editorType: "editorType", operators: "operators" }, outputs: { valueChange: "valueChange" }, ngImport: i0, template: `
32
32
  <kendo-dropdownlist
33
+ [tabindex]="-1"
33
34
  [kendoAriaLabelValue]="messageFor('filterOperatorAriaLabel')"
34
35
  [data]="operators"
35
36
  [title]="messageFor('filterExpressionOperators')"
@@ -53,6 +54,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
53
54
  selector: "kendo-filter-expression-operators",
54
55
  template: `
55
56
  <kendo-dropdownlist
57
+ [tabindex]="-1"
56
58
  [kendoAriaLabelValue]="messageFor('filterOperatorAriaLabel')"
57
59
  [data]="operators"
58
60
  [title]="messageFor('filterExpressionOperators')"
@@ -2,29 +2,31 @@
2
2
  * Copyright © 2021 Progress Software Corporation. All rights reserved.
3
3
  * Licensed under commercial license. See LICENSE.md in the project root for more information
4
4
  *-------------------------------------------------------------------------------------------*/
5
- import { Component, EventEmitter, Input, isDevMode, Output } from '@angular/core';
6
- import { defaultDateOperators, defaultNumericOperators, defaultOperators, defaultStringOperators, getKeyByValue, isFilterEditor, localizeOperators, nullOperators } from './util';
5
+ import { Component, forwardRef, Input, isDevMode } from '@angular/core';
6
+ import { BaseFilterRowComponent } from './base-filter-row.component';
7
+ import { FilterErrorMessages } from './error-messages';
8
+ import { defaultDateOperators, defaultNumericOperators, defaultOperators, defaultStringOperators, FilterItem, getKeyByValue, isFilterEditor, localizeOperators, nullOperators } from './util';
7
9
  import * as i0 from "@angular/core";
8
10
  import * as i1 from "./filter.service";
9
- import * as i2 from "@progress/kendo-angular-l10n";
10
- import * as i3 from "@progress/kendo-angular-dropdowns";
11
- import * as i4 from "./filter-expression-operators.component";
12
- import * as i5 from "./editors/text-editor.component";
13
- import * as i6 from "./editors/numeric-editor.component";
14
- import * as i7 from "./editors/boolean-editor.component";
15
- import * as i8 from "./editors/date-editor.component";
16
- import * as i9 from "./aria-label.directive";
17
- import * as i10 from "@angular/common";
18
- import * as i11 from "@progress/kendo-angular-buttons";
11
+ import * as i2 from "./navigation.service";
12
+ import * as i3 from "@progress/kendo-angular-l10n";
13
+ import * as i4 from "@progress/kendo-angular-dropdowns";
14
+ import * as i5 from "./filter-expression-operators.component";
15
+ import * as i6 from "./editors/text-editor.component";
16
+ import * as i7 from "./editors/numeric-editor.component";
17
+ import * as i8 from "./editors/boolean-editor.component";
18
+ import * as i9 from "./editors/date-editor.component";
19
+ import * as i10 from "./aria-label.directive";
20
+ import * as i11 from "@angular/common";
21
+ import * as i12 from "@progress/kendo-angular-buttons";
19
22
  /**
20
23
  * @hidden
21
24
  */
22
- export class FilterExpressionComponent {
23
- constructor(filterService, localization, cdr) {
25
+ export class FilterExpressionComponent extends BaseFilterRowComponent {
26
+ constructor(filterService, cdr, element, navigationService, localization, renderer) {
27
+ super(element, navigationService, localization, renderer);
24
28
  this.filterService = filterService;
25
- this.localization = localization;
26
29
  this.cdr = cdr;
27
- this.valueChange = new EventEmitter();
28
30
  this.operators = [];
29
31
  this.filters = [];
30
32
  this.isBoolean = false;
@@ -34,19 +36,21 @@ export class FilterExpressionComponent {
34
36
  return this.getFilterExpressionByField(this.currentItem.field);
35
37
  }
36
38
  get numericEditorFormat() {
37
- if (this.editorFormat && !this.isNumberFormat(this.editorFormat)) {
38
- console.warn(`The provided value for the numeric editor of the '${this.currentFilterExpression.title}' filter expression isn't one of a supported type string or NumberFormat. See http://www.telerik.com/kendo-angular-ui/components/filter/#editor-formats/`);
39
+ const isSupportedFormat = typeof this.editorFormat !== 'string' && !this.isNumberFormat(this.editorFormat);
40
+ if (this.editorFormat && isSupportedFormat) {
41
+ console.warn(FilterErrorMessages.improperNumericEditorValue(this.currentFilterExpression.title));
39
42
  }
40
43
  return this.editorFormat;
41
44
  }
42
45
  get dateEditorFormat() {
43
- if (this.editorFormat && !this.isDateFormat(this.editorFormat)) {
44
- console.warn(`The provided value for the date editor of the '${this.currentFilterExpression.title}' filter expression isn't one of a supported type string or DateFormat. See http://www.telerik.com/kendo-angular-ui/components/filter/#editor-formats/`);
46
+ const isSupportedFormat = typeof this.editorFormat !== 'string' && !this.isDateFormat(this.editorFormat);
47
+ if (this.editorFormat && isSupportedFormat) {
48
+ console.warn(FilterErrorMessages.improperDateEditorValue(this.currentFilterExpression.title));
45
49
  }
46
50
  return this.editorFormat;
47
51
  }
48
52
  isNumberFormat(obj) {
49
- if (isDevMode() && obj && typeof this.editorFormat !== 'string' &&
53
+ if (isDevMode() && obj &&
50
54
  (obj['currency'] ||
51
55
  obj['currencyDisplay'] ||
52
56
  obj['maximumFractionDigits'] ||
@@ -60,7 +64,7 @@ export class FilterExpressionComponent {
60
64
  }
61
65
  }
62
66
  isDateFormat(obj) {
63
- if (isDevMode() && obj && typeof this.editorFormat !== 'string' && obj['displayFormat'] && obj['inputFormat']) {
67
+ if (isDevMode() && obj && obj['displayFormat'] && obj['inputFormat']) {
64
68
  return true;
65
69
  }
66
70
  else {
@@ -105,9 +109,6 @@ export class FilterExpressionComponent {
105
109
  }
106
110
  return result;
107
111
  }
108
- messageFor(key) {
109
- return this.localization.get(key);
110
- }
111
112
  getFilterExpressionByField(name) {
112
113
  const foundFilter = this.filterService.filters.find(filter => filter.field === name);
113
114
  if (foundFilter) {
@@ -116,11 +117,14 @@ export class FilterExpressionComponent {
116
117
  return null;
117
118
  }
118
119
  filterValueChange(value) {
120
+ this.navigationService.currentToolbarItemIndex = this.itemNumber;
121
+ this.navigationService.currentToolbarItemChildrenIndex = 0;
119
122
  this.currentItem.value = null;
120
123
  this.currentItem.field = value;
121
124
  this.setEditorTemplate();
122
125
  const foundFilter = this.getFilterExpressionByField(this.currentItem.field);
123
126
  this.setOperators(foundFilter);
127
+ this.editorFormat = foundFilter.editorFormat;
124
128
  this.valueChange.emit();
125
129
  }
126
130
  getDefaultOperators(operatorsType) {
@@ -141,7 +145,7 @@ export class FilterExpressionComponent {
141
145
  }
142
146
  removeFilterExpression() {
143
147
  this.filterService.remove(this.currentItem, this.index);
144
- this.valueChange.emit();
148
+ this.valueChange.emit(true);
145
149
  }
146
150
  setOperators(filter) {
147
151
  this.isBoolean = filter.editor === 'boolean';
@@ -164,8 +168,10 @@ export class FilterExpressionComponent {
164
168
  }
165
169
  }
166
170
  onOperatorChange(value) {
171
+ this.navigationService.currentToolbarItemIndex = this.itemNumber;
172
+ this.navigationService.currentToolbarItemChildrenIndex = 1;
167
173
  this.valueChange.emit();
168
- if (nullOperators.indexOf(value) >= 0) {
174
+ if (nullOperators.includes(value)) {
169
175
  this.currentItem.value = null;
170
176
  this.isEditorDisabled = true;
171
177
  }
@@ -178,12 +184,16 @@ export class FilterExpressionComponent {
178
184
  this.editorTemplate = filterExpression.editorTemplate ? filterExpression.editorTemplate : null;
179
185
  }
180
186
  }
181
- FilterExpressionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FilterExpressionComponent, deps: [{ token: i1.FilterService }, { token: i2.LocalizationService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
182
- FilterExpressionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: FilterExpressionComponent, selector: "kendo-filter-expression", inputs: { index: "index", currentItem: "currentItem" }, outputs: { valueChange: "valueChange" }, ngImport: i0, template: `
183
- <div class="k-filter-toolbar" role="group" [attr.aria-label]="messageFor('filterAriaLabel')">
184
- <div class="k-toolbar">
185
- <div class="k-filter-toolbar-item k-filter-field">
187
+ FilterExpressionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FilterExpressionComponent, deps: [{ token: i1.FilterService }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i2.NavigationService }, { token: i3.LocalizationService }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
188
+ FilterExpressionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: FilterExpressionComponent, selector: "kendo-filter-expression", inputs: { currentItem: "currentItem" }, providers: [{
189
+ provide: FilterItem,
190
+ useExisting: forwardRef(() => FilterExpressionComponent)
191
+ }], usesInheritance: true, ngImport: i0, template: `
192
+ <div class="k-filter-toolbar">
193
+ <div class="k-toolbar" role="toolbar" [attr.aria-label]="messageFor('filterToolbarAriaLabel')" (focus)="onFocus()" (focusout)="onBlur()" (mousedown)="onMouseDown($event)">
194
+ <div class="k-filter-toolbar-item k-filter-field k-toolbar-item" >
186
195
  <kendo-dropdownlist
196
+ [tabindex]="-1"
187
197
  [kendoAriaLabelValue]="messageFor('filterFieldAriaLabel')"
188
198
  [title]="messageFor('filterExpressionFilters')"
189
199
  [data]="filters"
@@ -194,7 +204,7 @@ FilterExpressionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.
194
204
  (valueChange)="filterValueChange($event)">
195
205
  </kendo-dropdownlist>
196
206
  </div>
197
- <div *ngIf="!isBoolean" class="k-filter-toolbar-item k-filter-operator">
207
+ <div *ngIf="!isBoolean" class="k-filter-toolbar-item k-filter-operator k-toolbar-item" >
198
208
  <kendo-filter-expression-operators
199
209
  [currentItem]="currentItem"
200
210
  [operators]="operators"
@@ -203,7 +213,7 @@ FilterExpressionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.
203
213
  </kendo-filter-expression-operators>
204
214
  </div>
205
215
 
206
- <div class="k-filter-toolbar-item k-filter-value">
216
+ <div class="k-filter-toolbar-item k-filter-value k-toolbar-item">
207
217
  <ng-container *ngIf="!editorTemplate" [ngSwitch]="getEditorType()">
208
218
  <kendo-filter-text-editor *ngSwitchCase="'string'" [currentItem]="currentItem" [isDisabled]="isEditorDisabled" (valueChange)="valueChange.emit()"></kendo-filter-text-editor>
209
219
  <kendo-filter-numeric-editor *ngSwitchCase="'number'" [currentItem]="currentItem" [isDisabled]="isEditorDisabled" [format]="numericEditorFormat" (valueChange)="valueChange.emit()"></kendo-filter-numeric-editor>
@@ -217,9 +227,10 @@ FilterExpressionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.
217
227
  </ng-container>
218
228
  </div>
219
229
 
220
- <div class="k-filter-toolbar-item">
230
+ <div class="k-filter-toolbar-item k-toolbar-item" >
221
231
  <button
222
232
  kendoButton
233
+ tabindex="-1"
223
234
  icon="x"
224
235
  fillMode="flat"
225
236
  [title]="messageFor('remove')"
@@ -228,16 +239,21 @@ FilterExpressionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.
228
239
  </div>
229
240
  </div>
230
241
  </div>
231
- `, isInline: true, components: [{ type: i3.DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["iconClass", "loading", "data", "value", "textField", "valueField", "popupSettings", "listHeight", "defaultItem", "disabled", "itemDisabled", "readonly", "filterable", "virtual", "ignoreCase", "delay", "valuePrimitive", "tabindex", "tabIndex", "size", "rounded", "fillMode", "id"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }, { type: i4.FilterExpressionOperatorsComponent, selector: "kendo-filter-expression-operators", inputs: ["currentItem", "editorType", "operators"], outputs: ["valueChange"] }, { type: i5.FilterTextEditorComponent, selector: "kendo-filter-text-editor", inputs: ["currentItem", "isDisabled"], outputs: ["valueChange"] }, { type: i6.FilterNumericEditorComponent, selector: "kendo-filter-numeric-editor", inputs: ["currentItem", "isDisabled", "format"], outputs: ["valueChange"] }, { type: i7.FilterBooleanEditorComponent, selector: "kendo-filter-boolean-editor", inputs: ["currentItem"], outputs: ["valueChange"] }, { type: i8.FilterDateEditorComponent, selector: "kendo-filter-date-editor", inputs: ["currentItem", "isDisabled", "format"], outputs: ["valueChange"] }], directives: [{ type: i9.AriaLabelValueDirective, selector: "[kendoAriaLabelValue]", inputs: ["kendoAriaLabelValue"] }, { type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i10.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i10.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i11.TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }, { type: i11.ButtonDirective, selector: "button[kendoButton], span[kendoButton]", inputs: ["toggleable", "togglable", "selected", "tabIndex", "icon", "iconClass", "imageUrl", "disabled", "size", "rounded", "fillMode", "themeColor", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }] });
242
+ `, isInline: true, components: [{ type: i4.DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["iconClass", "loading", "data", "value", "textField", "valueField", "popupSettings", "listHeight", "defaultItem", "disabled", "itemDisabled", "readonly", "filterable", "virtual", "ignoreCase", "delay", "valuePrimitive", "tabindex", "tabIndex", "size", "rounded", "fillMode", "id"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }, { type: i5.FilterExpressionOperatorsComponent, selector: "kendo-filter-expression-operators", inputs: ["currentItem", "editorType", "operators"], outputs: ["valueChange"] }, { type: i6.FilterTextEditorComponent, selector: "kendo-filter-text-editor", inputs: ["currentItem", "isDisabled"], outputs: ["valueChange"] }, { type: i7.FilterNumericEditorComponent, selector: "kendo-filter-numeric-editor", inputs: ["currentItem", "isDisabled", "format"], outputs: ["valueChange"] }, { type: i8.FilterBooleanEditorComponent, selector: "kendo-filter-boolean-editor", inputs: ["currentItem"], outputs: ["valueChange"] }, { type: i9.FilterDateEditorComponent, selector: "kendo-filter-date-editor", inputs: ["currentItem", "isDisabled", "format"], outputs: ["valueChange"] }], directives: [{ type: i10.AriaLabelValueDirective, selector: "[kendoAriaLabelValue]", inputs: ["kendoAriaLabelValue"] }, { type: i11.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i11.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i11.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i12.TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }, { type: i12.ButtonDirective, selector: "button[kendoButton], span[kendoButton]", inputs: ["toggleable", "togglable", "selected", "tabIndex", "icon", "iconClass", "imageUrl", "disabled", "size", "rounded", "fillMode", "themeColor", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }] });
232
243
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FilterExpressionComponent, decorators: [{
233
244
  type: Component,
234
245
  args: [{
246
+ providers: [{
247
+ provide: FilterItem,
248
+ useExisting: forwardRef(() => FilterExpressionComponent)
249
+ }],
235
250
  selector: 'kendo-filter-expression',
236
251
  template: `
237
- <div class="k-filter-toolbar" role="group" [attr.aria-label]="messageFor('filterAriaLabel')">
238
- <div class="k-toolbar">
239
- <div class="k-filter-toolbar-item k-filter-field">
252
+ <div class="k-filter-toolbar">
253
+ <div class="k-toolbar" role="toolbar" [attr.aria-label]="messageFor('filterToolbarAriaLabel')" (focus)="onFocus()" (focusout)="onBlur()" (mousedown)="onMouseDown($event)">
254
+ <div class="k-filter-toolbar-item k-filter-field k-toolbar-item" >
240
255
  <kendo-dropdownlist
256
+ [tabindex]="-1"
241
257
  [kendoAriaLabelValue]="messageFor('filterFieldAriaLabel')"
242
258
  [title]="messageFor('filterExpressionFilters')"
243
259
  [data]="filters"
@@ -248,7 +264,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
248
264
  (valueChange)="filterValueChange($event)">
249
265
  </kendo-dropdownlist>
250
266
  </div>
251
- <div *ngIf="!isBoolean" class="k-filter-toolbar-item k-filter-operator">
267
+ <div *ngIf="!isBoolean" class="k-filter-toolbar-item k-filter-operator k-toolbar-item" >
252
268
  <kendo-filter-expression-operators
253
269
  [currentItem]="currentItem"
254
270
  [operators]="operators"
@@ -257,7 +273,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
257
273
  </kendo-filter-expression-operators>
258
274
  </div>
259
275
 
260
- <div class="k-filter-toolbar-item k-filter-value">
276
+ <div class="k-filter-toolbar-item k-filter-value k-toolbar-item">
261
277
  <ng-container *ngIf="!editorTemplate" [ngSwitch]="getEditorType()">
262
278
  <kendo-filter-text-editor *ngSwitchCase="'string'" [currentItem]="currentItem" [isDisabled]="isEditorDisabled" (valueChange)="valueChange.emit()"></kendo-filter-text-editor>
263
279
  <kendo-filter-numeric-editor *ngSwitchCase="'number'" [currentItem]="currentItem" [isDisabled]="isEditorDisabled" [format]="numericEditorFormat" (valueChange)="valueChange.emit()"></kendo-filter-numeric-editor>
@@ -271,9 +287,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
271
287
  </ng-container>
272
288
  </div>
273
289
 
274
- <div class="k-filter-toolbar-item">
290
+ <div class="k-filter-toolbar-item k-toolbar-item" >
275
291
  <button
276
292
  kendoButton
293
+ tabindex="-1"
277
294
  icon="x"
278
295
  fillMode="flat"
279
296
  [title]="messageFor('remove')"
@@ -284,10 +301,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
284
301
  </div>
285
302
  `
286
303
  }]
287
- }], ctorParameters: function () { return [{ type: i1.FilterService }, { type: i2.LocalizationService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { index: [{
288
- type: Input
289
- }], currentItem: [{
304
+ }], ctorParameters: function () { return [{ type: i1.FilterService }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i2.NavigationService }, { type: i3.LocalizationService }, { type: i0.Renderer2 }]; }, propDecorators: { currentItem: [{
290
305
  type: Input
291
- }], valueChange: [{
292
- type: Output
293
306
  }] } });