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 ( + + ); +}