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
@@ -1,10 +1,13 @@
1
- import type { CalendarDateTime, CycleTimeOptions, DateFields, DateValue, TimeFields } from '@internationalized/date'
1
+ import type { CalendarDateTime, DateFields, DateValue, TimeFields } from '@internationalized/date'
2
2
  import type { Ref } from 'vue'
3
3
  import type { AnyExceptLiteral, DateStep, HourCycle, SegmentPart, SegmentValueObj } from './types'
4
4
  import type { Formatter } from '@/shared'
5
+ import {
6
+ DateFormatter,
7
+ } from '@internationalized/date'
5
8
  import { computed } from 'vue'
6
9
  import { getDaysInMonth, toDate } from '@/date'
7
- import { useKbd } from '@/shared'
10
+ import { snapValueToStep, useKbd } from '@/shared'
8
11
  import { isAcceptableSegmentKey, isNumberString, isSegmentNavigationKey } from './segment'
9
12
 
10
13
  type MinuteSecondIncrementProps = {
@@ -19,7 +22,6 @@ type DateTimeValueIncrementation = {
19
22
  part: keyof Omit<DateFields, 'era'> | keyof TimeFields
20
23
  dateRef: DateValue
21
24
  prevValue: number | null
22
- hourCycle?: HourCycle
23
25
  }
24
26
 
25
27
  type SegmentAttrProps = {
@@ -282,6 +284,7 @@ export type UseDateFieldProps = {
282
284
  placeholder: Ref<DateValue>
283
285
  hourCycle: HourCycle
284
286
  step: Ref<DateStep>
287
+ stepSnapping?: Ref<boolean>
285
288
  formatter: Formatter
286
289
  segmentValues: Ref<SegmentValueObj>
287
290
  disabled: Ref<boolean>
@@ -320,7 +323,7 @@ export function useDateField(props: UseDateFieldProps) {
320
323
 
321
324
  return Number.parseInt(str.slice(0, -1))
322
325
  }
323
- function dateTimeValueIncrementation({ e, part, dateRef, prevValue, hourCycle }: DateTimeValueIncrementation): number {
326
+ function dateTimeValueIncrementation({ e, part, dateRef, prevValue }: DateTimeValueIncrementation): number {
324
327
  const step = props.step.value[part] ?? 1
325
328
  const sign = e.key === kbd.ARROW_UP ? step : -step
326
329
 
@@ -328,7 +331,9 @@ export function useDateField(props: UseDateFieldProps) {
328
331
  return dateRef[part as keyof Omit<DateFields, 'era'>]
329
332
 
330
333
  if (part === 'hour' && 'hour' in dateRef) {
331
- const cycleArgs: [keyof DateFields | keyof TimeFields, number, CycleTimeOptions?] = [part, sign, { hourCycle }]
334
+ // Don't pass hourCycle to cycle - internal representation is always 24-hour
335
+ // The hourCycle prop only affects display, not internal cycling
336
+ const cycleArgs: [keyof DateFields | keyof TimeFields, number] = [part, sign]
332
337
  return dateRef.set({ [part as keyof DateValue]: prevValue }).cycle(...cycleArgs)[part]
333
338
  }
334
339
 
@@ -507,8 +512,7 @@ export function useDateField(props: UseDateFieldProps) {
507
512
  return { value: total, moveToNext }
508
513
  }
509
514
 
510
- function updateHour(num: number, prev: number | null) {
511
- const max = 24
515
+ function updateHour(max: number, num: number, prev: number | null) {
512
516
  let moveToNext = false
513
517
  const maxStart = Math.floor(max / 10)
514
518
 
@@ -714,6 +718,11 @@ export function useDateField(props: UseDateFieldProps) {
714
718
  }
715
719
  }
716
720
 
721
+ function uses12HourFormat(locale: string): boolean {
722
+ const hourCycle = new DateFormatter(locale, { hour: 'numeric' }).resolvedOptions().hourCycle
723
+ return hourCycle === 'h11' || hourCycle === 'h12'
724
+ }
725
+
717
726
  function handleHourSegmentKeydown(e: KeyboardEvent) {
718
727
  const dateRef = props.placeholder.value
719
728
  if (!isAcceptableSegmentKey(e.key) || isSegmentNavigationKey(e.key) || !('hour' in dateRef) || !('hour' in props.segmentValues.value))
@@ -721,16 +730,14 @@ export function useDateField(props: UseDateFieldProps) {
721
730
 
722
731
  const prevValue = props.segmentValues.value.hour
723
732
 
724
- const hourCycle = props.hourCycle
725
-
726
733
  if (e.key === kbd.ARROW_UP || e.key === kbd.ARROW_DOWN) {
727
- props.segmentValues.value.hour = dateTimeValueIncrementation({ e, part: 'hour', dateRef: props.placeholder.value, prevValue, hourCycle })
734
+ const newHour = dateTimeValueIncrementation({ e, part: 'hour', dateRef: props.placeholder.value, prevValue })
735
+ props.segmentValues.value.hour = newHour
728
736
 
729
- if ('dayPeriod' in props.segmentValues.value) {
730
- if (props.segmentValues.value.hour < 12)
731
- props.segmentValues.value.dayPeriod = 'AM'
732
- else if (props.segmentValues.value.hour)
733
- props.segmentValues.value.dayPeriod = 'PM'
737
+ if ('dayPeriod' in props.segmentValues.value && newHour !== null) {
738
+ // Determine AM/PM based on internal 24-hour value
739
+ // Hour 0-11 = AM, Hour 12-23 = PM
740
+ props.segmentValues.value.dayPeriod = newHour >= 12 ? 'PM' : 'AM'
734
741
  }
735
742
 
736
743
  return
@@ -738,14 +745,31 @@ export function useDateField(props: UseDateFieldProps) {
738
745
 
739
746
  if (isNumberString(e.key)) {
740
747
  const num = Number.parseInt(e.key)
741
- const { value, moveToNext } = updateHour(num, prevValue)
748
+ const is12Hour = props.hourCycle !== undefined
749
+ ? props.hourCycle === 12
750
+ : uses12HourFormat(props.formatter.getLocale())
751
+ const max = is12Hour ? 12 : 24
752
+
753
+ let displayPrev = prevValue
754
+ if (is12Hour && prevValue !== null) {
755
+ displayPrev = prevValue === 0 ? 12 : (prevValue > 12 ? prevValue - 12 : prevValue)
756
+ }
742
757
 
743
- if ('dayPeriod' in props.segmentValues.value && value && value > 12)
744
- props.segmentValues.value.dayPeriod = 'PM'
745
- else if ('dayPeriod' in props.segmentValues.value && value)
746
- props.segmentValues.value.dayPeriod = 'AM'
758
+ const { value, moveToNext } = updateHour(max, num, displayPrev)
759
+
760
+ // Convert display hour back to internal 24-hour format
761
+ let internalValue = value
762
+ if (is12Hour && value !== null) {
763
+ const period = props.segmentValues.value.dayPeriod || 'AM'
764
+ if (value === 12) {
765
+ internalValue = period === 'AM' ? 0 : 12
766
+ }
767
+ else {
768
+ internalValue = period === 'PM' ? value + 12 : value
769
+ }
770
+ }
747
771
 
748
- props.segmentValues.value.hour = value
772
+ props.segmentValues.value.hour = internalValue
749
773
 
750
774
  if (moveToNext)
751
775
  props.focusNext()
@@ -881,9 +905,36 @@ export function useDateField(props: UseDateFieldProps) {
881
905
  }
882
906
  }
883
907
 
908
+ function handleSegmentFocusOut() {
909
+ if (!props.stepSnapping?.value)
910
+ return
911
+
912
+ if (props.part === 'hour' && 'hour' in props.segmentValues.value && props.segmentValues.value.hour !== null && props.step.value.hour && props.step.value.hour > 1) {
913
+ props.segmentValues.value.hour = snapValueToStep(props.segmentValues.value.hour, 0, 23, props.step.value.hour)
914
+ if ('dayPeriod' in props.segmentValues.value) {
915
+ if (props.segmentValues.value.hour < 12)
916
+ props.segmentValues.value.dayPeriod = 'AM'
917
+ else if (props.segmentValues.value.hour)
918
+ props.segmentValues.value.dayPeriod = 'PM'
919
+ }
920
+ }
921
+ else if (props.part === 'minute' && 'minute' in props.segmentValues.value && props.segmentValues.value.minute !== null && props.step.value.minute && props.step.value.minute > 1) {
922
+ props.segmentValues.value.minute = snapValueToStep(props.segmentValues.value.minute, 0, 59, props.step.value.minute)
923
+ }
924
+ else if (props.part === 'second' && 'second' in props.segmentValues.value && props.segmentValues.value.second !== null && props.step.value.second && props.step.value.second > 1) {
925
+ props.segmentValues.value.second = snapValueToStep(props.segmentValues.value.second, 0, 59, props.step.value.second)
926
+ }
927
+
928
+ if (Object.values(props.segmentValues.value).every(item => item !== null)) {
929
+ const dateRef = props.placeholder.value.set({ ...props.segmentValues.value as Record<AnyExceptLiteral, number> })
930
+ props.modelValue.value = dateRef.copy()
931
+ }
932
+ }
933
+
884
934
  return {
885
935
  handleSegmentClick,
886
936
  handleSegmentKeydown,
937
+ handleSegmentFocusOut,
887
938
  attributes,
888
939
  }
889
940
  }
@@ -2,7 +2,7 @@ export * from './arrays'
2
2
  export * from './browser'
3
3
  export * from './clamp'
4
4
  export { createContext } from './createContext'
5
- export { type DateRange, type DateStep, type DateValue, type SegmentPart } from './date'
5
+ export { type DateRange, type DateStep, type DateValue, type SegmentPart, type TimeValue } from './date'
6
6
  export { getActiveElement } from './getActiveElement'
7
7
  export { handleAndDispatchCustomEvent } from './handleAndDispatchCustomEvent'
8
8
  export { isValidVNodeElement } from './isValidVNodeElement'
@@ -105,8 +105,8 @@ export function useDateFormatter(initialLocale: string, opts: DateFormatterOptio
105
105
  minute: 'numeric',
106
106
  }).formatToParts(date)
107
107
  const value = parts.find(p => p.type === 'dayPeriod')?.value
108
- // Day period can be "AM"/"PM" or "a.m."/"p.m." in some locales
109
- if (value === 'PM' || value === 'p.m.')
108
+ // Day period can be "AM"/"PM" or "am"/"pm" or "a.m."/"p.m." in some locales
109
+ if (value === 'PM' || value === 'pm' || value === 'p.m.')
110
110
  return 'PM'
111
111
 
112
112
  return 'AM'
@@ -61,7 +61,7 @@ export function useForwardExpose<T extends ComponentPublicInstance>() {
61
61
 
62
62
  // ref not is Element
63
63
  // and `useForwardExpose.test.ts > useForwardRef > should forward plain DOM element ref - 2` Passing in `$el`
64
- if (!(ref instanceof Element) && !Object.hasOwn(ref, '$el')) {
64
+ if (!(ref instanceof Element) && !Object.prototype.hasOwnProperty.call(ref, '$el')) {
65
65
  // Retrieves the `exposed` data that has not been unwrapped by `vue` from `$.exposed`.
66
66
  const childExposed = ref.$.exposed
67
67
  const merged = Object.assign({}, ret)
@@ -25,7 +25,7 @@ export function useGraceArea(triggerElement: Ref<HTMLElement | undefined>, conta
25
25
  const currentTarget = event.currentTarget as HTMLElement
26
26
  const exitPoint = { x: event.clientX, y: event.clientY }
27
27
  const exitSide = getExitSideFromRect(exitPoint, currentTarget.getBoundingClientRect())
28
- const paddedExitPoints = getPaddedExitPoints(exitPoint, exitSide)
28
+ const paddedExitPoints = getPaddedExitPoints(exitPoint, exitSide, 1)
29
29
  const hoverTargetPoints = getPointsFromRect(hoverTarget.getBoundingClientRect())
30
30
  const graceArea = getHull([...paddedExitPoints, ...hoverTargetPoints])
31
31
  pointerGraceArea.value = graceArea