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

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,17 +3,17 @@
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
10
  import * as i3 from '@progress/kendo-angular-dropdowns';
11
11
  import { DropDownListModule } from '@progress/kendo-angular-dropdowns';
12
- import * as i3$1 from '@angular/common';
12
+ import * as i4 from '@angular/common';
13
13
  import { CommonModule } from '@angular/common';
14
- import * as i3$2 from '@progress/kendo-angular-inputs';
14
+ import * as i3$1 from '@progress/kendo-angular-inputs';
15
15
  import { NumericTextBoxComponent, NumericTextBoxModule } from '@progress/kendo-angular-inputs';
16
- import * as i5 from '@progress/kendo-angular-common';
16
+ import * as i6 from '@progress/kendo-angular-common';
17
17
  import { Keys, anyChanged, ResizeSensorComponent, EventsModule, ResizeSensorModule } from '@progress/kendo-angular-common';
18
18
  import { validatePackage } from '@progress/kendo-licensing';
19
19
 
@@ -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')"
@@ -528,9 +636,9 @@ class PagerPageSizesComponent extends PagerElementComponent {
528
636
  this.cd.markForCheck();
529
637
  }
530
638
  }
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
639
+ 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 }], target: i0.ɵɵFactoryTarget.Component });
640
+ 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: `
641
+ <kendo-dropdownlist kendoPagerFocusable
534
642
  #dropdownlist
535
643
  [data]="pageSizes"
536
644
  textField="text"
@@ -539,14 +647,14 @@ PagerPageSizesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0"
539
647
  [value]="pageSize"
540
648
  (valueChange)="pageSizeChange($event, dropdownlist)"></kendo-dropdownlist>
541
649
  {{ 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: [{
650
+ `, 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 });
651
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PagerPageSizesComponent, decorators: [{
544
652
  type: Component,
545
653
  args: [{
546
654
  changeDetection: ChangeDetectionStrategy.OnPush,
547
655
  selector: 'kendo-datapager-page-sizes',
548
656
  template: `
549
- <kendo-dropdownlist
657
+ <kendo-dropdownlist kendoPagerFocusable
550
658
  #dropdownlist
551
659
  [data]="pageSizes"
552
660
  textField="text"
@@ -617,9 +725,9 @@ class PagerTemplateDirective {
617
725
  this.templateRef = templateRef;
618
726
  }
619
727
  }
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: [{
728
+ 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 });
729
+ PagerTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.17", type: PagerTemplateDirective, selector: "[kendoDataPagerTemplate]", ngImport: i0 });
730
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PagerTemplateDirective, decorators: [{
623
731
  type: Directive,
624
732
  args: [{
625
733
  selector: '[kendoDataPagerTemplate]'
@@ -707,9 +815,9 @@ class PagerNumericButtonsComponent extends PagerElementComponent {
707
815
  return this.textFor('selectPage');
708
816
  }
709
817
  }
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
818
+ 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 });
819
+ 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: `
820
+ <select kendoPagerFocusable
713
821
  class="k-dropdown-list k-picker k-picker-md k-rounded-md k-picker-solid"
714
822
  [attr.title]="pageChooserLabel"
715
823
  [attr.aria-label]="pageChooserLabel"
@@ -738,15 +846,17 @@ PagerNumericButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12
738
846
  <ul [ngClass]="{'k-pager-numbers': true}">
739
847
  <li *ngIf="start > 1">
740
848
  <button
741
- type="button"
849
+ type="button" kendoPagerFocusable
742
850
  class="k-link"
743
851
  [attr.aria-label]="pageLabel(start - 1)"
852
+ [attr.title]="pageLabel(start - 1)"
744
853
  (click)="changePage(start - 2)">...</button>
745
854
  </li>
746
855
  <li *ngFor="let num of buttons">
747
856
  <button
748
- type="button"
857
+ type="button" kendoPagerFocusable
749
858
  [attr.aria-label]="pageLabel(num)"
859
+ [attr.title]="pageLabel(num)"
750
860
  [attr.aria-current]="currentPage === num ? 'page' : undefined"
751
861
  [ngClass]="{'k-link': true, 'k-selected':currentPage === num}"
752
862
  (click)="changePage(num - 1)">
@@ -755,20 +865,21 @@ PagerNumericButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12
755
865
  </li>
756
866
  <li *ngIf="end < totalPages">
757
867
  <button
758
- type="button"
868
+ type="button" kendoPagerFocusable
759
869
  class="k-link"
760
870
  [attr.aria-label]="pageLabel(end + 1)"
871
+ [attr.title]="pageLabel(end + 1)"
761
872
  (click)="changePage(end)">...</button>
762
873
  </li>
763
874
  </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: [{
875
+ `, 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 });
876
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PagerNumericButtonsComponent, decorators: [{
766
877
  type: Component,
767
878
  args: [{
768
879
  changeDetection: ChangeDetectionStrategy.OnPush,
769
880
  selector: 'kendo-datapager-numeric-buttons',
770
881
  template: `
771
- <select
882
+ <select kendoPagerFocusable
772
883
  class="k-dropdown-list k-picker k-picker-md k-rounded-md k-picker-solid"
773
884
  [attr.title]="pageChooserLabel"
774
885
  [attr.aria-label]="pageChooserLabel"
@@ -797,15 +908,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
797
908
  <ul [ngClass]="{'k-pager-numbers': true}">
798
909
  <li *ngIf="start > 1">
799
910
  <button
800
- type="button"
911
+ type="button" kendoPagerFocusable
801
912
  class="k-link"
802
913
  [attr.aria-label]="pageLabel(start - 1)"
914
+ [attr.title]="pageLabel(start - 1)"
803
915
  (click)="changePage(start - 2)">...</button>
804
916
  </li>
805
917
  <li *ngFor="let num of buttons">
806
918
  <button
807
- type="button"
919
+ type="button" kendoPagerFocusable
808
920
  [attr.aria-label]="pageLabel(num)"
921
+ [attr.title]="pageLabel(num)"
809
922
  [attr.aria-current]="currentPage === num ? 'page' : undefined"
810
923
  [ngClass]="{'k-link': true, 'k-selected':currentPage === num}"
811
924
  (click)="changePage(num - 1)">
@@ -814,9 +927,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
814
927
  </li>
815
928
  <li *ngIf="end < totalPages">
816
929
  <button
817
- type="button"
930
+ type="button" kendoPagerFocusable
818
931
  class="k-link"
819
932
  [attr.aria-label]="pageLabel(end + 1)"
933
+ [attr.title]="pageLabel(end + 1)"
820
934
  (click)="changePage(end)">...</button>
821
935
  </li>
822
936
  </ul>
@@ -854,10 +968,10 @@ class PagerNextButtonsComponent extends PagerElementComponent {
854
968
  this.cd.markForCheck();
855
969
  }
856
970
  }
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: `
971
+ 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 });
972
+ 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
973
  <button
860
- type="button"
974
+ type="button" kendoPagerFocusable
861
975
  class="k-link k-pager-nav"
862
976
  [class.k-disabled]="disabled"
863
977
  [title]="textFor('nextPage')"
@@ -867,7 +981,7 @@ PagerNextButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.
867
981
  <span class="k-icon k-i-arrow-e" role="note" [attr.aria-label]="textFor('nextPage')"></span>
868
982
  </button>
869
983
  <button
870
- type="button"
984
+ type="button" kendoPagerFocusable
871
985
  class="k-link k-pager-nav k-pager-last"
872
986
  [class.k-disabled]="disabled"
873
987
  [title]="textFor('lastPage')"
@@ -876,15 +990,15 @@ PagerNextButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.
876
990
  (click)="currentPage !== totalPages ? changePage(totalPages-1) : false">
877
991
  <span class="k-icon k-i-seek-e" role="note" [attr.aria-label]="textFor('lastPage')"></span>
878
992
  </button>
879
- `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
880
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PagerNextButtonsComponent, decorators: [{
993
+ `, isInline: true, directives: [{ type: PagerFocusableDirective, selector: "[kendoPagerFocusable]", exportAs: ["kendoPagerFocusable"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
994
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PagerNextButtonsComponent, decorators: [{
881
995
  type: Component,
882
996
  args: [{
883
997
  changeDetection: ChangeDetectionStrategy.OnPush,
884
998
  selector: 'kendo-datapager-next-buttons',
885
999
  template: `
886
1000
  <button
887
- type="button"
1001
+ type="button" kendoPagerFocusable
888
1002
  class="k-link k-pager-nav"
889
1003
  [class.k-disabled]="disabled"
890
1004
  [title]="textFor('nextPage')"
@@ -894,7 +1008,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
894
1008
  <span class="k-icon k-i-arrow-e" role="note" [attr.aria-label]="textFor('nextPage')"></span>
895
1009
  </button>
896
1010
  <button
897
- type="button"
1011
+ type="button" kendoPagerFocusable
898
1012
  class="k-link k-pager-nav k-pager-last"
899
1013
  [class.k-disabled]="disabled"
900
1014
  [title]="textFor('lastPage')"
@@ -911,10 +1025,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
911
1025
  * Displays an input element which allows the typing and rendering of page numbers.
912
1026
  */
913
1027
  class PagerInputComponent extends PagerElementComponent {
914
- constructor(localization, pagerContext, zone, cd) {
1028
+ constructor(localization, pagerContext, zone, cd, renderer) {
915
1029
  super(localization, pagerContext, cd);
916
1030
  this.pagerContext = pagerContext;
917
1031
  this.zone = zone;
1032
+ this.renderer = renderer;
918
1033
  /**
919
1034
  * @hidden
920
1035
  *
@@ -966,6 +1081,10 @@ class PagerInputComponent extends PagerElementComponent {
966
1081
  get hasPages() {
967
1082
  return this.totalPages !== 0;
968
1083
  }
1084
+ ngAfterViewInit() {
1085
+ const innerNumericInput = this.numericInput.numericInput.nativeElement;
1086
+ this.renderer.setAttribute(innerNumericInput, 'aria-label', this.textFor('inputLabel'));
1087
+ }
969
1088
  onChanges({ total, skip, pageSize }) {
970
1089
  this.total = total;
971
1090
  this.skip = skip;
@@ -973,11 +1092,11 @@ class PagerInputComponent extends PagerElementComponent {
973
1092
  this.cd.markForCheck();
974
1093
  }
975
1094
  }
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: `
1095
+ 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 });
1096
+ 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
1097
  <span [ngClass]="{'k-pager-input': true, 'k-label': true}">
979
1098
  {{textFor('page')}}
980
- <kendo-numerictextbox
1099
+ <kendo-numerictextbox kendoPagerFocusable
981
1100
  [spinners]="false"
982
1101
  [decimals]="0"
983
1102
  format="n0"
@@ -994,15 +1113,15 @@ PagerInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ve
994
1113
  </kendo-numerictextbox>
995
1114
  {{textFor('of')}} {{totalPages}}
996
1115
  </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: [{
1116
+ `, 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"] }] });
1117
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PagerInputComponent, decorators: [{
999
1118
  type: Component,
1000
1119
  args: [{
1001
1120
  selector: 'kendo-datapager-input',
1002
1121
  template: `
1003
1122
  <span [ngClass]="{'k-pager-input': true, 'k-label': true}">
1004
1123
  {{textFor('page')}}
1005
- <kendo-numerictextbox
1124
+ <kendo-numerictextbox kendoPagerFocusable
1006
1125
  [spinners]="false"
1007
1126
  [decimals]="0"
1008
1127
  format="n0"
@@ -1021,7 +1140,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
1021
1140
  </span>
1022
1141
  `
1023
1142
  }]
1024
- }], ctorParameters: function () { return [{ type: i1.LocalizationService }, { type: PagerContextService }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { numericInput: [{
1143
+ }], ctorParameters: function () { return [{ type: i1.LocalizationService }, { type: PagerContextService }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }]; }, propDecorators: { numericInput: [{
1025
1144
  type: ViewChild,
1026
1145
  args: [NumericTextBoxComponent, { static: true }]
1027
1146
  }] } });
@@ -1074,9 +1193,9 @@ class PagerInfoComponent extends PagerElementComponent {
1074
1193
  this.cd.markForCheck();
1075
1194
  }
1076
1195
  }
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: [{
1196
+ 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 });
1197
+ 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 });
1198
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PagerInfoComponent, decorators: [{
1080
1199
  type: Component,
1081
1200
  args: [{
1082
1201
  changeDetection: ChangeDetectionStrategy.OnPush,
@@ -1100,11 +1219,6 @@ const RESPONSIVE_BREAKPOINT_MEDIUM = 600;
1100
1219
  */
1101
1220
  const RESPONSIVE_BREAKPOINT_LARGE = 768;
1102
1221
 
1103
- /**
1104
- * @hidden
1105
- */
1106
- const DEFAULT_PAGE_SIZE_VALUES = [5, 10, 20];
1107
-
1108
1222
  /**
1109
1223
  * @hidden
1110
1224
  */
@@ -1112,16 +1226,19 @@ const packageMetadata = {
1112
1226
  name: '@progress/kendo-angular-pager',
1113
1227
  productName: 'Kendo UI for Angular',
1114
1228
  productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],
1115
- publishDate: 1668698798,
1229
+ publishDate: 1669192614,
1116
1230
  version: '',
1117
1231
  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
1232
  };
1119
1233
 
1120
1234
  class PagerComponent {
1121
- constructor(pagerContext, element, localization) {
1235
+ constructor(pagerContext, element, localization, renderer, ngZone, navigationService) {
1122
1236
  this.pagerContext = pagerContext;
1123
1237
  this.element = element;
1124
1238
  this.localization = localization;
1239
+ this.renderer = renderer;
1240
+ this.ngZone = ngZone;
1241
+ this.navigationService = navigationService;
1125
1242
  /**
1126
1243
  * Represents the total number of data items in the collection.
1127
1244
  */
@@ -1158,10 +1275,15 @@ class PagerComponent {
1158
1275
  */
1159
1276
  this.pageSizeChange = new EventEmitter();
1160
1277
  this.pagerClass = true;
1161
- this.widgetRole = 'navigation';
1278
+ this.widgetRole = 'application';
1279
+ this.roleDescription = 'pager';
1280
+ this.keyShortcuts = 'Enter ArrowRight ArrowLeft';
1281
+ this.hostTabindex = '0';
1162
1282
  this.subscriptions = new Subscription();
1163
1283
  this._templateContext = {};
1164
1284
  this._pageSizeValues = DEFAULT_PAGE_SIZE_VALUES;
1285
+ this.isInnerNavigationEnabled = false;
1286
+ this._navigable = false;
1165
1287
  this.resizeHandler = () => {
1166
1288
  if (this.template) {
1167
1289
  return;
@@ -1193,9 +1315,30 @@ class PagerComponent {
1193
1315
  set pageSizeValues(pageSizeValues) {
1194
1316
  this._pageSizeValues = Array.isArray(pageSizeValues) ? pageSizeValues : pageSizeValues ? DEFAULT_PAGE_SIZE_VALUES : false;
1195
1317
  }
1318
+ /**
1319
+ * If set to `true`, the user can use dedicated shortcuts to interact with the Pager ([see example]({% slug keyboard_navigation_pager %})).
1320
+ * By default, navigation is disabled and the Pager content is accessible in the normal tab sequence.
1321
+ * @default false
1322
+ */
1323
+ set navigable(value) {
1324
+ this._navigable = value;
1325
+ this.navigationService.isNavigable = value;
1326
+ }
1327
+ ;
1328
+ get navigable() {
1329
+ return this._navigable;
1330
+ }
1331
+ ;
1196
1332
  get dir() {
1197
1333
  return this.direction;
1198
1334
  }
1335
+ /**
1336
+ * @hidden
1337
+ */
1338
+ focusHandler(ev) {
1339
+ const isInnerNavigationEnabled = ev.target !== this.element.nativeElement;
1340
+ this.navigationService.toggleInnerNavigation(isInnerNavigationEnabled);
1341
+ }
1199
1342
  get totalPages() {
1200
1343
  return Math.ceil((this.total || 0) / this.pageSize);
1201
1344
  }
@@ -1221,9 +1364,17 @@ class PagerComponent {
1221
1364
  this.subscriptions.add(this.localization.changes.subscribe(({ rtl }) => {
1222
1365
  this.direction = rtl ? 'rtl' : 'ltr';
1223
1366
  }));
1367
+ this.subscriptions.add(this.navigationService.innerNavigationChange.subscribe(this.innerNavigationChange.bind(this)));
1368
+ if (this.navigable) {
1369
+ const wrapper = this.element.nativeElement;
1370
+ this.ngZone.runOutsideAngular(() => {
1371
+ this.subscriptions.add(this.renderer.listen(wrapper, 'keydown', this.keyDownHandler.bind(this)));
1372
+ });
1373
+ }
1224
1374
  }
1225
1375
  ngAfterViewInit() {
1226
1376
  this.resizeHandler();
1377
+ this.renderer.setAttribute(this.element.nativeElement, 'aria-label', this.ariaLabel);
1227
1378
  }
1228
1379
  ngOnChanges(changes) {
1229
1380
  if (anyChanged(["pageSize", "skip", "total"], changes, false)) {
@@ -1232,6 +1383,7 @@ class PagerComponent {
1232
1383
  skip: this.skip,
1233
1384
  total: this.total
1234
1385
  });
1386
+ this.renderer.setAttribute(this.element.nativeElement, 'aria-label', this.ariaLabel);
1235
1387
  }
1236
1388
  }
1237
1389
  ngOnDestroy() {
@@ -1266,11 +1418,68 @@ class PagerComponent {
1266
1418
  this.pageChange.emit({ skip: this.skip, take: event.newPageSize });
1267
1419
  }
1268
1420
  }
1421
+ textFor(value) {
1422
+ return this.localization.get(value);
1423
+ }
1424
+ get ariaLabel() {
1425
+ return `${this.textFor('page')} ${this.currentPage} ${this.textFor('of')} ${this.totalPages}`;
1426
+ }
1427
+ keyDownHandler(e) {
1428
+ const target = e.target;
1429
+ const wrapper = this.element.nativeElement;
1430
+ const isArrowLeftOrPageUp = e.keyCode === Keys.ArrowLeft || e.keyCode === Keys.PageUp;
1431
+ const isArrowRightOrPageDown = e.keyCode === Keys.ArrowRight || e.keyCode === Keys.PageDown;
1432
+ const isEnter = e.keyCode === Keys.Enter;
1433
+ const isHome = e.keyCode === Keys.Home;
1434
+ const isEnd = e.keyCode === Keys.End;
1435
+ const isEsc = e.keyCode === Keys.Escape;
1436
+ const isTab = e.keyCode === Keys.Tab;
1437
+ const isFirstPage = this.currentPage === 1;
1438
+ const isLastPage = this.currentPage === this.totalPages;
1439
+ this.ngZone.run(() => {
1440
+ if (isHome && !isFirstPage) {
1441
+ this.pagerContext.changePage(0);
1442
+ }
1443
+ else if (isEnd && !isLastPage) {
1444
+ this.pagerContext.changePage(this.totalPages - 1);
1445
+ }
1446
+ else if (this.isInnerNavigationEnabled) {
1447
+ if (isEsc) {
1448
+ this.navigationService.toggleInnerNavigation(false);
1449
+ wrapper.focus();
1450
+ }
1451
+ else if (isTab) {
1452
+ this.navigationService.keepFocusWithinComponent(wrapper, target, e);
1453
+ }
1454
+ }
1455
+ else {
1456
+ if (isArrowLeftOrPageUp && !isFirstPage) {
1457
+ this.pagerContext.prevPage();
1458
+ }
1459
+ else if (isArrowRightOrPageDown && !isLastPage) {
1460
+ this.pagerContext.nextPage();
1461
+ }
1462
+ else if (isEnter) {
1463
+ if (e.target !== wrapper) {
1464
+ return;
1465
+ }
1466
+ e.preventDefault();
1467
+ const [firstFocusable] = this.navigationService.getFirstAndLastFocusable(wrapper);
1468
+ this.navigationService.toggleInnerNavigation(true);
1469
+ firstFocusable === null || firstFocusable === void 0 ? void 0 : firstFocusable.focus();
1470
+ }
1471
+ }
1472
+ });
1473
+ }
1474
+ innerNavigationChange(value) {
1475
+ this.isInnerNavigationEnabled = value;
1476
+ }
1269
1477
  }
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: [
1478
+ 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 });
1479
+ 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
1480
  LocalizationService,
1273
- PagerContextService
1481
+ PagerContextService,
1482
+ PagerNavigationService
1274
1483
  ], 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
1484
  <ng-container kendoDataPagerLocalizedMessages
1276
1485
  i18n-firstPage="kendo.pager.firstPage|The label for the first page button in the Pager"
@@ -1302,6 +1511,9 @@ PagerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version
1302
1511
 
1303
1512
  i18n-selectPage="kendo.pager.selectPage|The text of the title and aria-label attributes applied to the page chooser in the Pager"
1304
1513
  selectPage="Select page"
1514
+
1515
+ i18n-inputLabel="kendo.pager.inputLabel|The text of the aria-label attribute applied to the input element for entering the page number."
1516
+ inputLabel="Type a page number"
1305
1517
  >
1306
1518
  </ng-container>
1307
1519
  <ng-container
@@ -1321,15 +1533,16 @@ PagerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version
1321
1533
  <kendo-datapager-page-sizes *ngIf="pageSizeValues" [pageSizes]="pageSizeValues"></kendo-datapager-page-sizes>
1322
1534
  </ng-container>
1323
1535
  <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: [{
1536
+ `, 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"] }] });
1537
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PagerComponent, decorators: [{
1326
1538
  type: Component,
1327
1539
  args: [{
1328
1540
  selector: 'kendo-datapager',
1329
1541
  exportAs: 'kendoDataPager',
1330
1542
  providers: [
1331
1543
  LocalizationService,
1332
- PagerContextService
1544
+ PagerContextService,
1545
+ PagerNavigationService
1333
1546
  ],
1334
1547
  template: `
1335
1548
  <ng-container kendoDataPagerLocalizedMessages
@@ -1362,6 +1575,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
1362
1575
 
1363
1576
  i18n-selectPage="kendo.pager.selectPage|The text of the title and aria-label attributes applied to the page chooser in the Pager"
1364
1577
  selectPage="Select page"
1578
+
1579
+ i18n-inputLabel="kendo.pager.inputLabel|The text of the aria-label attribute applied to the input element for entering the page number."
1580
+ inputLabel="Type a page number"
1365
1581
  >
1366
1582
  </ng-container>
1367
1583
  <ng-container
@@ -1383,7 +1599,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
1383
1599
  <kendo-resize-sensor></kendo-resize-sensor>
1384
1600
  `
1385
1601
  }]
1386
- }], ctorParameters: function () { return [{ type: PagerContextService }, { type: i0.ElementRef }, { type: i1.LocalizationService }]; }, propDecorators: { resizeSensor: [{
1602
+ }], ctorParameters: function () { return [{ type: PagerContextService }, { type: i0.ElementRef }, { type: i1.LocalizationService }, { type: i0.Renderer2 }, { type: i0.NgZone }, { type: PagerNavigationService }]; }, propDecorators: { resizeSensor: [{
1387
1603
  type: ViewChild,
1388
1604
  args: [ResizeSensorComponent, { static: true }]
1389
1605
  }], template: [{
@@ -1405,6 +1621,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
1405
1621
  type: Input
1406
1622
  }], previousNext: [{
1407
1623
  type: Input
1624
+ }], navigable: [{
1625
+ type: Input
1408
1626
  }], pageChange: [{
1409
1627
  type: Output
1410
1628
  }], pageSizeChange: [{
@@ -1415,9 +1633,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
1415
1633
  }], widgetRole: [{
1416
1634
  type: HostBinding,
1417
1635
  args: ['attr.role']
1636
+ }], roleDescription: [{
1637
+ type: HostBinding,
1638
+ args: ['attr.aria-roledescription']
1639
+ }], keyShortcuts: [{
1640
+ type: HostBinding,
1641
+ args: ['attr.aria-keyshortcuts']
1642
+ }], hostTabindex: [{
1643
+ type: HostBinding,
1644
+ args: ['attr.tabindex']
1418
1645
  }], dir: [{
1419
1646
  type: HostBinding,
1420
1647
  args: ['attr.dir']
1648
+ }], focusHandler: [{
1649
+ type: HostListener,
1650
+ args: ['focusin', ['$event']]
1421
1651
  }] } });
1422
1652
 
1423
1653
  const importedModules = [
@@ -1437,7 +1667,8 @@ const INTERNAL_COMPONENTS = [
1437
1667
  PagerPageSizesComponent,
1438
1668
  PagerTemplateDirective,
1439
1669
  LocalizedMessagesDirective,
1440
- CustomMessagesComponent
1670
+ CustomMessagesComponent,
1671
+ PagerFocusableDirective
1441
1672
  ];
1442
1673
  const providers = [
1443
1674
  {
@@ -1462,8 +1693,8 @@ class PagerModule {
1462
1693
  ];
1463
1694
  }
1464
1695
  }
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,
1696
+ PagerModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PagerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1697
+ PagerModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PagerModule, declarations: [PagerComponent,
1467
1698
  PagerPrevButtonsComponent,
1468
1699
  PagerNextButtonsComponent,
1469
1700
  PagerNumericButtonsComponent,
@@ -1472,7 +1703,8 @@ PagerModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "1
1472
1703
  PagerPageSizesComponent,
1473
1704
  PagerTemplateDirective,
1474
1705
  LocalizedMessagesDirective,
1475
- CustomMessagesComponent], imports: [CommonModule,
1706
+ CustomMessagesComponent,
1707
+ PagerFocusableDirective], imports: [CommonModule,
1476
1708
  NumericTextBoxModule,
1477
1709
  DropDownListModule,
1478
1710
  EventsModule,
@@ -1485,9 +1717,10 @@ PagerModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "1
1485
1717
  PagerPageSizesComponent,
1486
1718
  PagerTemplateDirective,
1487
1719
  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: [{
1720
+ CustomMessagesComponent,
1721
+ PagerFocusableDirective] });
1722
+ PagerModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PagerModule, providers: [providers], imports: [[...importedModules]] });
1723
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PagerModule, decorators: [{
1491
1724
  type: NgModule,
1492
1725
  args: [{
1493
1726
  declarations: [INTERNAL_COMPONENTS],
@@ -1501,5 +1734,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
1501
1734
  * Generated bundle index. Do not edit.
1502
1735
  */
1503
1736
 
1504
- export { CustomMessagesComponent, LocalizedMessagesDirective, PageSizeChangeEvent, PagerComponent, PagerInfoComponent, PagerInputComponent, PagerModule, PagerNextButtonsComponent, PagerNumericButtonsComponent, PagerPageSizesComponent, PagerPrevButtonsComponent, PagerTemplateDirective };
1737
+ export { CustomMessagesComponent, LocalizedMessagesDirective, PageSizeChangeEvent, PagerComponent, PagerFocusableDirective, PagerInfoComponent, PagerInputComponent, PagerModule, PagerNextButtonsComponent, PagerNumericButtonsComponent, PagerPageSizesComponent, PagerPrevButtonsComponent, PagerTemplateDirective };
1505
1738