@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.
@@ -0,0 +1,8 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { Button as Button$1 } from '../../ui/button.js';
3
+
4
+ const Button = (props) => {
5
+ return jsx(Button$1, { ...props });
6
+ };
7
+
8
+ export { Button };
@@ -0,0 +1,8 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { Checkbox as Checkbox$1 } from '../../ui/checkbox.js';
3
+
4
+ const Checkbox = (props) => {
5
+ return jsx(Checkbox$1, { ...props });
6
+ };
7
+
8
+ export { Checkbox };
@@ -0,0 +1,8 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { Input as Input$1 } from '../../ui/input.js';
3
+
4
+ const Input = (props) => {
5
+ return jsx(Input$1, { ...props });
6
+ };
7
+
8
+ export { Input };
@@ -0,0 +1,8 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { Label as Label$1 } from '../../ui/label.js';
3
+
4
+ const Label = (props) => {
5
+ return jsx(Label$1, { ...props });
6
+ };
7
+
8
+ export { Label };
@@ -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,8 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { Separator as Separator$1 } from '../../ui/separator.js';
3
+
4
+ const Separator = (props) => {
5
+ return jsx(Separator$1, { ...props });
6
+ };
7
+
8
+ export { Separator };
@@ -0,0 +1,8 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { Spinner as Spinner$1 } from '../../ui/spinner.js';
3
+
4
+ const Spinner = (props) => {
5
+ return jsx(Spinner$1, { ...props });
6
+ };
7
+
8
+ export { Spinner };
@@ -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 };