9deb320cf6
Rename the global Sidebar route, UI, assets, analytics, and payment return context to Profile. Add accessible message-avatar navigation and preserve the source character across auth and logout flows. BREAKING CHANGE: /sidebar has been removed; use /profile instead.
64 lines
1.5 KiB
TypeScript
64 lines
1.5 KiB
TypeScript
"use client";
|
|
|
|
import { CharacterAvatar, UserMessageAvatar } from "@/app/_components";
|
|
import { useActiveCharacter } from "@/providers/character-provider";
|
|
|
|
export interface MessageAvatarProps {
|
|
isFromAI: boolean;
|
|
userAvatarUrl?: string | null;
|
|
onClick?: () => void;
|
|
}
|
|
|
|
const AVATAR_CLASS_NAME =
|
|
"size-(--chat-avatar-size,43px) ring-2 ring-(--color-avatar-border,#fbf3f5) shadow-(--shadow-input-box,0_1px_2px_rgba(0,0,0,0.1))";
|
|
|
|
export function MessageAvatar({
|
|
isFromAI,
|
|
userAvatarUrl,
|
|
onClick,
|
|
}: MessageAvatarProps) {
|
|
const character = useActiveCharacter();
|
|
|
|
if (isFromAI) {
|
|
if (onClick) {
|
|
return (
|
|
<CharacterAvatar
|
|
src={character.assets.avatar}
|
|
alt={character.displayName}
|
|
size="var(--chat-avatar-size, 43px)"
|
|
imageSize={43}
|
|
priority
|
|
className={AVATAR_CLASS_NAME}
|
|
actionLabel={`Open ${character.displayName}'s private room`}
|
|
analyticsKey="chat.open_private_room_from_avatar"
|
|
onClick={onClick}
|
|
/>
|
|
);
|
|
}
|
|
|
|
return (
|
|
<CharacterAvatar
|
|
src={character.assets.avatar}
|
|
alt={character.displayName}
|
|
size="var(--chat-avatar-size, 43px)"
|
|
imageSize={43}
|
|
priority
|
|
className={AVATAR_CLASS_NAME}
|
|
/>
|
|
);
|
|
}
|
|
|
|
if (onClick) {
|
|
return (
|
|
<UserMessageAvatar
|
|
avatarUrl={userAvatarUrl}
|
|
actionLabel="Open profile"
|
|
analyticsKey="chat.open_profile_from_avatar"
|
|
onClick={onClick}
|
|
/>
|
|
);
|
|
}
|
|
|
|
return <UserMessageAvatar avatarUrl={userAvatarUrl} />;
|
|
}
|