@incremark/colors 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 +110 -2
- package/dist/index.js +67 -5
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -26,6 +26,16 @@ interface RGB {
|
|
|
26
26
|
* HEX 转 RGB
|
|
27
27
|
*/
|
|
28
28
|
declare function hexToRgb(hex: string): RGB;
|
|
29
|
+
/**
|
|
30
|
+
* RGB 转空格分隔的三元组字符串
|
|
31
|
+
* { r: 13, g: 148, b: 136 } => '13 148 136'
|
|
32
|
+
*/
|
|
33
|
+
declare function rgbToTriplet(rgb: RGB): string;
|
|
34
|
+
/**
|
|
35
|
+
* HEX 转空格分隔的 RGB 三元组字符串
|
|
36
|
+
* '#0D9488' => '13 148 136'
|
|
37
|
+
*/
|
|
38
|
+
declare function hexToRgbTriplet(hex: string): string;
|
|
29
39
|
/**
|
|
30
40
|
* RGB 转 HEX
|
|
31
41
|
*/
|
|
@@ -65,11 +75,49 @@ declare function generateColorAt(baseColor: string, index: number): string;
|
|
|
65
75
|
* @returns 10 级色阶数组,索引 0-9 对应色阶 1-10
|
|
66
76
|
*/
|
|
67
77
|
declare function generatePalette(baseColor: string): string[];
|
|
78
|
+
/**
|
|
79
|
+
* 交互状态颜色
|
|
80
|
+
*
|
|
81
|
+
* 参照 Arco Design / Ant Design 标准:
|
|
82
|
+
* - hover = 色阶 5(比主色浅一阶)
|
|
83
|
+
* - primary = 色阶 6(基准色)
|
|
84
|
+
* - active = 色阶 7(比主色深一阶)
|
|
85
|
+
*/
|
|
86
|
+
interface ColorStates {
|
|
87
|
+
/** 主色(色阶 6) */
|
|
88
|
+
primary: string;
|
|
89
|
+
/** hover 状态(色阶 5) */
|
|
90
|
+
hover: string;
|
|
91
|
+
/** active/pressed 状态(色阶 7) */
|
|
92
|
+
active: string;
|
|
93
|
+
/** 浅色背景(色阶 2) */
|
|
94
|
+
light: string;
|
|
95
|
+
/** 更浅的背景(色阶 1) */
|
|
96
|
+
lighter: string;
|
|
97
|
+
/** 深色背景(色阶 9) */
|
|
98
|
+
dark: string;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* 完整的颜色系统(包含色阶和交互状态)
|
|
102
|
+
*/
|
|
103
|
+
interface ColorSystem extends ColorStates {
|
|
104
|
+
/** 完整的 10 级色阶 */
|
|
105
|
+
1: string;
|
|
106
|
+
2: string;
|
|
107
|
+
3: string;
|
|
108
|
+
4: string;
|
|
109
|
+
5: string;
|
|
110
|
+
6: string;
|
|
111
|
+
7: string;
|
|
112
|
+
8: string;
|
|
113
|
+
9: string;
|
|
114
|
+
10: string;
|
|
115
|
+
}
|
|
68
116
|
/**
|
|
69
117
|
* 生成品牌色系统
|
|
70
118
|
*
|
|
71
119
|
* @param primaryColor 品牌主色
|
|
72
|
-
* @returns
|
|
120
|
+
* @returns 品牌色对象(兼容旧版)
|
|
73
121
|
*/
|
|
74
122
|
declare function generateBrand(primaryColor: string): {
|
|
75
123
|
primary: string;
|
|
@@ -89,6 +137,51 @@ declare function generateBrand(primaryColor: string): {
|
|
|
89
137
|
10: string;
|
|
90
138
|
};
|
|
91
139
|
};
|
|
140
|
+
/**
|
|
141
|
+
* 生成完整的颜色系统(包含色阶和交互状态)
|
|
142
|
+
*
|
|
143
|
+
* @param primaryColor 主色
|
|
144
|
+
* @returns 完整的颜色系统
|
|
145
|
+
*/
|
|
146
|
+
declare function generateColorSystem(primaryColor: string): ColorSystem;
|
|
147
|
+
/**
|
|
148
|
+
* RGB 三元组格式的颜色系统
|
|
149
|
+
*
|
|
150
|
+
* 值为空格分隔的 RGB 三元组(如 '13 148 136'),
|
|
151
|
+
* 适用于 CSS 变量 + UnoCSS 的 rgb() / opacity 场景
|
|
152
|
+
*/
|
|
153
|
+
interface RGBColorSystem {
|
|
154
|
+
1: string;
|
|
155
|
+
2: string;
|
|
156
|
+
3: string;
|
|
157
|
+
4: string;
|
|
158
|
+
5: string;
|
|
159
|
+
6: string;
|
|
160
|
+
7: string;
|
|
161
|
+
8: string;
|
|
162
|
+
9: string;
|
|
163
|
+
10: string;
|
|
164
|
+
primary: string;
|
|
165
|
+
hover: string;
|
|
166
|
+
active: string;
|
|
167
|
+
light: string;
|
|
168
|
+
lighter: string;
|
|
169
|
+
dark: string;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* 生成 RGB 三元组格式的颜色系统
|
|
173
|
+
*
|
|
174
|
+
* @param primaryColor 主色(hex)
|
|
175
|
+
* @returns RGB 三元组格式的颜色系统
|
|
176
|
+
*
|
|
177
|
+
* @example
|
|
178
|
+
* ```ts
|
|
179
|
+
* const system = generateColorSystemRGB('#0D9488')
|
|
180
|
+
* system.primary // => '13 148 136'
|
|
181
|
+
* system[1] // => '230 248 246'
|
|
182
|
+
* ```
|
|
183
|
+
*/
|
|
184
|
+
declare function generateColorSystemRGB(primaryColor: string): RGBColorSystem;
|
|
92
185
|
/**
|
|
93
186
|
* 预设品牌色
|
|
94
187
|
*/
|
|
@@ -274,5 +367,20 @@ declare const presets: {
|
|
|
274
367
|
};
|
|
275
368
|
};
|
|
276
369
|
};
|
|
370
|
+
/**
|
|
371
|
+
* 预设颜色系统(包含交互状态)
|
|
372
|
+
*/
|
|
373
|
+
declare const colorSystems: {
|
|
374
|
+
blue: ColorSystem;
|
|
375
|
+
purple: ColorSystem;
|
|
376
|
+
green: ColorSystem;
|
|
377
|
+
orange: ColorSystem;
|
|
378
|
+
red: ColorSystem;
|
|
379
|
+
cyan: ColorSystem;
|
|
380
|
+
pink: ColorSystem;
|
|
381
|
+
indigo: ColorSystem;
|
|
382
|
+
yellow: ColorSystem;
|
|
383
|
+
teal: ColorSystem;
|
|
384
|
+
};
|
|
277
385
|
|
|
278
|
-
export { type HSV, type RGB, generateBrand, generateColorAt, generatePalette, hexToHsv, hexToRgb, hsvToHex, hsvToRgb, presets, rgbToHex, rgbToHsv };
|
|
386
|
+
export { type ColorStates, type ColorSystem, type HSV, type RGB, type RGBColorSystem, colorSystems, generateBrand, generateColorAt, generateColorSystem, generateColorSystemRGB, generatePalette, hexToHsv, hexToRgb, hexToRgbTriplet, hsvToHex, hsvToRgb, presets, rgbToHex, rgbToHsv, rgbToTriplet };
|
package/dist/index.js
CHANGED
|
@@ -10,6 +10,12 @@ function hexToRgb(hex) {
|
|
|
10
10
|
b: parseInt(result[3], 16)
|
|
11
11
|
};
|
|
12
12
|
}
|
|
13
|
+
function rgbToTriplet(rgb) {
|
|
14
|
+
return `${Math.round(rgb.r)} ${Math.round(rgb.g)} ${Math.round(rgb.b)}`;
|
|
15
|
+
}
|
|
16
|
+
function hexToRgbTriplet(hex) {
|
|
17
|
+
return rgbToTriplet(hexToRgb(hex));
|
|
18
|
+
}
|
|
13
19
|
function rgbToHex(rgb) {
|
|
14
20
|
const toHex = (n) => {
|
|
15
21
|
const hex = Math.round(n).toString(16);
|
|
@@ -125,10 +131,10 @@ function generateBrand(primaryColor) {
|
|
|
125
131
|
return {
|
|
126
132
|
// 主色(索引 6)
|
|
127
133
|
primary: palette[5],
|
|
128
|
-
// hover 状态(索引
|
|
129
|
-
hover: palette[
|
|
130
|
-
// active/pressed 状态(索引
|
|
131
|
-
active: palette[
|
|
134
|
+
// hover 状态(索引 5,比主色浅一阶)
|
|
135
|
+
hover: palette[4],
|
|
136
|
+
// active/pressed 状态(索引 7,比主色深一阶)
|
|
137
|
+
active: palette[6],
|
|
132
138
|
// 浅色背景(索引 2)
|
|
133
139
|
light: palette[1],
|
|
134
140
|
// 完整色阶
|
|
@@ -146,6 +152,50 @@ function generateBrand(primaryColor) {
|
|
|
146
152
|
}
|
|
147
153
|
};
|
|
148
154
|
}
|
|
155
|
+
function generateColorSystem(primaryColor) {
|
|
156
|
+
const palette = generatePalette(primaryColor);
|
|
157
|
+
return {
|
|
158
|
+
// 色阶
|
|
159
|
+
1: palette[0],
|
|
160
|
+
2: palette[1],
|
|
161
|
+
3: palette[2],
|
|
162
|
+
4: palette[3],
|
|
163
|
+
5: palette[4],
|
|
164
|
+
6: palette[5],
|
|
165
|
+
7: palette[6],
|
|
166
|
+
8: palette[7],
|
|
167
|
+
9: palette[8],
|
|
168
|
+
10: palette[9],
|
|
169
|
+
// 交互状态(参照 Arco Design:hover=5, primary=6, active=7)
|
|
170
|
+
primary: palette[5],
|
|
171
|
+
hover: palette[4],
|
|
172
|
+
active: palette[6],
|
|
173
|
+
light: palette[1],
|
|
174
|
+
lighter: palette[0],
|
|
175
|
+
dark: palette[8]
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
function generateColorSystemRGB(primaryColor) {
|
|
179
|
+
const palette = generatePalette(primaryColor).map(hexToRgbTriplet);
|
|
180
|
+
return {
|
|
181
|
+
1: palette[0],
|
|
182
|
+
2: palette[1],
|
|
183
|
+
3: palette[2],
|
|
184
|
+
4: palette[3],
|
|
185
|
+
5: palette[4],
|
|
186
|
+
6: palette[5],
|
|
187
|
+
7: palette[6],
|
|
188
|
+
8: palette[7],
|
|
189
|
+
9: palette[8],
|
|
190
|
+
10: palette[9],
|
|
191
|
+
primary: palette[5],
|
|
192
|
+
hover: palette[4],
|
|
193
|
+
active: palette[6],
|
|
194
|
+
light: palette[1],
|
|
195
|
+
lighter: palette[0],
|
|
196
|
+
dark: palette[8]
|
|
197
|
+
};
|
|
198
|
+
}
|
|
149
199
|
var presets = {
|
|
150
200
|
blue: generateBrand("#3b82f6"),
|
|
151
201
|
purple: generateBrand("#a855f7"),
|
|
@@ -158,7 +208,19 @@ var presets = {
|
|
|
158
208
|
yellow: generateBrand("#eab308"),
|
|
159
209
|
teal: generateBrand("#14b8a6")
|
|
160
210
|
};
|
|
211
|
+
var colorSystems = {
|
|
212
|
+
blue: generateColorSystem("#3b82f6"),
|
|
213
|
+
purple: generateColorSystem("#a855f7"),
|
|
214
|
+
green: generateColorSystem("#10b981"),
|
|
215
|
+
orange: generateColorSystem("#f97316"),
|
|
216
|
+
red: generateColorSystem("#ef4444"),
|
|
217
|
+
cyan: generateColorSystem("#06b6d4"),
|
|
218
|
+
pink: generateColorSystem("#ec4899"),
|
|
219
|
+
indigo: generateColorSystem("#6366f1"),
|
|
220
|
+
yellow: generateColorSystem("#eab308"),
|
|
221
|
+
teal: generateColorSystem("#14b8a6")
|
|
222
|
+
};
|
|
161
223
|
|
|
162
|
-
export { generateBrand, generateColorAt, generatePalette, hexToHsv, hexToRgb, hsvToHex, hsvToRgb, presets, rgbToHex, rgbToHsv };
|
|
224
|
+
export { colorSystems, generateBrand, generateColorAt, generateColorSystem, generateColorSystemRGB, generatePalette, hexToHsv, hexToRgb, hexToRgbTriplet, hsvToHex, hsvToRgb, presets, rgbToHex, rgbToHsv, rgbToTriplet };
|
|
163
225
|
//# sourceMappingURL=index.js.map
|
|
164
226
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * 颜色生成工具\n * \n * 参考 Arco Design 的颜色生成算法,重新实现\n * 基于 HSV 色彩空间生成 10 级色阶\n * \n * @see https://arco.design/palette/list\n */\n\n/**\n * HSV 颜色模型\n */\nexport interface HSV {\n h: number // 色调 0-360\n s: number // 饱和度 0-100\n v: number // 明度 0-100\n}\n\n/**\n * RGB 颜色模型\n */\nexport interface RGB {\n r: number // 红色 0-255\n g: number // 绿色 0-255\n b: number // 蓝色 0-255\n}\n\n/**\n * HEX 转 RGB\n */\nexport function hexToRgb(hex: string): RGB {\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex)\n if (!result) {\n throw new Error(`Invalid hex color: ${hex}`)\n }\n return {\n r: parseInt(result[1], 16),\n g: parseInt(result[2], 16),\n b: parseInt(result[3], 16)\n }\n}\n\n/**\n * RGB 转 HEX\n */\nexport function rgbToHex(rgb: RGB): string {\n const toHex = (n: number) => {\n const hex = Math.round(n).toString(16)\n return hex.length === 1 ? '0' + hex : hex\n }\n return `#${toHex(rgb.r)}${toHex(rgb.g)}${toHex(rgb.b)}`.toUpperCase()\n}\n\n/**\n * RGB 转 HSV\n */\nexport function rgbToHsv(rgb: RGB): HSV {\n const r = rgb.r / 255\n const g = rgb.g / 255\n const b = rgb.b / 255\n\n const max = Math.max(r, g, b)\n const min = Math.min(r, g, b)\n const diff = max - min\n\n let h = 0\n if (diff !== 0) {\n if (max === r) {\n h = 60 * (((g - b) / diff) % 6)\n } else if (max === g) {\n h = 60 * ((b - r) / diff + 2)\n } else {\n h = 60 * ((r - g) / diff + 4)\n }\n }\n if (h < 0) {\n h += 360\n }\n\n const s = max === 0 ? 0 : (diff / max) * 100\n const v = max * 100\n\n return { h, s, v }\n}\n\n/**\n * HSV 转 RGB\n */\nexport function hsvToRgb(hsv: HSV): RGB {\n const h = hsv.h\n const s = hsv.s / 100\n const v = hsv.v / 100\n\n const c = v * s\n const x = c * (1 - Math.abs(((h / 60) % 2) - 1))\n const m = v - c\n\n let r = 0, g = 0, b = 0\n if (h >= 0 && h < 60) {\n r = c; g = x; b = 0\n } else if (h >= 60 && h < 120) {\n r = x; g = c; b = 0\n } else if (h >= 120 && h < 180) {\n r = 0; g = c; b = x\n } else if (h >= 180 && h < 240) {\n r = 0; g = x; b = c\n } else if (h >= 240 && h < 300) {\n r = x; g = 0; b = c\n } else {\n r = c; g = 0; b = x\n }\n\n return {\n r: (r + m) * 255,\n g: (g + m) * 255,\n b: (b + m) * 255\n }\n}\n\n/**\n * HEX 转 HSV\n */\nexport function hexToHsv(hex: string): HSV {\n return rgbToHsv(hexToRgb(hex))\n}\n\n/**\n * HSV 转 HEX\n */\nexport function hsvToHex(hsv: HSV): string {\n return rgbToHex(hsvToRgb(hsv))\n}\n\n/**\n * 生成单个色阶\n * \n * 基于 Arco Design 的算法原理:\n * - 色阶 1-5: 提高明度,降低饱和度(更浅)\n * - 色阶 6: 主色\n * - 色阶 7-10: 降低明度,提高饱和度(更深)\n * \n * @param baseColor 基础颜色(hex)\n * @param index 色阶索引(1-10,6 为主色)\n */\nexport function generateColorAt(baseColor: string, index: number): string {\n if (index < 1 || index > 10) {\n throw new Error('Index must be between 1 and 10')\n }\n\n // 索引 6 返回原色\n if (index === 6) {\n return baseColor.toUpperCase()\n }\n\n const hsv = hexToHsv(baseColor)\n \n // 计算偏移量(1-5: 负偏移,7-10: 正偏移)\n const offset = index - 6\n const isLight = offset < 0\n const step = Math.abs(offset)\n\n let newHsv: HSV\n\n if (isLight) {\n // 浅色:提高明度,降低饱和度\n newHsv = {\n h: hsv.h,\n s: Math.max(0, hsv.s - step * 15), // 逐步降低饱和度\n v: Math.min(100, hsv.v + step * 8) // 逐步提高明度\n }\n } else {\n // 深色:降低明度,提高饱和度\n newHsv = {\n h: hsv.h,\n s: Math.min(100, hsv.s + step * 5), // 逐步提高饱和度\n v: Math.max(0, hsv.v - step * 12) // 逐步降低明度\n }\n }\n\n return hsvToHex(newHsv)\n}\n\n/**\n * 生成完整的 10 级色阶\n * \n * @param baseColor 基础颜色(hex)\n * @returns 10 级色阶数组,索引 0-9 对应色阶 1-10\n */\nexport function generatePalette(baseColor: string): string[] {\n return Array.from({ length: 10 }, (_, i) => generateColorAt(baseColor, i + 1))\n}\n\n/**\n * 生成品牌色系统\n * \n * @param primaryColor 品牌主色\n * @returns 品牌色对象\n */\nexport function generateBrand(primaryColor: string) {\n const palette = generatePalette(primaryColor)\n \n return {\n // 主色(索引 6)\n primary: palette[5],\n // hover 状态(索引 7)\n hover: palette[6],\n // active/pressed 状态(索引 8)\n active: palette[7],\n // 浅色背景(索引 2)\n light: palette[1],\n // 完整色阶\n palette: {\n 1: palette[0],\n 2: palette[1],\n 3: palette[2],\n 4: palette[3],\n 5: palette[4],\n 6: palette[5],\n 7: palette[6],\n 8: palette[7],\n 9: palette[8],\n 10: palette[9]\n }\n }\n}\n\n/**\n * 预设品牌色\n */\nexport const presets = {\n blue: generateBrand('#3b82f6'),\n purple: generateBrand('#a855f7'),\n green: generateBrand('#10b981'),\n orange: generateBrand('#f97316'),\n red: generateBrand('#ef4444'),\n cyan: generateBrand('#06b6d4'),\n pink: generateBrand('#ec4899'),\n indigo: generateBrand('#6366f1'),\n yellow: generateBrand('#eab308'),\n teal: generateBrand('#14b8a6')\n}\n\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * 颜色生成工具\n * \n * 参考 Arco Design 的颜色生成算法,重新实现\n * 基于 HSV 色彩空间生成 10 级色阶\n * \n * @see https://arco.design/palette/list\n */\n\n/**\n * HSV 颜色模型\n */\nexport interface HSV {\n h: number // 色调 0-360\n s: number // 饱和度 0-100\n v: number // 明度 0-100\n}\n\n/**\n * RGB 颜色模型\n */\nexport interface RGB {\n r: number // 红色 0-255\n g: number // 绿色 0-255\n b: number // 蓝色 0-255\n}\n\n/**\n * HEX 转 RGB\n */\nexport function hexToRgb(hex: string): RGB {\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex)\n if (!result) {\n throw new Error(`Invalid hex color: ${hex}`)\n }\n return {\n r: parseInt(result[1], 16),\n g: parseInt(result[2], 16),\n b: parseInt(result[3], 16)\n }\n}\n\n/**\n * RGB 转空格分隔的三元组字符串\n * { r: 13, g: 148, b: 136 } => '13 148 136'\n */\nexport function rgbToTriplet(rgb: RGB): string {\n return `${Math.round(rgb.r)} ${Math.round(rgb.g)} ${Math.round(rgb.b)}`\n}\n\n/**\n * HEX 转空格分隔的 RGB 三元组字符串\n * '#0D9488' => '13 148 136'\n */\nexport function hexToRgbTriplet(hex: string): string {\n return rgbToTriplet(hexToRgb(hex))\n}\n\n/**\n * RGB 转 HEX\n */\nexport function rgbToHex(rgb: RGB): string {\n const toHex = (n: number) => {\n const hex = Math.round(n).toString(16)\n return hex.length === 1 ? '0' + hex : hex\n }\n return `#${toHex(rgb.r)}${toHex(rgb.g)}${toHex(rgb.b)}`.toUpperCase()\n}\n\n/**\n * RGB 转 HSV\n */\nexport function rgbToHsv(rgb: RGB): HSV {\n const r = rgb.r / 255\n const g = rgb.g / 255\n const b = rgb.b / 255\n\n const max = Math.max(r, g, b)\n const min = Math.min(r, g, b)\n const diff = max - min\n\n let h = 0\n if (diff !== 0) {\n if (max === r) {\n h = 60 * (((g - b) / diff) % 6)\n } else if (max === g) {\n h = 60 * ((b - r) / diff + 2)\n } else {\n h = 60 * ((r - g) / diff + 4)\n }\n }\n if (h < 0) {\n h += 360\n }\n\n const s = max === 0 ? 0 : (diff / max) * 100\n const v = max * 100\n\n return { h, s, v }\n}\n\n/**\n * HSV 转 RGB\n */\nexport function hsvToRgb(hsv: HSV): RGB {\n const h = hsv.h\n const s = hsv.s / 100\n const v = hsv.v / 100\n\n const c = v * s\n const x = c * (1 - Math.abs(((h / 60) % 2) - 1))\n const m = v - c\n\n let r = 0, g = 0, b = 0\n if (h >= 0 && h < 60) {\n r = c; g = x; b = 0\n } else if (h >= 60 && h < 120) {\n r = x; g = c; b = 0\n } else if (h >= 120 && h < 180) {\n r = 0; g = c; b = x\n } else if (h >= 180 && h < 240) {\n r = 0; g = x; b = c\n } else if (h >= 240 && h < 300) {\n r = x; g = 0; b = c\n } else {\n r = c; g = 0; b = x\n }\n\n return {\n r: (r + m) * 255,\n g: (g + m) * 255,\n b: (b + m) * 255\n }\n}\n\n/**\n * HEX 转 HSV\n */\nexport function hexToHsv(hex: string): HSV {\n return rgbToHsv(hexToRgb(hex))\n}\n\n/**\n * HSV 转 HEX\n */\nexport function hsvToHex(hsv: HSV): string {\n return rgbToHex(hsvToRgb(hsv))\n}\n\n/**\n * 生成单个色阶\n * \n * 基于 Arco Design 的算法原理:\n * - 色阶 1-5: 提高明度,降低饱和度(更浅)\n * - 色阶 6: 主色\n * - 色阶 7-10: 降低明度,提高饱和度(更深)\n * \n * @param baseColor 基础颜色(hex)\n * @param index 色阶索引(1-10,6 为主色)\n */\nexport function generateColorAt(baseColor: string, index: number): string {\n if (index < 1 || index > 10) {\n throw new Error('Index must be between 1 and 10')\n }\n\n // 索引 6 返回原色\n if (index === 6) {\n return baseColor.toUpperCase()\n }\n\n const hsv = hexToHsv(baseColor)\n \n // 计算偏移量(1-5: 负偏移,7-10: 正偏移)\n const offset = index - 6\n const isLight = offset < 0\n const step = Math.abs(offset)\n\n let newHsv: HSV\n\n if (isLight) {\n // 浅色:提高明度,降低饱和度\n newHsv = {\n h: hsv.h,\n s: Math.max(0, hsv.s - step * 15), // 逐步降低饱和度\n v: Math.min(100, hsv.v + step * 8) // 逐步提高明度\n }\n } else {\n // 深色:降低明度,提高饱和度\n newHsv = {\n h: hsv.h,\n s: Math.min(100, hsv.s + step * 5), // 逐步提高饱和度\n v: Math.max(0, hsv.v - step * 12) // 逐步降低明度\n }\n }\n\n return hsvToHex(newHsv)\n}\n\n/**\n * 生成完整的 10 级色阶\n * \n * @param baseColor 基础颜色(hex)\n * @returns 10 级色阶数组,索引 0-9 对应色阶 1-10\n */\nexport function generatePalette(baseColor: string): string[] {\n return Array.from({ length: 10 }, (_, i) => generateColorAt(baseColor, i + 1))\n}\n\n/**\n * 交互状态颜色\n *\n * 参照 Arco Design / Ant Design 标准:\n * - hover = 色阶 5(比主色浅一阶)\n * - primary = 色阶 6(基准色)\n * - active = 色阶 7(比主色深一阶)\n */\nexport interface ColorStates {\n /** 主色(色阶 6) */\n primary: string\n /** hover 状态(色阶 5) */\n hover: string\n /** active/pressed 状态(色阶 7) */\n active: string\n /** 浅色背景(色阶 2) */\n light: string\n /** 更浅的背景(色阶 1) */\n lighter: string\n /** 深色背景(色阶 9) */\n dark: string\n}\n\n/**\n * 完整的颜色系统(包含色阶和交互状态)\n */\nexport interface ColorSystem extends ColorStates {\n /** 完整的 10 级色阶 */\n 1: string\n 2: string\n 3: string\n 4: string\n 5: string\n 6: string\n 7: string\n 8: string\n 9: string\n 10: string\n}\n\n/**\n * 生成品牌色系统\n *\n * @param primaryColor 品牌主色\n * @returns 品牌色对象(兼容旧版)\n */\nexport function generateBrand(primaryColor: string) {\n const palette = generatePalette(primaryColor)\n\n return {\n // 主色(索引 6)\n primary: palette[5],\n // hover 状态(索引 5,比主色浅一阶)\n hover: palette[4],\n // active/pressed 状态(索引 7,比主色深一阶)\n active: palette[6],\n // 浅色背景(索引 2)\n light: palette[1],\n // 完整色阶\n palette: {\n 1: palette[0],\n 2: palette[1],\n 3: palette[2],\n 4: palette[3],\n 5: palette[4],\n 6: palette[5],\n 7: palette[6],\n 8: palette[7],\n 9: palette[8],\n 10: palette[9]\n }\n }\n}\n\n/**\n * 生成完整的颜色系统(包含色阶和交互状态)\n *\n * @param primaryColor 主色\n * @returns 完整的颜色系统\n */\nexport function generateColorSystem(primaryColor: string): ColorSystem {\n const palette = generatePalette(primaryColor)\n\n return {\n // 色阶\n 1: palette[0],\n 2: palette[1],\n 3: palette[2],\n 4: palette[3],\n 5: palette[4],\n 6: palette[5],\n 7: palette[6],\n 8: palette[7],\n 9: palette[8],\n 10: palette[9],\n // 交互状态(参照 Arco Design:hover=5, primary=6, active=7)\n primary: palette[5],\n hover: palette[4],\n active: palette[6],\n light: palette[1],\n lighter: palette[0],\n dark: palette[8]\n }\n}\n\n/**\n * RGB 三元组格式的颜色系统\n *\n * 值为空格分隔的 RGB 三元组(如 '13 148 136'),\n * 适用于 CSS 变量 + UnoCSS 的 rgb() / opacity 场景\n */\nexport interface RGBColorSystem {\n 1: string\n 2: string\n 3: string\n 4: string\n 5: string\n 6: string\n 7: string\n 8: string\n 9: string\n 10: string\n primary: string\n hover: string\n active: string\n light: string\n lighter: string\n dark: string\n}\n\n/**\n * 生成 RGB 三元组格式的颜色系统\n *\n * @param primaryColor 主色(hex)\n * @returns RGB 三元组格式的颜色系统\n *\n * @example\n * ```ts\n * const system = generateColorSystemRGB('#0D9488')\n * system.primary // => '13 148 136'\n * system[1] // => '230 248 246'\n * ```\n */\nexport function generateColorSystemRGB(primaryColor: string): RGBColorSystem {\n const palette = generatePalette(primaryColor).map(hexToRgbTriplet)\n\n return {\n 1: palette[0],\n 2: palette[1],\n 3: palette[2],\n 4: palette[3],\n 5: palette[4],\n 6: palette[5],\n 7: palette[6],\n 8: palette[7],\n 9: palette[8],\n 10: palette[9],\n primary: palette[5],\n hover: palette[4],\n active: palette[6],\n light: palette[1],\n lighter: palette[0],\n dark: palette[8]\n }\n}\n\n/**\n * 预设品牌色\n */\nexport const presets = {\n blue: generateBrand('#3b82f6'),\n purple: generateBrand('#a855f7'),\n green: generateBrand('#10b981'),\n orange: generateBrand('#f97316'),\n red: generateBrand('#ef4444'),\n cyan: generateBrand('#06b6d4'),\n pink: generateBrand('#ec4899'),\n indigo: generateBrand('#6366f1'),\n yellow: generateBrand('#eab308'),\n teal: generateBrand('#14b8a6')\n}\n\n/**\n * 预设颜色系统(包含交互状态)\n */\nexport const colorSystems = {\n blue: generateColorSystem('#3b82f6'),\n purple: generateColorSystem('#a855f7'),\n green: generateColorSystem('#10b981'),\n orange: generateColorSystem('#f97316'),\n red: generateColorSystem('#ef4444'),\n cyan: generateColorSystem('#06b6d4'),\n pink: generateColorSystem('#ec4899'),\n indigo: generateColorSystem('#6366f1'),\n yellow: generateColorSystem('#eab308'),\n teal: generateColorSystem('#14b8a6')\n}\n\n"]}
|