@progress/kendo-angular-grid 13.4.0-develop.1 → 13.4.0-develop.10

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 (44) 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/cell/autocomplete-filter-cell.component.mjs +1 -1
  21. package/esm2020/filtering/cell/boolean-filter-cell.component.mjs +1 -1
  22. package/esm2020/filtering/cell/filter-cell-operators.component.mjs +1 -1
  23. package/esm2020/filtering/menu/date-filter-menu.component.mjs +1 -1
  24. package/esm2020/filtering/menu/filter-menu-container.component.mjs +2 -2
  25. package/esm2020/filtering/menu/filter-menu-input-wrapper.component.mjs +1 -1
  26. package/esm2020/filtering/menu/filter-menu.component.mjs +52 -10
  27. package/esm2020/filtering/menu/numeric-filter-menu.component.mjs +1 -1
  28. package/esm2020/filtering/menu/string-filter-menu.component.mjs +1 -1
  29. package/esm2020/navigation/logical-cell.directive.mjs +1 -1
  30. package/esm2020/package-metadata.mjs +2 -2
  31. package/esm2020/pager/pager-numeric-buttons.component.mjs +14 -8
  32. package/esm2020/pager/pager-page-sizes.component.mjs +1 -1
  33. package/esm2020/pager/pager.component.mjs +76 -42
  34. package/esm2020/rendering/footer/footer.component.mjs +1 -1
  35. package/esm2020/rendering/groups-expand.directive.mjs +9 -1
  36. package/esm2020/rendering/header/header.component.mjs +31 -21
  37. package/fesm2015/progress-kendo-angular-grid.mjs +914 -547
  38. package/fesm2020/progress-kendo-angular-grid.mjs +915 -556
  39. package/filtering/menu/filter-menu.component.d.ts +13 -4
  40. package/package.json +16 -16
  41. package/pager/pager-numeric-buttons.component.d.ts +2 -1
  42. package/pager/pager.component.d.ts +5 -1
  43. package/rendering/header/header.component.d.ts +4 -1
  44. package/schematics/ngAdd/index.js +3 -3
@@ -3,7 +3,7 @@
3
3
  * Licensed under commercial license. See LICENSE.md in the project root for more information
4
4
  *-------------------------------------------------------------------------------------------*/
5
5
  import * as i0 from '@angular/core';
6
- import { InjectionToken, Component, HostBinding, Input, EventEmitter, Injectable, Optional, Inject, Directive, SkipSelf, QueryList, isDevMode, ContentChildren, ContentChild, forwardRef, Host, Output, SecurityContext, HostListener, ChangeDetectionStrategy, ViewChild, ViewChildren, Self, TemplateRef, Pipe, ViewEncapsulation, NgModule } from '@angular/core';
6
+ import { InjectionToken, Component, HostBinding, Input, EventEmitter, Injectable, Optional, Inject, Directive, SkipSelf, QueryList, isDevMode, ContentChildren, ContentChild, forwardRef, Host, Output, SecurityContext, HostListener, ChangeDetectionStrategy, ElementRef, ViewChild, ViewChildren, Self, TemplateRef, Pipe, ViewEncapsulation, NgModule } from '@angular/core';
7
7
  import * as i1$1 from '@progress/kendo-angular-common';
8
8
  import { isDocumentAvailable, Keys, isPresent as isPresent$1, closest as closest$1, isFocusable as isFocusable$1, anyChanged, isChanged as isChanged$1, KendoInput, guid, hasObservers, ResizeSensorComponent, DraggableModule, EventsModule, ResizeSensorModule } from '@progress/kendo-angular-common';
9
9
  import { merge, of, Subject, from, Subscription, interval, fromEvent, zip as zip$1, BehaviorSubject, Observable } from 'rxjs';
@@ -24,17 +24,17 @@ import { IconsModule } from '@progress/kendo-angular-icons';
24
24
  import { plusIcon, cancelIcon, lockIcon, unlockIcon, insertMiddleIcon, caretAltLeftIcon, caretAltToLeftIcon, caretAltRightIcon, caretAltToRightIcon, sortDescSmallIcon, sortAscSmallIcon, filterIcon, stickIcon, unstickIcon, setColumnPositionIcon, columnsIcon, maxWidthIcon, displayInlineFlexIcon, slidersIcon, moreVerticalIcon, filterClearIcon, reorderIcon, caretAltDownIcon, minusIcon } from '@progress/kendo-svg-icons';
25
25
  import * as i41 from '@progress/kendo-angular-utils';
26
26
  import { DragTargetContainerDirective, DropTargetContainerDirective, DragAndDropModule as DragAndDropModule$1 } from '@progress/kendo-angular-utils';
27
- import * as i4$1 from '@progress/kendo-angular-buttons';
28
- import { ButtonModule, ChipModule, Button } from '@progress/kendo-angular-buttons';
29
- import * as i3$1 from '@progress/kendo-angular-inputs';
30
- import { NumericTextBoxComponent, InputsModule, NumericTextBoxModule } from '@progress/kendo-angular-inputs';
31
27
  import * as i1$4 from '@progress/kendo-angular-dropdowns';
32
28
  import { DropDownListComponent, DropDownListModule, AutoCompleteModule, DropDownsModule } from '@progress/kendo-angular-dropdowns';
33
29
  import * as i5 from '@progress/kendo-angular-label';
34
30
  import { LabelModule } from '@progress/kendo-angular-label';
31
+ import * as i4$1 from '@progress/kendo-angular-buttons';
32
+ import { ButtonModule, ChipModule, Button } from '@progress/kendo-angular-buttons';
33
+ import * as i3$1 from '@progress/kendo-angular-inputs';
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';
@@ -4442,8 +4442,8 @@ const packageMetadata = {
4442
4442
  name: '@progress/kendo-angular-grid',
4443
4443
  productName: 'Kendo UI for Angular',
4444
4444
  productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],
4445
- publishDate: 1692286635,
4446
- version: '13.4.0-develop.1',
4445
+ publishDate: 1692972014,
4446
+ version: '13.4.0-develop.10',
4447
4447
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'
4448
4448
  };
4449
4449
 
@@ -7059,23 +7059,46 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
7059
7059
  type: Input
7060
7060
  }] } });
7061
7061
 
7062
+ // eslint-disable no-access-missing-member
7062
7063
  /**
7063
- * Displays buttons for navigating to the first and to the previous page ([see example](slug:pager_template_grid#toc-using-built-in-pager-components)).
7064
+ * Displays information about the current page and the total number of records ([see example](slug:pager_template_grid#toc-using-built-in-pager-components)).
7064
7065
  */
7065
- class PagerPrevButtonsComponent extends PagerElementComponent {
7066
- constructor(ctx, pagerContext, cd, navigationService) {
7066
+ class PagerInfoComponent extends PagerElementComponent {
7067
+ constructor(ctx, cd, pagerContext) {
7067
7068
  super(ctx, pagerContext, cd);
7068
- this.navigationService = navigationService;
7069
+ this.pagerContext = pagerContext;
7070
+ }
7071
+ /**
7072
+ * @hidden
7073
+ *
7074
+ * @readonly
7075
+ * @type {number}
7076
+ * @memberOf PagerInfoComponent
7077
+ */
7078
+ get maxItems() {
7079
+ return Math.min(this.currentPage * this.pageSize, this.total);
7080
+ }
7081
+ /**
7082
+ * @hidden
7083
+ *
7084
+ * @readonly
7085
+ * @type {number}
7086
+ * @memberOf PagerInfoComponent
7087
+ */
7088
+ get currentPageText() {
7089
+ return this.total ?
7090
+ (this.currentPage - 1) * this.pageSize + 1 :
7091
+ 0;
7069
7092
  }
7070
7093
  /**
7071
7094
  * @hidden
7072
7095
  *
7073
7096
  * @readonly
7074
7097
  * @type {boolean}
7075
- * @memberOf PagerPrevButtonsComponent
7098
+ * @memberOf PagerInfoComponent
7076
7099
  */
7077
- get disabled() {
7078
- return this.currentPage === 1 || !this.total;
7100
+ get classes() {
7101
+ return true;
7079
7102
  }
7080
7103
  onChanges({ total, skip, pageSize }) {
7081
7104
  this.total = total;
@@ -7084,168 +7107,266 @@ class PagerPrevButtonsComponent extends PagerElementComponent {
7084
7107
  this.cd.markForCheck();
7085
7108
  }
7086
7109
  }
7087
- PagerPrevButtonsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerPrevButtonsComponent, deps: [{ token: ContextService }, { token: PagerContextService }, { token: i0.ChangeDetectorRef }, { token: NavigationService }], target: i0.ɵɵFactoryTarget.Component });
7088
- PagerPrevButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: PagerPrevButtonsComponent, selector: "kendo-pager-prev-buttons", usesInheritance: true, ngImport: i0, template: `
7089
- <button
7090
- [kendoGridFocusable]="!disabled"
7091
- kendoButton
7092
- type="button"
7093
- [title]="textFor('pagerFirstPage')"
7094
- [attr.aria-label]="textFor('pagerFirstPage')"
7095
- (click)="currentPage !== 1 ? changePage(0) : false"
7096
- role="button"
7097
- [icon]="prevArrowIcons[0]"
7098
- [svgIcon]="prevArrowSVGIcons[0]"
7099
- class="k-pager-nav k-pager-first"
7100
- [disabled]="disabled"
7101
- fillMode="flat"
7102
- rounded="none"
7103
- [size]="size">
7104
- </button>
7105
- <button
7106
- kendoButton
7107
- [kendoGridFocusable]="!disabled"
7108
- type="button"
7109
- class="k-pager-nav"
7110
- [disabled]="disabled"
7111
- [icon]="prevArrowIcons[1]"
7112
- [svgIcon]="prevArrowSVGIcons[1]"
7113
- fillMode="flat"
7114
- rounded="none"
7115
- [size]="size"
7116
- [title]="textFor('pagerPreviousPage')"
7117
- [attr.aria-label]="textFor('pagerPreviousPage')"
7118
- (click)="currentPage !== 1 ? changePage(currentPage-2) : false">
7119
- </button>
7120
- `, 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"] }], directives: [{ type: FocusableDirective, selector: "[kendoGridFocusable],\n [kendoGridEditCommand],\n [kendoGridRemoveCommand],\n [kendoGridSaveCommand],\n [kendoGridCancelCommand],\n [kendoGridSelectionCheckbox]\n ", inputs: ["kendoGridFocusable"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
7121
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerPrevButtonsComponent, decorators: [{
7110
+ PagerInfoComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerInfoComponent, deps: [{ token: ContextService }, { token: i0.ChangeDetectorRef }, { token: PagerContextService }], target: i0.ɵɵFactoryTarget.Component });
7111
+ PagerInfoComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: PagerInfoComponent, selector: "kendo-pager-info", host: { properties: { "class.k-pager-info": "this.classes", "class.k-label": "this.classes" } }, usesInheritance: true, ngImport: i0, template: `{{currentPageText}} - {{maxItems}} {{textFor('pagerOf')}} {{total}} {{textFor('pagerItems')}}`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
7112
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerInfoComponent, decorators: [{
7122
7113
  type: Component,
7123
7114
  args: [{
7124
7115
  changeDetection: ChangeDetectionStrategy.OnPush,
7125
- selector: 'kendo-pager-prev-buttons',
7126
- template: `
7127
- <button
7128
- [kendoGridFocusable]="!disabled"
7129
- kendoButton
7130
- type="button"
7131
- [title]="textFor('pagerFirstPage')"
7132
- [attr.aria-label]="textFor('pagerFirstPage')"
7133
- (click)="currentPage !== 1 ? changePage(0) : false"
7134
- role="button"
7135
- [icon]="prevArrowIcons[0]"
7136
- [svgIcon]="prevArrowSVGIcons[0]"
7137
- class="k-pager-nav k-pager-first"
7138
- [disabled]="disabled"
7139
- fillMode="flat"
7140
- rounded="none"
7141
- [size]="size">
7142
- </button>
7143
- <button
7144
- kendoButton
7145
- [kendoGridFocusable]="!disabled"
7146
- type="button"
7147
- class="k-pager-nav"
7148
- [disabled]="disabled"
7149
- [icon]="prevArrowIcons[1]"
7150
- [svgIcon]="prevArrowSVGIcons[1]"
7151
- fillMode="flat"
7152
- rounded="none"
7153
- [size]="size"
7154
- [title]="textFor('pagerPreviousPage')"
7155
- [attr.aria-label]="textFor('pagerPreviousPage')"
7156
- (click)="currentPage !== 1 ? changePage(currentPage-2) : false">
7157
- </button>
7158
- `
7116
+ selector: 'kendo-pager-info',
7117
+ template: `{{currentPageText}} - {{maxItems}} {{textFor('pagerOf')}} {{total}} {{textFor('pagerItems')}}`
7159
7118
  }]
7160
- }], ctorParameters: function () { return [{ type: ContextService }, { type: PagerContextService }, { type: i0.ChangeDetectorRef }, { type: NavigationService }]; } });
7119
+ }], ctorParameters: function () { return [{ type: ContextService }, { type: i0.ChangeDetectorRef }, { type: PagerContextService }]; }, propDecorators: { classes: [{
7120
+ type: HostBinding,
7121
+ args: ["class.k-pager-info"]
7122
+ }, {
7123
+ type: HostBinding,
7124
+ args: ["class.k-label"]
7125
+ }] } });
7161
7126
 
7162
7127
  /**
7163
- * Displays numeric buttons to enable navigation between the pages ([see example](slug:pager_template_grid#toc-using-built-in-pager-components)).
7128
+ * @hidden
7164
7129
  */
7165
- class PagerNumericButtonsComponent extends PagerElementComponent {
7166
- constructor(ctx, cd, pagerContext) {
7130
+ class PagerDropDownListDirective {
7131
+ constructor(host) {
7132
+ this.host = host;
7133
+ this.keydownHandler = (e) => {
7134
+ if (e.keyCode === Keys.Escape && this.host.isOpen) {
7135
+ e.stopPropagation();
7136
+ this.host.toggle(false);
7137
+ }
7138
+ };
7139
+ }
7140
+ ngAfterViewInit() {
7141
+ const wrapperElement = this.host.wrapper.nativeElement;
7142
+ wrapperElement.addEventListener('keydown', this.keydownHandler, true);
7143
+ }
7144
+ ngOnDestroy() {
7145
+ this.host.wrapper.nativeElement.removeEventListener('keydown', this.keydownHandler);
7146
+ }
7147
+ }
7148
+ PagerDropDownListDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerDropDownListDirective, deps: [{ token: i1$4.DropDownListComponent }], target: i0.ɵɵFactoryTarget.Directive });
7149
+ PagerDropDownListDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.12", type: PagerDropDownListDirective, selector: "[kendoGridPagerDropDown]", ngImport: i0 });
7150
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerDropDownListDirective, decorators: [{
7151
+ type: Directive,
7152
+ args: [{ selector: '[kendoGridPagerDropDown]' }]
7153
+ }], ctorParameters: function () { return [{ type: i1$4.DropDownListComponent }]; } });
7154
+
7155
+ /**
7156
+ * Displays a drop-down list for the page size selection ([see example](slug:pager_template_grid#toc-using-built-in-pager-components)).
7157
+ */
7158
+ class PagerPageSizesComponent extends PagerElementComponent {
7159
+ constructor(ctx, cd, pagerContext, navigationService) {
7167
7160
  super(ctx, pagerContext, cd);
7168
7161
  this.pagerContext = pagerContext;
7169
- this.numbersWrapClass = true;
7162
+ this.navigationService = navigationService;
7163
+ this._pageSizes = [];
7170
7164
  }
7171
7165
  /**
7172
- * @hidden
7173
- *
7174
- * @readonly
7175
- * @type {number[]}
7176
- * @memberOf PagerNumericButtonsComponent
7166
+ * The page sizes collection. Can be an Array of numbers and/or [`PageSizeItem`](slug:api_grid_pagesizeitem) objects
7167
+ * ([see example]({% slug paging_grid %}#toc-pager-templates))
7177
7168
  */
7178
- get buttons() {
7179
- const result = [];
7180
- for (let idx = this.start; idx <= this.end; idx++) {
7181
- result.push(idx);
7169
+ set pageSizes(pageSizes) {
7170
+ let normalizedItems = [];
7171
+ pageSizes.forEach(item => {
7172
+ if (typeof item === 'number') {
7173
+ normalizedItems.push({
7174
+ text: item.toString(),
7175
+ value: item
7176
+ });
7177
+ }
7178
+ else {
7179
+ normalizedItems.push(item);
7180
+ }
7181
+ });
7182
+ if (this.pageSize && !normalizedItems.some(item => item.value === this.pageSize)) {
7183
+ normalizedItems = [{ text: this.pageSize.toString(), value: this.pageSize }, ...normalizedItems];
7182
7184
  }
7183
- return result;
7185
+ this._pageSizes = normalizedItems;
7186
+ }
7187
+ get pageSizes() {
7188
+ return this._pageSizes;
7184
7189
  }
7185
7190
  /**
7186
7191
  * @hidden
7192
+ *
7193
+ * @readonly
7187
7194
  */
7188
- get end() {
7189
- return Math.min((this.start + this.buttonCount) - 1, this.totalPages);
7195
+ get classes() {
7196
+ return true;
7190
7197
  }
7191
7198
  /**
7192
7199
  * @hidden
7200
+ *
7201
+ * @readonly
7193
7202
  */
7194
- get start() {
7195
- const page = this.currentPage;
7196
- const buttonCount = this.buttonCount;
7197
- if (page > buttonCount) {
7198
- const reminder = (page % buttonCount);
7199
- return (reminder === 0) ? (page - buttonCount) + 1 : (page - reminder) + 1;
7200
- }
7201
- return 1;
7203
+ get showInitialPageSize() {
7204
+ return this.pageSizes
7205
+ .filter(item => {
7206
+ if (typeof item.value === 'number') {
7207
+ return item.value === Number(this.pageSize);
7208
+ }
7209
+ return this.total === Number(this.pageSize);
7210
+ })
7211
+ .length === 0;
7202
7212
  }
7203
7213
  /**
7204
7214
  * @hidden
7205
7215
  */
7206
- pageLabel(num) {
7207
- const pageText = this.textFor('pagerPage');
7208
- if (pageText) {
7209
- return pageText + ' ' + num;
7210
- }
7211
- return num.toString();
7216
+ pageSizeChange(value) {
7217
+ this.pageSize = typeof value === 'number' ? value : this.total;
7218
+ this.pagerContext.changePageSize(this.pageSize);
7212
7219
  }
7213
7220
  /**
7214
7221
  * @hidden
7215
7222
  */
7216
- onSelectChange(e) {
7217
- const target = e.target;
7218
- const valueAsNumber = Number(target.value);
7219
- if (!Number.isNaN(valueAsNumber)) {
7220
- this.changePage(valueAsNumber - 1);
7221
- }
7222
- else {
7223
- if (target.value === 'previousButtons') {
7224
- this.changePage(this.start - 2);
7225
- }
7226
- else {
7227
- this.changePage(this.end);
7228
- }
7229
- }
7223
+ getValue(page) {
7224
+ return typeof page.value === 'number' ? page.value : this.total;
7230
7225
  }
7231
7226
  onChanges({ total, skip, pageSize }) {
7232
7227
  this.total = total;
7233
7228
  this.skip = skip;
7234
- this.pageSize = pageSize;
7229
+ this.pageSize = typeof pageSize === 'number' ? pageSize : this.total;
7235
7230
  this.cd.markForCheck();
7236
7231
  }
7237
7232
  }
7238
- PagerNumericButtonsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerNumericButtonsComponent, deps: [{ token: ContextService }, { token: i0.ChangeDetectorRef }, { token: PagerContextService }], target: i0.ɵɵFactoryTarget.Component });
7239
- PagerNumericButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: PagerNumericButtonsComponent, selector: "kendo-pager-numeric-buttons", inputs: { buttonCount: "buttonCount" }, host: { properties: { "class.k-pager-numbers-wrap": "this.numbersWrapClass" } }, usesInheritance: true, ngImport: i0, template: `
7240
- <select
7241
- class="k-dropdown-list k-dropdown k-picker k-picker-solid k-rounded-md"
7242
- kendoGridFocusable
7243
- [attr.title]="textFor('selectPage')"
7244
- [attr.aria-label]="textFor('selectPage')"
7245
- [ngClass]="{
7246
- 'k-picker-sm': size === 'small',
7247
- 'k-picker-md': size === 'medium' || !size
7248
- }"
7233
+ PagerPageSizesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerPageSizesComponent, deps: [{ token: ContextService }, { token: i0.ChangeDetectorRef }, { token: PagerContextService }, { token: NavigationService }], target: i0.ɵɵFactoryTarget.Component });
7234
+ PagerPageSizesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: PagerPageSizesComponent, selector: "kendo-pager-page-sizes", inputs: { pageSizes: "pageSizes" }, host: { properties: { "class.k-pager-sizes": "this.classes", "class.k-label": "this.classes" } }, usesInheritance: true, ngImport: i0, template: `
7235
+ <kendo-dropdownlist
7236
+ class="k-dropdown"
7237
+ #dropdownlist
7238
+ [size]="size"
7239
+ kendoGridPagerDropDown
7240
+ [tabindex]="0"
7241
+ kendoGridFocusable
7242
+ [data]="pageSizes"
7243
+ textField="text"
7244
+ valueField="value"
7245
+ [valuePrimitive]="true"
7246
+ [value]="pageSize"
7247
+ (valueChange)="pageSizeChange($event)"></kendo-dropdownlist>
7248
+ <kendo-label [for]="dropdownlist" [text]="textFor('pagerItemsPerPage')"></kendo-label>
7249
+ `, isInline: true, components: [{ type: i1$4.DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["showStickyHeader", "iconClass", "loading", "data", "value", "textField", "valueField", "adaptiveMode", "title", "subtitle", "popupSettings", "listHeight", "defaultItem", "disabled", "itemDisabled", "readonly", "filterable", "virtual", "ignoreCase", "delay", "valuePrimitive", "tabindex", "tabIndex", "size", "rounded", "fillMode", "id"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }, { type: i5.LabelComponent, selector: "kendo-label", inputs: ["text", "for", "optional", "labelCssStyle", "labelCssClass"], exportAs: ["kendoLabel"] }], directives: [{ type: PagerDropDownListDirective, selector: "[kendoGridPagerDropDown]" }, { type: FocusableDirective, selector: "[kendoGridFocusable],\n [kendoGridEditCommand],\n [kendoGridRemoveCommand],\n [kendoGridSaveCommand],\n [kendoGridCancelCommand],\n [kendoGridSelectionCheckbox]\n ", inputs: ["kendoGridFocusable"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
7250
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerPageSizesComponent, decorators: [{
7251
+ type: Component,
7252
+ args: [{
7253
+ changeDetection: ChangeDetectionStrategy.OnPush,
7254
+ selector: 'kendo-pager-page-sizes',
7255
+ template: `
7256
+ <kendo-dropdownlist
7257
+ class="k-dropdown"
7258
+ #dropdownlist
7259
+ [size]="size"
7260
+ kendoGridPagerDropDown
7261
+ [tabindex]="0"
7262
+ kendoGridFocusable
7263
+ [data]="pageSizes"
7264
+ textField="text"
7265
+ valueField="value"
7266
+ [valuePrimitive]="true"
7267
+ [value]="pageSize"
7268
+ (valueChange)="pageSizeChange($event)"></kendo-dropdownlist>
7269
+ <kendo-label [for]="dropdownlist" [text]="textFor('pagerItemsPerPage')"></kendo-label>
7270
+ `
7271
+ }]
7272
+ }], ctorParameters: function () { return [{ type: ContextService }, { type: i0.ChangeDetectorRef }, { type: PagerContextService }, { type: NavigationService }]; }, propDecorators: { pageSizes: [{
7273
+ type: Input
7274
+ }], classes: [{
7275
+ type: HostBinding,
7276
+ args: ['class.k-pager-sizes']
7277
+ }, {
7278
+ type: HostBinding,
7279
+ args: ['class.k-label']
7280
+ }] } });
7281
+
7282
+ /**
7283
+ * Displays numeric buttons to enable navigation between the pages ([see example](slug:pager_template_grid#toc-using-built-in-pager-components)).
7284
+ */
7285
+ class PagerNumericButtonsComponent extends PagerElementComponent {
7286
+ constructor(ctx, cd, pagerContext) {
7287
+ super(ctx, pagerContext, cd);
7288
+ this.pagerContext = pagerContext;
7289
+ }
7290
+ /**
7291
+ * @hidden
7292
+ *
7293
+ * @readonly
7294
+ * @type {number[]}
7295
+ * @memberOf PagerNumericButtonsComponent
7296
+ */
7297
+ get buttons() {
7298
+ const result = [];
7299
+ for (let idx = this.start; idx <= this.end; idx++) {
7300
+ result.push(idx);
7301
+ }
7302
+ return result;
7303
+ }
7304
+ /**
7305
+ * @hidden
7306
+ */
7307
+ get end() {
7308
+ return Math.min((this.start + this.buttonCount) - 1, this.totalPages);
7309
+ }
7310
+ /**
7311
+ * @hidden
7312
+ */
7313
+ get start() {
7314
+ const page = this.currentPage;
7315
+ const buttonCount = this.buttonCount;
7316
+ if (page > buttonCount) {
7317
+ const reminder = (page % buttonCount);
7318
+ return (reminder === 0) ? (page - buttonCount) + 1 : (page - reminder) + 1;
7319
+ }
7320
+ return 1;
7321
+ }
7322
+ /**
7323
+ * @hidden
7324
+ */
7325
+ pageLabel(num) {
7326
+ const pageText = this.textFor('pagerPage');
7327
+ if (pageText) {
7328
+ return pageText + ' ' + num;
7329
+ }
7330
+ return num.toString();
7331
+ }
7332
+ /**
7333
+ * @hidden
7334
+ */
7335
+ onSelectChange(e) {
7336
+ const target = e.target;
7337
+ const valueAsNumber = Number(target.value);
7338
+ if (!Number.isNaN(valueAsNumber)) {
7339
+ this.changePage(valueAsNumber - 1);
7340
+ }
7341
+ else {
7342
+ if (target.value === 'previousButtons') {
7343
+ this.changePage(this.start - 2);
7344
+ }
7345
+ else {
7346
+ this.changePage(this.end);
7347
+ }
7348
+ }
7349
+ }
7350
+ onChanges({ total, skip, pageSize }) {
7351
+ this.total = total;
7352
+ this.skip = skip;
7353
+ this.pageSize = pageSize;
7354
+ this.cd.markForCheck();
7355
+ }
7356
+ }
7357
+ PagerNumericButtonsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerNumericButtonsComponent, deps: [{ token: ContextService }, { token: i0.ChangeDetectorRef }, { token: PagerContextService }], target: i0.ɵɵFactoryTarget.Component });
7358
+ PagerNumericButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: PagerNumericButtonsComponent, selector: "kendo-pager-numeric-buttons", inputs: { buttonCount: "buttonCount" }, viewQueries: [{ propertyName: "selectElement", first: true, predicate: ["select"], descendants: true, read: ElementRef }, { propertyName: "numbersElement", first: true, predicate: ["numbers"], descendants: true, read: ElementRef }], usesInheritance: true, ngImport: i0, template: `
7359
+ <select
7360
+ #select
7361
+ class="k-dropdown-list k-dropdown k-picker k-picker-solid k-rounded-md"
7362
+ kendoGridFocusable
7363
+ [style.display]="'none'"
7364
+ [attr.title]="textFor('selectPage')"
7365
+ [attr.aria-label]="textFor('selectPage')"
7366
+ [ngClass]="{
7367
+ 'k-picker-sm': size === 'small',
7368
+ 'k-picker-md': size === 'medium' || !size
7369
+ }"
7249
7370
  (change)="onSelectChange($event)">
7250
7371
  <option *ngIf="start > 1"
7251
7372
  value="previousButtons"
@@ -7266,7 +7387,7 @@ PagerNumericButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12
7266
7387
  [attr.aria-label]="pageLabel(end + 1)">...
7267
7388
  </option>
7268
7389
  </select>
7269
- <div class="k-pager-numbers">
7390
+ <div class="k-pager-numbers" #numbers>
7270
7391
  <button *ngIf="start > 1"
7271
7392
  type="button"
7272
7393
  kendoGridFocusable
@@ -7316,8 +7437,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
7316
7437
  selector: 'kendo-pager-numeric-buttons',
7317
7438
  template: `
7318
7439
  <select
7440
+ #select
7319
7441
  class="k-dropdown-list k-dropdown k-picker k-picker-solid k-rounded-md"
7320
7442
  kendoGridFocusable
7443
+ [style.display]="'none'"
7321
7444
  [attr.title]="textFor('selectPage')"
7322
7445
  [attr.aria-label]="textFor('selectPage')"
7323
7446
  [ngClass]="{
@@ -7344,7 +7467,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
7344
7467
  [attr.aria-label]="pageLabel(end + 1)">...
7345
7468
  </option>
7346
7469
  </select>
7347
- <div class="k-pager-numbers">
7470
+ <div class="k-pager-numbers" #numbers>
7348
7471
  <button *ngIf="start > 1"
7349
7472
  type="button"
7350
7473
  kendoGridFocusable
@@ -7388,13 +7511,116 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
7388
7511
  </div>
7389
7512
  `
7390
7513
  }]
7391
- }], ctorParameters: function () { return [{ type: ContextService }, { type: i0.ChangeDetectorRef }, { type: PagerContextService }]; }, propDecorators: { numbersWrapClass: [{
7392
- type: HostBinding,
7393
- args: ['class.k-pager-numbers-wrap']
7514
+ }], ctorParameters: function () { return [{ type: ContextService }, { type: i0.ChangeDetectorRef }, { type: PagerContextService }]; }, propDecorators: { selectElement: [{
7515
+ type: ViewChild,
7516
+ args: ['select', { read: ElementRef }]
7517
+ }], numbersElement: [{
7518
+ type: ViewChild,
7519
+ args: ['numbers', { read: ElementRef }]
7394
7520
  }], buttonCount: [{
7395
7521
  type: Input
7396
7522
  }] } });
7397
7523
 
7524
+ /**
7525
+ * Displays buttons for navigating to the first and to the previous page ([see example](slug:pager_template_grid#toc-using-built-in-pager-components)).
7526
+ */
7527
+ class PagerPrevButtonsComponent extends PagerElementComponent {
7528
+ constructor(ctx, pagerContext, cd, navigationService) {
7529
+ super(ctx, pagerContext, cd);
7530
+ this.navigationService = navigationService;
7531
+ }
7532
+ /**
7533
+ * @hidden
7534
+ *
7535
+ * @readonly
7536
+ * @type {boolean}
7537
+ * @memberOf PagerPrevButtonsComponent
7538
+ */
7539
+ get disabled() {
7540
+ return this.currentPage === 1 || !this.total;
7541
+ }
7542
+ onChanges({ total, skip, pageSize }) {
7543
+ this.total = total;
7544
+ this.skip = skip;
7545
+ this.pageSize = pageSize;
7546
+ this.cd.markForCheck();
7547
+ }
7548
+ }
7549
+ PagerPrevButtonsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerPrevButtonsComponent, deps: [{ token: ContextService }, { token: PagerContextService }, { token: i0.ChangeDetectorRef }, { token: NavigationService }], target: i0.ɵɵFactoryTarget.Component });
7550
+ PagerPrevButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: PagerPrevButtonsComponent, selector: "kendo-pager-prev-buttons", usesInheritance: true, ngImport: i0, template: `
7551
+ <button
7552
+ [kendoGridFocusable]="!disabled"
7553
+ kendoButton
7554
+ type="button"
7555
+ [title]="textFor('pagerFirstPage')"
7556
+ [attr.aria-label]="textFor('pagerFirstPage')"
7557
+ (click)="currentPage !== 1 ? changePage(0) : false"
7558
+ role="button"
7559
+ [icon]="prevArrowIcons[0]"
7560
+ [svgIcon]="prevArrowSVGIcons[0]"
7561
+ class="k-pager-nav k-pager-first"
7562
+ [disabled]="disabled"
7563
+ fillMode="flat"
7564
+ rounded="none"
7565
+ [size]="size">
7566
+ </button>
7567
+ <button
7568
+ kendoButton
7569
+ [kendoGridFocusable]="!disabled"
7570
+ type="button"
7571
+ class="k-pager-nav"
7572
+ [disabled]="disabled"
7573
+ [icon]="prevArrowIcons[1]"
7574
+ [svgIcon]="prevArrowSVGIcons[1]"
7575
+ fillMode="flat"
7576
+ rounded="none"
7577
+ [size]="size"
7578
+ [title]="textFor('pagerPreviousPage')"
7579
+ [attr.aria-label]="textFor('pagerPreviousPage')"
7580
+ (click)="currentPage !== 1 ? changePage(currentPage-2) : false">
7581
+ </button>
7582
+ `, 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"] }], directives: [{ type: FocusableDirective, selector: "[kendoGridFocusable],\n [kendoGridEditCommand],\n [kendoGridRemoveCommand],\n [kendoGridSaveCommand],\n [kendoGridCancelCommand],\n [kendoGridSelectionCheckbox]\n ", inputs: ["kendoGridFocusable"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
7583
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerPrevButtonsComponent, decorators: [{
7584
+ type: Component,
7585
+ args: [{
7586
+ changeDetection: ChangeDetectionStrategy.OnPush,
7587
+ selector: 'kendo-pager-prev-buttons',
7588
+ template: `
7589
+ <button
7590
+ [kendoGridFocusable]="!disabled"
7591
+ kendoButton
7592
+ type="button"
7593
+ [title]="textFor('pagerFirstPage')"
7594
+ [attr.aria-label]="textFor('pagerFirstPage')"
7595
+ (click)="currentPage !== 1 ? changePage(0) : false"
7596
+ role="button"
7597
+ [icon]="prevArrowIcons[0]"
7598
+ [svgIcon]="prevArrowSVGIcons[0]"
7599
+ class="k-pager-nav k-pager-first"
7600
+ [disabled]="disabled"
7601
+ fillMode="flat"
7602
+ rounded="none"
7603
+ [size]="size">
7604
+ </button>
7605
+ <button
7606
+ kendoButton
7607
+ [kendoGridFocusable]="!disabled"
7608
+ type="button"
7609
+ class="k-pager-nav"
7610
+ [disabled]="disabled"
7611
+ [icon]="prevArrowIcons[1]"
7612
+ [svgIcon]="prevArrowSVGIcons[1]"
7613
+ fillMode="flat"
7614
+ rounded="none"
7615
+ [size]="size"
7616
+ [title]="textFor('pagerPreviousPage')"
7617
+ [attr.aria-label]="textFor('pagerPreviousPage')"
7618
+ (click)="currentPage !== 1 ? changePage(currentPage-2) : false">
7619
+ </button>
7620
+ `
7621
+ }]
7622
+ }], ctorParameters: function () { return [{ type: ContextService }, { type: PagerContextService }, { type: i0.ChangeDetectorRef }, { type: NavigationService }]; } });
7623
+
7398
7624
  /**
7399
7625
  * @hidden
7400
7626
  */
@@ -7566,296 +7792,76 @@ class PagerNextButtonsComponent extends PagerElementComponent {
7566
7792
  }
7567
7793
  PagerNextButtonsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerNextButtonsComponent, deps: [{ token: ContextService }, { token: PagerContextService }, { token: i0.ChangeDetectorRef }, { token: NavigationService }], target: i0.ɵɵFactoryTarget.Component });
7568
7794
  PagerNextButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: PagerNextButtonsComponent, selector: "kendo-pager-next-buttons", usesInheritance: true, ngImport: i0, template: `
7569
- <button
7570
- kendoButton
7571
- [kendoGridFocusable]="!disabled"
7572
- type="button"
7573
- [size]="size"
7574
- [icon]="nextArrowIcons[0]"
7575
- [svgIcon]="nextArrowSVGIcons[0]"
7576
- fillMode="flat"
7577
- rounded="none"
7578
- class="k-pager-nav"
7579
- [disabled]="disabled"
7580
- [title]="textFor('pagerNextPage')"
7581
- [attr.aria-label]="textFor('pagerNextPage')"
7582
- (click)="currentPage !== totalPages ? changePage(currentPage) : false">
7583
- </button>
7584
- <button
7585
- kendoButton
7586
- [kendoGridFocusable]="!disabled"
7587
- type="button"
7588
- [size]="size"
7589
- [icon]="nextArrowIcons[1]"
7590
- [svgIcon]="nextArrowSVGIcons[1]"
7591
- fillMode="flat"
7592
- rounded="none"
7593
- class="k-pager-nav k-pager-last"
7594
- [disabled]="disabled"
7595
- [title]="textFor('pagerLastPage')"
7596
- [attr.aria-label]="textFor('pagerLastPage')"
7597
- (click)="currentPage !== totalPages ? changePage(totalPages-1) : false">
7598
- </button>
7599
- `, 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"] }], directives: [{ type: FocusableDirective, selector: "[kendoGridFocusable],\n [kendoGridEditCommand],\n [kendoGridRemoveCommand],\n [kendoGridSaveCommand],\n [kendoGridCancelCommand],\n [kendoGridSelectionCheckbox]\n ", inputs: ["kendoGridFocusable"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
7600
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerNextButtonsComponent, decorators: [{
7601
- type: Component,
7602
- args: [{
7603
- changeDetection: ChangeDetectionStrategy.OnPush,
7604
- selector: 'kendo-pager-next-buttons',
7605
- template: `
7606
- <button
7607
- kendoButton
7608
- [kendoGridFocusable]="!disabled"
7609
- type="button"
7610
- [size]="size"
7611
- [icon]="nextArrowIcons[0]"
7612
- [svgIcon]="nextArrowSVGIcons[0]"
7613
- fillMode="flat"
7614
- rounded="none"
7615
- class="k-pager-nav"
7616
- [disabled]="disabled"
7617
- [title]="textFor('pagerNextPage')"
7618
- [attr.aria-label]="textFor('pagerNextPage')"
7619
- (click)="currentPage !== totalPages ? changePage(currentPage) : false">
7620
- </button>
7621
- <button
7622
- kendoButton
7623
- [kendoGridFocusable]="!disabled"
7624
- type="button"
7625
- [size]="size"
7626
- [icon]="nextArrowIcons[1]"
7627
- [svgIcon]="nextArrowSVGIcons[1]"
7628
- fillMode="flat"
7629
- rounded="none"
7630
- class="k-pager-nav k-pager-last"
7631
- [disabled]="disabled"
7632
- [title]="textFor('pagerLastPage')"
7633
- [attr.aria-label]="textFor('pagerLastPage')"
7634
- (click)="currentPage !== totalPages ? changePage(totalPages-1) : false">
7635
- </button>
7636
- `
7637
- }]
7638
- }], ctorParameters: function () { return [{ type: ContextService }, { type: PagerContextService }, { type: i0.ChangeDetectorRef }, { type: NavigationService }]; } });
7639
-
7640
- // eslint-disable no-access-missing-member
7641
- /**
7642
- * Displays information about the current page and the total number of records ([see example](slug:pager_template_grid#toc-using-built-in-pager-components)).
7643
- */
7644
- class PagerInfoComponent extends PagerElementComponent {
7645
- constructor(ctx, cd, pagerContext) {
7646
- super(ctx, pagerContext, cd);
7647
- this.pagerContext = pagerContext;
7648
- }
7649
- /**
7650
- * @hidden
7651
- *
7652
- * @readonly
7653
- * @type {number}
7654
- * @memberOf PagerInfoComponent
7655
- */
7656
- get maxItems() {
7657
- return Math.min(this.currentPage * this.pageSize, this.total);
7658
- }
7659
- /**
7660
- * @hidden
7661
- *
7662
- * @readonly
7663
- * @type {number}
7664
- * @memberOf PagerInfoComponent
7665
- */
7666
- get currentPageText() {
7667
- return this.total ?
7668
- (this.currentPage - 1) * this.pageSize + 1 :
7669
- 0;
7670
- }
7671
- /**
7672
- * @hidden
7673
- *
7674
- * @readonly
7675
- * @type {boolean}
7676
- * @memberOf PagerInfoComponent
7677
- */
7678
- get classes() {
7679
- return true;
7680
- }
7681
- onChanges({ total, skip, pageSize }) {
7682
- this.total = total;
7683
- this.skip = skip;
7684
- this.pageSize = pageSize;
7685
- this.cd.markForCheck();
7686
- }
7687
- }
7688
- PagerInfoComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerInfoComponent, deps: [{ token: ContextService }, { token: i0.ChangeDetectorRef }, { token: PagerContextService }], target: i0.ɵɵFactoryTarget.Component });
7689
- PagerInfoComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: PagerInfoComponent, selector: "kendo-pager-info", host: { properties: { "class.k-pager-info": "this.classes", "class.k-label": "this.classes" } }, usesInheritance: true, ngImport: i0, template: `{{currentPageText}} - {{maxItems}} {{textFor('pagerOf')}} {{total}} {{textFor('pagerItems')}}`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
7690
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerInfoComponent, decorators: [{
7691
- type: Component,
7692
- args: [{
7693
- changeDetection: ChangeDetectionStrategy.OnPush,
7694
- selector: 'kendo-pager-info',
7695
- template: `{{currentPageText}} - {{maxItems}} {{textFor('pagerOf')}} {{total}} {{textFor('pagerItems')}}`
7696
- }]
7697
- }], ctorParameters: function () { return [{ type: ContextService }, { type: i0.ChangeDetectorRef }, { type: PagerContextService }]; }, propDecorators: { classes: [{
7698
- type: HostBinding,
7699
- args: ["class.k-pager-info"]
7700
- }, {
7701
- type: HostBinding,
7702
- args: ["class.k-label"]
7703
- }] } });
7704
-
7705
- /**
7706
- * @hidden
7707
- */
7708
- class PagerDropDownListDirective {
7709
- constructor(host) {
7710
- this.host = host;
7711
- this.keydownHandler = (e) => {
7712
- if (e.keyCode === Keys.Escape && this.host.isOpen) {
7713
- e.stopPropagation();
7714
- this.host.toggle(false);
7715
- }
7716
- };
7717
- }
7718
- ngAfterViewInit() {
7719
- const wrapperElement = this.host.wrapper.nativeElement;
7720
- wrapperElement.addEventListener('keydown', this.keydownHandler, true);
7721
- }
7722
- ngOnDestroy() {
7723
- this.host.wrapper.nativeElement.removeEventListener('keydown', this.keydownHandler);
7724
- }
7725
- }
7726
- PagerDropDownListDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerDropDownListDirective, deps: [{ token: i1$4.DropDownListComponent }], target: i0.ɵɵFactoryTarget.Directive });
7727
- PagerDropDownListDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.12", type: PagerDropDownListDirective, selector: "[kendoGridPagerDropDown]", ngImport: i0 });
7728
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerDropDownListDirective, decorators: [{
7729
- type: Directive,
7730
- args: [{ selector: '[kendoGridPagerDropDown]' }]
7731
- }], ctorParameters: function () { return [{ type: i1$4.DropDownListComponent }]; } });
7732
-
7733
- /**
7734
- * Displays a drop-down list for the page size selection ([see example](slug:pager_template_grid#toc-using-built-in-pager-components)).
7735
- */
7736
- class PagerPageSizesComponent extends PagerElementComponent {
7737
- constructor(ctx, cd, pagerContext, navigationService) {
7738
- super(ctx, pagerContext, cd);
7739
- this.pagerContext = pagerContext;
7740
- this.navigationService = navigationService;
7741
- this._pageSizes = [];
7742
- }
7743
- /**
7744
- * The page sizes collection. Can be an Array of numbers and/or [`PageSizeItem`](slug:api_grid_pagesizeitem) objects
7745
- * ([see example]({% slug paging_grid %}#toc-pager-templates))
7746
- */
7747
- set pageSizes(pageSizes) {
7748
- let normalizedItems = [];
7749
- pageSizes.forEach(item => {
7750
- if (typeof item === 'number') {
7751
- normalizedItems.push({
7752
- text: item.toString(),
7753
- value: item
7754
- });
7755
- }
7756
- else {
7757
- normalizedItems.push(item);
7758
- }
7759
- });
7760
- if (this.pageSize && !normalizedItems.some(item => item.value === this.pageSize)) {
7761
- normalizedItems = [{ text: this.pageSize.toString(), value: this.pageSize }, ...normalizedItems];
7762
- }
7763
- this._pageSizes = normalizedItems;
7764
- }
7765
- get pageSizes() {
7766
- return this._pageSizes;
7767
- }
7768
- /**
7769
- * @hidden
7770
- *
7771
- * @readonly
7772
- */
7773
- get classes() {
7774
- return true;
7775
- }
7776
- /**
7777
- * @hidden
7778
- *
7779
- * @readonly
7780
- */
7781
- get showInitialPageSize() {
7782
- return this.pageSizes
7783
- .filter(item => {
7784
- if (typeof item.value === 'number') {
7785
- return item.value === Number(this.pageSize);
7786
- }
7787
- return this.total === Number(this.pageSize);
7788
- })
7789
- .length === 0;
7790
- }
7791
- /**
7792
- * @hidden
7793
- */
7794
- pageSizeChange(value) {
7795
- this.pageSize = typeof value === 'number' ? value : this.total;
7796
- this.pagerContext.changePageSize(this.pageSize);
7797
- }
7798
- /**
7799
- * @hidden
7800
- */
7801
- getValue(page) {
7802
- return typeof page.value === 'number' ? page.value : this.total;
7803
- }
7804
- onChanges({ total, skip, pageSize }) {
7805
- this.total = total;
7806
- this.skip = skip;
7807
- this.pageSize = typeof pageSize === 'number' ? pageSize : this.total;
7808
- this.cd.markForCheck();
7809
- }
7810
- }
7811
- PagerPageSizesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerPageSizesComponent, deps: [{ token: ContextService }, { token: i0.ChangeDetectorRef }, { token: PagerContextService }, { token: NavigationService }], target: i0.ɵɵFactoryTarget.Component });
7812
- PagerPageSizesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: PagerPageSizesComponent, selector: "kendo-pager-page-sizes", inputs: { pageSizes: "pageSizes" }, host: { properties: { "class.k-pager-sizes": "this.classes", "class.k-label": "this.classes" } }, usesInheritance: true, ngImport: i0, template: `
7813
- <kendo-dropdownlist
7814
- class="k-dropdown"
7815
- #dropdownlist
7795
+ <button
7796
+ kendoButton
7797
+ [kendoGridFocusable]="!disabled"
7798
+ type="button"
7816
7799
  [size]="size"
7817
- kendoGridPagerDropDown
7818
- [tabindex]="0"
7819
- kendoGridFocusable
7820
- [data]="pageSizes"
7821
- textField="text"
7822
- valueField="value"
7823
- [valuePrimitive]="true"
7824
- [value]="pageSize"
7825
- (valueChange)="pageSizeChange($event)"></kendo-dropdownlist>
7826
- <kendo-label [for]="dropdownlist" [text]="textFor('pagerItemsPerPage')"></kendo-label>
7827
- `, isInline: true, components: [{ type: i1$4.DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["iconClass", "loading", "data", "value", "textField", "valueField", "adaptiveMode", "title", "subtitle", "popupSettings", "listHeight", "defaultItem", "disabled", "itemDisabled", "readonly", "filterable", "virtual", "ignoreCase", "delay", "valuePrimitive", "tabindex", "tabIndex", "size", "rounded", "fillMode", "id"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }, { type: i5.LabelComponent, selector: "kendo-label", inputs: ["text", "for", "optional", "labelCssStyle", "labelCssClass"], exportAs: ["kendoLabel"] }], directives: [{ type: PagerDropDownListDirective, selector: "[kendoGridPagerDropDown]" }, { type: FocusableDirective, selector: "[kendoGridFocusable],\n [kendoGridEditCommand],\n [kendoGridRemoveCommand],\n [kendoGridSaveCommand],\n [kendoGridCancelCommand],\n [kendoGridSelectionCheckbox]\n ", inputs: ["kendoGridFocusable"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
7828
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerPageSizesComponent, decorators: [{
7800
+ [icon]="nextArrowIcons[0]"
7801
+ [svgIcon]="nextArrowSVGIcons[0]"
7802
+ fillMode="flat"
7803
+ rounded="none"
7804
+ class="k-pager-nav"
7805
+ [disabled]="disabled"
7806
+ [title]="textFor('pagerNextPage')"
7807
+ [attr.aria-label]="textFor('pagerNextPage')"
7808
+ (click)="currentPage !== totalPages ? changePage(currentPage) : false">
7809
+ </button>
7810
+ <button
7811
+ kendoButton
7812
+ [kendoGridFocusable]="!disabled"
7813
+ type="button"
7814
+ [size]="size"
7815
+ [icon]="nextArrowIcons[1]"
7816
+ [svgIcon]="nextArrowSVGIcons[1]"
7817
+ fillMode="flat"
7818
+ rounded="none"
7819
+ class="k-pager-nav k-pager-last"
7820
+ [disabled]="disabled"
7821
+ [title]="textFor('pagerLastPage')"
7822
+ [attr.aria-label]="textFor('pagerLastPage')"
7823
+ (click)="currentPage !== totalPages ? changePage(totalPages-1) : false">
7824
+ </button>
7825
+ `, 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"] }], directives: [{ type: FocusableDirective, selector: "[kendoGridFocusable],\n [kendoGridEditCommand],\n [kendoGridRemoveCommand],\n [kendoGridSaveCommand],\n [kendoGridCancelCommand],\n [kendoGridSelectionCheckbox]\n ", inputs: ["kendoGridFocusable"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
7826
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerNextButtonsComponent, decorators: [{
7829
7827
  type: Component,
7830
7828
  args: [{
7831
7829
  changeDetection: ChangeDetectionStrategy.OnPush,
7832
- selector: 'kendo-pager-page-sizes',
7830
+ selector: 'kendo-pager-next-buttons',
7833
7831
  template: `
7834
- <kendo-dropdownlist
7835
- class="k-dropdown"
7836
- #dropdownlist
7832
+ <button
7833
+ kendoButton
7834
+ [kendoGridFocusable]="!disabled"
7835
+ type="button"
7837
7836
  [size]="size"
7838
- kendoGridPagerDropDown
7839
- [tabindex]="0"
7840
- kendoGridFocusable
7841
- [data]="pageSizes"
7842
- textField="text"
7843
- valueField="value"
7844
- [valuePrimitive]="true"
7845
- [value]="pageSize"
7846
- (valueChange)="pageSizeChange($event)"></kendo-dropdownlist>
7847
- <kendo-label [for]="dropdownlist" [text]="textFor('pagerItemsPerPage')"></kendo-label>
7837
+ [icon]="nextArrowIcons[0]"
7838
+ [svgIcon]="nextArrowSVGIcons[0]"
7839
+ fillMode="flat"
7840
+ rounded="none"
7841
+ class="k-pager-nav"
7842
+ [disabled]="disabled"
7843
+ [title]="textFor('pagerNextPage')"
7844
+ [attr.aria-label]="textFor('pagerNextPage')"
7845
+ (click)="currentPage !== totalPages ? changePage(currentPage) : false">
7846
+ </button>
7847
+ <button
7848
+ kendoButton
7849
+ [kendoGridFocusable]="!disabled"
7850
+ type="button"
7851
+ [size]="size"
7852
+ [icon]="nextArrowIcons[1]"
7853
+ [svgIcon]="nextArrowSVGIcons[1]"
7854
+ fillMode="flat"
7855
+ rounded="none"
7856
+ class="k-pager-nav k-pager-last"
7857
+ [disabled]="disabled"
7858
+ [title]="textFor('pagerLastPage')"
7859
+ [attr.aria-label]="textFor('pagerLastPage')"
7860
+ (click)="currentPage !== totalPages ? changePage(totalPages-1) : false">
7861
+ </button>
7848
7862
  `
7849
7863
  }]
7850
- }], ctorParameters: function () { return [{ type: ContextService }, { type: i0.ChangeDetectorRef }, { type: PagerContextService }, { type: NavigationService }]; }, propDecorators: { pageSizes: [{
7851
- type: Input
7852
- }], classes: [{
7853
- type: HostBinding,
7854
- args: ['class.k-pager-sizes']
7855
- }, {
7856
- type: HostBinding,
7857
- args: ['class.k-label']
7858
- }] } });
7864
+ }], ctorParameters: function () { return [{ type: ContextService }, { type: PagerContextService }, { type: i0.ChangeDetectorRef }, { type: NavigationService }]; } });
7859
7865
 
7860
7866
  /**
7861
7867
  * @hidden
@@ -7886,18 +7892,33 @@ class PagerComponent {
7886
7892
  if (this.template || !element) {
7887
7893
  return;
7888
7894
  }
7889
- const width = element.offsetWidth;
7890
- if (width < RESPONSIVE_BREAKPOINT_MEDIUM) {
7891
- this.renderer.removeClass(element, 'k-pager-mobile-md');
7892
- this.renderer.addClass(element, 'k-pager-mobile-sm');
7893
- }
7894
- else if (width >= RESPONSIVE_BREAKPOINT_MEDIUM && width < RESPONSIVE_BREAKPOINT_LARGE) {
7895
- this.renderer.addClass(element, 'k-pager-mobile-md');
7896
- this.renderer.removeClass(element, 'k-pager-mobile-sm');
7897
- }
7898
- else {
7899
- this.clearResponsiveClasses();
7900
- }
7895
+ this.zone.runOutsideAngular(() => {
7896
+ setTimeout(() => {
7897
+ const width = element.offsetWidth;
7898
+ if (this.numericButtons) {
7899
+ const selectElement = this.numericButtons.selectElement.nativeElement;
7900
+ const numbersElement = this.numericButtons.numbersElement.nativeElement;
7901
+ this.renderer.removeStyle(numbersElement, 'display');
7902
+ this.renderer.setStyle(selectElement, 'display', 'none');
7903
+ if (width < RESPONSIVE_BREAKPOINT_MEDIUM) {
7904
+ this.renderer.removeStyle(selectElement, 'display');
7905
+ this.renderer.setStyle(numbersElement, 'display', 'none');
7906
+ }
7907
+ }
7908
+ if (this.pagerInfo) {
7909
+ this.renderer.removeStyle(this.pagerInfo.nativeElement, 'display');
7910
+ if (width < RESPONSIVE_BREAKPOINT_LARGE) {
7911
+ this.renderer.setStyle(this.pagerInfo.nativeElement, 'display', 'none');
7912
+ }
7913
+ }
7914
+ if (this.pagerPageSizes) {
7915
+ this.renderer.removeStyle(this.pagerPageSizes.nativeElement, 'display');
7916
+ if (width < RESPONSIVE_BREAKPOINT_MEDIUM) {
7917
+ this.renderer.setStyle(this.pagerPageSizes.nativeElement, 'display', 'none');
7918
+ }
7919
+ }
7920
+ });
7921
+ });
7901
7922
  };
7902
7923
  }
7903
7924
  set options(value) {
@@ -8016,12 +8037,10 @@ class PagerComponent {
8016
8037
  }
8017
8038
  const changesInTemplate = changes['template'];
8018
8039
  if (changesInTemplate) {
8019
- // eslint-disable-next-line no-unused-expressions
8020
- changesInTemplate.currentValue ? this.clearResponsiveClasses() : this.resizeHandler();
8040
+ changesInTemplate.currentValue ? this.clearResponsiveStyling() : this.resizeHandler();
8021
8041
  }
8022
8042
  if (changes['options']) {
8023
- // eslint-disable-next-line no-unused-expressions
8024
- this.settings.responsive ? this.resizeHandler() : this.clearResponsiveClasses();
8043
+ this.settings.responsive ? this.resizeHandler() : this.clearResponsiveStyling();
8025
8044
  }
8026
8045
  }
8027
8046
  ngOnDestroy() {
@@ -8047,11 +8066,6 @@ class PagerComponent {
8047
8066
  }
8048
8067
  });
8049
8068
  }
8050
- clearResponsiveClasses() {
8051
- const element = this.element.nativeElement;
8052
- this.renderer.removeClass(element, 'k-pager-mobile-sm');
8053
- this.renderer.removeClass(element, 'k-pager-mobile-md');
8054
- }
8055
8069
  shouldTriggerPageChange(target, condition) {
8056
8070
  return this.navigationService.pagerEnabled &&
8057
8071
  target === this.element.nativeElement &&
@@ -8074,6 +8088,18 @@ class PagerComponent {
8074
8088
  this.cellContext.focusGroup = this.focusGroup;
8075
8089
  }
8076
8090
  }
8091
+ clearResponsiveStyling() {
8092
+ this.zone.runOutsideAngular(() => {
8093
+ setTimeout(() => {
8094
+ if (this.numericButtons) {
8095
+ this.renderer.removeStyle(this.numericButtons.numbersElement.nativeElement, 'display');
8096
+ this.renderer.setStyle(this.numericButtons.selectElement.nativeElement, 'display', 'none');
8097
+ }
8098
+ this.pagerInfo && this.renderer.removeStyle(this.pagerInfo.nativeElement, 'display');
8099
+ this.pagerPageSizes && this.renderer.removeStyle(this.pagerPageSizes.nativeElement, 'display');
8100
+ });
8101
+ });
8102
+ }
8077
8103
  }
8078
8104
  PagerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerComponent, deps: [{ token: PagerContextService }, { token: NavigationService }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.NgZone }, { token: ContextService }, { token: CELL_CONTEXT, optional: true }, { token: FocusRoot }, { token: FocusGroup }], target: i0.ɵɵFactoryTarget.Component });
8079
8105
  PagerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: PagerComponent, selector: "kendo-pager", inputs: { total: "total", skip: "skip", pageSize: "pageSize", options: "options", size: "size", template: "template" }, outputs: { pageChange: "pageChange" }, host: { listeners: { "focusin": "onFocusIn($event)", "focusout": "onFocusOut()", "keydown.escape": "onEscape()", "keydown.enter": "onEnter($event)", "keydown.arrowleft": "navigateToPreviousPage($event)", "keydown.pageup": "navigateToPreviousPage($event)", "keydown.arrowright": "navigateToNextPage($event)", "keydown.pagedown": "navigateToNextPage($event)", "keydown.home": "navigateToFirstPage($event)", "keydown.end": "navigateToLastPage($event)" }, properties: { "class.k-pager-wrap": "this.pagerWrapClass", "class.k-grid-pager": "this.gridPagerClass", "class.k-pager-sm": "this.sizeSmallClass", "class.k-pager-md": "this.sizeMediumClass", "class.k-focus": "this.isFocused", "attr.aria-label": "this.pagerAriaLabel" } }, providers: [{
@@ -8087,7 +8113,7 @@ PagerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version
8087
8113
  provide: FocusGroup,
8088
8114
  deps: [FocusRoot],
8089
8115
  useClass: FocusGroup
8090
- }], usesOnChanges: true, ngImport: i0, template: `
8116
+ }], viewQueries: [{ propertyName: "pagerInfo", first: true, predicate: PagerInfoComponent, descendants: true, read: ElementRef }, { propertyName: "pagerPageSizes", first: true, predicate: PagerPageSizesComponent, descendants: true, read: ElementRef }, { propertyName: "numericButtons", first: true, predicate: PagerNumericButtonsComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: `
8091
8117
  <div
8092
8118
  *ngIf="navigationService.pagerEnabled"
8093
8119
  class="k-sr-only"
@@ -8101,20 +8127,21 @@ PagerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version
8101
8127
  [ngTemplateOutletContext]="templateContext">
8102
8128
  </ng-container>
8103
8129
  <ng-container *ngIf="!template?.templateRef">
8104
- <kendo-pager-prev-buttons [size]="size" *ngIf="settings.previousNext"></kendo-pager-prev-buttons>
8105
- <kendo-pager-numeric-buttons
8106
- [size]="size"
8107
- *ngIf="settings.type === 'numeric'"
8108
- [buttonCount]="settings.buttonCount">
8109
- </kendo-pager-numeric-buttons>
8110
- <kendo-pager-input [size]="size" *ngIf="settings.type === 'input'"></kendo-pager-input>
8111
- <kendo-pager-next-buttons [size]="size" *ngIf="settings.previousNext"></kendo-pager-next-buttons>
8130
+ <div class="k-pager-numbers-wrap">
8131
+ <kendo-pager-prev-buttons [size]="size" *ngIf="settings.previousNext"></kendo-pager-prev-buttons>
8132
+ <kendo-pager-numeric-buttons
8133
+ [size]="size"
8134
+ *ngIf="settings.type === 'numeric'"
8135
+ [buttonCount]="settings.buttonCount">
8136
+ </kendo-pager-numeric-buttons>
8137
+ <kendo-pager-input [size]="size" *ngIf="settings.type === 'input'"></kendo-pager-input>
8138
+ <kendo-pager-next-buttons [size]="size" *ngIf="settings.previousNext"></kendo-pager-next-buttons>
8139
+ </div>
8112
8140
  <kendo-pager-info *ngIf='settings.info'></kendo-pager-info>
8113
8141
  <kendo-pager-page-sizes
8114
8142
  [size]="size"
8115
8143
  *ngIf="settings.pageSizes"
8116
8144
  [pageSizes]="$any(settings.pageSizes)"
8117
- #pageSizes
8118
8145
  ></kendo-pager-page-sizes>
8119
8146
  </ng-container>
8120
8147
  <div
@@ -8156,20 +8183,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
8156
8183
  [ngTemplateOutletContext]="templateContext">
8157
8184
  </ng-container>
8158
8185
  <ng-container *ngIf="!template?.templateRef">
8159
- <kendo-pager-prev-buttons [size]="size" *ngIf="settings.previousNext"></kendo-pager-prev-buttons>
8160
- <kendo-pager-numeric-buttons
8161
- [size]="size"
8162
- *ngIf="settings.type === 'numeric'"
8163
- [buttonCount]="settings.buttonCount">
8164
- </kendo-pager-numeric-buttons>
8165
- <kendo-pager-input [size]="size" *ngIf="settings.type === 'input'"></kendo-pager-input>
8166
- <kendo-pager-next-buttons [size]="size" *ngIf="settings.previousNext"></kendo-pager-next-buttons>
8186
+ <div class="k-pager-numbers-wrap">
8187
+ <kendo-pager-prev-buttons [size]="size" *ngIf="settings.previousNext"></kendo-pager-prev-buttons>
8188
+ <kendo-pager-numeric-buttons
8189
+ [size]="size"
8190
+ *ngIf="settings.type === 'numeric'"
8191
+ [buttonCount]="settings.buttonCount">
8192
+ </kendo-pager-numeric-buttons>
8193
+ <kendo-pager-input [size]="size" *ngIf="settings.type === 'input'"></kendo-pager-input>
8194
+ <kendo-pager-next-buttons [size]="size" *ngIf="settings.previousNext"></kendo-pager-next-buttons>
8195
+ </div>
8167
8196
  <kendo-pager-info *ngIf='settings.info'></kendo-pager-info>
8168
8197
  <kendo-pager-page-sizes
8169
8198
  [size]="size"
8170
8199
  *ngIf="settings.pageSizes"
8171
8200
  [pageSizes]="$any(settings.pageSizes)"
8172
- #pageSizes
8173
8201
  ></kendo-pager-page-sizes>
8174
8202
  </ng-container>
8175
8203
  <div
@@ -8187,7 +8215,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
8187
8215
  }, {
8188
8216
  type: Inject,
8189
8217
  args: [CELL_CONTEXT]
8190
- }] }, { type: FocusRoot }, { type: FocusGroup }]; }, propDecorators: { total: [{
8218
+ }] }, { type: FocusRoot }, { type: FocusGroup }]; }, propDecorators: { pagerInfo: [{
8219
+ type: ViewChild,
8220
+ args: [PagerInfoComponent, { read: ElementRef }]
8221
+ }], pagerPageSizes: [{
8222
+ type: ViewChild,
8223
+ args: [PagerPageSizesComponent, { read: ElementRef }]
8224
+ }], numericButtons: [{
8225
+ type: ViewChild,
8226
+ args: [PagerNumericButtonsComponent]
8227
+ }], total: [{
8191
8228
  type: Input
8192
8229
  }], skip: [{
8193
8230
  type: Input
@@ -9528,7 +9565,7 @@ FilterMenuInputWrapperComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion:
9528
9565
  (keydown.shift.tab)="onShiftTab($event)">
9529
9566
  </kendo-dropdownlist>
9530
9567
  <ng-content></ng-content>
9531
- `, isInline: true, components: [{ type: i1$4.DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["iconClass", "loading", "data", "value", "textField", "valueField", "adaptiveMode", "title", "subtitle", "popupSettings", "listHeight", "defaultItem", "disabled", "itemDisabled", "readonly", "filterable", "virtual", "ignoreCase", "delay", "valuePrimitive", "tabindex", "tabIndex", "size", "rounded", "fillMode", "id"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }], directives: [{ type: FilterMenuDropDownListDirective, selector: "[kendoFilterMenuDropDown]", inputs: ["filterMenuDropDownLabel"] }] });
9568
+ `, isInline: true, components: [{ type: i1$4.DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["showStickyHeader", "iconClass", "loading", "data", "value", "textField", "valueField", "adaptiveMode", "title", "subtitle", "popupSettings", "listHeight", "defaultItem", "disabled", "itemDisabled", "readonly", "filterable", "virtual", "ignoreCase", "delay", "valuePrimitive", "tabindex", "tabIndex", "size", "rounded", "fillMode", "id"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }], directives: [{ type: FilterMenuDropDownListDirective, selector: "[kendoFilterMenuDropDown]", inputs: ["filterMenuDropDownLabel"] }] });
9532
9569
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FilterMenuInputWrapperComponent, decorators: [{
9533
9570
  type: Component,
9534
9571
  args: [{
@@ -9724,7 +9761,7 @@ StringFilterMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.
9724
9761
  [filter]="filter"
9725
9762
  [menuTabbingService]="menuTabbingService">
9726
9763
  </kendo-grid-string-filter-menu-input>
9727
- `, isInline: true, components: [{ type: StringFilterMenuInputComponent, selector: "kendo-grid-string-filter-menu-input", inputs: ["operators", "column", "filter", "operator", "currentFilter", "filterService", "isFirstDropDown", "menuTabbingService"] }, { type: i1$4.DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["iconClass", "loading", "data", "value", "textField", "valueField", "adaptiveMode", "title", "subtitle", "popupSettings", "listHeight", "defaultItem", "disabled", "itemDisabled", "readonly", "filterable", "virtual", "ignoreCase", "delay", "valuePrimitive", "tabindex", "tabIndex", "size", "rounded", "fillMode", "id"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: FilterMenuDropDownListDirective, selector: "[kendoFilterMenuDropDown]", inputs: ["filterMenuDropDownLabel"] }] });
9764
+ `, isInline: true, components: [{ type: StringFilterMenuInputComponent, selector: "kendo-grid-string-filter-menu-input", inputs: ["operators", "column", "filter", "operator", "currentFilter", "filterService", "isFirstDropDown", "menuTabbingService"] }, { type: i1$4.DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["showStickyHeader", "iconClass", "loading", "data", "value", "textField", "valueField", "adaptiveMode", "title", "subtitle", "popupSettings", "listHeight", "defaultItem", "disabled", "itemDisabled", "readonly", "filterable", "virtual", "ignoreCase", "delay", "valuePrimitive", "tabindex", "tabIndex", "size", "rounded", "fillMode", "id"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: FilterMenuDropDownListDirective, selector: "[kendoFilterMenuDropDown]", inputs: ["filterMenuDropDownLabel"] }] });
9728
9765
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: StringFilterMenuComponent, decorators: [{
9729
9766
  type: Component,
9730
9767
  args: [{
@@ -10130,7 +10167,7 @@ NumericFilterMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0
10130
10167
  [menuTabbingService]="menuTabbingService"
10131
10168
  >
10132
10169
  </kendo-grid-numeric-filter-menu-input>
10133
- `, isInline: true, components: [{ type: NumericFilterMenuInputComponent, selector: "kendo-grid-numeric-filter-menu-input", inputs: ["operators", "column", "filter", "operator", "currentFilter", "filterService", "filterDelay", "isFirstDropDown", "menuTabbingService", "step", "min", "max", "spinners", "decimals", "format"] }, { type: i1$4.DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["iconClass", "loading", "data", "value", "textField", "valueField", "adaptiveMode", "title", "subtitle", "popupSettings", "listHeight", "defaultItem", "disabled", "itemDisabled", "readonly", "filterable", "virtual", "ignoreCase", "delay", "valuePrimitive", "tabindex", "tabIndex", "size", "rounded", "fillMode", "id"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: FilterMenuDropDownListDirective, selector: "[kendoFilterMenuDropDown]", inputs: ["filterMenuDropDownLabel"] }] });
10170
+ `, isInline: true, components: [{ type: NumericFilterMenuInputComponent, selector: "kendo-grid-numeric-filter-menu-input", inputs: ["operators", "column", "filter", "operator", "currentFilter", "filterService", "filterDelay", "isFirstDropDown", "menuTabbingService", "step", "min", "max", "spinners", "decimals", "format"] }, { type: i1$4.DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["showStickyHeader", "iconClass", "loading", "data", "value", "textField", "valueField", "adaptiveMode", "title", "subtitle", "popupSettings", "listHeight", "defaultItem", "disabled", "itemDisabled", "readonly", "filterable", "virtual", "ignoreCase", "delay", "valuePrimitive", "tabindex", "tabIndex", "size", "rounded", "fillMode", "id"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: FilterMenuDropDownListDirective, selector: "[kendoFilterMenuDropDown]", inputs: ["filterMenuDropDownLabel"] }] });
10134
10171
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: NumericFilterMenuComponent, decorators: [{
10135
10172
  type: Component,
10136
10173
  args: [{
@@ -10585,7 +10622,7 @@ DateFilterMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0"
10585
10622
  [menuTabbingService]="menuTabbingService"
10586
10623
  >
10587
10624
  </kendo-grid-date-filter-menu-input>
10588
- `, isInline: true, components: [{ type: DateFilterMenuInputComponent, selector: "kendo-grid-date-filter-menu-input", inputs: ["operators", "column", "filter", "operator", "currentFilter", "filterService", "menuTabbingService", "format", "formatPlaceholder", "placeholder", "min", "max", "activeView", "bottomView", "topView", "weekNumber", "isFirstDropDown"] }, { type: i1$4.DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["iconClass", "loading", "data", "value", "textField", "valueField", "adaptiveMode", "title", "subtitle", "popupSettings", "listHeight", "defaultItem", "disabled", "itemDisabled", "readonly", "filterable", "virtual", "ignoreCase", "delay", "valuePrimitive", "tabindex", "tabIndex", "size", "rounded", "fillMode", "id"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: FilterMenuDropDownListDirective, selector: "[kendoFilterMenuDropDown]", inputs: ["filterMenuDropDownLabel"] }] });
10625
+ `, isInline: true, components: [{ type: DateFilterMenuInputComponent, selector: "kendo-grid-date-filter-menu-input", inputs: ["operators", "column", "filter", "operator", "currentFilter", "filterService", "menuTabbingService", "format", "formatPlaceholder", "placeholder", "min", "max", "activeView", "bottomView", "topView", "weekNumber", "isFirstDropDown"] }, { type: i1$4.DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["showStickyHeader", "iconClass", "loading", "data", "value", "textField", "valueField", "adaptiveMode", "title", "subtitle", "popupSettings", "listHeight", "defaultItem", "disabled", "itemDisabled", "readonly", "filterable", "virtual", "ignoreCase", "delay", "valuePrimitive", "tabindex", "tabIndex", "size", "rounded", "fillMode", "id"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: FilterMenuDropDownListDirective, selector: "[kendoFilterMenuDropDown]", inputs: ["filterMenuDropDownLabel"] }] });
10589
10626
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: DateFilterMenuComponent, decorators: [{
10590
10627
  type: Component,
10591
10628
  args: [{
@@ -11060,10 +11097,10 @@ class FilterMenuContainerComponent {
11060
11097
  e.preventDefault();
11061
11098
  if (buttonType === 'reset') {
11062
11099
  // eslint-disable-next-line no-unused-expressions
11063
- this.disabled ? this.menuTabbingService.firstFocusable.focus() : this.filterButton.nativeElement.focus();
11100
+ this.menuTabbingService.firstFocusable.focus();
11064
11101
  }
11065
11102
  else {
11066
- this.menuTabbingService.firstFocusable.focus();
11103
+ this.disabled ? this.menuTabbingService.firstFocusable.focus() : this.resetButton.nativeElement.focus();
11067
11104
  }
11068
11105
  }
11069
11106
  }
@@ -11187,15 +11224,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
11187
11224
  args: ['filterButton', { static: false }]
11188
11225
  }] } });
11189
11226
 
11227
+ let id$3 = 0;
11228
+ const getId$1 = (gridId) => `${gridId}-filter-menu-${id$3++}`;
11190
11229
  /**
11191
11230
  * @hidden
11192
11231
  */
11193
11232
  class FilterMenuComponent {
11194
- constructor(filterService, popupService, ctx, navigationService) {
11233
+ constructor(filterService, popupService, ctx, navigationService, renderer, cdr, idService) {
11195
11234
  this.filterService = filterService;
11196
11235
  this.popupService = popupService;
11197
11236
  this.ctx = ctx;
11198
11237
  this.navigationService = navigationService;
11238
+ this.renderer = renderer;
11239
+ this.cdr = cdr;
11240
+ this.idService = idService;
11199
11241
  this.filterIcon = filterIcon;
11200
11242
  this.tabIndex = '-1';
11201
11243
  }
@@ -11210,9 +11252,35 @@ class FilterMenuComponent {
11210
11252
  const columnName = this.column.title || this.column.field;
11211
11253
  return replaceMessagePlaceholder(localizationMsg, 'columnName', columnName);
11212
11254
  }
11255
+ /**
11256
+ * @hidden
11257
+ */
11258
+ get isNavigable() {
11259
+ return this.navigationService.tableEnabled;
11260
+ }
11213
11261
  toggle(anchor, template) {
11214
11262
  this.popupRef = this.popupService.open(anchor, template, this.popupRef);
11215
- if (!this.popupRef) {
11263
+ // Needed as changes to 'popupRef' are not reflected
11264
+ // automatically when the Popup is closed by clicking outside the anchor
11265
+ const ariaRoot = this.isNavigable ? anchor.closest('.k-table-th') : anchor;
11266
+ if (this.popupRef) {
11267
+ this.popupRef.popup.instance.close.pipe(take(1)).subscribe(() => {
11268
+ this.popupRef = null;
11269
+ const ariaRoot = this.isNavigable ? anchor.closest('.k-table-th') : anchor;
11270
+ ariaRoot && this.renderer.removeAttribute(ariaRoot, 'aria-controls');
11271
+ ariaRoot && this.renderer.setAttribute(ariaRoot, 'aria-expanded', 'false');
11272
+ });
11273
+ const popupAriaElement = this.popupRef.popupElement.querySelector('.k-grid-filter-popup');
11274
+ if (popupAriaElement) {
11275
+ const popupId = getId$1(this.idService?.gridId());
11276
+ this.renderer.setAttribute(popupAriaElement, 'id', popupId);
11277
+ this.renderer.setAttribute(popupAriaElement, 'role', 'dialog');
11278
+ this.renderer.setAttribute(popupAriaElement, 'aria-label', this.filterLabel);
11279
+ ariaRoot && this.renderer.setAttribute(ariaRoot, 'aria-controls', popupId);
11280
+ ariaRoot && this.renderer.setAttribute(ariaRoot, 'aria-expanded', 'true');
11281
+ }
11282
+ }
11283
+ else {
11216
11284
  if (this.navigationService.tableEnabled) {
11217
11285
  this.navigationService.focusCell(0, this.column.leafIndex);
11218
11286
  }
@@ -11224,6 +11292,8 @@ class FilterMenuComponent {
11224
11292
  }
11225
11293
  close() {
11226
11294
  this.popupService.destroy();
11295
+ this.popupRef = null;
11296
+ this.cdr.markForCheck();
11227
11297
  if (this.navigationService.tableEnabled) {
11228
11298
  this.navigationService.focusCell(0, this.column.leafIndex);
11229
11299
  }
@@ -11232,7 +11302,7 @@ class FilterMenuComponent {
11232
11302
  }
11233
11303
  }
11234
11304
  }
11235
- 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 });
11305
+ 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 });
11236
11306
  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: `
11237
11307
  <a #anchor
11238
11308
  class="k-grid-filter-menu k-grid-header-menu"
@@ -11241,7 +11311,9 @@ FilterMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ve
11241
11311
  (click)="toggle(anchor, template)"
11242
11312
  (keydown.enter)="$event.stopImmediatePropagation()"
11243
11313
  href="#"
11244
- [attr.title]="filterLabel">
11314
+ [attr.title]="filterLabel"
11315
+ [attr.aria-haspopup]="isNavigable ? undefined : 'dialog'"
11316
+ [attr.aria-expanded]="isNavigable ? undefined : false">
11245
11317
  <kendo-icon-wrapper
11246
11318
  name="filter"
11247
11319
  [svgIcon]="filterIcon"></kendo-icon-wrapper>
@@ -11269,7 +11341,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
11269
11341
  (click)="toggle(anchor, template)"
11270
11342
  (keydown.enter)="$event.stopImmediatePropagation()"
11271
11343
  href="#"
11272
- [attr.title]="filterLabel">
11344
+ [attr.title]="filterLabel"
11345
+ [attr.aria-haspopup]="isNavigable ? undefined : 'dialog'"
11346
+ [attr.aria-expanded]="isNavigable ? undefined : false">
11273
11347
  <kendo-icon-wrapper
11274
11348
  name="filter"
11275
11349
  [svgIcon]="filterIcon"></kendo-icon-wrapper>
@@ -11286,7 +11360,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
11286
11360
  </ng-template>
11287
11361
  `
11288
11362
  }]
11289
- }], ctorParameters: function () { return [{ type: FilterService }, { type: SinglePopupService }, { type: ContextService }, { type: NavigationService }]; }, propDecorators: { column: [{
11363
+ }], ctorParameters: function () { return [{ type: FilterService }, { type: SinglePopupService }, { type: ContextService }, { type: NavigationService }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: IdService, decorators: [{
11364
+ type: Optional
11365
+ }] }]; }, propDecorators: { column: [{
11290
11366
  type: Input
11291
11367
  }], filter: [{
11292
11368
  type: Input
@@ -11344,7 +11420,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
11344
11420
  /**
11345
11421
  * @hidden
11346
11422
  */
11347
- const ColunnMenuErrorMessages = {
11423
+ const ColumnMenuErrorMessages = {
11348
11424
  autoSizeColumn: 'The auto size column does not work with enabled virtual columns',
11349
11425
  autoSizeAllColumns: 'The auto size all columns does not work with enabled virtual columns'
11350
11426
  };
@@ -11450,6 +11526,9 @@ class ColumnMenuItemComponent {
11450
11526
  this.collapse = new EventEmitter();
11451
11527
  this.contentState = 'collapsed';
11452
11528
  }
11529
+ ngAfterViewInit() {
11530
+ this.contentTemplate && (this.contentId = `k-${guid()}`);
11531
+ }
11453
11532
  ngOnChanges(changes) {
11454
11533
  if (changes.expanded) {
11455
11534
  this.updateContentState();
@@ -11484,13 +11563,14 @@ ColumnMenuItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0"
11484
11563
  [class.k-selected]="selected"
11485
11564
  [class.k-disabled]="disabled"
11486
11565
  role="button"
11487
- [attr.aria-expanded]="expanded">
11566
+ [attr.aria-expanded]="expanded"
11567
+ [attr.aria-controls]="expanded ? contentId : undefined">
11488
11568
  <kendo-icon-wrapper
11489
11569
  [name]="icon"
11490
11570
  [svgIcon]="svgIcon"></kendo-icon-wrapper>
11491
11571
  {{ text }}
11492
11572
  </div>
11493
- <div *ngIf="contentTemplate" [@state]="contentState" [style.overflow]="'hidden'" class="k-columnmenu-item-content">
11573
+ <div *ngIf="contentTemplate" [attr.id]="contentId" [@state]="contentState" [style.overflow]="'hidden'" class="k-columnmenu-item-content">
11494
11574
  <ng-container [ngTemplateOutlet]="contentTemplate.templateRef">
11495
11575
  </ng-container>
11496
11576
  <div>
@@ -11552,13 +11632,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
11552
11632
  [class.k-selected]="selected"
11553
11633
  [class.k-disabled]="disabled"
11554
11634
  role="button"
11555
- [attr.aria-expanded]="expanded">
11635
+ [attr.aria-expanded]="expanded"
11636
+ [attr.aria-controls]="expanded ? contentId : undefined">
11556
11637
  <kendo-icon-wrapper
11557
11638
  [name]="icon"
11558
11639
  [svgIcon]="svgIcon"></kendo-icon-wrapper>
11559
11640
  {{ text }}
11560
11641
  </div>
11561
- <div *ngIf="contentTemplate" [@state]="contentState" [style.overflow]="'hidden'" class="k-columnmenu-item-content">
11642
+ <div *ngIf="contentTemplate" [attr.id]="contentId" [@state]="contentState" [style.overflow]="'hidden'" class="k-columnmenu-item-content">
11562
11643
  <ng-container [ngTemplateOutlet]="contentTemplate.templateRef">
11563
11644
  </ng-container>
11564
11645
  <div>
@@ -11934,14 +12015,78 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
11934
12015
  type: Input
11935
12016
  }] } });
11936
12017
 
12018
+ /**
12019
+ * @hidden
12020
+ */
12021
+ class ColumnListKeyboardNavigation {
12022
+ constructor(renderer) {
12023
+ this.renderer = renderer;
12024
+ this.activeIndex = 0;
12025
+ }
12026
+ next() {
12027
+ this.toggle(this.activeIndex, false);
12028
+ this.activeIndex = Math.min(this.activeIndex + 1, this.items.length - 1);
12029
+ this.toggle(this.activeIndex, true);
12030
+ }
12031
+ prev() {
12032
+ this.toggle(this.activeIndex, false);
12033
+ this.activeIndex = Math.max(this.activeIndex - 1, 0);
12034
+ this.toggle(this.activeIndex, true);
12035
+ }
12036
+ toggle(index, active) {
12037
+ const element = this.items[index]?.host.nativeElement;
12038
+ element && this.renderer.setAttribute(this.items[index].host.nativeElement, 'tabindex', active ? '0' : '-1');
12039
+ active && element && element.focus();
12040
+ }
12041
+ toggleCheckedState() {
12042
+ this.items[this.activeIndex].host.nativeElement.firstElementChild.click();
12043
+ }
12044
+ }
12045
+ ColumnListKeyboardNavigation.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnListKeyboardNavigation, deps: [{ token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Injectable });
12046
+ ColumnListKeyboardNavigation.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnListKeyboardNavigation });
12047
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnListKeyboardNavigation, decorators: [{
12048
+ type: Injectable
12049
+ }], ctorParameters: function () { return [{ type: i0.Renderer2 }]; } });
12050
+
12051
+ /**
12052
+ * @hidden
12053
+ */
12054
+ class ColumnMenuChooserItemCheckedDirective {
12055
+ constructor(host, renderer) {
12056
+ this.host = host;
12057
+ this.renderer = renderer;
12058
+ this.checkedChangeSub = new Subscription();
12059
+ }
12060
+ ngAfterViewInit() {
12061
+ this.checkedChangeSub.add(this.renderer.listen(this.host.nativeElement.firstElementChild, 'change', (e) => {
12062
+ this.kendoColumnMenuChooserItemChecked = e.target.checked;
12063
+ }));
12064
+ }
12065
+ ngOnDestroy() {
12066
+ this.checkedChangeSub.unsubscribe();
12067
+ }
12068
+ }
12069
+ 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 });
12070
+ 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 });
12071
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnMenuChooserItemCheckedDirective, decorators: [{
12072
+ type: Directive,
12073
+ args: [{ selector: '[kendoColumnMenuChooserItemChecked]' }]
12074
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }]; }, propDecorators: { kendoColumnMenuChooserItemChecked: [{
12075
+ type: HostBinding,
12076
+ args: ['attr.aria-checked']
12077
+ }, {
12078
+ type: Input
12079
+ }] } });
12080
+
11937
12081
  /**
11938
12082
  * @hidden
11939
12083
  */
11940
12084
  class ColumnListComponent {
11941
- constructor(element, ngZone, renderer) {
12085
+ constructor(element, ngZone, renderer, listNavigationService) {
11942
12086
  this.element = element;
11943
12087
  this.ngZone = ngZone;
11944
12088
  this.renderer = renderer;
12089
+ this.listNavigationService = listNavigationService;
11945
12090
  this.reset = new EventEmitter();
11946
12091
  this.apply = new EventEmitter();
11947
12092
  this.columnChange = new EventEmitter();
@@ -11949,10 +12094,28 @@ class ColumnListComponent {
11949
12094
  this.allowHideAll = false;
11950
12095
  this.actionsClass = 'k-actions k-actions-stretched k-actions-horizontal';
11951
12096
  this.unlockedCount = 0;
12097
+ this.domSubscriptions = new Subscription();
12098
+ this.onKeydown = (e) => {
12099
+ if (e.keyCode !== Keys.Tab) {
12100
+ e.preventDefault();
12101
+ }
12102
+ if (e.keyCode === Keys.ArrowDown) {
12103
+ this.listNavigationService.next();
12104
+ }
12105
+ else if (e.keyCode === Keys.ArrowUp) {
12106
+ this.listNavigationService.prev();
12107
+ }
12108
+ else if (e.keyCode === Keys.Space && e.target.classList.contains('k-column-list-item')) {
12109
+ this.listNavigationService.toggleCheckedState();
12110
+ }
12111
+ };
11952
12112
  }
11953
12113
  get className() {
11954
12114
  return true;
11955
12115
  }
12116
+ isChecked(checkbox) {
12117
+ return checkbox.checked;
12118
+ }
11956
12119
  set columns(value) {
11957
12120
  this._columns = value.filter(column => column.includeInChooser !== false);
11958
12121
  this.allColumns = value;
@@ -11970,12 +12133,21 @@ class ColumnListComponent {
11970
12133
  return;
11971
12134
  }
11972
12135
  this.ngZone.runOutsideAngular(() => {
11973
- this.domSubscriptions = this.renderer.listen(this.element.nativeElement, 'click', (e) => {
11974
- if (hasClasses(e.target, 'k-checkbox')) {
12136
+ this.domSubscriptions.add(this.renderer.listen(this.element.nativeElement, 'click', (e) => {
12137
+ const closestItem = e.target.closest('.k-column-list-item');
12138
+ if (closestItem) {
12139
+ const checkbox = closestItem.querySelector('.k-checkbox');
12140
+ const index = parseInt(checkbox.getAttribute('data-index'), 10);
12141
+ if (e.target === checkbox) {
12142
+ closestItem.focus();
12143
+ }
12144
+ else {
12145
+ e.preventDefault();
12146
+ checkbox.checked = !checkbox.checked;
12147
+ }
11975
12148
  if (this.autoSync) {
11976
- const index = parseInt(e.target.getAttribute('data-index'), 10);
11977
12149
  const column = this.columns[index];
11978
- const hidden = !e.target.checked;
12150
+ const hidden = !checkbox.checked;
11979
12151
  if (Boolean(column.hidden) !== hidden) {
11980
12152
  this.ngZone.run(() => {
11981
12153
  column.hidden = hidden;
@@ -11986,10 +12158,20 @@ class ColumnListComponent {
11986
12158
  else {
11987
12159
  this.updateDisabled();
11988
12160
  }
12161
+ if (index !== this.listNavigationService.activeIndex) {
12162
+ this.listNavigationService.toggle(this.listNavigationService.activeIndex, false);
12163
+ this.listNavigationService.activeIndex = index;
12164
+ this.listNavigationService.toggle(index, true);
12165
+ }
11989
12166
  }
11990
- });
12167
+ }));
12168
+ this.domSubscriptions.add(this.renderer.listen(this.element.nativeElement, 'keydown', this.onKeydown));
11991
12169
  });
11992
12170
  }
12171
+ ngAfterViewInit() {
12172
+ this.listNavigationService.items = this.options.toArray();
12173
+ this.listNavigationService.toggle(0, true);
12174
+ }
11993
12175
  ngOnChanges(changes) {
11994
12176
  if (!this.service) {
11995
12177
  return;
@@ -12002,9 +12184,7 @@ class ColumnListComponent {
12002
12184
  }
12003
12185
  }
12004
12186
  ngOnDestroy() {
12005
- if (this.domSubscriptions) {
12006
- this.domSubscriptions();
12007
- }
12187
+ this.domSubscriptions.unsubscribe();
12008
12188
  }
12009
12189
  cancelChanges() {
12010
12190
  this.forEachCheckBox((element, index) => {
@@ -12032,6 +12212,9 @@ class ColumnListComponent {
12032
12212
  if (this.service) {
12033
12213
  this.service.menuTabbingService.firstFocusable.focus();
12034
12214
  }
12215
+ else {
12216
+ this.listNavigationService.toggle(this.listNavigationService.activeIndex, true);
12217
+ }
12035
12218
  }
12036
12219
  }
12037
12220
  forEachCheckBox(callback) {
@@ -12078,35 +12261,94 @@ class ColumnListComponent {
12078
12261
  }
12079
12262
  }
12080
12263
  }
12081
- 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 });
12082
- 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: `
12083
- <div class="k-column-list">
12084
- <label *ngFor="let column of columns; let index = index;" class='k-column-list-item'>
12085
- <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>
12264
+ 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 });
12265
+ 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: `
12266
+ <div
12267
+ class="k-column-list"
12268
+ role="listbox"
12269
+ aria-multiselectable="true"
12270
+ [attr.aria-label]="ariaLabel">
12271
+ <label
12272
+ *ngFor="let column of columns; let index = index;"
12273
+ class='k-column-list-item'
12274
+ [kendoColumnMenuChooserItemChecked]="!column.hidden"
12275
+ role="option">
12276
+ <input
12277
+ class="k-checkbox k-checkbox-md k-rounded-md"
12278
+ type="checkbox"
12279
+ [attr.data-index]="index"
12280
+ [checked]="!column.hidden"
12281
+ tabindex="-1"
12282
+ [attr.aria-hidden]="true"
12283
+ [disabled]="isDisabled(column)" />
12284
+ <span class="k-checkbox-label">{{ column.displayTitle }}</span>
12086
12285
  </label>
12087
12286
  </div>
12088
12287
  <div [ngClass]="actionsClass" *ngIf="!autoSync">
12089
- <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>
12090
- <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>
12288
+ <button
12289
+ #applyButton
12290
+ type="button"
12291
+ class="k-button k-button-solid-primary k-button-solid k-button-md k-rounded-md k-button-rectangle"
12292
+ (click)="applyChanges()"
12293
+ (keydown.enter)="$event.preventDefault(); $event.stopPropagation; applyChanges();"
12294
+ (keydown.space)="$event.preventDefault(); $event.stopPropagation; applyChanges();">{{ applyText }}</button>
12295
+ <button
12296
+ #resetButton
12297
+ type="button"
12298
+ (keydown.tab)="onTab($event)"
12299
+ class="k-button k-button-solid-base k-button-solid k-button-md k-rounded-md k-button-rectangle"
12300
+ (click)="cancelChanges()"
12301
+ (keydown.enter)="$event.preventDefault(); $event.stopPropagation; cancelChanges();"
12302
+ (keydown.space)="$event.preventDefault(); $event.stopPropagation; cancelChanges();">{{ resetText }}</button>
12091
12303
  </div>
12092
- `, 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"] }] });
12304
+ `, 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"] }] });
12093
12305
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnListComponent, decorators: [{
12094
12306
  type: Component,
12095
12307
  args: [{
12096
12308
  selector: 'kendo-grid-columnlist',
12309
+ providers: [ColumnListKeyboardNavigation],
12097
12310
  template: `
12098
- <div class="k-column-list">
12099
- <label *ngFor="let column of columns; let index = index;" class='k-column-list-item'>
12100
- <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>
12311
+ <div
12312
+ class="k-column-list"
12313
+ role="listbox"
12314
+ aria-multiselectable="true"
12315
+ [attr.aria-label]="ariaLabel">
12316
+ <label
12317
+ *ngFor="let column of columns; let index = index;"
12318
+ class='k-column-list-item'
12319
+ [kendoColumnMenuChooserItemChecked]="!column.hidden"
12320
+ role="option">
12321
+ <input
12322
+ class="k-checkbox k-checkbox-md k-rounded-md"
12323
+ type="checkbox"
12324
+ [attr.data-index]="index"
12325
+ [checked]="!column.hidden"
12326
+ tabindex="-1"
12327
+ [attr.aria-hidden]="true"
12328
+ [disabled]="isDisabled(column)" />
12329
+ <span class="k-checkbox-label">{{ column.displayTitle }}</span>
12101
12330
  </label>
12102
12331
  </div>
12103
12332
  <div [ngClass]="actionsClass" *ngIf="!autoSync">
12104
- <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>
12105
- <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>
12333
+ <button
12334
+ #applyButton
12335
+ type="button"
12336
+ class="k-button k-button-solid-primary k-button-solid k-button-md k-rounded-md k-button-rectangle"
12337
+ (click)="applyChanges()"
12338
+ (keydown.enter)="$event.preventDefault(); $event.stopPropagation; applyChanges();"
12339
+ (keydown.space)="$event.preventDefault(); $event.stopPropagation; applyChanges();">{{ applyText }}</button>
12340
+ <button
12341
+ #resetButton
12342
+ type="button"
12343
+ (keydown.tab)="onTab($event)"
12344
+ class="k-button k-button-solid-base k-button-solid k-button-md k-rounded-md k-button-rectangle"
12345
+ (click)="cancelChanges()"
12346
+ (keydown.enter)="$event.preventDefault(); $event.stopPropagation; cancelChanges();"
12347
+ (keydown.space)="$event.preventDefault(); $event.stopPropagation; cancelChanges();">{{ resetText }}</button>
12106
12348
  </div>
12107
12349
  `
12108
12350
  }]
12109
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: i0.Renderer2 }]; }, propDecorators: { className: [{
12351
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: i0.Renderer2 }, { type: ColumnListKeyboardNavigation }]; }, propDecorators: { className: [{
12110
12352
  type: HostBinding,
12111
12353
  args: ["class.k-column-list-wrapper"]
12112
12354
  }], reset: [{
@@ -12119,6 +12361,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
12119
12361
  type: Input
12120
12362
  }], autoSync: [{
12121
12363
  type: Input
12364
+ }], ariaLabel: [{
12365
+ type: Input
12122
12366
  }], allowHideAll: [{
12123
12367
  type: Input
12124
12368
  }], applyText: [{
@@ -12133,9 +12377,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
12133
12377
  type: Input
12134
12378
  }], service: [{
12135
12379
  type: Input
12380
+ }], resetButton: [{
12381
+ type: ViewChild,
12382
+ args: ['resetButton', { static: false }]
12136
12383
  }], applyButton: [{
12137
12384
  type: ViewChild,
12138
12385
  args: ['applyButton', { static: false }]
12386
+ }], options: [{
12387
+ type: ViewChildren,
12388
+ args: [ColumnMenuChooserItemCheckedDirective]
12139
12389
  }] } });
12140
12390
 
12141
12391
  /**
@@ -12228,6 +12478,7 @@ ColumnMenuChooserComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0
12228
12478
  <kendo-grid-columnlist
12229
12479
  [applyText]="ctx.localization.get('columnsApply')"
12230
12480
  [resetText]="ctx.localization.get('columnsReset')"
12481
+ [ariaLabel]="ctx.localization.get('columns')"
12231
12482
  [columns]="columns"
12232
12483
  [autoSync]="false"
12233
12484
  [allowHideAll]="false"
@@ -12239,7 +12490,7 @@ ColumnMenuChooserComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0
12239
12490
  </kendo-grid-columnlist>
12240
12491
  </ng-template>
12241
12492
  </kendo-grid-columnmenu-item>
12242
- `, 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]" }] });
12493
+ `, 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]" }] });
12243
12494
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnMenuChooserComponent, decorators: [{
12244
12495
  type: Component,
12245
12496
  args: [{
@@ -12256,6 +12507,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
12256
12507
  <kendo-grid-columnlist
12257
12508
  [applyText]="ctx.localization.get('columnsApply')"
12258
12509
  [resetText]="ctx.localization.get('columnsReset')"
12510
+ [ariaLabel]="ctx.localization.get('columns')"
12259
12511
  [columns]="columns"
12260
12512
  [autoSync]="false"
12261
12513
  [allowHideAll]="false"
@@ -12659,7 +12911,7 @@ class ColumnMenuAutoSizeColumnComponent extends ColumnMenuItemBase {
12659
12911
  ngOnInit() {
12660
12912
  const isVirtualColumns = this.ctx.grid.columnMenuTemplate && this.ctx.grid.virtualColumns;
12661
12913
  if (isVirtualColumns && isDevMode()) {
12662
- console.warn(ColunnMenuErrorMessages.autoSizeColumn);
12914
+ console.warn(ColumnMenuErrorMessages.autoSizeColumn);
12663
12915
  }
12664
12916
  }
12665
12917
  /**
@@ -12726,7 +12978,7 @@ class ColumnMenuAutoSizeAllColumnsComponent extends ColumnMenuItemBase {
12726
12978
  ngOnInit() {
12727
12979
  const isVirtualColumns = this.ctx.grid.columnMenuTemplate && this.ctx.grid.virtualColumns;
12728
12980
  if (isVirtualColumns && isDevMode()) {
12729
- console.warn(ColunnMenuErrorMessages.autoSizeAllColumns);
12981
+ console.warn(ColumnMenuErrorMessages.autoSizeAllColumns);
12730
12982
  }
12731
12983
  }
12732
12984
  /**
@@ -12763,6 +13015,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
12763
13015
  }], ctorParameters: function () { return [{ type: ContextService }]; } });
12764
13016
 
12765
13017
  const POPUP_CLASS = 'k-grid-columnmenu-popup';
13018
+ let id$2 = 0;
13019
+ const getId = (gridId) => `${gridId}-column-menu-${id$2++}`;
12766
13020
  /**
12767
13021
  * Represents the [column menu](slug:columnmenu_grid#toc-customizing-the-position) component.
12768
13022
  *
@@ -12775,7 +13029,7 @@ const POPUP_CLASS = 'k-grid-columnmenu-popup';
12775
13029
  * </kendo-grid>
12776
13030
  */
12777
13031
  class ColumnMenuComponent {
12778
- constructor(navigationService, popupService, service, ctx, renderer, cdr, columnInfoService) {
13032
+ constructor(navigationService, popupService, service, ctx, renderer, cdr, columnInfoService, idService) {
12779
13033
  this.navigationService = navigationService;
12780
13034
  this.popupService = popupService;
12781
13035
  this.service = service;
@@ -12783,6 +13037,7 @@ class ColumnMenuComponent {
12783
13037
  this.renderer = renderer;
12784
13038
  this.cdr = cdr;
12785
13039
  this.columnInfoService = columnInfoService;
13040
+ this.idService = idService;
12786
13041
  /**
12787
13042
  * @hidden
12788
13043
  */
@@ -12828,7 +13083,7 @@ class ColumnMenuComponent {
12828
13083
  */
12829
13084
  this.expandedPosition = false;
12830
13085
  this.moreVerticalIcon = moreVerticalIcon;
12831
- this.closeSubscription = service.closeMenu.subscribe(this.close.bind(this));
13086
+ this.closeSubscription = service.closeMenu.subscribe(this.close.bind(this, true));
12832
13087
  }
12833
13088
  /**
12834
13089
  * @hidden
@@ -12854,6 +13109,12 @@ class ColumnMenuComponent {
12854
13109
  get hasFilter() {
12855
13110
  return hasFilter(this.settings, this.column);
12856
13111
  }
13112
+ /**
13113
+ * @hidden
13114
+ */
13115
+ get isNavigable() {
13116
+ return this.navigationService.tableEnabled;
13117
+ }
12857
13118
  /**
12858
13119
  * @hidden
12859
13120
  */
@@ -12870,7 +13131,7 @@ class ColumnMenuComponent {
12870
13131
  * @hidden
12871
13132
  */
12872
13133
  onApply(changed) {
12873
- this.close();
13134
+ this.close(true);
12874
13135
  if (changed.length) {
12875
13136
  this.cdr.markForCheck();
12876
13137
  this.columnInfoService.changeVisibility(changed);
@@ -12916,11 +13177,11 @@ class ColumnMenuComponent {
12916
13177
  if (this.ctx.grid.virtualColumns && isDevMode()) {
12917
13178
  if (this.settings.autoSizeAllColumns) {
12918
13179
  this.settings.autoSizeAllColumns = false;
12919
- console.warn(ColunnMenuErrorMessages.autoSizeAllColumns);
13180
+ console.warn(ColumnMenuErrorMessages.autoSizeAllColumns);
12920
13181
  }
12921
13182
  if (this.settings.autoSizeColumn) {
12922
13183
  this.settings.autoSizeColumn = false;
12923
- console.warn(ColunnMenuErrorMessages.autoSizeColumn);
13184
+ console.warn(ColumnMenuErrorMessages.autoSizeColumn);
12924
13185
  }
12925
13186
  }
12926
13187
  this.service.menuTabbingService.isTabbedInterface = this.settings.view === 'tabbed' ? true : false;
@@ -12947,12 +13208,32 @@ class ColumnMenuComponent {
12947
13208
  this.expandedColumns = this.getExpandedState(this.settings.columnChooser);
12948
13209
  this.expandedPosition = this.getExpandedState(this.settings.setColumnPosition);
12949
13210
  this.popupRef = this.popupService.open(anchor, template, this.popupRef, POPUP_CLASS);
12950
- if (this.popupRef && this.settings.view === 'tabbed') {
12951
- this.renderer.addClass(this.popupRef.popupElement.firstChild, 'k-column-menu-tabbed');
12952
- this.cdr.detectChanges();
12953
- this.tabStrip?.selectTab(0);
13211
+ // Needed as changes to 'popupRef' and 'popupId' are not reflected
13212
+ // automatically when the Popup is closed by clicking outside the anchor
13213
+ const ariaRoot = this.isNavigable ? anchor.closest('.k-table-th') : anchor;
13214
+ if (this.popupRef) {
13215
+ this.popupRef.popup.instance.close.pipe(take(1)).subscribe(() => {
13216
+ this.popupRef = null;
13217
+ const ariaRoot = this.isNavigable ? anchor.closest('.k-table-th') : anchor;
13218
+ ariaRoot && this.renderer.removeAttribute(ariaRoot, 'aria-controls');
13219
+ ariaRoot && this.renderer.setAttribute(ariaRoot, 'aria-expanded', 'false');
13220
+ });
13221
+ const popupAriaElement = this.popupRef.popupElement.querySelector('.k-grid-columnmenu-popup');
13222
+ if (popupAriaElement) {
13223
+ const popupId = getId(this.idService?.gridId());
13224
+ this.renderer.setAttribute(popupAriaElement, 'id', popupId);
13225
+ this.renderer.setAttribute(popupAriaElement, 'role', 'dialog');
13226
+ this.renderer.setAttribute(popupAriaElement, 'aria-label', this.columnMenuTitle);
13227
+ ariaRoot && this.renderer.setAttribute(ariaRoot, 'aria-controls', popupId);
13228
+ ariaRoot && this.renderer.setAttribute(ariaRoot, 'aria-expanded', 'true');
13229
+ }
13230
+ if (this.settings.view === 'tabbed') {
13231
+ this.renderer.addClass(this.popupRef.popupElement.querySelector('.k-grid-columnmenu-popup'), 'k-column-menu-tabbed');
13232
+ this.cdr.detectChanges();
13233
+ this.tabStrip?.selectTab(0);
13234
+ }
12954
13235
  }
12955
- if (!this.popupRef) {
13236
+ else {
12956
13237
  if (this.navigationService.tableEnabled) {
12957
13238
  this.navigationService.focusCell(0, this.column.leafIndex);
12958
13239
  }
@@ -12964,9 +13245,13 @@ class ColumnMenuComponent {
12964
13245
  /**
12965
13246
  * @hidden
12966
13247
  */
12967
- close() {
13248
+ close(triggerFocus = false) {
12968
13249
  this.popupService.destroy();
12969
13250
  this.popupRef = null;
13251
+ this.cdr.markForCheck();
13252
+ if (!triggerFocus) {
13253
+ return;
13254
+ }
12970
13255
  if (this.navigationService.tableEnabled) {
12971
13256
  this.navigationService.focusCell(0, this.column.leafIndex);
12972
13257
  }
@@ -12986,7 +13271,7 @@ class ColumnMenuComponent {
12986
13271
  return typeof (menuItemSettings) === 'object' ? menuItemSettings.expanded : false;
12987
13272
  }
12988
13273
  }
12989
- 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 });
13274
+ 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 });
12990
13275
  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: [
12991
13276
  ColumnMenuService,
12992
13277
  MenuTabbingService
@@ -12998,7 +13283,9 @@ ColumnMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ve
12998
13283
  (keydown.enter)="$event.stopImmediatePropagation()"
12999
13284
  href="#"
13000
13285
  [tabindex]="tabIndex"
13001
- [attr.title]="columnMenuTitle">
13286
+ [attr.title]="columnMenuTitle"
13287
+ [attr.aria-expanded]="isNavigable ? undefined: false"
13288
+ [attr.aria-haspopup]="isNavigable ? undefined : 'dialog'">
13002
13289
  <kendo-icon-wrapper
13003
13290
  name="more-vertical"
13004
13291
  [svgIcon]="moreVerticalIcon"></kendo-icon-wrapper>
@@ -13011,7 +13298,7 @@ ColumnMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ve
13011
13298
  </ng-template>
13012
13299
  <ng-template #defaultTemplate>
13013
13300
  <kendo-grid-columnmenu-container
13014
- (keydown.escape)="close()"
13301
+ (keydown.escape)="close(true)"
13015
13302
  (keydown.enter)="$event.stopImmediatePropagation()">
13016
13303
  <kendo-grid-columnmenu-sort #sortItem [kendoGridColumnMenuItem]="sortItem" *ngIf="hasSort" [service]="service">
13017
13304
  </kendo-grid-columnmenu-sort>
@@ -13063,7 +13350,7 @@ ColumnMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ve
13063
13350
  </kendo-grid-columnmenu-container>
13064
13351
  </ng-template>
13065
13352
  <ng-template #tabbedInterfaceTemplate>
13066
- <kendo-tabstrip #tabstrip (keydown.escape)="close()">
13353
+ <kendo-tabstrip #tabstrip (keydown.escape)="close(true)">
13067
13354
  <kendo-tabstrip-tab *ngIf="hasFilter">
13068
13355
  <ng-template kendoTabTitle>
13069
13356
  <kendo-icon-wrapper
@@ -13150,7 +13437,7 @@ ColumnMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ve
13150
13437
  </kendo-tabstrip-tab>
13151
13438
  </kendo-tabstrip>
13152
13439
  </ng-template>
13153
- `, 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]" }] });
13440
+ `, 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]" }] });
13154
13441
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnMenuComponent, decorators: [{
13155
13442
  type: Component,
13156
13443
  args: [{
@@ -13167,7 +13454,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
13167
13454
  (keydown.enter)="$event.stopImmediatePropagation()"
13168
13455
  href="#"
13169
13456
  [tabindex]="tabIndex"
13170
- [attr.title]="columnMenuTitle">
13457
+ [attr.title]="columnMenuTitle"
13458
+ [attr.aria-expanded]="isNavigable ? undefined: false"
13459
+ [attr.aria-haspopup]="isNavigable ? undefined : 'dialog'">
13171
13460
  <kendo-icon-wrapper
13172
13461
  name="more-vertical"
13173
13462
  [svgIcon]="moreVerticalIcon"></kendo-icon-wrapper>
@@ -13180,7 +13469,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
13180
13469
  </ng-template>
13181
13470
  <ng-template #defaultTemplate>
13182
13471
  <kendo-grid-columnmenu-container
13183
- (keydown.escape)="close()"
13472
+ (keydown.escape)="close(true)"
13184
13473
  (keydown.enter)="$event.stopImmediatePropagation()">
13185
13474
  <kendo-grid-columnmenu-sort #sortItem [kendoGridColumnMenuItem]="sortItem" *ngIf="hasSort" [service]="service">
13186
13475
  </kendo-grid-columnmenu-sort>
@@ -13232,7 +13521,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
13232
13521
  </kendo-grid-columnmenu-container>
13233
13522
  </ng-template>
13234
13523
  <ng-template #tabbedInterfaceTemplate>
13235
- <kendo-tabstrip #tabstrip (keydown.escape)="close()">
13524
+ <kendo-tabstrip #tabstrip (keydown.escape)="close(true)">
13236
13525
  <kendo-tabstrip-tab *ngIf="hasFilter">
13237
13526
  <ng-template kendoTabTitle>
13238
13527
  <kendo-icon-wrapper
@@ -13321,7 +13610,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
13321
13610
  </ng-template>
13322
13611
  `
13323
13612
  }]
13324
- }], ctorParameters: function () { return [{ type: NavigationService }, { type: SinglePopupService }, { type: ColumnMenuService }, { type: ContextService }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: ColumnInfoService }]; }, propDecorators: { standalone: [{
13613
+ }], ctorParameters: function () { return [{ type: NavigationService }, { type: SinglePopupService }, { type: ColumnMenuService }, { type: ContextService }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: ColumnInfoService }, { type: IdService, decorators: [{
13614
+ type: Optional
13615
+ }] }]; }, propDecorators: { standalone: [{
13325
13616
  type: HostBinding,
13326
13617
  args: ['class.k-grid-column-menu-standalone']
13327
13618
  }, {
@@ -13491,7 +13782,7 @@ FilterCellOperatorsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12
13491
13782
  [size]="size"
13492
13783
  (click)="clearClick()"
13493
13784
  (keydown)="clearKeydown($event)"></button>
13494
- `, isInline: true, components: [{ type: i1$4.DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["iconClass", "loading", "data", "value", "textField", "valueField", "adaptiveMode", "title", "subtitle", "popupSettings", "listHeight", "defaultItem", "disabled", "itemDisabled", "readonly", "filterable", "virtual", "ignoreCase", "delay", "valuePrimitive", "tabindex", "tabIndex", "size", "rounded", "fillMode", "id"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }, { type: i4$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"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: FocusableDirective, selector: "[kendoGridFocusable],\n [kendoGridEditCommand],\n [kendoGridRemoveCommand],\n [kendoGridSaveCommand],\n [kendoGridCancelCommand],\n [kendoGridSelectionCheckbox]\n ", inputs: ["kendoGridFocusable"] }] });
13785
+ `, isInline: true, components: [{ type: i1$4.DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["showStickyHeader", "iconClass", "loading", "data", "value", "textField", "valueField", "adaptiveMode", "title", "subtitle", "popupSettings", "listHeight", "defaultItem", "disabled", "itemDisabled", "readonly", "filterable", "virtual", "ignoreCase", "delay", "valuePrimitive", "tabindex", "tabIndex", "size", "rounded", "fillMode", "id"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }, { type: i4$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"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: FocusableDirective, selector: "[kendoGridFocusable],\n [kendoGridEditCommand],\n [kendoGridRemoveCommand],\n [kendoGridSaveCommand],\n [kendoGridCancelCommand],\n [kendoGridSelectionCheckbox]\n ", inputs: ["kendoGridFocusable"] }] });
13495
13786
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FilterCellOperatorsComponent, decorators: [{
13496
13787
  type: Component,
13497
13788
  args: [{
@@ -13896,7 +14187,7 @@ BooleanFilterCellComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0
13896
14187
  [value]="currentFilter?.value">
13897
14188
  </kendo-dropdownlist>
13898
14189
  </kendo-grid-filter-wrapper-cell>
13899
- `, isInline: true, components: [{ type: FilterCellWrapperComponent, selector: "kendo-grid-filter-wrapper-cell", inputs: ["showOperators"] }, { type: i1$4.DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["iconClass", "loading", "data", "value", "textField", "valueField", "adaptiveMode", "title", "subtitle", "popupSettings", "listHeight", "defaultItem", "disabled", "itemDisabled", "readonly", "filterable", "virtual", "ignoreCase", "delay", "valuePrimitive", "tabindex", "tabIndex", "size", "rounded", "fillMode", "id"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }], directives: [{ type: FilterInputDirective, selector: "[kendoFilterInput]", inputs: ["filterDelay", "columnLabel", "value"] }, { type: FocusableDirective, selector: "[kendoGridFocusable],\n [kendoGridEditCommand],\n [kendoGridRemoveCommand],\n [kendoGridSaveCommand],\n [kendoGridCancelCommand],\n [kendoGridSelectionCheckbox]\n ", inputs: ["kendoGridFocusable"] }] });
14190
+ `, isInline: true, components: [{ type: FilterCellWrapperComponent, selector: "kendo-grid-filter-wrapper-cell", inputs: ["showOperators"] }, { type: i1$4.DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["showStickyHeader", "iconClass", "loading", "data", "value", "textField", "valueField", "adaptiveMode", "title", "subtitle", "popupSettings", "listHeight", "defaultItem", "disabled", "itemDisabled", "readonly", "filterable", "virtual", "ignoreCase", "delay", "valuePrimitive", "tabindex", "tabIndex", "size", "rounded", "fillMode", "id"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }], directives: [{ type: FilterInputDirective, selector: "[kendoFilterInput]", inputs: ["filterDelay", "columnLabel", "value"] }, { type: FocusableDirective, selector: "[kendoGridFocusable],\n [kendoGridEditCommand],\n [kendoGridRemoveCommand],\n [kendoGridSaveCommand],\n [kendoGridCancelCommand],\n [kendoGridSelectionCheckbox]\n ", inputs: ["kendoGridFocusable"] }] });
13900
14191
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: BooleanFilterCellComponent, decorators: [{
13901
14192
  type: Component,
13902
14193
  args: [{
@@ -14264,7 +14555,7 @@ class LogicalCellDirective {
14264
14555
  this.renderer.addClass(el, 'k-focus');
14265
14556
  }
14266
14557
  if (this.headerLabelText) {
14267
- el.setAttribute('aria-label', '');
14558
+ el.removeAttribute('aria-label');
14268
14559
  }
14269
14560
  }
14270
14561
  else {
@@ -14956,7 +15247,7 @@ const modifierKeys = ['alt', 'ctrl', 'shift', 'meta'];
14956
15247
  * @hidden
14957
15248
  */
14958
15249
  class HeaderComponent {
14959
- constructor(popupService, hint, cue, reorderService, idService, sortService, columnInfoService, cd, contextService) {
15250
+ constructor(popupService, hint, cue, reorderService, idService, sortService, columnInfoService, cd, contextService, navigationService) {
14960
15251
  this.popupService = popupService;
14961
15252
  this.hint = hint;
14962
15253
  this.cue = cue;
@@ -14966,6 +15257,7 @@ class HeaderComponent {
14966
15257
  this.columnInfoService = columnInfoService;
14967
15258
  this.cd = cd;
14968
15259
  this.contextService = contextService;
15260
+ this.navigationService = navigationService;
14969
15261
  this.columns = [];
14970
15262
  this.groups = [];
14971
15263
  this.sort = new Array();
@@ -15100,6 +15392,9 @@ class HeaderComponent {
15100
15392
  return 'descending';
15101
15393
  }
15102
15394
  }
15395
+ get isNavigable() {
15396
+ return this.navigationService.tableEnabled;
15397
+ }
15103
15398
  /**
15104
15399
  *
15105
15400
  * @param column
@@ -15210,7 +15505,7 @@ class HeaderComponent {
15210
15505
  }
15211
15506
  addStickyStyles(column) {
15212
15507
  const stickyStyles = this.columnInfoService.stickyColumnsStyles(column);
15213
- return { ...column.style, ...stickyStyles };
15508
+ return { ...column.headerStyle, ...stickyStyles };
15214
15509
  }
15215
15510
  toggleDirection(field, allowUnsort, initialDirection) {
15216
15511
  const descriptor = this.sortDescriptor(field);
@@ -15327,7 +15622,7 @@ class HeaderComponent {
15327
15622
  });
15328
15623
  }
15329
15624
  }
15330
- 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 });
15625
+ 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 });
15331
15626
  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: `
15332
15627
  <ng-container>
15333
15628
  <tr *ngFor="let i of columnLevels; let levelIndex = index"
@@ -15379,7 +15674,9 @@ HeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", versio
15379
15674
  [ngStyle]="column.sticky ? addStickyStyles(column) : column.headerStyle"
15380
15675
  [attr.rowspan]="column.rowspan(totalColumnLevels)"
15381
15676
  [attr.colspan]="column.colspan"
15382
- [attr.aria-haspopup]="(showFilterMenu || showColumnMenu(column)) ? 'dialog' : undefined">
15677
+ [attr.aria-haspopup]="isNavigable && (showFilterMenu || showColumnMenu(column)) ? 'dialog' : undefined"
15678
+ [attr.aria-expanded]="isNavigable && (showFilterMenu || showColumnMenu(column)) ? false : undefined"
15679
+ [attr.aria-keyshortcuts]="isNavigable ? 'Alt + ArrowDown' : undefined">
15383
15680
 
15384
15681
  <ng-container *ngIf="!isSortable(getColumnComponent(column))">
15385
15682
  <span class="k-cell-inner">
@@ -15601,7 +15898,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
15601
15898
  [ngStyle]="column.sticky ? addStickyStyles(column) : column.headerStyle"
15602
15899
  [attr.rowspan]="column.rowspan(totalColumnLevels)"
15603
15900
  [attr.colspan]="column.colspan"
15604
- [attr.aria-haspopup]="(showFilterMenu || showColumnMenu(column)) ? 'dialog' : undefined">
15901
+ [attr.aria-haspopup]="isNavigable && (showFilterMenu || showColumnMenu(column)) ? 'dialog' : undefined"
15902
+ [attr.aria-expanded]="isNavigable && (showFilterMenu || showColumnMenu(column)) ? false : undefined"
15903
+ [attr.aria-keyshortcuts]="isNavigable ? 'Alt + ArrowDown' : undefined">
15605
15904
 
15606
15905
  <ng-container *ngIf="!isSortable(getColumnComponent(column))">
15607
15906
  <span class="k-cell-inner">
@@ -15769,7 +16068,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
15769
16068
  </ng-container>
15770
16069
  `
15771
16070
  }]
15772
- }], ctorParameters: function () { return [{ type: SinglePopupService }, { type: DragHintService }, { type: DropCueService }, { type: ColumnReorderService }, { type: IdService }, { type: SortService }, { type: ColumnInfoService }, { type: i0.ChangeDetectorRef }, { type: ContextService }]; }, propDecorators: { totalColumnLevels: [{
16071
+ }], 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: [{
15773
16072
  type: Input
15774
16073
  }], columns: [{
15775
16074
  type: Input
@@ -18735,7 +19034,7 @@ class FooterComponent {
18735
19034
  }
18736
19035
  addStickyStyles(column) {
18737
19036
  const stickyStyles = this.columnInfoService.stickyColumnsStyles(column);
18738
- return { ...column.style, ...stickyStyles };
19037
+ return { ...column.footerStyle, ...stickyStyles };
18739
19038
  }
18740
19039
  }
18741
19040
  FooterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FooterComponent, deps: [{ token: ColumnInfoService }], target: i0.ɵɵFactoryTarget.Component });
@@ -22850,7 +23149,15 @@ class ExpandGroupDirective {
22850
23149
  this.expandedGroupKeys.push(key);
22851
23150
  }
22852
23151
  else {
22853
- const index = this.expandedGroupKeys.indexOf(key);
23152
+ const index = this.expandedGroupKeys.findIndex(group => {
23153
+ if (this.expandGroupBy) {
23154
+ return group === key;
23155
+ }
23156
+ else if (key.parentGroupKeys?.length === 0) {
23157
+ return group.value === key.value;
23158
+ }
23159
+ return JSON.stringify(group) === JSON.stringify(key);
23160
+ });
22854
23161
  this.expandedGroupKeys.splice(index, 1);
22855
23162
  }
22856
23163
  this.expandedGroupKeysChange.emit(this.expandedGroupKeys.slice());
@@ -22968,7 +23275,7 @@ AutoCompleteFilterCellComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion:
22968
23275
  [value]="currentFilter?.value">
22969
23276
  </kendo-autocomplete>
22970
23277
  </kendo-grid-filter-wrapper-cell>
22971
- `, isInline: true, components: [{ type: FilterCellWrapperComponent, selector: "kendo-grid-filter-wrapper-cell", inputs: ["showOperators"] }, { type: i1$4.AutoCompleteComponent, selector: "kendo-autocomplete", inputs: ["highlightFirst", "focusableId", "data", "value", "valueField", "placeholder", "adaptiveMode", "title", "subtitle", "popupSettings", "listHeight", "loading", "clearButton", "suggest", "disabled", "itemDisabled", "readonly", "tabindex", "tabIndex", "filterable", "virtual", "size", "rounded", "fillMode"], outputs: ["valueChange", "filterChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoAutoComplete"] }], directives: [{ type: FilterInputDirective, selector: "[kendoFilterInput]", inputs: ["filterDelay", "columnLabel", "value"] }] });
23278
+ `, isInline: true, components: [{ type: FilterCellWrapperComponent, selector: "kendo-grid-filter-wrapper-cell", inputs: ["showOperators"] }, { type: i1$4.AutoCompleteComponent, selector: "kendo-autocomplete", inputs: ["highlightFirst", "showStickyHeader", "focusableId", "data", "value", "valueField", "placeholder", "adaptiveMode", "title", "subtitle", "popupSettings", "listHeight", "loading", "clearButton", "suggest", "disabled", "itemDisabled", "readonly", "tabindex", "tabIndex", "filterable", "virtual", "size", "rounded", "fillMode"], outputs: ["valueChange", "filterChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoAutoComplete"] }], directives: [{ type: FilterInputDirective, selector: "[kendoFilterInput]", inputs: ["filterDelay", "columnLabel", "value"] }] });
22972
23279
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: AutoCompleteFilterCellComponent, decorators: [{
22973
23280
  type: Component,
22974
23281
  args: [{
@@ -24088,13 +24395,30 @@ class ColumnChooserComponent {
24088
24395
  anchorAlign: { vertical: 'bottom', horizontal: direction },
24089
24396
  popupAlign: { vertical: 'top', horizontal: direction }
24090
24397
  });
24091
- this.renderer.setAttribute(this.popupRef.popupElement, 'dir', this.ctx.localization.rtl ? 'rtl' : 'ltr');
24398
+ const popupElement = this.popupRef?.popupElement;
24399
+ if (popupElement) {
24400
+ const popupId = `k-${guid()}`;
24401
+ const popupAriaElement = popupElement.querySelector('.k-popup');
24402
+ this.ngZone.runOutsideAngular(() => {
24403
+ this.escapeListener = this.renderer.listen(popupAriaElement, 'keydown', (e) => {
24404
+ if (e.keyCode === Keys.Escape) {
24405
+ this.close(true);
24406
+ }
24407
+ });
24408
+ });
24409
+ this.renderer.setAttribute(popupElement, 'dir', this.ctx.localization.rtl ? 'rtl' : 'ltr');
24410
+ this.renderer.setAttribute(popupAriaElement, 'id', popupId);
24411
+ this.renderer.setAttribute(popupAriaElement, 'role', 'dialog');
24412
+ this.popupId = popupId;
24413
+ }
24092
24414
  if (!isDocumentAvailable()) {
24093
24415
  return;
24094
24416
  }
24095
24417
  this.ngZone.runOutsideAngular(() => this.closeClick = this.renderer.listen('document', 'click', ({ target }) => {
24096
24418
  if (!closest(target, node => node === this.popupRef.popupElement || node === anchor.element)) {
24097
- this.close();
24419
+ this.ngZone.run(() => {
24420
+ this.close();
24421
+ });
24098
24422
  }
24099
24423
  }));
24100
24424
  }
@@ -24106,7 +24430,7 @@ class ColumnChooserComponent {
24106
24430
  * @hidden
24107
24431
  */
24108
24432
  onApply(changed) {
24109
- this.close();
24433
+ this.close(true);
24110
24434
  if (changed.length) {
24111
24435
  this.changeDetector.markForCheck();
24112
24436
  this.columnInfoService.changeVisibility(changed);
@@ -24119,12 +24443,24 @@ class ColumnChooserComponent {
24119
24443
  this.changeDetector.markForCheck();
24120
24444
  this.columnInfoService.changeVisibility(changed);
24121
24445
  }
24122
- close() {
24446
+ /**
24447
+ * @hidden
24448
+ */
24449
+ onShiftTab(e) {
24450
+ if (e.target.matches('.k-column-list-item')) {
24451
+ e.preventDefault();
24452
+ this.columnList.resetButton.nativeElement.focus();
24453
+ }
24454
+ }
24455
+ close(focusAnchor = false) {
24123
24456
  if (this.popupRef) {
24124
24457
  this.popupRef.close();
24125
24458
  this.popupRef = null;
24459
+ this.changeDetector.markForCheck();
24460
+ this.escapeListener && this.escapeListener();
24126
24461
  }
24127
24462
  this.detachClose();
24463
+ focusAnchor && this.anchor.element.focus();
24128
24464
  }
24129
24465
  detachClose() {
24130
24466
  if (this.closeClick) {
@@ -24134,7 +24470,7 @@ class ColumnChooserComponent {
24134
24470
  }
24135
24471
  }
24136
24472
  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 });
24137
- 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: `
24473
+ 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: `
24138
24474
  <button #anchor
24139
24475
  kendoButton
24140
24476
  type="button"
@@ -24142,20 +24478,27 @@ ColumnChooserComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
24142
24478
  fillMode="flat"
24143
24479
  [attr.title]="ctx.localization.get('columns')"
24144
24480
  icon="columns"
24145
- [svgIcon]="columnsIcon"></button>
24481
+ [svgIcon]="columnsIcon"
24482
+ [attr.aria-haspopup]="'dialog'"
24483
+ [attr.aria-expanded]="!!(popupRef)"
24484
+ [attr.aria-controls]="!!(popupRef) ? popupId : undefined"></button>
24146
24485
  <ng-template #template>
24147
24486
  <span class='k-column-chooser-title'>{{ ctx.localization.get('columns') }}</span>
24148
24487
  <kendo-grid-columnlist
24488
+ #columnList
24149
24489
  [columns]="columns"
24490
+ [ariaLabel]="ctx.localization.get('columns')"
24491
+ [isLast]="true"
24150
24492
  [applyText]="ctx.localization.get('columnsApply')"
24151
24493
  [resetText]="ctx.localization.get('columnsReset')"
24152
24494
  [autoSync]="autoSync"
24153
24495
  [allowHideAll]="allowHideAll"
24154
24496
  (apply)="onApply($event)"
24155
- (columnChange)="onChange($event)">
24497
+ (columnChange)="onChange($event)"
24498
+ (keydown.shift.tab)="onShiftTab($event)">
24156
24499
  </kendo-grid-columnlist>
24157
24500
  </ng-template>
24158
- `, 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"] }] });
24501
+ `, 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"] }] });
24159
24502
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnChooserComponent, decorators: [{
24160
24503
  type: Component,
24161
24504
  args: [{
@@ -24168,17 +24511,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
24168
24511
  fillMode="flat"
24169
24512
  [attr.title]="ctx.localization.get('columns')"
24170
24513
  icon="columns"
24171
- [svgIcon]="columnsIcon"></button>
24514
+ [svgIcon]="columnsIcon"
24515
+ [attr.aria-haspopup]="'dialog'"
24516
+ [attr.aria-expanded]="!!(popupRef)"
24517
+ [attr.aria-controls]="!!(popupRef) ? popupId : undefined"></button>
24172
24518
  <ng-template #template>
24173
24519
  <span class='k-column-chooser-title'>{{ ctx.localization.get('columns') }}</span>
24174
24520
  <kendo-grid-columnlist
24521
+ #columnList
24175
24522
  [columns]="columns"
24523
+ [ariaLabel]="ctx.localization.get('columns')"
24524
+ [isLast]="true"
24176
24525
  [applyText]="ctx.localization.get('columnsApply')"
24177
24526
  [resetText]="ctx.localization.get('columnsReset')"
24178
24527
  [autoSync]="autoSync"
24179
24528
  [allowHideAll]="allowHideAll"
24180
24529
  (apply)="onApply($event)"
24181
- (columnChange)="onChange($event)">
24530
+ (columnChange)="onChange($event)"
24531
+ (keydown.shift.tab)="onShiftTab($event)">
24182
24532
  </kendo-grid-columnlist>
24183
24533
  </ng-template>
24184
24534
  `
@@ -24187,9 +24537,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
24187
24537
  type: Input
24188
24538
  }], allowHideAll: [{
24189
24539
  type: Input
24540
+ }], anchor: [{
24541
+ type: ViewChild,
24542
+ args: ['anchor']
24543
+ }], columnList: [{
24544
+ type: ViewChild,
24545
+ args: ['columnList']
24190
24546
  }] } });
24191
24547
 
24192
24548
  const COMPONENTS = [
24549
+ ColumnMenuChooserItemCheckedDirective,
24193
24550
  ColumnListComponent,
24194
24551
  ColumnChooserComponent,
24195
24552
  ColumnMenuChooserComponent,
@@ -24232,7 +24589,8 @@ class ColumnMenuModule {
24232
24589
  }
24233
24590
  }
24234
24591
  ColumnMenuModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnMenuModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
24235
- ColumnMenuModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnMenuModule, declarations: [ColumnListComponent,
24592
+ ColumnMenuModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnMenuModule, declarations: [ColumnMenuChooserItemCheckedDirective,
24593
+ ColumnListComponent,
24236
24594
  ColumnChooserComponent,
24237
24595
  ColumnMenuChooserComponent,
24238
24596
  ColumnMenuFilterComponent,
@@ -24247,7 +24605,8 @@ ColumnMenuModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", versio
24247
24605
  ColumnMenuStickComponent,
24248
24606
  ColumnMenuPositionComponent,
24249
24607
  ColumnMenuAutoSizeColumnComponent,
24250
- ColumnMenuAutoSizeAllColumnsComponent], imports: [CommonModule, FilterMenuModule, ButtonModule, TabStripModule], exports: [ColumnListComponent,
24608
+ ColumnMenuAutoSizeAllColumnsComponent], imports: [CommonModule, FilterMenuModule, ButtonModule, TabStripModule], exports: [ColumnMenuChooserItemCheckedDirective,
24609
+ ColumnListComponent,
24251
24610
  ColumnChooserComponent,
24252
24611
  ColumnMenuChooserComponent,
24253
24612
  ColumnMenuFilterComponent,