@stytch/react 20.0.0-next.1 → 20.0.0-next.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 (580) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/cjs/StytchSSRProxy-Bz6LNYdq.js.map +1 -1
  3. package/dist/cjs/adminPortal/index.cjs +1 -1
  4. package/dist/cjs/b2b/index.cjs +14 -13
  5. package/dist/cjs/b2b/index.cjs.map +1 -1
  6. package/dist/cjs/compat.cjs +3647 -0
  7. package/dist/cjs/compat.cjs.map +1 -0
  8. package/dist/cjs/{index-Ni_dyEsz.js → index-BIjXBvf_.js} +2 -2
  9. package/dist/cjs/index-BIjXBvf_.js.map +1 -0
  10. package/dist/cjs/index.cjs +521 -520
  11. package/dist/cjs/index.cjs.map +1 -1
  12. package/dist/cjs/{shadcn-B8TEzQMT.js → shadcn-Z4AvHriT.js} +247 -233
  13. package/dist/cjs/shadcn-Z4AvHriT.js.map +1 -0
  14. package/dist/cjs-dev/StytchSSRProxy-d553KgcY.js +438 -0
  15. package/dist/cjs-dev/StytchSSRProxy-d553KgcY.js.map +1 -0
  16. package/dist/cjs-dev/adminPortal/index.cjs +54 -53
  17. package/dist/cjs-dev/adminPortal/index.cjs.map +1 -1
  18. package/dist/cjs-dev/b2b/index.cjs +85 -72
  19. package/dist/cjs-dev/b2b/index.cjs.map +1 -1
  20. package/dist/cjs-dev/b2b/index.headless.cjs +94 -92
  21. package/dist/cjs-dev/b2b/index.headless.cjs.map +1 -1
  22. package/dist/cjs-dev/compat.cjs +3694 -0
  23. package/dist/cjs-dev/compat.cjs.map +1 -0
  24. package/dist/cjs-dev/{StytchSSRProxy-CxXsyme4.js → dev-DaCGDI6V.js} +60 -426
  25. package/dist/cjs-dev/dev-DaCGDI6V.js.map +1 -0
  26. package/dist/cjs-dev/{idpHelpers-Cf8Qq1B4.js → idpHelpers-DOYYSxsX.js} +60 -141
  27. package/dist/cjs-dev/idpHelpers-DOYYSxsX.js.map +1 -0
  28. package/dist/cjs-dev/{index-DdK3Jt4u.js → index-rquGmIlv.js} +4 -4
  29. package/dist/cjs-dev/index-rquGmIlv.js.map +1 -0
  30. package/dist/cjs-dev/index.cjs +828 -805
  31. package/dist/cjs-dev/index.cjs.map +1 -1
  32. package/dist/cjs-dev/index.headless.cjs +76 -74
  33. package/dist/cjs-dev/index.headless.cjs.map +1 -1
  34. package/dist/cjs-dev/logger-CvOATP4R.js +28 -0
  35. package/dist/cjs-dev/logger-CvOATP4R.js.map +1 -0
  36. package/dist/cjs-dev/{passwordManagerDisableAutofillProps-D70WyvIu.js → passwordManagerDisableAutofillProps-CgiK2M_U.js} +2 -2
  37. package/dist/cjs-dev/{passwordManagerDisableAutofillProps-D70WyvIu.js.map → passwordManagerDisableAutofillProps-CgiK2M_U.js.map} +1 -1
  38. package/dist/cjs-dev/{shadcn-C4w3DtKK.js → shadcn-DnNfms7-.js} +261 -245
  39. package/dist/cjs-dev/shadcn-DnNfms7-.js.map +1 -0
  40. package/dist/esm/b2b/StytchB2BContext.mjs +5 -5
  41. package/dist/esm/b2b/StytchB2BContext.mjs.map +1 -1
  42. package/dist/esm/compat.mjs +3 -0
  43. package/dist/esm/compat.mjs.map +1 -0
  44. package/dist/esm/node_modules/chroma-js/index.mjs +85 -0
  45. package/dist/esm/node_modules/chroma-js/index.mjs.map +1 -0
  46. package/dist/esm/node_modules/chroma-js/src/Color.mjs +53 -0
  47. package/dist/esm/node_modules/chroma-js/src/Color.mjs.map +1 -0
  48. package/dist/esm/node_modules/chroma-js/src/chroma.mjs +11 -0
  49. package/dist/esm/node_modules/chroma-js/src/chroma.mjs.map +1 -0
  50. package/dist/esm/node_modules/chroma-js/src/colors/colorbrewer.mjs +82 -0
  51. package/dist/esm/node_modules/chroma-js/src/colors/colorbrewer.mjs.map +1 -0
  52. package/dist/esm/node_modules/chroma-js/src/colors/w3cx11.mjs +165 -0
  53. package/dist/esm/node_modules/chroma-js/src/colors/w3cx11.mjs.map +1 -0
  54. package/dist/esm/node_modules/chroma-js/src/generator/average.mjs +92 -0
  55. package/dist/esm/node_modules/chroma-js/src/generator/average.mjs.map +1 -0
  56. package/dist/esm/node_modules/chroma-js/src/generator/bezier.mjs +89 -0
  57. package/dist/esm/node_modules/chroma-js/src/generator/bezier.mjs.map +1 -0
  58. package/dist/esm/node_modules/chroma-js/src/generator/blend.mjs +58 -0
  59. package/dist/esm/node_modules/chroma-js/src/generator/blend.mjs.map +1 -0
  60. package/dist/esm/node_modules/chroma-js/src/generator/cubehelix.mjs +93 -0
  61. package/dist/esm/node_modules/chroma-js/src/generator/cubehelix.mjs.map +1 -0
  62. package/dist/esm/node_modules/chroma-js/src/generator/mix.mjs +22 -0
  63. package/dist/esm/node_modules/chroma-js/src/generator/mix.mjs.map +1 -0
  64. package/dist/esm/node_modules/chroma-js/src/generator/random.mjs +16 -0
  65. package/dist/esm/node_modules/chroma-js/src/generator/random.mjs.map +1 -0
  66. package/dist/esm/node_modules/chroma-js/src/generator/scale.mjs +398 -0
  67. package/dist/esm/node_modules/chroma-js/src/generator/scale.mjs.map +1 -0
  68. package/dist/esm/node_modules/chroma-js/src/interpolator/_hsx.mjs +62 -0
  69. package/dist/esm/node_modules/chroma-js/src/interpolator/_hsx.mjs.map +1 -0
  70. package/dist/esm/node_modules/chroma-js/src/interpolator/hcg.mjs +13 -0
  71. package/dist/esm/node_modules/chroma-js/src/interpolator/hcg.mjs.map +1 -0
  72. package/dist/esm/node_modules/chroma-js/src/interpolator/hsi.mjs +13 -0
  73. package/dist/esm/node_modules/chroma-js/src/interpolator/hsi.mjs.map +1 -0
  74. package/dist/esm/node_modules/chroma-js/src/interpolator/hsl.mjs +13 -0
  75. package/dist/esm/node_modules/chroma-js/src/interpolator/hsl.mjs.map +1 -0
  76. package/dist/esm/node_modules/chroma-js/src/interpolator/hsv.mjs +13 -0
  77. package/dist/esm/node_modules/chroma-js/src/interpolator/hsv.mjs.map +1 -0
  78. package/dist/esm/node_modules/chroma-js/src/interpolator/index.mjs +4 -0
  79. package/dist/esm/node_modules/chroma-js/src/interpolator/index.mjs.map +1 -0
  80. package/dist/esm/node_modules/chroma-js/src/interpolator/lab.mjs +20 -0
  81. package/dist/esm/node_modules/chroma-js/src/interpolator/lab.mjs.map +1 -0
  82. package/dist/esm/node_modules/chroma-js/src/interpolator/lch.mjs +14 -0
  83. package/dist/esm/node_modules/chroma-js/src/interpolator/lch.mjs.map +1 -0
  84. package/dist/esm/node_modules/chroma-js/src/interpolator/lrgb.mjs +21 -0
  85. package/dist/esm/node_modules/chroma-js/src/interpolator/lrgb.mjs.map +1 -0
  86. package/dist/esm/node_modules/chroma-js/src/interpolator/num.mjs +15 -0
  87. package/dist/esm/node_modules/chroma-js/src/interpolator/num.mjs.map +1 -0
  88. package/dist/esm/node_modules/chroma-js/src/interpolator/oklab.mjs +20 -0
  89. package/dist/esm/node_modules/chroma-js/src/interpolator/oklab.mjs.map +1 -0
  90. package/dist/esm/node_modules/chroma-js/src/interpolator/oklch.mjs +13 -0
  91. package/dist/esm/node_modules/chroma-js/src/interpolator/oklch.mjs.map +1 -0
  92. package/dist/esm/node_modules/chroma-js/src/interpolator/rgb.mjs +19 -0
  93. package/dist/esm/node_modules/chroma-js/src/interpolator/rgb.mjs.map +1 -0
  94. package/dist/esm/node_modules/chroma-js/src/io/cmyk/cmyk2rgb.mjs +18 -0
  95. package/dist/esm/node_modules/chroma-js/src/io/cmyk/cmyk2rgb.mjs.map +1 -0
  96. package/dist/esm/node_modules/chroma-js/src/io/cmyk/index.mjs +29 -0
  97. package/dist/esm/node_modules/chroma-js/src/io/cmyk/index.mjs.map +1 -0
  98. package/dist/esm/node_modules/chroma-js/src/io/cmyk/rgb2cmyk.mjs +20 -0
  99. package/dist/esm/node_modules/chroma-js/src/io/cmyk/rgb2cmyk.mjs.map +1 -0
  100. package/dist/esm/node_modules/chroma-js/src/io/css/css2rgb.mjs +239 -0
  101. package/dist/esm/node_modules/chroma-js/src/io/css/css2rgb.mjs.map +1 -0
  102. package/dist/esm/node_modules/chroma-js/src/io/css/hsl2css.mjs +29 -0
  103. package/dist/esm/node_modules/chroma-js/src/io/css/hsl2css.mjs.map +1 -0
  104. package/dist/esm/node_modules/chroma-js/src/io/css/index.mjs +27 -0
  105. package/dist/esm/node_modules/chroma-js/src/io/css/index.mjs.map +1 -0
  106. package/dist/esm/node_modules/chroma-js/src/io/css/lab2css.mjs +27 -0
  107. package/dist/esm/node_modules/chroma-js/src/io/css/lab2css.mjs.map +1 -0
  108. package/dist/esm/node_modules/chroma-js/src/io/css/lch2css.mjs +27 -0
  109. package/dist/esm/node_modules/chroma-js/src/io/css/lch2css.mjs.map +1 -0
  110. package/dist/esm/node_modules/chroma-js/src/io/css/oklab2css.mjs +18 -0
  111. package/dist/esm/node_modules/chroma-js/src/io/css/oklab2css.mjs.map +1 -0
  112. package/dist/esm/node_modules/chroma-js/src/io/css/oklch2css.mjs +18 -0
  113. package/dist/esm/node_modules/chroma-js/src/io/css/oklch2css.mjs.map +1 -0
  114. package/dist/esm/node_modules/chroma-js/src/io/css/rgb2css.mjs +65 -0
  115. package/dist/esm/node_modules/chroma-js/src/io/css/rgb2css.mjs.map +1 -0
  116. package/dist/esm/node_modules/chroma-js/src/io/gl/index.mjs +24 -0
  117. package/dist/esm/node_modules/chroma-js/src/io/gl/index.mjs.map +1 -0
  118. package/dist/esm/node_modules/chroma-js/src/io/hcg/hcg2rgb.mjs +58 -0
  119. package/dist/esm/node_modules/chroma-js/src/io/hcg/hcg2rgb.mjs.map +1 -0
  120. package/dist/esm/node_modules/chroma-js/src/io/hcg/index.mjs +29 -0
  121. package/dist/esm/node_modules/chroma-js/src/io/hcg/index.mjs.map +1 -0
  122. package/dist/esm/node_modules/chroma-js/src/io/hcg/rgb2hcg.mjs +25 -0
  123. package/dist/esm/node_modules/chroma-js/src/io/hcg/rgb2hcg.mjs.map +1 -0
  124. package/dist/esm/node_modules/chroma-js/src/io/hex/hex2rgb.mjs +57 -0
  125. package/dist/esm/node_modules/chroma-js/src/io/hex/hex2rgb.mjs.map +1 -0
  126. package/dist/esm/node_modules/chroma-js/src/io/hex/index.mjs +30 -0
  127. package/dist/esm/node_modules/chroma-js/src/io/hex/index.mjs.map +1 -0
  128. package/dist/esm/node_modules/chroma-js/src/io/hex/rgb2hex.mjs +33 -0
  129. package/dist/esm/node_modules/chroma-js/src/io/hex/rgb2hex.mjs.map +1 -0
  130. package/dist/esm/node_modules/chroma-js/src/io/hsi/hsi2rgb.mjs +49 -0
  131. package/dist/esm/node_modules/chroma-js/src/io/hsi/hsi2rgb.mjs.map +1 -0
  132. package/dist/esm/node_modules/chroma-js/src/io/hsi/index.mjs +29 -0
  133. package/dist/esm/node_modules/chroma-js/src/io/hsi/index.mjs.map +1 -0
  134. package/dist/esm/node_modules/chroma-js/src/io/hsi/rgb2hsi.mjs +34 -0
  135. package/dist/esm/node_modules/chroma-js/src/io/hsi/rgb2hsi.mjs.map +1 -0
  136. package/dist/esm/node_modules/chroma-js/src/io/hsl/hsl2rgb.mjs +37 -0
  137. package/dist/esm/node_modules/chroma-js/src/io/hsl/hsl2rgb.mjs.map +1 -0
  138. package/dist/esm/node_modules/chroma-js/src/io/hsl/index.mjs +29 -0
  139. package/dist/esm/node_modules/chroma-js/src/io/hsl/index.mjs.map +1 -0
  140. package/dist/esm/node_modules/chroma-js/src/io/hsl/rgb2hsl.mjs +47 -0
  141. package/dist/esm/node_modules/chroma-js/src/io/hsl/rgb2hsl.mjs.map +1 -0
  142. package/dist/esm/node_modules/chroma-js/src/io/hsv/hsv2rgb.mjs +50 -0
  143. package/dist/esm/node_modules/chroma-js/src/io/hsv/hsv2rgb.mjs.map +1 -0
  144. package/dist/esm/node_modules/chroma-js/src/io/hsv/index.mjs +29 -0
  145. package/dist/esm/node_modules/chroma-js/src/io/hsv/index.mjs.map +1 -0
  146. package/dist/esm/node_modules/chroma-js/src/io/hsv/rgb2hsv.mjs +35 -0
  147. package/dist/esm/node_modules/chroma-js/src/io/hsv/rgb2hsv.mjs.map +1 -0
  148. package/dist/esm/node_modules/chroma-js/src/io/input.mjs +7 -0
  149. package/dist/esm/node_modules/chroma-js/src/io/input.mjs.map +1 -0
  150. package/dist/esm/node_modules/chroma-js/src/io/lab/index.mjs +30 -0
  151. package/dist/esm/node_modules/chroma-js/src/io/lab/index.mjs.map +1 -0
  152. package/dist/esm/node_modules/chroma-js/src/io/lab/lab-constants.mjs +116 -0
  153. package/dist/esm/node_modules/chroma-js/src/io/lab/lab-constants.mjs.map +1 -0
  154. package/dist/esm/node_modules/chroma-js/src/io/lab/lab2rgb.mjs +102 -0
  155. package/dist/esm/node_modules/chroma-js/src/io/lab/lab2rgb.mjs.map +1 -0
  156. package/dist/esm/node_modules/chroma-js/src/io/lab/rgb2lab.mjs +68 -0
  157. package/dist/esm/node_modules/chroma-js/src/io/lab/rgb2lab.mjs.map +1 -0
  158. package/dist/esm/node_modules/chroma-js/src/io/lch/hcl2rgb.mjs +11 -0
  159. package/dist/esm/node_modules/chroma-js/src/io/lch/hcl2rgb.mjs.map +1 -0
  160. package/dist/esm/node_modules/chroma-js/src/io/lch/index.mjs +38 -0
  161. package/dist/esm/node_modules/chroma-js/src/io/lch/index.mjs.map +1 -0
  162. package/dist/esm/node_modules/chroma-js/src/io/lch/lab2lch.mjs +15 -0
  163. package/dist/esm/node_modules/chroma-js/src/io/lch/lab2lch.mjs.map +1 -0
  164. package/dist/esm/node_modules/chroma-js/src/io/lch/lch2lab.mjs +21 -0
  165. package/dist/esm/node_modules/chroma-js/src/io/lch/lch2lab.mjs.map +1 -0
  166. package/dist/esm/node_modules/chroma-js/src/io/lch/lch2rgb.mjs +15 -0
  167. package/dist/esm/node_modules/chroma-js/src/io/lch/lch2rgb.mjs.map +1 -0
  168. package/dist/esm/node_modules/chroma-js/src/io/lch/rgb2lch.mjs +14 -0
  169. package/dist/esm/node_modules/chroma-js/src/io/lch/rgb2lch.mjs.map +1 -0
  170. package/dist/esm/node_modules/chroma-js/src/io/named/index.mjs +30 -0
  171. package/dist/esm/node_modules/chroma-js/src/io/named/index.mjs.map +1 -0
  172. package/dist/esm/node_modules/chroma-js/src/io/num/index.mjs +33 -0
  173. package/dist/esm/node_modules/chroma-js/src/io/num/index.mjs.map +1 -0
  174. package/dist/esm/node_modules/chroma-js/src/io/num/num2rgb.mjs +14 -0
  175. package/dist/esm/node_modules/chroma-js/src/io/num/num2rgb.mjs.map +1 -0
  176. package/dist/esm/node_modules/chroma-js/src/io/num/rgb2num.mjs +10 -0
  177. package/dist/esm/node_modules/chroma-js/src/io/num/rgb2num.mjs.map +1 -0
  178. package/dist/esm/node_modules/chroma-js/src/io/oklab/index.mjs +29 -0
  179. package/dist/esm/node_modules/chroma-js/src/io/oklab/index.mjs.map +1 -0
  180. package/dist/esm/node_modules/chroma-js/src/io/oklab/oklab2rgb.mjs +36 -0
  181. package/dist/esm/node_modules/chroma-js/src/io/oklab/oklab2rgb.mjs.map +1 -0
  182. package/dist/esm/node_modules/chroma-js/src/io/oklab/rgb2oklab.mjs +39 -0
  183. package/dist/esm/node_modules/chroma-js/src/io/oklab/rgb2oklab.mjs.map +1 -0
  184. package/dist/esm/node_modules/chroma-js/src/io/oklch/index.mjs +29 -0
  185. package/dist/esm/node_modules/chroma-js/src/io/oklch/index.mjs.map +1 -0
  186. package/dist/esm/node_modules/chroma-js/src/io/oklch/oklch2rgb.mjs +15 -0
  187. package/dist/esm/node_modules/chroma-js/src/io/oklch/oklch2rgb.mjs.map +1 -0
  188. package/dist/esm/node_modules/chroma-js/src/io/oklch/rgb2oklch.mjs +14 -0
  189. package/dist/esm/node_modules/chroma-js/src/io/oklch/rgb2oklch.mjs.map +1 -0
  190. package/dist/esm/node_modules/chroma-js/src/io/rgb/index.mjs +47 -0
  191. package/dist/esm/node_modules/chroma-js/src/io/rgb/index.mjs.map +1 -0
  192. package/dist/esm/node_modules/chroma-js/src/io/temp/index.mjs +23 -0
  193. package/dist/esm/node_modules/chroma-js/src/io/temp/index.mjs.map +1 -0
  194. package/dist/esm/node_modules/chroma-js/src/io/temp/rgb2temperature.mjs +33 -0
  195. package/dist/esm/node_modules/chroma-js/src/io/temp/rgb2temperature.mjs.map +1 -0
  196. package/dist/esm/node_modules/chroma-js/src/io/temp/temperature2rgb.mjs +40 -0
  197. package/dist/esm/node_modules/chroma-js/src/io/temp/temperature2rgb.mjs.map +1 -0
  198. package/dist/esm/node_modules/chroma-js/src/ops/alpha.mjs +14 -0
  199. package/dist/esm/node_modules/chroma-js/src/ops/alpha.mjs.map +1 -0
  200. package/dist/esm/node_modules/chroma-js/src/ops/clipped.mjs +6 -0
  201. package/dist/esm/node_modules/chroma-js/src/ops/clipped.mjs.map +1 -0
  202. package/dist/esm/node_modules/chroma-js/src/ops/darken.mjs +18 -0
  203. package/dist/esm/node_modules/chroma-js/src/ops/darken.mjs.map +1 -0
  204. package/dist/esm/node_modules/chroma-js/src/ops/get.mjs +14 -0
  205. package/dist/esm/node_modules/chroma-js/src/ops/get.mjs.map +1 -0
  206. package/dist/esm/node_modules/chroma-js/src/ops/luminance.mjs +56 -0
  207. package/dist/esm/node_modules/chroma-js/src/ops/luminance.mjs.map +1 -0
  208. package/dist/esm/node_modules/chroma-js/src/ops/mix.mjs +11 -0
  209. package/dist/esm/node_modules/chroma-js/src/ops/mix.mjs.map +1 -0
  210. package/dist/esm/node_modules/chroma-js/src/ops/premultiply.mjs +13 -0
  211. package/dist/esm/node_modules/chroma-js/src/ops/premultiply.mjs.map +1 -0
  212. package/dist/esm/node_modules/chroma-js/src/ops/saturate.mjs +16 -0
  213. package/dist/esm/node_modules/chroma-js/src/ops/saturate.mjs.map +1 -0
  214. package/dist/esm/node_modules/chroma-js/src/ops/set.mjs +44 -0
  215. package/dist/esm/node_modules/chroma-js/src/ops/set.mjs.map +1 -0
  216. package/dist/esm/node_modules/chroma-js/src/ops/shade.mjs +12 -0
  217. package/dist/esm/node_modules/chroma-js/src/ops/shade.mjs.map +1 -0
  218. package/dist/esm/node_modules/chroma-js/src/utils/analyze.mjs +194 -0
  219. package/dist/esm/node_modules/chroma-js/src/utils/analyze.mjs.map +1 -0
  220. package/dist/esm/node_modules/chroma-js/src/utils/clip_rgb.mjs +18 -0
  221. package/dist/esm/node_modules/chroma-js/src/utils/clip_rgb.mjs.map +1 -0
  222. package/dist/esm/node_modules/chroma-js/src/utils/contrast.mjs +15 -0
  223. package/dist/esm/node_modules/chroma-js/src/utils/contrast.mjs.map +1 -0
  224. package/dist/esm/node_modules/chroma-js/src/utils/contrastAPCA.mjs +71 -0
  225. package/dist/esm/node_modules/chroma-js/src/utils/contrastAPCA.mjs.map +1 -0
  226. package/dist/esm/node_modules/chroma-js/src/utils/delta-e.mjs +66 -0
  227. package/dist/esm/node_modules/chroma-js/src/utils/delta-e.mjs.map +1 -0
  228. package/dist/esm/node_modules/chroma-js/src/utils/distance.mjs +20 -0
  229. package/dist/esm/node_modules/chroma-js/src/utils/distance.mjs.map +1 -0
  230. package/dist/esm/node_modules/chroma-js/src/utils/index.mjs +24 -0
  231. package/dist/esm/node_modules/chroma-js/src/utils/index.mjs.map +1 -0
  232. package/dist/esm/node_modules/chroma-js/src/utils/last.mjs +11 -0
  233. package/dist/esm/node_modules/chroma-js/src/utils/last.mjs.map +1 -0
  234. package/dist/esm/node_modules/chroma-js/src/utils/limit.mjs +8 -0
  235. package/dist/esm/node_modules/chroma-js/src/utils/limit.mjs.map +1 -0
  236. package/dist/esm/node_modules/chroma-js/src/utils/multiply-matrices.mjs +39 -0
  237. package/dist/esm/node_modules/chroma-js/src/utils/multiply-matrices.mjs.map +1 -0
  238. package/dist/esm/node_modules/chroma-js/src/utils/scales.mjs +19 -0
  239. package/dist/esm/node_modules/chroma-js/src/utils/scales.mjs.map +1 -0
  240. package/dist/esm/node_modules/chroma-js/src/utils/type.mjs +21 -0
  241. package/dist/esm/node_modules/chroma-js/src/utils/type.mjs.map +1 -0
  242. package/dist/esm/node_modules/chroma-js/src/utils/unpack.mjs +20 -0
  243. package/dist/esm/node_modules/chroma-js/src/utils/unpack.mjs.map +1 -0
  244. package/dist/esm/node_modules/chroma-js/src/utils/valid.mjs +14 -0
  245. package/dist/esm/node_modules/chroma-js/src/utils/valid.mjs.map +1 -0
  246. package/dist/esm/node_modules/chroma-js/src/version.mjs +5 -0
  247. package/dist/esm/node_modules/chroma-js/src/version.mjs.map +1 -0
  248. package/dist/esm/packages/core/src/public/b2b/ui.mjs.map +1 -1
  249. package/dist/esm/packages/web/src/ui/b2b/App.mjs +2 -2
  250. package/dist/esm/packages/web/src/ui/b2b/App.mjs.map +1 -1
  251. package/dist/esm/packages/web/src/ui/b2b/components/Icons.mjs +3 -1
  252. package/dist/esm/packages/web/src/ui/b2b/components/Icons.mjs.map +1 -1
  253. package/dist/esm/packages/web/src/ui/b2c/AppContainer.mjs +1 -1
  254. package/dist/esm/packages/web/src/ui/b2c/AppContainer.mjs.map +1 -1
  255. package/dist/esm/packages/web/src/ui/b2c/IDPContainer.mjs +1 -1
  256. package/dist/esm/packages/web/src/ui/b2c/IDPContainer.mjs.map +1 -1
  257. package/dist/esm/packages/web/src/ui/b2c/PasskeyRegistrationContainer.mjs +1 -1
  258. package/dist/esm/packages/web/src/ui/b2c/PasskeyRegistrationContainer.mjs.map +1 -1
  259. package/dist/esm/packages/web/src/ui/b2c/ResetPasswordContainer.mjs +1 -1
  260. package/dist/esm/packages/web/src/ui/b2c/ResetPasswordContainer.mjs.map +1 -1
  261. package/dist/esm/packages/web/src/ui/b2c/screens/Crypto/SetupNewWallet.mjs +12 -11
  262. package/dist/esm/packages/web/src/ui/b2c/screens/Crypto/SetupNewWallet.mjs.map +1 -1
  263. package/dist/esm/packages/web/src/ui/b2c/screens/Crypto/WalletButtons.mjs +12 -14
  264. package/dist/esm/packages/web/src/ui/b2c/screens/Crypto/WalletButtons.mjs.map +1 -1
  265. package/dist/esm/packages/web/src/ui/b2c/screens/Secondary/PasswordlessAuthenticate.mjs +6 -2
  266. package/dist/esm/packages/web/src/ui/b2c/screens/Secondary/PasswordlessAuthenticate.mjs.map +1 -1
  267. package/dist/esm/packages/web/src/ui/b2c/screens/Secondary/usePasswordlessAuthenticate.mjs +10 -0
  268. package/dist/esm/packages/web/src/ui/b2c/screens/Secondary/usePasswordlessAuthenticate.mjs.map +1 -1
  269. package/dist/esm/packages/web/src/ui/compat/generateColorFallback.mjs +63 -0
  270. package/dist/esm/packages/web/src/ui/compat/generateColorFallback.mjs.map +1 -0
  271. package/dist/esm/packages/web/src/ui/compat/styleToTheme.mjs +119 -0
  272. package/dist/esm/packages/web/src/ui/compat/styleToTheme.mjs.map +1 -0
  273. package/dist/esm/packages/web/src/ui/components/PresentationConfig.mjs.map +1 -1
  274. package/dist/esm/packages/web/src/ui/components/atoms/Typography.module.css.mjs +2 -2
  275. package/dist/esm/packages/web/src/ui/react/b2b/B2BIdentityProvider.mjs +1 -1
  276. package/dist/esm/packages/web/src/ui/react/b2b/B2BIdentityProvider.mjs.map +1 -1
  277. package/dist/esm/packages/web/src/ui/react/b2b/Stytch.mjs +1 -1
  278. package/dist/esm/packages/web/src/ui/react/b2b/Stytch.mjs.map +1 -1
  279. package/dist/esm/packages/web/src/ui/react/b2b/StytchB2BContext.mjs +1 -1
  280. package/dist/esm/packages/web/src/ui/react/b2b/StytchB2BContext.mjs.map +1 -1
  281. package/dist/esm/packages/web/src/ui/react/b2c/IdentityProvider.mjs +1 -1
  282. package/dist/esm/packages/web/src/ui/react/b2c/IdentityProvider.mjs.map +1 -1
  283. package/dist/esm/packages/web/src/ui/react/b2c/StytchContext.mjs +1 -1
  284. package/dist/esm/packages/web/src/ui/react/b2c/StytchContext.mjs.map +1 -1
  285. package/dist/esm/packages/web/src/ui/react/b2c/StytchLogin.mjs +1 -1
  286. package/dist/esm/packages/web/src/ui/react/b2c/StytchLogin.mjs.map +1 -1
  287. package/dist/esm/packages/web/src/ui/react/b2c/StytchPasskeyRegistration.mjs +1 -1
  288. package/dist/esm/packages/web/src/ui/react/b2c/StytchPasskeyRegistration.mjs.map +1 -1
  289. package/dist/esm/packages/web/src/ui/react/b2c/StytchPasswordReset.mjs +1 -1
  290. package/dist/esm/packages/web/src/ui/react/b2c/StytchPasswordReset.mjs.map +1 -1
  291. package/dist/esm/packages/web/src/ui/react/utils/errors.mjs.map +1 -1
  292. package/dist/esm/packages/web/src/utils/crypto.mjs +15 -14
  293. package/dist/esm/packages/web/src/utils/crypto.mjs.map +1 -1
  294. package/dist/esm/packages/web/src/utils/oauthProviderType.mjs +1 -1
  295. package/dist/esm/packages/web/src/utils/oauthProviderType.mjs.map +1 -1
  296. package/dist/esm-dev/_virtual/index3.mjs +5 -3
  297. package/dist/esm-dev/_virtual/index3.mjs.map +1 -1
  298. package/dist/esm-dev/_virtual/index4.mjs +3 -5
  299. package/dist/esm-dev/_virtual/index4.mjs.map +1 -1
  300. package/dist/esm-dev/b2b/StytchB2BContext.mjs +5 -5
  301. package/dist/esm-dev/b2b/StytchB2BContext.mjs.map +1 -1
  302. package/dist/esm-dev/compat.mjs +3 -0
  303. package/dist/esm-dev/compat.mjs.map +1 -0
  304. package/dist/esm-dev/node_modules/chroma-js/index.mjs +85 -0
  305. package/dist/esm-dev/node_modules/chroma-js/index.mjs.map +1 -0
  306. package/dist/esm-dev/node_modules/chroma-js/src/Color.mjs +53 -0
  307. package/dist/esm-dev/node_modules/chroma-js/src/Color.mjs.map +1 -0
  308. package/dist/esm-dev/node_modules/chroma-js/src/chroma.mjs +11 -0
  309. package/dist/esm-dev/node_modules/chroma-js/src/chroma.mjs.map +1 -0
  310. package/dist/esm-dev/node_modules/chroma-js/src/colors/colorbrewer.mjs +82 -0
  311. package/dist/esm-dev/node_modules/chroma-js/src/colors/colorbrewer.mjs.map +1 -0
  312. package/dist/esm-dev/node_modules/chroma-js/src/colors/w3cx11.mjs +165 -0
  313. package/dist/esm-dev/node_modules/chroma-js/src/colors/w3cx11.mjs.map +1 -0
  314. package/dist/esm-dev/node_modules/chroma-js/src/generator/average.mjs +92 -0
  315. package/dist/esm-dev/node_modules/chroma-js/src/generator/average.mjs.map +1 -0
  316. package/dist/esm-dev/node_modules/chroma-js/src/generator/bezier.mjs +89 -0
  317. package/dist/esm-dev/node_modules/chroma-js/src/generator/bezier.mjs.map +1 -0
  318. package/dist/esm-dev/node_modules/chroma-js/src/generator/blend.mjs +58 -0
  319. package/dist/esm-dev/node_modules/chroma-js/src/generator/blend.mjs.map +1 -0
  320. package/dist/esm-dev/node_modules/chroma-js/src/generator/cubehelix.mjs +93 -0
  321. package/dist/esm-dev/node_modules/chroma-js/src/generator/cubehelix.mjs.map +1 -0
  322. package/dist/esm-dev/node_modules/chroma-js/src/generator/mix.mjs +22 -0
  323. package/dist/esm-dev/node_modules/chroma-js/src/generator/mix.mjs.map +1 -0
  324. package/dist/esm-dev/node_modules/chroma-js/src/generator/random.mjs +16 -0
  325. package/dist/esm-dev/node_modules/chroma-js/src/generator/random.mjs.map +1 -0
  326. package/dist/esm-dev/node_modules/chroma-js/src/generator/scale.mjs +398 -0
  327. package/dist/esm-dev/node_modules/chroma-js/src/generator/scale.mjs.map +1 -0
  328. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/_hsx.mjs +62 -0
  329. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/_hsx.mjs.map +1 -0
  330. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/hcg.mjs +13 -0
  331. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/hcg.mjs.map +1 -0
  332. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/hsi.mjs +13 -0
  333. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/hsi.mjs.map +1 -0
  334. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/hsl.mjs +13 -0
  335. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/hsl.mjs.map +1 -0
  336. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/hsv.mjs +13 -0
  337. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/hsv.mjs.map +1 -0
  338. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/index.mjs +4 -0
  339. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/index.mjs.map +1 -0
  340. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/lab.mjs +20 -0
  341. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/lab.mjs.map +1 -0
  342. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/lch.mjs +14 -0
  343. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/lch.mjs.map +1 -0
  344. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/lrgb.mjs +21 -0
  345. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/lrgb.mjs.map +1 -0
  346. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/num.mjs +15 -0
  347. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/num.mjs.map +1 -0
  348. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/oklab.mjs +20 -0
  349. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/oklab.mjs.map +1 -0
  350. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/oklch.mjs +13 -0
  351. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/oklch.mjs.map +1 -0
  352. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/rgb.mjs +19 -0
  353. package/dist/esm-dev/node_modules/chroma-js/src/interpolator/rgb.mjs.map +1 -0
  354. package/dist/esm-dev/node_modules/chroma-js/src/io/cmyk/cmyk2rgb.mjs +18 -0
  355. package/dist/esm-dev/node_modules/chroma-js/src/io/cmyk/cmyk2rgb.mjs.map +1 -0
  356. package/dist/esm-dev/node_modules/chroma-js/src/io/cmyk/index.mjs +29 -0
  357. package/dist/esm-dev/node_modules/chroma-js/src/io/cmyk/index.mjs.map +1 -0
  358. package/dist/esm-dev/node_modules/chroma-js/src/io/cmyk/rgb2cmyk.mjs +20 -0
  359. package/dist/esm-dev/node_modules/chroma-js/src/io/cmyk/rgb2cmyk.mjs.map +1 -0
  360. package/dist/esm-dev/node_modules/chroma-js/src/io/css/css2rgb.mjs +239 -0
  361. package/dist/esm-dev/node_modules/chroma-js/src/io/css/css2rgb.mjs.map +1 -0
  362. package/dist/esm-dev/node_modules/chroma-js/src/io/css/hsl2css.mjs +29 -0
  363. package/dist/esm-dev/node_modules/chroma-js/src/io/css/hsl2css.mjs.map +1 -0
  364. package/dist/esm-dev/node_modules/chroma-js/src/io/css/index.mjs +27 -0
  365. package/dist/esm-dev/node_modules/chroma-js/src/io/css/index.mjs.map +1 -0
  366. package/dist/esm-dev/node_modules/chroma-js/src/io/css/lab2css.mjs +27 -0
  367. package/dist/esm-dev/node_modules/chroma-js/src/io/css/lab2css.mjs.map +1 -0
  368. package/dist/esm-dev/node_modules/chroma-js/src/io/css/lch2css.mjs +27 -0
  369. package/dist/esm-dev/node_modules/chroma-js/src/io/css/lch2css.mjs.map +1 -0
  370. package/dist/esm-dev/node_modules/chroma-js/src/io/css/oklab2css.mjs +18 -0
  371. package/dist/esm-dev/node_modules/chroma-js/src/io/css/oklab2css.mjs.map +1 -0
  372. package/dist/esm-dev/node_modules/chroma-js/src/io/css/oklch2css.mjs +18 -0
  373. package/dist/esm-dev/node_modules/chroma-js/src/io/css/oklch2css.mjs.map +1 -0
  374. package/dist/esm-dev/node_modules/chroma-js/src/io/css/rgb2css.mjs +65 -0
  375. package/dist/esm-dev/node_modules/chroma-js/src/io/css/rgb2css.mjs.map +1 -0
  376. package/dist/esm-dev/node_modules/chroma-js/src/io/gl/index.mjs +24 -0
  377. package/dist/esm-dev/node_modules/chroma-js/src/io/gl/index.mjs.map +1 -0
  378. package/dist/esm-dev/node_modules/chroma-js/src/io/hcg/hcg2rgb.mjs +58 -0
  379. package/dist/esm-dev/node_modules/chroma-js/src/io/hcg/hcg2rgb.mjs.map +1 -0
  380. package/dist/esm-dev/node_modules/chroma-js/src/io/hcg/index.mjs +29 -0
  381. package/dist/esm-dev/node_modules/chroma-js/src/io/hcg/index.mjs.map +1 -0
  382. package/dist/esm-dev/node_modules/chroma-js/src/io/hcg/rgb2hcg.mjs +25 -0
  383. package/dist/esm-dev/node_modules/chroma-js/src/io/hcg/rgb2hcg.mjs.map +1 -0
  384. package/dist/esm-dev/node_modules/chroma-js/src/io/hex/hex2rgb.mjs +57 -0
  385. package/dist/esm-dev/node_modules/chroma-js/src/io/hex/hex2rgb.mjs.map +1 -0
  386. package/dist/esm-dev/node_modules/chroma-js/src/io/hex/index.mjs +30 -0
  387. package/dist/esm-dev/node_modules/chroma-js/src/io/hex/index.mjs.map +1 -0
  388. package/dist/esm-dev/node_modules/chroma-js/src/io/hex/rgb2hex.mjs +33 -0
  389. package/dist/esm-dev/node_modules/chroma-js/src/io/hex/rgb2hex.mjs.map +1 -0
  390. package/dist/esm-dev/node_modules/chroma-js/src/io/hsi/hsi2rgb.mjs +49 -0
  391. package/dist/esm-dev/node_modules/chroma-js/src/io/hsi/hsi2rgb.mjs.map +1 -0
  392. package/dist/esm-dev/node_modules/chroma-js/src/io/hsi/index.mjs +29 -0
  393. package/dist/esm-dev/node_modules/chroma-js/src/io/hsi/index.mjs.map +1 -0
  394. package/dist/esm-dev/node_modules/chroma-js/src/io/hsi/rgb2hsi.mjs +34 -0
  395. package/dist/esm-dev/node_modules/chroma-js/src/io/hsi/rgb2hsi.mjs.map +1 -0
  396. package/dist/esm-dev/node_modules/chroma-js/src/io/hsl/hsl2rgb.mjs +37 -0
  397. package/dist/esm-dev/node_modules/chroma-js/src/io/hsl/hsl2rgb.mjs.map +1 -0
  398. package/dist/esm-dev/node_modules/chroma-js/src/io/hsl/index.mjs +29 -0
  399. package/dist/esm-dev/node_modules/chroma-js/src/io/hsl/index.mjs.map +1 -0
  400. package/dist/esm-dev/node_modules/chroma-js/src/io/hsl/rgb2hsl.mjs +47 -0
  401. package/dist/esm-dev/node_modules/chroma-js/src/io/hsl/rgb2hsl.mjs.map +1 -0
  402. package/dist/esm-dev/node_modules/chroma-js/src/io/hsv/hsv2rgb.mjs +50 -0
  403. package/dist/esm-dev/node_modules/chroma-js/src/io/hsv/hsv2rgb.mjs.map +1 -0
  404. package/dist/esm-dev/node_modules/chroma-js/src/io/hsv/index.mjs +29 -0
  405. package/dist/esm-dev/node_modules/chroma-js/src/io/hsv/index.mjs.map +1 -0
  406. package/dist/esm-dev/node_modules/chroma-js/src/io/hsv/rgb2hsv.mjs +35 -0
  407. package/dist/esm-dev/node_modules/chroma-js/src/io/hsv/rgb2hsv.mjs.map +1 -0
  408. package/dist/esm-dev/node_modules/chroma-js/src/io/input.mjs +7 -0
  409. package/dist/esm-dev/node_modules/chroma-js/src/io/input.mjs.map +1 -0
  410. package/dist/esm-dev/node_modules/chroma-js/src/io/lab/index.mjs +30 -0
  411. package/dist/esm-dev/node_modules/chroma-js/src/io/lab/index.mjs.map +1 -0
  412. package/dist/esm-dev/node_modules/chroma-js/src/io/lab/lab-constants.mjs +116 -0
  413. package/dist/esm-dev/node_modules/chroma-js/src/io/lab/lab-constants.mjs.map +1 -0
  414. package/dist/esm-dev/node_modules/chroma-js/src/io/lab/lab2rgb.mjs +102 -0
  415. package/dist/esm-dev/node_modules/chroma-js/src/io/lab/lab2rgb.mjs.map +1 -0
  416. package/dist/esm-dev/node_modules/chroma-js/src/io/lab/rgb2lab.mjs +68 -0
  417. package/dist/esm-dev/node_modules/chroma-js/src/io/lab/rgb2lab.mjs.map +1 -0
  418. package/dist/esm-dev/node_modules/chroma-js/src/io/lch/hcl2rgb.mjs +11 -0
  419. package/dist/esm-dev/node_modules/chroma-js/src/io/lch/hcl2rgb.mjs.map +1 -0
  420. package/dist/esm-dev/node_modules/chroma-js/src/io/lch/index.mjs +38 -0
  421. package/dist/esm-dev/node_modules/chroma-js/src/io/lch/index.mjs.map +1 -0
  422. package/dist/esm-dev/node_modules/chroma-js/src/io/lch/lab2lch.mjs +15 -0
  423. package/dist/esm-dev/node_modules/chroma-js/src/io/lch/lab2lch.mjs.map +1 -0
  424. package/dist/esm-dev/node_modules/chroma-js/src/io/lch/lch2lab.mjs +21 -0
  425. package/dist/esm-dev/node_modules/chroma-js/src/io/lch/lch2lab.mjs.map +1 -0
  426. package/dist/esm-dev/node_modules/chroma-js/src/io/lch/lch2rgb.mjs +15 -0
  427. package/dist/esm-dev/node_modules/chroma-js/src/io/lch/lch2rgb.mjs.map +1 -0
  428. package/dist/esm-dev/node_modules/chroma-js/src/io/lch/rgb2lch.mjs +14 -0
  429. package/dist/esm-dev/node_modules/chroma-js/src/io/lch/rgb2lch.mjs.map +1 -0
  430. package/dist/esm-dev/node_modules/chroma-js/src/io/named/index.mjs +30 -0
  431. package/dist/esm-dev/node_modules/chroma-js/src/io/named/index.mjs.map +1 -0
  432. package/dist/esm-dev/node_modules/chroma-js/src/io/num/index.mjs +33 -0
  433. package/dist/esm-dev/node_modules/chroma-js/src/io/num/index.mjs.map +1 -0
  434. package/dist/esm-dev/node_modules/chroma-js/src/io/num/num2rgb.mjs +14 -0
  435. package/dist/esm-dev/node_modules/chroma-js/src/io/num/num2rgb.mjs.map +1 -0
  436. package/dist/esm-dev/node_modules/chroma-js/src/io/num/rgb2num.mjs +10 -0
  437. package/dist/esm-dev/node_modules/chroma-js/src/io/num/rgb2num.mjs.map +1 -0
  438. package/dist/esm-dev/node_modules/chroma-js/src/io/oklab/index.mjs +29 -0
  439. package/dist/esm-dev/node_modules/chroma-js/src/io/oklab/index.mjs.map +1 -0
  440. package/dist/esm-dev/node_modules/chroma-js/src/io/oklab/oklab2rgb.mjs +36 -0
  441. package/dist/esm-dev/node_modules/chroma-js/src/io/oklab/oklab2rgb.mjs.map +1 -0
  442. package/dist/esm-dev/node_modules/chroma-js/src/io/oklab/rgb2oklab.mjs +39 -0
  443. package/dist/esm-dev/node_modules/chroma-js/src/io/oklab/rgb2oklab.mjs.map +1 -0
  444. package/dist/esm-dev/node_modules/chroma-js/src/io/oklch/index.mjs +29 -0
  445. package/dist/esm-dev/node_modules/chroma-js/src/io/oklch/index.mjs.map +1 -0
  446. package/dist/esm-dev/node_modules/chroma-js/src/io/oklch/oklch2rgb.mjs +15 -0
  447. package/dist/esm-dev/node_modules/chroma-js/src/io/oklch/oklch2rgb.mjs.map +1 -0
  448. package/dist/esm-dev/node_modules/chroma-js/src/io/oklch/rgb2oklch.mjs +14 -0
  449. package/dist/esm-dev/node_modules/chroma-js/src/io/oklch/rgb2oklch.mjs.map +1 -0
  450. package/dist/esm-dev/node_modules/chroma-js/src/io/rgb/index.mjs +47 -0
  451. package/dist/esm-dev/node_modules/chroma-js/src/io/rgb/index.mjs.map +1 -0
  452. package/dist/esm-dev/node_modules/chroma-js/src/io/temp/index.mjs +23 -0
  453. package/dist/esm-dev/node_modules/chroma-js/src/io/temp/index.mjs.map +1 -0
  454. package/dist/esm-dev/node_modules/chroma-js/src/io/temp/rgb2temperature.mjs +33 -0
  455. package/dist/esm-dev/node_modules/chroma-js/src/io/temp/rgb2temperature.mjs.map +1 -0
  456. package/dist/esm-dev/node_modules/chroma-js/src/io/temp/temperature2rgb.mjs +40 -0
  457. package/dist/esm-dev/node_modules/chroma-js/src/io/temp/temperature2rgb.mjs.map +1 -0
  458. package/dist/esm-dev/node_modules/chroma-js/src/ops/alpha.mjs +14 -0
  459. package/dist/esm-dev/node_modules/chroma-js/src/ops/alpha.mjs.map +1 -0
  460. package/dist/esm-dev/node_modules/chroma-js/src/ops/clipped.mjs +6 -0
  461. package/dist/esm-dev/node_modules/chroma-js/src/ops/clipped.mjs.map +1 -0
  462. package/dist/esm-dev/node_modules/chroma-js/src/ops/darken.mjs +18 -0
  463. package/dist/esm-dev/node_modules/chroma-js/src/ops/darken.mjs.map +1 -0
  464. package/dist/esm-dev/node_modules/chroma-js/src/ops/get.mjs +14 -0
  465. package/dist/esm-dev/node_modules/chroma-js/src/ops/get.mjs.map +1 -0
  466. package/dist/esm-dev/node_modules/chroma-js/src/ops/luminance.mjs +56 -0
  467. package/dist/esm-dev/node_modules/chroma-js/src/ops/luminance.mjs.map +1 -0
  468. package/dist/esm-dev/node_modules/chroma-js/src/ops/mix.mjs +11 -0
  469. package/dist/esm-dev/node_modules/chroma-js/src/ops/mix.mjs.map +1 -0
  470. package/dist/esm-dev/node_modules/chroma-js/src/ops/premultiply.mjs +13 -0
  471. package/dist/esm-dev/node_modules/chroma-js/src/ops/premultiply.mjs.map +1 -0
  472. package/dist/esm-dev/node_modules/chroma-js/src/ops/saturate.mjs +16 -0
  473. package/dist/esm-dev/node_modules/chroma-js/src/ops/saturate.mjs.map +1 -0
  474. package/dist/esm-dev/node_modules/chroma-js/src/ops/set.mjs +44 -0
  475. package/dist/esm-dev/node_modules/chroma-js/src/ops/set.mjs.map +1 -0
  476. package/dist/esm-dev/node_modules/chroma-js/src/ops/shade.mjs +12 -0
  477. package/dist/esm-dev/node_modules/chroma-js/src/ops/shade.mjs.map +1 -0
  478. package/dist/esm-dev/node_modules/chroma-js/src/utils/analyze.mjs +194 -0
  479. package/dist/esm-dev/node_modules/chroma-js/src/utils/analyze.mjs.map +1 -0
  480. package/dist/esm-dev/node_modules/chroma-js/src/utils/clip_rgb.mjs +18 -0
  481. package/dist/esm-dev/node_modules/chroma-js/src/utils/clip_rgb.mjs.map +1 -0
  482. package/dist/esm-dev/node_modules/chroma-js/src/utils/contrast.mjs +15 -0
  483. package/dist/esm-dev/node_modules/chroma-js/src/utils/contrast.mjs.map +1 -0
  484. package/dist/esm-dev/node_modules/chroma-js/src/utils/contrastAPCA.mjs +71 -0
  485. package/dist/esm-dev/node_modules/chroma-js/src/utils/contrastAPCA.mjs.map +1 -0
  486. package/dist/esm-dev/node_modules/chroma-js/src/utils/delta-e.mjs +66 -0
  487. package/dist/esm-dev/node_modules/chroma-js/src/utils/delta-e.mjs.map +1 -0
  488. package/dist/esm-dev/node_modules/chroma-js/src/utils/distance.mjs +20 -0
  489. package/dist/esm-dev/node_modules/chroma-js/src/utils/distance.mjs.map +1 -0
  490. package/dist/esm-dev/node_modules/chroma-js/src/utils/index.mjs +24 -0
  491. package/dist/esm-dev/node_modules/chroma-js/src/utils/index.mjs.map +1 -0
  492. package/dist/esm-dev/node_modules/chroma-js/src/utils/last.mjs +11 -0
  493. package/dist/esm-dev/node_modules/chroma-js/src/utils/last.mjs.map +1 -0
  494. package/dist/esm-dev/node_modules/chroma-js/src/utils/limit.mjs +8 -0
  495. package/dist/esm-dev/node_modules/chroma-js/src/utils/limit.mjs.map +1 -0
  496. package/dist/esm-dev/node_modules/chroma-js/src/utils/multiply-matrices.mjs +39 -0
  497. package/dist/esm-dev/node_modules/chroma-js/src/utils/multiply-matrices.mjs.map +1 -0
  498. package/dist/esm-dev/node_modules/chroma-js/src/utils/scales.mjs +19 -0
  499. package/dist/esm-dev/node_modules/chroma-js/src/utils/scales.mjs.map +1 -0
  500. package/dist/esm-dev/node_modules/chroma-js/src/utils/type.mjs +21 -0
  501. package/dist/esm-dev/node_modules/chroma-js/src/utils/type.mjs.map +1 -0
  502. package/dist/esm-dev/node_modules/chroma-js/src/utils/unpack.mjs +20 -0
  503. package/dist/esm-dev/node_modules/chroma-js/src/utils/unpack.mjs.map +1 -0
  504. package/dist/esm-dev/node_modules/chroma-js/src/utils/valid.mjs +14 -0
  505. package/dist/esm-dev/node_modules/chroma-js/src/utils/valid.mjs.map +1 -0
  506. package/dist/esm-dev/node_modules/chroma-js/src/version.mjs +5 -0
  507. package/dist/esm-dev/node_modules/chroma-js/src/version.mjs.map +1 -0
  508. package/dist/esm-dev/packages/core/src/public/b2b/ui.mjs.map +1 -1
  509. package/dist/esm-dev/packages/core/src/utils/dev.mjs +7 -1
  510. package/dist/esm-dev/packages/core/src/utils/dev.mjs.map +1 -1
  511. package/dist/esm-dev/packages/web/src/adminPortal/utils/theme.mjs +1 -1
  512. package/dist/esm-dev/packages/web/src/ui/b2b/App.mjs +14 -2
  513. package/dist/esm-dev/packages/web/src/ui/b2b/App.mjs.map +1 -1
  514. package/dist/esm-dev/packages/web/src/ui/b2b/components/Icons.mjs +3 -1
  515. package/dist/esm-dev/packages/web/src/ui/b2b/components/Icons.mjs.map +1 -1
  516. package/dist/esm-dev/packages/web/src/ui/b2c/AppContainer.mjs +8 -1
  517. package/dist/esm-dev/packages/web/src/ui/b2c/AppContainer.mjs.map +1 -1
  518. package/dist/esm-dev/packages/web/src/ui/b2c/IDPContainer.mjs +8 -1
  519. package/dist/esm-dev/packages/web/src/ui/b2c/IDPContainer.mjs.map +1 -1
  520. package/dist/esm-dev/packages/web/src/ui/b2c/PasskeyRegistrationContainer.mjs +8 -1
  521. package/dist/esm-dev/packages/web/src/ui/b2c/PasskeyRegistrationContainer.mjs.map +1 -1
  522. package/dist/esm-dev/packages/web/src/ui/b2c/ResetPasswordContainer.mjs +8 -1
  523. package/dist/esm-dev/packages/web/src/ui/b2c/ResetPasswordContainer.mjs.map +1 -1
  524. package/dist/esm-dev/packages/web/src/ui/b2c/screens/Crypto/SetupNewWallet.mjs +12 -11
  525. package/dist/esm-dev/packages/web/src/ui/b2c/screens/Crypto/SetupNewWallet.mjs.map +1 -1
  526. package/dist/esm-dev/packages/web/src/ui/b2c/screens/Crypto/WalletButtons.mjs +12 -14
  527. package/dist/esm-dev/packages/web/src/ui/b2c/screens/Crypto/WalletButtons.mjs.map +1 -1
  528. package/dist/esm-dev/packages/web/src/ui/b2c/screens/Secondary/PasswordlessAuthenticate.mjs +6 -2
  529. package/dist/esm-dev/packages/web/src/ui/b2c/screens/Secondary/PasswordlessAuthenticate.mjs.map +1 -1
  530. package/dist/esm-dev/packages/web/src/ui/b2c/screens/Secondary/usePasswordlessAuthenticate.mjs +10 -0
  531. package/dist/esm-dev/packages/web/src/ui/b2c/screens/Secondary/usePasswordlessAuthenticate.mjs.map +1 -1
  532. package/dist/esm-dev/packages/web/src/ui/compat/generateColorFallback.mjs +63 -0
  533. package/dist/esm-dev/packages/web/src/ui/compat/generateColorFallback.mjs.map +1 -0
  534. package/dist/esm-dev/packages/web/src/ui/compat/styleToTheme.mjs +166 -0
  535. package/dist/esm-dev/packages/web/src/ui/compat/styleToTheme.mjs.map +1 -0
  536. package/dist/esm-dev/packages/web/src/ui/components/PresentationConfig.mjs +3 -2
  537. package/dist/esm-dev/packages/web/src/ui/components/PresentationConfig.mjs.map +1 -1
  538. package/dist/esm-dev/packages/web/src/ui/components/atoms/Typography.module.css.mjs +2 -2
  539. package/dist/esm-dev/packages/web/src/ui/react/b2b/B2BIdentityProvider.mjs +1 -1
  540. package/dist/esm-dev/packages/web/src/ui/react/b2b/B2BIdentityProvider.mjs.map +1 -1
  541. package/dist/esm-dev/packages/web/src/ui/react/b2b/Stytch.mjs +1 -1
  542. package/dist/esm-dev/packages/web/src/ui/react/b2b/Stytch.mjs.map +1 -1
  543. package/dist/esm-dev/packages/web/src/ui/react/b2b/StytchB2BContext.mjs +1 -1
  544. package/dist/esm-dev/packages/web/src/ui/react/b2b/StytchB2BContext.mjs.map +1 -1
  545. package/dist/esm-dev/packages/web/src/ui/react/b2c/IdentityProvider.mjs +1 -1
  546. package/dist/esm-dev/packages/web/src/ui/react/b2c/IdentityProvider.mjs.map +1 -1
  547. package/dist/esm-dev/packages/web/src/ui/react/b2c/StytchContext.mjs +1 -1
  548. package/dist/esm-dev/packages/web/src/ui/react/b2c/StytchContext.mjs.map +1 -1
  549. package/dist/esm-dev/packages/web/src/ui/react/b2c/StytchLogin.mjs +1 -1
  550. package/dist/esm-dev/packages/web/src/ui/react/b2c/StytchLogin.mjs.map +1 -1
  551. package/dist/esm-dev/packages/web/src/ui/react/b2c/StytchPasskeyRegistration.mjs +1 -1
  552. package/dist/esm-dev/packages/web/src/ui/react/b2c/StytchPasskeyRegistration.mjs.map +1 -1
  553. package/dist/esm-dev/packages/web/src/ui/react/b2c/StytchPasswordReset.mjs +1 -1
  554. package/dist/esm-dev/packages/web/src/ui/react/b2c/StytchPasswordReset.mjs.map +1 -1
  555. package/dist/esm-dev/packages/web/src/ui/react/utils/errors.mjs +8 -4
  556. package/dist/esm-dev/packages/web/src/ui/react/utils/errors.mjs.map +1 -1
  557. package/dist/esm-dev/packages/web/src/utils/crypto.mjs +15 -14
  558. package/dist/esm-dev/packages/web/src/utils/crypto.mjs.map +1 -1
  559. package/dist/esm-dev/packages/web/src/utils/oauthProviderType.mjs +1 -1
  560. package/dist/esm-dev/packages/web/src/utils/oauthProviderType.mjs.map +1 -1
  561. package/dist/types/PresentationConfig-CcNEXkjS.d.ts +172 -0
  562. package/dist/types/{StytchB2BClient-C_7NUKZh.d.ts → StytchB2BClient-D16e_lp1.d.ts} +2 -1
  563. package/dist/types/{StytchClient-Ccvk8Nj1.d.ts → StytchClient-BwQdJzdj.d.ts} +2 -1
  564. package/dist/types/adminPortal/index.d.ts +5 -3
  565. package/dist/types/b2b/index.d.ts +27 -16
  566. package/dist/types/b2b/index.headless.d.ts +5 -4
  567. package/dist/types/compat.d.ts +46 -0
  568. package/dist/types/createAuthUrlHandler-R1kNNQD_.d.ts +2406 -0
  569. package/dist/types/{idpHelpers-aCVwNrDk.d.ts → idpHelpers-BQP76WgZ.d.ts} +1 -1
  570. package/dist/types/index.d.ts +36 -13
  571. package/dist/types/index.headless.d.ts +5 -4
  572. package/dist/types/{shadcn-0e4fkV5Z.d.ts → shadcn-B04UXoBD.d.ts} +10 -169
  573. package/dist/types/{createAuthUrlHandler-BJRA2PHG.d.ts → ui-B7IvSGQf.d.ts} +1123 -3525
  574. package/package.json +1 -1
  575. package/dist/cjs/index-Ni_dyEsz.js.map +0 -1
  576. package/dist/cjs/shadcn-B8TEzQMT.js.map +0 -1
  577. package/dist/cjs-dev/StytchSSRProxy-CxXsyme4.js.map +0 -1
  578. package/dist/cjs-dev/idpHelpers-Cf8Qq1B4.js.map +0 -1
  579. package/dist/cjs-dev/index-DdK3Jt4u.js.map +0 -1
  580. package/dist/cjs-dev/shadcn-C4w3DtKK.js.map +0 -1
@@ -0,0 +1,3694 @@
1
+ 'use strict';
2
+
3
+ var dev = require('./dev-DaCGDI6V.js');
4
+ var logger = require('./logger-CvOATP4R.js');
5
+
6
+ const { min: min$4, max: max$4 } = Math;
7
+
8
+ var limit = (x, low = 0, high = 1) => {
9
+ return min$4(max$4(low, x), high);
10
+ };
11
+
12
+ var clip_rgb = (rgb) => {
13
+ rgb._clipped = false;
14
+ rgb._unclipped = rgb.slice(0);
15
+ for (let i = 0; i <= 3; i++) {
16
+ if (i < 3) {
17
+ if (rgb[i] < 0 || rgb[i] > 255) rgb._clipped = true;
18
+ rgb[i] = limit(rgb[i], 0, 255);
19
+ } else if (i === 3) {
20
+ rgb[i] = limit(rgb[i], 0, 1);
21
+ }
22
+ }
23
+ return rgb;
24
+ };
25
+
26
+ // ported from jQuery's $.type
27
+ const classToType = {};
28
+ for (let name of [
29
+ 'Boolean',
30
+ 'Number',
31
+ 'String',
32
+ 'Function',
33
+ 'Array',
34
+ 'Date',
35
+ 'RegExp',
36
+ 'Undefined',
37
+ 'Null'
38
+ ]) {
39
+ classToType[`[object ${name}]`] = name.toLowerCase();
40
+ }
41
+ function type (obj) {
42
+ return classToType[Object.prototype.toString.call(obj)] || 'object';
43
+ }
44
+
45
+ var unpack = (args, keyOrder = null) => {
46
+ // if called with more than 3 arguments, we return the arguments
47
+ if (args.length >= 3) return Array.prototype.slice.call(args);
48
+ // with less than 3 args we check if first arg is object
49
+ // and use the keyOrder string to extract and sort properties
50
+ if (type(args[0]) == 'object' && keyOrder) {
51
+ return keyOrder
52
+ .split('')
53
+ .filter((k) => args[0][k] !== undefined)
54
+ .map((k) => args[0][k]);
55
+ }
56
+ // otherwise we just return the first argument
57
+ // (which we suppose is an array of args)
58
+ return args[0].slice(0);
59
+ };
60
+
61
+ var last = (args) => {
62
+ if (args.length < 2) return null;
63
+ const l = args.length - 1;
64
+ if (type(args[l]) == 'string') return args[l].toLowerCase();
65
+ return null;
66
+ };
67
+
68
+ const { PI: PI$2, min: min$3, max: max$3 } = Math;
69
+
70
+ const rnd2 = (a) => Math.round(a * 100) / 100;
71
+ const rnd3 = (a) => Math.round(a * 100) / 100;
72
+
73
+ const TWOPI = PI$2 * 2;
74
+ const PITHIRD = PI$2 / 3;
75
+ const DEG2RAD = PI$2 / 180;
76
+ const RAD2DEG = 180 / PI$2;
77
+
78
+ /**
79
+ * Reverse the first three elements of an array
80
+ *
81
+ * @param {any[]} arr
82
+ * @returns {any[]}
83
+ */
84
+ function reverse3(arr) {
85
+ return [...arr.slice(0, 3).reverse(), ...arr.slice(3)];
86
+ }
87
+
88
+ var input = {
89
+ format: {},
90
+ autodetect: []
91
+ };
92
+
93
+ class Color {
94
+ constructor(...args) {
95
+ const me = this;
96
+ if (
97
+ type(args[0]) === 'object' &&
98
+ args[0].constructor &&
99
+ args[0].constructor === this.constructor
100
+ ) {
101
+ // the argument is already a Color instance
102
+ return args[0];
103
+ }
104
+ // last argument could be the mode
105
+ let mode = last(args);
106
+ let autodetect = false;
107
+ if (!mode) {
108
+ autodetect = true;
109
+
110
+ if (!input.sorted) {
111
+ input.autodetect = input.autodetect.sort((a, b) => b.p - a.p);
112
+ input.sorted = true;
113
+ }
114
+
115
+ // auto-detect format
116
+ for (let chk of input.autodetect) {
117
+ mode = chk.test(...args);
118
+ if (mode) break;
119
+ }
120
+ }
121
+ if (input.format[mode]) {
122
+ const rgb = input.format[mode].apply(
123
+ null,
124
+ autodetect ? args : args.slice(0, -1)
125
+ );
126
+ me._rgb = clip_rgb(rgb);
127
+ } else {
128
+ throw new Error('unknown format: ' + args);
129
+ }
130
+ // add alpha channel
131
+ if (me._rgb.length === 3) me._rgb.push(1);
132
+ }
133
+ toString() {
134
+ if (type(this.hex) == 'function') return this.hex();
135
+ return `[${this._rgb.join(',')}]`;
136
+ }
137
+ }
138
+
139
+ // this gets updated automatically
140
+ const version = '3.1.2';
141
+
142
+ const chroma = (...args) => {
143
+ return new Color(...args);
144
+ };
145
+
146
+ chroma.version = version;
147
+
148
+ /**
149
+ X11 color names
150
+
151
+ http://www.w3.org/TR/css3-color/#svg-color
152
+ */
153
+
154
+ const w3cx11 = {
155
+ aliceblue: '#f0f8ff',
156
+ antiquewhite: '#faebd7',
157
+ aqua: '#00ffff',
158
+ aquamarine: '#7fffd4',
159
+ azure: '#f0ffff',
160
+ beige: '#f5f5dc',
161
+ bisque: '#ffe4c4',
162
+ black: '#000000',
163
+ blanchedalmond: '#ffebcd',
164
+ blue: '#0000ff',
165
+ blueviolet: '#8a2be2',
166
+ brown: '#a52a2a',
167
+ burlywood: '#deb887',
168
+ cadetblue: '#5f9ea0',
169
+ chartreuse: '#7fff00',
170
+ chocolate: '#d2691e',
171
+ coral: '#ff7f50',
172
+ cornflowerblue: '#6495ed',
173
+ cornsilk: '#fff8dc',
174
+ crimson: '#dc143c',
175
+ cyan: '#00ffff',
176
+ darkblue: '#00008b',
177
+ darkcyan: '#008b8b',
178
+ darkgoldenrod: '#b8860b',
179
+ darkgray: '#a9a9a9',
180
+ darkgreen: '#006400',
181
+ darkgrey: '#a9a9a9',
182
+ darkkhaki: '#bdb76b',
183
+ darkmagenta: '#8b008b',
184
+ darkolivegreen: '#556b2f',
185
+ darkorange: '#ff8c00',
186
+ darkorchid: '#9932cc',
187
+ darkred: '#8b0000',
188
+ darksalmon: '#e9967a',
189
+ darkseagreen: '#8fbc8f',
190
+ darkslateblue: '#483d8b',
191
+ darkslategray: '#2f4f4f',
192
+ darkslategrey: '#2f4f4f',
193
+ darkturquoise: '#00ced1',
194
+ darkviolet: '#9400d3',
195
+ deeppink: '#ff1493',
196
+ deepskyblue: '#00bfff',
197
+ dimgray: '#696969',
198
+ dimgrey: '#696969',
199
+ dodgerblue: '#1e90ff',
200
+ firebrick: '#b22222',
201
+ floralwhite: '#fffaf0',
202
+ forestgreen: '#228b22',
203
+ fuchsia: '#ff00ff',
204
+ gainsboro: '#dcdcdc',
205
+ ghostwhite: '#f8f8ff',
206
+ gold: '#ffd700',
207
+ goldenrod: '#daa520',
208
+ gray: '#808080',
209
+ green: '#008000',
210
+ greenyellow: '#adff2f',
211
+ grey: '#808080',
212
+ honeydew: '#f0fff0',
213
+ hotpink: '#ff69b4',
214
+ indianred: '#cd5c5c',
215
+ indigo: '#4b0082',
216
+ ivory: '#fffff0',
217
+ khaki: '#f0e68c',
218
+ laserlemon: '#ffff54',
219
+ lavender: '#e6e6fa',
220
+ lavenderblush: '#fff0f5',
221
+ lawngreen: '#7cfc00',
222
+ lemonchiffon: '#fffacd',
223
+ lightblue: '#add8e6',
224
+ lightcoral: '#f08080',
225
+ lightcyan: '#e0ffff',
226
+ lightgoldenrod: '#fafad2',
227
+ lightgoldenrodyellow: '#fafad2',
228
+ lightgray: '#d3d3d3',
229
+ lightgreen: '#90ee90',
230
+ lightgrey: '#d3d3d3',
231
+ lightpink: '#ffb6c1',
232
+ lightsalmon: '#ffa07a',
233
+ lightseagreen: '#20b2aa',
234
+ lightskyblue: '#87cefa',
235
+ lightslategray: '#778899',
236
+ lightslategrey: '#778899',
237
+ lightsteelblue: '#b0c4de',
238
+ lightyellow: '#ffffe0',
239
+ lime: '#00ff00',
240
+ limegreen: '#32cd32',
241
+ linen: '#faf0e6',
242
+ magenta: '#ff00ff',
243
+ maroon: '#800000',
244
+ maroon2: '#7f0000',
245
+ maroon3: '#b03060',
246
+ mediumaquamarine: '#66cdaa',
247
+ mediumblue: '#0000cd',
248
+ mediumorchid: '#ba55d3',
249
+ mediumpurple: '#9370db',
250
+ mediumseagreen: '#3cb371',
251
+ mediumslateblue: '#7b68ee',
252
+ mediumspringgreen: '#00fa9a',
253
+ mediumturquoise: '#48d1cc',
254
+ mediumvioletred: '#c71585',
255
+ midnightblue: '#191970',
256
+ mintcream: '#f5fffa',
257
+ mistyrose: '#ffe4e1',
258
+ moccasin: '#ffe4b5',
259
+ navajowhite: '#ffdead',
260
+ navy: '#000080',
261
+ oldlace: '#fdf5e6',
262
+ olive: '#808000',
263
+ olivedrab: '#6b8e23',
264
+ orange: '#ffa500',
265
+ orangered: '#ff4500',
266
+ orchid: '#da70d6',
267
+ palegoldenrod: '#eee8aa',
268
+ palegreen: '#98fb98',
269
+ paleturquoise: '#afeeee',
270
+ palevioletred: '#db7093',
271
+ papayawhip: '#ffefd5',
272
+ peachpuff: '#ffdab9',
273
+ peru: '#cd853f',
274
+ pink: '#ffc0cb',
275
+ plum: '#dda0dd',
276
+ powderblue: '#b0e0e6',
277
+ purple: '#800080',
278
+ purple2: '#7f007f',
279
+ purple3: '#a020f0',
280
+ rebeccapurple: '#663399',
281
+ red: '#ff0000',
282
+ rosybrown: '#bc8f8f',
283
+ royalblue: '#4169e1',
284
+ saddlebrown: '#8b4513',
285
+ salmon: '#fa8072',
286
+ sandybrown: '#f4a460',
287
+ seagreen: '#2e8b57',
288
+ seashell: '#fff5ee',
289
+ sienna: '#a0522d',
290
+ silver: '#c0c0c0',
291
+ skyblue: '#87ceeb',
292
+ slateblue: '#6a5acd',
293
+ slategray: '#708090',
294
+ slategrey: '#708090',
295
+ snow: '#fffafa',
296
+ springgreen: '#00ff7f',
297
+ steelblue: '#4682b4',
298
+ tan: '#d2b48c',
299
+ teal: '#008080',
300
+ thistle: '#d8bfd8',
301
+ tomato: '#ff6347',
302
+ turquoise: '#40e0d0',
303
+ violet: '#ee82ee',
304
+ wheat: '#f5deb3',
305
+ white: '#ffffff',
306
+ whitesmoke: '#f5f5f5',
307
+ yellow: '#ffff00',
308
+ yellowgreen: '#9acd32'
309
+ };
310
+
311
+ const RE_HEX = /^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/;
312
+ const RE_HEXA = /^#?([A-Fa-f0-9]{8}|[A-Fa-f0-9]{4})$/;
313
+
314
+ const hex2rgb = (hex) => {
315
+ if (hex.match(RE_HEX)) {
316
+ // remove optional leading #
317
+ if (hex.length === 4 || hex.length === 7) {
318
+ hex = hex.substr(1);
319
+ }
320
+ // expand short-notation to full six-digit
321
+ if (hex.length === 3) {
322
+ hex = hex.split('');
323
+ hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];
324
+ }
325
+ const u = parseInt(hex, 16);
326
+ const r = u >> 16;
327
+ const g = (u >> 8) & 0xff;
328
+ const b = u & 0xff;
329
+ return [r, g, b, 1];
330
+ }
331
+
332
+ // match rgba hex format, eg #FF000077
333
+ if (hex.match(RE_HEXA)) {
334
+ if (hex.length === 5 || hex.length === 9) {
335
+ // remove optional leading #
336
+ hex = hex.substr(1);
337
+ }
338
+ // expand short-notation to full eight-digit
339
+ if (hex.length === 4) {
340
+ hex = hex.split('');
341
+ hex =
342
+ hex[0] +
343
+ hex[0] +
344
+ hex[1] +
345
+ hex[1] +
346
+ hex[2] +
347
+ hex[2] +
348
+ hex[3] +
349
+ hex[3];
350
+ }
351
+ const u = parseInt(hex, 16);
352
+ const r = (u >> 24) & 0xff;
353
+ const g = (u >> 16) & 0xff;
354
+ const b = (u >> 8) & 0xff;
355
+ const a = Math.round(((u & 0xff) / 0xff) * 100) / 100;
356
+ return [r, g, b, a];
357
+ }
358
+
359
+ // we used to check for css colors here
360
+ // if _input.css? and rgb = _input.css hex
361
+ // return rgb
362
+
363
+ throw new Error(`unknown hex color: ${hex}`);
364
+ };
365
+
366
+ const { round: round$5 } = Math;
367
+
368
+ const rgb2hex = (...args) => {
369
+ let [r, g, b, a] = unpack(args, 'rgba');
370
+ let mode = last(args) || 'auto';
371
+ if (a === undefined) a = 1;
372
+ if (mode === 'auto') {
373
+ mode = a < 1 ? 'rgba' : 'rgb';
374
+ }
375
+ r = round$5(r);
376
+ g = round$5(g);
377
+ b = round$5(b);
378
+ const u = (r << 16) | (g << 8) | b;
379
+ let str = '000000' + u.toString(16); //#.toUpperCase();
380
+ str = str.substr(str.length - 6);
381
+ let hxa = '0' + round$5(a * 255).toString(16);
382
+ hxa = hxa.substr(hxa.length - 2);
383
+ switch (mode.toLowerCase()) {
384
+ case 'rgba':
385
+ return `#${str}${hxa}`;
386
+ case 'argb':
387
+ return `#${hxa}${str}`;
388
+ default:
389
+ return `#${str}`;
390
+ }
391
+ };
392
+
393
+ Color.prototype.name = function () {
394
+ const hex = rgb2hex(this._rgb, 'rgb');
395
+ for (let n of Object.keys(w3cx11)) {
396
+ if (w3cx11[n] === hex) return n.toLowerCase();
397
+ }
398
+ return hex;
399
+ };
400
+
401
+ input.format.named = (name) => {
402
+ name = name.toLowerCase();
403
+ if (w3cx11[name]) return hex2rgb(w3cx11[name]);
404
+ throw new Error('unknown color name: ' + name);
405
+ };
406
+
407
+ input.autodetect.push({
408
+ p: 5,
409
+ test: (h, ...rest) => {
410
+ if (!rest.length && type(h) === 'string' && w3cx11[h.toLowerCase()]) {
411
+ return 'named';
412
+ }
413
+ }
414
+ });
415
+
416
+ Color.prototype.alpha = function (a, mutate = false) {
417
+ if (a !== undefined && type(a) === 'number') {
418
+ if (mutate) {
419
+ this._rgb[3] = a;
420
+ return this;
421
+ }
422
+ return new Color([this._rgb[0], this._rgb[1], this._rgb[2], a], 'rgb');
423
+ }
424
+ return this._rgb[3];
425
+ };
426
+
427
+ Color.prototype.clipped = function () {
428
+ return this._rgb._clipped || false;
429
+ };
430
+
431
+ const labConstants = {
432
+ // Corresponds roughly to RGB brighter/darker
433
+ Kn: 18,
434
+
435
+ // D65 standard referent
436
+ labWhitePoint: 'd65',
437
+ Xn: 0.95047,
438
+ Yn: 1,
439
+ Zn: 1.08883,
440
+
441
+ kE: 216.0 / 24389.0,
442
+ kKE: 8.0,
443
+ kK: 24389.0 / 27.0,
444
+
445
+ RefWhiteRGB: {
446
+ // sRGB
447
+ X: 0.95047,
448
+ Y: 1,
449
+ Z: 1.08883
450
+ },
451
+
452
+ MtxRGB2XYZ: {
453
+ m00: 0.4124564390896922,
454
+ m01: 0.21267285140562253,
455
+ m02: 0.0193338955823293,
456
+ m10: 0.357576077643909,
457
+ m11: 0.715152155287818,
458
+ m12: 0.11919202588130297,
459
+ m20: 0.18043748326639894,
460
+ m21: 0.07217499330655958,
461
+ m22: 0.9503040785363679
462
+ },
463
+
464
+ MtxXYZ2RGB: {
465
+ m00: 3.2404541621141045,
466
+ m01: -0.9692660305051868,
467
+ m02: 0.055643430959114726,
468
+ m10: -1.5371385127977166,
469
+ m11: 1.8760108454466942,
470
+ m12: -0.2040259135167538,
471
+ m20: -0.498531409556016,
472
+ m21: 0.041556017530349834,
473
+ m22: 1.0572251882231791
474
+ },
475
+
476
+ // used in rgb2xyz
477
+ As: 0.9414285350000001,
478
+ Bs: 1.040417467,
479
+ Cs: 1.089532651,
480
+
481
+ MtxAdaptMa: {
482
+ m00: 0.8951,
483
+ m01: -0.7502,
484
+ m02: 0.0389,
485
+ m10: 0.2664,
486
+ m11: 1.7135,
487
+ m12: -0.0685,
488
+ m20: -0.1614,
489
+ m21: 0.0367,
490
+ m22: 1.0296
491
+ },
492
+
493
+ MtxAdaptMaI: {
494
+ m00: 0.9869929054667123,
495
+ m01: 0.43230526972339456,
496
+ m02: -0.008528664575177328,
497
+ m10: -0.14705425642099013,
498
+ m11: 0.5183602715367776,
499
+ m12: 0.04004282165408487,
500
+ m20: 0.15996265166373125,
501
+ m21: 0.0492912282128556,
502
+ m22: 0.9684866957875502
503
+ }
504
+ };
505
+
506
+ // taken from https://de.mathworks.com/help/images/ref/whitepoint.html
507
+ const ILLUMINANTS = new Map([
508
+ // ASTM E308-01
509
+ ['a', [1.0985, 0.35585]],
510
+ // Wyszecki & Stiles, p. 769
511
+ ['b', [1.0985, 0.35585]],
512
+ // C ASTM E308-01
513
+ ['c', [0.98074, 1.18232]],
514
+ // D50 (ASTM E308-01)
515
+ ['d50', [0.96422, 0.82521]],
516
+ // D55 (ASTM E308-01)
517
+ ['d55', [0.95682, 0.92149]],
518
+ // D65 (ASTM E308-01)
519
+ ['d65', [0.95047, 1.08883]],
520
+ // E (ASTM E308-01)
521
+ ['e', [1, 1, 1]],
522
+ // F2 (ASTM E308-01)
523
+ ['f2', [0.99186, 0.67393]],
524
+ // F7 (ASTM E308-01)
525
+ ['f7', [0.95041, 1.08747]],
526
+ // F11 (ASTM E308-01)
527
+ ['f11', [1.00962, 0.6435]],
528
+ ['icc', [0.96422, 0.82521]]
529
+ ]);
530
+
531
+ function setLabWhitePoint(name) {
532
+ const ill = ILLUMINANTS.get(String(name).toLowerCase());
533
+ if (!ill) {
534
+ throw new Error('unknown Lab illuminant ' + name);
535
+ }
536
+ labConstants.labWhitePoint = name;
537
+ labConstants.Xn = ill[0];
538
+ labConstants.Zn = ill[1];
539
+ }
540
+
541
+ function getLabWhitePoint() {
542
+ return labConstants.labWhitePoint;
543
+ }
544
+
545
+ /*
546
+ * L* [0..100]
547
+ * a [-100..100]
548
+ * b [-100..100]
549
+ */
550
+ const lab2rgb = (...args) => {
551
+ args = unpack(args, 'lab');
552
+ const [L, a, b] = args;
553
+ const [x, y, z] = lab2xyz(L, a, b);
554
+ const [r, g, b_] = xyz2rgb(x, y, z);
555
+ return [r, g, b_, args.length > 3 ? args[3] : 1];
556
+ };
557
+
558
+ const lab2xyz = (L, a, b) => {
559
+ const { kE, kK, kKE, Xn, Yn, Zn } = labConstants;
560
+
561
+ const fy = (L + 16.0) / 116.0;
562
+ const fx = 0.002 * a + fy;
563
+ const fz = fy - 0.005 * b;
564
+
565
+ const fx3 = fx * fx * fx;
566
+ const fz3 = fz * fz * fz;
567
+
568
+ const xr = fx3 > kE ? fx3 : (116.0 * fx - 16.0) / kK;
569
+ const yr = L > kKE ? Math.pow((L + 16.0) / 116.0, 3.0) : L / kK;
570
+ const zr = fz3 > kE ? fz3 : (116.0 * fz - 16.0) / kK;
571
+
572
+ const x = xr * Xn;
573
+ const y = yr * Yn;
574
+ const z = zr * Zn;
575
+
576
+ return [x, y, z];
577
+ };
578
+
579
+ const compand = (linear) => {
580
+ /* sRGB */
581
+ const sign = Math.sign(linear);
582
+ linear = Math.abs(linear);
583
+ return (
584
+ (linear <= 0.0031308
585
+ ? linear * 12.92
586
+ : 1.055 * Math.pow(linear, 1.0 / 2.4) - 0.055) * sign
587
+ );
588
+ };
589
+
590
+ const xyz2rgb = (x, y, z) => {
591
+ const { MtxAdaptMa, MtxAdaptMaI, MtxXYZ2RGB, RefWhiteRGB, Xn, Yn, Zn } =
592
+ labConstants;
593
+
594
+ const As = Xn * MtxAdaptMa.m00 + Yn * MtxAdaptMa.m10 + Zn * MtxAdaptMa.m20;
595
+ const Bs = Xn * MtxAdaptMa.m01 + Yn * MtxAdaptMa.m11 + Zn * MtxAdaptMa.m21;
596
+ const Cs = Xn * MtxAdaptMa.m02 + Yn * MtxAdaptMa.m12 + Zn * MtxAdaptMa.m22;
597
+
598
+ const Ad =
599
+ RefWhiteRGB.X * MtxAdaptMa.m00 +
600
+ RefWhiteRGB.Y * MtxAdaptMa.m10 +
601
+ RefWhiteRGB.Z * MtxAdaptMa.m20;
602
+ const Bd =
603
+ RefWhiteRGB.X * MtxAdaptMa.m01 +
604
+ RefWhiteRGB.Y * MtxAdaptMa.m11 +
605
+ RefWhiteRGB.Z * MtxAdaptMa.m21;
606
+ const Cd =
607
+ RefWhiteRGB.X * MtxAdaptMa.m02 +
608
+ RefWhiteRGB.Y * MtxAdaptMa.m12 +
609
+ RefWhiteRGB.Z * MtxAdaptMa.m22;
610
+
611
+ const X1 =
612
+ (x * MtxAdaptMa.m00 + y * MtxAdaptMa.m10 + z * MtxAdaptMa.m20) *
613
+ (Ad / As);
614
+ const Y1 =
615
+ (x * MtxAdaptMa.m01 + y * MtxAdaptMa.m11 + z * MtxAdaptMa.m21) *
616
+ (Bd / Bs);
617
+ const Z1 =
618
+ (x * MtxAdaptMa.m02 + y * MtxAdaptMa.m12 + z * MtxAdaptMa.m22) *
619
+ (Cd / Cs);
620
+
621
+ const X2 =
622
+ X1 * MtxAdaptMaI.m00 + Y1 * MtxAdaptMaI.m10 + Z1 * MtxAdaptMaI.m20;
623
+ const Y2 =
624
+ X1 * MtxAdaptMaI.m01 + Y1 * MtxAdaptMaI.m11 + Z1 * MtxAdaptMaI.m21;
625
+ const Z2 =
626
+ X1 * MtxAdaptMaI.m02 + Y1 * MtxAdaptMaI.m12 + Z1 * MtxAdaptMaI.m22;
627
+
628
+ const r = compand(
629
+ X2 * MtxXYZ2RGB.m00 + Y2 * MtxXYZ2RGB.m10 + Z2 * MtxXYZ2RGB.m20
630
+ );
631
+ const g = compand(
632
+ X2 * MtxXYZ2RGB.m01 + Y2 * MtxXYZ2RGB.m11 + Z2 * MtxXYZ2RGB.m21
633
+ );
634
+ const b = compand(
635
+ X2 * MtxXYZ2RGB.m02 + Y2 * MtxXYZ2RGB.m12 + Z2 * MtxXYZ2RGB.m22
636
+ );
637
+
638
+ return [r * 255, g * 255, b * 255];
639
+ };
640
+
641
+ const rgb2lab = (...args) => {
642
+ const [r, g, b, ...rest] = unpack(args, 'rgb');
643
+ const [x, y, z] = rgb2xyz(r, g, b);
644
+ const [L, a, b_] = xyz2lab(x, y, z);
645
+ return [L, a, b_, ...(rest.length > 0 && rest[0] < 1 ? [rest[0]] : [])];
646
+ };
647
+
648
+ function xyz2lab(x, y, z) {
649
+ const { Xn, Yn, Zn, kE, kK } = labConstants;
650
+ const xr = x / Xn;
651
+ const yr = y / Yn;
652
+ const zr = z / Zn;
653
+
654
+ const fx = xr > kE ? Math.pow(xr, 1.0 / 3.0) : (kK * xr + 16.0) / 116.0;
655
+ const fy = yr > kE ? Math.pow(yr, 1.0 / 3.0) : (kK * yr + 16.0) / 116.0;
656
+ const fz = zr > kE ? Math.pow(zr, 1.0 / 3.0) : (kK * zr + 16.0) / 116.0;
657
+
658
+ return [116.0 * fy - 16.0, 500.0 * (fx - fy), 200.0 * (fy - fz)];
659
+ }
660
+
661
+ function gammaAdjustSRGB(companded) {
662
+ const sign = Math.sign(companded);
663
+ companded = Math.abs(companded);
664
+ const linear =
665
+ companded <= 0.04045
666
+ ? companded / 12.92
667
+ : Math.pow((companded + 0.055) / 1.055, 2.4);
668
+ return linear * sign;
669
+ }
670
+
671
+ const rgb2xyz = (r, g, b) => {
672
+ // normalize and gamma adjust
673
+ r = gammaAdjustSRGB(r / 255);
674
+ g = gammaAdjustSRGB(g / 255);
675
+ b = gammaAdjustSRGB(b / 255);
676
+
677
+ const { MtxRGB2XYZ, MtxAdaptMa, MtxAdaptMaI, Xn, Yn, Zn, As, Bs, Cs } =
678
+ labConstants;
679
+
680
+ let x = r * MtxRGB2XYZ.m00 + g * MtxRGB2XYZ.m10 + b * MtxRGB2XYZ.m20;
681
+ let y = r * MtxRGB2XYZ.m01 + g * MtxRGB2XYZ.m11 + b * MtxRGB2XYZ.m21;
682
+ let z = r * MtxRGB2XYZ.m02 + g * MtxRGB2XYZ.m12 + b * MtxRGB2XYZ.m22;
683
+
684
+ const Ad = Xn * MtxAdaptMa.m00 + Yn * MtxAdaptMa.m10 + Zn * MtxAdaptMa.m20;
685
+ const Bd = Xn * MtxAdaptMa.m01 + Yn * MtxAdaptMa.m11 + Zn * MtxAdaptMa.m21;
686
+ const Cd = Xn * MtxAdaptMa.m02 + Yn * MtxAdaptMa.m12 + Zn * MtxAdaptMa.m22;
687
+
688
+ let X = x * MtxAdaptMa.m00 + y * MtxAdaptMa.m10 + z * MtxAdaptMa.m20;
689
+ let Y = x * MtxAdaptMa.m01 + y * MtxAdaptMa.m11 + z * MtxAdaptMa.m21;
690
+ let Z = x * MtxAdaptMa.m02 + y * MtxAdaptMa.m12 + z * MtxAdaptMa.m22;
691
+
692
+ X *= Ad / As;
693
+ Y *= Bd / Bs;
694
+ Z *= Cd / Cs;
695
+
696
+ x = X * MtxAdaptMaI.m00 + Y * MtxAdaptMaI.m10 + Z * MtxAdaptMaI.m20;
697
+ y = X * MtxAdaptMaI.m01 + Y * MtxAdaptMaI.m11 + Z * MtxAdaptMaI.m21;
698
+ z = X * MtxAdaptMaI.m02 + Y * MtxAdaptMaI.m12 + Z * MtxAdaptMaI.m22;
699
+
700
+ return [x, y, z];
701
+ };
702
+
703
+ Color.prototype.lab = function () {
704
+ return rgb2lab(this._rgb);
705
+ };
706
+
707
+ const lab$1 = (...args) => new Color(...args, 'lab');
708
+ Object.assign(chroma, { lab: lab$1, getLabWhitePoint, setLabWhitePoint });
709
+
710
+ input.format.lab = lab2rgb;
711
+
712
+ input.autodetect.push({
713
+ p: 2,
714
+ test: (...args) => {
715
+ args = unpack(args, 'lab');
716
+ if (type(args) === 'array' && args.length === 3) {
717
+ return 'lab';
718
+ }
719
+ }
720
+ });
721
+
722
+ Color.prototype.darken = function (amount = 1) {
723
+ const me = this;
724
+ const lab = me.lab();
725
+ lab[0] -= labConstants.Kn * amount;
726
+ return new Color(lab, 'lab').alpha(me.alpha(), true);
727
+ };
728
+
729
+ Color.prototype.brighten = function (amount = 1) {
730
+ return this.darken(-amount);
731
+ };
732
+
733
+ Color.prototype.darker = Color.prototype.darken;
734
+ Color.prototype.brighter = Color.prototype.brighten;
735
+
736
+ Color.prototype.get = function (mc) {
737
+ const [mode, channel] = mc.split('.');
738
+ const src = this[mode]();
739
+ if (channel) {
740
+ const i = mode.indexOf(channel) - (mode.substr(0, 2) === 'ok' ? 2 : 0);
741
+ if (i > -1) return src[i];
742
+ throw new Error(`unknown channel ${channel} in mode ${mode}`);
743
+ } else {
744
+ return src;
745
+ }
746
+ };
747
+
748
+ const { pow: pow$6 } = Math;
749
+
750
+ const EPS = 1e-7;
751
+ const MAX_ITER = 20;
752
+
753
+ Color.prototype.luminance = function (lum, mode = 'rgb') {
754
+ if (lum !== undefined && type(lum) === 'number') {
755
+ if (lum === 0) {
756
+ // return pure black
757
+ return new Color([0, 0, 0, this._rgb[3]], 'rgb');
758
+ }
759
+ if (lum === 1) {
760
+ // return pure white
761
+ return new Color([255, 255, 255, this._rgb[3]], 'rgb');
762
+ }
763
+ // compute new color using...
764
+ let cur_lum = this.luminance();
765
+ let max_iter = MAX_ITER;
766
+
767
+ const test = (low, high) => {
768
+ const mid = low.interpolate(high, 0.5, mode);
769
+ const lm = mid.luminance();
770
+ if (Math.abs(lum - lm) < EPS || !max_iter--) {
771
+ // close enough
772
+ return mid;
773
+ }
774
+ return lm > lum ? test(low, mid) : test(mid, high);
775
+ };
776
+
777
+ const rgb = (
778
+ cur_lum > lum
779
+ ? test(new Color([0, 0, 0]), this)
780
+ : test(this, new Color([255, 255, 255]))
781
+ ).rgb();
782
+ return new Color([...rgb, this._rgb[3]]);
783
+ }
784
+ return rgb2luminance(...this._rgb.slice(0, 3));
785
+ };
786
+
787
+ const rgb2luminance = (r, g, b) => {
788
+ // relative luminance
789
+ // see http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef
790
+ r = luminance_x(r);
791
+ g = luminance_x(g);
792
+ b = luminance_x(b);
793
+ return 0.2126 * r + 0.7152 * g + 0.0722 * b;
794
+ };
795
+
796
+ const luminance_x = (x) => {
797
+ x /= 255;
798
+ return x <= 0.03928 ? x / 12.92 : pow$6((x + 0.055) / 1.055, 2.4);
799
+ };
800
+
801
+ var index = {};
802
+
803
+ var mix = (col1, col2, f = 0.5, ...rest) => {
804
+ let mode = rest[0] || 'lrgb';
805
+ if (!index[mode] && !rest.length) {
806
+ // fall back to the first supported mode
807
+ mode = Object.keys(index)[0];
808
+ }
809
+ if (!index[mode]) {
810
+ throw new Error(`interpolation mode ${mode} is not defined`);
811
+ }
812
+ if (type(col1) !== 'object') col1 = new Color(col1);
813
+ if (type(col2) !== 'object') col2 = new Color(col2);
814
+ return index[mode](col1, col2, f).alpha(
815
+ col1.alpha() + f * (col2.alpha() - col1.alpha())
816
+ );
817
+ };
818
+
819
+ Color.prototype.mix = Color.prototype.interpolate = function (
820
+ col2,
821
+ f = 0.5,
822
+ ...rest
823
+ ) {
824
+ return mix(this, col2, f, ...rest);
825
+ };
826
+
827
+ Color.prototype.premultiply = function (mutate = false) {
828
+ const rgb = this._rgb;
829
+ const a = rgb[3];
830
+ if (mutate) {
831
+ this._rgb = [rgb[0] * a, rgb[1] * a, rgb[2] * a, a];
832
+ return this;
833
+ } else {
834
+ return new Color([rgb[0] * a, rgb[1] * a, rgb[2] * a, a], 'rgb');
835
+ }
836
+ };
837
+
838
+ const { sin: sin$3, cos: cos$4 } = Math;
839
+
840
+ const lch2lab = (...args) => {
841
+ /*
842
+ Convert from a qualitative parameter h and a quantitative parameter l to a 24-bit pixel.
843
+ These formulas were invented by David Dalrymple to obtain maximum contrast without going
844
+ out of gamut if the parameters are in the range 0-1.
845
+
846
+ A saturation multiplier was added by Gregor Aisch
847
+ */
848
+ let [l, c, h] = unpack(args, 'lch');
849
+ if (isNaN(h)) h = 0;
850
+ h = h * DEG2RAD;
851
+ return [l, cos$4(h) * c, sin$3(h) * c];
852
+ };
853
+
854
+ const lch2rgb = (...args) => {
855
+ args = unpack(args, 'lch');
856
+ const [l, c, h] = args;
857
+ const [L, a, b_] = lch2lab(l, c, h);
858
+ const [r, g, b] = lab2rgb(L, a, b_);
859
+ return [r, g, b, args.length > 3 ? args[3] : 1];
860
+ };
861
+
862
+ const hcl2rgb = (...args) => {
863
+ const hcl = reverse3(unpack(args, 'hcl'));
864
+ return lch2rgb(...hcl);
865
+ };
866
+
867
+ const { sqrt: sqrt$4, atan2: atan2$2, round: round$4 } = Math;
868
+
869
+ const lab2lch = (...args) => {
870
+ const [l, a, b] = unpack(args, 'lab');
871
+ const c = sqrt$4(a * a + b * b);
872
+ let h = (atan2$2(b, a) * RAD2DEG + 360) % 360;
873
+ if (round$4(c * 10000) === 0) h = Number.NaN;
874
+ return [l, c, h];
875
+ };
876
+
877
+ const rgb2lch = (...args) => {
878
+ const [r, g, b, ...rest] = unpack(args, 'rgb');
879
+ const [l, a, b_] = rgb2lab(r, g, b);
880
+ const [L, c, h] = lab2lch(l, a, b_);
881
+ return [L, c, h, ...(rest.length > 0 && rest[0] < 1 ? [rest[0]] : [])];
882
+ };
883
+
884
+ Color.prototype.lch = function () {
885
+ return rgb2lch(this._rgb);
886
+ };
887
+ Color.prototype.hcl = function () {
888
+ return reverse3(rgb2lch(this._rgb));
889
+ };
890
+
891
+ const lch$1 = (...args) => new Color(...args, 'lch');
892
+ const hcl = (...args) => new Color(...args, 'hcl');
893
+
894
+ Object.assign(chroma, { lch: lch$1, hcl });
895
+
896
+ input.format.lch = lch2rgb;
897
+ input.format.hcl = hcl2rgb;
898
+ ['lch', 'hcl'].forEach((m) =>
899
+ input.autodetect.push({
900
+ p: 2,
901
+ test: (...args) => {
902
+ args = unpack(args, m);
903
+ if (type(args) === 'array' && args.length === 3) {
904
+ return m;
905
+ }
906
+ }
907
+ })
908
+ );
909
+
910
+ Color.prototype.saturate = function (amount = 1) {
911
+ const me = this;
912
+ const lch = me.lch();
913
+ lch[1] += labConstants.Kn * amount;
914
+ if (lch[1] < 0) lch[1] = 0;
915
+ return new Color(lch, 'lch').alpha(me.alpha(), true);
916
+ };
917
+
918
+ Color.prototype.desaturate = function (amount = 1) {
919
+ return this.saturate(-amount);
920
+ };
921
+
922
+ Color.prototype.set = function (mc, value, mutate = false) {
923
+ const [mode, channel] = mc.split('.');
924
+ const src = this[mode]();
925
+ if (channel) {
926
+ const i = mode.indexOf(channel) - (mode.substr(0, 2) === 'ok' ? 2 : 0);
927
+ if (i > -1) {
928
+ if (type(value) == 'string') {
929
+ switch (value.charAt(0)) {
930
+ case '+':
931
+ src[i] += +value;
932
+ break;
933
+ case '-':
934
+ src[i] += +value;
935
+ break;
936
+ case '*':
937
+ src[i] *= +value.substr(1);
938
+ break;
939
+ case '/':
940
+ src[i] /= +value.substr(1);
941
+ break;
942
+ default:
943
+ src[i] = +value;
944
+ }
945
+ } else if (type(value) === 'number') {
946
+ src[i] = value;
947
+ } else {
948
+ throw new Error(`unsupported value for Color.set`);
949
+ }
950
+ const out = new Color(src, mode);
951
+ if (mutate) {
952
+ this._rgb = out._rgb;
953
+ return this;
954
+ }
955
+ return out;
956
+ }
957
+ throw new Error(`unknown channel ${channel} in mode ${mode}`);
958
+ } else {
959
+ return src;
960
+ }
961
+ };
962
+
963
+ Color.prototype.tint = function (f = 0.5, ...rest) {
964
+ return mix(this, 'white', f, ...rest);
965
+ };
966
+
967
+ Color.prototype.shade = function (f = 0.5, ...rest) {
968
+ return mix(this, 'black', f, ...rest);
969
+ };
970
+
971
+ const rgb$1 = (col1, col2, f) => {
972
+ const xyz0 = col1._rgb;
973
+ const xyz1 = col2._rgb;
974
+ return new Color(
975
+ xyz0[0] + f * (xyz1[0] - xyz0[0]),
976
+ xyz0[1] + f * (xyz1[1] - xyz0[1]),
977
+ xyz0[2] + f * (xyz1[2] - xyz0[2]),
978
+ 'rgb'
979
+ );
980
+ };
981
+
982
+ // register interpolator
983
+ index.rgb = rgb$1;
984
+
985
+ const { sqrt: sqrt$3, pow: pow$5 } = Math;
986
+
987
+ const lrgb = (col1, col2, f) => {
988
+ const [x1, y1, z1] = col1._rgb;
989
+ const [x2, y2, z2] = col2._rgb;
990
+ return new Color(
991
+ sqrt$3(pow$5(x1, 2) * (1 - f) + pow$5(x2, 2) * f),
992
+ sqrt$3(pow$5(y1, 2) * (1 - f) + pow$5(y2, 2) * f),
993
+ sqrt$3(pow$5(z1, 2) * (1 - f) + pow$5(z2, 2) * f),
994
+ 'rgb'
995
+ );
996
+ };
997
+
998
+ // register interpolator
999
+ index.lrgb = lrgb;
1000
+
1001
+ const lab = (col1, col2, f) => {
1002
+ const xyz0 = col1.lab();
1003
+ const xyz1 = col2.lab();
1004
+ return new Color(
1005
+ xyz0[0] + f * (xyz1[0] - xyz0[0]),
1006
+ xyz0[1] + f * (xyz1[1] - xyz0[1]),
1007
+ xyz0[2] + f * (xyz1[2] - xyz0[2]),
1008
+ 'lab'
1009
+ );
1010
+ };
1011
+
1012
+ // register interpolator
1013
+ index.lab = lab;
1014
+
1015
+ var interpolate_hsx = (col1, col2, f, m) => {
1016
+ let xyz0, xyz1;
1017
+ if (m === 'hsl') {
1018
+ xyz0 = col1.hsl();
1019
+ xyz1 = col2.hsl();
1020
+ } else if (m === 'hsv') {
1021
+ xyz0 = col1.hsv();
1022
+ xyz1 = col2.hsv();
1023
+ } else if (m === 'hcg') {
1024
+ xyz0 = col1.hcg();
1025
+ xyz1 = col2.hcg();
1026
+ } else if (m === 'hsi') {
1027
+ xyz0 = col1.hsi();
1028
+ xyz1 = col2.hsi();
1029
+ } else if (m === 'lch' || m === 'hcl') {
1030
+ m = 'hcl';
1031
+ xyz0 = col1.hcl();
1032
+ xyz1 = col2.hcl();
1033
+ } else if (m === 'oklch') {
1034
+ xyz0 = col1.oklch().reverse();
1035
+ xyz1 = col2.oklch().reverse();
1036
+ }
1037
+
1038
+ let hue0, hue1, sat0, sat1, lbv0, lbv1;
1039
+ if (m.substr(0, 1) === 'h' || m === 'oklch') {
1040
+ [hue0, sat0, lbv0] = xyz0;
1041
+ [hue1, sat1, lbv1] = xyz1;
1042
+ }
1043
+
1044
+ let sat, hue, lbv, dh;
1045
+
1046
+ if (!isNaN(hue0) && !isNaN(hue1)) {
1047
+ // both colors have hue
1048
+ if (hue1 > hue0 && hue1 - hue0 > 180) {
1049
+ dh = hue1 - (hue0 + 360);
1050
+ } else if (hue1 < hue0 && hue0 - hue1 > 180) {
1051
+ dh = hue1 + 360 - hue0;
1052
+ } else {
1053
+ dh = hue1 - hue0;
1054
+ }
1055
+ hue = hue0 + f * dh;
1056
+ } else if (!isNaN(hue0)) {
1057
+ hue = hue0;
1058
+ if ((lbv1 == 1 || lbv1 == 0) && m != 'hsv') sat = sat0;
1059
+ } else if (!isNaN(hue1)) {
1060
+ hue = hue1;
1061
+ if ((lbv0 == 1 || lbv0 == 0) && m != 'hsv') sat = sat1;
1062
+ } else {
1063
+ hue = Number.NaN;
1064
+ }
1065
+
1066
+ if (sat === undefined) sat = sat0 + f * (sat1 - sat0);
1067
+ lbv = lbv0 + f * (lbv1 - lbv0);
1068
+ return m === 'oklch'
1069
+ ? new Color([lbv, sat, hue], m)
1070
+ : new Color([hue, sat, lbv], m);
1071
+ };
1072
+
1073
+ const lch = (col1, col2, f) => {
1074
+ return interpolate_hsx(col1, col2, f, 'lch');
1075
+ };
1076
+
1077
+ // register interpolator
1078
+ index.lch = lch;
1079
+ index.hcl = lch;
1080
+
1081
+ const num2rgb = (num) => {
1082
+ if (type(num) == 'number' && num >= 0 && num <= 0xffffff) {
1083
+ const r = num >> 16;
1084
+ const g = (num >> 8) & 0xff;
1085
+ const b = num & 0xff;
1086
+ return [r, g, b, 1];
1087
+ }
1088
+ throw new Error('unknown num color: ' + num);
1089
+ };
1090
+
1091
+ const rgb2num = (...args) => {
1092
+ const [r, g, b] = unpack(args, 'rgb');
1093
+ return (r << 16) + (g << 8) + b;
1094
+ };
1095
+
1096
+ Color.prototype.num = function () {
1097
+ return rgb2num(this._rgb);
1098
+ };
1099
+
1100
+ const num$1 = (...args) => new Color(...args, 'num');
1101
+
1102
+ Object.assign(chroma, { num: num$1 });
1103
+
1104
+ input.format.num = num2rgb;
1105
+
1106
+ input.autodetect.push({
1107
+ p: 5,
1108
+ test: (...args) => {
1109
+ if (
1110
+ args.length === 1 &&
1111
+ type(args[0]) === 'number' &&
1112
+ args[0] >= 0 &&
1113
+ args[0] <= 0xffffff
1114
+ ) {
1115
+ return 'num';
1116
+ }
1117
+ }
1118
+ });
1119
+
1120
+ const num = (col1, col2, f) => {
1121
+ const c1 = col1.num();
1122
+ const c2 = col2.num();
1123
+ return new Color(c1 + f * (c2 - c1), 'num');
1124
+ };
1125
+
1126
+ // register interpolator
1127
+ index.num = num;
1128
+
1129
+ const { floor: floor$3 } = Math;
1130
+
1131
+ /*
1132
+ * this is basically just HSV with some minor tweaks
1133
+ *
1134
+ * hue.. [0..360]
1135
+ * chroma .. [0..1]
1136
+ * grayness .. [0..1]
1137
+ */
1138
+
1139
+ const hcg2rgb = (...args) => {
1140
+ args = unpack(args, 'hcg');
1141
+ let [h, c, _g] = args;
1142
+ let r, g, b;
1143
+ _g = _g * 255;
1144
+ const _c = c * 255;
1145
+ if (c === 0) {
1146
+ r = g = b = _g;
1147
+ } else {
1148
+ if (h === 360) h = 0;
1149
+ if (h > 360) h -= 360;
1150
+ if (h < 0) h += 360;
1151
+ h /= 60;
1152
+ const i = floor$3(h);
1153
+ const f = h - i;
1154
+ const p = _g * (1 - c);
1155
+ const q = p + _c * (1 - f);
1156
+ const t = p + _c * f;
1157
+ const v = p + _c;
1158
+ switch (i) {
1159
+ case 0:
1160
+ [r, g, b] = [v, t, p];
1161
+ break;
1162
+ case 1:
1163
+ [r, g, b] = [q, v, p];
1164
+ break;
1165
+ case 2:
1166
+ [r, g, b] = [p, v, t];
1167
+ break;
1168
+ case 3:
1169
+ [r, g, b] = [p, q, v];
1170
+ break;
1171
+ case 4:
1172
+ [r, g, b] = [t, p, v];
1173
+ break;
1174
+ case 5:
1175
+ [r, g, b] = [v, p, q];
1176
+ break;
1177
+ }
1178
+ }
1179
+ return [r, g, b, args.length > 3 ? args[3] : 1];
1180
+ };
1181
+
1182
+ const rgb2hcg = (...args) => {
1183
+ const [r, g, b] = unpack(args, 'rgb');
1184
+ const minRgb = min$3(r, g, b);
1185
+ const maxRgb = max$3(r, g, b);
1186
+ const delta = maxRgb - minRgb;
1187
+ const c = (delta * 100) / 255;
1188
+ const _g = (minRgb / (255 - delta)) * 100;
1189
+ let h;
1190
+ if (delta === 0) {
1191
+ h = Number.NaN;
1192
+ } else {
1193
+ if (r === maxRgb) h = (g - b) / delta;
1194
+ if (g === maxRgb) h = 2 + (b - r) / delta;
1195
+ if (b === maxRgb) h = 4 + (r - g) / delta;
1196
+ h *= 60;
1197
+ if (h < 0) h += 360;
1198
+ }
1199
+ return [h, c, _g];
1200
+ };
1201
+
1202
+ Color.prototype.hcg = function () {
1203
+ return rgb2hcg(this._rgb);
1204
+ };
1205
+
1206
+ const hcg$1 = (...args) => new Color(...args, 'hcg');
1207
+ chroma.hcg = hcg$1;
1208
+
1209
+ input.format.hcg = hcg2rgb;
1210
+
1211
+ input.autodetect.push({
1212
+ p: 1,
1213
+ test: (...args) => {
1214
+ args = unpack(args, 'hcg');
1215
+ if (type(args) === 'array' && args.length === 3) {
1216
+ return 'hcg';
1217
+ }
1218
+ }
1219
+ });
1220
+
1221
+ const hcg = (col1, col2, f) => {
1222
+ return interpolate_hsx(col1, col2, f, 'hcg');
1223
+ };
1224
+
1225
+ // register interpolator
1226
+ index.hcg = hcg;
1227
+
1228
+ const { cos: cos$3 } = Math;
1229
+
1230
+ /*
1231
+ * hue [0..360]
1232
+ * saturation [0..1]
1233
+ * intensity [0..1]
1234
+ */
1235
+ const hsi2rgb = (...args) => {
1236
+ /*
1237
+ borrowed from here:
1238
+ http://hummer.stanford.edu/museinfo/doc/examples/humdrum/keyscape2/hsi2rgb.cpp
1239
+ */
1240
+ args = unpack(args, 'hsi');
1241
+ let [h, s, i] = args;
1242
+ let r, g, b;
1243
+
1244
+ if (isNaN(h)) h = 0;
1245
+ if (isNaN(s)) s = 0;
1246
+ // normalize hue
1247
+ if (h > 360) h -= 360;
1248
+ if (h < 0) h += 360;
1249
+ h /= 360;
1250
+ if (h < 1 / 3) {
1251
+ b = (1 - s) / 3;
1252
+ r = (1 + (s * cos$3(TWOPI * h)) / cos$3(PITHIRD - TWOPI * h)) / 3;
1253
+ g = 1 - (b + r);
1254
+ } else if (h < 2 / 3) {
1255
+ h -= 1 / 3;
1256
+ r = (1 - s) / 3;
1257
+ g = (1 + (s * cos$3(TWOPI * h)) / cos$3(PITHIRD - TWOPI * h)) / 3;
1258
+ b = 1 - (r + g);
1259
+ } else {
1260
+ h -= 2 / 3;
1261
+ g = (1 - s) / 3;
1262
+ b = (1 + (s * cos$3(TWOPI * h)) / cos$3(PITHIRD - TWOPI * h)) / 3;
1263
+ r = 1 - (g + b);
1264
+ }
1265
+ r = limit(i * r * 3);
1266
+ g = limit(i * g * 3);
1267
+ b = limit(i * b * 3);
1268
+ return [r * 255, g * 255, b * 255, args.length > 3 ? args[3] : 1];
1269
+ };
1270
+
1271
+ const { min: min$2, sqrt: sqrt$2, acos } = Math;
1272
+
1273
+ const rgb2hsi = (...args) => {
1274
+ /*
1275
+ borrowed from here:
1276
+ http://hummer.stanford.edu/museinfo/doc/examples/humdrum/keyscape2/rgb2hsi.cpp
1277
+ */
1278
+ let [r, g, b] = unpack(args, 'rgb');
1279
+ r /= 255;
1280
+ g /= 255;
1281
+ b /= 255;
1282
+ let h;
1283
+ const min_ = min$2(r, g, b);
1284
+ const i = (r + g + b) / 3;
1285
+ const s = i > 0 ? 1 - min_ / i : 0;
1286
+ if (s === 0) {
1287
+ h = NaN;
1288
+ } else {
1289
+ h = (r - g + (r - b)) / 2;
1290
+ h /= sqrt$2((r - g) * (r - g) + (r - b) * (g - b));
1291
+ h = acos(h);
1292
+ if (b > g) {
1293
+ h = TWOPI - h;
1294
+ }
1295
+ h /= TWOPI;
1296
+ }
1297
+ return [h * 360, s, i];
1298
+ };
1299
+
1300
+ Color.prototype.hsi = function () {
1301
+ return rgb2hsi(this._rgb);
1302
+ };
1303
+
1304
+ const hsi$1 = (...args) => new Color(...args, 'hsi');
1305
+ chroma.hsi = hsi$1;
1306
+
1307
+ input.format.hsi = hsi2rgb;
1308
+
1309
+ input.autodetect.push({
1310
+ p: 2,
1311
+ test: (...args) => {
1312
+ args = unpack(args, 'hsi');
1313
+ if (type(args) === 'array' && args.length === 3) {
1314
+ return 'hsi';
1315
+ }
1316
+ }
1317
+ });
1318
+
1319
+ const hsi = (col1, col2, f) => {
1320
+ return interpolate_hsx(col1, col2, f, 'hsi');
1321
+ };
1322
+
1323
+ // register interpolator
1324
+ index.hsi = hsi;
1325
+
1326
+ const hsl2rgb = (...args) => {
1327
+ args = unpack(args, 'hsl');
1328
+ const [h, s, l] = args;
1329
+ let r, g, b;
1330
+ if (s === 0) {
1331
+ r = g = b = l * 255;
1332
+ } else {
1333
+ const t3 = [0, 0, 0];
1334
+ const c = [0, 0, 0];
1335
+ const t2 = l < 0.5 ? l * (1 + s) : l + s - l * s;
1336
+ const t1 = 2 * l - t2;
1337
+ const h_ = h / 360;
1338
+ t3[0] = h_ + 1 / 3;
1339
+ t3[1] = h_;
1340
+ t3[2] = h_ - 1 / 3;
1341
+ for (let i = 0; i < 3; i++) {
1342
+ if (t3[i] < 0) t3[i] += 1;
1343
+ if (t3[i] > 1) t3[i] -= 1;
1344
+ if (6 * t3[i] < 1) c[i] = t1 + (t2 - t1) * 6 * t3[i];
1345
+ else if (2 * t3[i] < 1) c[i] = t2;
1346
+ else if (3 * t3[i] < 2) c[i] = t1 + (t2 - t1) * (2 / 3 - t3[i]) * 6;
1347
+ else c[i] = t1;
1348
+ }
1349
+ [r, g, b] = [c[0] * 255, c[1] * 255, c[2] * 255];
1350
+ }
1351
+ if (args.length > 3) {
1352
+ // keep alpha channel
1353
+ return [r, g, b, args[3]];
1354
+ }
1355
+ return [r, g, b, 1];
1356
+ };
1357
+
1358
+ /*
1359
+ * supported arguments:
1360
+ * - rgb2hsl(r,g,b)
1361
+ * - rgb2hsl(r,g,b,a)
1362
+ * - rgb2hsl([r,g,b])
1363
+ * - rgb2hsl([r,g,b,a])
1364
+ * - rgb2hsl({r,g,b,a})
1365
+ */
1366
+ const rgb2hsl$1 = (...args) => {
1367
+ args = unpack(args, 'rgba');
1368
+ let [r, g, b] = args;
1369
+
1370
+ r /= 255;
1371
+ g /= 255;
1372
+ b /= 255;
1373
+
1374
+ const minRgb = min$3(r, g, b);
1375
+ const maxRgb = max$3(r, g, b);
1376
+
1377
+ const l = (maxRgb + minRgb) / 2;
1378
+ let s, h;
1379
+
1380
+ if (maxRgb === minRgb) {
1381
+ s = 0;
1382
+ h = Number.NaN;
1383
+ } else {
1384
+ s =
1385
+ l < 0.5
1386
+ ? (maxRgb - minRgb) / (maxRgb + minRgb)
1387
+ : (maxRgb - minRgb) / (2 - maxRgb - minRgb);
1388
+ }
1389
+
1390
+ if (r == maxRgb) h = (g - b) / (maxRgb - minRgb);
1391
+ else if (g == maxRgb) h = 2 + (b - r) / (maxRgb - minRgb);
1392
+ else if (b == maxRgb) h = 4 + (r - g) / (maxRgb - minRgb);
1393
+
1394
+ h *= 60;
1395
+ if (h < 0) h += 360;
1396
+ if (args.length > 3 && args[3] !== undefined) return [h, s, l, args[3]];
1397
+ return [h, s, l];
1398
+ };
1399
+
1400
+ Color.prototype.hsl = function () {
1401
+ return rgb2hsl$1(this._rgb);
1402
+ };
1403
+
1404
+ const hsl$1 = (...args) => new Color(...args, 'hsl');
1405
+ chroma.hsl = hsl$1;
1406
+
1407
+ input.format.hsl = hsl2rgb;
1408
+
1409
+ input.autodetect.push({
1410
+ p: 2,
1411
+ test: (...args) => {
1412
+ args = unpack(args, 'hsl');
1413
+ if (type(args) === 'array' && args.length === 3) {
1414
+ return 'hsl';
1415
+ }
1416
+ }
1417
+ });
1418
+
1419
+ const hsl = (col1, col2, f) => {
1420
+ return interpolate_hsx(col1, col2, f, 'hsl');
1421
+ };
1422
+
1423
+ // register interpolator
1424
+ index.hsl = hsl;
1425
+
1426
+ const { floor: floor$2 } = Math;
1427
+
1428
+ const hsv2rgb = (...args) => {
1429
+ args = unpack(args, 'hsv');
1430
+ let [h, s, v] = args;
1431
+ let r, g, b;
1432
+ v *= 255;
1433
+ if (s === 0) {
1434
+ r = g = b = v;
1435
+ } else {
1436
+ if (h === 360) h = 0;
1437
+ if (h > 360) h -= 360;
1438
+ if (h < 0) h += 360;
1439
+ h /= 60;
1440
+
1441
+ const i = floor$2(h);
1442
+ const f = h - i;
1443
+ const p = v * (1 - s);
1444
+ const q = v * (1 - s * f);
1445
+ const t = v * (1 - s * (1 - f));
1446
+
1447
+ switch (i) {
1448
+ case 0:
1449
+ [r, g, b] = [v, t, p];
1450
+ break;
1451
+ case 1:
1452
+ [r, g, b] = [q, v, p];
1453
+ break;
1454
+ case 2:
1455
+ [r, g, b] = [p, v, t];
1456
+ break;
1457
+ case 3:
1458
+ [r, g, b] = [p, q, v];
1459
+ break;
1460
+ case 4:
1461
+ [r, g, b] = [t, p, v];
1462
+ break;
1463
+ case 5:
1464
+ [r, g, b] = [v, p, q];
1465
+ break;
1466
+ }
1467
+ }
1468
+ return [r, g, b, args.length > 3 ? args[3] : 1];
1469
+ };
1470
+
1471
+ const { min: min$1, max: max$2 } = Math;
1472
+
1473
+ /*
1474
+ * supported arguments:
1475
+ * - rgb2hsv(r,g,b)
1476
+ * - rgb2hsv([r,g,b])
1477
+ * - rgb2hsv({r,g,b})
1478
+ */
1479
+ const rgb2hsl = (...args) => {
1480
+ args = unpack(args, 'rgb');
1481
+ let [r, g, b] = args;
1482
+ const min_ = min$1(r, g, b);
1483
+ const max_ = max$2(r, g, b);
1484
+ const delta = max_ - min_;
1485
+ let h, s, v;
1486
+ v = max_ / 255.0;
1487
+ if (max_ === 0) {
1488
+ h = Number.NaN;
1489
+ s = 0;
1490
+ } else {
1491
+ s = delta / max_;
1492
+ if (r === max_) h = (g - b) / delta;
1493
+ if (g === max_) h = 2 + (b - r) / delta;
1494
+ if (b === max_) h = 4 + (r - g) / delta;
1495
+ h *= 60;
1496
+ if (h < 0) h += 360;
1497
+ }
1498
+ return [h, s, v];
1499
+ };
1500
+
1501
+ Color.prototype.hsv = function () {
1502
+ return rgb2hsl(this._rgb);
1503
+ };
1504
+
1505
+ const hsv$1 = (...args) => new Color(...args, 'hsv');
1506
+ chroma.hsv = hsv$1;
1507
+
1508
+ input.format.hsv = hsv2rgb;
1509
+
1510
+ input.autodetect.push({
1511
+ p: 2,
1512
+ test: (...args) => {
1513
+ args = unpack(args, 'hsv');
1514
+ if (type(args) === 'array' && args.length === 3) {
1515
+ return 'hsv';
1516
+ }
1517
+ }
1518
+ });
1519
+
1520
+ const hsv = (col1, col2, f) => {
1521
+ return interpolate_hsx(col1, col2, f, 'hsv');
1522
+ };
1523
+
1524
+ // register interpolator
1525
+ index.hsv = hsv;
1526
+
1527
+ // from https://www.w3.org/TR/css-color-4/multiply-matrices.js
1528
+ function multiplyMatrices(A, B) {
1529
+ let m = A.length;
1530
+
1531
+ if (!Array.isArray(A[0])) {
1532
+ // A is vector, convert to [[a, b, c, ...]]
1533
+ A = [A];
1534
+ }
1535
+
1536
+ if (!Array.isArray(B[0])) {
1537
+ // B is vector, convert to [[a], [b], [c], ...]]
1538
+ B = B.map((x) => [x]);
1539
+ }
1540
+
1541
+ let p = B[0].length;
1542
+ let B_cols = B[0].map((_, i) => B.map((x) => x[i])); // transpose B
1543
+ let product = A.map((row) =>
1544
+ B_cols.map((col) => {
1545
+ if (!Array.isArray(row)) {
1546
+ return col.reduce((a, c) => a + c * row, 0);
1547
+ }
1548
+
1549
+ return row.reduce((a, c, i) => a + c * (col[i] || 0), 0);
1550
+ })
1551
+ );
1552
+
1553
+ if (m === 1) {
1554
+ product = product[0]; // Avoid [[a, b, c, ...]]
1555
+ }
1556
+
1557
+ if (p === 1) {
1558
+ return product.map((x) => x[0]); // Avoid [[a], [b], [c], ...]]
1559
+ }
1560
+
1561
+ return product;
1562
+ }
1563
+
1564
+ const oklab2rgb = (...args) => {
1565
+ args = unpack(args, 'lab');
1566
+ const [L, a, b, ...rest] = args;
1567
+ const [X, Y, Z] = OKLab_to_XYZ([L, a, b]);
1568
+ const [r, g, b_] = xyz2rgb(X, Y, Z);
1569
+ return [r, g, b_, ...(rest.length > 0 && rest[0] < 1 ? [rest[0]] : [])];
1570
+ };
1571
+
1572
+ // from https://www.w3.org/TR/css-color-4/#color-conversion-code
1573
+ function OKLab_to_XYZ(OKLab) {
1574
+ // Given OKLab, convert to XYZ relative to D65
1575
+ var LMStoXYZ = [
1576
+ [1.2268798758459243, -0.5578149944602171, 0.2813910456659647],
1577
+ [-0.0405757452148008, 1.112286803280317, -0.0717110580655164],
1578
+ [-0.0763729366746601, -0.4214933324022432, 1.5869240198367816]
1579
+ ];
1580
+ var OKLabtoLMS = [
1581
+ [1.0, 0.3963377773761749, 0.2158037573099136],
1582
+ [1.0, -0.1055613458156586, -0.0638541728258133],
1583
+ [1.0, -0.0894841775298119, -1.2914855480194092]
1584
+ ];
1585
+
1586
+ var LMSnl = multiplyMatrices(OKLabtoLMS, OKLab);
1587
+ return multiplyMatrices(
1588
+ LMStoXYZ,
1589
+ LMSnl.map((c) => c ** 3)
1590
+ );
1591
+ }
1592
+
1593
+ const rgb2oklab = (...args) => {
1594
+ const [r, g, b, ...rest] = unpack(args, 'rgb');
1595
+ const xyz = rgb2xyz(r, g, b);
1596
+ const oklab = XYZ_to_OKLab(xyz);
1597
+ return [...oklab, ...(rest.length > 0 && rest[0] < 1 ? [rest[0]] : [])];
1598
+ };
1599
+
1600
+ // from https://www.w3.org/TR/css-color-4/#color-conversion-code
1601
+ function XYZ_to_OKLab(XYZ) {
1602
+ // Given XYZ relative to D65, convert to OKLab
1603
+ const XYZtoLMS = [
1604
+ [0.819022437996703, 0.3619062600528904, -0.1288737815209879],
1605
+ [0.0329836539323885, 0.9292868615863434, 0.0361446663506424],
1606
+ [0.0481771893596242, 0.2642395317527308, 0.6335478284694309]
1607
+ ];
1608
+ const LMStoOKLab = [
1609
+ [0.210454268309314, 0.7936177747023054, -0.0040720430116193],
1610
+ [1.9779985324311684, -2.42859224204858, 0.450593709617411],
1611
+ [0.0259040424655478, 0.7827717124575296, -0.8086757549230774]
1612
+ ];
1613
+
1614
+ const LMS = multiplyMatrices(XYZtoLMS, XYZ);
1615
+ // JavaScript Math.cbrt returns a sign-matched cube root
1616
+ // beware if porting to other languages
1617
+ // especially if tempted to use a general power function
1618
+ return multiplyMatrices(
1619
+ LMStoOKLab,
1620
+ LMS.map((c) => Math.cbrt(c))
1621
+ );
1622
+ // L in range [0,1]. For use in CSS, multiply by 100 and add a percent
1623
+ }
1624
+
1625
+ Color.prototype.oklab = function () {
1626
+ return rgb2oklab(this._rgb);
1627
+ };
1628
+
1629
+ const oklab$1 = (...args) => new Color(...args, 'oklab');
1630
+ Object.assign(chroma, { oklab: oklab$1 });
1631
+
1632
+ input.format.oklab = oklab2rgb;
1633
+
1634
+ input.autodetect.push({
1635
+ p: 2,
1636
+ test: (...args) => {
1637
+ args = unpack(args, 'oklab');
1638
+ if (type(args) === 'array' && args.length === 3) {
1639
+ return 'oklab';
1640
+ }
1641
+ }
1642
+ });
1643
+
1644
+ const oklab = (col1, col2, f) => {
1645
+ const xyz0 = col1.oklab();
1646
+ const xyz1 = col2.oklab();
1647
+ return new Color(
1648
+ xyz0[0] + f * (xyz1[0] - xyz0[0]),
1649
+ xyz0[1] + f * (xyz1[1] - xyz0[1]),
1650
+ xyz0[2] + f * (xyz1[2] - xyz0[2]),
1651
+ 'oklab'
1652
+ );
1653
+ };
1654
+
1655
+ // register interpolator
1656
+ index.oklab = oklab;
1657
+
1658
+ const oklch$1 = (col1, col2, f) => {
1659
+ return interpolate_hsx(col1, col2, f, 'oklch');
1660
+ };
1661
+
1662
+ // register interpolator
1663
+ index.oklch = oklch$1;
1664
+
1665
+ const { pow: pow$4, sqrt: sqrt$1, PI: PI$1, cos: cos$2, sin: sin$2, atan2: atan2$1 } = Math;
1666
+
1667
+ var average = (colors, mode = 'lrgb', weights = null) => {
1668
+ const l = colors.length;
1669
+ if (!weights) weights = Array.from(new Array(l)).map(() => 1);
1670
+ // normalize weights
1671
+ const k =
1672
+ l /
1673
+ weights.reduce(function (a, b) {
1674
+ return a + b;
1675
+ });
1676
+ weights.forEach((w, i) => {
1677
+ weights[i] *= k;
1678
+ });
1679
+ // convert colors to Color objects
1680
+ colors = colors.map((c) => new Color(c));
1681
+ if (mode === 'lrgb') {
1682
+ return _average_lrgb(colors, weights);
1683
+ }
1684
+ const first = colors.shift();
1685
+ const xyz = first.get(mode);
1686
+ const cnt = [];
1687
+ let dx = 0;
1688
+ let dy = 0;
1689
+ // initial color
1690
+ for (let i = 0; i < xyz.length; i++) {
1691
+ xyz[i] = (xyz[i] || 0) * weights[0];
1692
+ cnt.push(isNaN(xyz[i]) ? 0 : weights[0]);
1693
+ if (mode.charAt(i) === 'h' && !isNaN(xyz[i])) {
1694
+ const A = (xyz[i] / 180) * PI$1;
1695
+ dx += cos$2(A) * weights[0];
1696
+ dy += sin$2(A) * weights[0];
1697
+ }
1698
+ }
1699
+
1700
+ let alpha = first.alpha() * weights[0];
1701
+ colors.forEach((c, ci) => {
1702
+ const xyz2 = c.get(mode);
1703
+ alpha += c.alpha() * weights[ci + 1];
1704
+ for (let i = 0; i < xyz.length; i++) {
1705
+ if (!isNaN(xyz2[i])) {
1706
+ cnt[i] += weights[ci + 1];
1707
+ if (mode.charAt(i) === 'h') {
1708
+ const A = (xyz2[i] / 180) * PI$1;
1709
+ dx += cos$2(A) * weights[ci + 1];
1710
+ dy += sin$2(A) * weights[ci + 1];
1711
+ } else {
1712
+ xyz[i] += xyz2[i] * weights[ci + 1];
1713
+ }
1714
+ }
1715
+ }
1716
+ });
1717
+
1718
+ for (let i = 0; i < xyz.length; i++) {
1719
+ if (mode.charAt(i) === 'h') {
1720
+ let A = (atan2$1(dy / cnt[i], dx / cnt[i]) / PI$1) * 180;
1721
+ while (A < 0) A += 360;
1722
+ while (A >= 360) A -= 360;
1723
+ xyz[i] = A;
1724
+ } else {
1725
+ xyz[i] = xyz[i] / cnt[i];
1726
+ }
1727
+ }
1728
+ alpha /= l;
1729
+ return new Color(xyz, mode).alpha(alpha > 0.99999 ? 1 : alpha, true);
1730
+ };
1731
+
1732
+ const _average_lrgb = (colors, weights) => {
1733
+ const l = colors.length;
1734
+ const xyz = [0, 0, 0, 0];
1735
+ for (let i = 0; i < colors.length; i++) {
1736
+ const col = colors[i];
1737
+ const f = weights[i] / l;
1738
+ const rgb = col._rgb;
1739
+ xyz[0] += pow$4(rgb[0], 2) * f;
1740
+ xyz[1] += pow$4(rgb[1], 2) * f;
1741
+ xyz[2] += pow$4(rgb[2], 2) * f;
1742
+ xyz[3] += rgb[3] * f;
1743
+ }
1744
+ xyz[0] = sqrt$1(xyz[0]);
1745
+ xyz[1] = sqrt$1(xyz[1]);
1746
+ xyz[2] = sqrt$1(xyz[2]);
1747
+ if (xyz[3] > 0.9999999) xyz[3] = 1;
1748
+ return new Color(clip_rgb(xyz));
1749
+ };
1750
+
1751
+ // minimal multi-purpose interface
1752
+
1753
+
1754
+ const { pow: pow$3 } = Math;
1755
+
1756
+ function scale (colors) {
1757
+ // constructor
1758
+ let _mode = 'rgb';
1759
+ let _nacol = chroma('#ccc');
1760
+ let _spread = 0;
1761
+ // const _fixed = false;
1762
+ let _domain = [0, 1];
1763
+ let _pos = [];
1764
+ let _padding = [0, 0];
1765
+ let _classes = false;
1766
+ let _colors = [];
1767
+ let _out = false;
1768
+ let _min = 0;
1769
+ let _max = 1;
1770
+ let _correctLightness = false;
1771
+ let _colorCache = {};
1772
+ let _useCache = true;
1773
+ let _gamma = 1;
1774
+
1775
+ // private methods
1776
+
1777
+ const setColors = function (colors) {
1778
+ colors = colors || ['#fff', '#000'];
1779
+ if (
1780
+ colors &&
1781
+ type(colors) === 'string' &&
1782
+ chroma.brewer &&
1783
+ chroma.brewer[colors.toLowerCase()]
1784
+ ) {
1785
+ colors = chroma.brewer[colors.toLowerCase()];
1786
+ }
1787
+ if (type(colors) === 'array') {
1788
+ // handle single color
1789
+ if (colors.length === 1) {
1790
+ colors = [colors[0], colors[0]];
1791
+ }
1792
+ // make a copy of the colors
1793
+ colors = colors.slice(0);
1794
+ // convert to chroma classes
1795
+ for (let c = 0; c < colors.length; c++) {
1796
+ colors[c] = chroma(colors[c]);
1797
+ }
1798
+ // auto-fill color position
1799
+ _pos.length = 0;
1800
+ for (let c = 0; c < colors.length; c++) {
1801
+ _pos.push(c / (colors.length - 1));
1802
+ }
1803
+ }
1804
+ resetCache();
1805
+ return (_colors = colors);
1806
+ };
1807
+
1808
+ const getClass = function (value) {
1809
+ if (_classes != null) {
1810
+ const n = _classes.length - 1;
1811
+ let i = 0;
1812
+ while (i < n && value >= _classes[i]) {
1813
+ i++;
1814
+ }
1815
+ return i - 1;
1816
+ }
1817
+ return 0;
1818
+ };
1819
+
1820
+ let tMapLightness = (t) => t;
1821
+ let tMapDomain = (t) => t;
1822
+
1823
+ // const classifyValue = function(value) {
1824
+ // let val = value;
1825
+ // if (_classes.length > 2) {
1826
+ // const n = _classes.length-1;
1827
+ // const i = getClass(value);
1828
+ // const minc = _classes[0] + ((_classes[1]-_classes[0]) * (0 + (_spread * 0.5))); // center of 1st class
1829
+ // const maxc = _classes[n-1] + ((_classes[n]-_classes[n-1]) * (1 - (_spread * 0.5))); // center of last class
1830
+ // val = _min + ((((_classes[i] + ((_classes[i+1] - _classes[i]) * 0.5)) - minc) / (maxc-minc)) * (_max - _min));
1831
+ // }
1832
+ // return val;
1833
+ // };
1834
+
1835
+ const getColor = function (val, bypassMap) {
1836
+ let col, t;
1837
+ if (bypassMap == null) {
1838
+ bypassMap = false;
1839
+ }
1840
+ if (isNaN(val) || val === null) {
1841
+ return _nacol;
1842
+ }
1843
+ if (!bypassMap) {
1844
+ if (_classes && _classes.length > 2) {
1845
+ // find the class
1846
+ const c = getClass(val);
1847
+ t = c / (_classes.length - 2);
1848
+ } else if (_max !== _min) {
1849
+ // just interpolate between min/max
1850
+ t = (val - _min) / (_max - _min);
1851
+ } else {
1852
+ t = 1;
1853
+ }
1854
+ } else {
1855
+ t = val;
1856
+ }
1857
+
1858
+ // domain map
1859
+ t = tMapDomain(t);
1860
+
1861
+ if (!bypassMap) {
1862
+ t = tMapLightness(t); // lightness correction
1863
+ }
1864
+
1865
+ if (_gamma !== 1) {
1866
+ t = pow$3(t, _gamma);
1867
+ }
1868
+
1869
+ t = _padding[0] + t * (1 - _padding[0] - _padding[1]);
1870
+
1871
+ t = limit(t, 0, 1);
1872
+
1873
+ const k = Math.floor(t * 10000);
1874
+
1875
+ if (_useCache && _colorCache[k]) {
1876
+ col = _colorCache[k];
1877
+ } else {
1878
+ if (type(_colors) === 'array') {
1879
+ //for i in [0.._pos.length-1]
1880
+ for (let i = 0; i < _pos.length; i++) {
1881
+ const p = _pos[i];
1882
+ if (t <= p) {
1883
+ col = _colors[i];
1884
+ break;
1885
+ }
1886
+ if (t >= p && i === _pos.length - 1) {
1887
+ col = _colors[i];
1888
+ break;
1889
+ }
1890
+ if (t > p && t < _pos[i + 1]) {
1891
+ t = (t - p) / (_pos[i + 1] - p);
1892
+ col = chroma.interpolate(
1893
+ _colors[i],
1894
+ _colors[i + 1],
1895
+ t,
1896
+ _mode
1897
+ );
1898
+ break;
1899
+ }
1900
+ }
1901
+ } else if (type(_colors) === 'function') {
1902
+ col = _colors(t);
1903
+ }
1904
+ if (_useCache) {
1905
+ _colorCache[k] = col;
1906
+ }
1907
+ }
1908
+ return col;
1909
+ };
1910
+
1911
+ var resetCache = () => (_colorCache = {});
1912
+
1913
+ setColors(colors);
1914
+
1915
+ // public interface
1916
+
1917
+ const f = function (v) {
1918
+ const c = chroma(getColor(v));
1919
+ if (_out && c[_out]) {
1920
+ return c[_out]();
1921
+ } else {
1922
+ return c;
1923
+ }
1924
+ };
1925
+
1926
+ f.classes = function (classes) {
1927
+ if (classes != null) {
1928
+ if (type(classes) === 'array') {
1929
+ _classes = classes;
1930
+ _domain = [classes[0], classes[classes.length - 1]];
1931
+ } else {
1932
+ const d = chroma.analyze(_domain);
1933
+ if (classes === 0) {
1934
+ _classes = [d.min, d.max];
1935
+ } else {
1936
+ _classes = chroma.limits(d, 'e', classes);
1937
+ }
1938
+ }
1939
+ return f;
1940
+ }
1941
+ return _classes;
1942
+ };
1943
+
1944
+ f.domain = function (domain) {
1945
+ if (!arguments.length) {
1946
+ return _domain;
1947
+ }
1948
+ _min = domain[0];
1949
+ _max = domain[domain.length - 1];
1950
+ _pos = [];
1951
+ const k = _colors.length;
1952
+ if (domain.length === k && _min !== _max) {
1953
+ // update positions
1954
+ for (let d of Array.from(domain)) {
1955
+ _pos.push((d - _min) / (_max - _min));
1956
+ }
1957
+ } else {
1958
+ for (let c = 0; c < k; c++) {
1959
+ _pos.push(c / (k - 1));
1960
+ }
1961
+ if (domain.length > 2) {
1962
+ // set domain map
1963
+ const tOut = domain.map((d, i) => i / (domain.length - 1));
1964
+ const tBreaks = domain.map((d) => (d - _min) / (_max - _min));
1965
+ if (!tBreaks.every((val, i) => tOut[i] === val)) {
1966
+ tMapDomain = (t) => {
1967
+ if (t <= 0 || t >= 1) return t;
1968
+ let i = 0;
1969
+ while (t >= tBreaks[i + 1]) i++;
1970
+ const f =
1971
+ (t - tBreaks[i]) / (tBreaks[i + 1] - tBreaks[i]);
1972
+ const out = tOut[i] + f * (tOut[i + 1] - tOut[i]);
1973
+ return out;
1974
+ };
1975
+ }
1976
+ }
1977
+ }
1978
+ _domain = [_min, _max];
1979
+ return f;
1980
+ };
1981
+
1982
+ f.mode = function (_m) {
1983
+ if (!arguments.length) {
1984
+ return _mode;
1985
+ }
1986
+ _mode = _m;
1987
+ resetCache();
1988
+ return f;
1989
+ };
1990
+
1991
+ f.range = function (colors, _pos) {
1992
+ setColors(colors);
1993
+ return f;
1994
+ };
1995
+
1996
+ f.out = function (_o) {
1997
+ _out = _o;
1998
+ return f;
1999
+ };
2000
+
2001
+ f.spread = function (val) {
2002
+ if (!arguments.length) {
2003
+ return _spread;
2004
+ }
2005
+ _spread = val;
2006
+ return f;
2007
+ };
2008
+
2009
+ f.correctLightness = function (v) {
2010
+ if (v == null) {
2011
+ v = true;
2012
+ }
2013
+ _correctLightness = v;
2014
+ resetCache();
2015
+ if (_correctLightness) {
2016
+ tMapLightness = function (t) {
2017
+ const L0 = getColor(0, true).lab()[0];
2018
+ const L1 = getColor(1, true).lab()[0];
2019
+ const pol = L0 > L1;
2020
+ let L_actual = getColor(t, true).lab()[0];
2021
+ const L_ideal = L0 + (L1 - L0) * t;
2022
+ let L_diff = L_actual - L_ideal;
2023
+ let t0 = 0;
2024
+ let t1 = 1;
2025
+ let max_iter = 20;
2026
+ while (Math.abs(L_diff) > 1e-2 && max_iter-- > 0) {
2027
+ (function () {
2028
+ if (pol) {
2029
+ L_diff *= -1;
2030
+ }
2031
+ if (L_diff < 0) {
2032
+ t0 = t;
2033
+ t += (t1 - t) * 0.5;
2034
+ } else {
2035
+ t1 = t;
2036
+ t += (t0 - t) * 0.5;
2037
+ }
2038
+ L_actual = getColor(t, true).lab()[0];
2039
+ return (L_diff = L_actual - L_ideal);
2040
+ })();
2041
+ }
2042
+ return t;
2043
+ };
2044
+ } else {
2045
+ tMapLightness = (t) => t;
2046
+ }
2047
+ return f;
2048
+ };
2049
+
2050
+ f.padding = function (p) {
2051
+ if (p != null) {
2052
+ if (type(p) === 'number') {
2053
+ p = [p, p];
2054
+ }
2055
+ _padding = p;
2056
+ return f;
2057
+ } else {
2058
+ return _padding;
2059
+ }
2060
+ };
2061
+
2062
+ f.colors = function (numColors, out) {
2063
+ // If no arguments are given, return the original colors that were provided
2064
+ if (arguments.length < 2) {
2065
+ out = 'hex';
2066
+ }
2067
+ let result = [];
2068
+
2069
+ if (arguments.length === 0) {
2070
+ result = _colors.slice(0);
2071
+ } else if (numColors === 1) {
2072
+ result = [f(0.5)];
2073
+ } else if (numColors > 1) {
2074
+ const dm = _domain[0];
2075
+ const dd = _domain[1] - dm;
2076
+ result = __range__(0, numColors).map((i) =>
2077
+ f(dm + (i / (numColors - 1)) * dd)
2078
+ );
2079
+ } else {
2080
+ // returns all colors based on the defined classes
2081
+ colors = [];
2082
+ let samples = [];
2083
+ if (_classes && _classes.length > 2) {
2084
+ for (
2085
+ let i = 1, end = _classes.length, asc = 1 <= end;
2086
+ asc ? i < end : i > end;
2087
+ asc ? i++ : i--
2088
+ ) {
2089
+ samples.push((_classes[i - 1] + _classes[i]) * 0.5);
2090
+ }
2091
+ } else {
2092
+ samples = _domain;
2093
+ }
2094
+ result = samples.map((v) => f(v));
2095
+ }
2096
+
2097
+ if (chroma[out]) {
2098
+ result = result.map((c) => c[out]());
2099
+ }
2100
+ return result;
2101
+ };
2102
+
2103
+ f.cache = function (c) {
2104
+ if (c != null) {
2105
+ _useCache = c;
2106
+ return f;
2107
+ } else {
2108
+ return _useCache;
2109
+ }
2110
+ };
2111
+
2112
+ f.gamma = function (g) {
2113
+ if (g != null) {
2114
+ _gamma = g;
2115
+ return f;
2116
+ } else {
2117
+ return _gamma;
2118
+ }
2119
+ };
2120
+
2121
+ f.nodata = function (d) {
2122
+ if (d != null) {
2123
+ _nacol = chroma(d);
2124
+ return f;
2125
+ } else {
2126
+ return _nacol;
2127
+ }
2128
+ };
2129
+
2130
+ return f;
2131
+ }
2132
+
2133
+ function __range__(left, right, inclusive) {
2134
+ let range = [];
2135
+ let ascending = left < right;
2136
+ let end = right ;
2137
+ for (let i = left; ascending ? i < end : i > end; ascending ? i++ : i--) {
2138
+ range.push(i);
2139
+ }
2140
+ return range;
2141
+ }
2142
+
2143
+ //
2144
+ // interpolates between a set of colors uzing a bezier spline
2145
+ //
2146
+
2147
+
2148
+ // nth row of the pascal triangle
2149
+ const binom_row = function (n) {
2150
+ let row = [1, 1];
2151
+ for (let i = 1; i < n; i++) {
2152
+ let newrow = [1];
2153
+ for (let j = 1; j <= row.length; j++) {
2154
+ newrow[j] = (row[j] || 0) + row[j - 1];
2155
+ }
2156
+ row = newrow;
2157
+ }
2158
+ return row;
2159
+ };
2160
+
2161
+ const bezier = function (colors) {
2162
+ let I, lab0, lab1, lab2;
2163
+ colors = colors.map((c) => new Color(c));
2164
+ if (colors.length === 2) {
2165
+ // linear interpolation
2166
+ [lab0, lab1] = colors.map((c) => c.lab());
2167
+ I = function (t) {
2168
+ const lab = [0, 1, 2].map((i) => lab0[i] + t * (lab1[i] - lab0[i]));
2169
+ return new Color(lab, 'lab');
2170
+ };
2171
+ } else if (colors.length === 3) {
2172
+ // quadratic bezier interpolation
2173
+ [lab0, lab1, lab2] = colors.map((c) => c.lab());
2174
+ I = function (t) {
2175
+ const lab = [0, 1, 2].map(
2176
+ (i) =>
2177
+ (1 - t) * (1 - t) * lab0[i] +
2178
+ 2 * (1 - t) * t * lab1[i] +
2179
+ t * t * lab2[i]
2180
+ );
2181
+ return new Color(lab, 'lab');
2182
+ };
2183
+ } else if (colors.length === 4) {
2184
+ // cubic bezier interpolation
2185
+ let lab3;
2186
+ [lab0, lab1, lab2, lab3] = colors.map((c) => c.lab());
2187
+ I = function (t) {
2188
+ const lab = [0, 1, 2].map(
2189
+ (i) =>
2190
+ (1 - t) * (1 - t) * (1 - t) * lab0[i] +
2191
+ 3 * (1 - t) * (1 - t) * t * lab1[i] +
2192
+ 3 * (1 - t) * t * t * lab2[i] +
2193
+ t * t * t * lab3[i]
2194
+ );
2195
+ return new Color(lab, 'lab');
2196
+ };
2197
+ } else if (colors.length >= 5) {
2198
+ // general case (degree n bezier)
2199
+ let labs, row, n;
2200
+ labs = colors.map((c) => c.lab());
2201
+ n = colors.length - 1;
2202
+ row = binom_row(n);
2203
+ I = function (t) {
2204
+ const u = 1 - t;
2205
+ const lab = [0, 1, 2].map((i) =>
2206
+ labs.reduce(
2207
+ (sum, el, j) =>
2208
+ sum + row[j] * u ** (n - j) * t ** j * el[i],
2209
+ 0
2210
+ )
2211
+ );
2212
+ return new Color(lab, 'lab');
2213
+ };
2214
+ } else {
2215
+ throw new RangeError('No point in running bezier with only one color.');
2216
+ }
2217
+ return I;
2218
+ };
2219
+
2220
+ var bezier$1 = (colors) => {
2221
+ const f = bezier(colors);
2222
+ f.scale = () => scale(f);
2223
+ return f;
2224
+ };
2225
+
2226
+ const { round: round$3 } = Math;
2227
+
2228
+ Color.prototype.rgb = function (rnd = true) {
2229
+ if (rnd === false) return this._rgb.slice(0, 3);
2230
+ return this._rgb.slice(0, 3).map(round$3);
2231
+ };
2232
+
2233
+ Color.prototype.rgba = function (rnd = true) {
2234
+ return this._rgb.slice(0, 4).map((v, i) => {
2235
+ return i < 3 ? (rnd === false ? v : round$3(v)) : v;
2236
+ });
2237
+ };
2238
+
2239
+ const rgb = (...args) => new Color(...args, 'rgb');
2240
+ Object.assign(chroma, { rgb });
2241
+
2242
+ input.format.rgb = (...args) => {
2243
+ const rgba = unpack(args, 'rgba');
2244
+ if (rgba[3] === undefined) rgba[3] = 1;
2245
+ return rgba;
2246
+ };
2247
+
2248
+ input.autodetect.push({
2249
+ p: 3,
2250
+ test: (...args) => {
2251
+ args = unpack(args, 'rgba');
2252
+ if (
2253
+ type(args) === 'array' &&
2254
+ (args.length === 3 ||
2255
+ (args.length === 4 &&
2256
+ type(args[3]) == 'number' &&
2257
+ args[3] >= 0 &&
2258
+ args[3] <= 1))
2259
+ ) {
2260
+ return 'rgb';
2261
+ }
2262
+ }
2263
+ });
2264
+
2265
+ /*
2266
+ * interpolates between a set of colors uzing a bezier spline
2267
+ * blend mode formulas taken from https://web.archive.org/web/20180110014946/http://www.venture-ware.com/kevin/coding/lets-learn-math-photoshop-blend-modes/
2268
+ */
2269
+
2270
+
2271
+ const blend = (bottom, top, mode) => {
2272
+ if (!blend[mode]) {
2273
+ throw new Error('unknown blend mode ' + mode);
2274
+ }
2275
+ return blend[mode](bottom, top);
2276
+ };
2277
+
2278
+ const blend_f = (f) => (bottom, top) => {
2279
+ const c0 = chroma(top).rgb();
2280
+ const c1 = chroma(bottom).rgb();
2281
+ return chroma.rgb(f(c0, c1));
2282
+ };
2283
+
2284
+ const each = (f) => (c0, c1) => {
2285
+ const out = [];
2286
+ out[0] = f(c0[0], c1[0]);
2287
+ out[1] = f(c0[1], c1[1]);
2288
+ out[2] = f(c0[2], c1[2]);
2289
+ return out;
2290
+ };
2291
+
2292
+ const normal = (a) => a;
2293
+ const multiply = (a, b) => (a * b) / 255;
2294
+ const darken = (a, b) => (a > b ? b : a);
2295
+ const lighten = (a, b) => (a > b ? a : b);
2296
+ const screen = (a, b) => 255 * (1 - (1 - a / 255) * (1 - b / 255));
2297
+ const overlay = (a, b) =>
2298
+ b < 128 ? (2 * a * b) / 255 : 255 * (1 - 2 * (1 - a / 255) * (1 - b / 255));
2299
+ const burn = (a, b) => 255 * (1 - (1 - b / 255) / (a / 255));
2300
+ const dodge = (a, b) => {
2301
+ if (a === 255) return 255;
2302
+ a = (255 * (b / 255)) / (1 - a / 255);
2303
+ return a > 255 ? 255 : a;
2304
+ };
2305
+
2306
+ // # add = (a,b) ->
2307
+ // # if (a + b > 255) then 255 else a + b
2308
+
2309
+ blend.normal = blend_f(each(normal));
2310
+ blend.multiply = blend_f(each(multiply));
2311
+ blend.screen = blend_f(each(screen));
2312
+ blend.overlay = blend_f(each(overlay));
2313
+ blend.darken = blend_f(each(darken));
2314
+ blend.lighten = blend_f(each(lighten));
2315
+ blend.dodge = blend_f(each(dodge));
2316
+ blend.burn = blend_f(each(burn));
2317
+
2318
+ // cubehelix interpolation
2319
+ // based on D.A. Green "A colour scheme for the display of astronomical intensity images"
2320
+ // http://astron-soc.in/bulletin/11June/289392011.pdf
2321
+ const { pow: pow$2, sin: sin$1, cos: cos$1 } = Math;
2322
+
2323
+ function cubehelix (
2324
+ start = 300,
2325
+ rotations = -1.5,
2326
+ hue = 1,
2327
+ gamma = 1,
2328
+ lightness = [0, 1]
2329
+ ) {
2330
+ let dh = 0,
2331
+ dl;
2332
+ if (type(lightness) === 'array') {
2333
+ dl = lightness[1] - lightness[0];
2334
+ } else {
2335
+ dl = 0;
2336
+ lightness = [lightness, lightness];
2337
+ }
2338
+ const f = function (fract) {
2339
+ const a = TWOPI * ((start + 120) / 360 + rotations * fract);
2340
+ const l = pow$2(lightness[0] + dl * fract, gamma);
2341
+ const h = dh !== 0 ? hue[0] + fract * dh : hue;
2342
+ const amp = (h * l * (1 - l)) / 2;
2343
+ const cos_a = cos$1(a);
2344
+ const sin_a = sin$1(a);
2345
+ const r = l + amp * (-0.14861 * cos_a + 1.78277 * sin_a);
2346
+ const g = l + amp * (-0.29227 * cos_a - 0.90649 * sin_a);
2347
+ const b = l + amp * (1.97294 * cos_a);
2348
+ return chroma(clip_rgb([r * 255, g * 255, b * 255, 1]));
2349
+ };
2350
+ f.start = function (s) {
2351
+ if (s == null) {
2352
+ return start;
2353
+ }
2354
+ start = s;
2355
+ return f;
2356
+ };
2357
+ f.rotations = function (r) {
2358
+ if (r == null) {
2359
+ return rotations;
2360
+ }
2361
+ rotations = r;
2362
+ return f;
2363
+ };
2364
+ f.gamma = function (g) {
2365
+ if (g == null) {
2366
+ return gamma;
2367
+ }
2368
+ gamma = g;
2369
+ return f;
2370
+ };
2371
+ f.hue = function (h) {
2372
+ if (h == null) {
2373
+ return hue;
2374
+ }
2375
+ hue = h;
2376
+ if (type(hue) === 'array') {
2377
+ dh = hue[1] - hue[0];
2378
+ if (dh === 0) {
2379
+ hue = hue[1];
2380
+ }
2381
+ } else {
2382
+ dh = 0;
2383
+ }
2384
+ return f;
2385
+ };
2386
+ f.lightness = function (h) {
2387
+ if (h == null) {
2388
+ return lightness;
2389
+ }
2390
+ if (type(h) === 'array') {
2391
+ lightness = h;
2392
+ dl = h[1] - h[0];
2393
+ } else {
2394
+ lightness = [h, h];
2395
+ dl = 0;
2396
+ }
2397
+ return f;
2398
+ };
2399
+ f.scale = () => chroma.scale(f);
2400
+ f.hue(hue);
2401
+ return f;
2402
+ }
2403
+
2404
+ const digits = '0123456789abcdef';
2405
+
2406
+ const { floor: floor$1, random } = Math;
2407
+
2408
+ var random$1 = () => {
2409
+ let code = '#';
2410
+ for (let i = 0; i < 6; i++) {
2411
+ code += digits.charAt(floor$1(random() * 16));
2412
+ }
2413
+ return new Color(code, 'hex');
2414
+ };
2415
+
2416
+ const { log: log$1, pow: pow$1, floor, abs: abs$1 } = Math;
2417
+
2418
+ function analyze(data, key = null) {
2419
+ const r = {
2420
+ min: Number.MAX_VALUE,
2421
+ max: Number.MAX_VALUE * -1,
2422
+ sum: 0,
2423
+ values: [],
2424
+ count: 0
2425
+ };
2426
+ if (type(data) === 'object') {
2427
+ data = Object.values(data);
2428
+ }
2429
+ data.forEach((val) => {
2430
+ if (key && type(val) === 'object') val = val[key];
2431
+ if (val !== undefined && val !== null && !isNaN(val)) {
2432
+ r.values.push(val);
2433
+ r.sum += val;
2434
+ if (val < r.min) r.min = val;
2435
+ if (val > r.max) r.max = val;
2436
+ r.count += 1;
2437
+ }
2438
+ });
2439
+
2440
+ r.domain = [r.min, r.max];
2441
+
2442
+ r.limits = (mode, num) => limits(r, mode, num);
2443
+
2444
+ return r;
2445
+ }
2446
+
2447
+ function limits(data, mode = 'equal', num = 7) {
2448
+ if (type(data) == 'array') {
2449
+ data = analyze(data);
2450
+ }
2451
+ const { min, max } = data;
2452
+ const values = data.values.sort((a, b) => a - b);
2453
+
2454
+ if (num === 1) {
2455
+ return [min, max];
2456
+ }
2457
+
2458
+ const limits = [];
2459
+
2460
+ if (mode.substr(0, 1) === 'c') {
2461
+ // continuous
2462
+ limits.push(min);
2463
+ limits.push(max);
2464
+ }
2465
+
2466
+ if (mode.substr(0, 1) === 'e') {
2467
+ // equal interval
2468
+ limits.push(min);
2469
+ for (let i = 1; i < num; i++) {
2470
+ limits.push(min + (i / num) * (max - min));
2471
+ }
2472
+ limits.push(max);
2473
+ } else if (mode.substr(0, 1) === 'l') {
2474
+ // log scale
2475
+ if (min <= 0) {
2476
+ throw new Error(
2477
+ 'Logarithmic scales are only possible for values > 0'
2478
+ );
2479
+ }
2480
+ const min_log = Math.LOG10E * log$1(min);
2481
+ const max_log = Math.LOG10E * log$1(max);
2482
+ limits.push(min);
2483
+ for (let i = 1; i < num; i++) {
2484
+ limits.push(pow$1(10, min_log + (i / num) * (max_log - min_log)));
2485
+ }
2486
+ limits.push(max);
2487
+ } else if (mode.substr(0, 1) === 'q') {
2488
+ // quantile scale
2489
+ limits.push(min);
2490
+ for (let i = 1; i < num; i++) {
2491
+ const p = ((values.length - 1) * i) / num;
2492
+ const pb = floor(p);
2493
+ if (pb === p) {
2494
+ limits.push(values[pb]);
2495
+ } else {
2496
+ // p > pb
2497
+ const pr = p - pb;
2498
+ limits.push(values[pb] * (1 - pr) + values[pb + 1] * pr);
2499
+ }
2500
+ }
2501
+ limits.push(max);
2502
+ } else if (mode.substr(0, 1) === 'k') {
2503
+ // k-means clustering
2504
+ /*
2505
+ implementation based on
2506
+ http://code.google.com/p/figue/source/browse/trunk/figue.js#336
2507
+ simplified for 1-d input values
2508
+ */
2509
+ let cluster;
2510
+ const n = values.length;
2511
+ const assignments = new Array(n);
2512
+ const clusterSizes = new Array(num);
2513
+ let repeat = true;
2514
+ let nb_iters = 0;
2515
+ let centroids = null;
2516
+
2517
+ // get seed values
2518
+ centroids = [];
2519
+ centroids.push(min);
2520
+ for (let i = 1; i < num; i++) {
2521
+ centroids.push(min + (i / num) * (max - min));
2522
+ }
2523
+ centroids.push(max);
2524
+
2525
+ while (repeat) {
2526
+ // assignment step
2527
+ for (let j = 0; j < num; j++) {
2528
+ clusterSizes[j] = 0;
2529
+ }
2530
+ for (let i = 0; i < n; i++) {
2531
+ const value = values[i];
2532
+ let mindist = Number.MAX_VALUE;
2533
+ let best;
2534
+ for (let j = 0; j < num; j++) {
2535
+ const dist = abs$1(centroids[j] - value);
2536
+ if (dist < mindist) {
2537
+ mindist = dist;
2538
+ best = j;
2539
+ }
2540
+ clusterSizes[best]++;
2541
+ assignments[i] = best;
2542
+ }
2543
+ }
2544
+
2545
+ // update centroids step
2546
+ const newCentroids = new Array(num);
2547
+ for (let j = 0; j < num; j++) {
2548
+ newCentroids[j] = null;
2549
+ }
2550
+ for (let i = 0; i < n; i++) {
2551
+ cluster = assignments[i];
2552
+ if (newCentroids[cluster] === null) {
2553
+ newCentroids[cluster] = values[i];
2554
+ } else {
2555
+ newCentroids[cluster] += values[i];
2556
+ }
2557
+ }
2558
+ for (let j = 0; j < num; j++) {
2559
+ newCentroids[j] *= 1 / clusterSizes[j];
2560
+ }
2561
+
2562
+ // check convergence
2563
+ repeat = false;
2564
+ for (let j = 0; j < num; j++) {
2565
+ if (newCentroids[j] !== centroids[j]) {
2566
+ repeat = true;
2567
+ break;
2568
+ }
2569
+ }
2570
+
2571
+ centroids = newCentroids;
2572
+ nb_iters++;
2573
+
2574
+ if (nb_iters > 200) {
2575
+ repeat = false;
2576
+ }
2577
+ }
2578
+
2579
+ // finished k-means clustering
2580
+ // the next part is borrowed from gabrielflor.it
2581
+ const kClusters = {};
2582
+ for (let j = 0; j < num; j++) {
2583
+ kClusters[j] = [];
2584
+ }
2585
+ for (let i = 0; i < n; i++) {
2586
+ cluster = assignments[i];
2587
+ kClusters[cluster].push(values[i]);
2588
+ }
2589
+ let tmpKMeansBreaks = [];
2590
+ for (let j = 0; j < num; j++) {
2591
+ tmpKMeansBreaks.push(kClusters[j][0]);
2592
+ tmpKMeansBreaks.push(kClusters[j][kClusters[j].length - 1]);
2593
+ }
2594
+ tmpKMeansBreaks = tmpKMeansBreaks.sort((a, b) => a - b);
2595
+ limits.push(tmpKMeansBreaks[0]);
2596
+ for (let i = 1; i < tmpKMeansBreaks.length; i += 2) {
2597
+ const v = tmpKMeansBreaks[i];
2598
+ if (!isNaN(v) && limits.indexOf(v) === -1) {
2599
+ limits.push(v);
2600
+ }
2601
+ }
2602
+ }
2603
+ return limits;
2604
+ }
2605
+
2606
+ var contrast = (a, b) => {
2607
+ // WCAG contrast ratio
2608
+ // see http://www.w3.org/TR/2008/REC-WCAG20-20081211/#contrast-ratiodef
2609
+ a = new Color(a);
2610
+ b = new Color(b);
2611
+ const l1 = a.luminance();
2612
+ const l2 = b.luminance();
2613
+ return l1 > l2 ? (l1 + 0.05) / (l2 + 0.05) : (l2 + 0.05) / (l1 + 0.05);
2614
+ };
2615
+
2616
+ /**
2617
+ * @license
2618
+ *
2619
+ * The APCA contrast prediction algorithm is based of the formulas published
2620
+ * in the APCA-1.0.98G specification by Myndex. The specification is available at:
2621
+ * https://raw.githubusercontent.com/Myndex/apca-w3/master/images/APCAw3_0.1.17_APCA0.0.98G.svg
2622
+ *
2623
+ * Note that the APCA implementation is still beta, so please update to
2624
+ * future versions of chroma.js when they become available.
2625
+ *
2626
+ * You can read more about the APCA Readability Criterion at
2627
+ * https://readtech.org/ARC/
2628
+ */
2629
+
2630
+ // constants
2631
+ const W_offset = 0.027;
2632
+ const P_in = 0.0005;
2633
+ const P_out = 0.1;
2634
+ const R_scale = 1.14;
2635
+ const B_threshold = 0.022;
2636
+ const B_exp = 1.414;
2637
+
2638
+ var contrastAPCA = (text, bg) => {
2639
+ // parse input colors
2640
+ text = new Color(text);
2641
+ bg = new Color(bg);
2642
+ // if text color has alpha, blend against background
2643
+ if (text.alpha() < 1) {
2644
+ text = mix(bg, text, text.alpha(), 'rgb');
2645
+ }
2646
+ const l_text = lum(...text.rgb());
2647
+ const l_bg = lum(...bg.rgb());
2648
+
2649
+ // soft clamp black levels
2650
+ const Y_text =
2651
+ l_text >= B_threshold
2652
+ ? l_text
2653
+ : l_text + Math.pow(B_threshold - l_text, B_exp);
2654
+ const Y_bg =
2655
+ l_bg >= B_threshold ? l_bg : l_bg + Math.pow(B_threshold - l_bg, B_exp);
2656
+
2657
+ // normal polarity (dark text on light background)
2658
+ const S_norm = Math.pow(Y_bg, 0.56) - Math.pow(Y_text, 0.57);
2659
+ // reverse polarity (light text on dark background)
2660
+ const S_rev = Math.pow(Y_bg, 0.65) - Math.pow(Y_text, 0.62);
2661
+ // clamp noise then scale
2662
+ const C =
2663
+ Math.abs(Y_bg - Y_text) < P_in
2664
+ ? 0
2665
+ : Y_text < Y_bg
2666
+ ? S_norm * R_scale
2667
+ : S_rev * R_scale;
2668
+ // clamp minimum contrast then offset
2669
+ const S_apc = Math.abs(C) < P_out ? 0 : C > 0 ? C - W_offset : C + W_offset;
2670
+ // scale to 100
2671
+ return S_apc * 100;
2672
+ };
2673
+
2674
+ function lum(r, g, b) {
2675
+ return (
2676
+ 0.2126729 * Math.pow(r / 255, 2.4) +
2677
+ 0.7151522 * Math.pow(g / 255, 2.4) +
2678
+ 0.072175 * Math.pow(b / 255, 2.4)
2679
+ );
2680
+ }
2681
+
2682
+ const { sqrt, pow, min, max: max$1, atan2, abs, cos, sin, exp, PI } = Math;
2683
+
2684
+ function deltaE (a, b, Kl = 1, Kc = 1, Kh = 1) {
2685
+ // Delta E (CIE 2000)
2686
+ // see http://www.brucelindbloom.com/index.html?Eqn_DeltaE_CIE2000.html
2687
+ var rad2deg = function (rad) {
2688
+ return (360 * rad) / (2 * PI);
2689
+ };
2690
+ var deg2rad = function (deg) {
2691
+ return (2 * PI * deg) / 360;
2692
+ };
2693
+ a = new Color(a);
2694
+ b = new Color(b);
2695
+ const [L1, a1, b1] = Array.from(a.lab());
2696
+ const [L2, a2, b2] = Array.from(b.lab());
2697
+ const avgL = (L1 + L2) / 2;
2698
+ const C1 = sqrt(pow(a1, 2) + pow(b1, 2));
2699
+ const C2 = sqrt(pow(a2, 2) + pow(b2, 2));
2700
+ const avgC = (C1 + C2) / 2;
2701
+ const G = 0.5 * (1 - sqrt(pow(avgC, 7) / (pow(avgC, 7) + pow(25, 7))));
2702
+ const a1p = a1 * (1 + G);
2703
+ const a2p = a2 * (1 + G);
2704
+ const C1p = sqrt(pow(a1p, 2) + pow(b1, 2));
2705
+ const C2p = sqrt(pow(a2p, 2) + pow(b2, 2));
2706
+ const avgCp = (C1p + C2p) / 2;
2707
+ const arctan1 = rad2deg(atan2(b1, a1p));
2708
+ const arctan2 = rad2deg(atan2(b2, a2p));
2709
+ const h1p = arctan1 >= 0 ? arctan1 : arctan1 + 360;
2710
+ const h2p = arctan2 >= 0 ? arctan2 : arctan2 + 360;
2711
+ const avgHp =
2712
+ abs(h1p - h2p) > 180 ? (h1p + h2p + 360) / 2 : (h1p + h2p) / 2;
2713
+ const T =
2714
+ 1 -
2715
+ 0.17 * cos(deg2rad(avgHp - 30)) +
2716
+ 0.24 * cos(deg2rad(2 * avgHp)) +
2717
+ 0.32 * cos(deg2rad(3 * avgHp + 6)) -
2718
+ 0.2 * cos(deg2rad(4 * avgHp - 63));
2719
+ let deltaHp = h2p - h1p;
2720
+ deltaHp =
2721
+ abs(deltaHp) <= 180
2722
+ ? deltaHp
2723
+ : h2p <= h1p
2724
+ ? deltaHp + 360
2725
+ : deltaHp - 360;
2726
+ deltaHp = 2 * sqrt(C1p * C2p) * sin(deg2rad(deltaHp) / 2);
2727
+ const deltaL = L2 - L1;
2728
+ const deltaCp = C2p - C1p;
2729
+ const sl = 1 + (0.015 * pow(avgL - 50, 2)) / sqrt(20 + pow(avgL - 50, 2));
2730
+ const sc = 1 + 0.045 * avgCp;
2731
+ const sh = 1 + 0.015 * avgCp * T;
2732
+ const deltaTheta = 30 * exp(-pow((avgHp - 275) / 25, 2));
2733
+ const Rc = 2 * sqrt(pow(avgCp, 7) / (pow(avgCp, 7) + pow(25, 7)));
2734
+ const Rt = -Rc * sin(2 * deg2rad(deltaTheta));
2735
+ const result = sqrt(
2736
+ pow(deltaL / (Kl * sl), 2) +
2737
+ pow(deltaCp / (Kc * sc), 2) +
2738
+ pow(deltaHp / (Kh * sh), 2) +
2739
+ Rt * (deltaCp / (Kc * sc)) * (deltaHp / (Kh * sh))
2740
+ );
2741
+ return max$1(0, min(100, result));
2742
+ }
2743
+
2744
+ // simple Euclidean distance
2745
+ function distance (a, b, mode = 'lab') {
2746
+ // Delta E (CIE 1976)
2747
+ // see http://www.brucelindbloom.com/index.html?Equations.html
2748
+ a = new Color(a);
2749
+ b = new Color(b);
2750
+ const l1 = a.get(mode);
2751
+ const l2 = b.get(mode);
2752
+ let sum_sq = 0;
2753
+ for (let i in l1) {
2754
+ const d = (l1[i] || 0) - (l2[i] || 0);
2755
+ sum_sq += d * d;
2756
+ }
2757
+ return Math.sqrt(sum_sq);
2758
+ }
2759
+
2760
+ var valid = (...args) => {
2761
+ try {
2762
+ new Color(...args);
2763
+ return true;
2764
+ // eslint-disable-next-line
2765
+ } catch (e) {
2766
+ return false;
2767
+ }
2768
+ };
2769
+
2770
+ // some pre-defined color scales:
2771
+
2772
+ var scales = {
2773
+ cool() {
2774
+ return scale([chroma.hsl(180, 1, 0.9), chroma.hsl(250, 0.7, 0.4)]);
2775
+ },
2776
+ hot() {
2777
+ return scale(['#000', '#f00', '#ff0', '#fff']).mode(
2778
+ 'rgb'
2779
+ );
2780
+ }
2781
+ };
2782
+
2783
+ /**
2784
+ ColorBrewer colors for chroma.js
2785
+
2786
+ Copyright (c) 2002 Cynthia Brewer, Mark Harrower, and The
2787
+ Pennsylvania State University.
2788
+
2789
+ Licensed under the Apache License, Version 2.0 (the "License");
2790
+ you may not use this file except in compliance with the License.
2791
+ You may obtain a copy of the License at
2792
+ http://www.apache.org/licenses/LICENSE-2.0
2793
+
2794
+ Unless required by applicable law or agreed to in writing, software distributed
2795
+ under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
2796
+ CONDITIONS OF ANY KIND, either express or implied. See the License for the
2797
+ specific language governing permissions and limitations under the License.
2798
+ */
2799
+
2800
+ const colorbrewer = {
2801
+ // sequential
2802
+ OrRd: ['#fff7ec', '#fee8c8', '#fdd49e', '#fdbb84', '#fc8d59', '#ef6548', '#d7301f', '#b30000', '#7f0000'],
2803
+ PuBu: ['#fff7fb', '#ece7f2', '#d0d1e6', '#a6bddb', '#74a9cf', '#3690c0', '#0570b0', '#045a8d', '#023858'],
2804
+ BuPu: ['#f7fcfd', '#e0ecf4', '#bfd3e6', '#9ebcda', '#8c96c6', '#8c6bb1', '#88419d', '#810f7c', '#4d004b'],
2805
+ Oranges: ['#fff5eb', '#fee6ce', '#fdd0a2', '#fdae6b', '#fd8d3c', '#f16913', '#d94801', '#a63603', '#7f2704'],
2806
+ BuGn: ['#f7fcfd', '#e5f5f9', '#ccece6', '#99d8c9', '#66c2a4', '#41ae76', '#238b45', '#006d2c', '#00441b'],
2807
+ YlOrBr: ['#ffffe5', '#fff7bc', '#fee391', '#fec44f', '#fe9929', '#ec7014', '#cc4c02', '#993404', '#662506'],
2808
+ YlGn: ['#ffffe5', '#f7fcb9', '#d9f0a3', '#addd8e', '#78c679', '#41ab5d', '#238443', '#006837', '#004529'],
2809
+ Reds: ['#fff5f0', '#fee0d2', '#fcbba1', '#fc9272', '#fb6a4a', '#ef3b2c', '#cb181d', '#a50f15', '#67000d'],
2810
+ RdPu: ['#fff7f3', '#fde0dd', '#fcc5c0', '#fa9fb5', '#f768a1', '#dd3497', '#ae017e', '#7a0177', '#49006a'],
2811
+ Greens: ['#f7fcf5', '#e5f5e0', '#c7e9c0', '#a1d99b', '#74c476', '#41ab5d', '#238b45', '#006d2c', '#00441b'],
2812
+ YlGnBu: ['#ffffd9', '#edf8b1', '#c7e9b4', '#7fcdbb', '#41b6c4', '#1d91c0', '#225ea8', '#253494', '#081d58'],
2813
+ Purples: ['#fcfbfd', '#efedf5', '#dadaeb', '#bcbddc', '#9e9ac8', '#807dba', '#6a51a3', '#54278f', '#3f007d'],
2814
+ GnBu: ['#f7fcf0', '#e0f3db', '#ccebc5', '#a8ddb5', '#7bccc4', '#4eb3d3', '#2b8cbe', '#0868ac', '#084081'],
2815
+ Greys: ['#ffffff', '#f0f0f0', '#d9d9d9', '#bdbdbd', '#969696', '#737373', '#525252', '#252525', '#000000'],
2816
+ YlOrRd: ['#ffffcc', '#ffeda0', '#fed976', '#feb24c', '#fd8d3c', '#fc4e2a', '#e31a1c', '#bd0026', '#800026'],
2817
+ PuRd: ['#f7f4f9', '#e7e1ef', '#d4b9da', '#c994c7', '#df65b0', '#e7298a', '#ce1256', '#980043', '#67001f'],
2818
+ Blues: ['#f7fbff', '#deebf7', '#c6dbef', '#9ecae1', '#6baed6', '#4292c6', '#2171b5', '#08519c', '#08306b'],
2819
+ PuBuGn: ['#fff7fb', '#ece2f0', '#d0d1e6', '#a6bddb', '#67a9cf', '#3690c0', '#02818a', '#016c59', '#014636'],
2820
+ Viridis: ['#440154', '#482777', '#3f4a8a', '#31678e', '#26838f', '#1f9d8a', '#6cce5a', '#b6de2b', '#fee825'],
2821
+
2822
+ // diverging
2823
+ Spectral: ['#9e0142', '#d53e4f', '#f46d43', '#fdae61', '#fee08b', '#ffffbf', '#e6f598', '#abdda4', '#66c2a5', '#3288bd', '#5e4fa2'],
2824
+ RdYlGn: ['#a50026', '#d73027', '#f46d43', '#fdae61', '#fee08b', '#ffffbf', '#d9ef8b', '#a6d96a', '#66bd63', '#1a9850', '#006837'],
2825
+ RdBu: ['#67001f', '#b2182b', '#d6604d', '#f4a582', '#fddbc7', '#f7f7f7', '#d1e5f0', '#92c5de', '#4393c3', '#2166ac', '#053061'],
2826
+ PiYG: ['#8e0152', '#c51b7d', '#de77ae', '#f1b6da', '#fde0ef', '#f7f7f7', '#e6f5d0', '#b8e186', '#7fbc41', '#4d9221', '#276419'],
2827
+ PRGn: ['#40004b', '#762a83', '#9970ab', '#c2a5cf', '#e7d4e8', '#f7f7f7', '#d9f0d3', '#a6dba0', '#5aae61', '#1b7837', '#00441b'],
2828
+ RdYlBu: ['#a50026', '#d73027', '#f46d43', '#fdae61', '#fee090', '#ffffbf', '#e0f3f8', '#abd9e9', '#74add1', '#4575b4', '#313695'],
2829
+ BrBG: ['#543005', '#8c510a', '#bf812d', '#dfc27d', '#f6e8c3', '#f5f5f5', '#c7eae5', '#80cdc1', '#35978f', '#01665e', '#003c30'],
2830
+ RdGy: ['#67001f', '#b2182b', '#d6604d', '#f4a582', '#fddbc7', '#ffffff', '#e0e0e0', '#bababa', '#878787', '#4d4d4d', '#1a1a1a'],
2831
+ PuOr: ['#7f3b08', '#b35806', '#e08214', '#fdb863', '#fee0b6', '#f7f7f7', '#d8daeb', '#b2abd2', '#8073ac', '#542788', '#2d004b'],
2832
+
2833
+ // qualitative
2834
+ Set2: ['#66c2a5', '#fc8d62', '#8da0cb', '#e78ac3', '#a6d854', '#ffd92f', '#e5c494', '#b3b3b3'],
2835
+ Accent: ['#7fc97f', '#beaed4', '#fdc086', '#ffff99', '#386cb0', '#f0027f', '#bf5b17', '#666666'],
2836
+ Set1: ['#e41a1c', '#377eb8', '#4daf4a', '#984ea3', '#ff7f00', '#ffff33', '#a65628', '#f781bf', '#999999'],
2837
+ Set3: ['#8dd3c7', '#ffffb3', '#bebada', '#fb8072', '#80b1d3', '#fdb462', '#b3de69', '#fccde5', '#d9d9d9', '#bc80bd', '#ccebc5', '#ffed6f'],
2838
+ Dark2: ['#1b9e77', '#d95f02', '#7570b3', '#e7298a', '#66a61e', '#e6ab02', '#a6761d', '#666666'],
2839
+ Paired: ['#a6cee3', '#1f78b4', '#b2df8a', '#33a02c', '#fb9a99', '#e31a1c', '#fdbf6f', '#ff7f00', '#cab2d6', '#6a3d9a', '#ffff99', '#b15928'],
2840
+ Pastel2: ['#b3e2cd', '#fdcdac', '#cbd5e8', '#f4cae4', '#e6f5c9', '#fff2ae', '#f1e2cc', '#cccccc'],
2841
+ Pastel1: ['#fbb4ae', '#b3cde3', '#ccebc5', '#decbe4', '#fed9a6', '#ffffcc', '#e5d8bd', '#fddaec', '#f2f2f2']
2842
+ };
2843
+
2844
+ const colorbrewerTypes = Object.keys(colorbrewer);
2845
+ const typeMap = new Map(colorbrewerTypes.map((key) => [key.toLowerCase(), key]));
2846
+
2847
+ // use Proxy to allow case-insensitive access to palettes
2848
+ const colorbrewerProxy =
2849
+ typeof Proxy === 'function'
2850
+ ? new Proxy(colorbrewer, {
2851
+ get(target, prop) {
2852
+ const lower = prop.toLowerCase();
2853
+ if (typeMap.has(lower)) {
2854
+ return target[typeMap.get(lower)];
2855
+ }
2856
+ },
2857
+ getOwnPropertyNames() {
2858
+ return Object.getOwnPropertyNames(colorbrewerTypes);
2859
+ }
2860
+ })
2861
+ : colorbrewer;
2862
+
2863
+ const cmyk2rgb = (...args) => {
2864
+ args = unpack(args, 'cmyk');
2865
+ const [c, m, y, k] = args;
2866
+ const alpha = args.length > 4 ? args[4] : 1;
2867
+ if (k === 1) return [0, 0, 0, alpha];
2868
+ return [
2869
+ c >= 1 ? 0 : 255 * (1 - c) * (1 - k), // r
2870
+ m >= 1 ? 0 : 255 * (1 - m) * (1 - k), // g
2871
+ y >= 1 ? 0 : 255 * (1 - y) * (1 - k), // b
2872
+ alpha
2873
+ ];
2874
+ };
2875
+
2876
+ const { max } = Math;
2877
+
2878
+ const rgb2cmyk = (...args) => {
2879
+ let [r, g, b] = unpack(args, 'rgb');
2880
+ r = r / 255;
2881
+ g = g / 255;
2882
+ b = b / 255;
2883
+ const k = 1 - max(r, max(g, b));
2884
+ const f = k < 1 ? 1 / (1 - k) : 0;
2885
+ const c = (1 - r - k) * f;
2886
+ const m = (1 - g - k) * f;
2887
+ const y = (1 - b - k) * f;
2888
+ return [c, m, y, k];
2889
+ };
2890
+
2891
+ Color.prototype.cmyk = function () {
2892
+ return rgb2cmyk(this._rgb);
2893
+ };
2894
+
2895
+ const cmyk = (...args) => new Color(...args, 'cmyk');
2896
+ Object.assign(chroma, { cmyk });
2897
+
2898
+ input.format.cmyk = cmyk2rgb;
2899
+
2900
+ input.autodetect.push({
2901
+ p: 2,
2902
+ test: (...args) => {
2903
+ args = unpack(args, 'cmyk');
2904
+ if (type(args) === 'array' && args.length === 4) {
2905
+ return 'cmyk';
2906
+ }
2907
+ }
2908
+ });
2909
+
2910
+ /*
2911
+ * supported arguments:
2912
+ * - hsl2css(h,s,l)
2913
+ * - hsl2css(h,s,l,a)
2914
+ * - hsl2css([h,s,l], mode)
2915
+ * - hsl2css([h,s,l,a], mode)
2916
+ * - hsl2css({h,s,l,a}, mode)
2917
+ */
2918
+ const hsl2css = (...args) => {
2919
+ const hsla = unpack(args, 'hsla');
2920
+ let mode = last(args) || 'lsa';
2921
+ hsla[0] = rnd2(hsla[0] || 0) + 'deg';
2922
+ hsla[1] = rnd2(hsla[1] * 100) + '%';
2923
+ hsla[2] = rnd2(hsla[2] * 100) + '%';
2924
+ if (mode === 'hsla' || (hsla.length > 3 && hsla[3] < 1)) {
2925
+ hsla[3] = '/ ' + (hsla.length > 3 ? hsla[3] : 1);
2926
+ mode = 'hsla';
2927
+ } else {
2928
+ hsla.length = 3;
2929
+ }
2930
+ return `${mode.substr(0, 3)}(${hsla.join(' ')})`;
2931
+ };
2932
+
2933
+ /*
2934
+ * supported arguments:
2935
+ * - lab2css(l,a,b)
2936
+ * - lab2css(l,a,b,alpha)
2937
+ * - lab2css([l,a,b], mode)
2938
+ * - lab2css([l,a,b,alpha], mode)
2939
+ */
2940
+ const lab2css = (...args) => {
2941
+ const laba = unpack(args, 'lab');
2942
+ let mode = last(args) || 'lab';
2943
+ laba[0] = rnd2(laba[0]) + '%';
2944
+ laba[1] = rnd2(laba[1]);
2945
+ laba[2] = rnd2(laba[2]);
2946
+ if (mode === 'laba' || (laba.length > 3 && laba[3] < 1)) {
2947
+ laba[3] = '/ ' + (laba.length > 3 ? laba[3] : 1);
2948
+ } else {
2949
+ laba.length = 3;
2950
+ }
2951
+ return `lab(${laba.join(' ')})`;
2952
+ };
2953
+
2954
+ /*
2955
+ * supported arguments:
2956
+ * - lab2css(l,a,b)
2957
+ * - lab2css(l,a,b,alpha)
2958
+ * - lab2css([l,a,b], mode)
2959
+ * - lab2css([l,a,b,alpha], mode)
2960
+ */
2961
+ const lch2css = (...args) => {
2962
+ const lcha = unpack(args, 'lch');
2963
+ let mode = last(args) || 'lab';
2964
+ lcha[0] = rnd2(lcha[0]) + '%';
2965
+ lcha[1] = rnd2(lcha[1]);
2966
+ lcha[2] = isNaN(lcha[2]) ? 'none' : rnd2(lcha[2]) + 'deg'; // add deg unit to hue
2967
+ if (mode === 'lcha' || (lcha.length > 3 && lcha[3] < 1)) {
2968
+ lcha[3] = '/ ' + (lcha.length > 3 ? lcha[3] : 1);
2969
+ } else {
2970
+ lcha.length = 3;
2971
+ }
2972
+ return `lch(${lcha.join(' ')})`;
2973
+ };
2974
+
2975
+ const oklab2css = (...args) => {
2976
+ const laba = unpack(args, 'lab');
2977
+ laba[0] = rnd2(laba[0] * 100) + '%';
2978
+ laba[1] = rnd3(laba[1]);
2979
+ laba[2] = rnd3(laba[2]);
2980
+ if (laba.length > 3 && laba[3] < 1) {
2981
+ laba[3] = '/ ' + (laba.length > 3 ? laba[3] : 1);
2982
+ } else {
2983
+ laba.length = 3;
2984
+ }
2985
+ return `oklab(${laba.join(' ')})`;
2986
+ };
2987
+
2988
+ const rgb2oklch = (...args) => {
2989
+ const [r, g, b, ...rest] = unpack(args, 'rgb');
2990
+ const [l, a, b_] = rgb2oklab(r, g, b);
2991
+ const [L, c, h] = lab2lch(l, a, b_);
2992
+ return [L, c, h, ...(rest.length > 0 && rest[0] < 1 ? [rest[0]] : [])];
2993
+ };
2994
+
2995
+ const oklch2css = (...args) => {
2996
+ const lcha = unpack(args, 'lch');
2997
+ lcha[0] = rnd2(lcha[0] * 100) + '%';
2998
+ lcha[1] = rnd3(lcha[1]);
2999
+ lcha[2] = isNaN(lcha[2]) ? 'none' : rnd2(lcha[2]) + 'deg'; // add deg unit to hue
3000
+ if (lcha.length > 3 && lcha[3] < 1) {
3001
+ lcha[3] = '/ ' + (lcha.length > 3 ? lcha[3] : 1);
3002
+ } else {
3003
+ lcha.length = 3;
3004
+ }
3005
+ return `oklch(${lcha.join(' ')})`;
3006
+ };
3007
+
3008
+ const { round: round$2 } = Math;
3009
+
3010
+ /*
3011
+ * supported arguments:
3012
+ * - rgb2css(r,g,b)
3013
+ * - rgb2css(r,g,b,a)
3014
+ * - rgb2css([r,g,b], mode)
3015
+ * - rgb2css([r,g,b,a], mode)
3016
+ * - rgb2css({r,g,b,a}, mode)
3017
+ */
3018
+ const rgb2css = (...args) => {
3019
+ const rgba = unpack(args, 'rgba');
3020
+ let mode = last(args) || 'rgb';
3021
+ if (mode.substr(0, 3) === 'hsl') {
3022
+ return hsl2css(rgb2hsl$1(rgba), mode);
3023
+ }
3024
+ if (mode.substr(0, 3) === 'lab') {
3025
+ // change to D50 lab whitepoint since this is what W3C is using for CSS Lab colors
3026
+ const prevWhitePoint = getLabWhitePoint();
3027
+ setLabWhitePoint('d50');
3028
+ const cssColor = lab2css(rgb2lab(rgba), mode);
3029
+ setLabWhitePoint(prevWhitePoint);
3030
+ return cssColor;
3031
+ }
3032
+ if (mode.substr(0, 3) === 'lch') {
3033
+ // change to D50 lab whitepoint since this is what W3C is using for CSS Lab colors
3034
+ const prevWhitePoint = getLabWhitePoint();
3035
+ setLabWhitePoint('d50');
3036
+ const cssColor = lch2css(rgb2lch(rgba), mode);
3037
+ setLabWhitePoint(prevWhitePoint);
3038
+ return cssColor;
3039
+ }
3040
+ if (mode.substr(0, 5) === 'oklab') {
3041
+ return oklab2css(rgb2oklab(rgba));
3042
+ }
3043
+ if (mode.substr(0, 5) === 'oklch') {
3044
+ return oklch2css(rgb2oklch(rgba));
3045
+ }
3046
+ rgba[0] = round$2(rgba[0]);
3047
+ rgba[1] = round$2(rgba[1]);
3048
+ rgba[2] = round$2(rgba[2]);
3049
+ if (mode === 'rgba' || (rgba.length > 3 && rgba[3] < 1)) {
3050
+ rgba[3] = '/ ' + (rgba.length > 3 ? rgba[3] : 1);
3051
+ mode = 'rgba';
3052
+ }
3053
+ return `${mode.substr(0, 3)}(${rgba.slice(0, mode === 'rgb' ? 3 : 4).join(' ')})`;
3054
+ };
3055
+
3056
+ const oklch2rgb = (...args) => {
3057
+ args = unpack(args, 'lch');
3058
+ const [l, c, h, ...rest] = args;
3059
+ const [L, a, b_] = lch2lab(l, c, h);
3060
+ const [r, g, b] = oklab2rgb(L, a, b_);
3061
+ return [r, g, b, ...(rest.length > 0 && rest[0] < 1 ? [rest[0]] : [])];
3062
+ };
3063
+
3064
+ const INT_OR_PCT = /((?:-?\d+)|(?:-?\d+(?:\.\d+)?)%|none)/.source;
3065
+ const FLOAT_OR_PCT = /((?:-?(?:\d+(?:\.\d*)?|\.\d+)%?)|none)/.source;
3066
+ const PCT = /((?:-?(?:\d+(?:\.\d*)?|\.\d+)%)|none)/.source;
3067
+ const RE_S = /\s*/.source;
3068
+ const SEP = /\s+/.source;
3069
+ const COMMA = /\s*,\s*/.source;
3070
+ const ANLGE = /((?:-?(?:\d+(?:\.\d*)?|\.\d+)(?:deg)?)|none)/.source;
3071
+ const ALPHA = /\s*(?:\/\s*((?:[01]|[01]?\.\d+)|\d+(?:\.\d+)?%))?/.source;
3072
+
3073
+ // e.g. rgb(250 20 0), rgb(100% 50% 20%), rgb(100% 50% 20% / 0.5)
3074
+ const RE_RGB = new RegExp(
3075
+ '^rgba?\\(' +
3076
+ RE_S +
3077
+ [INT_OR_PCT, INT_OR_PCT, INT_OR_PCT].join(SEP) +
3078
+ ALPHA +
3079
+ '\\)$'
3080
+ );
3081
+ const RE_RGB_LEGACY = new RegExp(
3082
+ '^rgb\\(' +
3083
+ RE_S +
3084
+ [INT_OR_PCT, INT_OR_PCT, INT_OR_PCT].join(COMMA) +
3085
+ RE_S +
3086
+ '\\)$'
3087
+ );
3088
+ const RE_RGBA_LEGACY = new RegExp(
3089
+ '^rgba\\(' +
3090
+ RE_S +
3091
+ [INT_OR_PCT, INT_OR_PCT, INT_OR_PCT, FLOAT_OR_PCT].join(COMMA) +
3092
+ RE_S +
3093
+ '\\)$'
3094
+ );
3095
+
3096
+ const RE_HSL = new RegExp(
3097
+ '^hsla?\\(' + RE_S + [ANLGE, PCT, PCT].join(SEP) + ALPHA + '\\)$'
3098
+ );
3099
+ const RE_HSL_LEGACY = new RegExp(
3100
+ '^hsl?\\(' + RE_S + [ANLGE, PCT, PCT].join(COMMA) + RE_S + '\\)$'
3101
+ );
3102
+ const RE_HSLA_LEGACY =
3103
+ /^hsla\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/;
3104
+
3105
+ const RE_LAB = new RegExp(
3106
+ '^lab\\(' +
3107
+ RE_S +
3108
+ [FLOAT_OR_PCT, FLOAT_OR_PCT, FLOAT_OR_PCT].join(SEP) +
3109
+ ALPHA +
3110
+ '\\)$'
3111
+ );
3112
+ const RE_LCH = new RegExp(
3113
+ '^lch\\(' +
3114
+ RE_S +
3115
+ [FLOAT_OR_PCT, FLOAT_OR_PCT, ANLGE].join(SEP) +
3116
+ ALPHA +
3117
+ '\\)$'
3118
+ );
3119
+ const RE_OKLAB = new RegExp(
3120
+ '^oklab\\(' +
3121
+ RE_S +
3122
+ [FLOAT_OR_PCT, FLOAT_OR_PCT, FLOAT_OR_PCT].join(SEP) +
3123
+ ALPHA +
3124
+ '\\)$'
3125
+ );
3126
+ const RE_OKLCH = new RegExp(
3127
+ '^oklch\\(' +
3128
+ RE_S +
3129
+ [FLOAT_OR_PCT, FLOAT_OR_PCT, ANLGE].join(SEP) +
3130
+ ALPHA +
3131
+ '\\)$'
3132
+ );
3133
+
3134
+ const { round: round$1 } = Math;
3135
+
3136
+ const roundRGB = (rgb) => {
3137
+ return rgb.map((v, i) => (i <= 2 ? limit(round$1(v), 0, 255) : v));
3138
+ };
3139
+
3140
+ const percentToAbsolute = (pct, min = 0, max = 100, signed = false) => {
3141
+ if (typeof pct === 'string' && pct.endsWith('%')) {
3142
+ pct = parseFloat(pct.substring(0, pct.length - 1)) / 100;
3143
+ if (signed) {
3144
+ // signed percentages are in the range -100% to 100%
3145
+ pct = min + (pct + 1) * 0.5 * (max - min);
3146
+ } else {
3147
+ pct = min + pct * (max - min);
3148
+ }
3149
+ }
3150
+ return +pct;
3151
+ };
3152
+
3153
+ const noneToValue = (v, noneValue) => {
3154
+ return v === 'none' ? noneValue : v;
3155
+ };
3156
+
3157
+ const css2rgb = (css) => {
3158
+ css = css.toLowerCase().trim();
3159
+
3160
+ if (css === 'transparent') {
3161
+ return [0, 0, 0, 0];
3162
+ }
3163
+
3164
+ let m;
3165
+
3166
+ if (input.format.named) {
3167
+ try {
3168
+ return input.format.named(css);
3169
+ // eslint-disable-next-line
3170
+ } catch (e) {}
3171
+ }
3172
+
3173
+ // rgb(250 20 0) or rgb(250,20,0)
3174
+ if ((m = css.match(RE_RGB)) || (m = css.match(RE_RGB_LEGACY))) {
3175
+ let rgb = m.slice(1, 4);
3176
+ for (let i = 0; i < 3; i++) {
3177
+ rgb[i] = +percentToAbsolute(noneToValue(rgb[i], 0), 0, 255);
3178
+ }
3179
+ rgb = roundRGB(rgb);
3180
+ const alpha = m[4] !== undefined ? +percentToAbsolute(m[4], 0, 1) : 1;
3181
+ rgb[3] = alpha; // default alpha
3182
+ return rgb;
3183
+ }
3184
+
3185
+ // rgba(250,20,0,0.4)
3186
+ if ((m = css.match(RE_RGBA_LEGACY))) {
3187
+ const rgb = m.slice(1, 5);
3188
+ for (let i = 0; i < 4; i++) {
3189
+ rgb[i] = +percentToAbsolute(rgb[i], 0, 255);
3190
+ }
3191
+ return rgb;
3192
+ }
3193
+
3194
+ // hsl(0,100%,50%)
3195
+ if ((m = css.match(RE_HSL)) || (m = css.match(RE_HSL_LEGACY))) {
3196
+ const hsl = m.slice(1, 4);
3197
+ hsl[0] = +noneToValue(hsl[0].replace('deg', ''), 0);
3198
+ hsl[1] = +percentToAbsolute(noneToValue(hsl[1], 0), 0, 100) * 0.01;
3199
+ hsl[2] = +percentToAbsolute(noneToValue(hsl[2], 0), 0, 100) * 0.01;
3200
+ const rgb = roundRGB(hsl2rgb(hsl));
3201
+ const alpha = m[4] !== undefined ? +percentToAbsolute(m[4], 0, 1) : 1;
3202
+ rgb[3] = alpha;
3203
+ return rgb;
3204
+ }
3205
+
3206
+ // hsla(0,100%,50%,0.5)
3207
+ if ((m = css.match(RE_HSLA_LEGACY))) {
3208
+ const hsl = m.slice(1, 4);
3209
+ hsl[1] *= 0.01;
3210
+ hsl[2] *= 0.01;
3211
+ const rgb = hsl2rgb(hsl);
3212
+ for (let i = 0; i < 3; i++) {
3213
+ rgb[i] = round$1(rgb[i]);
3214
+ }
3215
+ rgb[3] = +m[4]; // default alpha = 1
3216
+ return rgb;
3217
+ }
3218
+
3219
+ if ((m = css.match(RE_LAB))) {
3220
+ const lab = m.slice(1, 4);
3221
+ lab[0] = percentToAbsolute(noneToValue(lab[0], 0), 0, 100);
3222
+ lab[1] = percentToAbsolute(noneToValue(lab[1], 0), -125, 125, true);
3223
+ lab[2] = percentToAbsolute(noneToValue(lab[2], 0), -125, 125, true);
3224
+ // convert to D50 Lab whitepoint
3225
+ const wp = getLabWhitePoint();
3226
+ setLabWhitePoint('d50');
3227
+ const rgb = roundRGB(lab2rgb(lab));
3228
+ // convert back to original Lab whitepoint
3229
+ setLabWhitePoint(wp);
3230
+ const alpha = m[4] !== undefined ? +percentToAbsolute(m[4], 0, 1) : 1;
3231
+ rgb[3] = alpha;
3232
+ return rgb;
3233
+ }
3234
+
3235
+ if ((m = css.match(RE_LCH))) {
3236
+ const lch = m.slice(1, 4);
3237
+ lch[0] = percentToAbsolute(lch[0], 0, 100);
3238
+ lch[1] = percentToAbsolute(noneToValue(lch[1], 0), 0, 150, false);
3239
+ lch[2] = +noneToValue(lch[2].replace('deg', ''), 0);
3240
+ // convert to D50 Lab whitepoint
3241
+ const wp = getLabWhitePoint();
3242
+ setLabWhitePoint('d50');
3243
+ const rgb = roundRGB(lch2rgb(lch));
3244
+ // convert back to original Lab whitepoint
3245
+ setLabWhitePoint(wp);
3246
+ const alpha = m[4] !== undefined ? +percentToAbsolute(m[4], 0, 1) : 1;
3247
+ rgb[3] = alpha;
3248
+ return rgb;
3249
+ }
3250
+
3251
+ if ((m = css.match(RE_OKLAB))) {
3252
+ const oklab = m.slice(1, 4);
3253
+ oklab[0] = percentToAbsolute(noneToValue(oklab[0], 0), 0, 1);
3254
+ oklab[1] = percentToAbsolute(noneToValue(oklab[1], 0), -0.4, 0.4, true);
3255
+ oklab[2] = percentToAbsolute(noneToValue(oklab[2], 0), -0.4, 0.4, true);
3256
+ const rgb = roundRGB(oklab2rgb(oklab));
3257
+ const alpha = m[4] !== undefined ? +percentToAbsolute(m[4], 0, 1) : 1;
3258
+ rgb[3] = alpha;
3259
+ return rgb;
3260
+ }
3261
+
3262
+ if ((m = css.match(RE_OKLCH))) {
3263
+ const oklch = m.slice(1, 4);
3264
+ oklch[0] = percentToAbsolute(noneToValue(oklch[0], 0), 0, 1);
3265
+ oklch[1] = percentToAbsolute(noneToValue(oklch[1], 0), 0, 0.4, false);
3266
+ oklch[2] = +noneToValue(oklch[2].replace('deg', ''), 0);
3267
+ const rgb = roundRGB(oklch2rgb(oklch));
3268
+ const alpha = m[4] !== undefined ? +percentToAbsolute(m[4], 0, 1) : 1;
3269
+ rgb[3] = alpha;
3270
+ return rgb;
3271
+ }
3272
+ };
3273
+
3274
+ css2rgb.test = (s) => {
3275
+ return (
3276
+ // modern
3277
+ RE_RGB.test(s) ||
3278
+ RE_HSL.test(s) ||
3279
+ RE_LAB.test(s) ||
3280
+ RE_LCH.test(s) ||
3281
+ RE_OKLAB.test(s) ||
3282
+ RE_OKLCH.test(s) ||
3283
+ // legacy
3284
+ RE_RGB_LEGACY.test(s) ||
3285
+ RE_RGBA_LEGACY.test(s) ||
3286
+ RE_HSL_LEGACY.test(s) ||
3287
+ RE_HSLA_LEGACY.test(s) ||
3288
+ s === 'transparent'
3289
+ );
3290
+ };
3291
+
3292
+ Color.prototype.css = function (mode) {
3293
+ return rgb2css(this._rgb, mode);
3294
+ };
3295
+
3296
+ const css = (...args) => new Color(...args, 'css');
3297
+ chroma.css = css;
3298
+
3299
+ input.format.css = css2rgb;
3300
+
3301
+ input.autodetect.push({
3302
+ p: 5,
3303
+ test: (h, ...rest) => {
3304
+ if (!rest.length && type(h) === 'string' && css2rgb.test(h)) {
3305
+ return 'css';
3306
+ }
3307
+ }
3308
+ });
3309
+
3310
+ input.format.gl = (...args) => {
3311
+ const rgb = unpack(args, 'rgba');
3312
+ rgb[0] *= 255;
3313
+ rgb[1] *= 255;
3314
+ rgb[2] *= 255;
3315
+ return rgb;
3316
+ };
3317
+
3318
+ const gl = (...args) => new Color(...args, 'gl');
3319
+ chroma.gl = gl;
3320
+
3321
+ Color.prototype.gl = function () {
3322
+ const rgb = this._rgb;
3323
+ return [rgb[0] / 255, rgb[1] / 255, rgb[2] / 255, rgb[3]];
3324
+ };
3325
+
3326
+ Color.prototype.hex = function (mode) {
3327
+ return rgb2hex(this._rgb, mode);
3328
+ };
3329
+
3330
+ const hex = (...args) => new Color(...args, 'hex');
3331
+ chroma.hex = hex;
3332
+
3333
+ input.format.hex = hex2rgb;
3334
+ input.autodetect.push({
3335
+ p: 4,
3336
+ test: (h, ...rest) => {
3337
+ if (
3338
+ !rest.length &&
3339
+ type(h) === 'string' &&
3340
+ [3, 4, 5, 6, 7, 8, 9].indexOf(h.length) >= 0
3341
+ ) {
3342
+ return 'hex';
3343
+ }
3344
+ }
3345
+ });
3346
+
3347
+ /*
3348
+ * Based on implementation by Neil Bartlett
3349
+ * https://github.com/neilbartlett/color-temperature
3350
+ */
3351
+
3352
+ const { log } = Math;
3353
+
3354
+ const temperature2rgb = (kelvin) => {
3355
+ const temp = kelvin / 100;
3356
+ let r, g, b;
3357
+ if (temp < 66) {
3358
+ r = 255;
3359
+ g =
3360
+ temp < 6
3361
+ ? 0
3362
+ : -155.25485562709179 -
3363
+ 0.44596950469579133 * (g = temp - 2) +
3364
+ 104.49216199393888 * log(g);
3365
+ b =
3366
+ temp < 20
3367
+ ? 0
3368
+ : -254.76935184120902 +
3369
+ 0.8274096064007395 * (b = temp - 10) +
3370
+ 115.67994401066147 * log(b);
3371
+ } else {
3372
+ r =
3373
+ 351.97690566805693 +
3374
+ 0.114206453784165 * (r = temp - 55) -
3375
+ 40.25366309332127 * log(r);
3376
+ g =
3377
+ 325.4494125711974 +
3378
+ 0.07943456536662342 * (g = temp - 50) -
3379
+ 28.0852963507957 * log(g);
3380
+ b = 255;
3381
+ }
3382
+ return [r, g, b, 1];
3383
+ };
3384
+
3385
+ /*
3386
+ * Based on implementation by Neil Bartlett
3387
+ * https://github.com/neilbartlett/color-temperature
3388
+ **/
3389
+
3390
+ const { round } = Math;
3391
+
3392
+ const rgb2temperature = (...args) => {
3393
+ const rgb = unpack(args, 'rgb');
3394
+ const r = rgb[0],
3395
+ b = rgb[2];
3396
+ let minTemp = 1000;
3397
+ let maxTemp = 40000;
3398
+ const eps = 0.4;
3399
+ let temp;
3400
+ while (maxTemp - minTemp > eps) {
3401
+ temp = (maxTemp + minTemp) * 0.5;
3402
+ const rgb = temperature2rgb(temp);
3403
+ if (rgb[2] / rgb[0] >= b / r) {
3404
+ maxTemp = temp;
3405
+ } else {
3406
+ minTemp = temp;
3407
+ }
3408
+ }
3409
+ return round(temp);
3410
+ };
3411
+
3412
+ Color.prototype.temp =
3413
+ Color.prototype.kelvin =
3414
+ Color.prototype.temperature =
3415
+ function () {
3416
+ return rgb2temperature(this._rgb);
3417
+ };
3418
+
3419
+ const temp = (...args) => new Color(...args, 'temp');
3420
+ Object.assign(chroma, { temp, kelvin: temp, temperature: temp });
3421
+
3422
+ input.format.temp =
3423
+ input.format.kelvin =
3424
+ input.format.temperature =
3425
+ temperature2rgb;
3426
+
3427
+ Color.prototype.oklch = function () {
3428
+ return rgb2oklch(this._rgb);
3429
+ };
3430
+
3431
+ const oklch = (...args) => new Color(...args, 'oklch');
3432
+ Object.assign(chroma, { oklch });
3433
+
3434
+ input.format.oklch = oklch2rgb;
3435
+
3436
+ input.autodetect.push({
3437
+ p: 2,
3438
+ test: (...args) => {
3439
+ args = unpack(args, 'oklch');
3440
+ if (type(args) === 'array' && args.length === 3) {
3441
+ return 'oklch';
3442
+ }
3443
+ }
3444
+ });
3445
+
3446
+ // feel free to comment out anything to rollup
3447
+ // a smaller chroma.js bundle
3448
+
3449
+ Object.assign(chroma, {
3450
+ analyze,
3451
+ average,
3452
+ bezier: bezier$1,
3453
+ blend,
3454
+ brewer: colorbrewerProxy,
3455
+ Color,
3456
+ colors: w3cx11,
3457
+ contrast,
3458
+ contrastAPCA,
3459
+ cubehelix,
3460
+ deltaE,
3461
+ distance,
3462
+ input,
3463
+ interpolate: mix,
3464
+ limits,
3465
+ mix,
3466
+ random: random$1,
3467
+ scale,
3468
+ scales,
3469
+ valid
3470
+ });
3471
+
3472
+ /* eslint-disable lingui/no-unlocalized-strings */ function rgba(color) {
3473
+ if (color.alpha() === 1) return `rgb(${color.rgb().join(',')})`;
3474
+ return `rgba(${color.rgba().join(',')})`;
3475
+ }
3476
+ /**
3477
+ * Takes a theme and dynamically generate the styles that uses color-mix,
3478
+ * as a fallback for browsers that do not support color-mix()
3479
+ */ function generateColorFallback(theme) {
3480
+ // Don't use chroma.colorMix since chroma.js treats transparent as rgba(0, 0, 0, 0)
3481
+ // which means our color is mixed with black rather than the original color
3482
+ // with alpha 0, which is what browsers so instead
3483
+ return {
3484
+ // --tab-background: color-mix(in oklab, var(--accent) 80%, transparent);
3485
+ 'tab-background': rgba(chroma(theme.accent).alpha(0.8)),
3486
+ // --primary-button-hover: color-mix(in oklab, var(--primary) 90%, transparent);
3487
+ 'primary-button-hover': rgba(chroma(theme.primary).alpha(0.9)),
3488
+ // --secondary-button-hover: color-mix(in oklab, var(--secondary) 80%, transparent);
3489
+ 'secondary-button-hover': rgba(chroma(theme.secondary).alpha(0.8)),
3490
+ // --destructive-button-hover: color-mix(in oklab, var(--destructive) 80%, transparent);
3491
+ 'destructive-button-hover': rgba(chroma(theme.destructive).alpha(0.8)),
3492
+ // --divider-color: color-mix(in oklab, var(--border) 50%, transparent);
3493
+ 'divider-color': rgba(chroma(theme.border).alpha(0.5)),
3494
+ // --focus-ring-shadow: 0 0 0 3px color-mix(in oklab, var(--ring) 50%, transparent);
3495
+ 'focus-ring-shadow': `0 0 0 3px ${rgba(chroma(theme.ring).alpha(0.5))}`
3496
+ };
3497
+ }
3498
+ const colors = [
3499
+ 'background',
3500
+ 'foreground',
3501
+ 'primary',
3502
+ 'primary-foreground',
3503
+ 'secondary',
3504
+ 'secondary-foreground',
3505
+ 'muted',
3506
+ 'muted-foreground',
3507
+ 'accent',
3508
+ 'accent-foreground',
3509
+ 'border',
3510
+ 'input',
3511
+ 'ring',
3512
+ 'destructive',
3513
+ 'warning',
3514
+ 'success'
3515
+ ];
3516
+ function addColorFallback(theme) {
3517
+ const updatedTheme = {
3518
+ ...theme,
3519
+ ...generateColorFallback(theme)
3520
+ };
3521
+ // RGB fallbacks for all Theme colors that use oklch, if the customer's browsers
3522
+ // don't support them
3523
+ for (const property of colors){
3524
+ if (!chroma.valid(theme[property])) continue;
3525
+ updatedTheme[property] = rgba(chroma(theme[property]));
3526
+ }
3527
+ return updatedTheme;
3528
+ }
3529
+
3530
+ /* eslint-disable lingui/no-unlocalized-strings */ /**
3531
+ * Maps a legacy StyleConfig to the new Theme format.
3532
+ *
3533
+ * This is a best-effort mapping - some StyleConfig properties don't have
3534
+ * direct equivalents in Theme, and some Theme properties don't have
3535
+ * StyleConfig equivalents.
3536
+ *
3537
+ * StyleConfig properties that don't have good mappings to Theme:
3538
+ * - inputs.placeholderColor - No equivalent (could potentially map to muted-foreground)
3539
+ * - inputs.textColor - Mapped to foreground as approximation, but is input-specific
3540
+ * - buttons.primary.borderColor - No specific mapping (could use border but loses specificity)
3541
+ * - buttons.primary.borderRadius - Mapped to button-radius but loses primary-specific control
3542
+ * - buttons.secondary.borderColor - No specific mapping (could use border but loses specificity)
3543
+ * - buttons.secondary.borderRadius - Mapped to button-radius but loses secondary-specific control
3544
+ * - buttons.disabled.* - No equivalents (disabled state styling not in Theme)
3545
+ *
3546
+ * Theme properties that don't have StyleConfig equivalents:
3547
+ * - 'transition-duration' - defaulted to 0 instead of 0.15s in our new default theme
3548
+ * - 'font-family-mono' - defaults to theme default which is system UI monospace
3549
+ * - 'text-base' - defaults to 1rem which is close to the old font sizes
3550
+ * - spacing - defaults to new theme default which is close but not equivalent to old spacing
3551
+ * - shadow, 'shadow-button', 'shadow-input' - no default in new theme
3552
+ * - foreground - Approximated from inputs.textColor but not exact
3553
+ * - muted, 'muted-foreground'
3554
+ * - 'accent-foreground'
3555
+ * - ring - previously defaults to OS default focus outline color
3556
+ */ function styleToTheme(styleConfig, { silent } = {}) {
3557
+ const warn = silent ? ()=>{
3558
+ // noop
3559
+ } : logger.logger.warn;
3560
+ const error = silent ? ()=>{
3561
+ // noop
3562
+ } : logger.logger.error;
3563
+ const theme = {};
3564
+ const options = {};
3565
+ const { colors, container, inputs, hideHeaderText, buttons, logo, fontFamily, ...outerEmpty } = styleConfig;
3566
+ // presentation.theme mapping
3567
+ // ------------------------------------------------
3568
+ dev.RUN_IN_DEV(()=>{
3569
+ warn("styleToTheme: We recommend setting theme['color-scheme'] to either 'light' or 'dark' explicitly " + 'depending on whether this is a light or dark theme. This enables icons to automatically automatically ' + 'apply contrasting colors.');
3570
+ if (Object.keys(outerEmpty).length > 0) warn('styleToTheme: Unrecognized style properties', outerEmpty);
3571
+ });
3572
+ theme['font-family'] = fontFamily;
3573
+ if (colors) {
3574
+ const { primary, secondary, success, warning, accent, error, ...expectEmpty } = colors;
3575
+ dev.RUN_IN_DEV(()=>{
3576
+ if (Object.keys(expectEmpty).length > 0) warn('styleToTheme: Unrecognized style.colors properties', expectEmpty);
3577
+ });
3578
+ Object.assign(theme, {
3579
+ primary,
3580
+ secondary,
3581
+ success,
3582
+ warning,
3583
+ accent,
3584
+ destructive: error
3585
+ });
3586
+ }
3587
+ if (container) {
3588
+ const { backgroundColor, borderColor, width, borderRadius, ...expectEmpty } = container;
3589
+ dev.RUN_IN_DEV(()=>{
3590
+ if (Object.keys(expectEmpty).length > 0) warn('styleToTheme: Unrecognized style.container properties', expectEmpty);
3591
+ });
3592
+ Object.assign(theme, {
3593
+ background: backgroundColor,
3594
+ border: borderColor,
3595
+ 'container-width': width,
3596
+ // 1/4 because the new base is quite small and most components use a 2x or 4x multiplier
3597
+ 'rounded-base': updateLength(borderRadius, 0.25)
3598
+ });
3599
+ }
3600
+ if (buttons) {
3601
+ const { primary, secondary, disabled, ...expectEmpty } = buttons;
3602
+ dev.RUN_IN_DEV(()=>{
3603
+ if (Object.keys(expectEmpty).length > 0) warn('styleToTheme: Unrecognized style.buttons properties', expectEmpty);
3604
+ if (disabled && Object.keys(disabled).length > 0) warn('styleToTheme: buttons.disabled is no longer supported', {
3605
+ disabled
3606
+ });
3607
+ if (primary?.borderColor && primary?.backgroundColor && primary.borderColor !== primary.backgroundColor) error("styleToTheme: primary button's border color is now always equal to background color; " + 'having distinct colors is no longer supported', {
3608
+ borderColor: primary.borderColor,
3609
+ backgroundColor: primary.backgroundColor
3610
+ });
3611
+ if (secondary?.borderColor && secondary.textColor && secondary.borderColor !== secondary.textColor) error("styleToTheme: secondary button's border color is now always equal to text color", {
3612
+ borderColor: secondary.borderColor,
3613
+ textColor: secondary.textColor
3614
+ });
3615
+ if (primary?.borderRadius !== secondary?.borderRadius) error('styleToTheme: All buttons must use the same border-radius', {
3616
+ primaryRadius: primary?.borderRadius,
3617
+ secondaryRadius: secondary?.borderRadius
3618
+ });
3619
+ });
3620
+ // Set background and text colors
3621
+ Object.assign(theme, {
3622
+ primary: primary?.backgroundColor,
3623
+ 'primary-foreground': primary?.textColor,
3624
+ secondary: secondary?.backgroundColor,
3625
+ 'secondary-foreground': secondary?.textColor
3626
+ });
3627
+ // Set border radius
3628
+ if (primary?.borderRadius || secondary?.borderRadius) {
3629
+ // Conflicts between primary and secondary border radius is handled above
3630
+ const baseRadius = updateLength(primary?.borderRadius, 0.5) ?? updateLength(secondary?.borderRadius, 0.5);
3631
+ if (theme['rounded-base']) {
3632
+ if (theme['rounded-base'] !== baseRadius) {
3633
+ theme['button-radius'] = primary?.borderRadius;
3634
+ }
3635
+ } else {
3636
+ theme['rounded-base'] = baseRadius;
3637
+ }
3638
+ }
3639
+ }
3640
+ if (inputs) {
3641
+ const { backgroundColor, textColor, placeholderColor, borderColor, borderRadius, ...expectEmpty } = inputs;
3642
+ dev.RUN_IN_DEV(()=>{
3643
+ if (Object.keys(expectEmpty).length > 0) warn('styleToTheme: Unrecognized style.buttons properties', expectEmpty);
3644
+ if (backgroundColor && theme.background && theme.background !== backgroundColor) error('styleToTheme: Input now always use the container background', {
3645
+ inputBackground: backgroundColor,
3646
+ containerBackground: theme.background
3647
+ });
3648
+ });
3649
+ Object.assign(theme, {
3650
+ foreground: textColor,
3651
+ input: borderColor,
3652
+ 'muted-foreground': placeholderColor
3653
+ });
3654
+ // Set border radius
3655
+ if (theme['rounded-base']) {
3656
+ if (theme['rounded-base'] !== borderRadius) {
3657
+ theme['input-radius'] = borderRadius;
3658
+ }
3659
+ } else {
3660
+ theme['rounded-base'] = borderRadius;
3661
+ }
3662
+ }
3663
+ // presentation.options mapping
3664
+ // ------------------------------------------------
3665
+ options.hideHeaderText = hideHeaderText;
3666
+ if (logo?.logoImageUrl) {
3667
+ options.logo = {
3668
+ url: logo.logoImageUrl,
3669
+ alt: ''
3670
+ };
3671
+ dev.RUN_IN_DEV(()=>{
3672
+ logger.logger.warn('styleToTheme: Please set options.logo.alt for the logo alt text for accessibility');
3673
+ });
3674
+ }
3675
+ return {
3676
+ theme: removeEmptyValues(theme),
3677
+ options: removeEmptyValues(options)
3678
+ };
3679
+ }
3680
+ function removeEmptyValues(obj) {
3681
+ return Object.fromEntries(Object.entries(obj).filter(([, value])=>value != null && value !== ''));
3682
+ }
3683
+ function updateLength(length, factor) {
3684
+ if (!length) return length;
3685
+ // Loose check that this is a numeric and not keyword value
3686
+ const value = parseFloat(length);
3687
+ if (Number.isNaN(value)) return length;
3688
+ return `calc(${length} * ${factor})`;
3689
+ }
3690
+
3691
+ exports.addColorFallback = addColorFallback;
3692
+ exports.generateColorFallback = generateColorFallback;
3693
+ exports.styleToTheme = styleToTheme;
3694
+ //# sourceMappingURL=compat.cjs.map