import React, { forwardRef } from 'react' import { classNames } from '../utils/classNames' export interface LoadingButtonProps extends React.ButtonHTMLAttributes { children?: React.ReactNode loading?: boolean loadingIndicator?: React.ReactNode loadingPosition?: 'start' | 'end' | 'center' disabled?: boolean startIcon?: React.ReactNode endIcon?: React.ReactNode variant?: 'text' | 'outlined' | 'contained' color?: 'primary' | 'secondary' | 'success' | 'error' | 'info' | 'warning' size?: 'small' | 'medium' | 'large' fullWidth?: boolean /** Test ID for automated testing */ testId?: string } /** * LoadingButton - A button with loading state */ export const LoadingButton = forwardRef(function LoadingButton( { children, loading = false, loadingIndicator, loadingPosition = 'center', disabled, startIcon, endIcon, variant = 'contained', color = 'primary', size = 'medium', fullWidth = false, className, testId, ...props }, ref ) { const isDisabled = disabled || loading const defaultLoadingIndicator = ( ) const indicator = loadingIndicator || defaultLoadingIndicator const renderContent = () => { if (loading && loadingPosition === 'center') { return ( <> {children} {indicator} ) } return ( <> {loading && loadingPosition === 'start' ? ( {indicator} ) : ( startIcon && {startIcon} )} {children} {loading && loadingPosition === 'end' ? ( {indicator} ) : ( endIcon && {endIcon} )} ) } return ( ) }) export default LoadingButton