From 34043de685aeec1c015c513263499bbf21175e9d Mon Sep 17 00:00:00 2001 From: iven Date: Fri, 10 Apr 2026 12:03:29 +0800 Subject: [PATCH] fix(ui): panel toggle in header bar + message spacing - Move side panel toggle from floating button to chat header right side (Trae Solo style) via new PanelToggleButton component - Add px-6 py-4 padding to message list container - Add mb-5 gap between messages for readable vertical spacing --- desktop/src/components/ChatArea.tsx | 12 ++++- .../src/components/ai/ResizableChatLayout.tsx | 47 ++++++++++++------- 2 files changed, 41 insertions(+), 18 deletions(-) diff --git a/desktop/src/components/ChatArea.tsx b/desktop/src/components/ChatArea.tsx index 8002256..703ed69 100644 --- a/desktop/src/components/ChatArea.tsx +++ b/desktop/src/components/ChatArea.tsx @@ -12,7 +12,7 @@ import { type UnlistenFn } from '@tauri-apps/api/event'; import { safeListenEvent } from '../lib/safe-tauri'; import { Paperclip, ArrowUp, MessageSquare, Download, X, FileText, Image as ImageIcon, Search, ClipboardList, Square } from 'lucide-react'; import { Button, EmptyState, MessageListSkeleton, LoadingDots } from './ui'; -import { ResizableChatLayout } from './ai/ResizableChatLayout'; +import { ResizableChatLayout, PanelToggleButton } from './ai/ResizableChatLayout'; import { ArtifactPanel } from './ai/ArtifactPanel'; import { ToolCallChain, type ToolCallStep } from './ai/ToolCallChain'; import { TaskProgress, type Subtask } from './ai/TaskProgress'; @@ -361,6 +361,13 @@ export function ChatArea({ compact, onOpenDetail }: { compact?: boolean; onOpenD )} + {/* Side panel toggle — Trae Solo style, in header */} + {!compact && ( + setArtifactPanelOpen(!artifactPanelOpen)} + /> + )} {/* 详情按钮 (简洁模式) */} {compact && onOpenDetail && ( ); } @@ -87,15 +84,8 @@ export function ResizableChatLayout({ defaultSize={sizes.left} minSize="40%" > -
+
{chatPanel} -
@@ -134,3 +124,28 @@ export function ResizableChatLayout({
); } + +/** + * Toggle button for embedding in chat header. + * Renders PanelRightOpen/PanelRightClose icon — Trae Solo style. + */ +export function PanelToggleButton({ + panelOpen, + onToggle, +}: { + panelOpen: boolean; + onToggle: () => void; +}) { + return ( + + ); +}