@khanhminh/design-system 1.14.0 → 1.14.2
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/components/base/Button/Button.js +8 -0
- package/dist/components/base/Checkbox/Checkbox.js +8 -0
- package/dist/components/base/Input/Input.js +8 -0
- package/dist/components/base/Label/Label.js +8 -0
- package/dist/components/base/ScrollArea/ScrollArea.js +8 -0
- package/dist/components/base/Separator/Separator.js +8 -0
- package/dist/components/base/Spinner/Spinner.js +8 -0
- package/dist/components/base/Switch/Switch.js +9 -0
- package/dist/components/index.js +8 -0
- package/dist/components/ui/button.js +71 -0
- package/dist/components/ui/checkbox.js +44 -0
- package/dist/components/ui/input.js +8 -0
- package/dist/components/ui/label.js +43 -0
- package/dist/components/ui/scroll-area.js +46 -0
- package/dist/components/ui/separator.js +43 -0
- package/dist/components/ui/spinner.js +9 -0
- package/dist/components/ui/switch.js +43 -0
- package/dist/hooks/useToggle.js +17 -0
- package/dist/index.js +5 -510
- package/dist/lib/theme.js +9 -0
- package/dist/lib/utils.js +8 -0
- package/dist/providers/theme-provider.js +24 -0
- package/dist/store/theme-store.js +11 -0
- package/package.json +7 -3
- package/dist/index.cjs +0 -516
- /package/dist/{test → tests}/setup.d.ts +0 -0
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { ScrollArea as ScrollArea$1, ScrollBar } from '../../ui/scroll-area.js';
|
|
3
|
+
|
|
4
|
+
const ScrollArea = ({ children, orientation = 'horizontal', className, ...props }) => {
|
|
5
|
+
return (jsxs(ScrollArea$1, { className: className, "data-slot": "scroll-area", ...props, children: [jsx("div", { "data-slot": "scroll-area-viewport", children: children }), jsx("div", { "data-slot": "scroll-area-scrollbar", children: jsx(ScrollBar, { orientation: orientation }) })] }));
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
export { ScrollArea as default };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { Switch as Switch$1 } from '../../ui/switch.js';
|
|
3
|
+
import { Label } from '../Label/Label.js';
|
|
4
|
+
|
|
5
|
+
const Switch = ({ id, label, ...props }) => {
|
|
6
|
+
return (jsxs("div", { className: "flex items-center space-x-2", children: [jsx(Switch$1, { "data-slot": "switch", id: id, ...props }), jsx(Label, { "data-slot": "label", htmlFor: id, children: label })] }));
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
export { Switch as default };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { Button } from './base/Button/Button.js';
|
|
2
|
+
export { Input } from './base/Input/Input.js';
|
|
3
|
+
export { Spinner } from './base/Spinner/Spinner.js';
|
|
4
|
+
export { Checkbox } from './base/Checkbox/Checkbox.js';
|
|
5
|
+
export { Label } from './base/Label/Label.js';
|
|
6
|
+
export { Separator } from './base/Separator/Separator.js';
|
|
7
|
+
export { default as Switch } from './base/Switch/Switch.js';
|
|
8
|
+
export { default as ScrollArea } from './base/ScrollArea/ScrollArea.js';
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { cva } from 'class-variance-authority';
|
|
3
|
+
import '@radix-ui/react-accessible-icon';
|
|
4
|
+
import '@radix-ui/react-accordion';
|
|
5
|
+
import '@radix-ui/react-alert-dialog';
|
|
6
|
+
import '@radix-ui/react-aspect-ratio';
|
|
7
|
+
import '@radix-ui/react-avatar';
|
|
8
|
+
import '@radix-ui/react-checkbox';
|
|
9
|
+
import '@radix-ui/react-collapsible';
|
|
10
|
+
import '@radix-ui/react-context-menu';
|
|
11
|
+
import '@radix-ui/react-dialog';
|
|
12
|
+
import '@radix-ui/react-direction';
|
|
13
|
+
import '@radix-ui/react-dropdown-menu';
|
|
14
|
+
import '@radix-ui/react-form';
|
|
15
|
+
import '@radix-ui/react-hover-card';
|
|
16
|
+
import '@radix-ui/react-label';
|
|
17
|
+
import '@radix-ui/react-menubar';
|
|
18
|
+
import '@radix-ui/react-navigation-menu';
|
|
19
|
+
import '@radix-ui/react-one-time-password-field';
|
|
20
|
+
import '@radix-ui/react-password-toggle-field';
|
|
21
|
+
import '@radix-ui/react-popover';
|
|
22
|
+
import '@radix-ui/react-portal';
|
|
23
|
+
import '@radix-ui/react-progress';
|
|
24
|
+
import '@radix-ui/react-radio-group';
|
|
25
|
+
import '@radix-ui/react-scroll-area';
|
|
26
|
+
import '@radix-ui/react-select';
|
|
27
|
+
import '@radix-ui/react-separator';
|
|
28
|
+
import '@radix-ui/react-slider';
|
|
29
|
+
import * as Slot from '@radix-ui/react-slot';
|
|
30
|
+
import '@radix-ui/react-switch';
|
|
31
|
+
import '@radix-ui/react-tabs';
|
|
32
|
+
import '@radix-ui/react-toast';
|
|
33
|
+
import '@radix-ui/react-toggle';
|
|
34
|
+
import '@radix-ui/react-toggle-group';
|
|
35
|
+
import '@radix-ui/react-toolbar';
|
|
36
|
+
import '@radix-ui/react-tooltip';
|
|
37
|
+
import '@radix-ui/react-visually-hidden';
|
|
38
|
+
import { cn } from '../../lib/utils.js';
|
|
39
|
+
|
|
40
|
+
const buttonVariants = cva("inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", {
|
|
41
|
+
variants: {
|
|
42
|
+
variant: {
|
|
43
|
+
default: 'bg-primary text-primary-foreground hover:bg-primary/90',
|
|
44
|
+
destructive: 'bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40',
|
|
45
|
+
outline: 'border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50',
|
|
46
|
+
secondary: 'bg-secondary text-secondary-foreground hover:bg-secondary/80',
|
|
47
|
+
ghost: 'hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50',
|
|
48
|
+
link: 'text-primary underline-offset-4 hover:underline',
|
|
49
|
+
},
|
|
50
|
+
size: {
|
|
51
|
+
default: 'h-9 px-4 py-2 has-[>svg]:px-3',
|
|
52
|
+
xs: "h-6 gap-1 rounded-md px-2 text-xs has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3",
|
|
53
|
+
sm: 'h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5',
|
|
54
|
+
lg: 'h-10 rounded-md px-6 has-[>svg]:px-4',
|
|
55
|
+
icon: 'size-9',
|
|
56
|
+
'icon-xs': "size-6 rounded-md [&_svg:not([class*='size-'])]:size-3",
|
|
57
|
+
'icon-sm': 'size-8',
|
|
58
|
+
'icon-lg': 'size-10',
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
defaultVariants: {
|
|
62
|
+
variant: 'default',
|
|
63
|
+
size: 'default',
|
|
64
|
+
},
|
|
65
|
+
});
|
|
66
|
+
function Button({ className, variant = 'default', size = 'default', asChild = false, ...props }) {
|
|
67
|
+
const Comp = asChild ? Slot.Root : 'button';
|
|
68
|
+
return (jsx(Comp, { className: cn(buttonVariants({ variant, size, className })), "data-size": size, "data-slot": "button", "data-variant": variant, ...props }));
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export { Button, buttonVariants };
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { CheckIcon } from 'lucide-react';
|
|
3
|
+
import '@radix-ui/react-accessible-icon';
|
|
4
|
+
import '@radix-ui/react-accordion';
|
|
5
|
+
import '@radix-ui/react-alert-dialog';
|
|
6
|
+
import '@radix-ui/react-aspect-ratio';
|
|
7
|
+
import '@radix-ui/react-avatar';
|
|
8
|
+
import * as CheckboxPrimitive from '@radix-ui/react-checkbox';
|
|
9
|
+
import '@radix-ui/react-collapsible';
|
|
10
|
+
import '@radix-ui/react-context-menu';
|
|
11
|
+
import '@radix-ui/react-dialog';
|
|
12
|
+
import '@radix-ui/react-direction';
|
|
13
|
+
import '@radix-ui/react-dropdown-menu';
|
|
14
|
+
import '@radix-ui/react-form';
|
|
15
|
+
import '@radix-ui/react-hover-card';
|
|
16
|
+
import '@radix-ui/react-label';
|
|
17
|
+
import '@radix-ui/react-menubar';
|
|
18
|
+
import '@radix-ui/react-navigation-menu';
|
|
19
|
+
import '@radix-ui/react-one-time-password-field';
|
|
20
|
+
import '@radix-ui/react-password-toggle-field';
|
|
21
|
+
import '@radix-ui/react-popover';
|
|
22
|
+
import '@radix-ui/react-portal';
|
|
23
|
+
import '@radix-ui/react-progress';
|
|
24
|
+
import '@radix-ui/react-radio-group';
|
|
25
|
+
import '@radix-ui/react-scroll-area';
|
|
26
|
+
import '@radix-ui/react-select';
|
|
27
|
+
import '@radix-ui/react-separator';
|
|
28
|
+
import '@radix-ui/react-slider';
|
|
29
|
+
import '@radix-ui/react-slot';
|
|
30
|
+
import '@radix-ui/react-switch';
|
|
31
|
+
import '@radix-ui/react-tabs';
|
|
32
|
+
import '@radix-ui/react-toast';
|
|
33
|
+
import '@radix-ui/react-toggle';
|
|
34
|
+
import '@radix-ui/react-toggle-group';
|
|
35
|
+
import '@radix-ui/react-toolbar';
|
|
36
|
+
import '@radix-ui/react-tooltip';
|
|
37
|
+
import '@radix-ui/react-visually-hidden';
|
|
38
|
+
import { cn } from '../../lib/utils.js';
|
|
39
|
+
|
|
40
|
+
function Checkbox({ className, ...props }) {
|
|
41
|
+
return (jsx(CheckboxPrimitive.Root, { className: cn('peer border-input focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[state=checked]:border-primary data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:bg-input/30 dark:aria-invalid:ring-destructive/40 dark:data-[state=checked]:bg-primary size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50', className), "data-slot": "checkbox", ...props, children: jsx(CheckboxPrimitive.Indicator, { className: "grid place-content-center text-current transition-none", "data-slot": "checkbox-indicator", children: jsx(CheckIcon, { className: "size-3.5" }) }) }));
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export { Checkbox };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { cn } from '../../lib/utils.js';
|
|
3
|
+
|
|
4
|
+
function Input({ className, type, ...props }) {
|
|
5
|
+
return (jsx("input", { className: cn('border-input selection:bg-primary selection:text-primary-foreground file:text-foreground placeholder:text-muted-foreground dark:bg-input/30 h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm', 'focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]', 'aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40', className), "data-slot": "input", type: type, ...props }));
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export { Input };
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import '@radix-ui/react-accessible-icon';
|
|
3
|
+
import '@radix-ui/react-accordion';
|
|
4
|
+
import '@radix-ui/react-alert-dialog';
|
|
5
|
+
import '@radix-ui/react-aspect-ratio';
|
|
6
|
+
import '@radix-ui/react-avatar';
|
|
7
|
+
import '@radix-ui/react-checkbox';
|
|
8
|
+
import '@radix-ui/react-collapsible';
|
|
9
|
+
import '@radix-ui/react-context-menu';
|
|
10
|
+
import '@radix-ui/react-dialog';
|
|
11
|
+
import '@radix-ui/react-direction';
|
|
12
|
+
import '@radix-ui/react-dropdown-menu';
|
|
13
|
+
import '@radix-ui/react-form';
|
|
14
|
+
import '@radix-ui/react-hover-card';
|
|
15
|
+
import * as LabelPrimitive from '@radix-ui/react-label';
|
|
16
|
+
import '@radix-ui/react-menubar';
|
|
17
|
+
import '@radix-ui/react-navigation-menu';
|
|
18
|
+
import '@radix-ui/react-one-time-password-field';
|
|
19
|
+
import '@radix-ui/react-password-toggle-field';
|
|
20
|
+
import '@radix-ui/react-popover';
|
|
21
|
+
import '@radix-ui/react-portal';
|
|
22
|
+
import '@radix-ui/react-progress';
|
|
23
|
+
import '@radix-ui/react-radio-group';
|
|
24
|
+
import '@radix-ui/react-scroll-area';
|
|
25
|
+
import '@radix-ui/react-select';
|
|
26
|
+
import '@radix-ui/react-separator';
|
|
27
|
+
import '@radix-ui/react-slider';
|
|
28
|
+
import '@radix-ui/react-slot';
|
|
29
|
+
import '@radix-ui/react-switch';
|
|
30
|
+
import '@radix-ui/react-tabs';
|
|
31
|
+
import '@radix-ui/react-toast';
|
|
32
|
+
import '@radix-ui/react-toggle';
|
|
33
|
+
import '@radix-ui/react-toggle-group';
|
|
34
|
+
import '@radix-ui/react-toolbar';
|
|
35
|
+
import '@radix-ui/react-tooltip';
|
|
36
|
+
import '@radix-ui/react-visually-hidden';
|
|
37
|
+
import { cn } from '../../lib/utils.js';
|
|
38
|
+
|
|
39
|
+
function Label({ className, ...props }) {
|
|
40
|
+
return (jsx(LabelPrimitive.Root, { className: cn('flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50', className), "data-slot": "label", ...props }));
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export { Label };
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import '@radix-ui/react-accessible-icon';
|
|
3
|
+
import '@radix-ui/react-accordion';
|
|
4
|
+
import '@radix-ui/react-alert-dialog';
|
|
5
|
+
import '@radix-ui/react-aspect-ratio';
|
|
6
|
+
import '@radix-ui/react-avatar';
|
|
7
|
+
import '@radix-ui/react-checkbox';
|
|
8
|
+
import '@radix-ui/react-collapsible';
|
|
9
|
+
import '@radix-ui/react-context-menu';
|
|
10
|
+
import '@radix-ui/react-dialog';
|
|
11
|
+
import '@radix-ui/react-direction';
|
|
12
|
+
import '@radix-ui/react-dropdown-menu';
|
|
13
|
+
import '@radix-ui/react-form';
|
|
14
|
+
import '@radix-ui/react-hover-card';
|
|
15
|
+
import '@radix-ui/react-label';
|
|
16
|
+
import '@radix-ui/react-menubar';
|
|
17
|
+
import '@radix-ui/react-navigation-menu';
|
|
18
|
+
import '@radix-ui/react-one-time-password-field';
|
|
19
|
+
import '@radix-ui/react-password-toggle-field';
|
|
20
|
+
import '@radix-ui/react-popover';
|
|
21
|
+
import '@radix-ui/react-portal';
|
|
22
|
+
import '@radix-ui/react-progress';
|
|
23
|
+
import '@radix-ui/react-radio-group';
|
|
24
|
+
import * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area';
|
|
25
|
+
import '@radix-ui/react-select';
|
|
26
|
+
import '@radix-ui/react-separator';
|
|
27
|
+
import '@radix-ui/react-slider';
|
|
28
|
+
import '@radix-ui/react-slot';
|
|
29
|
+
import '@radix-ui/react-switch';
|
|
30
|
+
import '@radix-ui/react-tabs';
|
|
31
|
+
import '@radix-ui/react-toast';
|
|
32
|
+
import '@radix-ui/react-toggle';
|
|
33
|
+
import '@radix-ui/react-toggle-group';
|
|
34
|
+
import '@radix-ui/react-toolbar';
|
|
35
|
+
import '@radix-ui/react-tooltip';
|
|
36
|
+
import '@radix-ui/react-visually-hidden';
|
|
37
|
+
import { cn } from '../../lib/utils.js';
|
|
38
|
+
|
|
39
|
+
function ScrollArea({ className, children, ...props }) {
|
|
40
|
+
return (jsxs(ScrollAreaPrimitive.Root, { className: cn('relative', className), "data-slot": "scroll-area", ...props, children: [jsx(ScrollAreaPrimitive.Viewport, { className: "focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1", "data-slot": "scroll-area-viewport", children: children }), jsx(ScrollBar, {}), jsx(ScrollAreaPrimitive.Corner, {})] }));
|
|
41
|
+
}
|
|
42
|
+
function ScrollBar({ className, orientation = 'vertical', ...props }) {
|
|
43
|
+
return (jsx(ScrollAreaPrimitive.ScrollAreaScrollbar, { className: cn('flex touch-none p-px transition-colors select-none', orientation === 'vertical' && 'h-full w-2.5 border-l border-l-transparent', orientation === 'horizontal' && 'h-2.5 flex-col border-t border-t-transparent', className), "data-slot": "scroll-area-scrollbar", orientation: orientation, ...props, children: jsx(ScrollAreaPrimitive.ScrollAreaThumb, { className: "bg-border relative flex-1 rounded-full", "data-slot": "scroll-area-thumb" }) }));
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export { ScrollArea, ScrollBar };
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import '@radix-ui/react-accessible-icon';
|
|
3
|
+
import '@radix-ui/react-accordion';
|
|
4
|
+
import '@radix-ui/react-alert-dialog';
|
|
5
|
+
import '@radix-ui/react-aspect-ratio';
|
|
6
|
+
import '@radix-ui/react-avatar';
|
|
7
|
+
import '@radix-ui/react-checkbox';
|
|
8
|
+
import '@radix-ui/react-collapsible';
|
|
9
|
+
import '@radix-ui/react-context-menu';
|
|
10
|
+
import '@radix-ui/react-dialog';
|
|
11
|
+
import '@radix-ui/react-direction';
|
|
12
|
+
import '@radix-ui/react-dropdown-menu';
|
|
13
|
+
import '@radix-ui/react-form';
|
|
14
|
+
import '@radix-ui/react-hover-card';
|
|
15
|
+
import '@radix-ui/react-label';
|
|
16
|
+
import '@radix-ui/react-menubar';
|
|
17
|
+
import '@radix-ui/react-navigation-menu';
|
|
18
|
+
import '@radix-ui/react-one-time-password-field';
|
|
19
|
+
import '@radix-ui/react-password-toggle-field';
|
|
20
|
+
import '@radix-ui/react-popover';
|
|
21
|
+
import '@radix-ui/react-portal';
|
|
22
|
+
import '@radix-ui/react-progress';
|
|
23
|
+
import '@radix-ui/react-radio-group';
|
|
24
|
+
import '@radix-ui/react-scroll-area';
|
|
25
|
+
import '@radix-ui/react-select';
|
|
26
|
+
import * as SeparatorPrimitive from '@radix-ui/react-separator';
|
|
27
|
+
import '@radix-ui/react-slider';
|
|
28
|
+
import '@radix-ui/react-slot';
|
|
29
|
+
import '@radix-ui/react-switch';
|
|
30
|
+
import '@radix-ui/react-tabs';
|
|
31
|
+
import '@radix-ui/react-toast';
|
|
32
|
+
import '@radix-ui/react-toggle';
|
|
33
|
+
import '@radix-ui/react-toggle-group';
|
|
34
|
+
import '@radix-ui/react-toolbar';
|
|
35
|
+
import '@radix-ui/react-tooltip';
|
|
36
|
+
import '@radix-ui/react-visually-hidden';
|
|
37
|
+
import { cn } from '../../lib/utils.js';
|
|
38
|
+
|
|
39
|
+
function Separator({ className, orientation = 'horizontal', decorative = true, ...props }) {
|
|
40
|
+
return (jsx(SeparatorPrimitive.Root, { className: cn('bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px', className), "data-slot": "separator", decorative: decorative, orientation: orientation, ...props }));
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export { Separator };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { Loader2Icon } from 'lucide-react';
|
|
3
|
+
import { cn } from '../../lib/utils.js';
|
|
4
|
+
|
|
5
|
+
function Spinner({ className, ...props }) {
|
|
6
|
+
return jsx(Loader2Icon, { "aria-label": "Loading", className: cn('size-4 animate-spin', className), role: "status", ...props });
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export { Spinner };
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import '@radix-ui/react-accessible-icon';
|
|
3
|
+
import '@radix-ui/react-accordion';
|
|
4
|
+
import '@radix-ui/react-alert-dialog';
|
|
5
|
+
import '@radix-ui/react-aspect-ratio';
|
|
6
|
+
import '@radix-ui/react-avatar';
|
|
7
|
+
import '@radix-ui/react-checkbox';
|
|
8
|
+
import '@radix-ui/react-collapsible';
|
|
9
|
+
import '@radix-ui/react-context-menu';
|
|
10
|
+
import '@radix-ui/react-dialog';
|
|
11
|
+
import '@radix-ui/react-direction';
|
|
12
|
+
import '@radix-ui/react-dropdown-menu';
|
|
13
|
+
import '@radix-ui/react-form';
|
|
14
|
+
import '@radix-ui/react-hover-card';
|
|
15
|
+
import '@radix-ui/react-label';
|
|
16
|
+
import '@radix-ui/react-menubar';
|
|
17
|
+
import '@radix-ui/react-navigation-menu';
|
|
18
|
+
import '@radix-ui/react-one-time-password-field';
|
|
19
|
+
import '@radix-ui/react-password-toggle-field';
|
|
20
|
+
import '@radix-ui/react-popover';
|
|
21
|
+
import '@radix-ui/react-portal';
|
|
22
|
+
import '@radix-ui/react-progress';
|
|
23
|
+
import '@radix-ui/react-radio-group';
|
|
24
|
+
import '@radix-ui/react-scroll-area';
|
|
25
|
+
import '@radix-ui/react-select';
|
|
26
|
+
import '@radix-ui/react-separator';
|
|
27
|
+
import '@radix-ui/react-slider';
|
|
28
|
+
import '@radix-ui/react-slot';
|
|
29
|
+
import * as SwitchPrimitive from '@radix-ui/react-switch';
|
|
30
|
+
import '@radix-ui/react-tabs';
|
|
31
|
+
import '@radix-ui/react-toast';
|
|
32
|
+
import '@radix-ui/react-toggle';
|
|
33
|
+
import '@radix-ui/react-toggle-group';
|
|
34
|
+
import '@radix-ui/react-toolbar';
|
|
35
|
+
import '@radix-ui/react-tooltip';
|
|
36
|
+
import '@radix-ui/react-visually-hidden';
|
|
37
|
+
import { cn } from '../../lib/utils.js';
|
|
38
|
+
|
|
39
|
+
function Switch({ className, size = 'default', ...props }) {
|
|
40
|
+
return (jsx(SwitchPrimitive.Root, { className: cn('peer group/switch focus-visible:border-ring focus-visible:ring-ring/50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input dark:data-[state=unchecked]:bg-input/80 inline-flex shrink-0 items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-[1.15rem] data-[size=default]:w-8 data-[size=sm]:h-3.5 data-[size=sm]:w-6', className), "data-size": size, "data-slot": "switch", ...props, children: jsx(SwitchPrimitive.Thumb, { className: cn('bg-background dark:data-[state=checked]:bg-primary-foreground dark:data-[state=unchecked]:bg-foreground pointer-events-none block rounded-full ring-0 transition-transform group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0'), "data-slot": "switch-thumb" }) }));
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export { Switch };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { useState, useCallback } from 'react';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* A simple boolean toggle hook.
|
|
5
|
+
*
|
|
6
|
+
* @param initial initial value (defaults to false)
|
|
7
|
+
* @returns an object with the current state and helpers to toggle / set on / set off
|
|
8
|
+
*/
|
|
9
|
+
function useToggle(initial = false) {
|
|
10
|
+
const [state, setState] = useState(initial);
|
|
11
|
+
const toggle = useCallback(() => setState((s) => !s), []);
|
|
12
|
+
const setOn = useCallback(() => setState(true), []);
|
|
13
|
+
const setOff = useCallback(() => setState(false), []);
|
|
14
|
+
return { state, toggle, setOn, setOff };
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export { useToggle };
|