@beyondcorp/beyond-ui 1.0.6 → 1.0.9
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/README.md +233 -89
- package/dist/_virtual/jsx-runtime.js +6 -0
- package/dist/_virtual/jsx-runtime.js.map +1 -0
- package/dist/_virtual/jsx-runtime2.js +4 -0
- package/dist/_virtual/jsx-runtime2.js.map +1 -0
- package/dist/_virtual/react-jsx-runtime.development.js +4 -0
- package/dist/_virtual/react-jsx-runtime.development.js.map +1 -0
- package/dist/_virtual/react-jsx-runtime.production.min.js +4 -0
- package/dist/_virtual/react-jsx-runtime.production.min.js.map +1 -0
- package/dist/components/Alert/Alert.d.ts +11 -0
- package/dist/components/Alert/Alert.js +28 -0
- package/dist/components/Alert/Alert.js.map +1 -0
- package/dist/components/Alert/index.d.ts +1 -0
- package/dist/components/Alert/index.js +2 -0
- package/dist/components/Alert/index.js.map +1 -0
- package/dist/components/Avatar/Avatar.d.ts +11 -0
- package/dist/components/Avatar/Avatar.js +27 -0
- package/dist/components/Avatar/Avatar.js.map +1 -0
- package/dist/components/Avatar/index.d.ts +1 -0
- package/dist/components/Avatar/index.js +2 -0
- package/dist/components/Avatar/index.js.map +1 -0
- package/dist/components/Badge/Badge.d.ts +9 -0
- package/dist/components/Badge/Badge.js +25 -0
- package/dist/components/Badge/Badge.js.map +1 -0
- package/dist/components/Badge/index.d.ts +1 -0
- package/dist/components/Badge/index.js +2 -0
- package/dist/components/Badge/index.js.map +1 -0
- package/dist/components/Button/Button.d.ts +11 -0
- package/dist/components/Button/Button.js +38 -0
- package/dist/components/Button/Button.js.map +1 -0
- package/dist/components/Button/index.d.ts +1 -0
- package/dist/components/Button/index.js +2 -0
- package/dist/components/Button/index.js.map +1 -0
- package/dist/components/Card/Card.d.ts +15 -0
- package/dist/components/Card/Card.js +39 -0
- package/dist/components/Card/Card.js.map +1 -0
- package/dist/components/Card/index.d.ts +1 -0
- package/dist/components/Card/index.js +2 -0
- package/dist/components/Card/index.js.map +1 -0
- package/dist/components/Checkbox/Checkbox.d.ts +9 -0
- package/dist/components/Checkbox/Checkbox.js +25 -0
- package/dist/components/Checkbox/Checkbox.js.map +1 -0
- package/dist/components/Checkbox/index.d.ts +1 -0
- package/dist/components/Checkbox/index.js +2 -0
- package/dist/components/Checkbox/index.js.map +1 -0
- package/dist/components/ComponentShowcase/ComponentShowcase.d.ts +6 -0
- package/dist/components/ComponentShowcase/ComponentShowcase.js +540 -0
- package/dist/components/ComponentShowcase/ComponentShowcase.js.map +1 -0
- package/dist/components/ComponentShowcase/index.d.ts +1 -0
- package/dist/components/ComponentShowcase/index.js +2 -0
- package/dist/components/ComponentShowcase/index.js.map +1 -0
- package/dist/components/DashboardGrid/DashboardGrid.d.ts +16 -0
- package/dist/components/DashboardGrid/DashboardGrid.js +54 -0
- package/dist/components/DashboardGrid/DashboardGrid.js.map +1 -0
- package/dist/components/DashboardGrid/index.d.ts +1 -0
- package/dist/components/DashboardGrid/index.js +2 -0
- package/dist/components/DashboardGrid/index.js.map +1 -0
- package/dist/components/DashboardHeader/DashboardHeader.d.ts +16 -0
- package/dist/components/DashboardHeader/DashboardHeader.js +25 -0
- package/dist/components/DashboardHeader/DashboardHeader.js.map +1 -0
- package/dist/components/DashboardHeader/index.d.ts +1 -0
- package/dist/components/DashboardHeader/index.js +2 -0
- package/dist/components/DashboardHeader/index.js.map +1 -0
- package/dist/components/DashboardLayout/DashboardLayout.d.ts +18 -0
- package/dist/components/DashboardLayout/DashboardLayout.js +19 -0
- package/dist/components/DashboardLayout/DashboardLayout.js.map +1 -0
- package/dist/components/DashboardLayout/index.d.ts +1 -0
- package/dist/components/DashboardLayout/index.js +2 -0
- package/dist/components/DashboardLayout/index.js.map +1 -0
- package/dist/components/DataTable/DataTable.d.ts +5 -0
- package/dist/components/DataTable/DataTable.js +246 -0
- package/dist/components/DataTable/DataTable.js.map +1 -0
- package/dist/components/DataTable/DataTable.types.d.ts +70 -0
- package/dist/components/DataTable/DataTableShowcase.d.ts +2 -0
- package/dist/components/DataTable/DataTableShowcase.js +348 -0
- package/dist/components/DataTable/DataTableShowcase.js.map +1 -0
- package/dist/components/DataTable/index.d.ts +2 -0
- package/dist/components/DataTable/index.js +2 -0
- package/dist/components/DataTable/index.js.map +1 -0
- package/dist/components/Input/Input.d.ts +10 -0
- package/dist/components/Input/Input.js +30 -0
- package/dist/components/Input/Input.js.map +1 -0
- package/dist/components/Input/index.d.ts +1 -0
- package/dist/components/Input/index.js +2 -0
- package/dist/components/Input/index.js.map +1 -0
- package/dist/components/Modal/Modal.d.ts +17 -0
- package/dist/components/Modal/Modal.js +35 -0
- package/dist/components/Modal/Modal.js.map +1 -0
- package/dist/components/Modal/index.d.ts +1 -0
- package/dist/components/Modal/index.js +2 -0
- package/dist/components/Modal/index.js.map +1 -0
- package/dist/components/Navbar/Navbar.d.ts +13 -0
- package/dist/components/Navbar/Navbar.js +35 -0
- package/dist/components/Navbar/Navbar.js.map +1 -0
- package/dist/components/Navbar/index.d.ts +1 -0
- package/dist/components/Navbar/index.js +2 -0
- package/dist/components/Navbar/index.js.map +1 -0
- package/dist/components/Sidebar/Sidebar.d.ts +22 -0
- package/dist/components/Sidebar/Sidebar.js +129 -0
- package/dist/components/Sidebar/Sidebar.js.map +1 -0
- package/dist/components/Sidebar/index.d.ts +1 -0
- package/dist/components/Sidebar/index.js +2 -0
- package/dist/components/Sidebar/index.js.map +1 -0
- package/dist/components/Skeleton/Skeleton.d.ts +9 -0
- package/dist/components/Skeleton/Skeleton.js +23 -0
- package/dist/components/Skeleton/Skeleton.js.map +1 -0
- package/dist/components/Skeleton/index.d.ts +1 -0
- package/dist/components/Skeleton/index.js +2 -0
- package/dist/components/Skeleton/index.js.map +1 -0
- package/dist/components/Spinner/Spinner.d.ts +10 -0
- package/dist/components/Spinner/Spinner.js +32 -0
- package/dist/components/Spinner/Spinner.js.map +1 -0
- package/dist/components/Spinner/index.d.ts +1 -0
- package/dist/components/Spinner/index.js +2 -0
- package/dist/components/Spinner/index.js.map +1 -0
- package/dist/components/StatsCard/StatsCard.d.ts +19 -0
- package/dist/components/StatsCard/StatsCard.js +56 -0
- package/dist/components/StatsCard/StatsCard.js.map +1 -0
- package/dist/components/StatsCard/index.d.ts +1 -0
- package/dist/components/StatsCard/index.js +2 -0
- package/dist/components/StatsCard/index.js.map +1 -0
- package/dist/components/Switch/Switch.d.ts +11 -0
- package/dist/components/Switch/Switch.js +39 -0
- package/dist/components/Switch/Switch.js.map +1 -0
- package/dist/components/Switch/index.d.ts +1 -0
- package/dist/components/Switch/index.js +2 -0
- package/dist/components/Switch/index.js.map +1 -0
- package/dist/components/Tabs/Tabs.d.ts +25 -0
- package/dist/components/Tabs/Tabs.js +60 -0
- package/dist/components/Tabs/Tabs.js.map +1 -0
- package/dist/components/Tabs/index.d.ts +1 -0
- package/dist/components/Tabs/index.js +2 -0
- package/dist/components/Tabs/index.js.map +1 -0
- package/dist/components/Textarea/Textarea.d.ts +9 -0
- package/dist/components/Textarea/Textarea.js +24 -0
- package/dist/components/Textarea/Textarea.js.map +1 -0
- package/dist/components/Textarea/index.d.ts +1 -0
- package/dist/components/Textarea/index.js +2 -0
- package/dist/components/Textarea/index.js.map +1 -0
- package/dist/components/Toast/Toast.d.ts +18 -0
- package/dist/components/Toast/Toast.js +75 -0
- package/dist/components/Toast/Toast.js.map +1 -0
- package/dist/components/Toast/index.d.ts +1 -0
- package/dist/components/Toast/index.js +2 -0
- package/dist/components/Toast/index.js.map +1 -0
- package/dist/hooks/useBreakpoint.d.ts +14 -0
- package/dist/hooks/useBreakpoint.js +40 -0
- package/dist/hooks/useBreakpoint.js.map +1 -0
- package/dist/hooks/useDarkMode.d.ts +4 -0
- package/dist/hooks/useDarkMode.js +29 -0
- package/dist/hooks/useDarkMode.js.map +1 -0
- package/dist/hooks/useDebounce.d.ts +1 -0
- package/dist/hooks/useDebounce.js +17 -0
- package/dist/hooks/useDebounce.js.map +1 -0
- package/dist/hooks/useLocalStorage.d.ts +1 -0
- package/dist/hooks/useLocalStorage.js +44 -0
- package/dist/hooks/useLocalStorage.js.map +1 -0
- package/dist/hooks/useToggle.d.ts +1 -0
- package/dist/hooks/useToggle.js +11 -0
- package/dist/hooks/useToggle.js.map +1 -0
- package/dist/index.d.ts +29 -424
- package/dist/index.js +30 -3375
- package/dist/index.js.map +1 -0
- package/dist/node_modules/@radix-ui/react-compose-refs/dist/index.js +37 -0
- package/dist/node_modules/@radix-ui/react-compose-refs/dist/index.js.map +1 -0
- package/dist/node_modules/@radix-ui/react-slot/dist/index.js +91 -0
- package/dist/node_modules/@radix-ui/react-slot/dist/index.js.map +1 -0
- package/dist/node_modules/goober/dist/goober.modern.js +4 -0
- package/dist/node_modules/goober/dist/goober.modern.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/createLucideIcon.js +48 -0
- package/dist/node_modules/lucide-react/dist/esm/createLucideIcon.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/defaultAttributes.js +21 -0
- package/dist/node_modules/lucide-react/dist/esm/defaultAttributes.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/alert-circle.js +18 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/alert-circle.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/alert-triangle.js +24 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/alert-triangle.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/bar-chart-3.js +19 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/bar-chart-3.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/bell.js +17 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/bell.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/book.js +16 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/book.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/calendar.js +19 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/calendar.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/check-circle.js +17 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/check-circle.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/check.js +14 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/check.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/chevron-down.js +16 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/chevron-down.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/chevron-left.js +16 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/chevron-left.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/chevron-right.js +16 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/chevron-right.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/chevron-up.js +14 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/chevron-up.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/chevrons-left.js +17 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/chevrons-left.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/chevrons-right.js +17 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/chevrons-right.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/code.js +17 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/code.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/copy.js +17 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/copy.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/dollar-sign.js +17 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/dollar-sign.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/download.js +18 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/download.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/eye.js +17 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/eye.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/file-text.js +20 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/file-text.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/filter.js +16 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/filter.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/home.js +17 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/home.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/info.js +18 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/info.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/log-out.js +18 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/log-out.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/mail.js +17 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/mail.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/menu.js +18 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/menu.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/minus.js +14 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/minus.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/monitor.js +18 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/monitor.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/moon.js +16 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/moon.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/mouse-pointer.js +17 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/mouse-pointer.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/palette.js +26 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/palette.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/panels-top-left.js +18 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/panels-top-left.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/plus.js +17 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/plus.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/search.js +17 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/search.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/settings.js +23 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/settings.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/smartphone.js +17 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/smartphone.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/square-pen.js +17 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/square-pen.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/sun.js +24 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/sun.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/tablet.js +17 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/tablet.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/trash-2.js +20 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/trash-2.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/trending-down.js +17 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/trending-down.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/trending-up.js +17 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/trending-up.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/user.js +17 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/user.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/users.js +19 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/users.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/x.js +17 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/x.js.map +1 -0
- package/dist/node_modules/react/cjs/react-jsx-runtime.development.js +1326 -0
- package/dist/node_modules/react/cjs/react-jsx-runtime.development.js.map +1 -0
- package/dist/node_modules/react/cjs/react-jsx-runtime.production.min.js +25 -0
- package/dist/node_modules/react/cjs/react-jsx-runtime.production.min.js.map +1 -0
- package/dist/node_modules/react/jsx-runtime.js +20 -0
- package/dist/node_modules/react/jsx-runtime.js.map +1 -0
- package/dist/node_modules/react-hot-toast/dist/index.js +184 -0
- package/dist/node_modules/react-hot-toast/dist/index.js.map +1 -0
- package/dist/theme/default.d.ts +69 -0
- package/dist/theme/default.js +72 -0
- package/dist/theme/default.js.map +1 -0
- package/dist/utils/cn.d.ts +2 -0
- package/dist/utils/cn.js +9 -0
- package/dist/utils/cn.js.map +1 -0
- package/package.json +8 -4
- package/dist/index.cjs +0 -3467
- package/dist/index.d.cts +0 -424
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { type VariantProps } from "class-variance-authority";
|
|
3
|
+
declare const tabsListVariants: (props?: ({
|
|
4
|
+
variant?: "default" | "pills" | "underline" | null | undefined;
|
|
5
|
+
} & import("class-variance-authority/dist/types").ClassProp) | undefined) => string;
|
|
6
|
+
declare const tabsTriggerVariants: (props?: ({
|
|
7
|
+
variant?: "default" | "pills" | "underline" | null | undefined;
|
|
8
|
+
} & import("class-variance-authority/dist/types").ClassProp) | undefined) => string;
|
|
9
|
+
interface TabsProps extends VariantProps<typeof tabsListVariants> {
|
|
10
|
+
value: string;
|
|
11
|
+
onValueChange: (value: string) => void;
|
|
12
|
+
children: React.ReactNode;
|
|
13
|
+
className?: string;
|
|
14
|
+
}
|
|
15
|
+
declare const Tabs: React.FC<TabsProps>;
|
|
16
|
+
declare const TabsList: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
|
|
17
|
+
interface TabsTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
|
|
18
|
+
value: string;
|
|
19
|
+
}
|
|
20
|
+
declare const TabsTrigger: React.ForwardRefExoticComponent<TabsTriggerProps & React.RefAttributes<HTMLButtonElement>>;
|
|
21
|
+
interface TabsContentProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
22
|
+
value: string;
|
|
23
|
+
}
|
|
24
|
+
declare const TabsContent: React.ForwardRefExoticComponent<TabsContentProps & React.RefAttributes<HTMLDivElement>>;
|
|
25
|
+
export { Tabs, TabsList, TabsTrigger, TabsContent, tabsListVariants, tabsTriggerVariants };
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { j as jsxRuntimeExports } from '../../_virtual/jsx-runtime.js';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { cva } from 'class-variance-authority';
|
|
4
|
+
import { cn } from '../../utils/cn.js';
|
|
5
|
+
|
|
6
|
+
const tabsListVariants = cva("inline-flex h-10 items-center justify-center rounded-md bg-gray-100 p-1 text-gray-500", {
|
|
7
|
+
variants: {
|
|
8
|
+
variant: {
|
|
9
|
+
default: "bg-gray-100",
|
|
10
|
+
pills: "bg-transparent gap-2",
|
|
11
|
+
underline: "bg-transparent border-b border-gray-200",
|
|
12
|
+
},
|
|
13
|
+
},
|
|
14
|
+
defaultVariants: {
|
|
15
|
+
variant: "default",
|
|
16
|
+
},
|
|
17
|
+
});
|
|
18
|
+
const tabsTriggerVariants = cva("inline-flex items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium ring-offset-white transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-500 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50", {
|
|
19
|
+
variants: {
|
|
20
|
+
variant: {
|
|
21
|
+
default: "data-[state=active]:bg-white data-[state=active]:text-gray-950 data-[state=active]:shadow-sm",
|
|
22
|
+
pills: "data-[state=active]:bg-primary-100 data-[state=active]:text-primary-700 hover:bg-gray-100",
|
|
23
|
+
underline: "data-[state=active]:border-b-2 data-[state=active]:border-primary-600 data-[state=active]:text-primary-600 hover:text-gray-900 rounded-none border-b-2 border-transparent",
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
defaultVariants: {
|
|
27
|
+
variant: "default",
|
|
28
|
+
},
|
|
29
|
+
});
|
|
30
|
+
const TabsContext = React.createContext(undefined);
|
|
31
|
+
const Tabs = ({ value, onValueChange, variant, children, className }) => {
|
|
32
|
+
return (jsxRuntimeExports.jsx(TabsContext.Provider, { value: { value, onValueChange, variant }, children: jsxRuntimeExports.jsx("div", { className: cn("w-full", className), children: children }) }));
|
|
33
|
+
};
|
|
34
|
+
const TabsList = React.forwardRef(({ className, ...props }, ref) => {
|
|
35
|
+
const context = React.useContext(TabsContext);
|
|
36
|
+
if (!context)
|
|
37
|
+
throw new Error("TabsList must be used within Tabs");
|
|
38
|
+
return (jsxRuntimeExports.jsx("div", { ref: ref, className: cn(tabsListVariants({ variant: context.variant }), className), ...props }));
|
|
39
|
+
});
|
|
40
|
+
TabsList.displayName = "TabsList";
|
|
41
|
+
const TabsTrigger = React.forwardRef(({ className, value, ...props }, ref) => {
|
|
42
|
+
const context = React.useContext(TabsContext);
|
|
43
|
+
if (!context)
|
|
44
|
+
throw new Error("TabsTrigger must be used within Tabs");
|
|
45
|
+
const isActive = context.value === value;
|
|
46
|
+
return (jsxRuntimeExports.jsx("button", { ref: ref, className: cn(tabsTriggerVariants({ variant: context.variant }), className), "data-state": isActive ? "active" : "inactive", onClick: () => context.onValueChange(value), ...props }));
|
|
47
|
+
});
|
|
48
|
+
TabsTrigger.displayName = "TabsTrigger";
|
|
49
|
+
const TabsContent = React.forwardRef(({ className, value, ...props }, ref) => {
|
|
50
|
+
const context = React.useContext(TabsContext);
|
|
51
|
+
if (!context)
|
|
52
|
+
throw new Error("TabsContent must be used within Tabs");
|
|
53
|
+
if (context.value !== value)
|
|
54
|
+
return null;
|
|
55
|
+
return (jsxRuntimeExports.jsx("div", { ref: ref, className: cn("mt-2 ring-offset-white focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-500 focus-visible:ring-offset-2", className), ...props }));
|
|
56
|
+
});
|
|
57
|
+
TabsContent.displayName = "TabsContent";
|
|
58
|
+
|
|
59
|
+
export { Tabs, TabsContent, TabsList, TabsTrigger, tabsListVariants, tabsTriggerVariants };
|
|
60
|
+
//# sourceMappingURL=Tabs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tabs.js","sources":["../../../src/components/Tabs/Tabs.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../utils/cn\";\n\nconst tabsListVariants = cva(\n \"inline-flex h-10 items-center justify-center rounded-md bg-gray-100 p-1 text-gray-500\",\n {\n variants: {\n variant: {\n default: \"bg-gray-100\",\n pills: \"bg-transparent gap-2\",\n underline: \"bg-transparent border-b border-gray-200\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n);\n\nconst tabsTriggerVariants = cva(\n \"inline-flex items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium ring-offset-white transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-500 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n {\n variants: {\n variant: {\n default: \"data-[state=active]:bg-white data-[state=active]:text-gray-950 data-[state=active]:shadow-sm\",\n pills: \"data-[state=active]:bg-primary-100 data-[state=active]:text-primary-700 hover:bg-gray-100\",\n underline: \"data-[state=active]:border-b-2 data-[state=active]:border-primary-600 data-[state=active]:text-primary-600 hover:text-gray-900 rounded-none border-b-2 border-transparent\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n);\n\ninterface TabsContextValue {\n value: string;\n onValueChange: (value: string) => void;\n variant?: VariantProps<typeof tabsListVariants>[\"variant\"];\n}\n\nconst TabsContext = React.createContext<TabsContextValue | undefined>(undefined);\n\ninterface TabsProps extends VariantProps<typeof tabsListVariants> {\n value: string;\n onValueChange: (value: string) => void;\n children: React.ReactNode;\n className?: string;\n}\n\nconst Tabs: React.FC<TabsProps> = ({ value, onValueChange, variant, children, className }) => {\n return (\n <TabsContext.Provider value={{ value, onValueChange, variant }}>\n <div className={cn(\"w-full\", className)}>{children}</div>\n </TabsContext.Provider>\n );\n};\n\nconst TabsList = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => {\n const context = React.useContext(TabsContext);\n if (!context) throw new Error(\"TabsList must be used within Tabs\");\n\n return (\n <div\n ref={ref}\n className={cn(tabsListVariants({ variant: context.variant }), className)}\n {...props}\n />\n );\n});\nTabsList.displayName = \"TabsList\";\n\ninterface TabsTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n value: string;\n}\n\nconst TabsTrigger = React.forwardRef<HTMLButtonElement, TabsTriggerProps>(\n ({ className, value, ...props }, ref) => {\n const context = React.useContext(TabsContext);\n if (!context) throw new Error(\"TabsTrigger must be used within Tabs\");\n\n const isActive = context.value === value;\n\n return (\n <button\n ref={ref}\n className={cn(\n tabsTriggerVariants({ variant: context.variant }),\n className\n )}\n data-state={isActive ? \"active\" : \"inactive\"}\n onClick={() => context.onValueChange(value)}\n {...props}\n />\n );\n }\n);\nTabsTrigger.displayName = \"TabsTrigger\";\n\ninterface TabsContentProps extends React.HTMLAttributes<HTMLDivElement> {\n value: string;\n}\n\nconst TabsContent = React.forwardRef<HTMLDivElement, TabsContentProps>(\n ({ className, value, ...props }, ref) => {\n const context = React.useContext(TabsContext);\n if (!context) throw new Error(\"TabsContent must be used within Tabs\");\n\n if (context.value !== value) return null;\n\n return (\n <div\n ref={ref}\n className={cn(\n \"mt-2 ring-offset-white focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-500 focus-visible:ring-offset-2\",\n className\n )}\n {...props}\n />\n );\n }\n);\nTabsContent.displayName = \"TabsContent\";\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent, tabsListVariants, tabsTriggerVariants };"],"names":["_jsx"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './Tabs';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { type VariantProps } from "class-variance-authority";
|
|
3
|
+
declare const textareaVariants: (props?: ({
|
|
4
|
+
variant?: "default" | "success" | "error" | null | undefined;
|
|
5
|
+
} & import("class-variance-authority/dist/types").ClassProp) | undefined) => string;
|
|
6
|
+
export interface TextareaProps extends React.TextareaHTMLAttributes<HTMLTextAreaElement>, VariantProps<typeof textareaVariants> {
|
|
7
|
+
}
|
|
8
|
+
declare const Textarea: React.ForwardRefExoticComponent<TextareaProps & React.RefAttributes<HTMLTextAreaElement>>;
|
|
9
|
+
export { Textarea, textareaVariants };
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { j as jsxRuntimeExports } from '../../_virtual/jsx-runtime.js';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { cva } from 'class-variance-authority';
|
|
4
|
+
import { cn } from '../../utils/cn.js';
|
|
5
|
+
|
|
6
|
+
const textareaVariants = cva("flex min-h-[80px] w-full rounded-md border bg-white px-3 py-2 text-sm ring-offset-white placeholder:text-gray-500 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-500 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50", {
|
|
7
|
+
variants: {
|
|
8
|
+
variant: {
|
|
9
|
+
default: "border-gray-300",
|
|
10
|
+
error: "border-danger-500 focus-visible:ring-danger-500",
|
|
11
|
+
success: "border-success-500 focus-visible:ring-success-500",
|
|
12
|
+
},
|
|
13
|
+
},
|
|
14
|
+
defaultVariants: {
|
|
15
|
+
variant: "default",
|
|
16
|
+
},
|
|
17
|
+
});
|
|
18
|
+
const Textarea = React.forwardRef(({ className, variant, ...props }, ref) => {
|
|
19
|
+
return (jsxRuntimeExports.jsx("textarea", { className: cn(textareaVariants({ variant, className })), ref: ref, ...props }));
|
|
20
|
+
});
|
|
21
|
+
Textarea.displayName = "Textarea";
|
|
22
|
+
|
|
23
|
+
export { Textarea, textareaVariants };
|
|
24
|
+
//# sourceMappingURL=Textarea.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Textarea.js","sources":["../../../src/components/Textarea/Textarea.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../utils/cn\";\n\nconst textareaVariants = cva(\n \"flex min-h-[80px] w-full rounded-md border bg-white px-3 py-2 text-sm ring-offset-white placeholder:text-gray-500 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-500 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n {\n variants: {\n variant: {\n default: \"border-gray-300\",\n error: \"border-danger-500 focus-visible:ring-danger-500\",\n success: \"border-success-500 focus-visible:ring-success-500\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n);\n\nexport interface TextareaProps\n extends React.TextareaHTMLAttributes<HTMLTextAreaElement>,\n VariantProps<typeof textareaVariants> {}\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ className, variant, ...props }, ref) => {\n return (\n <textarea\n className={cn(textareaVariants({ variant, className }))}\n ref={ref}\n {...props}\n />\n );\n }\n);\nTextarea.displayName = \"Textarea\";\n\nexport { Textarea, textareaVariants };"],"names":["_jsx"],"mappings":";;;;;AAIA,MAAM,gBAAgB,GAAG,GAAG,CAC1B,8QAA8Q,EAC9Q;AACE,IAAA,QAAQ,EAAE;AACR,QAAA,OAAO,EAAE;AACP,YAAA,OAAO,EAAE,iBAAiB;AAC1B,YAAA,KAAK,EAAE,iDAAiD;AACxD,YAAA,OAAO,EAAE,mDAAmD;AAC7D,SAAA;AACF,KAAA;AACD,IAAA,eAAe,EAAE;AACf,QAAA,OAAO,EAAE,SAAS;AACnB,KAAA;AACF,CAAA;AAOH,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAC/B,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,KAAI;IACxC,QACEA,oCACE,SAAS,EAAE,EAAE,CAAC,gBAAgB,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,EACvD,GAAG,EAAE,GAAG,EAAA,GACJ,KAAK,EAAA,CACT;AAEN,CAAC;AAEH,QAAQ,CAAC,WAAW,GAAG,UAAU;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './Textarea';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { type VariantProps } from "class-variance-authority";
|
|
3
|
+
declare const toastVariants: (props?: ({
|
|
4
|
+
variant?: "default" | "success" | "warning" | "info" | "error" | null | undefined;
|
|
5
|
+
} & import("class-variance-authority/dist/types").ClassProp) | undefined) => string;
|
|
6
|
+
interface ToastOptions {
|
|
7
|
+
variant?: VariantProps<typeof toastVariants>["variant"];
|
|
8
|
+
duration?: number;
|
|
9
|
+
}
|
|
10
|
+
declare const showToast: {
|
|
11
|
+
success: (message: string, options?: ToastOptions) => string;
|
|
12
|
+
error: (message: string, options?: ToastOptions) => string;
|
|
13
|
+
warning: (message: string, options?: ToastOptions) => string;
|
|
14
|
+
info: (message: string, options?: ToastOptions) => string;
|
|
15
|
+
default: (message: string, options?: ToastOptions) => string;
|
|
16
|
+
};
|
|
17
|
+
declare const Toast: React.FC;
|
|
18
|
+
export { Toast, showToast, toastVariants };
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { j as jsxRuntimeExports } from '../../_virtual/jsx-runtime.js';
|
|
2
|
+
import zt, { Toaster as Fe, ToastBar as N } from '../../node_modules/react-hot-toast/dist/index.js';
|
|
3
|
+
import { cva } from 'class-variance-authority';
|
|
4
|
+
import { cn } from '../../utils/cn.js';
|
|
5
|
+
import X from '../../node_modules/lucide-react/dist/esm/icons/x.js';
|
|
6
|
+
import Info from '../../node_modules/lucide-react/dist/esm/icons/info.js';
|
|
7
|
+
import AlertTriangle from '../../node_modules/lucide-react/dist/esm/icons/alert-triangle.js';
|
|
8
|
+
import AlertCircle from '../../node_modules/lucide-react/dist/esm/icons/alert-circle.js';
|
|
9
|
+
import CheckCircle from '../../node_modules/lucide-react/dist/esm/icons/check-circle.js';
|
|
10
|
+
|
|
11
|
+
const toastVariants = cva("flex items-center gap-2 p-4 rounded-lg shadow-lg border max-w-md", {
|
|
12
|
+
variants: {
|
|
13
|
+
variant: {
|
|
14
|
+
default: "bg-white border-gray-200 text-gray-900",
|
|
15
|
+
success: "bg-success-50 border-success-200 text-success-800",
|
|
16
|
+
error: "bg-danger-50 border-danger-200 text-danger-800",
|
|
17
|
+
warning: "bg-warning-50 border-warning-200 text-warning-800",
|
|
18
|
+
info: "bg-primary-50 border-primary-200 text-primary-800",
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
defaultVariants: {
|
|
22
|
+
variant: "default",
|
|
23
|
+
},
|
|
24
|
+
});
|
|
25
|
+
const getIcon = (variant) => {
|
|
26
|
+
switch (variant) {
|
|
27
|
+
case "success":
|
|
28
|
+
return jsxRuntimeExports.jsx(CheckCircle, { className: "h-5 w-5 text-success-600" });
|
|
29
|
+
case "error":
|
|
30
|
+
return jsxRuntimeExports.jsx(AlertCircle, { className: "h-5 w-5 text-danger-600" });
|
|
31
|
+
case "warning":
|
|
32
|
+
return jsxRuntimeExports.jsx(AlertTriangle, { className: "h-5 w-5 text-warning-600" });
|
|
33
|
+
case "info":
|
|
34
|
+
return jsxRuntimeExports.jsx(Info, { className: "h-5 w-5 text-primary-600" });
|
|
35
|
+
default:
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
const showToast = {
|
|
40
|
+
success: (message, options) => zt.success(message, {
|
|
41
|
+
duration: options?.duration || 4000,
|
|
42
|
+
}),
|
|
43
|
+
error: (message, options) => zt.error(message, {
|
|
44
|
+
duration: options?.duration || 5000,
|
|
45
|
+
}),
|
|
46
|
+
warning: (message, options) => zt(message, {
|
|
47
|
+
icon: "⚠️",
|
|
48
|
+
duration: options?.duration || 4000,
|
|
49
|
+
}),
|
|
50
|
+
info: (message, options) => zt(message, {
|
|
51
|
+
icon: "ℹ️",
|
|
52
|
+
duration: options?.duration || 4000,
|
|
53
|
+
}),
|
|
54
|
+
default: (message, options) => zt(message, {
|
|
55
|
+
duration: options?.duration || 4000,
|
|
56
|
+
}),
|
|
57
|
+
};
|
|
58
|
+
const Toast = () => {
|
|
59
|
+
return (jsxRuntimeExports.jsx(Fe, { position: "top-right", toastOptions: {
|
|
60
|
+
duration: 4000,
|
|
61
|
+
className: "",
|
|
62
|
+
style: {
|
|
63
|
+
background: "transparent",
|
|
64
|
+
boxShadow: "none",
|
|
65
|
+
padding: 0,
|
|
66
|
+
},
|
|
67
|
+
}, children: (t) => (jsxRuntimeExports.jsx(N, { toast: t, children: ({ icon, message }) => (jsxRuntimeExports.jsxs("div", { className: cn(toastVariants({
|
|
68
|
+
variant: t.type === "success" ? "success" :
|
|
69
|
+
t.type === "error" ? "error" : "default"
|
|
70
|
+
})), children: [getIcon(t.type === "success" ? "success" :
|
|
71
|
+
t.type === "error" ? "error" : "default") || icon, jsxRuntimeExports.jsx("div", { className: "flex-1 text-sm font-medium", children: message }), jsxRuntimeExports.jsx("button", { onClick: () => zt.dismiss(t.id), className: "inline-flex h-5 w-5 items-center justify-center rounded-full hover:bg-black/10", children: jsxRuntimeExports.jsx(X, { className: "h-3 w-3" }) })] })) })) }));
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
export { Toast, showToast, toastVariants };
|
|
75
|
+
//# sourceMappingURL=Toast.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Toast.js","sources":["../../../src/components/Toast/Toast.tsx"],"sourcesContent":["import * as React from \"react\";\nimport toast, { Toaster, ToastBar } from \"react-hot-toast\";\nimport { X, CheckCircle, AlertCircle, Info, AlertTriangle } from \"lucide-react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../utils/cn\";\n\nconst toastVariants = cva(\n \"flex items-center gap-2 p-4 rounded-lg shadow-lg border max-w-md\",\n {\n variants: {\n variant: {\n default: \"bg-white border-gray-200 text-gray-900\",\n success: \"bg-success-50 border-success-200 text-success-800\",\n error: \"bg-danger-50 border-danger-200 text-danger-800\",\n warning: \"bg-warning-50 border-warning-200 text-warning-800\",\n info: \"bg-primary-50 border-primary-200 text-primary-800\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n);\n\ninterface ToastOptions {\n variant?: VariantProps<typeof toastVariants>[\"variant\"];\n duration?: number;\n}\n\nconst getIcon = (variant: string) => {\n switch (variant) {\n case \"success\":\n return <CheckCircle className=\"h-5 w-5 text-success-600\" />;\n case \"error\":\n return <AlertCircle className=\"h-5 w-5 text-danger-600\" />;\n case \"warning\":\n return <AlertTriangle className=\"h-5 w-5 text-warning-600\" />;\n case \"info\":\n return <Info className=\"h-5 w-5 text-primary-600\" />;\n default:\n return null;\n }\n};\n\nconst showToast = {\n success: (message: string, options?: ToastOptions) =>\n toast.success(message, {\n duration: options?.duration || 4000,\n }),\n error: (message: string, options?: ToastOptions) =>\n toast.error(message, {\n duration: options?.duration || 5000,\n }),\n warning: (message: string, options?: ToastOptions) =>\n toast(message, {\n icon: \"⚠️\",\n duration: options?.duration || 4000,\n }),\n info: (message: string, options?: ToastOptions) =>\n toast(message, {\n icon: \"ℹ️\",\n duration: options?.duration || 4000,\n }),\n default: (message: string, options?: ToastOptions) =>\n toast(message, {\n duration: options?.duration || 4000,\n }),\n};\n\nconst Toast: React.FC = () => {\n return (\n <Toaster\n position=\"top-right\"\n toastOptions={{\n duration: 4000,\n className: \"\",\n style: {\n background: \"transparent\",\n boxShadow: \"none\",\n padding: 0,\n },\n }}\n >\n {(t) => (\n <ToastBar toast={t}>\n {({ icon, message }) => (\n <div\n className={cn(\n toastVariants({\n variant: t.type === \"success\" ? \"success\" : \n t.type === \"error\" ? \"error\" : \"default\"\n })\n )}\n >\n {getIcon(t.type === \"success\" ? \"success\" : \n t.type === \"error\" ? \"error\" : \"default\") || icon}\n <div className=\"flex-1 text-sm font-medium\">{message}</div>\n <button\n onClick={() => toast.dismiss(t.id)}\n className=\"inline-flex h-5 w-5 items-center justify-center rounded-full hover:bg-black/10\"\n >\n <X className=\"h-3 w-3\" />\n </button>\n </div>\n )}\n </ToastBar>\n )}\n </Toaster>\n );\n};\n\nexport { Toast, showToast, toastVariants };"],"names":["_jsx","toast","Toaster","ToastBar","_jsxs"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './Toast';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
declare const breakpoints: {
|
|
2
|
+
readonly sm: 640;
|
|
3
|
+
readonly md: 768;
|
|
4
|
+
readonly lg: 1024;
|
|
5
|
+
readonly xl: 1280;
|
|
6
|
+
readonly '2xl': 1536;
|
|
7
|
+
};
|
|
8
|
+
type Breakpoint = keyof typeof breakpoints;
|
|
9
|
+
export declare function useBreakpoint(): {
|
|
10
|
+
currentBreakpoint: "sm" | "md" | "lg" | "xl" | "2xl";
|
|
11
|
+
isAbove: (breakpoint: Breakpoint) => boolean;
|
|
12
|
+
isBelow: (breakpoint: Breakpoint) => boolean;
|
|
13
|
+
};
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { useState, useEffect } from 'react';
|
|
2
|
+
|
|
3
|
+
const breakpoints = {
|
|
4
|
+
sm: 640,
|
|
5
|
+
md: 768,
|
|
6
|
+
lg: 1024,
|
|
7
|
+
xl: 1280,
|
|
8
|
+
'2xl': 1536,
|
|
9
|
+
};
|
|
10
|
+
function useBreakpoint() {
|
|
11
|
+
const [currentBreakpoint, setCurrentBreakpoint] = useState('sm');
|
|
12
|
+
useEffect(() => {
|
|
13
|
+
const checkBreakpoint = () => {
|
|
14
|
+
const width = window.innerWidth;
|
|
15
|
+
let breakpoint = 'sm';
|
|
16
|
+
if (width >= breakpoints['2xl'])
|
|
17
|
+
breakpoint = '2xl';
|
|
18
|
+
else if (width >= breakpoints.xl)
|
|
19
|
+
breakpoint = 'xl';
|
|
20
|
+
else if (width >= breakpoints.lg)
|
|
21
|
+
breakpoint = 'lg';
|
|
22
|
+
else if (width >= breakpoints.md)
|
|
23
|
+
breakpoint = 'md';
|
|
24
|
+
setCurrentBreakpoint(breakpoint);
|
|
25
|
+
};
|
|
26
|
+
checkBreakpoint();
|
|
27
|
+
window.addEventListener('resize', checkBreakpoint);
|
|
28
|
+
return () => window.removeEventListener('resize', checkBreakpoint);
|
|
29
|
+
}, []);
|
|
30
|
+
const isAbove = (breakpoint) => {
|
|
31
|
+
return breakpoints[currentBreakpoint] >= breakpoints[breakpoint];
|
|
32
|
+
};
|
|
33
|
+
const isBelow = (breakpoint) => {
|
|
34
|
+
return breakpoints[currentBreakpoint] < breakpoints[breakpoint];
|
|
35
|
+
};
|
|
36
|
+
return { currentBreakpoint, isAbove, isBelow };
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export { useBreakpoint };
|
|
40
|
+
//# sourceMappingURL=useBreakpoint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useBreakpoint.js","sources":["../../src/hooks/useBreakpoint.ts"],"sourcesContent":["import { useState, useEffect } from 'react';\n\nconst breakpoints = {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n '2xl': 1536,\n} as const;\n\ntype Breakpoint = keyof typeof breakpoints;\n\nexport function useBreakpoint() {\n const [currentBreakpoint, setCurrentBreakpoint] = useState<Breakpoint>('sm');\n\n useEffect(() => {\n const checkBreakpoint = () => {\n const width = window.innerWidth;\n let breakpoint: Breakpoint = 'sm';\n\n if (width >= breakpoints['2xl']) breakpoint = '2xl';\n else if (width >= breakpoints.xl) breakpoint = 'xl';\n else if (width >= breakpoints.lg) breakpoint = 'lg';\n else if (width >= breakpoints.md) breakpoint = 'md';\n\n setCurrentBreakpoint(breakpoint);\n };\n\n checkBreakpoint();\n window.addEventListener('resize', checkBreakpoint);\n return () => window.removeEventListener('resize', checkBreakpoint);\n }, []);\n\n const isAbove = (breakpoint: Breakpoint): boolean => {\n return breakpoints[currentBreakpoint] >= breakpoints[breakpoint];\n };\n\n const isBelow = (breakpoint: Breakpoint): boolean => {\n return breakpoints[currentBreakpoint] < breakpoints[breakpoint];\n };\n\n return { currentBreakpoint, isAbove, isBelow };\n}"],"names":[],"mappings":";;AAEA,MAAM,WAAW,GAAG;AAClB,IAAA,EAAE,EAAE,GAAG;AACP,IAAA,EAAE,EAAE,GAAG;AACP,IAAA,EAAE,EAAE,IAAI;AACR,IAAA,EAAE,EAAE,IAAI;AACR,IAAA,KAAK,EAAE,IAAI;CACH;SAIM,aAAa,GAAA;IAC3B,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,QAAQ,CAAa,IAAI,CAAC;IAE5E,SAAS,CAAC,MAAK;QACb,MAAM,eAAe,GAAG,MAAK;AAC3B,YAAA,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU;YAC/B,IAAI,UAAU,GAAe,IAAI;AAEjC,YAAA,IAAI,KAAK,IAAI,WAAW,CAAC,KAAK,CAAC;gBAAE,UAAU,GAAG,KAAK;AAC9C,iBAAA,IAAI,KAAK,IAAI,WAAW,CAAC,EAAE;gBAAE,UAAU,GAAG,IAAI;AAC9C,iBAAA,IAAI,KAAK,IAAI,WAAW,CAAC,EAAE;gBAAE,UAAU,GAAG,IAAI;AAC9C,iBAAA,IAAI,KAAK,IAAI,WAAW,CAAC,EAAE;gBAAE,UAAU,GAAG,IAAI;YAEnD,oBAAoB,CAAC,UAAU,CAAC;AAClC,QAAA,CAAC;AAED,QAAA,eAAe,EAAE;AACjB,QAAA,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,eAAe,CAAC;QAClD,OAAO,MAAM,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,eAAe,CAAC;IACpE,CAAC,EAAE,EAAE,CAAC;AAEN,IAAA,MAAM,OAAO,GAAG,CAAC,UAAsB,KAAa;QAClD,OAAO,WAAW,CAAC,iBAAiB,CAAC,IAAI,WAAW,CAAC,UAAU,CAAC;AAClE,IAAA,CAAC;AAED,IAAA,MAAM,OAAO,GAAG,CAAC,UAAsB,KAAa;QAClD,OAAO,WAAW,CAAC,iBAAiB,CAAC,GAAG,WAAW,CAAC,UAAU,CAAC;AACjE,IAAA,CAAC;AAED,IAAA,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,OAAO,EAAE;AAChD;;;;"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { useState, useEffect } from 'react';
|
|
2
|
+
|
|
3
|
+
function useDarkMode() {
|
|
4
|
+
const [isDarkMode, setIsDarkMode] = useState(() => {
|
|
5
|
+
if (typeof window !== 'undefined') {
|
|
6
|
+
const stored = localStorage.getItem('darkMode');
|
|
7
|
+
if (stored) {
|
|
8
|
+
return JSON.parse(stored);
|
|
9
|
+
}
|
|
10
|
+
return window.matchMedia('(prefers-color-scheme: dark)').matches;
|
|
11
|
+
}
|
|
12
|
+
return false;
|
|
13
|
+
});
|
|
14
|
+
useEffect(() => {
|
|
15
|
+
const root = window.document.documentElement;
|
|
16
|
+
if (isDarkMode) {
|
|
17
|
+
root.classList.add('dark');
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
root.classList.remove('dark');
|
|
21
|
+
}
|
|
22
|
+
localStorage.setItem('darkMode', JSON.stringify(isDarkMode));
|
|
23
|
+
}, [isDarkMode]);
|
|
24
|
+
const toggle = () => setIsDarkMode(prev => !prev);
|
|
25
|
+
return { isDarkMode, toggle };
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export { useDarkMode };
|
|
29
|
+
//# sourceMappingURL=useDarkMode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDarkMode.js","sources":["../../src/hooks/useDarkMode.ts"],"sourcesContent":["import { useState, useEffect } from 'react';\n\nexport function useDarkMode() {\n const [isDarkMode, setIsDarkMode] = useState<boolean>(() => {\n if (typeof window !== 'undefined') {\n const stored = localStorage.getItem('darkMode');\n if (stored) {\n return JSON.parse(stored);\n }\n return window.matchMedia('(prefers-color-scheme: dark)').matches;\n }\n return false;\n });\n\n useEffect(() => {\n const root = window.document.documentElement;\n if (isDarkMode) {\n root.classList.add('dark');\n } else {\n root.classList.remove('dark');\n }\n localStorage.setItem('darkMode', JSON.stringify(isDarkMode));\n }, [isDarkMode]);\n\n const toggle = () => setIsDarkMode(prev => !prev);\n\n return { isDarkMode, toggle };\n}"],"names":[],"mappings":";;SAEgB,WAAW,GAAA;IACzB,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAU,MAAK;AACzD,QAAA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;YACjC,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC;YAC/C,IAAI,MAAM,EAAE;AACV,gBAAA,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;YAC3B;YACA,OAAO,MAAM,CAAC,UAAU,CAAC,8BAA8B,CAAC,CAAC,OAAO;QAClE;AACA,QAAA,OAAO,KAAK;AACd,IAAA,CAAC,CAAC;IAEF,SAAS,CAAC,MAAK;AACb,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,eAAe;QAC5C,IAAI,UAAU,EAAE;AACd,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC;QAC5B;aAAO;AACL,YAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC;QAC/B;AACA,QAAA,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;AAC9D,IAAA,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;AAEhB,IAAA,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC;AAEjD,IAAA,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE;AAC/B;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function useDebounce<T>(value: T, delay: number): T;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { useState, useEffect } from 'react';
|
|
2
|
+
|
|
3
|
+
function useDebounce(value, delay) {
|
|
4
|
+
const [debouncedValue, setDebouncedValue] = useState(value);
|
|
5
|
+
useEffect(() => {
|
|
6
|
+
const handler = setTimeout(() => {
|
|
7
|
+
setDebouncedValue(value);
|
|
8
|
+
}, delay);
|
|
9
|
+
return () => {
|
|
10
|
+
clearTimeout(handler);
|
|
11
|
+
};
|
|
12
|
+
}, [value, delay]);
|
|
13
|
+
return debouncedValue;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export { useDebounce };
|
|
17
|
+
//# sourceMappingURL=useDebounce.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDebounce.js","sources":["../../src/hooks/useDebounce.ts"],"sourcesContent":["import { useState, useEffect } from 'react';\n\nexport function useDebounce<T>(value: T, delay: number): T {\n const [debouncedValue, setDebouncedValue] = useState<T>(value);\n\n useEffect(() => {\n const handler = setTimeout(() => {\n setDebouncedValue(value);\n }, delay);\n\n return () => {\n clearTimeout(handler);\n };\n }, [value, delay]);\n\n return debouncedValue;\n}"],"names":[],"mappings":";;AAEM,SAAU,WAAW,CAAI,KAAQ,EAAE,KAAa,EAAA;IACpD,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAI,KAAK,CAAC;IAE9D,SAAS,CAAC,MAAK;AACb,QAAA,MAAM,OAAO,GAAG,UAAU,CAAC,MAAK;YAC9B,iBAAiB,CAAC,KAAK,CAAC;QAC1B,CAAC,EAAE,KAAK,CAAC;AAET,QAAA,OAAO,MAAK;YACV,YAAY,CAAC,OAAO,CAAC;AACvB,QAAA,CAAC;AACH,IAAA,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAElB,IAAA,OAAO,cAAc;AACvB;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function useLocalStorage<T>(key: string, initialValue: T): [T, (value: T | ((val: T) => T)) => void, () => void];
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { useState, useCallback } from 'react';
|
|
2
|
+
|
|
3
|
+
function useLocalStorage(key, initialValue) {
|
|
4
|
+
const [storedValue, setStoredValue] = useState(() => {
|
|
5
|
+
if (typeof window === 'undefined') {
|
|
6
|
+
return initialValue;
|
|
7
|
+
}
|
|
8
|
+
try {
|
|
9
|
+
const item = window.localStorage.getItem(key);
|
|
10
|
+
return item ? JSON.parse(item) : initialValue;
|
|
11
|
+
}
|
|
12
|
+
catch (error) {
|
|
13
|
+
console.error(`Error reading localStorage key "${key}":`, error);
|
|
14
|
+
return initialValue;
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
const setValue = useCallback((value) => {
|
|
18
|
+
try {
|
|
19
|
+
const valueToStore = value instanceof Function ? value(storedValue) : value;
|
|
20
|
+
setStoredValue(valueToStore);
|
|
21
|
+
if (typeof window !== 'undefined') {
|
|
22
|
+
window.localStorage.setItem(key, JSON.stringify(valueToStore));
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
console.error(`Error setting localStorage key "${key}":`, error);
|
|
27
|
+
}
|
|
28
|
+
}, [key, storedValue]);
|
|
29
|
+
const removeValue = useCallback(() => {
|
|
30
|
+
try {
|
|
31
|
+
setStoredValue(initialValue);
|
|
32
|
+
if (typeof window !== 'undefined') {
|
|
33
|
+
window.localStorage.removeItem(key);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
console.error(`Error removing localStorage key "${key}":`, error);
|
|
38
|
+
}
|
|
39
|
+
}, [key, initialValue]);
|
|
40
|
+
return [storedValue, setValue, removeValue];
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export { useLocalStorage };
|
|
44
|
+
//# sourceMappingURL=useLocalStorage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useLocalStorage.js","sources":["../../src/hooks/useLocalStorage.ts"],"sourcesContent":["import { useState, useCallback } from 'react';\n\nexport function useLocalStorage<T>(\n key: string,\n initialValue: T\n): [T, (value: T | ((val: T) => T)) => void, () => void] {\n const [storedValue, setStoredValue] = useState<T>(() => {\n if (typeof window === 'undefined') {\n return initialValue;\n }\n try {\n const item = window.localStorage.getItem(key);\n return item ? JSON.parse(item) : initialValue;\n } catch (error) {\n console.error(`Error reading localStorage key \"${key}\":`, error);\n return initialValue;\n }\n });\n\n const setValue = useCallback((value: T | ((val: T) => T)) => {\n try {\n const valueToStore = value instanceof Function ? value(storedValue) : value;\n setStoredValue(valueToStore);\n if (typeof window !== 'undefined') {\n window.localStorage.setItem(key, JSON.stringify(valueToStore));\n }\n } catch (error) {\n console.error(`Error setting localStorage key \"${key}\":`, error);\n }\n }, [key, storedValue]);\n\n const removeValue = useCallback(() => {\n try {\n setStoredValue(initialValue);\n if (typeof window !== 'undefined') {\n window.localStorage.removeItem(key);\n }\n } catch (error) {\n console.error(`Error removing localStorage key \"${key}\":`, error);\n }\n }, [key, initialValue]);\n\n return [storedValue, setValue, removeValue];\n}"],"names":[],"mappings":";;AAEM,SAAU,eAAe,CAC7B,GAAW,EACX,YAAe,EAAA;IAEf,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAI,MAAK;AACrD,QAAA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;AACjC,YAAA,OAAO,YAAY;QACrB;AACA,QAAA,IAAI;YACF,MAAM,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC;AAC7C,YAAA,OAAO,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,YAAY;QAC/C;QAAE,OAAO,KAAK,EAAE;YACd,OAAO,CAAC,KAAK,CAAC,CAAA,gCAAA,EAAmC,GAAG,CAAA,EAAA,CAAI,EAAE,KAAK,CAAC;AAChE,YAAA,OAAO,YAAY;QACrB;AACF,IAAA,CAAC,CAAC;AAEF,IAAA,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,KAA0B,KAAI;AAC1D,QAAA,IAAI;AACF,YAAA,MAAM,YAAY,GAAG,KAAK,YAAY,QAAQ,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,KAAK;YAC3E,cAAc,CAAC,YAAY,CAAC;AAC5B,YAAA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;AACjC,gBAAA,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;YAChE;QACF;QAAE,OAAO,KAAK,EAAE;YACd,OAAO,CAAC,KAAK,CAAC,CAAA,gCAAA,EAAmC,GAAG,CAAA,EAAA,CAAI,EAAE,KAAK,CAAC;QAClE;AACF,IAAA,CAAC,EAAE,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;AAEtB,IAAA,MAAM,WAAW,GAAG,WAAW,CAAC,MAAK;AACnC,QAAA,IAAI;YACF,cAAc,CAAC,YAAY,CAAC;AAC5B,YAAA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;AACjC,gBAAA,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC;YACrC;QACF;QAAE,OAAO,KAAK,EAAE;YACd,OAAO,CAAC,KAAK,CAAC,CAAA,iCAAA,EAAoC,GAAG,CAAA,EAAA,CAAI,EAAE,KAAK,CAAC;QACnE;AACF,IAAA,CAAC,EAAE,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;AAEvB,IAAA,OAAO,CAAC,WAAW,EAAE,QAAQ,EAAE,WAAW,CAAC;AAC7C;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function useToggle(initialValue?: boolean): [boolean, () => void, (value: boolean) => void];
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { useState, useCallback } from 'react';
|
|
2
|
+
|
|
3
|
+
function useToggle(initialValue = false) {
|
|
4
|
+
const [value, setValue] = useState(initialValue);
|
|
5
|
+
const toggle = useCallback(() => setValue(prev => !prev), []);
|
|
6
|
+
const setToggle = useCallback((newValue) => setValue(newValue), []);
|
|
7
|
+
return [value, toggle, setToggle];
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export { useToggle };
|
|
11
|
+
//# sourceMappingURL=useToggle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useToggle.js","sources":["../../src/hooks/useToggle.ts"],"sourcesContent":["import { useState, useCallback } from 'react';\n\nexport function useToggle(initialValue: boolean = false): [boolean, () => void, (value: boolean) => void] {\n const [value, setValue] = useState<boolean>(initialValue);\n\n const toggle = useCallback(() => setValue(prev => !prev), []);\n const setToggle = useCallback((newValue: boolean) => setValue(newValue), []);\n\n return [value, toggle, setToggle];\n}"],"names":[],"mappings":";;AAEM,SAAU,SAAS,CAAC,YAAA,GAAwB,KAAK,EAAA;IACrD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAU,YAAY,CAAC;AAEzD,IAAA,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,QAAQ,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;AAC7D,IAAA,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,QAAiB,KAAK,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;AAE5E,IAAA,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC;AACnC;;;;"}
|