@progress/kendo-angular-pager 19.0.0-develop.9 → 19.0.1-develop.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -8,12 +8,13 @@ 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 { caretAltLeftIcon, caretAltToLeftIcon, caretAltRightIcon, caretAltToRightIcon } from '@progress/kendo-svg-icons';
11
- import { isFocusable, Keys, EventsOutsideAngularDirective, anyChanged, ResizeSensorComponent, isPresent, ResizeBatchService } from '@progress/kendo-angular-common';
11
+ import { isDocumentAvailable, isFocusable, Keys, EventsOutsideAngularDirective, anyChanged, isChanged, ResizeSensorComponent, isPresent, ResizeBatchService } from '@progress/kendo-angular-common';
12
12
  import { ButtonComponent } from '@progress/kendo-angular-buttons';
13
13
  import { DropDownListComponent } from '@progress/kendo-angular-dropdowns';
14
- import { NgIf, NgFor, NgClass, NgTemplateOutlet } from '@angular/common';
14
+ import { NgIf, NgFor, NgClass, NgTemplateOutlet, NgStyle } from '@angular/common';
15
15
  import { NumericTextBoxComponent } from '@progress/kendo-angular-inputs';
16
16
  import { validatePackage } from '@progress/kendo-licensing';
17
+ import { take } from 'rxjs/operators';
17
18
  import { IconsService } from '@progress/kendo-angular-icons';
18
19
  import { PopupService } from '@progress/kendo-angular-popup';
19
20
 
@@ -425,12 +426,63 @@ const getStylingClasses = (componentType, stylingOption, previousValue, newValue
425
426
  * @hidden
426
427
  */
427
428
  const replaceMessagePlaceholder = (message, name, value) => message.replace(new RegExp(`\{\\s*${name}\\s*\}`, 'g'), value);
429
+ /**
430
+ * @hidden
431
+ */
432
+ const calculatePadding = (element) => {
433
+ if (!element || !isDocumentAvailable()) {
434
+ return { padding: 0, gapNumbersSizes: 0, gapSizesInfo: 0 };
435
+ }
436
+ const computedStyle = window.getComputedStyle(element);
437
+ const paddingLeft = parseInt(computedStyle.paddingLeft, 10) || 0;
438
+ const paddingRight = parseInt(computedStyle.paddingRight, 10) || 0;
439
+ const padding = (paddingLeft + paddingRight) * 1.2; // account for rounding errors
440
+ const style = getComputedStyle(document.documentElement);
441
+ const gapNumbersSizes = 2 * (parseFloat(style.getPropertyValue('--kendo-spacing-3\\.5') || '0.875rem') * (parseFloat(getComputedStyle(document.documentElement).fontSize) || 16)); // convert rem to px
442
+ const gapSizesInfo = gapNumbersSizes;
443
+ return { padding, gapNumbersSizes, gapSizesInfo };
444
+ };
445
+ /**
446
+ * @hidden
447
+ */
448
+ const createMeasurementSpan = (renderer, container, className) => {
449
+ const span = renderer.createElement('span');
450
+ renderer.appendChild(container, span);
451
+ renderer.addClass(span, className);
452
+ return span;
453
+ };
454
+ /**
455
+ * @hidden
456
+ */
457
+ const copyComputedStyles = (renderer, source, destination) => {
458
+ const computedStyle = getComputedStyle(source);
459
+ const importantStyles = [
460
+ 'font-family', 'font-size', 'font-weight', 'font-style',
461
+ 'letter-spacing', 'text-transform', 'white-space', 'word-spacing',
462
+ 'padding-left', 'padding-right', 'margin-left', 'margin-right',
463
+ 'border-left-width', 'border-right-width', 'box-sizing'
464
+ ];
465
+ importantStyles.forEach(style => {
466
+ renderer.setStyle(destination, style, computedStyle.getPropertyValue(style));
467
+ });
468
+ };
469
+ /**
470
+ *
471
+ * @hidden
472
+ */
473
+ const positionOffScreen = (renderer, element) => {
474
+ renderer.setStyle(element, 'position', 'absolute');
475
+ renderer.setStyle(element, 'visibility', 'hidden');
476
+ renderer.setStyle(element, 'left', '-9999px');
477
+ renderer.setStyle(element, 'top', '-9999px');
478
+ renderer.setStyle(element, 'display', 'flex');
479
+ };
428
480
 
429
481
  /**
430
482
  * @hidden
431
483
  */
432
484
  class PagerNavigationService {
433
- isNavigable = false;
485
+ isNavigable = true;
434
486
  innerNavigationChange = new Subject();
435
487
  toggleInnerNavigation(value) {
436
488
  this.innerNavigationChange.next(value);
@@ -639,6 +691,18 @@ class PagerPageSizesComponent extends PagerElementComponent {
639
691
  element;
640
692
  ngZone;
641
693
  dropDownList;
694
+ _showItemsText = true;
695
+ /**
696
+ * Controls the visibility of the page text label.
697
+ * @hidden
698
+ */
699
+ get showItemsText() {
700
+ return this._showItemsText;
701
+ }
702
+ set showItemsText(value) {
703
+ this._showItemsText = value;
704
+ this.cd.markForCheck();
705
+ }
642
706
  /**
643
707
  * The page sizes collection. Can contain numbers and [PageSizeItem]({% slug api_pager_pagesizeitem %}) objects.
644
708
  *
@@ -790,6 +854,12 @@ class PagerPageSizesComponent extends PagerElementComponent {
790
854
  * * `none`
791
855
  */
792
856
  size = DEFAULT_SIZE;
857
+ /**
858
+ * Toggles the adaptiveness of the internal DropDownList.
859
+ *
860
+ * @default 'auto'
861
+ */
862
+ adaptiveMode = 'auto';
793
863
  /**
794
864
  * @hidden
795
865
  *
@@ -836,7 +906,7 @@ class PagerPageSizesComponent extends PagerElementComponent {
836
906
  }
837
907
  }
838
908
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PagerPageSizesComponent, deps: [{ token: i1.LocalizationService }, { token: i0.ChangeDetectorRef }, { token: PagerContextService }, { token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
839
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: PagerPageSizesComponent, isStandalone: true, selector: "kendo-datapager-page-sizes, kendo-pager-page-sizes", inputs: { pageSizes: "pageSizes", size: "size" }, host: { properties: { "class.k-pager-sizes": "this.classes" } }, viewQueries: [{ propertyName: "dropDownList", first: true, predicate: ["dropdownlist"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
909
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: PagerPageSizesComponent, isStandalone: true, selector: "kendo-datapager-page-sizes, kendo-pager-page-sizes", inputs: { showItemsText: "showItemsText", pageSizes: "pageSizes", size: "size", adaptiveMode: "adaptiveMode" }, host: { properties: { "class.k-pager-sizes": "this.classes" } }, viewQueries: [{ propertyName: "dropDownList", first: true, predicate: ["dropdownlist"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
840
910
  <kendo-dropdownlist kendoPagerFocusable
841
911
  #dropdownlist
842
912
  [size]="size"
@@ -846,9 +916,10 @@ class PagerPageSizesComponent extends PagerElementComponent {
846
916
  [valuePrimitive]="true"
847
917
  [value]="pageSize"
848
918
  (valueChange)="pageSizeChange($event, dropdownlist)"
919
+ [adaptiveMode]="adaptiveMode"
849
920
  [attr.aria-label]="textFor('itemsPerPage')"></kendo-dropdownlist>
850
- {{ textFor('itemsPerPage') }}
851
- `, isInline: true, dependencies: [{ kind: "component", type: DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["customIconClass", "showStickyHeader", "icon", "svgIcon", "loading", "data", "value", "textField", "valueField", "adaptiveMode", "adaptiveTitle", "adaptiveSubtitle", "popupSettings", "listHeight", "defaultItem", "disabled", "itemDisabled", "readonly", "filterable", "virtual", "ignoreCase", "delay", "valuePrimitive", "tabindex", "tabIndex", "size", "rounded", "fillMode", "leftRightArrowsNavigation", "id"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }, { kind: "directive", type: PagerFocusableDirective, selector: "[kendoPagerFocusable]", exportAs: ["kendoPagerFocusable"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
921
+ <ng-container *ngIf="showItemsText">{{ textFor('itemsPerPage') }}</ng-container>
922
+ `, isInline: true, dependencies: [{ kind: "component", type: DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["customIconClass", "showStickyHeader", "icon", "svgIcon", "loading", "data", "value", "textField", "valueField", "adaptiveMode", "adaptiveTitle", "adaptiveSubtitle", "popupSettings", "listHeight", "defaultItem", "disabled", "itemDisabled", "readonly", "filterable", "virtual", "ignoreCase", "delay", "valuePrimitive", "tabindex", "tabIndex", "size", "rounded", "fillMode", "leftRightArrowsNavigation", "id"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }, { kind: "directive", type: PagerFocusableDirective, selector: "[kendoPagerFocusable]", exportAs: ["kendoPagerFocusable"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
852
923
  }
853
924
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PagerPageSizesComponent, decorators: [{
854
925
  type: Component,
@@ -865,19 +936,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
865
936
  [valuePrimitive]="true"
866
937
  [value]="pageSize"
867
938
  (valueChange)="pageSizeChange($event, dropdownlist)"
939
+ [adaptiveMode]="adaptiveMode"
868
940
  [attr.aria-label]="textFor('itemsPerPage')"></kendo-dropdownlist>
869
- {{ textFor('itemsPerPage') }}
941
+ <ng-container *ngIf="showItemsText">{{ textFor('itemsPerPage') }}</ng-container>
870
942
  `,
871
943
  standalone: true,
872
- imports: [DropDownListComponent, PagerFocusableDirective]
944
+ imports: [DropDownListComponent, PagerFocusableDirective, NgIf]
873
945
  }]
874
946
  }], ctorParameters: function () { return [{ type: i1.LocalizationService }, { type: i0.ChangeDetectorRef }, { type: PagerContextService }, { type: i0.ElementRef }, { type: i0.NgZone }]; }, propDecorators: { dropDownList: [{
875
947
  type: ViewChild,
876
948
  args: ['dropdownlist', { static: true }]
949
+ }], showItemsText: [{
950
+ type: Input
877
951
  }], pageSizes: [{
878
952
  type: Input
879
953
  }], size: [{
880
954
  type: Input
955
+ }], adaptiveMode: [{
956
+ type: Input
881
957
  }], classes: [{
882
958
  type: HostBinding,
883
959
  args: ["class.k-pager-sizes"]
@@ -1068,30 +1144,6 @@ class PagerNumericButtonsComponent extends PagerElementComponent {
1068
1144
  }
1069
1145
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PagerNumericButtonsComponent, deps: [{ token: i1.LocalizationService }, { token: i0.ChangeDetectorRef }, { token: PagerContextService }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
1070
1146
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: PagerNumericButtonsComponent, isStandalone: true, selector: "kendo-datapager-numeric-buttons, kendo-pager-numeric-buttons", inputs: { buttonCount: "buttonCount", size: "size" }, viewQueries: [{ propertyName: "selectElement", first: true, predicate: ["select"], descendants: true, read: ElementRef }, { propertyName: "numbersElement", first: true, predicate: ["numbers"], descendants: true, read: ElementRef }], usesInheritance: true, ngImport: i0, template: `
1071
- <select kendoPagerFocusable #select
1072
- class="k-hidden k-dropdown-list k-dropdown k-picker k-picker-solid k-rounded-md"
1073
- [attr.title]="pageChooserLabel"
1074
- [attr.aria-label]="pageChooserLabel"
1075
- (change)="onSelectChange($event)">
1076
- <option *ngIf="start > 1"
1077
- value="previousButtons"
1078
- [selected]="false"
1079
- [attr.aria-label]="pageLabel(start - 1)">...
1080
- </option>
1081
- <option *ngFor="let num of buttons"
1082
- [value]="num.toString()"
1083
- [selected]="num === currentPage"
1084
- [attr.aria-label]="pageLabel(num)"
1085
- [attr.aria-current]="currentPage === num ? 'page' : undefined"
1086
- [ngClass]="{'k-selected':currentPage === num}">
1087
- {{num}}
1088
- </option>
1089
- <option *ngIf="end < totalPages"
1090
- value="nextButtons"
1091
- [selected]="false"
1092
- [attr.aria-label]="pageLabel(end + 1)">...
1093
- </option>
1094
- </select>
1095
1147
  <div class="k-pager-numbers" #numbers>
1096
1148
  <button *ngIf="start > 1"
1097
1149
  type="button"
@@ -1131,7 +1183,7 @@ class PagerNumericButtonsComponent extends PagerElementComponent {
1131
1183
  [attr.title]="pageLabel(end + 1)"
1132
1184
  (click)="changePage(end)">...</button>
1133
1185
  </div>
1134
- `, isInline: true, dependencies: [{ kind: "directive", type: PagerFocusableDirective, selector: "[kendoPagerFocusable]", exportAs: ["kendoPagerFocusable"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1186
+ `, isInline: true, dependencies: [{ kind: "directive", type: PagerFocusableDirective, selector: "[kendoPagerFocusable]", exportAs: ["kendoPagerFocusable"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1135
1187
  }
1136
1188
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PagerNumericButtonsComponent, decorators: [{
1137
1189
  type: Component,
@@ -1139,30 +1191,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
1139
1191
  changeDetection: ChangeDetectionStrategy.OnPush,
1140
1192
  selector: 'kendo-datapager-numeric-buttons, kendo-pager-numeric-buttons',
1141
1193
  template: `
1142
- <select kendoPagerFocusable #select
1143
- class="k-hidden k-dropdown-list k-dropdown k-picker k-picker-solid k-rounded-md"
1144
- [attr.title]="pageChooserLabel"
1145
- [attr.aria-label]="pageChooserLabel"
1146
- (change)="onSelectChange($event)">
1147
- <option *ngIf="start > 1"
1148
- value="previousButtons"
1149
- [selected]="false"
1150
- [attr.aria-label]="pageLabel(start - 1)">...
1151
- </option>
1152
- <option *ngFor="let num of buttons"
1153
- [value]="num.toString()"
1154
- [selected]="num === currentPage"
1155
- [attr.aria-label]="pageLabel(num)"
1156
- [attr.aria-current]="currentPage === num ? 'page' : undefined"
1157
- [ngClass]="{'k-selected':currentPage === num}">
1158
- {{num}}
1159
- </option>
1160
- <option *ngIf="end < totalPages"
1161
- value="nextButtons"
1162
- [selected]="false"
1163
- [attr.aria-label]="pageLabel(end + 1)">...
1164
- </option>
1165
- </select>
1166
1194
  <div class="k-pager-numbers" #numbers>
1167
1195
  <button *ngIf="start > 1"
1168
1196
  type="button"
@@ -1204,7 +1232,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
1204
1232
  </div>
1205
1233
  `,
1206
1234
  standalone: true,
1207
- imports: [PagerFocusableDirective, NgIf, NgFor, NgClass, ButtonComponent]
1235
+ imports: [PagerFocusableDirective, NgIf, NgFor, ButtonComponent]
1208
1236
  }]
1209
1237
  }], ctorParameters: function () { return [{ type: i1.LocalizationService }, { type: i0.ChangeDetectorRef }, { type: PagerContextService }, { type: i0.Renderer2 }]; }, propDecorators: { selectElement: [{
1210
1238
  type: ViewChild,
@@ -1344,6 +1372,11 @@ class PagerInputComponent extends PagerElementComponent {
1344
1372
  zone;
1345
1373
  renderer;
1346
1374
  numericInput;
1375
+ /**
1376
+ * Controls the visibility of the page text label.
1377
+ * @hidden
1378
+ */
1379
+ showPageText = true;
1347
1380
  /**
1348
1381
  * Specifies the padding of the internal numeric input element.
1349
1382
  *
@@ -1417,9 +1450,9 @@ class PagerInputComponent extends PagerElementComponent {
1417
1450
  return this.totalPages !== 0;
1418
1451
  }
1419
1452
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PagerInputComponent, deps: [{ token: i1.LocalizationService }, { token: PagerContextService }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
1420
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: PagerInputComponent, isStandalone: true, selector: "kendo-datapager-input, kendo-pager-input", inputs: { size: "size" }, viewQueries: [{ propertyName: "numericInput", first: true, predicate: NumericTextBoxComponent, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
1453
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: PagerInputComponent, isStandalone: true, selector: "kendo-datapager-input, kendo-pager-input", inputs: { showPageText: "showPageText", size: "size" }, viewQueries: [{ propertyName: "numericInput", first: true, predicate: NumericTextBoxComponent, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
1421
1454
  <span class="k-pager-input">
1422
- {{textFor('page')}}
1455
+ <ng-container *ngIf="showPageText">{{textFor('page')}}</ng-container>
1423
1456
  <kendo-numerictextbox kendoPagerFocusable
1424
1457
  [spinners]="false"
1425
1458
  [decimals]="0"
@@ -1441,7 +1474,7 @@ class PagerInputComponent extends PagerElementComponent {
1441
1474
  </kendo-numerictextbox>
1442
1475
  {{textFor('of')}} {{totalPages}}
1443
1476
  </span>
1444
- `, isInline: true, dependencies: [{ kind: "component", type: 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", "inputAttributes"], outputs: ["valueChange", "focus", "blur", "inputFocus", "inputBlur"], exportAs: ["kendoNumericTextBox"] }, { kind: "directive", type: PagerFocusableDirective, selector: "[kendoPagerFocusable]", exportAs: ["kendoPagerFocusable"] }, { kind: "directive", type: EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }] });
1477
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: 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", "inputAttributes"], outputs: ["valueChange", "focus", "blur", "inputFocus", "inputBlur"], exportAs: ["kendoNumericTextBox"] }, { kind: "directive", type: PagerFocusableDirective, selector: "[kendoPagerFocusable]", exportAs: ["kendoPagerFocusable"] }, { kind: "directive", type: EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }] });
1445
1478
  }
1446
1479
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PagerInputComponent, decorators: [{
1447
1480
  type: Component,
@@ -1449,7 +1482,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
1449
1482
  selector: 'kendo-datapager-input, kendo-pager-input',
1450
1483
  template: `
1451
1484
  <span class="k-pager-input">
1452
- {{textFor('page')}}
1485
+ <ng-container *ngIf="showPageText">{{textFor('page')}}</ng-container>
1453
1486
  <kendo-numerictextbox kendoPagerFocusable
1454
1487
  [spinners]="false"
1455
1488
  [decimals]="0"
@@ -1473,11 +1506,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
1473
1506
  </span>
1474
1507
  `,
1475
1508
  standalone: true,
1476
- imports: [NgClass, NumericTextBoxComponent, PagerFocusableDirective, EventsOutsideAngularDirective]
1509
+ imports: [NgClass, NgIf, NumericTextBoxComponent, PagerFocusableDirective, EventsOutsideAngularDirective]
1477
1510
  }]
1478
1511
  }], ctorParameters: function () { return [{ type: i1.LocalizationService }, { type: PagerContextService }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }]; }, propDecorators: { numericInput: [{
1479
1512
  type: ViewChild,
1480
1513
  args: [NumericTextBoxComponent, { static: true }]
1514
+ }], showPageText: [{
1515
+ type: Input
1481
1516
  }], size: [{
1482
1517
  type: Input
1483
1518
  }] } });
@@ -1550,28 +1585,40 @@ const packageMetadata = {
1550
1585
  productName: 'Kendo UI for Angular',
1551
1586
  productCode: 'KENDOUIANGULAR',
1552
1587
  productCodes: ['KENDOUIANGULAR'],
1553
- publishDate: 1746776499,
1554
- version: '19.0.0-develop.9',
1588
+ publishDate: 1748425321,
1589
+ version: '19.0.1-develop.1',
1555
1590
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'
1556
1591
  };
1557
1592
 
1558
- /**
1559
- * @hidden
1560
- */
1561
- const RESPONSIVE_BREAKPOINT_MEDIUM = 600;
1562
- /**
1563
- * @hidden
1564
- */
1565
- const RESPONSIVE_BREAKPOINT_LARGE = 768;
1566
-
1567
1593
  class PagerComponent {
1568
1594
  pagerContext;
1569
1595
  element;
1570
1596
  localization;
1571
1597
  renderer;
1572
1598
  ngZone;
1599
+ cdr;
1573
1600
  navigationService;
1574
1601
  template;
1602
+ set numericButtons(buttons) {
1603
+ const newWidth = buttons ? buttons.nativeElement?.offsetWidth : 0;
1604
+ if (buttons && newWidth !== this.pagerDimensions.numericButtonsWidth) {
1605
+ this.pagerDimensions.numericButtonsWidth = newWidth;
1606
+ }
1607
+ }
1608
+ set pagerInput(input) {
1609
+ const newWidth = input ? input.nativeElement?.offsetWidth : 0;
1610
+ if (input && newWidth !== this.pagerDimensions.inputWidth) {
1611
+ this.pagerDimensions.inputWidth = newWidth;
1612
+ }
1613
+ }
1614
+ pagerInputComponent;
1615
+ set pageSizes(sizes) {
1616
+ const newWidth = sizes ? sizes.nativeElement?.offsetWidth : 0;
1617
+ if (sizes && newWidth !== this.pagerDimensions.pageSizesWidth) {
1618
+ this.pagerDimensions.pageSizesWidth = newWidth;
1619
+ }
1620
+ }
1621
+ pageSizesComponent;
1575
1622
  /**
1576
1623
  * @hidden
1577
1624
  */
@@ -1624,6 +1671,9 @@ class PagerComponent {
1624
1671
  this._pageSizeValues = value;
1625
1672
  }
1626
1673
  }
1674
+ get pageSizeValues() {
1675
+ return this._pageSizeValues;
1676
+ }
1627
1677
  /**
1628
1678
  * Toggles the **Previous** and **Next** buttons.
1629
1679
  *
@@ -1632,8 +1682,8 @@ class PagerComponent {
1632
1682
  previousNext = true;
1633
1683
  /**
1634
1684
  * If set to `true`, the user can use dedicated shortcuts to interact with the Pager ([see example]({% slug keyboard_navigation_pager %})).
1635
- * By default, navigation is disabled and the Pager content is accessible in the normal tab sequence.
1636
- * @default false
1685
+ * By default, navigation is enabled. To disable it and make the Pager content accessible in the normal tab sequence, set the property to `false`.
1686
+ * @default true
1637
1687
  */
1638
1688
  set navigable(value) {
1639
1689
  this._navigable = value;
@@ -1660,12 +1710,17 @@ class PagerComponent {
1660
1710
  return this._size;
1661
1711
  }
1662
1712
  /**
1663
- * @hidden
1664
- * Toggles the Pager responsive functionality.
1713
+ * Toggles the Pager responsive functionality ([see example](slug:responsive_pager)).
1665
1714
  *
1666
1715
  * @default true
1667
1716
  */
1668
1717
  responsive = true;
1718
+ /**
1719
+ * Toggles the Pager adaptiveness functionality ([see example](slug:adaptive_mode_pager)).
1720
+ *
1721
+ * @default 'auto'
1722
+ */
1723
+ adaptiveMode = 'auto';
1669
1724
  /**
1670
1725
  * Fires when the current page of the Pager is changed ([see example](slug:overview_pager)).
1671
1726
  * You have to handle the event yourself and page the data.
@@ -1677,7 +1732,22 @@ class PagerComponent {
1677
1732
  * If the event is prevented, the page size will remain unchanged ([see example]({% slug pager_events %})).
1678
1733
  */
1679
1734
  pageSizeChange = new EventEmitter();
1735
+ /**
1736
+ * @hidden
1737
+ */
1738
+ pagerInputVisibilityChange = new EventEmitter();
1739
+ /**
1740
+ * @hidden
1741
+ */
1742
+ pageTextVisibilityChange = new EventEmitter();
1743
+ /**
1744
+ * @hidden
1745
+ */
1746
+ itemsTextVisibilityChange = new EventEmitter();
1680
1747
  pagerClass = true;
1748
+ get responsiveClass() {
1749
+ return this.responsive;
1750
+ }
1681
1751
  widgetRole = 'application';
1682
1752
  roleDescription = 'pager';
1683
1753
  keyShortcuts = 'Enter ArrowRight ArrowLeft';
@@ -1709,19 +1779,76 @@ class PagerComponent {
1709
1779
  context.currentPage = this.currentPage;
1710
1780
  return context;
1711
1781
  }
1782
+ /**
1783
+ * @hidden
1784
+ */
1785
+ get showPageText() {
1786
+ return this._showPageText;
1787
+ }
1788
+ set showPageText(value) {
1789
+ this._showPageText = value;
1790
+ this.pagerInputComponent && (this.pagerInputComponent.showPageText = value);
1791
+ this.pageTextVisibilityChange.emit(value);
1792
+ }
1793
+ /**
1794
+ * @hidden
1795
+ */
1796
+ get showItemsText() {
1797
+ return this._showItemsText;
1798
+ }
1799
+ set showItemsText(value) {
1800
+ this._showItemsText = value;
1801
+ this.pageSizesComponent && (this.pageSizesComponent.showItemsText = value);
1802
+ this.itemsTextVisibilityChange.emit(value);
1803
+ }
1804
+ /**
1805
+ * @hidden
1806
+ */
1807
+ get showInput() {
1808
+ return this._showInput;
1809
+ }
1810
+ set showInput(value) {
1811
+ this._showInput = value;
1812
+ this.pagerInputVisibilityChange.emit(value);
1813
+ }
1814
+ /**
1815
+ * @hidden
1816
+ */
1817
+ initialized = false;
1712
1818
  subscriptions = new Subscription();
1713
1819
  _templateContext = {};
1714
1820
  _pageSizeValues = DEFAULT_PAGE_SIZE_VALUES;
1715
1821
  direction;
1716
1822
  isInnerNavigationEnabled = false;
1717
- _navigable = false;
1823
+ _navigable = true;
1718
1824
  _size = DEFAULT_SIZE;
1719
- constructor(pagerContext, element, localization, renderer, ngZone, navigationService) {
1825
+ _showInput = true;
1826
+ _showPageText = true;
1827
+ _showItemsText = true;
1828
+ /**
1829
+ * Stores the measurements of various Pager elements.
1830
+ * These dimensions are used for responsive layout calculations.
1831
+ * @hidden
1832
+ */
1833
+ pagerDimensions = {
1834
+ padding: 0,
1835
+ numericButtonsWidth: 0,
1836
+ inputWidth: 0,
1837
+ pageSizesWidth: 0,
1838
+ sizesTextWidth: 0,
1839
+ pageTextWidth: 0,
1840
+ infoTextWidth: 0,
1841
+ gapNumbersSizes: 0,
1842
+ gapSizesInfo: 0,
1843
+ width: 0
1844
+ };
1845
+ constructor(pagerContext, element, localization, renderer, ngZone, cdr, navigationService) {
1720
1846
  this.pagerContext = pagerContext;
1721
1847
  this.element = element;
1722
1848
  this.localization = localization;
1723
1849
  this.renderer = renderer;
1724
1850
  this.ngZone = ngZone;
1851
+ this.cdr = cdr;
1725
1852
  this.navigationService = navigationService;
1726
1853
  validatePackage(packageMetadata);
1727
1854
  this.direction = localization.rtl ? 'rtl' : 'ltr';
@@ -1738,6 +1865,8 @@ class PagerComponent {
1738
1865
  this.subscriptions.add(this.pagerContext.pageSizeChange.subscribe(this.changePageSize.bind(this)));
1739
1866
  this.subscriptions.add(this.localization.changes.subscribe(({ rtl }) => {
1740
1867
  this.direction = rtl ? 'rtl' : 'ltr';
1868
+ this.measureAllTextWidths();
1869
+ this.responsive && this.resizeHandler();
1741
1870
  }));
1742
1871
  this.subscriptions.add(this.navigationService.innerNavigationChange.subscribe(this.innerNavigationChange.bind(this)));
1743
1872
  if (this.navigable) {
@@ -1747,25 +1876,67 @@ class PagerComponent {
1747
1876
  });
1748
1877
  }
1749
1878
  }
1879
+ get maxItems() {
1880
+ return Math.min(this.currentPage * this.pageSize, this.total);
1881
+ }
1750
1882
  ngAfterViewInit() {
1751
- this.responsive && this.resizeHandler();
1752
1883
  this.renderer.setAttribute(this.element.nativeElement, 'aria-label', this.ariaLabel);
1753
1884
  this.subscriptions.add(this.template.changes.subscribe(() => {
1754
- this.responsive && this.resizeHandler();
1885
+ this.measureAllTextWidths();
1886
+ this.responsive && this.resizeHandler(false);
1755
1887
  }));
1756
1888
  this.handleClasses(this.size, 'size');
1889
+ this.measureAllTextWidths();
1890
+ !this.numericButtons && (this.pagerDimensions.numericButtonsWidth = this.element.nativeElement.querySelector('.k-pager-numbers')?.offsetWidth ?? 0);
1891
+ !this.pagerInput && (this.pagerDimensions.inputWidth = this.element.nativeElement.querySelector('.k-pager-input')?.offsetWidth ?? 0);
1892
+ !this.pageSizes && (this.pagerDimensions.pageSizesWidth = this.element.nativeElement.querySelector('.k-pager-sizes')?.offsetWidth ?? 0);
1893
+ const padding = calculatePadding(this.element.nativeElement);
1894
+ this.pagerDimensions.padding = padding.padding;
1895
+ this.pagerDimensions.gapNumbersSizes = padding.gapNumbersSizes;
1896
+ this.pagerDimensions.gapSizesInfo = padding.gapSizesInfo;
1897
+ this.ngZone.onStable.pipe(take(1)).subscribe(() => {
1898
+ if (this.type !== 'input') {
1899
+ this.showInput = false;
1900
+ }
1901
+ });
1902
+ if (!isDocumentAvailable()) {
1903
+ this.initialized = true;
1904
+ return;
1905
+ }
1906
+ this.responsive && this.resizeHandler();
1907
+ setTimeout(() => {
1908
+ this.initialized = true;
1909
+ this.cdr.markForCheck();
1910
+ }, 0);
1757
1911
  }
1758
1912
  ngOnChanges(changes) {
1759
1913
  if (anyChanged(["pageSize", "skip", "total"], changes, false)) {
1914
+ const previousButtonCount = Math.min(this.buttonCount, (changes['total']?.previousValue || this.total) / (changes['pageSize']?.previousValue || this.pageSize));
1760
1915
  this.pagerContext.notifyChanges({
1761
1916
  pageSize: this.pageSize,
1762
1917
  skip: this.skip,
1763
1918
  total: this.total
1764
1919
  });
1920
+ this.pagerDimensions.numericButtonsWidth = (this.pagerDimensions.numericButtonsWidth * Math.min(this.buttonCount, this.total / this.pageSize)) / previousButtonCount;
1765
1921
  this.renderer.setAttribute(this.element.nativeElement, 'aria-label', this.ariaLabel);
1922
+ this.responsive && this.resizeHandler(false);
1766
1923
  }
1767
- if (changes['responsive']) {
1768
- this.responsive && this.resizeHandler();
1924
+ if (anyChanged(["pageSizeValues", "previousNext", "buttonCount"], changes, true)) {
1925
+ this.responsive && this.resizeHandler(false);
1926
+ }
1927
+ if (isChanged('responsive', changes, true)) {
1928
+ if (changes['responsive'].currentValue && !changes['responsive'].previousValue) {
1929
+ this.measureAllTextWidths();
1930
+ this.resizeHandler(false);
1931
+ }
1932
+ if (!this.responsive) {
1933
+ this.showInput = this.type === 'input';
1934
+ this.showElementsInOrder(this.element.nativeElement.offsetWidth, this.pagerDimensions.width);
1935
+ }
1936
+ }
1937
+ if (isChanged('type', changes, true)) {
1938
+ this.showNumericButtonsResponsive();
1939
+ this.responsive && this.resizeHandler(false);
1769
1940
  }
1770
1941
  }
1771
1942
  ngOnDestroy() {
@@ -1803,44 +1974,47 @@ class PagerComponent {
1803
1974
  /**
1804
1975
  * @hidden
1805
1976
  */
1806
- resizeHandler = () => {
1977
+ resizeHandler = (compareWidth = true) => {
1807
1978
  if (this.template?.first && !this.responsive) {
1808
1979
  return;
1809
1980
  }
1810
- const width = this.element.nativeElement.offsetWidth;
1981
+ if (!isDocumentAvailable() || !this.element?.nativeElement) {
1982
+ this.initialized = true;
1983
+ return;
1984
+ }
1985
+ let pagerWidth = this.element.nativeElement.offsetWidth;
1986
+ if (pagerWidth <= 0) {
1987
+ return;
1988
+ }
1989
+ if (compareWidth && pagerWidth === this.pagerDimensions.width) {
1990
+ return;
1991
+ }
1992
+ else {
1993
+ this.pagerDimensions.width = pagerWidth;
1994
+ }
1811
1995
  this.ngZone.runOutsideAngular(() => {
1812
1996
  setTimeout(() => {
1813
- const numericButtonsElement = this.element.nativeElement.querySelector('kendo-datapager-numeric-buttons, kendo-pager-numeric-buttons');
1997
+ if (this.template?.first && !this.responsive) {
1998
+ return;
1999
+ }
2000
+ const numericButtonsWrapperElement = this.element.nativeElement.querySelector('.k-pager-numbers-wrap');
1814
2001
  const pagerInfoElement = this.element.nativeElement.querySelector('.k-pager-info');
1815
2002
  const pagerPageSizes = this.element.nativeElement.querySelector('.k-pager-sizes');
1816
- if (numericButtonsElement) {
1817
- const selectElement = numericButtonsElement.querySelector('select');
1818
- const numbersElement = numericButtonsElement.querySelector('.k-pager-numbers');
1819
- if (width < RESPONSIVE_BREAKPOINT_MEDIUM) {
1820
- this.renderer.removeClass(selectElement, 'k-hidden');
1821
- this.renderer.addClass(numbersElement, 'k-hidden');
1822
- }
1823
- else {
1824
- this.renderer.addClass(selectElement, 'k-hidden');
1825
- this.renderer.removeClass(numbersElement, 'k-hidden');
1826
- }
2003
+ let elementsWidths = numericButtonsWrapperElement?.offsetWidth + (pagerPageSizes?.offsetWidth || 0) + (pagerInfoElement?.offsetWidth > 0 ? Math.min(this.pagerDimensions.infoTextWidth) : 0);
2004
+ if (this.isElementVisible(pagerInfoElement)) {
2005
+ elementsWidths += this.pagerDimensions.gapSizesInfo;
1827
2006
  }
1828
- if (pagerInfoElement) {
1829
- if (width < RESPONSIVE_BREAKPOINT_LARGE) {
1830
- this.renderer.addClass(pagerInfoElement, 'k-hidden');
1831
- }
1832
- else {
1833
- this.renderer.removeClass(pagerInfoElement, 'k-hidden');
1834
- }
2007
+ pagerWidth -= this.pagerDimensions.padding;
2008
+ if (this.isElementVisible(pagerPageSizes)) {
2009
+ pagerWidth -= this.pagerDimensions.gapNumbersSizes;
1835
2010
  }
1836
- if (pagerPageSizes) {
1837
- if (width < RESPONSIVE_BREAKPOINT_MEDIUM) {
1838
- this.renderer.addClass(pagerPageSizes, 'k-hidden');
1839
- }
1840
- else {
1841
- this.renderer.removeClass(pagerPageSizes, 'k-hidden');
1842
- }
2011
+ if (Math.ceil(elementsWidths) <= pagerWidth) {
2012
+ this.showElementsInOrder(pagerWidth, elementsWidths);
1843
2013
  }
2014
+ else {
2015
+ this.hideElementsInOrder(pagerWidth, elementsWidths);
2016
+ }
2017
+ !this.initialized && this.ngZone.onStable.pipe(take(1)).subscribe(() => this.initialized = true);
1844
2018
  });
1845
2019
  });
1846
2020
  };
@@ -1918,8 +2092,183 @@ class PagerComponent {
1918
2092
  this.renderer.addClass(elem, classes.toAdd);
1919
2093
  }
1920
2094
  }
1921
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PagerComponent, deps: [{ token: PagerContextService, optional: true, skipSelf: true }, { token: i0.ElementRef }, { token: i1.LocalizationService }, { token: i0.Renderer2 }, { token: i0.NgZone }, { token: PagerNavigationService, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Component });
1922
- 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: [
2095
+ showElementsInOrder(availableWidth, currentWidth) {
2096
+ const el = this.element.nativeElement;
2097
+ const numericButtonsElement = el.querySelector('kendo-datapager-numeric-buttons, kendo-pager-numeric-buttons');
2098
+ const pagerInfoElement = el.querySelector('.k-pager-info');
2099
+ const pagerPageSizes = el.querySelector('.k-pager-sizes');
2100
+ const pagerSizesDropDown = el.querySelector('.k-pager-sizes .k-dropdownlist');
2101
+ const checkOverflow = this.responsive;
2102
+ if (this.type === 'input' && this.isElementVisible(pagerInfoElement) || this.isElementVisible(numericButtonsElement)) {
2103
+ return;
2104
+ }
2105
+ if (this.showPageSizes && !this.isElementVisible(pagerPageSizes)) {
2106
+ const addDropDownWidth = currentWidth + this.pagerDimensions.pageSizesWidth + this.pagerDimensions.gapNumbersSizes - this.pagerDimensions.sizesTextWidth;
2107
+ if (checkOverflow && addDropDownWidth > availableWidth)
2108
+ return;
2109
+ this.ngZone.run(() => this.showItemsText = false);
2110
+ this.showElement(pagerPageSizes);
2111
+ currentWidth = addDropDownWidth;
2112
+ if (checkOverflow && currentWidth >= availableWidth)
2113
+ return;
2114
+ }
2115
+ if (this.showPageSizes && this.isElementVisible(pagerPageSizes) && !this.showItemsText) {
2116
+ const addPageSizesText = currentWidth - pagerSizesDropDown?.offsetWidth + this.pagerDimensions.pageSizesWidth;
2117
+ if (checkOverflow && addPageSizesText > availableWidth)
2118
+ return;
2119
+ this.ngZone.run(() => this.showItemsText = true);
2120
+ currentWidth = addPageSizesText;
2121
+ if (checkOverflow && currentWidth >= availableWidth)
2122
+ return;
2123
+ }
2124
+ if (!this.showPageText && (!this.showPageSizes || (this.isElementVisible(pagerPageSizes) && this.showItemsText))) {
2125
+ const addPageText = currentWidth + this.pagerDimensions.pageTextWidth;
2126
+ if (checkOverflow && addPageText > availableWidth)
2127
+ return;
2128
+ this.ngZone.run(() => this.showPageText = true);
2129
+ currentWidth = addPageText;
2130
+ if (checkOverflow && currentWidth >= availableWidth)
2131
+ return;
2132
+ }
2133
+ if (this.info && !this.isElementVisible(pagerInfoElement) && (!this.showPageSizes || (this.isElementVisible(pagerPageSizes) && this.showPageText))) {
2134
+ const addInfoText = currentWidth + this.pagerDimensions.infoTextWidth + this.pagerDimensions.gapSizesInfo;
2135
+ if (checkOverflow && addInfoText > availableWidth)
2136
+ return;
2137
+ this.ngZone.run(() => {
2138
+ this.showElement(pagerInfoElement);
2139
+ });
2140
+ currentWidth = addInfoText;
2141
+ }
2142
+ if (this.type === 'numeric' && (!this.info || this.isElementVisible(pagerInfoElement))) {
2143
+ const addNumericButtons = currentWidth - this.pagerDimensions.inputWidth + this.pagerDimensions.numericButtonsWidth;
2144
+ if (checkOverflow && addNumericButtons > availableWidth)
2145
+ return;
2146
+ this.showElement(numericButtonsElement);
2147
+ this.ngZone.run(() => {
2148
+ this.showInput = false;
2149
+ this.cdr.markForCheck();
2150
+ });
2151
+ }
2152
+ }
2153
+ hideElementsInOrder(availableWidth, currentWidth) {
2154
+ const el = this.element.nativeElement;
2155
+ const numericButtonsElement = el.querySelector('kendo-datapager-numeric-buttons, kendo-pager-numeric-buttons');
2156
+ const pagerInfoElement = el.querySelector('.k-pager-info');
2157
+ const pagerPageSizes = el.querySelector('.k-pager-sizes');
2158
+ const pagerSizesDropDown = el.querySelector('.k-pager-sizes .k-dropdownlist');
2159
+ if (this.isElementVisible(numericButtonsElement)) {
2160
+ this.hideElement(numericButtonsElement);
2161
+ this.ngZone.run(() => this.showInput = true);
2162
+ currentWidth += this.pagerDimensions.inputWidth - this.pagerDimensions.numericButtonsWidth;
2163
+ if (currentWidth <= availableWidth)
2164
+ return;
2165
+ }
2166
+ if (this.isElementVisible(pagerInfoElement)) {
2167
+ this.hideElement(pagerInfoElement);
2168
+ currentWidth -= (this.pagerDimensions.infoTextWidth + this.pagerDimensions.gapSizesInfo);
2169
+ if (currentWidth <= availableWidth)
2170
+ return;
2171
+ }
2172
+ if (this.showPageText) {
2173
+ this.ngZone.run(() => this.showPageText = false);
2174
+ currentWidth = currentWidth - this.pagerDimensions.pageTextWidth;
2175
+ if (currentWidth <= availableWidth)
2176
+ return;
2177
+ }
2178
+ if (this.showPageSizes && this.isElementVisible(pagerPageSizes) && this.showItemsText) {
2179
+ this.ngZone.run(() => this.showItemsText = false);
2180
+ currentWidth = currentWidth - this.pagerDimensions.pageSizesWidth + pagerSizesDropDown?.offsetWidth;
2181
+ if (currentWidth <= availableWidth)
2182
+ return;
2183
+ }
2184
+ this.hideElement(pagerPageSizes);
2185
+ }
2186
+ isElementVisible(element) {
2187
+ return element && !element?.classList.contains('k-hidden');
2188
+ }
2189
+ hideElement(element) {
2190
+ if (element) {
2191
+ this.renderer.addClass(element, 'k-hidden');
2192
+ }
2193
+ }
2194
+ showElement(element) {
2195
+ if (element) {
2196
+ this.renderer.removeClass(element, 'k-hidden');
2197
+ }
2198
+ }
2199
+ measureAllTextWidths() {
2200
+ if (!isDocumentAvailable()) {
2201
+ return;
2202
+ }
2203
+ const el = this.element.nativeElement;
2204
+ const existingInfo = el.querySelector('.k-pager-info');
2205
+ const existingInput = el.querySelector('.k-pager-input');
2206
+ const existingSizes = el.querySelector('.k-pager-sizes');
2207
+ // create a single measurement container
2208
+ const measureContainer = this.renderer.createElement('div');
2209
+ positionOffScreen(this.renderer, measureContainer);
2210
+ this.renderer.appendChild(this.element.nativeElement, measureContainer);
2211
+ const infoSpan = createMeasurementSpan(this.renderer, measureContainer, 'k-pager-info');
2212
+ const pageSpan = createMeasurementSpan(this.renderer, measureContainer, 'k-pager-input');
2213
+ const sizesSpan = createMeasurementSpan(this.renderer, measureContainer, 'k-pager-sizes');
2214
+ const infoText = `${this.currentPage} - ${this.maxItems} ${this.localization.get('of')} ${this.total} ${this.localization.get('items')}`;
2215
+ this.renderer.setProperty(infoSpan, 'textContent', infoText);
2216
+ this.renderer.setProperty(pageSpan, 'textContent', this.localization.get('page'));
2217
+ this.renderer.setProperty(sizesSpan, 'textContent', this.localization.get('itemsPerPage'));
2218
+ // copy computed styles if available
2219
+ if (existingInfo)
2220
+ copyComputedStyles(this.renderer, existingInfo, infoSpan);
2221
+ if (existingInput)
2222
+ copyComputedStyles(this.renderer, existingInput, pageSpan);
2223
+ if (existingSizes)
2224
+ copyComputedStyles(this.renderer, existingSizes, sizesSpan);
2225
+ // force a reflow to ensure measurements are accurate
2226
+ measureContainer.getBoundingClientRect();
2227
+ this.pagerDimensions.infoTextWidth = infoSpan?.offsetWidth;
2228
+ if (this.pagerDimensions.inputWidth && this.pagerDimensions.pageTextWidth) {
2229
+ this.pagerDimensions.inputWidth = this.pagerDimensions.inputWidth - this.pagerDimensions.pageTextWidth + pageSpan.offsetWidth;
2230
+ }
2231
+ this.pagerDimensions.pageTextWidth = pageSpan?.offsetWidth;
2232
+ if (this.pagerDimensions.pageSizesWidth && this.pagerDimensions.sizesTextWidth) {
2233
+ this.pagerDimensions.pageSizesWidth = this.pagerDimensions.pageSizesWidth - this.pagerDimensions.sizesTextWidth + sizesSpan.offsetWidth;
2234
+ }
2235
+ this.pagerDimensions.sizesTextWidth = sizesSpan?.offsetWidth;
2236
+ this.renderer.removeChild(this.element.nativeElement, measureContainer);
2237
+ }
2238
+ showNumericButtonsResponsive() {
2239
+ if (!isDocumentAvailable() || !this.element?.nativeElement) {
2240
+ return;
2241
+ }
2242
+ const numericButtonsElement = this.element.nativeElement.querySelector('kendo-datapager-numeric-buttons, kendo-pager-numeric-buttons');
2243
+ const hasNumericButtons = this.numericButtons || numericButtonsElement;
2244
+ const hasInput = this.pagerInput || this.element.nativeElement.querySelector('.k-pager-input');
2245
+ if (!this.responsive || (!hasNumericButtons && !hasInput)) {
2246
+ this.showInput = this.type === 'input';
2247
+ return;
2248
+ }
2249
+ const pagerInfoElement = this.element.nativeElement.querySelector('.k-pager-info');
2250
+ if (this.type === 'input' || !this.isElementVisible(pagerInfoElement)) {
2251
+ this.showInput = true;
2252
+ return;
2253
+ }
2254
+ if (this.isElementVisible(numericButtonsElement)) {
2255
+ this.showInput = false;
2256
+ return;
2257
+ }
2258
+ const pagerWidth = this.element.nativeElement?.offsetWidth;
2259
+ const numericButtonsWrapperElement = this.element.nativeElement.querySelector('.k-pager-numbers-wrap');
2260
+ const elementsWidths = numericButtonsWrapperElement?.offsetWidth + this.pagerDimensions.pageSizesWidth + this.pagerDimensions.infoTextWidth + this.pagerDimensions.gapSizesInfo;
2261
+ const hasAvailableWidth = pagerWidth > elementsWidths - this.pagerDimensions.inputWidth + this.pagerDimensions.numericButtonsWidth;
2262
+ this.showInput = !hasAvailableWidth;
2263
+ }
2264
+ get showPageSizes() {
2265
+ if (typeof this.pageSizeValues === 'boolean') {
2266
+ return this.pageSizeValues;
2267
+ }
2268
+ return this.pageSizeValues?.length > 0;
2269
+ }
2270
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PagerComponent, deps: [{ token: PagerContextService, optional: true, skipSelf: true }, { token: i0.ElementRef }, { token: i1.LocalizationService }, { token: i0.Renderer2 }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: PagerNavigationService, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Component });
2271
+ 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", adaptiveMode: "adaptiveMode" }, outputs: { pageChange: "pageChange", pageSizeChange: "pageSizeChange", pagerInputVisibilityChange: "pagerInputVisibilityChange", pageTextVisibilityChange: "pageTextVisibilityChange", itemsTextVisibilityChange: "itemsTextVisibilityChange" }, host: { listeners: { "focusin": "focusHandler($event)" }, properties: { "class.k-pager": "this.pagerClass", "class.k-pager-responsive": "this.responsiveClass", "attr.role": "this.widgetRole", "attr.aria-roledescription": "this.roleDescription", "attr.aria-keyshortcuts": "this.keyShortcuts", "attr.tabindex": "this.hostTabindex", "attr.dir": "this.dir" } }, providers: [
1923
2272
  LocalizationService,
1924
2273
  PagerContextService,
1925
2274
  PagerNavigationService,
@@ -1927,7 +2276,7 @@ class PagerComponent {
1927
2276
  provide: L10N_PREFIX,
1928
2277
  useValue: 'kendo.pager'
1929
2278
  }
1930
- ], queries: [{ propertyName: "template", predicate: PagerTemplateDirective }], exportAs: ["kendoDataPager", "kendoPager"], usesOnChanges: true, ngImport: i0, template: `
2279
+ ], queries: [{ propertyName: "template", predicate: PagerTemplateDirective }], viewQueries: [{ propertyName: "numericButtons", first: true, predicate: PagerNumericButtonsComponent, descendants: true, read: ElementRef }, { propertyName: "pagerInput", first: true, predicate: PagerInputComponent, descendants: true, read: ElementRef }, { propertyName: "pagerInputComponent", first: true, predicate: PagerInputComponent, descendants: true }, { propertyName: "pageSizes", first: true, predicate: PagerPageSizesComponent, descendants: true, read: ElementRef }, { propertyName: "pageSizesComponent", first: true, predicate: PagerPageSizesComponent, descendants: true }], exportAs: ["kendoDataPager", "kendoPager"], usesOnChanges: true, ngImport: i0, template: `
1931
2280
  <ng-container kendoPagerLocalizedMessages
1932
2281
  i18n-ariaLabel="kendo.pager.ariaLabel|The value of the aria-label attribute of the Pager"
1933
2282
  ariaLabel="{{ 'Page navigation, page {currentPage} of {totalPages}' }}"
@@ -1972,25 +2321,27 @@ class PagerComponent {
1972
2321
  [ngTemplateOutletContext]="templateContext">
1973
2322
  </ng-container>
1974
2323
  <ng-template #default>
1975
- <div class="k-pager-numbers-wrap">
2324
+ <div class="k-pager-numbers-wrap" [ngStyle]="{opacity: initialized ? null : '0'}">
1976
2325
  <kendo-pager-prev-buttons [size]="size" *ngIf="previousNext"></kendo-pager-prev-buttons>
1977
2326
  <kendo-pager-numeric-buttons
1978
2327
  [size]="size"
1979
2328
  *ngIf="type === 'numeric' && buttonCount > 0"
1980
2329
  [buttonCount]="buttonCount">
1981
2330
  </kendo-pager-numeric-buttons>
1982
- <kendo-pager-input [size]="size" *ngIf="type === 'input'"></kendo-pager-input>
2331
+ <kendo-pager-input [size]="size" *ngIf="showInput"></kendo-pager-input>
1983
2332
  <kendo-pager-next-buttons [size]="size" *ngIf="previousNext"></kendo-pager-next-buttons>
1984
2333
  </div>
1985
2334
  <kendo-pager-page-sizes *ngIf="_pageSizeValues.length"
2335
+ [ngStyle]="{opacity: initialized ? null : '0'}"
1986
2336
  [size]="size"
1987
- [pageSizes]="_pageSizeValues">
2337
+ [pageSizes]="_pageSizeValues"
2338
+ [adaptiveMode]="adaptiveMode">
1988
2339
  </kendo-pager-page-sizes>
1989
- <kendo-pager-info *ngIf="info">
2340
+ <kendo-pager-info *ngIf="info" [ngStyle]="{opacity: initialized ? null : '0'}">
1990
2341
  </kendo-pager-info>
1991
2342
  </ng-template>
1992
2343
  <kendo-resize-sensor *ngIf="responsive" (resize)="resizeHandler()"></kendo-resize-sensor>
1993
- `, 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"] }] });
2344
+ `, 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: ["showPageText", "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: ["showItemsText", "pageSizes", "size", "adaptiveMode"] }, { kind: "component", type: PagerInfoComponent, selector: "kendo-datapager-info, kendo-pager-info" }, { kind: "component", type: ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
1994
2345
  }
1995
2346
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PagerComponent, decorators: [{
1996
2347
  type: Component,
@@ -2051,39 +2402,56 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
2051
2402
  [ngTemplateOutletContext]="templateContext">
2052
2403
  </ng-container>
2053
2404
  <ng-template #default>
2054
- <div class="k-pager-numbers-wrap">
2405
+ <div class="k-pager-numbers-wrap" [ngStyle]="{opacity: initialized ? null : '0'}">
2055
2406
  <kendo-pager-prev-buttons [size]="size" *ngIf="previousNext"></kendo-pager-prev-buttons>
2056
2407
  <kendo-pager-numeric-buttons
2057
2408
  [size]="size"
2058
2409
  *ngIf="type === 'numeric' && buttonCount > 0"
2059
2410
  [buttonCount]="buttonCount">
2060
2411
  </kendo-pager-numeric-buttons>
2061
- <kendo-pager-input [size]="size" *ngIf="type === 'input'"></kendo-pager-input>
2412
+ <kendo-pager-input [size]="size" *ngIf="showInput"></kendo-pager-input>
2062
2413
  <kendo-pager-next-buttons [size]="size" *ngIf="previousNext"></kendo-pager-next-buttons>
2063
2414
  </div>
2064
2415
  <kendo-pager-page-sizes *ngIf="_pageSizeValues.length"
2416
+ [ngStyle]="{opacity: initialized ? null : '0'}"
2065
2417
  [size]="size"
2066
- [pageSizes]="_pageSizeValues">
2418
+ [pageSizes]="_pageSizeValues"
2419
+ [adaptiveMode]="adaptiveMode">
2067
2420
  </kendo-pager-page-sizes>
2068
- <kendo-pager-info *ngIf="info">
2421
+ <kendo-pager-info *ngIf="info" [ngStyle]="{opacity: initialized ? null : '0'}">
2069
2422
  </kendo-pager-info>
2070
2423
  </ng-template>
2071
2424
  <kendo-resize-sensor *ngIf="responsive" (resize)="resizeHandler()"></kendo-resize-sensor>
2072
2425
  `,
2073
2426
  standalone: true,
2074
- imports: [LocalizedMessagesDirective, NgIf, NgTemplateOutlet, PagerPrevButtonsComponent, PagerNumericButtonsComponent, PagerInputComponent, PagerNextButtonsComponent, PagerPageSizesComponent, PagerInfoComponent, ResizeSensorComponent]
2427
+ imports: [LocalizedMessagesDirective, NgIf, NgTemplateOutlet, PagerPrevButtonsComponent, PagerNumericButtonsComponent, PagerInputComponent, PagerNextButtonsComponent, PagerPageSizesComponent, PagerInfoComponent, ResizeSensorComponent, NgStyle]
2075
2428
  }]
2076
2429
  }], ctorParameters: function () { return [{ type: PagerContextService, decorators: [{
2077
2430
  type: Optional
2078
2431
  }, {
2079
2432
  type: SkipSelf
2080
- }] }, { type: i0.ElementRef }, { type: i1.LocalizationService }, { type: i0.Renderer2 }, { type: i0.NgZone }, { type: PagerNavigationService, decorators: [{
2433
+ }] }, { type: i0.ElementRef }, { type: i1.LocalizationService }, { type: i0.Renderer2 }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: PagerNavigationService, decorators: [{
2081
2434
  type: Optional
2082
2435
  }, {
2083
2436
  type: SkipSelf
2084
2437
  }] }]; }, propDecorators: { template: [{
2085
2438
  type: ContentChildren,
2086
2439
  args: [PagerTemplateDirective]
2440
+ }], numericButtons: [{
2441
+ type: ViewChild,
2442
+ args: [PagerNumericButtonsComponent, { read: ElementRef }]
2443
+ }], pagerInput: [{
2444
+ type: ViewChild,
2445
+ args: [PagerInputComponent, { read: ElementRef }]
2446
+ }], pagerInputComponent: [{
2447
+ type: ViewChild,
2448
+ args: [PagerInputComponent]
2449
+ }], pageSizes: [{
2450
+ type: ViewChild,
2451
+ args: [PagerPageSizesComponent, { read: ElementRef }]
2452
+ }], pageSizesComponent: [{
2453
+ type: ViewChild,
2454
+ args: [PagerPageSizesComponent]
2087
2455
  }], externalTemplate: [{
2088
2456
  type: Input
2089
2457
  }], total: [{
@@ -2108,13 +2476,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
2108
2476
  type: Input
2109
2477
  }], responsive: [{
2110
2478
  type: Input
2479
+ }], adaptiveMode: [{
2480
+ type: Input
2111
2481
  }], pageChange: [{
2112
2482
  type: Output
2113
2483
  }], pageSizeChange: [{
2114
2484
  type: Output
2485
+ }], pagerInputVisibilityChange: [{
2486
+ type: Output
2487
+ }], pageTextVisibilityChange: [{
2488
+ type: Output
2489
+ }], itemsTextVisibilityChange: [{
2490
+ type: Output
2115
2491
  }], pagerClass: [{
2116
2492
  type: HostBinding,
2117
2493
  args: ['class.k-pager']
2494
+ }], responsiveClass: [{
2495
+ type: HostBinding,
2496
+ args: ['class.k-pager-responsive']
2118
2497
  }], widgetRole: [{
2119
2498
  type: HostBinding,
2120
2499
  args: ['attr.role']