@progress/kendo-angular-pager 17.0.0-develop.34 → 17.0.0-develop.35

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/directives.d.ts +2 -1
  2. package/esm2022/directives.mjs +3 -1
  3. package/esm2022/index.mjs +3 -0
  4. package/esm2022/package-metadata.mjs +2 -2
  5. package/esm2022/pager/focusable.directive.mjs +4 -1
  6. package/esm2022/pager/localization/custom-messages.component.mjs +2 -2
  7. package/esm2022/pager/localization/localized-messages.directive.mjs +2 -2
  8. package/esm2022/pager/localization/messages.mjs +15 -2
  9. package/esm2022/pager/navigation.service.mjs +8 -4
  10. package/esm2022/pager/pager-context.service.mjs +2 -1
  11. package/esm2022/pager/pager-element.component.mjs +2 -1
  12. package/esm2022/pager/pager-info.component.mjs +5 -9
  13. package/esm2022/pager/pager-input.component.mjs +2 -2
  14. package/esm2022/pager/pager-next-buttons.component.mjs +10 -6
  15. package/esm2022/pager/pager-numeric-buttons.component.mjs +4 -6
  16. package/esm2022/pager/pager-page-sizes.component.mjs +6 -6
  17. package/esm2022/pager/pager-prev-buttons.component.mjs +18 -10
  18. package/esm2022/pager/pager-template.directive.mjs +10 -10
  19. package/esm2022/pager/pager.component.mjs +126 -79
  20. package/esm2022/pager/pager.module.mjs +2 -1
  21. package/esm2022/pager/spacer.component.mjs +49 -0
  22. package/esm2022/util.mjs +11 -7
  23. package/fesm2022/progress-kendo-angular-pager.mjs +274 -152
  24. package/index.d.ts +3 -0
  25. package/package.json +7 -7
  26. package/pager/common/pager-type.d.ts +2 -2
  27. package/pager/focusable.directive.d.ts +1 -1
  28. package/pager/localization/custom-messages.component.d.ts +1 -1
  29. package/pager/localization/localized-messages.directive.d.ts +1 -1
  30. package/pager/localization/messages.d.ts +12 -1
  31. package/pager/pager-context.service.d.ts +2 -0
  32. package/pager/pager-info.component.d.ts +2 -3
  33. package/pager/pager-input.component.d.ts +1 -1
  34. package/pager/pager-next-buttons.component.d.ts +1 -1
  35. package/pager/pager-numeric-buttons.component.d.ts +1 -1
  36. package/pager/pager-page-sizes.component.d.ts +5 -5
  37. package/pager/pager-prev-buttons.component.d.ts +1 -1
  38. package/pager/pager-template.directive.d.ts +9 -9
  39. package/pager/pager.component.d.ts +30 -11
  40. package/pager/pager.module.d.ts +2 -1
  41. package/pager/spacer.component.d.ts +24 -0
  42. package/schematics/ngAdd/index.js +6 -6
  43. package/util.d.ts +4 -0
@@ -2,12 +2,12 @@
2
2
  * Copyright © 2024 Progress Software Corporation. All rights reserved.
3
3
  * Licensed under commercial license. See LICENSE.md in the project root for more information
4
4
  *-------------------------------------------------------------------------------------------*/
5
- import { Component, Input, EventEmitter, Output, HostBinding, ViewChild, ElementRef, Renderer2, NgZone, HostListener, ContentChildren, QueryList } from '@angular/core';
5
+ import { Component, Input, EventEmitter, Output, HostBinding, ElementRef, Renderer2, NgZone, HostListener, ContentChildren, QueryList, Optional, SkipSelf, inject } from '@angular/core';
6
6
  import { PagerTemplateDirective } from "./pager-template.directive";
7
7
  import { anyChanged, Keys, ResizeSensorComponent } from "@progress/kendo-angular-common";
8
8
  import { PagerContextService } from "./pager-context.service";
9
9
  import { Subscription } from "rxjs";
10
- import { DEFAULT_PAGE_SIZE_VALUES, getStylingClasses, DEFAULT_SIZE } from '../util';
10
+ import { DEFAULT_PAGE_SIZE_VALUES, getStylingClasses, DEFAULT_SIZE, replaceMessagePlaceholder } from '../util';
11
11
  import { L10N_PREFIX, LocalizationService } from '@progress/kendo-angular-l10n';
12
12
  import { validatePackage } from '@progress/kendo-licensing';
13
13
  import { packageMetadata } from '../package-metadata';
@@ -32,17 +32,21 @@ export class PagerComponent {
32
32
  renderer;
33
33
  ngZone;
34
34
  navigationService;
35
- resizeSensor;
36
- pagerInfo;
37
- pagerPageSizes;
38
- numericButtons;
39
35
  template;
36
+ /**
37
+ * @hidden
38
+ */
39
+ externalTemplate;
40
40
  /**
41
41
  * Represents the total number of data items in the collection.
42
+ *
43
+ * @default 0
42
44
  */
43
45
  total = 0;
44
46
  /**
45
47
  * Defines the number of data items to be skipped.
48
+ *
49
+ * @default 0
46
50
  */
47
51
  skip = 0;
48
52
  /**
@@ -51,14 +55,20 @@ export class PagerComponent {
51
55
  pageSize;
52
56
  /**
53
57
  * Sets the maximum numeric buttons count before the buttons are collapsed.
58
+ *
59
+ * @default 10
54
60
  */
55
61
  buttonCount = 10;
56
62
  /**
57
63
  * Toggles the information about the current page and the total number of records.
64
+ *
65
+ * @default true
58
66
  */
59
67
  info = true;
60
68
  /**
61
69
  * Defines the type of the pager.
70
+ *
71
+ * @default 'numeric'
62
72
  */
63
73
  type = 'numeric';
64
74
  /**
@@ -75,6 +85,8 @@ export class PagerComponent {
75
85
  }
76
86
  /**
77
87
  * Toggles the **Previous** and **Next** buttons.
88
+ *
89
+ * @default true
78
90
  */
79
91
  previousNext = true;
80
92
  /**
@@ -106,6 +118,13 @@ export class PagerComponent {
106
118
  get size() {
107
119
  return this._size;
108
120
  }
121
+ /**
122
+ * @hidden
123
+ * Toggles the Pager responsive functionality.
124
+ *
125
+ * @default true
126
+ */
127
+ responsive = true;
109
128
  /**
110
129
  * Fires when the current page of the Pager is changed ([see example](slug:overview_pager)).
111
130
  * You have to handle the event yourself and page the data.
@@ -121,7 +140,9 @@ export class PagerComponent {
121
140
  widgetRole = 'application';
122
141
  roleDescription = 'pager';
123
142
  keyShortcuts = 'Enter ArrowRight ArrowLeft';
124
- hostTabindex = '0';
143
+ get hostTabindex() {
144
+ return this.navigable ? '0' : '-1';
145
+ }
125
146
  get dir() {
126
147
  return this.direction;
127
148
  }
@@ -163,11 +184,17 @@ export class PagerComponent {
163
184
  this.navigationService = navigationService;
164
185
  validatePackage(packageMetadata);
165
186
  this.direction = localization.rtl ? 'rtl' : 'ltr';
187
+ if (!navigationService) {
188
+ this.navigationService = inject(PagerNavigationService);
189
+ }
190
+ if (!pagerContext) {
191
+ this.pagerContext = inject(PagerContextService);
192
+ }
193
+ this.pagerContext.localization = localization;
166
194
  }
167
195
  ngOnInit() {
168
196
  this.subscriptions.add(this.pagerContext.pageChange.subscribe(this.changePage.bind(this)));
169
197
  this.subscriptions.add(this.pagerContext.pageSizeChange.subscribe(this.changePageSize.bind(this)));
170
- this.subscriptions.add(this.resizeSensor.resize.subscribe(() => this.resizeHandler()));
171
198
  this.subscriptions.add(this.localization.changes.subscribe(({ rtl }) => {
172
199
  this.direction = rtl ? 'rtl' : 'ltr';
173
200
  }));
@@ -180,10 +207,10 @@ export class PagerComponent {
180
207
  }
181
208
  }
182
209
  ngAfterViewInit() {
183
- this.resizeHandler();
210
+ this.responsive && this.resizeHandler();
184
211
  this.renderer.setAttribute(this.element.nativeElement, 'aria-label', this.ariaLabel);
185
212
  this.subscriptions.add(this.template.changes.subscribe(() => {
186
- this.resizeHandler();
213
+ this.responsive && this.resizeHandler();
187
214
  }));
188
215
  this.handleClasses(this.size, 'size');
189
216
  }
@@ -196,6 +223,9 @@ export class PagerComponent {
196
223
  });
197
224
  this.renderer.setAttribute(this.element.nativeElement, 'aria-label', this.ariaLabel);
198
225
  }
226
+ if (changes['responsive']) {
227
+ this.responsive && this.resizeHandler();
228
+ }
199
229
  }
200
230
  ngOnDestroy() {
201
231
  this.subscriptions.unsubscribe();
@@ -229,48 +259,53 @@ export class PagerComponent {
229
259
  this.pageChange.emit({ skip: this.skip, take: event.newPageSize });
230
260
  }
231
261
  }
262
+ /**
263
+ * @hidden
264
+ */
232
265
  resizeHandler = () => {
233
- if (this.template?.first) {
266
+ if (this.template?.first && !this.responsive) {
234
267
  return;
235
268
  }
236
269
  const width = this.element.nativeElement.offsetWidth;
237
270
  this.ngZone.runOutsideAngular(() => {
238
271
  setTimeout(() => {
239
- if (this.numericButtons) {
240
- const selectElement = this.numericButtons.selectElement.nativeElement;
241
- const numbersElement = this.numericButtons.numbersElement.nativeElement;
242
- this.renderer.removeStyle(numbersElement, 'display');
243
- this.renderer.setStyle(selectElement, 'display', 'none');
244
- this.renderer.addClass(selectElement, 'k-hidden');
272
+ const numericButtonsElement = this.element.nativeElement.querySelector('kendo-datapager-numeric-buttons, kendo-pager-numeric-buttons');
273
+ const pagerInfoElement = this.element.nativeElement.querySelector('.k-pager-info');
274
+ const pagerPageSizes = this.element.nativeElement.querySelector('.k-pager-sizes');
275
+ if (numericButtonsElement) {
276
+ const selectElement = numericButtonsElement.querySelector('select');
277
+ const numbersElement = numericButtonsElement.querySelector('.k-pager-numbers');
245
278
  if (width < RESPONSIVE_BREAKPOINT_MEDIUM) {
246
- this.renderer.removeStyle(selectElement, 'display');
247
279
  this.renderer.removeClass(selectElement, 'k-hidden');
248
- this.renderer.setStyle(numbersElement, 'display', 'none');
280
+ this.renderer.addClass(numbersElement, 'k-hidden');
249
281
  }
250
282
  else {
251
283
  this.renderer.addClass(selectElement, 'k-hidden');
284
+ this.renderer.removeClass(numbersElement, 'k-hidden');
252
285
  }
253
286
  }
254
- if (this.pagerInfo) {
255
- this.renderer.removeStyle(this.pagerInfo.nativeElement, 'display');
287
+ if (pagerInfoElement) {
256
288
  if (width < RESPONSIVE_BREAKPOINT_LARGE) {
257
- this.renderer.setStyle(this.pagerInfo.nativeElement, 'display', 'none');
289
+ this.renderer.addClass(pagerInfoElement, 'k-hidden');
290
+ }
291
+ else {
292
+ this.renderer.removeClass(pagerInfoElement, 'k-hidden');
258
293
  }
259
294
  }
260
- if (this.pagerPageSizes) {
261
- this.renderer.removeStyle(this.pagerPageSizes.nativeElement, 'display');
295
+ if (pagerPageSizes) {
262
296
  if (width < RESPONSIVE_BREAKPOINT_MEDIUM) {
263
- this.renderer.setStyle(this.pagerPageSizes.nativeElement, 'display', 'none');
297
+ this.renderer.addClass(pagerPageSizes, 'k-hidden');
298
+ }
299
+ else {
300
+ this.renderer.removeClass(pagerPageSizes, 'k-hidden');
264
301
  }
265
302
  }
266
303
  });
267
304
  });
268
305
  };
269
- textFor(value) {
270
- return this.localization.get(value);
271
- }
272
306
  get ariaLabel() {
273
- return `${this.textFor('page')} ${this.currentPage} ${this.textFor('of')} ${this.totalPages}`;
307
+ const localizationMsg = this.localization.get('ariaLabel') || '';
308
+ return replaceMessagePlaceholder(replaceMessagePlaceholder(localizationMsg, 'currentPage', this.currentPage.toString()), 'totalPages', this.totalPages.toString());
274
309
  }
275
310
  keyDownHandler(e) {
276
311
  const target = e.target;
@@ -286,11 +321,17 @@ export class PagerComponent {
286
321
  const isLastPage = this.currentPage === this.totalPages;
287
322
  this.ngZone.run(() => {
288
323
  if (isHome) {
324
+ if (e.target !== wrapper) {
325
+ return;
326
+ }
289
327
  e.preventDefault();
290
328
  !isFirstPage && this.pagerContext.changePage(0);
291
329
  }
292
330
  else if (isEnd) {
293
331
  e.preventDefault();
332
+ if (e.target !== wrapper) {
333
+ return;
334
+ }
294
335
  !isLastPage && this.pagerContext.changePage(this.totalPages - 1);
295
336
  }
296
337
  else if (this.isInnerNavigationEnabled) {
@@ -303,6 +344,9 @@ export class PagerComponent {
303
344
  }
304
345
  }
305
346
  else {
347
+ if (e.target !== wrapper) {
348
+ return;
349
+ }
306
350
  if (isArrowLeftOrPageUp) {
307
351
  e.preventDefault();
308
352
  !isFirstPage && this.pagerContext.prevPage();
@@ -312,9 +356,6 @@ export class PagerComponent {
312
356
  !isLastPage && this.pagerContext.nextPage();
313
357
  }
314
358
  else if (isEnter) {
315
- if (e.target !== wrapper) {
316
- return;
317
- }
318
359
  e.preventDefault();
319
360
  const [firstFocusable] = this.navigationService.getFirstAndLastFocusable(wrapper);
320
361
  this.navigationService.toggleInnerNavigation(true);
@@ -336,8 +377,8 @@ export class PagerComponent {
336
377
  this.renderer.addClass(elem, classes.toAdd);
337
378
  }
338
379
  }
339
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PagerComponent, deps: [{ token: i1.PagerContextService }, { token: i0.ElementRef }, { token: i2.LocalizationService }, { token: i0.Renderer2 }, { token: i0.NgZone }, { token: i3.PagerNavigationService }], target: i0.ɵɵFactoryTarget.Component });
340
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: PagerComponent, isStandalone: true, selector: "kendo-datapager", inputs: { total: "total", skip: "skip", pageSize: "pageSize", buttonCount: "buttonCount", info: "info", type: "type", pageSizeValues: "pageSizeValues", previousNext: "previousNext", navigable: "navigable", size: "size" }, 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: [
380
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PagerComponent, deps: [{ token: i1.PagerContextService, optional: true, skipSelf: true }, { token: i0.ElementRef }, { token: i2.LocalizationService }, { token: i0.Renderer2 }, { token: i0.NgZone }, { token: i3.PagerNavigationService, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Component });
381
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: PagerComponent, isStandalone: true, selector: "kendo-datapager, kendo-pager", inputs: { externalTemplate: "externalTemplate", total: "total", skip: "skip", pageSize: "pageSize", buttonCount: "buttonCount", info: "info", type: "type", pageSizeValues: "pageSizeValues", previousNext: "previousNext", navigable: "navigable", size: "size", responsive: "responsive" }, 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: [
341
382
  LocalizationService,
342
383
  PagerContextService,
343
384
  PagerNavigationService,
@@ -345,8 +386,11 @@ export class PagerComponent {
345
386
  provide: L10N_PREFIX,
346
387
  useValue: 'kendo.pager'
347
388
  }
348
- ], queries: [{ propertyName: "template", predicate: PagerTemplateDirective }], viewQueries: [{ propertyName: "resizeSensor", first: true, predicate: ResizeSensorComponent, descendants: true, static: true }, { propertyName: "pagerInfo", first: true, predicate: PagerInfoComponent, descendants: true, read: ElementRef }, { propertyName: "pagerPageSizes", first: true, predicate: PagerPageSizesComponent, descendants: true, read: ElementRef }, { propertyName: "numericButtons", first: true, predicate: PagerNumericButtonsComponent, descendants: true }], exportAs: ["kendoDataPager"], usesOnChanges: true, ngImport: i0, template: `
349
- <ng-container kendoDataPagerLocalizedMessages
389
+ ], queries: [{ propertyName: "template", predicate: PagerTemplateDirective }], exportAs: ["kendoDataPager", "kendoPager"], usesOnChanges: true, ngImport: i0, template: `
390
+ <ng-container kendoPagerLocalizedMessages
391
+ i18n-ariaLabel="kendo.pager.ariaLabel|The value of the aria-label attribute of the Pager"
392
+ ariaLabel="{{ 'Page navigation, page {currentPage} of {totalPages}' }}"
393
+
350
394
  i18n-firstPage="kendo.pager.firstPage|The label for the first page button in the Pager"
351
395
  firstPage="Go to the first page"
352
396
 
@@ -382,36 +426,36 @@ export class PagerComponent {
382
426
  >
383
427
  </ng-container>
384
428
  <ng-container
385
- *ngIf="template.first?.templateRef"
429
+ *ngIf="template.first?.templateRef; else default"
386
430
  [ngTemplateOutlet]="template.first?.templateRef"
387
431
  [ngTemplateOutletContext]="templateContext">
388
432
  </ng-container>
389
- <ng-container *ngIf="!template?.first?.templateRef">
433
+ <ng-template #default>
390
434
  <div class="k-pager-numbers-wrap">
391
- <kendo-datapager-prev-buttons [size]="size" *ngIf="previousNext"></kendo-datapager-prev-buttons>
392
- <kendo-datapager-numeric-buttons
435
+ <kendo-pager-prev-buttons [size]="size" *ngIf="previousNext"></kendo-pager-prev-buttons>
436
+ <kendo-pager-numeric-buttons
393
437
  [size]="size"
394
438
  *ngIf="type === 'numeric' && buttonCount > 0"
395
439
  [buttonCount]="buttonCount">
396
- </kendo-datapager-numeric-buttons>
397
- <kendo-datapager-input [size]="size" *ngIf="type === 'input'"></kendo-datapager-input>
398
- <kendo-datapager-next-buttons [size]="size" *ngIf="previousNext"></kendo-datapager-next-buttons>
440
+ </kendo-pager-numeric-buttons>
441
+ <kendo-pager-input [size]="size" *ngIf="type === 'input'"></kendo-pager-input>
442
+ <kendo-pager-next-buttons [size]="size" *ngIf="previousNext"></kendo-pager-next-buttons>
399
443
  </div>
400
- <kendo-datapager-page-sizes *ngIf="pageSizeValues"
444
+ <kendo-pager-page-sizes *ngIf="pageSizeValues"
401
445
  [size]="size"
402
446
  [pageSizes]="pageSizeValues">
403
- </kendo-datapager-page-sizes>
404
- <kendo-datapager-info *ngIf='info'>
405
- </kendo-datapager-info>
406
- </ng-container>
407
- <kendo-resize-sensor></kendo-resize-sensor>
408
- `, isInline: true, dependencies: [{ kind: "directive", type: LocalizedMessagesDirective, selector: "[kendoDataPagerLocalizedMessages]" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: PagerPrevButtonsComponent, selector: "kendo-datapager-prev-buttons", inputs: ["size"] }, { kind: "component", type: PagerNumericButtonsComponent, selector: "kendo-datapager-numeric-buttons", inputs: ["buttonCount", "size"] }, { kind: "component", type: PagerInputComponent, selector: "kendo-datapager-input", inputs: ["size"] }, { kind: "component", type: PagerNextButtonsComponent, selector: "kendo-datapager-next-buttons", inputs: ["size"] }, { kind: "component", type: PagerPageSizesComponent, selector: "kendo-datapager-page-sizes", inputs: ["pageSizes", "size"] }, { kind: "component", type: PagerInfoComponent, selector: "kendo-datapager-info" }, { kind: "component", type: ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }] });
447
+ </kendo-pager-page-sizes>
448
+ <kendo-pager-info *ngIf="info">
449
+ </kendo-pager-info>
450
+ </ng-template>
451
+ <kendo-resize-sensor *ngIf="responsive" (resize)="resizeHandler()"></kendo-resize-sensor>
452
+ `, isInline: true, dependencies: [{ kind: "directive", type: LocalizedMessagesDirective, selector: "[kendoPagerLocalizedMessages]" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: PagerPrevButtonsComponent, selector: "kendo-datapager-prev-buttons, kendo-pager-prev-buttons", inputs: ["size"] }, { kind: "component", type: PagerNumericButtonsComponent, selector: "kendo-datapager-numeric-buttons, kendo-pager-numeric-buttons", inputs: ["buttonCount", "size"] }, { kind: "component", type: PagerInputComponent, selector: "kendo-datapager-input, kendo-pager-input", inputs: ["size"] }, { kind: "component", type: PagerNextButtonsComponent, selector: "kendo-datapager-next-buttons, kendo-pager-next-buttons", inputs: ["size"] }, { kind: "component", type: PagerPageSizesComponent, selector: "kendo-datapager-page-sizes, kendo-pager-page-sizes", inputs: ["pageSizes", "size"] }, { kind: "component", type: PagerInfoComponent, selector: "kendo-datapager-info, kendo-pager-info" }, { kind: "component", type: ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }] });
409
453
  }
410
454
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PagerComponent, decorators: [{
411
455
  type: Component,
412
456
  args: [{
413
- selector: 'kendo-datapager',
414
- exportAs: 'kendoDataPager',
457
+ selector: 'kendo-datapager, kendo-pager',
458
+ exportAs: 'kendoDataPager, kendoPager',
415
459
  providers: [
416
460
  LocalizationService,
417
461
  PagerContextService,
@@ -422,7 +466,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
422
466
  }
423
467
  ],
424
468
  template: `
425
- <ng-container kendoDataPagerLocalizedMessages
469
+ <ng-container kendoPagerLocalizedMessages
470
+ i18n-ariaLabel="kendo.pager.ariaLabel|The value of the aria-label attribute of the Pager"
471
+ ariaLabel="{{ 'Page navigation, page {currentPage} of {totalPages}' }}"
472
+
426
473
  i18n-firstPage="kendo.pager.firstPage|The label for the first page button in the Pager"
427
474
  firstPage="Go to the first page"
428
475
 
@@ -458,48 +505,46 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
458
505
  >
459
506
  </ng-container>
460
507
  <ng-container
461
- *ngIf="template.first?.templateRef"
508
+ *ngIf="template.first?.templateRef; else default"
462
509
  [ngTemplateOutlet]="template.first?.templateRef"
463
510
  [ngTemplateOutletContext]="templateContext">
464
511
  </ng-container>
465
- <ng-container *ngIf="!template?.first?.templateRef">
512
+ <ng-template #default>
466
513
  <div class="k-pager-numbers-wrap">
467
- <kendo-datapager-prev-buttons [size]="size" *ngIf="previousNext"></kendo-datapager-prev-buttons>
468
- <kendo-datapager-numeric-buttons
514
+ <kendo-pager-prev-buttons [size]="size" *ngIf="previousNext"></kendo-pager-prev-buttons>
515
+ <kendo-pager-numeric-buttons
469
516
  [size]="size"
470
517
  *ngIf="type === 'numeric' && buttonCount > 0"
471
518
  [buttonCount]="buttonCount">
472
- </kendo-datapager-numeric-buttons>
473
- <kendo-datapager-input [size]="size" *ngIf="type === 'input'"></kendo-datapager-input>
474
- <kendo-datapager-next-buttons [size]="size" *ngIf="previousNext"></kendo-datapager-next-buttons>
519
+ </kendo-pager-numeric-buttons>
520
+ <kendo-pager-input [size]="size" *ngIf="type === 'input'"></kendo-pager-input>
521
+ <kendo-pager-next-buttons [size]="size" *ngIf="previousNext"></kendo-pager-next-buttons>
475
522
  </div>
476
- <kendo-datapager-page-sizes *ngIf="pageSizeValues"
523
+ <kendo-pager-page-sizes *ngIf="pageSizeValues"
477
524
  [size]="size"
478
525
  [pageSizes]="pageSizeValues">
479
- </kendo-datapager-page-sizes>
480
- <kendo-datapager-info *ngIf='info'>
481
- </kendo-datapager-info>
482
- </ng-container>
483
- <kendo-resize-sensor></kendo-resize-sensor>
526
+ </kendo-pager-page-sizes>
527
+ <kendo-pager-info *ngIf="info">
528
+ </kendo-pager-info>
529
+ </ng-template>
530
+ <kendo-resize-sensor *ngIf="responsive" (resize)="resizeHandler()"></kendo-resize-sensor>
484
531
  `,
485
532
  standalone: true,
486
533
  imports: [LocalizedMessagesDirective, NgIf, NgTemplateOutlet, PagerPrevButtonsComponent, PagerNumericButtonsComponent, PagerInputComponent, PagerNextButtonsComponent, PagerPageSizesComponent, PagerInfoComponent, ResizeSensorComponent]
487
534
  }]
488
- }], ctorParameters: function () { return [{ type: i1.PagerContextService }, { type: i0.ElementRef }, { type: i2.LocalizationService }, { type: i0.Renderer2 }, { type: i0.NgZone }, { type: i3.PagerNavigationService }]; }, propDecorators: { resizeSensor: [{
489
- type: ViewChild,
490
- args: [ResizeSensorComponent, { static: true }]
491
- }], pagerInfo: [{
492
- type: ViewChild,
493
- args: [PagerInfoComponent, { read: ElementRef }]
494
- }], pagerPageSizes: [{
495
- type: ViewChild,
496
- args: [PagerPageSizesComponent, { read: ElementRef }]
497
- }], numericButtons: [{
498
- type: ViewChild,
499
- args: [PagerNumericButtonsComponent]
500
- }], template: [{
535
+ }], ctorParameters: function () { return [{ type: i1.PagerContextService, decorators: [{
536
+ type: Optional
537
+ }, {
538
+ type: SkipSelf
539
+ }] }, { type: i0.ElementRef }, { type: i2.LocalizationService }, { type: i0.Renderer2 }, { type: i0.NgZone }, { type: i3.PagerNavigationService, decorators: [{
540
+ type: Optional
541
+ }, {
542
+ type: SkipSelf
543
+ }] }]; }, propDecorators: { template: [{
501
544
  type: ContentChildren,
502
545
  args: [PagerTemplateDirective]
546
+ }], externalTemplate: [{
547
+ type: Input
503
548
  }], total: [{
504
549
  type: Input
505
550
  }], skip: [{
@@ -520,6 +565,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
520
565
  type: Input
521
566
  }], size: [{
522
567
  type: Input
568
+ }], responsive: [{
569
+ type: Input
523
570
  }], pageChange: [{
524
571
  type: Output
525
572
  }], pageSizeChange: [{
@@ -18,13 +18,14 @@ import * as i7 from "./pager-page-sizes.component";
18
18
  import * as i8 from "./pager-prev-buttons.component";
19
19
  import * as i9 from "./pager-template.directive";
20
20
  import * as i10 from "./pager.component";
21
+ import * as i11 from "./spacer.component";
21
22
  // IMPORTANT: NgModule export kept for backwards compatibility
22
23
  /**
23
24
  * @hidden
24
25
  */
25
26
  export class PagerModule {
26
27
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PagerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
27
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: PagerModule, imports: [i1.CustomMessagesComponent, i2.PagerFocusableDirective, i3.PagerInfoComponent, i4.PagerInputComponent, i5.PagerNextButtonsComponent, i6.PagerNumericButtonsComponent, i7.PagerPageSizesComponent, i8.PagerPrevButtonsComponent, i9.PagerTemplateDirective, i10.PagerComponent], exports: [i1.CustomMessagesComponent, i2.PagerFocusableDirective, i3.PagerInfoComponent, i4.PagerInputComponent, i5.PagerNextButtonsComponent, i6.PagerNumericButtonsComponent, i7.PagerPageSizesComponent, i8.PagerPrevButtonsComponent, i9.PagerTemplateDirective, i10.PagerComponent] });
28
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: PagerModule, imports: [i1.CustomMessagesComponent, i2.PagerFocusableDirective, i3.PagerInfoComponent, i4.PagerInputComponent, i5.PagerNextButtonsComponent, i6.PagerNumericButtonsComponent, i7.PagerPageSizesComponent, i8.PagerPrevButtonsComponent, i9.PagerTemplateDirective, i10.PagerComponent, i11.PagerSpacerComponent], exports: [i1.CustomMessagesComponent, i2.PagerFocusableDirective, i3.PagerInfoComponent, i4.PagerInputComponent, i5.PagerNextButtonsComponent, i6.PagerNumericButtonsComponent, i7.PagerPageSizesComponent, i8.PagerPrevButtonsComponent, i9.PagerTemplateDirective, i10.PagerComponent, i11.PagerSpacerComponent] });
28
29
  static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PagerModule, providers: [
29
30
  IconsService,
30
31
  PopupService,
@@ -0,0 +1,49 @@
1
+ /**-----------------------------------------------------------------------------------------
2
+ * Copyright © 2024 Progress Software Corporation. All rights reserved.
3
+ * Licensed under commercial license. See LICENSE.md in the project root for more information
4
+ *-------------------------------------------------------------------------------------------*/
5
+ import { Component, HostBinding, Input } from '@angular/core';
6
+ import { isPresent } from '@progress/kendo-angular-common';
7
+ import * as i0 from "@angular/core";
8
+ /**
9
+ * Represents the Kendo UI PagerSpacer component for Angular.
10
+ * Used to give additional white space between the Pager inner elements,
11
+ * and provides a way for customizing the spacer width.
12
+ */
13
+ export class PagerSpacerComponent {
14
+ hostClass = true;
15
+ get sizedClass() {
16
+ return isPresent(this.width);
17
+ }
18
+ get flexBasisStyle() {
19
+ return this.width;
20
+ }
21
+ /**
22
+ * Specifies the width of the PagerSpacer.
23
+ * Accepts the [string values of the CSS `flex-basis` property](https://developer.mozilla.org/en-US/docs/Web/CSS/flex-basis).
24
+ *
25
+ * If not set, the PagerSpacer will take all the available space.
26
+ */
27
+ width;
28
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PagerSpacerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
29
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: PagerSpacerComponent, isStandalone: true, selector: "kendo-pager-spacer", inputs: { width: "width" }, host: { properties: { "class.k-spacer": "this.hostClass", "class.k-spacer-sized": "this.sizedClass", "style.flexBasis": "this.flexBasisStyle" } }, ngImport: i0, template: ``, isInline: true });
30
+ }
31
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PagerSpacerComponent, decorators: [{
32
+ type: Component,
33
+ args: [{
34
+ selector: 'kendo-pager-spacer',
35
+ template: ``,
36
+ standalone: true
37
+ }]
38
+ }], propDecorators: { hostClass: [{
39
+ type: HostBinding,
40
+ args: ['class.k-spacer']
41
+ }], sizedClass: [{
42
+ type: HostBinding,
43
+ args: ['class.k-spacer-sized']
44
+ }], flexBasisStyle: [{
45
+ type: HostBinding,
46
+ args: ['style.flexBasis']
47
+ }], width: [{
48
+ type: Input
49
+ }] } });
package/esm2022/util.mjs CHANGED
@@ -20,16 +20,16 @@ export const getAllFocusableChildren = (parent) => {
20
20
  * @hidden
21
21
  */
22
22
  export const focusableSelector = [
23
- 'a[href]:not([disabled])',
24
- 'area[href]:not([disabled])',
25
- 'input:not([disabled])',
26
- 'select:not([disabled])',
27
- 'textarea:not([disabled])',
28
- 'button',
23
+ 'a[href]:not([disabled]):not([aria-hidden="true"])',
24
+ 'area[href]:not([disabled]):not([aria-hidden="true"])',
25
+ 'input:not([disabled]):not([aria-hidden="true"])',
26
+ 'select:not([disabled]):not([aria-hidden="true"])',
27
+ 'textarea:not([disabled]):not([aria-hidden="true"])',
28
+ 'button:not([aria-hidden="true"])',
29
29
  'iframe:not([disabled])',
30
30
  'object:not([disabled])',
31
31
  'embed:not([disabled])',
32
- '*[tabindex]:not([disabled])',
32
+ '*[tabindex]:not([disabled]):not([aria-hidden="true"])',
33
33
  '*[contenteditable]:not([disabled]):not([contenteditable="false"])'
34
34
  ].join(',');
35
35
  /**
@@ -57,3 +57,7 @@ export const getStylingClasses = (componentType, stylingOption, previousValue, n
57
57
  break;
58
58
  }
59
59
  };
60
+ /**
61
+ * @hidden
62
+ */
63
+ export const replaceMessagePlaceholder = (message, name, value) => message.replace(new RegExp(`\{\\s*${name}\\s*\}`, 'g'), value);