pdm-ui-kit 0.1.34 → 0.1.35
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/components/pagination/pagination.component.mjs +63 -9
- package/fesm2015/pdm-ui-kit.mjs +62 -8
- package/fesm2015/pdm-ui-kit.mjs.map +1 -1
- package/fesm2020/pdm-ui-kit.mjs +62 -8
- package/fesm2020/pdm-ui-kit.mjs.map +1 -1
- package/lib/components/pagination/pagination.component.d.ts +12 -4
- package/package.json +1 -1
|
@@ -3,18 +3,46 @@ import * as i0 from "@angular/core";
|
|
|
3
3
|
import * as i1 from "@angular/common";
|
|
4
4
|
import * as i2 from "../icon/icon.component";
|
|
5
5
|
import * as i3 from "../select/select.component";
|
|
6
|
+
const coerceNumber = (value, fallback) => {
|
|
7
|
+
const next = Number(value);
|
|
8
|
+
return Number.isFinite(next) ? next : fallback;
|
|
9
|
+
};
|
|
6
10
|
export class PdmPaginationComponent {
|
|
7
11
|
constructor() {
|
|
8
|
-
this.
|
|
9
|
-
this.
|
|
10
|
-
this.
|
|
12
|
+
this._page = 1;
|
|
13
|
+
this._pageCount = 1;
|
|
14
|
+
this._maxVisible = 4;
|
|
15
|
+
this._rowsPerPage = 10;
|
|
11
16
|
this.className = '';
|
|
12
17
|
this.rowsPerPageLabel = 'Rows per page';
|
|
13
|
-
this.rowsPerPage = 10;
|
|
14
18
|
this.rowsPerPageOptions = [10, 20, 30, 50];
|
|
15
19
|
this.pageChange = new EventEmitter();
|
|
16
20
|
this.rowsPerPageChange = new EventEmitter();
|
|
17
21
|
}
|
|
22
|
+
get page() {
|
|
23
|
+
return this._page;
|
|
24
|
+
}
|
|
25
|
+
set page(value) {
|
|
26
|
+
this._page = coerceNumber(value, 1);
|
|
27
|
+
}
|
|
28
|
+
get pageCount() {
|
|
29
|
+
return this._pageCount;
|
|
30
|
+
}
|
|
31
|
+
set pageCount(value) {
|
|
32
|
+
this._pageCount = coerceNumber(value, 1);
|
|
33
|
+
}
|
|
34
|
+
get maxVisible() {
|
|
35
|
+
return this._maxVisible;
|
|
36
|
+
}
|
|
37
|
+
set maxVisible(value) {
|
|
38
|
+
this._maxVisible = coerceNumber(value, 4);
|
|
39
|
+
}
|
|
40
|
+
get rowsPerPage() {
|
|
41
|
+
return this._rowsPerPage;
|
|
42
|
+
}
|
|
43
|
+
set rowsPerPage(value) {
|
|
44
|
+
this._rowsPerPage = coerceNumber(value, 10);
|
|
45
|
+
}
|
|
18
46
|
get rowsPerPageSelectOptions() {
|
|
19
47
|
return this.rowsPerPageOptions.map((value) => ({
|
|
20
48
|
label: String(value),
|
|
@@ -26,15 +54,40 @@ export class PdmPaginationComponent {
|
|
|
26
54
|
}
|
|
27
55
|
get visiblePages() {
|
|
28
56
|
const total = Math.max(1, this.pageCount);
|
|
29
|
-
|
|
57
|
+
const maxVisible = Math.max(1, this.maxVisible);
|
|
58
|
+
if (total <= maxVisible) {
|
|
30
59
|
return Array.from({ length: total }, (_, i) => i + 1);
|
|
31
60
|
}
|
|
32
|
-
|
|
61
|
+
const current = Math.min(Math.max(1, this.page), total);
|
|
62
|
+
const windowSize = Math.max(1, maxVisible - 1);
|
|
63
|
+
const startThreshold = Math.ceil(windowSize / 2);
|
|
64
|
+
const endThreshold = total - Math.floor(windowSize / 2);
|
|
65
|
+
const range = (start, end) => Array.from({ length: end - start + 1 }, (_, i) => start + i);
|
|
66
|
+
if (current <= startThreshold) {
|
|
67
|
+
const end = Math.min(windowSize, total - 1);
|
|
68
|
+
return [...range(1, end), 'ellipsis', total];
|
|
69
|
+
}
|
|
70
|
+
if (current >= endThreshold) {
|
|
71
|
+
const start = Math.max(1, total - windowSize);
|
|
72
|
+
const pages = range(start, total);
|
|
73
|
+
if (pages[0] === 1) {
|
|
74
|
+
return pages;
|
|
75
|
+
}
|
|
76
|
+
return [1, 'ellipsis', ...pages];
|
|
77
|
+
}
|
|
78
|
+
let start = current - Math.floor(windowSize / 2);
|
|
79
|
+
let end = start + windowSize - 1;
|
|
80
|
+
if (end >= total) {
|
|
81
|
+
end = total - 1;
|
|
82
|
+
start = end - windowSize + 1;
|
|
83
|
+
}
|
|
84
|
+
return [...range(start, end), 'ellipsis', total];
|
|
33
85
|
}
|
|
34
86
|
setPage(next) {
|
|
35
87
|
if (next < 1 || next > this.pageCount || next === this.page) {
|
|
36
88
|
return;
|
|
37
89
|
}
|
|
90
|
+
this._page = next;
|
|
38
91
|
this.pageChange.emit(next);
|
|
39
92
|
}
|
|
40
93
|
onRowsPerPageChangeValue(value) {
|
|
@@ -42,14 +95,15 @@ export class PdmPaginationComponent {
|
|
|
42
95
|
if (!Number.isFinite(next) || next <= 0 || next === this.rowsPerPage) {
|
|
43
96
|
return;
|
|
44
97
|
}
|
|
98
|
+
this._rowsPerPage = next;
|
|
45
99
|
this.rowsPerPageChange.emit(next);
|
|
46
100
|
}
|
|
47
101
|
}
|
|
48
102
|
PdmPaginationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmPaginationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
49
|
-
PdmPaginationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PdmPaginationComponent, selector: "pdm-pagination", inputs: { page: "page", pageCount: "pageCount", maxVisible: "maxVisible", className: "className", rowsPerPageLabel: "rowsPerPageLabel", rowsPerPage: "rowsPerPage", rowsPerPageOptions: "rowsPerPageOptions" }, outputs: { pageChange: "pageChange", rowsPerPageChange: "rowsPerPageChange" }, ngImport: i0, template: "<nav\n aria-label=\"Pagination\"\n [ngClass]=\"[\n 'mx-auto flex w-full flex-wrap items-center justify-center gap-4',\n className,\n ]\"\n>\n <div class=\"flex items-center gap-3\" *ngIf=\"rowsPerPageOptions.length > 0\">\n <span class=\"text-sm font-medium text-foreground\">{{\n rowsPerPageLabel\n }}</span>\n <pdm-select\n [value]=\"rowsPerPageValue\"\n [options]=\"rowsPerPageSelectOptions\"\n [placeholder]=\"rowsPerPageValue\"\n className=\"w-[120px]\"\n (valueChange)=\"onRowsPerPageChangeValue($event)\"\n ></pdm-select>\n </div>\n\n <ul class=\"m-0 flex list-none items-center gap-1 p-0\">\n <li>\n <button\n type=\"button\"\n class=\"inline-flex h-9 appearance-none items-center justify-center gap-1 rounded-md border-0 bg-transparent px-2 text-sm text-foreground hover:bg-accent disabled:opacity-50 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\"\n [disabled]=\"page <= 1\"\n (click)=\"setPage(page - 1)\"\n >\n <pdm-icon name=\"chevron-left\" [size]=\"14\"></pdm-icon>\n Previous\n </button>\n </li>\n <li *ngFor=\"let pageNumber of visiblePages\">\n <ng-container *ngIf=\"pageNumber === 'ellipsis'; else pageButton\">\n <span\n class=\"inline-flex h-9 min-w-9 items-center justify-center px-2 text-sm text-muted-foreground\"\n >...</span\n >\n </ng-container>\n <ng-template #pageButton>\n <button\n type=\"button\"\n [ngClass]=\"[\n 'inline-flex h-9 min-w-9 items-center justify-center rounded-md px-2 text-sm ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n pageNumber === page\n ? 'appearance-none border border-border bg-muted text-foreground shadow-sm'\n : 'appearance-none border-0 bg-transparent text-foreground hover:bg-accent hover:text-accent-foreground',\n ]\"\n (click)=\"setPage(+pageNumber)\"\n >\n {{ pageNumber }}\n </button>\n </ng-template>\n </li>\n <li>\n <button\n type=\"button\"\n class=\"inline-flex h-9 appearance-none items-center justify-center gap-1 rounded-md border-0 bg-transparent px-2 text-sm text-foreground hover:bg-accent disabled:opacity-50 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\"\n [disabled]=\"page >= pageCount\"\n (click)=\"setPage(page + 1)\"\n >\n Next\n <pdm-icon name=\"chevron-right\" [size]=\"14\"></pdm-icon>\n </button>\n </li>\n </ul>\n</nav>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.PdmIconComponent, selector: "pdm-icon", inputs: ["name", "library", "assetUrl", "size", "strokeWidth", "className", "ariaLabel", "decorative"] }, { kind: "component", type: i3.PdmSelectComponent, selector: "pdm-select", inputs: ["id", "value", "options", "disabled", "invalid", "className", "placeholder"], outputs: ["valueChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
103
|
+
PdmPaginationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PdmPaginationComponent, selector: "pdm-pagination", inputs: { page: "page", pageCount: "pageCount", maxVisible: "maxVisible", className: "className", rowsPerPageLabel: "rowsPerPageLabel", rowsPerPage: "rowsPerPage", rowsPerPageOptions: "rowsPerPageOptions" }, outputs: { pageChange: "pageChange", rowsPerPageChange: "rowsPerPageChange" }, ngImport: i0, template: "<nav\n aria-label=\"Pagination\"\n [ngClass]=\"[\n 'mx-auto flex w-full flex-wrap items-center justify-center gap-4',\n className,\n ]\"\n>\n <div class=\"flex items-center gap-3\" *ngIf=\"rowsPerPageOptions.length > 0\">\n <span class=\"text-sm font-medium text-foreground\">{{\n rowsPerPageLabel\n }}</span>\n <pdm-select\n [value]=\"rowsPerPageValue\"\n [options]=\"rowsPerPageSelectOptions\"\n [placeholder]=\"rowsPerPageValue\"\n className=\"w-[120px]\"\n (valueChange)=\"onRowsPerPageChangeValue($event)\"\n ></pdm-select>\n </div>\n\n <ul class=\"m-0 flex list-none items-center gap-1 p-0\">\n <li>\n <button\n type=\"button\"\n class=\"inline-flex h-9 appearance-none items-center justify-center gap-1 rounded-md border-0 bg-transparent px-2 text-sm text-foreground hover:bg-accent disabled:opacity-50 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\"\n [disabled]=\"page <= 1\"\n (click)=\"setPage(page - 1)\"\n >\n <pdm-icon name=\"chevron-left\" [size]=\"14\"></pdm-icon>\n Previous\n </button>\n </li>\n <li *ngFor=\"let pageNumber of visiblePages\">\n <ng-container *ngIf=\"pageNumber === 'ellipsis'; else pageButton\">\n <span\n class=\"inline-flex h-9 min-w-9 items-center justify-center px-2 text-sm text-muted-foreground\"\n >...</span\n >\n </ng-container>\n <ng-template #pageButton>\n <button\n type=\"button\"\n [ngClass]=\"[\n 'inline-flex h-9 min-w-9 items-center justify-center rounded-md px-2 text-sm ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n pageNumber === page\n ? 'appearance-none border border-border bg-muted/80 text-foreground shadow-sm'\n : 'appearance-none border-0 bg-transparent text-foreground hover:bg-accent hover:text-accent-foreground',\n ]\"\n (click)=\"setPage(+pageNumber)\"\n >\n {{ pageNumber }}\n </button>\n </ng-template>\n </li>\n <li>\n <button\n type=\"button\"\n class=\"inline-flex h-9 appearance-none items-center justify-center gap-1 rounded-md border-0 bg-transparent px-2 text-sm text-foreground hover:bg-accent disabled:opacity-50 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\"\n [disabled]=\"page >= pageCount\"\n (click)=\"setPage(page + 1)\"\n >\n Next\n <pdm-icon name=\"chevron-right\" [size]=\"14\"></pdm-icon>\n </button>\n </li>\n </ul>\n</nav>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.PdmIconComponent, selector: "pdm-icon", inputs: ["name", "library", "assetUrl", "size", "strokeWidth", "className", "ariaLabel", "decorative"] }, { kind: "component", type: i3.PdmSelectComponent, selector: "pdm-select", inputs: ["id", "value", "options", "disabled", "invalid", "className", "placeholder"], outputs: ["valueChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
50
104
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmPaginationComponent, decorators: [{
|
|
51
105
|
type: Component,
|
|
52
|
-
args: [{ selector: 'pdm-pagination', changeDetection: ChangeDetectionStrategy.OnPush, template: "<nav\n aria-label=\"Pagination\"\n [ngClass]=\"[\n 'mx-auto flex w-full flex-wrap items-center justify-center gap-4',\n className,\n ]\"\n>\n <div class=\"flex items-center gap-3\" *ngIf=\"rowsPerPageOptions.length > 0\">\n <span class=\"text-sm font-medium text-foreground\">{{\n rowsPerPageLabel\n }}</span>\n <pdm-select\n [value]=\"rowsPerPageValue\"\n [options]=\"rowsPerPageSelectOptions\"\n [placeholder]=\"rowsPerPageValue\"\n className=\"w-[120px]\"\n (valueChange)=\"onRowsPerPageChangeValue($event)\"\n ></pdm-select>\n </div>\n\n <ul class=\"m-0 flex list-none items-center gap-1 p-0\">\n <li>\n <button\n type=\"button\"\n class=\"inline-flex h-9 appearance-none items-center justify-center gap-1 rounded-md border-0 bg-transparent px-2 text-sm text-foreground hover:bg-accent disabled:opacity-50 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\"\n [disabled]=\"page <= 1\"\n (click)=\"setPage(page - 1)\"\n >\n <pdm-icon name=\"chevron-left\" [size]=\"14\"></pdm-icon>\n Previous\n </button>\n </li>\n <li *ngFor=\"let pageNumber of visiblePages\">\n <ng-container *ngIf=\"pageNumber === 'ellipsis'; else pageButton\">\n <span\n class=\"inline-flex h-9 min-w-9 items-center justify-center px-2 text-sm text-muted-foreground\"\n >...</span\n >\n </ng-container>\n <ng-template #pageButton>\n <button\n type=\"button\"\n [ngClass]=\"[\n 'inline-flex h-9 min-w-9 items-center justify-center rounded-md px-2 text-sm ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n pageNumber === page\n ? 'appearance-none border border-border bg-muted text-foreground shadow-sm'\n : 'appearance-none border-0 bg-transparent text-foreground hover:bg-accent hover:text-accent-foreground',\n ]\"\n (click)=\"setPage(+pageNumber)\"\n >\n {{ pageNumber }}\n </button>\n </ng-template>\n </li>\n <li>\n <button\n type=\"button\"\n class=\"inline-flex h-9 appearance-none items-center justify-center gap-1 rounded-md border-0 bg-transparent px-2 text-sm text-foreground hover:bg-accent disabled:opacity-50 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\"\n [disabled]=\"page >= pageCount\"\n (click)=\"setPage(page + 1)\"\n >\n Next\n <pdm-icon name=\"chevron-right\" [size]=\"14\"></pdm-icon>\n </button>\n </li>\n </ul>\n</nav>\n" }]
|
|
106
|
+
args: [{ selector: 'pdm-pagination', changeDetection: ChangeDetectionStrategy.OnPush, template: "<nav\n aria-label=\"Pagination\"\n [ngClass]=\"[\n 'mx-auto flex w-full flex-wrap items-center justify-center gap-4',\n className,\n ]\"\n>\n <div class=\"flex items-center gap-3\" *ngIf=\"rowsPerPageOptions.length > 0\">\n <span class=\"text-sm font-medium text-foreground\">{{\n rowsPerPageLabel\n }}</span>\n <pdm-select\n [value]=\"rowsPerPageValue\"\n [options]=\"rowsPerPageSelectOptions\"\n [placeholder]=\"rowsPerPageValue\"\n className=\"w-[120px]\"\n (valueChange)=\"onRowsPerPageChangeValue($event)\"\n ></pdm-select>\n </div>\n\n <ul class=\"m-0 flex list-none items-center gap-1 p-0\">\n <li>\n <button\n type=\"button\"\n class=\"inline-flex h-9 appearance-none items-center justify-center gap-1 rounded-md border-0 bg-transparent px-2 text-sm text-foreground hover:bg-accent disabled:opacity-50 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\"\n [disabled]=\"page <= 1\"\n (click)=\"setPage(page - 1)\"\n >\n <pdm-icon name=\"chevron-left\" [size]=\"14\"></pdm-icon>\n Previous\n </button>\n </li>\n <li *ngFor=\"let pageNumber of visiblePages\">\n <ng-container *ngIf=\"pageNumber === 'ellipsis'; else pageButton\">\n <span\n class=\"inline-flex h-9 min-w-9 items-center justify-center px-2 text-sm text-muted-foreground\"\n >...</span\n >\n </ng-container>\n <ng-template #pageButton>\n <button\n type=\"button\"\n [ngClass]=\"[\n 'inline-flex h-9 min-w-9 items-center justify-center rounded-md px-2 text-sm ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n pageNumber === page\n ? 'appearance-none border border-border bg-muted/80 text-foreground shadow-sm'\n : 'appearance-none border-0 bg-transparent text-foreground hover:bg-accent hover:text-accent-foreground',\n ]\"\n (click)=\"setPage(+pageNumber)\"\n >\n {{ pageNumber }}\n </button>\n </ng-template>\n </li>\n <li>\n <button\n type=\"button\"\n class=\"inline-flex h-9 appearance-none items-center justify-center gap-1 rounded-md border-0 bg-transparent px-2 text-sm text-foreground hover:bg-accent disabled:opacity-50 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\"\n [disabled]=\"page >= pageCount\"\n (click)=\"setPage(page + 1)\"\n >\n Next\n <pdm-icon name=\"chevron-right\" [size]=\"14\"></pdm-icon>\n </button>\n </li>\n </ul>\n</nav>\n" }]
|
|
53
107
|
}], propDecorators: { page: [{
|
|
54
108
|
type: Input
|
|
55
109
|
}], pageCount: [{
|
|
@@ -69,4 +123,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
69
123
|
}], rowsPerPageChange: [{
|
|
70
124
|
type: Output
|
|
71
125
|
}] } });
|
|
72
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvcGFnaW5hdGlvbi9wYWdpbmF0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9wYWdpbmF0aW9uL3BhZ2luYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7QUFRaEcsTUFBTSxPQUFPLHNCQUFzQjtJQUxuQztRQU1XLFNBQUksR0FBRyxDQUFDLENBQUM7UUFDVCxjQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsZUFBVSxHQUFHLENBQUMsQ0FBQztRQUNmLGNBQVMsR0FBRyxFQUFFLENBQUM7UUFDZixxQkFBZ0IsR0FBRyxlQUFlLENBQUM7UUFDbkMsZ0JBQVcsR0FBRyxFQUFFLENBQUM7UUFDakIsdUJBQWtCLEdBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUUvQyxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUN4QyxzQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO0tBc0MxRDtJQXBDQyxJQUFJLHdCQUF3QjtRQUMxQixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDN0MsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUM7WUFDcEIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUM7U0FDckIsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBRUQsSUFBSSxnQkFBZ0I7UUFDbEIsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxJQUFJLFlBQVk7UUFDZCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDMUMsSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ3pDLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUN2RDtRQUVELE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsT0FBTyxDQUFDLElBQVk7UUFDbEIsSUFBSSxJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQzNELE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxLQUFhO1FBQ3BDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksS0FBSyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3BFLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEMsQ0FBQzs7bUhBL0NVLHNCQUFzQjt1R0FBdEIsc0JBQXNCLHFWQ1JuQyxrdkZBbUVBOzJGRDNEYSxzQkFBc0I7a0JBTGxDLFNBQVM7K0JBQ0UsZ0JBQWdCLG1CQUVULHVCQUF1QixDQUFDLE1BQU07OEJBR3RDLElBQUk7c0JBQVosS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBRUksVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIHsgUGRtTmF0aXZlU2VsZWN0T3B0aW9uIH0gZnJvbSAnLi4vbmF0aXZlLXNlbGVjdC9uYXRpdmUtc2VsZWN0LmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3BkbS1wYWdpbmF0aW9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BhZ2luYXRpb24uY29tcG9uZW50Lmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBQZG1QYWdpbmF0aW9uQ29tcG9uZW50IHtcbiAgQElucHV0KCkgcGFnZSA9IDE7XG4gIEBJbnB1dCgpIHBhZ2VDb3VudCA9IDE7XG4gIEBJbnB1dCgpIG1heFZpc2libGUgPSA0O1xuICBASW5wdXQoKSBjbGFzc05hbWUgPSAnJztcbiAgQElucHV0KCkgcm93c1BlclBhZ2VMYWJlbCA9ICdSb3dzIHBlciBwYWdlJztcbiAgQElucHV0KCkgcm93c1BlclBhZ2UgPSAxMDtcbiAgQElucHV0KCkgcm93c1BlclBhZ2VPcHRpb25zOiBudW1iZXJbXSA9IFsxMCwgMjAsIDMwLCA1MF07XG5cbiAgQE91dHB1dCgpIHBhZ2VDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgQE91dHB1dCgpIHJvd3NQZXJQYWdlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgZ2V0IHJvd3NQZXJQYWdlU2VsZWN0T3B0aW9ucygpOiBQZG1OYXRpdmVTZWxlY3RPcHRpb25bXSB7XG4gICAgcmV0dXJuIHRoaXMucm93c1BlclBhZ2VPcHRpb25zLm1hcCgodmFsdWUpID0+ICh7XG4gICAgICBsYWJlbDogU3RyaW5nKHZhbHVlKSxcbiAgICAgIHZhbHVlOiBTdHJpbmcodmFsdWUpXG4gICAgfSkpO1xuICB9XG5cbiAgZ2V0IHJvd3NQZXJQYWdlVmFsdWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gU3RyaW5nKHRoaXMucm93c1BlclBhZ2UpO1xuICB9XG5cbiAgZ2V0IHZpc2libGVQYWdlcygpOiBBcnJheTxudW1iZXIgfCAnZWxsaXBzaXMnPiB7XG4gICAgY29uc3QgdG90YWwgPSBNYXRoLm1heCgxLCB0aGlzLnBhZ2VDb3VudCk7XG4gICAgaWYgKHRvdGFsIDw9IE1hdGgubWF4KDEsIHRoaXMubWF4VmlzaWJsZSkpIHtcbiAgICAgIHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiB0b3RhbCB9LCAoXywgaSkgPT4gaSArIDEpO1xuICAgIH1cblxuICAgIHJldHVybiBbMSwgMiwgJ2VsbGlwc2lzJywgdG90YWxdO1xuICB9XG5cbiAgc2V0UGFnZShuZXh0OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAobmV4dCA8IDEgfHwgbmV4dCA+IHRoaXMucGFnZUNvdW50IHx8IG5leHQgPT09IHRoaXMucGFnZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucGFnZUNoYW5nZS5lbWl0KG5leHQpO1xuICB9XG5cbiAgb25Sb3dzUGVyUGFnZUNoYW5nZVZhbHVlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBuZXh0ID0gTnVtYmVyKHZhbHVlKTtcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShuZXh0KSB8fCBuZXh0IDw9IDAgfHwgbmV4dCA9PT0gdGhpcy5yb3dzUGVyUGFnZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucm93c1BlclBhZ2VDaGFuZ2UuZW1pdChuZXh0KTtcbiAgfVxufVxuIiwiPG5hdlxuICBhcmlhLWxhYmVsPVwiUGFnaW5hdGlvblwiXG4gIFtuZ0NsYXNzXT1cIltcbiAgICAnbXgtYXV0byBmbGV4IHctZnVsbCBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC00JyxcbiAgICBjbGFzc05hbWUsXG4gIF1cIlxuPlxuICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTNcIiAqbmdJZj1cInJvd3NQZXJQYWdlT3B0aW9ucy5sZW5ndGggPiAwXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtZm9yZWdyb3VuZFwiPnt7XG4gICAgICByb3dzUGVyUGFnZUxhYmVsXG4gICAgfX08L3NwYW4+XG4gICAgPHBkbS1zZWxlY3RcbiAgICAgIFt2YWx1ZV09XCJyb3dzUGVyUGFnZVZhbHVlXCJcbiAgICAgIFtvcHRpb25zXT1cInJvd3NQZXJQYWdlU2VsZWN0T3B0aW9uc1wiXG4gICAgICBbcGxhY2Vob2xkZXJdPVwicm93c1BlclBhZ2VWYWx1ZVwiXG4gICAgICBjbGFzc05hbWU9XCJ3LVsxMjBweF1cIlxuICAgICAgKHZhbHVlQ2hhbmdlKT1cIm9uUm93c1BlclBhZ2VDaGFuZ2VWYWx1ZSgkZXZlbnQpXCJcbiAgICA+PC9wZG0tc2VsZWN0PlxuICA8L2Rpdj5cblxuICA8dWwgY2xhc3M9XCJtLTAgZmxleCBsaXN0LW5vbmUgaXRlbXMtY2VudGVyIGdhcC0xIHAtMFwiPlxuICAgIDxsaT5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzPVwiaW5saW5lLWZsZXggaC05IGFwcGVhcmFuY2Utbm9uZSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTEgcm91bmRlZC1tZCBib3JkZXItMCBiZy10cmFuc3BhcmVudCBweC0yIHRleHQtc20gdGV4dC1mb3JlZ3JvdW5kIGhvdmVyOmJnLWFjY2VudCBkaXNhYmxlZDpvcGFjaXR5LTUwIHJpbmctb2Zmc2V0LWJhY2tncm91bmQgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nLTIgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcgZm9jdXMtdmlzaWJsZTpyaW5nLW9mZnNldC0yXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cInBhZ2UgPD0gMVwiXG4gICAgICAgIChjbGljayk9XCJzZXRQYWdlKHBhZ2UgLSAxKVwiXG4gICAgICA+XG4gICAgICAgIDxwZG0taWNvbiBuYW1lPVwiY2hldnJvbi1sZWZ0XCIgW3NpemVdPVwiMTRcIj48L3BkbS1pY29uPlxuICAgICAgICBQcmV2aW91c1xuICAgICAgPC9idXR0b24+XG4gICAgPC9saT5cbiAgICA8bGkgKm5nRm9yPVwibGV0IHBhZ2VOdW1iZXIgb2YgdmlzaWJsZVBhZ2VzXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicGFnZU51bWJlciA9PT0gJ2VsbGlwc2lzJzsgZWxzZSBwYWdlQnV0dG9uXCI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3M9XCJpbmxpbmUtZmxleCBoLTkgbWluLXctOSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcHgtMiB0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiXG4gICAgICAgICAgPi4uLjwvc3BhblxuICAgICAgICA+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjcGFnZUJ1dHRvbj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cIltcbiAgICAgICAgICAgICdpbmxpbmUtZmxleCBoLTkgbWluLXctOSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1tZCBweC0yIHRleHQtc20gcmluZy1vZmZzZXQtYmFja2dyb3VuZCBmb2N1cy12aXNpYmxlOm91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctMiBmb2N1cy12aXNpYmxlOnJpbmctcmluZyBmb2N1cy12aXNpYmxlOnJpbmctb2Zmc2V0LTInLFxuICAgICAgICAgICAgcGFnZU51bWJlciA9PT0gcGFnZVxuICAgICAgICAgICAgICA/ICdhcHBlYXJhbmNlLW5vbmUgYm9yZGVyIGJvcmRlci1ib3JkZXIgYmctbXV0ZWQgdGV4dC1mb3JlZ3JvdW5kIHNoYWRvdy1zbSdcbiAgICAgICAgICAgICAgOiAnYXBwZWFyYW5jZS1ub25lIGJvcmRlci0wIGJnLXRyYW5zcGFyZW50IHRleHQtZm9yZWdyb3VuZCBob3ZlcjpiZy1hY2NlbnQgaG92ZXI6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCcsXG4gICAgICAgICAgXVwiXG4gICAgICAgICAgKGNsaWNrKT1cInNldFBhZ2UoK3BhZ2VOdW1iZXIpXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IHBhZ2VOdW1iZXIgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbGk+XG4gICAgPGxpPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9XCJpbmxpbmUtZmxleCBoLTkgYXBwZWFyYW5jZS1ub25lIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMSByb3VuZGVkLW1kIGJvcmRlci0wIGJnLXRyYW5zcGFyZW50IHB4LTIgdGV4dC1zbSB0ZXh0LWZvcmVncm91bmQgaG92ZXI6YmctYWNjZW50IGRpc2FibGVkOm9wYWNpdHktNTAgcmluZy1vZmZzZXQtYmFja2dyb3VuZCBmb2N1cy12aXNpYmxlOm91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctMiBmb2N1cy12aXNpYmxlOnJpbmctcmluZyBmb2N1cy12aXNpYmxlOnJpbmctb2Zmc2V0LTJcIlxuICAgICAgICBbZGlzYWJsZWRdPVwicGFnZSA+PSBwYWdlQ291bnRcIlxuICAgICAgICAoY2xpY2spPVwic2V0UGFnZShwYWdlICsgMSlcIlxuICAgICAgPlxuICAgICAgICBOZXh0XG4gICAgICAgIDxwZG0taWNvbiBuYW1lPVwiY2hldnJvbi1yaWdodFwiIFtzaXplXT1cIjE0XCI+PC9wZG0taWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvbGk+XG4gIDwvdWw+XG48L25hdj5cbiJdfQ==
|
|
126
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvcGFnaW5hdGlvbi9wYWdpbmF0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9wYWdpbmF0aW9uL3BhZ2luYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7QUFHaEcsTUFBTSxZQUFZLEdBQUcsQ0FBQyxLQUFjLEVBQUUsUUFBZ0IsRUFBVSxFQUFFO0lBQ2hFLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQixPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0FBQ2pELENBQUMsQ0FBQztBQU9GLE1BQU0sT0FBTyxzQkFBc0I7SUFMbkM7UUFNVSxVQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ1YsZUFBVSxHQUFHLENBQUMsQ0FBQztRQUNmLGdCQUFXLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLGlCQUFZLEdBQUcsRUFBRSxDQUFDO1FBMEJqQixjQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ2YscUJBQWdCLEdBQUcsZUFBZSxDQUFDO1FBVW5DLHVCQUFrQixHQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFL0MsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDeEMsc0JBQWlCLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztLQXNFMUQ7SUE1R0MsSUFDSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENB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QUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsd0JBQXdCLENBQUMsS0FBYTtRQUNwQyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNwRSxPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUN6QixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BDLENBQUM7O21IQWpIVSxzQkFBc0I7dUdBQXRCLHNCQUFzQixxVkNibkMscXZGQW1FQTsyRkR0RGEsc0JBQXNCO2tCQUxsQyxTQUFTOytCQUNFLGdCQUFnQixtQkFFVCx1QkFBdUIsQ0FBQyxNQUFNOzhCQVMzQyxJQUFJO3NCQURQLEtBQUs7Z0JBU0YsU0FBUztzQkFEWixLQUFLO2dCQVNGLFVBQVU7c0JBRGIsS0FBSztnQkFRRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFHRixXQUFXO3NCQURkLEtBQUs7Z0JBUUcsa0JBQWtCO3NCQUExQixLQUFLO2dCQUVJLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgdHlwZSB7IFBkbU5hdGl2ZVNlbGVjdE9wdGlvbiB9IGZyb20gJy4uL25hdGl2ZS1zZWxlY3QvbmF0aXZlLXNlbGVjdC5jb21wb25lbnQnO1xuXG5jb25zdCBjb2VyY2VOdW1iZXIgPSAodmFsdWU6IHVua25vd24sIGZhbGxiYWNrOiBudW1iZXIpOiBudW1iZXIgPT4ge1xuICBjb25zdCBuZXh0ID0gTnVtYmVyKHZhbHVlKTtcbiAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShuZXh0KSA/IG5leHQgOiBmYWxsYmFjaztcbn07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3BkbS1wYWdpbmF0aW9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BhZ2luYXRpb24uY29tcG9uZW50Lmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBQZG1QYWdpbmF0aW9uQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSBfcGFnZSA9IDE7XG4gIHByaXZhdGUgX3BhZ2VDb3VudCA9IDE7XG4gIHByaXZhdGUgX21heFZpc2libGUgPSA0O1xuICBwcml2YXRlIF9yb3dzUGVyUGFnZSA9IDEwO1xuXG4gIEBJbnB1dCgpXG4gIGdldCBwYWdlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3BhZ2U7XG4gIH1cbiAgc2V0IHBhZ2UodmFsdWU6IG51bWJlciB8IHN0cmluZykge1xuICAgIHRoaXMuX3BhZ2UgPSBjb2VyY2VOdW1iZXIodmFsdWUsIDEpO1xuICB9XG5cbiAgQElucHV0KClcbiAgZ2V0IHBhZ2VDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9wYWdlQ291bnQ7XG4gIH1cbiAgc2V0IHBhZ2VDb3VudCh2YWx1ZTogbnVtYmVyIHwgc3RyaW5nKSB7XG4gICAgdGhpcy5fcGFnZUNvdW50ID0gY29lcmNlTnVtYmVyKHZhbHVlLCAxKTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIGdldCBtYXhWaXNpYmxlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX21heFZpc2libGU7XG4gIH1cbiAgc2V0IG1heFZpc2libGUodmFsdWU6IG51bWJlciB8IHN0cmluZykge1xuICAgIHRoaXMuX21heFZpc2libGUgPSBjb2VyY2VOdW1iZXIodmFsdWUsIDQpO1xuICB9XG5cbiAgQElucHV0KCkgY2xhc3NOYW1lID0gJyc7XG4gIEBJbnB1dCgpIHJvd3NQZXJQYWdlTGFiZWwgPSAnUm93cyBwZXIgcGFnZSc7XG5cbiAgQElucHV0KClcbiAgZ2V0IHJvd3NQZXJQYWdlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3Jvd3NQZXJQYWdlO1xuICB9XG4gIHNldCByb3dzUGVyUGFnZSh2YWx1ZTogbnVtYmVyIHwgc3RyaW5nKSB7XG4gICAgdGhpcy5fcm93c1BlclBhZ2UgPSBjb2VyY2VOdW1iZXIodmFsdWUsIDEwKTtcbiAgfVxuXG4gIEBJbnB1dCgpIHJvd3NQZXJQYWdlT3B0aW9uczogbnVtYmVyW10gPSBbMTAsIDIwLCAzMCwgNTBdO1xuXG4gIEBPdXRwdXQoKSBwYWdlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gIEBPdXRwdXQoKSByb3dzUGVyUGFnZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gIGdldCByb3dzUGVyUGFnZVNlbGVjdE9wdGlvbnMoKTogUGRtTmF0aXZlU2VsZWN0T3B0aW9uW10ge1xuICAgIHJldHVybiB0aGlzLnJvd3NQZXJQYWdlT3B0aW9ucy5tYXAoKHZhbHVlKSA9PiAoe1xuICAgICAgbGFiZWw6IFN0cmluZyh2YWx1ZSksXG4gICAgICB2YWx1ZTogU3RyaW5nKHZhbHVlKVxuICAgIH0pKTtcbiAgfVxuXG4gIGdldCByb3dzUGVyUGFnZVZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFN0cmluZyh0aGlzLnJvd3NQZXJQYWdlKTtcbiAgfVxuXG4gIGdldCB2aXNpYmxlUGFnZXMoKTogQXJyYXk8bnVtYmVyIHwgJ2VsbGlwc2lzJz4ge1xuICAgIGNvbnN0IHRvdGFsID0gTWF0aC5tYXgoMSwgdGhpcy5wYWdlQ291bnQpO1xuICAgIGNvbnN0IG1heFZpc2libGUgPSBNYXRoLm1heCgxLCB0aGlzLm1heFZpc2libGUpO1xuXG4gICAgaWYgKHRvdGFsIDw9IG1heFZpc2libGUpIHtcbiAgICAgIHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiB0b3RhbCB9LCAoXywgaSkgPT4gaSArIDEpO1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnQgPSBNYXRoLm1pbihNYXRoLm1heCgxLCB0aGlzLnBhZ2UpLCB0b3RhbCk7XG4gICAgY29uc3Qgd2luZG93U2l6ZSA9IE1hdGgubWF4KDEsIG1heFZpc2libGUgLSAxKTtcbiAgICBjb25zdCBzdGFydFRocmVzaG9sZCA9IE1hdGguY2VpbCh3aW5kb3dTaXplIC8gMik7XG4gICAgY29uc3QgZW5kVGhyZXNob2xkID0gdG90YWwgLSBNYXRoLmZsb29yKHdpbmRvd1NpemUgLyAyKTtcbiAgICBjb25zdCByYW5nZSA9IChzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IG51bWJlcltdID0+XG4gICAgICBBcnJheS5mcm9tKHsgbGVuZ3RoOiBlbmQgLSBzdGFydCArIDEgfSwgKF8sIGkpID0+IHN0YXJ0ICsgaSk7XG5cbiAgICBpZiAoY3VycmVudCA8PSBzdGFydFRocmVzaG9sZCkge1xuICAgICAgY29uc3QgZW5kID0gTWF0aC5taW4od2luZG93U2l6ZSwgdG90YWwgLSAxKTtcbiAgICAgIHJldHVybiBbLi4ucmFuZ2UoMSwgZW5kKSwgJ2VsbGlwc2lzJywgdG90YWxdO1xuICAgIH1cblxuICAgIGlmIChjdXJyZW50ID49IGVuZFRocmVzaG9sZCkge1xuICAgICAgY29uc3Qgc3RhcnQgPSBNYXRoLm1heCgxLCB0b3RhbCAtIHdpbmRvd1NpemUpO1xuICAgICAgY29uc3QgcGFnZXMgPSByYW5nZShzdGFydCwgdG90YWwpO1xuICAgICAgaWYgKHBhZ2VzWzBdID09PSAxKSB7XG4gICAgICAgIHJldHVybiBwYWdlcztcbiAgICAgIH1cbiAgICAgIHJldHVybiBbMSwgJ2VsbGlwc2lzJywgLi4ucGFnZXNdO1xuICAgIH1cblxuICAgIGxldCBzdGFydCA9IGN1cnJlbnQgLSBNYXRoLmZsb29yKHdpbmRvd1NpemUgLyAyKTtcbiAgICBsZXQgZW5kID0gc3RhcnQgKyB3aW5kb3dTaXplIC0gMTtcbiAgICBpZiAoZW5kID49IHRvdGFsKSB7XG4gICAgICBlbmQgPSB0b3RhbCAtIDE7XG4gICAgICBzdGFydCA9IGVuZCAtIHdpbmRvd1NpemUgKyAxO1xuICAgIH1cblxuICAgIHJldHVybiBbLi4ucmFuZ2Uoc3RhcnQsIGVuZCksICdlbGxpcHNpcycsIHRvdGFsXTtcbiAgfVxuXG4gIHNldFBhZ2UobmV4dDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKG5leHQgPCAxIHx8IG5leHQgPiB0aGlzLnBhZ2VDb3VudCB8fCBuZXh0ID09PSB0aGlzLnBhZ2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9wYWdlID0gbmV4dDtcbiAgICB0aGlzLnBhZ2VDaGFuZ2UuZW1pdChuZXh0KTtcbiAgfVxuXG4gIG9uUm93c1BlclBhZ2VDaGFuZ2VWYWx1ZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgbmV4dCA9IE51bWJlcih2YWx1ZSk7XG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUobmV4dCkgfHwgbmV4dCA8PSAwIHx8IG5leHQgPT09IHRoaXMucm93c1BlclBhZ2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9yb3dzUGVyUGFnZSA9IG5leHQ7XG4gICAgdGhpcy5yb3dzUGVyUGFnZUNoYW5nZS5lbWl0KG5leHQpO1xuICB9XG59XG4iLCI8bmF2XG4gIGFyaWEtbGFiZWw9XCJQYWdpbmF0aW9uXCJcbiAgW25nQ2xhc3NdPVwiW1xuICAgICdteC1hdXRvIGZsZXggdy1mdWxsIGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTQnLFxuICAgIGNsYXNzTmFtZSxcbiAgXVwiXG4+XG4gIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtM1wiICpuZ0lmPVwicm93c1BlclBhZ2VPcHRpb25zLmxlbmd0aCA+IDBcIj5cbiAgICA8c3BhbiBjbGFzcz1cInRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1mb3JlZ3JvdW5kXCI+e3tcbiAgICAgIHJvd3NQZXJQYWdlTGFiZWxcbiAgICB9fTwvc3Bhbj5cbiAgICA8cGRtLXNlbGVjdFxuICAgICAgW3ZhbHVlXT1cInJvd3NQZXJQYWdlVmFsdWVcIlxuICAgICAgW29wdGlvbnNdPVwicm93c1BlclBhZ2VTZWxlY3RPcHRpb25zXCJcbiAgICAgIFtwbGFjZWhvbGRlcl09XCJyb3dzUGVyUGFnZVZhbHVlXCJcbiAgICAgIGNsYXNzTmFtZT1cInctWzEyMHB4XVwiXG4gICAgICAodmFsdWVDaGFuZ2UpPVwib25Sb3dzUGVyUGFnZUNoYW5nZVZhbHVlKCRldmVudClcIlxuICAgID48L3BkbS1zZWxlY3Q+XG4gIDwvZGl2PlxuXG4gIDx1bCBjbGFzcz1cIm0tMCBmbGV4IGxpc3Qtbm9uZSBpdGVtcy1jZW50ZXIgZ2FwLTEgcC0wXCI+XG4gICAgPGxpPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9XCJpbmxpbmUtZmxleCBoLTkgYXBwZWFyYW5jZS1ub25lIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMSByb3VuZGVkLW1kIGJvcmRlci0wIGJnLXRyYW5zcGFyZW50IHB4LTIgdGV4dC1zbSB0ZXh0LWZvcmVncm91bmQgaG92ZXI6YmctYWNjZW50IGRpc2FibGVkOm9wYWNpdHktNTAgcmluZy1vZmZzZXQtYmFja2dyb3VuZCBmb2N1cy12aXNpYmxlOm91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctMiBmb2N1cy12aXNpYmxlOnJpbmctcmluZyBmb2N1cy12aXNpYmxlOnJpbmctb2Zmc2V0LTJcIlxuICAgICAgICBbZGlzYWJsZWRdPVwicGFnZSA8PSAxXCJcbiAgICAgICAgKGNsaWNrKT1cInNldFBhZ2UocGFnZSAtIDEpXCJcbiAgICAgID5cbiAgICAgICAgPHBkbS1pY29uIG5hbWU9XCJjaGV2cm9uLWxlZnRcIiBbc2l6ZV09XCIxNFwiPjwvcGRtLWljb24+XG4gICAgICAgIFByZXZpb3VzXG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2xpPlxuICAgIDxsaSAqbmdGb3I9XCJsZXQgcGFnZU51bWJlciBvZiB2aXNpYmxlUGFnZXNcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwYWdlTnVtYmVyID09PSAnZWxsaXBzaXMnOyBlbHNlIHBhZ2VCdXR0b25cIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzcz1cImlubGluZS1mbGV4IGgtOSBtaW4tdy05IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBweC0yIHRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCJcbiAgICAgICAgICA+Li4uPC9zcGFuXG4gICAgICAgID5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLXRlbXBsYXRlICNwYWdlQnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwiW1xuICAgICAgICAgICAgJ2lubGluZS1mbGV4IGgtOSBtaW4tdy05IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLW1kIHB4LTIgdGV4dC1zbSByaW5nLW9mZnNldC1iYWNrZ3JvdW5kIGZvY3VzLXZpc2libGU6b3V0bGluZS1ub25lIGZvY3VzLXZpc2libGU6cmluZy0yIGZvY3VzLXZpc2libGU6cmluZy1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1vZmZzZXQtMicsXG4gICAgICAgICAgICBwYWdlTnVtYmVyID09PSBwYWdlXG4gICAgICAgICAgICAgID8gJ2FwcGVhcmFuY2Utbm9uZSBib3JkZXIgYm9yZGVyLWJvcmRlciBiZy1tdXRlZC84MCB0ZXh0LWZvcmVncm91bmQgc2hhZG93LXNtJ1xuICAgICAgICAgICAgICA6ICdhcHBlYXJhbmNlLW5vbmUgYm9yZGVyLTAgYmctdHJhbnNwYXJlbnQgdGV4dC1mb3JlZ3JvdW5kIGhvdmVyOmJnLWFjY2VudCBob3Zlcjp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kJyxcbiAgICAgICAgICBdXCJcbiAgICAgICAgICAoY2xpY2spPVwic2V0UGFnZSgrcGFnZU51bWJlcilcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgcGFnZU51bWJlciB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9saT5cbiAgICA8bGk+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzcz1cImlubGluZS1mbGV4IGgtOSBhcHBlYXJhbmNlLW5vbmUgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xIHJvdW5kZWQtbWQgYm9yZGVyLTAgYmctdHJhbnNwYXJlbnQgcHgtMiB0ZXh0LXNtIHRleHQtZm9yZWdyb3VuZCBob3ZlcjpiZy1hY2NlbnQgZGlzYWJsZWQ6b3BhY2l0eS01MCByaW5nLW9mZnNldC1iYWNrZ3JvdW5kIGZvY3VzLXZpc2libGU6b3V0bGluZS1ub25lIGZvY3VzLXZpc2libGU6cmluZy0yIGZvY3VzLXZpc2libGU6cmluZy1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1vZmZzZXQtMlwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJwYWdlID49IHBhZ2VDb3VudFwiXG4gICAgICAgIChjbGljayk9XCJzZXRQYWdlKHBhZ2UgKyAxKVwiXG4gICAgICA+XG4gICAgICAgIE5leHRcbiAgICAgICAgPHBkbS1pY29uIG5hbWU9XCJjaGV2cm9uLXJpZ2h0XCIgW3NpemVdPVwiMTRcIj48L3BkbS1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9saT5cbiAgPC91bD5cbjwvbmF2PlxuIl19
|
package/fesm2015/pdm-ui-kit.mjs
CHANGED
|
@@ -3335,18 +3335,46 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
3335
3335
|
args: ['window:scroll']
|
|
3336
3336
|
}] } });
|
|
3337
3337
|
|
|
3338
|
+
const coerceNumber = (value, fallback) => {
|
|
3339
|
+
const next = Number(value);
|
|
3340
|
+
return Number.isFinite(next) ? next : fallback;
|
|
3341
|
+
};
|
|
3338
3342
|
class PdmPaginationComponent {
|
|
3339
3343
|
constructor() {
|
|
3340
|
-
this.
|
|
3341
|
-
this.
|
|
3342
|
-
this.
|
|
3344
|
+
this._page = 1;
|
|
3345
|
+
this._pageCount = 1;
|
|
3346
|
+
this._maxVisible = 4;
|
|
3347
|
+
this._rowsPerPage = 10;
|
|
3343
3348
|
this.className = '';
|
|
3344
3349
|
this.rowsPerPageLabel = 'Rows per page';
|
|
3345
|
-
this.rowsPerPage = 10;
|
|
3346
3350
|
this.rowsPerPageOptions = [10, 20, 30, 50];
|
|
3347
3351
|
this.pageChange = new EventEmitter();
|
|
3348
3352
|
this.rowsPerPageChange = new EventEmitter();
|
|
3349
3353
|
}
|
|
3354
|
+
get page() {
|
|
3355
|
+
return this._page;
|
|
3356
|
+
}
|
|
3357
|
+
set page(value) {
|
|
3358
|
+
this._page = coerceNumber(value, 1);
|
|
3359
|
+
}
|
|
3360
|
+
get pageCount() {
|
|
3361
|
+
return this._pageCount;
|
|
3362
|
+
}
|
|
3363
|
+
set pageCount(value) {
|
|
3364
|
+
this._pageCount = coerceNumber(value, 1);
|
|
3365
|
+
}
|
|
3366
|
+
get maxVisible() {
|
|
3367
|
+
return this._maxVisible;
|
|
3368
|
+
}
|
|
3369
|
+
set maxVisible(value) {
|
|
3370
|
+
this._maxVisible = coerceNumber(value, 4);
|
|
3371
|
+
}
|
|
3372
|
+
get rowsPerPage() {
|
|
3373
|
+
return this._rowsPerPage;
|
|
3374
|
+
}
|
|
3375
|
+
set rowsPerPage(value) {
|
|
3376
|
+
this._rowsPerPage = coerceNumber(value, 10);
|
|
3377
|
+
}
|
|
3350
3378
|
get rowsPerPageSelectOptions() {
|
|
3351
3379
|
return this.rowsPerPageOptions.map((value) => ({
|
|
3352
3380
|
label: String(value),
|
|
@@ -3358,15 +3386,40 @@ class PdmPaginationComponent {
|
|
|
3358
3386
|
}
|
|
3359
3387
|
get visiblePages() {
|
|
3360
3388
|
const total = Math.max(1, this.pageCount);
|
|
3361
|
-
|
|
3389
|
+
const maxVisible = Math.max(1, this.maxVisible);
|
|
3390
|
+
if (total <= maxVisible) {
|
|
3362
3391
|
return Array.from({ length: total }, (_, i) => i + 1);
|
|
3363
3392
|
}
|
|
3364
|
-
|
|
3393
|
+
const current = Math.min(Math.max(1, this.page), total);
|
|
3394
|
+
const windowSize = Math.max(1, maxVisible - 1);
|
|
3395
|
+
const startThreshold = Math.ceil(windowSize / 2);
|
|
3396
|
+
const endThreshold = total - Math.floor(windowSize / 2);
|
|
3397
|
+
const range = (start, end) => Array.from({ length: end - start + 1 }, (_, i) => start + i);
|
|
3398
|
+
if (current <= startThreshold) {
|
|
3399
|
+
const end = Math.min(windowSize, total - 1);
|
|
3400
|
+
return [...range(1, end), 'ellipsis', total];
|
|
3401
|
+
}
|
|
3402
|
+
if (current >= endThreshold) {
|
|
3403
|
+
const start = Math.max(1, total - windowSize);
|
|
3404
|
+
const pages = range(start, total);
|
|
3405
|
+
if (pages[0] === 1) {
|
|
3406
|
+
return pages;
|
|
3407
|
+
}
|
|
3408
|
+
return [1, 'ellipsis', ...pages];
|
|
3409
|
+
}
|
|
3410
|
+
let start = current - Math.floor(windowSize / 2);
|
|
3411
|
+
let end = start + windowSize - 1;
|
|
3412
|
+
if (end >= total) {
|
|
3413
|
+
end = total - 1;
|
|
3414
|
+
start = end - windowSize + 1;
|
|
3415
|
+
}
|
|
3416
|
+
return [...range(start, end), 'ellipsis', total];
|
|
3365
3417
|
}
|
|
3366
3418
|
setPage(next) {
|
|
3367
3419
|
if (next < 1 || next > this.pageCount || next === this.page) {
|
|
3368
3420
|
return;
|
|
3369
3421
|
}
|
|
3422
|
+
this._page = next;
|
|
3370
3423
|
this.pageChange.emit(next);
|
|
3371
3424
|
}
|
|
3372
3425
|
onRowsPerPageChangeValue(value) {
|
|
@@ -3374,14 +3427,15 @@ class PdmPaginationComponent {
|
|
|
3374
3427
|
if (!Number.isFinite(next) || next <= 0 || next === this.rowsPerPage) {
|
|
3375
3428
|
return;
|
|
3376
3429
|
}
|
|
3430
|
+
this._rowsPerPage = next;
|
|
3377
3431
|
this.rowsPerPageChange.emit(next);
|
|
3378
3432
|
}
|
|
3379
3433
|
}
|
|
3380
3434
|
PdmPaginationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmPaginationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
3381
|
-
PdmPaginationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PdmPaginationComponent, selector: "pdm-pagination", inputs: { page: "page", pageCount: "pageCount", maxVisible: "maxVisible", className: "className", rowsPerPageLabel: "rowsPerPageLabel", rowsPerPage: "rowsPerPage", rowsPerPageOptions: "rowsPerPageOptions" }, outputs: { pageChange: "pageChange", rowsPerPageChange: "rowsPerPageChange" }, ngImport: i0, template: "<nav\n aria-label=\"Pagination\"\n [ngClass]=\"[\n 'mx-auto flex w-full flex-wrap items-center justify-center gap-4',\n className,\n ]\"\n>\n <div class=\"flex items-center gap-3\" *ngIf=\"rowsPerPageOptions.length > 0\">\n <span class=\"text-sm font-medium text-foreground\">{{\n rowsPerPageLabel\n }}</span>\n <pdm-select\n [value]=\"rowsPerPageValue\"\n [options]=\"rowsPerPageSelectOptions\"\n [placeholder]=\"rowsPerPageValue\"\n className=\"w-[120px]\"\n (valueChange)=\"onRowsPerPageChangeValue($event)\"\n ></pdm-select>\n </div>\n\n <ul class=\"m-0 flex list-none items-center gap-1 p-0\">\n <li>\n <button\n type=\"button\"\n class=\"inline-flex h-9 appearance-none items-center justify-center gap-1 rounded-md border-0 bg-transparent px-2 text-sm text-foreground hover:bg-accent disabled:opacity-50 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\"\n [disabled]=\"page <= 1\"\n (click)=\"setPage(page - 1)\"\n >\n <pdm-icon name=\"chevron-left\" [size]=\"14\"></pdm-icon>\n Previous\n </button>\n </li>\n <li *ngFor=\"let pageNumber of visiblePages\">\n <ng-container *ngIf=\"pageNumber === 'ellipsis'; else pageButton\">\n <span\n class=\"inline-flex h-9 min-w-9 items-center justify-center px-2 text-sm text-muted-foreground\"\n >...</span\n >\n </ng-container>\n <ng-template #pageButton>\n <button\n type=\"button\"\n [ngClass]=\"[\n 'inline-flex h-9 min-w-9 items-center justify-center rounded-md px-2 text-sm ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n pageNumber === page\n ? 'appearance-none border border-border bg-muted text-foreground shadow-sm'\n : 'appearance-none border-0 bg-transparent text-foreground hover:bg-accent hover:text-accent-foreground',\n ]\"\n (click)=\"setPage(+pageNumber)\"\n >\n {{ pageNumber }}\n </button>\n </ng-template>\n </li>\n <li>\n <button\n type=\"button\"\n class=\"inline-flex h-9 appearance-none items-center justify-center gap-1 rounded-md border-0 bg-transparent px-2 text-sm text-foreground hover:bg-accent disabled:opacity-50 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\"\n [disabled]=\"page >= pageCount\"\n (click)=\"setPage(page + 1)\"\n >\n Next\n <pdm-icon name=\"chevron-right\" [size]=\"14\"></pdm-icon>\n </button>\n </li>\n </ul>\n</nav>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: PdmIconComponent, selector: "pdm-icon", inputs: ["name", "library", "assetUrl", "size", "strokeWidth", "className", "ariaLabel", "decorative"] }, { kind: "component", type: PdmSelectComponent, selector: "pdm-select", inputs: ["id", "value", "options", "disabled", "invalid", "className", "placeholder"], outputs: ["valueChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
3435
|
+
PdmPaginationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PdmPaginationComponent, selector: "pdm-pagination", inputs: { page: "page", pageCount: "pageCount", maxVisible: "maxVisible", className: "className", rowsPerPageLabel: "rowsPerPageLabel", rowsPerPage: "rowsPerPage", rowsPerPageOptions: "rowsPerPageOptions" }, outputs: { pageChange: "pageChange", rowsPerPageChange: "rowsPerPageChange" }, ngImport: i0, template: "<nav\n aria-label=\"Pagination\"\n [ngClass]=\"[\n 'mx-auto flex w-full flex-wrap items-center justify-center gap-4',\n className,\n ]\"\n>\n <div class=\"flex items-center gap-3\" *ngIf=\"rowsPerPageOptions.length > 0\">\n <span class=\"text-sm font-medium text-foreground\">{{\n rowsPerPageLabel\n }}</span>\n <pdm-select\n [value]=\"rowsPerPageValue\"\n [options]=\"rowsPerPageSelectOptions\"\n [placeholder]=\"rowsPerPageValue\"\n className=\"w-[120px]\"\n (valueChange)=\"onRowsPerPageChangeValue($event)\"\n ></pdm-select>\n </div>\n\n <ul class=\"m-0 flex list-none items-center gap-1 p-0\">\n <li>\n <button\n type=\"button\"\n class=\"inline-flex h-9 appearance-none items-center justify-center gap-1 rounded-md border-0 bg-transparent px-2 text-sm text-foreground hover:bg-accent disabled:opacity-50 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\"\n [disabled]=\"page <= 1\"\n (click)=\"setPage(page - 1)\"\n >\n <pdm-icon name=\"chevron-left\" [size]=\"14\"></pdm-icon>\n Previous\n </button>\n </li>\n <li *ngFor=\"let pageNumber of visiblePages\">\n <ng-container *ngIf=\"pageNumber === 'ellipsis'; else pageButton\">\n <span\n class=\"inline-flex h-9 min-w-9 items-center justify-center px-2 text-sm text-muted-foreground\"\n >...</span\n >\n </ng-container>\n <ng-template #pageButton>\n <button\n type=\"button\"\n [ngClass]=\"[\n 'inline-flex h-9 min-w-9 items-center justify-center rounded-md px-2 text-sm ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n pageNumber === page\n ? 'appearance-none border border-border bg-muted/80 text-foreground shadow-sm'\n : 'appearance-none border-0 bg-transparent text-foreground hover:bg-accent hover:text-accent-foreground',\n ]\"\n (click)=\"setPage(+pageNumber)\"\n >\n {{ pageNumber }}\n </button>\n </ng-template>\n </li>\n <li>\n <button\n type=\"button\"\n class=\"inline-flex h-9 appearance-none items-center justify-center gap-1 rounded-md border-0 bg-transparent px-2 text-sm text-foreground hover:bg-accent disabled:opacity-50 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\"\n [disabled]=\"page >= pageCount\"\n (click)=\"setPage(page + 1)\"\n >\n Next\n <pdm-icon name=\"chevron-right\" [size]=\"14\"></pdm-icon>\n </button>\n </li>\n </ul>\n</nav>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: PdmIconComponent, selector: "pdm-icon", inputs: ["name", "library", "assetUrl", "size", "strokeWidth", "className", "ariaLabel", "decorative"] }, { kind: "component", type: PdmSelectComponent, selector: "pdm-select", inputs: ["id", "value", "options", "disabled", "invalid", "className", "placeholder"], outputs: ["valueChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
3382
3436
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmPaginationComponent, decorators: [{
|
|
3383
3437
|
type: Component,
|
|
3384
|
-
args: [{ selector: 'pdm-pagination', changeDetection: ChangeDetectionStrategy.OnPush, template: "<nav\n aria-label=\"Pagination\"\n [ngClass]=\"[\n 'mx-auto flex w-full flex-wrap items-center justify-center gap-4',\n className,\n ]\"\n>\n <div class=\"flex items-center gap-3\" *ngIf=\"rowsPerPageOptions.length > 0\">\n <span class=\"text-sm font-medium text-foreground\">{{\n rowsPerPageLabel\n }}</span>\n <pdm-select\n [value]=\"rowsPerPageValue\"\n [options]=\"rowsPerPageSelectOptions\"\n [placeholder]=\"rowsPerPageValue\"\n className=\"w-[120px]\"\n (valueChange)=\"onRowsPerPageChangeValue($event)\"\n ></pdm-select>\n </div>\n\n <ul class=\"m-0 flex list-none items-center gap-1 p-0\">\n <li>\n <button\n type=\"button\"\n class=\"inline-flex h-9 appearance-none items-center justify-center gap-1 rounded-md border-0 bg-transparent px-2 text-sm text-foreground hover:bg-accent disabled:opacity-50 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\"\n [disabled]=\"page <= 1\"\n (click)=\"setPage(page - 1)\"\n >\n <pdm-icon name=\"chevron-left\" [size]=\"14\"></pdm-icon>\n Previous\n </button>\n </li>\n <li *ngFor=\"let pageNumber of visiblePages\">\n <ng-container *ngIf=\"pageNumber === 'ellipsis'; else pageButton\">\n <span\n class=\"inline-flex h-9 min-w-9 items-center justify-center px-2 text-sm text-muted-foreground\"\n >...</span\n >\n </ng-container>\n <ng-template #pageButton>\n <button\n type=\"button\"\n [ngClass]=\"[\n 'inline-flex h-9 min-w-9 items-center justify-center rounded-md px-2 text-sm ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n pageNumber === page\n ? 'appearance-none border border-border bg-muted text-foreground shadow-sm'\n : 'appearance-none border-0 bg-transparent text-foreground hover:bg-accent hover:text-accent-foreground',\n ]\"\n (click)=\"setPage(+pageNumber)\"\n >\n {{ pageNumber }}\n </button>\n </ng-template>\n </li>\n <li>\n <button\n type=\"button\"\n class=\"inline-flex h-9 appearance-none items-center justify-center gap-1 rounded-md border-0 bg-transparent px-2 text-sm text-foreground hover:bg-accent disabled:opacity-50 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\"\n [disabled]=\"page >= pageCount\"\n (click)=\"setPage(page + 1)\"\n >\n Next\n <pdm-icon name=\"chevron-right\" [size]=\"14\"></pdm-icon>\n </button>\n </li>\n </ul>\n</nav>\n" }]
|
|
3438
|
+
args: [{ selector: 'pdm-pagination', changeDetection: ChangeDetectionStrategy.OnPush, template: "<nav\n aria-label=\"Pagination\"\n [ngClass]=\"[\n 'mx-auto flex w-full flex-wrap items-center justify-center gap-4',\n className,\n ]\"\n>\n <div class=\"flex items-center gap-3\" *ngIf=\"rowsPerPageOptions.length > 0\">\n <span class=\"text-sm font-medium text-foreground\">{{\n rowsPerPageLabel\n }}</span>\n <pdm-select\n [value]=\"rowsPerPageValue\"\n [options]=\"rowsPerPageSelectOptions\"\n [placeholder]=\"rowsPerPageValue\"\n className=\"w-[120px]\"\n (valueChange)=\"onRowsPerPageChangeValue($event)\"\n ></pdm-select>\n </div>\n\n <ul class=\"m-0 flex list-none items-center gap-1 p-0\">\n <li>\n <button\n type=\"button\"\n class=\"inline-flex h-9 appearance-none items-center justify-center gap-1 rounded-md border-0 bg-transparent px-2 text-sm text-foreground hover:bg-accent disabled:opacity-50 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\"\n [disabled]=\"page <= 1\"\n (click)=\"setPage(page - 1)\"\n >\n <pdm-icon name=\"chevron-left\" [size]=\"14\"></pdm-icon>\n Previous\n </button>\n </li>\n <li *ngFor=\"let pageNumber of visiblePages\">\n <ng-container *ngIf=\"pageNumber === 'ellipsis'; else pageButton\">\n <span\n class=\"inline-flex h-9 min-w-9 items-center justify-center px-2 text-sm text-muted-foreground\"\n >...</span\n >\n </ng-container>\n <ng-template #pageButton>\n <button\n type=\"button\"\n [ngClass]=\"[\n 'inline-flex h-9 min-w-9 items-center justify-center rounded-md px-2 text-sm ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n pageNumber === page\n ? 'appearance-none border border-border bg-muted/80 text-foreground shadow-sm'\n : 'appearance-none border-0 bg-transparent text-foreground hover:bg-accent hover:text-accent-foreground',\n ]\"\n (click)=\"setPage(+pageNumber)\"\n >\n {{ pageNumber }}\n </button>\n </ng-template>\n </li>\n <li>\n <button\n type=\"button\"\n class=\"inline-flex h-9 appearance-none items-center justify-center gap-1 rounded-md border-0 bg-transparent px-2 text-sm text-foreground hover:bg-accent disabled:opacity-50 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\"\n [disabled]=\"page >= pageCount\"\n (click)=\"setPage(page + 1)\"\n >\n Next\n <pdm-icon name=\"chevron-right\" [size]=\"14\"></pdm-icon>\n </button>\n </li>\n </ul>\n</nav>\n" }]
|
|
3385
3439
|
}], propDecorators: { page: [{
|
|
3386
3440
|
type: Input
|
|
3387
3441
|
}], pageCount: [{
|