@progress/kendo-angular-grid 13.4.0-develop.9 → 13.4.0

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 (30) hide show
  1. package/column-menu/column-chooser-item-checked.directive.d.ts +20 -0
  2. package/column-menu/column-chooser.component.d.ts +9 -1
  3. package/column-menu/column-list-kb-nav.service.d.ts +22 -0
  4. package/column-menu/column-list.component.d.ts +10 -2
  5. package/column-menu/column-menu-item.component.d.ts +2 -0
  6. package/column-menu/column-menu.component.d.ts +10 -4
  7. package/column-menu/column-menu.module.d.ts +22 -21
  8. package/common/error-messages.d.ts +1 -1
  9. package/esm2020/column-menu/column-chooser-item-checked.directive.mjs +36 -0
  10. package/esm2020/column-menu/column-chooser.component.mjs +63 -12
  11. package/esm2020/column-menu/column-list-kb-nav.service.mjs +38 -0
  12. package/esm2020/column-menu/column-list.component.mjs +137 -26
  13. package/esm2020/column-menu/column-menu-autosize-all.component.mjs +2 -2
  14. package/esm2020/column-menu/column-menu-autosize.component.mjs +2 -2
  15. package/esm2020/column-menu/column-menu-chooser.component.mjs +3 -1
  16. package/esm2020/column-menu/column-menu-item.component.mjs +10 -4
  17. package/esm2020/column-menu/column-menu.component.mjs +79 -37
  18. package/esm2020/column-menu/column-menu.module.mjs +6 -2
  19. package/esm2020/common/error-messages.mjs +1 -1
  20. package/esm2020/filtering/menu/filter-menu-container.component.mjs +2 -2
  21. package/esm2020/filtering/menu/filter-menu.component.mjs +52 -10
  22. package/esm2020/navigation/logical-cell.directive.mjs +1 -1
  23. package/esm2020/package-metadata.mjs +2 -2
  24. package/esm2020/rendering/header/header.component.mjs +30 -20
  25. package/fesm2015/progress-kendo-angular-grid.mjs +402 -81
  26. package/fesm2020/progress-kendo-angular-grid.mjs +394 -80
  27. package/filtering/menu/filter-menu.component.d.ts +13 -4
  28. package/package.json +16 -16
  29. package/rendering/header/header.component.d.ts +4 -1
  30. package/schematics/ngAdd/index.js +3 -3
@@ -34,7 +34,7 @@ import * as i3$1 from '@progress/kendo-angular-inputs';
34
34
  import { NumericTextBoxComponent, InputsModule, NumericTextBoxModule } from '@progress/kendo-angular-inputs';
35
35
  import * as i4$3 from '@progress/kendo-angular-dateinputs';
36
36
  import { DatePickerModule } from '@progress/kendo-angular-dateinputs';
37
- import * as i16 from '@progress/kendo-angular-layout';
37
+ import * as i17 from '@progress/kendo-angular-layout';
38
38
  import { TabStripComponent, TabStripModule } from '@progress/kendo-angular-layout';
39
39
  import { trigger, state, style, transition, animate } from '@angular/animations';
40
40
  import { getter } from '@progress/kendo-common';
@@ -4474,8 +4474,8 @@ const packageMetadata = {
4474
4474
  name: '@progress/kendo-angular-grid',
4475
4475
  productName: 'Kendo UI for Angular',
4476
4476
  productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],
4477
- publishDate: 1692905626,
4478
- version: '13.4.0-develop.9',
4477
+ publishDate: 1693305612,
4478
+ version: '13.4.0',
4479
4479
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'
4480
4480
  };
4481
4481
 
@@ -11154,10 +11154,10 @@ class FilterMenuContainerComponent {
11154
11154
  e.preventDefault();
11155
11155
  if (buttonType === 'reset') {
11156
11156
  // eslint-disable-next-line no-unused-expressions
11157
- this.disabled ? this.menuTabbingService.firstFocusable.focus() : this.filterButton.nativeElement.focus();
11157
+ this.menuTabbingService.firstFocusable.focus();
11158
11158
  }
11159
11159
  else {
11160
- this.menuTabbingService.firstFocusable.focus();
11160
+ this.disabled ? this.menuTabbingService.firstFocusable.focus() : this.resetButton.nativeElement.focus();
11161
11161
  }
11162
11162
  }
11163
11163
  }
@@ -11283,15 +11283,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
11283
11283
  args: ['filterButton', { static: false }]
11284
11284
  }] } });
11285
11285
 
11286
+ let id$3 = 0;
11287
+ const getId$1 = (gridId) => `${gridId}-filter-menu-${id$3++}`;
11286
11288
  /**
11287
11289
  * @hidden
11288
11290
  */
11289
11291
  class FilterMenuComponent {
11290
- constructor(filterService, popupService, ctx, navigationService) {
11292
+ constructor(filterService, popupService, ctx, navigationService, renderer, cdr, idService) {
11291
11293
  this.filterService = filterService;
11292
11294
  this.popupService = popupService;
11293
11295
  this.ctx = ctx;
11294
11296
  this.navigationService = navigationService;
11297
+ this.renderer = renderer;
11298
+ this.cdr = cdr;
11299
+ this.idService = idService;
11295
11300
  this.filterIcon = filterIcon;
11296
11301
  this.tabIndex = '-1';
11297
11302
  }
@@ -11306,9 +11311,36 @@ class FilterMenuComponent {
11306
11311
  const columnName = this.column.title || this.column.field;
11307
11312
  return replaceMessagePlaceholder(localizationMsg, 'columnName', columnName);
11308
11313
  }
11314
+ /**
11315
+ * @hidden
11316
+ */
11317
+ get isNavigable() {
11318
+ return this.navigationService.tableEnabled;
11319
+ }
11309
11320
  toggle(anchor, template) {
11321
+ var _a;
11310
11322
  this.popupRef = this.popupService.open(anchor, template, this.popupRef);
11311
- if (!this.popupRef) {
11323
+ // Needed as changes to 'popupRef' are not reflected
11324
+ // automatically when the Popup is closed by clicking outside the anchor
11325
+ const ariaRoot = this.isNavigable ? anchor.closest('.k-table-th') : anchor;
11326
+ if (this.popupRef) {
11327
+ this.popupRef.popup.instance.close.pipe(take(1)).subscribe(() => {
11328
+ this.popupRef = null;
11329
+ const ariaRoot = this.isNavigable ? anchor.closest('.k-table-th') : anchor;
11330
+ ariaRoot && this.renderer.removeAttribute(ariaRoot, 'aria-controls');
11331
+ ariaRoot && this.renderer.setAttribute(ariaRoot, 'aria-expanded', 'false');
11332
+ });
11333
+ const popupAriaElement = this.popupRef.popupElement.querySelector('.k-grid-filter-popup');
11334
+ if (popupAriaElement) {
11335
+ const popupId = getId$1((_a = this.idService) === null || _a === void 0 ? void 0 : _a.gridId());
11336
+ this.renderer.setAttribute(popupAriaElement, 'id', popupId);
11337
+ this.renderer.setAttribute(popupAriaElement, 'role', 'dialog');
11338
+ this.renderer.setAttribute(popupAriaElement, 'aria-label', this.filterLabel);
11339
+ ariaRoot && this.renderer.setAttribute(ariaRoot, 'aria-controls', popupId);
11340
+ ariaRoot && this.renderer.setAttribute(ariaRoot, 'aria-expanded', 'true');
11341
+ }
11342
+ }
11343
+ else {
11312
11344
  if (this.navigationService.tableEnabled) {
11313
11345
  this.navigationService.focusCell(0, this.column.leafIndex);
11314
11346
  }
@@ -11320,6 +11352,8 @@ class FilterMenuComponent {
11320
11352
  }
11321
11353
  close() {
11322
11354
  this.popupService.destroy();
11355
+ this.popupRef = null;
11356
+ this.cdr.markForCheck();
11323
11357
  if (this.navigationService.tableEnabled) {
11324
11358
  this.navigationService.focusCell(0, this.column.leafIndex);
11325
11359
  }
@@ -11328,7 +11362,7 @@ class FilterMenuComponent {
11328
11362
  }
11329
11363
  }
11330
11364
  }
11331
- FilterMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FilterMenuComponent, deps: [{ token: FilterService }, { token: SinglePopupService }, { token: ContextService }, { token: NavigationService }], target: i0.ɵɵFactoryTarget.Component });
11365
+ FilterMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FilterMenuComponent, deps: [{ token: FilterService }, { token: SinglePopupService }, { token: ContextService }, { token: NavigationService }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: IdService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
11332
11366
  FilterMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: FilterMenuComponent, selector: "kendo-grid-filter-menu", inputs: { column: "column", filter: "filter", tabIndex: "tabIndex" }, viewQueries: [{ propertyName: "anchor", first: true, predicate: ["anchor"], descendants: true, static: true }, { propertyName: "template", first: true, predicate: ["template"], descendants: true, read: TemplateRef, static: true }], ngImport: i0, template: `
11333
11367
  <a #anchor
11334
11368
  class="k-grid-filter-menu k-grid-header-menu"
@@ -11337,7 +11371,9 @@ FilterMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ve
11337
11371
  (click)="toggle(anchor, template)"
11338
11372
  (keydown.enter)="$event.stopImmediatePropagation()"
11339
11373
  href="#"
11340
- [attr.title]="filterLabel">
11374
+ [attr.title]="filterLabel"
11375
+ [attr.aria-haspopup]="isNavigable ? undefined : 'dialog'"
11376
+ [attr.aria-expanded]="isNavigable ? undefined : false">
11341
11377
  <kendo-icon-wrapper
11342
11378
  name="filter"
11343
11379
  [svgIcon]="filterIcon"></kendo-icon-wrapper>
@@ -11365,7 +11401,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
11365
11401
  (click)="toggle(anchor, template)"
11366
11402
  (keydown.enter)="$event.stopImmediatePropagation()"
11367
11403
  href="#"
11368
- [attr.title]="filterLabel">
11404
+ [attr.title]="filterLabel"
11405
+ [attr.aria-haspopup]="isNavigable ? undefined : 'dialog'"
11406
+ [attr.aria-expanded]="isNavigable ? undefined : false">
11369
11407
  <kendo-icon-wrapper
11370
11408
  name="filter"
11371
11409
  [svgIcon]="filterIcon"></kendo-icon-wrapper>
@@ -11382,7 +11420,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
11382
11420
  </ng-template>
11383
11421
  `
11384
11422
  }]
11385
- }], ctorParameters: function () { return [{ type: FilterService }, { type: SinglePopupService }, { type: ContextService }, { type: NavigationService }]; }, propDecorators: { column: [{
11423
+ }], ctorParameters: function () {
11424
+ return [{ type: FilterService }, { type: SinglePopupService }, { type: ContextService }, { type: NavigationService }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: IdService, decorators: [{
11425
+ type: Optional
11426
+ }] }];
11427
+ }, propDecorators: { column: [{
11386
11428
  type: Input
11387
11429
  }], filter: [{
11388
11430
  type: Input
@@ -11440,7 +11482,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
11440
11482
  /**
11441
11483
  * @hidden
11442
11484
  */
11443
- const ColunnMenuErrorMessages = {
11485
+ const ColumnMenuErrorMessages = {
11444
11486
  autoSizeColumn: 'The auto size column does not work with enabled virtual columns',
11445
11487
  autoSizeAllColumns: 'The auto size all columns does not work with enabled virtual columns'
11446
11488
  };
@@ -11548,6 +11590,9 @@ class ColumnMenuItemComponent {
11548
11590
  this.collapse = new EventEmitter();
11549
11591
  this.contentState = 'collapsed';
11550
11592
  }
11593
+ ngAfterViewInit() {
11594
+ this.contentTemplate && (this.contentId = `k-${guid()}`);
11595
+ }
11551
11596
  ngOnChanges(changes) {
11552
11597
  if (changes.expanded) {
11553
11598
  this.updateContentState();
@@ -11582,13 +11627,14 @@ ColumnMenuItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0"
11582
11627
  [class.k-selected]="selected"
11583
11628
  [class.k-disabled]="disabled"
11584
11629
  role="button"
11585
- [attr.aria-expanded]="expanded">
11630
+ [attr.aria-expanded]="expanded"
11631
+ [attr.aria-controls]="expanded ? contentId : undefined">
11586
11632
  <kendo-icon-wrapper
11587
11633
  [name]="icon"
11588
11634
  [svgIcon]="svgIcon"></kendo-icon-wrapper>
11589
11635
  {{ text }}
11590
11636
  </div>
11591
- <div *ngIf="contentTemplate" [@state]="contentState" [style.overflow]="'hidden'" class="k-columnmenu-item-content">
11637
+ <div *ngIf="contentTemplate" [attr.id]="contentId" [@state]="contentState" [style.overflow]="'hidden'" class="k-columnmenu-item-content">
11592
11638
  <ng-container [ngTemplateOutlet]="contentTemplate.templateRef">
11593
11639
  </ng-container>
11594
11640
  <div>
@@ -11650,13 +11696,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
11650
11696
  [class.k-selected]="selected"
11651
11697
  [class.k-disabled]="disabled"
11652
11698
  role="button"
11653
- [attr.aria-expanded]="expanded">
11699
+ [attr.aria-expanded]="expanded"
11700
+ [attr.aria-controls]="expanded ? contentId : undefined">
11654
11701
  <kendo-icon-wrapper
11655
11702
  [name]="icon"
11656
11703
  [svgIcon]="svgIcon"></kendo-icon-wrapper>
11657
11704
  {{ text }}
11658
11705
  </div>
11659
- <div *ngIf="contentTemplate" [@state]="contentState" [style.overflow]="'hidden'" class="k-columnmenu-item-content">
11706
+ <div *ngIf="contentTemplate" [attr.id]="contentId" [@state]="contentState" [style.overflow]="'hidden'" class="k-columnmenu-item-content">
11660
11707
  <ng-container [ngTemplateOutlet]="contentTemplate.templateRef">
11661
11708
  </ng-container>
11662
11709
  <div>
@@ -12032,14 +12079,79 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
12032
12079
  type: Input
12033
12080
  }] } });
12034
12081
 
12082
+ /**
12083
+ * @hidden
12084
+ */
12085
+ class ColumnListKeyboardNavigation {
12086
+ constructor(renderer) {
12087
+ this.renderer = renderer;
12088
+ this.activeIndex = 0;
12089
+ }
12090
+ next() {
12091
+ this.toggle(this.activeIndex, false);
12092
+ this.activeIndex = Math.min(this.activeIndex + 1, this.items.length - 1);
12093
+ this.toggle(this.activeIndex, true);
12094
+ }
12095
+ prev() {
12096
+ this.toggle(this.activeIndex, false);
12097
+ this.activeIndex = Math.max(this.activeIndex - 1, 0);
12098
+ this.toggle(this.activeIndex, true);
12099
+ }
12100
+ toggle(index, active) {
12101
+ var _a;
12102
+ const element = (_a = this.items[index]) === null || _a === void 0 ? void 0 : _a.host.nativeElement;
12103
+ element && this.renderer.setAttribute(this.items[index].host.nativeElement, 'tabindex', active ? '0' : '-1');
12104
+ active && element && element.focus();
12105
+ }
12106
+ toggleCheckedState() {
12107
+ this.items[this.activeIndex].host.nativeElement.firstElementChild.click();
12108
+ }
12109
+ }
12110
+ ColumnListKeyboardNavigation.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnListKeyboardNavigation, deps: [{ token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Injectable });
12111
+ ColumnListKeyboardNavigation.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnListKeyboardNavigation });
12112
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnListKeyboardNavigation, decorators: [{
12113
+ type: Injectable
12114
+ }], ctorParameters: function () { return [{ type: i0.Renderer2 }]; } });
12115
+
12116
+ /**
12117
+ * @hidden
12118
+ */
12119
+ class ColumnMenuChooserItemCheckedDirective {
12120
+ constructor(host, renderer) {
12121
+ this.host = host;
12122
+ this.renderer = renderer;
12123
+ this.checkedChangeSub = new Subscription();
12124
+ }
12125
+ ngAfterViewInit() {
12126
+ this.checkedChangeSub.add(this.renderer.listen(this.host.nativeElement.firstElementChild, 'change', (e) => {
12127
+ this.kendoColumnMenuChooserItemChecked = e.target.checked;
12128
+ }));
12129
+ }
12130
+ ngOnDestroy() {
12131
+ this.checkedChangeSub.unsubscribe();
12132
+ }
12133
+ }
12134
+ ColumnMenuChooserItemCheckedDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnMenuChooserItemCheckedDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
12135
+ ColumnMenuChooserItemCheckedDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.12", type: ColumnMenuChooserItemCheckedDirective, selector: "[kendoColumnMenuChooserItemChecked]", inputs: { kendoColumnMenuChooserItemChecked: "kendoColumnMenuChooserItemChecked" }, host: { properties: { "attr.aria-checked": "this.kendoColumnMenuChooserItemChecked" } }, ngImport: i0 });
12136
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnMenuChooserItemCheckedDirective, decorators: [{
12137
+ type: Directive,
12138
+ args: [{ selector: '[kendoColumnMenuChooserItemChecked]' }]
12139
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }]; }, propDecorators: { kendoColumnMenuChooserItemChecked: [{
12140
+ type: HostBinding,
12141
+ args: ['attr.aria-checked']
12142
+ }, {
12143
+ type: Input
12144
+ }] } });
12145
+
12035
12146
  /**
12036
12147
  * @hidden
12037
12148
  */
12038
12149
  class ColumnListComponent {
12039
- constructor(element, ngZone, renderer) {
12150
+ constructor(element, ngZone, renderer, listNavigationService) {
12040
12151
  this.element = element;
12041
12152
  this.ngZone = ngZone;
12042
12153
  this.renderer = renderer;
12154
+ this.listNavigationService = listNavigationService;
12043
12155
  this.reset = new EventEmitter();
12044
12156
  this.apply = new EventEmitter();
12045
12157
  this.columnChange = new EventEmitter();
@@ -12047,10 +12159,28 @@ class ColumnListComponent {
12047
12159
  this.allowHideAll = false;
12048
12160
  this.actionsClass = 'k-actions k-actions-stretched k-actions-horizontal';
12049
12161
  this.unlockedCount = 0;
12162
+ this.domSubscriptions = new Subscription();
12163
+ this.onKeydown = (e) => {
12164
+ if (e.keyCode !== Keys.Tab) {
12165
+ e.preventDefault();
12166
+ }
12167
+ if (e.keyCode === Keys.ArrowDown) {
12168
+ this.listNavigationService.next();
12169
+ }
12170
+ else if (e.keyCode === Keys.ArrowUp) {
12171
+ this.listNavigationService.prev();
12172
+ }
12173
+ else if (e.keyCode === Keys.Space && e.target.classList.contains('k-column-list-item')) {
12174
+ this.listNavigationService.toggleCheckedState();
12175
+ }
12176
+ };
12050
12177
  }
12051
12178
  get className() {
12052
12179
  return true;
12053
12180
  }
12181
+ isChecked(checkbox) {
12182
+ return checkbox.checked;
12183
+ }
12054
12184
  set columns(value) {
12055
12185
  this._columns = value.filter(column => column.includeInChooser !== false);
12056
12186
  this.allColumns = value;
@@ -12068,12 +12198,21 @@ class ColumnListComponent {
12068
12198
  return;
12069
12199
  }
12070
12200
  this.ngZone.runOutsideAngular(() => {
12071
- this.domSubscriptions = this.renderer.listen(this.element.nativeElement, 'click', (e) => {
12072
- if (hasClasses(e.target, 'k-checkbox')) {
12201
+ this.domSubscriptions.add(this.renderer.listen(this.element.nativeElement, 'click', (e) => {
12202
+ const closestItem = e.target.closest('.k-column-list-item');
12203
+ if (closestItem) {
12204
+ const checkbox = closestItem.querySelector('.k-checkbox');
12205
+ const index = parseInt(checkbox.getAttribute('data-index'), 10);
12206
+ if (e.target === checkbox) {
12207
+ closestItem.focus();
12208
+ }
12209
+ else {
12210
+ e.preventDefault();
12211
+ checkbox.checked = !checkbox.checked;
12212
+ }
12073
12213
  if (this.autoSync) {
12074
- const index = parseInt(e.target.getAttribute('data-index'), 10);
12075
12214
  const column = this.columns[index];
12076
- const hidden = !e.target.checked;
12215
+ const hidden = !checkbox.checked;
12077
12216
  if (Boolean(column.hidden) !== hidden) {
12078
12217
  this.ngZone.run(() => {
12079
12218
  column.hidden = hidden;
@@ -12084,10 +12223,20 @@ class ColumnListComponent {
12084
12223
  else {
12085
12224
  this.updateDisabled();
12086
12225
  }
12226
+ if (index !== this.listNavigationService.activeIndex) {
12227
+ this.listNavigationService.toggle(this.listNavigationService.activeIndex, false);
12228
+ this.listNavigationService.activeIndex = index;
12229
+ this.listNavigationService.toggle(index, true);
12230
+ }
12087
12231
  }
12088
- });
12232
+ }));
12233
+ this.domSubscriptions.add(this.renderer.listen(this.element.nativeElement, 'keydown', this.onKeydown));
12089
12234
  });
12090
12235
  }
12236
+ ngAfterViewInit() {
12237
+ this.listNavigationService.items = this.options.toArray();
12238
+ this.listNavigationService.toggle(0, true);
12239
+ }
12091
12240
  ngOnChanges(changes) {
12092
12241
  if (!this.service) {
12093
12242
  return;
@@ -12100,9 +12249,7 @@ class ColumnListComponent {
12100
12249
  }
12101
12250
  }
12102
12251
  ngOnDestroy() {
12103
- if (this.domSubscriptions) {
12104
- this.domSubscriptions();
12105
- }
12252
+ this.domSubscriptions.unsubscribe();
12106
12253
  }
12107
12254
  cancelChanges() {
12108
12255
  this.forEachCheckBox((element, index) => {
@@ -12130,6 +12277,9 @@ class ColumnListComponent {
12130
12277
  if (this.service) {
12131
12278
  this.service.menuTabbingService.firstFocusable.focus();
12132
12279
  }
12280
+ else {
12281
+ this.listNavigationService.toggle(this.listNavigationService.activeIndex, true);
12282
+ }
12133
12283
  }
12134
12284
  }
12135
12285
  forEachCheckBox(callback) {
@@ -12176,35 +12326,94 @@ class ColumnListComponent {
12176
12326
  }
12177
12327
  }
12178
12328
  }
12179
- ColumnListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnListComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
12180
- ColumnListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: ColumnListComponent, selector: "kendo-grid-columnlist", inputs: { columns: "columns", autoSync: "autoSync", allowHideAll: "allowHideAll", applyText: "applyText", resetText: "resetText", actionsClass: "actionsClass", isLast: "isLast", isExpanded: "isExpanded", service: "service" }, outputs: { reset: "reset", apply: "apply", columnChange: "columnChange" }, host: { properties: { "class.k-column-list-wrapper": "this.className" } }, viewQueries: [{ propertyName: "applyButton", first: true, predicate: ["applyButton"], descendants: true }], usesOnChanges: true, ngImport: i0, template: `
12181
- <div class="k-column-list">
12182
- <label *ngFor="let column of columns; let index = index;" class='k-column-list-item'>
12183
- <input class="k-checkbox k-checkbox-md k-rounded-md" type="checkbox" [attr.data-index]="index" [checked]="!column.hidden" [disabled]="isDisabled(column)" /><span class="k-checkbox-label">{{ column.displayTitle }}</span>
12329
+ ColumnListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnListComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: ColumnListKeyboardNavigation }], target: i0.ɵɵFactoryTarget.Component });
12330
+ ColumnListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: ColumnListComponent, selector: "kendo-grid-columnlist", inputs: { columns: "columns", autoSync: "autoSync", ariaLabel: "ariaLabel", allowHideAll: "allowHideAll", applyText: "applyText", resetText: "resetText", actionsClass: "actionsClass", isLast: "isLast", isExpanded: "isExpanded", service: "service" }, outputs: { reset: "reset", apply: "apply", columnChange: "columnChange" }, host: { properties: { "class.k-column-list-wrapper": "this.className" } }, providers: [ColumnListKeyboardNavigation], viewQueries: [{ propertyName: "resetButton", first: true, predicate: ["resetButton"], descendants: true }, { propertyName: "applyButton", first: true, predicate: ["applyButton"], descendants: true }, { propertyName: "options", predicate: ColumnMenuChooserItemCheckedDirective, descendants: true }], usesOnChanges: true, ngImport: i0, template: `
12331
+ <div
12332
+ class="k-column-list"
12333
+ role="listbox"
12334
+ aria-multiselectable="true"
12335
+ [attr.aria-label]="ariaLabel">
12336
+ <label
12337
+ *ngFor="let column of columns; let index = index;"
12338
+ class='k-column-list-item'
12339
+ [kendoColumnMenuChooserItemChecked]="!column.hidden"
12340
+ role="option">
12341
+ <input
12342
+ class="k-checkbox k-checkbox-md k-rounded-md"
12343
+ type="checkbox"
12344
+ [attr.data-index]="index"
12345
+ [checked]="!column.hidden"
12346
+ tabindex="-1"
12347
+ [attr.aria-hidden]="true"
12348
+ [disabled]="isDisabled(column)" />
12349
+ <span class="k-checkbox-label">{{ column.displayTitle }}</span>
12184
12350
  </label>
12185
12351
  </div>
12186
12352
  <div [ngClass]="actionsClass" *ngIf="!autoSync">
12187
- <button #applyButton type="button" (keydown.tab)="onTab($event)" class="k-button k-button-solid-primary k-button-solid k-button-md k-rounded-md k-button-rectangle" (click)="applyChanges()">{{ applyText }}</button>
12188
- <button type="button" class="k-button k-button-solid-base k-button-solid k-button-md k-rounded-md k-button-rectangle" (click)="cancelChanges()">{{ resetText }}</button>
12353
+ <button
12354
+ #applyButton
12355
+ type="button"
12356
+ class="k-button k-button-solid-primary k-button-solid k-button-md k-rounded-md k-button-rectangle"
12357
+ (click)="applyChanges()"
12358
+ (keydown.enter)="$event.preventDefault(); $event.stopPropagation; applyChanges();"
12359
+ (keydown.space)="$event.preventDefault(); $event.stopPropagation; applyChanges();">{{ applyText }}</button>
12360
+ <button
12361
+ #resetButton
12362
+ type="button"
12363
+ (keydown.tab)="onTab($event)"
12364
+ class="k-button k-button-solid-base k-button-solid k-button-md k-rounded-md k-button-rectangle"
12365
+ (click)="cancelChanges()"
12366
+ (keydown.enter)="$event.preventDefault(); $event.stopPropagation; cancelChanges();"
12367
+ (keydown.space)="$event.preventDefault(); $event.stopPropagation; cancelChanges();">{{ resetText }}</button>
12189
12368
  </div>
12190
- `, isInline: true, directives: [{ type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
12369
+ `, isInline: true, directives: [{ type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: ColumnMenuChooserItemCheckedDirective, selector: "[kendoColumnMenuChooserItemChecked]", inputs: ["kendoColumnMenuChooserItemChecked"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
12191
12370
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnListComponent, decorators: [{
12192
12371
  type: Component,
12193
12372
  args: [{
12194
12373
  selector: 'kendo-grid-columnlist',
12374
+ providers: [ColumnListKeyboardNavigation],
12195
12375
  template: `
12196
- <div class="k-column-list">
12197
- <label *ngFor="let column of columns; let index = index;" class='k-column-list-item'>
12198
- <input class="k-checkbox k-checkbox-md k-rounded-md" type="checkbox" [attr.data-index]="index" [checked]="!column.hidden" [disabled]="isDisabled(column)" /><span class="k-checkbox-label">{{ column.displayTitle }}</span>
12376
+ <div
12377
+ class="k-column-list"
12378
+ role="listbox"
12379
+ aria-multiselectable="true"
12380
+ [attr.aria-label]="ariaLabel">
12381
+ <label
12382
+ *ngFor="let column of columns; let index = index;"
12383
+ class='k-column-list-item'
12384
+ [kendoColumnMenuChooserItemChecked]="!column.hidden"
12385
+ role="option">
12386
+ <input
12387
+ class="k-checkbox k-checkbox-md k-rounded-md"
12388
+ type="checkbox"
12389
+ [attr.data-index]="index"
12390
+ [checked]="!column.hidden"
12391
+ tabindex="-1"
12392
+ [attr.aria-hidden]="true"
12393
+ [disabled]="isDisabled(column)" />
12394
+ <span class="k-checkbox-label">{{ column.displayTitle }}</span>
12199
12395
  </label>
12200
12396
  </div>
12201
12397
  <div [ngClass]="actionsClass" *ngIf="!autoSync">
12202
- <button #applyButton type="button" (keydown.tab)="onTab($event)" class="k-button k-button-solid-primary k-button-solid k-button-md k-rounded-md k-button-rectangle" (click)="applyChanges()">{{ applyText }}</button>
12203
- <button type="button" class="k-button k-button-solid-base k-button-solid k-button-md k-rounded-md k-button-rectangle" (click)="cancelChanges()">{{ resetText }}</button>
12398
+ <button
12399
+ #applyButton
12400
+ type="button"
12401
+ class="k-button k-button-solid-primary k-button-solid k-button-md k-rounded-md k-button-rectangle"
12402
+ (click)="applyChanges()"
12403
+ (keydown.enter)="$event.preventDefault(); $event.stopPropagation; applyChanges();"
12404
+ (keydown.space)="$event.preventDefault(); $event.stopPropagation; applyChanges();">{{ applyText }}</button>
12405
+ <button
12406
+ #resetButton
12407
+ type="button"
12408
+ (keydown.tab)="onTab($event)"
12409
+ class="k-button k-button-solid-base k-button-solid k-button-md k-rounded-md k-button-rectangle"
12410
+ (click)="cancelChanges()"
12411
+ (keydown.enter)="$event.preventDefault(); $event.stopPropagation; cancelChanges();"
12412
+ (keydown.space)="$event.preventDefault(); $event.stopPropagation; cancelChanges();">{{ resetText }}</button>
12204
12413
  </div>
12205
12414
  `
12206
12415
  }]
12207
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: i0.Renderer2 }]; }, propDecorators: { className: [{
12416
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: i0.Renderer2 }, { type: ColumnListKeyboardNavigation }]; }, propDecorators: { className: [{
12208
12417
  type: HostBinding,
12209
12418
  args: ["class.k-column-list-wrapper"]
12210
12419
  }], reset: [{
@@ -12217,6 +12426,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
12217
12426
  type: Input
12218
12427
  }], autoSync: [{
12219
12428
  type: Input
12429
+ }], ariaLabel: [{
12430
+ type: Input
12220
12431
  }], allowHideAll: [{
12221
12432
  type: Input
12222
12433
  }], applyText: [{
@@ -12231,9 +12442,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
12231
12442
  type: Input
12232
12443
  }], service: [{
12233
12444
  type: Input
12445
+ }], resetButton: [{
12446
+ type: ViewChild,
12447
+ args: ['resetButton', { static: false }]
12234
12448
  }], applyButton: [{
12235
12449
  type: ViewChild,
12236
12450
  args: ['applyButton', { static: false }]
12451
+ }], options: [{
12452
+ type: ViewChildren,
12453
+ args: [ColumnMenuChooserItemCheckedDirective]
12237
12454
  }] } });
12238
12455
 
12239
12456
  /**
@@ -12326,6 +12543,7 @@ ColumnMenuChooserComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0
12326
12543
  <kendo-grid-columnlist
12327
12544
  [applyText]="ctx.localization.get('columnsApply')"
12328
12545
  [resetText]="ctx.localization.get('columnsReset')"
12546
+ [ariaLabel]="ctx.localization.get('columns')"
12329
12547
  [columns]="columns"
12330
12548
  [autoSync]="false"
12331
12549
  [allowHideAll]="false"
@@ -12337,7 +12555,7 @@ ColumnMenuChooserComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0
12337
12555
  </kendo-grid-columnlist>
12338
12556
  </ng-template>
12339
12557
  </kendo-grid-columnmenu-item>
12340
- `, isInline: true, components: [{ type: ColumnMenuItemComponent, selector: "kendo-grid-columnmenu-item", inputs: ["icon", "svgIcon", "text", "selected", "disabled", "expanded"], outputs: ["itemClick", "expand", "collapse"] }, { type: ColumnListComponent, selector: "kendo-grid-columnlist", inputs: ["columns", "autoSync", "allowHideAll", "applyText", "resetText", "actionsClass", "isLast", "isExpanded", "service"], outputs: ["reset", "apply", "columnChange"] }], directives: [{ type: ColumnMenuItemContentTemplateDirective, selector: "[kendoGridColumnMenuItemContentTemplate]" }] });
12558
+ `, isInline: true, components: [{ type: ColumnMenuItemComponent, selector: "kendo-grid-columnmenu-item", inputs: ["icon", "svgIcon", "text", "selected", "disabled", "expanded"], outputs: ["itemClick", "expand", "collapse"] }, { type: ColumnListComponent, selector: "kendo-grid-columnlist", inputs: ["columns", "autoSync", "ariaLabel", "allowHideAll", "applyText", "resetText", "actionsClass", "isLast", "isExpanded", "service"], outputs: ["reset", "apply", "columnChange"] }], directives: [{ type: ColumnMenuItemContentTemplateDirective, selector: "[kendoGridColumnMenuItemContentTemplate]" }] });
12341
12559
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnMenuChooserComponent, decorators: [{
12342
12560
  type: Component,
12343
12561
  args: [{
@@ -12354,6 +12572,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
12354
12572
  <kendo-grid-columnlist
12355
12573
  [applyText]="ctx.localization.get('columnsApply')"
12356
12574
  [resetText]="ctx.localization.get('columnsReset')"
12575
+ [ariaLabel]="ctx.localization.get('columns')"
12357
12576
  [columns]="columns"
12358
12577
  [autoSync]="false"
12359
12578
  [allowHideAll]="false"
@@ -12757,7 +12976,7 @@ class ColumnMenuAutoSizeColumnComponent extends ColumnMenuItemBase {
12757
12976
  ngOnInit() {
12758
12977
  const isVirtualColumns = this.ctx.grid.columnMenuTemplate && this.ctx.grid.virtualColumns;
12759
12978
  if (isVirtualColumns && isDevMode()) {
12760
- console.warn(ColunnMenuErrorMessages.autoSizeColumn);
12979
+ console.warn(ColumnMenuErrorMessages.autoSizeColumn);
12761
12980
  }
12762
12981
  }
12763
12982
  /**
@@ -12824,7 +13043,7 @@ class ColumnMenuAutoSizeAllColumnsComponent extends ColumnMenuItemBase {
12824
13043
  ngOnInit() {
12825
13044
  const isVirtualColumns = this.ctx.grid.columnMenuTemplate && this.ctx.grid.virtualColumns;
12826
13045
  if (isVirtualColumns && isDevMode()) {
12827
- console.warn(ColunnMenuErrorMessages.autoSizeAllColumns);
13046
+ console.warn(ColumnMenuErrorMessages.autoSizeAllColumns);
12828
13047
  }
12829
13048
  }
12830
13049
  /**
@@ -12861,6 +13080,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
12861
13080
  }], ctorParameters: function () { return [{ type: ContextService }]; } });
12862
13081
 
12863
13082
  const POPUP_CLASS = 'k-grid-columnmenu-popup';
13083
+ let id$2 = 0;
13084
+ const getId = (gridId) => `${gridId}-column-menu-${id$2++}`;
12864
13085
  /**
12865
13086
  * Represents the [column menu](slug:columnmenu_grid#toc-customizing-the-position) component.
12866
13087
  *
@@ -12873,7 +13094,7 @@ const POPUP_CLASS = 'k-grid-columnmenu-popup';
12873
13094
  * </kendo-grid>
12874
13095
  */
12875
13096
  class ColumnMenuComponent {
12876
- constructor(navigationService, popupService, service, ctx, renderer, cdr, columnInfoService) {
13097
+ constructor(navigationService, popupService, service, ctx, renderer, cdr, columnInfoService, idService) {
12877
13098
  this.navigationService = navigationService;
12878
13099
  this.popupService = popupService;
12879
13100
  this.service = service;
@@ -12881,6 +13102,7 @@ class ColumnMenuComponent {
12881
13102
  this.renderer = renderer;
12882
13103
  this.cdr = cdr;
12883
13104
  this.columnInfoService = columnInfoService;
13105
+ this.idService = idService;
12884
13106
  /**
12885
13107
  * @hidden
12886
13108
  */
@@ -12926,7 +13148,7 @@ class ColumnMenuComponent {
12926
13148
  */
12927
13149
  this.expandedPosition = false;
12928
13150
  this.moreVerticalIcon = moreVerticalIcon;
12929
- this.closeSubscription = service.closeMenu.subscribe(this.close.bind(this));
13151
+ this.closeSubscription = service.closeMenu.subscribe(this.close.bind(this, true));
12930
13152
  }
12931
13153
  /**
12932
13154
  * @hidden
@@ -12952,6 +13174,12 @@ class ColumnMenuComponent {
12952
13174
  get hasFilter() {
12953
13175
  return hasFilter(this.settings, this.column);
12954
13176
  }
13177
+ /**
13178
+ * @hidden
13179
+ */
13180
+ get isNavigable() {
13181
+ return this.navigationService.tableEnabled;
13182
+ }
12955
13183
  /**
12956
13184
  * @hidden
12957
13185
  */
@@ -12968,7 +13196,7 @@ class ColumnMenuComponent {
12968
13196
  * @hidden
12969
13197
  */
12970
13198
  onApply(changed) {
12971
- this.close();
13199
+ this.close(true);
12972
13200
  if (changed.length) {
12973
13201
  this.cdr.markForCheck();
12974
13202
  this.columnInfoService.changeVisibility(changed);
@@ -13014,11 +13242,11 @@ class ColumnMenuComponent {
13014
13242
  if (this.ctx.grid.virtualColumns && isDevMode()) {
13015
13243
  if (this.settings.autoSizeAllColumns) {
13016
13244
  this.settings.autoSizeAllColumns = false;
13017
- console.warn(ColunnMenuErrorMessages.autoSizeAllColumns);
13245
+ console.warn(ColumnMenuErrorMessages.autoSizeAllColumns);
13018
13246
  }
13019
13247
  if (this.settings.autoSizeColumn) {
13020
13248
  this.settings.autoSizeColumn = false;
13021
- console.warn(ColunnMenuErrorMessages.autoSizeColumn);
13249
+ console.warn(ColumnMenuErrorMessages.autoSizeColumn);
13022
13250
  }
13023
13251
  }
13024
13252
  this.service.menuTabbingService.isTabbedInterface = this.settings.view === 'tabbed' ? true : false;
@@ -13037,7 +13265,7 @@ class ColumnMenuComponent {
13037
13265
  * @hidden
13038
13266
  */
13039
13267
  toggle(e, anchor, template) {
13040
- var _a;
13268
+ var _a, _b;
13041
13269
  if (e) {
13042
13270
  e.preventDefault();
13043
13271
  e.stopImmediatePropagation();
@@ -13046,12 +13274,32 @@ class ColumnMenuComponent {
13046
13274
  this.expandedColumns = this.getExpandedState(this.settings.columnChooser);
13047
13275
  this.expandedPosition = this.getExpandedState(this.settings.setColumnPosition);
13048
13276
  this.popupRef = this.popupService.open(anchor, template, this.popupRef, POPUP_CLASS);
13049
- if (this.popupRef && this.settings.view === 'tabbed') {
13050
- this.renderer.addClass(this.popupRef.popupElement.querySelector('.k-grid-columnmenu-popup'), 'k-column-menu-tabbed');
13051
- this.cdr.detectChanges();
13052
- (_a = this.tabStrip) === null || _a === void 0 ? void 0 : _a.selectTab(0);
13277
+ // Needed as changes to 'popupRef' and 'popupId' are not reflected
13278
+ // automatically when the Popup is closed by clicking outside the anchor
13279
+ const ariaRoot = this.isNavigable ? anchor.closest('.k-table-th') : anchor;
13280
+ if (this.popupRef) {
13281
+ this.popupRef.popup.instance.close.pipe(take(1)).subscribe(() => {
13282
+ this.popupRef = null;
13283
+ const ariaRoot = this.isNavigable ? anchor.closest('.k-table-th') : anchor;
13284
+ ariaRoot && this.renderer.removeAttribute(ariaRoot, 'aria-controls');
13285
+ ariaRoot && this.renderer.setAttribute(ariaRoot, 'aria-expanded', 'false');
13286
+ });
13287
+ const popupAriaElement = this.popupRef.popupElement.querySelector('.k-grid-columnmenu-popup');
13288
+ if (popupAriaElement) {
13289
+ const popupId = getId((_a = this.idService) === null || _a === void 0 ? void 0 : _a.gridId());
13290
+ this.renderer.setAttribute(popupAriaElement, 'id', popupId);
13291
+ this.renderer.setAttribute(popupAriaElement, 'role', 'dialog');
13292
+ this.renderer.setAttribute(popupAriaElement, 'aria-label', this.columnMenuTitle);
13293
+ ariaRoot && this.renderer.setAttribute(ariaRoot, 'aria-controls', popupId);
13294
+ ariaRoot && this.renderer.setAttribute(ariaRoot, 'aria-expanded', 'true');
13295
+ }
13296
+ if (this.settings.view === 'tabbed') {
13297
+ this.renderer.addClass(this.popupRef.popupElement.querySelector('.k-grid-columnmenu-popup'), 'k-column-menu-tabbed');
13298
+ this.cdr.detectChanges();
13299
+ (_b = this.tabStrip) === null || _b === void 0 ? void 0 : _b.selectTab(0);
13300
+ }
13053
13301
  }
13054
- if (!this.popupRef) {
13302
+ else {
13055
13303
  if (this.navigationService.tableEnabled) {
13056
13304
  this.navigationService.focusCell(0, this.column.leafIndex);
13057
13305
  }
@@ -13063,9 +13311,13 @@ class ColumnMenuComponent {
13063
13311
  /**
13064
13312
  * @hidden
13065
13313
  */
13066
- close() {
13314
+ close(triggerFocus = false) {
13067
13315
  this.popupService.destroy();
13068
13316
  this.popupRef = null;
13317
+ this.cdr.markForCheck();
13318
+ if (!triggerFocus) {
13319
+ return;
13320
+ }
13069
13321
  if (this.navigationService.tableEnabled) {
13070
13322
  this.navigationService.focusCell(0, this.column.leafIndex);
13071
13323
  }
@@ -13085,7 +13337,7 @@ class ColumnMenuComponent {
13085
13337
  return typeof (menuItemSettings) === 'object' ? menuItemSettings.expanded : false;
13086
13338
  }
13087
13339
  }
13088
- ColumnMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnMenuComponent, deps: [{ token: NavigationService }, { token: SinglePopupService }, { token: ColumnMenuService }, { token: ContextService }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: ColumnInfoService }], target: i0.ɵɵFactoryTarget.Component });
13340
+ ColumnMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnMenuComponent, deps: [{ token: NavigationService }, { token: SinglePopupService }, { token: ColumnMenuService }, { token: ContextService }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: ColumnInfoService }, { token: IdService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
13089
13341
  ColumnMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: ColumnMenuComponent, selector: "kendo-grid-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: [
13090
13342
  ColumnMenuService,
13091
13343
  MenuTabbingService
@@ -13097,7 +13349,9 @@ ColumnMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ve
13097
13349
  (keydown.enter)="$event.stopImmediatePropagation()"
13098
13350
  href="#"
13099
13351
  [tabindex]="tabIndex"
13100
- [attr.title]="columnMenuTitle">
13352
+ [attr.title]="columnMenuTitle"
13353
+ [attr.aria-expanded]="isNavigable ? undefined: false"
13354
+ [attr.aria-haspopup]="isNavigable ? undefined : 'dialog'">
13101
13355
  <kendo-icon-wrapper
13102
13356
  name="more-vertical"
13103
13357
  [svgIcon]="moreVerticalIcon"></kendo-icon-wrapper>
@@ -13110,7 +13364,7 @@ ColumnMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ve
13110
13364
  </ng-template>
13111
13365
  <ng-template #defaultTemplate>
13112
13366
  <kendo-grid-columnmenu-container
13113
- (keydown.escape)="close()"
13367
+ (keydown.escape)="close(true)"
13114
13368
  (keydown.enter)="$event.stopImmediatePropagation()">
13115
13369
  <kendo-grid-columnmenu-sort #sortItem [kendoGridColumnMenuItem]="sortItem" *ngIf="hasSort" [service]="service">
13116
13370
  </kendo-grid-columnmenu-sort>
@@ -13162,7 +13416,7 @@ ColumnMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ve
13162
13416
  </kendo-grid-columnmenu-container>
13163
13417
  </ng-template>
13164
13418
  <ng-template #tabbedInterfaceTemplate>
13165
- <kendo-tabstrip #tabstrip (keydown.escape)="close()">
13419
+ <kendo-tabstrip #tabstrip (keydown.escape)="close(true)">
13166
13420
  <kendo-tabstrip-tab *ngIf="hasFilter">
13167
13421
  <ng-template kendoTabTitle>
13168
13422
  <kendo-icon-wrapper
@@ -13249,7 +13503,7 @@ ColumnMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ve
13249
13503
  </kendo-tabstrip-tab>
13250
13504
  </kendo-tabstrip>
13251
13505
  </ng-template>
13252
- `, isInline: true, components: [{ type: i3.IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }, { type: ColumnMenuContainerComponent, selector: "kendo-grid-columnmenu-container" }, { type: ColumnMenuSortComponent, selector: "kendo-grid-columnmenu-sort" }, { type: ColumnMenuLockComponent, selector: "kendo-grid-columnmenu-lock" }, { type: ColumnMenuStickComponent, selector: "kendo-grid-columnmenu-stick" }, { type: ColumnMenuPositionComponent, selector: "kendo-grid-columnmenu-position", inputs: ["expanded", "showLock", "showStick", "isLast"], outputs: ["expand", "collapse"] }, { type: ColumnMenuChooserComponent, selector: "kendo-grid-columnmenu-chooser", inputs: ["expanded", "isLast"], outputs: ["expand", "collapse"] }, { type: ColumnMenuAutoSizeColumnComponent, selector: "kendo-grid-columnmenu-autosize-column", inputs: ["column"] }, { type: ColumnMenuAutoSizeAllColumnsComponent, selector: "kendo-grid-columnmenu-autosize-all-columns" }, { type: ColumnMenuFilterComponent, selector: "kendo-grid-columnmenu-filter", inputs: ["expanded", "isLast"], outputs: ["expand", "collapse"] }, { type: i16.TabStripComponent, selector: "kendo-tabstrip", inputs: ["height", "animate", "tabAlignment", "tabPosition", "keepTabContent", "closable", "scrollable", "closeIcon", "closeIconClass", "closeSVGIcon"], outputs: ["tabSelect", "tabClose", "tabScroll"], exportAs: ["kendoTabStrip"] }, { type: i16.TabStripTabComponent, selector: "kendo-tabstrip-tab", inputs: ["title", "disabled", "cssClass", "cssStyle", "selected", "closable", "closeIcon", "closeIconClass", "closeSVGIcon"], exportAs: ["kendoTabStripTab"] }, { type: FilterMenuContainerComponent, selector: "kendo-grid-filter-menu-container", inputs: ["column", "isLast", "isExpanded", "menuTabbingService", "filter", "actionsClass"], outputs: ["close"] }, { type: ColumnListComponent, selector: "kendo-grid-columnlist", inputs: ["columns", "autoSync", "allowHideAll", "applyText", "resetText", "actionsClass", "isLast", "isExpanded", "service"], outputs: ["reset", "apply", "columnChange"] }], directives: [{ type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: ColumnMenuItemDirective, selector: "[kendoGridColumnMenuItem]", inputs: ["kendoGridColumnMenuItem"] }, { type: i16.TabTitleDirective, selector: "[kendoTabTitle]" }, { type: i16.TabContentDirective, selector: "[kendoTabContent]" }] });
13506
+ `, isInline: true, components: [{ type: i3.IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }, { type: ColumnMenuContainerComponent, selector: "kendo-grid-columnmenu-container" }, { type: ColumnMenuSortComponent, selector: "kendo-grid-columnmenu-sort" }, { type: ColumnMenuLockComponent, selector: "kendo-grid-columnmenu-lock" }, { type: ColumnMenuStickComponent, selector: "kendo-grid-columnmenu-stick" }, { type: ColumnMenuPositionComponent, selector: "kendo-grid-columnmenu-position", inputs: ["expanded", "showLock", "showStick", "isLast"], outputs: ["expand", "collapse"] }, { type: ColumnMenuChooserComponent, selector: "kendo-grid-columnmenu-chooser", inputs: ["expanded", "isLast"], outputs: ["expand", "collapse"] }, { type: ColumnMenuAutoSizeColumnComponent, selector: "kendo-grid-columnmenu-autosize-column", inputs: ["column"] }, { type: ColumnMenuAutoSizeAllColumnsComponent, selector: "kendo-grid-columnmenu-autosize-all-columns" }, { type: ColumnMenuFilterComponent, selector: "kendo-grid-columnmenu-filter", inputs: ["expanded", "isLast"], outputs: ["expand", "collapse"] }, { type: i17.TabStripComponent, selector: "kendo-tabstrip", inputs: ["height", "animate", "tabAlignment", "tabPosition", "keepTabContent", "closable", "scrollable", "closeIcon", "closeIconClass", "closeSVGIcon"], outputs: ["tabSelect", "tabClose", "tabScroll"], exportAs: ["kendoTabStrip"] }, { type: i17.TabStripTabComponent, selector: "kendo-tabstrip-tab", inputs: ["title", "disabled", "cssClass", "cssStyle", "selected", "closable", "closeIcon", "closeIconClass", "closeSVGIcon"], exportAs: ["kendoTabStripTab"] }, { type: FilterMenuContainerComponent, selector: "kendo-grid-filter-menu-container", inputs: ["column", "isLast", "isExpanded", "menuTabbingService", "filter", "actionsClass"], outputs: ["close"] }, { type: ColumnListComponent, selector: "kendo-grid-columnlist", inputs: ["columns", "autoSync", "ariaLabel", "allowHideAll", "applyText", "resetText", "actionsClass", "isLast", "isExpanded", "service"], outputs: ["reset", "apply", "columnChange"] }], directives: [{ type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: ColumnMenuItemDirective, selector: "[kendoGridColumnMenuItem]", inputs: ["kendoGridColumnMenuItem"] }, { type: i17.TabTitleDirective, selector: "[kendoTabTitle]" }, { type: i17.TabContentDirective, selector: "[kendoTabContent]" }] });
13253
13507
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnMenuComponent, decorators: [{
13254
13508
  type: Component,
13255
13509
  args: [{
@@ -13266,7 +13520,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
13266
13520
  (keydown.enter)="$event.stopImmediatePropagation()"
13267
13521
  href="#"
13268
13522
  [tabindex]="tabIndex"
13269
- [attr.title]="columnMenuTitle">
13523
+ [attr.title]="columnMenuTitle"
13524
+ [attr.aria-expanded]="isNavigable ? undefined: false"
13525
+ [attr.aria-haspopup]="isNavigable ? undefined : 'dialog'">
13270
13526
  <kendo-icon-wrapper
13271
13527
  name="more-vertical"
13272
13528
  [svgIcon]="moreVerticalIcon"></kendo-icon-wrapper>
@@ -13279,7 +13535,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
13279
13535
  </ng-template>
13280
13536
  <ng-template #defaultTemplate>
13281
13537
  <kendo-grid-columnmenu-container
13282
- (keydown.escape)="close()"
13538
+ (keydown.escape)="close(true)"
13283
13539
  (keydown.enter)="$event.stopImmediatePropagation()">
13284
13540
  <kendo-grid-columnmenu-sort #sortItem [kendoGridColumnMenuItem]="sortItem" *ngIf="hasSort" [service]="service">
13285
13541
  </kendo-grid-columnmenu-sort>
@@ -13331,7 +13587,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
13331
13587
  </kendo-grid-columnmenu-container>
13332
13588
  </ng-template>
13333
13589
  <ng-template #tabbedInterfaceTemplate>
13334
- <kendo-tabstrip #tabstrip (keydown.escape)="close()">
13590
+ <kendo-tabstrip #tabstrip (keydown.escape)="close(true)">
13335
13591
  <kendo-tabstrip-tab *ngIf="hasFilter">
13336
13592
  <ng-template kendoTabTitle>
13337
13593
  <kendo-icon-wrapper
@@ -13420,7 +13676,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
13420
13676
  </ng-template>
13421
13677
  `
13422
13678
  }]
13423
- }], ctorParameters: function () { return [{ type: NavigationService }, { type: SinglePopupService }, { type: ColumnMenuService }, { type: ContextService }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: ColumnInfoService }]; }, propDecorators: { standalone: [{
13679
+ }], ctorParameters: function () {
13680
+ return [{ type: NavigationService }, { type: SinglePopupService }, { type: ColumnMenuService }, { type: ContextService }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: ColumnInfoService }, { type: IdService, decorators: [{
13681
+ type: Optional
13682
+ }] }];
13683
+ }, propDecorators: { standalone: [{
13424
13684
  type: HostBinding,
13425
13685
  args: ['class.k-grid-column-menu-standalone']
13426
13686
  }, {
@@ -14363,7 +14623,7 @@ class LogicalCellDirective {
14363
14623
  this.renderer.addClass(el, 'k-focus');
14364
14624
  }
14365
14625
  if (this.headerLabelText) {
14366
- el.setAttribute('aria-label', '');
14626
+ el.removeAttribute('aria-label');
14367
14627
  }
14368
14628
  }
14369
14629
  else {
@@ -15061,7 +15321,7 @@ const modifierKeys = ['alt', 'ctrl', 'shift', 'meta'];
15061
15321
  * @hidden
15062
15322
  */
15063
15323
  class HeaderComponent {
15064
- constructor(popupService, hint, cue, reorderService, idService, sortService, columnInfoService, cd, contextService) {
15324
+ constructor(popupService, hint, cue, reorderService, idService, sortService, columnInfoService, cd, contextService, navigationService) {
15065
15325
  this.popupService = popupService;
15066
15326
  this.hint = hint;
15067
15327
  this.cue = cue;
@@ -15071,6 +15331,7 @@ class HeaderComponent {
15071
15331
  this.columnInfoService = columnInfoService;
15072
15332
  this.cd = cd;
15073
15333
  this.contextService = contextService;
15334
+ this.navigationService = navigationService;
15074
15335
  this.columns = [];
15075
15336
  this.groups = [];
15076
15337
  this.sort = new Array();
@@ -15205,6 +15466,9 @@ class HeaderComponent {
15205
15466
  return 'descending';
15206
15467
  }
15207
15468
  }
15469
+ get isNavigable() {
15470
+ return this.navigationService.tableEnabled;
15471
+ }
15208
15472
  /**
15209
15473
  *
15210
15474
  * @param column
@@ -15432,7 +15696,7 @@ class HeaderComponent {
15432
15696
  });
15433
15697
  }
15434
15698
  }
15435
- HeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: HeaderComponent, deps: [{ token: SinglePopupService }, { token: DragHintService }, { token: DropCueService }, { token: ColumnReorderService }, { token: IdService }, { token: SortService }, { token: ColumnInfoService }, { token: i0.ChangeDetectorRef }, { token: ContextService }], target: i0.ɵɵFactoryTarget.Component });
15699
+ HeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: HeaderComponent, deps: [{ token: SinglePopupService }, { token: DragHintService }, { token: DropCueService }, { token: ColumnReorderService }, { token: IdService }, { token: SortService }, { token: ColumnInfoService }, { token: i0.ChangeDetectorRef }, { token: ContextService }, { token: NavigationService }], target: i0.ɵɵFactoryTarget.Component });
15436
15700
  HeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: HeaderComponent, selector: "[kendoGridHeader]", inputs: { totalColumnLevels: "totalColumnLevels", columns: "columns", groups: "groups", detailTemplate: "detailTemplate", scrollable: "scrollable", filterable: "filterable", sort: "sort", filter: "filter", sortable: "sortable", groupable: "groupable", lockedColumnsCount: "lockedColumnsCount", resizable: "resizable", reorderable: "reorderable", columnMenu: "columnMenu", columnMenuTemplate: "columnMenuTemplate", totalColumnsCount: "totalColumnsCount", totalColumns: "totalColumns", tabIndex: "tabIndex", size: "size" }, host: { properties: { "class.k-grid-header": "this.headerClass", "class.k-table-thead": "this.hostClass" } }, viewQueries: [{ propertyName: "dropTargets", predicate: DropTargetDirective, descendants: true }, { propertyName: "filterMenus", predicate: FilterMenuComponent, descendants: true }, { propertyName: "columnMenus", predicate: ColumnMenuComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: `
15437
15701
  <ng-container>
15438
15702
  <tr *ngFor="let i of columnLevels; let levelIndex = index"
@@ -15484,7 +15748,9 @@ HeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", versio
15484
15748
  [ngStyle]="column.sticky ? addStickyStyles(column) : column.headerStyle"
15485
15749
  [attr.rowspan]="column.rowspan(totalColumnLevels)"
15486
15750
  [attr.colspan]="column.colspan"
15487
- [attr.aria-haspopup]="(showFilterMenu || showColumnMenu(column)) ? 'dialog' : undefined">
15751
+ [attr.aria-haspopup]="isNavigable && (showFilterMenu || showColumnMenu(column)) ? 'dialog' : undefined"
15752
+ [attr.aria-expanded]="isNavigable && (showFilterMenu || showColumnMenu(column)) ? false : undefined"
15753
+ [attr.aria-keyshortcuts]="isNavigable ? 'Alt + ArrowDown' : undefined">
15488
15754
 
15489
15755
  <ng-container *ngIf="!isSortable(getColumnComponent(column))">
15490
15756
  <span class="k-cell-inner">
@@ -15706,7 +15972,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
15706
15972
  [ngStyle]="column.sticky ? addStickyStyles(column) : column.headerStyle"
15707
15973
  [attr.rowspan]="column.rowspan(totalColumnLevels)"
15708
15974
  [attr.colspan]="column.colspan"
15709
- [attr.aria-haspopup]="(showFilterMenu || showColumnMenu(column)) ? 'dialog' : undefined">
15975
+ [attr.aria-haspopup]="isNavigable && (showFilterMenu || showColumnMenu(column)) ? 'dialog' : undefined"
15976
+ [attr.aria-expanded]="isNavigable && (showFilterMenu || showColumnMenu(column)) ? false : undefined"
15977
+ [attr.aria-keyshortcuts]="isNavigable ? 'Alt + ArrowDown' : undefined">
15710
15978
 
15711
15979
  <ng-container *ngIf="!isSortable(getColumnComponent(column))">
15712
15980
  <span class="k-cell-inner">
@@ -15874,7 +16142,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
15874
16142
  </ng-container>
15875
16143
  `
15876
16144
  }]
15877
- }], ctorParameters: function () { return [{ type: SinglePopupService }, { type: DragHintService }, { type: DropCueService }, { type: ColumnReorderService }, { type: IdService }, { type: SortService }, { type: ColumnInfoService }, { type: i0.ChangeDetectorRef }, { type: ContextService }]; }, propDecorators: { totalColumnLevels: [{
16145
+ }], ctorParameters: function () { return [{ type: SinglePopupService }, { type: DragHintService }, { type: DropCueService }, { type: ColumnReorderService }, { type: IdService }, { type: SortService }, { type: ColumnInfoService }, { type: i0.ChangeDetectorRef }, { type: ContextService }, { type: NavigationService }]; }, propDecorators: { totalColumnLevels: [{
15878
16146
  type: Input
15879
16147
  }], columns: [{
15880
16148
  type: Input
@@ -24202,6 +24470,7 @@ class ColumnChooserComponent {
24202
24470
  * @hidden
24203
24471
  */
24204
24472
  toggle(anchor, template) {
24473
+ var _a;
24205
24474
  if (!this.popupRef) {
24206
24475
  const direction = this.ctx.localization.rtl ? 'right' : 'left';
24207
24476
  this.popupRef = this.popupService.open({
@@ -24211,13 +24480,30 @@ class ColumnChooserComponent {
24211
24480
  anchorAlign: { vertical: 'bottom', horizontal: direction },
24212
24481
  popupAlign: { vertical: 'top', horizontal: direction }
24213
24482
  });
24214
- this.renderer.setAttribute(this.popupRef.popupElement, 'dir', this.ctx.localization.rtl ? 'rtl' : 'ltr');
24483
+ const popupElement = (_a = this.popupRef) === null || _a === void 0 ? void 0 : _a.popupElement;
24484
+ if (popupElement) {
24485
+ const popupId = `k-${guid()}`;
24486
+ const popupAriaElement = popupElement.querySelector('.k-popup');
24487
+ this.ngZone.runOutsideAngular(() => {
24488
+ this.escapeListener = this.renderer.listen(popupAriaElement, 'keydown', (e) => {
24489
+ if (e.keyCode === Keys.Escape) {
24490
+ this.close(true);
24491
+ }
24492
+ });
24493
+ });
24494
+ this.renderer.setAttribute(popupElement, 'dir', this.ctx.localization.rtl ? 'rtl' : 'ltr');
24495
+ this.renderer.setAttribute(popupAriaElement, 'id', popupId);
24496
+ this.renderer.setAttribute(popupAriaElement, 'role', 'dialog');
24497
+ this.popupId = popupId;
24498
+ }
24215
24499
  if (!isDocumentAvailable()) {
24216
24500
  return;
24217
24501
  }
24218
24502
  this.ngZone.runOutsideAngular(() => this.closeClick = this.renderer.listen('document', 'click', ({ target }) => {
24219
24503
  if (!closest(target, node => node === this.popupRef.popupElement || node === anchor.element)) {
24220
- this.close();
24504
+ this.ngZone.run(() => {
24505
+ this.close();
24506
+ });
24221
24507
  }
24222
24508
  }));
24223
24509
  }
@@ -24229,7 +24515,7 @@ class ColumnChooserComponent {
24229
24515
  * @hidden
24230
24516
  */
24231
24517
  onApply(changed) {
24232
- this.close();
24518
+ this.close(true);
24233
24519
  if (changed.length) {
24234
24520
  this.changeDetector.markForCheck();
24235
24521
  this.columnInfoService.changeVisibility(changed);
@@ -24242,12 +24528,24 @@ class ColumnChooserComponent {
24242
24528
  this.changeDetector.markForCheck();
24243
24529
  this.columnInfoService.changeVisibility(changed);
24244
24530
  }
24245
- close() {
24531
+ /**
24532
+ * @hidden
24533
+ */
24534
+ onShiftTab(e) {
24535
+ if (e.target.matches('.k-column-list-item')) {
24536
+ e.preventDefault();
24537
+ this.columnList.resetButton.nativeElement.focus();
24538
+ }
24539
+ }
24540
+ close(focusAnchor = false) {
24246
24541
  if (this.popupRef) {
24247
24542
  this.popupRef.close();
24248
24543
  this.popupRef = null;
24544
+ this.changeDetector.markForCheck();
24545
+ this.escapeListener && this.escapeListener();
24249
24546
  }
24250
24547
  this.detachClose();
24548
+ focusAnchor && this.anchor.element.focus();
24251
24549
  }
24252
24550
  detachClose() {
24253
24551
  if (this.closeClick) {
@@ -24257,7 +24555,7 @@ class ColumnChooserComponent {
24257
24555
  }
24258
24556
  }
24259
24557
  ColumnChooserComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnChooserComponent, deps: [{ token: ContextService }, { token: ColumnInfoService }, { token: i1$2.PopupService }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
24260
- ColumnChooserComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: ColumnChooserComponent, selector: "kendo-grid-column-chooser", inputs: { autoSync: "autoSync", allowHideAll: "allowHideAll" }, ngImport: i0, template: `
24558
+ ColumnChooserComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: ColumnChooserComponent, selector: "kendo-grid-column-chooser", inputs: { autoSync: "autoSync", allowHideAll: "allowHideAll" }, viewQueries: [{ propertyName: "anchor", first: true, predicate: ["anchor"], descendants: true }, { propertyName: "columnList", first: true, predicate: ["columnList"], descendants: true }], ngImport: i0, template: `
24261
24559
  <button #anchor
24262
24560
  kendoButton
24263
24561
  type="button"
@@ -24265,20 +24563,27 @@ ColumnChooserComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
24265
24563
  fillMode="flat"
24266
24564
  [attr.title]="ctx.localization.get('columns')"
24267
24565
  icon="columns"
24268
- [svgIcon]="columnsIcon"></button>
24566
+ [svgIcon]="columnsIcon"
24567
+ [attr.aria-haspopup]="'dialog'"
24568
+ [attr.aria-expanded]="!!(popupRef)"
24569
+ [attr.aria-controls]="!!(popupRef) ? popupId : undefined"></button>
24269
24570
  <ng-template #template>
24270
24571
  <span class='k-column-chooser-title'>{{ ctx.localization.get('columns') }}</span>
24271
24572
  <kendo-grid-columnlist
24573
+ #columnList
24272
24574
  [columns]="columns"
24575
+ [ariaLabel]="ctx.localization.get('columns')"
24576
+ [isLast]="true"
24273
24577
  [applyText]="ctx.localization.get('columnsApply')"
24274
24578
  [resetText]="ctx.localization.get('columnsReset')"
24275
24579
  [autoSync]="autoSync"
24276
24580
  [allowHideAll]="allowHideAll"
24277
24581
  (apply)="onApply($event)"
24278
- (columnChange)="onChange($event)">
24582
+ (columnChange)="onChange($event)"
24583
+ (keydown.shift.tab)="onShiftTab($event)">
24279
24584
  </kendo-grid-columnlist>
24280
24585
  </ng-template>
24281
- `, isInline: true, components: [{ type: i4$1.ButtonComponent, selector: "button[kendoButton], span[kendoButton], kendo-button", inputs: ["toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { type: ColumnListComponent, selector: "kendo-grid-columnlist", inputs: ["columns", "autoSync", "allowHideAll", "applyText", "resetText", "actionsClass", "isLast", "isExpanded", "service"], outputs: ["reset", "apply", "columnChange"] }] });
24586
+ `, isInline: true, components: [{ type: i4$1.ButtonComponent, selector: "button[kendoButton], span[kendoButton], kendo-button", inputs: ["toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { type: ColumnListComponent, selector: "kendo-grid-columnlist", inputs: ["columns", "autoSync", "ariaLabel", "allowHideAll", "applyText", "resetText", "actionsClass", "isLast", "isExpanded", "service"], outputs: ["reset", "apply", "columnChange"] }] });
24282
24587
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnChooserComponent, decorators: [{
24283
24588
  type: Component,
24284
24589
  args: [{
@@ -24291,17 +24596,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
24291
24596
  fillMode="flat"
24292
24597
  [attr.title]="ctx.localization.get('columns')"
24293
24598
  icon="columns"
24294
- [svgIcon]="columnsIcon"></button>
24599
+ [svgIcon]="columnsIcon"
24600
+ [attr.aria-haspopup]="'dialog'"
24601
+ [attr.aria-expanded]="!!(popupRef)"
24602
+ [attr.aria-controls]="!!(popupRef) ? popupId : undefined"></button>
24295
24603
  <ng-template #template>
24296
24604
  <span class='k-column-chooser-title'>{{ ctx.localization.get('columns') }}</span>
24297
24605
  <kendo-grid-columnlist
24606
+ #columnList
24298
24607
  [columns]="columns"
24608
+ [ariaLabel]="ctx.localization.get('columns')"
24609
+ [isLast]="true"
24299
24610
  [applyText]="ctx.localization.get('columnsApply')"
24300
24611
  [resetText]="ctx.localization.get('columnsReset')"
24301
24612
  [autoSync]="autoSync"
24302
24613
  [allowHideAll]="allowHideAll"
24303
24614
  (apply)="onApply($event)"
24304
- (columnChange)="onChange($event)">
24615
+ (columnChange)="onChange($event)"
24616
+ (keydown.shift.tab)="onShiftTab($event)">
24305
24617
  </kendo-grid-columnlist>
24306
24618
  </ng-template>
24307
24619
  `
@@ -24310,9 +24622,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
24310
24622
  type: Input
24311
24623
  }], allowHideAll: [{
24312
24624
  type: Input
24625
+ }], anchor: [{
24626
+ type: ViewChild,
24627
+ args: ['anchor']
24628
+ }], columnList: [{
24629
+ type: ViewChild,
24630
+ args: ['columnList']
24313
24631
  }] } });
24314
24632
 
24315
24633
  const COMPONENTS = [
24634
+ ColumnMenuChooserItemCheckedDirective,
24316
24635
  ColumnListComponent,
24317
24636
  ColumnChooserComponent,
24318
24637
  ColumnMenuChooserComponent,
@@ -24355,7 +24674,8 @@ class ColumnMenuModule {
24355
24674
  }
24356
24675
  }
24357
24676
  ColumnMenuModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnMenuModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
24358
- ColumnMenuModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnMenuModule, declarations: [ColumnListComponent,
24677
+ ColumnMenuModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnMenuModule, declarations: [ColumnMenuChooserItemCheckedDirective,
24678
+ ColumnListComponent,
24359
24679
  ColumnChooserComponent,
24360
24680
  ColumnMenuChooserComponent,
24361
24681
  ColumnMenuFilterComponent,
@@ -24370,7 +24690,8 @@ ColumnMenuModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", versio
24370
24690
  ColumnMenuStickComponent,
24371
24691
  ColumnMenuPositionComponent,
24372
24692
  ColumnMenuAutoSizeColumnComponent,
24373
- ColumnMenuAutoSizeAllColumnsComponent], imports: [CommonModule, FilterMenuModule, ButtonModule, TabStripModule], exports: [ColumnListComponent,
24693
+ ColumnMenuAutoSizeAllColumnsComponent], imports: [CommonModule, FilterMenuModule, ButtonModule, TabStripModule], exports: [ColumnMenuChooserItemCheckedDirective,
24694
+ ColumnListComponent,
24374
24695
  ColumnChooserComponent,
24375
24696
  ColumnMenuChooserComponent,
24376
24697
  ColumnMenuFilterComponent,