3.5 KiB
3.5 KiB
[recycle] mnote Rust Block Editor Edita Spike v0
更新时间:2026-04-18
1. 目标
本 spike 只回答一个问题:
edita-core 的 Editor / Block / Command / 无头执行 边界,是否适合作为 mnote 新主编辑器第一阶段的命令核参考。
结论先写:
- 适合直接借
Editor - 适合直接借
Command - 适合借
Block作为注册与分发思路 - 适合借
无头执行 - 不适合直接拿来当最终
mnoteblock document 模型 - 不适合直接拿来当最终前端胶水
2. 参考入口
/mnt/Data1T/mnote/design/05-editor-mainline/reference-code/edita/edita-core/src/lib.rs/mnt/Data1T/mnote/design/05-editor-mainline/reference-code/edita/edita/src/editor.rs/mnt/Data1T/mnote/design/05-editor-mainline/reference-code/edita/edita/src/state.rs
3. 直接可复用面
3.1 Editor
Editor<Node, State, Input> 的价值不在 UI,而在:
- 持有统一
state - 提供统一命令入口
- 提供 block registry
- 允许 fallback block
这和 mnote 第一阶段要的“无头编辑器容器”是对齐的。
对 mnote 的映射建议:
Node不直接映射前端 DOM 节点State映射EditorDocumentInput第一阶段不必暴露给外部 UI,可先收口成EditorCommandEnvelope
3.2 Command
Command<State> 很适合当 mnote-editor-core 的最小命令执行边界。
建议保留这层思想,但不要照搬 trait 名:
replace_blockinsert_block_afterdelete_blocksplit_blockmerge_with_previousmove_blockindent_blockoutdent_blocktoggle_heading_collapse
这些命令应当最终作用在 EditorDocument 上,而不是作用在 Leptos 组件状态上。
3.3 Block
Block trait 适合借来做“块类型注册 + 输入接管”思路,但当前实现更偏 parser pipeline。
mnote 第一阶段不建议直接照抄,因为我们更需要:
- 树形 block document
- 固定字符串 ID
BlockPropscontent_node- 引用 token
因此这里只借“块处理器是可注册单元”的思路。
3.4 无头执行
这是最值得采用的点。
新主编辑器必须先做无头执行,因为:
- CLI 要共用
- AI 要共用
- Web UI 只是壳
因此 edita-core 的无头执行边界适合直接进入采用矩阵。
4. 不直接采用的部分
4.1 不直接采用其最终 block 形态
原因:
mnote要的是块树,不是只围绕 parser block 运转mnote要保留page_reference / block_reference / media_placeholder / progress_placeholder- 还要和 kernel
content_node边界对齐
4.2 不直接采用其 UI/editor 外壳
原因:
- 我们的 UI 壳后面要接 Leptos / kode
edita-core当前更适合做 headless 胶水参考
5. Spike 结论
edita-core 在 mnote 第一阶段的定位固定为:
- 采用:
Editor - 采用:
Command - 部分采用:
Block - 采用:
无头执行 - 不采用:最终产品 UI
- 不采用:最终文档模型
6. 后续胶水建议
后续实现时,建议在 mnote-editor-core 里形成下面三层:
EditorDocumentEditorCommandEditorRuntime
其中:
EditorRuntime借edita-core的无头执行边界EditorCommand借CommandEditorDocument不直接复用edita-coreblock 结构,而是自定义
7. 本结论如何进入后续任务
task-051完成判定:- 本文明确写清
Editor / Block / Command / 无头执行 / 胶水
- 本文明确写清
task-055开始时:mnote-editor-core优先实现无头编辑器容器- 不先实现 Leptos UI