@progress/kendo-angular-pager 19.0.0-develop.11 → 19.0.0-develop.13
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.
- package/esm2022/package-metadata.mjs +2 -2
- package/esm2022/pager/pager-input.component.mjs +13 -6
- package/esm2022/pager/pager-numeric-buttons.component.mjs +3 -51
- package/esm2022/pager/pager-page-sizes.component.mjs +30 -5
- package/esm2022/pager/pager.component.mjs +312 -50
- package/esm2022/util.mjs +48 -0
- package/fesm2022/progress-kendo-angular-pager.mjs +403 -118
- package/index.d.ts +1 -0
- package/package.json +8 -8
- package/pager/pager-input.component.d.ts +6 -1
- package/pager/pager-page-sizes.component.d.ts +15 -1
- package/pager/pager.component.d.ts +42 -6
- package/schematics/ngAdd/index.js +6 -6
- package/util.d.ts +30 -0
- package/esm2022/pager/common/constants.mjs +0 -12
- package/pager/common/constants.d.ts +0 -12
|
@@ -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 { isFocusable, Keys, EventsOutsideAngularDirective, isDocumentAvailable, anyChanged, 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,6 +426,54 @@ 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
|
+
const computedStyle = window.getComputedStyle(element);
|
|
434
|
+
const paddingLeft = parseInt(computedStyle.paddingLeft, 10) || 0;
|
|
435
|
+
const paddingRight = parseInt(computedStyle.paddingRight, 10) || 0;
|
|
436
|
+
const padding = (paddingLeft + paddingRight) * 1.2; // account for rounding errors
|
|
437
|
+
const style = getComputedStyle(document.documentElement);
|
|
438
|
+
const gapNumbersSizes = 2 * (parseFloat(style.getPropertyValue('--kendo-spacing-3\\.5') || '0.875rem') * (parseFloat(getComputedStyle(document.documentElement).fontSize) || 16)); // convert rem to px
|
|
439
|
+
const gapSizesInfo = gapNumbersSizes;
|
|
440
|
+
return { padding, gapNumbersSizes, gapSizesInfo };
|
|
441
|
+
};
|
|
442
|
+
/**
|
|
443
|
+
* @hidden
|
|
444
|
+
*/
|
|
445
|
+
const createMeasurementSpan = (renderer, container, className) => {
|
|
446
|
+
const span = renderer.createElement('span');
|
|
447
|
+
renderer.appendChild(container, span);
|
|
448
|
+
renderer.addClass(span, className);
|
|
449
|
+
return span;
|
|
450
|
+
};
|
|
451
|
+
/**
|
|
452
|
+
* @hidden
|
|
453
|
+
*/
|
|
454
|
+
const copyComputedStyles = (renderer, source, destination) => {
|
|
455
|
+
const computedStyle = getComputedStyle(source);
|
|
456
|
+
const importantStyles = [
|
|
457
|
+
'font-family', 'font-size', 'font-weight', 'font-style',
|
|
458
|
+
'letter-spacing', 'text-transform', 'white-space', 'word-spacing',
|
|
459
|
+
'padding-left', 'padding-right', 'margin-left', 'margin-right',
|
|
460
|
+
'border-left-width', 'border-right-width', 'box-sizing'
|
|
461
|
+
];
|
|
462
|
+
importantStyles.forEach(style => {
|
|
463
|
+
renderer.setStyle(destination, style, computedStyle.getPropertyValue(style));
|
|
464
|
+
});
|
|
465
|
+
};
|
|
466
|
+
/**
|
|
467
|
+
*
|
|
468
|
+
* @hidden
|
|
469
|
+
*/
|
|
470
|
+
const positionOffScreen = (renderer, element) => {
|
|
471
|
+
renderer.setStyle(element, 'position', 'absolute');
|
|
472
|
+
renderer.setStyle(element, 'visibility', 'hidden');
|
|
473
|
+
renderer.setStyle(element, 'left', '-9999px');
|
|
474
|
+
renderer.setStyle(element, 'top', '-9999px');
|
|
475
|
+
renderer.setStyle(element, 'display', 'flex');
|
|
476
|
+
};
|
|
428
477
|
|
|
429
478
|
/**
|
|
430
479
|
* @hidden
|
|
@@ -639,6 +688,18 @@ class PagerPageSizesComponent extends PagerElementComponent {
|
|
|
639
688
|
element;
|
|
640
689
|
ngZone;
|
|
641
690
|
dropDownList;
|
|
691
|
+
_showItemsText = true;
|
|
692
|
+
/**
|
|
693
|
+
* Controls the visibility of the page text label.
|
|
694
|
+
* @hidden
|
|
695
|
+
*/
|
|
696
|
+
get showItemsText() {
|
|
697
|
+
return this._showItemsText;
|
|
698
|
+
}
|
|
699
|
+
set showItemsText(value) {
|
|
700
|
+
this._showItemsText = value;
|
|
701
|
+
this.cd.markForCheck();
|
|
702
|
+
}
|
|
642
703
|
/**
|
|
643
704
|
* The page sizes collection. Can contain numbers and [PageSizeItem]({% slug api_pager_pagesizeitem %}) objects.
|
|
644
705
|
*
|
|
@@ -790,6 +851,12 @@ class PagerPageSizesComponent extends PagerElementComponent {
|
|
|
790
851
|
* * `none`
|
|
791
852
|
*/
|
|
792
853
|
size = DEFAULT_SIZE;
|
|
854
|
+
/**
|
|
855
|
+
* Toggles the adaptiveness of the internal DropDownList.
|
|
856
|
+
*
|
|
857
|
+
* @default 'auto'
|
|
858
|
+
*/
|
|
859
|
+
adaptiveMode = 'auto';
|
|
793
860
|
/**
|
|
794
861
|
* @hidden
|
|
795
862
|
*
|
|
@@ -836,7 +903,7 @@ class PagerPageSizesComponent extends PagerElementComponent {
|
|
|
836
903
|
}
|
|
837
904
|
}
|
|
838
905
|
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: `
|
|
906
|
+
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
907
|
<kendo-dropdownlist kendoPagerFocusable
|
|
841
908
|
#dropdownlist
|
|
842
909
|
[size]="size"
|
|
@@ -846,9 +913,10 @@ class PagerPageSizesComponent extends PagerElementComponent {
|
|
|
846
913
|
[valuePrimitive]="true"
|
|
847
914
|
[value]="pageSize"
|
|
848
915
|
(valueChange)="pageSizeChange($event, dropdownlist)"
|
|
916
|
+
[adaptiveMode]="adaptiveMode"
|
|
849
917
|
[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 });
|
|
918
|
+
<ng-container *ngIf="showItemsText">{{ textFor('itemsPerPage') }}</ng-container>
|
|
919
|
+
`, 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
920
|
}
|
|
853
921
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PagerPageSizesComponent, decorators: [{
|
|
854
922
|
type: Component,
|
|
@@ -865,19 +933,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
865
933
|
[valuePrimitive]="true"
|
|
866
934
|
[value]="pageSize"
|
|
867
935
|
(valueChange)="pageSizeChange($event, dropdownlist)"
|
|
936
|
+
[adaptiveMode]="adaptiveMode"
|
|
868
937
|
[attr.aria-label]="textFor('itemsPerPage')"></kendo-dropdownlist>
|
|
869
|
-
{{ textFor('itemsPerPage') }}
|
|
938
|
+
<ng-container *ngIf="showItemsText">{{ textFor('itemsPerPage') }}</ng-container>
|
|
870
939
|
`,
|
|
871
940
|
standalone: true,
|
|
872
|
-
imports: [DropDownListComponent, PagerFocusableDirective]
|
|
941
|
+
imports: [DropDownListComponent, PagerFocusableDirective, NgIf]
|
|
873
942
|
}]
|
|
874
943
|
}], ctorParameters: function () { return [{ type: i1.LocalizationService }, { type: i0.ChangeDetectorRef }, { type: PagerContextService }, { type: i0.ElementRef }, { type: i0.NgZone }]; }, propDecorators: { dropDownList: [{
|
|
875
944
|
type: ViewChild,
|
|
876
945
|
args: ['dropdownlist', { static: true }]
|
|
946
|
+
}], showItemsText: [{
|
|
947
|
+
type: Input
|
|
877
948
|
}], pageSizes: [{
|
|
878
949
|
type: Input
|
|
879
950
|
}], size: [{
|
|
880
951
|
type: Input
|
|
952
|
+
}], adaptiveMode: [{
|
|
953
|
+
type: Input
|
|
881
954
|
}], classes: [{
|
|
882
955
|
type: HostBinding,
|
|
883
956
|
args: ["class.k-pager-sizes"]
|
|
@@ -1068,30 +1141,6 @@ class PagerNumericButtonsComponent extends PagerElementComponent {
|
|
|
1068
1141
|
}
|
|
1069
1142
|
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
1143
|
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
1144
|
<div class="k-pager-numbers" #numbers>
|
|
1096
1145
|
<button *ngIf="start > 1"
|
|
1097
1146
|
type="button"
|
|
@@ -1131,7 +1180,7 @@ class PagerNumericButtonsComponent extends PagerElementComponent {
|
|
|
1131
1180
|
[attr.title]="pageLabel(end + 1)"
|
|
1132
1181
|
(click)="changePage(end)">...</button>
|
|
1133
1182
|
</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: "
|
|
1183
|
+
`, 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
1184
|
}
|
|
1136
1185
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PagerNumericButtonsComponent, decorators: [{
|
|
1137
1186
|
type: Component,
|
|
@@ -1139,30 +1188,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
1139
1188
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
1140
1189
|
selector: 'kendo-datapager-numeric-buttons, kendo-pager-numeric-buttons',
|
|
1141
1190
|
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
1191
|
<div class="k-pager-numbers" #numbers>
|
|
1167
1192
|
<button *ngIf="start > 1"
|
|
1168
1193
|
type="button"
|
|
@@ -1204,7 +1229,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
1204
1229
|
</div>
|
|
1205
1230
|
`,
|
|
1206
1231
|
standalone: true,
|
|
1207
|
-
imports: [PagerFocusableDirective, NgIf, NgFor,
|
|
1232
|
+
imports: [PagerFocusableDirective, NgIf, NgFor, ButtonComponent]
|
|
1208
1233
|
}]
|
|
1209
1234
|
}], ctorParameters: function () { return [{ type: i1.LocalizationService }, { type: i0.ChangeDetectorRef }, { type: PagerContextService }, { type: i0.Renderer2 }]; }, propDecorators: { selectElement: [{
|
|
1210
1235
|
type: ViewChild,
|
|
@@ -1344,6 +1369,11 @@ class PagerInputComponent extends PagerElementComponent {
|
|
|
1344
1369
|
zone;
|
|
1345
1370
|
renderer;
|
|
1346
1371
|
numericInput;
|
|
1372
|
+
/**
|
|
1373
|
+
* Controls the visibility of the page text label.
|
|
1374
|
+
* @hidden
|
|
1375
|
+
*/
|
|
1376
|
+
showPageText = true;
|
|
1347
1377
|
/**
|
|
1348
1378
|
* Specifies the padding of the internal numeric input element.
|
|
1349
1379
|
*
|
|
@@ -1417,9 +1447,9 @@ class PagerInputComponent extends PagerElementComponent {
|
|
|
1417
1447
|
return this.totalPages !== 0;
|
|
1418
1448
|
}
|
|
1419
1449
|
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: `
|
|
1450
|
+
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
1451
|
<span class="k-pager-input">
|
|
1422
|
-
{{textFor('page')}}
|
|
1452
|
+
<ng-container *ngIf="showPageText">{{textFor('page')}}</ng-container>
|
|
1423
1453
|
<kendo-numerictextbox kendoPagerFocusable
|
|
1424
1454
|
[spinners]="false"
|
|
1425
1455
|
[decimals]="0"
|
|
@@ -1441,7 +1471,7 @@ class PagerInputComponent extends PagerElementComponent {
|
|
|
1441
1471
|
</kendo-numerictextbox>
|
|
1442
1472
|
{{textFor('of')}} {{totalPages}}
|
|
1443
1473
|
</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"] }] });
|
|
1474
|
+
`, 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
1475
|
}
|
|
1446
1476
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PagerInputComponent, decorators: [{
|
|
1447
1477
|
type: Component,
|
|
@@ -1449,7 +1479,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
1449
1479
|
selector: 'kendo-datapager-input, kendo-pager-input',
|
|
1450
1480
|
template: `
|
|
1451
1481
|
<span class="k-pager-input">
|
|
1452
|
-
{{textFor('page')}}
|
|
1482
|
+
<ng-container *ngIf="showPageText">{{textFor('page')}}</ng-container>
|
|
1453
1483
|
<kendo-numerictextbox kendoPagerFocusable
|
|
1454
1484
|
[spinners]="false"
|
|
1455
1485
|
[decimals]="0"
|
|
@@ -1473,11 +1503,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
1473
1503
|
</span>
|
|
1474
1504
|
`,
|
|
1475
1505
|
standalone: true,
|
|
1476
|
-
imports: [NgClass, NumericTextBoxComponent, PagerFocusableDirective, EventsOutsideAngularDirective]
|
|
1506
|
+
imports: [NgClass, NgIf, NumericTextBoxComponent, PagerFocusableDirective, EventsOutsideAngularDirective]
|
|
1477
1507
|
}]
|
|
1478
1508
|
}], ctorParameters: function () { return [{ type: i1.LocalizationService }, { type: PagerContextService }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }]; }, propDecorators: { numericInput: [{
|
|
1479
1509
|
type: ViewChild,
|
|
1480
1510
|
args: [NumericTextBoxComponent, { static: true }]
|
|
1511
|
+
}], showPageText: [{
|
|
1512
|
+
type: Input
|
|
1481
1513
|
}], size: [{
|
|
1482
1514
|
type: Input
|
|
1483
1515
|
}] } });
|
|
@@ -1550,28 +1582,40 @@ const packageMetadata = {
|
|
|
1550
1582
|
productName: 'Kendo UI for Angular',
|
|
1551
1583
|
productCode: 'KENDOUIANGULAR',
|
|
1552
1584
|
productCodes: ['KENDOUIANGULAR'],
|
|
1553
|
-
publishDate:
|
|
1554
|
-
version: '19.0.0-develop.
|
|
1585
|
+
publishDate: 1747133510,
|
|
1586
|
+
version: '19.0.0-develop.13',
|
|
1555
1587
|
licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'
|
|
1556
1588
|
};
|
|
1557
1589
|
|
|
1558
|
-
/**
|
|
1559
|
-
* @hidden
|
|
1560
|
-
*/
|
|
1561
|
-
const RESPONSIVE_BREAKPOINT_MEDIUM = 600;
|
|
1562
|
-
/**
|
|
1563
|
-
* @hidden
|
|
1564
|
-
*/
|
|
1565
|
-
const RESPONSIVE_BREAKPOINT_LARGE = 768;
|
|
1566
|
-
|
|
1567
1590
|
class PagerComponent {
|
|
1568
1591
|
pagerContext;
|
|
1569
1592
|
element;
|
|
1570
1593
|
localization;
|
|
1571
1594
|
renderer;
|
|
1572
1595
|
ngZone;
|
|
1596
|
+
cdr;
|
|
1573
1597
|
navigationService;
|
|
1574
1598
|
template;
|
|
1599
|
+
set numericButtons(buttons) {
|
|
1600
|
+
const newWidth = buttons ? buttons.nativeElement?.offsetWidth : 0;
|
|
1601
|
+
if (buttons && newWidth !== this.pagerDimensions.numericButtonsWidth) {
|
|
1602
|
+
this.pagerDimensions.numericButtonsWidth = newWidth;
|
|
1603
|
+
}
|
|
1604
|
+
}
|
|
1605
|
+
set pagerInput(input) {
|
|
1606
|
+
const newWidth = input ? input.nativeElement?.offsetWidth : 0;
|
|
1607
|
+
if (input && newWidth !== this.pagerDimensions.inputWidth) {
|
|
1608
|
+
this.pagerDimensions.inputWidth = newWidth;
|
|
1609
|
+
}
|
|
1610
|
+
}
|
|
1611
|
+
pagerInputComponent;
|
|
1612
|
+
set pageSizes(sizes) {
|
|
1613
|
+
const newWidth = sizes ? sizes.nativeElement?.offsetWidth : 0;
|
|
1614
|
+
if (sizes && newWidth !== this.pagerDimensions.pageSizesWidth) {
|
|
1615
|
+
this.pagerDimensions.pageSizesWidth = newWidth;
|
|
1616
|
+
}
|
|
1617
|
+
}
|
|
1618
|
+
pageSizesComponent;
|
|
1575
1619
|
/**
|
|
1576
1620
|
* @hidden
|
|
1577
1621
|
*/
|
|
@@ -1660,12 +1704,17 @@ class PagerComponent {
|
|
|
1660
1704
|
return this._size;
|
|
1661
1705
|
}
|
|
1662
1706
|
/**
|
|
1663
|
-
*
|
|
1664
|
-
* Toggles the Pager responsive functionality.
|
|
1707
|
+
* Toggles the Pager responsive functionality ([see example](slug:responsive_pager)).
|
|
1665
1708
|
*
|
|
1666
1709
|
* @default true
|
|
1667
1710
|
*/
|
|
1668
1711
|
responsive = true;
|
|
1712
|
+
/**
|
|
1713
|
+
* Toggles the Pager adaptiveness functionality ([see example](slug:adaptive_mode_pager)).
|
|
1714
|
+
*
|
|
1715
|
+
* @default 'auto'
|
|
1716
|
+
*/
|
|
1717
|
+
adaptiveMode = 'auto';
|
|
1669
1718
|
/**
|
|
1670
1719
|
* Fires when the current page of the Pager is changed ([see example](slug:overview_pager)).
|
|
1671
1720
|
* You have to handle the event yourself and page the data.
|
|
@@ -1709,6 +1758,14 @@ class PagerComponent {
|
|
|
1709
1758
|
context.currentPage = this.currentPage;
|
|
1710
1759
|
return context;
|
|
1711
1760
|
}
|
|
1761
|
+
/**
|
|
1762
|
+
* @hidden
|
|
1763
|
+
*/
|
|
1764
|
+
showInput = false;
|
|
1765
|
+
/**
|
|
1766
|
+
* @hidden
|
|
1767
|
+
*/
|
|
1768
|
+
initialized = false;
|
|
1712
1769
|
subscriptions = new Subscription();
|
|
1713
1770
|
_templateContext = {};
|
|
1714
1771
|
_pageSizeValues = DEFAULT_PAGE_SIZE_VALUES;
|
|
@@ -1716,12 +1773,29 @@ class PagerComponent {
|
|
|
1716
1773
|
isInnerNavigationEnabled = false;
|
|
1717
1774
|
_navigable = false;
|
|
1718
1775
|
_size = DEFAULT_SIZE;
|
|
1719
|
-
|
|
1776
|
+
/**
|
|
1777
|
+
* Stores the measurements of various Pager elements.
|
|
1778
|
+
* These dimensions are used for responsive layout calculations.
|
|
1779
|
+
* @hidden
|
|
1780
|
+
*/
|
|
1781
|
+
pagerDimensions = {
|
|
1782
|
+
padding: 0,
|
|
1783
|
+
numericButtonsWidth: 0,
|
|
1784
|
+
inputWidth: 0,
|
|
1785
|
+
pageSizesWidth: 0,
|
|
1786
|
+
sizesTextWidth: 0,
|
|
1787
|
+
pageTextWidth: 0,
|
|
1788
|
+
infoTextWidth: 0,
|
|
1789
|
+
gapNumbersSizes: 0,
|
|
1790
|
+
gapSizesInfo: 0
|
|
1791
|
+
};
|
|
1792
|
+
constructor(pagerContext, element, localization, renderer, ngZone, cdr, navigationService) {
|
|
1720
1793
|
this.pagerContext = pagerContext;
|
|
1721
1794
|
this.element = element;
|
|
1722
1795
|
this.localization = localization;
|
|
1723
1796
|
this.renderer = renderer;
|
|
1724
1797
|
this.ngZone = ngZone;
|
|
1798
|
+
this.cdr = cdr;
|
|
1725
1799
|
this.navigationService = navigationService;
|
|
1726
1800
|
validatePackage(packageMetadata);
|
|
1727
1801
|
this.direction = localization.rtl ? 'rtl' : 'ltr';
|
|
@@ -1738,6 +1812,8 @@ class PagerComponent {
|
|
|
1738
1812
|
this.subscriptions.add(this.pagerContext.pageSizeChange.subscribe(this.changePageSize.bind(this)));
|
|
1739
1813
|
this.subscriptions.add(this.localization.changes.subscribe(({ rtl }) => {
|
|
1740
1814
|
this.direction = rtl ? 'rtl' : 'ltr';
|
|
1815
|
+
this.measureAllTextWidths();
|
|
1816
|
+
this.responsive && this.resizeHandler();
|
|
1741
1817
|
}));
|
|
1742
1818
|
this.subscriptions.add(this.navigationService.innerNavigationChange.subscribe(this.innerNavigationChange.bind(this)));
|
|
1743
1819
|
if (this.navigable) {
|
|
@@ -1746,14 +1822,34 @@ class PagerComponent {
|
|
|
1746
1822
|
this.subscriptions.add(this.renderer.listen(wrapper, 'keydown', this.keyDownHandler.bind(this)));
|
|
1747
1823
|
});
|
|
1748
1824
|
}
|
|
1825
|
+
if (this.type === 'input') {
|
|
1826
|
+
this.showInput = true;
|
|
1827
|
+
}
|
|
1828
|
+
}
|
|
1829
|
+
get maxItems() {
|
|
1830
|
+
return Math.min(this.currentPage * this.pageSize, this.total);
|
|
1749
1831
|
}
|
|
1750
1832
|
ngAfterViewInit() {
|
|
1751
|
-
this.responsive && this.resizeHandler();
|
|
1752
1833
|
this.renderer.setAttribute(this.element.nativeElement, 'aria-label', this.ariaLabel);
|
|
1753
1834
|
this.subscriptions.add(this.template.changes.subscribe(() => {
|
|
1835
|
+
this.measureAllTextWidths();
|
|
1754
1836
|
this.responsive && this.resizeHandler();
|
|
1755
1837
|
}));
|
|
1756
1838
|
this.handleClasses(this.size, 'size');
|
|
1839
|
+
this.measureAllTextWidths();
|
|
1840
|
+
const padding = calculatePadding(this.element.nativeElement);
|
|
1841
|
+
this.pagerDimensions.padding = padding.padding;
|
|
1842
|
+
this.pagerDimensions.gapNumbersSizes = padding.gapNumbersSizes;
|
|
1843
|
+
this.pagerDimensions.gapSizesInfo = padding.gapSizesInfo;
|
|
1844
|
+
if (!isDocumentAvailable()) {
|
|
1845
|
+
this.initialized = true;
|
|
1846
|
+
return;
|
|
1847
|
+
}
|
|
1848
|
+
this.responsive && this.resizeHandler();
|
|
1849
|
+
setTimeout(() => {
|
|
1850
|
+
this.initialized = true;
|
|
1851
|
+
this.cdr.markForCheck();
|
|
1852
|
+
}, 0);
|
|
1757
1853
|
}
|
|
1758
1854
|
ngOnChanges(changes) {
|
|
1759
1855
|
if (anyChanged(["pageSize", "skip", "total"], changes, false)) {
|
|
@@ -1765,7 +1861,14 @@ class PagerComponent {
|
|
|
1765
1861
|
this.renderer.setAttribute(this.element.nativeElement, 'aria-label', this.ariaLabel);
|
|
1766
1862
|
}
|
|
1767
1863
|
if (changes['responsive']) {
|
|
1864
|
+
this.measureAllTextWidths();
|
|
1768
1865
|
this.responsive && this.resizeHandler();
|
|
1866
|
+
if (!this.responsive) {
|
|
1867
|
+
this.showInput = this.type === 'input';
|
|
1868
|
+
}
|
|
1869
|
+
}
|
|
1870
|
+
if (changes['type']) {
|
|
1871
|
+
this.showNumericButtonsResponsive();
|
|
1769
1872
|
}
|
|
1770
1873
|
}
|
|
1771
1874
|
ngOnDestroy() {
|
|
@@ -1807,40 +1910,37 @@ class PagerComponent {
|
|
|
1807
1910
|
if (this.template?.first && !this.responsive) {
|
|
1808
1911
|
return;
|
|
1809
1912
|
}
|
|
1810
|
-
|
|
1913
|
+
if (!isDocumentAvailable() || !this.element?.nativeElement) {
|
|
1914
|
+
this.initialized = true;
|
|
1915
|
+
return;
|
|
1916
|
+
}
|
|
1917
|
+
let pagerWidth = this.element.nativeElement.offsetWidth;
|
|
1918
|
+
if (pagerWidth <= 0) {
|
|
1919
|
+
return;
|
|
1920
|
+
}
|
|
1811
1921
|
this.ngZone.runOutsideAngular(() => {
|
|
1812
1922
|
setTimeout(() => {
|
|
1813
|
-
|
|
1923
|
+
if (this.template?.first || !this.responsive) {
|
|
1924
|
+
return;
|
|
1925
|
+
}
|
|
1926
|
+
const numericButtonsWrapperElement = this.element.nativeElement.querySelector('.k-pager-numbers-wrap');
|
|
1814
1927
|
const pagerInfoElement = this.element.nativeElement.querySelector('.k-pager-info');
|
|
1815
1928
|
const pagerPageSizes = this.element.nativeElement.querySelector('.k-pager-sizes');
|
|
1816
|
-
|
|
1817
|
-
|
|
1818
|
-
|
|
1819
|
-
|
|
1820
|
-
|
|
1821
|
-
|
|
1822
|
-
|
|
1823
|
-
else {
|
|
1824
|
-
this.renderer.addClass(selectElement, 'k-hidden');
|
|
1825
|
-
this.renderer.removeClass(numbersElement, 'k-hidden');
|
|
1826
|
-
}
|
|
1929
|
+
let elementsWidths = numericButtonsWrapperElement?.offsetWidth + (pagerPageSizes?.offsetWidth || 0) + (pagerInfoElement?.offsetWidth > 0 ? Math.min(this.pagerDimensions.infoTextWidth) : 0);
|
|
1930
|
+
if (this.isElementVisible(pagerInfoElement)) {
|
|
1931
|
+
elementsWidths += this.pagerDimensions.gapSizesInfo;
|
|
1932
|
+
}
|
|
1933
|
+
pagerWidth -= this.pagerDimensions.padding;
|
|
1934
|
+
if (this.isElementVisible(pagerPageSizes)) {
|
|
1935
|
+
pagerWidth -= this.pagerDimensions.gapNumbersSizes;
|
|
1827
1936
|
}
|
|
1828
|
-
if (
|
|
1829
|
-
|
|
1830
|
-
this.renderer.addClass(pagerInfoElement, 'k-hidden');
|
|
1831
|
-
}
|
|
1832
|
-
else {
|
|
1833
|
-
this.renderer.removeClass(pagerInfoElement, 'k-hidden');
|
|
1834
|
-
}
|
|
1937
|
+
if (Math.ceil(elementsWidths) <= pagerWidth) {
|
|
1938
|
+
this.showElementsInOrder(pagerWidth, elementsWidths);
|
|
1835
1939
|
}
|
|
1836
|
-
|
|
1837
|
-
|
|
1838
|
-
this.renderer.addClass(pagerPageSizes, 'k-hidden');
|
|
1839
|
-
}
|
|
1840
|
-
else {
|
|
1841
|
-
this.renderer.removeClass(pagerPageSizes, 'k-hidden');
|
|
1842
|
-
}
|
|
1940
|
+
else {
|
|
1941
|
+
this.hideElementsInOrder(pagerWidth, elementsWidths);
|
|
1843
1942
|
}
|
|
1943
|
+
!this.initialized && this.ngZone.onStable.pipe(take(1)).subscribe(() => this.initialized = true);
|
|
1844
1944
|
});
|
|
1845
1945
|
});
|
|
1846
1946
|
};
|
|
@@ -1918,8 +2018,172 @@ class PagerComponent {
|
|
|
1918
2018
|
this.renderer.addClass(elem, classes.toAdd);
|
|
1919
2019
|
}
|
|
1920
2020
|
}
|
|
1921
|
-
|
|
1922
|
-
|
|
2021
|
+
showElementsInOrder(availableWidth, currentWidth) {
|
|
2022
|
+
const el = this.element.nativeElement;
|
|
2023
|
+
const numericButtonsElement = el.querySelector('kendo-datapager-numeric-buttons, kendo-pager-numeric-buttons');
|
|
2024
|
+
const pagerInfoElement = el.querySelector('.k-pager-info');
|
|
2025
|
+
const pagerPageSizes = el.querySelector('.k-pager-sizes');
|
|
2026
|
+
const pagerInput = el.querySelector('kendo-pager-input');
|
|
2027
|
+
const pagerSizesDropDown = el.querySelector('.k-pager-sizes .k-dropdownlist');
|
|
2028
|
+
if (this.type === 'input' && this.isElementVisible(pagerInfoElement) || this.isElementVisible(numericButtonsElement)) {
|
|
2029
|
+
return;
|
|
2030
|
+
}
|
|
2031
|
+
if (!this.isElementVisible(pagerPageSizes)) {
|
|
2032
|
+
const addDropDownWidth = currentWidth + this.pagerDimensions.pageSizesWidth + this.pagerDimensions.gapNumbersSizes - this.pagerDimensions.sizesTextWidth;
|
|
2033
|
+
if (addDropDownWidth > availableWidth)
|
|
2034
|
+
return;
|
|
2035
|
+
this.ngZone.run(() => this.pageSizesComponent && (this.pageSizesComponent.showItemsText = false));
|
|
2036
|
+
this.showElement(pagerPageSizes);
|
|
2037
|
+
currentWidth = addDropDownWidth;
|
|
2038
|
+
if (currentWidth >= availableWidth)
|
|
2039
|
+
return;
|
|
2040
|
+
}
|
|
2041
|
+
if (this.isElementVisible(pagerPageSizes) && this.pageSizesComponent && !this.pageSizesComponent.showItemsText) {
|
|
2042
|
+
const addPageSizesText = currentWidth - pagerSizesDropDown?.offsetWidth + this.pagerDimensions.pageSizesWidth;
|
|
2043
|
+
if (addPageSizesText > availableWidth)
|
|
2044
|
+
return;
|
|
2045
|
+
this.ngZone.run(() => this.pageSizesComponent.showItemsText = true);
|
|
2046
|
+
currentWidth = addPageSizesText;
|
|
2047
|
+
if (currentWidth >= availableWidth)
|
|
2048
|
+
return;
|
|
2049
|
+
}
|
|
2050
|
+
if (this.isElementVisible(pagerPageSizes) && this.pageSizesComponent?.showItemsText && this.pagerInputComponent && !this.pagerInputComponent.showPageText) {
|
|
2051
|
+
const addPageText = currentWidth - pagerInput?.offsetWidth + this.pagerDimensions.inputWidth;
|
|
2052
|
+
if (addPageText > availableWidth)
|
|
2053
|
+
return;
|
|
2054
|
+
this.ngZone.run(() => this.pagerInputComponent.showPageText = true);
|
|
2055
|
+
currentWidth = addPageText;
|
|
2056
|
+
if (currentWidth >= availableWidth)
|
|
2057
|
+
return;
|
|
2058
|
+
}
|
|
2059
|
+
if (this.isElementVisible(pagerPageSizes) && this.pagerInputComponent?.showPageText) {
|
|
2060
|
+
const addInfoText = currentWidth + this.pagerDimensions.infoTextWidth + this.pagerDimensions.gapSizesInfo;
|
|
2061
|
+
if (addInfoText > availableWidth)
|
|
2062
|
+
return;
|
|
2063
|
+
this.ngZone.run(() => {
|
|
2064
|
+
this.showElement(pagerInfoElement);
|
|
2065
|
+
});
|
|
2066
|
+
currentWidth = addInfoText;
|
|
2067
|
+
}
|
|
2068
|
+
if (this.isElementVisible(pagerInfoElement) && this.type === 'numeric') {
|
|
2069
|
+
const addNumericButtons = currentWidth - this.pagerDimensions.inputWidth + this.pagerDimensions.numericButtonsWidth;
|
|
2070
|
+
if (addNumericButtons > availableWidth)
|
|
2071
|
+
return;
|
|
2072
|
+
this.showElement(numericButtonsElement);
|
|
2073
|
+
this.ngZone.run(() => {
|
|
2074
|
+
this.showInput = false;
|
|
2075
|
+
this.cdr.markForCheck();
|
|
2076
|
+
});
|
|
2077
|
+
}
|
|
2078
|
+
}
|
|
2079
|
+
hideElementsInOrder(availableWidth, currentWidth) {
|
|
2080
|
+
const el = this.element.nativeElement;
|
|
2081
|
+
const numericButtonsElement = el.querySelector('kendo-datapager-numeric-buttons, kendo-pager-numeric-buttons');
|
|
2082
|
+
const pagerInfoElement = el.querySelector('.k-pager-info');
|
|
2083
|
+
const pagerPageSizes = el.querySelector('.k-pager-sizes');
|
|
2084
|
+
const pagerSizesDropDown = el.querySelector('.k-pager-sizes .k-dropdownlist');
|
|
2085
|
+
if (this.isElementVisible(numericButtonsElement)) {
|
|
2086
|
+
this.hideElement(numericButtonsElement);
|
|
2087
|
+
this.ngZone.run(() => this.showInput = true);
|
|
2088
|
+
currentWidth += this.pagerDimensions.inputWidth - this.pagerDimensions.numericButtonsWidth;
|
|
2089
|
+
if (currentWidth <= availableWidth)
|
|
2090
|
+
return;
|
|
2091
|
+
}
|
|
2092
|
+
if (this.isElementVisible(pagerInfoElement)) {
|
|
2093
|
+
this.hideElement(pagerInfoElement);
|
|
2094
|
+
currentWidth -= this.pagerDimensions.infoTextWidth;
|
|
2095
|
+
if (currentWidth <= availableWidth)
|
|
2096
|
+
return;
|
|
2097
|
+
}
|
|
2098
|
+
if (this.pagerInputComponent?.showPageText) {
|
|
2099
|
+
this.ngZone.run(() => this.pagerInputComponent.showPageText = false);
|
|
2100
|
+
currentWidth = currentWidth - this.pagerDimensions.pageTextWidth;
|
|
2101
|
+
if (currentWidth <= availableWidth)
|
|
2102
|
+
return;
|
|
2103
|
+
}
|
|
2104
|
+
if (this.isElementVisible(pagerPageSizes) && this.pageSizesComponent?.showItemsText) {
|
|
2105
|
+
this.ngZone.run(() => this.pageSizesComponent.showItemsText = false);
|
|
2106
|
+
currentWidth = currentWidth - this.pagerDimensions.pageSizesWidth + pagerSizesDropDown?.offsetWidth;
|
|
2107
|
+
if (currentWidth <= availableWidth)
|
|
2108
|
+
return;
|
|
2109
|
+
}
|
|
2110
|
+
this.hideElement(pagerPageSizes);
|
|
2111
|
+
}
|
|
2112
|
+
isElementVisible(element) {
|
|
2113
|
+
return element && !element?.classList.contains('k-hidden');
|
|
2114
|
+
}
|
|
2115
|
+
hideElement(element) {
|
|
2116
|
+
if (element) {
|
|
2117
|
+
this.renderer.addClass(element, 'k-hidden');
|
|
2118
|
+
}
|
|
2119
|
+
}
|
|
2120
|
+
showElement(element) {
|
|
2121
|
+
if (element) {
|
|
2122
|
+
this.renderer.removeClass(element, 'k-hidden');
|
|
2123
|
+
}
|
|
2124
|
+
}
|
|
2125
|
+
measureAllTextWidths() {
|
|
2126
|
+
if (!isDocumentAvailable()) {
|
|
2127
|
+
return;
|
|
2128
|
+
}
|
|
2129
|
+
const el = this.element.nativeElement;
|
|
2130
|
+
const existingInfo = el.querySelector('.k-pager-info');
|
|
2131
|
+
const existingInput = el.querySelector('.k-pager-input');
|
|
2132
|
+
const existingSizes = el.querySelector('.k-pager-sizes');
|
|
2133
|
+
// create a single measurement container
|
|
2134
|
+
const measureContainer = this.renderer.createElement('div');
|
|
2135
|
+
positionOffScreen(this.renderer, measureContainer);
|
|
2136
|
+
this.renderer.appendChild(this.element.nativeElement, measureContainer);
|
|
2137
|
+
const infoSpan = createMeasurementSpan(this.renderer, measureContainer, 'k-pager-info');
|
|
2138
|
+
const pageSpan = createMeasurementSpan(this.renderer, measureContainer, 'k-pager-input');
|
|
2139
|
+
const sizesSpan = createMeasurementSpan(this.renderer, measureContainer, 'k-pager-sizes');
|
|
2140
|
+
const infoText = `${this.currentPage} - ${this.maxItems} ${this.localization.get('of')} ${this.total} ${this.localization.get('items')}`;
|
|
2141
|
+
this.renderer.setProperty(infoSpan, 'textContent', infoText);
|
|
2142
|
+
this.renderer.setProperty(pageSpan, 'textContent', this.localization.get('page'));
|
|
2143
|
+
this.renderer.setProperty(sizesSpan, 'textContent', this.localization.get('itemsPerPage'));
|
|
2144
|
+
// copy computed styles if available
|
|
2145
|
+
if (existingInfo)
|
|
2146
|
+
copyComputedStyles(this.renderer, existingInfo, infoSpan);
|
|
2147
|
+
if (existingInput)
|
|
2148
|
+
copyComputedStyles(this.renderer, existingInput, pageSpan);
|
|
2149
|
+
if (existingSizes)
|
|
2150
|
+
copyComputedStyles(this.renderer, existingSizes, sizesSpan);
|
|
2151
|
+
// force a reflow to ensure measurements are accurate
|
|
2152
|
+
measureContainer.getBoundingClientRect();
|
|
2153
|
+
this.pagerDimensions.infoTextWidth = infoSpan?.offsetWidth;
|
|
2154
|
+
if (this.pagerDimensions.inputWidth && this.pagerDimensions.pageTextWidth) {
|
|
2155
|
+
this.pagerDimensions.inputWidth = this.pagerDimensions.inputWidth - this.pagerDimensions.pageTextWidth + pageSpan.offsetWidth;
|
|
2156
|
+
}
|
|
2157
|
+
this.pagerDimensions.pageTextWidth = pageSpan?.offsetWidth;
|
|
2158
|
+
if (this.pagerDimensions.pageSizesWidth && this.pagerDimensions.sizesTextWidth) {
|
|
2159
|
+
this.pagerDimensions.pageSizesWidth = this.pagerDimensions.pageSizesWidth - this.pagerDimensions.sizesTextWidth + sizesSpan.offsetWidth;
|
|
2160
|
+
}
|
|
2161
|
+
this.pagerDimensions.sizesTextWidth = sizesSpan?.offsetWidth;
|
|
2162
|
+
this.renderer.removeChild(this.element.nativeElement, measureContainer);
|
|
2163
|
+
}
|
|
2164
|
+
showNumericButtonsResponsive() {
|
|
2165
|
+
if (!this.responsive || (!this.numericButtons && !this.pagerInput) || !isDocumentAvailable()) {
|
|
2166
|
+
this.showInput = this.type === 'input';
|
|
2167
|
+
return;
|
|
2168
|
+
}
|
|
2169
|
+
const pagerInfoElement = this.element.nativeElement.querySelector('.k-pager-info');
|
|
2170
|
+
if (this.type === 'input' || !this.isElementVisible(pagerInfoElement)) {
|
|
2171
|
+
this.showInput = true;
|
|
2172
|
+
return;
|
|
2173
|
+
}
|
|
2174
|
+
const numericButtonsElement = this.element.nativeElement.querySelector('kendo-datapager-numeric-buttons, kendo-pager-numeric-buttons');
|
|
2175
|
+
if (this.isElementVisible(numericButtonsElement)) {
|
|
2176
|
+
this.showInput = false;
|
|
2177
|
+
return;
|
|
2178
|
+
}
|
|
2179
|
+
const pagerWidth = this.element.nativeElement?.offsetWidth;
|
|
2180
|
+
const numericButtonsWrapperElement = this.element.nativeElement.querySelector('.k-pager-numbers-wrap');
|
|
2181
|
+
const elementsWidths = numericButtonsWrapperElement?.offsetWidth + this.pagerDimensions.pageSizesWidth + this.pagerDimensions.infoTextWidth + this.pagerDimensions.gapSizesInfo;
|
|
2182
|
+
const hasAvailableWidth = pagerWidth > elementsWidths - this.pagerDimensions.inputWidth + this.pagerDimensions.numericButtonsWidth;
|
|
2183
|
+
this.showInput = !hasAvailableWidth;
|
|
2184
|
+
}
|
|
2185
|
+
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 });
|
|
2186
|
+
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" }, 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: [
|
|
1923
2187
|
LocalizationService,
|
|
1924
2188
|
PagerContextService,
|
|
1925
2189
|
PagerNavigationService,
|
|
@@ -1927,7 +2191,7 @@ class PagerComponent {
|
|
|
1927
2191
|
provide: L10N_PREFIX,
|
|
1928
2192
|
useValue: 'kendo.pager'
|
|
1929
2193
|
}
|
|
1930
|
-
], queries: [{ propertyName: "template", predicate: PagerTemplateDirective }], exportAs: ["kendoDataPager", "kendoPager"], usesOnChanges: true, ngImport: i0, template: `
|
|
2194
|
+
], 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
2195
|
<ng-container kendoPagerLocalizedMessages
|
|
1932
2196
|
i18n-ariaLabel="kendo.pager.ariaLabel|The value of the aria-label attribute of the Pager"
|
|
1933
2197
|
ariaLabel="{{ 'Page navigation, page {currentPage} of {totalPages}' }}"
|
|
@@ -1972,25 +2236,27 @@ class PagerComponent {
|
|
|
1972
2236
|
[ngTemplateOutletContext]="templateContext">
|
|
1973
2237
|
</ng-container>
|
|
1974
2238
|
<ng-template #default>
|
|
1975
|
-
<div class="k-pager-numbers-wrap">
|
|
2239
|
+
<div class="k-pager-numbers-wrap" [ngStyle]="{opacity: initialized ? '1' : '0'}">
|
|
1976
2240
|
<kendo-pager-prev-buttons [size]="size" *ngIf="previousNext"></kendo-pager-prev-buttons>
|
|
1977
2241
|
<kendo-pager-numeric-buttons
|
|
1978
2242
|
[size]="size"
|
|
1979
2243
|
*ngIf="type === 'numeric' && buttonCount > 0"
|
|
1980
2244
|
[buttonCount]="buttonCount">
|
|
1981
2245
|
</kendo-pager-numeric-buttons>
|
|
1982
|
-
<kendo-pager-input [size]="size" *ngIf="
|
|
2246
|
+
<kendo-pager-input [size]="size" *ngIf="showInput"></kendo-pager-input>
|
|
1983
2247
|
<kendo-pager-next-buttons [size]="size" *ngIf="previousNext"></kendo-pager-next-buttons>
|
|
1984
2248
|
</div>
|
|
1985
2249
|
<kendo-pager-page-sizes *ngIf="_pageSizeValues.length"
|
|
2250
|
+
[ngStyle]="{opacity: initialized ? '1' : '0'}"
|
|
1986
2251
|
[size]="size"
|
|
1987
|
-
[pageSizes]="_pageSizeValues"
|
|
2252
|
+
[pageSizes]="_pageSizeValues"
|
|
2253
|
+
[adaptiveMode]="adaptiveMode">
|
|
1988
2254
|
</kendo-pager-page-sizes>
|
|
1989
|
-
<kendo-pager-info *ngIf="info">
|
|
2255
|
+
<kendo-pager-info *ngIf="info" [ngStyle]="{opacity: initialized ? '1' : '0'}">
|
|
1990
2256
|
</kendo-pager-info>
|
|
1991
2257
|
</ng-template>
|
|
1992
2258
|
<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"] }] });
|
|
2259
|
+
`, 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
2260
|
}
|
|
1995
2261
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PagerComponent, decorators: [{
|
|
1996
2262
|
type: Component,
|
|
@@ -2051,39 +2317,56 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
2051
2317
|
[ngTemplateOutletContext]="templateContext">
|
|
2052
2318
|
</ng-container>
|
|
2053
2319
|
<ng-template #default>
|
|
2054
|
-
<div class="k-pager-numbers-wrap">
|
|
2320
|
+
<div class="k-pager-numbers-wrap" [ngStyle]="{opacity: initialized ? '1' : '0'}">
|
|
2055
2321
|
<kendo-pager-prev-buttons [size]="size" *ngIf="previousNext"></kendo-pager-prev-buttons>
|
|
2056
2322
|
<kendo-pager-numeric-buttons
|
|
2057
2323
|
[size]="size"
|
|
2058
2324
|
*ngIf="type === 'numeric' && buttonCount > 0"
|
|
2059
2325
|
[buttonCount]="buttonCount">
|
|
2060
2326
|
</kendo-pager-numeric-buttons>
|
|
2061
|
-
<kendo-pager-input [size]="size" *ngIf="
|
|
2327
|
+
<kendo-pager-input [size]="size" *ngIf="showInput"></kendo-pager-input>
|
|
2062
2328
|
<kendo-pager-next-buttons [size]="size" *ngIf="previousNext"></kendo-pager-next-buttons>
|
|
2063
2329
|
</div>
|
|
2064
2330
|
<kendo-pager-page-sizes *ngIf="_pageSizeValues.length"
|
|
2331
|
+
[ngStyle]="{opacity: initialized ? '1' : '0'}"
|
|
2065
2332
|
[size]="size"
|
|
2066
|
-
[pageSizes]="_pageSizeValues"
|
|
2333
|
+
[pageSizes]="_pageSizeValues"
|
|
2334
|
+
[adaptiveMode]="adaptiveMode">
|
|
2067
2335
|
</kendo-pager-page-sizes>
|
|
2068
|
-
<kendo-pager-info *ngIf="info">
|
|
2336
|
+
<kendo-pager-info *ngIf="info" [ngStyle]="{opacity: initialized ? '1' : '0'}">
|
|
2069
2337
|
</kendo-pager-info>
|
|
2070
2338
|
</ng-template>
|
|
2071
2339
|
<kendo-resize-sensor *ngIf="responsive" (resize)="resizeHandler()"></kendo-resize-sensor>
|
|
2072
2340
|
`,
|
|
2073
2341
|
standalone: true,
|
|
2074
|
-
imports: [LocalizedMessagesDirective, NgIf, NgTemplateOutlet, PagerPrevButtonsComponent, PagerNumericButtonsComponent, PagerInputComponent, PagerNextButtonsComponent, PagerPageSizesComponent, PagerInfoComponent, ResizeSensorComponent]
|
|
2342
|
+
imports: [LocalizedMessagesDirective, NgIf, NgTemplateOutlet, PagerPrevButtonsComponent, PagerNumericButtonsComponent, PagerInputComponent, PagerNextButtonsComponent, PagerPageSizesComponent, PagerInfoComponent, ResizeSensorComponent, NgStyle]
|
|
2075
2343
|
}]
|
|
2076
2344
|
}], ctorParameters: function () { return [{ type: PagerContextService, decorators: [{
|
|
2077
2345
|
type: Optional
|
|
2078
2346
|
}, {
|
|
2079
2347
|
type: SkipSelf
|
|
2080
|
-
}] }, { type: i0.ElementRef }, { type: i1.LocalizationService }, { type: i0.Renderer2 }, { type: i0.NgZone }, { type: PagerNavigationService, decorators: [{
|
|
2348
|
+
}] }, { type: i0.ElementRef }, { type: i1.LocalizationService }, { type: i0.Renderer2 }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: PagerNavigationService, decorators: [{
|
|
2081
2349
|
type: Optional
|
|
2082
2350
|
}, {
|
|
2083
2351
|
type: SkipSelf
|
|
2084
2352
|
}] }]; }, propDecorators: { template: [{
|
|
2085
2353
|
type: ContentChildren,
|
|
2086
2354
|
args: [PagerTemplateDirective]
|
|
2355
|
+
}], numericButtons: [{
|
|
2356
|
+
type: ViewChild,
|
|
2357
|
+
args: [PagerNumericButtonsComponent, { read: ElementRef }]
|
|
2358
|
+
}], pagerInput: [{
|
|
2359
|
+
type: ViewChild,
|
|
2360
|
+
args: [PagerInputComponent, { read: ElementRef }]
|
|
2361
|
+
}], pagerInputComponent: [{
|
|
2362
|
+
type: ViewChild,
|
|
2363
|
+
args: [PagerInputComponent]
|
|
2364
|
+
}], pageSizes: [{
|
|
2365
|
+
type: ViewChild,
|
|
2366
|
+
args: [PagerPageSizesComponent, { read: ElementRef }]
|
|
2367
|
+
}], pageSizesComponent: [{
|
|
2368
|
+
type: ViewChild,
|
|
2369
|
+
args: [PagerPageSizesComponent]
|
|
2087
2370
|
}], externalTemplate: [{
|
|
2088
2371
|
type: Input
|
|
2089
2372
|
}], total: [{
|
|
@@ -2108,6 +2391,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
2108
2391
|
type: Input
|
|
2109
2392
|
}], responsive: [{
|
|
2110
2393
|
type: Input
|
|
2394
|
+
}], adaptiveMode: [{
|
|
2395
|
+
type: Input
|
|
2111
2396
|
}], pageChange: [{
|
|
2112
2397
|
type: Output
|
|
2113
2398
|
}], pageSizeChange: [{
|