1+ import { cn } from "@/lib/utils" ;
2+ import { cva , VariantProps } from "class-variance-authority" ;
13import React , { HTMLAttributes } from "react" ;
24
3- const variants = {
4- default : "border-black text-black" ,
5- error : "border-red-600 text-red-600" ,
6- success : "border-green-600 text-green-600" ,
7- } ;
5+ const badgeVariants = cva ( "font-semibold border-2" , {
6+ variants : {
7+ variant : {
8+ default : "border-black text-black" ,
9+ error : "border-red-600 text-red-600" ,
10+ success : "border-green-600 text-green-600" ,
11+ filled : "bg-primary-400 border-black text-black" ,
12+ } ,
13+ size : {
14+ sm : "px-2 py-.5 text-xs" ,
15+ md : "px-2.5 py-1 text-sm" ,
16+ lg : "px-3 py-1.5 text-base" ,
17+ } ,
18+ } ,
19+ defaultVariants : {
20+ variant : "default" ,
21+ size : "md" ,
22+ } ,
23+ } ) ;
824
9- interface ButtonProps extends HTMLAttributes < HTMLSpanElement > {
10- size ?: "sm" | "md" | "lg" ;
11- variant ?: keyof typeof variants ;
12- className ?: string ;
13- }
25+ interface ButtonProps
26+ extends HTMLAttributes < HTMLSpanElement > ,
27+ VariantProps < typeof badgeVariants > { }
1428
1529export function Badge ( {
1630 children,
@@ -19,15 +33,9 @@ export function Badge({
1933 className = "" ,
2034 ...props
2135} : ButtonProps ) {
22- const sizeClasses = {
23- sm : "px-4 py-1 text-sm" ,
24- md : "px-2 py-1 text-sm" ,
25- lg : "px-8 py-3 text-lg" ,
26- } ;
27-
2836 return (
2937 < span
30- className = { `text-primary-foreground border-2 ${ variants [ variant ] } ${ sizeClasses [ size ] } ${ className } ` }
38+ className = { cn ( badgeVariants ( { variant, size } ) , className ) }
3139 { ...props }
3240 >
3341 { children }
0 commit comments