Files
mnote/design/11-wolai/comprehensive-feature-matrix.md
T
lix-2026 cdff672aa5 feat: align local-first workspace direction
Document the VSCode-like local-first product shape, demote Convex to a control-plane role, and retire stale architecture drafts.

Add local workspace migration/export references plus smoke coverage for no-Convex managed workspace startup, local markdown title/body/options persistence, asset upload behavior, and Convex fixture export.

Verification: git diff --cached --check; node scripts/check-local-first-convex-guard.js --staged; node scripts/task444-convex-workspace-export-local-fixture-smoke.js; node scripts/task166-local-first-managed-workspace-no-convex-smoke.js; node scripts/task167-local-markdown-title-body-options-no-convex-smoke.js
2026-05-19 08:11:58 +08:00

146 lines
8.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Wolai 基础功能 ↔ mnote 实现完整对照矩阵
> 生成时间:2026-05-19
> 说明:逐项对照 Wolai 帮助中心基础功能和当前 mnote 代码,每项标注 ✅/❌/🔧 并附证据路径
## 一、基础操作
| # | Wolai 功能 | 状态 | mnote 证据 |
|---|-----------|------|-----------|
| 1 | **基本编辑**(输入/换行/方向键) | ✅ | leptos-tiptap island ProseMirror 编辑器 |
| 2 | **块概念**Block Editor 模式) | ✅ | `EditorBlockType` 枚举定义 15 种块(`core-protocol/src/editor/model.rs:7-22`|
| 3 | **拖动块**:: 手柄拖拽) | ✅ | `HANDLE_SHELL_SELECTOR` / `DragEvent``lib.rs:45, 136`|
| 4 | **选中块**Esc/方向键/Shift多选) | ✅ | `TiptapSelectionState` 选择状态(`lib.rs`|
| 5 | **上方/下方插入块**(+按钮 / a/b快捷键) | ✅ | block handle shell + 快捷键处理 |
| 6 | **分栏**(拖拽到左/右侧) | ❌ | `columnsLayout` Tiptap 扩展未注册 |
| 7 | **块布局显示**Ctrl+Shift+U | 🔧 | `pageOptionIsSupported` 未包含此选项 |
| 8 | **块转换**(文本↔标题↔列表↔页面) | ✅ | `EditorCommand::ReplaceBlock``editor/command.rs:22`|
| 9 | **块菜单**(点击 :: → 转换/颜色/操作) | 🔧 | 上下文菜单存在,但块菜单功能可比 |
| 10 | **复制/粘贴** | ✅ | `write_mnote_text_to_clipboard` |
| 11 | **缩进/取消缩进**Tab/Shift+Tab | ✅ | Tiptap 原生支持 |
| 12 | **文本样式工具条**(粗/斜/下划/删除线/行内代码) | ✅ | `TextMark::{Bold, Italic, Underline, Strike, Code}`|
| 13 | **文字颜色/背景色** | ✅ | `TiptapColorAttributes` `TiptapHighlightAttributes` |
| 14 | **超链接**Ctrl+K | ✅ | `TiptapLinkResource` `TiptapMarkName::Link` |
| 15 | **行内数学公式** | ✅ | 数学公式 Tiptap 扩展 |
| 16 | **选中文字 → 页面引用** | 🔧 | `PageReference` 块类型存在,快捷交互待接线 |
| 17 | **块引用** | ✅ | `EditorBlockType::BlockReference` + `TiptapNodeName` 支持 |
| 18 | **脚注与注释** | ❌ | 无脚注/注释扩展 |
## 二、页面选项
| # | 选项 | 状态 | mnote 证据 |
|---|------|------|-----------|
| 1 | **自适应宽度**wideLayout | ✅ 已接通 | `layout.rs:531`: `maxWidth = wideLayout ? '980px' : '760px'` |
| 2 | **小字体**smallText | ✅ 已接通 | `data-page-small-text` attribute`layout.rs:529`|
| 3 | **标题目录**showToc | 🔧 UI可见待接线 | `layout.rs:438` 说"当前 Rust 壳还没有正式目录面板" |
| 4 | **标题自动编号**showHeadingNumbers | ✅ 已接通 | `layout.rs:439` hint: "标题前显示顺序编号" |
| 5 | **编辑保护**protectEditing | 🔧 UI可见待接线 | `layout.rs:447` hint: "只显示降级说明" |
| 6 | **折叠反向引用**collapseBacklinks | 🔧 UI可见待接线 | |
| 7 | **隐藏子页面**hideChildPages | 🔧 UI可见待接线 | |
| 8 | **显示块引用数字**showBlockRefCount | 🔧 UI可见待接线 | |
| 9 | **布局密度**layoutDensity | ✅ 已接通 | hint: "段落与列表间距会变化" |
| 10 | **页面字体**pageFont | ✅ 已接通 | hint: "当前页面字体会切换" |
| 11 | **字数统计** | ✅ | `computeLivePageStats()` 实时计算(`layout.rs:485-507`|
| 12 | **待办统计** | ✅ | `todoTotal` / `todoDone` 统计(`layout.rs:503-506`|
| 13 | **暗色模式** | ✅ | Good Night 模式 / 跟随系统(`layout.rs`|
| 14 | **删除页面**(进垃圾桶) | ✅ | `tree.resource.archive` |
| 15 | **移动到...** | ✅ | `tree` 命令 `routes/tree.rs` |
| 16 | **页面引用链接复制** | ✅ | 上下文菜单"复制页面引用链接"(`layout.rs:3146-3148`|
| 17 | **导出页面** | ❌ | 无导出 UI |
## 三、基础块类型
| # | 块类型 | Wolai 命令 | 状态 | mnote 证据 |
|---|--------|-----------|------|-----------|
| 1 | **文本/段落** | `/wb /wenben /text /plain` | ✅ | `Paragraph` + `TiptapExtension::Paragraph` |
| 2 | **标题 H1-H4** | `/bt /biaoti /h1 /h2 /h3 /h4` | ✅ | `Heading` + `TiptapExtension::Heading` |
| 3 | **列表(无序)** | `/lb /liebiao /wuxu /bullet` | ✅ | `BulletListItem` + `TiptapExtension::BulletList` |
| 4 | **数字列表(有序)** | `/szlb /shuzi /number` | ✅ | `NumberedListItem` + `TiptapExtension::OrderedList` |
| 5 | **待办列表** | `/dblb /daiban /todo` | ✅ | `Todo` + `TiptapExtension::TaskList` + `TiptapExtension::TaskItem` |
| 6 | **折叠列表** | `/zdlb /toggle` `+ space` | ❌ | 无 `Toggle` 扩展 |
| 7 | **页面块(subpage** | 块转换 → 页面 | 🔧 | `PageReference` 类型存在,嵌入页 UI 待确认 |
| 8 | **引述文字(blockquote** | `/yswz /quote` | ✅ | `Quote` + `TiptapExtension::Blockquote` |
| 9 | **着重文字(callout** | `/zzwz /callout` `!! space` | ❌ | 无 `Callout` 扩展 |
| 10 | **代码片段** | `/dmpd /code` | ✅ | `CodeBlock` + `TiptapExtension::CodeBlock` |
| 11 | **数学公式** | `/sxgs /latex /math` | ✅ | LaTeX 公式扩展 |
| 12 | **分割线** | `/fgx /fengexian` | ✅ | `Divider` + `TiptapExtension::HorizontalRule` |
## 四、进阶块类型(基础级)
| # | 块类型 | 状态 | mnote 证据 |
|---|--------|------|-----------|
| 1 | **简单表格** | ✅ | `Table` + `TiptapExtension::Table/TableRow/TableCell/TableHeader` |
| 2 | **数据表格(database** | ❌ | 无 Database/Notion-DB 扩展 |
| 3 | **统计图表** | ❌ | 无 Charts 扩展 |
| 4 | **Mermaid 绘图** | ❌ | 无 Mermaid 扩展 |
| 5 | **思维导图** | ✅ | `Mindmap` + `routes/mindmap_api.rs` + `ssr/pages/mindmap.rs` |
| 6 | **页面目录(TOC** | 🔧 | `Toc` + `TiptapExtension::TocNode` 已注册,但 `showToc` 标注"待接线" |
| 7 | **按钮** | ❌ | 无 Button 扩展 |
| 8 | **进度条** | ❌ | 无 ProgressBar 扩展 |
| 9 | **仪表数字** | ❌ | 无 Dashboard/Counter 扩展 |
| 10 | **会议** | ❌ | 无 Meeting 扩展 |
| 11 | **嵌入第三方应用** | 🔧 | OnlyOffice 已接,其他 iframe embed 待定 |
| 12 | **网址书签** | ❌ | 无 Bookmark 扩展 |
## 五、媒体与文件
| # | 类型 | 状态 | mnote 证据 |
|---|------|------|-----------|
| 1 | **图片** | ✅ | `Image` + `TiptapExtension::Image` + `TiptapImageResource` |
| 2 | **视频** | ✅ | 视频 Tiptap 扩展 |
| 3 | **音频** | ❌ | 无 Audio 扩展 |
| 4 | **文件附件** | ✅ | OnlyOffice adapter + 附件块 |
| 5 | **Emoji 表情** | ✅ | Emoji 选择器 |
| 6 | **Font Awesome 图标** | ❌ | 无 FA 图标选择器 |
| 7 | **动态图标** | ❌ | 无动态图标 |
| 8 | **卡通头像** | ❌ | 仅有文字头像(`layout.rs:7873`: `"L"`|
## 六、编辑器 UI / 壳
| # | 功能 | 状态 | mnote 证据 |
|---|------|------|-----------|
| 1 | **侧栏**(品牌/搜索/页面树) | ✅ | `layout.rs:7801`: "左侧栏 + 内容区的双栏布局" |
| 2 | **浮动 AI 按钮** | ✅ | `wolai-floating-ai` button`layout.rs:7927`|
| 3 | **浮动帮助按钮** | ✅ | `wolai-floating-help` button`layout.rs:7926`|
| 4 | **搜索模态**Ctrl+P | ✅ | 搜索壳 + smoke 验证 |
| 5 | **垃圾桶入口** | ✅ | 侧栏下方入口 |
| 6 | **模板中心** | ❌ | 无模板功能 |
| 7 | **右侧边栏(双栏编辑)** | 🔧 | 上下文菜单有"在右侧边栏打开",面板 UI 待确认 |
| 8 | **今日速记/日记** | ❌ | 无每日速记功能 |
| 9 | **页面关系图** | ❌ | 无关系图可视化 |
| 10 | **导航历史** | 🔧 | 页面上下文菜单含"块历史",但非历史列表 |
## 七、键盘快捷键
| # | 快捷键 | 功能 | 状态 |
|---|--------|------|------|
| 1 | `Ctrl+P` | 搜索 | ✅ |
| 2 | `Ctrl+Shift+L` | 标题目录 | 🔧(选项UI可见但功能待接线)|
| 3 | `Ctrl+Shift+U` | 显示块结构 | ❌ |
| 4 | `Ctrl+Shift+C` | 编辑保护 | 🔧 |
| 5 | `Ctrl+Z` | 撤回 | ✅ |
| 6 | `Ctrl+Shift+V` | 匹配样式粘贴 | ✅ |
| 7 | `Tab` / `Shift+Tab` | 缩进/取消缩进 | ✅ |
| 8 | `Esc` | 选中块 | ✅ |
| 9 | `a` / `b` | 上方/下方插入块 | ✅ |
| 10 | `Enter`(思维导图)| 插入同级节点 | ✅ |
| 11 | `Alt+O` | 右侧边栏打开 | 🔧 |
| 12 | `Alt+Q` | 打开/关闭右侧边栏 | ❌ |
| 13 | `Ctrl+Alt+G` | Good Night 暗色模式 | ✅ |
| 14 | `Ctrl+` | 今日速记 | ❌ |
## 八、汇总
| 类别 | 总数 | ✅ | 🔧 | ❌ | 覆盖率 |
|------|------|----|-----|-----|--------|
| 基础操作 | 18 | 11 | 3 | 4 | 61% |
| 页面选项 | 17 | 10 | 5 | 2 | 59% |
| 基础块类型 | 12 | 9 | 1 | 2 | 75% |
| 进阶块类型 | 12 | 2 | 2 | 8 | 17% |
| 媒体与文件 | 8 | 4 | 0 | 4 | 50% |
| 编辑器 UI/壳 | 10 | 6 | 2 | 2 | 60% |
| 键盘快捷键 | 14 | 8 | 3 | 3 | 57% |
| **总计** | **91** | **50** | **16** | **25** | **55%** |
> 注:🔧 = 存在代码/UI 但功能未完全接通(如标题目录 TOC 扩展已注册但 UI 面板未挂接)