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

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.
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * ColorPalette v0.0.2alpha1 (http://thednp.github.io/color-picker)
2
+ * ColorPalette v0.0.2alpha2 (http://thednp.github.io/color-picker)
3
3
  * Copyright 2022 © thednp
4
4
  * Licensed under MIT (https://github.com/thednp/color-picker/blob/master/LICENSE)
5
5
  */
@@ -147,6 +147,8 @@
147
147
  if (nonColors.includes(color)
148
148
  || ['#', ...COLOR_FORMAT].some((f) => color.includes(f))) return false;
149
149
 
150
+ if (['black', 'white'].includes(color)) return true;
151
+
150
152
  return ['rgb(255, 255, 255)', 'rgb(0, 0, 0)'].every((c) => {
151
153
  setElementStyle(documentHead, { color });
152
154
  const computedColor = getElementStyle(documentHead, 'color');
@@ -173,6 +175,11 @@
173
175
  */
174
176
  function bound01(N, max) {
175
177
  let n = N;
178
+
179
+ if (typeof N === 'number'
180
+ && Math.min(N, 0) === 0 // round values to 6 decimals Math.round(N * (10 ** 6)) / 10 ** 6
181
+ && Math.max(N, 1) === 1) return N;
182
+
176
183
  if (isOnePointZero(N)) n = '100%';
177
184
 
178
185
  const processPercent = isPercentage(n);
@@ -276,15 +283,12 @@
276
283
  /**
277
284
  * Converts an RGB colour value to HSL.
278
285
  *
279
- * @param {number} R Red component [0, 255]
280
- * @param {number} G Green component [0, 255]
281
- * @param {number} B Blue component [0, 255]
286
+ * @param {number} r Red component [0, 1]
287
+ * @param {number} g Green component [0, 1]
288
+ * @param {number} b Blue component [0, 1]
282
289
  * @returns {CP.HSL} {h,s,l} object with [0, 1] ranged values
283
290
  */
284
- function rgbToHsl(R, G, B) {
285
- const r = R / 255;
286
- const g = G / 255;
287
- const b = B / 255;
291
+ function rgbToHsl(r, g, b) {
288
292
  const max = Math.max(r, g, b);
289
293
  const min = Math.min(r, g, b);
290
294
  let h = 0;
@@ -296,17 +300,10 @@
296
300
  } else {
297
301
  const d = max - min;
298
302
  s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
299
- switch (max) {
300
- case r:
301
- h = (g - b) / d + (g < b ? 6 : 0);
302
- break;
303
- case g:
304
- h = (b - r) / d + 2;
305
- break;
306
- case b:
307
- h = (r - g) / d + 4;
308
- break;
309
- }
303
+ if (max === r) h = (g - b) / d + (g < b ? 6 : 0);
304
+ if (max === g) h = (b - r) / d + 2;
305
+ if (max === b) h = (r - g) / d + 4;
306
+
310
307
  h /= 6;
311
308
  }
312
309
  return { h, s, l };
@@ -335,7 +332,7 @@
335
332
  * @param {number} h Hue Angle [0, 1]
336
333
  * @param {number} s Saturation [0, 1]
337
334
  * @param {number} l Lightness Angle [0, 1]
338
- * @returns {CP.RGB} {r,g,b} object with [0, 255] ranged values
335
+ * @returns {CP.RGB} {r,g,b} object with [0, 1] ranged values
339
336
  */
340
337
  function hslToRgb(h, s, l) {
341
338
  let r = 0;
@@ -354,7 +351,6 @@
354
351
  g = hueToRgb(p, q, h);
355
352
  b = hueToRgb(p, q, h - 1 / 3);
356
353
  }
357
- [r, g, b] = [r, g, b].map((x) => x * 255);
358
354
 
359
355
  return { r, g, b };
360
356
  }
@@ -364,16 +360,12 @@
364
360
  * @link https://www.w3.org/TR/css-color-4/#hwb-to-rgb
365
361
  * @link http://alvyray.com/Papers/CG/hwb2rgb.htm
366
362
  *
367
- * @param {number} R Red component [0, 255]
368
- * @param {number} G Green [0, 255]
369
- * @param {number} B Blue [0, 255]
363
+ * @param {number} r Red component [0, 1]
364
+ * @param {number} g Green [0, 1]
365
+ * @param {number} b Blue [0, 1]
370
366
  * @return {CP.HWB} {h,w,b} object with [0, 1] ranged values
371
367
  */
372
- function rgbToHwb(R, G, B) {
373
- const r = R / 255;
374
- const g = G / 255;
375
- const b = B / 255;
376
-
368
+ function rgbToHwb(r, g, b) {
377
369
  let f = 0;
378
370
  let i = 0;
379
371
  const whiteness = Math.min(r, g, b);
@@ -403,20 +395,18 @@
403
395
  * @param {number} H Hue Angle [0, 1]
404
396
  * @param {number} W Whiteness [0, 1]
405
397
  * @param {number} B Blackness [0, 1]
406
- * @return {CP.RGB} {r,g,b} object with [0, 255] ranged values
398
+ * @return {CP.RGB} {r,g,b} object with [0, 1] ranged values
407
399
  *
408
400
  * @link https://www.w3.org/TR/css-color-4/#hwb-to-rgb
409
401
  * @link http://alvyray.com/Papers/CG/hwb2rgb.htm
410
402
  */
411
403
  function hwbToRgb(H, W, B) {
412
404
  if (W + B >= 1) {
413
- const gray = (W / (W + B)) * 255;
405
+ const gray = W / (W + B);
414
406
  return { r: gray, g: gray, b: gray };
415
407
  }
416
408
  let { r, g, b } = hslToRgb(H, 1, 0.5);
417
- [r, g, b] = [r, g, b]
418
- .map((v) => (v / 255) * (1 - W - B) + W)
419
- .map((v) => v * 255);
409
+ [r, g, b] = [r, g, b].map((v) => v * (1 - W - B) + W);
420
410
 
421
411
  return { r, g, b };
422
412
  }
@@ -424,15 +414,12 @@
424
414
  /**
425
415
  * Converts an RGB colour value to HSV.
426
416
  *
427
- * @param {number} R Red component [0, 255]
428
- * @param {number} G Green [0, 255]
429
- * @param {number} B Blue [0, 255]
417
+ * @param {number} r Red component [0, 1]
418
+ * @param {number} g Green [0, 1]
419
+ * @param {number} b Blue [0, 1]
430
420
  * @returns {CP.HSV} {h,s,v} object with [0, 1] ranged values
431
421
  */
432
- function rgbToHsv(R, G, B) {
433
- const r = R / 255;
434
- const g = G / 255;
435
- const b = B / 255;
422
+ function rgbToHsv(r, g, b) {
436
423
  const max = Math.max(r, g, b);
437
424
  const min = Math.min(r, g, b);
438
425
  let h = 0;
@@ -442,17 +429,10 @@
442
429
  if (max === min) {
443
430
  h = 0; // achromatic
444
431
  } else {
445
- switch (max) {
446
- case r:
447
- h = (g - b) / d + (g < b ? 6 : 0);
448
- break;
449
- case g:
450
- h = (b - r) / d + 2;
451
- break;
452
- case b:
453
- h = (r - g) / d + 4;
454
- break;
455
- }
432
+ if (r === max) h = (g - b) / d + (g < b ? 6 : 0);
433
+ if (g === max) h = (b - r) / d + 2;
434
+ if (b === max) h = (r - g) / d + 4;
435
+
456
436
  h /= 6;
457
437
  }
458
438
  return { h, s, v };
@@ -476,10 +456,9 @@
476
456
  const q = v * (1 - f * s);
477
457
  const t = v * (1 - (1 - f) * s);
478
458
  const mod = i % 6;
479
- let r = [v, q, p, p, t, v][mod];
480
- let g = [t, v, v, q, p, p][mod];
481
- let b = [p, p, t, v, v, q][mod];
482
- [r, g, b] = [r, g, b].map((n) => n * 255);
459
+ const r = [v, q, p, p, t, v][mod];
460
+ const g = [t, v, v, q, p, p][mod];
461
+ const b = [p, p, t, v, v, q][mod];
483
462
  return { r, g, b };
484
463
  }
485
464
 
@@ -547,15 +526,15 @@
547
526
  */
548
527
  function stringInputToObject(input) {
549
528
  let color = toLowerCase(input.trim());
529
+
550
530
  if (color.length === 0) {
551
531
  return {
552
532
  r: 0, g: 0, b: 0, a: 1,
553
533
  };
554
534
  }
555
- let named = false;
535
+
556
536
  if (isColorName(color)) {
557
537
  color = getRGBFromName(color);
558
- named = true;
559
538
  } else if (nonColors.includes(color)) {
560
539
  const a = color === 'transparent' ? 0 : 1;
561
540
  return {
@@ -574,24 +553,28 @@
574
553
  r: m1, g: m2, b: m3, a: m4 !== undefined ? m4 : 1, format: 'rgb',
575
554
  };
576
555
  }
556
+
577
557
  [, m1, m2, m3, m4] = matchers.hsl.exec(color) || [];
578
558
  if (m1 && m2 && m3/* && m4 */) {
579
559
  return {
580
560
  h: m1, s: m2, l: m3, a: m4 !== undefined ? m4 : 1, format: 'hsl',
581
561
  };
582
562
  }
563
+
583
564
  [, m1, m2, m3, m4] = matchers.hsv.exec(color) || [];
584
565
  if (m1 && m2 && m3/* && m4 */) {
585
566
  return {
586
567
  h: m1, s: m2, v: m3, a: m4 !== undefined ? m4 : 1, format: 'hsv',
587
568
  };
588
569
  }
570
+
589
571
  [, m1, m2, m3, m4] = matchers.hwb.exec(color) || [];
590
572
  if (m1 && m2 && m3) {
591
573
  return {
592
574
  h: m1, w: m2, b: m3, a: m4 !== undefined ? m4 : 1, format: 'hwb',
593
575
  };
594
576
  }
577
+
595
578
  [, m1, m2, m3, m4] = matchers.hex8.exec(color) || [];
596
579
  if (m1 && m2 && m3 && m4) {
597
580
  return {
@@ -599,18 +582,20 @@
599
582
  g: parseIntFromHex(m2),
600
583
  b: parseIntFromHex(m3),
601
584
  a: convertHexToDecimal(m4),
602
- format: named ? 'rgb' : 'hex',
585
+ format: 'hex',
603
586
  };
604
587
  }
588
+
605
589
  [, m1, m2, m3] = matchers.hex6.exec(color) || [];
606
590
  if (m1 && m2 && m3) {
607
591
  return {
608
592
  r: parseIntFromHex(m1),
609
593
  g: parseIntFromHex(m2),
610
594
  b: parseIntFromHex(m3),
611
- format: named ? 'rgb' : 'hex',
595
+ format: 'hex',
612
596
  };
613
597
  }
598
+
614
599
  [, m1, m2, m3, m4] = matchers.hex4.exec(color) || [];
615
600
  if (m1 && m2 && m3 && m4) {
616
601
  return {
@@ -618,19 +603,20 @@
618
603
  g: parseIntFromHex(m2 + m2),
619
604
  b: parseIntFromHex(m3 + m3),
620
605
  a: convertHexToDecimal(m4 + m4),
621
- // format: named ? 'rgb' : 'hex8',
622
- format: named ? 'rgb' : 'hex',
606
+ format: 'hex',
623
607
  };
624
608
  }
609
+
625
610
  [, m1, m2, m3] = matchers.hex3.exec(color) || [];
626
611
  if (m1 && m2 && m3) {
627
612
  return {
628
613
  r: parseIntFromHex(m1 + m1),
629
614
  g: parseIntFromHex(m2 + m2),
630
615
  b: parseIntFromHex(m3 + m3),
631
- format: named ? 'rgb' : 'hex',
616
+ format: 'hex',
632
617
  };
633
618
  }
619
+
634
620
  return false;
635
621
  }
636
622
 
@@ -661,6 +647,7 @@
661
647
  */
662
648
  function inputToRGB(input) {
663
649
  let rgb = { r: 0, g: 0, b: 0 };
650
+ /** @type {*} */
664
651
  let color = input;
665
652
  /** @type {string | number} */
666
653
  let a = 1;
@@ -677,39 +664,41 @@
677
664
  let format = inputFormat && COLOR_FORMAT.includes(inputFormat) ? inputFormat : 'rgb';
678
665
 
679
666
  if (typeof input === 'string') {
680
- // @ts-ignore -- this now is converted to object
681
667
  color = stringInputToObject(input);
682
668
  if (color) ok = true;
683
669
  }
684
670
  if (typeof color === 'object') {
685
671
  if (isValidCSSUnit(color.r) && isValidCSSUnit(color.g) && isValidCSSUnit(color.b)) {
686
672
  ({ r, g, b } = color);
687
- // RGB values now are all in [0, 255] range
688
- [r, g, b] = [r, g, b].map((n) => bound01(n, isPercentage(n) ? 100 : 255) * 255);
673
+ // RGB values now are all in [0, 1] range
674
+ [r, g, b] = [r, g, b].map((n) => bound01(n, isPercentage(n) ? 100 : 255));
689
675
  rgb = { r, g, b };
690
676
  ok = true;
691
- format = 'rgb';
692
- } else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.v)) {
677
+ format = color.format || 'rgb';
678
+ }
679
+ if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.v)) {
693
680
  ({ h, s, v } = color);
694
- h = typeof h === 'number' ? h : bound01(h, 360); // hue can be `5deg` or a [0, 1] value
695
- s = typeof s === 'number' ? s : bound01(s, 100); // saturation can be `5%` or a [0, 1] value
696
- v = typeof v === 'number' ? v : bound01(v, 100); // brightness can be `5%` or a [0, 1] value
681
+ h = bound01(h, 360); // hue can be `5deg` or a [0, 1] value
682
+ s = bound01(s, 100); // saturation can be `5%` or a [0, 1] value
683
+ v = bound01(v, 100); // brightness can be `5%` or a [0, 1] value
697
684
  rgb = hsvToRgb(h, s, v);
698
685
  ok = true;
699
686
  format = 'hsv';
700
- } else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.l)) {
687
+ }
688
+ if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.l)) {
701
689
  ({ h, s, l } = color);
702
- h = typeof h === 'number' ? h : bound01(h, 360); // hue can be `5deg` or a [0, 1] value
703
- s = typeof s === 'number' ? s : bound01(s, 100); // saturation can be `5%` or a [0, 1] value
704
- l = typeof l === 'number' ? l : bound01(l, 100); // lightness can be `5%` or a [0, 1] value
690
+ h = bound01(h, 360); // hue can be `5deg` or a [0, 1] value
691
+ s = bound01(s, 100); // saturation can be `5%` or a [0, 1] value
692
+ l = bound01(l, 100); // lightness can be `5%` or a [0, 1] value
705
693
  rgb = hslToRgb(h, s, l);
706
694
  ok = true;
707
695
  format = 'hsl';
708
- } else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.w) && isValidCSSUnit(color.b)) {
696
+ }
697
+ if (isValidCSSUnit(color.h) && isValidCSSUnit(color.w) && isValidCSSUnit(color.b)) {
709
698
  ({ h, w, b } = color);
710
- h = typeof h === 'number' ? h : bound01(h, 360); // hue can be `5deg` or a [0, 1] value
711
- w = typeof w === 'number' ? w : bound01(w, 100); // whiteness can be `5%` or a [0, 1] value
712
- b = typeof b === 'number' ? b : bound01(b, 100); // blackness can be `5%` or a [0, 1] value
699
+ h = bound01(h, 360); // hue can be `5deg` or a [0, 1] value
700
+ w = bound01(w, 100); // whiteness can be `5%` or a [0, 1] value
701
+ b = bound01(b, 100); // blackness can be `5%` or a [0, 1] value
713
702
  rgb = hwbToRgb(h, w, b);
714
703
  ok = true;
715
704
  format = 'hwb';
@@ -726,9 +715,12 @@
726
715
  return {
727
716
  ok,
728
717
  format,
729
- r: Math.min(255, Math.max(rgb.r, 0)),
730
- g: Math.min(255, Math.max(rgb.g, 0)),
731
- b: Math.min(255, Math.max(rgb.b, 0)),
718
+ // r: Math.min(255, Math.max(rgb.r, 0)),
719
+ // g: Math.min(255, Math.max(rgb.g, 0)),
720
+ // b: Math.min(255, Math.max(rgb.b, 0)),
721
+ r: rgb.r,
722
+ g: rgb.g,
723
+ b: rgb.b,
732
724
  a: boundAlpha(a),
733
725
  };
734
726
  }
@@ -747,16 +739,13 @@
747
739
  constructor(input, config) {
748
740
  let color = input;
749
741
  const configFormat = config && COLOR_FORMAT.includes(config)
750
- ? config : 'rgb';
742
+ ? config : '';
751
743
 
752
- // If input is already a `Color`, return itself
744
+ // If input is already a `Color`, clone its values
753
745
  if (color instanceof Color) {
754
746
  color = inputToRGB(color);
755
747
  }
756
- if (typeof color === 'number') {
757
- const len = `${color}`.length;
758
- color = `#${(len === 2 ? '0' : '00')}${color}`;
759
- }
748
+
760
749
  const {
761
750
  r, g, b, a, ok, format,
762
751
  } = inputToRGB(color);
@@ -806,24 +795,21 @@
806
795
  let R = 0;
807
796
  let G = 0;
808
797
  let B = 0;
809
- const rp = r / 255;
810
- const rg = g / 255;
811
- const rb = b / 255;
812
798
 
813
- if (rp <= 0.03928) {
814
- R = rp / 12.92;
799
+ if (r <= 0.03928) {
800
+ R = r / 12.92;
815
801
  } else {
816
- R = ((rp + 0.055) / 1.055) ** 2.4;
802
+ R = ((r + 0.055) / 1.055) ** 2.4;
817
803
  }
818
- if (rg <= 0.03928) {
819
- G = rg / 12.92;
804
+ if (g <= 0.03928) {
805
+ G = g / 12.92;
820
806
  } else {
821
- G = ((rg + 0.055) / 1.055) ** 2.4;
807
+ G = ((g + 0.055) / 1.055) ** 2.4;
822
808
  }
823
- if (rb <= 0.03928) {
824
- B = rb / 12.92;
809
+ if (b <= 0.03928) {
810
+ B = b / 12.92;
825
811
  } else {
826
- B = ((rb + 0.055) / 1.055) ** 2.4;
812
+ B = ((b + 0.055) / 1.055) ** 2.4;
827
813
  }
828
814
  return 0.2126 * R + 0.7152 * G + 0.0722 * B;
829
815
  }
@@ -833,7 +819,7 @@
833
819
  * @returns {number} a number in the [0, 255] range
834
820
  */
835
821
  get brightness() {
836
- const { r, g, b } = this;
822
+ const { r, g, b } = this.toRgb();
837
823
  return (r * 299 + g * 587 + b * 114) / 1000;
838
824
  }
839
825
 
@@ -842,12 +828,14 @@
842
828
  * @returns {CP.RGBA} an {r,g,b,a} object with [0, 255] ranged values
843
829
  */
844
830
  toRgb() {
845
- const {
831
+ let {
846
832
  r, g, b, a,
847
833
  } = this;
848
834
 
835
+ [r, g, b] = [r, g, b].map((n) => roundPart(n * 255 * 100) / 100);
836
+ a = roundPart(a * 100) / 100;
849
837
  return {
850
- r, g, b, a: roundPart(a * 100) / 100,
838
+ r, g, b, a,
851
839
  };
852
840
  }
853
841
 
@@ -941,7 +929,7 @@
941
929
  toHsv() {
942
930
  const {
943
931
  r, g, b, a,
944
- } = this.toRgb();
932
+ } = this;
945
933
  const { h, s, v } = rgbToHsv(r, g, b);
946
934
 
947
935
  return {
@@ -956,7 +944,7 @@
956
944
  toHsl() {
957
945
  const {
958
946
  r, g, b, a,
959
- } = this.toRgb();
947
+ } = this;
960
948
  const { h, s, l } = rgbToHsl(r, g, b);
961
949
 
962
950
  return {
@@ -1041,6 +1029,7 @@
1041
1029
  */
1042
1030
  setAlpha(alpha) {
1043
1031
  const self = this;
1032
+ if (typeof alpha !== 'number') return self;
1044
1033
  self.a = boundAlpha(alpha);
1045
1034
  return self;
1046
1035
  }
@@ -1207,26 +1196,23 @@
1207
1196
  } else if (args.length === 2) {
1208
1197
  [hueSteps, lightSteps] = args;
1209
1198
  if ([hueSteps, lightSteps].some((n) => n < 1)) {
1210
- throw TypeError('ColorPalette: when 2 arguments used, both must be larger than 0.');
1199
+ throw TypeError('ColorPalette: both arguments must be higher than 0.');
1211
1200
  }
1212
- } else {
1213
- throw TypeError('ColorPalette requires minimum 2 arguments');
1214
1201
  }
1215
1202
 
1216
- /** @type {Color[]} */
1203
+ /** @type {*} */
1217
1204
  const colors = [];
1218
-
1219
1205
  const hueStep = 360 / hueSteps;
1220
1206
  const half = roundPart((lightSteps - (lightSteps % 2 ? 1 : 0)) / 2);
1221
- const estimatedStep = 100 / (lightSteps + (lightSteps % 2 ? 0 : 1)) / 100;
1222
-
1223
- let lightStep = 0.25;
1224
- lightStep = [4, 5].includes(lightSteps) ? 0.2 : lightStep;
1225
- lightStep = [6, 7].includes(lightSteps) ? 0.15 : lightStep;
1226
- lightStep = [8, 9].includes(lightSteps) ? 0.11 : lightStep;
1227
- lightStep = [10, 11].includes(lightSteps) ? 0.09 : lightStep;
1228
- lightStep = [12, 13].includes(lightSteps) ? 0.075 : lightStep;
1229
- lightStep = lightSteps > 13 ? estimatedStep : lightStep;
1207
+ const steps1To13 = [0.25, 0.2, 0.15, 0.11, 0.09, 0.075];
1208
+ const lightSets = [[1, 2, 3], [4, 5], [6, 7], [8, 9], [10, 11], [12, 13]];
1209
+ const closestSet = lightSets.find((set) => set.includes(lightSteps));
1210
+
1211
+ // find a lightStep that won't go beyond black and white
1212
+ // something within the [10-90] range of lightness
1213
+ const lightStep = closestSet
1214
+ ? steps1To13[lightSets.indexOf(closestSet)]
1215
+ : (100 / (lightSteps + (lightSteps % 2 ? 0 : 1)) / 100);
1230
1216
 
1231
1217
  // light tints
1232
1218
  for (let i = 1; i < half + 1; i += 1) {
@@ -1,2 +1,2 @@
1
- // ColorPalette v0.0.2alpha1 | thednp © 2022 | MIT-License
2
- !function(t,r){"object"==typeof exports&&"undefined"!=typeof module?module.exports=r():"function"==typeof define&&define.amd?define(r):(t="undefined"!=typeof globalThis?globalThis:t||self).ColorPalette=r()}(this,(function(){"use strict";const t=(t,r)=>Object.assign(t,r);function r(t){const r=Math.floor(t);return t-r<.5?r:Math.round(t)}const{head:e}=document;function n(t,r){const e=getComputedStyle(t);return r in e?e[r]:""}const o=(r,e)=>{t(r.style,e)},s=["transparent","currentColor","inherit","revert","initial"],a=["rgb","hex","hsl","hsv","hwb"],i="[-\\+]?\\d*\\.?\\d+(?:deg|rad|grad|turn)?",h="(?:[-\\+]?\\d*\\.\\d+%?)|(?:[-\\+]?\\d+%?)",u=`(?:${h})|(?:${i})`,c="(?:[,|\\s]+)",l=`(?:[\\s|\\(\\s|\\s\\(\\s]+)?(${u})${c}(${h})${c}(${h})(?:[,|\\/\\s]*)?(${h})?(?:[\\s|\\)\\s]+)?`,g={CSS_UNIT:new RegExp(u),hwb:new RegExp("hwb"+l),rgb:new RegExp("rgb(?:a)?"+l),hsl:new RegExp("hsl(?:a)?"+l),hsv:new RegExp("hsv(?:a)?"+l),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/};function b(t){return(""+t).includes(".")&&1===parseFloat(t)}function f(t){return(""+t).includes("%")}function m(t){return!s.includes(t)&&!["#",...a].some(r=>t.includes(r))&&["rgb(255, 255, 255)","rgb(0, 0, 0)"].every(r=>{o(e,{color:t});const s=n(e,"color");return o(e,{color:""}),s!==r})}function p(t){return Boolean(g.CSS_UNIT.exec(String(t)))}function d(t,r){let e=t;b(t)&&(e="100%");const n=f(e);return e=360===r?parseFloat(e):Math.min(r,Math.max(0,parseFloat(e))),n&&(e=e*r/100),Math.abs(e-r)<1e-6?1:(e=360===r?(e<0?e%r+r:e%r)/r:e%r/r,e)}function x(t){let r=parseFloat(""+t);return(Number.isNaN(r)||r<0||r>1)&&(r=1),r}function S(t){return Math.min(1,Math.max(0,t))}function $(t){o(e,{color:t});const r=n(e,"color");return o(e,{color:""}),r}function A(t){return r(255*t).toString(16)}function w(t){return y(t)/255}function y(t){return parseInt(t,16)}function H(t){return 1===t.length?"0"+t:String(t)}function v(t,r,e){const n=t/255,o=r/255,s=e/255,a=Math.max(n,o,s),i=Math.min(n,o,s);let h=0,u=0;const c=(a+i)/2;if(a===i)u=0,h=0;else{const t=a-i;switch(u=c>.5?t/(2-a-i):t/(a+i),a){case n:h=(o-s)/t+(o<s?6:0);break;case o:h=(s-n)/t+2;break;case s:h=(n-o)/t+4}h/=6}return{h:h,s:u,l:c}}function R(t,r,e){let n=e;return n<0&&(n+=1),n>1&&(n-=1),n<1/6?t+6*n*(r-t):n<.5?r:n<2/3?t+(r-t)*(2/3-n)*6:t}function M(t,r,e){let n=0,o=0,s=0;if(0===r)o=e,s=e,n=e;else{const a=e<.5?e*(1+r):e+r-e*r,i=2*e-a;n=R(i,a,t+1/3),o=R(i,a,t),s=R(i,a,t-1/3)}return[n,o,s]=[n,o,s].map(t=>255*t),{r:n,g:o,b:s}}function T(t,r,e){const n=t/255,o=r/255,s=e/255;let a=0,i=0;const h=Math.min(n,o,s),u=Math.max(n,o,s),c=1-u;if(u===h)return{h:0,w:h,b:c};n===h?(a=o-s,i=3):(a=o===h?s-n:n-o,i=o===h?5:1);const l=(i-a/(u-h))/6;return{h:1===l?0:l,w:h,b:c}}function F(t,r,e){if(r+e>=1){const t=r/(r+e)*255;return{r:t,g:t,b:t}}let{r:n,g:o,b:s}=M(t,1,.5);return[n,o,s]=[n,o,s].map(t=>t/255*(1-r-e)+r).map(t=>255*t),{r:n,g:o,b:s}}function C(t,r,e){const n=t/255,o=r/255,s=e/255,a=Math.max(n,o,s),i=Math.min(n,o,s);let h=0;const u=a,c=a-i,l=0===a?0:c/a;if(a===i)h=0;else{switch(a){case n:h=(o-s)/c+(o<s?6:0);break;case o:h=(s-n)/c+2;break;case s:h=(n-o)/c+4}h/=6}return{h:h,s:l,v:u}}function E(t,r,e){const n=6*t,o=r,s=e,a=Math.floor(n),i=n-a,h=s*(1-o),u=s*(1-i*o),c=s*(1-(1-i)*o),l=a%6;let g=[s,u,h,h,c,s][l],b=[c,s,s,u,h,h][l],f=[h,h,c,s,s,u][l];return[g,b,f]=[g,b,f].map(t=>255*t),{r:g,g:b,b:f}}function N(t,e,n,o){const s=[H(r(t).toString(16)),H(r(e).toString(16)),H(r(n).toString(16))];return o&&s[0].charAt(0)===s[0].charAt(1)&&s[1].charAt(0)===s[1].charAt(1)&&s[2].charAt(0)===s[2].charAt(1)?s[0].charAt(0)+s[1].charAt(0)+s[2].charAt(0):s.join("")}function k(t,e,n,o,s){const a=[H(r(t).toString(16)),H(r(e).toString(16)),H(r(n).toString(16)),H(A(o))];return s&&a[0].charAt(0)===a[0].charAt(1)&&a[1].charAt(0)===a[1].charAt(1)&&a[2].charAt(0)===a[2].charAt(1)&&a[3].charAt(0)===a[3].charAt(1)?a[0].charAt(0)+a[1].charAt(0)+a[2].charAt(0)+a[3].charAt(0):a.join("")}function I(t){let r=t.trim().toLowerCase();if(0===r.length)return{r:0,g:0,b:0,a:1};let e=!1;if(m(r))r=$(r),e=!0;else if(s.includes(r)){return{r:0,g:0,b:0,a:"transparent"===r?0:1,format:"rgb",ok:!0}}let[,n,o,a,i]=g.rgb.exec(r)||[];return n&&o&&a?{r:n,g:o,b:a,a:void 0!==i?i:1,format:"rgb"}:([,n,o,a,i]=g.hsl.exec(r)||[],n&&o&&a?{h:n,s:o,l:a,a:void 0!==i?i:1,format:"hsl"}:([,n,o,a,i]=g.hsv.exec(r)||[],n&&o&&a?{h:n,s:o,v:a,a:void 0!==i?i:1,format:"hsv"}:([,n,o,a,i]=g.hwb.exec(r)||[],n&&o&&a?{h:n,w:o,b:a,a:void 0!==i?i:1,format:"hwb"}:([,n,o,a,i]=g.hex8.exec(r)||[],n&&o&&a&&i?{r:y(n),g:y(o),b:y(a),a:w(i),format:e?"rgb":"hex"}:([,n,o,a]=g.hex6.exec(r)||[],n&&o&&a?{r:y(n),g:y(o),b:y(a),format:e?"rgb":"hex"}:([,n,o,a,i]=g.hex4.exec(r)||[],n&&o&&a&&i?{r:y(n+n),g:y(o+o),b:y(a+a),a:w(i+i),format:e?"rgb":"hex"}:([,n,o,a]=g.hex3.exec(r)||[],!!(n&&o&&a)&&{r:y(n+n),g:y(o+o),b:y(a+a),format:e?"rgb":"hex"})))))))}function j(t){let r={r:0,g:0,b:0},e=t,n=1,o=null,s=null,i=null,h=null,u=null,c=null,l=null,g=null,b=!1;const m="object"==typeof e&&e.format;let S=m&&a.includes(m)?m:"rgb";return"string"==typeof t&&(e=I(t),e&&(b=!0)),"object"==typeof e&&(p(e.r)&&p(e.g)&&p(e.b)?(({r:l,g:g,b:u}=e),[l,g,u]=[l,g,u].map(t=>255*d(t,f(t)?100:255)),r={r:l,g:g,b:u},b=!0,S="rgb"):p(e.h)&&p(e.s)&&p(e.v)?(({h:c,s:o,v:s}=e),c="number"==typeof c?c:d(c,360),o="number"==typeof o?o:d(o,100),s="number"==typeof s?s:d(s,100),r=E(c,o,s),b=!0,S="hsv"):p(e.h)&&p(e.s)&&p(e.l)?(({h:c,s:o,l:i}=e),c="number"==typeof c?c:d(c,360),o="number"==typeof o?o:d(o,100),i="number"==typeof i?i:d(i,100),r=M(c,o,i),b=!0,S="hsl"):p(e.h)&&p(e.w)&&p(e.b)&&(({h:c,w:h,b:u}=e),c="number"==typeof c?c:d(c,360),h="number"==typeof h?h:d(h,100),u="number"==typeof u?u:d(u,100),r=F(c,h,u),b=!0,S="hwb"),p(e.a)&&(n=e.a,n=f(""+n)||parseFloat(n)>1?d(n,100):n)),void 0===e&&(b=!0),{ok:b,format:S,r:Math.min(255,Math.max(r.r,0)),g:Math.min(255,Math.max(r.g,0)),b:Math.min(255,Math.max(r.b,0)),a:x(n)}}class _{constructor(t,r){let e=t;const n=r&&a.includes(r)?r:"rgb";if(e instanceof _&&(e=j(e)),"number"==typeof e){e=`#${2===(""+e).length?"0":"00"}${e}`}const{r:o,g:s,b:i,a:h,ok:u,format:c}=j(e);this.originalInput=t,this.r=o,this.g=s,this.b=i,this.a=h,this.ok=u,this.format=n||c}get isValid(){return this.ok}get isDark(){return this.brightness<120}get luminance(){const{r:t,g:r,b:e}=this;let n=0,o=0,s=0;const a=t/255,i=r/255,h=e/255;return n=a<=.03928?a/12.92:((a+.055)/1.055)**2.4,o=i<=.03928?i/12.92:((i+.055)/1.055)**2.4,s=h<=.03928?h/12.92:((h+.055)/1.055)**2.4,.2126*n+.7152*o+.0722*s}get brightness(){const{r:t,g:r,b:e}=this;return(299*t+587*r+114*e)/1e3}toRgb(){const{r:t,g:e,b:n,a:o}=this;return{r:t,g:e,b:n,a:r(100*o)/100}}toRgbString(){const{r:t,g:e,b:n,a:o}=this.toRgb(),[s,a,i]=[t,e,n].map(r);return 1===o?`rgb(${s}, ${a}, ${i})`:`rgba(${s}, ${a}, ${i}, ${o})`}toRgbCSS4String(){const{r:t,g:e,b:n,a:o}=this.toRgb(),[s,a,i]=[t,e,n].map(r);return`rgb(${s} ${a} ${i}${1===o?"":` / ${r(100*o)}%`})`}toHex(t){const{r:r,g:e,b:n,a:o}=this.toRgb();return 1===o?N(r,e,n,t):k(r,e,n,o,t)}toHexString(t){return"#"+this.toHex(t)}toHex8(t){const{r:r,g:e,b:n,a:o}=this.toRgb();return k(r,e,n,o,t)}toHex8String(t){return"#"+this.toHex8(t)}toHsv(){const{r:t,g:r,b:e,a:n}=this.toRgb(),{h:o,s:s,v:a}=C(t,r,e);return{h:o,s:s,v:a,a:n}}toHsl(){const{r:t,g:r,b:e,a:n}=this.toRgb(),{h:o,s:s,l:a}=v(t,r,e);return{h:o,s:s,l:a,a:n}}toHslString(){let{h:t,s:e,l:n,a:o}=this.toHsl();return t=r(360*t),e=r(100*e),n=r(100*n),o=r(100*o)/100,1===o?`hsl(${t}, ${e}%, ${n}%)`:`hsla(${t}, ${e}%, ${n}%, ${o})`}toHslCSS4String(){let{h:t,s:e,l:n,a:o}=this.toHsl();t=r(360*t),e=r(100*e),n=r(100*n),o=r(100*o);return`hsl(${t}deg ${e}% ${n}%${o<100?` / ${r(o)}%`:""})`}toHwb(){const{r:t,g:r,b:e,a:n}=this,{h:o,w:s,b:a}=T(t,r,e);return{h:o,w:s,b:a,a:n}}toHwbString(){let{h:t,w:e,b:n,a:o}=this.toHwb();t=r(360*t),e=r(100*e),n=r(100*n),o=r(100*o);return`hwb(${t}deg ${e}% ${n}%${o<100?` / ${r(o)}%`:""})`}setAlpha(t){return this.a=x(t),this}saturate(r){if("number"!=typeof r)return this;const{h:e,s:n,l:o}=this.toHsl(),{r:s,g:a,b:i}=M(e,S(n+r/100),o);return t(this,{r:s,g:a,b:i}),this}desaturate(t){return"number"==typeof t?this.saturate(-t):this}greyscale(){return this.saturate(-100)}lighten(r){if("number"!=typeof r)return this;const{h:e,s:n,l:o}=this.toHsl(),{r:s,g:a,b:i}=M(e,n,S(o+r/100));return t(this,{r:s,g:a,b:i}),this}darken(t){return"number"==typeof t?this.lighten(-t):this}spin(r){if("number"!=typeof r)return this;const{h:e,s:n,l:o}=this.toHsl(),{r:s,g:a,b:i}=M(S((360*e+r)%360/360),n,o);return t(this,{r:s,g:a,b:i}),this}clone(){return new _(this)}toString(t){const{format:r}=this;return"hex"===r?this.toHexString(t):"hsl"===r?this.toHslString():"hwb"===r?this.toHwbString():this.toRgbString()}}t(_,{ANGLES:"deg|rad|grad|turn",CSS_ANGLE:i,CSS_INTEGER:"[-\\+]?\\d+%?",CSS_NUMBER:"[-\\+]?\\d*\\.\\d+%?",CSS_UNIT:h,CSS_UNIT2:u,PERMISSIVE_MATCH:l,matchers:g,isOnePointZero:b,isPercentage:f,isValidCSSUnit:p,isColorName:m,pad2:H,clamp01:S,bound01:d,boundAlpha:x,getRGBFromName:$,convertHexToDecimal:w,convertDecimalToHex:A,rgbToHsl:v,rgbToHex:N,rgbToHsv:C,rgbToHwb:T,rgbaToHex:k,hslToRgb:M,hsvToRgb:E,hueToRgb:R,hwbToRgb:F,parseIntFromHex:y,stringInputToObject:I,inputToRGB:j,roundPart:r,getElementStyle:n,setElementStyle:o,ObjectAssign:t});class P{constructor(...t){let e=0,n=12,o=10,s=[.5];if(3===t.length)[e,n,o]=t;else{if(2!==t.length)throw TypeError("ColorPalette requires minimum 2 arguments");if([n,o]=t,[n,o].some(t=>t<1))throw TypeError("ColorPalette: when 2 arguments used, both must be larger than 0.")}const a=[],i=360/n,h=r((o-(o%2?1:0))/2),u=100/(o+(o%2?0:1))/100;let c=.25;c=[4,5].includes(o)?.2:c,c=[6,7].includes(o)?.15:c,c=[8,9].includes(o)?.11:c,c=[10,11].includes(o)?.09:c,c=[12,13].includes(o)?.075:c,c=o>13?u:c;for(let t=1;t<h+1;t+=1)s=[...s,.5+c*t];for(let t=1;t<o-h;t+=1)s=[.5-c*t,...s];for(let t=0;t<n;t+=1){const r=(e+t*i)%360/360;s.forEach(t=>{a.push(new _({h:r,s:1,l:t}))})}this.hue=e,this.hueSteps=n,this.lightSteps=o,this.colors=a}}return t(P,{Color:_}),P}));
1
+ // ColorPalette v0.0.2alpha2 | thednp © 2022 | MIT-License
2
+ !function(t,r){"object"==typeof exports&&"undefined"!=typeof module?module.exports=r():"function"==typeof define&&define.amd?define(r):(t="undefined"!=typeof globalThis?globalThis:t||self).ColorPalette=r()}(this,(function(){"use strict";const t=(t,r)=>Object.assign(t,r);function r(t){const r=Math.floor(t);return t-r<.5?r:Math.round(t)}const{head:e}=document;function n(t,r){const e=getComputedStyle(t);return r in e?e[r]:""}const o=(r,e)=>{t(r.style,e)},s=["transparent","currentColor","inherit","revert","initial"],h=["rgb","hex","hsl","hsv","hwb"],i="[-\\+]?\\d*\\.?\\d+(?:deg|rad|grad|turn)?",a="(?:[-\\+]?\\d*\\.\\d+%?)|(?:[-\\+]?\\d+%?)",u=`(?:${a})|(?:${i})`,l="(?:[,|\\s]+)",c=`(?:[\\s|\\(\\s|\\s\\(\\s]+)?(${u})${l}(${a})${l}(${a})(?:[,|\\/\\s]*)?(${a})?(?:[\\s|\\)\\s]+)?`,g={CSS_UNIT:new RegExp(u),hwb:new RegExp("hwb"+c),rgb:new RegExp("rgb(?:a)?"+c),hsl:new RegExp("hsl(?:a)?"+c),hsv:new RegExp("hsv(?:a)?"+c),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/};function b(t){return(""+t).includes(".")&&1===parseFloat(t)}function f(t){return(""+t).includes("%")}function m(t){return!s.includes(t)&&!["#",...h].some(r=>t.includes(r))&&(!!["black","white"].includes(t)||["rgb(255, 255, 255)","rgb(0, 0, 0)"].every(r=>{o(e,{color:t});const s=n(e,"color");return o(e,{color:""}),s!==r}))}function d(t){return Boolean(g.CSS_UNIT.exec(String(t)))}function x(t,r){let e=t;if("number"==typeof t&&0===Math.min(t,0)&&1===Math.max(t,1))return t;b(t)&&(e="100%");const n=f(e);return e=360===r?parseFloat(e):Math.min(r,Math.max(0,parseFloat(e))),n&&(e=e*r/100),Math.abs(e-r)<1e-6?1:(e=360===r?(e<0?e%r+r:e%r)/r:e%r/r,e)}function S(t){let r=parseFloat(""+t);return(Number.isNaN(r)||r<0||r>1)&&(r=1),r}function p(t){return Math.min(1,Math.max(0,t))}function A(t){o(e,{color:t});const r=n(e,"color");return o(e,{color:""}),r}function $(t){return r(255*t).toString(16)}function w(t){return H(t)/255}function H(t){return parseInt(t,16)}function v(t){return 1===t.length?"0"+t:String(t)}function R(t,r,e){const n=Math.max(t,r,e),o=Math.min(t,r,e);let s=0,h=0;const i=(n+o)/2;if(n===o)h=0,s=0;else{const a=n-o;h=i>.5?a/(2-n-o):a/(n+o),n===t&&(s=(r-e)/a+(r<e?6:0)),n===r&&(s=(e-t)/a+2),n===e&&(s=(t-r)/a+4),s/=6}return{h:s,s:h,l:i}}function T(t,r,e){let n=e;return n<0&&(n+=1),n>1&&(n-=1),n<1/6?t+6*n*(r-t):n<.5?r:n<2/3?t+(r-t)*(2/3-n)*6:t}function y(t,r,e){let n=0,o=0,s=0;if(0===r)o=e,s=e,n=e;else{const h=e<.5?e*(1+r):e+r-e*r,i=2*e-h;n=T(i,h,t+1/3),o=T(i,h,t),s=T(i,h,t-1/3)}return{r:n,g:o,b:s}}function F(t,r,e){let n=0,o=0;const s=Math.min(t,r,e),h=Math.max(t,r,e),i=1-h;if(h===s)return{h:0,w:s,b:i};t===s?(n=r-e,o=3):(n=r===s?e-t:t-r,o=r===s?5:1);const a=(o-n/(h-s))/6;return{h:1===a?0:a,w:s,b:i}}function M(t,r,e){if(r+e>=1){const t=r/(r+e);return{r:t,g:t,b:t}}let{r:n,g:o,b:s}=y(t,1,.5);return[n,o,s]=[n,o,s].map(t=>t*(1-r-e)+r),{r:n,g:o,b:s}}function C(t,r,e){const n=Math.max(t,r,e),o=Math.min(t,r,e);let s=0;const h=n-o;return n===o?s=0:(t===n&&(s=(r-e)/h+(r<e?6:0)),r===n&&(s=(e-t)/h+2),e===n&&(s=(t-r)/h+4),s/=6),{h:s,s:0===n?0:h/n,v:n}}function E(t,r,e){const n=6*t,o=r,s=e,h=Math.floor(n),i=n-h,a=s*(1-o),u=s*(1-i*o),l=s*(1-(1-i)*o),c=h%6;return{r:[s,u,a,a,l,s][c],g:[l,s,s,u,a,a][c],b:[a,a,l,s,s,u][c]}}function N(t,e,n,o){const s=[v(r(t).toString(16)),v(r(e).toString(16)),v(r(n).toString(16))];return o&&s[0].charAt(0)===s[0].charAt(1)&&s[1].charAt(0)===s[1].charAt(1)&&s[2].charAt(0)===s[2].charAt(1)?s[0].charAt(0)+s[1].charAt(0)+s[2].charAt(0):s.join("")}function I(t,e,n,o,s){const h=[v(r(t).toString(16)),v(r(e).toString(16)),v(r(n).toString(16)),v($(o))];return s&&h[0].charAt(0)===h[0].charAt(1)&&h[1].charAt(0)===h[1].charAt(1)&&h[2].charAt(0)===h[2].charAt(1)&&h[3].charAt(0)===h[3].charAt(1)?h[0].charAt(0)+h[1].charAt(0)+h[2].charAt(0)+h[3].charAt(0):h.join("")}function j(t){let r=t.trim().toLowerCase();if(0===r.length)return{r:0,g:0,b:0,a:1};if(m(r))r=A(r);else if(s.includes(r)){return{r:0,g:0,b:0,a:"transparent"===r?0:1,format:"rgb",ok:!0}}let[,e,n,o,h]=g.rgb.exec(r)||[];return e&&n&&o?{r:e,g:n,b:o,a:void 0!==h?h:1,format:"rgb"}:([,e,n,o,h]=g.hsl.exec(r)||[],e&&n&&o?{h:e,s:n,l:o,a:void 0!==h?h:1,format:"hsl"}:([,e,n,o,h]=g.hsv.exec(r)||[],e&&n&&o?{h:e,s:n,v:o,a:void 0!==h?h:1,format:"hsv"}:([,e,n,o,h]=g.hwb.exec(r)||[],e&&n&&o?{h:e,w:n,b:o,a:void 0!==h?h:1,format:"hwb"}:([,e,n,o,h]=g.hex8.exec(r)||[],e&&n&&o&&h?{r:H(e),g:H(n),b:H(o),a:w(h),format:"hex"}:([,e,n,o]=g.hex6.exec(r)||[],e&&n&&o?{r:H(e),g:H(n),b:H(o),format:"hex"}:([,e,n,o,h]=g.hex4.exec(r)||[],e&&n&&o&&h?{r:H(e+e),g:H(n+n),b:H(o+o),a:w(h+h),format:"hex"}:([,e,n,o]=g.hex3.exec(r)||[],!!(e&&n&&o)&&{r:H(e+e),g:H(n+n),b:H(o+o),format:"hex"})))))))}function k(t){let r={r:0,g:0,b:0},e=t,n=1,o=null,s=null,i=null,a=null,u=null,l=null,c=null,g=null,b=!1;const m="object"==typeof e&&e.format;let p=m&&h.includes(m)?m:"rgb";return"string"==typeof t&&(e=j(t),e&&(b=!0)),"object"==typeof e&&(d(e.r)&&d(e.g)&&d(e.b)&&(({r:c,g:g,b:u}=e),[c,g,u]=[c,g,u].map(t=>x(t,f(t)?100:255)),r={r:c,g:g,b:u},b=!0,p=e.format||"rgb"),d(e.h)&&d(e.s)&&d(e.v)&&(({h:l,s:o,v:s}=e),l=x(l,360),o=x(o,100),s=x(s,100),r=E(l,o,s),b=!0,p="hsv"),d(e.h)&&d(e.s)&&d(e.l)&&(({h:l,s:o,l:i}=e),l=x(l,360),o=x(o,100),i=x(i,100),r=y(l,o,i),b=!0,p="hsl"),d(e.h)&&d(e.w)&&d(e.b)&&(({h:l,w:a,b:u}=e),l=x(l,360),a=x(a,100),u=x(u,100),r=M(l,a,u),b=!0,p="hwb"),d(e.a)&&(n=e.a,n=f(""+n)||parseFloat(n)>1?x(n,100):n)),void 0===e&&(b=!0),{ok:b,format:p,r:r.r,g:r.g,b:r.b,a:S(n)}}class _{constructor(t,r){let e=t;const n=r&&h.includes(r)?r:"";e instanceof _&&(e=k(e));const{r:o,g:s,b:i,a:a,ok:u,format:l}=k(e);this.originalInput=t,this.r=o,this.g=s,this.b=i,this.a=a,this.ok=u,this.format=n||l}get isValid(){return this.ok}get isDark(){return this.brightness<120}get luminance(){const{r:t,g:r,b:e}=this;let n=0,o=0,s=0;return n=t<=.03928?t/12.92:((t+.055)/1.055)**2.4,o=r<=.03928?r/12.92:((r+.055)/1.055)**2.4,s=e<=.03928?e/12.92:((e+.055)/1.055)**2.4,.2126*n+.7152*o+.0722*s}get brightness(){const{r:t,g:r,b:e}=this.toRgb();return(299*t+587*r+114*e)/1e3}toRgb(){let{r:t,g:e,b:n,a:o}=this;return[t,e,n]=[t,e,n].map(t=>r(255*t*100)/100),o=r(100*o)/100,{r:t,g:e,b:n,a:o}}toRgbString(){const{r:t,g:e,b:n,a:o}=this.toRgb(),[s,h,i]=[t,e,n].map(r);return 1===o?`rgb(${s}, ${h}, ${i})`:`rgba(${s}, ${h}, ${i}, ${o})`}toRgbCSS4String(){const{r:t,g:e,b:n,a:o}=this.toRgb(),[s,h,i]=[t,e,n].map(r);return`rgb(${s} ${h} ${i}${1===o?"":` / ${r(100*o)}%`})`}toHex(t){const{r:r,g:e,b:n,a:o}=this.toRgb();return 1===o?N(r,e,n,t):I(r,e,n,o,t)}toHexString(t){return"#"+this.toHex(t)}toHex8(t){const{r:r,g:e,b:n,a:o}=this.toRgb();return I(r,e,n,o,t)}toHex8String(t){return"#"+this.toHex8(t)}toHsv(){const{r:t,g:r,b:e,a:n}=this,{h:o,s:s,v:h}=C(t,r,e);return{h:o,s:s,v:h,a:n}}toHsl(){const{r:t,g:r,b:e,a:n}=this,{h:o,s:s,l:h}=R(t,r,e);return{h:o,s:s,l:h,a:n}}toHslString(){let{h:t,s:e,l:n,a:o}=this.toHsl();return t=r(360*t),e=r(100*e),n=r(100*n),o=r(100*o)/100,1===o?`hsl(${t}, ${e}%, ${n}%)`:`hsla(${t}, ${e}%, ${n}%, ${o})`}toHslCSS4String(){let{h:t,s:e,l:n,a:o}=this.toHsl();t=r(360*t),e=r(100*e),n=r(100*n),o=r(100*o);return`hsl(${t}deg ${e}% ${n}%${o<100?` / ${r(o)}%`:""})`}toHwb(){const{r:t,g:r,b:e,a:n}=this,{h:o,w:s,b:h}=F(t,r,e);return{h:o,w:s,b:h,a:n}}toHwbString(){let{h:t,w:e,b:n,a:o}=this.toHwb();t=r(360*t),e=r(100*e),n=r(100*n),o=r(100*o);return`hwb(${t}deg ${e}% ${n}%${o<100?` / ${r(o)}%`:""})`}setAlpha(t){return"number"!=typeof t||(this.a=S(t)),this}saturate(r){if("number"!=typeof r)return this;const{h:e,s:n,l:o}=this.toHsl(),{r:s,g:h,b:i}=y(e,p(n+r/100),o);return t(this,{r:s,g:h,b:i}),this}desaturate(t){return"number"==typeof t?this.saturate(-t):this}greyscale(){return this.saturate(-100)}lighten(r){if("number"!=typeof r)return this;const{h:e,s:n,l:o}=this.toHsl(),{r:s,g:h,b:i}=y(e,n,p(o+r/100));return t(this,{r:s,g:h,b:i}),this}darken(t){return"number"==typeof t?this.lighten(-t):this}spin(r){if("number"!=typeof r)return this;const{h:e,s:n,l:o}=this.toHsl(),{r:s,g:h,b:i}=y(p((360*e+r)%360/360),n,o);return t(this,{r:s,g:h,b:i}),this}clone(){return new _(this)}toString(t){const{format:r}=this;return"hex"===r?this.toHexString(t):"hsl"===r?this.toHslString():"hwb"===r?this.toHwbString():this.toRgbString()}}t(_,{ANGLES:"deg|rad|grad|turn",CSS_ANGLE:i,CSS_INTEGER:"[-\\+]?\\d+%?",CSS_NUMBER:"[-\\+]?\\d*\\.\\d+%?",CSS_UNIT:a,CSS_UNIT2:u,PERMISSIVE_MATCH:c,matchers:g,isOnePointZero:b,isPercentage:f,isValidCSSUnit:d,isColorName:m,pad2:v,clamp01:p,bound01:x,boundAlpha:S,getRGBFromName:A,convertHexToDecimal:w,convertDecimalToHex:$,rgbToHsl:R,rgbToHex:N,rgbToHsv:C,rgbToHwb:F,rgbaToHex:I,hslToRgb:y,hsvToRgb:E,hueToRgb:T,hwbToRgb:M,parseIntFromHex:H,stringInputToObject:j,inputToRGB:k,roundPart:r,getElementStyle:n,setElementStyle:o,ObjectAssign:t});class P{constructor(...t){let e=0,n=12,o=10,s=[.5];if(3===t.length)[e,n,o]=t;else if(2===t.length&&([n,o]=t,[n,o].some(t=>t<1)))throw TypeError("ColorPalette: both arguments must be higher than 0.");const h=[],i=360/n,a=r((o-(o%2?1:0))/2),u=[[1,2,3],[4,5],[6,7],[8,9],[10,11],[12,13]],l=u.find(t=>t.includes(o)),c=l?[.25,.2,.15,.11,.09,.075][u.indexOf(l)]:100/(o+(o%2?0:1))/100;for(let t=1;t<a+1;t+=1)s=[...s,.5+c*t];for(let t=1;t<o-a;t+=1)s=[.5-c*t,...s];for(let t=0;t<n;t+=1){const r=(e+t*i)%360/360;s.forEach(t=>{h.push(new _({h:r,s:1,l:t}))})}this.hue=e,this.hueSteps=n,this.lightSteps=o,this.colors=h}}return t(P,{Color:_}),P}));