@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.
- package/CHANGELOG.md +1 -1
- package/README.md +1 -1
- package/alpha.js +6 -10
- package/analog.js +35 -67
- package/api/constants.js +128 -156
- package/api/gradients.js +0 -1
- package/api/names.js +154 -151
- package/api/ranges.js +0 -1
- package/api/system.js +21 -26
- package/api.js +27 -32
- package/clamp.js +18 -29
- package/closest-hue.js +6 -12
- package/color-range.js +159 -228
- package/color.js +29 -28
- package/contrast.js +7 -17
- package/convert.js +19 -40
- package/cosine-gradients.js +177 -229
- package/css/css.js +27 -53
- package/css/parse-css.js +94 -160
- package/defcolor.js +97 -108
- package/distance.js +96 -187
- package/gradients.js +29 -37
- package/hcy/hcy-rgb.js +20 -13
- package/hcy/hcy.js +9 -11
- package/hsi/hsi-rgb.js +32 -30
- package/hsi/hsi.js +9 -11
- package/hsl/hsl-css.js +9 -10
- package/hsl/hsl-hsv.js +12 -9
- package/hsl/hsl-rgb.js +14 -6
- package/hsl/hsl.js +14 -16
- package/hsv/hsv-css.js +4 -1
- package/hsv/hsv-hsl.js +11 -8
- package/hsv/hsv-rgb.js +14 -6
- package/hsv/hsv.js +14 -16
- package/hue.js +12 -12
- package/int/int-css.js +10 -6
- package/int/int-int.js +6 -10
- package/int/int-rgb.js +16 -5
- package/int/int-srgb.js +22 -4
- package/int/int.js +136 -142
- package/internal/css.js +16 -12
- package/internal/dispatch.js +6 -2
- package/internal/ensure.js +18 -16
- package/internal/matrix-ops.js +39 -41
- package/internal/scale.js +4 -2
- package/invert.js +46 -39
- package/is-black.js +12 -5
- package/is-gamut.js +8 -13
- package/is-gray.js +12 -5
- package/is-white.js +14 -7
- package/lab/lab-css.js +4 -9
- package/lab/lab-lab.js +6 -2
- package/lab/lab-lch.js +18 -10
- package/lab/lab-rgb.js +6 -14
- package/lab/lab-xyz.js +16 -20
- package/lab/lab50.js +18 -15
- package/lab/lab65.js +18 -15
- package/lch/lch-css.js +4 -9
- package/lch/lch.js +18 -23
- package/lighten.js +13 -17
- package/linear.js +6 -16
- package/luminance-rgb.js +14 -22
- package/luminance.js +16 -14
- package/max-chroma.js +1340 -227
- package/mix.js +34 -82
- package/oklab/oklab-css.js +4 -9
- package/oklab/oklab-rgb.js +17 -23
- package/oklab/oklab-xyz.js +22 -9
- package/oklab/oklab.js +19 -22
- package/oklch/oklab-oklch.js +10 -11
- package/oklch/oklch-css.js +4 -9
- package/oklch/oklch-oklab.js +9 -9
- package/oklch/oklch.js +14 -20
- package/package.json +19 -17
- package/rgb/hue-rgb.js +14 -11
- package/rgb/kelvin-rgba.js +23 -22
- package/rgb/rgb-css.js +4 -1
- package/rgb/rgb-hcv.js +14 -15
- package/rgb/rgb-hcy.js +10 -14
- package/rgb/rgb-hsi.js +13 -8
- package/rgb/rgb-hsl.js +8 -5
- package/rgb/rgb-hsv.js +7 -4
- package/rgb/rgb-lab.js +6 -18
- package/rgb/rgb-oklab.js +13 -19
- package/rgb/rgb-srgb.js +18 -8
- package/rgb/rgb-xyz.js +6 -19
- package/rgb/rgb-ycc.js +12 -17
- package/rgb/rgb.js +25 -22
- package/rotate.js +25 -38
- package/sort.js +24 -72
- package/srgb/srgb-css.js +9 -9
- package/srgb/srgb-int.js +6 -10
- package/srgb/srgb-rgb.js +18 -8
- package/srgb/srgb.js +16 -13
- package/strategies.js +42 -112
- package/swatches.js +28 -5
- package/tint.js +27 -53
- package/transform.js +274 -149
- package/variations.js +10 -9
- package/xyy/xyy-xyz.js +12 -11
- package/xyy/xyy.js +16 -13
- package/xyz/wavelength-xyz.js +14 -28
- package/xyz/xyz-lab.js +17 -26
- package/xyz/xyz-oklab.js +4 -1
- package/xyz/xyz-rgb.js +6 -18
- package/xyz/xyz-xyy.js +13 -12
- package/xyz/xyz-xyz.js +6 -2
- package/xyz/xyz50.js +20 -17
- package/xyz/xyz65.js +20 -17
- package/ycc/ycc-rgb.js +14 -19
- package/ycc/ycc.js +12 -9
package/internal/matrix-ops.js
CHANGED
|
@@ -2,47 +2,45 @@ import { clamp01 } from "@thi.ng/math/interval";
|
|
|
2
2
|
import { dotS3, dotS4 } from "@thi.ng/vectors/dots";
|
|
3
3
|
import { setC4 } from "@thi.ng/vectors/setc";
|
|
4
4
|
import { __ensureAlpha } from "./ensure.js";
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
return clampOut
|
|
12
|
-
? setC4(out || src, clamp01(x), clamp01(y), clamp01(z), a)
|
|
13
|
-
: setC4(out || src, x, y, z, a);
|
|
5
|
+
const __mulV33 = (out, mat, src, clampOut = false) => {
|
|
6
|
+
const x = dotS3(mat, src, 0, 0, 3);
|
|
7
|
+
const y = dotS3(mat, src, 1, 0, 3);
|
|
8
|
+
const z = dotS3(mat, src, 2, 0, 3);
|
|
9
|
+
const a = __ensureAlpha(src[3]);
|
|
10
|
+
return clampOut ? setC4(out || src, clamp01(x), clamp01(y), clamp01(z), a) : setC4(out || src, x, y, z, a);
|
|
14
11
|
};
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
return clampOut
|
|
23
|
-
? setC4(out, clamp01(x), clamp01(y), clamp01(z), clamp01(w))
|
|
24
|
-
: setC4(out, x, y, z, w);
|
|
12
|
+
const __mulV45 = (out, mat, src, clampOut = true) => {
|
|
13
|
+
out = setC4(out || src, src[0], src[1], src[2], __ensureAlpha(src[3]));
|
|
14
|
+
const x = dotS4(out, mat, 0, 0) + mat[4];
|
|
15
|
+
const y = dotS4(out, mat, 0, 5) + mat[9];
|
|
16
|
+
const z = dotS4(out, mat, 0, 10) + mat[14];
|
|
17
|
+
const w = dotS4(out, mat, 0, 15) + mat[19];
|
|
18
|
+
return clampOut ? setC4(out, clamp01(x), clamp01(y), clamp01(z), clamp01(w)) : setC4(out, x, y, z, w);
|
|
25
19
|
};
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
dotS4(b, a, 15, 4, 1, 5) + b[19],
|
|
20
|
+
const __mulM45 = (a, b) => [
|
|
21
|
+
dotS4(b, a, 0, 0, 1, 5),
|
|
22
|
+
dotS4(b, a, 0, 1, 1, 5),
|
|
23
|
+
dotS4(b, a, 0, 2, 1, 5),
|
|
24
|
+
dotS4(b, a, 0, 3, 1, 5),
|
|
25
|
+
dotS4(b, a, 0, 4, 1, 5) + b[4],
|
|
26
|
+
dotS4(b, a, 5, 0, 1, 5),
|
|
27
|
+
dotS4(b, a, 5, 1, 1, 5),
|
|
28
|
+
dotS4(b, a, 5, 2, 1, 5),
|
|
29
|
+
dotS4(b, a, 5, 3, 1, 5),
|
|
30
|
+
dotS4(b, a, 5, 4, 1, 5) + b[9],
|
|
31
|
+
dotS4(b, a, 10, 0, 1, 5),
|
|
32
|
+
dotS4(b, a, 10, 1, 1, 5),
|
|
33
|
+
dotS4(b, a, 10, 2, 1, 5),
|
|
34
|
+
dotS4(b, a, 10, 3, 1, 5),
|
|
35
|
+
dotS4(b, a, 10, 4, 1, 5) + b[14],
|
|
36
|
+
dotS4(b, a, 15, 0, 1, 5),
|
|
37
|
+
dotS4(b, a, 15, 1, 1, 5),
|
|
38
|
+
dotS4(b, a, 15, 2, 1, 5),
|
|
39
|
+
dotS4(b, a, 15, 3, 1, 5),
|
|
40
|
+
dotS4(b, a, 15, 4, 1, 5) + b[19]
|
|
48
41
|
];
|
|
42
|
+
export {
|
|
43
|
+
__mulM45,
|
|
44
|
+
__mulV33,
|
|
45
|
+
__mulV45
|
|
46
|
+
};
|
package/internal/scale.js
CHANGED
package/invert.js
CHANGED
|
@@ -7,52 +7,59 @@ import { sub3 } from "@thi.ng/vectors/sub";
|
|
|
7
7
|
import { clamp } from "./clamp.js";
|
|
8
8
|
import { __dispatch1 } from "./internal/dispatch.js";
|
|
9
9
|
import { __ensureAlpha } from "./internal/ensure.js";
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
* @remarks
|
|
14
|
-
* If `out` is null, the resulting color will be written back into `src`.
|
|
15
|
-
*
|
|
16
|
-
* Also see {@link TypedColor.invert}.
|
|
17
|
-
*
|
|
18
|
-
* @param out - result
|
|
19
|
-
* @param src - source color
|
|
20
|
-
*/
|
|
21
|
-
export const invertRgb = (out, src) => {
|
|
22
|
-
out = clamp(out || src, src);
|
|
23
|
-
return sub3(out, ONE3, out);
|
|
10
|
+
const invertRgb = (out, src) => {
|
|
11
|
+
out = clamp(out || src, src);
|
|
12
|
+
return sub3(out, ONE3, out);
|
|
24
13
|
};
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
* Also see {@link TypedColor.invert}.
|
|
30
|
-
*
|
|
31
|
-
* @param src - packed RGB int
|
|
32
|
-
*/
|
|
33
|
-
export const invertInt = (src) => src ^ 0xffffff;
|
|
34
|
-
/**
|
|
35
|
-
* Inverts given color and writes result into `out` (or if null, mutates `src`
|
|
36
|
-
* in place).
|
|
37
|
-
*
|
|
38
|
-
* @param out
|
|
39
|
-
* @param src
|
|
40
|
-
*/
|
|
41
|
-
export const invert = defmulti(__dispatch1, {
|
|
14
|
+
const invertInt = (src) => src ^ 16777215;
|
|
15
|
+
const invert = defmulti(
|
|
16
|
+
__dispatch1,
|
|
17
|
+
{
|
|
42
18
|
hcy: "hsv",
|
|
43
19
|
hsi: "hsv",
|
|
44
20
|
hsl: "hsv",
|
|
45
21
|
labD65: "labD50",
|
|
46
22
|
oklab: "labD50",
|
|
47
|
-
srgb: "rgb"
|
|
48
|
-
},
|
|
49
|
-
|
|
23
|
+
srgb: "rgb"
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
hsv: (out, src) => setC4(
|
|
27
|
+
out || src,
|
|
28
|
+
fract(src[0] + 0.5),
|
|
29
|
+
src[1],
|
|
30
|
+
1 - src[2],
|
|
31
|
+
__ensureAlpha(src[3])
|
|
32
|
+
),
|
|
50
33
|
labD50: (out, src) => {
|
|
51
|
-
|
|
52
|
-
|
|
34
|
+
const [min, max] = src.range;
|
|
35
|
+
return setC4(
|
|
36
|
+
out || src,
|
|
37
|
+
1 - src[0],
|
|
38
|
+
__invert1(src[1], min[1], max[1]),
|
|
39
|
+
__invert1(src[2], min[2], max[2]),
|
|
40
|
+
__ensureAlpha(src[3])
|
|
41
|
+
);
|
|
53
42
|
},
|
|
54
|
-
lch: (out, src) => setC4(
|
|
43
|
+
lch: (out, src) => setC4(
|
|
44
|
+
out || src,
|
|
45
|
+
1 - src[0],
|
|
46
|
+
src[1],
|
|
47
|
+
fract(src[2] + 0.5),
|
|
48
|
+
__ensureAlpha(src[3])
|
|
49
|
+
),
|
|
55
50
|
rgb: invertRgb,
|
|
56
|
-
ycc: (out, src) => setC4(
|
|
57
|
-
|
|
51
|
+
ycc: (out, src) => setC4(
|
|
52
|
+
out || src,
|
|
53
|
+
1 - src[0],
|
|
54
|
+
__invert1(src[1], -0.5, 0.5),
|
|
55
|
+
__invert1(src[2], -0.5, 0.5),
|
|
56
|
+
__ensureAlpha(src[3])
|
|
57
|
+
)
|
|
58
|
+
}
|
|
59
|
+
);
|
|
58
60
|
const __invert1 = (x, a, b) => fit(x, a, b, b, a);
|
|
61
|
+
export {
|
|
62
|
+
invert,
|
|
63
|
+
invertInt,
|
|
64
|
+
invertRgb
|
|
65
|
+
};
|
package/is-black.js
CHANGED
|
@@ -5,17 +5,24 @@ import { rgb } from "./rgb/rgb.js";
|
|
|
5
5
|
const isBlackHsv = (x, eps = EPS) => x[2] <= eps;
|
|
6
6
|
const isBlackRgb = (x, eps = EPS) => x[0] <= eps && x[1] <= eps && x[2] <= eps;
|
|
7
7
|
const isBlackLch = (x, eps = EPS) => x[0] <= eps;
|
|
8
|
-
|
|
8
|
+
const isBlack = defmulti(
|
|
9
|
+
__dispatch0,
|
|
10
|
+
{
|
|
9
11
|
hcy: "hsv",
|
|
10
12
|
hsi: "hsv",
|
|
11
13
|
hsl: "hsv",
|
|
12
14
|
labD50: "lch",
|
|
13
15
|
labD65: "lch",
|
|
14
16
|
srgb: "rgb",
|
|
15
|
-
ycc: "rgb"
|
|
16
|
-
},
|
|
17
|
+
ycc: "rgb"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
17
20
|
hsv: isBlackHsv,
|
|
18
21
|
lch: isBlackLch,
|
|
19
22
|
rgb: isBlackRgb,
|
|
20
|
-
[DEFAULT]: (x) => isBlackRgb(rgb(x))
|
|
21
|
-
}
|
|
23
|
+
[DEFAULT]: (x) => isBlackRgb(rgb(x))
|
|
24
|
+
}
|
|
25
|
+
);
|
|
26
|
+
export {
|
|
27
|
+
isBlack
|
|
28
|
+
};
|
package/is-gamut.js
CHANGED
|
@@ -1,16 +1,11 @@
|
|
|
1
1
|
import { inRange } from "@thi.ng/math/interval";
|
|
2
2
|
import { rgb } from "./rgb/rgb.js";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
export
|
|
10
|
-
|
|
11
|
-
const max = 1 + eps;
|
|
12
|
-
const col = src.mode === "rgb" || src.mode === "srgb" ? src : rgb(src);
|
|
13
|
-
return (inRange(col[0], min, max) &&
|
|
14
|
-
inRange(col[1], min, max) &&
|
|
15
|
-
inRange(col[2], min, max));
|
|
3
|
+
const isRgbGamut = (src, eps = 1e-3) => {
|
|
4
|
+
const min = -eps;
|
|
5
|
+
const max = 1 + eps;
|
|
6
|
+
const col = src.mode === "rgb" || src.mode === "srgb" ? src : rgb(src);
|
|
7
|
+
return inRange(col[0], min, max) && inRange(col[1], min, max) && inRange(col[2], min, max);
|
|
8
|
+
};
|
|
9
|
+
export {
|
|
10
|
+
isRgbGamut
|
|
16
11
|
};
|
package/is-gray.js
CHANGED
|
@@ -6,17 +6,24 @@ import { rgb } from "./rgb/rgb.js";
|
|
|
6
6
|
const isGrayHsv = (x, eps = EPS) => x[1] <= eps;
|
|
7
7
|
const isGrayRgb = (x, eps = EPS) => eqDelta(x[0], x[1], eps) && eqDelta(x[0], x[2], eps);
|
|
8
8
|
const isGrayLab = (x, eps = EPS) => eqDelta(x[1], 0, eps) && eqDelta(x[2], 0, eps);
|
|
9
|
-
|
|
9
|
+
const isGray = defmulti(
|
|
10
|
+
__dispatch0,
|
|
11
|
+
{
|
|
10
12
|
hcy: "hsv",
|
|
11
13
|
hsi: "hsv",
|
|
12
14
|
hsl: "hsv",
|
|
13
15
|
lch: "hsv",
|
|
14
16
|
labD65: "labD50",
|
|
15
17
|
srgb: "rgb",
|
|
16
|
-
ycc: "labD50"
|
|
17
|
-
},
|
|
18
|
+
ycc: "labD50"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
18
21
|
hsv: isGrayHsv,
|
|
19
22
|
labD50: isGrayLab,
|
|
20
23
|
rgb: isGrayRgb,
|
|
21
|
-
[DEFAULT]: (x) => isGrayRgb(rgb(x))
|
|
22
|
-
}
|
|
24
|
+
[DEFAULT]: (x) => isGrayRgb(rgb(x))
|
|
25
|
+
}
|
|
26
|
+
);
|
|
27
|
+
export {
|
|
28
|
+
isGray
|
|
29
|
+
};
|
package/is-white.js
CHANGED
|
@@ -4,21 +4,28 @@ import { __dispatch0 } from "./internal/dispatch.js";
|
|
|
4
4
|
import { rgb } from "./rgb/rgb.js";
|
|
5
5
|
const isWhiteHsv = (x, eps = EPS) => x[1] <= eps && x[2] >= 1 - eps;
|
|
6
6
|
const isWhiteRgb = (x, eps = EPS) => {
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
eps = 1 - eps;
|
|
8
|
+
return x[0] >= eps && x[1] >= eps && x[2] >= eps;
|
|
9
9
|
};
|
|
10
10
|
const isWhiteLch = (x, eps = EPS) => x[1] <= eps && x[0] >= 1 - eps;
|
|
11
|
-
|
|
11
|
+
const isWhite = defmulti(
|
|
12
|
+
__dispatch0,
|
|
13
|
+
{
|
|
12
14
|
hsl: "hsv",
|
|
13
15
|
hsi: "hsv",
|
|
14
16
|
labD50: "lch",
|
|
15
17
|
labD65: "lch",
|
|
16
18
|
srgb: "rgb",
|
|
17
|
-
ycc: "lch"
|
|
18
|
-
},
|
|
19
|
+
ycc: "lch"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
19
22
|
hcy: (x, eps = EPS) => x[1] <= eps && x[2] >= 1 - eps,
|
|
20
23
|
hsv: isWhiteHsv,
|
|
21
24
|
lch: isWhiteLch,
|
|
22
25
|
rgb: isWhiteRgb,
|
|
23
|
-
[DEFAULT]: (x) => isWhiteRgb(rgb(x))
|
|
24
|
-
}
|
|
26
|
+
[DEFAULT]: (x) => isWhiteRgb(rgb(x))
|
|
27
|
+
}
|
|
28
|
+
);
|
|
29
|
+
export {
|
|
30
|
+
isWhite
|
|
31
|
+
};
|
package/lab/lab-css.js
CHANGED
|
@@ -1,10 +1,5 @@
|
|
|
1
1
|
import { __labCss } from "../internal/css.js";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
* https://test.csswg.org/harness/results/css-color-4_dev/grouped/ (test reports)
|
|
7
|
-
*
|
|
8
|
-
* @param src -
|
|
9
|
-
*/
|
|
10
|
-
export const labCss = (src) => __labCss("lab", src, 100);
|
|
2
|
+
const labCss = (src) => __labCss("lab", src, 100);
|
|
3
|
+
export {
|
|
4
|
+
labCss
|
|
5
|
+
};
|
package/lab/lab-lab.js
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import { xyzLab, xyzLabD65 } from "../xyz/xyz-lab.js";
|
|
2
2
|
import { xyzXyzD50_65, xyzXyzD65_50 } from "../xyz/xyz-xyz.js";
|
|
3
3
|
import { labXyz, labXyzD65 } from "./lab-xyz.js";
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
const labLabD50_65 = (out, src) => xyzLabD65(out, xyzXyzD50_65(out, labXyz(out, src)));
|
|
5
|
+
const labLabD65_50 = (out, src) => xyzLab(out, xyzXyzD65_50(out, labXyzD65(out, src)));
|
|
6
|
+
export {
|
|
7
|
+
labLabD50_65,
|
|
8
|
+
labLabD65_50
|
|
9
|
+
};
|
package/lab/lab-lch.js
CHANGED
|
@@ -2,15 +2,23 @@ import { atan2Abs } from "@thi.ng/math/angle";
|
|
|
2
2
|
import { INV_TAU, TAU } from "@thi.ng/math/api";
|
|
3
3
|
import { setC4 } from "@thi.ng/vectors/setc";
|
|
4
4
|
import { __ensureAlpha } from "../internal/ensure.js";
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
const labLch = (out, src) => {
|
|
6
|
+
const { 1: a, 2: b } = src;
|
|
7
|
+
return setC4(
|
|
8
|
+
out || src,
|
|
9
|
+
src[0],
|
|
10
|
+
Math.hypot(a, b),
|
|
11
|
+
a === 0 && b === 0 ? 0 : atan2Abs(b, a) * INV_TAU,
|
|
12
|
+
__ensureAlpha(src[3])
|
|
13
|
+
);
|
|
8
14
|
};
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
15
|
+
const lchLab = (out, src) => {
|
|
16
|
+
let { 1: c, 2: h } = src;
|
|
17
|
+
h *= TAU;
|
|
18
|
+
const a = __ensureAlpha(src[3]);
|
|
19
|
+
return c > 0 ? setC4(out || src, src[0], Math.cos(h) * c, Math.sin(h) * c, a) : setC4(out || src, src[0], 0, 0, a);
|
|
20
|
+
};
|
|
21
|
+
export {
|
|
22
|
+
labLch,
|
|
23
|
+
lchLab
|
|
16
24
|
};
|
package/lab/lab-rgb.js
CHANGED
|
@@ -1,16 +1,8 @@
|
|
|
1
1
|
import { labXyz, labXyzD65 } from "./lab-xyz.js";
|
|
2
2
|
import { xyzRgb, xyzRgbD65 } from "../xyz/xyz-rgb.js";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
export const labRgb = (out, src) => xyzRgb(null, labXyz(out, src));
|
|
10
|
-
/**
|
|
11
|
-
* Same as {@link labRgb}, but using {@link D65} white point.
|
|
12
|
-
*
|
|
13
|
-
* @param out -
|
|
14
|
-
* @param src -
|
|
15
|
-
*/
|
|
16
|
-
export const labRgbD65 = (out, src) => xyzRgbD65(null, labXyzD65(out, src));
|
|
3
|
+
const labRgb = (out, src) => xyzRgb(null, labXyz(out, src));
|
|
4
|
+
const labRgbD65 = (out, src) => xyzRgbD65(null, labXyzD65(out, src));
|
|
5
|
+
export {
|
|
6
|
+
labRgb,
|
|
7
|
+
labRgbD65
|
|
8
|
+
};
|
package/lab/lab-xyz.js
CHANGED
|
@@ -2,25 +2,21 @@ import { setC4 } from "@thi.ng/vectors/setc";
|
|
|
2
2
|
import { D50, D65 } from "../api/constants.js";
|
|
3
3
|
import { __ensureAlpha } from "../internal/ensure.js";
|
|
4
4
|
const transform = (x) => {
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
const y = x ** 3;
|
|
6
|
+
return y > 8856e-6 ? y : (x - 16 / 116) / 7.787;
|
|
7
7
|
};
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
8
|
+
const labXyz = (out, src, white = D50) => {
|
|
9
|
+
const y = (src[0] + 0.16) / 1.16;
|
|
10
|
+
return setC4(
|
|
11
|
+
out || src,
|
|
12
|
+
transform(src[1] / 5 + y) * white[0],
|
|
13
|
+
transform(y) * white[1],
|
|
14
|
+
transform(y - src[2] / 2) * white[2],
|
|
15
|
+
__ensureAlpha(src[3])
|
|
16
|
+
);
|
|
17
|
+
};
|
|
18
|
+
const labXyzD65 = (out, src) => labXyz(out, src, D65);
|
|
19
|
+
export {
|
|
20
|
+
labXyz,
|
|
21
|
+
labXyzD65
|
|
19
22
|
};
|
|
20
|
-
/**
|
|
21
|
-
* Same as {@link labXyz}, but using hardcoded {@link D65} white point.
|
|
22
|
-
*
|
|
23
|
-
* @param out -
|
|
24
|
-
* @param src -
|
|
25
|
-
*/
|
|
26
|
-
export const labXyzD65 = (out, src) => labXyz(out, src, D65);
|
package/lab/lab50.js
CHANGED
|
@@ -5,19 +5,22 @@ import { xyzXyzD65_50 } from "../xyz/xyz-xyz.js";
|
|
|
5
5
|
import { labLabD65_50 } from "./lab-lab.js";
|
|
6
6
|
import { lchLab } from "./lab-lch.js";
|
|
7
7
|
import { labRgb } from "./lab-rgb.js";
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
8
|
+
const labD50 = defColor({
|
|
9
|
+
mode: "lab50",
|
|
10
|
+
channels: {
|
|
11
|
+
a: { range: [-0.7929, 0.9355] },
|
|
12
|
+
b: { range: [-1.1203, 0.9339] }
|
|
13
|
+
},
|
|
14
|
+
order: ["l", "a", "b", "alpha"],
|
|
15
|
+
from: {
|
|
16
|
+
rgb: rgbLab,
|
|
17
|
+
lch: lchLab,
|
|
18
|
+
lab65: labLabD65_50,
|
|
19
|
+
xyz50: xyzLab,
|
|
20
|
+
xyz65: [xyzXyzD65_50, xyzLab]
|
|
21
|
+
},
|
|
22
|
+
toRgb: labRgb
|
|
23
23
|
});
|
|
24
|
+
export {
|
|
25
|
+
labD50
|
|
26
|
+
};
|
package/lab/lab65.js
CHANGED
|
@@ -5,19 +5,22 @@ import { xyzXyzD50_65 } from "../xyz/xyz-xyz.js";
|
|
|
5
5
|
import { labLabD50_65 } from "./lab-lab.js";
|
|
6
6
|
import { lchLab } from "./lab-lch.js";
|
|
7
7
|
import { labRgbD65 } from "./lab-rgb.js";
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
8
|
+
const labD65 = defColor({
|
|
9
|
+
mode: "lab65",
|
|
10
|
+
channels: {
|
|
11
|
+
a: { range: [-0.8618, 0.9823] },
|
|
12
|
+
b: { range: [-1.0786, 0.9448] }
|
|
13
|
+
},
|
|
14
|
+
order: ["l", "a", "b", "alpha"],
|
|
15
|
+
from: {
|
|
16
|
+
rgb: rgbLabD65,
|
|
17
|
+
lch: [lchLab, labLabD50_65],
|
|
18
|
+
lab50: labLabD50_65,
|
|
19
|
+
xyz50: [xyzXyzD50_65, xyzLabD65],
|
|
20
|
+
xyz65: xyzLabD65
|
|
21
|
+
},
|
|
22
|
+
toRgb: labRgbD65
|
|
23
23
|
});
|
|
24
|
+
export {
|
|
25
|
+
labD65
|
|
26
|
+
};
|
package/lch/lch-css.js
CHANGED
|
@@ -1,10 +1,5 @@
|
|
|
1
1
|
import { __lchCss } from "../internal/css.js";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
* https://test.csswg.org/harness/results/css-color-4_dev/grouped/ (test reports)
|
|
7
|
-
*
|
|
8
|
-
* @param src -
|
|
9
|
-
*/
|
|
10
|
-
export const lchCss = (src) => __lchCss("lch", src, 100);
|
|
2
|
+
const lchCss = (src) => __lchCss("lch", src, 100);
|
|
3
|
+
export {
|
|
4
|
+
lchCss
|
|
5
|
+
};
|
package/lch/lch.js
CHANGED
|
@@ -5,27 +5,22 @@ import { labRgb } from "../lab/lab-rgb.js";
|
|
|
5
5
|
import { rgbLab } from "../rgb/rgb-lab.js";
|
|
6
6
|
import { xyzLab } from "../xyz/xyz-lab.js";
|
|
7
7
|
import { xyzXyzD65_50 } from "../xyz/xyz-xyz.js";
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
from: {
|
|
24
|
-
rgb: (out, src) => labLch(null, rgbLab(out, src)),
|
|
25
|
-
lab50: labLch,
|
|
26
|
-
lab65: [labLabD65_50, labLch],
|
|
27
|
-
xyz50: [xyzLab, labLch],
|
|
28
|
-
xyz65: [xyzXyzD65_50, xyzLab, labLch],
|
|
29
|
-
},
|
|
30
|
-
toRgb: [lchLab, labRgb],
|
|
8
|
+
const lch = defColor({
|
|
9
|
+
mode: "lch",
|
|
10
|
+
channels: {
|
|
11
|
+
c: { range: [0, 1.312] },
|
|
12
|
+
h: { hue: true }
|
|
13
|
+
},
|
|
14
|
+
order: ["l", "c", "h", "alpha"],
|
|
15
|
+
from: {
|
|
16
|
+
rgb: (out, src) => labLch(null, rgbLab(out, src)),
|
|
17
|
+
lab50: labLch,
|
|
18
|
+
lab65: [labLabD65_50, labLch],
|
|
19
|
+
xyz50: [xyzLab, labLch],
|
|
20
|
+
xyz65: [xyzXyzD65_50, xyzLab, labLch]
|
|
21
|
+
},
|
|
22
|
+
toRgb: [lchLab, labRgb]
|
|
31
23
|
});
|
|
24
|
+
export {
|
|
25
|
+
lch
|
|
26
|
+
};
|
package/lighten.js
CHANGED
|
@@ -3,22 +3,18 @@ import { clamp01 } from "@thi.ng/math/interval";
|
|
|
3
3
|
import { set4 } from "@thi.ng/vectors/set";
|
|
4
4
|
import { __dispatch1 } from "./internal/dispatch.js";
|
|
5
5
|
const $ = (id) => (out, src, n) => {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
out = set4(out || src, src);
|
|
7
|
+
out[id] = clamp01(out[id] + n);
|
|
8
|
+
return out;
|
|
9
9
|
};
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
* @remarks
|
|
15
|
-
* If `offset` is negative, then color will be darkened.
|
|
16
|
-
*
|
|
17
|
-
* @param out -
|
|
18
|
-
* @param src -
|
|
19
|
-
* @param delta -
|
|
20
|
-
*/
|
|
21
|
-
export const lighten = defmulti(__dispatch1, { hsv: "hsl", hsi: "hsl", hcy: "hsl" }, {
|
|
10
|
+
const lighten = defmulti(
|
|
11
|
+
__dispatch1,
|
|
12
|
+
{ hsv: "hsl", hsi: "hsl", hcy: "hsl" },
|
|
13
|
+
{
|
|
22
14
|
hsl: $(2),
|
|
23
|
-
lch: $(0)
|
|
24
|
-
}
|
|
15
|
+
lch: $(0)
|
|
16
|
+
}
|
|
17
|
+
);
|
|
18
|
+
export {
|
|
19
|
+
lighten
|
|
20
|
+
};
|
package/linear.js
CHANGED
|
@@ -1,16 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
*/
|
|
8
|
-
export const linearSrgb = (x) => x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055;
|
|
9
|
-
/**
|
|
10
|
-
* Maps a single linear sRGB channel value to linear RGB.
|
|
11
|
-
*
|
|
12
|
-
* https://en.wikipedia.org/wiki/SRGB
|
|
13
|
-
*
|
|
14
|
-
* @param x - channel value
|
|
15
|
-
*/
|
|
16
|
-
export const srgbLinear = (x) => x <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);
|
|
1
|
+
const linearSrgb = (x) => x <= 31308e-7 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055;
|
|
2
|
+
const srgbLinear = (x) => x <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);
|
|
3
|
+
export {
|
|
4
|
+
linearSrgb,
|
|
5
|
+
srgbLinear
|
|
6
|
+
};
|