@a5it/sync-ui 0.1.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/README.md +45 -0
- package/dist/components/data-table/actions/action-delete.d.ts +8 -0
- package/dist/components/data-table/actions/action-delete.d.ts.map +1 -0
- package/dist/components/data-table/actions/action-delete.js +17 -0
- package/dist/components/data-table/actions/action-delete.js.map +1 -0
- package/dist/components/data-table/actions/action-item.d.ts +7 -0
- package/dist/components/data-table/actions/action-item.d.ts.map +1 -0
- package/dist/components/data-table/actions/action-item.js +7 -0
- package/dist/components/data-table/actions/action-item.js.map +1 -0
- package/dist/components/data-table/actions/actions-dropdown.d.ts +8 -0
- package/dist/components/data-table/actions/actions-dropdown.d.ts.map +1 -0
- package/dist/components/data-table/actions/actions-dropdown.js +9 -0
- package/dist/components/data-table/actions/actions-dropdown.js.map +1 -0
- package/dist/components/data-table/cells/date-time-cell.d.ts +16 -0
- package/dist/components/data-table/cells/date-time-cell.d.ts.map +1 -0
- package/dist/components/data-table/cells/date-time-cell.js +32 -0
- package/dist/components/data-table/cells/date-time-cell.js.map +1 -0
- package/dist/components/data-table/cells/payment-pill.d.ts +7 -0
- package/dist/components/data-table/cells/payment-pill.d.ts.map +1 -0
- package/dist/components/data-table/cells/payment-pill.js +23 -0
- package/dist/components/data-table/cells/payment-pill.js.map +1 -0
- package/dist/components/data-table/cells/record-id-cell.d.ts +7 -0
- package/dist/components/data-table/cells/record-id-cell.d.ts.map +1 -0
- package/dist/components/data-table/cells/record-id-cell.js +7 -0
- package/dist/components/data-table/cells/record-id-cell.js.map +1 -0
- package/dist/components/data-table/cells/status-pill.d.ts +6 -0
- package/dist/components/data-table/cells/status-pill.d.ts.map +1 -0
- package/dist/components/data-table/cells/status-pill.js +67 -0
- package/dist/components/data-table/cells/status-pill.js.map +1 -0
- package/dist/components/data-table/cells/table-checkbox.d.ts +4 -0
- package/dist/components/data-table/cells/table-checkbox.d.ts.map +1 -0
- package/dist/components/data-table/cells/table-checkbox.js +9 -0
- package/dist/components/data-table/cells/table-checkbox.js.map +1 -0
- package/dist/components/data-table/cells/text-cell.d.ts +8 -0
- package/dist/components/data-table/cells/text-cell.d.ts.map +1 -0
- package/dist/components/data-table/cells/text-cell.js +7 -0
- package/dist/components/data-table/cells/text-cell.js.map +1 -0
- package/dist/components/data-table/column-header.d.ts +10 -0
- package/dist/components/data-table/column-header.d.ts.map +1 -0
- package/dist/components/data-table/column-header.js +42 -0
- package/dist/components/data-table/column-header.js.map +1 -0
- package/dist/components/data-table/columns/selection.d.ts +4 -0
- package/dist/components/data-table/columns/selection.d.ts.map +1 -0
- package/dist/components/data-table/columns/selection.js +33 -0
- package/dist/components/data-table/columns/selection.js.map +1 -0
- package/dist/components/data-table/filters/all-filters.d.ts +11 -0
- package/dist/components/data-table/filters/all-filters.d.ts.map +1 -0
- package/dist/components/data-table/filters/all-filters.js +9 -0
- package/dist/components/data-table/filters/all-filters.js.map +1 -0
- package/dist/components/data-table/filters/bulk-delete.d.ts +16 -0
- package/dist/components/data-table/filters/bulk-delete.d.ts.map +1 -0
- package/dist/components/data-table/filters/bulk-delete.js +20 -0
- package/dist/components/data-table/filters/bulk-delete.js.map +1 -0
- package/dist/components/data-table/filters/filters.d.ts +4 -0
- package/dist/components/data-table/filters/filters.d.ts.map +1 -0
- package/dist/components/data-table/filters/filters.js +10 -0
- package/dist/components/data-table/filters/filters.js.map +1 -0
- package/dist/components/data-table/filters/reset.d.ts +21 -0
- package/dist/components/data-table/filters/reset.d.ts.map +1 -0
- package/dist/components/data-table/filters/reset.js +34 -0
- package/dist/components/data-table/filters/reset.js.map +1 -0
- package/dist/components/data-table/filters/search.d.ts +25 -0
- package/dist/components/data-table/filters/search.d.ts.map +1 -0
- package/dist/components/data-table/filters/search.js +89 -0
- package/dist/components/data-table/filters/search.js.map +1 -0
- package/dist/components/data-table/filters/sort-by.d.ts +7 -0
- package/dist/components/data-table/filters/sort-by.d.ts.map +1 -0
- package/dist/components/data-table/filters/sort-by.js +76 -0
- package/dist/components/data-table/filters/sort-by.js.map +1 -0
- package/dist/components/data-table/index.d.ts +26 -0
- package/dist/components/data-table/index.d.ts.map +1 -0
- package/dist/components/data-table/index.js +24 -0
- package/dist/components/data-table/index.js.map +1 -0
- package/dist/components/data-table/pagination/pagination.d.ts +66 -0
- package/dist/components/data-table/pagination/pagination.d.ts.map +1 -0
- package/dist/components/data-table/pagination/pagination.js +224 -0
- package/dist/components/data-table/pagination/pagination.js.map +1 -0
- package/dist/components/data-table/provider.d.ts +284 -0
- package/dist/components/data-table/provider.d.ts.map +1 -0
- package/dist/components/data-table/provider.js +193 -0
- package/dist/components/data-table/provider.js.map +1 -0
- package/dist/components/data-table/table.d.ts +21 -0
- package/dist/components/data-table/table.d.ts.map +1 -0
- package/dist/components/data-table/table.js +120 -0
- package/dist/components/data-table/table.js.map +1 -0
- package/dist/components/data-table/tabs.d.ts +19 -0
- package/dist/components/data-table/tabs.d.ts.map +1 -0
- package/dist/components/data-table/tabs.js +22 -0
- package/dist/components/data-table/tabs.js.map +1 -0
- package/dist/components/data-table/url-state.d.ts +54 -0
- package/dist/components/data-table/url-state.d.ts.map +1 -0
- package/dist/components/data-table/url-state.js +130 -0
- package/dist/components/data-table/url-state.js.map +1 -0
- package/dist/components/page-header/index.d.ts +3 -0
- package/dist/components/page-header/index.d.ts.map +1 -0
- package/dist/components/page-header/index.js +2 -0
- package/dist/components/page-header/index.js.map +1 -0
- package/dist/components/page-header/page-header.d.ts +56 -0
- package/dist/components/page-header/page-header.d.ts.map +1 -0
- package/dist/components/page-header/page-header.js +59 -0
- package/dist/components/page-header/page-header.js.map +1 -0
- package/dist/components/sidebar/index.d.ts +2 -0
- package/dist/components/sidebar/index.d.ts.map +1 -0
- package/dist/components/sidebar/index.js +2 -0
- package/dist/components/sidebar/index.js.map +1 -0
- package/dist/components/ui/alert-dialog.d.ts +15 -0
- package/dist/components/ui/alert-dialog.d.ts.map +1 -0
- package/dist/components/ui/alert-dialog.js +40 -0
- package/dist/components/ui/alert-dialog.js.map +1 -0
- package/dist/components/ui/button.d.ts +12 -0
- package/dist/components/ui/button.d.ts.map +1 -0
- package/dist/components/ui/button.js +36 -0
- package/dist/components/ui/button.js.map +1 -0
- package/dist/components/ui/checkbox.d.ts +5 -0
- package/dist/components/ui/checkbox.d.ts.map +1 -0
- package/dist/components/ui/checkbox.js +10 -0
- package/dist/components/ui/checkbox.js.map +1 -0
- package/dist/components/ui/dropdown-menu.d.ts +26 -0
- package/dist/components/ui/dropdown-menu.d.ts.map +1 -0
- package/dist/components/ui/dropdown-menu.js +52 -0
- package/dist/components/ui/dropdown-menu.js.map +1 -0
- package/dist/components/ui/scroll-area.d.ts +6 -0
- package/dist/components/ui/scroll-area.d.ts.map +1 -0
- package/dist/components/ui/scroll-area.js +14 -0
- package/dist/components/ui/scroll-area.js.map +1 -0
- package/dist/components/ui/sheet.d.ts +14 -0
- package/dist/components/ui/sheet.d.ts.map +1 -0
- package/dist/components/ui/sheet.js +41 -0
- package/dist/components/ui/sheet.js.map +1 -0
- package/dist/components/ui/table.d.ts +11 -0
- package/dist/components/ui/table.d.ts.map +1 -0
- package/dist/components/ui/table.js +30 -0
- package/dist/components/ui/table.js.map +1 -0
- package/dist/hooks/index.d.ts +2 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +3 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/utils.d.ts +7 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +33 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/providers/index.d.ts +2 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +3 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/styles/index.css +19 -0
- package/dist/types/index.d.ts +4 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +2 -0
- package/dist/utils/index.js.map +1 -0
- package/package.json +95 -0
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import { useQueryState, parseAsInteger } from "nuqs";
|
|
5
|
+
import { ChevronDown, ChevronLeft, ChevronRight } from "lucide-react";
|
|
6
|
+
import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from "../../ui/dropdown-menu";
|
|
7
|
+
import { cn } from "../../../lib/utils";
|
|
8
|
+
import { useDataTable } from "../provider";
|
|
9
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
10
|
+
// Default Configuration
|
|
11
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
12
|
+
const DEFAULT_PAGE_PARAM = "page";
|
|
13
|
+
const DEFAULT_LIMIT_PARAM = "limit";
|
|
14
|
+
const DEFAULT_PAGE_SIZE = 10;
|
|
15
|
+
const DEFAULT_PAGE_SIZE_OPTIONS = [10, 20, 50, 100];
|
|
16
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
17
|
+
// Helper to get config values
|
|
18
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
19
|
+
function getPaginationParams(config) {
|
|
20
|
+
if (config?.mode === "client" || config?.mode === "server") {
|
|
21
|
+
return {
|
|
22
|
+
pageParam: config.params?.page ?? DEFAULT_PAGE_PARAM,
|
|
23
|
+
limitParam: config.params?.limit ?? DEFAULT_LIMIT_PARAM,
|
|
24
|
+
defaultPageSize: config.defaultPageSize ?? DEFAULT_PAGE_SIZE,
|
|
25
|
+
pageSizeOptions: config.pageSizeOptions ?? DEFAULT_PAGE_SIZE_OPTIONS,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
return {
|
|
29
|
+
pageParam: DEFAULT_PAGE_PARAM,
|
|
30
|
+
limitParam: DEFAULT_LIMIT_PARAM,
|
|
31
|
+
defaultPageSize: DEFAULT_PAGE_SIZE,
|
|
32
|
+
pageSizeOptions: DEFAULT_PAGE_SIZE_OPTIONS,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Pagination container that reads from DataTableProvider's paginationConfig.
|
|
37
|
+
*
|
|
38
|
+
* Both client and server modes sync page/limit to URL query params.
|
|
39
|
+
* - **Client mode**: TanStack Table paginates locally
|
|
40
|
+
* - **Server mode**: URL params trigger server-side pagination
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* ```tsx
|
|
44
|
+
* <DataTablePagination>
|
|
45
|
+
* <DataTablePaginationInfo />
|
|
46
|
+
* <DataTablePaginationActions>
|
|
47
|
+
* <DataTablePaginationLimits />
|
|
48
|
+
* <DataTablePaginationLinks />
|
|
49
|
+
* </DataTablePaginationActions>
|
|
50
|
+
* </DataTablePagination>
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
export function DataTablePagination({ className, children, ...props }) {
|
|
54
|
+
return (_jsx("div", { "data-slot": "data-table-pagination", className: cn("content-center flex w-full flex-wrap items-center justify-between gap-2", className), ...props, children: children }));
|
|
55
|
+
}
|
|
56
|
+
export function DataTablePaginationInfo({ format, className, ...props }) {
|
|
57
|
+
const { table, paginationConfig } = useDataTable();
|
|
58
|
+
const { defaultPageSize, pageParam, limitParam } = getPaginationParams(paginationConfig);
|
|
59
|
+
const isClientMode = paginationConfig?.mode === "client";
|
|
60
|
+
const isServerMode = paginationConfig?.mode === "server";
|
|
61
|
+
// URL state
|
|
62
|
+
const [urlPage] = useQueryState(pageParam, {
|
|
63
|
+
...parseAsInteger,
|
|
64
|
+
defaultValue: 1,
|
|
65
|
+
shallow: isClientMode,
|
|
66
|
+
});
|
|
67
|
+
const [urlLimit] = useQueryState(limitParam, {
|
|
68
|
+
...parseAsInteger,
|
|
69
|
+
defaultValue: defaultPageSize,
|
|
70
|
+
shallow: isClientMode,
|
|
71
|
+
});
|
|
72
|
+
// Get total count
|
|
73
|
+
let total;
|
|
74
|
+
if (isServerMode) {
|
|
75
|
+
total = paginationConfig.total;
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
// Client mode: use filtered row count from TanStack
|
|
79
|
+
total = table.getFilteredRowModel().rows.length;
|
|
80
|
+
}
|
|
81
|
+
const page = urlPage;
|
|
82
|
+
const limit = urlLimit;
|
|
83
|
+
const start = Math.min((page - 1) * limit + 1, total);
|
|
84
|
+
const end = Math.min(page * limit, total);
|
|
85
|
+
if (total === 0) {
|
|
86
|
+
return (_jsx("div", { "data-slot": "data-table-pagination-info", className: cn("text-[14px] leading-4 font-normal text-[#1a1a1a]", className), ...props, children: "0-0 of 0" }));
|
|
87
|
+
}
|
|
88
|
+
const content = format
|
|
89
|
+
? format(start, end, total)
|
|
90
|
+
: `${start}-${end} of ${total}`;
|
|
91
|
+
return (_jsx("div", { "data-slot": "data-table-pagination-info", className: cn("text-[14px] leading-4 font-normal text-[#1a1a1a]", className), ...props, children: content }));
|
|
92
|
+
}
|
|
93
|
+
export function DataTablePaginationLimits({ className, buttonClassName, contentClassName, label = "Result per page", onLimitChange, }) {
|
|
94
|
+
const { table, paginationConfig } = useDataTable();
|
|
95
|
+
const { defaultPageSize, pageSizeOptions, pageParam, limitParam } = getPaginationParams(paginationConfig);
|
|
96
|
+
const isClientMode = paginationConfig?.mode === "client";
|
|
97
|
+
// URL state
|
|
98
|
+
const [, setUrlPage] = useQueryState(pageParam, {
|
|
99
|
+
...parseAsInteger,
|
|
100
|
+
defaultValue: 1,
|
|
101
|
+
shallow: isClientMode,
|
|
102
|
+
});
|
|
103
|
+
const [urlLimit, setUrlLimit] = useQueryState(limitParam, {
|
|
104
|
+
...parseAsInteger,
|
|
105
|
+
defaultValue: defaultPageSize,
|
|
106
|
+
shallow: isClientMode,
|
|
107
|
+
});
|
|
108
|
+
const handleLimitChange = React.useCallback((newLimit) => {
|
|
109
|
+
// Update URL
|
|
110
|
+
setUrlLimit(newLimit);
|
|
111
|
+
// Reset to page 1
|
|
112
|
+
setUrlPage(1);
|
|
113
|
+
// For client mode, also update TanStack table
|
|
114
|
+
if (isClientMode) {
|
|
115
|
+
table.setPageSize(newLimit);
|
|
116
|
+
table.setPageIndex(0);
|
|
117
|
+
}
|
|
118
|
+
onLimitChange?.(newLimit);
|
|
119
|
+
}, [setUrlLimit, setUrlPage, isClientMode, table, onLimitChange]);
|
|
120
|
+
return (_jsxs("div", { "data-slot": "data-table-pagination-limits", className: cn("flex items-center gap-2", className), children: [label && (_jsx("span", { className: "text-[14px] leading-4 font-normal text-[#1a1a1a]", children: label })), _jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsxs("button", { type: "button", className: cn("flex h-8 items-center justify-center gap-2 rounded-[4px] border border-[#e6e6e6] bg-white px-3 py-2", "text-[14px] leading-4 font-normal text-[#1a1a1a]", buttonClassName), children: [urlLimit, _jsx(ChevronDown, { className: "h-[19.2px] w-[19.2px]", "aria-hidden": true })] }) }), _jsx(DropdownMenuContent, { align: "start", className: cn("min-w-[84px]", contentClassName), children: pageSizeOptions.map((option) => (_jsx(DropdownMenuItem, { onSelect: () => handleLimitChange(option), className: cn(urlLimit === option && "bg-[#f7f7f7]"), children: option }, option))) })] })] }));
|
|
121
|
+
}
|
|
122
|
+
export function DataTablePaginationLinks({ className, maxVisible = 7, showPrevNext = true, onPageChange, }) {
|
|
123
|
+
const { table, paginationConfig } = useDataTable();
|
|
124
|
+
const { defaultPageSize, pageParam, limitParam } = getPaginationParams(paginationConfig);
|
|
125
|
+
const isClientMode = paginationConfig?.mode === "client";
|
|
126
|
+
const isServerMode = paginationConfig?.mode === "server";
|
|
127
|
+
// URL state
|
|
128
|
+
const [urlPage, setUrlPage] = useQueryState(pageParam, {
|
|
129
|
+
...parseAsInteger,
|
|
130
|
+
defaultValue: 1,
|
|
131
|
+
shallow: isClientMode,
|
|
132
|
+
});
|
|
133
|
+
const [urlLimit] = useQueryState(limitParam, {
|
|
134
|
+
...parseAsInteger,
|
|
135
|
+
defaultValue: defaultPageSize,
|
|
136
|
+
shallow: isClientMode,
|
|
137
|
+
});
|
|
138
|
+
// Sync URL to TanStack table for client mode on mount
|
|
139
|
+
React.useEffect(() => {
|
|
140
|
+
if (isClientMode) {
|
|
141
|
+
table.setPageIndex(urlPage - 1); // TanStack uses 0-indexed
|
|
142
|
+
table.setPageSize(urlLimit);
|
|
143
|
+
}
|
|
144
|
+
}, [isClientMode, urlPage, urlLimit, table]);
|
|
145
|
+
// Calculate total pages
|
|
146
|
+
let totalPages;
|
|
147
|
+
if (isServerMode) {
|
|
148
|
+
const serverTotal = paginationConfig.total;
|
|
149
|
+
totalPages = Math.ceil(serverTotal / urlLimit);
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
// Client mode: use TanStack's page count
|
|
153
|
+
totalPages = table.getPageCount();
|
|
154
|
+
}
|
|
155
|
+
const normalizedTotalPages = totalPages > 0 ? totalPages : 1;
|
|
156
|
+
const handlePageChange = React.useCallback((newPage) => {
|
|
157
|
+
const safePage = Math.min(Math.max(newPage, 1), normalizedTotalPages);
|
|
158
|
+
// Update URL
|
|
159
|
+
setUrlPage(safePage);
|
|
160
|
+
// For client mode, also update TanStack table
|
|
161
|
+
if (isClientMode) {
|
|
162
|
+
table.setPageIndex(safePage - 1); // TanStack uses 0-indexed
|
|
163
|
+
}
|
|
164
|
+
onPageChange?.(safePage);
|
|
165
|
+
}, [setUrlPage, isClientMode, table, onPageChange, normalizedTotalPages]);
|
|
166
|
+
const page = Math.min(Math.max(urlPage, 1), normalizedTotalPages);
|
|
167
|
+
const canGoPrev = page > 1;
|
|
168
|
+
const canGoNext = page < normalizedTotalPages;
|
|
169
|
+
return (_jsxs("div", { "data-slot": "data-table-pagination-links", className: cn("flex items-center gap-4", className), children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: "text-[14px] leading-4 font-normal text-[#1a1a1a]", children: "Page" }), _jsx("div", { className: "flex h-8 w-[44px] items-center justify-center rounded-[4px] border border-[#e6e6e6] px-3 py-2", children: _jsx("span", { className: "text-[14px] leading-4 font-normal text-[#4d4d4d]", children: page }) })] }), _jsxs("div", { className: "flex items-center gap-2", children: [showPrevNext && (_jsxs(PaginationButton, { variant: "control", onClick: () => handlePageChange(page - 1), disabled: !canGoPrev, "aria-label": "Go to previous page", children: [_jsx(ChevronLeft, { className: "h-[19.2px] w-[19.2px]", "aria-hidden": true }), _jsx("span", { children: "Back" })] })), generatePageNumbers(page, normalizedTotalPages, maxVisible).map((item, index) => item === "ellipsis" ? (_jsx("span", { className: "inline-flex h-8 min-w-8 items-center justify-center text-[14px] leading-4 font-normal text-[#1a1a1a]", "aria-hidden": true, children: "..." }, `ellipsis-${index}`)) : (_jsx(PaginationButton, { variant: "page", onClick: () => handlePageChange(item), active: item === page, "aria-label": `Go to page ${item}`, "aria-current": item === page ? "page" : undefined, children: item }, item))), showPrevNext && (_jsxs(PaginationButton, { variant: "control", onClick: () => handlePageChange(page + 1), disabled: !canGoNext, "aria-label": "Go to next page", children: [_jsx("span", { children: "Next" }), _jsx(ChevronRight, { className: "h-[19.2px] w-[19.2px]", "aria-hidden": true })] }))] })] }));
|
|
170
|
+
}
|
|
171
|
+
function PaginationButton({ active, variant = "page", disabled, className, children, ...props }) {
|
|
172
|
+
return (_jsx("button", { type: "button", disabled: disabled, className: cn("inline-flex h-8 items-center justify-center gap-1 rounded-[4px] text-[14px] leading-4 transition-colors", variant === "control" &&
|
|
173
|
+
"border border-[#e6e6e6] px-3 py-2 font-normal text-[#1a1a1a]", variant === "page" &&
|
|
174
|
+
"min-w-8 border border-[#e6e6e6] px-3 py-2 font-normal text-[#1a1a1a]", variant === "page" &&
|
|
175
|
+
active &&
|
|
176
|
+
"w-8 border-transparent bg-primary font-bold text-white", disabled && "cursor-not-allowed opacity-30", className), ...props, children: children }));
|
|
177
|
+
}
|
|
178
|
+
function generatePageNumbers(currentPage, totalPages, maxVisible) {
|
|
179
|
+
// If total pages fit within maxVisible, show all
|
|
180
|
+
if (totalPages <= maxVisible) {
|
|
181
|
+
return Array.from({ length: totalPages }, (_, i) => i + 1);
|
|
182
|
+
}
|
|
183
|
+
const pages = [];
|
|
184
|
+
const halfVisible = Math.floor((maxVisible - 2) / 2); // Reserve 2 for first and last
|
|
185
|
+
// Always include first page
|
|
186
|
+
pages.push(1);
|
|
187
|
+
// Calculate range around current page
|
|
188
|
+
let start = Math.max(2, currentPage - halfVisible);
|
|
189
|
+
let end = Math.min(totalPages - 1, currentPage + halfVisible);
|
|
190
|
+
// Adjust if we're near the beginning
|
|
191
|
+
if (currentPage <= halfVisible + 2) {
|
|
192
|
+
start = 2;
|
|
193
|
+
end = Math.min(totalPages - 1, maxVisible - 1);
|
|
194
|
+
}
|
|
195
|
+
// Adjust if we're near the end
|
|
196
|
+
if (currentPage >= totalPages - halfVisible - 1) {
|
|
197
|
+
start = Math.max(2, totalPages - maxVisible + 2);
|
|
198
|
+
end = totalPages - 1;
|
|
199
|
+
}
|
|
200
|
+
// Add ellipsis before middle section if needed
|
|
201
|
+
if (start > 2) {
|
|
202
|
+
pages.push("ellipsis");
|
|
203
|
+
}
|
|
204
|
+
// Add middle pages
|
|
205
|
+
for (let i = start; i <= end; i++) {
|
|
206
|
+
pages.push(i);
|
|
207
|
+
}
|
|
208
|
+
// Add ellipsis after middle section if needed
|
|
209
|
+
if (end < totalPages - 1) {
|
|
210
|
+
pages.push("ellipsis");
|
|
211
|
+
}
|
|
212
|
+
// Always include last page
|
|
213
|
+
if (totalPages > 1) {
|
|
214
|
+
pages.push(totalPages);
|
|
215
|
+
}
|
|
216
|
+
return pages;
|
|
217
|
+
}
|
|
218
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
219
|
+
// Pagination Actions Container (for layout composability)
|
|
220
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
221
|
+
export function DataTablePaginationActions({ className, ...props }) {
|
|
222
|
+
return (_jsx("div", { "data-slot": "data-table-pagination-actions", className: cn("flex items-center gap-4", className), ...props }));
|
|
223
|
+
}
|
|
224
|
+
//# sourceMappingURL=pagination.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pagination.js","sourceRoot":"","sources":["../../../../src/components/data-table/pagination/pagination.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { ColumnDef, ColumnFiltersState, PaginationState, RowSelectionState, SortingState, Table, Updater } from "@tanstack/react-table";
|
|
3
|
+
import { UrlStateConfig, UrlStateContextValue } from "./url-state";
|
|
4
|
+
export type DataTableColumnMeta = {
|
|
5
|
+
headerClassName?: string;
|
|
6
|
+
cellClassName?: string;
|
|
7
|
+
/**
|
|
8
|
+
* Simple label used by generic UI (e.g. Sort By dropdown). This avoids trying
|
|
9
|
+
* to stringify the columnDef.header ReactNode.
|
|
10
|
+
*/
|
|
11
|
+
label?: string;
|
|
12
|
+
/**
|
|
13
|
+
* Explicit label used by the Sort By dropdown.
|
|
14
|
+
*/
|
|
15
|
+
sortyByLabel?: string;
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Client-side filtering: URL query params + TanStack Table filters in-browser.
|
|
19
|
+
* URL params persist across reloads/navigation, TanStack handles the actual filtering.
|
|
20
|
+
*
|
|
21
|
+
* @template TData - The row data type. Param keys will autocomplete to `keyof TData`.
|
|
22
|
+
*/
|
|
23
|
+
export type ClientFilterConfig<TData> = {
|
|
24
|
+
mode: "client";
|
|
25
|
+
/**
|
|
26
|
+
* Map of column accessor keys to URL query param names.
|
|
27
|
+
* TanStack Table filters locally using these columns.
|
|
28
|
+
* URL params provide persistence across reloads/navigation.
|
|
29
|
+
*
|
|
30
|
+
* Type-safe: Only keys from your data type are allowed as object keys.
|
|
31
|
+
* @example { title: "q", amount: "amt" } → ?q=hello&amt=500 (filtered by TanStack)
|
|
32
|
+
*/
|
|
33
|
+
params: Partial<Record<keyof TData & string, string>>;
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Server-side filtering: URL query params drive the filter state.
|
|
37
|
+
* Your server handles the actual filtering.
|
|
38
|
+
*
|
|
39
|
+
* @template TData - The row data type. Param keys will autocomplete to `keyof TData`.
|
|
40
|
+
*/
|
|
41
|
+
export type ServerFilterConfig<TData> = {
|
|
42
|
+
mode: "server";
|
|
43
|
+
/**
|
|
44
|
+
* Map of column accessor keys to URL query param names.
|
|
45
|
+
* Server handles the actual filtering based on these params.
|
|
46
|
+
*
|
|
47
|
+
* Type-safe: Only keys from your data type are allowed as object keys.
|
|
48
|
+
* @example { title: "q", amount: "amt" } → ?q=hello&amt=500 (filtered by server)
|
|
49
|
+
*/
|
|
50
|
+
params: Partial<Record<keyof TData & string, string>>;
|
|
51
|
+
};
|
|
52
|
+
/**
|
|
53
|
+
* No filtering enabled (default behavior).
|
|
54
|
+
*/
|
|
55
|
+
export type NoFilterConfig = {
|
|
56
|
+
mode?: undefined;
|
|
57
|
+
};
|
|
58
|
+
/**
|
|
59
|
+
* Discriminated union: only one filtering mode can be active.
|
|
60
|
+
* TypeScript will error if you try to use props from both modes.
|
|
61
|
+
*
|
|
62
|
+
* Both client and server modes use the same `params` structure for URL persistence.
|
|
63
|
+
* The difference is WHO does the filtering: TanStack (client) or your API (server).
|
|
64
|
+
*
|
|
65
|
+
* @template TData - The row data type for type-safe column keys.
|
|
66
|
+
*/
|
|
67
|
+
export type FilterConfig<TData> = ClientFilterConfig<TData> | ServerFilterConfig<TData> | NoFilterConfig;
|
|
68
|
+
/**
|
|
69
|
+
* Pagination URL param configuration.
|
|
70
|
+
*/
|
|
71
|
+
export type PaginationParams = {
|
|
72
|
+
/**
|
|
73
|
+
* URL query param name for page number.
|
|
74
|
+
* @default "page"
|
|
75
|
+
*/
|
|
76
|
+
page?: string;
|
|
77
|
+
/**
|
|
78
|
+
* URL query param name for page size/limit.
|
|
79
|
+
* @default "limit"
|
|
80
|
+
*/
|
|
81
|
+
limit?: string;
|
|
82
|
+
};
|
|
83
|
+
/**
|
|
84
|
+
* Client-side pagination: TanStack Table handles pagination in-browser.
|
|
85
|
+
* URL params persist across reloads/navigation.
|
|
86
|
+
*/
|
|
87
|
+
export type ClientPaginationConfig = {
|
|
88
|
+
mode: "client";
|
|
89
|
+
/**
|
|
90
|
+
* URL query param names for pagination.
|
|
91
|
+
* @example { page: "p", limit: "size" } → ?p=1&size=20
|
|
92
|
+
*/
|
|
93
|
+
params?: PaginationParams;
|
|
94
|
+
/**
|
|
95
|
+
* Default page size.
|
|
96
|
+
* @default 10
|
|
97
|
+
*/
|
|
98
|
+
defaultPageSize?: number;
|
|
99
|
+
/**
|
|
100
|
+
* Available page size options for the dropdown.
|
|
101
|
+
* @default [10, 20, 50, 100]
|
|
102
|
+
*/
|
|
103
|
+
pageSizeOptions?: number[];
|
|
104
|
+
};
|
|
105
|
+
/**
|
|
106
|
+
* Server-side pagination: URL query params drive the pagination state.
|
|
107
|
+
* Your server handles the actual data slicing.
|
|
108
|
+
*/
|
|
109
|
+
export type ServerPaginationConfig = {
|
|
110
|
+
mode: "server";
|
|
111
|
+
/**
|
|
112
|
+
* URL query param names for pagination.
|
|
113
|
+
* @example { page: "p", limit: "size" } → ?p=1&size=20
|
|
114
|
+
*/
|
|
115
|
+
params?: PaginationParams;
|
|
116
|
+
/**
|
|
117
|
+
* Total number of items (from server response).
|
|
118
|
+
* Required for calculating total pages.
|
|
119
|
+
*/
|
|
120
|
+
total: number;
|
|
121
|
+
/**
|
|
122
|
+
* Default page size.
|
|
123
|
+
* @default 10
|
|
124
|
+
*/
|
|
125
|
+
defaultPageSize?: number;
|
|
126
|
+
/**
|
|
127
|
+
* Available page size options for the dropdown.
|
|
128
|
+
* @default [10, 20, 50, 100]
|
|
129
|
+
*/
|
|
130
|
+
pageSizeOptions?: number[];
|
|
131
|
+
};
|
|
132
|
+
/**
|
|
133
|
+
* No pagination enabled (default behavior - shows all rows).
|
|
134
|
+
*/
|
|
135
|
+
export type NoPaginationConfig = {
|
|
136
|
+
mode?: undefined;
|
|
137
|
+
};
|
|
138
|
+
/**
|
|
139
|
+
* Discriminated union: only one pagination mode can be active.
|
|
140
|
+
*
|
|
141
|
+
* - **Client mode**: TanStack paginates locally, URL params provide persistence
|
|
142
|
+
* - **Server mode**: URL params trigger server-side pagination, requires `total`
|
|
143
|
+
*/
|
|
144
|
+
export type PaginationConfig = ClientPaginationConfig | ServerPaginationConfig | NoPaginationConfig;
|
|
145
|
+
export type DataTableQueryState = {
|
|
146
|
+
sorting: SortingState;
|
|
147
|
+
columnFilters: ColumnFiltersState;
|
|
148
|
+
globalFilter: string;
|
|
149
|
+
pagination: PaginationState;
|
|
150
|
+
rowSelection: RowSelectionState;
|
|
151
|
+
};
|
|
152
|
+
type OnChangeFn<T> = (updaterOrValue: Updater<T>) => void;
|
|
153
|
+
type DataTableContextValue<TData extends {
|
|
154
|
+
id: string | number;
|
|
155
|
+
}> = {
|
|
156
|
+
table: Table<TData>;
|
|
157
|
+
/**
|
|
158
|
+
* Filtering configuration (client, server, or none).
|
|
159
|
+
*/
|
|
160
|
+
filterConfig: FilterConfig<TData>;
|
|
161
|
+
/**
|
|
162
|
+
* Pagination configuration (client, server, or none).
|
|
163
|
+
*/
|
|
164
|
+
paginationConfig: PaginationConfig;
|
|
165
|
+
/**
|
|
166
|
+
* Loading state for server-side operations (filtering, pagination, etc.).
|
|
167
|
+
* When true, the table shows a loading indicator (e.g., reduced opacity).
|
|
168
|
+
*/
|
|
169
|
+
isLoading: boolean;
|
|
170
|
+
/**
|
|
171
|
+
* Initial loading state. When true, table rows render skeleton placeholders.
|
|
172
|
+
*/
|
|
173
|
+
isInitialLoading: boolean;
|
|
174
|
+
/**
|
|
175
|
+
* URL state management (tabs, sorting, visibility, search).
|
|
176
|
+
*/
|
|
177
|
+
urlState: UrlStateContextValue;
|
|
178
|
+
};
|
|
179
|
+
export declare function useDataTable<TData extends {
|
|
180
|
+
id: string | number;
|
|
181
|
+
}>(): DataTableContextValue<TData>;
|
|
182
|
+
export type DataTableProviderProps<TData extends {
|
|
183
|
+
id: string | number;
|
|
184
|
+
}, TValue> = {
|
|
185
|
+
data: TData[];
|
|
186
|
+
columns: ColumnDef<TData, TValue>[];
|
|
187
|
+
children: React.ReactNode;
|
|
188
|
+
/**
|
|
189
|
+
* Enable row selection (checkboxes).
|
|
190
|
+
*/
|
|
191
|
+
enableRowSelection?: boolean;
|
|
192
|
+
/**
|
|
193
|
+
* Optional override for the injected selection column.
|
|
194
|
+
*/
|
|
195
|
+
selectionColumn?: ColumnDef<TData, TValue>;
|
|
196
|
+
getRowId?: (originalRow: TData, index: number, parent?: any) => string;
|
|
197
|
+
manualSorting?: boolean;
|
|
198
|
+
sorting?: SortingState;
|
|
199
|
+
defaultSorting?: SortingState;
|
|
200
|
+
onSortingChange?: OnChangeFn<SortingState>;
|
|
201
|
+
manualFiltering?: boolean;
|
|
202
|
+
columnFilters?: ColumnFiltersState;
|
|
203
|
+
defaultColumnFilters?: ColumnFiltersState;
|
|
204
|
+
onColumnFiltersChange?: OnChangeFn<ColumnFiltersState>;
|
|
205
|
+
globalFilter?: string;
|
|
206
|
+
defaultGlobalFilter?: string;
|
|
207
|
+
onGlobalFilterChange?: OnChangeFn<string>;
|
|
208
|
+
manualPagination?: boolean;
|
|
209
|
+
pageCount?: number;
|
|
210
|
+
pagination?: PaginationState;
|
|
211
|
+
defaultPagination?: PaginationState;
|
|
212
|
+
onPaginationChange?: OnChangeFn<PaginationState>;
|
|
213
|
+
rowSelection?: RowSelectionState;
|
|
214
|
+
defaultRowSelection?: RowSelectionState;
|
|
215
|
+
onRowSelectionChange?: OnChangeFn<RowSelectionState>;
|
|
216
|
+
/**
|
|
217
|
+
* Convenience callback for server-driven tables. Fires whenever query-relevant
|
|
218
|
+
* state changes (sorting/filters/pagination/selection).
|
|
219
|
+
*/
|
|
220
|
+
onQueryChange?: (state: DataTableQueryState) => void;
|
|
221
|
+
/**
|
|
222
|
+
* Filtering mode configuration. Use discriminated union to ensure
|
|
223
|
+
* only one mode is active at a time.
|
|
224
|
+
*
|
|
225
|
+
* @example Client-side filtering
|
|
226
|
+
* ```tsx
|
|
227
|
+
* <DataTableProvider
|
|
228
|
+
* filterConfig={{ mode: "client", columns: ["title", "amount"] }}
|
|
229
|
+
* />
|
|
230
|
+
* ```
|
|
231
|
+
*
|
|
232
|
+
* @example Server-side filtering
|
|
233
|
+
* ```tsx
|
|
234
|
+
* <DataTableProvider
|
|
235
|
+
* filterConfig={{ mode: "server", params: { title: "q", amount: "amt" } }}
|
|
236
|
+
* />
|
|
237
|
+
* ```
|
|
238
|
+
*/
|
|
239
|
+
filterConfig?: FilterConfig<TData>;
|
|
240
|
+
/**
|
|
241
|
+
* Pagination mode configuration. Use discriminated union to ensure
|
|
242
|
+
* only one mode is active at a time.
|
|
243
|
+
*
|
|
244
|
+
* @example Client-side pagination
|
|
245
|
+
* ```tsx
|
|
246
|
+
* <DataTableProvider
|
|
247
|
+
* paginationConfig={{ mode: "client", defaultPageSize: 10 }}
|
|
248
|
+
* />
|
|
249
|
+
* ```
|
|
250
|
+
*
|
|
251
|
+
* @example Server-side pagination
|
|
252
|
+
* ```tsx
|
|
253
|
+
* <DataTableProvider
|
|
254
|
+
* paginationConfig={{ mode: "server", total: 500 }}
|
|
255
|
+
* />
|
|
256
|
+
* ```
|
|
257
|
+
*/
|
|
258
|
+
paginationConfig?: PaginationConfig;
|
|
259
|
+
/**
|
|
260
|
+
* Loading state for server-side operations.
|
|
261
|
+
* When true, the table displays with reduced opacity to indicate loading.
|
|
262
|
+
*/
|
|
263
|
+
isLoading?: boolean;
|
|
264
|
+
/**
|
|
265
|
+
* Initial loading state (first data load). When true, the table rows render
|
|
266
|
+
* skeleton placeholders with normal row height.
|
|
267
|
+
*/
|
|
268
|
+
isInitialLoading?: boolean;
|
|
269
|
+
/**
|
|
270
|
+
* URL state configuration for persisting tabs, sorting, and column visibility.
|
|
271
|
+
* When provided, state is synced to browser URL query params.
|
|
272
|
+
*/
|
|
273
|
+
urlStateConfig?: UrlStateConfig;
|
|
274
|
+
/**
|
|
275
|
+
* Default tab value (used when URL param is empty).
|
|
276
|
+
* Should match the first tab's value for proper reset behavior.
|
|
277
|
+
*/
|
|
278
|
+
defaultTab?: string;
|
|
279
|
+
};
|
|
280
|
+
export declare function DataTableProvider<TData extends {
|
|
281
|
+
id: string | number;
|
|
282
|
+
}, TValue>({ data, columns, children, enableRowSelection, selectionColumn, getRowId, manualSorting, sorting, defaultSorting, onSortingChange, manualFiltering, columnFilters, defaultColumnFilters, onColumnFiltersChange, globalFilter, defaultGlobalFilter, onGlobalFilterChange, manualPagination, pageCount, pagination, defaultPagination, onPaginationChange, rowSelection, defaultRowSelection, onRowSelectionChange, onQueryChange, filterConfig, paginationConfig, isLoading, isInitialLoading, urlStateConfig, defaultTab, }: DataTableProviderProps<TData, TValue>): import("react/jsx-runtime").JSX.Element;
|
|
283
|
+
export {};
|
|
284
|
+
//# sourceMappingURL=provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/components/data-table/provider.tsx"],"names":[],"mappings":"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"}
|