Files
mnote/design/05-editor-mainline/done/5-25-editor-tab-keyboard-and-mru-checklist-v1.md
T
lix-2026 1956a8a21a chore: align mvp design governance
- 统一 local-first MVP 后阶段架构口径,补充 process 执行总序和 Reasonix 协作记录

- 归档已完成的 design checklist,标注参考型 process,更新 AGENTS/REASONIX/架构文档

- 补充文件树/主编辑器下载与上下文菜单相关实现、bug 记录和 smoke 脚本

验证:git diff --check;codegraph sync .;cargo test -p mnote-web;node --check scripts/task476-filetree-editor-context-menu-download-smoke.js
2026-05-21 09:04:13 +08:00

2.8 KiB
Raw Blame History

5-25 Editor Tab Keyboard and MRU Checklist v1

状态:done

归档说明(2026-05-21):editor tab keyboard 与 MRU 行为已完成。

日期:2026-05-21

Ownermain editor tab keyboard / MRU behavior

1. 目标

参考 Sidex / VSCode MultiEditorTabsControl,补 MNote main tab 的基础键盘和 MRU 行为。当前只做轻量交互,不照搬完整 tab control。

2. 允许修改范围

  • rust/crates/mnote-web/src/routes/web_shell.rs
  • rust/crates/mnote-web/src/ssr/styles.rs
  • 可新增聚焦 smoke

3. 禁止事项

  • 不新增全局快捷键与浏览器默认冲突。
  • 不实现完整 tab overflow 复杂布局。
  • 不改变 resource tab identity。

4. Checklist

  • tab strip 支持左右箭头 roving focus。
  • Enter / Space 激活当前 focused tab。
  • 关闭 active resource tab 后回到 MRU 或 page tab,行为稳定。
  • tab 上保留可测试 DOM 状态。
  • 补测试或 smoke。

5. 验收

  • cargo test -p mnote-web web_shell -- --test-threads=1
  • 如新增 smokenode scripts/task47*-editor-tab-keyboard-*.js

6. 执行记录

引用 proposal.codex/reasonix-proposals/2026-05-21-tab-keyboard-mru-proposal.md

已确认

  • resourceTabMru 数组 + touchResourceTabMru / lastActiveResourceTabKey / removeFromResourceTabMru 逻辑完整,MRU 核心逻辑无需改动。
  • activateMainEditorTab 已正确维护 roving tabindexactive → tabindex="0", others → tabindex="-1")。
  • createResourceTabDom 中 resource tab 初始 tabindex="-1" 符合预期。

已实现

  • 新增 bindMainEditorTabStrip() 函数(keydown 事件委托 + collectTabs + 箭头/Home/End/Enter/Space)。
  • 修改 closeResourceTab() 末尾,关闭后 focus 迁移到新激活的 tab。
  • styles.rs 补充 :focus-visible 样式。
  • 更新 Rust contract test 断言。
  • cargo test -p mnote-web web_shell -- --test-threads=1 通过。

后续可选

  • 如后续需要浏览器级回归,可新增 scripts/task475-editor-tab-keyboard-mru-smoke.js,覆盖多 tab 键盘切换与关闭后 focus。

非预期发现

  • closeResourceTab 在 activate 后未显式调用 focus(),导致 keyboard focus 丢失。需修复。
  • tab strip 无 :focus-visible 样式,键盘用户在箭头导航后看不到 focus 环。

Codex 实施记录

  • 2026-05-21Reasonix Worker B 按要求只输出 proposal,未直接改源码。
  • 2026-05-21Codex 按 proposal 的最小安全集实现键盘 roving focus、Enter/Space 激活、关闭后 MRU/page tab focus 迁移。
  • 2026-05-21:未新增全局快捷键;事件只绑定在 [data-mnote-main-tab-strip] 内。

7. 非目标

  • 不做拖拽 tab 排序。
  • 不做 close others / close saved 复杂菜单。