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

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: 1684149063,
50
+ version: '12.1.0-develop.1',
51
51
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'
52
52
  };
53
53
 
@@ -604,6 +604,10 @@ const cancelAnimationFrame = wnd.cancelAnimationFrame || wnd.msCancelRequestAnim
604
604
  /** @hidden */
605
605
  const isColumnEditable = (column, formGroup) => column.isEditable !== false &&
606
606
  (column.editTemplate || (formGroup && column.field && formGroup.get(column.field)));
607
+ /**
608
+ * @hidden
609
+ */
610
+ const replaceMessagePlaceholder = (message, name, value) => message.replace(new RegExp(`\{\\s*${name}\\s*\}`, 'g'), value);
607
611
 
608
612
  /**
609
613
  * Represents the filter-cell template ([see example]({% slug builtinfiltertemplate_treelist %}#toc-customizing-filter-rows)).
@@ -2617,8 +2621,9 @@ const isFocusableWithTabKey = (element, checkVisibility = true) => {
2617
2621
  return false;
2618
2622
  }
2619
2623
  const tabIndex = element.getAttribute('tabIndex');
2624
+ const ariaHidden = element.getAttribute('aria-hidden') === 'true';
2620
2625
  const visible = !checkVisibility || isVisible(element);
2621
- return visible && tabIndex !== '-1';
2626
+ return visible && !ariaHidden && tabIndex !== '-1';
2622
2627
  };
2623
2628
  /**
2624
2629
  * @hidden
@@ -2641,6 +2646,19 @@ const findElement = (node, predicate, matchSelf = true) => {
2641
2646
  node = node.nextSibling;
2642
2647
  }
2643
2648
  };
2649
+ /**
2650
+ * @hidden
2651
+ */
2652
+ const findLastElement = (node, predicate, matchSelf = true) => {
2653
+ let last = null;
2654
+ findElement(node, (node) => {
2655
+ if (predicate(node)) {
2656
+ last = node;
2657
+ }
2658
+ return false;
2659
+ }, matchSelf);
2660
+ return last;
2661
+ };
2644
2662
  /**
2645
2663
  * @hidden
2646
2664
  */
@@ -2653,6 +2671,12 @@ const findFocusable = (element, checkVisibility = true) => {
2653
2671
  const findFocusableChild = (element, checkVisibility = true) => {
2654
2672
  return findElement(element, (node) => isFocusableWithTabKey(node, checkVisibility), false);
2655
2673
  };
2674
+ /**
2675
+ * @hidden
2676
+ */
2677
+ const findLastFocusableChild = (element, checkVisibility = true) => {
2678
+ return findLastElement(element, (node) => isFocusableWithTabKey(node, checkVisibility), false);
2679
+ };
2656
2680
  /**
2657
2681
  * @hidden
2658
2682
  */
@@ -3218,39 +3242,49 @@ class ColumnReorderEvent extends PreventableEvent {
3218
3242
  }
3219
3243
  }
3220
3244
 
3245
+ /**
3246
+ * @hidden
3247
+ */
3248
+ const FOCUS_ROOT_ACTIVE = new InjectionToken('focus-root-initial-active-state');
3221
3249
  /**
3222
3250
  * @hidden
3223
3251
  */
3224
3252
  class FocusRoot {
3225
- constructor() {
3253
+ constructor(active = false) {
3254
+ this.active = active;
3226
3255
  this.groups = new Set();
3227
3256
  }
3228
3257
  registerGroup(group) {
3229
- if (this.alive) {
3258
+ if (this.active) {
3230
3259
  this.groups.add(group);
3231
3260
  }
3232
3261
  }
3233
3262
  unregisterGroup(group) {
3234
- if (this.alive) {
3263
+ if (this.active) {
3235
3264
  this.groups.delete(group);
3236
3265
  }
3237
3266
  }
3238
3267
  activate() {
3239
- if (this.alive) {
3268
+ if (this.active) {
3240
3269
  this.groups.forEach(f => f.activate());
3241
3270
  }
3242
3271
  }
3243
3272
  deactivate() {
3244
- if (this.alive) {
3273
+ if (this.active) {
3245
3274
  this.groups.forEach(f => f.deactivate());
3246
3275
  }
3247
3276
  }
3248
3277
  }
3249
- FocusRoot.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FocusRoot, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
3278
+ 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 });
3250
3279
  FocusRoot.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FocusRoot });
3251
3280
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FocusRoot, decorators: [{
3252
3281
  type: Injectable
3253
- }] });
3282
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
3283
+ type: Optional
3284
+ }, {
3285
+ type: Inject,
3286
+ args: [FOCUS_ROOT_ACTIVE]
3287
+ }] }]; } });
3254
3288
 
3255
3289
  const isButton = matchesNodeName('button');
3256
3290
  const isInputTag = matchesNodeName('input');
@@ -3319,6 +3353,7 @@ class FocusGroup {
3319
3353
  }
3320
3354
  ngOnDestroy() {
3321
3355
  this.root.unregisterGroup(this);
3356
+ this.active = true;
3322
3357
  }
3323
3358
  /**
3324
3359
  * @hidden
@@ -3407,27 +3442,42 @@ class FocusableDirective {
3407
3442
  this.renderer = renderer;
3408
3443
  this.group = group;
3409
3444
  this.active = true;
3445
+ this._enabled = true;
3446
+ }
3447
+ /**
3448
+ * @hidden
3449
+ */
3450
+ set enabled(value) {
3451
+ if (value !== this.enabled) {
3452
+ this._enabled = value;
3453
+ if (this.element) {
3454
+ this.element.toggle(this.active && value);
3455
+ }
3456
+ }
3457
+ }
3458
+ get enabled() {
3459
+ return this._enabled;
3410
3460
  }
3411
3461
  /**
3412
3462
  * @hidden
3413
3463
  */
3414
- set addCellContext(value) { this.cellContext = value; }
3464
+ set addCellContext(value) { this.cellContext = value; this.enabled = true; }
3415
3465
  /**
3416
3466
  * @hidden
3417
3467
  */
3418
- set editCellContext(value) { this.cellContext = value; }
3468
+ set editCellContext(value) { this.cellContext = value; this.enabled = true; }
3419
3469
  /**
3420
3470
  * @hidden
3421
3471
  */
3422
- set removeCellContext(value) { this.cellContext = value; }
3472
+ set removeCellContext(value) { this.cellContext = value; this.enabled = true; }
3423
3473
  /**
3424
3474
  * @hidden
3425
3475
  */
3426
- set saveCellContext(value) { this.cellContext = value; }
3476
+ set saveCellContext(value) { this.cellContext = value; this.enabled = true; }
3427
3477
  /**
3428
3478
  * @hidden
3429
3479
  */
3430
- set cancelCellContext(value) { this.cellContext = value; }
3480
+ set cancelCellContext(value) { this.cellContext = value; this.enabled = true; }
3431
3481
  ngOnInit() {
3432
3482
  if (this.cellContext && this.cellContext.focusGroup) {
3433
3483
  this.group = this.cellContext.focusGroup;
@@ -3456,26 +3506,26 @@ class FocusableDirective {
3456
3506
  toggle(active) {
3457
3507
  if (this.element && active !== this.active) {
3458
3508
  this.active = active;
3459
- this.element.toggle(active);
3509
+ this.element.toggle(this.enabled && active);
3460
3510
  }
3461
3511
  }
3462
3512
  /**
3463
3513
  * @hidden
3464
3514
  */
3465
3515
  canFocus() {
3466
- return this.element && this.element.canFocus();
3516
+ return this.enabled && this.element && this.element.canFocus();
3467
3517
  }
3468
3518
  /**
3469
3519
  * @hidden
3470
3520
  */
3471
3521
  isNavigable() {
3472
- return this.element && this.element.isNavigable();
3522
+ return this.enabled && this.element && this.element.isNavigable();
3473
3523
  }
3474
3524
  /**
3475
3525
  * @hidden
3476
3526
  */
3477
3527
  focus() {
3478
- if (this.element) {
3528
+ if (this.enabled && this.element) {
3479
3529
  this.element.focus();
3480
3530
  }
3481
3531
  }
@@ -3483,7 +3533,7 @@ class FocusableDirective {
3483
3533
  * @hidden
3484
3534
  */
3485
3535
  hasFocus() {
3486
- return this.element && this.element.hasFocus();
3536
+ return this.enabled && this.element && this.element.hasFocus();
3487
3537
  }
3488
3538
  /**
3489
3539
  * @hidden
@@ -3493,7 +3543,7 @@ class FocusableDirective {
3493
3543
  }
3494
3544
  }
3495
3545
  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 });
3496
- 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 });
3546
+ 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 });
3497
3547
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FocusableDirective, decorators: [{
3498
3548
  type: Directive,
3499
3549
  args: [{
@@ -3510,6 +3560,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
3510
3560
  }] }]; }, propDecorators: { cellContext: [{
3511
3561
  type: Input,
3512
3562
  args: ['kendoTreeListFocusable']
3563
+ }], enabled: [{
3564
+ type: Input
3513
3565
  }], addCellContext: [{
3514
3566
  type: Input,
3515
3567
  args: ['kendoTreeListAddCommand']
@@ -4330,7 +4382,7 @@ class NavigationService {
4330
4382
  }
4331
4383
  init(meta) {
4332
4384
  this.alive = true;
4333
- this.focusRoot.alive = true;
4385
+ this.focusRoot.active = true;
4334
4386
  this.metadata = meta;
4335
4387
  const onStableSubscriber = (...operators) => (args) => this.zone.isStable ?
4336
4388
  from([true]).pipe(map(() => args)) :
@@ -4998,6 +5050,53 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
4998
5050
  type: Injectable
4999
5051
  }] });
5000
5052
 
5053
+ /**
5054
+ * @hidden
5055
+ */
5056
+ class TreeListToolbarNavigationService {
5057
+ constructor(renderer) {
5058
+ this.renderer = renderer;
5059
+ this.navigableElements = [];
5060
+ this.currentActiveIndex = 0;
5061
+ this.defaultFocusableSelector = `
5062
+ [kendoTreeListToolbarFocusable],
5063
+ [kendoTreeListAddCommand],
5064
+ [kendoTreeListCancelCommand],
5065
+ [kendoTreeListEditCommand],
5066
+ [kendoTreeListRemoveCommand],
5067
+ [kendoTreeListSaveCommand],
5068
+ [kendoTreeListExcelCommand],
5069
+ [kendoTreeListPDFCommand]
5070
+ `;
5071
+ }
5072
+ notify() {
5073
+ // ensure focusable elements are in the same order as in the DOM
5074
+ this.navigableElements = this.navigableElements.length && Array.from(this.navigableElements[0].parentElement.querySelectorAll(this.defaultFocusableSelector)) || [];
5075
+ this.currentActiveIndex = 0;
5076
+ this.updateFocus();
5077
+ }
5078
+ focus() {
5079
+ this.navigableElements[this.currentActiveIndex]?.focus();
5080
+ }
5081
+ updateFocus() {
5082
+ if (!this.navigableElements.length) {
5083
+ return;
5084
+ }
5085
+ this.navigableElements.forEach(el => {
5086
+ this.renderer.setAttribute(el, 'tabindex', '-1');
5087
+ });
5088
+ this.renderer.setAttribute(this.navigableElements[this.currentActiveIndex], 'tabindex', '0');
5089
+ if (isDocumentAvailable() && document.activeElement.closest('.k-toolbar')) {
5090
+ this.navigableElements[this.currentActiveIndex].focus();
5091
+ }
5092
+ }
5093
+ }
5094
+ TreeListToolbarNavigationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: TreeListToolbarNavigationService, deps: [{ token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Injectable });
5095
+ TreeListToolbarNavigationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: TreeListToolbarNavigationService });
5096
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: TreeListToolbarNavigationService, decorators: [{
5097
+ type: Injectable
5098
+ }], ctorParameters: function () { return [{ type: i0.Renderer2 }]; } });
5099
+
5001
5100
  /**
5002
5101
  * @hidden
5003
5102
  *
@@ -5008,20 +5107,31 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
5008
5107
  * and a avoids dependency cycles between components.
5009
5108
  */
5010
5109
  class ContextService {
5110
+ constructor(renderer) {
5111
+ this.renderer = renderer;
5112
+ this.topToolbarNavigation = new TreeListToolbarNavigationService(this.renderer);
5113
+ this.bottomToolbarNavigation = new TreeListToolbarNavigationService(this.renderer);
5114
+ }
5011
5115
  }
5012
- ContextService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ContextService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
5116
+ ContextService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ContextService, deps: [{ token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Injectable });
5013
5117
  ContextService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ContextService });
5014
5118
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ContextService, decorators: [{
5015
5119
  type: Injectable
5016
- }] });
5120
+ }], ctorParameters: function () { return [{ type: i0.Renderer2 }]; } });
5017
5121
 
5122
+ /* eslint-disable @typescript-eslint/no-inferrable-types */
5018
5123
  /**
5019
5124
  * @hidden
5020
5125
  */
5021
5126
  class ToolbarComponent {
5022
- constructor(ctx) {
5127
+ constructor(elem, renderer, ctx) {
5128
+ this.elem = elem;
5129
+ this.renderer = renderer;
5023
5130
  this.ctx = ctx;
5131
+ this.hostRole = 'toolbar';
5024
5132
  this.context = {};
5133
+ this.subs = new Subscription();
5134
+ this.navigationService = this.ctx[`${this.elem.nativeElement.getAttribute('position')}ToolbarNavigation`];
5025
5135
  }
5026
5136
  set position(value) {
5027
5137
  this.context.position = value;
@@ -5029,9 +5139,35 @@ class ToolbarComponent {
5029
5139
  get toolbarTemplateRef() {
5030
5140
  return this.ctx.treelist.toolbarTemplate ? this.ctx.treelist.toolbarTemplate.templateRef : undefined;
5031
5141
  }
5142
+ ngAfterViewInit() {
5143
+ const element = this.elem.nativeElement;
5144
+ this.subs.add(this.renderer.listen(element, 'keydown', event => this.onKeyDown(event)));
5145
+ }
5146
+ ngOnDestroy() {
5147
+ this.subs.unsubscribe();
5148
+ }
5149
+ onKeyDown(event) {
5150
+ if (this.navigable && isDocumentAvailable() && this.navigationService.navigableElements.length) {
5151
+ const keyCode = event.keyCode;
5152
+ if (keyCode === Keys.ArrowLeft || keyCode === Keys.ArrowRight) {
5153
+ event.preventDefault();
5154
+ const dir = keyCode === Keys.ArrowLeft ? -1 : 1;
5155
+ this.changeFocusedItem(dir);
5156
+ }
5157
+ }
5158
+ }
5159
+ changeFocusedItem(dir) {
5160
+ this.navigationService.currentActiveIndex += dir;
5161
+ const bottomRange = this.navigationService.currentActiveIndex < 0;
5162
+ const topRange = this.navigationService.currentActiveIndex >= this.navigationService.navigableElements.length;
5163
+ if (bottomRange || topRange) {
5164
+ this.navigationService.currentActiveIndex = bottomRange ? this.navigationService.navigableElements.length - 1 : 0;
5165
+ }
5166
+ this.navigationService.updateFocus();
5167
+ }
5032
5168
  }
5033
- ToolbarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ToolbarComponent, deps: [{ token: ContextService }], target: i0.ɵɵFactoryTarget.Component });
5034
- ToolbarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: ToolbarComponent, selector: "kendo-treelist-toolbar", inputs: { position: "position" }, ngImport: i0, template: `
5169
+ 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 });
5170
+ 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: `
5035
5171
  <ng-template
5036
5172
  *ngIf="toolbarTemplateRef"
5037
5173
  [ngTemplateOutlet]="toolbarTemplateRef"
@@ -5052,7 +5188,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
5052
5188
  </ng-template>
5053
5189
  `
5054
5190
  }]
5055
- }], ctorParameters: function () { return [{ type: ContextService }]; }, propDecorators: { position: [{
5191
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: ContextService }]; }, propDecorators: { hostRole: [{
5192
+ type: HostBinding,
5193
+ args: ['attr.role']
5194
+ }], position: [{
5195
+ type: Input
5196
+ }], navigable: [{
5056
5197
  type: Input
5057
5198
  }] } });
5058
5199
 
@@ -5873,7 +6014,7 @@ StringFilterMenuInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
5873
6014
  [filterDelay]="0"
5874
6015
  [ngModel]="currentFilter?.value" />
5875
6016
  </kendo-treelist-filter-menu-input-wrapper>
5876
- `, 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"] }] });
6017
+ `, 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"] }] });
5877
6018
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: StringFilterMenuInputComponent, decorators: [{
5878
6019
  type: Component,
5879
6020
  args: [{
@@ -6171,7 +6312,7 @@ NumericFilterMenuInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion:
6171
6312
  [step]="step">
6172
6313
  </kendo-numerictextbox>
6173
6314
  </kendo-treelist-filter-menu-input-wrapper>
6174
- `, 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"] }] });
6315
+ `, 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"] }] });
6175
6316
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: NumericFilterMenuInputComponent, decorators: [{
6176
6317
  type: Component,
6177
6318
  args: [{
@@ -6929,7 +7070,7 @@ BooleanFilterMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0
6929
7070
  <label class="k-radio-label" [attr.for]="radioId(item.value)">{{item.text}}</label>
6930
7071
  </li>
6931
7072
  </ul>
6932
- `, isInline: true, directives: [{ type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.RadioButtonDirective, selector: "input[kendoRadioButton]", inputs: ["size"] }] });
7073
+ `, isInline: true, directives: [{ type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4$1.RadioButtonDirective, selector: "input[kendoRadioButton]", inputs: ["size"] }] });
6933
7074
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: BooleanFilterMenuComponent, decorators: [{
6934
7075
  type: Component,
6935
7076
  args: [{
@@ -8421,7 +8562,7 @@ FilterCellOperatorsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12
8421
8562
  (click)="clearClick()"
8422
8563
  (keydown)="clearKeydown($event)">
8423
8564
  </button>
8424
- `, 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"] }] });
8565
+ `, 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"] }] });
8425
8566
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FilterCellOperatorsComponent, decorators: [{
8426
8567
  type: Component,
8427
8568
  args: [{
@@ -8584,7 +8725,7 @@ StringFilterCellComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.
8584
8725
  [filterDelay]="filterDelay"
8585
8726
  [ngModel]="currentFilter?.value" />
8586
8727
  </kendo-treelist-filter-wrapper-cell>
8587
- `, 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"] }] });
8728
+ `, 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"] }] });
8588
8729
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: StringFilterCellComponent, decorators: [{
8589
8730
  type: Component,
8590
8731
  args: [{
@@ -8666,7 +8807,7 @@ NumericFilterCellComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0
8666
8807
  [step]="step">
8667
8808
  </kendo-numerictextbox>
8668
8809
  </kendo-treelist-filter-wrapper-cell>
8669
- `, 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"] }] });
8810
+ `, 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"] }] });
8670
8811
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: NumericFilterCellComponent, decorators: [{
8671
8812
  type: Component,
8672
8813
  args: [{
@@ -9135,7 +9276,7 @@ class FilterRowComponent {
9135
9276
  }
9136
9277
  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 });
9137
9278
  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: `
9138
- <td *ngFor="let column of columns; let columnIndex = index"
9279
+ <td *ngFor="let column of columns; let columnIndex = index" role="gridcell"
9139
9280
  [attr.aria-label]="filterLabel"
9140
9281
  kendoTreeListFilterCell
9141
9282
  [column]="$any(column)"
@@ -9153,7 +9294,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
9153
9294
  args: [{
9154
9295
  selector: '[kendoTreeListFilterRow]',
9155
9296
  template: `
9156
- <td *ngFor="let column of columns; let columnIndex = index"
9297
+ <td *ngFor="let column of columns; let columnIndex = index" role="gridcell"
9157
9298
  [attr.aria-label]="filterLabel"
9158
9299
  kendoTreeListFilterCell
9159
9300
  [column]="$any(column)"
@@ -9621,6 +9762,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
9621
9762
  args: ['dblclick']
9622
9763
  }] } });
9623
9764
 
9765
+ /* eslint-disable @typescript-eslint/no-explicit-any */
9624
9766
  const mergeObjects = (...args) => Object.assign.apply(null, [{}].concat(args));
9625
9767
  const directions = initialDirection => initialDirection === "asc" ? ["asc", "desc"] : ["desc", "asc"];
9626
9768
  /**
@@ -9933,7 +10075,7 @@ class HeaderComponent {
9933
10075
  }
9934
10076
  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 });
9935
10077
  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: `
9936
- <tr *ngFor="let i of columnLevels; let levelIndex = index"
10078
+ <tr *ngFor="let i of columnLevels; let levelIndex = index" role="row"
9937
10079
  kendoTreeListLogicalRow
9938
10080
  [logicalRowIndex]="levelIndex"
9939
10081
  [logicalSlaveRow]="lockedColumnsCount > 0"
@@ -9963,6 +10105,7 @@ HeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", versio
9963
10105
  }"
9964
10106
  class="k-header k-table-th"
9965
10107
  [class.k-filterable]="(showFilterMenu && isFilterable(getColumnComponent(column))) || showColumnMenu(column)"
10108
+ [attr.aria-haspopup]="(showFilterMenu || showColumnMenu(column)) ? 'dialog' : undefined"
9966
10109
  [class.k-first]="isFirstOnRow(getColumnComponent(column), columnIndex)"
9967
10110
  [ngClass]="column.headerClass"
9968
10111
  [ngStyle]="column.headerStyle"
@@ -10071,7 +10214,9 @@ HeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", versio
10071
10214
  }"
10072
10215
  class="k-header k-table-th"
10073
10216
  [class.k-first]="isFirstOnRow(getColumnComponent(column), columnIndex)"
10217
+ [attr.aria-haspopup]="(showFilterMenu || showColumnMenu(column)) ? 'dialog' : undefined"
10074
10218
  [class.k-filterable]="showColumnMenu(column)"
10219
+ [attr.aria-expanded]="showColumnMenu(column)"
10075
10220
  [ngClass]="column.headerClass"
10076
10221
  [ngStyle]="column.headerStyle"
10077
10222
  [attr.rowspan]="column.rowspan(totalColumnLevels)"
@@ -10113,13 +10258,13 @@ HeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", versio
10113
10258
  [logicalSlaveCellsCount]="unlockedColumnsCount"
10114
10259
  >
10115
10260
  </tr>
10116
- `, 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"] }] });
10261
+ `, 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"] }] });
10117
10262
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: HeaderComponent, decorators: [{
10118
10263
  type: Component,
10119
10264
  args: [{
10120
10265
  selector: '[kendoTreeListHeader]',
10121
10266
  template: `
10122
- <tr *ngFor="let i of columnLevels; let levelIndex = index"
10267
+ <tr *ngFor="let i of columnLevels; let levelIndex = index" role="row"
10123
10268
  kendoTreeListLogicalRow
10124
10269
  [logicalRowIndex]="levelIndex"
10125
10270
  [logicalSlaveRow]="lockedColumnsCount > 0"
@@ -10149,6 +10294,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
10149
10294
  }"
10150
10295
  class="k-header k-table-th"
10151
10296
  [class.k-filterable]="(showFilterMenu && isFilterable(getColumnComponent(column))) || showColumnMenu(column)"
10297
+ [attr.aria-haspopup]="(showFilterMenu || showColumnMenu(column)) ? 'dialog' : undefined"
10152
10298
  [class.k-first]="isFirstOnRow(getColumnComponent(column), columnIndex)"
10153
10299
  [ngClass]="column.headerClass"
10154
10300
  [ngStyle]="column.headerStyle"
@@ -10257,7 +10403,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
10257
10403
  }"
10258
10404
  class="k-header k-table-th"
10259
10405
  [class.k-first]="isFirstOnRow(getColumnComponent(column), columnIndex)"
10406
+ [attr.aria-haspopup]="(showFilterMenu || showColumnMenu(column)) ? 'dialog' : undefined"
10260
10407
  [class.k-filterable]="showColumnMenu(column)"
10408
+ [attr.aria-expanded]="showColumnMenu(column)"
10261
10409
  [ngClass]="column.headerClass"
10262
10410
  [ngStyle]="column.headerStyle"
10263
10411
  [attr.rowspan]="column.rowspan(totalColumnLevels)"
@@ -10643,6 +10791,7 @@ CellComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version:
10643
10791
  <ng-container *ngIf="column.expandable">
10644
10792
  <span class="k-icon k-i-none" *ngFor="let item of level | levelItems : hasChildren && expandIcons"></span>
10645
10793
  <kendo-icon-wrapper
10794
+ aria-hidden="true"
10646
10795
  *ngIf="hasChildren && expandIcons && !loading"
10647
10796
  [name]="isExpanded ? 'caret-alt-down' : 'caret-alt-right'"
10648
10797
  [svgIcon]="isExpanded ? caretAltDownIcon : caretAltRightIcon"></kendo-icon-wrapper>
@@ -10705,7 +10854,7 @@ CellComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version:
10705
10854
  </ng-container>
10706
10855
  </ng-container>
10707
10856
  </ng-container>
10708
- `, 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 } });
10857
+ `, 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 } });
10709
10858
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: CellComponent, decorators: [{
10710
10859
  type: Component,
10711
10860
  args: [{
@@ -10716,6 +10865,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
10716
10865
  <ng-container *ngIf="column.expandable">
10717
10866
  <span class="k-icon k-i-none" *ngFor="let item of level | levelItems : hasChildren && expandIcons"></span>
10718
10867
  <kendo-icon-wrapper
10868
+ aria-hidden="true"
10719
10869
  *ngIf="hasChildren && expandIcons && !loading"
10720
10870
  [name]="isExpanded ? 'caret-alt-down' : 'caret-alt-right'"
10721
10871
  [svgIcon]="isExpanded ? caretAltDownIcon : caretAltRightIcon"></kendo-icon-wrapper>
@@ -11129,6 +11279,7 @@ TableBodyComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ver
11129
11279
  class="k-table-row{{isOdd(item) ? ' k-alt k-table-alt-row' : ''}}"
11130
11280
  [class.k-grid-edit-row]="isEditingRow(item)"
11131
11281
  [class.k-grid-add-row]="item.isNew"
11282
+ [attr.aria-selected]="item.selected"
11132
11283
  [class.k-selected]="item.selected"
11133
11284
  [attr.data-treelist-view-index]="rowIndex">
11134
11285
 
@@ -11164,7 +11315,7 @@ TableBodyComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ver
11164
11315
  *ngFor="let column of columns; let columnIndex = index; trackBy: trackByColumns;">
11165
11316
  </td>
11166
11317
  </tr>
11167
- <tr *ngIf="item.type === 'footer' && hasFooter"
11318
+ <tr *ngIf="item.type === 'footer' && hasFooter" role="row"
11168
11319
  class="k-footer"
11169
11320
  [attr.data-treelist-view-index]="rowIndex"
11170
11321
  kendoTreeListLogicalRow
@@ -11178,6 +11329,7 @@ TableBodyComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ver
11178
11329
  [logicalColIndex]="logicalColIndex(column)"
11179
11330
  [column]="column"
11180
11331
  [colIndex]="columnIndex"
11332
+ role="gridcell"
11181
11333
  class="k-table-td"
11182
11334
  [ngClass]="column.footerClass"
11183
11335
  [ngStyle]="column.footerStyle"
@@ -11229,6 +11381,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
11229
11381
  class="k-table-row{{isOdd(item) ? ' k-alt k-table-alt-row' : ''}}"
11230
11382
  [class.k-grid-edit-row]="isEditingRow(item)"
11231
11383
  [class.k-grid-add-row]="item.isNew"
11384
+ [attr.aria-selected]="item.selected"
11232
11385
  [class.k-selected]="item.selected"
11233
11386
  [attr.data-treelist-view-index]="rowIndex">
11234
11387
 
@@ -11264,7 +11417,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
11264
11417
  *ngFor="let column of columns; let columnIndex = index; trackBy: trackByColumns;">
11265
11418
  </td>
11266
11419
  </tr>
11267
- <tr *ngIf="item.type === 'footer' && hasFooter"
11420
+ <tr *ngIf="item.type === 'footer' && hasFooter" role="row"
11268
11421
  class="k-footer"
11269
11422
  [attr.data-treelist-view-index]="rowIndex"
11270
11423
  kendoTreeListLogicalRow
@@ -11278,6 +11431,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
11278
11431
  [logicalColIndex]="logicalColIndex(column)"
11279
11432
  [column]="column"
11280
11433
  [colIndex]="columnIndex"
11434
+ role="gridcell"
11281
11435
  class="k-table-td"
11282
11436
  [ngClass]="column.footerClass"
11283
11437
  [ngStyle]="column.footerStyle"
@@ -12056,7 +12210,7 @@ ListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version:
12056
12210
  [columns]="$any(nonLockedColumnsToRender)">
12057
12211
  </colgroup>
12058
12212
  <tbody kendoTreeListTableBody
12059
- role="presentation"
12213
+ role="rowgroup"
12060
12214
  [view]="view"
12061
12215
  [columns]="$any(nonLockedColumnsToRender)"
12062
12216
  [allColumns]="$any(nonLockedLeafColumns)"
@@ -12141,7 +12295,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
12141
12295
  [columns]="$any(nonLockedColumnsToRender)">
12142
12296
  </colgroup>
12143
12297
  <tbody kendoTreeListTableBody
12144
- role="presentation"
12298
+ role="rowgroup"
12145
12299
  [view]="view"
12146
12300
  [columns]="$any(nonLockedColumnsToRender)"
12147
12301
  [allColumns]="$any(nonLockedLeafColumns)"
@@ -12337,8 +12491,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
12337
12491
  * Displays buttons for navigating to the first and to the previous page ([see example]({% slug paging_treelist %}#toc-pager-templates)).
12338
12492
  */
12339
12493
  class PagerPrevButtonsComponent extends PagerElementComponent {
12340
- constructor(localization, pagerContext, cd) {
12494
+ constructor(localization, pagerContext, cd, navigationService) {
12341
12495
  super(localization, pagerContext, cd);
12496
+ this.navigationService = navigationService;
12342
12497
  this.caretAltLeftIcon = caretAltLeftIcon;
12343
12498
  this.caretAltToLeftIcon = caretAltToLeftIcon;
12344
12499
  }
@@ -12352,6 +12507,15 @@ class PagerPrevButtonsComponent extends PagerElementComponent {
12352
12507
  get disabled() {
12353
12508
  return this.currentPage === 1 || !this.total;
12354
12509
  }
12510
+ /**
12511
+ * @hidden
12512
+ */
12513
+ onButtonClick(buttonName) {
12514
+ if (this.currentPage !== 1) {
12515
+ const skipToPage = buttonName === 'prevPage' ? this.currentPage - 2 : 0;
12516
+ this.changePage(skipToPage);
12517
+ }
12518
+ }
12355
12519
  onChanges({ total, skip, pageSize }) {
12356
12520
  this.total = total;
12357
12521
  this.skip = skip;
@@ -12359,15 +12523,16 @@ class PagerPrevButtonsComponent extends PagerElementComponent {
12359
12523
  this.cd.markForCheck();
12360
12524
  }
12361
12525
  }
12362
- 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 });
12526
+ 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 });
12363
12527
  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: `
12364
12528
  <button
12365
- [tabIndex]="-1"
12366
12529
  kendoButton
12367
12530
  type="button"
12531
+ kendoTreeListFocusable
12532
+ [enabled]="!disabled"
12368
12533
  [title]="textFor('pagerFirstPage')"
12369
12534
  [attr.aria-label]="textFor('pagerFirstPage')"
12370
- (click)="currentPage !== 1 ? changePage(0) : false"
12535
+ (click)="onButtonClick('firstPage')"
12371
12536
  role="button"
12372
12537
  icon="caret-alt-to-left"
12373
12538
  [svgIcon]="caretAltToLeftIcon"
@@ -12378,8 +12543,9 @@ PagerPrevButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.
12378
12543
  </button>
12379
12544
  <button
12380
12545
  kendoButton
12381
- [tabIndex]="-1"
12382
12546
  type="button"
12547
+ kendoTreeListFocusable
12548
+ [enabled]="!disabled"
12383
12549
  class="k-pager-nav"
12384
12550
  [disabled]="disabled"
12385
12551
  icon="caret-alt-left"
@@ -12388,9 +12554,9 @@ PagerPrevButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.
12388
12554
  rounded="none"
12389
12555
  [title]="textFor('pagerPreviousPage')"
12390
12556
  [attr.aria-label]="textFor('pagerPreviousPage')"
12391
- (click)="currentPage !== 1 ? changePage(currentPage-2) : false">
12557
+ (click)="onButtonClick('prevPage')">
12392
12558
  </button>
12393
- `, 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 });
12559
+ `, 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 });
12394
12560
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerPrevButtonsComponent, decorators: [{
12395
12561
  type: Component,
12396
12562
  args: [{
@@ -12398,12 +12564,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
12398
12564
  selector: 'kendo-treelist-pager-prev-buttons',
12399
12565
  template: `
12400
12566
  <button
12401
- [tabIndex]="-1"
12402
12567
  kendoButton
12403
12568
  type="button"
12569
+ kendoTreeListFocusable
12570
+ [enabled]="!disabled"
12404
12571
  [title]="textFor('pagerFirstPage')"
12405
12572
  [attr.aria-label]="textFor('pagerFirstPage')"
12406
- (click)="currentPage !== 1 ? changePage(0) : false"
12573
+ (click)="onButtonClick('firstPage')"
12407
12574
  role="button"
12408
12575
  icon="caret-alt-to-left"
12409
12576
  [svgIcon]="caretAltToLeftIcon"
@@ -12414,8 +12581,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
12414
12581
  </button>
12415
12582
  <button
12416
12583
  kendoButton
12417
- [tabIndex]="-1"
12418
12584
  type="button"
12585
+ kendoTreeListFocusable
12586
+ [enabled]="!disabled"
12419
12587
  class="k-pager-nav"
12420
12588
  [disabled]="disabled"
12421
12589
  icon="caret-alt-left"
@@ -12424,12 +12592,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
12424
12592
  rounded="none"
12425
12593
  [title]="textFor('pagerPreviousPage')"
12426
12594
  [attr.aria-label]="textFor('pagerPreviousPage')"
12427
- (click)="currentPage !== 1 ? changePage(currentPage-2) : false">
12595
+ (click)="onButtonClick('prevPage')">
12428
12596
  </button>
12429
12597
  `
12430
12598
  }]
12431
- }], ctorParameters: function () { return [{ type: i1$1.LocalizationService }, { type: PagerContextService }, { type: i0.ChangeDetectorRef }]; } });
12599
+ }], ctorParameters: function () { return [{ type: i1$1.LocalizationService }, { type: PagerContextService }, { type: i0.ChangeDetectorRef }, { type: NavigationService }]; } });
12432
12600
 
12601
+ /* eslint-disable @typescript-eslint/no-inferrable-types */
12433
12602
  /**
12434
12603
  * Displays numeric buttons to enable navigation between the pages.
12435
12604
  */
@@ -12510,6 +12679,7 @@ PagerNumericButtonsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0
12510
12679
  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: `
12511
12680
  <select
12512
12681
  class="k-dropdown-list k-dropdown k-picker k-picker-solid k-picker-md k-rounded-md"
12682
+ kendoTreeListFocusable
12513
12683
  [attr.title]="textFor('selectPage')"
12514
12684
  [attr.aria-label]="textFor('selectPage')"
12515
12685
  (change)="onSelectChange($event)">
@@ -12535,7 +12705,7 @@ PagerNumericButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12
12535
12705
  <div class="k-pager-numbers">
12536
12706
  <button *ngIf="start > 1"
12537
12707
  type="button"
12538
- [tabIndex]="-1"
12708
+ kendoTreeListFocusable
12539
12709
  kendoButton
12540
12710
  fillMode="flat"
12541
12711
  themeColor="primary"
@@ -12546,7 +12716,7 @@ PagerNumericButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12
12546
12716
  (click)="changePage(start - 2)">...</button>
12547
12717
  <button *ngFor="let num of buttons"
12548
12718
  type="button"
12549
- [tabIndex]="-1"
12719
+ kendoTreeListFocusable
12550
12720
  kendoButton
12551
12721
  fillMode="flat"
12552
12722
  themeColor="primary"
@@ -12561,7 +12731,7 @@ PagerNumericButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12
12561
12731
  </button>
12562
12732
  <button *ngIf="end < totalPages"
12563
12733
  type="button"
12564
- [tabIndex]="-1"
12734
+ kendoTreeListFocusable
12565
12735
  kendoButton
12566
12736
  class="k-pager-nav"
12567
12737
  fillMode="flat"
@@ -12571,7 +12741,7 @@ PagerNumericButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12
12571
12741
  [attr.title]="pageLabel(end + 1)"
12572
12742
  (click)="changePage(end)">...</button>
12573
12743
  </div>
12574
- `, 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 });
12744
+ `, 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 });
12575
12745
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerNumericButtonsComponent, decorators: [{
12576
12746
  type: Component,
12577
12747
  args: [{
@@ -12580,6 +12750,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
12580
12750
  template: `
12581
12751
  <select
12582
12752
  class="k-dropdown-list k-dropdown k-picker k-picker-solid k-picker-md k-rounded-md"
12753
+ kendoTreeListFocusable
12583
12754
  [attr.title]="textFor('selectPage')"
12584
12755
  [attr.aria-label]="textFor('selectPage')"
12585
12756
  (change)="onSelectChange($event)">
@@ -12605,7 +12776,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
12605
12776
  <div class="k-pager-numbers">
12606
12777
  <button *ngIf="start > 1"
12607
12778
  type="button"
12608
- [tabIndex]="-1"
12779
+ kendoTreeListFocusable
12609
12780
  kendoButton
12610
12781
  fillMode="flat"
12611
12782
  themeColor="primary"
@@ -12616,7 +12787,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
12616
12787
  (click)="changePage(start - 2)">...</button>
12617
12788
  <button *ngFor="let num of buttons"
12618
12789
  type="button"
12619
- [tabIndex]="-1"
12790
+ kendoTreeListFocusable
12620
12791
  kendoButton
12621
12792
  fillMode="flat"
12622
12793
  themeColor="primary"
@@ -12631,7 +12802,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
12631
12802
  </button>
12632
12803
  <button *ngIf="end < totalPages"
12633
12804
  type="button"
12634
- [tabIndex]="-1"
12805
+ kendoTreeListFocusable
12635
12806
  kendoButton
12636
12807
  class="k-pager-nav"
12637
12808
  fillMode="flat"
@@ -12654,9 +12825,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
12654
12825
  * Displays an input element which allows the typing and rendering of page numbers.
12655
12826
  */
12656
12827
  class PagerInputComponent extends PagerElementComponent {
12657
- constructor(localization, pagerContext, zone, cd) {
12828
+ constructor(localization, pagerContext, navigationService, zone, cd) {
12658
12829
  super(localization, pagerContext, cd);
12659
12830
  this.pagerContext = pagerContext;
12831
+ this.navigationService = navigationService;
12660
12832
  this.zone = zone;
12661
12833
  /**
12662
12834
  * @hidden
@@ -12712,11 +12884,13 @@ class PagerInputComponent extends PagerElementComponent {
12712
12884
  this.cd.markForCheck();
12713
12885
  }
12714
12886
  }
12715
- 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 });
12887
+ 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 });
12716
12888
  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: `
12717
12889
  <span class="k-pager-input k-label">
12718
12890
  {{textFor('pagerPage')}}
12719
12891
  <kendo-numerictextbox
12892
+ kendoTreeListFocusable
12893
+ [enabled]="hasPages"
12720
12894
  [style.margin]="'0 1ex'"
12721
12895
  [style.width]="'3em'"
12722
12896
  [spinners]="false"
@@ -12728,6 +12902,7 @@ PagerInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ve
12728
12902
  [max]="totalPages"
12729
12903
  [autoCorrect]="true"
12730
12904
  [title]="textFor('pagerPageNumberInputTitle')"
12905
+ [attr.aria-label]="textFor('pagerPageNumberInputTitle')"
12731
12906
  [kendoEventsOutsideAngular]="{
12732
12907
  keydown: handleKeyDown,
12733
12908
  focusout: handleBlur
@@ -12735,7 +12910,7 @@ PagerInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ve
12735
12910
  </kendo-numerictextbox>
12736
12911
  {{textFor('pagerOf')}} {{totalPages}}
12737
12912
  </span>
12738
- `, 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"] }] });
12913
+ `, 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"] }] });
12739
12914
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerInputComponent, decorators: [{
12740
12915
  type: Component,
12741
12916
  args: [{
@@ -12744,6 +12919,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
12744
12919
  <span class="k-pager-input k-label">
12745
12920
  {{textFor('pagerPage')}}
12746
12921
  <kendo-numerictextbox
12922
+ kendoTreeListFocusable
12923
+ [enabled]="hasPages"
12747
12924
  [style.margin]="'0 1ex'"
12748
12925
  [style.width]="'3em'"
12749
12926
  [spinners]="false"
@@ -12755,6 +12932,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
12755
12932
  [max]="totalPages"
12756
12933
  [autoCorrect]="true"
12757
12934
  [title]="textFor('pagerPageNumberInputTitle')"
12935
+ [attr.aria-label]="textFor('pagerPageNumberInputTitle')"
12758
12936
  [kendoEventsOutsideAngular]="{
12759
12937
  keydown: handleKeyDown,
12760
12938
  focusout: handleBlur
@@ -12764,7 +12942,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
12764
12942
  </span>
12765
12943
  `
12766
12944
  }]
12767
- }], ctorParameters: function () { return [{ type: i1$1.LocalizationService }, { type: PagerContextService }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { numericInput: [{
12945
+ }], ctorParameters: function () { return [{ type: i1$1.LocalizationService }, { type: PagerContextService }, { type: NavigationService }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { numericInput: [{
12768
12946
  type: ViewChild,
12769
12947
  args: [NumericTextBoxComponent, { static: true }]
12770
12948
  }] } });
@@ -12774,8 +12952,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
12774
12952
  * Displays buttons for navigating to the next and to the last page ([see example]({% slug paging_treelist %}#toc-pager-templates)).
12775
12953
  */
12776
12954
  class PagerNextButtonsComponent extends PagerElementComponent {
12777
- constructor(localization, pagerContext, cd) {
12955
+ constructor(localization, pagerContext, cd, navigationService) {
12778
12956
  super(localization, pagerContext, cd);
12957
+ this.navigationService = navigationService;
12779
12958
  this.caretAltRightIcon = caretAltRightIcon;
12780
12959
  this.caretAltToRightIcon = caretAltToRightIcon;
12781
12960
  }
@@ -12789,6 +12968,15 @@ class PagerNextButtonsComponent extends PagerElementComponent {
12789
12968
  get disabled() {
12790
12969
  return this.currentPage === this.totalPages || !this.total;
12791
12970
  }
12971
+ /**
12972
+ * @hidden
12973
+ */
12974
+ onButtonClick(buttonName) {
12975
+ if (this.currentPage !== this.totalPages) {
12976
+ const skipToPage = buttonName === 'nextPage' ? this.currentPage : this.totalPages - 1;
12977
+ this.changePage(skipToPage);
12978
+ }
12979
+ }
12792
12980
  onChanges({ total, skip, pageSize }) {
12793
12981
  this.total = total;
12794
12982
  this.skip = skip;
@@ -12796,26 +12984,28 @@ class PagerNextButtonsComponent extends PagerElementComponent {
12796
12984
  this.cd.markForCheck();
12797
12985
  }
12798
12986
  }
12799
- 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 });
12800
- 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: `
12987
+ 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 });
12988
+ 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: `
12801
12989
  <button
12802
12990
  kendoButton
12803
12991
  type="button"
12992
+ kendoTreeListFocusable
12993
+ [enabled]="!disabled"
12804
12994
  icon="caret-alt-right"
12805
12995
  [svgIcon]="caretAltRightIcon"
12806
12996
  fillMode="flat"
12807
12997
  rounded="none"
12808
12998
  class="k-pager-nav"
12809
- [tabIndex]="-1"
12810
12999
  [disabled]="disabled"
12811
13000
  [title]="textFor('pagerNextPage')"
12812
13001
  [attr.aria-label]="textFor('pagerNextPage')"
12813
- (click)="currentPage !== totalPages ? changePage(currentPage) : false">
13002
+ (click)="onButtonClick('nextPage')">
12814
13003
  </button>
12815
13004
  <button
12816
13005
  kendoButton
12817
13006
  type="button"
12818
- [tabIndex]="-1"
13007
+ kendoTreeListFocusable
13008
+ [enabled]="!disabled"
12819
13009
  icon="caret-alt-to-right"
12820
13010
  [svgIcon]="caretAltToRightIcon"
12821
13011
  fillMode="flat"
@@ -12824,9 +13014,9 @@ PagerNextButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.
12824
13014
  [disabled]="disabled"
12825
13015
  [title]="textFor('pagerLastPage')"
12826
13016
  [attr.aria-label]="textFor('pagerLastPage')"
12827
- (click)="currentPage !== totalPages ? changePage(totalPages-1) : false">
13017
+ (click)="onButtonClick('lastPage')">
12828
13018
  </button>
12829
- `, 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 });
13019
+ `, 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 });
12830
13020
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerNextButtonsComponent, decorators: [{
12831
13021
  type: Component,
12832
13022
  args: [{
@@ -12836,21 +13026,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
12836
13026
  <button
12837
13027
  kendoButton
12838
13028
  type="button"
13029
+ kendoTreeListFocusable
13030
+ [enabled]="!disabled"
12839
13031
  icon="caret-alt-right"
12840
13032
  [svgIcon]="caretAltRightIcon"
12841
13033
  fillMode="flat"
12842
13034
  rounded="none"
12843
13035
  class="k-pager-nav"
12844
- [tabIndex]="-1"
12845
13036
  [disabled]="disabled"
12846
13037
  [title]="textFor('pagerNextPage')"
12847
13038
  [attr.aria-label]="textFor('pagerNextPage')"
12848
- (click)="currentPage !== totalPages ? changePage(currentPage) : false">
13039
+ (click)="onButtonClick('nextPage')">
12849
13040
  </button>
12850
13041
  <button
12851
13042
  kendoButton
12852
13043
  type="button"
12853
- [tabIndex]="-1"
13044
+ kendoTreeListFocusable
13045
+ [enabled]="!disabled"
12854
13046
  icon="caret-alt-to-right"
12855
13047
  [svgIcon]="caretAltToRightIcon"
12856
13048
  fillMode="flat"
@@ -12859,11 +13051,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
12859
13051
  [disabled]="disabled"
12860
13052
  [title]="textFor('pagerLastPage')"
12861
13053
  [attr.aria-label]="textFor('pagerLastPage')"
12862
- (click)="currentPage !== totalPages ? changePage(totalPages-1) : false">
13054
+ (click)="onButtonClick('lastPage')">
12863
13055
  </button>
12864
13056
  `
12865
13057
  }]
12866
- }], ctorParameters: function () { return [{ type: i1$1.LocalizationService }, { type: PagerContextService }, { type: i0.ChangeDetectorRef }]; } });
13058
+ }], ctorParameters: function () { return [{ type: i1$1.LocalizationService }, { type: PagerContextService }, { type: i0.ChangeDetectorRef }, { type: NavigationService }]; }, propDecorators: { navigable: [{
13059
+ type: Input
13060
+ }] } });
12867
13061
 
12868
13062
  // eslint-disable no-access-missing-member
12869
13063
  /**
@@ -12934,8 +13128,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
12934
13128
  * Displays a drop-down list for the page size selection ([see example]({% slug paging_treelist %}#toc-pager-templates)).
12935
13129
  */
12936
13130
  class PagerPageSizesComponent extends PagerElementComponent {
12937
- constructor(localization, cd, pagerContext) {
13131
+ constructor(elem, localization, cd, pagerContext) {
12938
13132
  super(localization, pagerContext, cd);
13133
+ this.elem = elem;
12939
13134
  this.pagerContext = pagerContext;
12940
13135
  this._pageSizes = [];
12941
13136
  }
@@ -13007,7 +13202,7 @@ class PagerPageSizesComponent extends PagerElementComponent {
13007
13202
  this.cd.markForCheck();
13008
13203
  }
13009
13204
  }
13010
- 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 });
13205
+ 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 });
13011
13206
  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: `
13012
13207
  <kendo-dropdownlist
13013
13208
  #dropdownlist
@@ -13015,11 +13210,13 @@ PagerPageSizesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0"
13015
13210
  [data]="pageSizes"
13016
13211
  textField="text"
13017
13212
  valueField="value"
13213
+ kendoTreeListFocusable
13018
13214
  [valuePrimitive]="true"
13019
13215
  [value]="pageSize"
13216
+ [attr.aria-label]="textFor('pagerItemsPerPage')"
13020
13217
  (valueChange)="pageSizeChange($event)"></kendo-dropdownlist>
13021
13218
  <kendo-label [for]="dropdownlist" [text]="textFor('pagerItemsPerPage')"></kendo-label>
13022
- `, 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 });
13219
+ `, 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 });
13023
13220
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerPageSizesComponent, decorators: [{
13024
13221
  type: Component,
13025
13222
  args: [{
@@ -13032,13 +13229,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
13032
13229
  [data]="pageSizes"
13033
13230
  textField="text"
13034
13231
  valueField="value"
13232
+ kendoTreeListFocusable
13035
13233
  [valuePrimitive]="true"
13036
13234
  [value]="pageSize"
13235
+ [attr.aria-label]="textFor('pagerItemsPerPage')"
13037
13236
  (valueChange)="pageSizeChange($event)"></kendo-dropdownlist>
13038
13237
  <kendo-label [for]="dropdownlist" [text]="textFor('pagerItemsPerPage')"></kendo-label>
13039
13238
  `
13040
13239
  }]
13041
- }], ctorParameters: function () { return [{ type: i1$1.LocalizationService }, { type: i0.ChangeDetectorRef }, { type: PagerContextService }]; }, propDecorators: { pageSizes: [{
13240
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1$1.LocalizationService }, { type: i0.ChangeDetectorRef }, { type: PagerContextService }]; }, propDecorators: { pageSizes: [{
13042
13241
  type: Input
13043
13242
  }], classes: [{
13044
13243
  type: HostBinding,
@@ -13052,14 +13251,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
13052
13251
  * @hidden
13053
13252
  */
13054
13253
  class PagerComponent {
13055
- constructor(pagerContext, element, renderer) {
13254
+ constructor(navigationService, localizationService, pagerContext, focusGroup, focusRoot, renderer, element, zone) {
13255
+ this.navigationService = navigationService;
13256
+ this.localizationService = localizationService;
13056
13257
  this.pagerContext = pagerContext;
13057
- this.element = element;
13258
+ this.focusGroup = focusGroup;
13259
+ this.focusRoot = focusRoot;
13058
13260
  this.renderer = renderer;
13261
+ this.element = element;
13262
+ this.zone = zone;
13059
13263
  this.allCount = 0;
13060
13264
  this.total = 0;
13061
13265
  this.skip = 1;
13062
13266
  this.pageChange = new EventEmitter();
13267
+ this.pagerRole = 'application';
13268
+ this.pagerRoleDescription = 'pager';
13063
13269
  this.pagerWrapClass = true;
13064
13270
  this.gridPagerClass = true;
13065
13271
  this.pagerClass = true;
@@ -13089,6 +13295,12 @@ class PagerComponent {
13089
13295
  set options(value) {
13090
13296
  this.settings = normalize(value);
13091
13297
  }
13298
+ get hostTabindex() {
13299
+ return this.navigationService.enabled ? '0' : '-1';
13300
+ }
13301
+ get hostAriaLabel() {
13302
+ return this.pagerLabel;
13303
+ }
13092
13304
  get totalPages() {
13093
13305
  return Math.ceil((this.total || 0) / this.pageSize);
13094
13306
  }
@@ -13106,7 +13318,13 @@ class PagerComponent {
13106
13318
  return context;
13107
13319
  }
13108
13320
  ngOnInit() {
13321
+ const element = this.element.nativeElement;
13109
13322
  this.subscriptions.add(this.pagerContext.pageChange.subscribe(this.changePage.bind(this)));
13323
+ this.subscriptions.add(this.renderer.listen(element, 'focusin', event => this.onFocusIn(event)));
13324
+ this.subscriptions.add(this.renderer.listen(element, 'keydown', event => this.onKeyDown(event)));
13325
+ if (this.navigationService.enabled) {
13326
+ this.focusRoot.deactivate();
13327
+ }
13110
13328
  }
13111
13329
  ngOnChanges(changes) {
13112
13330
  if (anyChanged(["pageSize", "skip", "total", "allCount"], changes, false)) {
@@ -13132,18 +13350,135 @@ class PagerComponent {
13132
13350
  this.subscriptions.unsubscribe();
13133
13351
  }
13134
13352
  }
13353
+ get pagerLabel() {
13354
+ const localizationMsg = this.localizationService.get('pagerLabel') || '';
13355
+ return replaceMessagePlaceholder(replaceMessagePlaceholder(localizationMsg, 'currentPage', this.currentPage.toString()), 'totalPages', this.totalPages.toString());
13356
+ }
13357
+ get focusTrapTabIndex() {
13358
+ return this.focusGroup.isActive ? '0' : '-1';
13359
+ }
13360
+ onKeyDown(event) {
13361
+ const keyCode = event.keyCode;
13362
+ const target = event.target;
13363
+ if (this.navigationService.enabled) {
13364
+ if (keyCode === Keys.Enter && target === this.element.nativeElement) {
13365
+ this.onEnterEvent(event);
13366
+ }
13367
+ else if (keyCode === Keys.Escape) {
13368
+ this.onEscapeEvent();
13369
+ }
13370
+ }
13371
+ if ((keyCode === Keys.ArrowLeft || keyCode === Keys.PageUp) ||
13372
+ (keyCode === Keys.ArrowRight || keyCode === Keys.PageDown)) {
13373
+ event.preventDefault();
13374
+ this.onArrowEvent(keyCode, target);
13375
+ }
13376
+ else if (keyCode === Keys.Home || keyCode === Keys.End) {
13377
+ event.preventDefault();
13378
+ this.onHomeEndEvent(keyCode, target);
13379
+ }
13380
+ }
13135
13381
  changePage(event) {
13136
13382
  this.pageChange.emit(event);
13137
13383
  }
13384
+ onInnerFocusIn(event, position) {
13385
+ this.zone.onStable.pipe(take(1)).subscribe(() => {
13386
+ if (position === 'start') {
13387
+ if (event.relatedTarget === this.element.nativeElement) {
13388
+ this.focusFirstElement();
13389
+ }
13390
+ else {
13391
+ this.focusLastElement();
13392
+ }
13393
+ }
13394
+ else {
13395
+ this.focusFirstElement();
13396
+ }
13397
+ });
13398
+ }
13399
+ onEnterEvent(event) {
13400
+ const isTargetCompElement = event.target === this.element.nativeElement;
13401
+ if (this.navigationService.enabled && isTargetCompElement) {
13402
+ event.preventDefault();
13403
+ this.focusRoot.activate();
13404
+ this.focusFirstElement();
13405
+ }
13406
+ }
13407
+ onEscapeEvent() {
13408
+ if (this.navigationService.enabled) {
13409
+ this.focusRoot.deactivate();
13410
+ this.element.nativeElement.focus();
13411
+ }
13412
+ }
13413
+ onArrowEvent(keyCode, target) {
13414
+ const isArrowLeft = keyCode === Keys.ArrowLeft || keyCode === Keys.PageUp;
13415
+ const condition = isArrowLeft ? this.currentPage > 1 : this.currentPage < this.totalPages;
13416
+ if (this.shouldTriggerPageChange(target, condition)) {
13417
+ const pageDir = isArrowLeft ? 'prevPage' : 'nextPage';
13418
+ this.pagerContext[pageDir]();
13419
+ }
13420
+ }
13421
+ onHomeEndEvent(keyCode, target) {
13422
+ const isHome = keyCode === Keys.Home;
13423
+ const condition = isHome ? this.currentPage > 1 : this.currentPage < this.totalPages;
13424
+ if (this.shouldTriggerPageChange(target, condition)) {
13425
+ const pageNumber = isHome ? 0 : this.totalPages - 1;
13426
+ this.pagerContext.changePage(pageNumber);
13427
+ }
13428
+ }
13429
+ onFocusIn(event) {
13430
+ if (this.navigationService.enabled) {
13431
+ const shouldFocusPager = event.target === this.element.nativeElement;
13432
+ if (shouldFocusPager) {
13433
+ this.focusRoot.deactivate();
13434
+ }
13435
+ else {
13436
+ this.focusRoot.activate();
13437
+ }
13438
+ }
13439
+ }
13440
+ focusFirstElement() {
13441
+ const first = findFocusableChild(this.element.nativeElement, true);
13442
+ if (first) {
13443
+ first.focus();
13444
+ }
13445
+ }
13446
+ focusLastElement() {
13447
+ const last = findLastFocusableChild(this.element.nativeElement, true);
13448
+ if (last) {
13449
+ last.focus();
13450
+ }
13451
+ }
13452
+ shouldTriggerPageChange(target, condition) {
13453
+ return this.navigationService.enabled && target === this.element.nativeElement && condition;
13454
+ }
13138
13455
  clearResponsiveClasses() {
13139
13456
  const element = this.element.nativeElement;
13140
13457
  this.renderer.removeClass(element, 'k-pager-mobile-sm');
13141
13458
  this.renderer.removeClass(element, 'k-pager-mobile-md');
13142
13459
  }
13143
13460
  }
13144
- 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 });
13145
- 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: `
13146
- <ng-container
13461
+ 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 });
13462
+ 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: [{
13463
+ provide: FOCUS_ROOT_ACTIVE,
13464
+ useValue: true
13465
+ }, {
13466
+ provide: FocusRoot,
13467
+ deps: [FOCUS_ROOT_ACTIVE],
13468
+ useClass: FocusRoot
13469
+ }, {
13470
+ provide: FocusGroup,
13471
+ deps: [FocusRoot],
13472
+ useClass: FocusGroup
13473
+ }], 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: `
13474
+ <div
13475
+ *ngIf="navigationService.enabled"
13476
+ class="k-sr-only"
13477
+ [tabindex]="focusTrapTabIndex"
13478
+ [attr.aria-hidden]="true"
13479
+ (focusin)="onInnerFocusIn($event, 'start')">
13480
+ </div>
13481
+ <ng-container
13147
13482
  *ngIf="template?.templateRef"
13148
13483
  [ngTemplateOutlet]="template.templateRef"
13149
13484
  [ngTemplateOutletContext]="templateContext">
@@ -13152,21 +13487,48 @@ PagerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version
13152
13487
  <kendo-treelist-pager-prev-buttons *ngIf="settings.previousNext"></kendo-treelist-pager-prev-buttons>
13153
13488
  <kendo-treelist-pager-numeric-buttons
13154
13489
  *ngIf="settings.type === 'numeric'"
13155
- [buttonCount]="settings.buttonCount">
13490
+ [buttonCount]="settings.buttonCount"
13491
+ >
13156
13492
  </kendo-treelist-pager-numeric-buttons>
13157
13493
  <kendo-treelist-pager-input *ngIf="settings.type === 'input'"></kendo-treelist-pager-input>
13158
13494
  <kendo-treelist-pager-next-buttons *ngIf="settings.previousNext"></kendo-treelist-pager-next-buttons>
13159
13495
  <kendo-treelist-pager-info *ngIf='settings.info'></kendo-treelist-pager-info>
13160
13496
  <kendo-treelist-pager-page-sizes *ngIf="settings.pageSizes" [pageSizes]="$any(settings.pageSizes)"></kendo-treelist-pager-page-sizes>
13161
13497
  </ng-container>
13498
+ <div
13499
+ *ngIf="navigationService.enabled"
13500
+ class="k-sr-only"
13501
+ [tabindex]="focusTrapTabIndex"
13502
+ [attr.aria-hidden]="true"
13503
+ (focusin)="onInnerFocusIn($event, 'end')">
13504
+ </div>
13162
13505
  <kendo-resize-sensor *ngIf="settings.responsive" (resize)="resizeHandler()"></kendo-resize-sensor>
13163
- `, 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"] }] });
13506
+ `, 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"] }] });
13164
13507
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: PagerComponent, decorators: [{
13165
13508
  type: Component,
13166
13509
  args: [{
13167
13510
  selector: 'kendo-treelist-pager',
13511
+ providers: [{
13512
+ provide: FOCUS_ROOT_ACTIVE,
13513
+ useValue: true
13514
+ }, {
13515
+ provide: FocusRoot,
13516
+ deps: [FOCUS_ROOT_ACTIVE],
13517
+ useClass: FocusRoot
13518
+ }, {
13519
+ provide: FocusGroup,
13520
+ deps: [FocusRoot],
13521
+ useClass: FocusGroup
13522
+ }],
13168
13523
  template: `
13169
- <ng-container
13524
+ <div
13525
+ *ngIf="navigationService.enabled"
13526
+ class="k-sr-only"
13527
+ [tabindex]="focusTrapTabIndex"
13528
+ [attr.aria-hidden]="true"
13529
+ (focusin)="onInnerFocusIn($event, 'start')">
13530
+ </div>
13531
+ <ng-container
13170
13532
  *ngIf="template?.templateRef"
13171
13533
  [ngTemplateOutlet]="template.templateRef"
13172
13534
  [ngTemplateOutletContext]="templateContext">
@@ -13175,22 +13537,47 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
13175
13537
  <kendo-treelist-pager-prev-buttons *ngIf="settings.previousNext"></kendo-treelist-pager-prev-buttons>
13176
13538
  <kendo-treelist-pager-numeric-buttons
13177
13539
  *ngIf="settings.type === 'numeric'"
13178
- [buttonCount]="settings.buttonCount">
13540
+ [buttonCount]="settings.buttonCount"
13541
+ >
13179
13542
  </kendo-treelist-pager-numeric-buttons>
13180
13543
  <kendo-treelist-pager-input *ngIf="settings.type === 'input'"></kendo-treelist-pager-input>
13181
13544
  <kendo-treelist-pager-next-buttons *ngIf="settings.previousNext"></kendo-treelist-pager-next-buttons>
13182
13545
  <kendo-treelist-pager-info *ngIf='settings.info'></kendo-treelist-pager-info>
13183
13546
  <kendo-treelist-pager-page-sizes *ngIf="settings.pageSizes" [pageSizes]="$any(settings.pageSizes)"></kendo-treelist-pager-page-sizes>
13184
13547
  </ng-container>
13548
+ <div
13549
+ *ngIf="navigationService.enabled"
13550
+ class="k-sr-only"
13551
+ [tabindex]="focusTrapTabIndex"
13552
+ [attr.aria-hidden]="true"
13553
+ (focusin)="onInnerFocusIn($event, 'end')">
13554
+ </div>
13185
13555
  <kendo-resize-sensor *ngIf="settings.responsive" (resize)="resizeHandler()"></kendo-resize-sensor>
13186
13556
  `
13187
13557
  }]
13188
- }], ctorParameters: function () { return [{ type: PagerContextService }, { type: i0.ElementRef }, { type: i0.Renderer2 }]; }, propDecorators: { allCount: [{
13558
+ }], 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: [{
13559
+ type: ViewChild,
13560
+ args: ['prevButtons']
13561
+ }], nextButtons: [{
13562
+ type: ViewChild,
13563
+ args: ['nextButtons']
13564
+ }], numericButtons: [{
13565
+ type: ViewChild,
13566
+ args: ['numericButtons']
13567
+ }], pagerInput: [{
13568
+ type: ViewChild,
13569
+ args: ['pagerInput']
13570
+ }], pageSizes: [{
13571
+ type: ViewChild,
13572
+ args: ['pageSizes']
13573
+ }], allCount: [{
13189
13574
  type: Input
13190
13575
  }], total: [{
13191
13576
  type: Input
13192
13577
  }], skip: [{
13193
13578
  type: Input
13579
+ }], navigable: [{
13580
+ type: Input
13194
13581
  }], pageSize: [{
13195
13582
  type: Input
13196
13583
  }], options: [{
@@ -13199,6 +13586,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
13199
13586
  type: Input
13200
13587
  }], pageChange: [{
13201
13588
  type: Output
13589
+ }], pagerRole: [{
13590
+ type: HostBinding,
13591
+ args: ['attr.role']
13592
+ }], pagerRoleDescription: [{
13593
+ type: HostBinding,
13594
+ args: ['attr.aria-roledescription']
13202
13595
  }], pagerWrapClass: [{
13203
13596
  type: HostBinding,
13204
13597
  args: ['class.k-pager-wrap']
@@ -13211,6 +13604,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
13211
13604
  }], pagerSizingClass: [{
13212
13605
  type: HostBinding,
13213
13606
  args: ['class.k-pager-md']
13607
+ }], hostTabindex: [{
13608
+ type: HostBinding,
13609
+ args: ['attr.tabindex']
13610
+ }], hostAriaLabel: [{
13611
+ type: HostBinding,
13612
+ args: ['attr.aria-label']
13214
13613
  }] } });
13215
13614
 
13216
13615
  /**
@@ -13219,7 +13618,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
13219
13618
  class Messages extends ComponentMessages {
13220
13619
  }
13221
13620
  Messages.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: Messages, deps: null, target: i0.ɵɵFactoryTarget.Directive });
13222
- 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 });
13621
+ 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 });
13223
13622
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: Messages, decorators: [{
13224
13623
  type: Directive,
13225
13624
  args: [{}]
@@ -13227,6 +13626,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
13227
13626
  type: Input
13228
13627
  }], noRecords: [{
13229
13628
  type: Input
13629
+ }], pagerLabel: [{
13630
+ type: Input
13230
13631
  }], pagerFirstPage: [{
13231
13632
  type: Input
13232
13633
  }], pagerLastPage: [{
@@ -13325,6 +13726,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
13325
13726
  type: Input
13326
13727
  }], columnsReset: [{
13327
13728
  type: Input
13729
+ }], topToolbarLabel: [{
13730
+ type: Input
13731
+ }], bottomToolbarLabel: [{
13732
+ type: Input
13328
13733
  }] } });
13329
13734
 
13330
13735
  /**
@@ -13621,6 +14026,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
13621
14026
  args: ['style.user-select']
13622
14027
  }] } });
13623
14028
 
14029
+ /* eslint-disable @typescript-eslint/no-explicit-any */
13624
14030
  const createControl = (source) => (acc, key) => {
13625
14031
  acc[key] = new FormControl(source[key]);
13626
14032
  return acc;
@@ -13669,6 +14075,7 @@ class TreeListComponent {
13669
14075
  this.expandStateService = expandStateService;
13670
14076
  this.optionChanges = optionChanges;
13671
14077
  this.selectionService = selectionService;
14078
+ this.localization = localization;
13672
14079
  this.ctx = ctx;
13673
14080
  /**
13674
14081
  * Defines the page size used by the TreeList when [paging]({% slug paging_treelist %}) is enabled.
@@ -13924,6 +14331,7 @@ class TreeListComponent {
13924
14331
  this.idGetter = getter(undefined);
13925
14332
  this.localEditService = new LocalEditService();
13926
14333
  this.view = new ViewCollection(this.viewFieldAccessor.bind(this), this.expandStateService, this.editService, this.selectionService);
14334
+ this.ariaRootId = `k-${guid()}`;
13927
14335
  this.dataChanged = false;
13928
14336
  this._hasChildren = (() => false);
13929
14337
  this.subscriptions = new Subscription();
@@ -14274,6 +14682,9 @@ class TreeListComponent {
14274
14682
  return this.selectionService.enableMultiple;
14275
14683
  }
14276
14684
  }
14685
+ get navigation() {
14686
+ return this.navigationService;
14687
+ }
14277
14688
  get isVirtual() {
14278
14689
  return this.scrollable === 'virtual';
14279
14690
  }
@@ -14765,6 +15176,12 @@ class TreeListComponent {
14765
15176
  this.changeDetectorRef.markForCheck();
14766
15177
  this.pageChange.emit(event);
14767
15178
  }
15179
+ /**
15180
+ * @hidden
15181
+ */
15182
+ messageFor(token) {
15183
+ return this.localization.get(token);
15184
+ }
14768
15185
  /**
14769
15186
  * @hidden
14770
15187
  */
@@ -15450,6 +15867,9 @@ TreeListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", vers
15450
15867
  i18n-noRecords="kendo.treelist.noRecords|The label visible in the TreeList when there are no records"
15451
15868
  noRecords="No records available."
15452
15869
 
15870
+ i18n-pagerLabel="kendo.treelist.pagerLabel|The label for the TreeList pager"
15871
+ pagerLabel="{{ 'Page navigation, page {currentPage} of {totalPages}' }}"
15872
+
15453
15873
  i18n-pagerFirstPage="kendo.treelist.pagerFirstPage|The label for the first page button in TreeList pager"
15454
15874
  pagerFirstPage="Go to the first page"
15455
15875
 
@@ -15596,15 +16016,26 @@ TreeListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", vers
15596
16016
 
15597
16017
  i18n-selectPage="kendo.treelist.selectPage|The text of the title and aria-label attributes applied to the page chooser in the TreeList Pager"
15598
16018
  selectPage="Select page"
16019
+
16020
+ i18n-topToolbarLabel="kendo.treelist.topToolbarLabel|The label of the TreeList top toolbar"
16021
+ topToolbarLabel="Top toolbar"
16022
+
16023
+ i18n-bottomToolbarLabel="kendo.treelist.bottomToolbarLabel|The label of the TreeList bottom toolbar"
16024
+ bottomToolbarLabel="Bottom toolbar"
15599
16025
  >
15600
16026
  </ng-container>
15601
16027
  <kendo-treelist-toolbar
15602
16028
  *ngIf="showTopToolbar"
15603
- position="top"
15604
- class="k-toolbar k-grid-toolbar k-toolbar-md"></kendo-treelist-toolbar>
16029
+ position="top"
16030
+ [navigable]="navigable"
16031
+ class="k-toolbar k-grid-toolbar k-toolbar-md"
16032
+ [attr.aria-label]="messageFor('topToolbarLabel')"
16033
+ [attr.aria-controls]="ariaRootId">
16034
+ </kendo-treelist-toolbar>
15605
16035
  <div #ariaRoot
15606
16036
  class="k-grid-aria-root"
15607
16037
  role="treegrid"
16038
+ [id]="ariaRootId"
15608
16039
  [attr.aria-rowcount]="ariaRowCount"
15609
16040
  [attr.aria-colcount]="ariaColCount"
15610
16041
  [attr.aria-multiselectable]="ariaMultiselectable"
@@ -15658,7 +16089,7 @@ TreeListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", vers
15658
16089
  </colgroup>
15659
16090
  <thead kendoTreeListHeader
15660
16091
  [resizable]="resizable"
15661
- role="presentation"
16092
+ role="rowgroup"
15662
16093
  [scrollable]="true"
15663
16094
  [columns]="headerColumns"
15664
16095
  [totalColumnLevels]="totalColumnLevels"
@@ -15747,14 +16178,20 @@ TreeListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", vers
15747
16178
  [total]="view.totalVisible"
15748
16179
  [allCount]="view.total"
15749
16180
  [skip]="skip"
16181
+ [navigable]="navigable"
16182
+ [attr.aria-controls]="ariaRootId"
15750
16183
  [options]="pageable"
15751
16184
  (pageChange)="notifyPageChange('pager', $event)">
15752
16185
  </kendo-treelist-pager>
15753
16186
  <kendo-treelist-toolbar
15754
16187
  *ngIf="showBottomToolbar"
15755
16188
  class="k-toolbar k-grid-toolbar k-grid-toolbar-bottom k-toolbar-md"
15756
- position="bottom"></kendo-treelist-toolbar>
15757
- `, 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 });
16189
+ position="bottom"
16190
+ [navigable]="navigable"
16191
+ [attr.aria-label]="messageFor('bottomToolbarLabel')"
16192
+ [attr.aria-controls]="ariaRootId">
16193
+ </kendo-treelist-toolbar>
16194
+ `, 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 });
15758
16195
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: TreeListComponent, decorators: [{
15759
16196
  type: Component,
15760
16197
  args: [{
@@ -15811,6 +16248,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
15811
16248
  i18n-noRecords="kendo.treelist.noRecords|The label visible in the TreeList when there are no records"
15812
16249
  noRecords="No records available."
15813
16250
 
16251
+ i18n-pagerLabel="kendo.treelist.pagerLabel|The label for the TreeList pager"
16252
+ pagerLabel="{{ 'Page navigation, page {currentPage} of {totalPages}' }}"
16253
+
15814
16254
  i18n-pagerFirstPage="kendo.treelist.pagerFirstPage|The label for the first page button in TreeList pager"
15815
16255
  pagerFirstPage="Go to the first page"
15816
16256
 
@@ -15957,15 +16397,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
15957
16397
 
15958
16398
  i18n-selectPage="kendo.treelist.selectPage|The text of the title and aria-label attributes applied to the page chooser in the TreeList Pager"
15959
16399
  selectPage="Select page"
16400
+
16401
+ i18n-topToolbarLabel="kendo.treelist.topToolbarLabel|The label of the TreeList top toolbar"
16402
+ topToolbarLabel="Top toolbar"
16403
+
16404
+ i18n-bottomToolbarLabel="kendo.treelist.bottomToolbarLabel|The label of the TreeList bottom toolbar"
16405
+ bottomToolbarLabel="Bottom toolbar"
15960
16406
  >
15961
16407
  </ng-container>
15962
16408
  <kendo-treelist-toolbar
15963
16409
  *ngIf="showTopToolbar"
15964
- position="top"
15965
- class="k-toolbar k-grid-toolbar k-toolbar-md"></kendo-treelist-toolbar>
16410
+ position="top"
16411
+ [navigable]="navigable"
16412
+ class="k-toolbar k-grid-toolbar k-toolbar-md"
16413
+ [attr.aria-label]="messageFor('topToolbarLabel')"
16414
+ [attr.aria-controls]="ariaRootId">
16415
+ </kendo-treelist-toolbar>
15966
16416
  <div #ariaRoot
15967
16417
  class="k-grid-aria-root"
15968
16418
  role="treegrid"
16419
+ [id]="ariaRootId"
15969
16420
  [attr.aria-rowcount]="ariaRowCount"
15970
16421
  [attr.aria-colcount]="ariaColCount"
15971
16422
  [attr.aria-multiselectable]="ariaMultiselectable"
@@ -16019,7 +16470,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
16019
16470
  </colgroup>
16020
16471
  <thead kendoTreeListHeader
16021
16472
  [resizable]="resizable"
16022
- role="presentation"
16473
+ role="rowgroup"
16023
16474
  [scrollable]="true"
16024
16475
  [columns]="headerColumns"
16025
16476
  [totalColumnLevels]="totalColumnLevels"
@@ -16108,13 +16559,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
16108
16559
  [total]="view.totalVisible"
16109
16560
  [allCount]="view.total"
16110
16561
  [skip]="skip"
16562
+ [navigable]="navigable"
16563
+ [attr.aria-controls]="ariaRootId"
16111
16564
  [options]="pageable"
16112
16565
  (pageChange)="notifyPageChange('pager', $event)">
16113
16566
  </kendo-treelist-pager>
16114
16567
  <kendo-treelist-toolbar
16115
16568
  *ngIf="showBottomToolbar"
16116
16569
  class="k-toolbar k-grid-toolbar k-grid-toolbar-bottom k-toolbar-md"
16117
- position="bottom"></kendo-treelist-toolbar>
16570
+ position="bottom"
16571
+ [navigable]="navigable"
16572
+ [attr.aria-label]="messageFor('bottomToolbarLabel')"
16573
+ [attr.aria-controls]="ariaRootId">
16574
+ </kendo-treelist-toolbar>
16118
16575
  `
16119
16576
  }]
16120
16577
  }], 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: [{
@@ -16259,10 +16716,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
16259
16716
  args: [ColumnMenuTemplateDirective]
16260
16717
  }], lockedHeader: [{
16261
16718
  type: ViewChild,
16262
- args: ['lockedHeader', { static: false }]
16719
+ args: ['lockedHeader']
16263
16720
  }], header: [{
16264
16721
  type: ViewChild,
16265
- args: ['header', { static: false }]
16722
+ args: ['header']
16266
16723
  }], footer: [{
16267
16724
  type: ViewChildren,
16268
16725
  args: ['footer']
@@ -17571,7 +18028,7 @@ ColumnChooserComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
17571
18028
  (columnChange)="onChange($event)">
17572
18029
  </kendo-treelist-columnlist>
17573
18030
  </ng-template>
17574
- `, 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"] }] });
18031
+ `, 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"] }] });
17575
18032
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnChooserComponent, decorators: [{
17576
18033
  type: Component,
17577
18034
  args: [{
@@ -18290,6 +18747,61 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
18290
18747
  }]
18291
18748
  }] });
18292
18749
 
18750
+ /**
18751
+ * A directive applied to all toolbar elements that need to be a part of the TreeList
18752
+ * keyboard navigation.
18753
+ */
18754
+ class TreeListToolbarFocusableDirective {
18755
+ constructor(host, ctx) {
18756
+ this.host = host;
18757
+ this.ctx = ctx;
18758
+ }
18759
+ /**
18760
+ * @hidden
18761
+ */
18762
+ get element() {
18763
+ return this.host.nativeElement;
18764
+ }
18765
+ /**
18766
+ * @hidden
18767
+ */
18768
+ get toolbarPosition() {
18769
+ return isDocumentAvailable() && this.host.nativeElement.closest('.k-toolbar')?.getAttribute('position');
18770
+ }
18771
+ ngAfterViewInit() {
18772
+ if (!isDocumentAvailable() || !this.toolbarPosition) {
18773
+ return;
18774
+ }
18775
+ this.ctx[`${this.toolbarPosition}ToolbarNavigation`]?.navigableElements.push(this.element);
18776
+ this.ctx[`${this.toolbarPosition}ToolbarNavigation`]?.notify();
18777
+ }
18778
+ ngOnDestroy() {
18779
+ if (!isDocumentAvailable() || !this.toolbarPosition) {
18780
+ return;
18781
+ }
18782
+ const elements = this.ctx[`${this.toolbarPosition}ToolbarNavigation`].navigableElements;
18783
+ this.ctx[`${this.toolbarPosition}ToolbarNavigation`].navigableElements = elements.filter(el => el !== this.element);
18784
+ this.ctx[`${this.toolbarPosition}ToolbarNavigation`].notify();
18785
+ }
18786
+ }
18787
+ 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 });
18788
+ 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 });
18789
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: TreeListToolbarFocusableDirective, decorators: [{
18790
+ type: Directive,
18791
+ args: [{
18792
+ selector: `
18793
+ [kendoTreeListToolbarFocusable],
18794
+ [kendoTreeListAddCommand],
18795
+ [kendoTreeListCancelCommand],
18796
+ [kendoTreeListEditCommand],
18797
+ [kendoTreeListRemoveCommand],
18798
+ [kendoTreeListSaveCommand],
18799
+ [kendoTreeListExcelCommand],
18800
+ [kendoTreeListPDFCommand]
18801
+ `
18802
+ }]
18803
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: ContextService }]; } });
18804
+
18293
18805
  /**
18294
18806
  * @hidden
18295
18807
  */
@@ -19297,6 +19809,7 @@ const exportedModules$1 = [
19297
19809
  FlatBindingDirective,
19298
19810
  ExpandableDirective,
19299
19811
  SelectableDirective,
19812
+ TreeListToolbarFocusableDirective,
19300
19813
  ...SharedModule.exports(),
19301
19814
  ...BodyModule.exports(),
19302
19815
  ...HeaderModule.exports(),
@@ -19320,7 +19833,8 @@ const declarations$2 = [
19320
19833
  ExpandableDirective,
19321
19834
  SelectableDirective,
19322
19835
  MarqueeDirective,
19323
- TreeListSpacerComponent
19836
+ TreeListSpacerComponent,
19837
+ TreeListToolbarFocusableDirective
19324
19838
  ];
19325
19839
  /**
19326
19840
  * Represents the [NgModule](link:site.data.urls.angular['ngmoduleapi'])
@@ -19360,7 +19874,8 @@ TreeListModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version:
19360
19874
  ExpandableDirective,
19361
19875
  SelectableDirective,
19362
19876
  MarqueeDirective,
19363
- TreeListSpacerComponent], imports: [CommonModule,
19877
+ TreeListSpacerComponent,
19878
+ TreeListToolbarFocusableDirective], imports: [CommonModule,
19364
19879
  SharedModule,
19365
19880
  BodyModule,
19366
19881
  HeaderModule,
@@ -19379,7 +19894,8 @@ TreeListModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version:
19379
19894
  HierarchyBindingDirective,
19380
19895
  FlatBindingDirective,
19381
19896
  ExpandableDirective,
19382
- 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] });
19897
+ SelectableDirective,
19898
+ 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] });
19383
19899
  TreeListModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: TreeListModule, imports: [[
19384
19900
  CommonModule,
19385
19901
  SharedModule,
@@ -20282,5 +20798,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
20282
20798
  * Generated bundle index. Do not edit.
20283
20799
  */
20284
20800
 
20285
- 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 };
20801
+ 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 };
20286
20802