import { FC, ButtonHTMLAttributes } from 'react' export type ButtonVariant = 'primary' | 'secondary' | 'danger' | 'success' | 'warning' export type ButtonSize = 'small' | 'medium' | 'large' interface ButtonProps extends ButtonHTMLAttributes { variant?: ButtonVariant size?: ButtonSize isLoading?: boolean leftIcon?: React.ReactNode rightIcon?: React.ReactNode fullWidth?: boolean iconOnly?: boolean } /** * Button component with different variants, sizes and states */ const Button: FC = ({ children, variant = 'primary', size = 'medium', isLoading = false, leftIcon, rightIcon, fullWidth = false, iconOnly = false, className = '', disabled, ...props }) => { // Size class mapping const sizeClass = { small: 'btn-sm', medium: 'btn-md', large: 'btn-lg', }[size] // Variant class mapping const variantClass = { primary: 'btn-primary', secondary: 'btn-secondary', danger: 'btn-danger', success: 'btn-success', warning: 'btn-warning', }[variant] // Determine if this is an icon-only button const isIconOnly = iconOnly || (!children && (leftIcon || rightIcon)) return ( ) } export default Button