@prediktif/ui 0.1.24 → 0.1.25

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.js CHANGED
@@ -60,8 +60,16 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
60
60
  // src/index.ts
61
61
  var index_exports = {};
62
62
  __export(index_exports, {
63
+ ActiveTokensStatus: () => ActiveTokensStatus,
63
64
  AppSidebar: () => AppSidebar,
65
+ AvatarGroupInvitations: () => AvatarGroupInvitations,
66
+ AvatarGroupUsers: () => AvatarGroupUsers,
67
+ AvatarInvitations: () => AvatarInvitations,
64
68
  AvatarUser: () => AvatarUser,
69
+ AvatarUsers: () => AvatarUsers,
70
+ CodeLabel: () => CodeLabel,
71
+ CopyableCode: () => CopyableCode,
72
+ DEFAULT_METADATA_FIELDS: () => DEFAULT_METADATA_FIELDS,
65
73
  DataTable: () => DataTable,
66
74
  DataTableContentBody: () => DataTableContentBody,
67
75
  DataTableContentHeader: () => DataTableContentHeader,
@@ -74,14 +82,32 @@ __export(index_exports, {
74
82
  DataTableHeaderSearch: () => DataTableHeaderSearch,
75
83
  DataTableHeaderSort: () => DataTableHeaderSort,
76
84
  DataTableHeaderToggle: () => DataTableHeaderToggle,
85
+ DescriptionLabel: () => DescriptionLabel,
77
86
  EmailLabel: () => EmailLabel,
78
87
  EmailVerified: () => EmailVerified,
79
88
  GoogleIcon: () => GoogleIcon,
80
89
  HeaderTabs: () => HeaderTabs,
81
90
  HeaderTitle: () => HeaderTitle,
91
+ ItemStatus: () => ItemStatus,
82
92
  JoinedLabel: () => JoinedLabel,
93
+ MetadataProgress: () => MetadataProgress,
94
+ MetadataStatus: () => MetadataStatus,
95
+ OrganizationInvitations: () => OrganizationInvitations,
96
+ OrganizationRoleBadge: () => OrganizationRoleBadge,
97
+ OrganizationRoles: () => OrganizationRoles,
98
+ PermissionBadges: () => PermissionBadges,
99
+ PermissionsBadges: () => PermissionsBadges,
100
+ ProgressStatus: () => ProgressStatus,
101
+ RedirectUriLabel: () => RedirectUriLabel,
102
+ RedirectUris: () => RedirectUris,
83
103
  RowActions: () => RowActions,
104
+ RunningStatus: () => RunningStatus,
105
+ SlugLabel: () => SlugLabel,
84
106
  StateEmpty: () => StateEmpty,
107
+ StatusBadge: () => StatusBadge,
108
+ TokenActivity: () => TokenActivity,
109
+ UrisLabel: () => UrisLabel,
110
+ UrisList: () => UrisList,
85
111
  UserRole: () => UserRole,
86
112
  UserStatus: () => UserStatus,
87
113
  exportToCSV: () => exportToCSV,
@@ -369,6 +395,36 @@ function AvatarFallback(_a) {
369
395
  }, props)
370
396
  );
371
397
  }
398
+ function AvatarGroup(_a) {
399
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
400
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
401
+ "div",
402
+ __spreadValues({
403
+ "data-slot": "avatar-group",
404
+ className: (0, import_cn3.cn)(
405
+ "group/avatar-group flex -space-x-2 *:data-[slot=avatar]:ring-2 *:data-[slot=avatar]:ring-background",
406
+ className
407
+ )
408
+ }, props)
409
+ );
410
+ }
411
+ function AvatarGroupCount(_a) {
412
+ var _b = _a, {
413
+ className
414
+ } = _b, props = __objRest(_b, [
415
+ "className"
416
+ ]);
417
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
418
+ "div",
419
+ __spreadValues({
420
+ "data-slot": "avatar-group-count",
421
+ className: (0, import_cn3.cn)(
422
+ "relative flex size-8 shrink-0 items-center justify-center rounded-full bg-muted text-xs/relaxed text-muted-foreground ring-2 ring-background group-has-data-[size=lg]/avatar-group:size-10 group-has-data-[size=sm]/avatar-group:size-6 [&>svg]:size-4 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3",
423
+ className
424
+ )
425
+ }, props)
426
+ );
427
+ }
372
428
 
373
429
  // src/components/ui/breadcrumb.tsx
374
430
  var import_merge_props = require("@base-ui/react/merge-props");
@@ -1537,44 +1593,319 @@ var AppSidebar = (0, import_react.memo)(function AppSidebar2({
1537
1593
  ] });
1538
1594
  });
1539
1595
 
1540
- // src/components/composed/columns/avatar-user.tsx
1596
+ // src/components/composed/columns/avatar-group-invitations.tsx
1541
1597
  var import_react2 = require("react");
1542
1598
  var import_jsx_runtime13 = require("react/jsx-runtime");
1543
- function getInitials(name) {
1599
+ function getInitials(name, email) {
1600
+ const target = (name || email || "U").trim();
1601
+ return target.split(/[\s.@]/).filter(Boolean).map((n) => n[0]).join("").slice(0, 2).toUpperCase();
1602
+ }
1603
+ var AvatarGroupInvitations = (0, import_react2.memo)(function AvatarGroupInvitations2({
1604
+ invitations,
1605
+ maxDisplay = 3,
1606
+ onlyPending = true,
1607
+ fallback = null,
1608
+ size = "default",
1609
+ className
1610
+ }) {
1611
+ const list = invitations != null ? invitations : [];
1612
+ const targetInvites = onlyPending ? list.filter((i) => {
1613
+ var _a;
1614
+ return ((_a = i.status) == null ? void 0 : _a.toLowerCase()) === "pending";
1615
+ }) : list;
1616
+ if (targetInvites.length === 0) {
1617
+ if (!fallback) return null;
1618
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_jsx_runtime13.Fragment, { children: fallback });
1619
+ }
1620
+ const visibleInvites = targetInvites.slice(0, maxDisplay);
1621
+ const remainingCount = targetInvites.length - visibleInvites.length;
1622
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(AvatarGroup, { className, children: [
1623
+ visibleInvites.map((inv, index) => {
1624
+ var _a, _b, _c, _d, _e;
1625
+ const displayName = ((_a = inv.invitedUser) == null ? void 0 : _a.name) || inv.email;
1626
+ const initials = getInitials((_b = inv.invitedUser) == null ? void 0 : _b.name, inv.email);
1627
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(Tooltip, { children: [
1628
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1629
+ TooltipTrigger,
1630
+ {
1631
+ render: /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
1632
+ Avatar,
1633
+ {
1634
+ size,
1635
+ className: "cursor-pointer border border-dashed border-primary/40",
1636
+ children: [
1637
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1638
+ AvatarImage,
1639
+ {
1640
+ src: (_e = (_d = inv.invitedUser) == null ? void 0 : _d.image) != null ? _e : void 0,
1641
+ alt: displayName
1642
+ }
1643
+ ),
1644
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(AvatarFallback, { className: "bg-muted text-xs", children: initials })
1645
+ ]
1646
+ }
1647
+ )
1648
+ }
1649
+ ),
1650
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(TooltipContent, { children: [
1651
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("p", { className: "font-medium text-xs", children: displayName }),
1652
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("p", { className: "text-xs text-muted-foreground", children: [
1653
+ "Invited as ",
1654
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: "capitalize", children: inv.role })
1655
+ ] })
1656
+ ] })
1657
+ ] }, (_c = inv.id) != null ? _c : `${displayName}-${index}`);
1658
+ }),
1659
+ remainingCount > 0 && /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(Tooltip, { children: [
1660
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1661
+ TooltipTrigger,
1662
+ {
1663
+ render: /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(AvatarGroupCount, { className: "cursor-pointer border border-dashed border-primary/40 font-mono", children: [
1664
+ "+",
1665
+ remainingCount
1666
+ ] })
1667
+ }
1668
+ ),
1669
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(TooltipContent, { children: /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "flex flex-col gap-0.5 text-xs", children: [
1670
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("p", { className: "font-semibold text-xs mb-0.5", children: onlyPending ? "Other Pending Invitations:" : "Other Invitations:" }),
1671
+ targetInvites.slice(maxDisplay).map((rem, idx) => {
1672
+ var _a, _b;
1673
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("span", { className: "text-xs", children: [
1674
+ ((_b = rem.invitedUser) == null ? void 0 : _b.name) || rem.email,
1675
+ " (",
1676
+ rem.role,
1677
+ ")"
1678
+ ] }, (_a = rem.id) != null ? _a : `${rem.email}-${idx}`);
1679
+ })
1680
+ ] }) })
1681
+ ] })
1682
+ ] });
1683
+ });
1684
+ var AvatarInvitations = AvatarGroupInvitations;
1685
+ var OrganizationInvitations = AvatarGroupInvitations;
1686
+
1687
+ // src/components/composed/columns/avatar-group-users.tsx
1688
+ var import_react3 = require("react");
1689
+ var import_jsx_runtime14 = require("react/jsx-runtime");
1690
+ function getInitials2(name, email) {
1691
+ const target = (name || email || "U").trim();
1692
+ return target.split(" ").map((w) => w[0]).join("").slice(0, 2).toUpperCase();
1693
+ }
1694
+ var AvatarGroupUsers = (0, import_react3.memo)(function AvatarGroupUsers2({
1695
+ users,
1696
+ maxDisplay = 3,
1697
+ fallback = null,
1698
+ className,
1699
+ size = "default"
1700
+ }) {
1701
+ const list = users != null ? users : [];
1702
+ if (list.length === 0) {
1703
+ if (!fallback) return null;
1704
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_jsx_runtime14.Fragment, { children: fallback });
1705
+ }
1706
+ const visibleUsers = list.slice(0, maxDisplay);
1707
+ const remainingCount = list.length - visibleUsers.length;
1708
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(AvatarGroup, { className, children: [
1709
+ visibleUsers.map((u, index) => {
1710
+ var _a, _b;
1711
+ const initials = getInitials2(u.name, u.email);
1712
+ const displayName = u.name || u.email || "User";
1713
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(Tooltip, { children: [
1714
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
1715
+ TooltipTrigger,
1716
+ {
1717
+ render: /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(Avatar, { size, className: "cursor-pointer", children: [
1718
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(AvatarImage, { src: (_b = u.image) != null ? _b : void 0, alt: displayName }),
1719
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(AvatarFallback, { children: initials })
1720
+ ] })
1721
+ }
1722
+ ),
1723
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(TooltipContent, { children: displayName })
1724
+ ] }, (_a = u.id) != null ? _a : `${displayName}-${index}`);
1725
+ }),
1726
+ remainingCount > 0 && /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(Tooltip, { children: [
1727
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
1728
+ TooltipTrigger,
1729
+ {
1730
+ render: /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(AvatarGroupCount, { className: "cursor-pointer font-mono", children: [
1731
+ "+",
1732
+ remainingCount
1733
+ ] })
1734
+ }
1735
+ ),
1736
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(TooltipContent, { children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: "flex flex-col gap-0.5 text-xs", children: list.slice(maxDisplay).map((rem, idx) => {
1737
+ var _a, _b;
1738
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { children: rem.name || rem.email }, (_b = rem.id) != null ? _b : `${(_a = rem.name) != null ? _a : rem.email}-${idx}`);
1739
+ }) }) })
1740
+ ] })
1741
+ ] });
1742
+ });
1743
+ var AvatarUsers = AvatarGroupUsers;
1744
+
1745
+ // src/components/composed/columns/avatar-user.tsx
1746
+ var import_cn12 = require("cn");
1747
+ var import_react4 = require("react");
1748
+ var import_jsx_runtime15 = require("react/jsx-runtime");
1749
+ function getInitials3(name) {
1544
1750
  if (name) {
1545
1751
  return name.split(" ").map((w) => w[0]).join("").slice(0, 2).toUpperCase();
1546
1752
  }
1547
1753
  return "U";
1548
1754
  }
1549
- var AvatarUser = (0, import_react2.memo)(function AvatarUser2({
1755
+ var AvatarUser = (0, import_react4.memo)(function AvatarUser2({
1550
1756
  name,
1551
- image
1757
+ image,
1758
+ className,
1759
+ size = "sm"
1552
1760
  }) {
1553
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "flex items-center gap-2", children: [
1554
- /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(Avatar, { size: "sm", children: [
1555
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(AvatarImage, { src: image != null ? image : void 0, alt: name != null ? name : void 0 }),
1556
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(AvatarFallback, { children: getInitials(name) })
1761
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: (0, import_cn12.cn)("flex items-center gap-2", className), children: [
1762
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(Avatar, { size, children: [
1763
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(AvatarImage, { src: image != null ? image : void 0, alt: name != null ? name : void 0 }),
1764
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(AvatarFallback, { children: getInitials3(name) })
1557
1765
  ] }),
1558
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("p", { className: "text-xs font-medium", children: name })
1766
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("p", { className: "text-xs font-medium truncate", children: name })
1767
+ ] });
1768
+ });
1769
+
1770
+ // src/components/composed/columns/copyable-code.tsx
1771
+ var import_cn14 = require("cn");
1772
+ var import_lucide_react7 = require("lucide-react");
1773
+ var import_react5 = require("react");
1774
+
1775
+ // src/components/ui/toast.tsx
1776
+ var import_toast = require("@base-ui/react/toast");
1777
+ var import_cn13 = require("cn");
1778
+ var import_lucide_react6 = require("lucide-react");
1779
+ var import_jsx_runtime16 = require("react/jsx-runtime");
1780
+ var toast = import_toast.Toast.createToastManager();
1781
+ var createToastManager = import_toast.Toast.createToastManager;
1782
+ var useToastManager = import_toast.Toast.useToastManager;
1783
+
1784
+ // src/components/composed/columns/copyable-code.tsx
1785
+ var import_jsx_runtime17 = require("react/jsx-runtime");
1786
+ var CopyableCode = (0, import_react5.memo)(function CopyableCode2({
1787
+ value,
1788
+ label,
1789
+ copyMessage,
1790
+ toastOnCopy = true,
1791
+ showTooltip = true,
1792
+ fallback = null,
1793
+ className,
1794
+ codeClassName,
1795
+ onCopy
1796
+ }) {
1797
+ const [copied, setCopied] = (0, import_react5.useState)(false);
1798
+ const handleCopy = (0, import_react5.useCallback)(
1799
+ async (e) => {
1800
+ e.stopPropagation();
1801
+ if (!value) return;
1802
+ try {
1803
+ await navigator.clipboard.writeText(value);
1804
+ setCopied(true);
1805
+ setTimeout(() => setCopied(false), 2e3);
1806
+ } catch (err) {
1807
+ console.error("Failed to copy to clipboard:", err);
1808
+ }
1809
+ if (onCopy) {
1810
+ onCopy(value);
1811
+ } else if (toastOnCopy) {
1812
+ try {
1813
+ toast.add({
1814
+ description: copyMessage || `${label || "Value"} copied to clipboard`
1815
+ });
1816
+ } catch (e2) {
1817
+ }
1818
+ }
1819
+ },
1820
+ [value, onCopy, toastOnCopy, copyMessage, label]
1821
+ );
1822
+ if (!value) {
1823
+ if (!fallback) return null;
1824
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_jsx_runtime17.Fragment, { children: fallback });
1825
+ }
1826
+ const tooltipText = copied ? "Copied!" : `Copy ${label || "value"}`;
1827
+ const copyButton = /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1828
+ Button,
1829
+ {
1830
+ size: "icon-xs",
1831
+ variant: "ghost",
1832
+ className: "text-muted-foreground hover:text-foreground cursor-pointer",
1833
+ onClick: handleCopy,
1834
+ title: tooltipText,
1835
+ children: copied ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_lucide_react7.CheckIcon, { className: "size-3 text-emerald-500" }) : /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_lucide_react7.CopyIcon, { className: "size-3" })
1836
+ }
1837
+ );
1838
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: (0, import_cn14.cn)("flex items-center gap-1.5", className), children: [
1839
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1840
+ "code",
1841
+ {
1842
+ className: (0, import_cn14.cn)(
1843
+ "font-mono text-xs text-muted-foreground bg-muted/50 px-1.5 py-0.5 rounded select-all",
1844
+ codeClassName
1845
+ ),
1846
+ children: value
1847
+ }
1848
+ ),
1849
+ showTooltip ? /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(Tooltip, { children: [
1850
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(TooltipTrigger, { render: copyButton }),
1851
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(TooltipContent, { children: tooltipText })
1852
+ ] }) : copyButton
1853
+ ] });
1854
+ });
1855
+ var CodeLabel = CopyableCode;
1856
+ var SlugLabel = CopyableCode;
1857
+
1858
+ // src/components/composed/columns/description-label.tsx
1859
+ var import_cn15 = require("cn");
1860
+ var import_react6 = require("react");
1861
+ var import_jsx_runtime18 = require("react/jsx-runtime");
1862
+ var DescriptionLabel = (0, import_react6.memo)(function DescriptionLabel2({
1863
+ description,
1864
+ fallback = null,
1865
+ className
1866
+ }) {
1867
+ const text = description == null ? void 0 : description.trim();
1868
+ if (!text) {
1869
+ if (!fallback) return null;
1870
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { className: (0, import_cn15.cn)("text-xs text-muted-foreground", className), children: fallback });
1871
+ }
1872
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(Tooltip, { children: [
1873
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
1874
+ TooltipTrigger,
1875
+ {
1876
+ render: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
1877
+ "p",
1878
+ {
1879
+ className: (0, import_cn15.cn)(
1880
+ "text-xs text-muted-foreground truncate max-w-xs cursor-default",
1881
+ className
1882
+ ),
1883
+ children: text
1884
+ }
1885
+ )
1886
+ }
1887
+ ),
1888
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(TooltipContent, { className: "max-w-xs break-words", children: text })
1559
1889
  ] });
1560
1890
  });
1561
1891
 
1562
1892
  // src/components/composed/columns/email-label.tsx
1563
- var import_react3 = require("react");
1564
- var import_jsx_runtime14 = require("react/jsx-runtime");
1565
- var EmailLabel = (0, import_react3.memo)(function EmailLabel2({ email }) {
1566
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { className: "text-xs font-mono", children: email });
1893
+ var import_react7 = require("react");
1894
+ var import_jsx_runtime19 = require("react/jsx-runtime");
1895
+ var EmailLabel = (0, import_react7.memo)(function EmailLabel2({ email }) {
1896
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", { className: "text-xs font-mono", children: email });
1567
1897
  });
1568
1898
 
1569
1899
  // src/components/composed/columns/email-verified.tsx
1570
- var import_lucide_react6 = require("lucide-react");
1571
- var import_react4 = require("react");
1900
+ var import_cn17 = require("cn");
1901
+ var import_lucide_react8 = require("lucide-react");
1902
+ var import_react8 = require("react");
1572
1903
 
1573
1904
  // src/components/ui/badge.tsx
1574
1905
  var import_merge_props3 = require("@base-ui/react/merge-props");
1575
1906
  var import_use_render3 = require("@base-ui/react/use-render");
1576
1907
  var import_class_variance_authority3 = require("class-variance-authority");
1577
- var import_cn12 = require("cn");
1908
+ var import_cn16 = require("cn");
1578
1909
  var badgeVariants = (0, import_class_variance_authority3.cva)(
1579
1910
  "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!",
1580
1911
  {
@@ -1607,97 +1938,785 @@ function Badge(_a) {
1607
1938
  defaultTagName: "span",
1608
1939
  props: (0, import_merge_props3.mergeProps)(
1609
1940
  {
1610
- className: (0, import_cn12.cn)(badgeVariants({ variant }), className)
1941
+ className: (0, import_cn16.cn)(badgeVariants({ variant }), className)
1942
+ },
1943
+ props
1944
+ ),
1945
+ render,
1946
+ state: {
1947
+ slot: "badge",
1948
+ variant
1949
+ }
1950
+ });
1951
+ }
1952
+
1953
+ // src/components/composed/columns/email-verified.tsx
1954
+ var import_jsx_runtime20 = require("react/jsx-runtime");
1955
+ var EmailVerified = (0, import_react8.memo)(function EmailVerified2({
1956
+ verified,
1957
+ label,
1958
+ className
1959
+ }) {
1960
+ const isVerified = Boolean(verified);
1961
+ if (isVerified) {
1962
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
1963
+ Badge,
1964
+ {
1965
+ variant: "outline",
1966
+ className: (0, import_cn17.cn)(
1967
+ "border-emerald-500/30 bg-emerald-500/10 text-emerald-700 dark:text-emerald-300 font-normal",
1968
+ className
1969
+ ),
1970
+ children: [
1971
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1972
+ import_lucide_react8.CheckIcon,
1973
+ {
1974
+ "data-icon": "inline-start",
1975
+ className: "text-emerald-600 dark:text-emerald-400"
1976
+ }
1977
+ ),
1978
+ label != null ? label : "Verified"
1979
+ ]
1980
+ }
1981
+ );
1982
+ }
1983
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
1984
+ Badge,
1985
+ {
1986
+ variant: "outline",
1987
+ className: (0, import_cn17.cn)(
1988
+ "border-amber-500/30 bg-amber-500/10 text-amber-700 dark:text-amber-300 font-normal",
1989
+ className
1990
+ ),
1991
+ children: [
1992
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1993
+ import_lucide_react8.XIcon,
1994
+ {
1995
+ "data-icon": "inline-start",
1996
+ className: "text-amber-600 dark:text-amber-400"
1997
+ }
1998
+ ),
1999
+ label != null ? label : "Unverified"
2000
+ ]
2001
+ }
2002
+ );
2003
+ });
2004
+
2005
+ // src/components/composed/columns/joined-label.tsx
2006
+ var import_react9 = require("react");
2007
+ var import_jsx_runtime21 = require("react/jsx-runtime");
2008
+ var JoinedLabel = (0, import_react9.memo)(function JoinedLabel2({
2009
+ joined,
2010
+ locale = "id-ID"
2011
+ }) {
2012
+ if (!joined) return null;
2013
+ const date = typeof joined === "string" ? new Date(joined) : joined;
2014
+ if (Number.isNaN(date.getTime())) return null;
2015
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { className: "text-xs font-mono", children: new Intl.DateTimeFormat(locale, {
2016
+ day: "numeric",
2017
+ month: "long",
2018
+ year: "numeric"
2019
+ }).format(date) });
2020
+ });
2021
+
2022
+ // src/components/composed/columns/metadata-progress.tsx
2023
+ var import_cn18 = require("cn");
2024
+ var import_react10 = require("react");
2025
+ var import_jsx_runtime22 = require("react/jsx-runtime");
2026
+ var DEFAULT_METADATA_FIELDS = [
2027
+ { key: "title", label: "Page Title" },
2028
+ { key: "description", label: "Meta Description" },
2029
+ { key: "keywords", label: "Keywords" },
2030
+ { key: "author", label: "Author" },
2031
+ { key: "canonicalUrl", label: "Canonical URL" },
2032
+ { key: "favicon", label: "Favicon URL" },
2033
+ { key: "ogImage", label: "OG Image URL" },
2034
+ { key: "ogType", label: "OG Type" },
2035
+ { key: "twitterCard", label: "Twitter Card" },
2036
+ { key: "twitterHandle", label: "Twitter Handle" },
2037
+ { key: "robots", label: "Robots" },
2038
+ { key: "customJsonLd", label: "Custom JSON-LD" }
2039
+ ];
2040
+ var MetadataProgress = (0, import_react10.memo)(function MetadataProgress2({
2041
+ metadata,
2042
+ fields = DEFAULT_METADATA_FIELDS,
2043
+ completedCount: propCompleted,
2044
+ totalCount: propTotal,
2045
+ title = "Website Metadata",
2046
+ fallback = null,
2047
+ className
2048
+ }) {
2049
+ const stats = (0, import_react10.useMemo)(() => {
2050
+ if (propCompleted !== void 0 && propTotal !== void 0) {
2051
+ const total3 = Math.max(1, propTotal);
2052
+ const completed3 = Math.min(propCompleted, total3);
2053
+ const percentage3 = Math.round(completed3 / total3 * 100);
2054
+ return {
2055
+ completed: completed3,
2056
+ total: total3,
2057
+ percentage: percentage3,
2058
+ missing: []
2059
+ };
2060
+ }
2061
+ if (!metadata) {
2062
+ return {
2063
+ completed: 0,
2064
+ total: fields.length,
2065
+ percentage: 0,
2066
+ missing: fields.map((f) => f.label)
2067
+ };
2068
+ }
2069
+ const completedList = [];
2070
+ const missingList = [];
2071
+ for (const field of fields) {
2072
+ const val = metadata[field.key];
2073
+ let isFilled = false;
2074
+ if (field.key === "keywords") {
2075
+ isFilled = Array.isArray(val) ? val.length > 0 : Boolean(typeof val === "string" && val.trim().length > 0);
2076
+ } else if (typeof val === "string") {
2077
+ isFilled = val.trim().length > 0;
2078
+ } else {
2079
+ isFilled = Boolean(val);
2080
+ }
2081
+ if (isFilled) {
2082
+ completedList.push(field.label);
2083
+ } else {
2084
+ missingList.push(field.label);
2085
+ }
2086
+ }
2087
+ const total2 = fields.length;
2088
+ const completed2 = completedList.length;
2089
+ const percentage2 = Math.round(completed2 / Math.max(1, total2) * 100);
2090
+ return {
2091
+ completed: completed2,
2092
+ total: total2,
2093
+ percentage: percentage2,
2094
+ missing: missingList
2095
+ };
2096
+ }, [metadata, fields, propCompleted, propTotal]);
2097
+ const { completed, total, percentage, missing } = stats;
2098
+ if (completed === 0 && fallback !== null) {
2099
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_jsx_runtime22.Fragment, { children: fallback });
2100
+ }
2101
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(Tooltip, { children: [
2102
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
2103
+ TooltipTrigger,
2104
+ {
2105
+ render: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
2106
+ "div",
2107
+ {
2108
+ className: (0, import_cn18.cn)(
2109
+ "inline-flex items-center gap-2 cursor-pointer select-none",
2110
+ className
2111
+ ),
2112
+ children: percentage === 100 ? /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
2113
+ Badge,
2114
+ {
2115
+ variant: "outline",
2116
+ className: "border-emerald-500/30 bg-emerald-500/10 text-emerald-700 dark:text-emerald-300 font-mono text-[11px] gap-1.5 font-normal",
2117
+ children: [
2118
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: "size-1.5 rounded-full bg-emerald-500" }),
2119
+ "100%"
2120
+ ]
2121
+ }
2122
+ ) : /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: "flex items-center gap-2 w-24", children: [
2123
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: "flex-1 h-1.5 rounded-full bg-muted/60 overflow-hidden", children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
2124
+ "div",
2125
+ {
2126
+ className: (0, import_cn18.cn)(
2127
+ "h-full rounded-full transition-all duration-300",
2128
+ percentage >= 50 ? "bg-primary" : "bg-amber-500"
2129
+ ),
2130
+ style: { width: `${percentage}%` }
2131
+ }
2132
+ ) }),
2133
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("span", { className: "font-mono text-[11px] text-muted-foreground shrink-0", children: [
2134
+ completed,
2135
+ "/",
2136
+ total
2137
+ ] })
2138
+ ] })
2139
+ }
2140
+ )
2141
+ }
2142
+ ),
2143
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(TooltipContent, { className: "max-w-xs text-xs space-y-1.5 p-3", children: [
2144
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: "flex items-center justify-between border-b pb-1", children: [
2145
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("p", { className: "font-semibold text-xs", children: title }),
2146
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("span", { className: "font-mono text-[11px] text-muted-foreground", children: [
2147
+ completed,
2148
+ "/",
2149
+ total,
2150
+ " (",
2151
+ percentage,
2152
+ "%)"
2153
+ ] })
2154
+ ] }),
2155
+ missing.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("p", { className: "text-[11px] text-muted-foreground leading-relaxed", children: [
2156
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("span", { className: "text-amber-600 dark:text-amber-400 font-medium", children: [
2157
+ "Missing:",
2158
+ " "
2159
+ ] }),
2160
+ missing.slice(0, 4).join(", "),
2161
+ missing.length > 4 ? ` +${missing.length - 4} more` : ""
2162
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("p", { className: "text-[11px] text-emerald-600 dark:text-emerald-400 font-medium", children: "All metadata fields completed!" })
2163
+ ] })
2164
+ ] });
2165
+ });
2166
+ var MetadataStatus = MetadataProgress;
2167
+ var ProgressStatus = MetadataProgress;
2168
+
2169
+ // src/components/composed/columns/organization-roles.tsx
2170
+ var import_cn19 = require("cn");
2171
+ var import_lucide_react9 = require("lucide-react");
2172
+ var import_react11 = require("react");
2173
+ var import_jsx_runtime23 = require("react/jsx-runtime");
2174
+ var OrganizationRoleBadge = (0, import_react11.forwardRef)(function OrganizationRoleBadge2(_a, ref) {
2175
+ var _b = _a, { role, roleName, className } = _b, props = __objRest(_b, ["role", "roleName", "className"]);
2176
+ const roleValue = roleName != null ? roleName : role;
2177
+ if (!roleValue) return null;
2178
+ const normalized = roleValue.toLowerCase().trim();
2179
+ if (normalized === "owner") {
2180
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
2181
+ Badge,
2182
+ __spreadProps(__spreadValues({
2183
+ ref,
2184
+ variant: "outline",
2185
+ className: (0, import_cn19.cn)(
2186
+ "capitalize border-purple-500/30 bg-purple-500/10 text-purple-700 dark:text-purple-300 font-normal",
2187
+ className
2188
+ )
2189
+ }, props), {
2190
+ children: [
2191
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2192
+ import_lucide_react9.CrownIcon,
2193
+ {
2194
+ "data-icon": "inline-start",
2195
+ className: "text-purple-600 dark:text-purple-400"
2196
+ }
2197
+ ),
2198
+ roleValue
2199
+ ]
2200
+ })
2201
+ );
2202
+ }
2203
+ if (normalized === "admin") {
2204
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
2205
+ Badge,
2206
+ __spreadProps(__spreadValues({
2207
+ ref,
2208
+ variant: "outline",
2209
+ className: (0, import_cn19.cn)(
2210
+ "capitalize border-blue-500/30 bg-blue-500/10 text-blue-700 dark:text-blue-300 font-normal",
2211
+ className
2212
+ )
2213
+ }, props), {
2214
+ children: [
2215
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2216
+ import_lucide_react9.ShieldCheckIcon,
2217
+ {
2218
+ "data-icon": "inline-start",
2219
+ className: "text-blue-600 dark:text-blue-400"
2220
+ }
2221
+ ),
2222
+ roleValue
2223
+ ]
2224
+ })
2225
+ );
2226
+ }
2227
+ if (normalized === "redaktur") {
2228
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
2229
+ Badge,
2230
+ __spreadProps(__spreadValues({
2231
+ ref,
2232
+ variant: "outline",
2233
+ className: (0, import_cn19.cn)(
2234
+ "capitalize border-amber-500/30 bg-amber-500/10 text-amber-700 dark:text-amber-300 font-normal",
2235
+ className
2236
+ )
2237
+ }, props), {
2238
+ children: [
2239
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2240
+ import_lucide_react9.NewspaperIcon,
2241
+ {
2242
+ "data-icon": "inline-start",
2243
+ className: "text-amber-600 dark:text-amber-400"
2244
+ }
2245
+ ),
2246
+ roleValue
2247
+ ]
2248
+ })
2249
+ );
2250
+ }
2251
+ if (normalized === "editor") {
2252
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
2253
+ Badge,
2254
+ __spreadProps(__spreadValues({
2255
+ ref,
2256
+ variant: "outline",
2257
+ className: (0, import_cn19.cn)(
2258
+ "capitalize border-emerald-500/30 bg-emerald-500/10 text-emerald-700 dark:text-emerald-300 font-normal",
2259
+ className
2260
+ )
2261
+ }, props), {
2262
+ children: [
2263
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2264
+ import_lucide_react9.PenLineIcon,
2265
+ {
2266
+ "data-icon": "inline-start",
2267
+ className: "text-emerald-600 dark:text-emerald-400"
2268
+ }
2269
+ ),
2270
+ roleValue
2271
+ ]
2272
+ })
2273
+ );
2274
+ }
2275
+ if (normalized === "staff") {
2276
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
2277
+ Badge,
2278
+ __spreadProps(__spreadValues({
2279
+ ref,
2280
+ variant: "outline",
2281
+ className: (0, import_cn19.cn)(
2282
+ "capitalize border-slate-500/30 bg-slate-500/10 text-slate-700 dark:text-slate-300 font-normal",
2283
+ className
2284
+ )
2285
+ }, props), {
2286
+ children: [
2287
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2288
+ import_lucide_react9.UserIcon,
2289
+ {
2290
+ "data-icon": "inline-start",
2291
+ className: "text-slate-600 dark:text-slate-400"
2292
+ }
2293
+ ),
2294
+ roleValue
2295
+ ]
2296
+ })
2297
+ );
2298
+ }
2299
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
2300
+ Badge,
2301
+ __spreadProps(__spreadValues({
2302
+ ref,
2303
+ variant: "secondary",
2304
+ className: (0, import_cn19.cn)("capitalize font-normal", className)
2305
+ }, props), {
2306
+ children: [
2307
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2308
+ import_lucide_react9.Building2Icon,
2309
+ {
2310
+ "data-icon": "inline-start",
2311
+ className: "text-muted-foreground"
2312
+ }
2313
+ ),
2314
+ roleValue
2315
+ ]
2316
+ })
2317
+ );
2318
+ });
2319
+ OrganizationRoleBadge.displayName = "OrganizationRoleBadge";
2320
+ var OrganizationRoles = (0, import_react11.memo)(function OrganizationRoles2({
2321
+ roles,
2322
+ className
2323
+ }) {
2324
+ const orgRoles = roles != null ? roles : [];
2325
+ if (orgRoles.length === 0) return null;
2326
+ if (orgRoles.length === 1) {
2327
+ const item = orgRoles[0];
2328
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(Tooltip, { children: [
2329
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2330
+ TooltipTrigger,
2331
+ {
2332
+ render: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2333
+ OrganizationRoleBadge,
2334
+ {
2335
+ roleName: item.roleName,
2336
+ className
2337
+ }
2338
+ )
2339
+ }
2340
+ ),
2341
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(TooltipContent, { children: [
2342
+ item.roleName,
2343
+ " at ",
2344
+ item.organizationName
2345
+ ] })
2346
+ ] });
2347
+ }
2348
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: (0, import_cn19.cn)("flex items-center gap-1.5", className), children: [
2349
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(Tooltip, { children: [
2350
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2351
+ TooltipTrigger,
2352
+ {
2353
+ render: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(OrganizationRoleBadge, { roleName: orgRoles[0].roleName })
2354
+ }
2355
+ ),
2356
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(TooltipContent, { children: [
2357
+ orgRoles[0].roleName,
2358
+ " at ",
2359
+ orgRoles[0].organizationName
2360
+ ] })
2361
+ ] }),
2362
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(Tooltip, { children: [
2363
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2364
+ TooltipTrigger,
2365
+ {
2366
+ render: /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(Badge, { variant: "secondary", className: "font-mono", children: [
2367
+ "+",
2368
+ orgRoles.length - 1
2369
+ ] })
2370
+ }
2371
+ ),
2372
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(TooltipContent, { children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "flex flex-col", children: orgRoles.slice(1).map((item, index) => {
2373
+ var _a, _b;
2374
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
2375
+ "span",
2376
+ {
2377
+ children: [
2378
+ item.roleName,
2379
+ " at ",
2380
+ item.organizationName
2381
+ ]
2382
+ },
2383
+ (_b = item.membershipId) != null ? _b : `${(_a = item.organizationName) != null ? _a : ""}-${index}`
2384
+ );
2385
+ }) }) })
2386
+ ] })
2387
+ ] });
2388
+ });
2389
+
2390
+ // src/components/composed/columns/permission-badges.tsx
2391
+ var import_cn20 = require("cn");
2392
+ var import_react12 = require("react");
2393
+ var import_jsx_runtime24 = require("react/jsx-runtime");
2394
+ var PermissionBadges = (0, import_react12.memo)(function PermissionBadges2({
2395
+ permissions,
2396
+ maxDisplay = 3,
2397
+ className
2398
+ }) {
2399
+ const perms = permissions != null ? permissions : [];
2400
+ if (perms.length === 0) return null;
2401
+ const visible = perms.slice(0, maxDisplay);
2402
+ const remaining = perms.slice(maxDisplay);
2403
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: (0, import_cn20.cn)("flex flex-wrap items-center gap-1", className), children: [
2404
+ visible.map((p) => /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
2405
+ Badge,
2406
+ {
2407
+ variant: "outline",
2408
+ className: "text-[10px] font-mono py-0 font-normal",
2409
+ children: p
1611
2410
  },
1612
- props
1613
- ),
1614
- render,
1615
- state: {
1616
- slot: "badge",
1617
- variant
1618
- }
1619
- });
1620
- }
2411
+ p
2412
+ )),
2413
+ remaining.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(Tooltip, { children: [
2414
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
2415
+ TooltipTrigger,
2416
+ {
2417
+ render: /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
2418
+ Badge,
2419
+ {
2420
+ variant: "secondary",
2421
+ className: "text-[10px] font-mono py-0 cursor-default font-normal",
2422
+ children: [
2423
+ "+",
2424
+ remaining.length
2425
+ ]
2426
+ }
2427
+ )
2428
+ }
2429
+ ),
2430
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(TooltipContent, { className: "max-w-xs", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "flex flex-col gap-0.5 text-xs font-mono", children: remaining.map((p) => /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { children: p }, p)) }) })
2431
+ ] })
2432
+ ] });
2433
+ });
2434
+ var PermissionsBadges = PermissionBadges;
1621
2435
 
1622
- // src/components/composed/columns/email-verified.tsx
1623
- var import_jsx_runtime15 = require("react/jsx-runtime");
1624
- var EmailVerified = (0, import_react4.memo)(function EmailVerified2({
1625
- verified
2436
+ // src/components/composed/columns/redirect-uris.tsx
2437
+ var import_cn21 = require("cn");
2438
+ var import_react13 = require("react");
2439
+ var import_jsx_runtime25 = require("react/jsx-runtime");
2440
+ var RedirectUris = (0, import_react13.memo)(function RedirectUris2({
2441
+ uris,
2442
+ maxDisplay = 1,
2443
+ fallback = null,
2444
+ tooltipTitle = "All Redirect URIs:",
2445
+ className
1626
2446
  }) {
1627
- return verified ? /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(Badge, { variant: "default", children: [
1628
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_lucide_react6.BadgeCheck, { "data-icon": "inline-start" }),
1629
- "Verified"
1630
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(Badge, { variant: "destructive", children: [
1631
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_lucide_react6.BadgeCheck, { "data-icon": "inline-start" }),
1632
- "Unverified"
2447
+ const list = (0, import_react13.useMemo)(() => {
2448
+ if (!uris) return [];
2449
+ if (Array.isArray(uris)) return uris.filter(Boolean);
2450
+ return [uris];
2451
+ }, [uris]);
2452
+ if (list.length === 0) {
2453
+ if (!fallback) return null;
2454
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_jsx_runtime25.Fragment, { children: fallback });
2455
+ }
2456
+ const primaryUri = list[0];
2457
+ const remainingCount = list.length - maxDisplay;
2458
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: (0, import_cn21.cn)("flex items-center gap-2", className), children: [
2459
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2460
+ "p",
2461
+ {
2462
+ className: "text-xs text-muted-foreground font-mono truncate",
2463
+ title: primaryUri,
2464
+ children: primaryUri
2465
+ }
2466
+ ),
2467
+ remainingCount > 0 && /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(Tooltip, { children: [
2468
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2469
+ TooltipTrigger,
2470
+ {
2471
+ render: /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(Badge, { variant: "outline", className: "font-mono cursor-pointer", children: [
2472
+ "+",
2473
+ remainingCount
2474
+ ] })
2475
+ }
2476
+ ),
2477
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(TooltipContent, { className: "text-xs font-mono", children: /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "flex flex-col gap-1", children: [
2478
+ tooltipTitle && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("p", { className: "font-semibold text-xs", children: tooltipTitle }),
2479
+ list.map((uri) => /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { children: uri }, uri))
2480
+ ] }) })
2481
+ ] })
1633
2482
  ] });
1634
2483
  });
2484
+ var RedirectUriLabel = RedirectUris;
2485
+ var UrisList = RedirectUris;
2486
+ var UrisLabel = RedirectUris;
1635
2487
 
1636
- // src/components/composed/columns/joined-label.tsx
1637
- var import_react5 = require("react");
1638
- var import_jsx_runtime16 = require("react/jsx-runtime");
1639
- var JoinedLabel = (0, import_react5.memo)(function JoinedLabel2({
1640
- joined,
1641
- locale = "id-ID"
2488
+ // src/components/composed/columns/running-status.tsx
2489
+ var import_cn22 = require("cn");
2490
+ var import_react14 = require("react");
2491
+ var import_jsx_runtime26 = require("react/jsx-runtime");
2492
+ var RunningStatus = (0, import_react14.memo)(function RunningStatus2({
2493
+ count = 0,
2494
+ isRunning,
2495
+ accessTokens = 0,
2496
+ refreshTokens = 0,
2497
+ usersCount = 0,
2498
+ runningLabel = "Running",
2499
+ idleLabel = "Idle",
2500
+ tooltipTitle = "Sessions & Active Tokens",
2501
+ className
1642
2502
  }) {
1643
- if (!joined) return null;
1644
- const date = typeof joined === "string" ? new Date(joined) : joined;
1645
- if (Number.isNaN(date.getTime())) return null;
1646
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { className: "text-xs font-mono", children: new Intl.DateTimeFormat(locale, {
1647
- day: "numeric",
1648
- month: "long",
1649
- year: "numeric"
1650
- }).format(date) });
2503
+ const activeCount = count != null ? count : 0;
2504
+ const running = isRunning != null ? isRunning : activeCount > 0;
2505
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(Tooltip, { children: [
2506
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
2507
+ TooltipTrigger,
2508
+ {
2509
+ render: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
2510
+ "div",
2511
+ {
2512
+ className: (0, import_cn22.cn)(
2513
+ "inline-flex items-center cursor-pointer select-none",
2514
+ className
2515
+ ),
2516
+ children: running ? /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
2517
+ Badge,
2518
+ {
2519
+ variant: "outline",
2520
+ className: "border-emerald-500/30 bg-emerald-500/10 text-emerald-700 dark:text-emerald-300 gap-1.5 text-xs font-normal",
2521
+ children: [
2522
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { className: "size-1.5 rounded-full bg-emerald-500 animate-pulse" }),
2523
+ runningLabel,
2524
+ " (",
2525
+ activeCount,
2526
+ ")"
2527
+ ]
2528
+ }
2529
+ ) : /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
2530
+ Badge,
2531
+ {
2532
+ variant: "outline",
2533
+ className: "border-border/60 bg-muted/40 text-muted-foreground gap-1.5 text-xs font-normal",
2534
+ children: [
2535
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { className: "size-1.5 rounded-full bg-muted-foreground/40" }),
2536
+ idleLabel
2537
+ ]
2538
+ }
2539
+ )
2540
+ }
2541
+ )
2542
+ }
2543
+ ),
2544
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(TooltipContent, { className: "text-xs space-y-2 p-3 min-w-[200px]", children: [
2545
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: "flex items-center justify-between border-b pb-1.5", children: [
2546
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { className: "font-semibold text-xs", children: tooltipTitle }),
2547
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
2548
+ "span",
2549
+ {
2550
+ className: (0, import_cn22.cn)(
2551
+ "text-[10px] px-1.5 py-0.5 rounded font-medium",
2552
+ running ? "bg-emerald-500/10 text-emerald-600 dark:text-emerald-400" : "bg-muted text-muted-foreground"
2553
+ ),
2554
+ children: running ? "Active" : "Idle"
2555
+ }
2556
+ )
2557
+ ] }),
2558
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: "flex flex-col gap-1 text-[11px]", children: [
2559
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: "flex items-center justify-between text-muted-foreground", children: [
2560
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { children: "Active Access Tokens:" }),
2561
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { className: "font-mono font-medium text-foreground", children: accessTokens != null ? accessTokens : 0 })
2562
+ ] }),
2563
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: "flex items-center justify-between text-muted-foreground", children: [
2564
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { children: "Active Refresh Tokens:" }),
2565
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { className: "font-mono font-medium text-foreground", children: refreshTokens != null ? refreshTokens : 0 })
2566
+ ] }),
2567
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: "flex items-center justify-between text-muted-foreground", children: [
2568
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { children: "Authorized Users:" }),
2569
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { className: "font-mono font-medium text-foreground", children: usersCount != null ? usersCount : 0 })
2570
+ ] })
2571
+ ] })
2572
+ ] })
2573
+ ] });
1651
2574
  });
2575
+ var TokenActivity = RunningStatus;
2576
+ var ActiveTokensStatus = RunningStatus;
1652
2577
 
1653
2578
  // src/components/composed/columns/user-role.tsx
1654
- var import_lucide_react7 = require("lucide-react");
1655
- var import_react6 = require("react");
1656
- var import_jsx_runtime17 = require("react/jsx-runtime");
1657
- var UserRole = (0, import_react6.memo)(function UserRole2({ role }) {
1658
- const isAdmin = role === "admin";
1659
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(Badge, { variant: "outline", className: "capitalize", children: [
1660
- isAdmin ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_lucide_react7.UserStarIcon, { "data-icon": "inline-start" }) : /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_lucide_react7.UserIcon, { "data-icon": "inline-start" }),
1661
- role
1662
- ] });
2579
+ var import_cn23 = require("cn");
2580
+ var import_lucide_react10 = require("lucide-react");
2581
+ var import_react15 = require("react");
2582
+ var import_jsx_runtime27 = require("react/jsx-runtime");
2583
+ var UserRole = (0, import_react15.memo)(function UserRole2({
2584
+ role,
2585
+ className
2586
+ }) {
2587
+ if (!role) return null;
2588
+ const normalized = role.toLowerCase().trim();
2589
+ if (normalized === "admin") {
2590
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
2591
+ Badge,
2592
+ {
2593
+ variant: "outline",
2594
+ className: (0, import_cn23.cn)(
2595
+ "capitalize border-amber-500/30 bg-amber-500/10 text-amber-700 dark:text-amber-300",
2596
+ className
2597
+ ),
2598
+ children: [
2599
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
2600
+ import_lucide_react10.UserStarIcon,
2601
+ {
2602
+ "data-icon": "inline-start",
2603
+ className: "text-amber-500 dark:text-amber-400"
2604
+ }
2605
+ ),
2606
+ role
2607
+ ]
2608
+ }
2609
+ );
2610
+ }
2611
+ if (normalized === "client") {
2612
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
2613
+ Badge,
2614
+ {
2615
+ variant: "outline",
2616
+ className: (0, import_cn23.cn)(
2617
+ "capitalize border-sky-500/30 bg-sky-500/10 text-sky-700 dark:text-sky-300",
2618
+ className
2619
+ ),
2620
+ children: [
2621
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
2622
+ import_lucide_react10.BriefcaseIcon,
2623
+ {
2624
+ "data-icon": "inline-start",
2625
+ className: "text-sky-500 dark:text-sky-400"
2626
+ }
2627
+ ),
2628
+ role
2629
+ ]
2630
+ }
2631
+ );
2632
+ }
2633
+ if (normalized === "user") {
2634
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(Badge, { variant: "outline", className: (0, import_cn23.cn)("capitalize", className), children: [
2635
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react10.UserIcon, { "data-icon": "inline-start", className: "text-muted-foreground" }),
2636
+ role
2637
+ ] });
2638
+ }
2639
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
2640
+ Badge,
2641
+ {
2642
+ variant: "secondary",
2643
+ className: (0, import_cn23.cn)("capitalize font-normal", className),
2644
+ children: [
2645
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react10.ShieldIcon, { "data-icon": "inline-start", className: "text-muted-foreground" }),
2646
+ role
2647
+ ]
2648
+ }
2649
+ );
1663
2650
  });
1664
2651
 
1665
2652
  // src/components/composed/columns/user-status.tsx
1666
- var import_lucide_react8 = require("lucide-react");
1667
- var import_react7 = require("react");
1668
- var import_jsx_runtime18 = require("react/jsx-runtime");
1669
- var UserStatus = (0, import_react7.memo)(function UserStatus2({
1670
- status
2653
+ var import_cn24 = require("cn");
2654
+ var import_react16 = require("react");
2655
+ var import_jsx_runtime28 = require("react/jsx-runtime");
2656
+ var UserStatus = (0, import_react16.memo)(function UserStatus2({
2657
+ status,
2658
+ label,
2659
+ activeLabel = "Active",
2660
+ inactiveLabel,
2661
+ className
1671
2662
  }) {
1672
- return status ? /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(Badge, { variant: "destructive", children: [
1673
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react8.BadgeCheck, { "data-icon": "inline-start" }),
1674
- "Inactive"
1675
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(Badge, { variant: "default", children: [
1676
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react8.BadgeCheck, { "data-icon": "inline-start" }),
1677
- "Active"
1678
- ] });
2663
+ var _a;
2664
+ const isInactive = typeof status === "string" ? status.toLowerCase() !== "active" : Boolean(status);
2665
+ if (isInactive) {
2666
+ const displayLabel = (_a = label != null ? label : inactiveLabel) != null ? _a : typeof status === "string" ? status : "Inactive";
2667
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(
2668
+ Badge,
2669
+ {
2670
+ variant: "outline",
2671
+ className: (0, import_cn24.cn)(
2672
+ "capitalize border-destructive/30 bg-destructive/10 text-destructive dark:text-red-400 gap-1.5 font-normal",
2673
+ className
2674
+ ),
2675
+ children: [
2676
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", { className: "size-1.5 rounded-full bg-destructive" }),
2677
+ displayLabel
2678
+ ]
2679
+ }
2680
+ );
2681
+ }
2682
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(
2683
+ Badge,
2684
+ {
2685
+ variant: "outline",
2686
+ className: (0, import_cn24.cn)(
2687
+ "capitalize border-emerald-500/30 bg-emerald-500/10 text-emerald-700 dark:text-emerald-300 gap-1.5 font-normal",
2688
+ className
2689
+ ),
2690
+ children: [
2691
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", { className: "size-1.5 rounded-full bg-emerald-500" }),
2692
+ label != null ? label : activeLabel
2693
+ ]
2694
+ }
2695
+ );
1679
2696
  });
2697
+ var ItemStatus = UserStatus;
2698
+ var StatusBadge = UserStatus;
1680
2699
 
1681
2700
  // src/components/composed/data-table/data-table.tsx
1682
2701
  var import_react_table4 = require("@tanstack/react-table");
1683
- var import_lucide_react21 = require("lucide-react");
2702
+ var import_lucide_react23 = require("lucide-react");
1684
2703
  var import_navigation3 = require("next/navigation");
1685
- var import_react12 = require("react");
2704
+ var import_react21 = require("react");
1686
2705
 
1687
2706
  // src/components/composed/state-empty.tsx
1688
- var import_react8 = require("react");
2707
+ var import_react17 = require("react");
1689
2708
 
1690
2709
  // src/components/ui/empty.tsx
1691
2710
  var import_class_variance_authority4 = require("class-variance-authority");
1692
- var import_cn13 = require("cn");
1693
- var import_jsx_runtime19 = require("react/jsx-runtime");
2711
+ var import_cn25 = require("cn");
2712
+ var import_jsx_runtime29 = require("react/jsx-runtime");
1694
2713
  function Empty(_a) {
1695
2714
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
1696
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
2715
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
1697
2716
  "div",
1698
2717
  __spreadValues({
1699
2718
  "data-slot": "empty",
1700
- className: (0, import_cn13.cn)(
2719
+ className: (0, import_cn25.cn)(
1701
2720
  "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",
1702
2721
  className
1703
2722
  )
@@ -1706,11 +2725,11 @@ function Empty(_a) {
1706
2725
  }
1707
2726
  function EmptyHeader(_a) {
1708
2727
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
1709
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
2728
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
1710
2729
  "div",
1711
2730
  __spreadValues({
1712
2731
  "data-slot": "empty-header",
1713
- className: (0, import_cn13.cn)("flex max-w-sm flex-col items-center gap-1", className)
2732
+ className: (0, import_cn25.cn)("flex max-w-sm flex-col items-center gap-1", className)
1714
2733
  }, props)
1715
2734
  );
1716
2735
  }
@@ -1736,22 +2755,22 @@ function EmptyMedia(_a) {
1736
2755
  "className",
1737
2756
  "variant"
1738
2757
  ]);
1739
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
2758
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
1740
2759
  "div",
1741
2760
  __spreadValues({
1742
2761
  "data-slot": "empty-icon",
1743
2762
  "data-variant": variant,
1744
- className: (0, import_cn13.cn)(emptyMediaVariants({ variant, className }))
2763
+ className: (0, import_cn25.cn)(emptyMediaVariants({ variant, className }))
1745
2764
  }, props)
1746
2765
  );
1747
2766
  }
1748
2767
  function EmptyTitle(_a) {
1749
2768
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
1750
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
2769
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
1751
2770
  "div",
1752
2771
  __spreadValues({
1753
2772
  "data-slot": "empty-title",
1754
- className: (0, import_cn13.cn)(
2773
+ className: (0, import_cn25.cn)(
1755
2774
  "font-heading text-sm font-medium tracking-tight",
1756
2775
  className
1757
2776
  )
@@ -1760,11 +2779,11 @@ function EmptyTitle(_a) {
1760
2779
  }
1761
2780
  function EmptyDescription(_a) {
1762
2781
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
1763
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
2782
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
1764
2783
  "div",
1765
2784
  __spreadValues({
1766
2785
  "data-slot": "empty-description",
1767
- className: (0, import_cn13.cn)(
2786
+ className: (0, import_cn25.cn)(
1768
2787
  "text-xs/relaxed text-muted-foreground [&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary",
1769
2788
  className
1770
2789
  )
@@ -1773,11 +2792,11 @@ function EmptyDescription(_a) {
1773
2792
  }
1774
2793
  function EmptyContent(_a) {
1775
2794
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
1776
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
2795
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
1777
2796
  "div",
1778
2797
  __spreadValues({
1779
2798
  "data-slot": "empty-content",
1780
- className: (0, import_cn13.cn)(
2799
+ className: (0, import_cn25.cn)(
1781
2800
  "flex w-full max-w-sm min-w-0 flex-col items-center gap-2 text-xs/relaxed text-balance",
1782
2801
  className
1783
2802
  )
@@ -1786,18 +2805,18 @@ function EmptyContent(_a) {
1786
2805
  }
1787
2806
 
1788
2807
  // src/lib/utils.ts
1789
- var import_cn14 = require("cn");
2808
+ var import_cn26 = require("cn");
1790
2809
 
1791
2810
  // src/components/composed/state-empty.tsx
1792
- var import_jsx_runtime20 = require("react/jsx-runtime");
2811
+ var import_jsx_runtime30 = require("react/jsx-runtime");
1793
2812
  function renderStateIcon(icon) {
1794
2813
  if (typeof icon === "function" || typeof icon === "object" && icon !== null && "render" in icon) {
1795
2814
  const IconComp = icon;
1796
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(IconComp, {});
2815
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(IconComp, {});
1797
2816
  }
1798
2817
  return icon;
1799
2818
  }
1800
- var StateEmpty = (0, import_react8.memo)(function StateEmpty2({
2819
+ var StateEmpty = (0, import_react17.memo)(function StateEmpty2({
1801
2820
  icon,
1802
2821
  title,
1803
2822
  description,
@@ -1810,17 +2829,17 @@ var StateEmpty = (0, import_react8.memo)(function StateEmpty2({
1810
2829
  const actionHandler = isFunctionAction ? render : onClick;
1811
2830
  const buttonRender = isFunctionAction ? void 0 : render;
1812
2831
  const hasAction = Boolean(buttonText || render || onClick);
1813
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
2832
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(
1814
2833
  Empty,
1815
2834
  {
1816
- className: (0, import_cn14.cn)("w-full", state === "outline" && "border border-dashed"),
2835
+ className: (0, import_cn26.cn)("w-full", state === "outline" && "border border-dashed"),
1817
2836
  children: [
1818
- /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(EmptyHeader, { children: [
1819
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(EmptyMedia, { variant: "icon", children: renderStateIcon(icon) }),
1820
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(EmptyTitle, { children: title }),
1821
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(EmptyDescription, { children: description })
2837
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(EmptyHeader, { children: [
2838
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(EmptyMedia, { variant: "icon", children: renderStateIcon(icon) }),
2839
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(EmptyTitle, { children: title }),
2840
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(EmptyDescription, { children: description })
1822
2841
  ] }),
1823
- hasAction && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(EmptyContent, { children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
2842
+ hasAction && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(EmptyContent, { children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
1824
2843
  Button,
1825
2844
  {
1826
2845
  variant: "outline",
@@ -1837,20 +2856,20 @@ var StateEmpty = (0, import_react8.memo)(function StateEmpty2({
1837
2856
  });
1838
2857
 
1839
2858
  // src/components/ui/table.tsx
1840
- var import_cn15 = require("cn");
1841
- var import_jsx_runtime21 = require("react/jsx-runtime");
2859
+ var import_cn27 = require("cn");
2860
+ var import_jsx_runtime31 = require("react/jsx-runtime");
1842
2861
  function Table(_a) {
1843
2862
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
1844
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
2863
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
1845
2864
  "div",
1846
2865
  {
1847
2866
  "data-slot": "table-container",
1848
2867
  className: "relative w-full overflow-x-auto",
1849
- children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
2868
+ children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
1850
2869
  "table",
1851
2870
  __spreadValues({
1852
2871
  "data-slot": "table",
1853
- className: (0, import_cn15.cn)("w-full caption-bottom text-xs", className)
2872
+ className: (0, import_cn27.cn)("w-full caption-bottom text-xs", className)
1854
2873
  }, props)
1855
2874
  )
1856
2875
  }
@@ -1858,31 +2877,31 @@ function Table(_a) {
1858
2877
  }
1859
2878
  function TableHeader(_a) {
1860
2879
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
1861
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
2880
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
1862
2881
  "thead",
1863
2882
  __spreadValues({
1864
2883
  "data-slot": "table-header",
1865
- className: (0, import_cn15.cn)("[&_tr]:border-b", className)
2884
+ className: (0, import_cn27.cn)("[&_tr]:border-b", className)
1866
2885
  }, props)
1867
2886
  );
1868
2887
  }
1869
2888
  function TableBody(_a) {
1870
2889
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
1871
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
2890
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
1872
2891
  "tbody",
1873
2892
  __spreadValues({
1874
2893
  "data-slot": "table-body",
1875
- className: (0, import_cn15.cn)("[&_tr:last-child]:border-0", className)
2894
+ className: (0, import_cn27.cn)("[&_tr:last-child]:border-0", className)
1876
2895
  }, props)
1877
2896
  );
1878
2897
  }
1879
2898
  function TableRow(_a) {
1880
2899
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
1881
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
2900
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
1882
2901
  "tr",
1883
2902
  __spreadValues({
1884
2903
  "data-slot": "table-row",
1885
- className: (0, import_cn15.cn)(
2904
+ className: (0, import_cn27.cn)(
1886
2905
  "border-b transition-colors hover:bg-muted/50 has-aria-expanded:bg-muted/50 data-[state=selected]:bg-muted",
1887
2906
  className
1888
2907
  )
@@ -1891,11 +2910,11 @@ function TableRow(_a) {
1891
2910
  }
1892
2911
  function TableHead(_a) {
1893
2912
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
1894
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
2913
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
1895
2914
  "th",
1896
2915
  __spreadValues({
1897
2916
  "data-slot": "table-head",
1898
- className: (0, import_cn15.cn)(
2917
+ className: (0, import_cn27.cn)(
1899
2918
  "h-10 px-2 text-left align-middle font-medium whitespace-nowrap text-foreground [&:has([role=checkbox])]:pr-0",
1900
2919
  className
1901
2920
  )
@@ -1904,11 +2923,11 @@ function TableHead(_a) {
1904
2923
  }
1905
2924
  function TableCell(_a) {
1906
2925
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
1907
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
2926
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
1908
2927
  "td",
1909
2928
  __spreadValues({
1910
2929
  "data-slot": "table-cell",
1911
- className: (0, import_cn15.cn)(
2930
+ className: (0, import_cn27.cn)(
1912
2931
  "p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0",
1913
2932
  className
1914
2933
  )
@@ -1944,20 +2963,20 @@ var features = (0, import_react_table.tableFeatures)({
1944
2963
 
1945
2964
  // src/components/composed/data-table/table-content-body.tsx
1946
2965
  var import_react_table2 = require("@tanstack/react-table");
1947
- var import_lucide_react9 = require("lucide-react");
1948
- var import_jsx_runtime22 = require("react/jsx-runtime");
2966
+ var import_lucide_react11 = require("lucide-react");
2967
+ var import_jsx_runtime32 = require("react/jsx-runtime");
1949
2968
  function DataTableContentBody({
1950
2969
  table,
1951
2970
  columns
1952
2971
  }) {
1953
2972
  const rows = table.getRowModel().rows;
1954
2973
  if (rows == null ? void 0 : rows.length) {
1955
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(TableBody, { children: rows.map((row) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(TableRow, { children: row.getVisibleCells().map((cell) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(TableCell, { children: (0, import_react_table2.flexRender)(cell.column.columnDef.cell, cell.getContext()) }, cell.id)) }, row.id)) });
2974
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(TableBody, { children: rows.map((row) => /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(TableRow, { children: row.getVisibleCells().map((cell) => /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(TableCell, { children: (0, import_react_table2.flexRender)(cell.column.columnDef.cell, cell.getContext()) }, cell.id)) }, row.id)) });
1956
2975
  }
1957
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(TableBody, { children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(TableRow, { children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(TableCell, { colSpan: columns.length, className: "h-48 text-center", children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
2976
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(TableBody, { children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(TableRow, { children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(TableCell, { colSpan: columns.length, className: "h-48 text-center", children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
1958
2977
  StateEmpty,
1959
2978
  {
1960
- icon: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_lucide_react9.SearchXIcon, {}),
2979
+ icon: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_lucide_react11.SearchXIcon, {}),
1961
2980
  title: "No matching results",
1962
2981
  description: "No records matched your search query or filter criteria.",
1963
2982
  buttonText: "Clear search & filters",
@@ -1971,18 +2990,18 @@ function DataTableContentBody({
1971
2990
 
1972
2991
  // src/components/composed/data-table/table-content-header.tsx
1973
2992
  var import_react_table3 = require("@tanstack/react-table");
1974
- var import_jsx_runtime23 = require("react/jsx-runtime");
2993
+ var import_jsx_runtime33 = require("react/jsx-runtime");
1975
2994
  function DataTableContentHeader({
1976
2995
  table
1977
2996
  }) {
1978
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(TableHeader, { children: table.getHeaderGroups().map((headerGroup) => /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(TableRow, { children: headerGroup.headers.map((header) => /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(TableHead, { children: header.isPlaceholder ? null : (0, import_react_table3.flexRender)(
2997
+ return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(TableHeader, { children: table.getHeaderGroups().map((headerGroup) => /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(TableRow, { children: headerGroup.headers.map((header) => /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(TableHead, { children: header.isPlaceholder ? null : (0, import_react_table3.flexRender)(
1979
2998
  header.column.columnDef.header,
1980
2999
  header.getContext()
1981
3000
  ) }, header.id)) }, headerGroup.id)) });
1982
3001
  }
1983
3002
 
1984
3003
  // src/components/composed/data-table/table-footer-entries.tsx
1985
- var import_jsx_runtime24 = require("react/jsx-runtime");
3004
+ var import_jsx_runtime34 = require("react/jsx-runtime");
1986
3005
  function DataTableFooterEntries({
1987
3006
  table
1988
3007
  }) {
@@ -1993,131 +3012,131 @@ function DataTableFooterEntries({
1993
3012
  const totalRows = table.getFilteredRowModel().rows.length;
1994
3013
  const startRow = totalRows === 0 ? 0 : pageIndex * pageSize + 1;
1995
3014
  const endRow = Math.min((pageIndex + 1) * pageSize, totalRows);
1996
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "flex-1 text-xs text-muted-foreground", children: [
3015
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "flex-1 text-xs text-muted-foreground", children: [
1997
3016
  "Showing",
1998
3017
  " ",
1999
- /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("span", { className: "font-medium text-foreground", children: [
3018
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("span", { className: "font-medium text-foreground", children: [
2000
3019
  startRow,
2001
3020
  "-",
2002
3021
  endRow
2003
3022
  ] }),
2004
3023
  " ",
2005
3024
  "of ",
2006
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: "font-medium text-foreground", children: totalRows }),
3025
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: "font-medium text-foreground", children: totalRows }),
2007
3026
  " ",
2008
3027
  "entries."
2009
3028
  ] });
2010
3029
  }
2011
3030
 
2012
3031
  // src/components/composed/data-table/table-footer-pagination.tsx
2013
- var import_lucide_react10 = require("lucide-react");
2014
- var import_jsx_runtime25 = require("react/jsx-runtime");
3032
+ var import_lucide_react12 = require("lucide-react");
3033
+ var import_jsx_runtime35 = require("react/jsx-runtime");
2015
3034
  function DataTableFooterPagination({
2016
3035
  table
2017
3036
  }) {
2018
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "flex items-center gap-1", children: [
2019
- /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(Tooltip, { children: [
2020
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
3037
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { className: "flex items-center gap-1", children: [
3038
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(Tooltip, { children: [
3039
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
2021
3040
  TooltipTrigger,
2022
3041
  {
2023
- render: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
3042
+ render: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
2024
3043
  Button,
2025
3044
  {
2026
3045
  variant: "outline",
2027
3046
  size: "icon-xs",
2028
3047
  onClick: () => table.firstPage(),
2029
3048
  disabled: !table.getCanPreviousPage(),
2030
- children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_lucide_react10.ChevronsLeftIcon, {})
3049
+ children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_lucide_react12.ChevronsLeftIcon, {})
2031
3050
  }
2032
3051
  )
2033
3052
  }
2034
3053
  ),
2035
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(TooltipContent, { children: "Go to first page" })
3054
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(TooltipContent, { children: "Go to first page" })
2036
3055
  ] }),
2037
- /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(Tooltip, { children: [
2038
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
3056
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(Tooltip, { children: [
3057
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
2039
3058
  TooltipTrigger,
2040
3059
  {
2041
- render: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
3060
+ render: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
2042
3061
  Button,
2043
3062
  {
2044
3063
  variant: "outline",
2045
3064
  size: "icon-xs",
2046
3065
  onClick: () => table.previousPage(),
2047
3066
  disabled: !table.getCanPreviousPage(),
2048
- children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_lucide_react10.ChevronLeftIcon, {})
3067
+ children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_lucide_react12.ChevronLeftIcon, {})
2049
3068
  }
2050
3069
  )
2051
3070
  }
2052
3071
  ),
2053
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(TooltipContent, { children: "Go to previous page" })
3072
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(TooltipContent, { children: "Go to previous page" })
2054
3073
  ] }),
2055
- /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(Tooltip, { children: [
2056
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
3074
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(Tooltip, { children: [
3075
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
2057
3076
  TooltipTrigger,
2058
3077
  {
2059
- render: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
3078
+ render: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
2060
3079
  Button,
2061
3080
  {
2062
3081
  variant: "outline",
2063
3082
  size: "icon-xs",
2064
3083
  onClick: () => table.nextPage(),
2065
3084
  disabled: !table.getCanNextPage(),
2066
- children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_lucide_react10.ChevronRightIcon, {})
3085
+ children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_lucide_react12.ChevronRightIcon, {})
2067
3086
  }
2068
3087
  )
2069
3088
  }
2070
3089
  ),
2071
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(TooltipContent, { children: "Go to next page" })
3090
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(TooltipContent, { children: "Go to next page" })
2072
3091
  ] }),
2073
- /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(Tooltip, { children: [
2074
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
3092
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(Tooltip, { children: [
3093
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
2075
3094
  TooltipTrigger,
2076
3095
  {
2077
- render: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
3096
+ render: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
2078
3097
  Button,
2079
3098
  {
2080
3099
  variant: "outline",
2081
3100
  size: "icon-xs",
2082
3101
  onClick: () => table.lastPage(),
2083
3102
  disabled: !table.getCanNextPage(),
2084
- children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_lucide_react10.ChevronsRightIcon, {})
3103
+ children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_lucide_react12.ChevronsRightIcon, {})
2085
3104
  }
2086
3105
  )
2087
3106
  }
2088
3107
  ),
2089
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(TooltipContent, { children: "Go to last page" })
3108
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(TooltipContent, { children: "Go to last page" })
2090
3109
  ] })
2091
3110
  ] });
2092
3111
  }
2093
3112
 
2094
3113
  // src/components/composed/data-table/table-header-add.tsx
2095
- var import_lucide_react11 = require("lucide-react");
2096
- var import_jsx_runtime26 = require("react/jsx-runtime");
3114
+ var import_lucide_react13 = require("lucide-react");
3115
+ var import_jsx_runtime36 = require("react/jsx-runtime");
2097
3116
  function DataTableHeaderAdd({
2098
3117
  onAdd,
2099
3118
  addLabel
2100
3119
  }) {
2101
- return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(import_jsx_runtime26.Fragment, { children: [
2102
- /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(Tooltip, { children: [
2103
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
3120
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_jsx_runtime36.Fragment, { children: [
3121
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(Tooltip, { children: [
3122
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
2104
3123
  TooltipTrigger,
2105
3124
  {
2106
3125
  className: "flex sm:hidden",
2107
- render: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(Button, { variant: "default", size: "icon", onClick: onAdd, children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_lucide_react11.PlusIcon, {}) })
3126
+ render: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(Button, { variant: "default", size: "icon", onClick: onAdd, children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_lucide_react13.PlusIcon, {}) })
2108
3127
  }
2109
3128
  ),
2110
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(TooltipContent, { children: addLabel != null ? addLabel : "Add" })
3129
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(TooltipContent, { children: addLabel != null ? addLabel : "Add" })
2111
3130
  ] }),
2112
- /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(Button, { variant: "default", onClick: onAdd, className: "hidden sm:flex", children: [
2113
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_lucide_react11.PlusIcon, {}),
3131
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(Button, { variant: "default", onClick: onAdd, className: "hidden sm:flex", children: [
3132
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_lucide_react13.PlusIcon, {}),
2114
3133
  addLabel != null ? addLabel : "Add"
2115
3134
  ] })
2116
3135
  ] });
2117
3136
  }
2118
3137
 
2119
3138
  // src/components/composed/data-table/table-header-download.tsx
2120
- var import_lucide_react12 = require("lucide-react");
3139
+ var import_lucide_react14 = require("lucide-react");
2121
3140
 
2122
3141
  // src/components/composed/data-table/export.ts
2123
3142
  var XLSX = __toESM(require("xlsx"));
@@ -2257,7 +3276,7 @@ function printTable(headers, rows, title = "Data Export") {
2257
3276
  }
2258
3277
 
2259
3278
  // src/components/composed/data-table/table-header-download.tsx
2260
- var import_jsx_runtime27 = require("react/jsx-runtime");
3279
+ var import_jsx_runtime37 = require("react/jsx-runtime");
2261
3280
  function getTableExportData(table) {
2262
3281
  const columns = table.getAllColumns().filter(
2263
3282
  (col) => typeof col.accessorFn !== "undefined" && col.getIsVisible()
@@ -2300,25 +3319,25 @@ function DataTableHeaderDownload({
2300
3319
  exportFilename,
2301
3320
  onDownload
2302
3321
  }) {
2303
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(DropdownMenu, { children: [
2304
- /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(Tooltip, { children: [
2305
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
3322
+ return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(DropdownMenu, { children: [
3323
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(Tooltip, { children: [
3324
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
2306
3325
  DropdownMenuTrigger,
2307
3326
  {
2308
- render: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
3327
+ render: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
2309
3328
  TooltipTrigger,
2310
3329
  {
2311
- render: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Button, { variant: "outline", size: "icon", children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react12.DownloadIcon, {}) })
3330
+ render: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(Button, { variant: "outline", size: "icon", children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_lucide_react14.DownloadIcon, {}) })
2312
3331
  }
2313
3332
  )
2314
3333
  }
2315
3334
  ),
2316
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(TooltipContent, { children: "Download options" })
3335
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(TooltipContent, { children: "Download options" })
2317
3336
  ] }),
2318
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(DropdownMenuContent, { align: "end", className: "w-48", children: /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(DropdownMenuGroup, { children: [
2319
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(DropdownMenuLabel, { children: "Download data" }),
2320
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(DropdownMenuSeparator, {}),
2321
- /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
3337
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(DropdownMenuContent, { align: "end", className: "w-48", children: /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(DropdownMenuGroup, { children: [
3338
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(DropdownMenuLabel, { children: "Download data" }),
3339
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(DropdownMenuSeparator, {}),
3340
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(
2322
3341
  DropdownMenuItem,
2323
3342
  {
2324
3343
  className: "hover:cursor-pointer",
@@ -2328,12 +3347,12 @@ function DataTableHeaderDownload({
2328
3347
  onDownload == null ? void 0 : onDownload();
2329
3348
  },
2330
3349
  children: [
2331
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react12.FileTextIcon, {}),
3350
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_lucide_react14.FileTextIcon, {}),
2332
3351
  "Download PDF"
2333
3352
  ]
2334
3353
  }
2335
3354
  ),
2336
- /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
3355
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(
2337
3356
  DropdownMenuItem,
2338
3357
  {
2339
3358
  className: "hover:cursor-pointer",
@@ -2343,12 +3362,12 @@ function DataTableHeaderDownload({
2343
3362
  onDownload == null ? void 0 : onDownload();
2344
3363
  },
2345
3364
  children: [
2346
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react12.FileSpreadsheetIcon, {}),
3365
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_lucide_react14.FileSpreadsheetIcon, {}),
2347
3366
  "Download Excel"
2348
3367
  ]
2349
3368
  }
2350
3369
  ),
2351
- /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
3370
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(
2352
3371
  DropdownMenuItem,
2353
3372
  {
2354
3373
  className: "hover:cursor-pointer",
@@ -2358,13 +3377,13 @@ function DataTableHeaderDownload({
2358
3377
  onDownload == null ? void 0 : onDownload();
2359
3378
  },
2360
3379
  children: [
2361
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react12.FileCodeIcon, {}),
3380
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_lucide_react14.FileCodeIcon, {}),
2362
3381
  "Download CSV"
2363
3382
  ]
2364
3383
  }
2365
3384
  ),
2366
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(DropdownMenuSeparator, {}),
2367
- /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
3385
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(DropdownMenuSeparator, {}),
3386
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(
2368
3387
  DropdownMenuItem,
2369
3388
  {
2370
3389
  className: "hover:cursor-pointer",
@@ -2373,7 +3392,7 @@ function DataTableHeaderDownload({
2373
3392
  printTable(headers, rows, exportFilename);
2374
3393
  },
2375
3394
  children: [
2376
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react12.PrinterIcon, {}),
3395
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_lucide_react14.PrinterIcon, {}),
2377
3396
  "Print Table"
2378
3397
  ]
2379
3398
  }
@@ -2384,15 +3403,15 @@ function DataTableHeaderDownload({
2384
3403
 
2385
3404
  // src/components/composed/data-table/table-header-filter.tsx
2386
3405
  var import_date_fns = require("date-fns");
2387
- var import_lucide_react15 = require("lucide-react");
2388
- var import_react9 = require("react");
3406
+ var import_lucide_react17 = require("lucide-react");
3407
+ var import_react18 = require("react");
2389
3408
 
2390
3409
  // src/components/ui/calendar.tsx
2391
- var import_cn16 = require("cn");
2392
- var import_lucide_react13 = require("lucide-react");
3410
+ var import_cn28 = require("cn");
3411
+ var import_lucide_react15 = require("lucide-react");
2393
3412
  var React3 = __toESM(require("react"));
2394
3413
  var import_react_day_picker = require("react-day-picker");
2395
- var import_jsx_runtime28 = require("react/jsx-runtime");
3414
+ var import_jsx_runtime38 = require("react/jsx-runtime");
2396
3415
  function Calendar(_a) {
2397
3416
  var _b = _a, {
2398
3417
  className,
@@ -2414,11 +3433,11 @@ function Calendar(_a) {
2414
3433
  "components"
2415
3434
  ]);
2416
3435
  const defaultClassNames = (0, import_react_day_picker.getDefaultClassNames)();
2417
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
3436
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
2418
3437
  import_react_day_picker.DayPicker,
2419
3438
  __spreadValues({
2420
3439
  showOutsideDays,
2421
- className: (0, import_cn16.cn)(
3440
+ className: (0, import_cn28.cn)(
2422
3441
  "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",
2423
3442
  String.raw`rtl:**:[.rdp-button\_next>svg]:rotate-180`,
2424
3443
  String.raw`rtl:**:[.rdp-button\_previous>svg]:rotate-180`,
@@ -2430,124 +3449,124 @@ function Calendar(_a) {
2430
3449
  formatMonthDropdown: (date) => date.toLocaleString(locale == null ? void 0 : locale.code, { month: "short" })
2431
3450
  }, formatters),
2432
3451
  classNames: __spreadValues({
2433
- root: (0, import_cn16.cn)("w-fit", defaultClassNames.root),
2434
- months: (0, import_cn16.cn)(
3452
+ root: (0, import_cn28.cn)("w-fit", defaultClassNames.root),
3453
+ months: (0, import_cn28.cn)(
2435
3454
  "relative flex flex-col gap-4 md:flex-row",
2436
3455
  defaultClassNames.months
2437
3456
  ),
2438
- month: (0, import_cn16.cn)("flex w-full flex-col gap-4", defaultClassNames.month),
2439
- nav: (0, import_cn16.cn)(
3457
+ month: (0, import_cn28.cn)("flex w-full flex-col gap-4", defaultClassNames.month),
3458
+ nav: (0, import_cn28.cn)(
2440
3459
  "absolute inset-x-0 top-0 flex w-full items-center justify-between gap-1",
2441
3460
  defaultClassNames.nav
2442
3461
  ),
2443
- button_previous: (0, import_cn16.cn)(
3462
+ button_previous: (0, import_cn28.cn)(
2444
3463
  buttonVariants({ variant: buttonVariant }),
2445
3464
  "size-(--cell-size) p-0 select-none aria-disabled:opacity-50",
2446
3465
  defaultClassNames.button_previous
2447
3466
  ),
2448
- button_next: (0, import_cn16.cn)(
3467
+ button_next: (0, import_cn28.cn)(
2449
3468
  buttonVariants({ variant: buttonVariant }),
2450
3469
  "size-(--cell-size) p-0 select-none aria-disabled:opacity-50",
2451
3470
  defaultClassNames.button_next
2452
3471
  ),
2453
- month_caption: (0, import_cn16.cn)(
3472
+ month_caption: (0, import_cn28.cn)(
2454
3473
  "flex h-(--cell-size) w-full items-center justify-center px-(--cell-size)",
2455
3474
  defaultClassNames.month_caption
2456
3475
  ),
2457
- dropdowns: (0, import_cn16.cn)(
3476
+ dropdowns: (0, import_cn28.cn)(
2458
3477
  "flex h-(--cell-size) w-full items-center justify-center gap-1.5 text-sm font-medium",
2459
3478
  defaultClassNames.dropdowns
2460
3479
  ),
2461
- dropdown_root: (0, import_cn16.cn)(
3480
+ dropdown_root: (0, import_cn28.cn)(
2462
3481
  "relative rounded-(--cell-radius)",
2463
3482
  defaultClassNames.dropdown_root
2464
3483
  ),
2465
- dropdown: (0, import_cn16.cn)(
3484
+ dropdown: (0, import_cn28.cn)(
2466
3485
  "absolute inset-0 bg-popover opacity-0",
2467
3486
  defaultClassNames.dropdown
2468
3487
  ),
2469
- caption_label: (0, import_cn16.cn)(
3488
+ caption_label: (0, import_cn28.cn)(
2470
3489
  "font-medium select-none",
2471
3490
  captionLayout === "label" ? "text-sm" : "flex items-center gap-1 rounded-(--cell-radius) text-sm [&>svg]:size-3.5 [&>svg]:text-muted-foreground",
2472
3491
  defaultClassNames.caption_label
2473
3492
  ),
2474
- month_grid: (0, import_cn16.cn)("w-full border-collapse", defaultClassNames.month_grid),
2475
- weekdays: (0, import_cn16.cn)("flex", defaultClassNames.weekdays),
2476
- weekday: (0, import_cn16.cn)(
3493
+ month_grid: (0, import_cn28.cn)("w-full border-collapse", defaultClassNames.month_grid),
3494
+ weekdays: (0, import_cn28.cn)("flex", defaultClassNames.weekdays),
3495
+ weekday: (0, import_cn28.cn)(
2477
3496
  "flex-1 rounded-(--cell-radius) text-[0.8rem] font-normal text-muted-foreground select-none",
2478
3497
  defaultClassNames.weekday
2479
3498
  ),
2480
- week: (0, import_cn16.cn)("mt-2 flex w-full", defaultClassNames.week),
2481
- week_number_header: (0, import_cn16.cn)(
3499
+ week: (0, import_cn28.cn)("mt-2 flex w-full", defaultClassNames.week),
3500
+ week_number_header: (0, import_cn28.cn)(
2482
3501
  "w-(--cell-size) select-none",
2483
3502
  defaultClassNames.week_number_header
2484
3503
  ),
2485
- week_number: (0, import_cn16.cn)(
3504
+ week_number: (0, import_cn28.cn)(
2486
3505
  "text-[0.8rem] text-muted-foreground select-none",
2487
3506
  defaultClassNames.week_number
2488
3507
  ),
2489
- day: (0, import_cn16.cn)(
3508
+ day: (0, import_cn28.cn)(
2490
3509
  "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)",
2491
3510
  props.showWeekNumber ? "[&:nth-child(2)[data-selected=true]_button]:rounded-l-(--cell-radius)" : "[&:first-child[data-selected=true]_button]:rounded-l-(--cell-radius)",
2492
3511
  defaultClassNames.day
2493
3512
  ),
2494
- range_start: (0, import_cn16.cn)(
3513
+ range_start: (0, import_cn28.cn)(
2495
3514
  "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",
2496
3515
  defaultClassNames.range_start
2497
3516
  ),
2498
- range_middle: (0, import_cn16.cn)("rounded-none", defaultClassNames.range_middle),
2499
- range_end: (0, import_cn16.cn)(
3517
+ range_middle: (0, import_cn28.cn)("rounded-none", defaultClassNames.range_middle),
3518
+ range_end: (0, import_cn28.cn)(
2500
3519
  "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",
2501
3520
  defaultClassNames.range_end
2502
3521
  ),
2503
- today: (0, import_cn16.cn)(
3522
+ today: (0, import_cn28.cn)(
2504
3523
  "rounded-(--cell-radius) bg-muted text-foreground data-[selected=true]:rounded-none",
2505
3524
  defaultClassNames.today
2506
3525
  ),
2507
- outside: (0, import_cn16.cn)(
3526
+ outside: (0, import_cn28.cn)(
2508
3527
  "text-muted-foreground aria-selected:text-muted-foreground",
2509
3528
  defaultClassNames.outside
2510
3529
  ),
2511
- disabled: (0, import_cn16.cn)(
3530
+ disabled: (0, import_cn28.cn)(
2512
3531
  "text-muted-foreground opacity-50",
2513
3532
  defaultClassNames.disabled
2514
3533
  ),
2515
- hidden: (0, import_cn16.cn)("invisible", defaultClassNames.hidden)
3534
+ hidden: (0, import_cn28.cn)("invisible", defaultClassNames.hidden)
2516
3535
  }, classNames),
2517
3536
  components: __spreadValues({
2518
3537
  Root: (_a2) => {
2519
3538
  var _b2 = _a2, { className: className2, rootRef } = _b2, props2 = __objRest(_b2, ["className", "rootRef"]);
2520
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
3539
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
2521
3540
  "div",
2522
3541
  __spreadValues({
2523
3542
  "data-slot": "calendar",
2524
3543
  ref: rootRef,
2525
- className: (0, import_cn16.cn)(className2)
3544
+ className: (0, import_cn28.cn)(className2)
2526
3545
  }, props2)
2527
3546
  );
2528
3547
  },
2529
3548
  Chevron: (_c) => {
2530
3549
  var _d = _c, { className: className2, orientation } = _d, props2 = __objRest(_d, ["className", "orientation"]);
2531
3550
  if (orientation === "left") {
2532
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react13.ChevronLeftIcon, __spreadValues({ className: (0, import_cn16.cn)("size-4", className2) }, props2));
3551
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_lucide_react15.ChevronLeftIcon, __spreadValues({ className: (0, import_cn28.cn)("size-4", className2) }, props2));
2533
3552
  }
2534
3553
  if (orientation === "right") {
2535
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
2536
- import_lucide_react13.ChevronRightIcon,
3554
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
3555
+ import_lucide_react15.ChevronRightIcon,
2537
3556
  __spreadValues({
2538
- className: (0, import_cn16.cn)("size-4", className2)
3557
+ className: (0, import_cn28.cn)("size-4", className2)
2539
3558
  }, props2)
2540
3559
  );
2541
3560
  }
2542
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react13.ChevronDownIcon, __spreadValues({ className: (0, import_cn16.cn)("size-4", className2) }, props2));
3561
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_lucide_react15.ChevronDownIcon, __spreadValues({ className: (0, import_cn28.cn)("size-4", className2) }, props2));
2543
3562
  },
2544
3563
  DayButton: (_e) => {
2545
3564
  var props2 = __objRest(_e, []);
2546
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(CalendarDayButton, __spreadValues({ locale }, props2));
3565
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(CalendarDayButton, __spreadValues({ locale }, props2));
2547
3566
  },
2548
3567
  WeekNumber: (_f) => {
2549
3568
  var _g = _f, { children } = _g, props2 = __objRest(_g, ["children"]);
2550
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("td", __spreadProps(__spreadValues({}, props2), { children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "flex size-(--cell-size) items-center justify-center text-center", children }) }));
3569
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("td", __spreadProps(__spreadValues({}, props2), { children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: "flex size-(--cell-size) items-center justify-center text-center", children }) }));
2551
3570
  }
2552
3571
  }, components)
2553
3572
  }, props)
@@ -2571,7 +3590,7 @@ function CalendarDayButton(_a) {
2571
3590
  var _a2;
2572
3591
  if (modifiers.focused) (_a2 = ref.current) == null ? void 0 : _a2.focus();
2573
3592
  }, [modifiers.focused]);
2574
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
3593
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
2575
3594
  Button,
2576
3595
  __spreadValues({
2577
3596
  variant: "ghost",
@@ -2581,7 +3600,7 @@ function CalendarDayButton(_a) {
2581
3600
  "data-range-start": modifiers.range_start,
2582
3601
  "data-range-end": modifiers.range_end,
2583
3602
  "data-range-middle": modifiers.range_middle,
2584
- className: (0, import_cn16.cn)(
3603
+ className: (0, import_cn28.cn)(
2585
3604
  "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",
2586
3605
  defaultClassNames.day,
2587
3606
  className
@@ -2592,15 +3611,15 @@ function CalendarDayButton(_a) {
2592
3611
 
2593
3612
  // src/components/ui/popover.tsx
2594
3613
  var import_popover = require("@base-ui/react/popover");
2595
- var import_cn17 = require("cn");
2596
- var import_jsx_runtime29 = require("react/jsx-runtime");
3614
+ var import_cn29 = require("cn");
3615
+ var import_jsx_runtime39 = require("react/jsx-runtime");
2597
3616
  function Popover(_a) {
2598
3617
  var props = __objRest(_a, []);
2599
- return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_popover.Popover.Root, __spreadValues({ "data-slot": "popover" }, props));
3618
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_popover.Popover.Root, __spreadValues({ "data-slot": "popover" }, props));
2600
3619
  }
2601
3620
  function PopoverTrigger(_a) {
2602
3621
  var props = __objRest(_a, []);
2603
- return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_popover.Popover.Trigger, __spreadValues({ "data-slot": "popover-trigger" }, props));
3622
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_popover.Popover.Trigger, __spreadValues({ "data-slot": "popover-trigger" }, props));
2604
3623
  }
2605
3624
  function PopoverContent(_a) {
2606
3625
  var _b = _a, {
@@ -2616,7 +3635,7 @@ function PopoverContent(_a) {
2616
3635
  "side",
2617
3636
  "sideOffset"
2618
3637
  ]);
2619
- return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_popover.Popover.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
3638
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_popover.Popover.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
2620
3639
  import_popover.Popover.Positioner,
2621
3640
  {
2622
3641
  align,
@@ -2624,11 +3643,11 @@ function PopoverContent(_a) {
2624
3643
  side,
2625
3644
  sideOffset,
2626
3645
  className: "isolate z-50",
2627
- children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
3646
+ children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
2628
3647
  import_popover.Popover.Popup,
2629
3648
  __spreadValues({
2630
3649
  "data-slot": "popover-content",
2631
- className: (0, import_cn17.cn)(
3650
+ className: (0, import_cn29.cn)(
2632
3651
  "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",
2633
3652
  className
2634
3653
  )
@@ -2640,17 +3659,17 @@ function PopoverContent(_a) {
2640
3659
 
2641
3660
  // src/components/ui/select.tsx
2642
3661
  var import_select = require("@base-ui/react/select");
2643
- var import_cn18 = require("cn");
2644
- var import_lucide_react14 = require("lucide-react");
2645
- var import_jsx_runtime30 = require("react/jsx-runtime");
3662
+ var import_cn30 = require("cn");
3663
+ var import_lucide_react16 = require("lucide-react");
3664
+ var import_jsx_runtime40 = require("react/jsx-runtime");
2646
3665
  var Select = import_select.Select.Root;
2647
3666
  function SelectValue(_a) {
2648
3667
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
2649
- return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
3668
+ return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
2650
3669
  import_select.Select.Value,
2651
3670
  __spreadValues({
2652
3671
  "data-slot": "select-value",
2653
- className: (0, import_cn18.cn)("flex flex-1 text-left", className)
3672
+ className: (0, import_cn30.cn)("flex flex-1 text-left", className)
2654
3673
  }, props)
2655
3674
  );
2656
3675
  }
@@ -2664,22 +3683,22 @@ function SelectTrigger(_a) {
2664
3683
  "size",
2665
3684
  "children"
2666
3685
  ]);
2667
- return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(
3686
+ return /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(
2668
3687
  import_select.Select.Trigger,
2669
3688
  __spreadProps(__spreadValues({
2670
3689
  "data-slot": "select-trigger",
2671
3690
  "data-size": size,
2672
- className: (0, import_cn18.cn)(
3691
+ className: (0, import_cn30.cn)(
2673
3692
  "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",
2674
3693
  className
2675
3694
  )
2676
3695
  }, props), {
2677
3696
  children: [
2678
3697
  children,
2679
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
3698
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
2680
3699
  import_select.Select.Icon,
2681
3700
  {
2682
- render: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_lucide_react14.ChevronDownIcon, { className: "pointer-events-none size-3.5 text-muted-foreground" })
3701
+ render: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_lucide_react16.ChevronDownIcon, { className: "pointer-events-none size-3.5 text-muted-foreground" })
2683
3702
  }
2684
3703
  )
2685
3704
  ]
@@ -2704,7 +3723,7 @@ function SelectContent(_a) {
2704
3723
  "alignOffset",
2705
3724
  "alignItemWithTrigger"
2706
3725
  ]);
2707
- return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_select.Select.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
3726
+ return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_select.Select.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
2708
3727
  import_select.Select.Positioner,
2709
3728
  {
2710
3729
  side,
@@ -2713,20 +3732,20 @@ function SelectContent(_a) {
2713
3732
  alignOffset,
2714
3733
  alignItemWithTrigger,
2715
3734
  className: "isolate z-50",
2716
- children: /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(
3735
+ children: /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(
2717
3736
  import_select.Select.Popup,
2718
3737
  __spreadProps(__spreadValues({
2719
3738
  "data-slot": "select-content",
2720
3739
  "data-align-trigger": alignItemWithTrigger,
2721
- className: (0, import_cn18.cn)(
3740
+ className: (0, import_cn30.cn)(
2722
3741
  "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",
2723
3742
  className
2724
3743
  )
2725
3744
  }, props), {
2726
3745
  children: [
2727
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(SelectScrollUpButton, {}),
2728
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_select.Select.List, { children }),
2729
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(SelectScrollDownButton, {})
3746
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(SelectScrollUpButton, {}),
3747
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_select.Select.List, { children }),
3748
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(SelectScrollDownButton, {})
2730
3749
  ]
2731
3750
  })
2732
3751
  )
@@ -2741,22 +3760,22 @@ function SelectItem(_a) {
2741
3760
  "className",
2742
3761
  "children"
2743
3762
  ]);
2744
- return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(
3763
+ return /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(
2745
3764
  import_select.Select.Item,
2746
3765
  __spreadProps(__spreadValues({
2747
3766
  "data-slot": "select-item",
2748
- className: (0, import_cn18.cn)(
3767
+ className: (0, import_cn30.cn)(
2749
3768
  "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",
2750
3769
  className
2751
3770
  )
2752
3771
  }, props), {
2753
3772
  children: [
2754
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_select.Select.ItemText, { className: "flex flex-1 shrink-0 gap-2 whitespace-nowrap", children }),
2755
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
3773
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_select.Select.ItemText, { className: "flex flex-1 shrink-0 gap-2 whitespace-nowrap", children }),
3774
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
2756
3775
  import_select.Select.ItemIndicator,
2757
3776
  {
2758
- render: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { className: "pointer-events-none absolute right-2 flex items-center justify-center" }),
2759
- children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_lucide_react14.CheckIcon, { className: "pointer-events-none" })
3777
+ render: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("span", { className: "pointer-events-none absolute right-2 flex items-center justify-center" }),
3778
+ children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_lucide_react16.CheckIcon, { className: "pointer-events-none" })
2760
3779
  }
2761
3780
  )
2762
3781
  ]
@@ -2769,16 +3788,16 @@ function SelectScrollUpButton(_a) {
2769
3788
  } = _b, props = __objRest(_b, [
2770
3789
  "className"
2771
3790
  ]);
2772
- return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
3791
+ return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
2773
3792
  import_select.Select.ScrollUpArrow,
2774
3793
  __spreadProps(__spreadValues({
2775
3794
  "data-slot": "select-scroll-up-button",
2776
- className: (0, import_cn18.cn)(
3795
+ className: (0, import_cn30.cn)(
2777
3796
  "top-0 z-10 flex w-full cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-3.5",
2778
3797
  className
2779
3798
  )
2780
3799
  }, props), {
2781
- children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_lucide_react14.ChevronUpIcon, {})
3800
+ children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_lucide_react16.ChevronUpIcon, {})
2782
3801
  })
2783
3802
  );
2784
3803
  }
@@ -2788,22 +3807,22 @@ function SelectScrollDownButton(_a) {
2788
3807
  } = _b, props = __objRest(_b, [
2789
3808
  "className"
2790
3809
  ]);
2791
- return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
3810
+ return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
2792
3811
  import_select.Select.ScrollDownArrow,
2793
3812
  __spreadProps(__spreadValues({
2794
3813
  "data-slot": "select-scroll-down-button",
2795
- className: (0, import_cn18.cn)(
3814
+ className: (0, import_cn30.cn)(
2796
3815
  "bottom-0 z-10 flex w-full cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-3.5",
2797
3816
  className
2798
3817
  )
2799
3818
  }, props), {
2800
- children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_lucide_react14.ChevronDownIcon, {})
3819
+ children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_lucide_react16.ChevronDownIcon, {})
2801
3820
  })
2802
3821
  );
2803
3822
  }
2804
3823
 
2805
3824
  // src/components/composed/data-table/table-header-filter.tsx
2806
- var import_jsx_runtime31 = require("react/jsx-runtime");
3825
+ var import_jsx_runtime41 = require("react/jsx-runtime");
2807
3826
  function smartFilterFn(row, columnId, filterValue) {
2808
3827
  var _a, _b, _c;
2809
3828
  if (filterValue === void 0 || filterValue === null || filterValue === "" || filterValue === "all") {
@@ -2944,13 +3963,13 @@ function ColumnFilterInput({
2944
3963
  table,
2945
3964
  headerText
2946
3965
  }) {
2947
- const [calendarOpen, setCalendarOpen] = (0, import_react9.useState)(false);
3966
+ const [calendarOpen, setCalendarOpen] = (0, import_react18.useState)(false);
2948
3967
  const filterValue = column.getFilterValue();
2949
- const variant = (0, import_react9.useMemo)(
3968
+ const variant = (0, import_react18.useMemo)(
2950
3969
  () => getFilterVariant(column, table),
2951
3970
  [column, table]
2952
3971
  );
2953
- const options = (0, import_react9.useMemo)(() => {
3972
+ const options = (0, import_react18.useMemo)(() => {
2954
3973
  if (variant === "boolean") {
2955
3974
  return [
2956
3975
  { label: "True / Yes", value: "true" },
@@ -2964,7 +3983,7 @@ function ColumnFilterInput({
2964
3983
  }, [column, table, variant]);
2965
3984
  if (variant === "boolean" || variant === "select") {
2966
3985
  const currentValue = filterValue === void 0 || filterValue === null || filterValue === "" ? "all" : String(filterValue);
2967
- return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { className: "relative flex items-center w-full", children: /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
3986
+ return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { className: "relative flex items-center w-full", children: /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(
2968
3987
  Select,
2969
3988
  {
2970
3989
  value: currentValue,
@@ -2976,13 +3995,13 @@ function ColumnFilterInput({
2976
3995
  }
2977
3996
  },
2978
3997
  children: [
2979
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
3998
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
2980
3999
  SelectTrigger,
2981
4000
  {
2982
4001
  className: "w-full",
2983
4002
  onKeyDown: (e) => e.stopPropagation(),
2984
4003
  onPointerDown: (e) => e.stopPropagation(),
2985
- children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
4004
+ children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
2986
4005
  SelectValue,
2987
4006
  {
2988
4007
  placeholder: `Select ${headerText.toLowerCase()}...`,
@@ -2991,9 +4010,9 @@ function ColumnFilterInput({
2991
4010
  )
2992
4011
  }
2993
4012
  ),
2994
- /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(SelectContent, { align: "start", children: [
2995
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(SelectItem, { value: "all", children: "All" }),
2996
- options.map((opt) => /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
4013
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(SelectContent, { align: "start", children: [
4014
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(SelectItem, { value: "all", children: "All" }),
4015
+ options.map((opt) => /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
2997
4016
  SelectItem,
2998
4017
  {
2999
4018
  value: opt.value,
@@ -3020,36 +4039,36 @@ function ColumnFilterInput({
3020
4039
  }
3021
4040
  }
3022
4041
  const formattedDateLabel = dateObj ? (0, import_date_fns.format)(dateObj, "yyyy-MM-dd") : "";
3023
- return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { className: "relative flex items-center w-full", children: /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(Popover, { open: calendarOpen, onOpenChange: setCalendarOpen, children: [
3024
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
4042
+ return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { className: "relative flex items-center w-full", children: /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(Popover, { open: calendarOpen, onOpenChange: setCalendarOpen, children: [
4043
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
3025
4044
  PopoverTrigger,
3026
4045
  {
3027
- render: /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
4046
+ render: /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(
3028
4047
  Button,
3029
4048
  {
3030
4049
  variant: "outline",
3031
- className: (0, import_cn14.cn)(
4050
+ className: (0, import_cn26.cn)(
3032
4051
  "w-full justify-start",
3033
4052
  !formattedDateLabel && "text-muted-foreground"
3034
4053
  ),
3035
4054
  onKeyDown: (e) => e.stopPropagation(),
3036
4055
  onPointerDown: (e) => e.stopPropagation(),
3037
4056
  children: [
3038
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_lucide_react15.CalendarIcon, { className: "mr-1 size-3 shrink-0" }),
3039
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { className: "truncate", children: formattedDateLabel || `Pick ${headerText.toLowerCase()}...` })
4057
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_lucide_react17.CalendarIcon, { className: "mr-1 size-3 shrink-0" }),
4058
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("span", { className: "truncate", children: formattedDateLabel || `Pick ${headerText.toLowerCase()}...` })
3040
4059
  ]
3041
4060
  }
3042
4061
  )
3043
4062
  }
3044
4063
  ),
3045
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
4064
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
3046
4065
  PopoverContent,
3047
4066
  {
3048
4067
  className: "w-auto p-0",
3049
4068
  align: "start",
3050
4069
  onPointerDown: (e) => e.stopPropagation(),
3051
4070
  onKeyDown: (e) => e.stopPropagation(),
3052
- children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
4071
+ children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
3053
4072
  Calendar,
3054
4073
  {
3055
4074
  mode: "single",
@@ -3068,7 +4087,7 @@ function ColumnFilterInput({
3068
4087
  )
3069
4088
  ] }) });
3070
4089
  }
3071
- return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { className: "relative flex items-center w-full", children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
4090
+ return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { className: "relative flex items-center w-full", children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
3072
4091
  Input,
3073
4092
  {
3074
4093
  id: `filter-${column.id}`,
@@ -3085,46 +4104,46 @@ function DataTableHeaderFilter({
3085
4104
  table,
3086
4105
  columnFilters
3087
4106
  }) {
3088
- const filterableColumns = (0, import_react9.useMemo)(
4107
+ const filterableColumns = (0, import_react18.useMemo)(
3089
4108
  () => table.getAllColumns().filter(
3090
4109
  (column) => typeof column.accessorFn !== "undefined" && column.getCanFilter()
3091
4110
  ),
3092
4111
  [table]
3093
4112
  );
3094
4113
  if (filterableColumns.length === 0) return null;
3095
- return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(DropdownMenu, { children: [
3096
- /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(Tooltip, { children: [
3097
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
4114
+ return /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(DropdownMenu, { children: [
4115
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(Tooltip, { children: [
4116
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
3098
4117
  DropdownMenuTrigger,
3099
4118
  {
3100
- render: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
4119
+ render: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
3101
4120
  TooltipTrigger,
3102
4121
  {
3103
- render: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
4122
+ render: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
3104
4123
  Button,
3105
4124
  {
3106
4125
  variant: columnFilters.length > 0 ? "secondary" : "outline",
3107
4126
  size: "icon",
3108
- children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_lucide_react15.ListFilterIcon, {})
4127
+ children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_lucide_react17.ListFilterIcon, {})
3109
4128
  }
3110
4129
  )
3111
4130
  }
3112
4131
  )
3113
4132
  }
3114
4133
  ),
3115
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(TooltipContent, { children: "Filter options" })
4134
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(TooltipContent, { children: "Filter options" })
3116
4135
  ] }),
3117
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(DropdownMenuContent, { align: "end", className: "w-80", children: /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(DropdownMenuGroup, { children: [
3118
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(DropdownMenuLabel, { children: "Filter by column" }),
3119
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(DropdownMenuSeparator, {}),
3120
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { className: "max-h-64 overflow-y-auto space-y-2.5 p-1", children: filterableColumns.map((column) => {
4136
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(DropdownMenuContent, { align: "end", className: "w-80", children: /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(DropdownMenuGroup, { children: [
4137
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(DropdownMenuLabel, { children: "Filter by column" }),
4138
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(DropdownMenuSeparator, {}),
4139
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { className: "max-h-64 overflow-y-auto space-y-2.5 p-1", children: filterableColumns.map((column) => {
3121
4140
  const headerText = typeof column.columnDef.header === "string" ? column.columnDef.header : column.id;
3122
- return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
4141
+ return /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(
3123
4142
  "div",
3124
4143
  {
3125
4144
  className: "flex items-center justify-between px-1",
3126
4145
  children: [
3127
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
4146
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
3128
4147
  "label",
3129
4148
  {
3130
4149
  htmlFor: `filter-${column.id}`,
@@ -3132,7 +4151,7 @@ function DataTableHeaderFilter({
3132
4151
  children: headerText
3133
4152
  }
3134
4153
  ),
3135
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { className: "flex-1", children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
4154
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { className: "flex-1", children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
3136
4155
  ColumnFilterInput,
3137
4156
  {
3138
4157
  column,
@@ -3145,9 +4164,9 @@ function DataTableHeaderFilter({
3145
4164
  column.id
3146
4165
  );
3147
4166
  }) }),
3148
- columnFilters.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(import_jsx_runtime31.Fragment, { children: [
3149
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(DropdownMenuSeparator, {}),
3150
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
4167
+ columnFilters.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(import_jsx_runtime41.Fragment, { children: [
4168
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(DropdownMenuSeparator, {}),
4169
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
3151
4170
  DropdownMenuItem,
3152
4171
  {
3153
4172
  className: "hover:cursor-pointer text-destructive focus:text-destructive",
@@ -3161,13 +4180,13 @@ function DataTableHeaderFilter({
3161
4180
  }
3162
4181
 
3163
4182
  // src/components/composed/data-table/table-header-refresh.tsx
3164
- var import_lucide_react16 = require("lucide-react");
4183
+ var import_lucide_react18 = require("lucide-react");
3165
4184
  var import_navigation2 = require("next/navigation");
3166
- var import_react10 = require("react");
3167
- var import_jsx_runtime32 = require("react/jsx-runtime");
4185
+ var import_react19 = require("react");
4186
+ var import_jsx_runtime42 = require("react/jsx-runtime");
3168
4187
  function DataTableHeaderRefresh() {
3169
4188
  const router = (0, import_navigation2.useRouter)();
3170
- const [isRefreshing, setIsRefreshing] = (0, import_react10.useState)(false);
4189
+ const [isRefreshing, setIsRefreshing] = (0, import_react19.useState)(false);
3171
4190
  const handleRefresh = () => {
3172
4191
  setIsRefreshing(true);
3173
4192
  router.refresh();
@@ -3175,21 +4194,21 @@ function DataTableHeaderRefresh() {
3175
4194
  setIsRefreshing(false);
3176
4195
  }, 750);
3177
4196
  };
3178
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(Tooltip, { children: [
3179
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
4197
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(Tooltip, { children: [
4198
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
3180
4199
  TooltipTrigger,
3181
4200
  {
3182
- render: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
4201
+ render: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
3183
4202
  Button,
3184
4203
  {
3185
4204
  variant: "outline",
3186
4205
  size: "icon",
3187
4206
  onClick: handleRefresh,
3188
4207
  disabled: isRefreshing,
3189
- children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
3190
- import_lucide_react16.RotateCwIcon,
4208
+ children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
4209
+ import_lucide_react18.RotateCwIcon,
3191
4210
  {
3192
- className: (0, import_cn14.cn)(
4211
+ className: (0, import_cn26.cn)(
3193
4212
  "transition-transform duration-750",
3194
4213
  isRefreshing && "animate-spin"
3195
4214
  )
@@ -3199,19 +4218,19 @@ function DataTableHeaderRefresh() {
3199
4218
  )
3200
4219
  }
3201
4220
  ),
3202
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(TooltipContent, { children: "Refresh data" })
4221
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(TooltipContent, { children: "Refresh data" })
3203
4222
  ] });
3204
4223
  }
3205
4224
 
3206
4225
  // src/components/composed/data-table/table-header-search.tsx
3207
- var import_lucide_react17 = require("lucide-react");
3208
- var import_jsx_runtime33 = require("react/jsx-runtime");
4226
+ var import_lucide_react19 = require("lucide-react");
4227
+ var import_jsx_runtime43 = require("react/jsx-runtime");
3209
4228
  function DataTableHeaderSearch({
3210
4229
  value = "",
3211
4230
  onChange
3212
4231
  }) {
3213
- return /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "relative flex items-center max-w-sm w-full", children: [
3214
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
4232
+ return /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("div", { className: "relative flex items-center max-w-sm w-full", children: [
4233
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
3215
4234
  Input,
3216
4235
  {
3217
4236
  placeholder: "Search...",
@@ -3220,56 +4239,56 @@ function DataTableHeaderSearch({
3220
4239
  className: "pr-7"
3221
4240
  }
3222
4241
  ),
3223
- Boolean(value) && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
4242
+ Boolean(value) && /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
3224
4243
  "button",
3225
4244
  {
3226
4245
  type: "button",
3227
4246
  onClick: () => onChange(""),
3228
4247
  className: "absolute right-2 text-muted-foreground hover:text-foreground p-0.5 rounded cursor-pointer",
3229
4248
  "aria-label": "Clear search text",
3230
- children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_lucide_react17.XIcon, { className: "size-3.5" })
4249
+ children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_lucide_react19.XIcon, { className: "size-3.5" })
3231
4250
  }
3232
4251
  )
3233
4252
  ] });
3234
4253
  }
3235
4254
 
3236
4255
  // src/components/composed/data-table/table-header-sort.tsx
3237
- var import_lucide_react18 = require("lucide-react");
3238
- var import_jsx_runtime34 = require("react/jsx-runtime");
4256
+ var import_lucide_react20 = require("lucide-react");
4257
+ var import_jsx_runtime44 = require("react/jsx-runtime");
3239
4258
  function DataTableHeaderSort({
3240
4259
  table,
3241
4260
  sorting
3242
4261
  }) {
3243
4262
  const sortableColumns = table.getAllColumns().filter((column) => column.getCanSort());
3244
- return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(DropdownMenu, { children: [
3245
- /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(Tooltip, { children: [
3246
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
4263
+ return /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(DropdownMenu, { children: [
4264
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(Tooltip, { children: [
4265
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
3247
4266
  DropdownMenuTrigger,
3248
4267
  {
3249
- render: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
4268
+ render: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
3250
4269
  TooltipTrigger,
3251
4270
  {
3252
- render: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
4271
+ render: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
3253
4272
  Button,
3254
4273
  {
3255
4274
  variant: sorting.length > 0 ? "secondary" : "outline",
3256
4275
  size: "icon",
3257
- children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_lucide_react18.ArrowUpDownIcon, {})
4276
+ children: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_lucide_react20.ArrowUpDownIcon, {})
3258
4277
  }
3259
4278
  )
3260
4279
  }
3261
4280
  )
3262
4281
  }
3263
4282
  ),
3264
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(TooltipContent, { children: "Sort options" })
4283
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(TooltipContent, { children: "Sort options" })
3265
4284
  ] }),
3266
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(DropdownMenuContent, { align: "end", className: "w-48", children: /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(DropdownMenuGroup, { children: [
3267
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(DropdownMenuLabel, { children: "Sort by column" }),
3268
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(DropdownMenuSeparator, {}),
4285
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(DropdownMenuContent, { align: "end", className: "w-48", children: /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(DropdownMenuGroup, { children: [
4286
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(DropdownMenuLabel, { children: "Sort by column" }),
4287
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(DropdownMenuSeparator, {}),
3269
4288
  sortableColumns.map((column) => {
3270
4289
  const isSorted = column.getIsSorted();
3271
4290
  const headerText = typeof column.columnDef.header === "string" ? column.columnDef.header : column.id;
3272
- return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(
4291
+ return /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(
3273
4292
  DropdownMenuItem,
3274
4293
  {
3275
4294
  className: "flex items-center justify-between hover:cursor-pointer capitalize",
@@ -3284,16 +4303,16 @@ function DataTableHeaderSort({
3284
4303
  },
3285
4304
  children: [
3286
4305
  headerText,
3287
- isSorted === "asc" && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_lucide_react18.ArrowUpIcon, { className: "size-3.5" }),
3288
- isSorted === "desc" && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_lucide_react18.ArrowDownIcon, { className: "size-3.5" })
4306
+ isSorted === "asc" && /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_lucide_react20.ArrowUpIcon, { className: "size-3.5" }),
4307
+ isSorted === "desc" && /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_lucide_react20.ArrowDownIcon, { className: "size-3.5" })
3289
4308
  ]
3290
4309
  },
3291
4310
  column.id
3292
4311
  );
3293
4312
  }),
3294
- sorting.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(import_jsx_runtime34.Fragment, { children: [
3295
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(DropdownMenuSeparator, {}),
3296
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
4313
+ sorting.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(import_jsx_runtime44.Fragment, { children: [
4314
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(DropdownMenuSeparator, {}),
4315
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
3297
4316
  DropdownMenuItem,
3298
4317
  {
3299
4318
  className: "hover:cursor-pointer text-destructive focus:text-destructive",
@@ -3307,34 +4326,34 @@ function DataTableHeaderSort({
3307
4326
  }
3308
4327
 
3309
4328
  // src/components/composed/data-table/table-header-toggle.tsx
3310
- var import_lucide_react19 = require("lucide-react");
3311
- var import_jsx_runtime35 = require("react/jsx-runtime");
4329
+ var import_lucide_react21 = require("lucide-react");
4330
+ var import_jsx_runtime45 = require("react/jsx-runtime");
3312
4331
  function DataTableHeaderToggle({
3313
4332
  table
3314
4333
  }) {
3315
- return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(DropdownMenu, { children: [
3316
- /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(Tooltip, { children: [
3317
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
4334
+ return /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(DropdownMenu, { children: [
4335
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(Tooltip, { children: [
4336
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
3318
4337
  DropdownMenuTrigger,
3319
4338
  {
3320
- render: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
4339
+ render: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
3321
4340
  TooltipTrigger,
3322
4341
  {
3323
- render: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(Button, { variant: "outline", size: "icon", children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_lucide_react19.Columns3CogIcon, {}) })
4342
+ render: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(Button, { variant: "outline", size: "icon", children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_lucide_react21.Columns3CogIcon, {}) })
3324
4343
  }
3325
4344
  )
3326
4345
  }
3327
4346
  ),
3328
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(TooltipContent, { children: "Toggle columns" })
4347
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(TooltipContent, { children: "Toggle columns" })
3329
4348
  ] }),
3330
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(DropdownMenuContent, { align: "end", className: "w-48", children: /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(DropdownMenuGroup, { children: [
3331
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(DropdownMenuLabel, { children: "Toggle columns" }),
3332
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(DropdownMenuSeparator, {}),
4349
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(DropdownMenuContent, { align: "end", className: "w-48", children: /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(DropdownMenuGroup, { children: [
4350
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(DropdownMenuLabel, { children: "Toggle columns" }),
4351
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(DropdownMenuSeparator, {}),
3333
4352
  table.getAllColumns().filter(
3334
4353
  (column) => typeof column.accessorFn !== "undefined" && column.getCanHide()
3335
4354
  ).map((column) => {
3336
4355
  const headerText = typeof column.columnDef.header === "string" ? column.columnDef.header : column.id;
3337
- return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
4356
+ return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
3338
4357
  DropdownMenuCheckboxItem,
3339
4358
  {
3340
4359
  className: "capitalize hover:cursor-pointer",
@@ -3350,9 +4369,9 @@ function DataTableHeaderToggle({
3350
4369
  }
3351
4370
 
3352
4371
  // src/components/composed/data-table/data-row-actions.tsx
3353
- var import_lucide_react20 = require("lucide-react");
3354
- var import_react11 = require("react");
3355
- var import_jsx_runtime36 = require("react/jsx-runtime");
4372
+ var import_lucide_react22 = require("lucide-react");
4373
+ var import_react20 = require("react");
4374
+ var import_jsx_runtime46 = require("react/jsx-runtime");
3356
4375
  function RowActions({
3357
4376
  label = "Actions",
3358
4377
  items = [],
@@ -3366,50 +4385,50 @@ function RowActions({
3366
4385
  if (visibleItems.length === 0) {
3367
4386
  return null;
3368
4387
  }
3369
- return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
4388
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
3370
4389
  "div",
3371
4390
  {
3372
- className: (0, import_cn14.cn)("flex items-center justify-end w-full", containerClassName),
3373
- children: /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(DropdownMenu, { children: [
3374
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
4391
+ className: (0, import_cn26.cn)("flex items-center justify-end w-full", containerClassName),
4392
+ children: /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(DropdownMenu, { children: [
4393
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
3375
4394
  DropdownMenuTrigger,
3376
4395
  {
3377
- render: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(Button, { variant: "ghost", size: "icon-xs", "aria-label": triggerLabel, children: triggerIcon != null ? triggerIcon : /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_lucide_react20.MoreHorizontal, { className: "size-4" }) })
4396
+ render: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(Button, { variant: "ghost", size: "icon-xs", "aria-label": triggerLabel, children: triggerIcon != null ? triggerIcon : /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react22.MoreHorizontal, { className: "size-4" }) })
3378
4397
  }
3379
4398
  ),
3380
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
4399
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
3381
4400
  DropdownMenuContent,
3382
4401
  {
3383
4402
  align,
3384
- className: (0, import_cn14.cn)("w-40", contentClassName),
3385
- children: /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(DropdownMenuGroup, { children: [
3386
- label && /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_jsx_runtime36.Fragment, { children: [
3387
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(DropdownMenuLabel, { children: label }),
3388
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(DropdownMenuSeparator, {})
4403
+ className: (0, import_cn26.cn)("w-40", contentClassName),
4404
+ children: /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(DropdownMenuGroup, { children: [
4405
+ label && /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(import_jsx_runtime46.Fragment, { children: [
4406
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(DropdownMenuLabel, { children: label }),
4407
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(DropdownMenuSeparator, {})
3389
4408
  ] }),
3390
4409
  visibleItems.map((item, index) => {
3391
4410
  var _a;
3392
4411
  const itemKey = (_a = item.id) != null ? _a : `${item.label}-${index}`;
3393
4412
  const isDestructive = item.variant === "destructive";
3394
- return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_react11.Fragment, { children: [
3395
- item.separatorBefore && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(DropdownMenuSeparator, {}),
3396
- /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(
4413
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(import_react20.Fragment, { children: [
4414
+ item.separatorBefore && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(DropdownMenuSeparator, {}),
4415
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(
3397
4416
  DropdownMenuItem,
3398
4417
  {
3399
4418
  onClick: item.onClick,
3400
4419
  disabled: item.disabled,
3401
- className: (0, import_cn14.cn)(
4420
+ className: (0, import_cn26.cn)(
3402
4421
  "hover:cursor-pointer flex items-center gap-2",
3403
4422
  isDestructive && "text-destructive focus:text-destructive",
3404
4423
  item.className
3405
4424
  ),
3406
4425
  children: [
3407
- item.icon && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: "size-4 shrink-0 flex items-center justify-center", children: item.icon }),
3408
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { children: item.label })
4426
+ item.icon && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("span", { className: "size-4 shrink-0 flex items-center justify-center", children: item.icon }),
4427
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("span", { children: item.label })
3409
4428
  ]
3410
4429
  }
3411
4430
  ),
3412
- item.separatorAfter && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(DropdownMenuSeparator, {})
4431
+ item.separatorAfter && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(DropdownMenuSeparator, {})
3413
4432
  ] }, itemKey);
3414
4433
  })
3415
4434
  ] })
@@ -3421,7 +4440,7 @@ function RowActions({
3421
4440
  }
3422
4441
 
3423
4442
  // src/components/composed/data-table/data-table.tsx
3424
- var import_jsx_runtime37 = require("react/jsx-runtime");
4443
+ var import_jsx_runtime47 = require("react/jsx-runtime");
3425
4444
  function DataTable({
3426
4445
  columns,
3427
4446
  data,
@@ -3439,12 +4458,12 @@ function DataTable({
3439
4458
  showAddButton = true
3440
4459
  }) {
3441
4460
  const router = (0, import_navigation3.useRouter)();
3442
- const [createOpen, setCreateOpen] = (0, import_react12.useState)(false);
3443
- const [sorting, setSorting] = (0, import_react12.useState)([]);
3444
- const [columnFilters, setColumnFilters] = (0, import_react12.useState)([]);
3445
- const [columnVisibility, setColumnVisibility] = (0, import_react12.useState)(initialColumnVisibility != null ? initialColumnVisibility : {});
3446
- const [globalFilter, setGlobalFilter] = (0, import_react12.useState)("");
3447
- const columnsWithSmartFilters = (0, import_react12.useMemo)(() => {
4461
+ const [createOpen, setCreateOpen] = (0, import_react21.useState)(false);
4462
+ const [sorting, setSorting] = (0, import_react21.useState)([]);
4463
+ const [columnFilters, setColumnFilters] = (0, import_react21.useState)([]);
4464
+ const [columnVisibility, setColumnVisibility] = (0, import_react21.useState)(initialColumnVisibility != null ? initialColumnVisibility : {});
4465
+ const [globalFilter, setGlobalFilter] = (0, import_react21.useState)("");
4466
+ const columnsWithSmartFilters = (0, import_react21.useMemo)(() => {
3448
4467
  return columns.map((col) => __spreadValues({
3449
4468
  filterFn: smartFilterFn
3450
4469
  }, col));
@@ -3474,12 +4493,12 @@ function DataTable({
3474
4493
  });
3475
4494
  if (data.length === 0) {
3476
4495
  const hasCreateAction = Boolean(renderCreateDialog);
3477
- return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "space-y-2", children: [
3478
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
4496
+ return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "space-y-2", children: [
4497
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
3479
4498
  StateEmpty,
3480
4499
  {
3481
4500
  state: "outline",
3482
- icon: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_lucide_react21.FolderOpenIcon, { className: "size-6 text-muted-foreground" }),
4501
+ icon: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react23.FolderOpenIcon, { className: "size-6 text-muted-foreground" }),
3483
4502
  title: "No Data Available",
3484
4503
  description: "There are currently no records to display. Create a new record to get started.",
3485
4504
  buttonText: hasCreateAction ? addLabel != null ? addLabel : "Add Record" : "Refresh",
@@ -3489,26 +4508,26 @@ function DataTable({
3489
4508
  renderCreateDialog == null ? void 0 : renderCreateDialog(createOpen, setCreateOpen)
3490
4509
  ] });
3491
4510
  }
3492
- return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "space-y-2", children: [
3493
- /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "flex flex-row items-center justify-between gap-1", children: [
3494
- showSearchInput ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
4511
+ return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "space-y-2", children: [
4512
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "flex flex-row items-center justify-between gap-1", children: [
4513
+ showSearchInput ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
3495
4514
  DataTableHeaderSearch,
3496
4515
  {
3497
4516
  value: globalFilter,
3498
4517
  onChange: setGlobalFilter
3499
4518
  }
3500
- ) : /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", {}),
3501
- /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "flex flex-row items-center gap-1", children: [
3502
- showRefreshButton && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(DataTableHeaderRefresh, {}),
3503
- showSortButton && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(DataTableHeaderSort, { table, sorting }),
3504
- showFilterButton && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
4519
+ ) : /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", {}),
4520
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "flex flex-row items-center gap-1", children: [
4521
+ showRefreshButton && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(DataTableHeaderRefresh, {}),
4522
+ showSortButton && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(DataTableHeaderSort, { table, sorting }),
4523
+ showFilterButton && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
3505
4524
  DataTableHeaderFilter,
3506
4525
  {
3507
4526
  table,
3508
4527
  columnFilters
3509
4528
  }
3510
4529
  ),
3511
- showDownloadButton && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
4530
+ showDownloadButton && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
3512
4531
  DataTableHeaderDownload,
3513
4532
  {
3514
4533
  table,
@@ -3516,8 +4535,8 @@ function DataTable({
3516
4535
  onDownload
3517
4536
  }
3518
4537
  ),
3519
- showColumnToggleButton && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(DataTableHeaderToggle, { table }),
3520
- showAddButton && renderCreateDialog && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
4538
+ showColumnToggleButton && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(DataTableHeaderToggle, { table }),
4539
+ showAddButton && renderCreateDialog && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
3521
4540
  DataTableHeaderAdd,
3522
4541
  {
3523
4542
  onAdd: () => setCreateOpen(true),
@@ -3527,13 +4546,13 @@ function DataTable({
3527
4546
  ] })
3528
4547
  ] }),
3529
4548
  renderCreateDialog == null ? void 0 : renderCreateDialog(createOpen, setCreateOpen),
3530
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: "overflow-hidden rounded-md border [&_[data-slot=table-container]]:no-scrollbar", children: /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(Table, { children: [
3531
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(DataTableContentHeader, { table }),
3532
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(DataTableContentBody, { table, columns })
4549
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: "overflow-hidden rounded-md border [&_[data-slot=table-container]]:no-scrollbar", children: /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(Table, { children: [
4550
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(DataTableContentHeader, { table }),
4551
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(DataTableContentBody, { table, columns })
3533
4552
  ] }) }),
3534
- /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "flex items-center justify-between px-2", children: [
3535
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(DataTableFooterEntries, { table }),
3536
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(DataTableFooterPagination, { table })
4553
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "flex items-center justify-between px-2", children: [
4554
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(DataTableFooterEntries, { table }),
4555
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(DataTableFooterPagination, { table })
3537
4556
  ] })
3538
4557
  ] });
3539
4558
  }
@@ -3541,13 +4560,13 @@ function DataTable({
3541
4560
  // src/components/composed/header-tabs.tsx
3542
4561
  var import_link2 = __toESM(require("next/link"));
3543
4562
  var import_navigation4 = require("next/navigation");
3544
- var import_react13 = require("react");
4563
+ var import_react22 = require("react");
3545
4564
 
3546
4565
  // src/components/ui/tabs.tsx
3547
4566
  var import_tabs = require("@base-ui/react/tabs");
3548
4567
  var import_class_variance_authority5 = require("class-variance-authority");
3549
- var import_cn19 = require("cn");
3550
- var import_jsx_runtime38 = require("react/jsx-runtime");
4568
+ var import_cn31 = require("cn");
4569
+ var import_jsx_runtime48 = require("react/jsx-runtime");
3551
4570
  function Tabs(_a) {
3552
4571
  var _b = _a, {
3553
4572
  className,
@@ -3556,12 +4575,12 @@ function Tabs(_a) {
3556
4575
  "className",
3557
4576
  "orientation"
3558
4577
  ]);
3559
- return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
4578
+ return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
3560
4579
  import_tabs.Tabs.Root,
3561
4580
  __spreadValues({
3562
4581
  "data-slot": "tabs",
3563
4582
  "data-orientation": orientation,
3564
- className: (0, import_cn19.cn)(
4583
+ className: (0, import_cn31.cn)(
3565
4584
  "group/tabs flex gap-2 data-horizontal:flex-col",
3566
4585
  className
3567
4586
  )
@@ -3590,22 +4609,22 @@ function TabsList(_a) {
3590
4609
  "className",
3591
4610
  "variant"
3592
4611
  ]);
3593
- return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
4612
+ return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
3594
4613
  import_tabs.Tabs.List,
3595
4614
  __spreadValues({
3596
4615
  "data-slot": "tabs-list",
3597
4616
  "data-variant": variant,
3598
- className: (0, import_cn19.cn)(tabsListVariants({ variant }), className)
4617
+ className: (0, import_cn31.cn)(tabsListVariants({ variant }), className)
3599
4618
  }, props)
3600
4619
  );
3601
4620
  }
3602
4621
  function TabsTrigger(_a) {
3603
4622
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
3604
- return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
4623
+ return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
3605
4624
  import_tabs.Tabs.Tab,
3606
4625
  __spreadValues({
3607
4626
  "data-slot": "tabs-trigger",
3608
- className: (0, import_cn19.cn)(
4627
+ className: (0, import_cn31.cn)(
3609
4628
  "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",
3610
4629
  "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",
3611
4630
  "data-active:bg-background data-active:text-foreground dark:data-active:border-input dark:data-active:bg-input/30 dark:data-active:text-foreground",
@@ -3617,16 +4636,16 @@ function TabsTrigger(_a) {
3617
4636
  }
3618
4637
 
3619
4638
  // src/components/composed/header-tabs.tsx
3620
- var import_jsx_runtime39 = require("react/jsx-runtime");
4639
+ var import_jsx_runtime49 = require("react/jsx-runtime");
3621
4640
  function renderTabIcon(icon) {
3622
4641
  if (!icon) return null;
3623
4642
  if (typeof icon === "function" || typeof icon === "object" && icon !== null && "render" in icon) {
3624
4643
  const IconComp = icon;
3625
- return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(IconComp, {});
4644
+ return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(IconComp, {});
3626
4645
  }
3627
4646
  return icon;
3628
4647
  }
3629
- var HeaderTabs = (0, import_react13.memo)(function HeaderTabs2({
4648
+ var HeaderTabs = (0, import_react22.memo)(function HeaderTabs2({
3630
4649
  items,
3631
4650
  value,
3632
4651
  onValueChange,
@@ -3638,12 +4657,12 @@ var HeaderTabs = (0, import_react13.memo)(function HeaderTabs2({
3638
4657
  (item) => item.url === pathname || pathname.endsWith(item.url) || pathname.split("/").includes(item.value)
3639
4658
  ) : void 0;
3640
4659
  const activeTab = (_b = value != null ? value : matchedItem == null ? void 0 : matchedItem.value) != null ? _b : (_a = items[0]) == null ? void 0 : _a.value;
3641
- return /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(Tabs, { value: activeTab, onValueChange, className: "space-y-4", children: [
3642
- /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("div", { className: "w-full overflow-x-auto overflow-y-hidden border-b no-scrollbar", children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(TabsList, { variant: "line", className: "inline-flex w-max justify-start", children: items.map(({ title, value: tabValue, url, icon }) => /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(
4660
+ return /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(Tabs, { value: activeTab, onValueChange, className: "space-y-4", children: [
4661
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "w-full overflow-x-auto overflow-y-hidden border-b no-scrollbar", children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(TabsList, { variant: "line", className: "inline-flex w-max justify-start", children: items.map(({ title, value: tabValue, url, icon }) => /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(
3643
4662
  TabsTrigger,
3644
4663
  {
3645
4664
  nativeButton: false,
3646
- render: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_link2.default, { href: url }),
4665
+ render: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(import_link2.default, { href: url }),
3647
4666
  value: tabValue,
3648
4667
  children: [
3649
4668
  renderTabIcon(icon),
@@ -3657,27 +4676,27 @@ var HeaderTabs = (0, import_react13.memo)(function HeaderTabs2({
3657
4676
  });
3658
4677
 
3659
4678
  // src/components/composed/header-title.tsx
3660
- var import_react14 = require("react");
3661
- var import_jsx_runtime40 = require("react/jsx-runtime");
3662
- var HeaderTitle = (0, import_react14.memo)(function HeaderTitle2({
4679
+ var import_react23 = require("react");
4680
+ var import_jsx_runtime50 = require("react/jsx-runtime");
4681
+ var HeaderTitle = (0, import_react23.memo)(function HeaderTitle2({
3663
4682
  title,
3664
4683
  subtitle,
3665
4684
  children
3666
4685
  }) {
3667
- return /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)("div", { className: "w-full space-y-4", children: [
3668
- /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)("div", { children: [
3669
- /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("h1", { className: "font-semibold", children: title }),
3670
- /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("p", { className: "text-xs text-muted-foreground", children: subtitle })
4686
+ return /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("div", { className: "w-full space-y-4", children: [
4687
+ /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("div", { children: [
4688
+ /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("h1", { className: "font-semibold", children: title }),
4689
+ /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("p", { className: "text-xs text-muted-foreground", children: subtitle })
3671
4690
  ] }),
3672
4691
  children
3673
4692
  ] });
3674
4693
  });
3675
4694
 
3676
4695
  // src/components/composed/icons/google.tsx
3677
- var import_jsx_runtime41 = require("react/jsx-runtime");
4696
+ var import_jsx_runtime51 = require("react/jsx-runtime");
3678
4697
  function GoogleIcon(_a) {
3679
4698
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
3680
- return /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(
4699
+ return /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(
3681
4700
  "svg",
3682
4701
  __spreadProps(__spreadValues({
3683
4702
  role: "img",
@@ -3687,28 +4706,28 @@ function GoogleIcon(_a) {
3687
4706
  xmlns: "http://www.w3.org/2000/svg"
3688
4707
  }, props), {
3689
4708
  children: [
3690
- /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
4709
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
3691
4710
  "path",
3692
4711
  {
3693
4712
  fill: "#4285F4",
3694
4713
  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"
3695
4714
  }
3696
4715
  ),
3697
- /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
4716
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
3698
4717
  "path",
3699
4718
  {
3700
4719
  fill: "#34A853",
3701
4720
  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"
3702
4721
  }
3703
4722
  ),
3704
- /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
4723
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
3705
4724
  "path",
3706
4725
  {
3707
4726
  fill: "#FBBC05",
3708
4727
  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"
3709
4728
  }
3710
4729
  ),
3711
- /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
4730
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
3712
4731
  "path",
3713
4732
  {
3714
4733
  fill: "#EA4335",
@@ -3721,8 +4740,16 @@ function GoogleIcon(_a) {
3721
4740
  }
3722
4741
  // Annotate the CommonJS export names for ESM import in node:
3723
4742
  0 && (module.exports = {
4743
+ ActiveTokensStatus,
3724
4744
  AppSidebar,
4745
+ AvatarGroupInvitations,
4746
+ AvatarGroupUsers,
4747
+ AvatarInvitations,
3725
4748
  AvatarUser,
4749
+ AvatarUsers,
4750
+ CodeLabel,
4751
+ CopyableCode,
4752
+ DEFAULT_METADATA_FIELDS,
3726
4753
  DataTable,
3727
4754
  DataTableContentBody,
3728
4755
  DataTableContentHeader,
@@ -3735,14 +4762,32 @@ function GoogleIcon(_a) {
3735
4762
  DataTableHeaderSearch,
3736
4763
  DataTableHeaderSort,
3737
4764
  DataTableHeaderToggle,
4765
+ DescriptionLabel,
3738
4766
  EmailLabel,
3739
4767
  EmailVerified,
3740
4768
  GoogleIcon,
3741
4769
  HeaderTabs,
3742
4770
  HeaderTitle,
4771
+ ItemStatus,
3743
4772
  JoinedLabel,
4773
+ MetadataProgress,
4774
+ MetadataStatus,
4775
+ OrganizationInvitations,
4776
+ OrganizationRoleBadge,
4777
+ OrganizationRoles,
4778
+ PermissionBadges,
4779
+ PermissionsBadges,
4780
+ ProgressStatus,
4781
+ RedirectUriLabel,
4782
+ RedirectUris,
3744
4783
  RowActions,
4784
+ RunningStatus,
4785
+ SlugLabel,
3745
4786
  StateEmpty,
4787
+ StatusBadge,
4788
+ TokenActivity,
4789
+ UrisLabel,
4790
+ UrisList,
3746
4791
  UserRole,
3747
4792
  UserStatus,
3748
4793
  exportToCSV,