thu-maic--openmaic
49 行
1.3 KiB
TypeScript
49 行
1.3 KiB
TypeScript
/**
|
|
* Agent Avatar Component
|
|
* Displays agent avatar and name in chat messages
|
|
*/
|
|
|
|
import { Avatar, AvatarImage, AvatarFallback } from '@/components/ui/avatar';
|
|
|
|
interface AgentAvatarProps {
|
|
avatar: string; // Image URL or emoji
|
|
color: string; // Theme color (hex)
|
|
name: string; // Agent display name
|
|
size?: 'sm' | 'md' | 'lg';
|
|
}
|
|
|
|
// Check if string is a URL
|
|
function isUrl(str: string): boolean {
|
|
return str.startsWith('http') || str.startsWith('/') || str.startsWith('data:');
|
|
}
|
|
|
|
export default function AgentAvatar({ avatar, color, name, size = 'md' }: AgentAvatarProps) {
|
|
const sizeClasses = {
|
|
sm: 'size-6',
|
|
md: 'size-8',
|
|
lg: 'size-10',
|
|
};
|
|
|
|
return (
|
|
<div className="flex items-center gap-2 mb-2">
|
|
<Avatar className={sizeClasses[size]} style={{ borderColor: color, borderWidth: 2 }}>
|
|
{isUrl(avatar) ? (
|
|
<>
|
|
<AvatarImage src={avatar} alt={name} />
|
|
<AvatarFallback style={{ backgroundColor: `${color}20`, color }}>
|
|
{name.charAt(0)}
|
|
</AvatarFallback>
|
|
</>
|
|
) : (
|
|
<AvatarFallback style={{ backgroundColor: `${color}20`, color }}>
|
|
{avatar || name.charAt(0)}
|
|
</AvatarFallback>
|
|
)}
|
|
</Avatar>
|
|
<span className="text-sm font-semibold" style={{ color }}>
|
|
{name}
|
|
</span>
|
|
</div>
|
|
);
|
|
}
|