跳转至

暂存箱局部扫描与入口交互

历史记录 / Historical record:本文保留当时的计划、研究或验收证据,不代表 0.11 当前能力全集。现行说明见 文档入口;英文入口见 English overview。

最终要求:暂存箱按钮保持原样,只有长按内容时在按钮周围显示无边框的局部雷达扫描,表示可以接收。单击直接打开管理,不展示大雷达面板和已保存内容。

接收与取用

  • 120px 的透明扫描环围绕原按钮。中心留空,不遮按钮;没有背景面板、边框和已存内容。命中时换为成功色,松手结束后消失。
  • 扫描的亮头提前达到峰值,再渐隐到透明;普通态和绿色命中态使用同一连续渐变,不再在圆周接缝硬切。
  • 当前拖动物用清楚的图标和名称表示。成功存入时收进按钮,给 OH 时进入胶囊,接收处轻微回弹;取消或重复收纳返回来源。减少动态时完成同样操作,不播放位移。
  • 管理页向 OH 投递成功后关闭管理页,同次兼容点击不得穿透到背后的页面。普通取用仅打开或应用,保留箱内原记录;明确同步失败不播放取用反馈。
  • 白板按下会话一旦交给暂存箱,便清除临时位置并锁存转交状态;投递结束释放所有权后,也不能恢复这一次白板位移或落库。普通白板移动与缩放仍走原流程。
  • 内容拖动由全局指针监听持续追踪,捕获变化不等于取消,不再根据 buttons === 0 推断结束;显式 pointercancel、Escape、失焦和隐藏仍取消。新的按下可清理之前在 WebView 外丢失释放的会话。

入口点击和拖动

  • 用户要求直接复用原强制刷新按钮逻辑。首次共用抽取后,用户在原生 dev App 反馈两个都无法自由拖动,因此已将 Layout.tsx 逐字恢复到 HEAD 原版,不再修改正常的刷新按钮。
  • 暂存箱的 useFloatingButtonDrag 按原刷新按钮 down/move/up 流程实现。移除了首次抽取额外添加的 isPrimary、buttons === 0、失去捕获及窗口失焦取消判断;不能把浏览器测试成功当成这些额外判断在 WKWebView 里可用的证据。
  • 桌面和触屏都使用原生按钮 click;按住移动直接跟手,无长按计时、向内滑动打开、触摸补发点击或时间窗口抑制。
  • 沿用刷新按钮任一轴超过 3px 标记移动的规则;只忽略本次拖动释放产生的点击。下一次按下清除旧标记,避免 WebView 未发兼容 click 后吞下一次真正点击。键盘激活正常。
  • 每次 pointermove 同步更新可见位置和引用,松手保存最后的位置。pointercancel 沿用原刷新按钮的结束流程,保留当前位置;入口拖动不缩放、不弹跳。
  • 按下期间不重新计算入口位置,防止观察器在 down/up 之间搬走按钮。
  • 手动位置保存横纵比例,松手处即最终落点;页面内容变化不再强制吸边或跳转到其他空位。旧默认位置仍自动避让,用户可恢复默认位置。视口变化仅按比例映射并限制在屏内。

验收

  • 恢复原刷新按钮后的桌面点击/自由拖动对比:43 项通过,/tmp/onethu-floating-buttons-original-refresh/report.json。此前共用抽取版本的 77 项结果不能证明用户反馈已解决。
  • tools/vault-board-transfer-browser-test.mjs:28 项通过。真实首页时钟分别直接拖、长按投递、先微移 6px 再长按、绿色命中后主动释放实际 capture。普通拖动正常写入白板;三种投递均实际新增正确 boardId/itemId 的暂存条目,原组件视觉坐标和存档不变。测试期间相关源码哈希不变。
  • 内容拖动生命周期:58 项功能断言完成且无页面异常,但 Chrome 关闭超时导致进程退出 1,本轮不计完整套件通过。正向拾取已改为 2 秒内等待真实 active 状态,避免固定 460ms 采样早于实际计时回调;启动参数也补齐其他浏览器套使用的 --disable-updater-scheduler。
  • 类型检查、生产构建、OneGUI/对比度/CSS 护栏和白板数据/接线护栏通过。

用户实际环境为 macOS OneTHU dev 预览 App(Vite 5180),不是打包发行版。Chrome 的浏览器输入验收不等同于 Tauri WebKit 原生窗口验收;本次原生窗口捕获返回 SCStreamErrorDomain -3811,不能据浏览器通过就宣称 App 手感已确认。