|
1 | | -import { cn } from '@/lib/utils'; |
| 1 | +import * as React from "react" |
| 2 | +import { cva, type VariantProps } from "class-variance-authority" |
| 3 | +import { Slot } from "radix-ui" |
2 | 4 |
|
3 | | -import * as React from 'react'; |
4 | | - |
5 | | -import { Slot } from '@radix-ui/react-slot'; |
6 | | -import { type VariantProps, cva } from 'class-variance-authority'; |
| 5 | +import { cn } from "@/lib/utils" |
7 | 6 |
|
8 | 7 | const buttonVariants = cva( |
9 | | - "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-accent focus-visible:ring-accent/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive", |
| 8 | + "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", |
10 | 9 | { |
11 | 10 | variants: { |
12 | 11 | variant: { |
13 | | - default: |
14 | | - 'bg-primary text-primary-foreground shadow-xs hover:bg-primary/90', |
| 12 | + default: "bg-primary text-primary-foreground hover:bg-primary/90", |
15 | 13 | destructive: |
16 | | - 'bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60', |
| 14 | + "bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40", |
17 | 15 | outline: |
18 | | - 'border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50', |
| 16 | + "border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50", |
19 | 17 | secondary: |
20 | | - 'bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80', |
| 18 | + "bg-secondary text-secondary-foreground hover:bg-secondary/80", |
21 | 19 | ghost: |
22 | | - 'hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50', |
23 | | - link: 'text-primary underline-offset-4 hover:underline', |
| 20 | + "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50", |
| 21 | + link: "text-primary underline-offset-4 hover:underline", |
24 | 22 | }, |
25 | 23 | size: { |
26 | | - default: 'h-9 px-4 py-2 has-[>svg]:px-3', |
27 | | - sm: 'h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5', |
28 | | - lg: 'h-10 rounded-md px-6 has-[>svg]:px-4', |
29 | | - icon: 'size-9', |
| 24 | + default: "h-9 px-4 py-2 has-[>svg]:px-3", |
| 25 | + xs: "h-6 gap-1 rounded-md px-2 text-xs has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3", |
| 26 | + sm: "h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5", |
| 27 | + lg: "h-10 rounded-md px-6 has-[>svg]:px-4", |
| 28 | + icon: "size-9", |
| 29 | + "icon-xs": "size-6 rounded-md [&_svg:not([class*='size-'])]:size-3", |
| 30 | + "icon-sm": "size-8", |
| 31 | + "icon-lg": "size-10", |
30 | 32 | }, |
31 | 33 | }, |
32 | 34 | defaultVariants: { |
33 | | - variant: 'default', |
34 | | - size: 'default', |
| 35 | + variant: "default", |
| 36 | + size: "default", |
35 | 37 | }, |
36 | 38 | } |
37 | | -); |
| 39 | +) |
38 | 40 |
|
39 | 41 | function Button({ |
40 | 42 | className, |
41 | | - variant, |
42 | | - size, |
| 43 | + variant = "default", |
| 44 | + size = "default", |
43 | 45 | asChild = false, |
44 | 46 | ...props |
45 | | -}: React.ComponentProps<'button'> & |
| 47 | +}: React.ComponentProps<"button"> & |
46 | 48 | VariantProps<typeof buttonVariants> & { |
47 | | - asChild?: boolean; |
| 49 | + asChild?: boolean |
48 | 50 | }) { |
49 | | - const Comp = asChild ? Slot : 'button'; |
| 51 | + const Comp = asChild ? Slot.Root : "button" |
50 | 52 |
|
51 | 53 | return ( |
52 | 54 | <Comp |
53 | 55 | data-slot="button" |
| 56 | + data-variant={variant} |
| 57 | + data-size={size} |
54 | 58 | className={cn(buttonVariants({ variant, size, className }))} |
55 | 59 | {...props} |
56 | 60 | /> |
57 | | - ); |
| 61 | + ) |
58 | 62 | } |
59 | 63 |
|
60 | | -export { Button, buttonVariants }; |
| 64 | +export { Button, buttonVariants } |
0 commit comments