@zjlab-frontier/markdown 1.1.4 → 1.1.5

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 (2) hide show
  1. package/README.md +72 -201
  2. package/package.json +1 -1
package/README.md CHANGED
@@ -1,8 +1,9 @@
1
1
  # `@zjlab-frontier/markdown` 使用说明文档
2
2
 
3
3
  > **包名**:`@zjlab-frontier/markdown`
4
- > **适用框架**:React(支持 React 16.8+、17.x、18.x)
5
- > **功能亮点**:支持 **Mermaid 图表**、**LaTeX 数学公式(KaTeX)**、**代码高亮**、**GitHub 风格 Markdown(GFM)**、**自动换行**、**代码复制**、**长代码折叠**、**媒体自动识别** 等。
4
+ > **适用框架**:React(支持 React 18+)
5
+ > **核心引擎**:`react-markdown` + `better-react-mathjax` (MathJax v3) + `mermaid`
6
+ > **功能亮点**:支持 **Mermaid 图表**、**LaTeX 数学公式(MathJax)**、**代码高亮**、**GitHub 风格 Markdown(GFM)**、**长代码折叠**、**一键复制**、**媒体自动识别** 等。
6
7
 
7
8
  ---
8
9
 
@@ -12,16 +13,16 @@
12
13
  npm install @zjlab-frontier/markdown
13
14
  ```
14
15
 
15
- > ⚠️ 注意:本组件为 **React 组件**,需确保项目中已安装 React(版本16.8)。
16
+ > ⚠️ **前置依赖**:本项目依赖 `react` `react-dom` (18.0.0)。
16
17
 
17
18
  ---
18
19
 
19
20
  ## 🚀 快速开始
20
21
 
21
- ### 1. 引入组件与样式
22
+ ### 1. 引入组件
22
23
 
23
24
  ```tsx
24
- import ZJMarkdown from '@zjlab-frontier/markdown';
25
+ import { ZJMarkdown } from '@zjlab-frontier/markdown';
25
26
  ```
26
27
 
27
28
  ### 2. 基本使用
@@ -31,94 +32,76 @@ function App() {
31
32
  const markdownContent = `
32
33
  # 欢迎使用 ZJLab Markdown
33
34
 
34
- 这是一个支持 **Mermaid**、**LaTeX** 和 **代码高亮** 的 React Markdown 组件。
35
+ 这是一个功能强大的 React Markdown 组件。
35
36
 
36
- - ✅ 表格
37
- - ✅ 任务列表
38
- - ✅ 数学公式:$E = mc^2$
39
- - ✅ 代码块(带复制按钮)
40
- - ✅ 自动识别音视频链接
37
+ - ✅ **数学公式**:$E = mc^2$ 或 \[ \sum_{i=1}^n i = \frac{n(n+1)}{2} \]
38
+ - ✅ **Mermaid 图表**:流程图、时序图等
39
+ - ✅ **代码增强**:自动识别语言、复制按钮、长代码折叠
40
+ - ✅ **多媒体**:自动识别 mp3/mp4 链接
41
41
  `;
42
42
 
43
- return <ZJMarkdown content={markdownContent} />;
43
+ return (
44
+ <div style={{ padding: 20 }}>
45
+ <ZJMarkdown
46
+ content={markdownContent}
47
+ fontSize={16}
48
+ />
49
+ </div>
50
+ );
44
51
  }
45
52
  ```
46
53
 
47
54
  ---
48
55
 
49
- ## 测试组件
50
-
51
- 用来快速测试、布局、调试的组件,自带全面的 Markdown 测试内容
52
-
53
- ### 1. 引入组件
54
-
55
- ```tsx
56
- import { TestZJMarkdown } from '@zjlab-frontier/markdown';
57
- ```
58
-
59
- ### 2. 使用
60
-
61
- ```tsx
62
- <TestZJMarkdown />
63
- ```
64
-
65
- ---
66
-
67
56
  ## 🧩 功能详解
68
57
 
69
- ### 1. **GitHub 风格 Markdown(GFM)支持**
70
-
71
- 通过 `remark-gfm` 插件,完整支持:
72
-
73
- - 表格
74
- - 删除线 `~~text~~`
75
- - 任务列表 `- [x] done`
76
- - 自动链接(如 `https://example.com`)
77
-
78
- ✅ 示例:
79
-
80
- ```md
81
- | 语法 | 描述 |
82
- |------|------|
83
- | `**bold**` | 加粗 |
58
+ ### 1. **数学公式(MathJax v3)**
84
59
 
85
- - [x] 支持 GFM
86
- - [ ] 其他功能
87
- ```
60
+ 组件内置 `better-react-mathjax`,支持强大的 LaTeX 数学公式渲染。
88
61
 
89
- ---
62
+ #### ✅ 支持语法:
90
63
 
91
- ### 2. **LaTeX 数学公式(KaTeX)**
64
+ - **行内公式**:`$...$` `\(...\)`
65
+ - **块级公式**:`$$...$$` 或 `\[...\]`
66
+ - **环境支持**:支持 `align`, `gather`, `matrix`, `cases` 等常用环境。
92
67
 
93
- 支持两种语法:
68
+ #### ⚙️ 预处理增强:
94
69
 
95
- - 行内公式:`$...$` `\(...\)`
96
- - 块级公式:`$$...$$` 或 `\[...\]`
70
+ 组件内置了 **LaTeX 预处理逻辑**,解决了 Markdown 转义字符(如 `\` 和 `_`)与 LaTeX 语法冲突的问题。
97
71
 
98
- > ⚠️ 注意:组件内部会自动将 `\(...\)` 和 `\[...\]` 转换为 `$...$` 和 `$$...$$`,确保 KaTeX 正确渲染。
72
+ - 自动保护 `\\` 换行符
73
+ - 自动处理 `\ce{...}` (化学式) 和 `\boxed{...}`
74
+ - 兼容 `\begin{align}...\end{align}` 等环境写法
99
75
 
100
- ✅ 示例:
76
+ **示例:**
101
77
 
102
- ```md
78
+ ```latex
103
79
  爱因斯坦质能方程:$E = mc^2$
104
80
 
105
81
  高斯积分:
106
82
  $$
107
- \int_{-\infty}^{\infty} e^{-x^2} dx = \sqrt{\pi}
83
+ \int_{-\infty}^{\infty} e^{-x^2} dx = \sqrt{\pi}
108
84
  $$
109
- ```
110
85
 
111
- > 📌 **样式说明**:已自动引入 `katex/dist/katex.min.css`,无需手动引入。
86
+ 矩阵:
87
+ \[
88
+ \begin{pmatrix}
89
+ a & b \\
90
+ c & d
91
+ \end{pmatrix}
92
+ \]
93
+ ```
112
94
 
113
95
  ---
114
96
 
115
- ### 3. **Mermaid 图表渲染**
116
97
 
117
- 在代码块中标注语言为 `mermaid` 即可自动渲染图表:
98
+ ### 2. **Mermaid 图表渲染**
118
99
 
119
- 示例:
100
+ 在代码块中标注语言为 `mermaid` 即可自动渲染图表。
120
101
 
121
- ````
102
+ **示例:**
103
+
104
+ ````markdown
122
105
  ```mermaid
123
106
  graph TD
124
107
  A[Start] --> B{Is it?}
@@ -127,169 +110,57 @@ graph TD
127
110
  ```
128
111
  ````
129
112
 
130
- > 🔒 **安全机制**:
131
- > - 若 Mermaid 渲染失败(如语法错误),组件将 **静默失败**(不显示原始代码,避免泄露敏感内容)。
132
- > - 图表容器带有 `no-dark` 类,防止深色主题干扰 Mermaid 默认配色。
133
-
134
- > 🖱️ **交互**:点击图表可触发 `viewSvgInNewWindow()`(当前为预留功能,实际未启用弹窗,但保留点击事件扩展点)。
135
-
136
- ---
137
-
138
- ### 4. **代码高亮与增强功能**
139
-
140
- #### ✅ 支持特性:
141
-
142
- - 自动识别语言(基于 `language-xxx` class)
143
- - 显示语言标签(如 “javascript”)
144
- - 一键复制代码(右上角复制按钮)
145
- - 长代码块自动折叠(>400px 高度)
146
- - 纯文本类代码自动换行(如 `text`, `md`, `latex` 等)
147
-
148
- #### ✅ 支持自动换行的语言:
149
-
150
- ```txt
151
- "", "md", "markdown", "text", "txt", "plaintext", "tex", "latex"
152
- ```
153
-
154
- #### ✅ 复制按钮样式:
155
-
156
- - 使用 `.copy-code-button` 类,可通过 CSS 自定义图标。
157
-
158
113
  ---
159
114
 
160
- ### 5. **媒体自动识别**
161
-
162
- 组件会自动将特定后缀的链接转换为 `<audio>` 或 `<video>` 元素:
163
-
164
- #### 音频格式(自动转为 `<audio controls>`):
165
- - `.aac`, `.mp3`, `.opus`, `.wav`
166
-
167
- #### 视频格式(自动转为 `<video controls>`):
168
- - `.3gp`, `.3g2`, `.webm`, `.ogv`, `.mpeg`, `.mp4`, `.avi`
169
-
170
- ✅ 示例:
171
-
172
- ```md
173
- 听一段音乐:https://example.com/song.mp3
174
-
175
- 看一个视频:https://example.com/demo.mp4
176
- ```
177
-
178
- ---
179
-
180
- ### 6. **HTML 安全过滤(防 XSS)**
181
-
182
- 组件对输入内容进行 **双重安全处理**:
183
115
 
184
- 1. **转义危险字符**:`<`, `>`, `/`, `=` → 对应 HTML 实体
185
- 2. **智能跳过**:
186
- - 所有代码块(行内 `` `...` `` 和块级 ```...```)
187
- - LaTeX 公式(`$...$`, `$$...$$`)
116
+ ### 3. **代码块增强**
188
117
 
189
- > 保证公式和代码内容不被破坏,同时防止 XSS 攻击。
118
+ - **语言标注**:显示语言类型(如 `typescript`)。
119
+ - **一键复制**:提供复制按钮。
120
+ - **自动折叠**:高度超过 **400px** 自动折叠。
121
+ - **自动换行**:对文本类语言(`text`, `md`, `latex`)强制换行。
190
122
 
191
123
  ---
192
124
 
193
- ### 7. **文本方向与段落**
194
-
195
- - 所有 `<p>` 标签自动添加 `dir="auto"`,支持多语言自动排版。
196
- - 所有换行符(单个 `\n`)自动转为 `<br>`(通过 `remark-breaks`)。
197
-
198
- ---
199
-
200
- ## 🎨 自定义样式
201
-
202
- ### 1. **全局样式类**
203
-
204
- 组件根元素自动应用:
205
125
 
206
- ```html
207
- <div class="markdown-body">...</div>
208
- ```
209
-
210
- > `.markdown-body` 采用 **GitHub 风格样式**(基于 `github-markdown-css` 理念定制)。
211
-
212
- ### 2. **自定义字体与字号**
213
-
214
- 通过 props 控制:
215
-
216
- ```tsx
217
- <ZJMarkdown
218
- content={content}
219
- fontSize={18} // 默认 16
220
- fontFamily="'Inter', sans-serif"
221
- />
222
- ```
223
-
224
- ### 3. **覆盖内置样式**
225
-
226
- 可通过 CSS 覆盖以下关键类:
126
+ ### 4. **GitHub 风格 Markdown (GFM)**
227
127
 
228
- | 类名 | 用途 |
229
- |------|------|
230
- | `.markdown-body` | 整体容器 |
231
- | `.mermaid` | Mermaid 图表容器 |
232
- | `.copy-code-button` | 代码复制按钮 |
233
- | `.show-hide-button` | 代码折叠按钮 |
234
- | `.no-dark` | 防止深色主题干扰 Mermaid |
128
+ 集成 `remark-gfm`,支持表格、任务列表、删除线等。
235
129
 
236
130
  ---
237
131
 
238
- ## 🛠️ API 说明
239
132
 
240
- ### `ZJMarkdown` Props
241
-
242
- | 属性 | 类型 | 默认值 | 说明 |
243
- |------|------|--------|------|
244
- | `content` | `string` | **必需** | Markdown 源字符串 |
245
- | `fontSize` | `number` | `16` | 字体大小(单位:px) |
246
- | `fontFamily` | `string` | `"inherit"` | 字体族 |
247
- | `onContextMenu` | `React.MouseEventHandler` | - | 右键菜单事件 |
248
- | `onDoubleClickCapture` | `React.MouseEventHandler` | - | 双击捕获事件 |
249
- | 其他 `div` 原生属性 | - | - | 如 `className`, `style` 等(透传至根 `div`) |
133
+ ### 5. **媒体自动识别**
250
134
 
251
- > ⚠️ 注意:`content` 中的 HTML 标签会被 **安全过滤**,仅保留必要结构。
135
+ - **音频** (`.mp3`, `.wav` 等) `<audio controls>`
136
+ - **视频** (`.mp4`, `.webm` 等) → `<video controls>`
252
137
 
253
138
  ---
254
139
 
255
- ## 🧪 注意事项与限制
256
-
257
- 1. **Mermaid 渲染异步性**:
258
- - 首次渲染可能因 debounce 延迟(600ms)导致短暂显示原始代码。
259
- - 组件已做兼容处理,尽量减少此现象。
140
+ ## 🎨 样式与自定义
260
141
 
261
- 2. **KaTeX 公式转义**:
262
- - 不要混用 `\(...\)` 和 `$...$`,建议统一使用 `$...$`。
263
- - 公式内避免使用 `<`, `>` 等符号,或使用 `\lt`, `\gt` 替代。
142
+ 组件根元素默认带有 `.markdown-body` 类。
264
143
 
265
- 3. **代码折叠逻辑**:
266
- - 仅当代码块高度 > 400px 时显示“查看全部”按钮。
267
- - 折叠状态下,代码块最大高度为 400px,`overflow-y: hidden`。
144
+ ### Props 属性
268
145
 
269
- 4. **性能优化**:
270
- - 内部使用 `React.memo`,仅当 `content` 变化时重渲染。
271
- - 建议对大型文档做分页或懒加载。
146
+ | 属性名 | 类型 | 默认值 | 说明 |
147
+ |:---|:---|:---|:---|
148
+ | `content` | `string` | **必填** | Markdown 源码字符串 |
149
+ | `fontSize` | `number` | `16` | 正文字体大小 (px) |
150
+ | `fontFamily` | `string` | `'inherit'` | 字体设置 |
151
+ | `style` | `CSSProperties` | - | 自定义根元素样式 |
272
152
 
273
153
  ---
274
154
 
275
- ## 📜 许可证
155
+ ## 🛠️ 开发与构建
276
156
 
277
- MIT License
157
+ ```bash
158
+ npm run build # 构建产物
159
+ npm run build:types # 生成类型定义
160
+ ```
278
161
 
279
162
  ---
280
163
 
281
- ## 🙏 致谢
282
-
283
- 本组件基于以下优秀开源库构建:
284
-
285
- - [`react-markdown`](https://github.com/remarkjs/react-markdown)
286
- - [`rehype-highlight`](https://github.com/rehypejs/rehype-highlight)
287
- - [`rehype-katex`](https://github.com/remarkjs/remark-math)
288
- - [`mermaid`](https://mermaid.js.org/)
289
- - [`katex`](https://katex.org/)
290
- - [`clsx`](https://github.com/lukeed/clsx)
291
- - [`use-debounce`](https://github.com/xnimorz/use-debounce)
292
-
293
- ---
164
+ ## 📝 License
294
165
 
295
- > ✅ 本说明文档完整覆盖 `@zjlab-frontier/markdown@1.0.6` 所有功能,无省略,可直接用于团队协作或用户文档。
166
+ MIT
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zjlab-frontier/markdown",
3
- "version": "1.1.4",
3
+ "version": "1.1.5",
4
4
  "description": "Framework-agnostic Markdown component with support for Mermaid, KaTeX, and code highlighting. Core library is React-free; React adapter available optionally.",
5
5
  "main": "dist/index.umd.js",
6
6
  "types": "dist/index.d.ts",