import React from 'react'; interface ButtonProps extends React.ButtonHTMLAttributes { variant?: 'primary' | 'secondary' | 'outline' | 'ghost' | 'danger'; size?: 'sm' | 'md' | 'lg'; isLoading?: boolean; fullWidth?: boolean; icon?: React.ReactNode; iconPosition?: 'left' | 'right'; } const Button: React.FC = ({ children, variant = 'primary', size = 'md', isLoading = false, fullWidth = false, icon, iconPosition = 'left', className = '', disabled, ...props }) => { const baseClasses = 'inline-flex items-center justify-center font-medium transition-colors duration-200 rounded-md focus:outline-none focus:ring-2 focus:ring-offset-2'; const variantClasses = { primary: 'bg-primary-500 text-white hover:bg-primary-600 focus:ring-primary-500', secondary: 'bg-secondary-500 text-white hover:bg-secondary-600 focus:ring-secondary-500', outline: 'border border-gray-300 dark:border-gray-700 bg-transparent hover:bg-gray-50 dark:hover:bg-gray-800 text-gray-700 dark:text-gray-200 focus:ring-primary-500', ghost: 'bg-transparent hover:bg-gray-100 dark:hover:bg-gray-800 text-gray-700 dark:text-gray-200 focus:ring-primary-500', danger: 'bg-red-600 text-white hover:bg-red-700 focus:ring-red-500', }; const sizeClasses = { sm: 'px-3 py-1.5 text-sm', md: 'px-4 py-2 text-base', lg: 'px-6 py-3 text-lg', }; const widthClass = fullWidth ? 'w-full' : ''; const disabledClass = disabled || isLoading ? 'opacity-60 cursor-not-allowed' : ''; return ( ); }; export default Button;