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.
- package/README.md +33 -0
- package/_build/copy-config.js +90 -0
- package/_build/copy-config.json +18 -0
- package/_build/eleventy.js +16 -0
- package/_data/eleventyComputed.11tydata.js +29 -0
- package/_headers +2 -0
- package/_redirects +2 -0
- package/assets/css/style.css +1 -0
- package/assets/js/index.js +15 -0
- package/color-gamut/README.md +75 -0
- package/color-gamut/color-gamut.js +172 -0
- package/color-gamut/style.css +32 -0
- package/color-slider/README.md +84 -0
- package/color-slider/color-slider.js +79 -0
- package/color-slider/style.css +65 -0
- package/color-swatch/color-swatch.css +41 -0
- package/color-swatch/color-swatch.js +79 -0
- package/color-swatch/index.njk +40 -0
- package/common/attributes.js +68 -0
- package/common/color.js +10 -0
- package/css-color/css-color.js +256 -0
- package/css-color/index.njk +43 -0
- package/css-color/style.css +67 -0
- package/elements.11tydata.json +5 -0
- package/index.js +4 -0
- package/lib/README.md +4 -0
- package/lib/colorjs.io/LICENSE +21 -0
- package/lib/colorjs.io/README.json +3 -0
- package/lib/colorjs.io/README.md +257 -0
- package/lib/colorjs.io/colorjs.io/LICENSE +21 -0
- package/lib/colorjs.io/colorjs.io/README.json +3 -0
- package/lib/colorjs.io/colorjs.io/README.md +257 -0
- package/lib/colorjs.io/colorjs.io/dist/color-fn.cjs +5437 -0
- package/lib/colorjs.io/colorjs.io/dist/color-fn.cjs.map +1 -0
- package/lib/colorjs.io/colorjs.io/dist/color-fn.legacy.cjs +7048 -0
- package/lib/colorjs.io/colorjs.io/dist/color-fn.legacy.cjs.map +1 -0
- package/lib/colorjs.io/colorjs.io/dist/color-fn.legacy.min.cjs +2 -0
- package/lib/colorjs.io/colorjs.io/dist/color-fn.legacy.min.cjs.map +1 -0
- package/lib/colorjs.io/colorjs.io/dist/color-fn.min.cjs +2 -0
- package/lib/colorjs.io/colorjs.io/dist/color-fn.min.cjs.map +1 -0
- package/lib/colorjs.io/colorjs.io/dist/color.cjs +5759 -0
- package/lib/colorjs.io/colorjs.io/dist/color.cjs.map +1 -0
- package/lib/colorjs.io/colorjs.io/dist/color.global.js +5760 -0
- package/lib/colorjs.io/colorjs.io/dist/color.global.js.map +1 -0
- package/lib/colorjs.io/colorjs.io/dist/color.global.legacy.js +7400 -0
- package/lib/colorjs.io/colorjs.io/dist/color.global.legacy.js.map +1 -0
- package/lib/colorjs.io/colorjs.io/dist/color.global.legacy.min.js +2 -0
- package/lib/colorjs.io/colorjs.io/dist/color.global.legacy.min.js.map +1 -0
- package/lib/colorjs.io/colorjs.io/dist/color.global.min.js +2 -0
- package/lib/colorjs.io/colorjs.io/dist/color.global.min.js.map +1 -0
- package/lib/colorjs.io/colorjs.io/dist/color.js +5755 -0
- package/lib/colorjs.io/colorjs.io/dist/color.js.map +1 -0
- package/lib/colorjs.io/colorjs.io/dist/color.legacy.cjs +7399 -0
- package/lib/colorjs.io/colorjs.io/dist/color.legacy.cjs.map +1 -0
- package/lib/colorjs.io/colorjs.io/dist/color.legacy.js +7395 -0
- package/lib/colorjs.io/colorjs.io/dist/color.legacy.js.map +1 -0
- package/lib/colorjs.io/colorjs.io/dist/color.legacy.min.cjs +2 -0
- package/lib/colorjs.io/colorjs.io/dist/color.legacy.min.cjs.map +1 -0
- package/lib/colorjs.io/colorjs.io/dist/color.legacy.min.js +2 -0
- package/lib/colorjs.io/colorjs.io/dist/color.legacy.min.js.map +1 -0
- package/lib/colorjs.io/colorjs.io/dist/color.min.cjs +2 -0
- package/lib/colorjs.io/colorjs.io/dist/color.min.cjs.map +1 -0
- package/lib/colorjs.io/colorjs.io/dist/color.min.js +2 -0
- package/lib/colorjs.io/colorjs.io/dist/color.min.js.map +1 -0
- package/lib/colorjs.io/colorjs.io/package.json +113 -0
- package/lib/colorjs.io/colorjs.io/src/CATs.js +131 -0
- package/lib/colorjs.io/colorjs.io/src/adapt.js +62 -0
- package/lib/colorjs.io/colorjs.io/src/angles.js +44 -0
- package/lib/colorjs.io/colorjs.io/src/chromaticity.js +33 -0
- package/lib/colorjs.io/colorjs.io/src/clone.js +7 -0
- package/lib/colorjs.io/colorjs.io/src/color.js +201 -0
- package/lib/colorjs.io/colorjs.io/src/contrast/APCA.js +102 -0
- package/lib/colorjs.io/colorjs.io/src/contrast/Lstar.js +17 -0
- package/lib/colorjs.io/colorjs.io/src/contrast/Michelson.js +22 -0
- package/lib/colorjs.io/colorjs.io/src/contrast/WCAG21.js +20 -0
- package/lib/colorjs.io/colorjs.io/src/contrast/Weber.js +27 -0
- package/lib/colorjs.io/colorjs.io/src/contrast/deltaPhi.js +25 -0
- package/lib/colorjs.io/colorjs.io/src/contrast/index.js +6 -0
- package/lib/colorjs.io/colorjs.io/src/contrast.js +28 -0
- package/lib/colorjs.io/colorjs.io/src/defaults.js +12 -0
- package/lib/colorjs.io/colorjs.io/src/deltaE/deltaE2000.js +179 -0
- package/lib/colorjs.io/colorjs.io/src/deltaE/deltaE76.js +7 -0
- package/lib/colorjs.io/colorjs.io/src/deltaE/deltaECMC.js +114 -0
- package/lib/colorjs.io/colorjs.io/src/deltaE/deltaEHCT.js +51 -0
- package/lib/colorjs.io/colorjs.io/src/deltaE/deltaEITP.js +24 -0
- package/lib/colorjs.io/colorjs.io/src/deltaE/deltaEJz.js +43 -0
- package/lib/colorjs.io/colorjs.io/src/deltaE/deltaEOK.js +19 -0
- package/lib/colorjs.io/colorjs.io/src/deltaE/index.js +27 -0
- package/lib/colorjs.io/colorjs.io/src/deltaE.js +19 -0
- package/lib/colorjs.io/colorjs.io/src/display.js +83 -0
- package/lib/colorjs.io/colorjs.io/src/distance.js +21 -0
- package/lib/colorjs.io/colorjs.io/src/equals.js +10 -0
- package/lib/colorjs.io/colorjs.io/src/get.js +11 -0
- package/lib/colorjs.io/colorjs.io/src/getAll.js +20 -0
- package/lib/colorjs.io/colorjs.io/src/getColor.js +36 -0
- package/lib/colorjs.io/colorjs.io/src/hooks.js +37 -0
- package/lib/colorjs.io/colorjs.io/src/inGamut.js +25 -0
- package/lib/colorjs.io/colorjs.io/src/index-fn.js +28 -0
- package/lib/colorjs.io/colorjs.io/src/index.js +38 -0
- package/lib/colorjs.io/colorjs.io/src/interpolation.js +222 -0
- package/lib/colorjs.io/colorjs.io/src/keywords.js +158 -0
- package/lib/colorjs.io/colorjs.io/src/luminance.js +27 -0
- package/lib/colorjs.io/colorjs.io/src/multiply-matrices.js +44 -0
- package/lib/colorjs.io/colorjs.io/src/parse.js +198 -0
- package/lib/colorjs.io/colorjs.io/src/rgbspace.js +64 -0
- package/lib/colorjs.io/colorjs.io/src/serialize.js +86 -0
- package/lib/colorjs.io/colorjs.io/src/set.js +33 -0
- package/lib/colorjs.io/colorjs.io/src/setAll.js +12 -0
- package/lib/colorjs.io/colorjs.io/src/space-accessors.js +86 -0
- package/lib/colorjs.io/colorjs.io/src/space.js +440 -0
- package/lib/colorjs.io/colorjs.io/src/spaces/a98rgb-linear.js +28 -0
- package/lib/colorjs.io/colorjs.io/src/spaces/a98rgb.js +11 -0
- package/lib/colorjs.io/colorjs.io/src/spaces/acescc.js +76 -0
- package/lib/colorjs.io/colorjs.io/src/spaces/acescg.js +54 -0
- package/lib/colorjs.io/colorjs.io/src/spaces/cam16.js +362 -0
- package/lib/colorjs.io/colorjs.io/src/spaces/hct.js +157 -0
- package/lib/colorjs.io/colorjs.io/src/spaces/hpluv.js +130 -0
- package/lib/colorjs.io/colorjs.io/src/spaces/hsl.js +91 -0
- package/lib/colorjs.io/colorjs.io/src/spaces/hsluv.js +162 -0
- package/lib/colorjs.io/colorjs.io/src/spaces/hsv.js +65 -0
- package/lib/colorjs.io/colorjs.io/src/spaces/hwb.js +58 -0
- package/lib/colorjs.io/colorjs.io/src/spaces/ictcp.js +133 -0
- package/lib/colorjs.io/colorjs.io/src/spaces/index-fn-hdr.js +7 -0
- package/lib/colorjs.io/colorjs.io/src/spaces/index-fn.js +29 -0
- package/lib/colorjs.io/colorjs.io/src/spaces/index.js +8 -0
- package/lib/colorjs.io/colorjs.io/src/spaces/jzazbz.js +118 -0
- package/lib/colorjs.io/colorjs.io/src/spaces/jzczhz.js +53 -0
- package/lib/colorjs.io/colorjs.io/src/spaces/lab-d65.js +74 -0
- package/lib/colorjs.io/colorjs.io/src/spaces/lab.js +74 -0
- package/lib/colorjs.io/colorjs.io/src/spaces/lch.js +67 -0
- package/lib/colorjs.io/colorjs.io/src/spaces/lchuv.js +68 -0
- package/lib/colorjs.io/colorjs.io/src/spaces/luv.js +85 -0
- package/lib/colorjs.io/colorjs.io/src/spaces/oklab.js +74 -0
- package/lib/colorjs.io/colorjs.io/src/spaces/oklch.js +68 -0
- package/lib/colorjs.io/colorjs.io/src/spaces/p3-linear.js +22 -0
- package/lib/colorjs.io/colorjs.io/src/spaces/p3.js +13 -0
- package/lib/colorjs.io/colorjs.io/src/spaces/prophoto-linear.js +28 -0
- package/lib/colorjs.io/colorjs.io/src/spaces/prophoto.js +19 -0
- package/lib/colorjs.io/colorjs.io/src/spaces/rec2020-linear.js +27 -0
- package/lib/colorjs.io/colorjs.io/src/spaces/rec2020.js +31 -0
- package/lib/colorjs.io/colorjs.io/src/spaces/rec2100-hlg.js +49 -0
- package/lib/colorjs.io/colorjs.io/src/spaces/rec2100-pq.js +37 -0
- package/lib/colorjs.io/colorjs.io/src/spaces/srgb-linear.js +30 -0
- package/lib/colorjs.io/colorjs.io/src/spaces/srgb.js +127 -0
- package/lib/colorjs.io/colorjs.io/src/spaces/xyz-abs-d65.js +40 -0
- package/lib/colorjs.io/colorjs.io/src/spaces/xyz-d50.js +12 -0
- package/lib/colorjs.io/colorjs.io/src/spaces/xyz-d65.js +18 -0
- package/lib/colorjs.io/colorjs.io/src/to.js +26 -0
- package/lib/colorjs.io/colorjs.io/src/toGamut.js +310 -0
- package/lib/colorjs.io/colorjs.io/src/util.js +254 -0
- package/lib/colorjs.io/colorjs.io/src/variations.js +14 -0
- package/lib/colorjs.io/colorjs.io/types/index.d.cts +4 -0
- package/lib/colorjs.io/colorjs.io/types/index.d.ts +42 -0
- package/lib/colorjs.io/colorjs.io/types/src/CATs.d.ts +13 -0
- package/lib/colorjs.io/colorjs.io/types/src/adapt.d.ts +12 -0
- package/lib/colorjs.io/colorjs.io/types/src/angles.d.ts +7 -0
- package/lib/colorjs.io/colorjs.io/types/src/chromaticity.d.ts +7 -0
- package/lib/colorjs.io/colorjs.io/types/src/clone.d.ts +3 -0
- package/lib/colorjs.io/colorjs.io/types/src/color.d.ts +160 -0
- package/lib/colorjs.io/colorjs.io/types/src/contrast/APCA.d.ts +5 -0
- package/lib/colorjs.io/colorjs.io/types/src/contrast/Lstar.d.ts +5 -0
- package/lib/colorjs.io/colorjs.io/types/src/contrast/Michelson.d.ts +5 -0
- package/lib/colorjs.io/colorjs.io/types/src/contrast/WCAG21.d.ts +5 -0
- package/lib/colorjs.io/colorjs.io/types/src/contrast/Weber.d.ts +5 -0
- package/lib/colorjs.io/colorjs.io/types/src/contrast/deltaPhi.d.ts +5 -0
- package/lib/colorjs.io/colorjs.io/types/src/contrast/index.d.ts +11 -0
- package/lib/colorjs.io/colorjs.io/types/src/contrast.d.ts +12 -0
- package/lib/colorjs.io/colorjs.io/types/src/defaults.d.ts +2 -0
- package/lib/colorjs.io/colorjs.io/types/src/deltaE/deltaE2000.d.ts +11 -0
- package/lib/colorjs.io/colorjs.io/types/src/deltaE/deltaE76.d.ts +5 -0
- package/lib/colorjs.io/colorjs.io/types/src/deltaE/deltaECMC.d.ts +9 -0
- package/lib/colorjs.io/colorjs.io/types/src/deltaE/deltaEHCT.d.ts +5 -0
- package/lib/colorjs.io/colorjs.io/types/src/deltaE/deltaEITP.d.ts +5 -0
- package/lib/colorjs.io/colorjs.io/types/src/deltaE/deltaEJz.d.ts +5 -0
- package/lib/colorjs.io/colorjs.io/types/src/deltaE/deltaEOK.d.ts +5 -0
- package/lib/colorjs.io/colorjs.io/types/src/deltaE/index.d.ts +14 -0
- package/lib/colorjs.io/colorjs.io/types/src/deltaE.d.ts +12 -0
- package/lib/colorjs.io/colorjs.io/types/src/display.d.ts +17 -0
- package/lib/colorjs.io/colorjs.io/types/src/distance.d.ts +8 -0
- package/lib/colorjs.io/colorjs.io/types/src/equals.d.ts +3 -0
- package/lib/colorjs.io/colorjs.io/types/src/get.d.ts +4 -0
- package/lib/colorjs.io/colorjs.io/types/src/getAll.d.ts +7 -0
- package/lib/colorjs.io/colorjs.io/types/src/getColor.d.ts +4 -0
- package/lib/colorjs.io/colorjs.io/types/src/hooks.d.ts +52 -0
- package/lib/colorjs.io/colorjs.io/types/src/inGamut.d.ts +8 -0
- package/lib/colorjs.io/colorjs.io/types/src/index-fn.d.cts +1 -0
- package/lib/colorjs.io/colorjs.io/types/src/index-fn.d.ts +63 -0
- package/lib/colorjs.io/colorjs.io/types/src/index.d.ts +125 -0
- package/lib/colorjs.io/colorjs.io/types/src/interpolation.d.ts +77 -0
- package/lib/colorjs.io/colorjs.io/types/src/keywords.d.ts +2 -0
- package/lib/colorjs.io/colorjs.io/types/src/luminance.d.ts +10 -0
- package/lib/colorjs.io/colorjs.io/types/src/multiply-matrices.d.ts +9 -0
- package/lib/colorjs.io/colorjs.io/types/src/parse.d.ts +16 -0
- package/lib/colorjs.io/colorjs.io/types/src/rgbspace.d.ts +10 -0
- package/lib/colorjs.io/colorjs.io/types/src/serialize.d.ts +13 -0
- package/lib/colorjs.io/colorjs.io/types/src/set.d.ts +18 -0
- package/lib/colorjs.io/colorjs.io/types/src/setAll.d.ts +14 -0
- package/lib/colorjs.io/colorjs.io/types/src/space-accessors.d.ts +1 -0
- package/lib/colorjs.io/colorjs.io/types/src/space-coord-accessors.d.ts +69 -0
- package/lib/colorjs.io/colorjs.io/types/src/space.d.ts +143 -0
- package/lib/colorjs.io/colorjs.io/types/src/spaces/a98rgb-linear.d.ts +3 -0
- package/lib/colorjs.io/colorjs.io/types/src/spaces/a98rgb.d.ts +3 -0
- package/lib/colorjs.io/colorjs.io/types/src/spaces/acescc.d.ts +3 -0
- package/lib/colorjs.io/colorjs.io/types/src/spaces/acescg.d.ts +3 -0
- package/lib/colorjs.io/colorjs.io/types/src/spaces/hpluv.d.ts +3 -0
- package/lib/colorjs.io/colorjs.io/types/src/spaces/hsl.d.ts +3 -0
- package/lib/colorjs.io/colorjs.io/types/src/spaces/hsluv.d.ts +3 -0
- package/lib/colorjs.io/colorjs.io/types/src/spaces/hsv.d.ts +3 -0
- package/lib/colorjs.io/colorjs.io/types/src/spaces/hwb.d.ts +3 -0
- package/lib/colorjs.io/colorjs.io/types/src/spaces/ictcp.d.ts +3 -0
- package/lib/colorjs.io/colorjs.io/types/src/spaces/index-fn-hdr.d.ts +9 -0
- package/lib/colorjs.io/colorjs.io/types/src/spaces/index-fn.d.ts +29 -0
- package/lib/colorjs.io/colorjs.io/types/src/spaces/index.d.ts +4 -0
- package/lib/colorjs.io/colorjs.io/types/src/spaces/jzazbz.d.ts +3 -0
- package/lib/colorjs.io/colorjs.io/types/src/spaces/jzczhz.d.ts +3 -0
- package/lib/colorjs.io/colorjs.io/types/src/spaces/lab-d65.d.ts +3 -0
- package/lib/colorjs.io/colorjs.io/types/src/spaces/lab.d.ts +3 -0
- package/lib/colorjs.io/colorjs.io/types/src/spaces/lch.d.ts +3 -0
- package/lib/colorjs.io/colorjs.io/types/src/spaces/lchuv.d.ts +3 -0
- package/lib/colorjs.io/colorjs.io/types/src/spaces/luv.d.ts +3 -0
- package/lib/colorjs.io/colorjs.io/types/src/spaces/oklab.d.ts +3 -0
- package/lib/colorjs.io/colorjs.io/types/src/spaces/oklch.d.ts +3 -0
- package/lib/colorjs.io/colorjs.io/types/src/spaces/p3-linear.d.ts +3 -0
- package/lib/colorjs.io/colorjs.io/types/src/spaces/p3.d.ts +3 -0
- package/lib/colorjs.io/colorjs.io/types/src/spaces/prophoto-linear.d.ts +3 -0
- package/lib/colorjs.io/colorjs.io/types/src/spaces/prophoto.d.ts +3 -0
- package/lib/colorjs.io/colorjs.io/types/src/spaces/rec2020-linear.d.ts +3 -0
- package/lib/colorjs.io/colorjs.io/types/src/spaces/rec2020.d.ts +3 -0
- package/lib/colorjs.io/colorjs.io/types/src/spaces/rec2100-hlg.d.ts +3 -0
- package/lib/colorjs.io/colorjs.io/types/src/spaces/rec2100-pq.d.ts +3 -0
- package/lib/colorjs.io/colorjs.io/types/src/spaces/srgb-linear.d.ts +3 -0
- package/lib/colorjs.io/colorjs.io/types/src/spaces/srgb.d.ts +3 -0
- package/lib/colorjs.io/colorjs.io/types/src/spaces/xyz-abs-d65.d.ts +3 -0
- package/lib/colorjs.io/colorjs.io/types/src/spaces/xyz-d50.d.ts +3 -0
- package/lib/colorjs.io/colorjs.io/types/src/spaces/xyz-d65.d.ts +3 -0
- package/lib/colorjs.io/colorjs.io/types/src/to.d.ts +14 -0
- package/lib/colorjs.io/colorjs.io/types/src/toGamut.d.ts +45 -0
- package/lib/colorjs.io/colorjs.io/types/src/util.d.ts +58 -0
- package/lib/colorjs.io/colorjs.io/types/src/variations.d.ts +5 -0
- package/lib/colorjs.io/dist/color-fn.cjs +5437 -0
- package/lib/colorjs.io/dist/color-fn.cjs.map +1 -0
- package/lib/colorjs.io/dist/color-fn.legacy.cjs +7048 -0
- package/lib/colorjs.io/dist/color-fn.legacy.cjs.map +1 -0
- package/lib/colorjs.io/dist/color-fn.legacy.min.cjs +2 -0
- package/lib/colorjs.io/dist/color-fn.legacy.min.cjs.map +1 -0
- package/lib/colorjs.io/dist/color-fn.min.cjs +2 -0
- package/lib/colorjs.io/dist/color-fn.min.cjs.map +1 -0
- package/lib/colorjs.io/dist/color.cjs +5759 -0
- package/lib/colorjs.io/dist/color.cjs.map +1 -0
- package/lib/colorjs.io/dist/color.global.js +5760 -0
- package/lib/colorjs.io/dist/color.global.js.map +1 -0
- package/lib/colorjs.io/dist/color.global.legacy.js +7400 -0
- package/lib/colorjs.io/dist/color.global.legacy.js.map +1 -0
- package/lib/colorjs.io/dist/color.global.legacy.min.js +2 -0
- package/lib/colorjs.io/dist/color.global.legacy.min.js.map +1 -0
- package/lib/colorjs.io/dist/color.global.min.js +2 -0
- package/lib/colorjs.io/dist/color.global.min.js.map +1 -0
- package/lib/colorjs.io/dist/color.js +5755 -0
- package/lib/colorjs.io/dist/color.js.map +1 -0
- package/lib/colorjs.io/dist/color.legacy.cjs +7399 -0
- package/lib/colorjs.io/dist/color.legacy.cjs.map +1 -0
- package/lib/colorjs.io/dist/color.legacy.js +7395 -0
- package/lib/colorjs.io/dist/color.legacy.js.map +1 -0
- package/lib/colorjs.io/dist/color.legacy.min.cjs +2 -0
- package/lib/colorjs.io/dist/color.legacy.min.cjs.map +1 -0
- package/lib/colorjs.io/dist/color.legacy.min.js +2 -0
- package/lib/colorjs.io/dist/color.legacy.min.js.map +1 -0
- package/lib/colorjs.io/dist/color.min.cjs +2 -0
- package/lib/colorjs.io/dist/color.min.cjs.map +1 -0
- package/lib/colorjs.io/dist/color.min.js +2 -0
- package/lib/colorjs.io/dist/color.min.js.map +1 -0
- package/lib/colorjs.io/package.json +113 -0
- package/lib/colorjs.io/src/CATs.js +131 -0
- package/lib/colorjs.io/src/adapt.js +62 -0
- package/lib/colorjs.io/src/angles.js +44 -0
- package/lib/colorjs.io/src/chromaticity.js +33 -0
- package/lib/colorjs.io/src/clone.js +7 -0
- package/lib/colorjs.io/src/color.js +201 -0
- package/lib/colorjs.io/src/contrast/APCA.js +102 -0
- package/lib/colorjs.io/src/contrast/Lstar.js +17 -0
- package/lib/colorjs.io/src/contrast/Michelson.js +22 -0
- package/lib/colorjs.io/src/contrast/WCAG21.js +20 -0
- package/lib/colorjs.io/src/contrast/Weber.js +27 -0
- package/lib/colorjs.io/src/contrast/deltaPhi.js +25 -0
- package/lib/colorjs.io/src/contrast/index.js +6 -0
- package/lib/colorjs.io/src/contrast.js +28 -0
- package/lib/colorjs.io/src/defaults.js +12 -0
- package/lib/colorjs.io/src/deltaE/deltaE2000.js +179 -0
- package/lib/colorjs.io/src/deltaE/deltaE76.js +7 -0
- package/lib/colorjs.io/src/deltaE/deltaECMC.js +114 -0
- package/lib/colorjs.io/src/deltaE/deltaEHCT.js +51 -0
- package/lib/colorjs.io/src/deltaE/deltaEITP.js +24 -0
- package/lib/colorjs.io/src/deltaE/deltaEJz.js +43 -0
- package/lib/colorjs.io/src/deltaE/deltaEOK.js +19 -0
- package/lib/colorjs.io/src/deltaE/index.js +27 -0
- package/lib/colorjs.io/src/deltaE.js +19 -0
- package/lib/colorjs.io/src/display.js +83 -0
- package/lib/colorjs.io/src/distance.js +21 -0
- package/lib/colorjs.io/src/equals.js +10 -0
- package/lib/colorjs.io/src/get.js +11 -0
- package/lib/colorjs.io/src/getAll.js +20 -0
- package/lib/colorjs.io/src/getColor.js +36 -0
- package/lib/colorjs.io/src/hooks.js +37 -0
- package/lib/colorjs.io/src/inGamut.js +25 -0
- package/lib/colorjs.io/src/index-fn.js +28 -0
- package/lib/colorjs.io/src/index.js +38 -0
- package/lib/colorjs.io/src/interpolation.js +222 -0
- package/lib/colorjs.io/src/keywords.js +158 -0
- package/lib/colorjs.io/src/luminance.js +27 -0
- package/lib/colorjs.io/src/multiply-matrices.js +44 -0
- package/lib/colorjs.io/src/parse.js +198 -0
- package/lib/colorjs.io/src/rgbspace.js +64 -0
- package/lib/colorjs.io/src/serialize.js +86 -0
- package/lib/colorjs.io/src/set.js +33 -0
- package/lib/colorjs.io/src/setAll.js +12 -0
- package/lib/colorjs.io/src/space-accessors.js +86 -0
- package/lib/colorjs.io/src/space.js +440 -0
- package/lib/colorjs.io/src/spaces/a98rgb-linear.js +28 -0
- package/lib/colorjs.io/src/spaces/a98rgb.js +11 -0
- package/lib/colorjs.io/src/spaces/acescc.js +76 -0
- package/lib/colorjs.io/src/spaces/acescg.js +54 -0
- package/lib/colorjs.io/src/spaces/cam16.js +362 -0
- package/lib/colorjs.io/src/spaces/hct.js +157 -0
- package/lib/colorjs.io/src/spaces/hpluv.js +130 -0
- package/lib/colorjs.io/src/spaces/hsl.js +91 -0
- package/lib/colorjs.io/src/spaces/hsluv.js +162 -0
- package/lib/colorjs.io/src/spaces/hsv.js +65 -0
- package/lib/colorjs.io/src/spaces/hwb.js +58 -0
- package/lib/colorjs.io/src/spaces/ictcp.js +133 -0
- package/lib/colorjs.io/src/spaces/index-fn-hdr.js +7 -0
- package/lib/colorjs.io/src/spaces/index-fn.js +29 -0
- package/lib/colorjs.io/src/spaces/index.js +8 -0
- package/lib/colorjs.io/src/spaces/jzazbz.js +118 -0
- package/lib/colorjs.io/src/spaces/jzczhz.js +53 -0
- package/lib/colorjs.io/src/spaces/lab-d65.js +74 -0
- package/lib/colorjs.io/src/spaces/lab.js +74 -0
- package/lib/colorjs.io/src/spaces/lch.js +67 -0
- package/lib/colorjs.io/src/spaces/lchuv.js +68 -0
- package/lib/colorjs.io/src/spaces/luv.js +85 -0
- package/lib/colorjs.io/src/spaces/oklab.js +74 -0
- package/lib/colorjs.io/src/spaces/oklch.js +68 -0
- package/lib/colorjs.io/src/spaces/p3-linear.js +22 -0
- package/lib/colorjs.io/src/spaces/p3.js +13 -0
- package/lib/colorjs.io/src/spaces/prophoto-linear.js +28 -0
- package/lib/colorjs.io/src/spaces/prophoto.js +19 -0
- package/lib/colorjs.io/src/spaces/rec2020-linear.js +27 -0
- package/lib/colorjs.io/src/spaces/rec2020.js +31 -0
- package/lib/colorjs.io/src/spaces/rec2100-hlg.js +49 -0
- package/lib/colorjs.io/src/spaces/rec2100-pq.js +37 -0
- package/lib/colorjs.io/src/spaces/srgb-linear.js +30 -0
- package/lib/colorjs.io/src/spaces/srgb.js +127 -0
- package/lib/colorjs.io/src/spaces/xyz-abs-d65.js +40 -0
- package/lib/colorjs.io/src/spaces/xyz-d50.js +12 -0
- package/lib/colorjs.io/src/spaces/xyz-d65.js +18 -0
- package/lib/colorjs.io/src/to.js +26 -0
- package/lib/colorjs.io/src/toGamut.js +310 -0
- package/lib/colorjs.io/src/util.js +254 -0
- package/lib/colorjs.io/src/variations.js +14 -0
- package/lib/colorjs.io/types/index.d.cts +4 -0
- package/lib/colorjs.io/types/index.d.ts +42 -0
- package/lib/colorjs.io/types/src/CATs.d.ts +13 -0
- package/lib/colorjs.io/types/src/adapt.d.ts +12 -0
- package/lib/colorjs.io/types/src/angles.d.ts +7 -0
- package/lib/colorjs.io/types/src/chromaticity.d.ts +7 -0
- package/lib/colorjs.io/types/src/clone.d.ts +3 -0
- package/lib/colorjs.io/types/src/color.d.ts +160 -0
- package/lib/colorjs.io/types/src/contrast/APCA.d.ts +5 -0
- package/lib/colorjs.io/types/src/contrast/Lstar.d.ts +5 -0
- package/lib/colorjs.io/types/src/contrast/Michelson.d.ts +5 -0
- package/lib/colorjs.io/types/src/contrast/WCAG21.d.ts +5 -0
- package/lib/colorjs.io/types/src/contrast/Weber.d.ts +5 -0
- package/lib/colorjs.io/types/src/contrast/deltaPhi.d.ts +5 -0
- package/lib/colorjs.io/types/src/contrast/index.d.ts +11 -0
- package/lib/colorjs.io/types/src/contrast.d.ts +12 -0
- package/lib/colorjs.io/types/src/defaults.d.ts +2 -0
- package/lib/colorjs.io/types/src/deltaE/deltaE2000.d.ts +11 -0
- package/lib/colorjs.io/types/src/deltaE/deltaE76.d.ts +5 -0
- package/lib/colorjs.io/types/src/deltaE/deltaECMC.d.ts +9 -0
- package/lib/colorjs.io/types/src/deltaE/deltaEHCT.d.ts +5 -0
- package/lib/colorjs.io/types/src/deltaE/deltaEITP.d.ts +5 -0
- package/lib/colorjs.io/types/src/deltaE/deltaEJz.d.ts +5 -0
- package/lib/colorjs.io/types/src/deltaE/deltaEOK.d.ts +5 -0
- package/lib/colorjs.io/types/src/deltaE/index.d.ts +14 -0
- package/lib/colorjs.io/types/src/deltaE.d.ts +12 -0
- package/lib/colorjs.io/types/src/display.d.ts +17 -0
- package/lib/colorjs.io/types/src/distance.d.ts +8 -0
- package/lib/colorjs.io/types/src/equals.d.ts +3 -0
- package/lib/colorjs.io/types/src/get.d.ts +4 -0
- package/lib/colorjs.io/types/src/getAll.d.ts +7 -0
- package/lib/colorjs.io/types/src/getColor.d.ts +4 -0
- package/lib/colorjs.io/types/src/hooks.d.ts +52 -0
- package/lib/colorjs.io/types/src/inGamut.d.ts +8 -0
- package/lib/colorjs.io/types/src/index-fn.d.cts +1 -0
- package/lib/colorjs.io/types/src/index-fn.d.ts +63 -0
- package/lib/colorjs.io/types/src/index.d.ts +125 -0
- package/lib/colorjs.io/types/src/interpolation.d.ts +77 -0
- package/lib/colorjs.io/types/src/keywords.d.ts +2 -0
- package/lib/colorjs.io/types/src/luminance.d.ts +10 -0
- package/lib/colorjs.io/types/src/multiply-matrices.d.ts +9 -0
- package/lib/colorjs.io/types/src/parse.d.ts +16 -0
- package/lib/colorjs.io/types/src/rgbspace.d.ts +10 -0
- package/lib/colorjs.io/types/src/serialize.d.ts +13 -0
- package/lib/colorjs.io/types/src/set.d.ts +18 -0
- package/lib/colorjs.io/types/src/setAll.d.ts +14 -0
- package/lib/colorjs.io/types/src/space-accessors.d.ts +1 -0
- package/lib/colorjs.io/types/src/space-coord-accessors.d.ts +69 -0
- package/lib/colorjs.io/types/src/space.d.ts +143 -0
- package/lib/colorjs.io/types/src/spaces/a98rgb-linear.d.ts +3 -0
- package/lib/colorjs.io/types/src/spaces/a98rgb.d.ts +3 -0
- package/lib/colorjs.io/types/src/spaces/acescc.d.ts +3 -0
- package/lib/colorjs.io/types/src/spaces/acescg.d.ts +3 -0
- package/lib/colorjs.io/types/src/spaces/hpluv.d.ts +3 -0
- package/lib/colorjs.io/types/src/spaces/hsl.d.ts +3 -0
- package/lib/colorjs.io/types/src/spaces/hsluv.d.ts +3 -0
- package/lib/colorjs.io/types/src/spaces/hsv.d.ts +3 -0
- package/lib/colorjs.io/types/src/spaces/hwb.d.ts +3 -0
- package/lib/colorjs.io/types/src/spaces/ictcp.d.ts +3 -0
- package/lib/colorjs.io/types/src/spaces/index-fn-hdr.d.ts +9 -0
- package/lib/colorjs.io/types/src/spaces/index-fn.d.ts +29 -0
- package/lib/colorjs.io/types/src/spaces/index.d.ts +4 -0
- package/lib/colorjs.io/types/src/spaces/jzazbz.d.ts +3 -0
- package/lib/colorjs.io/types/src/spaces/jzczhz.d.ts +3 -0
- package/lib/colorjs.io/types/src/spaces/lab-d65.d.ts +3 -0
- package/lib/colorjs.io/types/src/spaces/lab.d.ts +3 -0
- package/lib/colorjs.io/types/src/spaces/lch.d.ts +3 -0
- package/lib/colorjs.io/types/src/spaces/lchuv.d.ts +3 -0
- package/lib/colorjs.io/types/src/spaces/luv.d.ts +3 -0
- package/lib/colorjs.io/types/src/spaces/oklab.d.ts +3 -0
- package/lib/colorjs.io/types/src/spaces/oklch.d.ts +3 -0
- package/lib/colorjs.io/types/src/spaces/p3-linear.d.ts +3 -0
- package/lib/colorjs.io/types/src/spaces/p3.d.ts +3 -0
- package/lib/colorjs.io/types/src/spaces/prophoto-linear.d.ts +3 -0
- package/lib/colorjs.io/types/src/spaces/prophoto.d.ts +3 -0
- package/lib/colorjs.io/types/src/spaces/rec2020-linear.d.ts +3 -0
- package/lib/colorjs.io/types/src/spaces/rec2020.d.ts +3 -0
- package/lib/colorjs.io/types/src/spaces/rec2100-hlg.d.ts +3 -0
- package/lib/colorjs.io/types/src/spaces/rec2100-pq.d.ts +3 -0
- package/lib/colorjs.io/types/src/spaces/srgb-linear.d.ts +3 -0
- package/lib/colorjs.io/types/src/spaces/srgb.d.ts +3 -0
- package/lib/colorjs.io/types/src/spaces/xyz-abs-d65.d.ts +3 -0
- package/lib/colorjs.io/types/src/spaces/xyz-d50.d.ts +3 -0
- package/lib/colorjs.io/types/src/spaces/xyz-d65.d.ts +3 -0
- package/lib/colorjs.io/types/src/to.d.ts +14 -0
- package/lib/colorjs.io/types/src/toGamut.d.ts +45 -0
- package/lib/colorjs.io/types/src/util.d.ts +58 -0
- package/lib/colorjs.io/types/src/variations.d.ts +5 -0
- package/logo.svg +159 -0
- package/package.json +41 -0
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import ColorSpace from "../space.js";
|
|
2
|
+
import Jzazbz from "./jzazbz.js";
|
|
3
|
+
import {constrain as constrainAngle} from "../angles.js";
|
|
4
|
+
|
|
5
|
+
export default new ColorSpace({
|
|
6
|
+
id: "jzczhz",
|
|
7
|
+
name: "JzCzHz",
|
|
8
|
+
coords: {
|
|
9
|
+
jz: {
|
|
10
|
+
refRange: [0, 1],
|
|
11
|
+
name: "Jz",
|
|
12
|
+
},
|
|
13
|
+
cz: {
|
|
14
|
+
refRange: [0, 1],
|
|
15
|
+
name: "Chroma",
|
|
16
|
+
},
|
|
17
|
+
hz: {
|
|
18
|
+
refRange: [0, 360],
|
|
19
|
+
type: "angle",
|
|
20
|
+
name: "Hue",
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
|
|
24
|
+
base: Jzazbz,
|
|
25
|
+
fromBase (jzazbz) {
|
|
26
|
+
// Convert to polar form
|
|
27
|
+
let [Jz, az, bz] = jzazbz;
|
|
28
|
+
let hue;
|
|
29
|
+
const ε = 0.0002; // chromatic components much smaller than a,b
|
|
30
|
+
|
|
31
|
+
if (Math.abs(az) < ε && Math.abs(bz) < ε) {
|
|
32
|
+
hue = NaN;
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
hue = Math.atan2(bz, az) * 180 / Math.PI;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
return [
|
|
39
|
+
Jz, // Jz is still Jz
|
|
40
|
+
Math.sqrt(az ** 2 + bz ** 2), // Chroma
|
|
41
|
+
constrainAngle(hue), // Hue, in degrees [0 to 360)
|
|
42
|
+
];
|
|
43
|
+
},
|
|
44
|
+
toBase (jzczhz) {
|
|
45
|
+
// Convert from polar form
|
|
46
|
+
// debugger;
|
|
47
|
+
return [
|
|
48
|
+
jzczhz[0], // Jz is still Jz
|
|
49
|
+
jzczhz[1] * Math.cos(jzczhz[2] * Math.PI / 180), // az
|
|
50
|
+
jzczhz[1] * Math.sin(jzczhz[2] * Math.PI / 180), // bz
|
|
51
|
+
];
|
|
52
|
+
},
|
|
53
|
+
});
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import ColorSpace from "../space.js";
|
|
2
|
+
import {WHITES} from "../adapt.js";
|
|
3
|
+
import xyz_d65 from "./xyz-d65.js";
|
|
4
|
+
|
|
5
|
+
// κ * ε = 2^3 = 8
|
|
6
|
+
const ε = 216 / 24389; // 6^3/29^3 == (24/116)^3
|
|
7
|
+
const ε3 = 24 / 116;
|
|
8
|
+
const κ = 24389 / 27; // 29^3/3^3
|
|
9
|
+
|
|
10
|
+
let white = WHITES.D65;
|
|
11
|
+
|
|
12
|
+
export default new ColorSpace({
|
|
13
|
+
id: "lab-d65",
|
|
14
|
+
name: "Lab D65",
|
|
15
|
+
coords: {
|
|
16
|
+
l: {
|
|
17
|
+
refRange: [0, 100],
|
|
18
|
+
name: "Lightness",
|
|
19
|
+
},
|
|
20
|
+
a: {
|
|
21
|
+
refRange: [-125, 125],
|
|
22
|
+
},
|
|
23
|
+
b: {
|
|
24
|
+
refRange: [-125, 125],
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
|
|
28
|
+
// Assuming XYZ is relative to D65, convert to CIE Lab
|
|
29
|
+
// from CIE standard, which now defines these as a rational fraction
|
|
30
|
+
white,
|
|
31
|
+
|
|
32
|
+
base: xyz_d65,
|
|
33
|
+
// Convert D65-adapted XYZ to Lab
|
|
34
|
+
// CIE 15.3:2004 section 8.2.1.1
|
|
35
|
+
fromBase (XYZ) {
|
|
36
|
+
// compute xyz, which is XYZ scaled relative to reference white
|
|
37
|
+
let xyz = XYZ.map((value, i) => value / white[i]);
|
|
38
|
+
|
|
39
|
+
// now compute f
|
|
40
|
+
let f = xyz.map(value => value > ε ? Math.cbrt(value) : (κ * value + 16) / 116);
|
|
41
|
+
|
|
42
|
+
return [
|
|
43
|
+
(116 * f[1]) - 16, // L
|
|
44
|
+
500 * (f[0] - f[1]), // a
|
|
45
|
+
200 * (f[1] - f[2]), // b
|
|
46
|
+
];
|
|
47
|
+
},
|
|
48
|
+
// Convert Lab to D65-adapted XYZ
|
|
49
|
+
// Same result as CIE 15.3:2004 Appendix D although the derivation is different
|
|
50
|
+
// http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html
|
|
51
|
+
toBase (Lab) {
|
|
52
|
+
// compute f, starting with the luminance-related term
|
|
53
|
+
let f = [];
|
|
54
|
+
f[1] = (Lab[0] + 16) / 116;
|
|
55
|
+
f[0] = Lab[1] / 500 + f[1];
|
|
56
|
+
f[2] = f[1] - Lab[2] / 200;
|
|
57
|
+
|
|
58
|
+
// compute xyz
|
|
59
|
+
let xyz = [
|
|
60
|
+
f[0] > ε3 ? Math.pow(f[0], 3) : (116 * f[0] - 16) / κ,
|
|
61
|
+
Lab[0] > 8 ? Math.pow((Lab[0] + 16) / 116, 3) : Lab[0] / κ,
|
|
62
|
+
f[2] > ε3 ? Math.pow(f[2], 3) : (116 * f[2] - 16) / κ,
|
|
63
|
+
];
|
|
64
|
+
|
|
65
|
+
// Compute XYZ by scaling xyz by reference white
|
|
66
|
+
return xyz.map((value, i) => value * white[i]);
|
|
67
|
+
},
|
|
68
|
+
|
|
69
|
+
formats: {
|
|
70
|
+
"lab-d65": {
|
|
71
|
+
coords: ["<number> | <percentage>", "<number> | <percentage>[-1,1]", "<number> | <percentage>[-1,1]"],
|
|
72
|
+
},
|
|
73
|
+
},
|
|
74
|
+
});
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import ColorSpace from "../space.js";
|
|
2
|
+
import {WHITES} from "../adapt.js";
|
|
3
|
+
import xyz_d50 from "./xyz-d50.js";
|
|
4
|
+
|
|
5
|
+
// κ * ε = 2^3 = 8
|
|
6
|
+
const ε = 216 / 24389; // 6^3/29^3 == (24/116)^3
|
|
7
|
+
const ε3 = 24 / 116;
|
|
8
|
+
const κ = 24389 / 27; // 29^3/3^3
|
|
9
|
+
|
|
10
|
+
let white = WHITES.D50;
|
|
11
|
+
|
|
12
|
+
export default new ColorSpace({
|
|
13
|
+
id: "lab",
|
|
14
|
+
name: "Lab",
|
|
15
|
+
coords: {
|
|
16
|
+
l: {
|
|
17
|
+
refRange: [0, 100],
|
|
18
|
+
name: "Lightness",
|
|
19
|
+
},
|
|
20
|
+
a: {
|
|
21
|
+
refRange: [-125, 125],
|
|
22
|
+
},
|
|
23
|
+
b: {
|
|
24
|
+
refRange: [-125, 125],
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
|
|
28
|
+
// Assuming XYZ is relative to D50, convert to CIE Lab
|
|
29
|
+
// from CIE standard, which now defines these as a rational fraction
|
|
30
|
+
white,
|
|
31
|
+
|
|
32
|
+
base: xyz_d50,
|
|
33
|
+
// Convert D50-adapted XYX to Lab
|
|
34
|
+
// CIE 15.3:2004 section 8.2.1.1
|
|
35
|
+
fromBase (XYZ) {
|
|
36
|
+
// compute xyz, which is XYZ scaled relative to reference white
|
|
37
|
+
let xyz = XYZ.map((value, i) => value / white[i]);
|
|
38
|
+
|
|
39
|
+
// now compute f
|
|
40
|
+
let f = xyz.map(value => value > ε ? Math.cbrt(value) : (κ * value + 16) / 116);
|
|
41
|
+
|
|
42
|
+
return [
|
|
43
|
+
(116 * f[1]) - 16, // L
|
|
44
|
+
500 * (f[0] - f[1]), // a
|
|
45
|
+
200 * (f[1] - f[2]), // b
|
|
46
|
+
];
|
|
47
|
+
},
|
|
48
|
+
// Convert Lab to D50-adapted XYZ
|
|
49
|
+
// Same result as CIE 15.3:2004 Appendix D although the derivation is different
|
|
50
|
+
// http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html
|
|
51
|
+
toBase (Lab) {
|
|
52
|
+
// compute f, starting with the luminance-related term
|
|
53
|
+
let f = [];
|
|
54
|
+
f[1] = (Lab[0] + 16) / 116;
|
|
55
|
+
f[0] = Lab[1] / 500 + f[1];
|
|
56
|
+
f[2] = f[1] - Lab[2] / 200;
|
|
57
|
+
|
|
58
|
+
// compute xyz
|
|
59
|
+
let xyz = [
|
|
60
|
+
f[0] > ε3 ? Math.pow(f[0], 3) : (116 * f[0] - 16) / κ,
|
|
61
|
+
Lab[0] > 8 ? Math.pow((Lab[0] + 16) / 116, 3) : Lab[0] / κ,
|
|
62
|
+
f[2] > ε3 ? Math.pow(f[2], 3) : (116 * f[2] - 16) / κ,
|
|
63
|
+
];
|
|
64
|
+
|
|
65
|
+
// Compute XYZ by scaling xyz by reference white
|
|
66
|
+
return xyz.map((value, i) => value * white[i]);
|
|
67
|
+
},
|
|
68
|
+
|
|
69
|
+
formats: {
|
|
70
|
+
"lab": {
|
|
71
|
+
coords: ["<number> | <percentage>", "<number> | <percentage>[-1,1]", "<number> | <percentage>[-1,1]"],
|
|
72
|
+
},
|
|
73
|
+
},
|
|
74
|
+
});
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import ColorSpace from "../space.js";
|
|
2
|
+
import Lab from "./lab.js";
|
|
3
|
+
import {constrain as constrainAngle} from "../angles.js";
|
|
4
|
+
|
|
5
|
+
export default new ColorSpace({
|
|
6
|
+
id: "lch",
|
|
7
|
+
name: "LCH",
|
|
8
|
+
coords: {
|
|
9
|
+
l: {
|
|
10
|
+
refRange: [0, 100],
|
|
11
|
+
name: "Lightness",
|
|
12
|
+
},
|
|
13
|
+
c: {
|
|
14
|
+
refRange: [0, 150],
|
|
15
|
+
name: "Chroma",
|
|
16
|
+
},
|
|
17
|
+
h: {
|
|
18
|
+
refRange: [0, 360],
|
|
19
|
+
type: "angle",
|
|
20
|
+
name: "Hue",
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
|
|
24
|
+
base: Lab,
|
|
25
|
+
fromBase (Lab) {
|
|
26
|
+
// Convert to polar form
|
|
27
|
+
let [L, a, b] = Lab;
|
|
28
|
+
let hue;
|
|
29
|
+
const ε = 0.02;
|
|
30
|
+
|
|
31
|
+
if (Math.abs(a) < ε && Math.abs(b) < ε) {
|
|
32
|
+
hue = NaN;
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
hue = Math.atan2(b, a) * 180 / Math.PI;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
return [
|
|
39
|
+
L, // L is still L
|
|
40
|
+
Math.sqrt(a ** 2 + b ** 2), // Chroma
|
|
41
|
+
constrainAngle(hue), // Hue, in degrees [0 to 360)
|
|
42
|
+
];
|
|
43
|
+
},
|
|
44
|
+
toBase (LCH) {
|
|
45
|
+
// Convert from polar form
|
|
46
|
+
let [Lightness, Chroma, Hue] = LCH;
|
|
47
|
+
// Clamp any negative Chroma
|
|
48
|
+
if (Chroma < 0) {
|
|
49
|
+
Chroma = 0;
|
|
50
|
+
}
|
|
51
|
+
// Deal with NaN Hue
|
|
52
|
+
if (isNaN(Hue)) {
|
|
53
|
+
Hue = 0;
|
|
54
|
+
}
|
|
55
|
+
return [
|
|
56
|
+
Lightness, // L is still L
|
|
57
|
+
Chroma * Math.cos(Hue * Math.PI / 180), // a
|
|
58
|
+
Chroma * Math.sin(Hue * Math.PI / 180), // b
|
|
59
|
+
];
|
|
60
|
+
},
|
|
61
|
+
|
|
62
|
+
formats: {
|
|
63
|
+
"lch": {
|
|
64
|
+
coords: ["<number> | <percentage>", "<number> | <percentage>", "<number> | <angle>"],
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
});
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import ColorSpace from "../space.js";
|
|
2
|
+
import Luv from "./luv.js";
|
|
3
|
+
import {constrain as constrainAngle} from "../angles.js";
|
|
4
|
+
|
|
5
|
+
export default new ColorSpace({
|
|
6
|
+
id: "lchuv",
|
|
7
|
+
name: "LChuv",
|
|
8
|
+
coords: {
|
|
9
|
+
l: {
|
|
10
|
+
refRange: [0, 100],
|
|
11
|
+
name: "Lightness",
|
|
12
|
+
},
|
|
13
|
+
c: {
|
|
14
|
+
refRange: [0, 220],
|
|
15
|
+
name: "Chroma",
|
|
16
|
+
},
|
|
17
|
+
h: {
|
|
18
|
+
refRange: [0, 360],
|
|
19
|
+
type: "angle",
|
|
20
|
+
name: "Hue",
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
|
|
24
|
+
base: Luv,
|
|
25
|
+
fromBase (Luv) {
|
|
26
|
+
// Convert to polar form
|
|
27
|
+
let [L, u, v] = Luv;
|
|
28
|
+
let hue;
|
|
29
|
+
const ε = 0.02;
|
|
30
|
+
|
|
31
|
+
if (Math.abs(u) < ε && Math.abs(v) < ε) {
|
|
32
|
+
hue = NaN;
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
hue = Math.atan2(v, u) * 180 / Math.PI;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
return [
|
|
39
|
+
L, // L is still L
|
|
40
|
+
Math.sqrt(u ** 2 + v ** 2), // Chroma
|
|
41
|
+
constrainAngle(hue), // Hue, in degrees [0 to 360)
|
|
42
|
+
];
|
|
43
|
+
},
|
|
44
|
+
toBase (LCH) {
|
|
45
|
+
// Convert from polar form
|
|
46
|
+
let [Lightness, Chroma, Hue] = LCH;
|
|
47
|
+
// Clamp any negative Chroma
|
|
48
|
+
if (Chroma < 0) {
|
|
49
|
+
Chroma = 0;
|
|
50
|
+
}
|
|
51
|
+
// Deal with NaN Hue
|
|
52
|
+
if (isNaN(Hue)) {
|
|
53
|
+
Hue = 0;
|
|
54
|
+
}
|
|
55
|
+
return [
|
|
56
|
+
Lightness, // L is still L
|
|
57
|
+
Chroma * Math.cos(Hue * Math.PI / 180), // u
|
|
58
|
+
Chroma * Math.sin(Hue * Math.PI / 180), // v
|
|
59
|
+
];
|
|
60
|
+
},
|
|
61
|
+
|
|
62
|
+
formats: {
|
|
63
|
+
color: {
|
|
64
|
+
id: "--lchuv",
|
|
65
|
+
coords: ["<number> | <percentage>", "<number> | <percentage>", "<number> | <angle>"],
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
});
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import ColorSpace from "../space.js";
|
|
2
|
+
import {WHITES} from "../adapt.js";
|
|
3
|
+
import xyz_d65 from "./xyz-d65.js";
|
|
4
|
+
import {uv} from "../chromaticity.js";
|
|
5
|
+
import {isNone, skipNone} from "../util.js";
|
|
6
|
+
|
|
7
|
+
let white = WHITES.D65;
|
|
8
|
+
|
|
9
|
+
const ε = 216 / 24389; // 6^3/29^3 == (24/116)^3
|
|
10
|
+
const κ = 24389 / 27; // 29^3/3^3
|
|
11
|
+
const [U_PRIME_WHITE, V_PRIME_WHITE] = uv({space: xyz_d65, coords: white});
|
|
12
|
+
|
|
13
|
+
export default new ColorSpace({
|
|
14
|
+
id: "luv",
|
|
15
|
+
name: "Luv",
|
|
16
|
+
coords: {
|
|
17
|
+
l: {
|
|
18
|
+
refRange: [0, 100],
|
|
19
|
+
name: "Lightness",
|
|
20
|
+
},
|
|
21
|
+
// Reference ranges from https://facelessuser.github.io/coloraide/colors/luv/
|
|
22
|
+
u: {
|
|
23
|
+
refRange: [-215, 215],
|
|
24
|
+
},
|
|
25
|
+
v: {
|
|
26
|
+
refRange: [-215, 215],
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
|
|
30
|
+
white: white,
|
|
31
|
+
base: xyz_d65,
|
|
32
|
+
|
|
33
|
+
// Convert D65-adapted XYZ to Luv
|
|
34
|
+
// https://en.wikipedia.org/wiki/CIELUV#The_forward_transformation
|
|
35
|
+
fromBase (XYZ) {
|
|
36
|
+
let xyz = [skipNone(XYZ[0]), skipNone(XYZ[1]), skipNone(XYZ[2])];
|
|
37
|
+
let y = xyz[1];
|
|
38
|
+
|
|
39
|
+
let [up, vp] = uv({space: xyz_d65, coords: xyz});
|
|
40
|
+
|
|
41
|
+
// Protect against XYZ of [0, 0, 0]
|
|
42
|
+
if (!Number.isFinite(up) || !Number.isFinite(vp)) {
|
|
43
|
+
return [0, 0, 0];
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
let L = y <= ε ? κ * y : 116 * Math.cbrt(y) - 16;
|
|
47
|
+
return [
|
|
48
|
+
L,
|
|
49
|
+
13 * L * (up - U_PRIME_WHITE),
|
|
50
|
+
13 * L * (vp - V_PRIME_WHITE),
|
|
51
|
+
];
|
|
52
|
+
},
|
|
53
|
+
|
|
54
|
+
// Convert Luv to D65-adapted XYZ
|
|
55
|
+
// https://en.wikipedia.org/wiki/CIELUV#The_reverse_transformation
|
|
56
|
+
toBase (Luv) {
|
|
57
|
+
let [L, u, v] = Luv;
|
|
58
|
+
|
|
59
|
+
// Protect against division by zero and NaN Lightness
|
|
60
|
+
if (L === 0 || isNone(L)) {
|
|
61
|
+
return [0, 0, 0];
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
u = skipNone(u);
|
|
65
|
+
v = skipNone(v);
|
|
66
|
+
|
|
67
|
+
let up = (u / (13 * L)) + U_PRIME_WHITE;
|
|
68
|
+
let vp = (v / (13 * L)) + V_PRIME_WHITE;
|
|
69
|
+
|
|
70
|
+
let y = L <= 8 ? L / κ : Math.pow((L + 16) / 116, 3);
|
|
71
|
+
|
|
72
|
+
return [
|
|
73
|
+
y * ((9 * up) / (4 * vp)),
|
|
74
|
+
y,
|
|
75
|
+
y * ((12 - 3 * up - 20 * vp) / (4 * vp)),
|
|
76
|
+
];
|
|
77
|
+
},
|
|
78
|
+
|
|
79
|
+
formats: {
|
|
80
|
+
color: {
|
|
81
|
+
id: "--luv",
|
|
82
|
+
coords: ["<number> | <percentage>", "<number> | <percentage>[-1,1]", "<number> | <percentage>[-1,1]"],
|
|
83
|
+
},
|
|
84
|
+
},
|
|
85
|
+
});
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import ColorSpace from "../space.js";
|
|
2
|
+
import {multiplyMatrices} from "../util.js";
|
|
3
|
+
import XYZ_D65 from "./xyz-d65.js";
|
|
4
|
+
|
|
5
|
+
// Recalculated for consistent reference white
|
|
6
|
+
// see https://github.com/w3c/csswg-drafts/issues/6642#issuecomment-943521484
|
|
7
|
+
const XYZtoLMS_M = [
|
|
8
|
+
[ 0.8190224379967030, 0.3619062600528904, -0.1288737815209879 ],
|
|
9
|
+
[ 0.0329836539323885, 0.9292868615863434, 0.0361446663506424 ],
|
|
10
|
+
[ 0.0481771893596242, 0.2642395317527308, 0.6335478284694309 ],
|
|
11
|
+
];
|
|
12
|
+
// inverse of XYZtoLMS_M
|
|
13
|
+
const LMStoXYZ_M = [
|
|
14
|
+
[ 1.2268798758459243, -0.5578149944602171, 0.2813910456659647 ],
|
|
15
|
+
[ -0.0405757452148008, 1.1122868032803170, -0.0717110580655164 ],
|
|
16
|
+
[ -0.0763729366746601, -0.4214933324022432, 1.5869240198367816 ],
|
|
17
|
+
];
|
|
18
|
+
const LMStoLab_M = [
|
|
19
|
+
[ 0.2104542683093140, 0.7936177747023054, -0.0040720430116193 ],
|
|
20
|
+
[ 1.9779985324311684, -2.4285922420485799, 0.4505937096174110 ],
|
|
21
|
+
[ 0.0259040424655478, 0.7827717124575296, -0.8086757549230774 ],
|
|
22
|
+
];
|
|
23
|
+
// LMStoIab_M inverted
|
|
24
|
+
const LabtoLMS_M = [
|
|
25
|
+
[ 1.0000000000000000, 0.3963377773761749, 0.2158037573099136 ],
|
|
26
|
+
[ 1.0000000000000000, -0.1055613458156586, -0.0638541728258133 ],
|
|
27
|
+
[ 1.0000000000000000, -0.0894841775298119, -1.2914855480194092 ],
|
|
28
|
+
];
|
|
29
|
+
|
|
30
|
+
export default new ColorSpace({
|
|
31
|
+
id: "oklab",
|
|
32
|
+
name: "Oklab",
|
|
33
|
+
coords: {
|
|
34
|
+
l: {
|
|
35
|
+
refRange: [0, 1],
|
|
36
|
+
name: "Lightness",
|
|
37
|
+
},
|
|
38
|
+
a: {
|
|
39
|
+
refRange: [-0.4, 0.4],
|
|
40
|
+
},
|
|
41
|
+
b: {
|
|
42
|
+
refRange: [-0.4, 0.4],
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
|
|
46
|
+
// Note that XYZ is relative to D65
|
|
47
|
+
white: "D65",
|
|
48
|
+
base: XYZ_D65,
|
|
49
|
+
fromBase (XYZ) {
|
|
50
|
+
// move to LMS cone domain
|
|
51
|
+
let LMS = multiplyMatrices(XYZtoLMS_M, XYZ);
|
|
52
|
+
|
|
53
|
+
// non-linearity
|
|
54
|
+
let LMSg = LMS.map(val => Math.cbrt(val));
|
|
55
|
+
|
|
56
|
+
return multiplyMatrices(LMStoLab_M, LMSg);
|
|
57
|
+
|
|
58
|
+
},
|
|
59
|
+
toBase (OKLab) {
|
|
60
|
+
// move to LMS cone domain
|
|
61
|
+
let LMSg = multiplyMatrices(LabtoLMS_M, OKLab);
|
|
62
|
+
|
|
63
|
+
// restore linearity
|
|
64
|
+
let LMS = LMSg.map(val => val ** 3);
|
|
65
|
+
|
|
66
|
+
return multiplyMatrices(LMStoXYZ_M, LMS);
|
|
67
|
+
},
|
|
68
|
+
|
|
69
|
+
formats: {
|
|
70
|
+
"oklab": {
|
|
71
|
+
coords: ["<percentage> | <number>", "<number> | <percentage>[-1,1]", "<number> | <percentage>[-1,1]"],
|
|
72
|
+
},
|
|
73
|
+
},
|
|
74
|
+
});
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import ColorSpace from "../space.js";
|
|
2
|
+
import OKLab from "./oklab.js";
|
|
3
|
+
import {constrain as constrainAngle} from "../angles.js";
|
|
4
|
+
|
|
5
|
+
export default new ColorSpace({
|
|
6
|
+
id: "oklch",
|
|
7
|
+
name: "Oklch",
|
|
8
|
+
coords: {
|
|
9
|
+
l: {
|
|
10
|
+
refRange: [0, 1],
|
|
11
|
+
name: "Lightness",
|
|
12
|
+
},
|
|
13
|
+
c: {
|
|
14
|
+
refRange: [0, 0.4],
|
|
15
|
+
name: "Chroma",
|
|
16
|
+
},
|
|
17
|
+
h: {
|
|
18
|
+
refRange: [0, 360],
|
|
19
|
+
type: "angle",
|
|
20
|
+
name: "Hue",
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
white: "D65",
|
|
24
|
+
|
|
25
|
+
base: OKLab,
|
|
26
|
+
fromBase (oklab) {
|
|
27
|
+
// Convert to polar form
|
|
28
|
+
let [L, a, b] = oklab;
|
|
29
|
+
let h;
|
|
30
|
+
const ε = 0.0002; // chromatic components much smaller than a,b
|
|
31
|
+
|
|
32
|
+
if (Math.abs(a) < ε && Math.abs(b) < ε) {
|
|
33
|
+
h = NaN;
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
h = Math.atan2(b, a) * 180 / Math.PI;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
return [
|
|
40
|
+
L, // OKLab L is still L
|
|
41
|
+
Math.sqrt(a ** 2 + b ** 2), // Chroma
|
|
42
|
+
constrainAngle(h), // Hue, in degrees [0 to 360)
|
|
43
|
+
];
|
|
44
|
+
},
|
|
45
|
+
// Convert from polar form
|
|
46
|
+
toBase (oklch) {
|
|
47
|
+
let [L, C, h] = oklch;
|
|
48
|
+
let a, b;
|
|
49
|
+
|
|
50
|
+
// check for NaN hue
|
|
51
|
+
if (isNaN(h)) {
|
|
52
|
+
a = 0;
|
|
53
|
+
b = 0;
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
a = C * Math.cos(h * Math.PI / 180);
|
|
57
|
+
b = C * Math.sin(h * Math.PI / 180);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
return [ L, a, b ];
|
|
61
|
+
},
|
|
62
|
+
|
|
63
|
+
formats: {
|
|
64
|
+
"oklch": {
|
|
65
|
+
coords: ["<percentage> | <number>", "<number> | <percentage>[0,1]", "<number> | <angle>"],
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
});
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import RGBColorSpace from "../rgbspace.js";
|
|
2
|
+
|
|
3
|
+
const toXYZ_M = [
|
|
4
|
+
[0.4865709486482162, 0.26566769316909306, 0.1982172852343625],
|
|
5
|
+
[0.2289745640697488, 0.6917385218365064, 0.079286914093745],
|
|
6
|
+
[0.0000000000000000, 0.04511338185890264, 1.043944368900976],
|
|
7
|
+
];
|
|
8
|
+
|
|
9
|
+
const fromXYZ_M = [
|
|
10
|
+
[ 2.493496911941425, -0.9313836179191239, -0.40271078445071684],
|
|
11
|
+
[-0.8294889695615747, 1.7626640603183463, 0.023624685841943577],
|
|
12
|
+
[ 0.03584583024378447, -0.07617238926804182, 0.9568845240076872],
|
|
13
|
+
];
|
|
14
|
+
|
|
15
|
+
export default new RGBColorSpace({
|
|
16
|
+
id: "p3-linear",
|
|
17
|
+
cssId: "--display-p3-linear",
|
|
18
|
+
name: "Linear P3",
|
|
19
|
+
white: "D65",
|
|
20
|
+
toXYZ_M,
|
|
21
|
+
fromXYZ_M,
|
|
22
|
+
});
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import RGBColorSpace from "../rgbspace.js";
|
|
2
|
+
import P3Linear from "./p3-linear.js";
|
|
3
|
+
import sRGB from "./srgb.js";
|
|
4
|
+
|
|
5
|
+
export default new RGBColorSpace({
|
|
6
|
+
id: "p3",
|
|
7
|
+
cssId: "display-p3",
|
|
8
|
+
name: "P3",
|
|
9
|
+
base: P3Linear,
|
|
10
|
+
// Gamma encoding/decoding is the same as sRGB
|
|
11
|
+
fromBase: sRGB.fromBase,
|
|
12
|
+
toBase: sRGB.toBase,
|
|
13
|
+
});
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import RGBColorSpace from "../rgbspace.js";
|
|
2
|
+
import XYZ_D50 from "./xyz-d50.js";
|
|
3
|
+
|
|
4
|
+
// convert an array of prophoto-rgb values to CIE XYZ
|
|
5
|
+
// using D50 (so no chromatic adaptation needed afterwards)
|
|
6
|
+
// matrix cannot be expressed in rational form, but is calculated to 64 bit accuracy
|
|
7
|
+
// see https://github.com/w3c/csswg-drafts/issues/7675
|
|
8
|
+
const toXYZ_M = [
|
|
9
|
+
[ 0.79776664490064230, 0.13518129740053308, 0.03134773412839220 ],
|
|
10
|
+
[ 0.28807482881940130, 0.71183523424187300, 0.00008993693872564 ],
|
|
11
|
+
[ 0.00000000000000000, 0.00000000000000000, 0.82510460251046020 ],
|
|
12
|
+
];
|
|
13
|
+
|
|
14
|
+
const fromXYZ_M = [
|
|
15
|
+
[ 1.34578688164715830, -0.25557208737979464, -0.05110186497554526 ],
|
|
16
|
+
[ -0.54463070512490190, 1.50824774284514680, 0.02052744743642139 ],
|
|
17
|
+
[ 0.00000000000000000, 0.00000000000000000, 1.21196754563894520 ],
|
|
18
|
+
];
|
|
19
|
+
|
|
20
|
+
export default new RGBColorSpace({
|
|
21
|
+
id: "prophoto-linear",
|
|
22
|
+
cssId: "--prophoto-rgb-linear",
|
|
23
|
+
name: "Linear ProPhoto",
|
|
24
|
+
white: "D50",
|
|
25
|
+
base: XYZ_D50,
|
|
26
|
+
toXYZ_M,
|
|
27
|
+
fromXYZ_M,
|
|
28
|
+
});
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import RGBColorSpace from "../rgbspace.js";
|
|
2
|
+
import ProPhotoLinear from "./prophoto-linear.js";
|
|
3
|
+
|
|
4
|
+
const Et = 1 / 512;
|
|
5
|
+
const Et2 = 16 / 512;
|
|
6
|
+
|
|
7
|
+
export default new RGBColorSpace({
|
|
8
|
+
id: "prophoto",
|
|
9
|
+
cssId: "prophoto-rgb",
|
|
10
|
+
name: "ProPhoto",
|
|
11
|
+
base: ProPhotoLinear,
|
|
12
|
+
toBase (RGB) {
|
|
13
|
+
// Transfer curve is gamma 1.8 with a small linear portion
|
|
14
|
+
return RGB.map(v => v < Et2 ? v / 16 : v ** 1.8);
|
|
15
|
+
},
|
|
16
|
+
fromBase (RGB) {
|
|
17
|
+
return RGB.map(v => v >= Et ? v ** (1 / 1.8) : 16 * v);
|
|
18
|
+
},
|
|
19
|
+
});
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import RGBColorSpace from "../rgbspace.js";
|
|
2
|
+
|
|
3
|
+
// convert an array of linear-light rec2020 values to CIE XYZ
|
|
4
|
+
// using D65 (no chromatic adaptation)
|
|
5
|
+
// http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html
|
|
6
|
+
// 0 is actually calculated as 4.994106574466076e-17
|
|
7
|
+
const toXYZ_M = [
|
|
8
|
+
[ 0.6369580483012914, 0.14461690358620832, 0.1688809751641721 ],
|
|
9
|
+
[ 0.2627002120112671, 0.6779980715188708, 0.05930171646986196 ],
|
|
10
|
+
[ 0.000000000000000, 0.028072693049087428, 1.060985057710791 ],
|
|
11
|
+
];
|
|
12
|
+
|
|
13
|
+
// from ITU-R BT.2124-0 Annex 2 p.3
|
|
14
|
+
const fromXYZ_M = [
|
|
15
|
+
[ 1.716651187971268, -0.355670783776392, -0.253366281373660 ],
|
|
16
|
+
[ -0.666684351832489, 1.616481236634939, 0.0157685458139111 ],
|
|
17
|
+
[ 0.017639857445311, -0.042770613257809, 0.942103121235474 ],
|
|
18
|
+
];
|
|
19
|
+
|
|
20
|
+
export default new RGBColorSpace({
|
|
21
|
+
id: "rec2020-linear",
|
|
22
|
+
cssId: "--rec2020-linear",
|
|
23
|
+
name: "Linear REC.2020",
|
|
24
|
+
white: "D65",
|
|
25
|
+
toXYZ_M,
|
|
26
|
+
fromXYZ_M,
|
|
27
|
+
});
|