@webdevarif/dashui 0.1.1 → 0.1.3

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.d.mts CHANGED
@@ -13,6 +13,7 @@ import * as SwitchPrimitives from '@radix-ui/react-switch';
13
13
  import * as TabsPrimitive from '@radix-ui/react-tabs';
14
14
  import * as TooltipPrimitive from '@radix-ui/react-tooltip';
15
15
  import { ClassValue } from 'clsx';
16
+ export { ThemeProvider, useTheme } from 'next-themes';
16
17
 
17
18
  declare const buttonVariants: (props?: ({
18
19
  variant?: "default" | "destructive" | "outline" | "secondary" | "ghost" | "link" | null | undefined;
@@ -325,4 +326,56 @@ declare function usePagination(total: number, pageSize?: number): {
325
326
 
326
327
  declare function cn(...inputs: ClassValue[]): string;
327
328
 
328
- export { Alert, type AlertProps, AppShell, type AppShellProps, Badge, type BadgeProps, type Breadcrumb, Button, type ButtonProps, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Checkbox, type Column, ConfirmDialog, type ConfirmDialogProps, DataTable, type DataTableProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EmptyState, type EmptyStateProps, FormField, type FormFieldProps, FormLayout, type FormLayoutProps, FormSection, type FormSectionProps, Input, type InputProps, Label, LoadingSpinner, type LoadingSpinnerProps, Page, type PageProps, PageSection, type PageSectionProps, Pagination, type PaginationProps, Popover, PopoverContent, PopoverTrigger, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sidebar, type SidebarItem, type SidebarProps, Skeleton, type Stat, Stats, type StatsProps, Switch, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, type TextareaProps, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, TopBar, type TopBarProps, badgeVariants, buttonVariants, cn, useDisclosure, usePagination };
329
+ interface AuthShellProps {
330
+ children: React$1.ReactNode;
331
+ /** Optional background pattern — 'dots' | 'grid' | 'none' */
332
+ pattern?: 'dots' | 'grid' | 'none';
333
+ }
334
+ declare function AuthShell({ children, pattern }: AuthShellProps): react_jsx_runtime.JSX.Element;
335
+
336
+ interface AuthCardProps {
337
+ children: React$1.ReactNode;
338
+ }
339
+ declare function AuthCard({ children }: AuthCardProps): react_jsx_runtime.JSX.Element;
340
+
341
+ interface AuthLogoProps {
342
+ /** App name shown next to the logo mark */
343
+ appName?: string;
344
+ /** Single letter shown inside the logo box */
345
+ letter?: string;
346
+ }
347
+ declare function AuthLogo({ appName, letter }: AuthLogoProps): react_jsx_runtime.JSX.Element;
348
+
349
+ interface AuthHeaderProps {
350
+ title: string;
351
+ description?: string;
352
+ }
353
+ declare function AuthHeader({ title, description }: AuthHeaderProps): react_jsx_runtime.JSX.Element;
354
+
355
+ interface AuthFieldProps extends React$1.InputHTMLAttributes<HTMLInputElement> {
356
+ label: string;
357
+ error?: string;
358
+ hint?: string;
359
+ rightLabel?: React$1.ReactNode;
360
+ }
361
+ declare function AuthField({ label, error, hint, rightLabel, id, ...props }: AuthFieldProps): react_jsx_runtime.JSX.Element;
362
+
363
+ interface AuthButtonProps extends React$1.ButtonHTMLAttributes<HTMLButtonElement> {
364
+ loading?: boolean;
365
+ variant?: 'primary' | 'outline' | 'ghost';
366
+ fullWidth?: boolean;
367
+ }
368
+ declare function AuthButton({ loading, variant, fullWidth, children, disabled, style, ...props }: AuthButtonProps): react_jsx_runtime.JSX.Element;
369
+
370
+ declare function AuthDivider({ label }: {
371
+ label?: string;
372
+ }): react_jsx_runtime.JSX.Element;
373
+
374
+ interface AuthFootnoteProps {
375
+ text: string;
376
+ linkText: string;
377
+ linkHref: string;
378
+ }
379
+ declare function AuthFootnote({ text, linkText, linkHref }: AuthFootnoteProps): react_jsx_runtime.JSX.Element;
380
+
381
+ export { Alert, type AlertProps, AppShell, type AppShellProps, AuthButton, AuthCard, AuthDivider, AuthField, AuthFootnote, AuthHeader, AuthLogo, AuthShell, Badge, type BadgeProps, type Breadcrumb, Button, type ButtonProps, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Checkbox, type Column, ConfirmDialog, type ConfirmDialogProps, DataTable, type DataTableProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EmptyState, type EmptyStateProps, FormField, type FormFieldProps, FormLayout, type FormLayoutProps, FormSection, type FormSectionProps, Input, type InputProps, Label, LoadingSpinner, type LoadingSpinnerProps, Page, type PageProps, PageSection, type PageSectionProps, Pagination, type PaginationProps, Popover, PopoverContent, PopoverTrigger, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sidebar, type SidebarItem, type SidebarProps, Skeleton, type Stat, Stats, type StatsProps, Switch, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, type TextareaProps, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, TopBar, type TopBarProps, badgeVariants, buttonVariants, cn, useDisclosure, usePagination };
package/dist/index.d.ts CHANGED
@@ -13,6 +13,7 @@ import * as SwitchPrimitives from '@radix-ui/react-switch';
13
13
  import * as TabsPrimitive from '@radix-ui/react-tabs';
14
14
  import * as TooltipPrimitive from '@radix-ui/react-tooltip';
15
15
  import { ClassValue } from 'clsx';
16
+ export { ThemeProvider, useTheme } from 'next-themes';
16
17
 
17
18
  declare const buttonVariants: (props?: ({
18
19
  variant?: "default" | "destructive" | "outline" | "secondary" | "ghost" | "link" | null | undefined;
@@ -325,4 +326,56 @@ declare function usePagination(total: number, pageSize?: number): {
325
326
 
326
327
  declare function cn(...inputs: ClassValue[]): string;
327
328
 
328
- export { Alert, type AlertProps, AppShell, type AppShellProps, Badge, type BadgeProps, type Breadcrumb, Button, type ButtonProps, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Checkbox, type Column, ConfirmDialog, type ConfirmDialogProps, DataTable, type DataTableProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EmptyState, type EmptyStateProps, FormField, type FormFieldProps, FormLayout, type FormLayoutProps, FormSection, type FormSectionProps, Input, type InputProps, Label, LoadingSpinner, type LoadingSpinnerProps, Page, type PageProps, PageSection, type PageSectionProps, Pagination, type PaginationProps, Popover, PopoverContent, PopoverTrigger, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sidebar, type SidebarItem, type SidebarProps, Skeleton, type Stat, Stats, type StatsProps, Switch, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, type TextareaProps, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, TopBar, type TopBarProps, badgeVariants, buttonVariants, cn, useDisclosure, usePagination };
329
+ interface AuthShellProps {
330
+ children: React$1.ReactNode;
331
+ /** Optional background pattern — 'dots' | 'grid' | 'none' */
332
+ pattern?: 'dots' | 'grid' | 'none';
333
+ }
334
+ declare function AuthShell({ children, pattern }: AuthShellProps): react_jsx_runtime.JSX.Element;
335
+
336
+ interface AuthCardProps {
337
+ children: React$1.ReactNode;
338
+ }
339
+ declare function AuthCard({ children }: AuthCardProps): react_jsx_runtime.JSX.Element;
340
+
341
+ interface AuthLogoProps {
342
+ /** App name shown next to the logo mark */
343
+ appName?: string;
344
+ /** Single letter shown inside the logo box */
345
+ letter?: string;
346
+ }
347
+ declare function AuthLogo({ appName, letter }: AuthLogoProps): react_jsx_runtime.JSX.Element;
348
+
349
+ interface AuthHeaderProps {
350
+ title: string;
351
+ description?: string;
352
+ }
353
+ declare function AuthHeader({ title, description }: AuthHeaderProps): react_jsx_runtime.JSX.Element;
354
+
355
+ interface AuthFieldProps extends React$1.InputHTMLAttributes<HTMLInputElement> {
356
+ label: string;
357
+ error?: string;
358
+ hint?: string;
359
+ rightLabel?: React$1.ReactNode;
360
+ }
361
+ declare function AuthField({ label, error, hint, rightLabel, id, ...props }: AuthFieldProps): react_jsx_runtime.JSX.Element;
362
+
363
+ interface AuthButtonProps extends React$1.ButtonHTMLAttributes<HTMLButtonElement> {
364
+ loading?: boolean;
365
+ variant?: 'primary' | 'outline' | 'ghost';
366
+ fullWidth?: boolean;
367
+ }
368
+ declare function AuthButton({ loading, variant, fullWidth, children, disabled, style, ...props }: AuthButtonProps): react_jsx_runtime.JSX.Element;
369
+
370
+ declare function AuthDivider({ label }: {
371
+ label?: string;
372
+ }): react_jsx_runtime.JSX.Element;
373
+
374
+ interface AuthFootnoteProps {
375
+ text: string;
376
+ linkText: string;
377
+ linkHref: string;
378
+ }
379
+ declare function AuthFootnote({ text, linkText, linkHref }: AuthFootnoteProps): react_jsx_runtime.JSX.Element;
380
+
381
+ export { Alert, type AlertProps, AppShell, type AppShellProps, AuthButton, AuthCard, AuthDivider, AuthField, AuthFootnote, AuthHeader, AuthLogo, AuthShell, Badge, type BadgeProps, type Breadcrumb, Button, type ButtonProps, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Checkbox, type Column, ConfirmDialog, type ConfirmDialogProps, DataTable, type DataTableProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EmptyState, type EmptyStateProps, FormField, type FormFieldProps, FormLayout, type FormLayoutProps, FormSection, type FormSectionProps, Input, type InputProps, Label, LoadingSpinner, type LoadingSpinnerProps, Page, type PageProps, PageSection, type PageSectionProps, Pagination, type PaginationProps, Popover, PopoverContent, PopoverTrigger, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sidebar, type SidebarItem, type SidebarProps, Skeleton, type Stat, Stats, type StatsProps, Switch, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, type TextareaProps, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, TopBar, type TopBarProps, badgeVariants, buttonVariants, cn, useDisclosure, usePagination };
package/dist/index.js CHANGED
@@ -32,6 +32,14 @@ var index_exports = {};
32
32
  __export(index_exports, {
33
33
  Alert: () => Alert,
34
34
  AppShell: () => AppShell,
35
+ AuthButton: () => AuthButton,
36
+ AuthCard: () => AuthCard,
37
+ AuthDivider: () => AuthDivider,
38
+ AuthField: () => AuthField,
39
+ AuthFootnote: () => AuthFootnote,
40
+ AuthHeader: () => AuthHeader,
41
+ AuthLogo: () => AuthLogo,
42
+ AuthShell: () => AuthShell,
35
43
  Badge: () => Badge,
36
44
  Button: () => Button,
37
45
  Card: () => Card,
@@ -101,6 +109,7 @@ __export(index_exports, {
101
109
  TabsList: () => TabsList,
102
110
  TabsTrigger: () => TabsTrigger,
103
111
  Textarea: () => Textarea,
112
+ ThemeProvider: () => import_next_themes.ThemeProvider,
104
113
  Tooltip: () => Tooltip,
105
114
  TooltipContent: () => TooltipContent,
106
115
  TooltipProvider: () => TooltipProvider,
@@ -110,7 +119,8 @@ __export(index_exports, {
110
119
  buttonVariants: () => buttonVariants,
111
120
  cn: () => cn,
112
121
  useDisclosure: () => useDisclosure,
113
- usePagination: () => usePagination
122
+ usePagination: () => usePagination,
123
+ useTheme: () => import_next_themes.useTheme
114
124
  });
115
125
  module.exports = __toCommonJS(index_exports);
116
126
 
@@ -1555,10 +1565,332 @@ function usePagination(total, pageSize = 20) {
1555
1565
  const totalPages = Math.ceil(total / pageSize);
1556
1566
  return { page, setPage, pageSize, total, totalPages };
1557
1567
  }
1568
+
1569
+ // src/components/auth/AuthShell.tsx
1570
+ var import_jsx_runtime32 = require("react/jsx-runtime");
1571
+ function AuthShell({ children, pattern = "dots" }) {
1572
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(
1573
+ "div",
1574
+ {
1575
+ style: {
1576
+ minHeight: "100vh",
1577
+ display: "flex",
1578
+ flexDirection: "column",
1579
+ alignItems: "center",
1580
+ justifyContent: "center",
1581
+ padding: "24px",
1582
+ background: "var(--background)",
1583
+ position: "relative",
1584
+ overflow: "hidden"
1585
+ },
1586
+ children: [
1587
+ pattern === "dots" && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
1588
+ "div",
1589
+ {
1590
+ "aria-hidden": true,
1591
+ style: {
1592
+ position: "absolute",
1593
+ inset: 0,
1594
+ backgroundImage: "radial-gradient(circle, var(--border) 1px, transparent 1px)",
1595
+ backgroundSize: "28px 28px",
1596
+ opacity: 0.5,
1597
+ pointerEvents: "none"
1598
+ }
1599
+ }
1600
+ ),
1601
+ pattern === "grid" && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
1602
+ "div",
1603
+ {
1604
+ "aria-hidden": true,
1605
+ style: {
1606
+ position: "absolute",
1607
+ inset: 0,
1608
+ backgroundImage: "linear-gradient(var(--border) 1px, transparent 1px), linear-gradient(90deg, var(--border) 1px, transparent 1px)",
1609
+ backgroundSize: "32px 32px",
1610
+ opacity: 0.4,
1611
+ pointerEvents: "none"
1612
+ }
1613
+ }
1614
+ ),
1615
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { style: { position: "relative", zIndex: 1, width: "100%", maxWidth: "440px" }, children })
1616
+ ]
1617
+ }
1618
+ );
1619
+ }
1620
+
1621
+ // src/components/auth/AuthCard.tsx
1622
+ var import_jsx_runtime33 = require("react/jsx-runtime");
1623
+ function AuthCard({ children }) {
1624
+ return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
1625
+ "div",
1626
+ {
1627
+ style: {
1628
+ background: "var(--card)",
1629
+ border: "1px solid var(--border)",
1630
+ borderRadius: "calc(var(--radius, 0.5rem) * 1.5)",
1631
+ boxShadow: "0 4px 32px rgba(0,0,0,0.06), 0 1px 4px rgba(0,0,0,0.04)",
1632
+ padding: "36px 40px",
1633
+ width: "100%"
1634
+ },
1635
+ children
1636
+ }
1637
+ );
1638
+ }
1639
+
1640
+ // src/components/auth/AuthLogo.tsx
1641
+ var import_jsx_runtime34 = require("react/jsx-runtime");
1642
+ function AuthLogo({ appName = "Builify CMS", letter = "B" }) {
1643
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { style: { display: "flex", alignItems: "center", justifyContent: "center", gap: "10px", marginBottom: "28px" }, children: [
1644
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
1645
+ "div",
1646
+ {
1647
+ style: {
1648
+ width: 36,
1649
+ height: 36,
1650
+ background: "var(--primary)",
1651
+ borderRadius: "calc(var(--radius, 0.5rem) * 1.2)",
1652
+ display: "flex",
1653
+ alignItems: "center",
1654
+ justifyContent: "center",
1655
+ color: "var(--primary-foreground)",
1656
+ fontWeight: 800,
1657
+ fontSize: "1rem",
1658
+ flexShrink: 0
1659
+ },
1660
+ children: letter
1661
+ }
1662
+ ),
1663
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
1664
+ "span",
1665
+ {
1666
+ style: {
1667
+ fontWeight: 700,
1668
+ fontSize: "1.125rem",
1669
+ color: "var(--foreground)",
1670
+ letterSpacing: "-0.02em"
1671
+ },
1672
+ children: appName
1673
+ }
1674
+ )
1675
+ ] });
1676
+ }
1677
+
1678
+ // src/components/auth/AuthHeader.tsx
1679
+ var import_jsx_runtime35 = require("react/jsx-runtime");
1680
+ function AuthHeader({ title, description }) {
1681
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { style: { marginBottom: "24px", textAlign: "center" }, children: [
1682
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
1683
+ "h1",
1684
+ {
1685
+ style: {
1686
+ fontSize: "1.375rem",
1687
+ fontWeight: 700,
1688
+ color: "var(--foreground)",
1689
+ margin: 0,
1690
+ letterSpacing: "-0.02em"
1691
+ },
1692
+ children: title
1693
+ }
1694
+ ),
1695
+ description && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
1696
+ "p",
1697
+ {
1698
+ style: {
1699
+ marginTop: "6px",
1700
+ fontSize: "0.875rem",
1701
+ color: "var(--muted-foreground)",
1702
+ lineHeight: 1.5
1703
+ },
1704
+ children: description
1705
+ }
1706
+ )
1707
+ ] });
1708
+ }
1709
+
1710
+ // src/components/auth/AuthField.tsx
1711
+ var import_jsx_runtime36 = require("react/jsx-runtime");
1712
+ function AuthField({ label, error, hint, rightLabel, id, ...props }) {
1713
+ const fieldId = id ?? label.toLowerCase().replace(/\s+/g, "-");
1714
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { style: { display: "flex", flexDirection: "column", gap: "6px" }, children: [
1715
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { style: { display: "flex", alignItems: "center", justifyContent: "space-between" }, children: [
1716
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
1717
+ "label",
1718
+ {
1719
+ htmlFor: fieldId,
1720
+ style: {
1721
+ fontSize: "0.8125rem",
1722
+ fontWeight: 500,
1723
+ color: "var(--foreground)"
1724
+ },
1725
+ children: label
1726
+ }
1727
+ ),
1728
+ rightLabel && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { style: { fontSize: "0.8125rem" }, children: rightLabel })
1729
+ ] }),
1730
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
1731
+ "input",
1732
+ {
1733
+ id: fieldId,
1734
+ style: {
1735
+ height: "40px",
1736
+ padding: "0 12px",
1737
+ background: "var(--background)",
1738
+ border: `1px solid ${error ? "var(--destructive)" : "var(--border)"}`,
1739
+ borderRadius: "var(--radius, 0.5rem)",
1740
+ color: "var(--foreground)",
1741
+ fontSize: "0.875rem",
1742
+ outline: "none",
1743
+ width: "100%",
1744
+ boxSizing: "border-box",
1745
+ transition: "border-color 0.15s, box-shadow 0.15s"
1746
+ },
1747
+ onFocus: (e) => {
1748
+ e.currentTarget.style.borderColor = "var(--ring)";
1749
+ e.currentTarget.style.boxShadow = "0 0 0 3px color-mix(in oklab, var(--ring) 20%, transparent)";
1750
+ props.onFocus?.(e);
1751
+ },
1752
+ onBlur: (e) => {
1753
+ e.currentTarget.style.borderColor = error ? "var(--destructive)" : "var(--border)";
1754
+ e.currentTarget.style.boxShadow = "none";
1755
+ props.onBlur?.(e);
1756
+ },
1757
+ ...props
1758
+ }
1759
+ ),
1760
+ error && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("p", { style: { fontSize: "0.8rem", color: "var(--destructive)", margin: 0 }, children: error }),
1761
+ hint && !error && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("p", { style: { fontSize: "0.8rem", color: "var(--muted-foreground)", margin: 0 }, children: hint })
1762
+ ] });
1763
+ }
1764
+
1765
+ // src/components/auth/AuthButton.tsx
1766
+ var import_jsx_runtime37 = require("react/jsx-runtime");
1767
+ function AuthButton({
1768
+ loading,
1769
+ variant = "primary",
1770
+ fullWidth = true,
1771
+ children,
1772
+ disabled,
1773
+ style,
1774
+ ...props
1775
+ }) {
1776
+ const base = {
1777
+ height: "42px",
1778
+ padding: "0 20px",
1779
+ borderRadius: "var(--radius, 0.5rem)",
1780
+ fontSize: "0.875rem",
1781
+ fontWeight: 600,
1782
+ cursor: loading || disabled ? "not-allowed" : "pointer",
1783
+ opacity: loading || disabled ? 0.65 : 1,
1784
+ display: "inline-flex",
1785
+ alignItems: "center",
1786
+ justifyContent: "center",
1787
+ gap: "8px",
1788
+ border: "none",
1789
+ outline: "none",
1790
+ transition: "opacity 0.15s, filter 0.15s",
1791
+ width: fullWidth ? "100%" : "auto",
1792
+ ...style
1793
+ };
1794
+ const variantStyles = {
1795
+ primary: {
1796
+ background: "var(--primary)",
1797
+ color: "var(--primary-foreground)"
1798
+ },
1799
+ outline: {
1800
+ background: "transparent",
1801
+ color: "var(--foreground)",
1802
+ border: "1px solid var(--border)"
1803
+ },
1804
+ ghost: {
1805
+ background: "transparent",
1806
+ color: "var(--foreground)"
1807
+ }
1808
+ };
1809
+ return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
1810
+ "button",
1811
+ {
1812
+ disabled: loading || disabled,
1813
+ style: { ...base, ...variantStyles[variant] },
1814
+ onMouseEnter: (e) => {
1815
+ if (!loading && !disabled) e.currentTarget.style.filter = "brightness(0.9)";
1816
+ },
1817
+ onMouseLeave: (e) => {
1818
+ e.currentTarget.style.filter = "none";
1819
+ },
1820
+ ...props,
1821
+ children: loading ? /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_jsx_runtime37.Fragment, { children: [
1822
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
1823
+ "span",
1824
+ {
1825
+ style: {
1826
+ width: 14,
1827
+ height: 14,
1828
+ border: "2px solid currentColor",
1829
+ borderTopColor: "transparent",
1830
+ borderRadius: "50%",
1831
+ display: "inline-block",
1832
+ animation: "dashui-spin 0.7s linear infinite"
1833
+ }
1834
+ }
1835
+ ),
1836
+ children
1837
+ ] }) : children
1838
+ }
1839
+ );
1840
+ }
1841
+
1842
+ // src/components/auth/AuthDivider.tsx
1843
+ var import_jsx_runtime38 = require("react/jsx-runtime");
1844
+ function AuthDivider({ label = "or" }) {
1845
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: "12px", margin: "20px 0" }, children: [
1846
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { style: { flex: 1, height: 1, background: "var(--border)" } }),
1847
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { style: { fontSize: "0.75rem", color: "var(--muted-foreground)", userSelect: "none" }, children: label }),
1848
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { style: { flex: 1, height: 1, background: "var(--border)" } })
1849
+ ] });
1850
+ }
1851
+
1852
+ // src/components/auth/AuthFootnote.tsx
1853
+ var import_jsx_runtime39 = require("react/jsx-runtime");
1854
+ function AuthFootnote({ text, linkText, linkHref }) {
1855
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)("p", { style: {
1856
+ textAlign: "center",
1857
+ marginTop: "20px",
1858
+ fontSize: "0.8125rem",
1859
+ color: "var(--muted-foreground)"
1860
+ }, children: [
1861
+ text,
1862
+ " ",
1863
+ /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
1864
+ "a",
1865
+ {
1866
+ href: linkHref,
1867
+ style: {
1868
+ color: "var(--primary)",
1869
+ fontWeight: 600,
1870
+ textDecoration: "none"
1871
+ },
1872
+ onMouseEnter: (e) => e.currentTarget.style.textDecoration = "underline",
1873
+ onMouseLeave: (e) => e.currentTarget.style.textDecoration = "none",
1874
+ children: linkText
1875
+ }
1876
+ )
1877
+ ] });
1878
+ }
1879
+
1880
+ // src/index.ts
1881
+ var import_next_themes = require("next-themes");
1558
1882
  // Annotate the CommonJS export names for ESM import in node:
1559
1883
  0 && (module.exports = {
1560
1884
  Alert,
1561
1885
  AppShell,
1886
+ AuthButton,
1887
+ AuthCard,
1888
+ AuthDivider,
1889
+ AuthField,
1890
+ AuthFootnote,
1891
+ AuthHeader,
1892
+ AuthLogo,
1893
+ AuthShell,
1562
1894
  Badge,
1563
1895
  Button,
1564
1896
  Card,
@@ -1628,6 +1960,7 @@ function usePagination(total, pageSize = 20) {
1628
1960
  TabsList,
1629
1961
  TabsTrigger,
1630
1962
  Textarea,
1963
+ ThemeProvider,
1631
1964
  Tooltip,
1632
1965
  TooltipContent,
1633
1966
  TooltipProvider,
@@ -1637,6 +1970,7 @@ function usePagination(total, pageSize = 20) {
1637
1970
  buttonVariants,
1638
1971
  cn,
1639
1972
  useDisclosure,
1640
- usePagination
1973
+ usePagination,
1974
+ useTheme
1641
1975
  });
1642
1976
  //# sourceMappingURL=index.js.map