@barzhsieh/nuxt-content-mermaid 2.2.3 → 3.0.2
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 +47 -502
- package/README.zh-TW.md +46 -509
- package/dist/module.d.mts +39 -53
- package/dist/module.json +3 -3
- package/dist/module.mjs +600 -155
- package/dist/runtime/built-in-renderer/BuiltInRenderer.d.vue.ts +0 -0
- package/dist/runtime/built-in-renderer/BuiltInRenderer.vue +597 -0
- package/dist/runtime/built-in-renderer/BuiltInRenderer.vue.d.ts +0 -0
- package/dist/runtime/component-configuration-error.d.ts +3 -0
- package/dist/runtime/component-configuration-error.js +7 -0
- package/dist/runtime/component-configuration.d.ts +23 -0
- package/dist/runtime/component-configuration.js +78 -0
- package/dist/runtime/components/ContentMermaidTransport.d.vue.ts +10 -0
- package/dist/runtime/components/ContentMermaidTransport.vue +21 -0
- package/dist/runtime/components/ContentMermaidTransport.vue.d.ts +10 -0
- package/dist/runtime/components/Mermaid.d.vue.ts +0 -31
- package/dist/runtime/components/Mermaid.vue +136 -743
- package/dist/runtime/components/Mermaid.vue.d.ts +0 -31
- package/dist/runtime/components/MermaidExpandOverlay.d.vue.ts +13 -16
- package/dist/runtime/components/MermaidExpandOverlay.vue +61 -53
- package/dist/runtime/components/MermaidExpandOverlay.vue.d.ts +13 -16
- package/dist/runtime/components/MermaidFullscreenPresentation.d.vue.ts +18 -0
- package/dist/runtime/components/MermaidFullscreenPresentation.vue +56 -0
- package/dist/runtime/components/MermaidFullscreenPresentation.vue.d.ts +18 -0
- package/dist/runtime/composables/useMermaidExpand.d.ts +16 -32
- package/dist/runtime/composables/useMermaidExpand.js +232 -75
- package/dist/runtime/composables/useMermaidFullscreen.d.ts +18 -0
- package/dist/runtime/composables/useMermaidFullscreen.js +242 -0
- package/dist/runtime/composables/useMermaidZoom.d.ts +5 -1
- package/dist/runtime/composables/useMermaidZoom.js +54 -28
- package/dist/runtime/configuration/core.d.ts +27 -0
- package/dist/runtime/configuration/core.js +340 -0
- package/dist/runtime/configuration/module.d.ts +17 -0
- package/dist/runtime/configuration/module.js +233 -0
- package/dist/runtime/configuration/runtime-options.d.ts +4 -0
- package/dist/runtime/configuration/runtime-options.js +57 -0
- package/dist/runtime/constants.d.ts +24 -0
- package/dist/runtime/constants.js +60 -2
- package/dist/runtime/direct-mermaid-config.d.ts +5 -0
- package/dist/runtime/direct-mermaid-config.js +216 -0
- package/dist/runtime/mermaid-config.d.ts +9 -5
- package/dist/runtime/mermaid-config.js +30 -19
- package/dist/runtime/mermaid-rendering.d.ts +28 -0
- package/dist/runtime/mermaid-rendering.js +140 -0
- package/dist/runtime/plugins/content-mermaid-transport.d.ts +2 -0
- package/dist/runtime/plugins/content-mermaid-transport.js +5 -0
- package/dist/runtime/plugins/mermaid.client.d.ts +0 -3
- package/dist/runtime/plugins/mermaid.client.js +14 -32
- package/dist/runtime/plugins/runtime-config.d.ts +2 -0
- package/dist/runtime/plugins/runtime-config.js +9 -0
- package/dist/runtime/rendererSelection.d.ts +43 -0
- package/dist/runtime/rendererSelection.js +36 -0
- package/dist/runtime/rendererSelectionOrchestration.d.ts +12 -0
- package/dist/runtime/rendererSelectionOrchestration.js +13 -0
- package/dist/runtime/runtime-snapshot.d.ts +3 -0
- package/dist/runtime/runtime-snapshot.js +26 -0
- package/dist/runtime/utils/index.d.ts +0 -4
- package/dist/runtime/utils/index.js +0 -37
- package/dist/types.d.mts +2 -2
- package/package.json +38 -32
- package/dist/runtime/utils/mermaid-transform.d.ts +0 -18
- package/dist/runtime/utils/mermaid-transform.js +0 -345
package/README.zh-TW.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
[中文](./README.zh-TW.md) | [English](./README.md)
|
|
1
|
+
[中文](./README.zh-TW.md) | [English](./README.md)
|
|
2
2
|
|
|
3
|
-
[](https://
|
|
3
|
+
[](https://nuxt-content-mermaid.barz.app/zh)
|
|
4
4
|
|
|
5
5
|
# nuxt-content-mermaid
|
|
6
6
|
|
|
@@ -11,546 +11,83 @@
|
|
|
11
11
|
[](https://mermaid.js.org/)
|
|
12
12
|
[](https://content.nuxt.com/)
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
**@barzhsieh/nuxt-content-mermaid** 會將 Nuxt Content Markdown 中的
|
|
15
|
+
`mermaid` 程式碼圍欄 (fence) 轉換為響應式、可互動的圖表,並支援延遲載入、深淺色
|
|
16
|
+
主題、工具列控制,以及由應用程式提供的渲染元件。
|
|
16
17
|
|
|
17
|
-
|
|
18
|
+
[英文正式文件](https://nuxt-content-mermaid.barz.app) 是 canonical package
|
|
19
|
+
documentation。本 README 是 npm 與 GitHub 的精簡發佈摘要;
|
|
20
|
+
[繁體中文網站](https://nuxt-content-mermaid.barz.app/zh) 為 best-effort
|
|
21
|
+
translation,可能比英文內容稍晚同步。若兩者有差異,請以英文文件為準。
|
|
18
22
|
|
|
19
|
-
|
|
20
|
-
- **效能優化**:支援 Lazy Loading,僅在元件掛載時載入 Mermaid 核心與資源。
|
|
21
|
-
- **主題整合**:無縫整合 `@nuxtjs/color-mode`,自動切換 Light/Dark 對應主題。
|
|
22
|
-
- **高度客製**:支援自訂渲染元件(Wrapper)、Loading Spinner、錯誤畫面以及 CDN 來源。
|
|
23
|
-
- **Runtime Config**:支援透過環境變數動態覆寫設定。
|
|
23
|
+
## 適用情境
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
當 Nuxt Content 應用程式需要下列能力時,可使用本模組:
|
|
26
26
|
|
|
27
|
-
-
|
|
28
|
-
-
|
|
27
|
+
- 在 Markdown 中以 Mermaid 程式碼圍欄 (fence) 撰寫圖表;
|
|
28
|
+
- 在瀏覽器中渲染圖表,並使用套件提供的載入與錯誤狀態;
|
|
29
|
+
- 跟隨應用程式的深色與淺色模式;
|
|
30
|
+
- 在全域、單一頁面或單一圍欄 (fence) 設定圖表;
|
|
31
|
+
- 選用延遲渲染、工具列控制或自訂渲染元件。
|
|
29
32
|
|
|
30
|
-
|
|
33
|
+
本模組管理相容的 Mermaid 版本;應用程式負責 Nuxt、Nuxt Content peer
|
|
34
|
+
dependencies,以及 Nuxt Content database connector。
|
|
31
35
|
|
|
32
|
-
|
|
36
|
+
## 相容性
|
|
33
37
|
|
|
34
|
-
|
|
38
|
+
- Node.js `>=22.19.0`
|
|
39
|
+
- Nuxt `^4.1.0`
|
|
40
|
+
- Nuxt Content `>=3.5.0 <4.0.0`
|
|
35
41
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
```
|
|
42
|
+
相依擁有權、Nuxt Content v2 遷移邊界與渲染保證,請參閱
|
|
43
|
+
[相依與遷移契約](./docs/ch/DEPENDENCY_AND_MIGRATION_CONTRACT.md)。
|
|
39
44
|
|
|
40
|
-
|
|
45
|
+
## 快速開始
|
|
41
46
|
|
|
42
|
-
|
|
47
|
+
安裝本模組與 Nuxt Content peer:
|
|
43
48
|
|
|
44
49
|
```bash
|
|
45
|
-
|
|
46
|
-
pnpm add -D @barzhsieh/nuxt-content-mermaid
|
|
47
|
-
|
|
48
|
-
# npm
|
|
49
|
-
npm install -D @barzhsieh/nuxt-content-mermaid
|
|
50
|
-
|
|
51
|
-
# yarn
|
|
52
|
-
yarn add -D @barzhsieh/nuxt-content-mermaid
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
### 2. 配置 `nuxt.config.ts`
|
|
56
|
-
|
|
57
|
-
確保模組已加入 `modules` 清單(若使用 `nuxi module add` 則可略過):
|
|
58
|
-
|
|
59
|
-
```ts
|
|
60
|
-
export default defineNuxtConfig({
|
|
61
|
-
modules: ["@barzhsieh/nuxt-content-mermaid", "@nuxt/content"],
|
|
62
|
-
});
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
### 3. 在 Markdown 中使用
|
|
66
|
-
|
|
67
|
-
在 `content/` 目錄下的 `.md` 檔案中直接撰寫 Mermaid 語法:
|
|
68
|
-
|
|
69
|
-
````markdown
|
|
70
|
-
# 流程圖範例
|
|
71
|
-
|
|
72
|
-
```mermaid
|
|
73
|
-
graph LR
|
|
74
|
-
A[Start] --> B{Is it working?}
|
|
75
|
-
B -- Yes --> C[Great!]
|
|
76
|
-
B -- No --> D[Debug]
|
|
50
|
+
pnpm add @barzhsieh/nuxt-content-mermaid @nuxt/content
|
|
77
51
|
```
|
|
78
|
-
````
|
|
79
|
-
|
|
80
|
-
模組會自動將其轉換為 SVG 圖表。
|
|
81
|
-
|
|
82
|
-
## Configuration
|
|
83
52
|
|
|
84
|
-
|
|
85
|
-
(`mermaidContent` 仍會被接受以維持相容,但已棄用,未來版本會移除。)
|
|
53
|
+
註冊模組:
|
|
86
54
|
|
|
87
55
|
```ts
|
|
88
|
-
// nuxt.config.ts
|
|
89
56
|
export default defineNuxtConfig({
|
|
90
|
-
|
|
91
|
-
enabled: true,
|
|
92
|
-
loader: {
|
|
93
|
-
init: {
|
|
94
|
-
securityLevel: "strict",
|
|
95
|
-
// 其他傳遞給 mermaid.initialize() 的參數
|
|
96
|
-
},
|
|
97
|
-
lazy: true,
|
|
98
|
-
},
|
|
99
|
-
theme: {
|
|
100
|
-
light: "default",
|
|
101
|
-
dark: "dark",
|
|
102
|
-
},
|
|
103
|
-
components: {
|
|
104
|
-
renderer: undefined,
|
|
105
|
-
spinner: undefined,
|
|
106
|
-
error: undefined,
|
|
107
|
-
},
|
|
108
|
-
toolbar: {
|
|
109
|
-
title: "mermaid",
|
|
110
|
-
fontSize: "14px",
|
|
111
|
-
fullscreenToolbarScale: 1.25,
|
|
112
|
-
buttons: {
|
|
113
|
-
copy: true,
|
|
114
|
-
fullscreen: true,
|
|
115
|
-
expand: true,
|
|
116
|
-
},
|
|
117
|
-
},
|
|
118
|
-
expand: {
|
|
119
|
-
enabled: true,
|
|
120
|
-
margin: 0,
|
|
121
|
-
invokeOpenOn: {
|
|
122
|
-
diagramClick: true,
|
|
123
|
-
},
|
|
124
|
-
invokeCloseOn: {
|
|
125
|
-
esc: true,
|
|
126
|
-
wheel: true,
|
|
127
|
-
swipe: true,
|
|
128
|
-
overlayClick: true,
|
|
129
|
-
closeButtonClick: true,
|
|
130
|
-
},
|
|
131
|
-
},
|
|
132
|
-
},
|
|
133
|
-
});
|
|
134
|
-
```
|
|
135
|
-
|
|
136
|
-
### 參數說明
|
|
137
|
-
|
|
138
|
-
**Top-level**
|
|
139
|
-
|
|
140
|
-
| 參數 | 類型 | 預設值 | 說明 |
|
|
141
|
-
| :-------- | :-------- | :----- | :----------------------------- |
|
|
142
|
-
| `enabled` | `boolean` | `true` | 是否啟用模組與轉換邏輯。 |
|
|
143
|
-
| `debug` | `boolean` | `false` | 啟用除錯模式;見下方 Debug 說明。 |
|
|
144
|
-
|
|
145
|
-
**loader**
|
|
146
|
-
|
|
147
|
-
| 參數 | 類型 | 預設值 | 說明 |
|
|
148
|
-
| :--------------- | :------------------------------------- | :----------------------- | :---------------------------------------------------------------------- |
|
|
149
|
-
| `loader.init` | `MermaidConfig` | `{ startOnLoad: false }` | 直接傳遞給 `mermaid.initialize` 的原始設定。 |
|
|
150
|
-
| `loader.lazy` | `boolean \| { threshold?: number }` | `true` | 元件進入 viewport 時才載入 Mermaid;設為 `false` 會在前一刻就載入。 |
|
|
151
|
-
|
|
152
|
-
**theme**
|
|
153
|
-
|
|
154
|
-
若專案安裝了 `@nuxtjs/color-mode` 會自動偵測並跟隨;透過 `useMermaidTheme()` 設定的手動主題會優先。
|
|
155
|
-
|
|
156
|
-
| 參數 | 類型 | 預設值 | 說明 |
|
|
157
|
-
| :------------ | :----- | :---------- | :-------------------------------------------------------------------------------- |
|
|
158
|
-
| `theme.light` | string | `'default'` | 當 color-mode 為 light 時的主題,若 color-mode 不存在也會回退使用。 |
|
|
159
|
-
| `theme.dark` | string | `'dark'` | 當 color-mode 為 dark 時的主題,若 color-mode 不存在也會回退使用。 |
|
|
160
|
-
|
|
161
|
-
**components**
|
|
162
|
-
|
|
163
|
-
| 參數 | 類型 | 預設值 | 說明 |
|
|
164
|
-
| :----------------------- | :------- | :--------- | :----------------------------------------------------- |
|
|
165
|
-
| `components.renderer` | `string` | `undefined` | 指定自訂的 Mermaid 實作元件名稱(見進階用法)。 |
|
|
166
|
-
| `components.spinner` | `string` | `undefined` | 指定全域的 Loading 元件名稱。 |
|
|
167
|
-
| `components.error` | `string` | `undefined` | 指定全域的錯誤顯示元件名稱,渲染失敗時會使用。 |
|
|
168
|
-
|
|
169
|
-
**toolbar**
|
|
170
|
-
|
|
171
|
-
| 參數 | 類型 | 預設值 | 說明 |
|
|
172
|
-
| :---------------------- | :----------------- | :----- | :------------------------------------- |
|
|
173
|
-
| `toolbar.title` | `string` | `'mermaid'` | Mermaid 工具列預設標題。 |
|
|
174
|
-
| `toolbar.fontSize` | `string \| number` | `'14px'` | Mermaid 工具列預設字體大小。 |
|
|
175
|
-
| `toolbar.fullscreenToolbarScale` | `number` | `1.25` | fullscreen 時工具列字體/圖示的放大倍率。 |
|
|
176
|
-
| `toolbar.buttons.copy` | `boolean` | `true` | 顯示工具列複製原始 Mermaid 的按鈕。 |
|
|
177
|
-
| `toolbar.buttons.fullscreen` | `boolean` | `true` | 顯示工具列全螢幕按鈕。 |
|
|
178
|
-
| `toolbar.buttons.expand` | `boolean` | `true` | 顯示工具列放大按鈕。 |
|
|
179
|
-
|
|
180
|
-
**expand**
|
|
181
|
-
|
|
182
|
-
控制 SVG 放大互動行為,也可直接設為 `expand: false` 來停用,或 `expand: true` 使用預設值。
|
|
183
|
-
|
|
184
|
-
| 參數 | 類型 | 預設值 | 說明 |
|
|
185
|
-
| :------------------------ | :-------- | :----- | :------------------------------------------------------- |
|
|
186
|
-
| `expand.enabled` | `boolean` | `true` | 是否啟用放大功能。 |
|
|
187
|
-
| `expand.margin` | `number` | `0` | 放大後 SVG 在視窗內保留的邊距(px)。 |
|
|
188
|
-
| `expand.invokeOpenOn.diagramClick` | `boolean` | `true` | 允許直接點擊 SVG 開啟放大。 |
|
|
189
|
-
| `expand.invokeCloseOn.esc` | `boolean` | `true` | 允許按 ESC 關閉。 |
|
|
190
|
-
| `expand.invokeCloseOn.wheel` | `boolean` | `true` | 允許滑鼠滾輪關閉。 |
|
|
191
|
-
| `expand.invokeCloseOn.swipe` | `boolean` | `true` | 允許滑動手勢關閉。 |
|
|
192
|
-
| `expand.invokeCloseOn.overlayClick` | `boolean` | `true` | 允許點擊 overlay 背景關閉。 |
|
|
193
|
-
| `expand.invokeCloseOn.closeButtonClick`| `boolean` | `true` | 顯示 overlay 關閉按鈕。 |
|
|
194
|
-
|
|
195
|
-
**平移與縮放 (Expand Overlay / Fullscreen)**
|
|
196
|
-
|
|
197
|
-
當放大 Fullscreen 或是 Expand 模式時,使用者可平移與縮放圖表:
|
|
198
|
-
|
|
199
|
-
| 操作 | 桌機 | 行動裝置 |
|
|
200
|
-
|:---|:---|:---|
|
|
201
|
-
| **平移 (Pan)** | `Space` + 拖曳 | 單指拖曳 |
|
|
202
|
-
| **縮放 (Zoom)** | `Ctrl/⌘` + 滾輪 | 雙指捏合 |
|
|
203
|
-
| **鍵盤** | `+`/`-` 縮放、方向鍵平移、`0` 重置 | — |
|
|
204
|
-
|
|
205
|
-
放大介面會顯示縮放工具列,包含 +/−/Reset 按鈕與百分比顯示。
|
|
206
|
-
|
|
207
|
-
可透過 `toolbar.fullscreenToolbarScale` 調整 Fullscreen 工具列與縮放控制的尺寸。
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
> **Note**: 所有設定皆可透過 `runtimeConfig.public.contentMermaid` 在部署時進行覆寫(`runtimeConfig.public.mermaidContent` 仍支援但已棄用)。
|
|
211
|
-
|
|
212
|
-
## 樣式自訂(CSS 變數)
|
|
213
|
-
|
|
214
|
-
模組會提供全域 CSS 變數(來源為 `runtime/styles.css`),讓 Mermaid 區塊與放大 overlay 使用同一套配色。你可以在專案中覆寫:
|
|
215
|
-
|
|
216
|
-
```css
|
|
217
|
-
:root {
|
|
218
|
-
--ncm-code-bg: #f3f4f6;
|
|
219
|
-
--ncm-code-bg-hover: #e5e7eb;
|
|
220
|
-
--ncm-border: #e5e7eb;
|
|
221
|
-
--ncm-text: #111827;
|
|
222
|
-
--ncm-text-muted: #4b5563;
|
|
223
|
-
--ncm-text-xmuted: #6b7280;
|
|
224
|
-
--ncm-overlay-bg: rgba(255, 255, 255, 0.98);
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
html[data-theme="dark"],
|
|
228
|
-
.dark {
|
|
229
|
-
--ncm-code-bg: #111827;
|
|
230
|
-
--ncm-code-bg-hover: #1f2937;
|
|
231
|
-
--ncm-border: #1f2937;
|
|
232
|
-
--ncm-text: #f9fafb;
|
|
233
|
-
--ncm-text-muted: #9ca3af;
|
|
234
|
-
--ncm-text-xmuted: #6b7280;
|
|
235
|
-
--ncm-overlay-bg: rgba(17, 24, 39, 0.98);
|
|
236
|
-
}
|
|
237
|
-
```
|
|
238
|
-
|
|
239
|
-
可覆寫的變數:
|
|
240
|
-
可覆寫的變數:
|
|
241
|
-
- `--ncm-code-bg`:Mermaid 區塊背景色
|
|
242
|
-
- `--ncm-code-bg-hover`:工具列按鈕 hover 背景
|
|
243
|
-
- `--ncm-border-color`:區塊與工具列的邊框顏色
|
|
244
|
-
- `--ncm-border-width`:邊框厚度
|
|
245
|
-
- `--ncm-border-style`:邊框樣式
|
|
246
|
-
- `--ncm-border`:邊框 shorthand(寬度、樣式、顏色)
|
|
247
|
-
- `--ncm-border-bottom`:工具列底部的邊框
|
|
248
|
-
- `--ncm-text`:主要文字顏色
|
|
249
|
-
- `--ncm-text-muted`:標題與次要文字
|
|
250
|
-
- `--ncm-text-xmuted`:工具列 icon 與更淡的文字
|
|
251
|
-
- `--ncm-overlay-bg`:放大 overlay 背景(預設跟 `--ncm-code-bg` 一致)
|
|
252
|
-
- `--ncm-expand-target-bg`:當 `expand.margin > 0` 時,放大後留白的 SVG 外框背景,可以與 overlay 做出區隔
|
|
253
|
-
- `--ncm-overlay-opacity`:overlay 的透明度(搭配 margin 留白時可微調濃淡)
|
|
254
|
-
- `--ncm-overlay-backdrop`:顯示 overlay 時加上的 `backdrop-filter`,可自訂 blur/效果
|
|
255
|
-
- `--ncm-hint-bg`:縮放提示訊息背景色(預設 `rgba(0,0,0,0.75)`)
|
|
256
|
-
- `--ncm-hint-text`:縮放提示訊息文字顏色(預設 `#fff`)
|
|
257
|
-
- `--ncm-hint-radius`:縮放提示訊息圓角(預設 `8px`)
|
|
258
|
-
|
|
259
|
-
## Advanced Usage
|
|
260
|
-
|
|
261
|
-
### Debug 模式
|
|
262
|
-
|
|
263
|
-
**`contentMermaid.debug`**(預設 `false`):
|
|
264
|
-
- **自動配置**:若未手動設定 `loader.init.logLevel` 或 `suppressErrorRendering`,開啟 debug 模式會自動將 `logLevel` 設為 `1` (Info),並將 `suppressErrorRendering` 設為 `false`(允許 Mermaid 在 DOM 中顯示錯誤訊息)。
|
|
265
|
-
- **執行行為**:
|
|
266
|
-
- **Debug 開啟**:`mermaid.run` 使用 `suppressErrors: false`,發生錯誤時會拋出完整堆疊以便除錯。
|
|
267
|
-
- **Debug 關閉**:`mermaid.run` 使用 `suppressErrors: true`,避免單一圖表錯誤中斷其他圖表的渲染。
|
|
268
|
-
- **主控台輸出**:模組會額外輸出渲染佇列的診斷資訊與執行時間統計。
|
|
269
|
-
|
|
270
|
-
### 主題與顏色模式 (Theme & Color Mode)
|
|
271
|
-
|
|
272
|
-
模組會依據以下優先順序決定主題:
|
|
273
|
-
|
|
274
|
-
1. Frontmatter `config.theme`(單篇覆寫)
|
|
275
|
-
2. `useMermaidTheme()` 設定的手動模式(若有)
|
|
276
|
-
3. `@nuxtjs/color-mode`(安裝時自動偵測):
|
|
277
|
-
- `dark` → 使用 `theme.dark`
|
|
278
|
-
- `light` → 使用 `theme.light`
|
|
279
|
-
4. `loader.init.theme`(若有設定)
|
|
280
|
-
5. 回退:`theme.light`,若無則 Mermaid 預設 `'default'`
|
|
281
|
-
|
|
282
|
-
更多進階手動控制(如:強制指定特定主題、自訂切換邏輯),請參閱 [手動主題控制指南](./docs/ch/MANUAL_THEME_CONTROL.md)。
|
|
283
|
-
|
|
284
|
-
### 以 frontmatter 覆寫單頁設定
|
|
285
|
-
|
|
286
|
-
每篇 Markdown 都可以透過於 frontmatter 中加入 `config` 欄位來覆寫模組設定。
|
|
287
|
-
|
|
288
|
-
> **⚠️ 若要使用 frontmatter `config` 覆寫,務必在 `content.config.ts` 的 collection schema 中宣告 `config` 欄位。**
|
|
289
|
-
> 若未宣告,Nuxt Content 不會將 `config` 解析為 JSON 物件,覆寫將無法生效。
|
|
290
|
-
|
|
291
|
-
在 `content.config.ts` 加上:
|
|
292
|
-
|
|
293
|
-
```ts
|
|
294
|
-
import { defineContentConfig, defineCollection, z } from '@nuxt/content'
|
|
295
|
-
|
|
296
|
-
export default defineContentConfig({
|
|
297
|
-
collections: {
|
|
298
|
-
content: defineCollection({
|
|
299
|
-
type: 'page',
|
|
300
|
-
source: '**',
|
|
301
|
-
schema: z.object({
|
|
302
|
-
config: z.record(z.unknown()).optional(), // 宣告 config 欄位
|
|
303
|
-
}).passthrough(),
|
|
304
|
-
}),
|
|
305
|
-
},
|
|
57
|
+
modules: ['@barzhsieh/nuxt-content-mermaid'],
|
|
306
58
|
})
|
|
307
59
|
```
|
|
308
60
|
|
|
309
|
-
接著在 Markdown
|
|
61
|
+
接著在 Content Markdown 檔案中加入 Mermaid 圍欄:
|
|
310
62
|
|
|
311
63
|
````markdown
|
|
312
|
-
---
|
|
313
|
-
title: 單篇覆寫 Mermaid 設定範例
|
|
314
|
-
config:
|
|
315
|
-
theme: forest
|
|
316
|
-
flowchart:
|
|
317
|
-
htmlLabels: false
|
|
318
|
-
---
|
|
319
|
-
|
|
320
64
|
```mermaid
|
|
321
65
|
flowchart LR
|
|
322
|
-
|
|
66
|
+
Markdown --> Content --> Mermaid --> SVG
|
|
323
67
|
```
|
|
324
68
|
````
|
|
325
69
|
|
|
326
|
-
|
|
70
|
+
Mermaid 已包含在本模組中,不需要另外安裝。資料庫 connector 選擇與完整的
|
|
71
|
+
第一個專案步驟,請參閱[開始使用](https://nuxt-content-mermaid.barz.app/zh/getting-started)。
|
|
327
72
|
|
|
328
|
-
|
|
73
|
+
## 繁體中文文件
|
|
329
74
|
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
B -- Yes --> C[Persist]
|
|
336
|
-
B -- No --> D[Error]
|
|
337
|
-
```
|
|
338
|
-
````
|
|
75
|
+
- [開始使用](https://nuxt-content-mermaid.barz.app/zh/getting-started)
|
|
76
|
+
- [撰寫圖表](https://nuxt-content-mermaid.barz.app/zh/writing-diagrams)
|
|
77
|
+
- [設定](https://nuxt-content-mermaid.barz.app/zh/configuration)
|
|
78
|
+
- [疑難排解](https://nuxt-content-mermaid.barz.app/zh/troubleshooting)
|
|
79
|
+
- [升級至 v3](https://nuxt-content-mermaid.barz.app/zh/migration/v3)
|
|
339
80
|
|
|
340
|
-
|
|
81
|
+
## 支持與貢獻
|
|
341
82
|
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
1. **圖表內的 `%%{init: ...}%%`** —— 最優先,直接由 Mermaid 處理。
|
|
345
|
-
2. **frontmatter `config`** —— 深度合併在模組的 `loader.init` 之上。
|
|
346
|
-
3. **模組層級的 `contentMermaid.loader.init`** —— 專案的全域預設。
|
|
347
|
-
|
|
348
|
-
### Mermaid Inline attrs 與 YAML Frontmatter
|
|
349
|
-
|
|
350
|
-
支援三種方式控制 Mermaid Svg 的渲染:inline attrs、Mermaid YAML frontmatter、`%%{init}%%` 指令。
|
|
351
|
-
|
|
352
|
-
#### Inline attrs(fence info)
|
|
353
|
-
|
|
354
|
-
在 `mermaid` fence 上使用 inline attrs,傳遞 wrapper props 或設定 Mermaid 的 YAML 欄位(包含 `toolbar` 的 title/fontSize 與 `toolbar.buttons.*`)。
|
|
355
|
-
|
|
356
|
-
````markdown
|
|
357
|
-
```mermaid {title="Diagram A" toolbar='{"title":"My Diagram","fontSize":"14px"}' config='{"theme":"dark"}'}
|
|
358
|
-
graph TD
|
|
359
|
-
A --> B
|
|
360
|
-
```
|
|
361
|
-
````
|
|
362
|
-
|
|
363
|
-
#### Mermaid YAML frontmatter(block 內)
|
|
364
|
-
|
|
365
|
-
把 Mermaid 的 YAML frontmatter 放在 code block 最前面,用來影響 SVG 輸出(例如 title、displayMode、config),也可以提供 `toolbar` 給 wrapper 元件(包含 `toolbar.buttons.copy: true`)。
|
|
366
|
-
|
|
367
|
-
````markdown
|
|
368
|
-
```mermaid
|
|
369
|
-
---
|
|
370
|
-
title: Sample Flowchart
|
|
371
|
-
displayMode: compact
|
|
372
|
-
config:
|
|
373
|
-
theme: dark
|
|
374
|
-
toolbar:
|
|
375
|
-
title: "Sample Diagram"
|
|
376
|
-
buttons:
|
|
377
|
-
copy: true
|
|
378
|
-
expand: true
|
|
379
|
-
fullscreen: false
|
|
380
|
-
---
|
|
381
|
-
graph TD
|
|
382
|
-
A --> B
|
|
383
|
-
```
|
|
384
|
-
````
|
|
385
|
-
|
|
386
|
-
#### `%%{init}%%` 指令(block 內)
|
|
387
|
-
|
|
388
|
-
使用 Mermaid directive,直接在圖表定義內設定渲染選項。
|
|
389
|
-
|
|
390
|
-
````markdown
|
|
391
|
-
```mermaid
|
|
392
|
-
%%{init: { 'theme': 'forest', 'flowchart': { 'curve': 'step' } }}%%
|
|
393
|
-
graph TD
|
|
394
|
-
A --> B
|
|
395
|
-
```
|
|
396
|
-
````
|
|
397
|
-
|
|
398
|
-
### 自訂渲染元件 (Custom Component)
|
|
399
|
-
|
|
400
|
-
若需完全接管 Mermaid 的渲染行為(例如:加入外框、Expand/Collapse 功能),可指定 `components.renderer`。
|
|
401
|
-
|
|
402
|
-
1. 在 `nuxt.config.ts` 中指定元件名稱:
|
|
403
|
-
|
|
404
|
-
```ts
|
|
405
|
-
contentMermaid: {
|
|
406
|
-
components: {
|
|
407
|
-
renderer: "MyCustomMermaid",
|
|
408
|
-
}
|
|
409
|
-
}
|
|
410
|
-
```
|
|
411
|
-
|
|
412
|
-
2. 在 `components/MyCustomMermaid.vue` 中實作:
|
|
413
|
-
|
|
414
|
-
```vue
|
|
415
|
-
<script setup lang="ts">
|
|
416
|
-
// 你可以在此使用 slot 內容或自行呼叫 useMermaid() 等邏輯
|
|
417
|
-
</script>
|
|
418
|
-
|
|
419
|
-
<template>
|
|
420
|
-
<div class="custom-wrapper border rounded p-4">
|
|
421
|
-
<Mermaid>
|
|
422
|
-
<slot />
|
|
423
|
-
</Mermaid>
|
|
424
|
-
</div>
|
|
425
|
-
</template>
|
|
426
|
-
```
|
|
427
|
-
|
|
428
|
-
#### 載入中指示
|
|
429
|
-
|
|
430
|
-
模組在首次渲染前會使用內建的 spinner,如需替換可在 `components.spinner` 指定元件名稱;該元件也會以 `spinner` prop 傳入你的自訂渲染元件,方便直接渲染。
|
|
431
|
-
|
|
432
|
-
以下是極簡的設定與元件示例:
|
|
433
|
-
|
|
434
|
-
```ts
|
|
435
|
-
// nuxt.config.ts
|
|
436
|
-
export default defineNuxtConfig({
|
|
437
|
-
contentMermaid: {
|
|
438
|
-
components: {
|
|
439
|
-
renderer: 'MyCustomMermaid',
|
|
440
|
-
spinner: 'MySpinner', // 選填:改用自己的全域 Loading 元件
|
|
441
|
-
}
|
|
442
|
-
}
|
|
443
|
-
})
|
|
444
|
-
```
|
|
445
|
-
|
|
446
|
-
```vue
|
|
447
|
-
<!-- components/MyCustomMermaid.vue -->
|
|
448
|
-
<script setup lang="ts">
|
|
449
|
-
import { ref, onMounted } from 'vue'
|
|
450
|
-
import type { Component } from 'vue'
|
|
451
|
-
|
|
452
|
-
const props = defineProps<{ spinner: Component | string }>()
|
|
453
|
-
const loading = ref(true)
|
|
454
|
-
onMounted(() => { loading.value = false })
|
|
455
|
-
</script>
|
|
456
|
-
|
|
457
|
-
<template>
|
|
458
|
-
<div class="my-mermaid">
|
|
459
|
-
<component v-if="loading" :is="props.spinner" />
|
|
460
|
-
<Mermaid v-else>
|
|
461
|
-
<slot />
|
|
462
|
-
</Mermaid>
|
|
463
|
-
</div>
|
|
464
|
-
</template>
|
|
465
|
-
```
|
|
466
|
-
|
|
467
|
-
### 元件使用方式
|
|
468
|
-
|
|
469
|
-
可以用 `<Mermaid>` 自己包一個的 Vue 元件 。
|
|
470
|
-
例如,你可以同時放入標題、Loading 與錯誤顯示,之後就能在任意模板重複使用:
|
|
471
|
-
```vue
|
|
472
|
-
<!-- WrapperMermaid.vue -->
|
|
473
|
-
<template>
|
|
474
|
-
<section>
|
|
475
|
-
<header v-if="title">{{ title }}</header>
|
|
476
|
-
|
|
477
|
-
<Mermaid>
|
|
478
|
-
<slot>
|
|
479
|
-
<pre><code>{{ code }}</code></pre>
|
|
480
|
-
</slot>
|
|
481
|
-
|
|
482
|
-
<template #loading>
|
|
483
|
-
<component :is="spinner" v-if="spinner" />
|
|
484
|
-
<p v-else>Diagram loading…</p>
|
|
485
|
-
</template>
|
|
486
|
-
|
|
487
|
-
<template #error="{ error, source }">
|
|
488
|
-
<p>渲染失敗:{{ error instanceof Error ? error.message : String(error) }}</p>
|
|
489
|
-
<pre><code>{{ source }}</code></pre>
|
|
490
|
-
</template>
|
|
491
|
-
</Mermaid>
|
|
492
|
-
</section>
|
|
493
|
-
</template>
|
|
494
|
-
```
|
|
495
|
-
|
|
496
|
-
```vue
|
|
497
|
-
<!-- 使用範例 -->
|
|
498
|
-
<WrapperMermaid
|
|
499
|
-
title="Demo Diagram"
|
|
500
|
-
spinner="MySpinner"
|
|
501
|
-
>
|
|
502
|
-
<pre><code>graph TD; A-->B; B-->C; C-->A</code></pre>
|
|
503
|
-
</WrapperMermaid>
|
|
504
|
-
```
|
|
505
|
-
|
|
506
|
-
可依需求調整此模式,把常用的 slot 寫在一個可重用的包裝元件中。
|
|
507
|
-
|
|
508
|
-
### 錯誤處理
|
|
509
|
-
|
|
510
|
-
當 Mermaid 解析或渲染失敗時,`<Mermaid>` 會觸發 `error` slot,並可透過 `components.error` 指定全域錯誤元件。兩者都會拿到錯誤內容與原始 Mermaid 定義,方便除錯。
|
|
511
|
-
|
|
512
|
-
```vue
|
|
513
|
-
<Mermaid>
|
|
514
|
-
<pre><code>graph TD; A-->B; B-->C; C-->A</code></pre>
|
|
515
|
-
|
|
516
|
-
<template #error="{ error, source }">
|
|
517
|
-
<p>渲染失敗:{{ error instanceof Error ? error.message : String(error) }}</p>
|
|
518
|
-
<details>
|
|
519
|
-
<summary>查看原始定義</summary>
|
|
520
|
-
<pre><code>{{ source }}</code></pre>
|
|
521
|
-
</details>
|
|
522
|
-
</template>
|
|
523
|
-
</Mermaid>
|
|
524
|
-
```
|
|
525
|
-
|
|
526
|
-
若想一次註冊、全域套用自訂錯誤畫面,可在設定中指定元件名稱:
|
|
527
|
-
|
|
528
|
-
```ts
|
|
529
|
-
// nuxt.config.ts
|
|
530
|
-
export default defineNuxtConfig({
|
|
531
|
-
contentMermaid: {
|
|
532
|
-
components: {
|
|
533
|
-
error: 'MermaidError', // 全域註冊的元件名稱
|
|
534
|
-
},
|
|
535
|
-
},
|
|
536
|
-
})
|
|
537
|
-
```
|
|
538
|
-
|
|
539
|
-
## Contribution
|
|
540
|
-
|
|
541
|
-
<details>
|
|
542
|
-
<summary>Local Development Commands</summary>
|
|
543
|
-
|
|
544
|
-
```bash
|
|
545
|
-
pnpm install
|
|
546
|
-
pnpm dev:prepare
|
|
547
|
-
pnpm dev # Run playground
|
|
548
|
-
pnpm test # Run tests
|
|
549
|
-
```
|
|
83
|
+
如果本模組對你有幫助,歡迎透過
|
|
84
|
+
[Ko-fi 支持我的開源工作](https://ko-fi.com/barzhsieh)。
|
|
550
85
|
|
|
551
|
-
|
|
86
|
+
歡迎建立 [Issue](https://github.com/andy820621/nuxt-content-mermaid/issues)
|
|
87
|
+
或提交附有清楚摘要與測試結果的 Pull Request。維護者請遵循
|
|
88
|
+
[stable release runbook](./docs/en/RELEASING.md)。
|
|
552
89
|
|
|
553
|
-
##
|
|
90
|
+
## 授權
|
|
554
91
|
|
|
555
92
|
[MIT License](./LICENSE)
|
|
556
93
|
|