@underverse-ui/underverse 0.1.26 → 0.1.30
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/dist/index.cjs +132 -98
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.js +132 -98
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.cts
CHANGED
|
@@ -596,6 +596,7 @@ interface PaginationProps {
|
|
|
596
596
|
showPageNumbers?: boolean;
|
|
597
597
|
showInfo?: boolean;
|
|
598
598
|
disabled?: boolean;
|
|
599
|
+
alignment?: "left" | "center" | "right";
|
|
599
600
|
pageSize?: number;
|
|
600
601
|
pageSizeOptions?: number[];
|
|
601
602
|
onPageSizeChange?: (size: number) => void;
|
|
@@ -949,6 +950,7 @@ interface DataTableProps<T> {
|
|
|
949
950
|
total?: number;
|
|
950
951
|
page?: number;
|
|
951
952
|
pageSize?: number;
|
|
953
|
+
pageSizeOptions?: number[];
|
|
952
954
|
onQueryChange?: (q: DataTableQuery) => void;
|
|
953
955
|
caption?: React__default.ReactNode;
|
|
954
956
|
toolbar?: React__default.ReactNode;
|
|
@@ -964,7 +966,7 @@ interface DataTableProps<T> {
|
|
|
964
966
|
comfortable?: string;
|
|
965
967
|
};
|
|
966
968
|
}
|
|
967
|
-
declare function DataTable<T extends Record<string, any>>({ columns, data, rowKey, loading, total, page, pageSize, onQueryChange, caption, toolbar, enableColumnVisibilityToggle, enableDensityToggle, striped, // Mặc định bật màu nền sẽn kẽ cho các dòng
|
|
969
|
+
declare function DataTable<T extends Record<string, any>>({ columns, data, rowKey, loading, total, page, pageSize, pageSizeOptions, onQueryChange, caption, toolbar, enableColumnVisibilityToggle, enableDensityToggle, striped, // Mặc định bật màu nền sẽn kẽ cho các dòng
|
|
968
970
|
className, labels, }: DataTableProps<T>): react_jsx_runtime.JSX.Element;
|
|
969
971
|
|
|
970
972
|
interface TableProps extends React__default.HTMLAttributes<HTMLTableElement> {
|
package/dist/index.d.ts
CHANGED
|
@@ -596,6 +596,7 @@ interface PaginationProps {
|
|
|
596
596
|
showPageNumbers?: boolean;
|
|
597
597
|
showInfo?: boolean;
|
|
598
598
|
disabled?: boolean;
|
|
599
|
+
alignment?: "left" | "center" | "right";
|
|
599
600
|
pageSize?: number;
|
|
600
601
|
pageSizeOptions?: number[];
|
|
601
602
|
onPageSizeChange?: (size: number) => void;
|
|
@@ -949,6 +950,7 @@ interface DataTableProps<T> {
|
|
|
949
950
|
total?: number;
|
|
950
951
|
page?: number;
|
|
951
952
|
pageSize?: number;
|
|
953
|
+
pageSizeOptions?: number[];
|
|
952
954
|
onQueryChange?: (q: DataTableQuery) => void;
|
|
953
955
|
caption?: React__default.ReactNode;
|
|
954
956
|
toolbar?: React__default.ReactNode;
|
|
@@ -964,7 +966,7 @@ interface DataTableProps<T> {
|
|
|
964
966
|
comfortable?: string;
|
|
965
967
|
};
|
|
966
968
|
}
|
|
967
|
-
declare function DataTable<T extends Record<string, any>>({ columns, data, rowKey, loading, total, page, pageSize, onQueryChange, caption, toolbar, enableColumnVisibilityToggle, enableDensityToggle, striped, // Mặc định bật màu nền sẽn kẽ cho các dòng
|
|
969
|
+
declare function DataTable<T extends Record<string, any>>({ columns, data, rowKey, loading, total, page, pageSize, pageSizeOptions, onQueryChange, caption, toolbar, enableColumnVisibilityToggle, enableDensityToggle, striped, // Mặc định bật màu nền sẽn kẽ cho các dòng
|
|
968
970
|
className, labels, }: DataTableProps<T>): react_jsx_runtime.JSX.Element;
|
|
969
971
|
|
|
970
972
|
interface TableProps extends React__default.HTMLAttributes<HTMLTableElement> {
|
package/dist/index.js
CHANGED
|
@@ -4095,6 +4095,7 @@ var Pagination = ({
|
|
|
4095
4095
|
showPageNumbers = true,
|
|
4096
4096
|
showInfo = false,
|
|
4097
4097
|
disabled = false,
|
|
4098
|
+
alignment = "left",
|
|
4098
4099
|
pageSize,
|
|
4099
4100
|
pageSizeOptions,
|
|
4100
4101
|
onPageSizeChange,
|
|
@@ -4102,6 +4103,17 @@ var Pagination = ({
|
|
|
4102
4103
|
labels
|
|
4103
4104
|
}) => {
|
|
4104
4105
|
const t = useTranslations4("Pagination");
|
|
4106
|
+
const getTextAlignmentClass = (align) => {
|
|
4107
|
+
switch (align) {
|
|
4108
|
+
case "left":
|
|
4109
|
+
return "text-left";
|
|
4110
|
+
case "center":
|
|
4111
|
+
return "text-center";
|
|
4112
|
+
case "right":
|
|
4113
|
+
return "text-right";
|
|
4114
|
+
}
|
|
4115
|
+
};
|
|
4116
|
+
const textAlignmentClass = getTextAlignmentClass(alignment);
|
|
4105
4117
|
const createPageArray = () => {
|
|
4106
4118
|
const delta = 2;
|
|
4107
4119
|
const range = [];
|
|
@@ -4154,103 +4166,107 @@ var Pagination = ({
|
|
|
4154
4166
|
};
|
|
4155
4167
|
if (totalPages <= 1) return null;
|
|
4156
4168
|
return /* @__PURE__ */ jsxs22("nav", { className: cn("flex flex-col gap-4", className), "aria-label": labels?.navigationLabel || t("navigationLabel"), children: [
|
|
4157
|
-
showInfo && totalItems && /* @__PURE__ */ jsx24("div", { className: "text-sm text-muted-foreground
|
|
4158
|
-
/* @__PURE__ */ jsxs22("div", { className: "flex items-center justify-
|
|
4159
|
-
|
|
4160
|
-
|
|
4161
|
-
|
|
4162
|
-
|
|
4163
|
-
size,
|
|
4164
|
-
icon: ChevronsLeft,
|
|
4165
|
-
onClick: () => onChange(1),
|
|
4166
|
-
disabled: disabled || page === 1,
|
|
4167
|
-
className: "hidden sm:flex",
|
|
4168
|
-
title: labels?.firstPage || t("firstPage"),
|
|
4169
|
-
"aria-label": labels?.firstPage || t("firstPage"),
|
|
4170
|
-
"aria-disabled": disabled || page === 1
|
|
4171
|
-
}
|
|
4172
|
-
),
|
|
4173
|
-
showPrevNext && /* @__PURE__ */ jsx24(
|
|
4174
|
-
Button_default,
|
|
4175
|
-
{
|
|
4176
|
-
variant: getButtonVariant(false),
|
|
4177
|
-
size,
|
|
4178
|
-
icon: ChevronLeft,
|
|
4179
|
-
onClick: () => onChange(Math.max(1, page - 1)),
|
|
4180
|
-
disabled: disabled || page === 1,
|
|
4181
|
-
title: labels?.previousPage || t("previousPage"),
|
|
4182
|
-
"aria-label": labels?.previousPage || t("previousPage"),
|
|
4183
|
-
"aria-disabled": disabled || page === 1,
|
|
4184
|
-
children: /* @__PURE__ */ jsx24("span", { className: "hidden sm:inline", children: labels?.previous || t("previous") })
|
|
4185
|
-
}
|
|
4186
|
-
),
|
|
4187
|
-
showPageNumbers && createPageArray().map((p, i) => {
|
|
4188
|
-
if (p === "...") {
|
|
4189
|
-
return /* @__PURE__ */ jsx24(Button_default, { variant: "ghost", size, disabled: true, icon: MoreHorizontal2, className: "cursor-default" }, i);
|
|
4190
|
-
}
|
|
4191
|
-
const pageNumber = p;
|
|
4192
|
-
const isActive = page === pageNumber;
|
|
4193
|
-
return /* @__PURE__ */ jsx24(
|
|
4169
|
+
showInfo && totalItems && /* @__PURE__ */ jsx24("div", { className: cn("text-sm text-muted-foreground", textAlignmentClass), children: labels?.showingResults ? labels.showingResults({ startItem: startItem || 0, endItem: endItem || 0, totalItems }) : t("showingResults", { startItem: startItem || 0, endItem: endItem || 0, totalItems }) }),
|
|
4170
|
+
/* @__PURE__ */ jsxs22("div", { className: cn("flex items-center justify-between", {
|
|
4171
|
+
"flex-row-reverse": alignment === "right" || alignment === "center"
|
|
4172
|
+
}), children: [
|
|
4173
|
+
/* @__PURE__ */ jsxs22("div", { className: cn("flex items-center gap-1"), children: [
|
|
4174
|
+
showFirstLast && /* @__PURE__ */ jsx24(
|
|
4194
4175
|
Button_default,
|
|
4195
4176
|
{
|
|
4196
|
-
variant: getButtonVariant(
|
|
4177
|
+
variant: getButtonVariant(false),
|
|
4197
4178
|
size,
|
|
4198
|
-
|
|
4199
|
-
|
|
4200
|
-
|
|
4201
|
-
|
|
4202
|
-
|
|
4203
|
-
|
|
4204
|
-
|
|
4205
|
-
|
|
4206
|
-
)
|
|
4207
|
-
|
|
4208
|
-
|
|
4209
|
-
|
|
4210
|
-
|
|
4211
|
-
|
|
4212
|
-
|
|
4213
|
-
|
|
4214
|
-
|
|
4215
|
-
|
|
4216
|
-
|
|
4217
|
-
|
|
4218
|
-
|
|
4219
|
-
|
|
4220
|
-
|
|
4221
|
-
|
|
4222
|
-
|
|
4223
|
-
|
|
4224
|
-
|
|
4225
|
-
|
|
4226
|
-
|
|
4227
|
-
|
|
4228
|
-
|
|
4229
|
-
|
|
4230
|
-
|
|
4231
|
-
|
|
4232
|
-
|
|
4233
|
-
|
|
4234
|
-
|
|
4235
|
-
|
|
4236
|
-
|
|
4237
|
-
|
|
4238
|
-
|
|
4239
|
-
|
|
4240
|
-
|
|
4179
|
+
icon: ChevronsLeft,
|
|
4180
|
+
onClick: () => onChange(1),
|
|
4181
|
+
disabled: disabled || page === 1,
|
|
4182
|
+
className: "hidden sm:flex",
|
|
4183
|
+
title: labels?.firstPage || t("firstPage"),
|
|
4184
|
+
"aria-label": labels?.firstPage || t("firstPage"),
|
|
4185
|
+
"aria-disabled": disabled || page === 1
|
|
4186
|
+
}
|
|
4187
|
+
),
|
|
4188
|
+
showPrevNext && /* @__PURE__ */ jsx24(
|
|
4189
|
+
Button_default,
|
|
4190
|
+
{
|
|
4191
|
+
variant: getButtonVariant(false),
|
|
4192
|
+
size,
|
|
4193
|
+
icon: ChevronLeft,
|
|
4194
|
+
onClick: () => onChange(Math.max(1, page - 1)),
|
|
4195
|
+
disabled: disabled || page === 1,
|
|
4196
|
+
title: labels?.previousPage || t("previousPage"),
|
|
4197
|
+
"aria-label": labels?.previousPage || t("previousPage"),
|
|
4198
|
+
"aria-disabled": disabled || page === 1,
|
|
4199
|
+
children: /* @__PURE__ */ jsx24("span", { className: "hidden sm:inline", children: labels?.previous || t("previous") })
|
|
4200
|
+
}
|
|
4201
|
+
),
|
|
4202
|
+
showPageNumbers && createPageArray().map((p, i) => {
|
|
4203
|
+
if (p === "...") {
|
|
4204
|
+
return /* @__PURE__ */ jsx24(Button_default, { variant: "ghost", size, disabled: true, icon: MoreHorizontal2, className: "cursor-default" }, i);
|
|
4205
|
+
}
|
|
4206
|
+
const pageNumber = p;
|
|
4207
|
+
const isActive = page === pageNumber;
|
|
4208
|
+
return /* @__PURE__ */ jsx24(
|
|
4209
|
+
Button_default,
|
|
4210
|
+
{
|
|
4211
|
+
variant: getButtonVariant(isActive),
|
|
4212
|
+
size,
|
|
4213
|
+
onClick: () => onChange(pageNumber),
|
|
4214
|
+
disabled,
|
|
4215
|
+
className: cn("min-w-[2.5rem]", isActive && "font-semibold"),
|
|
4216
|
+
"aria-label": labels?.pageNumber ? labels.pageNumber(pageNumber) : t("pageNumber", { page: pageNumber }),
|
|
4217
|
+
"aria-current": isActive ? "page" : void 0,
|
|
4218
|
+
children: pageNumber
|
|
4219
|
+
},
|
|
4220
|
+
i
|
|
4221
|
+
);
|
|
4222
|
+
}),
|
|
4223
|
+
showPrevNext && /* @__PURE__ */ jsx24(
|
|
4224
|
+
Button_default,
|
|
4225
|
+
{
|
|
4226
|
+
variant: getButtonVariant(false),
|
|
4227
|
+
size,
|
|
4228
|
+
iconRight: ChevronRight2,
|
|
4229
|
+
onClick: () => onChange(Math.min(totalPages, page + 1)),
|
|
4230
|
+
disabled: disabled || page === totalPages,
|
|
4231
|
+
title: labels?.nextPage || t("nextPage"),
|
|
4232
|
+
"aria-label": labels?.nextPage || t("nextPage"),
|
|
4233
|
+
"aria-disabled": disabled || page === totalPages,
|
|
4234
|
+
children: /* @__PURE__ */ jsx24("span", { className: "hidden sm:inline", children: labels?.next || t("next") })
|
|
4235
|
+
}
|
|
4236
|
+
),
|
|
4237
|
+
showFirstLast && /* @__PURE__ */ jsx24(
|
|
4238
|
+
Button_default,
|
|
4239
|
+
{
|
|
4240
|
+
variant: getButtonVariant(false),
|
|
4241
|
+
size,
|
|
4242
|
+
icon: ChevronsRight,
|
|
4243
|
+
onClick: () => onChange(totalPages),
|
|
4244
|
+
disabled: disabled || page === totalPages,
|
|
4245
|
+
className: "hidden sm:flex",
|
|
4246
|
+
title: labels?.lastPage || t("lastPage"),
|
|
4247
|
+
"aria-label": labels?.lastPage || t("lastPage"),
|
|
4248
|
+
"aria-disabled": disabled || page === totalPages
|
|
4249
|
+
}
|
|
4250
|
+
)
|
|
4241
4251
|
] }),
|
|
4242
|
-
/* @__PURE__ */
|
|
4243
|
-
|
|
4244
|
-
|
|
4245
|
-
|
|
4246
|
-
|
|
4247
|
-
|
|
4248
|
-
|
|
4249
|
-
|
|
4250
|
-
|
|
4251
|
-
|
|
4252
|
-
|
|
4253
|
-
|
|
4252
|
+
pageSizeOptions && onPageSizeChange && /* @__PURE__ */ jsxs22("div", { className: cn("flex items-center gap-2 text-sm"), children: [
|
|
4253
|
+
/* @__PURE__ */ jsxs22("span", { className: "text-muted-foreground", children: [
|
|
4254
|
+
labels?.itemsPerPage || t("itemsPerPage"),
|
|
4255
|
+
":"
|
|
4256
|
+
] }),
|
|
4257
|
+
/* @__PURE__ */ jsx24("div", { className: "w-20", children: /* @__PURE__ */ jsx24(
|
|
4258
|
+
Combobox,
|
|
4259
|
+
{
|
|
4260
|
+
options: pageSizeOptionsStrings,
|
|
4261
|
+
value: pageSize?.toString() || "10",
|
|
4262
|
+
onChange: handlePageSizeChange,
|
|
4263
|
+
placeholder: "10",
|
|
4264
|
+
searchPlaceholder: labels?.search || t("search"),
|
|
4265
|
+
emptyText: labels?.noOptions || t("noOptions"),
|
|
4266
|
+
disabled
|
|
4267
|
+
}
|
|
4268
|
+
) })
|
|
4269
|
+
] })
|
|
4254
4270
|
] })
|
|
4255
4271
|
] });
|
|
4256
4272
|
};
|
|
@@ -7003,6 +7019,7 @@ function DataTable({
|
|
|
7003
7019
|
total = 0,
|
|
7004
7020
|
page = 1,
|
|
7005
7021
|
pageSize = 20,
|
|
7022
|
+
pageSizeOptions,
|
|
7006
7023
|
onQueryChange,
|
|
7007
7024
|
caption,
|
|
7008
7025
|
toolbar,
|
|
@@ -7021,6 +7038,12 @@ function DataTable({
|
|
|
7021
7038
|
const [curPage, setCurPage] = React30.useState(page);
|
|
7022
7039
|
const [curPageSize, setCurPageSize] = React30.useState(pageSize);
|
|
7023
7040
|
const debouncedFilters = useDebounced(filters, 350);
|
|
7041
|
+
React30.useEffect(() => {
|
|
7042
|
+
setCurPage(page);
|
|
7043
|
+
}, [page]);
|
|
7044
|
+
React30.useEffect(() => {
|
|
7045
|
+
setCurPageSize(pageSize);
|
|
7046
|
+
}, [pageSize]);
|
|
7024
7047
|
React30.useEffect(() => {
|
|
7025
7048
|
if (!onQueryChange) return;
|
|
7026
7049
|
onQueryChange({ filters: debouncedFilters, sort, page: curPage, pageSize: curPageSize });
|
|
@@ -7182,6 +7205,12 @@ function DataTable({
|
|
|
7182
7205
|
},
|
|
7183
7206
|
col.key
|
|
7184
7207
|
)) });
|
|
7208
|
+
const isServerMode = Boolean(onQueryChange);
|
|
7209
|
+
const displayedData = isServerMode ? data : React30.useMemo(() => {
|
|
7210
|
+
const start = (curPage - 1) * curPageSize;
|
|
7211
|
+
return data.slice(start, start + curPageSize);
|
|
7212
|
+
}, [data, curPage, curPageSize]);
|
|
7213
|
+
const totalItems = isServerMode ? total : data.length;
|
|
7185
7214
|
return /* @__PURE__ */ jsxs33("div", { className: cn("space-y-2", className), children: [
|
|
7186
7215
|
/* @__PURE__ */ jsxs33("div", { className: "flex items-center justify-between gap-4 mb-1", children: [
|
|
7187
7216
|
/* @__PURE__ */ jsx39("div", { className: "text-sm text-muted-foreground", children: caption }),
|
|
@@ -7253,7 +7282,7 @@ function DataTable({
|
|
|
7253
7282
|
)
|
|
7254
7283
|
] }),
|
|
7255
7284
|
/* @__PURE__ */ jsx39("span", { className: "text-sm", children: "Loading..." })
|
|
7256
|
-
] }) }) }) : !
|
|
7285
|
+
] }) }) }) : !displayedData || displayedData.length === 0 ? /* @__PURE__ */ jsx39(TableRow, { children: /* @__PURE__ */ jsx39(TableCell, { colSpan: visibleColumns.length, className: "text-center py-6 text-muted-foreground", children: "No data" }) }) : displayedData.map((row, idx) => /* @__PURE__ */ jsx39(TableRow, { className: cn(densityRowClass, striped && idx % 2 === 0 && "bg-muted/30"), children: visibleColumns.map((col) => {
|
|
7257
7286
|
const value = col.dataIndex ? row[col.dataIndex] : void 0;
|
|
7258
7287
|
return /* @__PURE__ */ jsx39(
|
|
7259
7288
|
TableCell,
|
|
@@ -7273,16 +7302,21 @@ function DataTable({
|
|
|
7273
7302
|
]
|
|
7274
7303
|
}
|
|
7275
7304
|
) }),
|
|
7276
|
-
|
|
7305
|
+
totalItems > 0 && /* @__PURE__ */ jsx39("div", { className: "border-t bg-muted/30 p-4 rounded-b-lg", children: /* @__PURE__ */ jsx39(
|
|
7277
7306
|
Pagination,
|
|
7278
7307
|
{
|
|
7279
7308
|
page: curPage,
|
|
7280
|
-
totalPages: Math.ceil(
|
|
7309
|
+
totalPages: Math.ceil(totalItems / curPageSize),
|
|
7281
7310
|
onChange: (p) => setCurPage(p),
|
|
7282
7311
|
className: "",
|
|
7283
7312
|
showInfo: true,
|
|
7284
|
-
totalItems
|
|
7285
|
-
pageSize: curPageSize
|
|
7313
|
+
totalItems,
|
|
7314
|
+
pageSize: curPageSize,
|
|
7315
|
+
pageSizeOptions,
|
|
7316
|
+
onPageSizeChange: (s) => {
|
|
7317
|
+
setCurPage(1);
|
|
7318
|
+
setCurPageSize(s);
|
|
7319
|
+
}
|
|
7286
7320
|
}
|
|
7287
7321
|
) })
|
|
7288
7322
|
] });
|