@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, Directive, Optional, QueryList, isDevMode, ContentChildren, ContentChild, forwardRef, SkipSelf, Host, Inject, Output, SecurityContext, HostListener, ChangeDetectionStrategy, ViewChild, ViewChildren, Self, TemplateRef, Pipe, ViewEncapsulation, NgModule } from '@angular/core';
6
+ import { InjectionToken, Component, HostBinding, Input, EventEmitter, Injectable, Directive, Optional, QueryList, isDevMode, ContentChildren, ContentChild, forwardRef, SkipSelf, Host, Inject, 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 * as i3 from '@progress/kendo-angular-icons';
24
24
  import { IconsModule } from '@progress/kendo-angular-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';
@@ -943,8 +943,28 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
943
943
  } });
944
944
 
945
945
  /**
946
- * Represents the filter-menu template
946
+ * Represents the filter-menu template.
947
+ * Helps to customize the content of the filter menu. To define the filter menu template, nest an `<ng-template>` tag with the
948
+ * `kendoGridFilterMenuTemplate` directive inside a `<kendo-grid-column>` tag
947
949
  * ([see example]({% slug filter_menu %}#toc-custom-filters)).
950
+ *
951
+ * The template context is set to the current data item and the following additional fields are passed:
952
+ * - `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.
953
+ * - `filter`&mdash;The provided filter descriptors. Use it as an alias for a template variable by utilizing the `let-filter="filter"` syntax.
954
+ * - `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.
955
+ *
956
+ * ```html
957
+ * <kendo-grid-column field="CategoryID" title="Category">
958
+ * <ng-template kendoGridFilterMenuTemplate
959
+ * let-column="column"
960
+ * let-filter="filter"
961
+ * let-filterService="filterService"
962
+ * >
963
+ * ...
964
+ * </ng-template>
965
+ * ...
966
+ * </kendo-grid-column>
967
+ * ```
948
968
  */
949
969
  class FilterMenuTemplateDirective {
950
970
  constructor(templateRef) {
@@ -4454,8 +4474,8 @@ const packageMetadata = {
4454
4474
  name: '@progress/kendo-angular-grid',
4455
4475
  productName: 'Kendo UI for Angular',
4456
4476
  productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],
4457
- publishDate: 1692175201,
4458
- version: '13.3.1-develop.1',
4477
+ publishDate: 1692972014,
4478
+ version: '13.4.0-develop.10',
4459
4479
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'
4460
4480
  };
4461
4481
 
@@ -7085,23 +7105,46 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
7085
7105
  type: Input
7086
7106
  }] } });
7087
7107
 
7108
+ // eslint-disable no-access-missing-member
7088
7109
  /**
7089
- * Displays buttons for navigating to the first and to the previous page ([see example](slug:pager_template_grid#toc-using-built-in-pager-components)).
7110
+ * Displays information about the current page and the total number of records ([see example](slug:pager_template_grid#toc-using-built-in-pager-components)).
7090
7111
  */
7091
- class PagerPrevButtonsComponent extends PagerElementComponent {
7092
- constructor(ctx, pagerContext, cd, navigationService) {
7112
+ class PagerInfoComponent extends PagerElementComponent {
7113
+ constructor(ctx, cd, pagerContext) {
7093
7114
  super(ctx, pagerContext, cd);
7094
- this.navigationService = navigationService;
7115
+ this.pagerContext = pagerContext;
7116
+ }
7117
+ /**
7118
+ * @hidden
7119
+ *
7120
+ * @readonly
7121
+ * @type {number}
7122
+ * @memberOf PagerInfoComponent
7123
+ */
7124
+ get maxItems() {
7125
+ return Math.min(this.currentPage * this.pageSize, this.total);
7126
+ }
7127
+ /**
7128
+ * @hidden
7129
+ *
7130
+ * @readonly
7131
+ * @type {number}
7132
+ * @memberOf PagerInfoComponent
7133
+ */
7134
+ get currentPageText() {
7135
+ return this.total ?
7136
+ (this.currentPage - 1) * this.pageSize + 1 :
7137
+ 0;
7095
7138
  }
7096
7139
  /**
7097
7140
  * @hidden
7098
7141
  *
7099
7142
  * @readonly
7100
7143
  * @type {boolean}
7101
- * @memberOf PagerPrevButtonsComponent
7144
+ * @memberOf PagerInfoComponent
7102
7145
  */
7103
- get disabled() {
7104
- return this.currentPage === 1 || !this.total;
7146
+ get classes() {
7147
+ return true;
7105
7148
  }
7106
7149
  onChanges({ total, skip, pageSize }) {
7107
7150
  this.total = total;
@@ -7110,162 +7153,260 @@ class PagerPrevButtonsComponent extends PagerElementComponent {
7110
7153
  this.cd.markForCheck();
7111
7154
  }
7112
7155
  }
7113
- 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 });
7114
- PagerPrevButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: PagerPrevButtonsComponent, selector: "kendo-pager-prev-buttons", usesInheritance: true, ngImport: i0, template: `
7115
- <button
7116
- [kendoGridFocusable]="!disabled"
7117
- kendoButton
7118
- type="button"
7119
- [title]="textFor('pagerFirstPage')"
7120
- [attr.aria-label]="textFor('pagerFirstPage')"
7121
- (click)="currentPage !== 1 ? changePage(0) : false"
7122
- role="button"
7123
- [icon]="prevArrowIcons[0]"
7124
- [svgIcon]="prevArrowSVGIcons[0]"
7125
- class="k-pager-nav k-pager-first"
7126
- [disabled]="disabled"
7127
- fillMode="flat"
7128
- rounded="none"
7129
- [size]="size">
7130
- </button>
7131
- <button
7132
- kendoButton
7133
- [kendoGridFocusable]="!disabled"
7134
- type="button"
7135
- class="k-pager-nav"
7136
- [disabled]="disabled"
7137
- [icon]="prevArrowIcons[1]"
7138
- [svgIcon]="prevArrowSVGIcons[1]"
7139
- fillMode="flat"
7140
- rounded="none"
7141
- [size]="size"
7142
- [title]="textFor('pagerPreviousPage')"
7143
- [attr.aria-label]="textFor('pagerPreviousPage')"
7144
- (click)="currentPage !== 1 ? changePage(currentPage-2) : false">
7145
- </button>
7146
- `, 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 });
7147
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerPrevButtonsComponent, decorators: [{
7156
+ 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 });
7157
+ 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 });
7158
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerInfoComponent, decorators: [{
7148
7159
  type: Component,
7149
7160
  args: [{
7150
7161
  changeDetection: ChangeDetectionStrategy.OnPush,
7151
- selector: 'kendo-pager-prev-buttons',
7152
- template: `
7153
- <button
7154
- [kendoGridFocusable]="!disabled"
7155
- kendoButton
7156
- type="button"
7157
- [title]="textFor('pagerFirstPage')"
7158
- [attr.aria-label]="textFor('pagerFirstPage')"
7159
- (click)="currentPage !== 1 ? changePage(0) : false"
7160
- role="button"
7161
- [icon]="prevArrowIcons[0]"
7162
- [svgIcon]="prevArrowSVGIcons[0]"
7163
- class="k-pager-nav k-pager-first"
7164
- [disabled]="disabled"
7165
- fillMode="flat"
7166
- rounded="none"
7167
- [size]="size">
7168
- </button>
7169
- <button
7170
- kendoButton
7171
- [kendoGridFocusable]="!disabled"
7172
- type="button"
7173
- class="k-pager-nav"
7174
- [disabled]="disabled"
7175
- [icon]="prevArrowIcons[1]"
7176
- [svgIcon]="prevArrowSVGIcons[1]"
7177
- fillMode="flat"
7178
- rounded="none"
7179
- [size]="size"
7180
- [title]="textFor('pagerPreviousPage')"
7181
- [attr.aria-label]="textFor('pagerPreviousPage')"
7182
- (click)="currentPage !== 1 ? changePage(currentPage-2) : false">
7183
- </button>
7184
- `
7162
+ selector: 'kendo-pager-info',
7163
+ template: `{{currentPageText}} - {{maxItems}} {{textFor('pagerOf')}} {{total}} {{textFor('pagerItems')}}`
7185
7164
  }]
7186
- }], ctorParameters: function () { return [{ type: ContextService }, { type: PagerContextService }, { type: i0.ChangeDetectorRef }, { type: NavigationService }]; } });
7165
+ }], ctorParameters: function () { return [{ type: ContextService }, { type: i0.ChangeDetectorRef }, { type: PagerContextService }]; }, propDecorators: { classes: [{
7166
+ type: HostBinding,
7167
+ args: ["class.k-pager-info"]
7168
+ }, {
7169
+ type: HostBinding,
7170
+ args: ["class.k-label"]
7171
+ }] } });
7187
7172
 
7188
7173
  /**
7189
- * Displays numeric buttons to enable navigation between the pages ([see example](slug:pager_template_grid#toc-using-built-in-pager-components)).
7174
+ * @hidden
7190
7175
  */
7191
- class PagerNumericButtonsComponent extends PagerElementComponent {
7192
- constructor(ctx, cd, pagerContext) {
7176
+ class PagerDropDownListDirective {
7177
+ constructor(host) {
7178
+ this.host = host;
7179
+ this.keydownHandler = (e) => {
7180
+ if (e.keyCode === Keys.Escape && this.host.isOpen) {
7181
+ e.stopPropagation();
7182
+ this.host.toggle(false);
7183
+ }
7184
+ };
7185
+ }
7186
+ ngAfterViewInit() {
7187
+ const wrapperElement = this.host.wrapper.nativeElement;
7188
+ wrapperElement.addEventListener('keydown', this.keydownHandler, true);
7189
+ }
7190
+ ngOnDestroy() {
7191
+ this.host.wrapper.nativeElement.removeEventListener('keydown', this.keydownHandler);
7192
+ }
7193
+ }
7194
+ 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 });
7195
+ PagerDropDownListDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.12", type: PagerDropDownListDirective, selector: "[kendoGridPagerDropDown]", ngImport: i0 });
7196
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerDropDownListDirective, decorators: [{
7197
+ type: Directive,
7198
+ args: [{ selector: '[kendoGridPagerDropDown]' }]
7199
+ }], ctorParameters: function () { return [{ type: i1$4.DropDownListComponent }]; } });
7200
+
7201
+ /**
7202
+ * Displays a drop-down list for the page size selection ([see example](slug:pager_template_grid#toc-using-built-in-pager-components)).
7203
+ */
7204
+ class PagerPageSizesComponent extends PagerElementComponent {
7205
+ constructor(ctx, cd, pagerContext, navigationService) {
7193
7206
  super(ctx, pagerContext, cd);
7194
7207
  this.pagerContext = pagerContext;
7195
- this.numbersWrapClass = true;
7208
+ this.navigationService = navigationService;
7209
+ this._pageSizes = [];
7196
7210
  }
7197
7211
  /**
7198
- * @hidden
7199
- *
7200
- * @readonly
7201
- * @type {number[]}
7202
- * @memberOf PagerNumericButtonsComponent
7212
+ * The page sizes collection. Can be an Array of numbers and/or [`PageSizeItem`](slug:api_grid_pagesizeitem) objects
7213
+ * ([see example]({% slug paging_grid %}#toc-pager-templates))
7203
7214
  */
7204
- get buttons() {
7205
- const result = [];
7206
- for (let idx = this.start; idx <= this.end; idx++) {
7207
- result.push(idx);
7215
+ set pageSizes(pageSizes) {
7216
+ let normalizedItems = [];
7217
+ pageSizes.forEach(item => {
7218
+ if (typeof item === 'number') {
7219
+ normalizedItems.push({
7220
+ text: item.toString(),
7221
+ value: item
7222
+ });
7223
+ }
7224
+ else {
7225
+ normalizedItems.push(item);
7226
+ }
7227
+ });
7228
+ if (this.pageSize && !normalizedItems.some(item => item.value === this.pageSize)) {
7229
+ normalizedItems = [{ text: this.pageSize.toString(), value: this.pageSize }, ...normalizedItems];
7208
7230
  }
7209
- return result;
7231
+ this._pageSizes = normalizedItems;
7232
+ }
7233
+ get pageSizes() {
7234
+ return this._pageSizes;
7210
7235
  }
7211
7236
  /**
7212
7237
  * @hidden
7238
+ *
7239
+ * @readonly
7213
7240
  */
7214
- get end() {
7215
- return Math.min((this.start + this.buttonCount) - 1, this.totalPages);
7241
+ get classes() {
7242
+ return true;
7216
7243
  }
7217
7244
  /**
7218
7245
  * @hidden
7246
+ *
7247
+ * @readonly
7219
7248
  */
7220
- get start() {
7221
- const page = this.currentPage;
7222
- const buttonCount = this.buttonCount;
7223
- if (page > buttonCount) {
7224
- const reminder = (page % buttonCount);
7225
- return (reminder === 0) ? (page - buttonCount) + 1 : (page - reminder) + 1;
7226
- }
7227
- return 1;
7249
+ get showInitialPageSize() {
7250
+ return this.pageSizes
7251
+ .filter(item => {
7252
+ if (typeof item.value === 'number') {
7253
+ return item.value === Number(this.pageSize);
7254
+ }
7255
+ return this.total === Number(this.pageSize);
7256
+ })
7257
+ .length === 0;
7228
7258
  }
7229
7259
  /**
7230
7260
  * @hidden
7231
7261
  */
7232
- pageLabel(num) {
7233
- const pageText = this.textFor('pagerPage');
7234
- if (pageText) {
7235
- return pageText + ' ' + num;
7236
- }
7237
- return num.toString();
7262
+ pageSizeChange(value) {
7263
+ this.pageSize = typeof value === 'number' ? value : this.total;
7264
+ this.pagerContext.changePageSize(this.pageSize);
7238
7265
  }
7239
7266
  /**
7240
7267
  * @hidden
7241
7268
  */
7242
- onSelectChange(e) {
7243
- const target = e.target;
7244
- const valueAsNumber = Number(target.value);
7245
- if (!Number.isNaN(valueAsNumber)) {
7246
- this.changePage(valueAsNumber - 1);
7247
- }
7248
- else {
7249
- if (target.value === 'previousButtons') {
7250
- this.changePage(this.start - 2);
7251
- }
7252
- else {
7253
- this.changePage(this.end);
7254
- }
7255
- }
7269
+ getValue(page) {
7270
+ return typeof page.value === 'number' ? page.value : this.total;
7256
7271
  }
7257
7272
  onChanges({ total, skip, pageSize }) {
7258
7273
  this.total = total;
7259
7274
  this.skip = skip;
7260
- this.pageSize = pageSize;
7275
+ this.pageSize = typeof pageSize === 'number' ? pageSize : this.total;
7261
7276
  this.cd.markForCheck();
7262
7277
  }
7263
7278
  }
7264
- 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 });
7265
- 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: `
7266
- <select
7279
+ 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 });
7280
+ 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: `
7281
+ <kendo-dropdownlist
7282
+ class="k-dropdown"
7283
+ #dropdownlist
7284
+ [size]="size"
7285
+ kendoGridPagerDropDown
7286
+ [tabindex]="0"
7287
+ kendoGridFocusable
7288
+ [data]="pageSizes"
7289
+ textField="text"
7290
+ valueField="value"
7291
+ [valuePrimitive]="true"
7292
+ [value]="pageSize"
7293
+ (valueChange)="pageSizeChange($event)"></kendo-dropdownlist>
7294
+ <kendo-label [for]="dropdownlist" [text]="textFor('pagerItemsPerPage')"></kendo-label>
7295
+ `, 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 });
7296
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerPageSizesComponent, decorators: [{
7297
+ type: Component,
7298
+ args: [{
7299
+ changeDetection: ChangeDetectionStrategy.OnPush,
7300
+ selector: 'kendo-pager-page-sizes',
7301
+ template: `
7302
+ <kendo-dropdownlist
7303
+ class="k-dropdown"
7304
+ #dropdownlist
7305
+ [size]="size"
7306
+ kendoGridPagerDropDown
7307
+ [tabindex]="0"
7308
+ kendoGridFocusable
7309
+ [data]="pageSizes"
7310
+ textField="text"
7311
+ valueField="value"
7312
+ [valuePrimitive]="true"
7313
+ [value]="pageSize"
7314
+ (valueChange)="pageSizeChange($event)"></kendo-dropdownlist>
7315
+ <kendo-label [for]="dropdownlist" [text]="textFor('pagerItemsPerPage')"></kendo-label>
7316
+ `
7317
+ }]
7318
+ }], ctorParameters: function () { return [{ type: ContextService }, { type: i0.ChangeDetectorRef }, { type: PagerContextService }, { type: NavigationService }]; }, propDecorators: { pageSizes: [{
7319
+ type: Input
7320
+ }], classes: [{
7321
+ type: HostBinding,
7322
+ args: ['class.k-pager-sizes']
7323
+ }, {
7324
+ type: HostBinding,
7325
+ args: ['class.k-label']
7326
+ }] } });
7327
+
7328
+ /**
7329
+ * Displays numeric buttons to enable navigation between the pages ([see example](slug:pager_template_grid#toc-using-built-in-pager-components)).
7330
+ */
7331
+ class PagerNumericButtonsComponent extends PagerElementComponent {
7332
+ constructor(ctx, cd, pagerContext) {
7333
+ super(ctx, pagerContext, cd);
7334
+ this.pagerContext = pagerContext;
7335
+ }
7336
+ /**
7337
+ * @hidden
7338
+ *
7339
+ * @readonly
7340
+ * @type {number[]}
7341
+ * @memberOf PagerNumericButtonsComponent
7342
+ */
7343
+ get buttons() {
7344
+ const result = [];
7345
+ for (let idx = this.start; idx <= this.end; idx++) {
7346
+ result.push(idx);
7347
+ }
7348
+ return result;
7349
+ }
7350
+ /**
7351
+ * @hidden
7352
+ */
7353
+ get end() {
7354
+ return Math.min((this.start + this.buttonCount) - 1, this.totalPages);
7355
+ }
7356
+ /**
7357
+ * @hidden
7358
+ */
7359
+ get start() {
7360
+ const page = this.currentPage;
7361
+ const buttonCount = this.buttonCount;
7362
+ if (page > buttonCount) {
7363
+ const reminder = (page % buttonCount);
7364
+ return (reminder === 0) ? (page - buttonCount) + 1 : (page - reminder) + 1;
7365
+ }
7366
+ return 1;
7367
+ }
7368
+ /**
7369
+ * @hidden
7370
+ */
7371
+ pageLabel(num) {
7372
+ const pageText = this.textFor('pagerPage');
7373
+ if (pageText) {
7374
+ return pageText + ' ' + num;
7375
+ }
7376
+ return num.toString();
7377
+ }
7378
+ /**
7379
+ * @hidden
7380
+ */
7381
+ onSelectChange(e) {
7382
+ const target = e.target;
7383
+ const valueAsNumber = Number(target.value);
7384
+ if (!Number.isNaN(valueAsNumber)) {
7385
+ this.changePage(valueAsNumber - 1);
7386
+ }
7387
+ else {
7388
+ if (target.value === 'previousButtons') {
7389
+ this.changePage(this.start - 2);
7390
+ }
7391
+ else {
7392
+ this.changePage(this.end);
7393
+ }
7394
+ }
7395
+ }
7396
+ onChanges({ total, skip, pageSize }) {
7397
+ this.total = total;
7398
+ this.skip = skip;
7399
+ this.pageSize = pageSize;
7400
+ this.cd.markForCheck();
7401
+ }
7402
+ }
7403
+ 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 });
7404
+ 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: `
7405
+ <select
7406
+ #select
7267
7407
  class="k-dropdown-list k-dropdown k-picker k-picker-solid k-rounded-md"
7268
7408
  kendoGridFocusable
7409
+ [style.display]="'none'"
7269
7410
  [attr.title]="textFor('selectPage')"
7270
7411
  [attr.aria-label]="textFor('selectPage')"
7271
7412
  [ngClass]="{
@@ -7292,7 +7433,7 @@ PagerNumericButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12
7292
7433
  [attr.aria-label]="pageLabel(end + 1)">...
7293
7434
  </option>
7294
7435
  </select>
7295
- <div class="k-pager-numbers">
7436
+ <div class="k-pager-numbers" #numbers>
7296
7437
  <button *ngIf="start > 1"
7297
7438
  type="button"
7298
7439
  kendoGridFocusable
@@ -7342,8 +7483,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
7342
7483
  selector: 'kendo-pager-numeric-buttons',
7343
7484
  template: `
7344
7485
  <select
7486
+ #select
7345
7487
  class="k-dropdown-list k-dropdown k-picker k-picker-solid k-rounded-md"
7346
7488
  kendoGridFocusable
7489
+ [style.display]="'none'"
7347
7490
  [attr.title]="textFor('selectPage')"
7348
7491
  [attr.aria-label]="textFor('selectPage')"
7349
7492
  [ngClass]="{
@@ -7370,7 +7513,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
7370
7513
  [attr.aria-label]="pageLabel(end + 1)">...
7371
7514
  </option>
7372
7515
  </select>
7373
- <div class="k-pager-numbers">
7516
+ <div class="k-pager-numbers" #numbers>
7374
7517
  <button *ngIf="start > 1"
7375
7518
  type="button"
7376
7519
  kendoGridFocusable
@@ -7414,13 +7557,116 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
7414
7557
  </div>
7415
7558
  `
7416
7559
  }]
7417
- }], ctorParameters: function () { return [{ type: ContextService }, { type: i0.ChangeDetectorRef }, { type: PagerContextService }]; }, propDecorators: { numbersWrapClass: [{
7418
- type: HostBinding,
7419
- args: ['class.k-pager-numbers-wrap']
7560
+ }], ctorParameters: function () { return [{ type: ContextService }, { type: i0.ChangeDetectorRef }, { type: PagerContextService }]; }, propDecorators: { selectElement: [{
7561
+ type: ViewChild,
7562
+ args: ['select', { read: ElementRef }]
7563
+ }], numbersElement: [{
7564
+ type: ViewChild,
7565
+ args: ['numbers', { read: ElementRef }]
7420
7566
  }], buttonCount: [{
7421
7567
  type: Input
7422
7568
  }] } });
7423
7569
 
7570
+ /**
7571
+ * Displays buttons for navigating to the first and to the previous page ([see example](slug:pager_template_grid#toc-using-built-in-pager-components)).
7572
+ */
7573
+ class PagerPrevButtonsComponent extends PagerElementComponent {
7574
+ constructor(ctx, pagerContext, cd, navigationService) {
7575
+ super(ctx, pagerContext, cd);
7576
+ this.navigationService = navigationService;
7577
+ }
7578
+ /**
7579
+ * @hidden
7580
+ *
7581
+ * @readonly
7582
+ * @type {boolean}
7583
+ * @memberOf PagerPrevButtonsComponent
7584
+ */
7585
+ get disabled() {
7586
+ return this.currentPage === 1 || !this.total;
7587
+ }
7588
+ onChanges({ total, skip, pageSize }) {
7589
+ this.total = total;
7590
+ this.skip = skip;
7591
+ this.pageSize = pageSize;
7592
+ this.cd.markForCheck();
7593
+ }
7594
+ }
7595
+ 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 });
7596
+ PagerPrevButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: PagerPrevButtonsComponent, selector: "kendo-pager-prev-buttons", usesInheritance: true, ngImport: i0, template: `
7597
+ <button
7598
+ [kendoGridFocusable]="!disabled"
7599
+ kendoButton
7600
+ type="button"
7601
+ [title]="textFor('pagerFirstPage')"
7602
+ [attr.aria-label]="textFor('pagerFirstPage')"
7603
+ (click)="currentPage !== 1 ? changePage(0) : false"
7604
+ role="button"
7605
+ [icon]="prevArrowIcons[0]"
7606
+ [svgIcon]="prevArrowSVGIcons[0]"
7607
+ class="k-pager-nav k-pager-first"
7608
+ [disabled]="disabled"
7609
+ fillMode="flat"
7610
+ rounded="none"
7611
+ [size]="size">
7612
+ </button>
7613
+ <button
7614
+ kendoButton
7615
+ [kendoGridFocusable]="!disabled"
7616
+ type="button"
7617
+ class="k-pager-nav"
7618
+ [disabled]="disabled"
7619
+ [icon]="prevArrowIcons[1]"
7620
+ [svgIcon]="prevArrowSVGIcons[1]"
7621
+ fillMode="flat"
7622
+ rounded="none"
7623
+ [size]="size"
7624
+ [title]="textFor('pagerPreviousPage')"
7625
+ [attr.aria-label]="textFor('pagerPreviousPage')"
7626
+ (click)="currentPage !== 1 ? changePage(currentPage-2) : false">
7627
+ </button>
7628
+ `, 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 });
7629
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerPrevButtonsComponent, decorators: [{
7630
+ type: Component,
7631
+ args: [{
7632
+ changeDetection: ChangeDetectionStrategy.OnPush,
7633
+ selector: 'kendo-pager-prev-buttons',
7634
+ template: `
7635
+ <button
7636
+ [kendoGridFocusable]="!disabled"
7637
+ kendoButton
7638
+ type="button"
7639
+ [title]="textFor('pagerFirstPage')"
7640
+ [attr.aria-label]="textFor('pagerFirstPage')"
7641
+ (click)="currentPage !== 1 ? changePage(0) : false"
7642
+ role="button"
7643
+ [icon]="prevArrowIcons[0]"
7644
+ [svgIcon]="prevArrowSVGIcons[0]"
7645
+ class="k-pager-nav k-pager-first"
7646
+ [disabled]="disabled"
7647
+ fillMode="flat"
7648
+ rounded="none"
7649
+ [size]="size">
7650
+ </button>
7651
+ <button
7652
+ kendoButton
7653
+ [kendoGridFocusable]="!disabled"
7654
+ type="button"
7655
+ class="k-pager-nav"
7656
+ [disabled]="disabled"
7657
+ [icon]="prevArrowIcons[1]"
7658
+ [svgIcon]="prevArrowSVGIcons[1]"
7659
+ fillMode="flat"
7660
+ rounded="none"
7661
+ [size]="size"
7662
+ [title]="textFor('pagerPreviousPage')"
7663
+ [attr.aria-label]="textFor('pagerPreviousPage')"
7664
+ (click)="currentPage !== 1 ? changePage(currentPage-2) : false">
7665
+ </button>
7666
+ `
7667
+ }]
7668
+ }], ctorParameters: function () { return [{ type: ContextService }, { type: PagerContextService }, { type: i0.ChangeDetectorRef }, { type: NavigationService }]; } });
7669
+
7424
7670
  /**
7425
7671
  * @hidden
7426
7672
  */
@@ -7602,286 +7848,66 @@ PagerNextButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.
7602
7848
  fillMode="flat"
7603
7849
  rounded="none"
7604
7850
  class="k-pager-nav"
7605
- [disabled]="disabled"
7606
- [title]="textFor('pagerNextPage')"
7607
- [attr.aria-label]="textFor('pagerNextPage')"
7608
- (click)="currentPage !== totalPages ? changePage(currentPage) : false">
7609
- </button>
7610
- <button
7611
- kendoButton
7612
- [kendoGridFocusable]="!disabled"
7613
- type="button"
7614
- [size]="size"
7615
- [icon]="nextArrowIcons[1]"
7616
- [svgIcon]="nextArrowSVGIcons[1]"
7617
- fillMode="flat"
7618
- rounded="none"
7619
- class="k-pager-nav k-pager-last"
7620
- [disabled]="disabled"
7621
- [title]="textFor('pagerLastPage')"
7622
- [attr.aria-label]="textFor('pagerLastPage')"
7623
- (click)="currentPage !== totalPages ? changePage(totalPages-1) : false">
7624
- </button>
7625
- `, 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 });
7626
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerNextButtonsComponent, decorators: [{
7627
- type: Component,
7628
- args: [{
7629
- changeDetection: ChangeDetectionStrategy.OnPush,
7630
- selector: 'kendo-pager-next-buttons',
7631
- template: `
7632
- <button
7633
- kendoButton
7634
- [kendoGridFocusable]="!disabled"
7635
- type="button"
7636
- [size]="size"
7637
- [icon]="nextArrowIcons[0]"
7638
- [svgIcon]="nextArrowSVGIcons[0]"
7639
- fillMode="flat"
7640
- rounded="none"
7641
- class="k-pager-nav"
7642
- [disabled]="disabled"
7643
- [title]="textFor('pagerNextPage')"
7644
- [attr.aria-label]="textFor('pagerNextPage')"
7645
- (click)="currentPage !== totalPages ? changePage(currentPage) : false">
7646
- </button>
7647
- <button
7648
- kendoButton
7649
- [kendoGridFocusable]="!disabled"
7650
- type="button"
7651
- [size]="size"
7652
- [icon]="nextArrowIcons[1]"
7653
- [svgIcon]="nextArrowSVGIcons[1]"
7654
- fillMode="flat"
7655
- rounded="none"
7656
- class="k-pager-nav k-pager-last"
7657
- [disabled]="disabled"
7658
- [title]="textFor('pagerLastPage')"
7659
- [attr.aria-label]="textFor('pagerLastPage')"
7660
- (click)="currentPage !== totalPages ? changePage(totalPages-1) : false">
7661
- </button>
7662
- `
7663
- }]
7664
- }], ctorParameters: function () { return [{ type: ContextService }, { type: PagerContextService }, { type: i0.ChangeDetectorRef }, { type: NavigationService }]; } });
7665
-
7666
- // eslint-disable no-access-missing-member
7667
- /**
7668
- * Displays information about the current page and the total number of records ([see example](slug:pager_template_grid#toc-using-built-in-pager-components)).
7669
- */
7670
- class PagerInfoComponent extends PagerElementComponent {
7671
- constructor(ctx, cd, pagerContext) {
7672
- super(ctx, pagerContext, cd);
7673
- this.pagerContext = pagerContext;
7674
- }
7675
- /**
7676
- * @hidden
7677
- *
7678
- * @readonly
7679
- * @type {number}
7680
- * @memberOf PagerInfoComponent
7681
- */
7682
- get maxItems() {
7683
- return Math.min(this.currentPage * this.pageSize, this.total);
7684
- }
7685
- /**
7686
- * @hidden
7687
- *
7688
- * @readonly
7689
- * @type {number}
7690
- * @memberOf PagerInfoComponent
7691
- */
7692
- get currentPageText() {
7693
- return this.total ?
7694
- (this.currentPage - 1) * this.pageSize + 1 :
7695
- 0;
7696
- }
7697
- /**
7698
- * @hidden
7699
- *
7700
- * @readonly
7701
- * @type {boolean}
7702
- * @memberOf PagerInfoComponent
7703
- */
7704
- get classes() {
7705
- return true;
7706
- }
7707
- onChanges({ total, skip, pageSize }) {
7708
- this.total = total;
7709
- this.skip = skip;
7710
- this.pageSize = pageSize;
7711
- this.cd.markForCheck();
7712
- }
7713
- }
7714
- 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 });
7715
- 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 });
7716
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerInfoComponent, decorators: [{
7717
- type: Component,
7718
- args: [{
7719
- changeDetection: ChangeDetectionStrategy.OnPush,
7720
- selector: 'kendo-pager-info',
7721
- template: `{{currentPageText}} - {{maxItems}} {{textFor('pagerOf')}} {{total}} {{textFor('pagerItems')}}`
7722
- }]
7723
- }], ctorParameters: function () { return [{ type: ContextService }, { type: i0.ChangeDetectorRef }, { type: PagerContextService }]; }, propDecorators: { classes: [{
7724
- type: HostBinding,
7725
- args: ["class.k-pager-info"]
7726
- }, {
7727
- type: HostBinding,
7728
- args: ["class.k-label"]
7729
- }] } });
7730
-
7731
- /**
7732
- * @hidden
7733
- */
7734
- class PagerDropDownListDirective {
7735
- constructor(host) {
7736
- this.host = host;
7737
- this.keydownHandler = (e) => {
7738
- if (e.keyCode === Keys.Escape && this.host.isOpen) {
7739
- e.stopPropagation();
7740
- this.host.toggle(false);
7741
- }
7742
- };
7743
- }
7744
- ngAfterViewInit() {
7745
- const wrapperElement = this.host.wrapper.nativeElement;
7746
- wrapperElement.addEventListener('keydown', this.keydownHandler, true);
7747
- }
7748
- ngOnDestroy() {
7749
- this.host.wrapper.nativeElement.removeEventListener('keydown', this.keydownHandler);
7750
- }
7751
- }
7752
- 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 });
7753
- PagerDropDownListDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.12", type: PagerDropDownListDirective, selector: "[kendoGridPagerDropDown]", ngImport: i0 });
7754
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerDropDownListDirective, decorators: [{
7755
- type: Directive,
7756
- args: [{ selector: '[kendoGridPagerDropDown]' }]
7757
- }], ctorParameters: function () { return [{ type: i1$4.DropDownListComponent }]; } });
7758
-
7759
- /**
7760
- * Displays a drop-down list for the page size selection ([see example](slug:pager_template_grid#toc-using-built-in-pager-components)).
7761
- */
7762
- class PagerPageSizesComponent extends PagerElementComponent {
7763
- constructor(ctx, cd, pagerContext, navigationService) {
7764
- super(ctx, pagerContext, cd);
7765
- this.pagerContext = pagerContext;
7766
- this.navigationService = navigationService;
7767
- this._pageSizes = [];
7768
- }
7769
- /**
7770
- * The page sizes collection. Can be an Array of numbers and/or [`PageSizeItem`](slug:api_grid_pagesizeitem) objects
7771
- * ([see example]({% slug paging_grid %}#toc-pager-templates))
7772
- */
7773
- set pageSizes(pageSizes) {
7774
- let normalizedItems = [];
7775
- pageSizes.forEach(item => {
7776
- if (typeof item === 'number') {
7777
- normalizedItems.push({
7778
- text: item.toString(),
7779
- value: item
7780
- });
7781
- }
7782
- else {
7783
- normalizedItems.push(item);
7784
- }
7785
- });
7786
- if (this.pageSize && !normalizedItems.some(item => item.value === this.pageSize)) {
7787
- normalizedItems = [{ text: this.pageSize.toString(), value: this.pageSize }, ...normalizedItems];
7788
- }
7789
- this._pageSizes = normalizedItems;
7790
- }
7791
- get pageSizes() {
7792
- return this._pageSizes;
7793
- }
7794
- /**
7795
- * @hidden
7796
- *
7797
- * @readonly
7798
- */
7799
- get classes() {
7800
- return true;
7801
- }
7802
- /**
7803
- * @hidden
7804
- *
7805
- * @readonly
7806
- */
7807
- get showInitialPageSize() {
7808
- return this.pageSizes
7809
- .filter(item => {
7810
- if (typeof item.value === 'number') {
7811
- return item.value === Number(this.pageSize);
7812
- }
7813
- return this.total === Number(this.pageSize);
7814
- })
7815
- .length === 0;
7816
- }
7817
- /**
7818
- * @hidden
7819
- */
7820
- pageSizeChange(value) {
7821
- this.pageSize = typeof value === 'number' ? value : this.total;
7822
- this.pagerContext.changePageSize(this.pageSize);
7823
- }
7824
- /**
7825
- * @hidden
7826
- */
7827
- getValue(page) {
7828
- return typeof page.value === 'number' ? page.value : this.total;
7829
- }
7830
- onChanges({ total, skip, pageSize }) {
7831
- this.total = total;
7832
- this.skip = skip;
7833
- this.pageSize = typeof pageSize === 'number' ? pageSize : this.total;
7834
- this.cd.markForCheck();
7835
- }
7836
- }
7837
- 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 });
7838
- 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: `
7839
- <kendo-dropdownlist
7840
- class="k-dropdown"
7841
- #dropdownlist
7851
+ [disabled]="disabled"
7852
+ [title]="textFor('pagerNextPage')"
7853
+ [attr.aria-label]="textFor('pagerNextPage')"
7854
+ (click)="currentPage !== totalPages ? changePage(currentPage) : false">
7855
+ </button>
7856
+ <button
7857
+ kendoButton
7858
+ [kendoGridFocusable]="!disabled"
7859
+ type="button"
7842
7860
  [size]="size"
7843
- kendoGridPagerDropDown
7844
- [tabindex]="0"
7845
- kendoGridFocusable
7846
- [data]="pageSizes"
7847
- textField="text"
7848
- valueField="value"
7849
- [valuePrimitive]="true"
7850
- [value]="pageSize"
7851
- (valueChange)="pageSizeChange($event)"></kendo-dropdownlist>
7852
- <kendo-label [for]="dropdownlist" [text]="textFor('pagerItemsPerPage')"></kendo-label>
7853
- `, 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 });
7854
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerPageSizesComponent, decorators: [{
7861
+ [icon]="nextArrowIcons[1]"
7862
+ [svgIcon]="nextArrowSVGIcons[1]"
7863
+ fillMode="flat"
7864
+ rounded="none"
7865
+ class="k-pager-nav k-pager-last"
7866
+ [disabled]="disabled"
7867
+ [title]="textFor('pagerLastPage')"
7868
+ [attr.aria-label]="textFor('pagerLastPage')"
7869
+ (click)="currentPage !== totalPages ? changePage(totalPages-1) : false">
7870
+ </button>
7871
+ `, 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 });
7872
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerNextButtonsComponent, decorators: [{
7855
7873
  type: Component,
7856
7874
  args: [{
7857
7875
  changeDetection: ChangeDetectionStrategy.OnPush,
7858
- selector: 'kendo-pager-page-sizes',
7876
+ selector: 'kendo-pager-next-buttons',
7859
7877
  template: `
7860
- <kendo-dropdownlist
7861
- class="k-dropdown"
7862
- #dropdownlist
7878
+ <button
7879
+ kendoButton
7880
+ [kendoGridFocusable]="!disabled"
7881
+ type="button"
7863
7882
  [size]="size"
7864
- kendoGridPagerDropDown
7865
- [tabindex]="0"
7866
- kendoGridFocusable
7867
- [data]="pageSizes"
7868
- textField="text"
7869
- valueField="value"
7870
- [valuePrimitive]="true"
7871
- [value]="pageSize"
7872
- (valueChange)="pageSizeChange($event)"></kendo-dropdownlist>
7873
- <kendo-label [for]="dropdownlist" [text]="textFor('pagerItemsPerPage')"></kendo-label>
7883
+ [icon]="nextArrowIcons[0]"
7884
+ [svgIcon]="nextArrowSVGIcons[0]"
7885
+ fillMode="flat"
7886
+ rounded="none"
7887
+ class="k-pager-nav"
7888
+ [disabled]="disabled"
7889
+ [title]="textFor('pagerNextPage')"
7890
+ [attr.aria-label]="textFor('pagerNextPage')"
7891
+ (click)="currentPage !== totalPages ? changePage(currentPage) : false">
7892
+ </button>
7893
+ <button
7894
+ kendoButton
7895
+ [kendoGridFocusable]="!disabled"
7896
+ type="button"
7897
+ [size]="size"
7898
+ [icon]="nextArrowIcons[1]"
7899
+ [svgIcon]="nextArrowSVGIcons[1]"
7900
+ fillMode="flat"
7901
+ rounded="none"
7902
+ class="k-pager-nav k-pager-last"
7903
+ [disabled]="disabled"
7904
+ [title]="textFor('pagerLastPage')"
7905
+ [attr.aria-label]="textFor('pagerLastPage')"
7906
+ (click)="currentPage !== totalPages ? changePage(totalPages-1) : false">
7907
+ </button>
7874
7908
  `
7875
7909
  }]
7876
- }], ctorParameters: function () { return [{ type: ContextService }, { type: i0.ChangeDetectorRef }, { type: PagerContextService }, { type: NavigationService }]; }, propDecorators: { pageSizes: [{
7877
- type: Input
7878
- }], classes: [{
7879
- type: HostBinding,
7880
- args: ['class.k-pager-sizes']
7881
- }, {
7882
- type: HostBinding,
7883
- args: ['class.k-label']
7884
- }] } });
7910
+ }], ctorParameters: function () { return [{ type: ContextService }, { type: PagerContextService }, { type: i0.ChangeDetectorRef }, { type: NavigationService }]; } });
7885
7911
 
7886
7912
  /**
7887
7913
  * @hidden
@@ -7912,18 +7938,33 @@ class PagerComponent {
7912
7938
  if (this.template || !element) {
7913
7939
  return;
7914
7940
  }
7915
- const width = element.offsetWidth;
7916
- if (width < RESPONSIVE_BREAKPOINT_MEDIUM) {
7917
- this.renderer.removeClass(element, 'k-pager-mobile-md');
7918
- this.renderer.addClass(element, 'k-pager-mobile-sm');
7919
- }
7920
- else if (width >= RESPONSIVE_BREAKPOINT_MEDIUM && width < RESPONSIVE_BREAKPOINT_LARGE) {
7921
- this.renderer.addClass(element, 'k-pager-mobile-md');
7922
- this.renderer.removeClass(element, 'k-pager-mobile-sm');
7923
- }
7924
- else {
7925
- this.clearResponsiveClasses();
7926
- }
7941
+ this.zone.runOutsideAngular(() => {
7942
+ setTimeout(() => {
7943
+ const width = element.offsetWidth;
7944
+ if (this.numericButtons) {
7945
+ const selectElement = this.numericButtons.selectElement.nativeElement;
7946
+ const numbersElement = this.numericButtons.numbersElement.nativeElement;
7947
+ this.renderer.removeStyle(numbersElement, 'display');
7948
+ this.renderer.setStyle(selectElement, 'display', 'none');
7949
+ if (width < RESPONSIVE_BREAKPOINT_MEDIUM) {
7950
+ this.renderer.removeStyle(selectElement, 'display');
7951
+ this.renderer.setStyle(numbersElement, 'display', 'none');
7952
+ }
7953
+ }
7954
+ if (this.pagerInfo) {
7955
+ this.renderer.removeStyle(this.pagerInfo.nativeElement, 'display');
7956
+ if (width < RESPONSIVE_BREAKPOINT_LARGE) {
7957
+ this.renderer.setStyle(this.pagerInfo.nativeElement, 'display', 'none');
7958
+ }
7959
+ }
7960
+ if (this.pagerPageSizes) {
7961
+ this.renderer.removeStyle(this.pagerPageSizes.nativeElement, 'display');
7962
+ if (width < RESPONSIVE_BREAKPOINT_MEDIUM) {
7963
+ this.renderer.setStyle(this.pagerPageSizes.nativeElement, 'display', 'none');
7964
+ }
7965
+ }
7966
+ });
7967
+ });
7927
7968
  };
7928
7969
  }
7929
7970
  set options(value) {
@@ -8042,12 +8083,10 @@ class PagerComponent {
8042
8083
  }
8043
8084
  const changesInTemplate = changes['template'];
8044
8085
  if (changesInTemplate) {
8045
- // eslint-disable-next-line no-unused-expressions
8046
- changesInTemplate.currentValue ? this.clearResponsiveClasses() : this.resizeHandler();
8086
+ changesInTemplate.currentValue ? this.clearResponsiveStyling() : this.resizeHandler();
8047
8087
  }
8048
8088
  if (changes['options']) {
8049
- // eslint-disable-next-line no-unused-expressions
8050
- this.settings.responsive ? this.resizeHandler() : this.clearResponsiveClasses();
8089
+ this.settings.responsive ? this.resizeHandler() : this.clearResponsiveStyling();
8051
8090
  }
8052
8091
  }
8053
8092
  ngOnDestroy() {
@@ -8073,11 +8112,6 @@ class PagerComponent {
8073
8112
  }
8074
8113
  });
8075
8114
  }
8076
- clearResponsiveClasses() {
8077
- const element = this.element.nativeElement;
8078
- this.renderer.removeClass(element, 'k-pager-mobile-sm');
8079
- this.renderer.removeClass(element, 'k-pager-mobile-md');
8080
- }
8081
8115
  shouldTriggerPageChange(target, condition) {
8082
8116
  return this.navigationService.pagerEnabled &&
8083
8117
  target === this.element.nativeElement &&
@@ -8100,6 +8134,18 @@ class PagerComponent {
8100
8134
  this.cellContext.focusGroup = this.focusGroup;
8101
8135
  }
8102
8136
  }
8137
+ clearResponsiveStyling() {
8138
+ this.zone.runOutsideAngular(() => {
8139
+ setTimeout(() => {
8140
+ if (this.numericButtons) {
8141
+ this.renderer.removeStyle(this.numericButtons.numbersElement.nativeElement, 'display');
8142
+ this.renderer.setStyle(this.numericButtons.selectElement.nativeElement, 'display', 'none');
8143
+ }
8144
+ this.pagerInfo && this.renderer.removeStyle(this.pagerInfo.nativeElement, 'display');
8145
+ this.pagerPageSizes && this.renderer.removeStyle(this.pagerPageSizes.nativeElement, 'display');
8146
+ });
8147
+ });
8148
+ }
8103
8149
  }
8104
8150
  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 });
8105
8151
  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: [{
@@ -8113,7 +8159,7 @@ PagerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version
8113
8159
  provide: FocusGroup,
8114
8160
  deps: [FocusRoot],
8115
8161
  useClass: FocusGroup
8116
- }], usesOnChanges: true, ngImport: i0, template: `
8162
+ }], 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: `
8117
8163
  <div
8118
8164
  *ngIf="navigationService.pagerEnabled"
8119
8165
  class="k-sr-only"
@@ -8127,20 +8173,21 @@ PagerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version
8127
8173
  [ngTemplateOutletContext]="templateContext">
8128
8174
  </ng-container>
8129
8175
  <ng-container *ngIf="!template?.templateRef">
8130
- <kendo-pager-prev-buttons [size]="size" *ngIf="settings.previousNext"></kendo-pager-prev-buttons>
8131
- <kendo-pager-numeric-buttons
8132
- [size]="size"
8133
- *ngIf="settings.type === 'numeric'"
8134
- [buttonCount]="settings.buttonCount">
8135
- </kendo-pager-numeric-buttons>
8136
- <kendo-pager-input [size]="size" *ngIf="settings.type === 'input'"></kendo-pager-input>
8137
- <kendo-pager-next-buttons [size]="size" *ngIf="settings.previousNext"></kendo-pager-next-buttons>
8176
+ <div class="k-pager-numbers-wrap">
8177
+ <kendo-pager-prev-buttons [size]="size" *ngIf="settings.previousNext"></kendo-pager-prev-buttons>
8178
+ <kendo-pager-numeric-buttons
8179
+ [size]="size"
8180
+ *ngIf="settings.type === 'numeric'"
8181
+ [buttonCount]="settings.buttonCount">
8182
+ </kendo-pager-numeric-buttons>
8183
+ <kendo-pager-input [size]="size" *ngIf="settings.type === 'input'"></kendo-pager-input>
8184
+ <kendo-pager-next-buttons [size]="size" *ngIf="settings.previousNext"></kendo-pager-next-buttons>
8185
+ </div>
8138
8186
  <kendo-pager-info *ngIf='settings.info'></kendo-pager-info>
8139
8187
  <kendo-pager-page-sizes
8140
8188
  [size]="size"
8141
8189
  *ngIf="settings.pageSizes"
8142
8190
  [pageSizes]="$any(settings.pageSizes)"
8143
- #pageSizes
8144
8191
  ></kendo-pager-page-sizes>
8145
8192
  </ng-container>
8146
8193
  <div
@@ -8182,20 +8229,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
8182
8229
  [ngTemplateOutletContext]="templateContext">
8183
8230
  </ng-container>
8184
8231
  <ng-container *ngIf="!template?.templateRef">
8185
- <kendo-pager-prev-buttons [size]="size" *ngIf="settings.previousNext"></kendo-pager-prev-buttons>
8186
- <kendo-pager-numeric-buttons
8187
- [size]="size"
8188
- *ngIf="settings.type === 'numeric'"
8189
- [buttonCount]="settings.buttonCount">
8190
- </kendo-pager-numeric-buttons>
8191
- <kendo-pager-input [size]="size" *ngIf="settings.type === 'input'"></kendo-pager-input>
8192
- <kendo-pager-next-buttons [size]="size" *ngIf="settings.previousNext"></kendo-pager-next-buttons>
8232
+ <div class="k-pager-numbers-wrap">
8233
+ <kendo-pager-prev-buttons [size]="size" *ngIf="settings.previousNext"></kendo-pager-prev-buttons>
8234
+ <kendo-pager-numeric-buttons
8235
+ [size]="size"
8236
+ *ngIf="settings.type === 'numeric'"
8237
+ [buttonCount]="settings.buttonCount">
8238
+ </kendo-pager-numeric-buttons>
8239
+ <kendo-pager-input [size]="size" *ngIf="settings.type === 'input'"></kendo-pager-input>
8240
+ <kendo-pager-next-buttons [size]="size" *ngIf="settings.previousNext"></kendo-pager-next-buttons>
8241
+ </div>
8193
8242
  <kendo-pager-info *ngIf='settings.info'></kendo-pager-info>
8194
8243
  <kendo-pager-page-sizes
8195
8244
  [size]="size"
8196
8245
  *ngIf="settings.pageSizes"
8197
8246
  [pageSizes]="$any(settings.pageSizes)"
8198
- #pageSizes
8199
8247
  ></kendo-pager-page-sizes>
8200
8248
  </ng-container>
8201
8249
  <div
@@ -8215,7 +8263,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
8215
8263
  type: Inject,
8216
8264
  args: [CELL_CONTEXT]
8217
8265
  }] }, { type: FocusRoot }, { type: FocusGroup }];
8218
- }, propDecorators: { total: [{
8266
+ }, propDecorators: { pagerInfo: [{
8267
+ type: ViewChild,
8268
+ args: [PagerInfoComponent, { read: ElementRef }]
8269
+ }], pagerPageSizes: [{
8270
+ type: ViewChild,
8271
+ args: [PagerPageSizesComponent, { read: ElementRef }]
8272
+ }], numericButtons: [{
8273
+ type: ViewChild,
8274
+ args: [PagerNumericButtonsComponent]
8275
+ }], total: [{
8219
8276
  type: Input
8220
8277
  }], skip: [{
8221
8278
  type: Input
@@ -9564,7 +9621,7 @@ FilterMenuInputWrapperComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion:
9564
9621
  (keydown.shift.tab)="onShiftTab($event)">
9565
9622
  </kendo-dropdownlist>
9566
9623
  <ng-content></ng-content>
9567
- `, 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"] }] });
9624
+ `, 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"] }] });
9568
9625
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FilterMenuInputWrapperComponent, decorators: [{
9569
9626
  type: Component,
9570
9627
  args: [{
@@ -9760,7 +9817,7 @@ StringFilterMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.
9760
9817
  [filter]="filter"
9761
9818
  [menuTabbingService]="menuTabbingService">
9762
9819
  </kendo-grid-string-filter-menu-input>
9763
- `, 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"] }] });
9820
+ `, 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"] }] });
9764
9821
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: StringFilterMenuComponent, decorators: [{
9765
9822
  type: Component,
9766
9823
  args: [{
@@ -10166,7 +10223,7 @@ NumericFilterMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0
10166
10223
  [menuTabbingService]="menuTabbingService"
10167
10224
  >
10168
10225
  </kendo-grid-numeric-filter-menu-input>
10169
- `, 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"] }] });
10226
+ `, 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"] }] });
10170
10227
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: NumericFilterMenuComponent, decorators: [{
10171
10228
  type: Component,
10172
10229
  args: [{
@@ -10621,7 +10678,7 @@ DateFilterMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0"
10621
10678
  [menuTabbingService]="menuTabbingService"
10622
10679
  >
10623
10680
  </kendo-grid-date-filter-menu-input>
10624
- `, 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"] }] });
10681
+ `, 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"] }] });
10625
10682
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: DateFilterMenuComponent, decorators: [{
10626
10683
  type: Component,
10627
10684
  args: [{
@@ -11097,10 +11154,10 @@ class FilterMenuContainerComponent {
11097
11154
  e.preventDefault();
11098
11155
  if (buttonType === 'reset') {
11099
11156
  // eslint-disable-next-line no-unused-expressions
11100
- this.disabled ? this.menuTabbingService.firstFocusable.focus() : this.filterButton.nativeElement.focus();
11157
+ this.menuTabbingService.firstFocusable.focus();
11101
11158
  }
11102
11159
  else {
11103
- this.menuTabbingService.firstFocusable.focus();
11160
+ this.disabled ? this.menuTabbingService.firstFocusable.focus() : this.resetButton.nativeElement.focus();
11104
11161
  }
11105
11162
  }
11106
11163
  }
@@ -11226,15 +11283,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
11226
11283
  args: ['filterButton', { static: false }]
11227
11284
  }] } });
11228
11285
 
11286
+ let id$3 = 0;
11287
+ const getId$1 = (gridId) => `${gridId}-filter-menu-${id$3++}`;
11229
11288
  /**
11230
11289
  * @hidden
11231
11290
  */
11232
11291
  class FilterMenuComponent {
11233
- constructor(filterService, popupService, ctx, navigationService) {
11292
+ constructor(filterService, popupService, ctx, navigationService, renderer, cdr, idService) {
11234
11293
  this.filterService = filterService;
11235
11294
  this.popupService = popupService;
11236
11295
  this.ctx = ctx;
11237
11296
  this.navigationService = navigationService;
11297
+ this.renderer = renderer;
11298
+ this.cdr = cdr;
11299
+ this.idService = idService;
11238
11300
  this.filterIcon = filterIcon;
11239
11301
  this.tabIndex = '-1';
11240
11302
  }
@@ -11249,9 +11311,36 @@ class FilterMenuComponent {
11249
11311
  const columnName = this.column.title || this.column.field;
11250
11312
  return replaceMessagePlaceholder(localizationMsg, 'columnName', columnName);
11251
11313
  }
11314
+ /**
11315
+ * @hidden
11316
+ */
11317
+ get isNavigable() {
11318
+ return this.navigationService.tableEnabled;
11319
+ }
11252
11320
  toggle(anchor, template) {
11321
+ var _a;
11253
11322
  this.popupRef = this.popupService.open(anchor, template, this.popupRef);
11254
- if (!this.popupRef) {
11323
+ // Needed as changes to 'popupRef' are not reflected
11324
+ // automatically when the Popup is closed by clicking outside the anchor
11325
+ const ariaRoot = this.isNavigable ? anchor.closest('.k-table-th') : anchor;
11326
+ if (this.popupRef) {
11327
+ this.popupRef.popup.instance.close.pipe(take(1)).subscribe(() => {
11328
+ this.popupRef = null;
11329
+ const ariaRoot = this.isNavigable ? anchor.closest('.k-table-th') : anchor;
11330
+ ariaRoot && this.renderer.removeAttribute(ariaRoot, 'aria-controls');
11331
+ ariaRoot && this.renderer.setAttribute(ariaRoot, 'aria-expanded', 'false');
11332
+ });
11333
+ const popupAriaElement = this.popupRef.popupElement.querySelector('.k-grid-filter-popup');
11334
+ if (popupAriaElement) {
11335
+ const popupId = getId$1((_a = this.idService) === null || _a === void 0 ? void 0 : _a.gridId());
11336
+ this.renderer.setAttribute(popupAriaElement, 'id', popupId);
11337
+ this.renderer.setAttribute(popupAriaElement, 'role', 'dialog');
11338
+ this.renderer.setAttribute(popupAriaElement, 'aria-label', this.filterLabel);
11339
+ ariaRoot && this.renderer.setAttribute(ariaRoot, 'aria-controls', popupId);
11340
+ ariaRoot && this.renderer.setAttribute(ariaRoot, 'aria-expanded', 'true');
11341
+ }
11342
+ }
11343
+ else {
11255
11344
  if (this.navigationService.tableEnabled) {
11256
11345
  this.navigationService.focusCell(0, this.column.leafIndex);
11257
11346
  }
@@ -11263,6 +11352,8 @@ class FilterMenuComponent {
11263
11352
  }
11264
11353
  close() {
11265
11354
  this.popupService.destroy();
11355
+ this.popupRef = null;
11356
+ this.cdr.markForCheck();
11266
11357
  if (this.navigationService.tableEnabled) {
11267
11358
  this.navigationService.focusCell(0, this.column.leafIndex);
11268
11359
  }
@@ -11271,7 +11362,7 @@ class FilterMenuComponent {
11271
11362
  }
11272
11363
  }
11273
11364
  }
11274
- FilterMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FilterMenuComponent, deps: [{ token: FilterService }, { token: SinglePopupService }, { token: ContextService }, { token: NavigationService }], target: i0.ɵɵFactoryTarget.Component });
11365
+ FilterMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FilterMenuComponent, deps: [{ token: FilterService }, { token: SinglePopupService }, { token: ContextService }, { token: NavigationService }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: IdService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
11275
11366
  FilterMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: FilterMenuComponent, selector: "kendo-grid-filter-menu", inputs: { column: "column", filter: "filter", tabIndex: "tabIndex" }, viewQueries: [{ propertyName: "anchor", first: true, predicate: ["anchor"], descendants: true, static: true }, { propertyName: "template", first: true, predicate: ["template"], descendants: true, read: TemplateRef, static: true }], ngImport: i0, template: `
11276
11367
  <a #anchor
11277
11368
  class="k-grid-filter-menu k-grid-header-menu"
@@ -11280,7 +11371,9 @@ FilterMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ve
11280
11371
  (click)="toggle(anchor, template)"
11281
11372
  (keydown.enter)="$event.stopImmediatePropagation()"
11282
11373
  href="#"
11283
- [attr.title]="filterLabel">
11374
+ [attr.title]="filterLabel"
11375
+ [attr.aria-haspopup]="isNavigable ? undefined : 'dialog'"
11376
+ [attr.aria-expanded]="isNavigable ? undefined : false">
11284
11377
  <kendo-icon-wrapper
11285
11378
  name="filter"
11286
11379
  [svgIcon]="filterIcon"></kendo-icon-wrapper>
@@ -11308,7 +11401,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
11308
11401
  (click)="toggle(anchor, template)"
11309
11402
  (keydown.enter)="$event.stopImmediatePropagation()"
11310
11403
  href="#"
11311
- [attr.title]="filterLabel">
11404
+ [attr.title]="filterLabel"
11405
+ [attr.aria-haspopup]="isNavigable ? undefined : 'dialog'"
11406
+ [attr.aria-expanded]="isNavigable ? undefined : false">
11312
11407
  <kendo-icon-wrapper
11313
11408
  name="filter"
11314
11409
  [svgIcon]="filterIcon"></kendo-icon-wrapper>
@@ -11325,7 +11420,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
11325
11420
  </ng-template>
11326
11421
  `
11327
11422
  }]
11328
- }], ctorParameters: function () { return [{ type: FilterService }, { type: SinglePopupService }, { type: ContextService }, { type: NavigationService }]; }, propDecorators: { column: [{
11423
+ }], ctorParameters: function () {
11424
+ return [{ type: FilterService }, { type: SinglePopupService }, { type: ContextService }, { type: NavigationService }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: IdService, decorators: [{
11425
+ type: Optional
11426
+ }] }];
11427
+ }, propDecorators: { column: [{
11329
11428
  type: Input
11330
11429
  }], filter: [{
11331
11430
  type: Input
@@ -11383,7 +11482,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
11383
11482
  /**
11384
11483
  * @hidden
11385
11484
  */
11386
- const ColunnMenuErrorMessages = {
11485
+ const ColumnMenuErrorMessages = {
11387
11486
  autoSizeColumn: 'The auto size column does not work with enabled virtual columns',
11388
11487
  autoSizeAllColumns: 'The auto size all columns does not work with enabled virtual columns'
11389
11488
  };
@@ -11491,6 +11590,9 @@ class ColumnMenuItemComponent {
11491
11590
  this.collapse = new EventEmitter();
11492
11591
  this.contentState = 'collapsed';
11493
11592
  }
11593
+ ngAfterViewInit() {
11594
+ this.contentTemplate && (this.contentId = `k-${guid()}`);
11595
+ }
11494
11596
  ngOnChanges(changes) {
11495
11597
  if (changes.expanded) {
11496
11598
  this.updateContentState();
@@ -11525,13 +11627,14 @@ ColumnMenuItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0"
11525
11627
  [class.k-selected]="selected"
11526
11628
  [class.k-disabled]="disabled"
11527
11629
  role="button"
11528
- [attr.aria-expanded]="expanded">
11630
+ [attr.aria-expanded]="expanded"
11631
+ [attr.aria-controls]="expanded ? contentId : undefined">
11529
11632
  <kendo-icon-wrapper
11530
11633
  [name]="icon"
11531
11634
  [svgIcon]="svgIcon"></kendo-icon-wrapper>
11532
11635
  {{ text }}
11533
11636
  </div>
11534
- <div *ngIf="contentTemplate" [@state]="contentState" [style.overflow]="'hidden'" class="k-columnmenu-item-content">
11637
+ <div *ngIf="contentTemplate" [attr.id]="contentId" [@state]="contentState" [style.overflow]="'hidden'" class="k-columnmenu-item-content">
11535
11638
  <ng-container [ngTemplateOutlet]="contentTemplate.templateRef">
11536
11639
  </ng-container>
11537
11640
  <div>
@@ -11593,13 +11696,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
11593
11696
  [class.k-selected]="selected"
11594
11697
  [class.k-disabled]="disabled"
11595
11698
  role="button"
11596
- [attr.aria-expanded]="expanded">
11699
+ [attr.aria-expanded]="expanded"
11700
+ [attr.aria-controls]="expanded ? contentId : undefined">
11597
11701
  <kendo-icon-wrapper
11598
11702
  [name]="icon"
11599
11703
  [svgIcon]="svgIcon"></kendo-icon-wrapper>
11600
11704
  {{ text }}
11601
11705
  </div>
11602
- <div *ngIf="contentTemplate" [@state]="contentState" [style.overflow]="'hidden'" class="k-columnmenu-item-content">
11706
+ <div *ngIf="contentTemplate" [attr.id]="contentId" [@state]="contentState" [style.overflow]="'hidden'" class="k-columnmenu-item-content">
11603
11707
  <ng-container [ngTemplateOutlet]="contentTemplate.templateRef">
11604
11708
  </ng-container>
11605
11709
  <div>
@@ -11975,14 +12079,79 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
11975
12079
  type: Input
11976
12080
  }] } });
11977
12081
 
12082
+ /**
12083
+ * @hidden
12084
+ */
12085
+ class ColumnListKeyboardNavigation {
12086
+ constructor(renderer) {
12087
+ this.renderer = renderer;
12088
+ this.activeIndex = 0;
12089
+ }
12090
+ next() {
12091
+ this.toggle(this.activeIndex, false);
12092
+ this.activeIndex = Math.min(this.activeIndex + 1, this.items.length - 1);
12093
+ this.toggle(this.activeIndex, true);
12094
+ }
12095
+ prev() {
12096
+ this.toggle(this.activeIndex, false);
12097
+ this.activeIndex = Math.max(this.activeIndex - 1, 0);
12098
+ this.toggle(this.activeIndex, true);
12099
+ }
12100
+ toggle(index, active) {
12101
+ var _a;
12102
+ const element = (_a = this.items[index]) === null || _a === void 0 ? void 0 : _a.host.nativeElement;
12103
+ element && this.renderer.setAttribute(this.items[index].host.nativeElement, 'tabindex', active ? '0' : '-1');
12104
+ active && element && element.focus();
12105
+ }
12106
+ toggleCheckedState() {
12107
+ this.items[this.activeIndex].host.nativeElement.firstElementChild.click();
12108
+ }
12109
+ }
12110
+ ColumnListKeyboardNavigation.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnListKeyboardNavigation, deps: [{ token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Injectable });
12111
+ ColumnListKeyboardNavigation.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnListKeyboardNavigation });
12112
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnListKeyboardNavigation, decorators: [{
12113
+ type: Injectable
12114
+ }], ctorParameters: function () { return [{ type: i0.Renderer2 }]; } });
12115
+
12116
+ /**
12117
+ * @hidden
12118
+ */
12119
+ class ColumnMenuChooserItemCheckedDirective {
12120
+ constructor(host, renderer) {
12121
+ this.host = host;
12122
+ this.renderer = renderer;
12123
+ this.checkedChangeSub = new Subscription();
12124
+ }
12125
+ ngAfterViewInit() {
12126
+ this.checkedChangeSub.add(this.renderer.listen(this.host.nativeElement.firstElementChild, 'change', (e) => {
12127
+ this.kendoColumnMenuChooserItemChecked = e.target.checked;
12128
+ }));
12129
+ }
12130
+ ngOnDestroy() {
12131
+ this.checkedChangeSub.unsubscribe();
12132
+ }
12133
+ }
12134
+ ColumnMenuChooserItemCheckedDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnMenuChooserItemCheckedDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
12135
+ ColumnMenuChooserItemCheckedDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.12", type: ColumnMenuChooserItemCheckedDirective, selector: "[kendoColumnMenuChooserItemChecked]", inputs: { kendoColumnMenuChooserItemChecked: "kendoColumnMenuChooserItemChecked" }, host: { properties: { "attr.aria-checked": "this.kendoColumnMenuChooserItemChecked" } }, ngImport: i0 });
12136
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnMenuChooserItemCheckedDirective, decorators: [{
12137
+ type: Directive,
12138
+ args: [{ selector: '[kendoColumnMenuChooserItemChecked]' }]
12139
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }]; }, propDecorators: { kendoColumnMenuChooserItemChecked: [{
12140
+ type: HostBinding,
12141
+ args: ['attr.aria-checked']
12142
+ }, {
12143
+ type: Input
12144
+ }] } });
12145
+
11978
12146
  /**
11979
12147
  * @hidden
11980
12148
  */
11981
12149
  class ColumnListComponent {
11982
- constructor(element, ngZone, renderer) {
12150
+ constructor(element, ngZone, renderer, listNavigationService) {
11983
12151
  this.element = element;
11984
12152
  this.ngZone = ngZone;
11985
12153
  this.renderer = renderer;
12154
+ this.listNavigationService = listNavigationService;
11986
12155
  this.reset = new EventEmitter();
11987
12156
  this.apply = new EventEmitter();
11988
12157
  this.columnChange = new EventEmitter();
@@ -11990,10 +12159,28 @@ class ColumnListComponent {
11990
12159
  this.allowHideAll = false;
11991
12160
  this.actionsClass = 'k-actions k-actions-stretched k-actions-horizontal';
11992
12161
  this.unlockedCount = 0;
12162
+ this.domSubscriptions = new Subscription();
12163
+ this.onKeydown = (e) => {
12164
+ if (e.keyCode !== Keys.Tab) {
12165
+ e.preventDefault();
12166
+ }
12167
+ if (e.keyCode === Keys.ArrowDown) {
12168
+ this.listNavigationService.next();
12169
+ }
12170
+ else if (e.keyCode === Keys.ArrowUp) {
12171
+ this.listNavigationService.prev();
12172
+ }
12173
+ else if (e.keyCode === Keys.Space && e.target.classList.contains('k-column-list-item')) {
12174
+ this.listNavigationService.toggleCheckedState();
12175
+ }
12176
+ };
11993
12177
  }
11994
12178
  get className() {
11995
12179
  return true;
11996
12180
  }
12181
+ isChecked(checkbox) {
12182
+ return checkbox.checked;
12183
+ }
11997
12184
  set columns(value) {
11998
12185
  this._columns = value.filter(column => column.includeInChooser !== false);
11999
12186
  this.allColumns = value;
@@ -12011,12 +12198,21 @@ class ColumnListComponent {
12011
12198
  return;
12012
12199
  }
12013
12200
  this.ngZone.runOutsideAngular(() => {
12014
- this.domSubscriptions = this.renderer.listen(this.element.nativeElement, 'click', (e) => {
12015
- if (hasClasses(e.target, 'k-checkbox')) {
12201
+ this.domSubscriptions.add(this.renderer.listen(this.element.nativeElement, 'click', (e) => {
12202
+ const closestItem = e.target.closest('.k-column-list-item');
12203
+ if (closestItem) {
12204
+ const checkbox = closestItem.querySelector('.k-checkbox');
12205
+ const index = parseInt(checkbox.getAttribute('data-index'), 10);
12206
+ if (e.target === checkbox) {
12207
+ closestItem.focus();
12208
+ }
12209
+ else {
12210
+ e.preventDefault();
12211
+ checkbox.checked = !checkbox.checked;
12212
+ }
12016
12213
  if (this.autoSync) {
12017
- const index = parseInt(e.target.getAttribute('data-index'), 10);
12018
12214
  const column = this.columns[index];
12019
- const hidden = !e.target.checked;
12215
+ const hidden = !checkbox.checked;
12020
12216
  if (Boolean(column.hidden) !== hidden) {
12021
12217
  this.ngZone.run(() => {
12022
12218
  column.hidden = hidden;
@@ -12027,10 +12223,20 @@ class ColumnListComponent {
12027
12223
  else {
12028
12224
  this.updateDisabled();
12029
12225
  }
12226
+ if (index !== this.listNavigationService.activeIndex) {
12227
+ this.listNavigationService.toggle(this.listNavigationService.activeIndex, false);
12228
+ this.listNavigationService.activeIndex = index;
12229
+ this.listNavigationService.toggle(index, true);
12230
+ }
12030
12231
  }
12031
- });
12232
+ }));
12233
+ this.domSubscriptions.add(this.renderer.listen(this.element.nativeElement, 'keydown', this.onKeydown));
12032
12234
  });
12033
12235
  }
12236
+ ngAfterViewInit() {
12237
+ this.listNavigationService.items = this.options.toArray();
12238
+ this.listNavigationService.toggle(0, true);
12239
+ }
12034
12240
  ngOnChanges(changes) {
12035
12241
  if (!this.service) {
12036
12242
  return;
@@ -12043,9 +12249,7 @@ class ColumnListComponent {
12043
12249
  }
12044
12250
  }
12045
12251
  ngOnDestroy() {
12046
- if (this.domSubscriptions) {
12047
- this.domSubscriptions();
12048
- }
12252
+ this.domSubscriptions.unsubscribe();
12049
12253
  }
12050
12254
  cancelChanges() {
12051
12255
  this.forEachCheckBox((element, index) => {
@@ -12073,6 +12277,9 @@ class ColumnListComponent {
12073
12277
  if (this.service) {
12074
12278
  this.service.menuTabbingService.firstFocusable.focus();
12075
12279
  }
12280
+ else {
12281
+ this.listNavigationService.toggle(this.listNavigationService.activeIndex, true);
12282
+ }
12076
12283
  }
12077
12284
  }
12078
12285
  forEachCheckBox(callback) {
@@ -12119,35 +12326,94 @@ class ColumnListComponent {
12119
12326
  }
12120
12327
  }
12121
12328
  }
12122
- 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 });
12123
- 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: `
12124
- <div class="k-column-list">
12125
- <label *ngFor="let column of columns; let index = index;" class='k-column-list-item'>
12126
- <input class="k-checkbox k-checkbox-md k-rounded-md" type="checkbox" [attr.data-index]="index" [checked]="!column.hidden" [disabled]="isDisabled(column)" /><span class="k-checkbox-label">{{ column.displayTitle }}</span>
12329
+ ColumnListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnListComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: ColumnListKeyboardNavigation }], target: i0.ɵɵFactoryTarget.Component });
12330
+ ColumnListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: ColumnListComponent, selector: "kendo-grid-columnlist", inputs: { columns: "columns", autoSync: "autoSync", ariaLabel: "ariaLabel", allowHideAll: "allowHideAll", applyText: "applyText", resetText: "resetText", actionsClass: "actionsClass", isLast: "isLast", isExpanded: "isExpanded", service: "service" }, outputs: { reset: "reset", apply: "apply", columnChange: "columnChange" }, host: { properties: { "class.k-column-list-wrapper": "this.className" } }, providers: [ColumnListKeyboardNavigation], viewQueries: [{ propertyName: "resetButton", first: true, predicate: ["resetButton"], descendants: true }, { propertyName: "applyButton", first: true, predicate: ["applyButton"], descendants: true }, { propertyName: "options", predicate: ColumnMenuChooserItemCheckedDirective, descendants: true }], usesOnChanges: true, ngImport: i0, template: `
12331
+ <div
12332
+ class="k-column-list"
12333
+ role="listbox"
12334
+ aria-multiselectable="true"
12335
+ [attr.aria-label]="ariaLabel">
12336
+ <label
12337
+ *ngFor="let column of columns; let index = index;"
12338
+ class='k-column-list-item'
12339
+ [kendoColumnMenuChooserItemChecked]="!column.hidden"
12340
+ role="option">
12341
+ <input
12342
+ class="k-checkbox k-checkbox-md k-rounded-md"
12343
+ type="checkbox"
12344
+ [attr.data-index]="index"
12345
+ [checked]="!column.hidden"
12346
+ tabindex="-1"
12347
+ [attr.aria-hidden]="true"
12348
+ [disabled]="isDisabled(column)" />
12349
+ <span class="k-checkbox-label">{{ column.displayTitle }}</span>
12127
12350
  </label>
12128
12351
  </div>
12129
12352
  <div [ngClass]="actionsClass" *ngIf="!autoSync">
12130
- <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>
12131
- <button type="button" class="k-button k-button-solid-base k-button-solid k-button-md k-rounded-md k-button-rectangle" (click)="cancelChanges()">{{ resetText }}</button>
12353
+ <button
12354
+ #applyButton
12355
+ type="button"
12356
+ class="k-button k-button-solid-primary k-button-solid k-button-md k-rounded-md k-button-rectangle"
12357
+ (click)="applyChanges()"
12358
+ (keydown.enter)="$event.preventDefault(); $event.stopPropagation; applyChanges();"
12359
+ (keydown.space)="$event.preventDefault(); $event.stopPropagation; applyChanges();">{{ applyText }}</button>
12360
+ <button
12361
+ #resetButton
12362
+ type="button"
12363
+ (keydown.tab)="onTab($event)"
12364
+ class="k-button k-button-solid-base k-button-solid k-button-md k-rounded-md k-button-rectangle"
12365
+ (click)="cancelChanges()"
12366
+ (keydown.enter)="$event.preventDefault(); $event.stopPropagation; cancelChanges();"
12367
+ (keydown.space)="$event.preventDefault(); $event.stopPropagation; cancelChanges();">{{ resetText }}</button>
12132
12368
  </div>
12133
- `, isInline: true, directives: [{ type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
12369
+ `, isInline: true, directives: [{ type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: ColumnMenuChooserItemCheckedDirective, selector: "[kendoColumnMenuChooserItemChecked]", inputs: ["kendoColumnMenuChooserItemChecked"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
12134
12370
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnListComponent, decorators: [{
12135
12371
  type: Component,
12136
12372
  args: [{
12137
12373
  selector: 'kendo-grid-columnlist',
12374
+ providers: [ColumnListKeyboardNavigation],
12138
12375
  template: `
12139
- <div class="k-column-list">
12140
- <label *ngFor="let column of columns; let index = index;" class='k-column-list-item'>
12141
- <input class="k-checkbox k-checkbox-md k-rounded-md" type="checkbox" [attr.data-index]="index" [checked]="!column.hidden" [disabled]="isDisabled(column)" /><span class="k-checkbox-label">{{ column.displayTitle }}</span>
12376
+ <div
12377
+ class="k-column-list"
12378
+ role="listbox"
12379
+ aria-multiselectable="true"
12380
+ [attr.aria-label]="ariaLabel">
12381
+ <label
12382
+ *ngFor="let column of columns; let index = index;"
12383
+ class='k-column-list-item'
12384
+ [kendoColumnMenuChooserItemChecked]="!column.hidden"
12385
+ role="option">
12386
+ <input
12387
+ class="k-checkbox k-checkbox-md k-rounded-md"
12388
+ type="checkbox"
12389
+ [attr.data-index]="index"
12390
+ [checked]="!column.hidden"
12391
+ tabindex="-1"
12392
+ [attr.aria-hidden]="true"
12393
+ [disabled]="isDisabled(column)" />
12394
+ <span class="k-checkbox-label">{{ column.displayTitle }}</span>
12142
12395
  </label>
12143
12396
  </div>
12144
12397
  <div [ngClass]="actionsClass" *ngIf="!autoSync">
12145
- <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>
12146
- <button type="button" class="k-button k-button-solid-base k-button-solid k-button-md k-rounded-md k-button-rectangle" (click)="cancelChanges()">{{ resetText }}</button>
12398
+ <button
12399
+ #applyButton
12400
+ type="button"
12401
+ class="k-button k-button-solid-primary k-button-solid k-button-md k-rounded-md k-button-rectangle"
12402
+ (click)="applyChanges()"
12403
+ (keydown.enter)="$event.preventDefault(); $event.stopPropagation; applyChanges();"
12404
+ (keydown.space)="$event.preventDefault(); $event.stopPropagation; applyChanges();">{{ applyText }}</button>
12405
+ <button
12406
+ #resetButton
12407
+ type="button"
12408
+ (keydown.tab)="onTab($event)"
12409
+ class="k-button k-button-solid-base k-button-solid k-button-md k-rounded-md k-button-rectangle"
12410
+ (click)="cancelChanges()"
12411
+ (keydown.enter)="$event.preventDefault(); $event.stopPropagation; cancelChanges();"
12412
+ (keydown.space)="$event.preventDefault(); $event.stopPropagation; cancelChanges();">{{ resetText }}</button>
12147
12413
  </div>
12148
12414
  `
12149
12415
  }]
12150
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: i0.Renderer2 }]; }, propDecorators: { className: [{
12416
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: i0.Renderer2 }, { type: ColumnListKeyboardNavigation }]; }, propDecorators: { className: [{
12151
12417
  type: HostBinding,
12152
12418
  args: ["class.k-column-list-wrapper"]
12153
12419
  }], reset: [{
@@ -12160,6 +12426,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
12160
12426
  type: Input
12161
12427
  }], autoSync: [{
12162
12428
  type: Input
12429
+ }], ariaLabel: [{
12430
+ type: Input
12163
12431
  }], allowHideAll: [{
12164
12432
  type: Input
12165
12433
  }], applyText: [{
@@ -12174,9 +12442,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
12174
12442
  type: Input
12175
12443
  }], service: [{
12176
12444
  type: Input
12445
+ }], resetButton: [{
12446
+ type: ViewChild,
12447
+ args: ['resetButton', { static: false }]
12177
12448
  }], applyButton: [{
12178
12449
  type: ViewChild,
12179
12450
  args: ['applyButton', { static: false }]
12451
+ }], options: [{
12452
+ type: ViewChildren,
12453
+ args: [ColumnMenuChooserItemCheckedDirective]
12180
12454
  }] } });
12181
12455
 
12182
12456
  /**
@@ -12269,6 +12543,7 @@ ColumnMenuChooserComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0
12269
12543
  <kendo-grid-columnlist
12270
12544
  [applyText]="ctx.localization.get('columnsApply')"
12271
12545
  [resetText]="ctx.localization.get('columnsReset')"
12546
+ [ariaLabel]="ctx.localization.get('columns')"
12272
12547
  [columns]="columns"
12273
12548
  [autoSync]="false"
12274
12549
  [allowHideAll]="false"
@@ -12280,7 +12555,7 @@ ColumnMenuChooserComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0
12280
12555
  </kendo-grid-columnlist>
12281
12556
  </ng-template>
12282
12557
  </kendo-grid-columnmenu-item>
12283
- `, isInline: true, components: [{ type: ColumnMenuItemComponent, selector: "kendo-grid-columnmenu-item", inputs: ["icon", "svgIcon", "text", "selected", "disabled", "expanded"], outputs: ["itemClick", "expand", "collapse"] }, { type: ColumnListComponent, selector: "kendo-grid-columnlist", inputs: ["columns", "autoSync", "allowHideAll", "applyText", "resetText", "actionsClass", "isLast", "isExpanded", "service"], outputs: ["reset", "apply", "columnChange"] }], directives: [{ type: ColumnMenuItemContentTemplateDirective, selector: "[kendoGridColumnMenuItemContentTemplate]" }] });
12558
+ `, isInline: true, components: [{ type: ColumnMenuItemComponent, selector: "kendo-grid-columnmenu-item", inputs: ["icon", "svgIcon", "text", "selected", "disabled", "expanded"], outputs: ["itemClick", "expand", "collapse"] }, { type: ColumnListComponent, selector: "kendo-grid-columnlist", inputs: ["columns", "autoSync", "ariaLabel", "allowHideAll", "applyText", "resetText", "actionsClass", "isLast", "isExpanded", "service"], outputs: ["reset", "apply", "columnChange"] }], directives: [{ type: ColumnMenuItemContentTemplateDirective, selector: "[kendoGridColumnMenuItemContentTemplate]" }] });
12284
12559
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnMenuChooserComponent, decorators: [{
12285
12560
  type: Component,
12286
12561
  args: [{
@@ -12297,6 +12572,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
12297
12572
  <kendo-grid-columnlist
12298
12573
  [applyText]="ctx.localization.get('columnsApply')"
12299
12574
  [resetText]="ctx.localization.get('columnsReset')"
12575
+ [ariaLabel]="ctx.localization.get('columns')"
12300
12576
  [columns]="columns"
12301
12577
  [autoSync]="false"
12302
12578
  [allowHideAll]="false"
@@ -12700,7 +12976,7 @@ class ColumnMenuAutoSizeColumnComponent extends ColumnMenuItemBase {
12700
12976
  ngOnInit() {
12701
12977
  const isVirtualColumns = this.ctx.grid.columnMenuTemplate && this.ctx.grid.virtualColumns;
12702
12978
  if (isVirtualColumns && isDevMode()) {
12703
- console.warn(ColunnMenuErrorMessages.autoSizeColumn);
12979
+ console.warn(ColumnMenuErrorMessages.autoSizeColumn);
12704
12980
  }
12705
12981
  }
12706
12982
  /**
@@ -12767,7 +13043,7 @@ class ColumnMenuAutoSizeAllColumnsComponent extends ColumnMenuItemBase {
12767
13043
  ngOnInit() {
12768
13044
  const isVirtualColumns = this.ctx.grid.columnMenuTemplate && this.ctx.grid.virtualColumns;
12769
13045
  if (isVirtualColumns && isDevMode()) {
12770
- console.warn(ColunnMenuErrorMessages.autoSizeAllColumns);
13046
+ console.warn(ColumnMenuErrorMessages.autoSizeAllColumns);
12771
13047
  }
12772
13048
  }
12773
13049
  /**
@@ -12804,6 +13080,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
12804
13080
  }], ctorParameters: function () { return [{ type: ContextService }]; } });
12805
13081
 
12806
13082
  const POPUP_CLASS = 'k-grid-columnmenu-popup';
13083
+ let id$2 = 0;
13084
+ const getId = (gridId) => `${gridId}-column-menu-${id$2++}`;
12807
13085
  /**
12808
13086
  * Represents the [column menu](slug:columnmenu_grid#toc-customizing-the-position) component.
12809
13087
  *
@@ -12816,7 +13094,7 @@ const POPUP_CLASS = 'k-grid-columnmenu-popup';
12816
13094
  * </kendo-grid>
12817
13095
  */
12818
13096
  class ColumnMenuComponent {
12819
- constructor(navigationService, popupService, service, ctx, renderer, cdr, columnInfoService) {
13097
+ constructor(navigationService, popupService, service, ctx, renderer, cdr, columnInfoService, idService) {
12820
13098
  this.navigationService = navigationService;
12821
13099
  this.popupService = popupService;
12822
13100
  this.service = service;
@@ -12824,6 +13102,7 @@ class ColumnMenuComponent {
12824
13102
  this.renderer = renderer;
12825
13103
  this.cdr = cdr;
12826
13104
  this.columnInfoService = columnInfoService;
13105
+ this.idService = idService;
12827
13106
  /**
12828
13107
  * @hidden
12829
13108
  */
@@ -12869,7 +13148,7 @@ class ColumnMenuComponent {
12869
13148
  */
12870
13149
  this.expandedPosition = false;
12871
13150
  this.moreVerticalIcon = moreVerticalIcon;
12872
- this.closeSubscription = service.closeMenu.subscribe(this.close.bind(this));
13151
+ this.closeSubscription = service.closeMenu.subscribe(this.close.bind(this, true));
12873
13152
  }
12874
13153
  /**
12875
13154
  * @hidden
@@ -12895,6 +13174,12 @@ class ColumnMenuComponent {
12895
13174
  get hasFilter() {
12896
13175
  return hasFilter(this.settings, this.column);
12897
13176
  }
13177
+ /**
13178
+ * @hidden
13179
+ */
13180
+ get isNavigable() {
13181
+ return this.navigationService.tableEnabled;
13182
+ }
12898
13183
  /**
12899
13184
  * @hidden
12900
13185
  */
@@ -12911,7 +13196,7 @@ class ColumnMenuComponent {
12911
13196
  * @hidden
12912
13197
  */
12913
13198
  onApply(changed) {
12914
- this.close();
13199
+ this.close(true);
12915
13200
  if (changed.length) {
12916
13201
  this.cdr.markForCheck();
12917
13202
  this.columnInfoService.changeVisibility(changed);
@@ -12957,11 +13242,11 @@ class ColumnMenuComponent {
12957
13242
  if (this.ctx.grid.virtualColumns && isDevMode()) {
12958
13243
  if (this.settings.autoSizeAllColumns) {
12959
13244
  this.settings.autoSizeAllColumns = false;
12960
- console.warn(ColunnMenuErrorMessages.autoSizeAllColumns);
13245
+ console.warn(ColumnMenuErrorMessages.autoSizeAllColumns);
12961
13246
  }
12962
13247
  if (this.settings.autoSizeColumn) {
12963
13248
  this.settings.autoSizeColumn = false;
12964
- console.warn(ColunnMenuErrorMessages.autoSizeColumn);
13249
+ console.warn(ColumnMenuErrorMessages.autoSizeColumn);
12965
13250
  }
12966
13251
  }
12967
13252
  this.service.menuTabbingService.isTabbedInterface = this.settings.view === 'tabbed' ? true : false;
@@ -12980,7 +13265,7 @@ class ColumnMenuComponent {
12980
13265
  * @hidden
12981
13266
  */
12982
13267
  toggle(e, anchor, template) {
12983
- var _a;
13268
+ var _a, _b;
12984
13269
  if (e) {
12985
13270
  e.preventDefault();
12986
13271
  e.stopImmediatePropagation();
@@ -12989,12 +13274,32 @@ class ColumnMenuComponent {
12989
13274
  this.expandedColumns = this.getExpandedState(this.settings.columnChooser);
12990
13275
  this.expandedPosition = this.getExpandedState(this.settings.setColumnPosition);
12991
13276
  this.popupRef = this.popupService.open(anchor, template, this.popupRef, POPUP_CLASS);
12992
- if (this.popupRef && this.settings.view === 'tabbed') {
12993
- this.renderer.addClass(this.popupRef.popupElement.firstChild, 'k-column-menu-tabbed');
12994
- this.cdr.detectChanges();
12995
- (_a = this.tabStrip) === null || _a === void 0 ? void 0 : _a.selectTab(0);
13277
+ // Needed as changes to 'popupRef' and 'popupId' are not reflected
13278
+ // automatically when the Popup is closed by clicking outside the anchor
13279
+ const ariaRoot = this.isNavigable ? anchor.closest('.k-table-th') : anchor;
13280
+ if (this.popupRef) {
13281
+ this.popupRef.popup.instance.close.pipe(take(1)).subscribe(() => {
13282
+ this.popupRef = null;
13283
+ const ariaRoot = this.isNavigable ? anchor.closest('.k-table-th') : anchor;
13284
+ ariaRoot && this.renderer.removeAttribute(ariaRoot, 'aria-controls');
13285
+ ariaRoot && this.renderer.setAttribute(ariaRoot, 'aria-expanded', 'false');
13286
+ });
13287
+ const popupAriaElement = this.popupRef.popupElement.querySelector('.k-grid-columnmenu-popup');
13288
+ if (popupAriaElement) {
13289
+ const popupId = getId((_a = this.idService) === null || _a === void 0 ? void 0 : _a.gridId());
13290
+ this.renderer.setAttribute(popupAriaElement, 'id', popupId);
13291
+ this.renderer.setAttribute(popupAriaElement, 'role', 'dialog');
13292
+ this.renderer.setAttribute(popupAriaElement, 'aria-label', this.columnMenuTitle);
13293
+ ariaRoot && this.renderer.setAttribute(ariaRoot, 'aria-controls', popupId);
13294
+ ariaRoot && this.renderer.setAttribute(ariaRoot, 'aria-expanded', 'true');
13295
+ }
13296
+ if (this.settings.view === 'tabbed') {
13297
+ this.renderer.addClass(this.popupRef.popupElement.querySelector('.k-grid-columnmenu-popup'), 'k-column-menu-tabbed');
13298
+ this.cdr.detectChanges();
13299
+ (_b = this.tabStrip) === null || _b === void 0 ? void 0 : _b.selectTab(0);
13300
+ }
12996
13301
  }
12997
- if (!this.popupRef) {
13302
+ else {
12998
13303
  if (this.navigationService.tableEnabled) {
12999
13304
  this.navigationService.focusCell(0, this.column.leafIndex);
13000
13305
  }
@@ -13006,9 +13311,13 @@ class ColumnMenuComponent {
13006
13311
  /**
13007
13312
  * @hidden
13008
13313
  */
13009
- close() {
13314
+ close(triggerFocus = false) {
13010
13315
  this.popupService.destroy();
13011
13316
  this.popupRef = null;
13317
+ this.cdr.markForCheck();
13318
+ if (!triggerFocus) {
13319
+ return;
13320
+ }
13012
13321
  if (this.navigationService.tableEnabled) {
13013
13322
  this.navigationService.focusCell(0, this.column.leafIndex);
13014
13323
  }
@@ -13028,7 +13337,7 @@ class ColumnMenuComponent {
13028
13337
  return typeof (menuItemSettings) === 'object' ? menuItemSettings.expanded : false;
13029
13338
  }
13030
13339
  }
13031
- ColumnMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnMenuComponent, deps: [{ token: NavigationService }, { token: SinglePopupService }, { token: ColumnMenuService }, { token: ContextService }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: ColumnInfoService }], target: i0.ɵɵFactoryTarget.Component });
13340
+ ColumnMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnMenuComponent, deps: [{ token: NavigationService }, { token: SinglePopupService }, { token: ColumnMenuService }, { token: ContextService }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: ColumnInfoService }, { token: IdService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
13032
13341
  ColumnMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: ColumnMenuComponent, selector: "kendo-grid-column-menu", inputs: { standalone: "standalone", column: "column", settings: "settings", sort: "sort", filter: "filter", sortable: "sortable", columnMenuTemplate: "columnMenuTemplate", tabIndex: "tabIndex" }, host: { properties: { "class.k-grid-column-menu-standalone": "this.standalone" } }, providers: [
13033
13342
  ColumnMenuService,
13034
13343
  MenuTabbingService
@@ -13040,7 +13349,9 @@ ColumnMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ve
13040
13349
  (keydown.enter)="$event.stopImmediatePropagation()"
13041
13350
  href="#"
13042
13351
  [tabindex]="tabIndex"
13043
- [attr.title]="columnMenuTitle">
13352
+ [attr.title]="columnMenuTitle"
13353
+ [attr.aria-expanded]="isNavigable ? undefined: false"
13354
+ [attr.aria-haspopup]="isNavigable ? undefined : 'dialog'">
13044
13355
  <kendo-icon-wrapper
13045
13356
  name="more-vertical"
13046
13357
  [svgIcon]="moreVerticalIcon"></kendo-icon-wrapper>
@@ -13053,7 +13364,7 @@ ColumnMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ve
13053
13364
  </ng-template>
13054
13365
  <ng-template #defaultTemplate>
13055
13366
  <kendo-grid-columnmenu-container
13056
- (keydown.escape)="close()"
13367
+ (keydown.escape)="close(true)"
13057
13368
  (keydown.enter)="$event.stopImmediatePropagation()">
13058
13369
  <kendo-grid-columnmenu-sort #sortItem [kendoGridColumnMenuItem]="sortItem" *ngIf="hasSort" [service]="service">
13059
13370
  </kendo-grid-columnmenu-sort>
@@ -13105,7 +13416,7 @@ ColumnMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ve
13105
13416
  </kendo-grid-columnmenu-container>
13106
13417
  </ng-template>
13107
13418
  <ng-template #tabbedInterfaceTemplate>
13108
- <kendo-tabstrip #tabstrip (keydown.escape)="close()">
13419
+ <kendo-tabstrip #tabstrip (keydown.escape)="close(true)">
13109
13420
  <kendo-tabstrip-tab *ngIf="hasFilter">
13110
13421
  <ng-template kendoTabTitle>
13111
13422
  <kendo-icon-wrapper
@@ -13192,7 +13503,7 @@ ColumnMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ve
13192
13503
  </kendo-tabstrip-tab>
13193
13504
  </kendo-tabstrip>
13194
13505
  </ng-template>
13195
- `, isInline: true, components: [{ type: i3.IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }, { type: ColumnMenuContainerComponent, selector: "kendo-grid-columnmenu-container" }, { type: ColumnMenuSortComponent, selector: "kendo-grid-columnmenu-sort" }, { type: ColumnMenuLockComponent, selector: "kendo-grid-columnmenu-lock" }, { type: ColumnMenuStickComponent, selector: "kendo-grid-columnmenu-stick" }, { type: ColumnMenuPositionComponent, selector: "kendo-grid-columnmenu-position", inputs: ["expanded", "showLock", "showStick", "isLast"], outputs: ["expand", "collapse"] }, { type: ColumnMenuChooserComponent, selector: "kendo-grid-columnmenu-chooser", inputs: ["expanded", "isLast"], outputs: ["expand", "collapse"] }, { type: ColumnMenuAutoSizeColumnComponent, selector: "kendo-grid-columnmenu-autosize-column", inputs: ["column"] }, { type: ColumnMenuAutoSizeAllColumnsComponent, selector: "kendo-grid-columnmenu-autosize-all-columns" }, { type: ColumnMenuFilterComponent, selector: "kendo-grid-columnmenu-filter", inputs: ["expanded", "isLast"], outputs: ["expand", "collapse"] }, { type: i16.TabStripComponent, selector: "kendo-tabstrip", inputs: ["height", "animate", "tabAlignment", "tabPosition", "keepTabContent", "closable", "scrollable", "closeIcon", "closeIconClass", "closeSVGIcon"], outputs: ["tabSelect", "tabClose", "tabScroll"], exportAs: ["kendoTabStrip"] }, { type: i16.TabStripTabComponent, selector: "kendo-tabstrip-tab", inputs: ["title", "disabled", "cssClass", "cssStyle", "selected", "closable", "closeIcon", "closeIconClass", "closeSVGIcon"], exportAs: ["kendoTabStripTab"] }, { type: FilterMenuContainerComponent, selector: "kendo-grid-filter-menu-container", inputs: ["column", "isLast", "isExpanded", "menuTabbingService", "filter", "actionsClass"], outputs: ["close"] }, { type: ColumnListComponent, selector: "kendo-grid-columnlist", inputs: ["columns", "autoSync", "allowHideAll", "applyText", "resetText", "actionsClass", "isLast", "isExpanded", "service"], outputs: ["reset", "apply", "columnChange"] }], directives: [{ type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: ColumnMenuItemDirective, selector: "[kendoGridColumnMenuItem]", inputs: ["kendoGridColumnMenuItem"] }, { type: i16.TabTitleDirective, selector: "[kendoTabTitle]" }, { type: i16.TabContentDirective, selector: "[kendoTabContent]" }] });
13506
+ `, isInline: true, components: [{ type: i3.IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }, { type: ColumnMenuContainerComponent, selector: "kendo-grid-columnmenu-container" }, { type: ColumnMenuSortComponent, selector: "kendo-grid-columnmenu-sort" }, { type: ColumnMenuLockComponent, selector: "kendo-grid-columnmenu-lock" }, { type: ColumnMenuStickComponent, selector: "kendo-grid-columnmenu-stick" }, { type: ColumnMenuPositionComponent, selector: "kendo-grid-columnmenu-position", inputs: ["expanded", "showLock", "showStick", "isLast"], outputs: ["expand", "collapse"] }, { type: ColumnMenuChooserComponent, selector: "kendo-grid-columnmenu-chooser", inputs: ["expanded", "isLast"], outputs: ["expand", "collapse"] }, { type: ColumnMenuAutoSizeColumnComponent, selector: "kendo-grid-columnmenu-autosize-column", inputs: ["column"] }, { type: ColumnMenuAutoSizeAllColumnsComponent, selector: "kendo-grid-columnmenu-autosize-all-columns" }, { type: ColumnMenuFilterComponent, selector: "kendo-grid-columnmenu-filter", inputs: ["expanded", "isLast"], outputs: ["expand", "collapse"] }, { type: i17.TabStripComponent, selector: "kendo-tabstrip", inputs: ["height", "animate", "tabAlignment", "tabPosition", "keepTabContent", "closable", "scrollable", "closeIcon", "closeIconClass", "closeSVGIcon"], outputs: ["tabSelect", "tabClose", "tabScroll"], exportAs: ["kendoTabStrip"] }, { type: i17.TabStripTabComponent, selector: "kendo-tabstrip-tab", inputs: ["title", "disabled", "cssClass", "cssStyle", "selected", "closable", "closeIcon", "closeIconClass", "closeSVGIcon"], exportAs: ["kendoTabStripTab"] }, { type: FilterMenuContainerComponent, selector: "kendo-grid-filter-menu-container", inputs: ["column", "isLast", "isExpanded", "menuTabbingService", "filter", "actionsClass"], outputs: ["close"] }, { type: ColumnListComponent, selector: "kendo-grid-columnlist", inputs: ["columns", "autoSync", "ariaLabel", "allowHideAll", "applyText", "resetText", "actionsClass", "isLast", "isExpanded", "service"], outputs: ["reset", "apply", "columnChange"] }], directives: [{ type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: ColumnMenuItemDirective, selector: "[kendoGridColumnMenuItem]", inputs: ["kendoGridColumnMenuItem"] }, { type: i17.TabTitleDirective, selector: "[kendoTabTitle]" }, { type: i17.TabContentDirective, selector: "[kendoTabContent]" }] });
13196
13507
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnMenuComponent, decorators: [{
13197
13508
  type: Component,
13198
13509
  args: [{
@@ -13209,7 +13520,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
13209
13520
  (keydown.enter)="$event.stopImmediatePropagation()"
13210
13521
  href="#"
13211
13522
  [tabindex]="tabIndex"
13212
- [attr.title]="columnMenuTitle">
13523
+ [attr.title]="columnMenuTitle"
13524
+ [attr.aria-expanded]="isNavigable ? undefined: false"
13525
+ [attr.aria-haspopup]="isNavigable ? undefined : 'dialog'">
13213
13526
  <kendo-icon-wrapper
13214
13527
  name="more-vertical"
13215
13528
  [svgIcon]="moreVerticalIcon"></kendo-icon-wrapper>
@@ -13222,7 +13535,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
13222
13535
  </ng-template>
13223
13536
  <ng-template #defaultTemplate>
13224
13537
  <kendo-grid-columnmenu-container
13225
- (keydown.escape)="close()"
13538
+ (keydown.escape)="close(true)"
13226
13539
  (keydown.enter)="$event.stopImmediatePropagation()">
13227
13540
  <kendo-grid-columnmenu-sort #sortItem [kendoGridColumnMenuItem]="sortItem" *ngIf="hasSort" [service]="service">
13228
13541
  </kendo-grid-columnmenu-sort>
@@ -13274,7 +13587,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
13274
13587
  </kendo-grid-columnmenu-container>
13275
13588
  </ng-template>
13276
13589
  <ng-template #tabbedInterfaceTemplate>
13277
- <kendo-tabstrip #tabstrip (keydown.escape)="close()">
13590
+ <kendo-tabstrip #tabstrip (keydown.escape)="close(true)">
13278
13591
  <kendo-tabstrip-tab *ngIf="hasFilter">
13279
13592
  <ng-template kendoTabTitle>
13280
13593
  <kendo-icon-wrapper
@@ -13363,7 +13676,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
13363
13676
  </ng-template>
13364
13677
  `
13365
13678
  }]
13366
- }], ctorParameters: function () { return [{ type: NavigationService }, { type: SinglePopupService }, { type: ColumnMenuService }, { type: ContextService }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: ColumnInfoService }]; }, propDecorators: { standalone: [{
13679
+ }], ctorParameters: function () {
13680
+ return [{ type: NavigationService }, { type: SinglePopupService }, { type: ColumnMenuService }, { type: ContextService }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: ColumnInfoService }, { type: IdService, decorators: [{
13681
+ type: Optional
13682
+ }] }];
13683
+ }, propDecorators: { standalone: [{
13367
13684
  type: HostBinding,
13368
13685
  args: ['class.k-grid-column-menu-standalone']
13369
13686
  }, {
@@ -13533,7 +13850,7 @@ FilterCellOperatorsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12
13533
13850
  [size]="size"
13534
13851
  (click)="clearClick()"
13535
13852
  (keydown)="clearKeydown($event)"></button>
13536
- `, 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"] }] });
13853
+ `, 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"] }] });
13537
13854
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FilterCellOperatorsComponent, decorators: [{
13538
13855
  type: Component,
13539
13856
  args: [{
@@ -13938,7 +14255,7 @@ BooleanFilterCellComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0
13938
14255
  [value]="currentFilter?.value">
13939
14256
  </kendo-dropdownlist>
13940
14257
  </kendo-grid-filter-wrapper-cell>
13941
- `, 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"] }] });
14258
+ `, 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"] }] });
13942
14259
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: BooleanFilterCellComponent, decorators: [{
13943
14260
  type: Component,
13944
14261
  args: [{
@@ -14306,7 +14623,7 @@ class LogicalCellDirective {
14306
14623
  this.renderer.addClass(el, 'k-focus');
14307
14624
  }
14308
14625
  if (this.headerLabelText) {
14309
- el.setAttribute('aria-label', '');
14626
+ el.removeAttribute('aria-label');
14310
14627
  }
14311
14628
  }
14312
14629
  else {
@@ -15004,7 +15321,7 @@ const modifierKeys = ['alt', 'ctrl', 'shift', 'meta'];
15004
15321
  * @hidden
15005
15322
  */
15006
15323
  class HeaderComponent {
15007
- constructor(popupService, hint, cue, reorderService, idService, sortService, columnInfoService, cd, contextService) {
15324
+ constructor(popupService, hint, cue, reorderService, idService, sortService, columnInfoService, cd, contextService, navigationService) {
15008
15325
  this.popupService = popupService;
15009
15326
  this.hint = hint;
15010
15327
  this.cue = cue;
@@ -15014,6 +15331,7 @@ class HeaderComponent {
15014
15331
  this.columnInfoService = columnInfoService;
15015
15332
  this.cd = cd;
15016
15333
  this.contextService = contextService;
15334
+ this.navigationService = navigationService;
15017
15335
  this.columns = [];
15018
15336
  this.groups = [];
15019
15337
  this.sort = new Array();
@@ -15148,6 +15466,9 @@ class HeaderComponent {
15148
15466
  return 'descending';
15149
15467
  }
15150
15468
  }
15469
+ get isNavigable() {
15470
+ return this.navigationService.tableEnabled;
15471
+ }
15151
15472
  /**
15152
15473
  *
15153
15474
  * @param column
@@ -15258,7 +15579,7 @@ class HeaderComponent {
15258
15579
  }
15259
15580
  addStickyStyles(column) {
15260
15581
  const stickyStyles = this.columnInfoService.stickyColumnsStyles(column);
15261
- return Object.assign(Object.assign({}, column.style), stickyStyles);
15582
+ return Object.assign(Object.assign({}, column.headerStyle), stickyStyles);
15262
15583
  }
15263
15584
  toggleDirection(field, allowUnsort, initialDirection) {
15264
15585
  const descriptor = this.sortDescriptor(field);
@@ -15375,7 +15696,7 @@ class HeaderComponent {
15375
15696
  });
15376
15697
  }
15377
15698
  }
15378
- HeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: HeaderComponent, deps: [{ token: SinglePopupService }, { token: DragHintService }, { token: DropCueService }, { token: ColumnReorderService }, { token: IdService }, { token: SortService }, { token: ColumnInfoService }, { token: i0.ChangeDetectorRef }, { token: ContextService }], target: i0.ɵɵFactoryTarget.Component });
15699
+ HeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: HeaderComponent, deps: [{ token: SinglePopupService }, { token: DragHintService }, { token: DropCueService }, { token: ColumnReorderService }, { token: IdService }, { token: SortService }, { token: ColumnInfoService }, { token: i0.ChangeDetectorRef }, { token: ContextService }, { token: NavigationService }], target: i0.ɵɵFactoryTarget.Component });
15379
15700
  HeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: HeaderComponent, selector: "[kendoGridHeader]", inputs: { totalColumnLevels: "totalColumnLevels", columns: "columns", groups: "groups", detailTemplate: "detailTemplate", scrollable: "scrollable", filterable: "filterable", sort: "sort", filter: "filter", sortable: "sortable", groupable: "groupable", lockedColumnsCount: "lockedColumnsCount", resizable: "resizable", reorderable: "reorderable", columnMenu: "columnMenu", columnMenuTemplate: "columnMenuTemplate", totalColumnsCount: "totalColumnsCount", totalColumns: "totalColumns", tabIndex: "tabIndex", size: "size" }, host: { properties: { "class.k-grid-header": "this.headerClass", "class.k-table-thead": "this.hostClass" } }, viewQueries: [{ propertyName: "dropTargets", predicate: DropTargetDirective, descendants: true }, { propertyName: "filterMenus", predicate: FilterMenuComponent, descendants: true }, { propertyName: "columnMenus", predicate: ColumnMenuComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: `
15380
15701
  <ng-container>
15381
15702
  <tr *ngFor="let i of columnLevels; let levelIndex = index"
@@ -15427,7 +15748,9 @@ HeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", versio
15427
15748
  [ngStyle]="column.sticky ? addStickyStyles(column) : column.headerStyle"
15428
15749
  [attr.rowspan]="column.rowspan(totalColumnLevels)"
15429
15750
  [attr.colspan]="column.colspan"
15430
- [attr.aria-haspopup]="(showFilterMenu || showColumnMenu(column)) ? 'dialog' : undefined">
15751
+ [attr.aria-haspopup]="isNavigable && (showFilterMenu || showColumnMenu(column)) ? 'dialog' : undefined"
15752
+ [attr.aria-expanded]="isNavigable && (showFilterMenu || showColumnMenu(column)) ? false : undefined"
15753
+ [attr.aria-keyshortcuts]="isNavigable ? 'Alt + ArrowDown' : undefined">
15431
15754
 
15432
15755
  <ng-container *ngIf="!isSortable(getColumnComponent(column))">
15433
15756
  <span class="k-cell-inner">
@@ -15649,7 +15972,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
15649
15972
  [ngStyle]="column.sticky ? addStickyStyles(column) : column.headerStyle"
15650
15973
  [attr.rowspan]="column.rowspan(totalColumnLevels)"
15651
15974
  [attr.colspan]="column.colspan"
15652
- [attr.aria-haspopup]="(showFilterMenu || showColumnMenu(column)) ? 'dialog' : undefined">
15975
+ [attr.aria-haspopup]="isNavigable && (showFilterMenu || showColumnMenu(column)) ? 'dialog' : undefined"
15976
+ [attr.aria-expanded]="isNavigable && (showFilterMenu || showColumnMenu(column)) ? false : undefined"
15977
+ [attr.aria-keyshortcuts]="isNavigable ? 'Alt + ArrowDown' : undefined">
15653
15978
 
15654
15979
  <ng-container *ngIf="!isSortable(getColumnComponent(column))">
15655
15980
  <span class="k-cell-inner">
@@ -15817,7 +16142,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
15817
16142
  </ng-container>
15818
16143
  `
15819
16144
  }]
15820
- }], ctorParameters: function () { return [{ type: SinglePopupService }, { type: DragHintService }, { type: DropCueService }, { type: ColumnReorderService }, { type: IdService }, { type: SortService }, { type: ColumnInfoService }, { type: i0.ChangeDetectorRef }, { type: ContextService }]; }, propDecorators: { totalColumnLevels: [{
16145
+ }], ctorParameters: function () { return [{ type: SinglePopupService }, { type: DragHintService }, { type: DropCueService }, { type: ColumnReorderService }, { type: IdService }, { type: SortService }, { type: ColumnInfoService }, { type: i0.ChangeDetectorRef }, { type: ContextService }, { type: NavigationService }]; }, propDecorators: { totalColumnLevels: [{
15821
16146
  type: Input
15822
16147
  }], columns: [{
15823
16148
  type: Input
@@ -18789,7 +19114,7 @@ class FooterComponent {
18789
19114
  }
18790
19115
  addStickyStyles(column) {
18791
19116
  const stickyStyles = this.columnInfoService.stickyColumnsStyles(column);
18792
- return Object.assign(Object.assign({}, column.style), stickyStyles);
19117
+ return Object.assign(Object.assign({}, column.footerStyle), stickyStyles);
18793
19118
  }
18794
19119
  }
18795
19120
  FooterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FooterComponent, deps: [{ token: ColumnInfoService }], target: i0.ɵɵFactoryTarget.Component });
@@ -22907,7 +23232,16 @@ class ExpandGroupDirective {
22907
23232
  this.expandedGroupKeys.push(key);
22908
23233
  }
22909
23234
  else {
22910
- const index = this.expandedGroupKeys.indexOf(key);
23235
+ const index = this.expandedGroupKeys.findIndex(group => {
23236
+ var _a;
23237
+ if (this.expandGroupBy) {
23238
+ return group === key;
23239
+ }
23240
+ else if (((_a = key.parentGroupKeys) === null || _a === void 0 ? void 0 : _a.length) === 0) {
23241
+ return group.value === key.value;
23242
+ }
23243
+ return JSON.stringify(group) === JSON.stringify(key);
23244
+ });
22911
23245
  this.expandedGroupKeys.splice(index, 1);
22912
23246
  }
22913
23247
  this.expandedGroupKeysChange.emit(this.expandedGroupKeys.slice());
@@ -23025,7 +23359,7 @@ AutoCompleteFilterCellComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion:
23025
23359
  [value]="currentFilter?.value">
23026
23360
  </kendo-autocomplete>
23027
23361
  </kendo-grid-filter-wrapper-cell>
23028
- `, 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"] }] });
23362
+ `, 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"] }] });
23029
23363
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: AutoCompleteFilterCellComponent, decorators: [{
23030
23364
  type: Component,
23031
23365
  args: [{
@@ -24136,6 +24470,7 @@ class ColumnChooserComponent {
24136
24470
  * @hidden
24137
24471
  */
24138
24472
  toggle(anchor, template) {
24473
+ var _a;
24139
24474
  if (!this.popupRef) {
24140
24475
  const direction = this.ctx.localization.rtl ? 'right' : 'left';
24141
24476
  this.popupRef = this.popupService.open({
@@ -24145,13 +24480,30 @@ class ColumnChooserComponent {
24145
24480
  anchorAlign: { vertical: 'bottom', horizontal: direction },
24146
24481
  popupAlign: { vertical: 'top', horizontal: direction }
24147
24482
  });
24148
- this.renderer.setAttribute(this.popupRef.popupElement, 'dir', this.ctx.localization.rtl ? 'rtl' : 'ltr');
24483
+ const popupElement = (_a = this.popupRef) === null || _a === void 0 ? void 0 : _a.popupElement;
24484
+ if (popupElement) {
24485
+ const popupId = `k-${guid()}`;
24486
+ const popupAriaElement = popupElement.querySelector('.k-popup');
24487
+ this.ngZone.runOutsideAngular(() => {
24488
+ this.escapeListener = this.renderer.listen(popupAriaElement, 'keydown', (e) => {
24489
+ if (e.keyCode === Keys.Escape) {
24490
+ this.close(true);
24491
+ }
24492
+ });
24493
+ });
24494
+ this.renderer.setAttribute(popupElement, 'dir', this.ctx.localization.rtl ? 'rtl' : 'ltr');
24495
+ this.renderer.setAttribute(popupAriaElement, 'id', popupId);
24496
+ this.renderer.setAttribute(popupAriaElement, 'role', 'dialog');
24497
+ this.popupId = popupId;
24498
+ }
24149
24499
  if (!isDocumentAvailable()) {
24150
24500
  return;
24151
24501
  }
24152
24502
  this.ngZone.runOutsideAngular(() => this.closeClick = this.renderer.listen('document', 'click', ({ target }) => {
24153
24503
  if (!closest(target, node => node === this.popupRef.popupElement || node === anchor.element)) {
24154
- this.close();
24504
+ this.ngZone.run(() => {
24505
+ this.close();
24506
+ });
24155
24507
  }
24156
24508
  }));
24157
24509
  }
@@ -24163,7 +24515,7 @@ class ColumnChooserComponent {
24163
24515
  * @hidden
24164
24516
  */
24165
24517
  onApply(changed) {
24166
- this.close();
24518
+ this.close(true);
24167
24519
  if (changed.length) {
24168
24520
  this.changeDetector.markForCheck();
24169
24521
  this.columnInfoService.changeVisibility(changed);
@@ -24176,12 +24528,24 @@ class ColumnChooserComponent {
24176
24528
  this.changeDetector.markForCheck();
24177
24529
  this.columnInfoService.changeVisibility(changed);
24178
24530
  }
24179
- close() {
24531
+ /**
24532
+ * @hidden
24533
+ */
24534
+ onShiftTab(e) {
24535
+ if (e.target.matches('.k-column-list-item')) {
24536
+ e.preventDefault();
24537
+ this.columnList.resetButton.nativeElement.focus();
24538
+ }
24539
+ }
24540
+ close(focusAnchor = false) {
24180
24541
  if (this.popupRef) {
24181
24542
  this.popupRef.close();
24182
24543
  this.popupRef = null;
24544
+ this.changeDetector.markForCheck();
24545
+ this.escapeListener && this.escapeListener();
24183
24546
  }
24184
24547
  this.detachClose();
24548
+ focusAnchor && this.anchor.element.focus();
24185
24549
  }
24186
24550
  detachClose() {
24187
24551
  if (this.closeClick) {
@@ -24191,7 +24555,7 @@ class ColumnChooserComponent {
24191
24555
  }
24192
24556
  }
24193
24557
  ColumnChooserComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnChooserComponent, deps: [{ token: ContextService }, { token: ColumnInfoService }, { token: i1$2.PopupService }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
24194
- ColumnChooserComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: ColumnChooserComponent, selector: "kendo-grid-column-chooser", inputs: { autoSync: "autoSync", allowHideAll: "allowHideAll" }, ngImport: i0, template: `
24558
+ ColumnChooserComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: ColumnChooserComponent, selector: "kendo-grid-column-chooser", inputs: { autoSync: "autoSync", allowHideAll: "allowHideAll" }, viewQueries: [{ propertyName: "anchor", first: true, predicate: ["anchor"], descendants: true }, { propertyName: "columnList", first: true, predicate: ["columnList"], descendants: true }], ngImport: i0, template: `
24195
24559
  <button #anchor
24196
24560
  kendoButton
24197
24561
  type="button"
@@ -24199,20 +24563,27 @@ ColumnChooserComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
24199
24563
  fillMode="flat"
24200
24564
  [attr.title]="ctx.localization.get('columns')"
24201
24565
  icon="columns"
24202
- [svgIcon]="columnsIcon"></button>
24566
+ [svgIcon]="columnsIcon"
24567
+ [attr.aria-haspopup]="'dialog'"
24568
+ [attr.aria-expanded]="!!(popupRef)"
24569
+ [attr.aria-controls]="!!(popupRef) ? popupId : undefined"></button>
24203
24570
  <ng-template #template>
24204
24571
  <span class='k-column-chooser-title'>{{ ctx.localization.get('columns') }}</span>
24205
24572
  <kendo-grid-columnlist
24573
+ #columnList
24206
24574
  [columns]="columns"
24575
+ [ariaLabel]="ctx.localization.get('columns')"
24576
+ [isLast]="true"
24207
24577
  [applyText]="ctx.localization.get('columnsApply')"
24208
24578
  [resetText]="ctx.localization.get('columnsReset')"
24209
24579
  [autoSync]="autoSync"
24210
24580
  [allowHideAll]="allowHideAll"
24211
24581
  (apply)="onApply($event)"
24212
- (columnChange)="onChange($event)">
24582
+ (columnChange)="onChange($event)"
24583
+ (keydown.shift.tab)="onShiftTab($event)">
24213
24584
  </kendo-grid-columnlist>
24214
24585
  </ng-template>
24215
- `, isInline: true, components: [{ type: i4$1.ButtonComponent, selector: "button[kendoButton], span[kendoButton], kendo-button", inputs: ["toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { type: ColumnListComponent, selector: "kendo-grid-columnlist", inputs: ["columns", "autoSync", "allowHideAll", "applyText", "resetText", "actionsClass", "isLast", "isExpanded", "service"], outputs: ["reset", "apply", "columnChange"] }] });
24586
+ `, isInline: true, components: [{ type: i4$1.ButtonComponent, selector: "button[kendoButton], span[kendoButton], kendo-button", inputs: ["toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { type: ColumnListComponent, selector: "kendo-grid-columnlist", inputs: ["columns", "autoSync", "ariaLabel", "allowHideAll", "applyText", "resetText", "actionsClass", "isLast", "isExpanded", "service"], outputs: ["reset", "apply", "columnChange"] }] });
24216
24587
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnChooserComponent, decorators: [{
24217
24588
  type: Component,
24218
24589
  args: [{
@@ -24225,17 +24596,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
24225
24596
  fillMode="flat"
24226
24597
  [attr.title]="ctx.localization.get('columns')"
24227
24598
  icon="columns"
24228
- [svgIcon]="columnsIcon"></button>
24599
+ [svgIcon]="columnsIcon"
24600
+ [attr.aria-haspopup]="'dialog'"
24601
+ [attr.aria-expanded]="!!(popupRef)"
24602
+ [attr.aria-controls]="!!(popupRef) ? popupId : undefined"></button>
24229
24603
  <ng-template #template>
24230
24604
  <span class='k-column-chooser-title'>{{ ctx.localization.get('columns') }}</span>
24231
24605
  <kendo-grid-columnlist
24606
+ #columnList
24232
24607
  [columns]="columns"
24608
+ [ariaLabel]="ctx.localization.get('columns')"
24609
+ [isLast]="true"
24233
24610
  [applyText]="ctx.localization.get('columnsApply')"
24234
24611
  [resetText]="ctx.localization.get('columnsReset')"
24235
24612
  [autoSync]="autoSync"
24236
24613
  [allowHideAll]="allowHideAll"
24237
24614
  (apply)="onApply($event)"
24238
- (columnChange)="onChange($event)">
24615
+ (columnChange)="onChange($event)"
24616
+ (keydown.shift.tab)="onShiftTab($event)">
24239
24617
  </kendo-grid-columnlist>
24240
24618
  </ng-template>
24241
24619
  `
@@ -24244,9 +24622,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
24244
24622
  type: Input
24245
24623
  }], allowHideAll: [{
24246
24624
  type: Input
24625
+ }], anchor: [{
24626
+ type: ViewChild,
24627
+ args: ['anchor']
24628
+ }], columnList: [{
24629
+ type: ViewChild,
24630
+ args: ['columnList']
24247
24631
  }] } });
24248
24632
 
24249
24633
  const COMPONENTS = [
24634
+ ColumnMenuChooserItemCheckedDirective,
24250
24635
  ColumnListComponent,
24251
24636
  ColumnChooserComponent,
24252
24637
  ColumnMenuChooserComponent,
@@ -24289,7 +24674,8 @@ class ColumnMenuModule {
24289
24674
  }
24290
24675
  }
24291
24676
  ColumnMenuModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnMenuModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
24292
- ColumnMenuModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnMenuModule, declarations: [ColumnListComponent,
24677
+ ColumnMenuModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnMenuModule, declarations: [ColumnMenuChooserItemCheckedDirective,
24678
+ ColumnListComponent,
24293
24679
  ColumnChooserComponent,
24294
24680
  ColumnMenuChooserComponent,
24295
24681
  ColumnMenuFilterComponent,
@@ -24304,7 +24690,8 @@ ColumnMenuModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", versio
24304
24690
  ColumnMenuStickComponent,
24305
24691
  ColumnMenuPositionComponent,
24306
24692
  ColumnMenuAutoSizeColumnComponent,
24307
- ColumnMenuAutoSizeAllColumnsComponent], imports: [CommonModule, FilterMenuModule, ButtonModule, TabStripModule], exports: [ColumnListComponent,
24693
+ ColumnMenuAutoSizeAllColumnsComponent], imports: [CommonModule, FilterMenuModule, ButtonModule, TabStripModule], exports: [ColumnMenuChooserItemCheckedDirective,
24694
+ ColumnListComponent,
24308
24695
  ColumnChooserComponent,
24309
24696
  ColumnMenuChooserComponent,
24310
24697
  ColumnMenuFilterComponent,