@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
@@ -9,7 +9,7 @@ export const packageMetadata = {
9
9
  name: '@progress/kendo-angular-grid',
10
10
  productName: 'Kendo UI for Angular',
11
11
  productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],
12
- publishDate: 1692175201,
13
- version: '13.3.1-develop.1',
12
+ publishDate: 1692972014,
13
+ version: '13.4.0-develop.10',
14
14
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'
15
15
  };
@@ -2,7 +2,7 @@
2
2
  * Copyright © 2023 Progress Software Corporation. All rights reserved.
3
3
  * Licensed under commercial license. See LICENSE.md in the project root for more information
4
4
  *-------------------------------------------------------------------------------------------*/
5
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, HostBinding, Input } from '@angular/core';
5
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, Input, ViewChild } from '@angular/core';
6
6
  import { ContextService } from '../common/provider.service';
7
7
  import { PagerContextService } from './pager-context.service';
8
8
  import { PagerElementComponent } from './pager-element.component';
@@ -19,7 +19,6 @@ export class PagerNumericButtonsComponent extends PagerElementComponent {
19
19
  constructor(ctx, cd, pagerContext) {
20
20
  super(ctx, pagerContext, cd);
21
21
  this.pagerContext = pagerContext;
22
- this.numbersWrapClass = true;
23
22
  }
24
23
  /**
25
24
  * @hidden
@@ -89,10 +88,12 @@ export class PagerNumericButtonsComponent extends PagerElementComponent {
89
88
  }
90
89
  }
91
90
  PagerNumericButtonsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerNumericButtonsComponent, deps: [{ token: i1.ContextService }, { token: i0.ChangeDetectorRef }, { token: i2.PagerContextService }], target: i0.ɵɵFactoryTarget.Component });
92
- 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: `
91
+ 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: `
93
92
  <select
93
+ #select
94
94
  class="k-dropdown-list k-dropdown k-picker k-picker-solid k-rounded-md"
95
95
  kendoGridFocusable
96
+ [style.display]="'none'"
96
97
  [attr.title]="textFor('selectPage')"
97
98
  [attr.aria-label]="textFor('selectPage')"
98
99
  [ngClass]="{
@@ -119,7 +120,7 @@ PagerNumericButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12
119
120
  [attr.aria-label]="pageLabel(end + 1)">...
120
121
  </option>
121
122
  </select>
122
- <div class="k-pager-numbers">
123
+ <div class="k-pager-numbers" #numbers>
123
124
  <button *ngIf="start > 1"
124
125
  type="button"
125
126
  kendoGridFocusable
@@ -169,8 +170,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
169
170
  selector: 'kendo-pager-numeric-buttons',
170
171
  template: `
171
172
  <select
173
+ #select
172
174
  class="k-dropdown-list k-dropdown k-picker k-picker-solid k-rounded-md"
173
175
  kendoGridFocusable
176
+ [style.display]="'none'"
174
177
  [attr.title]="textFor('selectPage')"
175
178
  [attr.aria-label]="textFor('selectPage')"
176
179
  [ngClass]="{
@@ -197,7 +200,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
197
200
  [attr.aria-label]="pageLabel(end + 1)">...
198
201
  </option>
199
202
  </select>
200
- <div class="k-pager-numbers">
203
+ <div class="k-pager-numbers" #numbers>
201
204
  <button *ngIf="start > 1"
202
205
  type="button"
203
206
  kendoGridFocusable
@@ -241,9 +244,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
241
244
  </div>
242
245
  `
243
246
  }]
244
- }], ctorParameters: function () { return [{ type: i1.ContextService }, { type: i0.ChangeDetectorRef }, { type: i2.PagerContextService }]; }, propDecorators: { numbersWrapClass: [{
245
- type: HostBinding,
246
- args: ['class.k-pager-numbers-wrap']
247
+ }], ctorParameters: function () { return [{ type: i1.ContextService }, { type: i0.ChangeDetectorRef }, { type: i2.PagerContextService }]; }, propDecorators: { selectElement: [{
248
+ type: ViewChild,
249
+ args: ['select', { read: ElementRef }]
250
+ }], numbersElement: [{
251
+ type: ViewChild,
252
+ args: ['numbers', { read: ElementRef }]
247
253
  }], buttonCount: [{
248
254
  type: Input
249
255
  }] } });
@@ -109,7 +109,7 @@ PagerPageSizesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0"
109
109
  [value]="pageSize"
110
110
  (valueChange)="pageSizeChange($event)"></kendo-dropdownlist>
111
111
  <kendo-label [for]="dropdownlist" [text]="textFor('pagerItemsPerPage')"></kendo-label>
112
- `, isInline: true, components: [{ type: i4.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: i6.PagerDropDownListDirective, selector: "[kendoGridPagerDropDown]" }, { type: i7.FocusableDirective, selector: "[kendoGridFocusable],\n [kendoGridEditCommand],\n [kendoGridRemoveCommand],\n [kendoGridSaveCommand],\n [kendoGridCancelCommand],\n [kendoGridSelectionCheckbox]\n ", inputs: ["kendoGridFocusable"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
112
+ `, isInline: true, components: [{ type: i4.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: i6.PagerDropDownListDirective, selector: "[kendoGridPagerDropDown]" }, { type: i7.FocusableDirective, selector: "[kendoGridFocusable],\n [kendoGridEditCommand],\n [kendoGridRemoveCommand],\n [kendoGridSaveCommand],\n [kendoGridCancelCommand],\n [kendoGridSelectionCheckbox]\n ", inputs: ["kendoGridFocusable"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
113
113
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerPageSizesComponent, decorators: [{
114
114
  type: Component,
115
115
  args: [{
@@ -2,7 +2,7 @@
2
2
  * Copyright © 2023 Progress Software Corporation. All rights reserved.
3
3
  * Licensed under commercial license. See LICENSE.md in the project root for more information
4
4
  *-------------------------------------------------------------------------------------------*/
5
- import { Component, Input, EventEmitter, Output, HostBinding, ElementRef, Renderer2, HostListener, NgZone, Optional, Inject } from '@angular/core';
5
+ import { Component, Input, EventEmitter, Output, HostBinding, ElementRef, Renderer2, HostListener, NgZone, Optional, Inject, ViewChild } from '@angular/core';
6
6
  import { normalize } from './pager-settings';
7
7
  import { PagerTemplateDirective } from './pager-template.directive';
8
8
  import { anyChanged, replaceMessagePlaceholder } from '../utils';
@@ -16,6 +16,9 @@ import { FocusGroup } from '../navigation/focus-group';
16
16
  import { FocusRoot, FOCUS_ROOT_ACTIVE } from '../navigation/focus-root';
17
17
  import { findFocusableChild, findLastFocusableChild } from '../rendering/common/dom-queries';
18
18
  import { ContextService } from '../common/provider.service';
19
+ import { PagerInfoComponent } from './pager-info.component';
20
+ import { PagerPageSizesComponent } from './pager-page-sizes.component';
21
+ import { PagerNumericButtonsComponent } from './pager-numeric-buttons.component';
19
22
  import * as i0 from "@angular/core";
20
23
  import * as i1 from "./pager-context.service";
21
24
  import * as i2 from "../navigation/navigation.service";
@@ -59,18 +62,33 @@ export class PagerComponent {
59
62
  if (this.template || !element) {
60
63
  return;
61
64
  }
62
- const width = element.offsetWidth;
63
- if (width < RESPONSIVE_BREAKPOINT_MEDIUM) {
64
- this.renderer.removeClass(element, 'k-pager-mobile-md');
65
- this.renderer.addClass(element, 'k-pager-mobile-sm');
66
- }
67
- else if (width >= RESPONSIVE_BREAKPOINT_MEDIUM && width < RESPONSIVE_BREAKPOINT_LARGE) {
68
- this.renderer.addClass(element, 'k-pager-mobile-md');
69
- this.renderer.removeClass(element, 'k-pager-mobile-sm');
70
- }
71
- else {
72
- this.clearResponsiveClasses();
73
- }
65
+ this.zone.runOutsideAngular(() => {
66
+ setTimeout(() => {
67
+ const width = element.offsetWidth;
68
+ if (this.numericButtons) {
69
+ const selectElement = this.numericButtons.selectElement.nativeElement;
70
+ const numbersElement = this.numericButtons.numbersElement.nativeElement;
71
+ this.renderer.removeStyle(numbersElement, 'display');
72
+ this.renderer.setStyle(selectElement, 'display', 'none');
73
+ if (width < RESPONSIVE_BREAKPOINT_MEDIUM) {
74
+ this.renderer.removeStyle(selectElement, 'display');
75
+ this.renderer.setStyle(numbersElement, 'display', 'none');
76
+ }
77
+ }
78
+ if (this.pagerInfo) {
79
+ this.renderer.removeStyle(this.pagerInfo.nativeElement, 'display');
80
+ if (width < RESPONSIVE_BREAKPOINT_LARGE) {
81
+ this.renderer.setStyle(this.pagerInfo.nativeElement, 'display', 'none');
82
+ }
83
+ }
84
+ if (this.pagerPageSizes) {
85
+ this.renderer.removeStyle(this.pagerPageSizes.nativeElement, 'display');
86
+ if (width < RESPONSIVE_BREAKPOINT_MEDIUM) {
87
+ this.renderer.setStyle(this.pagerPageSizes.nativeElement, 'display', 'none');
88
+ }
89
+ }
90
+ });
91
+ });
74
92
  };
75
93
  }
76
94
  set options(value) {
@@ -189,12 +207,10 @@ export class PagerComponent {
189
207
  }
190
208
  const changesInTemplate = changes['template'];
191
209
  if (changesInTemplate) {
192
- // eslint-disable-next-line no-unused-expressions
193
- changesInTemplate.currentValue ? this.clearResponsiveClasses() : this.resizeHandler();
210
+ changesInTemplate.currentValue ? this.clearResponsiveStyling() : this.resizeHandler();
194
211
  }
195
212
  if (changes['options']) {
196
- // eslint-disable-next-line no-unused-expressions
197
- this.settings.responsive ? this.resizeHandler() : this.clearResponsiveClasses();
213
+ this.settings.responsive ? this.resizeHandler() : this.clearResponsiveStyling();
198
214
  }
199
215
  }
200
216
  ngOnDestroy() {
@@ -220,11 +236,6 @@ export class PagerComponent {
220
236
  }
221
237
  });
222
238
  }
223
- clearResponsiveClasses() {
224
- const element = this.element.nativeElement;
225
- this.renderer.removeClass(element, 'k-pager-mobile-sm');
226
- this.renderer.removeClass(element, 'k-pager-mobile-md');
227
- }
228
239
  shouldTriggerPageChange(target, condition) {
229
240
  return this.navigationService.pagerEnabled &&
230
241
  target === this.element.nativeElement &&
@@ -247,6 +258,18 @@ export class PagerComponent {
247
258
  this.cellContext.focusGroup = this.focusGroup;
248
259
  }
249
260
  }
261
+ clearResponsiveStyling() {
262
+ this.zone.runOutsideAngular(() => {
263
+ setTimeout(() => {
264
+ if (this.numericButtons) {
265
+ this.renderer.removeStyle(this.numericButtons.numbersElement.nativeElement, 'display');
266
+ this.renderer.setStyle(this.numericButtons.selectElement.nativeElement, 'display', 'none');
267
+ }
268
+ this.pagerInfo && this.renderer.removeStyle(this.pagerInfo.nativeElement, 'display');
269
+ this.pagerPageSizes && this.renderer.removeStyle(this.pagerPageSizes.nativeElement, 'display');
270
+ });
271
+ });
272
+ }
250
273
  }
251
274
  PagerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerComponent, deps: [{ token: i1.PagerContextService }, { token: i2.NavigationService }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.NgZone }, { token: i3.ContextService }, { token: CELL_CONTEXT, optional: true }, { token: i4.FocusRoot }, { token: i5.FocusGroup }], target: i0.ɵɵFactoryTarget.Component });
252
275
  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: [{
@@ -260,7 +283,7 @@ PagerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version
260
283
  provide: FocusGroup,
261
284
  deps: [FocusRoot],
262
285
  useClass: FocusGroup
263
- }], usesOnChanges: true, ngImport: i0, template: `
286
+ }], 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: `
264
287
  <div
265
288
  *ngIf="navigationService.pagerEnabled"
266
289
  class="k-sr-only"
@@ -274,20 +297,21 @@ PagerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version
274
297
  [ngTemplateOutletContext]="templateContext">
275
298
  </ng-container>
276
299
  <ng-container *ngIf="!template?.templateRef">
277
- <kendo-pager-prev-buttons [size]="size" *ngIf="settings.previousNext"></kendo-pager-prev-buttons>
278
- <kendo-pager-numeric-buttons
279
- [size]="size"
280
- *ngIf="settings.type === 'numeric'"
281
- [buttonCount]="settings.buttonCount">
282
- </kendo-pager-numeric-buttons>
283
- <kendo-pager-input [size]="size" *ngIf="settings.type === 'input'"></kendo-pager-input>
284
- <kendo-pager-next-buttons [size]="size" *ngIf="settings.previousNext"></kendo-pager-next-buttons>
300
+ <div class="k-pager-numbers-wrap">
301
+ <kendo-pager-prev-buttons [size]="size" *ngIf="settings.previousNext"></kendo-pager-prev-buttons>
302
+ <kendo-pager-numeric-buttons
303
+ [size]="size"
304
+ *ngIf="settings.type === 'numeric'"
305
+ [buttonCount]="settings.buttonCount">
306
+ </kendo-pager-numeric-buttons>
307
+ <kendo-pager-input [size]="size" *ngIf="settings.type === 'input'"></kendo-pager-input>
308
+ <kendo-pager-next-buttons [size]="size" *ngIf="settings.previousNext"></kendo-pager-next-buttons>
309
+ </div>
285
310
  <kendo-pager-info *ngIf='settings.info'></kendo-pager-info>
286
311
  <kendo-pager-page-sizes
287
312
  [size]="size"
288
313
  *ngIf="settings.pageSizes"
289
314
  [pageSizes]="$any(settings.pageSizes)"
290
- #pageSizes
291
315
  ></kendo-pager-page-sizes>
292
316
  </ng-container>
293
317
  <div
@@ -329,20 +353,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
329
353
  [ngTemplateOutletContext]="templateContext">
330
354
  </ng-container>
331
355
  <ng-container *ngIf="!template?.templateRef">
332
- <kendo-pager-prev-buttons [size]="size" *ngIf="settings.previousNext"></kendo-pager-prev-buttons>
333
- <kendo-pager-numeric-buttons
334
- [size]="size"
335
- *ngIf="settings.type === 'numeric'"
336
- [buttonCount]="settings.buttonCount">
337
- </kendo-pager-numeric-buttons>
338
- <kendo-pager-input [size]="size" *ngIf="settings.type === 'input'"></kendo-pager-input>
339
- <kendo-pager-next-buttons [size]="size" *ngIf="settings.previousNext"></kendo-pager-next-buttons>
356
+ <div class="k-pager-numbers-wrap">
357
+ <kendo-pager-prev-buttons [size]="size" *ngIf="settings.previousNext"></kendo-pager-prev-buttons>
358
+ <kendo-pager-numeric-buttons
359
+ [size]="size"
360
+ *ngIf="settings.type === 'numeric'"
361
+ [buttonCount]="settings.buttonCount">
362
+ </kendo-pager-numeric-buttons>
363
+ <kendo-pager-input [size]="size" *ngIf="settings.type === 'input'"></kendo-pager-input>
364
+ <kendo-pager-next-buttons [size]="size" *ngIf="settings.previousNext"></kendo-pager-next-buttons>
365
+ </div>
340
366
  <kendo-pager-info *ngIf='settings.info'></kendo-pager-info>
341
367
  <kendo-pager-page-sizes
342
368
  [size]="size"
343
369
  *ngIf="settings.pageSizes"
344
370
  [pageSizes]="$any(settings.pageSizes)"
345
- #pageSizes
346
371
  ></kendo-pager-page-sizes>
347
372
  </ng-container>
348
373
  <div
@@ -360,7 +385,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
360
385
  }, {
361
386
  type: Inject,
362
387
  args: [CELL_CONTEXT]
363
- }] }, { type: i4.FocusRoot }, { type: i5.FocusGroup }]; }, propDecorators: { total: [{
388
+ }] }, { type: i4.FocusRoot }, { type: i5.FocusGroup }]; }, propDecorators: { pagerInfo: [{
389
+ type: ViewChild,
390
+ args: [PagerInfoComponent, { read: ElementRef }]
391
+ }], pagerPageSizes: [{
392
+ type: ViewChild,
393
+ args: [PagerPageSizesComponent, { read: ElementRef }]
394
+ }], numericButtons: [{
395
+ type: ViewChild,
396
+ args: [PagerNumericButtonsComponent]
397
+ }], total: [{
364
398
  type: Input
365
399
  }], skip: [{
366
400
  type: Input
@@ -42,7 +42,7 @@ export class FooterComponent {
42
42
  }
43
43
  addStickyStyles(column) {
44
44
  const stickyStyles = this.columnInfoService.stickyColumnsStyles(column);
45
- return { ...column.style, ...stickyStyles };
45
+ return { ...column.footerStyle, ...stickyStyles };
46
46
  }
47
47
  }
48
48
  FooterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FooterComponent, deps: [{ token: i1.ColumnInfoService }], target: i0.ɵɵFactoryTarget.Component });
@@ -101,7 +101,15 @@ export class ExpandGroupDirective {
101
101
  this.expandedGroupKeys.push(key);
102
102
  }
103
103
  else {
104
- const index = this.expandedGroupKeys.indexOf(key);
104
+ const index = this.expandedGroupKeys.findIndex(group => {
105
+ if (this.expandGroupBy) {
106
+ return group === key;
107
+ }
108
+ else if (key.parentGroupKeys?.length === 0) {
109
+ return group.value === key.value;
110
+ }
111
+ return JSON.stringify(group) === JSON.stringify(key);
112
+ });
105
113
  this.expandedGroupKeys.splice(index, 1);
106
114
  }
107
115
  this.expandedGroupKeysChange.emit(this.expandedGroupKeys.slice());
@@ -31,6 +31,7 @@ import { sortAscSmallIcon, sortDescSmallIcon } from '@progress/kendo-svg-icons';
31
31
  import { ContextService } from '../../common/provider.service';
32
32
  import { ColumnReorderEvent } from '../../dragdrop/column-reorder-event';
33
33
  import { ColumnsContainer } from '../../columns/columns-container';
34
+ import { NavigationService } from '../../navigation/navigation.service';
34
35
  import * as i0 from "@angular/core";
35
36
  import * as i1 from "../../common/single-popup.service";
36
37
  import * as i2 from "../../dragdrop/drag-hint.service";
@@ -40,20 +41,21 @@ import * as i5 from "../../common/id.service";
40
41
  import * as i6 from "../../common/sort.service";
41
42
  import * as i7 from "./../../common/column-info.service";
42
43
  import * as i8 from "../../common/provider.service";
43
- import * as i9 from "../../filtering/menu/filter-menu.component";
44
- import * as i10 from "../../column-menu/column-menu.component";
45
- import * as i11 from "@progress/kendo-angular-icons";
46
- import * as i12 from "../../filtering/filter-row.component";
47
- import * as i13 from "@angular/common";
48
- import * as i14 from "../../navigation/logical-row.directive";
49
- import * as i15 from "../../navigation/logical-cell.directive";
50
- import * as i16 from "../../dragdrop/drop-target.directive";
51
- import * as i17 from "@progress/kendo-angular-common";
52
- import * as i18 from "../../dragdrop/draggable-column.directive";
53
- import * as i19 from "../common/template-context.directive";
54
- import * as i20 from "../../selection/selectall-checkbox.directive";
55
- import * as i21 from "../../navigation/focusable.directive";
56
- import * as i22 from "../../column-resizing/column-handle.directive";
44
+ import * as i9 from "../../navigation/navigation.service";
45
+ import * as i10 from "../../filtering/menu/filter-menu.component";
46
+ import * as i11 from "../../column-menu/column-menu.component";
47
+ import * as i12 from "@progress/kendo-angular-icons";
48
+ import * as i13 from "../../filtering/filter-row.component";
49
+ import * as i14 from "@angular/common";
50
+ import * as i15 from "../../navigation/logical-row.directive";
51
+ import * as i16 from "../../navigation/logical-cell.directive";
52
+ import * as i17 from "../../dragdrop/drop-target.directive";
53
+ import * as i18 from "@progress/kendo-angular-common";
54
+ import * as i19 from "../../dragdrop/draggable-column.directive";
55
+ import * as i20 from "../common/template-context.directive";
56
+ import * as i21 from "../../selection/selectall-checkbox.directive";
57
+ import * as i22 from "../../navigation/focusable.directive";
58
+ import * as i23 from "../../column-resizing/column-handle.directive";
57
59
  const mergeObjects = (...args) => Object.assign.apply(null, [{}].concat(args));
58
60
  const directions = initialDirection => initialDirection === "asc" ? ["asc", "desc"] : ["desc", "asc"];
59
61
  /**
@@ -79,7 +81,7 @@ const modifierKeys = ['alt', 'ctrl', 'shift', 'meta'];
79
81
  * @hidden
80
82
  */
81
83
  export class HeaderComponent {
82
- constructor(popupService, hint, cue, reorderService, idService, sortService, columnInfoService, cd, contextService) {
84
+ constructor(popupService, hint, cue, reorderService, idService, sortService, columnInfoService, cd, contextService, navigationService) {
83
85
  this.popupService = popupService;
84
86
  this.hint = hint;
85
87
  this.cue = cue;
@@ -89,6 +91,7 @@ export class HeaderComponent {
89
91
  this.columnInfoService = columnInfoService;
90
92
  this.cd = cd;
91
93
  this.contextService = contextService;
94
+ this.navigationService = navigationService;
92
95
  this.columns = [];
93
96
  this.groups = [];
94
97
  this.sort = new Array();
@@ -223,6 +226,9 @@ export class HeaderComponent {
223
226
  return 'descending';
224
227
  }
225
228
  }
229
+ get isNavigable() {
230
+ return this.navigationService.tableEnabled;
231
+ }
226
232
  /**
227
233
  *
228
234
  * @param column
@@ -333,7 +339,7 @@ export class HeaderComponent {
333
339
  }
334
340
  addStickyStyles(column) {
335
341
  const stickyStyles = this.columnInfoService.stickyColumnsStyles(column);
336
- return { ...column.style, ...stickyStyles };
342
+ return { ...column.headerStyle, ...stickyStyles };
337
343
  }
338
344
  toggleDirection(field, allowUnsort, initialDirection) {
339
345
  const descriptor = this.sortDescriptor(field);
@@ -450,7 +456,7 @@ export class HeaderComponent {
450
456
  });
451
457
  }
452
458
  }
453
- HeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: HeaderComponent, deps: [{ token: i1.SinglePopupService }, { token: i2.DragHintService }, { token: i3.DropCueService }, { token: i4.ColumnReorderService }, { token: i5.IdService }, { token: i6.SortService }, { token: i7.ColumnInfoService }, { token: i0.ChangeDetectorRef }, { token: i8.ContextService }], target: i0.ɵɵFactoryTarget.Component });
459
+ HeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: HeaderComponent, deps: [{ token: i1.SinglePopupService }, { token: i2.DragHintService }, { token: i3.DropCueService }, { token: i4.ColumnReorderService }, { token: i5.IdService }, { token: i6.SortService }, { token: i7.ColumnInfoService }, { token: i0.ChangeDetectorRef }, { token: i8.ContextService }, { token: i9.NavigationService }], target: i0.ɵɵFactoryTarget.Component });
454
460
  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: `
455
461
  <ng-container>
456
462
  <tr *ngFor="let i of columnLevels; let levelIndex = index"
@@ -502,7 +508,9 @@ HeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", versio
502
508
  [ngStyle]="column.sticky ? addStickyStyles(column) : column.headerStyle"
503
509
  [attr.rowspan]="column.rowspan(totalColumnLevels)"
504
510
  [attr.colspan]="column.colspan"
505
- [attr.aria-haspopup]="(showFilterMenu || showColumnMenu(column)) ? 'dialog' : undefined">
511
+ [attr.aria-haspopup]="isNavigable && (showFilterMenu || showColumnMenu(column)) ? 'dialog' : undefined"
512
+ [attr.aria-expanded]="isNavigable && (showFilterMenu || showColumnMenu(column)) ? false : undefined"
513
+ [attr.aria-keyshortcuts]="isNavigable ? 'Alt + ArrowDown' : undefined">
506
514
 
507
515
  <ng-container *ngIf="!isSortable(getColumnComponent(column))">
508
516
  <span class="k-cell-inner">
@@ -668,7 +676,7 @@ HeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", versio
668
676
  [totalColumns]="totalColumns"
669
677
  ></tr>
670
678
  </ng-container>
671
- `, isInline: true, components: [{ type: i9.FilterMenuComponent, selector: "kendo-grid-filter-menu", inputs: ["column", "filter", "tabIndex"] }, { type: i10.ColumnMenuComponent, selector: "kendo-grid-column-menu", inputs: ["standalone", "column", "settings", "sort", "filter", "sortable", "columnMenuTemplate", "tabIndex"] }, { type: i11.IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }, { type: i12.FilterRowComponent, selector: "[kendoGridFilterRow]", inputs: ["columns", "filter", "groups", "detailTemplate", "logicalRowIndex", "lockedColumnsCount"] }], directives: [{ type: i13.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i14.LogicalRowDirective, selector: "[kendoGridLogicalRow]", inputs: ["logicalRowIndex", "logicalSlaveRow", "logicalCellsCount", "logicalSlaveCellsCount", "dataRowIndex", "dataItem", "totalColumns"] }, { type: i13.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i15.LogicalCellDirective, selector: "[kendoGridLogicalCell]", inputs: ["logicalColIndex", "logicalRowIndex", "logicalSlaveCell", "colIndex", "colSpan", "rowSpan", "groupItem", "dataRowIndex", "dataItem", "detailExpandCell", "headerLabelText"] }, { type: i16.DropTargetDirective, selector: "[kendoDropTarget]", inputs: ["context"], outputs: ["enter", "leave", "drop"] }, { type: i17.DraggableDirective, selector: "[kendoDraggable]", inputs: ["enableDrag"], outputs: ["kendoPress", "kendoDrag", "kendoRelease"] }, { type: i18.DraggableColumnDirective, selector: "[kendoDraggableColumn]", inputs: ["context", "enableDrag"], outputs: ["drag"] }, { type: i13.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i13.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i19.TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }, { type: i20.SelectAllCheckboxDirective, selector: "[kendoGridSelectAllCheckbox]", inputs: ["state"], outputs: ["selectAllChange"] }, { type: i21.FocusableDirective, selector: "[kendoGridFocusable],\n [kendoGridEditCommand],\n [kendoGridRemoveCommand],\n [kendoGridSaveCommand],\n [kendoGridCancelCommand],\n [kendoGridSelectionCheckbox]\n ", inputs: ["kendoGridFocusable"] }, { type: i22.ColumnHandleDirective, selector: "[kendoGridColumnHandle]", inputs: ["columns", "column"] }] });
679
+ `, isInline: true, components: [{ type: i10.FilterMenuComponent, selector: "kendo-grid-filter-menu", inputs: ["column", "filter", "tabIndex"] }, { type: i11.ColumnMenuComponent, selector: "kendo-grid-column-menu", inputs: ["standalone", "column", "settings", "sort", "filter", "sortable", "columnMenuTemplate", "tabIndex"] }, { type: i12.IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }, { type: i13.FilterRowComponent, selector: "[kendoGridFilterRow]", inputs: ["columns", "filter", "groups", "detailTemplate", "logicalRowIndex", "lockedColumnsCount"] }], directives: [{ type: i14.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i15.LogicalRowDirective, selector: "[kendoGridLogicalRow]", inputs: ["logicalRowIndex", "logicalSlaveRow", "logicalCellsCount", "logicalSlaveCellsCount", "dataRowIndex", "dataItem", "totalColumns"] }, { type: i14.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i16.LogicalCellDirective, selector: "[kendoGridLogicalCell]", inputs: ["logicalColIndex", "logicalRowIndex", "logicalSlaveCell", "colIndex", "colSpan", "rowSpan", "groupItem", "dataRowIndex", "dataItem", "detailExpandCell", "headerLabelText"] }, { type: i17.DropTargetDirective, selector: "[kendoDropTarget]", inputs: ["context"], outputs: ["enter", "leave", "drop"] }, { type: i18.DraggableDirective, selector: "[kendoDraggable]", inputs: ["enableDrag"], outputs: ["kendoPress", "kendoDrag", "kendoRelease"] }, { type: i19.DraggableColumnDirective, selector: "[kendoDraggableColumn]", inputs: ["context", "enableDrag"], outputs: ["drag"] }, { type: i14.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i14.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i20.TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }, { type: i21.SelectAllCheckboxDirective, selector: "[kendoGridSelectAllCheckbox]", inputs: ["state"], outputs: ["selectAllChange"] }, { type: i22.FocusableDirective, selector: "[kendoGridFocusable],\n [kendoGridEditCommand],\n [kendoGridRemoveCommand],\n [kendoGridSaveCommand],\n [kendoGridCancelCommand],\n [kendoGridSelectionCheckbox]\n ", inputs: ["kendoGridFocusable"] }, { type: i23.ColumnHandleDirective, selector: "[kendoGridColumnHandle]", inputs: ["columns", "column"] }] });
672
680
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: HeaderComponent, decorators: [{
673
681
  type: Component,
674
682
  args: [{
@@ -724,7 +732,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
724
732
  [ngStyle]="column.sticky ? addStickyStyles(column) : column.headerStyle"
725
733
  [attr.rowspan]="column.rowspan(totalColumnLevels)"
726
734
  [attr.colspan]="column.colspan"
727
- [attr.aria-haspopup]="(showFilterMenu || showColumnMenu(column)) ? 'dialog' : undefined">
735
+ [attr.aria-haspopup]="isNavigable && (showFilterMenu || showColumnMenu(column)) ? 'dialog' : undefined"
736
+ [attr.aria-expanded]="isNavigable && (showFilterMenu || showColumnMenu(column)) ? false : undefined"
737
+ [attr.aria-keyshortcuts]="isNavigable ? 'Alt + ArrowDown' : undefined">
728
738
 
729
739
  <ng-container *ngIf="!isSortable(getColumnComponent(column))">
730
740
  <span class="k-cell-inner">
@@ -892,7 +902,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
892
902
  </ng-container>
893
903
  `
894
904
  }]
895
- }], ctorParameters: function () { return [{ type: i1.SinglePopupService }, { type: i2.DragHintService }, { type: i3.DropCueService }, { type: i4.ColumnReorderService }, { type: i5.IdService }, { type: i6.SortService }, { type: i7.ColumnInfoService }, { type: i0.ChangeDetectorRef }, { type: i8.ContextService }]; }, propDecorators: { totalColumnLevels: [{
905
+ }], ctorParameters: function () { return [{ type: i1.SinglePopupService }, { type: i2.DragHintService }, { type: i3.DropCueService }, { type: i4.ColumnReorderService }, { type: i5.IdService }, { type: i6.SortService }, { type: i7.ColumnInfoService }, { type: i0.ChangeDetectorRef }, { type: i8.ContextService }, { type: i9.NavigationService }]; }, propDecorators: { totalColumnLevels: [{
896
906
  type: Input
897
907
  }], columns: [{
898
908
  type: Input