import React from 'react'; type ButtonVariant = 'primary' | 'secondary' | 'success' | 'danger' | 'warning' | 'info' | 'outline' | 'link'; interface ButtonProps { children: React.ReactNode; type?: 'button' | 'submit' | 'reset'; onClick?: (e: React.MouseEvent) => void; variant?: ButtonVariant; size?: 'sm' | 'md' | 'lg'; disabled?: boolean; className?: string; icon?: React.ReactNode; } export function Button({ children, type = 'button', onClick, variant = 'primary', size = 'md', disabled = false, className = '', icon, }: ButtonProps) { const baseClasses = 'inline-flex items-center justify-center font-medium rounded-md focus:outline-none transition-colors'; // Definir classes de variante const variantClasses = { primary: 'bg-blue-600 text-white hover:bg-blue-700 focus:ring-2 focus:ring-offset-2 focus:ring-blue-500', secondary: 'bg-gray-600 text-white hover:bg-gray-700 focus:ring-2 focus:ring-offset-2 focus:ring-gray-500', success: 'bg-green-600 text-white hover:bg-green-700 focus:ring-2 focus:ring-offset-2 focus:ring-green-500', danger: 'bg-red-600 text-white hover:bg-red-700 focus:ring-2 focus:ring-offset-2 focus:ring-red-500', warning: 'bg-yellow-500 text-white hover:bg-yellow-600 focus:ring-2 focus:ring-offset-2 focus:ring-yellow-400', info: 'bg-blue-400 text-white hover:bg-blue-500 focus:ring-2 focus:ring-offset-2 focus:ring-blue-300', outline: 'bg-white text-gray-700 border border-gray-300 hover:bg-gray-50 focus:ring-2 focus:ring-offset-2 focus:ring-blue-500', link: 'bg-transparent text-blue-600 hover:text-blue-800 hover:underline focus:ring-0', }; // Definir classes de tamanho const sizeClasses = { sm: 'px-2.5 py-1.5 text-xs', md: 'px-4 py-2 text-sm', lg: 'px-6 py-3 text-base', }; // Definir classes de estado desabilitado const disabledClasses = 'opacity-50 cursor-not-allowed'; const buttonClasses = [ baseClasses, variantClasses[variant], sizeClasses[size], disabled ? disabledClasses : '', className, ].join(' '); return ( ); }