@kurkle/color 0.4.0 → 0.5.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/color.esm.js CHANGED
@@ -1,13 +1,15 @@
1
1
  /*!
2
- * @kurkle/color v0.4.0
2
+ * @kurkle/color v0.0.0-development
3
3
  * https://github.com/kurkle/color#readme
4
- * (c) 2025 Jukka Kurkela
4
+ * (c) 2026 Jukka Kurkela
5
5
  * Released under the MIT License
6
6
  */
7
+
8
+ // src/byte.ts
7
9
  function round(v) {
8
10
  return v + 0.5 | 0;
9
11
  }
10
- const lim = (v, l, h) => Math.max(Math.min(v, h), l);
12
+ var lim = (v, l, h) => Math.max(Math.min(v, h), l);
11
13
  function p2b(v) {
12
14
  return lim(round(v * 2.55), 0, 255);
13
15
  }
@@ -24,43 +26,66 @@ function n2p(v) {
24
26
  return lim(round(v * 100), 0, 100);
25
27
  }
26
28
 
27
- const map$1 = {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, A: 10, B: 11, C: 12, D: 13, E: 14, F: 15, a: 10, b: 11, c: 12, d: 13, e: 14, f: 15};
28
- const hex = [...'0123456789ABCDEF'];
29
- const h1 = b => hex[b & 0xF];
30
- const h2 = b => hex[(b & 0xF0) >> 4] + hex[b & 0xF];
31
- const eq = b => ((b & 0xF0) >> 4) === (b & 0xF);
32
- const isShort = v => eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a);
29
+ // src/hex.ts
30
+ var map = {
31
+ 0: 0,
32
+ 1: 1,
33
+ 2: 2,
34
+ 3: 3,
35
+ 4: 4,
36
+ 5: 5,
37
+ 6: 6,
38
+ 7: 7,
39
+ 8: 8,
40
+ 9: 9,
41
+ A: 10,
42
+ a: 10,
43
+ B: 11,
44
+ b: 11,
45
+ C: 12,
46
+ c: 12,
47
+ D: 13,
48
+ d: 13,
49
+ E: 14,
50
+ e: 14,
51
+ F: 15,
52
+ f: 15
53
+ };
54
+ var hex = [..."0123456789ABCDEF"];
55
+ var h1 = (b) => hex[b & 15];
56
+ var h2 = (b) => hex[(b & 240) >> 4] + hex[b & 15];
57
+ var eq = (b) => (b & 240) >> 4 === (b & 15);
58
+ var isShort = (v) => eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a);
33
59
  function hexParse(str) {
34
- var len = str.length;
35
- var ret;
36
- if (str[0] === '#') {
37
- if (len === 4 || len === 5) {
38
- ret = {
39
- r: 255 & map$1[str[1]] * 17,
40
- g: 255 & map$1[str[2]] * 17,
41
- b: 255 & map$1[str[3]] * 17,
42
- a: len === 5 ? map$1[str[4]] * 17 : 255
43
- };
44
- } else if (len === 7 || len === 9) {
45
- ret = {
46
- r: map$1[str[1]] << 4 | map$1[str[2]],
47
- g: map$1[str[3]] << 4 | map$1[str[4]],
48
- b: map$1[str[5]] << 4 | map$1[str[6]],
49
- a: len === 9 ? (map$1[str[7]] << 4 | map$1[str[8]]) : 255
50
- };
51
- }
60
+ if (str[0] !== "#") {
61
+ return;
52
62
  }
53
- return ret;
54
- }
55
- const alpha = (a, f) => a < 255 ? f(a) : '';
63
+ const len = str.length;
64
+ if (len === 4 || len === 5) {
65
+ return {
66
+ a: len === 5 ? map[str[4]] << 4 | map[str[4]] : 255,
67
+ b: map[str[3]] << 4 | map[str[3]],
68
+ g: map[str[2]] << 4 | map[str[2]],
69
+ r: map[str[1]] << 4 | map[str[1]]
70
+ };
71
+ }
72
+ if (len === 7 || len === 9) {
73
+ return {
74
+ a: len === 9 ? map[str[7]] << 4 | map[str[8]] : 255,
75
+ b: map[str[5]] << 4 | map[str[6]],
76
+ g: map[str[3]] << 4 | map[str[4]],
77
+ r: map[str[1]] << 4 | map[str[2]]
78
+ };
79
+ }
80
+ }
81
+ var alpha = (a, f) => a < 255 ? f(a) : "";
56
82
  function hexString(v) {
57
- var f = isShort(v) ? h1 : h2;
58
- return v
59
- ? '#' + f(v.r) + f(v.g) + f(v.b) + alpha(v.a, f)
60
- : undefined;
83
+ const f = v && isShort(v) ? h1 : h2;
84
+ return v ? `#${f(v.r)}${f(v.g)}${f(v.b)}${alpha(v.a, f)}` : void 0;
61
85
  }
62
86
 
63
- const HUE_RE = /^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;
87
+ // src/hue.ts
88
+ var HUE_RE = /^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;
64
89
  function hsl2rgbn(h, s, l) {
65
90
  const a = s * Math.min(l, 1 - l);
66
91
  const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);
@@ -86,7 +111,7 @@ function hwb2rgbn(h, w, b) {
86
111
  }
87
112
  function hueValue(r, g, b, d, max) {
88
113
  if (r === max) {
89
- return ((g - b) / d) + (g < b ? 6 : 0);
114
+ return (g - b) / d + (g < b ? 6 : 0);
90
115
  }
91
116
  if (g === max) {
92
117
  return (b - r) / d + 2;
@@ -101,7 +126,9 @@ function rgb2hsl(v) {
101
126
  const max = Math.max(r, g, b);
102
127
  const min = Math.min(r, g, b);
103
128
  const l = (max + min) / 2;
104
- let h, s, d;
129
+ let h = 0;
130
+ let s = 0;
131
+ let d;
105
132
  if (max !== min) {
106
133
  d = max - min;
107
134
  s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
@@ -111,11 +138,7 @@ function rgb2hsl(v) {
111
138
  return [h | 0, s || 0, l];
112
139
  }
113
140
  function calln(f, a, b, c) {
114
- return (
115
- Array.isArray(a)
116
- ? f(a[0], a[1], a[2])
117
- : f(a, b, c)
118
- ).map(n2b);
141
+ return (Array.isArray(a) ? f(a[0], a[1], a[2]) : f(a, b, c)).map(n2b);
119
142
  }
120
143
  function hsl2rgb(h, s, l) {
121
144
  return calln(hsl2rgbn, h, s, l);
@@ -134,269 +157,270 @@ function hueParse(str) {
134
157
  let a = 255;
135
158
  let v;
136
159
  if (!m) {
137
- return;
160
+ return void 0;
138
161
  }
139
- if (m[5] !== v) {
162
+ if (m[5] !== void 0) {
140
163
  a = m[6] ? p2b(+m[5]) : n2b(+m[5]);
141
164
  }
142
165
  const h = hue(+m[2]);
143
166
  const p1 = +m[3] / 100;
144
167
  const p2 = +m[4] / 100;
145
- if (m[1] === 'hwb') {
168
+ if (m[1] === "hwb") {
146
169
  v = hwb2rgb(h, p1, p2);
147
- } else if (m[1] === 'hsv') {
170
+ } else if (m[1] === "hsv") {
148
171
  v = hsv2rgb(h, p1, p2);
149
172
  } else {
150
173
  v = hsl2rgb(h, p1, p2);
151
174
  }
152
175
  return {
153
- r: v[0],
154
- g: v[1],
176
+ a,
155
177
  b: v[2],
156
- a: a
178
+ g: v[1],
179
+ r: v[0]
157
180
  };
158
181
  }
159
182
  function rotate(v, deg) {
160
- var h = rgb2hsl(v);
183
+ const h = rgb2hsl(v);
161
184
  h[0] = hue(h[0] + deg);
162
- h = hsl2rgb(h);
163
- v.r = h[0];
164
- v.g = h[1];
165
- v.b = h[2];
185
+ const rgb = hsl2rgb(h);
186
+ v.r = rgb[0];
187
+ v.g = rgb[1];
188
+ v.b = rgb[2];
166
189
  }
167
190
  function hslString(v) {
168
191
  if (!v) {
169
- return;
192
+ return void 0;
170
193
  }
171
194
  const a = rgb2hsl(v);
172
195
  const h = a[0];
173
196
  const s = n2p(a[1]);
174
197
  const l = n2p(a[2]);
175
- return v.a < 255
176
- ? `hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})`
177
- : `hsl(${h}, ${s}%, ${l}%)`;
198
+ return v.a < 255 ? `hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})` : `hsl(${h}, ${s}%, ${l}%)`;
178
199
  }
179
200
 
180
- const map = {
181
- x: 'dark',
182
- Z: 'light',
183
- Y: 're',
184
- X: 'blu',
185
- W: 'gr',
186
- V: 'medium',
187
- U: 'slate',
188
- A: 'ee',
189
- T: 'ol',
190
- S: 'or',
191
- B: 'ra',
192
- C: 'lateg',
193
- D: 'ights',
194
- R: 'in',
195
- Q: 'turquois',
196
- E: 'hi',
197
- P: 'ro',
198
- O: 'al',
199
- N: 'le',
200
- M: 'de',
201
- L: 'yello',
202
- F: 'en',
203
- K: 'ch',
204
- G: 'arks',
205
- H: 'ea',
206
- I: 'ightg',
207
- J: 'wh'
201
+ // src/packed.ts
202
+ var map2 = {
203
+ x: "dark",
204
+ Z: "light",
205
+ Y: "re",
206
+ X: "blu",
207
+ W: "gr",
208
+ V: "medium",
209
+ U: "slate",
210
+ A: "ee",
211
+ T: "ol",
212
+ S: "or",
213
+ B: "ra",
214
+ C: "lateg",
215
+ D: "ights",
216
+ R: "in",
217
+ Q: "turquois",
218
+ E: "hi",
219
+ P: "ro",
220
+ O: "al",
221
+ N: "le",
222
+ M: "de",
223
+ L: "yello",
224
+ F: "en",
225
+ K: "ch",
226
+ G: "arks",
227
+ H: "ea",
228
+ I: "ightg",
229
+ J: "wh"
208
230
  };
209
- const names$1 = {
210
- OiceXe: 'f0f8ff',
211
- antiquewEte: 'faebd7',
212
- aqua: 'ffff',
213
- aquamarRe: '7fffd4',
214
- azuY: 'f0ffff',
215
- beige: 'f5f5dc',
216
- bisque: 'ffe4c4',
217
- black: '0',
218
- blanKedOmond: 'ffebcd',
219
- Xe: 'ff',
220
- XeviTet: '8a2be2',
221
- bPwn: 'a52a2a',
222
- burlywood: 'deb887',
223
- caMtXe: '5f9ea0',
224
- KartYuse: '7fff00',
225
- KocTate: 'd2691e',
226
- cSO: 'ff7f50',
227
- cSnflowerXe: '6495ed',
228
- cSnsilk: 'fff8dc',
229
- crimson: 'dc143c',
230
- cyan: 'ffff',
231
- xXe: '8b',
232
- xcyan: '8b8b',
233
- xgTMnPd: 'b8860b',
234
- xWay: 'a9a9a9',
235
- xgYF: '6400',
236
- xgYy: 'a9a9a9',
237
- xkhaki: 'bdb76b',
238
- xmagFta: '8b008b',
239
- xTivegYF: '556b2f',
240
- xSange: 'ff8c00',
241
- xScEd: '9932cc',
242
- xYd: '8b0000',
243
- xsOmon: 'e9967a',
244
- xsHgYF: '8fbc8f',
245
- xUXe: '483d8b',
246
- xUWay: '2f4f4f',
247
- xUgYy: '2f4f4f',
248
- xQe: 'ced1',
249
- xviTet: '9400d3',
250
- dAppRk: 'ff1493',
251
- dApskyXe: 'bfff',
252
- dimWay: '696969',
253
- dimgYy: '696969',
254
- dodgerXe: '1e90ff',
255
- fiYbrick: 'b22222',
256
- flSOwEte: 'fffaf0',
257
- foYstWAn: '228b22',
258
- fuKsia: 'ff00ff',
259
- gaRsbSo: 'dcdcdc',
260
- ghostwEte: 'f8f8ff',
261
- gTd: 'ffd700',
262
- gTMnPd: 'daa520',
263
- Way: '808080',
264
- gYF: '8000',
265
- gYFLw: 'adff2f',
266
- gYy: '808080',
267
- honeyMw: 'f0fff0',
268
- hotpRk: 'ff69b4',
269
- RdianYd: 'cd5c5c',
270
- Rdigo: '4b0082',
271
- ivSy: 'fffff0',
272
- khaki: 'f0e68c',
273
- lavFMr: 'e6e6fa',
274
- lavFMrXsh: 'fff0f5',
275
- lawngYF: '7cfc00',
276
- NmoncEffon: 'fffacd',
277
- ZXe: 'add8e6',
278
- ZcSO: 'f08080',
279
- Zcyan: 'e0ffff',
280
- ZgTMnPdLw: 'fafad2',
281
- ZWay: 'd3d3d3',
282
- ZgYF: '90ee90',
283
- ZgYy: 'd3d3d3',
284
- ZpRk: 'ffb6c1',
285
- ZsOmon: 'ffa07a',
286
- ZsHgYF: '20b2aa',
287
- ZskyXe: '87cefa',
288
- ZUWay: '778899',
289
- ZUgYy: '778899',
290
- ZstAlXe: 'b0c4de',
291
- ZLw: 'ffffe0',
292
- lime: 'ff00',
293
- limegYF: '32cd32',
294
- lRF: 'faf0e6',
295
- magFta: 'ff00ff',
296
- maPon: '800000',
297
- VaquamarRe: '66cdaa',
298
- VXe: 'cd',
299
- VScEd: 'ba55d3',
300
- VpurpN: '9370db',
301
- VsHgYF: '3cb371',
302
- VUXe: '7b68ee',
303
- VsprRggYF: 'fa9a',
304
- VQe: '48d1cc',
305
- VviTetYd: 'c71585',
306
- midnightXe: '191970',
307
- mRtcYam: 'f5fffa',
308
- mistyPse: 'ffe4e1',
309
- moccasR: 'ffe4b5',
310
- navajowEte: 'ffdead',
311
- navy: '80',
312
- Tdlace: 'fdf5e6',
313
- Tive: '808000',
314
- TivedBb: '6b8e23',
315
- Sange: 'ffa500',
316
- SangeYd: 'ff4500',
317
- ScEd: 'da70d6',
318
- pOegTMnPd: 'eee8aa',
319
- pOegYF: '98fb98',
320
- pOeQe: 'afeeee',
321
- pOeviTetYd: 'db7093',
322
- papayawEp: 'ffefd5',
323
- pHKpuff: 'ffdab9',
324
- peru: 'cd853f',
325
- pRk: 'ffc0cb',
326
- plum: 'dda0dd',
327
- powMrXe: 'b0e0e6',
328
- purpN: '800080',
329
- YbeccapurpN: '663399',
330
- Yd: 'ff0000',
331
- Psybrown: 'bc8f8f',
332
- PyOXe: '4169e1',
333
- saddNbPwn: '8b4513',
334
- sOmon: 'fa8072',
335
- sandybPwn: 'f4a460',
336
- sHgYF: '2e8b57',
337
- sHshell: 'fff5ee',
338
- siFna: 'a0522d',
339
- silver: 'c0c0c0',
340
- skyXe: '87ceeb',
341
- UXe: '6a5acd',
342
- UWay: '708090',
343
- UgYy: '708090',
344
- snow: 'fffafa',
345
- sprRggYF: 'ff7f',
346
- stAlXe: '4682b4',
347
- tan: 'd2b48c',
348
- teO: '8080',
349
- tEstN: 'd8bfd8',
350
- tomato: 'ff6347',
351
- Qe: '40e0d0',
352
- viTet: 'ee82ee',
353
- JHt: 'f5deb3',
354
- wEte: 'ffffff',
355
- wEtesmoke: 'f5f5f5',
356
- Lw: 'ffff00',
357
- LwgYF: '9acd32'
231
+ var names = {
232
+ OiceXe: "f0f8ff",
233
+ antiquewEte: "faebd7",
234
+ aqua: "ffff",
235
+ aquamarRe: "7fffd4",
236
+ azuY: "f0ffff",
237
+ beige: "f5f5dc",
238
+ bisque: "ffe4c4",
239
+ black: "0",
240
+ blanKedOmond: "ffebcd",
241
+ Xe: "ff",
242
+ XeviTet: "8a2be2",
243
+ bPwn: "a52a2a",
244
+ burlywood: "deb887",
245
+ caMtXe: "5f9ea0",
246
+ KartYuse: "7fff00",
247
+ KocTate: "d2691e",
248
+ cSO: "ff7f50",
249
+ cSnflowerXe: "6495ed",
250
+ cSnsilk: "fff8dc",
251
+ crimson: "dc143c",
252
+ cyan: "ffff",
253
+ xXe: "8b",
254
+ xcyan: "8b8b",
255
+ xgTMnPd: "b8860b",
256
+ xWay: "a9a9a9",
257
+ xgYF: "6400",
258
+ xgYy: "a9a9a9",
259
+ xkhaki: "bdb76b",
260
+ xmagFta: "8b008b",
261
+ xTivegYF: "556b2f",
262
+ xSange: "ff8c00",
263
+ xScEd: "9932cc",
264
+ xYd: "8b0000",
265
+ xsOmon: "e9967a",
266
+ xsHgYF: "8fbc8f",
267
+ xUXe: "483d8b",
268
+ xUWay: "2f4f4f",
269
+ xUgYy: "2f4f4f",
270
+ xQe: "ced1",
271
+ xviTet: "9400d3",
272
+ dAppRk: "ff1493",
273
+ dApskyXe: "bfff",
274
+ dimWay: "696969",
275
+ dimgYy: "696969",
276
+ dodgerXe: "1e90ff",
277
+ fiYbrick: "b22222",
278
+ flSOwEte: "fffaf0",
279
+ foYstWAn: "228b22",
280
+ fuKsia: "ff00ff",
281
+ gaRsbSo: "dcdcdc",
282
+ ghostwEte: "f8f8ff",
283
+ gTd: "ffd700",
284
+ gTMnPd: "daa520",
285
+ Way: "808080",
286
+ gYF: "8000",
287
+ gYFLw: "adff2f",
288
+ gYy: "808080",
289
+ honeyMw: "f0fff0",
290
+ hotpRk: "ff69b4",
291
+ RdianYd: "cd5c5c",
292
+ Rdigo: "4b0082",
293
+ ivSy: "fffff0",
294
+ khaki: "f0e68c",
295
+ lavFMr: "e6e6fa",
296
+ lavFMrXsh: "fff0f5",
297
+ lawngYF: "7cfc00",
298
+ NmoncEffon: "fffacd",
299
+ ZXe: "add8e6",
300
+ ZcSO: "f08080",
301
+ Zcyan: "e0ffff",
302
+ ZgTMnPdLw: "fafad2",
303
+ ZWay: "d3d3d3",
304
+ ZgYF: "90ee90",
305
+ ZgYy: "d3d3d3",
306
+ ZpRk: "ffb6c1",
307
+ ZsOmon: "ffa07a",
308
+ ZsHgYF: "20b2aa",
309
+ ZskyXe: "87cefa",
310
+ ZUWay: "778899",
311
+ ZUgYy: "778899",
312
+ ZstAlXe: "b0c4de",
313
+ ZLw: "ffffe0",
314
+ lime: "ff00",
315
+ limegYF: "32cd32",
316
+ lRF: "faf0e6",
317
+ magFta: "ff00ff",
318
+ maPon: "800000",
319
+ VaquamarRe: "66cdaa",
320
+ VXe: "cd",
321
+ VScEd: "ba55d3",
322
+ VpurpN: "9370db",
323
+ VsHgYF: "3cb371",
324
+ VUXe: "7b68ee",
325
+ VsprRggYF: "fa9a",
326
+ VQe: "48d1cc",
327
+ VviTetYd: "c71585",
328
+ midnightXe: "191970",
329
+ mRtcYam: "f5fffa",
330
+ mistyPse: "ffe4e1",
331
+ moccasR: "ffe4b5",
332
+ navajowEte: "ffdead",
333
+ navy: "80",
334
+ Tdlace: "fdf5e6",
335
+ Tive: "808000",
336
+ TivedBb: "6b8e23",
337
+ Sange: "ffa500",
338
+ SangeYd: "ff4500",
339
+ ScEd: "da70d6",
340
+ pOegTMnPd: "eee8aa",
341
+ pOegYF: "98fb98",
342
+ pOeQe: "afeeee",
343
+ pOeviTetYd: "db7093",
344
+ papayawEp: "ffefd5",
345
+ pHKpuff: "ffdab9",
346
+ peru: "cd853f",
347
+ pRk: "ffc0cb",
348
+ plum: "dda0dd",
349
+ powMrXe: "b0e0e6",
350
+ purpN: "800080",
351
+ YbeccapurpN: "663399",
352
+ Yd: "ff0000",
353
+ Psybrown: "bc8f8f",
354
+ PyOXe: "4169e1",
355
+ saddNbPwn: "8b4513",
356
+ sOmon: "fa8072",
357
+ sandybPwn: "f4a460",
358
+ sHgYF: "2e8b57",
359
+ sHshell: "fff5ee",
360
+ siFna: "a0522d",
361
+ silver: "c0c0c0",
362
+ skyXe: "87ceeb",
363
+ UXe: "6a5acd",
364
+ UWay: "708090",
365
+ UgYy: "708090",
366
+ snow: "fffafa",
367
+ sprRggYF: "ff7f",
368
+ stAlXe: "4682b4",
369
+ tan: "d2b48c",
370
+ teO: "8080",
371
+ tEstN: "d8bfd8",
372
+ tomato: "ff6347",
373
+ Qe: "40e0d0",
374
+ viTet: "ee82ee",
375
+ JHt: "f5deb3",
376
+ wEte: "ffffff",
377
+ wEtesmoke: "f5f5f5",
378
+ Lw: "ffff00",
379
+ LwgYF: "9acd32"
358
380
  };
359
381
  function unpack() {
360
382
  const unpacked = {};
361
- const keys = Object.keys(names$1);
362
- const tkeys = Object.keys(map);
383
+ const keys = Object.keys(names);
384
+ const tkeys = Object.keys(map2);
363
385
  let i, j, k, ok, nk;
364
386
  for (i = 0; i < keys.length; i++) {
365
387
  ok = nk = keys[i];
366
388
  for (j = 0; j < tkeys.length; j++) {
367
389
  k = tkeys[j];
368
- nk = nk.replace(k, map[k]);
390
+ nk = nk.replace(k, map2[k]);
369
391
  }
370
- k = parseInt(names$1[ok], 16);
371
- unpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF];
392
+ k = parseInt(names[ok], 16);
393
+ unpacked[nk] = [k >> 16 & 255, k >> 8 & 255, k & 255];
372
394
  }
373
395
  return unpacked;
374
396
  }
375
397
 
376
- let names;
398
+ // src/names.ts
399
+ var names2;
377
400
  function nameParse(str) {
378
- if (!names) {
379
- names = unpack();
380
- names.transparent = [0, 0, 0, 0];
401
+ if (!names2) {
402
+ names2 = unpack();
403
+ names2.transparent = [0, 0, 0, 0];
381
404
  }
382
- const a = names[str.toLowerCase()];
405
+ const a = names2[str.toLowerCase()];
383
406
  return a && {
384
- r: a[0],
385
- g: a[1],
407
+ a: a.length === 4 ? a[3] : 255,
386
408
  b: a[2],
387
- a: a.length === 4 ? a[3] : 255
409
+ g: a[1],
410
+ r: a[0]
388
411
  };
389
412
  }
390
413
 
391
- const RGB_RE = /^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/;
414
+ // src/rgb.ts
415
+ var RGB_RE = /^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/;
392
416
  function rgbParse(str) {
393
417
  const m = RGB_RE.exec(str);
394
418
  let a = 255;
395
419
  let r, g, b;
396
420
  if (!m) {
397
- return;
421
+ return void 0;
398
422
  }
399
- if (m[7] !== r) {
423
+ if (m[7] !== void 0) {
400
424
  const v = +m[7];
401
425
  a = m[8] ? p2b(v) : lim(v * 255, 0, 255);
402
426
  }
@@ -407,35 +431,33 @@ function rgbParse(str) {
407
431
  g = 255 & (m[4] ? p2b(g) : lim(g, 0, 255));
408
432
  b = 255 & (m[6] ? p2b(b) : lim(b, 0, 255));
409
433
  return {
410
- r: r,
411
- g: g,
412
- b: b,
413
- a: a
434
+ a,
435
+ b,
436
+ g,
437
+ r
414
438
  };
415
439
  }
416
440
  function rgbString(v) {
417
- return v && (
418
- v.a < 255
419
- ? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})`
420
- : `rgb(${v.r}, ${v.g}, ${v.b})`
421
- );
441
+ return v && (v.a < 255 ? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})` : `rgb(${v.r}, ${v.g}, ${v.b})`);
422
442
  }
423
443
 
424
- const to = v => v <= 0.0031308 ? v * 12.92 : Math.pow(v, 1.0 / 2.4) * 1.055 - 0.055;
425
- const from = v => v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);
444
+ // src/srgb.ts
445
+ var to = (v) => v <= 31308e-7 ? v * 12.92 : v ** (1 / 2.4) * 1.055 - 0.055;
446
+ var from = (v) => v <= 0.04045 ? v / 12.92 : ((v + 0.055) / 1.055) ** 2.4;
426
447
  function interpolate(rgb1, rgb2, t) {
427
448
  const r = from(b2n(rgb1.r));
428
449
  const g = from(b2n(rgb1.g));
429
450
  const b = from(b2n(rgb1.b));
430
451
  return {
431
- r: n2b(to(r + t * (from(b2n(rgb2.r)) - r))),
432
- g: n2b(to(g + t * (from(b2n(rgb2.g)) - g))),
452
+ a: rgb1.a + t * (rgb2.a - rgb1.a),
433
453
  b: n2b(to(b + t * (from(b2n(rgb2.b)) - b))),
434
- a: rgb1.a + t * (rgb2.a - rgb1.a)
454
+ g: n2b(to(g + t * (from(b2n(rgb2.g)) - g))),
455
+ r: n2b(to(r + t * (from(b2n(rgb2.r)) - r)))
435
456
  };
436
457
  }
437
458
 
438
- const COMMENT_REGEXP = /\/\*[^]*?\*\//g;
459
+ // src/color.ts
460
+ var COMMENT_REGEXP = /\/\*[\s\S]*?\*\//g;
439
461
  function modHSL(v, i, ratio) {
440
462
  if (v) {
441
463
  let tmp = rgb2hsl(v);
@@ -450,111 +472,174 @@ function clone(v, proto) {
450
472
  return v ? Object.assign(proto || {}, v) : v;
451
473
  }
452
474
  function fromObject(input) {
453
- var v = {r: 0, g: 0, b: 0, a: 255};
475
+ let v = { a: 255, b: 0, g: 0, r: 0 };
454
476
  if (Array.isArray(input)) {
455
477
  if (input.length >= 3) {
456
- v = {r: input[0], g: input[1], b: input[2], a: 255};
478
+ v = { a: 255, b: input[2], g: input[1], r: input[0] };
457
479
  if (input.length > 3) {
458
480
  v.a = n2b(input[3]);
459
481
  }
460
482
  }
461
483
  } else {
462
- v = clone(input, {r: 0, g: 0, b: 0, a: 1});
484
+ v = clone(input, { a: 1, b: 0, g: 0, r: 0 });
463
485
  v.a = n2b(v.a);
464
486
  }
465
487
  return v;
466
488
  }
467
489
  function functionParse(str) {
468
- if (str.charAt(0) === 'r') {
469
- return rgbParse(str);
490
+ const clean = str.replace(COMMENT_REGEXP, "").trim();
491
+ if (clean.charAt(0) === "r") {
492
+ return rgbParse(clean);
470
493
  }
471
- return hueParse(str);
494
+ return hueParse(clean);
472
495
  }
473
- class Color {
496
+ var Color = class _Color {
497
+ /**
498
+ * constructor
499
+ * @param input
500
+ */
474
501
  constructor(input) {
475
- if (input instanceof Color) {
502
+ if (input instanceof _Color) {
476
503
  return input;
477
504
  }
478
505
  const type = typeof input;
479
506
  let v;
480
- if (type === 'object') {
507
+ if (type === "object") {
481
508
  v = fromObject(input);
482
- } else if (type === 'string') {
483
- const clean = input.replace(COMMENT_REGEXP, '');
484
- v = hexParse(clean) || nameParse(clean) || functionParse(clean);
509
+ } else if (type === "string") {
510
+ v = hexParse(input) || nameParse(input) || functionParse(input);
485
511
  }
486
512
  this._rgb = v;
487
513
  this._valid = !!v;
488
514
  }
515
+ /**
516
+ * `true` if this is a valid color
517
+ * @returns {boolean}
518
+ */
489
519
  get valid() {
490
520
  return this._valid;
491
521
  }
522
+ /**
523
+ * @returns {RGBA} - the color
524
+ */
492
525
  get rgb() {
493
- var v = clone(this._rgb);
526
+ const v = clone(this._rgb);
494
527
  if (v) {
495
528
  v.a = b2n(v.a);
496
529
  }
497
530
  return v;
498
531
  }
532
+ /**
533
+ * @param obj - the color
534
+ */
499
535
  set rgb(obj) {
500
536
  this._rgb = fromObject(obj);
501
537
  }
538
+ /**
539
+ * rgb(a) string
540
+ * @return {string|undefined}
541
+ */
502
542
  rgbString() {
503
- return this._valid ? rgbString(this._rgb) : undefined;
543
+ return this._valid ? rgbString(this._rgb) : void 0;
504
544
  }
545
+ /**
546
+ * hex string
547
+ * @return {string|undefined}
548
+ */
505
549
  hexString() {
506
- return this._valid ? hexString(this._rgb) : undefined;
550
+ return this._valid ? hexString(this._rgb) : void 0;
507
551
  }
552
+ /**
553
+ * hsl(a) string
554
+ * @return {string|undefined}
555
+ */
508
556
  hslString() {
509
- return this._valid ? hslString(this._rgb) : undefined;
510
- }
511
- mix(color, weight) {
557
+ return this._valid ? hslString(this._rgb) : void 0;
558
+ }
559
+ /**
560
+ * Mix another color to this color.
561
+ * @param color - Color to mix in
562
+ * @param weight - 0..1
563
+ * @returns {Color}
564
+ */
565
+ mix(color, weight = 0.5) {
512
566
  if (color) {
513
567
  const c1 = this.rgb;
514
568
  const c2 = color.rgb;
515
- let w2;
516
- const p = weight === w2 ? 0.5 : weight;
517
- const w = 2 * p - 1;
569
+ const w = 2 * weight - 1;
518
570
  const a = c1.a - c2.a;
519
- const w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;
520
- w2 = 1 - w1;
521
- c1.r = 0xFF & w1 * c1.r + w2 * c2.r + 0.5;
522
- c1.g = 0xFF & w1 * c1.g + w2 * c2.g + 0.5;
523
- c1.b = 0xFF & w1 * c1.b + w2 * c2.b + 0.5;
524
- c1.a = p * c1.a + (1 - p) * c2.a;
571
+ const w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2;
572
+ const w2 = 1 - w1;
573
+ c1.r = 255 & w1 * c1.r + w2 * c2.r + 0.5;
574
+ c1.g = 255 & w1 * c1.g + w2 * c2.g + 0.5;
575
+ c1.b = 255 & w1 * c1.b + w2 * c2.b + 0.5;
576
+ c1.a = weight * c1.a + (1 - weight) * c2.a;
525
577
  this.rgb = c1;
526
578
  }
527
579
  return this;
528
580
  }
581
+ /**
582
+ * Interpolate a color value between this and `color`
583
+ * @param color
584
+ * @param t - 0..1
585
+ * @returns {Color}
586
+ */
529
587
  interpolate(color, t) {
530
588
  if (color) {
531
589
  this._rgb = interpolate(this._rgb, color._rgb, t);
532
590
  }
533
591
  return this;
534
592
  }
593
+ /**
594
+ * Clone
595
+ * @returns {Color}
596
+ */
535
597
  clone() {
536
- return new Color(this.rgb);
598
+ return new _Color(this.rgb);
537
599
  }
600
+ /**
601
+ * Set alpha
602
+ * @param a - the alpha [0..1]
603
+ * @returns {Color}
604
+ */
538
605
  alpha(a) {
539
606
  this._rgb.a = n2b(a);
540
607
  return this;
541
608
  }
609
+ /**
610
+ * Make clearer
611
+ * @param ratio - ratio [0..1]
612
+ * @returns {Color}
613
+ */
542
614
  clearer(ratio) {
543
615
  const rgb = this._rgb;
544
616
  rgb.a *= 1 - ratio;
545
617
  return this;
546
618
  }
619
+ /**
620
+ * Convert to grayscale
621
+ * @returns {Color}
622
+ */
547
623
  greyscale() {
548
624
  const rgb = this._rgb;
549
625
  const val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11);
550
626
  rgb.r = rgb.g = rgb.b = val;
551
627
  return this;
552
628
  }
629
+ /**
630
+ * Opaquer
631
+ * @param ratio - ratio [0..1]
632
+ * @returns {Color}
633
+ */
553
634
  opaquer(ratio) {
554
635
  const rgb = this._rgb;
555
636
  rgb.a *= 1 + ratio;
556
637
  return this;
557
638
  }
639
+ /**
640
+ * Negates the rgb value
641
+ * @returns {Color}
642
+ */
558
643
  negate() {
559
644
  const v = this._rgb;
560
645
  v.r = 255 - v.r;
@@ -562,30 +647,79 @@ class Color {
562
647
  v.b = 255 - v.b;
563
648
  return this;
564
649
  }
650
+ /**
651
+ * Lighten
652
+ * @param ratio - ratio [0..1]
653
+ * @returns {Color}
654
+ */
565
655
  lighten(ratio) {
566
656
  modHSL(this._rgb, 2, ratio);
567
657
  return this;
568
658
  }
659
+ /**
660
+ * Darken
661
+ * @param ratio - ratio [0..1]
662
+ * @returns {Color}
663
+ */
569
664
  darken(ratio) {
570
665
  modHSL(this._rgb, 2, -ratio);
571
666
  return this;
572
667
  }
668
+ /**
669
+ * Saturate
670
+ * @param ratio - ratio [0..1]
671
+ * @returns {Color}
672
+ */
573
673
  saturate(ratio) {
574
674
  modHSL(this._rgb, 1, ratio);
575
675
  return this;
576
676
  }
677
+ /**
678
+ * Desaturate
679
+ * @param ratio - ratio [0..1]
680
+ * @returns {Color}
681
+ */
577
682
  desaturate(ratio) {
578
683
  modHSL(this._rgb, 1, -ratio);
579
684
  return this;
580
685
  }
686
+ /**
687
+ * Rotate
688
+ * @param deg - degrees to rotate
689
+ * @returns {Color}
690
+ */
581
691
  rotate(deg) {
582
692
  rotate(this._rgb, deg);
583
693
  return this;
584
694
  }
585
- }
695
+ };
586
696
 
587
- function index_esm(input) {
697
+ // src/index.esm.ts
698
+ function index_esm_default(input) {
588
699
  return new Color(input);
589
700
  }
590
-
591
- export { Color, b2n, b2p, index_esm as default, hexParse, hexString, hsl2rgb, hslString, hsv2rgb, hueParse, hwb2rgb, lim, n2b, n2p, nameParse, p2b, rgb2hsl, rgbParse, rgbString, rotate, round };
701
+ export {
702
+ Color,
703
+ b2n,
704
+ b2p,
705
+ index_esm_default as default,
706
+ hexParse,
707
+ hexString,
708
+ hsl2rgb,
709
+ hslString,
710
+ hsv2rgb,
711
+ hueParse,
712
+ hwb2rgb,
713
+ interpolate,
714
+ lim,
715
+ n2b,
716
+ n2p,
717
+ nameParse,
718
+ p2b,
719
+ rgb2hsl,
720
+ rgbParse,
721
+ rgbString,
722
+ rotate,
723
+ round
724
+ };
725
+ //# sourceMappingURL=color.esm.js.map