From 556d23ade5e07f19a4b2ca8236dd3c359e344a6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=91=A3=E5=AE=8F=E5=87=AF?= Date: Wed, 20 May 2026 17:13:59 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A0=B7=E5=BC=8F=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/components/workspace/input-box.tsx | 34 ++++++---- .../components/workspace/recent-chat-list.tsx | 18 +++-- .../workspace/workspace-nav-chat-list.tsx | 37 +++++++--- frontend-web/src/pages/ChatPage.tsx | 68 +++++++++++-------- frontend-web/src/styles/globals.css | 59 ++++++++++++++++ 5 files changed, 160 insertions(+), 56 deletions(-) diff --git a/frontend-web/src/components/workspace/input-box.tsx b/frontend-web/src/components/workspace/input-box.tsx index d23ada46..1c59aa79 100644 --- a/frontend-web/src/components/workspace/input-box.tsx +++ b/frontend-web/src/components/workspace/input-box.tsx @@ -516,7 +516,12 @@ export function InputBox({ )} - + {/* TODO: Add more connectors here @@ -550,7 +556,7 @@ export function InputBox({ /> */} - + @@ -582,7 +588,7 @@ export function InputBox({ : "flash" } > - +
{context.mode === "flash" && } {context.mode === "thinking" && ( @@ -744,7 +750,7 @@ export function InputBox({ {supportReasoningEffort && context.mode !== "flash" && ( - +
{t.inputBox.reasoningEffort}: {context.reasoning_effort === "minimal" && @@ -875,15 +881,15 @@ export function InputBox({ className={cn( "rounded-full border px-3 shadow-none transition-colors", promptPrefix.on - ? "border-[#d6a868] bg-[#fff3df] text-[#7a5417] hover:bg-[#ffe8c4]" - : "border-[#eee3d5] bg-[#fffaf5] text-[#8a7558] hover:bg-white", + ? "border-amber-300 bg-amber-50 text-amber-700 hover:bg-amber-100 dark:border-amber-700 dark:bg-amber-950/40 dark:text-amber-200" + : "border-border bg-muted/50 text-muted-foreground hover:bg-muted hover:text-foreground", )} > {promptPrefix.label} {promptPrefix.on && ( - + )} @@ -893,7 +899,7 @@ export function InputBox({ onOpenChange={setModelDialogOpen} > - +
{selectedModel?.display_name} @@ -927,7 +933,7 @@ export function InputBox({ {!isNewThread && ( -
+
)} diff --git a/frontend-web/src/components/workspace/recent-chat-list.tsx b/frontend-web/src/components/workspace/recent-chat-list.tsx index de78d861..b878eee4 100644 --- a/frontend-web/src/components/workspace/recent-chat-list.tsx +++ b/frontend-web/src/components/workspace/recent-chat-list.tsx @@ -158,15 +158,15 @@ export function RecentChatList() { } return ( <> - - + + {env.NEXT_PUBLIC_STATIC_WEBSITE_ONLY !== "true" ? t.sidebar.recentChats : t.sidebar.demoChats} -
+
{visibleThreads.map((thread) => { const isActive = pathOfThread(thread) === pathname; return ( @@ -174,9 +174,17 @@ export function RecentChatList() { key={thread.thread_id} className="group/side-menu-item" > - + {titleOfThread(thread)} diff --git a/frontend-web/src/components/workspace/workspace-nav-chat-list.tsx b/frontend-web/src/components/workspace/workspace-nav-chat-list.tsx index ba93871f..eaff53d7 100644 --- a/frontend-web/src/components/workspace/workspace-nav-chat-list.tsx +++ b/frontend-web/src/components/workspace/workspace-nav-chat-list.tsx @@ -15,26 +15,43 @@ import { useI18n } from "@/core/i18n/hooks"; // import { BotIcon, BrainIcon, ListChecks, MessageSquarePlus, MessagesSquare, SparklesIcon, UsersIcon } from "lucide-react"; import { BotIcon, BrainIcon, CalendarClock, ListChecks, MessageSquarePlus, MessagesSquare, SparklesIcon, UsersIcon } from "lucide-react"; +// 普通导航项:放大圆角到 xl、增加内边距,激活态用白底+柔阴影(参考 Gemini 风格的胶囊) +const NAV_ITEM_CLASS = + "text-sidebar-foreground/80 hover:text-sidebar-foreground rounded-xl h-9 px-3 transition-colors " + + "data-[active=true]:bg-white data-[active=true]:text-foreground data-[active=true]:shadow-[0_1px_2px_rgba(15,23,42,0.06),0_1px_3px_rgba(15,23,42,0.04)] " + + "dark:data-[active=true]:bg-slate-700/80 dark:data-[active=true]:text-slate-100 dark:data-[active=true]:shadow-none"; + +// 「新对话」专属:始终主色 chip,让它在导航里更显眼 +const NEW_CHAT_CLASS = + "rounded-xl h-9 px-3 bg-primary/10 text-primary hover:bg-primary/15 hover:text-primary " + + "data-[active=true]:bg-primary/15 data-[active=true]:text-primary data-[active=true]:shadow-none " + + "dark:bg-primary/15 dark:text-primary-foreground dark:hover:bg-primary/25 dark:data-[active=true]:bg-primary/25"; + export function WorkspaceNavChatList() { const { t } = useI18n(); const pathname = usePathname(); return ( - + - + {t.sidebar.newChat} - - + + {t.sidebar.chats} @@ -44,8 +61,9 @@ export function WorkspaceNavChatList() { - + {t.sidebar.agents} @@ -55,8 +73,9 @@ export function WorkspaceNavChatList() { - + 技能 @@ -66,8 +85,9 @@ export function WorkspaceNavChatList() { - + 记忆 @@ -77,8 +97,9 @@ export function WorkspaceNavChatList() { - + 任务管理 diff --git a/frontend-web/src/pages/ChatPage.tsx b/frontend-web/src/pages/ChatPage.tsx index ff0b85b5..a5a583b6 100644 --- a/frontend-web/src/pages/ChatPage.tsx +++ b/frontend-web/src/pages/ChatPage.tsx @@ -229,40 +229,50 @@ export default function ChatPage() { />
- {mounted ? ( - - } - disabled={ - env.NEXT_PUBLIC_STATIC_WEBSITE_ONLY === "true" || - isUploading - } - onContextChange={(context) => - setSettings("context", context) - } - promptPrefix={promptPrefixProp} - onFollowupsVisibilityChange={setShowFollowups} - onSubmit={handleSubmit} - onStop={handleStop} + {isLandingState && mounted && ( + + )} + {mounted ? ( +
+ + setSettings("context", context) + } + promptPrefix={promptPrefixProp} + onFollowupsVisibilityChange={setShowFollowups} + onSubmit={handleSubmit} + onStop={handleStop} + /> +
) : (