+ {showHeader && (
+
+ {Array.from({ length: columns }).map((_, index) => (
+
+ ))}
+
+ )}
+
+
+ {Array.from({ length: rows }).map((_, rowIndex) => (
+
+ {Array.from({ length: columns }).map((_, colIndex) => (
+
+ ))}
+
+ ))}
+
+
+ );
+}
+
+/**
+ * SkeletonAvatar - Avatar placeholder
+ */
+interface SkeletonAvatarProps {
+ size?: 'sm' | 'md' | 'lg' | 'xl';
+ className?: string;
+}
+
+const avatarSizes = {
+ sm: 32,
+ md: 40,
+ lg: 48,
+ xl: 64,
+};
+
+export function SkeletonAvatar({ size = 'md', className }: SkeletonAvatarProps) {
+ const dimension = avatarSizes[size];
+ return (
+