@@ -6,34 +6,38 @@ import { cn } from '../../../utils/utils';
6
6
7
7
export type ButtonVariants = VariantProps < typeof buttonStyles > [ 'variant' ] ;
8
8
9
- export const buttonStyles = cva ( 'disabled:pointer-events-none disabled:opacity-50 rounded text-sm' , {
10
- variants : {
11
- variant : {
12
- primary : 'bg-white text-black hover:bg-gray-300' ,
13
- secondary : 'bg-[#282828] text-white hover:bg-gray-800' ,
14
- success : 'bg-green-700 text-white hover:bg-green-500' ,
15
- danger : 'bg-red-base text-white hover:bg-red-500' ,
16
- zombie : 'bg-transparent text-white hover:bg-active-gray' ,
17
- zombieGray : 'bg-transparent text-white hover:bg-hover-gray border border-active-gray' ,
18
- yellow : 'bg-yellow-500 text-white hover:bg-yellow-400' ,
19
- black : 'bg-black text-white hover:bg-hover-gray' ,
20
- active : 'bg-active-gray text-white' ,
21
- hover : 'hover:bg-hover-gray text-white' ,
22
- zinc : 'bg-active-gray hover:bg-neutral-800 text-gray-400 border border-neutral-700' ,
23
- icon : 'bg-transparent text-text-light-gray hover:text-white focus:text-white'
9
+ export const buttonStyles = cva (
10
+ 'rounded text-sm transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none' ,
11
+ {
12
+ variants : {
13
+ variant : {
14
+ primary : 'bg-white text-black hover:bg-gray-300 disabled:bg-pure-black disabled:text-text-light-gray' ,
15
+ secondary : 'bg-[#282828] text-white hover:bg-gray-800' ,
16
+ success : 'bg-green-700 text-white hover:bg-green-500' ,
17
+ danger : 'bg-red-base text-white hover:bg-red-500' ,
18
+ zombie : 'bg-transparent text-white hover:bg-active-gray' ,
19
+ zombieGray : 'bg-transparent text-white hover:bg-hover-gray border border-active-gray' ,
20
+ yellow : 'bg-yellow-500 text-white hover:bg-yellow-400' ,
21
+ black : 'bg-black text-white hover:bg-hover-gray' ,
22
+ active : 'bg-active-gray text-white' ,
23
+ hover : 'hover:bg-hover-gray text-white' ,
24
+ zinc : 'bg-active-gray hover:bg-neutral-800 text-gray-400 border border-neutral-700' ,
25
+ icon : 'bg-transparent text-text-light-gray hover:text-white focus:text-white' ,
26
+ emptyFaded : 'border border-text-light-gray text-text-light-gray hover:text-white focus:text-white'
27
+ } ,
28
+ size : {
29
+ xs : 'h-8 py-1 px-3' ,
30
+ sm : 'h-9 px-2' ,
31
+ md : 'h-9 py-2 px-4' ,
32
+ lg : 'h-11 px-4'
33
+ }
24
34
} ,
25
- size : {
26
- xs : 'h-8 py-1 px-3' ,
27
- sm : 'h-9 px-2 ' ,
28
- md : 'h-9 py-2 px-4' ,
29
- lg : 'h-11 px-4'
35
+ defaultVariants : {
36
+ variant : 'primary' ,
37
+ size : 'md'
30
38
}
31
- } ,
32
- defaultVariants : {
33
- variant : 'primary' ,
34
- size : 'md'
35
39
}
36
- } ) ;
40
+ ) ;
37
41
38
42
interface ExtraProps {
39
43
isLoading ?: boolean ;
@@ -47,7 +51,11 @@ const Button = forwardRef<HTMLButtonElement, ButtonProps>(function Button({ size
47
51
}
48
52
49
53
return (
50
- < button ref = { ref } className = { cn ( buttonStyles ( { className, variant, size } ) , 'relative flex gap-2 items-center' , isLoading && 'opacity-0' ) } { ...props } >
54
+ < button
55
+ ref = { ref }
56
+ className = { cn ( buttonStyles ( { className, variant, size } ) , 'relative flex gap-2 items-center justify-center' , isLoading && 'opacity-0' ) }
57
+ { ...props }
58
+ >
51
59
{ children }
52
60
{ isLoading && < Loader className = "animate-spin flex inset-x-0 h-full" /> }
53
61
</ button >
0 commit comments