precise-colors 0.9.6 → 0.9.8
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.
- package/README.md +89 -2
- package/dist/index.cjs +39 -53
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +319 -29
- package/dist/index.d.ts +319 -29
- package/dist/index.js +39 -53
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -2,6 +2,93 @@
|
|
|
2
2
|
|
|
3
3
|
# precise-colors
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
High-precision color space conversions without intermediate rounding (except `*2css`, `*2str`, `*2hex` output functions).
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
## Goals
|
|
8
|
+
|
|
9
|
+
* Chain multiple conversions
|
|
10
|
+
* Round only at the end using `Math.round` or provided `roundTo`, `*2css`, `*2hex` functions.
|
|
11
|
+
* Make it clear in JSDoc the _input/output ranges_ the user operates on and `{@link Type}` references
|
|
12
|
+
for IDE navigation, preserved in `.d.ts` files.
|
|
13
|
+
|
|
14
|
+
## Install
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
npm install precise-colors
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Usage
|
|
21
|
+
|
|
22
|
+
```ts
|
|
23
|
+
import { rgb2lab, lab2lch, lch2lab, lab2lyz, xyz2rgb, roundTo, rgb2css } from 'precise-colors'
|
|
24
|
+
|
|
25
|
+
const original = { r: 128, g: 64, b: 192 }
|
|
26
|
+
|
|
27
|
+
// RGB → Lab → LCH → Lab → XYZ → RGB round-trip
|
|
28
|
+
const lab = rgb2lab(original) // { l: 41.31, a: 51.57, b: -56.63 }
|
|
29
|
+
const lch = lab2lch(lab) // { l: 41.31, c: 76.59, h: 312.33 }
|
|
30
|
+
const backToLab = lch2lab(lch)
|
|
31
|
+
const xyz = lab2lyz(backToLab)
|
|
32
|
+
const rgb = xyz2rgb({ x: xyz.l, y: xyz.y, z: xyz.z })
|
|
33
|
+
|
|
34
|
+
// rgb = { r: 127.999997, g: 64.000014, b: 192.000002 }
|
|
35
|
+
// Error: ~0.00001 per channel
|
|
36
|
+
|
|
37
|
+
// Final step: round to integers or use output functions
|
|
38
|
+
Math.round(rgb.r) // 128
|
|
39
|
+
roundTo(rgb.r, 2) // 128.00 (avoids floating-point errors)
|
|
40
|
+
rgb2css(rgb) // "rgb(128,64,192)"
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Supported Color Spaces
|
|
44
|
+
|
|
45
|
+
| Space | Range | Description |
|
|
46
|
+
| ----- | ---------------------------- | -------------------------- |
|
|
47
|
+
| RGB | r,g,b: 0-255 | sRGB (8-bit) |
|
|
48
|
+
| HSL | h: 0-360, s,l: 0-100 | Hue, Saturation, Lightness |
|
|
49
|
+
| HSV | h: 0-360, s,v: 0-100 | Hue, Saturation, Value |
|
|
50
|
+
| HWB | h: 0-360, w,b: 0-100 | Hue, Whiteness, Blackness |
|
|
51
|
+
| HCG | h: 0-360, c,g: 0-100 | Hue, Chroma, Grayness |
|
|
52
|
+
| CMYK | c,m,y,k: 0-100 | Cyan, Magenta, Yellow, Key |
|
|
53
|
+
| Lab | L: 0-100, a,b: ±128 | CIE L*a*b* (D65) |
|
|
54
|
+
| LCH | L: 0-100, C: 0-230, H: 0-360 | CIE LCH (cylindrical Lab) |
|
|
55
|
+
| XYZ | x: 0-95, y: 0-100, z: 0-109 | CIE XYZ (D65) |
|
|
56
|
+
| Apple | r16,g16,b16: 0-65535 | Apple 16-bit RGB |
|
|
57
|
+
| Gray | 0-100 | Grayscale |
|
|
58
|
+
|
|
59
|
+
## Conversion Matrix
|
|
60
|
+
|
|
61
|
+
⤴ = row to column, ⤶ = column to row
|
|
62
|
+
|
|
63
|
+
| | RGB | HSL | HSV | HWB | HCG | CMYK | Lab | LCH | XYZ |
|
|
64
|
+
| ----- | --- | --- | --- | --- | --- | ---- | --- | --- | --- |
|
|
65
|
+
| RGB | | ⤴⤶ | ⤶ | ⤴⤶ | ⤶ | ⤴⤶ | ⤴ | | ⤴⤶ |
|
|
66
|
+
| HSL | ⤴⤶ | | ⤴⤶ | | ⤴⤶ | | | | |
|
|
67
|
+
| HSV | ⤴ | ⤴⤶ | | | ⤴⤶ | | | | |
|
|
68
|
+
| HWB | ⤴⤶ | | | | ⤴⤶ | | | | |
|
|
69
|
+
| HCG | ⤴ | ⤴⤶ | ⤴⤶ | ⤴⤶ | | | | | |
|
|
70
|
+
| CMYK | ⤴⤶ | | | | | | | | |
|
|
71
|
+
| Lab | | | | | | | | ⤴⤶ | ⤴⤶ |
|
|
72
|
+
| LCH | | | | | | | ⤴⤶ | | |
|
|
73
|
+
| XYZ | ⤴⤶ | | | | | | ⤴⤶ | | |
|
|
74
|
+
| Apple | ⤴ | | | | | | | | |
|
|
75
|
+
| Gray | ⤴ | ⤴ | ⤴ | ⤴ | | ⤴ | ⤴ | | |
|
|
76
|
+
|
|
77
|
+
## Precision
|
|
78
|
+
|
|
79
|
+
Round-trip precision verified across all 16,777,216 RGB colors:
|
|
80
|
+
|
|
81
|
+
| Conversion | Max Error |
|
|
82
|
+
| --------------------- | --------- |
|
|
83
|
+
| RGB → HSL → RGB | < 0.01 |
|
|
84
|
+
| RGB → HSV → RGB | < 0.01 |
|
|
85
|
+
| RGB → HWB → RGB | < 0.01 |
|
|
86
|
+
| RGB → HCG → RGB | < 0.01 |
|
|
87
|
+
| RGB → Lab → XYZ → RGB | < 0.001 |
|
|
88
|
+
| Lab → LCH → Lab | < 1e-6 |
|
|
89
|
+
|
|
90
|
+
## Standards Compliance
|
|
91
|
+
|
|
92
|
+
- **CIE Lab**: Exact rational constants per CIE 15.3 (`ε = 216/24389`, `κ = 24389/27`)
|
|
93
|
+
- **D65 white point**: X=95.047, Y=100, Z=108.883
|
|
94
|
+
- **sRGB↔XYZ**: IEC 61966-2-1 transformation matrix
|
package/dist/index.cjs
CHANGED
|
@@ -535,49 +535,47 @@ function gray2lab(gray) {
|
|
|
535
535
|
b: 0
|
|
536
536
|
};
|
|
537
537
|
}
|
|
538
|
+
var CIE_E = 216 / 24389;
|
|
539
|
+
var CIE_K = 24389 / 27;
|
|
540
|
+
var SRGB_TO_XYZ = {
|
|
541
|
+
xr: 0.4124564,
|
|
542
|
+
xg: 0.3575761,
|
|
543
|
+
xb: 0.1804375,
|
|
544
|
+
yr: 0.2126729,
|
|
545
|
+
yg: 0.7151522,
|
|
546
|
+
yb: 0.072175,
|
|
547
|
+
zr: 0.0193339,
|
|
548
|
+
zg: 0.119192,
|
|
549
|
+
zb: 0.9503041
|
|
550
|
+
};
|
|
551
|
+
var D65 = { x: 95.047, y: 100, z: 108.883 };
|
|
538
552
|
function rgb2lab(rgb) {
|
|
539
553
|
let r = rgb.r / 255, g = rgb.g / 255, b = rgb.b / 255;
|
|
540
|
-
let x = 0, y = 0, z = 0;
|
|
541
554
|
r = r > 0.04045 ? Math.pow((r + 0.055) / 1.055, 2.4) : r / 12.92;
|
|
542
555
|
g = g > 0.04045 ? Math.pow((g + 0.055) / 1.055, 2.4) : g / 12.92;
|
|
543
556
|
b = b > 0.04045 ? Math.pow((b + 0.055) / 1.055, 2.4) : b / 12.92;
|
|
544
|
-
x = (r *
|
|
545
|
-
y = (r *
|
|
546
|
-
z = (r *
|
|
547
|
-
x = x >
|
|
548
|
-
y = y >
|
|
549
|
-
z = z >
|
|
557
|
+
let x = (r * SRGB_TO_XYZ.xr + g * SRGB_TO_XYZ.xg + b * SRGB_TO_XYZ.xb) / (D65.x / 100);
|
|
558
|
+
let y = (r * SRGB_TO_XYZ.yr + g * SRGB_TO_XYZ.yg + b * SRGB_TO_XYZ.yb) / (D65.y / 100);
|
|
559
|
+
let z = (r * SRGB_TO_XYZ.zr + g * SRGB_TO_XYZ.zg + b * SRGB_TO_XYZ.zb) / (D65.z / 100);
|
|
560
|
+
x = x > CIE_E ? Math.pow(x, 1 / 3) : (CIE_K * x + 16) / 116;
|
|
561
|
+
y = y > CIE_E ? Math.pow(y, 1 / 3) : (CIE_K * y + 16) / 116;
|
|
562
|
+
z = z > CIE_E ? Math.pow(z, 1 / 3) : (CIE_K * z + 16) / 116;
|
|
550
563
|
return { l: 116 * y - 16, a: 500 * (x - y), b: 200 * (y - z) };
|
|
551
564
|
}
|
|
552
565
|
function lab2lyz(lab) {
|
|
553
566
|
let y = (lab.l + 16) / 116;
|
|
554
567
|
let x = lab.a / 500 + y;
|
|
555
568
|
let z = y - lab.b / 200;
|
|
556
|
-
const
|
|
557
|
-
const
|
|
558
|
-
const
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
x = (x - 16 / 116) / 7.787;
|
|
563
|
-
}
|
|
564
|
-
if (y2 > 8856e-6) {
|
|
565
|
-
y = y2;
|
|
566
|
-
} else {
|
|
567
|
-
y = (y - 16 / 116) / 7.787;
|
|
568
|
-
}
|
|
569
|
-
if (z2 > 8856e-6) {
|
|
570
|
-
z = z2;
|
|
571
|
-
} else {
|
|
572
|
-
z = (z - 16 / 116) / 7.787;
|
|
573
|
-
}
|
|
574
|
-
x *= 95.047;
|
|
575
|
-
y *= 100;
|
|
576
|
-
z *= 108.883;
|
|
569
|
+
const x3 = Math.pow(x, 3);
|
|
570
|
+
const y3 = Math.pow(y, 3);
|
|
571
|
+
const z3 = Math.pow(z, 3);
|
|
572
|
+
x = x3 > CIE_E ? x3 : (116 * x - 16) / CIE_K;
|
|
573
|
+
y = y3 > CIE_E ? y3 : (116 * y - 16) / CIE_K;
|
|
574
|
+
z = z3 > CIE_E ? z3 : (116 * z - 16) / CIE_K;
|
|
577
575
|
return {
|
|
578
|
-
l: x,
|
|
579
|
-
y,
|
|
580
|
-
z
|
|
576
|
+
l: x * D65.x,
|
|
577
|
+
y: y * D65.y,
|
|
578
|
+
z: z * D65.z
|
|
581
579
|
};
|
|
582
580
|
}
|
|
583
581
|
function lab2lch(lab) {
|
|
@@ -636,24 +634,12 @@ function xyz2rgb(xyz) {
|
|
|
636
634
|
};
|
|
637
635
|
}
|
|
638
636
|
function xyz2lab(xyz) {
|
|
639
|
-
let x = xyz.x /
|
|
640
|
-
let y = xyz.y /
|
|
641
|
-
let z = xyz.z /
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
x = 7.787 * x + 16 / 116;
|
|
646
|
-
}
|
|
647
|
-
if (y > 8856e-6) {
|
|
648
|
-
y = Math.pow(y, 1 / 3);
|
|
649
|
-
} else {
|
|
650
|
-
y = 7.787 * y + 16 / 116;
|
|
651
|
-
}
|
|
652
|
-
if (z > 8856e-6) {
|
|
653
|
-
z = Math.pow(z, 1 / 3);
|
|
654
|
-
} else {
|
|
655
|
-
z = 7.787 * z + 16 / 116;
|
|
656
|
-
}
|
|
637
|
+
let x = xyz.x / D65.x;
|
|
638
|
+
let y = xyz.y / D65.y;
|
|
639
|
+
let z = xyz.z / D65.z;
|
|
640
|
+
x = x > CIE_E ? Math.pow(x, 1 / 3) : (CIE_K * x + 16) / 116;
|
|
641
|
+
y = y > CIE_E ? Math.pow(y, 1 / 3) : (CIE_K * y + 16) / 116;
|
|
642
|
+
z = z > CIE_E ? Math.pow(z, 1 / 3) : (CIE_K * z + 16) / 116;
|
|
657
643
|
return {
|
|
658
644
|
l: 116 * y - 16,
|
|
659
645
|
a: 500 * (x - y),
|
|
@@ -661,11 +647,11 @@ function xyz2lab(xyz) {
|
|
|
661
647
|
};
|
|
662
648
|
}
|
|
663
649
|
function rgb2xyz(rgb) {
|
|
664
|
-
const [
|
|
650
|
+
const [r, g, b] = [rgb.r, rgb.g, rgb.b].map((x) => x / 255).map((x) => x > 0.04045 ? Math.pow((x + 0.055) / 1.055, 2.4) : x / 12.92).map((x) => x * 100);
|
|
665
651
|
return {
|
|
666
|
-
x:
|
|
667
|
-
y:
|
|
668
|
-
z:
|
|
652
|
+
x: r * SRGB_TO_XYZ.xr + g * SRGB_TO_XYZ.xg + b * SRGB_TO_XYZ.xb,
|
|
653
|
+
y: r * SRGB_TO_XYZ.yr + g * SRGB_TO_XYZ.yg + b * SRGB_TO_XYZ.yb,
|
|
654
|
+
z: r * SRGB_TO_XYZ.zr + g * SRGB_TO_XYZ.zg + b * SRGB_TO_XYZ.zb
|
|
669
655
|
};
|
|
670
656
|
}
|
|
671
657
|
// Annotate the CommonJS export names for ESM import in node:
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/color.ts"],"sourcesContent":["export interface Cmyk {\n /** [0..100] */\n readonly c: number;\n /** [0..100] */\n readonly m: number;\n /** [0..100] */\n readonly y: number;\n /** [0..100] */\n readonly k: number;\n}\n\nexport interface Apple {\n readonly r16: number;\n readonly g16: number;\n readonly b16: number;\n}\n\nexport interface Rgb {\n /** [0..255] */\n readonly r: number;\n /** [0..255] */\n readonly g: number;\n /** [0..255] */\n readonly b: number;\n}\n\nexport interface Hsl {\n readonly h: number;\n readonly s: number;\n readonly l: number;\n}\n\nexport interface Hsv {\n readonly h: number;\n readonly s: number;\n readonly v: number;\n}\n\nexport interface Hcg {\n readonly h: number;\n readonly c: number;\n readonly g: number;\n}\n\nexport interface Hwb {\n /** Hue [0..360] */\n readonly h: number;\n /** Whiteness [0..100] */\n readonly w: number;\n /** Blackness [0..100] */\n readonly b: number;\n}\n\nexport interface Lab {\n readonly l: number;\n readonly a: number;\n readonly b: number;\n}\n\nexport interface Xyz {\n readonly x: number;\n readonly y: number;\n readonly z: number;\n}\n\nexport interface Lyz {\n readonly l: number;\n readonly y: number;\n readonly z: number;\n}\n\nexport interface Lch {\n readonly l: number;\n readonly c: number;\n readonly h: number;\n}\n\n/** rounds number to amount of places after `.` */\nexport function roundTo(num: number, places: number) {\n return +(Math.round(parseFloat(num.toString() + \"e+\" + places)) + \"e-\" +\n places);\n}\n\nexport function modulo(x: number, n: number): number {\n return ((x % n) + n) % n;\n}\n\n/**\n * rgb2css converts {@link Rgb} to a string for css. Calls `Math.round` for each of\n * the Rgb fields.\n * @param {Rbg} rgb - [0..255].\n * @returns {string} `\"rgb(r,g,b)\"` representation of passed {@link Rgb} instance.\n */\nexport function rgb2css(rgb: Rgb): string {\n return `rgb(${Math.round(rgb.r)},${Math.round(rgb.g)},${Math.round(rgb.b)})`;\n}\n\n/**\n * rgb2str converts {@link Rgb} to a rounded `\"0..255,0.255,0.255\"` string.\n * @param {Rgb} rgb\n * @returns {string} example: `\"0,127,255\"`\n */\nexport function rgb2str(rgb: Rgb): string {\n return `${Math.round(rgb.r)},${Math.round(rgb.g)},${Math.round(rgb.b)}`;\n}\n\n/**\n * Converts {@link Rgb} and `alpha` to a string for css. Calls `Math.round` for each of\n * the Rgb fields. Rounds `alpha` to max 2 places after `.`.\n * @param {Rbg} rgb - [0..255].\n * @param {number} alpha [0..1]\n * @returns {string} `\"rgb(r,g,b,a)\"` representation of passed {@link Rgb} instance and `alpha`.\n */\nexport function rgba2css(rgb: Rgb, alpha: number): string {\n return `rgba(${Math.round(rgb.r)},${Math.round(rgb.g)},${Math.round(rgb.b)},${roundTo(alpha, 2)\n })`;\n}\n\n/** returns `hsl(h,s,l)` expression */\nexport function hsl2css(hsl: Hsl) {\n return `hsl(${roundTo(hsl.h, 2)}deg,${roundTo(hsl.s, 2)}%,${roundTo(hsl.l, 2)\n }%)`;\n}\n\n/** returns `hwb(h,w,b)` expression */\nexport function hwb2css(hwb: Hwb) {\n return `hwb(${roundTo(hwb.h, 2)}deg,${roundTo(hwb.w, 2)}%,${roundTo(hwb.b, 2)\n }%)`;\n}\n\n/** rgb expects [0..255] for each field */\nexport function rgb2hex(rgb: Rgb): string {\n return Math.round(rgb.r).toString(16).padStart(2, \"0\") +\n Math.round(rgb.g).toString(16).padStart(2, \"0\") +\n Math.round(rgb.b).toString(16).padStart(2, \"0\");\n}\n\n/** gray expects [0..100] */\nexport function gray2hex(gray: number): string {\n const p = Math.round((gray / 100) * 255).toString(16).padStart(2, \"0\");\n return p + p + p;\n}\n\nexport function hex2rgb(input: string): Rgb {\n const value: number = parseInt(input, 16);\n if (isNaN(value)) {\n return { r: 0, g: 0, b: 0 };\n }\n return {\n r: (value >> 16) & 0xFF,\n g: (value >> 8) & 0xFF,\n b: value & 0xFF,\n };\n}\n\n/** expects h [0..360], s [0..100], l [0..100]. Returns rgb[0..255], doesn't perform Math.round on the result. */\nexport function hsl2rgb(hsl: Hsl): Rgb {\n const h = hsl.h / 360;\n const s = hsl.s / 100;\n const l = hsl.l / 100;\n let t2: number;\n let t3: number;\n let val: number;\n if (s === 0) {\n val = l * 255;\n return { r: val, g: val, b: val };\n }\n if (l < 0.5) {\n t2 = l * (1 + s);\n } else {\n t2 = l + s - l * s;\n }\n const t1 = 2 * l - t2;\n const rgb: [number, number, number] = [0, 0, 0];\n for (let i = 0; i < 3; i++) {\n t3 = h + 1.0 / 3.0 * (-(i - 1));\n if (t3 < 0) {\n t3++;\n }\n if (t3 > 1) {\n t3--;\n }\n if (6 * t3 < 1) {\n val = t1 + (t2 - t1) * 6 * t3;\n } else if (2 * t3 < 1) {\n val = t2;\n } else if (3 * t3 < 2) {\n val = t1 + (t2 - t1) * (2.0 / 3.0 - t3) * 6;\n } else {\n val = t1;\n }\n rgb[i] = val * 255;\n }\n return {\n r: rgb[0],\n g: rgb[1],\n b: rgb[2],\n };\n}\n\n/** expects h [0..360], s [0..100], l [0..100]. Returns rgb[0..255], doesn't perform Math.round on the result. */\nexport function hsl2hsv(hsl: Hsl): Hsv {\n let s = hsl.s / 100;\n let l = hsl.l / 100;\n let smin = s;\n const lmin = Math.max(l, 0.01);\n l *= 2;\n if (l <= 1) {\n s *= l;\n } else {\n s *= 2 - l;\n }\n if (lmin <= 1) {\n smin *= lmin;\n } else {\n smin *= 2 - lmin;\n }\n const v = (l + s) / 2;\n let sv: number;\n if (l === 0) {\n sv = (2 * smin) / (lmin + smin);\n } else {\n sv = (2 * s) / (l + s);\n }\n return {\n h: hsl.h,\n s: sv * 100,\n v: v * 100,\n };\n}\n\nexport function hsl2hcg(hsl: Hsl): Hcg {\n const s = hsl.s / 100;\n const l = hsl.l / 100;\n let c: number;\n if (l < 0.5) {\n c = 2.0 * s * l;\n } else {\n c = 2.0 * s * (1.0 - l);\n }\n let f = 0;\n if (c < 1.0) {\n f = (l - 0.5 * c) / (1.0 - c);\n }\n return {\n h: hsl.h,\n c: c * 100,\n g: f * 100,\n };\n}\n\nexport function hsv2rgb(hsv: Hsv): Rgb {\n const h = hsv.h / 60;\n const s = hsv.s / 100;\n let v = hsv.v / 100;\n const hi = modulo(Math.floor(h), 6);\n const f = h - Math.floor(h);\n const p = 255 * v * (1 - s);\n const q = 255 * v * (1 - (s * f));\n const t = 255 * v * (1 - (s * (1 - f)));\n v *= 255;\n switch (hi) {\n case 0:\n return { r: v, g: t, b: p };\n case 1:\n return { r: q, g: v, b: p };\n case 2:\n return { r: p, g: v, b: t };\n case 3:\n return { r: p, g: q, b: v };\n case 4:\n return { r: t, g: p, b: v };\n case 5:\n return { r: v, g: p, b: q };\n default:\n return { r: 0, g: 0, b: 0 };\n }\n}\n\nexport function hsv2hsl(hsv: Hsv): Hsl {\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const vmin = Math.max(v, 0.01);\n let sl: number;\n let l: number;\n l = (2 - s) * v;\n const lmin = (2 - s) * vmin;\n sl = s * vmin;\n if (lmin <= 1) {\n sl /= lmin;\n } else {\n sl /= 2 - lmin;\n }\n\n if (isNaN(sl)) {\n sl = 0;\n }\n l /= 2;\n\n return {\n h: (hsv.h),\n s: (sl * 100),\n l: (l * 100),\n };\n}\n\nexport function hsv2hcg(hsv: Hsv): Hcg {\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const c = s * v;\n let g = 0;\n if (c < 1.0) {\n g = (v - c) / (1 - c);\n }\n return {\n h: (hsv.h),\n c: (c * 100),\n g: (g * 100),\n };\n}\n\nexport function apple2rgb(rgb16: Apple): Rgb {\n return {\n r: (rgb16.r16 / 65535) * 255,\n g: (rgb16.g16 / 65535) * 255,\n b: (rgb16.b16 / 65535) * 255,\n };\n}\n\nexport function cmyk2rgb(cmyk: Cmyk): Rgb {\n const c = cmyk.c / 100;\n const m = cmyk.m / 100;\n const y = cmyk.y / 100;\n const k = cmyk.k / 100;\n\n const r = 1 - Math.min(1, c * (1 - k) + k);\n const g = 1 - Math.min(1, m * (1 - k) + k);\n const b = 1 - Math.min(1, y * (1 - k) + k);\n\n return {\n r: (r * 255),\n g: (g * 255),\n b: (b * 255),\n };\n}\n\nexport function rgb2cmyk(rgb: Rgb): Cmyk {\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n const k = +(1 - Math.max(r, g, b));\n return {\n c: +((1 - r - k) / (1 - k) || 0) * 100,\n m: +((1 - g - k) / (1 - k) || 0) * 100,\n y: +((1 - b - k) / (1 - k) || 0) * 100,\n k: k * 100,\n };\n}\n\nexport function rgb2hsl(rgb: Rgb): Hsl {\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n\n const min = Math.min(Math.min(r, g), b);\n\n const max = Math.max(Math.max(r, g), b);\n\n const delta = max - min;\n\n let h = 0;\n let s = 0;\n\n if (max == min) {\n h = 0;\n } else if (r == max) {\n h = (g - b) / delta;\n } else if (g == max) {\n h = 2 + (b - r) / delta;\n } else if (b == max) {\n h = 4 + (r - g) / delta;\n }\n\n h = Math.min(h * 60, 360);\n\n if (h < 0) {\n h += 360;\n }\n\n const l = (min + max) / 2;\n\n if (max == min) {\n s = 0;\n } else if (l <= 0.5) {\n s = delta / (max + min);\n } else {\n s = delta / (2 - max - min);\n }\n\n return { h: h, s: s * 100, l: l * 100 };\n}\n\nexport function rgb2hwb(rgb: Rgb): Hwb {\n const h = rgb2hsl(rgb).h;\n const w = 1.0 / 255.0 * Math.min(rgb.r, Math.min(rgb.g, rgb.b));\n const b = 1.0 - 1.0 / 255.0 * Math.max(rgb.r, Math.max(rgb.g, rgb.b));\n\n return { h: h, w: w * 100, b: b * 100 };\n}\n\nexport function hwb2rgb(hwb: Hwb): Rgb {\n const h = hwb.h / 360;\n let w = hwb.w / 100;\n let b = hwb.b / 100;\n const ratio = w + b;\n let f = 0;\n if (ratio > 1) { // w + b cannot be > 1\n w /= ratio;\n b /= ratio;\n }\n const i = Math.floor(6 * h);\n const v = 1 - b;\n f = 6 * h - i;\n if ((i & 0x01) != 0) {\n f = 1 - f;\n }\n const n = w + f * (v - w); // linear interpolation\n switch (i) {\n default:\n case 6:\n case 0:\n return {\n r: (v * 255),\n g: (n * 255),\n b: (w * 255),\n };\n case 1:\n return {\n r: (n * 255),\n g: (v * 255),\n b: (w * 255),\n };\n case 2:\n return {\n r: (w * 255),\n g: (v * 255),\n b: (n * 255),\n };\n case 3:\n return {\n r: (w * 255),\n g: (n * 255),\n b: (v * 255),\n };\n case 4:\n return {\n r: (n * 255),\n g: (w * 255),\n b: (v * 255),\n };\n case 5:\n return {\n r: (v * 255),\n g: (w * 255),\n b: (n * 255),\n };\n }\n}\n\nexport function hwb2hcg(hwb: Hwb): Hcg {\n const w = hwb.w / 100;\n const b = hwb.b / 100;\n const v = 1 - b;\n const c = v - w;\n let g = 0;\n if (c < 1) {\n g = (v - c) / (1 - c);\n }\n return {\n h: hwb.h,\n c: c * 100,\n g: g * 100,\n };\n}\n\nexport function hcg2rgb(hcg: Hcg): Rgb {\n const h = hcg.h / 360;\n const c = hcg.c / 100;\n const g = hcg.g / 100;\n if (c === 0) {\n return { r: g * 255, g: g * 255, b: g * 255 };\n }\n let pure0 = 0, pure1 = 0, pure2 = 0;\n const hi: number = modulo(h, 1) * 6;\n const v: number = modulo(hi, 1);\n const w: number = 1 - v;\n let mg = 0;\n switch (Math.floor(hi)) {\n case 0:\n pure0 = 1;\n pure1 = v;\n pure2 = 0;\n break;\n case 1:\n pure0 = w;\n pure1 = 1;\n pure2 = 0;\n break;\n case 2:\n pure0 = 0;\n pure1 = 1;\n pure2 = v;\n break;\n case 3:\n pure0 = 0;\n pure1 = w;\n pure2 = 1;\n break;\n case 4:\n pure0 = v;\n pure1 = 0;\n pure2 = 1;\n break;\n default:\n pure0 = 1;\n pure1 = 0;\n pure2 = w;\n break;\n }\n mg = (1.0 - c) * g;\n return {\n r: (c * pure0 + mg) * 255,\n g: (c * pure1 + mg) * 255,\n b: (c * pure2 + mg) * 255,\n };\n}\n\nexport function hcg2hsv(hcg: Hcg): Hsv {\n const c = hcg.c / 100;\n const g = hcg.g / 100;\n const v = c + g * (1.0 - c);\n let s = 0;\n if (v > 0.0) {\n s = c / v;\n }\n return {\n h: hcg.h,\n s: s * 100,\n v: v * 100,\n };\n}\n\nexport function hcg2hsl(hcg: Hcg): Hsl {\n const c = hcg.c / 100;\n const g = hcg.g / 100;\n const l: number = g * (1.0 - c) + 0.5 * c;\n let s = 0;\n if (l > 0.0 && l < 0.5) {\n s = c / (2 * l);\n } else if (l >= 0.5 && l < 1.0) {\n s = c / (2 * (1 - l));\n }\n return {\n h: hcg.h,\n s: s * 100,\n l: l * 100,\n };\n}\n\nexport function hcg2hwb(hcg: Hcg): Hwb {\n const c = hcg.c / 100;\n const g = hcg.g / 100;\n const v: number = c + g * (1.0 - c);\n return {\n h: hcg.h,\n w: (v - c) * 100,\n b: (1 - v) * 100,\n };\n}\n\nexport function gray2rgb(gray: number): Rgb {\n return {\n r: (gray / 100) * 255,\n g: (gray / 100) * 255,\n b: (gray / 100) * 255,\n };\n}\n\nexport function gray2hsl(gray: number): Hsl {\n return {\n h: 0,\n s: 0,\n l: gray,\n };\n}\n\nexport function gray2hsv(gray: number): Hsv {\n return {\n h: 0,\n s: 0,\n v: gray,\n };\n}\n\nexport function gray2hwb(gray: number): Hwb {\n return {\n h: 0,\n w: gray,\n b: 100 - gray,\n };\n}\n\nexport function gray2cmyk(gray: number): Cmyk {\n return {\n c: 0,\n m: 0,\n y: 0,\n k: gray,\n };\n}\n\nexport function gray2lab(gray: number): Lab {\n return {\n l: gray,\n a: 0,\n b: 0,\n };\n}\n\nexport function rgb2lab(rgb: Rgb): Lab {\n let r = rgb.r / 255,\n g = rgb.g / 255,\n b = rgb.b / 255;\n let x = 0, y = 0, z = 0;\n\n r = (r > 0.04045) ? Math.pow((r + 0.055) / 1.055, 2.4) : r / 12.92;\n g = (g > 0.04045) ? Math.pow((g + 0.055) / 1.055, 2.4) : g / 12.92;\n b = (b > 0.04045) ? Math.pow((b + 0.055) / 1.055, 2.4) : b / 12.92;\n\n x = (r * 0.4124 + g * 0.3576 + b * 0.1805) / 0.95047;\n y = (r * 0.2126 + g * 0.7152 + b * 0.0722) / 1.00000;\n z = (r * 0.0193 + g * 0.1192 + b * 0.9505) / 1.08883;\n\n x = (x > 0.008856) ? Math.pow(x, 1 / 3) : (7.787 * x) + 16 / 116;\n y = (y > 0.008856) ? Math.pow(y, 1 / 3) : (7.787 * y) + 16 / 116;\n z = (z > 0.008856) ? Math.pow(z, 1 / 3) : (7.787 * z) + 16 / 116;\n\n return { l: (116 * y) - 16, a: 500 * (x - y), b: 200 * (y - z) };\n}\n\nexport function lab2lyz(lab: Lab): Lyz {\n let y = (lab.l + 16) / 116;\n let x = lab.a / 500 + y;\n let z = y - lab.b / 200;\n const x2: number = Math.pow(x, 3);\n const y2: number = Math.pow(y, 3);\n const z2: number = Math.pow(z, 3);\n if (x2 > 0.008856) {\n x = x2;\n } else {\n x = (x - 16.0 / 116.0) / 7.787;\n }\n if (y2 > 0.008856) {\n y = y2;\n } else {\n y = (y - 16.0 / 116.0) / 7.787;\n }\n if (z2 > 0.008856) {\n z = z2;\n } else {\n z = (z - 16.0 / 116.0) / 7.787;\n }\n x *= 95.047;\n y *= 100;\n z *= 108.883;\n return {\n l: x,\n y: y,\n z: z,\n };\n}\n\nexport function lab2lch(lab: Lab): Lch {\n let h: number;\n const hr: number = Math.atan2(lab.b, lab.a);\n h = hr * 360.0 / 2.0 / Math.PI;\n if (h < 0) {\n h += 360;\n }\n const c: number = Math.sqrt(lab.a * lab.a + lab.b * lab.b);\n return {\n l: lab.l,\n c: c,\n h: h,\n };\n}\n\nexport function lch2lab(lch: Lch): Lab {\n const hr: number = lch.h / 360.0 * 2 * Math.PI;\n const a: number = lch.c * Math.cos(hr);\n const b: number = lch.c * Math.sin(hr);\n return {\n l: lch.l,\n a: a,\n b: b,\n };\n}\n\nexport function xyz2rgb(xyz: Xyz): Rgb {\n const x = xyz.x / 100;\n const y = xyz.y / 100;\n const z = xyz.z / 100;\n let r: number;\n let g: number;\n let b: number;\n r = (x * 3.2404542) + (y * -1.5371385) + (z * -0.4985314);\n g = (x * -0.969266) + (y * 1.8760108) + (z * 0.041556);\n b = (x * 0.0556434) + (y * -0.2040259) + (z * 1.0572252);\n\n if (r > 0.0031308) {\n r = (1.055 * Math.pow(r, 1.0 / 2.4)) - 0.055;\n } else {\n r = r * 12.92;\n }\n if (g > 0.0031308) {\n g = (1.055 * Math.pow(g, 1.0 / 2.4)) - 0.055;\n } else {\n g = g * 12.92;\n }\n if (b > 0.0031308) {\n b = (1.055 * Math.pow(b, 1.0 / 2.4)) - 0.055;\n } else {\n b = b * 12.92;\n }\n return {\n r: r * 255,\n g: g * 255,\n b: b * 255,\n };\n}\n\nexport function xyz2lab(xyz: Xyz): Lab {\n let x = xyz.x / 95.047;\n let y = xyz.y / 100;\n let z = xyz.z / 108.883;\n if (x > 0.008856) {\n x = Math.pow(x, 1.0 / 3.0);\n } else {\n x = (7.787 * x) + (16.0 / 116.0);\n }\n if (y > 0.008856) {\n y = Math.pow(y, 1.0 / 3.0);\n } else {\n y = (7.787 * y) + (16.0 / 116.0);\n }\n if (z > 0.008856) {\n z = Math.pow(z, 1.0 / 3.0);\n } else {\n z = (7.787 * z) + (16.0 / 116.0);\n }\n return {\n l: (116 * y) - 16,\n a: 500 * (x - y),\n b: 200 * (y - z),\n };\n}\n\nexport function rgb2xyz(rgb: Rgb): Xyz {\n const [var_R, var_G, var_B] = [rgb.r, rgb.g, rgb.b]\n .map((x) => x / 255)\n .map((x) => x > 0.04045 ? Math.pow((x + 0.055) / 1.055, 2.4) : x / 12.92)\n .map((x) => x * 100);\n return {\n x: var_R * 0.412453 + var_G * 0.357580 + var_B * 0.180423,\n y: var_R * 0.212671 + var_G * 0.715160 + var_B * 0.072169,\n z: var_R * 0.019334 + var_G * 0.119193 + var_B * 0.950227,\n };\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/color.ts"],"sourcesContent":["/**\n * CMYK color model (Cyan, Magenta, Yellow, Key/Black).\n * @property {number} c - Cyan `[0..100]`\n * @property {number} m - Magenta `[0..100]`\n * @property {number} y - Yellow `[0..100]`\n * @property {number} k - Key/Black `[0..100]`\n * @see {@link https://en.wikipedia.org/wiki/CMYK_color_model|Wikipedia}\n */\nexport interface Cmyk {\n /** Cyan `[0..100]` */\n readonly c: number;\n /** Magenta `[0..100]` */\n readonly m: number;\n /** Yellow `[0..100]` */\n readonly y: number;\n /** Key/Black `[0..100]` */\n readonly k: number;\n}\n\n/**\n * Apple 16-bit RGB color.\n * @property {number} r16 - Red `[0..65535]`\n * @property {number} g16 - Green `[0..65535]`\n * @property {number} b16 - Blue `[0..65535]`\n * @see {@link https://developer.apple.com/library/archive/documentation/LanguagesUtilities/Conceptual/MacAutomationScriptingGuide/ConvertRGBtoHTMLColor.html|Apple RGB}\n */\nexport interface Apple {\n /** Red `[0..65535]` */\n readonly r16: number;\n /** Green `[0..65535]` */\n readonly g16: number;\n /** Blue `[0..65535]` */\n readonly b16: number;\n}\n\n/**\n * sRGB color model (8-bit per channel).\n * @property {number} r - Red `[0..255]`\n * @property {number} g - Green `[0..255]`\n * @property {number} b - Blue `[0..255]`\n * @see {@link https://www.color.org/srgb.pdf|ICC sRGB Specification}\n */\nexport interface Rgb {\n /** Red `[0..255]` */\n readonly r: number;\n /** Green `[0..255]` */\n readonly g: number;\n /** Blue `[0..255]` */\n readonly b: number;\n}\n\n/**\n * HSL cylindrical color model (Hue, Saturation, Lightness).\n * @property {number} h - Hue `[0..360]`\n * @property {number} s - Saturation `[0..100]`\n * @property {number} l - Lightness `[0..100]`\n * @see {@link https://www.w3.org/TR/css-color-4/#the-hsl-notation|W3C CSS Color 4}\n */\nexport interface Hsl {\n /** Hue angle `[0..360]` */\n readonly h: number;\n /** Saturation `[0..100]` */\n readonly s: number;\n /** Lightness `[0..100]` */\n readonly l: number;\n}\n\n/**\n * HSV/HSB cylindrical color model (Hue, Saturation, Value/Brightness).\n * @property {number} h - Hue `[0..360]`\n * @property {number} s - Saturation `[0..100]`\n * @property {number} v - Value `[0..100]`\n * @see {@link https://en.wikipedia.org/wiki/HSL_and_HSV|Wikipedia}\n */\nexport interface Hsv {\n /** Hue angle `[0..360]` */\n readonly h: number;\n /** Saturation `[0..100]` */\n readonly s: number;\n /** Value/Brightness `[0..100]` */\n readonly v: number;\n}\n\n/**\n * HCG color model (Hue, Chroma, Grayness).\n * Derived from the Munsell color system.\n * @property {number} h - Hue `[0..360]`\n * @property {number} c - Chroma `[0..100]`\n * @property {number} g - Grayness `[0..100]`\n * @see {@link https://github.com/d3/d3-hcg|d3-hcg}\n */\nexport interface Hcg {\n /** Hue angle `[0..360]` */\n readonly h: number;\n /** Chroma `[0..100]` */\n readonly c: number;\n /** Grayness `[0..100]` */\n readonly g: number;\n}\n\n/**\n * HWB color model (Hue, Whiteness, Blackness).\n * @property {number} h - Hue `[0..360]`\n * @property {number} w - Whiteness `[0..100]`\n * @property {number} b - Blackness `[0..100]`\n * @see {@link https://www.w3.org/TR/css-color-4/#the-hwb-notation|W3C CSS Color 4}\n */\nexport interface Hwb {\n /** Hue angle `[0..360]` */\n readonly h: number;\n /** Whiteness `[0..100]` */\n readonly w: number;\n /** Blackness `[0..100]` */\n readonly b: number;\n}\n\n/**\n * CIE L*a*b* perceptual color space (1976).\n * a* and b* are theoretically unbounded but clamped to `[-128..127]` for 8-bit storage.\n * @property {number} l - Lightness `[0..100]`\n * @property {number} a - Green-Red axis `[-128..127]`\n * @property {number} b - Blue-Yellow axis `[-128..127]`\n * @see {@link https://en.wikipedia.org/wiki/CIELAB_color_space|Wikipedia}\n * @see {@link https://www.w3.org/TR/css-color-4/#lab-colors|W3C CSS Color 4}\n */\nexport interface Lab {\n /** Lightness `[0..100]` */\n readonly l: number;\n /** Green (-) to Red (+) axis. Clamped `[-128..127]`, theoretical `~[-430..+172]` */\n readonly a: number;\n /** Blue (-) to Yellow (+) axis. Clamped `[-128..127]`, theoretically unbounded */\n readonly b: number;\n}\n\n/**\n * CIE XYZ tristimulus color space with D65 illuminant.\n * @property {number} x - X tristimulus `[0..95.047]`\n * @property {number} y - Y luminance `[0..100]`\n * @property {number} z - Z tristimulus `[0..108.883]`\n * @see {@link https://en.wikipedia.org/wiki/CIE_1931_color_space|Wikipedia CIE 1931}\n * @see {@link https://en.wikipedia.org/wiki/Standard_illuminant#Illuminant_series_D|D65 Illuminant}\n */\nexport interface Xyz {\n /** X tristimulus `[0..95.047]` for D65 white */\n readonly x: number;\n /** Y tristimulus (luminance) `[0..100]` */\n readonly y: number;\n /** Z tristimulus `[0..108.883]` for D65 white */\n readonly z: number;\n}\n\n/**\n * XYZ values from Lab conversion (named Lyz to avoid confusion).\n * Uses D65 illuminant reference white.\n * @property {number} l - X tristimulus `[0..95.047]`\n * @property {number} y - Y luminance `[0..100]`\n * @property {number} z - Z tristimulus `[0..108.883]`\n * @see {@link https://en.wikipedia.org/wiki/Standard_illuminant#Illuminant_series_D|D65 Illuminant}\n */\nexport interface Lyz {\n /** X tristimulus `[0..95.047]` for D65 */\n readonly l: number;\n /** Y tristimulus `[0..100]` */\n readonly y: number;\n /** Z tristimulus `[0..108.883]` for D65 */\n readonly z: number;\n}\n\n/**\n * CIE LCH cylindrical color space (Lightness, Chroma, Hue).\n * Polar representation of L*a*b*.\n * @property {number} l - Lightness `[0..100]`\n * @property {number} c - Chroma `[0..~230]`\n * @property {number} h - Hue `[0..360]`\n * @see {@link https://en.wikipedia.org/wiki/CIELAB_color_space#Cylindrical_model|Wikipedia}\n * @see {@link https://www.w3.org/TR/css-color-4/#lch-colors|W3C CSS Color 4}\n */\nexport interface Lch {\n /** Lightness `[0..100]` */\n readonly l: number;\n /** Chroma `[0..~230]`. Theoretically unbounded, sRGB max ~131 */\n readonly c: number;\n /** Hue angle `[0..360]` */\n readonly h: number;\n}\n\n/**\n * Rounds a number to specified decimal places.\n * Uses exponential notation to avoid floating-point errors\n * (e.g., `1.005 * 100 = 100.49999...` but `roundTo(1.005, 2) = 1.01`).\n * @param num - Number to round\n * @param places - Decimal places `[0..]`\n * @returns Rounded number\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixed|Number.toFixed} for string output\n */\nexport function roundTo(num: number, places: number) {\n return +(Math.round(parseFloat(num.toString() + \"e+\" + places)) + \"e-\" +\n places);\n}\n\n/**\n * Modulo operation that always returns positive result.\n * @param x - Dividend\n * @param n - Divisor\n * @returns `x mod n`, always positive\n */\nexport function modulo(x: number, n: number): number {\n return ((x % n) + n) % n;\n}\n\n/**\n * Converts {@link Rgb} to CSS rgb() string.\n * @param rgb - {@link Rgb} color, r/g/b `[0..255]`\n * @returns CSS string `\"rgb(r,g,b)\"` (rounded)\n */\nexport function rgb2css(rgb: Rgb): string {\n return `rgb(${Math.round(rgb.r)},${Math.round(rgb.g)},${Math.round(rgb.b)})`;\n}\n\n/**\n * Converts {@link Rgb} to comma-separated string.\n * @param rgb - {@link Rgb} color, r/g/b `[0..255]`\n * @returns String `\"r,g,b\"` (rounded)\n */\nexport function rgb2str(rgb: Rgb): string {\n return `${Math.round(rgb.r)},${Math.round(rgb.g)},${Math.round(rgb.b)}`;\n}\n\n/**\n * Converts {@link Rgb} and alpha to CSS rgba() string.\n * @param rgb - {@link Rgb} color, r/g/b `[0..255]`\n * @param alpha - Alpha `[0..1]`\n * @returns CSS string `\"rgba(r,g,b,a)\"` (rounded)\n */\nexport function rgba2css(rgb: Rgb, alpha: number): string {\n return `rgba(${Math.round(rgb.r)},${Math.round(rgb.g)},${Math.round(rgb.b)},${roundTo(alpha, 2)\n })`;\n}\n\n/**\n * Converts {@link Hsl} to CSS hsl() string.\n * @param hsl - {@link Hsl} color, h `[0..360]`, s/l `[0..100]`\n * @returns CSS string `\"hsl(hdeg,s%,l%)\"` (rounded to 2 decimals)\n */\nexport function hsl2css(hsl: Hsl) {\n return `hsl(${roundTo(hsl.h, 2)}deg,${roundTo(hsl.s, 2)}%,${roundTo(hsl.l, 2)\n }%)`;\n}\n\n/**\n * Converts {@link Hwb} to CSS hwb() string.\n * @param hwb - {@link Hwb} color, h `[0..360]`, w/b `[0..100]`\n * @returns CSS string `\"hwb(hdeg,w%,b%)\"` (rounded to 2 decimals)\n */\nexport function hwb2css(hwb: Hwb) {\n return `hwb(${roundTo(hwb.h, 2)}deg,${roundTo(hwb.w, 2)}%,${roundTo(hwb.b, 2)\n }%)`;\n}\n\n/**\n * Converts {@link Rgb} to 6-digit hex string (without #).\n * @param rgb - {@link Rgb} color, r/g/b `[0..255]`\n * @returns Hex string `\"rrggbb\"` (rounded)\n */\nexport function rgb2hex(rgb: Rgb): string {\n return Math.round(rgb.r).toString(16).padStart(2, \"0\") +\n Math.round(rgb.g).toString(16).padStart(2, \"0\") +\n Math.round(rgb.b).toString(16).padStart(2, \"0\");\n}\n\n/**\n * Converts gray value to 6-digit hex string.\n * @param gray - Gray level `[0..100]`\n * @returns Hex string `\"gggggg\"` (rounded)\n */\nexport function gray2hex(gray: number): string {\n const p = Math.round((gray / 100) * 255).toString(16).padStart(2, \"0\");\n return p + p + p;\n}\n\n/**\n * Parses hex string to {@link Rgb}.\n * @param input - Hex string (6 digits, without #)\n * @returns {@link Rgb} color, r/g/b `[0..255]`\n */\nexport function hex2rgb(input: string): Rgb {\n const value: number = parseInt(input, 16);\n if (isNaN(value)) {\n return { r: 0, g: 0, b: 0 };\n }\n return {\n r: (value >> 16) & 0xFF,\n g: (value >> 8) & 0xFF,\n b: value & 0xFF,\n };\n}\n\n/**\n * Converts {@link Hsl} to {@link Rgb}.\n * @param hsl - {@link Hsl} color, h `[0..360]`, s/l `[0..100]`\n * @returns {@link Rgb} color, r/g/b `[0..255]` (not rounded)\n */\nexport function hsl2rgb(hsl: Hsl): Rgb {\n const h = hsl.h / 360;\n const s = hsl.s / 100;\n const l = hsl.l / 100;\n let t2: number;\n let t3: number;\n let val: number;\n if (s === 0) {\n val = l * 255;\n return { r: val, g: val, b: val };\n }\n if (l < 0.5) {\n t2 = l * (1 + s);\n } else {\n t2 = l + s - l * s;\n }\n const t1 = 2 * l - t2;\n const rgb: [number, number, number] = [0, 0, 0];\n for (let i = 0; i < 3; i++) {\n t3 = h + 1.0 / 3.0 * (-(i - 1));\n if (t3 < 0) {\n t3++;\n }\n if (t3 > 1) {\n t3--;\n }\n if (6 * t3 < 1) {\n val = t1 + (t2 - t1) * 6 * t3;\n } else if (2 * t3 < 1) {\n val = t2;\n } else if (3 * t3 < 2) {\n val = t1 + (t2 - t1) * (2.0 / 3.0 - t3) * 6;\n } else {\n val = t1;\n }\n rgb[i] = val * 255;\n }\n return {\n r: rgb[0],\n g: rgb[1],\n b: rgb[2],\n };\n}\n\n/**\n * Converts {@link Hsl} to {@link Hsv}.\n * @param hsl - {@link Hsl} color, h `[0..360]`, s/l `[0..100]`\n * @returns {@link Hsv} color, h `[0..360]`, s/v `[0..100]`\n */\nexport function hsl2hsv(hsl: Hsl): Hsv {\n let s = hsl.s / 100;\n let l = hsl.l / 100;\n let smin = s;\n const lmin = Math.max(l, 0.01);\n l *= 2;\n if (l <= 1) {\n s *= l;\n } else {\n s *= 2 - l;\n }\n if (lmin <= 1) {\n smin *= lmin;\n } else {\n smin *= 2 - lmin;\n }\n const v = (l + s) / 2;\n let sv: number;\n if (l === 0) {\n sv = (2 * smin) / (lmin + smin);\n } else {\n sv = (2 * s) / (l + s);\n }\n return {\n h: hsl.h,\n s: sv * 100,\n v: v * 100,\n };\n}\n\n/**\n * Converts {@link Hsl} to {@link Hcg}.\n * @param hsl - {@link Hsl} color, h `[0..360]`, s/l `[0..100]`\n * @returns {@link Hcg} color, h `[0..360]`, c/g `[0..100]`\n */\nexport function hsl2hcg(hsl: Hsl): Hcg {\n const s = hsl.s / 100;\n const l = hsl.l / 100;\n let c: number;\n if (l < 0.5) {\n c = 2.0 * s * l;\n } else {\n c = 2.0 * s * (1.0 - l);\n }\n let f = 0;\n if (c < 1.0) {\n f = (l - 0.5 * c) / (1.0 - c);\n }\n return {\n h: hsl.h,\n c: c * 100,\n g: f * 100,\n };\n}\n\n/**\n * Converts {@link Hsv} to {@link Rgb}.\n * @param hsv - {@link Hsv} color, h `[0..360]`, s/v `[0..100]`\n * @returns {@link Rgb} color, r/g/b `[0..255]` (not rounded)\n */\nexport function hsv2rgb(hsv: Hsv): Rgb {\n const h = hsv.h / 60;\n const s = hsv.s / 100;\n let v = hsv.v / 100;\n const hi = modulo(Math.floor(h), 6);\n const f = h - Math.floor(h);\n const p = 255 * v * (1 - s);\n const q = 255 * v * (1 - (s * f));\n const t = 255 * v * (1 - (s * (1 - f)));\n v *= 255;\n switch (hi) {\n case 0:\n return { r: v, g: t, b: p };\n case 1:\n return { r: q, g: v, b: p };\n case 2:\n return { r: p, g: v, b: t };\n case 3:\n return { r: p, g: q, b: v };\n case 4:\n return { r: t, g: p, b: v };\n case 5:\n return { r: v, g: p, b: q };\n default:\n return { r: 0, g: 0, b: 0 };\n }\n}\n\n/**\n * Converts {@link Hsv} to {@link Hsl}.\n * @param hsv - {@link Hsv} color, h `[0..360]`, s/v `[0..100]`\n * @returns {@link Hsl} color, h `[0..360]`, s/l `[0..100]`\n */\nexport function hsv2hsl(hsv: Hsv): Hsl {\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const vmin = Math.max(v, 0.01);\n let sl: number;\n let l: number;\n l = (2 - s) * v;\n const lmin = (2 - s) * vmin;\n sl = s * vmin;\n if (lmin <= 1) {\n sl /= lmin;\n } else {\n sl /= 2 - lmin;\n }\n\n if (isNaN(sl)) {\n sl = 0;\n }\n l /= 2;\n\n return {\n h: (hsv.h),\n s: (sl * 100),\n l: (l * 100),\n };\n}\n\n/**\n * Converts {@link Hsv} to {@link Hcg}.\n * @param hsv - {@link Hsv} color, h `[0..360]`, s/v `[0..100]`\n * @returns {@link Hcg} color, h `[0..360]`, c/g `[0..100]`\n */\nexport function hsv2hcg(hsv: Hsv): Hcg {\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const c = s * v;\n let g = 0;\n if (c < 1.0) {\n g = (v - c) / (1 - c);\n }\n return {\n h: (hsv.h),\n c: (c * 100),\n g: (g * 100),\n };\n}\n\n/**\n * Converts {@link Apple} 16-bit RGB to 8-bit {@link Rgb}.\n * @param rgb16 - {@link Apple} color, r16/g16/b16 `[0..65535]`\n * @returns {@link Rgb} color, r/g/b `[0..255]`\n */\nexport function apple2rgb(rgb16: Apple): Rgb {\n return {\n r: (rgb16.r16 / 65535) * 255,\n g: (rgb16.g16 / 65535) * 255,\n b: (rgb16.b16 / 65535) * 255,\n };\n}\n\n/**\n * Converts {@link Cmyk} to {@link Rgb}.\n * @param cmyk - {@link Cmyk} color, c/m/y/k `[0..100]`\n * @returns {@link Rgb} color, r/g/b `[0..255]`\n */\nexport function cmyk2rgb(cmyk: Cmyk): Rgb {\n const c = cmyk.c / 100;\n const m = cmyk.m / 100;\n const y = cmyk.y / 100;\n const k = cmyk.k / 100;\n\n const r = 1 - Math.min(1, c * (1 - k) + k);\n const g = 1 - Math.min(1, m * (1 - k) + k);\n const b = 1 - Math.min(1, y * (1 - k) + k);\n\n return {\n r: (r * 255),\n g: (g * 255),\n b: (b * 255),\n };\n}\n\n/**\n * Converts {@link Rgb} to {@link Cmyk}.\n * @param rgb - {@link Rgb} color, r/g/b `[0..255]`\n * @returns {@link Cmyk} color, c/m/y/k `[0..100]`\n */\nexport function rgb2cmyk(rgb: Rgb): Cmyk {\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n const k = +(1 - Math.max(r, g, b));\n return {\n c: +((1 - r - k) / (1 - k) || 0) * 100,\n m: +((1 - g - k) / (1 - k) || 0) * 100,\n y: +((1 - b - k) / (1 - k) || 0) * 100,\n k: k * 100,\n };\n}\n\n/**\n * Converts {@link Rgb} to {@link Hsl}.\n * @param rgb - {@link Rgb} color, r/g/b `[0..255]`\n * @returns {@link Hsl} color, h `[0..360]`, s/l `[0..100]`\n */\nexport function rgb2hsl(rgb: Rgb): Hsl {\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n\n const min = Math.min(Math.min(r, g), b);\n\n const max = Math.max(Math.max(r, g), b);\n\n const delta = max - min;\n\n let h = 0;\n let s = 0;\n\n if (max == min) {\n h = 0;\n } else if (r == max) {\n h = (g - b) / delta;\n } else if (g == max) {\n h = 2 + (b - r) / delta;\n } else if (b == max) {\n h = 4 + (r - g) / delta;\n }\n\n h = Math.min(h * 60, 360);\n\n if (h < 0) {\n h += 360;\n }\n\n const l = (min + max) / 2;\n\n if (max == min) {\n s = 0;\n } else if (l <= 0.5) {\n s = delta / (max + min);\n } else {\n s = delta / (2 - max - min);\n }\n\n return { h: h, s: s * 100, l: l * 100 };\n}\n\n/**\n * Converts {@link Rgb} to {@link Hwb}.\n * @param rgb - {@link Rgb} color, r/g/b `[0..255]`\n * @returns {@link Hwb} color, h `[0..360]`, w/b `[0..100]`\n */\nexport function rgb2hwb(rgb: Rgb): Hwb {\n const h = rgb2hsl(rgb).h;\n const w = 1.0 / 255.0 * Math.min(rgb.r, Math.min(rgb.g, rgb.b));\n const b = 1.0 - 1.0 / 255.0 * Math.max(rgb.r, Math.max(rgb.g, rgb.b));\n\n return { h: h, w: w * 100, b: b * 100 };\n}\n\n/**\n * Converts {@link Hwb} to {@link Rgb}.\n * @param hwb - {@link Hwb} color, h `[0..360]`, w/b `[0..100]`\n * @returns {@link Rgb} color, r/g/b `[0..255]` (not rounded)\n */\nexport function hwb2rgb(hwb: Hwb): Rgb {\n const h = hwb.h / 360;\n let w = hwb.w / 100;\n let b = hwb.b / 100;\n const ratio = w + b;\n let f = 0;\n if (ratio > 1) { // w + b cannot be > 1\n w /= ratio;\n b /= ratio;\n }\n const i = Math.floor(6 * h);\n const v = 1 - b;\n f = 6 * h - i;\n if ((i & 0x01) != 0) {\n f = 1 - f;\n }\n const n = w + f * (v - w); // linear interpolation\n switch (i) {\n default:\n case 6:\n case 0:\n return {\n r: (v * 255),\n g: (n * 255),\n b: (w * 255),\n };\n case 1:\n return {\n r: (n * 255),\n g: (v * 255),\n b: (w * 255),\n };\n case 2:\n return {\n r: (w * 255),\n g: (v * 255),\n b: (n * 255),\n };\n case 3:\n return {\n r: (w * 255),\n g: (n * 255),\n b: (v * 255),\n };\n case 4:\n return {\n r: (n * 255),\n g: (w * 255),\n b: (v * 255),\n };\n case 5:\n return {\n r: (v * 255),\n g: (w * 255),\n b: (n * 255),\n };\n }\n}\n\n/**\n * Converts {@link Hwb} to {@link Hcg}.\n * @param hwb - {@link Hwb} color, h `[0..360]`, w/b `[0..100]`\n * @returns {@link Hcg} color, h `[0..360]`, c/g `[0..100]`\n */\nexport function hwb2hcg(hwb: Hwb): Hcg {\n const w = hwb.w / 100;\n const b = hwb.b / 100;\n const v = 1 - b;\n const c = v - w;\n let g = 0;\n if (c < 1) {\n g = (v - c) / (1 - c);\n }\n return {\n h: hwb.h,\n c: c * 100,\n g: g * 100,\n };\n}\n\n/**\n * Converts {@link Hcg} to {@link Rgb}.\n * @param hcg - {@link Hcg} color, h `[0..360]`, c/g `[0..100]`\n * @returns {@link Rgb} color, r/g/b `[0..255]` (not rounded)\n */\nexport function hcg2rgb(hcg: Hcg): Rgb {\n const h = hcg.h / 360;\n const c = hcg.c / 100;\n const g = hcg.g / 100;\n if (c === 0) {\n return { r: g * 255, g: g * 255, b: g * 255 };\n }\n let pure0 = 0, pure1 = 0, pure2 = 0;\n const hi: number = modulo(h, 1) * 6;\n const v: number = modulo(hi, 1);\n const w: number = 1 - v;\n let mg = 0;\n switch (Math.floor(hi)) {\n case 0:\n pure0 = 1;\n pure1 = v;\n pure2 = 0;\n break;\n case 1:\n pure0 = w;\n pure1 = 1;\n pure2 = 0;\n break;\n case 2:\n pure0 = 0;\n pure1 = 1;\n pure2 = v;\n break;\n case 3:\n pure0 = 0;\n pure1 = w;\n pure2 = 1;\n break;\n case 4:\n pure0 = v;\n pure1 = 0;\n pure2 = 1;\n break;\n default:\n pure0 = 1;\n pure1 = 0;\n pure2 = w;\n break;\n }\n mg = (1.0 - c) * g;\n return {\n r: (c * pure0 + mg) * 255,\n g: (c * pure1 + mg) * 255,\n b: (c * pure2 + mg) * 255,\n };\n}\n\n/**\n * Converts {@link Hcg} to {@link Hsv}.\n * @param hcg - {@link Hcg} color, h `[0..360]`, c/g `[0..100]`\n * @returns {@link Hsv} color, h `[0..360]`, s/v `[0..100]`\n */\nexport function hcg2hsv(hcg: Hcg): Hsv {\n const c = hcg.c / 100;\n const g = hcg.g / 100;\n const v = c + g * (1.0 - c);\n let s = 0;\n if (v > 0.0) {\n s = c / v;\n }\n return {\n h: hcg.h,\n s: s * 100,\n v: v * 100,\n };\n}\n\n/**\n * Converts {@link Hcg} to {@link Hsl}.\n * @param hcg - {@link Hcg} color, h `[0..360]`, c/g `[0..100]`\n * @returns {@link Hsl} color, h `[0..360]`, s/l `[0..100]`\n */\nexport function hcg2hsl(hcg: Hcg): Hsl {\n const c = hcg.c / 100;\n const g = hcg.g / 100;\n const l: number = g * (1.0 - c) + 0.5 * c;\n let s = 0;\n if (l > 0.0 && l < 0.5) {\n s = c / (2 * l);\n } else if (l >= 0.5 && l < 1.0) {\n s = c / (2 * (1 - l));\n }\n return {\n h: hcg.h,\n s: s * 100,\n l: l * 100,\n };\n}\n\n/**\n * Converts {@link Hcg} to {@link Hwb}.\n * @param hcg - {@link Hcg} color, h `[0..360]`, c/g `[0..100]`\n * @returns {@link Hwb} color, h `[0..360]`, w/b `[0..100]`\n */\nexport function hcg2hwb(hcg: Hcg): Hwb {\n const c = hcg.c / 100;\n const g = hcg.g / 100;\n const v: number = c + g * (1.0 - c);\n return {\n h: hcg.h,\n w: (v - c) * 100,\n b: (1 - v) * 100,\n };\n}\n\n/**\n * Converts gray to {@link Rgb}.\n * @param gray - Gray level `[0..100]`\n * @returns {@link Rgb} color, r/g/b `[0..255]`\n */\nexport function gray2rgb(gray: number): Rgb {\n return {\n r: (gray / 100) * 255,\n g: (gray / 100) * 255,\n b: (gray / 100) * 255,\n };\n}\n\n/**\n * Converts gray to {@link Hsl}.\n * @param gray - Gray level `[0..100]`\n * @returns {@link Hsl} color, h=0, s=0, l=gray\n */\nexport function gray2hsl(gray: number): Hsl {\n return {\n h: 0,\n s: 0,\n l: gray,\n };\n}\n\n/**\n * Converts gray to {@link Hsv}.\n * @param gray - Gray level `[0..100]`\n * @returns {@link Hsv} color, h=0, s=0, v=gray\n */\nexport function gray2hsv(gray: number): Hsv {\n return {\n h: 0,\n s: 0,\n v: gray,\n };\n}\n\n/**\n * Converts gray to {@link Hwb}.\n * @param gray - Gray level `[0..100]`\n * @returns {@link Hwb} color, h=0, w=gray, b=100-gray\n */\nexport function gray2hwb(gray: number): Hwb {\n return {\n h: 0,\n w: gray,\n b: 100 - gray,\n };\n}\n\n/**\n * Converts gray to {@link Cmyk}.\n * @param gray - Gray level `[0..100]`\n * @returns {@link Cmyk} color, c=0, m=0, y=0, k=gray\n */\nexport function gray2cmyk(gray: number): Cmyk {\n return {\n c: 0,\n m: 0,\n y: 0,\n k: gray,\n };\n}\n\n/**\n * Converts gray to {@link Lab}.\n * @param gray - Gray level `[0..100]`\n * @returns {@link Lab} color, l=gray, a=0, b=0\n */\nexport function gray2lab(gray: number): Lab {\n return {\n l: gray,\n a: 0,\n b: 0,\n };\n}\n\n/**\n * CIE Lab constants (exact rational values per CIE 15.3 standard).\n * Using these exact values ensures function continuity at the threshold.\n * @see {@link http://www.brucelindbloom.com/LContinuity.html|Bruce Lindbloom Continuity Study}\n */\nconst CIE_E = 216 / 24389; // ε (epsilon) ≈ 0.008856451679\nconst CIE_K = 24389 / 27; // κ (kappa) ≈ 903.2962962963\n\n/**\n * sRGB to XYZ transformation matrix (IEC 61966-2-1, D65 illuminant).\n * Higher precision than 4-digit approximations.\n */\nconst SRGB_TO_XYZ = {\n xr: 0.4124564, xg: 0.3575761, xb: 0.1804375,\n yr: 0.2126729, yg: 0.7151522, yb: 0.0721750,\n zr: 0.0193339, zg: 0.1191920, zb: 0.9503041,\n};\n\n/**\n * D65 white point tristimulus values.\n */\nconst D65: Xyz = { x: 95.047, y: 100, z: 108.883 };\n\n/**\n * Converts {@link Rgb} to {@link Lab}.\n * @param rgb - {@link Rgb} color, r/g/b `[0..255]`\n * @returns {@link Lab} color, l `[0..100]`, a/b `[-128..127]`\n */\nexport function rgb2lab(rgb: Rgb): Lab {\n let r = rgb.r / 255,\n g = rgb.g / 255,\n b = rgb.b / 255;\n\n // sRGB gamma decoding\n r = (r > 0.04045) ? Math.pow((r + 0.055) / 1.055, 2.4) : r / 12.92;\n g = (g > 0.04045) ? Math.pow((g + 0.055) / 1.055, 2.4) : g / 12.92;\n b = (b > 0.04045) ? Math.pow((b + 0.055) / 1.055, 2.4) : b / 12.92;\n\n // RGB to XYZ using IEC matrix, normalized by D65 white point\n let x = (r * SRGB_TO_XYZ.xr + g * SRGB_TO_XYZ.xg + b * SRGB_TO_XYZ.xb) / (D65.x / 100);\n let y = (r * SRGB_TO_XYZ.yr + g * SRGB_TO_XYZ.yg + b * SRGB_TO_XYZ.yb) / (D65.y / 100);\n let z = (r * SRGB_TO_XYZ.zr + g * SRGB_TO_XYZ.zg + b * SRGB_TO_XYZ.zb) / (D65.z / 100);\n\n // XYZ to Lab using CIE exact constants\n x = (x > CIE_E) ? Math.pow(x, 1 / 3) : (CIE_K * x + 16) / 116;\n y = (y > CIE_E) ? Math.pow(y, 1 / 3) : (CIE_K * y + 16) / 116;\n z = (z > CIE_E) ? Math.pow(z, 1 / 3) : (CIE_K * z + 16) / 116;\n\n return { l: (116 * y) - 16, a: 500 * (x - y), b: 200 * (y - z) };\n}\n\n/**\n * Converts {@link Lab} to {@link Lyz} (XYZ values).\n * @param lab - {@link Lab} color, l `[0..100]`, a/b `[-128..127]`\n * @returns {@link Lyz} color, l `[0..95.047]`, y `[0..100]`, z `[0..108.883]`\n */\nexport function lab2lyz(lab: Lab): Lyz {\n let y = (lab.l + 16) / 116;\n let x = lab.a / 500 + y;\n let z = y - lab.b / 200;\n\n const x3 = Math.pow(x, 3);\n const y3 = Math.pow(y, 3);\n const z3 = Math.pow(z, 3);\n\n // Lab to XYZ using CIE exact constants\n x = (x3 > CIE_E) ? x3 : (116 * x - 16) / CIE_K;\n y = (y3 > CIE_E) ? y3 : (116 * y - 16) / CIE_K;\n z = (z3 > CIE_E) ? z3 : (116 * z - 16) / CIE_K;\n\n return {\n l: x * D65.x,\n y: y * D65.y,\n z: z * D65.z,\n };\n}\n\n/**\n * Converts {@link Lab} to {@link Lch}.\n * @param lab - {@link Lab} color, l `[0..100]`, a/b `[-128..127]`\n * @returns {@link Lch} color, l `[0..100]`, c `[0..~230]`, h `[0..360]`\n */\nexport function lab2lch(lab: Lab): Lch {\n let h: number;\n const hr: number = Math.atan2(lab.b, lab.a);\n h = hr * 360.0 / 2.0 / Math.PI;\n if (h < 0) {\n h += 360;\n }\n const c: number = Math.sqrt(lab.a * lab.a + lab.b * lab.b);\n return {\n l: lab.l,\n c: c,\n h: h,\n };\n}\n\n/**\n * Converts {@link Lch} to {@link Lab}.\n * @param lch - {@link Lch} color, l `[0..100]`, c `[0..~230]`, h `[0..360]`\n * @returns {@link Lab} color, l `[0..100]`, a/b `[-128..127]`\n */\nexport function lch2lab(lch: Lch): Lab {\n const hr: number = lch.h / 360.0 * 2 * Math.PI;\n const a: number = lch.c * Math.cos(hr);\n const b: number = lch.c * Math.sin(hr);\n return {\n l: lch.l,\n a: a,\n b: b,\n };\n}\n\n/**\n * Converts {@link Xyz} to {@link Rgb}.\n * @param xyz - {@link Xyz} color, x `[0..95.047]`, y `[0..100]`, z `[0..108.883]`\n * @returns {@link Rgb} color, r/g/b `[0..255]`\n */\nexport function xyz2rgb(xyz: Xyz): Rgb {\n const x = xyz.x / 100;\n const y = xyz.y / 100;\n const z = xyz.z / 100;\n let r: number;\n let g: number;\n let b: number;\n r = (x * 3.2404542) + (y * -1.5371385) + (z * -0.4985314);\n g = (x * -0.969266) + (y * 1.8760108) + (z * 0.041556);\n b = (x * 0.0556434) + (y * -0.2040259) + (z * 1.0572252);\n\n if (r > 0.0031308) {\n r = (1.055 * Math.pow(r, 1.0 / 2.4)) - 0.055;\n } else {\n r = r * 12.92;\n }\n if (g > 0.0031308) {\n g = (1.055 * Math.pow(g, 1.0 / 2.4)) - 0.055;\n } else {\n g = g * 12.92;\n }\n if (b > 0.0031308) {\n b = (1.055 * Math.pow(b, 1.0 / 2.4)) - 0.055;\n } else {\n b = b * 12.92;\n }\n return {\n r: r * 255,\n g: g * 255,\n b: b * 255,\n };\n}\n\n/**\n * Converts {@link Xyz} to {@link Lab}.\n * @param xyz - {@link Xyz} color, x `[0..95.047]`, y `[0..100]`, z `[0..108.883]`\n * @returns {@link Lab} color, l `[0..100]`, a/b `[-128..127]`\n */\nexport function xyz2lab(xyz: Xyz): Lab {\n let x = xyz.x / D65.x;\n let y = xyz.y / D65.y;\n let z = xyz.z / D65.z;\n\n // XYZ to Lab using CIE exact constants\n x = (x > CIE_E) ? Math.pow(x, 1 / 3) : (CIE_K * x + 16) / 116;\n y = (y > CIE_E) ? Math.pow(y, 1 / 3) : (CIE_K * y + 16) / 116;\n z = (z > CIE_E) ? Math.pow(z, 1 / 3) : (CIE_K * z + 16) / 116;\n\n return {\n l: (116 * y) - 16,\n a: 500 * (x - y),\n b: 200 * (y - z),\n };\n}\n\n/**\n * Converts {@link Rgb} to {@link Xyz}.\n * @param rgb - {@link Rgb} color, r/g/b `[0..255]`\n * @returns {@link Xyz} color, x `[0..95.047]`, y `[0..100]`, z `[0..108.883]`\n */\nexport function rgb2xyz(rgb: Rgb): Xyz {\n const [r, g, b] = [rgb.r, rgb.g, rgb.b]\n .map((x) => x / 255)\n .map((x) => x > 0.04045 ? Math.pow((x + 0.055) / 1.055, 2.4) : x / 12.92)\n .map((x) => x * 100);\n return {\n x: r * SRGB_TO_XYZ.xr + g * SRGB_TO_XYZ.xg + b * SRGB_TO_XYZ.xb,\n y: r * SRGB_TO_XYZ.yr + g * SRGB_TO_XYZ.yg + b * SRGB_TO_XYZ.yb,\n z: r * SRGB_TO_XYZ.zr + g * SRGB_TO_XYZ.zg + b * SRGB_TO_XYZ.zb,\n };\n}\n"],"mappings":"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","names":[]}
|