import { Box } from '@/ui/Box'; import { LoadingWrapperProps } from '@/ui/state-types'; import { Text } from '@/ui/Text'; export function LoadingWrapper({ variant = 'spinner', message = 'Loading...', size = 'md', skeletonCount = 3, cardConfig, ariaLabel = 'Loading content', }: LoadingWrapperProps) { const sizeMap = { sm: { spinner: '1rem', inline: 'xs' as const, card: '6rem' }, md: { spinner: '2.5rem', inline: 'sm' as const, card: '8rem' }, lg: { spinner: '4rem', inline: 'base' as const, card: '10rem' }, }; const spinnerSize = sizeMap[size].spinner; const inlineSize = sizeMap[size].inline; const cardHeight = cardConfig?.height || sizeMap[size].card; const Spinner = ({ size: s }: { size: string }) => ( ); switch (variant) { case 'spinner': return ( {message} ); case 'skeleton': return ( {Array.from({ length: skeletonCount }).map((_, index) => ( ))} ); case 'full-screen': return ( {message} This may take a moment... ); case 'inline': return ( {message} ); case 'card': const cardCount = cardConfig?.count || 3; return ( {Array.from({ length: cardCount }).map((_, index) => ( ))} ); default: return null; } } export function FullScreenLoading({ message = 'Loading...' }: Pick) { return ; } export function InlineLoading({ message = 'Loading...', size = 'sm' }: Pick) { return ; } export function SkeletonLoading({ skeletonCount = 3 }: Pick) { return ; } export function CardLoading({ cardConfig }: Pick) { return ; }