# 更新记录 > README 里移出的版本说明,最新在最上面的版本之后按时间排列。 ## 0.2.0 — 2026-10-16 界面改版:对齐豆包「无限画布」的极简风格——画布占满整块面板, 只留右下角一排图标工具 + 缩放百分比;改图参数与标记列表改成按需弹出的底部浮层; 节点的锁定/删除改成选中后在图片上方浮出(见下面「界面」一节)。 ## 0.2.1 — 2026-10-16 按实测反馈修三处:① **选择**与**拖动**拆成两个工具(箭头 / 手), 选择工具下**左键拖动 = 拉框多选**(Shift 加选减选,多选整组一起拖、一次删除); ② 批注工具(标记/框选/涂抹)激活时**图片不再吃指针事件**,鼠标不会在图上变成"移动"光标—— 之前那样会让人以为工具没生效;③ 画布上的标记改成**编号徽标 + 虚线引线 + 落点圆点**的批注样式 (原来那个圆角针看着像地图导航针)。 ## 0.2.2 — 2026-10-16 工具条改成豆包那种"悬停展开的分组",并补上右键菜单: ① 右下角不再摊开 8 个图标,改成 **5 个**——**指针组**(选择 / 拖动)与**批注组**(标记 / 框选 / 涂抹) 各占一个按钮,按钮上显示"当前生效的那个成员",悬停(或点击)向上展开小浮层挑成员; ② 画布和图片上**右键都有自己的菜单**(以前右键什么也不出现,而工具条上还会漏出浏览器原生菜单)。 ## 0.2.3 — 2026-10-16 右键菜单按豆包的清单对齐,并做成真的画布剪贴板: ① **图片 / 框选多张**右键 = **复制 · 粘贴 · 剪切 · 删除**(多选时按张数说话:"复制这 4 张"), 下面再挂我们的补充项(改这张图 / 同目录铺开 / 隐藏 / 锁定); ② **画布空白**右键 = **粘贴** 打头(跟豆包一致),其余是 全选 / 适应视图 / 导出 PNG / 清空画布; ③ 剪贴板是画布内置的:复制/剪切存节点快照,粘贴会重新发 id 并整体偏移 32px(连贴会级联错开), 贴完自动选中新贴的那些;快捷键 **Ctrl+C / Ctrl+X / Ctrl+V** 同效。 ## 0.2.4 — 2026-10-16 选中图片后的操作条按豆包左键那份清单重排: 豆包左键点单张图 = 编辑 / 引用生图 / 分图层 / 去背景 / 消除,框选多张 = 引用生图 / 智能对齐。 我们把**能真做到的先做上**:单张 = **编辑**(切到标记工具、在这张图上标注)/ **引用生成**(打开改图浮层、 以这张为源图)/ 锁定 / **消除**;多张 = **引用生成**(置灰)/ **智能对齐** / 消除。 **智能对齐是真做的**:顶边对齐到同一 y、按当前左右顺序排成一行、间距统一 24px(`Shift+A` 同效)。 豆包那三项**依赖模型的还没做**(去背景要 rembg 模型、分图层要分割模型、扩图要加一条 outpainting 工作流)—— 不摆不能点的假按钮,见「已知限制」。 ## 0.2.5 — 2026-10-16 修"悬停菜单太灵敏、还没选就没了":分组浮层原来离按钮有 7px 空隙, 鼠标从按钮移向卡片时穿过空隙 → `mouseleave` 立刻触发 → 浮层消失。三处一起改: ① 外层加一条**透明"桥"**(`padding-bottom` 盖住空隙,鼠标全程都在浮层容器里); ② 离开后**延迟 260ms** 才收(给手一点时间); ③ **点开的浮层会被钉住**——移开鼠标也不收,再点一下 / 选一项 / `Esc` / 点画布才收。 顺带:浮层在工具条挪到右上角(改图浮层打开时)**改朝下展开**,不会被面板上沿裁掉。 ## 0.2.6 — 2026-10-16 选中工具条改成"挂整组上方居中":原来它挂在**最后点的那张图**上, 选两张时那框就在两张之间来回跳。现在按**整个选中区的包围盒**算位置: 选一张 = 那张图上方居中;选两张 = 两张中间上方;选很多张 = 整组中间上方(跟豆包一样,不再跳)。 整组贴着画布上沿时,工具条自动翻到内侧。 ## 0.2.7 — 2026-10-16 两处按反馈收尾: ① 工具条里的「N 张」原来没有自己的盒子,文字在行内被顶到上边、跟图标不齐 —— 现在给它和图标同一套盒子 (`display:inline-flex` + `height:26px` + `line-height:1`),实测墨迹中心 43.5px vs 图标 44px(差 ≤1px); ② **「隐藏」功能整条去掉**(用户反馈"没什么用"):选中工具条上没有它了,右键菜单里也一并去掉 (文档里老的 `hidden` 字段仍兼容——标了 hidden 的图照旧不渲染)。 ## 0.2.8 — 2026-10-16 拖动加磁吸 + 对齐参考线(对齐豆包):拖图时把这一组的 **左边/中线/右边、上边/中线/下边**与**别的图的同名边线、以及视口中心**比对, 差在**屏幕 7px** 以内就吸过去,并在吸住的位置画 1px 参考线(线宽按 1/k 反向缩放,任何缩放都是细线)。 多选整组拖动时按整组包围盒吸附;**按住 `Alt` 拖动 = 临时关掉磁吸**(要精确定位时用)。 ## 0.2.9 — 2026-10-16 缩放手柄补齐 + 旋转点挪到右上角(用户反馈"只能拖两个点会比较麻烦"): ① 单张图的四周现在是 **8 个手柄**——4 个角 + 4 条边中点,往哪个方向都能拉; 拖角**默认等比**(按住 `Shift` 放开比例,宽高各自跟手),拖边只改一个方向,对边/对角**钉住不动**; ② **旋转点挪到右上角外侧**(豆包那个位置),做成圆形箭头图标 + 自定义 SVG 旋转光标(鼠标移上去就是旋转图标), 原来它挂在正上方中间;③ 手柄按 `1/k` 反向缩放,缩放画布时始终 11px 恒定大小。 ## 0.3.0 — 2026-10-16 旋转图标重画 + 工具条加「回正」「原尺寸」: ① 旋转光标从 28px 高饱和蓝改成 **24px 细线近黑**(白色描边打底、热点居中,任何背景都看得清); ② 选中工具条上新增 **回正**(U Turn 图标,角度归 0)和 **原尺寸**(还原成图片的原始像素尺寸——用加载时量到的 `naturalWidth/Height`);③ 两个按钮按状态自己置灰:已经正了 / 已经是原尺寸时点不动,不会让人以为没反应。 ## 0.3.1 — 2026-10-16 修三处"光标和位置对不上"(用户反馈"还没到位就能调大小、过去了还是手掌"): ① **旋转点的偏移量也乘 `1/k`**——原来偏移写在节点坐标系里,缩小画布时它会往右上角缩放手柄上贴 (实测 55% 缩放下两者只差 13px,鼠标在中间来回跳光标),现在屏幕上恒定在角外 ~23px / 上 ~27px; ② 旋转光标**兜底从 `grab` 改成 `default`**——万一自定义 SVG 光标没生效,最差也只是箭头,绝不会变成手掌; ③ **缩放手柄/旋转点只在「选择」工具下出现**:标记/框选/涂抹/拖动时图片不吃指针事件,手柄画出来点不动、 光标还是画布的手掌,纯属误导(旋转点 `z-index` 也提到手柄之上)。 ## 0.3.2 — 2026-10-16 智能对齐改成排"矩形图片墙"(用户反馈"不要全弄成横排,要像画布那样的长方形"): 不再是一条长横排——按当前左右顺序装进**统一大小的格子**(格子里居中)、间距统一 24px、 **列数自动选**(1~N 列全试一遍,取整块长宽比最接近 **1.5:1** 的那个,用对数比所以宽窄偏差对称), 最后一行不足时**居中**。2~3 张仍然是一排(这么少时一排本来就好看),4 张以上才成块; 结果提示写明"已排成 4×2 的方块"。 ## 0.3.3 — 2026-10-16 「回正」换成 U Turn 图标(用户点名要 U 形回转箭头): 原来是左右双向箭头 ↔(容易被读成"水平居中"),现在换成 **U 形回转箭头**—— 两条腿 + 顶上 180° 弯 + 左腿末端的下箭头,24 网格里描边 1.8px,缩到 16px 也认得出。 ## 0.3.4 — 2026-10-16 手掌光标收敛(用户反馈"这个手掌不能改成默认鼠标的样子吗?在切换成拖动再变成手掌"): 根因是 `.icv-stage` 的 CSS 默认光标写死了 `cursor:grab` —— **选择模式下整块画布都是手掌**。 现在:选择模式 = **默认箭头**、批注工具 = 十字、**只有「拖动」工具是手掌**(拿起 `grab` / 按住拖 `grabbing`); 按钮、菜单、成员浮层的 `cursor:pointer` 也一并改成 `default`(整个插件除了"拖动",不再出现手掌)。 ## 0.3.5 — 2026-10-16 滚轮监听改成非 passive:React 把 `wheel` 挂成 passive,在里面 `preventDefault()` 会被忽略、并刷一屏 `Unable to preventDefault inside passive event listener invocation` (2026-10-16 崩溃日志里那 250 行就是它——**它本身无害,只是噪音**)。 改成在 `useEffect` 里对 stage 元素 `addEventListener('wheel', h, { passive: false })` 原生挂。 ## 0.3.6 — 2026-10-16 右键菜单出现在鼠标处(用户反馈"那个框总是出现在最左边"): 原来把**视口坐标** `clientX/clientY` 直接当成**面板内坐标**用,又被夹到 `panelWidth - 196`, 于是不管点哪儿菜单都落在同一个偏左的位置。现在先减掉面板自身的 `left/top` 换算成面板内坐标, 右边/下面放不下时**像系统菜单一样往左、往上翻**,始终贴着鼠标。 ## 0.4.0 — 2026-10-17 面板外右键图片 →「放入无限画布」(用户需求:聊天里的图现在只能左键放大): 在**画布面板以外**的任何内容图(≥120px)上右键,会弹我们自己的小菜单: **放入无限画布**(直接进当前会话的画布文档,大图按 520 宽封顶)/ **复制图片地址**。 地址是 `dsh-resource://file/...` 就按资源节点存;其它(`data:` / `blob:` / `http`)存成节点的 `url`。 插完广播 `dsh-image-canvas:reload`,已打开的画布页会自己重读文档;面板内部右键仍然是面板自己的菜单。 实现挂在 `document` 上(capture),**HMR 安全**:每次 `apply` 先撤旧的再挂新的,不会叠出多份菜单。