@choice-ui/react 1.7.6 → 1.7.8

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 (311) hide show
  1. package/dist/components/colors/dist/index.d.ts +878 -0
  2. package/dist/components/colors/scripts/build-worker.d.ts +1 -0
  3. package/dist/components/colors/src/check-color-contrast/check-color-contrast-boundary.d.ts +14 -0
  4. package/dist/components/colors/src/check-color-contrast/check-color-contrast-boundary.js +403 -0
  5. package/dist/components/colors/src/check-color-contrast/check-color-contrast-toolbar.d.ts +12 -0
  6. package/dist/components/colors/src/check-color-contrast/check-color-contrast-toolbar.js +285 -0
  7. package/dist/components/colors/src/check-color-contrast/index.d.ts +2 -0
  8. package/dist/components/colors/src/color-area/color-area.d.ts +24 -0
  9. package/dist/components/colors/src/color-area/color-area.js +228 -0
  10. package/dist/components/colors/src/color-area/index.d.ts +1 -0
  11. package/dist/components/colors/src/color-area/tv.d.ts +34 -0
  12. package/dist/components/colors/src/color-area/tv.js +22 -0
  13. package/dist/components/colors/src/color-channel-field/color-channel-field.d.ts +22 -0
  14. package/dist/components/colors/src/color-channel-field/color-channel-field.js +110 -0
  15. package/dist/components/colors/src/color-channel-field/color-channel-input.d.ts +20 -0
  16. package/dist/components/colors/src/color-channel-field/color-channel-input.js +261 -0
  17. package/dist/components/colors/src/color-channel-field/index.d.ts +1 -0
  18. package/dist/components/colors/src/color-channel-field/tv.d.ts +101 -0
  19. package/dist/components/colors/src/color-channel-field/tv.js +85 -0
  20. package/dist/components/colors/src/color-gradients-paint/color-gradient-combined.d.ts +16 -0
  21. package/dist/components/colors/src/color-gradients-paint/color-gradient-combined.js +54 -0
  22. package/dist/components/colors/src/color-gradients-paint/color-gradient-control.d.ts +18 -0
  23. package/dist/components/colors/src/color-gradients-paint/color-gradient-control.js +149 -0
  24. package/dist/components/colors/src/color-gradients-paint/color-gradient-list.d.ts +20 -0
  25. package/dist/components/colors/src/color-gradients-paint/color-gradient-list.js +111 -0
  26. package/dist/components/colors/src/color-gradients-paint/color-gradient-slider.d.ts +18 -0
  27. package/dist/components/colors/src/color-gradients-paint/color-gradient-slider.js +281 -0
  28. package/dist/components/colors/src/color-gradients-paint/color-gradients-paint.d.ts +17 -0
  29. package/dist/components/colors/src/color-gradients-paint/color-gradients-paint.js +162 -0
  30. package/dist/components/colors/src/color-gradients-paint/color-gradients-toolbar.d.ts +10 -0
  31. package/dist/components/colors/src/color-gradients-paint/color-gradients-toolbar.js +62 -0
  32. package/dist/components/colors/src/color-gradients-paint/index.d.ts +3 -0
  33. package/dist/components/colors/src/color-image-paint/color-image-paint.d.ts +13 -0
  34. package/dist/components/colors/src/color-image-paint/color-image-paint.js +236 -0
  35. package/dist/components/colors/src/color-image-paint/color-image-toolbar.d.ts +9 -0
  36. package/dist/components/colors/src/color-image-paint/color-image-toolbar.js +52 -0
  37. package/dist/components/colors/src/color-image-paint/index.d.ts +1 -0
  38. package/dist/components/colors/src/color-image-paint/tv.d.ts +89 -0
  39. package/dist/components/colors/src/color-image-paint/tv.js +45 -0
  40. package/dist/components/colors/src/color-picker-content/color-picker-content.d.ts +18 -0
  41. package/dist/components/colors/src/color-picker-content/color-picker-content.js +58 -0
  42. package/dist/components/colors/src/color-picker-content/color-picker-custom-content.d.ts +16 -0
  43. package/dist/components/colors/src/color-picker-content/color-picker-custom-content.js +75 -0
  44. package/dist/components/colors/src/color-picker-content/index.d.ts +1 -0
  45. package/dist/components/colors/src/color-picker-content/paint-type-selector.d.ts +13 -0
  46. package/dist/components/colors/src/color-picker-content/paint-type-selector.js +50 -0
  47. package/dist/components/colors/src/color-picker-content/tv.d.ts +31 -0
  48. package/dist/components/colors/src/color-picker-content/tv.js +13 -0
  49. package/dist/components/colors/src/color-picker-popover/color-paints-type.d.ts +15 -0
  50. package/dist/components/colors/src/color-picker-popover/color-paints-type.js +56 -0
  51. package/dist/components/colors/src/color-picker-popover/color-picker-popover.d.ts +26 -0
  52. package/dist/components/colors/src/color-picker-popover/color-picker-popover.js +116 -0
  53. package/dist/components/colors/src/color-picker-popover/color-picker-tabs.d.ts +14 -0
  54. package/dist/components/colors/src/color-picker-popover/color-picker-tabs.js +47 -0
  55. package/dist/components/colors/src/color-picker-popover/color-picker-title.d.ts +14 -0
  56. package/dist/components/colors/src/color-picker-popover/color-picker-title.js +30 -0
  57. package/dist/components/colors/src/color-picker-popover/index.d.ts +3 -0
  58. package/dist/components/colors/src/color-picker-popover/tv.d.ts +37 -0
  59. package/dist/components/colors/src/color-slider/color-slider.d.ts +19 -0
  60. package/dist/components/colors/src/color-slider/color-slider.js +185 -0
  61. package/dist/components/colors/src/color-slider/index.d.ts +1 -0
  62. package/dist/components/colors/src/color-slider/tv.d.ts +31 -0
  63. package/dist/components/colors/src/color-slider/tv.js +21 -0
  64. package/dist/components/colors/src/color-solid-paint/color-native-picker.d.ts +8 -0
  65. package/dist/components/colors/src/color-solid-paint/color-native-picker.js +63 -0
  66. package/dist/components/colors/src/color-solid-paint/color-solid-paint.d.ts +25 -0
  67. package/dist/components/colors/src/color-solid-paint/color-solid-paint.js +295 -0
  68. package/dist/components/colors/src/color-solid-paint/index.d.ts +3 -0
  69. package/dist/components/colors/src/color-solid-paint/solid-paint-alpha-slider.d.ts +10 -0
  70. package/dist/components/colors/src/color-solid-paint/solid-paint-alpha-slider.js +20 -0
  71. package/dist/components/colors/src/color-solid-paint/solid-paint-area.d.ts +17 -0
  72. package/dist/components/colors/src/color-solid-paint/solid-paint-area.js +131 -0
  73. package/dist/components/colors/src/color-solid-paint/solid-paint-channel-field.d.ts +20 -0
  74. package/dist/components/colors/src/color-solid-paint/solid-paint-channel-field.js +147 -0
  75. package/dist/components/colors/src/color-solid-paint/solid-paint-hue-slider.d.ts +14 -0
  76. package/dist/components/colors/src/color-solid-paint/solid-paint-hue-slider.js +46 -0
  77. package/dist/components/colors/src/color-solid-paint/solid-paint-library-item.d.ts +8 -0
  78. package/dist/components/colors/src/color-solid-paint/tv.d.ts +79 -0
  79. package/dist/components/colors/src/color-solid-paint/tv.js +39 -0
  80. package/dist/components/colors/src/color-swatch/color-swatch.d.ts +15 -0
  81. package/dist/components/colors/src/color-swatch/color-swatch.js +111 -0
  82. package/dist/components/colors/src/color-swatch/index.d.ts +1 -0
  83. package/dist/components/colors/src/contents/color-space.d.ts +19 -0
  84. package/dist/components/colors/src/contents/color-space.js +16 -0
  85. package/dist/components/colors/src/contents/colors.d.ts +42 -0
  86. package/dist/components/colors/src/contents/colors.js +24 -0
  87. package/dist/components/colors/src/contents/index.d.ts +3 -0
  88. package/dist/components/colors/src/contents/translation.d.ts +100 -0
  89. package/dist/components/colors/src/contents/translation.js +94 -0
  90. package/dist/components/colors/src/context/colots-context.d.ts +24 -0
  91. package/dist/components/colors/src/context/colots-context.js +62 -0
  92. package/dist/components/colors/src/context/index.d.ts +1 -0
  93. package/dist/components/colors/src/fill-input/alpha-input.d.ts +12 -0
  94. package/dist/components/colors/src/fill-input/alpha-input.js +48 -0
  95. package/dist/components/colors/src/fill-input/color-input.d.ts +31 -0
  96. package/dist/components/colors/src/fill-input/color-input.js +115 -0
  97. package/dist/components/colors/src/fill-input/gradient-item.d.ts +25 -0
  98. package/dist/components/colors/src/fill-input/gradient-item.js +103 -0
  99. package/dist/components/colors/src/fill-input/image-item.d.ts +25 -0
  100. package/dist/components/colors/src/fill-input/image-item.js +89 -0
  101. package/dist/components/colors/src/fill-input/index.d.ts +5 -0
  102. package/dist/components/colors/src/fill-input/tv.d.ts +221 -0
  103. package/dist/components/colors/src/fill-input/tv.js +205 -0
  104. package/dist/components/colors/src/fill-input/variable-item.d.ts +22 -0
  105. package/dist/components/colors/src/fill-input/variable-item.js +105 -0
  106. package/dist/components/colors/src/hex-input/hex-input.d.ts +10 -0
  107. package/dist/components/colors/src/hex-input/hex-input.js +182 -0
  108. package/dist/components/colors/src/hex-input/index.d.ts +1 -0
  109. package/dist/components/colors/src/hex-input/tv.d.ts +1 -0
  110. package/dist/components/colors/src/hex-input/tv.js +12 -0
  111. package/dist/components/colors/src/hooks/index.d.ts +10 -0
  112. package/dist/components/colors/src/hooks/use-color-contrast-recommendation.d.ts +36 -0
  113. package/dist/components/colors/src/hooks/use-color-contrast-recommendation.js +502 -0
  114. package/dist/components/colors/src/hooks/use-color-parser.d.ts +10 -0
  115. package/dist/components/colors/src/hooks/use-color-parser.js +146 -0
  116. package/dist/components/colors/src/hooks/use-color-picker.d.ts +45 -0
  117. package/dist/components/colors/src/hooks/use-color-picker.js +117 -0
  118. package/dist/components/colors/src/hooks/use-color-profile.d.ts +2 -0
  119. package/dist/components/colors/src/hooks/use-color-profile.js +27 -0
  120. package/dist/components/colors/src/hooks/use-cursor.d.ts +1 -0
  121. package/dist/components/colors/src/hooks/use-cursor.js +25 -0
  122. package/dist/components/colors/src/hooks/use-features.d.ts +21 -0
  123. package/dist/components/colors/src/hooks/use-features.js +73 -0
  124. package/dist/components/colors/src/hooks/use-image-filter-style.d.ts +9 -0
  125. package/dist/components/colors/src/hooks/use-image-filter-style.js +25 -0
  126. package/dist/components/colors/src/hooks/use-image-processor.d.ts +10 -0
  127. package/dist/components/colors/src/hooks/use-image-processor.js +121 -0
  128. package/dist/components/colors/src/hooks/use-paint-state.d.ts +16 -0
  129. package/dist/components/colors/src/hooks/use-paint-state.js +37 -0
  130. package/dist/components/colors/src/hooks/use-rgb-color-handler.d.ts +21 -0
  131. package/dist/components/colors/src/hooks/use-rgb-color-handler.js +58 -0
  132. package/dist/components/colors/src/index.d.ts +38 -0
  133. package/dist/components/colors/src/libraries/components/virtualized-grid-row.d.ts +36 -0
  134. package/dist/components/colors/src/libraries/components/virtualized-grid-row.js +53 -0
  135. package/dist/components/colors/src/libraries/components/virtualized-header.d.ts +9 -0
  136. package/dist/components/colors/src/libraries/components/virtualized-header.js +30 -0
  137. package/dist/components/colors/src/libraries/hooks/index.d.ts +2 -0
  138. package/dist/components/colors/src/libraries/hooks/use-category-options.d.ts +11 -0
  139. package/dist/components/colors/src/libraries/hooks/use-category-options.js +27 -0
  140. package/dist/components/colors/src/libraries/hooks/use-palette-color.d.ts +19 -0
  141. package/dist/components/colors/src/libraries/hooks/use-palette-color.js +41 -0
  142. package/dist/components/colors/src/libraries/index.d.ts +8 -0
  143. package/dist/components/colors/src/libraries/libraries-content.d.ts +8 -0
  144. package/dist/components/colors/src/libraries/libraries-empty-content.d.ts +5 -0
  145. package/dist/components/colors/src/libraries/libraries-header.d.ts +18 -0
  146. package/dist/components/colors/src/libraries/libraries-header.js +111 -0
  147. package/dist/components/colors/src/libraries/libraries-search-empty-content.d.ts +1 -0
  148. package/dist/components/colors/src/libraries/libraries-search-input.d.ts +6 -0
  149. package/dist/components/colors/src/libraries/libraries.d.ts +42 -0
  150. package/dist/components/colors/src/libraries/libraries.js +461 -0
  151. package/dist/components/colors/src/libraries/library-color-swatch.d.ts +21 -0
  152. package/dist/components/colors/src/libraries/library-item/index.d.ts +4 -0
  153. package/dist/components/colors/src/libraries/library-item/library-item.d.ts +21 -0
  154. package/dist/components/colors/src/libraries/library-item/library-item.js +151 -0
  155. package/dist/components/colors/src/libraries/library-item/library-list-item.d.ts +6 -0
  156. package/dist/components/colors/src/libraries/library-item/style-items.d.ts +17 -0
  157. package/dist/components/colors/src/libraries/library-item/style-items.js +63 -0
  158. package/dist/components/colors/src/libraries/library-item/variable-items.d.ts +19 -0
  159. package/dist/components/colors/src/libraries/library-item/variable-items.js +47 -0
  160. package/dist/components/colors/src/libraries/tv.d.ts +198 -0
  161. package/dist/components/colors/src/libraries/tv.js +141 -0
  162. package/dist/components/colors/src/simple-color-picker/index.d.ts +1 -0
  163. package/dist/components/colors/src/simple-color-picker/simple-color-picker.d.ts +17 -0
  164. package/dist/components/colors/src/simple-color-picker/simple-color-picker.js +153 -0
  165. package/dist/components/colors/src/types/base.d.ts +5 -0
  166. package/dist/components/colors/src/types/colors.d.ts +139 -0
  167. package/dist/components/colors/src/types/effect.d.ts +18 -0
  168. package/dist/components/colors/src/types/fill.d.ts +15 -0
  169. package/dist/components/colors/src/types/fonts.d.ts +38 -0
  170. package/dist/components/colors/src/types/index.d.ts +7 -0
  171. package/dist/components/colors/src/types/libraries.d.ts +7 -0
  172. package/dist/components/colors/src/types/paint.d.ts +139 -0
  173. package/dist/components/colors/src/types/style.d.ts +51 -0
  174. package/dist/components/colors/src/types/testing-library.d.ts +0 -0
  175. package/dist/components/colors/src/types/util.d.ts +26 -0
  176. package/dist/components/colors/src/types/variable.d.ts +27 -0
  177. package/dist/components/colors/src/utils/background.d.ts +12 -0
  178. package/dist/components/colors/src/utils/background.js +216 -0
  179. package/dist/components/colors/src/utils/color-profile-storage.d.ts +29 -0
  180. package/dist/components/colors/src/utils/color.d.ts +20 -0
  181. package/dist/components/colors/src/utils/color.js +45 -0
  182. package/dist/components/colors/src/utils/colors-convert.d.ts +18 -0
  183. package/dist/components/colors/src/utils/colors-convert.js +138 -0
  184. package/dist/components/colors/src/utils/contrast-utils.d.ts +27 -0
  185. package/dist/components/colors/src/utils/contrast-utils.js +25 -0
  186. package/dist/components/colors/src/utils/cursor.d.ts +1 -0
  187. package/dist/components/colors/src/utils/index.d.ts +7 -0
  188. package/dist/components/colors/src/utils/math.d.ts +9 -0
  189. package/dist/components/colors/src/utils/position.d.ts +33 -0
  190. package/dist/components/colors/src/utils/position.js +60 -0
  191. package/dist/components/colors/src/utils/validate.d.ts +10 -0
  192. package/dist/components/colors/src/workers/boundary-calculator.worker.bundled.d.ts +2 -0
  193. package/dist/components/colors/src/workers/boundary-calculator.worker.bundled.js +36 -0
  194. package/dist/components/colors/src/workers/boundary-calculator.worker.d.ts +1 -0
  195. package/dist/components/colors/src/workers/index.d.ts +1 -0
  196. package/dist/components/colors/tsup.config.d.ts +2 -0
  197. package/dist/components/icon-button/src/icon-button.d.ts +1 -1
  198. package/dist/components/icon-button/src/tv.d.ts +9 -0
  199. package/dist/components/icon-button/src/tv.js +29 -0
  200. package/dist/components/index.d.ts +1 -0
  201. package/dist/components/textarea/src/tv.d.ts +9 -3
  202. package/dist/components/textarea/src/tv.js +3 -1
  203. package/dist/components/toggle-button/dist/index.js +602 -0
  204. package/dist/index.js +69 -0
  205. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/index.js +119 -0
  206. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/Color.js +42 -0
  207. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/chroma.js +9 -0
  208. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/colors/colorbrewer.js +57 -0
  209. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/colors/w3cx11.js +159 -0
  210. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/generator/average.js +82 -0
  211. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/generator/bezier.js +68 -0
  212. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/generator/blend.js +43 -0
  213. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/generator/cubehelix.js +81 -0
  214. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/generator/mix.js +20 -0
  215. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/generator/random.js +13 -0
  216. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/generator/scale.js +325 -0
  217. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/interpolator/_hsx.js +54 -0
  218. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/interpolator/hcg.js +10 -0
  219. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/interpolator/hsi.js +10 -0
  220. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/interpolator/hsl.js +10 -0
  221. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/interpolator/hsv.js +10 -0
  222. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/interpolator/index.js +4 -0
  223. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/interpolator/lab.js +17 -0
  224. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/interpolator/lch.js +11 -0
  225. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/interpolator/lrgb.js +17 -0
  226. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/interpolator/num.js +12 -0
  227. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/interpolator/oklab.js +17 -0
  228. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/interpolator/oklch.js +10 -0
  229. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/interpolator/rgb.js +16 -0
  230. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/io/cmyk/cmyk2rgb.js +20 -0
  231. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/io/cmyk/index.js +25 -0
  232. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/io/cmyk/rgb2cmyk.js +18 -0
  233. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/io/css/css2rgb.js +169 -0
  234. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/io/css/hsl2css.js +20 -0
  235. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/io/css/index.js +23 -0
  236. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/io/css/lab2css.js +19 -0
  237. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/io/css/lch2css.js +19 -0
  238. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/io/css/oklab2css.js +17 -0
  239. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/io/css/oklch2css.js +17 -0
  240. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/io/css/rgb2css.js +53 -0
  241. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/io/gl/index.js +21 -0
  242. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/io/hcg/hcg2rgb.js +48 -0
  243. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/io/hcg/index.js +25 -0
  244. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/io/hcg/rgb2hcg.js +24 -0
  245. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/io/hex/hex2rgb.js +37 -0
  246. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/io/hex/index.js +23 -0
  247. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/io/hex/rgb2hex.js +31 -0
  248. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/io/hsi/hsi2rgb.js +36 -0
  249. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/io/hsi/index.js +25 -0
  250. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/io/hsi/rgb2hsi.js +28 -0
  251. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/io/hsl/hsl2rgb.js +35 -0
  252. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/io/hsl/index.js +25 -0
  253. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/io/hsl/rgb2hsl.js +29 -0
  254. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/io/hsv/hsv2rgb.js +46 -0
  255. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/io/hsv/index.js +25 -0
  256. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/io/hsv/rgb2hsv.js +27 -0
  257. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/io/input.js +7 -0
  258. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/io/lab/index.js +28 -0
  259. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/io/lab/lab-constants.js +106 -0
  260. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/io/lab/lab2rgb.js +59 -0
  261. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/io/lab/rgb2lab.js +51 -0
  262. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/io/lch/hcl2rgb.js +10 -0
  263. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/io/lch/index.js +35 -0
  264. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/io/lch/lab2lch.js +13 -0
  265. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/io/lch/lch2lab.js +12 -0
  266. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/io/lch/lch2rgb.js +14 -0
  267. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/io/lch/rgb2lch.js +13 -0
  268. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/io/named/index.js +26 -0
  269. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/io/num/index.js +23 -0
  270. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/io/num/num2rgb.js +13 -0
  271. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/io/num/rgb2num.js +9 -0
  272. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/io/oklab/index.js +25 -0
  273. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/io/oklab/oklab2rgb.js +31 -0
  274. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/io/oklab/rgb2oklab.js +30 -0
  275. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/io/oklch/index.js +25 -0
  276. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/io/oklch/oklch2rgb.js +14 -0
  277. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/io/oklch/rgb2oklch.js +13 -0
  278. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/io/rgb/index.js +34 -0
  279. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/io/temp/index.js +16 -0
  280. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/io/temp/rgb2temperature.js +25 -0
  281. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/io/temp/temperature2rgb.js +18 -0
  282. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/ops/alpha.js +12 -0
  283. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/ops/clipped.js +4 -0
  284. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/ops/darken.js +14 -0
  285. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/ops/get.js +12 -0
  286. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/ops/luminance.js +38 -0
  287. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/ops/mix.js +5 -0
  288. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/ops/premultiply.js +11 -0
  289. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/ops/saturate.js +13 -0
  290. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/ops/set.js +42 -0
  291. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/ops/shade.js +9 -0
  292. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/utils/analyze.js +161 -0
  293. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/utils/clip_rgb.js +17 -0
  294. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/utils/contrast.js +12 -0
  295. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/utils/contrastAPCA.js +43 -0
  296. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/utils/delta-e.js +48 -0
  297. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/utils/distance.js +16 -0
  298. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/utils/index.js +24 -0
  299. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/utils/last.js +10 -0
  300. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/utils/limit.js +7 -0
  301. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/utils/multiply-matrices.js +29 -0
  302. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/utils/scales.js +16 -0
  303. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/utils/type.js +20 -0
  304. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/utils/unpack.js +11 -0
  305. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/utils/valid.js +12 -0
  306. package/dist/node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/version.js +4 -0
  307. package/dist/node_modules/.pnpm/fuse.js@7.1.0/node_modules/fuse.js/dist/fuse.js +1317 -0
  308. package/dist/styles/components.css +55 -0
  309. package/dist/tailwind.css +1 -0
  310. package/package.json +32 -20
  311. package/dist/components/virtual-select/dist/index.d.ts +0 -48
@@ -0,0 +1,502 @@
1
+ import { round } from "es-toolkit";
2
+ import { useMemo, useState, useRef, useEffect, useCallback } from "react";
3
+ import tinycolor from "tinycolor2";
4
+ import { createBoundaryWorker } from "../workers/boundary-calculator.worker.bundled.js";
5
+ const evaluateCubicBezier = (p0, p1, p2, p3, t) => {
6
+ const u = 1 - t;
7
+ const tt = t * t;
8
+ const uu = u * u;
9
+ const uuu = uu * u;
10
+ const ttt = tt * t;
11
+ return uuu * p0 + 3 * uu * t * p1 + 3 * u * tt * p2 + ttt * p3;
12
+ };
13
+ const serializeParams = (params) => {
14
+ return `${params.hue}-${params.width}-${params.height}-${params.foregroundAlpha}-${params.level}-${params.category}-${params.selectedElementType}-${params.colorSpace}-${params.backgroundColor.r}-${params.backgroundColor.g}-${params.backgroundColor.b}`;
15
+ };
16
+ const useColorContrastRecommendation = (props) => {
17
+ const {
18
+ width,
19
+ height,
20
+ hue,
21
+ backgroundColor,
22
+ foregroundAlpha = 1,
23
+ level = "AA",
24
+ category = "auto",
25
+ selectedElementType = "graphics",
26
+ options,
27
+ colorSpace = "hsb",
28
+ paintState = { hsl_s: 0, hsv_s: 0, l: 0, v: 0, h: 0 }
29
+ } = props;
30
+ const stableBackgroundColor = useMemo(
31
+ () => backgroundColor,
32
+ // eslint-disable-next-line react-hooks/exhaustive-deps
33
+ [backgroundColor == null ? void 0 : backgroundColor.r, backgroundColor == null ? void 0 : backgroundColor.g, backgroundColor == null ? void 0 : backgroundColor.b]
34
+ );
35
+ const stableHue = useMemo(() => Math.round(hue), [hue]);
36
+ const [workerReady, setWorkerReady] = useState(false);
37
+ const [recommendedPoint, setRecommendedPoint] = useState(null);
38
+ const [boundaryData, setBoundaryData] = useState(null);
39
+ const [isCalculating, setIsCalculating] = useState(false);
40
+ const workerRef = useRef(null);
41
+ const calculationIdRef = useRef(0);
42
+ const throttleTimeoutRef = useRef(null);
43
+ const calculationTimeoutRef = useRef(null);
44
+ const lastExecutionTimeRef = useRef(0);
45
+ const latestParamsRef = useRef(null);
46
+ const pendingParamsRef = useRef(null);
47
+ const executeCalculationRef = useRef(null);
48
+ const { onColorChange } = options ?? {};
49
+ const clearCalculationTimeout = () => {
50
+ if (calculationTimeoutRef.current) {
51
+ clearTimeout(calculationTimeoutRef.current);
52
+ calculationTimeoutRef.current = null;
53
+ }
54
+ };
55
+ useEffect(() => {
56
+ const worker = createBoundaryWorker();
57
+ if (!worker) return;
58
+ workerRef.current = worker;
59
+ const handleWorkerMessage = (event) => {
60
+ const { id, result, error, status } = event.data;
61
+ if (id === 0 && status === "ready") {
62
+ setWorkerReady(true);
63
+ return;
64
+ }
65
+ if (id !== calculationIdRef.current) {
66
+ return;
67
+ }
68
+ clearCalculationTimeout();
69
+ setIsCalculating(false);
70
+ if (error) {
71
+ console.error("[Hook] Error received from boundary worker:", error);
72
+ setBoundaryData(null);
73
+ pendingParamsRef.current = null;
74
+ } else if (result) {
75
+ setBoundaryData(result);
76
+ if (latestParamsRef.current && pendingParamsRef.current) {
77
+ const currentParamsStr = serializeParams(latestParamsRef.current);
78
+ if (currentParamsStr !== pendingParamsRef.current) {
79
+ pendingParamsRef.current = null;
80
+ if (executeCalculationRef.current) {
81
+ executeCalculationRef.current();
82
+ }
83
+ } else {
84
+ pendingParamsRef.current = null;
85
+ }
86
+ }
87
+ } else {
88
+ setBoundaryData(null);
89
+ pendingParamsRef.current = null;
90
+ }
91
+ };
92
+ const handleWorkerError = (error) => {
93
+ console.error("[Hook] Error event in boundary worker:", error);
94
+ clearCalculationTimeout();
95
+ setIsCalculating(false);
96
+ setBoundaryData(null);
97
+ pendingParamsRef.current = null;
98
+ };
99
+ worker.addEventListener("message", handleWorkerMessage);
100
+ worker.addEventListener("error", handleWorkerError);
101
+ return () => {
102
+ worker.removeEventListener("message", handleWorkerMessage);
103
+ worker.removeEventListener("error", handleWorkerError);
104
+ worker.terminate();
105
+ workerRef.current = null;
106
+ setWorkerReady(false);
107
+ if (throttleTimeoutRef.current) {
108
+ clearTimeout(throttleTimeoutRef.current);
109
+ }
110
+ clearCalculationTimeout();
111
+ };
112
+ }, []);
113
+ useEffect(() => {
114
+ const rawColorSpace = colorSpace === "hsl" ? "hsl" : "hsb";
115
+ latestParamsRef.current = {
116
+ width: Math.round(width),
117
+ height: Math.round(height),
118
+ hue: stableHue,
119
+ backgroundColor: stableBackgroundColor,
120
+ foregroundAlpha: Number(foregroundAlpha.toFixed(2)),
121
+ level,
122
+ category,
123
+ selectedElementType,
124
+ colorSpace: rawColorSpace
125
+ };
126
+ }, [
127
+ width,
128
+ height,
129
+ stableHue,
130
+ stableBackgroundColor,
131
+ foregroundAlpha,
132
+ level,
133
+ category,
134
+ selectedElementType,
135
+ colorSpace
136
+ ]);
137
+ useEffect(() => {
138
+ const throttleDelay = 100;
139
+ const calculationTimeoutMs = 2e3;
140
+ if (!workerRef.current || width <= 0 || height <= 0) {
141
+ setBoundaryData(null);
142
+ setIsCalculating(false);
143
+ if (throttleTimeoutRef.current) clearTimeout(throttleTimeoutRef.current);
144
+ clearCalculationTimeout();
145
+ return;
146
+ }
147
+ if (!workerReady) {
148
+ return;
149
+ }
150
+ const executeCalculation = () => {
151
+ if (!workerRef.current || !latestParamsRef.current) return;
152
+ clearCalculationTimeout();
153
+ setIsCalculating(true);
154
+ const currentId = ++calculationIdRef.current;
155
+ const params = latestParamsRef.current;
156
+ pendingParamsRef.current = serializeParams(params);
157
+ const message = { id: currentId, params };
158
+ workerRef.current.postMessage(message);
159
+ lastExecutionTimeRef.current = Date.now();
160
+ if (throttleTimeoutRef.current) {
161
+ clearTimeout(throttleTimeoutRef.current);
162
+ throttleTimeoutRef.current = null;
163
+ }
164
+ calculationTimeoutRef.current = setTimeout(() => {
165
+ if (calculationIdRef.current === currentId) {
166
+ setIsCalculating(false);
167
+ pendingParamsRef.current = null;
168
+ }
169
+ }, calculationTimeoutMs);
170
+ };
171
+ executeCalculationRef.current = executeCalculation;
172
+ const now = Date.now();
173
+ const timeSinceLastExec = now - lastExecutionTimeRef.current;
174
+ if (throttleTimeoutRef.current) {
175
+ clearTimeout(throttleTimeoutRef.current);
176
+ throttleTimeoutRef.current = null;
177
+ }
178
+ if (timeSinceLastExec >= throttleDelay) {
179
+ executeCalculation();
180
+ } else {
181
+ const delay = throttleDelay - timeSinceLastExec;
182
+ throttleTimeoutRef.current = setTimeout(() => {
183
+ executeCalculation();
184
+ }, delay);
185
+ }
186
+ }, [
187
+ width,
188
+ height,
189
+ stableHue,
190
+ stableBackgroundColor,
191
+ foregroundAlpha,
192
+ level,
193
+ category,
194
+ selectedElementType,
195
+ colorSpace,
196
+ workerReady
197
+ ]);
198
+ const findNearestPointOnBoundary = useCallback(
199
+ (boundary, currentX, currentY, safetyOffset, canvasHeight) => {
200
+ var _a, _b;
201
+ if (!boundary) return null;
202
+ let nearestPoint = null;
203
+ if ((_a = boundary.bezierSegments) == null ? void 0 : _a.length) {
204
+ const segments = boundary.bezierSegments;
205
+ const samplesPerSegment = 20;
206
+ for (const segment of segments) {
207
+ const [x0, y0] = segment.start;
208
+ const [x1, y1] = segment.cp1;
209
+ const [x2, y2] = segment.cp2;
210
+ const [x3, y3] = segment.end;
211
+ for (let i = 0; i <= samplesPerSegment; i++) {
212
+ const t = i / samplesPerSegment;
213
+ const bx = evaluateCubicBezier(x0, x1, x2, x3, t);
214
+ const by = evaluateCubicBezier(y0, y1, y2, y3, t);
215
+ const safeX = bx;
216
+ const safeY = by + safetyOffset;
217
+ if (safeY < 0 || safeY > canvasHeight) {
218
+ continue;
219
+ }
220
+ const dx = safeX - currentX;
221
+ const dy = safeY - currentY;
222
+ const distance = Math.sqrt(dx * dx + dy * dy);
223
+ if (!nearestPoint || distance < nearestPoint.distance) {
224
+ nearestPoint = { x: safeX, y: safeY, distance };
225
+ }
226
+ }
227
+ }
228
+ } else if (((_b = boundary.simplifiedPoints) == null ? void 0 : _b.length) >= 2) {
229
+ const points = boundary.simplifiedPoints;
230
+ const samplesPerSegment = 10;
231
+ for (let i = 0; i < points.length - 1; i++) {
232
+ const [x0, y0] = points[i];
233
+ const [x1, y1] = points[i + 1];
234
+ for (let j = 0; j <= samplesPerSegment; j++) {
235
+ const t = j / samplesPerSegment;
236
+ const bx = x0 + (x1 - x0) * t;
237
+ const by = y0 + (y1 - y0) * t;
238
+ const safeX = bx;
239
+ const safeY = by + safetyOffset;
240
+ if (safeY < 0 || safeY > canvasHeight) {
241
+ continue;
242
+ }
243
+ const dx = safeX - currentX;
244
+ const dy = safeY - currentY;
245
+ const distance = Math.sqrt(dx * dx + dy * dy);
246
+ if (!nearestPoint || distance < nearestPoint.distance) {
247
+ nearestPoint = { x: safeX, y: safeY, distance };
248
+ }
249
+ }
250
+ }
251
+ }
252
+ return nearestPoint;
253
+ },
254
+ []
255
+ );
256
+ const getBoundaryXRange = useCallback(
257
+ (boundary) => {
258
+ var _a, _b;
259
+ if (!boundary) return null;
260
+ if ((_a = boundary.bezierSegments) == null ? void 0 : _a.length) {
261
+ let minX = Infinity;
262
+ let maxX = -Infinity;
263
+ for (const segment of boundary.bezierSegments) {
264
+ minX = Math.min(minX, segment.start[0], segment.end[0]);
265
+ maxX = Math.max(maxX, segment.start[0], segment.end[0]);
266
+ }
267
+ return { minX, maxX };
268
+ }
269
+ if (((_b = boundary.simplifiedPoints) == null ? void 0 : _b.length) >= 2) {
270
+ const points = boundary.simplifiedPoints;
271
+ let minX = Infinity;
272
+ let maxX = -Infinity;
273
+ for (const point of points) {
274
+ minX = Math.min(minX, point[0]);
275
+ maxX = Math.max(maxX, point[0]);
276
+ }
277
+ return { minX, maxX };
278
+ }
279
+ return null;
280
+ },
281
+ []
282
+ );
283
+ const findYAtX = useCallback(
284
+ (boundary, x) => {
285
+ var _a, _b;
286
+ if (!boundary) return null;
287
+ if ((_a = boundary.bezierSegments) == null ? void 0 : _a.length) {
288
+ const segments = boundary.bezierSegments;
289
+ let boundaryMinX = Infinity;
290
+ let boundaryMaxX = -Infinity;
291
+ let leftEndY = 0;
292
+ let rightEndY = 0;
293
+ for (const segment of segments) {
294
+ const [x0] = segment.start;
295
+ const [x3] = segment.end;
296
+ if (x0 < boundaryMinX) {
297
+ boundaryMinX = x0;
298
+ leftEndY = segment.start[1];
299
+ }
300
+ if (x3 < boundaryMinX) {
301
+ boundaryMinX = x3;
302
+ leftEndY = segment.end[1];
303
+ }
304
+ if (x0 > boundaryMaxX) {
305
+ boundaryMaxX = x0;
306
+ rightEndY = segment.start[1];
307
+ }
308
+ if (x3 > boundaryMaxX) {
309
+ boundaryMaxX = x3;
310
+ rightEndY = segment.end[1];
311
+ }
312
+ }
313
+ if (x < boundaryMinX) {
314
+ return leftEndY;
315
+ }
316
+ if (x > boundaryMaxX) {
317
+ return rightEndY;
318
+ }
319
+ for (const segment of segments) {
320
+ const [x0] = segment.start;
321
+ const [x3] = segment.end;
322
+ const minX = Math.min(x0, x3);
323
+ const maxX = Math.max(x0, x3);
324
+ if (x >= minX - 1 && x <= maxX + 1) {
325
+ const samples = 50;
326
+ let bestY = null;
327
+ let bestDiff = Infinity;
328
+ for (let i = 0; i <= samples; i++) {
329
+ const t = i / samples;
330
+ const bx = evaluateCubicBezier(segment.start[0], segment.cp1[0], segment.cp2[0], segment.end[0], t);
331
+ const by = evaluateCubicBezier(segment.start[1], segment.cp1[1], segment.cp2[1], segment.end[1], t);
332
+ const diff = Math.abs(bx - x);
333
+ if (diff < bestDiff) {
334
+ bestDiff = diff;
335
+ bestY = by;
336
+ }
337
+ }
338
+ if (bestY !== null) return bestY;
339
+ }
340
+ }
341
+ }
342
+ if (((_b = boundary.simplifiedPoints) == null ? void 0 : _b.length) >= 2) {
343
+ const points = boundary.simplifiedPoints;
344
+ const firstX = points[0][0];
345
+ const lastX = points[points.length - 1][0];
346
+ const minX = Math.min(firstX, lastX);
347
+ const maxX = Math.max(firstX, lastX);
348
+ if (x < minX) {
349
+ return firstX < lastX ? points[0][1] : points[points.length - 1][1];
350
+ }
351
+ if (x > maxX) {
352
+ return firstX < lastX ? points[points.length - 1][1] : points[0][1];
353
+ }
354
+ for (let i = 0; i < points.length - 1; i++) {
355
+ const [x0, y0] = points[i];
356
+ const [x1, y1] = points[i + 1];
357
+ if (x >= x0 && x <= x1 || x >= x1 && x <= x0) {
358
+ if (x1 === x0) return y0;
359
+ const t = (x - x0) / (x1 - x0);
360
+ return y0 + t * (y1 - y0);
361
+ }
362
+ }
363
+ }
364
+ return null;
365
+ },
366
+ []
367
+ );
368
+ const calculateRecommendedPoint = useCallback(() => {
369
+ if (!boundaryData || !boundaryData.lowerBoundary && !boundaryData.upperBoundary || width <= 0 || height <= 0) {
370
+ return null;
371
+ }
372
+ const isHSL = colorSpace === "hsl";
373
+ const currentSat = isHSL ? paintState.hsl_s : paintState.hsv_s;
374
+ const currentVal = isHSL ? paintState.l : paintState.v;
375
+ const currentX = round(currentSat * width, 0);
376
+ const currentY = round((1 - currentVal) * height, 0);
377
+ const { lowerBoundary, upperBoundary } = boundaryData;
378
+ const safetyMargin = 3;
379
+ const edgeThreshold = 5;
380
+ const getAvgY = (boundary) => {
381
+ var _a;
382
+ if (!((_a = boundary == null ? void 0 : boundary.bezierSegments) == null ? void 0 : _a.length)) return null;
383
+ const segments = boundary.bezierSegments;
384
+ return segments.reduce((sum, seg) => sum + seg.start[1] + seg.end[1], 0) / (segments.length * 2);
385
+ };
386
+ const upperAvgY = getAvgY(upperBoundary);
387
+ const lowerAvgY = getAvgY(lowerBoundary);
388
+ const isUpperAtTopEdge = upperAvgY !== null && upperAvgY < edgeThreshold;
389
+ const isLowerAtBottomEdge = lowerAvgY !== null && lowerAvgY > height - edgeThreshold;
390
+ const effectiveLowerBoundary = isLowerAtBottomEdge ? null : lowerBoundary;
391
+ const effectiveUpperBoundary = isUpperAtTopEdge ? null : upperBoundary;
392
+ const lowerXRange = getBoundaryXRange(effectiveLowerBoundary);
393
+ const upperXRange = getBoundaryXRange(effectiveUpperBoundary);
394
+ const isInLowerXRange = lowerXRange && currentX >= lowerXRange.minX && currentX <= lowerXRange.maxX;
395
+ const isInUpperXRange = upperXRange && currentX >= upperXRange.minX && currentX <= upperXRange.maxX;
396
+ const lowerY = findYAtX(effectiveLowerBoundary, currentX);
397
+ const upperY = findYAtX(effectiveUpperBoundary, currentX);
398
+ const isAboveLower = lowerY !== null && isInLowerXRange && currentY < lowerY - safetyMargin;
399
+ const isBelowUpper = upperY !== null && isInUpperXRange && currentY > upperY + safetyMargin;
400
+ if (effectiveLowerBoundary && !effectiveUpperBoundary) {
401
+ if (isAboveLower) {
402
+ return null;
403
+ }
404
+ }
405
+ if (effectiveUpperBoundary && !effectiveLowerBoundary) {
406
+ if (isBelowUpper) {
407
+ return null;
408
+ }
409
+ }
410
+ if (effectiveLowerBoundary && effectiveUpperBoundary) {
411
+ if (isAboveLower || isBelowUpper) {
412
+ return null;
413
+ }
414
+ }
415
+ let recommendedX = null;
416
+ let recommendedY = null;
417
+ if (effectiveLowerBoundary && !effectiveUpperBoundary) {
418
+ const nearest = findNearestPointOnBoundary(effectiveLowerBoundary, currentX, currentY, -safetyMargin, height);
419
+ if (nearest) {
420
+ recommendedX = nearest.x;
421
+ recommendedY = nearest.y;
422
+ }
423
+ } else if (effectiveUpperBoundary && !effectiveLowerBoundary) {
424
+ const nearest = findNearestPointOnBoundary(effectiveUpperBoundary, currentX, currentY, safetyMargin, height);
425
+ if (nearest) {
426
+ recommendedX = nearest.x;
427
+ recommendedY = nearest.y;
428
+ }
429
+ } else if (effectiveLowerBoundary && effectiveUpperBoundary) {
430
+ const nearestOnLower = findNearestPointOnBoundary(effectiveLowerBoundary, currentX, currentY, -safetyMargin, height);
431
+ const nearestOnUpper = findNearestPointOnBoundary(effectiveUpperBoundary, currentX, currentY, safetyMargin, height);
432
+ if (nearestOnLower && nearestOnUpper) {
433
+ if (nearestOnLower.distance < nearestOnUpper.distance) {
434
+ recommendedX = nearestOnLower.x;
435
+ recommendedY = nearestOnLower.y;
436
+ } else {
437
+ recommendedX = nearestOnUpper.x;
438
+ recommendedY = nearestOnUpper.y;
439
+ }
440
+ } else if (nearestOnLower) {
441
+ recommendedX = nearestOnLower.x;
442
+ recommendedY = nearestOnLower.y;
443
+ } else if (nearestOnUpper) {
444
+ recommendedX = nearestOnUpper.x;
445
+ recommendedY = nearestOnUpper.y;
446
+ }
447
+ }
448
+ if (recommendedX === null || recommendedY === null) {
449
+ return null;
450
+ }
451
+ recommendedX = Math.max(0, Math.min(width, recommendedX));
452
+ recommendedY = Math.max(0, Math.min(height, recommendedY));
453
+ const slX = recommendedX / width;
454
+ const slY = 1 - recommendedY / height;
455
+ return {
456
+ x: recommendedX,
457
+ y: recommendedY,
458
+ slX,
459
+ slY
460
+ };
461
+ }, [width, height, boundaryData, findNearestPointOnBoundary, findYAtX, getBoundaryXRange, colorSpace, paintState]);
462
+ useEffect(() => {
463
+ const point = calculateRecommendedPoint();
464
+ setRecommendedPoint(point);
465
+ }, [boundaryData, calculateRecommendedPoint]);
466
+ const updateRecommendedPoint = useCallback(() => {
467
+ const point = calculateRecommendedPoint();
468
+ setRecommendedPoint(point);
469
+ return point;
470
+ }, [calculateRecommendedPoint]);
471
+ const applyRecommendedPoint = useCallback(() => {
472
+ if (!recommendedPoint) {
473
+ return false;
474
+ }
475
+ const isHSL = colorSpace === "hsl";
476
+ const s = recommendedPoint.slX;
477
+ const lv = recommendedPoint.slY;
478
+ let finalColor = null;
479
+ if (isHSL) {
480
+ finalColor = tinycolor({ h: hue, s, l: lv, a: foregroundAlpha });
481
+ } else {
482
+ finalColor = tinycolor({ h: hue, s, v: lv, a: foregroundAlpha });
483
+ }
484
+ if (!finalColor || !finalColor.isValid()) {
485
+ return false;
486
+ }
487
+ const finalRgb = finalColor.toRgb();
488
+ onColorChange == null ? void 0 : onColorChange({ r: finalRgb.r, g: finalRgb.g, b: finalRgb.b }, foregroundAlpha, hue);
489
+ return true;
490
+ }, [recommendedPoint, colorSpace, onColorChange, foregroundAlpha, hue]);
491
+ return {
492
+ recommendedPoint,
493
+ boundaryData,
494
+ isCalculating,
495
+ calculateRecommendedPoint,
496
+ updateRecommendedPoint,
497
+ applyRecommendedPoint
498
+ };
499
+ };
500
+ export {
501
+ useColorContrastRecommendation
502
+ };
@@ -0,0 +1,10 @@
1
+ import { default as chroma } from 'chroma-js';
2
+ interface ColorParseResult {
3
+ alpha: number;
4
+ color: chroma.Color | null;
5
+ hasAlpha: boolean;
6
+ }
7
+ export declare function useColorParser(): {
8
+ parseColor: (value: string) => ColorParseResult;
9
+ };
10
+ export {};
@@ -0,0 +1,146 @@
1
+ import "../../../../node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/index.js";
2
+ import chroma from "../../../../node_modules/.pnpm/chroma-js@3.2.0/node_modules/chroma-js/src/chroma.js";
3
+ function useColorParser() {
4
+ const parseOklab = (value) => {
5
+ const oklabMatch = value.match(
6
+ /oklab\(([\d.]+)%?\s+([-\d.]+)\s+([-\d.]+)(?:\s*\/\s*([\d.]+)%?)?\)/
7
+ );
8
+ if (oklabMatch) {
9
+ const [, l, a, b, alphaValue] = oklabMatch;
10
+ const L = parseFloat(l) / 100;
11
+ const A = parseFloat(a);
12
+ const B = parseFloat(b);
13
+ return {
14
+ color: chroma.oklab(L, A, B),
15
+ hasAlpha: !!alphaValue,
16
+ alpha: alphaValue ? parseFloat(alphaValue) / 100 : 1
17
+ };
18
+ }
19
+ return { color: null, hasAlpha: false, alpha: 1 };
20
+ };
21
+ const parseOklch = (value) => {
22
+ const oklchMatch = value.match(
23
+ /oklch\(([\d.]+)%?\s+([\d.]+)\s+([\d.]+)deg(?:\s*\/\s*([\d.]+)%?)?\)/
24
+ );
25
+ if (oklchMatch) {
26
+ const [, l, c, h, alphaValue] = oklchMatch;
27
+ const L = parseFloat(l) / 100;
28
+ const C = parseFloat(c);
29
+ const H = parseFloat(h);
30
+ return {
31
+ color: chroma.oklch(L, C, H),
32
+ hasAlpha: !!alphaValue,
33
+ alpha: alphaValue ? parseFloat(alphaValue) / 100 : 1
34
+ };
35
+ }
36
+ return { color: null, hasAlpha: false, alpha: 1 };
37
+ };
38
+ const parseLab = (value) => {
39
+ const labMatch = value.match(/lab\(([\d.]+)%?\s+([-\d.]+)\s+([-\d.]+)(?:\s*\/\s*([\d.]+)%?)?\)/);
40
+ if (labMatch) {
41
+ const [, l, a, b, alphaValue] = labMatch;
42
+ return {
43
+ color: chroma.lab(parseFloat(l), parseFloat(a), parseFloat(b)),
44
+ hasAlpha: !!alphaValue,
45
+ alpha: alphaValue ? parseFloat(alphaValue) / 100 : 1
46
+ };
47
+ }
48
+ return { color: null, hasAlpha: false, alpha: 1 };
49
+ };
50
+ const parseLch = (value) => {
51
+ const lchMatch = value.match(
52
+ /lch\(([\d.]+)%?\s+([\d.]+)\s+([\d.]+)deg(?:\s*\/\s*([\d.]+)%?)?\)/
53
+ );
54
+ if (lchMatch) {
55
+ const [, l, c, h, alphaValue] = lchMatch;
56
+ const hRad = parseFloat(h) * Math.PI / 180;
57
+ const a = parseFloat(c) * Math.cos(hRad);
58
+ const b = parseFloat(c) * Math.sin(hRad);
59
+ return {
60
+ color: chroma.lab(parseFloat(l), a, b),
61
+ hasAlpha: !!alphaValue,
62
+ alpha: alphaValue ? parseFloat(alphaValue) / 100 : 1
63
+ };
64
+ }
65
+ return { color: null, hasAlpha: false, alpha: 1 };
66
+ };
67
+ const parseHsl = (value) => {
68
+ const processedHsl = value.replace(/(\d+)deg/g, "$1").replace(/hsla?\((.*?)\)/, (_, p1) => {
69
+ const parts = p1.split(/[\s,]+/).filter(Boolean).map((part) => part.trim());
70
+ if (parts.length === 4) {
71
+ return `hsl(${parts[0]}, ${parts[1]}, ${parts[2]})`;
72
+ }
73
+ return `hsl(${parts.join(", ")})`;
74
+ });
75
+ try {
76
+ const color = chroma(processedHsl);
77
+ const hasAlpha = value.startsWith("hsla") || value.includes("/");
78
+ let alpha = 1;
79
+ if (hasAlpha) {
80
+ const alphaMatch = value.match(/\/\s*([\d.]+)%?\s*\)$/);
81
+ if (alphaMatch) {
82
+ alpha = parseFloat(alphaMatch[1]) / (alphaMatch[1].includes("%") ? 100 : 1);
83
+ }
84
+ }
85
+ return { color, hasAlpha, alpha };
86
+ } catch {
87
+ return { color: null, hasAlpha: false, alpha: 1 };
88
+ }
89
+ };
90
+ const parseDisplayP3 = (value) => {
91
+ const p3Match = value.match(
92
+ /color\(display-p3\s+([\d.]+)\s+([\d.]+)\s+([\d.]+)(?:\s*\/\s*([\d.]+))?\)/
93
+ );
94
+ if (p3Match) {
95
+ const [, r, g, b, alphaValue] = p3Match;
96
+ const rgb = {
97
+ r: Math.round(parseFloat(r) * 255),
98
+ g: Math.round(parseFloat(g) * 255),
99
+ b: Math.round(parseFloat(b) * 255)
100
+ };
101
+ return {
102
+ color: chroma(rgb),
103
+ hasAlpha: !!alphaValue,
104
+ alpha: alphaValue ? parseFloat(alphaValue) : 1
105
+ };
106
+ }
107
+ return { color: null, hasAlpha: false, alpha: 1 };
108
+ };
109
+ const parseColor = (value) => {
110
+ if (value.startsWith("oklab(")) {
111
+ return parseOklab(value);
112
+ }
113
+ if (value.startsWith("oklch(")) {
114
+ return parseOklch(value);
115
+ }
116
+ if (value.startsWith("lab(")) {
117
+ return parseLab(value);
118
+ }
119
+ if (value.startsWith("lch(")) {
120
+ return parseLch(value);
121
+ }
122
+ if (value.startsWith("hsl")) {
123
+ return parseHsl(value);
124
+ }
125
+ if (value.startsWith("color(display-p3")) {
126
+ return parseDisplayP3(value);
127
+ }
128
+ try {
129
+ const color = chroma(value);
130
+ const alpha = color.alpha();
131
+ return {
132
+ color,
133
+ hasAlpha: alpha < 1,
134
+ alpha
135
+ };
136
+ } catch {
137
+ return { color: null, hasAlpha: false, alpha: 1 };
138
+ }
139
+ };
140
+ return {
141
+ parseColor
142
+ };
143
+ }
144
+ export {
145
+ useColorParser
146
+ };
@@ -0,0 +1,45 @@
1
+ import { PickerType, RGB } from '../types/colors';
2
+ import { LibrariesDisplayType, LibrariesType } from '../types/libraries';
3
+ import { GradientPaint } from '../types/paint';
4
+ import { Style } from '../types/style';
5
+ import { Variable } from '../types/variable';
6
+ interface LibrariesState {
7
+ displayType: LibrariesDisplayType;
8
+ pickerType: PickerType;
9
+ selected: {
10
+ item: Variable | Style;
11
+ type: LibrariesType;
12
+ } | null;
13
+ selectedCategory: string;
14
+ }
15
+ /**
16
+ * Color Picker Hook
17
+ *
18
+ * 管理颜色选择器的状态和行为
19
+ *
20
+ * @returns {Object} 颜色选择器状态和处理函数
21
+ */
22
+ export declare const useColorPicker: () => {
23
+ pickerType: string;
24
+ paintsType: "SOLID" | import('../../..').GradientPaintType | "IMAGE" | "PATTERN";
25
+ color: RGB;
26
+ alpha: number;
27
+ gradient: GradientPaint;
28
+ libraries: LibrariesState;
29
+ variableColor: {
30
+ alpha: number;
31
+ color: RGB;
32
+ };
33
+ handleColorChange: (color: RGB) => void;
34
+ handleAlphaChange: (alpha: number) => void;
35
+ handleGradientChange: (gradient: GradientPaint) => void;
36
+ handlePickerTypeChange: (type: string) => void;
37
+ handlePaintsTypeChange: (type: "SOLID" | import('../../..').GradientPaintType | "IMAGE" | "PATTERN") => void;
38
+ handleLibraryChange: (item: {
39
+ item: Variable | Style;
40
+ type: LibrariesType;
41
+ }) => void;
42
+ handleCategoryChange: (category: string) => void;
43
+ handleDisplayTypeChange: (displayType: LibrariesDisplayType) => void;
44
+ };
45
+ export {};