diff --git a/CHANGELOG.md b/CHANGELOG.md index c1f77e1..76a2168 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ + [修复] 画布多图切换主图时保持节点当前视觉尺度和中心位置,避免节点突然放大造成视口缩放错觉。 + [新增] 画布多图展开后支持单独重新生成或删除失败的图片槽位。 + [修复] 画布多图失败槽位重试时正确传递图片标识,避免触发未定义变量错误。 ++ [修复] 调整展开的多图节点尺寸时先收起子图并停止清理阶段的状态回写,避免 React 循环更新崩溃。 ## v0.14.0 - 2026-08-05 diff --git a/docs/content/docs/progress/pending-test.mdx b/docs/content/docs/progress/pending-test.mdx index 1c5d258..9f8e814 100644 --- a/docs/content/docs/progress/pending-test.mdx +++ b/docs/content/docs/progress/pending-test.mdx @@ -14,6 +14,7 @@ The current release needs manual verification in these areas: - Multi-image canvas generation: starting N images should immediately create one image node with N expandable slots and one incoming connection; each empty slot should independently show generating or failure while requests are running, every slot with image content should always display that image, and the first successful image should appear as the primary image immediately. The collapsed state should use a compact stack with at most three closely spaced backplates and a clearly legible count control; clicking the control should hide the floating toolbar and expand the slots upward and to the right. Every completed secondary image should keep a clearly legible primary-image action visible in both themes, and clicking the empty canvas should collapse the group. - Multi-image primary selection: choosing another primary image should preserve the node center and current maximum edge while adapting to the new image ratio; free-resize nodes should keep their exact dimensions, and the viewport zoom indicator must not change. - Failed multi-image slots: every failed slot, including the current primary slot, should expose retry and delete actions. Retry should update only that slot without replacing an existing successful primary image; delete should remove only that failed slot and update the displayed count. +- Multi-image resize: starting a resize while child images are expanded should collapse the group once, then resize the root node normally without triggering nested React updates or an application error. - Canvas Agent startup, MCP status, model and permission controls, approvals, version reporting, diagnostics, streaming responses, history consistency, multi-tab isolation, and local Skill management. - Agent header tabs in English and Chinese at different panel widths; labels should collapse to icons and counts before either edge is clipped. - Agent message layout, Markdown, code blocks, attachments, token statistics, progress timelines, command groups, and scroll-follow behavior. diff --git a/docs/content/docs/progress/pending-test.zh-CN.mdx b/docs/content/docs/progress/pending-test.zh-CN.mdx index ded34e0..75d9a37 100644 --- a/docs/content/docs/progress/pending-test.zh-CN.mdx +++ b/docs/content/docs/progress/pending-test.zh-CN.mdx @@ -51,6 +51,7 @@ description: 当前版本已实现但仍需人工验证的变更项 - 画布多图生成:开始生成 N 张图片后应立即创建一个包含 N 个可展开槽位的图片节点,并且来源到结果只保留一条连线;生成期间空槽位应独立显示生成中或失败,任何已有图片内容的槽位都必须始终显示图片,任意图片率先成功后应立即成为主图并展示,不等待其他请求完成;收起状态应最多显示三层紧密错开的背板,避免占用过多画布空间,右上角应显示醒目的「N 张」数量提示;点击数量后,浮动工具条应暂时隐藏,各图片槽位应从当前节点向右上方整齐展开;已成功图片的「设为主图」应常驻显示,并在亮色、深色主题及不同图片背景上保持清晰;点击画布空白处应自动收起并恢复工具条。 - 画布多图主图切换:点击「设为主图」后,节点中心和当前最长边应保持不变,仅按新图片比例调整另一条边;自由变形节点应完全保持现有宽高,画布视口及左下角缩放值不应变化。 - 画布多图失败槽位:包括当前主槽位在内的每个失败槽位都应显示「重试」和「删除」;重试只更新当前槽位,已有成功主图时不得抢占主图;删除只移除当前失败槽位并同步更新图片数量。 +- 画布多图尺寸调整:子图展开时开始拖动尺寸控制点,应先收起图片组一次,再正常调整根节点尺寸,不应触发 React 循环更新或应用错误页。 - 画布左侧元素列表:点击元素整行应平滑定位并选中对应节点,自动缩放不得超过 100%;有内容的图片元素应显示预览按钮,点击后打开大图弹窗且不触发画布定位。 - 配置与用户偏好:导出 JSON 后应包含渠道、默认模型、生成偏好、提示词来源和 WebDAV 配置;在修改当前配置后重新导入该文件,应恢复导出时的设置,错误 JSON 文件应提示格式不正确。配置文件包含 API Key 和 WebDAV 凭据,不应公开分享。 - 模型渠道协议:渠道编辑可选择「火山方舟」并自动填入方舟接口地址;任意名称的生图模型应按方舟 JSON 格式提交参考图,任意名称的视频模型应按方舟任务格式提交和查询,不再依赖模型名包含 `doubao`、`seedream` 或 `seedance`;1080p 不应再因模型名包含 `fast` 被禁用,参考视频应允许最大 200MB、总像素 409600-8295044,并继续校验官方宽高、比例和时长限制。 diff --git a/web/src/components/canvas/canvas-node.tsx b/web/src/components/canvas/canvas-node.tsx index 1a13f82..9b92e17 100644 --- a/web/src/components/canvas/canvas-node.tsx +++ b/web/src/components/canvas/canvas-node.tsx @@ -288,9 +288,8 @@ export const CanvasNode = React.memo(function CanvasNode({ return () => { window.removeEventListener("mousemove", handleResizeMove); window.removeEventListener("mouseup", handleResizeUp); - if (resizeRef.current.isResizing) onResizeEnd(data.id); }; - }, [data.id, handleResizeMove, handleResizeUp, onResizeEnd]); + }, [handleResizeMove, handleResizeUp]); return (