@thednp/color-picker 0.0.2-alpha1 → 0.0.2-alpha2

Sign up to get free protection for your applications and to get access to all the features.
package/src/js/color.js CHANGED
@@ -83,6 +83,8 @@ function isColorName(color) {
83
83
  if (nonColors.includes(color)
84
84
  || ['#', ...COLOR_FORMAT].some((f) => color.includes(f))) return false;
85
85
 
86
+ if (['black', 'white'].includes(color)) return true;
87
+
86
88
  return ['rgb(255, 255, 255)', 'rgb(0, 0, 0)'].every((c) => {
87
89
  setElementStyle(documentHead, { color });
88
90
  const computedColor = getElementStyle(documentHead, 'color');
@@ -109,6 +111,11 @@ function isValidCSSUnit(color) {
109
111
  */
110
112
  function bound01(N, max) {
111
113
  let n = N;
114
+
115
+ if (typeof N === 'number'
116
+ && Math.min(N, 0) === 0 // round values to 6 decimals Math.round(N * (10 ** 6)) / 10 ** 6
117
+ && Math.max(N, 1) === 1) return N;
118
+
112
119
  if (isOnePointZero(N)) n = '100%';
113
120
 
114
121
  const processPercent = isPercentage(n);
@@ -212,15 +219,12 @@ function pad2(c) {
212
219
  /**
213
220
  * Converts an RGB colour value to HSL.
214
221
  *
215
- * @param {number} R Red component [0, 255]
216
- * @param {number} G Green component [0, 255]
217
- * @param {number} B Blue component [0, 255]
222
+ * @param {number} r Red component [0, 1]
223
+ * @param {number} g Green component [0, 1]
224
+ * @param {number} b Blue component [0, 1]
218
225
  * @returns {CP.HSL} {h,s,l} object with [0, 1] ranged values
219
226
  */
220
- function rgbToHsl(R, G, B) {
221
- const r = R / 255;
222
- const g = G / 255;
223
- const b = B / 255;
227
+ function rgbToHsl(r, g, b) {
224
228
  const max = Math.max(r, g, b);
225
229
  const min = Math.min(r, g, b);
226
230
  let h = 0;
@@ -232,18 +236,10 @@ function rgbToHsl(R, G, B) {
232
236
  } else {
233
237
  const d = max - min;
234
238
  s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
235
- switch (max) {
236
- case r:
237
- h = (g - b) / d + (g < b ? 6 : 0);
238
- break;
239
- case g:
240
- h = (b - r) / d + 2;
241
- break;
242
- case b:
243
- h = (r - g) / d + 4;
244
- break;
245
- default:
246
- }
239
+ if (max === r) h = (g - b) / d + (g < b ? 6 : 0);
240
+ if (max === g) h = (b - r) / d + 2;
241
+ if (max === b) h = (r - g) / d + 4;
242
+
247
243
  h /= 6;
248
244
  }
249
245
  return { h, s, l };
@@ -272,7 +268,7 @@ function hueToRgb(p, q, t) {
272
268
  * @param {number} h Hue Angle [0, 1]
273
269
  * @param {number} s Saturation [0, 1]
274
270
  * @param {number} l Lightness Angle [0, 1]
275
- * @returns {CP.RGB} {r,g,b} object with [0, 255] ranged values
271
+ * @returns {CP.RGB} {r,g,b} object with [0, 1] ranged values
276
272
  */
277
273
  function hslToRgb(h, s, l) {
278
274
  let r = 0;
@@ -291,7 +287,6 @@ function hslToRgb(h, s, l) {
291
287
  g = hueToRgb(p, q, h);
292
288
  b = hueToRgb(p, q, h - 1 / 3);
293
289
  }
294
- [r, g, b] = [r, g, b].map((x) => x * 255);
295
290
 
296
291
  return { r, g, b };
297
292
  }
@@ -301,16 +296,12 @@ function hslToRgb(h, s, l) {
301
296
  * @link https://www.w3.org/TR/css-color-4/#hwb-to-rgb
302
297
  * @link http://alvyray.com/Papers/CG/hwb2rgb.htm
303
298
  *
304
- * @param {number} R Red component [0, 255]
305
- * @param {number} G Green [0, 255]
306
- * @param {number} B Blue [0, 255]
299
+ * @param {number} r Red component [0, 1]
300
+ * @param {number} g Green [0, 1]
301
+ * @param {number} b Blue [0, 1]
307
302
  * @return {CP.HWB} {h,w,b} object with [0, 1] ranged values
308
303
  */
309
- function rgbToHwb(R, G, B) {
310
- const r = R / 255;
311
- const g = G / 255;
312
- const b = B / 255;
313
-
304
+ function rgbToHwb(r, g, b) {
314
305
  let f = 0;
315
306
  let i = 0;
316
307
  const whiteness = Math.min(r, g, b);
@@ -340,20 +331,18 @@ function rgbToHwb(R, G, B) {
340
331
  * @param {number} H Hue Angle [0, 1]
341
332
  * @param {number} W Whiteness [0, 1]
342
333
  * @param {number} B Blackness [0, 1]
343
- * @return {CP.RGB} {r,g,b} object with [0, 255] ranged values
334
+ * @return {CP.RGB} {r,g,b} object with [0, 1] ranged values
344
335
  *
345
336
  * @link https://www.w3.org/TR/css-color-4/#hwb-to-rgb
346
337
  * @link http://alvyray.com/Papers/CG/hwb2rgb.htm
347
338
  */
348
339
  function hwbToRgb(H, W, B) {
349
340
  if (W + B >= 1) {
350
- const gray = (W / (W + B)) * 255;
341
+ const gray = W / (W + B);
351
342
  return { r: gray, g: gray, b: gray };
352
343
  }
353
344
  let { r, g, b } = hslToRgb(H, 1, 0.5);
354
- [r, g, b] = [r, g, b]
355
- .map((v) => (v / 255) * (1 - W - B) + W)
356
- .map((v) => v * 255);
345
+ [r, g, b] = [r, g, b].map((v) => v * (1 - W - B) + W);
357
346
 
358
347
  return { r, g, b };
359
348
  }
@@ -361,15 +350,12 @@ function hwbToRgb(H, W, B) {
361
350
  /**
362
351
  * Converts an RGB colour value to HSV.
363
352
  *
364
- * @param {number} R Red component [0, 255]
365
- * @param {number} G Green [0, 255]
366
- * @param {number} B Blue [0, 255]
353
+ * @param {number} r Red component [0, 1]
354
+ * @param {number} g Green [0, 1]
355
+ * @param {number} b Blue [0, 1]
367
356
  * @returns {CP.HSV} {h,s,v} object with [0, 1] ranged values
368
357
  */
369
- function rgbToHsv(R, G, B) {
370
- const r = R / 255;
371
- const g = G / 255;
372
- const b = B / 255;
358
+ function rgbToHsv(r, g, b) {
373
359
  const max = Math.max(r, g, b);
374
360
  const min = Math.min(r, g, b);
375
361
  let h = 0;
@@ -379,18 +365,10 @@ function rgbToHsv(R, G, B) {
379
365
  if (max === min) {
380
366
  h = 0; // achromatic
381
367
  } else {
382
- switch (max) {
383
- case r:
384
- h = (g - b) / d + (g < b ? 6 : 0);
385
- break;
386
- case g:
387
- h = (b - r) / d + 2;
388
- break;
389
- case b:
390
- h = (r - g) / d + 4;
391
- break;
392
- default:
393
- }
368
+ if (r === max) h = (g - b) / d + (g < b ? 6 : 0);
369
+ if (g === max) h = (b - r) / d + 2;
370
+ if (b === max) h = (r - g) / d + 4;
371
+
394
372
  h /= 6;
395
373
  }
396
374
  return { h, s, v };
@@ -414,10 +392,9 @@ function hsvToRgb(H, S, V) {
414
392
  const q = v * (1 - f * s);
415
393
  const t = v * (1 - (1 - f) * s);
416
394
  const mod = i % 6;
417
- let r = [v, q, p, p, t, v][mod];
418
- let g = [t, v, v, q, p, p][mod];
419
- let b = [p, p, t, v, v, q][mod];
420
- [r, g, b] = [r, g, b].map((n) => n * 255);
395
+ const r = [v, q, p, p, t, v][mod];
396
+ const g = [t, v, v, q, p, p][mod];
397
+ const b = [p, p, t, v, v, q][mod];
421
398
  return { r, g, b };
422
399
  }
423
400
 
@@ -485,15 +462,15 @@ function rgbaToHex(r, g, b, a, allow4Char) {
485
462
  */
486
463
  function stringInputToObject(input) {
487
464
  let color = toLowerCase(input.trim());
465
+
488
466
  if (color.length === 0) {
489
467
  return {
490
468
  r: 0, g: 0, b: 0, a: 1,
491
469
  };
492
470
  }
493
- let named = false;
471
+
494
472
  if (isColorName(color)) {
495
473
  color = getRGBFromName(color);
496
- named = true;
497
474
  } else if (nonColors.includes(color)) {
498
475
  const a = color === 'transparent' ? 0 : 1;
499
476
  return {
@@ -512,24 +489,28 @@ function stringInputToObject(input) {
512
489
  r: m1, g: m2, b: m3, a: m4 !== undefined ? m4 : 1, format: 'rgb',
513
490
  };
514
491
  }
492
+
515
493
  [, m1, m2, m3, m4] = matchers.hsl.exec(color) || [];
516
494
  if (m1 && m2 && m3/* && m4 */) {
517
495
  return {
518
496
  h: m1, s: m2, l: m3, a: m4 !== undefined ? m4 : 1, format: 'hsl',
519
497
  };
520
498
  }
499
+
521
500
  [, m1, m2, m3, m4] = matchers.hsv.exec(color) || [];
522
501
  if (m1 && m2 && m3/* && m4 */) {
523
502
  return {
524
503
  h: m1, s: m2, v: m3, a: m4 !== undefined ? m4 : 1, format: 'hsv',
525
504
  };
526
505
  }
506
+
527
507
  [, m1, m2, m3, m4] = matchers.hwb.exec(color) || [];
528
508
  if (m1 && m2 && m3) {
529
509
  return {
530
510
  h: m1, w: m2, b: m3, a: m4 !== undefined ? m4 : 1, format: 'hwb',
531
511
  };
532
512
  }
513
+
533
514
  [, m1, m2, m3, m4] = matchers.hex8.exec(color) || [];
534
515
  if (m1 && m2 && m3 && m4) {
535
516
  return {
@@ -537,18 +518,20 @@ function stringInputToObject(input) {
537
518
  g: parseIntFromHex(m2),
538
519
  b: parseIntFromHex(m3),
539
520
  a: convertHexToDecimal(m4),
540
- format: named ? 'rgb' : 'hex',
521
+ format: 'hex',
541
522
  };
542
523
  }
524
+
543
525
  [, m1, m2, m3] = matchers.hex6.exec(color) || [];
544
526
  if (m1 && m2 && m3) {
545
527
  return {
546
528
  r: parseIntFromHex(m1),
547
529
  g: parseIntFromHex(m2),
548
530
  b: parseIntFromHex(m3),
549
- format: named ? 'rgb' : 'hex',
531
+ format: 'hex',
550
532
  };
551
533
  }
534
+
552
535
  [, m1, m2, m3, m4] = matchers.hex4.exec(color) || [];
553
536
  if (m1 && m2 && m3 && m4) {
554
537
  return {
@@ -556,19 +539,20 @@ function stringInputToObject(input) {
556
539
  g: parseIntFromHex(m2 + m2),
557
540
  b: parseIntFromHex(m3 + m3),
558
541
  a: convertHexToDecimal(m4 + m4),
559
- // format: named ? 'rgb' : 'hex8',
560
- format: named ? 'rgb' : 'hex',
542
+ format: 'hex',
561
543
  };
562
544
  }
545
+
563
546
  [, m1, m2, m3] = matchers.hex3.exec(color) || [];
564
547
  if (m1 && m2 && m3) {
565
548
  return {
566
549
  r: parseIntFromHex(m1 + m1),
567
550
  g: parseIntFromHex(m2 + m2),
568
551
  b: parseIntFromHex(m3 + m3),
569
- format: named ? 'rgb' : 'hex',
552
+ format: 'hex',
570
553
  };
571
554
  }
555
+
572
556
  return false;
573
557
  }
574
558
 
@@ -599,6 +583,7 @@ function stringInputToObject(input) {
599
583
  */
600
584
  function inputToRGB(input) {
601
585
  let rgb = { r: 0, g: 0, b: 0 };
586
+ /** @type {*} */
602
587
  let color = input;
603
588
  /** @type {string | number} */
604
589
  let a = 1;
@@ -615,39 +600,41 @@ function inputToRGB(input) {
615
600
  let format = inputFormat && COLOR_FORMAT.includes(inputFormat) ? inputFormat : 'rgb';
616
601
 
617
602
  if (typeof input === 'string') {
618
- // @ts-ignore -- this now is converted to object
619
603
  color = stringInputToObject(input);
620
604
  if (color) ok = true;
621
605
  }
622
606
  if (typeof color === 'object') {
623
607
  if (isValidCSSUnit(color.r) && isValidCSSUnit(color.g) && isValidCSSUnit(color.b)) {
624
608
  ({ r, g, b } = color);
625
- // RGB values now are all in [0, 255] range
626
- [r, g, b] = [r, g, b].map((n) => bound01(n, isPercentage(n) ? 100 : 255) * 255);
609
+ // RGB values now are all in [0, 1] range
610
+ [r, g, b] = [r, g, b].map((n) => bound01(n, isPercentage(n) ? 100 : 255));
627
611
  rgb = { r, g, b };
628
612
  ok = true;
629
- format = 'rgb';
630
- } else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.v)) {
613
+ format = color.format || 'rgb';
614
+ }
615
+ if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.v)) {
631
616
  ({ h, s, v } = color);
632
- h = typeof h === 'number' ? h : bound01(h, 360); // hue can be `5deg` or a [0, 1] value
633
- s = typeof s === 'number' ? s : bound01(s, 100); // saturation can be `5%` or a [0, 1] value
634
- v = typeof v === 'number' ? v : bound01(v, 100); // brightness can be `5%` or a [0, 1] value
617
+ h = bound01(h, 360); // hue can be `5deg` or a [0, 1] value
618
+ s = bound01(s, 100); // saturation can be `5%` or a [0, 1] value
619
+ v = bound01(v, 100); // brightness can be `5%` or a [0, 1] value
635
620
  rgb = hsvToRgb(h, s, v);
636
621
  ok = true;
637
622
  format = 'hsv';
638
- } else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.l)) {
623
+ }
624
+ if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.l)) {
639
625
  ({ h, s, l } = color);
640
- h = typeof h === 'number' ? h : bound01(h, 360); // hue can be `5deg` or a [0, 1] value
641
- s = typeof s === 'number' ? s : bound01(s, 100); // saturation can be `5%` or a [0, 1] value
642
- l = typeof l === 'number' ? l : bound01(l, 100); // lightness can be `5%` or a [0, 1] value
626
+ h = bound01(h, 360); // hue can be `5deg` or a [0, 1] value
627
+ s = bound01(s, 100); // saturation can be `5%` or a [0, 1] value
628
+ l = bound01(l, 100); // lightness can be `5%` or a [0, 1] value
643
629
  rgb = hslToRgb(h, s, l);
644
630
  ok = true;
645
631
  format = 'hsl';
646
- } else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.w) && isValidCSSUnit(color.b)) {
632
+ }
633
+ if (isValidCSSUnit(color.h) && isValidCSSUnit(color.w) && isValidCSSUnit(color.b)) {
647
634
  ({ h, w, b } = color);
648
- h = typeof h === 'number' ? h : bound01(h, 360); // hue can be `5deg` or a [0, 1] value
649
- w = typeof w === 'number' ? w : bound01(w, 100); // whiteness can be `5%` or a [0, 1] value
650
- b = typeof b === 'number' ? b : bound01(b, 100); // blackness can be `5%` or a [0, 1] value
635
+ h = bound01(h, 360); // hue can be `5deg` or a [0, 1] value
636
+ w = bound01(w, 100); // whiteness can be `5%` or a [0, 1] value
637
+ b = bound01(b, 100); // blackness can be `5%` or a [0, 1] value
651
638
  rgb = hwbToRgb(h, w, b);
652
639
  ok = true;
653
640
  format = 'hwb';
@@ -664,9 +651,12 @@ function inputToRGB(input) {
664
651
  return {
665
652
  ok,
666
653
  format,
667
- r: Math.min(255, Math.max(rgb.r, 0)),
668
- g: Math.min(255, Math.max(rgb.g, 0)),
669
- b: Math.min(255, Math.max(rgb.b, 0)),
654
+ // r: Math.min(255, Math.max(rgb.r, 0)),
655
+ // g: Math.min(255, Math.max(rgb.g, 0)),
656
+ // b: Math.min(255, Math.max(rgb.b, 0)),
657
+ r: rgb.r,
658
+ g: rgb.g,
659
+ b: rgb.b,
670
660
  a: boundAlpha(a),
671
661
  };
672
662
  }
@@ -685,16 +675,13 @@ export default class Color {
685
675
  constructor(input, config) {
686
676
  let color = input;
687
677
  const configFormat = config && COLOR_FORMAT.includes(config)
688
- ? config : 'rgb';
678
+ ? config : '';
689
679
 
690
- // If input is already a `Color`, return itself
680
+ // If input is already a `Color`, clone its values
691
681
  if (color instanceof Color) {
692
682
  color = inputToRGB(color);
693
683
  }
694
- if (typeof color === 'number') {
695
- const len = `${color}`.length;
696
- color = `#${(len === 2 ? '0' : '00')}${color}`;
697
- }
684
+
698
685
  const {
699
686
  r, g, b, a, ok, format,
700
687
  } = inputToRGB(color);
@@ -744,24 +731,21 @@ export default class Color {
744
731
  let R = 0;
745
732
  let G = 0;
746
733
  let B = 0;
747
- const rp = r / 255;
748
- const rg = g / 255;
749
- const rb = b / 255;
750
734
 
751
- if (rp <= 0.03928) {
752
- R = rp / 12.92;
735
+ if (r <= 0.03928) {
736
+ R = r / 12.92;
753
737
  } else {
754
- R = ((rp + 0.055) / 1.055) ** 2.4;
738
+ R = ((r + 0.055) / 1.055) ** 2.4;
755
739
  }
756
- if (rg <= 0.03928) {
757
- G = rg / 12.92;
740
+ if (g <= 0.03928) {
741
+ G = g / 12.92;
758
742
  } else {
759
- G = ((rg + 0.055) / 1.055) ** 2.4;
743
+ G = ((g + 0.055) / 1.055) ** 2.4;
760
744
  }
761
- if (rb <= 0.03928) {
762
- B = rb / 12.92;
745
+ if (b <= 0.03928) {
746
+ B = b / 12.92;
763
747
  } else {
764
- B = ((rb + 0.055) / 1.055) ** 2.4;
748
+ B = ((b + 0.055) / 1.055) ** 2.4;
765
749
  }
766
750
  return 0.2126 * R + 0.7152 * G + 0.0722 * B;
767
751
  }
@@ -771,7 +755,7 @@ export default class Color {
771
755
  * @returns {number} a number in the [0, 255] range
772
756
  */
773
757
  get brightness() {
774
- const { r, g, b } = this;
758
+ const { r, g, b } = this.toRgb();
775
759
  return (r * 299 + g * 587 + b * 114) / 1000;
776
760
  }
777
761
 
@@ -780,12 +764,14 @@ export default class Color {
780
764
  * @returns {CP.RGBA} an {r,g,b,a} object with [0, 255] ranged values
781
765
  */
782
766
  toRgb() {
783
- const {
767
+ let {
784
768
  r, g, b, a,
785
769
  } = this;
786
770
 
771
+ [r, g, b] = [r, g, b].map((n) => roundPart(n * 255 * 100) / 100);
772
+ a = roundPart(a * 100) / 100;
787
773
  return {
788
- r, g, b, a: roundPart(a * 100) / 100,
774
+ r, g, b, a,
789
775
  };
790
776
  }
791
777
 
@@ -879,7 +865,7 @@ export default class Color {
879
865
  toHsv() {
880
866
  const {
881
867
  r, g, b, a,
882
- } = this.toRgb();
868
+ } = this;
883
869
  const { h, s, v } = rgbToHsv(r, g, b);
884
870
 
885
871
  return {
@@ -894,7 +880,7 @@ export default class Color {
894
880
  toHsl() {
895
881
  const {
896
882
  r, g, b, a,
897
- } = this.toRgb();
883
+ } = this;
898
884
  const { h, s, l } = rgbToHsl(r, g, b);
899
885
 
900
886
  return {
@@ -979,6 +965,7 @@ export default class Color {
979
965
  */
980
966
  setAlpha(alpha) {
981
967
  const self = this;
968
+ if (typeof alpha !== 'number') return self;
982
969
  self.a = boundAlpha(alpha);
983
970
  return self;
984
971
  }
package/types/cp.d.ts CHANGED
@@ -202,7 +202,7 @@ declare module "color-picker/src/js/color-palette" {
202
202
  * Returns a color palette with a given set of parameters.
203
203
  * @example
204
204
  * new ColorPalette(0, 12, 10);
205
- * // => { hue: 0, hueSteps: 12, lightSteps: 10, colors: array }
205
+ * // => { hue: 0, hueSteps: 12, lightSteps: 10, colors: Array<Color> }
206
206
  */
207
207
  export default class ColorPalette {
208
208
  /**
@@ -216,9 +216,8 @@ declare module "color-picker/src/js/color-palette" {
216
216
  hue: number;
217
217
  hueSteps: number;
218
218
  lightSteps: number;
219
- colors: Color[];
219
+ colors: any;
220
220
  }
221
- import Color from "color-picker/src/js/color";
222
221
  }
223
222
  declare module "color-picker/src/js/util/colorPickerLabels" {
224
223
  export default colorPickerLabels;
@@ -245,10 +244,6 @@ declare module "color-picker/src/js/util/isValidJSON" {
245
244
  */
246
245
  export default function isValidJSON(str: string): boolean;
247
246
  }
248
- declare module "color-picker/src/js/version" {
249
- export default Version;
250
- const Version: string;
251
- }
252
247
  declare module "color-picker/src/js/util/vHidden" {
253
248
  export default vHidden;
254
249
  const vHidden: "v-hidden";
@@ -296,9 +291,11 @@ declare module "color-picker/src/js/util/setMarkup" {
296
291
  */
297
292
  export default function setMarkup(self: CP.ColorPicker): void;
298
293
  }
294
+ declare module "color-picker/src/js/util/version" {
295
+ export default Version;
296
+ const Version: string;
297
+ }
299
298
  declare module "color-picker/src/js/color-picker" {
300
- /** @type {CP.GetInstance<ColorPicker>} */
301
- export const getColorPickerInstance: CP.GetInstance<ColorPicker>;
302
299
  /**
303
300
  * Color Picker Web Component
304
301
  * @see http://thednp.github.io/color-picker
@@ -337,14 +334,24 @@ declare module "color-picker/src/js/color-picker" {
337
334
  format: CP.ColorFormats;
338
335
  /** Shows the `ColorPicker` dropdown. */
339
336
  showPicker(): void;
337
+ /**
338
+ * The `Space` & `Enter` keys specific event listener.
339
+ * Toggle visibility of the `ColorPicker` / the presets menu, showing one will hide the other.
340
+ * @param {KeyboardEvent} e
341
+ * @this {ColorPicker}
342
+ */
340
343
  /**
341
344
  * Toggle the `ColorPicker` dropdown visibility.
342
- * @param {Event} e
345
+ * @param {Event=} e
346
+ * @this {ColorPicker}
347
+ */
348
+ togglePicker(this: ColorPicker, e?: Event | undefined): void;
349
+ /**
350
+ * Toggles the visibility of the `ColorPicker` presets menu.
351
+ * @param {Event=} e
343
352
  * @this {ColorPicker}
344
353
  */
345
- togglePicker(this: ColorPicker, e: Event): void;
346
- /** Toggles the visibility of the `ColorPicker` presets menu. */
347
- toggleMenu(): void;
354
+ toggleMenu(this: ColorPicker, e?: Event | undefined): void;
348
355
  /**
349
356
  * The `ColorPicker` click event listener for the colour menu presets / defaults.
350
357
  * @param {Partial<Event>} e
@@ -400,13 +407,6 @@ declare module "color-picker/src/js/color-picker" {
400
407
  * @this {ColorPicker}
401
408
  */
402
409
  handleDismiss(this: ColorPicker, { code }: KeyboardEvent): void;
403
- /**
404
- * The `Space` & `Enter` keys specific event listener.
405
- * Toggle visibility of the `ColorPicker` / the presets menu, showing one will hide the other.
406
- * @param {KeyboardEvent} e
407
- * @this {ColorPicker}
408
- */
409
- keyToggle(this: ColorPicker, e: KeyboardEvent): void;
410
410
  /**
411
411
  * The `ColorPicker` *keydown* event listener for control knobs.
412
412
  * @param {KeyboardEvent} e
@@ -456,6 +456,8 @@ declare module "color-picker/src/js/color-picker" {
456
456
  get isDark(): boolean;
457
457
  /** Checks if the current input value is a valid colour. */
458
458
  get isValid(): boolean;
459
+ /** Returns the colour appearance, usually the closest colour name for the current value. */
460
+ get appearance(): string | undefined;
459
461
  /** Updates `ColorPicker` visuals. */
460
462
  updateVisuals(): void;
461
463
  /**
@@ -512,27 +514,27 @@ declare module "color-picker/src/js/color-picker-element" {
512
514
  * `ColorPickerElement` Web Component.
513
515
  * @example
514
516
  * <label for="UNIQUE_ID">Label</label>
515
- * <color-picker data-format="hex" data-value="#075">
516
- * <input id="UNIQUE_ID" type="text" class="color-preview btn-appearance">
517
+ * <color-picker>
518
+ * <input id="UNIQUE_ID" value="red" format="hex" class="color-preview btn-appearance">
517
519
  * </color-picker>
520
+ * // or
521
+ * <label for="UNIQUE_ID">Label</label>
522
+ * <color-picker data-id="UNIQUE_ID" data-value="red" data-format="hex"></color-picker>
518
523
  */
519
524
  class ColorPickerElement extends HTMLElement {
520
- /** @type {boolean} */
521
- isDisconnected: boolean;
522
525
  /**
523
526
  * Returns the current color value.
524
- * @returns {string?}
527
+ * @returns {string | undefined}
525
528
  */
526
- get value(): string | null;
529
+ get value(): string | undefined;
527
530
  connectedCallback(): void;
528
531
  /** @type {HTMLInputElement} */
529
532
  input: HTMLInputElement | undefined;
530
533
  colorPicker: ColorPicker | undefined;
531
- color: Color | undefined;
532
- disconnectedCallback(): void;
534
+ /** @this {ColorPickerElement} */
535
+ disconnectedCallback(this: ColorPickerElement): void;
533
536
  }
534
537
  import ColorPicker from "color-picker/src/js/color-picker";
535
- import Color from "color-picker/src/js/color";
536
538
  }
537
539
  declare module "color-picker/types/source/source" {
538
540
  export { default as Color } from "color-picker/src/js/color";
@@ -83,7 +83,7 @@ export interface ColorPickerOptions {
83
83
  colorKeywords?: string[];
84
84
  }
85
85
 
86
- export type ColorInput = string | number | RGB | RGBA | HSL | HSLA | HSV | HSVA | HWB | ColorObject;
86
+ export type ColorInput = string | RGB | RGBA | HSL | HSLA | HSV | HSVA | HWB | ColorObject;
87
87
  export type ColorFormats = string | 'rgb' | 'hex' | 'hex3' | 'hex4' | 'hex6' | 'hex8' | 'hsl' | 'hsv' | 'hwb';
88
88
 
89
89
  export type GetInstance<T> = (element: string | HTMLInputElement) => T | null;