import * as React from 'react' import { Slot } from '@radix-ui/react-slot' import { cva, type VariantProps } from 'class-variance-authority' import { cn } from '@/lib/utils' const buttonVariants = cva( "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-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive cursor-pointer", { variants: { variant: { default: 'bg-primary text-primary-fg shadow-xs hover:bg-primary/90', destructive: 'bg-destructive shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 text-destructive-fg', link: 'underline-offset-4 hover:underline', }, size: { default: 'h-7 px-3 py-2 has-[>svg]:px-3 rounded-sm', sm: 'h-6 rounded gap-1.5 px-2 has-[>svg]:px-2.5', lg: 'h-9 rounded-md px-6 has-[>svg]:px-4', icon: 'size-8', }, }, defaultVariants: { variant: 'default', size: 'default', }, } ) function Button({ className, variant, size, asChild = false, ...props }: React.ComponentProps<'button'> & VariantProps & { asChild?: boolean }) { const Comp = asChild ? Slot : 'button' return ( ) } // eslint-disable-next-line react-refresh/only-export-components export { Button, buttonVariants }