import { ReactNode } from 'react' export type LoadingType = 'spinner' | 'dots' | 'progress' export type LoadingSize = 'small' | 'medium' | 'large' interface LoadingIndicatorProps { size?: LoadingSize type?: LoadingType message?: string progress?: number className?: string } /** * Versatile loading indicator component * Supports multiple visual styles and sizes */ const LoadingIndicator = ({ size = 'medium', type = 'spinner', message, progress = 0, className = '', }: LoadingIndicatorProps) => { // Size class mapping const sizeClass = { small: 'loading-small', medium: 'loading-medium', large: 'loading-large', }[size] // Render loading indicator based on type const renderLoadingIndicator = (): ReactNode => { switch (type) { case 'spinner': return
case 'dots': return (
) case 'progress': return (
{progress > 0 &&
{Math.round(progress)}%
}
) default: return
} } return (
{renderLoadingIndicator()} {message &&

{message}

}
) } export default LoadingIndicator