@tailng-ui/primitives 0.44.0 → 0.45.0
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/package.json +2 -2
- package/src/lib/navigation/index.d.ts +1 -0
- package/src/lib/navigation/index.d.ts.map +1 -1
- package/src/lib/navigation/index.js +1 -0
- package/src/lib/navigation/index.js.map +1 -1
- package/src/lib/navigation/pagination/__tests__/tng-pagination.test-harness.d.ts +44 -0
- package/src/lib/navigation/pagination/__tests__/tng-pagination.test-harness.d.ts.map +1 -0
- package/src/lib/navigation/pagination/__tests__/tng-pagination.test-harness.js +194 -0
- package/src/lib/navigation/pagination/__tests__/tng-pagination.test-harness.js.map +1 -0
- package/src/lib/navigation/pagination/index.d.ts +2 -0
- package/src/lib/navigation/pagination/index.d.ts.map +1 -0
- package/src/lib/navigation/pagination/index.js +2 -0
- package/src/lib/navigation/pagination/index.js.map +1 -0
- package/src/lib/navigation/pagination/tng-pagination.d.ts +131 -0
- package/src/lib/navigation/pagination/tng-pagination.d.ts.map +1 -0
- package/src/lib/navigation/pagination/tng-pagination.js +437 -0
- package/src/lib/navigation/pagination/tng-pagination.js.map +1 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tailng-ui/primitives",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.45.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
},
|
|
18
18
|
"peerDependencies": {
|
|
19
19
|
"@angular/core": "^21.1.0",
|
|
20
|
-
"@tailng-ui/cdk": "^0.
|
|
20
|
+
"@tailng-ui/cdk": "^0.32.0",
|
|
21
21
|
"tslib": "^2.3.0"
|
|
22
22
|
},
|
|
23
23
|
"sideEffects": false
|
|
@@ -2,5 +2,6 @@ export * from './breadcrumb/tng-breadcrumb';
|
|
|
2
2
|
export * from './context-menu/tng-context-menu';
|
|
3
3
|
export * from './menu/tng-menu';
|
|
4
4
|
export * from './menubar/tng-menubar';
|
|
5
|
+
export * from './pagination';
|
|
5
6
|
export * from './tabs/tng-tabs';
|
|
6
7
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../libs/tailng-ui/primitives/src/lib/navigation/index.ts"],"names":[],"mappings":"AACA,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iCAAiC,CAAC;AAChD,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../libs/tailng-ui/primitives/src/lib/navigation/index.ts"],"names":[],"mappings":"AACA,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iCAAiC,CAAC;AAChD,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC"}
|
|
@@ -3,5 +3,6 @@ export * from './breadcrumb/tng-breadcrumb';
|
|
|
3
3
|
export * from './context-menu/tng-context-menu';
|
|
4
4
|
export * from './menu/tng-menu';
|
|
5
5
|
export * from './menubar/tng-menubar';
|
|
6
|
+
export * from './pagination';
|
|
6
7
|
export * from './tabs/tng-tabs';
|
|
7
8
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../libs/tailng-ui/primitives/src/lib/navigation/index.ts"],"names":[],"mappings":"AAAA,wBAAwB;AACxB,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iCAAiC,CAAC;AAChD,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC","sourcesContent":["// Navigation primitives\nexport * from './breadcrumb/tng-breadcrumb';\nexport * from './context-menu/tng-context-menu';\nexport * from './menu/tng-menu';\nexport * from './menubar/tng-menubar';\nexport * from './tabs/tng-tabs';\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../libs/tailng-ui/primitives/src/lib/navigation/index.ts"],"names":[],"mappings":"AAAA,wBAAwB;AACxB,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iCAAiC,CAAC;AAChD,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC","sourcesContent":["// Navigation primitives\nexport * from './breadcrumb/tng-breadcrumb';\nexport * from './context-menu/tng-context-menu';\nexport * from './menu/tng-menu';\nexport * from './menubar/tng-menubar';\nexport * from './pagination';\nexport * from './tabs/tng-tabs';\n"]}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { ComponentFixture } from '@angular/core/testing';
|
|
2
|
+
import { TngPagination, type TngPaginationChangeEvent, TngPaginationFirst, TngPaginationLast, TngPaginationNext, TngPaginationPage, TngPaginationPageSize, TngPaginationPrevious } from '../tng-pagination';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare const paginationImports: readonly [typeof TngPagination, typeof TngPaginationFirst, typeof TngPaginationPrevious, typeof TngPaginationNext, typeof TngPaginationLast, typeof TngPaginationPage, typeof TngPaginationPageSize];
|
|
5
|
+
export declare class PaginationHarnessComponent {
|
|
6
|
+
readonly ariaLabel: import("@angular/core").WritableSignal<string | null>;
|
|
7
|
+
readonly defaultPageIndex: import("@angular/core").WritableSignal<number>;
|
|
8
|
+
readonly defaultPageSize: import("@angular/core").WritableSignal<number>;
|
|
9
|
+
readonly disabled: import("@angular/core").WritableSignal<boolean>;
|
|
10
|
+
readonly mode: import("@angular/core").WritableSignal<"client" | "server">;
|
|
11
|
+
readonly pageIndex: import("@angular/core").WritableSignal<number | undefined>;
|
|
12
|
+
readonly pageSize: import("@angular/core").WritableSignal<number | undefined>;
|
|
13
|
+
readonly totalItems: import("@angular/core").WritableSignal<number>;
|
|
14
|
+
readonly pageOne: import("@angular/core").WritableSignal<number>;
|
|
15
|
+
readonly pageTwo: import("@angular/core").WritableSignal<number>;
|
|
16
|
+
readonly outsidePage: import("@angular/core").WritableSignal<number>;
|
|
17
|
+
readonly events: string[];
|
|
18
|
+
readonly pageChanges: TngPaginationChangeEvent[];
|
|
19
|
+
readonly pageIndexChanges: number[];
|
|
20
|
+
readonly pageSizeChanges: number[];
|
|
21
|
+
autoSync: boolean;
|
|
22
|
+
onPageChange(event: TngPaginationChangeEvent): void;
|
|
23
|
+
onPageIndexChange(pageIndex: number): void;
|
|
24
|
+
onPageSizeChange(pageSize: number): void;
|
|
25
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<PaginationHarnessComponent, never>;
|
|
26
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<PaginationHarnessComponent, "ng-component", never, {}, {}, never, never, true, never>;
|
|
27
|
+
}
|
|
28
|
+
export declare class PaginationRootOnlyComponent {
|
|
29
|
+
readonly ariaLabel: import("@angular/core").WritableSignal<string | null>;
|
|
30
|
+
readonly totalItems: import("@angular/core").WritableSignal<number>;
|
|
31
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<PaginationRootOnlyComponent, never>;
|
|
32
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<PaginationRootOnlyComponent, "ng-component", never, {}, {}, never, never, true, never>;
|
|
33
|
+
}
|
|
34
|
+
export declare class PaginationDivRootComponent {
|
|
35
|
+
readonly totalItems: import("@angular/core").WritableSignal<number>;
|
|
36
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<PaginationDivRootComponent, never>;
|
|
37
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<PaginationDivRootComponent, "ng-component", never, {}, {}, never, never, true, never>;
|
|
38
|
+
}
|
|
39
|
+
export declare function createPaginationFixture(): ComponentFixture<PaginationHarnessComponent>;
|
|
40
|
+
export declare function createFixture<TComponent>(component: new () => TComponent): ComponentFixture<TComponent>;
|
|
41
|
+
export declare function getByTestId<TElement extends Element>(fixture: ComponentFixture<unknown>, testId: string): TElement;
|
|
42
|
+
export declare function click(element: HTMLElement): void;
|
|
43
|
+
export declare function changeSelectValue(select: HTMLSelectElement, value: string): void;
|
|
44
|
+
//# sourceMappingURL=tng-pagination.test-harness.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tng-pagination.test-harness.d.ts","sourceRoot":"","sources":["../../../../../../../../../libs/tailng-ui/primitives/src/lib/navigation/pagination/__tests__/tng-pagination.test-harness.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAG9D,OAAO,EACL,aAAa,EACb,KAAK,wBAAwB,EAC7B,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACrB,qBAAqB,EACtB,MAAM,mBAAmB,CAAC;;AAE3B,eAAO,MAAM,iBAAiB,sMAQpB,CAAC;AAEX,qBAkCa,0BAA0B;IACrC,SAAgB,SAAS,wDAA0C;IACnE,SAAgB,gBAAgB,iDAAa;IAC7C,SAAgB,eAAe,iDAAc;IAC7C,SAAgB,QAAQ,kDAAiB;IACzC,SAAgB,IAAI,8DAAyC;IAC7D,SAAgB,SAAS,6DAAyC;IAClE,SAAgB,QAAQ,6DAAyC;IACjE,SAAgB,UAAU,iDAAc;IACxC,SAAgB,OAAO,iDAAa;IACpC,SAAgB,OAAO,iDAAa;IACpC,SAAgB,WAAW,iDAAc;IAEzC,SAAgB,MAAM,EAAE,MAAM,EAAE,CAAM;IACtC,SAAgB,WAAW,EAAE,wBAAwB,EAAE,CAAM;IAC7D,SAAgB,gBAAgB,EAAE,MAAM,EAAE,CAAM;IAChD,SAAgB,eAAe,EAAE,MAAM,EAAE,CAAM;IACxC,QAAQ,UAAS;IAEjB,YAAY,CAAC,KAAK,EAAE,wBAAwB,GAAG,IAAI;IAKnD,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAQ1C,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;yCAhCpC,0BAA0B;2CAA1B,0BAA0B;CAuCtC;AAED,qBAWa,2BAA2B;IACtC,SAAgB,SAAS,wDAAkC;IAC3D,SAAgB,UAAU,iDAAa;yCAF5B,2BAA2B;2CAA3B,2BAA2B;CAGvC;AAED,qBAMa,0BAA0B;IACrC,SAAgB,UAAU,iDAAa;yCAD5B,0BAA0B;2CAA1B,0BAA0B;CAEtC;AAED,wBAAgB,uBAAuB,IAAI,gBAAgB,CAAC,0BAA0B,CAAC,CAOtF;AAED,wBAAgB,aAAa,CAAC,UAAU,EAAE,SAAS,EAAE,UAAU,UAAU,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAOvG;AAED,wBAAgB,WAAW,CAAC,QAAQ,SAAS,OAAO,EAClD,OAAO,EAAE,gBAAgB,CAAC,OAAO,CAAC,EAClC,MAAM,EAAE,MAAM,GACb,QAAQ,CAQV;AAED,wBAAgB,KAAK,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CAOhD;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAGhF"}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
import { Component, signal } from '@angular/core';
|
|
2
|
+
import { TestBed } from '@angular/core/testing';
|
|
3
|
+
import { TngPagination, TngPaginationFirst, TngPaginationLast, TngPaginationNext, TngPaginationPage, TngPaginationPageSize, TngPaginationPrevious, } from '../tng-pagination';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export const paginationImports = [
|
|
6
|
+
TngPagination,
|
|
7
|
+
TngPaginationFirst,
|
|
8
|
+
TngPaginationPrevious,
|
|
9
|
+
TngPaginationNext,
|
|
10
|
+
TngPaginationLast,
|
|
11
|
+
TngPaginationPage,
|
|
12
|
+
TngPaginationPageSize,
|
|
13
|
+
];
|
|
14
|
+
export class PaginationHarnessComponent {
|
|
15
|
+
ariaLabel = signal('Results pages', ...(ngDevMode ? [{ debugName: "ariaLabel" }] : []));
|
|
16
|
+
defaultPageIndex = signal(0, ...(ngDevMode ? [{ debugName: "defaultPageIndex" }] : []));
|
|
17
|
+
defaultPageSize = signal(10, ...(ngDevMode ? [{ debugName: "defaultPageSize" }] : []));
|
|
18
|
+
disabled = signal(false, ...(ngDevMode ? [{ debugName: "disabled" }] : []));
|
|
19
|
+
mode = signal('client', ...(ngDevMode ? [{ debugName: "mode" }] : []));
|
|
20
|
+
pageIndex = signal(undefined, ...(ngDevMode ? [{ debugName: "pageIndex" }] : []));
|
|
21
|
+
pageSize = signal(undefined, ...(ngDevMode ? [{ debugName: "pageSize" }] : []));
|
|
22
|
+
totalItems = signal(25, ...(ngDevMode ? [{ debugName: "totalItems" }] : []));
|
|
23
|
+
pageOne = signal(0, ...(ngDevMode ? [{ debugName: "pageOne" }] : []));
|
|
24
|
+
pageTwo = signal(1, ...(ngDevMode ? [{ debugName: "pageTwo" }] : []));
|
|
25
|
+
outsidePage = signal(99, ...(ngDevMode ? [{ debugName: "outsidePage" }] : []));
|
|
26
|
+
events = [];
|
|
27
|
+
pageChanges = [];
|
|
28
|
+
pageIndexChanges = [];
|
|
29
|
+
pageSizeChanges = [];
|
|
30
|
+
autoSync = false;
|
|
31
|
+
onPageChange(event) {
|
|
32
|
+
this.events.push(`pageChange:${event.trigger}:${event.pageIndex}:${event.pageSize}`);
|
|
33
|
+
this.pageChanges.push(event);
|
|
34
|
+
}
|
|
35
|
+
onPageIndexChange(pageIndex) {
|
|
36
|
+
this.events.push(`pageIndexChange:${pageIndex}`);
|
|
37
|
+
this.pageIndexChanges.push(pageIndex);
|
|
38
|
+
if (this.autoSync) {
|
|
39
|
+
this.pageIndex.set(pageIndex);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
onPageSizeChange(pageSize) {
|
|
43
|
+
this.events.push(`pageSizeChange:${pageSize}`);
|
|
44
|
+
this.pageSizeChanges.push(pageSize);
|
|
45
|
+
if (this.autoSync) {
|
|
46
|
+
this.pageSize.set(pageSize);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: PaginationHarnessComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
50
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.1", type: PaginationHarnessComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: `
|
|
51
|
+
<nav
|
|
52
|
+
tngPagination
|
|
53
|
+
data-testid="pagination"
|
|
54
|
+
[ariaLabel]="ariaLabel()"
|
|
55
|
+
[defaultPageIndex]="defaultPageIndex()"
|
|
56
|
+
[defaultPageSize]="defaultPageSize()"
|
|
57
|
+
[disabled]="disabled()"
|
|
58
|
+
[mode]="mode()"
|
|
59
|
+
[pageIndex]="pageIndex()"
|
|
60
|
+
[pageSize]="pageSize()"
|
|
61
|
+
[totalItems]="totalItems()"
|
|
62
|
+
(pageChange)="onPageChange($event)"
|
|
63
|
+
(pageIndexChange)="onPageIndexChange($event)"
|
|
64
|
+
(pageSizeChange)="onPageSizeChange($event)"
|
|
65
|
+
>
|
|
66
|
+
<button tngPaginationFirst data-testid="first">First</button>
|
|
67
|
+
<button tngPaginationPrevious data-testid="previous">Previous</button>
|
|
68
|
+
<button tngPaginationPage data-testid="page-1" [tngPaginationPage]="pageOne()">One</button>
|
|
69
|
+
<button tngPaginationPage data-testid="page-2" [tngPaginationPage]="pageTwo()">Two</button>
|
|
70
|
+
<button tngPaginationPage data-testid="page-outside" [tngPaginationPage]="outsidePage()">Outside</button>
|
|
71
|
+
<button tngPaginationNext data-testid="next">Next</button>
|
|
72
|
+
<button tngPaginationLast data-testid="last">Last</button>
|
|
73
|
+
<select tngPaginationPageSize data-testid="size">
|
|
74
|
+
<option value="5">5</option>
|
|
75
|
+
<option value="10">10</option>
|
|
76
|
+
<option value="20">20</option>
|
|
77
|
+
<option value="bad">Bad</option>
|
|
78
|
+
</select>
|
|
79
|
+
</nav>
|
|
80
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: TngPagination, selector: "[tngPagination]", inputs: ["pageIndex", "defaultPageIndex", "pageSize", "defaultPageSize", "totalItems", "mode", "disabled", "ariaLabel"], outputs: ["pageIndexChange", "pageSizeChange", "pageChange"], exportAs: ["tngPagination"] }, { kind: "directive", type: TngPaginationFirst, selector: "button[tngPaginationFirst]", exportAs: ["tngPaginationFirst"] }, { kind: "directive", type: TngPaginationPrevious, selector: "button[tngPaginationPrevious]", exportAs: ["tngPaginationPrevious"] }, { kind: "directive", type: TngPaginationNext, selector: "button[tngPaginationNext]", exportAs: ["tngPaginationNext"] }, { kind: "directive", type: TngPaginationLast, selector: "button[tngPaginationLast]", exportAs: ["tngPaginationLast"] }, { kind: "directive", type: TngPaginationPage, selector: "button[tngPaginationPage]", inputs: ["tngPaginationPage"], exportAs: ["tngPaginationPage"] }, { kind: "directive", type: TngPaginationPageSize, selector: "select[tngPaginationPageSize]", exportAs: ["tngPaginationPageSize"] }] });
|
|
81
|
+
}
|
|
82
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: PaginationHarnessComponent, decorators: [{
|
|
83
|
+
type: Component,
|
|
84
|
+
args: [{
|
|
85
|
+
imports: [...paginationImports],
|
|
86
|
+
template: `
|
|
87
|
+
<nav
|
|
88
|
+
tngPagination
|
|
89
|
+
data-testid="pagination"
|
|
90
|
+
[ariaLabel]="ariaLabel()"
|
|
91
|
+
[defaultPageIndex]="defaultPageIndex()"
|
|
92
|
+
[defaultPageSize]="defaultPageSize()"
|
|
93
|
+
[disabled]="disabled()"
|
|
94
|
+
[mode]="mode()"
|
|
95
|
+
[pageIndex]="pageIndex()"
|
|
96
|
+
[pageSize]="pageSize()"
|
|
97
|
+
[totalItems]="totalItems()"
|
|
98
|
+
(pageChange)="onPageChange($event)"
|
|
99
|
+
(pageIndexChange)="onPageIndexChange($event)"
|
|
100
|
+
(pageSizeChange)="onPageSizeChange($event)"
|
|
101
|
+
>
|
|
102
|
+
<button tngPaginationFirst data-testid="first">First</button>
|
|
103
|
+
<button tngPaginationPrevious data-testid="previous">Previous</button>
|
|
104
|
+
<button tngPaginationPage data-testid="page-1" [tngPaginationPage]="pageOne()">One</button>
|
|
105
|
+
<button tngPaginationPage data-testid="page-2" [tngPaginationPage]="pageTwo()">Two</button>
|
|
106
|
+
<button tngPaginationPage data-testid="page-outside" [tngPaginationPage]="outsidePage()">Outside</button>
|
|
107
|
+
<button tngPaginationNext data-testid="next">Next</button>
|
|
108
|
+
<button tngPaginationLast data-testid="last">Last</button>
|
|
109
|
+
<select tngPaginationPageSize data-testid="size">
|
|
110
|
+
<option value="5">5</option>
|
|
111
|
+
<option value="10">10</option>
|
|
112
|
+
<option value="20">20</option>
|
|
113
|
+
<option value="bad">Bad</option>
|
|
114
|
+
</select>
|
|
115
|
+
</nav>
|
|
116
|
+
`,
|
|
117
|
+
}]
|
|
118
|
+
}] });
|
|
119
|
+
export class PaginationRootOnlyComponent {
|
|
120
|
+
ariaLabel = signal('Pages', ...(ngDevMode ? [{ debugName: "ariaLabel" }] : []));
|
|
121
|
+
totalItems = signal(0, ...(ngDevMode ? [{ debugName: "totalItems" }] : []));
|
|
122
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: PaginationRootOnlyComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
123
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.1", type: PaginationRootOnlyComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: `
|
|
124
|
+
<nav
|
|
125
|
+
tngPagination
|
|
126
|
+
data-testid="pagination"
|
|
127
|
+
[ariaLabel]="ariaLabel()"
|
|
128
|
+
[totalItems]="totalItems()"
|
|
129
|
+
></nav>
|
|
130
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: TngPagination, selector: "[tngPagination]", inputs: ["pageIndex", "defaultPageIndex", "pageSize", "defaultPageSize", "totalItems", "mode", "disabled", "ariaLabel"], outputs: ["pageIndexChange", "pageSizeChange", "pageChange"], exportAs: ["tngPagination"] }] });
|
|
131
|
+
}
|
|
132
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: PaginationRootOnlyComponent, decorators: [{
|
|
133
|
+
type: Component,
|
|
134
|
+
args: [{
|
|
135
|
+
imports: [TngPagination],
|
|
136
|
+
template: `
|
|
137
|
+
<nav
|
|
138
|
+
tngPagination
|
|
139
|
+
data-testid="pagination"
|
|
140
|
+
[ariaLabel]="ariaLabel()"
|
|
141
|
+
[totalItems]="totalItems()"
|
|
142
|
+
></nav>
|
|
143
|
+
`,
|
|
144
|
+
}]
|
|
145
|
+
}] });
|
|
146
|
+
export class PaginationDivRootComponent {
|
|
147
|
+
totalItems = signal(0, ...(ngDevMode ? [{ debugName: "totalItems" }] : []));
|
|
148
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: PaginationDivRootComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
149
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.1", type: PaginationDivRootComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: `
|
|
150
|
+
<div tngPagination data-testid="pagination" [totalItems]="totalItems()"></div>
|
|
151
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: TngPagination, selector: "[tngPagination]", inputs: ["pageIndex", "defaultPageIndex", "pageSize", "defaultPageSize", "totalItems", "mode", "disabled", "ariaLabel"], outputs: ["pageIndexChange", "pageSizeChange", "pageChange"], exportAs: ["tngPagination"] }] });
|
|
152
|
+
}
|
|
153
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: PaginationDivRootComponent, decorators: [{
|
|
154
|
+
type: Component,
|
|
155
|
+
args: [{
|
|
156
|
+
imports: [TngPagination],
|
|
157
|
+
template: `
|
|
158
|
+
<div tngPagination data-testid="pagination" [totalItems]="totalItems()"></div>
|
|
159
|
+
`,
|
|
160
|
+
}]
|
|
161
|
+
}] });
|
|
162
|
+
export function createPaginationFixture() {
|
|
163
|
+
const fixture = TestBed.configureTestingModule({
|
|
164
|
+
imports: [PaginationHarnessComponent],
|
|
165
|
+
}).createComponent(PaginationHarnessComponent);
|
|
166
|
+
fixture.detectChanges();
|
|
167
|
+
return fixture;
|
|
168
|
+
}
|
|
169
|
+
export function createFixture(component) {
|
|
170
|
+
const fixture = TestBed.configureTestingModule({
|
|
171
|
+
imports: [component],
|
|
172
|
+
}).createComponent(component);
|
|
173
|
+
fixture.detectChanges();
|
|
174
|
+
return fixture;
|
|
175
|
+
}
|
|
176
|
+
export function getByTestId(fixture, testId) {
|
|
177
|
+
const host = fixture.nativeElement;
|
|
178
|
+
const element = host.querySelector(`[data-testid="${testId}"]`);
|
|
179
|
+
if (element === null) {
|
|
180
|
+
throw new Error(`Expected element for data-testid="${testId}".`);
|
|
181
|
+
}
|
|
182
|
+
return element;
|
|
183
|
+
}
|
|
184
|
+
export function click(element) {
|
|
185
|
+
element.dispatchEvent(new MouseEvent('click', {
|
|
186
|
+
bubbles: true,
|
|
187
|
+
cancelable: true,
|
|
188
|
+
}));
|
|
189
|
+
}
|
|
190
|
+
export function changeSelectValue(select, value) {
|
|
191
|
+
select.value = value;
|
|
192
|
+
select.dispatchEvent(new Event('change', { bubbles: true }));
|
|
193
|
+
}
|
|
194
|
+
//# sourceMappingURL=tng-pagination.test-harness.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tng-pagination.test-harness.js","sourceRoot":"","sources":["../../../../../../../../../libs/tailng-ui/primitives/src/lib/navigation/pagination/__tests__/tng-pagination.test-harness.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAElD,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAEhD,OAAO,EACL,aAAa,EAEb,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,mBAAmB,CAAC;;AAE3B,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,aAAa;IACb,kBAAkB;IAClB,qBAAqB;IACrB,iBAAiB;IACjB,iBAAiB;IACjB,iBAAiB;IACjB,qBAAqB;CACb,CAAC;AAoCX,MAAM,OAAO,0BAA0B;IACrB,SAAS,GAAG,MAAM,CAAgB,eAAe,qDAAC,CAAC;IACnD,gBAAgB,GAAG,MAAM,CAAC,CAAC,4DAAC,CAAC;IAC7B,eAAe,GAAG,MAAM,CAAC,EAAE,2DAAC,CAAC;IAC7B,QAAQ,GAAG,MAAM,CAAC,KAAK,oDAAC,CAAC;IACzB,IAAI,GAAG,MAAM,CAAsB,QAAQ,gDAAC,CAAC;IAC7C,SAAS,GAAG,MAAM,CAAqB,SAAS,qDAAC,CAAC;IAClD,QAAQ,GAAG,MAAM,CAAqB,SAAS,oDAAC,CAAC;IACjD,UAAU,GAAG,MAAM,CAAC,EAAE,sDAAC,CAAC;IACxB,OAAO,GAAG,MAAM,CAAC,CAAC,mDAAC,CAAC;IACpB,OAAO,GAAG,MAAM,CAAC,CAAC,mDAAC,CAAC;IACpB,WAAW,GAAG,MAAM,CAAC,EAAE,uDAAC,CAAC;IAEzB,MAAM,GAAa,EAAE,CAAC;IACtB,WAAW,GAA+B,EAAE,CAAC;IAC7C,gBAAgB,GAAa,EAAE,CAAC;IAChC,eAAe,GAAa,EAAE,CAAC;IACxC,QAAQ,GAAG,KAAK,CAAC;IAEjB,YAAY,CAAC,KAA+B;QACjD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;QACrF,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAEM,iBAAiB,CAAC,SAAiB;QACxC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,SAAS,EAAE,CAAC,CAAC;QACjD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IAEM,gBAAgB,CAAC,QAAgB;QACtC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,QAAQ,EAAE,CAAC,CAAC;QAC/C,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACpC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;uGAtCU,0BAA0B;2FAA1B,0BAA0B,wEAhC3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BT,4DAzCD,aAAa,gRACb,kBAAkB,yGAClB,qBAAqB,+GACrB,iBAAiB,uGACjB,iBAAiB,uGACjB,iBAAiB,sIACjB,qBAAqB;;2FAqCV,0BAA0B;kBAlCtC,SAAS;mBAAC;oBACT,OAAO,EAAE,CAAC,GAAG,iBAAiB,CAAC;oBAC/B,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BT;iBACF;;AAqDD,MAAM,OAAO,2BAA2B;IACtB,SAAS,GAAG,MAAM,CAAgB,OAAO,qDAAC,CAAC;IAC3C,UAAU,GAAG,MAAM,CAAC,CAAC,sDAAC,CAAC;uGAF5B,2BAA2B;2FAA3B,2BAA2B,wEAT5B;;;;;;;GAOT,4DARS,aAAa;;2FAUZ,2BAA2B;kBAXvC,SAAS;mBAAC;oBACT,OAAO,EAAE,CAAC,aAAa,CAAC;oBACxB,QAAQ,EAAE;;;;;;;GAOT;iBACF;;AAYD,MAAM,OAAO,0BAA0B;IACrB,UAAU,GAAG,MAAM,CAAC,CAAC,sDAAC,CAAC;uGAD5B,0BAA0B;2FAA1B,0BAA0B,wEAJ3B;;GAET,4DAHS,aAAa;;2FAKZ,0BAA0B;kBANtC,SAAS;mBAAC;oBACT,OAAO,EAAE,CAAC,aAAa,CAAC;oBACxB,QAAQ,EAAE;;GAET;iBACF;;AAKD,MAAM,UAAU,uBAAuB;IACrC,MAAM,OAAO,GAAG,OAAO,CAAC,sBAAsB,CAAC;QAC7C,OAAO,EAAE,CAAC,0BAA0B,CAAC;KACtC,CAAC,CAAC,eAAe,CAAC,0BAA0B,CAAC,CAAC;IAE/C,OAAO,CAAC,aAAa,EAAE,CAAC;IACxB,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,aAAa,CAAa,SAA+B;IACvE,MAAM,OAAO,GAAG,OAAO,CAAC,sBAAsB,CAAC;QAC7C,OAAO,EAAE,CAAC,SAAS,CAAC;KACrB,CAAC,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;IAE9B,OAAO,CAAC,aAAa,EAAE,CAAC;IACxB,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,WAAW,CACzB,OAAkC,EAClC,MAAc;IAEd,MAAM,IAAI,GAAG,OAAO,CAAC,aAA4B,CAAC;IAClD,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,iBAAiB,MAAM,IAAI,CAAC,CAAC;IAChE,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,qCAAqC,MAAM,IAAI,CAAC,CAAC;IACnE,CAAC;IAED,OAAO,OAAmB,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,OAAoB;IACxC,OAAO,CAAC,aAAa,CACnB,IAAI,UAAU,CAAC,OAAO,EAAE;QACtB,OAAO,EAAE,IAAI;QACb,UAAU,EAAE,IAAI;KACjB,CAAC,CACH,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAyB,EAAE,KAAa;IACxE,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,MAAM,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAC/D,CAAC","sourcesContent":["import { Component, signal } from '@angular/core';\nimport type { ComponentFixture } from '@angular/core/testing';\nimport { TestBed } from '@angular/core/testing';\n\nimport {\n TngPagination,\n type TngPaginationChangeEvent,\n TngPaginationFirst,\n TngPaginationLast,\n TngPaginationNext,\n TngPaginationPage,\n TngPaginationPageSize,\n TngPaginationPrevious,\n} from '../tng-pagination';\n\nexport const paginationImports = [\n TngPagination,\n TngPaginationFirst,\n TngPaginationPrevious,\n TngPaginationNext,\n TngPaginationLast,\n TngPaginationPage,\n TngPaginationPageSize,\n] as const;\n\n@Component({\n imports: [...paginationImports],\n template: `\n <nav\n tngPagination\n data-testid=\"pagination\"\n [ariaLabel]=\"ariaLabel()\"\n [defaultPageIndex]=\"defaultPageIndex()\"\n [defaultPageSize]=\"defaultPageSize()\"\n [disabled]=\"disabled()\"\n [mode]=\"mode()\"\n [pageIndex]=\"pageIndex()\"\n [pageSize]=\"pageSize()\"\n [totalItems]=\"totalItems()\"\n (pageChange)=\"onPageChange($event)\"\n (pageIndexChange)=\"onPageIndexChange($event)\"\n (pageSizeChange)=\"onPageSizeChange($event)\"\n >\n <button tngPaginationFirst data-testid=\"first\">First</button>\n <button tngPaginationPrevious data-testid=\"previous\">Previous</button>\n <button tngPaginationPage data-testid=\"page-1\" [tngPaginationPage]=\"pageOne()\">One</button>\n <button tngPaginationPage data-testid=\"page-2\" [tngPaginationPage]=\"pageTwo()\">Two</button>\n <button tngPaginationPage data-testid=\"page-outside\" [tngPaginationPage]=\"outsidePage()\">Outside</button>\n <button tngPaginationNext data-testid=\"next\">Next</button>\n <button tngPaginationLast data-testid=\"last\">Last</button>\n <select tngPaginationPageSize data-testid=\"size\">\n <option value=\"5\">5</option>\n <option value=\"10\">10</option>\n <option value=\"20\">20</option>\n <option value=\"bad\">Bad</option>\n </select>\n </nav>\n `,\n})\nexport class PaginationHarnessComponent {\n public readonly ariaLabel = signal<string | null>('Results pages');\n public readonly defaultPageIndex = signal(0);\n public readonly defaultPageSize = signal(10);\n public readonly disabled = signal(false);\n public readonly mode = signal<'client' | 'server'>('client');\n public readonly pageIndex = signal<number | undefined>(undefined);\n public readonly pageSize = signal<number | undefined>(undefined);\n public readonly totalItems = signal(25);\n public readonly pageOne = signal(0);\n public readonly pageTwo = signal(1);\n public readonly outsidePage = signal(99);\n\n public readonly events: string[] = [];\n public readonly pageChanges: TngPaginationChangeEvent[] = [];\n public readonly pageIndexChanges: number[] = [];\n public readonly pageSizeChanges: number[] = [];\n public autoSync = false;\n\n public onPageChange(event: TngPaginationChangeEvent): void {\n this.events.push(`pageChange:${event.trigger}:${event.pageIndex}:${event.pageSize}`);\n this.pageChanges.push(event);\n }\n\n public onPageIndexChange(pageIndex: number): void {\n this.events.push(`pageIndexChange:${pageIndex}`);\n this.pageIndexChanges.push(pageIndex);\n if (this.autoSync) {\n this.pageIndex.set(pageIndex);\n }\n }\n\n public onPageSizeChange(pageSize: number): void {\n this.events.push(`pageSizeChange:${pageSize}`);\n this.pageSizeChanges.push(pageSize);\n if (this.autoSync) {\n this.pageSize.set(pageSize);\n }\n }\n}\n\n@Component({\n imports: [TngPagination],\n template: `\n <nav\n tngPagination\n data-testid=\"pagination\"\n [ariaLabel]=\"ariaLabel()\"\n [totalItems]=\"totalItems()\"\n ></nav>\n `,\n})\nexport class PaginationRootOnlyComponent {\n public readonly ariaLabel = signal<string | null>('Pages');\n public readonly totalItems = signal(0);\n}\n\n@Component({\n imports: [TngPagination],\n template: `\n <div tngPagination data-testid=\"pagination\" [totalItems]=\"totalItems()\"></div>\n `,\n})\nexport class PaginationDivRootComponent {\n public readonly totalItems = signal(0);\n}\n\nexport function createPaginationFixture(): ComponentFixture<PaginationHarnessComponent> {\n const fixture = TestBed.configureTestingModule({\n imports: [PaginationHarnessComponent],\n }).createComponent(PaginationHarnessComponent);\n\n fixture.detectChanges();\n return fixture;\n}\n\nexport function createFixture<TComponent>(component: new () => TComponent): ComponentFixture<TComponent> {\n const fixture = TestBed.configureTestingModule({\n imports: [component],\n }).createComponent(component);\n\n fixture.detectChanges();\n return fixture;\n}\n\nexport function getByTestId<TElement extends Element>(\n fixture: ComponentFixture<unknown>,\n testId: string,\n): TElement {\n const host = fixture.nativeElement as HTMLElement;\n const element = host.querySelector(`[data-testid=\"${testId}\"]`);\n if (element === null) {\n throw new Error(`Expected element for data-testid=\"${testId}\".`);\n }\n\n return element as TElement;\n}\n\nexport function click(element: HTMLElement): void {\n element.dispatchEvent(\n new MouseEvent('click', {\n bubbles: true,\n cancelable: true,\n }),\n );\n}\n\nexport function changeSelectValue(select: HTMLSelectElement, value: string): void {\n select.value = value;\n select.dispatchEvent(new Event('change', { bubbles: true }));\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/navigation/pagination/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/navigation/pagination/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC","sourcesContent":["export * from './tng-pagination';\n"]}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { type TngTablePaginationMode } from '@tailng-ui/cdk';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export type TngPaginationMode = TngTablePaginationMode;
|
|
4
|
+
export type TngPaginationTrigger = 'first' | 'last' | 'next' | 'page' | 'previous' | 'programmatic' | 'size';
|
|
5
|
+
export type TngPaginationChangeEvent = Readonly<{
|
|
6
|
+
mode: TngPaginationMode;
|
|
7
|
+
pageCount: number;
|
|
8
|
+
pageIndex: number;
|
|
9
|
+
pageSize: number;
|
|
10
|
+
previousPageIndex: number;
|
|
11
|
+
previousPageSize: number;
|
|
12
|
+
totalItems: number;
|
|
13
|
+
trigger: TngPaginationTrigger;
|
|
14
|
+
}>;
|
|
15
|
+
export declare class TngPagination {
|
|
16
|
+
private readonly uncontrolledPageIndex;
|
|
17
|
+
private readonly uncontrolledPageSize;
|
|
18
|
+
private readonly hasUncontrolledPageIndex;
|
|
19
|
+
private readonly hasUncontrolledPageSize;
|
|
20
|
+
readonly pageIndex: import("@angular/core").InputSignalWithTransform<number | undefined, unknown>;
|
|
21
|
+
readonly defaultPageIndex: import("@angular/core").InputSignalWithTransform<number, unknown>;
|
|
22
|
+
readonly pageSize: import("@angular/core").InputSignalWithTransform<number | undefined, unknown>;
|
|
23
|
+
readonly defaultPageSize: import("@angular/core").InputSignalWithTransform<number, unknown>;
|
|
24
|
+
readonly totalItems: import("@angular/core").InputSignalWithTransform<number, unknown>;
|
|
25
|
+
readonly mode: import("@angular/core").InputSignalWithTransform<TngTablePaginationMode, unknown>;
|
|
26
|
+
readonly disabled: import("@angular/core").InputSignalWithTransform<boolean, string | boolean>;
|
|
27
|
+
readonly ariaLabel: import("@angular/core").InputSignalWithTransform<string | null, unknown>;
|
|
28
|
+
readonly pageIndexChange: import("@angular/core").OutputEmitterRef<number>;
|
|
29
|
+
readonly pageSizeChange: import("@angular/core").OutputEmitterRef<number>;
|
|
30
|
+
readonly pageChange: import("@angular/core").OutputEmitterRef<Readonly<{
|
|
31
|
+
mode: TngPaginationMode;
|
|
32
|
+
pageCount: number;
|
|
33
|
+
pageIndex: number;
|
|
34
|
+
pageSize: number;
|
|
35
|
+
previousPageIndex: number;
|
|
36
|
+
previousPageSize: number;
|
|
37
|
+
totalItems: number;
|
|
38
|
+
trigger: TngPaginationTrigger;
|
|
39
|
+
}>>;
|
|
40
|
+
readonly state: import("@angular/core").Signal<Readonly<{
|
|
41
|
+
pageIndex: number;
|
|
42
|
+
pageSize: number;
|
|
43
|
+
}>>;
|
|
44
|
+
readonly pageCount: import("@angular/core").Signal<number>;
|
|
45
|
+
readonly isFirstPage: import("@angular/core").Signal<boolean>;
|
|
46
|
+
readonly isLastPage: import("@angular/core").Signal<boolean>;
|
|
47
|
+
protected get ariaLabelAttr(): string | null;
|
|
48
|
+
protected get dataDisabledAttr(): '' | null;
|
|
49
|
+
protected get dataModeAttr(): TngPaginationMode;
|
|
50
|
+
protected get dataPageCountAttr(): number;
|
|
51
|
+
protected get dataPageIndexAttr(): number;
|
|
52
|
+
protected get dataPageSizeAttr(): number;
|
|
53
|
+
protected readonly dataSlot: "pagination";
|
|
54
|
+
firstPage(): void;
|
|
55
|
+
previousPage(): void;
|
|
56
|
+
nextPage(): void;
|
|
57
|
+
lastPage(): void;
|
|
58
|
+
setPageIndex(pageIndex: number, trigger?: TngPaginationTrigger): void;
|
|
59
|
+
setPageSize(pageSize: number, trigger?: TngPaginationTrigger): void;
|
|
60
|
+
canGoToPreviousPage(): boolean;
|
|
61
|
+
canGoToNextPage(): boolean;
|
|
62
|
+
canGoToPage(pageIndex: number): boolean;
|
|
63
|
+
private rawPageIndex;
|
|
64
|
+
private createController;
|
|
65
|
+
private rawPageSize;
|
|
66
|
+
private commit;
|
|
67
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<TngPagination, never>;
|
|
68
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<TngPagination, "[tngPagination]", ["tngPagination"], { "pageIndex": { "alias": "pageIndex"; "required": false; "isSignal": true; }; "defaultPageIndex": { "alias": "defaultPageIndex"; "required": false; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; "isSignal": true; }; "defaultPageSize": { "alias": "defaultPageSize"; "required": false; "isSignal": true; }; "totalItems": { "alias": "totalItems"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "pageIndexChange": "pageIndexChange"; "pageSizeChange": "pageSizeChange"; "pageChange": "pageChange"; }, never, never, true, never>;
|
|
69
|
+
}
|
|
70
|
+
declare abstract class TngPaginationButton {
|
|
71
|
+
protected readonly pagination: TngPagination;
|
|
72
|
+
readonly disabled: import("@angular/core").InputSignalWithTransform<boolean, string | boolean>;
|
|
73
|
+
protected get ariaDisabledAttr(): 'true' | null;
|
|
74
|
+
protected get dataDisabledAttr(): '' | null;
|
|
75
|
+
protected get disabledAttr(): '' | null;
|
|
76
|
+
protected readonly typeAttr: "button";
|
|
77
|
+
protected isDisabled(): boolean;
|
|
78
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<TngPaginationButton, never>;
|
|
79
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<TngPaginationButton, never, never, { "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
80
|
+
}
|
|
81
|
+
export declare class TngPaginationFirst extends TngPaginationButton {
|
|
82
|
+
protected readonly dataSlot: "pagination-first";
|
|
83
|
+
protected isDisabled(): boolean;
|
|
84
|
+
protected onClick(): void;
|
|
85
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<TngPaginationFirst, never>;
|
|
86
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<TngPaginationFirst, "button[tngPaginationFirst]", ["tngPaginationFirst"], {}, {}, never, never, true, never>;
|
|
87
|
+
}
|
|
88
|
+
export declare class TngPaginationPrevious extends TngPaginationButton {
|
|
89
|
+
protected readonly dataSlot: "pagination-previous";
|
|
90
|
+
protected isDisabled(): boolean;
|
|
91
|
+
protected onClick(): void;
|
|
92
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<TngPaginationPrevious, never>;
|
|
93
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<TngPaginationPrevious, "button[tngPaginationPrevious]", ["tngPaginationPrevious"], {}, {}, never, never, true, never>;
|
|
94
|
+
}
|
|
95
|
+
export declare class TngPaginationNext extends TngPaginationButton {
|
|
96
|
+
protected readonly dataSlot: "pagination-next";
|
|
97
|
+
protected isDisabled(): boolean;
|
|
98
|
+
protected onClick(): void;
|
|
99
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<TngPaginationNext, never>;
|
|
100
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<TngPaginationNext, "button[tngPaginationNext]", ["tngPaginationNext"], {}, {}, never, never, true, never>;
|
|
101
|
+
}
|
|
102
|
+
export declare class TngPaginationLast extends TngPaginationButton {
|
|
103
|
+
protected readonly dataSlot: "pagination-last";
|
|
104
|
+
protected isDisabled(): boolean;
|
|
105
|
+
protected onClick(): void;
|
|
106
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<TngPaginationLast, never>;
|
|
107
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<TngPaginationLast, "button[tngPaginationLast]", ["tngPaginationLast"], {}, {}, never, never, true, never>;
|
|
108
|
+
}
|
|
109
|
+
export declare class TngPaginationPage extends TngPaginationButton {
|
|
110
|
+
readonly page: import("@angular/core").InputSignalWithTransform<number, unknown>;
|
|
111
|
+
protected get ariaCurrentAttr(): 'page' | null;
|
|
112
|
+
protected get dataCurrentAttr(): '' | null;
|
|
113
|
+
protected readonly dataSlot: "pagination-page";
|
|
114
|
+
protected onClick(): void;
|
|
115
|
+
private isCurrentPage;
|
|
116
|
+
protected isDisabled(): boolean;
|
|
117
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<TngPaginationPage, never>;
|
|
118
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<TngPaginationPage, "button[tngPaginationPage]", ["tngPaginationPage"], { "page": { "alias": "tngPaginationPage"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
119
|
+
}
|
|
120
|
+
export declare class TngPaginationPageSize {
|
|
121
|
+
private readonly pagination;
|
|
122
|
+
private readonly hostRef;
|
|
123
|
+
protected readonly dataSlot: "pagination-page-size";
|
|
124
|
+
protected get disabledProp(): boolean;
|
|
125
|
+
protected get valueProp(): string;
|
|
126
|
+
protected onChange(): void;
|
|
127
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<TngPaginationPageSize, never>;
|
|
128
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<TngPaginationPageSize, "select[tngPaginationPageSize]", ["tngPaginationPageSize"], {}, {}, never, never, true, never>;
|
|
129
|
+
}
|
|
130
|
+
export {};
|
|
131
|
+
//# sourceMappingURL=tng-pagination.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tng-pagination.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/navigation/pagination/tng-pagination.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,437 @@
|
|
|
1
|
+
import { Directive, ElementRef, HostBinding, HostListener, booleanAttribute, computed, inject, input, output, signal, } from '@angular/core';
|
|
2
|
+
import { createTngPaginationController, } from '@tailng-ui/cdk';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
function normalizeModeInput(value) {
|
|
5
|
+
return value === 'server' ? 'server' : 'client';
|
|
6
|
+
}
|
|
7
|
+
function normalizeNumberInput(value, fallback) {
|
|
8
|
+
if (typeof value === 'number') {
|
|
9
|
+
return Number.isFinite(value) ? value : fallback;
|
|
10
|
+
}
|
|
11
|
+
if (typeof value === 'string') {
|
|
12
|
+
const normalized = value.trim();
|
|
13
|
+
if (normalized.length === 0) {
|
|
14
|
+
return fallback;
|
|
15
|
+
}
|
|
16
|
+
const parsed = Number(normalized);
|
|
17
|
+
return Number.isFinite(parsed) ? parsed : fallback;
|
|
18
|
+
}
|
|
19
|
+
return fallback;
|
|
20
|
+
}
|
|
21
|
+
function normalizePageIndexInput(value) {
|
|
22
|
+
return Math.max(0, Math.trunc(normalizeNumberInput(value, 0)));
|
|
23
|
+
}
|
|
24
|
+
function normalizeOptionalPageIndexInput(value) {
|
|
25
|
+
if (value === undefined || value === null) {
|
|
26
|
+
return undefined;
|
|
27
|
+
}
|
|
28
|
+
return normalizePageIndexInput(value);
|
|
29
|
+
}
|
|
30
|
+
function normalizePageSizeInput(value) {
|
|
31
|
+
return Math.max(1, Math.trunc(normalizeNumberInput(value, 10)));
|
|
32
|
+
}
|
|
33
|
+
function normalizeTotalItemsInput(value) {
|
|
34
|
+
return Math.max(0, Math.trunc(normalizeNumberInput(value, 0)));
|
|
35
|
+
}
|
|
36
|
+
function normalizeStringInput(value) {
|
|
37
|
+
if (value === undefined || value === null) {
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
if (typeof value !== 'string' &&
|
|
41
|
+
typeof value !== 'number' &&
|
|
42
|
+
typeof value !== 'boolean' &&
|
|
43
|
+
typeof value !== 'bigint') {
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
const normalized = String(value).trim();
|
|
47
|
+
return normalized.length > 0 ? normalized : null;
|
|
48
|
+
}
|
|
49
|
+
export class TngPagination {
|
|
50
|
+
uncontrolledPageIndex = signal(0, ...(ngDevMode ? [{ debugName: "uncontrolledPageIndex" }] : []));
|
|
51
|
+
uncontrolledPageSize = signal(10, ...(ngDevMode ? [{ debugName: "uncontrolledPageSize" }] : []));
|
|
52
|
+
hasUncontrolledPageIndex = signal(false, ...(ngDevMode ? [{ debugName: "hasUncontrolledPageIndex" }] : []));
|
|
53
|
+
hasUncontrolledPageSize = signal(false, ...(ngDevMode ? [{ debugName: "hasUncontrolledPageSize" }] : []));
|
|
54
|
+
pageIndex = input(undefined, { ...(ngDevMode ? { debugName: "pageIndex" } : {}), transform: normalizeOptionalPageIndexInput });
|
|
55
|
+
defaultPageIndex = input(0, { ...(ngDevMode ? { debugName: "defaultPageIndex" } : {}), transform: normalizePageIndexInput });
|
|
56
|
+
pageSize = input(undefined, { ...(ngDevMode ? { debugName: "pageSize" } : {}), transform: (value) => {
|
|
57
|
+
if (value === undefined || value === null) {
|
|
58
|
+
return undefined;
|
|
59
|
+
}
|
|
60
|
+
return normalizePageSizeInput(value);
|
|
61
|
+
} });
|
|
62
|
+
defaultPageSize = input(10, { ...(ngDevMode ? { debugName: "defaultPageSize" } : {}), transform: normalizePageSizeInput });
|
|
63
|
+
totalItems = input(0, { ...(ngDevMode ? { debugName: "totalItems" } : {}), transform: normalizeTotalItemsInput });
|
|
64
|
+
mode = input('client', { ...(ngDevMode ? { debugName: "mode" } : {}), transform: normalizeModeInput });
|
|
65
|
+
disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : {}), transform: booleanAttribute });
|
|
66
|
+
ariaLabel = input('Pagination', { ...(ngDevMode ? { debugName: "ariaLabel" } : {}), transform: normalizeStringInput });
|
|
67
|
+
pageIndexChange = output();
|
|
68
|
+
pageSizeChange = output();
|
|
69
|
+
pageChange = output();
|
|
70
|
+
state = computed(() => {
|
|
71
|
+
return this.createController().setPageIndex(this.rawPageIndex(), this.totalItems());
|
|
72
|
+
}, ...(ngDevMode ? [{ debugName: "state" }] : []));
|
|
73
|
+
pageCount = computed(() => this.createController().getPageCount(this.totalItems()), ...(ngDevMode ? [{ debugName: "pageCount" }] : []));
|
|
74
|
+
isFirstPage = computed(() => this.state().pageIndex <= 0, ...(ngDevMode ? [{ debugName: "isFirstPage" }] : []));
|
|
75
|
+
isLastPage = computed(() => {
|
|
76
|
+
const pageCount = this.pageCount();
|
|
77
|
+
return pageCount === 0 || this.state().pageIndex >= pageCount - 1;
|
|
78
|
+
}, ...(ngDevMode ? [{ debugName: "isLastPage" }] : []));
|
|
79
|
+
get ariaLabelAttr() {
|
|
80
|
+
return this.ariaLabel();
|
|
81
|
+
}
|
|
82
|
+
get dataDisabledAttr() {
|
|
83
|
+
return this.disabled() ? '' : null;
|
|
84
|
+
}
|
|
85
|
+
get dataModeAttr() {
|
|
86
|
+
return this.mode();
|
|
87
|
+
}
|
|
88
|
+
get dataPageCountAttr() {
|
|
89
|
+
return this.pageCount();
|
|
90
|
+
}
|
|
91
|
+
get dataPageIndexAttr() {
|
|
92
|
+
return this.state().pageIndex;
|
|
93
|
+
}
|
|
94
|
+
get dataPageSizeAttr() {
|
|
95
|
+
return this.state().pageSize;
|
|
96
|
+
}
|
|
97
|
+
dataSlot = 'pagination';
|
|
98
|
+
firstPage() {
|
|
99
|
+
this.setPageIndex(0, 'first');
|
|
100
|
+
}
|
|
101
|
+
previousPage() {
|
|
102
|
+
this.setPageIndex(this.state().pageIndex - 1, 'previous');
|
|
103
|
+
}
|
|
104
|
+
nextPage() {
|
|
105
|
+
this.setPageIndex(this.state().pageIndex + 1, 'next');
|
|
106
|
+
}
|
|
107
|
+
lastPage() {
|
|
108
|
+
const pageCount = this.pageCount();
|
|
109
|
+
this.setPageIndex(pageCount > 0 ? pageCount - 1 : 0, 'last');
|
|
110
|
+
}
|
|
111
|
+
setPageIndex(pageIndex, trigger = 'programmatic') {
|
|
112
|
+
this.commit(this.createController().setPageIndex(pageIndex, this.totalItems()), trigger);
|
|
113
|
+
}
|
|
114
|
+
setPageSize(pageSize, trigger = 'size') {
|
|
115
|
+
const current = this.state();
|
|
116
|
+
const anchorIndex = current.pageIndex * current.pageSize;
|
|
117
|
+
this.commit(this.createController().setPageSize(pageSize, this.totalItems(), { anchorIndex }), trigger);
|
|
118
|
+
}
|
|
119
|
+
canGoToPreviousPage() {
|
|
120
|
+
return !this.disabled() && !this.isFirstPage();
|
|
121
|
+
}
|
|
122
|
+
canGoToNextPage() {
|
|
123
|
+
if (this.mode() === 'server') {
|
|
124
|
+
return !this.disabled();
|
|
125
|
+
}
|
|
126
|
+
return !this.disabled() && !this.isLastPage();
|
|
127
|
+
}
|
|
128
|
+
canGoToPage(pageIndex) {
|
|
129
|
+
if (this.disabled() || this.state().pageIndex === pageIndex) {
|
|
130
|
+
return false;
|
|
131
|
+
}
|
|
132
|
+
if (this.mode() === 'server') {
|
|
133
|
+
return pageIndex >= 0;
|
|
134
|
+
}
|
|
135
|
+
const pageCount = this.pageCount();
|
|
136
|
+
return pageIndex >= 0 && pageIndex < pageCount;
|
|
137
|
+
}
|
|
138
|
+
rawPageIndex() {
|
|
139
|
+
return (this.pageIndex() ??
|
|
140
|
+
(this.hasUncontrolledPageIndex() ? this.uncontrolledPageIndex() : this.defaultPageIndex()));
|
|
141
|
+
}
|
|
142
|
+
createController() {
|
|
143
|
+
return createTngPaginationController({
|
|
144
|
+
mode: this.mode(),
|
|
145
|
+
pageIndex: this.rawPageIndex(),
|
|
146
|
+
pageSize: this.rawPageSize(),
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
rawPageSize() {
|
|
150
|
+
return (this.pageSize() ??
|
|
151
|
+
(this.hasUncontrolledPageSize() ? this.uncontrolledPageSize() : this.defaultPageSize()));
|
|
152
|
+
}
|
|
153
|
+
commit(nextState, trigger) {
|
|
154
|
+
if (this.disabled()) {
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
const previousState = this.state();
|
|
158
|
+
if (nextState.pageIndex === previousState.pageIndex &&
|
|
159
|
+
nextState.pageSize === previousState.pageSize) {
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
if (this.pageIndex() === undefined) {
|
|
163
|
+
this.hasUncontrolledPageIndex.set(true);
|
|
164
|
+
this.uncontrolledPageIndex.set(nextState.pageIndex);
|
|
165
|
+
}
|
|
166
|
+
if (this.pageSize() === undefined) {
|
|
167
|
+
this.hasUncontrolledPageSize.set(true);
|
|
168
|
+
this.uncontrolledPageSize.set(nextState.pageSize);
|
|
169
|
+
}
|
|
170
|
+
this.pageIndexChange.emit(nextState.pageIndex);
|
|
171
|
+
if (nextState.pageSize !== previousState.pageSize) {
|
|
172
|
+
this.pageSizeChange.emit(nextState.pageSize);
|
|
173
|
+
}
|
|
174
|
+
this.pageChange.emit({
|
|
175
|
+
mode: this.mode(),
|
|
176
|
+
pageCount: this.pageCount(),
|
|
177
|
+
pageIndex: nextState.pageIndex,
|
|
178
|
+
pageSize: nextState.pageSize,
|
|
179
|
+
previousPageIndex: previousState.pageIndex,
|
|
180
|
+
previousPageSize: previousState.pageSize,
|
|
181
|
+
totalItems: this.totalItems(),
|
|
182
|
+
trigger,
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngPagination, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
186
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.1", type: TngPagination, isStandalone: true, selector: "[tngPagination]", inputs: { pageIndex: { classPropertyName: "pageIndex", publicName: "pageIndex", isSignal: true, isRequired: false, transformFunction: null }, defaultPageIndex: { classPropertyName: "defaultPageIndex", publicName: "defaultPageIndex", isSignal: true, isRequired: false, transformFunction: null }, pageSize: { classPropertyName: "pageSize", publicName: "pageSize", isSignal: true, isRequired: false, transformFunction: null }, defaultPageSize: { classPropertyName: "defaultPageSize", publicName: "defaultPageSize", isSignal: true, isRequired: false, transformFunction: null }, totalItems: { classPropertyName: "totalItems", publicName: "totalItems", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { pageIndexChange: "pageIndexChange", pageSizeChange: "pageSizeChange", pageChange: "pageChange" }, host: { properties: { "attr.aria-label": "this.ariaLabelAttr", "attr.data-disabled": "this.dataDisabledAttr", "attr.data-mode": "this.dataModeAttr", "attr.data-page-count": "this.dataPageCountAttr", "attr.data-page-index": "this.dataPageIndexAttr", "attr.data-page-size": "this.dataPageSizeAttr", "attr.data-slot": "this.dataSlot" } }, exportAs: ["tngPagination"], ngImport: i0 });
|
|
187
|
+
}
|
|
188
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngPagination, decorators: [{
|
|
189
|
+
type: Directive,
|
|
190
|
+
args: [{
|
|
191
|
+
selector: '[tngPagination]',
|
|
192
|
+
exportAs: 'tngPagination',
|
|
193
|
+
}]
|
|
194
|
+
}], propDecorators: { pageIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "pageIndex", required: false }] }], defaultPageIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultPageIndex", required: false }] }], pageSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "pageSize", required: false }] }], defaultPageSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultPageSize", required: false }] }], totalItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "totalItems", required: false }] }], mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], pageIndexChange: [{ type: i0.Output, args: ["pageIndexChange"] }], pageSizeChange: [{ type: i0.Output, args: ["pageSizeChange"] }], pageChange: [{ type: i0.Output, args: ["pageChange"] }], ariaLabelAttr: [{
|
|
195
|
+
type: HostBinding,
|
|
196
|
+
args: ['attr.aria-label']
|
|
197
|
+
}], dataDisabledAttr: [{
|
|
198
|
+
type: HostBinding,
|
|
199
|
+
args: ['attr.data-disabled']
|
|
200
|
+
}], dataModeAttr: [{
|
|
201
|
+
type: HostBinding,
|
|
202
|
+
args: ['attr.data-mode']
|
|
203
|
+
}], dataPageCountAttr: [{
|
|
204
|
+
type: HostBinding,
|
|
205
|
+
args: ['attr.data-page-count']
|
|
206
|
+
}], dataPageIndexAttr: [{
|
|
207
|
+
type: HostBinding,
|
|
208
|
+
args: ['attr.data-page-index']
|
|
209
|
+
}], dataPageSizeAttr: [{
|
|
210
|
+
type: HostBinding,
|
|
211
|
+
args: ['attr.data-page-size']
|
|
212
|
+
}], dataSlot: [{
|
|
213
|
+
type: HostBinding,
|
|
214
|
+
args: ['attr.data-slot']
|
|
215
|
+
}] } });
|
|
216
|
+
class TngPaginationButton {
|
|
217
|
+
pagination = inject(TngPagination);
|
|
218
|
+
disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : {}), transform: booleanAttribute });
|
|
219
|
+
get ariaDisabledAttr() {
|
|
220
|
+
return this.isDisabled() ? 'true' : null;
|
|
221
|
+
}
|
|
222
|
+
get dataDisabledAttr() {
|
|
223
|
+
return this.isDisabled() ? '' : null;
|
|
224
|
+
}
|
|
225
|
+
get disabledAttr() {
|
|
226
|
+
return this.isDisabled() ? '' : null;
|
|
227
|
+
}
|
|
228
|
+
typeAttr = 'button';
|
|
229
|
+
isDisabled() {
|
|
230
|
+
return this.disabled() || this.pagination.disabled();
|
|
231
|
+
}
|
|
232
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngPaginationButton, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
233
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.1", type: TngPaginationButton, isStandalone: true, inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.aria-disabled": "this.ariaDisabledAttr", "attr.data-disabled": "this.dataDisabledAttr", "attr.disabled": "this.disabledAttr", "attr.type": "this.typeAttr" } }, ngImport: i0 });
|
|
234
|
+
}
|
|
235
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngPaginationButton, decorators: [{
|
|
236
|
+
type: Directive
|
|
237
|
+
}], propDecorators: { disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], ariaDisabledAttr: [{
|
|
238
|
+
type: HostBinding,
|
|
239
|
+
args: ['attr.aria-disabled']
|
|
240
|
+
}], dataDisabledAttr: [{
|
|
241
|
+
type: HostBinding,
|
|
242
|
+
args: ['attr.data-disabled']
|
|
243
|
+
}], disabledAttr: [{
|
|
244
|
+
type: HostBinding,
|
|
245
|
+
args: ['attr.disabled']
|
|
246
|
+
}], typeAttr: [{
|
|
247
|
+
type: HostBinding,
|
|
248
|
+
args: ['attr.type']
|
|
249
|
+
}] } });
|
|
250
|
+
export class TngPaginationFirst extends TngPaginationButton {
|
|
251
|
+
dataSlot = 'pagination-first';
|
|
252
|
+
isDisabled() {
|
|
253
|
+
return super.isDisabled() || this.pagination.isFirstPage();
|
|
254
|
+
}
|
|
255
|
+
onClick() {
|
|
256
|
+
if (this.isDisabled()) {
|
|
257
|
+
return;
|
|
258
|
+
}
|
|
259
|
+
this.pagination.firstPage();
|
|
260
|
+
}
|
|
261
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngPaginationFirst, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
262
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.1", type: TngPaginationFirst, isStandalone: true, selector: "button[tngPaginationFirst]", host: { listeners: { "click": "onClick()" }, properties: { "attr.data-slot": "this.dataSlot" } }, exportAs: ["tngPaginationFirst"], usesInheritance: true, ngImport: i0 });
|
|
263
|
+
}
|
|
264
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngPaginationFirst, decorators: [{
|
|
265
|
+
type: Directive,
|
|
266
|
+
args: [{
|
|
267
|
+
selector: 'button[tngPaginationFirst]',
|
|
268
|
+
exportAs: 'tngPaginationFirst',
|
|
269
|
+
}]
|
|
270
|
+
}], propDecorators: { dataSlot: [{
|
|
271
|
+
type: HostBinding,
|
|
272
|
+
args: ['attr.data-slot']
|
|
273
|
+
}], onClick: [{
|
|
274
|
+
type: HostListener,
|
|
275
|
+
args: ['click']
|
|
276
|
+
}] } });
|
|
277
|
+
export class TngPaginationPrevious extends TngPaginationButton {
|
|
278
|
+
dataSlot = 'pagination-previous';
|
|
279
|
+
isDisabled() {
|
|
280
|
+
return super.isDisabled() || !this.pagination.canGoToPreviousPage();
|
|
281
|
+
}
|
|
282
|
+
onClick() {
|
|
283
|
+
if (this.isDisabled()) {
|
|
284
|
+
return;
|
|
285
|
+
}
|
|
286
|
+
this.pagination.previousPage();
|
|
287
|
+
}
|
|
288
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngPaginationPrevious, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
289
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.1", type: TngPaginationPrevious, isStandalone: true, selector: "button[tngPaginationPrevious]", host: { listeners: { "click": "onClick()" }, properties: { "attr.data-slot": "this.dataSlot" } }, exportAs: ["tngPaginationPrevious"], usesInheritance: true, ngImport: i0 });
|
|
290
|
+
}
|
|
291
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngPaginationPrevious, decorators: [{
|
|
292
|
+
type: Directive,
|
|
293
|
+
args: [{
|
|
294
|
+
selector: 'button[tngPaginationPrevious]',
|
|
295
|
+
exportAs: 'tngPaginationPrevious',
|
|
296
|
+
}]
|
|
297
|
+
}], propDecorators: { dataSlot: [{
|
|
298
|
+
type: HostBinding,
|
|
299
|
+
args: ['attr.data-slot']
|
|
300
|
+
}], onClick: [{
|
|
301
|
+
type: HostListener,
|
|
302
|
+
args: ['click']
|
|
303
|
+
}] } });
|
|
304
|
+
export class TngPaginationNext extends TngPaginationButton {
|
|
305
|
+
dataSlot = 'pagination-next';
|
|
306
|
+
isDisabled() {
|
|
307
|
+
return super.isDisabled() || !this.pagination.canGoToNextPage();
|
|
308
|
+
}
|
|
309
|
+
onClick() {
|
|
310
|
+
if (this.isDisabled()) {
|
|
311
|
+
return;
|
|
312
|
+
}
|
|
313
|
+
this.pagination.nextPage();
|
|
314
|
+
}
|
|
315
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngPaginationNext, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
316
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.1", type: TngPaginationNext, isStandalone: true, selector: "button[tngPaginationNext]", host: { listeners: { "click": "onClick()" }, properties: { "attr.data-slot": "this.dataSlot" } }, exportAs: ["tngPaginationNext"], usesInheritance: true, ngImport: i0 });
|
|
317
|
+
}
|
|
318
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngPaginationNext, decorators: [{
|
|
319
|
+
type: Directive,
|
|
320
|
+
args: [{
|
|
321
|
+
selector: 'button[tngPaginationNext]',
|
|
322
|
+
exportAs: 'tngPaginationNext',
|
|
323
|
+
}]
|
|
324
|
+
}], propDecorators: { dataSlot: [{
|
|
325
|
+
type: HostBinding,
|
|
326
|
+
args: ['attr.data-slot']
|
|
327
|
+
}], onClick: [{
|
|
328
|
+
type: HostListener,
|
|
329
|
+
args: ['click']
|
|
330
|
+
}] } });
|
|
331
|
+
export class TngPaginationLast extends TngPaginationButton {
|
|
332
|
+
dataSlot = 'pagination-last';
|
|
333
|
+
isDisabled() {
|
|
334
|
+
return super.isDisabled() || this.pagination.isLastPage();
|
|
335
|
+
}
|
|
336
|
+
onClick() {
|
|
337
|
+
if (this.isDisabled()) {
|
|
338
|
+
return;
|
|
339
|
+
}
|
|
340
|
+
this.pagination.lastPage();
|
|
341
|
+
}
|
|
342
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngPaginationLast, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
343
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.1", type: TngPaginationLast, isStandalone: true, selector: "button[tngPaginationLast]", host: { listeners: { "click": "onClick()" }, properties: { "attr.data-slot": "this.dataSlot" } }, exportAs: ["tngPaginationLast"], usesInheritance: true, ngImport: i0 });
|
|
344
|
+
}
|
|
345
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngPaginationLast, decorators: [{
|
|
346
|
+
type: Directive,
|
|
347
|
+
args: [{
|
|
348
|
+
selector: 'button[tngPaginationLast]',
|
|
349
|
+
exportAs: 'tngPaginationLast',
|
|
350
|
+
}]
|
|
351
|
+
}], propDecorators: { dataSlot: [{
|
|
352
|
+
type: HostBinding,
|
|
353
|
+
args: ['attr.data-slot']
|
|
354
|
+
}], onClick: [{
|
|
355
|
+
type: HostListener,
|
|
356
|
+
args: ['click']
|
|
357
|
+
}] } });
|
|
358
|
+
export class TngPaginationPage extends TngPaginationButton {
|
|
359
|
+
page = input.required({ ...(ngDevMode ? { debugName: "page" } : {}), alias: 'tngPaginationPage',
|
|
360
|
+
transform: normalizePageIndexInput });
|
|
361
|
+
get ariaCurrentAttr() {
|
|
362
|
+
return this.isCurrentPage() ? 'page' : null;
|
|
363
|
+
}
|
|
364
|
+
get dataCurrentAttr() {
|
|
365
|
+
return this.isCurrentPage() ? '' : null;
|
|
366
|
+
}
|
|
367
|
+
dataSlot = 'pagination-page';
|
|
368
|
+
onClick() {
|
|
369
|
+
if (this.isDisabled()) {
|
|
370
|
+
return;
|
|
371
|
+
}
|
|
372
|
+
this.pagination.setPageIndex(this.page(), 'page');
|
|
373
|
+
}
|
|
374
|
+
isCurrentPage() {
|
|
375
|
+
return this.pagination.state().pageIndex === this.page();
|
|
376
|
+
}
|
|
377
|
+
isDisabled() {
|
|
378
|
+
return super.isDisabled() || !this.pagination.canGoToPage(this.page());
|
|
379
|
+
}
|
|
380
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngPaginationPage, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
381
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.1", type: TngPaginationPage, isStandalone: true, selector: "button[tngPaginationPage]", inputs: { page: { classPropertyName: "page", publicName: "tngPaginationPage", isSignal: true, isRequired: true, transformFunction: null } }, host: { listeners: { "click": "onClick()" }, properties: { "attr.aria-current": "this.ariaCurrentAttr", "attr.data-current": "this.dataCurrentAttr", "attr.data-slot": "this.dataSlot" } }, exportAs: ["tngPaginationPage"], usesInheritance: true, ngImport: i0 });
|
|
382
|
+
}
|
|
383
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngPaginationPage, decorators: [{
|
|
384
|
+
type: Directive,
|
|
385
|
+
args: [{
|
|
386
|
+
selector: 'button[tngPaginationPage]',
|
|
387
|
+
exportAs: 'tngPaginationPage',
|
|
388
|
+
}]
|
|
389
|
+
}], propDecorators: { page: [{ type: i0.Input, args: [{ isSignal: true, alias: "tngPaginationPage", required: true }] }], ariaCurrentAttr: [{
|
|
390
|
+
type: HostBinding,
|
|
391
|
+
args: ['attr.aria-current']
|
|
392
|
+
}], dataCurrentAttr: [{
|
|
393
|
+
type: HostBinding,
|
|
394
|
+
args: ['attr.data-current']
|
|
395
|
+
}], dataSlot: [{
|
|
396
|
+
type: HostBinding,
|
|
397
|
+
args: ['attr.data-slot']
|
|
398
|
+
}], onClick: [{
|
|
399
|
+
type: HostListener,
|
|
400
|
+
args: ['click']
|
|
401
|
+
}] } });
|
|
402
|
+
export class TngPaginationPageSize {
|
|
403
|
+
pagination = inject(TngPagination);
|
|
404
|
+
hostRef = inject(ElementRef);
|
|
405
|
+
dataSlot = 'pagination-page-size';
|
|
406
|
+
get disabledProp() {
|
|
407
|
+
return this.pagination.disabled();
|
|
408
|
+
}
|
|
409
|
+
get valueProp() {
|
|
410
|
+
return String(this.pagination.state().pageSize);
|
|
411
|
+
}
|
|
412
|
+
onChange() {
|
|
413
|
+
this.pagination.setPageSize(normalizePageSizeInput(this.hostRef.nativeElement.value), 'size');
|
|
414
|
+
}
|
|
415
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngPaginationPageSize, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
416
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.1", type: TngPaginationPageSize, isStandalone: true, selector: "select[tngPaginationPageSize]", host: { listeners: { "change": "onChange()" }, properties: { "attr.data-slot": "this.dataSlot", "disabled": "this.disabledProp", "value": "this.valueProp" } }, exportAs: ["tngPaginationPageSize"], ngImport: i0 });
|
|
417
|
+
}
|
|
418
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngPaginationPageSize, decorators: [{
|
|
419
|
+
type: Directive,
|
|
420
|
+
args: [{
|
|
421
|
+
selector: 'select[tngPaginationPageSize]',
|
|
422
|
+
exportAs: 'tngPaginationPageSize',
|
|
423
|
+
}]
|
|
424
|
+
}], propDecorators: { dataSlot: [{
|
|
425
|
+
type: HostBinding,
|
|
426
|
+
args: ['attr.data-slot']
|
|
427
|
+
}], disabledProp: [{
|
|
428
|
+
type: HostBinding,
|
|
429
|
+
args: ['disabled']
|
|
430
|
+
}], valueProp: [{
|
|
431
|
+
type: HostBinding,
|
|
432
|
+
args: ['value']
|
|
433
|
+
}], onChange: [{
|
|
434
|
+
type: HostListener,
|
|
435
|
+
args: ['change']
|
|
436
|
+
}] } });
|
|
437
|
+
//# sourceMappingURL=tng-pagination.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tng-pagination.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/navigation/pagination/tng-pagination.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,UAAU,EACV,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,QAAQ,EACR,MAAM,EACN,KAAK,EACL,MAAM,EACN,MAAM,GACP,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,6BAA6B,GAI9B,MAAM,gBAAgB,CAAC;;AAuBxB,SAAS,kBAAkB,CAAC,KAAc;IACxC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;AAClD,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAc,EAAE,QAAgB;IAC5D,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;IACnD,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QAChC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;QAClC,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;IACrD,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAc;IAC7C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,+BAA+B,CAAC,KAAc;IACrD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAC1C,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,uBAAuB,CAAC,KAAK,CAAC,CAAC;AACxC,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAc;IAC5C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,wBAAwB,CAAC,KAAc;IAC9C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAc;IAC1C,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IACE,OAAO,KAAK,KAAK,QAAQ;QACzB,OAAO,KAAK,KAAK,QAAQ;QACzB,OAAO,KAAK,KAAK,SAAS;QAC1B,OAAO,KAAK,KAAK,QAAQ,EACzB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;IACxC,OAAO,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;AACnD,CAAC;AAMD,MAAM,OAAO,aAAa;IACP,qBAAqB,GAAG,MAAM,CAAC,CAAC,iEAAC,CAAC;IAClC,oBAAoB,GAAG,MAAM,CAAC,EAAE,gEAAC,CAAC;IAClC,wBAAwB,GAAG,MAAM,CAAC,KAAK,oEAAC,CAAC;IACzC,uBAAuB,GAAG,MAAM,CAAC,KAAK,mEAAC,CAAC;IAEzC,SAAS,GAAG,KAAK,CAA8B,SAAS,sDACtE,SAAS,EAAE,+BAA+B,GAC1C,CAAC;IACa,gBAAgB,GAAG,KAAK,CAAkB,CAAC,6DACzD,SAAS,EAAE,uBAAuB,GAClC,CAAC;IACa,QAAQ,GAAG,KAAK,CAA8B,SAAS,qDACrE,SAAS,EAAE,CAAC,KAAc,EAAE,EAAE;YAC5B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBAC1C,OAAO,SAAS,CAAC;YACnB,CAAC;YAED,OAAO,sBAAsB,CAAC,KAAK,CAAC,CAAC;QACvC,CAAC,GACD,CAAC;IACa,eAAe,GAAG,KAAK,CAAkB,EAAE,4DACzD,SAAS,EAAE,sBAAsB,GACjC,CAAC;IACa,UAAU,GAAG,KAAK,CAAkB,CAAC,uDACnD,SAAS,EAAE,wBAAwB,GACnC,CAAC;IACa,IAAI,GAAG,KAAK,CAA6B,QAAQ,iDAC/D,SAAS,EAAE,kBAAkB,GAC7B,CAAC;IACa,QAAQ,GAAG,KAAK,CAA4B,KAAK,qDAC/D,SAAS,EAAE,gBAAgB,GAC3B,CAAC;IACa,SAAS,GAAG,KAAK,CAAyB,YAAY,sDACpE,SAAS,EAAE,oBAAoB,GAC/B,CAAC;IAEa,eAAe,GAAG,MAAM,EAAU,CAAC;IACnC,cAAc,GAAG,MAAM,EAAU,CAAC;IAClC,UAAU,GAAG,MAAM,EAA4B,CAAC;IAEhD,KAAK,GAAG,QAAQ,CAA0B,GAAG,EAAE;QAC7D,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;IACtF,CAAC,iDAAC,CAAC;IAEa,SAAS,GAAG,QAAQ,CAAC,GAAG,EAAE,CACxC,IAAI,CAAC,gBAAgB,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,qDACxD,CAAC;IACc,WAAW,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,SAAS,IAAI,CAAC,uDAAC,CAAC;IAC1D,UAAU,GAAG,QAAQ,CAAC,GAAG,EAAE;QACzC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QACnC,OAAO,SAAS,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,SAAS,IAAI,SAAS,GAAG,CAAC,CAAC;IACpE,CAAC,sDAAC,CAAC;IAEH,IACc,aAAa;QACzB,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;IAC1B,CAAC;IAED,IACc,gBAAgB;QAC5B,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACrC,CAAC;IAED,IACc,YAAY;QACxB,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;IACrB,CAAC;IAED,IACc,iBAAiB;QAC7B,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;IAC1B,CAAC;IAED,IACc,iBAAiB;QAC7B,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,SAAS,CAAC;IAChC,CAAC;IAED,IACc,gBAAgB;QAC5B,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC;IAC/B,CAAC;IAGkB,QAAQ,GAAG,YAAqB,CAAC;IAE7C,SAAS;QACd,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAChC,CAAC;IAEM,YAAY;QACjB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,SAAS,GAAG,CAAC,EAAE,UAAU,CAAC,CAAC;IAC5D,CAAC;IAEM,QAAQ;QACb,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,SAAS,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;IACxD,CAAC;IAEM,QAAQ;QACb,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QACnC,IAAI,CAAC,YAAY,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAC/D,CAAC;IAEM,YAAY,CAAC,SAAiB,EAAE,UAAgC,cAAc;QACnF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;IAC3F,CAAC;IAEM,WAAW,CAAC,QAAgB,EAAE,UAAgC,MAAM;QACzE,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QAC7B,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC;QACzD,IAAI,CAAC,MAAM,CACT,IAAI,CAAC,gBAAgB,EAAE,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,EACjF,OAAO,CACR,CAAC;IACJ,CAAC;IAEM,mBAAmB;QACxB,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;IACjD,CAAC;IAEM,eAAe;QACpB,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,QAAQ,EAAE,CAAC;YAC7B,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC1B,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;IAChD,CAAC;IAEM,WAAW,CAAC,SAAiB;QAClC,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5D,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,QAAQ,EAAE,CAAC;YAC7B,OAAO,SAAS,IAAI,CAAC,CAAC;QACxB,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QACnC,OAAO,SAAS,IAAI,CAAC,IAAI,SAAS,GAAG,SAAS,CAAC;IACjD,CAAC;IAEO,YAAY;QAClB,OAAO,CACL,IAAI,CAAC,SAAS,EAAE;YAChB,CAAC,IAAI,CAAC,wBAAwB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAC3F,CAAC;IACJ,CAAC;IAEO,gBAAgB;QACtB,OAAO,6BAA6B,CAAU;YAC5C,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;YACjB,SAAS,EAAE,IAAI,CAAC,YAAY,EAAE;YAC9B,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE;SAC7B,CAAC,CAAC;IACL,CAAC;IAEO,WAAW;QACjB,OAAO,CACL,IAAI,CAAC,QAAQ,EAAE;YACf,CAAC,IAAI,CAAC,uBAAuB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CACxF,CAAC;IACJ,CAAC;IAEO,MAAM,CAAC,SAAkC,EAAE,OAA6B;QAC9E,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;YACpB,OAAO;QACT,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QACnC,IACE,SAAS,CAAC,SAAS,KAAK,aAAa,CAAC,SAAS;YAC/C,SAAS,CAAC,QAAQ,KAAK,aAAa,CAAC,QAAQ,EAC7C,CAAC;YACD,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,SAAS,EAAE,CAAC;YACnC,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACxC,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACtD,CAAC;QAED,IAAI,IAAI,CAAC,QAAQ,EAAE,KAAK,SAAS,EAAE,CAAC;YAClC,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACvC,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACpD,CAAC;QAED,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAC/C,IAAI,SAAS,CAAC,QAAQ,KAAK,aAAa,CAAC,QAAQ,EAAE,CAAC;YAClD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC/C,CAAC;QAED,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YACnB,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;YACjB,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE;YAC3B,SAAS,EAAE,SAAS,CAAC,SAAS;YAC9B,QAAQ,EAAE,SAAS,CAAC,QAAQ;YAC5B,iBAAiB,EAAE,aAAa,CAAC,SAAS;YAC1C,gBAAgB,EAAE,aAAa,CAAC,QAAQ;YACxC,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE;YAC7B,OAAO;SACR,CAAC,CAAC;IACL,CAAC;uGA1MU,aAAa;2FAAb,aAAa;;2FAAb,aAAa;kBAJzB,SAAS;mBAAC;oBACT,QAAQ,EAAE,iBAAiB;oBAC3B,QAAQ,EAAE,eAAe;iBAC1B;;sBAuDE,WAAW;uBAAC,iBAAiB;;sBAK7B,WAAW;uBAAC,oBAAoB;;sBAKhC,WAAW;uBAAC,gBAAgB;;sBAK5B,WAAW;uBAAC,sBAAsB;;sBAKlC,WAAW;uBAAC,sBAAsB;;sBAKlC,WAAW;uBAAC,qBAAqB;;sBAKjC,WAAW;uBAAC,gBAAgB;;AAyH/B,MACe,mBAAmB;IACb,UAAU,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;IAEtC,QAAQ,GAAG,KAAK,CAA4B,KAAK,qDAC/D,SAAS,EAAE,gBAAgB,GAC3B,CAAC;IAEH,IACc,gBAAgB;QAC5B,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IAC3C,CAAC;IAED,IACc,gBAAgB;QAC5B,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACvC,CAAC;IAED,IACc,YAAY;QACxB,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACvC,CAAC;IAGkB,QAAQ,GAAG,QAAiB,CAAC;IAEtC,UAAU;QAClB,OAAO,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;IACvD,CAAC;uGA3BY,mBAAmB;2FAAnB,mBAAmB;;2FAAnB,mBAAmB;kBADjC,SAAS;;sBAQP,WAAW;uBAAC,oBAAoB;;sBAKhC,WAAW;uBAAC,oBAAoB;;sBAKhC,WAAW;uBAAC,eAAe;;sBAK3B,WAAW;uBAAC,WAAW;;AAY1B,MAAM,OAAO,kBAAmB,SAAQ,mBAAmB;IAEtC,QAAQ,GAAG,kBAA2B,CAAC;IAEvC,UAAU;QAC3B,OAAO,KAAK,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;IAC7D,CAAC;IAGS,OAAO;QACf,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;YACtB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC;IAC9B,CAAC;uGAfU,kBAAkB;2FAAlB,kBAAkB;;2FAAlB,kBAAkB;kBAJ9B,SAAS;mBAAC;oBACT,QAAQ,EAAE,4BAA4B;oBACtC,QAAQ,EAAE,oBAAoB;iBAC/B;;sBAEE,WAAW;uBAAC,gBAAgB;;sBAO5B,YAAY;uBAAC,OAAO;;AAcvB,MAAM,OAAO,qBAAsB,SAAQ,mBAAmB;IAEzC,QAAQ,GAAG,qBAA8B,CAAC;IAE1C,UAAU;QAC3B,OAAO,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC;IACtE,CAAC;IAGS,OAAO;QACf,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;YACtB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC;IACjC,CAAC;uGAfU,qBAAqB;2FAArB,qBAAqB;;2FAArB,qBAAqB;kBAJjC,SAAS;mBAAC;oBACT,QAAQ,EAAE,+BAA+B;oBACzC,QAAQ,EAAE,uBAAuB;iBAClC;;sBAEE,WAAW;uBAAC,gBAAgB;;sBAO5B,YAAY;uBAAC,OAAO;;AAcvB,MAAM,OAAO,iBAAkB,SAAQ,mBAAmB;IAErC,QAAQ,GAAG,iBAA0B,CAAC;IAEtC,UAAU;QAC3B,OAAO,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC;IAClE,CAAC;IAGS,OAAO;QACf,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;YACtB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;IAC7B,CAAC;uGAfU,iBAAiB;2FAAjB,iBAAiB;;2FAAjB,iBAAiB;kBAJ7B,SAAS;mBAAC;oBACT,QAAQ,EAAE,2BAA2B;oBACrC,QAAQ,EAAE,mBAAmB;iBAC9B;;sBAEE,WAAW;uBAAC,gBAAgB;;sBAO5B,YAAY;uBAAC,OAAO;;AAcvB,MAAM,OAAO,iBAAkB,SAAQ,mBAAmB;IAErC,QAAQ,GAAG,iBAA0B,CAAC;IAEtC,UAAU;QAC3B,OAAO,KAAK,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;IAC5D,CAAC;IAGS,OAAO;QACf,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;YACtB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;IAC7B,CAAC;uGAfU,iBAAiB;2FAAjB,iBAAiB;;2FAAjB,iBAAiB;kBAJ7B,SAAS;mBAAC;oBACT,QAAQ,EAAE,2BAA2B;oBACrC,QAAQ,EAAE,mBAAmB;iBAC9B;;sBAEE,WAAW;uBAAC,gBAAgB;;sBAO5B,YAAY;uBAAC,OAAO;;AAcvB,MAAM,OAAO,iBAAkB,SAAQ,mBAAmB;IACxC,IAAI,GAAG,KAAK,CAAC,QAAQ,gDACnC,KAAK,EAAE,mBAAmB;QAC1B,SAAS,EAAE,uBAAuB,GAClC,CAAC;IAEH,IACc,eAAe;QAC3B,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9C,CAAC;IAED,IACc,eAAe;QAC3B,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1C,CAAC;IAGkB,QAAQ,GAAG,iBAA0B,CAAC;IAG/C,OAAO;QACf,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;YACtB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC;IACpD,CAAC;IAEO,aAAa;QACnB,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,SAAS,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;IAC3D,CAAC;IAEkB,UAAU;QAC3B,OAAO,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACzE,CAAC;uGAlCU,iBAAiB;2FAAjB,iBAAiB;;2FAAjB,iBAAiB;kBAJ7B,SAAS;mBAAC;oBACT,QAAQ,EAAE,2BAA2B;oBACrC,QAAQ,EAAE,mBAAmB;iBAC9B;;sBAOE,WAAW;uBAAC,mBAAmB;;sBAK/B,WAAW;uBAAC,mBAAmB;;sBAK/B,WAAW;uBAAC,gBAAgB;;sBAG5B,YAAY;uBAAC,OAAO;;AAsBvB,MAAM,OAAO,qBAAqB;IACf,UAAU,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;IACnC,OAAO,GAAG,MAAM,CAAgC,UAAU,CAAC,CAAC;IAG1D,QAAQ,GAAG,sBAA+B,CAAC;IAE9D,IACc,YAAY;QACxB,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;IACpC,CAAC;IAED,IACc,SAAS;QACrB,OAAO,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,CAAC;IAClD,CAAC;IAGS,QAAQ;QAChB,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;IAChG,CAAC;uGApBU,qBAAqB;2FAArB,qBAAqB;;2FAArB,qBAAqB;kBAJjC,SAAS;mBAAC;oBACT,QAAQ,EAAE,+BAA+B;oBACzC,QAAQ,EAAE,uBAAuB;iBAClC;;sBAKE,WAAW;uBAAC,gBAAgB;;sBAG5B,WAAW;uBAAC,UAAU;;sBAKtB,WAAW;uBAAC,OAAO;;sBAKnB,YAAY;uBAAC,QAAQ","sourcesContent":["import {\n Directive,\n ElementRef,\n HostBinding,\n HostListener,\n booleanAttribute,\n computed,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\nimport {\n createTngPaginationController,\n type TngTablePaginationController,\n type TngTablePaginationMode,\n type TngTablePaginationState,\n} from '@tailng-ui/cdk';\n\nexport type TngPaginationMode = TngTablePaginationMode;\nexport type TngPaginationTrigger =\n | 'first'\n | 'last'\n | 'next'\n | 'page'\n | 'previous'\n | 'programmatic'\n | 'size';\n\nexport type TngPaginationChangeEvent = Readonly<{\n mode: TngPaginationMode;\n pageCount: number;\n pageIndex: number;\n pageSize: number;\n previousPageIndex: number;\n previousPageSize: number;\n totalItems: number;\n trigger: TngPaginationTrigger;\n}>;\n\nfunction normalizeModeInput(value: unknown): TngPaginationMode {\n return value === 'server' ? 'server' : 'client';\n}\n\nfunction normalizeNumberInput(value: unknown, fallback: number): number {\n if (typeof value === 'number') {\n return Number.isFinite(value) ? value : fallback;\n }\n\n if (typeof value === 'string') {\n const normalized = value.trim();\n if (normalized.length === 0) {\n return fallback;\n }\n\n const parsed = Number(normalized);\n return Number.isFinite(parsed) ? parsed : fallback;\n }\n\n return fallback;\n}\n\nfunction normalizePageIndexInput(value: unknown): number {\n return Math.max(0, Math.trunc(normalizeNumberInput(value, 0)));\n}\n\nfunction normalizeOptionalPageIndexInput(value: unknown): number | undefined {\n if (value === undefined || value === null) {\n return undefined;\n }\n\n return normalizePageIndexInput(value);\n}\n\nfunction normalizePageSizeInput(value: unknown): number {\n return Math.max(1, Math.trunc(normalizeNumberInput(value, 10)));\n}\n\nfunction normalizeTotalItemsInput(value: unknown): number {\n return Math.max(0, Math.trunc(normalizeNumberInput(value, 0)));\n}\n\nfunction normalizeStringInput(value: unknown): string | null {\n if (value === undefined || value === null) {\n return null;\n }\n\n if (\n typeof value !== 'string' &&\n typeof value !== 'number' &&\n typeof value !== 'boolean' &&\n typeof value !== 'bigint'\n ) {\n return null;\n }\n\n const normalized = String(value).trim();\n return normalized.length > 0 ? normalized : null;\n}\n\n@Directive({\n selector: '[tngPagination]',\n exportAs: 'tngPagination',\n})\nexport class TngPagination {\n private readonly uncontrolledPageIndex = signal(0);\n private readonly uncontrolledPageSize = signal(10);\n private readonly hasUncontrolledPageIndex = signal(false);\n private readonly hasUncontrolledPageSize = signal(false);\n\n public readonly pageIndex = input<number | undefined, unknown>(undefined, {\n transform: normalizeOptionalPageIndexInput,\n });\n public readonly defaultPageIndex = input<number, unknown>(0, {\n transform: normalizePageIndexInput,\n });\n public readonly pageSize = input<number | undefined, unknown>(undefined, {\n transform: (value: unknown) => {\n if (value === undefined || value === null) {\n return undefined;\n }\n\n return normalizePageSizeInput(value);\n },\n });\n public readonly defaultPageSize = input<number, unknown>(10, {\n transform: normalizePageSizeInput,\n });\n public readonly totalItems = input<number, unknown>(0, {\n transform: normalizeTotalItemsInput,\n });\n public readonly mode = input<TngPaginationMode, unknown>('client', {\n transform: normalizeModeInput,\n });\n public readonly disabled = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly ariaLabel = input<string | null, unknown>('Pagination', {\n transform: normalizeStringInput,\n });\n\n public readonly pageIndexChange = output<number>();\n public readonly pageSizeChange = output<number>();\n public readonly pageChange = output<TngPaginationChangeEvent>();\n\n public readonly state = computed<TngTablePaginationState>(() => {\n return this.createController().setPageIndex(this.rawPageIndex(), this.totalItems());\n });\n\n public readonly pageCount = computed(() =>\n this.createController().getPageCount(this.totalItems()),\n );\n public readonly isFirstPage = computed(() => this.state().pageIndex <= 0);\n public readonly isLastPage = computed(() => {\n const pageCount = this.pageCount();\n return pageCount === 0 || this.state().pageIndex >= pageCount - 1;\n });\n\n @HostBinding('attr.aria-label')\n protected get ariaLabelAttr(): string | null {\n return this.ariaLabel();\n }\n\n @HostBinding('attr.data-disabled')\n protected get dataDisabledAttr(): '' | null {\n return this.disabled() ? '' : null;\n }\n\n @HostBinding('attr.data-mode')\n protected get dataModeAttr(): TngPaginationMode {\n return this.mode();\n }\n\n @HostBinding('attr.data-page-count')\n protected get dataPageCountAttr(): number {\n return this.pageCount();\n }\n\n @HostBinding('attr.data-page-index')\n protected get dataPageIndexAttr(): number {\n return this.state().pageIndex;\n }\n\n @HostBinding('attr.data-page-size')\n protected get dataPageSizeAttr(): number {\n return this.state().pageSize;\n }\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'pagination' as const;\n\n public firstPage(): void {\n this.setPageIndex(0, 'first');\n }\n\n public previousPage(): void {\n this.setPageIndex(this.state().pageIndex - 1, 'previous');\n }\n\n public nextPage(): void {\n this.setPageIndex(this.state().pageIndex + 1, 'next');\n }\n\n public lastPage(): void {\n const pageCount = this.pageCount();\n this.setPageIndex(pageCount > 0 ? pageCount - 1 : 0, 'last');\n }\n\n public setPageIndex(pageIndex: number, trigger: TngPaginationTrigger = 'programmatic'): void {\n this.commit(this.createController().setPageIndex(pageIndex, this.totalItems()), trigger);\n }\n\n public setPageSize(pageSize: number, trigger: TngPaginationTrigger = 'size'): void {\n const current = this.state();\n const anchorIndex = current.pageIndex * current.pageSize;\n this.commit(\n this.createController().setPageSize(pageSize, this.totalItems(), { anchorIndex }),\n trigger,\n );\n }\n\n public canGoToPreviousPage(): boolean {\n return !this.disabled() && !this.isFirstPage();\n }\n\n public canGoToNextPage(): boolean {\n if (this.mode() === 'server') {\n return !this.disabled();\n }\n\n return !this.disabled() && !this.isLastPage();\n }\n\n public canGoToPage(pageIndex: number): boolean {\n if (this.disabled() || this.state().pageIndex === pageIndex) {\n return false;\n }\n\n if (this.mode() === 'server') {\n return pageIndex >= 0;\n }\n\n const pageCount = this.pageCount();\n return pageIndex >= 0 && pageIndex < pageCount;\n }\n\n private rawPageIndex(): number {\n return (\n this.pageIndex() ??\n (this.hasUncontrolledPageIndex() ? this.uncontrolledPageIndex() : this.defaultPageIndex())\n );\n }\n\n private createController(): TngTablePaginationController<unknown> {\n return createTngPaginationController<unknown>({\n mode: this.mode(),\n pageIndex: this.rawPageIndex(),\n pageSize: this.rawPageSize(),\n });\n }\n\n private rawPageSize(): number {\n return (\n this.pageSize() ??\n (this.hasUncontrolledPageSize() ? this.uncontrolledPageSize() : this.defaultPageSize())\n );\n }\n\n private commit(nextState: TngTablePaginationState, trigger: TngPaginationTrigger): void {\n if (this.disabled()) {\n return;\n }\n\n const previousState = this.state();\n if (\n nextState.pageIndex === previousState.pageIndex &&\n nextState.pageSize === previousState.pageSize\n ) {\n return;\n }\n\n if (this.pageIndex() === undefined) {\n this.hasUncontrolledPageIndex.set(true);\n this.uncontrolledPageIndex.set(nextState.pageIndex);\n }\n\n if (this.pageSize() === undefined) {\n this.hasUncontrolledPageSize.set(true);\n this.uncontrolledPageSize.set(nextState.pageSize);\n }\n\n this.pageIndexChange.emit(nextState.pageIndex);\n if (nextState.pageSize !== previousState.pageSize) {\n this.pageSizeChange.emit(nextState.pageSize);\n }\n\n this.pageChange.emit({\n mode: this.mode(),\n pageCount: this.pageCount(),\n pageIndex: nextState.pageIndex,\n pageSize: nextState.pageSize,\n previousPageIndex: previousState.pageIndex,\n previousPageSize: previousState.pageSize,\n totalItems: this.totalItems(),\n trigger,\n });\n }\n}\n\n@Directive()\nabstract class TngPaginationButton {\n protected readonly pagination = inject(TngPagination);\n\n public readonly disabled = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n\n @HostBinding('attr.aria-disabled')\n protected get ariaDisabledAttr(): 'true' | null {\n return this.isDisabled() ? 'true' : null;\n }\n\n @HostBinding('attr.data-disabled')\n protected get dataDisabledAttr(): '' | null {\n return this.isDisabled() ? '' : null;\n }\n\n @HostBinding('attr.disabled')\n protected get disabledAttr(): '' | null {\n return this.isDisabled() ? '' : null;\n }\n\n @HostBinding('attr.type')\n protected readonly typeAttr = 'button' as const;\n\n protected isDisabled(): boolean {\n return this.disabled() || this.pagination.disabled();\n }\n}\n\n@Directive({\n selector: 'button[tngPaginationFirst]',\n exportAs: 'tngPaginationFirst',\n})\nexport class TngPaginationFirst extends TngPaginationButton {\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'pagination-first' as const;\n\n protected override isDisabled(): boolean {\n return super.isDisabled() || this.pagination.isFirstPage();\n }\n\n @HostListener('click')\n protected onClick(): void {\n if (this.isDisabled()) {\n return;\n }\n\n this.pagination.firstPage();\n }\n}\n\n@Directive({\n selector: 'button[tngPaginationPrevious]',\n exportAs: 'tngPaginationPrevious',\n})\nexport class TngPaginationPrevious extends TngPaginationButton {\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'pagination-previous' as const;\n\n protected override isDisabled(): boolean {\n return super.isDisabled() || !this.pagination.canGoToPreviousPage();\n }\n\n @HostListener('click')\n protected onClick(): void {\n if (this.isDisabled()) {\n return;\n }\n\n this.pagination.previousPage();\n }\n}\n\n@Directive({\n selector: 'button[tngPaginationNext]',\n exportAs: 'tngPaginationNext',\n})\nexport class TngPaginationNext extends TngPaginationButton {\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'pagination-next' as const;\n\n protected override isDisabled(): boolean {\n return super.isDisabled() || !this.pagination.canGoToNextPage();\n }\n\n @HostListener('click')\n protected onClick(): void {\n if (this.isDisabled()) {\n return;\n }\n\n this.pagination.nextPage();\n }\n}\n\n@Directive({\n selector: 'button[tngPaginationLast]',\n exportAs: 'tngPaginationLast',\n})\nexport class TngPaginationLast extends TngPaginationButton {\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'pagination-last' as const;\n\n protected override isDisabled(): boolean {\n return super.isDisabled() || this.pagination.isLastPage();\n }\n\n @HostListener('click')\n protected onClick(): void {\n if (this.isDisabled()) {\n return;\n }\n\n this.pagination.lastPage();\n }\n}\n\n@Directive({\n selector: 'button[tngPaginationPage]',\n exportAs: 'tngPaginationPage',\n})\nexport class TngPaginationPage extends TngPaginationButton {\n public readonly page = input.required<number, unknown>({\n alias: 'tngPaginationPage',\n transform: normalizePageIndexInput,\n });\n\n @HostBinding('attr.aria-current')\n protected get ariaCurrentAttr(): 'page' | null {\n return this.isCurrentPage() ? 'page' : null;\n }\n\n @HostBinding('attr.data-current')\n protected get dataCurrentAttr(): '' | null {\n return this.isCurrentPage() ? '' : null;\n }\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'pagination-page' as const;\n\n @HostListener('click')\n protected onClick(): void {\n if (this.isDisabled()) {\n return;\n }\n\n this.pagination.setPageIndex(this.page(), 'page');\n }\n\n private isCurrentPage(): boolean {\n return this.pagination.state().pageIndex === this.page();\n }\n\n protected override isDisabled(): boolean {\n return super.isDisabled() || !this.pagination.canGoToPage(this.page());\n }\n}\n\n@Directive({\n selector: 'select[tngPaginationPageSize]',\n exportAs: 'tngPaginationPageSize',\n})\nexport class TngPaginationPageSize {\n private readonly pagination = inject(TngPagination);\n private readonly hostRef = inject<ElementRef<HTMLSelectElement>>(ElementRef);\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'pagination-page-size' as const;\n\n @HostBinding('disabled')\n protected get disabledProp(): boolean {\n return this.pagination.disabled();\n }\n\n @HostBinding('value')\n protected get valueProp(): string {\n return String(this.pagination.state().pageSize);\n }\n\n @HostListener('change')\n protected onChange(): void {\n this.pagination.setPageSize(normalizePageSizeInput(this.hostRef.nativeElement.value), 'size');\n }\n}\n"]}
|