import * as React from 'react' import {cva, type VariantProps} from 'class-variance-authority' import {Slot as SlotPrimitive} from 'radix-ui' import {cn} from '../../lib/utils' /** * A component for displaying status, categories, or labels with multiple visual variants. * @publicDocs */ export interface BadgeDocProps { /** Visual style variant */ variant?: 'primary' | 'secondary' | 'destructive' | 'outline' | 'none' /** Render as child element instead of span */ asChild?: boolean /** Content to render inside */ children?: React.ReactNode } const badgeVariants = cva( 'inline-flex items-center justify-center rounded-md border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none transition-[color,box-shadow] overflow-hidden', { variants: { variant: { primary: 'border-transparent bg-primary text-primary-foreground', secondary: 'border-transparent bg-secondary text-secondary-foreground', destructive: 'border-transparent bg-destructive text-white dark:bg-destructive/60', outline: 'bg-white text-foreground', none: '', // Allows custom classes }, }, defaultVariants: { variant: 'primary', }, } ) function Badge({ className, variant, asChild = false, ...props }: React.ComponentProps<'span'> & VariantProps & {asChild?: boolean}) { const Comp = asChild ? SlotPrimitive.Slot : 'span' return ( ) } export {Badge, badgeVariants}