"use client" import * as React from 'react' import { cn } from "../../utils/cn" interface SkeletonProps extends React.HTMLAttributes { className?: string } const Skeleton = React.forwardRef( ({ className, ...props }, ref) => { return (
) } ) Skeleton.displayName = 'Skeleton' interface SkeletonTextProps extends React.HTMLAttributes { lines?: number className?: string } const SkeletonText = React.forwardRef( ({ lines = 1, className, ...props }, ref) => { return (
{Array.from({ length: lines }).map((_, i) => ( 1 && "w-3/4" // Last line shorter for multi-line )} /> ))}
) } ) SkeletonText.displayName = 'SkeletonText' interface SkeletonCardProps extends React.HTMLAttributes { showImage?: boolean className?: string } const SkeletonCard = React.forwardRef( ({ showImage = false, className, ...props }, ref) => { return (
{showImage && ( )}
) } ) SkeletonCard.displayName = 'SkeletonCard' interface SkeletonGridProps extends React.HTMLAttributes { columns?: number items?: number showImages?: boolean className?: string } const SkeletonGrid = React.forwardRef( ({ columns = 3, items = 6, showImages = false, className, ...props }, ref) => { return (
{Array.from({ length: items }).map((_, i) => ( ))}
) } ) SkeletonGrid.displayName = 'SkeletonGrid' interface SkeletonButtonProps extends React.HTMLAttributes { size?: 'sm' | 'default' | 'lg' className?: string } const SkeletonButton = React.forwardRef( ({ size = 'default', className, ...props }, ref) => { const sizeClasses = { sm: 'h-8 w-20', default: 'h-10 w-32', lg: 'h-12 w-40' } return ( ) } ) SkeletonButton.displayName = 'SkeletonButton' interface SkeletonHeadingProps extends React.HTMLAttributes { level?: 1 | 2 | 3 | 4 | 5 | 6 className?: string } const SkeletonHeading = React.forwardRef( ({ level = 1, className, ...props }, ref) => { const heightClasses = { 1: 'h-12', 2: 'h-10', 3: 'h-8', 4: 'h-7', 5: 'h-6', 6: 'h-5' } return ( ) } ) SkeletonHeading.displayName = 'SkeletonHeading' interface SkeletonListProps extends React.HTMLAttributes { items?: number className?: string } const SkeletonList = React.forwardRef( ({ items = 5, className, ...props }, ref) => { return (
{Array.from({ length: items }).map((_, i) => (
))}
) } ) SkeletonList.displayName = 'SkeletonList' interface SkeletonNavigationProps extends React.HTMLAttributes { items?: number className?: string } const SkeletonNavigation = React.forwardRef( ({ items = 6, className, ...props }, ref) => { return (
{Array.from({ length: items }).map((_, i) => ( ))}
) } ) SkeletonNavigation.displayName = 'SkeletonNavigation' export { Skeleton, SkeletonText, SkeletonCard, SkeletonGrid, SkeletonButton, SkeletonHeading, SkeletonList, SkeletonNavigation }