@prediktif/ui 0.1.21 → 0.1.23

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.mjs CHANGED
@@ -1472,6 +1472,147 @@ var AppSidebar = memo(function AppSidebar2({
1472
1472
  ] });
1473
1473
  });
1474
1474
 
1475
+ // src/components/composed/columns/avatar-user.tsx
1476
+ import { memo as memo2 } from "react";
1477
+ import { jsx as jsx13, jsxs as jsxs8 } from "react/jsx-runtime";
1478
+ function getInitials(name) {
1479
+ if (name) {
1480
+ return name.split(" ").map((w) => w[0]).join("").slice(0, 2).toUpperCase();
1481
+ }
1482
+ return "U";
1483
+ }
1484
+ var AvatarUser = memo2(function AvatarUser2({
1485
+ name,
1486
+ image
1487
+ }) {
1488
+ return /* @__PURE__ */ jsxs8("div", { className: "flex items-center gap-2", children: [
1489
+ /* @__PURE__ */ jsxs8(Avatar, { size: "sm", children: [
1490
+ /* @__PURE__ */ jsx13(AvatarImage, { src: image != null ? image : void 0, alt: name != null ? name : void 0 }),
1491
+ /* @__PURE__ */ jsx13(AvatarFallback, { children: getInitials(name) })
1492
+ ] }),
1493
+ /* @__PURE__ */ jsx13("p", { className: "text-xs font-medium", children: name })
1494
+ ] });
1495
+ });
1496
+
1497
+ // src/components/composed/columns/email-label.tsx
1498
+ import { memo as memo3 } from "react";
1499
+ import { jsx as jsx14 } from "react/jsx-runtime";
1500
+ var EmailLabel = memo3(function EmailLabel2({ email }) {
1501
+ return /* @__PURE__ */ jsx14("span", { className: "text-xs font-mono", children: email });
1502
+ });
1503
+
1504
+ // src/components/composed/columns/email-verified.tsx
1505
+ import { BadgeCheck } from "lucide-react";
1506
+ import { memo as memo4 } from "react";
1507
+
1508
+ // src/components/ui/badge.tsx
1509
+ import { mergeProps as mergeProps3 } from "@base-ui/react/merge-props";
1510
+ import { useRender as useRender3 } from "@base-ui/react/use-render";
1511
+ import { cva as cva3 } from "class-variance-authority";
1512
+ import { cn as cn12 } from "cn";
1513
+ var badgeVariants = cva3(
1514
+ "group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-full border border-transparent px-2 py-0.5 text-[0.625rem] font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-2.5!",
1515
+ {
1516
+ variants: {
1517
+ variant: {
1518
+ default: "bg-primary text-primary-foreground [a]:hover:bg-primary/80",
1519
+ secondary: "bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80",
1520
+ destructive: "bg-destructive/10 text-destructive focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:focus-visible:ring-destructive/40 [a]:hover:bg-destructive/20",
1521
+ outline: "border-border bg-input/20 text-foreground dark:bg-input/30 [a]:hover:bg-muted [a]:hover:text-muted-foreground",
1522
+ ghost: "hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50",
1523
+ link: "text-primary underline-offset-4 hover:underline"
1524
+ }
1525
+ },
1526
+ defaultVariants: {
1527
+ variant: "default"
1528
+ }
1529
+ }
1530
+ );
1531
+ function Badge(_a) {
1532
+ var _b = _a, {
1533
+ className,
1534
+ variant = "default",
1535
+ render
1536
+ } = _b, props = __objRest(_b, [
1537
+ "className",
1538
+ "variant",
1539
+ "render"
1540
+ ]);
1541
+ return useRender3({
1542
+ defaultTagName: "span",
1543
+ props: mergeProps3(
1544
+ {
1545
+ className: cn12(badgeVariants({ variant }), className)
1546
+ },
1547
+ props
1548
+ ),
1549
+ render,
1550
+ state: {
1551
+ slot: "badge",
1552
+ variant
1553
+ }
1554
+ });
1555
+ }
1556
+
1557
+ // src/components/composed/columns/email-verified.tsx
1558
+ import { jsx as jsx15, jsxs as jsxs9 } from "react/jsx-runtime";
1559
+ var EmailVerified = memo4(function EmailVerified2({
1560
+ verified
1561
+ }) {
1562
+ return verified ? /* @__PURE__ */ jsxs9(Badge, { variant: "default", children: [
1563
+ /* @__PURE__ */ jsx15(BadgeCheck, { "data-icon": "inline-start" }),
1564
+ "Verified"
1565
+ ] }) : /* @__PURE__ */ jsxs9(Badge, { variant: "destructive", children: [
1566
+ /* @__PURE__ */ jsx15(BadgeCheck, { "data-icon": "inline-start" }),
1567
+ "Unverified"
1568
+ ] });
1569
+ });
1570
+
1571
+ // src/components/composed/columns/joined-label.tsx
1572
+ import { memo as memo5 } from "react";
1573
+ import { jsx as jsx16 } from "react/jsx-runtime";
1574
+ var JoinedLabel = memo5(function JoinedLabel2({
1575
+ joined,
1576
+ locale = "id-ID"
1577
+ }) {
1578
+ if (!joined) return null;
1579
+ const date = typeof joined === "string" ? new Date(joined) : joined;
1580
+ if (Number.isNaN(date.getTime())) return null;
1581
+ return /* @__PURE__ */ jsx16("span", { className: "text-xs font-mono", children: new Intl.DateTimeFormat(locale, {
1582
+ day: "numeric",
1583
+ month: "long",
1584
+ year: "numeric"
1585
+ }).format(date) });
1586
+ });
1587
+
1588
+ // src/components/composed/columns/user-role.tsx
1589
+ import { UserIcon, UserStarIcon } from "lucide-react";
1590
+ import { memo as memo6 } from "react";
1591
+ import { jsx as jsx17, jsxs as jsxs10 } from "react/jsx-runtime";
1592
+ var UserRole = memo6(function UserRole2({ role }) {
1593
+ const isAdmin = role === "admin";
1594
+ return /* @__PURE__ */ jsxs10(Badge, { variant: "outline", className: "capitalize", children: [
1595
+ isAdmin ? /* @__PURE__ */ jsx17(UserStarIcon, { "data-icon": "inline-start" }) : /* @__PURE__ */ jsx17(UserIcon, { "data-icon": "inline-start" }),
1596
+ role
1597
+ ] });
1598
+ });
1599
+
1600
+ // src/components/composed/columns/user-status.tsx
1601
+ import { BadgeCheck as BadgeCheck2 } from "lucide-react";
1602
+ import { memo as memo7 } from "react";
1603
+ import { jsx as jsx18, jsxs as jsxs11 } from "react/jsx-runtime";
1604
+ var UserStatus = memo7(function UserStatus2({
1605
+ status
1606
+ }) {
1607
+ return status ? /* @__PURE__ */ jsxs11(Badge, { variant: "destructive", children: [
1608
+ /* @__PURE__ */ jsx18(BadgeCheck2, { "data-icon": "inline-start" }),
1609
+ "Inactive"
1610
+ ] }) : /* @__PURE__ */ jsxs11(Badge, { variant: "default", children: [
1611
+ /* @__PURE__ */ jsx18(BadgeCheck2, { "data-icon": "inline-start" }),
1612
+ "Active"
1613
+ ] });
1614
+ });
1615
+
1475
1616
  // src/components/composed/data-table/data-table.tsx
1476
1617
  import {
1477
1618
  flexRender as flexRender3,
@@ -1482,19 +1623,19 @@ import { useRouter as useRouter2 } from "next/navigation";
1482
1623
  import { useMemo as useMemo3, useState as useState5 } from "react";
1483
1624
 
1484
1625
  // src/components/composed/state-empty.tsx
1485
- import { memo as memo2 } from "react";
1626
+ import { memo as memo8 } from "react";
1486
1627
 
1487
1628
  // src/components/ui/empty.tsx
1488
- import { cva as cva3 } from "class-variance-authority";
1489
- import { cn as cn12 } from "cn";
1490
- import { jsx as jsx13 } from "react/jsx-runtime";
1629
+ import { cva as cva4 } from "class-variance-authority";
1630
+ import { cn as cn13 } from "cn";
1631
+ import { jsx as jsx19 } from "react/jsx-runtime";
1491
1632
  function Empty(_a) {
1492
1633
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
1493
- return /* @__PURE__ */ jsx13(
1634
+ return /* @__PURE__ */ jsx19(
1494
1635
  "div",
1495
1636
  __spreadValues({
1496
1637
  "data-slot": "empty",
1497
- className: cn12(
1638
+ className: cn13(
1498
1639
  "flex w-full min-w-0 flex-1 flex-col items-center justify-center gap-4 rounded-xl border-dashed p-6 text-center text-balance",
1499
1640
  className
1500
1641
  )
@@ -1503,15 +1644,15 @@ function Empty(_a) {
1503
1644
  }
1504
1645
  function EmptyHeader(_a) {
1505
1646
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
1506
- return /* @__PURE__ */ jsx13(
1647
+ return /* @__PURE__ */ jsx19(
1507
1648
  "div",
1508
1649
  __spreadValues({
1509
1650
  "data-slot": "empty-header",
1510
- className: cn12("flex max-w-sm flex-col items-center gap-1", className)
1651
+ className: cn13("flex max-w-sm flex-col items-center gap-1", className)
1511
1652
  }, props)
1512
1653
  );
1513
1654
  }
1514
- var emptyMediaVariants = cva3(
1655
+ var emptyMediaVariants = cva4(
1515
1656
  "mb-2 flex shrink-0 items-center justify-center [&_svg]:pointer-events-none [&_svg]:shrink-0",
1516
1657
  {
1517
1658
  variants: {
@@ -1533,22 +1674,22 @@ function EmptyMedia(_a) {
1533
1674
  "className",
1534
1675
  "variant"
1535
1676
  ]);
1536
- return /* @__PURE__ */ jsx13(
1677
+ return /* @__PURE__ */ jsx19(
1537
1678
  "div",
1538
1679
  __spreadValues({
1539
1680
  "data-slot": "empty-icon",
1540
1681
  "data-variant": variant,
1541
- className: cn12(emptyMediaVariants({ variant, className }))
1682
+ className: cn13(emptyMediaVariants({ variant, className }))
1542
1683
  }, props)
1543
1684
  );
1544
1685
  }
1545
1686
  function EmptyTitle(_a) {
1546
1687
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
1547
- return /* @__PURE__ */ jsx13(
1688
+ return /* @__PURE__ */ jsx19(
1548
1689
  "div",
1549
1690
  __spreadValues({
1550
1691
  "data-slot": "empty-title",
1551
- className: cn12(
1692
+ className: cn13(
1552
1693
  "font-heading text-sm font-medium tracking-tight",
1553
1694
  className
1554
1695
  )
@@ -1557,11 +1698,11 @@ function EmptyTitle(_a) {
1557
1698
  }
1558
1699
  function EmptyDescription(_a) {
1559
1700
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
1560
- return /* @__PURE__ */ jsx13(
1701
+ return /* @__PURE__ */ jsx19(
1561
1702
  "div",
1562
1703
  __spreadValues({
1563
1704
  "data-slot": "empty-description",
1564
- className: cn12(
1705
+ className: cn13(
1565
1706
  "text-xs/relaxed text-muted-foreground [&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary",
1566
1707
  className
1567
1708
  )
@@ -1570,11 +1711,11 @@ function EmptyDescription(_a) {
1570
1711
  }
1571
1712
  function EmptyContent(_a) {
1572
1713
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
1573
- return /* @__PURE__ */ jsx13(
1714
+ return /* @__PURE__ */ jsx19(
1574
1715
  "div",
1575
1716
  __spreadValues({
1576
1717
  "data-slot": "empty-content",
1577
- className: cn12(
1718
+ className: cn13(
1578
1719
  "flex w-full max-w-sm min-w-0 flex-col items-center gap-2 text-xs/relaxed text-balance",
1579
1720
  className
1580
1721
  )
@@ -1583,18 +1724,18 @@ function EmptyContent(_a) {
1583
1724
  }
1584
1725
 
1585
1726
  // src/lib/utils.ts
1586
- import { cn as cn13 } from "cn";
1727
+ import { cn as cn14 } from "cn";
1587
1728
 
1588
1729
  // src/components/composed/state-empty.tsx
1589
- import { jsx as jsx14, jsxs as jsxs8 } from "react/jsx-runtime";
1730
+ import { jsx as jsx20, jsxs as jsxs12 } from "react/jsx-runtime";
1590
1731
  function renderStateIcon(icon) {
1591
1732
  if (typeof icon === "function" || typeof icon === "object" && icon !== null && "render" in icon) {
1592
1733
  const IconComp = icon;
1593
- return /* @__PURE__ */ jsx14(IconComp, {});
1734
+ return /* @__PURE__ */ jsx20(IconComp, {});
1594
1735
  }
1595
1736
  return icon;
1596
1737
  }
1597
- var StateEmpty = memo2(function StateEmpty2({
1738
+ var StateEmpty = memo8(function StateEmpty2({
1598
1739
  icon,
1599
1740
  title,
1600
1741
  description,
@@ -1607,17 +1748,17 @@ var StateEmpty = memo2(function StateEmpty2({
1607
1748
  const actionHandler = isFunctionAction ? render : onClick;
1608
1749
  const buttonRender = isFunctionAction ? void 0 : render;
1609
1750
  const hasAction = Boolean(buttonText || render || onClick);
1610
- return /* @__PURE__ */ jsxs8(
1751
+ return /* @__PURE__ */ jsxs12(
1611
1752
  Empty,
1612
1753
  {
1613
- className: cn13("w-full", state === "outline" && "border border-dashed"),
1754
+ className: cn14("w-full", state === "outline" && "border border-dashed"),
1614
1755
  children: [
1615
- /* @__PURE__ */ jsxs8(EmptyHeader, { children: [
1616
- /* @__PURE__ */ jsx14(EmptyMedia, { variant: "icon", children: renderStateIcon(icon) }),
1617
- /* @__PURE__ */ jsx14(EmptyTitle, { children: title }),
1618
- /* @__PURE__ */ jsx14(EmptyDescription, { children: description })
1756
+ /* @__PURE__ */ jsxs12(EmptyHeader, { children: [
1757
+ /* @__PURE__ */ jsx20(EmptyMedia, { variant: "icon", children: renderStateIcon(icon) }),
1758
+ /* @__PURE__ */ jsx20(EmptyTitle, { children: title }),
1759
+ /* @__PURE__ */ jsx20(EmptyDescription, { children: description })
1619
1760
  ] }),
1620
- hasAction && /* @__PURE__ */ jsx14(EmptyContent, { children: /* @__PURE__ */ jsx14(
1761
+ hasAction && /* @__PURE__ */ jsx20(EmptyContent, { children: /* @__PURE__ */ jsx20(
1621
1762
  Button,
1622
1763
  {
1623
1764
  variant: "outline",
@@ -1634,20 +1775,20 @@ var StateEmpty = memo2(function StateEmpty2({
1634
1775
  });
1635
1776
 
1636
1777
  // src/components/ui/table.tsx
1637
- import { cn as cn14 } from "cn";
1638
- import { jsx as jsx15 } from "react/jsx-runtime";
1778
+ import { cn as cn15 } from "cn";
1779
+ import { jsx as jsx21 } from "react/jsx-runtime";
1639
1780
  function Table(_a) {
1640
1781
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
1641
- return /* @__PURE__ */ jsx15(
1782
+ return /* @__PURE__ */ jsx21(
1642
1783
  "div",
1643
1784
  {
1644
1785
  "data-slot": "table-container",
1645
1786
  className: "relative w-full overflow-x-auto",
1646
- children: /* @__PURE__ */ jsx15(
1787
+ children: /* @__PURE__ */ jsx21(
1647
1788
  "table",
1648
1789
  __spreadValues({
1649
1790
  "data-slot": "table",
1650
- className: cn14("w-full caption-bottom text-xs", className)
1791
+ className: cn15("w-full caption-bottom text-xs", className)
1651
1792
  }, props)
1652
1793
  )
1653
1794
  }
@@ -1655,31 +1796,31 @@ function Table(_a) {
1655
1796
  }
1656
1797
  function TableHeader(_a) {
1657
1798
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
1658
- return /* @__PURE__ */ jsx15(
1799
+ return /* @__PURE__ */ jsx21(
1659
1800
  "thead",
1660
1801
  __spreadValues({
1661
1802
  "data-slot": "table-header",
1662
- className: cn14("[&_tr]:border-b", className)
1803
+ className: cn15("[&_tr]:border-b", className)
1663
1804
  }, props)
1664
1805
  );
1665
1806
  }
1666
1807
  function TableBody(_a) {
1667
1808
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
1668
- return /* @__PURE__ */ jsx15(
1809
+ return /* @__PURE__ */ jsx21(
1669
1810
  "tbody",
1670
1811
  __spreadValues({
1671
1812
  "data-slot": "table-body",
1672
- className: cn14("[&_tr:last-child]:border-0", className)
1813
+ className: cn15("[&_tr:last-child]:border-0", className)
1673
1814
  }, props)
1674
1815
  );
1675
1816
  }
1676
1817
  function TableRow(_a) {
1677
1818
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
1678
- return /* @__PURE__ */ jsx15(
1819
+ return /* @__PURE__ */ jsx21(
1679
1820
  "tr",
1680
1821
  __spreadValues({
1681
1822
  "data-slot": "table-row",
1682
- className: cn14(
1823
+ className: cn15(
1683
1824
  "border-b transition-colors hover:bg-muted/50 has-aria-expanded:bg-muted/50 data-[state=selected]:bg-muted",
1684
1825
  className
1685
1826
  )
@@ -1688,11 +1829,11 @@ function TableRow(_a) {
1688
1829
  }
1689
1830
  function TableHead(_a) {
1690
1831
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
1691
- return /* @__PURE__ */ jsx15(
1832
+ return /* @__PURE__ */ jsx21(
1692
1833
  "th",
1693
1834
  __spreadValues({
1694
1835
  "data-slot": "table-head",
1695
- className: cn14(
1836
+ className: cn15(
1696
1837
  "h-10 px-2 text-left align-middle font-medium whitespace-nowrap text-foreground [&:has([role=checkbox])]:pr-0",
1697
1838
  className
1698
1839
  )
@@ -1701,11 +1842,11 @@ function TableHead(_a) {
1701
1842
  }
1702
1843
  function TableCell(_a) {
1703
1844
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
1704
- return /* @__PURE__ */ jsx15(
1845
+ return /* @__PURE__ */ jsx21(
1705
1846
  "td",
1706
1847
  __spreadValues({
1707
1848
  "data-slot": "table-cell",
1708
- className: cn14(
1849
+ className: cn15(
1709
1850
  "p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0",
1710
1851
  className
1711
1852
  )
@@ -1758,19 +1899,19 @@ import {
1758
1899
  flexRender
1759
1900
  } from "@tanstack/react-table";
1760
1901
  import { SearchXIcon } from "lucide-react";
1761
- import { jsx as jsx16 } from "react/jsx-runtime";
1902
+ import { jsx as jsx22 } from "react/jsx-runtime";
1762
1903
  function DataTableContentBody({
1763
1904
  table,
1764
1905
  columns
1765
1906
  }) {
1766
1907
  const rows = table.getRowModel().rows;
1767
1908
  if (rows == null ? void 0 : rows.length) {
1768
- return /* @__PURE__ */ jsx16(TableBody, { children: rows.map((row) => /* @__PURE__ */ jsx16(TableRow, { children: row.getVisibleCells().map((cell) => /* @__PURE__ */ jsx16(TableCell, { children: flexRender(cell.column.columnDef.cell, cell.getContext()) }, cell.id)) }, row.id)) });
1909
+ return /* @__PURE__ */ jsx22(TableBody, { children: rows.map((row) => /* @__PURE__ */ jsx22(TableRow, { children: row.getVisibleCells().map((cell) => /* @__PURE__ */ jsx22(TableCell, { children: flexRender(cell.column.columnDef.cell, cell.getContext()) }, cell.id)) }, row.id)) });
1769
1910
  }
1770
- return /* @__PURE__ */ jsx16(TableBody, { children: /* @__PURE__ */ jsx16(TableRow, { children: /* @__PURE__ */ jsx16(TableCell, { colSpan: columns.length, className: "h-48 text-center", children: /* @__PURE__ */ jsx16(
1911
+ return /* @__PURE__ */ jsx22(TableBody, { children: /* @__PURE__ */ jsx22(TableRow, { children: /* @__PURE__ */ jsx22(TableCell, { colSpan: columns.length, className: "h-48 text-center", children: /* @__PURE__ */ jsx22(
1771
1912
  StateEmpty,
1772
1913
  {
1773
- icon: /* @__PURE__ */ jsx16(SearchXIcon, {}),
1914
+ icon: /* @__PURE__ */ jsx22(SearchXIcon, {}),
1774
1915
  title: "No matching results",
1775
1916
  description: "No records matched your search query or filter criteria.",
1776
1917
  buttonText: "Clear search & filters",
@@ -1784,18 +1925,18 @@ function DataTableContentBody({
1784
1925
 
1785
1926
  // src/components/composed/data-table/table-content-header.tsx
1786
1927
  import { flexRender as flexRender2 } from "@tanstack/react-table";
1787
- import { jsx as jsx17 } from "react/jsx-runtime";
1928
+ import { jsx as jsx23 } from "react/jsx-runtime";
1788
1929
  function DataTableContentHeader({
1789
1930
  table
1790
1931
  }) {
1791
- return /* @__PURE__ */ jsx17(TableHeader, { children: table.getHeaderGroups().map((headerGroup) => /* @__PURE__ */ jsx17(TableRow, { children: headerGroup.headers.map((header) => /* @__PURE__ */ jsx17(TableHead, { children: header.isPlaceholder ? null : flexRender2(
1932
+ return /* @__PURE__ */ jsx23(TableHeader, { children: table.getHeaderGroups().map((headerGroup) => /* @__PURE__ */ jsx23(TableRow, { children: headerGroup.headers.map((header) => /* @__PURE__ */ jsx23(TableHead, { children: header.isPlaceholder ? null : flexRender2(
1792
1933
  header.column.columnDef.header,
1793
1934
  header.getContext()
1794
1935
  ) }, header.id)) }, headerGroup.id)) });
1795
1936
  }
1796
1937
 
1797
1938
  // src/components/composed/data-table/table-footer-entries.tsx
1798
- import { jsx as jsx18, jsxs as jsxs9 } from "react/jsx-runtime";
1939
+ import { jsx as jsx24, jsxs as jsxs13 } from "react/jsx-runtime";
1799
1940
  function DataTableFooterEntries({
1800
1941
  table
1801
1942
  }) {
@@ -1806,17 +1947,17 @@ function DataTableFooterEntries({
1806
1947
  const totalRows = table.getFilteredRowModel().rows.length;
1807
1948
  const startRow = totalRows === 0 ? 0 : pageIndex * pageSize + 1;
1808
1949
  const endRow = Math.min((pageIndex + 1) * pageSize, totalRows);
1809
- return /* @__PURE__ */ jsxs9("div", { className: "flex-1 text-xs text-muted-foreground", children: [
1950
+ return /* @__PURE__ */ jsxs13("div", { className: "flex-1 text-xs text-muted-foreground", children: [
1810
1951
  "Showing",
1811
1952
  " ",
1812
- /* @__PURE__ */ jsxs9("span", { className: "font-medium text-foreground", children: [
1953
+ /* @__PURE__ */ jsxs13("span", { className: "font-medium text-foreground", children: [
1813
1954
  startRow,
1814
1955
  "-",
1815
1956
  endRow
1816
1957
  ] }),
1817
1958
  " ",
1818
1959
  "of ",
1819
- /* @__PURE__ */ jsx18("span", { className: "font-medium text-foreground", children: totalRows }),
1960
+ /* @__PURE__ */ jsx24("span", { className: "font-medium text-foreground", children: totalRows }),
1820
1961
  " ",
1821
1962
  "entries."
1822
1963
  ] });
@@ -1829,106 +1970,106 @@ import {
1829
1970
  ChevronsLeftIcon,
1830
1971
  ChevronsRightIcon
1831
1972
  } from "lucide-react";
1832
- import { jsx as jsx19, jsxs as jsxs10 } from "react/jsx-runtime";
1973
+ import { jsx as jsx25, jsxs as jsxs14 } from "react/jsx-runtime";
1833
1974
  function DataTableFooterPagination({
1834
1975
  table
1835
1976
  }) {
1836
- return /* @__PURE__ */ jsxs10("div", { className: "flex items-center gap-1", children: [
1837
- /* @__PURE__ */ jsxs10(Tooltip, { children: [
1838
- /* @__PURE__ */ jsx19(
1977
+ return /* @__PURE__ */ jsxs14("div", { className: "flex items-center gap-1", children: [
1978
+ /* @__PURE__ */ jsxs14(Tooltip, { children: [
1979
+ /* @__PURE__ */ jsx25(
1839
1980
  TooltipTrigger,
1840
1981
  {
1841
- render: /* @__PURE__ */ jsx19(
1982
+ render: /* @__PURE__ */ jsx25(
1842
1983
  Button,
1843
1984
  {
1844
1985
  variant: "outline",
1845
1986
  size: "icon-xs",
1846
1987
  onClick: () => table.firstPage(),
1847
1988
  disabled: !table.getCanPreviousPage(),
1848
- children: /* @__PURE__ */ jsx19(ChevronsLeftIcon, {})
1989
+ children: /* @__PURE__ */ jsx25(ChevronsLeftIcon, {})
1849
1990
  }
1850
1991
  )
1851
1992
  }
1852
1993
  ),
1853
- /* @__PURE__ */ jsx19(TooltipContent, { children: "Go to first page" })
1994
+ /* @__PURE__ */ jsx25(TooltipContent, { children: "Go to first page" })
1854
1995
  ] }),
1855
- /* @__PURE__ */ jsxs10(Tooltip, { children: [
1856
- /* @__PURE__ */ jsx19(
1996
+ /* @__PURE__ */ jsxs14(Tooltip, { children: [
1997
+ /* @__PURE__ */ jsx25(
1857
1998
  TooltipTrigger,
1858
1999
  {
1859
- render: /* @__PURE__ */ jsx19(
2000
+ render: /* @__PURE__ */ jsx25(
1860
2001
  Button,
1861
2002
  {
1862
2003
  variant: "outline",
1863
2004
  size: "icon-xs",
1864
2005
  onClick: () => table.previousPage(),
1865
2006
  disabled: !table.getCanPreviousPage(),
1866
- children: /* @__PURE__ */ jsx19(ChevronLeftIcon, {})
2007
+ children: /* @__PURE__ */ jsx25(ChevronLeftIcon, {})
1867
2008
  }
1868
2009
  )
1869
2010
  }
1870
2011
  ),
1871
- /* @__PURE__ */ jsx19(TooltipContent, { children: "Go to previous page" })
2012
+ /* @__PURE__ */ jsx25(TooltipContent, { children: "Go to previous page" })
1872
2013
  ] }),
1873
- /* @__PURE__ */ jsxs10(Tooltip, { children: [
1874
- /* @__PURE__ */ jsx19(
2014
+ /* @__PURE__ */ jsxs14(Tooltip, { children: [
2015
+ /* @__PURE__ */ jsx25(
1875
2016
  TooltipTrigger,
1876
2017
  {
1877
- render: /* @__PURE__ */ jsx19(
2018
+ render: /* @__PURE__ */ jsx25(
1878
2019
  Button,
1879
2020
  {
1880
2021
  variant: "outline",
1881
2022
  size: "icon-xs",
1882
2023
  onClick: () => table.nextPage(),
1883
2024
  disabled: !table.getCanNextPage(),
1884
- children: /* @__PURE__ */ jsx19(ChevronRightIcon3, {})
2025
+ children: /* @__PURE__ */ jsx25(ChevronRightIcon3, {})
1885
2026
  }
1886
2027
  )
1887
2028
  }
1888
2029
  ),
1889
- /* @__PURE__ */ jsx19(TooltipContent, { children: "Go to next page" })
2030
+ /* @__PURE__ */ jsx25(TooltipContent, { children: "Go to next page" })
1890
2031
  ] }),
1891
- /* @__PURE__ */ jsxs10(Tooltip, { children: [
1892
- /* @__PURE__ */ jsx19(
2032
+ /* @__PURE__ */ jsxs14(Tooltip, { children: [
2033
+ /* @__PURE__ */ jsx25(
1893
2034
  TooltipTrigger,
1894
2035
  {
1895
- render: /* @__PURE__ */ jsx19(
2036
+ render: /* @__PURE__ */ jsx25(
1896
2037
  Button,
1897
2038
  {
1898
2039
  variant: "outline",
1899
2040
  size: "icon-xs",
1900
2041
  onClick: () => table.lastPage(),
1901
2042
  disabled: !table.getCanNextPage(),
1902
- children: /* @__PURE__ */ jsx19(ChevronsRightIcon, {})
2043
+ children: /* @__PURE__ */ jsx25(ChevronsRightIcon, {})
1903
2044
  }
1904
2045
  )
1905
2046
  }
1906
2047
  ),
1907
- /* @__PURE__ */ jsx19(TooltipContent, { children: "Go to last page" })
2048
+ /* @__PURE__ */ jsx25(TooltipContent, { children: "Go to last page" })
1908
2049
  ] })
1909
2050
  ] });
1910
2051
  }
1911
2052
 
1912
2053
  // src/components/composed/data-table/table-header-add.tsx
1913
2054
  import { PlusIcon } from "lucide-react";
1914
- import { Fragment, jsx as jsx20, jsxs as jsxs11 } from "react/jsx-runtime";
2055
+ import { Fragment, jsx as jsx26, jsxs as jsxs15 } from "react/jsx-runtime";
1915
2056
  function DataTableHeaderAdd({
1916
2057
  onAdd,
1917
2058
  addLabel
1918
2059
  }) {
1919
- return /* @__PURE__ */ jsxs11(Fragment, { children: [
1920
- /* @__PURE__ */ jsxs11(Tooltip, { children: [
1921
- /* @__PURE__ */ jsx20(
2060
+ return /* @__PURE__ */ jsxs15(Fragment, { children: [
2061
+ /* @__PURE__ */ jsxs15(Tooltip, { children: [
2062
+ /* @__PURE__ */ jsx26(
1922
2063
  TooltipTrigger,
1923
2064
  {
1924
2065
  className: "flex sm:hidden",
1925
- render: /* @__PURE__ */ jsx20(Button, { variant: "default", size: "icon", onClick: onAdd, children: /* @__PURE__ */ jsx20(PlusIcon, {}) })
2066
+ render: /* @__PURE__ */ jsx26(Button, { variant: "default", size: "icon", onClick: onAdd, children: /* @__PURE__ */ jsx26(PlusIcon, {}) })
1926
2067
  }
1927
2068
  ),
1928
- /* @__PURE__ */ jsx20(TooltipContent, { children: addLabel != null ? addLabel : "Add" })
2069
+ /* @__PURE__ */ jsx26(TooltipContent, { children: addLabel != null ? addLabel : "Add" })
1929
2070
  ] }),
1930
- /* @__PURE__ */ jsxs11(Button, { variant: "default", onClick: onAdd, className: "hidden sm:flex", children: [
1931
- /* @__PURE__ */ jsx20(PlusIcon, {}),
2071
+ /* @__PURE__ */ jsxs15(Button, { variant: "default", onClick: onAdd, className: "hidden sm:flex", children: [
2072
+ /* @__PURE__ */ jsx26(PlusIcon, {}),
1932
2073
  addLabel != null ? addLabel : "Add"
1933
2074
  ] })
1934
2075
  ] });
@@ -2081,7 +2222,7 @@ function printTable(headers, rows, title = "Data Export") {
2081
2222
  }
2082
2223
 
2083
2224
  // src/components/composed/data-table/table-header-download.tsx
2084
- import { jsx as jsx21, jsxs as jsxs12 } from "react/jsx-runtime";
2225
+ import { jsx as jsx27, jsxs as jsxs16 } from "react/jsx-runtime";
2085
2226
  function getTableExportData(table) {
2086
2227
  const columns = table.getAllColumns().filter(
2087
2228
  (col) => typeof col.accessorFn !== "undefined" && col.getIsVisible()
@@ -2124,25 +2265,25 @@ function DataTableHeaderDownload({
2124
2265
  exportFilename,
2125
2266
  onDownload
2126
2267
  }) {
2127
- return /* @__PURE__ */ jsxs12(DropdownMenu, { children: [
2128
- /* @__PURE__ */ jsxs12(Tooltip, { children: [
2129
- /* @__PURE__ */ jsx21(
2268
+ return /* @__PURE__ */ jsxs16(DropdownMenu, { children: [
2269
+ /* @__PURE__ */ jsxs16(Tooltip, { children: [
2270
+ /* @__PURE__ */ jsx27(
2130
2271
  DropdownMenuTrigger,
2131
2272
  {
2132
- render: /* @__PURE__ */ jsx21(
2273
+ render: /* @__PURE__ */ jsx27(
2133
2274
  TooltipTrigger,
2134
2275
  {
2135
- render: /* @__PURE__ */ jsx21(Button, { variant: "outline", size: "icon", children: /* @__PURE__ */ jsx21(DownloadIcon, {}) })
2276
+ render: /* @__PURE__ */ jsx27(Button, { variant: "outline", size: "icon", children: /* @__PURE__ */ jsx27(DownloadIcon, {}) })
2136
2277
  }
2137
2278
  )
2138
2279
  }
2139
2280
  ),
2140
- /* @__PURE__ */ jsx21(TooltipContent, { children: "Download options" })
2281
+ /* @__PURE__ */ jsx27(TooltipContent, { children: "Download options" })
2141
2282
  ] }),
2142
- /* @__PURE__ */ jsx21(DropdownMenuContent, { align: "end", className: "w-48", children: /* @__PURE__ */ jsxs12(DropdownMenuGroup, { children: [
2143
- /* @__PURE__ */ jsx21(DropdownMenuLabel, { children: "Download data" }),
2144
- /* @__PURE__ */ jsx21(DropdownMenuSeparator, {}),
2145
- /* @__PURE__ */ jsxs12(
2283
+ /* @__PURE__ */ jsx27(DropdownMenuContent, { align: "end", className: "w-48", children: /* @__PURE__ */ jsxs16(DropdownMenuGroup, { children: [
2284
+ /* @__PURE__ */ jsx27(DropdownMenuLabel, { children: "Download data" }),
2285
+ /* @__PURE__ */ jsx27(DropdownMenuSeparator, {}),
2286
+ /* @__PURE__ */ jsxs16(
2146
2287
  DropdownMenuItem,
2147
2288
  {
2148
2289
  className: "hover:cursor-pointer",
@@ -2152,12 +2293,12 @@ function DataTableHeaderDownload({
2152
2293
  onDownload == null ? void 0 : onDownload();
2153
2294
  },
2154
2295
  children: [
2155
- /* @__PURE__ */ jsx21(FileTextIcon, {}),
2296
+ /* @__PURE__ */ jsx27(FileTextIcon, {}),
2156
2297
  "Download PDF"
2157
2298
  ]
2158
2299
  }
2159
2300
  ),
2160
- /* @__PURE__ */ jsxs12(
2301
+ /* @__PURE__ */ jsxs16(
2161
2302
  DropdownMenuItem,
2162
2303
  {
2163
2304
  className: "hover:cursor-pointer",
@@ -2167,12 +2308,12 @@ function DataTableHeaderDownload({
2167
2308
  onDownload == null ? void 0 : onDownload();
2168
2309
  },
2169
2310
  children: [
2170
- /* @__PURE__ */ jsx21(FileSpreadsheetIcon, {}),
2311
+ /* @__PURE__ */ jsx27(FileSpreadsheetIcon, {}),
2171
2312
  "Download Excel"
2172
2313
  ]
2173
2314
  }
2174
2315
  ),
2175
- /* @__PURE__ */ jsxs12(
2316
+ /* @__PURE__ */ jsxs16(
2176
2317
  DropdownMenuItem,
2177
2318
  {
2178
2319
  className: "hover:cursor-pointer",
@@ -2182,13 +2323,13 @@ function DataTableHeaderDownload({
2182
2323
  onDownload == null ? void 0 : onDownload();
2183
2324
  },
2184
2325
  children: [
2185
- /* @__PURE__ */ jsx21(FileCodeIcon, {}),
2326
+ /* @__PURE__ */ jsx27(FileCodeIcon, {}),
2186
2327
  "Download CSV"
2187
2328
  ]
2188
2329
  }
2189
2330
  ),
2190
- /* @__PURE__ */ jsx21(DropdownMenuSeparator, {}),
2191
- /* @__PURE__ */ jsxs12(
2331
+ /* @__PURE__ */ jsx27(DropdownMenuSeparator, {}),
2332
+ /* @__PURE__ */ jsxs16(
2192
2333
  DropdownMenuItem,
2193
2334
  {
2194
2335
  className: "hover:cursor-pointer",
@@ -2197,7 +2338,7 @@ function DataTableHeaderDownload({
2197
2338
  printTable(headers, rows, exportFilename);
2198
2339
  },
2199
2340
  children: [
2200
- /* @__PURE__ */ jsx21(PrinterIcon, {}),
2341
+ /* @__PURE__ */ jsx27(PrinterIcon, {}),
2201
2342
  "Print Table"
2202
2343
  ]
2203
2344
  }
@@ -2212,7 +2353,7 @@ import { CalendarIcon, ListFilterIcon } from "lucide-react";
2212
2353
  import { useMemo as useMemo2, useState as useState3 } from "react";
2213
2354
 
2214
2355
  // src/components/ui/calendar.tsx
2215
- import { cn as cn15 } from "cn";
2356
+ import { cn as cn16 } from "cn";
2216
2357
  import {
2217
2358
  ChevronDownIcon,
2218
2359
  ChevronLeftIcon as ChevronLeftIcon2,
@@ -2223,7 +2364,7 @@ import {
2223
2364
  DayPicker,
2224
2365
  getDefaultClassNames
2225
2366
  } from "react-day-picker";
2226
- import { jsx as jsx22 } from "react/jsx-runtime";
2367
+ import { jsx as jsx28 } from "react/jsx-runtime";
2227
2368
  function Calendar(_a) {
2228
2369
  var _b = _a, {
2229
2370
  className,
@@ -2245,11 +2386,11 @@ function Calendar(_a) {
2245
2386
  "components"
2246
2387
  ]);
2247
2388
  const defaultClassNames = getDefaultClassNames();
2248
- return /* @__PURE__ */ jsx22(
2389
+ return /* @__PURE__ */ jsx28(
2249
2390
  DayPicker,
2250
2391
  __spreadValues({
2251
2392
  showOutsideDays,
2252
- className: cn15(
2393
+ className: cn16(
2253
2394
  "group/calendar bg-background p-3 [--cell-radius:var(--radius-md)] [--cell-size:--spacing(6)] in-data-[slot=card-content]:bg-transparent in-data-[slot=popover-content]:bg-transparent",
2254
2395
  String.raw`rtl:**:[.rdp-button\_next>svg]:rotate-180`,
2255
2396
  String.raw`rtl:**:[.rdp-button\_previous>svg]:rotate-180`,
@@ -2261,124 +2402,124 @@ function Calendar(_a) {
2261
2402
  formatMonthDropdown: (date) => date.toLocaleString(locale == null ? void 0 : locale.code, { month: "short" })
2262
2403
  }, formatters),
2263
2404
  classNames: __spreadValues({
2264
- root: cn15("w-fit", defaultClassNames.root),
2265
- months: cn15(
2405
+ root: cn16("w-fit", defaultClassNames.root),
2406
+ months: cn16(
2266
2407
  "relative flex flex-col gap-4 md:flex-row",
2267
2408
  defaultClassNames.months
2268
2409
  ),
2269
- month: cn15("flex w-full flex-col gap-4", defaultClassNames.month),
2270
- nav: cn15(
2410
+ month: cn16("flex w-full flex-col gap-4", defaultClassNames.month),
2411
+ nav: cn16(
2271
2412
  "absolute inset-x-0 top-0 flex w-full items-center justify-between gap-1",
2272
2413
  defaultClassNames.nav
2273
2414
  ),
2274
- button_previous: cn15(
2415
+ button_previous: cn16(
2275
2416
  buttonVariants({ variant: buttonVariant }),
2276
2417
  "size-(--cell-size) p-0 select-none aria-disabled:opacity-50",
2277
2418
  defaultClassNames.button_previous
2278
2419
  ),
2279
- button_next: cn15(
2420
+ button_next: cn16(
2280
2421
  buttonVariants({ variant: buttonVariant }),
2281
2422
  "size-(--cell-size) p-0 select-none aria-disabled:opacity-50",
2282
2423
  defaultClassNames.button_next
2283
2424
  ),
2284
- month_caption: cn15(
2425
+ month_caption: cn16(
2285
2426
  "flex h-(--cell-size) w-full items-center justify-center px-(--cell-size)",
2286
2427
  defaultClassNames.month_caption
2287
2428
  ),
2288
- dropdowns: cn15(
2429
+ dropdowns: cn16(
2289
2430
  "flex h-(--cell-size) w-full items-center justify-center gap-1.5 text-sm font-medium",
2290
2431
  defaultClassNames.dropdowns
2291
2432
  ),
2292
- dropdown_root: cn15(
2433
+ dropdown_root: cn16(
2293
2434
  "relative rounded-(--cell-radius)",
2294
2435
  defaultClassNames.dropdown_root
2295
2436
  ),
2296
- dropdown: cn15(
2437
+ dropdown: cn16(
2297
2438
  "absolute inset-0 bg-popover opacity-0",
2298
2439
  defaultClassNames.dropdown
2299
2440
  ),
2300
- caption_label: cn15(
2441
+ caption_label: cn16(
2301
2442
  "font-medium select-none",
2302
2443
  captionLayout === "label" ? "text-sm" : "flex items-center gap-1 rounded-(--cell-radius) text-sm [&>svg]:size-3.5 [&>svg]:text-muted-foreground",
2303
2444
  defaultClassNames.caption_label
2304
2445
  ),
2305
- month_grid: cn15("w-full border-collapse", defaultClassNames.month_grid),
2306
- weekdays: cn15("flex", defaultClassNames.weekdays),
2307
- weekday: cn15(
2446
+ month_grid: cn16("w-full border-collapse", defaultClassNames.month_grid),
2447
+ weekdays: cn16("flex", defaultClassNames.weekdays),
2448
+ weekday: cn16(
2308
2449
  "flex-1 rounded-(--cell-radius) text-[0.8rem] font-normal text-muted-foreground select-none",
2309
2450
  defaultClassNames.weekday
2310
2451
  ),
2311
- week: cn15("mt-2 flex w-full", defaultClassNames.week),
2312
- week_number_header: cn15(
2452
+ week: cn16("mt-2 flex w-full", defaultClassNames.week),
2453
+ week_number_header: cn16(
2313
2454
  "w-(--cell-size) select-none",
2314
2455
  defaultClassNames.week_number_header
2315
2456
  ),
2316
- week_number: cn15(
2457
+ week_number: cn16(
2317
2458
  "text-[0.8rem] text-muted-foreground select-none",
2318
2459
  defaultClassNames.week_number
2319
2460
  ),
2320
- day: cn15(
2461
+ day: cn16(
2321
2462
  "group/day relative aspect-square h-full w-full rounded-(--cell-radius) p-0 text-center select-none [&:last-child[data-selected=true]_button]:rounded-r-(--cell-radius)",
2322
2463
  props.showWeekNumber ? "[&:nth-child(2)[data-selected=true]_button]:rounded-l-(--cell-radius)" : "[&:first-child[data-selected=true]_button]:rounded-l-(--cell-radius)",
2323
2464
  defaultClassNames.day
2324
2465
  ),
2325
- range_start: cn15(
2466
+ range_start: cn16(
2326
2467
  "relative isolate z-0 rounded-l-(--cell-radius) bg-muted after:absolute after:inset-y-0 after:right-0 after:w-4 after:bg-muted",
2327
2468
  defaultClassNames.range_start
2328
2469
  ),
2329
- range_middle: cn15("rounded-none", defaultClassNames.range_middle),
2330
- range_end: cn15(
2470
+ range_middle: cn16("rounded-none", defaultClassNames.range_middle),
2471
+ range_end: cn16(
2331
2472
  "relative isolate z-0 rounded-r-(--cell-radius) bg-muted after:absolute after:inset-y-0 after:left-0 after:w-4 after:bg-muted",
2332
2473
  defaultClassNames.range_end
2333
2474
  ),
2334
- today: cn15(
2475
+ today: cn16(
2335
2476
  "rounded-(--cell-radius) bg-muted text-foreground data-[selected=true]:rounded-none",
2336
2477
  defaultClassNames.today
2337
2478
  ),
2338
- outside: cn15(
2479
+ outside: cn16(
2339
2480
  "text-muted-foreground aria-selected:text-muted-foreground",
2340
2481
  defaultClassNames.outside
2341
2482
  ),
2342
- disabled: cn15(
2483
+ disabled: cn16(
2343
2484
  "text-muted-foreground opacity-50",
2344
2485
  defaultClassNames.disabled
2345
2486
  ),
2346
- hidden: cn15("invisible", defaultClassNames.hidden)
2487
+ hidden: cn16("invisible", defaultClassNames.hidden)
2347
2488
  }, classNames),
2348
2489
  components: __spreadValues({
2349
2490
  Root: (_a2) => {
2350
2491
  var _b2 = _a2, { className: className2, rootRef } = _b2, props2 = __objRest(_b2, ["className", "rootRef"]);
2351
- return /* @__PURE__ */ jsx22(
2492
+ return /* @__PURE__ */ jsx28(
2352
2493
  "div",
2353
2494
  __spreadValues({
2354
2495
  "data-slot": "calendar",
2355
2496
  ref: rootRef,
2356
- className: cn15(className2)
2497
+ className: cn16(className2)
2357
2498
  }, props2)
2358
2499
  );
2359
2500
  },
2360
2501
  Chevron: (_c) => {
2361
2502
  var _d = _c, { className: className2, orientation } = _d, props2 = __objRest(_d, ["className", "orientation"]);
2362
2503
  if (orientation === "left") {
2363
- return /* @__PURE__ */ jsx22(ChevronLeftIcon2, __spreadValues({ className: cn15("size-4", className2) }, props2));
2504
+ return /* @__PURE__ */ jsx28(ChevronLeftIcon2, __spreadValues({ className: cn16("size-4", className2) }, props2));
2364
2505
  }
2365
2506
  if (orientation === "right") {
2366
- return /* @__PURE__ */ jsx22(
2507
+ return /* @__PURE__ */ jsx28(
2367
2508
  ChevronRightIcon4,
2368
2509
  __spreadValues({
2369
- className: cn15("size-4", className2)
2510
+ className: cn16("size-4", className2)
2370
2511
  }, props2)
2371
2512
  );
2372
2513
  }
2373
- return /* @__PURE__ */ jsx22(ChevronDownIcon, __spreadValues({ className: cn15("size-4", className2) }, props2));
2514
+ return /* @__PURE__ */ jsx28(ChevronDownIcon, __spreadValues({ className: cn16("size-4", className2) }, props2));
2374
2515
  },
2375
2516
  DayButton: (_e) => {
2376
2517
  var props2 = __objRest(_e, []);
2377
- return /* @__PURE__ */ jsx22(CalendarDayButton, __spreadValues({ locale }, props2));
2518
+ return /* @__PURE__ */ jsx28(CalendarDayButton, __spreadValues({ locale }, props2));
2378
2519
  },
2379
2520
  WeekNumber: (_f) => {
2380
2521
  var _g = _f, { children } = _g, props2 = __objRest(_g, ["children"]);
2381
- return /* @__PURE__ */ jsx22("td", __spreadProps(__spreadValues({}, props2), { children: /* @__PURE__ */ jsx22("div", { className: "flex size-(--cell-size) items-center justify-center text-center", children }) }));
2522
+ return /* @__PURE__ */ jsx28("td", __spreadProps(__spreadValues({}, props2), { children: /* @__PURE__ */ jsx28("div", { className: "flex size-(--cell-size) items-center justify-center text-center", children }) }));
2382
2523
  }
2383
2524
  }, components)
2384
2525
  }, props)
@@ -2402,7 +2543,7 @@ function CalendarDayButton(_a) {
2402
2543
  var _a2;
2403
2544
  if (modifiers.focused) (_a2 = ref.current) == null ? void 0 : _a2.focus();
2404
2545
  }, [modifiers.focused]);
2405
- return /* @__PURE__ */ jsx22(
2546
+ return /* @__PURE__ */ jsx28(
2406
2547
  Button,
2407
2548
  __spreadValues({
2408
2549
  variant: "ghost",
@@ -2412,7 +2553,7 @@ function CalendarDayButton(_a) {
2412
2553
  "data-range-start": modifiers.range_start,
2413
2554
  "data-range-end": modifiers.range_end,
2414
2555
  "data-range-middle": modifiers.range_middle,
2415
- className: cn15(
2556
+ className: cn16(
2416
2557
  "relative isolate z-10 flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 border-0 leading-none font-normal group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-[3px] group-data-[focused=true]/day:ring-ring/50 data-[range-end=true]:rounded-(--cell-radius) data-[range-end=true]:rounded-r-(--cell-radius) data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground data-[range-middle=true]:rounded-none data-[range-middle=true]:bg-muted data-[range-middle=true]:text-foreground data-[range-start=true]:rounded-(--cell-radius) data-[range-start=true]:rounded-l-(--cell-radius) data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground dark:hover:text-foreground [&>span]:text-xs [&>span]:opacity-70",
2417
2558
  defaultClassNames.day,
2418
2559
  className
@@ -2423,15 +2564,15 @@ function CalendarDayButton(_a) {
2423
2564
 
2424
2565
  // src/components/ui/popover.tsx
2425
2566
  import { Popover as PopoverPrimitive } from "@base-ui/react/popover";
2426
- import { cn as cn16 } from "cn";
2427
- import { jsx as jsx23 } from "react/jsx-runtime";
2567
+ import { cn as cn17 } from "cn";
2568
+ import { jsx as jsx29 } from "react/jsx-runtime";
2428
2569
  function Popover(_a) {
2429
2570
  var props = __objRest(_a, []);
2430
- return /* @__PURE__ */ jsx23(PopoverPrimitive.Root, __spreadValues({ "data-slot": "popover" }, props));
2571
+ return /* @__PURE__ */ jsx29(PopoverPrimitive.Root, __spreadValues({ "data-slot": "popover" }, props));
2431
2572
  }
2432
2573
  function PopoverTrigger(_a) {
2433
2574
  var props = __objRest(_a, []);
2434
- return /* @__PURE__ */ jsx23(PopoverPrimitive.Trigger, __spreadValues({ "data-slot": "popover-trigger" }, props));
2575
+ return /* @__PURE__ */ jsx29(PopoverPrimitive.Trigger, __spreadValues({ "data-slot": "popover-trigger" }, props));
2435
2576
  }
2436
2577
  function PopoverContent(_a) {
2437
2578
  var _b = _a, {
@@ -2447,7 +2588,7 @@ function PopoverContent(_a) {
2447
2588
  "side",
2448
2589
  "sideOffset"
2449
2590
  ]);
2450
- return /* @__PURE__ */ jsx23(PopoverPrimitive.Portal, { children: /* @__PURE__ */ jsx23(
2591
+ return /* @__PURE__ */ jsx29(PopoverPrimitive.Portal, { children: /* @__PURE__ */ jsx29(
2451
2592
  PopoverPrimitive.Positioner,
2452
2593
  {
2453
2594
  align,
@@ -2455,11 +2596,11 @@ function PopoverContent(_a) {
2455
2596
  side,
2456
2597
  sideOffset,
2457
2598
  className: "isolate z-50",
2458
- children: /* @__PURE__ */ jsx23(
2599
+ children: /* @__PURE__ */ jsx29(
2459
2600
  PopoverPrimitive.Popup,
2460
2601
  __spreadValues({
2461
2602
  "data-slot": "popover-content",
2462
- className: cn16(
2603
+ className: cn17(
2463
2604
  "z-50 flex w-72 origin-(--transform-origin) flex-col gap-4 rounded-lg bg-popover p-2.5 text-xs text-popover-foreground shadow-md ring-1 ring-foreground/10 outline-hidden duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
2464
2605
  className
2465
2606
  )
@@ -2471,17 +2612,17 @@ function PopoverContent(_a) {
2471
2612
 
2472
2613
  // src/components/ui/select.tsx
2473
2614
  import { Select as SelectPrimitive } from "@base-ui/react/select";
2474
- import { cn as cn17 } from "cn";
2615
+ import { cn as cn18 } from "cn";
2475
2616
  import { CheckIcon as CheckIcon2, ChevronDownIcon as ChevronDownIcon2, ChevronUpIcon } from "lucide-react";
2476
- import { jsx as jsx24, jsxs as jsxs13 } from "react/jsx-runtime";
2617
+ import { jsx as jsx30, jsxs as jsxs17 } from "react/jsx-runtime";
2477
2618
  var Select = SelectPrimitive.Root;
2478
2619
  function SelectValue(_a) {
2479
2620
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
2480
- return /* @__PURE__ */ jsx24(
2621
+ return /* @__PURE__ */ jsx30(
2481
2622
  SelectPrimitive.Value,
2482
2623
  __spreadValues({
2483
2624
  "data-slot": "select-value",
2484
- className: cn17("flex flex-1 text-left", className)
2625
+ className: cn18("flex flex-1 text-left", className)
2485
2626
  }, props)
2486
2627
  );
2487
2628
  }
@@ -2495,22 +2636,22 @@ function SelectTrigger(_a) {
2495
2636
  "size",
2496
2637
  "children"
2497
2638
  ]);
2498
- return /* @__PURE__ */ jsxs13(
2639
+ return /* @__PURE__ */ jsxs17(
2499
2640
  SelectPrimitive.Trigger,
2500
2641
  __spreadProps(__spreadValues({
2501
2642
  "data-slot": "select-trigger",
2502
2643
  "data-size": size,
2503
- className: cn17(
2644
+ className: cn18(
2504
2645
  "flex w-fit items-center justify-between gap-1.5 rounded-md border border-input bg-input/20 px-2 py-1.5 text-xs/relaxed whitespace-nowrap transition-colors outline-none focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/30 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-2 aria-invalid:ring-destructive/20 data-placeholder:text-muted-foreground data-[size=default]:h-7 data-[size=sm]:h-6 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-1.5 dark:bg-input/30 dark:hover:bg-input/50 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-3.5",
2505
2646
  className
2506
2647
  )
2507
2648
  }, props), {
2508
2649
  children: [
2509
2650
  children,
2510
- /* @__PURE__ */ jsx24(
2651
+ /* @__PURE__ */ jsx30(
2511
2652
  SelectPrimitive.Icon,
2512
2653
  {
2513
- render: /* @__PURE__ */ jsx24(ChevronDownIcon2, { className: "pointer-events-none size-3.5 text-muted-foreground" })
2654
+ render: /* @__PURE__ */ jsx30(ChevronDownIcon2, { className: "pointer-events-none size-3.5 text-muted-foreground" })
2514
2655
  }
2515
2656
  )
2516
2657
  ]
@@ -2535,7 +2676,7 @@ function SelectContent(_a) {
2535
2676
  "alignOffset",
2536
2677
  "alignItemWithTrigger"
2537
2678
  ]);
2538
- return /* @__PURE__ */ jsx24(SelectPrimitive.Portal, { children: /* @__PURE__ */ jsx24(
2679
+ return /* @__PURE__ */ jsx30(SelectPrimitive.Portal, { children: /* @__PURE__ */ jsx30(
2539
2680
  SelectPrimitive.Positioner,
2540
2681
  {
2541
2682
  side,
@@ -2544,20 +2685,20 @@ function SelectContent(_a) {
2544
2685
  alignOffset,
2545
2686
  alignItemWithTrigger,
2546
2687
  className: "isolate z-50",
2547
- children: /* @__PURE__ */ jsxs13(
2688
+ children: /* @__PURE__ */ jsxs17(
2548
2689
  SelectPrimitive.Popup,
2549
2690
  __spreadProps(__spreadValues({
2550
2691
  "data-slot": "select-content",
2551
2692
  "data-align-trigger": alignItemWithTrigger,
2552
- className: cn17(
2693
+ className: cn18(
2553
2694
  "relative isolate z-50 max-h-(--available-height) w-(--anchor-width) min-w-32 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-lg bg-popover text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-[align-trigger=true]:animate-none data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
2554
2695
  className
2555
2696
  )
2556
2697
  }, props), {
2557
2698
  children: [
2558
- /* @__PURE__ */ jsx24(SelectScrollUpButton, {}),
2559
- /* @__PURE__ */ jsx24(SelectPrimitive.List, { children }),
2560
- /* @__PURE__ */ jsx24(SelectScrollDownButton, {})
2699
+ /* @__PURE__ */ jsx30(SelectScrollUpButton, {}),
2700
+ /* @__PURE__ */ jsx30(SelectPrimitive.List, { children }),
2701
+ /* @__PURE__ */ jsx30(SelectScrollDownButton, {})
2561
2702
  ]
2562
2703
  })
2563
2704
  )
@@ -2572,22 +2713,22 @@ function SelectItem(_a) {
2572
2713
  "className",
2573
2714
  "children"
2574
2715
  ]);
2575
- return /* @__PURE__ */ jsxs13(
2716
+ return /* @__PURE__ */ jsxs17(
2576
2717
  SelectPrimitive.Item,
2577
2718
  __spreadProps(__spreadValues({
2578
2719
  "data-slot": "select-item",
2579
- className: cn17(
2720
+ className: cn18(
2580
2721
  "relative flex min-h-7 w-full cursor-default items-center gap-2 rounded-md px-2 py-1 text-xs/relaxed outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-3.5 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",
2581
2722
  className
2582
2723
  )
2583
2724
  }, props), {
2584
2725
  children: [
2585
- /* @__PURE__ */ jsx24(SelectPrimitive.ItemText, { className: "flex flex-1 shrink-0 gap-2 whitespace-nowrap", children }),
2586
- /* @__PURE__ */ jsx24(
2726
+ /* @__PURE__ */ jsx30(SelectPrimitive.ItemText, { className: "flex flex-1 shrink-0 gap-2 whitespace-nowrap", children }),
2727
+ /* @__PURE__ */ jsx30(
2587
2728
  SelectPrimitive.ItemIndicator,
2588
2729
  {
2589
- render: /* @__PURE__ */ jsx24("span", { className: "pointer-events-none absolute right-2 flex items-center justify-center" }),
2590
- children: /* @__PURE__ */ jsx24(CheckIcon2, { className: "pointer-events-none" })
2730
+ render: /* @__PURE__ */ jsx30("span", { className: "pointer-events-none absolute right-2 flex items-center justify-center" }),
2731
+ children: /* @__PURE__ */ jsx30(CheckIcon2, { className: "pointer-events-none" })
2591
2732
  }
2592
2733
  )
2593
2734
  ]
@@ -2600,16 +2741,16 @@ function SelectScrollUpButton(_a) {
2600
2741
  } = _b, props = __objRest(_b, [
2601
2742
  "className"
2602
2743
  ]);
2603
- return /* @__PURE__ */ jsx24(
2744
+ return /* @__PURE__ */ jsx30(
2604
2745
  SelectPrimitive.ScrollUpArrow,
2605
2746
  __spreadProps(__spreadValues({
2606
2747
  "data-slot": "select-scroll-up-button",
2607
- className: cn17(
2748
+ className: cn18(
2608
2749
  "top-0 z-10 flex w-full cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-3.5",
2609
2750
  className
2610
2751
  )
2611
2752
  }, props), {
2612
- children: /* @__PURE__ */ jsx24(ChevronUpIcon, {})
2753
+ children: /* @__PURE__ */ jsx30(ChevronUpIcon, {})
2613
2754
  })
2614
2755
  );
2615
2756
  }
@@ -2619,22 +2760,22 @@ function SelectScrollDownButton(_a) {
2619
2760
  } = _b, props = __objRest(_b, [
2620
2761
  "className"
2621
2762
  ]);
2622
- return /* @__PURE__ */ jsx24(
2763
+ return /* @__PURE__ */ jsx30(
2623
2764
  SelectPrimitive.ScrollDownArrow,
2624
2765
  __spreadProps(__spreadValues({
2625
2766
  "data-slot": "select-scroll-down-button",
2626
- className: cn17(
2767
+ className: cn18(
2627
2768
  "bottom-0 z-10 flex w-full cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-3.5",
2628
2769
  className
2629
2770
  )
2630
2771
  }, props), {
2631
- children: /* @__PURE__ */ jsx24(ChevronDownIcon2, {})
2772
+ children: /* @__PURE__ */ jsx30(ChevronDownIcon2, {})
2632
2773
  })
2633
2774
  );
2634
2775
  }
2635
2776
 
2636
2777
  // src/components/composed/data-table/table-header-filter.tsx
2637
- import { Fragment as Fragment2, jsx as jsx25, jsxs as jsxs14 } from "react/jsx-runtime";
2778
+ import { Fragment as Fragment2, jsx as jsx31, jsxs as jsxs18 } from "react/jsx-runtime";
2638
2779
  function smartFilterFn(row, columnId, filterValue) {
2639
2780
  var _a, _b, _c;
2640
2781
  if (filterValue === void 0 || filterValue === null || filterValue === "" || filterValue === "all") {
@@ -2795,7 +2936,7 @@ function ColumnFilterInput({
2795
2936
  }, [column, table, variant]);
2796
2937
  if (variant === "boolean" || variant === "select") {
2797
2938
  const currentValue = filterValue === void 0 || filterValue === null || filterValue === "" ? "all" : String(filterValue);
2798
- return /* @__PURE__ */ jsx25("div", { className: "relative flex items-center w-full", children: /* @__PURE__ */ jsxs14(
2939
+ return /* @__PURE__ */ jsx31("div", { className: "relative flex items-center w-full", children: /* @__PURE__ */ jsxs18(
2799
2940
  Select,
2800
2941
  {
2801
2942
  value: currentValue,
@@ -2807,13 +2948,13 @@ function ColumnFilterInput({
2807
2948
  }
2808
2949
  },
2809
2950
  children: [
2810
- /* @__PURE__ */ jsx25(
2951
+ /* @__PURE__ */ jsx31(
2811
2952
  SelectTrigger,
2812
2953
  {
2813
2954
  className: "w-full",
2814
2955
  onKeyDown: (e) => e.stopPropagation(),
2815
2956
  onPointerDown: (e) => e.stopPropagation(),
2816
- children: /* @__PURE__ */ jsx25(
2957
+ children: /* @__PURE__ */ jsx31(
2817
2958
  SelectValue,
2818
2959
  {
2819
2960
  placeholder: `Select ${headerText.toLowerCase()}...`,
@@ -2822,9 +2963,9 @@ function ColumnFilterInput({
2822
2963
  )
2823
2964
  }
2824
2965
  ),
2825
- /* @__PURE__ */ jsxs14(SelectContent, { align: "start", children: [
2826
- /* @__PURE__ */ jsx25(SelectItem, { value: "all", children: "All" }),
2827
- options.map((opt) => /* @__PURE__ */ jsx25(
2966
+ /* @__PURE__ */ jsxs18(SelectContent, { align: "start", children: [
2967
+ /* @__PURE__ */ jsx31(SelectItem, { value: "all", children: "All" }),
2968
+ options.map((opt) => /* @__PURE__ */ jsx31(
2828
2969
  SelectItem,
2829
2970
  {
2830
2971
  value: opt.value,
@@ -2851,36 +2992,36 @@ function ColumnFilterInput({
2851
2992
  }
2852
2993
  }
2853
2994
  const formattedDateLabel = dateObj ? format(dateObj, "yyyy-MM-dd") : "";
2854
- return /* @__PURE__ */ jsx25("div", { className: "relative flex items-center w-full", children: /* @__PURE__ */ jsxs14(Popover, { open: calendarOpen, onOpenChange: setCalendarOpen, children: [
2855
- /* @__PURE__ */ jsx25(
2995
+ return /* @__PURE__ */ jsx31("div", { className: "relative flex items-center w-full", children: /* @__PURE__ */ jsxs18(Popover, { open: calendarOpen, onOpenChange: setCalendarOpen, children: [
2996
+ /* @__PURE__ */ jsx31(
2856
2997
  PopoverTrigger,
2857
2998
  {
2858
- render: /* @__PURE__ */ jsxs14(
2999
+ render: /* @__PURE__ */ jsxs18(
2859
3000
  Button,
2860
3001
  {
2861
3002
  variant: "outline",
2862
- className: cn13(
3003
+ className: cn14(
2863
3004
  "w-full justify-start",
2864
3005
  !formattedDateLabel && "text-muted-foreground"
2865
3006
  ),
2866
3007
  onKeyDown: (e) => e.stopPropagation(),
2867
3008
  onPointerDown: (e) => e.stopPropagation(),
2868
3009
  children: [
2869
- /* @__PURE__ */ jsx25(CalendarIcon, { className: "mr-1 size-3 shrink-0" }),
2870
- /* @__PURE__ */ jsx25("span", { className: "truncate", children: formattedDateLabel || `Pick ${headerText.toLowerCase()}...` })
3010
+ /* @__PURE__ */ jsx31(CalendarIcon, { className: "mr-1 size-3 shrink-0" }),
3011
+ /* @__PURE__ */ jsx31("span", { className: "truncate", children: formattedDateLabel || `Pick ${headerText.toLowerCase()}...` })
2871
3012
  ]
2872
3013
  }
2873
3014
  )
2874
3015
  }
2875
3016
  ),
2876
- /* @__PURE__ */ jsx25(
3017
+ /* @__PURE__ */ jsx31(
2877
3018
  PopoverContent,
2878
3019
  {
2879
3020
  className: "w-auto p-0",
2880
3021
  align: "start",
2881
3022
  onPointerDown: (e) => e.stopPropagation(),
2882
3023
  onKeyDown: (e) => e.stopPropagation(),
2883
- children: /* @__PURE__ */ jsx25(
3024
+ children: /* @__PURE__ */ jsx31(
2884
3025
  Calendar,
2885
3026
  {
2886
3027
  mode: "single",
@@ -2899,7 +3040,7 @@ function ColumnFilterInput({
2899
3040
  )
2900
3041
  ] }) });
2901
3042
  }
2902
- return /* @__PURE__ */ jsx25("div", { className: "relative flex items-center w-full", children: /* @__PURE__ */ jsx25(
3043
+ return /* @__PURE__ */ jsx31("div", { className: "relative flex items-center w-full", children: /* @__PURE__ */ jsx31(
2903
3044
  Input,
2904
3045
  {
2905
3046
  id: `filter-${column.id}`,
@@ -2923,39 +3064,39 @@ function DataTableHeaderFilter({
2923
3064
  [table]
2924
3065
  );
2925
3066
  if (filterableColumns.length === 0) return null;
2926
- return /* @__PURE__ */ jsxs14(DropdownMenu, { children: [
2927
- /* @__PURE__ */ jsxs14(Tooltip, { children: [
2928
- /* @__PURE__ */ jsx25(
3067
+ return /* @__PURE__ */ jsxs18(DropdownMenu, { children: [
3068
+ /* @__PURE__ */ jsxs18(Tooltip, { children: [
3069
+ /* @__PURE__ */ jsx31(
2929
3070
  DropdownMenuTrigger,
2930
3071
  {
2931
- render: /* @__PURE__ */ jsx25(
3072
+ render: /* @__PURE__ */ jsx31(
2932
3073
  TooltipTrigger,
2933
3074
  {
2934
- render: /* @__PURE__ */ jsx25(
3075
+ render: /* @__PURE__ */ jsx31(
2935
3076
  Button,
2936
3077
  {
2937
3078
  variant: columnFilters.length > 0 ? "secondary" : "outline",
2938
3079
  size: "icon",
2939
- children: /* @__PURE__ */ jsx25(ListFilterIcon, {})
3080
+ children: /* @__PURE__ */ jsx31(ListFilterIcon, {})
2940
3081
  }
2941
3082
  )
2942
3083
  }
2943
3084
  )
2944
3085
  }
2945
3086
  ),
2946
- /* @__PURE__ */ jsx25(TooltipContent, { children: "Filter options" })
3087
+ /* @__PURE__ */ jsx31(TooltipContent, { children: "Filter options" })
2947
3088
  ] }),
2948
- /* @__PURE__ */ jsx25(DropdownMenuContent, { align: "end", className: "w-80", children: /* @__PURE__ */ jsxs14(DropdownMenuGroup, { children: [
2949
- /* @__PURE__ */ jsx25(DropdownMenuLabel, { children: "Filter by column" }),
2950
- /* @__PURE__ */ jsx25(DropdownMenuSeparator, {}),
2951
- /* @__PURE__ */ jsx25("div", { className: "max-h-64 overflow-y-auto space-y-2.5 p-1", children: filterableColumns.map((column) => {
3089
+ /* @__PURE__ */ jsx31(DropdownMenuContent, { align: "end", className: "w-80", children: /* @__PURE__ */ jsxs18(DropdownMenuGroup, { children: [
3090
+ /* @__PURE__ */ jsx31(DropdownMenuLabel, { children: "Filter by column" }),
3091
+ /* @__PURE__ */ jsx31(DropdownMenuSeparator, {}),
3092
+ /* @__PURE__ */ jsx31("div", { className: "max-h-64 overflow-y-auto space-y-2.5 p-1", children: filterableColumns.map((column) => {
2952
3093
  const headerText = typeof column.columnDef.header === "string" ? column.columnDef.header : column.id;
2953
- return /* @__PURE__ */ jsxs14(
3094
+ return /* @__PURE__ */ jsxs18(
2954
3095
  "div",
2955
3096
  {
2956
3097
  className: "flex items-center justify-between px-1",
2957
3098
  children: [
2958
- /* @__PURE__ */ jsx25(
3099
+ /* @__PURE__ */ jsx31(
2959
3100
  "label",
2960
3101
  {
2961
3102
  htmlFor: `filter-${column.id}`,
@@ -2963,7 +3104,7 @@ function DataTableHeaderFilter({
2963
3104
  children: headerText
2964
3105
  }
2965
3106
  ),
2966
- /* @__PURE__ */ jsx25("div", { className: "flex-1", children: /* @__PURE__ */ jsx25(
3107
+ /* @__PURE__ */ jsx31("div", { className: "flex-1", children: /* @__PURE__ */ jsx31(
2967
3108
  ColumnFilterInput,
2968
3109
  {
2969
3110
  column,
@@ -2976,9 +3117,9 @@ function DataTableHeaderFilter({
2976
3117
  column.id
2977
3118
  );
2978
3119
  }) }),
2979
- columnFilters.length > 0 && /* @__PURE__ */ jsxs14(Fragment2, { children: [
2980
- /* @__PURE__ */ jsx25(DropdownMenuSeparator, {}),
2981
- /* @__PURE__ */ jsx25(
3120
+ columnFilters.length > 0 && /* @__PURE__ */ jsxs18(Fragment2, { children: [
3121
+ /* @__PURE__ */ jsx31(DropdownMenuSeparator, {}),
3122
+ /* @__PURE__ */ jsx31(
2982
3123
  DropdownMenuItem,
2983
3124
  {
2984
3125
  className: "hover:cursor-pointer text-destructive focus:text-destructive",
@@ -2995,7 +3136,7 @@ function DataTableHeaderFilter({
2995
3136
  import { RotateCwIcon } from "lucide-react";
2996
3137
  import { useRouter } from "next/navigation";
2997
3138
  import { useState as useState4 } from "react";
2998
- import { jsx as jsx26, jsxs as jsxs15 } from "react/jsx-runtime";
3139
+ import { jsx as jsx32, jsxs as jsxs19 } from "react/jsx-runtime";
2999
3140
  function DataTableHeaderRefresh() {
3000
3141
  const router = useRouter();
3001
3142
  const [isRefreshing, setIsRefreshing] = useState4(false);
@@ -3006,21 +3147,21 @@ function DataTableHeaderRefresh() {
3006
3147
  setIsRefreshing(false);
3007
3148
  }, 750);
3008
3149
  };
3009
- return /* @__PURE__ */ jsxs15(Tooltip, { children: [
3010
- /* @__PURE__ */ jsx26(
3150
+ return /* @__PURE__ */ jsxs19(Tooltip, { children: [
3151
+ /* @__PURE__ */ jsx32(
3011
3152
  TooltipTrigger,
3012
3153
  {
3013
- render: /* @__PURE__ */ jsx26(
3154
+ render: /* @__PURE__ */ jsx32(
3014
3155
  Button,
3015
3156
  {
3016
3157
  variant: "outline",
3017
3158
  size: "icon",
3018
3159
  onClick: handleRefresh,
3019
3160
  disabled: isRefreshing,
3020
- children: /* @__PURE__ */ jsx26(
3161
+ children: /* @__PURE__ */ jsx32(
3021
3162
  RotateCwIcon,
3022
3163
  {
3023
- className: cn13(
3164
+ className: cn14(
3024
3165
  "transition-transform duration-750",
3025
3166
  isRefreshing && "animate-spin"
3026
3167
  )
@@ -3030,19 +3171,19 @@ function DataTableHeaderRefresh() {
3030
3171
  )
3031
3172
  }
3032
3173
  ),
3033
- /* @__PURE__ */ jsx26(TooltipContent, { children: "Refresh data" })
3174
+ /* @__PURE__ */ jsx32(TooltipContent, { children: "Refresh data" })
3034
3175
  ] });
3035
3176
  }
3036
3177
 
3037
3178
  // src/components/composed/data-table/table-header-search.tsx
3038
3179
  import { XIcon as XIcon2 } from "lucide-react";
3039
- import { jsx as jsx27, jsxs as jsxs16 } from "react/jsx-runtime";
3180
+ import { jsx as jsx33, jsxs as jsxs20 } from "react/jsx-runtime";
3040
3181
  function DataTableHeaderSearch({
3041
3182
  value = "",
3042
3183
  onChange
3043
3184
  }) {
3044
- return /* @__PURE__ */ jsxs16("div", { className: "relative flex items-center max-w-sm w-full", children: [
3045
- /* @__PURE__ */ jsx27(
3185
+ return /* @__PURE__ */ jsxs20("div", { className: "relative flex items-center max-w-sm w-full", children: [
3186
+ /* @__PURE__ */ jsx33(
3046
3187
  Input,
3047
3188
  {
3048
3189
  placeholder: "Search...",
@@ -3051,14 +3192,14 @@ function DataTableHeaderSearch({
3051
3192
  className: "pr-7"
3052
3193
  }
3053
3194
  ),
3054
- Boolean(value) && /* @__PURE__ */ jsx27(
3195
+ Boolean(value) && /* @__PURE__ */ jsx33(
3055
3196
  "button",
3056
3197
  {
3057
3198
  type: "button",
3058
3199
  onClick: () => onChange(""),
3059
3200
  className: "absolute right-2 text-muted-foreground hover:text-foreground p-0.5 rounded cursor-pointer",
3060
3201
  "aria-label": "Clear search text",
3061
- children: /* @__PURE__ */ jsx27(XIcon2, { className: "size-3.5" })
3202
+ children: /* @__PURE__ */ jsx33(XIcon2, { className: "size-3.5" })
3062
3203
  }
3063
3204
  )
3064
3205
  ] });
@@ -3066,41 +3207,41 @@ function DataTableHeaderSearch({
3066
3207
 
3067
3208
  // src/components/composed/data-table/table-header-sort.tsx
3068
3209
  import { ArrowDownIcon, ArrowUpDownIcon, ArrowUpIcon } from "lucide-react";
3069
- import { Fragment as Fragment3, jsx as jsx28, jsxs as jsxs17 } from "react/jsx-runtime";
3210
+ import { Fragment as Fragment3, jsx as jsx34, jsxs as jsxs21 } from "react/jsx-runtime";
3070
3211
  function DataTableHeaderSort({
3071
3212
  table,
3072
3213
  sorting
3073
3214
  }) {
3074
3215
  const sortableColumns = table.getAllColumns().filter((column) => column.getCanSort());
3075
- return /* @__PURE__ */ jsxs17(DropdownMenu, { children: [
3076
- /* @__PURE__ */ jsxs17(Tooltip, { children: [
3077
- /* @__PURE__ */ jsx28(
3216
+ return /* @__PURE__ */ jsxs21(DropdownMenu, { children: [
3217
+ /* @__PURE__ */ jsxs21(Tooltip, { children: [
3218
+ /* @__PURE__ */ jsx34(
3078
3219
  DropdownMenuTrigger,
3079
3220
  {
3080
- render: /* @__PURE__ */ jsx28(
3221
+ render: /* @__PURE__ */ jsx34(
3081
3222
  TooltipTrigger,
3082
3223
  {
3083
- render: /* @__PURE__ */ jsx28(
3224
+ render: /* @__PURE__ */ jsx34(
3084
3225
  Button,
3085
3226
  {
3086
3227
  variant: sorting.length > 0 ? "secondary" : "outline",
3087
3228
  size: "icon",
3088
- children: /* @__PURE__ */ jsx28(ArrowUpDownIcon, {})
3229
+ children: /* @__PURE__ */ jsx34(ArrowUpDownIcon, {})
3089
3230
  }
3090
3231
  )
3091
3232
  }
3092
3233
  )
3093
3234
  }
3094
3235
  ),
3095
- /* @__PURE__ */ jsx28(TooltipContent, { children: "Sort options" })
3236
+ /* @__PURE__ */ jsx34(TooltipContent, { children: "Sort options" })
3096
3237
  ] }),
3097
- /* @__PURE__ */ jsx28(DropdownMenuContent, { align: "end", className: "w-48", children: /* @__PURE__ */ jsxs17(DropdownMenuGroup, { children: [
3098
- /* @__PURE__ */ jsx28(DropdownMenuLabel, { children: "Sort by column" }),
3099
- /* @__PURE__ */ jsx28(DropdownMenuSeparator, {}),
3238
+ /* @__PURE__ */ jsx34(DropdownMenuContent, { align: "end", className: "w-48", children: /* @__PURE__ */ jsxs21(DropdownMenuGroup, { children: [
3239
+ /* @__PURE__ */ jsx34(DropdownMenuLabel, { children: "Sort by column" }),
3240
+ /* @__PURE__ */ jsx34(DropdownMenuSeparator, {}),
3100
3241
  sortableColumns.map((column) => {
3101
3242
  const isSorted = column.getIsSorted();
3102
3243
  const headerText = typeof column.columnDef.header === "string" ? column.columnDef.header : column.id;
3103
- return /* @__PURE__ */ jsxs17(
3244
+ return /* @__PURE__ */ jsxs21(
3104
3245
  DropdownMenuItem,
3105
3246
  {
3106
3247
  className: "flex items-center justify-between hover:cursor-pointer capitalize",
@@ -3115,16 +3256,16 @@ function DataTableHeaderSort({
3115
3256
  },
3116
3257
  children: [
3117
3258
  headerText,
3118
- isSorted === "asc" && /* @__PURE__ */ jsx28(ArrowUpIcon, { className: "size-3.5" }),
3119
- isSorted === "desc" && /* @__PURE__ */ jsx28(ArrowDownIcon, { className: "size-3.5" })
3259
+ isSorted === "asc" && /* @__PURE__ */ jsx34(ArrowUpIcon, { className: "size-3.5" }),
3260
+ isSorted === "desc" && /* @__PURE__ */ jsx34(ArrowDownIcon, { className: "size-3.5" })
3120
3261
  ]
3121
3262
  },
3122
3263
  column.id
3123
3264
  );
3124
3265
  }),
3125
- sorting.length > 0 && /* @__PURE__ */ jsxs17(Fragment3, { children: [
3126
- /* @__PURE__ */ jsx28(DropdownMenuSeparator, {}),
3127
- /* @__PURE__ */ jsx28(
3266
+ sorting.length > 0 && /* @__PURE__ */ jsxs21(Fragment3, { children: [
3267
+ /* @__PURE__ */ jsx34(DropdownMenuSeparator, {}),
3268
+ /* @__PURE__ */ jsx34(
3128
3269
  DropdownMenuItem,
3129
3270
  {
3130
3271
  className: "hover:cursor-pointer text-destructive focus:text-destructive",
@@ -3139,33 +3280,33 @@ function DataTableHeaderSort({
3139
3280
 
3140
3281
  // src/components/composed/data-table/table-header-toggle.tsx
3141
3282
  import { Columns3CogIcon } from "lucide-react";
3142
- import { jsx as jsx29, jsxs as jsxs18 } from "react/jsx-runtime";
3283
+ import { jsx as jsx35, jsxs as jsxs22 } from "react/jsx-runtime";
3143
3284
  function DataTableHeaderToggle({
3144
3285
  table
3145
3286
  }) {
3146
- return /* @__PURE__ */ jsxs18(DropdownMenu, { children: [
3147
- /* @__PURE__ */ jsxs18(Tooltip, { children: [
3148
- /* @__PURE__ */ jsx29(
3287
+ return /* @__PURE__ */ jsxs22(DropdownMenu, { children: [
3288
+ /* @__PURE__ */ jsxs22(Tooltip, { children: [
3289
+ /* @__PURE__ */ jsx35(
3149
3290
  DropdownMenuTrigger,
3150
3291
  {
3151
- render: /* @__PURE__ */ jsx29(
3292
+ render: /* @__PURE__ */ jsx35(
3152
3293
  TooltipTrigger,
3153
3294
  {
3154
- render: /* @__PURE__ */ jsx29(Button, { variant: "outline", size: "icon", children: /* @__PURE__ */ jsx29(Columns3CogIcon, {}) })
3295
+ render: /* @__PURE__ */ jsx35(Button, { variant: "outline", size: "icon", children: /* @__PURE__ */ jsx35(Columns3CogIcon, {}) })
3155
3296
  }
3156
3297
  )
3157
3298
  }
3158
3299
  ),
3159
- /* @__PURE__ */ jsx29(TooltipContent, { children: "Toggle columns" })
3300
+ /* @__PURE__ */ jsx35(TooltipContent, { children: "Toggle columns" })
3160
3301
  ] }),
3161
- /* @__PURE__ */ jsx29(DropdownMenuContent, { align: "end", className: "w-48", children: /* @__PURE__ */ jsxs18(DropdownMenuGroup, { children: [
3162
- /* @__PURE__ */ jsx29(DropdownMenuLabel, { children: "Toggle columns" }),
3163
- /* @__PURE__ */ jsx29(DropdownMenuSeparator, {}),
3302
+ /* @__PURE__ */ jsx35(DropdownMenuContent, { align: "end", className: "w-48", children: /* @__PURE__ */ jsxs22(DropdownMenuGroup, { children: [
3303
+ /* @__PURE__ */ jsx35(DropdownMenuLabel, { children: "Toggle columns" }),
3304
+ /* @__PURE__ */ jsx35(DropdownMenuSeparator, {}),
3164
3305
  table.getAllColumns().filter(
3165
3306
  (column) => typeof column.accessorFn !== "undefined" && column.getCanHide()
3166
3307
  ).map((column) => {
3167
3308
  const headerText = typeof column.columnDef.header === "string" ? column.columnDef.header : column.id;
3168
- return /* @__PURE__ */ jsx29(
3309
+ return /* @__PURE__ */ jsx35(
3169
3310
  DropdownMenuCheckboxItem,
3170
3311
  {
3171
3312
  className: "capitalize hover:cursor-pointer",
@@ -3183,7 +3324,7 @@ function DataTableHeaderToggle({
3183
3324
  // src/components/composed/data-table/data-row-actions.tsx
3184
3325
  import { MoreHorizontal } from "lucide-react";
3185
3326
  import { Fragment as Fragment4 } from "react";
3186
- import { Fragment as Fragment5, jsx as jsx30, jsxs as jsxs19 } from "react/jsx-runtime";
3327
+ import { Fragment as Fragment5, jsx as jsx36, jsxs as jsxs23 } from "react/jsx-runtime";
3187
3328
  function RowActions({
3188
3329
  label = "Actions",
3189
3330
  items = [],
@@ -3197,50 +3338,50 @@ function RowActions({
3197
3338
  if (visibleItems.length === 0) {
3198
3339
  return null;
3199
3340
  }
3200
- return /* @__PURE__ */ jsx30(
3341
+ return /* @__PURE__ */ jsx36(
3201
3342
  "div",
3202
3343
  {
3203
- className: cn13("flex items-center justify-end w-full", containerClassName),
3204
- children: /* @__PURE__ */ jsxs19(DropdownMenu, { children: [
3205
- /* @__PURE__ */ jsx30(
3344
+ className: cn14("flex items-center justify-end w-full", containerClassName),
3345
+ children: /* @__PURE__ */ jsxs23(DropdownMenu, { children: [
3346
+ /* @__PURE__ */ jsx36(
3206
3347
  DropdownMenuTrigger,
3207
3348
  {
3208
- render: /* @__PURE__ */ jsx30(Button, { variant: "ghost", size: "icon-xs", "aria-label": triggerLabel, children: triggerIcon != null ? triggerIcon : /* @__PURE__ */ jsx30(MoreHorizontal, { className: "size-4" }) })
3349
+ render: /* @__PURE__ */ jsx36(Button, { variant: "ghost", size: "icon-xs", "aria-label": triggerLabel, children: triggerIcon != null ? triggerIcon : /* @__PURE__ */ jsx36(MoreHorizontal, { className: "size-4" }) })
3209
3350
  }
3210
3351
  ),
3211
- /* @__PURE__ */ jsx30(
3352
+ /* @__PURE__ */ jsx36(
3212
3353
  DropdownMenuContent,
3213
3354
  {
3214
3355
  align,
3215
- className: cn13("w-40", contentClassName),
3216
- children: /* @__PURE__ */ jsxs19(DropdownMenuGroup, { children: [
3217
- label && /* @__PURE__ */ jsxs19(Fragment5, { children: [
3218
- /* @__PURE__ */ jsx30(DropdownMenuLabel, { children: label }),
3219
- /* @__PURE__ */ jsx30(DropdownMenuSeparator, {})
3356
+ className: cn14("w-40", contentClassName),
3357
+ children: /* @__PURE__ */ jsxs23(DropdownMenuGroup, { children: [
3358
+ label && /* @__PURE__ */ jsxs23(Fragment5, { children: [
3359
+ /* @__PURE__ */ jsx36(DropdownMenuLabel, { children: label }),
3360
+ /* @__PURE__ */ jsx36(DropdownMenuSeparator, {})
3220
3361
  ] }),
3221
3362
  visibleItems.map((item, index) => {
3222
3363
  var _a;
3223
3364
  const itemKey = (_a = item.id) != null ? _a : `${item.label}-${index}`;
3224
3365
  const isDestructive = item.variant === "destructive";
3225
- return /* @__PURE__ */ jsxs19(Fragment4, { children: [
3226
- item.separatorBefore && /* @__PURE__ */ jsx30(DropdownMenuSeparator, {}),
3227
- /* @__PURE__ */ jsxs19(
3366
+ return /* @__PURE__ */ jsxs23(Fragment4, { children: [
3367
+ item.separatorBefore && /* @__PURE__ */ jsx36(DropdownMenuSeparator, {}),
3368
+ /* @__PURE__ */ jsxs23(
3228
3369
  DropdownMenuItem,
3229
3370
  {
3230
3371
  onClick: item.onClick,
3231
3372
  disabled: item.disabled,
3232
- className: cn13(
3373
+ className: cn14(
3233
3374
  "hover:cursor-pointer flex items-center gap-2",
3234
3375
  isDestructive && "text-destructive focus:text-destructive",
3235
3376
  item.className
3236
3377
  ),
3237
3378
  children: [
3238
- item.icon && /* @__PURE__ */ jsx30("span", { className: "size-4 shrink-0 flex items-center justify-center", children: item.icon }),
3239
- /* @__PURE__ */ jsx30("span", { children: item.label })
3379
+ item.icon && /* @__PURE__ */ jsx36("span", { className: "size-4 shrink-0 flex items-center justify-center", children: item.icon }),
3380
+ /* @__PURE__ */ jsx36("span", { children: item.label })
3240
3381
  ]
3241
3382
  }
3242
3383
  ),
3243
- item.separatorAfter && /* @__PURE__ */ jsx30(DropdownMenuSeparator, {})
3384
+ item.separatorAfter && /* @__PURE__ */ jsx36(DropdownMenuSeparator, {})
3244
3385
  ] }, itemKey);
3245
3386
  })
3246
3387
  ] })
@@ -3252,7 +3393,7 @@ function RowActions({
3252
3393
  }
3253
3394
 
3254
3395
  // src/components/composed/data-table/data-table.tsx
3255
- import { jsx as jsx31, jsxs as jsxs20 } from "react/jsx-runtime";
3396
+ import { jsx as jsx37, jsxs as jsxs24 } from "react/jsx-runtime";
3256
3397
  function DataTable({
3257
3398
  columns,
3258
3399
  data,
@@ -3305,12 +3446,12 @@ function DataTable({
3305
3446
  });
3306
3447
  if (data.length === 0) {
3307
3448
  const hasCreateAction = Boolean(renderCreateDialog);
3308
- return /* @__PURE__ */ jsxs20("div", { className: "space-y-2", children: [
3309
- /* @__PURE__ */ jsx31(
3449
+ return /* @__PURE__ */ jsxs24("div", { className: "space-y-2", children: [
3450
+ /* @__PURE__ */ jsx37(
3310
3451
  StateEmpty,
3311
3452
  {
3312
3453
  state: "outline",
3313
- icon: /* @__PURE__ */ jsx31(FolderOpenIcon, { className: "size-6 text-muted-foreground" }),
3454
+ icon: /* @__PURE__ */ jsx37(FolderOpenIcon, { className: "size-6 text-muted-foreground" }),
3314
3455
  title: "No Data Available",
3315
3456
  description: "There are currently no records to display. Create a new record to get started.",
3316
3457
  buttonText: hasCreateAction ? addLabel != null ? addLabel : "Add Record" : "Refresh",
@@ -3320,26 +3461,26 @@ function DataTable({
3320
3461
  renderCreateDialog == null ? void 0 : renderCreateDialog(createOpen, setCreateOpen)
3321
3462
  ] });
3322
3463
  }
3323
- return /* @__PURE__ */ jsxs20("div", { className: "space-y-2", children: [
3324
- /* @__PURE__ */ jsxs20("div", { className: "flex flex-row items-center justify-between gap-1", children: [
3325
- showSearchInput ? /* @__PURE__ */ jsx31(
3464
+ return /* @__PURE__ */ jsxs24("div", { className: "space-y-2", children: [
3465
+ /* @__PURE__ */ jsxs24("div", { className: "flex flex-row items-center justify-between gap-1", children: [
3466
+ showSearchInput ? /* @__PURE__ */ jsx37(
3326
3467
  DataTableHeaderSearch,
3327
3468
  {
3328
3469
  value: globalFilter,
3329
3470
  onChange: setGlobalFilter
3330
3471
  }
3331
- ) : /* @__PURE__ */ jsx31("div", {}),
3332
- /* @__PURE__ */ jsxs20("div", { className: "flex flex-row items-center gap-1", children: [
3333
- showRefreshButton && /* @__PURE__ */ jsx31(DataTableHeaderRefresh, {}),
3334
- showSortButton && /* @__PURE__ */ jsx31(DataTableHeaderSort, { table, sorting }),
3335
- showFilterButton && /* @__PURE__ */ jsx31(
3472
+ ) : /* @__PURE__ */ jsx37("div", {}),
3473
+ /* @__PURE__ */ jsxs24("div", { className: "flex flex-row items-center gap-1", children: [
3474
+ showRefreshButton && /* @__PURE__ */ jsx37(DataTableHeaderRefresh, {}),
3475
+ showSortButton && /* @__PURE__ */ jsx37(DataTableHeaderSort, { table, sorting }),
3476
+ showFilterButton && /* @__PURE__ */ jsx37(
3336
3477
  DataTableHeaderFilter,
3337
3478
  {
3338
3479
  table,
3339
3480
  columnFilters
3340
3481
  }
3341
3482
  ),
3342
- showDownloadButton && /* @__PURE__ */ jsx31(
3483
+ showDownloadButton && /* @__PURE__ */ jsx37(
3343
3484
  DataTableHeaderDownload,
3344
3485
  {
3345
3486
  table,
@@ -3347,8 +3488,8 @@ function DataTable({
3347
3488
  onDownload
3348
3489
  }
3349
3490
  ),
3350
- showColumnToggleButton && /* @__PURE__ */ jsx31(DataTableHeaderToggle, { table }),
3351
- showAddButton && renderCreateDialog && /* @__PURE__ */ jsx31(
3491
+ showColumnToggleButton && /* @__PURE__ */ jsx37(DataTableHeaderToggle, { table }),
3492
+ showAddButton && renderCreateDialog && /* @__PURE__ */ jsx37(
3352
3493
  DataTableHeaderAdd,
3353
3494
  {
3354
3495
  onAdd: () => setCreateOpen(true),
@@ -3358,13 +3499,13 @@ function DataTable({
3358
3499
  ] })
3359
3500
  ] }),
3360
3501
  renderCreateDialog == null ? void 0 : renderCreateDialog(createOpen, setCreateOpen),
3361
- /* @__PURE__ */ jsx31("div", { className: "overflow-hidden rounded-md border [&_[data-slot=table-container]]:no-scrollbar", children: /* @__PURE__ */ jsxs20(Table, { children: [
3362
- /* @__PURE__ */ jsx31(DataTableContentHeader, { table }),
3363
- /* @__PURE__ */ jsx31(DataTableContentBody, { table, columns })
3502
+ /* @__PURE__ */ jsx37("div", { className: "overflow-hidden rounded-md border [&_[data-slot=table-container]]:no-scrollbar", children: /* @__PURE__ */ jsxs24(Table, { children: [
3503
+ /* @__PURE__ */ jsx37(DataTableContentHeader, { table }),
3504
+ /* @__PURE__ */ jsx37(DataTableContentBody, { table, columns })
3364
3505
  ] }) }),
3365
- /* @__PURE__ */ jsxs20("div", { className: "flex items-center justify-between px-2", children: [
3366
- /* @__PURE__ */ jsx31(DataTableFooterEntries, { table }),
3367
- /* @__PURE__ */ jsx31(DataTableFooterPagination, { table })
3506
+ /* @__PURE__ */ jsxs24("div", { className: "flex items-center justify-between px-2", children: [
3507
+ /* @__PURE__ */ jsx37(DataTableFooterEntries, { table }),
3508
+ /* @__PURE__ */ jsx37(DataTableFooterPagination, { table })
3368
3509
  ] })
3369
3510
  ] });
3370
3511
  }
@@ -3372,13 +3513,13 @@ function DataTable({
3372
3513
  // src/components/composed/header-tabs.tsx
3373
3514
  import Link2 from "next/link";
3374
3515
  import { usePathname as usePathname2 } from "next/navigation";
3375
- import { memo as memo3 } from "react";
3516
+ import { memo as memo9 } from "react";
3376
3517
 
3377
3518
  // src/components/ui/tabs.tsx
3378
3519
  import { Tabs as TabsPrimitive } from "@base-ui/react/tabs";
3379
- import { cva as cva4 } from "class-variance-authority";
3380
- import { cn as cn18 } from "cn";
3381
- import { jsx as jsx32 } from "react/jsx-runtime";
3520
+ import { cva as cva5 } from "class-variance-authority";
3521
+ import { cn as cn19 } from "cn";
3522
+ import { jsx as jsx38 } from "react/jsx-runtime";
3382
3523
  function Tabs(_a) {
3383
3524
  var _b = _a, {
3384
3525
  className,
@@ -3387,19 +3528,19 @@ function Tabs(_a) {
3387
3528
  "className",
3388
3529
  "orientation"
3389
3530
  ]);
3390
- return /* @__PURE__ */ jsx32(
3531
+ return /* @__PURE__ */ jsx38(
3391
3532
  TabsPrimitive.Root,
3392
3533
  __spreadValues({
3393
3534
  "data-slot": "tabs",
3394
3535
  "data-orientation": orientation,
3395
- className: cn18(
3536
+ className: cn19(
3396
3537
  "group/tabs flex gap-2 data-horizontal:flex-col",
3397
3538
  className
3398
3539
  )
3399
3540
  }, props)
3400
3541
  );
3401
3542
  }
3402
- var tabsListVariants = cva4(
3543
+ var tabsListVariants = cva5(
3403
3544
  "group/tabs-list inline-flex w-fit items-center justify-center rounded-lg p-[3px] text-muted-foreground group-data-horizontal/tabs:h-8 group-data-vertical/tabs:h-fit group-data-vertical/tabs:flex-col data-[variant=line]:rounded-none",
3404
3545
  {
3405
3546
  variants: {
@@ -3421,22 +3562,22 @@ function TabsList(_a) {
3421
3562
  "className",
3422
3563
  "variant"
3423
3564
  ]);
3424
- return /* @__PURE__ */ jsx32(
3565
+ return /* @__PURE__ */ jsx38(
3425
3566
  TabsPrimitive.List,
3426
3567
  __spreadValues({
3427
3568
  "data-slot": "tabs-list",
3428
3569
  "data-variant": variant,
3429
- className: cn18(tabsListVariants({ variant }), className)
3570
+ className: cn19(tabsListVariants({ variant }), className)
3430
3571
  }, props)
3431
3572
  );
3432
3573
  }
3433
3574
  function TabsTrigger(_a) {
3434
3575
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
3435
- return /* @__PURE__ */ jsx32(
3576
+ return /* @__PURE__ */ jsx38(
3436
3577
  TabsPrimitive.Tab,
3437
3578
  __spreadValues({
3438
3579
  "data-slot": "tabs-trigger",
3439
- className: cn18(
3580
+ className: cn19(
3440
3581
  "relative inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-1.5 py-0.5 text-xs font-medium whitespace-nowrap text-foreground/60 transition-all group-data-vertical/tabs:w-full group-data-vertical/tabs:justify-start group-data-vertical/tabs:py-[calc(--spacing(1.25))] hover:text-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1 focus-visible:outline-ring disabled:pointer-events-none disabled:opacity-50 has-data-[icon=inline-end]:pr-1 has-data-[icon=inline-start]:pl-1 aria-disabled:pointer-events-none aria-disabled:opacity-50 dark:text-muted-foreground dark:hover:text-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-3.5",
3441
3582
  "group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-active:bg-transparent dark:group-data-[variant=line]/tabs-list:data-active:border-transparent dark:group-data-[variant=line]/tabs-list:data-active:bg-transparent",
3442
3583
  "data-active:bg-background data-active:text-foreground dark:data-active:border-input dark:data-active:bg-input/30 dark:data-active:text-foreground",
@@ -3448,16 +3589,16 @@ function TabsTrigger(_a) {
3448
3589
  }
3449
3590
 
3450
3591
  // src/components/composed/header-tabs.tsx
3451
- import { jsx as jsx33, jsxs as jsxs21 } from "react/jsx-runtime";
3592
+ import { jsx as jsx39, jsxs as jsxs25 } from "react/jsx-runtime";
3452
3593
  function renderTabIcon(icon) {
3453
3594
  if (!icon) return null;
3454
3595
  if (typeof icon === "function" || typeof icon === "object" && icon !== null && "render" in icon) {
3455
3596
  const IconComp = icon;
3456
- return /* @__PURE__ */ jsx33(IconComp, {});
3597
+ return /* @__PURE__ */ jsx39(IconComp, {});
3457
3598
  }
3458
3599
  return icon;
3459
3600
  }
3460
- var HeaderTabs = memo3(function HeaderTabs2({
3601
+ var HeaderTabs = memo9(function HeaderTabs2({
3461
3602
  items,
3462
3603
  value,
3463
3604
  onValueChange,
@@ -3469,12 +3610,12 @@ var HeaderTabs = memo3(function HeaderTabs2({
3469
3610
  (item) => item.url === pathname || pathname.endsWith(item.url) || pathname.split("/").includes(item.value)
3470
3611
  ) : void 0;
3471
3612
  const activeTab = (_b = value != null ? value : matchedItem == null ? void 0 : matchedItem.value) != null ? _b : (_a = items[0]) == null ? void 0 : _a.value;
3472
- return /* @__PURE__ */ jsxs21(Tabs, { value: activeTab, onValueChange, className: "space-y-4", children: [
3473
- /* @__PURE__ */ jsx33("div", { className: "w-full overflow-x-auto overflow-y-hidden border-b no-scrollbar", children: /* @__PURE__ */ jsx33(TabsList, { variant: "line", className: "inline-flex w-max justify-start", children: items.map(({ title, value: tabValue, url, icon }) => /* @__PURE__ */ jsxs21(
3613
+ return /* @__PURE__ */ jsxs25(Tabs, { value: activeTab, onValueChange, className: "space-y-4", children: [
3614
+ /* @__PURE__ */ jsx39("div", { className: "w-full overflow-x-auto overflow-y-hidden border-b no-scrollbar", children: /* @__PURE__ */ jsx39(TabsList, { variant: "line", className: "inline-flex w-max justify-start", children: items.map(({ title, value: tabValue, url, icon }) => /* @__PURE__ */ jsxs25(
3474
3615
  TabsTrigger,
3475
3616
  {
3476
3617
  nativeButton: false,
3477
- render: /* @__PURE__ */ jsx33(Link2, { href: url }),
3618
+ render: /* @__PURE__ */ jsx39(Link2, { href: url }),
3478
3619
  value: tabValue,
3479
3620
  children: [
3480
3621
  renderTabIcon(icon),
@@ -3488,23 +3629,542 @@ var HeaderTabs = memo3(function HeaderTabs2({
3488
3629
  });
3489
3630
 
3490
3631
  // src/components/composed/header-title.tsx
3491
- import { memo as memo4 } from "react";
3492
- import { jsx as jsx34, jsxs as jsxs22 } from "react/jsx-runtime";
3493
- var HeaderTitle = memo4(function HeaderTitle2({
3632
+ import { memo as memo10 } from "react";
3633
+ import { jsx as jsx40, jsxs as jsxs26 } from "react/jsx-runtime";
3634
+ var HeaderTitle = memo10(function HeaderTitle2({
3494
3635
  title,
3495
3636
  subtitle,
3496
3637
  children
3497
3638
  }) {
3498
- return /* @__PURE__ */ jsxs22("div", { className: "w-full space-y-4", children: [
3499
- /* @__PURE__ */ jsxs22("div", { children: [
3500
- /* @__PURE__ */ jsx34("h1", { className: "font-semibold", children: title }),
3501
- /* @__PURE__ */ jsx34("p", { className: "text-xs text-muted-foreground", children: subtitle })
3639
+ return /* @__PURE__ */ jsxs26("div", { className: "w-full space-y-4", children: [
3640
+ /* @__PURE__ */ jsxs26("div", { children: [
3641
+ /* @__PURE__ */ jsx40("h1", { className: "font-semibold", children: title }),
3642
+ /* @__PURE__ */ jsx40("p", { className: "text-xs text-muted-foreground", children: subtitle })
3502
3643
  ] }),
3503
3644
  children
3504
3645
  ] });
3505
3646
  });
3647
+
3648
+ // src/components/composed/icons/google.tsx
3649
+ import { jsx as jsx41, jsxs as jsxs27 } from "react/jsx-runtime";
3650
+ function GoogleIcon(_a) {
3651
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
3652
+ return /* @__PURE__ */ jsxs27(
3653
+ "svg",
3654
+ __spreadProps(__spreadValues({
3655
+ role: "img",
3656
+ viewBox: "0 0 24 24",
3657
+ "aria-label": "Google logo",
3658
+ className,
3659
+ xmlns: "http://www.w3.org/2000/svg"
3660
+ }, props), {
3661
+ children: [
3662
+ /* @__PURE__ */ jsx41(
3663
+ "path",
3664
+ {
3665
+ fill: "#4285F4",
3666
+ d: "M23.745 12.27c0-.7-.06-1.4-.19-2.07H12v4.51h6.6c-.29 1.52-1.14 2.82-2.4 3.68v3.05h3.88c2.27-2.09 3.665-5.17 3.665-9.17z"
3667
+ }
3668
+ ),
3669
+ /* @__PURE__ */ jsx41(
3670
+ "path",
3671
+ {
3672
+ fill: "#34A853",
3673
+ d: "M12 24c3.24 0 5.95-1.08 7.93-2.91l-3.88-3.05c-1.08.72-2.45 1.16-4.05 1.16-3.12 0-5.77-2.1-6.72-4.93H1.24v3.15C3.26 21.36 7.33 24 12 24z"
3674
+ }
3675
+ ),
3676
+ /* @__PURE__ */ jsx41(
3677
+ "path",
3678
+ {
3679
+ fill: "#FBBC05",
3680
+ d: "M5.28 14.27c-.25-.72-.38-1.49-.38-2.27s.13-1.55.38-2.27V6.58H1.24C.45 8.16 0 9.97 0 12s.45 3.84 1.24 5.42l4.04-3.15z"
3681
+ }
3682
+ ),
3683
+ /* @__PURE__ */ jsx41(
3684
+ "path",
3685
+ {
3686
+ fill: "#EA4335",
3687
+ d: "M12 4.75c1.77 0 3.35.61 4.6 1.8l3.42-3.42C17.95 1.19 15.24 0 12 0 7.33 0 3.26 2.64 1.24 6.58l4.04 3.15c.95-2.83 3.6-4.98 6.72-4.98z"
3688
+ }
3689
+ )
3690
+ ]
3691
+ })
3692
+ );
3693
+ }
3694
+
3695
+ // src/components/composed/login-server.tsx
3696
+ import { zodResolver } from "@hookform/resolvers/zod";
3697
+ import { cn as cn24 } from "cn";
3698
+ import {
3699
+ GalleryVerticalEndIcon,
3700
+ LoaderCircleIcon,
3701
+ LogInIcon
3702
+ } from "lucide-react";
3703
+ import Link3 from "next/link";
3704
+ import { useState as useState6 } from "react";
3705
+ import { Controller, useForm } from "react-hook-form";
3706
+ import { z } from "zod";
3707
+
3708
+ // src/components/ui/card.tsx
3709
+ import { cn as cn20 } from "cn";
3710
+ import { jsx as jsx42 } from "react/jsx-runtime";
3711
+ function Card(_a) {
3712
+ var _b = _a, {
3713
+ className,
3714
+ size = "default"
3715
+ } = _b, props = __objRest(_b, [
3716
+ "className",
3717
+ "size"
3718
+ ]);
3719
+ return /* @__PURE__ */ jsx42(
3720
+ "div",
3721
+ __spreadValues({
3722
+ "data-slot": "card",
3723
+ "data-size": size,
3724
+ className: cn20(
3725
+ "group/card flex flex-col gap-(--card-spacing) overflow-hidden rounded-lg bg-card py-(--card-spacing) text-xs/relaxed text-card-foreground ring-1 ring-foreground/10 [--card-spacing:--spacing(4)] has-[>img:first-child]:pt-0 data-[size=sm]:[--card-spacing:--spacing(3)] *:[img:first-child]:rounded-t-lg *:[img:last-child]:rounded-b-lg",
3726
+ className
3727
+ )
3728
+ }, props)
3729
+ );
3730
+ }
3731
+ function CardHeader(_a) {
3732
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
3733
+ return /* @__PURE__ */ jsx42(
3734
+ "div",
3735
+ __spreadValues({
3736
+ "data-slot": "card-header",
3737
+ className: cn20(
3738
+ "group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-lg px-(--card-spacing) has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-(--card-spacing)",
3739
+ className
3740
+ )
3741
+ }, props)
3742
+ );
3743
+ }
3744
+ function CardTitle(_a) {
3745
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
3746
+ return /* @__PURE__ */ jsx42(
3747
+ "div",
3748
+ __spreadValues({
3749
+ "data-slot": "card-title",
3750
+ className: cn20("font-heading text-sm font-medium", className)
3751
+ }, props)
3752
+ );
3753
+ }
3754
+ function CardDescription(_a) {
3755
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
3756
+ return /* @__PURE__ */ jsx42(
3757
+ "div",
3758
+ __spreadValues({
3759
+ "data-slot": "card-description",
3760
+ className: cn20("text-xs/relaxed text-muted-foreground", className)
3761
+ }, props)
3762
+ );
3763
+ }
3764
+ function CardContent(_a) {
3765
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
3766
+ return /* @__PURE__ */ jsx42(
3767
+ "div",
3768
+ __spreadValues({
3769
+ "data-slot": "card-content",
3770
+ className: cn20("px-(--card-spacing)", className)
3771
+ }, props)
3772
+ );
3773
+ }
3774
+
3775
+ // src/components/ui/field.tsx
3776
+ import { cva as cva6 } from "class-variance-authority";
3777
+ import { cn as cn22 } from "cn";
3778
+ import { useMemo as useMemo4 } from "react";
3779
+
3780
+ // src/components/ui/label.tsx
3781
+ import { cn as cn21 } from "cn";
3782
+ import { jsx as jsx43 } from "react/jsx-runtime";
3783
+ function Label(_a) {
3784
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
3785
+ return /* @__PURE__ */ jsx43(
3786
+ "label",
3787
+ __spreadValues({
3788
+ "data-slot": "label",
3789
+ className: cn21(
3790
+ "flex items-center gap-2 text-xs/relaxed leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",
3791
+ className
3792
+ )
3793
+ }, props)
3794
+ );
3795
+ }
3796
+
3797
+ // src/components/ui/field.tsx
3798
+ import { jsx as jsx44, jsxs as jsxs28 } from "react/jsx-runtime";
3799
+ function FieldGroup(_a) {
3800
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
3801
+ return /* @__PURE__ */ jsx44(
3802
+ "div",
3803
+ __spreadValues({
3804
+ "data-slot": "field-group",
3805
+ className: cn22(
3806
+ "group/field-group @container/field-group flex w-full flex-col gap-4 data-[slot=checkbox-group]:gap-3 *:data-[slot=field-group]:gap-4",
3807
+ className
3808
+ )
3809
+ }, props)
3810
+ );
3811
+ }
3812
+ var fieldVariants = cva6(
3813
+ "group/field flex w-full gap-2 data-[invalid=true]:text-destructive",
3814
+ {
3815
+ variants: {
3816
+ orientation: {
3817
+ vertical: "flex-col *:w-full [&>.sr-only]:w-auto",
3818
+ horizontal: "flex-row items-center has-[>[data-slot=field-content]]:items-start *:data-[slot=field-label]:flex-auto has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px",
3819
+ responsive: "flex-col *:w-full @md/field-group:flex-row @md/field-group:items-center @md/field-group:*:w-auto @md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:*:data-[slot=field-label]:flex-auto [&>.sr-only]:w-auto @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px"
3820
+ }
3821
+ },
3822
+ defaultVariants: {
3823
+ orientation: "vertical"
3824
+ }
3825
+ }
3826
+ );
3827
+ function Field(_a) {
3828
+ var _b = _a, {
3829
+ className,
3830
+ orientation = "vertical"
3831
+ } = _b, props = __objRest(_b, [
3832
+ "className",
3833
+ "orientation"
3834
+ ]);
3835
+ return /* @__PURE__ */ jsx44(
3836
+ "div",
3837
+ __spreadValues({
3838
+ role: "group",
3839
+ "data-slot": "field",
3840
+ "data-orientation": orientation,
3841
+ className: cn22(fieldVariants({ orientation }), className)
3842
+ }, props)
3843
+ );
3844
+ }
3845
+ function FieldLabel(_a) {
3846
+ var _b = _a, {
3847
+ className
3848
+ } = _b, props = __objRest(_b, [
3849
+ "className"
3850
+ ]);
3851
+ return /* @__PURE__ */ jsx44(
3852
+ Label,
3853
+ __spreadValues({
3854
+ "data-slot": "field-label",
3855
+ className: cn22(
3856
+ "group/field-label peer/field-label flex w-fit gap-2 leading-snug group-data-[disabled=true]/field:opacity-50 has-data-checked:bg-primary/5 has-[>[data-slot=field]]:rounded-md has-[>[data-slot=field]]:border has-[>[data-slot=field]]:not-has-[:disabled,[data-disabled]]:hover:bg-input/40 has-[>[data-slot=field]]:has-[:focus-visible]:border-ring has-[>[data-slot=field]]:has-[:focus-visible]:ring-2 has-[>[data-slot=field]]:has-[:focus-visible]:ring-ring/30 *:data-[slot=field]:p-2 dark:has-data-checked:bg-primary/10",
3857
+ "has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col",
3858
+ className
3859
+ )
3860
+ }, props)
3861
+ );
3862
+ }
3863
+ function FieldDescription(_a) {
3864
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
3865
+ return /* @__PURE__ */ jsx44(
3866
+ "p",
3867
+ __spreadValues({
3868
+ "data-slot": "field-description",
3869
+ className: cn22(
3870
+ "text-left text-xs/relaxed leading-normal font-normal text-muted-foreground group-has-data-horizontal/field:text-balance [[data-variant=legend]+&]:-mt-1.5",
3871
+ "last:mt-0 nth-last-2:-mt-1",
3872
+ "[&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary",
3873
+ className
3874
+ )
3875
+ }, props)
3876
+ );
3877
+ }
3878
+ function FieldSeparator(_a) {
3879
+ var _b = _a, {
3880
+ children,
3881
+ className
3882
+ } = _b, props = __objRest(_b, [
3883
+ "children",
3884
+ "className"
3885
+ ]);
3886
+ return /* @__PURE__ */ jsxs28(
3887
+ "div",
3888
+ __spreadProps(__spreadValues({
3889
+ "data-slot": "field-separator",
3890
+ "data-content": !!children,
3891
+ className: cn22(
3892
+ "relative -my-2 h-5 text-xs/relaxed group-data-[variant=outline]/field-group:-mb-2",
3893
+ className
3894
+ )
3895
+ }, props), {
3896
+ children: [
3897
+ /* @__PURE__ */ jsx44(Separator, { className: "absolute inset-0 top-1/2" }),
3898
+ children && /* @__PURE__ */ jsx44(
3899
+ "span",
3900
+ {
3901
+ className: "relative mx-auto block w-fit bg-background px-2 text-muted-foreground",
3902
+ "data-slot": "field-separator-content",
3903
+ children
3904
+ }
3905
+ )
3906
+ ]
3907
+ })
3908
+ );
3909
+ }
3910
+ function FieldError(_a) {
3911
+ var _b = _a, {
3912
+ className,
3913
+ children,
3914
+ errors
3915
+ } = _b, props = __objRest(_b, [
3916
+ "className",
3917
+ "children",
3918
+ "errors"
3919
+ ]);
3920
+ const content = useMemo4(() => {
3921
+ var _a2;
3922
+ if (children) {
3923
+ return children;
3924
+ }
3925
+ if (!(errors == null ? void 0 : errors.length)) {
3926
+ return null;
3927
+ }
3928
+ const uniqueErrors = [
3929
+ ...new Map(errors.map((error) => [error == null ? void 0 : error.message, error])).values()
3930
+ ];
3931
+ if ((uniqueErrors == null ? void 0 : uniqueErrors.length) === 1) {
3932
+ return (_a2 = uniqueErrors[0]) == null ? void 0 : _a2.message;
3933
+ }
3934
+ return /* @__PURE__ */ jsx44("ul", { className: "ml-4 flex list-disc flex-col gap-1", children: uniqueErrors.map(
3935
+ (error, index) => (error == null ? void 0 : error.message) && /* @__PURE__ */ jsx44("li", { children: error.message }, index)
3936
+ ) });
3937
+ }, [children, errors]);
3938
+ if (!content) {
3939
+ return null;
3940
+ }
3941
+ return /* @__PURE__ */ jsx44(
3942
+ "div",
3943
+ __spreadProps(__spreadValues({
3944
+ role: "alert",
3945
+ "data-slot": "field-error",
3946
+ className: cn22("text-xs/relaxed font-normal text-destructive", className)
3947
+ }, props), {
3948
+ children: content
3949
+ })
3950
+ );
3951
+ }
3952
+
3953
+ // src/components/ui/toast.tsx
3954
+ import { Toast as ToastPrimitive } from "@base-ui/react/toast";
3955
+ import { cn as cn23 } from "cn";
3956
+ import {
3957
+ CircleCheckIcon,
3958
+ InfoIcon,
3959
+ Loader2Icon,
3960
+ OctagonXIcon,
3961
+ TriangleAlertIcon,
3962
+ XIcon as XIcon3
3963
+ } from "lucide-react";
3964
+ import { jsx as jsx45, jsxs as jsxs29 } from "react/jsx-runtime";
3965
+ var toast = ToastPrimitive.createToastManager();
3966
+ var createToastManager = ToastPrimitive.createToastManager;
3967
+ var useToastManager = ToastPrimitive.useToastManager;
3968
+
3969
+ // src/components/composed/login-server.tsx
3970
+ import { jsx as jsx46, jsxs as jsxs30 } from "react/jsx-runtime";
3971
+ var loginSchema = z.object({
3972
+ email: z.string().trim().toLowerCase().min(1, "Email is required").max(254, "Email is too long").pipe(z.email("Invalid email format")),
3973
+ password: z.string().min(1, "Password is required").min(8, "Password must be at least 8 characters").max(128, "Password must not exceed 128 characters")
3974
+ });
3975
+ function LoginServer({
3976
+ onSubmit,
3977
+ onGoogleSignIn,
3978
+ isSubmitting: externalIsSubmitting
3979
+ }) {
3980
+ const [isRedirecting, setIsRedirecting] = useState6(false);
3981
+ const [isGoogleLoading, setIsGoogleLoading] = useState6(false);
3982
+ const form = useForm({
3983
+ resolver: zodResolver(loginSchema),
3984
+ defaultValues: {
3985
+ email: "",
3986
+ password: ""
3987
+ }
3988
+ });
3989
+ const isPending = externalIsSubmitting != null ? externalIsSubmitting : form.formState.isSubmitting || isRedirecting || isGoogleLoading;
3990
+ const handleFormSubmit = async (values) => {
3991
+ try {
3992
+ if (!onSubmit) {
3993
+ toast.add({
3994
+ description: "Login action handler is not configured."
3995
+ });
3996
+ return;
3997
+ }
3998
+ const res = await onSubmit(values);
3999
+ if (res && typeof res === "object" && "error" in res && typeof res.error === "string" && res.error) {
4000
+ setIsRedirecting(false);
4001
+ toast.add({ description: res.error });
4002
+ return;
4003
+ }
4004
+ setIsRedirecting(true);
4005
+ } catch (e) {
4006
+ setIsRedirecting(false);
4007
+ toast.add({ description: "Unable to process your login request." });
4008
+ }
4009
+ };
4010
+ const handleGoogleSignIn = async () => {
4011
+ if (isPending) return;
4012
+ if (!onGoogleSignIn) {
4013
+ toast.add({
4014
+ description: "Google Sign-In is not currently available."
4015
+ });
4016
+ return;
4017
+ }
4018
+ try {
4019
+ setIsGoogleLoading(true);
4020
+ await onGoogleSignIn();
4021
+ } catch (e) {
4022
+ setIsGoogleLoading(false);
4023
+ toast.add({ description: "Google Sign-In failed to initialize." });
4024
+ }
4025
+ };
4026
+ return /* @__PURE__ */ jsx46("div", { className: "flex min-h-svh flex-col items-center justify-center gap-6 bg-muted p-6 md:p-10", children: /* @__PURE__ */ jsxs30("div", { className: "flex w-full max-w-sm flex-col gap-6", children: [
4027
+ /* @__PURE__ */ jsxs30("div", { className: "flex items-center gap-2 self-center font-medium", children: [
4028
+ /* @__PURE__ */ jsx46("div", { className: "flex size-6 items-center justify-center rounded-md bg-primary text-primary-foreground", children: /* @__PURE__ */ jsx46(GalleryVerticalEndIcon, { className: "size-4" }) }),
4029
+ "Prediktif"
4030
+ ] }),
4031
+ /* @__PURE__ */ jsxs30("div", { className: "flex flex-col gap-6", children: [
4032
+ /* @__PURE__ */ jsxs30(Card, { children: [
4033
+ /* @__PURE__ */ jsxs30(CardHeader, { className: "text-center", children: [
4034
+ /* @__PURE__ */ jsx46(CardTitle, { children: "Welcome back" }),
4035
+ /* @__PURE__ */ jsx46(CardDescription, { children: "Login with your Google account" })
4036
+ ] }),
4037
+ /* @__PURE__ */ jsx46(CardContent, { children: /* @__PURE__ */ jsx46("form", { onSubmit: form.handleSubmit(handleFormSubmit), noValidate: true, children: /* @__PURE__ */ jsxs30(FieldGroup, { children: [
4038
+ /* @__PURE__ */ jsx46(Field, { children: /* @__PURE__ */ jsxs30(
4039
+ Button,
4040
+ {
4041
+ type: "button",
4042
+ variant: "outline",
4043
+ disabled: isPending,
4044
+ onClick: handleGoogleSignIn,
4045
+ children: [
4046
+ isGoogleLoading ? /* @__PURE__ */ jsx46(
4047
+ LoaderCircleIcon,
4048
+ {
4049
+ className: "animate-spin",
4050
+ "data-icon": "inline-start"
4051
+ }
4052
+ ) : /* @__PURE__ */ jsx46(GoogleIcon, { className: "size-4 shrink-0" }),
4053
+ "Login with Google"
4054
+ ]
4055
+ }
4056
+ ) }),
4057
+ /* @__PURE__ */ jsx46(FieldSeparator, { className: "*:data-[slot=field-separator-content]:bg-card", children: "Or continue with" }),
4058
+ /* @__PURE__ */ jsx46(
4059
+ Controller,
4060
+ {
4061
+ name: "email",
4062
+ control: form.control,
4063
+ render: ({ field, fieldState }) => /* @__PURE__ */ jsxs30(Field, { "data-invalid": fieldState.invalid, children: [
4064
+ /* @__PURE__ */ jsx46(FieldLabel, { htmlFor: field.name, children: "Email" }),
4065
+ /* @__PURE__ */ jsx46(
4066
+ Input,
4067
+ __spreadProps(__spreadValues({}, field), {
4068
+ id: field.name,
4069
+ "aria-invalid": fieldState.invalid,
4070
+ disabled: isPending,
4071
+ placeholder: "m@example.com",
4072
+ type: "email",
4073
+ autoComplete: "email"
4074
+ })
4075
+ ),
4076
+ /* @__PURE__ */ jsx46(FieldDescription, { children: "Enter the email address associated with your account." }),
4077
+ fieldState.invalid && /* @__PURE__ */ jsx46(FieldError, { errors: [fieldState.error] })
4078
+ ] })
4079
+ }
4080
+ ),
4081
+ /* @__PURE__ */ jsx46(
4082
+ Controller,
4083
+ {
4084
+ name: "password",
4085
+ control: form.control,
4086
+ render: ({ field, fieldState }) => /* @__PURE__ */ jsxs30(Field, { "data-invalid": fieldState.invalid, children: [
4087
+ /* @__PURE__ */ jsxs30("div", { className: "flex items-center", children: [
4088
+ /* @__PURE__ */ jsx46(FieldLabel, { htmlFor: field.name, children: "Password" }),
4089
+ /* @__PURE__ */ jsx46(
4090
+ Link3,
4091
+ {
4092
+ href: "/forgot-password",
4093
+ className: "ml-auto inline-block underline-offset-4 hover:underline",
4094
+ children: "Forgot your password?"
4095
+ }
4096
+ )
4097
+ ] }),
4098
+ /* @__PURE__ */ jsx46(
4099
+ Input,
4100
+ __spreadProps(__spreadValues({}, field), {
4101
+ id: field.name,
4102
+ "aria-invalid": fieldState.invalid,
4103
+ disabled: isPending,
4104
+ placeholder: "\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022",
4105
+ type: "password",
4106
+ autoComplete: "current-password"
4107
+ })
4108
+ ),
4109
+ /* @__PURE__ */ jsx46(FieldDescription, { children: "Enter your account password." }),
4110
+ fieldState.invalid && /* @__PURE__ */ jsx46(FieldError, { errors: [fieldState.error] })
4111
+ ] })
4112
+ }
4113
+ ),
4114
+ /* @__PURE__ */ jsxs30(Field, { children: [
4115
+ /* @__PURE__ */ jsxs30(
4116
+ Button,
4117
+ {
4118
+ type: "submit",
4119
+ disabled: isPending,
4120
+ className: "w-full",
4121
+ children: [
4122
+ /* @__PURE__ */ jsx46(
4123
+ LoaderCircleIcon,
4124
+ {
4125
+ className: cn24(
4126
+ "animate-spin",
4127
+ isPending && !isGoogleLoading ? "block" : "hidden"
4128
+ ),
4129
+ "data-icon": "inline-start"
4130
+ }
4131
+ ),
4132
+ /* @__PURE__ */ jsx46(
4133
+ LogInIcon,
4134
+ {
4135
+ className: cn24(
4136
+ !isPending || isGoogleLoading ? "block" : "hidden"
4137
+ ),
4138
+ "data-icon": "inline-start"
4139
+ }
4140
+ ),
4141
+ isRedirecting ? "Redirecting to application..." : form.formState.isSubmitting ? "Signing in..." : "Login"
4142
+ ]
4143
+ }
4144
+ ),
4145
+ /* @__PURE__ */ jsxs30(FieldDescription, { className: "text-center", children: [
4146
+ "Don't have an account?",
4147
+ " ",
4148
+ /* @__PURE__ */ jsx46(Link3, { href: "/register", children: "Sign up" })
4149
+ ] })
4150
+ ] })
4151
+ ] }) }) })
4152
+ ] }),
4153
+ /* @__PURE__ */ jsxs30(FieldDescription, { className: "px-6 text-center", children: [
4154
+ "By clicking continue, you agree to our",
4155
+ " ",
4156
+ /* @__PURE__ */ jsx46(Link3, { href: "/terms", children: "Terms of Service" }),
4157
+ " and",
4158
+ " ",
4159
+ /* @__PURE__ */ jsx46(Link3, { href: "/privacy", children: "Privacy Policy" }),
4160
+ "."
4161
+ ] })
4162
+ ] })
4163
+ ] }) });
4164
+ }
3506
4165
  export {
3507
4166
  AppSidebar,
4167
+ AvatarUser,
3508
4168
  DataTable,
3509
4169
  DataTableContentBody,
3510
4170
  DataTableContentHeader,
@@ -3517,16 +4177,24 @@ export {
3517
4177
  DataTableHeaderSearch,
3518
4178
  DataTableHeaderSort,
3519
4179
  DataTableHeaderToggle,
4180
+ EmailLabel,
4181
+ EmailVerified,
4182
+ GoogleIcon,
3520
4183
  HeaderTabs,
3521
4184
  HeaderTitle,
4185
+ JoinedLabel,
4186
+ LoginServer,
3522
4187
  RowActions,
3523
4188
  StateEmpty,
4189
+ UserRole,
4190
+ UserStatus,
3524
4191
  exportToCSV,
3525
4192
  exportToPDF,
3526
4193
  exportToXLSX,
3527
4194
  features,
3528
4195
  flexRender3 as flexRender,
3529
4196
  getTableExportData,
4197
+ loginSchema,
3530
4198
  printTable,
3531
4199
  smartFilterFn,
3532
4200
  useTable