@thi.ng/color 5.6.2 → 5.6.4

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.
Files changed (111) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/README.md +1 -1
  3. package/alpha.js +6 -10
  4. package/analog.js +35 -67
  5. package/api/constants.js +128 -156
  6. package/api/gradients.js +0 -1
  7. package/api/names.js +154 -151
  8. package/api/ranges.js +0 -1
  9. package/api/system.js +21 -26
  10. package/api.js +27 -32
  11. package/clamp.js +18 -29
  12. package/closest-hue.js +6 -12
  13. package/color-range.js +159 -228
  14. package/color.js +29 -28
  15. package/contrast.js +7 -17
  16. package/convert.js +19 -40
  17. package/cosine-gradients.js +177 -229
  18. package/css/css.js +27 -53
  19. package/css/parse-css.js +94 -160
  20. package/defcolor.js +97 -108
  21. package/distance.js +96 -187
  22. package/gradients.js +29 -37
  23. package/hcy/hcy-rgb.js +20 -13
  24. package/hcy/hcy.js +9 -11
  25. package/hsi/hsi-rgb.js +32 -30
  26. package/hsi/hsi.js +9 -11
  27. package/hsl/hsl-css.js +9 -10
  28. package/hsl/hsl-hsv.js +12 -9
  29. package/hsl/hsl-rgb.js +14 -6
  30. package/hsl/hsl.js +14 -16
  31. package/hsv/hsv-css.js +4 -1
  32. package/hsv/hsv-hsl.js +11 -8
  33. package/hsv/hsv-rgb.js +14 -6
  34. package/hsv/hsv.js +14 -16
  35. package/hue.js +12 -12
  36. package/int/int-css.js +10 -6
  37. package/int/int-int.js +6 -10
  38. package/int/int-rgb.js +16 -5
  39. package/int/int-srgb.js +22 -4
  40. package/int/int.js +136 -142
  41. package/internal/css.js +16 -12
  42. package/internal/dispatch.js +6 -2
  43. package/internal/ensure.js +18 -16
  44. package/internal/matrix-ops.js +39 -41
  45. package/internal/scale.js +4 -2
  46. package/invert.js +46 -39
  47. package/is-black.js +12 -5
  48. package/is-gamut.js +8 -13
  49. package/is-gray.js +12 -5
  50. package/is-white.js +14 -7
  51. package/lab/lab-css.js +4 -9
  52. package/lab/lab-lab.js +6 -2
  53. package/lab/lab-lch.js +18 -10
  54. package/lab/lab-rgb.js +6 -14
  55. package/lab/lab-xyz.js +16 -20
  56. package/lab/lab50.js +18 -15
  57. package/lab/lab65.js +18 -15
  58. package/lch/lch-css.js +4 -9
  59. package/lch/lch.js +18 -23
  60. package/lighten.js +13 -17
  61. package/linear.js +6 -16
  62. package/luminance-rgb.js +14 -22
  63. package/luminance.js +16 -14
  64. package/max-chroma.js +1340 -227
  65. package/mix.js +34 -82
  66. package/oklab/oklab-css.js +4 -9
  67. package/oklab/oklab-rgb.js +17 -23
  68. package/oklab/oklab-xyz.js +22 -9
  69. package/oklab/oklab.js +19 -22
  70. package/oklch/oklab-oklch.js +10 -11
  71. package/oklch/oklch-css.js +4 -9
  72. package/oklch/oklch-oklab.js +9 -9
  73. package/oklch/oklch.js +14 -20
  74. package/package.json +19 -17
  75. package/rgb/hue-rgb.js +14 -11
  76. package/rgb/kelvin-rgba.js +23 -22
  77. package/rgb/rgb-css.js +4 -1
  78. package/rgb/rgb-hcv.js +14 -15
  79. package/rgb/rgb-hcy.js +10 -14
  80. package/rgb/rgb-hsi.js +13 -8
  81. package/rgb/rgb-hsl.js +8 -5
  82. package/rgb/rgb-hsv.js +7 -4
  83. package/rgb/rgb-lab.js +6 -18
  84. package/rgb/rgb-oklab.js +13 -19
  85. package/rgb/rgb-srgb.js +18 -8
  86. package/rgb/rgb-xyz.js +6 -19
  87. package/rgb/rgb-ycc.js +12 -17
  88. package/rgb/rgb.js +25 -22
  89. package/rotate.js +25 -38
  90. package/sort.js +24 -72
  91. package/srgb/srgb-css.js +9 -9
  92. package/srgb/srgb-int.js +6 -10
  93. package/srgb/srgb-rgb.js +18 -8
  94. package/srgb/srgb.js +16 -13
  95. package/strategies.js +42 -112
  96. package/swatches.js +28 -5
  97. package/tint.js +27 -53
  98. package/transform.js +274 -149
  99. package/variations.js +10 -9
  100. package/xyy/xyy-xyz.js +12 -11
  101. package/xyy/xyy.js +16 -13
  102. package/xyz/wavelength-xyz.js +14 -28
  103. package/xyz/xyz-lab.js +17 -26
  104. package/xyz/xyz-oklab.js +4 -1
  105. package/xyz/xyz-rgb.js +6 -18
  106. package/xyz/xyz-xyy.js +13 -12
  107. package/xyz/xyz-xyz.js +6 -2
  108. package/xyz/xyz50.js +20 -17
  109. package/xyz/xyz65.js +20 -17
  110. package/ycc/ycc-rgb.js +14 -19
  111. package/ycc/ycc.js +12 -9
package/api/names.js CHANGED
@@ -1,152 +1,155 @@
1
- export const CSS_NAMES = {
2
- aliceblue: "f0f8ff",
3
- antiquewhite: "faebd7",
4
- aqua: "0ff",
5
- aquamarine: "7fffd4",
6
- azure: "f0ffff",
7
- beige: "f5f5dc",
8
- bisque: "ffe4c4",
9
- black: "000",
10
- blanchedalmond: "ffebcd",
11
- blue: "00f",
12
- blueviolet: "8a2be2",
13
- brown: "a52a2a",
14
- burlywood: "deb887",
15
- cadetblue: "5f9ea0",
16
- chartreuse: "7fff00",
17
- chocolate: "d2691e",
18
- coral: "ff7f50",
19
- cornflowerblue: "6495ed",
20
- cornsilk: "fff8dc",
21
- crimson: "dc143c",
22
- cyan: "0ff",
23
- darkblue: "00008b",
24
- darkcyan: "008b8b",
25
- darkgoldenrod: "b8860b",
26
- darkgray: "a9a9a9",
27
- darkgreen: "006400",
28
- darkgrey: "a9a9a9",
29
- darkkhaki: "bdb76b",
30
- darkmagenta: "8b008b",
31
- darkolivegreen: "556b2f",
32
- darkorange: "ff8c00",
33
- darkorchid: "9932cc",
34
- darkred: "8b0000",
35
- darksalmon: "e9967a",
36
- darkseagreen: "8fbc8f",
37
- darkslateblue: "483d8b",
38
- darkslategray: "2f4f4f",
39
- darkslategrey: "2f4f4f",
40
- darkturquoise: "00ced1",
41
- darkviolet: "9400d3",
42
- deeppink: "ff1493",
43
- deepskyblue: "00bfff",
44
- dimgray: "696969",
45
- dimgrey: "696969",
46
- dodgerblue: "1e90ff",
47
- firebrick: "b22222",
48
- floralwhite: "fffaf0",
49
- forestgreen: "228b22",
50
- fuchsia: "f0f",
51
- gainsboro: "dcdcdc",
52
- ghostwhite: "f8f8ff",
53
- gold: "ffd700",
54
- goldenrod: "daa520",
55
- gray: "808080",
56
- grey: "808080",
57
- green: "008000",
58
- greenyellow: "adff2f",
59
- honeydew: "f0fff0",
60
- hotpink: "ff69b4",
61
- indianred: "cd5c5c",
62
- indigo: "4b0082",
63
- ivory: "fffff0",
64
- khaki: "f0e68c",
65
- lavender: "e6e6fa",
66
- lavenderblush: "fff0f5",
67
- lawngreen: "7cfc00",
68
- lemonchiffon: "fffacd",
69
- lightblue: "add8e6",
70
- lightcoral: "f08080",
71
- lightcyan: "e0ffff",
72
- lightgoldenrodyellow: "fafad2",
73
- lightgray: "d3d3d3",
74
- lightgreen: "90ee90",
75
- lightgrey: "d3d3d3",
76
- lightpink: "ffb6c1",
77
- lightsalmon: "ffa07a",
78
- lightseagreen: "20b2aa",
79
- lightskyblue: "87cefa",
80
- lightslategray: "789",
81
- lightslategrey: "789",
82
- lightsteelblue: "b0c4de",
83
- lightyellow: "ffffe0",
84
- lime: "0f0",
85
- limegreen: "32cd32",
86
- linen: "faf0e6",
87
- magenta: "f0f",
88
- maroon: "800000",
89
- mediumaquamarine: "66cdaa",
90
- mediumblue: "0000cd",
91
- mediumorchid: "ba55d3",
92
- mediumpurple: "9370db",
93
- mediumseagreen: "3cb371",
94
- mediumslateblue: "7b68ee",
95
- mediumspringgreen: "00fa9a",
96
- mediumturquoise: "48d1cc",
97
- mediumvioletred: "c71585",
98
- midnightblue: "191970",
99
- mintcream: "f5fffa",
100
- mistyrose: "ffe4e1",
101
- moccasin: "ffe4b5",
102
- navajowhite: "ffdead",
103
- navy: "000080",
104
- oldlace: "fdf5e6",
105
- olive: "808000",
106
- olivedrab: "6b8e23",
107
- orange: "ffa500",
108
- orangered: "ff4500",
109
- orchid: "da70d6",
110
- palegoldenrod: "eee8aa",
111
- palegreen: "98fb98",
112
- paleturquoise: "afeeee",
113
- palevioletred: "db7093",
114
- papayawhip: "ffefd5",
115
- peachpuff: "ffdab9",
116
- peru: "cd853f",
117
- pink: "ffc0cb",
118
- plum: "dda0dd",
119
- powderblue: "b0e0e6",
120
- purple: "800080",
121
- red: "f00",
122
- rosybrown: "bc8f8f",
123
- royalblue: "4169e1",
124
- saddlebrown: "8b4513",
125
- salmon: "fa8072",
126
- sandybrown: "f4a460",
127
- seagreen: "2e8b57",
128
- seashell: "fff5ee",
129
- sienna: "a0522d",
130
- silver: "c0c0c0",
131
- skyblue: "87ceeb",
132
- slateblue: "6a5acd",
133
- slategray: "708090",
134
- slategrey: "708090",
135
- snow: "fffafa",
136
- springgreen: "00ff7f",
137
- steelblue: "4682b4",
138
- tan: "d2b48c",
139
- teal: "008080",
140
- thistle: "d8bfd8",
141
- tomato: "ff6347",
142
- turquoise: "40e0d0",
143
- violet: "ee82ee",
144
- wheat: "f5deb3",
145
- white: "fff",
146
- whitesmoke: "f5f5f5",
147
- yellow: "ff0",
148
- yellowgreen: "9acd32",
149
- // additions
150
- transparent: "0000",
151
- rebeccapurple: "639",
1
+ const CSS_NAMES = {
2
+ aliceblue: "f0f8ff",
3
+ antiquewhite: "faebd7",
4
+ aqua: "0ff",
5
+ aquamarine: "7fffd4",
6
+ azure: "f0ffff",
7
+ beige: "f5f5dc",
8
+ bisque: "ffe4c4",
9
+ black: "000",
10
+ blanchedalmond: "ffebcd",
11
+ blue: "00f",
12
+ blueviolet: "8a2be2",
13
+ brown: "a52a2a",
14
+ burlywood: "deb887",
15
+ cadetblue: "5f9ea0",
16
+ chartreuse: "7fff00",
17
+ chocolate: "d2691e",
18
+ coral: "ff7f50",
19
+ cornflowerblue: "6495ed",
20
+ cornsilk: "fff8dc",
21
+ crimson: "dc143c",
22
+ cyan: "0ff",
23
+ darkblue: "00008b",
24
+ darkcyan: "008b8b",
25
+ darkgoldenrod: "b8860b",
26
+ darkgray: "a9a9a9",
27
+ darkgreen: "006400",
28
+ darkgrey: "a9a9a9",
29
+ darkkhaki: "bdb76b",
30
+ darkmagenta: "8b008b",
31
+ darkolivegreen: "556b2f",
32
+ darkorange: "ff8c00",
33
+ darkorchid: "9932cc",
34
+ darkred: "8b0000",
35
+ darksalmon: "e9967a",
36
+ darkseagreen: "8fbc8f",
37
+ darkslateblue: "483d8b",
38
+ darkslategray: "2f4f4f",
39
+ darkslategrey: "2f4f4f",
40
+ darkturquoise: "00ced1",
41
+ darkviolet: "9400d3",
42
+ deeppink: "ff1493",
43
+ deepskyblue: "00bfff",
44
+ dimgray: "696969",
45
+ dimgrey: "696969",
46
+ dodgerblue: "1e90ff",
47
+ firebrick: "b22222",
48
+ floralwhite: "fffaf0",
49
+ forestgreen: "228b22",
50
+ fuchsia: "f0f",
51
+ gainsboro: "dcdcdc",
52
+ ghostwhite: "f8f8ff",
53
+ gold: "ffd700",
54
+ goldenrod: "daa520",
55
+ gray: "808080",
56
+ grey: "808080",
57
+ green: "008000",
58
+ greenyellow: "adff2f",
59
+ honeydew: "f0fff0",
60
+ hotpink: "ff69b4",
61
+ indianred: "cd5c5c",
62
+ indigo: "4b0082",
63
+ ivory: "fffff0",
64
+ khaki: "f0e68c",
65
+ lavender: "e6e6fa",
66
+ lavenderblush: "fff0f5",
67
+ lawngreen: "7cfc00",
68
+ lemonchiffon: "fffacd",
69
+ lightblue: "add8e6",
70
+ lightcoral: "f08080",
71
+ lightcyan: "e0ffff",
72
+ lightgoldenrodyellow: "fafad2",
73
+ lightgray: "d3d3d3",
74
+ lightgreen: "90ee90",
75
+ lightgrey: "d3d3d3",
76
+ lightpink: "ffb6c1",
77
+ lightsalmon: "ffa07a",
78
+ lightseagreen: "20b2aa",
79
+ lightskyblue: "87cefa",
80
+ lightslategray: "789",
81
+ lightslategrey: "789",
82
+ lightsteelblue: "b0c4de",
83
+ lightyellow: "ffffe0",
84
+ lime: "0f0",
85
+ limegreen: "32cd32",
86
+ linen: "faf0e6",
87
+ magenta: "f0f",
88
+ maroon: "800000",
89
+ mediumaquamarine: "66cdaa",
90
+ mediumblue: "0000cd",
91
+ mediumorchid: "ba55d3",
92
+ mediumpurple: "9370db",
93
+ mediumseagreen: "3cb371",
94
+ mediumslateblue: "7b68ee",
95
+ mediumspringgreen: "00fa9a",
96
+ mediumturquoise: "48d1cc",
97
+ mediumvioletred: "c71585",
98
+ midnightblue: "191970",
99
+ mintcream: "f5fffa",
100
+ mistyrose: "ffe4e1",
101
+ moccasin: "ffe4b5",
102
+ navajowhite: "ffdead",
103
+ navy: "000080",
104
+ oldlace: "fdf5e6",
105
+ olive: "808000",
106
+ olivedrab: "6b8e23",
107
+ orange: "ffa500",
108
+ orangered: "ff4500",
109
+ orchid: "da70d6",
110
+ palegoldenrod: "eee8aa",
111
+ palegreen: "98fb98",
112
+ paleturquoise: "afeeee",
113
+ palevioletred: "db7093",
114
+ papayawhip: "ffefd5",
115
+ peachpuff: "ffdab9",
116
+ peru: "cd853f",
117
+ pink: "ffc0cb",
118
+ plum: "dda0dd",
119
+ powderblue: "b0e0e6",
120
+ purple: "800080",
121
+ red: "f00",
122
+ rosybrown: "bc8f8f",
123
+ royalblue: "4169e1",
124
+ saddlebrown: "8b4513",
125
+ salmon: "fa8072",
126
+ sandybrown: "f4a460",
127
+ seagreen: "2e8b57",
128
+ seashell: "fff5ee",
129
+ sienna: "a0522d",
130
+ silver: "c0c0c0",
131
+ skyblue: "87ceeb",
132
+ slateblue: "6a5acd",
133
+ slategray: "708090",
134
+ slategrey: "708090",
135
+ snow: "fffafa",
136
+ springgreen: "00ff7f",
137
+ steelblue: "4682b4",
138
+ tan: "d2b48c",
139
+ teal: "008080",
140
+ thistle: "d8bfd8",
141
+ tomato: "ff6347",
142
+ turquoise: "40e0d0",
143
+ violet: "ee82ee",
144
+ wheat: "f5deb3",
145
+ white: "fff",
146
+ whitesmoke: "f5f5f5",
147
+ yellow: "ff0",
148
+ yellowgreen: "9acd32",
149
+ // additions
150
+ transparent: "0000",
151
+ rebeccapurple: "639"
152
+ };
153
+ export {
154
+ CSS_NAMES
152
155
  };
package/api/ranges.js CHANGED
@@ -1 +0,0 @@
1
- export {};
package/api/system.js CHANGED
@@ -1,27 +1,22 @@
1
- /**
2
- * Default CSS system colors used by {@link parseCss}. Use
3
- * {@link setSystemColors} to provide custom defaults.
4
- */
5
- export let CSS_SYSTEM_COLORS = {
6
- canvas: "fff",
7
- canvastext: "000",
8
- linktext: "001ee4",
9
- visitedtext: "4e2386",
10
- activetext: "eb3323",
11
- buttonface: "ddd",
12
- buttontext: "000",
13
- buttonborder: "000",
14
- field: "fff",
15
- fieldtext: "000",
16
- highlight: "bbd5fb",
17
- highlighttext: "000",
18
- mark: "000",
19
- marktext: "fff",
20
- graytext: "808080",
1
+ let CSS_SYSTEM_COLORS = {
2
+ canvas: "fff",
3
+ canvastext: "000",
4
+ linktext: "001ee4",
5
+ visitedtext: "4e2386",
6
+ activetext: "eb3323",
7
+ buttonface: "ddd",
8
+ buttontext: "000",
9
+ buttonborder: "000",
10
+ field: "fff",
11
+ fieldtext: "000",
12
+ highlight: "bbd5fb",
13
+ highlighttext: "000",
14
+ mark: "000",
15
+ marktext: "fff",
16
+ graytext: "808080"
17
+ };
18
+ const setSystemColors = (cols) => Object.assign(CSS_SYSTEM_COLORS, cols);
19
+ export {
20
+ CSS_SYSTEM_COLORS,
21
+ setSystemColors
21
22
  };
22
- /**
23
- * Merges {@link CSS_SYSTEM_COLORS} w/ new values.
24
- *
25
- * @param cols -
26
- */
27
- export const setSystemColors = (cols) => Object.assign(CSS_SYSTEM_COLORS, cols);
package/api.js CHANGED
@@ -1,33 +1,28 @@
1
- /**
2
- * Hue names in radial order, e.g. used by {@link namedHueRgb}.
3
- */
4
- export var Hue;
5
- (function (Hue) {
6
- Hue[Hue["RED"] = 0] = "RED";
7
- Hue[Hue["ORANGE"] = 1] = "ORANGE";
8
- Hue[Hue["YELLOW"] = 2] = "YELLOW";
9
- Hue[Hue["CHARTREUSE"] = 3] = "CHARTREUSE";
10
- Hue[Hue["GREEN"] = 4] = "GREEN";
11
- Hue[Hue["SPRING_GREEN"] = 5] = "SPRING_GREEN";
12
- Hue[Hue["CYAN"] = 6] = "CYAN";
13
- Hue[Hue["AZURE"] = 7] = "AZURE";
14
- Hue[Hue["BLUE"] = 8] = "BLUE";
15
- Hue[Hue["VIOLET"] = 9] = "VIOLET";
16
- Hue[Hue["MAGENTA"] = 10] = "MAGENTA";
17
- Hue[Hue["ROSE"] = 11] = "ROSE";
18
- })(Hue || (Hue = {}));
19
- /**
20
- * Result type returned by {@link parseCss}, a simple wrapper for a raw color
21
- * array and color mode.
22
- */
23
- export class ParsedColor {
24
- mode;
25
- value;
26
- constructor(mode, value) {
27
- this.mode = mode;
28
- this.value = value;
29
- }
30
- deref() {
31
- return this.value;
32
- }
1
+ var Hue = /* @__PURE__ */ ((Hue2) => {
2
+ Hue2[Hue2["RED"] = 0] = "RED";
3
+ Hue2[Hue2["ORANGE"] = 1] = "ORANGE";
4
+ Hue2[Hue2["YELLOW"] = 2] = "YELLOW";
5
+ Hue2[Hue2["CHARTREUSE"] = 3] = "CHARTREUSE";
6
+ Hue2[Hue2["GREEN"] = 4] = "GREEN";
7
+ Hue2[Hue2["SPRING_GREEN"] = 5] = "SPRING_GREEN";
8
+ Hue2[Hue2["CYAN"] = 6] = "CYAN";
9
+ Hue2[Hue2["AZURE"] = 7] = "AZURE";
10
+ Hue2[Hue2["BLUE"] = 8] = "BLUE";
11
+ Hue2[Hue2["VIOLET"] = 9] = "VIOLET";
12
+ Hue2[Hue2["MAGENTA"] = 10] = "MAGENTA";
13
+ Hue2[Hue2["ROSE"] = 11] = "ROSE";
14
+ return Hue2;
15
+ })(Hue || {});
16
+ class ParsedColor {
17
+ constructor(mode, value) {
18
+ this.mode = mode;
19
+ this.value = value;
20
+ }
21
+ deref() {
22
+ return this.value;
23
+ }
33
24
  }
25
+ export {
26
+ Hue,
27
+ ParsedColor
28
+ };
package/clamp.js CHANGED
@@ -2,32 +2,21 @@ import { clamp01 } from "@thi.ng/math/interval";
2
2
  import { fract } from "@thi.ng/math/prec";
3
3
  import { setC4 } from "@thi.ng/vectors/setc";
4
4
  import { __ensureAlpha } from "./internal/ensure.js";
5
- /**
6
- * Clamps all color channels to [0,1] interval and calls `ensureAlpha` to ensure
7
- * alpha channel is defined (if missing sets it to `alpha`, default: 1).
8
- *
9
- * @remarks
10
- * If `out` is null, the resulting color will be written back into `src`.
11
- *
12
- * Note: The result of this function might be different than
13
- * {@link TypedColor.clamp}. The latter is taking into account pre-configured
14
- * channel value ranges (per color mode). See {@link ChannelSpec.range} for
15
- * details.
16
- *
17
- * @param out - result
18
- * @param src - source color
19
- * @param alpha - alpha value
20
- */
21
- export const clamp = (out, src, alpha = 1) => setC4(out || src, clamp01(src[0]), clamp01(src[1]), clamp01(src[2]), __ensureAlpha(src[3], alpha));
22
- /**
23
- * Similar to {@link clamp}, but calls `ensureHue` to fold (instead of
24
- * clamping) the hue into [0,1] interval.
25
- *
26
- * @remarks
27
- * If `out` is null, the resulting color will be written back into `src`.
28
- *
29
- * @param out - result
30
- * @param src - source color
31
- * @param alpha - alpha value
32
- */
33
- export const clampH = (out, src, alpha = 1) => setC4(out || src, fract(src[0]), clamp01(src[1]), clamp01(src[2]), __ensureAlpha(src[3], alpha));
5
+ const clamp = (out, src, alpha = 1) => setC4(
6
+ out || src,
7
+ clamp01(src[0]),
8
+ clamp01(src[1]),
9
+ clamp01(src[2]),
10
+ __ensureAlpha(src[3], alpha)
11
+ );
12
+ const clampH = (out, src, alpha = 1) => setC4(
13
+ out || src,
14
+ fract(src[0]),
15
+ clamp01(src[1]),
16
+ clamp01(src[2]),
17
+ __ensureAlpha(src[3], alpha)
18
+ );
19
+ export {
20
+ clamp,
21
+ clampH
22
+ };
package/closest-hue.js CHANGED
@@ -1,13 +1,7 @@
1
1
  import { fract } from "@thi.ng/math/prec";
2
- /**
3
- * Returns the {@link Hue} constant of the closest of 12 defined hues.
4
- *
5
- * @param h - normalized hue
6
- */
7
- export const closestHue = (h) => Math.round(fract(h) * 12) % 12;
8
- /**
9
- * Returns the {@link Hue} constant of the closest primary or secondary hue.
10
- *
11
- * @param h - normalized hue
12
- */
13
- export const closestPrimaryHue = (h) => closestHue(h) & 0xe;
2
+ const closestHue = (h) => Math.round(fract(h) * 12) % 12;
3
+ const closestPrimaryHue = (h) => closestHue(h) & 14;
4
+ export {
5
+ closestHue,
6
+ closestPrimaryHue
7
+ };