@lakuna/color 1.2.0 → 1.2.1

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 (161) hide show
  1. package/dist/convert/adobeToXyz.d.ts +1 -1
  2. package/dist/convert/adobeToXyz.d.ts.map +1 -1
  3. package/dist/convert/adobeToXyz.js.map +1 -1
  4. package/dist/convert/cmyToCmyk.d.ts +1 -1
  5. package/dist/convert/cmyToCmyk.d.ts.map +1 -1
  6. package/dist/convert/cmyToCmyk.js.map +1 -1
  7. package/dist/convert/cmyToRgb.d.ts +1 -1
  8. package/dist/convert/cmyToRgb.d.ts.map +1 -1
  9. package/dist/convert/cmyToRgb.js.map +1 -1
  10. package/dist/convert/cmykToCmy.d.ts +1 -1
  11. package/dist/convert/cmykToCmy.d.ts.map +1 -1
  12. package/dist/convert/cmykToCmy.js.map +1 -1
  13. package/dist/convert/hslToRgb.d.ts +1 -1
  14. package/dist/convert/hslToRgb.d.ts.map +1 -1
  15. package/dist/convert/hslToRgb.js.map +1 -1
  16. package/dist/convert/hsvToRgb.d.ts +1 -1
  17. package/dist/convert/hsvToRgb.d.ts.map +1 -1
  18. package/dist/convert/hsvToRgb.js.map +1 -1
  19. package/dist/convert/hunterToXyz.d.ts +1 -1
  20. package/dist/convert/hunterToXyz.d.ts.map +1 -1
  21. package/dist/convert/hunterToXyz.js.map +1 -1
  22. package/dist/convert/labToLch.d.ts +2 -2
  23. package/dist/convert/labToLch.d.ts.map +1 -1
  24. package/dist/convert/labToLch.js.map +1 -1
  25. package/dist/convert/labToXyz.d.ts +1 -1
  26. package/dist/convert/labToXyz.d.ts.map +1 -1
  27. package/dist/convert/labToXyz.js.map +1 -1
  28. package/dist/convert/lchToLab.d.ts +2 -2
  29. package/dist/convert/lchToLab.d.ts.map +1 -1
  30. package/dist/convert/lchToLab.js.map +1 -1
  31. package/dist/convert/luvToXyz.d.ts +1 -1
  32. package/dist/convert/luvToXyz.d.ts.map +1 -1
  33. package/dist/convert/luvToXyz.js.map +1 -1
  34. package/dist/convert/rgbToCmy.d.ts +1 -1
  35. package/dist/convert/rgbToCmy.d.ts.map +1 -1
  36. package/dist/convert/rgbToCmy.js.map +1 -1
  37. package/dist/convert/rgbToHex.d.ts +1 -1
  38. package/dist/convert/rgbToHex.d.ts.map +1 -1
  39. package/dist/convert/rgbToHex.js.map +1 -1
  40. package/dist/convert/rgbToHsi.d.ts +1 -1
  41. package/dist/convert/rgbToHsi.d.ts.map +1 -1
  42. package/dist/convert/rgbToHsi.js.map +1 -1
  43. package/dist/convert/rgbToHsl.d.ts +1 -1
  44. package/dist/convert/rgbToHsl.d.ts.map +1 -1
  45. package/dist/convert/rgbToHsl.js.map +1 -1
  46. package/dist/convert/rgbToHsv.d.ts +1 -1
  47. package/dist/convert/rgbToHsv.d.ts.map +1 -1
  48. package/dist/convert/rgbToHsv.js.map +1 -1
  49. package/dist/convert/rgbToXyz.d.ts +1 -1
  50. package/dist/convert/rgbToXyz.d.ts.map +1 -1
  51. package/dist/convert/rgbToXyz.js.map +1 -1
  52. package/dist/convert/xyzToAdobe.d.ts +1 -1
  53. package/dist/convert/xyzToAdobe.d.ts.map +1 -1
  54. package/dist/convert/xyzToAdobe.js.map +1 -1
  55. package/dist/convert/xyzToHunter.d.ts +1 -1
  56. package/dist/convert/xyzToHunter.d.ts.map +1 -1
  57. package/dist/convert/xyzToHunter.js.map +1 -1
  58. package/dist/convert/xyzToLab.d.ts +1 -1
  59. package/dist/convert/xyzToLab.d.ts.map +1 -1
  60. package/dist/convert/xyzToLab.js.map +1 -1
  61. package/dist/convert/xyzToLuv.d.ts +1 -1
  62. package/dist/convert/xyzToLuv.d.ts.map +1 -1
  63. package/dist/convert/xyzToLuv.js.map +1 -1
  64. package/dist/convert/xyzToRgb.d.ts +1 -1
  65. package/dist/convert/xyzToRgb.d.ts.map +1 -1
  66. package/dist/convert/xyzToRgb.js.map +1 -1
  67. package/dist/convert/xyzToYxy.d.ts +1 -1
  68. package/dist/convert/xyzToYxy.d.ts.map +1 -1
  69. package/dist/convert/xyzToYxy.js.map +1 -1
  70. package/dist/convert/yxyToXyz.d.ts +1 -1
  71. package/dist/convert/yxyToXyz.d.ts.map +1 -1
  72. package/dist/convert/yxyToXyz.js.map +1 -1
  73. package/dist/delta/deltaC.d.ts +2 -2
  74. package/dist/delta/deltaC.d.ts.map +1 -1
  75. package/dist/delta/deltaC.js.map +1 -1
  76. package/dist/delta/deltaCmc.d.ts +1 -1
  77. package/dist/delta/deltaCmc.d.ts.map +1 -1
  78. package/dist/delta/deltaCmc.js.map +1 -1
  79. package/dist/delta/deltaE00.d.ts +1 -1
  80. package/dist/delta/deltaE00.d.ts.map +1 -1
  81. package/dist/delta/deltaE00.js.map +1 -1
  82. package/dist/delta/deltaE76.d.ts +2 -2
  83. package/dist/delta/deltaE76.d.ts.map +1 -1
  84. package/dist/delta/deltaE76.js.map +1 -1
  85. package/dist/delta/deltaE94.d.ts +1 -1
  86. package/dist/delta/deltaE94.d.ts.map +1 -1
  87. package/dist/delta/deltaE94.js.map +1 -1
  88. package/dist/delta/deltaH.d.ts +2 -2
  89. package/dist/delta/deltaH.d.ts.map +1 -1
  90. package/dist/delta/deltaH.js.map +1 -1
  91. package/dist/names/getName.d.ts +2 -2
  92. package/dist/names/getName.d.ts.map +1 -1
  93. package/dist/names/getName.js.map +1 -1
  94. package/dist/palette/analogous.d.ts +3 -3
  95. package/dist/palette/analogous.d.ts.map +1 -1
  96. package/dist/palette/analogous.js.map +1 -1
  97. package/dist/palette/analogousLch.d.ts +2 -2
  98. package/dist/palette/analogousLch.d.ts.map +1 -1
  99. package/dist/palette/analogousLch.js.map +1 -1
  100. package/dist/palette/complement.d.ts +3 -3
  101. package/dist/palette/complement.d.ts.map +1 -1
  102. package/dist/palette/complement.js.map +1 -1
  103. package/dist/palette/complementLch.d.ts +2 -2
  104. package/dist/palette/complementLch.d.ts.map +1 -1
  105. package/dist/palette/complementLch.js.map +1 -1
  106. package/dist/palette/splitComplement.d.ts +3 -3
  107. package/dist/palette/splitComplement.d.ts.map +1 -1
  108. package/dist/palette/splitComplement.js.map +1 -1
  109. package/dist/palette/splitComplementLch.d.ts +2 -2
  110. package/dist/palette/splitComplementLch.d.ts.map +1 -1
  111. package/dist/palette/splitComplementLch.js.map +1 -1
  112. package/dist/utility/contrast.d.ts +1 -1
  113. package/dist/utility/contrast.d.ts.map +1 -1
  114. package/dist/utility/contrast.js.map +1 -1
  115. package/dist/utility/isWebSafe.d.ts +1 -1
  116. package/dist/utility/isWebSafe.d.ts.map +1 -1
  117. package/dist/utility/isWebSafe.js.map +1 -1
  118. package/dist/utility/relativeLuminance.d.ts +1 -1
  119. package/dist/utility/relativeLuminance.d.ts.map +1 -1
  120. package/dist/utility/relativeLuminance.js.map +1 -1
  121. package/package.json +32 -34
  122. package/src/convert/adobeToXyz.ts +1 -1
  123. package/src/convert/cmyToCmyk.ts +1 -1
  124. package/src/convert/cmyToRgb.ts +3 -1
  125. package/src/convert/cmykToCmy.ts +3 -1
  126. package/src/convert/hslToRgb.ts +3 -1
  127. package/src/convert/hsvToRgb.ts +3 -1
  128. package/src/convert/hunterToXyz.ts +2 -2
  129. package/src/convert/labToLch.ts +7 -3
  130. package/src/convert/labToXyz.ts +2 -2
  131. package/src/convert/lchToLab.ts +7 -3
  132. package/src/convert/luvToXyz.ts +2 -2
  133. package/src/convert/rgbToCmy.ts +3 -1
  134. package/src/convert/rgbToHex.ts +1 -1
  135. package/src/convert/rgbToHsi.ts +3 -1
  136. package/src/convert/rgbToHsl.ts +3 -1
  137. package/src/convert/rgbToHsv.ts +3 -1
  138. package/src/convert/rgbToXyz.ts +3 -1
  139. package/src/convert/xyzToAdobe.ts +1 -1
  140. package/src/convert/xyzToHunter.ts +2 -2
  141. package/src/convert/xyzToLab.ts +2 -2
  142. package/src/convert/xyzToLuv.ts +2 -2
  143. package/src/convert/xyzToRgb.ts +3 -1
  144. package/src/convert/xyzToYxy.ts +3 -1
  145. package/src/convert/yxyToXyz.ts +3 -1
  146. package/src/delta/deltaC.ts +12 -3
  147. package/src/delta/deltaCmc.ts +3 -3
  148. package/src/delta/deltaE00.ts +3 -3
  149. package/src/delta/deltaE76.ts +12 -3
  150. package/src/delta/deltaE94.ts +3 -3
  151. package/src/delta/deltaH.ts +12 -3
  152. package/src/names/getName.ts +3 -3
  153. package/src/palette/analogous.ts +4 -4
  154. package/src/palette/analogousLch.ts +3 -3
  155. package/src/palette/complement.ts +4 -4
  156. package/src/palette/complementLch.ts +3 -3
  157. package/src/palette/splitComplement.ts +4 -4
  158. package/src/palette/splitComplementLch.ts +3 -3
  159. package/src/utility/contrast.ts +4 -1
  160. package/src/utility/isWebSafe.ts +1 -1
  161. package/src/utility/relativeLuminance.ts +1 -1
@@ -8,7 +8,7 @@ import type Cmyk from "../types/Cmyk.js";
8
8
  * @public
9
9
  */
10
10
  export default function cmyToCmyk(
11
- color: Cmy
11
+ color: Readonly<Cmy>
12
12
  ): [number, number, number, number] & Cmyk {
13
13
  const c = color[0];
14
14
 
@@ -7,6 +7,8 @@ import type Rgb from "../types/Rgb.js";
7
7
  * @returns An sRGB color.
8
8
  * @public
9
9
  */
10
- export default function cmyToRgb(color: Cmy): [number, number, number] & Rgb {
10
+ export default function cmyToRgb(
11
+ color: Readonly<Cmy>
12
+ ): [number, number, number] & Rgb {
11
13
  return [(1 - color[0]) * 0xff, (1 - color[1]) * 0xff, (1 - color[2]) * 0xff];
12
14
  }
@@ -7,7 +7,9 @@ import type Cmyk from "../types/Cmyk.js";
7
7
  * @returns A CMY color.
8
8
  * @public
9
9
  */
10
- export default function cmykToCmy(color: Cmyk): [number, number, number] & Cmy {
10
+ export default function cmykToCmy(
11
+ color: Readonly<Cmyk>
12
+ ): [number, number, number] & Cmy {
11
13
  const k = color[3];
12
14
 
13
15
  return [
@@ -33,7 +33,9 @@ const hueToRgb = (v0: number, v1: number, h: number): number => {
33
33
  * @returns An sRGB color.
34
34
  * @public
35
35
  */
36
- export default function hslToRgb(color: Hsl): [number, number, number] & Rgb {
36
+ export default function hslToRgb(
37
+ color: Readonly<Hsl>
38
+ ): [number, number, number] & Rgb {
37
39
  const h = color[0];
38
40
 
39
41
  const s = color[1];
@@ -7,7 +7,9 @@ import type Rgb from "../types/Rgb.js";
7
7
  * @returns An sRGB color.
8
8
  * @public
9
9
  */
10
- export default function hsvToRgb(color: Hsv): [number, number, number] & Rgb {
10
+ export default function hsvToRgb(
11
+ color: Readonly<Hsv>
12
+ ): [number, number, number] & Rgb {
11
13
  const s = color[1];
12
14
 
13
15
  const v = color[2];
@@ -15,8 +15,8 @@ const c1 = 70 / 218.11;
15
15
  * @public
16
16
  */
17
17
  export default function hunterToXyz(
18
- color: Hunter,
19
- ref: Xyz = getReference(StandardIlluminant.D65_2)
18
+ color: Readonly<Hunter>,
19
+ ref: Readonly<Xyz> = getReference(StandardIlluminant.D65_2)
20
20
  ): [number, number, number] & Xyz {
21
21
  const rx = ref[0];
22
22
 
@@ -11,16 +11,20 @@ const c0 = 180 / Math.PI;
11
11
  * @returns A CIELCh color.
12
12
  * @public
13
13
  */
14
- export default function labToLch(color: Lab): [number, number, number] & Lchab;
14
+ export default function labToLch(
15
+ color: Readonly<Lab>
16
+ ): [number, number, number] & Lchab;
15
17
  /**
16
18
  * Convert the given CIELUV color to a CIELCh(uv) color. Based on the EasyRGB pseudo-code.
17
19
  * @param color - The CIELUV color.
18
20
  * @returns A CIELCh color.
19
21
  * @public
20
22
  */
21
- export default function labToLch(color: Luv): [number, number, number] & Lchuv;
22
23
  export default function labToLch(
23
- color: Lab | Luv
24
+ color: Readonly<Luv>
25
+ ): [number, number, number] & Lchuv;
26
+ export default function labToLch(
27
+ color: Readonly<Lab | Luv>
24
28
  ): [number, number, number] & (Lchab | Lchuv) {
25
29
  const a = color[1];
26
30
 
@@ -16,8 +16,8 @@ const c2 = 7.787;
16
16
  * @public
17
17
  */
18
18
  export default function labToXyz(
19
- color: Lab,
20
- ref: Xyz = getReference(StandardIlluminant.D65_2)
19
+ color: Readonly<Lab>,
20
+ ref: Readonly<Xyz> = getReference(StandardIlluminant.D65_2)
21
21
  ): [number, number, number] & Xyz {
22
22
  const i0 = (color[0] + 16) / 116;
23
23
  const i1 = i0 ** 3;
@@ -11,16 +11,20 @@ const c0 = Math.PI / 180;
11
11
  * @returns A CIELAB color.
12
12
  * @public
13
13
  */
14
- export default function lchToLab(color: Lchab): [number, number, number] & Lab;
14
+ export default function lchToLab(
15
+ color: Readonly<Lchab>
16
+ ): [number, number, number] & Lab;
15
17
  /**
16
18
  * Convert the given CIELCh(uv) color to a CIELUV color. Based on the EasyRGB pseudo-code.
17
19
  * @param color - The CIELCh color.
18
20
  * @returns A CIELUV color.
19
21
  * @public
20
22
  */
21
- export default function lchToLab(color: Lchuv): [number, number, number] & Luv;
22
23
  export default function lchToLab(
23
- color: Lchab
24
+ color: Readonly<Lchuv>
25
+ ): [number, number, number] & Luv;
26
+ export default function lchToLab(
27
+ color: Readonly<Lchab | Lchuv>
24
28
  ): [number, number, number] & (Lab | Luv) {
25
29
  const c = color[1];
26
30
 
@@ -14,8 +14,8 @@ const c0 = 16 / 116;
14
14
  * @public
15
15
  */
16
16
  export default function luvToXyz(
17
- color: Luv,
18
- ref: Xyz = getReference(StandardIlluminant.D65_2)
17
+ color: Readonly<Luv>,
18
+ ref: Readonly<Xyz> = getReference(StandardIlluminant.D65_2)
19
19
  ): [number, number, number] & Xyz {
20
20
  const l = color[0];
21
21
 
@@ -7,6 +7,8 @@ import type Rgb from "../types/Rgb.js";
7
7
  * @returns A CMY color.
8
8
  * @public
9
9
  */
10
- export default function rgbToCmy(color: Rgb): [number, number, number] & Cmy {
10
+ export default function rgbToCmy(
11
+ color: Readonly<Rgb>
12
+ ): [number, number, number] & Cmy {
11
13
  return [1 - color[0] / 0xff, 1 - color[1] / 0xff, 1 - color[2] / 0xff];
12
14
  }
@@ -6,7 +6,7 @@ import type Rgb from "../types/Rgb.js";
6
6
  * @returns The numerical hexadecimal representation of the color.
7
7
  * @public
8
8
  */
9
- export default function rgbToHex(rgb: Rgb): number {
9
+ export default function rgbToHex(rgb: Readonly<Rgb>): number {
10
10
  return (
11
11
  Math.round(rgb[0] * 0x10000) +
12
12
  Math.round(rgb[1] * 0x100) +
@@ -10,7 +10,9 @@ const c1 = 2 / 3;
10
10
  * @returns An HSI color.
11
11
  * @public
12
12
  */
13
- export default function rgbToHsi(color: Rgb): [number, number, number] & Hsi {
13
+ export default function rgbToHsi(
14
+ color: Readonly<Rgb>
15
+ ): [number, number, number] & Hsi {
14
16
  const i0 = color[0] / 0xff;
15
17
  const i1 = color[1] / 0xff;
16
18
  const i2 = color[2] / 0xff;
@@ -10,7 +10,9 @@ const c1 = 2 / 3;
10
10
  * @returns An HSL color.
11
11
  * @public
12
12
  */
13
- export default function rgbToHsl(color: Rgb): [number, number, number] & Hsl {
13
+ export default function rgbToHsl(
14
+ color: Readonly<Rgb>
15
+ ): [number, number, number] & Hsl {
14
16
  const i0 = color[0] / 0xff;
15
17
  const i1 = color[1] / 0xff;
16
18
  const i2 = color[2] / 0xff;
@@ -10,7 +10,9 @@ const c1 = 2 / 3;
10
10
  * @returns An HSV color.
11
11
  * @public
12
12
  */
13
- export default function rgbToHsv(color: Rgb): [number, number, number] & Hsv {
13
+ export default function rgbToHsv(
14
+ color: Readonly<Rgb>
15
+ ): [number, number, number] & Hsv {
14
16
  const i0 = color[0] / 0xff;
15
17
  const i1 = color[1] / 0xff;
16
18
  const i2 = color[2] / 0xff;
@@ -14,7 +14,9 @@ const c5 = 100;
14
14
  * @returns A CIEXYZ color.
15
15
  * @public
16
16
  */
17
- export default function rgbToXyz(color: Rgb): [number, number, number] & Xyz {
17
+ export default function rgbToXyz(
18
+ color: Readonly<Rgb>
19
+ ): [number, number, number] & Xyz {
18
20
  const i0 = color[0] / 0xff;
19
21
  const i1 = color[1] / 0xff;
20
22
  const i2 = color[2] / 0xff;
@@ -11,7 +11,7 @@ const c0 = 1 / gamma;
11
11
  * @public
12
12
  */
13
13
  export default function xyzToAdobe(
14
- color: Xyz
14
+ color: Readonly<Xyz>
15
15
  ): [number, number, number] & Adobe {
16
16
  const i0 = color[0] / 100;
17
17
  const i1 = color[1] / 100;
@@ -15,8 +15,8 @@ const c1 = 70 / 218.11;
15
15
  * @public
16
16
  */
17
17
  export default function xyzToHunter(
18
- color: Xyz,
19
- ref: Xyz = getReference(StandardIlluminant.D65_2)
18
+ color: Readonly<Xyz>,
19
+ ref: Readonly<Xyz> = getReference(StandardIlluminant.D65_2)
20
20
  ): [number, number, number] & Hunter {
21
21
  const rx = ref[0];
22
22
 
@@ -17,8 +17,8 @@ const c3 = 7.787;
17
17
  * @public
18
18
  */
19
19
  export default function xyzToLab(
20
- color: Xyz,
21
- ref: Xyz = getReference(StandardIlluminant.D65_2)
20
+ color: Readonly<Xyz>,
21
+ ref: Readonly<Xyz> = getReference(StandardIlluminant.D65_2)
22
22
  ): [number, number, number] & Lab {
23
23
  const i0 = color[0] / ref[0];
24
24
  const i1 = color[1] / ref[1];
@@ -15,8 +15,8 @@ const c1 = 16 / 116;
15
15
  * @public
16
16
  */
17
17
  export default function xyzToLuv(
18
- color: Xyz,
19
- ref: Xyz = getReference(StandardIlluminant.D65_2)
18
+ color: Readonly<Xyz>,
19
+ ref: Readonly<Xyz> = getReference(StandardIlluminant.D65_2)
20
20
  ): [number, number, number] & Luv {
21
21
  const x = color[0];
22
22
 
@@ -13,7 +13,9 @@ const c4 = 12.92;
13
13
  * @returns An sRGB color.
14
14
  * @public
15
15
  */
16
- export default function xyzToRgb(color: Xyz): [number, number, number] & Rgb {
16
+ export default function xyzToRgb(
17
+ color: Readonly<Xyz>
18
+ ): [number, number, number] & Rgb {
17
19
  const i0 = color[0] / 100;
18
20
  const i1 = color[1] / 100;
19
21
  const i2 = color[2] / 100;
@@ -7,7 +7,9 @@ import type Yxy from "../types/Yxy.js";
7
7
  * @returns The CIEXYZ color in yxy format.
8
8
  * @public
9
9
  */
10
- export default function xyzToYxy(color: Xyz): [number, number, number] & Yxy {
10
+ export default function xyzToYxy(
11
+ color: Readonly<Xyz>
12
+ ): [number, number, number] & Yxy {
11
13
  const X = color[0];
12
14
 
13
15
  const Y = color[1];
@@ -7,7 +7,9 @@ import type Yxy from "../types/Yxy.js";
7
7
  * @returns A CIEXYZ color.
8
8
  * @public
9
9
  */
10
- export default function yxyToXyz(color: Yxy): [number, number, number] & Xyz {
10
+ export default function yxyToXyz(
11
+ color: Readonly<Yxy>
12
+ ): [number, number, number] & Xyz {
11
13
  const Y = color[0];
12
14
 
13
15
  const x = color[1];
@@ -9,7 +9,10 @@ import type Luv from "../types/Luv.js";
9
9
  * @see {@link https://en.wikipedia.org/wiki/Color_difference | Color difference}
10
10
  * @public
11
11
  */
12
- export default function deltaC(color0: Lab, color1: Lab): number;
12
+ export default function deltaC(
13
+ color0: Readonly<Lab>,
14
+ color1: Readonly<Lab>
15
+ ): number;
13
16
  /**
14
17
  * Calculates the ΔC* between two CIELUV values. Based on the EasyRGB pseudocode.
15
18
  * @param color0 - The first color.
@@ -18,7 +21,13 @@ export default function deltaC(color0: Lab, color1: Lab): number;
18
21
  * @see {@link https://en.wikipedia.org/wiki/Color_difference | Color difference}
19
22
  * @public
20
23
  */
21
- export default function deltaC(color0: Luv, color1: Luv): number;
22
- export default function deltaC(color0: Lab | Luv, color1: Lab | Luv): number {
24
+ export default function deltaC(
25
+ color0: Readonly<Luv>,
26
+ color1: Readonly<Luv>
27
+ ): number;
28
+ export default function deltaC(
29
+ color0: Readonly<Lab | Luv>,
30
+ color1: Readonly<Lab | Luv>
31
+ ): number {
23
32
  return Math.hypot(color1[1], color1[2]) - Math.hypot(color0[1], color0[2]);
24
33
  }
@@ -14,9 +14,9 @@ const c1 = Math.PI / 180;
14
14
  * @public
15
15
  */
16
16
  export default function deltaCmc(
17
- color0: Lab,
18
- color1: Lab,
19
- weight: Lchab = [1, 1, 1]
17
+ color0: Readonly<Lab>,
18
+ color1: Readonly<Lab>,
19
+ weight: Readonly<Lchab> = [1, 1, 1]
20
20
  ): number {
21
21
  const l0 = color0[0];
22
22
 
@@ -38,9 +38,9 @@ const cieLabToHue = (a: number, b: number): number =>
38
38
  * @public
39
39
  */
40
40
  export default function deltaE00(
41
- color0: Lab,
42
- color1: Lab,
43
- weight: Lchab = [1, 1, 1]
41
+ color0: Readonly<Lab>,
42
+ color1: Readonly<Lab>,
43
+ weight: Readonly<Lchab> = [1, 1, 1]
44
44
  ): number {
45
45
  const l0 = color0[0];
46
46
 
@@ -9,7 +9,10 @@ import type Luv from "../types/Luv.js";
9
9
  * @see {@link https://en.wikipedia.org/wiki/Color_difference | Color difference}
10
10
  * @public
11
11
  */
12
- export default function deltaE76(color0: Lab, color1: Lab): number;
12
+ export default function deltaE76(
13
+ color0: Readonly<Lab>,
14
+ color1: Readonly<Lab>
15
+ ): number;
13
16
  /**
14
17
  * Calculates the ΔE* CIE (CIE 1976) between two CIELUV values. Based on the EasyRGB pseudocode.
15
18
  * @param color0 - The first color.
@@ -18,8 +21,14 @@ export default function deltaE76(color0: Lab, color1: Lab): number;
18
21
  * @see {@link https://en.wikipedia.org/wiki/Color_difference | Color difference}
19
22
  * @public
20
23
  */
21
- export default function deltaE76(color0: Luv, color1: Luv): number;
22
- export default function deltaE76(color0: Lab | Luv, color1: Lab | Luv): number {
24
+ export default function deltaE76(
25
+ color0: Readonly<Luv>,
26
+ color1: Readonly<Luv>
27
+ ): number;
28
+ export default function deltaE76(
29
+ color0: Readonly<Lab | Luv>,
30
+ color1: Readonly<Lab | Luv>
31
+ ): number {
23
32
  return Math.hypot(
24
33
  color0[0] - color1[0],
25
34
  color0[1] - color1[1],
@@ -11,9 +11,9 @@ import type Lchab from "../types/Lchab.js";
11
11
  * @public
12
12
  */
13
13
  export default function deltaE94(
14
- color0: Lab,
15
- color1: Lab,
16
- weight: Lchab = [1, 1, 1]
14
+ color0: Readonly<Lab>,
15
+ color1: Readonly<Lab>,
16
+ weight: Readonly<Lchab> = [1, 1, 1]
17
17
  ): number {
18
18
  const l0 = color0[0];
19
19
 
@@ -9,7 +9,10 @@ import type Luv from "../types/Luv.js";
9
9
  * @see {@link https://en.wikipedia.org/wiki/Color_difference | Color difference}
10
10
  * @public
11
11
  */
12
- export default function deltaH(color0: Lab, color1: Lab): number;
12
+ export default function deltaH(
13
+ color0: Readonly<Lab>,
14
+ color1: Readonly<Lab>
15
+ ): number;
13
16
  /**
14
17
  * Calculates the ΔH* between two CIELUV values. Based on the EasyRGB pseudocode.
15
18
  * @param color0 - The first color.
@@ -18,8 +21,14 @@ export default function deltaH(color0: Lab, color1: Lab): number;
18
21
  * @see {@link https://en.wikipedia.org/wiki/Color_difference | Color difference}
19
22
  * @public
20
23
  */
21
- export default function deltaH(color0: Luv, color1: Luv): number;
22
- export default function deltaH(color0: Lab | Luv, color1: Lab | Luv): number {
24
+ export default function deltaH(
25
+ color0: Readonly<Luv>,
26
+ color1: Readonly<Luv>
27
+ ): number;
28
+ export default function deltaH(
29
+ color0: Readonly<Lab | Luv>,
30
+ color1: Readonly<Lab | Luv>
31
+ ): number {
23
32
  const a0 = color0[1];
24
33
 
25
34
  const b0 = color0[2];
@@ -17,7 +17,7 @@ import ntc from "./ntc.js";
17
17
  */
18
18
  export default function getName<T extends Color>(
19
19
  color: T,
20
- names: Map<string, T>,
20
+ names: Readonly<Map<string, T>>,
21
21
  diff: (a: T, b: T) => number
22
22
  ): string {
23
23
  let [nearestName] = names.entries().next().value ?? [];
@@ -49,8 +49,8 @@ export default function getName<T extends Color>(
49
49
  * @public
50
50
  */
51
51
  export const getNameStandard = (
52
- color: Rgb,
53
- names: Map<string, Rgb> = ntc
52
+ color: Readonly<Rgb>,
53
+ names: Readonly<Map<string, Rgb>> = ntc
54
54
  ): string =>
55
55
  getName(color, names, (a, b) =>
56
56
  deltaE00(xyzToLab(rgbToXyz(a)), xyzToLab(rgbToXyz(b)))
@@ -13,7 +13,7 @@ const d = 360;
13
13
  * @public
14
14
  */
15
15
  export default function analogous(
16
- color: Hsi,
16
+ color: Readonly<Hsi>,
17
17
  subdivisions?: number
18
18
  ): [[number, number, number] & Hsi, [number, number, number] & Hsi];
19
19
  /**
@@ -24,7 +24,7 @@ export default function analogous(
24
24
  * @public
25
25
  */
26
26
  export default function analogous(
27
- color: Hsl,
27
+ color: Readonly<Hsl>,
28
28
  subdivisions?: number
29
29
  ): [[number, number, number] & Hsl, [number, number, number] & Hsl];
30
30
  /**
@@ -35,11 +35,11 @@ export default function analogous(
35
35
  * @public
36
36
  */
37
37
  export default function analogous(
38
- color: Hsv,
38
+ color: Readonly<Hsv>,
39
39
  subdivisions?: number
40
40
  ): [[number, number, number] & Hsv, [number, number, number] & Hsv];
41
41
  export default function analogous(
42
- color: Hsi | Hsl | Hsv,
42
+ color: Readonly<Hsi | Hsl | Hsv>,
43
43
  subdivisions = 12
44
44
  ):
45
45
  | [[number, number, number] & Hsi, [number, number, number] & Hsi]
@@ -12,7 +12,7 @@ const d = 360;
12
12
  * @public
13
13
  */
14
14
  export default function analogousLch(
15
- color: Lchab,
15
+ color: Readonly<Lchab>,
16
16
  subdivisions?: number
17
17
  ): [[number, number, number] & Lchab, [number, number, number] & Lchab];
18
18
  /**
@@ -23,11 +23,11 @@ export default function analogousLch(
23
23
  * @public
24
24
  */
25
25
  export default function analogousLch(
26
- color: Lchuv,
26
+ color: Readonly<Lchuv>,
27
27
  subdivisions?: number
28
28
  ): [[number, number, number] & Lchuv, [number, number, number] & Lchuv];
29
29
  export default function analogousLch(
30
- color: Lchab | Lchuv,
30
+ color: Readonly<Lchab | Lchuv>,
31
31
  subdivisions = 12
32
32
  ):
33
33
  | [[number, number, number] & Lchab, [number, number, number] & Lchab]
@@ -13,7 +13,7 @@ const d = 360;
13
13
  * @public
14
14
  */
15
15
  export default function complement(
16
- color: Hsi,
16
+ color: Readonly<Hsi>,
17
17
  n?: number
18
18
  ): ([number, number, number] & Hsi)[];
19
19
  /**
@@ -24,7 +24,7 @@ export default function complement(
24
24
  * @public
25
25
  */
26
26
  export default function complement(
27
- color: Hsl,
27
+ color: Readonly<Hsl>,
28
28
  n?: number
29
29
  ): ([number, number, number] & Hsl)[];
30
30
  /**
@@ -35,11 +35,11 @@ export default function complement(
35
35
  * @public
36
36
  */
37
37
  export default function complement(
38
- color: Hsv,
38
+ color: Readonly<Hsv>,
39
39
  n?: number
40
40
  ): ([number, number, number] & Hsv)[];
41
41
  export default function complement(
42
- color: Hsi | Hsl | Hsv,
42
+ color: Readonly<Hsi | Hsl | Hsv>,
43
43
  n = 1
44
44
  ):
45
45
  | ([number, number, number] & Hsi)[]
@@ -12,7 +12,7 @@ const d = 360;
12
12
  * @public
13
13
  */
14
14
  export default function complementLch(
15
- color: Lchab,
15
+ color: Readonly<Lchab>,
16
16
  n?: number
17
17
  ): ([number, number, number] & Lchab)[];
18
18
  /**
@@ -23,11 +23,11 @@ export default function complementLch(
23
23
  * @public
24
24
  */
25
25
  export default function complementLch(
26
- color: Lchuv,
26
+ color: Readonly<Lchuv>,
27
27
  n?: number
28
28
  ): ([number, number, number] & Lchuv)[];
29
29
  export default function complementLch(
30
- color: Lchab | Lchuv,
30
+ color: Readonly<Lchab | Lchuv>,
31
31
  n = 1
32
32
  ): ([number, number, number] & Lchab)[] | ([number, number, number] & Lchuv)[] {
33
33
  const l = color[0];
@@ -13,7 +13,7 @@ const d = 360;
13
13
  * @public
14
14
  */
15
15
  export default function splitComplement(
16
- color: Hsi,
16
+ color: Readonly<Hsi>,
17
17
  subdivisions?: number
18
18
  ): [[number, number, number] & Hsi, [number, number, number] & Hsi];
19
19
  /**
@@ -24,7 +24,7 @@ export default function splitComplement(
24
24
  * @public
25
25
  */
26
26
  export default function splitComplement(
27
- color: Hsl,
27
+ color: Readonly<Hsl>,
28
28
  subdivisions?: number
29
29
  ): [[number, number, number] & Hsl, [number, number, number] & Hsl];
30
30
  /**
@@ -35,11 +35,11 @@ export default function splitComplement(
35
35
  * @public
36
36
  */
37
37
  export default function splitComplement(
38
- color: Hsv,
38
+ color: Readonly<Hsv>,
39
39
  subdivisions?: number
40
40
  ): [[number, number, number] & Hsv, [number, number, number] & Hsv];
41
41
  export default function splitComplement(
42
- color: Hsi | Hsl | Hsv,
42
+ color: Readonly<Hsi | Hsl | Hsv>,
43
43
  subdivisions = 12
44
44
  ):
45
45
  | [[number, number, number] & Hsi, [number, number, number] & Hsi]
@@ -12,7 +12,7 @@ const d = 360;
12
12
  * @public
13
13
  */
14
14
  export default function splitComplementLch(
15
- color: Lchab,
15
+ color: Readonly<Lchab>,
16
16
  subdivisions?: number
17
17
  ): [[number, number, number] & Lchab, [number, number, number] & Lchab];
18
18
  /**
@@ -23,11 +23,11 @@ export default function splitComplementLch(
23
23
  * @public
24
24
  */
25
25
  export default function splitComplementLch(
26
- color: Lchuv,
26
+ color: Readonly<Lchuv>,
27
27
  subdivisions?: number
28
28
  ): [[number, number, number] & Lchuv, [number, number, number] & Lchuv];
29
29
  export default function splitComplementLch(
30
- color: Lchab | Lchuv,
30
+ color: Readonly<Lchab | Lchuv>,
31
31
  subdivisions = 12
32
32
  ):
33
33
  | [[number, number, number] & Lchab, [number, number, number] & Lchab]
@@ -11,7 +11,10 @@ import relativeLuminance from "./relativeLuminance.js";
11
11
  * @see {@link https://www.w3.org/WAI/standards-guidelines/wcag/ | WCAG 2 Overview}
12
12
  * @public
13
13
  */
14
- export default function contrast(color0: Rgb, color1: Rgb): number {
14
+ export default function contrast(
15
+ color0: Readonly<Rgb>,
16
+ color1: Readonly<Rgb>
17
+ ): number {
15
18
  // Intermediate values.
16
19
  const i0 = relativeLuminance(color0);
17
20
  const i1 = relativeLuminance(color1);
@@ -7,7 +7,7 @@ import type Rgb from "../types/Rgb.js";
7
7
  * @see {@link https://en.wikipedia.org/wiki/Web_colors | Web colors}
8
8
  * @public
9
9
  */
10
- export default function isWebSafe(color: Rgb): boolean {
10
+ export default function isWebSafe(color: Readonly<Rgb>): boolean {
11
11
  return (
12
12
  color[0] % 0x33 === 0 && color[1] % 0x33 === 0 && color[2] % 0x33 === 0
13
13
  );
@@ -16,7 +16,7 @@ const piecewise = (a: number): number =>
16
16
  * @see {@link https://www.w3.org/WAI/GL/wiki/Relative_luminance | Relative luminance}
17
17
  * @public
18
18
  */
19
- export default function relativeLuminance(color: Rgb): number {
19
+ export default function relativeLuminance(color: Readonly<Rgb>): number {
20
20
  return (
21
21
  0.2126 * piecewise(color[0] / 0xff) +
22
22
  0.7152 * piecewise(color[1] / 0xff) +