import React from 'react'; import { cn } from '../utils/cn'; import { LoadingType, LoadingVariant, SpinnerType } from '../types'; export interface TableLoadingProps { /** * Whether to show loading state * @default false */ loading?: boolean; /** * Type of loading indicator to show * @default 'spinner' */ type?: SpinnerType; /** * Size of the loading indicator * @default 'md' */ size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'; /** * Variant of the loading state * @default 'overlay' */ variant?: LoadingVariant; /** * Text to display during loading * @default 'Loading...' */ text?: string; /** * Number of skeleton rows to show when using the skeleton variant * @default 5 */ skeletonRows?: number; /** * Number of skeleton columns to show when using the skeleton variant * @default 4 */ skeletonColumns?: number; /** * Additional CSS class name */ className?: string; /** * Whether to blur the content behind the loading indicator * @default true */ blur?: boolean; /** * Whether to disable pointer events during loading * @default true */ disablePointerEvents?: boolean; /** * Whether to use reduced motion for accessibility * @default false */ reducedMotion?: boolean; } export function TableLoading({ loading = false, type = 'spinner', size = 'md', variant = 'overlay', text = 'Loading...', skeletonRows = 5, skeletonColumns = 5, className, blur = true, disablePointerEvents = true, reducedMotion = false, }: TableLoadingProps): React.ReactElement | null { if (!loading) { return null; } // Convert size string to CSS class name const sizeClasses = { xs: 'rpt-loading--xs', sm: 'rpt-loading--sm', md: 'rpt-loading--md', lg: 'rpt-loading--lg', xl: 'rpt-loading--xl', }[size] || 'rpt-loading--md'; // Render skeleton loading const renderSkeleton = () => (