- 将不直接执行的 process-reference 文档迁入各域 reference 目录 - 更新 design/README、AGENTS 和总序文档,固定 process/draft/reference/done 目录语义 - 修正活跃文档中指向旧 process 位置的参考链接 验证:git diff --check;codegraph sync .
7.9 KiB
5-2 [reference] Tiptap Notion-Like 模板裁剪与 leptos-tiptap 映射分析 v1
更新时间:2026-04-19
当前状态:
reference。本文只作为 tiptap / Notion-like 行为模型参考,不再作为当前执行 checklist;默认主编辑器已是页面内leptos-tiptapisland。这份文档已经按当前进展修正:
现在的问题不再是“这套模板能不能迁进来”,而是:
默认主编辑器已经切到页面内
leptos-tiptapisland;当前问题转为:应该从官方模板保留什么行为模型,并优先把哪些能力继续收口到当前主编辑器主链。
1. 修正后的总判断
当前对官方模板的使用方式应当明确为:
- 它是体验 benchmark,不是直接照搬对象。
- 它是行为模型参考,不是 React 代码迁移目标。
- 现阶段最值钱的不是再扩更多模板功能,而是把已实现能力接入主编辑器。
因此,这份模板的正确用途是:
借它定义“官方行为应当是什么”,再用
leptos-tiptap+ Rust 把这些行为落到mnote的主链。
2. 官方模板里当前最该保留的参考
2.1 主编辑器扩展组合
核心参考文件:
/mnt/Data1T/mnote/design/05-editor-mainline/reference-code/tiptap-notion-like-registry/materialized/tiptap-templates/notion-like/components/notion-like-editor.tsx
当前值得保留的不是整份文件,而是这些决策:
- 以 Tiptap 正式 schema 组织常用块
- 常用块优先于低频复杂块
task list / task item使用正式扩展,不做 HTML 占位UniqueID作为块身份辅助机制Indent作为普通块缩进增强的参考扩展
2.2 slash 菜单行为模型
核心参考文件:
/mnt/Data1T/mnote/design/05-editor-mainline/reference-code/tiptap-notion-like-registry/materialized/tiptap-ui/slash-dropdown-menu/slash-dropdown-menu.tsx/mnt/Data1T/mnote/design/05-editor-mainline/reference-code/tiptap-notion-like-registry/materialized/tiptap-ui/slash-dropdown-menu/use-slash-dropdown-menu.ts
当前最该保留的是:
- slash 入口就是块编辑器的主入口之一
- 菜单项的分组与命令组织方式
- 菜单锚点应跟随 caret,而不是随便找一个固定位置
2.3 浮动工具条行为模型
核心参考文件:
/mnt/Data1T/mnote/design/05-editor-mainline/reference-code/tiptap-notion-like-registry/materialized/tiptap-templates/notion-like/components/notion-like-editor-toolbar-floating.tsx
当前最该保留的是:
- 工具条只在文本 selection 语境下出现
- 文本格式命令和
turn into要分清语境 - 不要把固定显示工具条误当成“功能已完成”
2.4 左侧手柄与块菜单行为模型
核心参考文件:
/mnt/Data1T/mnote/design/05-editor-mainline/reference-code/tiptap-notion-like-registry/materialized/tiptap-ui/drag-context-menu/drag-context-menu.tsx
当前最该保留的是:
- hover 先只显露手柄,不自动弹块菜单
- 块菜单应由左侧手柄点击触发
turn into / duplicate / delete / drag是块菜单的核心动作
这点非常关键,因为它直接影响我们后续对标 Wolai/Notion 的交互正确性。
3. 结合当前代码后的现实判断
3.1 已经有的东西
从当前实现看,下面这些已经不是“要不要做”,而是“如何迁进主链”:
paragraph / heading / list / todo / quote / code block / divider- slash 菜单
- 浮动工具条
- 左侧手柄
- 块菜单
turn into- 顶层拖拽
- refresh 后结构保留
对应当前实现入口:
/mnt/Data1T/mnote/rust/spikes/leptos-tiptap-spike/src/main.rs
3.2 当前真正的缺口
当前真正的缺口不是模板 feature 数量,而是下面这些:
- 它还在 spike 里,不在主编辑器里
- 保存还没接上正式 Rust truth
block_id还没成为正式合同- 页面引用 / 块引用还没打通
- 图片上传与附件桥还没接
- 表格还没做
所以现阶段不该继续把注意力平均分配到:
- Markdown 导入导出回归
kode组件分层整理- 表格
- AI Cloud
- 协作链
4. P0.5 该如何采用官方模板
4.1 P0.5 要保留的部分
P0.5 应保留的不是一堆零散 feature,而是以下几类“官方行为”:
- 主编辑器使用正式 Tiptap 扩展,而不是临时 HTML 拼接
- slash 菜单锚定 caret
- 选中文字才出现浮动工具条
- hover 只显手柄,点击手柄才弹块菜单
turn into作为块菜单和工具条共享的一组块类型切换动作UniqueID作为 runtime 辅助,但最终块 id 仍归 Rust
4.2 P0.5 不要再继续扩的部分
P0.5 不应该继续向下扩这些模板能力:
- 协作
- AI
- TOC
- 完整表格
- 图片上传整链
- 移动端全量工具条
原因很简单:
这些都不会帮助我们更快完成“接入主编辑器”。
5. 官方模板到 mnote 的映射口径
5.1 直接借行为,不借代码
以下部分应当“借行为模型”,不应当尝试直接照搬 React 代码:
slash-dropdown-menudrag-context-menunotion-like-editor-toolbar-floating
原因:
- React hooks / context / portal 不能直接进入 Leptos
- 真正有价值的是交互时机、状态边界、动作分组
- 不是
tsx组件本身
5.2 block id 需要现在就纳入主线
官方模板里的 UniqueID.configure(...) 很重要,但口径要修正成:
- 官方参考:
/mnt/Data1T/mnote/design/05-editor-mainline/reference-code/tiptap-notion-like-registry/materialized/tiptap-templates/notion-like/components/notion-like-editor.tsx - Rust 真相字段:
/mnt/Data1T/mnote/rust/crates/core-protocol/src/editor/model.rs
最终原则:
- Rust
EditorBlock.block_id是持久化真相。 - Tiptap
UniqueID只负责浏览器 runtime 内的节点身份辅助。 - 不允许把前端临时 id 倒灌成正式文档真相。
5.3 Indent 值得做,但不在这一轮前排
官方缩进扩展很值得参考:
/mnt/Data1T/mnote/design/05-editor-mainline/reference-code/tiptap-notion-like-registry/materialized/tiptap-extension/indent-extension.ts
但当前它不应排在主编辑器接入之前。
更合理的顺序是:
- 先完成主编辑器接入
- 再完成 Rust 保存边界
- 再考虑普通块缩进增强
5.4 图片上传与表格都先后置
官方模板确实有图片与表格能力,但现在不应让它们进入主 checklist 前排。
原因:
- 图片上传不是当前切流主编辑器的阻塞项
- 表格更不是当前高频刚需
- 两者都容易把工作重新带到复杂 UI / 服务桥接细节
6. 哪些旧 checklist 应从主线降级
下面这些项不删,但不应继续放在当前主线前排:
-
Markdown 导入导出回归 参考
blocks仍然有价值,但它更像切流后的回归与兼容工作。 -
借
kode做 Leptos 组件分层 这个参考可以保留,但它属于实现注记,不是当前交付里程碑。 -
完整表格 继续后置。
-
完整图片上传 继续后置,只保留后续最小桥接预留。
7. 对接下来工作的直接建议
基于当前代码和官方模板,接下来最合理的顺序是:
- 先把当前
leptos-tiptap编辑器接入主编辑器。 - 同时建立正式的 Rust load/save 边界。
- 在这个过程中引入稳定 block id 策略。
- 等它真正成为主编辑器后,再规划
P1 / P1.5的 Wolai 对标体验增强。
这也意味着:
当前官方模板对我们的最大价值,不是再提供更多可抄的 feature,而是帮助我们定义:
- 哪些交互已经够了
- 哪些交互时机必须修正
- 哪些功能现在根本不该做
8. 最终结论
当前对这份模板的正确使用方式是:
以后续主编辑器开发继续以 Tiptap 官方能力模型为体验上限,以
leptos-tiptap为运行时接入层;先完成主编辑器接入和 Rust truth 落地,再单独规划 Wolai 对标增强,不再把模板 feature 数量当作当前阶段目标。