@bytechain.cn/colamd-themes 0.3.2 → 0.5.1

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 (99) hide show
  1. package/.claude/skills/colamd-themes-preview.skill.md +333 -0
  2. package/.claude/skills/colamd-themes.skill.md +10 -0
  3. package/.dsh/skills/colamd-themes/SKILL.md +14 -0
  4. package/.github/supported-topics.yml +17 -0
  5. package/.hermes/skills/tools/colamd-themes/SKILL.md +14 -0
  6. package/.openclaw/skills/colamd-themes/SKILL.md +1 -37
  7. package/.opencode/skills/colamd-themes/SKILL.md +17 -0
  8. package/.trae/rules/colamd-themes.md +0 -36
  9. package/CHANGELOG.md +331 -241
  10. package/DSH_SUPPORT_SUMMARY.md +87 -0
  11. package/README.md +414 -384
  12. package/README_CN.md +412 -384
  13. package/RELEASENOTE.md +541 -389
  14. package/dist/cli.js +36 -55
  15. package/dist/cli.js.map +1 -1
  16. package/dist/color-utils.d.ts +1 -0
  17. package/dist/color-utils.js +25 -6
  18. package/dist/color-utils.js.map +1 -1
  19. package/dist/extractors/pdf-extractor.js +6 -1
  20. package/dist/extractors/pdf-extractor.js.map +1 -1
  21. package/dist/extractors/url-extractor.d.ts +0 -4
  22. package/dist/extractors/url-extractor.js +13 -126
  23. package/dist/extractors/url-extractor.js.map +1 -1
  24. package/dist/generator.d.ts +1 -1
  25. package/dist/generator.js +32 -11
  26. package/dist/generator.js.map +1 -1
  27. package/dist/models.d.ts +5 -4
  28. package/dist/models.js +2 -3
  29. package/dist/models.js.map +1 -1
  30. package/dist/renderer.d.ts +6 -3
  31. package/dist/renderer.js +54 -93
  32. package/dist/renderer.js.map +1 -1
  33. package/dist/templates/template.css +220 -498
  34. package/dist/templates/theme-paradigm.md +530 -658
  35. package/dist/templates/theme-template.hbs +256 -370
  36. package/dist/theme-store.js +19 -3
  37. package/dist/theme-store.js.map +1 -1
  38. package/dist/utils/document-paradigm.d.ts +12 -0
  39. package/dist/utils/document-paradigm.js +109 -0
  40. package/dist/utils/document-paradigm.js.map +1 -0
  41. package/dist/validators.d.ts +4 -1
  42. package/dist/validators.js +115 -1
  43. package/dist/validators.js.map +1 -1
  44. package/mcp-server/dist/index.d.ts +13 -0
  45. package/mcp-server/dist/index.d.ts.map +1 -0
  46. package/mcp-server/dist/index.js +0 -0
  47. package/mcp-server/dist/index.js.map +1 -0
  48. package/mcp-server/package-lock.json +1759 -0
  49. package/mcp-server/package.json +24 -0
  50. package/mcp-server/src/index.ts +0 -0
  51. package/mcp-server/tsconfig.json +19 -0
  52. package/package.json +54 -36
  53. package/skills/build-skills.sh +30 -5
  54. package/skills/colamd-themes/SKILL.md +180 -178
  55. package/src/cli.ts +474 -487
  56. package/src/color-systems.ts +289 -289
  57. package/src/color-utils.ts +137 -120
  58. package/src/contrast.ts +66 -66
  59. package/src/docx-style-paradigm.ts +811 -811
  60. package/src/export-cli.ts +356 -356
  61. package/src/extractors/base.ts +8 -8
  62. package/src/extractors/docx-extractor.ts +417 -417
  63. package/src/extractors/pdf-extractor.ts +533 -527
  64. package/src/extractors/url-extractor.ts +846 -981
  65. package/src/generator.ts +197 -169
  66. package/src/index.ts +29 -29
  67. package/src/models.ts +212 -212
  68. package/src/renderer.ts +310 -359
  69. package/src/templates/template.css +220 -498
  70. package/src/templates/theme-paradigm.md +530 -658
  71. package/src/templates/theme-template.hbs +256 -370
  72. package/src/theme-store.ts +185 -170
  73. package/src/types/pdf-parse.d.ts +12 -12
  74. package/src/utils/cli-utils.ts +84 -84
  75. package/src/utils/document-paradigm.ts +118 -0
  76. package/src/validators.ts +298 -176
  77. package/themes/academic-paper-pt.css +353 -1805
  78. package/themes/academic-paper.css +350 -1099
  79. package/themes/academic-style.css +342 -2430
  80. package/themes/colly.css +256 -370
  81. package/themes/elegant.css +288 -671
  82. package/themes/forest-ink.css +240 -664
  83. package/themes/guizang.css +250 -732
  84. package/themes/hermes-security.css +279 -0
  85. package/themes/meeting-minutes.css +256 -370
  86. package/themes/pixso-design.css +278 -1261
  87. package/themes/salvator-blog.css +256 -370
  88. package/themes/shimo-theme.css +256 -0
  89. package/themes/swiss-design.css +285 -746
  90. package/themes/template.css +220 -498
  91. package/themes/trae-blue.css +280 -737
  92. package/themes/word-contract.css +249 -0
  93. package/themes-preview/demo-content.md +187 -187
  94. package/tsconfig.json +18 -18
  95. package/src/mermaid-presets.ts +0 -142
  96. package/themes/swiss-design copy.css +0 -746
  97. package/themes-preview/colly-preview.html +0 -623
  98. package/themes-preview/meeting-minutes-preview.html +0 -625
  99. package/themes-preview/salvator-blog-preview.html +0 -623
package/src/models.ts CHANGED
@@ -1,212 +1,212 @@
1
- /** Theme style data models — v3.0 Seed Palette paradigm. */
2
-
3
- // ═══════════════════════════════════════════════════════════
4
- // Legacy model (kept for extractor compatibility)
5
- // ═══════════════════════════════════════════════════════════
6
-
7
- export interface ColorPalette {
8
- bgColor: string;
9
- textColor: string;
10
- headingColor: string;
11
- borderColor: string;
12
- accentColor: string;
13
- codeBg: string;
14
- codeColor: string;
15
- codeBlockBg: string;
16
- codeBlockText: string;
17
- blockquoteBg: string;
18
- blockquoteBorder: string;
19
- tableHeaderBg: string;
20
- selectionBg: string;
21
- textMuted: string;
22
- }
23
-
24
- export interface Typography {
25
- bodyFontFamily: string;
26
- headingFontFamily: string;
27
- codeFontFamily: string;
28
- baseFontSize: string;
29
- baseLineHeight: number;
30
- headingWeight: number;
31
- }
32
-
33
- export interface Spacing {
34
- contentMaxWidth: string;
35
- contentPadding: string;
36
- paragraphMargin: string;
37
- headingMarginTop: string;
38
- headingMarginBottom: string;
39
- }
40
-
41
- export interface SyntaxHighlighting {
42
- comment: string;
43
- punctuation: string;
44
- keyword: string;
45
- booleanBuiltinTag: string;
46
- string: string;
47
- number: string;
48
- functionClass: string;
49
- operator: string;
50
- variable: string;
51
- regex: string;
52
- }
53
-
54
- // ═══════════════════════════════════════════════════════════
55
- // v3.0 Seed Palette model
56
- // ═══════════════════════════════════════════════════════════
57
-
58
- export interface SeedPalette {
59
- accent: string;
60
- accentLight: string;
61
- accentDark: string;
62
- surface: string;
63
- panel: string;
64
- panelAlt: string;
65
- ink: string;
66
- inkMuted: string;
67
- inkDim: string;
68
- border: string;
69
- borderStrong: string;
70
- }
71
-
72
- export interface SeedTypography {
73
- fontBody: string;
74
- fontHeading: string;
75
- fontCode: string;
76
- fontMermaid: string;
77
- fontSizeRoot: string; // e.g. "16px"
78
- fontScaleH1: number;
79
- fontScaleH2: number;
80
- fontScaleH3: number;
81
- fontScaleH4: number;
82
- fontScaleH5: number;
83
- fontScaleH6: number;
84
- fontSizeMermaid: string;
85
- lineHeightBody: number;
86
- lineHeightHeading: number;
87
- lineHeightCode: number;
88
- }
89
-
90
- export interface ThemeStyle {
91
- name: string;
92
- description: string;
93
- /** Legacy — populated by extractors, then mapped to seed */
94
- palette: ColorPalette;
95
- typography: Typography;
96
- spacing: Spacing;
97
- syntax: SyntaxHighlighting;
98
- /** v3.0 seed palette */
99
- seed: SeedPalette;
100
- seedTypography: SeedTypography;
101
- /** Selected presets */
102
- colorSystemId: string;
103
- mermaidPresetId: string;
104
- /** Metadata */
105
- sourceUrl: string;
106
- sourceType: string;
107
- /** Computed radius and width */
108
- radiusSm: string;
109
- radiusMd: string;
110
- radiusLg: string;
111
- contentWidth: string;
112
- }
113
-
114
- // ═══════════════════════════════════════════════════════════
115
- // Defaults
116
- // ═══════════════════════════════════════════════════════════
117
-
118
- export function defaultPalette(): ColorPalette {
119
- return {
120
- bgColor: "#ffffff", textColor: "#000000", headingColor: "",
121
- borderColor: "#cccccc", accentColor: "#0000ff", codeBg: "#f5f5f5",
122
- codeColor: "", codeBlockBg: "#1e1e1e", codeBlockText: "#d4d4d4",
123
- blockquoteBg: "#f9f9f9", blockquoteBorder: "",
124
- tableHeaderBg: "#f0f0f0", selectionBg: "", textMuted: "#666666",
125
- };
126
- }
127
-
128
- export function defaultTypography(): Typography {
129
- return {
130
- bodyFontFamily: "Georgia, serif", headingFontFamily: "",
131
- codeFontFamily: "'JetBrains Mono', 'Fira Code', monospace",
132
- baseFontSize: "16px", baseLineHeight: 1.9, headingWeight: 700,
133
- };
134
- }
135
-
136
- export function defaultSpacing(): Spacing {
137
- return {
138
- contentMaxWidth: "820px", contentPadding: "30px 60px 100px",
139
- paragraphMargin: "0.8em 0", headingMarginTop: "1.8em",
140
- headingMarginBottom: "0.6em",
141
- };
142
- }
143
-
144
- export function defaultSyntax(): SyntaxHighlighting {
145
- return { comment: "", punctuation: "", keyword: "", booleanBuiltinTag: "",
146
- string: "", number: "", functionClass: "", operator: "", variable: "", regex: "" };
147
- }
148
-
149
- export function defaultSeedPalette(): SeedPalette {
150
- return {
151
- accent: "#6366f1", accentLight: "#eef2ff", accentDark: "#4f46e5",
152
- surface: "#ffffff", panel: "#f8f9fb", panelAlt: "#f1f3f5",
153
- ink: "#1a1d26", inkMuted: "#6b7280", inkDim: "#9ca3af",
154
- border: "#e5e7eb", borderStrong: "#d1d5db",
155
- };
156
- }
157
-
158
- export function defaultSeedTypography(): SeedTypography {
159
- return {
160
- fontBody: `"Inter", "SF Pro Text", -apple-system, "Noto Serif SC", "Source Han Serif SC", Georgia, serif`,
161
- fontHeading: `"Inter", "SF Pro Display", -apple-system, "Noto Sans SC", "PingFang SC", sans-serif`,
162
- fontCode: `"JetBrains Mono", "SF Mono", "Fira Code", Menlo, Consolas, monospace`,
163
- fontMermaid: `var(--font-heading)`,
164
- fontSizeRoot: "16px",
165
- fontScaleH1: 2.0, fontScaleH2: 1.5, fontScaleH3: 1.25,
166
- fontScaleH4: 1.1, fontScaleH5: 1.0, fontScaleH6: 0.95,
167
- fontSizeMermaid: "13px",
168
- lineHeightBody: 1.75, lineHeightHeading: 1.35, lineHeightCode: 1.6,
169
- };
170
- }
171
-
172
- // ═══════════════════════════════════════════════════════════
173
- // Factory
174
- // ═══════════════════════════════════════════════════════════
175
-
176
- export function makeThemeStyle(name: string, sourceType: string, sourceUrl: string): ThemeStyle {
177
- return {
178
- name,
179
- description: `Theme extracted from ${sourceType}`,
180
- palette: defaultPalette(),
181
- typography: defaultTypography(),
182
- spacing: defaultSpacing(),
183
- syntax: defaultSyntax(),
184
- seed: defaultSeedPalette(),
185
- seedTypography: defaultSeedTypography(),
186
- colorSystemId: "",
187
- mermaidPresetId: "",
188
- sourceUrl,
189
- sourceType,
190
- radiusSm: "3px",
191
- radiusMd: "6px",
192
- radiusLg: "10px",
193
- contentWidth: "820px",
194
- };
195
- }
196
-
197
- /** Map legacy ColorPalette to SeedPalette. */
198
- export function paletteToSeed(palette: ColorPalette): SeedPalette {
199
- return {
200
- accent: palette.accentColor,
201
- accentLight: palette.selectionBg || palette.accentColor,
202
- accentDark: palette.accentColor,
203
- surface: palette.bgColor,
204
- panel: palette.codeBg,
205
- panelAlt: palette.codeBlockBg,
206
- ink: palette.textColor,
207
- inkMuted: palette.textMuted,
208
- inkDim: palette.textMuted,
209
- border: palette.borderColor,
210
- borderStrong: palette.borderColor,
211
- };
212
- }
1
+ /** Theme style data models — v4.0 Seed Palette paradigm (ColaMD 2.7.8-rc.1 contract). */
2
+
3
+ // ═══════════════════════════════════════════════════════════
4
+ // Legacy model (kept for extractor compatibility)
5
+ // ═══════════════════════════════════════════════════════════
6
+
7
+ export interface ColorPalette {
8
+ bgColor: string;
9
+ textColor: string;
10
+ headingColor: string;
11
+ borderColor: string;
12
+ accentColor: string;
13
+ codeBg: string;
14
+ codeColor: string;
15
+ codeBlockBg: string;
16
+ codeBlockText: string;
17
+ blockquoteBg: string;
18
+ blockquoteBorder: string;
19
+ tableHeaderBg: string;
20
+ selectionBg: string;
21
+ textMuted: string;
22
+ }
23
+
24
+ export interface Typography {
25
+ bodyFontFamily: string;
26
+ headingFontFamily: string;
27
+ codeFontFamily: string;
28
+ baseFontSize: string;
29
+ baseLineHeight: number;
30
+ headingWeight: number;
31
+ }
32
+
33
+ export interface Spacing {
34
+ contentMaxWidth: string;
35
+ contentPadding: string;
36
+ paragraphMargin: string;
37
+ headingMarginTop: string;
38
+ headingMarginBottom: string;
39
+ }
40
+
41
+ export interface SyntaxHighlighting {
42
+ comment: string;
43
+ punctuation: string;
44
+ keyword: string;
45
+ booleanBuiltinTag: string;
46
+ string: string;
47
+ number: string;
48
+ functionClass: string;
49
+ operator: string;
50
+ variable: string;
51
+ regex: string;
52
+ }
53
+
54
+ // ═══════════════════════════════════════════════════════════
55
+ // 2.7 Seed Palette model
56
+ // ═══════════════════════════════════════════════════════════
57
+
58
+ export interface SeedPalette {
59
+ accent: string;
60
+ accentLight: string;
61
+ accentDark: string;
62
+ surface: string;
63
+ panel: string;
64
+ panelAlt: string;
65
+ ink: string;
66
+ inkMuted: string;
67
+ inkDim: string;
68
+ border: string;
69
+ borderStrong: string;
70
+ }
71
+
72
+ export interface SeedTypography {
73
+ fontBody: string;
74
+ fontHeading: string;
75
+ fontCode: string;
76
+ /** @deprecated 2.7 起图表改用 Pele,Mermaid 字段仅为提取器兼容保留 */
77
+ fontMermaid: string;
78
+ fontSizeRoot: string; // e.g. "16px"
79
+ fontScaleH1: number;
80
+ fontScaleH2: number;
81
+ fontScaleH3: number;
82
+ fontScaleH4: number;
83
+ fontScaleH5: number;
84
+ fontScaleH6: number;
85
+ /** @deprecated 2.7 起图表改用 Pele */
86
+ fontSizeMermaid: string;
87
+ lineHeightBody: number;
88
+ lineHeightHeading: number;
89
+ lineHeightCode: number;
90
+ }
91
+
92
+ export interface ThemeStyle {
93
+ name: string;
94
+ description: string;
95
+ /** Legacy — populated by extractors, then mapped to seed */
96
+ palette: ColorPalette;
97
+ typography: Typography;
98
+ spacing: Spacing;
99
+ syntax: SyntaxHighlighting;
100
+ /** 2.7 seed palette */
101
+ seed: SeedPalette;
102
+ seedTypography: SeedTypography;
103
+ /** Selected color system */
104
+ colorSystemId: string;
105
+ /** Metadata */
106
+ sourceUrl: string;
107
+ sourceType: string;
108
+ /** Computed radius and width */
109
+ radiusSm: string;
110
+ radiusMd: string;
111
+ radiusLg: string;
112
+ contentWidth: string;
113
+ }
114
+
115
+ // ═══════════════════════════════════════════════════════════
116
+ // Defaults
117
+ // ═══════════════════════════════════════════════════════════
118
+
119
+ export function defaultPalette(): ColorPalette {
120
+ return {
121
+ bgColor: "#ffffff", textColor: "#000000", headingColor: "",
122
+ borderColor: "#cccccc", accentColor: "#0000ff", codeBg: "#f5f5f5",
123
+ codeColor: "", codeBlockBg: "#1e1e1e", codeBlockText: "#d4d4d4",
124
+ blockquoteBg: "#f9f9f9", blockquoteBorder: "",
125
+ tableHeaderBg: "#f0f0f0", selectionBg: "", textMuted: "#666666",
126
+ };
127
+ }
128
+
129
+ export function defaultTypography(): Typography {
130
+ return {
131
+ bodyFontFamily: "Georgia, serif", headingFontFamily: "",
132
+ codeFontFamily: "'JetBrains Mono', 'Fira Code', monospace",
133
+ baseFontSize: "16px", baseLineHeight: 1.9, headingWeight: 700,
134
+ };
135
+ }
136
+
137
+ export function defaultSpacing(): Spacing {
138
+ return {
139
+ contentMaxWidth: "820px", contentPadding: "30px 60px 100px",
140
+ paragraphMargin: "0.8em 0", headingMarginTop: "1.8em",
141
+ headingMarginBottom: "0.6em",
142
+ };
143
+ }
144
+
145
+ export function defaultSyntax(): SyntaxHighlighting {
146
+ return { comment: "", punctuation: "", keyword: "", booleanBuiltinTag: "",
147
+ string: "", number: "", functionClass: "", operator: "", variable: "", regex: "" };
148
+ }
149
+
150
+ export function defaultSeedPalette(): SeedPalette {
151
+ return {
152
+ accent: "#6366f1", accentLight: "#eef2ff", accentDark: "#4f46e5",
153
+ surface: "#ffffff", panel: "#f8f9fb", panelAlt: "#f1f3f5",
154
+ ink: "#1a1d26", inkMuted: "#6b7280", inkDim: "#9ca3af",
155
+ border: "#e5e7eb", borderStrong: "#d1d5db",
156
+ };
157
+ }
158
+
159
+ export function defaultSeedTypography(): SeedTypography {
160
+ return {
161
+ fontBody: `"Inter", "SF Pro Text", -apple-system, "Noto Serif SC", "Source Han Serif SC", Georgia, serif`,
162
+ fontHeading: `"Inter", "SF Pro Display", -apple-system, "Noto Sans SC", "PingFang SC", sans-serif`,
163
+ fontCode: `"JetBrains Mono", "SF Mono", "Fira Code", Menlo, Consolas, monospace`,
164
+ fontMermaid: `var(--font-body)`,
165
+ fontSizeRoot: "16px",
166
+ fontScaleH1: 2.0, fontScaleH2: 1.5, fontScaleH3: 1.25,
167
+ fontScaleH4: 1.1, fontScaleH5: 1.0, fontScaleH6: 0.95,
168
+ fontSizeMermaid: "13px",
169
+ lineHeightBody: 1.75, lineHeightHeading: 1.35, lineHeightCode: 1.6,
170
+ };
171
+ }
172
+
173
+ // ═══════════════════════════════════════════════════════════
174
+ // Factory
175
+ // ═══════════════════════════════════════════════════════════
176
+
177
+ export function makeThemeStyle(name: string, sourceType: string, sourceUrl: string): ThemeStyle {
178
+ return {
179
+ name,
180
+ description: `Theme extracted from ${sourceType}`,
181
+ palette: defaultPalette(),
182
+ typography: defaultTypography(),
183
+ spacing: defaultSpacing(),
184
+ syntax: defaultSyntax(),
185
+ seed: defaultSeedPalette(),
186
+ seedTypography: defaultSeedTypography(),
187
+ colorSystemId: "",
188
+ sourceUrl,
189
+ sourceType,
190
+ radiusSm: "3px",
191
+ radiusMd: "6px",
192
+ radiusLg: "10px",
193
+ contentWidth: "820px",
194
+ };
195
+ }
196
+
197
+ /** Map legacy ColorPalette to SeedPalette. */
198
+ export function paletteToSeed(palette: ColorPalette): SeedPalette {
199
+ return {
200
+ accent: palette.accentColor,
201
+ accentLight: palette.selectionBg || palette.accentColor,
202
+ accentDark: palette.accentColor,
203
+ surface: palette.bgColor,
204
+ panel: palette.codeBg,
205
+ panelAlt: palette.codeBlockBg,
206
+ ink: palette.textColor,
207
+ inkMuted: palette.textMuted,
208
+ inkDim: palette.textMuted,
209
+ border: palette.borderColor,
210
+ borderStrong: palette.borderColor,
211
+ };
212
+ }