@eztrak/shared 0.15.1 → 0.16.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.
@@ -1080,8 +1080,473 @@ function Modal({
1080
1080
  return createPortal(modalContent, modalRoot);
1081
1081
  }
1082
1082
 
1083
+ // src/components/button/Button.tsx
1084
+ import { forwardRef } from "react";
1085
+ import { jsx as jsx8 } from "react/jsx-runtime";
1086
+ var BASE_STYLES2 = "flex gap-1 items-center font-medium text-sm px-5 py-3 rounded-md transition-colors duration-200 disabled:opacity-50 disabled:cursor-not-allowed";
1087
+ var VARIANTS2 = {
1088
+ primary: "bg-white text-secondary border-secondary hover:bg-lightGray hover:text-black",
1089
+ "primary-outline": "bg-white text-primary-150 border-primary-150 hover:bg-primary-100 hover:text-white font-bold",
1090
+ "primary-fill": "bg-primary-150 text-white border-primary hover:bg-primary/90",
1091
+ secondary: "bg-primary-150 text-white border-primary hover:bg-primary/90",
1092
+ danger: "bg-red-600 text-white border-red-600 hover:bg-red-700",
1093
+ outline: "bg-white text-primary border-primary hover:bg-primary/10",
1094
+ ghost: "bg-transparent text-secondary border-transparent hover:bg-primary/10 p-2",
1095
+ inline: "bg-transparent text-gray-500 border-none hover:text-gray-600 underline shadow-none p-0 m-0"
1096
+ };
1097
+ var SIZES = {
1098
+ sm: "px-3 py-2 text-xs",
1099
+ md: "px-5 py-3 text-sm",
1100
+ lg: "px-6 py-4 text-base"
1101
+ };
1102
+ var Button = forwardRef(
1103
+ ({
1104
+ children,
1105
+ className = "",
1106
+ type = "button",
1107
+ onClick,
1108
+ disabled = false,
1109
+ variant = "primary",
1110
+ size = "md",
1111
+ ...props
1112
+ }, ref) => {
1113
+ const variantStyles = VARIANTS2[variant] || VARIANTS2.primary;
1114
+ const sizeStyles = SIZES[size];
1115
+ return /* @__PURE__ */ jsx8(
1116
+ "button",
1117
+ {
1118
+ ref,
1119
+ type,
1120
+ className: cn(
1121
+ BASE_STYLES2,
1122
+ variantStyles,
1123
+ size !== "md" && sizeStyles,
1124
+ className
1125
+ ),
1126
+ onClick,
1127
+ disabled,
1128
+ ...props,
1129
+ children
1130
+ }
1131
+ );
1132
+ }
1133
+ );
1134
+ Button.displayName = "Button";
1135
+
1136
+ // src/components/card/Card.tsx
1137
+ import { jsx as jsx9, jsxs as jsxs6 } from "react/jsx-runtime";
1138
+ function Card({
1139
+ title,
1140
+ content,
1141
+ icon,
1142
+ onClick,
1143
+ containerClassName = "shadow p-6",
1144
+ iconClassName = "",
1145
+ titleClassName = "",
1146
+ contentClassName = "",
1147
+ cardBodyClassName = ""
1148
+ }) {
1149
+ return /* @__PURE__ */ jsx9(
1150
+ "div",
1151
+ {
1152
+ className: cn(
1153
+ "transform transition duration-300 cursor-pointer select-none",
1154
+ containerClassName
1155
+ ),
1156
+ onClick,
1157
+ children: /* @__PURE__ */ jsxs6("div", { className: cn("flex space-x-4", cardBodyClassName), children: [
1158
+ /* @__PURE__ */ jsx9("span", { className: cn("text-primary text-3xl", iconClassName), children: icon }),
1159
+ /* @__PURE__ */ jsxs6("div", { children: [
1160
+ /* @__PURE__ */ jsx9("h3", { className: cn("font-semibold text-lg text-primary", titleClassName), children: title }),
1161
+ content != null && /* @__PURE__ */ jsx9("p", { className: cn("text-sm text-secondary", contentClassName), children: content })
1162
+ ] })
1163
+ ] })
1164
+ }
1165
+ );
1166
+ }
1167
+
1168
+ // src/components/header/Header.tsx
1169
+ import { jsx as jsx10, jsxs as jsxs7 } from "react/jsx-runtime";
1170
+ function Header({
1171
+ title = "Header",
1172
+ className = "p-2 gap-2 flex-col",
1173
+ containerClass = "",
1174
+ breadcrumbs = "",
1175
+ titleStyle = "text-4xl h-fit font-bold",
1176
+ breadcrumbsStyle = "text-sm",
1177
+ children
1178
+ }) {
1179
+ return /* @__PURE__ */ jsxs7("div", { className: `flex ${className}`, children: [
1180
+ /* @__PURE__ */ jsxs7("div", { className: "title-wrapper", children: [
1181
+ /* @__PURE__ */ jsx10("h1", { className: titleStyle, children: title }),
1182
+ breadcrumbs && /* @__PURE__ */ jsx10("div", { className: `breadcrumbs-wraper ${breadcrumbsStyle}`, children: breadcrumbs })
1183
+ ] }),
1184
+ /* @__PURE__ */ jsx10("div", { className: `flex flex-row justify-between items-center ${containerClass}`, children })
1185
+ ] });
1186
+ }
1187
+
1188
+ // src/components/breadcrumbs/Breadcrumbs.tsx
1189
+ import { Fragment } from "react";
1190
+ import { Link, useLocation } from "react-router-dom";
1191
+ import { Fragment as Fragment2, jsx as jsx11, jsxs as jsxs8 } from "react/jsx-runtime";
1192
+ var INACTIVE_LINK_CLASS = "inline-flex items-center justify-center text-[#5D6D7F] bg-white px-4 py-2 rounded-lg transition-colors duration-300 hover:text-[#516378]";
1193
+ function asTitleMap(customTitles) {
1194
+ if (Object.prototype.toString.call(customTitles) !== "[object Object]") {
1195
+ return {};
1196
+ }
1197
+ return customTitles;
1198
+ }
1199
+ function findRoute(pathname, routes, parentPath = "") {
1200
+ for (const route of routes) {
1201
+ const fullPath = `${parentPath}/${route.path}`.replace(/\/+/g, "/");
1202
+ if (fullPath === pathname) {
1203
+ return route;
1204
+ }
1205
+ if (route.children) {
1206
+ const childRoute = findRoute(pathname, route.children, fullPath);
1207
+ if (childRoute) {
1208
+ return childRoute;
1209
+ }
1210
+ }
1211
+ }
1212
+ return null;
1213
+ }
1214
+ function getLastParam(str) {
1215
+ return str.endsWith("/") ? str.slice(0, -1).split("/").pop() : str.split("/").pop();
1216
+ }
1217
+ function Breadcrumbs({
1218
+ routes = [],
1219
+ containerClassName,
1220
+ linkClassName = "",
1221
+ separatorClassName = "",
1222
+ separator = "/",
1223
+ activeClassName = "font-bold whitespace-pre",
1224
+ customTitles = {},
1225
+ customIcons = {},
1226
+ prefix,
1227
+ suffix,
1228
+ nonClickablePaths = []
1229
+ }) {
1230
+ const location = useLocation();
1231
+ const pathnames = location.pathname.split("/").filter((segment) => segment);
1232
+ const titles = asTitleMap(customTitles);
1233
+ const inactiveLinkClassName = cn(INACTIVE_LINK_CLASS, linkClassName);
1234
+ const getTitle = (pathname) => {
1235
+ const match = findRoute(pathname, routes);
1236
+ if (match && match.title) {
1237
+ return match.title;
1238
+ }
1239
+ const titleKeys = Object.keys(titles);
1240
+ const paramMatch = pathname.split("/").find((segment) => titleKeys.includes(segment)) || "";
1241
+ if (paramMatch && titles[paramMatch]) {
1242
+ return titles[paramMatch];
1243
+ }
1244
+ const lastParamPath = getLastParam(pathname);
1245
+ if (lastParamPath) {
1246
+ return lastParamPath;
1247
+ }
1248
+ return pathname;
1249
+ };
1250
+ const getIcon = (pathname) => {
1251
+ const iconKeys = Object.keys(customIcons);
1252
+ const matchedSegment = pathname.split("/").find((segment) => iconKeys.includes(segment));
1253
+ if (matchedSegment && customIcons[matchedSegment]) {
1254
+ return customIcons[matchedSegment];
1255
+ }
1256
+ return null;
1257
+ };
1258
+ return /* @__PURE__ */ jsxs8(
1259
+ "div",
1260
+ {
1261
+ className: cn(
1262
+ "flex flex-row gap-2 items-center text-sm text-secondary",
1263
+ containerClassName
1264
+ ),
1265
+ children: [
1266
+ prefix && /* @__PURE__ */ jsx11("div", { className: "breadcrumb-prefix", children: prefix }),
1267
+ /* @__PURE__ */ jsxs8(Link, { to: "/", className: inactiveLinkClassName, children: [
1268
+ customIcons.home && /* @__PURE__ */ jsx11("span", { className: "mr-1", children: customIcons.home }),
1269
+ titles.home || "Home"
1270
+ ] }),
1271
+ pathnames.map((segment, index) => {
1272
+ const to = `/${pathnames.slice(0, index + 1).join("/")}`;
1273
+ const isLast = index === pathnames.length - 1;
1274
+ const title = getTitle(to);
1275
+ const icon = getIcon(to);
1276
+ const isNonClickable = nonClickablePaths.some(
1277
+ (token) => to.includes(token) || segment === token
1278
+ );
1279
+ const crumb = /* @__PURE__ */ jsxs8(Fragment2, { children: [
1280
+ icon && /* @__PURE__ */ jsx11("span", { className: "mr-1", children: icon }),
1281
+ title
1282
+ ] });
1283
+ return /* @__PURE__ */ jsxs8(Fragment, { children: [
1284
+ /* @__PURE__ */ jsx11("span", { className: separatorClassName, children: separator }),
1285
+ isLast || isNonClickable ? /* @__PURE__ */ jsx11("span", { className: isLast ? activeClassName : linkClassName, children: crumb }) : /* @__PURE__ */ jsx11(Link, { to, className: inactiveLinkClassName, children: crumb })
1286
+ ] }, to);
1287
+ }),
1288
+ suffix && /* @__PURE__ */ jsx11("div", { className: "breadcrumb-suffix", children: suffix })
1289
+ ]
1290
+ }
1291
+ );
1292
+ }
1293
+
1294
+ // src/components/sidebar/Sidebar.tsx
1295
+ import { useEffect as useEffect5, useState as useState3 } from "react";
1296
+ import { Link as Link2, useLocation as useLocation2 } from "react-router-dom";
1297
+
1298
+ // src/components/tooltip/ToolTip.tsx
1299
+ import { useId as useId2 } from "react";
1300
+ import { Tooltip } from "react-tooltip";
1301
+ import { Fragment as Fragment3, jsx as jsx12, jsxs as jsxs9 } from "react/jsx-runtime";
1302
+ var defaultTooltipStyle = {
1303
+ color: "#fff",
1304
+ borderRadius: "5px",
1305
+ zIndex: 999,
1306
+ textAlign: "justify",
1307
+ maxWidth: "300px",
1308
+ whiteSpace: "pre-wrap",
1309
+ wordWrap: "break-word",
1310
+ overflowWrap: "break-word"
1311
+ };
1312
+ function ToolTip({
1313
+ text = "tool tip",
1314
+ placement = "top",
1315
+ delayShow,
1316
+ delayHide,
1317
+ className,
1318
+ tooltipClassName,
1319
+ tooltipStyle,
1320
+ wrapperTabIndex,
1321
+ disabled = false,
1322
+ children
1323
+ }) {
1324
+ const generatedId = useId2();
1325
+ const tooltipId = `eztrak-tooltip-${generatedId.replace(/:/g, "")}`;
1326
+ const tooltipText = String(text ?? "");
1327
+ if (disabled || !tooltipText) {
1328
+ return /* @__PURE__ */ jsx12("span", { className, children });
1329
+ }
1330
+ return /* @__PURE__ */ jsxs9(Fragment3, { children: [
1331
+ /* @__PURE__ */ jsx12(
1332
+ "span",
1333
+ {
1334
+ className,
1335
+ "data-tooltip-id": tooltipId,
1336
+ "data-tooltip-content": tooltipText,
1337
+ tabIndex: wrapperTabIndex,
1338
+ children
1339
+ }
1340
+ ),
1341
+ /* @__PURE__ */ jsx12(
1342
+ Tooltip,
1343
+ {
1344
+ id: tooltipId,
1345
+ place: placement,
1346
+ positionStrategy: "fixed",
1347
+ delayShow,
1348
+ delayHide,
1349
+ className: tooltipClassName,
1350
+ style: { ...defaultTooltipStyle, ...tooltipStyle }
1351
+ }
1352
+ )
1353
+ ] });
1354
+ }
1355
+
1356
+ // src/components/sidebar/Sidebar.tsx
1357
+ import { jsx as jsx13, jsxs as jsxs10 } from "react/jsx-runtime";
1358
+ function Sidebar({
1359
+ className,
1360
+ sideCollapseWidth = "w-20",
1361
+ sidebarWidth = "w-48",
1362
+ header,
1363
+ children,
1364
+ footer,
1365
+ items = [],
1366
+ logoUrl = "",
1367
+ logoAltText = "Logo",
1368
+ collapseButtonText = "\u2B05\uFE0F Collapse",
1369
+ expandButtonText = "\u27A1\uFE0F",
1370
+ location: _location,
1371
+ classNames = {},
1372
+ onCollapseChange,
1373
+ isCollapsed = false,
1374
+ itemDropdownIcon = /* @__PURE__ */ jsx13("span", { children: "\u25BC" }),
1375
+ ...rest
1376
+ }) {
1377
+ const location = useLocation2();
1378
+ const [collapsed, setCollapsed] = useState3(isCollapsed);
1379
+ const [, setActiveLink] = useState3(location.pathname);
1380
+ const [subItemsCollapsed, setSubItemsCollapsed] = useState3({});
1381
+ useEffect5(() => {
1382
+ if (onCollapseChange) {
1383
+ onCollapseChange(collapsed);
1384
+ }
1385
+ }, [collapsed, onCollapseChange]);
1386
+ useEffect5(() => {
1387
+ setActiveLink(location.pathname);
1388
+ }, [location]);
1389
+ const toggleGroup = (group) => {
1390
+ setSubItemsCollapsed((prevState) => ({
1391
+ ...prevState,
1392
+ [group]: !prevState[group]
1393
+ }));
1394
+ };
1395
+ const isActive = (link) => {
1396
+ return location.pathname.startsWith(link);
1397
+ };
1398
+ return /* @__PURE__ */ jsxs10(
1399
+ "div",
1400
+ {
1401
+ className: `flex flex-col h-screen overflow-hidden ${collapsed ? `${sideCollapseWidth} justify-center items-center collapsed` : `${sidebarWidth}`} transition-all duration-100 ${className ?? ""}`,
1402
+ ...rest,
1403
+ children: [
1404
+ logoUrl && /* @__PURE__ */ jsx13(
1405
+ "div",
1406
+ {
1407
+ className: cn(
1408
+ "flex items-center justify-center h-16 border-b border-gray-300",
1409
+ classNames.logoSection
1410
+ ),
1411
+ children: /* @__PURE__ */ jsx13("img", { src: logoUrl, alt: logoAltText, className: "h-10" })
1412
+ }
1413
+ ),
1414
+ header && /* @__PURE__ */ jsx13("div", { className: "flex items-center justify-between p-4 border-b border-gray-300", children: header }),
1415
+ /* @__PURE__ */ jsx13("nav", { className: cn("flex-grow", classNames.navSection), children: items.map((item, index) => {
1416
+ if (item.subItems) {
1417
+ return /* @__PURE__ */ jsxs10(
1418
+ "div",
1419
+ {
1420
+ className: `my-2 ${item?.subItems && "has-sub-items"}`,
1421
+ children: [
1422
+ /* @__PURE__ */ jsxs10(
1423
+ "div",
1424
+ {
1425
+ onClick: () => toggleGroup(item.name),
1426
+ "data-sidebar-item": item.name,
1427
+ "data-tooltip-id": item.name,
1428
+ className: `flex cursor-pointer dropdown-title-wrapper ${classNames?.navItem ?? ""}`,
1429
+ children: [
1430
+ /* @__PURE__ */ jsx13(
1431
+ ToolTip,
1432
+ {
1433
+ text: item.tooltip || item.name,
1434
+ placement: item.tooltipPlacement || "top",
1435
+ children: /* @__PURE__ */ jsxs10("div", { className: "flex items-center space-x-2", children: [
1436
+ /* @__PURE__ */ jsx13("span", { className: classNames?.navItemText, children: item.icon }),
1437
+ !collapsed && /* @__PURE__ */ jsx13("span", { className: classNames?.navItemText, children: item.name })
1438
+ ] })
1439
+ }
1440
+ ),
1441
+ !collapsed && /* @__PURE__ */ jsx13(
1442
+ "span",
1443
+ {
1444
+ className: `transform transition-transform ${subItemsCollapsed[item.name] ? "rotate-180" : "rotate-0"}`,
1445
+ children: itemDropdownIcon
1446
+ }
1447
+ )
1448
+ ]
1449
+ }
1450
+ ),
1451
+ subItemsCollapsed[item.name] && /* @__PURE__ */ jsx13("div", { className: cn("collapse-btn-wrapper", classNames.subItem), children: item.subItems.map((subItem, subIndex) => {
1452
+ if (subItem.component) {
1453
+ const SubItemComponent = subItem.component;
1454
+ return /* @__PURE__ */ jsx13(SubItemComponent, {}, `${index}-${subIndex}`);
1455
+ }
1456
+ return /* @__PURE__ */ jsx13(
1457
+ "div",
1458
+ {
1459
+ className: "w-full",
1460
+ "data-sidebar-item": subItem.name,
1461
+ "data-tooltip-id": subItem.name,
1462
+ children: /* @__PURE__ */ jsx13(
1463
+ ToolTip,
1464
+ {
1465
+ text: item.tooltip || item.name,
1466
+ placement: item.tooltipPlacement || "top",
1467
+ className: "block w-full",
1468
+ children: /* @__PURE__ */ jsxs10(
1469
+ Link2,
1470
+ {
1471
+ to: subItem.link || "#",
1472
+ className: `flex ${classNames?.navItem ?? ""} ${isActive(subItem?.link ?? "") ? "active" : ""} ${item?.itemClassName}`,
1473
+ onClick: () => subItem.link && setActiveLink(subItem.link || ""),
1474
+ title: subItem.tooltip || subItem.name,
1475
+ children: [
1476
+ /* @__PURE__ */ jsx13(
1477
+ "span",
1478
+ {
1479
+ className: classNames.navItemText ?? "text-orange-600",
1480
+ children: subItem.icon
1481
+ }
1482
+ ),
1483
+ !collapsed && /* @__PURE__ */ jsx13("span", { className: classNames.navItemText, children: subItem.name })
1484
+ ]
1485
+ }
1486
+ )
1487
+ }
1488
+ )
1489
+ },
1490
+ `${index}-${subIndex}`
1491
+ );
1492
+ }) })
1493
+ ]
1494
+ },
1495
+ index
1496
+ );
1497
+ }
1498
+ if (item.component) {
1499
+ const ItemComponent = item.component;
1500
+ return /* @__PURE__ */ jsx13(ItemComponent, {}, index);
1501
+ }
1502
+ return /* @__PURE__ */ jsx13(
1503
+ "div",
1504
+ {
1505
+ className: "w-full",
1506
+ "data-sidebar-item": item.name,
1507
+ "data-tooltip-id": item.name,
1508
+ children: /* @__PURE__ */ jsx13(
1509
+ ToolTip,
1510
+ {
1511
+ text: item.tooltip || item.name,
1512
+ placement: item.tooltipPlacement || "top",
1513
+ className: "block w-full",
1514
+ children: /* @__PURE__ */ jsxs10(
1515
+ Link2,
1516
+ {
1517
+ to: item.link || "#",
1518
+ className: `flex ${classNames?.navItem ?? ""} ${isActive(item.link || "") ? "active" : ""} ${item?.itemClassName}`,
1519
+ onClick: () => setActiveLink(item.link || ""),
1520
+ title: item.tooltip || item.name,
1521
+ children: [
1522
+ /* @__PURE__ */ jsx13("span", { className: classNames.navItemText ?? "text-orange-600", children: item.icon }),
1523
+ !collapsed && /* @__PURE__ */ jsx13("span", { className: classNames.navItemText, children: item.name })
1524
+ ]
1525
+ }
1526
+ )
1527
+ }
1528
+ )
1529
+ },
1530
+ index
1531
+ );
1532
+ }) }),
1533
+ children,
1534
+ /* @__PURE__ */ jsx13(
1535
+ "button",
1536
+ {
1537
+ onClick: () => setCollapsed(!collapsed),
1538
+ className: cn("", classNames.collapseButton) ?? "p-4 border-t border-gray-300",
1539
+ children: collapsed ? expandButtonText : collapseButtonText
1540
+ }
1541
+ ),
1542
+ footer && /* @__PURE__ */ jsx13("div", { className: classNames?.footer ?? "p-4 border-t border-gray-300", children: footer })
1543
+ ]
1544
+ }
1545
+ );
1546
+ }
1547
+
1083
1548
  // src/components/skeleton/CardSkeleton.tsx
1084
- import { Fragment, jsx as jsx8, jsxs as jsxs6 } from "react/jsx-runtime";
1549
+ import { Fragment as Fragment4, jsx as jsx14, jsxs as jsxs11 } from "react/jsx-runtime";
1085
1550
  var DEFAULT_LINE_WIDTHS = ["w-32", "w-48"];
1086
1551
  function shouldShowAvatar(variant, showAvatar) {
1087
1552
  return showAvatar ?? variant === "profile";
@@ -1090,7 +1555,7 @@ function shouldShowImage(variant, showImage) {
1090
1555
  return showImage ?? variant === "image";
1091
1556
  }
1092
1557
  function AvatarSkeleton({ className }) {
1093
- return /* @__PURE__ */ jsx8(
1558
+ return /* @__PURE__ */ jsx14(
1094
1559
  "svg",
1095
1560
  {
1096
1561
  className: cn("w-10 h-10 text-gray-200 dark:text-gray-700", className),
@@ -1098,7 +1563,7 @@ function AvatarSkeleton({ className }) {
1098
1563
  xmlns: "http://www.w3.org/2000/svg",
1099
1564
  fill: "currentColor",
1100
1565
  viewBox: "0 0 20 20",
1101
- children: /* @__PURE__ */ jsx8("path", { d: "M10 0a10 10 0 1 0 10 10A10.011 10.011 0 0 0 10 0Zm0 5a3 3 0 1 1 0 6 3 3 0 0 1 0-6Zm0 13a8.949 8.949 0 0 1-4.951-1.488A3.987 3.987 0 0 1 9 13h2a3.987 3.987 0 0 1 3.951 3.512A8.949 8.949 0 0 1 10 18Z" })
1566
+ children: /* @__PURE__ */ jsx14("path", { d: "M10 0a10 10 0 1 0 10 10A10.011 10.011 0 0 0 10 0Zm0 5a3 3 0 1 1 0 6 3 3 0 0 1 0-6Zm0 13a8.949 8.949 0 0 1-4.951-1.488A3.987 3.987 0 0 1 9 13h2a3.987 3.987 0 0 1 3.951 3.512A8.949 8.949 0 0 1 10 18Z" })
1102
1567
  }
1103
1568
  );
1104
1569
  }
@@ -1107,7 +1572,7 @@ function SkeletonBlock({
1107
1572
  className,
1108
1573
  isFirst
1109
1574
  }) {
1110
- return /* @__PURE__ */ jsx8(
1575
+ return /* @__PURE__ */ jsx14(
1111
1576
  "div",
1112
1577
  {
1113
1578
  className: cn(
@@ -1139,14 +1604,14 @@ function CardSkeleton({
1139
1604
  const skeletons = Array.from({ length: Math.max(1, count) }, (_, index) => {
1140
1605
  const renderAvatar = shouldShowAvatar(variant, showAvatar);
1141
1606
  const renderImage = shouldShowImage(variant, showImage);
1142
- return /* @__PURE__ */ jsxs6(
1607
+ return /* @__PURE__ */ jsxs11(
1143
1608
  "div",
1144
1609
  {
1145
1610
  className: cn("animate-pulse md:p-6 dark:border-gray-700", className),
1146
1611
  style: { animationDuration, ...style },
1147
1612
  ...props,
1148
1613
  children: [
1149
- renderImage ? /* @__PURE__ */ jsx8(
1614
+ renderImage ? /* @__PURE__ */ jsx14(
1150
1615
  "div",
1151
1616
  {
1152
1617
  className: cn(
@@ -1155,9 +1620,9 @@ function CardSkeleton({
1155
1620
  )
1156
1621
  }
1157
1622
  ) : null,
1158
- /* @__PURE__ */ jsxs6("div", { className: cn("flex items-center mt-4 gap-4", contentClassName), children: [
1159
- renderAvatar ? /* @__PURE__ */ jsx8(AvatarSkeleton, { className: avatarClassName }) : null,
1160
- /* @__PURE__ */ jsx8("div", { children: Array.from({ length: Math.max(1, lines) }, (_2, lineIndex) => /* @__PURE__ */ jsx8(
1623
+ /* @__PURE__ */ jsxs11("div", { className: cn("flex items-center mt-4 gap-4", contentClassName), children: [
1624
+ renderAvatar ? /* @__PURE__ */ jsx14(AvatarSkeleton, { className: avatarClassName }) : null,
1625
+ /* @__PURE__ */ jsx14("div", { children: Array.from({ length: Math.max(1, lines) }, (_2, lineIndex) => /* @__PURE__ */ jsx14(
1161
1626
  SkeletonBlock,
1162
1627
  {
1163
1628
  widthClass: lineWidths[lineIndex] ?? lineWidths[lineWidths.length - 1] ?? DEFAULT_LINE_WIDTHS[1],
@@ -1167,75 +1632,17 @@ function CardSkeleton({
1167
1632
  lineIndex
1168
1633
  )) })
1169
1634
  ] }),
1170
- /* @__PURE__ */ jsx8("span", { className: "sr-only", children: srLabel })
1635
+ /* @__PURE__ */ jsx14("span", { className: "sr-only", children: srLabel })
1171
1636
  ]
1172
1637
  },
1173
1638
  index
1174
1639
  );
1175
1640
  });
1176
- return /* @__PURE__ */ jsx8(Fragment, { children: skeletons });
1177
- }
1178
-
1179
- // src/components/tooltip/ToolTip.tsx
1180
- import { useId as useId2 } from "react";
1181
- import { Tooltip } from "react-tooltip";
1182
- import { Fragment as Fragment2, jsx as jsx9, jsxs as jsxs7 } from "react/jsx-runtime";
1183
- var defaultTooltipStyle = {
1184
- color: "#fff",
1185
- borderRadius: "5px",
1186
- zIndex: 999,
1187
- textAlign: "justify",
1188
- maxWidth: "300px",
1189
- whiteSpace: "pre-wrap",
1190
- wordWrap: "break-word",
1191
- overflowWrap: "break-word"
1192
- };
1193
- function ToolTip({
1194
- text = "tool tip",
1195
- placement = "top",
1196
- delayShow,
1197
- delayHide,
1198
- className,
1199
- tooltipClassName,
1200
- tooltipStyle,
1201
- wrapperTabIndex,
1202
- disabled = false,
1203
- children
1204
- }) {
1205
- const generatedId = useId2();
1206
- const tooltipId = `eztrak-tooltip-${generatedId.replace(/:/g, "")}`;
1207
- const tooltipText = String(text ?? "");
1208
- if (disabled || !tooltipText) {
1209
- return /* @__PURE__ */ jsx9("span", { className, children });
1210
- }
1211
- return /* @__PURE__ */ jsxs7(Fragment2, { children: [
1212
- /* @__PURE__ */ jsx9(
1213
- "span",
1214
- {
1215
- className,
1216
- "data-tooltip-id": tooltipId,
1217
- "data-tooltip-content": tooltipText,
1218
- tabIndex: wrapperTabIndex,
1219
- children
1220
- }
1221
- ),
1222
- /* @__PURE__ */ jsx9(
1223
- Tooltip,
1224
- {
1225
- id: tooltipId,
1226
- place: placement,
1227
- positionStrategy: "fixed",
1228
- delayShow,
1229
- delayHide,
1230
- className: tooltipClassName,
1231
- style: { ...defaultTooltipStyle, ...tooltipStyle }
1232
- }
1233
- )
1234
- ] });
1641
+ return /* @__PURE__ */ jsx14(Fragment4, { children: skeletons });
1235
1642
  }
1236
1643
 
1237
1644
  // src/components/tooltip/TooltipText.tsx
1238
- import { jsx as jsx10 } from "react/jsx-runtime";
1645
+ import { jsx as jsx15 } from "react/jsx-runtime";
1239
1646
  function TooltipText({
1240
1647
  text = "",
1241
1648
  maxLength = 20,
@@ -1255,7 +1662,7 @@ function TooltipText({
1255
1662
  const displayText = truncateText(fullText, maxLength);
1256
1663
  const isTruncated = displayText !== fullText;
1257
1664
  const tooltipDisabled = !showTooltip || !hasValue || tooltipWhenTruncatedOnly && !isTruncated;
1258
- return /* @__PURE__ */ jsx10(
1665
+ return /* @__PURE__ */ jsx15(
1259
1666
  ToolTip,
1260
1667
  {
1261
1668
  text: fullText,
@@ -1267,24 +1674,24 @@ function TooltipText({
1267
1674
  tooltipStyle,
1268
1675
  wrapperTabIndex: tooltipDisabled ? void 0 : 0,
1269
1676
  disabled: tooltipDisabled,
1270
- children: /* @__PURE__ */ jsx10("span", { className: cn("inline-block max-w-full align-bottom", textClassName), children: displayText })
1677
+ children: /* @__PURE__ */ jsx15("span", { className: cn("inline-block max-w-full align-bottom", textClassName), children: displayText })
1271
1678
  }
1272
1679
  );
1273
1680
  }
1274
1681
 
1275
1682
  // src/components/cell-editor/CustomCellEditor.tsx
1276
1683
  import {
1277
- forwardRef,
1278
- useEffect as useEffect5,
1684
+ forwardRef as forwardRef2,
1685
+ useEffect as useEffect6,
1279
1686
  useImperativeHandle,
1280
1687
  useMemo,
1281
1688
  useRef as useRef5,
1282
- useState as useState3
1689
+ useState as useState4
1283
1690
  } from "react";
1284
1691
  import toast from "react-hot-toast";
1285
- import { jsx as jsx11, jsxs as jsxs8 } from "react/jsx-runtime";
1692
+ import { jsx as jsx16, jsxs as jsxs12 } from "react/jsx-runtime";
1286
1693
  function ButtonSpinner() {
1287
- return /* @__PURE__ */ jsxs8(
1694
+ return /* @__PURE__ */ jsxs12(
1288
1695
  "svg",
1289
1696
  {
1290
1697
  className: "animate-spin",
@@ -1294,7 +1701,7 @@ function ButtonSpinner() {
1294
1701
  fill: "none",
1295
1702
  "aria-hidden": true,
1296
1703
  children: [
1297
- /* @__PURE__ */ jsx11(
1704
+ /* @__PURE__ */ jsx16(
1298
1705
  "circle",
1299
1706
  {
1300
1707
  cx: "12",
@@ -1305,7 +1712,7 @@ function ButtonSpinner() {
1305
1712
  strokeOpacity: "0.25"
1306
1713
  }
1307
1714
  ),
1308
- /* @__PURE__ */ jsx11(
1715
+ /* @__PURE__ */ jsx16(
1309
1716
  "path",
1310
1717
  {
1311
1718
  d: "M12 2a10 10 0 0 1 10 10",
@@ -1327,7 +1734,7 @@ function normalizeInitialValue(initialValue, inputType) {
1327
1734
  }
1328
1735
  return initialValue;
1329
1736
  }
1330
- var CustomCellEditor = forwardRef(
1737
+ var CustomCellEditor = forwardRef2(
1331
1738
  ({
1332
1739
  value: initialValue,
1333
1740
  name,
@@ -1352,8 +1759,8 @@ var CustomCellEditor = forwardRef(
1352
1759
  cancelButtonClassName
1353
1760
  }, ref) => {
1354
1761
  const normalizedInitial = normalizeInitialValue(initialValue, inputType);
1355
- const [value, setValue] = useState3(normalizedInitial);
1356
- const [isLoading, setIsLoading] = useState3(false);
1762
+ const [value, setValue] = useState4(normalizedInitial);
1763
+ const [isLoading, setIsLoading] = useState4(false);
1357
1764
  const inputRef = useRef5(null);
1358
1765
  const selectRef = useRef5(null);
1359
1766
  const normalizedOptions = useMemo(() => {
@@ -1372,7 +1779,7 @@ var CustomCellEditor = forwardRef(
1372
1779
  isCancelAfterEnd: () => false,
1373
1780
  isPopup: () => true
1374
1781
  }));
1375
- useEffect5(() => {
1782
+ useEffect6(() => {
1376
1783
  if (isDropdown) {
1377
1784
  selectRef.current?.focus();
1378
1785
  return;
@@ -1441,7 +1848,7 @@ var CustomCellEditor = forwardRef(
1441
1848
  const defaultInputClass = "w-48 px-2 py-1 text-sm border border-gray-200 rounded-md bg-white focus:outline-none focus:ring-1 focus:ring-blue-400";
1442
1849
  const defaultSaveBtnClass = "px-3 py-1 text-sm font-medium text-white bg-green-500 rounded-md hover:bg-green-600 disabled:opacity-50 whitespace-nowrap shrink-0";
1443
1850
  const defaultCancelBtnClass = "px-3 py-1 text-sm font-medium text-white bg-red-500 rounded-md hover:bg-red-600 disabled:opacity-50 whitespace-nowrap shrink-0";
1444
- return /* @__PURE__ */ jsxs8(
1851
+ return /* @__PURE__ */ jsxs12(
1445
1852
  "div",
1446
1853
  {
1447
1854
  className: cn(
@@ -1450,7 +1857,7 @@ var CustomCellEditor = forwardRef(
1450
1857
  ),
1451
1858
  style: containerStyle,
1452
1859
  children: [
1453
- isDropdown ? /* @__PURE__ */ jsxs8(
1860
+ isDropdown ? /* @__PURE__ */ jsxs12(
1454
1861
  "select",
1455
1862
  {
1456
1863
  ref: selectRef,
@@ -1460,11 +1867,11 @@ var CustomCellEditor = forwardRef(
1460
1867
  className: inputClassName ?? defaultInputClass,
1461
1868
  disabled: isLoading,
1462
1869
  children: [
1463
- /* @__PURE__ */ jsx11("option", { value: "", disabled: true, children: "Select option..." }),
1464
- normalizedOptions.map((opt) => /* @__PURE__ */ jsx11("option", { value: opt.value, children: opt.label }, opt.value))
1870
+ /* @__PURE__ */ jsx16("option", { value: "", disabled: true, children: "Select option..." }),
1871
+ normalizedOptions.map((opt) => /* @__PURE__ */ jsx16("option", { value: opt.value, children: opt.label }, opt.value))
1465
1872
  ]
1466
1873
  }
1467
- ) : /* @__PURE__ */ jsx11(
1874
+ ) : /* @__PURE__ */ jsx16(
1468
1875
  "input",
1469
1876
  {
1470
1877
  ref: inputRef,
@@ -1477,7 +1884,7 @@ var CustomCellEditor = forwardRef(
1477
1884
  disabled: isLoading
1478
1885
  }
1479
1886
  ),
1480
- /* @__PURE__ */ jsx11(
1887
+ /* @__PURE__ */ jsx16(
1481
1888
  "button",
1482
1889
  {
1483
1890
  type: "button",
@@ -1486,10 +1893,10 @@ var CustomCellEditor = forwardRef(
1486
1893
  className: saveButtonClassName ?? (saveButtonStyle ? void 0 : defaultSaveBtnClass),
1487
1894
  style: saveButtonStyle,
1488
1895
  title: "Save (Enter)",
1489
- children: isLoading ? loadingIndicator ?? /* @__PURE__ */ jsx11(ButtonSpinner, {}) : saveButtonContent ?? "Save"
1896
+ children: isLoading ? loadingIndicator ?? /* @__PURE__ */ jsx16(ButtonSpinner, {}) : saveButtonContent ?? "Save"
1490
1897
  }
1491
1898
  ),
1492
- /* @__PURE__ */ jsx11(
1899
+ /* @__PURE__ */ jsx16(
1493
1900
  "button",
1494
1901
  {
1495
1902
  type: "button",
@@ -1509,10 +1916,10 @@ var CustomCellEditor = forwardRef(
1509
1916
  CustomCellEditor.displayName = "CustomCellEditor";
1510
1917
 
1511
1918
  // src/components/popup-cell-renderer/PopupCellRenderer.tsx
1512
- import { useState as useState4 } from "react";
1919
+ import { useRef as useRef6, useState as useState5 } from "react";
1513
1920
  import Tippy from "@tippyjs/react";
1514
1921
  import { BiDotsVerticalRounded } from "react-icons/bi";
1515
- import { jsx as jsx12, jsxs as jsxs9 } from "react/jsx-runtime";
1922
+ import { jsx as jsx17, jsxs as jsxs13 } from "react/jsx-runtime";
1516
1923
  function PopupCellRenderer({
1517
1924
  dropDownContent,
1518
1925
  actionIcon: ActionIcon = BiDotsVerticalRounded,
@@ -1523,23 +1930,34 @@ function PopupCellRenderer({
1523
1930
  onAction,
1524
1931
  placement = "bottom-end",
1525
1932
  tippyProps,
1526
- ariaLabel = "Row actions"
1933
+ ariaLabel = "Row actions",
1934
+ openOnHover = false
1527
1935
  }) {
1528
- const [visible, setVisible] = useState4(false);
1936
+ const [visible, setVisible] = useState5(false);
1937
+ const instanceRef = useRef6(null);
1529
1938
  const show = () => setVisible(true);
1530
- const hide = () => setVisible(false);
1939
+ const hide = () => {
1940
+ setVisible(false);
1941
+ instanceRef.current?.hide();
1942
+ };
1531
1943
  const rowData = params?.data;
1532
1944
  const handleAction = (actionType, actionRowData) => {
1533
1945
  onAction?.(actionType, actionRowData ?? rowData, hide);
1534
1946
  hide();
1535
1947
  };
1536
1948
  const content = typeof dropDownContent === "function" ? dropDownContent(handleAction) : dropDownContent;
1537
- return /* @__PURE__ */ jsx12("div", { className: "flex h-full", children: /* @__PURE__ */ jsx12(
1949
+ const hoverOrClickProps = openOnHover ? {
1950
+ trigger: "mouseenter",
1951
+ delay: [0, 150],
1952
+ hideOnClick: false
1953
+ } : {
1954
+ visible,
1955
+ onClickOutside: hide
1956
+ };
1957
+ return /* @__PURE__ */ jsx17("div", { className: "flex h-full", children: /* @__PURE__ */ jsx17(
1538
1958
  Tippy,
1539
1959
  {
1540
1960
  content,
1541
- visible,
1542
- onClickOutside: hide,
1543
1961
  allowHTML: true,
1544
1962
  arrow: false,
1545
1963
  appendTo: () => document.body,
@@ -1549,12 +1967,16 @@ function PopupCellRenderer({
1549
1967
  theme: "light",
1550
1968
  maxWidth: "none",
1551
1969
  offset: [0, 5],
1970
+ onCreate: (instance) => {
1971
+ instanceRef.current = instance;
1972
+ },
1973
+ ...hoverOrClickProps,
1552
1974
  ...tippyProps,
1553
- children: /* @__PURE__ */ jsxs9(
1975
+ children: /* @__PURE__ */ jsxs13(
1554
1976
  "button",
1555
1977
  {
1556
1978
  type: "button",
1557
- onClick: visible ? hide : show,
1979
+ onClick: openOnHover ? void 0 : visible ? hide : show,
1558
1980
  className: cn(
1559
1981
  "flex items-center justify-center gap-2 rounded-full text-gray-500 hover:text-gray-800",
1560
1982
  className
@@ -1562,7 +1984,7 @@ function PopupCellRenderer({
1562
1984
  "aria-label": ariaLabel,
1563
1985
  children: [
1564
1986
  !hideTitle && title,
1565
- /* @__PURE__ */ jsx12(ActionIcon, { "aria-hidden": true })
1987
+ /* @__PURE__ */ jsx17(ActionIcon, { "aria-hidden": true })
1566
1988
  ]
1567
1989
  }
1568
1990
  )
@@ -1599,7 +2021,7 @@ var ROW_ACTION_PRESETS = {
1599
2021
  };
1600
2022
 
1601
2023
  // src/components/row-actions/ActionMenuItem.tsx
1602
- import { jsx as jsx13, jsxs as jsxs10 } from "react/jsx-runtime";
2024
+ import { jsx as jsx18, jsxs as jsxs14 } from "react/jsx-runtime";
1603
2025
  function ActionMenuItem({
1604
2026
  label,
1605
2027
  icon: Icon,
@@ -1620,7 +2042,7 @@ function ActionMenuItem({
1620
2042
  onClick
1621
2043
  }) {
1622
2044
  const tooltipText = tooltip ?? label;
1623
- return /* @__PURE__ */ jsx13(
2045
+ return /* @__PURE__ */ jsx18(
1624
2046
  ToolTip,
1625
2047
  {
1626
2048
  text: tooltipText,
@@ -1631,7 +2053,7 @@ function ActionMenuItem({
1631
2053
  tooltipClassName,
1632
2054
  tooltipStyle: { ...ROW_ACTION_DEFAULT_MENU_TOOLTIP_STYLE, ...tooltipStyle },
1633
2055
  className: showLabel ? "block w-full" : "inline-flex",
1634
- children: /* @__PURE__ */ jsxs10(
2056
+ children: /* @__PURE__ */ jsxs14(
1635
2057
  "button",
1636
2058
  {
1637
2059
  type: "button",
@@ -1651,7 +2073,7 @@ function ActionMenuItem({
1651
2073
  className
1652
2074
  ),
1653
2075
  children: [
1654
- Icon ? /* @__PURE__ */ jsx13(
2076
+ Icon ? /* @__PURE__ */ jsx18(
1655
2077
  Icon,
1656
2078
  {
1657
2079
  className: cn("shrink-0", iconClassName),
@@ -1659,7 +2081,7 @@ function ActionMenuItem({
1659
2081
  size: iconSize
1660
2082
  }
1661
2083
  ) : null,
1662
- showLabel ? /* @__PURE__ */ jsx13("span", { className: labelClassName, children: label }) : null
2084
+ showLabel ? /* @__PURE__ */ jsx18("span", { className: labelClassName, children: label }) : null
1663
2085
  ]
1664
2086
  }
1665
2087
  )
@@ -1717,7 +2139,7 @@ function resolveActions(actions, data, hasPermission, presets) {
1717
2139
  }
1718
2140
 
1719
2141
  // src/components/row-actions/RowActions.tsx
1720
- import { Fragment as Fragment3, jsx as jsx14 } from "react/jsx-runtime";
2142
+ import { Fragment as Fragment5, jsx as jsx19 } from "react/jsx-runtime";
1721
2143
  function runAction(action, data, hide, confirmFn = confirmationAlert) {
1722
2144
  if (!action.onClick) {
1723
2145
  if (action.closeOnClick) hide?.();
@@ -1748,6 +2170,7 @@ function RowActions({
1748
2170
  triggerAriaLabel = "Row actions",
1749
2171
  hasPermission,
1750
2172
  placement = "bottom-end",
2173
+ openOnHover = false,
1751
2174
  tippyProps,
1752
2175
  presets,
1753
2176
  confirmFn = confirmationAlert,
@@ -1770,7 +2193,7 @@ function RowActions({
1770
2193
  };
1771
2194
  const renderDefaultItem = (action, hide, showLabel = true) => {
1772
2195
  if (action.type === "divider") {
1773
- return /* @__PURE__ */ jsx14(
2196
+ return /* @__PURE__ */ jsx19(
1774
2197
  "div",
1775
2198
  {
1776
2199
  role: "separator",
@@ -1780,9 +2203,9 @@ function RowActions({
1780
2203
  );
1781
2204
  }
1782
2205
  if (action.content) {
1783
- return /* @__PURE__ */ jsx14("div", { className: action.className, children: action.content }, action.key);
2206
+ return /* @__PURE__ */ jsx19("div", { className: action.className, children: action.content }, action.key);
1784
2207
  }
1785
- return /* @__PURE__ */ jsx14(
2208
+ return /* @__PURE__ */ jsx19(
1786
2209
  ActionMenuItem,
1787
2210
  {
1788
2211
  label: action.label,
@@ -1809,15 +2232,15 @@ function RowActions({
1809
2232
  const renderItems = (hide, showLabel = true) => resolved.map((action) => {
1810
2233
  const defaultItem = renderDefaultItem(action, hide, showLabel);
1811
2234
  if (!renderItem) return defaultItem;
1812
- return /* @__PURE__ */ jsx14("div", { children: renderItem(action, { data, hide: hide ?? (() => void 0), defaultItem }) }, action.key);
2235
+ return /* @__PURE__ */ jsx19("div", { children: renderItem(action, { data, hide: hide ?? (() => void 0), defaultItem }) }, action.key);
1813
2236
  });
1814
2237
  if (mode === "inline") {
1815
2238
  const inlineItems = renderItems(void 0, false);
1816
- return /* @__PURE__ */ jsx14("div", { className: cn("flex h-full items-center justify-center gap-1", className), children: inlineItems });
2239
+ return /* @__PURE__ */ jsx19("div", { className: cn("flex h-full items-center justify-center gap-1", className), children: inlineItems });
1817
2240
  }
1818
2241
  const triggerTooltipText = triggerTooltip === false ? void 0 : triggerTooltip;
1819
2242
  const buildMenu = (hide) => {
1820
- const defaultMenu = /* @__PURE__ */ jsx14(
2243
+ const defaultMenu = /* @__PURE__ */ jsx19(
1821
2244
  "div",
1822
2245
  {
1823
2246
  className: cn(
@@ -1836,14 +2259,14 @@ function RowActions({
1836
2259
  });
1837
2260
  };
1838
2261
  if (renderTrigger) {
1839
- return /* @__PURE__ */ jsx14(Fragment3, { children: renderTrigger({
2262
+ return /* @__PURE__ */ jsx19(Fragment5, { children: renderTrigger({
1840
2263
  data,
1841
2264
  actions: resolved,
1842
2265
  hide: () => void 0,
1843
2266
  defaultMenu: buildMenu(() => void 0)
1844
2267
  }) });
1845
2268
  }
1846
- return /* @__PURE__ */ jsx14(
2269
+ return /* @__PURE__ */ jsx19(
1847
2270
  ToolTip,
1848
2271
  {
1849
2272
  text: triggerTooltipText,
@@ -1854,7 +2277,7 @@ function RowActions({
1854
2277
  tooltipClassName,
1855
2278
  tooltipStyle,
1856
2279
  className: "flex h-full items-center justify-center",
1857
- children: /* @__PURE__ */ jsx14(
2280
+ children: /* @__PURE__ */ jsx19(
1858
2281
  PopupCellRenderer,
1859
2282
  {
1860
2283
  params: { data },
@@ -1862,6 +2285,7 @@ function RowActions({
1862
2285
  hideTitle: true,
1863
2286
  className,
1864
2287
  placement,
2288
+ openOnHover,
1865
2289
  tippyProps,
1866
2290
  ariaLabel: triggerAriaLabel,
1867
2291
  dropDownContent: (handleAction) => buildMenu(() => handleAction("close"))
@@ -1874,7 +2298,7 @@ function RowActions({
1874
2298
  // src/components/table-error-boundary/TableErrorBoundary.tsx
1875
2299
  import { useMemo as useMemo2 } from "react";
1876
2300
  import { FaArrowsRotate, FaTriangleExclamation } from "react-icons/fa6";
1877
- import { Fragment as Fragment4, jsx as jsx15, jsxs as jsxs11 } from "react/jsx-runtime";
2301
+ import { Fragment as Fragment6, jsx as jsx20, jsxs as jsxs15 } from "react/jsx-runtime";
1878
2302
  var TableErrorBoundary = ({
1879
2303
  isError,
1880
2304
  isLoading = false,
@@ -1891,7 +2315,7 @@ var TableErrorBoundary = ({
1891
2315
  return "Unable to load table data. Please try again.";
1892
2316
  }, [error, errorMessage]);
1893
2317
  if (isLoading && !isError) {
1894
- return /* @__PURE__ */ jsx15(
2318
+ return /* @__PURE__ */ jsx20(
1895
2319
  "div",
1896
2320
  {
1897
2321
  className: cn(
@@ -1902,12 +2326,12 @@ var TableErrorBoundary = ({
1902
2326
  role: "status",
1903
2327
  "aria-live": "polite",
1904
2328
  "aria-busy": "true",
1905
- children: /* @__PURE__ */ jsx15(Loader, { size: "40px" })
2329
+ children: /* @__PURE__ */ jsx20(Loader, { size: "40px" })
1906
2330
  }
1907
2331
  );
1908
2332
  }
1909
2333
  if (isError) {
1910
- return /* @__PURE__ */ jsxs11(
2334
+ return /* @__PURE__ */ jsxs15(
1911
2335
  "div",
1912
2336
  {
1913
2337
  className: cn(
@@ -1918,7 +2342,7 @@ var TableErrorBoundary = ({
1918
2342
  role: "alert",
1919
2343
  "aria-live": "assertive",
1920
2344
  children: [
1921
- /* @__PURE__ */ jsx15(
2345
+ /* @__PURE__ */ jsx20(
1922
2346
  FaTriangleExclamation,
1923
2347
  {
1924
2348
  className: "text-red-500",
@@ -1926,11 +2350,11 @@ var TableErrorBoundary = ({
1926
2350
  "aria-hidden": true
1927
2351
  }
1928
2352
  ),
1929
- /* @__PURE__ */ jsxs11("div", { className: "max-w-md space-y-1", children: [
1930
- /* @__PURE__ */ jsx15("p", { className: "text-base font-semibold text-gray-800", children: "Failed to load data" }),
1931
- /* @__PURE__ */ jsx15("p", { className: "text-sm text-gray-600", children: message })
2353
+ /* @__PURE__ */ jsxs15("div", { className: "max-w-md space-y-1", children: [
2354
+ /* @__PURE__ */ jsx20("p", { className: "text-base font-semibold text-gray-800", children: "Failed to load data" }),
2355
+ /* @__PURE__ */ jsx20("p", { className: "text-sm text-gray-600", children: message })
1932
2356
  ] }),
1933
- refetch && /* @__PURE__ */ jsxs11(
2357
+ refetch && /* @__PURE__ */ jsxs15(
1934
2358
  "button",
1935
2359
  {
1936
2360
  type: "button",
@@ -1938,7 +2362,7 @@ var TableErrorBoundary = ({
1938
2362
  disabled: isLoading,
1939
2363
  className: "inline-flex items-center gap-2 rounded-lg bg-primary-150 px-4 py-2 text-sm font-medium text-white transition-colors hover:opacity-90 disabled:cursor-not-allowed disabled:opacity-60",
1940
2364
  children: [
1941
- /* @__PURE__ */ jsx15(FaArrowsRotate, { className: cn(isLoading && "animate-spin") }),
2365
+ /* @__PURE__ */ jsx20(FaArrowsRotate, { className: cn(isLoading && "animate-spin") }),
1942
2366
  isLoading ? "Retrying..." : "Try again"
1943
2367
  ]
1944
2368
  }
@@ -1947,7 +2371,7 @@ var TableErrorBoundary = ({
1947
2371
  }
1948
2372
  );
1949
2373
  }
1950
- return /* @__PURE__ */ jsx15(Fragment4, { children });
2374
+ return /* @__PURE__ */ jsx20(Fragment6, { children });
1951
2375
  };
1952
2376
 
1953
2377
  export {
@@ -1961,8 +2385,13 @@ export {
1961
2385
  SearchInput,
1962
2386
  Loader,
1963
2387
  Modal,
1964
- CardSkeleton,
2388
+ Button,
2389
+ Card,
2390
+ Header,
2391
+ Breadcrumbs,
1965
2392
  ToolTip,
2393
+ Sidebar,
2394
+ CardSkeleton,
1966
2395
  TooltipText,
1967
2396
  CustomCellEditor,
1968
2397
  PopupCellRenderer,
@@ -1976,4 +2405,4 @@ export {
1976
2405
  RowActions,
1977
2406
  TableErrorBoundary
1978
2407
  };
1979
- //# sourceMappingURL=chunk-HQPQ6TOE.mjs.map
2408
+ //# sourceMappingURL=chunk-PE7NNAX6.mjs.map