diff --git a/src/app/_components/__tests__/tailwind-components.test.tsx b/src/app/_components/__tests__/tailwind-components.test.tsx index 7714b29a..f8a38291 100644 --- a/src/app/_components/__tests__/tailwind-components.test.tsx +++ b/src/app/_components/__tests__/tailwind-components.test.tsx @@ -13,6 +13,9 @@ describe("shared Tailwind components", () => { const actionHtml = renderToStaticMarkup( undefined} variant="ghost" />, ); + const darkHtml = renderToStaticMarkup( + , + ); expect(linkHtml).toContain('href="/chat"'); expect(linkHtml).toContain('aria-label="Back to chat"'); @@ -22,6 +25,10 @@ describe("shared Tailwind components", () => { expect(actionHtml).toContain(" { diff --git a/src/app/_components/back-button.tsx b/src/app/_components/back-button.tsx index 12663dbe..7338075f 100644 --- a/src/app/_components/back-button.tsx +++ b/src/app/_components/back-button.tsx @@ -7,7 +7,7 @@ interface BackButtonBaseProps { className?: string; ariaLabel?: string; iconSize?: number; - variant?: "floating" | "soft" | "ghost"; + variant?: "floating" | "soft" | "ghost" | "dark"; } type BackButtonLinkProps = BackButtonBaseProps & { @@ -32,6 +32,8 @@ const VARIANT_CLASS_NAMES = { "size-(--responsive-icon-button-size,42px) border border-[rgba(25,19,22,0.08)] bg-[rgba(255,255,255,0.82)] text-[#21191d] shadow-[0_10px_22px_rgba(50,30,40,0.08)] hover:-translate-y-px hover:bg-white hover:shadow-[0_14px_26px_rgba(50,30,40,0.12)] active:translate-y-px", ghost: "size-8 bg-transparent text-black hover:opacity-70 active:scale-96", + dark: + "size-(--responsive-icon-button-size,42px) border border-[rgba(255,255,255,0.12)] bg-[rgba(13,11,20,0.7)] text-white shadow-[0_10px_24px_rgba(0,0,0,0.2)] backdrop-blur-md hover:bg-[rgba(28,24,39,0.82)] active:scale-96", } satisfies Record, string>; export function BackButton({ diff --git a/src/app/chat/components/__tests__/tailwind-components.test.tsx b/src/app/chat/components/__tests__/tailwind-components.test.tsx index 3bc479ac..35563751 100644 --- a/src/app/chat/components/__tests__/tailwind-components.test.tsx +++ b/src/app/chat/components/__tests__/tailwind-components.test.tsx @@ -160,10 +160,15 @@ describe("chat Tailwind components", () => { expect(guestHtml).toContain('aria-label="Sign up to unlock more features"'); expect(guestHtml).toContain("bg-(--color-accent,#f84d96)"); expect(guestHtml).toContain("size-(--icon-size-sm,16px)"); + expect(guestHtml).not.toContain('href="/splash"'); + expect(guestHtml).not.toContain('aria-label="Back to home"'); + expect(guestHtml).not.toContain('aria-label="Menu"'); expect(memberHtml).toContain("Offer"); + expect(memberHtml).toContain('href="/splash"'); + expect(memberHtml).toContain('aria-label="Back to home"'); expect(memberHtml).toContain('aria-label="Menu"'); expect(memberHtml).toContain("bg-[rgba(13,11,20,0.7)]"); - expect(memberHtml).toContain("size-(--icon-size-xl,32px)"); + expect(memberHtml).toContain("size-(--responsive-icon-button-size,42px)"); }); it("renders ChatInputTextField with textarea utilities", () => { diff --git a/src/app/chat/components/chat-header.tsx b/src/app/chat/components/chat-header.tsx index 9fafefcd..f3a84d92 100644 --- a/src/app/chat/components/chat-header.tsx +++ b/src/app/chat/components/chat-header.tsx @@ -8,6 +8,7 @@ import type { ReactNode } from "react"; import { Lock, Menu } from "lucide-react"; +import { BackButton } from "@/app/_components"; import { ROUTES } from "@/router/routes"; import { useAppNavigator } from "@/router/use-app-navigator"; @@ -19,9 +20,9 @@ export interface ChatHeaderProps { export function ChatHeader({ isGuest, offerBanner }: ChatHeaderProps) { const navigator = useAppNavigator(); - if (isGuest) { - return ( -
+ return ( +
+ {isGuest ? ( -
- ); - } + ) : ( + offerBanner + )} - return ( -
- {offerBanner} - -
- {/* 菜单按钮(点击 → push 到 /sidebar,与 Dart MenuButton 一致) */} - -
+ + + + ) : null}
); }