@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.
- package/.trae/specs/optimize-theme-loading/checklist.md +20 -0
- package/.trae/specs/optimize-theme-loading/spec.md +103 -0
- package/.trae/specs/optimize-theme-loading/tasks.md +40 -0
- package/CHANGELOG.md +323 -0
- package/CLAUDE.md +56 -0
- package/README.md +422 -26
- package/README_CN.md +480 -28
- package/android/app/build/.npmkeep +0 -0
- package/android/app/build.gradle +76 -0
- package/android/app/capacitor.build.gradle +24 -0
- package/android/app/proguard-rules.pro +21 -0
- package/android/app/release.keystore +0 -0
- package/android/app/src/androidTest/java/com/getcapacitor/myapp/ExampleInstrumentedTest.java +26 -0
- package/android/app/src/main/AndroidManifest.xml +64 -0
- package/android/app/src/main/java/cn/bytechain/colamd/MainActivity.java +180 -0
- package/android/app/src/main/res/drawable/ic_launcher_background.xml +170 -0
- package/android/app/src/main/res/drawable/splash.png +0 -0
- package/android/app/src/main/res/drawable-land-hdpi/splash.png +0 -0
- package/android/app/src/main/res/drawable-land-mdpi/splash.png +0 -0
- package/android/app/src/main/res/drawable-land-xhdpi/splash.png +0 -0
- package/android/app/src/main/res/drawable-land-xxhdpi/splash.png +0 -0
- package/android/app/src/main/res/drawable-land-xxxhdpi/splash.png +0 -0
- package/android/app/src/main/res/drawable-port-hdpi/splash.png +0 -0
- package/android/app/src/main/res/drawable-port-mdpi/splash.png +0 -0
- package/android/app/src/main/res/drawable-port-xhdpi/splash.png +0 -0
- package/android/app/src/main/res/drawable-port-xxhdpi/splash.png +0 -0
- package/android/app/src/main/res/drawable-port-xxxhdpi/splash.png +0 -0
- package/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml +34 -0
- package/android/app/src/main/res/layout/activity_main.xml +12 -0
- package/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +5 -0
- package/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +5 -0
- package/android/app/src/main/res/mipmap-hdpi/ic_launcher.png +0 -0
- package/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png +0 -0
- package/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png +0 -0
- package/android/app/src/main/res/mipmap-mdpi/ic_launcher.png +0 -0
- package/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png +0 -0
- package/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png +0 -0
- package/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png +0 -0
- package/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png +0 -0
- package/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png +0 -0
- package/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
- package/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png +0 -0
- package/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png +0 -0
- package/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
- package/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png +0 -0
- package/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png +0 -0
- package/android/app/src/main/res/values/ic_launcher_background.xml +4 -0
- package/android/app/src/main/res/values/strings.xml +7 -0
- package/android/app/src/main/res/values/styles.xml +22 -0
- package/android/app/src/main/res/xml/file_paths.xml +5 -0
- package/android/app/src/main/res/xml/network_security_config.xml +8 -0
- package/android/app/src/test/java/com/getcapacitor/myapp/ExampleUnitTest.java +18 -0
- package/android/build.gradle +29 -0
- package/android/capacitor.settings.gradle +21 -0
- package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/android/gradle/wrapper/gradle-wrapper.properties +7 -0
- package/android/gradle.properties +22 -0
- package/android/gradlew +248 -0
- package/android/gradlew.bat +92 -0
- package/android/settings.gradle +5 -0
- package/android/variables.gradle +16 -0
- package/bytechain.cn-colamd-1.5.1-beta.2.tgz +0 -0
- package/capacitor.config.js +29 -0
- package/capacitor.config.ts +30 -0
- package/demo.md +191 -484
- package/dist/main/index.js +77 -46
- package/dist/renderer/assets/{arc-tTbbM8LO.js → arc-CPdeInCG.js} +1 -1
- package/dist/renderer/assets/{architectureDiagram-3BPJPVTR-CEgYow6c.js → architectureDiagram-3BPJPVTR-BAbnaR9G.js} +4 -3
- package/dist/renderer/assets/{blockDiagram-GPEHLZMM-LHyVtPwW.js → blockDiagram-GPEHLZMM-CYSWjnJg.js} +5 -4
- package/dist/renderer/assets/{c4Diagram-AAUBKEIU-C1P1eJrf.js → c4Diagram-AAUBKEIU-Rb1tstnr.js} +3 -2
- package/dist/renderer/assets/{channel-upve91Tq.js → channel-DpG2A6fE.js} +1 -1
- package/dist/renderer/assets/{chunk-2J33WTMH-lag2vhq9.js → chunk-2J33WTMH-DFc0Jxy_.js} +1 -1
- package/dist/renderer/assets/{chunk-4BX2VUAB-BXJ8Ggh-.js → chunk-4BX2VUAB-BhRxDTNn.js} +1 -1
- package/dist/renderer/assets/{chunk-55IACEB6-CiBpxRa1.js → chunk-55IACEB6-DEgMVBk8.js} +1 -1
- package/dist/renderer/assets/{chunk-727SXJPM-ODeKQFXC.js → chunk-727SXJPM-bjBIfiz8.js} +5 -5
- package/dist/renderer/assets/{chunk-AQP2D5EJ-BK7xJolB.js → chunk-AQP2D5EJ-DwQMzTzD.js} +3 -3
- package/dist/renderer/assets/{chunk-FMBD7UC4-BxpCZPtz.js → chunk-FMBD7UC4-CkphwJzs.js} +1 -1
- package/dist/renderer/assets/{chunk-ND2GUHAM-CqqaU9Ue.js → chunk-ND2GUHAM-oU09z4y4.js} +1 -1
- package/dist/renderer/assets/{chunk-QZHKN3VN-Biq_K124.js → chunk-QZHKN3VN-rCbVuPBn.js} +1 -1
- package/dist/renderer/assets/{classDiagram-v2-Q7XG4LA2-Cq95X99o.js → classDiagram-4FO5ZUOK-DGS2faoM.js} +7 -6
- package/dist/renderer/assets/{classDiagram-4FO5ZUOK-Cq95X99o.js → classDiagram-v2-Q7XG4LA2-DGS2faoM.js} +7 -6
- package/dist/renderer/assets/{cose-bilkent-S5V4N54A-XasiD0bu.js → cose-bilkent-S5V4N54A-iqY6-EwA.js} +2 -1
- package/dist/renderer/assets/{dagre-BM42HDAG-Nq84Gfx4.js → dagre-BM42HDAG-5t3X5sDa.js} +4 -3
- package/dist/renderer/assets/{diagram-2AECGRRQ-DwuB1GWt.js → diagram-2AECGRRQ-DzHiYDPh.js} +4 -3
- package/dist/renderer/assets/{diagram-5GNKFQAL-C2tgeI1h.js → diagram-5GNKFQAL-BiNv6Keq.js} +5 -4
- package/dist/renderer/assets/{diagram-KO2AKTUF-D5KzjNBc.js → diagram-KO2AKTUF-ClzeDG6f.js} +4 -3
- package/dist/renderer/assets/{diagram-LMA3HP47-C12xHS1c.js → diagram-LMA3HP47-CGkw7wII.js} +4 -3
- package/dist/renderer/assets/{diagram-OG6HWLK6-CnxI9oEa.js → diagram-OG6HWLK6-Dl-Hyk1_.js} +5 -4
- package/dist/renderer/assets/{erDiagram-TEJ5UH35-D_uPaKwn.js → erDiagram-TEJ5UH35-BxUN79Qb.js} +5 -4
- package/dist/renderer/assets/{flowDiagram-I6XJVG4X-B6q_1-tE.js → flowDiagram-I6XJVG4X-CzFk-KNI.js} +7 -6
- package/dist/renderer/assets/{ganttDiagram-6RSMTGT7-CFo7ifF9.js → ganttDiagram-6RSMTGT7-C2xl6Igx.js} +3 -2
- package/dist/renderer/assets/{gitGraphDiagram-PVQCEYII-WSexHTnq.js → gitGraphDiagram-PVQCEYII-_fn7XCa7.js} +5 -4
- package/dist/renderer/assets/{graph-DyX_9f6d.js → graph-CDoHYrHm.js} +1 -1
- package/dist/renderer/assets/index-B4uDgADr.js +530 -0
- package/dist/renderer/assets/index-CBcVpA3d.js +30 -0
- package/dist/renderer/assets/index-CGj1spkU.js +27 -0
- package/dist/renderer/assets/{index-dyHEFYvY.css → index-CeFpoCKV.css} +443 -400
- package/dist/renderer/assets/index-D4CPFkph.js +9 -0
- package/dist/renderer/assets/{index-DW7LS8C1.js → index-DAlXyxzt.js} +1183 -346
- package/dist/renderer/assets/index-DxOzbfR-.js +110 -0
- package/dist/renderer/assets/index-Y89U1ptl.js +9 -0
- package/dist/renderer/assets/{infoDiagram-5YYISTIA-DaeJdLRq.js → infoDiagram-5YYISTIA-DL6XIxLz.js} +3 -2
- package/dist/renderer/assets/{ishikawaDiagram-YF4QCWOH-DDCZc35f.js → ishikawaDiagram-YF4QCWOH-BUZLjRo-.js} +2 -1
- package/dist/renderer/assets/{journeyDiagram-JHISSGLW-BEdmpAgl.js → journeyDiagram-JHISSGLW-C4rH_mQM.js} +5 -4
- package/dist/renderer/assets/{kanban-definition-UN3LZRKU-BEFtQcFb.js → kanban-definition-UN3LZRKU-DRbrBcWV.js} +3 -2
- package/dist/renderer/assets/{layout-CAJgQHdw.js → layout-DZl4n4qu.js} +2 -2
- package/dist/renderer/assets/{linear-B2ggJ8Am.js → linear-B0Krxg21.js} +1 -1
- package/dist/renderer/assets/{mindmap-definition-RKZ34NQL-DSxVgHB5.js → mindmap-definition-RKZ34NQL-DdmPsWrn.js} +4 -3
- package/dist/renderer/assets/{pieDiagram-4H26LBE5-CwYoJBuL.js → pieDiagram-4H26LBE5-BPZLqwG0.js} +5 -4
- package/dist/renderer/assets/preload-helper-tXtZnHb0.js +88 -0
- package/dist/renderer/assets/{quadrantDiagram-W4KKPZXB-CST9Fvg9.js → quadrantDiagram-W4KKPZXB-Dr-oWRk9.js} +3 -2
- package/dist/renderer/assets/{requirementDiagram-4Y6WPE33-DtrH52jS.js → requirementDiagram-4Y6WPE33-B6QZd0lo.js} +4 -3
- package/dist/renderer/assets/{sankeyDiagram-5OEKKPKP-ca1tPzJ_.js → sankeyDiagram-5OEKKPKP-Cyl9ojEt.js} +2 -1
- package/dist/renderer/assets/{sequenceDiagram-3UESZ5HK-Dfp1EJZ7.js → sequenceDiagram-3UESZ5HK-D48Yr9T6.js} +4 -3
- package/dist/renderer/assets/{stateDiagram-AJRCARHV-Bha2QoNB.js → stateDiagram-AJRCARHV-qyb8ETsa.js} +7 -6
- package/dist/renderer/assets/{stateDiagram-v2-BHNVJYJU-DWgFUYu1.js → stateDiagram-v2-BHNVJYJU-DmDOyyrJ.js} +5 -4
- package/dist/renderer/assets/{timeline-definition-PNZ67QCA-C3h_-OTj.js → timeline-definition-PNZ67QCA-C-KQxTi1.js} +3 -2
- package/dist/renderer/assets/{vennDiagram-CIIHVFJN-DFzjSrZi.js → vennDiagram-CIIHVFJN-BdaZlnH-.js} +2 -1
- package/dist/renderer/assets/{wardley-L42UT6IY-Cx-VbqoS.js → wardley-L42UT6IY-b-_GPpqL.js} +1 -1
- package/dist/renderer/assets/{wardleyDiagram-YWT4CUSO-S2D9XqX6.js → wardleyDiagram-YWT4CUSO-B2hBE-EE.js} +4 -3
- package/dist/renderer/assets/web-BKE0SH0E.js +36 -0
- package/dist/renderer/assets/web-CBsFp24u.js +564 -0
- package/dist/renderer/assets/web-Dc8YgoHP.js +24 -0
- package/dist/renderer/assets/web-TfDzToU7.js +58 -0
- package/dist/renderer/assets/{xychartDiagram-2RQKCTM6-Cfxigbts.js → xychartDiagram-2RQKCTM6-CSvswDTY.js} +3 -2
- package/dist/renderer/index.html +62 -3
- package/docs/academic-demo.md +566 -0
- package/docs/demo.html +748 -0
- package/docs/demo.md +546 -0
- package/docs/demo.pdf +0 -0
- package/docs/theme-paradigm.md +658 -0
- package/electron-builder.yml +7 -0
- package/electron.vite.config.js +31 -0
- package/electron.vite.config.ts +1 -1
- package/ios/App/App/AppDelegate.swift +49 -0
- package/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png +0 -0
- package/ios/App/App/Assets.xcassets/AppIcon.appiconset/Contents.json +14 -0
- package/ios/App/App/Assets.xcassets/Contents.json +6 -0
- package/ios/App/App/Assets.xcassets/Splash.imageset/Contents.json +23 -0
- package/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-1.png +0 -0
- package/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-2.png +0 -0
- package/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732.png +0 -0
- package/ios/App/App/Base.lproj/LaunchScreen.storyboard +32 -0
- package/ios/App/App/Base.lproj/Main.storyboard +19 -0
- package/ios/App/App/Info.plist +49 -0
- package/ios/App/App.xcodeproj/project.pbxproj +408 -0
- package/ios/App/App.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
- package/ios/App/Podfile +28 -0
- package/package.json +23 -3
- package/resources/templates/slides/template-forest-ink.html +540 -0
- package/scripts/generate-icons.js +102 -0
- package/src/main/index.ts +87 -63
- package/src/preload/index.d.ts +51 -0
- package/src/preload/index.js +70 -0
- package/src/renderer/capacitor-api.ts +713 -0
- package/src/renderer/editor/editor.ts +87 -4
- package/src/renderer/editor/plugins/index.ts +24 -32
- package/src/renderer/editor/plugins/math-plugin.ts +1 -1
- package/src/renderer/editor/plugins/mermaid-plugin-custom.css +13 -398
- package/src/renderer/editor/plugins/mermaid-plugin.ts +62 -71
- package/src/renderer/editor/plugins/themes/base/dark.css +23 -0
- package/src/renderer/editor/plugins/themes/base/elegant.css +32 -0
- package/src/renderer/editor/plugins/themes/base/light.css +20 -0
- package/src/renderer/editor/plugins/themes/base/newsprint.css +27 -0
- package/src/renderer/editor/plugins/themes/components/mermaid/academic.css +43 -0
- package/src/renderer/editor/plugins/themes/components/mermaid/dark.css +20 -0
- package/src/renderer/editor/plugins/themes/components/mermaid/elegant.css +24 -0
- package/src/renderer/editor/plugins/themes/components/mermaid/light.css +21 -0
- package/src/renderer/editor/plugins/themes/components/mermaid/newsprint.css +26 -0
- package/src/renderer/editor/plugins/themes/components/mermaid/variables.css +592 -0
- package/src/renderer/editor/plugins/themes/foundation.css +143 -0
- package/src/renderer/editor/plugins/themes/theme-manager.ts +92 -0
- package/src/renderer/env.d.ts +4 -1
- package/src/renderer/index.html +59 -1
- package/src/renderer/main.ts +432 -57
- package/src/renderer/mobile.css +429 -0
- package/themes/README.md +3 -0
- package/themes/academic-paper.css +1321 -0
- package/themes/elegant.css +14 -7
- package/themes/forest-ink.css +664 -0
- package/themes/pixso-design.css +1261 -0
- package/themes/swiss-design.css +596 -0
- package/themes/template.css +498 -0
- package/tsconfig.main.json +1 -0
- package/tsconfig.main.tsbuildinfo +1 -0
- package/tsconfig.preload.json +1 -0
- package/tsconfig.preload.tsbuildinfo +1 -0
- package/tsconfig.renderer.json +1 -0
- package/tsconfig.renderer.tsbuildinfo +1 -0
- package/tsconfig.tsbuildinfo +1 -0
- package/.trae/documents/fix-mermaid-colors-and-sankey.md +0 -50
- package/src/renderer/themes/theme-manager.ts +0 -40
- /package/src/renderer/{themes → editor/plugins/themes}/base.css +0 -0
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* ColaMD 主题系统:Foundation (基础层)
|
|
3
|
+
* 职责:全局 CSS 变量定义 + Mermaid 变量抽象 + 排版/颜色/间距语义化
|
|
4
|
+
* 版本:v2.0 (模块化架构)
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
/* ================================================================
|
|
8
|
+
1. 全局 CSS Reset
|
|
9
|
+
================================================================ */
|
|
10
|
+
*, *::before, *::after {
|
|
11
|
+
box-sizing: border-box;
|
|
12
|
+
margin: 0;
|
|
13
|
+
padding: 0;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
html, body {
|
|
17
|
+
height: 100%;
|
|
18
|
+
overflow: hidden;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/* ================================================================
|
|
22
|
+
2. CSS 变量系统 (语义化命名空间)
|
|
23
|
+
命名规则:
|
|
24
|
+
--color-* 颜色
|
|
25
|
+
--font-* 字体
|
|
26
|
+
--space-* 间距
|
|
27
|
+
--radius-* 圆角
|
|
28
|
+
--mermaid-* Mermaid 图表的变量抽象 (core 20 variables)
|
|
29
|
+
================================================================ */
|
|
30
|
+
:root {
|
|
31
|
+
/* ---- 2.1 基础排版 ---- */
|
|
32
|
+
--font-family-base: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Noto Sans', Helvetica, Arial, sans-serif;
|
|
33
|
+
--font-family-heading: var(--font-family-base);
|
|
34
|
+
--font-family-code: 'SF Mono', 'Fira Code', Menlo, Consolas, monospace;
|
|
35
|
+
--font-family-math: var(--font-family-base);
|
|
36
|
+
--font-size-root: 16px;
|
|
37
|
+
--line-height-base: 1.75;
|
|
38
|
+
--font-weight-bold: 600;
|
|
39
|
+
|
|
40
|
+
/* ---- 2.2 语义化颜色 ---- */
|
|
41
|
+
--color-bg: #ffffff;
|
|
42
|
+
--color-text: #24292f;
|
|
43
|
+
--color-text-muted: #656d76;
|
|
44
|
+
--color-border: #d0d7de;
|
|
45
|
+
--color-link: #0969da;
|
|
46
|
+
--color-accent: #6366f1;
|
|
47
|
+
--color-accent-dark: #4f46e5;
|
|
48
|
+
--color-accent-light: #eef2ff;
|
|
49
|
+
--color-selection-bg: rgba(9, 105, 218, 0.15);
|
|
50
|
+
|
|
51
|
+
/* ---- 2.3 代码块 ---- */
|
|
52
|
+
--code-bg: rgba(175, 184, 193, 0.2);
|
|
53
|
+
--code-color: var(--color-accent);
|
|
54
|
+
--code-block-bg: #f6f8fa;
|
|
55
|
+
--code-block-text: var(--color-text);
|
|
56
|
+
--code-block-color: var(--code-block-text);
|
|
57
|
+
|
|
58
|
+
/* ---- 2.4 引用块 ---- */
|
|
59
|
+
--blockquote-bg: transparent;
|
|
60
|
+
--blockquote-border: var(--color-border);
|
|
61
|
+
--blockquote-color: var(--color-text-muted);
|
|
62
|
+
|
|
63
|
+
/* ---- 2.5 表格 ---- */
|
|
64
|
+
--table-header-bg: #f6f8fa;
|
|
65
|
+
--table-border: var(--color-border);
|
|
66
|
+
--table-stripe: rgba(0, 0, 0, 0.03);
|
|
67
|
+
--table-hover-bg: transparent;
|
|
68
|
+
|
|
69
|
+
/* ---- 2.6 分割线 ---- */
|
|
70
|
+
--hr-color: var(--color-border);
|
|
71
|
+
|
|
72
|
+
/* ---- 2.7 滚动条 ---- */
|
|
73
|
+
--scrollbar-width: 6px;
|
|
74
|
+
--scrollbar-thumb: #d1d5db;
|
|
75
|
+
--scrollbar-thumb-hover: #9ca3af;
|
|
76
|
+
|
|
77
|
+
/* ---- 2.8 圆角系统 ---- */
|
|
78
|
+
--radius-sm: 3px;
|
|
79
|
+
--radius-md: 6px;
|
|
80
|
+
--radius-lg: 10px;
|
|
81
|
+
--radius-xl: 16px;
|
|
82
|
+
|
|
83
|
+
/* ================================================================
|
|
84
|
+
2.9 Mermaid 图表变量抽象 (核心 20 变量体系)
|
|
85
|
+
每个变量都对应 Mermaid SVG 中的具体视觉属性
|
|
86
|
+
修改配色只需覆盖这些变量即可
|
|
87
|
+
================================================================ */
|
|
88
|
+
|
|
89
|
+
/* -- 容器 -- */
|
|
90
|
+
--mermaid-background: var(--code-block-bg);
|
|
91
|
+
--mermaid-border-color: var(--color-border);
|
|
92
|
+
--mermaid-border-radius: var(--radius-md);
|
|
93
|
+
--mermaid-padding: 20px;
|
|
94
|
+
|
|
95
|
+
/* -- 字体 -- */
|
|
96
|
+
--mermaid-font-family: var(--font-family-base);
|
|
97
|
+
--mermaid-font-size: 14px;
|
|
98
|
+
|
|
99
|
+
/* -- 节点 (Node) -- */
|
|
100
|
+
--mermaid-node-stroke: var(--color-border);
|
|
101
|
+
--mermaid-node-fill: var(--code-bg);
|
|
102
|
+
--mermaid-node-text: var(--color-text);
|
|
103
|
+
--mermaid-node-stroke-width: 1.5px;
|
|
104
|
+
|
|
105
|
+
/* -- 连线 (Edge) -- */
|
|
106
|
+
--mermaid-edge-stroke: var(--color-border);
|
|
107
|
+
--mermaid-edge-stroke-width: 1.5px;
|
|
108
|
+
|
|
109
|
+
/* -- 聚类 (Cluster / Subgraph) -- */
|
|
110
|
+
--mermaid-cluster-stroke: var(--color-accent);
|
|
111
|
+
--mermaid-cluster-fill: rgba(99, 102, 241, 0.06);
|
|
112
|
+
--mermaid-cluster-dasharray: 4,4;
|
|
113
|
+
|
|
114
|
+
/* -- 标签 (Labels) -- */
|
|
115
|
+
--mermaid-label-text: var(--color-text);
|
|
116
|
+
--mermaid-label-bg: var(--mermaid-background);
|
|
117
|
+
--mermaid-edge-label-bg: var(--mermaid-background);
|
|
118
|
+
--mermaid-edge-label-text: var(--color-text-muted);
|
|
119
|
+
--mermaid-title-text: var(--color-text);
|
|
120
|
+
--mermaid-axis-text: var(--color-text-muted);
|
|
121
|
+
|
|
122
|
+
/* -- 特殊状态 -- */
|
|
123
|
+
--mermaid-highlight: var(--color-accent);
|
|
124
|
+
--mermaid-person-stroke: var(--color-text);
|
|
125
|
+
--mermaid-person-fill: var(--mermaid-node-fill);
|
|
126
|
+
|
|
127
|
+
/* -- 色板 (Color Scale: 用于 Pie/Gantt/Quadrant 等多色场景) -- */
|
|
128
|
+
--mermaid-cscale0: #6366f1;
|
|
129
|
+
--mermaid-cscale1: #ec4899;
|
|
130
|
+
--mermaid-cscale2: #06b6d4;
|
|
131
|
+
--mermaid-cscale3: #10b981;
|
|
132
|
+
--mermaid-cscale4: #f59e0b;
|
|
133
|
+
--mermaid-cscale5: #f43f5e;
|
|
134
|
+
--mermaid-cscale6: #3b82f6;
|
|
135
|
+
--mermaid-cscale7: #8b5cf6;
|
|
136
|
+
--mermaid-cscale8: #14b8a6;
|
|
137
|
+
--mermaid-cscale9: #eab308;
|
|
138
|
+
--mermaid-cscale10: #84cc16;
|
|
139
|
+
--mermaid-cscale11: #f97316;
|
|
140
|
+
|
|
141
|
+
/* -- 文本偏移 (跨主题通用) -- */
|
|
142
|
+
--mermaid-label-offset-y: -3px;
|
|
143
|
+
}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
const themes: Record<string, string> = {
|
|
2
|
+
light: 'theme-light',
|
|
3
|
+
dark: 'theme-dark',
|
|
4
|
+
elegant: 'theme-elegant',
|
|
5
|
+
newsprint: 'theme-newsprint'
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
let customStyleEl: HTMLStyleElement | null = null
|
|
9
|
+
|
|
10
|
+
/** 已导入的自定义主题缓存:name → { css, template } */
|
|
11
|
+
const customThemeCache = new Map<string, { css: string; template: string | null }>()
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* 从 CSS 中解析 `/* @template: <name> */` 指令
|
|
15
|
+
* @param css 导入的自定义 CSS 内容
|
|
16
|
+
* @returns 模版名称(light/dark/elegant/newsprint),无指令返回 null
|
|
17
|
+
*/
|
|
18
|
+
function parseTemplateDirective(css: string): string | null {
|
|
19
|
+
const match = css.match(/\/\*\s*@template:\s*(\w+)\s*\*\//)
|
|
20
|
+
return match && themes[match[1]] ? match[1] : null
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* 缓存导入的自定义主题 CSS 和模版引用
|
|
25
|
+
* @param name 主题文件名(不含 custom: 前缀)
|
|
26
|
+
* @param css 自定义 CSS 内容
|
|
27
|
+
*/
|
|
28
|
+
export function setCachedCustomTheme(name: string, css: string): void {
|
|
29
|
+
const template = parseTemplateDirective(css)
|
|
30
|
+
customThemeCache.set(name, { css, template })
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* 获取已缓存的自定义主题信息
|
|
35
|
+
* @param name 主题文件名
|
|
36
|
+
*/
|
|
37
|
+
export function getCachedCustomTheme(name: string): { css: string; template: string | null } | undefined {
|
|
38
|
+
return customThemeCache.get(name)
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* 应用主题:内建主题添加对应 class,自定义主题注入 CSS 并叠加模版
|
|
43
|
+
* @param name 主题名称(light/dark/elegant/newsprint 或 custom:<name>)
|
|
44
|
+
* @param customCSS 自定义 CSS 内容(可选,导入时传入;切换时从缓存恢复)
|
|
45
|
+
*/
|
|
46
|
+
export function applyTheme(name: string, customCSS?: string): void {
|
|
47
|
+
const body = document.body
|
|
48
|
+
|
|
49
|
+
// 移除所有主题 class
|
|
50
|
+
Object.values(themes).forEach(cls => body.classList.remove(cls))
|
|
51
|
+
body.classList.remove('theme-custom')
|
|
52
|
+
|
|
53
|
+
// 移除自定义主题 <style>
|
|
54
|
+
if (customStyleEl) {
|
|
55
|
+
customStyleEl.remove()
|
|
56
|
+
customStyleEl = null
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
if (customCSS || name.startsWith('custom:')) {
|
|
60
|
+
const key = name.startsWith('custom:') ? name.slice(7) : name
|
|
61
|
+
|
|
62
|
+
// 如果传入了新 CSS,更新缓存
|
|
63
|
+
if (customCSS) {
|
|
64
|
+
setCachedCustomTheme(key, customCSS)
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
const cached = customThemeCache.get(key)
|
|
68
|
+
|
|
69
|
+
// 注入自定义 CSS
|
|
70
|
+
if (cached) {
|
|
71
|
+
customStyleEl = document.createElement('style')
|
|
72
|
+
customStyleEl.textContent = cached.css
|
|
73
|
+
document.head.appendChild(customStyleEl)
|
|
74
|
+
|
|
75
|
+
// 如果声明了模版引用,叠加模版 class 作为变量基础
|
|
76
|
+
if (cached.template && themes[cached.template]) {
|
|
77
|
+
body.classList.add(themes[cached.template])
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
body.classList.add('theme-custom')
|
|
82
|
+
} else if (themes[name]) {
|
|
83
|
+
body.classList.add(themes[name])
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// 持久化主题选择
|
|
87
|
+
localStorage.setItem('colamd-theme', name)
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export function loadSavedTheme(): string {
|
|
91
|
+
return localStorage.getItem('colamd-theme') || 'elegant'
|
|
92
|
+
}
|
package/src/renderer/env.d.ts
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
|
+
/// <reference types="vite/client" />
|
|
1
2
|
import type { ElectronAPI } from '../preload/index'
|
|
3
|
+
import type { CapacitorBridgeAPI } from './capacitor-api'
|
|
2
4
|
|
|
3
5
|
declare global {
|
|
4
6
|
interface Window {
|
|
5
|
-
electronAPI
|
|
7
|
+
electronAPI?: ElectronAPI
|
|
8
|
+
capacitorAPI?: CapacitorBridgeAPI
|
|
6
9
|
}
|
|
7
10
|
}
|
package/src/renderer/index.html
CHANGED
|
@@ -3,14 +3,72 @@
|
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="UTF-8">
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
-
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'
|
|
6
|
+
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' http://localhost:*; style-src 'self' 'unsafe-inline' http://localhost:*; font-src 'self' data: https:; img-src 'self' data: blob: https: http: file:; connect-src 'self' ws://localhost:* http://localhost:*;">
|
|
7
7
|
<title>ColaMD</title>
|
|
8
|
+
<style>
|
|
9
|
+
#menu-btn, #mobile-menu { display: none; }
|
|
10
|
+
</style>
|
|
8
11
|
</head>
|
|
9
12
|
<body>
|
|
10
13
|
<div id="titlebar">
|
|
14
|
+
<button id="menu-btn" title="Menu">
|
|
15
|
+
<svg width="20" height="20" viewBox="0 0 20 20" fill="none">
|
|
16
|
+
<rect y="3" width="20" height="2" rx="1" fill="currentColor"/>
|
|
17
|
+
<rect y="9" width="20" height="2" rx="1" fill="currentColor"/>
|
|
18
|
+
<rect y="15" width="20" height="2" rx="1" fill="currentColor"/>
|
|
19
|
+
</svg>
|
|
20
|
+
</button>
|
|
11
21
|
<div id="agent-dot"></div>
|
|
12
22
|
<button id="slides-btn" title="Open as Slides">▶</button>
|
|
13
23
|
</div>
|
|
24
|
+
<nav id="mobile-menu">
|
|
25
|
+
<div id="menu-overlay"></div>
|
|
26
|
+
<div id="menu-panel">
|
|
27
|
+
<div id="menu-header">
|
|
28
|
+
<span id="menu-title">ColaMD</span>
|
|
29
|
+
<button id="menu-close-btn" title="Close">
|
|
30
|
+
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round">
|
|
31
|
+
<line x1="5" y1="5" x2="15" y2="15"/>
|
|
32
|
+
<line x1="15" y1="5" x2="5" y2="15"/>
|
|
33
|
+
</svg>
|
|
34
|
+
</button>
|
|
35
|
+
</div>
|
|
36
|
+
<div id="menu-body">
|
|
37
|
+
<div class="menu-section">
|
|
38
|
+
<div class="menu-section-title">File</div>
|
|
39
|
+
<button class="menu-item" data-action="new">New</button>
|
|
40
|
+
<button class="menu-item" data-action="open">Open...</button>
|
|
41
|
+
<button class="menu-item" data-action="save">Save</button>
|
|
42
|
+
<button class="menu-item" data-action="save-as">Save As...</button>
|
|
43
|
+
</div>
|
|
44
|
+
<div class="menu-section">
|
|
45
|
+
<div class="menu-section-title">Export</div>
|
|
46
|
+
<button class="menu-item" data-action="export-pdf">Export PDF</button>
|
|
47
|
+
<button class="menu-item" data-action="export-html">Export HTML</button>
|
|
48
|
+
<button class="menu-item" data-action="export-slides">Export Slides</button>
|
|
49
|
+
</div>
|
|
50
|
+
<div class="menu-section">
|
|
51
|
+
<div class="menu-section-title">Slides</div>
|
|
52
|
+
<button class="menu-item" data-action="new-slides">New Slides</button>
|
|
53
|
+
<button class="menu-item" data-action="open-as-slides">Open as Slides</button>
|
|
54
|
+
</div>
|
|
55
|
+
<div class="menu-section">
|
|
56
|
+
<div class="menu-section-title">Theme</div>
|
|
57
|
+
<div id="menu-theme-list"></div>
|
|
58
|
+
<button class="menu-item" data-action="import-theme">Import Theme...</button>
|
|
59
|
+
</div>
|
|
60
|
+
<div class="menu-section" id="menu-plugins-section" style="display:none">
|
|
61
|
+
<div class="menu-section-title">Plugins</div>
|
|
62
|
+
<div id="menu-plugin-list"></div>
|
|
63
|
+
</div>
|
|
64
|
+
<div class="menu-section">
|
|
65
|
+
<div class="menu-section-title">About</div>
|
|
66
|
+
<button class="menu-item" data-action="about">About ColaMD</button>
|
|
67
|
+
<button class="menu-item" data-action="exit">Exit</button>
|
|
68
|
+
</div>
|
|
69
|
+
</div>
|
|
70
|
+
</div>
|
|
71
|
+
</nav>
|
|
14
72
|
<div id="editor"></div>
|
|
15
73
|
<textarea id="source-editor" spellcheck="false"></textarea>
|
|
16
74
|
<script type="module" src="./main.ts"></script>
|