# 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 Inter，Hover 背景 `#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**，打通「块 <-> 页面」的流转。
