@bytechain.cn/colamd 1.5.0 → 1.5.1-beta.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.
Files changed (193) hide show
  1. package/.trae/specs/optimize-theme-loading/checklist.md +20 -0
  2. package/.trae/specs/optimize-theme-loading/spec.md +103 -0
  3. package/.trae/specs/optimize-theme-loading/tasks.md +40 -0
  4. package/CHANGELOG.md +323 -0
  5. package/CLAUDE.md +56 -0
  6. package/README.md +422 -26
  7. package/README_CN.md +480 -28
  8. package/android/app/build/.npmkeep +0 -0
  9. package/android/app/build.gradle +76 -0
  10. package/android/app/capacitor.build.gradle +24 -0
  11. package/android/app/proguard-rules.pro +21 -0
  12. package/android/app/release.keystore +0 -0
  13. package/android/app/src/androidTest/java/com/getcapacitor/myapp/ExampleInstrumentedTest.java +26 -0
  14. package/android/app/src/main/AndroidManifest.xml +64 -0
  15. package/android/app/src/main/java/cn/bytechain/colamd/MainActivity.java +180 -0
  16. package/android/app/src/main/res/drawable/ic_launcher_background.xml +170 -0
  17. package/android/app/src/main/res/drawable/splash.png +0 -0
  18. package/android/app/src/main/res/drawable-land-hdpi/splash.png +0 -0
  19. package/android/app/src/main/res/drawable-land-mdpi/splash.png +0 -0
  20. package/android/app/src/main/res/drawable-land-xhdpi/splash.png +0 -0
  21. package/android/app/src/main/res/drawable-land-xxhdpi/splash.png +0 -0
  22. package/android/app/src/main/res/drawable-land-xxxhdpi/splash.png +0 -0
  23. package/android/app/src/main/res/drawable-port-hdpi/splash.png +0 -0
  24. package/android/app/src/main/res/drawable-port-mdpi/splash.png +0 -0
  25. package/android/app/src/main/res/drawable-port-xhdpi/splash.png +0 -0
  26. package/android/app/src/main/res/drawable-port-xxhdpi/splash.png +0 -0
  27. package/android/app/src/main/res/drawable-port-xxxhdpi/splash.png +0 -0
  28. package/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml +34 -0
  29. package/android/app/src/main/res/layout/activity_main.xml +12 -0
  30. package/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +5 -0
  31. package/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +5 -0
  32. package/android/app/src/main/res/mipmap-hdpi/ic_launcher.png +0 -0
  33. package/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png +0 -0
  34. package/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png +0 -0
  35. package/android/app/src/main/res/mipmap-mdpi/ic_launcher.png +0 -0
  36. package/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png +0 -0
  37. package/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png +0 -0
  38. package/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png +0 -0
  39. package/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png +0 -0
  40. package/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png +0 -0
  41. package/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
  42. package/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png +0 -0
  43. package/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png +0 -0
  44. package/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
  45. package/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png +0 -0
  46. package/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png +0 -0
  47. package/android/app/src/main/res/values/ic_launcher_background.xml +4 -0
  48. package/android/app/src/main/res/values/strings.xml +7 -0
  49. package/android/app/src/main/res/values/styles.xml +22 -0
  50. package/android/app/src/main/res/xml/file_paths.xml +5 -0
  51. package/android/app/src/main/res/xml/network_security_config.xml +8 -0
  52. package/android/app/src/test/java/com/getcapacitor/myapp/ExampleUnitTest.java +18 -0
  53. package/android/build.gradle +29 -0
  54. package/android/capacitor.settings.gradle +21 -0
  55. package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  56. package/android/gradle/wrapper/gradle-wrapper.properties +7 -0
  57. package/android/gradle.properties +22 -0
  58. package/android/gradlew +248 -0
  59. package/android/gradlew.bat +92 -0
  60. package/android/settings.gradle +5 -0
  61. package/android/variables.gradle +16 -0
  62. package/bytechain.cn-colamd-1.5.1-beta.2.tgz +0 -0
  63. package/capacitor.config.js +29 -0
  64. package/capacitor.config.ts +30 -0
  65. package/demo.md +191 -484
  66. package/dist/main/index.js +77 -46
  67. package/dist/renderer/assets/{arc-tTbbM8LO.js → arc-CPdeInCG.js} +1 -1
  68. package/dist/renderer/assets/{architectureDiagram-3BPJPVTR-CEgYow6c.js → architectureDiagram-3BPJPVTR-BAbnaR9G.js} +4 -3
  69. package/dist/renderer/assets/{blockDiagram-GPEHLZMM-LHyVtPwW.js → blockDiagram-GPEHLZMM-CYSWjnJg.js} +5 -4
  70. package/dist/renderer/assets/{c4Diagram-AAUBKEIU-C1P1eJrf.js → c4Diagram-AAUBKEIU-Rb1tstnr.js} +3 -2
  71. package/dist/renderer/assets/{channel-upve91Tq.js → channel-DpG2A6fE.js} +1 -1
  72. package/dist/renderer/assets/{chunk-2J33WTMH-lag2vhq9.js → chunk-2J33WTMH-DFc0Jxy_.js} +1 -1
  73. package/dist/renderer/assets/{chunk-4BX2VUAB-BXJ8Ggh-.js → chunk-4BX2VUAB-BhRxDTNn.js} +1 -1
  74. package/dist/renderer/assets/{chunk-55IACEB6-CiBpxRa1.js → chunk-55IACEB6-DEgMVBk8.js} +1 -1
  75. package/dist/renderer/assets/{chunk-727SXJPM-ODeKQFXC.js → chunk-727SXJPM-bjBIfiz8.js} +5 -5
  76. package/dist/renderer/assets/{chunk-AQP2D5EJ-BK7xJolB.js → chunk-AQP2D5EJ-DwQMzTzD.js} +3 -3
  77. package/dist/renderer/assets/{chunk-FMBD7UC4-BxpCZPtz.js → chunk-FMBD7UC4-CkphwJzs.js} +1 -1
  78. package/dist/renderer/assets/{chunk-ND2GUHAM-CqqaU9Ue.js → chunk-ND2GUHAM-oU09z4y4.js} +1 -1
  79. package/dist/renderer/assets/{chunk-QZHKN3VN-Biq_K124.js → chunk-QZHKN3VN-rCbVuPBn.js} +1 -1
  80. package/dist/renderer/assets/{classDiagram-v2-Q7XG4LA2-Cq95X99o.js → classDiagram-4FO5ZUOK-DGS2faoM.js} +7 -6
  81. package/dist/renderer/assets/{classDiagram-4FO5ZUOK-Cq95X99o.js → classDiagram-v2-Q7XG4LA2-DGS2faoM.js} +7 -6
  82. package/dist/renderer/assets/{cose-bilkent-S5V4N54A-XasiD0bu.js → cose-bilkent-S5V4N54A-iqY6-EwA.js} +2 -1
  83. package/dist/renderer/assets/{dagre-BM42HDAG-Nq84Gfx4.js → dagre-BM42HDAG-5t3X5sDa.js} +4 -3
  84. package/dist/renderer/assets/{diagram-2AECGRRQ-DwuB1GWt.js → diagram-2AECGRRQ-DzHiYDPh.js} +4 -3
  85. package/dist/renderer/assets/{diagram-5GNKFQAL-C2tgeI1h.js → diagram-5GNKFQAL-BiNv6Keq.js} +5 -4
  86. package/dist/renderer/assets/{diagram-KO2AKTUF-D5KzjNBc.js → diagram-KO2AKTUF-ClzeDG6f.js} +4 -3
  87. package/dist/renderer/assets/{diagram-LMA3HP47-C12xHS1c.js → diagram-LMA3HP47-CGkw7wII.js} +4 -3
  88. package/dist/renderer/assets/{diagram-OG6HWLK6-CnxI9oEa.js → diagram-OG6HWLK6-Dl-Hyk1_.js} +5 -4
  89. package/dist/renderer/assets/{erDiagram-TEJ5UH35-D_uPaKwn.js → erDiagram-TEJ5UH35-BxUN79Qb.js} +5 -4
  90. package/dist/renderer/assets/{flowDiagram-I6XJVG4X-B6q_1-tE.js → flowDiagram-I6XJVG4X-CzFk-KNI.js} +7 -6
  91. package/dist/renderer/assets/{ganttDiagram-6RSMTGT7-CFo7ifF9.js → ganttDiagram-6RSMTGT7-C2xl6Igx.js} +3 -2
  92. package/dist/renderer/assets/{gitGraphDiagram-PVQCEYII-WSexHTnq.js → gitGraphDiagram-PVQCEYII-_fn7XCa7.js} +5 -4
  93. package/dist/renderer/assets/{graph-DyX_9f6d.js → graph-CDoHYrHm.js} +1 -1
  94. package/dist/renderer/assets/index-B4uDgADr.js +530 -0
  95. package/dist/renderer/assets/index-CBcVpA3d.js +30 -0
  96. package/dist/renderer/assets/index-CGj1spkU.js +27 -0
  97. package/dist/renderer/assets/{index-dyHEFYvY.css → index-CeFpoCKV.css} +443 -400
  98. package/dist/renderer/assets/index-D4CPFkph.js +9 -0
  99. package/dist/renderer/assets/{index-DW7LS8C1.js → index-DAlXyxzt.js} +1183 -346
  100. package/dist/renderer/assets/index-DxOzbfR-.js +110 -0
  101. package/dist/renderer/assets/index-Y89U1ptl.js +9 -0
  102. package/dist/renderer/assets/{infoDiagram-5YYISTIA-DaeJdLRq.js → infoDiagram-5YYISTIA-DL6XIxLz.js} +3 -2
  103. package/dist/renderer/assets/{ishikawaDiagram-YF4QCWOH-DDCZc35f.js → ishikawaDiagram-YF4QCWOH-BUZLjRo-.js} +2 -1
  104. package/dist/renderer/assets/{journeyDiagram-JHISSGLW-BEdmpAgl.js → journeyDiagram-JHISSGLW-C4rH_mQM.js} +5 -4
  105. package/dist/renderer/assets/{kanban-definition-UN3LZRKU-BEFtQcFb.js → kanban-definition-UN3LZRKU-DRbrBcWV.js} +3 -2
  106. package/dist/renderer/assets/{layout-CAJgQHdw.js → layout-DZl4n4qu.js} +2 -2
  107. package/dist/renderer/assets/{linear-B2ggJ8Am.js → linear-B0Krxg21.js} +1 -1
  108. package/dist/renderer/assets/{mindmap-definition-RKZ34NQL-DSxVgHB5.js → mindmap-definition-RKZ34NQL-DdmPsWrn.js} +4 -3
  109. package/dist/renderer/assets/{pieDiagram-4H26LBE5-CwYoJBuL.js → pieDiagram-4H26LBE5-BPZLqwG0.js} +5 -4
  110. package/dist/renderer/assets/preload-helper-tXtZnHb0.js +88 -0
  111. package/dist/renderer/assets/{quadrantDiagram-W4KKPZXB-CST9Fvg9.js → quadrantDiagram-W4KKPZXB-Dr-oWRk9.js} +3 -2
  112. package/dist/renderer/assets/{requirementDiagram-4Y6WPE33-DtrH52jS.js → requirementDiagram-4Y6WPE33-B6QZd0lo.js} +4 -3
  113. package/dist/renderer/assets/{sankeyDiagram-5OEKKPKP-ca1tPzJ_.js → sankeyDiagram-5OEKKPKP-Cyl9ojEt.js} +2 -1
  114. package/dist/renderer/assets/{sequenceDiagram-3UESZ5HK-Dfp1EJZ7.js → sequenceDiagram-3UESZ5HK-D48Yr9T6.js} +4 -3
  115. package/dist/renderer/assets/{stateDiagram-AJRCARHV-Bha2QoNB.js → stateDiagram-AJRCARHV-qyb8ETsa.js} +7 -6
  116. package/dist/renderer/assets/{stateDiagram-v2-BHNVJYJU-DWgFUYu1.js → stateDiagram-v2-BHNVJYJU-DmDOyyrJ.js} +5 -4
  117. package/dist/renderer/assets/{timeline-definition-PNZ67QCA-C3h_-OTj.js → timeline-definition-PNZ67QCA-C-KQxTi1.js} +3 -2
  118. package/dist/renderer/assets/{vennDiagram-CIIHVFJN-DFzjSrZi.js → vennDiagram-CIIHVFJN-BdaZlnH-.js} +2 -1
  119. package/dist/renderer/assets/{wardley-L42UT6IY-Cx-VbqoS.js → wardley-L42UT6IY-b-_GPpqL.js} +1 -1
  120. package/dist/renderer/assets/{wardleyDiagram-YWT4CUSO-S2D9XqX6.js → wardleyDiagram-YWT4CUSO-B2hBE-EE.js} +4 -3
  121. package/dist/renderer/assets/web-BKE0SH0E.js +36 -0
  122. package/dist/renderer/assets/web-CBsFp24u.js +564 -0
  123. package/dist/renderer/assets/web-Dc8YgoHP.js +24 -0
  124. package/dist/renderer/assets/web-TfDzToU7.js +58 -0
  125. package/dist/renderer/assets/{xychartDiagram-2RQKCTM6-Cfxigbts.js → xychartDiagram-2RQKCTM6-CSvswDTY.js} +3 -2
  126. package/dist/renderer/index.html +62 -3
  127. package/docs/academic-demo.md +566 -0
  128. package/docs/demo.html +748 -0
  129. package/docs/demo.md +546 -0
  130. package/docs/demo.pdf +0 -0
  131. package/docs/theme-paradigm.md +658 -0
  132. package/electron-builder.yml +7 -0
  133. package/electron.vite.config.js +31 -0
  134. package/electron.vite.config.ts +1 -1
  135. package/ios/App/App/AppDelegate.swift +49 -0
  136. package/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png +0 -0
  137. package/ios/App/App/Assets.xcassets/AppIcon.appiconset/Contents.json +14 -0
  138. package/ios/App/App/Assets.xcassets/Contents.json +6 -0
  139. package/ios/App/App/Assets.xcassets/Splash.imageset/Contents.json +23 -0
  140. package/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-1.png +0 -0
  141. package/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-2.png +0 -0
  142. package/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732.png +0 -0
  143. package/ios/App/App/Base.lproj/LaunchScreen.storyboard +32 -0
  144. package/ios/App/App/Base.lproj/Main.storyboard +19 -0
  145. package/ios/App/App/Info.plist +49 -0
  146. package/ios/App/App.xcodeproj/project.pbxproj +408 -0
  147. package/ios/App/App.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  148. package/ios/App/Podfile +28 -0
  149. package/package.json +23 -3
  150. package/resources/templates/slides/template-forest-ink.html +540 -0
  151. package/scripts/generate-icons.js +102 -0
  152. package/src/main/index.ts +87 -63
  153. package/src/preload/index.d.ts +51 -0
  154. package/src/preload/index.js +70 -0
  155. package/src/renderer/capacitor-api.ts +713 -0
  156. package/src/renderer/editor/editor.ts +87 -4
  157. package/src/renderer/editor/plugins/index.ts +24 -32
  158. package/src/renderer/editor/plugins/math-plugin.ts +1 -1
  159. package/src/renderer/editor/plugins/mermaid-plugin-custom.css +13 -398
  160. package/src/renderer/editor/plugins/mermaid-plugin.ts +62 -71
  161. package/src/renderer/editor/plugins/themes/base/dark.css +23 -0
  162. package/src/renderer/editor/plugins/themes/base/elegant.css +32 -0
  163. package/src/renderer/editor/plugins/themes/base/light.css +20 -0
  164. package/src/renderer/editor/plugins/themes/base/newsprint.css +27 -0
  165. package/src/renderer/editor/plugins/themes/components/mermaid/academic.css +43 -0
  166. package/src/renderer/editor/plugins/themes/components/mermaid/dark.css +20 -0
  167. package/src/renderer/editor/plugins/themes/components/mermaid/elegant.css +24 -0
  168. package/src/renderer/editor/plugins/themes/components/mermaid/light.css +21 -0
  169. package/src/renderer/editor/plugins/themes/components/mermaid/newsprint.css +26 -0
  170. package/src/renderer/editor/plugins/themes/components/mermaid/variables.css +592 -0
  171. package/src/renderer/editor/plugins/themes/foundation.css +143 -0
  172. package/src/renderer/editor/plugins/themes/theme-manager.ts +92 -0
  173. package/src/renderer/env.d.ts +4 -1
  174. package/src/renderer/index.html +59 -1
  175. package/src/renderer/main.ts +432 -57
  176. package/src/renderer/mobile.css +429 -0
  177. package/themes/README.md +3 -0
  178. package/themes/academic-paper.css +1321 -0
  179. package/themes/elegant.css +14 -7
  180. package/themes/forest-ink.css +664 -0
  181. package/themes/pixso-design.css +1261 -0
  182. package/themes/swiss-design.css +596 -0
  183. package/themes/template.css +498 -0
  184. package/tsconfig.main.json +1 -0
  185. package/tsconfig.main.tsbuildinfo +1 -0
  186. package/tsconfig.preload.json +1 -0
  187. package/tsconfig.preload.tsbuildinfo +1 -0
  188. package/tsconfig.renderer.json +1 -0
  189. package/tsconfig.renderer.tsbuildinfo +1 -0
  190. package/tsconfig.tsbuildinfo +1 -0
  191. package/.trae/documents/fix-mermaid-colors-and-sankey.md +0 -50
  192. package/src/renderer/themes/theme-manager.ts +0 -40
  193. /package/src/renderer/{themes → editor/plugins/themes}/base.css +0 -0
@@ -10,9 +10,22 @@ import './mermaid-plugin-dark.css'
10
10
  import './mermaid-plugin-elegant.css'
11
11
  import './mermaid-plugin-newsprint.css'
12
12
  import './mermaid-plugin-custom.css'
13
+ // import './themes/components/mermaid/variables.css'
13
14
 
14
15
  ;(window as any).mermaid = mermaid
15
16
 
17
+ // Track pending mermaid render promises for export synchronization
18
+ const pendingRenders = new Set<Promise<void>>()
19
+
20
+ /**
21
+ * Wait for all currently pending mermaid render() calls to settle.
22
+ * Called before PDF/HTML export to ensure all diagrams are rendered.
23
+ */
24
+ export function awaitAllMermaidRenders(): Promise<void> {
25
+ const promises = Array.from(pendingRenders)
26
+ return Promise.allSettled(promises).then(() => {})
27
+ }
28
+
16
29
  function getMermaidTheme(): string {
17
30
  const cls = document.body.className
18
31
  if (cls.includes('theme-dark')) return 'dark'
@@ -25,19 +38,23 @@ function getMermaidTheme(): string {
25
38
  return 'default'
26
39
  }
27
40
 
28
- function readCustomVar(name: string, fallback: string): string {
29
- const style = getComputedStyle(document.body)
41
+ function getCustomMermaidCSS(): CSSStyleDeclaration {
42
+ return getComputedStyle(document.body)
43
+ }
44
+
45
+ function readCustomVar(style: CSSStyleDeclaration, name: string, fallback: string): string {
30
46
  return style.getPropertyValue(name).trim() || fallback
31
47
  }
32
48
 
33
49
  function getCustomMermaidFontSize(): number {
34
- const raw = readCustomVar('--mermaid-font-size', '')
50
+ const raw = getCustomMermaidCSS().getPropertyValue('--mermaid-font-size').trim()
35
51
  const n = parseInt(raw, 10)
36
52
  return Number.isFinite(n) && n > 0 ? n : 12
37
53
  }
38
54
 
39
55
  function getCustomMermaidThemeVariables(): Record<string, string> {
40
- const v = (name: string, fallback: string) => readCustomVar(name, fallback)
56
+ const style = getCustomMermaidCSS()
57
+ const v = (name: string, fallback: string) => readCustomVar(style, name, fallback)
41
58
  const baseFont = '-apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif'
42
59
  const font = v('--mermaid-font-family', baseFont)
43
60
  const darkMode = v('--mermaid-dark-mode', 'false')
@@ -45,7 +62,7 @@ function getCustomMermaidThemeVariables(): Record<string, string> {
45
62
  darkMode,
46
63
  background: v('--mermaid-background', v('--bg-color', '#ffffff')),
47
64
  primaryColor: v('--mermaid-primary-color', v('--code-block-bg', '#f6f8fa')),
48
- primaryBorderColor: v('--mermaid-primary-border-color', v('--border-color', '#d0d7de')),
65
+ primaryBorderColor: v('--mermaid-node-stroke', v('--border-color', '#d0d7de')),
49
66
  primaryTextColor: v('--mermaid-primary-text-color', v('--text-color', '#24292f')),
50
67
  secondaryColor: v('--mermaid-secondary-color', v('--code-bg', '#f6f8fa')),
51
68
  secondaryBorderColor: v('--mermaid-secondary-border-color', v('--border-color', '#d0d7de')),
@@ -53,21 +70,21 @@ function getCustomMermaidThemeVariables(): Record<string, string> {
53
70
  tertiaryColor: v('--mermaid-tertiary-color', v('--bg-color', '#ffffff')),
54
71
  tertiaryBorderColor: v('--mermaid-tertiary-border-color', v('--border-color', '#d0d7de')),
55
72
  tertiaryTextColor: v('--mermaid-tertiary-text-color', v('--text-color', '#24292f')),
56
- lineColor: v('--mermaid-line-color', v('--border-color', '#d0d7de')),
57
- textColor: v('--mermaid-text-color', v('--text-color', '#24292f')),
73
+ lineColor: v('--mermaid-edge-stroke', v('--border-color', '#d0d7de')),
74
+ textColor: v('--mermaid-label-text', v('--text-color', '#24292f')),
58
75
  mainBkg: v('--mermaid-main-bkg', v('--code-block-bg', '#f6f8fa')),
59
76
  secondBkg: v('--mermaid-second-bkg', v('--code-bg', '#f6f8fa')),
60
77
  mainContrastColor: v('--mermaid-primary-text-color', v('--text-color', '#24292f')),
61
78
  labelBackground: v('--mermaid-label-background', v('--code-block-bg', '#f6f8fa')),
62
79
  labelTextColor: v('--mermaid-label-text-color', v('--text-color', '#24292f')),
63
- nodeBorder: v('--mermaid-node-border', v('--border-color', '#d0d7de')),
80
+ nodeBorder: v('--mermaid-node-stroke', v('--border-color', '#d0d7de')),
64
81
  nodeBkg: v('--mermaid-node-bkg', v('--code-block-bg', '#f6f8fa')),
65
82
  clusterBkg: v('--mermaid-cluster-bkg', v('--code-bg', '#f6f8fa')),
66
- clusterBorder: v('--mermaid-cluster-border', v('--border-color', '#d0d7de')),
67
- defaultLinkColor: v('--mermaid-line-color', v('--border-color', '#d0d7de')),
83
+ clusterBorder: v('--mermaid-cluster-stroke', v('--border-color', '#d0d7de')),
84
+ defaultLinkColor: v('--mermaid-edge-stroke', v('--border-color', '#d0d7de')),
68
85
  edgeLabelBackground: v('--mermaid-edge-label-background', v('--code-block-bg', '#f6f8fa')),
69
- arrowheadColor: v('--mermaid-arrowhead-color', v('--mermaid-line-color', v('--border-color', '#d0d7de'))),
70
- personBorder: v('--mermaid-person-border', v('--border-color', '#d0d7de')),
86
+ arrowheadColor: v('--mermaid-edge-stroke', v('--border-color', '#d0d7de')),
87
+ personBorder: v('--mermaid-person-stroke', v('--border-color', '#d0d7de')),
71
88
  personBkg: v('--mermaid-person-bkg', v('--code-block-bg', '#f6f8fa')),
72
89
  fontFamily: font,
73
90
  cScale0: v('--mermaid-cscale0', '#2d5f8a'),
@@ -87,7 +104,8 @@ function getCustomMermaidThemeVariables(): Record<string, string> {
87
104
  }
88
105
 
89
106
  function getCustomMermaidC4Config(): Record<string, string> {
90
- const v = (name: string, fallback: string) => readCustomVar(name, fallback)
107
+ const style = getCustomMermaidCSS()
108
+ const v = (name: string, fallback: string) => readCustomVar(style, name, fallback)
91
109
  const baseFont = '-apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif'
92
110
  const font = v('--mermaid-font-family', baseFont)
93
111
  return {
@@ -98,45 +116,45 @@ function getCustomMermaidC4Config(): Record<string, string> {
98
116
  boundaryFontFamily: font,
99
117
  messageFontFamily: font,
100
118
  person_bg_color: v('--mermaid-c4-person-bg', '#2d5f8a'),
101
- person_border_color: v('--mermaid-c4-person-border', '#4a7aaa'),
119
+ person_border_color: v('--mermaid-c4-person-stroke', '#4a7aaa'),
102
120
  external_person_bg_color: v('--mermaid-c4-ext-person-bg', '#4a5568'),
103
- external_person_border_color: v('--mermaid-c4-ext-person-border', '#6b7a8a'),
121
+ external_person_border_color: v('--mermaid-c4-ext-person-stroke', '#6b7a8a'),
104
122
  system_bg_color: v('--mermaid-c4-system-bg', '#3d7a5a'),
105
- system_border_color: v('--mermaid-c4-system-border', '#5a9a7a'),
123
+ system_border_color: v('--mermaid-c4-system-stroke', '#5a9a7a'),
106
124
  system_db_bg_color: v('--mermaid-c4-system-bg', '#3d7a5a'),
107
- system_db_border_color: v('--mermaid-c4-system-border', '#5a9a7a'),
125
+ system_db_border_color: v('--mermaid-c4-system-stroke', '#5a9a7a'),
108
126
  system_queue_bg_color: v('--mermaid-c4-system-bg', '#3d7a5a'),
109
- system_queue_border_color: v('--mermaid-c4-system-border', '#5a9a7a'),
127
+ system_queue_border_color: v('--mermaid-c4-system-stroke', '#5a9a7a'),
110
128
  external_system_bg_color: v('--mermaid-c4-ext-system-bg', '#6b4a7a'),
111
- external_system_border_color: v('--mermaid-c4-ext-system-border', '#8a6a9a'),
129
+ external_system_border_color: v('--mermaid-c4-ext-system-stroke', '#8a6a9a'),
112
130
  external_system_db_bg_color: v('--mermaid-c4-ext-system-bg', '#6b4a7a'),
113
- external_system_db_border_color: v('--mermaid-c4-ext-system-border', '#8a6a9a'),
131
+ external_system_db_border_color: v('--mermaid-c4-ext-system-stroke', '#8a6a9a'),
114
132
  external_system_queue_bg_color: v('--mermaid-c4-ext-system-bg', '#6b4a7a'),
115
- external_system_queue_border_color: v('--mermaid-c4-ext-system-border', '#8a6a9a'),
133
+ external_system_queue_border_color: v('--mermaid-c4-ext-system-stroke', '#8a6a9a'),
116
134
  container_bg_color: v('--mermaid-c4-container-bg', '#8a6b3c'),
117
- container_border_color: v('--mermaid-c4-container-border', '#aa8a5c'),
135
+ container_border_color: v('--mermaid-c4-container-stroke', '#aa8a5c'),
118
136
  container_db_bg_color: v('--mermaid-c4-container-bg', '#8a6b3c'),
119
- container_db_border_color: v('--mermaid-c4-container-border', '#aa8a5c'),
137
+ container_db_border_color: v('--mermaid-c4-container-stroke', '#aa8a5c'),
120
138
  container_queue_bg_color: v('--mermaid-c4-container-bg', '#8a6b3c'),
121
- container_queue_border_color: v('--mermaid-c4-container-border', '#aa8a5c'),
139
+ container_queue_border_color: v('--mermaid-c4-container-stroke', '#aa8a5c'),
122
140
  external_container_bg_color: v('--mermaid-c4-ext-container-bg', '#5a5a6a'),
123
- external_container_border_color: v('--mermaid-c4-ext-container-border', '#7a7a8a'),
141
+ external_container_border_color: v('--mermaid-c4-ext-container-stroke', '#7a7a8a'),
124
142
  external_container_db_bg_color: v('--mermaid-c4-ext-container-bg', '#5a5a6a'),
125
- external_container_db_border_color: v('--mermaid-c4-ext-container-border', '#7a7a8a'),
143
+ external_container_db_border_color: v('--mermaid-c4-ext-container-stroke', '#7a7a8a'),
126
144
  external_container_queue_bg_color: v('--mermaid-c4-ext-container-bg', '#5a5a6a'),
127
- external_container_queue_border_color: v('--mermaid-c4-ext-container-border', '#7a7a8a'),
145
+ external_container_queue_border_color: v('--mermaid-c4-ext-container-stroke', '#7a7a8a'),
128
146
  component_bg_color: v('--mermaid-c4-component-bg', '#3c7a6b'),
129
- component_border_color: v('--mermaid-c4-component-border', '#5c9a8b'),
147
+ component_border_color: v('--mermaid-c4-component-stroke', '#5c9a8b'),
130
148
  component_db_bg_color: v('--mermaid-c4-component-bg', '#3c7a6b'),
131
- component_db_border_color: v('--mermaid-c4-component-border', '#5c9a8b'),
149
+ component_db_border_color: v('--mermaid-c4-component-stroke', '#5c9a8b'),
132
150
  component_queue_bg_color: v('--mermaid-c4-component-bg', '#3c7a6b'),
133
- component_queue_border_color: v('--mermaid-c4-component-border', '#5c9a8b'),
151
+ component_queue_border_color: v('--mermaid-c4-component-stroke', '#5c9a8b'),
134
152
  external_component_bg_color: v('--mermaid-c4-ext-component-bg', '#6a6a6a'),
135
- external_component_border_color: v('--mermaid-c4-ext-component-border', '#8a8a8a'),
153
+ external_component_border_color: v('--mermaid-c4-ext-component-stroke', '#8a8a8a'),
136
154
  external_component_db_bg_color: v('--mermaid-c4-ext-component-bg', '#6a6a6a'),
137
- external_component_db_border_color: v('--mermaid-c4-ext-component-border', '#8a8a8a'),
155
+ external_component_db_border_color: v('--mermaid-c4-ext-component-stroke', '#8a8a8a'),
138
156
  external_component_queue_bg_color: v('--mermaid-c4-ext-component-bg', '#6a6a6a'),
139
- external_component_queue_border_color: v('--mermaid-c4-ext-component-border', '#8a8a8a'),
157
+ external_component_queue_border_color: v('--mermaid-c4-ext-component-stroke', '#8a8a8a'),
140
158
  }
141
159
  }
142
160
 
@@ -432,9 +450,8 @@ const mermaidBlockSchema = $nodeSchema('mermaid_block', () => ({
432
450
  toDOM: (node) => {
433
451
  const container = document.createElement('div')
434
452
  container.className = 'mermaid-block'
435
- container.dataset.mermaid = node.attrs.text as string
436
-
437
453
  const text = (node.attrs.text as string || '').trim()
454
+ container.dataset.mermaid = text
438
455
 
439
456
  if (node.attrs.mode === 'raw') {
440
457
  const el = document.createElement('pre')
@@ -444,39 +461,7 @@ const mermaidBlockSchema = $nodeSchema('mermaid_block', () => ({
444
461
  return { dom: el }
445
462
  }
446
463
 
447
- if (!text) {
448
- container.innerHTML = '<div class="mermaid-preview"><div class="mermaid-loading">Empty diagram</div></div>'
449
- return { dom: container }
450
- }
451
-
452
- const mermaidLib = (window as any).mermaid
453
- if (!mermaidLib || typeof mermaidLib.render !== 'function') {
454
- container.innerHTML = '<div class="mermaid-preview"><div class="mermaid-error">Mermaid not loaded</div></div>'
455
- return { dom: container }
456
- }
457
-
458
464
  container.innerHTML = '<div class="mermaid-preview"><div class="mermaid-loading">Rendering...</div></div>'
459
- const id = 'mermaid-' + (++renderCounter)
460
- try {
461
- mermaidLib.render(id, text).then((result: { svg: string; bindFunctions?: (el: Element) => void }) => {
462
- const preview = container.querySelector('.mermaid-preview')
463
- if (preview) {
464
- preview.innerHTML = result.svg
465
- const svg = preview.querySelector('svg') as SVGSVGElement | null
466
- if (svg) adjustNodeHeights(svg)
467
- if (result.bindFunctions) result.bindFunctions(container)
468
- }
469
- }).catch((e: Error) => {
470
- const preview = container.querySelector('.mermaid-preview')
471
- if (preview) {
472
- const msg = e.message.replace(/&/g, '&amp;').replace(/</g, '&lt;')
473
- preview.innerHTML = '<div class="mermaid-error">Error: ' + msg + '</div>'
474
- }
475
- })
476
- } catch (e: any) {
477
- container.innerHTML = '<div class="mermaid-preview"><div class="mermaid-error">' + String(e.message || e) + '</div></div>'
478
- }
479
-
480
465
  return { dom: container }
481
466
  },
482
467
  parseMarkdown: {
@@ -532,7 +517,7 @@ function renderMermaidBlock(dom: HTMLElement, node: any, renderIdRef: { current:
532
517
  dom.innerHTML = '<div class="mermaid-preview"><div class="mermaid-loading">Rendering...</div></div>'
533
518
  const id = 'mermaid-' + (++renderCounter)
534
519
 
535
- mermaidLib.render(id, text).then((result: { svg: string; bindFunctions?: (el: Element) => void }) => {
520
+ const renderPromise = mermaidLib.render(id, text).then((result: { svg: string; bindFunctions?: (el: Element) => void }) => {
536
521
  if (currentRenderId !== renderIdRef.current) return
537
522
  const preview = dom.querySelector('.mermaid-preview')
538
523
  if (preview) {
@@ -548,7 +533,8 @@ function renderMermaidBlock(dom: HTMLElement, node: any, renderIdRef: { current:
548
533
  const msg = e.message.replace(/&/g, '&amp;').replace(/</g, '&lt;')
549
534
  preview.innerHTML = '<div class="mermaid-error">Error: ' + msg + '</div>'
550
535
  }
551
- })
536
+ }).finally(() => { pendingRenders.delete(renderPromise) })
537
+ pendingRenders.add(renderPromise)
552
538
  }
553
539
 
554
540
  const mermaidBlockView = $view(mermaidBlockSchema, (_ctx): NodeViewConstructor => {
@@ -649,10 +635,12 @@ export const mermaidPlugin: RendererPlugin = {
649
635
  const fontSize = isCustom ? getCustomMermaidFontSize() : 14
650
636
  mermaid.initialize({
651
637
  startOnLoad: false,
652
- theme: getMermaidTheme(),
638
+ theme: getMermaidTheme() as any,
653
639
  themeVariables: getMermaidThemeVariables(),
654
640
  c4: getMermaidC4Config(),
655
641
  securityLevel: 'loose',
642
+ logLevel: 'error',
643
+ suppressErrorRendering: true,
656
644
  fontSize,
657
645
  })
658
646
  },
@@ -662,13 +650,16 @@ export const mermaidPlugin: RendererPlugin = {
662
650
  const fontSize = isCustom ? getCustomMermaidFontSize() : 16
663
651
  mermaid.initialize({
664
652
  startOnLoad: false,
665
- theme: getMermaidTheme(),
653
+ theme: getMermaidTheme() as any,
666
654
  themeVariables: getMermaidThemeVariables(),
667
655
  c4: getMermaidC4Config(),
668
656
  securityLevel: 'loose',
657
+ logLevel: 'error',
658
+ suppressErrorRendering: true,
669
659
  fontSize,
670
660
  })
671
661
  },
662
+ ensureRendered: awaitAllMermaidRenders,
672
663
  }
673
664
 
674
665
  registerPluginModule({
@@ -0,0 +1,23 @@
1
+ /*
2
+ * ColaMD 主题系统:Dark 主题变量
3
+ * 依赖:foundation.css
4
+ */
5
+ body.theme-dark {
6
+ --color-bg: #0d1117;
7
+ --color-text: #e6edf3;
8
+ --color-text-muted: #8b949e;
9
+ --color-border: #30363d;
10
+ --color-link: #58a6ff;
11
+ --color-accent: #58a6ff;
12
+ --color-accent-dark: #1f6feb;
13
+ --color-accent-light: rgba(88, 166, 255, 0.15);
14
+ --color-selection-bg: rgba(88, 166, 255, 0.2);
15
+ --code-bg: rgba(110, 118, 129, 0.3);
16
+ --code-block-bg: #161b22;
17
+ --code-block-text: #e6edf3;
18
+ --blockquote-border: #30363d;
19
+ --table-header-bg: #161b22;
20
+ --table-border: #30363d;
21
+ --scrollbar-thumb: #30363d;
22
+ --scrollbar-thumb-hover: #484f58;
23
+ }
@@ -0,0 +1,32 @@
1
+ /*
2
+ * ColaMD 主题系统:Elegant 主题变量 (典雅暖调)
3
+ * 依赖:foundation.css
4
+ */
5
+ body.theme-elegant {
6
+ --color-bg: #f0edea;
7
+ --color-text: #2c2c2c;
8
+ --color-text-muted: #777;
9
+ --color-border: #d8d3ce;
10
+ --color-link: #c44b2b;
11
+ --color-accent: #c44b2b;
12
+ --color-accent-dark: #a33d22;
13
+ --color-accent-light: #d8d3ce;
14
+ --color-selection-bg: rgba(196, 75, 43, 0.2);
15
+ --code-bg: #e8e4df;
16
+ --code-color: #c44b2b;
17
+ --code-block-bg: #2c2c2c;
18
+ --code-block-text: #e0dcd7;
19
+ --blockquote-bg: #eae6e1;
20
+ --blockquote-border: #c44b2b;
21
+ --blockquote-color: #444;
22
+ --table-header-bg: #eae6e1;
23
+ --table-border: #d8d3ce;
24
+ --scrollbar-thumb: #ccc8c2;
25
+ --scrollbar-thumb-hover: #b5b0aa;
26
+ --hr-color: #d8d3ce;
27
+
28
+ /* Elegant 特有的字体系统 */
29
+ --font-family-base: "LXGW WenKai", "Noto Serif SC", "Source Han Serif SC", "Songti SC", Georgia, "Times New Roman", serif;
30
+ --font-family-heading: var(--font-family-base);
31
+ --line-height-base: 1.9;
32
+ }
@@ -0,0 +1,20 @@
1
+ /*
2
+ * ColaMD 主题系统:Light 主题变量
3
+ * 依赖:foundation.css
4
+ * 仅包含变量覆盖,无样式选择器
5
+ */
6
+ body.theme-light, body:not([class*="theme-"]) {
7
+ --color-bg: #ffffff;
8
+ --color-text: #24292f;
9
+ --color-text-muted: #656d76;
10
+ --color-border: #d0d7de;
11
+ --color-link: #0969da;
12
+ --color-accent: #0969da;
13
+ --color-accent-dark: #0550ae;
14
+ --color-accent-light: #ddf4ff;
15
+ --color-selection-bg: rgba(9, 105, 218, 0.15);
16
+ --code-bg: rgba(175, 184, 193, 0.2);
17
+ --code-block-bg: #f6f8fa;
18
+ --blockquote-border: #d0d7de;
19
+ --table-header-bg: #f6f8fa;
20
+ }
@@ -0,0 +1,27 @@
1
+ /*
2
+ * ColaMD 主题系统:Newsprint 主题变量 (报纸打印风格)
3
+ * 依赖:foundation.css
4
+ */
5
+ body.theme-newsprint {
6
+ --color-bg: #f5f2eb;
7
+ --color-text: #1a1a1a;
8
+ --color-text-muted: #666;
9
+ --color-border: #d4d0c8;
10
+ --color-link: #2c5f8a;
11
+ --color-accent: #2c5f8a;
12
+ --color-accent-dark: #1e4060;
13
+ --color-accent-light: rgba(44, 95, 138, 0.12);
14
+ --color-selection-bg: rgba(44, 95, 138, 0.15);
15
+ --code-bg: rgba(0, 0, 0, 0.05);
16
+ --code-block-bg: #eae6de;
17
+ --blockquote-border: #999;
18
+ --table-header-bg: #eae6de;
19
+ --table-border: #d4d0c8;
20
+ --hr-color: #d4d0c8;
21
+ --scrollbar-thumb: #ccc8c2;
22
+ --scrollbar-thumb-hover: #b5b0aa;
23
+
24
+ /* Newsprint 字体:衬线 */
25
+ --font-family-base: "PT Serif", Georgia, "Times New Roman", "Songti SC", serif;
26
+ --font-family-heading: var(--font-family-base);
27
+ }
@@ -0,0 +1,43 @@
1
+ /*
2
+ * ColaMD 主题系统:Mermaid Academic 配色方案 (莫兰迪灰系)
3
+ * 依赖:foundation.css → mermaid/variables.css
4
+ * 适用场景:学术论文打印,浅灰度色块 + 深灰边框
5
+ */
6
+ [data-mermaid-theme="academic"],
7
+ body.theme-custom[data-mermaid-theme="academic"] {
8
+ --mermaid-font-family: "SimHei", "Heiti SC", "Source Han Sans SC", "Noto Sans SC", "Microsoft YaHei", sans-serif;
9
+ --mermaid-font-size: 9pt;
10
+ --mermaid-node-stroke: #333333;
11
+ --mermaid-node-fill: #E3E3E3;
12
+ --mermaid-node-text: #1a1a1a;
13
+ --mermaid-node-stroke-width: 1px;
14
+ --mermaid-edge-stroke: #333333;
15
+ --mermaid-edge-stroke-width: 1px;
16
+ --mermaid-cluster-stroke: #4a4a4a;
17
+ --mermaid-cluster-fill: #F0F0F0;
18
+ --mermaid-cluster-dasharray: none;
19
+ --mermaid-label-text: #1a1a1a;
20
+ --mermaid-edge-label-bg: #ffffff;
21
+ --mermaid-edge-label-text: #1a1a1a;
22
+ --mermaid-title-text: #1a1a1a;
23
+ --mermaid-axis-text: #555555;
24
+ --mermaid-highlight: #333333;
25
+ --mermaid-background: #ffffff;
26
+ --mermaid-border-color: #cccccc;
27
+ --mermaid-border-radius: 0px;
28
+ --mermaid-label-offset-y: 0px;
29
+
30
+ /* 色板:莫兰迪灰色阶 */
31
+ --mermaid-cscale0: #A8A8A8;
32
+ --mermaid-cscale1: #8C8E90;
33
+ --mermaid-cscale2: #B0B0B0;
34
+ --mermaid-cscale3: #787878;
35
+ --mermaid-cscale4: #9E9E9E;
36
+ --mermaid-cscale5: #949698;
37
+ --mermaid-cscale6: #6E6E6E;
38
+ --mermaid-cscale7: #A0A0A0;
39
+ --mermaid-cscale8: #848688;
40
+ --mermaid-cscale9: #AAAAAA;
41
+ --mermaid-cscale10: #7A7A7C;
42
+ --mermaid-cscale11: #929294;
43
+ }
@@ -0,0 +1,20 @@
1
+ /*
2
+ * ColaMD 主题系统:Mermaid Dark 配色方案
3
+ * 依赖:foundation.css → mermaid/variables.css
4
+ */
5
+ body.theme-dark {
6
+ --mermaid-node-stroke: #8b949e;
7
+ --mermaid-node-fill: #21262d;
8
+ --mermaid-node-text: #e6edf3;
9
+ --mermaid-edge-stroke: #8b949e;
10
+ --mermaid-cluster-stroke: #30363d;
11
+ --mermaid-cluster-fill: rgba(110, 118, 129, 0.1);
12
+ --mermaid-label-text: #e6edf3;
13
+ --mermaid-edge-label-bg: #161b22;
14
+ --mermaid-edge-label-text: #8b949e;
15
+ --mermaid-title-text: #e6edf3;
16
+ --mermaid-axis-text: #8b949e;
17
+ --mermaid-highlight: #58a6ff;
18
+ --mermaid-background: #161b22;
19
+ --mermaid-border-color: #30363d;
20
+ }
@@ -0,0 +1,24 @@
1
+ /*
2
+ * ColaMD 主题系统:Mermaid Elegant 配色方案 (典雅暖调)
3
+ * 依赖:foundation.css → mermaid/variables.css
4
+ */
5
+ body.theme-elegant {
6
+ --mermaid-font-family: "LXGW WenKai", "Noto Serif SC", "Source Han Serif SC", "Songti SC", Georgia, serif;
7
+ --mermaid-font-size: 14px;
8
+ --mermaid-node-stroke: #c44b2b;
9
+ --mermaid-node-fill: #eae6e1;
10
+ --mermaid-node-text: #2c2c2c;
11
+ --mermaid-edge-stroke: #999;
12
+ --mermaid-cluster-stroke: #c44b2b;
13
+ --mermaid-cluster-fill: rgba(196, 75, 43, 0.04);
14
+ --mermaid-cluster-dasharray: 4,4;
15
+ --mermaid-label-text: #2c2c2c;
16
+ --mermaid-edge-label-bg: #f7f5f2;
17
+ --mermaid-edge-label-text: #555;
18
+ --mermaid-title-text: #2c2c2c;
19
+ --mermaid-axis-text: #777;
20
+ --mermaid-highlight: #c44b2b;
21
+ --mermaid-background: #f7f5f2;
22
+ --mermaid-border-color: #d8d3ce;
23
+ --mermaid-label-offset-y: -3px;
24
+ }
@@ -0,0 +1,21 @@
1
+ /*
2
+ * ColaMD 主题系统:Mermaid Light 配色方案
3
+ * 依赖:foundation.css → mermaid/variables.css
4
+ * 覆盖:仅覆盖 Mermaid 相关的颜色变量
5
+ */
6
+ body.theme-light, body:not([class*="theme-"]) {
7
+ --mermaid-node-stroke: #6366f1;
8
+ --mermaid-node-fill: #e0e7ff;
9
+ --mermaid-node-text: #1e1b4b;
10
+ --mermaid-edge-stroke: #a78bfa;
11
+ --mermaid-cluster-stroke: #8b5cf6;
12
+ --mermaid-cluster-fill: rgba(99, 102, 241, 0.06);
13
+ --mermaid-label-text: #1e1b4b;
14
+ --mermaid-edge-label-bg: #f8f9fb;
15
+ --mermaid-edge-label-text: #374151;
16
+ --mermaid-title-text: #1e1b4b;
17
+ --mermaid-axis-text: #6b7280;
18
+ --mermaid-highlight: #6366f1;
19
+ --mermaid-background: #f8f9fb;
20
+ --mermaid-border-color: #e5e7eb;
21
+ }
@@ -0,0 +1,26 @@
1
+ /*
2
+ * ColaMD 主题系统:Mermaid Newsprint 配色方案 (报纸打印风格)
3
+ * 依赖:foundation.css → mermaid/variables.css
4
+ */
5
+ body.theme-newsprint {
6
+ --mermaid-font-family: "PT Serif", Georgia, "Times New Roman", "Songti SC", serif;
7
+ --mermaid-font-size: 13px;
8
+ --mermaid-node-stroke: #d4d0c8;
9
+ --mermaid-node-fill: #f5f2eb;
10
+ --mermaid-node-text: #1a1a1a;
11
+ --mermaid-edge-stroke: #999;
12
+ --mermaid-cluster-stroke: #999;
13
+ --mermaid-cluster-fill: rgba(0, 0, 0, 0.03);
14
+ --mermaid-cluster-dasharray: none;
15
+ --mermaid-label-text: #1a1a1a;
16
+ --mermaid-edge-label-bg: #f5f2eb;
17
+ --mermaid-edge-label-text: #666;
18
+ --mermaid-title-text: #1a1a1a;
19
+ --mermaid-axis-text: #999;
20
+ --mermaid-highlight: #2c5f8a;
21
+ --mermaid-background: #ffffff;
22
+ --mermaid-border-color: #d4d0c8;
23
+ --mermaid-border-radius: 0px;
24
+ --mermaid-node-stroke-width: 1px;
25
+ --mermaid-edge-stroke-width: 1px;
26
+ }