import { ButtonHTMLAttributes, forwardRef } from "react"; import { cn } from "@/utils/helpers"; interface ButtonProps extends ButtonHTMLAttributes { variant?: "primary" | "secondary" | "outline" | "danger" | "success"; size?: "sm" | "md" | "lg"; isLoading?: boolean; fullWidth?: boolean; } const Button = forwardRef( ( { children, className, variant = "primary", size = "md", isLoading = false, fullWidth = false, disabled, ...props }, ref ) => { const baseStyles = "inline-flex items-center justify-center font-medium rounded-lg transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 disabled:opacity-50 disabled:cursor-not-allowed"; const variants = { primary: "bg-primary-500 text-white hover:bg-primary-600 focus:ring-primary-500 shadow-md hover:shadow-lg", secondary: "bg-white text-gray-700 hover:bg-primary-500 hover:text-white focus:ring-primary-500 border border-gray-300 shadow-sm", outline: "border-2 border-primary-500 text-primary-500 hover:bg-primary-500 hover:text-white focus:ring-primary-500 shadow-sm", danger: "bg-red-600 text-white hover:bg-red-700 focus:ring-red-500 shadow-md", success: "bg-primary-600 text-white hover:bg-primary-700 focus:ring-primary-600 shadow-md hover:shadow-lg", }; const sizes = { sm: "px-3 py-1.5 text-sm", md: "px-4 py-2 text-base", lg: "px-6 py-3 text-lg", }; return ( ); } ); Button.displayName = "Button"; export default Button;