feat: rich input for assistant chat — paste, drag-drop, attach, logs

Upgraded AssistantChatPage input from basic textarea to ChatGPT-style:
- Paste images (Ctrl+V) with thumbnail previews
- Drag-and-drop files with drop zone overlay
- Attach button for images, logs, docs, PDFs
- Expandable "Paste Logs" section for raw error output
- Conclude session button moved into toolbar row
- Auto-growing textarea
- Replaced all glass-border dividers with border-border/border-default

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-23 13:28:19 +00:00
parent 73c529d6f3
commit 72678e7f26
2 changed files with 189 additions and 33 deletions

View File

@@ -49,10 +49,10 @@ export function ChatSidebar({
'transition-transform duration-200',
mobileOpen ? 'translate-x-0' : '-translate-x-full sm:translate-x-0',
)}
style={{ borderColor: 'var(--glass-border)', background: 'var(--color-bg-sidebar)' }}
style={{ background: 'var(--color-bg-sidebar)' }}
>
{/* Header */}
<div className="px-4 py-3 border-b shrink-0" style={{ borderColor: 'var(--glass-border)' }}>
<div className="px-4 py-3 border-b shrink-0" style={{ borderColor: 'var(--color-border-default)' }}>
<button
onClick={handleNewChat}
className="w-full flex items-center justify-center gap-2 bg-primary text-white font-semibold text-sm rounded-lg px-4 py-2.5 hover:brightness-110 active:scale-[0.98] transition-all"
@@ -83,7 +83,7 @@ export function ChatSidebar({
))}
{pinnedChats.length > 0 && unpinnedChats.length > 0 && (
<div className="mx-3 my-2 border-b" style={{ borderColor: 'var(--glass-border)' }} />
<div className="mx-3 my-2 border-b" style={{ borderColor: 'var(--color-border-default)' }} />
)}
{unpinnedChats.map(chat => (