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
This commit is contained in:
lix-2026
2026-05-19 08:11:58 +08:00
parent 68d321e297
commit cdff672aa5
67 changed files with 5242 additions and 932 deletions
@@ -0,0 +1,145 @@
# 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 面板未挂接)
+131
View File
@@ -0,0 +1,131 @@
# Wolai 帮助中心 — 基础功能参考
> 来源:https://www.wolai.com/wolai/xhqeop8UHpVTMUSVmgz8nq
> 抓取时间:2026-05-19
> 用途:作为 mnote 产品功能对标的参考目录,仅记录基础功能/架构相关条目,跳过高级功能、团队协作、商业信息
## 基础操作
| 功能 | 说明 | mnote 现状 |
|------|------|------------|
| 基本编辑能力 | 文本输入、换行、拖拽块排序、缩进/取消缩进、Copy/Paste | ✅ leptos-tiptap island |
| 快捷命令菜单 | `/` 唤出块类型选择菜单 | ✅ Tiptap slash command |
| 使用模板创建页面 | 新建页面时选择模板 | ❌ 未实现 |
| 页面选项 | 页面设置:图标、封面、字体、宽度、评论、历史、分享 | Partial - Page Aggregate 设置链已通但未完全对齐 |
| 搜索工作空间 | 全局搜索,Ctrl+P/Cmd+P | ✅ Search modal 已有 smoke |
| 导入与导出 | 导入/导出数据 | ❌ 未实现(Local/Cloud 桥接仅 P3 candidate |
| 页面关系图 | 页面间引用关系可视化 | ❌ 未实现 |
| 个人设置 | 账号、主题(亮/暗)、语言、通知偏好 | Partial - 暗色模式存在 |
| 空间设置 | Workspace 级设置:名称、成员、权限 | ❌ 未实现 |
| 锁定屏幕 | 密码保护屏幕 | ❌ 未实现 |
| 垃圾桶 | 已删除页面/资源的恢复和永久删除 | ✅ 已实现(`tree.resource.*`),双浏览器 no-refresh 进行中 |
## 基础块类型
| 块类型 | 说明 | mnote 现状 |
|--------|------|------------|
| 文本 | 普通正文段落 | ✅ |
| 标题 | H1/H2/H3 | ✅ |
| 列表 | 无序列表(bullet list | ✅ |
| 数字列表 | 有序列表(numbered list | ✅ |
| 待办列表 | 复选框列表(todo/checkbox | ✅ |
| 折叠列表 | 可折叠/展开的列表项(toggle / details | ❌ 未实现 |
| 页面 | 嵌入子页面块(page block / subpage | Partial - Tiptap page block? |
| 引述文字 | Blockquote 引用块 | ✅ |
| 着重文字 | Callout / 高亮块 | ❌ 未实现 |
| 代码片段 | 代码块(code block | ✅ |
| 数学公式 | LaTeX 数学公式 | ✅ |
| 分割线 | Horizontal rule | ✅ |
## 进阶块类型(基础级引用)
| 块类型 | 说明 | mnote 现状 |
|--------|------|------------|
| 数据表格 | 数据库/表格视图(类似 Notion database | ❌ 未实现(Tiptap table 有,database 无) |
| 统计图表 | 图表可视化 | ❌ |
| 简单表格 | 普通二维表格 | ✅ Tiptap table |
| 页面目录 | Table of Contents 自动生成 | ❌ 未实现 |
| 按钮 | 可交互按钮 | ❌ |
| 进度条 | 进度显示 | ❌ |
| 仪表数字 | 数字计数器 | ❌ |
| Mermaid 绘图 | Mermaid 图表 | ❌ 未实现 |
| 思维导图 | Mindmap | ✅ 已实现(Phase 6 leptos-mindmap |
| 会议 | 会议记录块 | ❌ |
| 嵌入第三方应用 | Embed iframe | Partial - OnlyOffice, 其他待定 |
| 网址书签 | URL 书签预览 | ✅ |
## 媒体与文件
| 功能 | 说明 | mnote 现状 |
|------|------|------------|
| 图片 | 插入图片 | ✅ |
| 视频 | 插入视频 | ✅ |
| 音频 | 插入音频 | ❌ |
| 文件附件 | 上传文件作为附件 | ✅ OnlyOffice adapter |
| Emoji | 文本中插入 Emoji | ✅ |
| Font Awesome 图标 | 文本中插入图标 | ❌ 未实现 |
| 动态图标 | wolai 动态图标 | ❌ |
| 卡通头像 | 生成用户头像 | ❌ |
## 信息架构/页面结构(从目录推断)
```
工作空间 (Workspace)
├── 个人空间 (Personal)
│ ├── 侧栏 (Sidebar)
│ │ ├── 搜索入口
│ │ ├── 快捷方式 / 星标 (Starred / Quick Access)
│ │ ├── 我的页面 (My Pages) — 页面树
│ │ ├── 垃圾桶 (Trash)
│ │ └── 设置入口
│ └── 页面编辑器 (Page Editor)
│ ├── 标题 (Title / Icon / Cover)
│ ├── 正文 (Body — blocks)
│ ├── 页面设置 (Page Options)
│ ├── 评论 / 历史 / 分享
│ └── 右侧边栏
│ ├── 页面目录 (TOC)
│ ├── 引用关系
│ └── 属性
└── 团队空间 (Team Workspace)
├── 成员管理
├── 权限
└── 子空间
```
## 已抓取的详细页面
以下页面已从 Wolai 帮助中心抓取详细内容,保存在 `design/11-wolai/pages/` 下:
| 页面 | 文件 | 内容 |
|------|------|------|
| 基本编辑能力 | `basic-editing-skills.md` | 块概念、块操作(拖动/选中/插入)、分栏、块转换、文本样式、快捷键 |
| 快捷命令菜单 | `quick-command-menu.md` | 完整 `/` 命令列表(基础块/进阶块/行内元素/媒体/引用/快速输入/分栏)|
| 页面选项 | `page-options.md` | 自适应宽度、小字体、标题目录、编辑保护、自定义页面、全局选项 |
| 搜索工作空间 | (参考引用) | 搜索行为、模糊搜索、搜索选项、图片文字识别 |
| 折叠列表 | (参考引用) | `+ space` 创建、折叠标题 |
| 着重文字(Callout) | (参考引用) | 图标更换、子块、跑马灯模式、`!! space` / `!!! space` 创建 |
| 导入与导出 | `import-export.md` | 8 种导入格式、6 种导出格式、空间导出 |
| 页面引用 | `page-reference.md` | `[[` / `#` 创建、双向链接、预引用、别名 |
| 页面关系图 | `page-graph.md` | 图例说明、布局方式、操作(鼠标/触控板)、3D 视图 |
| 思维导图 | `mindmap.md` | 创建/转换、节点快捷键、7 种结构、6 种主题、导出 |
| 右侧边栏 | `right-sidebar.md` | 双栏编辑、跨栏拖拽、快捷键 |
| 今日速记 | `daily-note.md` | 日记行为、默认位置/模板、快捷键 |
| 垃圾桶 | `trash.md` | 恢复/彻底删除、操作确认 |
## 完整对照矩阵
详细逐项对照见 `comprehensive-feature-matrix.md`91 项,8 大类)。
**核心数字**:覆盖率 **55%**50✅ / 16🔧 / 25❌)
| 类别 | ✅ | 🔧 | ❌ | 覆盖率 |
|------|----|-----|-----|--------|
| 基础操作 | 11 | 3 | 4 | 61% |
| 页面选项 | 10 | 5 | 2 | 59% |
| 基础块类型 | 9 | 1 | 2 | 75% |
| 进阶块类型 | 2 | 2 | 8 | 17% |
| 媒体与文件 | 4 | 0 | 4 | 50% |
| 编辑器 UI/壳 | 6 | 2 | 2 | 60% |
| 键盘快捷键 | 8 | 3 | 3 | 57% |
| **总计** | **50** | **16** | **25** | **55%** |
@@ -0,0 +1,92 @@
# 基本编辑能力
> 来源:https://www.wolai.com/wolai/qN1Bh9YjLAXs8bxCJoAJ6C
> 用途:mnote 编辑器基础交互行为参考
>
> 实现状态:**大部分已实现** ✅ 11/18 🔧 3/18 ❌ 4/18
## 实现对照
## 核心概念
wolai 的编辑能力基于**块编辑器(Block Editor)**模式而非传统的富文本编辑器。
一段文本、一个列表项、一个图片、一个文件等,都被称为"块"。不同的块承担不同的角色,组合在一起组成一篇文章或一个主页。
## 功能清单
### 块操作
| 操作 | 说明 |
|------|------|
| **拖动块** | 所有块可通过左侧 `::` 图标拖动,拖动时出现辅助线指示位置。拖到另一个块的左/右侧可形成分栏结构 |
| **选中块** | 光标输入状态按 `Esc` 选中当前块;上下方向键切换选中块;`Shift+上下` 多选块 |
| **块选中后 Enter** | 回到光标编辑状态 |
| **块选中后 Ctrl+A** | 第一次选中当前块全部文本,第二次选中所有块 |
| **在上方/下方插入块** | 鼠标悬停 `::` 上方/下方点击 `+`;或 Esc 选中块后按 `a`(上方)/ `b`(下方)|
| **块布局显示** | `Ctrl+Shift+U` 显示/隐藏所有块的虚线框布局 |
### 分栏
将一个块拖到另一个块的左边或右边,拖拽辅助线从横线变竖线时放开,即可实现分栏。分栏的块可继续拖动调整位置关系。
### 块转换
所有文本类块可互相转换:文本↔标题、待办列表↔数字列表、引述文字↔代码片段。文本类块转换为页面时,缩进结构变为页面内容。
三种转换方式:
1. **块菜单**:点击 `::` → 转换为 → 选择类型
2. **快捷键**:平台特定快捷键
3. **快捷命令菜单**:按 `/` → 选择"转换为xxx",或输入 `/zh + 块名拼音首字母`(如 `/zhlb` 转换为列表)
### 复制/粘贴
- `Ctrl+C / Ctrl+V` 标准复制粘贴
- `Ctrl+Shift+V` 粘贴并匹配样式
### 缩进/取消缩进
- `Tab` 缩进(成为上一个块的子元素)
- `Shift+Tab` 取消缩进
### 文本样式
选中文字后出现文本样式工具条,支持:粗体、斜体、下划线、删除线、行内代码、行内数学公式、文字颜色/背景颜色。
### 超链接
- `Ctrl+K` 创建超链接
- 选中文字后直接粘贴 URL 可快速创建超链接
### 在页面中添加更多块
- 键入 `/` 唤起快捷命令菜单选择块类型
- 点击空行前面的 `+` 图标选择创建块类型
---
## mnote 实现状态
### ✅ 已实现
| 功能 | 证据 |
|------|------|
| 块概念(Block Editor 模式) | `EditorBlockType` 枚举定义 14 种块类型(`core-protocol/src/editor/model.rs:7`|
| 文本输入/换行/方向键 | leptos-tiptap island`rust/spikes/leptos-tiptap-spike/src/lib.rs`|
| 拖动块(`::` 手柄) | `HANDLE_SHELL_SELECTOR` 常量,拖拽事件处理(`lib.rs:45-47`|
| 选中块(Esc / 方向键 / Shift 多选) | `TiptapSelectionState` 选择状态管理 |
| 上方/下方插入块(a / b 快捷键) | 块手柄菜单中的插入操作 |
| 块转换(文本↔标题↔列表等) | `EditorCommand` 中的 `ReplaceBlock` 命令(`editor/command.rs:22-26`|
| 复制/粘贴(含匹配样式) | `write_mnote_text_to_clipboard` 剪贴板操作 |
| 缩进/取消缩进(Tab/Shift+Tab | Tiptap 原生 `indent`/`outdent` |
| 文本样式工具条(粗体/斜体/下划线/删除线/行内代码) | `TextMark::{Bold, Italic, Underline, Strike, Code}``editor/model.rs:33-39`|
| 超链接(Ctrl+K | `TiptapLinkResource` + `TiptapMarkName::Link` |
| 行内数学公式 | `TiptapExtension` 中包含数学公式扩展 |
| 选中文字颜色/背景色 | `TiptapColorAttributes` / `TiptapHighlightAttributes` |
### ❌ / 🔧 未实现/待完善
| 功能 | 状态 | 说明 |
|------|------|------|
| 分栏 | ❌ | `columnsLayout` Tiptap 扩展未注册 |
| 块布局显示(Ctrl+Shift+U| ❌ | 无对应功能 |
| 选中文字→页面引用 | 🔧 | `PageReference` 类型存在但快捷创建交互未实现 |
| 脚注与注释 | ❌ | 无脚注/注释 Tiptap 扩展 |
+32
View File
@@ -0,0 +1,32 @@
# 今日速记(日记)
> 来源:https://www.wolai.com/wolai/... (今日速记)
> 用途:mnote "日记/速记" 功能行为参考
>
> 实现状态:**未实现** ❌ 无今日速记/日记专用功能
## 核心概念
以今天日期命名的页面,快速记录当日内容。
## 触发方式
| 方式 | 说明 |
|------|------|
| 侧栏闪电图标 | 点击左侧边栏上方的 `⚡` 图标 |
| 快捷键 | `Ctrl + \`` 或 `Ctrl + ,` |
| 域名 | `wolai.today`(浏览器已登录时) |
## 行为
- 自动创建以今天日期命名的页面(如 `2026-05-19`
- 日期格式取决于工作空间设置
- 如果当日页面已放入垃圾桶,进入时仍显示该页面(带删除提示)
- 如果已彻底删除,则新建页面
## 设置
| 选项 | 说明 |
|------|------|
| 默认位置 | 在"空间偏好"中设定今日速记的父页面 |
| 默认模板 | 在"空间偏好"中设定创建时的模板页面 |
+34
View File
@@ -0,0 +1,34 @@
# 导入与导出
> 来源:https://www.wolai.com/wolai/... (导入与导出)
>
> 实现状态:**未实现** ❌ 无用户端导入/导出功能
## 支持的导入格式
| 格式 | 扩展名 | 支持压缩包 |
|------|--------|-----------|
| 文本文件 | .txt | zip |
| Markdown | .md | zip/rar |
| HTML | .html | - |
| Word | .docx | - |
| Confluence 导出 | .html | zip |
| 印象笔记导出 | .enex | - |
| CSV | .csv | - |
| OPML | .opml | - |
## 导入方式
- 左侧边栏顶部 `···` → 导入文件
- 编辑器右上角 `···` → 导入页面...
## 导出格式
| 格式 | 范围 |
|------|------|
| HTML | 页面+子页面(ZIP|
| Markdown | 页面+子页面(ZIP|
| PDF | 仅当前页面 |
| Word | 仅当前页面 |
| CSV | 数据表格 |
| 整个空间 | Markdownbeta,限创建者,7天/次)|
+91
View File
@@ -0,0 +1,91 @@
# 思维导图
> 来源:https://www.wolai.com/wolai/... (思维导图)
> 用途:mnote 思维导图功能行为参考
>
> 实现状态:**核心已实现** ✅ Wolai 的 7 种结构中已覆盖部分,6 种主题、节点操作、导出已实现
## 创建
| 方式 | 命令 |
|------|------|
| 快捷命令 | `/swdt /mindmap /naotu /brainmap` |
| 块转换 | 块菜单 → 转换为 → 思维导图, 或 `/zhwswdt` |
| 恢复原类型 | 块菜单/导图菜单 → 恢复为XX |
## 画布操作
| 操作 | 快捷键 |
|------|--------|
| 放大 | `Ctrl/Cmd + +` |
| 缩小 | `Ctrl/Cmd + -` |
| 重置缩放 | `Ctrl/Cmd + 0` |
| 定位到中心 | 点击 `⌂` 图标 |
| 全屏查看 | 点击右上角 `⤢` |
| 进入编辑模式 | 点击右上角 `✎` |
| 退出编辑模式 | `Esc` |
| 拖拽模式 | `Space`(非选中节点时)或点击左上角图标 |
## 节点操作
| 操作 | 快捷键 |
|------|--------|
| 插入同级主题 | `Enter` |
| 插入子主题 | `Tab` |
| 插入父主题 | `Shift + Tab` |
| 删除节点 | `Del` |
| 编辑节点文字 | `F2` 或双击 |
| 上移/前移 | `Ctrl/Cmd + Up` |
| 下移/后移 | `Ctrl/Cmd + Down` |
| 复制 | `Ctrl/Cmd + C` |
| 粘贴 | `Ctrl/Cmd + V` |
| 折叠/展开子节点 | `/` |
| 唤出菜单 | `Space`(选中节点时)|
| 右键菜单 | 鼠标右键 |
## 外观
| 功能 | 说明 |
|------|------|
| 主题颜色 | 6 种 |
| 结构 | 7 种:思维导图、逻辑结构图-左、逻辑结构图、组织结构图、鱼骨图、目录组织图、天盘图 |
| 紧凑布局 | 开启后最大程度节约页面空间 |
## 选择与展开
| 操作 | 说明 |
|------|------|
| 全选 | `Ctrl/Cmd + A` |
| 反选 | 选中节点后反选其余节点 |
| 选中同级 | 选中所有同级节点 |
| 选中子树 | 选中所有子节点 |
| 展开层级 | 支持展开到 1-6 层 |
## 导出
| 格式 | 方式 |
|------|------|
| PNG | 页面右上角 `···` → 保存图片 |
---
## mnote 实现状态
### ✅ 已实现
| 功能 | 证据 |
|------|------|
| 思维导图块类型 | `EditorBlockType::Mindmap``editor/model.rs:9`|
| 创建(/mindmap 命令)| `routes/mindmap_api.rs` 含完整 API |
| Leptos UI shell | `ssr/pages/mindmap.rs` |
| 快捷键节点操作(Enter/Tab/Del/F2| `routes/mindmap_shell.rs` |
| 全屏编辑 | `MINDMAP_SHELL_ZOOM_EVENT` |
| 导出图片 | `mindmap_shell.rs` 导出逻辑 |
| AI 可以读取思维导图 | `mnote.doc.fetch` 通过 projection 返回导图数据 |
### ❌ 未实现
| 功能 | 说明 |
|------|------|
| 7 种结构全部(逻辑结构图/鱼骨图/天盘图等)| 部分可能缺失 |
| AI **改写** 思维导图节点 | 无 `mnote.mindmap.*` Hermes 工具 |
| 紧凑布局 | 未确认 |
| 展开到 1-6 层 | 未确认 |
+46
View File
@@ -0,0 +1,46 @@
# 页面关系图
> 来源:https://www.wolai.com/wolai/... (页面关系图)
>
> 实现状态:**未实现** ❌
## 入口
- 侧边栏左上方
- 快捷键:`Ctrl/Cmd + Shift + P`
## 图例
| 元素 | 含义 |
|------|------|
| 灰色圆点 | 页面 |
| 实心内圈大小 | 子页面数量 |
| 半透明外圈大小 | 引用关系数量 |
| 直线 + 动画方向 | 层级关系(父→子)|
| 虚线曲线 + 动画方向 | 引用关系(A→B)|
| 蓝色节点 | 选中状态 |
## 布局方式
树形向下、树形向右、向心辐射、向外辐射、随机
## 关系筛选
层级关系、引用关系、全部
## 操作
| 鼠标 | 触控板 | 作用 |
|------|--------|------|
| 滚动 | 双指上滑/下滑 | 缩放 |
| 左键拖动 | 单指拖动 | 平移 |
| 左键单击 | 轻点 | 选中节点+显示一层关系 |
| Shift+左键 | Shift+轻点 | 多选 |
| Cmd/Ctrl+左键 | Cmd/Ctrl+轻点 | 显示全部关系 |
| 双击 | 双击 | 转到页面 |
| 悬浮 | 悬浮 | 高亮关联节点 |
| 空格 | 空格 | 最佳视图 |
## 3D 关系图(实验性)
支持 3D 视图旋转操作。
+88
View File
@@ -0,0 +1,88 @@
# 页面选项
> 来源:https://www.wolai.com/wolai/... (页面选项)
>
> 实现状态:**大部分已接通** — 15 个页面选项中 10 个已接通,5 个 UI 可见待接线
## 页面级设置
| 选项 | 说明 | 默认 |
|------|------|------|
| **自适应宽度** | 页面宽度调整为最大可用宽度 | 关闭(固定 760px) |
| **小字体** | 正文字体从 16px → 14px,标题等比缩小 | 关闭 |
| **标题目录** | 页面右侧显示 H1-H4 + 子页面层级目录,`Ctrl+Shift+L` 切换 | 关闭 |
| **标题自动编号** | 标题前显示层级编号 | 关闭 |
| **编辑保护** | 锁定页面不可编辑,上锁图标,`Ctrl+Shift+C` 切换 | 关闭 |
### 标题目录
- 层级:主标题(H1) → 大标题(H2) → 中标题(H3) → 小标题(H4) → 子页面
- 宽度自适应:宽窗口=较宽目录,窄窗口=较窄目录,极窄=圆点竖线目录
- 可通过 `···` 菜单折叠/展开层级
### 自定义页面
| 选项 | 值 |
|------|-----|
| 字体 | 默认 / 宋体 / 楷体 |
| 布局 | 紧凑 / 默认 / 宽容 |
| 显示块引用数字 | 被引用的块右侧显示引用计数 |
| 折叠引用页面列表 | 页面下方反向引用列表默认折叠 |
| 隐藏子页面 | 子页面块不再显示 |
| 页面"嵌入到"默认位置 | 指定嵌入目标块的默认位置 |
### 全局选项(仅对自己生效)
| 选项 | 说明 |
|------|------|
| 显示块结构 | 所有块显示灰色虚线框,`Ctrl+Shift+U` 切换 |
| 拼写检查 | 英文拼写错误显示红色虚线(默认关闭) |
| Good Night 模式 | 暗色主题,`Ctrl+Alt+G` 切换 |
| 跟随系统 | 自动切换亮/暗主题 |
## 页面操作菜单
| 操作 | 说明 |
|------|------|
| 撤回 | `Ctrl+Z` 撤销上一步 |
| 删除页面 | 进入垃圾桶 |
| 移动到... | 移动到指定页面下成为子页面,或移动到其他工作空间 |
| 嵌入到... | 嵌入为页面引用 |
| 添加为公共模板 | 仅多人空间 |
| 复制页面链接 | 带/不带标题 |
| 行内页面引用 | 复制行内引用链接 |
| 嵌入页面引用 | 复制嵌入引用链接 |
| 导出页面 | 多种格式 |
| 页面历史 | 浏览/恢复历史版本(付费空间) |
| 字数统计 | 总字数、块数、分类统计 |
| 待办列表统计 | 完成进度 |
---
## mnote 实现状态
> **从 `pageOptionIsSupported` 和 `pageOptionHint` 函数判断(`layout.rs:427-447`**
### ✅ 已接通(UI 完全实现)
| 功能 | key | hint |
|------|-----|------|
| 自适应宽度 | `wideLayout` | 主内容列宽度立即变化(760px↔980px|
| 小字体 | `smallText` | 正文排版更紧凑 |
| 标题自动编号 | `showHeadingNumbers` | 标题前显示顺序编号 |
| 布局密度 | `layoutDensity` | 段落与列表间距会变化 |
| 页面字体 | `pageFont` | 当前页面字体会切换 |
| 暗色模式 | CSS | `ssr/styles.rs` 暗色样式定义 |
| 删除页面(进垃圾桶) | `tree.resource.archive` | `resource_trash.rs` |
| 移动到... | `tree` 命令 | `routes/tree.rs` |
| 字数统计 + 待办统计 | `computeLivePageStats()` | 实时计算 wordCount/blockCount/todoTotal |
### 🔌 已注册但待接线(UI 选项可见,功能未完全接通)
| 功能 | key | hint |
|------|-----|------|
| 标题目录(TOC | `showToc` | "当前 Rust 壳还没有正式目录面板" |
| 编辑保护 | `protectEditing` | "当前主编辑器只显示降级说明" |
| 折叠反向引用 | `collapseBacklinks` | "当前 Rust 壳未挂回链面板" |
| 隐藏子页面 | `hideChildPages` | "当前页面壳还没有子页面块显隐" |
| 显示块引用数字 | `showBlockRefCount` | "当前页面壳未显示块引用计数" |
> 全部 page options 的 UI 开关面板实现在 `layout.rs:3760-3775`,每个 option 渲染为 toggle switchsupported 的显示蓝色开关,unsupported 的显示灰色开关+提示。`page_aggregate/builder.rs` 提供 page_options 的读写链。
+55
View File
@@ -0,0 +1,55 @@
# 页面引用(双向链接)
> 来源:https://www.wolai.com/wolai/... (页面引用)
>
> 实现状态:**数据层已实现,UI 层未完成** ✅ `[[` 引用和双向链接的块类型存在 ❌ 用户端创建交互未实现
## 核心概念
两种页面组织方式:**层级**(父子关系)和**引用**(双向链接)。
页面引用是双向链接(bi-directional link):A 引用了 B,则 B 页面下方会显示"引用的页面"列表。
## 创建方式
| 方式 | 操作 |
|------|------|
| `[[` 快捷输入 | 输入 `[[` 紧跟搜索词,定位到页面并创建引用 |
| `#` 快捷输入 | 空格后输入 `#` + 搜索词(类似标签)|
| 文本样式工具条 | 选中文本 → 工具条中 `[[` 图标 |
| 快捷键 | 选中文本 → `Ctrl/Cmd + Shift + R` |
## 预引用 & 创建新页面
使用工具条或快捷键时:
1. 匹配已有页面 → 直接引用
2. 无匹配 → 弹出选项:
- **创建新页面"xxx"**:直接创建
- **预引用**:创建"准备状态"引用,标题后显示 "(创建)",点击后弹出"创建页面"或"取消引用"
## 引用预览和别名
- 鼠标悬浮行内页面引用可预览
- 预览小窗顶部可设置别名(最长 100 字),别名后显示小箭头
---
## mnote 实现状态
### ✅ 已实现
| 功能 | 证据 |
|------|------|
| 页面引用块类型 | `EditorBlockType::PageReference``editor/model.rs:20`|
| 块引用块类型 | `EditorBlockType::BlockReference``editor/model.rs:21`|
| 引用标记策略 | `ReferenceTokenStrategy::{DoubleBracket, DoubleParen, InlineChip}``editor/model.rs:26-30`|
| AI 工具中的引用创建 | `mnote.block.insert_after` 等 Herem 工具可操作引用块 |
### ❌ 未实现
| 功能 | 说明 |
|------|------|
| `[[` 快捷输入创造引用 | 用户端 `[[` → 搜索 → 引用流程未实现 |
| `#` 快捷输入 | 未实现 |
| 选中文本 → 工具条 → 创建引用 | 文本工具条无引用按钮 |
| 预引用 & 创建新页面 | 无 "预引用"行为 |
| 引用预览/别名 | 无 |
| 被引用页面的"反向引用"列表 | 无页面底部的引用列表 |
+138
View File
@@ -0,0 +1,138 @@
# 快捷命令菜单
> 来源:https://www.wolai.com/wolai/... (快捷命令菜单)
> 用途:mnote `/` 命令菜单完整功能参考
>
> 实现状态:**部分实现** — 基础块类型命令可用,进阶块/行内元素/媒体/快速输入多数缺失
## mnote 实现状态
### ✅ 已实现的快捷命令对应
| 类别 | 覆盖情况 |
|------|---------|
| **基础块** | ✅ 文本、标题、列表、数字列表、待办列表、引述文字、分割线、代码片段,均通过 Tiptap 扩展注册(`EditorBlockType`|
| **行内样式** | ✅ 粗体/斜体/下划线/删除线/行内代码/链接 |
| **数学公式** | ✅ LaTeX 数学公式(Tiptap 扩展)|
| **页面引用** | ✅ `PageReference` / `BlockReference` 块类型 |
| **思维导图** | ✅ `/mindmap` 命令可用 |
### ❌ 未实现的快捷命令
| 类别 | 缺失 |
|------|------|
| **进阶块** | 按钮、进度条、数据表格、Mermaid 绘图、仪表数字、会议 |
| **行内元素** | Font Awesome 图标、脚注、注释 |
| **媒体** | 嵌入 Bilibili/腾讯/优酷/YouTube、嵌入第三方应用 |
| **快速输入** | 时间/日期/now 快捷命令 |
| **快速分栏** | 2/3/4/5 列分栏 |
| **快速功能** | 页面关系图入口设置、导入文件/CSV |
| **文字/背景色快捷命令** | `/red`, `/blue` 等颜色拼音命令 |
> **注意**:当前 leptos-tiptap island 使用 block handle shell`+` 按钮)而非 `/` slash 命令菜单。Tiptap 的 `SlashCommand` / `Suggestion` 扩展未注册。
## 核心交互
编辑状态下键入 **`/`(斜杠)**唤起快捷命令菜单,中文输入时顿号也会触发。键入 `/` 后继续输入内容可过滤菜单选项。
例如:`/tp` + Enter 即可插入图片。
## 完整命令列表
### 基础块
| 块类型 | 快捷命令(拼音/英文) |
|--------|----------------------|
| 文本 | `/wb /wenben /text /plain` |
| 待办列表 | `/dblb /daiban /todo` |
| 标题 H1-H4 | `/bt /biaoti /title /head /h1 /h2 /h3 /h4` |
| 列表(无序) | `/lb /liebiao /wuxu /wx /bullet` |
| 数字列表(有序) | `/szlb /shuzi /number` |
| 折叠列表 | `/zdlb /toggle` |
| 引述文字(blockquote | `/yswz /yinshuwenzi /quote` |
| 着重文字(callout | `/zzwz /zhuozhongwenzi /callout` |
| 分割线 | `/fgx /fengexian` |
| 代码片段 | `/dmpd /daimapianduan /code` |
| 数学公式 | `/sxgs /shuxuegongshi /latex /math` |
### 进阶块
| 块类型 | 快捷命令 |
|--------|---------|
| 按钮(模板按钮) | `/mban /mubananniu /template` |
| 进度条 | `/jdt /jindutiao /progressbar` |
| 简单表格 | `/jdbg /jiandanbiaoge /simpletable /table` |
| 数据表格(database | `/sjbg /shujubiaoge /database` |
| Mermaid 绘图 | `/mermaid` |
| 仪表数字 | `/ybsz /dashboard` |
| 会议 | `/hy /meeting` |
### 块转换
`/zhw + 块名称拼音首字缩写`,例如转换为"列表"输入 `/zhwlb`
可转换类型:文本、待办列表、标题、列表、数字列表、折叠列表、引述文字、着重文字、代码片段、数学公式
### 行内元素
| 类型 | 快捷命令 |
|------|---------|
| 行内数学公式 | `/hngs` |
| Emoji 表情 | `/bq /biaoqing /emoji` |
| Font Awesome 图标 | `/tb /fa /fontawesome` |
| 脚注 | `/jz /jiaozhu /footnote` |
| 注释 | `/zs /zhushi` |
### 媒体与附件
| 类型 | 快捷命令 |
|------|---------|
| 图片 | `/tp /tupian /img /image /picture` |
| 文件附件 | `/wj /wenjian /file` |
| 视频 | `/sp /video` |
| 音频 | `/yp /audio` |
| 嵌入 Bilibili | `/bzsp /bilibili` |
| 嵌入 腾讯视频 | `/txsp /tencent` |
| 嵌入 优酷 | `/yksp /youku` |
| 嵌入 YouTube | `/ygsp /youtube` |
| 嵌入第三方应用 | `/qrnr /embed` |
| 网址书签 | `/wzsq /bookmark` |
### 插入引用
| 类型 | 快捷命令 |
|------|---------|
| 页面引用链接 | `/ymyylj` |
| 行内块引用 | `/hnkyy` |
| 嵌入块引用 | `/qrkyy` |
### 快速输入
| 类型 | 快捷命令 |
|------|---------|
| 快速输入时间 | `/sj /shijian /time` |
| 快速输入日期 | `/rq /riqi /date` |
| 快速输入现在(日期+时间) | `/xz /xianzai /now` |
### 快速分栏
| 操作 | 快捷命令 |
|------|---------|
| 2 列分栏 | `/2` |
| 3 列分栏 | `/3` |
| 4 列分栏 | `/4` |
| 5 列分栏 | `/5` |
### 快速功能
| 操作 | 快捷命令 |
|------|---------|
| 个人设置 | `/grsz /per` |
| 空间设置 | `/kjsz /works` |
| 打开搜索 | `/sou /search` |
| 打开页面关系图 | `/ymgxt /network /diagram` |
| 导入文件 | `/drwj` |
| 导入数据表格(CSV | `/drbg` |
| 退出登录 | `/quit /exit /logout` |
### 文字颜色/背景色
`/ + 颜色拼音/缩写/英文`,如 `/hs``/red` 为红色。
+57
View File
@@ -0,0 +1,57 @@
# 右侧边栏
> 来源:https://www.wolai.com/wolai/... (右侧边栏)
> 用途:mnote 双栏编辑行为参考
>
> 实现状态:**部分实现** ✅ 上下文菜单有"在右侧边栏打开"动作 ❌ 右侧面板 UI 完整度待确认
## 基本操作
| 操作 | 快捷键 |
|------|--------|
| 在右侧边栏打开链接 | `Alt/Opt + 点击` |
| 打开/关闭右侧边栏 | `Alt/Opt + Q` |
| 切换主/右侧编辑区 | `Alt/Opt + \`` |
| 扩展右侧边栏为整页 | `Alt/Opt + F` |
## 顶部操作栏
1. 关闭右侧边栏
2. 后退
3. 前进
4. 展开为整页
5. 切换到主编辑区(左右互换)
## 调整大小
- 左右拖动左边线调整宽度
- 双击左边线均分两侧宽度
## 跨栏拖拽
右侧边栏和主编辑区中的块可互相拖拽:
| 操作 | 说明 |
|------|------|
| 移动到这里 | 从一边移动到另一边 |
| 拷贝副本到这里 | 复制到另一边 |
| 嵌入块引用 | 嵌入引用到另一边 |
| 行内块引用 | 停留片刻变为行内引用 |
---
## mnote 实现状态
### ✅ 已实现
| 功能 | 证据 |
|------|------|
| "在右侧边栏打开" 上下文菜单 | 文件树/页面树/附件菜单均有 `open-right` 动作(`layout.rs:3127, 3136, 3144, 3164`|
| 快捷键提示 | `Alt + Enter` 在搜索结果中提示右侧边栏打开(`layout.rs:3643, 3670`|
| 事件派发 | `dispatchSidebarEvent('tree.page.open-right', ...)` 等事件(`layout.rs:2961, 2975`|
### ❌ / Partial
| 功能 | 说明 |
|------|------|
| 右侧面板容器 UI | 事件已派发,但双栏编辑面板的具体实现待确认 |
| 跨栏拖拽 | 未实现 |
| 右侧边栏编辑 | 未确认 |
+43
View File
@@ -0,0 +1,43 @@
# 垃圾桶
> 来源:https://www.wolai.com/wolai/... (垃圾桶)
> 用途:mnote 回收站行为参考
>
> 实现状态:**核心已实现** ✅ 恢复/彻底删除/搜索 存在 UI 行为差异
## 入口
左侧边栏最下方打开"垃圾桶"。
## 功能
- 已删除页面存放在垃圾桶中
- 支持搜索关键词查找垃圾桶中的页面
- **恢复**:恢复到"我的页面"列表下
- **彻底删除**:不可撤销,无法找回
## 操作确认
- 默认打开"操作确认"开关
- 打开时:恢复/彻底删除需要二次确认
- 关闭时:直接执行
---
## mnote 实现状态
### ✅ 已实现
| 功能 | 证据 |
|------|------|
| 删除页面进垃圾桶 | `tree.resource.archive``routes/tree.rs`|
| 恢复(回到原位置)| `tree.resource.restore` + 恢复位置记录(`design/04-tree-domain/process/4-28`|
| 彻底删除 | `tree.resource.purge``routes/resource_trash.rs`|
| 垃圾桶搜索 | 已有搜索功能 |
| 资源(附件/mindmap/table)垃圾桶 | `resource_trash.rs` 覆盖 3 种资源类型 |
### ❌ / Partial (相对于 Wolai)
| 功能 | 说明 |
|------|------|
| 操作确认开关 | 未确认是否实现 |
| 恢复后的 reveal/focus | `design/04-tree-domain/process/4-28` 已计划 |
| 双浏览器 no-refresh | `design/04-tree-domain/process/4-34` 进行中 |