"use client" import * as React from "react"; import * as AvatarPrimitive from "@radix-ui/react-avatar"; import { cva, type VariantProps } from "class-variance-authority"; import { cn } from "../../lib/utils"; const avatarVariants = cva( "relative flex shrink-0 overflow-hidden", { variants: { size: { default: "h-10 w-10", xs: "h-6 w-6", sm: "h-8 w-8", md: "h-10 w-10", lg: "h-12 w-12", xl: "h-16 w-16", "2xl": "h-20 w-20", }, radius: { default: "rounded-full", sm: "rounded-md", lg: "rounded-xl", full: "rounded-full", none: "rounded-none", }, variant: { default: "", ring: "ring-2 ring-border", ringOffset: "ring-2 ring-border ring-offset-2 ring-offset-background", border: "border-2 border-border" } }, defaultVariants: { size: "default", radius: "default", variant: "default" }, } ); export interface AvatarProps extends React.ComponentPropsWithoutRef, VariantProps {} const Avatar = React.forwardRef< React.ElementRef, AvatarProps >(({ className, size, radius, variant, ...props }, ref) => ( )); Avatar.displayName = AvatarPrimitive.Root.displayName; const AvatarImage = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef >(({ className, ...props }, ref) => ( )); AvatarImage.displayName = AvatarPrimitive.Image.displayName; const AvatarFallback = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef >(({ className, ...props }, ref) => ( )); AvatarFallback.displayName = AvatarPrimitive.Fallback.displayName; // Avatar Group Component for displaying multiple avatars interface AvatarGroupProps extends React.HTMLAttributes { limit?: number; avatars: React.ReactNode[]; overlapOffset?: number; } const AvatarGroup = React.forwardRef( ({ className, limit, avatars, overlapOffset = -8, ...props }, ref) => { const visibleAvatars = limit ? avatars.slice(0, limit) : avatars; const remainingCount = limit ? Math.max(0, avatars.length - limit) : 0; return (
{visibleAvatars.map((avatar, index) => (
{avatar}
))} {remainingCount > 0 && (
+{remainingCount}
)}
); } ); AvatarGroup.displayName = "AvatarGroup"; export { Avatar, AvatarImage, AvatarFallback, AvatarGroup };