reka-ui 2.8.2 → 2.9.0

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 (592) hide show
  1. package/dist/Autocomplete/AutocompleteInput.cjs +128 -0
  2. package/dist/Autocomplete/AutocompleteInput.cjs.map +1 -0
  3. package/dist/Autocomplete/AutocompleteInput.js +122 -0
  4. package/dist/Autocomplete/AutocompleteInput.js.map +1 -0
  5. package/dist/Autocomplete/AutocompleteRoot.cjs +258 -0
  6. package/dist/Autocomplete/AutocompleteRoot.cjs.map +1 -0
  7. package/dist/Autocomplete/AutocompleteRoot.js +246 -0
  8. package/dist/Autocomplete/AutocompleteRoot.js.map +1 -0
  9. package/dist/Calendar/CalendarCellTrigger.cjs +8 -5
  10. package/dist/Calendar/CalendarCellTrigger.cjs.map +1 -1
  11. package/dist/Calendar/CalendarCellTrigger.js +9 -6
  12. package/dist/Calendar/CalendarCellTrigger.js.map +1 -1
  13. package/dist/Calendar/CalendarNext.cjs +7 -3
  14. package/dist/Calendar/CalendarNext.cjs.map +1 -1
  15. package/dist/Calendar/CalendarNext.js +7 -3
  16. package/dist/Calendar/CalendarNext.js.map +1 -1
  17. package/dist/Calendar/CalendarPrev.cjs +7 -3
  18. package/dist/Calendar/CalendarPrev.cjs.map +1 -1
  19. package/dist/Calendar/CalendarPrev.js +7 -3
  20. package/dist/Calendar/CalendarPrev.js.map +1 -1
  21. package/dist/Checkbox/CheckboxGroupRoot.cjs +1 -1
  22. package/dist/Checkbox/CheckboxGroupRoot.js +1 -1
  23. package/dist/Checkbox/CheckboxRoot.cjs +21 -10
  24. package/dist/Checkbox/CheckboxRoot.cjs.map +1 -1
  25. package/dist/Checkbox/CheckboxRoot.js +21 -10
  26. package/dist/Checkbox/CheckboxRoot.js.map +1 -1
  27. package/dist/ColorArea/ColorAreaArea.cjs +143 -0
  28. package/dist/ColorArea/ColorAreaArea.cjs.map +1 -0
  29. package/dist/ColorArea/ColorAreaArea.js +137 -0
  30. package/dist/ColorArea/ColorAreaArea.js.map +1 -0
  31. package/dist/ColorArea/ColorAreaRoot.cjs +240 -0
  32. package/dist/ColorArea/ColorAreaRoot.cjs.map +1 -0
  33. package/dist/ColorArea/ColorAreaRoot.js +228 -0
  34. package/dist/ColorArea/ColorAreaRoot.js.map +1 -0
  35. package/dist/ColorArea/ColorAreaThumb.cjs +91 -0
  36. package/dist/ColorArea/ColorAreaThumb.cjs.map +1 -0
  37. package/dist/ColorArea/ColorAreaThumb.js +85 -0
  38. package/dist/ColorArea/ColorAreaThumb.js.map +1 -0
  39. package/dist/ColorArea/utils.cjs +32 -0
  40. package/dist/ColorArea/utils.cjs.map +1 -0
  41. package/dist/ColorArea/utils.js +21 -0
  42. package/dist/ColorArea/utils.js.map +1 -0
  43. package/dist/ColorField/ColorFieldInput.cjs +140 -0
  44. package/dist/ColorField/ColorFieldInput.cjs.map +1 -0
  45. package/dist/ColorField/ColorFieldInput.js +134 -0
  46. package/dist/ColorField/ColorFieldInput.js.map +1 -0
  47. package/dist/ColorField/ColorFieldRoot.cjs +281 -0
  48. package/dist/ColorField/ColorFieldRoot.cjs.map +1 -0
  49. package/dist/ColorField/ColorFieldRoot.js +269 -0
  50. package/dist/ColorField/ColorFieldRoot.js.map +1 -0
  51. package/dist/ColorSlider/ColorSliderRoot.cjs +230 -0
  52. package/dist/ColorSlider/ColorSliderRoot.cjs.map +1 -0
  53. package/dist/ColorSlider/ColorSliderRoot.js +218 -0
  54. package/dist/ColorSlider/ColorSliderRoot.js.map +1 -0
  55. package/dist/ColorSlider/ColorSliderThumb.cjs +66 -0
  56. package/dist/ColorSlider/ColorSliderThumb.cjs.map +1 -0
  57. package/dist/ColorSlider/ColorSliderThumb.js +60 -0
  58. package/dist/ColorSlider/ColorSliderThumb.js.map +1 -0
  59. package/dist/ColorSlider/ColorSliderTrack.cjs +55 -0
  60. package/dist/ColorSlider/ColorSliderTrack.cjs.map +1 -0
  61. package/dist/ColorSlider/ColorSliderTrack.js +49 -0
  62. package/dist/ColorSlider/ColorSliderTrack.js.map +1 -0
  63. package/dist/ColorSwatch/ColorSwatch.cjs +106 -0
  64. package/dist/ColorSwatch/ColorSwatch.cjs.map +1 -0
  65. package/dist/ColorSwatch/ColorSwatch.js +100 -0
  66. package/dist/ColorSwatch/ColorSwatch.js.map +1 -0
  67. package/dist/ColorSwatchPicker/ColorSwatchPickerItem.cjs +78 -0
  68. package/dist/ColorSwatchPicker/ColorSwatchPickerItem.cjs.map +1 -0
  69. package/dist/ColorSwatchPicker/ColorSwatchPickerItem.js +66 -0
  70. package/dist/ColorSwatchPicker/ColorSwatchPickerItem.js.map +1 -0
  71. package/dist/ColorSwatchPicker/ColorSwatchPickerItemIndicator.cjs +40 -0
  72. package/dist/ColorSwatchPicker/ColorSwatchPickerItemIndicator.cjs.map +1 -0
  73. package/dist/ColorSwatchPicker/ColorSwatchPickerItemIndicator.js +34 -0
  74. package/dist/ColorSwatchPicker/ColorSwatchPickerItemIndicator.js.map +1 -0
  75. package/dist/ColorSwatchPicker/ColorSwatchPickerItemSwatch.cjs +43 -0
  76. package/dist/ColorSwatchPicker/ColorSwatchPickerItemSwatch.cjs.map +1 -0
  77. package/dist/ColorSwatchPicker/ColorSwatchPickerItemSwatch.js +37 -0
  78. package/dist/ColorSwatchPicker/ColorSwatchPickerItemSwatch.js.map +1 -0
  79. package/dist/ColorSwatchPicker/ColorSwatchPickerRoot.cjs +110 -0
  80. package/dist/ColorSwatchPicker/ColorSwatchPickerRoot.cjs.map +1 -0
  81. package/dist/ColorSwatchPicker/ColorSwatchPickerRoot.js +104 -0
  82. package/dist/ColorSwatchPicker/ColorSwatchPickerRoot.js.map +1 -0
  83. package/dist/Combobox/ComboboxContent.cjs +4 -0
  84. package/dist/Combobox/ComboboxContent.cjs.map +1 -1
  85. package/dist/Combobox/ComboboxContent.js +4 -0
  86. package/dist/Combobox/ComboboxContent.js.map +1 -1
  87. package/dist/Combobox/ComboboxContentImpl.cjs +9 -2
  88. package/dist/Combobox/ComboboxContentImpl.cjs.map +1 -1
  89. package/dist/Combobox/ComboboxContentImpl.js +9 -2
  90. package/dist/Combobox/ComboboxContentImpl.js.map +1 -1
  91. package/dist/Combobox/ComboboxRoot.cjs +7 -1
  92. package/dist/Combobox/ComboboxRoot.js +2 -2
  93. package/dist/DateField/DateFieldRoot.cjs +1 -1
  94. package/dist/DateField/DateFieldRoot.js +1 -1
  95. package/dist/DateRangeField/DateRangeFieldRoot.cjs +1 -1
  96. package/dist/DateRangeField/DateRangeFieldRoot.cjs.map +1 -1
  97. package/dist/DateRangeField/DateRangeFieldRoot.js +1 -1
  98. package/dist/DateRangeField/DateRangeFieldRoot.js.map +1 -1
  99. package/dist/DismissableLayer/utils.cjs.map +1 -1
  100. package/dist/DismissableLayer/utils.js.map +1 -1
  101. package/dist/DropdownMenu/DropdownMenuFilter.cjs +134 -0
  102. package/dist/DropdownMenu/DropdownMenuFilter.cjs.map +1 -0
  103. package/dist/DropdownMenu/DropdownMenuFilter.js +128 -0
  104. package/dist/DropdownMenu/DropdownMenuFilter.js.map +1 -0
  105. package/dist/Listbox/ListboxRoot.cjs +1 -1
  106. package/dist/Listbox/ListboxRoot.js +1 -1
  107. package/dist/Listbox/ListboxVirtualizer.cjs +1 -1
  108. package/dist/Listbox/ListboxVirtualizer.js +1 -1
  109. package/dist/Menu/MenuContentImpl.cjs +44 -4
  110. package/dist/Menu/MenuContentImpl.cjs.map +1 -1
  111. package/dist/Menu/MenuContentImpl.js +44 -4
  112. package/dist/Menu/MenuContentImpl.js.map +1 -1
  113. package/dist/Menu/MenuItemImpl.cjs +8 -3
  114. package/dist/Menu/MenuItemImpl.cjs.map +1 -1
  115. package/dist/Menu/MenuItemImpl.js +9 -4
  116. package/dist/Menu/MenuItemImpl.js.map +1 -1
  117. package/dist/Menu/MenuSubContent.cjs +8 -2
  118. package/dist/Menu/MenuSubContent.cjs.map +1 -1
  119. package/dist/Menu/MenuSubContent.js +9 -3
  120. package/dist/Menu/MenuSubContent.js.map +1 -1
  121. package/dist/Menu/MenuSubTrigger.cjs +7 -0
  122. package/dist/Menu/MenuSubTrigger.cjs.map +1 -1
  123. package/dist/Menu/MenuSubTrigger.js +8 -1
  124. package/dist/Menu/MenuSubTrigger.js.map +1 -1
  125. package/dist/MonthPicker/MonthPickerCell.cjs +59 -0
  126. package/dist/MonthPicker/MonthPickerCell.cjs.map +1 -0
  127. package/dist/MonthPicker/MonthPickerCell.js +53 -0
  128. package/dist/MonthPicker/MonthPickerCell.js.map +1 -0
  129. package/dist/MonthPicker/MonthPickerCellTrigger.cjs +197 -0
  130. package/dist/MonthPicker/MonthPickerCellTrigger.cjs.map +1 -0
  131. package/dist/MonthPicker/MonthPickerCellTrigger.js +191 -0
  132. package/dist/MonthPicker/MonthPickerCellTrigger.js.map +1 -0
  133. package/dist/MonthPicker/MonthPickerGrid.cjs +59 -0
  134. package/dist/MonthPicker/MonthPickerGrid.cjs.map +1 -0
  135. package/dist/MonthPicker/MonthPickerGrid.js +53 -0
  136. package/dist/MonthPicker/MonthPickerGrid.js.map +1 -0
  137. package/dist/MonthPicker/MonthPickerGridBody.cjs +41 -0
  138. package/dist/MonthPicker/MonthPickerGridBody.cjs.map +1 -0
  139. package/dist/MonthPicker/MonthPickerGridBody.js +35 -0
  140. package/dist/MonthPicker/MonthPickerGridBody.js.map +1 -0
  141. package/dist/MonthPicker/MonthPickerGridRow.cjs +41 -0
  142. package/dist/MonthPicker/MonthPickerGridRow.cjs.map +1 -0
  143. package/dist/MonthPicker/MonthPickerGridRow.js +35 -0
  144. package/dist/MonthPicker/MonthPickerGridRow.js.map +1 -0
  145. package/dist/MonthPicker/MonthPickerHeader.cjs +41 -0
  146. package/dist/MonthPicker/MonthPickerHeader.cjs.map +1 -0
  147. package/dist/MonthPicker/MonthPickerHeader.js +35 -0
  148. package/dist/MonthPicker/MonthPickerHeader.js.map +1 -0
  149. package/dist/MonthPicker/MonthPickerHeading.cjs +48 -0
  150. package/dist/MonthPicker/MonthPickerHeading.cjs.map +1 -0
  151. package/dist/MonthPicker/MonthPickerHeading.js +42 -0
  152. package/dist/MonthPicker/MonthPickerHeading.js.map +1 -0
  153. package/dist/MonthPicker/MonthPickerNext.cjs +68 -0
  154. package/dist/MonthPicker/MonthPickerNext.cjs.map +1 -0
  155. package/dist/MonthPicker/MonthPickerNext.js +62 -0
  156. package/dist/MonthPicker/MonthPickerNext.js.map +1 -0
  157. package/dist/MonthPicker/MonthPickerPrev.cjs +68 -0
  158. package/dist/MonthPicker/MonthPickerPrev.cjs.map +1 -0
  159. package/dist/MonthPicker/MonthPickerPrev.js +62 -0
  160. package/dist/MonthPicker/MonthPickerPrev.js.map +1 -0
  161. package/dist/MonthPicker/MonthPickerRoot.cjs +281 -0
  162. package/dist/MonthPicker/MonthPickerRoot.cjs.map +1 -0
  163. package/dist/MonthPicker/MonthPickerRoot.js +269 -0
  164. package/dist/MonthPicker/MonthPickerRoot.js.map +1 -0
  165. package/dist/MonthPicker/useMonthPicker.cjs +148 -0
  166. package/dist/MonthPicker/useMonthPicker.cjs.map +1 -0
  167. package/dist/MonthPicker/useMonthPicker.js +136 -0
  168. package/dist/MonthPicker/useMonthPicker.js.map +1 -0
  169. package/dist/MonthRangePicker/MonthRangePickerCell.cjs +59 -0
  170. package/dist/MonthRangePicker/MonthRangePickerCell.cjs.map +1 -0
  171. package/dist/MonthRangePicker/MonthRangePickerCell.js +53 -0
  172. package/dist/MonthRangePicker/MonthRangePickerCell.js.map +1 -0
  173. package/dist/MonthRangePicker/MonthRangePickerCellTrigger.cjs +258 -0
  174. package/dist/MonthRangePicker/MonthRangePickerCellTrigger.cjs.map +1 -0
  175. package/dist/MonthRangePicker/MonthRangePickerCellTrigger.js +252 -0
  176. package/dist/MonthRangePicker/MonthRangePickerCellTrigger.js.map +1 -0
  177. package/dist/MonthRangePicker/MonthRangePickerGrid.cjs +59 -0
  178. package/dist/MonthRangePicker/MonthRangePickerGrid.cjs.map +1 -0
  179. package/dist/MonthRangePicker/MonthRangePickerGrid.js +53 -0
  180. package/dist/MonthRangePicker/MonthRangePickerGrid.js.map +1 -0
  181. package/dist/MonthRangePicker/MonthRangePickerGridBody.cjs +41 -0
  182. package/dist/MonthRangePicker/MonthRangePickerGridBody.cjs.map +1 -0
  183. package/dist/MonthRangePicker/MonthRangePickerGridBody.js +35 -0
  184. package/dist/MonthRangePicker/MonthRangePickerGridBody.js.map +1 -0
  185. package/dist/MonthRangePicker/MonthRangePickerGridRow.cjs +41 -0
  186. package/dist/MonthRangePicker/MonthRangePickerGridRow.cjs.map +1 -0
  187. package/dist/MonthRangePicker/MonthRangePickerGridRow.js +35 -0
  188. package/dist/MonthRangePicker/MonthRangePickerGridRow.js.map +1 -0
  189. package/dist/MonthRangePicker/MonthRangePickerHeader.cjs +41 -0
  190. package/dist/MonthRangePicker/MonthRangePickerHeader.cjs.map +1 -0
  191. package/dist/MonthRangePicker/MonthRangePickerHeader.js +35 -0
  192. package/dist/MonthRangePicker/MonthRangePickerHeader.js.map +1 -0
  193. package/dist/MonthRangePicker/MonthRangePickerHeading.cjs +48 -0
  194. package/dist/MonthRangePicker/MonthRangePickerHeading.cjs.map +1 -0
  195. package/dist/MonthRangePicker/MonthRangePickerHeading.js +42 -0
  196. package/dist/MonthRangePicker/MonthRangePickerHeading.js.map +1 -0
  197. package/dist/MonthRangePicker/MonthRangePickerNext.cjs +68 -0
  198. package/dist/MonthRangePicker/MonthRangePickerNext.cjs.map +1 -0
  199. package/dist/MonthRangePicker/MonthRangePickerNext.js +62 -0
  200. package/dist/MonthRangePicker/MonthRangePickerNext.js.map +1 -0
  201. package/dist/MonthRangePicker/MonthRangePickerPrev.cjs +68 -0
  202. package/dist/MonthRangePicker/MonthRangePickerPrev.cjs.map +1 -0
  203. package/dist/MonthRangePicker/MonthRangePickerPrev.js +62 -0
  204. package/dist/MonthRangePicker/MonthRangePickerPrev.js.map +1 -0
  205. package/dist/MonthRangePicker/MonthRangePickerRoot.cjs +347 -0
  206. package/dist/MonthRangePicker/MonthRangePickerRoot.cjs.map +1 -0
  207. package/dist/MonthRangePicker/MonthRangePickerRoot.js +335 -0
  208. package/dist/MonthRangePicker/MonthRangePickerRoot.js.map +1 -0
  209. package/dist/MonthRangePicker/useRangeMonthPicker.cjs +128 -0
  210. package/dist/MonthRangePicker/useRangeMonthPicker.cjs.map +1 -0
  211. package/dist/MonthRangePicker/useRangeMonthPicker.js +122 -0
  212. package/dist/MonthRangePicker/useRangeMonthPicker.js.map +1 -0
  213. package/dist/NavigationMenu/NavigationMenuItem.js +3 -3
  214. package/dist/NavigationMenu/NavigationMenuItem.js.map +1 -1
  215. package/dist/NumberField/NumberFieldRoot.cjs +3 -2
  216. package/dist/NumberField/NumberFieldRoot.cjs.map +1 -1
  217. package/dist/NumberField/NumberFieldRoot.js +3 -2
  218. package/dist/NumberField/NumberFieldRoot.js.map +1 -1
  219. package/dist/Progress/ProgressRoot.cjs.map +1 -1
  220. package/dist/Progress/ProgressRoot.js.map +1 -1
  221. package/dist/RadioGroup/RadioGroupRoot.cjs +1 -1
  222. package/dist/RadioGroup/RadioGroupRoot.js +1 -1
  223. package/dist/RangeCalendar/RangeCalendarNext.cjs +9 -5
  224. package/dist/RangeCalendar/RangeCalendarNext.cjs.map +1 -1
  225. package/dist/RangeCalendar/RangeCalendarNext.js +9 -5
  226. package/dist/RangeCalendar/RangeCalendarNext.js.map +1 -1
  227. package/dist/RangeCalendar/RangeCalendarPrev.cjs +9 -5
  228. package/dist/RangeCalendar/RangeCalendarPrev.cjs.map +1 -1
  229. package/dist/RangeCalendar/RangeCalendarPrev.js +9 -5
  230. package/dist/RangeCalendar/RangeCalendarPrev.js.map +1 -1
  231. package/dist/RangeCalendar/RangeCalendarRoot.cjs +1 -1
  232. package/dist/RangeCalendar/RangeCalendarRoot.cjs.map +1 -1
  233. package/dist/RangeCalendar/RangeCalendarRoot.js +1 -1
  234. package/dist/RangeCalendar/RangeCalendarRoot.js.map +1 -1
  235. package/dist/RangeCalendar/useRangeCalendar.cjs +9 -13
  236. package/dist/RangeCalendar/useRangeCalendar.cjs.map +1 -1
  237. package/dist/RangeCalendar/useRangeCalendar.js +9 -13
  238. package/dist/RangeCalendar/useRangeCalendar.js.map +1 -1
  239. package/dist/Splitter/SplitterGroup.cjs +136 -26
  240. package/dist/Splitter/SplitterGroup.cjs.map +1 -1
  241. package/dist/Splitter/SplitterGroup.js +136 -26
  242. package/dist/Splitter/SplitterGroup.js.map +1 -1
  243. package/dist/Splitter/SplitterPanel.cjs +7 -2
  244. package/dist/Splitter/SplitterPanel.cjs.map +1 -1
  245. package/dist/Splitter/SplitterPanel.js +7 -2
  246. package/dist/Splitter/SplitterPanel.js.map +1 -1
  247. package/dist/Switch/SwitchRoot.cjs +23 -9
  248. package/dist/Switch/SwitchRoot.cjs.map +1 -1
  249. package/dist/Switch/SwitchRoot.js +23 -9
  250. package/dist/Switch/SwitchRoot.js.map +1 -1
  251. package/dist/Switch/SwitchThumb.cjs +1 -1
  252. package/dist/Switch/SwitchThumb.cjs.map +1 -1
  253. package/dist/Switch/SwitchThumb.js +1 -1
  254. package/dist/Switch/SwitchThumb.js.map +1 -1
  255. package/dist/TimeField/TimeFieldRoot.cjs +1 -1
  256. package/dist/TimeField/TimeFieldRoot.cjs.map +1 -1
  257. package/dist/TimeField/TimeFieldRoot.js +1 -1
  258. package/dist/TimeField/TimeFieldRoot.js.map +1 -1
  259. package/dist/TimeRangeField/TimeRangeFieldInput.cjs +102 -0
  260. package/dist/TimeRangeField/TimeRangeFieldInput.cjs.map +1 -0
  261. package/dist/TimeRangeField/TimeRangeFieldInput.js +96 -0
  262. package/dist/TimeRangeField/TimeRangeFieldInput.js.map +1 -0
  263. package/dist/TimeRangeField/TimeRangeFieldRoot.cjs +402 -0
  264. package/dist/TimeRangeField/TimeRangeFieldRoot.cjs.map +1 -0
  265. package/dist/TimeRangeField/TimeRangeFieldRoot.js +390 -0
  266. package/dist/TimeRangeField/TimeRangeFieldRoot.js.map +1 -0
  267. package/dist/Toast/ToastAnnounce.cjs +4 -1
  268. package/dist/Toast/ToastAnnounce.cjs.map +1 -1
  269. package/dist/Toast/ToastAnnounce.js +4 -1
  270. package/dist/Toast/ToastAnnounce.js.map +1 -1
  271. package/dist/ToggleGroup/ToggleGroupRoot.cjs +1 -1
  272. package/dist/ToggleGroup/ToggleGroupRoot.js +1 -1
  273. package/dist/Tooltip/TooltipContent.cjs +1 -2
  274. package/dist/Tooltip/TooltipContent.cjs.map +1 -1
  275. package/dist/Tooltip/TooltipContent.js +1 -2
  276. package/dist/Tooltip/TooltipContent.js.map +1 -1
  277. package/dist/Tooltip/TooltipContentImpl.cjs +25 -18
  278. package/dist/Tooltip/TooltipContentImpl.cjs.map +1 -1
  279. package/dist/Tooltip/TooltipContentImpl.js +25 -18
  280. package/dist/Tooltip/TooltipContentImpl.js.map +1 -1
  281. package/dist/Tooltip/TooltipProvider.cjs +7 -2
  282. package/dist/Tooltip/TooltipProvider.cjs.map +1 -1
  283. package/dist/Tooltip/TooltipProvider.js +7 -2
  284. package/dist/Tooltip/TooltipProvider.js.map +1 -1
  285. package/dist/YearPicker/YearPickerCell.cjs +59 -0
  286. package/dist/YearPicker/YearPickerCell.cjs.map +1 -0
  287. package/dist/YearPicker/YearPickerCell.js +53 -0
  288. package/dist/YearPicker/YearPickerCell.js.map +1 -0
  289. package/dist/YearPicker/YearPickerCellTrigger.cjs +197 -0
  290. package/dist/YearPicker/YearPickerCellTrigger.cjs.map +1 -0
  291. package/dist/YearPicker/YearPickerCellTrigger.js +191 -0
  292. package/dist/YearPicker/YearPickerCellTrigger.js.map +1 -0
  293. package/dist/YearPicker/YearPickerGrid.cjs +59 -0
  294. package/dist/YearPicker/YearPickerGrid.cjs.map +1 -0
  295. package/dist/YearPicker/YearPickerGrid.js +53 -0
  296. package/dist/YearPicker/YearPickerGrid.js.map +1 -0
  297. package/dist/YearPicker/YearPickerGridBody.cjs +41 -0
  298. package/dist/YearPicker/YearPickerGridBody.cjs.map +1 -0
  299. package/dist/YearPicker/YearPickerGridBody.js +35 -0
  300. package/dist/YearPicker/YearPickerGridBody.js.map +1 -0
  301. package/dist/YearPicker/YearPickerGridRow.cjs +41 -0
  302. package/dist/YearPicker/YearPickerGridRow.cjs.map +1 -0
  303. package/dist/YearPicker/YearPickerGridRow.js +35 -0
  304. package/dist/YearPicker/YearPickerGridRow.js.map +1 -0
  305. package/dist/YearPicker/YearPickerHeader.cjs +41 -0
  306. package/dist/YearPicker/YearPickerHeader.cjs.map +1 -0
  307. package/dist/YearPicker/YearPickerHeader.js +35 -0
  308. package/dist/YearPicker/YearPickerHeader.js.map +1 -0
  309. package/dist/YearPicker/YearPickerHeading.cjs +48 -0
  310. package/dist/YearPicker/YearPickerHeading.cjs.map +1 -0
  311. package/dist/YearPicker/YearPickerHeading.js +42 -0
  312. package/dist/YearPicker/YearPickerHeading.js.map +1 -0
  313. package/dist/YearPicker/YearPickerNext.cjs +68 -0
  314. package/dist/YearPicker/YearPickerNext.cjs.map +1 -0
  315. package/dist/YearPicker/YearPickerNext.js +62 -0
  316. package/dist/YearPicker/YearPickerNext.js.map +1 -0
  317. package/dist/YearPicker/YearPickerPrev.cjs +68 -0
  318. package/dist/YearPicker/YearPickerPrev.cjs.map +1 -0
  319. package/dist/YearPicker/YearPickerPrev.js +62 -0
  320. package/dist/YearPicker/YearPickerPrev.js.map +1 -0
  321. package/dist/YearPicker/YearPickerRoot.cjs +287 -0
  322. package/dist/YearPicker/YearPickerRoot.cjs.map +1 -0
  323. package/dist/YearPicker/YearPickerRoot.js +275 -0
  324. package/dist/YearPicker/YearPickerRoot.js.map +1 -0
  325. package/dist/YearPicker/useYearPicker.cjs +180 -0
  326. package/dist/YearPicker/useYearPicker.cjs.map +1 -0
  327. package/dist/YearPicker/useYearPicker.js +168 -0
  328. package/dist/YearPicker/useYearPicker.js.map +1 -0
  329. package/dist/YearRangePicker/YearRangePickerCell.cjs +59 -0
  330. package/dist/YearRangePicker/YearRangePickerCell.cjs.map +1 -0
  331. package/dist/YearRangePicker/YearRangePickerCell.js +53 -0
  332. package/dist/YearRangePicker/YearRangePickerCell.js.map +1 -0
  333. package/dist/YearRangePicker/YearRangePickerCellTrigger.cjs +256 -0
  334. package/dist/YearRangePicker/YearRangePickerCellTrigger.cjs.map +1 -0
  335. package/dist/YearRangePicker/YearRangePickerCellTrigger.js +250 -0
  336. package/dist/YearRangePicker/YearRangePickerCellTrigger.js.map +1 -0
  337. package/dist/YearRangePicker/YearRangePickerGrid.cjs +59 -0
  338. package/dist/YearRangePicker/YearRangePickerGrid.cjs.map +1 -0
  339. package/dist/YearRangePicker/YearRangePickerGrid.js +53 -0
  340. package/dist/YearRangePicker/YearRangePickerGrid.js.map +1 -0
  341. package/dist/YearRangePicker/YearRangePickerGridBody.cjs +41 -0
  342. package/dist/YearRangePicker/YearRangePickerGridBody.cjs.map +1 -0
  343. package/dist/YearRangePicker/YearRangePickerGridBody.js +35 -0
  344. package/dist/YearRangePicker/YearRangePickerGridBody.js.map +1 -0
  345. package/dist/YearRangePicker/YearRangePickerGridRow.cjs +41 -0
  346. package/dist/YearRangePicker/YearRangePickerGridRow.cjs.map +1 -0
  347. package/dist/YearRangePicker/YearRangePickerGridRow.js +35 -0
  348. package/dist/YearRangePicker/YearRangePickerGridRow.js.map +1 -0
  349. package/dist/YearRangePicker/YearRangePickerHeader.cjs +41 -0
  350. package/dist/YearRangePicker/YearRangePickerHeader.cjs.map +1 -0
  351. package/dist/YearRangePicker/YearRangePickerHeader.js +35 -0
  352. package/dist/YearRangePicker/YearRangePickerHeader.js.map +1 -0
  353. package/dist/YearRangePicker/YearRangePickerHeading.cjs +48 -0
  354. package/dist/YearRangePicker/YearRangePickerHeading.cjs.map +1 -0
  355. package/dist/YearRangePicker/YearRangePickerHeading.js +42 -0
  356. package/dist/YearRangePicker/YearRangePickerHeading.js.map +1 -0
  357. package/dist/YearRangePicker/YearRangePickerNext.cjs +68 -0
  358. package/dist/YearRangePicker/YearRangePickerNext.cjs.map +1 -0
  359. package/dist/YearRangePicker/YearRangePickerNext.js +62 -0
  360. package/dist/YearRangePicker/YearRangePickerNext.js.map +1 -0
  361. package/dist/YearRangePicker/YearRangePickerPrev.cjs +68 -0
  362. package/dist/YearRangePicker/YearRangePickerPrev.cjs.map +1 -0
  363. package/dist/YearRangePicker/YearRangePickerPrev.js +62 -0
  364. package/dist/YearRangePicker/YearRangePickerPrev.js.map +1 -0
  365. package/dist/YearRangePicker/YearRangePickerRoot.cjs +350 -0
  366. package/dist/YearRangePicker/YearRangePickerRoot.cjs.map +1 -0
  367. package/dist/YearRangePicker/YearRangePickerRoot.js +338 -0
  368. package/dist/YearRangePicker/YearRangePickerRoot.js.map +1 -0
  369. package/dist/YearRangePicker/useRangeYearPicker.cjs +128 -0
  370. package/dist/YearRangePicker/useRangeYearPicker.cjs.map +1 -0
  371. package/dist/YearRangePicker/useRangeYearPicker.js +122 -0
  372. package/dist/YearRangePicker/useRangeYearPicker.js.map +1 -0
  373. package/dist/color/channel.cjs +378 -0
  374. package/dist/color/channel.cjs.map +1 -0
  375. package/dist/color/channel.js +349 -0
  376. package/dist/color/channel.js.map +1 -0
  377. package/dist/color/convert.cjs +285 -0
  378. package/dist/color/convert.cjs.map +1 -0
  379. package/dist/color/convert.js +237 -0
  380. package/dist/color/convert.js.map +1 -0
  381. package/dist/color/gradient.cjs +377 -0
  382. package/dist/color/gradient.cjs.map +1 -0
  383. package/dist/color/gradient.js +354 -0
  384. package/dist/color/gradient.js.map +1 -0
  385. package/dist/color/parse.cjs +113 -0
  386. package/dist/color/parse.cjs.map +1 -0
  387. package/dist/color/parse.js +95 -0
  388. package/dist/color/parse.js.map +1 -0
  389. package/dist/color/utils.cjs +112 -0
  390. package/dist/color/utils.cjs.map +1 -0
  391. package/dist/color/utils.js +100 -0
  392. package/dist/color/utils.js.map +1 -0
  393. package/dist/composables/useWindowSplitterPanelGroupBehavior.cjs +11 -7
  394. package/dist/composables/useWindowSplitterPanelGroupBehavior.cjs.map +1 -1
  395. package/dist/composables/useWindowSplitterPanelGroupBehavior.js +11 -7
  396. package/dist/composables/useWindowSplitterPanelGroupBehavior.js.map +1 -1
  397. package/dist/constant/components.cjs +87 -1
  398. package/dist/constant/components.cjs.map +1 -1
  399. package/dist/constant/components.js +87 -1
  400. package/dist/constant/components.js.map +1 -1
  401. package/dist/constant.d.cts +12 -1
  402. package/dist/constant.d.cts.map +1 -1
  403. package/dist/constant.d.ts +12 -1
  404. package/dist/constant.d.ts.map +1 -1
  405. package/dist/date/calendar.cjs +41 -0
  406. package/dist/date/calendar.cjs.map +1 -1
  407. package/dist/date/calendar.js +30 -1
  408. package/dist/date/calendar.js.map +1 -1
  409. package/dist/date/comparators.cjs +129 -0
  410. package/dist/date/comparators.cjs.map +1 -1
  411. package/dist/date/comparators.js +76 -1
  412. package/dist/date/comparators.js.map +1 -1
  413. package/dist/date/useDateField.cjs +0 -1
  414. package/dist/date/useDateField.cjs.map +1 -1
  415. package/dist/date/useDateField.js +0 -1
  416. package/dist/date/useDateField.js.map +1 -1
  417. package/dist/date.cjs +11 -0
  418. package/dist/date.d.cts +2 -2
  419. package/dist/date.d.ts +2 -2
  420. package/dist/date.js +3 -3
  421. package/dist/index.cjs +216 -46
  422. package/dist/index.d.cts +3 -8834
  423. package/dist/index.d.ts +3 -8834
  424. package/dist/index.js +116 -47
  425. package/dist/index2.d.cts +58 -2
  426. package/dist/index2.d.cts.map +1 -1
  427. package/dist/index2.d.ts +58 -2
  428. package/dist/index2.d.ts.map +1 -1
  429. package/dist/index3.d.cts +11061 -0
  430. package/dist/index3.d.cts.map +1 -0
  431. package/dist/index3.d.ts +11061 -0
  432. package/dist/index3.d.ts.map +1 -0
  433. package/dist/internal.cjs +81 -0
  434. package/dist/internal.d.cts +22 -0
  435. package/dist/internal.d.cts.map +1 -0
  436. package/dist/internal.d.ts +22 -0
  437. package/dist/internal.d.ts.map +1 -0
  438. package/dist/internal.js +64 -0
  439. package/dist/internal2.cjs +0 -0
  440. package/dist/internal2.js +0 -0
  441. package/dist/namespaced/index.cjs +33 -1
  442. package/dist/namespaced/index.d.cts +32 -4
  443. package/dist/namespaced/index.d.mts +32 -4
  444. package/dist/namespaced/index.mjs +32 -4
  445. package/dist/shared/useArrowNavigation.cjs +4 -2
  446. package/dist/shared/useArrowNavigation.cjs.map +1 -1
  447. package/dist/shared/useArrowNavigation.js +4 -2
  448. package/dist/shared/useArrowNavigation.js.map +1 -1
  449. package/dist/shared/useForwardExpose.cjs +6 -2
  450. package/dist/shared/useForwardExpose.cjs.map +1 -1
  451. package/dist/shared/useForwardExpose.js +7 -3
  452. package/dist/shared/useForwardExpose.js.map +1 -1
  453. package/dist/shared/useId.cjs +7 -4
  454. package/dist/shared/useId.cjs.map +1 -1
  455. package/dist/shared/useId.js +7 -4
  456. package/dist/shared/useId.js.map +1 -1
  457. package/dist/utils/storage.cjs +7 -1
  458. package/dist/utils/storage.cjs.map +1 -1
  459. package/dist/utils/storage.js +7 -1
  460. package/dist/utils/storage.js.map +1 -1
  461. package/dist/utils/units.cjs +101 -0
  462. package/dist/utils/units.cjs.map +1 -0
  463. package/dist/utils/units.js +83 -0
  464. package/dist/utils/units.js.map +1 -0
  465. package/package.json +6 -2
  466. package/src/Autocomplete/AutocompleteInput.vue +112 -0
  467. package/src/Autocomplete/AutocompleteRoot.vue +272 -0
  468. package/src/Autocomplete/index.ts +72 -0
  469. package/src/Calendar/CalendarCellTrigger.vue +2 -1
  470. package/src/Calendar/CalendarNext.vue +8 -2
  471. package/src/Calendar/CalendarPrev.vue +8 -2
  472. package/src/Calendar/CalendarRoot.vue +1 -1
  473. package/src/Checkbox/CheckboxRoot.vue +32 -13
  474. package/src/ColorArea/ColorAreaArea.vue +145 -0
  475. package/src/ColorArea/ColorAreaRoot.vue +255 -0
  476. package/src/ColorArea/ColorAreaThumb.vue +75 -0
  477. package/src/ColorArea/index.ts +14 -0
  478. package/src/ColorArea/utils.ts +24 -0
  479. package/src/ColorField/ColorFieldInput.vue +133 -0
  480. package/src/ColorField/ColorFieldRoot.vue +326 -0
  481. package/src/ColorField/index.ts +10 -0
  482. package/src/ColorSlider/ColorSliderRoot.vue +224 -0
  483. package/src/ColorSlider/ColorSliderThumb.vue +54 -0
  484. package/src/ColorSlider/ColorSliderTrack.vue +36 -0
  485. package/src/ColorSlider/index.ts +14 -0
  486. package/src/ColorSlider/utils.ts +39 -0
  487. package/src/ColorSwatch/ColorSwatch.vue +97 -0
  488. package/src/ColorSwatch/index.ts +4 -0
  489. package/src/ColorSwatchPicker/ColorSwatchPickerItem.vue +60 -0
  490. package/src/ColorSwatchPicker/ColorSwatchPickerItemIndicator.vue +17 -0
  491. package/src/ColorSwatchPicker/ColorSwatchPickerItemSwatch.vue +21 -0
  492. package/src/ColorSwatchPicker/ColorSwatchPickerRoot.vue +50 -0
  493. package/src/ColorSwatchPicker/index.ts +17 -0
  494. package/src/Combobox/ComboboxContentImpl.vue +13 -1
  495. package/src/DateField/DateFieldRoot.vue +1 -1
  496. package/src/DateRangeField/DateRangeFieldRoot.vue +11 -4
  497. package/src/DismissableLayer/utils.ts +1 -2
  498. package/src/DropdownMenu/DropdownMenuFilter.vue +119 -0
  499. package/src/DropdownMenu/index.ts +5 -0
  500. package/src/Menu/MenuContentImpl.vue +68 -2
  501. package/src/Menu/MenuItemImpl.vue +11 -6
  502. package/src/Menu/MenuSubContent.vue +14 -3
  503. package/src/Menu/MenuSubTrigger.vue +13 -1
  504. package/src/MonthPicker/MonthPickerCell.vue +30 -0
  505. package/src/MonthPicker/MonthPickerCellTrigger.vue +214 -0
  506. package/src/MonthPicker/MonthPickerGrid.vue +32 -0
  507. package/src/MonthPicker/MonthPickerGridBody.vue +17 -0
  508. package/src/MonthPicker/MonthPickerGridRow.vue +20 -0
  509. package/src/MonthPicker/MonthPickerHeader.vue +17 -0
  510. package/src/MonthPicker/MonthPickerHeading.vue +35 -0
  511. package/src/MonthPicker/MonthPickerNext.vue +52 -0
  512. package/src/MonthPicker/MonthPickerPrev.vue +52 -0
  513. package/src/MonthPicker/MonthPickerRoot.vue +311 -0
  514. package/src/MonthPicker/index.ts +42 -0
  515. package/src/MonthPicker/useMonthPicker.ts +193 -0
  516. package/src/MonthRangePicker/MonthRangePickerCell.vue +30 -0
  517. package/src/MonthRangePicker/MonthRangePickerCellTrigger.vue +309 -0
  518. package/src/MonthRangePicker/MonthRangePickerGrid.vue +32 -0
  519. package/src/MonthRangePicker/MonthRangePickerGridBody.vue +17 -0
  520. package/src/MonthRangePicker/MonthRangePickerGridRow.vue +20 -0
  521. package/src/MonthRangePicker/MonthRangePickerHeader.vue +17 -0
  522. package/src/MonthRangePicker/MonthRangePickerHeading.vue +35 -0
  523. package/src/MonthRangePicker/MonthRangePickerNext.vue +52 -0
  524. package/src/MonthRangePicker/MonthRangePickerPrev.vue +52 -0
  525. package/src/MonthRangePicker/MonthRangePickerRoot.vue +391 -0
  526. package/src/MonthRangePicker/index.ts +42 -0
  527. package/src/MonthRangePicker/useRangeMonthPicker.ts +165 -0
  528. package/src/NumberField/NumberFieldRoot.vue +2 -1
  529. package/src/Progress/ProgressRoot.vue +3 -1
  530. package/src/RangeCalendar/RangeCalendarNext.vue +10 -4
  531. package/src/RangeCalendar/RangeCalendarPrev.vue +10 -4
  532. package/src/RangeCalendar/RangeCalendarRoot.vue +2 -2
  533. package/src/RangeCalendar/useRangeCalendar.ts +5 -8
  534. package/src/Splitter/SplitterGroup.vue +218 -49
  535. package/src/Splitter/SplitterPanel.vue +11 -6
  536. package/src/Splitter/utils/composables/useWindowSplitterPanelGroupBehavior.ts +16 -6
  537. package/src/Splitter/utils/storage.ts +14 -0
  538. package/src/Splitter/utils/units.ts +161 -0
  539. package/src/Splitter/utils/validation.ts +3 -2
  540. package/src/Switch/SwitchRoot.vue +36 -19
  541. package/src/Switch/SwitchThumb.vue +1 -1
  542. package/src/TimeField/TimeFieldRoot.vue +0 -3
  543. package/src/TimeRangeField/TimeRangeFieldInput.vue +74 -0
  544. package/src/TimeRangeField/TimeRangeFieldRoot.vue +473 -0
  545. package/src/TimeRangeField/index.ts +2 -0
  546. package/src/Toast/ToastAnnounce.vue +4 -1
  547. package/src/Tooltip/TooltipContent.vue +1 -3
  548. package/src/Tooltip/TooltipContentImpl.vue +18 -10
  549. package/src/Tooltip/TooltipProvider.vue +8 -1
  550. package/src/YearPicker/YearPickerCell.vue +30 -0
  551. package/src/YearPicker/YearPickerCellTrigger.vue +218 -0
  552. package/src/YearPicker/YearPickerGrid.vue +32 -0
  553. package/src/YearPicker/YearPickerGridBody.vue +17 -0
  554. package/src/YearPicker/YearPickerGridRow.vue +20 -0
  555. package/src/YearPicker/YearPickerHeader.vue +17 -0
  556. package/src/YearPicker/YearPickerHeading.vue +35 -0
  557. package/src/YearPicker/YearPickerNext.vue +52 -0
  558. package/src/YearPicker/YearPickerPrev.vue +52 -0
  559. package/src/YearPicker/YearPickerRoot.vue +314 -0
  560. package/src/YearPicker/index.ts +42 -0
  561. package/src/YearPicker/useYearPicker.ts +202 -0
  562. package/src/YearRangePicker/YearRangePickerCell.vue +30 -0
  563. package/src/YearRangePicker/YearRangePickerCellTrigger.vue +311 -0
  564. package/src/YearRangePicker/YearRangePickerGrid.vue +32 -0
  565. package/src/YearRangePicker/YearRangePickerGridBody.vue +17 -0
  566. package/src/YearRangePicker/YearRangePickerGridRow.vue +20 -0
  567. package/src/YearRangePicker/YearRangePickerHeader.vue +17 -0
  568. package/src/YearRangePicker/YearRangePickerHeading.vue +35 -0
  569. package/src/YearRangePicker/YearRangePickerNext.vue +52 -0
  570. package/src/YearRangePicker/YearRangePickerPrev.vue +52 -0
  571. package/src/YearRangePicker/YearRangePickerRoot.vue +391 -0
  572. package/src/YearRangePicker/index.ts +42 -0
  573. package/src/YearRangePicker/useRangeYearPicker.ts +165 -0
  574. package/src/date/calendar.ts +29 -0
  575. package/src/date/comparators.ts +97 -0
  576. package/src/index.ts +41 -0
  577. package/src/internal.ts +7 -0
  578. package/src/shared/color/channel.ts +424 -0
  579. package/src/shared/color/convert.ts +293 -0
  580. package/src/shared/color/gradient.ts +347 -0
  581. package/src/shared/color/index.ts +35 -0
  582. package/src/shared/color/parse.ts +140 -0
  583. package/src/shared/color/types.ts +40 -0
  584. package/src/shared/color/utils.ts +143 -0
  585. package/src/shared/date/types.ts +6 -0
  586. package/src/shared/date/useDateField.ts +37 -39
  587. package/src/shared/macro.ts +11 -0
  588. package/src/shared/useArrowNavigation.ts +8 -2
  589. package/src/shared/useForwardExpose.ts +20 -5
  590. package/src/shared/useId.ts +6 -7
  591. package/dist/index.d.cts.map +0 -1
  592. package/dist/index.d.ts.map +0 -1
@@ -0,0 +1,326 @@
1
+ <script lang="ts">
2
+ import type { Ref } from 'vue'
3
+ import type { PrimitiveProps } from '@/Primitive'
4
+ import type { Color, ColorChannel, ColorSpace } from '@/shared/color'
5
+ import type { FormFieldProps } from '@/shared/types'
6
+ import { createContext, useFormControl, useForwardExpose, useLocale } from '@/shared'
7
+
8
+ export interface ColorFieldRootProps extends PrimitiveProps, FormFieldProps {
9
+ /** The color value (controlled). Can be a hex string or Color object. */
10
+ modelValue?: string | Color
11
+ /** The default color value (uncontrolled). */
12
+ defaultValue?: string | Color
13
+ /** The color space to operate in when displaying a channel. */
14
+ colorSpace?: ColorSpace
15
+ /** The color channel to display. If not provided, displays hex value. */
16
+ channel?: ColorChannel
17
+ /** Placeholder text when the field is empty. */
18
+ placeholder?: string
19
+ /** When `true`, prevents the user from interacting with the field. */
20
+ disabled?: boolean
21
+ /** When `true`, the field is read-only. */
22
+ readonly?: boolean
23
+ /** When `true`, prevents the value from changing on wheel scroll. */
24
+ disableWheelChange?: boolean
25
+ /** The locale to use for number formatting. */
26
+ locale?: string
27
+ /** Custom step value for increment/decrement. Defaults to channel step or 1 for hex. */
28
+ step?: number
29
+ }
30
+
31
+ export type ColorFieldRootEmits = {
32
+ 'update:modelValue': [value: string]
33
+ 'update:color': [value: Color]
34
+ }
35
+
36
+ export interface ColorFieldRootContext {
37
+ color: Ref<Color>
38
+ inputValue: Ref<string>
39
+ channel: Ref<ColorChannel | undefined>
40
+ colorSpace: Ref<ColorSpace>
41
+ disabled: Ref<boolean>
42
+ readonly: Ref<boolean>
43
+ disableWheelChange: Ref<boolean>
44
+ placeholder: Ref<string | undefined>
45
+ updateValue: (value: string) => void
46
+ commit: () => void
47
+ increment: () => void
48
+ decrement: () => void
49
+ incrementToMax: () => void
50
+ decrementToMin: () => void
51
+ incrementPage: () => void
52
+ decrementPage: () => void
53
+ handleWheel: (event: WheelEvent) => void
54
+ }
55
+
56
+ export const [injectColorFieldRootContext, provideColorFieldRootContext]
57
+ = createContext<ColorFieldRootContext>('ColorFieldRoot')
58
+ </script>
59
+
60
+ <script setup lang="ts">
61
+ import { useVModel } from '@vueuse/core'
62
+ import { computed, ref, toRefs, watch } from 'vue'
63
+ import { Primitive } from '@/Primitive'
64
+ import {
65
+ colorToString,
66
+ convertToRgb,
67
+ getChannelRange,
68
+ getChannelValue,
69
+ isValidColor,
70
+ normalizeColor,
71
+ parseColor,
72
+ setChannelValue,
73
+ } from '@/shared/color'
74
+ import { VisuallyHiddenInput } from '@/VisuallyHidden'
75
+
76
+ defineOptions({
77
+ inheritAttrs: false,
78
+ })
79
+
80
+ const props = withDefaults(defineProps<ColorFieldRootProps>(), {
81
+ colorSpace: 'hsl',
82
+ disabled: false,
83
+ readonly: false,
84
+ disableWheelChange: false,
85
+ defaultValue: '#000000',
86
+ as: 'div',
87
+ })
88
+
89
+ const emits = defineEmits<ColorFieldRootEmits>()
90
+
91
+ const { colorSpace, channel, disabled, readonly, disableWheelChange, placeholder, locale: propLocale, step: stepProp } = toRefs(props)
92
+ const { forwardRef, currentElement } = useForwardExpose()
93
+ const isFormControl = useFormControl(currentElement)
94
+ const locale = useLocale(propLocale)
95
+
96
+ // Normalize the model value
97
+ const modelValue = useVModel(props, 'modelValue', emits, {
98
+ defaultValue: props.defaultValue,
99
+ passive: (props.modelValue === undefined) as false,
100
+ })
101
+
102
+ const color = computed({
103
+ get: () => normalizeColor(modelValue.value ?? '#000000'),
104
+ set: (newColor: Color) => {
105
+ const hexString = colorToString(newColor, 'hex')
106
+ modelValue.value = hexString
107
+ emits('update:color', newColor)
108
+ },
109
+ })
110
+
111
+ // Input value for the text field
112
+ const inputValue = ref('')
113
+ const isEditing = ref(false)
114
+
115
+ // Update input value when color changes (unless user is editing)
116
+ watch(() => color.value, (newColor) => {
117
+ if (!isEditing.value) {
118
+ inputValue.value = formatValue(newColor)
119
+ }
120
+ }, { immediate: true })
121
+
122
+ function formatValue(c: Color): string {
123
+ if (channel.value) {
124
+ const value = getChannelValue(c, channel.value)
125
+ if (channel.value === 'alpha') {
126
+ return String(Math.round(value))
127
+ }
128
+ return String(Math.round(value))
129
+ }
130
+ // Hex mode
131
+ return colorToString(c, 'hex')
132
+ }
133
+
134
+ // The effective step size
135
+ const MIN_HEX_INT = 0x000000
136
+ const MAX_HEX_INT = 0xFFFFFF
137
+ const PAGE_STEP_MULTIPLIER = 10
138
+
139
+ function getStep(): number {
140
+ if (stepProp.value != null)
141
+ return stepProp.value
142
+ if (channel.value)
143
+ return getChannelRange(channel.value).step
144
+ // Hex mode: step by 1 in the integer space (like react-spectrum)
145
+ return 1
146
+ }
147
+
148
+ function updateValue(value: string) {
149
+ inputValue.value = value
150
+ }
151
+
152
+ function commit() {
153
+ isEditing.value = false
154
+
155
+ if (channel.value) {
156
+ // Channel mode - parse as number
157
+ const numValue = parseFloat(inputValue.value)
158
+ if (!isNaN(numValue)) {
159
+ const range = getChannelRange(channel.value)
160
+ const clamped = Math.max(range.min, Math.min(range.max, numValue))
161
+ color.value = setChannelValue(color.value, channel.value, clamped)
162
+ }
163
+ // Reset to formatted value
164
+ inputValue.value = formatValue(color.value)
165
+ }
166
+ else {
167
+ // Hex mode - parse as color
168
+ const trimmed = inputValue.value.trim()
169
+ if (isValidColor(trimmed)) {
170
+ color.value = parseColor(trimmed)
171
+ }
172
+ // Reset to formatted value
173
+ inputValue.value = formatValue(color.value)
174
+ }
175
+ }
176
+
177
+ function addHexValue(delta: number) {
178
+ const intDelta = Math.trunc(delta)
179
+ const hexInt = color.value.space === 'rgb'
180
+ ? ((Math.round((color.value as any).r) << 16) | (Math.round((color.value as any).g) << 8) | Math.round((color.value as any).b))
181
+ : (() => {
182
+ const rgb = convertToRgb(color.value)
183
+ return (Math.round(rgb.r) << 16) | (Math.round(rgb.g) << 8) | Math.round(rgb.b)
184
+ })()
185
+ const clamped = Math.min(Math.max(hexInt + intDelta, MIN_HEX_INT), MAX_HEX_INT)
186
+ const hex = `#${clamped.toString(16).padStart(6, '0')}`
187
+ color.value = parseColor(hex)
188
+ inputValue.value = formatValue(color.value)
189
+ }
190
+
191
+ function increment() {
192
+ if (disabled.value || readonly.value)
193
+ return
194
+ const step = getStep()
195
+ if (channel.value) {
196
+ const currentValue = getChannelValue(color.value, channel.value)
197
+ color.value = setChannelValue(color.value, channel.value, currentValue + step)
198
+ inputValue.value = formatValue(color.value)
199
+ }
200
+ else {
201
+ addHexValue(step)
202
+ }
203
+ }
204
+
205
+ function decrement() {
206
+ if (disabled.value || readonly.value)
207
+ return
208
+ const step = getStep()
209
+ if (channel.value) {
210
+ const currentValue = getChannelValue(color.value, channel.value)
211
+ color.value = setChannelValue(color.value, channel.value, currentValue - step)
212
+ inputValue.value = formatValue(color.value)
213
+ }
214
+ else {
215
+ addHexValue(-step)
216
+ }
217
+ }
218
+
219
+ function incrementPage() {
220
+ if (disabled.value || readonly.value)
221
+ return
222
+ const step = getStep() * PAGE_STEP_MULTIPLIER
223
+ if (channel.value) {
224
+ const currentValue = getChannelValue(color.value, channel.value)
225
+ color.value = setChannelValue(color.value, channel.value, currentValue + step)
226
+ inputValue.value = formatValue(color.value)
227
+ }
228
+ else {
229
+ addHexValue(step)
230
+ }
231
+ }
232
+
233
+ function decrementPage() {
234
+ if (disabled.value || readonly.value)
235
+ return
236
+ const step = getStep() * PAGE_STEP_MULTIPLIER
237
+ if (channel.value) {
238
+ const currentValue = getChannelValue(color.value, channel.value)
239
+ color.value = setChannelValue(color.value, channel.value, currentValue - step)
240
+ inputValue.value = formatValue(color.value)
241
+ }
242
+ else {
243
+ addHexValue(-step)
244
+ }
245
+ }
246
+
247
+ function incrementToMax() {
248
+ if (disabled.value || readonly.value)
249
+ return
250
+ if (channel.value) {
251
+ const range = getChannelRange(channel.value)
252
+ color.value = setChannelValue(color.value, channel.value, range.max)
253
+ inputValue.value = formatValue(color.value)
254
+ }
255
+ else {
256
+ addHexValue(MAX_HEX_INT)
257
+ }
258
+ }
259
+
260
+ function decrementToMin() {
261
+ if (disabled.value || readonly.value)
262
+ return
263
+ if (channel.value) {
264
+ const range = getChannelRange(channel.value)
265
+ color.value = setChannelValue(color.value, channel.value, range.min)
266
+ inputValue.value = formatValue(color.value)
267
+ }
268
+ else {
269
+ addHexValue(-MAX_HEX_INT)
270
+ }
271
+ }
272
+
273
+ function handleWheel(event: WheelEvent) {
274
+ if (disableWheelChange.value || disabled.value || readonly.value)
275
+ return
276
+
277
+ event.preventDefault()
278
+
279
+ if (event.deltaY > 0)
280
+ decrement()
281
+ else
282
+ increment()
283
+ }
284
+
285
+ provideColorFieldRootContext({
286
+ color: computed(() => color.value) as Ref<Color>,
287
+ inputValue,
288
+ channel,
289
+ colorSpace,
290
+ disabled,
291
+ readonly,
292
+ disableWheelChange,
293
+ placeholder,
294
+ updateValue,
295
+ commit,
296
+ increment,
297
+ decrement,
298
+ incrementToMax,
299
+ decrementToMin,
300
+ incrementPage,
301
+ decrementPage,
302
+ handleWheel,
303
+ })
304
+ </script>
305
+
306
+ <template>
307
+ <Primitive
308
+ :ref="forwardRef"
309
+ :as="as"
310
+ :as-child="asChild"
311
+ role="group"
312
+ :data-disabled="disabled ? '' : undefined"
313
+ :data-readonly="readonly ? '' : undefined"
314
+ >
315
+ <slot />
316
+
317
+ <VisuallyHiddenInput
318
+ v-if="isFormControl && name"
319
+ type="text"
320
+ :value="colorToString(color, 'hex')"
321
+ :name="name"
322
+ :disabled="disabled"
323
+ :required="required"
324
+ />
325
+ </Primitive>
326
+ </template>
@@ -0,0 +1,10 @@
1
+ export {
2
+ default as ColorFieldInput,
3
+ type ColorFieldInputProps,
4
+ } from './ColorFieldInput.vue'
5
+ export {
6
+ default as ColorFieldRoot,
7
+ type ColorFieldRootEmits,
8
+ type ColorFieldRootProps,
9
+ injectColorFieldRootContext,
10
+ } from './ColorFieldRoot.vue'
@@ -0,0 +1,224 @@
1
+ <script lang="ts">
2
+ import type { ComputedRef, Ref } from 'vue'
3
+ import type { PrimitiveProps } from '@/Primitive'
4
+ import type { Color, ColorChannel, ColorChannel as ColorChannelType, ColorSpace } from '@/shared/color'
5
+ import type { DataOrientation, Direction, FormFieldProps } from '@/shared/types'
6
+ import { createContext, useDirection, useFormControl, useForwardExpose } from '@/shared'
7
+
8
+ export interface ColorSliderRootProps extends PrimitiveProps, FormFieldProps {
9
+ /** The color value (controlled). Can be a hex string or Color object. */
10
+ modelValue?: string | Color
11
+ /** The default color value (uncontrolled). */
12
+ defaultValue?: string | Color
13
+ /** The color space to operate in. */
14
+ colorSpace?: ColorSpace
15
+ /** The color channel that this slider manipulates. */
16
+ channel: ColorChannel
17
+ /** The orientation of the slider. */
18
+ orientation?: DataOrientation
19
+ /** The reading direction of the slider. */
20
+ dir?: Direction
21
+ /** Whether the slider is visually inverted. */
22
+ inverted?: boolean
23
+ /** When `true`, prevents the user from interacting with the slider. */
24
+ disabled?: boolean
25
+ /** Custom step value for increment/decrement. Defaults to the channel's natural step. */
26
+ step?: number
27
+ }
28
+
29
+ export type ColorSliderRootEmits = {
30
+ 'update:modelValue': [value: string | Color]
31
+ 'update:color': [value: Color]
32
+ 'change': [value: string]
33
+ 'changeEnd': [value: string]
34
+ }
35
+
36
+ export interface ColorSliderRootContext {
37
+ color: Ref<Color>
38
+ channelValue: ComputedRef<number>
39
+ channel: Ref<ColorChannel>
40
+ colorSpace: Ref<ColorSpace>
41
+ orientation: Ref<DataOrientation>
42
+ disabled: Ref<boolean>
43
+ inverted: Ref<boolean>
44
+ min: ComputedRef<number>
45
+ max: ComputedRef<number>
46
+ step: ComputedRef<number>
47
+ }
48
+
49
+ export const [injectColorSliderRootContext, provideColorSliderRootContext]
50
+ = createContext<ColorSliderRootContext>('ColorSliderRoot')
51
+ </script>
52
+
53
+ <script setup lang="ts">
54
+ import { useVModel } from '@vueuse/core'
55
+ import { computed, ref, toRefs, watch } from 'vue'
56
+ import { colorToString, convertToHsb, convertToHsl, convertToRgb, getChannelRange, getChannelValue, normalizeColor, setChannelValue } from '@/shared/color'
57
+ import { SliderRoot } from '@/Slider'
58
+ import { VisuallyHiddenInput } from '@/VisuallyHidden'
59
+
60
+ defineOptions({
61
+ inheritAttrs: false,
62
+ })
63
+
64
+ const props = withDefaults(defineProps<ColorSliderRootProps>(), {
65
+ colorSpace: 'hsl',
66
+ orientation: 'horizontal',
67
+ disabled: false,
68
+ inverted: false,
69
+ defaultValue: '#000000',
70
+ as: 'span',
71
+ })
72
+
73
+ const emits = defineEmits<ColorSliderRootEmits>()
74
+
75
+ const { orientation, disabled, inverted, dir: propDir, channel, colorSpace, step: stepProp } = toRefs(props)
76
+ const dir = useDirection(propDir)
77
+ const { forwardRef, currentElement } = useForwardExpose()
78
+ const isFormControl = useFormControl(currentElement)
79
+
80
+ // Normalize the model value to a Color object
81
+ const modelValue = useVModel(props, 'modelValue', emits, {
82
+ defaultValue: props.defaultValue,
83
+ passive: (props.modelValue === undefined) as false,
84
+ })
85
+
86
+ // Convert a color to the native color space for the given channel.
87
+ // This ensures setChannelValue/getChannelValue operate without cross-space round-trips.
88
+ function toNativeSpace(color: Color, ch: ColorChannelType, space: ColorSpace): Color {
89
+ switch (ch) {
90
+ case 'hue':
91
+ case 'lightness':
92
+ return convertToHsl(color)
93
+ case 'saturation':
94
+ return space === 'hsb' ? convertToHsb(color) : convertToHsl(color)
95
+ case 'brightness':
96
+ return convertToHsb(color)
97
+ case 'red':
98
+ case 'green':
99
+ case 'blue':
100
+ return convertToRgb(color)
101
+ case 'alpha':
102
+ return color
103
+ default:
104
+ return color
105
+ }
106
+ }
107
+
108
+ // Internal color ref that preserves color space precision.
109
+ // Convert to the channel's native space to avoid cross-space round-trips during drag.
110
+ const internalColor = ref<Color>(toNativeSpace(normalizeColor(modelValue.value ?? props.defaultValue ?? '#000000'), channel.value, colorSpace.value))
111
+
112
+ // Check if a color is achromatic (hue information is lost in hex round-trips)
113
+ function isAchromatic(color: Color): boolean {
114
+ const hsl = convertToHsl(color)
115
+ return hsl.s === 0 || hsl.l === 0 || hsl.l >= 100
116
+ }
117
+
118
+ // Sync internal color from external modelValue changes (e.g. parent updates)
119
+ watch(() => modelValue.value, (newVal) => {
120
+ if (newVal == null)
121
+ return
122
+ const parsed = normalizeColor(newVal)
123
+ const currentHex = colorToString(internalColor.value, 'hex')
124
+ const newHex = colorToString(parsed, 'hex')
125
+ // Only update if the external value actually changed (avoid overwriting
126
+ // precision during our own drag updates)
127
+ if (currentHex !== newHex) {
128
+ const nativeColor = toNativeSpace(parsed, channel.value, colorSpace.value)
129
+ const currentChannelVal = getChannelValue(internalColor.value, channel.value)
130
+ const newChannelVal = getChannelValue(nativeColor, channel.value)
131
+
132
+ // Preserve this slider's channel value when:
133
+ // 1. Color is achromatic (hue completely lost in hex round-trip)
134
+ // 2. Channel value diff is within 2% of range (8-bit RGB quantization drift)
135
+ // We still update the rest of the color so the track gradient stays correct.
136
+ const range = channelRange.value.max - channelRange.value.min
137
+ const shouldPreserve = (channel.value === 'hue' && isAchromatic(parsed))
138
+ || Math.abs(currentChannelVal - newChannelVal) < range * 0.02
139
+
140
+ if (shouldPreserve) {
141
+ internalColor.value = setChannelValue(nativeColor, channel.value, currentChannelVal)
142
+ }
143
+ else {
144
+ internalColor.value = nativeColor
145
+ }
146
+ }
147
+ })
148
+
149
+ const color = computed({
150
+ get: () => internalColor.value,
151
+ set: (newColor: Color) => {
152
+ internalColor.value = newColor
153
+ const hexString = colorToString(newColor, 'hex')
154
+ modelValue.value = hexString
155
+ emits('update:color', newColor)
156
+ },
157
+ })
158
+
159
+ // Get channel range
160
+ const channelRange = computed(() => getChannelRange(channel.value))
161
+ const min = computed(() => channelRange.value.min)
162
+ const max = computed(() => channelRange.value.max)
163
+ const step = computed(() => stepProp.value ?? channelRange.value.step)
164
+
165
+ // Current channel value
166
+ const channelValue = computed(() => getChannelValue(color.value, channel.value))
167
+
168
+ // Convert channel value to array format for SliderRoot
169
+ const sliderValue = computed({
170
+ get: () => [channelValue.value],
171
+ set: (newValue: number[]) => {
172
+ const clamped = Math.max(min.value, Math.min(max.value, newValue[0]))
173
+ const newColor = setChannelValue(color.value, channel.value, clamped)
174
+ color.value = newColor
175
+ emits('change', colorToString(newColor, 'hex'))
176
+ },
177
+ })
178
+
179
+ function handleValueCommit(values: number[]) {
180
+ emits('changeEnd', colorToString(color.value, 'hex'))
181
+ }
182
+
183
+ provideColorSliderRootContext({
184
+ color: computed(() => color.value) as Ref<Color>,
185
+ channelValue,
186
+ channel,
187
+ colorSpace,
188
+ orientation,
189
+ disabled,
190
+ inverted,
191
+ min,
192
+ max,
193
+ step,
194
+ })
195
+ </script>
196
+
197
+ <template>
198
+ <SliderRoot
199
+ v-bind="$attrs"
200
+ :ref="forwardRef"
201
+ v-model="sliderValue"
202
+ :orientation="orientation"
203
+ :dir="dir"
204
+ :disabled="disabled"
205
+ :inverted="inverted"
206
+ :min="min"
207
+ :max="max"
208
+ :step="step"
209
+ :as="as"
210
+ :as-child="asChild"
211
+ @value-commit="handleValueCommit"
212
+ >
213
+ <slot />
214
+
215
+ <VisuallyHiddenInput
216
+ v-if="isFormControl && name"
217
+ type="text"
218
+ :value="colorToString(color, 'hex')"
219
+ :name="name"
220
+ :disabled="disabled"
221
+ :required="required"
222
+ />
223
+ </SliderRoot>
224
+ </template>
@@ -0,0 +1,54 @@
1
+ <script lang="ts">
2
+ import type { PrimitiveProps } from '@/Primitive'
3
+
4
+ export interface ColorSliderThumbProps extends PrimitiveProps {}
5
+ </script>
6
+
7
+ <script setup lang="ts">
8
+ import { computed } from 'vue'
9
+ import { getChannelName } from '@/shared/color'
10
+ import { SliderThumb } from '@/Slider'
11
+ import { injectColorSliderRootContext } from './ColorSliderRoot.vue'
12
+
13
+ const props = withDefaults(defineProps<ColorSliderThumbProps>(), {
14
+ as: 'span',
15
+ })
16
+
17
+ defineSlots<{
18
+ default?: (props: {
19
+ /** The display name of the current channel */
20
+ channelName: string
21
+ /** The current numeric value of the channel */
22
+ channelValue: number
23
+ }) => any
24
+ }>()
25
+
26
+ const rootContext = injectColorSliderRootContext()
27
+
28
+ const ariaLabel = computed(() => {
29
+ return getChannelName(rootContext.channel.value)
30
+ })
31
+
32
+ const ariaValueText = computed(() => {
33
+ const value = rootContext.channelValue.value
34
+ const channel = rootContext.channel.value
35
+ if (channel === 'alpha') {
36
+ return `${Math.round(value)}%`
37
+ }
38
+ return String(Math.round(value))
39
+ })
40
+ </script>
41
+
42
+ <template>
43
+ <SliderThumb
44
+ :as="as"
45
+ :as-child="asChild"
46
+ :aria-label="ariaLabel"
47
+ :aria-valuetext="ariaValueText"
48
+ >
49
+ <slot
50
+ :channel-name="ariaLabel"
51
+ :channel-value="rootContext.channelValue.value"
52
+ />
53
+ </SliderThumb>
54
+ </template>
@@ -0,0 +1,36 @@
1
+ <script lang="ts">
2
+ import type { PrimitiveProps } from '@/Primitive'
3
+
4
+ export interface ColorSliderTrackProps extends PrimitiveProps {}
5
+ </script>
6
+
7
+ <script setup lang="ts">
8
+ import { computed } from 'vue'
9
+ import { getSliderBackgroundStyle } from '@/shared/color'
10
+ import { SliderTrack } from '@/Slider'
11
+ import { injectColorSliderRootContext } from './ColorSliderRoot.vue'
12
+
13
+ const props = withDefaults(defineProps<ColorSliderTrackProps>(), {
14
+ as: 'span',
15
+ })
16
+
17
+ const rootContext = injectColorSliderRootContext()
18
+
19
+ const backgroundStyle = computed(() => {
20
+ return getSliderBackgroundStyle(
21
+ rootContext.color.value,
22
+ rootContext.channel.value,
23
+ rootContext.colorSpace.value,
24
+ )
25
+ })
26
+ </script>
27
+
28
+ <template>
29
+ <SliderTrack
30
+ :as="as"
31
+ :as-child="asChild"
32
+ :style="backgroundStyle"
33
+ >
34
+ <slot />
35
+ </SliderTrack>
36
+ </template>
@@ -0,0 +1,14 @@
1
+ export {
2
+ default as ColorSliderRoot,
3
+ type ColorSliderRootEmits,
4
+ type ColorSliderRootProps,
5
+ injectColorSliderRootContext,
6
+ } from './ColorSliderRoot.vue'
7
+ export {
8
+ default as ColorSliderThumb,
9
+ type ColorSliderThumbProps,
10
+ } from './ColorSliderThumb.vue'
11
+ export {
12
+ default as ColorSliderTrack,
13
+ type ColorSliderTrackProps,
14
+ } from './ColorSliderTrack.vue'
@@ -0,0 +1,39 @@
1
+ import { clamp } from '@/shared'
2
+
3
+ export const PAGE_KEYS = ['PageUp', 'PageDown']
4
+ export const ARROW_KEYS = ['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight']
5
+
6
+ export type SlideDirection = 'from-left' | 'from-right' | 'from-bottom' | 'from-top'
7
+
8
+ export const BACK_KEYS: Record<SlideDirection, string[]> = {
9
+ 'from-left': ['Home', 'PageDown', 'ArrowDown', 'ArrowLeft'],
10
+ 'from-right': ['Home', 'PageDown', 'ArrowDown', 'ArrowRight'],
11
+ 'from-bottom': ['Home', 'PageDown', 'ArrowDown', 'ArrowLeft'],
12
+ 'from-top': ['Home', 'PageUp', 'ArrowUp', 'ArrowLeft'],
13
+ }
14
+
15
+ // https://github.com/tmcw-up-for-adoption/simple-linear-scale/blob/master/index.js
16
+ export function linearScale(input: readonly [number, number], output: readonly [number, number]) {
17
+ return (value: number) => {
18
+ if (input[0] === input[1] || output[0] === output[1])
19
+ return output[0]
20
+ const ratio = (output[1] - output[0]) / (input[1] - input[0])
21
+ return output[0] + ratio * (value - input[0])
22
+ }
23
+ }
24
+
25
+ export function convertValueToPercentage(value: number, min: number, max: number) {
26
+ if (max === min)
27
+ return 0
28
+ const maxSteps = max - min
29
+ const percentPerStep = 100 / maxSteps
30
+ const percentage = percentPerStep * (value - min)
31
+ return clamp(percentage, 0, 100)
32
+ }
33
+
34
+ export function getThumbPosition(percentage: number, orientation: 'horizontal' | 'vertical'): string {
35
+ if (orientation === 'horizontal') {
36
+ return `calc(${percentage}% - var(--reka-slider-thumb-size, 16px) / 2)`
37
+ }
38
+ return `calc(${100 - percentage}% - var(--reka-slider-thumb-size, 16px) / 2)`
39
+ }