// src/components/ui/Button.tsx import React from 'react'; import { Loader2 } from 'lucide-react'; type ButtonVariant = 'primary' | 'secondary' | 'outline' | 'danger' | 'ghost'; type ButtonSize = 'sm' | 'md' | 'lg'; interface ButtonProps extends React.ButtonHTMLAttributes { variant?: ButtonVariant; size?: ButtonSize; isLoading?: boolean; fullWidth?: boolean; children: React.ReactNode; } export const Button: React.FC = ({ variant = 'primary', size = 'md', isLoading = false, fullWidth = false, children, className = '', disabled, ...props }) => { const baseClasses = 'inline-flex items-center justify-center rounded-lg font-medium transition-all duration-200 ' + 'focus:outline-none focus:ring-2 focus:ring-primary disabled:opacity-50 disabled:cursor-not-allowed'; const variantClasses: Record = { primary: 'bg-primary text-black hover:opacity-90', secondary: 'bg-background-secondary text-text-primary hover:bg-background-card', outline: 'border border-border text-text-primary hover:bg-background-card', danger: 'bg-red-600 text-white hover:bg-red-700', ghost: 'text-text-secondary hover:bg-background-card', }; const sizeClasses: Record = { sm: 'px-3 py-1.5 text-sm', md: 'px-4 py-2 text-sm', lg: 'px-6 py-3 text-base', }; const widthClass = fullWidth ? 'w-full' : ''; return ( ); };