refactor(chat): extract ai disclosure into dedicated banner component

- Move AiDisclosure and EmptyState logic into a new AiDisclosureBanner component
- Remove isGuest prop from ChatArea as it's no longer needed there
- Update styling with explicit color values for better visibility
This commit is contained in:
2026-06-12 12:12:13 +08:00
parent 57992bffac
commit d64ad0f130
2 changed files with 6 additions and 26 deletions
+2 -1
View File
@@ -22,6 +22,7 @@
border-radius: var(--radius-md, 8px); border-radius: var(--radius-md, 8px);
padding: var(--spacing-1, 4px) var(--spacing-3, 12px); padding: var(--spacing-1, 4px) var(--spacing-3, 12px);
font-size: var(--font-size-xs, 11px); font-size: var(--font-size-xs, 11px);
color: #000;
opacity: 0.75; opacity: 0.75;
} }
@@ -31,7 +32,7 @@
border-radius: var(--radius-md, 8px); border-radius: var(--radius-md, 8px);
padding: var(--spacing-2, 8px) var(--spacing-4, 16px); padding: var(--spacing-2, 8px) var(--spacing-4, 16px);
font-size: var(--font-size-sm, 12px); font-size: var(--font-size-sm, 12px);
opacity: 0.75; color: #8c8b8b;
text-align: center; text-align: center;
} }
+3 -24
View File
@@ -18,6 +18,7 @@ import { useEffect, useRef } from "react";
import type { UiMessage } from "@/models/chat/ui-message"; import type { UiMessage } from "@/models/chat/ui-message";
import { AiDisclosureBanner } from "./ai-disclosure-banner";
import { DateHeader } from "./date-header"; import { DateHeader } from "./date-header";
import { LottieMessageBubble } from "./lottie-message-bubble"; import { LottieMessageBubble } from "./lottie-message-bubble";
import { MessageBubble } from "./message-bubble"; import { MessageBubble } from "./message-bubble";
@@ -29,7 +30,7 @@ export interface ChatAreaProps {
isGuest: boolean; isGuest: boolean;
} }
export function ChatArea({ messages, isReplyingAI, isGuest }: ChatAreaProps) { export function ChatArea({ messages, isReplyingAI }: ChatAreaProps) {
const scrollRef = useRef<HTMLDivElement>(null); const scrollRef = useRef<HTMLDivElement>(null);
const prevLengthRef = useRef(messages.length); const prevLengthRef = useRef(messages.length);
@@ -46,11 +47,7 @@ export function ChatArea({ messages, isReplyingAI, isGuest }: ChatAreaProps) {
return ( return (
<main ref={scrollRef} className={styles.area} aria-label="Chat messages"> <main ref={scrollRef} className={styles.area} aria-label="Chat messages">
<AiDisclosure /> <AiDisclosureBanner />
{messages.length === 0 && !isReplyingAI && (
<EmptyState isGuest={isGuest} />
)}
{renderMessagesWithDateHeaders(messages)} {renderMessagesWithDateHeaders(messages)}
@@ -83,21 +80,3 @@ function renderMessagesWithDateHeaders(messages: readonly UiMessage[]) {
), ),
); );
} }
function AiDisclosure() {
return (
<div className={styles.aiDisclosure}>
{'You' + String.fromCharCode(39) + 're chatting with an AI companion.'}
</div>
);
}
function EmptyState({ isGuest }: { isGuest: boolean }) {
return (
<div className={styles.aiDisclosure}>
{isGuest
? "Say hi to start chatting. (Guest mode · 40 free messages)"
: "Say hi to start chatting."}
</div>
);
}