md2ui 1.0.16 → 1.0.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/README.md +3 -55
  2. package/bin/build.js +82 -7
  3. package/bin/md2ui.js +80 -4
  4. package/package.json +23 -9
  5. package/public/docs/00-/345/277/253/351/200/237/345/274/200/345/247/213.md +48 -28
  6. package/public/docs/01-/345/212/237/350/203/275/347/211/271/346/200/247.md +55 -40
  7. package/public/docs/02-Markdown/346/270/262/346/237/223/00-/345/237/272/347/241/200/350/257/255/346/263/225.md +86 -0
  8. package/public/docs/02-Markdown/346/270/262/346/237/223/01-/344/273/243/347/240/201/345/235/227.md +91 -0
  9. package/public/docs/02-Markdown/346/270/262/346/237/223/02-/350/241/250/346/240/274.md +187 -0
  10. package/public/docs/02-Markdown/346/270/262/346/237/223/03-Mermaid/345/233/276/350/241/250.md +101 -0
  11. package/public/docs/02-Markdown/346/270/262/346/237/223/04-Frontmatter.md +32 -0
  12. package/public/docs/02-Markdown/346/270/262/346/237/223/05-/346/225/260/345/255/246/345/205/254/345/274/217.md +47 -0
  13. package/public/docs/03-/345/257/274/350/210/252/344/270/216/345/270/203/345/261/200/00-/344/270/211/346/240/217/345/270/203/345/261/200.md +33 -0
  14. package/public/docs/03-/345/257/274/350/210/252/344/270/216/345/270/203/345/261/200/01-/347/233/256/345/275/225/346/240/221/345/257/274/350/210/252.md +43 -0
  15. package/public/docs/03-/345/257/274/350/210/252/344/270/216/345/270/203/345/261/200/02-/346/226/207/346/241/243/345/244/247/347/272/262.md +51 -0
  16. package/public/docs/03-/345/257/274/350/210/252/344/270/216/345/270/203/345/261/200/03-/344/270/212/344/270/213/347/257/207/345/257/274/350/210/252.md +29 -0
  17. package/public/docs/03-/345/257/274/350/210/252/344/270/216/345/270/203/345/261/200/04-/347/253/231/345/206/205/351/223/276/346/216/245.md +39 -0
  18. package/public/docs/04-/346/220/234/347/264/242/345/212/237/350/203/275/00-/345/205/250/346/226/207/346/220/234/347/264/242.md +46 -0
  19. package/public/docs/05-/347/274/226/350/276/221/345/212/237/350/203/275/00-/347/274/226/350/276/221/345/231/250/345/237/272/347/241/200.md +65 -0
  20. package/public/docs/05-/347/274/226/350/276/221/345/212/237/350/203/275/01-/350/207/252/345/212/250/344/277/235/345/255/230.md +38 -0
  21. package/public/docs/06-/351/230/205/350/257/273/344/275/223/351/252/214/00-/351/230/205/350/257/273/350/277/233/345/272/246.md +43 -0
  22. package/public/docs/06-/351/230/205/350/257/273/344/275/223/351/252/214/01-/345/233/276/347/211/207/346/224/276/345/244/247.md +40 -0
  23. package/public/docs/06-/351/230/205/350/257/273/344/275/223/351/252/214/02-/350/277/224/345/233/236/351/241/266/351/203/250.md +38 -0
  24. package/public/docs/06-/351/230/205/350/257/273/344/275/223/351/252/214/assets/img-1777261394722.png +0 -0
  25. package/public/docs/07-/347/247/273/345/212/250/347/253/257/351/200/202/351/205/215/00-/345/223/215/345/272/224/345/274/217/345/270/203/345/261/200.md +37 -0
  26. package/public/docs/08-/346/226/207/346/241/243/347/256/241/347/220/206/00-/346/226/260/345/273/272/344/270/216/345/210/240/351/231/244.md +47 -0
  27. package/public/docs/09-/345/257/274/345/207/272/345/212/237/350/203/275/00-/345/257/274/345/207/272Word.md +77 -0
  28. package/public/docs/10-/351/203/250/347/275/262/344/270/216/351/205/215/347/275/256/00-CLI/345/267/245/345/205/267.md +52 -0
  29. package/public/docs/10-/351/203/250/347/275/262/344/270/216/351/205/215/347/275/256/01-SSG/351/235/231/346/200/201/346/236/204/345/273/272.md +44 -0
  30. package/public/docs/10-/351/203/250/347/275/262/344/270/216/351/205/215/347/275/256/02-/350/207/252/345/256/232/344/271/211/351/205/215/347/275/256.md +58 -0
  31. package/public/docs/11-/345/244/232/347/272/247/347/233/256/345/275/225/346/265/213/350/257/225/00-/344/270/200/347/272/247/346/226/207/346/241/243.md +20 -0
  32. package/public/docs/11-/345/244/232/347/272/247/347/233/256/345/275/225/346/265/213/350/257/225/01-/345/255/220/347/233/256/345/275/225/00-/344/272/214/347/272/247/346/226/207/346/241/243.md +13 -0
  33. package/public/docs/11-/345/244/232/347/272/247/347/233/256/345/275/225/346/265/213/350/257/225/01-/345/255/220/347/233/256/345/275/225/01-/346/267/261/345/261/202/345/265/214/345/245/227/00-/344/270/211/347/272/247/346/226/207/346/241/243.md +23 -0
  34. package/src/App.vue +130 -6
  35. package/src/components/AppSidebar.vue +181 -21
  36. package/src/components/CodeBlockNodeView.vue +72 -0
  37. package/src/components/DocContent.vue +25 -14
  38. package/src/components/EditorContent.vue +257 -0
  39. package/src/components/EditorToolbar.vue +264 -0
  40. package/src/components/ImageZoom.vue +199 -2
  41. package/src/components/MathBlockNodeView.vue +160 -0
  42. package/src/components/MathInlineNodeView.vue +145 -0
  43. package/src/components/MermaidNodeView.vue +149 -0
  44. package/src/components/TableBubbleMenu.vue +177 -0
  45. package/src/components/TableOfContents.vue +138 -32
  46. package/src/components/TopBar.vue +69 -4
  47. package/src/components/TreeNode.vue +232 -39
  48. package/src/components/WelcomePage.vue +2 -2
  49. package/src/composables/useDocHash.js +9 -1
  50. package/src/composables/useDocManager.js +325 -68
  51. package/src/composables/useDocTree.js +56 -1
  52. package/src/composables/useExportPdf.js +102 -0
  53. package/src/composables/useExportWord.js +73 -10
  54. package/src/composables/useFileWatcher.js +45 -0
  55. package/src/composables/useFrontmatter.js +2 -2
  56. package/src/composables/useMarkdown.js +529 -42
  57. package/src/composables/useScroll.js +47 -5
  58. package/src/config.js +1 -1
  59. package/src/extensions/CodeBlockCustom.js +113 -0
  60. package/src/extensions/MathBlock.js +107 -0
  61. package/src/extensions/MathInline.js +100 -0
  62. package/src/extensions/MermaidBlock.js +73 -0
  63. package/src/extensions/TableControls.js +670 -0
  64. package/src/services/DocService.js +184 -0
  65. package/src/style.css +2194 -39
  66. package/vite-plugin-doc-api.js +368 -0
  67. package/vite.config.js +2 -1
  68. package/public/docs/02-Mermaid/345/233/276/350/241/250.md +0 -102
  69. package/public/docs/03-/350/277/233/351/230/266/346/214/207/345/215/227/01-/347/233/256/345/275/225/347/273/223/346/236/204.md +0 -55
  70. package/public/docs/03-/350/277/233/351/230/266/346/214/207/345/215/227/02-/350/207/252/345/256/232/344/271/211/351/205/215/347/275/256.md +0 -63
  71. package/public/docs/03-/350/277/233/351/230/266/346/214/207/345/215/227/03-/351/203/250/347/275/262/346/226/271/346/241/210.md +0 -73
  72. package/public/docs/04-API/345/217/202/350/200/203/01-/347/273/204/344/273/266API.md +0 -80
  73. package/public/docs/04-API/345/217/202/350/200/203/02-Composables.md +0 -92
  74. package/src/api/docs.js +0 -106
@@ -0,0 +1,51 @@
1
+ # 文档大纲 (TOC)
2
+
3
+ 验证右侧文档大纲的提取、高亮和跳转功能。
4
+
5
+ ## 大纲提取
6
+
7
+ 自动从文档内容中提取 h1 ~ h6 各级标题,生成大纲列表。
8
+
9
+ ## 二级标题示例
10
+
11
+ 这是二级标题下的内容。
12
+
13
+ ### 三级标题示例
14
+
15
+ 这是三级标题下的内容。
16
+
17
+ #### 四级标题示例
18
+
19
+ 这是四级标题下的内容。
20
+
21
+ ##### 五级标题示例
22
+
23
+ 这是五级标题下的内容。
24
+
25
+ ###### 六级标题示例
26
+
27
+ 这是六级标题下的内容。
28
+
29
+ ## 高亮跟随
30
+
31
+ - 滚动文档时,右侧大纲自动高亮当前阅读位置对应的标题
32
+ - 高亮判断逻辑:最后一个已滚过顶部的标题为当前激活项
33
+
34
+ ## 点击跳转
35
+
36
+ - 点击大纲中的标题项,文档内容平滑滚动到对应位置
37
+ - 跳转后 URL hash 更新为对应锚点
38
+
39
+ ## 标题锚点
40
+
41
+ 每个标题旁边有链接图标,点击可复制锚点链接:
42
+
43
+ - 锚点 ID 使用 github-slugger 生成,语义化且稳定
44
+ - 支持中文标题的 slug 生成
45
+
46
+ ## 验证要点
47
+
48
+ 1. 右侧大纲应列出本文档所有标题
49
+ 2. 滚动页面时,大纲中对应标题应高亮
50
+ 3. 点击大纲标题,页面应平滑滚动到对应位置
51
+ 4. 各级标题应有正确的缩进层级
@@ -0,0 +1,29 @@
1
+ # 上下篇导航
2
+
3
+ 验证文档底部的前后导航功能。
4
+
5
+ ## 功能说明
6
+
7
+ - 文档底部自动显示"上一篇"和"下一篇"链接
8
+ - 按目录树的扁平顺序计算前后关系
9
+ - 第一篇文档只显示"下一篇"
10
+ - 最后一篇文档只显示"上一篇"
11
+
12
+ ## 导航样式
13
+
14
+ | 位置 | 内容 |
15
+ | --- | --- |
16
+ | 左侧 | 上一篇(带左箭头图标) |
17
+ | 右侧 | 下一篇(带右箭头图标) |
18
+
19
+ 每个导航链接包含:
20
+
21
+ - 标签文字("上一篇"/"下一篇")
22
+ - 文档标题
23
+
24
+ ## 验证要点
25
+
26
+ 1. 本文档底部应显示上下篇导航
27
+ 2. 点击"上一篇"应跳转到前一个文档
28
+ 3. 点击"下一篇"应跳转到后一个文档
29
+ 4. 导航链接的标题应与目标文档一致
@@ -0,0 +1,39 @@
1
+ # 站内链接
2
+
3
+ 验证文档间的链接改写和跳转功能。
4
+
5
+ ## 站内文档链接
6
+
7
+ 以下链接指向本站其他文档,应自动改写为 SPA 路由:
8
+
9
+ - [快速开始](../00-快速开始.md)
10
+ - [功能特性](../01-功能特性.md)
11
+ - [Mermaid 图表](../02-Markdown渲染/04-Mermaid图表.md)
12
+
13
+ ## 站内锚点链接
14
+
15
+ 以下链接指向本文档内的锚点:
16
+
17
+ - [跳转到验证要点](#验证要点)
18
+ - [跳转到外部链接](#外部链接)
19
+
20
+ ## 外部链接
21
+
22
+ 以下链接指向外部网站,应在新标签页打开:
23
+
24
+ - [GitHub](https://github.com)
25
+ - [Vue.js 官网](https://vuejs.org)
26
+ - [Vite 官网](https://vitejs.dev)
27
+
28
+ ## 跨文档锚点链接
29
+
30
+ 以下链接指向其他文档的特定锚点:
31
+
32
+ - [Frontmatter 支持的字段](../02-Markdown渲染/05-Frontmatter.md#支持的字段)
33
+
34
+ ## 验证要点
35
+
36
+ 1. 站内文档链接点击后应在当前页面加载目标文档(SPA 路由)
37
+ 2. 站内锚点链接点击后应平滑滚动到对应位置
38
+ 3. 外部链接点击后应在新标签页打开
39
+ 4. 不存在的文档链接应显示为断链样式
@@ -0,0 +1,46 @@
1
+ # 全文搜索
2
+
3
+ 验证全文搜索的索引构建、中文分词和搜索交互。
4
+
5
+ ## 搜索入口
6
+
7
+ - 顶部搜索框:点击聚焦后展开下拉搜索结果
8
+ - 快捷键 Ctrl+K(Mac 下 Cmd+K)唤起搜索框
9
+
10
+ ## 搜索特性
11
+
12
+ | 特性 | 说明 |
13
+ | --- | --- |
14
+ | 中文分词 | 基于 bigram 分词,支持中文关键词搜索 |
15
+ | 模糊匹配 | fuzzy 参数 0.2,容忍少量拼写错误 |
16
+ | 前缀搜索 | 输入部分关键词即可匹配 |
17
+ | 标题加权 | 标题匹配权重为内容的 3 倍 |
18
+ | 懒加载索引 | 首次打开搜索时才构建索引 |
19
+
20
+ ## 搜索测试关键词
21
+
22
+ 以下关键词可用于测试搜索功能:
23
+
24
+ - 文档渲染系统
25
+ - Markdown 解析引擎
26
+ - 代码语法高亮
27
+ - Mermaid 图表绘制
28
+ - 响应式布局适配
29
+ - 全文检索引擎
30
+ - Tiptap 富文本编辑器
31
+
32
+ ## 搜索交互
33
+
34
+ 1. 输入关键词,下拉列表实时显示匹配结果
35
+ 2. 键盘上下键移动选中项
36
+ 3. 回车键确认选中,跳转到对应文档
37
+ 4. ESC 键关闭搜索
38
+ 5. 搜索结果按相关度排序,最多显示 20 条
39
+
40
+ ## 验证要点
41
+
42
+ 1. Ctrl+K 应聚焦搜索框
43
+ 2. 输入"Mermaid"应匹配到 Mermaid 图表文档
44
+ 3. 输入中文关键词"布局"应匹配到相关文档
45
+ 4. 点击搜索结果应跳转到对应文档
46
+ 5. 首次搜索时应有索引构建过程
@@ -0,0 +1,65 @@
1
+ # 编辑器基础
2
+
3
+ 验证 Tiptap 富文本编辑器的各项编辑功能。
4
+
5
+ ## 模式切换
6
+
7
+ 顶部工具栏提供查看/编辑模式切换按钮:
8
+
9
+ - 查看模式:渲染后的 HTML 内容,只读
10
+ - 编辑模式:Tiptap 富文本编辑器,可编辑
11
+
12
+ 切换时保持阅读位置(三级策略):
13
+ 1. 通过锚点 ID 定位
14
+ 2. 通过标题文本匹配
15
+ 3. 按滚动比例恢复
16
+
17
+ ## 工具栏功能
18
+
19
+ ### 文本格式
20
+
21
+ | 功能 | 快捷键 | 说明 |
22
+ |------|--------|------|
23
+ | 加粗 | Ctrl+B | **粗体文本** |
24
+ | 斜体 | Ctrl+I | *斜体文本* |
25
+ | 下划线 | Ctrl+U | 下划线文本 |
26
+ | 删除线 | - | ~~删除线文本~~ |
27
+ | 行内代码 | - | `行内代码` |
28
+
29
+ ### 标题
30
+
31
+ 支持 H1 ~ H4 四级标题快速切换。
32
+
33
+ ### 列表
34
+
35
+ - 无序列表
36
+ - 有序列表
37
+ - 任务列表
38
+
39
+ ### 块级元素
40
+
41
+ - 引用块
42
+ - 分割线
43
+ - 代码块(支持语言标签输入,``` 输入规则触发)
44
+ - 表格(插入 3x3 表格,支持调整大小和气泡菜单)
45
+ - 图片(通过 URL 插入)
46
+
47
+ ### 撤销/重做
48
+
49
+ - Ctrl+Z 撤销
50
+ - Ctrl+Shift+Z 重做
51
+
52
+ ## Mermaid 编辑
53
+
54
+ 编辑模式下 Mermaid 代码块渲染为图表预览:
55
+
56
+ - 右上角编辑按钮进入代码编辑模式
57
+ - 编辑完成后点击"完成"按钮回到预览
58
+ - 实时渲染图表,渲染失败时显示错误提示
59
+
60
+ ## 验证要点
61
+
62
+ 1. 点击"编辑"按钮应切换到编辑模式
63
+ 2. 工具栏各按钮应正常工作
64
+ 3. 编辑内容后切回查看模式,内容应同步更新
65
+ 4. Mermaid 代码块应显示为图表预览
@@ -0,0 +1,38 @@
1
+ # 自动保存
2
+
3
+ 验证编辑模式下的自动保存机制。
4
+
5
+ ## 保存策略
6
+
7
+ | 触发条件 | 延迟 | 说明 |
8
+ |----------|------|------|
9
+ | 内容变更 | 1 秒防抖 | 编辑内容后 1 秒无操作自动保存 |
10
+ | 组件卸载 | 立即 | 切换文档或退出编辑模式时立即保存 |
11
+
12
+ ## 工作流程
13
+
14
+ 1. 用户在编辑器中修改内容
15
+ 2. 每次修改触发 `onUpdate` 回调
16
+ 3. 启动 1 秒防抖定时器
17
+ 4. 1 秒内无新修改,调用 `saveDoc` API 保存
18
+ 5. 保存成功后重置文件 ETag,避免轮询误判为外部变更
19
+
20
+ ## 保存 API
21
+
22
+ ```javascript
23
+ // POST /api/save
24
+ {
25
+ path: "相对文件路径",
26
+ content: "Markdown 文本内容"
27
+ }
28
+ ```
29
+
30
+ - 服务端自动创建不存在的父目录
31
+ - 路径安全检查,防止路径穿越攻击
32
+
33
+ ## 验证要点
34
+
35
+ 1. 编辑模式下修改内容,等待 1 秒后文件应自动保存
36
+ 2. 快速连续输入时,只在最后一次输入后 1 秒保存(防抖)
37
+ 3. 切换到查看模式时,未保存的内容应立即保存
38
+ 4. 切换到其他文档时,当前文档应立即保存
@@ -0,0 +1,43 @@
1
+ # 阅读进度
2
+
3
+ 验证阅读进度条和阅读时间显示功能。
4
+
5
+ ## 进度条
6
+
7
+ - 右下角浮动按钮显示当前滚动百分比(如 42%)
8
+ - 滚动超过 300px 后按钮出现
9
+ - 点击按钮返回顶部(平滑滚动)
10
+
11
+ ## 阅读时间
12
+
13
+ 文档标题下方显示元信息:
14
+
15
+ - 字数统计(去除 frontmatter、代码块、HTML 标签后计算)
16
+ - 预计阅读时间(中文 400 字/分钟,英文 200 词/分钟)
17
+
18
+ ## 填充内容
19
+
20
+ 以下为填充内容,用于测试滚动进度计算。
21
+
22
+ ### 第一章
23
+
24
+ 在软件开发领域,文档的重要性不言而喻。一份好的文档不仅能帮助开发者快速上手项目,还能降低团队沟通成本,提高协作效率。Markdown 作为一种轻量级标记语言,因其简洁的语法和良好的可读性,已经成为技术文档的事实标准。
25
+
26
+ ### 第二章
27
+
28
+ md2ui 的设计理念是"零配置即可使用"。只需一行命令,就能将本地的 Markdown 文件转换为美观的网页。不需要复杂的配置文件,不需要学习新的模板语法,只需要专注于内容本身。
29
+
30
+ ### 第三章
31
+
32
+ 三栏布局是文档站点的经典设计。左侧导航帮助用户快速定位文档,中间内容区提供舒适的阅读体验,右侧大纲方便在长文档中跳转。所有栏目都支持拖拽调整宽度,也可以折叠隐藏,适应不同的屏幕尺寸和阅读习惯。
33
+
34
+ ### 第四章
35
+
36
+ 全文搜索是文档工具的核心功能之一。md2ui 使用 MiniSearch 作为搜索引擎,支持中文 bigram 分词、模糊匹配和前缀搜索。搜索索引采用懒加载策略,只在用户首次打开搜索时构建,避免影响页面加载速度。
37
+
38
+ ## 验证要点
39
+
40
+ 1. 滚动本文档,右下角应显示进度百分比
41
+ 2. 滚动超过 300px 后返回顶部按钮应出现
42
+ 3. 点击返回顶部按钮,页面应平滑滚动到顶部
43
+ 4. 文档标题下方应显示字数和预计阅读时间
@@ -0,0 +1,40 @@
1
+ # 图片放大
2
+
3
+ 验证图片点击放大和多图切换功能。
4
+
5
+ ## 图片展示
6
+
7
+ 以下图片应支持点击放大查看:
8
+
9
+ ![Vue Logo](/logo.svg)\## 放大功能
10
+
11
+ - 点击图片弹出放大浮层
12
+ - 放大浮层显示图片原始尺寸
13
+ - 点击浮层背景或按 ESC 关闭
14
+
15
+ ## 多图切换
16
+
17
+ 当文档中有多张图片时:
18
+
19
+ - 放大浮层支持左右切换图片
20
+ - 显示当前图片索引
21
+
22
+ ## Mermaid 图表放大
23
+
24
+ Mermaid 渲染后的图表也支持点击放大:
25
+
26
+ ```mermaid
27
+ graph LR
28
+ A[输入 Markdown] --> B[解析渲染]
29
+ B --> C[HTML 输出]
30
+ C --> D[图片放大支持]
31
+ ```
32
+
33
+ ## 验证要点
34
+
35
+ 1. 点击上方 Vue Logo 图片,应弹出放大浮层
36
+ 2. 放大浮层中图片应清晰显示
37
+ 3. 点击背景或按 ESC 应关闭浮层
38
+ 4. 点击 Mermaid 图表也应支持放大
39
+
40
+ ![](/docs/06-阅读体验/assets/img-1777261394722.png)
@@ -0,0 +1,38 @@
1
+ # 返回顶部
2
+
3
+ 验证返回顶部按钮的显示和交互。
4
+
5
+ ## 触发条件
6
+
7
+ - 页面滚动超过 300px 时,右下角显示返回顶部按钮
8
+ - 按钮上显示当前滚动进度百分比
9
+ - 滚动回 300px 以内时按钮自动隐藏
10
+
11
+ ## 按钮样式
12
+
13
+ - 圆形浮动按钮,固定在右下角
14
+ - 包含向上箭头图标和进度文字
15
+ - 带有淡入淡出动画效果
16
+
17
+ ## 填充内容
18
+
19
+ 以下为填充内容,确保页面可滚动。
20
+
21
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
22
+
23
+ 在前端开发中,用户体验的细节往往决定了产品的品质。返回顶部按钮虽然是一个小功能,但对于长文档的阅读体验至关重要。当用户阅读到文档底部时,一键返回顶部比手动滚动要方便得多。
24
+
25
+ Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
26
+
27
+ 文档工具的设计需要在功能丰富和使用简洁之间找到平衡。太多的功能会增加学习成本,太少的功能又无法满足需求。md2ui 的目标是提供恰到好处的功能集,让用户专注于内容本身。
28
+
29
+ Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo.
30
+
31
+ 技术文档的可读性不仅取决于内容质量,还取决于排版和交互设计。合理的字体大小、行高、段落间距,以及清晰的标题层级,都能显著提升阅读体验。
32
+
33
+ ## 验证要点
34
+
35
+ 1. 向下滚动本文档,返回顶部按钮应出现
36
+ 2. 按钮上应显示当前滚动百分比
37
+ 3. 点击按钮,页面应平滑滚动到顶部
38
+ 4. 滚动到顶部后,按钮应自动隐藏
@@ -0,0 +1,37 @@
1
+ # 响应式布局
2
+
3
+ 验证移动端适配的各项功能。
4
+
5
+ ## 断点设计
6
+
7
+ | 屏幕宽度 | 模式 | 布局变化 |
8
+ |----------|------|----------|
9
+ | > 768px | 桌面端 | 三栏布局,侧边栏常驻 |
10
+ | <= 768px | 移动端 | 单栏布局,抽屉式导航 |
11
+
12
+ ## 移动端特性
13
+
14
+ ### 抽屉式导航
15
+
16
+ - 侧边栏以抽屉形式从左侧滑出
17
+ - 打开时显示半透明遮罩
18
+ - 点击遮罩关闭抽屉
19
+
20
+ ### 移动端顶栏
21
+
22
+ - 独立的移动端 Header 组件
23
+ - 包含汉堡菜单按钮、Logo、搜索按钮
24
+
25
+ ### 移动端 TOC
26
+
27
+ - 底部浮动目录面板
28
+ - 点击按钮展开/收起
29
+ - 选择标题后自动关闭面板
30
+
31
+ ## 验证要点
32
+
33
+ 1. 将浏览器窗口缩小到 768px 以下,应切换为移动端布局
34
+ 2. 点击汉堡菜单按钮,侧边栏应以抽屉形式弹出
35
+ 3. 点击遮罩应关闭抽屉
36
+ 4. 底部应显示 TOC 浮动按钮
37
+ 5. 恢复窗口宽度后应自动切回桌面端布局
@@ -0,0 +1,47 @@
1
+ # 新建与删除
2
+
3
+ 验证侧边栏的文档/目录创建和删除功能。
4
+
5
+ ## 新建文档
6
+
7
+ 1. 点击侧边栏"文档目录"旁的 `+` 按钮
8
+ 2. 选择"新建文档"或"新建目录"
9
+ 3. 输入名称,点击确定
10
+
11
+ ### 新建规则
12
+
13
+ | 规则 | 说明 |
14
+ |------|------|
15
+ | 名称不能为空 | 提示"名称不能为空" |
16
+ | 禁止特殊字符 | `\ / : * ? " < > \|` 不允许 |
17
+ | 不能重名 | 同目录下已存在同名文件/目录时提示 |
18
+
19
+ ### 在子目录下新建
20
+
21
+ - 右键点击文件夹节点的 `+` 按钮
22
+ - 新建的文件/目录会创建在该文件夹下
23
+
24
+ ## 删除文档
25
+
26
+ 1. 右键点击文档/目录节点的删除按钮
27
+ 2. 弹出确认弹窗
28
+ 3. 确认后删除
29
+
30
+ ### 删除规则
31
+
32
+ - 删除文件:直接删除
33
+ - 删除目录:递归删除目录下所有内容,弹窗会提示"目录下的所有内容将被一并删除"
34
+
35
+ ## 文件热更新
36
+
37
+ - 文件列表变化后自动刷新导航树(轮询 + ETag 机制)
38
+ - 当前文档内容变化后自动刷新内容
39
+ - 轮询间隔 1 秒
40
+
41
+ ## 验证要点
42
+
43
+ 1. 点击 `+` 按钮应弹出新建菜单
44
+ 2. 新建文档后应立即出现在导航树中
45
+ 3. 删除文档前应弹出确认弹窗
46
+ 4. 删除后文档应从导航树中消失
47
+ 5. 外部修改文件后,页面应自动刷新
@@ -0,0 +1,77 @@
1
+ # 导出 Word
2
+
3
+ 验证文档导出为 .docx 文件的功能。
4
+
5
+ ## 使用方式
6
+
7
+ 顶部工具栏点击"导出 Word"按钮,即可将当前文档导出为 .docx 文件。
8
+
9
+ ## 支持的元素
10
+
11
+ | 元素 | 导出效果 |
12
+ |------|----------|
13
+ | 标题 h1~h6 | 对应 Word 标题级别 |
14
+ | 段落 | 正文段落 |
15
+ | 粗体/斜体/删除线 | 对应文本格式 |
16
+ | 行内代码 | Consolas 字体 + 灰色背景 |
17
+ | 超链接 | 可点击的蓝色链接 |
18
+ | 无序/有序列表 | 带缩进的列表 |
19
+ | 任务列表 | [x] / [ ] 前缀文本 |
20
+ | 引用块 | 左侧边框 + 灰色背景 |
21
+ | 代码块 | 等宽字体 + 灰色背景 + 边框 |
22
+ | 表格 | 固定布局表格,兼容 Office + WPS |
23
+ | 图片 | 嵌入图片(限制最大宽度 6 英寸) |
24
+ | Mermaid 图表 | SVG 转 PNG 后嵌入 |
25
+ | 水平线 | 底部边框线 |
26
+
27
+ ## 导出配置
28
+
29
+ - 字体:Microsoft YaHei(微软雅黑)
30
+ - 正文字号:11pt
31
+ - 行距:1.5 倍
32
+ - 页边距:上下 1 英寸,左右 1.2 英寸
33
+
34
+ ## 以下内容用于测试导出效果
35
+
36
+ ### 文本格式
37
+
38
+ **粗体**、*斜体*、~~删除线~~、`行内代码`
39
+
40
+ ### 链接
41
+
42
+ [GitHub](https://github.com)
43
+
44
+ ### 列表
45
+
46
+ - 无序列表项 1
47
+ - 无序列表项 2
48
+
49
+ 1. 有序列表项 1
50
+ 2. 有序列表项 2
51
+
52
+ ### 引用
53
+
54
+ > 这是一段引用文本,用于测试导出效果。
55
+
56
+ ### 代码块
57
+
58
+ ```javascript
59
+ function hello() {
60
+ console.log('Hello, md2ui!')
61
+ }
62
+ ```
63
+
64
+ ### 表格
65
+
66
+ | 功能 | 状态 |
67
+ |------|------|
68
+ | 标题导出 | 已支持 |
69
+ | 表格导出 | 已支持 |
70
+ | 图表导出 | 已支持 |
71
+
72
+ ## 验证要点
73
+
74
+ 1. 点击"导出 Word"按钮应下载 .docx 文件
75
+ 2. 用 Word 或 WPS 打开,各元素格式应正确
76
+ 3. 表格应正确显示行列结构
77
+ 4. 导出过程中按钮应显示"导出中..."
@@ -0,0 +1,52 @@
1
+ # CLI 工具
2
+
3
+ 验证 md2ui 命令行工具的各项功能。
4
+
5
+ ## 基本用法
6
+
7
+ ```bash
8
+ # 在文档目录下启动预览
9
+ cd /path/to/your/docs
10
+ md2ui
11
+
12
+ # 指定端口
13
+ md2ui -p 8080
14
+
15
+ # 静态构建
16
+ md2ui build
17
+ ```
18
+
19
+ ## 启动流程
20
+
21
+ 1. 扫描当前目录下的 `.md` 文件
22
+ 2. 加载用户配置文件(如果存在)
23
+ 3. 启动 Vite 开发服务器
24
+ 4. 自动打开浏览器
25
+
26
+ ## 配置文件加载
27
+
28
+ CLI 按以下顺序查找配置文件:
29
+
30
+ | 优先级 | 文件名 | 格式 |
31
+ |--------|--------|------|
32
+ | 1 | `md2ui.config.js` | ES Module |
33
+ | 2 | `.md2uirc.json` | JSON |
34
+
35
+ 命令行参数优先级最高,会覆盖配置文件中的同名配置。
36
+
37
+ ## 服务端 API
38
+
39
+ 开发服务器提供以下 API:
40
+
41
+ | 路径 | 方法 | 说明 |
42
+ |------|------|------|
43
+ | `/@user-docs-list` | GET | 文档列表 |
44
+ | `/@site-config` | GET | 站点配置 |
45
+ | `/@user-docs/{path}` | GET | 文档内容 |
46
+
47
+ ## 验证要点
48
+
49
+ 1. 在包含 .md 文件的目录下运行 `md2ui` 应启动服务
50
+ 2. 无 .md 文件时应提示错误并退出
51
+ 3. `-p` 参数应正确设置端口
52
+ 4. 配置文件应被正确加载
@@ -0,0 +1,44 @@
1
+ # SSG 静态构建
2
+
3
+ 验证 `md2ui build` 静态站点生成功能。
4
+
5
+ ## 使用方式
6
+
7
+ ```bash
8
+ md2ui build
9
+ ```
10
+
11
+ ## 构建产物
12
+
13
+ 构建完成后在 `dist/` 目录下生成纯静态文件:
14
+
15
+ ```
16
+ dist/
17
+ ├── index.html # 入口页面
18
+ ├── assets/ # JS/CSS 资源
19
+ └── docs/ # 文档文件
20
+ ```
21
+
22
+ ## 部署方式
23
+
24
+ 生成的静态文件可部署到任意静态服务器:
25
+
26
+ | 平台 | 说明 |
27
+ |------|------|
28
+ | GitHub Pages | 推送 dist 目录到 gh-pages 分支 |
29
+ | Vercel | 配置输出目录为 dist |
30
+ | Nginx | 将 dist 目录配置为网站根目录 |
31
+ | CDN | 上传 dist 目录到 CDN 存储 |
32
+
33
+ ## SPA 路由
34
+
35
+ - 基于 hash 的文档路由
36
+ - 支持浏览器前进/后退
37
+ - 支持直接通过 URL 访问特定文档
38
+
39
+ ## 验证要点
40
+
41
+ 1. 运行 `md2ui build` 应在 dist 目录生成静态文件
42
+ 2. 用静态服务器打开 dist/index.html 应正常显示
43
+ 3. 文档导航和内容加载应正常工作
44
+ 4. URL 路由应正确解析