/ src / components / Button.tsx
Button.tsx
 1  import React, { ReactNode } from 'react';
 2  
 3  interface ButtonProps {
 4    label?: string;
 5    icon?: ReactNode;
 6    onClick: () => void;
 7    variant?: 'primary' | 'secondary';
 8    size?: 'small' | 'medium' | 'large';
 9    fullWidth?: boolean;
10  }
11  
12  export const Button: React.FC<ButtonProps> = ({ 
13    label, 
14    icon, 
15    onClick, 
16    variant = 'primary', 
17    size = 'medium',
18    fullWidth = false
19  }) => {
20    const baseClasses = "font-bold rounded-full inline-flex items-center justify-center transition duration-300 ease-in-out";
21    const variantClasses = variant === 'primary' 
22      ? "bg-blue-500 hover:bg-blue-600 text-white"
23      : "bg-gray-200 hover:bg-gray-300 text-gray-800";
24    const sizeClasses = {
25      small: "py-4 px-2 text-sm",
26      medium: "py-4 px-4 text-base",
27      large: "py-4 px-6 text-lg"
28    };
29    const widthClass = fullWidth ? "w-full" : "";
30  
31    return (
32      <button 
33        className={`${baseClasses} ${variantClasses} ${sizeClasses[size]} ${widthClass}`}
34        onClick={onClick}
35      >
36        {icon && <span className="mr-2">{icon}</span>}
37        {label && <span>{label}</span>}
38      </button>
39    );
40  };