import { ReactNode, ButtonHTMLAttributes } from 'react'; import { getButtonClasses, defaultLayoutConfig, type LayoutConfig } from '~/lib/layout-utils'; interface ButtonProps extends Omit, 'className'> { children: ReactNode; className?: string; config?: Partial; variant?: 'primary' | 'secondary' | 'danger' | 'outline' | 'ghost'; size?: 'sm' | 'md' | 'lg'; fullWidth?: boolean; loading?: boolean; icon?: ReactNode; iconPosition?: 'start' | 'end'; } export function Button({ children, className = '', config = {}, variant = 'primary', size = 'md', fullWidth = false, loading = false, icon, iconPosition = 'start', disabled, ...props }: ButtonProps) { const layoutConfig = { ...defaultLayoutConfig, ...config }; const baseClasses = getButtonClasses(variant as any, size); const variantClasses = { primary: 'bg-blue-600 hover:bg-blue-700 text-white focus:ring-blue-500 disabled:bg-blue-300', secondary: 'bg-gray-200 hover:bg-gray-300 text-gray-900 focus:ring-gray-500 disabled:bg-gray-100', danger: 'bg-red-600 hover:bg-red-700 text-white focus:ring-red-500 disabled:bg-red-300', outline: 'border border-gray-300 bg-white hover:bg-gray-50 text-gray-700 focus:ring-blue-500 disabled:bg-gray-50', ghost: 'bg-transparent hover:bg-gray-100 text-gray-700 focus:ring-gray-500 disabled:text-gray-400', }; const fullWidthClass = fullWidth ? 'w-full' : ''; const disabledClass = (disabled || loading) ? 'cursor-not-allowed opacity-50' : ''; const iconSpacing = layoutConfig.direction === 'rtl' ? 'space-x-reverse' : ''; const iconOrderClass = iconPosition === 'end' ? 'flex-row-reverse' : ''; return ( ); }