Checkpoint current workspace
This commit is contained in:
@@ -129,6 +129,7 @@ GREEN:
|
||||
|
||||
## 4. Phase A:基线和全局 token
|
||||
|
||||
|
||||
| ID | 状态 | 任务 | 验收要点 |
|
||||
| --- | --- | --- | --- |
|
||||
| A1 | GREEN | 固定基线视口与截图目录 | `task129` 已支持 `WOLAI_ALINE_VIEWPORTS`;主线程已生成 `1392x1213`、`1440x900`、`390x844` 三组截图;subagent 已复测默认视口 |
|
||||
@@ -140,6 +141,7 @@ GREEN:
|
||||
|
||||
## 5. Phase B:Sidebar / 页面树
|
||||
|
||||
|
||||
| ID | 状态 | 任务 | 验收要点 |
|
||||
| --- | --- | --- | --- |
|
||||
| B1 | PARITY | 侧栏宽度与背景 | `task131` 覆盖宽 `248px`、背景 `rgb(245,245,245)`、无右侧 inset、topbar.x=sidebar.right;subagent post-fix2 复核通过 |
|
||||
@@ -206,6 +208,7 @@ RED / GREEN:
|
||||
|
||||
## 6. Phase C:顶栏、breadcrumb、搜索
|
||||
|
||||
|
||||
| ID | 状态 | 任务 | 验收要点 |
|
||||
| --- | --- | --- | --- |
|
||||
| C1 | PARITY | 顶栏高度与按钮密度 | `task135` 覆盖顶栏约 40px、右侧按钮组无搜索入口、icon 不再渲染成黑色方块;`task119` 复核 topbarHeight=40 |
|
||||
@@ -264,6 +267,7 @@ GREEN:
|
||||
|
||||
## 7. Phase D:文档画布与阅读态
|
||||
|
||||
|
||||
| ID | 状态 | 任务 | 验收要点 |
|
||||
| --- | --- | --- | --- |
|
||||
| D1 | PARITY | 主内容列宽 | `task136` 覆盖普通文档主列 `760px`,大屏居中不贴左;移动端沿既有 media query 保持不溢出 |
|
||||
@@ -322,6 +326,7 @@ GREEN:
|
||||
|
||||
## 8. Phase E:主编辑器块交互
|
||||
|
||||
|
||||
| ID | 状态 | 任务 | 验收要点 |
|
||||
| --- | --- | --- | --- |
|
||||
| E0 | DONE | editable-test 焦点护栏 | Wolai Hermes editable-test 与本地 smoke 均断言写入前焦点在正文测试块,不在标题、breadcrumb 或隐藏输入 |
|
||||
@@ -361,35 +366,59 @@ GREEN:
|
||||
- `tiptap-notion-like-registry` / `tiptap-notion-like-template` 包含 197 个 registry 组件,核心能力不是单个菜单,而是 `DragContextMenu`、`SlashDropdownMenu`、`NotionToolbarFloating`、AI、颜色、链接、表格、图片、TOC、缩进、节点背景、节点对齐、emoji、mention、协作和移动端 toolbar 的组合。
|
||||
- `leptos-tiptap` 当前已支持 `starter-kit` 与 `full`:blockquote、bold、bullet/ordered/task list、code/codeBlock、heading、history、horizontalRule、italic、strike、text-align、highlight、image、link、placeholder、youtube;未直接覆盖表格、数学、emoji、mention、TOC、AI、collaboration caret、节点背景、节点对齐、缩进和 UniqueID。
|
||||
- Phase E 后续实施按 Wolai 基线优先级拆小任务;参考 Tiptap 能力先进入 checklist,不直接视为 mnote 必须一次性照搬。
|
||||
- E11-E31 统一改为“参考 Tiptap 来 aline mnote”:每个任务先定位 `tiptap-notion-like-registry` / `tiptap-notion-like-template` 的组件、hook、extension 或 `leptos-tiptap` bridge 命令,再对照 Wolai 实测决定 mnote 的最小实现。不得绕过已有 Tiptap 参考自行造一套同类 UI 或命令。
|
||||
- 旧 E16 / E24 / E28 中分散的颜色、背景色、link popover、floating toolbar 能力已合并为 E15-E17 的统一能力包;后续实现颜色相关功能时优先参考 `ColorMenu`、`NodeBackground`、`highlight` / `link` bridge,不再分别在 selection toolbar、drag menu、floating toolbar 中重复造轮子。
|
||||
|
||||
### Phase E Tiptap 参考优先 backlog
|
||||
|
||||
执行规则:E11-E31 中任何一项进入实现前,必须先在任务记录中写出参考路径、可复用代码点、mnote 真源落点和 Wolai-aline smoke 断言。若参考实现不适合直接复用,需要说明不复用的原因。
|
||||
|
||||
### Phase E Tiptap 参考执行记录(2026-05-01)
|
||||
|
||||
- E11 参考入口已固化:`tiptap-notion-like-registry/materialized/tiptap-ui/*`、`tiptap-notion-like-registry/materialized/tiptap-extension/*`、`tiptap-notion-like-template/tiptap-notion-like-template/src/components/tiptap-*`、`leptos-tiptap/src/api/commands.rs`。后续 E13-E31 实现前必须先写参考路径和不复用原因。
|
||||
- E12 bridge 边界:`rust/spikes/leptos-tiptap-spike` 以 `leptos-tiptap` `features=["component", "full"]` 编译;可直接复用的命令包括基础块转换、`set_horizontal_rule`、`toggle_task_list`、`toggle_bullet_list`、`toggle_ordered_list`、`set/toggle_text_align`、`set/toggle_highlight`、`set/toggle_link`、`set_image`、`set_youtube_video`、history 与通用 `insert_content(_at)`。
|
||||
- E12 缺口边界:TableKit 已补最小 table schema、行列/标题行列/隐藏边框命令和保存链;完整 TableHandle、TableSelectionOverlay、列宽拖拽、fit、数据表格、Mention、Emoji、TOC、AI、UniqueID/anchor、NodeBackground、NodeAlignment、Indent、ListNormalization 仍不在 `leptos-tiptap` bridge 直接能力内;进入实现时优先扩 bridge 或落 mnote tree/page 命令,不允许只加前端临时 DOM 状态。
|
||||
- E13 Wolai slash 基线:`/mnt/Data1T/mnote/tmp/wolai-editor-parity/task142-e13-slash-wolai-baseline/report.md`;Wolai 菜单为 fixed 弹层约 `315x400`,首屏分组 `AI 助理 /ai`、`基础块列表 /jichukuai`,完整分组还包括进阶块、脚注/注释、快速分栏、转换为、媒体与附件、第三方应用、快速输入、插入引用、行内块、快速功能、文字颜色、背景色、荧光背景色;包含分割线、简单表格/数据表格、图片、页面目录、Emoji,未见明确 mention。
|
||||
- E13 当前本地 slash 状态:`rust/spikes/leptos-tiptap-spike/src/lib.rs` 的 `SLASH_ACTIONS` 已包含 `分割线` 与 `简单表格 /jdbg`,分别走 `editor.set_horizontal_rule()` 和真实 Tiptap table 插入;参考 template `components/tiptap-node/horizontal-rule-node/*`。本地与 Wolai 明确缺口是页面 `/ym`、折叠块、页面目录 `/toc`、数据表格 `/db`、Emoji `/bq`、颜色分组、插入引用和行内块;图片 `/tp` 已进入 E24 最小真源切片,但上传/最近上传/浮动工具条仍未完成。
|
||||
- E13 分割线真源闭环:2026-05-01 已补 `EditorBlockType::Divider`、`TiptapNode::HorizontalRule`、`mnote-web` bootstrap `divider -> horizontalRule` 恢复、bridge `horizontalRule -> divider` 保存、JS bridge `Map -> Object` 规范化,以及从 `conflictDetectionKey` 后缀恢复 revision;本地 smoke 已断言 slash 点击后 `/api/documents/content` 返回 `divider`,刷新后 ProseMirror 仍有 `<hr>`。主线程通过截图目录:`/mnt/Data1T/mnote/tmp/wolai-editor-parity/task143-e13-divider-persistence-local-v8`;subagent 后验通过截图目录:`/mnt/Data1T/mnote/tmp/wolai-editor-parity/task143-e13-divider-persistence-subagent`。
|
||||
- E15/E16 当前本地 toolbar 状态:`rust/spikes/leptos-tiptap-spike/src/lib.rs` 中 `mnote-leptos-tiptap-toolbar` 已用 `toggle_bold/italic/strike/code`、`toggle_mark(Underline)`、`set/toggle_link`、`set_color/unset_color`、`set_highlight/unset_highlight`、`set_text_align` 等 bridge 命令;参考路径为 `tiptap-ui/color-menu/*`、`color-text-button/*`、`color-highlight-button/*`、`mark-button/*`、`text-align-button/*`。缺口是 node background、recent colors、drag menu 颜色子菜单复用、完整 link popover、AI、sup/sub、indent/outdent。
|
||||
- E19 列表缩进真源闭环:2026-05-01 已按 Wolai Hermes 基线确认 `Tab` 会把第二个列表项挂到父项 `sub-node-container`,`Shift+Tab` 提升回同级,不只是视觉 padding。参考路径为 `tiptap-extension/indent-extension.ts`、`list-normalization-extension.ts` 与 `leptos-tiptap/src/api/commands.rs` 的 `sink_list_item` / `lift_list_item`;本地已有 Tiptap 列表键盘命令,修复点落在 `core-protocol` Tiptap bridge 与 `bridge-runtime` canonical legacy content,保存时保留 `childBlockIds` / `children`,`mnote-web` bootstrap 可从 legacy `children` 恢复嵌套 Tiptap 列表。Wolai 基线:`/mnt/Data1T/mnote/tmp/wolai-editor-parity/task144-e19-indent-wolai-baseline/comparison-matrix.md`;本地 smoke:`MNOTE_PHASE_E_SCREENSHOT_DIR=/mnt/Data1T/mnote/tmp/wolai-editor-parity/task144-e19-indent-local-green-final node scripts/task144-e19-indent-list-smoke.js`,通过并覆盖 Tiptap JSON、`/api/documents/save`、`/api/documents/content` 真源和刷新恢复。
|
||||
- E20 块布局/文字居中局部闭环:2026-05-01 已按 Wolai Hermes 基线确认 `Ctrl/Cmd+Shift+U` 会进入块布局选中态,块菜单存在 `文字居中`,点击后 Wolai 视觉居中且刷新后保持;Wolai DOM 语义表现为内部内容 class `_1PQWZ`,不是根块 `text-align:center`。本地当前实现 `Ctrl+Shift+U` 后显示 `data-testid=block-layout-outline` 虚线轮廓,并采用 `leptos-tiptap` `set_text_align(TiptapTextAlign::Center)` 作为 Tiptap 参考优先的文字居中真源实现;保存请求、`/api/documents/content` 与刷新恢复均保留 `textAlign=center`。Wolai 基线:`/mnt/Data1T/mnote/tmp/wolai-editor-parity/task145-e20-alignment-wolai-baseline/precise-summary.json`;本地 smoke:`MNOTE_UI_BASE_URL=http://127.0.0.1:3000 MNOTE_PHASE_E_SCREENSHOT_DIR=/mnt/Data1T/mnote/tmp/wolai-editor-parity/task145-e20-layout-align-local-current node scripts/task145-e20-alignment-smoke.js`。剩余拆分:selection toolbar 当前 Wolai 基线未出现对齐入口,拖拽分栏/节点级对齐尚无有效 Wolai 基线,后续不能把 E20 标 DONE。
|
||||
- E21 页面当前类型勾选态与 slash 拼音入口局部闭环:2026-05-01 `task137-wolai-phase-e-smoke.js` 已覆盖 `转换为 -> 页面` 后二次打开块菜单时 `block-transform-item-page` 的 `data-current=true` 与 `✓` 勾选态;本轮复跑通过截图目录 `/mnt/Data1T/mnote/tmp/wolai-editor-parity/task146-e21-current-state-regression`。同日新增 slash 查询态 smoke:输入 `/` 后继续输入 `zhw`,本地菜单显示 `转换为 /zhw`,对应 Wolai slash 基线 `task142-e13-slash-wolai-baseline` 中 `转换为 /zhw`;RED 截图目录 `/mnt/Data1T/mnote/tmp/wolai-editor-parity/task146-e21-slash-zhw-red`,GREEN 截图目录 `/mnt/Data1T/mnote/tmp/wolai-editor-parity/task146-e21-slash-zhw-green`。2026-05-01 继续补 `页面 /ym` 查询入口,Wolai 基线同目录 `04-slash-menu-candidates.json` / `06-slash-menu-rows.json` 均包含 `页面 /ym`;本地 RED 截图目录 `/mnt/Data1T/mnote/tmp/wolai-editor-parity/task147-e21-slash-ym-red`,GREEN 截图目录 `/mnt/Data1T/mnote/tmp/wolai-editor-parity/task147-e21-slash-ym-green`。同日补 H4 小标题二次打开当前态:RED 截图目录 `/mnt/Data1T/mnote/tmp/wolai-editor-parity/task148-e21-h4-current-red`,GREEN 截图目录 `/mnt/Data1T/mnote/tmp/wolai-editor-parity/task148-e21-h4-current-green`,当前项写入 `data-current=true` 并显示 `✓`。同日补基础转换快捷键 `Ctrl/Cmd+Shift+1/2/3/5/6/7` 的本地命令映射,RED 截图目录 `/mnt/Data1T/mnote/tmp/wolai-editor-parity/task149-e21-hotkey-h1-red`,GREEN 截图目录 `/mnt/Data1T/mnote/tmp/wolai-editor-parity/task149-e21-hotkey-h1-green`。当前 `/zhw` 与 `/ym` 入口只作为 Wolai slash 分组入口展示,真实转换/页面创建仍走块菜单或选区工具栏,后续需补 Wolai 二次勾选态基线和其余类型全量当前态。
|
||||
- E22 折叠标题局部闭环:2026-05-01 复用 Wolai Hermes `task138-phase-e-wolai-refresh` 基线,确认 `转换为 -> 折叠标题` 会展开三级菜单 `折叠主标题/折叠大标题/折叠中标题/折叠小标题`,不是 disabled 文案。本地已补 `leptos-tiptap` heading `collapsed` attr、`core-protocol` Tiptap bridge、`bridge-runtime` legacy props、`mnote-web` bootstrap 和块菜单三级菜单;`task150-e22-folding-blocks-smoke.js` 覆盖点击 `折叠主标题` 后 h1 `data-collapsed=true`、保存请求 `attrs.collapsed=true`、`/api/documents/content` 真源和刷新恢复。当前只完成折叠标题最小切片,折叠待办/折叠列表和折叠后的子块显隐状态仍需后续拆分。
|
||||
- E23 简单表格局部闭环:2026-05-01 Wolai Hermes 可编辑基线已确认 `简单表格 /jdbg` 默认插入 `4x3` HTML `<table class="table-content">`,外层 `data-block-type="table"`,URL 不变;行侧/列顶 aux 点击会插入行/列并呈现淡红 overlay,选项菜单含标题行/标题列/隐藏边框线 switch,未确认到清空/fit。当前本地已对齐 slash `简单表格 /jdbg`,并通过 bridge 调用 Tiptap 官方 `insertTable({ rows: 4, cols: 3, withHeaderRow: false })` 插入 `4x3` 真实 Tiptap table,并补表格 toolbar 的下方插入行、右侧插入列、清空当前单元格、删除行/列/表格;已补 `选项` 菜单,`标题行`、`标题列`、`隐藏边框线` 均使用 `role="switch"` 和 `aria-checked`,切换后写入 `tableHeader` 节点或 `attrs.hiddenBorders=true`。已补表格行侧/列顶 aux controls 和最小 TableSelectionOverlay:`table-row-aux-*` 点击后从 `4x3` 进入 `5x3`,`table-col-aux-*` 点击后进入 `5x4`,并显示 `data-testid="table-selection-overlay"` 淡红覆盖层,toolbar 保持可用。2026-05-01 继续补列宽拖拽:Tiptap table 开启 `resizable=true`,列宽拖拽回到官方 `columnResizing` 路径;拖拽首列右边缘后写入单元格 `attrs.colwidth`,保存请求、`/api/documents/content` 与 reload 后 DOM 宽度/col 样式均由 `task151-e23-table-smoke.js` 覆盖;保留 `MnoteTableView` 作为 mnote 属性同步适配,避免 resizable node view 丢失 `data-hidden-borders` / `data-block-id`。2026-05-01 继续补真实 ProseMirror TableSelection:bridge 增加 `select_table_row` / `select_table_column` 命令,行侧/列顶 aux 插入后同步 Tiptap 官方 `CellSelection.rowSelection` / `CellSelection.colSelection`,smoke 断言目标行/列 `.selectedCell` 数量和位置,并静态断言不再使用 `setCellSelection` 或手写 `simple_table_node()` 插入路径;同时把 `@tiptap/pm/tables` 纳入 shared hosted modules,避免 tableEditing decorations 与 EditorView 跨 bundle 混用。Wolai 基线截图:`/mnt/Data1T/mnote/tmp/wolai-editor-parity/task151-e23-wolai-tablekit-baseline/`;本地列宽版截图:`/mnt/Data1T/mnote/tmp/wolai-editor-parity/task151-e23-table-resize-green`;本地官方 resize 复核截图:`/mnt/Data1T/mnote/tmp/wolai-editor-parity/task151-e23-official-resize-green`;本地官方 TableKit 命令复核截图:`/mnt/Data1T/mnote/tmp/wolai-editor-parity/task151-e23-official-tablekit-commands-green`;本地真实 TableSelection 截图:`/mnt/Data1T/mnote/tmp/wolai-editor-parity/task151-e23-table-selection-green`;回归截图:`task144-e19-regression-after-e23-resize`、`task145-e20-regression-after-e23-resize`、`task150-e22-regression-after-e23-resize`、`task137-phase-e-regression-after-e23-resize`。
|
||||
- E24 图片最小真源闭环:2026-05-01 已按 Wolai E13 slash 基线确认 `媒体与附件` 分组存在 `图片 /tp` 与 `最近上传图片 /tp`;第一段实现 `图片 /tp` 最小切片,参考 `leptos-tiptap` 官方 `TiptapImageResource` / `set_image` bridge(`src/api/types/extensions/image.rs`、`src/api/commands.rs`、`tiptap/src/extensions/tiptap_image.ts`)与 template `components/tiptap-node/image-node/*`、`image-upload-node/*`,不手写 image JSON。当前本地 `SLASH_ACTIONS` 已补 `图片 /tp` 和 `媒体与附件` 分组,`p0_extensions()` 显式启用 `TiptapExtension::Image`,点击后调用 `editor.set_image(TiptapImageResource { ... })` 插入真实 Tiptap `image` 节点;`core-protocol` 新增 `EditorBlockType::Image` / `TiptapNode::Image`,`bridge-runtime` 保存为 legacy `image` 且保留 `props.tiptapImage`,`mnote-web` bootstrap 从 content API 恢复为 `<img>`;本地只读占位资源走 `/api/editor/image-placeholder.svg`,避免 smoke 依赖外网或破图。第二段补图片点击选中态与图片专用 floating toolbar,参考 `tiptap-notion-like-registry/materialized/tiptap-node/image-node/image-node-floating.tsx`、`image-node-extension.ts`、`tiptap-ui/image-align-button/use-image-align.ts`、`tiptap-ui/image-download-button/use-image-download.ts`:本地点击 `<img>` 后展示 `image-floating-toolbar`,提供左/中/右对齐和同源图片下载,删除入口本切片保持禁用;图片对齐通过 `Image.extend({ addAttributes: { "data-align" } })` 扩展官方 Image schema 后调用 `editor.update_attributes(TiptapSchemaTarget::Node(TiptapNodeName::Image), ...)`,不是 UI 伪样式;同源下载只读当前 NodeSelection 图片 DOM 的 `src/title/alt`,用隐藏 `<a download>` 触发,不触发保存链。`task152-e24-image-smoke.js` 覆盖 slash 入口、DOM `<img>`、图片实际加载、图片 toolbar、同源下载事件、删除入口禁用态、居中对齐 `data-align`、保存请求 `tiptapDocument`、`/api/documents/content` image 真源与 reload 恢复;通过截图目录:`/mnt/Data1T/mnote/tmp/wolai-editor-parity/task152-e24-image-download-green`。剩余:真实上传、最近上传图片、caption、resize、replace、跨源下载 fallback、删除保存链、移动端 toolbar、上传失败态另拆后续。
|
||||
|
||||
- E25 TOC 最小真源闭环:2026-05-01 已按 Wolai slash 基线确认 `页面目录 /toc`,并参考 `tiptap-notion-like-template/src/components/tiptap-node/toc-node/*`、`toc-show-title-button/*`、`toc-sidebar/*` 与 `notion-like-editor.tsx` 中 `TableOfContents.configure({ onUpdate })` 的数据链路。当前本地先完成第一段:`leptos-tiptap` 新增 `toc_node` bridge 扩展,真实 Tiptap schema 名为 `tocNode`,slash `页面目录 /toc` 调用 `editor.insert_toc_node(TiptapTocNodeAttrs { top_offset: 0, max_show_count: 20, show_title: true })`,不是普通 div 或手写 spike JSON;NodeView 从当前 Tiptap doc 的 heading 节点派生目录项,支持点击目录项定位并更新 hash,支持标题显示开关并通过 `updateAttributes("tocNode", { showTitle })` 持久化。保存链新增 `EditorBlockType::Toc` / `TiptapNode::TocNode`,`bridge-runtime` legacy content 保留 `props.tiptapTocNode`,`mnote-web` reload 恢复 `tocNode`;`task153-e25-toc-smoke.js` 覆盖 `/toc` 入口、真实 tocNode DOM、heading 列表派生、动态 heading 更新、点击定位、标题开关、保存请求、content API 和 reload 恢复。截图目录:`/mnt/Data1T/mnote/tmp/wolai-editor-parity/task153-e25-toc-local-smoke`。剩余:接入 Tiptap 官方 `@tiptap/extension-table-of-contents` v3 数据源或完成等价 bridge 评估、TOC sidebar、active heading 高亮、完整块菜单标题开关入口、Wolai 像素级视觉、移动端行为、UniqueID/anchor 统一化。
|
||||
|
||||
### Phase E 说明页扩展 backlog
|
||||
|
||||
| ID | 状态 | 任务 | 验收要点 |
|
||||
| --- | --- | --- | --- |
|
||||
| E11 | TODO | `Tab` / `Shift+Tab` 缩进结构 | 缩进改变父子块结构,不只是视觉 padding;覆盖不允许缩进的块类型 |
|
||||
| E12 | TODO | `Ctrl/Cmd+Shift+U` 块布局 | 显示/隐藏块布局虚线框,且不影响编辑保存 |
|
||||
| E13 | TODO | 块转换三入口 | 块菜单、快捷键、slash `/zh + 拼音首字母` 均能转换文本类块 |
|
||||
| E14 | TODO | 复制/粘贴与匹配样式粘贴 | 文本选择、块选择、`Ctrl/Cmd+Shift+V` 分别有 smoke |
|
||||
| E15 | TODO | 链接创建 | 选中文字 `Ctrl/Cmd+K` 与直接粘贴 URL 创建链接 |
|
||||
| E16 | TODO | 文本颜色/背景色/行内公式/页面引用 | selection toolbar 子菜单真实写入 Tiptap 内容,不只显示入口 |
|
||||
| E17 | TODO | 评论入口 | 块评论、选中文字评论、评论气泡数量和 `Ctrl/Cmd+Alt+M` 后续对标 |
|
||||
| E18 | TODO | 块引用与右侧边栏引用 | 块引用搜索、引用预览/别名、右侧边栏拖拽引用后续对标 |
|
||||
| E19 | TODO | 块历史 | 块历史查看与恢复版本按 Wolai 说明页单列验证 |
|
||||
| E20 | TODO | 拖拽分栏 | 横线/竖线预览、父子块随父块移动、测试块间安全释放与清理 |
|
||||
| E21 | DONE | 块菜单二级转换基础版 | `转换为` hover 后主菜单保持、二级菜单包含 Wolai 当前项目;`文本/待办/高级待办/H1/H2/H3/H4/页面/列表/数字列表/引述/代码` 其中 H4 与页面至少有真实 smoke |
|
||||
| E22 | TODO | 折叠标题三级菜单 | hover `折叠标题` 显示 `折叠主标题/折叠大标题/折叠中标题/折叠小标题`;真实折叠语义需接 editor/core 命令,不用 disabled 文案伪装完成 |
|
||||
| E23 | TODO | 折叠待办三级菜单 | hover `折叠待办` 显示 `折叠待办列表/折叠高级待办列表`;真实折叠待办语义需接 editor/core 命令 |
|
||||
| E24 | TODO | 复制链接/颜色/文字翻译子菜单 | 复制链接、颜色、文字翻译按 Wolai 展开子菜单;颜色至少覆盖文字色/背景色真实写入,复制链接不只反馈文案 |
|
||||
| E25 | TODO | 块菜单关闭状态机 | Esc 与外部点击关闭所有层级;鼠标移出菜单保持打开,三级菜单可按 Wolai 收回到二级菜单;smoke 覆盖三条路径 |
|
||||
| E26 | DONE | `转换为 -> 页面` 真源 | 已按 task140 修正:本地转换时调用 `/api/tree/commands` 创建 `parentId=当前文档` 的真实子页面,当前块原地变 page block,页面块 href 指向子页面且点击可打开,刷新后页面树显示同名子页面;仍需在后续任务补齐 Wolai 重新打开菜单时 `页面` 勾选态的完整二次复核 |
|
||||
| E27 | TODO | 参考 Tiptap slash 插入扩展 | 对齐 `tiptap-notion-like-template`:slash 菜单除文本/标题/列表/引用/代码外,还应覆盖 AI continue/ask、mention、emoji、table、divider、TOC、image upload;每项要按 schema/后端能力拆 smoke,不只显示文案 |
|
||||
| E28 | TODO | 参考 Tiptap floating toolbar 扩展 | 对齐 floating toolbar:Improve/AI、TurnInto、bold/italic/underline/strike/code、image floating、link popover、text color、superscript/subscript、text align、indent/outdent;当前仅覆盖基础行内样式与颜色入口,真实写入需补齐 |
|
||||
| E29 | TODO | 参考 Tiptap drag context menu 扩展 | 对齐 drag context:copy to clipboard、copy anchor link、reset formatting、Ask AI、ColorMenu、TableAlign/Fit/Clear、TOC show title、image download、delete;当前块菜单仍有多项静态或缺失 |
|
||||
| E30 | TODO | 参考 Tiptap 表格/图片/TOC 节点 | 对齐 TableKit/TableHandle/TableSelectionOverlay/ImageUpload/Image floating/TOC sidebar;本地 `leptos-tiptap` crate 当前 full feature 只到 image/link/highlight/youtube,表格、数学、emoji、mention、TOC、协作光标等需按架构另列能力边界 |
|
||||
| E31 | TODO | 参考 Tiptap 节点级样式扩展 | 对齐 NodeBackground、NodeAlignment、Indent、ListNormalization、UniqueID/anchor;当前有 text-align/color/highlight 的局部能力,块背景、缩进结构、锚点复制和列表规范化需补 smoke 与真源映射 |
|
||||
| E11 | DONE | Tiptap 参考优先执行门 | 已固化:每个 Phase E 子任务先记录参考路径、可复用代码点、mnote 真源落点和 Wolai-aline smoke;参考入口覆盖 `registry/materialized/tiptap-extension/*`、`registry/materialized/tiptap-ui/*`、`template/src/components/tiptap-*`、`leptos-tiptap/src/api/commands.rs`,无参考路径不得直接实现 UI |
|
||||
| E12 | DONE | `leptos-tiptap` bridge 能力边界 | 已盘点:当前 full bridge 覆盖基础块/行内 mark、history、horizontalRule、task/bullet/ordered list、text-align、highlight、image、link、youtube、table/tableRow/tableCell/tableHeader 最小 schema;仍缺 mention、emoji、TOC、AI、UniqueID、NodeBackground/Alignment、非列表 Indent/ListNormalization,后续按能力包判断扩 bridge、走 mnote 命令或暂缓 |
|
||||
| E13 | PARTIAL | SlashDropdownMenu 能力包 | 参考 `tiptap-ui/slash-dropdown-menu/*` 与 template horizontalRule;本地已覆盖 AI 文案入口、基础块、待办、标题、列表、引述、代码、分割线、简单表格、图片,其中分割线已走 `set_horizontal_rule()`、保存为 kernel `divider`、刷新恢复为 `<hr>`,简单表格已走真实 Tiptap `table` schema,默认 `4x3` 并由 `task151-e23-table-smoke.js` 覆盖保存/刷新/基础行列、表格选项、行/列 aux 插入、selection overlay 和列宽拖拽持久化操作,图片 `/tp` 已走 `set_image` 并由 `task152-e24-image-smoke.js` 覆盖保存/刷新;Wolai 基线已确认还需补页面、折叠块、TOC、数据表格、Emoji、颜色、引用、行内块等分组,且每项需真实 schema/bridge 或明确未接入状态 |
|
||||
| E14 | PARTIAL | DragContextMenu 能力包 | 以 `DragContextMenu` 为主参考重组块手柄菜单;当前四点/三横线、菜单位置、基础二级转换已对齐,后续补 copy/delete/copy anchor/reset formatting/Ask AI 等命令时复用同一菜单模型 |
|
||||
| E15 | PARTIAL | NotionToolbarFloating 能力包 | 参考 `NotionToolbarFloating`;本地 selection toolbar 已接 TurnInto、bold/italic/underline/strike/code、link、color、text-align 的真实 Tiptap 命令;仍缺 AI、superscript/subscript、indent/outdent、完整 link popover 和 image floating toolbar |
|
||||
| E16 | PARTIAL | 颜色与节点样式统一能力包 | 参考 `ColorMenu`、`color-text-button`、`color-highlight-button`、`node-background-extension.ts`;本地 toolbar 文字色走 `set_color`,背景色走 `set_highlight`,清除颜色走 `unset_color` + `unset_highlight`;仍缺 node background bridge、recent colors、drag menu 颜色子菜单复用和 smoke 对 JSON/刷新恢复断言 |
|
||||
| E17 | PARTIAL | Link / Page / Reference 能力包 | 参考 link popover 与 `leptos-tiptap` `set_link/toggle_link`;已完成 `转换为 -> 页面` 真源和页面树可见,仍需补选中文字 `Ctrl/Cmd+K`、直接粘贴 URL、页面引用、块引用、右侧引用预览 |
|
||||
| E18 | TODO | Clipboard / Paste 能力包 | 参考 registry 的 clipboard/copy 相关按钮与 Tiptap paste 规则;覆盖文本选择、块选择、复制副本、匹配样式粘贴、跨块粘贴,smoke 验证真实 Tiptap JSON 和 mnote 保存链 |
|
||||
| E19 | PARTIAL | Indent / ListNormalization 能力包 | 已完成列表项 `Tab` / `Shift+Tab` 真父子结构闭环:Tiptap JSON 嵌套列表、mnote 保存链 `childBlockIds` / legacy `children`、刷新恢复均由 `task144-e19-indent-list-smoke.js` 覆盖;后续补非列表块 indent-extension、list-normalization 边界和不允许缩进块类型 |
|
||||
| E20 | PARTIAL | NodeAlignment / BlockLayout 能力包 | 已完成 `Ctrl/Cmd+Shift+U` 块布局虚线轮廓和块菜单 `文字居中` 的 Tiptap textAlign 保存链:快捷键后 `block-layout-outline`、块菜单入口、点击后视觉居中、保存请求、`/api/documents/content` 和刷新恢复由 `task145-e20-alignment-smoke.js` 覆盖;剩余 selection toolbar 是否有对齐入口、拖拽分栏预览与节点级对齐需继续拆小任务,不能标 DONE |
|
||||
| E21 | PARTIAL | TurnInto 转换能力包 | 参考 TurnInto 菜单模型;当前 `文本/待办/高级待办/H1-H4/页面/列表/数字列表/引述/代码` 基础入口部分完成,页面转换已接真实子页面;页面块与 H4 小标题二次打开 `转换为` 已有 `✓` 当前态 smoke,slash `zhw` 已能显示 `转换为 /zhw`,slash `ym` 已能显示 `页面 /ym`,基础快捷键 `Ctrl/Cmd+Shift+1/2/3/5/6/7` 已接本地 Tiptap 转换命令;后续补其余类型全量当前态与 Wolai 二次勾选态基线 |
|
||||
| E22 | PARTIAL | Folding Blocks 能力包 | 已完成 `转换为 -> 折叠标题 -> 折叠主标题` 最小真源闭环:三级菜单、heading collapsed attr、保存请求、content API 和刷新恢复由 `task150-e22-folding-blocks-smoke.js` 覆盖;后续补折叠大/中/小标题 smoke、折叠待办/折叠列表真实语义、折叠后的子块显隐与当前态 |
|
||||
| E23 | PARTIAL | TableKit 能力包 | 已完成简单表格可验收切片:`leptos-tiptap` 增加 table/tableRow/tableCell/tableHeader schema,slash `简单表格 /jdbg` 按 Wolai 基线插入 `4x3` 真实 `<table>`,本地 table toolbar 支持下方插入行、右侧插入列、清空当前单元格、删除当前行/列/表格,并补 `选项` 菜单的标题行、标题列、隐藏边框线 switch;已补行侧/列顶 aux controls 和最小 TableSelectionOverlay,点击行/列 aux 会插入行/列并显示对应淡红选择覆盖层,toolbar 保持可用;`core-protocol`/`bridge-runtime`/`mnote-web` 保存与刷新恢复保留 `table` Tiptap 快照、`tableHeader` 和 `attrs.hiddenBorders`;本地 smoke `task151-e23-table-smoke.js` 覆盖入口、DOM、row/column aux 插入、selection overlay、列宽拖拽、switch 语义/状态、保存请求、content API、reload 和删除。剩余表格对齐、fit、数据表格入口,以及 Wolai 选项菜单图标/toolbar 视觉细节另拆后续 |
|
||||
| E24 | PARTIAL | Image / Media 能力包 | 已完成图片 `/tp` 最小真源闭环与图片 toolbar 小闭环:slash `媒体与附件` 分组入口调用 `leptos-tiptap` 官方 `set_image(TiptapImageResource)`,启用 `TiptapExtension::Image`,保存链新增 `EditorBlockType::Image` / `TiptapNode::Image` 并保留 `props.tiptapImage`,`mnote-web` reload 恢复 `<img>`;点击图片后出现 `image-floating-toolbar`,删除入口本切片保持禁用,左/中/右对齐通过官方 Image 扩展 `addAttributes("data-align")` + `updateAttributes("image")` 持久化,同源下载通过隐藏 `<a download>` 触发且不改文档;`task152-e24-image-smoke.js` 覆盖入口、实际图片加载、toolbar、同源下载、删除入口禁用态、居中对齐、保存请求、content API 和刷新恢复;剩余上传、最近上传、caption、resize、replace、跨源下载 fallback、删除保存链、移动端 toolbar、失败态 |
|
||||
| E25 | PARTIAL | TOC 能力包 | 已完成 `/toc` 最小真源闭环:`leptos-tiptap` 新增真实 `tocNode` schema/command,slash `页面目录 /toc` 插入真实节点,NodeView 从当前 headings 派生目录项,支持点击定位、标题显示开关、保存请求、content API 与 reload 恢复;`task153-e25-toc-smoke.js` 覆盖入口、动态 heading 更新、hash 定位和 `props.tiptapTocNode`。剩余 TOC sidebar、active heading 高亮、完整块菜单入口、官方 TableOfContents v3 数据源评估、移动端与像素级视觉 |
|
||||
| E26 | TODO | UniqueID / Anchor 能力包 | 参考 UniqueID/anchor/copy anchor link 相关实现;每个块需要稳定 id,复制链接应指向可恢复的页面/块锚点,刷新后仍可定位 |
|
||||
| E27 | TODO | AI 编辑能力包 | 参考 `ai-context`、AI icons、Improve/Ask AI/continue/regenerate/summarize/translate;先接 mnote 现有 AI command/tool 真源,再做 Wolai 菜单入口和流式状态 |
|
||||
| E28 | TODO | Mention / Emoji 能力包 | 参考 mention trigger 与 emoji menu;实现 `@`、emoji 搜索、键盘导航、插入后的 Tiptap JSON 和 mnote 保存链,不作为纯文本占位 |
|
||||
| E29 | TODO | Comment / History 能力包 | 参考评论入口、块历史入口的菜单形态,结合 mnote 后端能力决定先做 smoke 占位还是真实存储;`Ctrl/Cmd+Alt+M`、评论气泡数量、块历史恢复需单列对标 |
|
||||
| E30 | TODO | Menu / Floating 状态机能力包 | 参考 `use-floating-element`、`use-menu-navigation`、`use-floating-toolbar-visibility`;统一 Esc、外部点击、鼠标移出、方向键、Enter、层级菜单收起逻辑,避免每个菜单各写一套状态机 |
|
||||
| E31 | PARTIAL | Tiptap 参考对标 smoke 矩阵 | `task137-wolai-phase-e-smoke.js` 已覆盖 E13 分割线的 DOM `<hr>`、`/api/documents/content` `divider`、刷新恢复和页面转换 `_self` 打开;后续每完成一个能力包仍必须同时断言 Tiptap JSON/schema、mnote 真源保存、Wolai 视觉/交互截图、刷新恢复;截图差异未复核不得标 DONE |
|
||||
|
||||
## 9. Phase F:Page Aggregate 和命令边界
|
||||
|
||||
|
||||
| ID | 状态 | 任务 | 验收要点 |
|
||||
| --- | --- | --- | --- |
|
||||
| F1 | TODO | 标题单一真源 | 标题修改后 breadcrumb、sidebar、file tree、document title 同步 |
|
||||
|
||||
Reference in New Issue
Block a user