jett.admin.npmpackage 1.0.62 → 1.0.65
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.css +41 -9
- package/dist/index.js +159 -7
- package/dist/index.mjs +158 -7
- package/package.json +1 -1
package/dist/index.css
CHANGED
|
@@ -276,9 +276,6 @@
|
|
|
276
276
|
.top-0 {
|
|
277
277
|
top: calc(var(--spacing) * 0);
|
|
278
278
|
}
|
|
279
|
-
.top-4 {
|
|
280
|
-
top: calc(var(--spacing) * 4);
|
|
281
|
-
}
|
|
282
279
|
.top-full {
|
|
283
280
|
top: 100%;
|
|
284
281
|
}
|
|
@@ -291,9 +288,6 @@
|
|
|
291
288
|
.left-0 {
|
|
292
289
|
left: calc(var(--spacing) * 0);
|
|
293
290
|
}
|
|
294
|
-
.left-4 {
|
|
295
|
-
left: calc(var(--spacing) * 4);
|
|
296
|
-
}
|
|
297
291
|
.z-10 {
|
|
298
292
|
z-index: 10;
|
|
299
293
|
}
|
|
@@ -360,6 +354,9 @@
|
|
|
360
354
|
.h-6 {
|
|
361
355
|
height: calc(var(--spacing) * 6);
|
|
362
356
|
}
|
|
357
|
+
.h-9 {
|
|
358
|
+
height: calc(var(--spacing) * 9);
|
|
359
|
+
}
|
|
363
360
|
.h-10 {
|
|
364
361
|
height: calc(var(--spacing) * 10);
|
|
365
362
|
}
|
|
@@ -399,12 +396,18 @@
|
|
|
399
396
|
.w-6 {
|
|
400
397
|
width: calc(var(--spacing) * 6);
|
|
401
398
|
}
|
|
399
|
+
.w-9 {
|
|
400
|
+
width: calc(var(--spacing) * 9);
|
|
401
|
+
}
|
|
402
402
|
.w-10 {
|
|
403
403
|
width: calc(var(--spacing) * 10);
|
|
404
404
|
}
|
|
405
405
|
.w-11 {
|
|
406
406
|
width: calc(var(--spacing) * 11);
|
|
407
407
|
}
|
|
408
|
+
.w-20 {
|
|
409
|
+
width: calc(var(--spacing) * 20);
|
|
410
|
+
}
|
|
408
411
|
.w-\[50px\] {
|
|
409
412
|
width: 50px;
|
|
410
413
|
}
|
|
@@ -414,6 +417,9 @@
|
|
|
414
417
|
.w-full {
|
|
415
418
|
width: 100%;
|
|
416
419
|
}
|
|
420
|
+
.min-w-9 {
|
|
421
|
+
min-width: calc(var(--spacing) * 9);
|
|
422
|
+
}
|
|
417
423
|
.min-w-\[100\%\] {
|
|
418
424
|
min-width: 100%;
|
|
419
425
|
}
|
|
@@ -423,9 +429,6 @@
|
|
|
423
429
|
.shrink-0 {
|
|
424
430
|
flex-shrink: 0;
|
|
425
431
|
}
|
|
426
|
-
.table-fixed {
|
|
427
|
-
table-layout: fixed;
|
|
428
|
-
}
|
|
429
432
|
.caption-bottom {
|
|
430
433
|
caption-side: bottom;
|
|
431
434
|
}
|
|
@@ -494,6 +497,9 @@
|
|
|
494
497
|
.gap-3 {
|
|
495
498
|
gap: calc(var(--spacing) * 3);
|
|
496
499
|
}
|
|
500
|
+
.gap-4 {
|
|
501
|
+
gap: calc(var(--spacing) * 4);
|
|
502
|
+
}
|
|
497
503
|
.truncate {
|
|
498
504
|
overflow: hidden;
|
|
499
505
|
text-overflow: ellipsis;
|
|
@@ -577,6 +583,9 @@
|
|
|
577
583
|
.border-gray-400 {
|
|
578
584
|
border-color: var(--color-gray-400);
|
|
579
585
|
}
|
|
586
|
+
.border-primary {
|
|
587
|
+
border-color: var(--color-primary);
|
|
588
|
+
}
|
|
580
589
|
.border-red-500 {
|
|
581
590
|
border-color: var(--color-red-500);
|
|
582
591
|
}
|
|
@@ -670,6 +679,9 @@
|
|
|
670
679
|
.pt-2 {
|
|
671
680
|
padding-top: calc(var(--spacing) * 2);
|
|
672
681
|
}
|
|
682
|
+
.pt-20 {
|
|
683
|
+
padding-top: calc(var(--spacing) * 20);
|
|
684
|
+
}
|
|
673
685
|
.text-center {
|
|
674
686
|
text-align: center;
|
|
675
687
|
}
|
|
@@ -997,6 +1009,11 @@
|
|
|
997
1009
|
position: relative;
|
|
998
1010
|
}
|
|
999
1011
|
}
|
|
1012
|
+
.md\:block {
|
|
1013
|
+
@media (width >= 48rem) {
|
|
1014
|
+
display: block;
|
|
1015
|
+
}
|
|
1016
|
+
}
|
|
1000
1017
|
.md\:hidden {
|
|
1001
1018
|
@media (width >= 48rem) {
|
|
1002
1019
|
display: none;
|
|
@@ -1013,6 +1030,11 @@
|
|
|
1013
1030
|
translate: var(--tw-translate-x) var(--tw-translate-y);
|
|
1014
1031
|
}
|
|
1015
1032
|
}
|
|
1033
|
+
.md\:pt-4 {
|
|
1034
|
+
@media (width >= 48rem) {
|
|
1035
|
+
padding-top: calc(var(--spacing) * 4);
|
|
1036
|
+
}
|
|
1037
|
+
}
|
|
1016
1038
|
.md\:max-lg\:w-\[280px\] {
|
|
1017
1039
|
@media (width >= 48rem) {
|
|
1018
1040
|
@media (width < 64rem) {
|
|
@@ -1050,6 +1072,11 @@
|
|
|
1050
1072
|
background-color: var(--color-green-900);
|
|
1051
1073
|
}
|
|
1052
1074
|
}
|
|
1075
|
+
.dark\:bg-primary {
|
|
1076
|
+
&:where(.dark, .dark *) {
|
|
1077
|
+
background-color: var(--color-primary);
|
|
1078
|
+
}
|
|
1079
|
+
}
|
|
1053
1080
|
.dark\:bg-red-900 {
|
|
1054
1081
|
&:where(.dark, .dark *) {
|
|
1055
1082
|
background-color: var(--color-red-900);
|
|
@@ -1070,6 +1097,11 @@
|
|
|
1070
1097
|
color: #f4f4f5cc;
|
|
1071
1098
|
}
|
|
1072
1099
|
}
|
|
1100
|
+
.dark\:text-gray-600 {
|
|
1101
|
+
&:where(.dark, .dark *) {
|
|
1102
|
+
color: var(--color-gray-600);
|
|
1103
|
+
}
|
|
1104
|
+
}
|
|
1073
1105
|
.dark\:text-green-100 {
|
|
1074
1106
|
&:where(.dark, .dark *) {
|
|
1075
1107
|
color: var(--color-green-100);
|
package/dist/index.js
CHANGED
|
@@ -41,6 +41,7 @@ __export(index_exports, {
|
|
|
41
41
|
CustomTable: () => CustomTable,
|
|
42
42
|
CustomTextarea: () => CustomTextarea,
|
|
43
43
|
CustomUpload: () => CustomUpload,
|
|
44
|
+
Pagination: () => Pagination,
|
|
44
45
|
ProgressBar: () => ProgressBar,
|
|
45
46
|
RightSheet: () => RightSheet
|
|
46
47
|
});
|
|
@@ -777,26 +778,35 @@ var AppSideBar = ({
|
|
|
777
778
|
const closeMobileMenu = () => {
|
|
778
779
|
setIsMobileMenuOpen(false);
|
|
779
780
|
};
|
|
780
|
-
return /* @__PURE__ */ import_react12.default.createElement(import_react12.default.Fragment, null, /* @__PURE__ */ import_react12.default.createElement(
|
|
781
|
+
return /* @__PURE__ */ import_react12.default.createElement(import_react12.default.Fragment, null, /* @__PURE__ */ import_react12.default.createElement("div", { className: "fixed top-0 left-0 w-full z-50 md:hidden bg-white dark:bg-[#18181b] border-b border-gray-200 dark:border-[#303036] shadow-lg px-4 py-3 flex items-center justify-between" }, /* @__PURE__ */ import_react12.default.createElement(
|
|
781
782
|
"button",
|
|
782
783
|
{
|
|
783
784
|
onClick: toggleMobileMenu,
|
|
784
|
-
className: "
|
|
785
|
+
className: "p-2 rounded-lg hover:bg-gray-50 dark:hover:bg-[#27272a] transition-colors",
|
|
785
786
|
"aria-label": "Toggle menu"
|
|
786
787
|
},
|
|
787
788
|
isMobileMenuOpen ? /* @__PURE__ */ import_react12.default.createElement(import_lucide_react6.X, { className: "w-6 h-6 text-gray-700 dark:text-[#f4f4f5cc]" }) : /* @__PURE__ */ import_react12.default.createElement(import_lucide_react6.Menu, { className: "w-6 h-6 text-gray-700 dark:text-[#f4f4f5cc]" })
|
|
788
|
-
),
|
|
789
|
+
), /* @__PURE__ */ import_react12.default.createElement("div", { className: "flex-1 flex justify-center" }, /* @__PURE__ */ import_react12.default.createElement(
|
|
790
|
+
"img",
|
|
791
|
+
{
|
|
792
|
+
src: sideBarLogoLocal,
|
|
793
|
+
alt: "sidebarLogo",
|
|
794
|
+
width: 108,
|
|
795
|
+
height: 40,
|
|
796
|
+
className: "object-contain"
|
|
797
|
+
}
|
|
798
|
+
)), /* @__PURE__ */ import_react12.default.createElement("div", { className: "w-10" })), isMobileMenuOpen && /* @__PURE__ */ import_react12.default.createElement(
|
|
789
799
|
"div",
|
|
790
800
|
{
|
|
791
|
-
className: "fixed inset-0 bg-black bg-opacity-50 z-40 md:hidden",
|
|
801
|
+
className: "fixed inset-0 bg-black/80 bg-opacity-50 z-40 md:hidden",
|
|
792
802
|
onClick: closeMobileMenu
|
|
793
803
|
}
|
|
794
804
|
), /* @__PURE__ */ import_react12.default.createElement(
|
|
795
805
|
"div",
|
|
796
806
|
{
|
|
797
|
-
className: `fixed top-0 left-0 md:relative w-[320px] transition-all ease-in-out delay-100 bg-white dark:bg-[#18181b] border-r border-gray-200 dark:border-[#303036] flex flex-col p-4 h-full max-h-[100vh] z-40 md:max-lg:w-[280px] ${isMobileMenuOpen ? "translate-x-0" : "-translate-x-full md:translate-x-0"}`
|
|
807
|
+
className: `fixed top-0 left-0 md:relative w-[320px] transition-all ease-in-out delay-100 bg-white dark:bg-[#18181b] border-r border-gray-200 dark:border-[#303036] flex flex-col p-4 pt-20 md:pt-4 h-full max-h-[100vh] z-40 md:max-lg:w-[280px] ${isMobileMenuOpen ? "translate-x-0" : "-translate-x-full md:translate-x-0"}`
|
|
798
808
|
},
|
|
799
|
-
/* @__PURE__ */ import_react12.default.createElement("div", { className: "p-2 mb-2" }, /* @__PURE__ */ import_react12.default.createElement("div", { className: "flex items-center justify-center w-full h-[60px] mb-2" }, /* @__PURE__ */ import_react12.default.createElement(
|
|
809
|
+
/* @__PURE__ */ import_react12.default.createElement("div", { className: "p-2 mb-2 hidden md:block" }, /* @__PURE__ */ import_react12.default.createElement("div", { className: "flex items-center justify-center w-full h-[60px] mb-2" }, /* @__PURE__ */ import_react12.default.createElement(
|
|
800
810
|
"img",
|
|
801
811
|
{
|
|
802
812
|
src: sideBarLogoLocal,
|
|
@@ -964,7 +974,7 @@ var CustomTable = ({
|
|
|
964
974
|
children,
|
|
965
975
|
isHideCheckbox = "false"
|
|
966
976
|
}) => {
|
|
967
|
-
return /* @__PURE__ */ import_react14.default.createElement("div", { className: "border border-[#e5e5e5] dark:border-[#303036] rounded-lg overflow-x-auto" }, /* @__PURE__ */ import_react14.default.createElement("div", { className: "w-full relative overflow-x-auto" }, /* @__PURE__ */ import_react14.default.createElement("table", { className: "w-full caption-bottom text-sm overflow-x-auto bg-white dark:bg-[#18181b]
|
|
977
|
+
return /* @__PURE__ */ import_react14.default.createElement("div", { className: "border border-[#e5e5e5] dark:border-[#303036] rounded-lg overflow-x-auto flex flex-col" }, /* @__PURE__ */ import_react14.default.createElement("div", { className: "w-full relative overflow-x-auto flex-1" }, /* @__PURE__ */ import_react14.default.createElement("table", { className: "w-full caption-bottom text-sm overflow-x-auto bg-white dark:bg-[#18181b] border-collapse" }, /* @__PURE__ */ import_react14.default.createElement("thead", { className: "border-b border-[#e5e5e5] dark:bg-[#18181b]" }, /* @__PURE__ */ import_react14.default.createElement(
|
|
968
978
|
"tr",
|
|
969
979
|
{
|
|
970
980
|
className: "transition-colors text-[#737373] hover:bg-muted/50 \r\n data-[state=selected]:bg-muted"
|
|
@@ -990,6 +1000,147 @@ var CustomTable = ({
|
|
|
990
1000
|
})
|
|
991
1001
|
)), /* @__PURE__ */ import_react14.default.createElement("tbody", null, children))));
|
|
992
1002
|
};
|
|
1003
|
+
|
|
1004
|
+
// src/Pagination/Pagination.jsx
|
|
1005
|
+
var import_react15 = __toESM(require("react"));
|
|
1006
|
+
var import_lucide_react7 = require("lucide-react");
|
|
1007
|
+
var Pagination = ({
|
|
1008
|
+
data = [],
|
|
1009
|
+
children,
|
|
1010
|
+
component: Component,
|
|
1011
|
+
itemsPerPage = 10,
|
|
1012
|
+
itemsPerPageOptions = [5, 10, 20, 50, 100],
|
|
1013
|
+
// Controlled props (optional)
|
|
1014
|
+
currentPage: controlledCurrentPage,
|
|
1015
|
+
onPageChange: controlledOnPageChange,
|
|
1016
|
+
onItemsPerPageChange: controlledOnItemsPerPageChange,
|
|
1017
|
+
// Legacy props for backward compatibility
|
|
1018
|
+
totalPages,
|
|
1019
|
+
totalItems: legacyTotalItems,
|
|
1020
|
+
onPageChange: legacyOnPageChange,
|
|
1021
|
+
onItemsPerPageChange: legacyOnItemsPerPageChange
|
|
1022
|
+
}) => {
|
|
1023
|
+
const [internalCurrentPage, setInternalCurrentPage] = (0, import_react15.useState)(1);
|
|
1024
|
+
const [internalItemsPerPage, setInternalItemsPerPage] = (0, import_react15.useState)(itemsPerPage);
|
|
1025
|
+
const isControlled = controlledCurrentPage !== void 0;
|
|
1026
|
+
const isItemsPerPageControlled = controlledOnItemsPerPageChange !== void 0;
|
|
1027
|
+
const currentPage = isControlled ? controlledCurrentPage : internalCurrentPage;
|
|
1028
|
+
const activeItemsPerPage = isItemsPerPageControlled ? itemsPerPage : internalItemsPerPage;
|
|
1029
|
+
const totalItems = legacyTotalItems !== void 0 ? legacyTotalItems : data.length;
|
|
1030
|
+
const calculatedTotalPages = (0, import_react15.useMemo)(() => {
|
|
1031
|
+
if (totalItems > 0 && activeItemsPerPage > 0) {
|
|
1032
|
+
return Math.ceil(totalItems / activeItemsPerPage);
|
|
1033
|
+
}
|
|
1034
|
+
return 1;
|
|
1035
|
+
}, [totalItems, activeItemsPerPage]);
|
|
1036
|
+
const paginatedData = (0, import_react15.useMemo)(() => {
|
|
1037
|
+
if (!data || data.length === 0) return [];
|
|
1038
|
+
const startIndex = (currentPage - 1) * activeItemsPerPage;
|
|
1039
|
+
const endIndex = startIndex + activeItemsPerPage;
|
|
1040
|
+
return data.slice(startIndex, endIndex);
|
|
1041
|
+
}, [data, currentPage, activeItemsPerPage]);
|
|
1042
|
+
(0, import_react15.useEffect)(() => {
|
|
1043
|
+
if (!isControlled && currentPage > calculatedTotalPages && calculatedTotalPages > 0) {
|
|
1044
|
+
setInternalCurrentPage(1);
|
|
1045
|
+
}
|
|
1046
|
+
}, [calculatedTotalPages, isControlled, currentPage]);
|
|
1047
|
+
const getPageNumbers = () => {
|
|
1048
|
+
const pages = [];
|
|
1049
|
+
const maxVisible = 5;
|
|
1050
|
+
let startPage = Math.max(1, currentPage - Math.floor(maxVisible / 2));
|
|
1051
|
+
let endPage = Math.min(calculatedTotalPages, startPage + maxVisible - 1);
|
|
1052
|
+
if (endPage - startPage < maxVisible - 1) {
|
|
1053
|
+
startPage = Math.max(1, endPage - maxVisible + 1);
|
|
1054
|
+
}
|
|
1055
|
+
for (let i = startPage; i <= endPage; i++) {
|
|
1056
|
+
pages.push(i);
|
|
1057
|
+
}
|
|
1058
|
+
return pages;
|
|
1059
|
+
};
|
|
1060
|
+
const handlePageChange = (page) => {
|
|
1061
|
+
if (page >= 1 && page <= calculatedTotalPages) {
|
|
1062
|
+
if (isControlled && controlledOnPageChange) {
|
|
1063
|
+
controlledOnPageChange(page);
|
|
1064
|
+
} else if (legacyOnPageChange) {
|
|
1065
|
+
legacyOnPageChange(page);
|
|
1066
|
+
} else {
|
|
1067
|
+
setInternalCurrentPage(page);
|
|
1068
|
+
}
|
|
1069
|
+
}
|
|
1070
|
+
};
|
|
1071
|
+
const handleItemsPerPageChange = (value) => {
|
|
1072
|
+
const newItemsPerPage = Number(value);
|
|
1073
|
+
if (isControlled && controlledOnItemsPerPageChange) {
|
|
1074
|
+
controlledOnItemsPerPageChange(newItemsPerPage);
|
|
1075
|
+
if (controlledOnPageChange) {
|
|
1076
|
+
controlledOnPageChange(1);
|
|
1077
|
+
}
|
|
1078
|
+
} else if (legacyOnItemsPerPageChange) {
|
|
1079
|
+
legacyOnItemsPerPageChange(newItemsPerPage);
|
|
1080
|
+
if (legacyOnPageChange) {
|
|
1081
|
+
legacyOnPageChange(1);
|
|
1082
|
+
}
|
|
1083
|
+
} else {
|
|
1084
|
+
setInternalItemsPerPage(newItemsPerPage);
|
|
1085
|
+
setInternalCurrentPage(1);
|
|
1086
|
+
}
|
|
1087
|
+
};
|
|
1088
|
+
const startItem = totalItems !== void 0 ? (currentPage - 1) * activeItemsPerPage + 1 : null;
|
|
1089
|
+
const endItem = totalItems !== void 0 ? Math.min(currentPage * activeItemsPerPage, totalItems) : null;
|
|
1090
|
+
const renderContent = () => {
|
|
1091
|
+
if (Component) {
|
|
1092
|
+
return paginatedData.map((item) => {
|
|
1093
|
+
return /* @__PURE__ */ import_react15.default.createElement(Component, { key: item.id, data: item });
|
|
1094
|
+
});
|
|
1095
|
+
}
|
|
1096
|
+
return null;
|
|
1097
|
+
};
|
|
1098
|
+
return /* @__PURE__ */ import_react15.default.createElement(import_react15.default.Fragment, null, /* @__PURE__ */ import_react15.default.createElement(import_react15.default.Fragment, null, renderContent()), /* @__PURE__ */ import_react15.default.createElement("div", { className: "flex flex-col sm:flex-row justify-between items-center gap-4 px-4 py-3 border-t border-[#e5e5e5] dark:border-[#303036] bg-white dark:bg-[#18181b] z-10" }, totalItems !== void 0 && /* @__PURE__ */ import_react15.default.createElement("div", { className: "text-sm text-[#737373] dark:text-white" }, "Showing ", startItem, " to ", endItem, " of ", totalItems, " entries"), /* @__PURE__ */ import_react15.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react15.default.createElement(
|
|
1099
|
+
"button",
|
|
1100
|
+
{
|
|
1101
|
+
onClick: () => handlePageChange(1),
|
|
1102
|
+
disabled: currentPage === 1,
|
|
1103
|
+
className: `flex items-center justify-center w-9 h-9 rounded-md border border-[#e5e5e5] dark:border-[#303036] text-sm transition-colors ${currentPage === 1 ? "bg-gray-100 text-gray-400 cursor-not-allowed dark:bg-[#27272a] dark:text-gray-600" : "bg-white text-black hover:bg-gray-50 cursor-pointer dark:bg-[#18181b] dark:text-white dark:hover:bg-[#27272a]"}`,
|
|
1104
|
+
title: "First page"
|
|
1105
|
+
},
|
|
1106
|
+
/* @__PURE__ */ import_react15.default.createElement(import_lucide_react7.ChevronsLeft, { size: 16 })
|
|
1107
|
+
), /* @__PURE__ */ import_react15.default.createElement(
|
|
1108
|
+
"button",
|
|
1109
|
+
{
|
|
1110
|
+
onClick: () => handlePageChange(currentPage - 1),
|
|
1111
|
+
disabled: currentPage === 1,
|
|
1112
|
+
className: `flex items-center justify-center w-9 h-9 rounded-md border border-[#e5e5e5] dark:border-[#303036] text-sm transition-colors ${currentPage === 1 ? "bg-gray-100 text-gray-400 cursor-not-allowed dark:bg-[#27272a] dark:text-gray-600" : "bg-white text-black hover:bg-gray-50 cursor-pointer dark:bg-[#18181b] dark:text-white dark:hover:bg-[#27272a]"}`,
|
|
1113
|
+
title: "Previous page"
|
|
1114
|
+
},
|
|
1115
|
+
/* @__PURE__ */ import_react15.default.createElement(import_lucide_react7.ChevronLeft, { size: 16 })
|
|
1116
|
+
), getPageNumbers().map((pageNum) => /* @__PURE__ */ import_react15.default.createElement(
|
|
1117
|
+
"button",
|
|
1118
|
+
{
|
|
1119
|
+
key: pageNum,
|
|
1120
|
+
onClick: () => handlePageChange(pageNum),
|
|
1121
|
+
className: `flex items-center justify-center min-w-9 h-9 px-3 rounded-md border border-[#e5e5e5] dark:border-[#303036] text-sm transition-colors ${currentPage === pageNum ? "bg-primary text-white border-primary dark:bg-primary" : "bg-white text-black hover:bg-gray-50 dark:bg-[#18181b] dark:text-white dark:hover:bg-[#27272a]"}`
|
|
1122
|
+
},
|
|
1123
|
+
pageNum
|
|
1124
|
+
)), /* @__PURE__ */ import_react15.default.createElement(
|
|
1125
|
+
"button",
|
|
1126
|
+
{
|
|
1127
|
+
onClick: () => handlePageChange(currentPage + 1),
|
|
1128
|
+
disabled: currentPage === calculatedTotalPages || calculatedTotalPages === 0,
|
|
1129
|
+
className: `flex items-center justify-center w-9 h-9 rounded-md border border-[#e5e5e5] dark:border-[#303036] text-sm transition-colors ${currentPage === calculatedTotalPages || calculatedTotalPages === 0 ? "bg-gray-100 text-gray-400 cursor-not-allowed dark:bg-[#27272a] dark:text-gray-600" : "bg-white text-black hover:bg-gray-50 cursor-pointer dark:bg-[#18181b] dark:text-white dark:hover:bg-[#27272a]"}`,
|
|
1130
|
+
title: "Next page"
|
|
1131
|
+
},
|
|
1132
|
+
/* @__PURE__ */ import_react15.default.createElement(import_lucide_react7.ChevronRight, { size: 16 })
|
|
1133
|
+
), /* @__PURE__ */ import_react15.default.createElement(
|
|
1134
|
+
"button",
|
|
1135
|
+
{
|
|
1136
|
+
onClick: () => handlePageChange(calculatedTotalPages),
|
|
1137
|
+
disabled: currentPage === calculatedTotalPages || calculatedTotalPages === 0,
|
|
1138
|
+
className: `flex items-center justify-center w-9 h-9 rounded-md border border-[#e5e5e5] dark:border-[#303036] text-sm transition-colors ${currentPage === calculatedTotalPages || calculatedTotalPages === 0 ? "bg-gray-100 text-gray-400 cursor-not-allowed dark:bg-[#27272a] dark:text-gray-600" : "bg-white text-black hover:bg-gray-50 cursor-pointer dark:bg-[#18181b] dark:text-white dark:hover:bg-[#27272a]"}`,
|
|
1139
|
+
title: "Last page"
|
|
1140
|
+
},
|
|
1141
|
+
/* @__PURE__ */ import_react15.default.createElement(import_lucide_react7.ChevronsRight, { size: 16 })
|
|
1142
|
+
))));
|
|
1143
|
+
};
|
|
993
1144
|
// Annotate the CommonJS export names for ESM import in node:
|
|
994
1145
|
0 && (module.exports = {
|
|
995
1146
|
AppSideBar,
|
|
@@ -1004,6 +1155,7 @@ var CustomTable = ({
|
|
|
1004
1155
|
CustomTable,
|
|
1005
1156
|
CustomTextarea,
|
|
1006
1157
|
CustomUpload,
|
|
1158
|
+
Pagination,
|
|
1007
1159
|
ProgressBar,
|
|
1008
1160
|
RightSheet
|
|
1009
1161
|
});
|
package/dist/index.mjs
CHANGED
|
@@ -743,26 +743,35 @@ var AppSideBar = ({
|
|
|
743
743
|
const closeMobileMenu = () => {
|
|
744
744
|
setIsMobileMenuOpen(false);
|
|
745
745
|
};
|
|
746
|
-
return /* @__PURE__ */ React12.createElement(React12.Fragment, null, /* @__PURE__ */ React12.createElement(
|
|
746
|
+
return /* @__PURE__ */ React12.createElement(React12.Fragment, null, /* @__PURE__ */ React12.createElement("div", { className: "fixed top-0 left-0 w-full z-50 md:hidden bg-white dark:bg-[#18181b] border-b border-gray-200 dark:border-[#303036] shadow-lg px-4 py-3 flex items-center justify-between" }, /* @__PURE__ */ React12.createElement(
|
|
747
747
|
"button",
|
|
748
748
|
{
|
|
749
749
|
onClick: toggleMobileMenu,
|
|
750
|
-
className: "
|
|
750
|
+
className: "p-2 rounded-lg hover:bg-gray-50 dark:hover:bg-[#27272a] transition-colors",
|
|
751
751
|
"aria-label": "Toggle menu"
|
|
752
752
|
},
|
|
753
753
|
isMobileMenuOpen ? /* @__PURE__ */ React12.createElement(X, { className: "w-6 h-6 text-gray-700 dark:text-[#f4f4f5cc]" }) : /* @__PURE__ */ React12.createElement(Menu, { className: "w-6 h-6 text-gray-700 dark:text-[#f4f4f5cc]" })
|
|
754
|
-
),
|
|
754
|
+
), /* @__PURE__ */ React12.createElement("div", { className: "flex-1 flex justify-center" }, /* @__PURE__ */ React12.createElement(
|
|
755
|
+
"img",
|
|
756
|
+
{
|
|
757
|
+
src: sideBarLogoLocal,
|
|
758
|
+
alt: "sidebarLogo",
|
|
759
|
+
width: 108,
|
|
760
|
+
height: 40,
|
|
761
|
+
className: "object-contain"
|
|
762
|
+
}
|
|
763
|
+
)), /* @__PURE__ */ React12.createElement("div", { className: "w-10" })), isMobileMenuOpen && /* @__PURE__ */ React12.createElement(
|
|
755
764
|
"div",
|
|
756
765
|
{
|
|
757
|
-
className: "fixed inset-0 bg-black bg-opacity-50 z-40 md:hidden",
|
|
766
|
+
className: "fixed inset-0 bg-black/80 bg-opacity-50 z-40 md:hidden",
|
|
758
767
|
onClick: closeMobileMenu
|
|
759
768
|
}
|
|
760
769
|
), /* @__PURE__ */ React12.createElement(
|
|
761
770
|
"div",
|
|
762
771
|
{
|
|
763
|
-
className: `fixed top-0 left-0 md:relative w-[320px] transition-all ease-in-out delay-100 bg-white dark:bg-[#18181b] border-r border-gray-200 dark:border-[#303036] flex flex-col p-4 h-full max-h-[100vh] z-40 md:max-lg:w-[280px] ${isMobileMenuOpen ? "translate-x-0" : "-translate-x-full md:translate-x-0"}`
|
|
772
|
+
className: `fixed top-0 left-0 md:relative w-[320px] transition-all ease-in-out delay-100 bg-white dark:bg-[#18181b] border-r border-gray-200 dark:border-[#303036] flex flex-col p-4 pt-20 md:pt-4 h-full max-h-[100vh] z-40 md:max-lg:w-[280px] ${isMobileMenuOpen ? "translate-x-0" : "-translate-x-full md:translate-x-0"}`
|
|
764
773
|
},
|
|
765
|
-
/* @__PURE__ */ React12.createElement("div", { className: "p-2 mb-2" }, /* @__PURE__ */ React12.createElement("div", { className: "flex items-center justify-center w-full h-[60px] mb-2" }, /* @__PURE__ */ React12.createElement(
|
|
774
|
+
/* @__PURE__ */ React12.createElement("div", { className: "p-2 mb-2 hidden md:block" }, /* @__PURE__ */ React12.createElement("div", { className: "flex items-center justify-center w-full h-[60px] mb-2" }, /* @__PURE__ */ React12.createElement(
|
|
766
775
|
"img",
|
|
767
776
|
{
|
|
768
777
|
src: sideBarLogoLocal,
|
|
@@ -930,7 +939,7 @@ var CustomTable = ({
|
|
|
930
939
|
children,
|
|
931
940
|
isHideCheckbox = "false"
|
|
932
941
|
}) => {
|
|
933
|
-
return /* @__PURE__ */ React14.createElement("div", { className: "border border-[#e5e5e5] dark:border-[#303036] rounded-lg overflow-x-auto" }, /* @__PURE__ */ React14.createElement("div", { className: "w-full relative overflow-x-auto" }, /* @__PURE__ */ React14.createElement("table", { className: "w-full caption-bottom text-sm overflow-x-auto bg-white dark:bg-[#18181b]
|
|
942
|
+
return /* @__PURE__ */ React14.createElement("div", { className: "border border-[#e5e5e5] dark:border-[#303036] rounded-lg overflow-x-auto flex flex-col" }, /* @__PURE__ */ React14.createElement("div", { className: "w-full relative overflow-x-auto flex-1" }, /* @__PURE__ */ React14.createElement("table", { className: "w-full caption-bottom text-sm overflow-x-auto bg-white dark:bg-[#18181b] border-collapse" }, /* @__PURE__ */ React14.createElement("thead", { className: "border-b border-[#e5e5e5] dark:bg-[#18181b]" }, /* @__PURE__ */ React14.createElement(
|
|
934
943
|
"tr",
|
|
935
944
|
{
|
|
936
945
|
className: "transition-colors text-[#737373] hover:bg-muted/50 \r\n data-[state=selected]:bg-muted"
|
|
@@ -956,6 +965,147 @@ var CustomTable = ({
|
|
|
956
965
|
})
|
|
957
966
|
)), /* @__PURE__ */ React14.createElement("tbody", null, children))));
|
|
958
967
|
};
|
|
968
|
+
|
|
969
|
+
// src/Pagination/Pagination.jsx
|
|
970
|
+
import React15, { useMemo, useState as useState5, useEffect as useEffect3 } from "react";
|
|
971
|
+
import { ChevronLeft, ChevronRight, ChevronsLeft, ChevronsRight } from "lucide-react";
|
|
972
|
+
var Pagination = ({
|
|
973
|
+
data = [],
|
|
974
|
+
children,
|
|
975
|
+
component: Component,
|
|
976
|
+
itemsPerPage = 10,
|
|
977
|
+
itemsPerPageOptions = [5, 10, 20, 50, 100],
|
|
978
|
+
// Controlled props (optional)
|
|
979
|
+
currentPage: controlledCurrentPage,
|
|
980
|
+
onPageChange: controlledOnPageChange,
|
|
981
|
+
onItemsPerPageChange: controlledOnItemsPerPageChange,
|
|
982
|
+
// Legacy props for backward compatibility
|
|
983
|
+
totalPages,
|
|
984
|
+
totalItems: legacyTotalItems,
|
|
985
|
+
onPageChange: legacyOnPageChange,
|
|
986
|
+
onItemsPerPageChange: legacyOnItemsPerPageChange
|
|
987
|
+
}) => {
|
|
988
|
+
const [internalCurrentPage, setInternalCurrentPage] = useState5(1);
|
|
989
|
+
const [internalItemsPerPage, setInternalItemsPerPage] = useState5(itemsPerPage);
|
|
990
|
+
const isControlled = controlledCurrentPage !== void 0;
|
|
991
|
+
const isItemsPerPageControlled = controlledOnItemsPerPageChange !== void 0;
|
|
992
|
+
const currentPage = isControlled ? controlledCurrentPage : internalCurrentPage;
|
|
993
|
+
const activeItemsPerPage = isItemsPerPageControlled ? itemsPerPage : internalItemsPerPage;
|
|
994
|
+
const totalItems = legacyTotalItems !== void 0 ? legacyTotalItems : data.length;
|
|
995
|
+
const calculatedTotalPages = useMemo(() => {
|
|
996
|
+
if (totalItems > 0 && activeItemsPerPage > 0) {
|
|
997
|
+
return Math.ceil(totalItems / activeItemsPerPage);
|
|
998
|
+
}
|
|
999
|
+
return 1;
|
|
1000
|
+
}, [totalItems, activeItemsPerPage]);
|
|
1001
|
+
const paginatedData = useMemo(() => {
|
|
1002
|
+
if (!data || data.length === 0) return [];
|
|
1003
|
+
const startIndex = (currentPage - 1) * activeItemsPerPage;
|
|
1004
|
+
const endIndex = startIndex + activeItemsPerPage;
|
|
1005
|
+
return data.slice(startIndex, endIndex);
|
|
1006
|
+
}, [data, currentPage, activeItemsPerPage]);
|
|
1007
|
+
useEffect3(() => {
|
|
1008
|
+
if (!isControlled && currentPage > calculatedTotalPages && calculatedTotalPages > 0) {
|
|
1009
|
+
setInternalCurrentPage(1);
|
|
1010
|
+
}
|
|
1011
|
+
}, [calculatedTotalPages, isControlled, currentPage]);
|
|
1012
|
+
const getPageNumbers = () => {
|
|
1013
|
+
const pages = [];
|
|
1014
|
+
const maxVisible = 5;
|
|
1015
|
+
let startPage = Math.max(1, currentPage - Math.floor(maxVisible / 2));
|
|
1016
|
+
let endPage = Math.min(calculatedTotalPages, startPage + maxVisible - 1);
|
|
1017
|
+
if (endPage - startPage < maxVisible - 1) {
|
|
1018
|
+
startPage = Math.max(1, endPage - maxVisible + 1);
|
|
1019
|
+
}
|
|
1020
|
+
for (let i = startPage; i <= endPage; i++) {
|
|
1021
|
+
pages.push(i);
|
|
1022
|
+
}
|
|
1023
|
+
return pages;
|
|
1024
|
+
};
|
|
1025
|
+
const handlePageChange = (page) => {
|
|
1026
|
+
if (page >= 1 && page <= calculatedTotalPages) {
|
|
1027
|
+
if (isControlled && controlledOnPageChange) {
|
|
1028
|
+
controlledOnPageChange(page);
|
|
1029
|
+
} else if (legacyOnPageChange) {
|
|
1030
|
+
legacyOnPageChange(page);
|
|
1031
|
+
} else {
|
|
1032
|
+
setInternalCurrentPage(page);
|
|
1033
|
+
}
|
|
1034
|
+
}
|
|
1035
|
+
};
|
|
1036
|
+
const handleItemsPerPageChange = (value) => {
|
|
1037
|
+
const newItemsPerPage = Number(value);
|
|
1038
|
+
if (isControlled && controlledOnItemsPerPageChange) {
|
|
1039
|
+
controlledOnItemsPerPageChange(newItemsPerPage);
|
|
1040
|
+
if (controlledOnPageChange) {
|
|
1041
|
+
controlledOnPageChange(1);
|
|
1042
|
+
}
|
|
1043
|
+
} else if (legacyOnItemsPerPageChange) {
|
|
1044
|
+
legacyOnItemsPerPageChange(newItemsPerPage);
|
|
1045
|
+
if (legacyOnPageChange) {
|
|
1046
|
+
legacyOnPageChange(1);
|
|
1047
|
+
}
|
|
1048
|
+
} else {
|
|
1049
|
+
setInternalItemsPerPage(newItemsPerPage);
|
|
1050
|
+
setInternalCurrentPage(1);
|
|
1051
|
+
}
|
|
1052
|
+
};
|
|
1053
|
+
const startItem = totalItems !== void 0 ? (currentPage - 1) * activeItemsPerPage + 1 : null;
|
|
1054
|
+
const endItem = totalItems !== void 0 ? Math.min(currentPage * activeItemsPerPage, totalItems) : null;
|
|
1055
|
+
const renderContent = () => {
|
|
1056
|
+
if (Component) {
|
|
1057
|
+
return paginatedData.map((item) => {
|
|
1058
|
+
return /* @__PURE__ */ React15.createElement(Component, { key: item.id, data: item });
|
|
1059
|
+
});
|
|
1060
|
+
}
|
|
1061
|
+
return null;
|
|
1062
|
+
};
|
|
1063
|
+
return /* @__PURE__ */ React15.createElement(React15.Fragment, null, /* @__PURE__ */ React15.createElement(React15.Fragment, null, renderContent()), /* @__PURE__ */ React15.createElement("div", { className: "flex flex-col sm:flex-row justify-between items-center gap-4 px-4 py-3 border-t border-[#e5e5e5] dark:border-[#303036] bg-white dark:bg-[#18181b] z-10" }, totalItems !== void 0 && /* @__PURE__ */ React15.createElement("div", { className: "text-sm text-[#737373] dark:text-white" }, "Showing ", startItem, " to ", endItem, " of ", totalItems, " entries"), /* @__PURE__ */ React15.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React15.createElement(
|
|
1064
|
+
"button",
|
|
1065
|
+
{
|
|
1066
|
+
onClick: () => handlePageChange(1),
|
|
1067
|
+
disabled: currentPage === 1,
|
|
1068
|
+
className: `flex items-center justify-center w-9 h-9 rounded-md border border-[#e5e5e5] dark:border-[#303036] text-sm transition-colors ${currentPage === 1 ? "bg-gray-100 text-gray-400 cursor-not-allowed dark:bg-[#27272a] dark:text-gray-600" : "bg-white text-black hover:bg-gray-50 cursor-pointer dark:bg-[#18181b] dark:text-white dark:hover:bg-[#27272a]"}`,
|
|
1069
|
+
title: "First page"
|
|
1070
|
+
},
|
|
1071
|
+
/* @__PURE__ */ React15.createElement(ChevronsLeft, { size: 16 })
|
|
1072
|
+
), /* @__PURE__ */ React15.createElement(
|
|
1073
|
+
"button",
|
|
1074
|
+
{
|
|
1075
|
+
onClick: () => handlePageChange(currentPage - 1),
|
|
1076
|
+
disabled: currentPage === 1,
|
|
1077
|
+
className: `flex items-center justify-center w-9 h-9 rounded-md border border-[#e5e5e5] dark:border-[#303036] text-sm transition-colors ${currentPage === 1 ? "bg-gray-100 text-gray-400 cursor-not-allowed dark:bg-[#27272a] dark:text-gray-600" : "bg-white text-black hover:bg-gray-50 cursor-pointer dark:bg-[#18181b] dark:text-white dark:hover:bg-[#27272a]"}`,
|
|
1078
|
+
title: "Previous page"
|
|
1079
|
+
},
|
|
1080
|
+
/* @__PURE__ */ React15.createElement(ChevronLeft, { size: 16 })
|
|
1081
|
+
), getPageNumbers().map((pageNum) => /* @__PURE__ */ React15.createElement(
|
|
1082
|
+
"button",
|
|
1083
|
+
{
|
|
1084
|
+
key: pageNum,
|
|
1085
|
+
onClick: () => handlePageChange(pageNum),
|
|
1086
|
+
className: `flex items-center justify-center min-w-9 h-9 px-3 rounded-md border border-[#e5e5e5] dark:border-[#303036] text-sm transition-colors ${currentPage === pageNum ? "bg-primary text-white border-primary dark:bg-primary" : "bg-white text-black hover:bg-gray-50 dark:bg-[#18181b] dark:text-white dark:hover:bg-[#27272a]"}`
|
|
1087
|
+
},
|
|
1088
|
+
pageNum
|
|
1089
|
+
)), /* @__PURE__ */ React15.createElement(
|
|
1090
|
+
"button",
|
|
1091
|
+
{
|
|
1092
|
+
onClick: () => handlePageChange(currentPage + 1),
|
|
1093
|
+
disabled: currentPage === calculatedTotalPages || calculatedTotalPages === 0,
|
|
1094
|
+
className: `flex items-center justify-center w-9 h-9 rounded-md border border-[#e5e5e5] dark:border-[#303036] text-sm transition-colors ${currentPage === calculatedTotalPages || calculatedTotalPages === 0 ? "bg-gray-100 text-gray-400 cursor-not-allowed dark:bg-[#27272a] dark:text-gray-600" : "bg-white text-black hover:bg-gray-50 cursor-pointer dark:bg-[#18181b] dark:text-white dark:hover:bg-[#27272a]"}`,
|
|
1095
|
+
title: "Next page"
|
|
1096
|
+
},
|
|
1097
|
+
/* @__PURE__ */ React15.createElement(ChevronRight, { size: 16 })
|
|
1098
|
+
), /* @__PURE__ */ React15.createElement(
|
|
1099
|
+
"button",
|
|
1100
|
+
{
|
|
1101
|
+
onClick: () => handlePageChange(calculatedTotalPages),
|
|
1102
|
+
disabled: currentPage === calculatedTotalPages || calculatedTotalPages === 0,
|
|
1103
|
+
className: `flex items-center justify-center w-9 h-9 rounded-md border border-[#e5e5e5] dark:border-[#303036] text-sm transition-colors ${currentPage === calculatedTotalPages || calculatedTotalPages === 0 ? "bg-gray-100 text-gray-400 cursor-not-allowed dark:bg-[#27272a] dark:text-gray-600" : "bg-white text-black hover:bg-gray-50 cursor-pointer dark:bg-[#18181b] dark:text-white dark:hover:bg-[#27272a]"}`,
|
|
1104
|
+
title: "Last page"
|
|
1105
|
+
},
|
|
1106
|
+
/* @__PURE__ */ React15.createElement(ChevronsRight, { size: 16 })
|
|
1107
|
+
))));
|
|
1108
|
+
};
|
|
959
1109
|
export {
|
|
960
1110
|
AppSideBar,
|
|
961
1111
|
Chip,
|
|
@@ -969,6 +1119,7 @@ export {
|
|
|
969
1119
|
CustomTable,
|
|
970
1120
|
CustomTextarea,
|
|
971
1121
|
CustomUpload,
|
|
1122
|
+
Pagination,
|
|
972
1123
|
ProgressBar,
|
|
973
1124
|
RightSheet
|
|
974
1125
|
};
|