import React from 'react'; import { Users, User } from 'lucide-react'; import type { TPrincipal } from 'librechat-data-provider'; import { cn } from '~/utils'; interface PrincipalAvatarProps { principal: TPrincipal; size?: 'sm' | 'md' | 'lg'; className?: string; } export default function PrincipalAvatar({ principal, size = 'md', className, }: PrincipalAvatarProps) { const { avatar, type, name } = principal; const displayName = name || 'Unknown'; // Size variants const sizeClasses = { sm: 'h-6 w-6', md: 'h-8 w-8', lg: 'h-10 w-10', }; const iconSizeClasses = { sm: 'h-3 w-3', md: 'h-4 w-4', lg: 'h-5 w-5', }; const avatarSizeClass = sizeClasses[size]; const iconSizeClass = iconSizeClasses[size]; // Avatar or icon logic if (avatar) { return (
{`${displayName} { // Fallback to icon if image fails to load const target = e.target as HTMLImageElement; target.style.display = 'none'; target.nextElementSibling?.classList.remove('hidden'); }} /> {/* Hidden fallback icon that shows if image fails */}
{type === 'user' ? (
) : (
)}
); } // Fallback icon based on type return (
{type === 'user' ? (
) : (
)}
); }