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,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;
|