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.
Files changed (498) hide show
  1. package/README.md +49 -12
  2. package/_build/copy-config.js +11 -1
  3. package/_build/copy-config.json +2 -2
  4. package/_build/eleventy.js +27 -1
  5. package/_build/filters-extra.js +3 -0
  6. package/_includes/component.njk +69 -0
  7. package/_includes/partials/_nav-links.njk +19 -0
  8. package/_redirects +9 -2
  9. package/assets/css/style.css +78 -1
  10. package/assets/js/index.js +11 -10
  11. package/data/components.json +12 -0
  12. package/debug.html +447 -0
  13. package/eslint.config.js +316 -0
  14. package/index.js +10 -4
  15. package/logo.svg +22 -44
  16. package/package.json +12 -5
  17. package/src/channel-picker/README.md +103 -0
  18. package/src/channel-picker/channel-picker.css +31 -0
  19. package/src/channel-picker/channel-picker.js +168 -0
  20. package/src/channel-picker/channel-picker.webp +0 -0
  21. package/src/channel-slider/README.md +165 -0
  22. package/src/channel-slider/channel-slider.css +61 -0
  23. package/src/channel-slider/channel-slider.js +287 -0
  24. package/src/channel-slider/channel-slider.webp +0 -0
  25. package/src/color-chart/README.md +129 -0
  26. package/src/color-chart/color-chart-global.css +97 -0
  27. package/src/color-chart/color-chart.css +112 -0
  28. package/src/color-chart/color-chart.js +441 -0
  29. package/src/color-chart/color-chart.webp +0 -0
  30. package/src/color-inline/README.md +72 -0
  31. package/{color-swatch/color-swatch.css → src/color-inline/color-inline.css} +11 -4
  32. package/src/color-inline/color-inline.js +85 -0
  33. package/src/color-inline/color-inline.webp +0 -0
  34. package/src/color-inline/style.css +14 -0
  35. package/src/color-picker/README.md +150 -0
  36. package/src/color-picker/color-picker.css +35 -0
  37. package/src/color-picker/color-picker.js +251 -0
  38. package/src/color-picker/color-picker.webp +0 -0
  39. package/src/color-scale/README.md +75 -0
  40. package/src/color-scale/color-scale.css +40 -0
  41. package/src/color-scale/color-scale.js +164 -0
  42. package/src/color-scale/color-scale.webp +0 -0
  43. package/src/color-slider/README.md +220 -0
  44. package/src/color-slider/color-slider.css +174 -0
  45. package/src/color-slider/color-slider.js +320 -0
  46. package/src/color-slider/color-slider.webp +0 -0
  47. package/src/color-swatch/README.md +359 -0
  48. package/src/color-swatch/color-swatch.css +230 -0
  49. package/src/color-swatch/color-swatch.js +252 -0
  50. package/src/color-swatch/color-swatch.webp +0 -0
  51. package/src/common/color-element.js +86 -0
  52. package/src/common/dom.js +61 -0
  53. package/src/common/util.js +55 -0
  54. package/src/gamut-badge/README.md +145 -0
  55. package/src/gamut-badge/gamut-badge.css +78 -0
  56. package/src/gamut-badge/gamut-badge.js +121 -0
  57. package/src/gamut-badge/gamut-badge.webp +0 -0
  58. package/src/index.js.njk +7 -0
  59. package/src/space-picker/README.md +121 -0
  60. package/src/space-picker/space-picker.css +23 -0
  61. package/src/space-picker/space-picker.js +213 -0
  62. package/src/space-picker/space-picker.webp +0 -0
  63. package/src/src.json +3 -0
  64. package/_data/eleventyComputed.11tydata.js +0 -29
  65. package/color-gamut/README.md +0 -75
  66. package/color-gamut/color-gamut.js +0 -172
  67. package/color-gamut/style.css +0 -32
  68. package/color-slider/README.md +0 -84
  69. package/color-slider/color-slider.js +0 -79
  70. package/color-slider/style.css +0 -65
  71. package/color-swatch/color-swatch.js +0 -79
  72. package/color-swatch/index.njk +0 -40
  73. package/common/attributes.js +0 -68
  74. package/common/color.js +0 -10
  75. package/css-color/css-color.js +0 -256
  76. package/css-color/index.njk +0 -43
  77. package/css-color/style.css +0 -67
  78. package/lib/README.md +0 -4
  79. package/lib/colorjs.io/LICENSE +0 -21
  80. package/lib/colorjs.io/README.json +0 -3
  81. package/lib/colorjs.io/README.md +0 -257
  82. package/lib/colorjs.io/colorjs.io/LICENSE +0 -21
  83. package/lib/colorjs.io/colorjs.io/README.json +0 -3
  84. package/lib/colorjs.io/colorjs.io/README.md +0 -257
  85. package/lib/colorjs.io/colorjs.io/dist/color-fn.cjs +0 -5437
  86. package/lib/colorjs.io/colorjs.io/dist/color-fn.cjs.map +0 -1
  87. package/lib/colorjs.io/colorjs.io/dist/color-fn.legacy.cjs +0 -7048
  88. package/lib/colorjs.io/colorjs.io/dist/color-fn.legacy.cjs.map +0 -1
  89. package/lib/colorjs.io/colorjs.io/dist/color-fn.legacy.min.cjs +0 -2
  90. package/lib/colorjs.io/colorjs.io/dist/color-fn.legacy.min.cjs.map +0 -1
  91. package/lib/colorjs.io/colorjs.io/dist/color-fn.min.cjs +0 -2
  92. package/lib/colorjs.io/colorjs.io/dist/color-fn.min.cjs.map +0 -1
  93. package/lib/colorjs.io/colorjs.io/dist/color.cjs +0 -5759
  94. package/lib/colorjs.io/colorjs.io/dist/color.cjs.map +0 -1
  95. package/lib/colorjs.io/colorjs.io/dist/color.global.js +0 -5760
  96. package/lib/colorjs.io/colorjs.io/dist/color.global.js.map +0 -1
  97. package/lib/colorjs.io/colorjs.io/dist/color.global.legacy.js +0 -7400
  98. package/lib/colorjs.io/colorjs.io/dist/color.global.legacy.js.map +0 -1
  99. package/lib/colorjs.io/colorjs.io/dist/color.global.legacy.min.js +0 -2
  100. package/lib/colorjs.io/colorjs.io/dist/color.global.legacy.min.js.map +0 -1
  101. package/lib/colorjs.io/colorjs.io/dist/color.global.min.js +0 -2
  102. package/lib/colorjs.io/colorjs.io/dist/color.global.min.js.map +0 -1
  103. package/lib/colorjs.io/colorjs.io/dist/color.js +0 -5755
  104. package/lib/colorjs.io/colorjs.io/dist/color.js.map +0 -1
  105. package/lib/colorjs.io/colorjs.io/dist/color.legacy.cjs +0 -7399
  106. package/lib/colorjs.io/colorjs.io/dist/color.legacy.cjs.map +0 -1
  107. package/lib/colorjs.io/colorjs.io/dist/color.legacy.js +0 -7395
  108. package/lib/colorjs.io/colorjs.io/dist/color.legacy.js.map +0 -1
  109. package/lib/colorjs.io/colorjs.io/dist/color.legacy.min.cjs +0 -2
  110. package/lib/colorjs.io/colorjs.io/dist/color.legacy.min.cjs.map +0 -1
  111. package/lib/colorjs.io/colorjs.io/dist/color.legacy.min.js +0 -2
  112. package/lib/colorjs.io/colorjs.io/dist/color.legacy.min.js.map +0 -1
  113. package/lib/colorjs.io/colorjs.io/dist/color.min.cjs +0 -2
  114. package/lib/colorjs.io/colorjs.io/dist/color.min.cjs.map +0 -1
  115. package/lib/colorjs.io/colorjs.io/dist/color.min.js +0 -2
  116. package/lib/colorjs.io/colorjs.io/dist/color.min.js.map +0 -1
  117. package/lib/colorjs.io/colorjs.io/package.json +0 -113
  118. package/lib/colorjs.io/colorjs.io/src/CATs.js +0 -131
  119. package/lib/colorjs.io/colorjs.io/src/adapt.js +0 -62
  120. package/lib/colorjs.io/colorjs.io/src/angles.js +0 -44
  121. package/lib/colorjs.io/colorjs.io/src/chromaticity.js +0 -33
  122. package/lib/colorjs.io/colorjs.io/src/clone.js +0 -7
  123. package/lib/colorjs.io/colorjs.io/src/color.js +0 -201
  124. package/lib/colorjs.io/colorjs.io/src/contrast/APCA.js +0 -102
  125. package/lib/colorjs.io/colorjs.io/src/contrast/Lstar.js +0 -17
  126. package/lib/colorjs.io/colorjs.io/src/contrast/Michelson.js +0 -22
  127. package/lib/colorjs.io/colorjs.io/src/contrast/WCAG21.js +0 -20
  128. package/lib/colorjs.io/colorjs.io/src/contrast/Weber.js +0 -27
  129. package/lib/colorjs.io/colorjs.io/src/contrast/deltaPhi.js +0 -25
  130. package/lib/colorjs.io/colorjs.io/src/contrast/index.js +0 -6
  131. package/lib/colorjs.io/colorjs.io/src/contrast.js +0 -28
  132. package/lib/colorjs.io/colorjs.io/src/defaults.js +0 -12
  133. package/lib/colorjs.io/colorjs.io/src/deltaE/deltaE2000.js +0 -179
  134. package/lib/colorjs.io/colorjs.io/src/deltaE/deltaE76.js +0 -7
  135. package/lib/colorjs.io/colorjs.io/src/deltaE/deltaECMC.js +0 -114
  136. package/lib/colorjs.io/colorjs.io/src/deltaE/deltaEHCT.js +0 -51
  137. package/lib/colorjs.io/colorjs.io/src/deltaE/deltaEITP.js +0 -24
  138. package/lib/colorjs.io/colorjs.io/src/deltaE/deltaEJz.js +0 -43
  139. package/lib/colorjs.io/colorjs.io/src/deltaE/deltaEOK.js +0 -19
  140. package/lib/colorjs.io/colorjs.io/src/deltaE/index.js +0 -27
  141. package/lib/colorjs.io/colorjs.io/src/deltaE.js +0 -19
  142. package/lib/colorjs.io/colorjs.io/src/display.js +0 -83
  143. package/lib/colorjs.io/colorjs.io/src/distance.js +0 -21
  144. package/lib/colorjs.io/colorjs.io/src/equals.js +0 -10
  145. package/lib/colorjs.io/colorjs.io/src/get.js +0 -11
  146. package/lib/colorjs.io/colorjs.io/src/getAll.js +0 -20
  147. package/lib/colorjs.io/colorjs.io/src/getColor.js +0 -36
  148. package/lib/colorjs.io/colorjs.io/src/hooks.js +0 -37
  149. package/lib/colorjs.io/colorjs.io/src/inGamut.js +0 -25
  150. package/lib/colorjs.io/colorjs.io/src/index-fn.js +0 -28
  151. package/lib/colorjs.io/colorjs.io/src/index.js +0 -38
  152. package/lib/colorjs.io/colorjs.io/src/interpolation.js +0 -222
  153. package/lib/colorjs.io/colorjs.io/src/keywords.js +0 -158
  154. package/lib/colorjs.io/colorjs.io/src/luminance.js +0 -27
  155. package/lib/colorjs.io/colorjs.io/src/multiply-matrices.js +0 -44
  156. package/lib/colorjs.io/colorjs.io/src/parse.js +0 -198
  157. package/lib/colorjs.io/colorjs.io/src/rgbspace.js +0 -64
  158. package/lib/colorjs.io/colorjs.io/src/serialize.js +0 -86
  159. package/lib/colorjs.io/colorjs.io/src/set.js +0 -33
  160. package/lib/colorjs.io/colorjs.io/src/setAll.js +0 -12
  161. package/lib/colorjs.io/colorjs.io/src/space-accessors.js +0 -86
  162. package/lib/colorjs.io/colorjs.io/src/space.js +0 -440
  163. package/lib/colorjs.io/colorjs.io/src/spaces/a98rgb-linear.js +0 -28
  164. package/lib/colorjs.io/colorjs.io/src/spaces/a98rgb.js +0 -11
  165. package/lib/colorjs.io/colorjs.io/src/spaces/acescc.js +0 -76
  166. package/lib/colorjs.io/colorjs.io/src/spaces/acescg.js +0 -54
  167. package/lib/colorjs.io/colorjs.io/src/spaces/cam16.js +0 -362
  168. package/lib/colorjs.io/colorjs.io/src/spaces/hct.js +0 -157
  169. package/lib/colorjs.io/colorjs.io/src/spaces/hpluv.js +0 -130
  170. package/lib/colorjs.io/colorjs.io/src/spaces/hsl.js +0 -91
  171. package/lib/colorjs.io/colorjs.io/src/spaces/hsluv.js +0 -162
  172. package/lib/colorjs.io/colorjs.io/src/spaces/hsv.js +0 -65
  173. package/lib/colorjs.io/colorjs.io/src/spaces/hwb.js +0 -58
  174. package/lib/colorjs.io/colorjs.io/src/spaces/ictcp.js +0 -133
  175. package/lib/colorjs.io/colorjs.io/src/spaces/index-fn-hdr.js +0 -7
  176. package/lib/colorjs.io/colorjs.io/src/spaces/index-fn.js +0 -29
  177. package/lib/colorjs.io/colorjs.io/src/spaces/index.js +0 -8
  178. package/lib/colorjs.io/colorjs.io/src/spaces/jzazbz.js +0 -118
  179. package/lib/colorjs.io/colorjs.io/src/spaces/jzczhz.js +0 -53
  180. package/lib/colorjs.io/colorjs.io/src/spaces/lab-d65.js +0 -74
  181. package/lib/colorjs.io/colorjs.io/src/spaces/lab.js +0 -74
  182. package/lib/colorjs.io/colorjs.io/src/spaces/lch.js +0 -67
  183. package/lib/colorjs.io/colorjs.io/src/spaces/lchuv.js +0 -68
  184. package/lib/colorjs.io/colorjs.io/src/spaces/luv.js +0 -85
  185. package/lib/colorjs.io/colorjs.io/src/spaces/oklab.js +0 -74
  186. package/lib/colorjs.io/colorjs.io/src/spaces/oklch.js +0 -68
  187. package/lib/colorjs.io/colorjs.io/src/spaces/p3-linear.js +0 -22
  188. package/lib/colorjs.io/colorjs.io/src/spaces/p3.js +0 -13
  189. package/lib/colorjs.io/colorjs.io/src/spaces/prophoto-linear.js +0 -28
  190. package/lib/colorjs.io/colorjs.io/src/spaces/prophoto.js +0 -19
  191. package/lib/colorjs.io/colorjs.io/src/spaces/rec2020-linear.js +0 -27
  192. package/lib/colorjs.io/colorjs.io/src/spaces/rec2020.js +0 -31
  193. package/lib/colorjs.io/colorjs.io/src/spaces/rec2100-hlg.js +0 -49
  194. package/lib/colorjs.io/colorjs.io/src/spaces/rec2100-pq.js +0 -37
  195. package/lib/colorjs.io/colorjs.io/src/spaces/srgb-linear.js +0 -30
  196. package/lib/colorjs.io/colorjs.io/src/spaces/srgb.js +0 -127
  197. package/lib/colorjs.io/colorjs.io/src/spaces/xyz-abs-d65.js +0 -40
  198. package/lib/colorjs.io/colorjs.io/src/spaces/xyz-d50.js +0 -12
  199. package/lib/colorjs.io/colorjs.io/src/spaces/xyz-d65.js +0 -18
  200. package/lib/colorjs.io/colorjs.io/src/to.js +0 -26
  201. package/lib/colorjs.io/colorjs.io/src/toGamut.js +0 -310
  202. package/lib/colorjs.io/colorjs.io/src/util.js +0 -254
  203. package/lib/colorjs.io/colorjs.io/src/variations.js +0 -14
  204. package/lib/colorjs.io/colorjs.io/types/index.d.cts +0 -4
  205. package/lib/colorjs.io/colorjs.io/types/index.d.ts +0 -42
  206. package/lib/colorjs.io/colorjs.io/types/src/CATs.d.ts +0 -13
  207. package/lib/colorjs.io/colorjs.io/types/src/adapt.d.ts +0 -12
  208. package/lib/colorjs.io/colorjs.io/types/src/angles.d.ts +0 -7
  209. package/lib/colorjs.io/colorjs.io/types/src/chromaticity.d.ts +0 -7
  210. package/lib/colorjs.io/colorjs.io/types/src/clone.d.ts +0 -3
  211. package/lib/colorjs.io/colorjs.io/types/src/color.d.ts +0 -160
  212. package/lib/colorjs.io/colorjs.io/types/src/contrast/APCA.d.ts +0 -5
  213. package/lib/colorjs.io/colorjs.io/types/src/contrast/Lstar.d.ts +0 -5
  214. package/lib/colorjs.io/colorjs.io/types/src/contrast/Michelson.d.ts +0 -5
  215. package/lib/colorjs.io/colorjs.io/types/src/contrast/WCAG21.d.ts +0 -5
  216. package/lib/colorjs.io/colorjs.io/types/src/contrast/Weber.d.ts +0 -5
  217. package/lib/colorjs.io/colorjs.io/types/src/contrast/deltaPhi.d.ts +0 -5
  218. package/lib/colorjs.io/colorjs.io/types/src/contrast/index.d.ts +0 -11
  219. package/lib/colorjs.io/colorjs.io/types/src/contrast.d.ts +0 -12
  220. package/lib/colorjs.io/colorjs.io/types/src/defaults.d.ts +0 -2
  221. package/lib/colorjs.io/colorjs.io/types/src/deltaE/deltaE2000.d.ts +0 -11
  222. package/lib/colorjs.io/colorjs.io/types/src/deltaE/deltaE76.d.ts +0 -5
  223. package/lib/colorjs.io/colorjs.io/types/src/deltaE/deltaECMC.d.ts +0 -9
  224. package/lib/colorjs.io/colorjs.io/types/src/deltaE/deltaEHCT.d.ts +0 -5
  225. package/lib/colorjs.io/colorjs.io/types/src/deltaE/deltaEITP.d.ts +0 -5
  226. package/lib/colorjs.io/colorjs.io/types/src/deltaE/deltaEJz.d.ts +0 -5
  227. package/lib/colorjs.io/colorjs.io/types/src/deltaE/deltaEOK.d.ts +0 -5
  228. package/lib/colorjs.io/colorjs.io/types/src/deltaE/index.d.ts +0 -14
  229. package/lib/colorjs.io/colorjs.io/types/src/deltaE.d.ts +0 -12
  230. package/lib/colorjs.io/colorjs.io/types/src/display.d.ts +0 -17
  231. package/lib/colorjs.io/colorjs.io/types/src/distance.d.ts +0 -8
  232. package/lib/colorjs.io/colorjs.io/types/src/equals.d.ts +0 -3
  233. package/lib/colorjs.io/colorjs.io/types/src/get.d.ts +0 -4
  234. package/lib/colorjs.io/colorjs.io/types/src/getAll.d.ts +0 -7
  235. package/lib/colorjs.io/colorjs.io/types/src/getColor.d.ts +0 -4
  236. package/lib/colorjs.io/colorjs.io/types/src/hooks.d.ts +0 -52
  237. package/lib/colorjs.io/colorjs.io/types/src/inGamut.d.ts +0 -8
  238. package/lib/colorjs.io/colorjs.io/types/src/index-fn.d.cts +0 -1
  239. package/lib/colorjs.io/colorjs.io/types/src/index-fn.d.ts +0 -63
  240. package/lib/colorjs.io/colorjs.io/types/src/index.d.ts +0 -125
  241. package/lib/colorjs.io/colorjs.io/types/src/interpolation.d.ts +0 -77
  242. package/lib/colorjs.io/colorjs.io/types/src/keywords.d.ts +0 -2
  243. package/lib/colorjs.io/colorjs.io/types/src/luminance.d.ts +0 -10
  244. package/lib/colorjs.io/colorjs.io/types/src/multiply-matrices.d.ts +0 -9
  245. package/lib/colorjs.io/colorjs.io/types/src/parse.d.ts +0 -16
  246. package/lib/colorjs.io/colorjs.io/types/src/rgbspace.d.ts +0 -10
  247. package/lib/colorjs.io/colorjs.io/types/src/serialize.d.ts +0 -13
  248. package/lib/colorjs.io/colorjs.io/types/src/set.d.ts +0 -18
  249. package/lib/colorjs.io/colorjs.io/types/src/setAll.d.ts +0 -14
  250. package/lib/colorjs.io/colorjs.io/types/src/space-accessors.d.ts +0 -1
  251. package/lib/colorjs.io/colorjs.io/types/src/space-coord-accessors.d.ts +0 -69
  252. package/lib/colorjs.io/colorjs.io/types/src/space.d.ts +0 -143
  253. package/lib/colorjs.io/colorjs.io/types/src/spaces/a98rgb-linear.d.ts +0 -3
  254. package/lib/colorjs.io/colorjs.io/types/src/spaces/a98rgb.d.ts +0 -3
  255. package/lib/colorjs.io/colorjs.io/types/src/spaces/acescc.d.ts +0 -3
  256. package/lib/colorjs.io/colorjs.io/types/src/spaces/acescg.d.ts +0 -3
  257. package/lib/colorjs.io/colorjs.io/types/src/spaces/hpluv.d.ts +0 -3
  258. package/lib/colorjs.io/colorjs.io/types/src/spaces/hsl.d.ts +0 -3
  259. package/lib/colorjs.io/colorjs.io/types/src/spaces/hsluv.d.ts +0 -3
  260. package/lib/colorjs.io/colorjs.io/types/src/spaces/hsv.d.ts +0 -3
  261. package/lib/colorjs.io/colorjs.io/types/src/spaces/hwb.d.ts +0 -3
  262. package/lib/colorjs.io/colorjs.io/types/src/spaces/ictcp.d.ts +0 -3
  263. package/lib/colorjs.io/colorjs.io/types/src/spaces/index-fn-hdr.d.ts +0 -9
  264. package/lib/colorjs.io/colorjs.io/types/src/spaces/index-fn.d.ts +0 -29
  265. package/lib/colorjs.io/colorjs.io/types/src/spaces/index.d.ts +0 -4
  266. package/lib/colorjs.io/colorjs.io/types/src/spaces/jzazbz.d.ts +0 -3
  267. package/lib/colorjs.io/colorjs.io/types/src/spaces/jzczhz.d.ts +0 -3
  268. package/lib/colorjs.io/colorjs.io/types/src/spaces/lab-d65.d.ts +0 -3
  269. package/lib/colorjs.io/colorjs.io/types/src/spaces/lab.d.ts +0 -3
  270. package/lib/colorjs.io/colorjs.io/types/src/spaces/lch.d.ts +0 -3
  271. package/lib/colorjs.io/colorjs.io/types/src/spaces/lchuv.d.ts +0 -3
  272. package/lib/colorjs.io/colorjs.io/types/src/spaces/luv.d.ts +0 -3
  273. package/lib/colorjs.io/colorjs.io/types/src/spaces/oklab.d.ts +0 -3
  274. package/lib/colorjs.io/colorjs.io/types/src/spaces/oklch.d.ts +0 -3
  275. package/lib/colorjs.io/colorjs.io/types/src/spaces/p3-linear.d.ts +0 -3
  276. package/lib/colorjs.io/colorjs.io/types/src/spaces/p3.d.ts +0 -3
  277. package/lib/colorjs.io/colorjs.io/types/src/spaces/prophoto-linear.d.ts +0 -3
  278. package/lib/colorjs.io/colorjs.io/types/src/spaces/prophoto.d.ts +0 -3
  279. package/lib/colorjs.io/colorjs.io/types/src/spaces/rec2020-linear.d.ts +0 -3
  280. package/lib/colorjs.io/colorjs.io/types/src/spaces/rec2020.d.ts +0 -3
  281. package/lib/colorjs.io/colorjs.io/types/src/spaces/rec2100-hlg.d.ts +0 -3
  282. package/lib/colorjs.io/colorjs.io/types/src/spaces/rec2100-pq.d.ts +0 -3
  283. package/lib/colorjs.io/colorjs.io/types/src/spaces/srgb-linear.d.ts +0 -3
  284. package/lib/colorjs.io/colorjs.io/types/src/spaces/srgb.d.ts +0 -3
  285. package/lib/colorjs.io/colorjs.io/types/src/spaces/xyz-abs-d65.d.ts +0 -3
  286. package/lib/colorjs.io/colorjs.io/types/src/spaces/xyz-d50.d.ts +0 -3
  287. package/lib/colorjs.io/colorjs.io/types/src/spaces/xyz-d65.d.ts +0 -3
  288. package/lib/colorjs.io/colorjs.io/types/src/to.d.ts +0 -14
  289. package/lib/colorjs.io/colorjs.io/types/src/toGamut.d.ts +0 -45
  290. package/lib/colorjs.io/colorjs.io/types/src/util.d.ts +0 -58
  291. package/lib/colorjs.io/colorjs.io/types/src/variations.d.ts +0 -5
  292. package/lib/colorjs.io/dist/color-fn.cjs +0 -5437
  293. package/lib/colorjs.io/dist/color-fn.cjs.map +0 -1
  294. package/lib/colorjs.io/dist/color-fn.legacy.cjs +0 -7048
  295. package/lib/colorjs.io/dist/color-fn.legacy.cjs.map +0 -1
  296. package/lib/colorjs.io/dist/color-fn.legacy.min.cjs +0 -2
  297. package/lib/colorjs.io/dist/color-fn.legacy.min.cjs.map +0 -1
  298. package/lib/colorjs.io/dist/color-fn.min.cjs +0 -2
  299. package/lib/colorjs.io/dist/color-fn.min.cjs.map +0 -1
  300. package/lib/colorjs.io/dist/color.cjs +0 -5759
  301. package/lib/colorjs.io/dist/color.cjs.map +0 -1
  302. package/lib/colorjs.io/dist/color.global.js +0 -5760
  303. package/lib/colorjs.io/dist/color.global.js.map +0 -1
  304. package/lib/colorjs.io/dist/color.global.legacy.js +0 -7400
  305. package/lib/colorjs.io/dist/color.global.legacy.js.map +0 -1
  306. package/lib/colorjs.io/dist/color.global.legacy.min.js +0 -2
  307. package/lib/colorjs.io/dist/color.global.legacy.min.js.map +0 -1
  308. package/lib/colorjs.io/dist/color.global.min.js +0 -2
  309. package/lib/colorjs.io/dist/color.global.min.js.map +0 -1
  310. package/lib/colorjs.io/dist/color.js +0 -5755
  311. package/lib/colorjs.io/dist/color.js.map +0 -1
  312. package/lib/colorjs.io/dist/color.legacy.cjs +0 -7399
  313. package/lib/colorjs.io/dist/color.legacy.cjs.map +0 -1
  314. package/lib/colorjs.io/dist/color.legacy.js +0 -7395
  315. package/lib/colorjs.io/dist/color.legacy.js.map +0 -1
  316. package/lib/colorjs.io/dist/color.legacy.min.cjs +0 -2
  317. package/lib/colorjs.io/dist/color.legacy.min.cjs.map +0 -1
  318. package/lib/colorjs.io/dist/color.legacy.min.js +0 -2
  319. package/lib/colorjs.io/dist/color.legacy.min.js.map +0 -1
  320. package/lib/colorjs.io/dist/color.min.cjs +0 -2
  321. package/lib/colorjs.io/dist/color.min.cjs.map +0 -1
  322. package/lib/colorjs.io/dist/color.min.js +0 -2
  323. package/lib/colorjs.io/dist/color.min.js.map +0 -1
  324. package/lib/colorjs.io/package.json +0 -113
  325. package/lib/colorjs.io/src/CATs.js +0 -131
  326. package/lib/colorjs.io/src/adapt.js +0 -62
  327. package/lib/colorjs.io/src/angles.js +0 -44
  328. package/lib/colorjs.io/src/chromaticity.js +0 -33
  329. package/lib/colorjs.io/src/clone.js +0 -7
  330. package/lib/colorjs.io/src/color.js +0 -201
  331. package/lib/colorjs.io/src/contrast/APCA.js +0 -102
  332. package/lib/colorjs.io/src/contrast/Lstar.js +0 -17
  333. package/lib/colorjs.io/src/contrast/Michelson.js +0 -22
  334. package/lib/colorjs.io/src/contrast/WCAG21.js +0 -20
  335. package/lib/colorjs.io/src/contrast/Weber.js +0 -27
  336. package/lib/colorjs.io/src/contrast/deltaPhi.js +0 -25
  337. package/lib/colorjs.io/src/contrast/index.js +0 -6
  338. package/lib/colorjs.io/src/contrast.js +0 -28
  339. package/lib/colorjs.io/src/defaults.js +0 -12
  340. package/lib/colorjs.io/src/deltaE/deltaE2000.js +0 -179
  341. package/lib/colorjs.io/src/deltaE/deltaE76.js +0 -7
  342. package/lib/colorjs.io/src/deltaE/deltaECMC.js +0 -114
  343. package/lib/colorjs.io/src/deltaE/deltaEHCT.js +0 -51
  344. package/lib/colorjs.io/src/deltaE/deltaEITP.js +0 -24
  345. package/lib/colorjs.io/src/deltaE/deltaEJz.js +0 -43
  346. package/lib/colorjs.io/src/deltaE/deltaEOK.js +0 -19
  347. package/lib/colorjs.io/src/deltaE/index.js +0 -27
  348. package/lib/colorjs.io/src/deltaE.js +0 -19
  349. package/lib/colorjs.io/src/display.js +0 -83
  350. package/lib/colorjs.io/src/distance.js +0 -21
  351. package/lib/colorjs.io/src/equals.js +0 -10
  352. package/lib/colorjs.io/src/get.js +0 -11
  353. package/lib/colorjs.io/src/getAll.js +0 -20
  354. package/lib/colorjs.io/src/getColor.js +0 -36
  355. package/lib/colorjs.io/src/hooks.js +0 -37
  356. package/lib/colorjs.io/src/inGamut.js +0 -25
  357. package/lib/colorjs.io/src/index-fn.js +0 -28
  358. package/lib/colorjs.io/src/index.js +0 -38
  359. package/lib/colorjs.io/src/interpolation.js +0 -222
  360. package/lib/colorjs.io/src/keywords.js +0 -158
  361. package/lib/colorjs.io/src/luminance.js +0 -27
  362. package/lib/colorjs.io/src/multiply-matrices.js +0 -44
  363. package/lib/colorjs.io/src/parse.js +0 -198
  364. package/lib/colorjs.io/src/rgbspace.js +0 -64
  365. package/lib/colorjs.io/src/serialize.js +0 -86
  366. package/lib/colorjs.io/src/set.js +0 -33
  367. package/lib/colorjs.io/src/setAll.js +0 -12
  368. package/lib/colorjs.io/src/space-accessors.js +0 -86
  369. package/lib/colorjs.io/src/space.js +0 -440
  370. package/lib/colorjs.io/src/spaces/a98rgb-linear.js +0 -28
  371. package/lib/colorjs.io/src/spaces/a98rgb.js +0 -11
  372. package/lib/colorjs.io/src/spaces/acescc.js +0 -76
  373. package/lib/colorjs.io/src/spaces/acescg.js +0 -54
  374. package/lib/colorjs.io/src/spaces/cam16.js +0 -362
  375. package/lib/colorjs.io/src/spaces/hct.js +0 -157
  376. package/lib/colorjs.io/src/spaces/hpluv.js +0 -130
  377. package/lib/colorjs.io/src/spaces/hsl.js +0 -91
  378. package/lib/colorjs.io/src/spaces/hsluv.js +0 -162
  379. package/lib/colorjs.io/src/spaces/hsv.js +0 -65
  380. package/lib/colorjs.io/src/spaces/hwb.js +0 -58
  381. package/lib/colorjs.io/src/spaces/ictcp.js +0 -133
  382. package/lib/colorjs.io/src/spaces/index-fn-hdr.js +0 -7
  383. package/lib/colorjs.io/src/spaces/index-fn.js +0 -29
  384. package/lib/colorjs.io/src/spaces/index.js +0 -8
  385. package/lib/colorjs.io/src/spaces/jzazbz.js +0 -118
  386. package/lib/colorjs.io/src/spaces/jzczhz.js +0 -53
  387. package/lib/colorjs.io/src/spaces/lab-d65.js +0 -74
  388. package/lib/colorjs.io/src/spaces/lab.js +0 -74
  389. package/lib/colorjs.io/src/spaces/lch.js +0 -67
  390. package/lib/colorjs.io/src/spaces/lchuv.js +0 -68
  391. package/lib/colorjs.io/src/spaces/luv.js +0 -85
  392. package/lib/colorjs.io/src/spaces/oklab.js +0 -74
  393. package/lib/colorjs.io/src/spaces/oklch.js +0 -68
  394. package/lib/colorjs.io/src/spaces/p3-linear.js +0 -22
  395. package/lib/colorjs.io/src/spaces/p3.js +0 -13
  396. package/lib/colorjs.io/src/spaces/prophoto-linear.js +0 -28
  397. package/lib/colorjs.io/src/spaces/prophoto.js +0 -19
  398. package/lib/colorjs.io/src/spaces/rec2020-linear.js +0 -27
  399. package/lib/colorjs.io/src/spaces/rec2020.js +0 -31
  400. package/lib/colorjs.io/src/spaces/rec2100-hlg.js +0 -49
  401. package/lib/colorjs.io/src/spaces/rec2100-pq.js +0 -37
  402. package/lib/colorjs.io/src/spaces/srgb-linear.js +0 -30
  403. package/lib/colorjs.io/src/spaces/srgb.js +0 -127
  404. package/lib/colorjs.io/src/spaces/xyz-abs-d65.js +0 -40
  405. package/lib/colorjs.io/src/spaces/xyz-d50.js +0 -12
  406. package/lib/colorjs.io/src/spaces/xyz-d65.js +0 -18
  407. package/lib/colorjs.io/src/to.js +0 -26
  408. package/lib/colorjs.io/src/toGamut.js +0 -310
  409. package/lib/colorjs.io/src/util.js +0 -254
  410. package/lib/colorjs.io/src/variations.js +0 -14
  411. package/lib/colorjs.io/types/index.d.cts +0 -4
  412. package/lib/colorjs.io/types/index.d.ts +0 -42
  413. package/lib/colorjs.io/types/src/CATs.d.ts +0 -13
  414. package/lib/colorjs.io/types/src/adapt.d.ts +0 -12
  415. package/lib/colorjs.io/types/src/angles.d.ts +0 -7
  416. package/lib/colorjs.io/types/src/chromaticity.d.ts +0 -7
  417. package/lib/colorjs.io/types/src/clone.d.ts +0 -3
  418. package/lib/colorjs.io/types/src/color.d.ts +0 -160
  419. package/lib/colorjs.io/types/src/contrast/APCA.d.ts +0 -5
  420. package/lib/colorjs.io/types/src/contrast/Lstar.d.ts +0 -5
  421. package/lib/colorjs.io/types/src/contrast/Michelson.d.ts +0 -5
  422. package/lib/colorjs.io/types/src/contrast/WCAG21.d.ts +0 -5
  423. package/lib/colorjs.io/types/src/contrast/Weber.d.ts +0 -5
  424. package/lib/colorjs.io/types/src/contrast/deltaPhi.d.ts +0 -5
  425. package/lib/colorjs.io/types/src/contrast/index.d.ts +0 -11
  426. package/lib/colorjs.io/types/src/contrast.d.ts +0 -12
  427. package/lib/colorjs.io/types/src/defaults.d.ts +0 -2
  428. package/lib/colorjs.io/types/src/deltaE/deltaE2000.d.ts +0 -11
  429. package/lib/colorjs.io/types/src/deltaE/deltaE76.d.ts +0 -5
  430. package/lib/colorjs.io/types/src/deltaE/deltaECMC.d.ts +0 -9
  431. package/lib/colorjs.io/types/src/deltaE/deltaEHCT.d.ts +0 -5
  432. package/lib/colorjs.io/types/src/deltaE/deltaEITP.d.ts +0 -5
  433. package/lib/colorjs.io/types/src/deltaE/deltaEJz.d.ts +0 -5
  434. package/lib/colorjs.io/types/src/deltaE/deltaEOK.d.ts +0 -5
  435. package/lib/colorjs.io/types/src/deltaE/index.d.ts +0 -14
  436. package/lib/colorjs.io/types/src/deltaE.d.ts +0 -12
  437. package/lib/colorjs.io/types/src/display.d.ts +0 -17
  438. package/lib/colorjs.io/types/src/distance.d.ts +0 -8
  439. package/lib/colorjs.io/types/src/equals.d.ts +0 -3
  440. package/lib/colorjs.io/types/src/get.d.ts +0 -4
  441. package/lib/colorjs.io/types/src/getAll.d.ts +0 -7
  442. package/lib/colorjs.io/types/src/getColor.d.ts +0 -4
  443. package/lib/colorjs.io/types/src/hooks.d.ts +0 -52
  444. package/lib/colorjs.io/types/src/inGamut.d.ts +0 -8
  445. package/lib/colorjs.io/types/src/index-fn.d.cts +0 -1
  446. package/lib/colorjs.io/types/src/index-fn.d.ts +0 -63
  447. package/lib/colorjs.io/types/src/index.d.ts +0 -125
  448. package/lib/colorjs.io/types/src/interpolation.d.ts +0 -77
  449. package/lib/colorjs.io/types/src/keywords.d.ts +0 -2
  450. package/lib/colorjs.io/types/src/luminance.d.ts +0 -10
  451. package/lib/colorjs.io/types/src/multiply-matrices.d.ts +0 -9
  452. package/lib/colorjs.io/types/src/parse.d.ts +0 -16
  453. package/lib/colorjs.io/types/src/rgbspace.d.ts +0 -10
  454. package/lib/colorjs.io/types/src/serialize.d.ts +0 -13
  455. package/lib/colorjs.io/types/src/set.d.ts +0 -18
  456. package/lib/colorjs.io/types/src/setAll.d.ts +0 -14
  457. package/lib/colorjs.io/types/src/space-accessors.d.ts +0 -1
  458. package/lib/colorjs.io/types/src/space-coord-accessors.d.ts +0 -69
  459. package/lib/colorjs.io/types/src/space.d.ts +0 -143
  460. package/lib/colorjs.io/types/src/spaces/a98rgb-linear.d.ts +0 -3
  461. package/lib/colorjs.io/types/src/spaces/a98rgb.d.ts +0 -3
  462. package/lib/colorjs.io/types/src/spaces/acescc.d.ts +0 -3
  463. package/lib/colorjs.io/types/src/spaces/acescg.d.ts +0 -3
  464. package/lib/colorjs.io/types/src/spaces/hpluv.d.ts +0 -3
  465. package/lib/colorjs.io/types/src/spaces/hsl.d.ts +0 -3
  466. package/lib/colorjs.io/types/src/spaces/hsluv.d.ts +0 -3
  467. package/lib/colorjs.io/types/src/spaces/hsv.d.ts +0 -3
  468. package/lib/colorjs.io/types/src/spaces/hwb.d.ts +0 -3
  469. package/lib/colorjs.io/types/src/spaces/ictcp.d.ts +0 -3
  470. package/lib/colorjs.io/types/src/spaces/index-fn-hdr.d.ts +0 -9
  471. package/lib/colorjs.io/types/src/spaces/index-fn.d.ts +0 -29
  472. package/lib/colorjs.io/types/src/spaces/index.d.ts +0 -4
  473. package/lib/colorjs.io/types/src/spaces/jzazbz.d.ts +0 -3
  474. package/lib/colorjs.io/types/src/spaces/jzczhz.d.ts +0 -3
  475. package/lib/colorjs.io/types/src/spaces/lab-d65.d.ts +0 -3
  476. package/lib/colorjs.io/types/src/spaces/lab.d.ts +0 -3
  477. package/lib/colorjs.io/types/src/spaces/lch.d.ts +0 -3
  478. package/lib/colorjs.io/types/src/spaces/lchuv.d.ts +0 -3
  479. package/lib/colorjs.io/types/src/spaces/luv.d.ts +0 -3
  480. package/lib/colorjs.io/types/src/spaces/oklab.d.ts +0 -3
  481. package/lib/colorjs.io/types/src/spaces/oklch.d.ts +0 -3
  482. package/lib/colorjs.io/types/src/spaces/p3-linear.d.ts +0 -3
  483. package/lib/colorjs.io/types/src/spaces/p3.d.ts +0 -3
  484. package/lib/colorjs.io/types/src/spaces/prophoto-linear.d.ts +0 -3
  485. package/lib/colorjs.io/types/src/spaces/prophoto.d.ts +0 -3
  486. package/lib/colorjs.io/types/src/spaces/rec2020-linear.d.ts +0 -3
  487. package/lib/colorjs.io/types/src/spaces/rec2020.d.ts +0 -3
  488. package/lib/colorjs.io/types/src/spaces/rec2100-hlg.d.ts +0 -3
  489. package/lib/colorjs.io/types/src/spaces/rec2100-pq.d.ts +0 -3
  490. package/lib/colorjs.io/types/src/spaces/srgb-linear.d.ts +0 -3
  491. package/lib/colorjs.io/types/src/spaces/srgb.d.ts +0 -3
  492. package/lib/colorjs.io/types/src/spaces/xyz-abs-d65.d.ts +0 -3
  493. package/lib/colorjs.io/types/src/spaces/xyz-d50.d.ts +0 -3
  494. package/lib/colorjs.io/types/src/spaces/xyz-d65.d.ts +0 -3
  495. package/lib/colorjs.io/types/src/to.d.ts +0 -14
  496. package/lib/colorjs.io/types/src/toGamut.d.ts +0 -45
  497. package/lib/colorjs.io/types/src/util.d.ts +0 -58
  498. 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;
@@ -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` &#124; `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` &#124; `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 }&thinsp;&ndash;&thinsp;${ 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;