@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/rgb/rgb-hsv.js CHANGED
@@ -1,7 +1,10 @@
1
1
  import { EPS } from "@thi.ng/math/api";
2
2
  import { rgbHcv } from "./rgb-hcv.js";
3
- export const rgbHsv = (out, src) => {
4
- out = rgbHcv(out, src);
5
- out[1] /= out[2] + EPS;
6
- return out;
3
+ const rgbHsv = (out, src) => {
4
+ out = rgbHcv(out, src);
5
+ out[1] /= out[2] + EPS;
6
+ return out;
7
+ };
8
+ export {
9
+ rgbHsv
7
10
  };
package/rgb/rgb-lab.js CHANGED
@@ -1,20 +1,8 @@
1
1
  import { rgbXyz, rgbXyzD65 } from "./rgb-xyz.js";
2
2
  import { xyzLab, xyzLabD65 } from "../xyz/xyz-lab.js";
3
- /**
4
- * Converts linear RGB to Lab (via XYZ) using {@link D50} white point.
5
- *
6
- * @remarks
7
- * Important: We're using a normalized Lab space w/ all three coordinates
8
- * divided by 100 (normalized to 100% luminance).
9
- *
10
- * @param out -
11
- * @param src -
12
- */
13
- export const rgbLab = (out, src) => xyzLab(null, rgbXyz(out, src));
14
- /**
15
- * Same as {@link rgbLab}, but using {@link D65} white point.
16
- *
17
- * @param out -
18
- * @param src -
19
- */
20
- export const rgbLabD65 = (out, src) => xyzLabD65(null, rgbXyzD65(out, src));
3
+ const rgbLab = (out, src) => xyzLab(null, rgbXyz(out, src));
4
+ const rgbLabD65 = (out, src) => xyzLabD65(null, rgbXyzD65(out, src));
5
+ export {
6
+ rgbLab,
7
+ rgbLabD65
8
+ };
package/rgb/rgb-oklab.js CHANGED
@@ -1,24 +1,18 @@
1
1
  import { powN3 } from "@thi.ng/vectors/pown";
2
2
  import { OKLAB_M2 } from "../api/constants.js";
3
3
  import { __mulV33 } from "../internal/matrix-ops.js";
4
- /**
5
- * @remarks
6
- * Reference:
7
- * - https://bottosson.github.io/posts/oklab/#converting-from-linear-srgb-to-oklab
8
- *
9
- * @internal
10
- */
11
- // prettier-ignore
12
4
  const CONE_LMS = [
13
- 0.4122214708, 0.2119034982, 0.0883024619,
14
- 0.5363325363, 0.6806995451, 0.2817188376,
15
- 0.0514459929, 0.1073969566, 0.6299787005,
5
+ 0.4122214708,
6
+ 0.2119034982,
7
+ 0.0883024619,
8
+ 0.5363325363,
9
+ 0.6806995451,
10
+ 0.2817188376,
11
+ 0.0514459929,
12
+ 0.1073969566,
13
+ 0.6299787005
16
14
  ];
17
- /**
18
- * @remarks
19
- * Reference: https://bottosson.github.io/posts/oklab/
20
- *
21
- * @param out -
22
- * @param src -
23
- */
24
- export const rgbOklab = (out, src) => __mulV33(null, OKLAB_M2, powN3(null, __mulV33(out, CONE_LMS, src), 1 / 3));
15
+ const rgbOklab = (out, src) => __mulV33(null, OKLAB_M2, powN3(null, __mulV33(out, CONE_LMS, src), 1 / 3));
16
+ export {
17
+ rgbOklab
18
+ };
package/rgb/rgb-srgb.js CHANGED
@@ -1,12 +1,22 @@
1
1
  import { setC4 } from "@thi.ng/vectors/setc";
2
2
  import { __ensureAlpha } from "../internal/ensure.js";
3
3
  import { linearSrgb } from "../linear.js";
4
- /**
5
- * Converts linear RGB to sRGB.
6
- *
7
- * @param out - result
8
- * @param src - source color
9
- */
10
- export const rgbSrgb = (out, src) => setC4(out || src, linearSrgb(src[0]), linearSrgb(src[1]), linearSrgb(src[2]), __ensureAlpha(src[3]));
4
+ const rgbSrgb = (out, src) => setC4(
5
+ out || src,
6
+ linearSrgb(src[0]),
7
+ linearSrgb(src[1]),
8
+ linearSrgb(src[2]),
9
+ __ensureAlpha(src[3])
10
+ );
11
11
  const GAMMA = 1 / 2.2;
12
- export const rgbSrgbApprox = (out, src) => setC4(out || src, src[0] ** GAMMA, src[1] ** GAMMA, src[2] ** GAMMA, __ensureAlpha(src[3]));
12
+ const rgbSrgbApprox = (out, src) => setC4(
13
+ out || src,
14
+ src[0] ** GAMMA,
15
+ src[1] ** GAMMA,
16
+ src[2] ** GAMMA,
17
+ __ensureAlpha(src[3])
18
+ );
19
+ export {
20
+ rgbSrgb,
21
+ rgbSrgbApprox
22
+ };
package/rgb/rgb-xyz.js CHANGED
@@ -1,22 +1,9 @@
1
1
  import { RGB_XYZ_D50, RGB_XYZ_D65 } from "../api/constants.js";
2
2
  import { clamp } from "../clamp.js";
3
3
  import { __mulV33 } from "../internal/matrix-ops.js";
4
- /**
5
- * Converts RGB to XYZ using provided transformation matrix (default:
6
- * {@link RGB_XYZ_D50}).
7
- *
8
- * https://en.wikipedia.org/wiki/CIE_1931_color_space
9
- *
10
- * @param out - result
11
- * @param src - source color
12
- * @param mat - transform matrix
13
- */
14
- export const rgbXyz = (out, src, mat = RGB_XYZ_D50) => __mulV33(null, mat, clamp(out, src));
15
- /**
16
- * Same as {@link rgbXyz}, but hard coded to use {@link D65} white point (via
17
- * {@link RGB_XYZ_D65} matrix).
18
- *
19
- * @param out -
20
- * @param src -
21
- */
22
- export const rgbXyzD65 = (out, src) => rgbXyz(out, src, RGB_XYZ_D65);
4
+ const rgbXyz = (out, src, mat = RGB_XYZ_D50) => __mulV33(null, mat, clamp(out, src));
5
+ const rgbXyzD65 = (out, src) => rgbXyz(out, src, RGB_XYZ_D65);
6
+ export {
7
+ rgbXyz,
8
+ rgbXyzD65
9
+ };
package/rgb/rgb-ycc.js CHANGED
@@ -2,21 +2,16 @@ import { dot3 } from "@thi.ng/vectors/dot";
2
2
  import { setC4 } from "@thi.ng/vectors/setc";
3
3
  import { RGB_LUMINANCE_REC709 } from "../api/constants.js";
4
4
  import { __ensureAlpha } from "../internal/ensure.js";
5
- /**
6
- * @remarks
7
- * https://en.wikipedia.org/wiki/YCbCr#YCbCr
8
- *
9
- * By default uses luminance weights as per BT.709 (aka
10
- * {@link RGB_LUMINANCE_REC709}):
11
- *
12
- * - https://en.wikipedia.org/wiki/YCbCr#ITU-R_BT.709_conversion
13
- * - https://en.wikipedia.org/wiki/Rec._709
14
- *
15
- * @param out -
16
- * @param src -
17
- * @param luma -
18
- */
19
- export const rgbYcc = (out, src, luma = RGB_LUMINANCE_REC709) => {
20
- const y = dot3(src, luma);
21
- return setC4(out || src, y, (0.5 * (src[2] - y)) / (1 - luma[2]), (0.5 * (src[0] - y)) / (1 - luma[0]), __ensureAlpha(src[3]));
5
+ const rgbYcc = (out, src, luma = RGB_LUMINANCE_REC709) => {
6
+ const y = dot3(src, luma);
7
+ return setC4(
8
+ out || src,
9
+ y,
10
+ 0.5 * (src[2] - y) / (1 - luma[2]),
11
+ 0.5 * (src[0] - y) / (1 - luma[0]),
12
+ __ensureAlpha(src[3])
13
+ );
14
+ };
15
+ export {
16
+ rgbYcc
22
17
  };
package/rgb/rgb.js CHANGED
@@ -12,26 +12,29 @@ import { srgbRgb } from "../srgb/srgb-rgb.js";
12
12
  import { xyyXyz } from "../xyy/xyy-xyz.js";
13
13
  import { xyzRgb, xyzRgbD65 } from "../xyz/xyz-rgb.js";
14
14
  import { yccRgb } from "../ycc/ycc-rgb.js";
15
- export const rgb = defColor({
16
- mode: "rgb",
17
- order: ["r", "g", "b", "alpha"],
18
- from: {
19
- abgr32: (out, src) => intAbgr32Rgb(out, src[0]),
20
- argb32: (out, src) => intArgb32Rgb(out, src[0]),
21
- hcy: hcyRgb,
22
- hsi: hsiRgb,
23
- hsl: hslRgb,
24
- hsv: hsvRgb,
25
- lab50: labRgb,
26
- lab65: labRgbD65,
27
- lch: [lchLab, labRgb],
28
- oklab: oklabRgb,
29
- rgb: set4,
30
- srgb: srgbRgb,
31
- xyy: [xyyXyz, xyzRgbD65],
32
- xyz50: xyzRgb,
33
- xyz65: xyzRgbD65,
34
- ycc: yccRgb,
35
- },
36
- toRgb: set4,
15
+ const rgb = defColor({
16
+ mode: "rgb",
17
+ order: ["r", "g", "b", "alpha"],
18
+ from: {
19
+ abgr32: (out, src) => intAbgr32Rgb(out, src[0]),
20
+ argb32: (out, src) => intArgb32Rgb(out, src[0]),
21
+ hcy: hcyRgb,
22
+ hsi: hsiRgb,
23
+ hsl: hslRgb,
24
+ hsv: hsvRgb,
25
+ lab50: labRgb,
26
+ lab65: labRgbD65,
27
+ lch: [lchLab, labRgb],
28
+ oklab: oklabRgb,
29
+ rgb: set4,
30
+ srgb: srgbRgb,
31
+ xyy: [xyyXyz, xyzRgbD65],
32
+ xyz50: xyzRgb,
33
+ xyz65: xyzRgbD65,
34
+ ycc: yccRgb
35
+ },
36
+ toRgb: set4
37
37
  });
38
+ export {
39
+ rgb
40
+ };
package/rotate.js CHANGED
@@ -3,41 +3,28 @@ import { fract } from "@thi.ng/math/prec";
3
3
  import { setC4 } from "@thi.ng/vectors/setc";
4
4
  import { __dispatch1 } from "./internal/dispatch.js";
5
5
  import { __ensureAlpha } from "./internal/ensure.js";
6
- /**
7
- * Color rotation. Rotates hue by given `theta` and writes result color into
8
- * `out`.
9
- *
10
- * @remarks
11
- * If `out` is null, the resulting will be written back into `src`.
12
- *
13
- * As with all hue-based color modes in this package, the hue is stored
14
- * normalized (in [0..1] interval) and NOT as degrees. The same goes for the
15
- * rotation angle `theta`.
16
- *
17
- * Only supported for hue based color modes:
18
- *
19
- * - hcy
20
- * - hsi
21
- * - hsl
22
- * - hsv
23
- * - lch
24
- * - oklch
25
- *
26
- * @param out
27
- * @param src
28
- * @param theta
29
- */
30
- export const rotate = defmulti(__dispatch1, { hcy: "hsl", hsi: "hsl", hsv: "hsl", oklch: "lch" }, {
31
- hsl: (out, src, theta) => setC4(out || src, fract(src[0] + theta), src[1], src[2], __ensureAlpha(src[3])),
32
- lch: (out, src, theta) => setC4(out || src, src[0], src[1], fract(src[2] + theta), __ensureAlpha(src[3])),
33
- });
34
- /**
35
- * Syntax sugar for {@link rotate} with 180 degree rotation.
36
- *
37
- * @remarks
38
- * If `out` is null, the resulting color will be written back into `src`.
39
- *
40
- * @param out
41
- * @param src
42
- */
43
- export const complementary = (out, src) => rotate(out, src, 0.5);
6
+ const rotate = defmulti(
7
+ __dispatch1,
8
+ { hcy: "hsl", hsi: "hsl", hsv: "hsl", oklch: "lch" },
9
+ {
10
+ hsl: (out, src, theta) => setC4(
11
+ out || src,
12
+ fract(src[0] + theta),
13
+ src[1],
14
+ src[2],
15
+ __ensureAlpha(src[3])
16
+ ),
17
+ lch: (out, src, theta) => setC4(
18
+ out || src,
19
+ src[0],
20
+ src[1],
21
+ fract(src[2] + theta),
22
+ __ensureAlpha(src[3])
23
+ )
24
+ }
25
+ );
26
+ const complementary = (out, src) => rotate(out, src, 0.5);
27
+ export {
28
+ complementary,
29
+ rotate
30
+ };
package/sort.js CHANGED
@@ -5,77 +5,29 @@ import { swap } from "@thi.ng/arrays/swap";
5
5
  import { compareNumAsc, compareNumDesc } from "@thi.ng/compare/numeric";
6
6
  import { distEucledian3 } from "./distance.js";
7
7
  import { intAbgr32Srgb } from "./int/int-srgb.js";
8
- export const selectChannel = (id) => (col) => col[id];
9
- /**
10
- * Takes a `target` color and optional `distance` function (default:
11
- * {@link distEucledian3}). Returns a new function which can be used as `key`
12
- * function for {@link sort} to compute the distance metric of a color to the
13
- * given `target`.
14
- *
15
- * @param target -
16
- * @param dist -
17
- */
18
- export const proximity = (target, dist = distEucledian3) => (col) => dist(target, col);
19
- /**
20
- * Similar to {@link proximity}, but intended as syntax sugar for {@link ABGR}
21
- * input colors. The proximity will still be computed using given distance
22
- * function (default: {@link distEucledian3}) and will be in sRGB space. Hence
23
- * given `target` color should be provided in the same space too.
24
- *
25
- * @param target -
26
- * @param dist -
27
- */
28
- export const proximityABGR32 = (target, dist = distEucledian3) => (col) => dist(target, intAbgr32Srgb([], col[0]));
29
- export const sort = (colors, key, isReverse = false) => sortByCachedKey(colors, key, isReverse ? compareNumDesc : compareNumAsc);
30
- /**
31
- * Similar to {@link sort}, but only for memory mapped colors (e.g. mapping a
32
- * pixel buffer). Does NOT change the order of elements in given `colors` array,
33
- * BUT sorts the **apparent** order by swapping the contents of the backing
34
- * memory.
35
- *
36
- * ```ts
37
- * // memory buffer of 4 sRGB colors
38
- * const buf = new Float32Array([0,1,0,1, 0,0.5,0,1, 0,0.25,0,1, 0,0.75,0,1]);
39
- *
40
- * // map buffer (creates 4 SRGB instances linked to the buffer)
41
- * const pix = srgb.mapBuffer(buf);
42
- *
43
- * // display original order
44
- * pix.map(css);
45
- * // [ '#00ff00', '#008000', '#004000', '#00bf00' ]
46
- *
47
- * // sort colors (buffer!) by luminance
48
- * sortMapped(pix, luminanceSrgb);
49
- *
50
- * // new order
51
- * pix.map(css);
52
- * // [ '#004000', '#008000', '#00bf00', '#00ff00' ]
53
- *
54
- * // buffer contents have been re-ordered
55
- * buf
56
- * // Float32Array(16) [
57
- * // 0, 0.25, 0, 1, 0,
58
- * // 0.5, 0, 1, 0, 0.75,
59
- * // 0, 1, 0, 1, 0,
60
- * // 1
61
- * // ]
62
- * ```
63
- *
64
- * @param colors -
65
- * @param key -
66
- * @param isReverse -
67
- */
68
- export const sortMapped = (colors, key, isReverse = false) => {
69
- if (!colors.length)
70
- return colors;
71
- const keys = colors.map(key);
72
- const tmp = typedArray(typedArrayType(colors[0].buf), colors[0].length);
73
- quickSort(keys, isReverse ? compareNumDesc : compareNumAsc, (_, x, y) => {
74
- swap(keys, x, y);
75
- tmp.set(colors[x]);
76
- colors[x].set(colors[y]);
77
- colors[y].set(tmp);
78
- });
8
+ const selectChannel = (id) => (col) => col[id];
9
+ const proximity = (target, dist = distEucledian3) => (col) => dist(target, col);
10
+ const proximityABGR32 = (target, dist = distEucledian3) => (col) => dist(target, intAbgr32Srgb([], col[0]));
11
+ const sort = (colors, key, isReverse = false) => sortByCachedKey(colors, key, isReverse ? compareNumDesc : compareNumAsc);
12
+ const sortMapped = (colors, key, isReverse = false) => {
13
+ if (!colors.length)
79
14
  return colors;
15
+ const keys = colors.map(key);
16
+ const tmp = typedArray(typedArrayType(colors[0].buf), colors[0].length);
17
+ quickSort(keys, isReverse ? compareNumDesc : compareNumAsc, (_, x, y) => {
18
+ swap(keys, x, y);
19
+ tmp.set(colors[x]);
20
+ colors[x].set(colors[y]);
21
+ colors[y].set(tmp);
22
+ });
23
+ return colors;
24
+ };
25
+ const mostSimilar = (colors, key) => sort(colors.slice(), key)[0];
26
+ export {
27
+ mostSimilar,
28
+ proximity,
29
+ proximityABGR32,
30
+ selectChannel,
31
+ sort,
32
+ sortMapped
80
33
  };
81
- export const mostSimilar = (colors, key) => sort(colors.slice(), key)[0];
package/srgb/srgb-css.js CHANGED
@@ -2,13 +2,13 @@ import { U24 } from "@thi.ng/strings/radix";
2
2
  import { FF } from "../api/constants.js";
3
3
  import { __ensureAlpha } from "../internal/ensure.js";
4
4
  import { __scale8bit } from "../internal/scale.js";
5
- export const srgbCss = (src) => {
6
- const r = __scale8bit(src[0]);
7
- const g = __scale8bit(src[1]);
8
- const b = __scale8bit(src[2]);
9
- const a = __ensureAlpha(src[3]);
10
- // TODO update to `rgb(${r} ${g} ${b}/${FF(a)})` (CSS L4 syntax)
11
- return a < 1
12
- ? `rgba(${r},${g},${b},${FF(a)})`
13
- : `#${U24((r << 16) | (g << 8) | b)}`;
5
+ const srgbCss = (src) => {
6
+ const r = __scale8bit(src[0]);
7
+ const g = __scale8bit(src[1]);
8
+ const b = __scale8bit(src[2]);
9
+ const a = __ensureAlpha(src[3]);
10
+ return a < 1 ? `rgba(${r},${g},${b},${FF(a)})` : `#${U24(r << 16 | g << 8 | b)}`;
11
+ };
12
+ export {
13
+ srgbCss
14
14
  };
package/srgb/srgb-int.js CHANGED
@@ -1,12 +1,8 @@
1
1
  import { clamp01 } from "@thi.ng/math/interval";
2
2
  import { __ensureAlpha } from "../internal/ensure.js";
3
- export const srgbIntArgb32 = (src) => (((__ensureAlpha(src[3]) * 0xff + 0.5) << 24) |
4
- ((clamp01(src[0]) * 0xff + 0.5) << 16) |
5
- ((clamp01(src[1]) * 0xff + 0.5) << 8) |
6
- (clamp01(src[2]) * 0xff + 0.5)) >>>
7
- 0;
8
- export const srgbIntAbgr32 = (src) => (((__ensureAlpha(src[3]) * 0xff + 0.5) << 24) |
9
- ((clamp01(src[2]) * 0xff + 0.5) << 16) |
10
- ((clamp01(src[1]) * 0xff + 0.5) << 8) |
11
- (clamp01(src[0]) * 0xff + 0.5)) >>>
12
- 0;
3
+ const srgbIntArgb32 = (src) => (__ensureAlpha(src[3]) * 255 + 0.5 << 24 | clamp01(src[0]) * 255 + 0.5 << 16 | clamp01(src[1]) * 255 + 0.5 << 8 | clamp01(src[2]) * 255 + 0.5) >>> 0;
4
+ const srgbIntAbgr32 = (src) => (__ensureAlpha(src[3]) * 255 + 0.5 << 24 | clamp01(src[2]) * 255 + 0.5 << 16 | clamp01(src[1]) * 255 + 0.5 << 8 | clamp01(src[0]) * 255 + 0.5) >>> 0;
5
+ export {
6
+ srgbIntAbgr32,
7
+ srgbIntArgb32
8
+ };
package/srgb/srgb-rgb.js CHANGED
@@ -1,12 +1,22 @@
1
1
  import { setC4 } from "@thi.ng/vectors/setc";
2
2
  import { __ensureAlpha } from "../internal/ensure.js";
3
3
  import { srgbLinear } from "../linear.js";
4
- /**
5
- * Converts sRGB to linear RGB.
6
- *
7
- * @param out - result
8
- * @param src - source color
9
- */
10
- export const srgbRgb = (out, src) => setC4(out || src, srgbLinear(src[0]), srgbLinear(src[1]), srgbLinear(src[2]), __ensureAlpha(src[3]));
4
+ const srgbRgb = (out, src) => setC4(
5
+ out || src,
6
+ srgbLinear(src[0]),
7
+ srgbLinear(src[1]),
8
+ srgbLinear(src[2]),
9
+ __ensureAlpha(src[3])
10
+ );
11
11
  const GAMMA = 2.2;
12
- export const srgbRgbApprox = (out, src) => setC4(out || src, src[0] ** GAMMA, src[1] ** GAMMA, src[2] ** GAMMA, __ensureAlpha(src[3]));
12
+ const srgbRgbApprox = (out, src) => setC4(
13
+ out || src,
14
+ src[0] ** GAMMA,
15
+ src[1] ** GAMMA,
16
+ src[2] ** GAMMA,
17
+ __ensureAlpha(src[3])
18
+ );
19
+ export {
20
+ srgbRgb,
21
+ srgbRgbApprox
22
+ };
package/srgb/srgb.js CHANGED
@@ -6,17 +6,20 @@ import { hsvRgb } from "../hsv/hsv-rgb.js";
6
6
  import { intAbgr32Srgb, intArgb32Srgb } from "../int/int-srgb.js";
7
7
  import { rgbSrgb } from "../rgb/rgb-srgb.js";
8
8
  import { srgbRgb } from "./srgb-rgb.js";
9
- export const srgb = defColor({
10
- mode: "srgb",
11
- order: ["r", "g", "b", "alpha"],
12
- from: {
13
- abgr32: (out, src) => intAbgr32Srgb(out, src[0]),
14
- argb32: (out, src) => intArgb32Srgb(out, src[0]),
15
- hcy: hcyRgb,
16
- hsi: hsiRgb,
17
- hsl: hslRgb,
18
- hsv: hsvRgb,
19
- rgb: rgbSrgb,
20
- },
21
- toRgb: srgbRgb,
9
+ const srgb = defColor({
10
+ mode: "srgb",
11
+ order: ["r", "g", "b", "alpha"],
12
+ from: {
13
+ abgr32: (out, src) => intAbgr32Srgb(out, src[0]),
14
+ argb32: (out, src) => intArgb32Srgb(out, src[0]),
15
+ hcy: hcyRgb,
16
+ hsi: hsiRgb,
17
+ hsl: hslRgb,
18
+ hsv: hsvRgb,
19
+ rgb: rgbSrgb
20
+ },
21
+ toRgb: srgbRgb
22
22
  });
23
+ export {
24
+ srgb
25
+ };