diff --git a/src/components/settings/ProvidersSettings.tsx b/src/components/settings/ProvidersSettings.tsx index 40429b3d2..bf05fb9d0 100644 --- a/src/components/settings/ProvidersSettings.tsx +++ b/src/components/settings/ProvidersSettings.tsx @@ -319,7 +319,7 @@ function ProviderCard({ setFallbackModelsText(normalizeFallbackModels(account.fallbackModels).join('\n')); setFallbackProviderIds(normalizeFallbackProviderIds(account.fallbackAccountIds)); } - }, [isEditing, account.baseUrl, account.fallbackModels, account.fallbackAccountIds, account.model]); + }, [isEditing, account.baseUrl, account.fallbackModels, account.fallbackAccountIds, account.model, account.apiProtocol]); const fallbackOptions = allProviders.filter((candidate) => candidate.account.id !== account.id); @@ -408,8 +408,8 @@ function ProviderCard({ className={cn( "group flex flex-col p-4 rounded-2xl transition-all relative overflow-hidden", isDefault - ? "bg-white dark:bg-[#1a1a19] border border-blue-500/20 shadow-sm ring-1 ring-blue-500/20" - : "bg-black/5 dark:bg-white/5 border border-transparent" + ? "bg-white dark:bg-[#1a1a19] border border-black/10 dark:border-white/10 shadow-sm" + : "bg-transparent border border-black/10 dark:border-white/10" )} >
@@ -502,9 +502,9 @@ function ProviderCard({
{isEditing && ( -
+
{canEditModelConfig && ( -
+

{t('aiProviders.sections.model')}

{typeInfo?.showBaseUrl && (
@@ -551,7 +551,7 @@ function ProviderCard({ )}
)} -
+
)}
-
+
diff --git a/src/pages/Chat/ChatInput.tsx b/src/pages/Chat/ChatInput.tsx index 9d0f32245..f3b6d0155 100644 --- a/src/pages/Chat/ChatInput.tsx +++ b/src/pages/Chat/ChatInput.tsx @@ -353,7 +353,7 @@ export function ChatInput({ onSend, onStop, disabled = false, sending = false, i )} {/* Input Row */} -
+
{/* Attach Button */}
diff --git a/src/pages/Chat/ChatMessage.tsx b/src/pages/Chat/ChatMessage.tsx index da9b048a7..7a96a48f7 100644 --- a/src/pages/Chat/ChatMessage.tsx +++ b/src/pages/Chat/ChatMessage.tsx @@ -4,7 +4,7 @@ * with markdown, thinking sections, images, and tool cards. */ import { useState, useCallback, useEffect, memo } from 'react'; -import { User, Sparkles, Copy, Check, ChevronDown, ChevronRight, Wrench, FileText, Film, Music, FileArchive, File, X, FolderOpen, ZoomIn, Loader2, CheckCircle2, AlertCircle } from 'lucide-react'; +import { Sparkles, Copy, Check, ChevronDown, ChevronRight, Wrench, FileText, Film, Music, FileArchive, File, X, FolderOpen, ZoomIn, Loader2, CheckCircle2, AlertCircle } from 'lucide-react'; import ReactMarkdown from 'react-markdown'; import remarkGfm from 'remark-gfm'; import { createPortal } from 'react-dom'; @@ -71,16 +71,11 @@ export const ChatMessage = memo(function ChatMessage({ )} > {/* Avatar */} -
- {isUser ? : } -
+ {!isUser && ( +
+ +
+ )} {/* Content */}
@@ -209,7 +204,7 @@ export const ChatMessage = memo(function ChatMessage({ } if (isImage && !file.preview) { return ( -
+
); @@ -286,7 +281,7 @@ function ToolStatusBar({ {isError && } {tool.name} - {duration && {duration}} + {duration && {tool.summary ? `(${duration})` : duration}} {tool.summary && ( {tool.summary} )} @@ -342,8 +337,8 @@ function MessageBubble({ 'relative rounded-2xl px-4 py-3', !isUser && 'w-full', isUser - ? 'bg-primary text-primary-foreground' - : 'bg-muted', + ? 'bg-[#0a84ff] text-white shadow-sm' + : 'bg-black/5 dark:bg-white/5 text-foreground', )} > {isUser ? ( @@ -398,7 +393,7 @@ function ThinkingBlock({ content }: { content: string }) { const [expanded, setExpanded] = useState(false); return ( -
+