@incremark/colors 0.4.0-alpha.1 → 1.0.0

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
@@ -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
  */
@@ -67,13 +77,18 @@ declare function generateColorAt(baseColor: string, index: number): string;
67
77
  declare function generatePalette(baseColor: string): string[];
68
78
  /**
69
79
  * 交互状态颜色
80
+ *
81
+ * 参照 Arco Design / Ant Design 标准:
82
+ * - hover = 色阶 5(比主色浅一阶)
83
+ * - primary = 色阶 6(基准色)
84
+ * - active = 色阶 7(比主色深一阶)
70
85
  */
71
86
  interface ColorStates {
72
87
  /** 主色(色阶 6) */
73
88
  primary: string;
74
- /** hover 状态(色阶 7) */
89
+ /** hover 状态(色阶 5) */
75
90
  hover: string;
76
- /** active/pressed 状态(色阶 8) */
91
+ /** active/pressed 状态(色阶 7) */
77
92
  active: string;
78
93
  /** 浅色背景(色阶 2) */
79
94
  light: string;
@@ -129,6 +144,44 @@ declare function generateBrand(primaryColor: string): {
129
144
  * @returns 完整的颜色系统
130
145
  */
131
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;
132
185
  /**
133
186
  * 预设品牌色
134
187
  */
@@ -330,4 +383,4 @@ declare const colorSystems: {
330
383
  teal: ColorSystem;
331
384
  };
332
385
 
333
- export { type ColorStates, type ColorSystem, type HSV, type RGB, colorSystems, generateBrand, generateColorAt, generateColorSystem, 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 状态(索引 7)
129
- hover: palette[6],
130
- // active/pressed 状态(索引 8)
131
- active: palette[7],
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
  // 完整色阶
@@ -160,10 +166,31 @@ function generateColorSystem(primaryColor) {
160
166
  8: palette[7],
161
167
  9: palette[8],
162
168
  10: palette[9],
163
- // 交互状态
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],
164
191
  primary: palette[5],
165
- hover: palette[6],
166
- active: palette[7],
192
+ hover: palette[4],
193
+ active: palette[6],
167
194
  light: palette[1],
168
195
  lighter: palette[0],
169
196
  dark: palette[8]
@@ -194,6 +221,6 @@ var colorSystems = {
194
221
  teal: generateColorSystem("#14b8a6")
195
222
  };
196
223
 
197
- export { colorSystems, generateBrand, generateColorAt, generateColorSystem, 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 };
198
225
  //# sourceMappingURL=index.js.map
199
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 */\nexport interface ColorStates {\n /** 主色(色阶 6) */\n primary: string\n /** hover 状态(色阶 7) */\n hover: string\n /** active/pressed 状态(色阶 8) */\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 状态(索引 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 *\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 // 交互状态\n primary: palette[5],\n hover: palette[6],\n active: palette[7],\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"]}
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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@incremark/colors",
3
- "version": "0.4.0-alpha.1",
3
+ "version": "1.0.0",
4
4
  "description": "Incremark color utilities - Automatic color palette and theme color generation.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",