@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/max-chroma.js CHANGED
@@ -2,239 +2,1352 @@ import { clamp01 } from "@thi.ng/math/interval";
2
2
  import { mix, mixBilinear } from "@thi.ng/math/mix";
3
3
  import { fract } from "@thi.ng/math/prec";
4
4
  import { lch } from "./lch/lch.js";
5
- // LUT generated via tools/max-chroma.ts
6
- /** @internal */
7
5
  const MAX_CHROMA = [
8
- [
9
- 4, 22, 30, 34, 38, 43, 47, 52, 56, 61, 66, 70, 75, 80, 84, 74, 65, 56,
10
- 47, 39, 32, 25, 18, 11, 5,
11
- ],
12
- [
13
- 4, 22, 30, 34, 39, 43, 48, 52, 57, 61, 66, 71, 75, 80, 82, 72, 63, 54,
14
- 46, 38, 31, 24, 17, 10, 5,
15
- ],
16
- [
17
- 4, 22, 31, 35, 39, 44, 49, 53, 58, 63, 67, 72, 77, 82, 83, 73, 63, 54,
18
- 46, 38, 31, 24, 17, 10, 5,
19
- ],
20
- [
21
- 3, 20, 32, 37, 41, 46, 51, 55, 60, 65, 70, 75, 80, 85, 85, 74, 65, 55,
22
- 47, 39, 31, 24, 17, 10, 5,
23
- ],
24
- [
25
- 2, 15, 27, 39, 44, 49, 54, 59, 64, 69, 75, 80, 85, 90, 89, 78, 67, 57,
26
- 48, 40, 32, 25, 18, 10, 5,
27
- ],
28
- [
29
- 2, 11, 22, 32, 43, 53, 59, 64, 70, 76, 81, 87, 93, 99, 96, 84, 72, 61,
30
- 51, 42, 34, 26, 19, 11, 5,
31
- ],
32
- [
33
- 1, 10, 19, 27, 36, 44, 52, 59, 66, 72, 77, 83, 88, 93, 98, 92, 79, 67,
34
- 56, 45, 36, 28, 20, 12, 6,
35
- ],
36
- [
37
- 1, 9, 17, 24, 31, 38, 45, 51, 57, 61, 66, 70, 75, 79, 84, 88, 90, 75,
38
- 62, 51, 40, 30, 22, 13, 6,
39
- ],
40
- [
41
- 1, 8, 15, 22, 28, 35, 40, 46, 50, 54, 58, 62, 66, 70, 74, 78, 82, 86,
42
- 73, 59, 46, 35, 24, 15, 7,
43
- ],
44
- [
45
- 1, 7, 13, 20, 26, 32, 37, 42, 46, 50, 53, 57, 61, 64, 68, 72, 75, 79,
46
- 83, 72, 55, 41, 29, 18, 8,
47
- ],
48
- [
49
- 1, 7, 12, 19, 25, 30, 35, 40, 43, 47, 50, 54, 57, 60, 64, 67, 71, 74,
50
- 78, 81, 73, 53, 36, 22, 10,
51
- ],
52
- [
53
- 1, 7, 12, 19, 24, 29, 34, 38, 42, 45, 48, 51, 55, 58, 61, 65, 68, 71,
54
- 75, 78, 82, 79, 50, 29, 12,
55
- ],
56
- [
57
- 1, 7, 12, 19, 24, 29, 33, 37, 41, 44, 47, 50, 54, 57, 60, 63, 67, 70,
58
- 73, 77, 80, 83, 86, 48, 19,
59
- ],
60
- [
61
- 1, 7, 12, 19, 24, 29, 33, 37, 41, 44, 47, 50, 53, 57, 60, 63, 66, 70,
62
- 73, 76, 80, 83, 86, 90, 45,
63
- ],
64
- [
65
- 1, 7, 12, 19, 25, 30, 34, 38, 41, 44, 48, 51, 54, 58, 61, 64, 67, 71,
66
- 74, 78, 81, 84, 88, 91, 94,
67
- ],
68
- [
69
- 1, 7, 13, 20, 26, 31, 35, 39, 43, 46, 49, 53, 56, 60, 63, 66, 70, 73,
70
- 77, 80, 84, 87, 91, 94, 60,
71
- ],
72
- [
73
- 1, 8, 15, 21, 27, 33, 37, 42, 45, 49, 52, 56, 59, 63, 66, 70, 74, 77,
74
- 81, 85, 88, 92, 96, 96, 44,
75
- ],
76
- [
77
- 1, 9, 16, 23, 29, 35, 40, 45, 49, 52, 56, 60, 64, 68, 72, 76, 80, 84,
78
- 87, 91, 95, 99, 103, 77, 35,
79
- ],
80
- [
81
- 1, 10, 18, 26, 33, 39, 44, 48, 52, 56, 60, 65, 69, 73, 77, 82, 86, 90,
82
- 94, 99, 103, 107, 110, 65, 30,
83
- ],
84
- [
85
- 2, 10, 21, 28, 30, 34, 37, 40, 44, 47, 51, 55, 58, 62, 65, 69, 73, 76,
86
- 80, 83, 87, 91, 94, 58, 26,
87
- ],
88
- [
89
- 1, 10, 18, 24, 26, 29, 32, 35, 38, 41, 44, 47, 50, 53, 56, 60, 63, 66,
90
- 69, 72, 75, 78, 81, 52, 24,
91
- ],
92
- [
93
- 1, 8, 15, 21, 23, 26, 28, 31, 33, 36, 39, 42, 44, 47, 50, 53, 55, 58,
94
- 61, 64, 66, 69, 72, 48, 22,
95
- ],
96
- [
97
- 1, 7, 13, 19, 21, 23, 25, 28, 30, 33, 35, 37, 40, 42, 45, 47, 50, 52,
98
- 55, 57, 60, 62, 65, 46, 21,
99
- ],
100
- [
101
- 1, 7, 12, 17, 19, 21, 23, 25, 28, 30, 32, 34, 37, 39, 41, 44, 46, 48,
102
- 50, 53, 55, 57, 60, 44, 20,
103
- ],
104
- [
105
- 1, 6, 11, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 39, 41, 43, 45,
106
- 47, 49, 51, 54, 56, 43, 19,
107
- ],
108
- [
109
- 1, 6, 11, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43,
110
- 45, 47, 49, 51, 53, 43, 19,
111
- ],
112
- [
113
- 1, 6, 10, 15, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 35, 37, 39, 41,
114
- 43, 45, 47, 49, 51, 43, 20,
115
- ],
116
- [
117
- 1, 6, 10, 13, 16, 18, 20, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41,
118
- 43, 45, 46, 48, 49, 33, 16,
119
- ],
120
- [
121
- 1, 6, 10, 13, 16, 18, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41,
122
- 42, 44, 46, 48, 37, 25, 11,
123
- ],
124
- [
125
- 1, 7, 11, 13, 16, 18, 20, 22, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41,
126
- 43, 45, 47, 40, 30, 20, 10,
127
- ],
128
- [
129
- 1, 7, 11, 15, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42,
130
- 44, 46, 43, 34, 26, 17, 8,
131
- ],
132
- [
133
- 1, 7, 12, 15, 17, 19, 21, 23, 25, 27, 29, 31, 34, 36, 38, 40, 42, 44,
134
- 46, 46, 38, 31, 23, 15, 7,
135
- ],
136
- [
137
- 1, 8, 13, 16, 18, 20, 22, 25, 27, 29, 31, 33, 36, 38, 40, 42, 45, 47,
138
- 49, 42, 35, 28, 21, 13, 7,
139
- ],
140
- [
141
- 1, 10, 15, 18, 20, 22, 24, 27, 29, 31, 34, 36, 39, 41, 43, 46, 48, 51,
142
- 46, 40, 33, 26, 19, 12, 6,
143
- ],
144
- [
145
- 2, 10, 17, 19, 22, 24, 27, 29, 32, 35, 37, 40, 43, 45, 48, 51, 53, 51,
146
- 44, 38, 31, 25, 18, 11, 6,
147
- ],
148
- [
149
- 2, 13, 19, 22, 25, 28, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 56, 49,
150
- 43, 37, 30, 24, 18, 11, 6,
151
- ],
152
- [
153
- 3, 17, 22, 26, 29, 32, 36, 39, 42, 46, 49, 53, 56, 60, 63, 62, 55, 49,
154
- 43, 36, 30, 24, 18, 11, 6,
155
- ],
156
- [
157
- 6, 23, 27, 31, 35, 39, 43, 47, 51, 56, 60, 64, 68, 73, 69, 62, 56, 49,
158
- 43, 36, 30, 24, 18, 11, 6,
159
- ],
160
- [
161
- 18, 30, 34, 39, 44, 49, 54, 60, 65, 70, 76, 81, 84, 77, 70, 64, 57, 50,
162
- 44, 37, 31, 25, 18, 11, 6,
163
- ],
164
- [
165
- 12, 41, 45, 52, 59, 66, 73, 80, 87, 94, 102, 95, 88, 81, 74, 66, 60, 53,
166
- 46, 39, 32, 26, 19, 11, 6,
167
- ],
168
- [
169
- 9, 58, 65, 75, 85, 96, 106, 117, 124, 116, 109, 101, 93, 86, 78, 71, 63,
170
- 56, 49, 42, 34, 27, 20, 12, 6,
171
- ],
172
- [
173
- 7, 42, 58, 66, 74, 82, 91, 99, 108, 117, 119, 110, 102, 94, 85, 77, 69,
174
- 61, 53, 45, 37, 30, 22, 13, 7,
175
- ],
176
- [
177
- 6, 34, 47, 53, 60, 67, 74, 81, 88, 95, 102, 109, 114, 105, 95, 86, 77,
178
- 68, 59, 51, 42, 33, 25, 16, 8,
179
- ],
180
- [
181
- 5, 29, 40, 46, 52, 57, 63, 70, 76, 82, 88, 94, 100, 107, 110, 100, 89,
182
- 79, 69, 58, 48, 38, 29, 19, 9,
183
- ],
184
- [
185
- 4, 26, 36, 41, 46, 52, 57, 62, 68, 73, 79, 85, 90, 96, 101, 104, 91, 79,
186
- 67, 56, 45, 35, 26, 17, 8,
187
- ],
188
- [
189
- 4, 24, 34, 38, 43, 48, 53, 58, 63, 68, 73, 78, 83, 88, 94, 91, 79, 69,
190
- 59, 49, 40, 31, 23, 15, 7,
191
- ],
192
- [
193
- 4, 23, 32, 36, 40, 45, 50, 55, 59, 64, 69, 74, 79, 84, 89, 82, 72, 62,
194
- 53, 44, 36, 28, 20, 12, 6,
195
- ],
196
- [
197
- 4, 22, 31, 35, 39, 44, 48, 53, 57, 62, 67, 71, 76, 81, 86, 77, 67, 58,
198
- 50, 41, 33, 26, 19, 11, 6,
199
- ],
6
+ [
7
+ 4,
8
+ 22,
9
+ 30,
10
+ 34,
11
+ 38,
12
+ 43,
13
+ 47,
14
+ 52,
15
+ 56,
16
+ 61,
17
+ 66,
18
+ 70,
19
+ 75,
20
+ 80,
21
+ 84,
22
+ 74,
23
+ 65,
24
+ 56,
25
+ 47,
26
+ 39,
27
+ 32,
28
+ 25,
29
+ 18,
30
+ 11,
31
+ 5
32
+ ],
33
+ [
34
+ 4,
35
+ 22,
36
+ 30,
37
+ 34,
38
+ 39,
39
+ 43,
40
+ 48,
41
+ 52,
42
+ 57,
43
+ 61,
44
+ 66,
45
+ 71,
46
+ 75,
47
+ 80,
48
+ 82,
49
+ 72,
50
+ 63,
51
+ 54,
52
+ 46,
53
+ 38,
54
+ 31,
55
+ 24,
56
+ 17,
57
+ 10,
58
+ 5
59
+ ],
60
+ [
61
+ 4,
62
+ 22,
63
+ 31,
64
+ 35,
65
+ 39,
66
+ 44,
67
+ 49,
68
+ 53,
69
+ 58,
70
+ 63,
71
+ 67,
72
+ 72,
73
+ 77,
74
+ 82,
75
+ 83,
76
+ 73,
77
+ 63,
78
+ 54,
79
+ 46,
80
+ 38,
81
+ 31,
82
+ 24,
83
+ 17,
84
+ 10,
85
+ 5
86
+ ],
87
+ [
88
+ 3,
89
+ 20,
90
+ 32,
91
+ 37,
92
+ 41,
93
+ 46,
94
+ 51,
95
+ 55,
96
+ 60,
97
+ 65,
98
+ 70,
99
+ 75,
100
+ 80,
101
+ 85,
102
+ 85,
103
+ 74,
104
+ 65,
105
+ 55,
106
+ 47,
107
+ 39,
108
+ 31,
109
+ 24,
110
+ 17,
111
+ 10,
112
+ 5
113
+ ],
114
+ [
115
+ 2,
116
+ 15,
117
+ 27,
118
+ 39,
119
+ 44,
120
+ 49,
121
+ 54,
122
+ 59,
123
+ 64,
124
+ 69,
125
+ 75,
126
+ 80,
127
+ 85,
128
+ 90,
129
+ 89,
130
+ 78,
131
+ 67,
132
+ 57,
133
+ 48,
134
+ 40,
135
+ 32,
136
+ 25,
137
+ 18,
138
+ 10,
139
+ 5
140
+ ],
141
+ [
142
+ 2,
143
+ 11,
144
+ 22,
145
+ 32,
146
+ 43,
147
+ 53,
148
+ 59,
149
+ 64,
150
+ 70,
151
+ 76,
152
+ 81,
153
+ 87,
154
+ 93,
155
+ 99,
156
+ 96,
157
+ 84,
158
+ 72,
159
+ 61,
160
+ 51,
161
+ 42,
162
+ 34,
163
+ 26,
164
+ 19,
165
+ 11,
166
+ 5
167
+ ],
168
+ [
169
+ 1,
170
+ 10,
171
+ 19,
172
+ 27,
173
+ 36,
174
+ 44,
175
+ 52,
176
+ 59,
177
+ 66,
178
+ 72,
179
+ 77,
180
+ 83,
181
+ 88,
182
+ 93,
183
+ 98,
184
+ 92,
185
+ 79,
186
+ 67,
187
+ 56,
188
+ 45,
189
+ 36,
190
+ 28,
191
+ 20,
192
+ 12,
193
+ 6
194
+ ],
195
+ [
196
+ 1,
197
+ 9,
198
+ 17,
199
+ 24,
200
+ 31,
201
+ 38,
202
+ 45,
203
+ 51,
204
+ 57,
205
+ 61,
206
+ 66,
207
+ 70,
208
+ 75,
209
+ 79,
210
+ 84,
211
+ 88,
212
+ 90,
213
+ 75,
214
+ 62,
215
+ 51,
216
+ 40,
217
+ 30,
218
+ 22,
219
+ 13,
220
+ 6
221
+ ],
222
+ [
223
+ 1,
224
+ 8,
225
+ 15,
226
+ 22,
227
+ 28,
228
+ 35,
229
+ 40,
230
+ 46,
231
+ 50,
232
+ 54,
233
+ 58,
234
+ 62,
235
+ 66,
236
+ 70,
237
+ 74,
238
+ 78,
239
+ 82,
240
+ 86,
241
+ 73,
242
+ 59,
243
+ 46,
244
+ 35,
245
+ 24,
246
+ 15,
247
+ 7
248
+ ],
249
+ [
250
+ 1,
251
+ 7,
252
+ 13,
253
+ 20,
254
+ 26,
255
+ 32,
256
+ 37,
257
+ 42,
258
+ 46,
259
+ 50,
260
+ 53,
261
+ 57,
262
+ 61,
263
+ 64,
264
+ 68,
265
+ 72,
266
+ 75,
267
+ 79,
268
+ 83,
269
+ 72,
270
+ 55,
271
+ 41,
272
+ 29,
273
+ 18,
274
+ 8
275
+ ],
276
+ [
277
+ 1,
278
+ 7,
279
+ 12,
280
+ 19,
281
+ 25,
282
+ 30,
283
+ 35,
284
+ 40,
285
+ 43,
286
+ 47,
287
+ 50,
288
+ 54,
289
+ 57,
290
+ 60,
291
+ 64,
292
+ 67,
293
+ 71,
294
+ 74,
295
+ 78,
296
+ 81,
297
+ 73,
298
+ 53,
299
+ 36,
300
+ 22,
301
+ 10
302
+ ],
303
+ [
304
+ 1,
305
+ 7,
306
+ 12,
307
+ 19,
308
+ 24,
309
+ 29,
310
+ 34,
311
+ 38,
312
+ 42,
313
+ 45,
314
+ 48,
315
+ 51,
316
+ 55,
317
+ 58,
318
+ 61,
319
+ 65,
320
+ 68,
321
+ 71,
322
+ 75,
323
+ 78,
324
+ 82,
325
+ 79,
326
+ 50,
327
+ 29,
328
+ 12
329
+ ],
330
+ [
331
+ 1,
332
+ 7,
333
+ 12,
334
+ 19,
335
+ 24,
336
+ 29,
337
+ 33,
338
+ 37,
339
+ 41,
340
+ 44,
341
+ 47,
342
+ 50,
343
+ 54,
344
+ 57,
345
+ 60,
346
+ 63,
347
+ 67,
348
+ 70,
349
+ 73,
350
+ 77,
351
+ 80,
352
+ 83,
353
+ 86,
354
+ 48,
355
+ 19
356
+ ],
357
+ [
358
+ 1,
359
+ 7,
360
+ 12,
361
+ 19,
362
+ 24,
363
+ 29,
364
+ 33,
365
+ 37,
366
+ 41,
367
+ 44,
368
+ 47,
369
+ 50,
370
+ 53,
371
+ 57,
372
+ 60,
373
+ 63,
374
+ 66,
375
+ 70,
376
+ 73,
377
+ 76,
378
+ 80,
379
+ 83,
380
+ 86,
381
+ 90,
382
+ 45
383
+ ],
384
+ [
385
+ 1,
386
+ 7,
387
+ 12,
388
+ 19,
389
+ 25,
390
+ 30,
391
+ 34,
392
+ 38,
393
+ 41,
394
+ 44,
395
+ 48,
396
+ 51,
397
+ 54,
398
+ 58,
399
+ 61,
400
+ 64,
401
+ 67,
402
+ 71,
403
+ 74,
404
+ 78,
405
+ 81,
406
+ 84,
407
+ 88,
408
+ 91,
409
+ 94
410
+ ],
411
+ [
412
+ 1,
413
+ 7,
414
+ 13,
415
+ 20,
416
+ 26,
417
+ 31,
418
+ 35,
419
+ 39,
420
+ 43,
421
+ 46,
422
+ 49,
423
+ 53,
424
+ 56,
425
+ 60,
426
+ 63,
427
+ 66,
428
+ 70,
429
+ 73,
430
+ 77,
431
+ 80,
432
+ 84,
433
+ 87,
434
+ 91,
435
+ 94,
436
+ 60
437
+ ],
438
+ [
439
+ 1,
440
+ 8,
441
+ 15,
442
+ 21,
443
+ 27,
444
+ 33,
445
+ 37,
446
+ 42,
447
+ 45,
448
+ 49,
449
+ 52,
450
+ 56,
451
+ 59,
452
+ 63,
453
+ 66,
454
+ 70,
455
+ 74,
456
+ 77,
457
+ 81,
458
+ 85,
459
+ 88,
460
+ 92,
461
+ 96,
462
+ 96,
463
+ 44
464
+ ],
465
+ [
466
+ 1,
467
+ 9,
468
+ 16,
469
+ 23,
470
+ 29,
471
+ 35,
472
+ 40,
473
+ 45,
474
+ 49,
475
+ 52,
476
+ 56,
477
+ 60,
478
+ 64,
479
+ 68,
480
+ 72,
481
+ 76,
482
+ 80,
483
+ 84,
484
+ 87,
485
+ 91,
486
+ 95,
487
+ 99,
488
+ 103,
489
+ 77,
490
+ 35
491
+ ],
492
+ [
493
+ 1,
494
+ 10,
495
+ 18,
496
+ 26,
497
+ 33,
498
+ 39,
499
+ 44,
500
+ 48,
501
+ 52,
502
+ 56,
503
+ 60,
504
+ 65,
505
+ 69,
506
+ 73,
507
+ 77,
508
+ 82,
509
+ 86,
510
+ 90,
511
+ 94,
512
+ 99,
513
+ 103,
514
+ 107,
515
+ 110,
516
+ 65,
517
+ 30
518
+ ],
519
+ [
520
+ 2,
521
+ 10,
522
+ 21,
523
+ 28,
524
+ 30,
525
+ 34,
526
+ 37,
527
+ 40,
528
+ 44,
529
+ 47,
530
+ 51,
531
+ 55,
532
+ 58,
533
+ 62,
534
+ 65,
535
+ 69,
536
+ 73,
537
+ 76,
538
+ 80,
539
+ 83,
540
+ 87,
541
+ 91,
542
+ 94,
543
+ 58,
544
+ 26
545
+ ],
546
+ [
547
+ 1,
548
+ 10,
549
+ 18,
550
+ 24,
551
+ 26,
552
+ 29,
553
+ 32,
554
+ 35,
555
+ 38,
556
+ 41,
557
+ 44,
558
+ 47,
559
+ 50,
560
+ 53,
561
+ 56,
562
+ 60,
563
+ 63,
564
+ 66,
565
+ 69,
566
+ 72,
567
+ 75,
568
+ 78,
569
+ 81,
570
+ 52,
571
+ 24
572
+ ],
573
+ [
574
+ 1,
575
+ 8,
576
+ 15,
577
+ 21,
578
+ 23,
579
+ 26,
580
+ 28,
581
+ 31,
582
+ 33,
583
+ 36,
584
+ 39,
585
+ 42,
586
+ 44,
587
+ 47,
588
+ 50,
589
+ 53,
590
+ 55,
591
+ 58,
592
+ 61,
593
+ 64,
594
+ 66,
595
+ 69,
596
+ 72,
597
+ 48,
598
+ 22
599
+ ],
600
+ [
601
+ 1,
602
+ 7,
603
+ 13,
604
+ 19,
605
+ 21,
606
+ 23,
607
+ 25,
608
+ 28,
609
+ 30,
610
+ 33,
611
+ 35,
612
+ 37,
613
+ 40,
614
+ 42,
615
+ 45,
616
+ 47,
617
+ 50,
618
+ 52,
619
+ 55,
620
+ 57,
621
+ 60,
622
+ 62,
623
+ 65,
624
+ 46,
625
+ 21
626
+ ],
627
+ [
628
+ 1,
629
+ 7,
630
+ 12,
631
+ 17,
632
+ 19,
633
+ 21,
634
+ 23,
635
+ 25,
636
+ 28,
637
+ 30,
638
+ 32,
639
+ 34,
640
+ 37,
641
+ 39,
642
+ 41,
643
+ 44,
644
+ 46,
645
+ 48,
646
+ 50,
647
+ 53,
648
+ 55,
649
+ 57,
650
+ 60,
651
+ 44,
652
+ 20
653
+ ],
654
+ [
655
+ 1,
656
+ 6,
657
+ 11,
658
+ 16,
659
+ 18,
660
+ 20,
661
+ 22,
662
+ 24,
663
+ 26,
664
+ 28,
665
+ 30,
666
+ 32,
667
+ 34,
668
+ 36,
669
+ 39,
670
+ 41,
671
+ 43,
672
+ 45,
673
+ 47,
674
+ 49,
675
+ 51,
676
+ 54,
677
+ 56,
678
+ 43,
679
+ 19
680
+ ],
681
+ [
682
+ 1,
683
+ 6,
684
+ 11,
685
+ 15,
686
+ 17,
687
+ 19,
688
+ 21,
689
+ 23,
690
+ 25,
691
+ 27,
692
+ 29,
693
+ 31,
694
+ 33,
695
+ 35,
696
+ 37,
697
+ 39,
698
+ 41,
699
+ 43,
700
+ 45,
701
+ 47,
702
+ 49,
703
+ 51,
704
+ 53,
705
+ 43,
706
+ 19
707
+ ],
708
+ [
709
+ 1,
710
+ 6,
711
+ 10,
712
+ 15,
713
+ 16,
714
+ 18,
715
+ 20,
716
+ 22,
717
+ 24,
718
+ 26,
719
+ 28,
720
+ 30,
721
+ 32,
722
+ 34,
723
+ 35,
724
+ 37,
725
+ 39,
726
+ 41,
727
+ 43,
728
+ 45,
729
+ 47,
730
+ 49,
731
+ 51,
732
+ 43,
733
+ 20
734
+ ],
735
+ [
736
+ 1,
737
+ 6,
738
+ 10,
739
+ 13,
740
+ 16,
741
+ 18,
742
+ 20,
743
+ 21,
744
+ 23,
745
+ 25,
746
+ 27,
747
+ 29,
748
+ 31,
749
+ 33,
750
+ 35,
751
+ 37,
752
+ 39,
753
+ 41,
754
+ 43,
755
+ 45,
756
+ 46,
757
+ 48,
758
+ 49,
759
+ 33,
760
+ 16
761
+ ],
762
+ [
763
+ 1,
764
+ 6,
765
+ 10,
766
+ 13,
767
+ 16,
768
+ 18,
769
+ 19,
770
+ 21,
771
+ 23,
772
+ 25,
773
+ 27,
774
+ 29,
775
+ 31,
776
+ 33,
777
+ 35,
778
+ 37,
779
+ 39,
780
+ 41,
781
+ 42,
782
+ 44,
783
+ 46,
784
+ 48,
785
+ 37,
786
+ 25,
787
+ 11
788
+ ],
789
+ [
790
+ 1,
791
+ 7,
792
+ 11,
793
+ 13,
794
+ 16,
795
+ 18,
796
+ 20,
797
+ 22,
798
+ 23,
799
+ 25,
800
+ 27,
801
+ 29,
802
+ 31,
803
+ 33,
804
+ 35,
805
+ 37,
806
+ 39,
807
+ 41,
808
+ 43,
809
+ 45,
810
+ 47,
811
+ 40,
812
+ 30,
813
+ 20,
814
+ 10
815
+ ],
816
+ [
817
+ 1,
818
+ 7,
819
+ 11,
820
+ 15,
821
+ 16,
822
+ 18,
823
+ 20,
824
+ 22,
825
+ 24,
826
+ 26,
827
+ 28,
828
+ 30,
829
+ 32,
830
+ 34,
831
+ 36,
832
+ 38,
833
+ 40,
834
+ 42,
835
+ 44,
836
+ 46,
837
+ 43,
838
+ 34,
839
+ 26,
840
+ 17,
841
+ 8
842
+ ],
843
+ [
844
+ 1,
845
+ 7,
846
+ 12,
847
+ 15,
848
+ 17,
849
+ 19,
850
+ 21,
851
+ 23,
852
+ 25,
853
+ 27,
854
+ 29,
855
+ 31,
856
+ 34,
857
+ 36,
858
+ 38,
859
+ 40,
860
+ 42,
861
+ 44,
862
+ 46,
863
+ 46,
864
+ 38,
865
+ 31,
866
+ 23,
867
+ 15,
868
+ 7
869
+ ],
870
+ [
871
+ 1,
872
+ 8,
873
+ 13,
874
+ 16,
875
+ 18,
876
+ 20,
877
+ 22,
878
+ 25,
879
+ 27,
880
+ 29,
881
+ 31,
882
+ 33,
883
+ 36,
884
+ 38,
885
+ 40,
886
+ 42,
887
+ 45,
888
+ 47,
889
+ 49,
890
+ 42,
891
+ 35,
892
+ 28,
893
+ 21,
894
+ 13,
895
+ 7
896
+ ],
897
+ [
898
+ 1,
899
+ 10,
900
+ 15,
901
+ 18,
902
+ 20,
903
+ 22,
904
+ 24,
905
+ 27,
906
+ 29,
907
+ 31,
908
+ 34,
909
+ 36,
910
+ 39,
911
+ 41,
912
+ 43,
913
+ 46,
914
+ 48,
915
+ 51,
916
+ 46,
917
+ 40,
918
+ 33,
919
+ 26,
920
+ 19,
921
+ 12,
922
+ 6
923
+ ],
924
+ [
925
+ 2,
926
+ 10,
927
+ 17,
928
+ 19,
929
+ 22,
930
+ 24,
931
+ 27,
932
+ 29,
933
+ 32,
934
+ 35,
935
+ 37,
936
+ 40,
937
+ 43,
938
+ 45,
939
+ 48,
940
+ 51,
941
+ 53,
942
+ 51,
943
+ 44,
944
+ 38,
945
+ 31,
946
+ 25,
947
+ 18,
948
+ 11,
949
+ 6
950
+ ],
951
+ [
952
+ 2,
953
+ 13,
954
+ 19,
955
+ 22,
956
+ 25,
957
+ 28,
958
+ 30,
959
+ 33,
960
+ 36,
961
+ 39,
962
+ 42,
963
+ 45,
964
+ 48,
965
+ 51,
966
+ 54,
967
+ 57,
968
+ 56,
969
+ 49,
970
+ 43,
971
+ 37,
972
+ 30,
973
+ 24,
974
+ 18,
975
+ 11,
976
+ 6
977
+ ],
978
+ [
979
+ 3,
980
+ 17,
981
+ 22,
982
+ 26,
983
+ 29,
984
+ 32,
985
+ 36,
986
+ 39,
987
+ 42,
988
+ 46,
989
+ 49,
990
+ 53,
991
+ 56,
992
+ 60,
993
+ 63,
994
+ 62,
995
+ 55,
996
+ 49,
997
+ 43,
998
+ 36,
999
+ 30,
1000
+ 24,
1001
+ 18,
1002
+ 11,
1003
+ 6
1004
+ ],
1005
+ [
1006
+ 6,
1007
+ 23,
1008
+ 27,
1009
+ 31,
1010
+ 35,
1011
+ 39,
1012
+ 43,
1013
+ 47,
1014
+ 51,
1015
+ 56,
1016
+ 60,
1017
+ 64,
1018
+ 68,
1019
+ 73,
1020
+ 69,
1021
+ 62,
1022
+ 56,
1023
+ 49,
1024
+ 43,
1025
+ 36,
1026
+ 30,
1027
+ 24,
1028
+ 18,
1029
+ 11,
1030
+ 6
1031
+ ],
1032
+ [
1033
+ 18,
1034
+ 30,
1035
+ 34,
1036
+ 39,
1037
+ 44,
1038
+ 49,
1039
+ 54,
1040
+ 60,
1041
+ 65,
1042
+ 70,
1043
+ 76,
1044
+ 81,
1045
+ 84,
1046
+ 77,
1047
+ 70,
1048
+ 64,
1049
+ 57,
1050
+ 50,
1051
+ 44,
1052
+ 37,
1053
+ 31,
1054
+ 25,
1055
+ 18,
1056
+ 11,
1057
+ 6
1058
+ ],
1059
+ [
1060
+ 12,
1061
+ 41,
1062
+ 45,
1063
+ 52,
1064
+ 59,
1065
+ 66,
1066
+ 73,
1067
+ 80,
1068
+ 87,
1069
+ 94,
1070
+ 102,
1071
+ 95,
1072
+ 88,
1073
+ 81,
1074
+ 74,
1075
+ 66,
1076
+ 60,
1077
+ 53,
1078
+ 46,
1079
+ 39,
1080
+ 32,
1081
+ 26,
1082
+ 19,
1083
+ 11,
1084
+ 6
1085
+ ],
1086
+ [
1087
+ 9,
1088
+ 58,
1089
+ 65,
1090
+ 75,
1091
+ 85,
1092
+ 96,
1093
+ 106,
1094
+ 117,
1095
+ 124,
1096
+ 116,
1097
+ 109,
1098
+ 101,
1099
+ 93,
1100
+ 86,
1101
+ 78,
1102
+ 71,
1103
+ 63,
1104
+ 56,
1105
+ 49,
1106
+ 42,
1107
+ 34,
1108
+ 27,
1109
+ 20,
1110
+ 12,
1111
+ 6
1112
+ ],
1113
+ [
1114
+ 7,
1115
+ 42,
1116
+ 58,
1117
+ 66,
1118
+ 74,
1119
+ 82,
1120
+ 91,
1121
+ 99,
1122
+ 108,
1123
+ 117,
1124
+ 119,
1125
+ 110,
1126
+ 102,
1127
+ 94,
1128
+ 85,
1129
+ 77,
1130
+ 69,
1131
+ 61,
1132
+ 53,
1133
+ 45,
1134
+ 37,
1135
+ 30,
1136
+ 22,
1137
+ 13,
1138
+ 7
1139
+ ],
1140
+ [
1141
+ 6,
1142
+ 34,
1143
+ 47,
1144
+ 53,
1145
+ 60,
1146
+ 67,
1147
+ 74,
1148
+ 81,
1149
+ 88,
1150
+ 95,
1151
+ 102,
1152
+ 109,
1153
+ 114,
1154
+ 105,
1155
+ 95,
1156
+ 86,
1157
+ 77,
1158
+ 68,
1159
+ 59,
1160
+ 51,
1161
+ 42,
1162
+ 33,
1163
+ 25,
1164
+ 16,
1165
+ 8
1166
+ ],
1167
+ [
1168
+ 5,
1169
+ 29,
1170
+ 40,
1171
+ 46,
1172
+ 52,
1173
+ 57,
1174
+ 63,
1175
+ 70,
1176
+ 76,
1177
+ 82,
1178
+ 88,
1179
+ 94,
1180
+ 100,
1181
+ 107,
1182
+ 110,
1183
+ 100,
1184
+ 89,
1185
+ 79,
1186
+ 69,
1187
+ 58,
1188
+ 48,
1189
+ 38,
1190
+ 29,
1191
+ 19,
1192
+ 9
1193
+ ],
1194
+ [
1195
+ 4,
1196
+ 26,
1197
+ 36,
1198
+ 41,
1199
+ 46,
1200
+ 52,
1201
+ 57,
1202
+ 62,
1203
+ 68,
1204
+ 73,
1205
+ 79,
1206
+ 85,
1207
+ 90,
1208
+ 96,
1209
+ 101,
1210
+ 104,
1211
+ 91,
1212
+ 79,
1213
+ 67,
1214
+ 56,
1215
+ 45,
1216
+ 35,
1217
+ 26,
1218
+ 17,
1219
+ 8
1220
+ ],
1221
+ [
1222
+ 4,
1223
+ 24,
1224
+ 34,
1225
+ 38,
1226
+ 43,
1227
+ 48,
1228
+ 53,
1229
+ 58,
1230
+ 63,
1231
+ 68,
1232
+ 73,
1233
+ 78,
1234
+ 83,
1235
+ 88,
1236
+ 94,
1237
+ 91,
1238
+ 79,
1239
+ 69,
1240
+ 59,
1241
+ 49,
1242
+ 40,
1243
+ 31,
1244
+ 23,
1245
+ 15,
1246
+ 7
1247
+ ],
1248
+ [
1249
+ 4,
1250
+ 23,
1251
+ 32,
1252
+ 36,
1253
+ 40,
1254
+ 45,
1255
+ 50,
1256
+ 55,
1257
+ 59,
1258
+ 64,
1259
+ 69,
1260
+ 74,
1261
+ 79,
1262
+ 84,
1263
+ 89,
1264
+ 82,
1265
+ 72,
1266
+ 62,
1267
+ 53,
1268
+ 44,
1269
+ 36,
1270
+ 28,
1271
+ 20,
1272
+ 12,
1273
+ 6
1274
+ ],
1275
+ [
1276
+ 4,
1277
+ 22,
1278
+ 31,
1279
+ 35,
1280
+ 39,
1281
+ 44,
1282
+ 48,
1283
+ 53,
1284
+ 57,
1285
+ 62,
1286
+ 67,
1287
+ 71,
1288
+ 76,
1289
+ 81,
1290
+ 86,
1291
+ 77,
1292
+ 67,
1293
+ 58,
1294
+ 50,
1295
+ 41,
1296
+ 33,
1297
+ 26,
1298
+ 19,
1299
+ 11,
1300
+ 6
1301
+ ]
200
1302
  ];
201
1303
  const RES_H = MAX_CHROMA.length;
202
1304
  const RES_L = MAX_CHROMA[0].length;
203
- export const maxChroma = (l, h) => {
204
- h = fract(h);
205
- l = clamp01(l);
206
- if (l < 1) {
207
- const h1 = (h * RES_H) | 0;
208
- const l1 = (l * RES_L) | 0;
209
- const lutH1 = MAX_CHROMA[h1];
210
- const lutH2 = MAX_CHROMA[(h1 + 1) % RES_H];
211
- return (mixBilinear(lutH1[l1], lutH2[l1], l1 < RES_L - 1 ? lutH1[l1 + 1] : 0, l1 < RES_L - 1 ? lutH2[l1 + 1] : 0, h * RES_H - h1, l * RES_L - l1) * 0.01);
212
- }
213
- return 0;
1305
+ const maxChroma = (l, h) => {
1306
+ h = fract(h);
1307
+ l = clamp01(l);
1308
+ if (l < 1) {
1309
+ const h1 = h * RES_H | 0;
1310
+ const l1 = l * RES_L | 0;
1311
+ const lutH1 = MAX_CHROMA[h1];
1312
+ const lutH2 = MAX_CHROMA[(h1 + 1) % RES_H];
1313
+ return mixBilinear(
1314
+ lutH1[l1],
1315
+ lutH2[l1],
1316
+ l1 < RES_L - 1 ? lutH1[l1 + 1] : 0,
1317
+ l1 < RES_L - 1 ? lutH2[l1 + 1] : 0,
1318
+ h * RES_H - h1,
1319
+ l * RES_L - l1
1320
+ ) * 0.01;
1321
+ }
1322
+ return 0;
214
1323
  };
215
- export const lchMaxChroma = (l, h, a = 1) => lch(l, maxChroma(l, h), h, a);
216
- export const maxLumaChroma = (h) => {
217
- const h1 = (fract(h) * RES_H) | 0;
218
- const t = h * RES_H - h1;
219
- const [l1, c1] = __maxLC(MAX_CHROMA[h1]);
220
- const [l2, c2] = __maxLC(MAX_CHROMA[(h1 + 1) % RES_H]);
221
- return { l: mix(l1, l2, t) / RES_L, c: mix(c1, c2, t) * 0.01 };
1324
+ const lchMaxChroma = (l, h, a = 1) => lch(l, maxChroma(l, h), h, a);
1325
+ const maxLumaChroma = (h) => {
1326
+ const h1 = fract(h) * RES_H | 0;
1327
+ const t = h * RES_H - h1;
1328
+ const [l1, c1] = __maxLC(MAX_CHROMA[h1]);
1329
+ const [l2, c2] = __maxLC(MAX_CHROMA[(h1 + 1) % RES_H]);
1330
+ return { l: mix(l1, l2, t) / RES_L, c: mix(c1, c2, t) * 0.01 };
222
1331
  };
223
- export const lchMaxLumaChroma = (h, a = 1) => {
224
- const max = maxLumaChroma(h);
225
- return lch(max.l, max.c, h, a);
1332
+ const lchMaxLumaChroma = (h, a = 1) => {
1333
+ const max = maxLumaChroma(h);
1334
+ return lch(max.l, max.c, h, a);
226
1335
  };
227
- /** @internal */
228
1336
  const __maxLC = (chroma) => {
229
- let maxL = 0;
230
- let maxC = 0;
231
- for (let i = RES_L; i-- > 0;) {
232
- if (chroma[i] >= maxC) {
233
- maxC = chroma[i];
234
- maxL = i;
235
- }
236
- else
237
- break;
238
- }
239
- return [maxL, maxC];
1337
+ let maxL = 0;
1338
+ let maxC = 0;
1339
+ for (let i = RES_L; i-- > 0; ) {
1340
+ if (chroma[i] >= maxC) {
1341
+ maxC = chroma[i];
1342
+ maxL = i;
1343
+ } else
1344
+ break;
1345
+ }
1346
+ return [maxL, maxC];
1347
+ };
1348
+ export {
1349
+ lchMaxChroma,
1350
+ lchMaxLumaChroma,
1351
+ maxChroma,
1352
+ maxLumaChroma
240
1353
  };