@incremark/theme 0.3.10 → 0.4.0-alpha.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/dist/index.d.ts CHANGED
@@ -2,9 +2,26 @@
2
2
  * 颜色 Token 类型定义
3
3
  */
4
4
  /**
5
- * 基础色系统 - 包含各种颜色的完整色阶
5
+ * 交互状态颜色
6
6
  */
7
- interface BaseColorPalette {
7
+ interface ColorStates {
8
+ /** 主色(通常使用色阶 6) */
9
+ primary: string;
10
+ /** hover 状态(通常使用色阶 7) */
11
+ hover: string;
12
+ /** active/pressed 状态(通常使用色阶 8) */
13
+ active: string;
14
+ /** 浅色背景(通常使用色阶 2) */
15
+ light: string;
16
+ /** 更浅的背景(通常使用色阶 1) */
17
+ lighter: string;
18
+ /** 深色背景(通常使用色阶 9) */
19
+ dark: string;
20
+ }
21
+ /**
22
+ * 基础色系统 - 包含各种颜色的完整色阶和交互状态
23
+ */
24
+ interface BaseColorPalette extends ColorStates {
8
25
  /** 10 级色阶 */
9
26
  1: string;
10
27
  2: string;
@@ -20,6 +37,8 @@ interface BaseColorPalette {
20
37
  interface BaseColors {
21
38
  /** 蓝色系 */
22
39
  blue: BaseColorPalette;
40
+ /** 深青色系 */
41
+ teal: BaseColorPalette;
23
42
  /** 紫色系 */
24
43
  purple: BaseColorPalette;
25
44
  /** 绿色系 */
@@ -30,6 +49,8 @@ interface BaseColors {
30
49
  orange: BaseColorPalette;
31
50
  /** 青色系 */
32
51
  cyan: BaseColorPalette;
52
+ /** 靛蓝 */
53
+ indigo: BaseColorPalette;
33
54
  }
34
55
  interface ColorTokens {
35
56
  /** Neutral 中性色系统(10 级灰度) */
@@ -57,6 +78,17 @@ interface ColorTokens {
57
78
  };
58
79
  /** 品牌主题色 */
59
80
  brand: {
81
+ /** 色阶 1-10(从浅到深) */
82
+ 1: string;
83
+ 2: string;
84
+ 3: string;
85
+ 4: string;
86
+ 5: string;
87
+ 6: string;
88
+ 7: string;
89
+ 8: string;
90
+ 9: string;
91
+ 10: string;
60
92
  /** 主题色 - 用于链接、按钮等 */
61
93
  primary: string;
62
94
  /** 主题色 hover 状态 */
@@ -221,15 +253,36 @@ interface BorderTokens {
221
253
  /**
222
254
  * 阴影 Token 类型定义
223
255
  *
224
- * 注意:如果不需要阴影可以删除此文件
256
+ * 阴影使用深蓝色基底 rgba(0, 19, 48, ...) 而非纯黑,更有质感
225
257
  */
258
+ /** 方向性阴影 */
259
+ interface DirectionalShadow {
260
+ /** 向下投影 */
261
+ down: string;
262
+ /** 向上投影 */
263
+ up: string;
264
+ /** 向左投影 */
265
+ left: string;
266
+ /** 向右投影 */
267
+ right: string;
268
+ }
226
269
  interface ShadowTokens {
227
- /** 小阴影 */
270
+ /** 小阴影 - 用于按钮、卡片等轻微层级 */
228
271
  sm: string;
229
- /** 中等阴影 */
272
+ /** 中等阴影 - 用于下拉框、弹出层等 */
230
273
  md: string;
231
- /** 大阴影 */
274
+ /** 大阴影 - 用于模态框、侧边栏等 */
232
275
  lg: string;
276
+ /** 居中阴影 - 四周均匀 */
277
+ center: string;
278
+ /** 一级方向性阴影 - 轻量 */
279
+ level1: DirectionalShadow;
280
+ /** 二级方向性阴影 - 中等 */
281
+ level2: DirectionalShadow;
282
+ /** 三级方向性阴影 - 强调 */
283
+ level3: DirectionalShadow;
284
+ /** 品牌色卡片阴影 */
285
+ brandCard: string;
233
286
  }
234
287
 
235
288
  /**
@@ -292,6 +345,38 @@ declare const defaultTheme: DesignTokens;
292
345
 
293
346
  declare const darkTheme: DesignTokens;
294
347
 
348
+ /**
349
+ * 主题导出
350
+ */
351
+
352
+ /**
353
+ * 创建自定义主题
354
+ *
355
+ * @param brandColor 品牌主色(hex 格式),如果不提供则使用默认的 indigo
356
+ * @returns 自定义主题
357
+ *
358
+ * @example
359
+ * ```typescript
360
+ * // 使用默认主题(indigo)
361
+ * import { defaultTheme } from '@incremark/theme'
362
+ *
363
+ * // 自定义品牌色
364
+ * import { createTheme } from '@incremark/theme'
365
+ * const purpleTheme = createTheme('#a855f7')
366
+ *
367
+ * // 运行时切换
368
+ * const myTheme = createTheme(userSettings.brandColor)
369
+ * ```
370
+ */
371
+ declare function createTheme(brandColor?: string): DesignTokens;
372
+ /**
373
+ * 创建深色主题
374
+ *
375
+ * @param brandColor 品牌主色(hex 格式),如果不提供则使用默认的较亮 indigo
376
+ * @returns 深色主题
377
+ */
378
+ declare function createDarkTheme(brandColor?: string): DesignTokens;
379
+
295
380
  /**
296
381
  * 从 Token 生成 CSS Variables
297
382
  */
@@ -372,4 +457,4 @@ declare function mergeTheme(base: DesignTokens, override: Partial<DesignTokens>)
372
457
  */
373
458
  declare function applyTheme(element: (HTMLElement | Document) | undefined, theme: 'default' | 'dark' | DesignTokens | Partial<DesignTokens>): void;
374
459
 
375
- export { type AnimationTokens, type BorderTokens, type ColorTokens, type DesignTokens, type GenerateCSSVarsOptions, type ShadowTokens, type SpacingTokens, type DesignTokens as ThemeTokens, type TypographyTokens, applyTheme, darkTheme, defaultTheme, generateCSSVars, mergeTheme };
460
+ export { type AnimationTokens, type BorderTokens, type ColorTokens, type DesignTokens, type GenerateCSSVarsOptions, type ShadowTokens, type SpacingTokens, type DesignTokens as ThemeTokens, type TypographyTokens, applyTheme, createDarkTheme, createTheme, darkTheme, defaultTheme, generateCSSVars, mergeTheme };
package/dist/index.js CHANGED
@@ -1,115 +1,46 @@
1
- import { generateBrand } from '@incremark/colors';
1
+ import { generateColorSystem } from '@incremark/colors';
2
2
 
3
- // src/themes/default.ts
4
- var brandColors = generateBrand("#3b82f6");
3
+ // src/themes/index.ts
4
+ var colorBlue = generateColorSystem("#3b82f6");
5
+ var colorPurple = generateColorSystem("#a855f7");
6
+ var colorGreen = generateColorSystem("#10b981");
7
+ var colorRed = generateColorSystem("#ef4444");
8
+ var colorOrange = generateColorSystem("#f97316");
9
+ var colorCyan = generateColorSystem("#06b6d4");
10
+ var colorTeal = generateColorSystem("#0D9488");
11
+ var colorIndigo = generateColorSystem("#5776ff");
5
12
  var neutralSeries = {
6
13
  1: "#ffffff",
7
- 2: "#f8f9fc",
8
- // 稍微偏蓝一点
9
- 3: "#f1f3f8",
10
- // 稍微偏蓝
11
- 4: "#e2e5ec",
12
- // 稍微调整
13
- 5: "#cdd1da",
14
- // 稍微调整
15
- 6: "#9ca4b1",
16
- // 稍微调整
17
- 7: "#677284",
18
- // 稍微调整
19
- 8: "#34435a",
20
- // 稍微偏蓝
21
- 9: "#011431",
22
- // 稍微调整
23
- 10: "#01122d"
24
- // 稍微调整
14
+ 2: "#fafbfc",
15
+ // 极浅背景
16
+ 3: "#f3f4f6",
17
+ // hover 背景(加深)
18
+ 4: "#e5e7eb",
19
+ // active/selected 背景(加深)
20
+ 5: "#d1d5db",
21
+ // 边框色(加深)
22
+ 6: "#9ca3af",
23
+ // 次要文字
24
+ 7: "#6b7280",
25
+ // 主要文字
26
+ 8: "#374151",
27
+ // 深色文字
28
+ 9: "#1f2937",
29
+ // 代码块背景
30
+ 10: "#111827"
31
+ // 最深色
25
32
  };
26
- var baseBlue = generateBrand("#3b82f6");
27
- var basePurple = generateBrand("#a855f7");
28
- var baseGreen = generateBrand("#10b981");
29
- var baseRed = generateBrand("#ef4444");
30
- var baseOrange = generateBrand("#f97316");
31
- var baseCyan = generateBrand("#06b6d4");
32
33
  var defaultTheme = {
33
34
  // ============ 基础色系统 ============
34
35
  baseColors: {
35
- blue: {
36
- 1: baseBlue.palette[1],
37
- 2: baseBlue.palette[2],
38
- 3: baseBlue.palette[3],
39
- 4: baseBlue.palette[4],
40
- 5: baseBlue.palette[5],
41
- 6: baseBlue.palette[6],
42
- // 主色
43
- 7: baseBlue.palette[7],
44
- 8: baseBlue.palette[8],
45
- 9: baseBlue.palette[9],
46
- 10: baseBlue.palette[10]
47
- },
48
- purple: {
49
- 1: basePurple.palette[1],
50
- 2: basePurple.palette[2],
51
- 3: basePurple.palette[3],
52
- 4: basePurple.palette[4],
53
- 5: basePurple.palette[5],
54
- 6: basePurple.palette[6],
55
- // 主色
56
- 7: basePurple.palette[7],
57
- 8: basePurple.palette[8],
58
- 9: basePurple.palette[9],
59
- 10: basePurple.palette[10]
60
- },
61
- green: {
62
- 1: baseGreen.palette[1],
63
- 2: baseGreen.palette[2],
64
- 3: baseGreen.palette[3],
65
- 4: baseGreen.palette[4],
66
- 5: baseGreen.palette[5],
67
- 6: baseGreen.palette[6],
68
- // 主色
69
- 7: baseGreen.palette[7],
70
- 8: baseGreen.palette[8],
71
- 9: baseGreen.palette[9],
72
- 10: baseGreen.palette[10]
73
- },
74
- red: {
75
- 1: baseRed.palette[1],
76
- 2: baseRed.palette[2],
77
- 3: baseRed.palette[3],
78
- 4: baseRed.palette[4],
79
- 5: baseRed.palette[5],
80
- 6: baseRed.palette[6],
81
- // 主色
82
- 7: baseRed.palette[7],
83
- 8: baseRed.palette[8],
84
- 9: baseRed.palette[9],
85
- 10: baseRed.palette[10]
86
- },
87
- orange: {
88
- 1: baseOrange.palette[1],
89
- 2: baseOrange.palette[2],
90
- 3: baseOrange.palette[3],
91
- 4: baseOrange.palette[4],
92
- 5: baseOrange.palette[5],
93
- 6: baseOrange.palette[6],
94
- // 主色
95
- 7: baseOrange.palette[7],
96
- 8: baseOrange.palette[8],
97
- 9: baseOrange.palette[9],
98
- 10: baseOrange.palette[10]
99
- },
100
- cyan: {
101
- 1: baseCyan.palette[1],
102
- 2: baseCyan.palette[2],
103
- 3: baseCyan.palette[3],
104
- 4: baseCyan.palette[4],
105
- 5: baseCyan.palette[5],
106
- 6: baseCyan.palette[6],
107
- // 主色
108
- 7: baseCyan.palette[7],
109
- 8: baseCyan.palette[8],
110
- 9: baseCyan.palette[9],
111
- 10: baseCyan.palette[10]
112
- }
36
+ blue: colorBlue,
37
+ teal: colorTeal,
38
+ purple: colorPurple,
39
+ green: colorGreen,
40
+ red: colorRed,
41
+ orange: colorOrange,
42
+ cyan: colorCyan,
43
+ indigo: colorIndigo
113
44
  },
114
45
  color: {
115
46
  // ============ Neutral 中性色系统 ============
@@ -125,12 +56,26 @@ var defaultTheme = {
125
56
  9: neutralSeries[9],
126
57
  10: neutralSeries[10]
127
58
  },
128
- // ============ 品牌主题色(自动生成)============
59
+ // ============ 品牌主题色(引用 indigo)============
129
60
  brand: {
130
- primary: brandColors.primary,
131
- primaryHover: brandColors.hover,
132
- primaryActive: brandColors.active,
133
- primaryLight: brandColors.light
61
+ 1: colorIndigo[1],
62
+ 2: colorIndigo[2],
63
+ 3: colorIndigo[3],
64
+ 4: colorIndigo[4],
65
+ 5: colorIndigo[5],
66
+ 6: colorIndigo[6],
67
+ 7: colorIndigo[7],
68
+ 8: colorIndigo[8],
69
+ 9: colorIndigo[9],
70
+ 10: colorIndigo[10],
71
+ primary: colorIndigo.primary,
72
+ // indigo[6]
73
+ primaryHover: colorIndigo.hover,
74
+ // indigo[7]
75
+ primaryActive: colorIndigo.active,
76
+ // indigo[8]
77
+ primaryLight: colorIndigo.light
78
+ // indigo[2]
134
79
  },
135
80
  // ============ 语义化颜色(基于 neutral) ============
136
81
  text: {
@@ -173,20 +118,20 @@ var defaultTheme = {
173
118
  // border 使用通用的 border.strong,不单独定义
174
119
  },
175
120
  status: {
176
- pending: basePurple.palette[6],
121
+ pending: colorPurple.primary,
177
122
  // 使用紫色系主色
178
- completed: baseGreen.palette[6]
123
+ completed: colorGreen.primary
179
124
  // 使用绿色系主色
180
125
  },
181
126
  // ============ 交互元素颜色 ============
182
127
  interactive: {
183
- link: brandColors.primary,
184
- // 使用品牌主色
185
- linkHover: brandColors.hover,
186
- // 使用 hover 变体
187
- linkVisited: basePurple.palette[7],
128
+ link: colorIndigo.primary,
129
+ // 使用 indigo 主色
130
+ linkHover: colorIndigo.hover,
131
+ // 使用 indigo hover
132
+ linkVisited: colorPurple.dark,
188
133
  // 使用紫色系深色表示访问过
189
- checked: baseGreen.palette[6]
134
+ checked: colorGreen.primary
190
135
  // 使用绿色系主色表示选中
191
136
  }
192
137
  },
@@ -196,8 +141,8 @@ var defaultTheme = {
196
141
  mono: "'Fira Code', 'SF Mono', 'Monaco', 'Consolas', monospace"
197
142
  },
198
143
  fontSize: {
199
- xs: "11px",
200
- sm: "12px",
144
+ xs: "12px",
145
+ sm: "13px",
201
146
  base: "14px",
202
147
  md: "16px",
203
148
  lg: "18px",
@@ -237,9 +182,34 @@ var defaultTheme = {
237
182
  }
238
183
  },
239
184
  shadow: {
240
- sm: "0 1px 2px rgba(0, 0, 0, 0.05)",
241
- md: "0 4px 6px rgba(0, 0, 0, 0.1)",
242
- lg: "0 10px 15px rgba(0, 0, 0, 0.1)"
185
+ // 基础阴影(使用深蓝色基底,更有质感)
186
+ sm: "0 2px 4px rgba(0, 19, 48, 0.06)",
187
+ md: "0 2px 12px rgba(0, 19, 48, 0.08)",
188
+ lg: "0 2px 16px rgba(0, 19, 48, 0.12)",
189
+ center: "0 0 8px rgba(0, 19, 48, 0.08)",
190
+ // 方向性阴影 - 一级(轻量)
191
+ level1: {
192
+ down: "0 2px 4px rgba(0, 19, 48, 0.06)",
193
+ up: "0 -2px 4px rgba(0, 19, 48, 0.06)",
194
+ left: "-2px 0 8px rgba(0, 19, 48, 0.06)",
195
+ right: "2px 0 8px rgba(0, 19, 48, 0.06)"
196
+ },
197
+ // 方向性阴影 - 二级(中等)
198
+ level2: {
199
+ down: "0 2px 12px rgba(0, 19, 48, 0.08)",
200
+ up: "0 -2px 12px rgba(0, 19, 48, 0.08)",
201
+ left: "-2px 0 12px rgba(0, 19, 48, 0.08)",
202
+ right: "2px 0 12px rgba(0, 19, 48, 0.08)"
203
+ },
204
+ // 方向性阴影 - 三级(强调)
205
+ level3: {
206
+ down: "0 2px 16px rgba(0, 19, 48, 0.12)",
207
+ up: "0 -2px 16px rgba(0, 19, 48, 0.12)",
208
+ left: "-2px 0 16px rgba(0, 19, 48, 0.12)",
209
+ right: "2px 0 16px rgba(0, 19, 48, 0.12)"
210
+ },
211
+ // 品牌色卡片阴影
212
+ brandCard: "0 2px 12px rgba(1, 69, 197, 0.12)"
243
213
  },
244
214
  animation: {
245
215
  duration: {
@@ -253,9 +223,9 @@ var defaultTheme = {
253
223
  }
254
224
  }
255
225
  };
256
- var darkBrandColors = generateBrand("#60a5fa");
257
- var darkBasePurple = generateBrand("#c084fc");
258
- var darkBaseGreen = generateBrand("#34d399");
226
+ var darkColorIndigo = generateColorSystem("#7D95FF");
227
+ var darkColorPurple = generateColorSystem("#c084fc");
228
+ var darkColorGreen = generateColorSystem("#34d399");
259
229
  var darkNeutralSeries = {
260
230
  1: "#0a1628",
261
231
  2: "#162033",
@@ -270,8 +240,18 @@ var darkNeutralSeries = {
270
240
  };
271
241
  var darkTheme = {
272
242
  ...defaultTheme,
273
- // 继承亮色主题的基础色系统(baseColors 保持一致)
274
- baseColors: defaultTheme.baseColors,
243
+ // ============ 基础色系统 ============
244
+ baseColors: {
245
+ blue: defaultTheme.baseColors.blue,
246
+ teal: defaultTheme.baseColors.teal,
247
+ indigo: darkColorIndigo,
248
+ purple: darkColorPurple,
249
+ green: darkColorGreen,
250
+ // 其他颜色继承默认主题
251
+ red: defaultTheme.baseColors.red,
252
+ orange: defaultTheme.baseColors.orange,
253
+ cyan: defaultTheme.baseColors.cyan
254
+ },
275
255
  color: {
276
256
  // ============ Neutral 中性色系统(暗色模式反转) ============
277
257
  neutral: {
@@ -286,12 +266,26 @@ var darkTheme = {
286
266
  9: darkNeutralSeries[9],
287
267
  10: darkNeutralSeries[10]
288
268
  },
289
- // ============ 品牌主题色(暗色模式自动生成)============
269
+ // ============ 品牌主题色(暗色模式引用 indigo)============
290
270
  brand: {
291
- primary: darkBrandColors.primary,
292
- primaryHover: darkBrandColors.hover,
293
- primaryActive: darkBrandColors.active,
294
- primaryLight: darkBrandColors.light
271
+ 1: darkColorIndigo[1],
272
+ 2: darkColorIndigo[2],
273
+ 3: darkColorIndigo[3],
274
+ 4: darkColorIndigo[4],
275
+ 5: darkColorIndigo[5],
276
+ 6: darkColorIndigo[6],
277
+ 7: darkColorIndigo[7],
278
+ 8: darkColorIndigo[8],
279
+ 9: darkColorIndigo[9],
280
+ 10: darkColorIndigo[10],
281
+ primary: darkColorIndigo.primary,
282
+ // indigo[6]
283
+ primaryHover: darkColorIndigo.hover,
284
+ // indigo[7]
285
+ primaryActive: darkColorIndigo.active,
286
+ // indigo[8]
287
+ primaryLight: darkColorIndigo[9]
288
+ // 暗色模式用深色调
295
289
  },
296
290
  // ============ 语义化颜色 ============
297
291
  text: {
@@ -333,20 +327,20 @@ var darkTheme = {
333
327
  // border 使用通用的 border.strong,不单独定义
334
328
  },
335
329
  status: {
336
- pending: darkBasePurple.palette[6],
330
+ pending: darkColorPurple.primary,
337
331
  // 使用暗色紫色系主色
338
- completed: darkBaseGreen.palette[6]
332
+ completed: darkColorGreen.primary
339
333
  // 使用暗色绿色系主色
340
334
  },
341
335
  // ============ 交互元素颜色 ============
342
336
  interactive: {
343
- link: darkBrandColors.primary,
344
- // 使用暗色品牌主色
345
- linkHover: darkBrandColors.hover,
337
+ link: darkColorIndigo.primary,
338
+ // 使用暗色 indigo 主色
339
+ linkHover: darkColorIndigo.hover,
346
340
  // 使用 hover 变体
347
- linkVisited: darkBasePurple.palette[4],
341
+ linkVisited: darkColorPurple.lighter,
348
342
  // 使用暗色紫色系浅色
349
- checked: darkBaseGreen.palette[6]
343
+ checked: darkColorGreen.primary
350
344
  // 使用暗色绿色系主色
351
345
  }
352
346
  },
@@ -358,6 +352,69 @@ var darkTheme = {
358
352
  animation: defaultTheme.animation
359
353
  };
360
354
 
355
+ // src/themes/index.ts
356
+ function createTheme(brandColor) {
357
+ const colorSystem = brandColor ? generateColorSystem(brandColor) : defaultTheme.baseColors.indigo;
358
+ return {
359
+ ...defaultTheme,
360
+ color: {
361
+ ...defaultTheme.color,
362
+ brand: {
363
+ 1: colorSystem[1],
364
+ 2: colorSystem[2],
365
+ 3: colorSystem[3],
366
+ 4: colorSystem[4],
367
+ 5: colorSystem[5],
368
+ 6: colorSystem[6],
369
+ 7: colorSystem[7],
370
+ 8: colorSystem[8],
371
+ 9: colorSystem[9],
372
+ 10: colorSystem[10],
373
+ primary: colorSystem.primary,
374
+ primaryHover: colorSystem.hover,
375
+ primaryActive: colorSystem.active,
376
+ primaryLight: colorSystem.light
377
+ },
378
+ // 同步更新 link 颜色
379
+ interactive: {
380
+ ...defaultTheme.color.interactive,
381
+ link: colorSystem.primary,
382
+ linkHover: colorSystem.hover
383
+ }
384
+ }
385
+ };
386
+ }
387
+ function createDarkTheme(brandColor) {
388
+ const defaultDarkColor = brandColor ? generateColorSystem(brandColor) : darkTheme.baseColors.indigo;
389
+ return {
390
+ ...darkTheme,
391
+ color: {
392
+ ...darkTheme.color,
393
+ brand: {
394
+ 1: defaultDarkColor[1],
395
+ 2: defaultDarkColor[2],
396
+ 3: defaultDarkColor[3],
397
+ 4: defaultDarkColor[4],
398
+ 5: defaultDarkColor[5],
399
+ 6: defaultDarkColor[6],
400
+ 7: defaultDarkColor[7],
401
+ 8: defaultDarkColor[8],
402
+ 9: defaultDarkColor[9],
403
+ 10: defaultDarkColor[10],
404
+ primary: defaultDarkColor.primary,
405
+ primaryHover: defaultDarkColor.hover,
406
+ primaryActive: defaultDarkColor.active,
407
+ primaryLight: defaultDarkColor[9]
408
+ },
409
+ interactive: {
410
+ ...darkTheme.color.interactive,
411
+ link: defaultDarkColor.primary,
412
+ linkHover: defaultDarkColor.hover
413
+ }
414
+ }
415
+ };
416
+ }
417
+
361
418
  // src/utils/generate-css-vars.ts
362
419
  function objectToCSSVars(obj, prefix, result = []) {
363
420
  for (const [key, value] of Object.entries(obj)) {
@@ -435,6 +492,6 @@ function applyTheme(element = document, theme) {
435
492
  target.style.cssText = cssVars;
436
493
  }
437
494
 
438
- export { applyTheme, darkTheme, defaultTheme, generateCSSVars, mergeTheme };
495
+ export { applyTheme, createDarkTheme, createTheme, darkTheme, defaultTheme, generateCSSVars, mergeTheme };
439
496
  //# sourceMappingURL=index.js.map
440
497
  //# sourceMappingURL=index.js.map