agent-avatar.tsx 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. /**
  2. * Agent Avatar Component
  3. * Displays agent avatar and name in chat messages
  4. */
  5. import { Avatar, AvatarImage, AvatarFallback } from '@/components/ui/avatar';
  6. interface AgentAvatarProps {
  7. avatar: string; // Image URL or emoji
  8. color: string; // Theme color (hex)
  9. name: string; // Agent display name
  10. size?: 'sm' | 'md' | 'lg';
  11. }
  12. // Check if string is a URL
  13. function isUrl(str: string): boolean {
  14. return str.startsWith('http') || str.startsWith('/') || str.startsWith('data:');
  15. }
  16. export default function AgentAvatar({ avatar, color, name, size = 'md' }: AgentAvatarProps) {
  17. const sizeClasses = {
  18. sm: 'size-6',
  19. md: 'size-8',
  20. lg: 'size-10',
  21. };
  22. return (
  23. <div className="flex items-center gap-2 mb-2">
  24. <Avatar className={sizeClasses[size]} style={{ borderColor: color, borderWidth: 2 }}>
  25. {isUrl(avatar) ? (
  26. <>
  27. <AvatarImage src={avatar} alt={name} />
  28. <AvatarFallback style={{ backgroundColor: `${color}20`, color }}>
  29. {name.charAt(0)}
  30. </AvatarFallback>
  31. </>
  32. ) : (
  33. <AvatarFallback style={{ backgroundColor: `${color}20`, color }}>
  34. {avatar || name.charAt(0)}
  35. </AvatarFallback>
  36. )}
  37. </Avatar>
  38. <span className="text-sm font-semibold" style={{ color }}>
  39. {name}
  40. </span>
  41. </div>
  42. );
  43. }