color-elements 0.0.2 → 0.0.4

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 (483) hide show
  1. package/README.md +30 -15
  2. package/_build/copy-config.json +1 -1
  3. package/_build/eleventy.js +7 -2
  4. package/_build/filters-extra.js +1 -1
  5. package/_includes/component.njk +9 -1
  6. package/_includes/partials/_nav-links.njk +12 -4
  7. package/_redirects +8 -1
  8. package/assets/css/style.css +78 -1
  9. package/assets/js/index.js +6 -6
  10. package/data/components.json +12 -0
  11. package/index.js +5 -1
  12. package/package.json +9 -3
  13. package/src/channel-picker/README.md +103 -0
  14. package/src/channel-picker/channel-picker.css +31 -0
  15. package/src/channel-picker/channel-picker.js +168 -0
  16. package/src/channel-picker/channel-picker.webp +0 -0
  17. package/src/channel-slider/README.md +50 -8
  18. package/src/channel-slider/channel-slider.css +47 -5
  19. package/src/channel-slider/channel-slider.js +74 -39
  20. package/src/channel-slider/channel-slider.webp +0 -0
  21. package/src/color-chart/README.md +129 -0
  22. package/src/color-chart/color-chart-global.css +101 -0
  23. package/src/color-chart/color-chart.css +112 -0
  24. package/src/color-chart/color-chart.js +439 -0
  25. package/src/color-chart/color-chart.webp +0 -0
  26. package/src/color-inline/README.md +42 -1
  27. package/src/color-inline/color-inline.css +11 -4
  28. package/src/color-inline/color-inline.js +56 -50
  29. package/src/color-inline/color-inline.webp +0 -0
  30. package/src/color-picker/README.md +107 -5
  31. package/src/color-picker/color-picker.css +21 -6
  32. package/src/color-picker/color-picker.js +147 -60
  33. package/src/color-picker/color-picker.webp +0 -0
  34. package/src/color-scale/README.md +75 -0
  35. package/src/color-scale/color-scale.css +35 -0
  36. package/src/color-scale/color-scale.js +164 -0
  37. package/src/color-scale/color-scale.webp +0 -0
  38. package/src/color-slider/README.md +31 -4
  39. package/src/color-slider/color-slider.css +17 -7
  40. package/src/color-slider/color-slider.js +80 -38
  41. package/src/color-slider/color-slider.webp +0 -0
  42. package/src/color-swatch/README.md +265 -6
  43. package/src/color-swatch/color-swatch.css +171 -27
  44. package/src/color-swatch/color-swatch.js +193 -217
  45. package/src/color-swatch/color-swatch.webp +0 -0
  46. package/src/common/color-element.js +140 -0
  47. package/src/common/dom.js +1 -1
  48. package/src/common/util.js +62 -84
  49. package/src/gamut-badge/README.md +145 -0
  50. package/src/gamut-badge/gamut-badge.css +78 -0
  51. package/src/gamut-badge/gamut-badge.js +121 -0
  52. package/src/gamut-badge/gamut-badge.webp +0 -0
  53. package/src/index.js.njk +1 -1
  54. package/src/space-picker/README.md +121 -0
  55. package/src/space-picker/space-picker.css +23 -0
  56. package/src/space-picker/space-picker.js +213 -0
  57. package/src/space-picker/space-picker.webp +0 -0
  58. package/_data/components.json +0 -8
  59. package/lib/README.md +0 -4
  60. package/lib/colorjs.io/LICENSE +0 -21
  61. package/lib/colorjs.io/README.json +0 -3
  62. package/lib/colorjs.io/README.md +0 -257
  63. package/lib/colorjs.io/colorjs.io/LICENSE +0 -21
  64. package/lib/colorjs.io/colorjs.io/README.json +0 -3
  65. package/lib/colorjs.io/colorjs.io/README.md +0 -257
  66. package/lib/colorjs.io/colorjs.io/dist/color-fn.cjs +0 -5437
  67. package/lib/colorjs.io/colorjs.io/dist/color-fn.cjs.map +0 -1
  68. package/lib/colorjs.io/colorjs.io/dist/color-fn.legacy.cjs +0 -7048
  69. package/lib/colorjs.io/colorjs.io/dist/color-fn.legacy.cjs.map +0 -1
  70. package/lib/colorjs.io/colorjs.io/dist/color-fn.legacy.min.cjs +0 -2
  71. package/lib/colorjs.io/colorjs.io/dist/color-fn.legacy.min.cjs.map +0 -1
  72. package/lib/colorjs.io/colorjs.io/dist/color-fn.min.cjs +0 -2
  73. package/lib/colorjs.io/colorjs.io/dist/color-fn.min.cjs.map +0 -1
  74. package/lib/colorjs.io/colorjs.io/dist/color.cjs +0 -5759
  75. package/lib/colorjs.io/colorjs.io/dist/color.cjs.map +0 -1
  76. package/lib/colorjs.io/colorjs.io/dist/color.global.js +0 -5760
  77. package/lib/colorjs.io/colorjs.io/dist/color.global.js.map +0 -1
  78. package/lib/colorjs.io/colorjs.io/dist/color.global.legacy.js +0 -7400
  79. package/lib/colorjs.io/colorjs.io/dist/color.global.legacy.js.map +0 -1
  80. package/lib/colorjs.io/colorjs.io/dist/color.global.legacy.min.js +0 -2
  81. package/lib/colorjs.io/colorjs.io/dist/color.global.legacy.min.js.map +0 -1
  82. package/lib/colorjs.io/colorjs.io/dist/color.global.min.js +0 -2
  83. package/lib/colorjs.io/colorjs.io/dist/color.global.min.js.map +0 -1
  84. package/lib/colorjs.io/colorjs.io/dist/color.js +0 -5755
  85. package/lib/colorjs.io/colorjs.io/dist/color.js.map +0 -1
  86. package/lib/colorjs.io/colorjs.io/dist/color.legacy.cjs +0 -7399
  87. package/lib/colorjs.io/colorjs.io/dist/color.legacy.cjs.map +0 -1
  88. package/lib/colorjs.io/colorjs.io/dist/color.legacy.js +0 -7395
  89. package/lib/colorjs.io/colorjs.io/dist/color.legacy.js.map +0 -1
  90. package/lib/colorjs.io/colorjs.io/dist/color.legacy.min.cjs +0 -2
  91. package/lib/colorjs.io/colorjs.io/dist/color.legacy.min.cjs.map +0 -1
  92. package/lib/colorjs.io/colorjs.io/dist/color.legacy.min.js +0 -2
  93. package/lib/colorjs.io/colorjs.io/dist/color.legacy.min.js.map +0 -1
  94. package/lib/colorjs.io/colorjs.io/dist/color.min.cjs +0 -2
  95. package/lib/colorjs.io/colorjs.io/dist/color.min.cjs.map +0 -1
  96. package/lib/colorjs.io/colorjs.io/dist/color.min.js +0 -2
  97. package/lib/colorjs.io/colorjs.io/dist/color.min.js.map +0 -1
  98. package/lib/colorjs.io/colorjs.io/package.json +0 -113
  99. package/lib/colorjs.io/colorjs.io/src/CATs.js +0 -131
  100. package/lib/colorjs.io/colorjs.io/src/adapt.js +0 -62
  101. package/lib/colorjs.io/colorjs.io/src/angles.js +0 -44
  102. package/lib/colorjs.io/colorjs.io/src/chromaticity.js +0 -33
  103. package/lib/colorjs.io/colorjs.io/src/clone.js +0 -7
  104. package/lib/colorjs.io/colorjs.io/src/color.js +0 -201
  105. package/lib/colorjs.io/colorjs.io/src/contrast/APCA.js +0 -102
  106. package/lib/colorjs.io/colorjs.io/src/contrast/Lstar.js +0 -17
  107. package/lib/colorjs.io/colorjs.io/src/contrast/Michelson.js +0 -22
  108. package/lib/colorjs.io/colorjs.io/src/contrast/WCAG21.js +0 -20
  109. package/lib/colorjs.io/colorjs.io/src/contrast/Weber.js +0 -27
  110. package/lib/colorjs.io/colorjs.io/src/contrast/deltaPhi.js +0 -25
  111. package/lib/colorjs.io/colorjs.io/src/contrast/index.js +0 -6
  112. package/lib/colorjs.io/colorjs.io/src/contrast.js +0 -28
  113. package/lib/colorjs.io/colorjs.io/src/defaults.js +0 -12
  114. package/lib/colorjs.io/colorjs.io/src/deltaE/deltaE2000.js +0 -179
  115. package/lib/colorjs.io/colorjs.io/src/deltaE/deltaE76.js +0 -7
  116. package/lib/colorjs.io/colorjs.io/src/deltaE/deltaECMC.js +0 -114
  117. package/lib/colorjs.io/colorjs.io/src/deltaE/deltaEHCT.js +0 -51
  118. package/lib/colorjs.io/colorjs.io/src/deltaE/deltaEITP.js +0 -24
  119. package/lib/colorjs.io/colorjs.io/src/deltaE/deltaEJz.js +0 -43
  120. package/lib/colorjs.io/colorjs.io/src/deltaE/deltaEOK.js +0 -19
  121. package/lib/colorjs.io/colorjs.io/src/deltaE/index.js +0 -27
  122. package/lib/colorjs.io/colorjs.io/src/deltaE.js +0 -19
  123. package/lib/colorjs.io/colorjs.io/src/display.js +0 -83
  124. package/lib/colorjs.io/colorjs.io/src/distance.js +0 -21
  125. package/lib/colorjs.io/colorjs.io/src/equals.js +0 -10
  126. package/lib/colorjs.io/colorjs.io/src/get.js +0 -11
  127. package/lib/colorjs.io/colorjs.io/src/getAll.js +0 -20
  128. package/lib/colorjs.io/colorjs.io/src/getColor.js +0 -36
  129. package/lib/colorjs.io/colorjs.io/src/hooks.js +0 -37
  130. package/lib/colorjs.io/colorjs.io/src/inGamut.js +0 -25
  131. package/lib/colorjs.io/colorjs.io/src/index-fn.js +0 -28
  132. package/lib/colorjs.io/colorjs.io/src/index.js +0 -38
  133. package/lib/colorjs.io/colorjs.io/src/interpolation.js +0 -222
  134. package/lib/colorjs.io/colorjs.io/src/keywords.js +0 -158
  135. package/lib/colorjs.io/colorjs.io/src/luminance.js +0 -27
  136. package/lib/colorjs.io/colorjs.io/src/multiply-matrices.js +0 -44
  137. package/lib/colorjs.io/colorjs.io/src/parse.js +0 -198
  138. package/lib/colorjs.io/colorjs.io/src/rgbspace.js +0 -64
  139. package/lib/colorjs.io/colorjs.io/src/serialize.js +0 -86
  140. package/lib/colorjs.io/colorjs.io/src/set.js +0 -33
  141. package/lib/colorjs.io/colorjs.io/src/setAll.js +0 -12
  142. package/lib/colorjs.io/colorjs.io/src/space-accessors.js +0 -86
  143. package/lib/colorjs.io/colorjs.io/src/space.js +0 -440
  144. package/lib/colorjs.io/colorjs.io/src/spaces/a98rgb-linear.js +0 -28
  145. package/lib/colorjs.io/colorjs.io/src/spaces/a98rgb.js +0 -11
  146. package/lib/colorjs.io/colorjs.io/src/spaces/acescc.js +0 -76
  147. package/lib/colorjs.io/colorjs.io/src/spaces/acescg.js +0 -54
  148. package/lib/colorjs.io/colorjs.io/src/spaces/cam16.js +0 -362
  149. package/lib/colorjs.io/colorjs.io/src/spaces/hct.js +0 -157
  150. package/lib/colorjs.io/colorjs.io/src/spaces/hpluv.js +0 -130
  151. package/lib/colorjs.io/colorjs.io/src/spaces/hsl.js +0 -91
  152. package/lib/colorjs.io/colorjs.io/src/spaces/hsluv.js +0 -162
  153. package/lib/colorjs.io/colorjs.io/src/spaces/hsv.js +0 -65
  154. package/lib/colorjs.io/colorjs.io/src/spaces/hwb.js +0 -58
  155. package/lib/colorjs.io/colorjs.io/src/spaces/ictcp.js +0 -133
  156. package/lib/colorjs.io/colorjs.io/src/spaces/index-fn-hdr.js +0 -7
  157. package/lib/colorjs.io/colorjs.io/src/spaces/index-fn.js +0 -29
  158. package/lib/colorjs.io/colorjs.io/src/spaces/index.js +0 -8
  159. package/lib/colorjs.io/colorjs.io/src/spaces/jzazbz.js +0 -118
  160. package/lib/colorjs.io/colorjs.io/src/spaces/jzczhz.js +0 -53
  161. package/lib/colorjs.io/colorjs.io/src/spaces/lab-d65.js +0 -74
  162. package/lib/colorjs.io/colorjs.io/src/spaces/lab.js +0 -74
  163. package/lib/colorjs.io/colorjs.io/src/spaces/lch.js +0 -67
  164. package/lib/colorjs.io/colorjs.io/src/spaces/lchuv.js +0 -68
  165. package/lib/colorjs.io/colorjs.io/src/spaces/luv.js +0 -85
  166. package/lib/colorjs.io/colorjs.io/src/spaces/oklab.js +0 -74
  167. package/lib/colorjs.io/colorjs.io/src/spaces/oklch.js +0 -68
  168. package/lib/colorjs.io/colorjs.io/src/spaces/p3-linear.js +0 -22
  169. package/lib/colorjs.io/colorjs.io/src/spaces/p3.js +0 -13
  170. package/lib/colorjs.io/colorjs.io/src/spaces/prophoto-linear.js +0 -28
  171. package/lib/colorjs.io/colorjs.io/src/spaces/prophoto.js +0 -19
  172. package/lib/colorjs.io/colorjs.io/src/spaces/rec2020-linear.js +0 -27
  173. package/lib/colorjs.io/colorjs.io/src/spaces/rec2020.js +0 -31
  174. package/lib/colorjs.io/colorjs.io/src/spaces/rec2100-hlg.js +0 -49
  175. package/lib/colorjs.io/colorjs.io/src/spaces/rec2100-pq.js +0 -37
  176. package/lib/colorjs.io/colorjs.io/src/spaces/srgb-linear.js +0 -30
  177. package/lib/colorjs.io/colorjs.io/src/spaces/srgb.js +0 -127
  178. package/lib/colorjs.io/colorjs.io/src/spaces/xyz-abs-d65.js +0 -40
  179. package/lib/colorjs.io/colorjs.io/src/spaces/xyz-d50.js +0 -12
  180. package/lib/colorjs.io/colorjs.io/src/spaces/xyz-d65.js +0 -18
  181. package/lib/colorjs.io/colorjs.io/src/to.js +0 -26
  182. package/lib/colorjs.io/colorjs.io/src/toGamut.js +0 -310
  183. package/lib/colorjs.io/colorjs.io/src/util.js +0 -254
  184. package/lib/colorjs.io/colorjs.io/src/variations.js +0 -14
  185. package/lib/colorjs.io/colorjs.io/types/index.d.cts +0 -4
  186. package/lib/colorjs.io/colorjs.io/types/index.d.ts +0 -42
  187. package/lib/colorjs.io/colorjs.io/types/src/CATs.d.ts +0 -13
  188. package/lib/colorjs.io/colorjs.io/types/src/adapt.d.ts +0 -12
  189. package/lib/colorjs.io/colorjs.io/types/src/angles.d.ts +0 -7
  190. package/lib/colorjs.io/colorjs.io/types/src/chromaticity.d.ts +0 -7
  191. package/lib/colorjs.io/colorjs.io/types/src/clone.d.ts +0 -3
  192. package/lib/colorjs.io/colorjs.io/types/src/color.d.ts +0 -160
  193. package/lib/colorjs.io/colorjs.io/types/src/contrast/APCA.d.ts +0 -5
  194. package/lib/colorjs.io/colorjs.io/types/src/contrast/Lstar.d.ts +0 -5
  195. package/lib/colorjs.io/colorjs.io/types/src/contrast/Michelson.d.ts +0 -5
  196. package/lib/colorjs.io/colorjs.io/types/src/contrast/WCAG21.d.ts +0 -5
  197. package/lib/colorjs.io/colorjs.io/types/src/contrast/Weber.d.ts +0 -5
  198. package/lib/colorjs.io/colorjs.io/types/src/contrast/deltaPhi.d.ts +0 -5
  199. package/lib/colorjs.io/colorjs.io/types/src/contrast/index.d.ts +0 -11
  200. package/lib/colorjs.io/colorjs.io/types/src/contrast.d.ts +0 -12
  201. package/lib/colorjs.io/colorjs.io/types/src/defaults.d.ts +0 -2
  202. package/lib/colorjs.io/colorjs.io/types/src/deltaE/deltaE2000.d.ts +0 -11
  203. package/lib/colorjs.io/colorjs.io/types/src/deltaE/deltaE76.d.ts +0 -5
  204. package/lib/colorjs.io/colorjs.io/types/src/deltaE/deltaECMC.d.ts +0 -9
  205. package/lib/colorjs.io/colorjs.io/types/src/deltaE/deltaEHCT.d.ts +0 -5
  206. package/lib/colorjs.io/colorjs.io/types/src/deltaE/deltaEITP.d.ts +0 -5
  207. package/lib/colorjs.io/colorjs.io/types/src/deltaE/deltaEJz.d.ts +0 -5
  208. package/lib/colorjs.io/colorjs.io/types/src/deltaE/deltaEOK.d.ts +0 -5
  209. package/lib/colorjs.io/colorjs.io/types/src/deltaE/index.d.ts +0 -14
  210. package/lib/colorjs.io/colorjs.io/types/src/deltaE.d.ts +0 -12
  211. package/lib/colorjs.io/colorjs.io/types/src/display.d.ts +0 -17
  212. package/lib/colorjs.io/colorjs.io/types/src/distance.d.ts +0 -8
  213. package/lib/colorjs.io/colorjs.io/types/src/equals.d.ts +0 -3
  214. package/lib/colorjs.io/colorjs.io/types/src/get.d.ts +0 -4
  215. package/lib/colorjs.io/colorjs.io/types/src/getAll.d.ts +0 -7
  216. package/lib/colorjs.io/colorjs.io/types/src/getColor.d.ts +0 -4
  217. package/lib/colorjs.io/colorjs.io/types/src/hooks.d.ts +0 -52
  218. package/lib/colorjs.io/colorjs.io/types/src/inGamut.d.ts +0 -8
  219. package/lib/colorjs.io/colorjs.io/types/src/index-fn.d.cts +0 -1
  220. package/lib/colorjs.io/colorjs.io/types/src/index-fn.d.ts +0 -63
  221. package/lib/colorjs.io/colorjs.io/types/src/index.d.ts +0 -125
  222. package/lib/colorjs.io/colorjs.io/types/src/interpolation.d.ts +0 -77
  223. package/lib/colorjs.io/colorjs.io/types/src/keywords.d.ts +0 -2
  224. package/lib/colorjs.io/colorjs.io/types/src/luminance.d.ts +0 -10
  225. package/lib/colorjs.io/colorjs.io/types/src/multiply-matrices.d.ts +0 -9
  226. package/lib/colorjs.io/colorjs.io/types/src/parse.d.ts +0 -16
  227. package/lib/colorjs.io/colorjs.io/types/src/rgbspace.d.ts +0 -10
  228. package/lib/colorjs.io/colorjs.io/types/src/serialize.d.ts +0 -13
  229. package/lib/colorjs.io/colorjs.io/types/src/set.d.ts +0 -18
  230. package/lib/colorjs.io/colorjs.io/types/src/setAll.d.ts +0 -14
  231. package/lib/colorjs.io/colorjs.io/types/src/space-accessors.d.ts +0 -1
  232. package/lib/colorjs.io/colorjs.io/types/src/space-coord-accessors.d.ts +0 -69
  233. package/lib/colorjs.io/colorjs.io/types/src/space.d.ts +0 -143
  234. package/lib/colorjs.io/colorjs.io/types/src/spaces/a98rgb-linear.d.ts +0 -3
  235. package/lib/colorjs.io/colorjs.io/types/src/spaces/a98rgb.d.ts +0 -3
  236. package/lib/colorjs.io/colorjs.io/types/src/spaces/acescc.d.ts +0 -3
  237. package/lib/colorjs.io/colorjs.io/types/src/spaces/acescg.d.ts +0 -3
  238. package/lib/colorjs.io/colorjs.io/types/src/spaces/hpluv.d.ts +0 -3
  239. package/lib/colorjs.io/colorjs.io/types/src/spaces/hsl.d.ts +0 -3
  240. package/lib/colorjs.io/colorjs.io/types/src/spaces/hsluv.d.ts +0 -3
  241. package/lib/colorjs.io/colorjs.io/types/src/spaces/hsv.d.ts +0 -3
  242. package/lib/colorjs.io/colorjs.io/types/src/spaces/hwb.d.ts +0 -3
  243. package/lib/colorjs.io/colorjs.io/types/src/spaces/ictcp.d.ts +0 -3
  244. package/lib/colorjs.io/colorjs.io/types/src/spaces/index-fn-hdr.d.ts +0 -9
  245. package/lib/colorjs.io/colorjs.io/types/src/spaces/index-fn.d.ts +0 -29
  246. package/lib/colorjs.io/colorjs.io/types/src/spaces/index.d.ts +0 -4
  247. package/lib/colorjs.io/colorjs.io/types/src/spaces/jzazbz.d.ts +0 -3
  248. package/lib/colorjs.io/colorjs.io/types/src/spaces/jzczhz.d.ts +0 -3
  249. package/lib/colorjs.io/colorjs.io/types/src/spaces/lab-d65.d.ts +0 -3
  250. package/lib/colorjs.io/colorjs.io/types/src/spaces/lab.d.ts +0 -3
  251. package/lib/colorjs.io/colorjs.io/types/src/spaces/lch.d.ts +0 -3
  252. package/lib/colorjs.io/colorjs.io/types/src/spaces/lchuv.d.ts +0 -3
  253. package/lib/colorjs.io/colorjs.io/types/src/spaces/luv.d.ts +0 -3
  254. package/lib/colorjs.io/colorjs.io/types/src/spaces/oklab.d.ts +0 -3
  255. package/lib/colorjs.io/colorjs.io/types/src/spaces/oklch.d.ts +0 -3
  256. package/lib/colorjs.io/colorjs.io/types/src/spaces/p3-linear.d.ts +0 -3
  257. package/lib/colorjs.io/colorjs.io/types/src/spaces/p3.d.ts +0 -3
  258. package/lib/colorjs.io/colorjs.io/types/src/spaces/prophoto-linear.d.ts +0 -3
  259. package/lib/colorjs.io/colorjs.io/types/src/spaces/prophoto.d.ts +0 -3
  260. package/lib/colorjs.io/colorjs.io/types/src/spaces/rec2020-linear.d.ts +0 -3
  261. package/lib/colorjs.io/colorjs.io/types/src/spaces/rec2020.d.ts +0 -3
  262. package/lib/colorjs.io/colorjs.io/types/src/spaces/rec2100-hlg.d.ts +0 -3
  263. package/lib/colorjs.io/colorjs.io/types/src/spaces/rec2100-pq.d.ts +0 -3
  264. package/lib/colorjs.io/colorjs.io/types/src/spaces/srgb-linear.d.ts +0 -3
  265. package/lib/colorjs.io/colorjs.io/types/src/spaces/srgb.d.ts +0 -3
  266. package/lib/colorjs.io/colorjs.io/types/src/spaces/xyz-abs-d65.d.ts +0 -3
  267. package/lib/colorjs.io/colorjs.io/types/src/spaces/xyz-d50.d.ts +0 -3
  268. package/lib/colorjs.io/colorjs.io/types/src/spaces/xyz-d65.d.ts +0 -3
  269. package/lib/colorjs.io/colorjs.io/types/src/to.d.ts +0 -14
  270. package/lib/colorjs.io/colorjs.io/types/src/toGamut.d.ts +0 -45
  271. package/lib/colorjs.io/colorjs.io/types/src/util.d.ts +0 -58
  272. package/lib/colorjs.io/colorjs.io/types/src/variations.d.ts +0 -5
  273. package/lib/colorjs.io/dist/color-fn.cjs +0 -5437
  274. package/lib/colorjs.io/dist/color-fn.cjs.map +0 -1
  275. package/lib/colorjs.io/dist/color-fn.legacy.cjs +0 -7048
  276. package/lib/colorjs.io/dist/color-fn.legacy.cjs.map +0 -1
  277. package/lib/colorjs.io/dist/color-fn.legacy.min.cjs +0 -2
  278. package/lib/colorjs.io/dist/color-fn.legacy.min.cjs.map +0 -1
  279. package/lib/colorjs.io/dist/color-fn.min.cjs +0 -2
  280. package/lib/colorjs.io/dist/color-fn.min.cjs.map +0 -1
  281. package/lib/colorjs.io/dist/color.cjs +0 -5759
  282. package/lib/colorjs.io/dist/color.cjs.map +0 -1
  283. package/lib/colorjs.io/dist/color.global.js +0 -5760
  284. package/lib/colorjs.io/dist/color.global.js.map +0 -1
  285. package/lib/colorjs.io/dist/color.global.legacy.js +0 -7400
  286. package/lib/colorjs.io/dist/color.global.legacy.js.map +0 -1
  287. package/lib/colorjs.io/dist/color.global.legacy.min.js +0 -2
  288. package/lib/colorjs.io/dist/color.global.legacy.min.js.map +0 -1
  289. package/lib/colorjs.io/dist/color.global.min.js +0 -2
  290. package/lib/colorjs.io/dist/color.global.min.js.map +0 -1
  291. package/lib/colorjs.io/dist/color.js +0 -5755
  292. package/lib/colorjs.io/dist/color.js.map +0 -1
  293. package/lib/colorjs.io/dist/color.legacy.cjs +0 -7399
  294. package/lib/colorjs.io/dist/color.legacy.cjs.map +0 -1
  295. package/lib/colorjs.io/dist/color.legacy.js +0 -7395
  296. package/lib/colorjs.io/dist/color.legacy.js.map +0 -1
  297. package/lib/colorjs.io/dist/color.legacy.min.cjs +0 -2
  298. package/lib/colorjs.io/dist/color.legacy.min.cjs.map +0 -1
  299. package/lib/colorjs.io/dist/color.legacy.min.js +0 -2
  300. package/lib/colorjs.io/dist/color.legacy.min.js.map +0 -1
  301. package/lib/colorjs.io/dist/color.min.cjs +0 -2
  302. package/lib/colorjs.io/dist/color.min.cjs.map +0 -1
  303. package/lib/colorjs.io/dist/color.min.js +0 -2
  304. package/lib/colorjs.io/dist/color.min.js.map +0 -1
  305. package/lib/colorjs.io/package.json +0 -113
  306. package/lib/colorjs.io/src/CATs.js +0 -131
  307. package/lib/colorjs.io/src/adapt.js +0 -62
  308. package/lib/colorjs.io/src/angles.js +0 -44
  309. package/lib/colorjs.io/src/chromaticity.js +0 -33
  310. package/lib/colorjs.io/src/clone.js +0 -7
  311. package/lib/colorjs.io/src/color.js +0 -201
  312. package/lib/colorjs.io/src/contrast/APCA.js +0 -102
  313. package/lib/colorjs.io/src/contrast/Lstar.js +0 -17
  314. package/lib/colorjs.io/src/contrast/Michelson.js +0 -22
  315. package/lib/colorjs.io/src/contrast/WCAG21.js +0 -20
  316. package/lib/colorjs.io/src/contrast/Weber.js +0 -27
  317. package/lib/colorjs.io/src/contrast/deltaPhi.js +0 -25
  318. package/lib/colorjs.io/src/contrast/index.js +0 -6
  319. package/lib/colorjs.io/src/contrast.js +0 -28
  320. package/lib/colorjs.io/src/defaults.js +0 -12
  321. package/lib/colorjs.io/src/deltaE/deltaE2000.js +0 -179
  322. package/lib/colorjs.io/src/deltaE/deltaE76.js +0 -7
  323. package/lib/colorjs.io/src/deltaE/deltaECMC.js +0 -114
  324. package/lib/colorjs.io/src/deltaE/deltaEHCT.js +0 -51
  325. package/lib/colorjs.io/src/deltaE/deltaEITP.js +0 -24
  326. package/lib/colorjs.io/src/deltaE/deltaEJz.js +0 -43
  327. package/lib/colorjs.io/src/deltaE/deltaEOK.js +0 -19
  328. package/lib/colorjs.io/src/deltaE/index.js +0 -27
  329. package/lib/colorjs.io/src/deltaE.js +0 -19
  330. package/lib/colorjs.io/src/display.js +0 -83
  331. package/lib/colorjs.io/src/distance.js +0 -21
  332. package/lib/colorjs.io/src/equals.js +0 -10
  333. package/lib/colorjs.io/src/get.js +0 -11
  334. package/lib/colorjs.io/src/getAll.js +0 -20
  335. package/lib/colorjs.io/src/getColor.js +0 -36
  336. package/lib/colorjs.io/src/hooks.js +0 -37
  337. package/lib/colorjs.io/src/inGamut.js +0 -25
  338. package/lib/colorjs.io/src/index-fn.js +0 -28
  339. package/lib/colorjs.io/src/index.js +0 -38
  340. package/lib/colorjs.io/src/interpolation.js +0 -222
  341. package/lib/colorjs.io/src/keywords.js +0 -158
  342. package/lib/colorjs.io/src/luminance.js +0 -27
  343. package/lib/colorjs.io/src/multiply-matrices.js +0 -44
  344. package/lib/colorjs.io/src/parse.js +0 -198
  345. package/lib/colorjs.io/src/rgbspace.js +0 -64
  346. package/lib/colorjs.io/src/serialize.js +0 -86
  347. package/lib/colorjs.io/src/set.js +0 -33
  348. package/lib/colorjs.io/src/setAll.js +0 -12
  349. package/lib/colorjs.io/src/space-accessors.js +0 -86
  350. package/lib/colorjs.io/src/space.js +0 -440
  351. package/lib/colorjs.io/src/spaces/a98rgb-linear.js +0 -28
  352. package/lib/colorjs.io/src/spaces/a98rgb.js +0 -11
  353. package/lib/colorjs.io/src/spaces/acescc.js +0 -76
  354. package/lib/colorjs.io/src/spaces/acescg.js +0 -54
  355. package/lib/colorjs.io/src/spaces/cam16.js +0 -362
  356. package/lib/colorjs.io/src/spaces/hct.js +0 -157
  357. package/lib/colorjs.io/src/spaces/hpluv.js +0 -130
  358. package/lib/colorjs.io/src/spaces/hsl.js +0 -91
  359. package/lib/colorjs.io/src/spaces/hsluv.js +0 -162
  360. package/lib/colorjs.io/src/spaces/hsv.js +0 -65
  361. package/lib/colorjs.io/src/spaces/hwb.js +0 -58
  362. package/lib/colorjs.io/src/spaces/ictcp.js +0 -133
  363. package/lib/colorjs.io/src/spaces/index-fn-hdr.js +0 -7
  364. package/lib/colorjs.io/src/spaces/index-fn.js +0 -29
  365. package/lib/colorjs.io/src/spaces/index.js +0 -8
  366. package/lib/colorjs.io/src/spaces/jzazbz.js +0 -118
  367. package/lib/colorjs.io/src/spaces/jzczhz.js +0 -53
  368. package/lib/colorjs.io/src/spaces/lab-d65.js +0 -74
  369. package/lib/colorjs.io/src/spaces/lab.js +0 -74
  370. package/lib/colorjs.io/src/spaces/lch.js +0 -67
  371. package/lib/colorjs.io/src/spaces/lchuv.js +0 -68
  372. package/lib/colorjs.io/src/spaces/luv.js +0 -85
  373. package/lib/colorjs.io/src/spaces/oklab.js +0 -74
  374. package/lib/colorjs.io/src/spaces/oklch.js +0 -68
  375. package/lib/colorjs.io/src/spaces/p3-linear.js +0 -22
  376. package/lib/colorjs.io/src/spaces/p3.js +0 -13
  377. package/lib/colorjs.io/src/spaces/prophoto-linear.js +0 -28
  378. package/lib/colorjs.io/src/spaces/prophoto.js +0 -19
  379. package/lib/colorjs.io/src/spaces/rec2020-linear.js +0 -27
  380. package/lib/colorjs.io/src/spaces/rec2020.js +0 -31
  381. package/lib/colorjs.io/src/spaces/rec2100-hlg.js +0 -49
  382. package/lib/colorjs.io/src/spaces/rec2100-pq.js +0 -37
  383. package/lib/colorjs.io/src/spaces/srgb-linear.js +0 -30
  384. package/lib/colorjs.io/src/spaces/srgb.js +0 -127
  385. package/lib/colorjs.io/src/spaces/xyz-abs-d65.js +0 -40
  386. package/lib/colorjs.io/src/spaces/xyz-d50.js +0 -12
  387. package/lib/colorjs.io/src/spaces/xyz-d65.js +0 -18
  388. package/lib/colorjs.io/src/to.js +0 -26
  389. package/lib/colorjs.io/src/toGamut.js +0 -310
  390. package/lib/colorjs.io/src/util.js +0 -254
  391. package/lib/colorjs.io/src/variations.js +0 -14
  392. package/lib/colorjs.io/types/index.d.cts +0 -4
  393. package/lib/colorjs.io/types/index.d.ts +0 -42
  394. package/lib/colorjs.io/types/src/CATs.d.ts +0 -13
  395. package/lib/colorjs.io/types/src/adapt.d.ts +0 -12
  396. package/lib/colorjs.io/types/src/angles.d.ts +0 -7
  397. package/lib/colorjs.io/types/src/chromaticity.d.ts +0 -7
  398. package/lib/colorjs.io/types/src/clone.d.ts +0 -3
  399. package/lib/colorjs.io/types/src/color.d.ts +0 -160
  400. package/lib/colorjs.io/types/src/contrast/APCA.d.ts +0 -5
  401. package/lib/colorjs.io/types/src/contrast/Lstar.d.ts +0 -5
  402. package/lib/colorjs.io/types/src/contrast/Michelson.d.ts +0 -5
  403. package/lib/colorjs.io/types/src/contrast/WCAG21.d.ts +0 -5
  404. package/lib/colorjs.io/types/src/contrast/Weber.d.ts +0 -5
  405. package/lib/colorjs.io/types/src/contrast/deltaPhi.d.ts +0 -5
  406. package/lib/colorjs.io/types/src/contrast/index.d.ts +0 -11
  407. package/lib/colorjs.io/types/src/contrast.d.ts +0 -12
  408. package/lib/colorjs.io/types/src/defaults.d.ts +0 -2
  409. package/lib/colorjs.io/types/src/deltaE/deltaE2000.d.ts +0 -11
  410. package/lib/colorjs.io/types/src/deltaE/deltaE76.d.ts +0 -5
  411. package/lib/colorjs.io/types/src/deltaE/deltaECMC.d.ts +0 -9
  412. package/lib/colorjs.io/types/src/deltaE/deltaEHCT.d.ts +0 -5
  413. package/lib/colorjs.io/types/src/deltaE/deltaEITP.d.ts +0 -5
  414. package/lib/colorjs.io/types/src/deltaE/deltaEJz.d.ts +0 -5
  415. package/lib/colorjs.io/types/src/deltaE/deltaEOK.d.ts +0 -5
  416. package/lib/colorjs.io/types/src/deltaE/index.d.ts +0 -14
  417. package/lib/colorjs.io/types/src/deltaE.d.ts +0 -12
  418. package/lib/colorjs.io/types/src/display.d.ts +0 -17
  419. package/lib/colorjs.io/types/src/distance.d.ts +0 -8
  420. package/lib/colorjs.io/types/src/equals.d.ts +0 -3
  421. package/lib/colorjs.io/types/src/get.d.ts +0 -4
  422. package/lib/colorjs.io/types/src/getAll.d.ts +0 -7
  423. package/lib/colorjs.io/types/src/getColor.d.ts +0 -4
  424. package/lib/colorjs.io/types/src/hooks.d.ts +0 -52
  425. package/lib/colorjs.io/types/src/inGamut.d.ts +0 -8
  426. package/lib/colorjs.io/types/src/index-fn.d.cts +0 -1
  427. package/lib/colorjs.io/types/src/index-fn.d.ts +0 -63
  428. package/lib/colorjs.io/types/src/index.d.ts +0 -125
  429. package/lib/colorjs.io/types/src/interpolation.d.ts +0 -77
  430. package/lib/colorjs.io/types/src/keywords.d.ts +0 -2
  431. package/lib/colorjs.io/types/src/luminance.d.ts +0 -10
  432. package/lib/colorjs.io/types/src/multiply-matrices.d.ts +0 -9
  433. package/lib/colorjs.io/types/src/parse.d.ts +0 -16
  434. package/lib/colorjs.io/types/src/rgbspace.d.ts +0 -10
  435. package/lib/colorjs.io/types/src/serialize.d.ts +0 -13
  436. package/lib/colorjs.io/types/src/set.d.ts +0 -18
  437. package/lib/colorjs.io/types/src/setAll.d.ts +0 -14
  438. package/lib/colorjs.io/types/src/space-accessors.d.ts +0 -1
  439. package/lib/colorjs.io/types/src/space-coord-accessors.d.ts +0 -69
  440. package/lib/colorjs.io/types/src/space.d.ts +0 -143
  441. package/lib/colorjs.io/types/src/spaces/a98rgb-linear.d.ts +0 -3
  442. package/lib/colorjs.io/types/src/spaces/a98rgb.d.ts +0 -3
  443. package/lib/colorjs.io/types/src/spaces/acescc.d.ts +0 -3
  444. package/lib/colorjs.io/types/src/spaces/acescg.d.ts +0 -3
  445. package/lib/colorjs.io/types/src/spaces/hpluv.d.ts +0 -3
  446. package/lib/colorjs.io/types/src/spaces/hsl.d.ts +0 -3
  447. package/lib/colorjs.io/types/src/spaces/hsluv.d.ts +0 -3
  448. package/lib/colorjs.io/types/src/spaces/hsv.d.ts +0 -3
  449. package/lib/colorjs.io/types/src/spaces/hwb.d.ts +0 -3
  450. package/lib/colorjs.io/types/src/spaces/ictcp.d.ts +0 -3
  451. package/lib/colorjs.io/types/src/spaces/index-fn-hdr.d.ts +0 -9
  452. package/lib/colorjs.io/types/src/spaces/index-fn.d.ts +0 -29
  453. package/lib/colorjs.io/types/src/spaces/index.d.ts +0 -4
  454. package/lib/colorjs.io/types/src/spaces/jzazbz.d.ts +0 -3
  455. package/lib/colorjs.io/types/src/spaces/jzczhz.d.ts +0 -3
  456. package/lib/colorjs.io/types/src/spaces/lab-d65.d.ts +0 -3
  457. package/lib/colorjs.io/types/src/spaces/lab.d.ts +0 -3
  458. package/lib/colorjs.io/types/src/spaces/lch.d.ts +0 -3
  459. package/lib/colorjs.io/types/src/spaces/lchuv.d.ts +0 -3
  460. package/lib/colorjs.io/types/src/spaces/luv.d.ts +0 -3
  461. package/lib/colorjs.io/types/src/spaces/oklab.d.ts +0 -3
  462. package/lib/colorjs.io/types/src/spaces/oklch.d.ts +0 -3
  463. package/lib/colorjs.io/types/src/spaces/p3-linear.d.ts +0 -3
  464. package/lib/colorjs.io/types/src/spaces/p3.d.ts +0 -3
  465. package/lib/colorjs.io/types/src/spaces/prophoto-linear.d.ts +0 -3
  466. package/lib/colorjs.io/types/src/spaces/prophoto.d.ts +0 -3
  467. package/lib/colorjs.io/types/src/spaces/rec2020-linear.d.ts +0 -3
  468. package/lib/colorjs.io/types/src/spaces/rec2020.d.ts +0 -3
  469. package/lib/colorjs.io/types/src/spaces/rec2100-hlg.d.ts +0 -3
  470. package/lib/colorjs.io/types/src/spaces/rec2100-pq.d.ts +0 -3
  471. package/lib/colorjs.io/types/src/spaces/srgb-linear.d.ts +0 -3
  472. package/lib/colorjs.io/types/src/spaces/srgb.d.ts +0 -3
  473. package/lib/colorjs.io/types/src/spaces/xyz-abs-d65.d.ts +0 -3
  474. package/lib/colorjs.io/types/src/spaces/xyz-d50.d.ts +0 -3
  475. package/lib/colorjs.io/types/src/spaces/xyz-d65.d.ts +0 -3
  476. package/lib/colorjs.io/types/src/to.d.ts +0 -14
  477. package/lib/colorjs.io/types/src/toGamut.d.ts +0 -45
  478. package/lib/colorjs.io/types/src/util.d.ts +0 -58
  479. package/lib/colorjs.io/types/src/variations.d.ts +0 -5
  480. package/src/color-gamut/README.md +0 -75
  481. package/src/color-gamut/color-gamut.css +0 -32
  482. package/src/color-gamut/color-gamut.js +0 -172
  483. package/src/common/color.js +0 -12
@@ -1,62 +1,34 @@
1
- import Color from "../common/color.js";
1
+ import ColorElement from "../common/color-element.js";
2
2
 
3
- let styleURL = new URL("./color-inline.css", import.meta.url);
4
-
5
- export default class ColorInline extends HTMLElement {
6
- #swatch;
7
-
8
- constructor () {
9
- super();
10
- this.attachShadow({mode: "open"});
11
- this.shadowRoot.innerHTML = `<style>@import url("${ styleURL }");</style>
3
+ const Self = class ColorInline extends ColorElement {
4
+ static tagName = "color-inline";
5
+ static url = import.meta.url;
6
+ static styles = "./color-inline.css";
7
+ static shadowTemplate = `
12
8
  <div part="swatch-wrapper">
13
9
  <div id="swatch" part="swatch"></div>
14
10
  <slot></slot>
15
11
  </div>`;
16
- this.#swatch = this.shadowRoot.querySelector("#swatch");
17
- this.attributeChangedCallback();
18
- }
19
12
 
20
- connectedCallback () {
21
- this.#render();
22
- ColorInline.#mo.observe(this, {childList: true, subtree: true, characterData: true});
23
- }
24
-
25
- #value;
26
- get value () {
27
- return this.#value;
28
- }
29
- set value (value) {
30
- this.#value = value;
31
- this.#render();
32
- }
13
+ constructor () {
14
+ super();
33
15
 
34
- #color;
35
- get color () {
36
- return this.#color;
16
+ this._el = {};
17
+ this._el.swatch = this.shadowRoot.querySelector("#swatch");
37
18
  }
38
19
 
39
- #render () {
40
- let colorText = this.value || this.textContent;
41
-
42
- try {
43
- this.#color = new Color(colorText);
44
- this.#swatch.style.cssText = `--color: ${this.#color.display()}`;
45
- this.#swatch.classList.remove("invalid");
46
- }
47
- catch (e) {
48
- this.#color = null;
49
- this.#swatch.classList.add("invalid");
50
- }
20
+ connectedCallback () {
21
+ super.connectedCallback?.();
22
+ Self.#mo.observe(this, {childList: true, subtree: true, characterData: true});
51
23
  }
52
24
 
53
- static get observedAttributes () {
54
- return ["value"];
55
- }
25
+ propChangedCallback ({name, prop, detail: change}) {
26
+ if (name === "color") {
27
+ let isValid = this.color !== null;
28
+ this._el.swatch.classList.toggle("invalid", !isValid);
56
29
 
57
- attributeChangedCallback (name, newValue) {
58
- if (!name && this.hasAttribute("value") || name === "value") {
59
- this.value = this.getAttribute("value");
30
+ let colorString = this.color?.display();
31
+ this._el.swatch.style.setProperty("--color", colorString);
60
32
  }
61
33
  }
62
34
 
@@ -69,11 +41,45 @@ export default class ColorInline extends HTMLElement {
69
41
  }
70
42
 
71
43
  if (target) {
72
- target.#render();
44
+ target.value = target.textContent.trim();
73
45
  }
74
46
  }
75
47
  });
76
- }
77
48
 
49
+ static props = {
50
+ value: {
51
+ type: String,
52
+ default () {
53
+ return this.textContent.trim();
54
+ },
55
+ },
56
+ color: {
57
+ get type () {
58
+ return Self.Color;
59
+ },
60
+ defaultProp: "value",
61
+ parse (value) {
62
+ if (!value) {
63
+ return null;
64
+ }
65
+
66
+ return Self.Color.get(value);
67
+ },
68
+ reflect: false,
69
+ },
70
+ };
71
+
72
+ static events = {
73
+ colorchange: {
74
+ propchange: "color",
75
+ },
76
+ valuechange: {
77
+ propchange: "value",
78
+ },
79
+ };
80
+ };
81
+
82
+
83
+ Self.define();
78
84
 
79
- customElements.define("color-inline", ColorInline);
85
+ export default Self;
@@ -14,6 +14,20 @@ Color spaces not supported by the browser also work:
14
14
  <color-picker space="okhsl" color="color(--okhsl 180 50% 50%)"></color-picker>
15
15
  ```
16
16
 
17
+ If no color space or color is provided, the default ones will be used: `oklch` for the space and `oklch(50% 50% 180)` for the color.
18
+
19
+ ```html
20
+ <color-picker></color-picker>
21
+ ```
22
+
23
+ ### The `alpha` attribute
24
+
25
+ Colors with the alpha channel are also supported. Add the `alpha` boolean attribute to show the alpha channel:
26
+
27
+ ```html
28
+ <color-picker space="oklch" color="oklch(60% 30% 180 / 0.6)" alpha></color-picker>
29
+ ```
30
+
17
31
  ### Slots
18
32
 
19
33
  ```html
@@ -22,6 +36,29 @@ Color spaces not supported by the browser also work:
22
36
  </color-picker>
23
37
  ```
24
38
 
39
+ You can use your component instead of the default color swatch:
40
+
41
+ ```html
42
+ <color-picker space="oklch" color="oklch(50% 50% 180)"
43
+ oncolorchange="this.firstElementChild.textContent = this.color">
44
+ <color-inline slot="swatch" style="place-self: center; min-inline-size: fit-content"></color-inline>
45
+ </color-picker>
46
+ ```
47
+
48
+ or your own form element instead of the default space picker:
49
+
50
+ ```html
51
+ <color-picker space="oklab" color="oklab(60% -0.12 0)">
52
+ <select slot="color-space" size="4">
53
+ <optgroup label="Rectangular Spaces">
54
+ <option value="lab">Lab</option>
55
+ <option value="oklab" selected>Oklab</option>
56
+ <option value="prophoto">ProPhoto</option>
57
+ </optgroup>
58
+ </select>
59
+ </color-picker>
60
+ ```
61
+
25
62
  ### Events
26
63
 
27
64
  As with other components, you can listen to the `colorchange` event:
@@ -29,20 +66,85 @@ As with other components, you can listen to the `colorchange` event:
29
66
  ```html
30
67
  <color-picker space="oklch" color="oklch(50% 50% 180)"
31
68
  oncolorchange="this.firstElementChild.textContent = this.color.oklch.join(' ')">
32
- <div class="coords" style="font-weight: bold; text-shadow: 0 0 .1em white, 0 0 .1em white, 0 0 .1em white"></div>
69
+ <div class="coords"></div>
33
70
  </color-picker>
34
71
  ```
35
72
 
73
+ ### Dynamic
74
+
75
+ All attributes are reactive:
76
+
77
+ ```html
78
+ <color-picker space="oklch" color="oklch(60% 30% 180)" id="dynamic_picker">
79
+ <fieldset slot="color-space">
80
+ <legend>Polar Spaces</legend>
81
+
82
+ <label>
83
+ <input type="radio" name="space" value="oklch" checked /> OKLCh
84
+ </label>
85
+ <label>
86
+ <input type="radio" name="space" value="hwb" /> HWB
87
+ </label>
88
+ <label>
89
+ <input type="radio" name="space" value="hsl" /> HSL
90
+ </label>
91
+ </fieldset>
92
+ </color-picker>
93
+
94
+ <script>
95
+ let radios = dynamic_picker.querySelectorAll("input[name=space]");
96
+ radios.forEach(radio => radio.addEventListener("change", evt => dynamic_picker.spaceId = evt.target.value));
97
+ </script>
98
+
99
+ <style>
100
+ label + label {
101
+ margin-inline-start: .3em;
102
+ }
103
+ </style>
104
+ ```
105
+
106
+ ```html
107
+ <label>
108
+ <input type="checkbox" onchange="this.parentElement.nextElementSibling.alpha = this.checked" /> Alpha channel
109
+ </label>
110
+ <color-picker></color-picker>
111
+ ```
36
112
 
37
113
  ## Reference
38
114
 
115
+ ### Slots
116
+
117
+ | Name | Description |
118
+ |------|-------------|
119
+ | (default) | The color picker's main content. Goes into the swatch. |
120
+ | `color-space` | An element to display (and if writable, also set) the current color space. If not provided, a [`<space-picker>`](../space-picker/) is used. |
121
+ | `swatch` | An element used to provide a visual preview of the current color. |
122
+
39
123
  ### Attributes & Properties
40
124
 
41
125
  | Attribute | Property | Property type | Default value | Description |
42
126
  |-----------|----------|---------------|---------------|-------------|
43
- | `space` | `space` | `ColorSpace` &#124; `string` | `oklch` | The color space to use for interpolation. |
44
- | `color` | `color` | `Color` &#124; `string` | `oklch(50 50% 180)` | The current color value. |
127
+ | `space` | `spaceId` | `string` | `oklch` | The color space to use for interpolation. |
128
+ | | `space` | `ColorSpace` | `OKLCh` | Color space object corresponding to the `space` attribute. |
129
+ | `color` | `color` | `Color` &#124; `string` | `oklch(50% 50% 180)` | The current color value. |
130
+ | `alpha` | `alpha` | `boolean` &#124; `undefined` | `undefined` | Whether to show the alpha channel slider or not. |
131
+
132
+ ### Events
133
+
134
+ | Name | Description |
135
+ |------|-------------|
136
+ | `input` | Fired when the color changes due to user action, such as adjusting the sliders, entering a color in the swatch's text field, or choosing a different color space. |
137
+ | `change` | Fired when the color changes due to user action, such as adjusting the sliders, entering a color in the swatch's text field, or choosing a different color space. |
138
+ | `colorchange` | Fired when the color changes for any reason, and once during initialization. |
139
+
140
+ ### CSS variables
141
+
142
+ The styling of `<color-picker>` is fully customizable via CSS variables provided by the [`<color-slider>`](../color-slider/#css-variables) and [`<color-swatch>`](../color-swatch/#css-variables).
45
143
 
46
- ## To-Do
144
+ ### Parts
47
145
 
48
- - Alpha
146
+ | Name | Description |
147
+ |------|-------------|
148
+ | `color-space` | The default [`<space-picker>`](../space-picker/) element, used if the `color-space` slot has no slotted elements. |
149
+ | `color-space-base` | The internal `<select>` element of the default [`<space-picker>`](../space-picker/) element. |
150
+ | `swatch` | The default [`<color-swatch>`](../color-swatch/) element, used if the `swatch` slot has no slotted elements. |
@@ -4,17 +4,32 @@
4
4
  gap: 1em;
5
5
  }
6
6
 
7
+ #space_picker {
8
+ margin-inline-start: -.7em; /* align with the channel names */
9
+ font-size: 150%;
10
+ transition: border-color .2s;
11
+
12
+ &:not(:hover) {
13
+ border-color: transparent;
14
+ }
15
+ }
16
+
17
+ [part="color-space"],
18
+ slot[name="color-space"]::slotted(*) {
19
+ grid-column: 1 / -1;
20
+ justify-self: start;
21
+ }
22
+
7
23
  #sliders {
8
24
  display: flex;
9
25
  flex-flow: column;
26
+ justify-content: space-between;
10
27
  gap: .3em;
28
+ min-inline-size: 10em;
11
29
  }
12
30
 
13
- color-swatch {
31
+ [part="swatch"],
32
+ slot[name="swatch"]::slotted(*) {
14
33
  width: auto;
15
-
16
- &::part(swatch) {
17
- flex: 1;
18
- }
34
+ margin: 0;
19
35
  }
20
-
@@ -1,58 +1,61 @@
1
+ import ColorElement from "../common/color-element.js";
1
2
  import "../channel-slider/channel-slider.js";
2
3
  import "../color-swatch/color-swatch.js";
3
- import NudeElement from "../../node_modules/nude-element/src/Element.js";
4
+ import "../space-picker/space-picker.js";
4
5
  import * as dom from "../common/dom.js";
5
- import Color from "../common/color.js";
6
6
 
7
- const Self = class ColorPicker extends NudeElement {
7
+ const Self = class ColorPicker extends ColorElement {
8
8
  static tagName = "color-picker";
9
+ static url = import.meta.url;
10
+ static dependencies = new Set(["channel-slider"]);
11
+ static styles = "./color-picker.css";
12
+ static shadowTemplate = `
13
+ <slot name="color-space">
14
+ <space-picker id="space_picker" part="color-space" exportparts="base: color-space-base"></space-picker>
15
+ </slot>
16
+ <div id="sliders" part="sliders"></div>
17
+ <slot name="swatch">
18
+ <color-swatch size="large" id="swatch" part="swatch" exportparts="swatch: swatch-base, gamut, details, info, color-wrapper">
19
+ <slot slot="swatch-content"></slot>
20
+ <input value="oklch(70% 0.25 138)" id="color" />
21
+ </color-swatch>
22
+ </slot>`;
9
23
 
10
24
  constructor () {
11
25
  super();
12
26
 
13
- this.attachShadow({mode: "open"});
14
- let styleURL = new URL(`./${Self.tagName}.css`, import.meta.url);
15
- this.shadowRoot.innerHTML = `
16
- <style>@import url("${ styleURL }")</style>
17
- <div id=sliders></div>
18
- <slot name="swatch">
19
- <color-swatch size="large" id="swatch">
20
- <slot slot="swatch-content"></slot>
21
- <input value="oklch(70% 0.25 138)" id="color" />
22
- </color-swatch>
23
- </slot>
24
- `;
25
-
26
27
  this._el = dom.named(this);
28
+ this._slots = {
29
+ color_space: this.shadowRoot.querySelector("slot[name=color-space]"),
30
+ };
27
31
  }
28
32
 
29
- connectedCallback() {
33
+ connectedCallback () {
30
34
  super.connectedCallback?.();
31
35
  this._el.sliders.addEventListener("input", this);
32
36
  this._el.swatch.addEventListener("input", this);
33
-
34
- this.render();
37
+ this._slots.color_space.addEventListener("input", this);
35
38
  }
36
39
 
37
- disconnectedCallback() {
40
+ disconnectedCallback () {
38
41
  this._el.sliders.removeEventListener("input", this);
39
42
  this._el.swatch.removeEventListener("input", this);
43
+ this._slots.color_space.removeEventListener("input", this);
40
44
  }
41
45
 
42
- handleEvent(event) {
43
- this.render(event.target);
46
+ handleEvent (event) {
47
+ let source = event.target;
44
48
 
45
- this.dispatchEvent(new event.constructor(event.type, {...event}));
46
- }
47
-
48
- render (source) {
49
- if (!source || this._el.sliders.contains(source)) {
49
+ if (this._el.sliders.contains(source)) {
50
50
  // From sliders
51
51
  let coords = [...this._el.sliders.children].map(el => el.value);
52
- this.color = new Color(this.space, coords);
53
- this._el.swatch.value = this.color;
52
+ let alpha = this.color.alpha;
53
+ if (coords.length > 3) {
54
+ alpha = coords.pop() / 100;
55
+ }
56
+ this.color = new Self.Color(this.space, coords, alpha);
54
57
  }
55
- else if (!source || this._el.swatch.contains(source)) {
58
+ else if (this._el.swatch.contains(source)) {
56
59
  // From swatch
57
60
  if (!this._el.swatch.color) {
58
61
  // Invalid color, or still typing
@@ -60,26 +63,46 @@ const Self = class ColorPicker extends NudeElement {
60
63
  }
61
64
  this.color = this._el.swatch.color;
62
65
  }
63
-
64
- for (let slider of this._el.sliders.children) {
65
- slider.defaultColor = this.color;
66
+ else if (this._el.space_picker.contains(source) || this._slots.color_space.assignedElements().includes(source)) {
67
+ this.spaceId = event.target.value;
66
68
  }
69
+
70
+ this.dispatchEvent(new event.constructor(event.type, {...event}));
67
71
  }
68
72
 
69
73
  propChangedCallback ({name, prop, detail: change}) {
70
- if (name === "space") {
74
+ if (name === "space" || name === "alpha") {
75
+ let space = this.space;
76
+
77
+ if (this.color.space !== space) {
78
+ this.color = this.color.to(space);
79
+ }
80
+
71
81
  let i = 0;
72
- for (let channel in this.space.coords) {
82
+ let channels = [...Object.keys(this.space.coords)];
83
+ if (this.alpha) {
84
+ channels.push("alpha");
85
+ }
86
+ for (let channel of channels) {
73
87
  let slider = this._el.sliders.children[i++];
74
88
 
75
89
  if (slider) {
76
- slider.space = this.space;
90
+ slider.space = space;
77
91
  slider.channel = channel;
78
92
  }
79
93
  else {
80
- this._el.sliders.insertAdjacentHTML("beforeend", `<channel-slider space="${ this.space.id }" channel="${ channel }"></channel-slider>`);
94
+ this._el.sliders.insertAdjacentHTML("beforeend", `<channel-slider space="${ space.id }" channel="${ channel }" part="channel-slider"></channel-slider>`);
81
95
  }
82
96
  }
97
+
98
+ if (this._el.sliders.children.length > channels.length) {
99
+ // Remove the slider for alpha
100
+ this._el.sliders.children[channels.length].remove();
101
+ }
102
+
103
+ for (let slider of this._el.sliders.children) {
104
+ slider.color = this.color;
105
+ }
83
106
  }
84
107
 
85
108
  if (name === "color") {
@@ -87,7 +110,7 @@ const Self = class ColorPicker extends NudeElement {
87
110
  slider.color = this.color;
88
111
  }
89
112
 
90
- if (this.color && (!this._el.swatch.color || !this.color.equals(this._el.swatch.color))) {
113
+ if (!this._el.swatch.color || !this.color.equals(this._el.swatch.color)) {
91
114
  // Avoid typing e.g. "red" and having it replaced with "rgb(100% 0% 0%)" under your caret
92
115
  prop.applyChange(this._el.swatch, change);
93
116
  }
@@ -95,24 +118,70 @@ const Self = class ColorPicker extends NudeElement {
95
118
  }
96
119
 
97
120
  static props = {
98
- space: {
121
+ spaceId: {
99
122
  default: "oklch",
100
- parse (value) {
101
- if (value instanceof Color.Space || value === null || value === undefined) {
123
+ convert (value) {
124
+ if (value === null || value === undefined) {
102
125
  return value;
103
126
  }
127
+ else if (value instanceof Self.Color.Space) {
128
+ return value.id;
129
+ }
130
+
131
+ return value + "";
132
+ },
133
+ changed ({parsedValue, source, ...change}) {
134
+ if (!parsedValue && source !== "default") {
135
+ // Something went wrong. We should always have a value. Falling back to the current space
136
+ this.spaceId = this.space.id;
137
+ return;
138
+ }
104
139
 
105
- value += "";
140
+ if (this.props.space && this.props.space.id !== parsedValue) {
141
+ // The space object we have in the cache is outdated. We need to delete it so that the space getter returns the updated one
142
+ delete this.props.space;
143
+ }
144
+ },
145
+ reflect: {
146
+ from: "space",
147
+ },
148
+ },
106
149
 
107
- return Color.Space.get(value);
150
+ space: {
151
+ get () {
152
+ return this._el.space_picker.selectedSpace;
108
153
  },
109
- stringify (value) {
110
- return value?.id;
154
+ set: true,
155
+ changed ({parsedValue, ...change}) {
156
+ if (parsedValue === undefined) {
157
+ // this.spaceId changed
158
+ if (this._el.space_picker.value !== this.spaceId) {
159
+ this._el.space_picker.value = this.spaceId;
160
+ }
161
+
162
+ return;
163
+ }
164
+ else if (!parsedValue) {
165
+ // Something went wrong. We should always have a value. Falling back to the current space
166
+ this.space = this._el.space_picker.selectedSpace;
167
+ return;
168
+ }
169
+
170
+ parsedValue = parsedValue instanceof Self.Color.Space ? parsedValue.id : parsedValue;
171
+ if (this.spaceId !== parsedValue) {
172
+ this._el.space_picker.value = parsedValue;
173
+ this.spaceId = parsedValue;
174
+ }
111
175
  },
176
+ dependencies: ["spaceId"],
177
+ defaultProp: "spaceId",
178
+ reflect: false,
112
179
  },
113
180
 
114
181
  defaultColor: {
115
- type: Color,
182
+ get type () {
183
+ return Self.Color;
184
+ },
116
185
  convert (color) {
117
186
  return color.to(this.space);
118
187
  },
@@ -124,7 +193,7 @@ const Self = class ColorPicker extends NudeElement {
124
193
  coords.push((range[0] + range[1]) / 2);
125
194
  }
126
195
 
127
- return new Color(this.space, coords);
196
+ return new Self.Color(this.space, coords);
128
197
  },
129
198
  reflect: {
130
199
  from: "color",
@@ -132,9 +201,30 @@ const Self = class ColorPicker extends NudeElement {
132
201
  },
133
202
 
134
203
  color: {
135
- type: Color,
136
- set (value) {
137
- this.defaultColor = new Color(value).to(this.space);
204
+ get type () {
205
+ return Self.Color;
206
+ },
207
+ defaultProp: "defaultColor",
208
+ reflect: false,
209
+ },
210
+
211
+ alpha: {
212
+ parse (value) {
213
+ if (value === undefined || value === null) {
214
+ return;
215
+ }
216
+
217
+ if (value === false || value === "false") {
218
+ return false;
219
+ }
220
+
221
+ if (value === "" || value === "alpha" || value === true || value === "true") {
222
+ // Boolean attribute
223
+ return true;
224
+ }
225
+ },
226
+ reflect: {
227
+ from: true,
138
228
  },
139
229
  },
140
230
  };
@@ -142,23 +232,20 @@ const Self = class ColorPicker extends NudeElement {
142
232
  static events = {
143
233
  change: {
144
234
  from () {
145
- return [this._el.sliders, this._el.swatch];
146
- }
235
+ return [this._el.space_picker, this._el.sliders, this._el.swatch];
236
+ },
147
237
  },
148
238
  input: {
149
239
  from () {
150
- return [this._el.sliders, this._el.swatch];
151
- }
152
- },
153
- valuechange: {
154
- propchange: "value",
240
+ return [this._el.space_picker, this._el.sliders, this._el.swatch];
241
+ },
155
242
  },
156
243
  colorchange: {
157
244
  propchange: "color",
158
245
  },
159
246
  };
160
- }
247
+ };
161
248
 
162
- customElements.define(Self.tagName, Self);
249
+ Self.define();
163
250
 
164
- export default Self;
251
+ export default Self;
@@ -0,0 +1,75 @@
1
+ # `<color-scale>`
2
+
3
+ Display a list of colors.
4
+
5
+ ## Features
6
+
7
+ - Specify colors directly, via interpolation in any color space, or a mix of both
8
+ - Display color coordinates, in any color space (or multiple!)
9
+ - Coming soon: display deltas between consecutive colors
10
+
11
+ ## Examples
12
+
13
+ ### Basic usage
14
+
15
+ Colors via attribute:
16
+
17
+ ```html
18
+ <color-scale space="oklch" colors="#e3fafc, #c5f6fa, #99e9f2, #66d9e8, #3bc9db"></color-scale>
19
+ ```
20
+
21
+ You can also give them optional names:
22
+
23
+ ```html
24
+ <color-scale space="oklch" colors="
25
+ Gray 50: #f9fafb,
26
+ Gray 100: #f3f4f6,
27
+ Gray 200: #e5e7eb,
28
+ Gray 300: #d1d5db,
29
+ Gray 400: #9ca3af,
30
+ Gray 500: #6b7280,
31
+ Gray 600: #4b5563,
32
+ Gray 700: #374151,
33
+ Gray 800: #1f2937,
34
+ Gray 900: #111827,
35
+ Gray 850: #1a202c
36
+ "></color-scale>
37
+ ```
38
+
39
+
40
+ You can only specify your core colors, and insert steps via interpolation:
41
+
42
+ ```html
43
+ <color-scale colors="#e3fafc, #0b7285" steps="4" space="oklch"></color-scale>
44
+ ```
45
+
46
+ If you have more than 2 colors listed, this will insert steps between each pair.
47
+
48
+ ### Customizing the color swatches
49
+
50
+ Under the hood, `<color-scale>` generates and uses a series of [`<color-swatch>`](../color-swatch/) elements.
51
+
52
+ You can specify the `info` attribute to show additional information about the colors, and it will be passed to the generated `<color-swatch`> instances:
53
+
54
+ ```html
55
+ <color-scale space="oklch" info="L: oklch.l, C: oklch.c, H: oklch.h"
56
+ colors="#e3fafc, #c5f6fa, #99e9f2, #66d9e8, #3bc9db"></color-scale>
57
+ ```
58
+
59
+ You can also create compact color scales, by simply setting `--details-style: compact`:
60
+
61
+
62
+ ```html
63
+ <color-scale space="oklch" info="L: oklch.l, C: oklch.c, H: oklch.h"
64
+ style="--details-style: compact"
65
+ colors="#e3fafc, #c5f6fa, #99e9f2, #66d9e8, #3bc9db"></color-scale>
66
+ ```
67
+
68
+ Issue: How to make them focusable??
69
+
70
+ <!--
71
+ If you want to insert interpolated colors only in specific places, you can use empty values:
72
+
73
+ ```html
74
+ <color-scale space="oklch" colors="#e3fafc, , , , , , , , , #0b7285"></color-scale>
75
+ ``` -->