From ac0c804da8fa8f19688c5742ef3244afb961eb4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BE=B7=E5=AE=87?= Date: Mon, 20 Jul 2026 17:02:24 +0800 Subject: [PATCH 01/13] right click copy/dowload option --- .../【编辑器】画布Agent对话面板-2026-07-03.md | 6 +- .../AttachmentChip.tsx | 19 +- .../MessageBubble.test.tsx | 179 ++++++++++++++- .../EditorAgentConversation/MessageBubble.tsx | 138 +++++++----- .../MessageBubbleRightClickMenu.tsx | 194 ++++++++++++++++ .../EditorAgentConversation/ToolCallView.tsx | 39 ++++ .../EditorAgentConversation/common.ts | 24 ++ .../useRightClickMenu.ts | 208 ++++++++++++++++++ 8 files changed, 753 insertions(+), 54 deletions(-) create mode 100644 src/components/image-editor/EditorAgentConversation/MessageBubbleRightClickMenu.tsx create mode 100644 src/components/image-editor/EditorAgentConversation/useRightClickMenu.ts diff --git a/docs/【编辑器】画布Agent对话面板-2026-07-03.md b/docs/【编辑器】画布Agent对话面板-2026-07-03.md index bbb9f3286..3f3262153 100644 --- a/docs/【编辑器】画布Agent对话面板-2026-07-03.md +++ b/docs/【编辑器】画布Agent对话面板-2026-07-03.md @@ -1,6 +1,6 @@ # 画布Agent对话面板 -日期:`2026-07-16` +日期:`2026-07-20` ## 定位与边界 @@ -114,11 +114,12 @@ 5. 生成中的进行中动画; 6. 错误气泡(失败/余额不足,带原因); 7. 普通消息请求等待期间禁用发送按钮,不提供客户端停止操作;前端持续等待后端响应,避免后端已持久化消息但前端中断请求后产生会话状态错位。 +8. 桌面端右键消息正文可复制该条可见文本;右键消息附件或生成结果可下载素材,图片额外支持复制图片本体。右键动作由消息气泡的 `useRightClickMenu` 内部执行,不向上层暴露消息文本、素材地址或私有对象键。 不做(明确排除,防止后人补齐): - 点赞/点踩反馈按钮; -- 消息复制、分享/导出对话; +- 分享/导出整段对话; - Agent 模式切换下拉(固定单一 Agent); - 语音输入、@引用、多 Agent 协作; - Lovart 的积分/加速档位显示(泥点扣费只在生成动作上体现)。 @@ -156,3 +157,4 @@ - 发送消息时先本地追加用户消息,再应用 JSON 响应中的 `deltaMessages`;请求等待期间发送按钮保持禁用,前端不主动中断当前回合。 - Agent 消息内生成结果缩略图只用于预览,不显示名称,也不点击跳转图层;轮询到任务终态并完成会话懒回填后统一刷新工程快照和素材库。 - 对话内容可被用户选中复制;用户从输入框或对话内容点击回画布图层 / 生成器时,焦点应回到画布对象,Backspace / Delete 等画布快捷键继续生效。 +- 对话正文右键菜单只复制当前气泡展示的完整文本,隐藏的内部 system 文本不得进入菜单;素材右键菜单优先于正文菜单,私有素材继续通过既有读取链路换签或代理下载,不复制会过期的临时链接。 diff --git a/src/components/image-editor/EditorAgentConversation/AttachmentChip.tsx b/src/components/image-editor/EditorAgentConversation/AttachmentChip.tsx index 81b327f57..b5596b7a5 100644 --- a/src/components/image-editor/EditorAgentConversation/AttachmentChip.tsx +++ b/src/components/image-editor/EditorAgentConversation/AttachmentChip.tsx @@ -3,16 +3,33 @@ import { Image as ImageIcon, X } from 'lucide-react'; import type { EditorAgentAttachmentRef } from '@/packages/shared/src/contracts'; import { ResolvedAssetImage } from '@/src/components/ResolvedAssetImage.tsx'; +import type { RightClickMenuHandler } from './common.ts'; + function AttachmentChip({ attachment, onRemove, + onRightClickMenu, }: { attachment: EditorAgentAttachmentRef; onRemove?: () => void; + onRightClickMenu?: RightClickMenuHandler; }) { const label = attachment.label?.trim() || attachment.referenceId; return ( - + + onRightClickMenu(event, { + mediaType: 'image', + source: attachment.imageSrc, + objectKey: attachment.objectKey, + suggestedFileName: label, + }) + : undefined + } + >