优化画布对话预览图样式与图片消息气泡
This commit is contained in:
parent
ac45e3fee9
commit
db8893b799
@ -1423,6 +1423,19 @@ export function CanvasChatPanel({ chatId, initialMessages = [], onClose, onOpenF
|
|||||||
|
|
||||||
// 使用清理后的消息
|
// 使用清理后的消息
|
||||||
const cleanedMessage = { ...message, parts: cleanedParts };
|
const cleanedMessage = { ...message, parts: cleanedParts };
|
||||||
|
const assistantTextParts = message.role === "assistant"
|
||||||
|
? cleanedParts.filter((part: any) => part.type === "text" && part.text)
|
||||||
|
: [];
|
||||||
|
const hasAssistantImages = assistantTextParts.some((part: any) =>
|
||||||
|
extractImageUrls(part.text || "").length > 0
|
||||||
|
);
|
||||||
|
const hasAssistantText = assistantTextParts.some((part: any) => {
|
||||||
|
const textWithoutImages = (part.text || "")
|
||||||
|
.replace(/!\[(?:thumb)?\|\|\|[^|]+\|\|\|[^\]]*\]\([^)]+\)/g, "")
|
||||||
|
.trim();
|
||||||
|
return textWithoutImages.length > 0;
|
||||||
|
});
|
||||||
|
const isImageOnlyAssistant = message.role === "assistant" && hasAssistantImages && !hasAssistantText;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
@ -1508,7 +1521,14 @@ export function CanvasChatPanel({ chatId, initialMessages = [], onClose, onOpenF
|
|||||||
</div>
|
</div>
|
||||||
) : (
|
) : (
|
||||||
// AI 消息:保持原样式
|
// AI 消息:保持原样式
|
||||||
<div className="bg-card border text-card-foreground rounded-2xl rounded-tl-sm text-sm px-4 py-2.5 shadow-sm">
|
<div
|
||||||
|
className={cn(
|
||||||
|
"text-card-foreground text-sm",
|
||||||
|
isImageOnlyAssistant
|
||||||
|
? "bg-transparent border-0 rounded-none px-0 py-0 shadow-none"
|
||||||
|
: "bg-card border rounded-2xl rounded-tl-sm px-4 py-2.5 shadow-sm"
|
||||||
|
)}
|
||||||
|
>
|
||||||
{/* 消息内容 */}
|
{/* 消息内容 */}
|
||||||
<div className="whitespace-pre-wrap break-words leading-relaxed">
|
<div className="whitespace-pre-wrap break-words leading-relaxed">
|
||||||
{cleanedMessage.parts?.map((part: any, i: number) => {
|
{cleanedMessage.parts?.map((part: any, i: number) => {
|
||||||
@ -1523,14 +1543,21 @@ export function CanvasChatPanel({ chatId, initialMessages = [], onClose, onOpenF
|
|||||||
<div key={i}>
|
<div key={i}>
|
||||||
{textWithoutImages && <span>{textWithoutImages}</span>}
|
{textWithoutImages && <span>{textWithoutImages}</span>}
|
||||||
{imageUrls.length > 0 && (
|
{imageUrls.length > 0 && (
|
||||||
<div className="flex flex-wrap gap-2 mt-3">
|
<div className={cn("flex flex-wrap gap-2", textWithoutImages ? "mt-3" : "mt-0")}>
|
||||||
{imageUrls.map((url, idx) => (
|
{imageUrls.map((url, idx) => (
|
||||||
<div key={idx} className="relative group rounded-xl overflow-hidden border bg-background shadow-sm transition-all hover:shadow-md">
|
<div
|
||||||
|
key={idx}
|
||||||
|
className={cn(
|
||||||
|
"relative group overflow-hidden border transition-all",
|
||||||
|
"rounded-2xl border-black/5 dark:border-white/10 bg-white/70 dark:bg-zinc-900/50",
|
||||||
|
"shadow-[0_8px_24px_-16px_rgba(15,23,42,0.45)] hover:shadow-[0_12px_28px_-14px_rgba(15,23,42,0.5)]"
|
||||||
|
)}
|
||||||
|
>
|
||||||
<img
|
<img
|
||||||
src={url}
|
src={url}
|
||||||
alt=""
|
alt=""
|
||||||
className="max-w-full h-auto cursor-zoom-in hover:scale-105 transition-transform duration-300"
|
className="block max-w-full h-auto cursor-zoom-in transition-transform duration-300 group-hover:scale-[1.02]"
|
||||||
style={{ maxHeight: '200px' }}
|
style={{ maxHeight: "260px" }}
|
||||||
onClick={() => setFullscreenPreview({ url })}
|
onClick={() => setFullscreenPreview({ url })}
|
||||||
onDoubleClick={(e) => {
|
onDoubleClick={(e) => {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user