@progress/kendo-angular-pager 4.0.6 → 4.1.0-dev.202211250852

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.
@@ -3,18 +3,18 @@
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, Input, forwardRef, Component, ChangeDetectionStrategy, ViewChild, HostBinding, Optional, EventEmitter, ContentChild, Output, NgModule } from '@angular/core';
6
+ import { Directive, Input, forwardRef, Component, ChangeDetectionStrategy, ViewChild, HostBinding, Optional, EventEmitter, ContentChild, Output, HostListener, NgModule } from '@angular/core';
7
7
  import * as i1 from '@progress/kendo-angular-l10n';
8
8
  import { ComponentMessages, LocalizationService, L10N_PREFIX } from '@progress/kendo-angular-l10n';
9
9
  import { Subject, Subscription } from 'rxjs';
10
+ import * as i6 from '@progress/kendo-angular-common';
11
+ import { Keys, anyChanged, ResizeSensorComponent, EventsModule, ResizeSensorModule } from '@progress/kendo-angular-common';
10
12
  import * as i3 from '@progress/kendo-angular-dropdowns';
11
13
  import { DropDownListModule } from '@progress/kendo-angular-dropdowns';
12
- import * as i3$1 from '@angular/common';
14
+ import * as i4 from '@angular/common';
13
15
  import { CommonModule } from '@angular/common';
14
- import * as i3$2 from '@progress/kendo-angular-inputs';
16
+ import * as i3$1 from '@progress/kendo-angular-inputs';
15
17
  import { NumericTextBoxComponent, NumericTextBoxModule } from '@progress/kendo-angular-inputs';
16
- import * as i5 from '@progress/kendo-angular-common';
17
- import { Keys, anyChanged, ResizeSensorComponent, EventsModule, ResizeSensorModule } from '@progress/kendo-angular-common';
18
18
  import { validatePackage } from '@progress/kendo-licensing';
19
19
 
20
20
  /**
@@ -62,9 +62,9 @@ class PageSizeChangeEvent extends PreventableEvent {
62
62
  */
63
63
  class Messages extends ComponentMessages {
64
64
  }
65
- Messages.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: Messages, deps: null, target: i0.ɵɵFactoryTarget.Directive });
66
- Messages.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.16", type: Messages, selector: "kendoPagerMessages", inputs: { firstPage: "firstPage", lastPage: "lastPage", previousPage: "previousPage", nextPage: "nextPage", page: "page", pageNumberInputTitle: "pageNumberInputTitle", itemsPerPage: "itemsPerPage", of: "of", items: "items", selectPage: "selectPage" }, usesInheritance: true, ngImport: i0 });
67
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: Messages, decorators: [{
65
+ Messages.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: Messages, deps: null, target: i0.ɵɵFactoryTarget.Directive });
66
+ Messages.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.17", type: Messages, selector: "kendoPagerMessages", inputs: { firstPage: "firstPage", lastPage: "lastPage", previousPage: "previousPage", nextPage: "nextPage", page: "page", pageNumberInputTitle: "pageNumberInputTitle", itemsPerPage: "itemsPerPage", of: "of", items: "items", selectPage: "selectPage", inputLabel: "inputLabel" }, usesInheritance: true, ngImport: i0 });
67
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: Messages, decorators: [{
68
68
  type: Directive,
69
69
  args: [{
70
70
  // eslint-disable-next-line @angular-eslint/directive-selector
@@ -90,6 +90,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
90
90
  type: Input
91
91
  }], selectPage: [{
92
92
  type: Input
93
+ }], inputLabel: [{
94
+ type: Input
93
95
  }] } });
94
96
 
95
97
  /**
@@ -105,14 +107,14 @@ class CustomMessagesComponent extends Messages {
105
107
  return true;
106
108
  }
107
109
  }
108
- CustomMessagesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: CustomMessagesComponent, deps: [{ token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });
109
- CustomMessagesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: CustomMessagesComponent, selector: "kendo-datapager-messages", providers: [
110
+ CustomMessagesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: CustomMessagesComponent, deps: [{ token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });
111
+ CustomMessagesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: CustomMessagesComponent, selector: "kendo-datapager-messages", providers: [
110
112
  {
111
113
  provide: Messages,
112
114
  useExisting: forwardRef(() => CustomMessagesComponent)
113
115
  }
114
116
  ], usesInheritance: true, ngImport: i0, template: ``, isInline: true });
115
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: CustomMessagesComponent, decorators: [{
117
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: CustomMessagesComponent, decorators: [{
116
118
  type: Component,
117
119
  args: [{
118
120
  providers: [
@@ -135,14 +137,14 @@ class LocalizedMessagesDirective extends Messages {
135
137
  this.service = service;
136
138
  }
137
139
  }
138
- LocalizedMessagesDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: LocalizedMessagesDirective, deps: [{ token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Directive });
139
- LocalizedMessagesDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.16", type: LocalizedMessagesDirective, selector: "[kendoDataPagerLocalizedMessages]", providers: [
140
+ LocalizedMessagesDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: LocalizedMessagesDirective, deps: [{ token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Directive });
141
+ LocalizedMessagesDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.17", type: LocalizedMessagesDirective, selector: "[kendoDataPagerLocalizedMessages]", providers: [
140
142
  {
141
143
  provide: Messages,
142
144
  useExisting: forwardRef(() => LocalizedMessagesDirective)
143
145
  }
144
146
  ], usesInheritance: true, ngImport: i0 });
145
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: LocalizedMessagesDirective, decorators: [{
147
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: LocalizedMessagesDirective, decorators: [{
146
148
  type: Directive,
147
149
  args: [{
148
150
  providers: [
@@ -262,9 +264,9 @@ class PagerElementComponent {
262
264
  }
263
265
  }
264
266
  }
265
- PagerElementComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PagerElementComponent, deps: [{ token: i1.LocalizationService }, { token: PagerContextService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
266
- PagerElementComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: PagerElementComponent, selector: "kendo-pager-element", ngImport: i0, template: ``, isInline: true });
267
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PagerElementComponent, decorators: [{
267
+ PagerElementComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PagerElementComponent, deps: [{ token: i1.LocalizationService }, { token: PagerContextService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
268
+ PagerElementComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: PagerElementComponent, selector: "kendo-pager-element", ngImport: i0, template: ``, isInline: true });
269
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PagerElementComponent, decorators: [{
268
270
  type: Component,
269
271
  args: [{
270
272
  selector: 'kendo-pager-element',
@@ -272,6 +274,112 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
272
274
  }]
273
275
  }], ctorParameters: function () { return [{ type: i1.LocalizationService }, { type: PagerContextService }, { type: i0.ChangeDetectorRef }]; } });
274
276
 
277
+ /**
278
+ * @hidden
279
+ */
280
+ const DEFAULT_PAGE_SIZE_VALUES = [5, 10, 20];
281
+ /**
282
+ * @hidden
283
+ */
284
+ const focusableDirectiveSelector = '[kendoPagerFocusable]';
285
+ /**
286
+ * @hidden
287
+ */
288
+ const getAllFocusableChildren = (parent) => {
289
+ return parent.querySelectorAll(focusableDirectiveSelector);
290
+ };
291
+ /**
292
+ * @hidden
293
+ */
294
+ const focusableSelector = [
295
+ 'a[href]:not([disabled])',
296
+ 'area[href]:not([disabled])',
297
+ 'input:not([disabled])',
298
+ 'select:not([disabled])',
299
+ 'textarea:not([disabled])',
300
+ 'button',
301
+ 'iframe:not([disabled])',
302
+ 'object:not([disabled])',
303
+ 'embed:not([disabled])',
304
+ '*[tabindex]:not([disabled])',
305
+ '*[contenteditable]:not([disabled]):not([contenteditable="false"])'
306
+ ].join(',');
307
+
308
+ /**
309
+ * @hidden
310
+ */
311
+ class PagerNavigationService {
312
+ constructor() {
313
+ this.isNavigable = false;
314
+ this.innerNavigationChange = new Subject();
315
+ }
316
+ toggleInnerNavigation(value) {
317
+ this.innerNavigationChange.next(value);
318
+ }
319
+ keepFocusWithinComponent(wrapper, target, event) {
320
+ const [firstFocusable, lastFocusable] = this.getFirstAndLastFocusable(wrapper);
321
+ const tabAfterLastFocusable = !event.shiftKey && target === lastFocusable;
322
+ const shiftTabAfterFirstFocusable = event.shiftKey && target === firstFocusable;
323
+ if (tabAfterLastFocusable) {
324
+ event.preventDefault();
325
+ firstFocusable.focus();
326
+ }
327
+ if (shiftTabAfterFirstFocusable) {
328
+ event.preventDefault();
329
+ lastFocusable.focus();
330
+ }
331
+ }
332
+ getFirstAndLastFocusable(wrapper) {
333
+ const all = getAllFocusableChildren(wrapper);
334
+ const firstFocusable = all.length > 0 ? all[0] : parent;
335
+ const lastFocusable = all.length > 0 ? all[all.length - 1] : parent;
336
+ return [firstFocusable, lastFocusable];
337
+ }
338
+ }
339
+
340
+ /**
341
+ * Place the directive on custom focusable elements in the [`kendoDataPagerTemplate`]({% slug api_pager_pagertemplatedirective %}) to include them in the built-in Pager keyboard navigation.
342
+ */
343
+ class PagerFocusableDirective {
344
+ constructor(navigationService, element, renderer) {
345
+ this.navigationService = navigationService;
346
+ this.element = element;
347
+ this.renderer = renderer;
348
+ this.subscriptions = new Subscription();
349
+ }
350
+ ngOnInit() {
351
+ this.subscriptions.add(this.navigationService.innerNavigationChange.subscribe(this.innerNavigationChange.bind(this)));
352
+ }
353
+ ngOnDestroy() {
354
+ this.subscriptions.unsubscribe();
355
+ }
356
+ get nativeElement() {
357
+ return this.element.nativeElement;
358
+ }
359
+ innerNavigationChange(value) {
360
+ if (!this.navigationService.isNavigable) {
361
+ return;
362
+ }
363
+ const index = value ? '0' : '-1';
364
+ if (this.nativeElement.matches(focusableSelector)) {
365
+ this.renderer.setAttribute(this.nativeElement, 'tabindex', index);
366
+ }
367
+ const focusableElements = this.nativeElement.querySelectorAll(focusableSelector);
368
+ focusableElements.forEach(el => {
369
+ this.renderer.setAttribute(el, 'tabindex', index);
370
+ });
371
+ }
372
+ }
373
+ PagerFocusableDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PagerFocusableDirective, deps: [{ token: PagerNavigationService }, { token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
374
+ PagerFocusableDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.17", type: PagerFocusableDirective, selector: "[kendoPagerFocusable]", exportAs: ["kendoPagerFocusable"], ngImport: i0 });
375
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PagerFocusableDirective, decorators: [{
376
+ type: Directive,
377
+ args: [{
378
+ selector: '[kendoPagerFocusable]',
379
+ exportAs: 'kendoPagerFocusable'
380
+ }]
381
+ }], ctorParameters: function () { return [{ type: PagerNavigationService }, { type: i0.ElementRef }, { type: i0.Renderer2 }]; } });
382
+
275
383
  // eslint-disable no-access-missing-member
276
384
  /**
277
385
  * Displays buttons for navigating to the first and to the previous page ([see example]({% slug pager_settings %})).
@@ -297,10 +405,10 @@ class PagerPrevButtonsComponent extends PagerElementComponent {
297
405
  this.cd.markForCheck();
298
406
  }
299
407
  }
300
- PagerPrevButtonsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PagerPrevButtonsComponent, deps: [{ token: i1.LocalizationService }, { token: PagerContextService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
301
- PagerPrevButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: PagerPrevButtonsComponent, selector: "kendo-datapager-prev-buttons", usesInheritance: true, ngImport: i0, template: `
408
+ PagerPrevButtonsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PagerPrevButtonsComponent, deps: [{ token: i1.LocalizationService }, { token: PagerContextService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
409
+ PagerPrevButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: PagerPrevButtonsComponent, selector: "kendo-datapager-prev-buttons", usesInheritance: true, ngImport: i0, template: `
302
410
  <button
303
- type="button"
411
+ type="button" kendoPagerFocusable
304
412
  class="k-link k-pager-nav k-pager-first"
305
413
  [class.k-disabled]="disabled"
306
414
  [title]="textFor('firstPage')"
@@ -310,7 +418,7 @@ PagerPrevButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.
310
418
  <span class="k-icon k-i-seek-w" role="note" [attr.aria-label]="textFor('firstPage')"></span>
311
419
  </button>
312
420
  <button
313
- type="button"
421
+ type="button" kendoPagerFocusable
314
422
  class="k-link k-pager-nav"
315
423
  [class.k-disabled]="disabled"
316
424
  [title]="textFor('previousPage')"
@@ -319,15 +427,15 @@ PagerPrevButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.
319
427
  (click)="currentPage !== 1 ? changePage(currentPage-2) : false">
320
428
  <span class="k-icon k-i-arrow-w" role="note" [attr.aria-label]="textFor('previousPage')"></span>
321
429
  </button>
322
- `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
323
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PagerPrevButtonsComponent, decorators: [{
430
+ `, isInline: true, directives: [{ type: PagerFocusableDirective, selector: "[kendoPagerFocusable]", exportAs: ["kendoPagerFocusable"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
431
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PagerPrevButtonsComponent, decorators: [{
324
432
  type: Component,
325
433
  args: [{
326
434
  changeDetection: ChangeDetectionStrategy.OnPush,
327
435
  selector: 'kendo-datapager-prev-buttons',
328
436
  template: `
329
437
  <button
330
- type="button"
438
+ type="button" kendoPagerFocusable
331
439
  class="k-link k-pager-nav k-pager-first"
332
440
  [class.k-disabled]="disabled"
333
441
  [title]="textFor('firstPage')"
@@ -337,7 +445,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
337
445
  <span class="k-icon k-i-seek-w" role="note" [attr.aria-label]="textFor('firstPage')"></span>
338
446
  </button>
339
447
  <button
340
- type="button"
448
+ type="button" kendoPagerFocusable
341
449
  class="k-link k-pager-nav"
342
450
  [class.k-disabled]="disabled"
343
451
  [title]="textFor('previousPage')"
@@ -354,9 +462,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
354
462
  * Displays a drop-down list for the page size selection ([see example]({% slug pager_settings %})).
355
463
  */
356
464
  class PagerPageSizesComponent extends PagerElementComponent {
357
- constructor(localization, cd, pagerContext) {
465
+ constructor(localization, cd, pagerContext, element, ngZone) {
358
466
  super(localization, pagerContext, cd);
359
467
  this.pagerContext = pagerContext;
468
+ this.element = element;
469
+ this.ngZone = ngZone;
360
470
  this._pageSizes = [];
361
471
  }
362
472
  /**
@@ -510,6 +620,12 @@ class PagerPageSizesComponent extends PagerElementComponent {
510
620
  }
511
621
  ngAfterViewInit() {
512
622
  this.dropDownList.wrapper.nativeElement.setAttribute('aria-label', this.textFor('itemsPerPage'));
623
+ this.ngZone.runOutsideAngular(() => {
624
+ this.element.nativeElement.addEventListener('keydown', this.keyDownHandler.bind(this), true);
625
+ });
626
+ }
627
+ ngOnDestroy() {
628
+ this.element.nativeElement.removeEventListener('keydown', this.keyDownHandler);
513
629
  }
514
630
  /**
515
631
  * @hidden
@@ -527,10 +643,16 @@ class PagerPageSizesComponent extends PagerElementComponent {
527
643
  this.pageSize = typeof pageSize === 'number' ? pageSize : this.total;
528
644
  this.cd.markForCheck();
529
645
  }
646
+ keyDownHandler(ev) {
647
+ if (ev.keyCode === Keys.Escape && this.dropDownList.isOpen) {
648
+ ev.stopPropagation();
649
+ this.dropDownList.toggle(false);
650
+ }
651
+ }
530
652
  }
531
- PagerPageSizesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PagerPageSizesComponent, deps: [{ token: i1.LocalizationService }, { token: i0.ChangeDetectorRef }, { token: PagerContextService }], target: i0.ɵɵFactoryTarget.Component });
532
- PagerPageSizesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: PagerPageSizesComponent, selector: "kendo-datapager-page-sizes", inputs: { pageSizes: "pageSizes" }, host: { properties: { "class.k-pager-sizes": "this.classes", "class.k-label": "this.classes" } }, viewQueries: [{ propertyName: "dropDownList", first: true, predicate: ["dropdownlist"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
533
- <kendo-dropdownlist
653
+ PagerPageSizesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PagerPageSizesComponent, deps: [{ token: i1.LocalizationService }, { token: i0.ChangeDetectorRef }, { token: PagerContextService }, { token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
654
+ PagerPageSizesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: PagerPageSizesComponent, selector: "kendo-datapager-page-sizes", inputs: { pageSizes: "pageSizes" }, host: { properties: { "class.k-pager-sizes": "this.classes", "class.k-label": "this.classes" } }, viewQueries: [{ propertyName: "dropDownList", first: true, predicate: ["dropdownlist"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
655
+ <kendo-dropdownlist kendoPagerFocusable
534
656
  #dropdownlist
535
657
  [data]="pageSizes"
536
658
  textField="text"
@@ -539,14 +661,14 @@ PagerPageSizesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0"
539
661
  [value]="pageSize"
540
662
  (valueChange)="pageSizeChange($event, dropdownlist)"></kendo-dropdownlist>
541
663
  {{ textFor('itemsPerPage') }}
542
- `, isInline: true, components: [{ type: i3.DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["iconClass", "loading", "data", "value", "textField", "valueField", "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"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
543
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PagerPageSizesComponent, decorators: [{
664
+ `, isInline: true, components: [{ type: i3.DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["iconClass", "loading", "data", "value", "textField", "valueField", "popupSettings", "listHeight", "defaultItem", "disabled", "itemDisabled", "readonly", "filterable", "virtual", "ignoreCase", "delay", "valuePrimitive", "tabindex", "tabIndex", "size", "rounded", "fillMode", "id"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }], directives: [{ type: PagerFocusableDirective, selector: "[kendoPagerFocusable]", exportAs: ["kendoPagerFocusable"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
665
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PagerPageSizesComponent, decorators: [{
544
666
  type: Component,
545
667
  args: [{
546
668
  changeDetection: ChangeDetectionStrategy.OnPush,
547
669
  selector: 'kendo-datapager-page-sizes',
548
670
  template: `
549
- <kendo-dropdownlist
671
+ <kendo-dropdownlist kendoPagerFocusable
550
672
  #dropdownlist
551
673
  [data]="pageSizes"
552
674
  textField="text"
@@ -557,7 +679,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
557
679
  {{ textFor('itemsPerPage') }}
558
680
  `
559
681
  }]
560
- }], ctorParameters: function () { return [{ type: i1.LocalizationService }, { type: i0.ChangeDetectorRef }, { type: PagerContextService }]; }, propDecorators: { dropDownList: [{
682
+ }], ctorParameters: function () { return [{ type: i1.LocalizationService }, { type: i0.ChangeDetectorRef }, { type: PagerContextService }, { type: i0.ElementRef }, { type: i0.NgZone }]; }, propDecorators: { dropDownList: [{
561
683
  type: ViewChild,
562
684
  args: ['dropdownlist', { static: true }]
563
685
  }], pageSizes: [{
@@ -617,9 +739,9 @@ class PagerTemplateDirective {
617
739
  this.templateRef = templateRef;
618
740
  }
619
741
  }
620
- PagerTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PagerTemplateDirective, deps: [{ token: i0.TemplateRef, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
621
- PagerTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.16", type: PagerTemplateDirective, selector: "[kendoDataPagerTemplate]", ngImport: i0 });
622
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PagerTemplateDirective, decorators: [{
742
+ PagerTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PagerTemplateDirective, deps: [{ token: i0.TemplateRef, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
743
+ PagerTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.17", type: PagerTemplateDirective, selector: "[kendoDataPagerTemplate]", ngImport: i0 });
744
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PagerTemplateDirective, decorators: [{
623
745
  type: Directive,
624
746
  args: [{
625
747
  selector: '[kendoDataPagerTemplate]'
@@ -707,9 +829,9 @@ class PagerNumericButtonsComponent extends PagerElementComponent {
707
829
  return this.textFor('selectPage');
708
830
  }
709
831
  }
710
- PagerNumericButtonsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PagerNumericButtonsComponent, deps: [{ token: i1.LocalizationService }, { token: i0.ChangeDetectorRef }, { token: PagerContextService }], target: i0.ɵɵFactoryTarget.Component });
711
- PagerNumericButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: PagerNumericButtonsComponent, selector: "kendo-datapager-numeric-buttons", inputs: { buttonCount: "buttonCount" }, host: { properties: { "class.k-pager-numbers-wrap": "this.numbersWrapClass" } }, usesInheritance: true, ngImport: i0, template: `
712
- <select
832
+ PagerNumericButtonsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PagerNumericButtonsComponent, deps: [{ token: i1.LocalizationService }, { token: i0.ChangeDetectorRef }, { token: PagerContextService }], target: i0.ɵɵFactoryTarget.Component });
833
+ PagerNumericButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: PagerNumericButtonsComponent, selector: "kendo-datapager-numeric-buttons", inputs: { buttonCount: "buttonCount" }, host: { properties: { "class.k-pager-numbers-wrap": "this.numbersWrapClass" } }, usesInheritance: true, ngImport: i0, template: `
834
+ <select kendoPagerFocusable
713
835
  class="k-dropdown-list k-picker k-picker-md k-rounded-md k-picker-solid"
714
836
  [attr.title]="pageChooserLabel"
715
837
  [attr.aria-label]="pageChooserLabel"
@@ -738,15 +860,17 @@ PagerNumericButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12
738
860
  <ul [ngClass]="{'k-pager-numbers': true}">
739
861
  <li *ngIf="start > 1">
740
862
  <button
741
- type="button"
863
+ type="button" kendoPagerFocusable
742
864
  class="k-link"
743
865
  [attr.aria-label]="pageLabel(start - 1)"
866
+ [attr.title]="pageLabel(start - 1)"
744
867
  (click)="changePage(start - 2)">...</button>
745
868
  </li>
746
869
  <li *ngFor="let num of buttons">
747
870
  <button
748
- type="button"
871
+ type="button" kendoPagerFocusable
749
872
  [attr.aria-label]="pageLabel(num)"
873
+ [attr.title]="pageLabel(num)"
750
874
  [attr.aria-current]="currentPage === num ? 'page' : undefined"
751
875
  [ngClass]="{'k-link': true, 'k-selected':currentPage === num}"
752
876
  (click)="changePage(num - 1)">
@@ -755,20 +879,21 @@ PagerNumericButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12
755
879
  </li>
756
880
  <li *ngIf="end < totalPages">
757
881
  <button
758
- type="button"
882
+ type="button" kendoPagerFocusable
759
883
  class="k-link"
760
884
  [attr.aria-label]="pageLabel(end + 1)"
885
+ [attr.title]="pageLabel(end + 1)"
761
886
  (click)="changePage(end)">...</button>
762
887
  </li>
763
888
  </ul>
764
- `, isInline: true, directives: [{ type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
765
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PagerNumericButtonsComponent, decorators: [{
889
+ `, isInline: true, directives: [{ type: PagerFocusableDirective, selector: "[kendoPagerFocusable]", exportAs: ["kendoPagerFocusable"] }, { 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 });
890
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PagerNumericButtonsComponent, decorators: [{
766
891
  type: Component,
767
892
  args: [{
768
893
  changeDetection: ChangeDetectionStrategy.OnPush,
769
894
  selector: 'kendo-datapager-numeric-buttons',
770
895
  template: `
771
- <select
896
+ <select kendoPagerFocusable
772
897
  class="k-dropdown-list k-picker k-picker-md k-rounded-md k-picker-solid"
773
898
  [attr.title]="pageChooserLabel"
774
899
  [attr.aria-label]="pageChooserLabel"
@@ -797,15 +922,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
797
922
  <ul [ngClass]="{'k-pager-numbers': true}">
798
923
  <li *ngIf="start > 1">
799
924
  <button
800
- type="button"
925
+ type="button" kendoPagerFocusable
801
926
  class="k-link"
802
927
  [attr.aria-label]="pageLabel(start - 1)"
928
+ [attr.title]="pageLabel(start - 1)"
803
929
  (click)="changePage(start - 2)">...</button>
804
930
  </li>
805
931
  <li *ngFor="let num of buttons">
806
932
  <button
807
- type="button"
933
+ type="button" kendoPagerFocusable
808
934
  [attr.aria-label]="pageLabel(num)"
935
+ [attr.title]="pageLabel(num)"
809
936
  [attr.aria-current]="currentPage === num ? 'page' : undefined"
810
937
  [ngClass]="{'k-link': true, 'k-selected':currentPage === num}"
811
938
  (click)="changePage(num - 1)">
@@ -814,9 +941,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
814
941
  </li>
815
942
  <li *ngIf="end < totalPages">
816
943
  <button
817
- type="button"
944
+ type="button" kendoPagerFocusable
818
945
  class="k-link"
819
946
  [attr.aria-label]="pageLabel(end + 1)"
947
+ [attr.title]="pageLabel(end + 1)"
820
948
  (click)="changePage(end)">...</button>
821
949
  </li>
822
950
  </ul>
@@ -854,10 +982,10 @@ class PagerNextButtonsComponent extends PagerElementComponent {
854
982
  this.cd.markForCheck();
855
983
  }
856
984
  }
857
- PagerNextButtonsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PagerNextButtonsComponent, deps: [{ token: i1.LocalizationService }, { token: PagerContextService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
858
- PagerNextButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: PagerNextButtonsComponent, selector: "kendo-datapager-next-buttons", usesInheritance: true, ngImport: i0, template: `
985
+ PagerNextButtonsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PagerNextButtonsComponent, deps: [{ token: i1.LocalizationService }, { token: PagerContextService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
986
+ PagerNextButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: PagerNextButtonsComponent, selector: "kendo-datapager-next-buttons", usesInheritance: true, ngImport: i0, template: `
859
987
  <button
860
- type="button"
988
+ type="button" kendoPagerFocusable
861
989
  class="k-link k-pager-nav"
862
990
  [class.k-disabled]="disabled"
863
991
  [title]="textFor('nextPage')"
@@ -867,7 +995,7 @@ PagerNextButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.
867
995
  <span class="k-icon k-i-arrow-e" role="note" [attr.aria-label]="textFor('nextPage')"></span>
868
996
  </button>
869
997
  <button
870
- type="button"
998
+ type="button" kendoPagerFocusable
871
999
  class="k-link k-pager-nav k-pager-last"
872
1000
  [class.k-disabled]="disabled"
873
1001
  [title]="textFor('lastPage')"
@@ -876,15 +1004,15 @@ PagerNextButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.
876
1004
  (click)="currentPage !== totalPages ? changePage(totalPages-1) : false">
877
1005
  <span class="k-icon k-i-seek-e" role="note" [attr.aria-label]="textFor('lastPage')"></span>
878
1006
  </button>
879
- `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
880
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PagerNextButtonsComponent, decorators: [{
1007
+ `, isInline: true, directives: [{ type: PagerFocusableDirective, selector: "[kendoPagerFocusable]", exportAs: ["kendoPagerFocusable"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1008
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PagerNextButtonsComponent, decorators: [{
881
1009
  type: Component,
882
1010
  args: [{
883
1011
  changeDetection: ChangeDetectionStrategy.OnPush,
884
1012
  selector: 'kendo-datapager-next-buttons',
885
1013
  template: `
886
1014
  <button
887
- type="button"
1015
+ type="button" kendoPagerFocusable
888
1016
  class="k-link k-pager-nav"
889
1017
  [class.k-disabled]="disabled"
890
1018
  [title]="textFor('nextPage')"
@@ -894,7 +1022,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
894
1022
  <span class="k-icon k-i-arrow-e" role="note" [attr.aria-label]="textFor('nextPage')"></span>
895
1023
  </button>
896
1024
  <button
897
- type="button"
1025
+ type="button" kendoPagerFocusable
898
1026
  class="k-link k-pager-nav k-pager-last"
899
1027
  [class.k-disabled]="disabled"
900
1028
  [title]="textFor('lastPage')"
@@ -911,10 +1039,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
911
1039
  * Displays an input element which allows the typing and rendering of page numbers.
912
1040
  */
913
1041
  class PagerInputComponent extends PagerElementComponent {
914
- constructor(localization, pagerContext, zone, cd) {
1042
+ constructor(localization, pagerContext, zone, cd, renderer) {
915
1043
  super(localization, pagerContext, cd);
916
1044
  this.pagerContext = pagerContext;
917
1045
  this.zone = zone;
1046
+ this.renderer = renderer;
918
1047
  /**
919
1048
  * @hidden
920
1049
  *
@@ -966,6 +1095,10 @@ class PagerInputComponent extends PagerElementComponent {
966
1095
  get hasPages() {
967
1096
  return this.totalPages !== 0;
968
1097
  }
1098
+ ngAfterViewInit() {
1099
+ const innerNumericInput = this.numericInput.numericInput.nativeElement;
1100
+ this.renderer.setAttribute(innerNumericInput, 'aria-label', this.textFor('inputLabel'));
1101
+ }
969
1102
  onChanges({ total, skip, pageSize }) {
970
1103
  this.total = total;
971
1104
  this.skip = skip;
@@ -973,11 +1106,11 @@ class PagerInputComponent extends PagerElementComponent {
973
1106
  this.cd.markForCheck();
974
1107
  }
975
1108
  }
976
- PagerInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PagerInputComponent, deps: [{ token: i1.LocalizationService }, { token: PagerContextService }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
977
- PagerInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: PagerInputComponent, selector: "kendo-datapager-input", viewQueries: [{ propertyName: "numericInput", first: true, predicate: NumericTextBoxComponent, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
1109
+ PagerInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PagerInputComponent, deps: [{ token: i1.LocalizationService }, { token: PagerContextService }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
1110
+ PagerInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: PagerInputComponent, selector: "kendo-datapager-input", viewQueries: [{ propertyName: "numericInput", first: true, predicate: NumericTextBoxComponent, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
978
1111
  <span [ngClass]="{'k-pager-input': true, 'k-label': true}">
979
1112
  {{textFor('page')}}
980
- <kendo-numerictextbox
1113
+ <kendo-numerictextbox kendoPagerFocusable
981
1114
  [spinners]="false"
982
1115
  [decimals]="0"
983
1116
  format="n0"
@@ -994,15 +1127,15 @@ PagerInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ve
994
1127
  </kendo-numerictextbox>
995
1128
  {{textFor('of')}} {{totalPages}}
996
1129
  </span>
997
- `, isInline: true, components: [{ type: i3$2.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: i3$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i5.EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }] });
998
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PagerInputComponent, decorators: [{
1130
+ `, isInline: true, components: [{ type: i3$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: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: PagerFocusableDirective, selector: "[kendoPagerFocusable]", exportAs: ["kendoPagerFocusable"] }, { type: i6.EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }] });
1131
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PagerInputComponent, decorators: [{
999
1132
  type: Component,
1000
1133
  args: [{
1001
1134
  selector: 'kendo-datapager-input',
1002
1135
  template: `
1003
1136
  <span [ngClass]="{'k-pager-input': true, 'k-label': true}">
1004
1137
  {{textFor('page')}}
1005
- <kendo-numerictextbox
1138
+ <kendo-numerictextbox kendoPagerFocusable
1006
1139
  [spinners]="false"
1007
1140
  [decimals]="0"
1008
1141
  format="n0"
@@ -1021,7 +1154,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
1021
1154
  </span>
1022
1155
  `
1023
1156
  }]
1024
- }], ctorParameters: function () { return [{ type: i1.LocalizationService }, { type: PagerContextService }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { numericInput: [{
1157
+ }], ctorParameters: function () { return [{ type: i1.LocalizationService }, { type: PagerContextService }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }]; }, propDecorators: { numericInput: [{
1025
1158
  type: ViewChild,
1026
1159
  args: [NumericTextBoxComponent, { static: true }]
1027
1160
  }] } });
@@ -1074,9 +1207,9 @@ class PagerInfoComponent extends PagerElementComponent {
1074
1207
  this.cd.markForCheck();
1075
1208
  }
1076
1209
  }
1077
- PagerInfoComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PagerInfoComponent, deps: [{ token: i1.LocalizationService }, { token: i0.ChangeDetectorRef }, { token: PagerContextService }], target: i0.ɵɵFactoryTarget.Component });
1078
- PagerInfoComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: PagerInfoComponent, selector: "kendo-datapager-info", host: { properties: { "class.k-pager-info": "this.classes", "class.k-label": "this.classes" } }, usesInheritance: true, ngImport: i0, template: `{{currentPageText}} - {{maxItems}} {{textFor('of')}} {{total}} {{textFor('items')}}`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
1079
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PagerInfoComponent, decorators: [{
1210
+ PagerInfoComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PagerInfoComponent, deps: [{ token: i1.LocalizationService }, { token: i0.ChangeDetectorRef }, { token: PagerContextService }], target: i0.ɵɵFactoryTarget.Component });
1211
+ PagerInfoComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: PagerInfoComponent, selector: "kendo-datapager-info", host: { properties: { "class.k-pager-info": "this.classes", "class.k-label": "this.classes" } }, usesInheritance: true, ngImport: i0, template: `{{currentPageText}} - {{maxItems}} {{textFor('of')}} {{total}} {{textFor('items')}}`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
1212
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PagerInfoComponent, decorators: [{
1080
1213
  type: Component,
1081
1214
  args: [{
1082
1215
  changeDetection: ChangeDetectionStrategy.OnPush,
@@ -1100,11 +1233,6 @@ const RESPONSIVE_BREAKPOINT_MEDIUM = 600;
1100
1233
  */
1101
1234
  const RESPONSIVE_BREAKPOINT_LARGE = 768;
1102
1235
 
1103
- /**
1104
- * @hidden
1105
- */
1106
- const DEFAULT_PAGE_SIZE_VALUES = [5, 10, 20];
1107
-
1108
1236
  /**
1109
1237
  * @hidden
1110
1238
  */
@@ -1112,16 +1240,19 @@ const packageMetadata = {
1112
1240
  name: '@progress/kendo-angular-pager',
1113
1241
  productName: 'Kendo UI for Angular',
1114
1242
  productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],
1115
- publishDate: 1668698798,
1243
+ publishDate: 1669366305,
1116
1244
  version: '',
1117
1245
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/?utm_medium=product&utm_source=kendoangular&utm_campaign=kendo-ui-angular-purchase-license-keys-warning'
1118
1246
  };
1119
1247
 
1120
1248
  class PagerComponent {
1121
- constructor(pagerContext, element, localization) {
1249
+ constructor(pagerContext, element, localization, renderer, ngZone, navigationService) {
1122
1250
  this.pagerContext = pagerContext;
1123
1251
  this.element = element;
1124
1252
  this.localization = localization;
1253
+ this.renderer = renderer;
1254
+ this.ngZone = ngZone;
1255
+ this.navigationService = navigationService;
1125
1256
  /**
1126
1257
  * Represents the total number of data items in the collection.
1127
1258
  */
@@ -1158,10 +1289,15 @@ class PagerComponent {
1158
1289
  */
1159
1290
  this.pageSizeChange = new EventEmitter();
1160
1291
  this.pagerClass = true;
1161
- this.widgetRole = 'navigation';
1292
+ this.widgetRole = 'application';
1293
+ this.roleDescription = 'pager';
1294
+ this.keyShortcuts = 'Enter ArrowRight ArrowLeft';
1295
+ this.hostTabindex = '0';
1162
1296
  this.subscriptions = new Subscription();
1163
1297
  this._templateContext = {};
1164
1298
  this._pageSizeValues = DEFAULT_PAGE_SIZE_VALUES;
1299
+ this.isInnerNavigationEnabled = false;
1300
+ this._navigable = false;
1165
1301
  this.resizeHandler = () => {
1166
1302
  if (this.template) {
1167
1303
  return;
@@ -1193,9 +1329,30 @@ class PagerComponent {
1193
1329
  set pageSizeValues(pageSizeValues) {
1194
1330
  this._pageSizeValues = Array.isArray(pageSizeValues) ? pageSizeValues : pageSizeValues ? DEFAULT_PAGE_SIZE_VALUES : false;
1195
1331
  }
1332
+ /**
1333
+ * If set to `true`, the user can use dedicated shortcuts to interact with the Pager ([see example]({% slug keyboard_navigation_pager %})).
1334
+ * By default, navigation is disabled and the Pager content is accessible in the normal tab sequence.
1335
+ * @default false
1336
+ */
1337
+ set navigable(value) {
1338
+ this._navigable = value;
1339
+ this.navigationService.isNavigable = value;
1340
+ }
1341
+ ;
1342
+ get navigable() {
1343
+ return this._navigable;
1344
+ }
1345
+ ;
1196
1346
  get dir() {
1197
1347
  return this.direction;
1198
1348
  }
1349
+ /**
1350
+ * @hidden
1351
+ */
1352
+ focusHandler(ev) {
1353
+ const isInnerNavigationEnabled = ev.target !== this.element.nativeElement;
1354
+ this.navigationService.toggleInnerNavigation(isInnerNavigationEnabled);
1355
+ }
1199
1356
  get totalPages() {
1200
1357
  return Math.ceil((this.total || 0) / this.pageSize);
1201
1358
  }
@@ -1221,9 +1378,17 @@ class PagerComponent {
1221
1378
  this.subscriptions.add(this.localization.changes.subscribe(({ rtl }) => {
1222
1379
  this.direction = rtl ? 'rtl' : 'ltr';
1223
1380
  }));
1381
+ this.subscriptions.add(this.navigationService.innerNavigationChange.subscribe(this.innerNavigationChange.bind(this)));
1382
+ if (this.navigable) {
1383
+ const wrapper = this.element.nativeElement;
1384
+ this.ngZone.runOutsideAngular(() => {
1385
+ this.subscriptions.add(this.renderer.listen(wrapper, 'keydown', this.keyDownHandler.bind(this)));
1386
+ });
1387
+ }
1224
1388
  }
1225
1389
  ngAfterViewInit() {
1226
1390
  this.resizeHandler();
1391
+ this.renderer.setAttribute(this.element.nativeElement, 'aria-label', this.ariaLabel);
1227
1392
  }
1228
1393
  ngOnChanges(changes) {
1229
1394
  if (anyChanged(["pageSize", "skip", "total"], changes, false)) {
@@ -1232,6 +1397,7 @@ class PagerComponent {
1232
1397
  skip: this.skip,
1233
1398
  total: this.total
1234
1399
  });
1400
+ this.renderer.setAttribute(this.element.nativeElement, 'aria-label', this.ariaLabel);
1235
1401
  }
1236
1402
  }
1237
1403
  ngOnDestroy() {
@@ -1266,11 +1432,72 @@ class PagerComponent {
1266
1432
  this.pageChange.emit({ skip: this.skip, take: event.newPageSize });
1267
1433
  }
1268
1434
  }
1435
+ textFor(value) {
1436
+ return this.localization.get(value);
1437
+ }
1438
+ get ariaLabel() {
1439
+ return `${this.textFor('page')} ${this.currentPage} ${this.textFor('of')} ${this.totalPages}`;
1440
+ }
1441
+ keyDownHandler(e) {
1442
+ const target = e.target;
1443
+ const wrapper = this.element.nativeElement;
1444
+ const isArrowLeftOrPageUp = e.keyCode === Keys.ArrowLeft || e.keyCode === Keys.PageUp;
1445
+ const isArrowRightOrPageDown = e.keyCode === Keys.ArrowRight || e.keyCode === Keys.PageDown;
1446
+ const isEnter = e.keyCode === Keys.Enter;
1447
+ const isHome = e.keyCode === Keys.Home;
1448
+ const isEnd = e.keyCode === Keys.End;
1449
+ const isEsc = e.keyCode === Keys.Escape;
1450
+ const isTab = e.keyCode === Keys.Tab;
1451
+ const isFirstPage = this.currentPage === 1;
1452
+ const isLastPage = this.currentPage === this.totalPages;
1453
+ this.ngZone.run(() => {
1454
+ if (isHome) {
1455
+ e.preventDefault();
1456
+ !isFirstPage && this.pagerContext.changePage(0);
1457
+ }
1458
+ else if (isEnd) {
1459
+ e.preventDefault();
1460
+ !isLastPage && this.pagerContext.changePage(this.totalPages - 1);
1461
+ }
1462
+ else if (this.isInnerNavigationEnabled) {
1463
+ if (isEsc) {
1464
+ this.navigationService.toggleInnerNavigation(false);
1465
+ wrapper.focus();
1466
+ }
1467
+ else if (isTab) {
1468
+ this.navigationService.keepFocusWithinComponent(wrapper, target, e);
1469
+ }
1470
+ }
1471
+ else {
1472
+ if (isArrowLeftOrPageUp) {
1473
+ e.preventDefault();
1474
+ !isFirstPage && this.pagerContext.prevPage();
1475
+ }
1476
+ else if (isArrowRightOrPageDown) {
1477
+ e.preventDefault();
1478
+ !isLastPage && this.pagerContext.nextPage();
1479
+ }
1480
+ else if (isEnter) {
1481
+ if (e.target !== wrapper) {
1482
+ return;
1483
+ }
1484
+ e.preventDefault();
1485
+ const [firstFocusable] = this.navigationService.getFirstAndLastFocusable(wrapper);
1486
+ this.navigationService.toggleInnerNavigation(true);
1487
+ firstFocusable === null || firstFocusable === void 0 ? void 0 : firstFocusable.focus();
1488
+ }
1489
+ }
1490
+ });
1491
+ }
1492
+ innerNavigationChange(value) {
1493
+ this.isInnerNavigationEnabled = value;
1494
+ }
1269
1495
  }
1270
- PagerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PagerComponent, deps: [{ token: PagerContextService }, { token: i0.ElementRef }, { token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });
1271
- PagerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: PagerComponent, selector: "kendo-datapager", inputs: { total: "total", skip: "skip", pageSize: "pageSize", buttonCount: "buttonCount", info: "info", type: "type", pageSizeValues: "pageSizeValues", previousNext: "previousNext" }, outputs: { pageChange: "pageChange", pageSizeChange: "pageSizeChange" }, host: { properties: { "class.k-pager": "this.pagerClass", "attr.role": "this.widgetRole", "attr.dir": "this.dir" } }, providers: [
1496
+ PagerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PagerComponent, deps: [{ token: PagerContextService }, { token: i0.ElementRef }, { token: i1.LocalizationService }, { token: i0.Renderer2 }, { token: i0.NgZone }, { token: PagerNavigationService }], target: i0.ɵɵFactoryTarget.Component });
1497
+ PagerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: PagerComponent, selector: "kendo-datapager", inputs: { total: "total", skip: "skip", pageSize: "pageSize", buttonCount: "buttonCount", info: "info", type: "type", pageSizeValues: "pageSizeValues", previousNext: "previousNext", navigable: "navigable" }, outputs: { pageChange: "pageChange", pageSizeChange: "pageSizeChange" }, host: { listeners: { "focusin": "focusHandler($event)" }, properties: { "class.k-pager": "this.pagerClass", "attr.role": "this.widgetRole", "attr.aria-roledescription": "this.roleDescription", "attr.aria-keyshortcuts": "this.keyShortcuts", "attr.tabindex": "this.hostTabindex", "attr.dir": "this.dir" } }, providers: [
1272
1498
  LocalizationService,
1273
- PagerContextService
1499
+ PagerContextService,
1500
+ PagerNavigationService
1274
1501
  ], queries: [{ propertyName: "template", first: true, predicate: PagerTemplateDirective, descendants: true }], viewQueries: [{ propertyName: "resizeSensor", first: true, predicate: ResizeSensorComponent, descendants: true, static: true }], exportAs: ["kendoDataPager"], usesOnChanges: true, ngImport: i0, template: `
1275
1502
  <ng-container kendoDataPagerLocalizedMessages
1276
1503
  i18n-firstPage="kendo.pager.firstPage|The label for the first page button in the Pager"
@@ -1302,6 +1529,9 @@ PagerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version
1302
1529
 
1303
1530
  i18n-selectPage="kendo.pager.selectPage|The text of the title and aria-label attributes applied to the page chooser in the Pager"
1304
1531
  selectPage="Select page"
1532
+
1533
+ i18n-inputLabel="kendo.pager.inputLabel|The text of the aria-label attribute applied to the input element for entering the page number."
1534
+ inputLabel="Type a page number"
1305
1535
  >
1306
1536
  </ng-container>
1307
1537
  <ng-container
@@ -1321,15 +1551,16 @@ PagerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version
1321
1551
  <kendo-datapager-page-sizes *ngIf="pageSizeValues" [pageSizes]="pageSizeValues"></kendo-datapager-page-sizes>
1322
1552
  </ng-container>
1323
1553
  <kendo-resize-sensor></kendo-resize-sensor>
1324
- `, isInline: true, components: [{ type: PagerPrevButtonsComponent, selector: "kendo-datapager-prev-buttons" }, { type: PagerNumericButtonsComponent, selector: "kendo-datapager-numeric-buttons", inputs: ["buttonCount"] }, { type: PagerInputComponent, selector: "kendo-datapager-input" }, { type: PagerNextButtonsComponent, selector: "kendo-datapager-next-buttons" }, { type: PagerInfoComponent, selector: "kendo-datapager-info" }, { type: PagerPageSizesComponent, selector: "kendo-datapager-page-sizes", inputs: ["pageSizes"] }, { type: i5.ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }], directives: [{ type: LocalizedMessagesDirective, selector: "[kendoDataPagerLocalizedMessages]" }, { type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }] });
1325
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PagerComponent, decorators: [{
1554
+ `, isInline: true, components: [{ type: PagerPrevButtonsComponent, selector: "kendo-datapager-prev-buttons" }, { type: PagerNumericButtonsComponent, selector: "kendo-datapager-numeric-buttons", inputs: ["buttonCount"] }, { type: PagerInputComponent, selector: "kendo-datapager-input" }, { type: PagerNextButtonsComponent, selector: "kendo-datapager-next-buttons" }, { type: PagerInfoComponent, selector: "kendo-datapager-info" }, { type: PagerPageSizesComponent, selector: "kendo-datapager-page-sizes", inputs: ["pageSizes"] }, { type: i6.ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }], directives: [{ type: LocalizedMessagesDirective, selector: "[kendoDataPagerLocalizedMessages]" }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }] });
1555
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PagerComponent, decorators: [{
1326
1556
  type: Component,
1327
1557
  args: [{
1328
1558
  selector: 'kendo-datapager',
1329
1559
  exportAs: 'kendoDataPager',
1330
1560
  providers: [
1331
1561
  LocalizationService,
1332
- PagerContextService
1562
+ PagerContextService,
1563
+ PagerNavigationService
1333
1564
  ],
1334
1565
  template: `
1335
1566
  <ng-container kendoDataPagerLocalizedMessages
@@ -1362,6 +1593,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
1362
1593
 
1363
1594
  i18n-selectPage="kendo.pager.selectPage|The text of the title and aria-label attributes applied to the page chooser in the Pager"
1364
1595
  selectPage="Select page"
1596
+
1597
+ i18n-inputLabel="kendo.pager.inputLabel|The text of the aria-label attribute applied to the input element for entering the page number."
1598
+ inputLabel="Type a page number"
1365
1599
  >
1366
1600
  </ng-container>
1367
1601
  <ng-container
@@ -1383,7 +1617,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
1383
1617
  <kendo-resize-sensor></kendo-resize-sensor>
1384
1618
  `
1385
1619
  }]
1386
- }], ctorParameters: function () { return [{ type: PagerContextService }, { type: i0.ElementRef }, { type: i1.LocalizationService }]; }, propDecorators: { resizeSensor: [{
1620
+ }], ctorParameters: function () { return [{ type: PagerContextService }, { type: i0.ElementRef }, { type: i1.LocalizationService }, { type: i0.Renderer2 }, { type: i0.NgZone }, { type: PagerNavigationService }]; }, propDecorators: { resizeSensor: [{
1387
1621
  type: ViewChild,
1388
1622
  args: [ResizeSensorComponent, { static: true }]
1389
1623
  }], template: [{
@@ -1405,6 +1639,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
1405
1639
  type: Input
1406
1640
  }], previousNext: [{
1407
1641
  type: Input
1642
+ }], navigable: [{
1643
+ type: Input
1408
1644
  }], pageChange: [{
1409
1645
  type: Output
1410
1646
  }], pageSizeChange: [{
@@ -1415,9 +1651,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
1415
1651
  }], widgetRole: [{
1416
1652
  type: HostBinding,
1417
1653
  args: ['attr.role']
1654
+ }], roleDescription: [{
1655
+ type: HostBinding,
1656
+ args: ['attr.aria-roledescription']
1657
+ }], keyShortcuts: [{
1658
+ type: HostBinding,
1659
+ args: ['attr.aria-keyshortcuts']
1660
+ }], hostTabindex: [{
1661
+ type: HostBinding,
1662
+ args: ['attr.tabindex']
1418
1663
  }], dir: [{
1419
1664
  type: HostBinding,
1420
1665
  args: ['attr.dir']
1666
+ }], focusHandler: [{
1667
+ type: HostListener,
1668
+ args: ['focusin', ['$event']]
1421
1669
  }] } });
1422
1670
 
1423
1671
  const importedModules = [
@@ -1437,7 +1685,8 @@ const INTERNAL_COMPONENTS = [
1437
1685
  PagerPageSizesComponent,
1438
1686
  PagerTemplateDirective,
1439
1687
  LocalizedMessagesDirective,
1440
- CustomMessagesComponent
1688
+ CustomMessagesComponent,
1689
+ PagerFocusableDirective
1441
1690
  ];
1442
1691
  const providers = [
1443
1692
  {
@@ -1462,8 +1711,8 @@ class PagerModule {
1462
1711
  ];
1463
1712
  }
1464
1713
  }
1465
- PagerModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PagerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1466
- PagerModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PagerModule, declarations: [PagerComponent,
1714
+ PagerModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PagerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1715
+ PagerModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PagerModule, declarations: [PagerComponent,
1467
1716
  PagerPrevButtonsComponent,
1468
1717
  PagerNextButtonsComponent,
1469
1718
  PagerNumericButtonsComponent,
@@ -1472,7 +1721,8 @@ PagerModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "1
1472
1721
  PagerPageSizesComponent,
1473
1722
  PagerTemplateDirective,
1474
1723
  LocalizedMessagesDirective,
1475
- CustomMessagesComponent], imports: [CommonModule,
1724
+ CustomMessagesComponent,
1725
+ PagerFocusableDirective], imports: [CommonModule,
1476
1726
  NumericTextBoxModule,
1477
1727
  DropDownListModule,
1478
1728
  EventsModule,
@@ -1485,9 +1735,10 @@ PagerModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "1
1485
1735
  PagerPageSizesComponent,
1486
1736
  PagerTemplateDirective,
1487
1737
  LocalizedMessagesDirective,
1488
- CustomMessagesComponent] });
1489
- PagerModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PagerModule, providers: [providers], imports: [[...importedModules]] });
1490
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PagerModule, decorators: [{
1738
+ CustomMessagesComponent,
1739
+ PagerFocusableDirective] });
1740
+ PagerModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PagerModule, providers: [providers], imports: [[...importedModules]] });
1741
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PagerModule, decorators: [{
1491
1742
  type: NgModule,
1492
1743
  args: [{
1493
1744
  declarations: [INTERNAL_COMPONENTS],
@@ -1501,5 +1752,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
1501
1752
  * Generated bundle index. Do not edit.
1502
1753
  */
1503
1754
 
1504
- export { CustomMessagesComponent, LocalizedMessagesDirective, PageSizeChangeEvent, PagerComponent, PagerInfoComponent, PagerInputComponent, PagerModule, PagerNextButtonsComponent, PagerNumericButtonsComponent, PagerPageSizesComponent, PagerPrevButtonsComponent, PagerTemplateDirective };
1755
+ export { CustomMessagesComponent, LocalizedMessagesDirective, PageSizeChangeEvent, PagerComponent, PagerFocusableDirective, PagerInfoComponent, PagerInputComponent, PagerModule, PagerNextButtonsComponent, PagerNumericButtonsComponent, PagerPageSizesComponent, PagerPrevButtonsComponent, PagerTemplateDirective };
1505
1756