@996-design/996-fast-color 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.
@@ -0,0 +1,571 @@
1
+ import presetColors from "./presetColors";
2
+ const round = Math.round;
3
+
4
+ /**
5
+ * Support format, alpha unit will check the % mark:
6
+ * - rgba(102, 204, 255, .5) -> [102, 204, 255, 0.5]
7
+ * - rgb(102 204 255 / .5) -> [102, 204, 255, 0.5]
8
+ * - rgb(100%, 50%, 0% / 50%) -> [255, 128, 0, 0.5]
9
+ * - hsl(270, 60, 40, .5) -> [270, 60, 40, 0.5]
10
+ * - hsl(270deg 60% 40% / 50%) -> [270, 60, 40, 0.5]
11
+ *
12
+ * When `base` is provided, the percentage value will be divided by `base`.
13
+ */
14
+ function splitColorStr(str, parseNum) {
15
+ const match = str
16
+ // Remove str before `(`
17
+ .replace(/^[^(]*\((.*)/, '$1')
18
+ // Remove str after `)`
19
+ .replace(/\).*/, '').match(/\d*\.?\d+%?/g) || [];
20
+ const numList = match.map(item => parseFloat(item));
21
+ for (let i = 0; i < 3; i += 1) {
22
+ numList[i] = parseNum(numList[i] || 0, match[i] || '', i);
23
+ }
24
+
25
+ // For alpha. 50% should be 0.5
26
+ if (match[3]) {
27
+ numList[3] = match[3].includes('%') ? numList[3] / 100 : numList[3];
28
+ } else {
29
+ // By default, alpha is 1
30
+ numList[3] = 1;
31
+ }
32
+ return numList;
33
+ }
34
+ const parseHSVorHSL = (num, _, index) => index === 0 ? num : num / 100;
35
+
36
+ /** round and limit number to integer between 0-255 */
37
+ function limitRange(value, max) {
38
+ const mergedMax = max || 255;
39
+ if (value > mergedMax) {
40
+ return mergedMax;
41
+ }
42
+ if (value < 0) {
43
+ return 0;
44
+ }
45
+ return value;
46
+ }
47
+ export class FastColor {
48
+ /**
49
+ * All FastColor objects are valid. So isValid is always true. This property is kept to be compatible with TinyColor.
50
+ */
51
+ isValid = true;
52
+
53
+ /**
54
+ * Red, R in RGB
55
+ */
56
+ r = 0;
57
+
58
+ /**
59
+ * Green, G in RGB
60
+ */
61
+ g = 0;
62
+
63
+ /**
64
+ * Blue, B in RGB
65
+ */
66
+ b = 0;
67
+
68
+ /**
69
+ * Alpha/Opacity, A in RGBA/HSLA
70
+ */
71
+ a = 1;
72
+
73
+ // HSV privates
74
+ _h;
75
+ _hsl_s;
76
+ _hsv_s;
77
+ _l;
78
+ _v;
79
+
80
+ // intermediate variables to calculate HSL/HSV
81
+ _max;
82
+ _min;
83
+ _brightness;
84
+ constructor(input) {
85
+ /**
86
+ * Always check 3 char in the object to determine the format.
87
+ * We not use function in check to save bundle size.
88
+ * e.g. 'rgb' -> { r: 0, g: 0, b: 0 }.
89
+ */
90
+ function matchFormat(str) {
91
+ return str[0] in input && str[1] in input && str[2] in input;
92
+ }
93
+ if (!input) {
94
+ // Do nothing since already initialized
95
+ } else if (typeof input === 'string') {
96
+ const trimStr = input.trim();
97
+ function matchPrefix(prefix) {
98
+ return trimStr.startsWith(prefix);
99
+ }
100
+ if (/^#?[A-F\d]{3,8}$/i.test(trimStr)) {
101
+ this.fromHexString(trimStr);
102
+ } else if (matchPrefix('rgb')) {
103
+ this.fromRgbString(trimStr);
104
+ } else if (matchPrefix('hsl')) {
105
+ this.fromHslString(trimStr);
106
+ } else if (matchPrefix('hsv') || matchPrefix('hsb')) {
107
+ this.fromHsvString(trimStr);
108
+ } else {
109
+ // From preset color
110
+ const presetColor = presetColors[trimStr.toLowerCase()];
111
+ if (presetColor) {
112
+ this.fromHexString(
113
+ // Convert 36 hex to 16 hex
114
+ parseInt(presetColor, 36).toString(16).padStart(6, '0'));
115
+ }
116
+ }
117
+ } else if (input instanceof FastColor) {
118
+ this.r = input.r;
119
+ this.g = input.g;
120
+ this.b = input.b;
121
+ this.a = input.a;
122
+ this._h = input._h;
123
+ this._hsl_s = input._hsl_s;
124
+ this._hsv_s = input._hsv_s;
125
+ this._l = input._l;
126
+ this._v = input._v;
127
+ } else if (matchFormat('rgb')) {
128
+ this.r = limitRange(input.r);
129
+ this.g = limitRange(input.g);
130
+ this.b = limitRange(input.b);
131
+ this.a = typeof input.a === 'number' ? limitRange(input.a, 1) : 1;
132
+ } else if (matchFormat('hsl')) {
133
+ this.fromHsl(input);
134
+ } else if (matchFormat('hsv')) {
135
+ this.fromHsv(input);
136
+ } else {
137
+ throw new Error('@996-design/996-fast-color: unsupported input ' + JSON.stringify(input));
138
+ }
139
+ }
140
+
141
+ // ======================= Setter =======================
142
+
143
+ setR(value) {
144
+ return this._sc('r', value);
145
+ }
146
+ setG(value) {
147
+ return this._sc('g', value);
148
+ }
149
+ setB(value) {
150
+ return this._sc('b', value);
151
+ }
152
+ setA(value) {
153
+ return this._sc('a', value, 1);
154
+ }
155
+ setHue(value) {
156
+ const hsv = this.toHsv();
157
+ hsv.h = value;
158
+ return this._c(hsv);
159
+ }
160
+
161
+ // ======================= Getter =======================
162
+ /**
163
+ * Returns the perceived luminance of a color, from 0-1.
164
+ * @see http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef
165
+ */
166
+ getLuminance() {
167
+ function adjustGamma(raw) {
168
+ const val = raw / 255;
169
+ return val <= 0.03928 ? val / 12.92 : Math.pow((val + 0.055) / 1.055, 2.4);
170
+ }
171
+ const R = adjustGamma(this.r);
172
+ const G = adjustGamma(this.g);
173
+ const B = adjustGamma(this.b);
174
+ return 0.2126 * R + 0.7152 * G + 0.0722 * B;
175
+ }
176
+ getHue() {
177
+ if (typeof this._h === 'undefined') {
178
+ const delta = this.getMax() - this.getMin();
179
+ if (delta === 0) {
180
+ this._h = 0;
181
+ } else {
182
+ this._h = round(60 * (this.r === this.getMax() ? (this.g - this.b) / delta + (this.g < this.b ? 6 : 0) : this.g === this.getMax() ? (this.b - this.r) / delta + 2 : (this.r - this.g) / delta + 4));
183
+ }
184
+ }
185
+ return this._h;
186
+ }
187
+
188
+ /**
189
+ * @deprecated should use getHSVSaturation or getHSLSaturation instead
190
+ */
191
+ getSaturation() {
192
+ return this.getHSVSaturation();
193
+ }
194
+ getHSVSaturation() {
195
+ if (typeof this._hsv_s === 'undefined') {
196
+ const delta = this.getMax() - this.getMin();
197
+ if (delta === 0) {
198
+ this._hsv_s = 0;
199
+ } else {
200
+ this._hsv_s = delta / this.getMax();
201
+ }
202
+ }
203
+ return this._hsv_s;
204
+ }
205
+ getHSLSaturation() {
206
+ if (typeof this._hsl_s === 'undefined') {
207
+ const delta = this.getMax() - this.getMin();
208
+ if (delta === 0) {
209
+ this._hsl_s = 0;
210
+ } else {
211
+ const l = this.getLightness();
212
+ this._hsl_s = delta / 255 / (1 - Math.abs(2 * l - 1));
213
+ }
214
+ }
215
+ return this._hsl_s;
216
+ }
217
+ getLightness() {
218
+ if (typeof this._l === 'undefined') {
219
+ this._l = (this.getMax() + this.getMin()) / 510;
220
+ }
221
+ return this._l;
222
+ }
223
+ getValue() {
224
+ if (typeof this._v === 'undefined') {
225
+ this._v = this.getMax() / 255;
226
+ }
227
+ return this._v;
228
+ }
229
+
230
+ /**
231
+ * Returns the perceived brightness of the color, from 0-255.
232
+ * Note: this is not the b of HSB
233
+ * @see http://www.w3.org/TR/AERT#color-contrast
234
+ */
235
+ getBrightness() {
236
+ if (typeof this._brightness === 'undefined') {
237
+ this._brightness = (this.r * 299 + this.g * 587 + this.b * 114) / 1000;
238
+ }
239
+ return this._brightness;
240
+ }
241
+
242
+ // ======================== Func ========================
243
+
244
+ darken(amount = 10) {
245
+ const h = this.getHue();
246
+ const s = this.getSaturation();
247
+ let l = this.getLightness() - amount / 100;
248
+ if (l < 0) {
249
+ l = 0;
250
+ }
251
+ return this._c({
252
+ h,
253
+ s,
254
+ l,
255
+ a: this.a
256
+ });
257
+ }
258
+ lighten(amount = 10) {
259
+ const h = this.getHue();
260
+ const s = this.getSaturation();
261
+ let l = this.getLightness() + amount / 100;
262
+ if (l > 1) {
263
+ l = 1;
264
+ }
265
+ return this._c({
266
+ h,
267
+ s,
268
+ l,
269
+ a: this.a
270
+ });
271
+ }
272
+
273
+ /**
274
+ * Mix the current color a given amount with another color, from 0 to 100.
275
+ * 0 means no mixing (return current color).
276
+ */
277
+ mix(input, amount = 50) {
278
+ const color = this._c(input);
279
+ const p = amount / 100;
280
+ const calc = key => (color[key] - this[key]) * p + this[key];
281
+ const rgba = {
282
+ r: round(calc('r')),
283
+ g: round(calc('g')),
284
+ b: round(calc('b')),
285
+ a: round(calc('a') * 100) / 100
286
+ };
287
+ return this._c(rgba);
288
+ }
289
+
290
+ /**
291
+ * Mix the color with pure white, from 0 to 100.
292
+ * Providing 0 will do nothing, providing 100 will always return white.
293
+ */
294
+ tint(amount = 10) {
295
+ return this.mix({
296
+ r: 255,
297
+ g: 255,
298
+ b: 255,
299
+ a: 1
300
+ }, amount);
301
+ }
302
+
303
+ /**
304
+ * Mix the color with pure black, from 0 to 100.
305
+ * Providing 0 will do nothing, providing 100 will always return black.
306
+ */
307
+ shade(amount = 10) {
308
+ return this.mix({
309
+ r: 0,
310
+ g: 0,
311
+ b: 0,
312
+ a: 1
313
+ }, amount);
314
+ }
315
+ onBackground(background) {
316
+ const bg = this._c(background);
317
+ const alpha = this.a + bg.a * (1 - this.a);
318
+ const calc = key => {
319
+ return round((this[key] * this.a + bg[key] * bg.a * (1 - this.a)) / alpha);
320
+ };
321
+ return this._c({
322
+ r: calc('r'),
323
+ g: calc('g'),
324
+ b: calc('b'),
325
+ a: alpha
326
+ });
327
+ }
328
+
329
+ // ======================= Status =======================
330
+ isDark() {
331
+ return this.getBrightness() < 128;
332
+ }
333
+ isLight() {
334
+ return this.getBrightness() >= 128;
335
+ }
336
+
337
+ // ======================== MISC ========================
338
+ equals(other) {
339
+ return this.r === other.r && this.g === other.g && this.b === other.b && this.a === other.a;
340
+ }
341
+ clone() {
342
+ return this._c(this);
343
+ }
344
+
345
+ // ======================= Format =======================
346
+ toHexString() {
347
+ let hex = '#';
348
+ const rHex = (this.r || 0).toString(16);
349
+ hex += rHex.length === 2 ? rHex : '0' + rHex;
350
+ const gHex = (this.g || 0).toString(16);
351
+ hex += gHex.length === 2 ? gHex : '0' + gHex;
352
+ const bHex = (this.b || 0).toString(16);
353
+ hex += bHex.length === 2 ? bHex : '0' + bHex;
354
+ if (typeof this.a === 'number' && this.a >= 0 && this.a < 1) {
355
+ const aHex = round(this.a * 255).toString(16);
356
+ hex += aHex.length === 2 ? aHex : '0' + aHex;
357
+ }
358
+ return hex;
359
+ }
360
+
361
+ /** CSS support color pattern */
362
+ toHsl() {
363
+ return {
364
+ h: this.getHue(),
365
+ s: this.getHSLSaturation(),
366
+ l: this.getLightness(),
367
+ a: this.a
368
+ };
369
+ }
370
+
371
+ /** CSS support color pattern */
372
+ toHslString() {
373
+ const h = this.getHue();
374
+ const s = round(this.getHSLSaturation() * 100);
375
+ const l = round(this.getLightness() * 100);
376
+ return this.a !== 1 ? `hsla(${h},${s}%,${l}%,${this.a})` : `hsl(${h},${s}%,${l}%)`;
377
+ }
378
+
379
+ /** Same as toHsb */
380
+ toHsv() {
381
+ return {
382
+ h: this.getHue(),
383
+ s: this.getHSVSaturation(),
384
+ v: this.getValue(),
385
+ a: this.a
386
+ };
387
+ }
388
+ toRgb() {
389
+ return {
390
+ r: this.r,
391
+ g: this.g,
392
+ b: this.b,
393
+ a: this.a
394
+ };
395
+ }
396
+ toRgbString() {
397
+ return this.a !== 1 ? `rgba(${this.r},${this.g},${this.b},${this.a})` : `rgb(${this.r},${this.g},${this.b})`;
398
+ }
399
+ toString() {
400
+ return this.toRgbString();
401
+ }
402
+
403
+ // ====================== Privates ======================
404
+ /** Return a new FastColor object with one channel changed */
405
+ _sc(rgb, value, max) {
406
+ const clone = this.clone();
407
+ clone[rgb] = limitRange(value, max);
408
+ return clone;
409
+ }
410
+ _c(input) {
411
+ return new this.constructor(input);
412
+ }
413
+ getMax() {
414
+ if (typeof this._max === 'undefined') {
415
+ this._max = Math.max(this.r, this.g, this.b);
416
+ }
417
+ return this._max;
418
+ }
419
+ getMin() {
420
+ if (typeof this._min === 'undefined') {
421
+ this._min = Math.min(this.r, this.g, this.b);
422
+ }
423
+ return this._min;
424
+ }
425
+ fromHexString(trimStr) {
426
+ const withoutPrefix = trimStr.replace('#', '');
427
+ function connectNum(index1, index2) {
428
+ return parseInt(withoutPrefix[index1] + withoutPrefix[index2 || index1], 16);
429
+ }
430
+ if (withoutPrefix.length < 6) {
431
+ // #rgb or #rgba
432
+ this.r = connectNum(0);
433
+ this.g = connectNum(1);
434
+ this.b = connectNum(2);
435
+ this.a = withoutPrefix[3] ? connectNum(3) / 255 : 1;
436
+ } else {
437
+ // #rrggbb or #rrggbbaa
438
+ this.r = connectNum(0, 1);
439
+ this.g = connectNum(2, 3);
440
+ this.b = connectNum(4, 5);
441
+ this.a = withoutPrefix[6] ? connectNum(6, 7) / 255 : 1;
442
+ }
443
+ }
444
+ fromHsl({
445
+ h: _h,
446
+ s,
447
+ l,
448
+ a
449
+ }) {
450
+ const h = (_h % 360 + 360) % 360;
451
+ this._h = h;
452
+ this._hsl_s = s;
453
+ this._l = l;
454
+ this.a = typeof a === 'number' ? a : 1;
455
+ if (s <= 0) {
456
+ const rgb = round(l * 255);
457
+ this.r = rgb;
458
+ this.g = rgb;
459
+ this.b = rgb;
460
+ return;
461
+ }
462
+ let r = 0,
463
+ g = 0,
464
+ b = 0;
465
+ const huePrime = h / 60;
466
+ const chroma = (1 - Math.abs(2 * l - 1)) * s;
467
+ const secondComponent = chroma * (1 - Math.abs(huePrime % 2 - 1));
468
+ if (huePrime >= 0 && huePrime < 1) {
469
+ r = chroma;
470
+ g = secondComponent;
471
+ } else if (huePrime >= 1 && huePrime < 2) {
472
+ r = secondComponent;
473
+ g = chroma;
474
+ } else if (huePrime >= 2 && huePrime < 3) {
475
+ g = chroma;
476
+ b = secondComponent;
477
+ } else if (huePrime >= 3 && huePrime < 4) {
478
+ g = secondComponent;
479
+ b = chroma;
480
+ } else if (huePrime >= 4 && huePrime < 5) {
481
+ r = secondComponent;
482
+ b = chroma;
483
+ } else if (huePrime >= 5 && huePrime < 6) {
484
+ r = chroma;
485
+ b = secondComponent;
486
+ }
487
+ const lightnessModification = l - chroma / 2;
488
+ this.r = round((r + lightnessModification) * 255);
489
+ this.g = round((g + lightnessModification) * 255);
490
+ this.b = round((b + lightnessModification) * 255);
491
+ }
492
+ fromHsv({
493
+ h: _h,
494
+ s,
495
+ v,
496
+ a
497
+ }) {
498
+ const h = (_h % 360 + 360) % 360;
499
+ this._h = h;
500
+ this._hsv_s = s;
501
+ this._v = v;
502
+ this.a = typeof a === 'number' ? a : 1;
503
+ const vv = round(v * 255);
504
+ this.r = vv;
505
+ this.g = vv;
506
+ this.b = vv;
507
+ if (s <= 0) {
508
+ return;
509
+ }
510
+ const hh = h / 60;
511
+ const i = Math.floor(hh);
512
+ const ff = hh - i;
513
+ const p = round(v * (1.0 - s) * 255);
514
+ const q = round(v * (1.0 - s * ff) * 255);
515
+ const t = round(v * (1.0 - s * (1.0 - ff)) * 255);
516
+ switch (i) {
517
+ case 0:
518
+ this.g = t;
519
+ this.b = p;
520
+ break;
521
+ case 1:
522
+ this.r = q;
523
+ this.b = p;
524
+ break;
525
+ case 2:
526
+ this.r = p;
527
+ this.b = t;
528
+ break;
529
+ case 3:
530
+ this.r = p;
531
+ this.g = q;
532
+ break;
533
+ case 4:
534
+ this.r = t;
535
+ this.g = p;
536
+ break;
537
+ case 5:
538
+ default:
539
+ this.g = p;
540
+ this.b = q;
541
+ break;
542
+ }
543
+ }
544
+ fromHsvString(trimStr) {
545
+ const cells = splitColorStr(trimStr, parseHSVorHSL);
546
+ this.fromHsv({
547
+ h: cells[0],
548
+ s: cells[1],
549
+ v: cells[2],
550
+ a: cells[3]
551
+ });
552
+ }
553
+ fromHslString(trimStr) {
554
+ const cells = splitColorStr(trimStr, parseHSVorHSL);
555
+ this.fromHsl({
556
+ h: cells[0],
557
+ s: cells[1],
558
+ l: cells[2],
559
+ a: cells[3]
560
+ });
561
+ }
562
+ fromRgbString(trimStr) {
563
+ const cells = splitColorStr(trimStr, (num, txt) =>
564
+ // Convert percentage to number. e.g. 50% -> 128
565
+ txt.includes('%') ? round(num / 100 * 255) : num);
566
+ this.r = cells[0];
567
+ this.g = cells[1];
568
+ this.b = cells[2];
569
+ this.a = cells[3];
570
+ }
571
+ }
package/es/index.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export * from './FastColor';
2
+ export * from './types';
package/es/index.js ADDED
@@ -0,0 +1,2 @@
1
+ export * from "./FastColor";
2
+ export * from "./types";
@@ -0,0 +1,151 @@
1
+ declare const _default: {
2
+ aliceblue: string;
3
+ antiquewhite: string;
4
+ aqua: string;
5
+ aquamarine: string;
6
+ azure: string;
7
+ beige: string;
8
+ bisque: string;
9
+ black: string;
10
+ blanchedalmond: string;
11
+ blue: string;
12
+ blueviolet: string;
13
+ brown: string;
14
+ burlywood: string;
15
+ cadetblue: string;
16
+ chartreuse: string;
17
+ chocolate: string;
18
+ coral: string;
19
+ cornflowerblue: string;
20
+ cornsilk: string;
21
+ crimson: string;
22
+ cyan: string;
23
+ darkblue: string;
24
+ darkcyan: string;
25
+ darkgoldenrod: string;
26
+ darkgray: string;
27
+ darkgreen: string;
28
+ darkgrey: string;
29
+ darkkhaki: string;
30
+ darkmagenta: string;
31
+ darkolivegreen: string;
32
+ darkorange: string;
33
+ darkorchid: string;
34
+ darkred: string;
35
+ darksalmon: string;
36
+ darkseagreen: string;
37
+ darkslateblue: string;
38
+ darkslategray: string;
39
+ darkslategrey: string;
40
+ darkturquoise: string;
41
+ darkviolet: string;
42
+ deeppink: string;
43
+ deepskyblue: string;
44
+ dimgray: string;
45
+ dimgrey: string;
46
+ dodgerblue: string;
47
+ firebrick: string;
48
+ floralwhite: string;
49
+ forestgreen: string;
50
+ fuchsia: string;
51
+ gainsboro: string;
52
+ ghostwhite: string;
53
+ goldenrod: string;
54
+ gold: string;
55
+ gray: string;
56
+ green: string;
57
+ greenyellow: string;
58
+ grey: string;
59
+ honeydew: string;
60
+ hotpink: string;
61
+ indianred: string;
62
+ indigo: string;
63
+ ivory: string;
64
+ khaki: string;
65
+ lavenderblush: string;
66
+ lavender: string;
67
+ lawngreen: string;
68
+ lemonchiffon: string;
69
+ lightblue: string;
70
+ lightcoral: string;
71
+ lightcyan: string;
72
+ lightgoldenrodyellow: string;
73
+ lightgray: string;
74
+ lightgreen: string;
75
+ lightgrey: string;
76
+ lightpink: string;
77
+ lightsalmon: string;
78
+ lightseagreen: string;
79
+ lightskyblue: string;
80
+ lightslategray: string;
81
+ lightslategrey: string;
82
+ lightsteelblue: string;
83
+ lightyellow: string;
84
+ lime: string;
85
+ limegreen: string;
86
+ linen: string;
87
+ magenta: string;
88
+ maroon: string;
89
+ mediumaquamarine: string;
90
+ mediumblue: string;
91
+ mediumorchid: string;
92
+ mediumpurple: string;
93
+ mediumseagreen: string;
94
+ mediumslateblue: string;
95
+ mediumspringgreen: string;
96
+ mediumturquoise: string;
97
+ mediumvioletred: string;
98
+ midnightblue: string;
99
+ mintcream: string;
100
+ mistyrose: string;
101
+ moccasin: string;
102
+ navajowhite: string;
103
+ navy: string;
104
+ oldlace: string;
105
+ olive: string;
106
+ olivedrab: string;
107
+ orange: string;
108
+ orangered: string;
109
+ orchid: string;
110
+ palegoldenrod: string;
111
+ palegreen: string;
112
+ paleturquoise: string;
113
+ palevioletred: string;
114
+ papayawhip: string;
115
+ peachpuff: string;
116
+ peru: string;
117
+ pink: string;
118
+ plum: string;
119
+ powderblue: string;
120
+ purple: string;
121
+ rebeccapurple: string;
122
+ red: string;
123
+ rosybrown: string;
124
+ royalblue: string;
125
+ saddlebrown: string;
126
+ salmon: string;
127
+ sandybrown: string;
128
+ seagreen: string;
129
+ seashell: string;
130
+ sienna: string;
131
+ silver: string;
132
+ skyblue: string;
133
+ slateblue: string;
134
+ slategray: string;
135
+ slategrey: string;
136
+ snow: string;
137
+ springgreen: string;
138
+ steelblue: string;
139
+ tan: string;
140
+ teal: string;
141
+ thistle: string;
142
+ tomato: string;
143
+ turquoise: string;
144
+ violet: string;
145
+ wheat: string;
146
+ white: string;
147
+ whitesmoke: string;
148
+ yellow: string;
149
+ yellowgreen: string;
150
+ };
151
+ export default _default;