color-elements 0.0.1 → 0.0.3
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 +49 -12
- package/_build/copy-config.js +11 -1
- package/_build/copy-config.json +2 -2
- package/_build/eleventy.js +27 -1
- package/_build/filters-extra.js +3 -0
- package/_includes/component.njk +69 -0
- package/_includes/partials/_nav-links.njk +19 -0
- package/_redirects +9 -2
- package/assets/css/style.css +78 -1
- package/assets/js/index.js +11 -10
- package/data/components.json +12 -0
- package/debug.html +447 -0
- package/eslint.config.js +316 -0
- package/index.js +10 -4
- package/logo.svg +22 -44
- package/package.json +12 -5
- package/src/channel-picker/README.md +103 -0
- package/src/channel-picker/channel-picker.css +31 -0
- package/src/channel-picker/channel-picker.js +168 -0
- package/src/channel-picker/channel-picker.webp +0 -0
- package/src/channel-slider/README.md +165 -0
- package/src/channel-slider/channel-slider.css +61 -0
- package/src/channel-slider/channel-slider.js +287 -0
- package/src/channel-slider/channel-slider.webp +0 -0
- package/src/color-chart/README.md +129 -0
- package/src/color-chart/color-chart-global.css +97 -0
- package/src/color-chart/color-chart.css +112 -0
- package/src/color-chart/color-chart.js +441 -0
- package/src/color-chart/color-chart.webp +0 -0
- package/src/color-inline/README.md +72 -0
- package/{color-swatch/color-swatch.css → src/color-inline/color-inline.css} +11 -4
- package/src/color-inline/color-inline.js +85 -0
- package/src/color-inline/color-inline.webp +0 -0
- package/src/color-inline/style.css +14 -0
- package/src/color-picker/README.md +150 -0
- package/src/color-picker/color-picker.css +35 -0
- package/src/color-picker/color-picker.js +251 -0
- package/src/color-picker/color-picker.webp +0 -0
- package/src/color-scale/README.md +75 -0
- package/src/color-scale/color-scale.css +40 -0
- package/src/color-scale/color-scale.js +164 -0
- package/src/color-scale/color-scale.webp +0 -0
- package/src/color-slider/README.md +220 -0
- package/src/color-slider/color-slider.css +174 -0
- package/src/color-slider/color-slider.js +320 -0
- package/src/color-slider/color-slider.webp +0 -0
- package/src/color-swatch/README.md +359 -0
- package/src/color-swatch/color-swatch.css +230 -0
- package/src/color-swatch/color-swatch.js +252 -0
- package/src/color-swatch/color-swatch.webp +0 -0
- package/src/common/color-element.js +86 -0
- package/src/common/dom.js +61 -0
- package/src/common/util.js +55 -0
- package/src/gamut-badge/README.md +145 -0
- package/src/gamut-badge/gamut-badge.css +78 -0
- package/src/gamut-badge/gamut-badge.js +121 -0
- package/src/gamut-badge/gamut-badge.webp +0 -0
- package/src/index.js.njk +7 -0
- package/src/space-picker/README.md +121 -0
- package/src/space-picker/space-picker.css +23 -0
- package/src/space-picker/space-picker.js +213 -0
- package/src/space-picker/space-picker.webp +0 -0
- package/src/src.json +3 -0
- package/_data/eleventyComputed.11tydata.js +0 -29
- package/color-gamut/README.md +0 -75
- package/color-gamut/color-gamut.js +0 -172
- package/color-gamut/style.css +0 -32
- package/color-slider/README.md +0 -84
- package/color-slider/color-slider.js +0 -79
- package/color-slider/style.css +0 -65
- package/color-swatch/color-swatch.js +0 -79
- package/color-swatch/index.njk +0 -40
- package/common/attributes.js +0 -68
- package/common/color.js +0 -10
- package/css-color/css-color.js +0 -256
- package/css-color/index.njk +0 -43
- package/css-color/style.css +0 -67
- package/lib/README.md +0 -4
- package/lib/colorjs.io/LICENSE +0 -21
- package/lib/colorjs.io/README.json +0 -3
- package/lib/colorjs.io/README.md +0 -257
- package/lib/colorjs.io/colorjs.io/LICENSE +0 -21
- package/lib/colorjs.io/colorjs.io/README.json +0 -3
- package/lib/colorjs.io/colorjs.io/README.md +0 -257
- package/lib/colorjs.io/colorjs.io/dist/color-fn.cjs +0 -5437
- package/lib/colorjs.io/colorjs.io/dist/color-fn.cjs.map +0 -1
- package/lib/colorjs.io/colorjs.io/dist/color-fn.legacy.cjs +0 -7048
- package/lib/colorjs.io/colorjs.io/dist/color-fn.legacy.cjs.map +0 -1
- package/lib/colorjs.io/colorjs.io/dist/color-fn.legacy.min.cjs +0 -2
- package/lib/colorjs.io/colorjs.io/dist/color-fn.legacy.min.cjs.map +0 -1
- package/lib/colorjs.io/colorjs.io/dist/color-fn.min.cjs +0 -2
- package/lib/colorjs.io/colorjs.io/dist/color-fn.min.cjs.map +0 -1
- package/lib/colorjs.io/colorjs.io/dist/color.cjs +0 -5759
- package/lib/colorjs.io/colorjs.io/dist/color.cjs.map +0 -1
- package/lib/colorjs.io/colorjs.io/dist/color.global.js +0 -5760
- package/lib/colorjs.io/colorjs.io/dist/color.global.js.map +0 -1
- package/lib/colorjs.io/colorjs.io/dist/color.global.legacy.js +0 -7400
- package/lib/colorjs.io/colorjs.io/dist/color.global.legacy.js.map +0 -1
- package/lib/colorjs.io/colorjs.io/dist/color.global.legacy.min.js +0 -2
- package/lib/colorjs.io/colorjs.io/dist/color.global.legacy.min.js.map +0 -1
- package/lib/colorjs.io/colorjs.io/dist/color.global.min.js +0 -2
- package/lib/colorjs.io/colorjs.io/dist/color.global.min.js.map +0 -1
- package/lib/colorjs.io/colorjs.io/dist/color.js +0 -5755
- package/lib/colorjs.io/colorjs.io/dist/color.js.map +0 -1
- package/lib/colorjs.io/colorjs.io/dist/color.legacy.cjs +0 -7399
- package/lib/colorjs.io/colorjs.io/dist/color.legacy.cjs.map +0 -1
- package/lib/colorjs.io/colorjs.io/dist/color.legacy.js +0 -7395
- package/lib/colorjs.io/colorjs.io/dist/color.legacy.js.map +0 -1
- package/lib/colorjs.io/colorjs.io/dist/color.legacy.min.cjs +0 -2
- package/lib/colorjs.io/colorjs.io/dist/color.legacy.min.cjs.map +0 -1
- package/lib/colorjs.io/colorjs.io/dist/color.legacy.min.js +0 -2
- package/lib/colorjs.io/colorjs.io/dist/color.legacy.min.js.map +0 -1
- package/lib/colorjs.io/colorjs.io/dist/color.min.cjs +0 -2
- package/lib/colorjs.io/colorjs.io/dist/color.min.cjs.map +0 -1
- package/lib/colorjs.io/colorjs.io/dist/color.min.js +0 -2
- package/lib/colorjs.io/colorjs.io/dist/color.min.js.map +0 -1
- package/lib/colorjs.io/colorjs.io/package.json +0 -113
- package/lib/colorjs.io/colorjs.io/src/CATs.js +0 -131
- package/lib/colorjs.io/colorjs.io/src/adapt.js +0 -62
- package/lib/colorjs.io/colorjs.io/src/angles.js +0 -44
- package/lib/colorjs.io/colorjs.io/src/chromaticity.js +0 -33
- package/lib/colorjs.io/colorjs.io/src/clone.js +0 -7
- package/lib/colorjs.io/colorjs.io/src/color.js +0 -201
- package/lib/colorjs.io/colorjs.io/src/contrast/APCA.js +0 -102
- package/lib/colorjs.io/colorjs.io/src/contrast/Lstar.js +0 -17
- package/lib/colorjs.io/colorjs.io/src/contrast/Michelson.js +0 -22
- package/lib/colorjs.io/colorjs.io/src/contrast/WCAG21.js +0 -20
- package/lib/colorjs.io/colorjs.io/src/contrast/Weber.js +0 -27
- package/lib/colorjs.io/colorjs.io/src/contrast/deltaPhi.js +0 -25
- package/lib/colorjs.io/colorjs.io/src/contrast/index.js +0 -6
- package/lib/colorjs.io/colorjs.io/src/contrast.js +0 -28
- package/lib/colorjs.io/colorjs.io/src/defaults.js +0 -12
- package/lib/colorjs.io/colorjs.io/src/deltaE/deltaE2000.js +0 -179
- package/lib/colorjs.io/colorjs.io/src/deltaE/deltaE76.js +0 -7
- package/lib/colorjs.io/colorjs.io/src/deltaE/deltaECMC.js +0 -114
- package/lib/colorjs.io/colorjs.io/src/deltaE/deltaEHCT.js +0 -51
- package/lib/colorjs.io/colorjs.io/src/deltaE/deltaEITP.js +0 -24
- package/lib/colorjs.io/colorjs.io/src/deltaE/deltaEJz.js +0 -43
- package/lib/colorjs.io/colorjs.io/src/deltaE/deltaEOK.js +0 -19
- package/lib/colorjs.io/colorjs.io/src/deltaE/index.js +0 -27
- package/lib/colorjs.io/colorjs.io/src/deltaE.js +0 -19
- package/lib/colorjs.io/colorjs.io/src/display.js +0 -83
- package/lib/colorjs.io/colorjs.io/src/distance.js +0 -21
- package/lib/colorjs.io/colorjs.io/src/equals.js +0 -10
- package/lib/colorjs.io/colorjs.io/src/get.js +0 -11
- package/lib/colorjs.io/colorjs.io/src/getAll.js +0 -20
- package/lib/colorjs.io/colorjs.io/src/getColor.js +0 -36
- package/lib/colorjs.io/colorjs.io/src/hooks.js +0 -37
- package/lib/colorjs.io/colorjs.io/src/inGamut.js +0 -25
- package/lib/colorjs.io/colorjs.io/src/index-fn.js +0 -28
- package/lib/colorjs.io/colorjs.io/src/index.js +0 -38
- package/lib/colorjs.io/colorjs.io/src/interpolation.js +0 -222
- package/lib/colorjs.io/colorjs.io/src/keywords.js +0 -158
- package/lib/colorjs.io/colorjs.io/src/luminance.js +0 -27
- package/lib/colorjs.io/colorjs.io/src/multiply-matrices.js +0 -44
- package/lib/colorjs.io/colorjs.io/src/parse.js +0 -198
- package/lib/colorjs.io/colorjs.io/src/rgbspace.js +0 -64
- package/lib/colorjs.io/colorjs.io/src/serialize.js +0 -86
- package/lib/colorjs.io/colorjs.io/src/set.js +0 -33
- package/lib/colorjs.io/colorjs.io/src/setAll.js +0 -12
- package/lib/colorjs.io/colorjs.io/src/space-accessors.js +0 -86
- package/lib/colorjs.io/colorjs.io/src/space.js +0 -440
- package/lib/colorjs.io/colorjs.io/src/spaces/a98rgb-linear.js +0 -28
- package/lib/colorjs.io/colorjs.io/src/spaces/a98rgb.js +0 -11
- package/lib/colorjs.io/colorjs.io/src/spaces/acescc.js +0 -76
- package/lib/colorjs.io/colorjs.io/src/spaces/acescg.js +0 -54
- package/lib/colorjs.io/colorjs.io/src/spaces/cam16.js +0 -362
- package/lib/colorjs.io/colorjs.io/src/spaces/hct.js +0 -157
- package/lib/colorjs.io/colorjs.io/src/spaces/hpluv.js +0 -130
- package/lib/colorjs.io/colorjs.io/src/spaces/hsl.js +0 -91
- package/lib/colorjs.io/colorjs.io/src/spaces/hsluv.js +0 -162
- package/lib/colorjs.io/colorjs.io/src/spaces/hsv.js +0 -65
- package/lib/colorjs.io/colorjs.io/src/spaces/hwb.js +0 -58
- package/lib/colorjs.io/colorjs.io/src/spaces/ictcp.js +0 -133
- package/lib/colorjs.io/colorjs.io/src/spaces/index-fn-hdr.js +0 -7
- package/lib/colorjs.io/colorjs.io/src/spaces/index-fn.js +0 -29
- package/lib/colorjs.io/colorjs.io/src/spaces/index.js +0 -8
- package/lib/colorjs.io/colorjs.io/src/spaces/jzazbz.js +0 -118
- package/lib/colorjs.io/colorjs.io/src/spaces/jzczhz.js +0 -53
- package/lib/colorjs.io/colorjs.io/src/spaces/lab-d65.js +0 -74
- package/lib/colorjs.io/colorjs.io/src/spaces/lab.js +0 -74
- package/lib/colorjs.io/colorjs.io/src/spaces/lch.js +0 -67
- package/lib/colorjs.io/colorjs.io/src/spaces/lchuv.js +0 -68
- package/lib/colorjs.io/colorjs.io/src/spaces/luv.js +0 -85
- package/lib/colorjs.io/colorjs.io/src/spaces/oklab.js +0 -74
- package/lib/colorjs.io/colorjs.io/src/spaces/oklch.js +0 -68
- package/lib/colorjs.io/colorjs.io/src/spaces/p3-linear.js +0 -22
- package/lib/colorjs.io/colorjs.io/src/spaces/p3.js +0 -13
- package/lib/colorjs.io/colorjs.io/src/spaces/prophoto-linear.js +0 -28
- package/lib/colorjs.io/colorjs.io/src/spaces/prophoto.js +0 -19
- package/lib/colorjs.io/colorjs.io/src/spaces/rec2020-linear.js +0 -27
- package/lib/colorjs.io/colorjs.io/src/spaces/rec2020.js +0 -31
- package/lib/colorjs.io/colorjs.io/src/spaces/rec2100-hlg.js +0 -49
- package/lib/colorjs.io/colorjs.io/src/spaces/rec2100-pq.js +0 -37
- package/lib/colorjs.io/colorjs.io/src/spaces/srgb-linear.js +0 -30
- package/lib/colorjs.io/colorjs.io/src/spaces/srgb.js +0 -127
- package/lib/colorjs.io/colorjs.io/src/spaces/xyz-abs-d65.js +0 -40
- package/lib/colorjs.io/colorjs.io/src/spaces/xyz-d50.js +0 -12
- package/lib/colorjs.io/colorjs.io/src/spaces/xyz-d65.js +0 -18
- package/lib/colorjs.io/colorjs.io/src/to.js +0 -26
- package/lib/colorjs.io/colorjs.io/src/toGamut.js +0 -310
- package/lib/colorjs.io/colorjs.io/src/util.js +0 -254
- package/lib/colorjs.io/colorjs.io/src/variations.js +0 -14
- package/lib/colorjs.io/colorjs.io/types/index.d.cts +0 -4
- package/lib/colorjs.io/colorjs.io/types/index.d.ts +0 -42
- package/lib/colorjs.io/colorjs.io/types/src/CATs.d.ts +0 -13
- package/lib/colorjs.io/colorjs.io/types/src/adapt.d.ts +0 -12
- package/lib/colorjs.io/colorjs.io/types/src/angles.d.ts +0 -7
- package/lib/colorjs.io/colorjs.io/types/src/chromaticity.d.ts +0 -7
- package/lib/colorjs.io/colorjs.io/types/src/clone.d.ts +0 -3
- package/lib/colorjs.io/colorjs.io/types/src/color.d.ts +0 -160
- package/lib/colorjs.io/colorjs.io/types/src/contrast/APCA.d.ts +0 -5
- package/lib/colorjs.io/colorjs.io/types/src/contrast/Lstar.d.ts +0 -5
- package/lib/colorjs.io/colorjs.io/types/src/contrast/Michelson.d.ts +0 -5
- package/lib/colorjs.io/colorjs.io/types/src/contrast/WCAG21.d.ts +0 -5
- package/lib/colorjs.io/colorjs.io/types/src/contrast/Weber.d.ts +0 -5
- package/lib/colorjs.io/colorjs.io/types/src/contrast/deltaPhi.d.ts +0 -5
- package/lib/colorjs.io/colorjs.io/types/src/contrast/index.d.ts +0 -11
- package/lib/colorjs.io/colorjs.io/types/src/contrast.d.ts +0 -12
- package/lib/colorjs.io/colorjs.io/types/src/defaults.d.ts +0 -2
- package/lib/colorjs.io/colorjs.io/types/src/deltaE/deltaE2000.d.ts +0 -11
- package/lib/colorjs.io/colorjs.io/types/src/deltaE/deltaE76.d.ts +0 -5
- package/lib/colorjs.io/colorjs.io/types/src/deltaE/deltaECMC.d.ts +0 -9
- package/lib/colorjs.io/colorjs.io/types/src/deltaE/deltaEHCT.d.ts +0 -5
- package/lib/colorjs.io/colorjs.io/types/src/deltaE/deltaEITP.d.ts +0 -5
- package/lib/colorjs.io/colorjs.io/types/src/deltaE/deltaEJz.d.ts +0 -5
- package/lib/colorjs.io/colorjs.io/types/src/deltaE/deltaEOK.d.ts +0 -5
- package/lib/colorjs.io/colorjs.io/types/src/deltaE/index.d.ts +0 -14
- package/lib/colorjs.io/colorjs.io/types/src/deltaE.d.ts +0 -12
- package/lib/colorjs.io/colorjs.io/types/src/display.d.ts +0 -17
- package/lib/colorjs.io/colorjs.io/types/src/distance.d.ts +0 -8
- package/lib/colorjs.io/colorjs.io/types/src/equals.d.ts +0 -3
- package/lib/colorjs.io/colorjs.io/types/src/get.d.ts +0 -4
- package/lib/colorjs.io/colorjs.io/types/src/getAll.d.ts +0 -7
- package/lib/colorjs.io/colorjs.io/types/src/getColor.d.ts +0 -4
- package/lib/colorjs.io/colorjs.io/types/src/hooks.d.ts +0 -52
- package/lib/colorjs.io/colorjs.io/types/src/inGamut.d.ts +0 -8
- package/lib/colorjs.io/colorjs.io/types/src/index-fn.d.cts +0 -1
- package/lib/colorjs.io/colorjs.io/types/src/index-fn.d.ts +0 -63
- package/lib/colorjs.io/colorjs.io/types/src/index.d.ts +0 -125
- package/lib/colorjs.io/colorjs.io/types/src/interpolation.d.ts +0 -77
- package/lib/colorjs.io/colorjs.io/types/src/keywords.d.ts +0 -2
- package/lib/colorjs.io/colorjs.io/types/src/luminance.d.ts +0 -10
- package/lib/colorjs.io/colorjs.io/types/src/multiply-matrices.d.ts +0 -9
- package/lib/colorjs.io/colorjs.io/types/src/parse.d.ts +0 -16
- package/lib/colorjs.io/colorjs.io/types/src/rgbspace.d.ts +0 -10
- package/lib/colorjs.io/colorjs.io/types/src/serialize.d.ts +0 -13
- package/lib/colorjs.io/colorjs.io/types/src/set.d.ts +0 -18
- package/lib/colorjs.io/colorjs.io/types/src/setAll.d.ts +0 -14
- package/lib/colorjs.io/colorjs.io/types/src/space-accessors.d.ts +0 -1
- package/lib/colorjs.io/colorjs.io/types/src/space-coord-accessors.d.ts +0 -69
- package/lib/colorjs.io/colorjs.io/types/src/space.d.ts +0 -143
- package/lib/colorjs.io/colorjs.io/types/src/spaces/a98rgb-linear.d.ts +0 -3
- package/lib/colorjs.io/colorjs.io/types/src/spaces/a98rgb.d.ts +0 -3
- package/lib/colorjs.io/colorjs.io/types/src/spaces/acescc.d.ts +0 -3
- package/lib/colorjs.io/colorjs.io/types/src/spaces/acescg.d.ts +0 -3
- package/lib/colorjs.io/colorjs.io/types/src/spaces/hpluv.d.ts +0 -3
- package/lib/colorjs.io/colorjs.io/types/src/spaces/hsl.d.ts +0 -3
- package/lib/colorjs.io/colorjs.io/types/src/spaces/hsluv.d.ts +0 -3
- package/lib/colorjs.io/colorjs.io/types/src/spaces/hsv.d.ts +0 -3
- package/lib/colorjs.io/colorjs.io/types/src/spaces/hwb.d.ts +0 -3
- package/lib/colorjs.io/colorjs.io/types/src/spaces/ictcp.d.ts +0 -3
- package/lib/colorjs.io/colorjs.io/types/src/spaces/index-fn-hdr.d.ts +0 -9
- package/lib/colorjs.io/colorjs.io/types/src/spaces/index-fn.d.ts +0 -29
- package/lib/colorjs.io/colorjs.io/types/src/spaces/index.d.ts +0 -4
- package/lib/colorjs.io/colorjs.io/types/src/spaces/jzazbz.d.ts +0 -3
- package/lib/colorjs.io/colorjs.io/types/src/spaces/jzczhz.d.ts +0 -3
- package/lib/colorjs.io/colorjs.io/types/src/spaces/lab-d65.d.ts +0 -3
- package/lib/colorjs.io/colorjs.io/types/src/spaces/lab.d.ts +0 -3
- package/lib/colorjs.io/colorjs.io/types/src/spaces/lch.d.ts +0 -3
- package/lib/colorjs.io/colorjs.io/types/src/spaces/lchuv.d.ts +0 -3
- package/lib/colorjs.io/colorjs.io/types/src/spaces/luv.d.ts +0 -3
- package/lib/colorjs.io/colorjs.io/types/src/spaces/oklab.d.ts +0 -3
- package/lib/colorjs.io/colorjs.io/types/src/spaces/oklch.d.ts +0 -3
- package/lib/colorjs.io/colorjs.io/types/src/spaces/p3-linear.d.ts +0 -3
- package/lib/colorjs.io/colorjs.io/types/src/spaces/p3.d.ts +0 -3
- package/lib/colorjs.io/colorjs.io/types/src/spaces/prophoto-linear.d.ts +0 -3
- package/lib/colorjs.io/colorjs.io/types/src/spaces/prophoto.d.ts +0 -3
- package/lib/colorjs.io/colorjs.io/types/src/spaces/rec2020-linear.d.ts +0 -3
- package/lib/colorjs.io/colorjs.io/types/src/spaces/rec2020.d.ts +0 -3
- package/lib/colorjs.io/colorjs.io/types/src/spaces/rec2100-hlg.d.ts +0 -3
- package/lib/colorjs.io/colorjs.io/types/src/spaces/rec2100-pq.d.ts +0 -3
- package/lib/colorjs.io/colorjs.io/types/src/spaces/srgb-linear.d.ts +0 -3
- package/lib/colorjs.io/colorjs.io/types/src/spaces/srgb.d.ts +0 -3
- package/lib/colorjs.io/colorjs.io/types/src/spaces/xyz-abs-d65.d.ts +0 -3
- package/lib/colorjs.io/colorjs.io/types/src/spaces/xyz-d50.d.ts +0 -3
- package/lib/colorjs.io/colorjs.io/types/src/spaces/xyz-d65.d.ts +0 -3
- package/lib/colorjs.io/colorjs.io/types/src/to.d.ts +0 -14
- package/lib/colorjs.io/colorjs.io/types/src/toGamut.d.ts +0 -45
- package/lib/colorjs.io/colorjs.io/types/src/util.d.ts +0 -58
- package/lib/colorjs.io/colorjs.io/types/src/variations.d.ts +0 -5
- package/lib/colorjs.io/dist/color-fn.cjs +0 -5437
- package/lib/colorjs.io/dist/color-fn.cjs.map +0 -1
- package/lib/colorjs.io/dist/color-fn.legacy.cjs +0 -7048
- package/lib/colorjs.io/dist/color-fn.legacy.cjs.map +0 -1
- package/lib/colorjs.io/dist/color-fn.legacy.min.cjs +0 -2
- package/lib/colorjs.io/dist/color-fn.legacy.min.cjs.map +0 -1
- package/lib/colorjs.io/dist/color-fn.min.cjs +0 -2
- package/lib/colorjs.io/dist/color-fn.min.cjs.map +0 -1
- package/lib/colorjs.io/dist/color.cjs +0 -5759
- package/lib/colorjs.io/dist/color.cjs.map +0 -1
- package/lib/colorjs.io/dist/color.global.js +0 -5760
- package/lib/colorjs.io/dist/color.global.js.map +0 -1
- package/lib/colorjs.io/dist/color.global.legacy.js +0 -7400
- package/lib/colorjs.io/dist/color.global.legacy.js.map +0 -1
- package/lib/colorjs.io/dist/color.global.legacy.min.js +0 -2
- package/lib/colorjs.io/dist/color.global.legacy.min.js.map +0 -1
- package/lib/colorjs.io/dist/color.global.min.js +0 -2
- package/lib/colorjs.io/dist/color.global.min.js.map +0 -1
- package/lib/colorjs.io/dist/color.js +0 -5755
- package/lib/colorjs.io/dist/color.js.map +0 -1
- package/lib/colorjs.io/dist/color.legacy.cjs +0 -7399
- package/lib/colorjs.io/dist/color.legacy.cjs.map +0 -1
- package/lib/colorjs.io/dist/color.legacy.js +0 -7395
- package/lib/colorjs.io/dist/color.legacy.js.map +0 -1
- package/lib/colorjs.io/dist/color.legacy.min.cjs +0 -2
- package/lib/colorjs.io/dist/color.legacy.min.cjs.map +0 -1
- package/lib/colorjs.io/dist/color.legacy.min.js +0 -2
- package/lib/colorjs.io/dist/color.legacy.min.js.map +0 -1
- package/lib/colorjs.io/dist/color.min.cjs +0 -2
- package/lib/colorjs.io/dist/color.min.cjs.map +0 -1
- package/lib/colorjs.io/dist/color.min.js +0 -2
- package/lib/colorjs.io/dist/color.min.js.map +0 -1
- package/lib/colorjs.io/package.json +0 -113
- package/lib/colorjs.io/src/CATs.js +0 -131
- package/lib/colorjs.io/src/adapt.js +0 -62
- package/lib/colorjs.io/src/angles.js +0 -44
- package/lib/colorjs.io/src/chromaticity.js +0 -33
- package/lib/colorjs.io/src/clone.js +0 -7
- package/lib/colorjs.io/src/color.js +0 -201
- package/lib/colorjs.io/src/contrast/APCA.js +0 -102
- package/lib/colorjs.io/src/contrast/Lstar.js +0 -17
- package/lib/colorjs.io/src/contrast/Michelson.js +0 -22
- package/lib/colorjs.io/src/contrast/WCAG21.js +0 -20
- package/lib/colorjs.io/src/contrast/Weber.js +0 -27
- package/lib/colorjs.io/src/contrast/deltaPhi.js +0 -25
- package/lib/colorjs.io/src/contrast/index.js +0 -6
- package/lib/colorjs.io/src/contrast.js +0 -28
- package/lib/colorjs.io/src/defaults.js +0 -12
- package/lib/colorjs.io/src/deltaE/deltaE2000.js +0 -179
- package/lib/colorjs.io/src/deltaE/deltaE76.js +0 -7
- package/lib/colorjs.io/src/deltaE/deltaECMC.js +0 -114
- package/lib/colorjs.io/src/deltaE/deltaEHCT.js +0 -51
- package/lib/colorjs.io/src/deltaE/deltaEITP.js +0 -24
- package/lib/colorjs.io/src/deltaE/deltaEJz.js +0 -43
- package/lib/colorjs.io/src/deltaE/deltaEOK.js +0 -19
- package/lib/colorjs.io/src/deltaE/index.js +0 -27
- package/lib/colorjs.io/src/deltaE.js +0 -19
- package/lib/colorjs.io/src/display.js +0 -83
- package/lib/colorjs.io/src/distance.js +0 -21
- package/lib/colorjs.io/src/equals.js +0 -10
- package/lib/colorjs.io/src/get.js +0 -11
- package/lib/colorjs.io/src/getAll.js +0 -20
- package/lib/colorjs.io/src/getColor.js +0 -36
- package/lib/colorjs.io/src/hooks.js +0 -37
- package/lib/colorjs.io/src/inGamut.js +0 -25
- package/lib/colorjs.io/src/index-fn.js +0 -28
- package/lib/colorjs.io/src/index.js +0 -38
- package/lib/colorjs.io/src/interpolation.js +0 -222
- package/lib/colorjs.io/src/keywords.js +0 -158
- package/lib/colorjs.io/src/luminance.js +0 -27
- package/lib/colorjs.io/src/multiply-matrices.js +0 -44
- package/lib/colorjs.io/src/parse.js +0 -198
- package/lib/colorjs.io/src/rgbspace.js +0 -64
- package/lib/colorjs.io/src/serialize.js +0 -86
- package/lib/colorjs.io/src/set.js +0 -33
- package/lib/colorjs.io/src/setAll.js +0 -12
- package/lib/colorjs.io/src/space-accessors.js +0 -86
- package/lib/colorjs.io/src/space.js +0 -440
- package/lib/colorjs.io/src/spaces/a98rgb-linear.js +0 -28
- package/lib/colorjs.io/src/spaces/a98rgb.js +0 -11
- package/lib/colorjs.io/src/spaces/acescc.js +0 -76
- package/lib/colorjs.io/src/spaces/acescg.js +0 -54
- package/lib/colorjs.io/src/spaces/cam16.js +0 -362
- package/lib/colorjs.io/src/spaces/hct.js +0 -157
- package/lib/colorjs.io/src/spaces/hpluv.js +0 -130
- package/lib/colorjs.io/src/spaces/hsl.js +0 -91
- package/lib/colorjs.io/src/spaces/hsluv.js +0 -162
- package/lib/colorjs.io/src/spaces/hsv.js +0 -65
- package/lib/colorjs.io/src/spaces/hwb.js +0 -58
- package/lib/colorjs.io/src/spaces/ictcp.js +0 -133
- package/lib/colorjs.io/src/spaces/index-fn-hdr.js +0 -7
- package/lib/colorjs.io/src/spaces/index-fn.js +0 -29
- package/lib/colorjs.io/src/spaces/index.js +0 -8
- package/lib/colorjs.io/src/spaces/jzazbz.js +0 -118
- package/lib/colorjs.io/src/spaces/jzczhz.js +0 -53
- package/lib/colorjs.io/src/spaces/lab-d65.js +0 -74
- package/lib/colorjs.io/src/spaces/lab.js +0 -74
- package/lib/colorjs.io/src/spaces/lch.js +0 -67
- package/lib/colorjs.io/src/spaces/lchuv.js +0 -68
- package/lib/colorjs.io/src/spaces/luv.js +0 -85
- package/lib/colorjs.io/src/spaces/oklab.js +0 -74
- package/lib/colorjs.io/src/spaces/oklch.js +0 -68
- package/lib/colorjs.io/src/spaces/p3-linear.js +0 -22
- package/lib/colorjs.io/src/spaces/p3.js +0 -13
- package/lib/colorjs.io/src/spaces/prophoto-linear.js +0 -28
- package/lib/colorjs.io/src/spaces/prophoto.js +0 -19
- package/lib/colorjs.io/src/spaces/rec2020-linear.js +0 -27
- package/lib/colorjs.io/src/spaces/rec2020.js +0 -31
- package/lib/colorjs.io/src/spaces/rec2100-hlg.js +0 -49
- package/lib/colorjs.io/src/spaces/rec2100-pq.js +0 -37
- package/lib/colorjs.io/src/spaces/srgb-linear.js +0 -30
- package/lib/colorjs.io/src/spaces/srgb.js +0 -127
- package/lib/colorjs.io/src/spaces/xyz-abs-d65.js +0 -40
- package/lib/colorjs.io/src/spaces/xyz-d50.js +0 -12
- package/lib/colorjs.io/src/spaces/xyz-d65.js +0 -18
- package/lib/colorjs.io/src/to.js +0 -26
- package/lib/colorjs.io/src/toGamut.js +0 -310
- package/lib/colorjs.io/src/util.js +0 -254
- package/lib/colorjs.io/src/variations.js +0 -14
- package/lib/colorjs.io/types/index.d.cts +0 -4
- package/lib/colorjs.io/types/index.d.ts +0 -42
- package/lib/colorjs.io/types/src/CATs.d.ts +0 -13
- package/lib/colorjs.io/types/src/adapt.d.ts +0 -12
- package/lib/colorjs.io/types/src/angles.d.ts +0 -7
- package/lib/colorjs.io/types/src/chromaticity.d.ts +0 -7
- package/lib/colorjs.io/types/src/clone.d.ts +0 -3
- package/lib/colorjs.io/types/src/color.d.ts +0 -160
- package/lib/colorjs.io/types/src/contrast/APCA.d.ts +0 -5
- package/lib/colorjs.io/types/src/contrast/Lstar.d.ts +0 -5
- package/lib/colorjs.io/types/src/contrast/Michelson.d.ts +0 -5
- package/lib/colorjs.io/types/src/contrast/WCAG21.d.ts +0 -5
- package/lib/colorjs.io/types/src/contrast/Weber.d.ts +0 -5
- package/lib/colorjs.io/types/src/contrast/deltaPhi.d.ts +0 -5
- package/lib/colorjs.io/types/src/contrast/index.d.ts +0 -11
- package/lib/colorjs.io/types/src/contrast.d.ts +0 -12
- package/lib/colorjs.io/types/src/defaults.d.ts +0 -2
- package/lib/colorjs.io/types/src/deltaE/deltaE2000.d.ts +0 -11
- package/lib/colorjs.io/types/src/deltaE/deltaE76.d.ts +0 -5
- package/lib/colorjs.io/types/src/deltaE/deltaECMC.d.ts +0 -9
- package/lib/colorjs.io/types/src/deltaE/deltaEHCT.d.ts +0 -5
- package/lib/colorjs.io/types/src/deltaE/deltaEITP.d.ts +0 -5
- package/lib/colorjs.io/types/src/deltaE/deltaEJz.d.ts +0 -5
- package/lib/colorjs.io/types/src/deltaE/deltaEOK.d.ts +0 -5
- package/lib/colorjs.io/types/src/deltaE/index.d.ts +0 -14
- package/lib/colorjs.io/types/src/deltaE.d.ts +0 -12
- package/lib/colorjs.io/types/src/display.d.ts +0 -17
- package/lib/colorjs.io/types/src/distance.d.ts +0 -8
- package/lib/colorjs.io/types/src/equals.d.ts +0 -3
- package/lib/colorjs.io/types/src/get.d.ts +0 -4
- package/lib/colorjs.io/types/src/getAll.d.ts +0 -7
- package/lib/colorjs.io/types/src/getColor.d.ts +0 -4
- package/lib/colorjs.io/types/src/hooks.d.ts +0 -52
- package/lib/colorjs.io/types/src/inGamut.d.ts +0 -8
- package/lib/colorjs.io/types/src/index-fn.d.cts +0 -1
- package/lib/colorjs.io/types/src/index-fn.d.ts +0 -63
- package/lib/colorjs.io/types/src/index.d.ts +0 -125
- package/lib/colorjs.io/types/src/interpolation.d.ts +0 -77
- package/lib/colorjs.io/types/src/keywords.d.ts +0 -2
- package/lib/colorjs.io/types/src/luminance.d.ts +0 -10
- package/lib/colorjs.io/types/src/multiply-matrices.d.ts +0 -9
- package/lib/colorjs.io/types/src/parse.d.ts +0 -16
- package/lib/colorjs.io/types/src/rgbspace.d.ts +0 -10
- package/lib/colorjs.io/types/src/serialize.d.ts +0 -13
- package/lib/colorjs.io/types/src/set.d.ts +0 -18
- package/lib/colorjs.io/types/src/setAll.d.ts +0 -14
- package/lib/colorjs.io/types/src/space-accessors.d.ts +0 -1
- package/lib/colorjs.io/types/src/space-coord-accessors.d.ts +0 -69
- package/lib/colorjs.io/types/src/space.d.ts +0 -143
- package/lib/colorjs.io/types/src/spaces/a98rgb-linear.d.ts +0 -3
- package/lib/colorjs.io/types/src/spaces/a98rgb.d.ts +0 -3
- package/lib/colorjs.io/types/src/spaces/acescc.d.ts +0 -3
- package/lib/colorjs.io/types/src/spaces/acescg.d.ts +0 -3
- package/lib/colorjs.io/types/src/spaces/hpluv.d.ts +0 -3
- package/lib/colorjs.io/types/src/spaces/hsl.d.ts +0 -3
- package/lib/colorjs.io/types/src/spaces/hsluv.d.ts +0 -3
- package/lib/colorjs.io/types/src/spaces/hsv.d.ts +0 -3
- package/lib/colorjs.io/types/src/spaces/hwb.d.ts +0 -3
- package/lib/colorjs.io/types/src/spaces/ictcp.d.ts +0 -3
- package/lib/colorjs.io/types/src/spaces/index-fn-hdr.d.ts +0 -9
- package/lib/colorjs.io/types/src/spaces/index-fn.d.ts +0 -29
- package/lib/colorjs.io/types/src/spaces/index.d.ts +0 -4
- package/lib/colorjs.io/types/src/spaces/jzazbz.d.ts +0 -3
- package/lib/colorjs.io/types/src/spaces/jzczhz.d.ts +0 -3
- package/lib/colorjs.io/types/src/spaces/lab-d65.d.ts +0 -3
- package/lib/colorjs.io/types/src/spaces/lab.d.ts +0 -3
- package/lib/colorjs.io/types/src/spaces/lch.d.ts +0 -3
- package/lib/colorjs.io/types/src/spaces/lchuv.d.ts +0 -3
- package/lib/colorjs.io/types/src/spaces/luv.d.ts +0 -3
- package/lib/colorjs.io/types/src/spaces/oklab.d.ts +0 -3
- package/lib/colorjs.io/types/src/spaces/oklch.d.ts +0 -3
- package/lib/colorjs.io/types/src/spaces/p3-linear.d.ts +0 -3
- package/lib/colorjs.io/types/src/spaces/p3.d.ts +0 -3
- package/lib/colorjs.io/types/src/spaces/prophoto-linear.d.ts +0 -3
- package/lib/colorjs.io/types/src/spaces/prophoto.d.ts +0 -3
- package/lib/colorjs.io/types/src/spaces/rec2020-linear.d.ts +0 -3
- package/lib/colorjs.io/types/src/spaces/rec2020.d.ts +0 -3
- package/lib/colorjs.io/types/src/spaces/rec2100-hlg.d.ts +0 -3
- package/lib/colorjs.io/types/src/spaces/rec2100-pq.d.ts +0 -3
- package/lib/colorjs.io/types/src/spaces/srgb-linear.d.ts +0 -3
- package/lib/colorjs.io/types/src/spaces/srgb.d.ts +0 -3
- package/lib/colorjs.io/types/src/spaces/xyz-abs-d65.d.ts +0 -3
- package/lib/colorjs.io/types/src/spaces/xyz-d50.d.ts +0 -3
- package/lib/colorjs.io/types/src/spaces/xyz-d65.d.ts +0 -3
- package/lib/colorjs.io/types/src/to.d.ts +0 -14
- package/lib/colorjs.io/types/src/toGamut.d.ts +0 -45
- package/lib/colorjs.io/types/src/util.d.ts +0 -58
- package/lib/colorjs.io/types/src/variations.d.ts +0 -5
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import ColorElement from "../common/color-element.js";
|
|
2
|
+
import "../space-picker/space-picker.js";
|
|
3
|
+
import * as dom from "../common/dom.js";
|
|
4
|
+
|
|
5
|
+
const Self = class ChannelPicker extends ColorElement {
|
|
6
|
+
static tagName = "channel-picker";
|
|
7
|
+
static url = import.meta.url;
|
|
8
|
+
static shadowStyle = true;
|
|
9
|
+
static shadowTemplate = `
|
|
10
|
+
<space-picker part="color-space" exportparts="base: color-space-base" id="space_picker"></space-picker>
|
|
11
|
+
<select id="picker" part="color-channel-base"></select>`;
|
|
12
|
+
|
|
13
|
+
constructor () {
|
|
14
|
+
super();
|
|
15
|
+
|
|
16
|
+
this._el = dom.named(this);
|
|
17
|
+
|
|
18
|
+
// We need to start listening for this event as soon as the <space-picker> is created
|
|
19
|
+
this._el.space_picker.addEventListener("spacechange", this);
|
|
20
|
+
|
|
21
|
+
// We need to render the picker as soon as possible so as not to choke on invalid initial values
|
|
22
|
+
this.#render();
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
connectedCallback () {
|
|
26
|
+
super.connectedCallback?.();
|
|
27
|
+
|
|
28
|
+
this._el.picker.addEventListener("input", this);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
disconnectedCallback () {
|
|
32
|
+
super.disconnectedCallback?.();
|
|
33
|
+
|
|
34
|
+
this._el.space_picker.removeEventListener("spacechange", this);
|
|
35
|
+
this._el.picker.removeEventListener("input", this);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
get selectedSpace () {
|
|
39
|
+
return this._el.space_picker.selectedSpace;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
get selectedChannel () {
|
|
43
|
+
return this.selectedSpace.coords?.[this._el.picker.value];
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Previously selected channels for each space.
|
|
48
|
+
* Keys are space IDs. Values are coords.
|
|
49
|
+
*/
|
|
50
|
+
#history = {};
|
|
51
|
+
|
|
52
|
+
#render () {
|
|
53
|
+
let space = this.selectedSpace;
|
|
54
|
+
let coords = space.coords;
|
|
55
|
+
|
|
56
|
+
if (space && !coords) {
|
|
57
|
+
console.warn(`Color space "${ space.name }" has no coordinates.`);
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
this._el.picker.innerHTML = Object.entries(coords)
|
|
62
|
+
.map(([id, coord]) => `<option value="${ id }">${ coord.name }</option>`)
|
|
63
|
+
.join("\n");
|
|
64
|
+
|
|
65
|
+
let [prevSpace, prevChannel] = this.value?.split(".") ?? [];
|
|
66
|
+
if (prevSpace && prevChannel) {
|
|
67
|
+
let prevChannelName = this._el.space_picker.spaces[prevSpace].coords[prevChannel].name;
|
|
68
|
+
let currentChannelName = coords[prevChannel]?.name;
|
|
69
|
+
if (prevChannelName === currentChannelName) {
|
|
70
|
+
// Preserve the channel if it exists in the new space and has the same name ("b" in "oklab" is not the same as "b" in "p3")
|
|
71
|
+
this._el.picker.value = prevChannel;
|
|
72
|
+
}
|
|
73
|
+
else if (this.#history?.[space.id]) {
|
|
74
|
+
// Otherwise, try to restore the last channel used
|
|
75
|
+
this._el.picker.value = this.#history[space.id];
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
handleEvent (event) {
|
|
81
|
+
if (event.type === "spacechange") {
|
|
82
|
+
this.#render();
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
if ([this._el.space_picker, this._el.picker].includes(event.target)) {
|
|
86
|
+
let value = `${ this._el.space_picker.value }.${ this._el.picker.value }`;
|
|
87
|
+
if (value !== this.value) {
|
|
88
|
+
this.value = value;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
propChangedCallback ({name, prop, detail: change}) {
|
|
94
|
+
if (name === "value" && this.value) {
|
|
95
|
+
let [space, channel] = (this.value + "").split(".");
|
|
96
|
+
|
|
97
|
+
let currentSpace = this._el.space_picker.value;
|
|
98
|
+
let currentCoord = this._el.picker.value;
|
|
99
|
+
let currentValue = `${ currentSpace }.${ currentCoord }`;
|
|
100
|
+
|
|
101
|
+
if (!space || !channel) {
|
|
102
|
+
console.warn(`Invalid value "${ this.value }". Expected format: "space.channel". Falling back to "${ currentValue }".`);
|
|
103
|
+
this.value = currentValue;
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
let spaces = Object.keys(this._el.space_picker.spaces);
|
|
107
|
+
|
|
108
|
+
if (!spaces.includes(space)) {
|
|
109
|
+
console.warn(`No "${ space }" color space found. Choose one of the following: ${ spaces.join(", ") }. Falling back to "${ currentSpace }".`);
|
|
110
|
+
this.value = currentValue;
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
if (currentSpace !== space) {
|
|
114
|
+
this._el.space_picker.value = space;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
if (currentCoord && currentCoord !== channel) {
|
|
118
|
+
let coords = Object.keys(this.selectedSpace.coords ?? {});
|
|
119
|
+
|
|
120
|
+
if (coords.includes(channel)) {
|
|
121
|
+
this._el.picker.value = channel;
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
currentCoord = coords.includes(currentCoord) ? currentCoord : coords[0];
|
|
125
|
+
|
|
126
|
+
let message = `Color space "${ space }" has no coordinate "${ channel }".`;
|
|
127
|
+
if (coords.length) {
|
|
128
|
+
message += ` Choose one of the following: ${ coords.join(", ") }.`;
|
|
129
|
+
}
|
|
130
|
+
message += ` Falling back to "${ currentCoord }".`;
|
|
131
|
+
console.warn(message);
|
|
132
|
+
this.value = `${ space }.${ currentCoord }`;
|
|
133
|
+
channel = currentCoord;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
this.#history[space] = channel;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
static props = {
|
|
144
|
+
value: {
|
|
145
|
+
default: "oklch.l",
|
|
146
|
+
},
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
static events = {
|
|
150
|
+
change: {
|
|
151
|
+
from () {
|
|
152
|
+
return [this._el.space_picker, this._el.picker];
|
|
153
|
+
},
|
|
154
|
+
},
|
|
155
|
+
input: {
|
|
156
|
+
from () {
|
|
157
|
+
return [this._el.space_picker, this._el.picker];
|
|
158
|
+
},
|
|
159
|
+
},
|
|
160
|
+
valuechange: {
|
|
161
|
+
propchange: "value",
|
|
162
|
+
},
|
|
163
|
+
};
|
|
164
|
+
};
|
|
165
|
+
|
|
166
|
+
Self.define();
|
|
167
|
+
|
|
168
|
+
export default Self;
|
|
Binary file
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
# `<channel-slider>`
|
|
2
|
+
|
|
3
|
+
A [`<color-slider>`](../color-slider) for a specific channel, intended for color picking.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
This is a higher level component than `<color-slider>` for the cases where you want to control a single channel of a color space.
|
|
8
|
+
It offers many conveniences for these cases:
|
|
9
|
+
- It takes care of applying the right `min`, `max`, and `step` values to the slider
|
|
10
|
+
- It automatically generates the start and end colors
|
|
11
|
+
- It can provide an editable tooltip as a tooltip that both shows and edits the current value
|
|
12
|
+
- Already includes a suitable label
|
|
13
|
+
|
|
14
|
+
### Static
|
|
15
|
+
|
|
16
|
+
Basic example:
|
|
17
|
+
|
|
18
|
+
```html
|
|
19
|
+
<channel-slider space="oklch" channel="h"></channel-slider>
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
The alpha channel is also supported:
|
|
23
|
+
|
|
24
|
+
```html
|
|
25
|
+
<channel-slider space="oklch" channel="alpha"></channel-slider>
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
In most cases you’d also want to set a color to set the other channels and the initial value:
|
|
29
|
+
|
|
30
|
+
```html
|
|
31
|
+
<channel-slider space="oklch" channel="h" color="oklch(80% 20% 130)"></channel-slider>
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
This will automatically use the whole reference range of that component in the specified color space,
|
|
35
|
+
and use the current value of the component as the starting value (unless `value` is also specified).
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
The color does not actually need to be in the same color space, it will be converted if needed:
|
|
40
|
+
|
|
41
|
+
```html
|
|
42
|
+
<channel-slider space="oklch" channel="h" color="deeppink"></channel-slider>
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Colors and color spaces not supported by the browser also work:
|
|
46
|
+
|
|
47
|
+
```html
|
|
48
|
+
<channel-slider space="okhsl" channel="h" color="color(--okhsl 180 100% 50%)"></channel-slider>
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
If you don’t want to show the whole range you can also specify `min` and `max` attributes.
|
|
53
|
+
|
|
54
|
+
```html
|
|
55
|
+
<channel-slider space="oklch" channel="l" color="red" min=".3" max=".95"></channel-slider>
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### Dynamic
|
|
59
|
+
|
|
60
|
+
You can listen to the `colorchange` event and grab the `color` property to get the current color value.
|
|
61
|
+
Here we are using a [`<color-swatch>`](../color-swatch/) to not just display the CSS code but also the actual color:
|
|
62
|
+
|
|
63
|
+
```html
|
|
64
|
+
<channel-slider space="oklch" channel="h" color="oklch(50% 50% 180)"
|
|
65
|
+
oncolorchange="this.nextElementSibling.textContent = this.color"></channel-slider>
|
|
66
|
+
<color-swatch></color-swatch>
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
All attributes are reactive:
|
|
70
|
+
|
|
71
|
+
```html
|
|
72
|
+
<label>
|
|
73
|
+
Space:
|
|
74
|
+
<select id="space_select" size="3">
|
|
75
|
+
<option>oklch</option>
|
|
76
|
+
<option>oklab</option>
|
|
77
|
+
<option>okhsl</option>
|
|
78
|
+
<option>lab</option>
|
|
79
|
+
<option>lch</option>
|
|
80
|
+
<option>hsl</option>
|
|
81
|
+
<option>srgb</option>
|
|
82
|
+
</select>
|
|
83
|
+
</label>
|
|
84
|
+
<label>
|
|
85
|
+
Channel:
|
|
86
|
+
<select id="channel_select" size=3>
|
|
87
|
+
<option>l</option>
|
|
88
|
+
<option>c</option>
|
|
89
|
+
<option>h</option>
|
|
90
|
+
<option>alpha</option>
|
|
91
|
+
</select>
|
|
92
|
+
</label>
|
|
93
|
+
|
|
94
|
+
<channel-slider id="dynamic_slider" space="oklch" channel="h" color="oklch(50% 50% 180)"
|
|
95
|
+
oncolorchange="this.nextElementSibling.textContent = this.color"></channel-slider>
|
|
96
|
+
<color-swatch></color-swatch>
|
|
97
|
+
<script>
|
|
98
|
+
function fromSlider () {
|
|
99
|
+
space_select.value = dynamic_slider.space.id;
|
|
100
|
+
channel_select.innerHTML = [...Object.keys(dynamic_slider.space.coords).map(c => `<option>${c}</option>`), "<option>alpha</option>"].join('\n');
|
|
101
|
+
channel_select.value = dynamic_slider.channel || channel_select.options[0].value;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
function fromSelects () {
|
|
105
|
+
dynamic_slider.space = space_select.value;
|
|
106
|
+
dynamic_slider.channel = channel_select.value || channel_select.options[0].value;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
space_select.oninput = channel_select.oninput = fromSelects;
|
|
110
|
+
|
|
111
|
+
customElements.whenDefined("channel-slider").then(fromSlider);
|
|
112
|
+
dynamic_slider.addEventListener("propchange", fromSlider);
|
|
113
|
+
</script>
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
## Reference
|
|
118
|
+
|
|
119
|
+
### Slots
|
|
120
|
+
|
|
121
|
+
| Name | Description |
|
|
122
|
+
|------|-------------|
|
|
123
|
+
| _(default)_ | The channel slider's label. |
|
|
124
|
+
|
|
125
|
+
### Attributes & Properties
|
|
126
|
+
|
|
127
|
+
| Attribute | Property | Property type | Default value | Description |
|
|
128
|
+
|-----------|----------|---------------|---------------|-------------|
|
|
129
|
+
| `space` | `space` | `ColorSpace` | `string` | `oklch` | The color space to use for interpolation. |
|
|
130
|
+
| `channel` | `channel` | `string` | `h` | The component to use for the gradient. |
|
|
131
|
+
| `min` | `min` | `number` | `this.refRange[0]` | The minimum value for the slider. |
|
|
132
|
+
| `max` | `max` | `number` | `this.refRange[1]` | The maximum value for the slider. |
|
|
133
|
+
| `step` | `step` | `number` | Computed automatically based on `this.min` and `this.max`. | The granularity that the slider's current value must adhere to. |
|
|
134
|
+
| `value` | `value` | `number` | `(this.min + this.max) / 2` | The current value of the slider. |
|
|
135
|
+
| `color` | `color` | `Color` | `string` | `oklch(50% 50% 180)` | The current color value. |
|
|
136
|
+
|
|
137
|
+
### Getters
|
|
138
|
+
|
|
139
|
+
These properties are read-only.
|
|
140
|
+
|
|
141
|
+
| Property | Type | Description |
|
|
142
|
+
|----------|------|-------------|
|
|
143
|
+
| `minColor` | `Color` | The color corresponding to the minimum value of the slider. |
|
|
144
|
+
| `maxColor` | `Color` | The color corresponding to the maximum value of the slider. |
|
|
145
|
+
| `stops` | `Array<Color>` | The array of the slider color stops used for rendering. Unsupported color spaces or angular channels (hues) will have more color stops, while other channels may have as little as two: `minColor` and `maxColor`. |
|
|
146
|
+
| `progress` | `number` | The slider value converted to a 0-1 number with `0` corresponding to the min of the range and `1` to the max. |
|
|
147
|
+
| `channelName` | `string` | The name of the channel (e.g. `Hue` or `Alpha`). |
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
### Events
|
|
151
|
+
|
|
152
|
+
| Name | Description |
|
|
153
|
+
|------|-------------|
|
|
154
|
+
| `input` | Fired when the color changes due to user action. |
|
|
155
|
+
| `change` | Fired when the color changes due to user action. |
|
|
156
|
+
| `valuechange` | Fired when the value changes for any reason, and once during initialization. |
|
|
157
|
+
| `colorchange` | Fired when the color changes for any reason, and once during initialization. |
|
|
158
|
+
|
|
159
|
+
### Parts
|
|
160
|
+
|
|
161
|
+
| Name | Description |
|
|
162
|
+
|------|-------------|
|
|
163
|
+
| `color_slider` | The internal `<color-slider>` element. |
|
|
164
|
+
| `slider` | The `slider` part of the internal [`<color-slider>`](../color-slider/#parts) element. |
|
|
165
|
+
| `label` | The internal `<label>` element used as a wrapper around the default slot and the slider. |
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
.color-slider-label {
|
|
2
|
+
--_transition-duration: var(--transition-duration, 200ms);
|
|
3
|
+
|
|
4
|
+
display: grid;
|
|
5
|
+
grid-template-columns: 1fr auto;
|
|
6
|
+
gap: .3em;
|
|
7
|
+
align-items: center;
|
|
8
|
+
|
|
9
|
+
em {
|
|
10
|
+
opacity: 60%;
|
|
11
|
+
transition: opacity var(--_transition-duration);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
&:not(:hover, :focus-within) em {
|
|
15
|
+
opacity: 0;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
input[type=number] {
|
|
19
|
+
--_border-color: var(--border-color, color-mix(in oklab, currentcolor calc(var(--_current-color-percent, 30) * 1%), oklab(none none none / 0%)));
|
|
20
|
+
|
|
21
|
+
all: unset;
|
|
22
|
+
|
|
23
|
+
--content-width: calc(var(--value-length) * 1ch);
|
|
24
|
+
width: calc(var(--content-width, 2ch) + 1.2em);
|
|
25
|
+
min-width: calc(2ch + 1.2em);
|
|
26
|
+
box-sizing: content-box;
|
|
27
|
+
padding: .1em .2em;
|
|
28
|
+
border-radius: .2em;
|
|
29
|
+
border: 1px solid var(--_border-color);
|
|
30
|
+
text-align: center;
|
|
31
|
+
font-size: 90%;
|
|
32
|
+
transition: var(--_transition-duration) allow-discrete;
|
|
33
|
+
transition-property: opacity, border-color;
|
|
34
|
+
|
|
35
|
+
&::-webkit-textfield-decoration-container {
|
|
36
|
+
gap: .2em;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
&:not(:hover, :focus) {
|
|
40
|
+
--_current-color-percent: 10;
|
|
41
|
+
|
|
42
|
+
opacity: 60%;
|
|
43
|
+
border-color: var(--_border-color);
|
|
44
|
+
|
|
45
|
+
&::-webkit-inner-spin-button {
|
|
46
|
+
/* Fade out the spin buttons in Chrome and Safari */
|
|
47
|
+
opacity: .35;
|
|
48
|
+
filter: contrast(2);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
@supports (field-sizing: content) {
|
|
53
|
+
field-sizing: content;
|
|
54
|
+
width: auto;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
color-slider {
|
|
60
|
+
grid-column: 1 / -1;
|
|
61
|
+
}
|
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
import "../color-slider/color-slider.js";
|
|
2
|
+
import * as dom from "../common/dom.js";
|
|
3
|
+
import ColorElement from "../common/color-element.js";
|
|
4
|
+
import { getStep } from "../common/util.js";
|
|
5
|
+
|
|
6
|
+
const Self = class ChannelSlider extends ColorElement {
|
|
7
|
+
static tagName = "channel-slider";
|
|
8
|
+
static url = import.meta.url;
|
|
9
|
+
static shadowStyle = true;
|
|
10
|
+
static shadowTemplate = `
|
|
11
|
+
<label class="color-slider-label" part="label">
|
|
12
|
+
<slot>
|
|
13
|
+
<span id="channel_info" part="channel-info"></span>
|
|
14
|
+
<input type="number" part="spinner" min="0" max="1" step="0.01" id="spinner" />
|
|
15
|
+
</slot>
|
|
16
|
+
<color-slider part="color_slider" exportparts="slider" id="slider"></color-slider>
|
|
17
|
+
</label>`;
|
|
18
|
+
|
|
19
|
+
constructor () {
|
|
20
|
+
super();
|
|
21
|
+
|
|
22
|
+
this._el = dom.named(this);
|
|
23
|
+
this._el.slot = this.shadowRoot.querySelector("slot");
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
connectedCallback () {
|
|
27
|
+
super.connectedCallback?.();
|
|
28
|
+
|
|
29
|
+
this._el.slider.addEventListener("input", this);
|
|
30
|
+
this._el.slot.addEventListener("input", this);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
disconnectedCallback () {
|
|
34
|
+
this._el.slider.removeEventListener("input", this);
|
|
35
|
+
this._el.slot.removeEventListener("input", this);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
handleEvent (event) {
|
|
39
|
+
if (event.type === "input") {
|
|
40
|
+
this.value = event.target.value;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
colorAt (value) {
|
|
45
|
+
let color = this.defaultColor.clone();
|
|
46
|
+
|
|
47
|
+
if (this.channel === "alpha") {
|
|
48
|
+
color.alpha = value / 100;
|
|
49
|
+
}
|
|
50
|
+
else if (this.channel in color.space.coords) {
|
|
51
|
+
color.set(this.channel, value);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
return color;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
colorAtProgress (progress) {
|
|
58
|
+
// Map progress to min - max range
|
|
59
|
+
let value = this.min + progress * (this.max - this.min);
|
|
60
|
+
return this.colorAt(value);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
get minColor () {
|
|
64
|
+
return this.colorAt(this.min);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
get maxColor () {
|
|
68
|
+
return this.colorAt(this.max);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
get stops () {
|
|
72
|
+
return [
|
|
73
|
+
this.minColor,
|
|
74
|
+
this.colorAtProgress(0.25),
|
|
75
|
+
this.colorAtProgress(0.5),
|
|
76
|
+
this.colorAtProgress(0.75),
|
|
77
|
+
this.maxColor,
|
|
78
|
+
];
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
get progress () {
|
|
82
|
+
return this._el.slider.progress;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
progressAt (p) {
|
|
86
|
+
return this._el.slider.progressAt(p);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
propChangedCallback ({name, prop, detail: change}) {
|
|
90
|
+
if (["space", "min", "max", "step", "value", "defaultValue"].includes(name)) {
|
|
91
|
+
prop.applyChange(this._el.slider, change);
|
|
92
|
+
|
|
93
|
+
if (["min", "max", "step", "value", "defaultValue"].includes(name)) {
|
|
94
|
+
prop.applyChange(this._el.spinner, change);
|
|
95
|
+
|
|
96
|
+
if (name === "value" && this.value !== undefined) {
|
|
97
|
+
this._el.spinner.value = Number(this.value.toPrecision(4));
|
|
98
|
+
|
|
99
|
+
if (!CSS.supports("field-sizing", "content")) {
|
|
100
|
+
let valueStr = this._el.spinner.value;
|
|
101
|
+
this._el.spinner.style.setProperty("--value-length", valueStr.length);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
if (name === "defaultColor" || name === "space" || name === "channel" || name === "min" || name === "max") {
|
|
108
|
+
this._el.slider.stops = this.stops;
|
|
109
|
+
|
|
110
|
+
if (name === "space" || name === "channel" || name === "min" || name === "max") {
|
|
111
|
+
this._el.channel_info.innerHTML = `${ this.channelName } <em>(${ this.min } – ${ this.max })</em>`;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
get channelName () {
|
|
117
|
+
return this.channelSpec?.name ?? this.channel;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
static props = {
|
|
121
|
+
space: {
|
|
122
|
+
default: "oklch",
|
|
123
|
+
parse (value) {
|
|
124
|
+
if (value instanceof Self.Color.Space || value === null || value === undefined) {
|
|
125
|
+
return value;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
value += "";
|
|
129
|
+
|
|
130
|
+
return Self.Color.Space.get(value);
|
|
131
|
+
},
|
|
132
|
+
stringify (value) {
|
|
133
|
+
return value?.id;
|
|
134
|
+
},
|
|
135
|
+
},
|
|
136
|
+
channel: {
|
|
137
|
+
type: String,
|
|
138
|
+
default () {
|
|
139
|
+
return Object.keys(this.space.coords)[0];
|
|
140
|
+
},
|
|
141
|
+
// get () {
|
|
142
|
+
// let value = this.props.channel;
|
|
143
|
+
// let space = this.space;
|
|
144
|
+
// console.log(this.props, value, space);
|
|
145
|
+
|
|
146
|
+
// if (!space || space.coords[value]) {
|
|
147
|
+
// return value;
|
|
148
|
+
// }
|
|
149
|
+
|
|
150
|
+
// return Object.keys(this.space.coords)[0];
|
|
151
|
+
// },
|
|
152
|
+
// set: true,
|
|
153
|
+
// reflect: true,
|
|
154
|
+
},
|
|
155
|
+
channelSpec: {
|
|
156
|
+
get () {
|
|
157
|
+
if (this.channel === "alpha") {
|
|
158
|
+
return {
|
|
159
|
+
name: "Alpha",
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
let channelSpec = this.space?.coords[this.channel];
|
|
164
|
+
|
|
165
|
+
if (!channelSpec && this.space) {
|
|
166
|
+
channelSpec = Object.values(this.space.coords)[0];
|
|
167
|
+
console.warn(`Unknown channel ${ this.channel } in space ${ this.space }. Using first channel (${ channelSpec.name }) instead.`);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
return channelSpec;
|
|
171
|
+
},
|
|
172
|
+
},
|
|
173
|
+
refRange: {
|
|
174
|
+
get () {
|
|
175
|
+
let channelSpec = this.channelSpec;
|
|
176
|
+
return channelSpec?.refRange ?? channelSpec?.range ?? [0, 100];
|
|
177
|
+
},
|
|
178
|
+
},
|
|
179
|
+
min: {
|
|
180
|
+
type: Number,
|
|
181
|
+
default () {
|
|
182
|
+
return this.refRange[0];
|
|
183
|
+
},
|
|
184
|
+
},
|
|
185
|
+
max: {
|
|
186
|
+
type: Number,
|
|
187
|
+
default () {
|
|
188
|
+
return this.refRange[1];
|
|
189
|
+
},
|
|
190
|
+
},
|
|
191
|
+
step: {
|
|
192
|
+
type: Number,
|
|
193
|
+
default () {
|
|
194
|
+
return getStep(this.max, this.min, { minSteps: 100 });
|
|
195
|
+
},
|
|
196
|
+
},
|
|
197
|
+
|
|
198
|
+
defaultValue: {
|
|
199
|
+
type: Number,
|
|
200
|
+
default () {
|
|
201
|
+
if (this.channel === "alpha") {
|
|
202
|
+
return this.defaultColor.alpha * 100;
|
|
203
|
+
}
|
|
204
|
+
else if (this.channel in this.defaultColor.space.coords) {
|
|
205
|
+
return this.defaultColor.get(this.channel);
|
|
206
|
+
}
|
|
207
|
+
else {
|
|
208
|
+
let firstChannel = Object.keys(this.defaultColor.space.coords)[0];
|
|
209
|
+
return this.defaultColor.get(firstChannel);
|
|
210
|
+
}
|
|
211
|
+
},
|
|
212
|
+
reflect: {
|
|
213
|
+
from: "value",
|
|
214
|
+
},
|
|
215
|
+
},
|
|
216
|
+
value: {
|
|
217
|
+
type: Number,
|
|
218
|
+
defaultProp: "defaultValue",
|
|
219
|
+
reflect: false,
|
|
220
|
+
},
|
|
221
|
+
|
|
222
|
+
defaultColor: {
|
|
223
|
+
get type () {
|
|
224
|
+
return Self.Color;
|
|
225
|
+
},
|
|
226
|
+
convert (color) {
|
|
227
|
+
return color.to(this.space);
|
|
228
|
+
},
|
|
229
|
+
default () {
|
|
230
|
+
let coords = [];
|
|
231
|
+
for (let channel in this.space.coords) {
|
|
232
|
+
let spec = this.space.coords[channel];
|
|
233
|
+
let range = spec.refRange ?? spec.range ?? [0, 100];
|
|
234
|
+
coords.push((range[0] + range[1]) / 2);
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
return new Self.Color(this.space, coords);
|
|
238
|
+
},
|
|
239
|
+
reflect: {
|
|
240
|
+
from: "color",
|
|
241
|
+
},
|
|
242
|
+
},
|
|
243
|
+
color: {
|
|
244
|
+
get type () {
|
|
245
|
+
return Self.Color;
|
|
246
|
+
},
|
|
247
|
+
get () {
|
|
248
|
+
return this.colorAt(this.value);
|
|
249
|
+
},
|
|
250
|
+
dependencies: ["defaultColor", "space", "channel", "value"],
|
|
251
|
+
set (value) {
|
|
252
|
+
this.defaultColor = value;
|
|
253
|
+
this.value = this.defaultValue;
|
|
254
|
+
},
|
|
255
|
+
},
|
|
256
|
+
};
|
|
257
|
+
|
|
258
|
+
static events = {
|
|
259
|
+
change: {
|
|
260
|
+
from () {
|
|
261
|
+
return this._el.slider;
|
|
262
|
+
},
|
|
263
|
+
},
|
|
264
|
+
input: {
|
|
265
|
+
from () {
|
|
266
|
+
return this._el.slider;
|
|
267
|
+
},
|
|
268
|
+
},
|
|
269
|
+
valuechange: {
|
|
270
|
+
propchange: "value",
|
|
271
|
+
},
|
|
272
|
+
colorchange: {
|
|
273
|
+
propchange: "color",
|
|
274
|
+
},
|
|
275
|
+
};
|
|
276
|
+
|
|
277
|
+
static formAssociated = {
|
|
278
|
+
like: el => el._el.slider,
|
|
279
|
+
role: "slider",
|
|
280
|
+
valueProp: "value",
|
|
281
|
+
changeEvent: "valuechange",
|
|
282
|
+
};
|
|
283
|
+
};
|
|
284
|
+
|
|
285
|
+
Self.define();
|
|
286
|
+
|
|
287
|
+
export default Self;
|
|
Binary file
|