@progress/kendo-angular-grid 13.3.1-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 (46) 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-template.directive.mjs +21 -1
  27. package/esm2020/filtering/menu/filter-menu.component.mjs +52 -10
  28. package/esm2020/filtering/menu/numeric-filter-menu.component.mjs +1 -1
  29. package/esm2020/filtering/menu/string-filter-menu.component.mjs +1 -1
  30. package/esm2020/navigation/logical-cell.directive.mjs +1 -1
  31. package/esm2020/package-metadata.mjs +2 -2
  32. package/esm2020/pager/pager-numeric-buttons.component.mjs +14 -8
  33. package/esm2020/pager/pager-page-sizes.component.mjs +1 -1
  34. package/esm2020/pager/pager.component.mjs +76 -42
  35. package/esm2020/rendering/footer/footer.component.mjs +1 -1
  36. package/esm2020/rendering/groups-expand.directive.mjs +9 -1
  37. package/esm2020/rendering/header/header.component.mjs +31 -21
  38. package/fesm2015/progress-kendo-angular-grid.mjs +927 -540
  39. package/fesm2020/progress-kendo-angular-grid.mjs +928 -549
  40. package/filtering/menu/filter-menu-template.directive.d.ts +21 -1
  41. package/filtering/menu/filter-menu.component.d.ts +13 -4
  42. package/package.json +16 -16
  43. package/pager/pager-numeric-buttons.component.d.ts +2 -1
  44. package/pager/pager.component.d.ts +5 -1
  45. package/rendering/header/header.component.d.ts +4 -1
  46. 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';
@@ -2702,8 +2702,28 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
2702
2702
  }] }]; } });
2703
2703
 
2704
2704
  /**
2705
- * Represents the filter-menu template
2705
+ * Represents the filter-menu template.
2706
+ * Helps to customize the content of the filter menu. To define the filter menu template, nest an `<ng-template>` tag with the
2707
+ * `kendoGridFilterMenuTemplate` directive inside a `<kendo-grid-column>` tag
2706
2708
  * ([see example]({% slug filter_menu %}#toc-custom-filters)).
2709
+ *
2710
+ * The template context is set to the current data item and the following additional fields are passed:
2711
+ * - `column`&mdash;Defines an instance of the [`ColumnComponent`]({% slug api_grid_columncomponent %}) option.. Use it as an alias for a template variable by utilizing the `let-column="column"` syntax.
2712
+ * - `filter`&mdash;The provided filter descriptors. Use it as an alias for a template variable by utilizing the `let-filter="filter"` syntax.
2713
+ * - `filterService`&mdash;Represents the [`FilterService`]({% slug api_grid_filterservice %}). Use it as an alias for a template variable by utilizing the `let-filterService="filterService"` syntax.
2714
+ *
2715
+ * ```html
2716
+ * <kendo-grid-column field="CategoryID" title="Category">
2717
+ * <ng-template kendoGridFilterMenuTemplate
2718
+ * let-column="column"
2719
+ * let-filter="filter"
2720
+ * let-filterService="filterService"
2721
+ * >
2722
+ * ...
2723
+ * </ng-template>
2724
+ * ...
2725
+ * </kendo-grid-column>
2726
+ * ```
2707
2727
  */
2708
2728
  class FilterMenuTemplateDirective {
2709
2729
  constructor(templateRef) {
@@ -4422,8 +4442,8 @@ const packageMetadata = {
4422
4442
  name: '@progress/kendo-angular-grid',
4423
4443
  productName: 'Kendo UI for Angular',
4424
4444
  productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],
4425
- publishDate: 1692175201,
4426
- version: '13.3.1-develop.1',
4445
+ publishDate: 1692972014,
4446
+ version: '13.4.0-develop.10',
4427
4447
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'
4428
4448
  };
4429
4449
 
@@ -7039,23 +7059,46 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
7039
7059
  type: Input
7040
7060
  }] } });
7041
7061
 
7062
+ // eslint-disable no-access-missing-member
7042
7063
  /**
7043
- * 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)).
7044
7065
  */
7045
- class PagerPrevButtonsComponent extends PagerElementComponent {
7046
- constructor(ctx, pagerContext, cd, navigationService) {
7066
+ class PagerInfoComponent extends PagerElementComponent {
7067
+ constructor(ctx, cd, pagerContext) {
7047
7068
  super(ctx, pagerContext, cd);
7048
- 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;
7049
7092
  }
7050
7093
  /**
7051
7094
  * @hidden
7052
7095
  *
7053
7096
  * @readonly
7054
7097
  * @type {boolean}
7055
- * @memberOf PagerPrevButtonsComponent
7098
+ * @memberOf PagerInfoComponent
7056
7099
  */
7057
- get disabled() {
7058
- return this.currentPage === 1 || !this.total;
7100
+ get classes() {
7101
+ return true;
7059
7102
  }
7060
7103
  onChanges({ total, skip, pageSize }) {
7061
7104
  this.total = total;
@@ -7064,162 +7107,260 @@ class PagerPrevButtonsComponent extends PagerElementComponent {
7064
7107
  this.cd.markForCheck();
7065
7108
  }
7066
7109
  }
7067
- 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 });
7068
- PagerPrevButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: PagerPrevButtonsComponent, selector: "kendo-pager-prev-buttons", usesInheritance: true, ngImport: i0, template: `
7069
- <button
7070
- [kendoGridFocusable]="!disabled"
7071
- kendoButton
7072
- type="button"
7073
- [title]="textFor('pagerFirstPage')"
7074
- [attr.aria-label]="textFor('pagerFirstPage')"
7075
- (click)="currentPage !== 1 ? changePage(0) : false"
7076
- role="button"
7077
- [icon]="prevArrowIcons[0]"
7078
- [svgIcon]="prevArrowSVGIcons[0]"
7079
- class="k-pager-nav k-pager-first"
7080
- [disabled]="disabled"
7081
- fillMode="flat"
7082
- rounded="none"
7083
- [size]="size">
7084
- </button>
7085
- <button
7086
- kendoButton
7087
- [kendoGridFocusable]="!disabled"
7088
- type="button"
7089
- class="k-pager-nav"
7090
- [disabled]="disabled"
7091
- [icon]="prevArrowIcons[1]"
7092
- [svgIcon]="prevArrowSVGIcons[1]"
7093
- fillMode="flat"
7094
- rounded="none"
7095
- [size]="size"
7096
- [title]="textFor('pagerPreviousPage')"
7097
- [attr.aria-label]="textFor('pagerPreviousPage')"
7098
- (click)="currentPage !== 1 ? changePage(currentPage-2) : false">
7099
- </button>
7100
- `, 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 });
7101
- 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: [{
7102
7113
  type: Component,
7103
7114
  args: [{
7104
7115
  changeDetection: ChangeDetectionStrategy.OnPush,
7105
- selector: 'kendo-pager-prev-buttons',
7106
- template: `
7107
- <button
7108
- [kendoGridFocusable]="!disabled"
7109
- kendoButton
7110
- type="button"
7111
- [title]="textFor('pagerFirstPage')"
7112
- [attr.aria-label]="textFor('pagerFirstPage')"
7113
- (click)="currentPage !== 1 ? changePage(0) : false"
7114
- role="button"
7115
- [icon]="prevArrowIcons[0]"
7116
- [svgIcon]="prevArrowSVGIcons[0]"
7117
- class="k-pager-nav k-pager-first"
7118
- [disabled]="disabled"
7119
- fillMode="flat"
7120
- rounded="none"
7121
- [size]="size">
7122
- </button>
7123
- <button
7124
- kendoButton
7125
- [kendoGridFocusable]="!disabled"
7126
- type="button"
7127
- class="k-pager-nav"
7128
- [disabled]="disabled"
7129
- [icon]="prevArrowIcons[1]"
7130
- [svgIcon]="prevArrowSVGIcons[1]"
7131
- fillMode="flat"
7132
- rounded="none"
7133
- [size]="size"
7134
- [title]="textFor('pagerPreviousPage')"
7135
- [attr.aria-label]="textFor('pagerPreviousPage')"
7136
- (click)="currentPage !== 1 ? changePage(currentPage-2) : false">
7137
- </button>
7138
- `
7116
+ selector: 'kendo-pager-info',
7117
+ template: `{{currentPageText}} - {{maxItems}} {{textFor('pagerOf')}} {{total}} {{textFor('pagerItems')}}`
7139
7118
  }]
7140
- }], 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
+ }] } });
7141
7126
 
7142
7127
  /**
7143
- * Displays numeric buttons to enable navigation between the pages ([see example](slug:pager_template_grid#toc-using-built-in-pager-components)).
7128
+ * @hidden
7144
7129
  */
7145
- class PagerNumericButtonsComponent extends PagerElementComponent {
7146
- 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) {
7147
7160
  super(ctx, pagerContext, cd);
7148
7161
  this.pagerContext = pagerContext;
7149
- this.numbersWrapClass = true;
7162
+ this.navigationService = navigationService;
7163
+ this._pageSizes = [];
7150
7164
  }
7151
7165
  /**
7152
- * @hidden
7153
- *
7154
- * @readonly
7155
- * @type {number[]}
7156
- * @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))
7157
7168
  */
7158
- get buttons() {
7159
- const result = [];
7160
- for (let idx = this.start; idx <= this.end; idx++) {
7161
- 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];
7162
7184
  }
7163
- return result;
7185
+ this._pageSizes = normalizedItems;
7186
+ }
7187
+ get pageSizes() {
7188
+ return this._pageSizes;
7164
7189
  }
7165
7190
  /**
7166
7191
  * @hidden
7192
+ *
7193
+ * @readonly
7167
7194
  */
7168
- get end() {
7169
- return Math.min((this.start + this.buttonCount) - 1, this.totalPages);
7195
+ get classes() {
7196
+ return true;
7170
7197
  }
7171
7198
  /**
7172
7199
  * @hidden
7200
+ *
7201
+ * @readonly
7173
7202
  */
7174
- get start() {
7175
- const page = this.currentPage;
7176
- const buttonCount = this.buttonCount;
7177
- if (page > buttonCount) {
7178
- const reminder = (page % buttonCount);
7179
- return (reminder === 0) ? (page - buttonCount) + 1 : (page - reminder) + 1;
7180
- }
7181
- 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;
7182
7212
  }
7183
7213
  /**
7184
7214
  * @hidden
7185
7215
  */
7186
- pageLabel(num) {
7187
- const pageText = this.textFor('pagerPage');
7188
- if (pageText) {
7189
- return pageText + ' ' + num;
7190
- }
7191
- return num.toString();
7216
+ pageSizeChange(value) {
7217
+ this.pageSize = typeof value === 'number' ? value : this.total;
7218
+ this.pagerContext.changePageSize(this.pageSize);
7192
7219
  }
7193
7220
  /**
7194
7221
  * @hidden
7195
7222
  */
7196
- onSelectChange(e) {
7197
- const target = e.target;
7198
- const valueAsNumber = Number(target.value);
7199
- if (!Number.isNaN(valueAsNumber)) {
7200
- this.changePage(valueAsNumber - 1);
7201
- }
7202
- else {
7203
- if (target.value === 'previousButtons') {
7204
- this.changePage(this.start - 2);
7205
- }
7206
- else {
7207
- this.changePage(this.end);
7208
- }
7209
- }
7223
+ getValue(page) {
7224
+ return typeof page.value === 'number' ? page.value : this.total;
7210
7225
  }
7211
7226
  onChanges({ total, skip, pageSize }) {
7212
7227
  this.total = total;
7213
7228
  this.skip = skip;
7214
- this.pageSize = pageSize;
7229
+ this.pageSize = typeof pageSize === 'number' ? pageSize : this.total;
7215
7230
  this.cd.markForCheck();
7216
7231
  }
7217
7232
  }
7218
- 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 });
7219
- 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: `
7220
- <select
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
7221
7361
  class="k-dropdown-list k-dropdown k-picker k-picker-solid k-rounded-md"
7222
7362
  kendoGridFocusable
7363
+ [style.display]="'none'"
7223
7364
  [attr.title]="textFor('selectPage')"
7224
7365
  [attr.aria-label]="textFor('selectPage')"
7225
7366
  [ngClass]="{
@@ -7246,7 +7387,7 @@ PagerNumericButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12
7246
7387
  [attr.aria-label]="pageLabel(end + 1)">...
7247
7388
  </option>
7248
7389
  </select>
7249
- <div class="k-pager-numbers">
7390
+ <div class="k-pager-numbers" #numbers>
7250
7391
  <button *ngIf="start > 1"
7251
7392
  type="button"
7252
7393
  kendoGridFocusable
@@ -7296,8 +7437,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
7296
7437
  selector: 'kendo-pager-numeric-buttons',
7297
7438
  template: `
7298
7439
  <select
7440
+ #select
7299
7441
  class="k-dropdown-list k-dropdown k-picker k-picker-solid k-rounded-md"
7300
7442
  kendoGridFocusable
7443
+ [style.display]="'none'"
7301
7444
  [attr.title]="textFor('selectPage')"
7302
7445
  [attr.aria-label]="textFor('selectPage')"
7303
7446
  [ngClass]="{
@@ -7324,7 +7467,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
7324
7467
  [attr.aria-label]="pageLabel(end + 1)">...
7325
7468
  </option>
7326
7469
  </select>
7327
- <div class="k-pager-numbers">
7470
+ <div class="k-pager-numbers" #numbers>
7328
7471
  <button *ngIf="start > 1"
7329
7472
  type="button"
7330
7473
  kendoGridFocusable
@@ -7368,13 +7511,116 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
7368
7511
  </div>
7369
7512
  `
7370
7513
  }]
7371
- }], ctorParameters: function () { return [{ type: ContextService }, { type: i0.ChangeDetectorRef }, { type: PagerContextService }]; }, propDecorators: { numbersWrapClass: [{
7372
- type: HostBinding,
7373
- 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 }]
7374
7520
  }], buttonCount: [{
7375
7521
  type: Input
7376
7522
  }] } });
7377
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
+
7378
7624
  /**
7379
7625
  * @hidden
7380
7626
  */
@@ -7546,296 +7792,76 @@ class PagerNextButtonsComponent extends PagerElementComponent {
7546
7792
  }
7547
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 });
7548
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: `
7549
- <button
7550
- kendoButton
7551
- [kendoGridFocusable]="!disabled"
7552
- type="button"
7553
- [size]="size"
7554
- [icon]="nextArrowIcons[0]"
7555
- [svgIcon]="nextArrowSVGIcons[0]"
7556
- fillMode="flat"
7557
- rounded="none"
7558
- class="k-pager-nav"
7559
- [disabled]="disabled"
7560
- [title]="textFor('pagerNextPage')"
7561
- [attr.aria-label]="textFor('pagerNextPage')"
7562
- (click)="currentPage !== totalPages ? changePage(currentPage) : false">
7563
- </button>
7564
- <button
7565
- kendoButton
7566
- [kendoGridFocusable]="!disabled"
7567
- type="button"
7568
- [size]="size"
7569
- [icon]="nextArrowIcons[1]"
7570
- [svgIcon]="nextArrowSVGIcons[1]"
7571
- fillMode="flat"
7572
- rounded="none"
7573
- class="k-pager-nav k-pager-last"
7574
- [disabled]="disabled"
7575
- [title]="textFor('pagerLastPage')"
7576
- [attr.aria-label]="textFor('pagerLastPage')"
7577
- (click)="currentPage !== totalPages ? changePage(totalPages-1) : false">
7578
- </button>
7579
- `, 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 });
7580
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerNextButtonsComponent, decorators: [{
7581
- type: Component,
7582
- args: [{
7583
- changeDetection: ChangeDetectionStrategy.OnPush,
7584
- selector: 'kendo-pager-next-buttons',
7585
- template: `
7586
- <button
7587
- kendoButton
7588
- [kendoGridFocusable]="!disabled"
7589
- type="button"
7590
- [size]="size"
7591
- [icon]="nextArrowIcons[0]"
7592
- [svgIcon]="nextArrowSVGIcons[0]"
7593
- fillMode="flat"
7594
- rounded="none"
7595
- class="k-pager-nav"
7596
- [disabled]="disabled"
7597
- [title]="textFor('pagerNextPage')"
7598
- [attr.aria-label]="textFor('pagerNextPage')"
7599
- (click)="currentPage !== totalPages ? changePage(currentPage) : false">
7600
- </button>
7601
- <button
7602
- kendoButton
7603
- [kendoGridFocusable]="!disabled"
7604
- type="button"
7605
- [size]="size"
7606
- [icon]="nextArrowIcons[1]"
7607
- [svgIcon]="nextArrowSVGIcons[1]"
7608
- fillMode="flat"
7609
- rounded="none"
7610
- class="k-pager-nav k-pager-last"
7611
- [disabled]="disabled"
7612
- [title]="textFor('pagerLastPage')"
7613
- [attr.aria-label]="textFor('pagerLastPage')"
7614
- (click)="currentPage !== totalPages ? changePage(totalPages-1) : false">
7615
- </button>
7616
- `
7617
- }]
7618
- }], ctorParameters: function () { return [{ type: ContextService }, { type: PagerContextService }, { type: i0.ChangeDetectorRef }, { type: NavigationService }]; } });
7619
-
7620
- // eslint-disable no-access-missing-member
7621
- /**
7622
- * Displays information about the current page and the total number of records ([see example](slug:pager_template_grid#toc-using-built-in-pager-components)).
7623
- */
7624
- class PagerInfoComponent extends PagerElementComponent {
7625
- constructor(ctx, cd, pagerContext) {
7626
- super(ctx, pagerContext, cd);
7627
- this.pagerContext = pagerContext;
7628
- }
7629
- /**
7630
- * @hidden
7631
- *
7632
- * @readonly
7633
- * @type {number}
7634
- * @memberOf PagerInfoComponent
7635
- */
7636
- get maxItems() {
7637
- return Math.min(this.currentPage * this.pageSize, this.total);
7638
- }
7639
- /**
7640
- * @hidden
7641
- *
7642
- * @readonly
7643
- * @type {number}
7644
- * @memberOf PagerInfoComponent
7645
- */
7646
- get currentPageText() {
7647
- return this.total ?
7648
- (this.currentPage - 1) * this.pageSize + 1 :
7649
- 0;
7650
- }
7651
- /**
7652
- * @hidden
7653
- *
7654
- * @readonly
7655
- * @type {boolean}
7656
- * @memberOf PagerInfoComponent
7657
- */
7658
- get classes() {
7659
- return true;
7660
- }
7661
- onChanges({ total, skip, pageSize }) {
7662
- this.total = total;
7663
- this.skip = skip;
7664
- this.pageSize = pageSize;
7665
- this.cd.markForCheck();
7666
- }
7667
- }
7668
- 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 });
7669
- 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 });
7670
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerInfoComponent, decorators: [{
7671
- type: Component,
7672
- args: [{
7673
- changeDetection: ChangeDetectionStrategy.OnPush,
7674
- selector: 'kendo-pager-info',
7675
- template: `{{currentPageText}} - {{maxItems}} {{textFor('pagerOf')}} {{total}} {{textFor('pagerItems')}}`
7676
- }]
7677
- }], ctorParameters: function () { return [{ type: ContextService }, { type: i0.ChangeDetectorRef }, { type: PagerContextService }]; }, propDecorators: { classes: [{
7678
- type: HostBinding,
7679
- args: ["class.k-pager-info"]
7680
- }, {
7681
- type: HostBinding,
7682
- args: ["class.k-label"]
7683
- }] } });
7684
-
7685
- /**
7686
- * @hidden
7687
- */
7688
- class PagerDropDownListDirective {
7689
- constructor(host) {
7690
- this.host = host;
7691
- this.keydownHandler = (e) => {
7692
- if (e.keyCode === Keys.Escape && this.host.isOpen) {
7693
- e.stopPropagation();
7694
- this.host.toggle(false);
7695
- }
7696
- };
7697
- }
7698
- ngAfterViewInit() {
7699
- const wrapperElement = this.host.wrapper.nativeElement;
7700
- wrapperElement.addEventListener('keydown', this.keydownHandler, true);
7701
- }
7702
- ngOnDestroy() {
7703
- this.host.wrapper.nativeElement.removeEventListener('keydown', this.keydownHandler);
7704
- }
7705
- }
7706
- 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 });
7707
- PagerDropDownListDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.12", type: PagerDropDownListDirective, selector: "[kendoGridPagerDropDown]", ngImport: i0 });
7708
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerDropDownListDirective, decorators: [{
7709
- type: Directive,
7710
- args: [{ selector: '[kendoGridPagerDropDown]' }]
7711
- }], ctorParameters: function () { return [{ type: i1$4.DropDownListComponent }]; } });
7712
-
7713
- /**
7714
- * Displays a drop-down list for the page size selection ([see example](slug:pager_template_grid#toc-using-built-in-pager-components)).
7715
- */
7716
- class PagerPageSizesComponent extends PagerElementComponent {
7717
- constructor(ctx, cd, pagerContext, navigationService) {
7718
- super(ctx, pagerContext, cd);
7719
- this.pagerContext = pagerContext;
7720
- this.navigationService = navigationService;
7721
- this._pageSizes = [];
7722
- }
7723
- /**
7724
- * The page sizes collection. Can be an Array of numbers and/or [`PageSizeItem`](slug:api_grid_pagesizeitem) objects
7725
- * ([see example]({% slug paging_grid %}#toc-pager-templates))
7726
- */
7727
- set pageSizes(pageSizes) {
7728
- let normalizedItems = [];
7729
- pageSizes.forEach(item => {
7730
- if (typeof item === 'number') {
7731
- normalizedItems.push({
7732
- text: item.toString(),
7733
- value: item
7734
- });
7735
- }
7736
- else {
7737
- normalizedItems.push(item);
7738
- }
7739
- });
7740
- if (this.pageSize && !normalizedItems.some(item => item.value === this.pageSize)) {
7741
- normalizedItems = [{ text: this.pageSize.toString(), value: this.pageSize }, ...normalizedItems];
7742
- }
7743
- this._pageSizes = normalizedItems;
7744
- }
7745
- get pageSizes() {
7746
- return this._pageSizes;
7747
- }
7748
- /**
7749
- * @hidden
7750
- *
7751
- * @readonly
7752
- */
7753
- get classes() {
7754
- return true;
7755
- }
7756
- /**
7757
- * @hidden
7758
- *
7759
- * @readonly
7760
- */
7761
- get showInitialPageSize() {
7762
- return this.pageSizes
7763
- .filter(item => {
7764
- if (typeof item.value === 'number') {
7765
- return item.value === Number(this.pageSize);
7766
- }
7767
- return this.total === Number(this.pageSize);
7768
- })
7769
- .length === 0;
7770
- }
7771
- /**
7772
- * @hidden
7773
- */
7774
- pageSizeChange(value) {
7775
- this.pageSize = typeof value === 'number' ? value : this.total;
7776
- this.pagerContext.changePageSize(this.pageSize);
7777
- }
7778
- /**
7779
- * @hidden
7780
- */
7781
- getValue(page) {
7782
- return typeof page.value === 'number' ? page.value : this.total;
7783
- }
7784
- onChanges({ total, skip, pageSize }) {
7785
- this.total = total;
7786
- this.skip = skip;
7787
- this.pageSize = typeof pageSize === 'number' ? pageSize : this.total;
7788
- this.cd.markForCheck();
7789
- }
7790
- }
7791
- 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 });
7792
- 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: `
7793
- <kendo-dropdownlist
7794
- class="k-dropdown"
7795
- #dropdownlist
7795
+ <button
7796
+ kendoButton
7797
+ [kendoGridFocusable]="!disabled"
7798
+ type="button"
7796
7799
  [size]="size"
7797
- kendoGridPagerDropDown
7798
- [tabindex]="0"
7799
- kendoGridFocusable
7800
- [data]="pageSizes"
7801
- textField="text"
7802
- valueField="value"
7803
- [valuePrimitive]="true"
7804
- [value]="pageSize"
7805
- (valueChange)="pageSizeChange($event)"></kendo-dropdownlist>
7806
- <kendo-label [for]="dropdownlist" [text]="textFor('pagerItemsPerPage')"></kendo-label>
7807
- `, 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 });
7808
- 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: [{
7809
7827
  type: Component,
7810
7828
  args: [{
7811
7829
  changeDetection: ChangeDetectionStrategy.OnPush,
7812
- selector: 'kendo-pager-page-sizes',
7830
+ selector: 'kendo-pager-next-buttons',
7813
7831
  template: `
7814
- <kendo-dropdownlist
7815
- class="k-dropdown"
7816
- #dropdownlist
7832
+ <button
7833
+ kendoButton
7834
+ [kendoGridFocusable]="!disabled"
7835
+ type="button"
7817
7836
  [size]="size"
7818
- kendoGridPagerDropDown
7819
- [tabindex]="0"
7820
- kendoGridFocusable
7821
- [data]="pageSizes"
7822
- textField="text"
7823
- valueField="value"
7824
- [valuePrimitive]="true"
7825
- [value]="pageSize"
7826
- (valueChange)="pageSizeChange($event)"></kendo-dropdownlist>
7827
- <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>
7828
7862
  `
7829
7863
  }]
7830
- }], ctorParameters: function () { return [{ type: ContextService }, { type: i0.ChangeDetectorRef }, { type: PagerContextService }, { type: NavigationService }]; }, propDecorators: { pageSizes: [{
7831
- type: Input
7832
- }], classes: [{
7833
- type: HostBinding,
7834
- args: ['class.k-pager-sizes']
7835
- }, {
7836
- type: HostBinding,
7837
- args: ['class.k-label']
7838
- }] } });
7864
+ }], ctorParameters: function () { return [{ type: ContextService }, { type: PagerContextService }, { type: i0.ChangeDetectorRef }, { type: NavigationService }]; } });
7839
7865
 
7840
7866
  /**
7841
7867
  * @hidden
@@ -7866,18 +7892,33 @@ class PagerComponent {
7866
7892
  if (this.template || !element) {
7867
7893
  return;
7868
7894
  }
7869
- const width = element.offsetWidth;
7870
- if (width < RESPONSIVE_BREAKPOINT_MEDIUM) {
7871
- this.renderer.removeClass(element, 'k-pager-mobile-md');
7872
- this.renderer.addClass(element, 'k-pager-mobile-sm');
7873
- }
7874
- else if (width >= RESPONSIVE_BREAKPOINT_MEDIUM && width < RESPONSIVE_BREAKPOINT_LARGE) {
7875
- this.renderer.addClass(element, 'k-pager-mobile-md');
7876
- this.renderer.removeClass(element, 'k-pager-mobile-sm');
7877
- }
7878
- else {
7879
- this.clearResponsiveClasses();
7880
- }
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
+ });
7881
7922
  };
7882
7923
  }
7883
7924
  set options(value) {
@@ -7996,12 +8037,10 @@ class PagerComponent {
7996
8037
  }
7997
8038
  const changesInTemplate = changes['template'];
7998
8039
  if (changesInTemplate) {
7999
- // eslint-disable-next-line no-unused-expressions
8000
- changesInTemplate.currentValue ? this.clearResponsiveClasses() : this.resizeHandler();
8040
+ changesInTemplate.currentValue ? this.clearResponsiveStyling() : this.resizeHandler();
8001
8041
  }
8002
8042
  if (changes['options']) {
8003
- // eslint-disable-next-line no-unused-expressions
8004
- this.settings.responsive ? this.resizeHandler() : this.clearResponsiveClasses();
8043
+ this.settings.responsive ? this.resizeHandler() : this.clearResponsiveStyling();
8005
8044
  }
8006
8045
  }
8007
8046
  ngOnDestroy() {
@@ -8027,11 +8066,6 @@ class PagerComponent {
8027
8066
  }
8028
8067
  });
8029
8068
  }
8030
- clearResponsiveClasses() {
8031
- const element = this.element.nativeElement;
8032
- this.renderer.removeClass(element, 'k-pager-mobile-sm');
8033
- this.renderer.removeClass(element, 'k-pager-mobile-md');
8034
- }
8035
8069
  shouldTriggerPageChange(target, condition) {
8036
8070
  return this.navigationService.pagerEnabled &&
8037
8071
  target === this.element.nativeElement &&
@@ -8054,6 +8088,18 @@ class PagerComponent {
8054
8088
  this.cellContext.focusGroup = this.focusGroup;
8055
8089
  }
8056
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
+ }
8057
8103
  }
8058
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 });
8059
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: [{
@@ -8067,7 +8113,7 @@ PagerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version
8067
8113
  provide: FocusGroup,
8068
8114
  deps: [FocusRoot],
8069
8115
  useClass: FocusGroup
8070
- }], 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: `
8071
8117
  <div
8072
8118
  *ngIf="navigationService.pagerEnabled"
8073
8119
  class="k-sr-only"
@@ -8081,20 +8127,21 @@ PagerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version
8081
8127
  [ngTemplateOutletContext]="templateContext">
8082
8128
  </ng-container>
8083
8129
  <ng-container *ngIf="!template?.templateRef">
8084
- <kendo-pager-prev-buttons [size]="size" *ngIf="settings.previousNext"></kendo-pager-prev-buttons>
8085
- <kendo-pager-numeric-buttons
8086
- [size]="size"
8087
- *ngIf="settings.type === 'numeric'"
8088
- [buttonCount]="settings.buttonCount">
8089
- </kendo-pager-numeric-buttons>
8090
- <kendo-pager-input [size]="size" *ngIf="settings.type === 'input'"></kendo-pager-input>
8091
- <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>
8092
8140
  <kendo-pager-info *ngIf='settings.info'></kendo-pager-info>
8093
8141
  <kendo-pager-page-sizes
8094
8142
  [size]="size"
8095
8143
  *ngIf="settings.pageSizes"
8096
8144
  [pageSizes]="$any(settings.pageSizes)"
8097
- #pageSizes
8098
8145
  ></kendo-pager-page-sizes>
8099
8146
  </ng-container>
8100
8147
  <div
@@ -8136,20 +8183,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
8136
8183
  [ngTemplateOutletContext]="templateContext">
8137
8184
  </ng-container>
8138
8185
  <ng-container *ngIf="!template?.templateRef">
8139
- <kendo-pager-prev-buttons [size]="size" *ngIf="settings.previousNext"></kendo-pager-prev-buttons>
8140
- <kendo-pager-numeric-buttons
8141
- [size]="size"
8142
- *ngIf="settings.type === 'numeric'"
8143
- [buttonCount]="settings.buttonCount">
8144
- </kendo-pager-numeric-buttons>
8145
- <kendo-pager-input [size]="size" *ngIf="settings.type === 'input'"></kendo-pager-input>
8146
- <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>
8147
8196
  <kendo-pager-info *ngIf='settings.info'></kendo-pager-info>
8148
8197
  <kendo-pager-page-sizes
8149
8198
  [size]="size"
8150
8199
  *ngIf="settings.pageSizes"
8151
8200
  [pageSizes]="$any(settings.pageSizes)"
8152
- #pageSizes
8153
8201
  ></kendo-pager-page-sizes>
8154
8202
  </ng-container>
8155
8203
  <div
@@ -8167,7 +8215,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
8167
8215
  }, {
8168
8216
  type: Inject,
8169
8217
  args: [CELL_CONTEXT]
8170
- }] }, { 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: [{
8171
8228
  type: Input
8172
8229
  }], skip: [{
8173
8230
  type: Input
@@ -9508,7 +9565,7 @@ FilterMenuInputWrapperComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion:
9508
9565
  (keydown.shift.tab)="onShiftTab($event)">
9509
9566
  </kendo-dropdownlist>
9510
9567
  <ng-content></ng-content>
9511
- `, 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"] }] });
9512
9569
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FilterMenuInputWrapperComponent, decorators: [{
9513
9570
  type: Component,
9514
9571
  args: [{
@@ -9704,7 +9761,7 @@ StringFilterMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.
9704
9761
  [filter]="filter"
9705
9762
  [menuTabbingService]="menuTabbingService">
9706
9763
  </kendo-grid-string-filter-menu-input>
9707
- `, 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"] }] });
9708
9765
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: StringFilterMenuComponent, decorators: [{
9709
9766
  type: Component,
9710
9767
  args: [{
@@ -10110,7 +10167,7 @@ NumericFilterMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0
10110
10167
  [menuTabbingService]="menuTabbingService"
10111
10168
  >
10112
10169
  </kendo-grid-numeric-filter-menu-input>
10113
- `, 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"] }] });
10114
10171
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: NumericFilterMenuComponent, decorators: [{
10115
10172
  type: Component,
10116
10173
  args: [{
@@ -10565,7 +10622,7 @@ DateFilterMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0"
10565
10622
  [menuTabbingService]="menuTabbingService"
10566
10623
  >
10567
10624
  </kendo-grid-date-filter-menu-input>
10568
- `, 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"] }] });
10569
10626
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: DateFilterMenuComponent, decorators: [{
10570
10627
  type: Component,
10571
10628
  args: [{
@@ -11040,10 +11097,10 @@ class FilterMenuContainerComponent {
11040
11097
  e.preventDefault();
11041
11098
  if (buttonType === 'reset') {
11042
11099
  // eslint-disable-next-line no-unused-expressions
11043
- this.disabled ? this.menuTabbingService.firstFocusable.focus() : this.filterButton.nativeElement.focus();
11100
+ this.menuTabbingService.firstFocusable.focus();
11044
11101
  }
11045
11102
  else {
11046
- this.menuTabbingService.firstFocusable.focus();
11103
+ this.disabled ? this.menuTabbingService.firstFocusable.focus() : this.resetButton.nativeElement.focus();
11047
11104
  }
11048
11105
  }
11049
11106
  }
@@ -11167,15 +11224,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
11167
11224
  args: ['filterButton', { static: false }]
11168
11225
  }] } });
11169
11226
 
11227
+ let id$3 = 0;
11228
+ const getId$1 = (gridId) => `${gridId}-filter-menu-${id$3++}`;
11170
11229
  /**
11171
11230
  * @hidden
11172
11231
  */
11173
11232
  class FilterMenuComponent {
11174
- constructor(filterService, popupService, ctx, navigationService) {
11233
+ constructor(filterService, popupService, ctx, navigationService, renderer, cdr, idService) {
11175
11234
  this.filterService = filterService;
11176
11235
  this.popupService = popupService;
11177
11236
  this.ctx = ctx;
11178
11237
  this.navigationService = navigationService;
11238
+ this.renderer = renderer;
11239
+ this.cdr = cdr;
11240
+ this.idService = idService;
11179
11241
  this.filterIcon = filterIcon;
11180
11242
  this.tabIndex = '-1';
11181
11243
  }
@@ -11190,9 +11252,35 @@ class FilterMenuComponent {
11190
11252
  const columnName = this.column.title || this.column.field;
11191
11253
  return replaceMessagePlaceholder(localizationMsg, 'columnName', columnName);
11192
11254
  }
11255
+ /**
11256
+ * @hidden
11257
+ */
11258
+ get isNavigable() {
11259
+ return this.navigationService.tableEnabled;
11260
+ }
11193
11261
  toggle(anchor, template) {
11194
11262
  this.popupRef = this.popupService.open(anchor, template, this.popupRef);
11195
- 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 {
11196
11284
  if (this.navigationService.tableEnabled) {
11197
11285
  this.navigationService.focusCell(0, this.column.leafIndex);
11198
11286
  }
@@ -11204,6 +11292,8 @@ class FilterMenuComponent {
11204
11292
  }
11205
11293
  close() {
11206
11294
  this.popupService.destroy();
11295
+ this.popupRef = null;
11296
+ this.cdr.markForCheck();
11207
11297
  if (this.navigationService.tableEnabled) {
11208
11298
  this.navigationService.focusCell(0, this.column.leafIndex);
11209
11299
  }
@@ -11212,7 +11302,7 @@ class FilterMenuComponent {
11212
11302
  }
11213
11303
  }
11214
11304
  }
11215
- 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 });
11216
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: `
11217
11307
  <a #anchor
11218
11308
  class="k-grid-filter-menu k-grid-header-menu"
@@ -11221,7 +11311,9 @@ FilterMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ve
11221
11311
  (click)="toggle(anchor, template)"
11222
11312
  (keydown.enter)="$event.stopImmediatePropagation()"
11223
11313
  href="#"
11224
- [attr.title]="filterLabel">
11314
+ [attr.title]="filterLabel"
11315
+ [attr.aria-haspopup]="isNavigable ? undefined : 'dialog'"
11316
+ [attr.aria-expanded]="isNavigable ? undefined : false">
11225
11317
  <kendo-icon-wrapper
11226
11318
  name="filter"
11227
11319
  [svgIcon]="filterIcon"></kendo-icon-wrapper>
@@ -11249,7 +11341,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
11249
11341
  (click)="toggle(anchor, template)"
11250
11342
  (keydown.enter)="$event.stopImmediatePropagation()"
11251
11343
  href="#"
11252
- [attr.title]="filterLabel">
11344
+ [attr.title]="filterLabel"
11345
+ [attr.aria-haspopup]="isNavigable ? undefined : 'dialog'"
11346
+ [attr.aria-expanded]="isNavigable ? undefined : false">
11253
11347
  <kendo-icon-wrapper
11254
11348
  name="filter"
11255
11349
  [svgIcon]="filterIcon"></kendo-icon-wrapper>
@@ -11266,7 +11360,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
11266
11360
  </ng-template>
11267
11361
  `
11268
11362
  }]
11269
- }], 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: [{
11270
11366
  type: Input
11271
11367
  }], filter: [{
11272
11368
  type: Input
@@ -11324,7 +11420,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
11324
11420
  /**
11325
11421
  * @hidden
11326
11422
  */
11327
- const ColunnMenuErrorMessages = {
11423
+ const ColumnMenuErrorMessages = {
11328
11424
  autoSizeColumn: 'The auto size column does not work with enabled virtual columns',
11329
11425
  autoSizeAllColumns: 'The auto size all columns does not work with enabled virtual columns'
11330
11426
  };
@@ -11430,6 +11526,9 @@ class ColumnMenuItemComponent {
11430
11526
  this.collapse = new EventEmitter();
11431
11527
  this.contentState = 'collapsed';
11432
11528
  }
11529
+ ngAfterViewInit() {
11530
+ this.contentTemplate && (this.contentId = `k-${guid()}`);
11531
+ }
11433
11532
  ngOnChanges(changes) {
11434
11533
  if (changes.expanded) {
11435
11534
  this.updateContentState();
@@ -11464,13 +11563,14 @@ ColumnMenuItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0"
11464
11563
  [class.k-selected]="selected"
11465
11564
  [class.k-disabled]="disabled"
11466
11565
  role="button"
11467
- [attr.aria-expanded]="expanded">
11566
+ [attr.aria-expanded]="expanded"
11567
+ [attr.aria-controls]="expanded ? contentId : undefined">
11468
11568
  <kendo-icon-wrapper
11469
11569
  [name]="icon"
11470
11570
  [svgIcon]="svgIcon"></kendo-icon-wrapper>
11471
11571
  {{ text }}
11472
11572
  </div>
11473
- <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">
11474
11574
  <ng-container [ngTemplateOutlet]="contentTemplate.templateRef">
11475
11575
  </ng-container>
11476
11576
  <div>
@@ -11532,13 +11632,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
11532
11632
  [class.k-selected]="selected"
11533
11633
  [class.k-disabled]="disabled"
11534
11634
  role="button"
11535
- [attr.aria-expanded]="expanded">
11635
+ [attr.aria-expanded]="expanded"
11636
+ [attr.aria-controls]="expanded ? contentId : undefined">
11536
11637
  <kendo-icon-wrapper
11537
11638
  [name]="icon"
11538
11639
  [svgIcon]="svgIcon"></kendo-icon-wrapper>
11539
11640
  {{ text }}
11540
11641
  </div>
11541
- <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">
11542
11643
  <ng-container [ngTemplateOutlet]="contentTemplate.templateRef">
11543
11644
  </ng-container>
11544
11645
  <div>
@@ -11914,14 +12015,78 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
11914
12015
  type: Input
11915
12016
  }] } });
11916
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
+
11917
12081
  /**
11918
12082
  * @hidden
11919
12083
  */
11920
12084
  class ColumnListComponent {
11921
- constructor(element, ngZone, renderer) {
12085
+ constructor(element, ngZone, renderer, listNavigationService) {
11922
12086
  this.element = element;
11923
12087
  this.ngZone = ngZone;
11924
12088
  this.renderer = renderer;
12089
+ this.listNavigationService = listNavigationService;
11925
12090
  this.reset = new EventEmitter();
11926
12091
  this.apply = new EventEmitter();
11927
12092
  this.columnChange = new EventEmitter();
@@ -11929,10 +12094,28 @@ class ColumnListComponent {
11929
12094
  this.allowHideAll = false;
11930
12095
  this.actionsClass = 'k-actions k-actions-stretched k-actions-horizontal';
11931
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
+ };
11932
12112
  }
11933
12113
  get className() {
11934
12114
  return true;
11935
12115
  }
12116
+ isChecked(checkbox) {
12117
+ return checkbox.checked;
12118
+ }
11936
12119
  set columns(value) {
11937
12120
  this._columns = value.filter(column => column.includeInChooser !== false);
11938
12121
  this.allColumns = value;
@@ -11950,12 +12133,21 @@ class ColumnListComponent {
11950
12133
  return;
11951
12134
  }
11952
12135
  this.ngZone.runOutsideAngular(() => {
11953
- this.domSubscriptions = this.renderer.listen(this.element.nativeElement, 'click', (e) => {
11954
- 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
+ }
11955
12148
  if (this.autoSync) {
11956
- const index = parseInt(e.target.getAttribute('data-index'), 10);
11957
12149
  const column = this.columns[index];
11958
- const hidden = !e.target.checked;
12150
+ const hidden = !checkbox.checked;
11959
12151
  if (Boolean(column.hidden) !== hidden) {
11960
12152
  this.ngZone.run(() => {
11961
12153
  column.hidden = hidden;
@@ -11966,10 +12158,20 @@ class ColumnListComponent {
11966
12158
  else {
11967
12159
  this.updateDisabled();
11968
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
+ }
11969
12166
  }
11970
- });
12167
+ }));
12168
+ this.domSubscriptions.add(this.renderer.listen(this.element.nativeElement, 'keydown', this.onKeydown));
11971
12169
  });
11972
12170
  }
12171
+ ngAfterViewInit() {
12172
+ this.listNavigationService.items = this.options.toArray();
12173
+ this.listNavigationService.toggle(0, true);
12174
+ }
11973
12175
  ngOnChanges(changes) {
11974
12176
  if (!this.service) {
11975
12177
  return;
@@ -11982,9 +12184,7 @@ class ColumnListComponent {
11982
12184
  }
11983
12185
  }
11984
12186
  ngOnDestroy() {
11985
- if (this.domSubscriptions) {
11986
- this.domSubscriptions();
11987
- }
12187
+ this.domSubscriptions.unsubscribe();
11988
12188
  }
11989
12189
  cancelChanges() {
11990
12190
  this.forEachCheckBox((element, index) => {
@@ -12012,6 +12212,9 @@ class ColumnListComponent {
12012
12212
  if (this.service) {
12013
12213
  this.service.menuTabbingService.firstFocusable.focus();
12014
12214
  }
12215
+ else {
12216
+ this.listNavigationService.toggle(this.listNavigationService.activeIndex, true);
12217
+ }
12015
12218
  }
12016
12219
  }
12017
12220
  forEachCheckBox(callback) {
@@ -12058,35 +12261,94 @@ class ColumnListComponent {
12058
12261
  }
12059
12262
  }
12060
12263
  }
12061
- 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 });
12062
- 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: `
12063
- <div class="k-column-list">
12064
- <label *ngFor="let column of columns; let index = index;" class='k-column-list-item'>
12065
- <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>
12066
12285
  </label>
12067
12286
  </div>
12068
12287
  <div [ngClass]="actionsClass" *ngIf="!autoSync">
12069
- <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>
12070
- <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>
12071
12303
  </div>
12072
- `, 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"] }] });
12073
12305
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnListComponent, decorators: [{
12074
12306
  type: Component,
12075
12307
  args: [{
12076
12308
  selector: 'kendo-grid-columnlist',
12309
+ providers: [ColumnListKeyboardNavigation],
12077
12310
  template: `
12078
- <div class="k-column-list">
12079
- <label *ngFor="let column of columns; let index = index;" class='k-column-list-item'>
12080
- <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>
12081
12330
  </label>
12082
12331
  </div>
12083
12332
  <div [ngClass]="actionsClass" *ngIf="!autoSync">
12084
- <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>
12085
- <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>
12086
12348
  </div>
12087
12349
  `
12088
12350
  }]
12089
- }], 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: [{
12090
12352
  type: HostBinding,
12091
12353
  args: ["class.k-column-list-wrapper"]
12092
12354
  }], reset: [{
@@ -12099,6 +12361,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
12099
12361
  type: Input
12100
12362
  }], autoSync: [{
12101
12363
  type: Input
12364
+ }], ariaLabel: [{
12365
+ type: Input
12102
12366
  }], allowHideAll: [{
12103
12367
  type: Input
12104
12368
  }], applyText: [{
@@ -12113,9 +12377,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
12113
12377
  type: Input
12114
12378
  }], service: [{
12115
12379
  type: Input
12380
+ }], resetButton: [{
12381
+ type: ViewChild,
12382
+ args: ['resetButton', { static: false }]
12116
12383
  }], applyButton: [{
12117
12384
  type: ViewChild,
12118
12385
  args: ['applyButton', { static: false }]
12386
+ }], options: [{
12387
+ type: ViewChildren,
12388
+ args: [ColumnMenuChooserItemCheckedDirective]
12119
12389
  }] } });
12120
12390
 
12121
12391
  /**
@@ -12208,6 +12478,7 @@ ColumnMenuChooserComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0
12208
12478
  <kendo-grid-columnlist
12209
12479
  [applyText]="ctx.localization.get('columnsApply')"
12210
12480
  [resetText]="ctx.localization.get('columnsReset')"
12481
+ [ariaLabel]="ctx.localization.get('columns')"
12211
12482
  [columns]="columns"
12212
12483
  [autoSync]="false"
12213
12484
  [allowHideAll]="false"
@@ -12219,7 +12490,7 @@ ColumnMenuChooserComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0
12219
12490
  </kendo-grid-columnlist>
12220
12491
  </ng-template>
12221
12492
  </kendo-grid-columnmenu-item>
12222
- `, 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]" }] });
12223
12494
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnMenuChooserComponent, decorators: [{
12224
12495
  type: Component,
12225
12496
  args: [{
@@ -12236,6 +12507,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
12236
12507
  <kendo-grid-columnlist
12237
12508
  [applyText]="ctx.localization.get('columnsApply')"
12238
12509
  [resetText]="ctx.localization.get('columnsReset')"
12510
+ [ariaLabel]="ctx.localization.get('columns')"
12239
12511
  [columns]="columns"
12240
12512
  [autoSync]="false"
12241
12513
  [allowHideAll]="false"
@@ -12639,7 +12911,7 @@ class ColumnMenuAutoSizeColumnComponent extends ColumnMenuItemBase {
12639
12911
  ngOnInit() {
12640
12912
  const isVirtualColumns = this.ctx.grid.columnMenuTemplate && this.ctx.grid.virtualColumns;
12641
12913
  if (isVirtualColumns && isDevMode()) {
12642
- console.warn(ColunnMenuErrorMessages.autoSizeColumn);
12914
+ console.warn(ColumnMenuErrorMessages.autoSizeColumn);
12643
12915
  }
12644
12916
  }
12645
12917
  /**
@@ -12706,7 +12978,7 @@ class ColumnMenuAutoSizeAllColumnsComponent extends ColumnMenuItemBase {
12706
12978
  ngOnInit() {
12707
12979
  const isVirtualColumns = this.ctx.grid.columnMenuTemplate && this.ctx.grid.virtualColumns;
12708
12980
  if (isVirtualColumns && isDevMode()) {
12709
- console.warn(ColunnMenuErrorMessages.autoSizeAllColumns);
12981
+ console.warn(ColumnMenuErrorMessages.autoSizeAllColumns);
12710
12982
  }
12711
12983
  }
12712
12984
  /**
@@ -12743,6 +13015,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
12743
13015
  }], ctorParameters: function () { return [{ type: ContextService }]; } });
12744
13016
 
12745
13017
  const POPUP_CLASS = 'k-grid-columnmenu-popup';
13018
+ let id$2 = 0;
13019
+ const getId = (gridId) => `${gridId}-column-menu-${id$2++}`;
12746
13020
  /**
12747
13021
  * Represents the [column menu](slug:columnmenu_grid#toc-customizing-the-position) component.
12748
13022
  *
@@ -12755,7 +13029,7 @@ const POPUP_CLASS = 'k-grid-columnmenu-popup';
12755
13029
  * </kendo-grid>
12756
13030
  */
12757
13031
  class ColumnMenuComponent {
12758
- constructor(navigationService, popupService, service, ctx, renderer, cdr, columnInfoService) {
13032
+ constructor(navigationService, popupService, service, ctx, renderer, cdr, columnInfoService, idService) {
12759
13033
  this.navigationService = navigationService;
12760
13034
  this.popupService = popupService;
12761
13035
  this.service = service;
@@ -12763,6 +13037,7 @@ class ColumnMenuComponent {
12763
13037
  this.renderer = renderer;
12764
13038
  this.cdr = cdr;
12765
13039
  this.columnInfoService = columnInfoService;
13040
+ this.idService = idService;
12766
13041
  /**
12767
13042
  * @hidden
12768
13043
  */
@@ -12808,7 +13083,7 @@ class ColumnMenuComponent {
12808
13083
  */
12809
13084
  this.expandedPosition = false;
12810
13085
  this.moreVerticalIcon = moreVerticalIcon;
12811
- this.closeSubscription = service.closeMenu.subscribe(this.close.bind(this));
13086
+ this.closeSubscription = service.closeMenu.subscribe(this.close.bind(this, true));
12812
13087
  }
12813
13088
  /**
12814
13089
  * @hidden
@@ -12834,6 +13109,12 @@ class ColumnMenuComponent {
12834
13109
  get hasFilter() {
12835
13110
  return hasFilter(this.settings, this.column);
12836
13111
  }
13112
+ /**
13113
+ * @hidden
13114
+ */
13115
+ get isNavigable() {
13116
+ return this.navigationService.tableEnabled;
13117
+ }
12837
13118
  /**
12838
13119
  * @hidden
12839
13120
  */
@@ -12850,7 +13131,7 @@ class ColumnMenuComponent {
12850
13131
  * @hidden
12851
13132
  */
12852
13133
  onApply(changed) {
12853
- this.close();
13134
+ this.close(true);
12854
13135
  if (changed.length) {
12855
13136
  this.cdr.markForCheck();
12856
13137
  this.columnInfoService.changeVisibility(changed);
@@ -12896,11 +13177,11 @@ class ColumnMenuComponent {
12896
13177
  if (this.ctx.grid.virtualColumns && isDevMode()) {
12897
13178
  if (this.settings.autoSizeAllColumns) {
12898
13179
  this.settings.autoSizeAllColumns = false;
12899
- console.warn(ColunnMenuErrorMessages.autoSizeAllColumns);
13180
+ console.warn(ColumnMenuErrorMessages.autoSizeAllColumns);
12900
13181
  }
12901
13182
  if (this.settings.autoSizeColumn) {
12902
13183
  this.settings.autoSizeColumn = false;
12903
- console.warn(ColunnMenuErrorMessages.autoSizeColumn);
13184
+ console.warn(ColumnMenuErrorMessages.autoSizeColumn);
12904
13185
  }
12905
13186
  }
12906
13187
  this.service.menuTabbingService.isTabbedInterface = this.settings.view === 'tabbed' ? true : false;
@@ -12927,12 +13208,32 @@ class ColumnMenuComponent {
12927
13208
  this.expandedColumns = this.getExpandedState(this.settings.columnChooser);
12928
13209
  this.expandedPosition = this.getExpandedState(this.settings.setColumnPosition);
12929
13210
  this.popupRef = this.popupService.open(anchor, template, this.popupRef, POPUP_CLASS);
12930
- if (this.popupRef && this.settings.view === 'tabbed') {
12931
- this.renderer.addClass(this.popupRef.popupElement.firstChild, 'k-column-menu-tabbed');
12932
- this.cdr.detectChanges();
12933
- 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
+ }
12934
13235
  }
12935
- if (!this.popupRef) {
13236
+ else {
12936
13237
  if (this.navigationService.tableEnabled) {
12937
13238
  this.navigationService.focusCell(0, this.column.leafIndex);
12938
13239
  }
@@ -12944,9 +13245,13 @@ class ColumnMenuComponent {
12944
13245
  /**
12945
13246
  * @hidden
12946
13247
  */
12947
- close() {
13248
+ close(triggerFocus = false) {
12948
13249
  this.popupService.destroy();
12949
13250
  this.popupRef = null;
13251
+ this.cdr.markForCheck();
13252
+ if (!triggerFocus) {
13253
+ return;
13254
+ }
12950
13255
  if (this.navigationService.tableEnabled) {
12951
13256
  this.navigationService.focusCell(0, this.column.leafIndex);
12952
13257
  }
@@ -12966,7 +13271,7 @@ class ColumnMenuComponent {
12966
13271
  return typeof (menuItemSettings) === 'object' ? menuItemSettings.expanded : false;
12967
13272
  }
12968
13273
  }
12969
- 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 });
12970
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: [
12971
13276
  ColumnMenuService,
12972
13277
  MenuTabbingService
@@ -12978,7 +13283,9 @@ ColumnMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ve
12978
13283
  (keydown.enter)="$event.stopImmediatePropagation()"
12979
13284
  href="#"
12980
13285
  [tabindex]="tabIndex"
12981
- [attr.title]="columnMenuTitle">
13286
+ [attr.title]="columnMenuTitle"
13287
+ [attr.aria-expanded]="isNavigable ? undefined: false"
13288
+ [attr.aria-haspopup]="isNavigable ? undefined : 'dialog'">
12982
13289
  <kendo-icon-wrapper
12983
13290
  name="more-vertical"
12984
13291
  [svgIcon]="moreVerticalIcon"></kendo-icon-wrapper>
@@ -12991,7 +13298,7 @@ ColumnMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ve
12991
13298
  </ng-template>
12992
13299
  <ng-template #defaultTemplate>
12993
13300
  <kendo-grid-columnmenu-container
12994
- (keydown.escape)="close()"
13301
+ (keydown.escape)="close(true)"
12995
13302
  (keydown.enter)="$event.stopImmediatePropagation()">
12996
13303
  <kendo-grid-columnmenu-sort #sortItem [kendoGridColumnMenuItem]="sortItem" *ngIf="hasSort" [service]="service">
12997
13304
  </kendo-grid-columnmenu-sort>
@@ -13043,7 +13350,7 @@ ColumnMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ve
13043
13350
  </kendo-grid-columnmenu-container>
13044
13351
  </ng-template>
13045
13352
  <ng-template #tabbedInterfaceTemplate>
13046
- <kendo-tabstrip #tabstrip (keydown.escape)="close()">
13353
+ <kendo-tabstrip #tabstrip (keydown.escape)="close(true)">
13047
13354
  <kendo-tabstrip-tab *ngIf="hasFilter">
13048
13355
  <ng-template kendoTabTitle>
13049
13356
  <kendo-icon-wrapper
@@ -13130,7 +13437,7 @@ ColumnMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ve
13130
13437
  </kendo-tabstrip-tab>
13131
13438
  </kendo-tabstrip>
13132
13439
  </ng-template>
13133
- `, 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]" }] });
13134
13441
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnMenuComponent, decorators: [{
13135
13442
  type: Component,
13136
13443
  args: [{
@@ -13147,7 +13454,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
13147
13454
  (keydown.enter)="$event.stopImmediatePropagation()"
13148
13455
  href="#"
13149
13456
  [tabindex]="tabIndex"
13150
- [attr.title]="columnMenuTitle">
13457
+ [attr.title]="columnMenuTitle"
13458
+ [attr.aria-expanded]="isNavigable ? undefined: false"
13459
+ [attr.aria-haspopup]="isNavigable ? undefined : 'dialog'">
13151
13460
  <kendo-icon-wrapper
13152
13461
  name="more-vertical"
13153
13462
  [svgIcon]="moreVerticalIcon"></kendo-icon-wrapper>
@@ -13160,7 +13469,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
13160
13469
  </ng-template>
13161
13470
  <ng-template #defaultTemplate>
13162
13471
  <kendo-grid-columnmenu-container
13163
- (keydown.escape)="close()"
13472
+ (keydown.escape)="close(true)"
13164
13473
  (keydown.enter)="$event.stopImmediatePropagation()">
13165
13474
  <kendo-grid-columnmenu-sort #sortItem [kendoGridColumnMenuItem]="sortItem" *ngIf="hasSort" [service]="service">
13166
13475
  </kendo-grid-columnmenu-sort>
@@ -13212,7 +13521,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
13212
13521
  </kendo-grid-columnmenu-container>
13213
13522
  </ng-template>
13214
13523
  <ng-template #tabbedInterfaceTemplate>
13215
- <kendo-tabstrip #tabstrip (keydown.escape)="close()">
13524
+ <kendo-tabstrip #tabstrip (keydown.escape)="close(true)">
13216
13525
  <kendo-tabstrip-tab *ngIf="hasFilter">
13217
13526
  <ng-template kendoTabTitle>
13218
13527
  <kendo-icon-wrapper
@@ -13301,7 +13610,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
13301
13610
  </ng-template>
13302
13611
  `
13303
13612
  }]
13304
- }], 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: [{
13305
13616
  type: HostBinding,
13306
13617
  args: ['class.k-grid-column-menu-standalone']
13307
13618
  }, {
@@ -13471,7 +13782,7 @@ FilterCellOperatorsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12
13471
13782
  [size]="size"
13472
13783
  (click)="clearClick()"
13473
13784
  (keydown)="clearKeydown($event)"></button>
13474
- `, 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"] }] });
13475
13786
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FilterCellOperatorsComponent, decorators: [{
13476
13787
  type: Component,
13477
13788
  args: [{
@@ -13876,7 +14187,7 @@ BooleanFilterCellComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0
13876
14187
  [value]="currentFilter?.value">
13877
14188
  </kendo-dropdownlist>
13878
14189
  </kendo-grid-filter-wrapper-cell>
13879
- `, 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"] }] });
13880
14191
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: BooleanFilterCellComponent, decorators: [{
13881
14192
  type: Component,
13882
14193
  args: [{
@@ -14244,7 +14555,7 @@ class LogicalCellDirective {
14244
14555
  this.renderer.addClass(el, 'k-focus');
14245
14556
  }
14246
14557
  if (this.headerLabelText) {
14247
- el.setAttribute('aria-label', '');
14558
+ el.removeAttribute('aria-label');
14248
14559
  }
14249
14560
  }
14250
14561
  else {
@@ -14936,7 +15247,7 @@ const modifierKeys = ['alt', 'ctrl', 'shift', 'meta'];
14936
15247
  * @hidden
14937
15248
  */
14938
15249
  class HeaderComponent {
14939
- constructor(popupService, hint, cue, reorderService, idService, sortService, columnInfoService, cd, contextService) {
15250
+ constructor(popupService, hint, cue, reorderService, idService, sortService, columnInfoService, cd, contextService, navigationService) {
14940
15251
  this.popupService = popupService;
14941
15252
  this.hint = hint;
14942
15253
  this.cue = cue;
@@ -14946,6 +15257,7 @@ class HeaderComponent {
14946
15257
  this.columnInfoService = columnInfoService;
14947
15258
  this.cd = cd;
14948
15259
  this.contextService = contextService;
15260
+ this.navigationService = navigationService;
14949
15261
  this.columns = [];
14950
15262
  this.groups = [];
14951
15263
  this.sort = new Array();
@@ -15080,6 +15392,9 @@ class HeaderComponent {
15080
15392
  return 'descending';
15081
15393
  }
15082
15394
  }
15395
+ get isNavigable() {
15396
+ return this.navigationService.tableEnabled;
15397
+ }
15083
15398
  /**
15084
15399
  *
15085
15400
  * @param column
@@ -15190,7 +15505,7 @@ class HeaderComponent {
15190
15505
  }
15191
15506
  addStickyStyles(column) {
15192
15507
  const stickyStyles = this.columnInfoService.stickyColumnsStyles(column);
15193
- return { ...column.style, ...stickyStyles };
15508
+ return { ...column.headerStyle, ...stickyStyles };
15194
15509
  }
15195
15510
  toggleDirection(field, allowUnsort, initialDirection) {
15196
15511
  const descriptor = this.sortDescriptor(field);
@@ -15307,7 +15622,7 @@ class HeaderComponent {
15307
15622
  });
15308
15623
  }
15309
15624
  }
15310
- 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 });
15311
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: `
15312
15627
  <ng-container>
15313
15628
  <tr *ngFor="let i of columnLevels; let levelIndex = index"
@@ -15359,7 +15674,9 @@ HeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", versio
15359
15674
  [ngStyle]="column.sticky ? addStickyStyles(column) : column.headerStyle"
15360
15675
  [attr.rowspan]="column.rowspan(totalColumnLevels)"
15361
15676
  [attr.colspan]="column.colspan"
15362
- [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">
15363
15680
 
15364
15681
  <ng-container *ngIf="!isSortable(getColumnComponent(column))">
15365
15682
  <span class="k-cell-inner">
@@ -15581,7 +15898,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
15581
15898
  [ngStyle]="column.sticky ? addStickyStyles(column) : column.headerStyle"
15582
15899
  [attr.rowspan]="column.rowspan(totalColumnLevels)"
15583
15900
  [attr.colspan]="column.colspan"
15584
- [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">
15585
15904
 
15586
15905
  <ng-container *ngIf="!isSortable(getColumnComponent(column))">
15587
15906
  <span class="k-cell-inner">
@@ -15749,7 +16068,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
15749
16068
  </ng-container>
15750
16069
  `
15751
16070
  }]
15752
- }], 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: [{
15753
16072
  type: Input
15754
16073
  }], columns: [{
15755
16074
  type: Input
@@ -18715,7 +19034,7 @@ class FooterComponent {
18715
19034
  }
18716
19035
  addStickyStyles(column) {
18717
19036
  const stickyStyles = this.columnInfoService.stickyColumnsStyles(column);
18718
- return { ...column.style, ...stickyStyles };
19037
+ return { ...column.footerStyle, ...stickyStyles };
18719
19038
  }
18720
19039
  }
18721
19040
  FooterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FooterComponent, deps: [{ token: ColumnInfoService }], target: i0.ɵɵFactoryTarget.Component });
@@ -22830,7 +23149,15 @@ class ExpandGroupDirective {
22830
23149
  this.expandedGroupKeys.push(key);
22831
23150
  }
22832
23151
  else {
22833
- 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
+ });
22834
23161
  this.expandedGroupKeys.splice(index, 1);
22835
23162
  }
22836
23163
  this.expandedGroupKeysChange.emit(this.expandedGroupKeys.slice());
@@ -22948,7 +23275,7 @@ AutoCompleteFilterCellComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion:
22948
23275
  [value]="currentFilter?.value">
22949
23276
  </kendo-autocomplete>
22950
23277
  </kendo-grid-filter-wrapper-cell>
22951
- `, 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"] }] });
22952
23279
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: AutoCompleteFilterCellComponent, decorators: [{
22953
23280
  type: Component,
22954
23281
  args: [{
@@ -24068,13 +24395,30 @@ class ColumnChooserComponent {
24068
24395
  anchorAlign: { vertical: 'bottom', horizontal: direction },
24069
24396
  popupAlign: { vertical: 'top', horizontal: direction }
24070
24397
  });
24071
- 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
+ }
24072
24414
  if (!isDocumentAvailable()) {
24073
24415
  return;
24074
24416
  }
24075
24417
  this.ngZone.runOutsideAngular(() => this.closeClick = this.renderer.listen('document', 'click', ({ target }) => {
24076
24418
  if (!closest(target, node => node === this.popupRef.popupElement || node === anchor.element)) {
24077
- this.close();
24419
+ this.ngZone.run(() => {
24420
+ this.close();
24421
+ });
24078
24422
  }
24079
24423
  }));
24080
24424
  }
@@ -24086,7 +24430,7 @@ class ColumnChooserComponent {
24086
24430
  * @hidden
24087
24431
  */
24088
24432
  onApply(changed) {
24089
- this.close();
24433
+ this.close(true);
24090
24434
  if (changed.length) {
24091
24435
  this.changeDetector.markForCheck();
24092
24436
  this.columnInfoService.changeVisibility(changed);
@@ -24099,12 +24443,24 @@ class ColumnChooserComponent {
24099
24443
  this.changeDetector.markForCheck();
24100
24444
  this.columnInfoService.changeVisibility(changed);
24101
24445
  }
24102
- 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) {
24103
24456
  if (this.popupRef) {
24104
24457
  this.popupRef.close();
24105
24458
  this.popupRef = null;
24459
+ this.changeDetector.markForCheck();
24460
+ this.escapeListener && this.escapeListener();
24106
24461
  }
24107
24462
  this.detachClose();
24463
+ focusAnchor && this.anchor.element.focus();
24108
24464
  }
24109
24465
  detachClose() {
24110
24466
  if (this.closeClick) {
@@ -24114,7 +24470,7 @@ class ColumnChooserComponent {
24114
24470
  }
24115
24471
  }
24116
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 });
24117
- 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: `
24118
24474
  <button #anchor
24119
24475
  kendoButton
24120
24476
  type="button"
@@ -24122,20 +24478,27 @@ ColumnChooserComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
24122
24478
  fillMode="flat"
24123
24479
  [attr.title]="ctx.localization.get('columns')"
24124
24480
  icon="columns"
24125
- [svgIcon]="columnsIcon"></button>
24481
+ [svgIcon]="columnsIcon"
24482
+ [attr.aria-haspopup]="'dialog'"
24483
+ [attr.aria-expanded]="!!(popupRef)"
24484
+ [attr.aria-controls]="!!(popupRef) ? popupId : undefined"></button>
24126
24485
  <ng-template #template>
24127
24486
  <span class='k-column-chooser-title'>{{ ctx.localization.get('columns') }}</span>
24128
24487
  <kendo-grid-columnlist
24488
+ #columnList
24129
24489
  [columns]="columns"
24490
+ [ariaLabel]="ctx.localization.get('columns')"
24491
+ [isLast]="true"
24130
24492
  [applyText]="ctx.localization.get('columnsApply')"
24131
24493
  [resetText]="ctx.localization.get('columnsReset')"
24132
24494
  [autoSync]="autoSync"
24133
24495
  [allowHideAll]="allowHideAll"
24134
24496
  (apply)="onApply($event)"
24135
- (columnChange)="onChange($event)">
24497
+ (columnChange)="onChange($event)"
24498
+ (keydown.shift.tab)="onShiftTab($event)">
24136
24499
  </kendo-grid-columnlist>
24137
24500
  </ng-template>
24138
- `, 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"] }] });
24139
24502
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnChooserComponent, decorators: [{
24140
24503
  type: Component,
24141
24504
  args: [{
@@ -24148,17 +24511,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
24148
24511
  fillMode="flat"
24149
24512
  [attr.title]="ctx.localization.get('columns')"
24150
24513
  icon="columns"
24151
- [svgIcon]="columnsIcon"></button>
24514
+ [svgIcon]="columnsIcon"
24515
+ [attr.aria-haspopup]="'dialog'"
24516
+ [attr.aria-expanded]="!!(popupRef)"
24517
+ [attr.aria-controls]="!!(popupRef) ? popupId : undefined"></button>
24152
24518
  <ng-template #template>
24153
24519
  <span class='k-column-chooser-title'>{{ ctx.localization.get('columns') }}</span>
24154
24520
  <kendo-grid-columnlist
24521
+ #columnList
24155
24522
  [columns]="columns"
24523
+ [ariaLabel]="ctx.localization.get('columns')"
24524
+ [isLast]="true"
24156
24525
  [applyText]="ctx.localization.get('columnsApply')"
24157
24526
  [resetText]="ctx.localization.get('columnsReset')"
24158
24527
  [autoSync]="autoSync"
24159
24528
  [allowHideAll]="allowHideAll"
24160
24529
  (apply)="onApply($event)"
24161
- (columnChange)="onChange($event)">
24530
+ (columnChange)="onChange($event)"
24531
+ (keydown.shift.tab)="onShiftTab($event)">
24162
24532
  </kendo-grid-columnlist>
24163
24533
  </ng-template>
24164
24534
  `
@@ -24167,9 +24537,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
24167
24537
  type: Input
24168
24538
  }], allowHideAll: [{
24169
24539
  type: Input
24540
+ }], anchor: [{
24541
+ type: ViewChild,
24542
+ args: ['anchor']
24543
+ }], columnList: [{
24544
+ type: ViewChild,
24545
+ args: ['columnList']
24170
24546
  }] } });
24171
24547
 
24172
24548
  const COMPONENTS = [
24549
+ ColumnMenuChooserItemCheckedDirective,
24173
24550
  ColumnListComponent,
24174
24551
  ColumnChooserComponent,
24175
24552
  ColumnMenuChooserComponent,
@@ -24212,7 +24589,8 @@ class ColumnMenuModule {
24212
24589
  }
24213
24590
  }
24214
24591
  ColumnMenuModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnMenuModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
24215
- 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,
24216
24594
  ColumnChooserComponent,
24217
24595
  ColumnMenuChooserComponent,
24218
24596
  ColumnMenuFilterComponent,
@@ -24227,7 +24605,8 @@ ColumnMenuModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", versio
24227
24605
  ColumnMenuStickComponent,
24228
24606
  ColumnMenuPositionComponent,
24229
24607
  ColumnMenuAutoSizeColumnComponent,
24230
- ColumnMenuAutoSizeAllColumnsComponent], imports: [CommonModule, FilterMenuModule, ButtonModule, TabStripModule], exports: [ColumnListComponent,
24608
+ ColumnMenuAutoSizeAllColumnsComponent], imports: [CommonModule, FilterMenuModule, ButtonModule, TabStripModule], exports: [ColumnMenuChooserItemCheckedDirective,
24609
+ ColumnListComponent,
24231
24610
  ColumnChooserComponent,
24232
24611
  ColumnMenuChooserComponent,
24233
24612
  ColumnMenuFilterComponent,