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.
- package/README.md +3 -55
- package/bin/build.js +82 -7
- package/bin/md2ui.js +80 -4
- package/package.json +23 -9
- package/public/docs/00-/345/277/253/351/200/237/345/274/200/345/247/213.md +48 -28
- package/public/docs/01-/345/212/237/350/203/275/347/211/271/346/200/247.md +55 -40
- 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
- package/public/docs/02-Markdown/346/270/262/346/237/223/01-/344/273/243/347/240/201/345/235/227.md +91 -0
- package/public/docs/02-Markdown/346/270/262/346/237/223/02-/350/241/250/346/240/274.md +187 -0
- package/public/docs/02-Markdown/346/270/262/346/237/223/03-Mermaid/345/233/276/350/241/250.md +101 -0
- package/public/docs/02-Markdown/346/270/262/346/237/223/04-Frontmatter.md +32 -0
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- package/public/docs/06-/351/230/205/350/257/273/344/275/223/351/252/214/assets/img-1777261394722.png +0 -0
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- package/src/App.vue +130 -6
- package/src/components/AppSidebar.vue +181 -21
- package/src/components/CodeBlockNodeView.vue +72 -0
- package/src/components/DocContent.vue +25 -14
- package/src/components/EditorContent.vue +257 -0
- package/src/components/EditorToolbar.vue +264 -0
- package/src/components/ImageZoom.vue +199 -2
- package/src/components/MathBlockNodeView.vue +160 -0
- package/src/components/MathInlineNodeView.vue +145 -0
- package/src/components/MermaidNodeView.vue +149 -0
- package/src/components/TableBubbleMenu.vue +177 -0
- package/src/components/TableOfContents.vue +138 -32
- package/src/components/TopBar.vue +69 -4
- package/src/components/TreeNode.vue +232 -39
- package/src/components/WelcomePage.vue +2 -2
- package/src/composables/useDocHash.js +9 -1
- package/src/composables/useDocManager.js +325 -68
- package/src/composables/useDocTree.js +56 -1
- package/src/composables/useExportPdf.js +102 -0
- package/src/composables/useExportWord.js +73 -10
- package/src/composables/useFileWatcher.js +45 -0
- package/src/composables/useFrontmatter.js +2 -2
- package/src/composables/useMarkdown.js +529 -42
- package/src/composables/useScroll.js +47 -5
- package/src/config.js +1 -1
- package/src/extensions/CodeBlockCustom.js +113 -0
- package/src/extensions/MathBlock.js +107 -0
- package/src/extensions/MathInline.js +100 -0
- package/src/extensions/MermaidBlock.js +73 -0
- package/src/extensions/TableControls.js +670 -0
- package/src/services/DocService.js +184 -0
- package/src/style.css +2194 -39
- package/vite-plugin-doc-api.js +368 -0
- package/vite.config.js +2 -1
- package/public/docs/02-Mermaid/345/233/276/350/241/250.md +0 -102
- 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
- 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
- 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
- package/public/docs/04-API/345/217/202/350/200/203/01-/347/273/204/344/273/266API.md +0 -80
- package/public/docs/04-API/345/217/202/350/200/203/02-Composables.md +0 -92
- 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
|
-
}
|