@progress/kendo-angular-treelist 18.2.1-develop.2 → 18.3.0-develop.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. package/column-menu/column-chooser-item-checked.directive.d.ts +21 -0
  2. package/column-menu/column-chooser.component.d.ts +14 -3
  3. package/column-menu/column-list-kb-nav.service.d.ts +22 -0
  4. package/column-menu/column-list.component.d.ts +20 -5
  5. package/column-menu/column-menu-autosize-all.component.d.ts +39 -0
  6. package/column-menu/column-menu-autosize.component.d.ts +43 -0
  7. package/column-menu/column-menu-chooser.component.d.ts +16 -4
  8. package/column-menu/column-menu-container.component.d.ts +21 -0
  9. package/column-menu/column-menu-expandable-item.interface.d.ts +14 -0
  10. package/column-menu/column-menu-filter.component.d.ts +16 -3
  11. package/column-menu/column-menu-item.component.d.ts +11 -3
  12. package/column-menu/column-menu-item.directive.d.ts +45 -0
  13. package/column-menu/column-menu-settings.interface.d.ts +11 -2
  14. package/column-menu/column-menu.component.d.ts +40 -15
  15. package/column-menu/column-menu.service.d.ts +14 -0
  16. package/column-menu/utils.d.ts +13 -0
  17. package/columns/sort-settings.d.ts +12 -0
  18. package/common/error-messages.d.ts +8 -0
  19. package/common/id.service.d.ts +3 -0
  20. package/common/provider.service.d.ts +3 -1
  21. package/esm2022/column-menu/column-chooser-item-checked.directive.mjs +45 -0
  22. package/esm2022/column-menu/column-chooser.component.mjs +69 -14
  23. package/esm2022/column-menu/column-list-kb-nav.service.mjs +40 -0
  24. package/esm2022/column-menu/column-list.component.mjs +172 -50
  25. package/esm2022/column-menu/column-menu-autosize-all.component.mjs +79 -0
  26. package/esm2022/column-menu/column-menu-autosize.component.mjs +87 -0
  27. package/esm2022/column-menu/column-menu-chooser.component.mjs +44 -12
  28. package/esm2022/column-menu/column-menu-container.component.mjs +58 -0
  29. package/esm2022/column-menu/column-menu-expandable-item.interface.mjs +5 -0
  30. package/esm2022/column-menu/column-menu-filter.component.mjs +58 -25
  31. package/esm2022/column-menu/column-menu-item-base.mjs +2 -1
  32. package/esm2022/column-menu/column-menu-item.component.mjs +34 -5
  33. package/esm2022/column-menu/column-menu-item.directive.mjs +125 -0
  34. package/esm2022/column-menu/column-menu-lock.component.mjs +1 -1
  35. package/esm2022/column-menu/column-menu-sort.component.mjs +1 -1
  36. package/esm2022/column-menu/column-menu.component.mjs +264 -67
  37. package/esm2022/column-menu/column-menu.service.mjs +18 -2
  38. package/esm2022/column-menu/utils.mjs +21 -1
  39. package/esm2022/common/error-messages.mjs +15 -0
  40. package/esm2022/common/id.service.mjs +9 -0
  41. package/esm2022/common/provider.service.mjs +7 -3
  42. package/esm2022/filtering/cell/boolean-filter-cell.component.mjs +5 -2
  43. package/esm2022/filtering/cell/date-filter-cell.component.mjs +20 -3
  44. package/esm2022/filtering/cell/numeric-filter-cell.component.mjs +17 -3
  45. package/esm2022/filtering/filter-row.component.mjs +1 -1
  46. package/esm2022/filtering/filter.service.mjs +17 -3
  47. package/esm2022/filtering/menu/boolean-filter-menu.component.mjs +40 -14
  48. package/esm2022/filtering/menu/date-filter-menu-input.component.mjs +47 -17
  49. package/esm2022/filtering/menu/date-filter-menu.component.mjs +27 -7
  50. package/esm2022/filtering/menu/filter-menu-container.component.mjs +83 -31
  51. package/esm2022/filtering/menu/filter-menu-dropdownlist.directive.mjs +44 -0
  52. package/esm2022/filtering/menu/filter-menu-host.directive.mjs +6 -1
  53. package/esm2022/filtering/menu/filter-menu-input-wrapper.component.mjs +52 -9
  54. package/esm2022/filtering/menu/filter-menu.component.mjs +111 -16
  55. package/esm2022/filtering/menu/menu-tabbing.service.mjs +22 -0
  56. package/esm2022/filtering/menu/numeric-filter-menu-input.component.mjs +49 -35
  57. package/esm2022/filtering/menu/numeric-filter-menu.component.mjs +37 -7
  58. package/esm2022/filtering/menu/string-filter-menu-input.component.mjs +13 -4
  59. package/esm2022/filtering/menu/string-filter-menu.component.mjs +27 -8
  60. package/esm2022/filtering/operators/after-eq-filter-operator.component.mjs +2 -2
  61. package/esm2022/filtering/operators/after-filter-operator.component.mjs +2 -2
  62. package/esm2022/filtering/operators/before-eq-filter-operator.component.mjs +2 -2
  63. package/esm2022/filtering/operators/before-filter-operator.component.mjs +2 -2
  64. package/esm2022/filtering/operators/contains-filter-operator.component.mjs +1 -1
  65. package/esm2022/filtering/operators/ends-with-filter-operator.component.mjs +1 -1
  66. package/esm2022/filtering/operators/eq-filter-operator.component.mjs +1 -1
  67. package/esm2022/filtering/operators/filter-operator.base.mjs +18 -18
  68. package/esm2022/filtering/operators/gt-filter-operator.component.mjs +1 -1
  69. package/esm2022/filtering/operators/gte-filter-operator.component.mjs +1 -1
  70. package/esm2022/filtering/operators/is-empty-filter-operator.component.mjs +1 -1
  71. package/esm2022/filtering/operators/is-not-empty-filter-operator.component.mjs +1 -1
  72. package/esm2022/filtering/operators/is-not-null-filter-operator.component.mjs +1 -1
  73. package/esm2022/filtering/operators/isnull-filter-operator.component.mjs +1 -1
  74. package/esm2022/filtering/operators/lt-filter-operator.component.mjs +1 -1
  75. package/esm2022/filtering/operators/lte-filter-operator.component.mjs +1 -1
  76. package/esm2022/filtering/operators/neq-filter-operator.component.mjs +1 -1
  77. package/esm2022/filtering/operators/not-contains-filter-operator.component.mjs +1 -1
  78. package/esm2022/filtering/operators/starts-with-filter-operator.component.mjs +1 -1
  79. package/esm2022/localization/messages.mjs +97 -3
  80. package/esm2022/navigation/logical-cell.directive.mjs +4 -1
  81. package/esm2022/navigation/navigation.service.mjs +4 -4
  82. package/esm2022/package-metadata.mjs +2 -2
  83. package/esm2022/rendering/header/header.component.mjs +336 -178
  84. package/esm2022/rendering/table-body.component.mjs +1 -1
  85. package/esm2022/selection/selection.service.mjs +2 -2
  86. package/esm2022/treelist.component.mjs +73 -9
  87. package/fesm2022/progress-kendo-angular-treelist.mjs +2231 -628
  88. package/filtering/cell/date-filter-cell.component.d.ts +4 -0
  89. package/filtering/cell/numeric-filter-cell.component.d.ts +4 -0
  90. package/filtering/filter.service.d.ts +10 -1
  91. package/filtering/menu/boolean-filter-menu.component.d.ts +19 -7
  92. package/filtering/menu/date-filter-menu-input.component.d.ts +10 -3
  93. package/filtering/menu/date-filter-menu.component.d.ts +7 -1
  94. package/filtering/menu/filter-menu-container.component.d.ts +23 -6
  95. package/filtering/menu/filter-menu-dropdownlist.directive.d.ts +19 -0
  96. package/filtering/menu/filter-menu-host.directive.d.ts +3 -1
  97. package/filtering/menu/filter-menu-input-wrapper.component.d.ts +12 -2
  98. package/filtering/menu/filter-menu.component.d.ts +30 -7
  99. package/filtering/menu/menu-tabbing.service.d.ts +18 -0
  100. package/filtering/menu/numeric-filter-menu-input.component.d.ts +12 -26
  101. package/filtering/menu/numeric-filter-menu.component.d.ts +13 -1
  102. package/filtering/menu/string-filter-menu-input.component.d.ts +4 -1
  103. package/filtering/menu/string-filter-menu.component.d.ts +7 -1
  104. package/index.d.ts +1 -0
  105. package/localization/messages.d.ts +79 -3
  106. package/navigation/logical-cell.directive.d.ts +2 -1
  107. package/package.json +18 -18
  108. package/rendering/header/header.component.d.ts +43 -10
  109. package/schematics/ngAdd/index.js +3 -3
@@ -2,32 +2,52 @@
2
2
  * Copyright © 2025 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, Input, TemplateRef, HostBinding, ChangeDetectorRef } from '@angular/core';
5
+ import { Component, Input, TemplateRef, HostBinding, ChangeDetectorRef, Optional, isDevMode, ElementRef, ViewChild, Renderer2 } from '@angular/core';
6
6
  import { NgClass, NgTemplateOutlet, NgIf } from '@angular/common';
7
- import { LocalizationService } from "@progress/kendo-angular-l10n";
8
7
  import { moreVerticalIcon } from '@progress/kendo-svg-icons';
9
8
  import { IconWrapperComponent } from '@progress/kendo-angular-icons';
10
9
  import { SinglePopupService } from '../common/single-popup.service';
11
10
  import { ColumnMenuService } from './column-menu.service';
12
11
  import { filtersByField } from '../filtering/base-filter-cell.component';
13
- import { hasFilter, hasSort, hasLock, hasColumnChooser } from './utils';
12
+ import { hasFilter, hasSort, hasLock, hasColumnChooser, hasAutoSizeColumn, hasAutoSizeAllColumns } from './utils';
14
13
  import { ColumnMenuFilterComponent } from './column-menu-filter.component';
15
14
  import { ColumnMenuChooserComponent } from './column-menu-chooser.component';
16
15
  import { ColumnMenuLockComponent } from './column-menu-lock.component';
17
16
  import { ColumnMenuSortComponent } from './column-menu-sort.component';
17
+ import { ColumnMenuContainerComponent } from './column-menu-container.component';
18
+ import { ColumnMenuAutoSizeAllColumnsComponent } from './column-menu-autosize-all.component';
19
+ import { ColumnMenuAutoSizeColumnComponent } from './column-menu-autosize.component';
20
+ import { ColumnMenuItemDirective } from './column-menu-item.directive';
21
+ import { NavigationService } from '../navigation/navigation.service';
22
+ import { IdService } from '../common/id.service';
23
+ import { ContextService } from '../common/provider.service';
24
+ import { ColumnMenuErrorMessages } from '../common/error-messages';
25
+ import { Subscription } from 'rxjs';
26
+ import { replaceMessagePlaceholder } from '../utils';
27
+ import { MenuTabbingService } from '../filtering/menu/menu-tabbing.service';
18
28
  import * as i0 from "@angular/core";
19
- import * as i1 from "../common/single-popup.service";
20
- import * as i2 from "@progress/kendo-angular-l10n";
21
- import * as i3 from "./column-menu.service";
29
+ import * as i1 from "../navigation/navigation.service";
30
+ import * as i2 from "../common/single-popup.service";
31
+ import * as i3 from "../common/provider.service";
32
+ import * as i4 from "./column-menu.service";
33
+ import * as i5 from "../common/id.service";
22
34
  const POPUP_CLASSES = 'k-grid-columnmenu-popup k-column-menu';
35
+ let id = 0;
36
+ const getId = (gridId) => `${gridId}-column-menu-${id++}`;
23
37
  /**
24
38
  * Represents the [column menu]({% slug columnmenu_treelist %}) component of the TreeList.
25
39
  */
26
40
  export class ColumnMenuComponent {
41
+ navigationService;
27
42
  popupService;
28
- localization;
43
+ ctx;
29
44
  service;
30
45
  cdr;
46
+ renderer;
47
+ idService;
48
+ anchor;
49
+ template;
50
+ defaultTemplate;
31
51
  /**
32
52
  * @hidden
33
53
  */
@@ -58,6 +78,11 @@ export class ColumnMenuComponent {
58
78
  * @hidden
59
79
  */
60
80
  columnMenuTemplate;
81
+ /**
82
+ * @hidden
83
+ */
84
+ tabIndex = '-1';
85
+ moreVerticalIcon = moreVerticalIcon;
61
86
  /**
62
87
  * @hidden
63
88
  */
@@ -66,16 +91,43 @@ export class ColumnMenuComponent {
66
91
  * @hidden
67
92
  */
68
93
  expandedColumns = false;
69
- moreVerticalIcon = moreVerticalIcon;
70
94
  popupRef;
71
95
  closeSubscription;
72
- constructor(popupService, localization, service, cdr) {
96
+ popupSubs = new Subscription();
97
+ constructor(navigationService, popupService, ctx, service, cdr, renderer, idService) {
98
+ this.navigationService = navigationService;
73
99
  this.popupService = popupService;
74
- this.localization = localization;
100
+ this.ctx = ctx;
75
101
  this.service = service;
76
102
  this.cdr = cdr;
103
+ this.renderer = renderer;
104
+ this.idService = idService;
77
105
  this.closeSubscription = service.closeMenu.subscribe(this.close.bind(this));
78
106
  }
107
+ ngAfterViewInit() {
108
+ if (this.ctx.treelist.virtualColumns && isDevMode()) {
109
+ if (this.settings.autoSizeAllColumns) {
110
+ this.settings.autoSizeAllColumns = false;
111
+ console.warn(ColumnMenuErrorMessages.autoSizeAllColumns);
112
+ }
113
+ if (this.settings.autoSizeColumn) {
114
+ this.settings.autoSizeColumn = false;
115
+ console.warn(ColumnMenuErrorMessages.autoSizeColumn);
116
+ }
117
+ }
118
+ }
119
+ ngOnChanges() {
120
+ this.service.column = this.column;
121
+ this.service.sort = this.sort;
122
+ this.service.filter = this.filter;
123
+ this.service.sortable = this.sortable;
124
+ }
125
+ ngOnDestroy() {
126
+ this.close();
127
+ this.closeSubscription.unsubscribe();
128
+ this.popupSubs?.unsubscribe();
129
+ this.closeSubscription = this.popupSubs = null;
130
+ }
79
131
  /**
80
132
  * @hidden
81
133
  */
@@ -107,118 +159,261 @@ export class ColumnMenuComponent {
107
159
  get hasLock() {
108
160
  return hasLock(this.settings, this.column);
109
161
  }
110
- ngOnChanges() {
111
- this.service.column = this.column;
112
- this.service.sort = this.sort;
113
- this.service.filter = this.filter;
114
- this.service.sortable = this.sortable;
162
+ /**
163
+ * @hidden
164
+ */
165
+ get hasAutoSizeColumn() {
166
+ return hasAutoSizeColumn(this.settings);
115
167
  }
116
- ngOnDestroy() {
117
- this.close();
118
- this.closeSubscription.unsubscribe();
168
+ /**
169
+ * @hidden
170
+ */
171
+ get hasAutoSizeAllColumns() {
172
+ return hasAutoSizeAllColumns(this.settings);
173
+ }
174
+ /**
175
+ * @hidden
176
+ */
177
+ get isNavigable() {
178
+ return this.navigationService.enabled;
119
179
  }
120
180
  /**
121
181
  * @hidden
122
182
  */
123
183
  toggle(e, anchor, template) {
124
- e.preventDefault();
125
- this.expandedFilter = !this.hasColumnChooser;
126
- this.expandedColumns = !this.hasFilter;
184
+ if (e) {
185
+ e.preventDefault();
186
+ e instanceof KeyboardEvent && e.stopImmediatePropagation();
187
+ }
188
+ this.expandedFilter = this.getExpandedState(this.settings.filter);
189
+ this.expandedColumns = this.getExpandedState(this.settings.columnChooser);
127
190
  this.popupRef = this.popupService.open(anchor, template, this.popupRef, POPUP_CLASSES);
191
+ // Needed as changes to 'popupRef' and 'popupId' are not reflected
192
+ // automatically when the Popup is closed by clicking outside the anchor
193
+ const ariaRoot = this.isNavigable ? anchor.closest('.k-table-th') : anchor;
194
+ if (this.popupRef) {
195
+ this.popupSubs?.unsubscribe();
196
+ this.popupSubs = null;
197
+ this.popupSubs = this.popupRef.popup.instance.anchorViewportLeave.subscribe(() => {
198
+ this.popupSubs?.unsubscribe();
199
+ this.popupSubs = null;
200
+ this.close(true);
201
+ this.updateAria(ariaRoot);
202
+ });
203
+ this.popupSubs.add(() => this.popupRef.popup.instance.close.subscribe(() => {
204
+ this.popupSubs?.unsubscribe();
205
+ this.popupSubs = this.popupRef = null;
206
+ this.updateAria(ariaRoot);
207
+ }));
208
+ const popupAriaElement = this.popupRef.popupElement.querySelector('.k-grid-columnmenu-popup');
209
+ if (popupAriaElement) {
210
+ const popupId = getId(this.idService?.gridId());
211
+ this.renderer.setAttribute(popupAriaElement, 'id', popupId);
212
+ this.renderer.setAttribute(popupAriaElement, 'role', 'dialog');
213
+ this.renderer.setAttribute(popupAriaElement, 'aria-label', this.columnMenuTitle);
214
+ ariaRoot && this.renderer.setAttribute(ariaRoot, 'aria-controls', popupId);
215
+ ariaRoot && this.renderer.setAttribute(ariaRoot, 'aria-expanded', 'true');
216
+ }
217
+ }
218
+ else {
219
+ this.focusRoot();
220
+ }
128
221
  }
129
222
  /**
130
223
  * @hidden
131
224
  */
132
- close() {
225
+ close(triggerFocus = false) {
133
226
  this.popupService.destroy();
134
227
  this.popupRef = null;
135
228
  this.cdr.markForCheck();
229
+ if (!triggerFocus) {
230
+ return;
231
+ }
232
+ this.focusRoot();
136
233
  }
137
234
  /**
138
235
  * @hidden
139
236
  */
140
- onColumnsExpand() {
141
- this.expandedColumns = true;
142
- this.expandedFilter = false;
237
+ get columnMenuTitle() {
238
+ const localizationMsg = this.ctx.localization.get('columnMenu') || '';
239
+ const columnName = this.column.title || this.column.field;
240
+ return replaceMessagePlaceholder(localizationMsg, 'columnName', columnName);
143
241
  }
144
- /**
145
- * @hidden
146
- */
147
- onFilterExpand() {
148
- this.expandedFilter = true;
149
- this.expandedColumns = false;
242
+ getExpandedState(menuItemSettings) {
243
+ return typeof (menuItemSettings) === 'object' ? menuItemSettings.expanded : false;
244
+ }
245
+ updateAria(ariaRoot) {
246
+ ariaRoot && this.renderer.removeAttribute(ariaRoot, 'aria-controls');
247
+ ariaRoot && this.renderer.setAttribute(ariaRoot, 'aria-expanded', 'false');
150
248
  }
151
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColumnMenuComponent, deps: [{ token: i1.SinglePopupService }, { token: i2.LocalizationService }, { token: i3.ColumnMenuService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
152
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ColumnMenuComponent, isStandalone: true, selector: "kendo-treelist-column-menu", inputs: { standalone: "standalone", column: "column", settings: "settings", sort: "sort", filter: "filter", sortable: "sortable", columnMenuTemplate: "columnMenuTemplate" }, host: { properties: { "class.k-grid-column-menu-standalone": "this.standalone" } }, providers: [ColumnMenuService], usesOnChanges: true, ngImport: i0, template: `
249
+ focusRoot() {
250
+ this.isNavigable ? this.navigationService.focusCell(0, this.column.leafIndex) : this.anchor.nativeElement.focus();
251
+ }
252
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColumnMenuComponent, deps: [{ token: i1.NavigationService }, { token: i2.SinglePopupService }, { token: i3.ContextService }, { token: i4.ColumnMenuService }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i5.IdService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
253
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ColumnMenuComponent, isStandalone: true, selector: "kendo-treelist-column-menu", inputs: { standalone: "standalone", column: "column", settings: "settings", sort: "sort", filter: "filter", sortable: "sortable", columnMenuTemplate: "columnMenuTemplate", tabIndex: "tabIndex" }, host: { properties: { "class.k-grid-column-menu-standalone": "this.standalone" } }, providers: [
254
+ ColumnMenuService,
255
+ MenuTabbingService
256
+ ], viewQueries: [{ propertyName: "anchor", first: true, predicate: ["anchor"], descendants: true, static: true }, { propertyName: "template", first: true, predicate: ["template"], descendants: true, read: TemplateRef, static: true }, { propertyName: "defaultTemplate", first: true, predicate: ["defaultTemplate"], descendants: true, read: TemplateRef, static: true }], usesOnChanges: true, ngImport: i0, template: `
153
257
  <a #anchor
154
258
  class="k-grid-column-menu k-grid-header-menu"
155
259
  [ngClass]="{ 'k-active': isActive }"
156
260
  (click)="toggle($event, anchor, template)"
261
+ (keydown.enter)="$event.stopImmediatePropagation()"
157
262
  href="#"
158
- tabindex="-1"
159
- [attr.title]="localization.get('columnMenu')">
263
+ [tabindex]="tabIndex"
264
+ [attr.title]="columnMenuTitle"
265
+ [attr.aria-expanded]="isNavigable ? undefined : false"
266
+ [attr.aria-haspopup]="isNavigable ? undefined : 'dialog'">
160
267
  <kendo-icon-wrapper
161
268
  name="more-vertical"
162
269
  [svgIcon]="moreVerticalIcon"></kendo-icon-wrapper>
163
270
  </a>
164
271
  <ng-template #template>
165
- <ng-container [ngTemplateOutlet]="column.columnMenuTemplateRef || columnMenuTemplate || defaultTemplate"
166
- [ngTemplateOutletContext]="{ service: service, column: column }">
167
- </ng-container>
272
+ <kendo-treelist-columnmenu-container
273
+ (keydown.escape)="close(true)"
274
+ (keydown.enter)="$event.stopImmediatePropagation()">
275
+ <ng-container
276
+ [ngTemplateOutlet]="column.columnMenuTemplateRef || columnMenuTemplate || defaultTemplate"
277
+ [ngTemplateOutletContext]="{ service: service, column: column }">
278
+ </ng-container>
279
+ </kendo-treelist-columnmenu-container>
168
280
  </ng-template>
169
281
  <ng-template #defaultTemplate>
170
- <kendo-treelist-columnmenu-sort *ngIf="hasSort" [service]="service">
171
- </kendo-treelist-columnmenu-sort>
172
- <kendo-treelist-columnmenu-lock *ngIf="hasLock" [service]="service">
173
- </kendo-treelist-columnmenu-lock>
174
- <kendo-treelist-columnmenu-chooser *ngIf="hasColumnChooser" [service]="service"
175
- [expanded]="expandedColumns" (expand)="onColumnsExpand()">
176
- </kendo-treelist-columnmenu-chooser>
177
- <kendo-treelist-columnmenu-filter *ngIf="hasFilter" [service]="service"
178
- [expanded]="expandedFilter" (expand)="onFilterExpand()">
179
- </kendo-treelist-columnmenu-filter>
282
+ <kendo-treelist-columnmenu-container
283
+ (keydown.escape)="close(true)"
284
+ (keydown.enter)="$event.stopImmediatePropagation()">
285
+ <kendo-treelist-columnmenu-sort #sortItem [kendoTreeListColumnMenuItem]="sortItem" *ngIf="hasSort" [service]="service">
286
+ </kendo-treelist-columnmenu-sort>
287
+ <kendo-treelist-columnmenu-lock #lockItem *ngIf="hasLock" [kendoTreeListColumnMenuItem]="lockItem" [service]="service">
288
+ </kendo-treelist-columnmenu-lock>
289
+ <span [style.borderColor]="'rgba(0, 0, 0, 0.08)'" *ngIf="hasColumnChooser || hasAutoSizeColumn || hasAutoSizeAllColumns" class="k-separator"></span>
290
+ <kendo-treelist-columnmenu-chooser
291
+ #chooserItem
292
+ *ngIf="hasColumnChooser"
293
+ [kendoTreeListColumnMenuItem]="chooserItem"
294
+ [service]="service"
295
+ [expanded]="expandedColumns">
296
+ </kendo-treelist-columnmenu-chooser>
297
+ <kendo-treelist-columnmenu-autosize-column
298
+ #autoSizeColumnItem
299
+ *ngIf="hasAutoSizeColumn"
300
+ [service]="service"
301
+ [kendoTreeListColumnMenuItem]="autoSizeColumnItem"
302
+ [column]="column"
303
+ >
304
+ </kendo-treelist-columnmenu-autosize-column>
305
+
306
+ <kendo-treelist-columnmenu-autosize-all-columns
307
+ #autoSizeAllColumnsItem
308
+ *ngIf="hasAutoSizeAllColumns"
309
+ [service]="service"
310
+ [kendoTreeListColumnMenuItem]="autoSizeAllColumnsItem"
311
+ >
312
+ </kendo-treelist-columnmenu-autosize-all-columns>
313
+ <span [style.borderColor]="'rgba(0, 0, 0, 0.08)'" *ngIf="hasColumnChooser || hasAutoSizeColumn || hasAutoSizeAllColumns" class="k-separator"></span>
314
+ <kendo-treelist-columnmenu-filter
315
+ #filterItem
316
+ *ngIf="hasFilter"
317
+ [kendoTreeListColumnMenuItem]="filterItem"
318
+ [service]="service"
319
+ [expanded]="expandedFilter">
320
+ </kendo-treelist-columnmenu-filter>
321
+ </kendo-treelist-columnmenu-container>
180
322
  </ng-template>
181
- `, isInline: true, dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ColumnMenuSortComponent, selector: "kendo-treelist-columnmenu-sort" }, { kind: "component", type: ColumnMenuLockComponent, selector: "kendo-treelist-columnmenu-lock" }, { kind: "component", type: ColumnMenuChooserComponent, selector: "kendo-treelist-columnmenu-chooser", inputs: ["expanded"], outputs: ["expand", "collapse"] }, { kind: "component", type: ColumnMenuFilterComponent, selector: "kendo-treelist-columnmenu-filter", inputs: ["expanded"], outputs: ["expand", "collapse"] }] });
323
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ColumnMenuSortComponent, selector: "kendo-treelist-columnmenu-sort" }, { kind: "component", type: ColumnMenuLockComponent, selector: "kendo-treelist-columnmenu-lock" }, { kind: "component", type: ColumnMenuChooserComponent, selector: "kendo-treelist-columnmenu-chooser", inputs: ["expanded", "isLast"], outputs: ["expand", "collapse"] }, { kind: "component", type: ColumnMenuFilterComponent, selector: "kendo-treelist-columnmenu-filter", inputs: ["expanded", "isLast"], outputs: ["expand", "collapse"] }, { kind: "component", type: ColumnMenuContainerComponent, selector: "kendo-treelist-columnmenu-container" }, { kind: "component", type: ColumnMenuAutoSizeAllColumnsComponent, selector: "kendo-treelist-columnmenu-autosize-all-columns" }, { kind: "component", type: ColumnMenuAutoSizeColumnComponent, selector: "kendo-treelist-columnmenu-autosize-column", inputs: ["column"] }, { kind: "directive", type: ColumnMenuItemDirective, selector: "[kendoTreeListColumnMenuItem]", inputs: ["kendoTreeListColumnMenuItem"] }] });
182
324
  }
183
325
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColumnMenuComponent, decorators: [{
184
326
  type: Component,
185
327
  args: [{
186
- providers: [ColumnMenuService],
328
+ providers: [
329
+ ColumnMenuService,
330
+ MenuTabbingService
331
+ ],
187
332
  selector: 'kendo-treelist-column-menu',
188
333
  template: `
189
334
  <a #anchor
190
335
  class="k-grid-column-menu k-grid-header-menu"
191
336
  [ngClass]="{ 'k-active': isActive }"
192
337
  (click)="toggle($event, anchor, template)"
338
+ (keydown.enter)="$event.stopImmediatePropagation()"
193
339
  href="#"
194
- tabindex="-1"
195
- [attr.title]="localization.get('columnMenu')">
340
+ [tabindex]="tabIndex"
341
+ [attr.title]="columnMenuTitle"
342
+ [attr.aria-expanded]="isNavigable ? undefined : false"
343
+ [attr.aria-haspopup]="isNavigable ? undefined : 'dialog'">
196
344
  <kendo-icon-wrapper
197
345
  name="more-vertical"
198
346
  [svgIcon]="moreVerticalIcon"></kendo-icon-wrapper>
199
347
  </a>
200
348
  <ng-template #template>
201
- <ng-container [ngTemplateOutlet]="column.columnMenuTemplateRef || columnMenuTemplate || defaultTemplate"
202
- [ngTemplateOutletContext]="{ service: service, column: column }">
203
- </ng-container>
349
+ <kendo-treelist-columnmenu-container
350
+ (keydown.escape)="close(true)"
351
+ (keydown.enter)="$event.stopImmediatePropagation()">
352
+ <ng-container
353
+ [ngTemplateOutlet]="column.columnMenuTemplateRef || columnMenuTemplate || defaultTemplate"
354
+ [ngTemplateOutletContext]="{ service: service, column: column }">
355
+ </ng-container>
356
+ </kendo-treelist-columnmenu-container>
204
357
  </ng-template>
205
358
  <ng-template #defaultTemplate>
206
- <kendo-treelist-columnmenu-sort *ngIf="hasSort" [service]="service">
207
- </kendo-treelist-columnmenu-sort>
208
- <kendo-treelist-columnmenu-lock *ngIf="hasLock" [service]="service">
209
- </kendo-treelist-columnmenu-lock>
210
- <kendo-treelist-columnmenu-chooser *ngIf="hasColumnChooser" [service]="service"
211
- [expanded]="expandedColumns" (expand)="onColumnsExpand()">
212
- </kendo-treelist-columnmenu-chooser>
213
- <kendo-treelist-columnmenu-filter *ngIf="hasFilter" [service]="service"
214
- [expanded]="expandedFilter" (expand)="onFilterExpand()">
215
- </kendo-treelist-columnmenu-filter>
359
+ <kendo-treelist-columnmenu-container
360
+ (keydown.escape)="close(true)"
361
+ (keydown.enter)="$event.stopImmediatePropagation()">
362
+ <kendo-treelist-columnmenu-sort #sortItem [kendoTreeListColumnMenuItem]="sortItem" *ngIf="hasSort" [service]="service">
363
+ </kendo-treelist-columnmenu-sort>
364
+ <kendo-treelist-columnmenu-lock #lockItem *ngIf="hasLock" [kendoTreeListColumnMenuItem]="lockItem" [service]="service">
365
+ </kendo-treelist-columnmenu-lock>
366
+ <span [style.borderColor]="'rgba(0, 0, 0, 0.08)'" *ngIf="hasColumnChooser || hasAutoSizeColumn || hasAutoSizeAllColumns" class="k-separator"></span>
367
+ <kendo-treelist-columnmenu-chooser
368
+ #chooserItem
369
+ *ngIf="hasColumnChooser"
370
+ [kendoTreeListColumnMenuItem]="chooserItem"
371
+ [service]="service"
372
+ [expanded]="expandedColumns">
373
+ </kendo-treelist-columnmenu-chooser>
374
+ <kendo-treelist-columnmenu-autosize-column
375
+ #autoSizeColumnItem
376
+ *ngIf="hasAutoSizeColumn"
377
+ [service]="service"
378
+ [kendoTreeListColumnMenuItem]="autoSizeColumnItem"
379
+ [column]="column"
380
+ >
381
+ </kendo-treelist-columnmenu-autosize-column>
382
+
383
+ <kendo-treelist-columnmenu-autosize-all-columns
384
+ #autoSizeAllColumnsItem
385
+ *ngIf="hasAutoSizeAllColumns"
386
+ [service]="service"
387
+ [kendoTreeListColumnMenuItem]="autoSizeAllColumnsItem"
388
+ >
389
+ </kendo-treelist-columnmenu-autosize-all-columns>
390
+ <span [style.borderColor]="'rgba(0, 0, 0, 0.08)'" *ngIf="hasColumnChooser || hasAutoSizeColumn || hasAutoSizeAllColumns" class="k-separator"></span>
391
+ <kendo-treelist-columnmenu-filter
392
+ #filterItem
393
+ *ngIf="hasFilter"
394
+ [kendoTreeListColumnMenuItem]="filterItem"
395
+ [service]="service"
396
+ [expanded]="expandedFilter">
397
+ </kendo-treelist-columnmenu-filter>
398
+ </kendo-treelist-columnmenu-container>
216
399
  </ng-template>
217
400
  `,
218
401
  standalone: true,
219
- imports: [NgClass, IconWrapperComponent, NgTemplateOutlet, NgIf, ColumnMenuSortComponent, ColumnMenuLockComponent, ColumnMenuChooserComponent, ColumnMenuFilterComponent]
402
+ imports: [NgClass, IconWrapperComponent, NgTemplateOutlet, NgIf, ColumnMenuSortComponent, ColumnMenuLockComponent, ColumnMenuChooserComponent,
403
+ ColumnMenuFilterComponent, ColumnMenuContainerComponent, ColumnMenuAutoSizeAllColumnsComponent, ColumnMenuAutoSizeColumnComponent, ColumnMenuItemDirective]
220
404
  }]
221
- }], ctorParameters: function () { return [{ type: i1.SinglePopupService }, { type: i2.LocalizationService }, { type: i3.ColumnMenuService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { standalone: [{
405
+ }], ctorParameters: function () { return [{ type: i1.NavigationService }, { type: i2.SinglePopupService }, { type: i3.ContextService }, { type: i4.ColumnMenuService }, { type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: i5.IdService, decorators: [{
406
+ type: Optional
407
+ }] }]; }, propDecorators: { anchor: [{
408
+ type: ViewChild,
409
+ args: ['anchor', { static: true }]
410
+ }], template: [{
411
+ type: ViewChild,
412
+ args: ['template', { static: true, read: TemplateRef }]
413
+ }], defaultTemplate: [{
414
+ type: ViewChild,
415
+ args: ['defaultTemplate', { static: true, read: TemplateRef }]
416
+ }], standalone: [{
222
417
  type: HostBinding,
223
418
  args: ['class.k-grid-column-menu-standalone']
224
419
  }, {
@@ -235,4 +430,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
235
430
  type: Input
236
431
  }], columnMenuTemplate: [{
237
432
  type: Input
433
+ }], tabIndex: [{
434
+ type: Input
238
435
  }] } });
@@ -3,7 +3,9 @@
3
3
  * Licensed under commercial license. See LICENSE.md in the project root for more information
4
4
  *-------------------------------------------------------------------------------------------*/
5
5
  import { Injectable, EventEmitter } from '@angular/core';
6
+ import { MenuTabbingService } from '../filtering/menu/menu-tabbing.service';
6
7
  import * as i0 from "@angular/core";
8
+ import * as i1 from "../filtering/menu/menu-tabbing.service";
7
9
  /**
8
10
  * Represents the service that is passed to the
9
11
  * [`ColumnMenuTemplate`]({% slug api_treelist_columnmenutemplatedirective %}) directive.
@@ -21,6 +23,10 @@ import * as i0 from "@angular/core";
21
23
  * ```
22
24
  */
23
25
  export class ColumnMenuService {
26
+ /**
27
+ * @hidden
28
+ */
29
+ menuTabbingService;
24
30
  /**
25
31
  * @hidden
26
32
  */
@@ -41,15 +47,25 @@ export class ColumnMenuService {
41
47
  * @hidden
42
48
  */
43
49
  sortable;
50
+ /**
51
+ * @hidden
52
+ */
53
+ columnMenuContainer;
54
+ /**
55
+ * @hidden
56
+ */
57
+ constructor(menuTabbingService) {
58
+ this.menuTabbingService = menuTabbingService;
59
+ }
44
60
  /**
45
61
  * Closes the column menu.
46
62
  */
47
63
  close() {
48
64
  this.closeMenu.emit();
49
65
  }
50
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColumnMenuService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
66
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColumnMenuService, deps: [{ token: i1.MenuTabbingService }], target: i0.ɵɵFactoryTarget.Injectable });
51
67
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColumnMenuService });
52
68
  }
53
69
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColumnMenuService, decorators: [{
54
70
  type: Injectable
55
- }] });
71
+ }], ctorParameters: function () { return [{ type: i1.MenuTabbingService }]; } });
@@ -21,4 +21,24 @@ export const hasColumnChooser = (settings) => settings.columnChooser !== false;
21
21
  /**
22
22
  * @hidden
23
23
  */
24
- export const hasItems = (settings, column) => hasColumnChooser(settings) || hasLock(settings, column) || hasSort(settings, column) || hasFilter(settings, column);
24
+ export const hasAutoSizeColumn = (settings) => settings.autoSizeColumn;
25
+ /**
26
+ * @hidden
27
+ */
28
+ export const hasAutoSizeAllColumns = (settings) => settings.autoSizeAllColumns;
29
+ /**
30
+ * @hidden
31
+ */
32
+ export const autoSizeColumn = (treelist, service, column) => {
33
+ column ? treelist.autoFitColumn(column) : treelist.autoFitColumns();
34
+ service.close();
35
+ };
36
+ /**
37
+ * @hidden
38
+ */
39
+ export const hasItems = (settings, column) => hasAutoSizeAllColumns(settings) ||
40
+ hasColumnChooser(settings) ||
41
+ hasFilter(settings, column) ||
42
+ hasAutoSizeColumn(settings) ||
43
+ hasLock(settings, column) ||
44
+ hasSort(settings, column);
@@ -0,0 +1,15 @@
1
+ /**-----------------------------------------------------------------------------------------
2
+ * Copyright © 2025 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 ColumnMenuErrorMessages = {
9
+ autoSizeColumn: `The auto size column does not work with enabled virtual columns.
10
+ See https://www.telerik.com/kendo-angular-ui/components/treelist/accessories/column-menu/#toc-autosize-column-item.`,
11
+ autoSizeAllColumns: `The auto size all columns does not work with enabled virtual columns.
12
+ See https://www.telerik.com/kendo-angular-ui/components/treelist/accessories/column-menu/#toc-autosize-all-columns-item.`,
13
+ serviceInput: `The service input of the predefined column menu components is mandatory.
14
+ See https://www.telerik.com/kendo-angular-ui/components/treelist/accessories/column-menu/#toc-customizing-the-content.`
15
+ };
@@ -17,6 +17,15 @@ export class IdService {
17
17
  cellId(rowIndex, colIndex) {
18
18
  return `${this.prefix}-r${rowIndex}c${colIndex}`;
19
19
  }
20
+ gridId() {
21
+ return this.prefix;
22
+ }
23
+ selectionCheckboxId(itemIndex) {
24
+ return `${this.prefix}-checkbox${itemIndex}`;
25
+ }
26
+ selectAllCheckboxId() {
27
+ return `${this.prefix}-select-all`;
28
+ }
20
29
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: IdService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
21
30
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: IdService });
22
31
  }
@@ -4,7 +4,9 @@
4
4
  *-------------------------------------------------------------------------------------------*/
5
5
  import { Injectable, Renderer2 } from '@angular/core';
6
6
  import { TreeListToolbarNavigationService } from '../rendering/toolbar/toolbar-navigation.service';
7
+ import { LocalizationService } from '@progress/kendo-angular-l10n';
7
8
  import * as i0 from "@angular/core";
9
+ import * as i1 from "@progress/kendo-angular-l10n";
8
10
  /**
9
11
  * @hidden
10
12
  *
@@ -15,16 +17,18 @@ import * as i0 from "@angular/core";
15
17
  * and a avoids dependency cycles between components.
16
18
  */
17
19
  export class ContextService {
20
+ localization;
18
21
  treelist;
19
22
  topToolbarNavigation;
20
23
  bottomToolbarNavigation;
21
- constructor(renderer) {
24
+ constructor(renderer, localization) {
25
+ this.localization = localization;
22
26
  this.topToolbarNavigation = new TreeListToolbarNavigationService(renderer);
23
27
  this.bottomToolbarNavigation = new TreeListToolbarNavigationService(renderer);
24
28
  }
25
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ContextService, deps: [{ token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Injectable });
29
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ContextService, deps: [{ token: i0.Renderer2 }, { token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Injectable });
26
30
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ContextService });
27
31
  }
28
32
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ContextService, decorators: [{
29
33
  type: Injectable
30
- }], ctorParameters: function () { return [{ type: i0.Renderer2 }]; } });
34
+ }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i1.LocalizationService }]; } });
@@ -10,6 +10,7 @@ import { BooleanFilterComponent } from '../boolean-filter.component';
10
10
  import { replaceMessagePlaceholder } from '../../utils';
11
11
  import { FilterInputDirective } from '../filter-input.directive';
12
12
  import { FilterCellWrapperComponent } from './filter-cell-wrapper.component';
13
+ import { FocusableDirective } from '../../navigation/focusable.directive';
13
14
  import * as i0 from "@angular/core";
14
15
  import * as i1 from "../filter.service";
15
16
  import * as i2 from "@progress/kendo-angular-l10n";
@@ -62,6 +63,7 @@ export class BooleanFilterCellComponent extends BooleanFilterComponent {
62
63
  [defaultOperator]="operator">
63
64
  <kendo-dropdownlist
64
65
  kendoFilterInput
66
+ kendoTreeListFocusable
65
67
  [defaultItem]="defaultItem"
66
68
  [columnLabel]="columnLabel"
67
69
  [data]="items"
@@ -72,7 +74,7 @@ export class BooleanFilterCellComponent extends BooleanFilterComponent {
72
74
  [value]="currentFilter?.value">
73
75
  </kendo-dropdownlist>
74
76
  </kendo-treelist-filter-wrapper-cell>
75
- `, isInline: true, dependencies: [{ kind: "component", type: FilterCellWrapperComponent, selector: "kendo-treelist-filter-wrapper-cell", inputs: ["showOperators"] }, { kind: "component", type: DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["customIconClass", "showStickyHeader", "icon", "svgIcon", "loading", "data", "value", "textField", "valueField", "adaptiveMode", "title", "subtitle", "popupSettings", "listHeight", "defaultItem", "disabled", "itemDisabled", "readonly", "filterable", "virtual", "ignoreCase", "delay", "valuePrimitive", "tabindex", "tabIndex", "size", "rounded", "fillMode", "leftRightArrowsNavigation", "id"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }, { kind: "directive", type: FilterInputDirective, selector: "[kendoFilterInput]", inputs: ["filterDelay", "columnLabel", "column", "value"] }] });
77
+ `, isInline: true, dependencies: [{ kind: "component", type: FilterCellWrapperComponent, selector: "kendo-treelist-filter-wrapper-cell", inputs: ["showOperators"] }, { kind: "component", type: DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["customIconClass", "showStickyHeader", "icon", "svgIcon", "loading", "data", "value", "textField", "valueField", "adaptiveMode", "title", "subtitle", "popupSettings", "listHeight", "defaultItem", "disabled", "itemDisabled", "readonly", "filterable", "virtual", "ignoreCase", "delay", "valuePrimitive", "tabindex", "tabIndex", "size", "rounded", "fillMode", "leftRightArrowsNavigation", "id"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }, { kind: "directive", type: FilterInputDirective, selector: "[kendoFilterInput]", inputs: ["filterDelay", "columnLabel", "column", "value"] }, { kind: "directive", type: FocusableDirective, selector: "[kendoTreeListFocusable],\n [kendoTreeListAddCommand],\n [kendoTreeListEditCommand],\n [kendoTreeListRemoveCommand],\n [kendoTreeListSaveCommand],\n [kendoTreeListCancelCommand]\n ", inputs: ["kendoTreeListFocusable", "enabled", "kendoTreeListAddCommand", "kendoTreeListEditCommand", "kendoTreeListRemoveCommand", "kendoTreeListSaveCommand", "kendoTreeListCancelCommand"] }] });
76
78
  }
77
79
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: BooleanFilterCellComponent, decorators: [{
78
80
  type: Component,
@@ -86,6 +88,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
86
88
  [defaultOperator]="operator">
87
89
  <kendo-dropdownlist
88
90
  kendoFilterInput
91
+ kendoTreeListFocusable
89
92
  [defaultItem]="defaultItem"
90
93
  [columnLabel]="columnLabel"
91
94
  [data]="items"
@@ -98,6 +101,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
98
101
  </kendo-treelist-filter-wrapper-cell>
99
102
  `,
100
103
  standalone: true,
101
- imports: [FilterCellWrapperComponent, DropDownListComponent, FilterInputDirective]
104
+ imports: [FilterCellWrapperComponent, DropDownListComponent, FilterInputDirective, FocusableDirective]
102
105
  }]
103
106
  }], ctorParameters: function () { return [{ type: i1.FilterService }, { type: i2.LocalizationService }, { type: i0.ChangeDetectorRef }]; } });