@progress/kendo-angular-treelist 12.0.2-develop.3 → 12.1.0-develop.2

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 (51) hide show
  1. package/common/provider.service.d.ts +6 -0
  2. package/esm2020/common/provider.service.mjs +9 -3
  3. package/esm2020/filtering/cell/filter-cell-operators.component.mjs +1 -1
  4. package/esm2020/filtering/cell/numeric-filter-cell.component.mjs +1 -1
  5. package/esm2020/filtering/cell/string-filter-cell.component.mjs +1 -1
  6. package/esm2020/filtering/filter-row.component.mjs +2 -2
  7. package/esm2020/index.mjs +1 -0
  8. package/esm2020/localization/messages.mjs +7 -1
  9. package/esm2020/navigation/focus-group.mjs +1 -0
  10. package/esm2020/navigation/focus-root.mjs +18 -8
  11. package/esm2020/navigation/focusable.directive.mjs +28 -11
  12. package/esm2020/navigation/navigation.service.mjs +1 -1
  13. package/esm2020/package-metadata.mjs +2 -2
  14. package/esm2020/pager/pager-input.component.mjs +16 -6
  15. package/esm2020/pager/pager-next-buttons.component.mjs +34 -15
  16. package/esm2020/pager/pager-numeric-buttons.component.mjs +12 -8
  17. package/esm2020/pager/pager-page-sizes.component.mjs +11 -5
  18. package/esm2020/pager/pager-prev-buttons.component.mjs +31 -14
  19. package/esm2020/pager/pager.component.mjs +232 -21
  20. package/esm2020/rendering/cell.component.mjs +3 -1
  21. package/esm2020/rendering/common/dom-queries.mjs +21 -1
  22. package/esm2020/rendering/header/header.component.mjs +10 -3
  23. package/esm2020/rendering/list.component.mjs +2 -2
  24. package/esm2020/rendering/table-body.component.mjs +6 -2
  25. package/esm2020/rendering/toolbar/toolbar-focusable.directive.mjs +63 -0
  26. package/esm2020/rendering/toolbar/toolbar-navigation.service.mjs +53 -0
  27. package/esm2020/rendering/toolbar/toolbar.component.mjs +44 -5
  28. package/esm2020/treelist.component.mjs +64 -11
  29. package/esm2020/treelist.module.mjs +8 -3
  30. package/esm2020/utils.mjs +4 -0
  31. package/fesm2015/progress-kendo-angular-treelist.mjs +636 -115
  32. package/fesm2020/progress-kendo-angular-treelist.mjs +631 -115
  33. package/index.d.ts +1 -0
  34. package/localization/messages.d.ts +20 -1
  35. package/navigation/focus-group.d.ts +2 -1
  36. package/navigation/focus-root.d.ts +8 -2
  37. package/navigation/focusable.directive.d.ts +7 -1
  38. package/package.json +15 -15
  39. package/pager/pager-input.component.d.ts +3 -1
  40. package/pager/pager-next-buttons.component.d.ts +12 -2
  41. package/pager/pager-page-sizes.component.d.ts +3 -2
  42. package/pager/pager-prev-buttons.component.d.ts +7 -1
  43. package/pager/pager.component.d.ts +35 -4
  44. package/rendering/common/dom-queries.d.ts +8 -0
  45. package/rendering/toolbar/toolbar-focusable.directive.d.ts +28 -0
  46. package/rendering/toolbar/toolbar-navigation.service.d.ts +21 -0
  47. package/rendering/toolbar/toolbar.component.d.ts +14 -4
  48. package/schematics/ngAdd/index.js +3 -3
  49. package/treelist.component.d.ts +7 -0
  50. package/treelist.module.d.ts +76 -75
  51. package/utils.d.ts +4 -0
@@ -3,7 +3,7 @@
3
3
  * Licensed under commercial license. See LICENSE.md in the project root for more information
4
4
  *-------------------------------------------------------------------------------------------*/
5
5
  import * as i0 from '@angular/core';
6
- import { Directive, Optional, EventEmitter, Injectable, QueryList, Input, ContentChildren, ContentChild, InjectionToken, forwardRef, Component, SkipSelf, Host, isDevMode, SecurityContext, Output, Inject, HostBinding, Self, ViewChild, HostListener, ViewChildren, Pipe, ChangeDetectionStrategy, ViewEncapsulation, NgModule } from '@angular/core';
6
+ import { Directive, Optional, EventEmitter, Injectable, QueryList, Input, ContentChildren, ContentChild, InjectionToken, forwardRef, Component, SkipSelf, Host, isDevMode, SecurityContext, Inject, HostBinding, Output, Self, ViewChild, HostListener, ViewChildren, Pipe, ChangeDetectionStrategy, ViewEncapsulation, NgModule } from '@angular/core';
7
7
  import * as i4 from '@angular/common';
8
8
  import { CommonModule } from '@angular/common';
9
9
  import * as i3$1 from '@angular/forms';
@@ -25,15 +25,15 @@ import * as i3$3 from '@progress/kendo-angular-icons';
25
25
  import { IconsModule } from '@progress/kendo-angular-icons';
26
26
  import * as i3 from '@progress/kendo-angular-dropdowns';
27
27
  import { DropDownListModule, AutoCompleteModule, DropDownsModule } from '@progress/kendo-angular-dropdowns';
28
- import * as i2 from '@progress/kendo-angular-inputs';
28
+ import * as i4$1 from '@progress/kendo-angular-inputs';
29
29
  import { NumericTextBoxComponent, InputsModule, NumericTextBoxModule } from '@progress/kendo-angular-inputs';
30
30
  import * as i3$2 from '@progress/kendo-angular-dateinputs';
31
31
  import { DatePickerModule } from '@progress/kendo-angular-dateinputs';
32
32
  import { trigger, state, style, transition, animate } from '@angular/animations';
33
- import * as i3$4 from '@progress/kendo-angular-buttons';
33
+ import * as i4$2 from '@progress/kendo-angular-buttons';
34
34
  import { ButtonModule, Button } from '@progress/kendo-angular-buttons';
35
35
  import * as i1$4 from '@progress/kendo-angular-intl';
36
- import * as i4$1 from '@progress/kendo-angular-label';
36
+ import * as i4$3 from '@progress/kendo-angular-label';
37
37
  import { LabelModule } from '@progress/kendo-angular-label';
38
38
  import { PDFExportMarginComponent, PDFExportTemplateDirective, PDFExportComponent } from '@progress/kendo-angular-pdf-export';
39
39
  import { saveAs } from '@progress/kendo-file-saver';
@@ -46,8 +46,8 @@ const packageMetadata = {
46
46
  name: '@progress/kendo-angular-treelist',
47
47
  productName: 'Kendo UI for Angular',
48
48
  productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],
49
- publishDate: 1683884362,
50
- version: '12.0.2-develop.3',
49
+ publishDate: 1684164986,
50
+ version: '12.1.0-develop.2',
51
51
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'
52
52
  };
53
53
 
@@ -614,6 +614,10 @@ const cancelAnimationFrame = wnd.cancelAnimationFrame || wnd.msCancelRequestAnim
614
614
  /** @hidden */
615
615
  const isColumnEditable = (column, formGroup) => column.isEditable !== false &&
616
616
  (column.editTemplate || (formGroup && column.field && formGroup.get(column.field)));
617
+ /**
618
+ * @hidden
619
+ */
620
+ const replaceMessagePlaceholder = (message, name, value) => message.replace(new RegExp(`\{\\s*${name}\\s*\}`, 'g'), value);
617
621
 
618
622
  /**
619
623
  * Represents the filter-cell template ([see example]({% slug builtinfiltertemplate_treelist %}#toc-customizing-filter-rows)).
@@ -2643,8 +2647,9 @@ const isFocusableWithTabKey = (element, checkVisibility = true) => {
2643
2647
  return false;
2644
2648
  }
2645
2649
  const tabIndex = element.getAttribute('tabIndex');
2650
+ const ariaHidden = element.getAttribute('aria-hidden') === 'true';
2646
2651
  const visible = !checkVisibility || isVisible(element);
2647
- return visible && tabIndex !== '-1';
2652
+ return visible && !ariaHidden && tabIndex !== '-1';
2648
2653
  };
2649
2654
  /**
2650
2655
  * @hidden
@@ -2667,6 +2672,19 @@ const findElement = (node, predicate, matchSelf = true) => {
2667
2672
  node = node.nextSibling;
2668
2673
  }
2669
2674
  };
2675
+ /**
2676
+ * @hidden
2677
+ */
2678
+ const findLastElement = (node, predicate, matchSelf = true) => {
2679
+ let last = null;
2680
+ findElement(node, (node) => {
2681
+ if (predicate(node)) {
2682
+ last = node;
2683
+ }
2684
+ return false;
2685
+ }, matchSelf);
2686
+ return last;
2687
+ };
2670
2688
  /**
2671
2689
  * @hidden
2672
2690
  */
@@ -2679,6 +2697,12 @@ const findFocusable = (element, checkVisibility = true) => {
2679
2697
  const findFocusableChild = (element, checkVisibility = true) => {
2680
2698
  return findElement(element, (node) => isFocusableWithTabKey(node, checkVisibility), false);
2681
2699
  };
2700
+ /**
2701
+ * @hidden
2702
+ */
2703
+ const findLastFocusableChild = (element, checkVisibility = true) => {
2704
+ return findLastElement(element, (node) => isFocusableWithTabKey(node, checkVisibility), false);
2705
+ };
2682
2706
  /**
2683
2707
  * @hidden
2684
2708
  */
@@ -3244,39 +3268,51 @@ class ColumnReorderEvent extends PreventableEvent {
3244
3268
  }
3245
3269
  }
3246
3270
 
3271
+ /**
3272
+ * @hidden
3273
+ */
3274
+ const FOCUS_ROOT_ACTIVE = new InjectionToken('focus-root-initial-active-state');
3247
3275
  /**
3248
3276
  * @hidden
3249
3277
  */
3250
3278
  class FocusRoot {
3251
- constructor() {
3279
+ constructor(active = false) {
3280
+ this.active = active;
3252
3281
  this.groups = new Set();
3253
3282
  }
3254
3283
  registerGroup(group) {
3255
- if (this.alive) {
3284
+ if (this.active) {
3256
3285
  this.groups.add(group);
3257
3286
  }
3258
3287
  }
3259
3288
  unregisterGroup(group) {
3260
- if (this.alive) {
3289
+ if (this.active) {
3261
3290
  this.groups.delete(group);
3262
3291
  }
3263
3292
  }
3264
3293
  activate() {
3265
- if (this.alive) {
3294
+ if (this.active) {
3266
3295
  this.groups.forEach(f => f.activate());
3267
3296
  }
3268
3297
  }
3269
3298
  deactivate() {
3270
- if (this.alive) {
3299
+ if (this.active) {
3271
3300
  this.groups.forEach(f => f.deactivate());
3272
3301
  }
3273
3302
  }
3274
3303
  }
3275
- FocusRoot.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FocusRoot, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
3304
+ FocusRoot.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FocusRoot, deps: [{ token: FOCUS_ROOT_ACTIVE, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
3276
3305
  FocusRoot.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FocusRoot });
3277
3306
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FocusRoot, decorators: [{
3278
3307
  type: Injectable
3279
- }] });
3308
+ }], ctorParameters: function () {
3309
+ return [{ type: undefined, decorators: [{
3310
+ type: Optional
3311
+ }, {
3312
+ type: Inject,
3313
+ args: [FOCUS_ROOT_ACTIVE]
3314
+ }] }];
3315
+ } });
3280
3316
 
3281
3317
  /**
3282
3318
  * @hidden
@@ -4046,6 +4082,7 @@ class FocusGroup {
4046
4082
  }
4047
4083
  ngOnDestroy() {
4048
4084
  this.root.unregisterGroup(this);
4085
+ this.active = true;
4049
4086
  }
4050
4087
  /**
4051
4088
  * @hidden
@@ -4134,27 +4171,42 @@ class FocusableDirective {
4134
4171
  this.renderer = renderer;
4135
4172
  this.group = group;
4136
4173
  this.active = true;
4174
+ this._enabled = true;
4137
4175
  }
4138
4176
  /**
4139
4177
  * @hidden
4140
4178
  */
4141
- set addCellContext(value) { this.cellContext = value; }
4179
+ set enabled(value) {
4180
+ if (value !== this.enabled) {
4181
+ this._enabled = value;
4182
+ if (this.element) {
4183
+ this.element.toggle(this.active && value);
4184
+ }
4185
+ }
4186
+ }
4187
+ get enabled() {
4188
+ return this._enabled;
4189
+ }
4190
+ /**
4191
+ * @hidden
4192
+ */
4193
+ set addCellContext(value) { this.cellContext = value; this.enabled = true; }
4142
4194
  /**
4143
4195
  * @hidden
4144
4196
  */
4145
- set editCellContext(value) { this.cellContext = value; }
4197
+ set editCellContext(value) { this.cellContext = value; this.enabled = true; }
4146
4198
  /**
4147
4199
  * @hidden
4148
4200
  */
4149
- set removeCellContext(value) { this.cellContext = value; }
4201
+ set removeCellContext(value) { this.cellContext = value; this.enabled = true; }
4150
4202
  /**
4151
4203
  * @hidden
4152
4204
  */
4153
- set saveCellContext(value) { this.cellContext = value; }
4205
+ set saveCellContext(value) { this.cellContext = value; this.enabled = true; }
4154
4206
  /**
4155
4207
  * @hidden
4156
4208
  */
4157
- set cancelCellContext(value) { this.cellContext = value; }
4209
+ set cancelCellContext(value) { this.cellContext = value; this.enabled = true; }
4158
4210
  ngOnInit() {
4159
4211
  if (this.cellContext && this.cellContext.focusGroup) {
4160
4212
  this.group = this.cellContext.focusGroup;
@@ -4183,26 +4235,26 @@ class FocusableDirective {
4183
4235
  toggle(active) {
4184
4236
  if (this.element && active !== this.active) {
4185
4237
  this.active = active;
4186
- this.element.toggle(active);
4238
+ this.element.toggle(this.enabled && active);
4187
4239
  }
4188
4240
  }
4189
4241
  /**
4190
4242
  * @hidden
4191
4243
  */
4192
4244
  canFocus() {
4193
- return this.element && this.element.canFocus();
4245
+ return this.enabled && this.element && this.element.canFocus();
4194
4246
  }
4195
4247
  /**
4196
4248
  * @hidden
4197
4249
  */
4198
4250
  isNavigable() {
4199
- return this.element && this.element.isNavigable();
4251
+ return this.enabled && this.element && this.element.isNavigable();
4200
4252
  }
4201
4253
  /**
4202
4254
  * @hidden
4203
4255
  */
4204
4256
  focus() {
4205
- if (this.element) {
4257
+ if (this.enabled && this.element) {
4206
4258
  this.element.focus();
4207
4259
  }
4208
4260
  }
@@ -4210,7 +4262,7 @@ class FocusableDirective {
4210
4262
  * @hidden
4211
4263
  */
4212
4264
  hasFocus() {
4213
- return this.element && this.element.hasFocus();
4265
+ return this.enabled && this.element && this.element.hasFocus();
4214
4266
  }
4215
4267
  /**
4216
4268
  * @hidden
@@ -4220,7 +4272,7 @@ class FocusableDirective {
4220
4272
  }
4221
4273
  }
4222
4274
  FocusableDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FocusableDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: FocusGroup, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
4223
- FocusableDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.12", type: FocusableDirective, selector: "[kendoTreeListFocusable],\n [kendoTreeListAddCommand],\n [kendoTreeListEditCommand],\n [kendoTreeListRemoveCommand],\n [kendoTreeListSaveCommand],\n [kendoTreeListCancelCommand]\n ", inputs: { cellContext: ["kendoTreeListFocusable", "cellContext"], addCellContext: ["kendoTreeListAddCommand", "addCellContext"], editCellContext: ["kendoTreeListEditCommand", "editCellContext"], removeCellContext: ["kendoTreeListRemoveCommand", "removeCellContext"], saveCellContext: ["kendoTreeListSaveCommand", "saveCellContext"], cancelCellContext: ["kendoTreeListCancelCommand", "cancelCellContext"] }, ngImport: i0 });
4275
+ FocusableDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.12", type: FocusableDirective, selector: "[kendoTreeListFocusable],\n [kendoTreeListAddCommand],\n [kendoTreeListEditCommand],\n [kendoTreeListRemoveCommand],\n [kendoTreeListSaveCommand],\n [kendoTreeListCancelCommand]\n ", inputs: { cellContext: ["kendoTreeListFocusable", "cellContext"], enabled: "enabled", addCellContext: ["kendoTreeListAddCommand", "addCellContext"], editCellContext: ["kendoTreeListEditCommand", "editCellContext"], removeCellContext: ["kendoTreeListRemoveCommand", "removeCellContext"], saveCellContext: ["kendoTreeListSaveCommand", "saveCellContext"], cancelCellContext: ["kendoTreeListCancelCommand", "cancelCellContext"] }, ngImport: i0 });
4224
4276
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FocusableDirective, decorators: [{
4225
4277
  type: Directive,
4226
4278
  args: [{
@@ -4239,6 +4291,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
4239
4291
  }, propDecorators: { cellContext: [{
4240
4292
  type: Input,
4241
4293
  args: ['kendoTreeListFocusable']
4294
+ }], enabled: [{
4295
+ type: Input
4242
4296
  }], addCellContext: [{
4243
4297
  type: Input,
4244
4298
  args: ['kendoTreeListAddCommand']
@@ -4358,7 +4412,7 @@ class NavigationService {
4358
4412
  }
4359
4413
  init(meta) {
4360
4414
  this.alive = true;
4361
- this.focusRoot.alive = true;
4415
+ this.focusRoot.active = true;
4362
4416
  this.metadata = meta;
4363
4417
  const onStableSubscriber = (...operators) => (args) => this.zone.isStable ?
4364
4418
  from([true]).pipe(map(() => args)) :
@@ -5028,6 +5082,54 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
5028
5082
  type: Injectable
5029
5083
  }] });
5030
5084
 
5085
+ /**
5086
+ * @hidden
5087
+ */
5088
+ class TreeListToolbarNavigationService {
5089
+ constructor(renderer) {
5090
+ this.renderer = renderer;
5091
+ this.navigableElements = [];
5092
+ this.currentActiveIndex = 0;
5093
+ this.defaultFocusableSelector = `
5094
+ [kendoTreeListToolbarFocusable],
5095
+ [kendoTreeListAddCommand],
5096
+ [kendoTreeListCancelCommand],
5097
+ [kendoTreeListEditCommand],
5098
+ [kendoTreeListRemoveCommand],
5099
+ [kendoTreeListSaveCommand],
5100
+ [kendoTreeListExcelCommand],
5101
+ [kendoTreeListPDFCommand]
5102
+ `;
5103
+ }
5104
+ notify() {
5105
+ // ensure focusable elements are in the same order as in the DOM
5106
+ this.navigableElements = this.navigableElements.length && Array.from(this.navigableElements[0].parentElement.querySelectorAll(this.defaultFocusableSelector)) || [];
5107
+ this.currentActiveIndex = 0;
5108
+ this.updateFocus();
5109
+ }
5110
+ focus() {
5111
+ var _a;
5112
+ (_a = this.navigableElements[this.currentActiveIndex]) === null || _a === void 0 ? void 0 : _a.focus();
5113
+ }
5114
+ updateFocus() {
5115
+ if (!this.navigableElements.length) {
5116
+ return;
5117
+ }
5118
+ this.navigableElements.forEach(el => {
5119
+ this.renderer.setAttribute(el, 'tabindex', '-1');
5120
+ });
5121
+ this.renderer.setAttribute(this.navigableElements[this.currentActiveIndex], 'tabindex', '0');
5122
+ if (isDocumentAvailable() && document.activeElement.closest('.k-toolbar')) {
5123
+ this.navigableElements[this.currentActiveIndex].focus();
5124
+ }
5125
+ }
5126
+ }
5127
+ TreeListToolbarNavigationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: TreeListToolbarNavigationService, deps: [{ token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Injectable });
5128
+ TreeListToolbarNavigationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: TreeListToolbarNavigationService });
5129
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: TreeListToolbarNavigationService, decorators: [{
5130
+ type: Injectable
5131
+ }], ctorParameters: function () { return [{ type: i0.Renderer2 }]; } });
5132
+
5031
5133
  /**
5032
5134
  * @hidden
5033
5135
  *
@@ -5038,20 +5140,31 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
5038
5140
  * and a avoids dependency cycles between components.
5039
5141
  */
5040
5142
  class ContextService {
5143
+ constructor(renderer) {
5144
+ this.renderer = renderer;
5145
+ this.topToolbarNavigation = new TreeListToolbarNavigationService(this.renderer);
5146
+ this.bottomToolbarNavigation = new TreeListToolbarNavigationService(this.renderer);
5147
+ }
5041
5148
  }
5042
- ContextService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ContextService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
5149
+ ContextService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ContextService, deps: [{ token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Injectable });
5043
5150
  ContextService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ContextService });
5044
5151
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ContextService, decorators: [{
5045
5152
  type: Injectable
5046
- }] });
5153
+ }], ctorParameters: function () { return [{ type: i0.Renderer2 }]; } });
5047
5154
 
5155
+ /* eslint-disable @typescript-eslint/no-inferrable-types */
5048
5156
  /**
5049
5157
  * @hidden
5050
5158
  */
5051
5159
  class ToolbarComponent {
5052
- constructor(ctx) {
5160
+ constructor(elem, renderer, ctx) {
5161
+ this.elem = elem;
5162
+ this.renderer = renderer;
5053
5163
  this.ctx = ctx;
5164
+ this.hostRole = 'toolbar';
5054
5165
  this.context = {};
5166
+ this.subs = new Subscription();
5167
+ this.navigationService = this.ctx[`${this.elem.nativeElement.getAttribute('position')}ToolbarNavigation`];
5055
5168
  }
5056
5169
  set position(value) {
5057
5170
  this.context.position = value;
@@ -5059,9 +5172,35 @@ class ToolbarComponent {
5059
5172
  get toolbarTemplateRef() {
5060
5173
  return this.ctx.treelist.toolbarTemplate ? this.ctx.treelist.toolbarTemplate.templateRef : undefined;
5061
5174
  }
5175
+ ngAfterViewInit() {
5176
+ const element = this.elem.nativeElement;
5177
+ this.subs.add(this.renderer.listen(element, 'keydown', event => this.onKeyDown(event)));
5178
+ }
5179
+ ngOnDestroy() {
5180
+ this.subs.unsubscribe();
5181
+ }
5182
+ onKeyDown(event) {
5183
+ if (this.navigable && isDocumentAvailable() && this.navigationService.navigableElements.length) {
5184
+ const keyCode = event.keyCode;
5185
+ if (keyCode === Keys.ArrowLeft || keyCode === Keys.ArrowRight) {
5186
+ event.preventDefault();
5187
+ const dir = keyCode === Keys.ArrowLeft ? -1 : 1;
5188
+ this.changeFocusedItem(dir);
5189
+ }
5190
+ }
5191
+ }
5192
+ changeFocusedItem(dir) {
5193
+ this.navigationService.currentActiveIndex += dir;
5194
+ const bottomRange = this.navigationService.currentActiveIndex < 0;
5195
+ const topRange = this.navigationService.currentActiveIndex >= this.navigationService.navigableElements.length;
5196
+ if (bottomRange || topRange) {
5197
+ this.navigationService.currentActiveIndex = bottomRange ? this.navigationService.navigableElements.length - 1 : 0;
5198
+ }
5199
+ this.navigationService.updateFocus();
5200
+ }
5062
5201
  }
5063
- ToolbarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ToolbarComponent, deps: [{ token: ContextService }], target: i0.ɵɵFactoryTarget.Component });
5064
- ToolbarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: ToolbarComponent, selector: "kendo-treelist-toolbar", inputs: { position: "position" }, ngImport: i0, template: `
5202
+ ToolbarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ToolbarComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: ContextService }], target: i0.ɵɵFactoryTarget.Component });
5203
+ ToolbarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: ToolbarComponent, selector: "kendo-treelist-toolbar", inputs: { position: "position", navigable: "navigable" }, host: { properties: { "attr.role": "this.hostRole" } }, ngImport: i0, template: `
5065
5204
  <ng-template
5066
5205
  *ngIf="toolbarTemplateRef"
5067
5206
  [ngTemplateOutlet]="toolbarTemplateRef"
@@ -5082,7 +5221,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
5082
5221
  </ng-template>
5083
5222
  `
5084
5223
  }]
5085
- }], ctorParameters: function () { return [{ type: ContextService }]; }, propDecorators: { position: [{
5224
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: ContextService }]; }, propDecorators: { hostRole: [{
5225
+ type: HostBinding,
5226
+ args: ['attr.role']
5227
+ }], position: [{
5228
+ type: Input
5229
+ }], navigable: [{
5086
5230
  type: Input
5087
5231
  }] } });
5088
5232
 
@@ -5908,7 +6052,7 @@ StringFilterMenuInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
5908
6052
  [filterDelay]="0"
5909
6053
  [ngModel]="currentFilter?.value" />
5910
6054
  </kendo-treelist-filter-menu-input-wrapper>
5911
- `, isInline: true, components: [{ type: FilterMenuInputWrapperComponent, selector: "kendo-treelist-filter-menu-input-wrapper", inputs: ["filterService", "currentFilter"] }], directives: [{ type: i2.TextBoxDirective, selector: "input[kendoTextBox]", inputs: ["value"] }, { type: i3$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: FilterInputDirective, selector: "[kendoFilterInput]", inputs: ["filterDelay", "value"] }, { type: i3$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
6055
+ `, isInline: true, components: [{ type: FilterMenuInputWrapperComponent, selector: "kendo-treelist-filter-menu-input-wrapper", inputs: ["filterService", "currentFilter"] }], directives: [{ type: i4$1.TextBoxDirective, selector: "input[kendoTextBox]", inputs: ["value"] }, { type: i3$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: FilterInputDirective, selector: "[kendoFilterInput]", inputs: ["filterDelay", "value"] }, { type: i3$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
5912
6056
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: StringFilterMenuInputComponent, decorators: [{
5913
6057
  type: Component,
5914
6058
  args: [{
@@ -6206,7 +6350,7 @@ NumericFilterMenuInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion:
6206
6350
  [step]="step">
6207
6351
  </kendo-numerictextbox>
6208
6352
  </kendo-treelist-filter-menu-input-wrapper>
6209
- `, isInline: true, components: [{ type: FilterMenuInputWrapperComponent, selector: "kendo-treelist-filter-menu-input-wrapper", inputs: ["filterService", "currentFilter"] }, { type: i2.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"] }], directives: [{ type: FilterInputDirective, selector: "[kendoFilterInput]", inputs: ["filterDelay", "value"] }] });
6353
+ `, isInline: true, components: [{ type: FilterMenuInputWrapperComponent, selector: "kendo-treelist-filter-menu-input-wrapper", inputs: ["filterService", "currentFilter"] }, { type: i4$1.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"] }], directives: [{ type: FilterInputDirective, selector: "[kendoFilterInput]", inputs: ["filterDelay", "value"] }] });
6210
6354
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: NumericFilterMenuInputComponent, decorators: [{
6211
6355
  type: Component,
6212
6356
  args: [{
@@ -6964,7 +7108,7 @@ BooleanFilterMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0
6964
7108
  <label class="k-radio-label" [attr.for]="radioId(item.value)">{{item.text}}</label>
6965
7109
  </li>
6966
7110
  </ul>
6967
- `, isInline: true, directives: [{ type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.RadioButtonDirective, selector: "input[kendoRadioButton]", inputs: ["size"] }] });
7111
+ `, isInline: true, directives: [{ type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4$1.RadioButtonDirective, selector: "input[kendoRadioButton]", inputs: ["size"] }] });
6968
7112
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: BooleanFilterMenuComponent, decorators: [{
6969
7113
  type: Component,
6970
7114
  args: [{
@@ -8460,7 +8604,7 @@ FilterCellOperatorsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12
8460
8604
  (click)="clearClick()"
8461
8605
  (keydown)="clearKeydown($event)">
8462
8606
  </button>
8463
- `, isInline: true, components: [{ type: i3.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: i3$4.Button, selector: "button[kendoButton], span[kendoButton], kendo-button", inputs: ["toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: FocusableDirective, selector: "[kendoTreeListFocusable],\n [kendoTreeListAddCommand],\n [kendoTreeListEditCommand],\n [kendoTreeListRemoveCommand],\n [kendoTreeListSaveCommand],\n [kendoTreeListCancelCommand]\n ", inputs: ["kendoTreeListFocusable", "kendoTreeListAddCommand", "kendoTreeListEditCommand", "kendoTreeListRemoveCommand", "kendoTreeListSaveCommand", "kendoTreeListCancelCommand"] }] });
8607
+ `, isInline: true, components: [{ type: i3.DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["iconClass", "loading", "data", "value", "textField", "valueField", "adaptiveMode", "title", "subtitle", "popupSettings", "listHeight", "defaultItem", "disabled", "itemDisabled", "readonly", "filterable", "virtual", "ignoreCase", "delay", "valuePrimitive", "tabindex", "tabIndex", "size", "rounded", "fillMode", "id"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }, { type: i4$2.Button, selector: "button[kendoButton], span[kendoButton], kendo-button", inputs: ["toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: FocusableDirective, selector: "[kendoTreeListFocusable],\n [kendoTreeListAddCommand],\n [kendoTreeListEditCommand],\n [kendoTreeListRemoveCommand],\n [kendoTreeListSaveCommand],\n [kendoTreeListCancelCommand]\n ", inputs: ["kendoTreeListFocusable", "enabled", "kendoTreeListAddCommand", "kendoTreeListEditCommand", "kendoTreeListRemoveCommand", "kendoTreeListSaveCommand", "kendoTreeListCancelCommand"] }] });
8464
8608
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FilterCellOperatorsComponent, decorators: [{
8465
8609
  type: Component,
8466
8610
  args: [{
@@ -8623,7 +8767,7 @@ StringFilterCellComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.
8623
8767
  [filterDelay]="filterDelay"
8624
8768
  [ngModel]="currentFilter?.value" />
8625
8769
  </kendo-treelist-filter-wrapper-cell>
8626
- `, isInline: true, components: [{ type: FilterCellWrapperComponent, selector: "kendo-treelist-filter-wrapper-cell", inputs: ["showOperators"] }], directives: [{ type: i3$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: FocusableDirective, selector: "[kendoTreeListFocusable],\n [kendoTreeListAddCommand],\n [kendoTreeListEditCommand],\n [kendoTreeListRemoveCommand],\n [kendoTreeListSaveCommand],\n [kendoTreeListCancelCommand]\n ", inputs: ["kendoTreeListFocusable", "kendoTreeListAddCommand", "kendoTreeListEditCommand", "kendoTreeListRemoveCommand", "kendoTreeListSaveCommand", "kendoTreeListCancelCommand"] }, { type: FilterInputDirective, selector: "[kendoFilterInput]", inputs: ["filterDelay", "value"] }, { type: i3$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
8770
+ `, isInline: true, components: [{ type: FilterCellWrapperComponent, selector: "kendo-treelist-filter-wrapper-cell", inputs: ["showOperators"] }], directives: [{ type: i3$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: FocusableDirective, selector: "[kendoTreeListFocusable],\n [kendoTreeListAddCommand],\n [kendoTreeListEditCommand],\n [kendoTreeListRemoveCommand],\n [kendoTreeListSaveCommand],\n [kendoTreeListCancelCommand]\n ", inputs: ["kendoTreeListFocusable", "enabled", "kendoTreeListAddCommand", "kendoTreeListEditCommand", "kendoTreeListRemoveCommand", "kendoTreeListSaveCommand", "kendoTreeListCancelCommand"] }, { type: FilterInputDirective, selector: "[kendoFilterInput]", inputs: ["filterDelay", "value"] }, { type: i3$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
8627
8771
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: StringFilterCellComponent, decorators: [{
8628
8772
  type: Component,
8629
8773
  args: [{
@@ -8705,7 +8849,7 @@ NumericFilterCellComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0
8705
8849
  [step]="step">
8706
8850
  </kendo-numerictextbox>
8707
8851
  </kendo-treelist-filter-wrapper-cell>
8708
- `, isInline: true, components: [{ type: FilterCellWrapperComponent, selector: "kendo-treelist-filter-wrapper-cell", inputs: ["showOperators"] }, { type: i2.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"] }], directives: [{ type: FocusableDirective, selector: "[kendoTreeListFocusable],\n [kendoTreeListAddCommand],\n [kendoTreeListEditCommand],\n [kendoTreeListRemoveCommand],\n [kendoTreeListSaveCommand],\n [kendoTreeListCancelCommand]\n ", inputs: ["kendoTreeListFocusable", "kendoTreeListAddCommand", "kendoTreeListEditCommand", "kendoTreeListRemoveCommand", "kendoTreeListSaveCommand", "kendoTreeListCancelCommand"] }, { type: FilterInputDirective, selector: "[kendoFilterInput]", inputs: ["filterDelay", "value"] }] });
8852
+ `, isInline: true, components: [{ type: FilterCellWrapperComponent, selector: "kendo-treelist-filter-wrapper-cell", inputs: ["showOperators"] }, { type: i4$1.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"] }], directives: [{ type: FocusableDirective, selector: "[kendoTreeListFocusable],\n [kendoTreeListAddCommand],\n [kendoTreeListEditCommand],\n [kendoTreeListRemoveCommand],\n [kendoTreeListSaveCommand],\n [kendoTreeListCancelCommand]\n ", inputs: ["kendoTreeListFocusable", "enabled", "kendoTreeListAddCommand", "kendoTreeListEditCommand", "kendoTreeListRemoveCommand", "kendoTreeListSaveCommand", "kendoTreeListCancelCommand"] }, { type: FilterInputDirective, selector: "[kendoFilterInput]", inputs: ["filterDelay", "value"] }] });
8709
8853
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: NumericFilterCellComponent, decorators: [{
8710
8854
  type: Component,
8711
8855
  args: [{
@@ -9174,7 +9318,7 @@ class FilterRowComponent {
9174
9318
  }
9175
9319
  FilterRowComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FilterRowComponent, deps: [{ token: i1$1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });
9176
9320
  FilterRowComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: FilterRowComponent, selector: "[kendoTreeListFilterRow]", inputs: { columns: "columns", filter: "filter", logicalRowIndex: "logicalRowIndex", lockedColumnsCount: "lockedColumnsCount" }, host: { properties: { "class.k-filter-row": "this.filterRowClass" } }, ngImport: i0, template: `
9177
- <td *ngFor="let column of columns; let columnIndex = index"
9321
+ <td *ngFor="let column of columns; let columnIndex = index" role="gridcell"
9178
9322
  [attr.aria-label]="filterLabel"
9179
9323
  kendoTreeListFilterCell
9180
9324
  [column]="$any(column)"
@@ -9192,7 +9336,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
9192
9336
  args: [{
9193
9337
  selector: '[kendoTreeListFilterRow]',
9194
9338
  template: `
9195
- <td *ngFor="let column of columns; let columnIndex = index"
9339
+ <td *ngFor="let column of columns; let columnIndex = index" role="gridcell"
9196
9340
  [attr.aria-label]="filterLabel"
9197
9341
  kendoTreeListFilterCell
9198
9342
  [column]="$any(column)"
@@ -9664,6 +9808,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
9664
9808
  args: ['dblclick']
9665
9809
  }] } });
9666
9810
 
9811
+ /* eslint-disable @typescript-eslint/no-explicit-any */
9667
9812
  const mergeObjects = (...args) => Object.assign.apply(null, [{}].concat(args));
9668
9813
  const directions = initialDirection => initialDirection === "asc" ? ["asc", "desc"] : ["desc", "asc"];
9669
9814
  /**
@@ -9976,7 +10121,7 @@ class HeaderComponent {
9976
10121
  }
9977
10122
  HeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: HeaderComponent, deps: [{ token: SinglePopupService }, { token: DragHintService }, { token: DropCueService }, { token: ColumnReorderService }, { token: SortService }, { token: SelectionService }, { token: i1$1.LocalizationService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
9978
10123
  HeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: HeaderComponent, selector: "[kendoTreeListHeader]", inputs: { totalColumnLevels: "totalColumnLevels", columns: "columns", scrollable: "scrollable", filterable: "filterable", sort: "sort", filter: "filter", sortable: "sortable", lockedColumnsCount: "lockedColumnsCount", resizable: "resizable", reorderable: "reorderable", columnMenu: "columnMenu", columnMenuTemplate: "columnMenuTemplate", totalColumnsCount: "totalColumnsCount" }, host: { properties: { "class.k-grid-header": "this.headerClass", "class.k-table-thead": "this.hostClass" } }, viewQueries: [{ propertyName: "dropTargets", predicate: DropTargetDirective, descendants: true }], usesOnChanges: true, ngImport: i0, template: `
9979
- <tr *ngFor="let i of columnLevels; let levelIndex = index"
10124
+ <tr *ngFor="let i of columnLevels; let levelIndex = index" role="row"
9980
10125
  kendoTreeListLogicalRow
9981
10126
  [logicalRowIndex]="levelIndex"
9982
10127
  [logicalSlaveRow]="lockedColumnsCount > 0"
@@ -10006,6 +10151,7 @@ HeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", versio
10006
10151
  }"
10007
10152
  class="k-header k-table-th"
10008
10153
  [class.k-filterable]="(showFilterMenu && isFilterable(getColumnComponent(column))) || showColumnMenu(column)"
10154
+ [attr.aria-haspopup]="(showFilterMenu || showColumnMenu(column)) ? 'dialog' : undefined"
10009
10155
  [class.k-first]="isFirstOnRow(getColumnComponent(column), columnIndex)"
10010
10156
  [ngClass]="column.headerClass"
10011
10157
  [ngStyle]="column.headerStyle"
@@ -10114,7 +10260,9 @@ HeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", versio
10114
10260
  }"
10115
10261
  class="k-header k-table-th"
10116
10262
  [class.k-first]="isFirstOnRow(getColumnComponent(column), columnIndex)"
10263
+ [attr.aria-haspopup]="(showFilterMenu || showColumnMenu(column)) ? 'dialog' : undefined"
10117
10264
  [class.k-filterable]="showColumnMenu(column)"
10265
+ [attr.aria-expanded]="showColumnMenu(column)"
10118
10266
  [ngClass]="column.headerClass"
10119
10267
  [ngStyle]="column.headerStyle"
10120
10268
  [attr.rowspan]="column.rowspan(totalColumnLevels)"
@@ -10156,13 +10304,13 @@ HeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", versio
10156
10304
  [logicalSlaveCellsCount]="unlockedColumnsCount"
10157
10305
  >
10158
10306
  </tr>
10159
- `, isInline: true, components: [{ type: FilterMenuComponent, selector: "kendo-treelist-filter-menu", inputs: ["column", "filter"] }, { type: ColumnMenuComponent, selector: "kendo-treelist-column-menu", inputs: ["standalone", "column", "settings", "sort", "filter", "sortable", "columnMenuTemplate"] }, { type: i3$3.IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass"], exportAs: ["kendoIconWrapper"] }, { type: FilterRowComponent, selector: "[kendoTreeListFilterRow]", inputs: ["columns", "filter", "logicalRowIndex", "lockedColumnsCount"] }], directives: [{ type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: LogicalRowDirective, selector: "[kendoTreeListLogicalRow]", inputs: ["logicalRowIndex", "logicalSlaveRow", "logicalCellsCount", "logicalSlaveCellsCount", "dataRowIndex", "dataItem", "isNew"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: LogicalCellDirective, selector: "[kendoTreeListLogicalCell]", inputs: ["logicalColIndex", "logicalRowIndex", "logicalSlaveCell", "column", "colIndex", "colSpan", "rowSpan", "dataRowIndex", "dataItem", "expandable"] }, { type: DropTargetDirective, selector: "[kendoDropTarget]", inputs: ["context"], outputs: ["enter", "leave", "drop"] }, { type: i1$3.DraggableDirective, selector: "[kendoDraggable]", inputs: ["enableDrag"], outputs: ["kendoPress", "kendoDrag", "kendoRelease"] }, { type: DraggableColumnDirective, selector: "[kendoDraggableColumn]", inputs: ["context", "enableDrag"], outputs: ["drag"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }, { type: FocusableDirective, selector: "[kendoTreeListFocusable],\n [kendoTreeListAddCommand],\n [kendoTreeListEditCommand],\n [kendoTreeListRemoveCommand],\n [kendoTreeListSaveCommand],\n [kendoTreeListCancelCommand]\n ", inputs: ["kendoTreeListFocusable", "kendoTreeListAddCommand", "kendoTreeListEditCommand", "kendoTreeListRemoveCommand", "kendoTreeListSaveCommand", "kendoTreeListCancelCommand"] }, { type: ColumnHandleDirective, selector: "[kendoTreeListColumnHandle]", inputs: ["columns", "column"] }] });
10307
+ `, isInline: true, components: [{ type: FilterMenuComponent, selector: "kendo-treelist-filter-menu", inputs: ["column", "filter"] }, { type: ColumnMenuComponent, selector: "kendo-treelist-column-menu", inputs: ["standalone", "column", "settings", "sort", "filter", "sortable", "columnMenuTemplate"] }, { type: i3$3.IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass"], exportAs: ["kendoIconWrapper"] }, { type: FilterRowComponent, selector: "[kendoTreeListFilterRow]", inputs: ["columns", "filter", "logicalRowIndex", "lockedColumnsCount"] }], directives: [{ type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: LogicalRowDirective, selector: "[kendoTreeListLogicalRow]", inputs: ["logicalRowIndex", "logicalSlaveRow", "logicalCellsCount", "logicalSlaveCellsCount", "dataRowIndex", "dataItem", "isNew"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: LogicalCellDirective, selector: "[kendoTreeListLogicalCell]", inputs: ["logicalColIndex", "logicalRowIndex", "logicalSlaveCell", "column", "colIndex", "colSpan", "rowSpan", "dataRowIndex", "dataItem", "expandable"] }, { type: DropTargetDirective, selector: "[kendoDropTarget]", inputs: ["context"], outputs: ["enter", "leave", "drop"] }, { type: i1$3.DraggableDirective, selector: "[kendoDraggable]", inputs: ["enableDrag"], outputs: ["kendoPress", "kendoDrag", "kendoRelease"] }, { type: DraggableColumnDirective, selector: "[kendoDraggableColumn]", inputs: ["context", "enableDrag"], outputs: ["drag"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }, { type: FocusableDirective, selector: "[kendoTreeListFocusable],\n [kendoTreeListAddCommand],\n [kendoTreeListEditCommand],\n [kendoTreeListRemoveCommand],\n [kendoTreeListSaveCommand],\n [kendoTreeListCancelCommand]\n ", inputs: ["kendoTreeListFocusable", "enabled", "kendoTreeListAddCommand", "kendoTreeListEditCommand", "kendoTreeListRemoveCommand", "kendoTreeListSaveCommand", "kendoTreeListCancelCommand"] }, { type: ColumnHandleDirective, selector: "[kendoTreeListColumnHandle]", inputs: ["columns", "column"] }] });
10160
10308
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: HeaderComponent, decorators: [{
10161
10309
  type: Component,
10162
10310
  args: [{
10163
10311
  selector: '[kendoTreeListHeader]',
10164
10312
  template: `
10165
- <tr *ngFor="let i of columnLevels; let levelIndex = index"
10313
+ <tr *ngFor="let i of columnLevels; let levelIndex = index" role="row"
10166
10314
  kendoTreeListLogicalRow
10167
10315
  [logicalRowIndex]="levelIndex"
10168
10316
  [logicalSlaveRow]="lockedColumnsCount > 0"
@@ -10192,6 +10340,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
10192
10340
  }"
10193
10341
  class="k-header k-table-th"
10194
10342
  [class.k-filterable]="(showFilterMenu && isFilterable(getColumnComponent(column))) || showColumnMenu(column)"
10343
+ [attr.aria-haspopup]="(showFilterMenu || showColumnMenu(column)) ? 'dialog' : undefined"
10195
10344
  [class.k-first]="isFirstOnRow(getColumnComponent(column), columnIndex)"
10196
10345
  [ngClass]="column.headerClass"
10197
10346
  [ngStyle]="column.headerStyle"
@@ -10300,7 +10449,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
10300
10449
  }"
10301
10450
  class="k-header k-table-th"
10302
10451
  [class.k-first]="isFirstOnRow(getColumnComponent(column), columnIndex)"
10452
+ [attr.aria-haspopup]="(showFilterMenu || showColumnMenu(column)) ? 'dialog' : undefined"
10303
10453
  [class.k-filterable]="showColumnMenu(column)"
10454
+ [attr.aria-expanded]="showColumnMenu(column)"
10304
10455
  [ngClass]="column.headerClass"
10305
10456
  [ngStyle]="column.headerStyle"
10306
10457
  [attr.rowspan]="column.rowspan(totalColumnLevels)"
@@ -10686,6 +10837,7 @@ CellComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version:
10686
10837
  <ng-container *ngIf="column.expandable">
10687
10838
  <span class="k-icon k-i-none" *ngFor="let item of level | levelItems : hasChildren && expandIcons"></span>
10688
10839
  <kendo-icon-wrapper
10840
+ aria-hidden="true"
10689
10841
  *ngIf="hasChildren && expandIcons && !loading"
10690
10842
  [name]="isExpanded ? 'caret-alt-down' : 'caret-alt-right'"
10691
10843
  [svgIcon]="isExpanded ? caretAltDownIcon : caretAltRightIcon"></kendo-icon-wrapper>
@@ -10748,7 +10900,7 @@ CellComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version:
10748
10900
  </ng-container>
10749
10901
  </ng-container>
10750
10902
  </ng-container>
10751
- `, isInline: true, components: [{ type: i3$3.IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass"], exportAs: ["kendoIconWrapper"] }, { type: i2.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: i3$2.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: i4.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i4.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: FocusableDirective, selector: "[kendoTreeListFocusable],\n [kendoTreeListAddCommand],\n [kendoTreeListEditCommand],\n [kendoTreeListRemoveCommand],\n [kendoTreeListSaveCommand],\n [kendoTreeListCancelCommand]\n ", inputs: ["kendoTreeListFocusable", "kendoTreeListAddCommand", "kendoTreeListEditCommand", "kendoTreeListRemoveCommand", "kendoTreeListSaveCommand", "kendoTreeListCancelCommand"] }, { type: i3$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i3$1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i4.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { type: i3$1.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: { "levelItems": LevelItemsPipe, "valueOf": FieldAccessorPipe } });
10903
+ `, isInline: true, components: [{ type: i3$3.IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass"], exportAs: ["kendoIconWrapper"] }, { type: i4$1.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: i3$2.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: i4.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i4.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: FocusableDirective, selector: "[kendoTreeListFocusable],\n [kendoTreeListAddCommand],\n [kendoTreeListEditCommand],\n [kendoTreeListRemoveCommand],\n [kendoTreeListSaveCommand],\n [kendoTreeListCancelCommand]\n ", inputs: ["kendoTreeListFocusable", "enabled", "kendoTreeListAddCommand", "kendoTreeListEditCommand", "kendoTreeListRemoveCommand", "kendoTreeListSaveCommand", "kendoTreeListCancelCommand"] }, { type: i3$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i3$1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i4.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { type: i3$1.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: { "levelItems": LevelItemsPipe, "valueOf": FieldAccessorPipe } });
10752
10904
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: CellComponent, decorators: [{
10753
10905
  type: Component,
10754
10906
  args: [{
@@ -10759,6 +10911,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
10759
10911
  <ng-container *ngIf="column.expandable">
10760
10912
  <span class="k-icon k-i-none" *ngFor="let item of level | levelItems : hasChildren && expandIcons"></span>
10761
10913
  <kendo-icon-wrapper
10914
+ aria-hidden="true"
10762
10915
  *ngIf="hasChildren && expandIcons && !loading"
10763
10916
  [name]="isExpanded ? 'caret-alt-down' : 'caret-alt-right'"
10764
10917
  [svgIcon]="isExpanded ? caretAltDownIcon : caretAltRightIcon"></kendo-icon-wrapper>
@@ -11172,6 +11325,7 @@ TableBodyComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ver
11172
11325
  class="k-table-row{{isOdd(item) ? ' k-alt k-table-alt-row' : ''}}"
11173
11326
  [class.k-grid-edit-row]="isEditingRow(item)"
11174
11327
  [class.k-grid-add-row]="item.isNew"
11328
+ [attr.aria-selected]="item.selected"
11175
11329
  [class.k-selected]="item.selected"
11176
11330
  [attr.data-treelist-view-index]="rowIndex">
11177
11331
 
@@ -11207,7 +11361,7 @@ TableBodyComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ver
11207
11361
  *ngFor="let column of columns; let columnIndex = index; trackBy: trackByColumns;">
11208
11362
  </td>
11209
11363
  </tr>
11210
- <tr *ngIf="item.type === 'footer' && hasFooter"
11364
+ <tr *ngIf="item.type === 'footer' && hasFooter" role="row"
11211
11365
  class="k-footer"
11212
11366
  [attr.data-treelist-view-index]="rowIndex"
11213
11367
  kendoTreeListLogicalRow
@@ -11221,6 +11375,7 @@ TableBodyComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ver
11221
11375
  [logicalColIndex]="logicalColIndex(column)"
11222
11376
  [column]="column"
11223
11377
  [colIndex]="columnIndex"
11378
+ role="gridcell"
11224
11379
  class="k-table-td"
11225
11380
  [ngClass]="column.footerClass"
11226
11381
  [ngStyle]="column.footerStyle"
@@ -11272,6 +11427,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
11272
11427
  class="k-table-row{{isOdd(item) ? ' k-alt k-table-alt-row' : ''}}"
11273
11428
  [class.k-grid-edit-row]="isEditingRow(item)"
11274
11429
  [class.k-grid-add-row]="item.isNew"
11430
+ [attr.aria-selected]="item.selected"
11275
11431
  [class.k-selected]="item.selected"
11276
11432
  [attr.data-treelist-view-index]="rowIndex">
11277
11433
 
@@ -11307,7 +11463,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
11307
11463
  *ngFor="let column of columns; let columnIndex = index; trackBy: trackByColumns;">
11308
11464
  </td>
11309
11465
  </tr>
11310
- <tr *ngIf="item.type === 'footer' && hasFooter"
11466
+ <tr *ngIf="item.type === 'footer' && hasFooter" role="row"
11311
11467
  class="k-footer"
11312
11468
  [attr.data-treelist-view-index]="rowIndex"
11313
11469
  kendoTreeListLogicalRow
@@ -11321,6 +11477,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
11321
11477
  [logicalColIndex]="logicalColIndex(column)"
11322
11478
  [column]="column"
11323
11479
  [colIndex]="columnIndex"
11480
+ role="gridcell"
11324
11481
  class="k-table-td"
11325
11482
  [ngClass]="column.footerClass"
11326
11483
  [ngStyle]="column.footerStyle"
@@ -12099,7 +12256,7 @@ ListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version:
12099
12256
  [columns]="$any(nonLockedColumnsToRender)">
12100
12257
  </colgroup>
12101
12258
  <tbody kendoTreeListTableBody
12102
- role="presentation"
12259
+ role="rowgroup"
12103
12260
  [view]="view"
12104
12261
  [columns]="$any(nonLockedColumnsToRender)"
12105
12262
  [allColumns]="$any(nonLockedLeafColumns)"
@@ -12184,7 +12341,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
12184
12341
  [columns]="$any(nonLockedColumnsToRender)">
12185
12342
  </colgroup>
12186
12343
  <tbody kendoTreeListTableBody
12187
- role="presentation"
12344
+ role="rowgroup"
12188
12345
  [view]="view"
12189
12346
  [columns]="$any(nonLockedColumnsToRender)"
12190
12347
  [allColumns]="$any(nonLockedLeafColumns)"
@@ -12382,8 +12539,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
12382
12539
  * Displays buttons for navigating to the first and to the previous page ([see example]({% slug paging_treelist %}#toc-pager-templates)).
12383
12540
  */
12384
12541
  class PagerPrevButtonsComponent extends PagerElementComponent {
12385
- constructor(localization, pagerContext, cd) {
12542
+ constructor(localization, pagerContext, cd, navigationService) {
12386
12543
  super(localization, pagerContext, cd);
12544
+ this.navigationService = navigationService;
12387
12545
  this.caretAltLeftIcon = caretAltLeftIcon;
12388
12546
  this.caretAltToLeftIcon = caretAltToLeftIcon;
12389
12547
  }
@@ -12397,6 +12555,15 @@ class PagerPrevButtonsComponent extends PagerElementComponent {
12397
12555
  get disabled() {
12398
12556
  return this.currentPage === 1 || !this.total;
12399
12557
  }
12558
+ /**
12559
+ * @hidden
12560
+ */
12561
+ onButtonClick(buttonName) {
12562
+ if (this.currentPage !== 1) {
12563
+ const skipToPage = buttonName === 'prevPage' ? this.currentPage - 2 : 0;
12564
+ this.changePage(skipToPage);
12565
+ }
12566
+ }
12400
12567
  onChanges({ total, skip, pageSize }) {
12401
12568
  this.total = total;
12402
12569
  this.skip = skip;
@@ -12404,15 +12571,16 @@ class PagerPrevButtonsComponent extends PagerElementComponent {
12404
12571
  this.cd.markForCheck();
12405
12572
  }
12406
12573
  }
12407
- PagerPrevButtonsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerPrevButtonsComponent, deps: [{ token: i1$1.LocalizationService }, { token: PagerContextService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
12574
+ PagerPrevButtonsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerPrevButtonsComponent, deps: [{ token: i1$1.LocalizationService }, { token: PagerContextService }, { token: i0.ChangeDetectorRef }, { token: NavigationService }], target: i0.ɵɵFactoryTarget.Component });
12408
12575
  PagerPrevButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: PagerPrevButtonsComponent, selector: "kendo-treelist-pager-prev-buttons", usesInheritance: true, ngImport: i0, template: `
12409
12576
  <button
12410
- [tabIndex]="-1"
12411
12577
  kendoButton
12412
12578
  type="button"
12579
+ kendoTreeListFocusable
12580
+ [enabled]="!disabled"
12413
12581
  [title]="textFor('pagerFirstPage')"
12414
12582
  [attr.aria-label]="textFor('pagerFirstPage')"
12415
- (click)="currentPage !== 1 ? changePage(0) : false"
12583
+ (click)="onButtonClick('firstPage')"
12416
12584
  role="button"
12417
12585
  icon="caret-alt-to-left"
12418
12586
  [svgIcon]="caretAltToLeftIcon"
@@ -12423,8 +12591,9 @@ PagerPrevButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.
12423
12591
  </button>
12424
12592
  <button
12425
12593
  kendoButton
12426
- [tabIndex]="-1"
12427
12594
  type="button"
12595
+ kendoTreeListFocusable
12596
+ [enabled]="!disabled"
12428
12597
  class="k-pager-nav"
12429
12598
  [disabled]="disabled"
12430
12599
  icon="caret-alt-left"
@@ -12433,9 +12602,9 @@ PagerPrevButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.
12433
12602
  rounded="none"
12434
12603
  [title]="textFor('pagerPreviousPage')"
12435
12604
  [attr.aria-label]="textFor('pagerPreviousPage')"
12436
- (click)="currentPage !== 1 ? changePage(currentPage-2) : false">
12605
+ (click)="onButtonClick('prevPage')">
12437
12606
  </button>
12438
- `, isInline: true, components: [{ type: i3$4.Button, selector: "button[kendoButton], span[kendoButton], kendo-button", inputs: ["toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
12607
+ `, isInline: true, components: [{ type: i4$2.Button, selector: "button[kendoButton], span[kendoButton], kendo-button", inputs: ["toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }], directives: [{ type: FocusableDirective, selector: "[kendoTreeListFocusable],\n [kendoTreeListAddCommand],\n [kendoTreeListEditCommand],\n [kendoTreeListRemoveCommand],\n [kendoTreeListSaveCommand],\n [kendoTreeListCancelCommand]\n ", inputs: ["kendoTreeListFocusable", "enabled", "kendoTreeListAddCommand", "kendoTreeListEditCommand", "kendoTreeListRemoveCommand", "kendoTreeListSaveCommand", "kendoTreeListCancelCommand"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
12439
12608
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerPrevButtonsComponent, decorators: [{
12440
12609
  type: Component,
12441
12610
  args: [{
@@ -12443,12 +12612,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
12443
12612
  selector: 'kendo-treelist-pager-prev-buttons',
12444
12613
  template: `
12445
12614
  <button
12446
- [tabIndex]="-1"
12447
12615
  kendoButton
12448
12616
  type="button"
12617
+ kendoTreeListFocusable
12618
+ [enabled]="!disabled"
12449
12619
  [title]="textFor('pagerFirstPage')"
12450
12620
  [attr.aria-label]="textFor('pagerFirstPage')"
12451
- (click)="currentPage !== 1 ? changePage(0) : false"
12621
+ (click)="onButtonClick('firstPage')"
12452
12622
  role="button"
12453
12623
  icon="caret-alt-to-left"
12454
12624
  [svgIcon]="caretAltToLeftIcon"
@@ -12459,8 +12629,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
12459
12629
  </button>
12460
12630
  <button
12461
12631
  kendoButton
12462
- [tabIndex]="-1"
12463
12632
  type="button"
12633
+ kendoTreeListFocusable
12634
+ [enabled]="!disabled"
12464
12635
  class="k-pager-nav"
12465
12636
  [disabled]="disabled"
12466
12637
  icon="caret-alt-left"
@@ -12469,12 +12640,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
12469
12640
  rounded="none"
12470
12641
  [title]="textFor('pagerPreviousPage')"
12471
12642
  [attr.aria-label]="textFor('pagerPreviousPage')"
12472
- (click)="currentPage !== 1 ? changePage(currentPage-2) : false">
12643
+ (click)="onButtonClick('prevPage')">
12473
12644
  </button>
12474
12645
  `
12475
12646
  }]
12476
- }], ctorParameters: function () { return [{ type: i1$1.LocalizationService }, { type: PagerContextService }, { type: i0.ChangeDetectorRef }]; } });
12647
+ }], ctorParameters: function () { return [{ type: i1$1.LocalizationService }, { type: PagerContextService }, { type: i0.ChangeDetectorRef }, { type: NavigationService }]; } });
12477
12648
 
12649
+ /* eslint-disable @typescript-eslint/no-inferrable-types */
12478
12650
  /**
12479
12651
  * Displays numeric buttons to enable navigation between the pages.
12480
12652
  */
@@ -12555,6 +12727,7 @@ PagerNumericButtonsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0
12555
12727
  PagerNumericButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: PagerNumericButtonsComponent, selector: "kendo-treelist-pager-numeric-buttons", inputs: { buttonCount: "buttonCount" }, host: { properties: { "class.k-pager-numbers-wrap": "this.numbersWrapClass" } }, usesInheritance: true, ngImport: i0, template: `
12556
12728
  <select
12557
12729
  class="k-dropdown-list k-dropdown k-picker k-picker-solid k-picker-md k-rounded-md"
12730
+ kendoTreeListFocusable
12558
12731
  [attr.title]="textFor('selectPage')"
12559
12732
  [attr.aria-label]="textFor('selectPage')"
12560
12733
  (change)="onSelectChange($event)">
@@ -12580,7 +12753,7 @@ PagerNumericButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12
12580
12753
  <div class="k-pager-numbers">
12581
12754
  <button *ngIf="start > 1"
12582
12755
  type="button"
12583
- [tabIndex]="-1"
12756
+ kendoTreeListFocusable
12584
12757
  kendoButton
12585
12758
  fillMode="flat"
12586
12759
  themeColor="primary"
@@ -12591,7 +12764,7 @@ PagerNumericButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12
12591
12764
  (click)="changePage(start - 2)">...</button>
12592
12765
  <button *ngFor="let num of buttons"
12593
12766
  type="button"
12594
- [tabIndex]="-1"
12767
+ kendoTreeListFocusable
12595
12768
  kendoButton
12596
12769
  fillMode="flat"
12597
12770
  themeColor="primary"
@@ -12606,7 +12779,7 @@ PagerNumericButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12
12606
12779
  </button>
12607
12780
  <button *ngIf="end < totalPages"
12608
12781
  type="button"
12609
- [tabIndex]="-1"
12782
+ kendoTreeListFocusable
12610
12783
  kendoButton
12611
12784
  class="k-pager-nav"
12612
12785
  fillMode="flat"
@@ -12616,7 +12789,7 @@ PagerNumericButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12
12616
12789
  [attr.title]="pageLabel(end + 1)"
12617
12790
  (click)="changePage(end)">...</button>
12618
12791
  </div>
12619
- `, isInline: true, components: [{ type: i3$4.Button, selector: "button[kendoButton], span[kendoButton], kendo-button", inputs: ["toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
12792
+ `, isInline: true, components: [{ type: i4$2.Button, selector: "button[kendoButton], span[kendoButton], kendo-button", inputs: ["toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }], directives: [{ type: FocusableDirective, selector: "[kendoTreeListFocusable],\n [kendoTreeListAddCommand],\n [kendoTreeListEditCommand],\n [kendoTreeListRemoveCommand],\n [kendoTreeListSaveCommand],\n [kendoTreeListCancelCommand]\n ", inputs: ["kendoTreeListFocusable", "enabled", "kendoTreeListAddCommand", "kendoTreeListEditCommand", "kendoTreeListRemoveCommand", "kendoTreeListSaveCommand", "kendoTreeListCancelCommand"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
12620
12793
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerNumericButtonsComponent, decorators: [{
12621
12794
  type: Component,
12622
12795
  args: [{
@@ -12625,6 +12798,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
12625
12798
  template: `
12626
12799
  <select
12627
12800
  class="k-dropdown-list k-dropdown k-picker k-picker-solid k-picker-md k-rounded-md"
12801
+ kendoTreeListFocusable
12628
12802
  [attr.title]="textFor('selectPage')"
12629
12803
  [attr.aria-label]="textFor('selectPage')"
12630
12804
  (change)="onSelectChange($event)">
@@ -12650,7 +12824,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
12650
12824
  <div class="k-pager-numbers">
12651
12825
  <button *ngIf="start > 1"
12652
12826
  type="button"
12653
- [tabIndex]="-1"
12827
+ kendoTreeListFocusable
12654
12828
  kendoButton
12655
12829
  fillMode="flat"
12656
12830
  themeColor="primary"
@@ -12661,7 +12835,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
12661
12835
  (click)="changePage(start - 2)">...</button>
12662
12836
  <button *ngFor="let num of buttons"
12663
12837
  type="button"
12664
- [tabIndex]="-1"
12838
+ kendoTreeListFocusable
12665
12839
  kendoButton
12666
12840
  fillMode="flat"
12667
12841
  themeColor="primary"
@@ -12676,7 +12850,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
12676
12850
  </button>
12677
12851
  <button *ngIf="end < totalPages"
12678
12852
  type="button"
12679
- [tabIndex]="-1"
12853
+ kendoTreeListFocusable
12680
12854
  kendoButton
12681
12855
  class="k-pager-nav"
12682
12856
  fillMode="flat"
@@ -12699,9 +12873,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
12699
12873
  * Displays an input element which allows the typing and rendering of page numbers.
12700
12874
  */
12701
12875
  class PagerInputComponent extends PagerElementComponent {
12702
- constructor(localization, pagerContext, zone, cd) {
12876
+ constructor(localization, pagerContext, navigationService, zone, cd) {
12703
12877
  super(localization, pagerContext, cd);
12704
12878
  this.pagerContext = pagerContext;
12879
+ this.navigationService = navigationService;
12705
12880
  this.zone = zone;
12706
12881
  /**
12707
12882
  * @hidden
@@ -12757,11 +12932,13 @@ class PagerInputComponent extends PagerElementComponent {
12757
12932
  this.cd.markForCheck();
12758
12933
  }
12759
12934
  }
12760
- PagerInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerInputComponent, deps: [{ token: i1$1.LocalizationService }, { token: PagerContextService }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
12935
+ PagerInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerInputComponent, deps: [{ token: i1$1.LocalizationService }, { token: PagerContextService }, { token: NavigationService }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
12761
12936
  PagerInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: PagerInputComponent, selector: "kendo-treelist-pager-input", viewQueries: [{ propertyName: "numericInput", first: true, predicate: NumericTextBoxComponent, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
12762
12937
  <span class="k-pager-input k-label">
12763
12938
  {{textFor('pagerPage')}}
12764
12939
  <kendo-numerictextbox
12940
+ kendoTreeListFocusable
12941
+ [enabled]="hasPages"
12765
12942
  [style.margin]="'0 1ex'"
12766
12943
  [style.width]="'3em'"
12767
12944
  [spinners]="false"
@@ -12773,6 +12950,7 @@ PagerInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ve
12773
12950
  [max]="totalPages"
12774
12951
  [autoCorrect]="true"
12775
12952
  [title]="textFor('pagerPageNumberInputTitle')"
12953
+ [attr.aria-label]="textFor('pagerPageNumberInputTitle')"
12776
12954
  [kendoEventsOutsideAngular]="{
12777
12955
  keydown: handleKeyDown,
12778
12956
  focusout: handleBlur
@@ -12780,7 +12958,7 @@ PagerInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ve
12780
12958
  </kendo-numerictextbox>
12781
12959
  {{textFor('pagerOf')}} {{totalPages}}
12782
12960
  </span>
12783
- `, isInline: true, components: [{ type: i2.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"] }], directives: [{ type: i1$3.EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }] });
12961
+ `, isInline: true, components: [{ type: i4$1.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"] }], directives: [{ type: FocusableDirective, selector: "[kendoTreeListFocusable],\n [kendoTreeListAddCommand],\n [kendoTreeListEditCommand],\n [kendoTreeListRemoveCommand],\n [kendoTreeListSaveCommand],\n [kendoTreeListCancelCommand]\n ", inputs: ["kendoTreeListFocusable", "enabled", "kendoTreeListAddCommand", "kendoTreeListEditCommand", "kendoTreeListRemoveCommand", "kendoTreeListSaveCommand", "kendoTreeListCancelCommand"] }, { type: i1$3.EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }] });
12784
12962
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerInputComponent, decorators: [{
12785
12963
  type: Component,
12786
12964
  args: [{
@@ -12789,6 +12967,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
12789
12967
  <span class="k-pager-input k-label">
12790
12968
  {{textFor('pagerPage')}}
12791
12969
  <kendo-numerictextbox
12970
+ kendoTreeListFocusable
12971
+ [enabled]="hasPages"
12792
12972
  [style.margin]="'0 1ex'"
12793
12973
  [style.width]="'3em'"
12794
12974
  [spinners]="false"
@@ -12800,6 +12980,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
12800
12980
  [max]="totalPages"
12801
12981
  [autoCorrect]="true"
12802
12982
  [title]="textFor('pagerPageNumberInputTitle')"
12983
+ [attr.aria-label]="textFor('pagerPageNumberInputTitle')"
12803
12984
  [kendoEventsOutsideAngular]="{
12804
12985
  keydown: handleKeyDown,
12805
12986
  focusout: handleBlur
@@ -12809,7 +12990,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
12809
12990
  </span>
12810
12991
  `
12811
12992
  }]
12812
- }], ctorParameters: function () { return [{ type: i1$1.LocalizationService }, { type: PagerContextService }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { numericInput: [{
12993
+ }], ctorParameters: function () { return [{ type: i1$1.LocalizationService }, { type: PagerContextService }, { type: NavigationService }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { numericInput: [{
12813
12994
  type: ViewChild,
12814
12995
  args: [NumericTextBoxComponent, { static: true }]
12815
12996
  }] } });
@@ -12819,8 +13000,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
12819
13000
  * Displays buttons for navigating to the next and to the last page ([see example]({% slug paging_treelist %}#toc-pager-templates)).
12820
13001
  */
12821
13002
  class PagerNextButtonsComponent extends PagerElementComponent {
12822
- constructor(localization, pagerContext, cd) {
13003
+ constructor(localization, pagerContext, cd, navigationService) {
12823
13004
  super(localization, pagerContext, cd);
13005
+ this.navigationService = navigationService;
12824
13006
  this.caretAltRightIcon = caretAltRightIcon;
12825
13007
  this.caretAltToRightIcon = caretAltToRightIcon;
12826
13008
  }
@@ -12834,6 +13016,15 @@ class PagerNextButtonsComponent extends PagerElementComponent {
12834
13016
  get disabled() {
12835
13017
  return this.currentPage === this.totalPages || !this.total;
12836
13018
  }
13019
+ /**
13020
+ * @hidden
13021
+ */
13022
+ onButtonClick(buttonName) {
13023
+ if (this.currentPage !== this.totalPages) {
13024
+ const skipToPage = buttonName === 'nextPage' ? this.currentPage : this.totalPages - 1;
13025
+ this.changePage(skipToPage);
13026
+ }
13027
+ }
12837
13028
  onChanges({ total, skip, pageSize }) {
12838
13029
  this.total = total;
12839
13030
  this.skip = skip;
@@ -12841,26 +13032,28 @@ class PagerNextButtonsComponent extends PagerElementComponent {
12841
13032
  this.cd.markForCheck();
12842
13033
  }
12843
13034
  }
12844
- PagerNextButtonsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerNextButtonsComponent, deps: [{ token: i1$1.LocalizationService }, { token: PagerContextService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
12845
- PagerNextButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: PagerNextButtonsComponent, selector: "kendo-treelist-pager-next-buttons", usesInheritance: true, ngImport: i0, template: `
13035
+ PagerNextButtonsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerNextButtonsComponent, deps: [{ token: i1$1.LocalizationService }, { token: PagerContextService }, { token: i0.ChangeDetectorRef }, { token: NavigationService }], target: i0.ɵɵFactoryTarget.Component });
13036
+ PagerNextButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: PagerNextButtonsComponent, selector: "kendo-treelist-pager-next-buttons", inputs: { navigable: "navigable" }, usesInheritance: true, ngImport: i0, template: `
12846
13037
  <button
12847
13038
  kendoButton
12848
13039
  type="button"
13040
+ kendoTreeListFocusable
13041
+ [enabled]="!disabled"
12849
13042
  icon="caret-alt-right"
12850
13043
  [svgIcon]="caretAltRightIcon"
12851
13044
  fillMode="flat"
12852
13045
  rounded="none"
12853
13046
  class="k-pager-nav"
12854
- [tabIndex]="-1"
12855
13047
  [disabled]="disabled"
12856
13048
  [title]="textFor('pagerNextPage')"
12857
13049
  [attr.aria-label]="textFor('pagerNextPage')"
12858
- (click)="currentPage !== totalPages ? changePage(currentPage) : false">
13050
+ (click)="onButtonClick('nextPage')">
12859
13051
  </button>
12860
13052
  <button
12861
13053
  kendoButton
12862
13054
  type="button"
12863
- [tabIndex]="-1"
13055
+ kendoTreeListFocusable
13056
+ [enabled]="!disabled"
12864
13057
  icon="caret-alt-to-right"
12865
13058
  [svgIcon]="caretAltToRightIcon"
12866
13059
  fillMode="flat"
@@ -12869,9 +13062,9 @@ PagerNextButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.
12869
13062
  [disabled]="disabled"
12870
13063
  [title]="textFor('pagerLastPage')"
12871
13064
  [attr.aria-label]="textFor('pagerLastPage')"
12872
- (click)="currentPage !== totalPages ? changePage(totalPages-1) : false">
13065
+ (click)="onButtonClick('lastPage')">
12873
13066
  </button>
12874
- `, isInline: true, components: [{ type: i3$4.Button, selector: "button[kendoButton], span[kendoButton], kendo-button", inputs: ["toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
13067
+ `, isInline: true, components: [{ type: i4$2.Button, selector: "button[kendoButton], span[kendoButton], kendo-button", inputs: ["toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }], directives: [{ type: FocusableDirective, selector: "[kendoTreeListFocusable],\n [kendoTreeListAddCommand],\n [kendoTreeListEditCommand],\n [kendoTreeListRemoveCommand],\n [kendoTreeListSaveCommand],\n [kendoTreeListCancelCommand]\n ", inputs: ["kendoTreeListFocusable", "enabled", "kendoTreeListAddCommand", "kendoTreeListEditCommand", "kendoTreeListRemoveCommand", "kendoTreeListSaveCommand", "kendoTreeListCancelCommand"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
12875
13068
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerNextButtonsComponent, decorators: [{
12876
13069
  type: Component,
12877
13070
  args: [{
@@ -12881,21 +13074,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
12881
13074
  <button
12882
13075
  kendoButton
12883
13076
  type="button"
13077
+ kendoTreeListFocusable
13078
+ [enabled]="!disabled"
12884
13079
  icon="caret-alt-right"
12885
13080
  [svgIcon]="caretAltRightIcon"
12886
13081
  fillMode="flat"
12887
13082
  rounded="none"
12888
13083
  class="k-pager-nav"
12889
- [tabIndex]="-1"
12890
13084
  [disabled]="disabled"
12891
13085
  [title]="textFor('pagerNextPage')"
12892
13086
  [attr.aria-label]="textFor('pagerNextPage')"
12893
- (click)="currentPage !== totalPages ? changePage(currentPage) : false">
13087
+ (click)="onButtonClick('nextPage')">
12894
13088
  </button>
12895
13089
  <button
12896
13090
  kendoButton
12897
13091
  type="button"
12898
- [tabIndex]="-1"
13092
+ kendoTreeListFocusable
13093
+ [enabled]="!disabled"
12899
13094
  icon="caret-alt-to-right"
12900
13095
  [svgIcon]="caretAltToRightIcon"
12901
13096
  fillMode="flat"
@@ -12904,11 +13099,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
12904
13099
  [disabled]="disabled"
12905
13100
  [title]="textFor('pagerLastPage')"
12906
13101
  [attr.aria-label]="textFor('pagerLastPage')"
12907
- (click)="currentPage !== totalPages ? changePage(totalPages-1) : false">
13102
+ (click)="onButtonClick('lastPage')">
12908
13103
  </button>
12909
13104
  `
12910
13105
  }]
12911
- }], ctorParameters: function () { return [{ type: i1$1.LocalizationService }, { type: PagerContextService }, { type: i0.ChangeDetectorRef }]; } });
13106
+ }], ctorParameters: function () { return [{ type: i1$1.LocalizationService }, { type: PagerContextService }, { type: i0.ChangeDetectorRef }, { type: NavigationService }]; }, propDecorators: { navigable: [{
13107
+ type: Input
13108
+ }] } });
12912
13109
 
12913
13110
  // eslint-disable no-access-missing-member
12914
13111
  /**
@@ -12979,8 +13176,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
12979
13176
  * Displays a drop-down list for the page size selection ([see example]({% slug paging_treelist %}#toc-pager-templates)).
12980
13177
  */
12981
13178
  class PagerPageSizesComponent extends PagerElementComponent {
12982
- constructor(localization, cd, pagerContext) {
13179
+ constructor(elem, localization, cd, pagerContext) {
12983
13180
  super(localization, pagerContext, cd);
13181
+ this.elem = elem;
12984
13182
  this.pagerContext = pagerContext;
12985
13183
  this._pageSizes = [];
12986
13184
  }
@@ -13052,7 +13250,7 @@ class PagerPageSizesComponent extends PagerElementComponent {
13052
13250
  this.cd.markForCheck();
13053
13251
  }
13054
13252
  }
13055
- PagerPageSizesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerPageSizesComponent, deps: [{ token: i1$1.LocalizationService }, { token: i0.ChangeDetectorRef }, { token: PagerContextService }], target: i0.ɵɵFactoryTarget.Component });
13253
+ PagerPageSizesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerPageSizesComponent, deps: [{ token: i0.ElementRef }, { token: i1$1.LocalizationService }, { token: i0.ChangeDetectorRef }, { token: PagerContextService }], target: i0.ɵɵFactoryTarget.Component });
13056
13254
  PagerPageSizesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: PagerPageSizesComponent, selector: "kendo-treelist-pager-page-sizes", inputs: { pageSizes: "pageSizes" }, host: { properties: { "class.k-pager-sizes": "this.classes", "class.k-label": "this.classes" } }, usesInheritance: true, ngImport: i0, template: `
13057
13255
  <kendo-dropdownlist
13058
13256
  #dropdownlist
@@ -13060,11 +13258,13 @@ PagerPageSizesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0"
13060
13258
  [data]="pageSizes"
13061
13259
  textField="text"
13062
13260
  valueField="value"
13261
+ kendoTreeListFocusable
13063
13262
  [valuePrimitive]="true"
13064
13263
  [value]="pageSize"
13264
+ [attr.aria-label]="textFor('pagerItemsPerPage')"
13065
13265
  (valueChange)="pageSizeChange($event)"></kendo-dropdownlist>
13066
13266
  <kendo-label [for]="dropdownlist" [text]="textFor('pagerItemsPerPage')"></kendo-label>
13067
- `, isInline: true, components: [{ type: i3.DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["iconClass", "loading", "data", "value", "textField", "valueField", "adaptiveMode", "title", "subtitle", "popupSettings", "listHeight", "defaultItem", "disabled", "itemDisabled", "readonly", "filterable", "virtual", "ignoreCase", "delay", "valuePrimitive", "tabindex", "tabIndex", "size", "rounded", "fillMode", "id"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }, { type: i4$1.LabelComponent, selector: "kendo-label", inputs: ["text", "for", "optional"], exportAs: ["kendoLabel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
13267
+ `, isInline: true, components: [{ type: i3.DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["iconClass", "loading", "data", "value", "textField", "valueField", "adaptiveMode", "title", "subtitle", "popupSettings", "listHeight", "defaultItem", "disabled", "itemDisabled", "readonly", "filterable", "virtual", "ignoreCase", "delay", "valuePrimitive", "tabindex", "tabIndex", "size", "rounded", "fillMode", "id"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }, { type: i4$3.LabelComponent, selector: "kendo-label", inputs: ["text", "for", "optional"], exportAs: ["kendoLabel"] }], directives: [{ type: FocusableDirective, selector: "[kendoTreeListFocusable],\n [kendoTreeListAddCommand],\n [kendoTreeListEditCommand],\n [kendoTreeListRemoveCommand],\n [kendoTreeListSaveCommand],\n [kendoTreeListCancelCommand]\n ", inputs: ["kendoTreeListFocusable", "enabled", "kendoTreeListAddCommand", "kendoTreeListEditCommand", "kendoTreeListRemoveCommand", "kendoTreeListSaveCommand", "kendoTreeListCancelCommand"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
13068
13268
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerPageSizesComponent, decorators: [{
13069
13269
  type: Component,
13070
13270
  args: [{
@@ -13077,13 +13277,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
13077
13277
  [data]="pageSizes"
13078
13278
  textField="text"
13079
13279
  valueField="value"
13280
+ kendoTreeListFocusable
13080
13281
  [valuePrimitive]="true"
13081
13282
  [value]="pageSize"
13283
+ [attr.aria-label]="textFor('pagerItemsPerPage')"
13082
13284
  (valueChange)="pageSizeChange($event)"></kendo-dropdownlist>
13083
13285
  <kendo-label [for]="dropdownlist" [text]="textFor('pagerItemsPerPage')"></kendo-label>
13084
13286
  `
13085
13287
  }]
13086
- }], ctorParameters: function () { return [{ type: i1$1.LocalizationService }, { type: i0.ChangeDetectorRef }, { type: PagerContextService }]; }, propDecorators: { pageSizes: [{
13288
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1$1.LocalizationService }, { type: i0.ChangeDetectorRef }, { type: PagerContextService }]; }, propDecorators: { pageSizes: [{
13087
13289
  type: Input
13088
13290
  }], classes: [{
13089
13291
  type: HostBinding,
@@ -13097,14 +13299,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
13097
13299
  * @hidden
13098
13300
  */
13099
13301
  class PagerComponent {
13100
- constructor(pagerContext, element, renderer) {
13302
+ constructor(navigationService, localizationService, pagerContext, focusGroup, focusRoot, renderer, element, zone) {
13303
+ this.navigationService = navigationService;
13304
+ this.localizationService = localizationService;
13101
13305
  this.pagerContext = pagerContext;
13102
- this.element = element;
13306
+ this.focusGroup = focusGroup;
13307
+ this.focusRoot = focusRoot;
13103
13308
  this.renderer = renderer;
13309
+ this.element = element;
13310
+ this.zone = zone;
13104
13311
  this.allCount = 0;
13105
13312
  this.total = 0;
13106
13313
  this.skip = 1;
13107
13314
  this.pageChange = new EventEmitter();
13315
+ this.pagerRole = 'application';
13316
+ this.pagerRoleDescription = 'pager';
13108
13317
  this.pagerWrapClass = true;
13109
13318
  this.gridPagerClass = true;
13110
13319
  this.pagerClass = true;
@@ -13134,6 +13343,12 @@ class PagerComponent {
13134
13343
  set options(value) {
13135
13344
  this.settings = normalize(value);
13136
13345
  }
13346
+ get hostTabindex() {
13347
+ return this.navigationService.enabled ? '0' : '-1';
13348
+ }
13349
+ get hostAriaLabel() {
13350
+ return this.pagerLabel;
13351
+ }
13137
13352
  get totalPages() {
13138
13353
  return Math.ceil((this.total || 0) / this.pageSize);
13139
13354
  }
@@ -13151,7 +13366,13 @@ class PagerComponent {
13151
13366
  return context;
13152
13367
  }
13153
13368
  ngOnInit() {
13369
+ const element = this.element.nativeElement;
13154
13370
  this.subscriptions.add(this.pagerContext.pageChange.subscribe(this.changePage.bind(this)));
13371
+ this.subscriptions.add(this.renderer.listen(element, 'focusin', event => this.onFocusIn(event)));
13372
+ this.subscriptions.add(this.renderer.listen(element, 'keydown', event => this.onKeyDown(event)));
13373
+ if (this.navigationService.enabled) {
13374
+ this.focusRoot.deactivate();
13375
+ }
13155
13376
  }
13156
13377
  ngOnChanges(changes) {
13157
13378
  if (anyChanged(["pageSize", "skip", "total", "allCount"], changes, false)) {
@@ -13177,18 +13398,135 @@ class PagerComponent {
13177
13398
  this.subscriptions.unsubscribe();
13178
13399
  }
13179
13400
  }
13401
+ get pagerLabel() {
13402
+ const localizationMsg = this.localizationService.get('pagerLabel') || '';
13403
+ return replaceMessagePlaceholder(replaceMessagePlaceholder(localizationMsg, 'currentPage', this.currentPage.toString()), 'totalPages', this.totalPages.toString());
13404
+ }
13405
+ get focusTrapTabIndex() {
13406
+ return this.focusGroup.isActive ? '0' : '-1';
13407
+ }
13408
+ onKeyDown(event) {
13409
+ const keyCode = event.keyCode;
13410
+ const target = event.target;
13411
+ if (this.navigationService.enabled) {
13412
+ if (keyCode === Keys.Enter && target === this.element.nativeElement) {
13413
+ this.onEnterEvent(event);
13414
+ }
13415
+ else if (keyCode === Keys.Escape) {
13416
+ this.onEscapeEvent();
13417
+ }
13418
+ }
13419
+ if ((keyCode === Keys.ArrowLeft || keyCode === Keys.PageUp) ||
13420
+ (keyCode === Keys.ArrowRight || keyCode === Keys.PageDown)) {
13421
+ event.preventDefault();
13422
+ this.onArrowEvent(keyCode, target);
13423
+ }
13424
+ else if (keyCode === Keys.Home || keyCode === Keys.End) {
13425
+ event.preventDefault();
13426
+ this.onHomeEndEvent(keyCode, target);
13427
+ }
13428
+ }
13180
13429
  changePage(event) {
13181
13430
  this.pageChange.emit(event);
13182
13431
  }
13432
+ onInnerFocusIn(event, position) {
13433
+ this.zone.onStable.pipe(take(1)).subscribe(() => {
13434
+ if (position === 'start') {
13435
+ if (event.relatedTarget === this.element.nativeElement) {
13436
+ this.focusFirstElement();
13437
+ }
13438
+ else {
13439
+ this.focusLastElement();
13440
+ }
13441
+ }
13442
+ else {
13443
+ this.focusFirstElement();
13444
+ }
13445
+ });
13446
+ }
13447
+ onEnterEvent(event) {
13448
+ const isTargetCompElement = event.target === this.element.nativeElement;
13449
+ if (this.navigationService.enabled && isTargetCompElement) {
13450
+ event.preventDefault();
13451
+ this.focusRoot.activate();
13452
+ this.focusFirstElement();
13453
+ }
13454
+ }
13455
+ onEscapeEvent() {
13456
+ if (this.navigationService.enabled) {
13457
+ this.focusRoot.deactivate();
13458
+ this.element.nativeElement.focus();
13459
+ }
13460
+ }
13461
+ onArrowEvent(keyCode, target) {
13462
+ const isArrowLeft = keyCode === Keys.ArrowLeft || keyCode === Keys.PageUp;
13463
+ const condition = isArrowLeft ? this.currentPage > 1 : this.currentPage < this.totalPages;
13464
+ if (this.shouldTriggerPageChange(target, condition)) {
13465
+ const pageDir = isArrowLeft ? 'prevPage' : 'nextPage';
13466
+ this.pagerContext[pageDir]();
13467
+ }
13468
+ }
13469
+ onHomeEndEvent(keyCode, target) {
13470
+ const isHome = keyCode === Keys.Home;
13471
+ const condition = isHome ? this.currentPage > 1 : this.currentPage < this.totalPages;
13472
+ if (this.shouldTriggerPageChange(target, condition)) {
13473
+ const pageNumber = isHome ? 0 : this.totalPages - 1;
13474
+ this.pagerContext.changePage(pageNumber);
13475
+ }
13476
+ }
13477
+ onFocusIn(event) {
13478
+ if (this.navigationService.enabled) {
13479
+ const shouldFocusPager = event.target === this.element.nativeElement;
13480
+ if (shouldFocusPager) {
13481
+ this.focusRoot.deactivate();
13482
+ }
13483
+ else {
13484
+ this.focusRoot.activate();
13485
+ }
13486
+ }
13487
+ }
13488
+ focusFirstElement() {
13489
+ const first = findFocusableChild(this.element.nativeElement, true);
13490
+ if (first) {
13491
+ first.focus();
13492
+ }
13493
+ }
13494
+ focusLastElement() {
13495
+ const last = findLastFocusableChild(this.element.nativeElement, true);
13496
+ if (last) {
13497
+ last.focus();
13498
+ }
13499
+ }
13500
+ shouldTriggerPageChange(target, condition) {
13501
+ return this.navigationService.enabled && target === this.element.nativeElement && condition;
13502
+ }
13183
13503
  clearResponsiveClasses() {
13184
13504
  const element = this.element.nativeElement;
13185
13505
  this.renderer.removeClass(element, 'k-pager-mobile-sm');
13186
13506
  this.renderer.removeClass(element, 'k-pager-mobile-md');
13187
13507
  }
13188
13508
  }
13189
- PagerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerComponent, deps: [{ token: PagerContextService }, { token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
13190
- PagerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: PagerComponent, selector: "kendo-treelist-pager", inputs: { allCount: "allCount", total: "total", skip: "skip", pageSize: "pageSize", options: "options", template: "template" }, outputs: { pageChange: "pageChange" }, host: { properties: { "class.k-pager-wrap": "this.pagerWrapClass", "class.k-grid-pager": "this.gridPagerClass", "class.k-pager": "this.pagerClass", "class.k-pager-md": "this.pagerSizingClass" } }, usesOnChanges: true, ngImport: i0, template: `
13191
- <ng-container
13509
+ PagerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerComponent, deps: [{ token: NavigationService }, { token: i1$1.LocalizationService }, { token: PagerContextService }, { token: FocusGroup }, { token: FocusRoot }, { token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
13510
+ PagerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: PagerComponent, selector: "kendo-treelist-pager", inputs: { allCount: "allCount", total: "total", skip: "skip", navigable: "navigable", pageSize: "pageSize", options: "options", template: "template" }, outputs: { pageChange: "pageChange" }, host: { properties: { "attr.role": "this.pagerRole", "attr.aria-roledescription": "this.pagerRoleDescription", "class.k-pager-wrap": "this.pagerWrapClass", "class.k-grid-pager": "this.gridPagerClass", "class.k-pager": "this.pagerClass", "class.k-pager-md": "this.pagerSizingClass", "attr.tabindex": "this.hostTabindex", "attr.aria-label": "this.hostAriaLabel" } }, providers: [{
13511
+ provide: FOCUS_ROOT_ACTIVE,
13512
+ useValue: true
13513
+ }, {
13514
+ provide: FocusRoot,
13515
+ deps: [FOCUS_ROOT_ACTIVE],
13516
+ useClass: FocusRoot
13517
+ }, {
13518
+ provide: FocusGroup,
13519
+ deps: [FocusRoot],
13520
+ useClass: FocusGroup
13521
+ }], viewQueries: [{ propertyName: "prevButtons", first: true, predicate: ["prevButtons"], descendants: true }, { propertyName: "nextButtons", first: true, predicate: ["nextButtons"], descendants: true }, { propertyName: "numericButtons", first: true, predicate: ["numericButtons"], descendants: true }, { propertyName: "pagerInput", first: true, predicate: ["pagerInput"], descendants: true }, { propertyName: "pageSizes", first: true, predicate: ["pageSizes"], descendants: true }], usesOnChanges: true, ngImport: i0, template: `
13522
+ <div
13523
+ *ngIf="navigationService.enabled"
13524
+ class="k-sr-only"
13525
+ [tabindex]="focusTrapTabIndex"
13526
+ [attr.aria-hidden]="true"
13527
+ (focusin)="onInnerFocusIn($event, 'start')">
13528
+ </div>
13529
+ <ng-container
13192
13530
  *ngIf="template?.templateRef"
13193
13531
  [ngTemplateOutlet]="template.templateRef"
13194
13532
  [ngTemplateOutletContext]="templateContext">
@@ -13197,21 +13535,48 @@ PagerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version
13197
13535
  <kendo-treelist-pager-prev-buttons *ngIf="settings.previousNext"></kendo-treelist-pager-prev-buttons>
13198
13536
  <kendo-treelist-pager-numeric-buttons
13199
13537
  *ngIf="settings.type === 'numeric'"
13200
- [buttonCount]="settings.buttonCount">
13538
+ [buttonCount]="settings.buttonCount"
13539
+ >
13201
13540
  </kendo-treelist-pager-numeric-buttons>
13202
13541
  <kendo-treelist-pager-input *ngIf="settings.type === 'input'"></kendo-treelist-pager-input>
13203
13542
  <kendo-treelist-pager-next-buttons *ngIf="settings.previousNext"></kendo-treelist-pager-next-buttons>
13204
13543
  <kendo-treelist-pager-info *ngIf='settings.info'></kendo-treelist-pager-info>
13205
13544
  <kendo-treelist-pager-page-sizes *ngIf="settings.pageSizes" [pageSizes]="$any(settings.pageSizes)"></kendo-treelist-pager-page-sizes>
13206
13545
  </ng-container>
13546
+ <div
13547
+ *ngIf="navigationService.enabled"
13548
+ class="k-sr-only"
13549
+ [tabindex]="focusTrapTabIndex"
13550
+ [attr.aria-hidden]="true"
13551
+ (focusin)="onInnerFocusIn($event, 'end')">
13552
+ </div>
13207
13553
  <kendo-resize-sensor *ngIf="settings.responsive" (resize)="resizeHandler()"></kendo-resize-sensor>
13208
- `, isInline: true, components: [{ type: PagerPrevButtonsComponent, selector: "kendo-treelist-pager-prev-buttons" }, { type: PagerNumericButtonsComponent, selector: "kendo-treelist-pager-numeric-buttons", inputs: ["buttonCount"] }, { type: PagerInputComponent, selector: "kendo-treelist-pager-input" }, { type: PagerNextButtonsComponent, selector: "kendo-treelist-pager-next-buttons" }, { type: PagerInfoComponent, selector: "kendo-treelist-pager-info" }, { type: PagerPageSizesComponent, selector: "kendo-treelist-pager-page-sizes", inputs: ["pageSizes"] }, { type: i1$3.ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }] });
13554
+ `, isInline: true, components: [{ type: PagerPrevButtonsComponent, selector: "kendo-treelist-pager-prev-buttons" }, { type: PagerNumericButtonsComponent, selector: "kendo-treelist-pager-numeric-buttons", inputs: ["buttonCount"] }, { type: PagerInputComponent, selector: "kendo-treelist-pager-input" }, { type: PagerNextButtonsComponent, selector: "kendo-treelist-pager-next-buttons", inputs: ["navigable"] }, { type: PagerInfoComponent, selector: "kendo-treelist-pager-info" }, { type: PagerPageSizesComponent, selector: "kendo-treelist-pager-page-sizes", inputs: ["pageSizes"] }, { type: i1$3.ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }] });
13209
13555
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerComponent, decorators: [{
13210
13556
  type: Component,
13211
13557
  args: [{
13212
13558
  selector: 'kendo-treelist-pager',
13559
+ providers: [{
13560
+ provide: FOCUS_ROOT_ACTIVE,
13561
+ useValue: true
13562
+ }, {
13563
+ provide: FocusRoot,
13564
+ deps: [FOCUS_ROOT_ACTIVE],
13565
+ useClass: FocusRoot
13566
+ }, {
13567
+ provide: FocusGroup,
13568
+ deps: [FocusRoot],
13569
+ useClass: FocusGroup
13570
+ }],
13213
13571
  template: `
13214
- <ng-container
13572
+ <div
13573
+ *ngIf="navigationService.enabled"
13574
+ class="k-sr-only"
13575
+ [tabindex]="focusTrapTabIndex"
13576
+ [attr.aria-hidden]="true"
13577
+ (focusin)="onInnerFocusIn($event, 'start')">
13578
+ </div>
13579
+ <ng-container
13215
13580
  *ngIf="template?.templateRef"
13216
13581
  [ngTemplateOutlet]="template.templateRef"
13217
13582
  [ngTemplateOutletContext]="templateContext">
@@ -13220,22 +13585,47 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
13220
13585
  <kendo-treelist-pager-prev-buttons *ngIf="settings.previousNext"></kendo-treelist-pager-prev-buttons>
13221
13586
  <kendo-treelist-pager-numeric-buttons
13222
13587
  *ngIf="settings.type === 'numeric'"
13223
- [buttonCount]="settings.buttonCount">
13588
+ [buttonCount]="settings.buttonCount"
13589
+ >
13224
13590
  </kendo-treelist-pager-numeric-buttons>
13225
13591
  <kendo-treelist-pager-input *ngIf="settings.type === 'input'"></kendo-treelist-pager-input>
13226
13592
  <kendo-treelist-pager-next-buttons *ngIf="settings.previousNext"></kendo-treelist-pager-next-buttons>
13227
13593
  <kendo-treelist-pager-info *ngIf='settings.info'></kendo-treelist-pager-info>
13228
13594
  <kendo-treelist-pager-page-sizes *ngIf="settings.pageSizes" [pageSizes]="$any(settings.pageSizes)"></kendo-treelist-pager-page-sizes>
13229
13595
  </ng-container>
13596
+ <div
13597
+ *ngIf="navigationService.enabled"
13598
+ class="k-sr-only"
13599
+ [tabindex]="focusTrapTabIndex"
13600
+ [attr.aria-hidden]="true"
13601
+ (focusin)="onInnerFocusIn($event, 'end')">
13602
+ </div>
13230
13603
  <kendo-resize-sensor *ngIf="settings.responsive" (resize)="resizeHandler()"></kendo-resize-sensor>
13231
13604
  `
13232
13605
  }]
13233
- }], ctorParameters: function () { return [{ type: PagerContextService }, { type: i0.ElementRef }, { type: i0.Renderer2 }]; }, propDecorators: { allCount: [{
13606
+ }], ctorParameters: function () { return [{ type: NavigationService }, { type: i1$1.LocalizationService }, { type: PagerContextService }, { type: FocusGroup }, { type: FocusRoot }, { type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i0.NgZone }]; }, propDecorators: { prevButtons: [{
13607
+ type: ViewChild,
13608
+ args: ['prevButtons']
13609
+ }], nextButtons: [{
13610
+ type: ViewChild,
13611
+ args: ['nextButtons']
13612
+ }], numericButtons: [{
13613
+ type: ViewChild,
13614
+ args: ['numericButtons']
13615
+ }], pagerInput: [{
13616
+ type: ViewChild,
13617
+ args: ['pagerInput']
13618
+ }], pageSizes: [{
13619
+ type: ViewChild,
13620
+ args: ['pageSizes']
13621
+ }], allCount: [{
13234
13622
  type: Input
13235
13623
  }], total: [{
13236
13624
  type: Input
13237
13625
  }], skip: [{
13238
13626
  type: Input
13627
+ }], navigable: [{
13628
+ type: Input
13239
13629
  }], pageSize: [{
13240
13630
  type: Input
13241
13631
  }], options: [{
@@ -13244,6 +13634,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
13244
13634
  type: Input
13245
13635
  }], pageChange: [{
13246
13636
  type: Output
13637
+ }], pagerRole: [{
13638
+ type: HostBinding,
13639
+ args: ['attr.role']
13640
+ }], pagerRoleDescription: [{
13641
+ type: HostBinding,
13642
+ args: ['attr.aria-roledescription']
13247
13643
  }], pagerWrapClass: [{
13248
13644
  type: HostBinding,
13249
13645
  args: ['class.k-pager-wrap']
@@ -13256,6 +13652,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
13256
13652
  }], pagerSizingClass: [{
13257
13653
  type: HostBinding,
13258
13654
  args: ['class.k-pager-md']
13655
+ }], hostTabindex: [{
13656
+ type: HostBinding,
13657
+ args: ['attr.tabindex']
13658
+ }], hostAriaLabel: [{
13659
+ type: HostBinding,
13660
+ args: ['attr.aria-label']
13259
13661
  }] } });
13260
13662
 
13261
13663
  /**
@@ -13264,7 +13666,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
13264
13666
  class Messages extends ComponentMessages {
13265
13667
  }
13266
13668
  Messages.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: Messages, deps: null, target: i0.ɵɵFactoryTarget.Directive });
13267
- Messages.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.12", type: Messages, inputs: { groupPanelEmpty: "groupPanelEmpty", noRecords: "noRecords", pagerFirstPage: "pagerFirstPage", pagerLastPage: "pagerLastPage", pagerPreviousPage: "pagerPreviousPage", pagerNextPage: "pagerNextPage", pagerPage: "pagerPage", pagerPageNumberInputTitle: "pagerPageNumberInputTitle", pagerItemsPerPage: "pagerItemsPerPage", pagerOf: "pagerOf", pagerItemsTotal: "pagerItemsTotal", selectPage: "selectPage", filter: "filter", 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", columnMenu: "columnMenu", columns: "columns", lock: "lock", unlock: "unlock", sortable: "sortable", sortAscending: "sortAscending", sortDescending: "sortDescending", sortedAscending: "sortedAscending", sortedDescending: "sortedDescending", sortedDefault: "sortedDefault", columnsApply: "columnsApply", columnsReset: "columnsReset" }, usesInheritance: true, ngImport: i0 });
13669
+ Messages.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.12", type: Messages, inputs: { groupPanelEmpty: "groupPanelEmpty", noRecords: "noRecords", pagerLabel: "pagerLabel", pagerFirstPage: "pagerFirstPage", pagerLastPage: "pagerLastPage", pagerPreviousPage: "pagerPreviousPage", pagerNextPage: "pagerNextPage", pagerPage: "pagerPage", pagerPageNumberInputTitle: "pagerPageNumberInputTitle", pagerItemsPerPage: "pagerItemsPerPage", pagerOf: "pagerOf", pagerItemsTotal: "pagerItemsTotal", selectPage: "selectPage", filter: "filter", 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", columnMenu: "columnMenu", columns: "columns", lock: "lock", unlock: "unlock", sortable: "sortable", sortAscending: "sortAscending", sortDescending: "sortDescending", sortedAscending: "sortedAscending", sortedDescending: "sortedDescending", sortedDefault: "sortedDefault", columnsApply: "columnsApply", columnsReset: "columnsReset", topToolbarLabel: "topToolbarLabel", bottomToolbarLabel: "bottomToolbarLabel" }, usesInheritance: true, ngImport: i0 });
13268
13670
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: Messages, decorators: [{
13269
13671
  type: Directive,
13270
13672
  args: [{}]
@@ -13272,6 +13674,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
13272
13674
  type: Input
13273
13675
  }], noRecords: [{
13274
13676
  type: Input
13677
+ }], pagerLabel: [{
13678
+ type: Input
13275
13679
  }], pagerFirstPage: [{
13276
13680
  type: Input
13277
13681
  }], pagerLastPage: [{
@@ -13370,6 +13774,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
13370
13774
  type: Input
13371
13775
  }], columnsReset: [{
13372
13776
  type: Input
13777
+ }], topToolbarLabel: [{
13778
+ type: Input
13779
+ }], bottomToolbarLabel: [{
13780
+ type: Input
13373
13781
  }] } });
13374
13782
 
13375
13783
  /**
@@ -13666,6 +14074,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
13666
14074
  args: ['style.user-select']
13667
14075
  }] } });
13668
14076
 
14077
+ /* eslint-disable @typescript-eslint/no-explicit-any */
13669
14078
  const createControl = (source) => (acc, key) => {
13670
14079
  acc[key] = new FormControl(source[key]);
13671
14080
  return acc;
@@ -13714,6 +14123,7 @@ class TreeListComponent {
13714
14123
  this.expandStateService = expandStateService;
13715
14124
  this.optionChanges = optionChanges;
13716
14125
  this.selectionService = selectionService;
14126
+ this.localization = localization;
13717
14127
  this.ctx = ctx;
13718
14128
  /**
13719
14129
  * Defines the page size used by the TreeList when [paging]({% slug paging_treelist %}) is enabled.
@@ -13969,6 +14379,7 @@ class TreeListComponent {
13969
14379
  this.idGetter = getter(undefined);
13970
14380
  this.localEditService = new LocalEditService();
13971
14381
  this.view = new ViewCollection(this.viewFieldAccessor.bind(this), this.expandStateService, this.editService, this.selectionService);
14382
+ this.ariaRootId = `k-${guid()}`;
13972
14383
  this.dataChanged = false;
13973
14384
  this._hasChildren = (() => false);
13974
14385
  this.subscriptions = new Subscription();
@@ -14319,6 +14730,9 @@ class TreeListComponent {
14319
14730
  return this.selectionService.enableMultiple;
14320
14731
  }
14321
14732
  }
14733
+ get navigation() {
14734
+ return this.navigationService;
14735
+ }
14322
14736
  get isVirtual() {
14323
14737
  return this.scrollable === 'virtual';
14324
14738
  }
@@ -14810,6 +15224,12 @@ class TreeListComponent {
14810
15224
  this.changeDetectorRef.markForCheck();
14811
15225
  this.pageChange.emit(event);
14812
15226
  }
15227
+ /**
15228
+ * @hidden
15229
+ */
15230
+ messageFor(token) {
15231
+ return this.localization.get(token);
15232
+ }
14813
15233
  /**
14814
15234
  * @hidden
14815
15235
  */
@@ -15495,6 +15915,9 @@ TreeListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", vers
15495
15915
  i18n-noRecords="kendo.treelist.noRecords|The label visible in the TreeList when there are no records"
15496
15916
  noRecords="No records available."
15497
15917
 
15918
+ i18n-pagerLabel="kendo.treelist.pagerLabel|The label for the TreeList pager"
15919
+ pagerLabel="{{ 'Page navigation, page {currentPage} of {totalPages}' }}"
15920
+
15498
15921
  i18n-pagerFirstPage="kendo.treelist.pagerFirstPage|The label for the first page button in TreeList pager"
15499
15922
  pagerFirstPage="Go to the first page"
15500
15923
 
@@ -15641,15 +16064,26 @@ TreeListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", vers
15641
16064
 
15642
16065
  i18n-selectPage="kendo.treelist.selectPage|The text of the title and aria-label attributes applied to the page chooser in the TreeList Pager"
15643
16066
  selectPage="Select page"
16067
+
16068
+ i18n-topToolbarLabel="kendo.treelist.topToolbarLabel|The label of the TreeList top toolbar"
16069
+ topToolbarLabel="Top toolbar"
16070
+
16071
+ i18n-bottomToolbarLabel="kendo.treelist.bottomToolbarLabel|The label of the TreeList bottom toolbar"
16072
+ bottomToolbarLabel="Bottom toolbar"
15644
16073
  >
15645
16074
  </ng-container>
15646
16075
  <kendo-treelist-toolbar
15647
16076
  *ngIf="showTopToolbar"
15648
- position="top"
15649
- class="k-toolbar k-grid-toolbar k-toolbar-md"></kendo-treelist-toolbar>
16077
+ position="top"
16078
+ [navigable]="navigable"
16079
+ class="k-toolbar k-grid-toolbar k-toolbar-md"
16080
+ [attr.aria-label]="messageFor('topToolbarLabel')"
16081
+ [attr.aria-controls]="ariaRootId">
16082
+ </kendo-treelist-toolbar>
15650
16083
  <div #ariaRoot
15651
16084
  class="k-grid-aria-root"
15652
16085
  role="treegrid"
16086
+ [id]="ariaRootId"
15653
16087
  [attr.aria-rowcount]="ariaRowCount"
15654
16088
  [attr.aria-colcount]="ariaColCount"
15655
16089
  [attr.aria-multiselectable]="ariaMultiselectable"
@@ -15703,7 +16137,7 @@ TreeListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", vers
15703
16137
  </colgroup>
15704
16138
  <thead kendoTreeListHeader
15705
16139
  [resizable]="resizable"
15706
- role="presentation"
16140
+ role="rowgroup"
15707
16141
  [scrollable]="true"
15708
16142
  [columns]="headerColumns"
15709
16143
  [totalColumnLevels]="totalColumnLevels"
@@ -15792,14 +16226,20 @@ TreeListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", vers
15792
16226
  [total]="view.totalVisible"
15793
16227
  [allCount]="view.total"
15794
16228
  [skip]="skip"
16229
+ [navigable]="navigable"
16230
+ [attr.aria-controls]="ariaRootId"
15795
16231
  [options]="pageable"
15796
16232
  (pageChange)="notifyPageChange('pager', $event)">
15797
16233
  </kendo-treelist-pager>
15798
16234
  <kendo-treelist-toolbar
15799
16235
  *ngIf="showBottomToolbar"
15800
16236
  class="k-toolbar k-grid-toolbar k-grid-toolbar-bottom k-toolbar-md"
15801
- position="bottom"></kendo-treelist-toolbar>
15802
- `, isInline: true, components: [{ type: ToolbarComponent, selector: "kendo-treelist-toolbar", inputs: ["position"] }, { type: ColGroupComponent, selector: "[kendoTreeListColGroup]", inputs: ["columns"] }, { type: HeaderComponent, selector: "[kendoTreeListHeader]", inputs: ["totalColumnLevels", "columns", "scrollable", "filterable", "sort", "filter", "sortable", "lockedColumnsCount", "resizable", "reorderable", "columnMenu", "columnMenuTemplate", "totalColumnsCount"] }, { type: ListComponent, selector: "kendo-treelist-list", inputs: ["view", "total", "rowHeight", "take", "skip", "columns", "noRecordsTemplate", "filterable", "rowClass", "loading", "trackBy", "virtualColumns", "isVirtual", "expandIcons"], outputs: ["contentScroll", "pageChange", "scrollBottom"] }, { type: TableBodyComponent, selector: "[kendoTreeListTableBody]", inputs: ["columns", "allColumns", "noRecordsTemplate", "view", "skip", "filterable", "noRecordsText", "isLocked", "lockedColumnsCount", "totalColumnsCount", "virtualColumns", "expandIcons", "trackBy", "rowClass"] }, { type: LoadingComponent, selector: "[kendoTreeListLoading]" }, { type: PagerComponent, selector: "kendo-treelist-pager", inputs: ["allCount", "total", "skip", "pageSize", "options", "template"], outputs: ["pageChange"] }], directives: [{ type: LocalizedMessagesDirective, selector: "[kendoTreeListLocalizedMessages]" }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: TableDirective, selector: "table", inputs: ["locked", "virtualColumns"] }, { type: ResizableContainerDirective, selector: "[kendoTreeListResizableContainer]", inputs: ["lockedWidth", "kendoTreeListResizableContainer"] }, { type: i1$3.DraggableDirective, selector: "[kendoDraggable]", inputs: ["enableDrag"], outputs: ["kendoPress", "kendoDrag", "kendoRelease"] }, { type: MarqueeDirective, selector: "[kendoTreeListSelectionMarquee]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
16237
+ position="bottom"
16238
+ [navigable]="navigable"
16239
+ [attr.aria-label]="messageFor('bottomToolbarLabel')"
16240
+ [attr.aria-controls]="ariaRootId">
16241
+ </kendo-treelist-toolbar>
16242
+ `, isInline: true, components: [{ type: ToolbarComponent, selector: "kendo-treelist-toolbar", inputs: ["position", "navigable"] }, { type: ColGroupComponent, selector: "[kendoTreeListColGroup]", inputs: ["columns"] }, { type: HeaderComponent, selector: "[kendoTreeListHeader]", inputs: ["totalColumnLevels", "columns", "scrollable", "filterable", "sort", "filter", "sortable", "lockedColumnsCount", "resizable", "reorderable", "columnMenu", "columnMenuTemplate", "totalColumnsCount"] }, { type: ListComponent, selector: "kendo-treelist-list", inputs: ["view", "total", "rowHeight", "take", "skip", "columns", "noRecordsTemplate", "filterable", "rowClass", "loading", "trackBy", "virtualColumns", "isVirtual", "expandIcons"], outputs: ["contentScroll", "pageChange", "scrollBottom"] }, { type: TableBodyComponent, selector: "[kendoTreeListTableBody]", inputs: ["columns", "allColumns", "noRecordsTemplate", "view", "skip", "filterable", "noRecordsText", "isLocked", "lockedColumnsCount", "totalColumnsCount", "virtualColumns", "expandIcons", "trackBy", "rowClass"] }, { type: LoadingComponent, selector: "[kendoTreeListLoading]" }, { type: PagerComponent, selector: "kendo-treelist-pager", inputs: ["allCount", "total", "skip", "navigable", "pageSize", "options", "template"], outputs: ["pageChange"] }], directives: [{ type: LocalizedMessagesDirective, selector: "[kendoTreeListLocalizedMessages]" }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: TableDirective, selector: "table", inputs: ["locked", "virtualColumns"] }, { type: ResizableContainerDirective, selector: "[kendoTreeListResizableContainer]", inputs: ["lockedWidth", "kendoTreeListResizableContainer"] }, { type: i1$3.DraggableDirective, selector: "[kendoDraggable]", inputs: ["enableDrag"], outputs: ["kendoPress", "kendoDrag", "kendoRelease"] }, { type: MarqueeDirective, selector: "[kendoTreeListSelectionMarquee]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
15803
16243
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: TreeListComponent, decorators: [{
15804
16244
  type: Component,
15805
16245
  args: [{
@@ -15856,6 +16296,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
15856
16296
  i18n-noRecords="kendo.treelist.noRecords|The label visible in the TreeList when there are no records"
15857
16297
  noRecords="No records available."
15858
16298
 
16299
+ i18n-pagerLabel="kendo.treelist.pagerLabel|The label for the TreeList pager"
16300
+ pagerLabel="{{ 'Page navigation, page {currentPage} of {totalPages}' }}"
16301
+
15859
16302
  i18n-pagerFirstPage="kendo.treelist.pagerFirstPage|The label for the first page button in TreeList pager"
15860
16303
  pagerFirstPage="Go to the first page"
15861
16304
 
@@ -16002,15 +16445,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
16002
16445
 
16003
16446
  i18n-selectPage="kendo.treelist.selectPage|The text of the title and aria-label attributes applied to the page chooser in the TreeList Pager"
16004
16447
  selectPage="Select page"
16448
+
16449
+ i18n-topToolbarLabel="kendo.treelist.topToolbarLabel|The label of the TreeList top toolbar"
16450
+ topToolbarLabel="Top toolbar"
16451
+
16452
+ i18n-bottomToolbarLabel="kendo.treelist.bottomToolbarLabel|The label of the TreeList bottom toolbar"
16453
+ bottomToolbarLabel="Bottom toolbar"
16005
16454
  >
16006
16455
  </ng-container>
16007
16456
  <kendo-treelist-toolbar
16008
16457
  *ngIf="showTopToolbar"
16009
- position="top"
16010
- class="k-toolbar k-grid-toolbar k-toolbar-md"></kendo-treelist-toolbar>
16458
+ position="top"
16459
+ [navigable]="navigable"
16460
+ class="k-toolbar k-grid-toolbar k-toolbar-md"
16461
+ [attr.aria-label]="messageFor('topToolbarLabel')"
16462
+ [attr.aria-controls]="ariaRootId">
16463
+ </kendo-treelist-toolbar>
16011
16464
  <div #ariaRoot
16012
16465
  class="k-grid-aria-root"
16013
16466
  role="treegrid"
16467
+ [id]="ariaRootId"
16014
16468
  [attr.aria-rowcount]="ariaRowCount"
16015
16469
  [attr.aria-colcount]="ariaColCount"
16016
16470
  [attr.aria-multiselectable]="ariaMultiselectable"
@@ -16064,7 +16518,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
16064
16518
  </colgroup>
16065
16519
  <thead kendoTreeListHeader
16066
16520
  [resizable]="resizable"
16067
- role="presentation"
16521
+ role="rowgroup"
16068
16522
  [scrollable]="true"
16069
16523
  [columns]="headerColumns"
16070
16524
  [totalColumnLevels]="totalColumnLevels"
@@ -16153,13 +16607,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
16153
16607
  [total]="view.totalVisible"
16154
16608
  [allCount]="view.total"
16155
16609
  [skip]="skip"
16610
+ [navigable]="navigable"
16611
+ [attr.aria-controls]="ariaRootId"
16156
16612
  [options]="pageable"
16157
16613
  (pageChange)="notifyPageChange('pager', $event)">
16158
16614
  </kendo-treelist-pager>
16159
16615
  <kendo-treelist-toolbar
16160
16616
  *ngIf="showBottomToolbar"
16161
16617
  class="k-toolbar k-grid-toolbar k-grid-toolbar-bottom k-toolbar-md"
16162
- position="bottom"></kendo-treelist-toolbar>
16618
+ position="bottom"
16619
+ [navigable]="navigable"
16620
+ [attr.aria-label]="messageFor('bottomToolbarLabel')"
16621
+ [attr.aria-controls]="ariaRootId">
16622
+ </kendo-treelist-toolbar>
16163
16623
  `
16164
16624
  }]
16165
16625
  }], ctorParameters: function () { return [{ type: BrowserSupportService }, { type: i0.ElementRef }, { type: ChangeNotificationService }, { type: EditService }, { type: FilterService }, { type: PDFService }, { type: ResponsiveService }, { type: i0.Renderer2 }, { type: ExcelService }, { type: i0.NgZone }, { type: ScrollSyncService }, { type: DomEventsService }, { type: ColumnResizingService }, { type: i0.ChangeDetectorRef }, { type: ColumnReorderService }, { type: ColumnInfoService }, { type: NavigationService }, { type: SortService }, { type: ScrollRequestService }, { type: ExpandStateService }, { type: OptionChangesService }, { type: SelectionService }, { type: i1$1.LocalizationService }, { type: ContextService }]; }, propDecorators: { ariaLabel: [{
@@ -16304,10 +16764,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
16304
16764
  args: [ColumnMenuTemplateDirective]
16305
16765
  }], lockedHeader: [{
16306
16766
  type: ViewChild,
16307
- args: ['lockedHeader', { static: false }]
16767
+ args: ['lockedHeader']
16308
16768
  }], header: [{
16309
16769
  type: ViewChild,
16310
- args: ['header', { static: false }]
16770
+ args: ['header']
16311
16771
  }], footer: [{
16312
16772
  type: ViewChildren,
16313
16773
  args: ['footer']
@@ -17618,7 +18078,7 @@ ColumnChooserComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
17618
18078
  (columnChange)="onChange($event)">
17619
18079
  </kendo-treelist-columnlist>
17620
18080
  </ng-template>
17621
- `, isInline: true, components: [{ type: i3$4.Button, selector: "button[kendoButton], span[kendoButton], kendo-button", inputs: ["toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { type: ColumnListComponent, selector: "kendo-treelist-columnlist", inputs: ["columns", "autoSync", "allowHideAll", "applyText", "resetText", "actionsClass"], outputs: ["reset", "apply", "columnChange"] }] });
18081
+ `, isInline: true, components: [{ type: i4$2.Button, selector: "button[kendoButton], span[kendoButton], kendo-button", inputs: ["toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { type: ColumnListComponent, selector: "kendo-treelist-columnlist", inputs: ["columns", "autoSync", "allowHideAll", "applyText", "resetText", "actionsClass"], outputs: ["reset", "apply", "columnChange"] }] });
17622
18082
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnChooserComponent, decorators: [{
17623
18083
  type: Component,
17624
18084
  args: [{
@@ -18339,6 +18799,63 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
18339
18799
  }]
18340
18800
  }] });
18341
18801
 
18802
+ /**
18803
+ * A directive applied to all toolbar elements that need to be a part of the TreeList
18804
+ * keyboard navigation.
18805
+ */
18806
+ class TreeListToolbarFocusableDirective {
18807
+ constructor(host, ctx) {
18808
+ this.host = host;
18809
+ this.ctx = ctx;
18810
+ }
18811
+ /**
18812
+ * @hidden
18813
+ */
18814
+ get element() {
18815
+ return this.host.nativeElement;
18816
+ }
18817
+ /**
18818
+ * @hidden
18819
+ */
18820
+ get toolbarPosition() {
18821
+ var _a;
18822
+ return isDocumentAvailable() && ((_a = this.host.nativeElement.closest('.k-toolbar')) === null || _a === void 0 ? void 0 : _a.getAttribute('position'));
18823
+ }
18824
+ ngAfterViewInit() {
18825
+ var _a, _b;
18826
+ if (!isDocumentAvailable() || !this.toolbarPosition) {
18827
+ return;
18828
+ }
18829
+ (_a = this.ctx[`${this.toolbarPosition}ToolbarNavigation`]) === null || _a === void 0 ? void 0 : _a.navigableElements.push(this.element);
18830
+ (_b = this.ctx[`${this.toolbarPosition}ToolbarNavigation`]) === null || _b === void 0 ? void 0 : _b.notify();
18831
+ }
18832
+ ngOnDestroy() {
18833
+ if (!isDocumentAvailable() || !this.toolbarPosition) {
18834
+ return;
18835
+ }
18836
+ const elements = this.ctx[`${this.toolbarPosition}ToolbarNavigation`].navigableElements;
18837
+ this.ctx[`${this.toolbarPosition}ToolbarNavigation`].navigableElements = elements.filter(el => el !== this.element);
18838
+ this.ctx[`${this.toolbarPosition}ToolbarNavigation`].notify();
18839
+ }
18840
+ }
18841
+ TreeListToolbarFocusableDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: TreeListToolbarFocusableDirective, deps: [{ token: i0.ElementRef }, { token: ContextService }], target: i0.ɵɵFactoryTarget.Directive });
18842
+ TreeListToolbarFocusableDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.12", type: TreeListToolbarFocusableDirective, selector: "\n [kendoTreeListToolbarFocusable],\n [kendoTreeListAddCommand],\n [kendoTreeListCancelCommand],\n [kendoTreeListEditCommand],\n [kendoTreeListRemoveCommand],\n [kendoTreeListSaveCommand],\n [kendoTreeListExcelCommand],\n [kendoTreeListPDFCommand]\n ", ngImport: i0 });
18843
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: TreeListToolbarFocusableDirective, decorators: [{
18844
+ type: Directive,
18845
+ args: [{
18846
+ selector: `
18847
+ [kendoTreeListToolbarFocusable],
18848
+ [kendoTreeListAddCommand],
18849
+ [kendoTreeListCancelCommand],
18850
+ [kendoTreeListEditCommand],
18851
+ [kendoTreeListRemoveCommand],
18852
+ [kendoTreeListSaveCommand],
18853
+ [kendoTreeListExcelCommand],
18854
+ [kendoTreeListPDFCommand]
18855
+ `
18856
+ }]
18857
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: ContextService }]; } });
18858
+
18342
18859
  /**
18343
18860
  * @hidden
18344
18861
  */
@@ -19346,6 +19863,7 @@ const exportedModules$1 = [
19346
19863
  FlatBindingDirective,
19347
19864
  ExpandableDirective,
19348
19865
  SelectableDirective,
19866
+ TreeListToolbarFocusableDirective,
19349
19867
  ...SharedModule.exports(),
19350
19868
  ...BodyModule.exports(),
19351
19869
  ...HeaderModule.exports(),
@@ -19369,7 +19887,8 @@ const declarations$2 = [
19369
19887
  ExpandableDirective,
19370
19888
  SelectableDirective,
19371
19889
  MarqueeDirective,
19372
- TreeListSpacerComponent
19890
+ TreeListSpacerComponent,
19891
+ TreeListToolbarFocusableDirective
19373
19892
  ];
19374
19893
  /**
19375
19894
  * Represents the [NgModule](link:site.data.urls.angular['ngmoduleapi'])
@@ -19409,7 +19928,8 @@ TreeListModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version:
19409
19928
  ExpandableDirective,
19410
19929
  SelectableDirective,
19411
19930
  MarqueeDirective,
19412
- TreeListSpacerComponent], imports: [CommonModule,
19931
+ TreeListSpacerComponent,
19932
+ TreeListToolbarFocusableDirective], imports: [CommonModule,
19413
19933
  SharedModule,
19414
19934
  BodyModule,
19415
19935
  HeaderModule,
@@ -19428,7 +19948,8 @@ TreeListModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version:
19428
19948
  HierarchyBindingDirective,
19429
19949
  FlatBindingDirective,
19430
19950
  ExpandableDirective,
19431
- SelectableDirective, ColumnComponent, SpanColumnComponent, CheckboxColumnComponent, ColumnGroupComponent, FocusableDirective, CommandColumnComponent, CellTemplateDirective, NoRecordsTemplateDirective, EditTemplateDirective, EditCommandDirective, CancelCommandDirective, SaveCommandDirective, RemoveCommandDirective, AddCommandDirective, FooterTemplateDirective, HeaderTemplateDirective, PagerComponent, PagerPrevButtonsComponent, PagerNextButtonsComponent, PagerNumericButtonsComponent, PagerInputComponent, PagerInfoComponent, PagerPageSizesComponent, PagerTemplateDirective, FilterRowComponent, FilterCellComponent, FilterCellTemplateDirective, FilterCellOperatorsComponent, StringFilterCellComponent, NumericFilterCellComponent, AutoCompleteFilterCellComponent, BooleanFilterCellComponent, DateFilterCellComponent, FilterCellOperatorsComponent, ContainsFilterOperatorComponent, DoesNotContainFilterOperatorComponent, EndsWithFilterOperatorComponent, EqualFilterOperatorComponent, IsEmptyFilterOperatorComponent, IsNotEmptyFilterOperatorComponent, IsNotNullFilterOperatorComponent, IsNullFilterOperatorComponent, NotEqualFilterOperatorComponent, StartsWithFilterOperatorComponent, GreaterFilterOperatorComponent, GreaterOrEqualToFilterOperatorComponent, LessFilterOperatorComponent, LessOrEqualToFilterOperatorComponent, AfterFilterOperatorComponent, AfterEqFilterOperatorComponent, BeforeEqFilterOperatorComponent, BeforeFilterOperatorComponent, StringFilterMenuComponent, FilterMenuTemplateDirective, NumericFilterMenuComponent, DateFilterMenuComponent, BooleanFilterMenuComponent, FilterCellOperatorsComponent, ContainsFilterOperatorComponent, DoesNotContainFilterOperatorComponent, EndsWithFilterOperatorComponent, EqualFilterOperatorComponent, IsEmptyFilterOperatorComponent, IsNotEmptyFilterOperatorComponent, IsNotNullFilterOperatorComponent, IsNullFilterOperatorComponent, NotEqualFilterOperatorComponent, StartsWithFilterOperatorComponent, GreaterFilterOperatorComponent, GreaterOrEqualToFilterOperatorComponent, LessFilterOperatorComponent, LessOrEqualToFilterOperatorComponent, AfterFilterOperatorComponent, AfterEqFilterOperatorComponent, BeforeEqFilterOperatorComponent, BeforeFilterOperatorComponent, ColumnChooserComponent, ColumnMenuFilterComponent, ColumnMenuItemComponent, ColumnMenuItemContentTemplateDirective, ColumnMenuSortComponent, ColumnMenuLockComponent, ColumnMenuChooserComponent, ColumnMenuTemplateDirective, ColumnMenuComponent] });
19951
+ SelectableDirective,
19952
+ TreeListToolbarFocusableDirective, ColumnComponent, SpanColumnComponent, CheckboxColumnComponent, ColumnGroupComponent, FocusableDirective, CommandColumnComponent, CellTemplateDirective, NoRecordsTemplateDirective, EditTemplateDirective, EditCommandDirective, CancelCommandDirective, SaveCommandDirective, RemoveCommandDirective, AddCommandDirective, FooterTemplateDirective, HeaderTemplateDirective, PagerComponent, PagerPrevButtonsComponent, PagerNextButtonsComponent, PagerNumericButtonsComponent, PagerInputComponent, PagerInfoComponent, PagerPageSizesComponent, PagerTemplateDirective, FilterRowComponent, FilterCellComponent, FilterCellTemplateDirective, FilterCellOperatorsComponent, StringFilterCellComponent, NumericFilterCellComponent, AutoCompleteFilterCellComponent, BooleanFilterCellComponent, DateFilterCellComponent, FilterCellOperatorsComponent, ContainsFilterOperatorComponent, DoesNotContainFilterOperatorComponent, EndsWithFilterOperatorComponent, EqualFilterOperatorComponent, IsEmptyFilterOperatorComponent, IsNotEmptyFilterOperatorComponent, IsNotNullFilterOperatorComponent, IsNullFilterOperatorComponent, NotEqualFilterOperatorComponent, StartsWithFilterOperatorComponent, GreaterFilterOperatorComponent, GreaterOrEqualToFilterOperatorComponent, LessFilterOperatorComponent, LessOrEqualToFilterOperatorComponent, AfterFilterOperatorComponent, AfterEqFilterOperatorComponent, BeforeEqFilterOperatorComponent, BeforeFilterOperatorComponent, StringFilterMenuComponent, FilterMenuTemplateDirective, NumericFilterMenuComponent, DateFilterMenuComponent, BooleanFilterMenuComponent, FilterCellOperatorsComponent, ContainsFilterOperatorComponent, DoesNotContainFilterOperatorComponent, EndsWithFilterOperatorComponent, EqualFilterOperatorComponent, IsEmptyFilterOperatorComponent, IsNotEmptyFilterOperatorComponent, IsNotNullFilterOperatorComponent, IsNullFilterOperatorComponent, NotEqualFilterOperatorComponent, StartsWithFilterOperatorComponent, GreaterFilterOperatorComponent, GreaterOrEqualToFilterOperatorComponent, LessFilterOperatorComponent, LessOrEqualToFilterOperatorComponent, AfterFilterOperatorComponent, AfterEqFilterOperatorComponent, BeforeEqFilterOperatorComponent, BeforeFilterOperatorComponent, ColumnChooserComponent, ColumnMenuFilterComponent, ColumnMenuItemComponent, ColumnMenuItemContentTemplateDirective, ColumnMenuSortComponent, ColumnMenuLockComponent, ColumnMenuChooserComponent, ColumnMenuTemplateDirective, ColumnMenuComponent] });
19432
19953
  TreeListModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: TreeListModule, imports: [[
19433
19954
  CommonModule,
19434
19955
  SharedModule,
@@ -20333,5 +20854,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
20333
20854
  * Generated bundle index. Do not edit.
20334
20855
  */
20335
20856
 
20336
- export { AddCommandDirective, AfterEqFilterOperatorComponent, AfterFilterOperatorComponent, AutoCompleteFilterCellComponent, BaseCommandDirective, BaseFilterCellComponent, BeforeEqFilterOperatorComponent, BeforeFilterOperatorComponent, BodyModule, BooleanFilterCellComponent, BooleanFilterComponent, BooleanFilterMenuComponent, CancelCommandDirective, CellCloseEvent, CellComponent, CellTemplateDirective, CheckboxColumnComponent, ColGroupComponent, ColumnBase, ColumnChooserComponent, ColumnComponent, ColumnGroupComponent, ColumnHandleDirective, ColumnInfoService, ColumnMenuChooserComponent, ColumnMenuComponent, ColumnMenuFilterComponent, ColumnMenuItemComponent, ColumnMenuItemContentTemplateDirective, ColumnMenuLockComponent, ColumnMenuSortComponent, ColumnMenuTemplateDirective, ColumnReorderEvent, ColumnVisibilityChangeEvent, ColumnsContainer, CommandColumnComponent, ContainsFilterOperatorComponent, CustomMessagesComponent, DataBoundTreeComponent, DateFilterCellComponent, DateFilterComponent, DateFilterMenuComponent, DateFilterMenuInputComponent, DoesNotContainFilterOperatorComponent, EditCommandDirective, EditTemplateDirective, EditingDirectiveBase, EndsWithFilterOperatorComponent, EqualFilterOperatorComponent, ExcelCommandDirective, ExcelComponent, ExcelExportEvent, ExcelModule, ExcelService, ExpandEvent, ExpandableDirective, ExpandableTreeComponent, FieldAccessorPipe, FilterCellComponent, FilterCellHostDirective, FilterCellOperatorsComponent, FilterCellTemplateDirective, FilterCellWrapperComponent, FilterInputDirective, FilterMenuComponent, FilterMenuContainerComponent, FilterMenuHostDirective, FilterMenuInputWrapperComponent, FilterMenuModule, FilterMenuTemplateDirective, FilterRowComponent, FilterService, FlatBindingDirective, FocusableDirective, FooterTemplateDirective, GreaterFilterOperatorComponent, GreaterOrEqualToFilterOperatorComponent, HeaderComponent, HeaderModule, HeaderTemplateDirective, HierarchyBindingDirective, InCellEditingDirective, IsEmptyFilterOperatorComponent, IsNotEmptyFilterOperatorComponent, IsNotNullFilterOperatorComponent, IsNullFilterOperatorComponent, LessFilterOperatorComponent, LessOrEqualToFilterOperatorComponent, LevelItemsPipe, ListComponent, LoadingComponent, LogicalCellDirective, LogicalRowDirective, NoRecordsTemplateDirective, NotEqualFilterOperatorComponent, NumericFilterCellComponent, NumericFilterMenuComponent, NumericFilterMenuInputComponent, PDFCommandDirective, PDFComponent, PDFMarginComponent, PDFModule, PDFService, PDFTemplateDirective, PagerComponent, PagerInfoComponent, PagerInputComponent, PagerModule, PagerNextButtonsComponent, PagerNumericButtonsComponent, PagerPageSizesComponent, PagerPrevButtonsComponent, PagerTemplateDirective, PopupCloseEvent, ReactiveEditingDirective, RemoveCommandDirective, ResizableContainerDirective, RowEditingDirectiveBase, RowFilterModule, SaveCommandDirective, SelectableDirective, SelectionChangeEvent, SharedFilterModule, SharedModule, SinglePopupService, Skip, SpanColumnComponent, StartsWithFilterOperatorComponent, StringFilterCellComponent, StringFilterMenuComponent, StringFilterMenuInputComponent, SuspendService, TableBodyComponent, TableDirective, TemplateContextDirective, TemplateEditingDirective, ToolbarComponent, ToolbarTemplateDirective, TreeListComponent, TreeListModule, TreeListSpacerComponent };
20857
+ export { AddCommandDirective, AfterEqFilterOperatorComponent, AfterFilterOperatorComponent, AutoCompleteFilterCellComponent, BaseCommandDirective, BaseFilterCellComponent, BeforeEqFilterOperatorComponent, BeforeFilterOperatorComponent, BodyModule, BooleanFilterCellComponent, BooleanFilterComponent, BooleanFilterMenuComponent, CancelCommandDirective, CellCloseEvent, CellComponent, CellTemplateDirective, CheckboxColumnComponent, ColGroupComponent, ColumnBase, ColumnChooserComponent, ColumnComponent, ColumnGroupComponent, ColumnHandleDirective, ColumnInfoService, ColumnMenuChooserComponent, ColumnMenuComponent, ColumnMenuFilterComponent, ColumnMenuItemComponent, ColumnMenuItemContentTemplateDirective, ColumnMenuLockComponent, ColumnMenuSortComponent, ColumnMenuTemplateDirective, ColumnReorderEvent, ColumnVisibilityChangeEvent, ColumnsContainer, CommandColumnComponent, ContainsFilterOperatorComponent, CustomMessagesComponent, DataBoundTreeComponent, DateFilterCellComponent, DateFilterComponent, DateFilterMenuComponent, DateFilterMenuInputComponent, DoesNotContainFilterOperatorComponent, EditCommandDirective, EditTemplateDirective, EditingDirectiveBase, EndsWithFilterOperatorComponent, EqualFilterOperatorComponent, ExcelCommandDirective, ExcelComponent, ExcelExportEvent, ExcelModule, ExcelService, ExpandEvent, ExpandableDirective, ExpandableTreeComponent, FieldAccessorPipe, FilterCellComponent, FilterCellHostDirective, FilterCellOperatorsComponent, FilterCellTemplateDirective, FilterCellWrapperComponent, FilterInputDirective, FilterMenuComponent, FilterMenuContainerComponent, FilterMenuHostDirective, FilterMenuInputWrapperComponent, FilterMenuModule, FilterMenuTemplateDirective, FilterRowComponent, FilterService, FlatBindingDirective, FocusableDirective, FooterTemplateDirective, GreaterFilterOperatorComponent, GreaterOrEqualToFilterOperatorComponent, HeaderComponent, HeaderModule, HeaderTemplateDirective, HierarchyBindingDirective, InCellEditingDirective, IsEmptyFilterOperatorComponent, IsNotEmptyFilterOperatorComponent, IsNotNullFilterOperatorComponent, IsNullFilterOperatorComponent, LessFilterOperatorComponent, LessOrEqualToFilterOperatorComponent, LevelItemsPipe, ListComponent, LoadingComponent, LogicalCellDirective, LogicalRowDirective, NoRecordsTemplateDirective, NotEqualFilterOperatorComponent, NumericFilterCellComponent, NumericFilterMenuComponent, NumericFilterMenuInputComponent, PDFCommandDirective, PDFComponent, PDFMarginComponent, PDFModule, PDFService, PDFTemplateDirective, PagerComponent, PagerInfoComponent, PagerInputComponent, PagerModule, PagerNextButtonsComponent, PagerNumericButtonsComponent, PagerPageSizesComponent, PagerPrevButtonsComponent, PagerTemplateDirective, PopupCloseEvent, ReactiveEditingDirective, RemoveCommandDirective, ResizableContainerDirective, RowEditingDirectiveBase, RowFilterModule, SaveCommandDirective, SelectableDirective, SelectionChangeEvent, SharedFilterModule, SharedModule, SinglePopupService, Skip, SpanColumnComponent, StartsWithFilterOperatorComponent, StringFilterCellComponent, StringFilterMenuComponent, StringFilterMenuInputComponent, SuspendService, TableBodyComponent, TableDirective, TemplateContextDirective, TemplateEditingDirective, ToolbarComponent, ToolbarTemplateDirective, TreeListComponent, TreeListModule, TreeListSpacerComponent, TreeListToolbarFocusableDirective };
20337
20858