@aviala-design/color 0.2.2 → 0.3.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/LICENSE +20 -20
- package/README.md +322 -319
- package/README.zh-CN.md +356 -356
- package/dist/generate.d.ts +52 -14
- package/dist/generate.d.ts.map +1 -0
- package/dist/image-color.d.ts +45 -0
- package/dist/image-color.d.ts.map +1 -0
- package/dist/index.d.ts +72 -16
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1 -1
- package/dist/index.mjs +415 -266
- package/dist/linear.d.ts +114 -30
- package/dist/linear.d.ts.map +1 -0
- package/dist/palette-dark.d.ts +9 -1
- package/dist/palette-dark.d.ts.map +1 -0
- package/dist/palette.d.ts +9 -1
- package/dist/palette.d.ts.map +1 -0
- package/dist/theme-blend.d.ts +304 -33
- package/dist/theme-blend.d.ts.map +1 -0
- package/dist/utils.d.ts +20 -2
- package/dist/utils.d.ts.map +1 -0
- package/package.json +55 -47
package/README.md
CHANGED
|
@@ -1,319 +1,322 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
//
|
|
35
|
-
console.log(
|
|
36
|
-
|
|
37
|
-
//
|
|
38
|
-
|
|
39
|
-
//
|
|
40
|
-
//
|
|
41
|
-
//
|
|
42
|
-
//
|
|
43
|
-
//
|
|
44
|
-
//
|
|
45
|
-
//
|
|
46
|
-
//
|
|
47
|
-
//
|
|
48
|
-
//
|
|
49
|
-
//
|
|
50
|
-
//
|
|
51
|
-
// }
|
|
52
|
-
|
|
53
|
-
//
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
console.log(colorSystem.
|
|
59
|
-
|
|
60
|
-
//
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
//
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
* `
|
|
105
|
-
* `
|
|
106
|
-
* `
|
|
107
|
-
* `
|
|
108
|
-
* `
|
|
109
|
-
* `
|
|
110
|
-
* `
|
|
111
|
-
* `
|
|
112
|
-
* `
|
|
113
|
-
* `
|
|
114
|
-
* `
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
- `
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
- `
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
- `
|
|
150
|
-
- `
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
//
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
- `
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
- `
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
//
|
|
193
|
-
const
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
**
|
|
214
|
-
- `number[]
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
**
|
|
224
|
-
- `number[]
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
- `
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
- `number
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
**
|
|
271
|
-
- `
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
**
|
|
290
|
-
- `
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
-
|
|
318
|
-
|
|
319
|
-
|
|
1
|
+
<!-- 当前版本: 0.3.0 | 最后同步: 2025/11/9 02:37:52 -->
|
|
2
|
+
# Aviala Design Color
|
|
3
|
+
|
|
4
|
+
  
|
|
5
|
+
|
|
6
|
+
Aviala Design Color - A powerful color processing utility library.
|
|
7
|
+
|
|
8
|
+
This library provides four core functionalities:
|
|
9
|
+
|
|
10
|
+
1. **Color Palette Generation**: Generate gradient swatches containing ten colors using algorithms, supporting both light and dark modes.
|
|
11
|
+
2. **Image Color Extraction**: Extract dominant colors from images for generating matching palettes or theme colors.
|
|
12
|
+
3. **Interface Color System**: Generate complete interface color systems based on primary colors, including semantic colors (success, warning, error, info).
|
|
13
|
+
4. **Theme Blending**: Advanced theme blending functionality based on HCT color space with multiple blending modes, supporting complete interface color system generation with brand customization.
|
|
14
|
+
|
|
15
|
+
## Usage
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
npm i @aviala-design/color
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
```js
|
|
22
|
+
import {
|
|
23
|
+
generate,
|
|
24
|
+
getPresetColors,
|
|
25
|
+
getRgbStr,
|
|
26
|
+
extractColorFromImage,
|
|
27
|
+
generateInterfaceColorSystem,
|
|
28
|
+
generateThemePalette,
|
|
29
|
+
blendInHct,
|
|
30
|
+
rgbToHct,
|
|
31
|
+
hctToRgb
|
|
32
|
+
} from '@aviala-design/color';
|
|
33
|
+
|
|
34
|
+
// Generate color palette
|
|
35
|
+
console.log(generate('#123456'));
|
|
36
|
+
|
|
37
|
+
// Get preset colors
|
|
38
|
+
console.log(getPresetColors());
|
|
39
|
+
// {
|
|
40
|
+
// red: {...},
|
|
41
|
+
// orangered: {...},
|
|
42
|
+
// orange: {...},
|
|
43
|
+
// gold: {...},
|
|
44
|
+
// yellow: {...},
|
|
45
|
+
// lime: {...},
|
|
46
|
+
// green: {...},
|
|
47
|
+
// cyan: {...},
|
|
48
|
+
// blue: {...},
|
|
49
|
+
// arcoblue: {...},
|
|
50
|
+
// purple: {...},
|
|
51
|
+
// pinkpurple: {...},
|
|
52
|
+
// magenta: {...},
|
|
53
|
+
// gray: {...}
|
|
54
|
+
// }
|
|
55
|
+
|
|
56
|
+
// Generate interface color system
|
|
57
|
+
const colorSystem = generateInterfaceColorSystem('#3491FA');
|
|
58
|
+
console.log(colorSystem.success); // Success colors
|
|
59
|
+
console.log(colorSystem.warning); // Warning colors
|
|
60
|
+
console.log(colorSystem.error); // Error colors
|
|
61
|
+
console.log(colorSystem.info); // Info colors
|
|
62
|
+
|
|
63
|
+
// Generate complete theme palette with brand customization
|
|
64
|
+
const themePalette = generateThemePalette('#3491FA', {
|
|
65
|
+
semanticColors: {
|
|
66
|
+
success: '#00C853',
|
|
67
|
+
warning: '#FF9800',
|
|
68
|
+
error: '#F44336'
|
|
69
|
+
},
|
|
70
|
+
semanticBlendRatio: 0.1 // 10% brand influence on semantic colors
|
|
71
|
+
});
|
|
72
|
+
console.log(themePalette.control); // Control colors (primary, gray)
|
|
73
|
+
console.log(themePalette.semantic); // Semantic colors with brand influence
|
|
74
|
+
console.log(themePalette.theme); // Theme color variations
|
|
75
|
+
|
|
76
|
+
// Theme blending
|
|
77
|
+
const blended = blendInHct([64, 196, 255], [255, 87, 34], 'overlay', 0.5);
|
|
78
|
+
console.log(blended); // Blended RGB color
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## API
|
|
82
|
+
|
|
83
|
+
### generate(color: string, options: Object);
|
|
84
|
+
|
|
85
|
+
#### options.index {number | 1-10}
|
|
86
|
+
|
|
87
|
+
Index (starting from 1) of the gradient colors to be generated.
|
|
88
|
+
|
|
89
|
+
#### options.list {boolean}
|
|
90
|
+
|
|
91
|
+
Whether to generate color array containing the ten colors.
|
|
92
|
+
|
|
93
|
+
#### options.dark
|
|
94
|
+
|
|
95
|
+
Whether to generate colors for dark mode.
|
|
96
|
+
|
|
97
|
+
#### options.format {'hex' | 'rgb' | 'hsl'}
|
|
98
|
+
|
|
99
|
+
Color format.
|
|
100
|
+
### getPresetColors {Function}
|
|
101
|
+
|
|
102
|
+
Contains 14 preset sets of colors.
|
|
103
|
+
|
|
104
|
+
* `red`
|
|
105
|
+
* `orangered`
|
|
106
|
+
* `orange`
|
|
107
|
+
* `gold`
|
|
108
|
+
* `yellow`
|
|
109
|
+
* `lime`
|
|
110
|
+
* `green`
|
|
111
|
+
* `cyan`
|
|
112
|
+
* `blue`
|
|
113
|
+
* `arcoblue`
|
|
114
|
+
* `purple`
|
|
115
|
+
* `pinkpurple`
|
|
116
|
+
* `magenta`
|
|
117
|
+
* `gray`
|
|
118
|
+
|
|
119
|
+
```js
|
|
120
|
+
const { red } = getPresetColors();
|
|
121
|
+
|
|
122
|
+
console.log(red.light);
|
|
123
|
+
console.log(red.dark);
|
|
124
|
+
console.log(red.primary);
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### getRgbStr(color: string)
|
|
128
|
+
|
|
129
|
+
For a given color, get the r, g, b value in string
|
|
130
|
+
|
|
131
|
+
```js
|
|
132
|
+
getRgbStr('#F53F3F') // 245,63,63
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### generateInterfaceColorSystem(primaryColor: string, options?: Object)
|
|
136
|
+
|
|
137
|
+
Generate a complete interface color system based on a primary color, including semantic colors.
|
|
138
|
+
|
|
139
|
+
**Parameters:**
|
|
140
|
+
- `primaryColor`: string - Primary color in hex format (e.g., '#3491FA')
|
|
141
|
+
- `options`: Object - Optional configuration
|
|
142
|
+
- `successBase`: string - Custom success color base, defaults to green
|
|
143
|
+
- `warningBase`: string - Custom warning color base, defaults to orange
|
|
144
|
+
- `errorBase`: string - Custom error color base, defaults to red
|
|
145
|
+
- `infoBase`: string - Custom info color base, defaults to blue
|
|
146
|
+
|
|
147
|
+
**Returns:**
|
|
148
|
+
- `Object` - Complete color system object
|
|
149
|
+
- `primary`: string[] - Primary color palette (10 colors)
|
|
150
|
+
- `success`: string[] - Success color palette (10 colors)
|
|
151
|
+
- `warning`: string[] - Warning color palette (10 colors)
|
|
152
|
+
- `error`: string[] - Error color palette (10 colors)
|
|
153
|
+
- `info`: string[] - Info color palette (10 colors)
|
|
154
|
+
|
|
155
|
+
```js
|
|
156
|
+
// Generate default interface color system
|
|
157
|
+
const colorSystem = generateInterfaceColorSystem('#3491FA');
|
|
158
|
+
console.log(colorSystem.primary); // Primary color palette
|
|
159
|
+
console.log(colorSystem.success); // Success color palette
|
|
160
|
+
|
|
161
|
+
// Custom semantic color bases
|
|
162
|
+
const customColorSystem = generateInterfaceColorSystem('#3491FA', {
|
|
163
|
+
successBase: '#00C853',
|
|
164
|
+
warningBase: '#FF9800',
|
|
165
|
+
errorBase: '#F44336',
|
|
166
|
+
infoBase: '#2196F3'
|
|
167
|
+
});
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
### generateThemePalette(themeColor: string, options?: Object)
|
|
171
|
+
|
|
172
|
+
Generate a complete theme palette with advanced brand customization and semantic color blending.
|
|
173
|
+
|
|
174
|
+
**Parameters:**
|
|
175
|
+
- `themeColor`: string - Primary theme color in hex format
|
|
176
|
+
- `options`: Object - Optional configuration
|
|
177
|
+
- `semanticColors`: Object - Custom semantic color bases
|
|
178
|
+
- `success`: string - Success color base
|
|
179
|
+
- `warning`: string - Warning color base
|
|
180
|
+
- `error`: string - Error color base
|
|
181
|
+
- `info`: string - Info color base
|
|
182
|
+
- `semanticBlendRatio`: number - Brand influence on semantic colors (0-1, default: 0.08)
|
|
183
|
+
- `controlBlendRatio`: number - Brand influence on control colors (0-1, default: 0.05)
|
|
184
|
+
|
|
185
|
+
**Returns:**
|
|
186
|
+
- `Object` - Complete theme palette
|
|
187
|
+
- `control`: Object - Control colors (primary, gray)
|
|
188
|
+
- `semantic`: Object - Semantic colors with brand influence
|
|
189
|
+
- `theme`: string[] - Theme color variations (10 colors)
|
|
190
|
+
|
|
191
|
+
```js
|
|
192
|
+
// Basic theme palette
|
|
193
|
+
const basicPalette = generateThemePalette('#3491FA');
|
|
194
|
+
|
|
195
|
+
// Advanced customization with brand influence
|
|
196
|
+
const brandPalette = generateThemePalette('#3491FA', {
|
|
197
|
+
semanticColors: {
|
|
198
|
+
success: '#00C853',
|
|
199
|
+
warning: '#FF9800',
|
|
200
|
+
error: '#F44336',
|
|
201
|
+
info: '#2196F3'
|
|
202
|
+
},
|
|
203
|
+
semanticBlendRatio: 0.12, // 12% brand influence
|
|
204
|
+
controlBlendRatio: 0.08 // 8% brand influence
|
|
205
|
+
});
|
|
206
|
+
console.log(brandPalette.semantic.success); // Brand-influenced success colors
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
### rgbToHct(rgb: number[])
|
|
210
|
+
|
|
211
|
+
Convert RGB color to HCT color space.
|
|
212
|
+
|
|
213
|
+
**Parameters:**
|
|
214
|
+
- `rgb`: number[] - RGB color array [r, g, b], range 0-255
|
|
215
|
+
|
|
216
|
+
**Returns:**
|
|
217
|
+
- `number[]` - HCT color array [h, c, t], hue(0-360), chroma(0-100+), tone(0-100)
|
|
218
|
+
|
|
219
|
+
### hctToRgb(hct: number[])
|
|
220
|
+
|
|
221
|
+
Convert HCT color to RGB color space.
|
|
222
|
+
|
|
223
|
+
**Parameters:**
|
|
224
|
+
- `hct`: number[] - HCT color array [h, c, t]
|
|
225
|
+
|
|
226
|
+
**Returns:**
|
|
227
|
+
- `number[]` - RGB color array [r, g, b], range 0-255
|
|
228
|
+
|
|
229
|
+
### blendInHct(color1: number[], color2: number[], mode: string, ratio: number)
|
|
230
|
+
|
|
231
|
+
Blend two colors in HCT color space.
|
|
232
|
+
|
|
233
|
+
**Parameters:**
|
|
234
|
+
- `color1`: number[] - First color RGB array
|
|
235
|
+
- `color2`: number[] - Second color RGB array
|
|
236
|
+
- `mode`: string - Blend mode: 'multiply', 'screen', 'overlay', 'softLight'
|
|
237
|
+
- `ratio`: number - Blend ratio, range 0-1
|
|
238
|
+
|
|
239
|
+
**Returns:**
|
|
240
|
+
- `number[]` - Blended RGB color array
|
|
241
|
+
|
|
242
|
+
```js
|
|
243
|
+
// RGB to HCT conversion
|
|
244
|
+
const hct = rgbToHct([64, 196, 255]);
|
|
245
|
+
console.log(hct); // [200, 45, 80]
|
|
246
|
+
|
|
247
|
+
// HCT to RGB conversion
|
|
248
|
+
const rgb = hctToRgb([200, 45, 80]);
|
|
249
|
+
console.log(rgb); // [64, 196, 255]
|
|
250
|
+
|
|
251
|
+
// Color blending
|
|
252
|
+
const blended = blendInHct(
|
|
253
|
+
[64, 196, 255], // Blue
|
|
254
|
+
[255, 87, 34], // Orange
|
|
255
|
+
'overlay', // Overlay mode
|
|
256
|
+
0.5 // 50% blend
|
|
257
|
+
);
|
|
258
|
+
console.log(blended); // Blended color
|
|
259
|
+
|
|
260
|
+
// Different blend modes
|
|
261
|
+
const multiply = blendInHct([255, 0, 0], [0, 255, 0], 'multiply', 0.5);
|
|
262
|
+
const screen = blendInHct([255, 0, 0], [0, 255, 0], 'screen', 0.5);
|
|
263
|
+
const softLight = blendInHct([255, 0, 0], [0, 255, 0], 'softLight', 0.5);
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
### extractColorFromImage(image: HTMLImageElement)
|
|
267
|
+
|
|
268
|
+
Extract dominant color from a loaded image element.
|
|
269
|
+
|
|
270
|
+
**Parameters:**
|
|
271
|
+
- `image`: HTMLImageElement - Loaded image element
|
|
272
|
+
|
|
273
|
+
**Returns:**
|
|
274
|
+
- `Promise<string>` - Extracted dominant color (hex format)
|
|
275
|
+
|
|
276
|
+
```js
|
|
277
|
+
const image = document.getElementById('myImage');
|
|
278
|
+
extractColorFromImage(image).then(color => {
|
|
279
|
+
console.log('Extracted color:', color);
|
|
280
|
+
// Generate palette from extracted color
|
|
281
|
+
const palette = generate(color, { list: true });
|
|
282
|
+
});
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
### extractColorFromFile(file: File)
|
|
286
|
+
|
|
287
|
+
Read image from file object and extract dominant color.
|
|
288
|
+
|
|
289
|
+
**Parameters:**
|
|
290
|
+
- `file`: File - Image file object
|
|
291
|
+
|
|
292
|
+
**Returns:**
|
|
293
|
+
- `Promise<string>` - Extracted dominant color (hex format)
|
|
294
|
+
|
|
295
|
+
```js
|
|
296
|
+
// Use in file input event
|
|
297
|
+
document.getElementById('fileInput').addEventListener('change', (event) => {
|
|
298
|
+
const file = event.target.files[0];
|
|
299
|
+
if (file) {
|
|
300
|
+
extractColorFromFile(file).then(color => {
|
|
301
|
+
console.log('Extracted color:', color);
|
|
302
|
+
});
|
|
303
|
+
}
|
|
304
|
+
});
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
## Version History
|
|
308
|
+
|
|
309
|
+
### v0.2.0 (Latest)
|
|
310
|
+
- ✨ Added interface color system functionality
|
|
311
|
+
- ✨ Added HCT color space-based theme blending
|
|
312
|
+
- 📚 Enhanced API documentation and examples
|
|
313
|
+
- 🔧 Optimized code structure and performance
|
|
314
|
+
|
|
315
|
+
### v0.1.1
|
|
316
|
+
- 🐛 Fixed edge cases in color palette generation
|
|
317
|
+
- 📚 Updated documentation and examples
|
|
318
|
+
|
|
319
|
+
### v0.1.0
|
|
320
|
+
- 🎉 Initial release
|
|
321
|
+
- ✨ Color palette generation
|
|
322
|
+
- ✨ Image color extraction
|