import { type ButtonHTMLAttributes, type ReactNode, forwardRef } from "react"; interface ButtonProps extends ButtonHTMLAttributes { variant?: "primary" | "secondary" | "ghost"; size?: "sm" | "md" | "lg"; isLoading?: boolean; leftIcon?: ReactNode; rightIcon?: ReactNode; fullWidth?: boolean; } export const Button = forwardRef( ( { variant = "primary", size = "md", isLoading = false, leftIcon, rightIcon, fullWidth = false, disabled, className = "", children, ...props }, ref, ) => { const baseStyles = "inline-flex items-center justify-center gap-2 font-medium rounded-full transition-all duration-150 ease-spring focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2 focus-visible:ring-offset-bg disabled:opacity-40 disabled:cursor-not-allowed"; const variants = { primary: "btn-accent", secondary: "btn", ghost: "btn-ghost", }; const sizes = { sm: "px-3 py-1.5 text-xs h-8", md: "px-5 py-2 text-sm h-10", lg: "px-6 py-3 text-base h-12", }; const width = fullWidth ? "w-full" : ""; return ( ); }, ); Button.displayName = "Button";