color-bits 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/.claude/settings.local.json +9 -0
  2. package/README.md +30 -14
  3. package/benchmarks/compare-oklab.ts +44 -0
  4. package/benchmarks/compare-srgb.ts +59 -0
  5. package/benchmarks/compare.ts +46 -0
  6. package/benchmarks/parse.ts +41 -0
  7. package/build/conversion/channels.d.ts +61 -0
  8. package/build/conversion/channels.js +353 -0
  9. package/build/conversion/channels.js.map +1 -0
  10. package/build/{convert.d.ts → conversion/color-spaces.d.ts} +25 -23
  11. package/build/conversion/color-spaces.js +263 -0
  12. package/build/conversion/color-spaces.js.map +1 -0
  13. package/build/core/bits.d.ts +28 -0
  14. package/build/{core.js → core/bits.js} +25 -26
  15. package/build/core/bits.js.map +1 -0
  16. package/build/core/bytes.d.ts +5 -0
  17. package/build/core/bytes.js +12 -0
  18. package/build/core/bytes.js.map +1 -0
  19. package/build/css.d.ts +1 -0
  20. package/build/css.js +18 -0
  21. package/build/css.js.map +1 -0
  22. package/build/formatting/index.d.ts +27 -0
  23. package/build/{format.js → formatting/index.js} +13 -67
  24. package/build/formatting/index.js.map +1 -0
  25. package/build/index.d.ts +6 -4
  26. package/build/index.js +6 -4
  27. package/build/index.js.map +1 -1
  28. package/build/namedColors.d.ts +1 -0
  29. package/build/namedColors.js +18 -0
  30. package/build/namedColors.js.map +1 -0
  31. package/build/operations/adjust.d.ts +19 -0
  32. package/build/operations/adjust.js +40 -0
  33. package/build/operations/adjust.js.map +1 -0
  34. package/build/operations/blend.d.ts +9 -0
  35. package/build/operations/blend.js +19 -0
  36. package/build/operations/blend.js.map +1 -0
  37. package/build/operations/color-mix.d.ts +20 -0
  38. package/build/operations/color-mix.js +144 -0
  39. package/build/operations/color-mix.js.map +1 -0
  40. package/build/operations/luminance.d.ts +7 -0
  41. package/build/operations/luminance.js +20 -0
  42. package/build/operations/luminance.js.map +1 -0
  43. package/build/parsing/calc.d.ts +8 -0
  44. package/build/parsing/calc.js +205 -0
  45. package/build/parsing/calc.js.map +1 -0
  46. package/build/parsing/color-mix.d.ts +8 -0
  47. package/build/parsing/color-mix.js +70 -0
  48. package/build/parsing/color-mix.js.map +1 -0
  49. package/build/parsing/css.d.ts +23 -0
  50. package/build/parsing/css.js +115 -0
  51. package/build/parsing/css.js.map +1 -0
  52. package/build/parsing/fast.d.ts +19 -0
  53. package/build/parsing/fast.js +184 -0
  54. package/build/parsing/fast.js.map +1 -0
  55. package/build/parsing/named-colors.d.ts +12 -0
  56. package/build/parsing/named-colors.js +68 -0
  57. package/build/parsing/named-colors.js.map +1 -0
  58. package/build/parsing/relative.d.ts +9 -0
  59. package/build/parsing/relative.js +158 -0
  60. package/build/parsing/relative.js.map +1 -0
  61. package/build/parsing/tokenizer.d.ts +16 -0
  62. package/build/parsing/tokenizer.js +78 -0
  63. package/build/parsing/tokenizer.js.map +1 -0
  64. package/build/parsing/values.d.ts +41 -0
  65. package/build/parsing/values.js +139 -0
  66. package/build/parsing/values.js.map +1 -0
  67. package/package.json +30 -12
  68. package/benchmarks/index.ts +0 -35
  69. package/build/bit.d.ts +0 -3
  70. package/build/bit.js +0 -29
  71. package/build/bit.js.map +0 -1
  72. package/build/convert.js +0 -347
  73. package/build/convert.js.map +0 -1
  74. package/build/core.d.ts +0 -27
  75. package/build/core.js.map +0 -1
  76. package/build/format.d.ts +0 -27
  77. package/build/format.js.map +0 -1
  78. package/build/functions.d.ts +0 -33
  79. package/build/functions.js +0 -95
  80. package/build/functions.js.map +0 -1
  81. package/build/parse.d.ts +0 -17
  82. package/build/parse.js +0 -392
  83. package/build/parse.js.map +0 -1
package/build/parse.js DELETED
@@ -1,392 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.parse = parse;
27
- exports.parseHex = parseHex;
28
- exports.parseColor = parseColor;
29
- const core_1 = require("./core");
30
- const convert = __importStar(require("./convert"));
31
- const HASH = '#'.charCodeAt(0);
32
- const PERCENT = '%'.charCodeAt(0);
33
- const G = 'g'.charCodeAt(0);
34
- const N = 'n'.charCodeAt(0);
35
- const D = 'd'.charCodeAt(0);
36
- const E = 'e'.charCodeAt(0);
37
- /**
38
- * Approximative CSS colorspace string pattern, e.g. rgb(), color()
39
- */
40
- const PATTERN = (() => {
41
- const NAME = '(\\w+)';
42
- const SEPARATOR = '[\\s,\\/]';
43
- const VALUE = '([^\\s,\\/]+)';
44
- const SEPARATOR_THEN_VALUE = `(?:${SEPARATOR}+${VALUE})`;
45
- return new RegExp(`${NAME}\\(
46
- ${SEPARATOR}*
47
- ${VALUE}
48
- ${SEPARATOR_THEN_VALUE}
49
- ${SEPARATOR_THEN_VALUE}
50
- ${SEPARATOR_THEN_VALUE}?
51
- ${SEPARATOR_THEN_VALUE}?
52
- ${SEPARATOR}*
53
- \\)`.replace(/\s/g, ''));
54
- })();
55
- /**
56
- * Parse CSS color
57
- * @param color CSS color string: #xxx, #xxxxxx, #xxxxxxxx, rgb(), rgba(), hsl(), hsla(), color()
58
- */
59
- function parse(color) {
60
- if (color.charCodeAt(0) === HASH) {
61
- return parseHex(color);
62
- }
63
- else {
64
- return parseColor(color);
65
- }
66
- }
67
- /**
68
- * Parse hexadecimal CSS color
69
- * @param color Hex color string: #xxx, #xxxxxx, #xxxxxxxx
70
- */
71
- function parseHex(color) {
72
- let r = 0x00;
73
- let g = 0x00;
74
- let b = 0x00;
75
- let a = 0xff;
76
- switch (color.length) {
77
- // #59f
78
- case 4: {
79
- r = (hexValue(color.charCodeAt(1)) << 4) + hexValue(color.charCodeAt(1));
80
- g = (hexValue(color.charCodeAt(2)) << 4) + hexValue(color.charCodeAt(2));
81
- b = (hexValue(color.charCodeAt(3)) << 4) + hexValue(color.charCodeAt(3));
82
- break;
83
- }
84
- // #5599ff
85
- case 7: {
86
- r = (hexValue(color.charCodeAt(1)) << 4) + hexValue(color.charCodeAt(2));
87
- g = (hexValue(color.charCodeAt(3)) << 4) + hexValue(color.charCodeAt(4));
88
- b = (hexValue(color.charCodeAt(5)) << 4) + hexValue(color.charCodeAt(6));
89
- break;
90
- }
91
- // #5599ff88
92
- case 9: {
93
- r = (hexValue(color.charCodeAt(1)) << 4) + hexValue(color.charCodeAt(2));
94
- g = (hexValue(color.charCodeAt(3)) << 4) + hexValue(color.charCodeAt(4));
95
- b = (hexValue(color.charCodeAt(5)) << 4) + hexValue(color.charCodeAt(6));
96
- a = (hexValue(color.charCodeAt(7)) << 4) + hexValue(color.charCodeAt(8));
97
- break;
98
- }
99
- default: {
100
- break;
101
- }
102
- }
103
- return (0, core_1.newColor)(r, g, b, a);
104
- }
105
- // https://lemire.me/blog/2019/04/17/parsing-short-hexadecimal-strings-efficiently/
106
- function hexValue(c) {
107
- return (c & 0xF) + 9 * (c >> 6);
108
- }
109
- /**
110
- * Parse CSS color
111
- * https://developer.mozilla.org/en-US/docs/Web/CSS/color_value
112
- * @param color CSS color string: rgb(), rgba(), hsl(), hsla(), color()
113
- */
114
- function parseColor(color) {
115
- const match = PATTERN.exec(color);
116
- if (match === null) {
117
- throw new Error(`Color.parse(): invalid CSS color: "${color}"`);
118
- }
119
- const format = match[1];
120
- const p1 = match[2];
121
- const p2 = match[3];
122
- const p3 = match[4];
123
- const p4 = match[5];
124
- const p5 = match[6];
125
- switch (format) {
126
- case 'rgb':
127
- case 'rgba': {
128
- const r = parseColorChannel(p1);
129
- const g = parseColorChannel(p2);
130
- const b = parseColorChannel(p3);
131
- const a = p4 ? parseAlphaChannel(p4) : 255;
132
- return (0, core_1.newColor)(r, g, b, a);
133
- }
134
- case 'hsl':
135
- case 'hsla': {
136
- const h = parseAngle(p1);
137
- const s = parsePercentage(p2);
138
- const l = parsePercentage(p3);
139
- const a = p4 ? parseAlphaChannel(p4) : 255;
140
- // https://stackoverflow.com/a/9493060/3112706
141
- let r, g, b;
142
- if (s === 0) {
143
- r = g = b = Math.round(l * 255); // achromatic
144
- }
145
- else {
146
- const q = l < 0.5 ? l * (1 + s) : l + s - l * s;
147
- const p = 2 * l - q;
148
- r = Math.round(hueToRGB(p, q, h + 1 / 3) * 255);
149
- g = Math.round(hueToRGB(p, q, h) * 255);
150
- b = Math.round(hueToRGB(p, q, h - 1 / 3) * 255);
151
- }
152
- return (0, core_1.newColor)(r, g, b, a);
153
- }
154
- case 'hwb': {
155
- const h = parseAngle(p1);
156
- const w = parsePercentage(p2);
157
- const bl = parsePercentage(p3);
158
- const a = p4 ? parseAlphaChannel(p4) : 255;
159
- /* https://drafts.csswg.org/css-color/#hwb-to-rgb */
160
- const s = 1.0;
161
- const l = 0.5;
162
- // Same as HSL to RGB
163
- const q = l < 0.5 ? l * (1 + s) : l + s - l * s;
164
- const p = 2 * l - q;
165
- let r = Math.round(hueToRGB(p, q, h + 1 / 3) * 255);
166
- let g = Math.round(hueToRGB(p, q, h) * 255);
167
- let b = Math.round(hueToRGB(p, q, h - 1 / 3) * 255);
168
- // Then HWB
169
- r = hwbApply(r, w, bl);
170
- g = hwbApply(g, w, bl);
171
- b = hwbApply(b, w, bl);
172
- return (0, core_1.newColor)(r, g, b, a);
173
- }
174
- case 'lab': {
175
- const l = parsePercentageFor(p1, 100);
176
- const aa = parsePercentageFor(p2, 125);
177
- const b = parsePercentageFor(p3, 125);
178
- const a = p4 ? parseAlphaChannel(p4) : 255;
179
- return newColorFromArray(a, convert.xyzd50ToSrgb(...convert.labToXyzd50(l, aa, b)));
180
- }
181
- case 'lch': {
182
- const l = parsePercentageFor(p1, 100);
183
- const c = parsePercentageFor(p2, 150);
184
- const h = parseAngle(p3) * 360;
185
- const a = p4 ? parseAlphaChannel(p4) : 255;
186
- return newColorFromArray(a, convert.xyzd50ToSrgb(...convert.labToXyzd50(...convert.lchToLab(l, c, h))));
187
- }
188
- case 'oklab': {
189
- const l = parsePercentageFor(p1, 1);
190
- const aa = parsePercentageFor(p2, 0.4);
191
- const b = parsePercentageFor(p3, 0.4);
192
- const a = p4 ? parseAlphaChannel(p4) : 255;
193
- return newColorFromArray(a, convert.xyzd50ToSrgb(...convert.xyzd65ToD50(...convert.oklabToXyzd65(l, aa, b))));
194
- }
195
- case 'oklch': {
196
- const l = parsePercentageOrValue(p1);
197
- const c = parsePercentageOrValue(p2);
198
- const h = parsePercentageOrValue(p3);
199
- const a = p4 ? parseAlphaChannel(p4) : 255;
200
- return newColorFromArray(a, convert.xyzd50ToSrgb(...convert.oklchToXyzd50(l, c, h)));
201
- }
202
- case 'color': {
203
- // https://drafts.csswg.org/css-color-4/#color-function
204
- const colorspace = p1;
205
- const c1 = parsePercentageOrValue(p2);
206
- const c2 = parsePercentageOrValue(p3);
207
- const c3 = parsePercentageOrValue(p4);
208
- const a = p5 ? parseAlphaChannel(p5) : 255;
209
- switch (colorspace) {
210
- // RGB color spaces
211
- case 'srgb': {
212
- return newColorFromArray(a, [c1, c2, c3]);
213
- }
214
- case 'srgb-linear': {
215
- return newColorFromArray(a, convert.xyzd50ToSrgb(...convert.srgbLinearToXyzd50(c1, c2, c3)));
216
- }
217
- case 'display-p3': {
218
- return newColorFromArray(a, convert.xyzd50ToSrgb(...convert.displayP3ToXyzd50(c1, c2, c3)));
219
- }
220
- case 'a98-rgb': {
221
- return newColorFromArray(a, convert.xyzd50ToSrgb(...convert.adobeRGBToXyzd50(c1, c2, c3)));
222
- }
223
- case 'prophoto-rgb': {
224
- return newColorFromArray(a, convert.xyzd50ToSrgb(...convert.proPhotoToXyzd50(c1, c2, c3)));
225
- }
226
- case 'rec2020': {
227
- return newColorFromArray(a, convert.xyzd50ToSrgb(...convert.rec2020ToXyzd50(c1, c2, c3)));
228
- }
229
- // XYZ color spaces
230
- case 'xyz':
231
- case 'xyz-d65': {
232
- return newColorFromArray(a, convert.xyzd50ToSrgb(...convert.xyzd65ToD50(c1, c2, c3)));
233
- }
234
- case 'xyz-d50': {
235
- return newColorFromArray(a, convert.xyzd50ToSrgb(c1, c2, c3));
236
- }
237
- default:
238
- }
239
- }
240
- default:
241
- }
242
- throw new Error(`Color.parse(): invalid CSS color: "${color}"`);
243
- }
244
- /**
245
- * Accepts: "50%", "128"
246
- * https://developer.mozilla.org/en-US/docs/Web/CSS/color_value/rgb#values
247
- * @returns a value in the 0 to 255 range
248
- */
249
- function parseColorChannel(channel) {
250
- if (channel.charCodeAt(channel.length - 1) === PERCENT) {
251
- return Math.round((parseFloat(channel) / 100) * 255);
252
- }
253
- return Math.round(parseFloat(channel));
254
- }
255
- /**
256
- * Accepts: "50%", ".5", "0.5"
257
- * https://developer.mozilla.org/en-US/docs/Web/CSS/alpha-value
258
- * @returns a value in the [0, 255] range
259
- */
260
- function parseAlphaChannel(channel) {
261
- return Math.round(parseAlphaValue(channel) * 255);
262
- }
263
- /**
264
- * Accepts: "50%", ".5", "0.5"
265
- * https://developer.mozilla.org/en-US/docs/Web/CSS/alpha-value
266
- * @returns a value in the [0, 1] range
267
- */
268
- function parseAlphaValue(channel) {
269
- if (channel.charCodeAt(0) === N) {
270
- return 0;
271
- }
272
- if (channel.charCodeAt(channel.length - 1) === PERCENT) {
273
- return parseFloat(channel) / 100;
274
- }
275
- return parseFloat(channel);
276
- }
277
- /**
278
- * Accepts: "360", "360deg", "400grad", "6.28rad", "1turn", "none"
279
- * https://developer.mozilla.org/en-US/docs/Web/CSS/angle
280
- * @returns a value in the 0.0 to 1.0 range
281
- */
282
- function parseAngle(angle) {
283
- let factor = 1;
284
- switch (angle.charCodeAt(angle.length - 1)) {
285
- case E: {
286
- // 'none'
287
- return 0;
288
- }
289
- case D: {
290
- // 'rad', 'grad'
291
- if (angle.charCodeAt(Math.max(0, angle.length - 4)) === G) {
292
- // 'grad'
293
- factor = 400;
294
- }
295
- else {
296
- // 'rad'
297
- factor = 2 * Math.PI; // TAU
298
- }
299
- break;
300
- }
301
- case N: {
302
- // 'turn'
303
- factor = 1;
304
- break;
305
- }
306
- // case G: // 'deg', but no need to check as it's also the default
307
- default: {
308
- factor = 360;
309
- }
310
- }
311
- return parseFloat(angle) / factor;
312
- }
313
- /**
314
- * Accepts: "100%", "none"
315
- * @returns a value in the 0.0 to 1.0 range
316
- */
317
- function parsePercentage(value) {
318
- if (value.charCodeAt(0) === N) {
319
- return 0;
320
- }
321
- return parseFloat(value) / 100;
322
- }
323
- /**
324
- * Accepts: "1.0", "100%", "none"
325
- * @returns a value in the 0.0 to 1.0 range
326
- */
327
- function parsePercentageOrValue(value) {
328
- if (value.charCodeAt(0) === N) {
329
- return 0;
330
- }
331
- if (value.charCodeAt(value.length - 1) === PERCENT) {
332
- return parseFloat(value) / 100;
333
- }
334
- return parseFloat(value);
335
- }
336
- /**
337
- * Accepts: "100", "100%", "none"
338
- * @returns a value in the -@range to @range range
339
- */
340
- function parsePercentageFor(value, range) {
341
- if (value.charCodeAt(0) === N) {
342
- return 0;
343
- }
344
- if (value.charCodeAt(value.length - 1) === PERCENT) {
345
- return parseFloat(value) / 100 * range;
346
- }
347
- return parseFloat(value);
348
- }
349
- // HSL functions
350
- function hueToRGB(p, q, t) {
351
- if (t < 0) {
352
- t += 1;
353
- }
354
- ;
355
- if (t > 1) {
356
- t -= 1;
357
- }
358
- ;
359
- if (t < 1 / 6) {
360
- return p + (q - p) * 6 * t;
361
- }
362
- ;
363
- if (t < 1 / 2) {
364
- return q;
365
- }
366
- ;
367
- if (t < 2 / 3) {
368
- return p + (q - p) * (2 / 3 - t) * 6;
369
- }
370
- ;
371
- {
372
- return p;
373
- }
374
- ;
375
- }
376
- // HWB functions
377
- function hwbApply(channel, w, b) {
378
- let result = channel / 255;
379
- result *= 1 - w - b;
380
- result += w;
381
- return Math.round(result * 255);
382
- }
383
- function clamp(value) {
384
- return Math.max(0, Math.min(255, value));
385
- }
386
- function newColorFromArray(a, rgb) {
387
- const r = clamp(Math.round(rgb[0] * 255));
388
- const g = clamp(Math.round(rgb[1] * 255));
389
- const b = clamp(Math.round(rgb[2] * 255));
390
- return (0, core_1.newColor)(r, g, b, a);
391
- }
392
- //# sourceMappingURL=parse.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parse.js","sourceRoot":"","sources":["../src/parse.ts"],"names":[],"mappings":"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"}