markview-vue 0.1.3 → 0.1.6

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 CHANGED
@@ -1,115 +1,709 @@
1
- # markview-vue
1
+ # Markview Vue
2
2
 
3
- Vue 3 Markdown/MDX 渲染组件。
3
+ 现代化的 Vue 3 Markdown/MDX 渲染组件,提供完整的文档渲染解决方案。
4
4
 
5
- ## 背景
5
+ ## 特性
6
6
 
7
- 我们在做文档站的时候,需要一个 Markdown 渲染方案。看了一圈 Vue 生态里的库,要么功能不全,要么渲染出来的效果不太行——代码块没有好看的高亮,表格样式很素,暗黑模式支持也差。
7
+ - **MDX 支持** - 在 Markdown 中嵌入 Vue 组件,支持完整的响应式交互
8
+ - **语法高亮** - 基于 Shiki 引擎,与 VS Code 共享相同的语法着色逻辑
9
+ - **数学公式** - KaTeX 渲染,支持 LaTeX 语法
10
+ - **GFM 扩展** - 表格、任务列表、删除线、自动链接等
11
+ - **自定义容器** - Semi Design 风格的提示框组件
12
+ - **主题系统** - 内置亮色/暗色主题,支持 CSS 变量定制
13
+ - **目录导航** - 自动提取标题生成 TOC,支持滚动高亮
14
+ - **交互增强** - 代码一键复制、图片点击预览、标题锚点链接
15
+ - **无障碍** - 遵循 ARIA 标准,支持键盘导航
16
+ - **TypeScript** - 完整的类型定义
8
17
 
9
- 与其拼凑各种库再花时间调样式,不如自己写一个。基于 MDX 做编译,用 Shiki 做代码高亮(和 VS Code 同款引擎),数学公式用 KaTeX,再把交互体验(代码复制、图片预览、目录导航这些)都做进去。样式这块用 CSS Variables,方便主题定制。
18
+ ## 技术栈
10
19
 
11
- ## 技术选型
20
+ | 技术 | 用途 | 说明 |
21
+ |------|------|------|
22
+ | MDX | 编译引擎 | 支持在 Markdown 中嵌入组件 |
23
+ | Shiki | 代码高亮 | VS Code 同款引擎,支持 100+ 语言 |
24
+ | KaTeX | 数学公式 | 快速的 LaTeX 渲染引擎 |
25
+ | remark-gfm | GFM 扩展 | GitHub Flavored Markdown 支持 |
26
+ | Vue 3 | UI 框架 | Composition API + TypeScript |
12
27
 
13
- - **MDX** - 编译引擎,支持在 Markdown 里嵌入 Vue 组件
14
- - **Shiki** - 代码高亮,VS Code 同款,支持上百种语言和多套主题
15
- - **KaTeX** - 数学公式渲染
16
- - **remark-gfm** - GitHub 风格扩展(表格、任务列表、删除线等)
17
- - **CSS Variables** - 样式系统,便于主题定制和暗黑模式切换
28
+ ## 安装
18
29
 
19
- ## 功能
30
+ ```bash
31
+ npm install markview-vue
32
+ # 或
33
+ pnpm add markview-vue
34
+ # 或
35
+ yarn add markview-vue
36
+ ```
20
37
 
21
- 渲染层面,支持 MDX 编译、Shiki 语法高亮、KaTeX 公式、GFM 扩展。
38
+ ## 快速开始
22
39
 
23
- 交互层面,代码块和表格支持一键复制,图片可以点击预览,标题有锚点链接,长文章的标题还能折叠。
40
+ ### 基础用法
24
41
 
25
- 导航层面,提供 TOC 目录组件(自动提取标题、滚动时高亮当前位置)和回到顶部按钮。
42
+ ```vue
43
+ <template>
44
+ <MarkdownRender :raw="content" />
45
+ </template>
26
46
 
27
- 主题层面,内置亮色和暗黑两套主题,通过 CSS Variables 可以自定义任意样式。
47
+ <script setup>
48
+ import { MarkdownRender } from 'markview-vue'
49
+ import 'markview-vue/style.css'
28
50
 
29
- ## 安装
51
+ const content = `
52
+ # Hello World
30
53
 
31
- ```bash
32
- npm install markview-vue
54
+ 这是一段 **Markdown** 内容。
55
+
56
+ \`\`\`javascript
57
+ console.log('Hello Markview!');
58
+ \`\`\`
59
+ `
60
+ </script>
33
61
  ```
34
62
 
35
- ## 使用
63
+ ### 加载外部文件
36
64
 
37
65
  ```vue
38
66
  <template>
39
- <MarkdownRender :raw="content" />
67
+ <MarkdownRender :raw="mdContent" />
40
68
  </template>
41
69
 
42
70
  <script setup>
43
71
  import { MarkdownRender } from 'markview-vue'
44
72
  import 'markview-vue/style.css'
73
+ import mdContent from './document.md?raw'
74
+ </script>
75
+ ```
76
+
77
+ ## 核心功能
78
+
79
+ ### 1. 代码高亮
80
+
81
+ 支持 100+ 编程语言的语法高亮,基于 Shiki 引擎:
82
+
83
+ ```markdown
84
+ \`\`\`typescript
85
+ interface User {
86
+ id: number;
87
+ name: string;
88
+ }
89
+
90
+ const user: User = {
91
+ id: 1,
92
+ name: 'Alice'
93
+ };
94
+ \`\`\`
95
+ ```
96
+
97
+ 特性:
98
+ - 代码块标题显示
99
+ - 一键复制功能
100
+ - 行号显示(可配置)
101
+ - 主题定制
102
+
103
+ ### 2. 数学公式
104
+
105
+ 支持 LaTeX 语法的数学公式渲染:
106
+
107
+ **行内公式:** 使用单个 `$` 符号
108
+
109
+ ```markdown
110
+ 当 $a \ne 0$ 时,方程 $ax^2 + bx + c = 0$ 的解为 $x = \frac{-b \pm \sqrt{b^2-4ac}}{2a}$。
111
+ ```
112
+
113
+ **块级公式:** 使用双 `$$` 符号
114
+
115
+ ```markdown
116
+ $$
117
+ \int_{-\infty}^{\infty} e^{-x^2} dx = \sqrt{\pi}
118
+ $$
119
+ ```
120
+
121
+ ### 3. 表格
122
+
123
+ 支持 GFM 表格语法,包括对齐方式:
124
+
125
+ ```markdown
126
+ | 列名 | 左对齐 | 居中对齐 | 右对齐 |
127
+ |------|:-------|:--------:|-------:|
128
+ | 数据 | 内容A | 内容B | 123 |
129
+ ```
130
+
131
+ 特性:
132
+ - 表头固定(可配置)
133
+ - 表格复制功能
134
+ - 响应式布局
135
+ - 斑马纹样式
136
+
137
+ ### 4. 自定义容器
138
+
139
+ 支持 VitePress 兼容的容器语法,采用 Semi Design 视觉风格:
140
+
141
+ ```markdown
142
+ ::: tip
143
+ 这是一个提示框。提示框通常用于展示有用的建议或小技巧。
144
+ :::
145
+
146
+ ::: warning
147
+ 这是一个警告框。警告框用于提醒用户注意某些重要事项。
148
+ :::
149
+
150
+ ::: danger
151
+ 这是一个危险提示框。用于标记可能导致问题的操作或配置。
152
+ :::
153
+
154
+ ::: info
155
+ 这是一个信息框。用于展示一般性的补充信息。
156
+ :::
157
+ ```
158
+
159
+ 自定义标题:
160
+
161
+ ```markdown
162
+ ::: tip 最佳实践
163
+ 你可以自定义容器的标题文字。
164
+ :::
165
+ ```
166
+
167
+ 支持的类型:
168
+ - `tip` - 提示(绿色)
169
+ - `warning` - 警告(橙色)
170
+ - `danger` - 危险(红色)
171
+ - `info` - 信息(蓝色)
172
+
173
+ ### 5. 自定义 Vue 组件
174
+
175
+ Markview Vue 基于 MDX,支持在 Markdown 中嵌入 Vue 组件。
45
176
 
46
- const content = `# Hello World\n\n这是一段 **Markdown** 内容。`
177
+ #### 方式 1:预注册组件
178
+
179
+ ```vue
180
+ <template>
181
+ <MarkdownRender :raw="content" :components="{ MyButton, MyCard }" />
182
+ </template>
183
+
184
+ <script setup>
185
+ import { MarkdownRender } from 'markview-vue'
186
+ import MyButton from './components/MyButton.vue'
187
+ import MyCard from './components/MyCard.vue'
47
188
  </script>
48
189
  ```
49
190
 
50
- ## API
191
+ Markdown 中使用:
192
+
193
+ ```markdown
194
+ # 文档标题
195
+
196
+ <MyButton text="点击我" />
197
+
198
+ <MyCard title="卡片标题">
199
+ 卡片内容支持完整的 Markdown 语法。
200
+ </MyCard>
201
+ ```
202
+
203
+ #### 方式 2:MDX 中直接定义
204
+
205
+ ```mdx
206
+ export const Alert = ({ type, children }) => (
207
+ <div class={`alert alert-${type}`}>
208
+ {children}
209
+ </div>
210
+ );
211
+
212
+ <Alert type="success">操作成功!</Alert>
213
+ ```
214
+
215
+ #### 方式 3:组件嵌套
216
+
217
+ ```markdown
218
+ ::: tip
219
+ <MyButton text="容器内的按钮" />
220
+ :::
221
+ ```
222
+
223
+ 详细说明请参考 [自定义组件指南](./CUSTOM_COMPONENTS.md)。
224
+
225
+ ### 6. 目录导航(TOC)
226
+
227
+ 自动提取文档标题生成目录:
228
+
229
+ ```vue
230
+ <MarkdownRender
231
+ :raw="content"
232
+ :show-toc="true"
233
+ :toc-min-level="2"
234
+ :toc-max-level="4"
235
+ :toc-mode="'sidebar'"
236
+ @toc-change="handleTocChange"
237
+ />
238
+ ```
239
+
240
+ 特性:
241
+ - 自动提取 H1-H6 标题
242
+ - 滚动时高亮当前位置
243
+ - 点击跳转到对应章节
244
+ - 支持侧边栏和嵌入式两种布局
245
+
246
+ ### 7. 图片预览
247
+
248
+ 点击图片自动弹出预览窗口,支持缩放、旋转等操作。
249
+
250
+ ### 8. 回到顶部
251
+
252
+ 长文档自动显示回到顶部按钮:
253
+
254
+ ```vue
255
+ <MarkdownRender
256
+ :raw="content"
257
+ :show-back-top="true"
258
+ :back-top-threshold="300"
259
+ />
260
+ ```
261
+
262
+ ## API 文档
51
263
 
52
264
  ### Props
53
265
 
54
266
  | 属性 | 类型 | 默认值 | 说明 |
55
267
  |------|------|--------|------|
56
- | `raw` | `string` | `''` | Markdown/MDX 内容 |
268
+ | `raw` | `string` | `''` | Markdown/MDX 原始内容 |
57
269
  | `format` | `'md' \| 'mdx'` | `'mdx'` | 内容格式 |
58
- | `theme` | `'light' \| 'dark'` | `'light'` | 主题 |
59
- | `remarkGfm` | `boolean` | `true` | GFM 扩展 |
270
+ | `components` | `Record<string, Component>` | `{}` | 自定义组件映射表 |
271
+ | `theme` | `'light' \| 'dark'` | `'light'` | 主题模式 |
272
+ | `remarkGfm` | `boolean` | `true` | 是否启用 GFM 扩展 |
60
273
  | `remarkPlugins` | `PluggableList` | `[]` | 自定义 remark 插件 |
61
274
  | `rehypePlugins` | `PluggableList` | `[]` | 自定义 rehype 插件 |
62
- | `components` | `object` | `{}` | 自定义组件映射 |
63
- | `showToc` | `boolean` | `false` | 显示目录 |
64
- | `tocMinLevel` | `number` | `2` | 目录最小层级 |
65
- | `tocMaxLevel` | `number` | `3` | 目录最大层级 |
66
- | `showBackTop` | `boolean` | `false` | 显示回到顶部按钮 |
67
- | `backTopThreshold` | `number` | `300` | 按钮显示的滚动阈值 (px) |
275
+ | `style` | `CSSProperties` | - | 自定义样式对象 |
276
+ | `className` | `string` | - | 自定义 CSS 类名 |
277
+ | `prefix` | `string` | `'md'` | CSS 类名前缀 |
278
+ | `height` | `string` | - | 固定高度(如 `'500px'`) |
279
+ | `maxHeight` | `string` | - | 最大高度(如 `'80vh'`) |
280
+ | `showToc` | `boolean` | `false` | 是否显示目录 |
281
+ | `tocMinLevel` | `number` | `2` | 目录最小层级(H2) |
282
+ | `tocMaxLevel` | `number` | `4` | 目录最大层级(H4) |
283
+ | `docTitle` | `string` | - | 文档标题(显示在 TOC 顶部) |
284
+ | `tocMode` | `'sidebar' \| 'embedded'` | `'sidebar'` | 目录布局模式 |
285
+ | `showBackTop` | `boolean` | `false` | 是否显示回到顶部按钮 |
286
+ | `backTopThreshold` | `number` | `300` | 回到顶部按钮显示阈值(像素) |
68
287
 
69
288
  ### Events
70
289
 
71
- | 事件 | 说明 |
72
- |------|------|
73
- | `rendered` | 渲染完成 |
74
- | `error` | 渲染出错,回调参数 `(error: Error)` |
75
- | `toc-change` | 目录数据变化,回调参数 `(toc: TocItem[])` |
76
- | `toc-click` | 点击目录项,回调参数 `(item: TocItem)` |
290
+ | 事件名 | 参数 | 说明 |
291
+ |--------|------|------|
292
+ | `rendered` | - | 渲染完成时触发 |
293
+ | `error` | `(error: Error)` | 渲染出错时触发 |
294
+ | `toc-change` | `(toc: TocItem[])` | 目录数据变化时触发 |
295
+ | `toc-click` | `(item: TocItem)` | 点击目录项时触发 |
296
+ | `scroll-to-top` | - | 点击回到顶部按钮时触发 |
297
+
298
+ ### 类型定义
299
+
300
+ ```typescript
301
+ interface TocItem {
302
+ level: number; // 标题层级 (1-6)
303
+ text: string; // 标题文本
304
+ id: string; // 锚点 ID
305
+ }
306
+
307
+ interface MarkdownRenderProps {
308
+ raw?: string;
309
+ format?: 'md' | 'mdx';
310
+ components?: Record<string, any>;
311
+ theme?: 'light' | 'dark';
312
+ remarkGfm?: boolean;
313
+ remarkPlugins?: PluggableList;
314
+ rehypePlugins?: PluggableList;
315
+ style?: Record<string, any>;
316
+ className?: string;
317
+ prefix?: string;
318
+ height?: string;
319
+ maxHeight?: string;
320
+ showToc?: boolean;
321
+ tocMinLevel?: number;
322
+ tocMaxLevel?: number;
323
+ docTitle?: string;
324
+ tocMode?: 'sidebar' | 'embedded';
325
+ showBackTop?: boolean;
326
+ backTopThreshold?: number;
327
+ }
328
+ ```
77
329
 
78
- ### 导出
330
+ ### 导出内容
79
331
 
80
- ```ts
332
+ ```typescript
81
333
  // 主组件
82
- import { MarkdownRender, CodeBlock, Table, Blockquote, Heading } from 'markview-vue'
334
+ import { MarkdownRender } from 'markview-vue'
335
+
336
+ // 子组件(可选)
337
+ import {
338
+ CodeBlock,
339
+ Table,
340
+ Blockquote,
341
+ Container,
342
+ Heading,
343
+ Toc
344
+ } from 'markview-vue'
83
345
 
84
346
  // 基础组件
85
- import { Tooltip, Toast, Icon, Tag, ImagePreview } from 'markview-vue'
347
+ import {
348
+ Icon,
349
+ Tooltip,
350
+ Toast,
351
+ ImagePreview,
352
+ Tag
353
+ } from 'markview-vue'
86
354
 
87
355
  // 工具函数
88
- import { toast, copyToClipboard } from 'markview-vue'
89
-
90
- // 类型
91
- interface TocItem {
92
- level: number
93
- text: string
94
- id: string
95
- }
356
+ import {
357
+ toast,
358
+ copyToClipboard,
359
+ highlightCode,
360
+ preprocessContainers
361
+ } from 'markview-vue'
362
+
363
+ // 类型定义
364
+ import type {
365
+ TocItem,
366
+ MarkdownRenderProps,
367
+ IconName,
368
+ ContainerType
369
+ } from 'markview-vue'
96
370
  ```
97
371
 
98
- ## 样式定制
372
+ ## 高级用法
373
+
374
+ ### 主题定制
99
375
 
100
- 通过覆盖 CSS Variables 来自定义主题:
376
+ 通过 CSS 变量自定义主题:
101
377
 
102
378
  ```css
103
379
  :root {
104
- --md-color-text: #171717;
105
- --md-color-link: #2563eb;
106
- --md-code-header-bg: #f0f0f2;
107
- --md-code-body-bg: #fafafa;
108
- --md-table-border: #e5e5e5;
380
+ /* 文本颜色 */
381
+ --md-color-text: #1f2937;
382
+ --md-color-text-secondary: #6b7280;
383
+
384
+ /* 链接颜色 */
385
+ --md-color-link: #0064fa;
386
+ --md-color-link-hover: #005dd6;
387
+
388
+ /* 代码块 */
389
+ --md-code-header-bg: #f9fafb;
390
+ --md-code-body-bg: #ffffff;
391
+ --md-code-border: #e5e7eb;
392
+
393
+ /* 表格 */
394
+ --md-table-border: #e5e7eb;
109
395
  --md-table-header-bg: #f9fafb;
396
+ --md-table-row-hover-bg: #f9fafb;
397
+
398
+ /* 引用块 */
399
+ --md-blockquote-border: #0064fa;
400
+ --md-blockquote-bg: rgba(0, 100, 250, 0.06);
401
+ }
402
+ ```
403
+
404
+ ### 自定义插件
405
+
406
+ ```vue
407
+ <script setup>
408
+ import { MarkdownRender } from 'markview-vue'
409
+ import remarkDirective from 'remark-directive'
410
+ import rehypeAutolinkHeadings from 'rehype-autolink-headings'
411
+
412
+ const remarkPlugins = [remarkDirective]
413
+ const rehypePlugins = [rehypeAutolinkHeadings]
414
+ </script>
415
+
416
+ <template>
417
+ <MarkdownRender
418
+ :raw="content"
419
+ :remark-plugins="remarkPlugins"
420
+ :rehype-plugins="rehypePlugins"
421
+ />
422
+ </template>
423
+ ```
424
+
425
+ ### 响应式高度
426
+
427
+ ```vue
428
+ <template>
429
+ <!-- 固定高度,内部滚动 -->
430
+ <MarkdownRender :raw="content" height="500px" />
431
+
432
+ <!-- 最大高度,超出滚动 -->
433
+ <MarkdownRender :raw="content" max-height="80vh" />
434
+
435
+ <!-- 视口高度计算 -->
436
+ <MarkdownRender :raw="content" height="calc(100vh - 60px)" />
437
+ </template>
438
+ ```
439
+
440
+ ### 目录配置
441
+
442
+ ```vue
443
+ <template>
444
+ <MarkdownRender
445
+ :raw="content"
446
+ :show-toc="true"
447
+ :toc-min-level="2"
448
+ :toc-max-level="3"
449
+ :doc-title="'文档标题'"
450
+ :toc-mode="'sidebar'"
451
+ @toc-change="handleTocChange"
452
+ @toc-click="handleTocClick"
453
+ />
454
+ </template>
455
+
456
+ <script setup>
457
+ const handleTocChange = (toc) => {
458
+ console.log('目录更新:', toc)
459
+ }
460
+
461
+ const handleTocClick = (item) => {
462
+ console.log('点击目录:', item)
110
463
  }
464
+ </script>
465
+ ```
466
+
467
+ ### 完整配置示例
468
+
469
+ ```vue
470
+ <template>
471
+ <MarkdownRender
472
+ :raw="content"
473
+ format="mdx"
474
+ :components="customComponents"
475
+ :theme="isDark ? 'dark' : 'light'"
476
+ :remark-gfm="true"
477
+ :remark-plugins="remarkPlugins"
478
+ :rehype-plugins="rehypePlugins"
479
+ :show-toc="true"
480
+ :toc-min-level="2"
481
+ :toc-max-level="4"
482
+ :toc-mode="'sidebar'"
483
+ :show-back-top="true"
484
+ :back-top-threshold="300"
485
+ height="calc(100vh - 80px)"
486
+ class-name="custom-markdown"
487
+ @rendered="onRendered"
488
+ @error="onError"
489
+ @toc-change="onTocChange"
490
+ />
491
+ </template>
492
+
493
+ <script setup>
494
+ import { ref } from 'vue'
495
+ import { MarkdownRender } from 'markview-vue'
496
+ import 'markview-vue/style.css'
497
+
498
+ const isDark = ref(false)
499
+ const customComponents = { /* 自定义组件 */ }
500
+ const remarkPlugins = []
501
+ const rehypePlugins = []
502
+
503
+ const onRendered = () => {
504
+ console.log('渲染完成')
505
+ }
506
+
507
+ const onError = (error) => {
508
+ console.error('渲染错误:', error)
509
+ }
510
+
511
+ const onTocChange = (toc) => {
512
+ console.log('目录更新:', toc)
513
+ }
514
+ </script>
515
+ ```
516
+
517
+ ## 组件库导出
518
+
519
+ 除主组件外,还导出以下可复用组件:
520
+
521
+ ### 核心组件
522
+
523
+ ```typescript
524
+ import {
525
+ CodeBlock, // 代码块
526
+ Table, // 表格
527
+ Blockquote, // 引用块
528
+ Container, // 自定义容器
529
+ Heading, // 标题
530
+ Toc, // 目录
531
+ } from 'markview-vue'
532
+ ```
533
+
534
+ ### 基础组件
535
+
536
+ ```typescript
537
+ import {
538
+ Icon, // 图标
539
+ Tooltip, // 工具提示
540
+ Toast, // 提示消息
541
+ ImagePreview, // 图片预览
542
+ Tag, // 标签
543
+ Skeleton, // 骨架屏
544
+ } from 'markview-vue'
545
+ ```
546
+
547
+ ### 工具函数
548
+
549
+ ```typescript
550
+ import {
551
+ toast, // 显示提示消息
552
+ copyToClipboard, // 复制到剪贴板
553
+ highlightCode, // 代码高亮
554
+ preprocessContainers, // 容器语法预处理
555
+ } from 'markview-vue'
556
+
557
+ // 使用示例
558
+ toast.success('操作成功')
559
+ await copyToClipboard('复制的内容')
560
+ ```
561
+
562
+ ## 浏览器支持
563
+
564
+ - Chrome >= 90
565
+ - Firefox >= 88
566
+ - Safari >= 14
567
+ - Edge >= 90
568
+
569
+ ## 性能优化
570
+
571
+ ### 按需加载
572
+
573
+ Shiki 语言包采用动态 import,仅在使用时加载:
574
+
575
+ ```typescript
576
+ // 预设语言:javascript, typescript, python, vue 等
577
+ // 其他语言首次使用时自动下载
111
578
  ```
112
579
 
113
- ## License
580
+ ### 虚拟滚动
581
+
582
+ 大型文档(1000+ 行)建议启用虚拟滚动(规划中)。
583
+
584
+ ### 缓存策略
585
+
586
+ MDX 编译结果会缓存,相同内容不会重复编译。
587
+
588
+ ## 开发指南
589
+
590
+ ### 本地开发
591
+
592
+ ```bash
593
+ # 克隆仓库
594
+ git clone https://github.com/your-repo/markview-vue.git
595
+ cd markview-vue
596
+
597
+ # 安装依赖
598
+ pnpm install
599
+
600
+ # 启动开发服务器
601
+ pnpm dev
602
+ # 访问 http://localhost:3002
603
+ ```
604
+
605
+ ### 构建
606
+
607
+ ```bash
608
+ # 构建库文件
609
+ pnpm build
610
+
611
+ # 构建演示站点
612
+ pnpm build:demo
613
+
614
+ # 预览演示站点
615
+ pnpm preview
616
+ ```
617
+
618
+ ### 项目结构
619
+
620
+ ```
621
+ markview-vue/
622
+ ├── src/ # 源代码
623
+ │ ├── components/ # 核心组件
624
+ │ ├── base/ # 基础组件
625
+ │ ├── utils/ # 工具函数
626
+ │ ├── styles/ # 样式文件
627
+ │ └── index.ts # 入口文件
628
+ ├── dev/ # 开发环境
629
+ │ ├── components/ # 演示组件
630
+ │ ├── content/ # 演示内容
631
+ │ └── App.vue # 演示应用
632
+ ├── dist/ # 构建输出
633
+ └── demo-dist/ # 演示站点输出
634
+ ```
635
+
636
+ 详细开发指南请参考 [DEVELOPMENT.md](./DEVELOPMENT.md)。
637
+
638
+ ## 常见问题
639
+
640
+ ### 1. 如何修改代码块主题?
641
+
642
+ 目前使用 `github-light` 主题。自定义主题支持计划中。
643
+
644
+ ### 2. 是否支持服务端渲染(SSR)?
645
+
646
+ 暂不支持。MDX 编译依赖浏览器环境。
647
+
648
+ ### 3. 如何处理大型文档?
649
+
650
+ 建议:
651
+ - 使用 `height` 或 `maxHeight` 启用内部滚动
652
+ - 拆分文档为多个小文件
653
+ - 禁用不需要的功能(如 TOC)
654
+
655
+ ### 4. 数学公式不显示?
656
+
657
+ 确保引入了 KaTeX 样式:
658
+
659
+ ```javascript
660
+ import 'markview-vue/style.css' // 已包含 KaTeX 样式
661
+ ```
662
+
663
+ ### 5. 组件在 Markdown 中不工作?
664
+
665
+ 检查:
666
+ - 是否设置 `format="mdx"`
667
+ - 组件名是否使用 PascalCase
668
+ - 组件是否通过 `components` prop 注册
669
+
670
+ ## 更新日志
671
+
672
+ 查看 [CHANGELOG.md](./CHANGELOG.md) 了解版本历史。
673
+
674
+ ## 贡献指南
675
+
676
+ 欢迎提交 Issue 和 Pull Request。
677
+
678
+ 贡献前请阅读:
679
+ - [开发指南](./DEVELOPMENT.md)
680
+ - [代码规范](./CODE_OF_CONDUCT.md)
681
+
682
+ ## 许可证
683
+
684
+ MIT License
685
+
686
+ Copyright (c) 2024-present
687
+
688
+ ## 相关链接
689
+
690
+ - [在线演示](https://your-demo-site.com)
691
+ - [GitHub 仓库](https://github.com/your-repo/markview-vue)
692
+ - [npm 包](https://www.npmjs.com/package/markview-vue)
693
+ - [问题反馈](https://github.com/your-repo/markview-vue/issues)
694
+
695
+ ## 致谢
696
+
697
+ 本项目基于以下优秀的开源项目:
698
+
699
+ - [MDX](https://mdxjs.com/) - Markdown 扩展格式
700
+ - [Shiki](https://shiki.style/) - 语法高亮引擎
701
+ - [KaTeX](https://katex.org/) - 数学公式渲染
702
+ - [remark](https://github.com/remarkjs/remark) - Markdown 处理器
703
+ - [rehype](https://github.com/rehypejs/rehype) - HTML 处理器
704
+ - [lucide-vue-next](https://lucide.dev/) - 图标库
705
+ - [Semi Design](https://semi.design/) - 设计系统参考
706
+
707
+ ---
114
708
 
115
- MIT
709
+ **如有问题或建议,欢迎提交 Issue。**