@progress/kendo-angular-grid 11.4.0-develop.1 → 11.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 (47) hide show
  1. package/common/provider.service.d.ts +6 -0
  2. package/esm2020/column-menu/column-list.component.mjs +1 -1
  3. package/esm2020/column-menu/column-menu-chooser.component.mjs +1 -1
  4. package/esm2020/column-menu/column-menu-filter.component.mjs +1 -1
  5. package/esm2020/column-menu/column-menu-position.component.mjs +1 -1
  6. package/esm2020/common/provider.service.mjs +9 -3
  7. package/esm2020/filtering/cell/date-filter-cell.component.mjs +1 -1
  8. package/esm2020/filtering/cell/filter-cell.component.mjs +7 -3
  9. package/esm2020/filtering/menu/date-filter-menu-input.component.mjs +1 -1
  10. package/esm2020/filtering/menu/filter-menu-container.component.mjs +1 -1
  11. package/esm2020/filtering/shared-filtering.module.mjs +1 -1
  12. package/esm2020/grid.component.mjs +54 -4
  13. package/esm2020/grid.module.mjs +8 -3
  14. package/esm2020/grouping/group-panel.component.mjs +16 -4
  15. package/esm2020/index.mjs +2 -0
  16. package/esm2020/localization/messages.mjs +7 -1
  17. package/esm2020/navigation/navigation.service.mjs +5 -0
  18. package/esm2020/package-metadata.mjs +2 -2
  19. package/esm2020/rendering/cell.component.mjs +1 -1
  20. package/esm2020/rendering/footer/footer.component.mjs +7 -3
  21. package/esm2020/rendering/header/header.component.mjs +72 -22
  22. package/esm2020/rendering/list.component.mjs +8 -12
  23. package/esm2020/rendering/table-body.component.mjs +4 -2
  24. package/esm2020/rendering/toolbar/toolbar-focusable.directive.mjs +63 -0
  25. package/esm2020/rendering/toolbar/toolbar-navigation.service.mjs +53 -0
  26. package/esm2020/rendering/toolbar/toolbar-position.mjs +5 -0
  27. package/esm2020/rendering/toolbar/toolbar-template.directive.mjs +1 -1
  28. package/esm2020/rendering/toolbar/toolbar.component.mjs +74 -9
  29. package/fesm2015/progress-kendo-angular-grid.mjs +366 -63
  30. package/fesm2020/progress-kendo-angular-grid.mjs +363 -63
  31. package/filtering/cell/filter-cell.component.d.ts +1 -0
  32. package/grid.component.d.ts +5 -0
  33. package/grid.module.d.ts +97 -96
  34. package/grouping/group-panel.component.d.ts +5 -1
  35. package/index.d.ts +2 -0
  36. package/localization/messages.d.ts +13 -1
  37. package/navigation/navigable-settings.d.ts +1 -1
  38. package/navigation/navigation.service.d.ts +2 -0
  39. package/package.json +14 -14
  40. package/rendering/footer/footer.component.d.ts +1 -0
  41. package/rendering/header/header.component.d.ts +5 -1
  42. package/rendering/list.component.d.ts +2 -2
  43. package/rendering/toolbar/toolbar-focusable.directive.d.ts +29 -0
  44. package/rendering/toolbar/toolbar-navigation.service.d.ts +21 -0
  45. package/rendering/toolbar/toolbar-position.d.ts +5 -0
  46. package/rendering/toolbar/toolbar.component.d.ts +11 -2
  47. package/schematics/ngAdd/index.js +2 -2
@@ -2,7 +2,9 @@
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 { Renderer2 } from '@angular/core';
5
6
  import type { GridComponent } from '../grid.component';
7
+ import { GridToolbarNavigationService } from '../rendering/toolbar/toolbar-navigation.service';
6
8
  import * as i0 from "@angular/core";
7
9
  /**
8
10
  * @hidden
@@ -14,7 +16,11 @@ import * as i0 from "@angular/core";
14
16
  * and a avoids dependency cycles between components.
15
17
  */
16
18
  export declare class ContextService {
19
+ private renderer;
17
20
  grid: GridComponent;
21
+ topToolbarNavigation: GridToolbarNavigationService;
22
+ bottomToolbarNavigation: GridToolbarNavigationService;
23
+ constructor(renderer: Renderer2);
18
24
  static ɵfac: i0.ɵɵFactoryDeclaration<ContextService, never>;
19
25
  static ɵprov: i0.ɵɵInjectableDeclaration<ContextService>;
20
26
  }
@@ -20,7 +20,7 @@ export class ColumnListComponent {
20
20
  this.columnChange = new EventEmitter();
21
21
  this.autoSync = true;
22
22
  this.allowHideAll = false;
23
- this.actionsClass = 'k-action-buttons';
23
+ this.actionsClass = 'k-actions';
24
24
  this.unlockedCount = 0;
25
25
  }
26
26
  get className() {
@@ -69,7 +69,7 @@ export class ColumnMenuChooserComponent extends ColumnMenuItemBase {
69
69
  /**
70
70
  * @hidden
71
71
  */
72
- this.actionsClass = 'k-columnmenu-actions';
72
+ this.actionsClass = 'k-actions';
73
73
  this.columnsIcon = columnsIcon;
74
74
  }
75
75
  get columns() {
@@ -65,7 +65,7 @@ export class ColumnMenuFilterComponent extends ColumnMenuItemBase {
65
65
  /**
66
66
  * @hidden
67
67
  */
68
- this.actionsClass = 'k-columnmenu-actions';
68
+ this.actionsClass = 'k-actions';
69
69
  this.filterIcon = filterIcon;
70
70
  }
71
71
  /**
@@ -63,7 +63,7 @@ export class ColumnMenuPositionComponent extends ColumnMenuItemBase {
63
63
  /**
64
64
  * @hidden
65
65
  */
66
- this.actionsClass = 'k-columnmenu-actions';
66
+ this.actionsClass = 'k-actions';
67
67
  this.setColumnPositionIcon = setColumnPositionIcon;
68
68
  this._isLast = false;
69
69
  }
@@ -2,7 +2,8 @@
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 { Injectable } from '@angular/core';
5
+ import { Injectable, Renderer2 } from '@angular/core';
6
+ import { GridToolbarNavigationService } from '../rendering/toolbar/toolbar-navigation.service';
6
7
  import * as i0 from "@angular/core";
7
8
  /**
8
9
  * @hidden
@@ -14,9 +15,14 @@ import * as i0 from "@angular/core";
14
15
  * and a avoids dependency cycles between components.
15
16
  */
16
17
  export class ContextService {
18
+ constructor(renderer) {
19
+ this.renderer = renderer;
20
+ this.topToolbarNavigation = new GridToolbarNavigationService(this.renderer);
21
+ this.bottomToolbarNavigation = new GridToolbarNavigationService(this.renderer);
22
+ }
17
23
  }
18
- ContextService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ContextService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
24
+ ContextService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ContextService, deps: [{ token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Injectable });
19
25
  ContextService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ContextService });
20
26
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ContextService, decorators: [{
21
27
  type: Injectable
22
- }] });
28
+ }], ctorParameters: function () { return [{ type: i0.Renderer2 }]; } });
@@ -94,7 +94,7 @@ DateFilterCellComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0"
94
94
  </kendo-datepicker-messages>
95
95
  </kendo-datepicker>
96
96
  </kendo-grid-filter-wrapper-cell>
97
- `, isInline: true, components: [{ type: i4.FilterCellWrapperComponent, selector: "kendo-grid-filter-wrapper-cell", inputs: ["showOperators"] }, { type: i5.DatePickerComponent, selector: "kendo-datepicker", inputs: ["focusableId", "cellTemplate", "monthCellTemplate", "yearCellTemplate", "decadeCellTemplate", "centuryCellTemplate", "weekNumberTemplate", "headerTitleTemplate", "navigationItemTemplate", "activeView", "bottomView", "topView", "calendarType", "animateCalendarNavigation", "disabled", "readonly", "readOnlyInput", "popupSettings", "navigation", "min", "max", "incompleteDateValidation", "focusedDate", "value", "format", "twoDigitYearMax", "formatPlaceholder", "placeholder", "tabindex", "tabIndex", "disabledDates", "title", "rangeValidation", "disabledDatesValidation", "weekNumber", "size", "rounded", "fillMode"], outputs: ["valueChange", "focus", "blur", "open", "close"], exportAs: ["kendo-datepicker"] }, { type: i5.DatePickerCustomMessagesComponent, selector: "kendo-datepicker-messages" }], directives: [{ type: i6.FilterInputDirective, selector: "[kendoFilterInput]", inputs: ["filterDelay", "columnLabel", "value"] }, { type: i7.FocusableDirective, selector: "[kendoGridFocusable],\n [kendoGridEditCommand],\n [kendoGridRemoveCommand],\n [kendoGridSaveCommand],\n [kendoGridCancelCommand],\n [kendoGridSelectionCheckbox]\n ", inputs: ["kendoGridFocusable"] }] });
97
+ `, isInline: true, components: [{ type: i4.FilterCellWrapperComponent, selector: "kendo-grid-filter-wrapper-cell", inputs: ["showOperators"] }, { type: i5.DatePickerComponent, selector: "kendo-datepicker", inputs: ["focusableId", "cellTemplate", "monthCellTemplate", "yearCellTemplate", "decadeCellTemplate", "centuryCellTemplate", "weekNumberTemplate", "headerTitleTemplate", "navigationItemTemplate", "activeView", "bottomView", "topView", "calendarType", "animateCalendarNavigation", "disabled", "readonly", "readOnlyInput", "popupSettings", "navigation", "min", "max", "incompleteDateValidation", "focusedDate", "value", "format", "twoDigitYearMax", "formatPlaceholder", "placeholder", "tabindex", "tabIndex", "disabledDates", "title", "subtitle", "rangeValidation", "disabledDatesValidation", "weekNumber", "size", "rounded", "fillMode", "adaptiveMode"], outputs: ["valueChange", "focus", "blur", "open", "close"], exportAs: ["kendo-datepicker"] }, { type: i5.DatePickerCustomMessagesComponent, selector: "kendo-datepicker-messages" }], directives: [{ type: i6.FilterInputDirective, selector: "[kendoFilterInput]", inputs: ["filterDelay", "columnLabel", "value"] }, { type: i7.FocusableDirective, selector: "[kendoGridFocusable],\n [kendoGridEditCommand],\n [kendoGridRemoveCommand],\n [kendoGridSaveCommand],\n [kendoGridCancelCommand],\n [kendoGridSelectionCheckbox]\n ", inputs: ["kendoGridFocusable"] }] });
98
98
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: DateFilterCellComponent, decorators: [{
99
99
  type: Component,
100
100
  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 } from '@angular/core';
5
+ import { Component, HostBinding, Input } from '@angular/core';
6
6
  import { ColumnComponent } from '../../columns/column.component';
7
7
  import { isPresent, isNullOrEmptyString } from '../../utils';
8
8
  import { cloneFilters } from '../../common/filter-descriptor-differ';
@@ -14,6 +14,7 @@ import * as i2 from "./filter-cell-host.directive";
14
14
  */
15
15
  export class FilterCellComponent {
16
16
  constructor() {
17
+ this.hostRole = 'gridcell';
17
18
  this.size = 'medium';
18
19
  this._templateContext = {};
19
20
  }
@@ -37,7 +38,7 @@ export class FilterCellComponent {
37
38
  }
38
39
  }
39
40
  FilterCellComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FilterCellComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
40
- FilterCellComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: FilterCellComponent, selector: "[kendoGridFilterCell]", inputs: { column: "column", filter: "filter", size: "size" }, ngImport: i0, template: `
41
+ FilterCellComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: FilterCellComponent, selector: "[kendoGridFilterCell]", inputs: { column: "column", filter: "filter", size: "size" }, host: { properties: { "attr.role": "this.hostRole" } }, ngImport: i0, template: `
41
42
  <ng-container *ngIf="isFilterable">
42
43
  <ng-container [ngSwitch]="hasTemplate">
43
44
  <ng-container *ngSwitchCase="false">
@@ -74,7 +75,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
74
75
  </ng-container>
75
76
  `
76
77
  }]
77
- }], propDecorators: { column: [{
78
+ }], propDecorators: { hostRole: [{
79
+ type: HostBinding,
80
+ args: ['attr.role']
81
+ }], column: [{
78
82
  type: Input
79
83
  }], filter: [{
80
84
  type: Input
@@ -80,7 +80,7 @@ DateFilterMenuInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12
80
80
  </kendo-datepicker-messages>
81
81
  </kendo-datepicker>
82
82
  </kendo-grid-filter-menu-input-wrapper>
83
- `, isInline: true, components: [{ type: i3.FilterMenuInputWrapperComponent, selector: "kendo-grid-filter-menu-input-wrapper", inputs: ["filterService", "isFirstDropDown", "menuTabbingService", "currentFilter"] }, { type: i4.DatePickerComponent, selector: "kendo-datepicker", inputs: ["focusableId", "cellTemplate", "monthCellTemplate", "yearCellTemplate", "decadeCellTemplate", "centuryCellTemplate", "weekNumberTemplate", "headerTitleTemplate", "navigationItemTemplate", "activeView", "bottomView", "topView", "calendarType", "animateCalendarNavigation", "disabled", "readonly", "readOnlyInput", "popupSettings", "navigation", "min", "max", "incompleteDateValidation", "focusedDate", "value", "format", "twoDigitYearMax", "formatPlaceholder", "placeholder", "tabindex", "tabIndex", "disabledDates", "title", "rangeValidation", "disabledDatesValidation", "weekNumber", "size", "rounded", "fillMode"], outputs: ["valueChange", "focus", "blur", "open", "close"], exportAs: ["kendo-datepicker"] }, { type: i4.DatePickerCustomMessagesComponent, selector: "kendo-datepicker-messages" }], directives: [{ type: i5.FilterInputDirective, selector: "[kendoFilterInput]", inputs: ["filterDelay", "columnLabel", "value"] }] });
83
+ `, isInline: true, components: [{ type: i3.FilterMenuInputWrapperComponent, selector: "kendo-grid-filter-menu-input-wrapper", inputs: ["filterService", "isFirstDropDown", "menuTabbingService", "currentFilter"] }, { type: i4.DatePickerComponent, selector: "kendo-datepicker", inputs: ["focusableId", "cellTemplate", "monthCellTemplate", "yearCellTemplate", "decadeCellTemplate", "centuryCellTemplate", "weekNumberTemplate", "headerTitleTemplate", "navigationItemTemplate", "activeView", "bottomView", "topView", "calendarType", "animateCalendarNavigation", "disabled", "readonly", "readOnlyInput", "popupSettings", "navigation", "min", "max", "incompleteDateValidation", "focusedDate", "value", "format", "twoDigitYearMax", "formatPlaceholder", "placeholder", "tabindex", "tabIndex", "disabledDates", "title", "subtitle", "rangeValidation", "disabledDatesValidation", "weekNumber", "size", "rounded", "fillMode", "adaptiveMode"], outputs: ["valueChange", "focus", "blur", "open", "close"], exportAs: ["kendo-datepicker"] }, { type: i4.DatePickerCustomMessagesComponent, selector: "kendo-datepicker-messages" }], directives: [{ type: i5.FilterInputDirective, selector: "[kendoFilterInput]", inputs: ["filterDelay", "columnLabel", "value"] }] });
84
84
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: DateFilterMenuInputComponent, decorators: [{
85
85
  type: Component,
86
86
  args: [{
@@ -57,7 +57,7 @@ export class FilterMenuContainerComponent {
57
57
  /**
58
58
  * @hidden
59
59
  */
60
- this.actionsClass = 'k-action-buttons';
60
+ this.actionsClass = 'k-actions';
61
61
  this._templateContext = {};
62
62
  this.menuTabbingService = menuTabbingService;
63
63
  }
@@ -63,7 +63,7 @@ const importedModules = [
63
63
  DatePickerModule,
64
64
  PopupModule,
65
65
  SharedModule,
66
- ButtonModule
66
+ ButtonModule,
67
67
  ];
68
68
  const COMPONENTS = [
69
69
  FilterInputDirective
@@ -72,6 +72,7 @@ import { CellLoadingTemplateDirective } from './rendering/cell-loading.template.
72
72
  import { ContextService } from './common/provider.service';
73
73
  import { LoadingTemplateDirective } from './rendering/loading-template.directive';
74
74
  import { SizingOptionsService } from './layout/sizing-options.service';
75
+ import { guid } from '@progress/kendo-angular-common';
75
76
  import * as i0 from "@angular/core";
76
77
  import * as i1 from "./layout/browser-support.service";
77
78
  import * as i2 from "./selection/selection.service";
@@ -446,6 +447,7 @@ export class GridComponent {
446
447
  this.hostClass = true;
447
448
  this.footer = new QueryList();
448
449
  this.selectionDirective = false;
450
+ this.ariaRootId = `k-${guid()}`;
449
451
  this.columnsContainer = new ColumnsContainer(() => this.columnList.filterHierarchy(column => {
450
452
  if (!isUniversal()) {
451
453
  column.matchesMedia = this.matchesMedia(column);
@@ -615,7 +617,7 @@ export class GridComponent {
615
617
  */
616
618
  set navigable(value) {
617
619
  if (typeof value === 'boolean') {
618
- this._navigable = value ? ['table', 'pager'] : [];
620
+ this._navigable = value ? ['table', 'pager', 'toolbar'] : [];
619
621
  return;
620
622
  }
621
623
  this._navigable = value;
@@ -1178,6 +1180,12 @@ export class GridComponent {
1178
1180
  get ariaLabel() {
1179
1181
  return this.localization.get('gridLabel');
1180
1182
  }
1183
+ /**
1184
+ * @hidden
1185
+ */
1186
+ messageFor(token) {
1187
+ return this.localization.get(token);
1188
+ }
1181
1189
  /**
1182
1190
  * Switches the specified table row in the edit mode ([see example]({% slug inline_editing_grid %}#toc-editing-records-1)).
1183
1191
  *
@@ -2409,12 +2417,24 @@ GridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version:
2409
2417
 
2410
2418
  i18n-selectPage="kendo.grid.selectPage|The text of the title and aria-label attributes applied to the page chooser in the Grid Pager"
2411
2419
  selectPage="Select page"
2420
+
2421
+ i18n-topToolbarLabel="kendo.grid.topToolbarLabel|The label for the Grid top toolbar"
2422
+ topToolbarLabel="Top toolbar"
2423
+
2424
+ i18n-bottomToolbarLabel="kendo.grid.bottomToolbarLabel|The label for the Grid bottom toolbar"
2425
+ bottomToolbarLabel="Bottom toolbar"
2426
+
2427
+ i18n-groupPanelLabel="kendo.grid.groupPanelLabel|The label for the Grid group panel toolbar"
2428
+ groupPanelLabel="Group panel"
2412
2429
  >
2413
2430
  </ng-container>
2414
2431
  <kendo-grid-toolbar
2415
2432
  class="k-toolbar k-grid-toolbar"
2416
2433
  *ngIf="showTopToolbar"
2417
2434
  [size]="size"
2435
+ [attr.aria-label]="messageFor('topToolbarLabel')"
2436
+ [navigable]="navigation.toolbarEnabled"
2437
+ [attr.aria-controls]="ariaRootId"
2418
2438
  position="top"></kendo-grid-toolbar>
2419
2439
  <kendo-pager
2420
2440
  *ngIf="showTopPager"
@@ -2431,13 +2451,18 @@ GridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version:
2431
2451
  </kendo-pager>
2432
2452
  <kendo-grid-group-panel
2433
2453
  *ngIf="showGroupPanel"
2454
+ [navigable]="navigation.toolbarEnabled"
2434
2455
  [text]="groupableEmptyText"
2435
2456
  [groups]="group"
2457
+ role="toolbar"
2458
+ [attr.aria-label]="messageFor('groupPanelLabel')"
2459
+ [attr.aria-controls]="ariaRootId"
2436
2460
  (change)="groupChange.emit($event)">
2437
2461
  </kendo-grid-group-panel>
2438
2462
  <div #ariaRoot
2439
2463
  class="k-grid-aria-root"
2440
2464
  role="grid"
2465
+ [id]="ariaRootId"
2441
2466
  [attr.aria-label]="ariaLabel"
2442
2467
  [attr.aria-rowcount]="ariaRowCount"
2443
2468
  [attr.aria-colcount]="ariaColCount">
@@ -2465,6 +2490,7 @@ GridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version:
2465
2490
  [detailTemplate]="detailTemplate">
2466
2491
  </colgroup>
2467
2492
  <thead kendoGridHeader
2493
+ role="rowgroup"
2468
2494
  [resizable]="resizable"
2469
2495
  [scrollable]="true"
2470
2496
  [columns]="$any(lockedColumns)"
@@ -2502,7 +2528,7 @@ GridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version:
2502
2528
  </colgroup>
2503
2529
  <thead kendoGridHeader
2504
2530
  [resizable]="resizable"
2505
- role="presentation"
2531
+ role="rowgroup"
2506
2532
  [scrollable]="true"
2507
2533
  [columns]="headerColumns"
2508
2534
  [totalColumnLevels]="totalColumnLevels"
@@ -2689,8 +2715,11 @@ GridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version:
2689
2715
  class="k-toolbar k-grid-toolbar k-grid-toolbar-bottom"
2690
2716
  *ngIf="showBottomToolbar"
2691
2717
  [size]="size"
2718
+ [navigable]="navigation.toolbarEnabled"
2719
+ [attr.aria-label]="messageFor('bottomToolbarLabel')"
2720
+ [attr.aria-controls]="ariaRootId"
2692
2721
  position="bottom"></kendo-grid-toolbar>
2693
- `, isInline: true, components: [{ type: i24.ToolbarComponent, selector: "kendo-grid-toolbar", inputs: ["position", "size"] }, { type: i25.PagerComponent, selector: "kendo-pager", inputs: ["total", "skip", "pageSize", "options", "size", "template"], outputs: ["pageChange"] }, { type: i26.GroupPanelComponent, selector: "kendo-grid-group-panel", inputs: ["text", "groups"], outputs: ["change"] }, { type: i27.ColGroupComponent, selector: "[kendoGridColGroup]", inputs: ["columns", "groups", "detailTemplate", "sort"] }, { type: i28.HeaderComponent, selector: "[kendoGridHeader]", inputs: ["totalColumnLevels", "columns", "groups", "detailTemplate", "scrollable", "filterable", "sort", "filter", "sortable", "groupable", "lockedColumnsCount", "resizable", "reorderable", "columnMenu", "columnMenuTemplate", "totalColumnsCount", "tabIndex", "size"] }, { type: i29.ListComponent, selector: "kendo-grid-list", inputs: ["data", "groups", "total", "rowHeight", "stickyRowHeight", "detailRowHeight", "take", "skip", "columns", "detailTemplate", "noRecordsTemplate", "selectable", "groupable", "filterable", "rowClass", "rowSticky", "loading", "trackBy", "virtualColumns", "isVirtual", "cellLoadingTemplate", "loadingTemplate", "sort", "size"], outputs: ["contentScroll", "pageChange", "scrollBottom"] }, { type: i30.FooterComponent, selector: "[kendoGridFooter]", inputs: ["columns", "groups", "detailTemplate", "scrollable", "lockedColumnsCount", "logicalRowIndex"] }, { type: i31.TableBodyComponent, selector: "[kendoGridTableBody]", inputs: ["columns", "allColumns", "groups", "detailTemplate", "noRecordsTemplate", "data", "skip", "selectable", "filterable", "noRecordsText", "isLocked", "isLoading", "isVirtual", "cellLoadingTemplate", "skipGroupDecoration", "showGroupFooters", "lockedColumnsCount", "totalColumnsCount", "virtualColumns", "trackBy", "rowSticky", "rowClass"] }, { type: i32.LoadingComponent, selector: "[kendoGridLoading]", inputs: ["loadingTemplate"] }], directives: [{ type: i33.LocalizedMessagesDirective, selector: "[kendoGridLocalizedMessages]" }, { type: i34.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i35.TableDirective, selector: "table", inputs: ["locked", "virtualColumns"] }, { type: i36.GridTableDirective, selector: "[kendoGridTable]", inputs: ["size"] }, { type: i37.ResizableContainerDirective, selector: "[kendoGridResizableContainer]", inputs: ["lockedWidth", "kendoGridResizableContainer"] }, { type: i38.DraggableDirective, selector: "[kendoDraggable]", inputs: ["enableDrag"], outputs: ["kendoPress", "kendoDrag", "kendoRelease"] }, { type: i39.GridMarqueeDirective, selector: "[kendoGridSelectionMarquee]" }], encapsulation: i0.ViewEncapsulation.None });
2722
+ `, isInline: true, components: [{ type: i24.ToolbarComponent, selector: "kendo-grid-toolbar", inputs: ["position", "size", "navigable"] }, { type: i25.PagerComponent, selector: "kendo-pager", inputs: ["total", "skip", "pageSize", "options", "size", "template"], outputs: ["pageChange"] }, { type: i26.GroupPanelComponent, selector: "kendo-grid-group-panel", inputs: ["text", "navigable", "groups"], outputs: ["change"] }, { type: i27.ColGroupComponent, selector: "[kendoGridColGroup]", inputs: ["columns", "groups", "detailTemplate", "sort"] }, { type: i28.HeaderComponent, selector: "[kendoGridHeader]", inputs: ["totalColumnLevels", "columns", "groups", "detailTemplate", "scrollable", "filterable", "sort", "filter", "sortable", "groupable", "lockedColumnsCount", "resizable", "reorderable", "columnMenu", "columnMenuTemplate", "totalColumnsCount", "tabIndex", "size"] }, { type: i29.ListComponent, selector: "kendo-grid-list", inputs: ["data", "groups", "total", "rowHeight", "stickyRowHeight", "detailRowHeight", "take", "skip", "columns", "detailTemplate", "noRecordsTemplate", "selectable", "groupable", "filterable", "rowClass", "rowSticky", "loading", "trackBy", "virtualColumns", "isVirtual", "cellLoadingTemplate", "loadingTemplate", "sort", "size"], outputs: ["contentScroll", "pageChange", "scrollBottom"] }, { type: i30.FooterComponent, selector: "[kendoGridFooter]", inputs: ["columns", "groups", "detailTemplate", "scrollable", "lockedColumnsCount", "logicalRowIndex"] }, { type: i31.TableBodyComponent, selector: "[kendoGridTableBody]", inputs: ["columns", "allColumns", "groups", "detailTemplate", "noRecordsTemplate", "data", "skip", "selectable", "filterable", "noRecordsText", "isLocked", "isLoading", "isVirtual", "cellLoadingTemplate", "skipGroupDecoration", "showGroupFooters", "lockedColumnsCount", "totalColumnsCount", "virtualColumns", "trackBy", "rowSticky", "rowClass"] }, { type: i32.LoadingComponent, selector: "[kendoGridLoading]", inputs: ["loadingTemplate"] }], directives: [{ type: i33.LocalizedMessagesDirective, selector: "[kendoGridLocalizedMessages]" }, { type: i34.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i35.TableDirective, selector: "table", inputs: ["locked", "virtualColumns"] }, { type: i36.GridTableDirective, selector: "[kendoGridTable]", inputs: ["size"] }, { type: i37.ResizableContainerDirective, selector: "[kendoGridResizableContainer]", inputs: ["lockedWidth", "kendoGridResizableContainer"] }, { type: i38.DraggableDirective, selector: "[kendoDraggable]", inputs: ["enableDrag"], outputs: ["kendoPress", "kendoDrag", "kendoRelease"] }, { type: i39.GridMarqueeDirective, selector: "[kendoGridSelectionMarquee]" }], encapsulation: i0.ViewEncapsulation.None });
2694
2723
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: GridComponent, decorators: [{
2695
2724
  type: Component,
2696
2725
  args: [{
@@ -2957,12 +2986,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
2957
2986
 
2958
2987
  i18n-selectPage="kendo.grid.selectPage|The text of the title and aria-label attributes applied to the page chooser in the Grid Pager"
2959
2988
  selectPage="Select page"
2989
+
2990
+ i18n-topToolbarLabel="kendo.grid.topToolbarLabel|The label for the Grid top toolbar"
2991
+ topToolbarLabel="Top toolbar"
2992
+
2993
+ i18n-bottomToolbarLabel="kendo.grid.bottomToolbarLabel|The label for the Grid bottom toolbar"
2994
+ bottomToolbarLabel="Bottom toolbar"
2995
+
2996
+ i18n-groupPanelLabel="kendo.grid.groupPanelLabel|The label for the Grid group panel toolbar"
2997
+ groupPanelLabel="Group panel"
2960
2998
  >
2961
2999
  </ng-container>
2962
3000
  <kendo-grid-toolbar
2963
3001
  class="k-toolbar k-grid-toolbar"
2964
3002
  *ngIf="showTopToolbar"
2965
3003
  [size]="size"
3004
+ [attr.aria-label]="messageFor('topToolbarLabel')"
3005
+ [navigable]="navigation.toolbarEnabled"
3006
+ [attr.aria-controls]="ariaRootId"
2966
3007
  position="top"></kendo-grid-toolbar>
2967
3008
  <kendo-pager
2968
3009
  *ngIf="showTopPager"
@@ -2979,13 +3020,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
2979
3020
  </kendo-pager>
2980
3021
  <kendo-grid-group-panel
2981
3022
  *ngIf="showGroupPanel"
3023
+ [navigable]="navigation.toolbarEnabled"
2982
3024
  [text]="groupableEmptyText"
2983
3025
  [groups]="group"
3026
+ role="toolbar"
3027
+ [attr.aria-label]="messageFor('groupPanelLabel')"
3028
+ [attr.aria-controls]="ariaRootId"
2984
3029
  (change)="groupChange.emit($event)">
2985
3030
  </kendo-grid-group-panel>
2986
3031
  <div #ariaRoot
2987
3032
  class="k-grid-aria-root"
2988
3033
  role="grid"
3034
+ [id]="ariaRootId"
2989
3035
  [attr.aria-label]="ariaLabel"
2990
3036
  [attr.aria-rowcount]="ariaRowCount"
2991
3037
  [attr.aria-colcount]="ariaColCount">
@@ -3013,6 +3059,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
3013
3059
  [detailTemplate]="detailTemplate">
3014
3060
  </colgroup>
3015
3061
  <thead kendoGridHeader
3062
+ role="rowgroup"
3016
3063
  [resizable]="resizable"
3017
3064
  [scrollable]="true"
3018
3065
  [columns]="$any(lockedColumns)"
@@ -3050,7 +3097,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
3050
3097
  </colgroup>
3051
3098
  <thead kendoGridHeader
3052
3099
  [resizable]="resizable"
3053
- role="presentation"
3100
+ role="rowgroup"
3054
3101
  [scrollable]="true"
3055
3102
  [columns]="headerColumns"
3056
3103
  [totalColumnLevels]="totalColumnLevels"
@@ -3237,6 +3284,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
3237
3284
  class="k-toolbar k-grid-toolbar k-grid-toolbar-bottom"
3238
3285
  *ngIf="showBottomToolbar"
3239
3286
  [size]="size"
3287
+ [navigable]="navigation.toolbarEnabled"
3288
+ [attr.aria-label]="messageFor('bottomToolbarLabel')"
3289
+ [attr.aria-controls]="ariaRootId"
3240
3290
  position="bottom"></kendo-grid-toolbar>
3241
3291
  `
3242
3292
  }]
@@ -30,6 +30,7 @@ import { InCellEditingDirective } from './editing-directives/in-cell-editing.dir
30
30
  import { GroupBindingDirective } from './grouping/group-scroll-binding.directive';
31
31
  import { FilterMenuModule } from "./filtering/menu/filter-menu.module";
32
32
  import { ColumnMenuModule } from './column-menu/column-menu.module';
33
+ import { GridToolbarFocusableDirective } from './rendering/toolbar/toolbar-focusable.directive';
33
34
  import * as i0 from "@angular/core";
34
35
  import * as i1 from "./grouping/group-header-template.directive";
35
36
  import * as i2 from "./grouping/group-header-column-template.directive";
@@ -129,6 +130,7 @@ const exportedModules = [
129
130
  InCellEditingDirective,
130
131
  ExpandDetailsDirective,
131
132
  ExpandGroupDirective,
133
+ GridToolbarFocusableDirective,
132
134
  ...GroupModule.exports(),
133
135
  ...SharedModule.exports(),
134
136
  ...BodyModule.exports(),
@@ -155,7 +157,8 @@ const declarations = [
155
157
  ExpandGroupDirective,
156
158
  GroupBindingDirective,
157
159
  GridMarqueeDirective,
158
- GridSpacerComponent
160
+ GridSpacerComponent,
161
+ GridToolbarFocusableDirective
159
162
  ];
160
163
  /**
161
164
  * Represents the [NgModule](link:site.data.urls.angular['ngmoduleapi'])
@@ -206,7 +209,8 @@ GridModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13
206
209
  ExpandGroupDirective,
207
210
  GroupBindingDirective,
208
211
  GridMarqueeDirective,
209
- GridSpacerComponent], imports: [CommonModule,
212
+ GridSpacerComponent,
213
+ GridToolbarFocusableDirective], imports: [CommonModule,
210
214
  GroupModule,
211
215
  SharedModule,
212
216
  BodyModule,
@@ -228,7 +232,8 @@ GridModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13
228
232
  ReactiveEditingDirective,
229
233
  InCellEditingDirective,
230
234
  ExpandDetailsDirective,
231
- ExpandGroupDirective, i1.GroupHeaderTemplateDirective, i2.GroupHeaderColumnTemplateDirective, i3.GroupFooterTemplateDirective, i4.ColumnComponent, i5.SpanColumnComponent, i6.ColumnGroupComponent, i7.FooterTemplateDirective, i8.DetailTemplateDirective, i9.FocusableDirective, i10.GridTableDirective, i11.CommandColumnComponent, i12.CheckboxColumnComponent, i13.SelectionCheckboxDirective, i14.CellTemplateDirective, i15.NoRecordsTemplateDirective, i16.EditTemplateDirective, i17.EditCommandDirective, i18.CancelCommandDirective, i19.SaveCommandDirective, i20.RemoveCommandDirective, i21.AddCommandDirective, i22.CellLoadingTemplateDirective, i23.LoadingTemplateDirective, i24.HeaderTemplateDirective, i25.SelectAllCheckboxDirective, i26.PagerComponent, i27.PagerPrevButtonsComponent, i28.PagerNextButtonsComponent, i29.PagerNumericButtonsComponent, i30.PagerInputComponent, i31.PagerInfoComponent, i32.PagerPageSizesComponent, i33.PagerTemplateDirective, i34.PagerDropDownListDirective, i35.PagerInputDirective, i36.FilterRowComponent, i37.FilterCellComponent, i38.FilterCellTemplateDirective, i39.FilterCellOperatorsComponent, i40.StringFilterCellComponent, i41.NumericFilterCellComponent, i42.AutoCompleteFilterCellComponent, i43.BooleanFilterCellComponent, i44.DateFilterCellComponent, i39.FilterCellOperatorsComponent, i45.ContainsFilterOperatorComponent, i46.DoesNotContainFilterOperatorComponent, i47.EndsWithFilterOperatorComponent, i48.EqualFilterOperatorComponent, i49.IsEmptyFilterOperatorComponent, i50.IsNotEmptyFilterOperatorComponent, i51.IsNotNullFilterOperatorComponent, i52.IsNullFilterOperatorComponent, i53.NotEqualFilterOperatorComponent, i54.StartsWithFilterOperatorComponent, i55.GreaterFilterOperatorComponent, i56.GreaterOrEqualToFilterOperatorComponent, i57.LessFilterOperatorComponent, i58.LessOrEqualToFilterOperatorComponent, i59.AfterFilterOperatorComponent, i60.AfterEqFilterOperatorComponent, i61.BeforeEqFilterOperatorComponent, i62.BeforeFilterOperatorComponent, i63.StringFilterMenuComponent, i64.FilterMenuTemplateDirective, i65.NumericFilterMenuComponent, i66.DateFilterMenuComponent, i67.BooleanFilterMenuComponent, i68.FilterMenuDropDownListDirective, i69.BooleanFilterRadioButtonDirective, i39.FilterCellOperatorsComponent, i45.ContainsFilterOperatorComponent, i46.DoesNotContainFilterOperatorComponent, i47.EndsWithFilterOperatorComponent, i48.EqualFilterOperatorComponent, i49.IsEmptyFilterOperatorComponent, i50.IsNotEmptyFilterOperatorComponent, i51.IsNotNullFilterOperatorComponent, i52.IsNullFilterOperatorComponent, i53.NotEqualFilterOperatorComponent, i54.StartsWithFilterOperatorComponent, i55.GreaterFilterOperatorComponent, i56.GreaterOrEqualToFilterOperatorComponent, i57.LessFilterOperatorComponent, i58.LessOrEqualToFilterOperatorComponent, i59.AfterFilterOperatorComponent, i60.AfterEqFilterOperatorComponent, i61.BeforeEqFilterOperatorComponent, i62.BeforeFilterOperatorComponent, i70.ColumnChooserComponent, i71.ColumnMenuFilterComponent, i72.ColumnMenuItemComponent, i73.ColumnMenuItemContentTemplateDirective, i74.ColumnMenuSortComponent, i75.ColumnMenuLockComponent, i76.ColumnMenuStickComponent, i77.ColumnMenuPositionComponent, i78.ColumnMenuChooserComponent, i79.ColumnMenuTemplateDirective, i80.ColumnMenuContainerComponent, i81.ColumnMenuItemDirective, i82.ColumnMenuComponent, i83.ColumnMenuAutoSizeColumnComponent, i84.ColumnMenuAutoSizeAllColumnsComponent] });
235
+ ExpandGroupDirective,
236
+ GridToolbarFocusableDirective, i1.GroupHeaderTemplateDirective, i2.GroupHeaderColumnTemplateDirective, i3.GroupFooterTemplateDirective, i4.ColumnComponent, i5.SpanColumnComponent, i6.ColumnGroupComponent, i7.FooterTemplateDirective, i8.DetailTemplateDirective, i9.FocusableDirective, i10.GridTableDirective, i11.CommandColumnComponent, i12.CheckboxColumnComponent, i13.SelectionCheckboxDirective, i14.CellTemplateDirective, i15.NoRecordsTemplateDirective, i16.EditTemplateDirective, i17.EditCommandDirective, i18.CancelCommandDirective, i19.SaveCommandDirective, i20.RemoveCommandDirective, i21.AddCommandDirective, i22.CellLoadingTemplateDirective, i23.LoadingTemplateDirective, i24.HeaderTemplateDirective, i25.SelectAllCheckboxDirective, i26.PagerComponent, i27.PagerPrevButtonsComponent, i28.PagerNextButtonsComponent, i29.PagerNumericButtonsComponent, i30.PagerInputComponent, i31.PagerInfoComponent, i32.PagerPageSizesComponent, i33.PagerTemplateDirective, i34.PagerDropDownListDirective, i35.PagerInputDirective, i36.FilterRowComponent, i37.FilterCellComponent, i38.FilterCellTemplateDirective, i39.FilterCellOperatorsComponent, i40.StringFilterCellComponent, i41.NumericFilterCellComponent, i42.AutoCompleteFilterCellComponent, i43.BooleanFilterCellComponent, i44.DateFilterCellComponent, i39.FilterCellOperatorsComponent, i45.ContainsFilterOperatorComponent, i46.DoesNotContainFilterOperatorComponent, i47.EndsWithFilterOperatorComponent, i48.EqualFilterOperatorComponent, i49.IsEmptyFilterOperatorComponent, i50.IsNotEmptyFilterOperatorComponent, i51.IsNotNullFilterOperatorComponent, i52.IsNullFilterOperatorComponent, i53.NotEqualFilterOperatorComponent, i54.StartsWithFilterOperatorComponent, i55.GreaterFilterOperatorComponent, i56.GreaterOrEqualToFilterOperatorComponent, i57.LessFilterOperatorComponent, i58.LessOrEqualToFilterOperatorComponent, i59.AfterFilterOperatorComponent, i60.AfterEqFilterOperatorComponent, i61.BeforeEqFilterOperatorComponent, i62.BeforeFilterOperatorComponent, i63.StringFilterMenuComponent, i64.FilterMenuTemplateDirective, i65.NumericFilterMenuComponent, i66.DateFilterMenuComponent, i67.BooleanFilterMenuComponent, i68.FilterMenuDropDownListDirective, i69.BooleanFilterRadioButtonDirective, i39.FilterCellOperatorsComponent, i45.ContainsFilterOperatorComponent, i46.DoesNotContainFilterOperatorComponent, i47.EndsWithFilterOperatorComponent, i48.EqualFilterOperatorComponent, i49.IsEmptyFilterOperatorComponent, i50.IsNotEmptyFilterOperatorComponent, i51.IsNotNullFilterOperatorComponent, i52.IsNullFilterOperatorComponent, i53.NotEqualFilterOperatorComponent, i54.StartsWithFilterOperatorComponent, i55.GreaterFilterOperatorComponent, i56.GreaterOrEqualToFilterOperatorComponent, i57.LessFilterOperatorComponent, i58.LessOrEqualToFilterOperatorComponent, i59.AfterFilterOperatorComponent, i60.AfterEqFilterOperatorComponent, i61.BeforeEqFilterOperatorComponent, i62.BeforeFilterOperatorComponent, i70.ColumnChooserComponent, i71.ColumnMenuFilterComponent, i72.ColumnMenuItemComponent, i73.ColumnMenuItemContentTemplateDirective, i74.ColumnMenuSortComponent, i75.ColumnMenuLockComponent, i76.ColumnMenuStickComponent, i77.ColumnMenuPositionComponent, i78.ColumnMenuChooserComponent, i79.ColumnMenuTemplateDirective, i80.ColumnMenuContainerComponent, i81.ColumnMenuItemDirective, i82.ColumnMenuComponent, i83.ColumnMenuAutoSizeColumnComponent, i84.ColumnMenuAutoSizeAllColumnsComponent] });
232
237
  GridModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: GridModule, imports: [[
233
238
  CommonModule,
234
239
  GroupModule,
@@ -78,6 +78,12 @@ export class GroupPanelComponent {
78
78
  this.targetSubscription.unsubscribe();
79
79
  }
80
80
  }
81
+ messageFor(token) {
82
+ return this.localization.get(token);
83
+ }
84
+ getTitle(group) {
85
+ return this.messageFor(group.dir === 'desc' ? 'sortedDescending' : 'sortedAscending');
86
+ }
81
87
  getDirectionIcon(group) {
82
88
  return group.dir === 'desc' ? 'sort-desc-sm' : 'sort-asc-sm';
83
89
  }
@@ -143,7 +149,7 @@ export class GroupPanelComponent {
143
149
  }
144
150
  }
145
151
  GroupPanelComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: GroupPanelComponent, deps: [{ token: i1.DragHintService }, { token: i2.DropCueService }, { token: i3.GroupInfoService }, { token: i4.LocalizationService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
146
- GroupPanelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: GroupPanelComponent, selector: "kendo-grid-group-panel", inputs: { text: "text", groups: "groups" }, outputs: { change: "change" }, host: { properties: { "class.k-grouping-header": "this.groupHeaderClass" } }, viewQueries: [{ propertyName: "dropTargets", predicate: DropTargetDirective, descendants: true }], ngImport: i0, template: `
152
+ GroupPanelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: GroupPanelComponent, selector: "kendo-grid-group-panel", inputs: { text: "text", navigable: "navigable", groups: "groups" }, outputs: { change: "change" }, host: { properties: { "class.k-grouping-header": "this.groupHeaderClass" } }, viewQueries: [{ propertyName: "dropTargets", predicate: DropTargetDirective, descendants: true }], ngImport: i0, template: `
147
153
  <div
148
154
  *ngIf="groups.length === 0"
149
155
  class="k-grouping-drop-container"
@@ -157,12 +163,14 @@ GroupPanelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ve
157
163
 
158
164
  <kendo-chiplist
159
165
  *ngIf="groups.length !== 0"
160
- >
166
+ [navigable]="navigable"
167
+ role="none">
161
168
  <kendo-chip
162
169
  *ngFor="let group of groups; let index = index;"
163
170
  kendoDropTarget
164
171
  kendoDraggableColumn
165
172
  kendoDraggable
173
+ [title]="getTitle(group)"
166
174
  [enableDrag]="true"
167
175
  [context]="{
168
176
  field: group.field,
@@ -187,7 +195,7 @@ GroupPanelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ve
187
195
  }"
188
196
  kendoDropTarget
189
197
  >&nbsp;</div>
190
- `, isInline: true, components: [{ type: i5.ChipListComponent, selector: "kendo-chiplist, kendo-chip-list", inputs: ["selection", "size"], outputs: ["selectedChange", "remove"] }, { type: i5.ChipComponent, selector: "kendo-chip", inputs: ["label", "icon", "svgIcon", "iconClass", "avatarClass", "selected", "removable", "removeIcon", "removeSvgIcon", "disabled", "size", "rounded", "fillMode", "themeColor"], outputs: ["remove", "contentClick"] }], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.DropTargetDirective, selector: "[kendoDropTarget]", inputs: ["context"], outputs: ["enter", "leave", "drop"] }, { type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i8.DraggableColumnDirective, selector: "[kendoDraggableColumn]", inputs: ["context", "enableDrag"], outputs: ["drag"] }, { type: i9.DraggableDirective, selector: "[kendoDraggable]", inputs: ["enableDrag"], outputs: ["kendoPress", "kendoDrag", "kendoRelease"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
198
+ `, isInline: true, components: [{ type: i5.ChipListComponent, selector: "kendo-chiplist, kendo-chip-list", inputs: ["selection", "size", "role", "navigable"], outputs: ["selectedChange", "remove"] }, { type: i5.ChipComponent, selector: "kendo-chip", inputs: ["label", "icon", "svgIcon", "iconClass", "avatarClass", "selected", "removable", "removeIcon", "removeSvgIcon", "disabled", "size", "rounded", "fillMode", "themeColor"], outputs: ["remove", "contentClick"] }], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.DropTargetDirective, selector: "[kendoDropTarget]", inputs: ["context"], outputs: ["enter", "leave", "drop"] }, { type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i8.DraggableColumnDirective, selector: "[kendoDraggableColumn]", inputs: ["context", "enableDrag"], outputs: ["drag"] }, { type: i9.DraggableDirective, selector: "[kendoDraggable]", inputs: ["enableDrag"], outputs: ["kendoPress", "kendoDrag", "kendoRelease"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
191
199
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: GroupPanelComponent, decorators: [{
192
200
  type: Component,
193
201
  args: [{
@@ -207,12 +215,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
207
215
 
208
216
  <kendo-chiplist
209
217
  *ngIf="groups.length !== 0"
210
- >
218
+ [navigable]="navigable"
219
+ role="none">
211
220
  <kendo-chip
212
221
  *ngFor="let group of groups; let index = index;"
213
222
  kendoDropTarget
214
223
  kendoDraggableColumn
215
224
  kendoDraggable
225
+ [title]="getTitle(group)"
216
226
  [enableDrag]="true"
217
227
  [context]="{
218
228
  field: group.field,
@@ -246,6 +256,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
246
256
  args: ["class.k-grouping-header"]
247
257
  }], text: [{
248
258
  type: Input
259
+ }], navigable: [{
260
+ type: Input
249
261
  }], groups: [{
250
262
  type: Input
251
263
  }], dropTargets: [{
package/esm2020/index.mjs CHANGED
@@ -14,6 +14,8 @@ export { ColumnGroupComponent } from './columns/column-group.component';
14
14
  export { CheckboxColumnComponent } from './columns/checkbox-column.component';
15
15
  export { ToolbarComponent } from './rendering/toolbar/toolbar.component';
16
16
  export { ToolbarTemplateDirective } from './rendering/toolbar/toolbar-template.directive';
17
+ export { GridToolbarFocusableDirective } from './rendering/toolbar/toolbar-focusable.directive';
18
+ export { GridToolbarNavigationService } from './rendering/toolbar/toolbar-navigation.service';
17
19
  export { CellTemplateDirective } from './rendering/cell-template.directive';
18
20
  export { CellLoadingTemplateDirective } from './rendering/cell-loading.template.directive';
19
21
  export { LoadingTemplateDirective } from './rendering/loading-template.directive';
@@ -11,7 +11,7 @@ import * as i0 from "@angular/core";
11
11
  export class GridMessages extends ComponentMessages {
12
12
  }
13
13
  GridMessages.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: GridMessages, deps: null, target: i0.ɵɵFactoryTarget.Directive });
14
- GridMessages.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.12", type: GridMessages, selector: "kendo-grid-messages-base", inputs: { groupPanelEmpty: "groupPanelEmpty", noRecords: "noRecords", pagerLabel: "pagerLabel", pagerFirstPage: "pagerFirstPage", pagerLastPage: "pagerLastPage", pagerPreviousPage: "pagerPreviousPage", pagerNextPage: "pagerNextPage", pagerPage: "pagerPage", pagerItemsPerPage: "pagerItemsPerPage", pagerOf: "pagerOf", pagerItems: "pagerItems", pagerPageNumberInputTitle: "pagerPageNumberInputTitle", selectPage: "selectPage", filter: "filter", filterInputLabel: "filterInputLabel", filterMenuTitle: "filterMenuTitle", filterMenuOperatorsDropDownLabel: "filterMenuOperatorsDropDownLabel", filterMenuLogicDropDownLabel: "filterMenuLogicDropDownLabel", filterEqOperator: "filterEqOperator", filterNotEqOperator: "filterNotEqOperator", filterIsNullOperator: "filterIsNullOperator", filterIsNotNullOperator: "filterIsNotNullOperator", filterIsEmptyOperator: "filterIsEmptyOperator", filterIsNotEmptyOperator: "filterIsNotEmptyOperator", filterStartsWithOperator: "filterStartsWithOperator", filterContainsOperator: "filterContainsOperator", filterNotContainsOperator: "filterNotContainsOperator", filterEndsWithOperator: "filterEndsWithOperator", filterGteOperator: "filterGteOperator", filterGtOperator: "filterGtOperator", filterLteOperator: "filterLteOperator", filterLtOperator: "filterLtOperator", filterIsTrue: "filterIsTrue", filterIsFalse: "filterIsFalse", filterBooleanAll: "filterBooleanAll", filterAfterOrEqualOperator: "filterAfterOrEqualOperator", filterAfterOperator: "filterAfterOperator", filterBeforeOperator: "filterBeforeOperator", filterBeforeOrEqualOperator: "filterBeforeOrEqualOperator", filterFilterButton: "filterFilterButton", filterClearButton: "filterClearButton", filterAndLogic: "filterAndLogic", filterOrLogic: "filterOrLogic", loading: "loading", gridLabel: "gridLabel", columnMenu: "columnMenu", setColumnPosition: "setColumnPosition", columns: "columns", lock: "lock", unlock: "unlock", stick: "stick", unstick: "unstick", sortable: "sortable", sortAscending: "sortAscending", sortDescending: "sortDescending", autosizeThisColumn: "autosizeThisColumn", autosizeAllColumns: "autosizeAllColumns", sortedAscending: "sortedAscending", sortedDescending: "sortedDescending", sortedDefault: "sortedDefault", columnsApply: "columnsApply", columnsReset: "columnsReset", detailExpand: "detailExpand", detailCollapse: "detailCollapse", filterDateToday: "filterDateToday", filterDateToggle: "filterDateToggle", filterNumericDecrement: "filterNumericDecrement", filterNumericIncrement: "filterNumericIncrement", selectionCheckboxLabel: "selectionCheckboxLabel", selectAllCheckboxLabel: "selectAllCheckboxLabel", groupCollapse: "groupCollapse", groupExpand: "groupExpand" }, usesInheritance: true, ngImport: i0 });
14
+ GridMessages.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.12", type: GridMessages, selector: "kendo-grid-messages-base", inputs: { groupPanelEmpty: "groupPanelEmpty", noRecords: "noRecords", pagerLabel: "pagerLabel", pagerFirstPage: "pagerFirstPage", pagerLastPage: "pagerLastPage", pagerPreviousPage: "pagerPreviousPage", pagerNextPage: "pagerNextPage", pagerPage: "pagerPage", pagerItemsPerPage: "pagerItemsPerPage", pagerOf: "pagerOf", pagerItems: "pagerItems", pagerPageNumberInputTitle: "pagerPageNumberInputTitle", selectPage: "selectPage", filter: "filter", filterInputLabel: "filterInputLabel", filterMenuTitle: "filterMenuTitle", filterMenuOperatorsDropDownLabel: "filterMenuOperatorsDropDownLabel", filterMenuLogicDropDownLabel: "filterMenuLogicDropDownLabel", filterEqOperator: "filterEqOperator", filterNotEqOperator: "filterNotEqOperator", filterIsNullOperator: "filterIsNullOperator", filterIsNotNullOperator: "filterIsNotNullOperator", filterIsEmptyOperator: "filterIsEmptyOperator", filterIsNotEmptyOperator: "filterIsNotEmptyOperator", filterStartsWithOperator: "filterStartsWithOperator", filterContainsOperator: "filterContainsOperator", filterNotContainsOperator: "filterNotContainsOperator", filterEndsWithOperator: "filterEndsWithOperator", filterGteOperator: "filterGteOperator", filterGtOperator: "filterGtOperator", filterLteOperator: "filterLteOperator", filterLtOperator: "filterLtOperator", filterIsTrue: "filterIsTrue", filterIsFalse: "filterIsFalse", filterBooleanAll: "filterBooleanAll", filterAfterOrEqualOperator: "filterAfterOrEqualOperator", filterAfterOperator: "filterAfterOperator", filterBeforeOperator: "filterBeforeOperator", filterBeforeOrEqualOperator: "filterBeforeOrEqualOperator", filterFilterButton: "filterFilterButton", filterClearButton: "filterClearButton", filterAndLogic: "filterAndLogic", filterOrLogic: "filterOrLogic", loading: "loading", gridLabel: "gridLabel", columnMenu: "columnMenu", setColumnPosition: "setColumnPosition", columns: "columns", lock: "lock", unlock: "unlock", stick: "stick", unstick: "unstick", sortable: "sortable", sortAscending: "sortAscending", sortDescending: "sortDescending", autosizeThisColumn: "autosizeThisColumn", autosizeAllColumns: "autosizeAllColumns", sortedAscending: "sortedAscending", sortedDescending: "sortedDescending", sortedDefault: "sortedDefault", columnsApply: "columnsApply", columnsReset: "columnsReset", detailExpand: "detailExpand", detailCollapse: "detailCollapse", filterDateToday: "filterDateToday", filterDateToggle: "filterDateToggle", filterNumericDecrement: "filterNumericDecrement", filterNumericIncrement: "filterNumericIncrement", selectionCheckboxLabel: "selectionCheckboxLabel", selectAllCheckboxLabel: "selectAllCheckboxLabel", groupCollapse: "groupCollapse", groupExpand: "groupExpand", topToolbarLabel: "topToolbarLabel", bottomToolbarLabel: "bottomToolbarLabel", groupPanelLabel: "groupPanelLabel" }, usesInheritance: true, ngImport: i0 });
15
15
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: GridMessages, decorators: [{
16
16
  type: Directive,
17
17
  args: [{
@@ -162,4 +162,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
162
162
  type: Input
163
163
  }], groupExpand: [{
164
164
  type: Input
165
+ }], topToolbarLabel: [{
166
+ type: Input
167
+ }], bottomToolbarLabel: [{
168
+ type: Input
169
+ }], groupPanelLabel: [{
170
+ type: Input
165
171
  }] } });
@@ -105,6 +105,7 @@ export class NavigationService {
105
105
  this.cursor = new NavigationCursor(this.model);
106
106
  this.pagerIsNavigable = false;
107
107
  this.tableIsNavigable = false;
108
+ this.toolbarIsNavigable = false;
108
109
  this.changes = this.cursor.changes;
109
110
  }
110
111
  set metadata(value) {
@@ -123,6 +124,9 @@ export class NavigationService {
123
124
  get tableEnabled() {
124
125
  return this.alive && this.tableIsNavigable;
125
126
  }
127
+ get toolbarEnabled() {
128
+ return this.alive && this.toolbarIsNavigable;
129
+ }
126
130
  get activeCell() {
127
131
  if (this.mode !== 0 /* Standby */) {
128
132
  return this.cursor.cell;
@@ -318,6 +322,7 @@ export class NavigationService {
318
322
  setActiveSections(navigableOptions) {
319
323
  this.pagerIsNavigable = navigableOptions.includes('pager');
320
324
  this.tableIsNavigable = navigableOptions.includes('table');
325
+ this.toolbarIsNavigable = navigableOptions.includes('toolbar');
321
326
  }
322
327
  focusAdjacentCell(fwd, wrap) {
323
328
  this.focusCell();
@@ -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: 1678093026,
13
- version: '11.4.0-develop.1',
12
+ publishDate: 1678804365,
13
+ version: '11.4.0-develop.10',
14
14
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'
15
15
  };
@@ -213,7 +213,7 @@ CellComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version:
213
213
  </ng-container>
214
214
  </ng-container>
215
215
  </ng-container>
216
- `, isInline: true, components: [{ type: i4.NumericTextBoxComponent, selector: "kendo-numerictextbox", inputs: ["focusableId", "disabled", "readonly", "title", "autoCorrect", "format", "max", "min", "decimals", "placeholder", "step", "spinners", "rangeValidation", "tabindex", "tabIndex", "changeValueOnScroll", "selectOnFocus", "value", "maxlength", "size", "rounded", "fillMode"], outputs: ["valueChange", "focus", "blur"], exportAs: ["kendoNumericTextBox"] }, { type: i5.DatePickerComponent, selector: "kendo-datepicker", inputs: ["focusableId", "cellTemplate", "monthCellTemplate", "yearCellTemplate", "decadeCellTemplate", "centuryCellTemplate", "weekNumberTemplate", "headerTitleTemplate", "navigationItemTemplate", "activeView", "bottomView", "topView", "calendarType", "animateCalendarNavigation", "disabled", "readonly", "readOnlyInput", "popupSettings", "navigation", "min", "max", "incompleteDateValidation", "focusedDate", "value", "format", "twoDigitYearMax", "formatPlaceholder", "placeholder", "tabindex", "tabIndex", "disabledDates", "title", "rangeValidation", "disabledDatesValidation", "weekNumber", "size", "rounded", "fillMode"], outputs: ["valueChange", "focus", "blur", "open", "close"], exportAs: ["kendo-datepicker"] }], directives: [{ type: i6.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i6.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i7.FocusableDirective, selector: "[kendoGridFocusable],\n [kendoGridEditCommand],\n [kendoGridRemoveCommand],\n [kendoGridSaveCommand],\n [kendoGridCancelCommand],\n [kendoGridSelectionCheckbox]\n ", inputs: ["kendoGridFocusable"] }, { type: i8.SelectionCheckboxDirective, selector: "[kendoGridSelectionCheckbox]", inputs: ["kendoGridSelectionCheckbox"] }, { type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i9.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i9.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i6.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { type: i9.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }], pipes: { "valueOf": i10.FieldAccessorPipe } });
216
+ `, isInline: true, components: [{ type: i4.NumericTextBoxComponent, selector: "kendo-numerictextbox", inputs: ["focusableId", "disabled", "readonly", "title", "autoCorrect", "format", "max", "min", "decimals", "placeholder", "step", "spinners", "rangeValidation", "tabindex", "tabIndex", "changeValueOnScroll", "selectOnFocus", "value", "maxlength", "size", "rounded", "fillMode"], outputs: ["valueChange", "focus", "blur"], exportAs: ["kendoNumericTextBox"] }, { type: i5.DatePickerComponent, selector: "kendo-datepicker", inputs: ["focusableId", "cellTemplate", "monthCellTemplate", "yearCellTemplate", "decadeCellTemplate", "centuryCellTemplate", "weekNumberTemplate", "headerTitleTemplate", "navigationItemTemplate", "activeView", "bottomView", "topView", "calendarType", "animateCalendarNavigation", "disabled", "readonly", "readOnlyInput", "popupSettings", "navigation", "min", "max", "incompleteDateValidation", "focusedDate", "value", "format", "twoDigitYearMax", "formatPlaceholder", "placeholder", "tabindex", "tabIndex", "disabledDates", "title", "subtitle", "rangeValidation", "disabledDatesValidation", "weekNumber", "size", "rounded", "fillMode", "adaptiveMode"], outputs: ["valueChange", "focus", "blur", "open", "close"], exportAs: ["kendo-datepicker"] }], directives: [{ type: i6.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i6.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i7.FocusableDirective, selector: "[kendoGridFocusable],\n [kendoGridEditCommand],\n [kendoGridRemoveCommand],\n [kendoGridSaveCommand],\n [kendoGridCancelCommand],\n [kendoGridSelectionCheckbox]\n ", inputs: ["kendoGridFocusable"] }, { type: i8.SelectionCheckboxDirective, selector: "[kendoGridSelectionCheckbox]", inputs: ["kendoGridSelectionCheckbox"] }, { type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i9.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i9.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i6.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { type: i9.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }], pipes: { "valueOf": i10.FieldAccessorPipe } });
217
217
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: CellComponent, decorators: [{
218
218
  type: Component,
219
219
  args: [{