reka-ui 2.7.0 → 2.8.2

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 (323) hide show
  1. package/dist/Avatar/AvatarImage.cjs +4 -2
  2. package/dist/Avatar/AvatarImage.cjs.map +1 -1
  3. package/dist/Avatar/AvatarImage.js +4 -2
  4. package/dist/Avatar/AvatarImage.js.map +1 -1
  5. package/dist/Calendar/CalendarCellTrigger.cjs +4 -1
  6. package/dist/Calendar/CalendarCellTrigger.cjs.map +1 -1
  7. package/dist/Calendar/CalendarCellTrigger.js +4 -1
  8. package/dist/Calendar/CalendarCellTrigger.js.map +1 -1
  9. package/dist/Calendar/CalendarRoot.cjs +12 -7
  10. package/dist/Calendar/CalendarRoot.cjs.map +1 -1
  11. package/dist/Calendar/CalendarRoot.js +13 -8
  12. package/dist/Calendar/CalendarRoot.js.map +1 -1
  13. package/dist/Calendar/useCalendar.cjs +32 -2
  14. package/dist/Calendar/useCalendar.cjs.map +1 -1
  15. package/dist/Calendar/useCalendar.js +33 -3
  16. package/dist/Calendar/useCalendar.js.map +1 -1
  17. package/dist/Collection/Collection.cjs +6 -2
  18. package/dist/Collection/Collection.cjs.map +1 -1
  19. package/dist/Collection/Collection.js +6 -2
  20. package/dist/Collection/Collection.js.map +1 -1
  21. package/dist/Combobox/ComboboxContent.cjs +4 -0
  22. package/dist/Combobox/ComboboxContent.cjs.map +1 -1
  23. package/dist/Combobox/ComboboxContent.js +4 -0
  24. package/dist/Combobox/ComboboxContent.js.map +1 -1
  25. package/dist/Combobox/ComboboxContentImpl.cjs +47 -33
  26. package/dist/Combobox/ComboboxContentImpl.cjs.map +1 -1
  27. package/dist/Combobox/ComboboxContentImpl.js +48 -34
  28. package/dist/Combobox/ComboboxContentImpl.js.map +1 -1
  29. package/dist/ContextMenu/ContextMenuContent.cjs +4 -0
  30. package/dist/ContextMenu/ContextMenuContent.cjs.map +1 -1
  31. package/dist/ContextMenu/ContextMenuContent.js +4 -0
  32. package/dist/ContextMenu/ContextMenuContent.js.map +1 -1
  33. package/dist/ContextMenu/ContextMenuRadioGroup.cjs +1 -1
  34. package/dist/ContextMenu/ContextMenuRadioGroup.js +1 -1
  35. package/dist/ContextMenu/ContextMenuRadioItem.cjs +1 -1
  36. package/dist/ContextMenu/ContextMenuRadioItem.js +1 -1
  37. package/dist/ContextMenu/ContextMenuSubContent.cjs +4 -0
  38. package/dist/ContextMenu/ContextMenuSubContent.cjs.map +1 -1
  39. package/dist/ContextMenu/ContextMenuSubContent.js +4 -0
  40. package/dist/ContextMenu/ContextMenuSubContent.js.map +1 -1
  41. package/dist/DatePicker/DatePickerContent.cjs +4 -0
  42. package/dist/DatePicker/DatePickerContent.cjs.map +1 -1
  43. package/dist/DatePicker/DatePickerContent.js +4 -0
  44. package/dist/DatePicker/DatePickerContent.js.map +1 -1
  45. package/dist/DatePicker/DatePickerRoot.cjs +10 -8
  46. package/dist/DatePicker/DatePickerRoot.cjs.map +1 -1
  47. package/dist/DatePicker/DatePickerRoot.js +10 -8
  48. package/dist/DatePicker/DatePickerRoot.js.map +1 -1
  49. package/dist/DateRangePicker/DateRangePickerContent.cjs +4 -0
  50. package/dist/DateRangePicker/DateRangePickerContent.cjs.map +1 -1
  51. package/dist/DateRangePicker/DateRangePickerContent.js +4 -0
  52. package/dist/DateRangePicker/DateRangePickerContent.js.map +1 -1
  53. package/dist/DateRangePicker/DateRangePickerRoot.cjs +10 -8
  54. package/dist/DateRangePicker/DateRangePickerRoot.cjs.map +1 -1
  55. package/dist/DateRangePicker/DateRangePickerRoot.js +11 -9
  56. package/dist/DateRangePicker/DateRangePickerRoot.js.map +1 -1
  57. package/dist/DropdownMenu/DropdownMenuContent.cjs +4 -0
  58. package/dist/DropdownMenu/DropdownMenuContent.cjs.map +1 -1
  59. package/dist/DropdownMenu/DropdownMenuContent.js +4 -0
  60. package/dist/DropdownMenu/DropdownMenuContent.js.map +1 -1
  61. package/dist/DropdownMenu/DropdownMenuRadioGroup.cjs +1 -1
  62. package/dist/DropdownMenu/DropdownMenuRadioGroup.js +1 -1
  63. package/dist/DropdownMenu/DropdownMenuRadioItem.cjs +1 -1
  64. package/dist/DropdownMenu/DropdownMenuRadioItem.js +1 -1
  65. package/dist/DropdownMenu/DropdownMenuSubContent.cjs +4 -0
  66. package/dist/DropdownMenu/DropdownMenuSubContent.cjs.map +1 -1
  67. package/dist/DropdownMenu/DropdownMenuSubContent.js +4 -0
  68. package/dist/DropdownMenu/DropdownMenuSubContent.js.map +1 -1
  69. package/dist/Editable/EditableInput.cjs +1 -1
  70. package/dist/Editable/EditableInput.cjs.map +1 -1
  71. package/dist/Editable/EditableInput.js +1 -1
  72. package/dist/Editable/EditableInput.js.map +1 -1
  73. package/dist/FocusScope/FocusScope.cjs +1 -1
  74. package/dist/FocusScope/FocusScope.cjs.map +1 -1
  75. package/dist/FocusScope/FocusScope.js +2 -2
  76. package/dist/FocusScope/FocusScope.js.map +1 -1
  77. package/dist/FocusScope/stack.cjs +0 -9
  78. package/dist/FocusScope/stack.cjs.map +1 -1
  79. package/dist/FocusScope/stack.js +1 -4
  80. package/dist/FocusScope/stack.js.map +1 -1
  81. package/dist/HoverCard/HoverCardContent.cjs +4 -0
  82. package/dist/HoverCard/HoverCardContent.cjs.map +1 -1
  83. package/dist/HoverCard/HoverCardContent.js +4 -0
  84. package/dist/HoverCard/HoverCardContent.js.map +1 -1
  85. package/dist/HoverCard/HoverCardContentImpl.cjs +4 -0
  86. package/dist/HoverCard/HoverCardContentImpl.cjs.map +1 -1
  87. package/dist/HoverCard/HoverCardContentImpl.js +4 -0
  88. package/dist/HoverCard/HoverCardContentImpl.js.map +1 -1
  89. package/dist/Listbox/ListboxRoot.cjs.map +1 -1
  90. package/dist/Listbox/ListboxRoot.js.map +1 -1
  91. package/dist/Menu/MenuContent.cjs +4 -0
  92. package/dist/Menu/MenuContent.cjs.map +1 -1
  93. package/dist/Menu/MenuContent.js +4 -0
  94. package/dist/Menu/MenuContent.js.map +1 -1
  95. package/dist/Menu/MenuContentImpl.cjs +4 -0
  96. package/dist/Menu/MenuContentImpl.cjs.map +1 -1
  97. package/dist/Menu/MenuContentImpl.js +4 -0
  98. package/dist/Menu/MenuContentImpl.js.map +1 -1
  99. package/dist/Menu/MenuRadioGroup.cjs +1 -1
  100. package/dist/Menu/MenuRadioGroup.cjs.map +1 -1
  101. package/dist/Menu/MenuRadioGroup.js +1 -1
  102. package/dist/Menu/MenuRadioGroup.js.map +1 -1
  103. package/dist/Menu/MenuRadioItem.cjs +1 -1
  104. package/dist/Menu/MenuRadioItem.cjs.map +1 -1
  105. package/dist/Menu/MenuRadioItem.js +1 -1
  106. package/dist/Menu/MenuRadioItem.js.map +1 -1
  107. package/dist/Menu/MenuRootContentModal.cjs +4 -0
  108. package/dist/Menu/MenuRootContentModal.cjs.map +1 -1
  109. package/dist/Menu/MenuRootContentModal.js +4 -0
  110. package/dist/Menu/MenuRootContentModal.js.map +1 -1
  111. package/dist/Menu/MenuRootContentNonModal.cjs +4 -0
  112. package/dist/Menu/MenuRootContentNonModal.cjs.map +1 -1
  113. package/dist/Menu/MenuRootContentNonModal.js +4 -0
  114. package/dist/Menu/MenuRootContentNonModal.js.map +1 -1
  115. package/dist/Menu/MenuSubContent.cjs +4 -0
  116. package/dist/Menu/MenuSubContent.cjs.map +1 -1
  117. package/dist/Menu/MenuSubContent.js +4 -0
  118. package/dist/Menu/MenuSubContent.js.map +1 -1
  119. package/dist/Menubar/MenubarContent.cjs +4 -0
  120. package/dist/Menubar/MenubarContent.cjs.map +1 -1
  121. package/dist/Menubar/MenubarContent.js +4 -0
  122. package/dist/Menubar/MenubarContent.js.map +1 -1
  123. package/dist/Menubar/MenubarRadioGroup.cjs +1 -1
  124. package/dist/Menubar/MenubarRadioGroup.js +1 -1
  125. package/dist/Menubar/MenubarRadioItem.cjs +1 -1
  126. package/dist/Menubar/MenubarRadioItem.js +1 -1
  127. package/dist/Menubar/MenubarSubContent.cjs +4 -0
  128. package/dist/Menubar/MenubarSubContent.cjs.map +1 -1
  129. package/dist/Menubar/MenubarSubContent.js +4 -0
  130. package/dist/Menubar/MenubarSubContent.js.map +1 -1
  131. package/dist/NavigationMenu/NavigationMenuContent.cjs +1 -1
  132. package/dist/NavigationMenu/NavigationMenuContent.js +1 -1
  133. package/dist/NavigationMenu/NavigationMenuContentImpl.cjs +1 -1
  134. package/dist/NavigationMenu/NavigationMenuContentImpl.js +1 -1
  135. package/dist/NavigationMenu/NavigationMenuItem.cjs +1 -1
  136. package/dist/NavigationMenu/NavigationMenuItem.js +1 -1
  137. package/dist/NavigationMenu/NavigationMenuRoot.cjs +7 -5
  138. package/dist/NavigationMenu/NavigationMenuRoot.cjs.map +1 -1
  139. package/dist/NavigationMenu/NavigationMenuRoot.js +8 -6
  140. package/dist/NavigationMenu/NavigationMenuRoot.js.map +1 -1
  141. package/dist/NavigationMenu/NavigationMenuTrigger.cjs +1 -1
  142. package/dist/NavigationMenu/NavigationMenuTrigger.js +1 -1
  143. package/dist/NavigationMenu/NavigationMenuViewport.cjs +1 -1
  144. package/dist/NavigationMenu/NavigationMenuViewport.js +1 -1
  145. package/dist/NumberField/NumberFieldRoot.cjs +6 -1
  146. package/dist/NumberField/NumberFieldRoot.cjs.map +1 -1
  147. package/dist/NumberField/NumberFieldRoot.js +6 -1
  148. package/dist/NumberField/NumberFieldRoot.js.map +1 -1
  149. package/dist/PinInput/PinInputInput.cjs +15 -11
  150. package/dist/PinInput/PinInputInput.cjs.map +1 -1
  151. package/dist/PinInput/PinInputInput.js +15 -11
  152. package/dist/PinInput/PinInputInput.js.map +1 -1
  153. package/dist/Popover/PopoverContent.cjs +4 -0
  154. package/dist/Popover/PopoverContent.cjs.map +1 -1
  155. package/dist/Popover/PopoverContent.js +4 -0
  156. package/dist/Popover/PopoverContent.js.map +1 -1
  157. package/dist/Popover/PopoverContentImpl.cjs +4 -0
  158. package/dist/Popover/PopoverContentImpl.cjs.map +1 -1
  159. package/dist/Popover/PopoverContentImpl.js +4 -0
  160. package/dist/Popover/PopoverContentImpl.js.map +1 -1
  161. package/dist/Popover/PopoverContentModal.cjs +4 -0
  162. package/dist/Popover/PopoverContentModal.cjs.map +1 -1
  163. package/dist/Popover/PopoverContentModal.js +4 -0
  164. package/dist/Popover/PopoverContentModal.js.map +1 -1
  165. package/dist/Popover/PopoverContentNonModal.cjs +4 -0
  166. package/dist/Popover/PopoverContentNonModal.cjs.map +1 -1
  167. package/dist/Popover/PopoverContentNonModal.js +4 -0
  168. package/dist/Popover/PopoverContentNonModal.js.map +1 -1
  169. package/dist/Popper/PopperContent.cjs +10 -2
  170. package/dist/Popper/PopperContent.cjs.map +1 -1
  171. package/dist/Popper/PopperContent.js +10 -2
  172. package/dist/Popper/PopperContent.js.map +1 -1
  173. package/dist/RangeCalendar/RangeCalendarCellTrigger.cjs +8 -2
  174. package/dist/RangeCalendar/RangeCalendarCellTrigger.cjs.map +1 -1
  175. package/dist/RangeCalendar/RangeCalendarCellTrigger.js +8 -2
  176. package/dist/RangeCalendar/RangeCalendarCellTrigger.js.map +1 -1
  177. package/dist/RangeCalendar/RangeCalendarGrid.cjs +2 -1
  178. package/dist/RangeCalendar/RangeCalendarGrid.cjs.map +1 -1
  179. package/dist/RangeCalendar/RangeCalendarGrid.js +2 -1
  180. package/dist/RangeCalendar/RangeCalendarGrid.js.map +1 -1
  181. package/dist/RangeCalendar/RangeCalendarRoot.cjs +30 -16
  182. package/dist/RangeCalendar/RangeCalendarRoot.cjs.map +1 -1
  183. package/dist/RangeCalendar/RangeCalendarRoot.js +31 -17
  184. package/dist/RangeCalendar/RangeCalendarRoot.js.map +1 -1
  185. package/dist/RangeCalendar/useRangeCalendar.cjs +41 -8
  186. package/dist/RangeCalendar/useRangeCalendar.cjs.map +1 -1
  187. package/dist/RangeCalendar/useRangeCalendar.js +41 -8
  188. package/dist/RangeCalendar/useRangeCalendar.js.map +1 -1
  189. package/dist/ScrollArea/ScrollAreaRoot.cjs.map +1 -1
  190. package/dist/ScrollArea/ScrollAreaRoot.js.map +1 -1
  191. package/dist/ScrollArea/ScrollAreaScrollbar.cjs +9 -2
  192. package/dist/ScrollArea/ScrollAreaScrollbar.cjs.map +1 -1
  193. package/dist/ScrollArea/ScrollAreaScrollbar.js +9 -2
  194. package/dist/ScrollArea/ScrollAreaScrollbar.js.map +1 -1
  195. package/dist/ScrollArea/ScrollAreaScrollbarGlimpse.cjs +132 -0
  196. package/dist/ScrollArea/ScrollAreaScrollbarGlimpse.cjs.map +1 -0
  197. package/dist/ScrollArea/ScrollAreaScrollbarGlimpse.js +126 -0
  198. package/dist/ScrollArea/ScrollAreaScrollbarGlimpse.js.map +1 -0
  199. package/dist/Select/SelectContent.cjs +4 -0
  200. package/dist/Select/SelectContent.cjs.map +1 -1
  201. package/dist/Select/SelectContent.js +4 -0
  202. package/dist/Select/SelectContent.js.map +1 -1
  203. package/dist/Select/SelectContentImpl.cjs +4 -0
  204. package/dist/Select/SelectContentImpl.cjs.map +1 -1
  205. package/dist/Select/SelectContentImpl.js +4 -0
  206. package/dist/Select/SelectContentImpl.js.map +1 -1
  207. package/dist/Select/SelectPopperPosition.cjs +4 -0
  208. package/dist/Select/SelectPopperPosition.cjs.map +1 -1
  209. package/dist/Select/SelectPopperPosition.js +4 -0
  210. package/dist/Select/SelectPopperPosition.js.map +1 -1
  211. package/dist/Tabs/TabsContent.cjs +4 -0
  212. package/dist/Tabs/TabsContent.cjs.map +1 -1
  213. package/dist/Tabs/TabsContent.js +5 -1
  214. package/dist/Tabs/TabsContent.js.map +1 -1
  215. package/dist/Tabs/TabsRoot.cjs +11 -1
  216. package/dist/Tabs/TabsRoot.cjs.map +1 -1
  217. package/dist/Tabs/TabsRoot.js +12 -2
  218. package/dist/Tabs/TabsRoot.js.map +1 -1
  219. package/dist/Tabs/TabsTrigger.cjs +1 -1
  220. package/dist/Tabs/TabsTrigger.cjs.map +1 -1
  221. package/dist/Tabs/TabsTrigger.js +1 -1
  222. package/dist/Tabs/TabsTrigger.js.map +1 -1
  223. package/dist/TimeField/TimeFieldInput.cjs +3 -1
  224. package/dist/TimeField/TimeFieldInput.cjs.map +1 -1
  225. package/dist/TimeField/TimeFieldInput.js +3 -1
  226. package/dist/TimeField/TimeFieldInput.js.map +1 -1
  227. package/dist/TimeField/TimeFieldRoot.cjs +24 -2
  228. package/dist/TimeField/TimeFieldRoot.cjs.map +1 -1
  229. package/dist/TimeField/TimeFieldRoot.js +24 -2
  230. package/dist/TimeField/TimeFieldRoot.js.map +1 -1
  231. package/dist/date/calendar.cjs +29 -9
  232. package/dist/date/calendar.cjs.map +1 -1
  233. package/dist/date/calendar.js +25 -11
  234. package/dist/date/calendar.js.map +1 -1
  235. package/dist/date/comparators.cjs +14 -2
  236. package/dist/date/comparators.cjs.map +1 -1
  237. package/dist/date/comparators.js +14 -2
  238. package/dist/date/comparators.js.map +1 -1
  239. package/dist/date/parser.cjs +1 -0
  240. package/dist/date/parser.cjs.map +1 -1
  241. package/dist/date/parser.js +1 -0
  242. package/dist/date/parser.js.map +1 -1
  243. package/dist/date/useDateField.cjs +41 -20
  244. package/dist/date/useDateField.cjs.map +1 -1
  245. package/dist/date/useDateField.js +41 -20
  246. package/dist/date/useDateField.js.map +1 -1
  247. package/dist/date.cjs +1 -0
  248. package/dist/date.d.cts +2 -2
  249. package/dist/date.d.ts +2 -2
  250. package/dist/date.js +2 -2
  251. package/dist/index.cjs +3 -1
  252. package/dist/index.d.cts +1148 -1106
  253. package/dist/index.d.cts.map +1 -1
  254. package/dist/index.d.ts +670 -628
  255. package/dist/index.d.ts.map +1 -1
  256. package/dist/index.js +3 -2
  257. package/dist/index2.d.cts +9 -2
  258. package/dist/index2.d.cts.map +1 -1
  259. package/dist/index2.d.ts +9 -2
  260. package/dist/index2.d.ts.map +1 -1
  261. package/dist/shared/useDateFormatter.cjs +1 -1
  262. package/dist/shared/useDateFormatter.cjs.map +1 -1
  263. package/dist/shared/useDateFormatter.js +1 -1
  264. package/dist/shared/useDateFormatter.js.map +1 -1
  265. package/dist/shared/useForwardExpose.cjs +1 -1
  266. package/dist/shared/useForwardExpose.cjs.map +1 -1
  267. package/dist/shared/useForwardExpose.js +1 -1
  268. package/dist/shared/useForwardExpose.js.map +1 -1
  269. package/dist/shared/useGraceArea.cjs +1 -1
  270. package/dist/shared/useGraceArea.cjs.map +1 -1
  271. package/dist/shared/useGraceArea.js +1 -1
  272. package/dist/shared/useGraceArea.js.map +1 -1
  273. package/package.json +20 -16
  274. package/src/Avatar/AvatarImage.vue +2 -1
  275. package/src/Calendar/CalendarCellTrigger.vue +8 -1
  276. package/src/Calendar/CalendarRoot.vue +19 -7
  277. package/src/Calendar/useCalendar.ts +43 -3
  278. package/src/Collection/Collection.ts +3 -2
  279. package/src/Combobox/ComboboxContentImpl.vue +40 -32
  280. package/src/Combobox/ComboboxRoot.vue +1 -1
  281. package/src/DatePicker/DatePickerRoot.vue +10 -10
  282. package/src/DatePicker/index.ts +4 -4
  283. package/src/DateRangePicker/DateRangePickerRoot.vue +11 -11
  284. package/src/DateRangePicker/index.ts +4 -4
  285. package/src/Editable/EditableInput.vue +1 -1
  286. package/src/FocusScope/FocusScope.vue +2 -2
  287. package/src/Listbox/ListboxFilter.vue +1 -1
  288. package/src/Listbox/ListboxRoot.vue +2 -1
  289. package/src/Menu/MenuRadioGroup.vue +5 -4
  290. package/src/Menu/MenuRadioItem.vue +2 -1
  291. package/src/NavigationMenu/NavigationMenuRoot.vue +10 -6
  292. package/src/NumberField/NumberFieldRoot.vue +6 -1
  293. package/src/PinInput/PinInputInput.vue +25 -18
  294. package/src/Popper/PopperContent.vue +15 -5
  295. package/src/RadioGroup/RadioGroupRoot.vue +1 -1
  296. package/src/RangeCalendar/RangeCalendarCellTrigger.vue +13 -3
  297. package/src/RangeCalendar/RangeCalendarGrid.vue +1 -0
  298. package/src/RangeCalendar/RangeCalendarRoot.vue +46 -30
  299. package/src/RangeCalendar/useRangeCalendar.ts +43 -15
  300. package/src/Rating/RatingItem.vue +52 -0
  301. package/src/Rating/RatingItemIndicator.vue +60 -0
  302. package/src/Rating/RatingRoot.vue +113 -0
  303. package/src/Rating/index.ts +3 -0
  304. package/src/ScrollArea/ScrollAreaRoot.vue +2 -1
  305. package/src/ScrollArea/ScrollAreaScrollbar.vue +9 -0
  306. package/src/ScrollArea/ScrollAreaScrollbarGlimpse.vue +145 -0
  307. package/src/ScrollArea/index.ts +4 -0
  308. package/src/ScrollArea/types.ts +1 -1
  309. package/src/Tabs/TabsContent.vue +6 -1
  310. package/src/Tabs/TabsRoot.vue +14 -1
  311. package/src/Tabs/TabsTrigger.vue +1 -1
  312. package/src/TimeField/TimeFieldInput.vue +6 -1
  313. package/src/TimeField/TimeFieldRoot.vue +25 -2
  314. package/src/Tree/TreeRoot.vue +2 -2
  315. package/src/date/calendar.ts +42 -18
  316. package/src/date/comparators.ts +15 -2
  317. package/src/index.ts +1 -0
  318. package/src/shared/date/parser.ts +10 -0
  319. package/src/shared/date/useDateField.ts +72 -21
  320. package/src/shared/index.ts +1 -1
  321. package/src/shared/useDateFormatter.ts +2 -2
  322. package/src/shared/useForwardExpose.ts +1 -1
  323. package/src/shared/useGraceArea.ts +1 -1
@@ -4,9 +4,9 @@
4
4
 
5
5
  import type { DateFields, DateValue } from '@internationalized/date'
6
6
  import type { Ref } from 'vue'
7
- import type { Grid, Matcher, WeekDayFormat } from '@/date'
7
+ import type { Grid, Matcher, WeekDayFormat, WeekStartsOn } from '@/date'
8
8
  import type { DateFormatterOptions } from '@/shared/useDateFormatter'
9
- import { isEqualMonth, isSameDay } from '@internationalized/date'
9
+ import { isEqualMonth, isSameDay, isSameMonth } from '@internationalized/date'
10
10
  import { computed, ref, watch } from 'vue'
11
11
  import { createMonths, getDaysInMonth, isAfter, isBefore, toDate } from '@/date'
12
12
  import { useDateFormatter } from '@/shared'
@@ -14,7 +14,7 @@ import { useDateFormatter } from '@/shared'
14
14
  export type UseCalendarProps = {
15
15
  locale: Ref<string>
16
16
  placeholder: Ref<DateValue>
17
- weekStartsOn: Ref<0 | 1 | 2 | 3 | 4 | 5 | 6>
17
+ weekStartsOn: Ref<WeekStartsOn>
18
18
  fixedWeeks: Ref<boolean>
19
19
  numberOfMonths: Ref<number>
20
20
  minValue: Ref<DateValue | undefined>
@@ -71,9 +71,26 @@ export function useCalendarState(props: UseCalendarStateProps) {
71
71
  },
72
72
  )
73
73
 
74
+ const hasSelectedDate = computed(() => {
75
+ return Array.isArray(props.date.value) ? props.date.value.length > 0 : !!props.date.value
76
+ })
77
+
78
+ const isSelectedDateDisabled = computed(() => {
79
+ if (Array.isArray(props.date.value)) {
80
+ if (!props.date.value.length)
81
+ return false
82
+ return props.date.value.some(dateObj => props.isDateDisabled?.(dateObj))
83
+ }
84
+ if (!props.date.value)
85
+ return false
86
+ return !!props.isDateDisabled?.(props.date.value)
87
+ })
88
+
74
89
  return {
75
90
  isDateSelected,
76
91
  isInvalid,
92
+ hasSelectedDate,
93
+ isSelectedDateDisabled,
77
94
  }
78
95
  }
79
96
 
@@ -336,6 +353,27 @@ export function useCalendar(props: UseCalendarProps) {
336
353
 
337
354
  const fullCalendarLabel = computed(() => `${props.calendarLabel.value ?? 'Event Date'}, ${headingValue.value}`)
338
355
 
356
+ const isPlaceholderFocusable = computed(() => {
357
+ return !(isDateDisabled(props.placeholder.value) || isDateUnavailable(props.placeholder.value) || isOutsideVisibleView(props.placeholder.value))
358
+ })
359
+
360
+ const firstFocusableDate = computed(() => {
361
+ for (const month of grid.value) {
362
+ if (props.minValue.value && isBefore(month.value, props.minValue.value))
363
+ continue
364
+
365
+ const daysInMonth = getDaysInMonth(month.value)
366
+ const startDay = props.minValue.value && isSameMonth(props.minValue.value, month.value) ? props.minValue.value.day : 1
367
+
368
+ for (let day = startDay; day <= daysInMonth; day++) {
369
+ const date = month.value.set({ day })
370
+ if (isDateDisabled(date) || isDateUnavailable(date))
371
+ continue
372
+ return date
373
+ }
374
+ }
375
+ })
376
+
339
377
  return {
340
378
  isDateDisabled,
341
379
  isDateUnavailable,
@@ -350,5 +388,7 @@ export function useCalendar(props: UseCalendarProps) {
350
388
  prevPage,
351
389
  headingValue,
352
390
  fullCalendarLabel,
391
+ isPlaceholderFocusable,
392
+ firstFocusableDate,
353
393
  }
354
394
  }
@@ -46,12 +46,13 @@ export function useCollection<ItemData = {}>(options: { key?: string, isProvider
46
46
 
47
47
  const CollectionSlot = defineComponent({
48
48
  name: 'CollectionSlot',
49
- setup(_, { slots }) {
49
+ inheritAttrs: false,
50
+ setup(_, { slots, attrs }) {
50
51
  const { primitiveElement, currentElement } = usePrimitiveElement()
51
52
  watch(currentElement, () => {
52
53
  context.collectionRef.value = currentElement.value
53
54
  })
54
- return () => h(Slot, { ref: primitiveElement }, slots)
55
+ return () => h(Slot, { ref: primitiveElement, ...attrs }, slots)
55
56
  },
56
57
  })
57
58
 
@@ -3,7 +3,7 @@ import type { Ref } from 'vue'
3
3
  import type { DismissableLayerEmits, DismissableLayerProps } from '@/DismissableLayer'
4
4
  import type { PopperContentProps } from '@/Popper'
5
5
 
6
- import { createContext, getActiveElement, useForwardExpose, useForwardProps, useHideOthers } from '@/shared'
6
+ import { createContext, getActiveElement, useFocusGuards, useForwardExpose, useForwardProps, useHideOthers } from '@/shared'
7
7
  import { useBodyScrollLock } from '@/shared/useBodyScrollLock'
8
8
 
9
9
  export type ComboboxContentImplEmits = DismissableLayerEmits
@@ -28,6 +28,7 @@ export const [injectComboboxContentContext, provideComboboxContentContext]
28
28
  <script setup lang="ts">
29
29
  import { computed, onMounted, onUnmounted, ref, toRefs } from 'vue'
30
30
  import { DismissableLayer } from '@/DismissableLayer'
31
+ import { FocusScope } from '@/FocusScope'
31
32
  import { ListboxContent } from '@/Listbox'
32
33
  import { PopperContent } from '@/Popper'
33
34
  import { Primitive } from '@/Primitive'
@@ -43,6 +44,7 @@ const rootContext = injectComboboxRootContext()
43
44
 
44
45
  const { forwardRef, currentElement } = useForwardExpose()
45
46
  useBodyScrollLock(props.bodyLock)
47
+ useFocusGuards()
46
48
  useHideOthers(rootContext.parentElement)
47
49
 
48
50
  const pickedProps = computed(() => {
@@ -89,40 +91,46 @@ onUnmounted(() => {
89
91
 
90
92
  <template>
91
93
  <ListboxContent as-child>
92
- <DismissableLayer
94
+ <FocusScope
93
95
  as-child
94
- :disable-outside-pointer-events="disableOutsidePointerEvents"
95
- @dismiss="rootContext.onOpenChange(false)"
96
- @focus-outside="(ev) => {
97
- // if clicking inside the combobox, prevent dismiss
98
- if (rootContext.parentElement.value?.contains(ev.target as Node)) ev.preventDefault()
99
- emits('focusOutside', ev)
100
- }"
101
- @interact-outside="emits('interactOutside', $event)"
102
- @escape-key-down="emits('escapeKeyDown', $event)"
103
- @pointer-down-outside="(ev) => {
104
- // if clicking inside the combobox, prevent dismiss
105
- if (rootContext.parentElement.value?.contains(ev.target as Node)) ev.preventDefault()
106
- emits('pointerDownOutside', ev)
107
- }"
96
+ @mount-auto-focus.prevent
97
+ @unmount-auto-focus.prevent
108
98
  >
109
- <component
110
- :is="position === 'popper' ? PopperContent : Primitive"
111
- v-bind="{ ...$attrs, ...forwardedProps }"
112
- :id="rootContext.contentId"
113
- :ref="forwardRef"
114
- :data-state="rootContext.open.value ? 'open' : 'closed'"
115
- :style="{
116
- // flex layout so we can place the scroll buttons properly
117
- display: 'flex',
118
- flexDirection: 'column',
119
- // reset the outline by default as the content MAY get focused
120
- outline: 'none',
121
- ...(position === 'popper' ? popperStyle : {}),
99
+ <DismissableLayer
100
+ as-child
101
+ :disable-outside-pointer-events="disableOutsidePointerEvents"
102
+ @dismiss="rootContext.onOpenChange(false)"
103
+ @focus-outside="(ev) => {
104
+ // if clicking inside the combobox, prevent dismiss
105
+ if (rootContext.parentElement.value?.contains(ev.target as Node)) ev.preventDefault()
106
+ emits('focusOutside', ev)
107
+ }"
108
+ @interact-outside="emits('interactOutside', $event)"
109
+ @escape-key-down="emits('escapeKeyDown', $event)"
110
+ @pointer-down-outside="(ev) => {
111
+ // if clicking inside the combobox, prevent dismiss
112
+ if (rootContext.parentElement.value?.contains(ev.target as Node)) ev.preventDefault()
113
+ emits('pointerDownOutside', ev)
122
114
  }"
123
115
  >
124
- <slot />
125
- </component>
126
- </DismissableLayer>
116
+ <component
117
+ :is="position === 'popper' ? PopperContent : Primitive"
118
+ v-bind="{ ...$attrs, ...forwardedProps }"
119
+ :id="rootContext.contentId"
120
+ :ref="forwardRef"
121
+ :data-state="rootContext.open.value ? 'open' : 'closed'"
122
+ :style="{
123
+ // flex layout so we can place the scroll buttons properly
124
+ display: 'flex',
125
+ flexDirection: 'column',
126
+ // reset the outline by default as the content MAY get focused
127
+ outline: 'none',
128
+ ...(position === 'popper' ? popperStyle : {}),
129
+ }"
130
+ >
131
+ <slot />
132
+ </component>
133
+ </DismissableLayer>
134
+ </FocusScope>
127
135
  </ListboxContent>
128
136
  </template>
@@ -45,7 +45,7 @@ export type ComboboxRootEmits<T = AcceptableValue> = {
45
45
  }
46
46
 
47
47
  export interface ComboboxRootProps<T = AcceptableValue> extends Omit<ListboxRootProps<T>, 'orientation' | 'selectionBehavior'> {
48
- /** The controlled open state of the Combobox. Can be binded with with `v-model:open`. */
48
+ /** The controlled open state of the Combobox. Can be binded with `v-model:open`. */
49
49
  open?: boolean
50
50
  /** The open state of the combobox when it is initially rendered. <br> Use when you do not need to control its open state. */
51
51
  defaultOpen?: boolean
@@ -3,11 +3,12 @@ import type { DateValue } from '@internationalized/date'
3
3
 
4
4
  import type { Ref } from 'vue'
5
5
  import type { CalendarRootProps, DateFieldRoot, DateFieldRootProps, PopoverRootEmits, PopoverRootProps } from '..'
6
- import type { Matcher, WeekDayFormat } from '@/date'
6
+ import type { Matcher, WeekDayFormat, WeekStartsOn } from '@/date'
7
7
  import type { DateStep, Granularity, HourCycle } from '@/shared/date'
8
8
  import type { Direction } from '@/shared/types'
9
9
  import { computed, ref, toRefs, watch } from 'vue'
10
- import { createContext, useDirection } from '@/shared'
10
+ import { getWeekStartsOn } from '@/date'
11
+ import { createContext, useDirection, useLocale } from '@/shared'
11
12
  import { getDefaultDate } from '@/shared/date'
12
13
  import { PopoverRoot } from '..'
13
14
 
@@ -26,7 +27,7 @@ type DatePickerRootContext = {
26
27
  placeholder: Ref<DateValue>
27
28
  pagedNavigation: Ref<boolean>
28
29
  preventDeselect: Ref<boolean>
29
- weekStartsOn: Ref<0 | 1 | 2 | 3 | 4 | 5 | 6>
30
+ weekStartsOn: Ref<WeekStartsOn>
30
31
  weekdayFormat: Ref<WeekDayFormat>
31
32
  fixedWeeks: Ref<boolean>
32
33
  numberOfMonths: Ref<number>
@@ -49,7 +50,7 @@ export type DatePickerRootProps = Omit<DateFieldRootProps, 'as' | 'asChild'> & P
49
50
  closeOnSelect?: boolean
50
51
  }
51
52
 
52
- export type DatePickerRootEmits = {
53
+ export type DatePickerRootEmits = PopoverRootEmits & {
53
54
  /** Event handler called whenever the model value changes */
54
55
  'update:modelValue': [date: DateValue | undefined]
55
56
  /** Event handler called whenever the placeholder value changes */
@@ -73,25 +74,22 @@ const props = withDefaults(defineProps<DatePickerRootProps>(), {
73
74
  modal: false,
74
75
  pagedNavigation: false,
75
76
  preventDeselect: false,
76
- weekStartsOn: 0,
77
77
  weekdayFormat: 'narrow',
78
78
  fixedWeeks: false,
79
79
  numberOfMonths: 1,
80
80
  disabled: false,
81
81
  readonly: false,
82
82
  placeholder: undefined,
83
- locale: 'en',
84
83
  isDateDisabled: undefined,
85
84
  isDateUnavailable: undefined,
86
85
  closeOnSelect: false,
87
86
  })
88
- const emits = defineEmits<DatePickerRootEmits & PopoverRootEmits>()
87
+ const emits = defineEmits<DatePickerRootEmits>()
89
88
  const {
90
- locale,
89
+ locale: propLocale,
91
90
  disabled,
92
91
  readonly,
93
92
  pagedNavigation,
94
- weekStartsOn,
95
93
  weekdayFormat,
96
94
  fixedWeeks,
97
95
  numberOfMonths,
@@ -115,6 +113,8 @@ const {
115
113
  } = toRefs(props)
116
114
 
117
115
  const dir = useDirection(propDir)
116
+ const locale = useLocale(propLocale)
117
+ const weekStartsOn = computed(() => props.weekStartsOn ?? getWeekStartsOn(locale.value))
118
118
 
119
119
  const modelValue = useVModel(props, 'modelValue', emits, {
120
120
  defaultValue: defaultValue.value,
@@ -125,7 +125,7 @@ const defaultDate = computed(() => getDefaultDate({
125
125
  defaultPlaceholder: props.placeholder,
126
126
  granularity: props.granularity,
127
127
  defaultValue: modelValue.value,
128
- locale: props.locale,
128
+ locale: locale.value,
129
129
  }))
130
130
 
131
131
  const placeholder = useVModel(props, 'placeholder', emits, {
@@ -1,14 +1,14 @@
1
- export { default as DatePickerAnchor } from './DatePickerAnchor.vue'
1
+ export { default as DatePickerAnchor, type DatePickerAnchorProps } from './DatePickerAnchor.vue'
2
2
 
3
- export { default as DatePickerArrow } from './DatePickerArrow.vue'
3
+ export { default as DatePickerArrow, type DatePickerArrowProps } from './DatePickerArrow.vue'
4
4
  export { default as DatePickerCalendar } from './DatePickerCalendar.vue'
5
5
 
6
6
  export { default as DatePickerCell, type DatePickerCellProps } from './DatePickerCell.vue'
7
7
 
8
8
  export { default as DatePickerCellTrigger, type DatePickerCellTriggerProps } from './DatePickerCellTrigger.vue'
9
- export { default as DatePickerClose } from './DatePickerClose.vue'
9
+ export { default as DatePickerClose, type DatePickerCloseProps } from './DatePickerClose.vue'
10
10
 
11
- export { default as DatePickerContent, type DatePickerContentProps } from './DatePickerContent.vue'
11
+ export { default as DatePickerContent, type DatePickerContentEmits, type DatePickerContentProps } from './DatePickerContent.vue'
12
12
  export { default as DatePickerField } from './DatePickerField.vue'
13
13
 
14
14
  export { default as DatePickerGrid, type DatePickerGridProps } from './DatePickerGrid.vue'
@@ -3,11 +3,12 @@ import type { DateValue } from '@internationalized/date'
3
3
 
4
4
  import type { Ref } from 'vue'
5
5
  import type { DateRangeFieldRoot, DateRangeFieldRootProps, PopoverRootEmits, PopoverRootProps, RangeCalendarRootProps } from '..'
6
- import type { Matcher, WeekDayFormat } from '@/date'
6
+ import type { Matcher, WeekDayFormat, WeekStartsOn } from '@/date'
7
7
  import type { DateRange, DateStep, Granularity, HourCycle } from '@/shared/date'
8
8
 
9
9
  import type { Direction } from '@/shared/types'
10
- import { createContext, useDirection } from '@/shared'
10
+ import { getWeekStartsOn } from '@/date'
11
+ import { createContext, useDirection, useLocale } from '@/shared'
11
12
  import { getDefaultDate } from '@/shared/date'
12
13
  import { PopoverRoot } from '..'
13
14
 
@@ -26,7 +27,7 @@ type DateRangePickerRootContext = {
26
27
  placeholder: Ref<DateValue>
27
28
  pagedNavigation: Ref<boolean>
28
29
  preventDeselect: Ref<boolean>
29
- weekStartsOn: Ref<0 | 1 | 2 | 3 | 4 | 5 | 6>
30
+ weekStartsOn: Ref<WeekStartsOn>
30
31
  weekdayFormat: Ref<WeekDayFormat>
31
32
  fixedWeeks: Ref<boolean>
32
33
  numberOfMonths: Ref<number>
@@ -54,7 +55,7 @@ export type DateRangePickerRootProps = Omit<DateRangeFieldRootProps, 'as' | 'asC
54
55
  closeOnSelect?: boolean
55
56
  }
56
57
 
57
- export type DateRangePickerRootEmits = {
58
+ export type DateRangePickerRootEmits = PopoverRootEmits & {
58
59
  /** Event handler called whenever the model value changes */
59
60
  'update:modelValue': [date: DateRange]
60
61
  /** Event handler called whenever the placeholder value changes */
@@ -69,7 +70,7 @@ export const [injectDateRangePickerRootContext, provideDateRangePickerRootContex
69
70
 
70
71
  <script setup lang="ts">
71
72
  import { useVModel } from '@vueuse/core'
72
- import { ref, toRefs, watch } from 'vue'
73
+ import { computed, ref, toRefs, watch } from 'vue'
73
74
 
74
75
  defineOptions({
75
76
  inheritAttrs: false,
@@ -81,14 +82,12 @@ const props = withDefaults(defineProps<DateRangePickerRootProps>(), {
81
82
  modal: false,
82
83
  pagedNavigation: false,
83
84
  preventDeselect: false,
84
- weekStartsOn: 0,
85
85
  weekdayFormat: 'narrow',
86
86
  fixedWeeks: false,
87
87
  numberOfMonths: 1,
88
88
  disabled: false,
89
89
  readonly: false,
90
90
  placeholder: undefined,
91
- locale: 'en',
92
91
  isDateDisabled: undefined,
93
92
  isDateUnavailable: undefined,
94
93
  isDateHighlightable: undefined,
@@ -96,13 +95,12 @@ const props = withDefaults(defineProps<DateRangePickerRootProps>(), {
96
95
  maximumDays: undefined,
97
96
  closeOnSelect: false,
98
97
  })
99
- const emits = defineEmits<DateRangePickerRootEmits & PopoverRootEmits>()
98
+ const emits = defineEmits<DateRangePickerRootEmits>()
100
99
  const {
101
- locale,
100
+ locale: propLocale,
102
101
  disabled,
103
102
  readonly,
104
103
  pagedNavigation,
105
- weekStartsOn,
106
104
  weekdayFormat,
107
105
  fixedWeeks,
108
106
  numberOfMonths,
@@ -129,6 +127,8 @@ const {
129
127
  } = toRefs(props)
130
128
 
131
129
  const dir = useDirection(propsDir)
130
+ const locale = useLocale(propLocale)
131
+ const weekStartsOn = computed(() => props.weekStartsOn ?? getWeekStartsOn(locale.value))
132
132
 
133
133
  const modelValue = useVModel(props, 'modelValue', emits, {
134
134
  defaultValue: props.defaultValue ?? { start: undefined, end: undefined },
@@ -139,7 +139,7 @@ const defaultDate = getDefaultDate({
139
139
  defaultPlaceholder: props.placeholder,
140
140
  granularity: props.granularity,
141
141
  defaultValue: modelValue.value?.start,
142
- locale: props.locale,
142
+ locale: locale.value,
143
143
  })
144
144
 
145
145
  const placeholder = useVModel(props, 'placeholder', emits, {
@@ -1,14 +1,14 @@
1
- export { default as DateRangePickerAnchor } from './DateRangePickerAnchor.vue'
1
+ export { default as DateRangePickerAnchor, type DateRangePickerAnchorProps } from './DateRangePickerAnchor.vue'
2
2
 
3
- export { default as DateRangePickerArrow } from './DateRangePickerArrow.vue'
3
+ export { default as DateRangePickerArrow, type DateRangePickerArrowProps } from './DateRangePickerArrow.vue'
4
4
  export { default as DateRangePickerCalendar } from './DateRangePickerCalendar.vue'
5
5
 
6
6
  export { default as DateRangePickerCell, type DateRangePickerCellProps } from './DateRangePickerCell.vue'
7
7
 
8
8
  export { default as DateRangePickerCellTrigger, type DateRangePickerCellTriggerProps } from './DateRangePickerCellTrigger.vue'
9
- export { default as DateRangePickerClose } from './DateRangePickerClose.vue'
9
+ export { default as DateRangePickerClose, type DateRangePickerCloseProps } from './DateRangePickerClose.vue'
10
10
 
11
- export { default as DateRangePickerContent, type DateRangePickerContentProps } from './DateRangePickerContent.vue'
11
+ export { default as DateRangePickerContent, type DateRangePickerContentEmits, type DateRangePickerContentProps } from './DateRangePickerContent.vue'
12
12
  export { default as DateRangePickerField } from './DateRangePickerField.vue'
13
13
 
14
14
  export { default as DateRangePickerGrid, type DateRangePickerGridProps } from './DateRangePickerGrid.vue'
@@ -45,7 +45,7 @@ watch(context.isEditing, (value) => {
45
45
  })
46
46
 
47
47
  function handleSubmitKeyDown(event: KeyboardEvent) {
48
- if ((context.submitMode.value === 'enter' || context.submitMode.value === 'both') && event.key === kbd.ENTER && !event.shiftKey && !event.metaKey)
48
+ if ((context.submitMode.value === 'enter' || context.submitMode.value === 'both') && event.key === kbd.ENTER && !event.shiftKey && !event.metaKey && !event.isComposing)
49
49
  context.submit()
50
50
  }
51
51
  </script>
@@ -37,7 +37,7 @@ export interface FocusScopeProps extends PrimitiveProps {
37
37
  import { isClient } from '@vueuse/shared'
38
38
  import { nextTick, reactive, ref, watchEffect } from 'vue'
39
39
  import { Primitive } from '@/Primitive'
40
- import { createFocusScopesStack, removeLinks } from './stack'
40
+ import { createFocusScopesStack } from './stack'
41
41
  import {
42
42
  AUTOFOCUS_ON_MOUNT,
43
43
  AUTOFOCUS_ON_UNMOUNT,
@@ -152,7 +152,7 @@ watchEffect(async (cleanupFn) => {
152
152
  container.dispatchEvent(mountEvent)
153
153
 
154
154
  if (!mountEvent.defaultPrevented) {
155
- focusFirst(removeLinks(getTabbableCandidates(container)), {
155
+ focusFirst(getTabbableCandidates(container), {
156
156
  select: true,
157
157
  })
158
158
  if (getActiveElement() === previouslyFocusedElement)
@@ -7,7 +7,7 @@ import { Primitive } from '..'
7
7
  import { injectListboxRootContext } from './ListboxRoot.vue'
8
8
 
9
9
  export interface ListboxFilterProps extends PrimitiveProps {
10
- /** The controlled value of the filter. Can be binded with with v-model. */
10
+ /** The controlled value of the filter. Can be binded with v-model. */
11
11
  modelValue?: string
12
12
  /** Focus on element when mounted. */
13
13
  autoFocus?: boolean
@@ -40,7 +40,7 @@ export const [injectListboxRootContext, provideListboxRootContext]
40
40
  = createContext<ListboxRootContext<AcceptableValue>>('ListboxRoot')
41
41
 
42
42
  export interface ListboxRootProps<T = AcceptableValue> extends PrimitiveProps, FormFieldProps {
43
- /** The controlled value of the listbox. Can be binded with with `v-model`. */
43
+ /** The controlled value of the listbox. Can be binded with `v-model`. */
44
44
  modelValue?: T | Array<T>
45
45
  /** The value of the listbox when initially rendered. Use when you do not need to control the state of the Listbox */
46
46
  defaultValue?: T | Array<T>
@@ -173,6 +173,7 @@ function changeHighlight(el: HTMLElement, scrollIntoView = true) {
173
173
 
174
174
  function highlightItem(value: T) {
175
175
  if (isVirtual.value) {
176
+ // @ts-expect-error known type issue https://github.com/vueuse/vueuse/issues/4610
176
177
  virtualHighlightHook.trigger(value)
177
178
  }
178
179
  else {
@@ -1,21 +1,22 @@
1
1
  <script lang="ts">
2
2
  import type { Ref } from 'vue'
3
3
  import type { MenuGroupProps } from './MenuGroup.vue'
4
+ import type { AcceptableValue } from '@/shared/types'
4
5
  import { createContext, useForwardProps } from '@/shared'
5
6
 
6
7
  interface MenuRadioGroupContext {
7
- modelValue: Ref<string>
8
- onValueChange: (payload: string) => void
8
+ modelValue: Ref<AcceptableValue>
9
+ onValueChange: (payload: AcceptableValue) => void
9
10
  }
10
11
 
11
12
  export interface MenuRadioGroupProps extends MenuGroupProps {
12
13
  /** The value of the selected item in the group. */
13
- modelValue?: string
14
+ modelValue?: AcceptableValue
14
15
  }
15
16
 
16
17
  export type MenuRadioGroupEmits = {
17
18
  /** Event handler called when the value changes. */
18
- 'update:modelValue': [payload: string]
19
+ 'update:modelValue': [payload: AcceptableValue]
19
20
  }
20
21
 
21
22
  export const [injectMenuRadioGroupContext, provideMenuRadioGroupContext]
@@ -3,6 +3,7 @@ import type {
3
3
  MenuItemEmits,
4
4
  MenuItemProps,
5
5
  } from './MenuItem.vue'
6
+ import type { AcceptableValue } from '@/shared/types'
6
7
  import { reactiveOmit } from '@vueuse/shared'
7
8
  import { useForwardProps } from '@/shared'
8
9
 
@@ -10,7 +11,7 @@ export type MenuRadioItemEmits = MenuItemEmits
10
11
 
11
12
  export interface MenuRadioItemProps extends MenuItemProps {
12
13
  /** The unique value of the item. */
13
- value: string
14
+ value: AcceptableValue
14
15
  }
15
16
  </script>
16
17
 
@@ -5,6 +5,7 @@ import type { Direction, Orientation } from './utils'
5
5
  import type { PrimitiveProps } from '@/Primitive'
6
6
  import { useCollection } from '@/Collection'
7
7
  import { createContext, useDirection, useForwardExpose, useId } from '@/shared'
8
+ import { EVENT_ROOT_CONTENT_DISMISS } from './utils'
8
9
 
9
10
  export interface NavigationMenuRootProps extends PrimitiveProps {
10
11
  /** The controlled value of the menu item to activate. Can be used as `v-model`. */
@@ -91,7 +92,7 @@ export const [injectNavigationMenuContext, provideNavigationMenuContext]
91
92
  </script>
92
93
 
93
94
  <script setup lang="ts">
94
- import { refAutoReset, useDebounceFn, useVModel } from '@vueuse/core'
95
+ import { refAutoReset, useDebounceFn, useEventListener, useVModel } from '@vueuse/core'
95
96
  import {
96
97
  computed,
97
98
  ref,
@@ -164,6 +165,8 @@ watchEffect(() => {
164
165
  )
165
166
  })
166
167
 
168
+ useEventListener(rootNavigationMenu, EVENT_ROOT_CONTENT_DISMISS, onItemDismiss)
169
+
167
170
  provideNavigationMenuContext({
168
171
  isRootMenu: true,
169
172
  modelValue,
@@ -203,18 +206,19 @@ provideNavigationMenuContext({
203
206
  previousValue.value = modelValue.value
204
207
  modelValue.value = val
205
208
  },
206
- onItemDismiss: () => {
207
- previousValue.value = modelValue.value
208
- modelValue.value = ''
209
- },
209
+ onItemDismiss,
210
210
  })
211
+
212
+ function onItemDismiss() {
213
+ previousValue.value = modelValue.value
214
+ modelValue.value = ''
215
+ }
211
216
  </script>
212
217
 
213
218
  <template>
214
219
  <CollectionSlot>
215
220
  <Primitive
216
221
  :ref="forwardRef"
217
- aria-label="Main"
218
222
  :as="as"
219
223
  :as-child="asChild"
220
224
  :data-orientation="orientation"
@@ -17,6 +17,8 @@ export interface NumberFieldRootProps extends PrimitiveProps, FormFieldProps {
17
17
  step?: number
18
18
  /** When `false`, prevents the value from snapping to the nearest increment of the step value */
19
19
  stepSnapping?: boolean
20
+ /** When `true`, the input will be focused when the value changes. */
21
+ focusOnChange?: boolean
20
22
  /** Formatting options for the value displayed in the number field. This also affects what characters are allowed to be typed by the user. */
21
23
  formatOptions?: Intl.NumberFormatOptions
22
24
  /** The locale to use for formatting and currencies */
@@ -76,6 +78,7 @@ const props = withDefaults(defineProps<NumberFieldRootProps>(), {
76
78
  defaultValue: undefined,
77
79
  step: 1,
78
80
  stepSnapping: true,
81
+ focusOnChange: true,
79
82
  })
80
83
  const emits = defineEmits<NumberFieldRootEmits>()
81
84
  const { disabled, readonly, disableWheelChange, invertWheelChange, min, max, step, stepSnapping, formatOptions, id, locale: propLocale } = toRefs(props)
@@ -109,7 +112,9 @@ const isIncreaseDisabled = computed(() => (
109
112
  )
110
113
 
111
114
  function handleChangingValue(type: 'increase' | 'decrease', multiplier = 1) {
112
- inputEl.value?.focus()
115
+ if (props.focusOnChange) {
116
+ inputEl.value?.focus()
117
+ }
113
118
  if (props.disabled || props.readonly)
114
119
  return
115
120
  const currentInputValue = numberParser.parse(inputEl.value?.value ?? '')