color-elements 0.0.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 (448) hide show
  1. package/README.md +33 -0
  2. package/_build/copy-config.js +90 -0
  3. package/_build/copy-config.json +18 -0
  4. package/_build/eleventy.js +16 -0
  5. package/_data/eleventyComputed.11tydata.js +29 -0
  6. package/_headers +2 -0
  7. package/_redirects +2 -0
  8. package/assets/css/style.css +1 -0
  9. package/assets/js/index.js +15 -0
  10. package/color-gamut/README.md +75 -0
  11. package/color-gamut/color-gamut.js +172 -0
  12. package/color-gamut/style.css +32 -0
  13. package/color-slider/README.md +84 -0
  14. package/color-slider/color-slider.js +79 -0
  15. package/color-slider/style.css +65 -0
  16. package/color-swatch/color-swatch.css +41 -0
  17. package/color-swatch/color-swatch.js +79 -0
  18. package/color-swatch/index.njk +40 -0
  19. package/common/attributes.js +68 -0
  20. package/common/color.js +10 -0
  21. package/css-color/css-color.js +256 -0
  22. package/css-color/index.njk +43 -0
  23. package/css-color/style.css +67 -0
  24. package/elements.11tydata.json +5 -0
  25. package/index.js +4 -0
  26. package/lib/README.md +4 -0
  27. package/lib/colorjs.io/LICENSE +21 -0
  28. package/lib/colorjs.io/README.json +3 -0
  29. package/lib/colorjs.io/README.md +257 -0
  30. package/lib/colorjs.io/colorjs.io/LICENSE +21 -0
  31. package/lib/colorjs.io/colorjs.io/README.json +3 -0
  32. package/lib/colorjs.io/colorjs.io/README.md +257 -0
  33. package/lib/colorjs.io/colorjs.io/dist/color-fn.cjs +5437 -0
  34. package/lib/colorjs.io/colorjs.io/dist/color-fn.cjs.map +1 -0
  35. package/lib/colorjs.io/colorjs.io/dist/color-fn.legacy.cjs +7048 -0
  36. package/lib/colorjs.io/colorjs.io/dist/color-fn.legacy.cjs.map +1 -0
  37. package/lib/colorjs.io/colorjs.io/dist/color-fn.legacy.min.cjs +2 -0
  38. package/lib/colorjs.io/colorjs.io/dist/color-fn.legacy.min.cjs.map +1 -0
  39. package/lib/colorjs.io/colorjs.io/dist/color-fn.min.cjs +2 -0
  40. package/lib/colorjs.io/colorjs.io/dist/color-fn.min.cjs.map +1 -0
  41. package/lib/colorjs.io/colorjs.io/dist/color.cjs +5759 -0
  42. package/lib/colorjs.io/colorjs.io/dist/color.cjs.map +1 -0
  43. package/lib/colorjs.io/colorjs.io/dist/color.global.js +5760 -0
  44. package/lib/colorjs.io/colorjs.io/dist/color.global.js.map +1 -0
  45. package/lib/colorjs.io/colorjs.io/dist/color.global.legacy.js +7400 -0
  46. package/lib/colorjs.io/colorjs.io/dist/color.global.legacy.js.map +1 -0
  47. package/lib/colorjs.io/colorjs.io/dist/color.global.legacy.min.js +2 -0
  48. package/lib/colorjs.io/colorjs.io/dist/color.global.legacy.min.js.map +1 -0
  49. package/lib/colorjs.io/colorjs.io/dist/color.global.min.js +2 -0
  50. package/lib/colorjs.io/colorjs.io/dist/color.global.min.js.map +1 -0
  51. package/lib/colorjs.io/colorjs.io/dist/color.js +5755 -0
  52. package/lib/colorjs.io/colorjs.io/dist/color.js.map +1 -0
  53. package/lib/colorjs.io/colorjs.io/dist/color.legacy.cjs +7399 -0
  54. package/lib/colorjs.io/colorjs.io/dist/color.legacy.cjs.map +1 -0
  55. package/lib/colorjs.io/colorjs.io/dist/color.legacy.js +7395 -0
  56. package/lib/colorjs.io/colorjs.io/dist/color.legacy.js.map +1 -0
  57. package/lib/colorjs.io/colorjs.io/dist/color.legacy.min.cjs +2 -0
  58. package/lib/colorjs.io/colorjs.io/dist/color.legacy.min.cjs.map +1 -0
  59. package/lib/colorjs.io/colorjs.io/dist/color.legacy.min.js +2 -0
  60. package/lib/colorjs.io/colorjs.io/dist/color.legacy.min.js.map +1 -0
  61. package/lib/colorjs.io/colorjs.io/dist/color.min.cjs +2 -0
  62. package/lib/colorjs.io/colorjs.io/dist/color.min.cjs.map +1 -0
  63. package/lib/colorjs.io/colorjs.io/dist/color.min.js +2 -0
  64. package/lib/colorjs.io/colorjs.io/dist/color.min.js.map +1 -0
  65. package/lib/colorjs.io/colorjs.io/package.json +113 -0
  66. package/lib/colorjs.io/colorjs.io/src/CATs.js +131 -0
  67. package/lib/colorjs.io/colorjs.io/src/adapt.js +62 -0
  68. package/lib/colorjs.io/colorjs.io/src/angles.js +44 -0
  69. package/lib/colorjs.io/colorjs.io/src/chromaticity.js +33 -0
  70. package/lib/colorjs.io/colorjs.io/src/clone.js +7 -0
  71. package/lib/colorjs.io/colorjs.io/src/color.js +201 -0
  72. package/lib/colorjs.io/colorjs.io/src/contrast/APCA.js +102 -0
  73. package/lib/colorjs.io/colorjs.io/src/contrast/Lstar.js +17 -0
  74. package/lib/colorjs.io/colorjs.io/src/contrast/Michelson.js +22 -0
  75. package/lib/colorjs.io/colorjs.io/src/contrast/WCAG21.js +20 -0
  76. package/lib/colorjs.io/colorjs.io/src/contrast/Weber.js +27 -0
  77. package/lib/colorjs.io/colorjs.io/src/contrast/deltaPhi.js +25 -0
  78. package/lib/colorjs.io/colorjs.io/src/contrast/index.js +6 -0
  79. package/lib/colorjs.io/colorjs.io/src/contrast.js +28 -0
  80. package/lib/colorjs.io/colorjs.io/src/defaults.js +12 -0
  81. package/lib/colorjs.io/colorjs.io/src/deltaE/deltaE2000.js +179 -0
  82. package/lib/colorjs.io/colorjs.io/src/deltaE/deltaE76.js +7 -0
  83. package/lib/colorjs.io/colorjs.io/src/deltaE/deltaECMC.js +114 -0
  84. package/lib/colorjs.io/colorjs.io/src/deltaE/deltaEHCT.js +51 -0
  85. package/lib/colorjs.io/colorjs.io/src/deltaE/deltaEITP.js +24 -0
  86. package/lib/colorjs.io/colorjs.io/src/deltaE/deltaEJz.js +43 -0
  87. package/lib/colorjs.io/colorjs.io/src/deltaE/deltaEOK.js +19 -0
  88. package/lib/colorjs.io/colorjs.io/src/deltaE/index.js +27 -0
  89. package/lib/colorjs.io/colorjs.io/src/deltaE.js +19 -0
  90. package/lib/colorjs.io/colorjs.io/src/display.js +83 -0
  91. package/lib/colorjs.io/colorjs.io/src/distance.js +21 -0
  92. package/lib/colorjs.io/colorjs.io/src/equals.js +10 -0
  93. package/lib/colorjs.io/colorjs.io/src/get.js +11 -0
  94. package/lib/colorjs.io/colorjs.io/src/getAll.js +20 -0
  95. package/lib/colorjs.io/colorjs.io/src/getColor.js +36 -0
  96. package/lib/colorjs.io/colorjs.io/src/hooks.js +37 -0
  97. package/lib/colorjs.io/colorjs.io/src/inGamut.js +25 -0
  98. package/lib/colorjs.io/colorjs.io/src/index-fn.js +28 -0
  99. package/lib/colorjs.io/colorjs.io/src/index.js +38 -0
  100. package/lib/colorjs.io/colorjs.io/src/interpolation.js +222 -0
  101. package/lib/colorjs.io/colorjs.io/src/keywords.js +158 -0
  102. package/lib/colorjs.io/colorjs.io/src/luminance.js +27 -0
  103. package/lib/colorjs.io/colorjs.io/src/multiply-matrices.js +44 -0
  104. package/lib/colorjs.io/colorjs.io/src/parse.js +198 -0
  105. package/lib/colorjs.io/colorjs.io/src/rgbspace.js +64 -0
  106. package/lib/colorjs.io/colorjs.io/src/serialize.js +86 -0
  107. package/lib/colorjs.io/colorjs.io/src/set.js +33 -0
  108. package/lib/colorjs.io/colorjs.io/src/setAll.js +12 -0
  109. package/lib/colorjs.io/colorjs.io/src/space-accessors.js +86 -0
  110. package/lib/colorjs.io/colorjs.io/src/space.js +440 -0
  111. package/lib/colorjs.io/colorjs.io/src/spaces/a98rgb-linear.js +28 -0
  112. package/lib/colorjs.io/colorjs.io/src/spaces/a98rgb.js +11 -0
  113. package/lib/colorjs.io/colorjs.io/src/spaces/acescc.js +76 -0
  114. package/lib/colorjs.io/colorjs.io/src/spaces/acescg.js +54 -0
  115. package/lib/colorjs.io/colorjs.io/src/spaces/cam16.js +362 -0
  116. package/lib/colorjs.io/colorjs.io/src/spaces/hct.js +157 -0
  117. package/lib/colorjs.io/colorjs.io/src/spaces/hpluv.js +130 -0
  118. package/lib/colorjs.io/colorjs.io/src/spaces/hsl.js +91 -0
  119. package/lib/colorjs.io/colorjs.io/src/spaces/hsluv.js +162 -0
  120. package/lib/colorjs.io/colorjs.io/src/spaces/hsv.js +65 -0
  121. package/lib/colorjs.io/colorjs.io/src/spaces/hwb.js +58 -0
  122. package/lib/colorjs.io/colorjs.io/src/spaces/ictcp.js +133 -0
  123. package/lib/colorjs.io/colorjs.io/src/spaces/index-fn-hdr.js +7 -0
  124. package/lib/colorjs.io/colorjs.io/src/spaces/index-fn.js +29 -0
  125. package/lib/colorjs.io/colorjs.io/src/spaces/index.js +8 -0
  126. package/lib/colorjs.io/colorjs.io/src/spaces/jzazbz.js +118 -0
  127. package/lib/colorjs.io/colorjs.io/src/spaces/jzczhz.js +53 -0
  128. package/lib/colorjs.io/colorjs.io/src/spaces/lab-d65.js +74 -0
  129. package/lib/colorjs.io/colorjs.io/src/spaces/lab.js +74 -0
  130. package/lib/colorjs.io/colorjs.io/src/spaces/lch.js +67 -0
  131. package/lib/colorjs.io/colorjs.io/src/spaces/lchuv.js +68 -0
  132. package/lib/colorjs.io/colorjs.io/src/spaces/luv.js +85 -0
  133. package/lib/colorjs.io/colorjs.io/src/spaces/oklab.js +74 -0
  134. package/lib/colorjs.io/colorjs.io/src/spaces/oklch.js +68 -0
  135. package/lib/colorjs.io/colorjs.io/src/spaces/p3-linear.js +22 -0
  136. package/lib/colorjs.io/colorjs.io/src/spaces/p3.js +13 -0
  137. package/lib/colorjs.io/colorjs.io/src/spaces/prophoto-linear.js +28 -0
  138. package/lib/colorjs.io/colorjs.io/src/spaces/prophoto.js +19 -0
  139. package/lib/colorjs.io/colorjs.io/src/spaces/rec2020-linear.js +27 -0
  140. package/lib/colorjs.io/colorjs.io/src/spaces/rec2020.js +31 -0
  141. package/lib/colorjs.io/colorjs.io/src/spaces/rec2100-hlg.js +49 -0
  142. package/lib/colorjs.io/colorjs.io/src/spaces/rec2100-pq.js +37 -0
  143. package/lib/colorjs.io/colorjs.io/src/spaces/srgb-linear.js +30 -0
  144. package/lib/colorjs.io/colorjs.io/src/spaces/srgb.js +127 -0
  145. package/lib/colorjs.io/colorjs.io/src/spaces/xyz-abs-d65.js +40 -0
  146. package/lib/colorjs.io/colorjs.io/src/spaces/xyz-d50.js +12 -0
  147. package/lib/colorjs.io/colorjs.io/src/spaces/xyz-d65.js +18 -0
  148. package/lib/colorjs.io/colorjs.io/src/to.js +26 -0
  149. package/lib/colorjs.io/colorjs.io/src/toGamut.js +310 -0
  150. package/lib/colorjs.io/colorjs.io/src/util.js +254 -0
  151. package/lib/colorjs.io/colorjs.io/src/variations.js +14 -0
  152. package/lib/colorjs.io/colorjs.io/types/index.d.cts +4 -0
  153. package/lib/colorjs.io/colorjs.io/types/index.d.ts +42 -0
  154. package/lib/colorjs.io/colorjs.io/types/src/CATs.d.ts +13 -0
  155. package/lib/colorjs.io/colorjs.io/types/src/adapt.d.ts +12 -0
  156. package/lib/colorjs.io/colorjs.io/types/src/angles.d.ts +7 -0
  157. package/lib/colorjs.io/colorjs.io/types/src/chromaticity.d.ts +7 -0
  158. package/lib/colorjs.io/colorjs.io/types/src/clone.d.ts +3 -0
  159. package/lib/colorjs.io/colorjs.io/types/src/color.d.ts +160 -0
  160. package/lib/colorjs.io/colorjs.io/types/src/contrast/APCA.d.ts +5 -0
  161. package/lib/colorjs.io/colorjs.io/types/src/contrast/Lstar.d.ts +5 -0
  162. package/lib/colorjs.io/colorjs.io/types/src/contrast/Michelson.d.ts +5 -0
  163. package/lib/colorjs.io/colorjs.io/types/src/contrast/WCAG21.d.ts +5 -0
  164. package/lib/colorjs.io/colorjs.io/types/src/contrast/Weber.d.ts +5 -0
  165. package/lib/colorjs.io/colorjs.io/types/src/contrast/deltaPhi.d.ts +5 -0
  166. package/lib/colorjs.io/colorjs.io/types/src/contrast/index.d.ts +11 -0
  167. package/lib/colorjs.io/colorjs.io/types/src/contrast.d.ts +12 -0
  168. package/lib/colorjs.io/colorjs.io/types/src/defaults.d.ts +2 -0
  169. package/lib/colorjs.io/colorjs.io/types/src/deltaE/deltaE2000.d.ts +11 -0
  170. package/lib/colorjs.io/colorjs.io/types/src/deltaE/deltaE76.d.ts +5 -0
  171. package/lib/colorjs.io/colorjs.io/types/src/deltaE/deltaECMC.d.ts +9 -0
  172. package/lib/colorjs.io/colorjs.io/types/src/deltaE/deltaEHCT.d.ts +5 -0
  173. package/lib/colorjs.io/colorjs.io/types/src/deltaE/deltaEITP.d.ts +5 -0
  174. package/lib/colorjs.io/colorjs.io/types/src/deltaE/deltaEJz.d.ts +5 -0
  175. package/lib/colorjs.io/colorjs.io/types/src/deltaE/deltaEOK.d.ts +5 -0
  176. package/lib/colorjs.io/colorjs.io/types/src/deltaE/index.d.ts +14 -0
  177. package/lib/colorjs.io/colorjs.io/types/src/deltaE.d.ts +12 -0
  178. package/lib/colorjs.io/colorjs.io/types/src/display.d.ts +17 -0
  179. package/lib/colorjs.io/colorjs.io/types/src/distance.d.ts +8 -0
  180. package/lib/colorjs.io/colorjs.io/types/src/equals.d.ts +3 -0
  181. package/lib/colorjs.io/colorjs.io/types/src/get.d.ts +4 -0
  182. package/lib/colorjs.io/colorjs.io/types/src/getAll.d.ts +7 -0
  183. package/lib/colorjs.io/colorjs.io/types/src/getColor.d.ts +4 -0
  184. package/lib/colorjs.io/colorjs.io/types/src/hooks.d.ts +52 -0
  185. package/lib/colorjs.io/colorjs.io/types/src/inGamut.d.ts +8 -0
  186. package/lib/colorjs.io/colorjs.io/types/src/index-fn.d.cts +1 -0
  187. package/lib/colorjs.io/colorjs.io/types/src/index-fn.d.ts +63 -0
  188. package/lib/colorjs.io/colorjs.io/types/src/index.d.ts +125 -0
  189. package/lib/colorjs.io/colorjs.io/types/src/interpolation.d.ts +77 -0
  190. package/lib/colorjs.io/colorjs.io/types/src/keywords.d.ts +2 -0
  191. package/lib/colorjs.io/colorjs.io/types/src/luminance.d.ts +10 -0
  192. package/lib/colorjs.io/colorjs.io/types/src/multiply-matrices.d.ts +9 -0
  193. package/lib/colorjs.io/colorjs.io/types/src/parse.d.ts +16 -0
  194. package/lib/colorjs.io/colorjs.io/types/src/rgbspace.d.ts +10 -0
  195. package/lib/colorjs.io/colorjs.io/types/src/serialize.d.ts +13 -0
  196. package/lib/colorjs.io/colorjs.io/types/src/set.d.ts +18 -0
  197. package/lib/colorjs.io/colorjs.io/types/src/setAll.d.ts +14 -0
  198. package/lib/colorjs.io/colorjs.io/types/src/space-accessors.d.ts +1 -0
  199. package/lib/colorjs.io/colorjs.io/types/src/space-coord-accessors.d.ts +69 -0
  200. package/lib/colorjs.io/colorjs.io/types/src/space.d.ts +143 -0
  201. package/lib/colorjs.io/colorjs.io/types/src/spaces/a98rgb-linear.d.ts +3 -0
  202. package/lib/colorjs.io/colorjs.io/types/src/spaces/a98rgb.d.ts +3 -0
  203. package/lib/colorjs.io/colorjs.io/types/src/spaces/acescc.d.ts +3 -0
  204. package/lib/colorjs.io/colorjs.io/types/src/spaces/acescg.d.ts +3 -0
  205. package/lib/colorjs.io/colorjs.io/types/src/spaces/hpluv.d.ts +3 -0
  206. package/lib/colorjs.io/colorjs.io/types/src/spaces/hsl.d.ts +3 -0
  207. package/lib/colorjs.io/colorjs.io/types/src/spaces/hsluv.d.ts +3 -0
  208. package/lib/colorjs.io/colorjs.io/types/src/spaces/hsv.d.ts +3 -0
  209. package/lib/colorjs.io/colorjs.io/types/src/spaces/hwb.d.ts +3 -0
  210. package/lib/colorjs.io/colorjs.io/types/src/spaces/ictcp.d.ts +3 -0
  211. package/lib/colorjs.io/colorjs.io/types/src/spaces/index-fn-hdr.d.ts +9 -0
  212. package/lib/colorjs.io/colorjs.io/types/src/spaces/index-fn.d.ts +29 -0
  213. package/lib/colorjs.io/colorjs.io/types/src/spaces/index.d.ts +4 -0
  214. package/lib/colorjs.io/colorjs.io/types/src/spaces/jzazbz.d.ts +3 -0
  215. package/lib/colorjs.io/colorjs.io/types/src/spaces/jzczhz.d.ts +3 -0
  216. package/lib/colorjs.io/colorjs.io/types/src/spaces/lab-d65.d.ts +3 -0
  217. package/lib/colorjs.io/colorjs.io/types/src/spaces/lab.d.ts +3 -0
  218. package/lib/colorjs.io/colorjs.io/types/src/spaces/lch.d.ts +3 -0
  219. package/lib/colorjs.io/colorjs.io/types/src/spaces/lchuv.d.ts +3 -0
  220. package/lib/colorjs.io/colorjs.io/types/src/spaces/luv.d.ts +3 -0
  221. package/lib/colorjs.io/colorjs.io/types/src/spaces/oklab.d.ts +3 -0
  222. package/lib/colorjs.io/colorjs.io/types/src/spaces/oklch.d.ts +3 -0
  223. package/lib/colorjs.io/colorjs.io/types/src/spaces/p3-linear.d.ts +3 -0
  224. package/lib/colorjs.io/colorjs.io/types/src/spaces/p3.d.ts +3 -0
  225. package/lib/colorjs.io/colorjs.io/types/src/spaces/prophoto-linear.d.ts +3 -0
  226. package/lib/colorjs.io/colorjs.io/types/src/spaces/prophoto.d.ts +3 -0
  227. package/lib/colorjs.io/colorjs.io/types/src/spaces/rec2020-linear.d.ts +3 -0
  228. package/lib/colorjs.io/colorjs.io/types/src/spaces/rec2020.d.ts +3 -0
  229. package/lib/colorjs.io/colorjs.io/types/src/spaces/rec2100-hlg.d.ts +3 -0
  230. package/lib/colorjs.io/colorjs.io/types/src/spaces/rec2100-pq.d.ts +3 -0
  231. package/lib/colorjs.io/colorjs.io/types/src/spaces/srgb-linear.d.ts +3 -0
  232. package/lib/colorjs.io/colorjs.io/types/src/spaces/srgb.d.ts +3 -0
  233. package/lib/colorjs.io/colorjs.io/types/src/spaces/xyz-abs-d65.d.ts +3 -0
  234. package/lib/colorjs.io/colorjs.io/types/src/spaces/xyz-d50.d.ts +3 -0
  235. package/lib/colorjs.io/colorjs.io/types/src/spaces/xyz-d65.d.ts +3 -0
  236. package/lib/colorjs.io/colorjs.io/types/src/to.d.ts +14 -0
  237. package/lib/colorjs.io/colorjs.io/types/src/toGamut.d.ts +45 -0
  238. package/lib/colorjs.io/colorjs.io/types/src/util.d.ts +58 -0
  239. package/lib/colorjs.io/colorjs.io/types/src/variations.d.ts +5 -0
  240. package/lib/colorjs.io/dist/color-fn.cjs +5437 -0
  241. package/lib/colorjs.io/dist/color-fn.cjs.map +1 -0
  242. package/lib/colorjs.io/dist/color-fn.legacy.cjs +7048 -0
  243. package/lib/colorjs.io/dist/color-fn.legacy.cjs.map +1 -0
  244. package/lib/colorjs.io/dist/color-fn.legacy.min.cjs +2 -0
  245. package/lib/colorjs.io/dist/color-fn.legacy.min.cjs.map +1 -0
  246. package/lib/colorjs.io/dist/color-fn.min.cjs +2 -0
  247. package/lib/colorjs.io/dist/color-fn.min.cjs.map +1 -0
  248. package/lib/colorjs.io/dist/color.cjs +5759 -0
  249. package/lib/colorjs.io/dist/color.cjs.map +1 -0
  250. package/lib/colorjs.io/dist/color.global.js +5760 -0
  251. package/lib/colorjs.io/dist/color.global.js.map +1 -0
  252. package/lib/colorjs.io/dist/color.global.legacy.js +7400 -0
  253. package/lib/colorjs.io/dist/color.global.legacy.js.map +1 -0
  254. package/lib/colorjs.io/dist/color.global.legacy.min.js +2 -0
  255. package/lib/colorjs.io/dist/color.global.legacy.min.js.map +1 -0
  256. package/lib/colorjs.io/dist/color.global.min.js +2 -0
  257. package/lib/colorjs.io/dist/color.global.min.js.map +1 -0
  258. package/lib/colorjs.io/dist/color.js +5755 -0
  259. package/lib/colorjs.io/dist/color.js.map +1 -0
  260. package/lib/colorjs.io/dist/color.legacy.cjs +7399 -0
  261. package/lib/colorjs.io/dist/color.legacy.cjs.map +1 -0
  262. package/lib/colorjs.io/dist/color.legacy.js +7395 -0
  263. package/lib/colorjs.io/dist/color.legacy.js.map +1 -0
  264. package/lib/colorjs.io/dist/color.legacy.min.cjs +2 -0
  265. package/lib/colorjs.io/dist/color.legacy.min.cjs.map +1 -0
  266. package/lib/colorjs.io/dist/color.legacy.min.js +2 -0
  267. package/lib/colorjs.io/dist/color.legacy.min.js.map +1 -0
  268. package/lib/colorjs.io/dist/color.min.cjs +2 -0
  269. package/lib/colorjs.io/dist/color.min.cjs.map +1 -0
  270. package/lib/colorjs.io/dist/color.min.js +2 -0
  271. package/lib/colorjs.io/dist/color.min.js.map +1 -0
  272. package/lib/colorjs.io/package.json +113 -0
  273. package/lib/colorjs.io/src/CATs.js +131 -0
  274. package/lib/colorjs.io/src/adapt.js +62 -0
  275. package/lib/colorjs.io/src/angles.js +44 -0
  276. package/lib/colorjs.io/src/chromaticity.js +33 -0
  277. package/lib/colorjs.io/src/clone.js +7 -0
  278. package/lib/colorjs.io/src/color.js +201 -0
  279. package/lib/colorjs.io/src/contrast/APCA.js +102 -0
  280. package/lib/colorjs.io/src/contrast/Lstar.js +17 -0
  281. package/lib/colorjs.io/src/contrast/Michelson.js +22 -0
  282. package/lib/colorjs.io/src/contrast/WCAG21.js +20 -0
  283. package/lib/colorjs.io/src/contrast/Weber.js +27 -0
  284. package/lib/colorjs.io/src/contrast/deltaPhi.js +25 -0
  285. package/lib/colorjs.io/src/contrast/index.js +6 -0
  286. package/lib/colorjs.io/src/contrast.js +28 -0
  287. package/lib/colorjs.io/src/defaults.js +12 -0
  288. package/lib/colorjs.io/src/deltaE/deltaE2000.js +179 -0
  289. package/lib/colorjs.io/src/deltaE/deltaE76.js +7 -0
  290. package/lib/colorjs.io/src/deltaE/deltaECMC.js +114 -0
  291. package/lib/colorjs.io/src/deltaE/deltaEHCT.js +51 -0
  292. package/lib/colorjs.io/src/deltaE/deltaEITP.js +24 -0
  293. package/lib/colorjs.io/src/deltaE/deltaEJz.js +43 -0
  294. package/lib/colorjs.io/src/deltaE/deltaEOK.js +19 -0
  295. package/lib/colorjs.io/src/deltaE/index.js +27 -0
  296. package/lib/colorjs.io/src/deltaE.js +19 -0
  297. package/lib/colorjs.io/src/display.js +83 -0
  298. package/lib/colorjs.io/src/distance.js +21 -0
  299. package/lib/colorjs.io/src/equals.js +10 -0
  300. package/lib/colorjs.io/src/get.js +11 -0
  301. package/lib/colorjs.io/src/getAll.js +20 -0
  302. package/lib/colorjs.io/src/getColor.js +36 -0
  303. package/lib/colorjs.io/src/hooks.js +37 -0
  304. package/lib/colorjs.io/src/inGamut.js +25 -0
  305. package/lib/colorjs.io/src/index-fn.js +28 -0
  306. package/lib/colorjs.io/src/index.js +38 -0
  307. package/lib/colorjs.io/src/interpolation.js +222 -0
  308. package/lib/colorjs.io/src/keywords.js +158 -0
  309. package/lib/colorjs.io/src/luminance.js +27 -0
  310. package/lib/colorjs.io/src/multiply-matrices.js +44 -0
  311. package/lib/colorjs.io/src/parse.js +198 -0
  312. package/lib/colorjs.io/src/rgbspace.js +64 -0
  313. package/lib/colorjs.io/src/serialize.js +86 -0
  314. package/lib/colorjs.io/src/set.js +33 -0
  315. package/lib/colorjs.io/src/setAll.js +12 -0
  316. package/lib/colorjs.io/src/space-accessors.js +86 -0
  317. package/lib/colorjs.io/src/space.js +440 -0
  318. package/lib/colorjs.io/src/spaces/a98rgb-linear.js +28 -0
  319. package/lib/colorjs.io/src/spaces/a98rgb.js +11 -0
  320. package/lib/colorjs.io/src/spaces/acescc.js +76 -0
  321. package/lib/colorjs.io/src/spaces/acescg.js +54 -0
  322. package/lib/colorjs.io/src/spaces/cam16.js +362 -0
  323. package/lib/colorjs.io/src/spaces/hct.js +157 -0
  324. package/lib/colorjs.io/src/spaces/hpluv.js +130 -0
  325. package/lib/colorjs.io/src/spaces/hsl.js +91 -0
  326. package/lib/colorjs.io/src/spaces/hsluv.js +162 -0
  327. package/lib/colorjs.io/src/spaces/hsv.js +65 -0
  328. package/lib/colorjs.io/src/spaces/hwb.js +58 -0
  329. package/lib/colorjs.io/src/spaces/ictcp.js +133 -0
  330. package/lib/colorjs.io/src/spaces/index-fn-hdr.js +7 -0
  331. package/lib/colorjs.io/src/spaces/index-fn.js +29 -0
  332. package/lib/colorjs.io/src/spaces/index.js +8 -0
  333. package/lib/colorjs.io/src/spaces/jzazbz.js +118 -0
  334. package/lib/colorjs.io/src/spaces/jzczhz.js +53 -0
  335. package/lib/colorjs.io/src/spaces/lab-d65.js +74 -0
  336. package/lib/colorjs.io/src/spaces/lab.js +74 -0
  337. package/lib/colorjs.io/src/spaces/lch.js +67 -0
  338. package/lib/colorjs.io/src/spaces/lchuv.js +68 -0
  339. package/lib/colorjs.io/src/spaces/luv.js +85 -0
  340. package/lib/colorjs.io/src/spaces/oklab.js +74 -0
  341. package/lib/colorjs.io/src/spaces/oklch.js +68 -0
  342. package/lib/colorjs.io/src/spaces/p3-linear.js +22 -0
  343. package/lib/colorjs.io/src/spaces/p3.js +13 -0
  344. package/lib/colorjs.io/src/spaces/prophoto-linear.js +28 -0
  345. package/lib/colorjs.io/src/spaces/prophoto.js +19 -0
  346. package/lib/colorjs.io/src/spaces/rec2020-linear.js +27 -0
  347. package/lib/colorjs.io/src/spaces/rec2020.js +31 -0
  348. package/lib/colorjs.io/src/spaces/rec2100-hlg.js +49 -0
  349. package/lib/colorjs.io/src/spaces/rec2100-pq.js +37 -0
  350. package/lib/colorjs.io/src/spaces/srgb-linear.js +30 -0
  351. package/lib/colorjs.io/src/spaces/srgb.js +127 -0
  352. package/lib/colorjs.io/src/spaces/xyz-abs-d65.js +40 -0
  353. package/lib/colorjs.io/src/spaces/xyz-d50.js +12 -0
  354. package/lib/colorjs.io/src/spaces/xyz-d65.js +18 -0
  355. package/lib/colorjs.io/src/to.js +26 -0
  356. package/lib/colorjs.io/src/toGamut.js +310 -0
  357. package/lib/colorjs.io/src/util.js +254 -0
  358. package/lib/colorjs.io/src/variations.js +14 -0
  359. package/lib/colorjs.io/types/index.d.cts +4 -0
  360. package/lib/colorjs.io/types/index.d.ts +42 -0
  361. package/lib/colorjs.io/types/src/CATs.d.ts +13 -0
  362. package/lib/colorjs.io/types/src/adapt.d.ts +12 -0
  363. package/lib/colorjs.io/types/src/angles.d.ts +7 -0
  364. package/lib/colorjs.io/types/src/chromaticity.d.ts +7 -0
  365. package/lib/colorjs.io/types/src/clone.d.ts +3 -0
  366. package/lib/colorjs.io/types/src/color.d.ts +160 -0
  367. package/lib/colorjs.io/types/src/contrast/APCA.d.ts +5 -0
  368. package/lib/colorjs.io/types/src/contrast/Lstar.d.ts +5 -0
  369. package/lib/colorjs.io/types/src/contrast/Michelson.d.ts +5 -0
  370. package/lib/colorjs.io/types/src/contrast/WCAG21.d.ts +5 -0
  371. package/lib/colorjs.io/types/src/contrast/Weber.d.ts +5 -0
  372. package/lib/colorjs.io/types/src/contrast/deltaPhi.d.ts +5 -0
  373. package/lib/colorjs.io/types/src/contrast/index.d.ts +11 -0
  374. package/lib/colorjs.io/types/src/contrast.d.ts +12 -0
  375. package/lib/colorjs.io/types/src/defaults.d.ts +2 -0
  376. package/lib/colorjs.io/types/src/deltaE/deltaE2000.d.ts +11 -0
  377. package/lib/colorjs.io/types/src/deltaE/deltaE76.d.ts +5 -0
  378. package/lib/colorjs.io/types/src/deltaE/deltaECMC.d.ts +9 -0
  379. package/lib/colorjs.io/types/src/deltaE/deltaEHCT.d.ts +5 -0
  380. package/lib/colorjs.io/types/src/deltaE/deltaEITP.d.ts +5 -0
  381. package/lib/colorjs.io/types/src/deltaE/deltaEJz.d.ts +5 -0
  382. package/lib/colorjs.io/types/src/deltaE/deltaEOK.d.ts +5 -0
  383. package/lib/colorjs.io/types/src/deltaE/index.d.ts +14 -0
  384. package/lib/colorjs.io/types/src/deltaE.d.ts +12 -0
  385. package/lib/colorjs.io/types/src/display.d.ts +17 -0
  386. package/lib/colorjs.io/types/src/distance.d.ts +8 -0
  387. package/lib/colorjs.io/types/src/equals.d.ts +3 -0
  388. package/lib/colorjs.io/types/src/get.d.ts +4 -0
  389. package/lib/colorjs.io/types/src/getAll.d.ts +7 -0
  390. package/lib/colorjs.io/types/src/getColor.d.ts +4 -0
  391. package/lib/colorjs.io/types/src/hooks.d.ts +52 -0
  392. package/lib/colorjs.io/types/src/inGamut.d.ts +8 -0
  393. package/lib/colorjs.io/types/src/index-fn.d.cts +1 -0
  394. package/lib/colorjs.io/types/src/index-fn.d.ts +63 -0
  395. package/lib/colorjs.io/types/src/index.d.ts +125 -0
  396. package/lib/colorjs.io/types/src/interpolation.d.ts +77 -0
  397. package/lib/colorjs.io/types/src/keywords.d.ts +2 -0
  398. package/lib/colorjs.io/types/src/luminance.d.ts +10 -0
  399. package/lib/colorjs.io/types/src/multiply-matrices.d.ts +9 -0
  400. package/lib/colorjs.io/types/src/parse.d.ts +16 -0
  401. package/lib/colorjs.io/types/src/rgbspace.d.ts +10 -0
  402. package/lib/colorjs.io/types/src/serialize.d.ts +13 -0
  403. package/lib/colorjs.io/types/src/set.d.ts +18 -0
  404. package/lib/colorjs.io/types/src/setAll.d.ts +14 -0
  405. package/lib/colorjs.io/types/src/space-accessors.d.ts +1 -0
  406. package/lib/colorjs.io/types/src/space-coord-accessors.d.ts +69 -0
  407. package/lib/colorjs.io/types/src/space.d.ts +143 -0
  408. package/lib/colorjs.io/types/src/spaces/a98rgb-linear.d.ts +3 -0
  409. package/lib/colorjs.io/types/src/spaces/a98rgb.d.ts +3 -0
  410. package/lib/colorjs.io/types/src/spaces/acescc.d.ts +3 -0
  411. package/lib/colorjs.io/types/src/spaces/acescg.d.ts +3 -0
  412. package/lib/colorjs.io/types/src/spaces/hpluv.d.ts +3 -0
  413. package/lib/colorjs.io/types/src/spaces/hsl.d.ts +3 -0
  414. package/lib/colorjs.io/types/src/spaces/hsluv.d.ts +3 -0
  415. package/lib/colorjs.io/types/src/spaces/hsv.d.ts +3 -0
  416. package/lib/colorjs.io/types/src/spaces/hwb.d.ts +3 -0
  417. package/lib/colorjs.io/types/src/spaces/ictcp.d.ts +3 -0
  418. package/lib/colorjs.io/types/src/spaces/index-fn-hdr.d.ts +9 -0
  419. package/lib/colorjs.io/types/src/spaces/index-fn.d.ts +29 -0
  420. package/lib/colorjs.io/types/src/spaces/index.d.ts +4 -0
  421. package/lib/colorjs.io/types/src/spaces/jzazbz.d.ts +3 -0
  422. package/lib/colorjs.io/types/src/spaces/jzczhz.d.ts +3 -0
  423. package/lib/colorjs.io/types/src/spaces/lab-d65.d.ts +3 -0
  424. package/lib/colorjs.io/types/src/spaces/lab.d.ts +3 -0
  425. package/lib/colorjs.io/types/src/spaces/lch.d.ts +3 -0
  426. package/lib/colorjs.io/types/src/spaces/lchuv.d.ts +3 -0
  427. package/lib/colorjs.io/types/src/spaces/luv.d.ts +3 -0
  428. package/lib/colorjs.io/types/src/spaces/oklab.d.ts +3 -0
  429. package/lib/colorjs.io/types/src/spaces/oklch.d.ts +3 -0
  430. package/lib/colorjs.io/types/src/spaces/p3-linear.d.ts +3 -0
  431. package/lib/colorjs.io/types/src/spaces/p3.d.ts +3 -0
  432. package/lib/colorjs.io/types/src/spaces/prophoto-linear.d.ts +3 -0
  433. package/lib/colorjs.io/types/src/spaces/prophoto.d.ts +3 -0
  434. package/lib/colorjs.io/types/src/spaces/rec2020-linear.d.ts +3 -0
  435. package/lib/colorjs.io/types/src/spaces/rec2020.d.ts +3 -0
  436. package/lib/colorjs.io/types/src/spaces/rec2100-hlg.d.ts +3 -0
  437. package/lib/colorjs.io/types/src/spaces/rec2100-pq.d.ts +3 -0
  438. package/lib/colorjs.io/types/src/spaces/srgb-linear.d.ts +3 -0
  439. package/lib/colorjs.io/types/src/spaces/srgb.d.ts +3 -0
  440. package/lib/colorjs.io/types/src/spaces/xyz-abs-d65.d.ts +3 -0
  441. package/lib/colorjs.io/types/src/spaces/xyz-d50.d.ts +3 -0
  442. package/lib/colorjs.io/types/src/spaces/xyz-d65.d.ts +3 -0
  443. package/lib/colorjs.io/types/src/to.d.ts +14 -0
  444. package/lib/colorjs.io/types/src/toGamut.d.ts +45 -0
  445. package/lib/colorjs.io/types/src/util.d.ts +58 -0
  446. package/lib/colorjs.io/types/src/variations.d.ts +5 -0
  447. package/logo.svg +159 -0
  448. package/package.json +41 -0
@@ -0,0 +1,86 @@
1
+ /**
2
+ * This plugin defines getters and setters for color[spaceId]
3
+ * e.g. color.lch on *any* color gives us the lch coords
4
+ */
5
+ import ColorSpace from "./space.js";
6
+ import Color from "./color.js";
7
+ import hooks from "./hooks.js";
8
+
9
+ // Add space accessors to existing color spaces
10
+ for (let id in ColorSpace.registry) {
11
+ addSpaceAccessors(id, ColorSpace.registry[id]);
12
+ }
13
+
14
+ // Add space accessors to color spaces not yet created
15
+ hooks.add("colorspace-init-end", space => {
16
+ addSpaceAccessors(space.id, space);
17
+ space.aliases?.forEach(alias => {
18
+ addSpaceAccessors(alias, space);
19
+ });
20
+ });
21
+
22
+ function addSpaceAccessors (id, space) {
23
+ let propId = id.replace(/-/g, "_");
24
+
25
+ Object.defineProperty(Color.prototype, propId, {
26
+ // Convert coords to coords in another colorspace and return them
27
+ // Source colorspace: this.spaceId
28
+ // Target colorspace: id
29
+ get () {
30
+ let ret = this.getAll(id);
31
+
32
+ if (typeof Proxy === "undefined") {
33
+ // If proxies are not supported, just return a static array
34
+ return ret;
35
+ }
36
+
37
+ // Enable color.spaceId.coordName syntax
38
+ return new Proxy(ret, {
39
+ has: (obj, property) => {
40
+ try {
41
+ ColorSpace.resolveCoord([space, property]);
42
+ return true;
43
+ }
44
+ catch (e) {}
45
+
46
+ return Reflect.has(obj, property);
47
+ },
48
+ get: (obj, property, receiver) => {
49
+ if (property && typeof property !== "symbol" && !(property in obj)) {
50
+ let {index} = ColorSpace.resolveCoord([space, property]);
51
+
52
+ if (index >= 0) {
53
+ return obj[index];
54
+ }
55
+ }
56
+
57
+ return Reflect.get(obj, property, receiver);
58
+ },
59
+ set: (obj, property, value, receiver) => {
60
+ if (property && typeof property !== "symbol" && !(property in obj) || property >= 0) {
61
+ let {index} = ColorSpace.resolveCoord([space, property]);
62
+
63
+ if (index >= 0) {
64
+ obj[index] = value;
65
+
66
+ // Update color.coords
67
+ this.setAll(id, obj);
68
+
69
+ return true;
70
+ }
71
+ }
72
+
73
+ return Reflect.set(obj, property, value, receiver);
74
+ },
75
+ });
76
+ },
77
+ // Convert coords in another colorspace to internal coords and set them
78
+ // Target colorspace: this.spaceId
79
+ // Source colorspace: id
80
+ set (coords) {
81
+ this.setAll(id, coords);
82
+ },
83
+ configurable: true,
84
+ enumerable: true,
85
+ });
86
+ }
@@ -0,0 +1,440 @@
1
+ import {type, parseCoordGrammar, serializeNumber, mapRange} from "./util.js";
2
+ import {getWhite} from "./adapt.js";
3
+ import hooks from "./hooks.js";
4
+ import getColor from "./getColor.js";
5
+
6
+ const ε = .000075;
7
+
8
+ /**
9
+ * Class to represent a color space
10
+ */
11
+ export default class ColorSpace {
12
+ constructor (options) {
13
+ this.id = options.id;
14
+ this.name = options.name;
15
+ this.base = options.base ? ColorSpace.get(options.base) : null;
16
+ this.aliases = options.aliases;
17
+
18
+ if (this.base) {
19
+ this.fromBase = options.fromBase;
20
+ this.toBase = options.toBase;
21
+ }
22
+
23
+ // Coordinate metadata
24
+
25
+ let coords = options.coords ?? this.base.coords;
26
+
27
+ for (let name in coords) {
28
+ if (!("name" in coords[name])) {
29
+ coords[name].name = name;
30
+ }
31
+ }
32
+ this.coords = coords;
33
+
34
+ // White point
35
+
36
+ let white = options.white ?? this.base.white ?? "D65";
37
+ this.white = getWhite(white);
38
+
39
+ // Sort out formats
40
+
41
+ this.formats = options.formats ?? {};
42
+
43
+ for (let name in this.formats) {
44
+ let format = this.formats[name];
45
+ format.type ||= "function";
46
+ format.name ||= name;
47
+ }
48
+
49
+ if (!this.formats.color?.id) {
50
+ this.formats.color = {
51
+ ...this.formats.color ?? {},
52
+ id: options.cssId || this.id,
53
+ };
54
+ }
55
+
56
+ // Gamut space
57
+
58
+ if (options.gamutSpace) {
59
+ // Gamut space explicitly specified
60
+ this.gamutSpace = options.gamutSpace === "self" ? this : ColorSpace.get(options.gamutSpace);
61
+ }
62
+ else {
63
+ // No gamut space specified, calculate a sensible default
64
+ if (this.isPolar) {
65
+ // Do not check gamut through polar coordinates
66
+ this.gamutSpace = this.base;
67
+ }
68
+ else {
69
+ this.gamutSpace = this;
70
+ }
71
+ }
72
+
73
+ // Optimize inGamut for unbounded spaces
74
+ if (this.gamutSpace.isUnbounded) {
75
+ this.inGamut = (coords, options) => {
76
+ return true;
77
+ };
78
+ }
79
+
80
+ // Other stuff
81
+ this.referred = options.referred;
82
+
83
+ // Compute ancestors and store them, since they will never change
84
+ Object.defineProperty(this, "path", {
85
+ value: getPath(this).reverse(),
86
+ writable: false,
87
+ enumerable: true,
88
+ configurable: true,
89
+ });
90
+
91
+ hooks.run("colorspace-init-end", this);
92
+ }
93
+
94
+ inGamut (coords, {epsilon = ε} = {}) {
95
+ if (!this.equals(this.gamutSpace)) {
96
+ coords = this.to(this.gamutSpace, coords);
97
+ return this.gamutSpace.inGamut(coords, {epsilon});
98
+ }
99
+
100
+ let coordMeta = Object.values(this.coords);
101
+
102
+ return coords.every((c, i) => {
103
+ let meta = coordMeta[i];
104
+
105
+ if (meta.type !== "angle" && meta.range) {
106
+ if (Number.isNaN(c)) {
107
+ // NaN is always in gamut
108
+ return true;
109
+ }
110
+
111
+ let [min, max] = meta.range;
112
+ return (min === undefined || c >= min - epsilon)
113
+ && (max === undefined || c <= max + epsilon);
114
+ }
115
+
116
+ return true;
117
+ });
118
+ }
119
+
120
+ get isUnbounded () {
121
+ return Object.values(this.coords).every(coord => !("range" in coord));
122
+ }
123
+
124
+ get cssId () {
125
+ return this.formats?.color?.id || this.id;
126
+ }
127
+
128
+ get isPolar () {
129
+ for (let id in this.coords) {
130
+ if (this.coords[id].type === "angle") {
131
+ return true;
132
+ }
133
+ }
134
+
135
+ return false;
136
+ }
137
+
138
+ getFormat (format) {
139
+ if (typeof format === "object") {
140
+ format = processFormat(format, this);
141
+ return format;
142
+ }
143
+
144
+ let ret;
145
+ if (format === "default") {
146
+ // Get first format
147
+ ret = Object.values(this.formats)[0];
148
+ }
149
+ else {
150
+ ret = this.formats[format];
151
+ }
152
+
153
+ if (ret) {
154
+ ret = processFormat(ret, this);
155
+ return ret;
156
+ }
157
+
158
+ return null;
159
+ }
160
+
161
+ /**
162
+ * Check if this color space is the same as another color space reference.
163
+ * Allows proxying color space objects and comparing color spaces with ids.
164
+ * @param {string | ColorSpace} space ColorSpace object or id to compare to
165
+ * @returns {boolean}
166
+ */
167
+ equals (space) {
168
+ if (!space) {
169
+ return false;
170
+ }
171
+
172
+ return this === space || this.id === space || this.id === space.id;
173
+ }
174
+
175
+ to (space, coords) {
176
+ if (arguments.length === 1) {
177
+ const color = getColor(space);
178
+ [space, coords] = [color.space, color.coords];
179
+ }
180
+
181
+ space = ColorSpace.get(space);
182
+
183
+ if (this.equals(space)) {
184
+ // Same space, no change needed
185
+ return coords;
186
+ }
187
+
188
+ // Convert NaN to 0, which seems to be valid in every coordinate of every color space
189
+ coords = coords.map(c => Number.isNaN(c) ? 0 : c);
190
+
191
+ // Find connection space = lowest common ancestor in the base tree
192
+ let myPath = this.path;
193
+ let otherPath = space.path;
194
+
195
+ let connectionSpace, connectionSpaceIndex;
196
+
197
+ for (let i = 0; i < myPath.length; i++) {
198
+ if (myPath[i].equals(otherPath[i])) {
199
+ connectionSpace = myPath[i];
200
+ connectionSpaceIndex = i;
201
+ }
202
+ else {
203
+ break;
204
+ }
205
+ }
206
+
207
+ if (!connectionSpace) {
208
+ // This should never happen
209
+ throw new Error(`Cannot convert between color spaces ${this} and ${space}: no connection space was found`);
210
+ }
211
+
212
+ // Go up from current space to connection space
213
+ for (let i = myPath.length - 1; i > connectionSpaceIndex; i--) {
214
+ coords = myPath[i].toBase(coords);
215
+ }
216
+
217
+ // Go down from connection space to target space
218
+ for (let i = connectionSpaceIndex + 1; i < otherPath.length; i++) {
219
+ coords = otherPath[i].fromBase(coords);
220
+ }
221
+
222
+ return coords;
223
+ }
224
+
225
+ from (space, coords) {
226
+ if (arguments.length === 1) {
227
+ const color = getColor(space);
228
+ [space, coords] = [color.space, color.coords];
229
+ }
230
+
231
+ space = ColorSpace.get(space);
232
+
233
+ return space.to(this, coords);
234
+ }
235
+
236
+ toString () {
237
+ return `${this.name} (${this.id})`;
238
+ }
239
+
240
+ getMinCoords () {
241
+ let ret = [];
242
+
243
+ for (let id in this.coords) {
244
+ let meta = this.coords[id];
245
+ let range = meta.range || meta.refRange;
246
+ ret.push(range?.min ?? 0);
247
+ }
248
+
249
+ return ret;
250
+ }
251
+
252
+ static registry = {};
253
+
254
+ // Returns array of unique color spaces
255
+ static get all () {
256
+ return [...new Set(Object.values(ColorSpace.registry))];
257
+ }
258
+
259
+ static register (id, space) {
260
+ if (arguments.length === 1) {
261
+ space = arguments[0];
262
+ id = space.id;
263
+ }
264
+
265
+ space = this.get(space);
266
+
267
+ if (this.registry[id] && this.registry[id] !== space) {
268
+ throw new Error(`Duplicate color space registration: '${id}'`);
269
+ }
270
+ this.registry[id] = space;
271
+
272
+ // Register aliases when called without an explicit ID.
273
+ if (arguments.length === 1 && space.aliases) {
274
+ for (let alias of space.aliases) {
275
+ this.register(alias, space);
276
+ }
277
+ }
278
+
279
+ return space;
280
+ }
281
+
282
+ /**
283
+ * Lookup ColorSpace object by name
284
+ * @param {ColorSpace | string} name
285
+ */
286
+ static get (space, ...alternatives) {
287
+ if (!space || space instanceof ColorSpace) {
288
+ return space;
289
+ }
290
+
291
+ let argType = type(space);
292
+
293
+ if (argType === "string") {
294
+ // It's a color space id
295
+ let ret = ColorSpace.registry[space.toLowerCase()];
296
+
297
+ if (!ret) {
298
+ throw new TypeError(`No color space found with id = "${space}"`);
299
+ }
300
+
301
+ return ret;
302
+ }
303
+
304
+ if (alternatives.length) {
305
+ return ColorSpace.get(...alternatives);
306
+ }
307
+
308
+ throw new TypeError(`${space} is not a valid color space`);
309
+ }
310
+
311
+ /**
312
+ * Get metadata about a coordinate of a color space
313
+ *
314
+ * @static
315
+ * @param {Array | string} ref
316
+ * @param {ColorSpace | string} [workingSpace]
317
+ * @return {Object}
318
+ */
319
+ static resolveCoord (ref, workingSpace) {
320
+ let coordType = type(ref);
321
+ let space, coord;
322
+
323
+ if (coordType === "string") {
324
+ if (ref.includes(".")) {
325
+ // Absolute coordinate
326
+ [space, coord] = ref.split(".");
327
+ }
328
+ else {
329
+ // Relative coordinate
330
+ [space, coord] = [, ref];
331
+ }
332
+ }
333
+ else if (Array.isArray(ref)) {
334
+ [space, coord] = ref;
335
+ }
336
+ else {
337
+ // Object
338
+ space = ref.space;
339
+ coord = ref.coordId;
340
+ }
341
+
342
+ space = ColorSpace.get(space);
343
+
344
+ if (!space) {
345
+ space = workingSpace;
346
+ }
347
+
348
+ if (!space) {
349
+ throw new TypeError(`Cannot resolve coordinate reference ${ref}: No color space specified and relative references are not allowed here`);
350
+ }
351
+
352
+ coordType = type(coord);
353
+
354
+ if (coordType === "number" || coordType === "string" && coord >= 0) {
355
+ // Resolve numerical coord
356
+ let meta = Object.entries(space.coords)[coord];
357
+
358
+ if (meta) {
359
+ return {space, id: meta[0], index: coord, ...meta[1]};
360
+ }
361
+ }
362
+
363
+ space = ColorSpace.get(space);
364
+
365
+ let normalizedCoord = coord.toLowerCase();
366
+
367
+ let i = 0;
368
+ for (let id in space.coords) {
369
+ let meta = space.coords[id];
370
+
371
+ if (id.toLowerCase() === normalizedCoord || meta.name?.toLowerCase() === normalizedCoord) {
372
+ return {space, id, index: i, ...meta};
373
+ }
374
+
375
+ i++;
376
+ }
377
+
378
+ throw new TypeError(`No "${coord}" coordinate found in ${space.name}. Its coordinates are: ${Object.keys(space.coords).join(", ")}`);
379
+ }
380
+
381
+ static DEFAULT_FORMAT = {
382
+ type: "functions",
383
+ name: "color",
384
+ };
385
+ }
386
+
387
+ function getPath (space) {
388
+ let ret = [space];
389
+
390
+ for (let s = space; s = s.base;) {
391
+ ret.push(s);
392
+ }
393
+
394
+ return ret;
395
+ }
396
+
397
+ function processFormat (format, {coords} = {}) {
398
+ if (format.coords && !format.coordGrammar) {
399
+ format.type ||= "function";
400
+ format.name ||= "color";
401
+
402
+ // Format has not been processed
403
+ format.coordGrammar = parseCoordGrammar(format.coords);
404
+
405
+ let coordFormats = Object.entries(coords).map(([id, coordMeta], i) => {
406
+ // Preferred format for each coord is the first one
407
+ let outputType = format.coordGrammar[i][0];
408
+
409
+ let fromRange = coordMeta.range || coordMeta.refRange;
410
+ let toRange = outputType.range, suffix = "";
411
+
412
+ // Non-strict equals intentional since outputType could be a string object
413
+ if (outputType == "<percentage>") {
414
+ toRange = [0, 100];
415
+ suffix = "%";
416
+ }
417
+ else if (outputType == "<angle>") {
418
+ suffix = "deg";
419
+ }
420
+
421
+ return {fromRange, toRange, suffix};
422
+ });
423
+
424
+ format.serializeCoords = (coords, precision) => {
425
+ return coords.map((c, i) => {
426
+ let {fromRange, toRange, suffix} = coordFormats[i];
427
+
428
+ if (fromRange && toRange) {
429
+ c = mapRange(fromRange, toRange, c);
430
+ }
431
+
432
+ c = serializeNumber(c, {precision, unit: suffix});
433
+
434
+ return c;
435
+ });
436
+ };
437
+ }
438
+
439
+ return format;
440
+ }
@@ -0,0 +1,28 @@
1
+ import RGBColorSpace from "../rgbspace.js";
2
+
3
+ // convert an array of linear-light a98-rgb values to CIE XYZ
4
+ // http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html
5
+ // has greater numerical precision than section 4.3.5.3 of
6
+ // https://www.adobe.com/digitalimag/pdfs/AdobeRGB1998.pdf
7
+ // but the values below were calculated from first principles
8
+ // from the chromaticity coordinates of R G B W
9
+ const toXYZ_M = [
10
+ [ 0.5766690429101305, 0.1855582379065463, 0.1882286462349947 ],
11
+ [ 0.29734497525053605, 0.6273635662554661, 0.07529145849399788 ],
12
+ [ 0.02703136138641234, 0.07068885253582723, 0.9913375368376388 ],
13
+ ];
14
+
15
+ const fromXYZ_M = [
16
+ [ 2.0415879038107465, -0.5650069742788596, -0.34473135077832956 ],
17
+ [ -0.9692436362808795, 1.8759675015077202, 0.04155505740717557 ],
18
+ [ 0.013444280632031142, -0.11836239223101838, 1.0151749943912054 ],
19
+ ];
20
+
21
+ export default new RGBColorSpace({
22
+ id: "a98rgb-linear",
23
+ cssId: "--a98-rgb-linear",
24
+ name: "Linear Adobe® 98 RGB compatible",
25
+ white: "D65",
26
+ toXYZ_M,
27
+ fromXYZ_M,
28
+ });
@@ -0,0 +1,11 @@
1
+ import RGBColorSpace from "../rgbspace.js";
2
+ import A98Linear from "./a98rgb-linear.js";
3
+
4
+ export default new RGBColorSpace({
5
+ id: "a98rgb",
6
+ cssId: "a98-rgb",
7
+ name: "Adobe® 98 RGB compatible",
8
+ base: A98Linear,
9
+ toBase: RGB => RGB.map(val => Math.pow(Math.abs(val), 563 / 256) * Math.sign(val)),
10
+ fromBase: RGB => RGB.map(val => Math.pow(Math.abs(val), 256 / 563) * Math.sign(val)),
11
+ });
@@ -0,0 +1,76 @@
1
+ import RGBColorSpace from "../rgbspace.js";
2
+ import "../CATs.js"; // because of the funky whitepoint
3
+ import ACEScg from "./acescg.js";
4
+
5
+ const ε = 2 ** -16;
6
+
7
+ // the smallest value which, in the 32bit IEEE 754 float encoding,
8
+ // decodes as a non-negative value
9
+ const ACES_min_nonzero = -0.35828683;
10
+
11
+ // brightest encoded value, decodes to 65504
12
+ const ACES_cc_max = (Math.log2(65504) + 9.72) / 17.52; // 1.468
13
+
14
+ export default new RGBColorSpace({
15
+ id: "acescc",
16
+ cssId: "--acescc",
17
+ name: "ACEScc",
18
+ // see S-2014-003 ACEScc – A Logarithmic Encoding of ACES Data
19
+ // https://docs.acescentral.com/specifications/acescc/
20
+ // uses the AP1 primaries, see section 4.3.1 Color primaries
21
+
22
+ // Appendix A: "Very small ACES scene referred values below 7 1/4 stops
23
+ // below 18% middle gray are encoded as negative ACEScc values.
24
+ // These values should be preserved per the encoding in Section 4.4
25
+ // so that all positive ACES values are maintained."
26
+ coords: {
27
+ r: {
28
+ range: [ACES_min_nonzero, ACES_cc_max],
29
+ name: "Red",
30
+ },
31
+ g: {
32
+ range: [ACES_min_nonzero, ACES_cc_max],
33
+ name: "Green",
34
+ },
35
+ b: {
36
+ range: [ACES_min_nonzero, ACES_cc_max],
37
+ name: "Blue",
38
+ },
39
+ },
40
+ referred: "scene",
41
+
42
+ base: ACEScg,
43
+ // from section 4.4.2 Decoding Function
44
+ toBase (RGB) {
45
+ const low = (9.72 - 15) / 17.52; // -0.3014
46
+
47
+ return RGB.map(function (val) {
48
+ if (val <= low) {
49
+ return (2 ** ((val * 17.52) - 9.72) - ε) * 2; // very low values, below -0.3014
50
+ }
51
+ else if (val < ACES_cc_max) {
52
+ return 2 ** ((val * 17.52) - 9.72);
53
+ }
54
+ else { // val >= ACES_cc_max
55
+ return 65504;
56
+ }
57
+ });
58
+ },
59
+
60
+ // Non-linear encoding function from S-2014-003, section 4.4.1 Encoding Function
61
+ fromBase (RGB) {
62
+ return RGB.map(function (val) {
63
+ if (val <= 0) {
64
+ return (Math.log2(ε) + 9.72) / 17.52; // -0.3584
65
+ }
66
+ else if (val < ε) {
67
+ return (Math.log2(ε + val * 0.5) + 9.72) / 17.52;
68
+ }
69
+ else { // val >= ε
70
+ return (Math.log2(val) + 9.72) / 17.52;
71
+ }
72
+ });
73
+ },
74
+ // encoded media white (rgb 1,1,1) => linear [ 222.861, 222.861, 222.861 ]
75
+ // encoded media black (rgb 0,0,0) => linear [ 0.0011857, 0.0011857, 0.0011857]
76
+ });
@@ -0,0 +1,54 @@
1
+ import RGBColorSpace from "../rgbspace.js";
2
+ import {WHITES} from "../adapt.js";
3
+ import "../CATs.js"; // because of the funky whitepoint
4
+
5
+ // The ACES whitepoint
6
+ // see TB-2018-001 Derivation of the ACES White Point CIE Chromaticity Coordinates
7
+ // also https://github.com/ampas/aces-dev/blob/master/documents/python/TB-2018-001/aces_wp.py
8
+ // Similar to D60
9
+ WHITES.ACES = [0.32168 / 0.33767, 1.00000, (1.00000 - 0.32168 - 0.33767) / 0.33767];
10
+
11
+ // convert an array of linear-light ACEScc values to CIE XYZ
12
+ const toXYZ_M = [
13
+ [ 0.6624541811085053, 0.13400420645643313, 0.1561876870049078 ],
14
+ [ 0.27222871678091454, 0.6740817658111484, 0.05368951740793705 ],
15
+ [ -0.005574649490394108, 0.004060733528982826, 1.0103391003129971 ],
16
+ ];
17
+ const fromXYZ_M = [
18
+ [ 1.6410233796943257, -0.32480329418479, -0.23642469523761225 ],
19
+ [ -0.6636628587229829, 1.6153315916573379, 0.016756347685530137 ],
20
+ [ 0.011721894328375376, -0.008284441996237409, 0.9883948585390215 ],
21
+ ];
22
+
23
+ export default new RGBColorSpace({
24
+ id: "acescg",
25
+ cssId: "--acescg",
26
+ name: "ACEScg",
27
+
28
+ // ACEScg – A scene-referred, linear-light encoding of ACES Data
29
+ // https://docs.acescentral.com/specifications/acescg/
30
+ // uses the AP1 primaries, see section 4.3.1 Color primaries
31
+ coords: {
32
+ r: {
33
+ range: [0, 65504],
34
+ name: "Red",
35
+ },
36
+ g: {
37
+ range: [0, 65504],
38
+ name: "Green",
39
+ },
40
+ b: {
41
+ range: [0, 65504],
42
+ name: "Blue",
43
+ },
44
+ },
45
+
46
+ referred: "scene",
47
+
48
+ white: WHITES.ACES,
49
+
50
+ toXYZ_M,
51
+ fromXYZ_M,
52
+ });
53
+
54
+ // export default Color;