feat(chat): port chat widget components from Dart to React
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
"use client";
|
||||
/**
|
||||
* MessageAvatar 消息头像
|
||||
*
|
||||
* 原始 Dart: lib/ui/chat/widgets/message_avatar.dart(85 行)
|
||||
*
|
||||
* 显示规则:
|
||||
* - AI 消息:Elio 头像(`/images/chat/pic-chat-elio.png`)
|
||||
* - 用户消息(有 avatarUrl):用户头像
|
||||
* - 用户消息(无 avatarUrl):游客头像(`/images/chat/pic-chat-guest.png`)
|
||||
*/
|
||||
import Image from "next/image";
|
||||
|
||||
import styles from "./message-avatar.module.css";
|
||||
|
||||
export interface MessageAvatarProps {
|
||||
isFromAI: boolean;
|
||||
userAvatarUrl?: string | null;
|
||||
}
|
||||
|
||||
export function MessageAvatar({ isFromAI, userAvatarUrl }: MessageAvatarProps) {
|
||||
if (isFromAI) {
|
||||
return (
|
||||
<div className={styles.avatar} aria-label="AI avatar">
|
||||
<Image
|
||||
src="/images/chat/pic-chat-elio.png"
|
||||
alt="Elio"
|
||||
width={43}
|
||||
height={43}
|
||||
priority
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
if (userAvatarUrl && userAvatarUrl.length > 0) {
|
||||
return (
|
||||
<div className={styles.avatar} aria-label="User avatar">
|
||||
{/* eslint-disable-next-line @next/next/no-img-element */}
|
||||
<img src={userAvatarUrl} alt="" />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<div className={styles.avatar} aria-label="Guest avatar">
|
||||
<Image
|
||||
src="/images/chat/pic-chat-guest.png"
|
||||
alt="Guest"
|
||||
width={43}
|
||||
height={43}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user