md2ui 1.0.18 → 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
@@ -1,80 +0,0 @@
1
- # 组件 API
2
-
3
- md2ui 的核心组件及其接口说明。
4
-
5
- ## TreeNode
6
-
7
- 树形节点组件,用于渲染文档导航。
8
-
9
- ### Props
10
-
11
- | 属性 | 类型 | 说明 |
12
- |------|------|------|
13
- | item | Object | 节点数据 |
14
- | currentDoc | String | 当前选中的文档 |
15
-
16
- ### Events
17
-
18
- | 事件 | 参数 | 说明 |
19
- |------|------|------|
20
- | toggle | folder | 切换文件夹展开状态 |
21
- | select | docKey | 选中文档 |
22
-
23
- ### item 数据结构
24
-
25
- ```javascript
26
- {
27
- key: 'docs/guide.md', // 唯一标识
28
- name: '使用指南', // 显示名称
29
- type: 'file', // 类型: file | folder
30
- path: '/docs/guide.md', // 文件路径
31
- expanded: false, // 是否展开(仅文件夹)
32
- children: [] // 子节点(仅文件夹)
33
- }
34
- ```
35
-
36
- ## TableOfContents
37
-
38
- 文档目录组件,显示当前文档的标题大纲。
39
-
40
- ### Props
41
-
42
- | 属性 | 类型 | 说明 |
43
- |------|------|------|
44
- | tocItems | Array | 目录项列表 |
45
- | activeHeading | String | 当前高亮的标题 ID |
46
- | collapsed | Boolean | 是否折叠 |
47
- | width | Number | 组件宽度 |
48
-
49
- ### Events
50
-
51
- | 事件 | 参数 | 说明 |
52
- |------|------|------|
53
- | scroll-to | headingId | 跳转到指定标题 |
54
-
55
- ### tocItems 数据结构
56
-
57
- ```javascript
58
- [
59
- { id: 'heading-1', text: '快速开始', level: 1 },
60
- { id: 'heading-2', text: '安装', level: 2 },
61
- { id: 'heading-3', text: '配置', level: 2 }
62
- ]
63
- ```
64
-
65
- ## ImageZoom
66
-
67
- 图片放大组件。
68
-
69
- ### Props
70
-
71
- | 属性 | 类型 | 说明 |
72
- |------|------|------|
73
- | visible | Boolean | 是否显示 |
74
- | imageContent | String | 图片 HTML 内容 |
75
-
76
- ### Events
77
-
78
- | 事件 | 说明 |
79
- |------|------|
80
- | close | 关闭放大视图 |
@@ -1,92 +0,0 @@
1
- # Composables
2
-
3
- md2ui 使用 Vue 3 Composition API,将可复用逻辑封装为 composables。
4
-
5
- ## useMarkdown
6
-
7
- Markdown 渲染相关逻辑。
8
-
9
- ### 返回值
10
-
11
- ```javascript
12
- const {
13
- htmlContent, // ref<string> - 渲染后的 HTML
14
- tocItems, // ref<array> - 目录项列表
15
- renderMarkdown // function - 渲染方法
16
- } = useMarkdown()
17
- ```
18
-
19
- ### renderMarkdown
20
-
21
- ```javascript
22
- // 渲染 Markdown 文本
23
- await renderMarkdown(markdownText)
24
- ```
25
-
26
- 处理流程:
27
-
28
- ```mermaid
29
- flowchart TD
30
- A[Markdown 文本] --> B[marked 解析]
31
- B --> C[提取标题]
32
- C --> D[处理 Mermaid]
33
- D --> E[输出 HTML]
34
- ```
35
-
36
- ## useScroll
37
-
38
- 滚动相关逻辑。
39
-
40
- ### 返回值
41
-
42
- ```javascript
43
- const {
44
- scrollProgress, // ref<number> - 阅读进度 0-100
45
- showBackToTop, // ref<boolean> - 是否显示返回顶部
46
- activeHeading, // ref<string> - 当前高亮标题 ID
47
- handleScroll, // function - 滚动事件处理
48
- scrollToHeading, // function - 跳转到标题
49
- scrollToTop // function - 返回顶部
50
- } = useScroll()
51
- ```
52
-
53
- ### 使用示例
54
-
55
- ```vue
56
- <template>
57
- <main @scroll="handleScroll">
58
- <!-- 内容 -->
59
- </main>
60
- <button v-if="showBackToTop" @click="scrollToTop">
61
- 返回顶部 {{ scrollProgress }}%
62
- </button>
63
- </template>
64
- ```
65
-
66
- ## useResize
67
-
68
- 拖拽调整宽度逻辑。
69
-
70
- ### 返回值
71
-
72
- ```javascript
73
- const {
74
- sidebarWidth, // ref<number> - 侧边栏宽度
75
- tocWidth, // ref<number> - 目录宽度
76
- startResize // function - 开始拖拽
77
- } = useResize()
78
- ```
79
-
80
- ### 使用示例
81
-
82
- ```vue
83
- <template>
84
- <aside :style="{ width: sidebarWidth + 'px' }">
85
- <!-- 侧边栏 -->
86
- </aside>
87
- <div
88
- class="resizer"
89
- @mousedown="startResize('left', $event)"
90
- ></div>
91
- </template>
92
- ```
package/src/api/docs.js DELETED
@@ -1,106 +0,0 @@
1
- import { config } from '../config.js'
2
-
3
- // 构建目录树结构(支持多层嵌套)
4
- function buildTree(files) {
5
- const root = { children: [] }
6
-
7
- files.forEach(file => {
8
- const parts = file.relativePath.split('/')
9
- let currentLevel = root
10
-
11
- for (let i = 0; i < parts.length - 1; i++) {
12
- const folderName = parts[i]
13
- const folderPath = parts.slice(0, i + 1).join('/')
14
-
15
- let folder = currentLevel.children.find(item => item.key === folderPath)
16
-
17
- if (!folder) {
18
- const match = folderName.match(/^(\d+)-(.+)$/)
19
- const folderLabel = match ? match[2] : folderName
20
- const cleanFolderLabel = folderLabel.replace(/[。.]$/, '')
21
- folder = {
22
- type: 'folder',
23
- key: folderPath,
24
- label: cleanFolderLabel,
25
- order: match ? parseInt(match[1]) : 999,
26
- level: i,
27
- children: [],
28
- expanded: config.folderExpanded
29
- }
30
- currentLevel.children.push(folder)
31
- }
32
-
33
- currentLevel = folder
34
- }
35
-
36
- currentLevel.children.push({
37
- type: 'file',
38
- ...file
39
- })
40
- })
41
-
42
- function sortChildren(node) {
43
- if (node.children) {
44
- node.children.sort((a, b) => a.order - b.order)
45
- node.children.forEach(child => sortChildren(child))
46
- }
47
- }
48
-
49
- sortChildren(root)
50
- return root.children
51
- }
52
-
53
- // 获取文档列表
54
- export async function getDocsList() {
55
- // 尝试 CLI 模式:检查是否有用户文档 API
56
- try {
57
- const response = await fetch('/@user-docs-list')
58
- if (response.ok) {
59
- return await response.json()
60
- }
61
- } catch {
62
- // 忽略错误,继续使用开发模式
63
- }
64
-
65
- // 开发模式:扫描 public/docs 目录
66
- try {
67
- // 排除隐藏目录和隐藏文件(以 . 开头的路径段)
68
- const modules = import.meta.glob('/public/docs/**/*.md', { eager: false })
69
- const files = []
70
-
71
- for (const path in modules) {
72
- const relativePath = path.replace('/public/docs/', '').replace('.md', '')
73
- const parts = relativePath.split('/')
74
- const fileName = parts[parts.length - 1]
75
-
76
- const match = fileName.match(/^(\d+)-(.+)$/)
77
- if (match) {
78
- const [, order, name] = match
79
- const cleanName = name.replace(/[。.]$/, '')
80
- files.push({
81
- key: relativePath,
82
- label: cleanName,
83
- order: parseInt(order),
84
- path: `/docs/${relativePath}.md`,
85
- relativePath,
86
- level: parts.length - 1
87
- })
88
- } else {
89
- const cleanFileName = fileName.replace(/[。.]$/, '')
90
- files.push({
91
- key: relativePath,
92
- label: cleanFileName,
93
- order: 999,
94
- path: `/docs/${relativePath}.md`,
95
- relativePath,
96
- level: parts.length - 1
97
- })
98
- }
99
- }
100
-
101
- return buildTree(files)
102
- } catch (error) {
103
- console.error('获取文档列表失败:', error)
104
- return []
105
- }
106
- }