Files
mnote/recycle/design/wolaiplan copy.md
T
2026-04-13 19:21:42 +08:00

80 lines
4.5 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 深度复刻计划 (Wolai Deep Replication Plan)
**目标**:深度复刻 Wolai 的核心体验,重点解决左侧树状侧边栏的 Bug,并完善右侧编辑器的块交互(特别是「转为页面」功能)。
**基准**:严格遵循 `design/ui_react.md``design/PHASE_1.5_TURN_TO_PAGE_EXACT_CLONE.md`
## 1. 现状分析 & 问题定位
当前项目已具备基础骨架(Next.js + Supabase + BlockNote),但在精细度和交互上仍有差距:
* **侧边栏 (Sidebar)**
* 存在 Bug:拖拽抖动、状态同步延迟、无限嵌套渲染可能出错。
* 缺失细节:右键菜单(重命名/删除)、多选操作、精确的 Hover/Active 样式。
* **编辑器 (Editor)**
* 缺失核心功能:「转为页面」互转逻辑。
* 样式细节:BlockNote 默认样式需定制为 Wolai 的蓝色系 (#2563eb)。
## 2. 实施路线图
### 阶段 A: 侧边栏重构与修复 (Sidebar Overhaul)
**目标**:打造丝滑、无 Bug 的无限嵌套文件树。
1. **数据层优化**
* 确保 `documents` 表的 `parent_id` 递归查询高效(使用 Supabase recursive CTE)。
* 实现 `useSidebar` Hook,统一管理展开/折叠状态(持久化到 localStorage)。
2. **交互层重写 (dnd-kit)**
* 使用 `@dnd-kit/core` 替换现有的拖拽逻辑(如果现有不稳定)。
* **解决抖动**:实现 `DragOverlay`,确保拖拽时有清晰的半透明快照。
* **精确落点**:实现 "Drop Indicator"(蓝色横线),明确显示是「插入中间」还是「变为子节点」。
3. **UI 细节复刻**
* **样式**:行高 28px,字体 14px InterHover 背景 `#f5f5f5`,选中背景 `#eef2ff` + 左侧蓝条。
* **图标**:使用 `lucide-react`,文件夹折叠/展开箭头动画(90度旋转)。
* **右键菜单**:实现自定义 Context Menu,包含:重命名、删除、在下方新建页面、复制链接。
### 阶段 B: 编辑器深度定制 (Editor Refinement)
**目标**:实现 Wolai 的「块即页面」核心体验。
1. **样式定制**
* 覆盖 BlockNote 默认 CSS 变量,使用 Wolai 蓝色 `#2563eb` 作为主色(光标、选区、链接)。
* 调整块间距(margin-bottom: 8px)和内边距。
2. **功能:转为页面 (Turn to Page)**
* **后端 API**:实现 `POST /api/documents/create-child`,接收块内容,创建子文档。
* **自定义块**:注册 `PageReference` 块,渲染为蓝色带图标的链接块。
* **菜单集成**
* **Side Menu (:::)**:添加「转换为 -> 页面」选项。
* **Slash Menu (/)**:添加「页面」选项。
* **双向同步**:确保在编辑器中创建子页面后,左侧侧边栏实时更新显示。
### 阶段 C: 全局交互与细节
1. **面包屑导航**:确保点击面包屑能正确跳转,并与侧边栏选中状态同步。
2. **Loading 状态**:页面切换时的顶部进度条(NProgress 风格,蓝色)。
3. **空状态**:新页面显示「无标题」占位符和「按 / 输入命令」提示。
## 3. 技术规范 (Strict Guidelines)
* **CSS 框架**Tailwind CSS (v4)。
* **图标库**`lucide-react` (通用), `react-icons` (特定品牌)。
* **状态管理**`zustand` (全局 UI 状态), `swr` / `react-query` (数据获取)。
* **拖拽库**`@dnd-kit/core`, `@dnd-kit/sortable` (推荐,比 react-dnd 更现代且易于控制样式)。
## 4. 验证计划
### 自动化测试
* (暂无,依赖手动验证)
### 手动验证清单
1. **侧边栏测试**
* [ ] 创建 3 层嵌套页面,确认缩进正确。
* [ ] 拖拽页面 A 到页面 B 内部,确认无刷新实时更新。
* [ ] 快速展开/折叠多个节点,确认无卡顿。
* [ ] 右键重命名页面,确认编辑器顶部标题同步更新。
2. **编辑器测试**
* [ ] 输入文本,点击左侧 `:::`,选择「转换为页面」。
* [ ] 确认原文本块变为蓝色链接块。
* [ ] 点击链接块,跳转到新页面,内容已迁移。
* [ ] 检查左侧侧边栏,确认新页面出现在原页面下方。
## 5. 下一步行动 (Next Steps)
建议优先执行 **阶段 A (侧边栏)**,因为它是整个应用的导航骨架,Bug 最影响体验。
然后执行 **阶段 B**,打通「块 <-> 页面」的流转。