reka-ui 2.2.1 → 2.3.1

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 (568) hide show
  1. package/dist/Accordion/AccordionItem.cjs.map +1 -1
  2. package/dist/Accordion/AccordionItem.js.map +1 -1
  3. package/dist/Accordion/AccordionRoot.cjs.map +1 -1
  4. package/dist/Accordion/AccordionRoot.js.map +1 -1
  5. package/dist/AlertDialog/AlertDialogCancel.cjs.map +1 -1
  6. package/dist/AlertDialog/AlertDialogCancel.js.map +1 -1
  7. package/dist/AlertDialog/AlertDialogContent.cjs.map +1 -1
  8. package/dist/AlertDialog/AlertDialogContent.js.map +1 -1
  9. package/dist/AspectRatio/AspectRatio.cjs.map +1 -1
  10. package/dist/AspectRatio/AspectRatio.js.map +1 -1
  11. package/dist/Avatar/AvatarFallback.cjs +11 -14
  12. package/dist/Avatar/AvatarFallback.cjs.map +1 -1
  13. package/dist/Avatar/AvatarFallback.js +12 -15
  14. package/dist/Avatar/AvatarFallback.js.map +1 -1
  15. package/dist/Avatar/AvatarImage.cjs +3 -2
  16. package/dist/Avatar/AvatarImage.cjs.map +1 -1
  17. package/dist/Avatar/AvatarImage.js +3 -2
  18. package/dist/Avatar/AvatarImage.js.map +1 -1
  19. package/dist/Avatar/AvatarRoot.cjs +1 -1
  20. package/dist/Avatar/AvatarRoot.cjs.map +1 -1
  21. package/dist/Avatar/AvatarRoot.js +1 -1
  22. package/dist/Avatar/AvatarRoot.js.map +1 -1
  23. package/dist/Avatar/utils.cjs +43 -16
  24. package/dist/Avatar/utils.cjs.map +1 -1
  25. package/dist/Avatar/utils.js +44 -17
  26. package/dist/Avatar/utils.js.map +1 -1
  27. package/dist/Calendar/CalendarCell.cjs +2 -2
  28. package/dist/Calendar/CalendarCell.cjs.map +1 -1
  29. package/dist/Calendar/CalendarCell.js +2 -2
  30. package/dist/Calendar/CalendarCell.js.map +1 -1
  31. package/dist/Calendar/CalendarCellTrigger.cjs +5 -1
  32. package/dist/Calendar/CalendarCellTrigger.cjs.map +1 -1
  33. package/dist/Calendar/CalendarCellTrigger.js +5 -1
  34. package/dist/Calendar/CalendarCellTrigger.js.map +1 -1
  35. package/dist/Calendar/CalendarGrid.cjs.map +1 -1
  36. package/dist/Calendar/CalendarGrid.js.map +1 -1
  37. package/dist/Calendar/CalendarHeading.cjs.map +1 -1
  38. package/dist/Calendar/CalendarHeading.js.map +1 -1
  39. package/dist/Calendar/CalendarNext.cjs.map +1 -1
  40. package/dist/Calendar/CalendarNext.js.map +1 -1
  41. package/dist/Calendar/CalendarPrev.cjs.map +1 -1
  42. package/dist/Calendar/CalendarPrev.js.map +1 -1
  43. package/dist/Calendar/CalendarRoot.cjs +7 -4
  44. package/dist/Calendar/CalendarRoot.cjs.map +1 -1
  45. package/dist/Calendar/CalendarRoot.js +7 -4
  46. package/dist/Calendar/CalendarRoot.js.map +1 -1
  47. package/dist/Calendar/useCalendar.cjs +2 -2
  48. package/dist/Calendar/useCalendar.cjs.map +1 -1
  49. package/dist/Calendar/useCalendar.js +2 -2
  50. package/dist/Calendar/useCalendar.js.map +1 -1
  51. package/dist/Checkbox/CheckboxGroupRoot.cjs.map +1 -1
  52. package/dist/Checkbox/CheckboxGroupRoot.js.map +1 -1
  53. package/dist/Checkbox/CheckboxRoot.cjs.map +1 -1
  54. package/dist/Checkbox/CheckboxRoot.js.map +1 -1
  55. package/dist/Collapsible/CollapsibleContent.cjs.map +1 -1
  56. package/dist/Collapsible/CollapsibleContent.js.map +1 -1
  57. package/dist/Collapsible/CollapsibleRoot.cjs +2 -0
  58. package/dist/Collapsible/CollapsibleRoot.cjs.map +1 -1
  59. package/dist/Collapsible/CollapsibleRoot.js +2 -0
  60. package/dist/Collapsible/CollapsibleRoot.js.map +1 -1
  61. package/dist/Collection/Collection.cjs.map +1 -1
  62. package/dist/Collection/Collection.js.map +1 -1
  63. package/dist/Combobox/ComboboxContentImpl.cjs +1 -1
  64. package/dist/Combobox/ComboboxContentImpl.cjs.map +1 -1
  65. package/dist/Combobox/ComboboxContentImpl.js +1 -1
  66. package/dist/Combobox/ComboboxContentImpl.js.map +1 -1
  67. package/dist/Combobox/ComboboxGroup.cjs.map +1 -1
  68. package/dist/Combobox/ComboboxGroup.js.map +1 -1
  69. package/dist/Combobox/ComboboxInput.cjs.map +1 -1
  70. package/dist/Combobox/ComboboxInput.js.map +1 -1
  71. package/dist/Combobox/ComboboxItem.cjs.map +1 -1
  72. package/dist/Combobox/ComboboxItem.js.map +1 -1
  73. package/dist/Combobox/ComboboxRoot.cjs +1 -2
  74. package/dist/Combobox/ComboboxRoot.cjs.map +1 -1
  75. package/dist/Combobox/ComboboxRoot.js +1 -2
  76. package/dist/Combobox/ComboboxRoot.js.map +1 -1
  77. package/dist/Combobox/ComboboxTrigger.cjs.map +1 -1
  78. package/dist/Combobox/ComboboxTrigger.js.map +1 -1
  79. package/dist/Combobox/ComboboxViewport.cjs.map +1 -1
  80. package/dist/Combobox/ComboboxViewport.js.map +1 -1
  81. package/dist/Combobox/ComboboxVirtualizer.cjs.map +1 -1
  82. package/dist/Combobox/ComboboxVirtualizer.js.map +1 -1
  83. package/dist/ConfigProvider/ConfigProvider.cjs.map +1 -1
  84. package/dist/ConfigProvider/ConfigProvider.js.map +1 -1
  85. package/dist/ContextMenu/ContextMenuContent.cjs.map +1 -1
  86. package/dist/ContextMenu/ContextMenuContent.js.map +1 -1
  87. package/dist/ContextMenu/ContextMenuRoot.cjs.map +1 -1
  88. package/dist/ContextMenu/ContextMenuRoot.js.map +1 -1
  89. package/dist/ContextMenu/ContextMenuSub.cjs +1 -1
  90. package/dist/ContextMenu/ContextMenuSub.cjs.map +1 -1
  91. package/dist/ContextMenu/ContextMenuSub.js +1 -1
  92. package/dist/ContextMenu/ContextMenuSub.js.map +1 -1
  93. package/dist/ContextMenu/ContextMenuTrigger.cjs.map +1 -1
  94. package/dist/ContextMenu/ContextMenuTrigger.js.map +1 -1
  95. package/dist/DateField/DateFieldInput.cjs +1 -0
  96. package/dist/DateField/DateFieldInput.cjs.map +1 -1
  97. package/dist/DateField/DateFieldInput.js +1 -0
  98. package/dist/DateField/DateFieldInput.js.map +1 -1
  99. package/dist/DateField/DateFieldRoot.cjs +7 -1
  100. package/dist/DateField/DateFieldRoot.cjs.map +1 -1
  101. package/dist/DateField/DateFieldRoot.js +7 -1
  102. package/dist/DateField/DateFieldRoot.js.map +1 -1
  103. package/dist/DatePicker/DatePickerCellTrigger.cjs.map +1 -1
  104. package/dist/DatePicker/DatePickerCellTrigger.js.map +1 -1
  105. package/dist/DatePicker/DatePickerContent.cjs +8 -3
  106. package/dist/DatePicker/DatePickerContent.cjs.map +1 -1
  107. package/dist/DatePicker/DatePickerContent.js +9 -4
  108. package/dist/DatePicker/DatePickerContent.js.map +1 -1
  109. package/dist/DatePicker/DatePickerHeading.cjs.map +1 -1
  110. package/dist/DatePicker/DatePickerHeading.js.map +1 -1
  111. package/dist/DatePicker/DatePickerNext.cjs.map +1 -1
  112. package/dist/DatePicker/DatePickerNext.js.map +1 -1
  113. package/dist/DatePicker/DatePickerPrev.cjs.map +1 -1
  114. package/dist/DatePicker/DatePickerPrev.js.map +1 -1
  115. package/dist/DatePicker/DatePickerRoot.cjs +1 -0
  116. package/dist/DatePicker/DatePickerRoot.cjs.map +1 -1
  117. package/dist/DatePicker/DatePickerRoot.js +1 -0
  118. package/dist/DatePicker/DatePickerRoot.js.map +1 -1
  119. package/dist/DateRangeField/DateRangeFieldInput.cjs +1 -0
  120. package/dist/DateRangeField/DateRangeFieldInput.cjs.map +1 -1
  121. package/dist/DateRangeField/DateRangeFieldInput.js +1 -0
  122. package/dist/DateRangeField/DateRangeFieldInput.js.map +1 -1
  123. package/dist/DateRangeField/DateRangeFieldRoot.cjs +13 -9
  124. package/dist/DateRangeField/DateRangeFieldRoot.cjs.map +1 -1
  125. package/dist/DateRangeField/DateRangeFieldRoot.js +13 -9
  126. package/dist/DateRangeField/DateRangeFieldRoot.js.map +1 -1
  127. package/dist/DateRangePicker/DateRangePickerCalendar.cjs +2 -1
  128. package/dist/DateRangePicker/DateRangePickerCalendar.cjs.map +1 -1
  129. package/dist/DateRangePicker/DateRangePickerCalendar.js +2 -1
  130. package/dist/DateRangePicker/DateRangePickerCalendar.js.map +1 -1
  131. package/dist/DateRangePicker/DateRangePickerContent.cjs +8 -3
  132. package/dist/DateRangePicker/DateRangePickerContent.cjs.map +1 -1
  133. package/dist/DateRangePicker/DateRangePickerContent.js +9 -4
  134. package/dist/DateRangePicker/DateRangePickerContent.js.map +1 -1
  135. package/dist/DateRangePicker/DateRangePickerHeading.cjs.map +1 -1
  136. package/dist/DateRangePicker/DateRangePickerHeading.js.map +1 -1
  137. package/dist/DateRangePicker/DateRangePickerNext.cjs.map +1 -1
  138. package/dist/DateRangePicker/DateRangePickerNext.js.map +1 -1
  139. package/dist/DateRangePicker/DateRangePickerPrev.cjs.map +1 -1
  140. package/dist/DateRangePicker/DateRangePickerPrev.js.map +1 -1
  141. package/dist/DateRangePicker/DateRangePickerRoot.cjs +6 -2
  142. package/dist/DateRangePicker/DateRangePickerRoot.cjs.map +1 -1
  143. package/dist/DateRangePicker/DateRangePickerRoot.js +6 -2
  144. package/dist/DateRangePicker/DateRangePickerRoot.js.map +1 -1
  145. package/dist/Dialog/DialogContentImpl.cjs +1 -1
  146. package/dist/Dialog/DialogContentImpl.cjs.map +1 -1
  147. package/dist/Dialog/DialogContentImpl.js +1 -1
  148. package/dist/Dialog/DialogContentImpl.js.map +1 -1
  149. package/dist/Dialog/DialogContentNonModal.cjs.map +1 -1
  150. package/dist/Dialog/DialogContentNonModal.js.map +1 -1
  151. package/dist/Dialog/DialogRoot.cjs +4 -1
  152. package/dist/Dialog/DialogRoot.cjs.map +1 -1
  153. package/dist/Dialog/DialogRoot.js +4 -1
  154. package/dist/Dialog/DialogRoot.js.map +1 -1
  155. package/dist/Dialog/DialogTrigger.cjs.map +1 -1
  156. package/dist/Dialog/DialogTrigger.js.map +1 -1
  157. package/dist/DismissableLayer/DismissableLayer.cjs.map +1 -1
  158. package/dist/DismissableLayer/DismissableLayer.js.map +1 -1
  159. package/dist/DismissableLayer/DismissableLayerBranch.cjs.map +1 -1
  160. package/dist/DismissableLayer/DismissableLayerBranch.js.map +1 -1
  161. package/dist/DismissableLayer/utils.cjs +19 -7
  162. package/dist/DismissableLayer/utils.cjs.map +1 -1
  163. package/dist/DismissableLayer/utils.js +20 -8
  164. package/dist/DismissableLayer/utils.js.map +1 -1
  165. package/dist/DropdownMenu/DropdownMenuContent.cjs.map +1 -1
  166. package/dist/DropdownMenu/DropdownMenuContent.js.map +1 -1
  167. package/dist/DropdownMenu/DropdownMenuRoot.cjs +1 -1
  168. package/dist/DropdownMenu/DropdownMenuRoot.cjs.map +1 -1
  169. package/dist/DropdownMenu/DropdownMenuRoot.js +1 -1
  170. package/dist/DropdownMenu/DropdownMenuRoot.js.map +1 -1
  171. package/dist/DropdownMenu/DropdownMenuSub.cjs +1 -1
  172. package/dist/DropdownMenu/DropdownMenuSub.cjs.map +1 -1
  173. package/dist/DropdownMenu/DropdownMenuSub.js +1 -1
  174. package/dist/DropdownMenu/DropdownMenuSub.js.map +1 -1
  175. package/dist/DropdownMenu/DropdownMenuTrigger.cjs.map +1 -1
  176. package/dist/DropdownMenu/DropdownMenuTrigger.js.map +1 -1
  177. package/dist/Editable/EditableInput.cjs.map +1 -1
  178. package/dist/Editable/EditableInput.js.map +1 -1
  179. package/dist/Editable/EditableRoot.cjs +3 -3
  180. package/dist/Editable/EditableRoot.cjs.map +1 -1
  181. package/dist/Editable/EditableRoot.js +3 -3
  182. package/dist/Editable/EditableRoot.js.map +1 -1
  183. package/dist/FocusScope/FocusScope.cjs.map +1 -1
  184. package/dist/FocusScope/FocusScope.js.map +1 -1
  185. package/dist/HoverCard/HoverCardContentImpl.cjs +1 -1
  186. package/dist/HoverCard/HoverCardContentImpl.cjs.map +1 -1
  187. package/dist/HoverCard/HoverCardContentImpl.js +1 -1
  188. package/dist/HoverCard/HoverCardContentImpl.js.map +1 -1
  189. package/dist/HoverCard/HoverCardRoot.cjs +1 -1
  190. package/dist/HoverCard/HoverCardRoot.cjs.map +1 -1
  191. package/dist/HoverCard/HoverCardRoot.js +1 -1
  192. package/dist/HoverCard/HoverCardRoot.js.map +1 -1
  193. package/dist/Listbox/ListboxFilter.cjs.map +1 -1
  194. package/dist/Listbox/ListboxFilter.js.map +1 -1
  195. package/dist/Listbox/ListboxItem.cjs.map +1 -1
  196. package/dist/Listbox/ListboxItem.js.map +1 -1
  197. package/dist/Listbox/ListboxRoot.cjs +1 -1
  198. package/dist/Listbox/ListboxRoot.cjs.map +1 -1
  199. package/dist/Listbox/ListboxRoot.js +1 -1
  200. package/dist/Listbox/ListboxRoot.js.map +1 -1
  201. package/dist/Listbox/ListboxVirtualizer.cjs +3 -3
  202. package/dist/Listbox/ListboxVirtualizer.cjs.map +1 -1
  203. package/dist/Listbox/ListboxVirtualizer.js +3 -3
  204. package/dist/Listbox/ListboxVirtualizer.js.map +1 -1
  205. package/dist/Menu/MenuCheckboxItem.cjs.map +1 -1
  206. package/dist/Menu/MenuCheckboxItem.js.map +1 -1
  207. package/dist/Menu/MenuContentImpl.cjs +1 -1
  208. package/dist/Menu/MenuContentImpl.cjs.map +1 -1
  209. package/dist/Menu/MenuContentImpl.js +1 -1
  210. package/dist/Menu/MenuContentImpl.js.map +1 -1
  211. package/dist/Menu/MenuItemImpl.cjs.map +1 -1
  212. package/dist/Menu/MenuItemImpl.js.map +1 -1
  213. package/dist/Menu/MenuItemIndicator.cjs.map +1 -1
  214. package/dist/Menu/MenuItemIndicator.js.map +1 -1
  215. package/dist/Menu/MenuRadioGroup.cjs.map +1 -1
  216. package/dist/Menu/MenuRadioGroup.js.map +1 -1
  217. package/dist/Menu/MenuRoot.cjs +1 -1
  218. package/dist/Menu/MenuRoot.cjs.map +1 -1
  219. package/dist/Menu/MenuRoot.js +1 -1
  220. package/dist/Menu/MenuRoot.js.map +1 -1
  221. package/dist/Menu/MenuSub.cjs +1 -1
  222. package/dist/Menu/MenuSub.cjs.map +1 -1
  223. package/dist/Menu/MenuSub.js +1 -1
  224. package/dist/Menu/MenuSub.js.map +1 -1
  225. package/dist/Menu/MenuSubTrigger.cjs.map +1 -1
  226. package/dist/Menu/MenuSubTrigger.js.map +1 -1
  227. package/dist/Menubar/MenubarContent.cjs.map +1 -1
  228. package/dist/Menubar/MenubarContent.js.map +1 -1
  229. package/dist/Menubar/MenubarMenu.cjs.map +1 -1
  230. package/dist/Menubar/MenubarMenu.js.map +1 -1
  231. package/dist/Menubar/MenubarRoot.cjs.map +1 -1
  232. package/dist/Menubar/MenubarRoot.js.map +1 -1
  233. package/dist/Menubar/MenubarSub.cjs +1 -1
  234. package/dist/Menubar/MenubarSub.cjs.map +1 -1
  235. package/dist/Menubar/MenubarSub.js +1 -1
  236. package/dist/Menubar/MenubarSub.js.map +1 -1
  237. package/dist/Menubar/MenubarTrigger.cjs.map +1 -1
  238. package/dist/Menubar/MenubarTrigger.js.map +1 -1
  239. package/dist/NavigationMenu/NavigationMenuContent.cjs.map +1 -1
  240. package/dist/NavigationMenu/NavigationMenuContent.js.map +1 -1
  241. package/dist/NavigationMenu/NavigationMenuContentImpl.cjs +1 -1
  242. package/dist/NavigationMenu/NavigationMenuContentImpl.cjs.map +1 -1
  243. package/dist/NavigationMenu/NavigationMenuContentImpl.js +1 -1
  244. package/dist/NavigationMenu/NavigationMenuContentImpl.js.map +1 -1
  245. package/dist/NavigationMenu/NavigationMenuIndicator.cjs.map +1 -1
  246. package/dist/NavigationMenu/NavigationMenuIndicator.js.map +1 -1
  247. package/dist/NavigationMenu/NavigationMenuItem.cjs.map +1 -1
  248. package/dist/NavigationMenu/NavigationMenuItem.js.map +1 -1
  249. package/dist/NavigationMenu/NavigationMenuList.cjs.map +1 -1
  250. package/dist/NavigationMenu/NavigationMenuList.js.map +1 -1
  251. package/dist/NavigationMenu/NavigationMenuRoot.cjs.map +1 -1
  252. package/dist/NavigationMenu/NavigationMenuRoot.js.map +1 -1
  253. package/dist/NavigationMenu/NavigationMenuSub.cjs.map +1 -1
  254. package/dist/NavigationMenu/NavigationMenuSub.js.map +1 -1
  255. package/dist/NavigationMenu/NavigationMenuTrigger.cjs.map +1 -1
  256. package/dist/NavigationMenu/NavigationMenuTrigger.js.map +1 -1
  257. package/dist/NavigationMenu/NavigationMenuViewport.cjs.map +1 -1
  258. package/dist/NavigationMenu/NavigationMenuViewport.js.map +1 -1
  259. package/dist/NumberField/NumberFieldInput.cjs +2 -2
  260. package/dist/NumberField/NumberFieldInput.cjs.map +1 -1
  261. package/dist/NumberField/NumberFieldInput.js +2 -2
  262. package/dist/NumberField/NumberFieldInput.js.map +1 -1
  263. package/dist/NumberField/NumberFieldRoot.cjs +8 -5
  264. package/dist/NumberField/NumberFieldRoot.cjs.map +1 -1
  265. package/dist/NumberField/NumberFieldRoot.js +8 -5
  266. package/dist/NumberField/NumberFieldRoot.js.map +1 -1
  267. package/dist/Pagination/PaginationFirst.cjs.map +1 -1
  268. package/dist/Pagination/PaginationFirst.js.map +1 -1
  269. package/dist/Pagination/PaginationLast.cjs.map +1 -1
  270. package/dist/Pagination/PaginationLast.js.map +1 -1
  271. package/dist/Pagination/PaginationList.cjs.map +1 -1
  272. package/dist/Pagination/PaginationList.js.map +1 -1
  273. package/dist/Pagination/PaginationListItem.cjs.map +1 -1
  274. package/dist/Pagination/PaginationListItem.js.map +1 -1
  275. package/dist/Pagination/PaginationNext.cjs.map +1 -1
  276. package/dist/Pagination/PaginationNext.js.map +1 -1
  277. package/dist/Pagination/PaginationPrev.cjs.map +1 -1
  278. package/dist/Pagination/PaginationPrev.js.map +1 -1
  279. package/dist/Pagination/PaginationRoot.cjs.map +1 -1
  280. package/dist/Pagination/PaginationRoot.js.map +1 -1
  281. package/dist/PinInput/PinInputInput.cjs +14 -6
  282. package/dist/PinInput/PinInputInput.cjs.map +1 -1
  283. package/dist/PinInput/PinInputInput.js +14 -6
  284. package/dist/PinInput/PinInputInput.js.map +1 -1
  285. package/dist/PinInput/PinInputRoot.cjs +4 -2
  286. package/dist/PinInput/PinInputRoot.cjs.map +1 -1
  287. package/dist/PinInput/PinInputRoot.js +4 -2
  288. package/dist/PinInput/PinInputRoot.js.map +1 -1
  289. package/dist/Popover/PopoverAnchor.cjs.map +1 -1
  290. package/dist/Popover/PopoverAnchor.js.map +1 -1
  291. package/dist/Popover/PopoverContentImpl.cjs +1 -1
  292. package/dist/Popover/PopoverContentImpl.js +1 -1
  293. package/dist/Popover/PopoverContentModal.cjs.map +1 -1
  294. package/dist/Popover/PopoverContentModal.js.map +1 -1
  295. package/dist/Popover/PopoverContentNonModal.cjs.map +1 -1
  296. package/dist/Popover/PopoverContentNonModal.js.map +1 -1
  297. package/dist/Popover/PopoverRoot.cjs +1 -1
  298. package/dist/Popover/PopoverRoot.cjs.map +1 -1
  299. package/dist/Popover/PopoverRoot.js +1 -1
  300. package/dist/Popover/PopoverRoot.js.map +1 -1
  301. package/dist/Popover/PopoverTrigger.cjs.map +1 -1
  302. package/dist/Popover/PopoverTrigger.js.map +1 -1
  303. package/dist/Popper/PopperAnchor.cjs.map +1 -1
  304. package/dist/Popper/PopperAnchor.js.map +1 -1
  305. package/dist/Popper/PopperArrow.cjs.map +1 -1
  306. package/dist/Popper/PopperArrow.js.map +1 -1
  307. package/dist/Popper/PopperContent.cjs.map +1 -1
  308. package/dist/Popper/PopperContent.js.map +1 -1
  309. package/dist/Presence/Presence.cjs.map +1 -1
  310. package/dist/Presence/Presence.js.map +1 -1
  311. package/dist/Presence/usePresence.cjs.map +1 -1
  312. package/dist/Presence/usePresence.js.map +1 -1
  313. package/dist/Primitive/Slot.cjs +1 -9
  314. package/dist/Primitive/Slot.cjs.map +1 -1
  315. package/dist/Primitive/Slot.js +1 -9
  316. package/dist/Primitive/Slot.js.map +1 -1
  317. package/dist/Progress/ProgressRoot.cjs +3 -2
  318. package/dist/Progress/ProgressRoot.cjs.map +1 -1
  319. package/dist/Progress/ProgressRoot.js +3 -2
  320. package/dist/Progress/ProgressRoot.js.map +1 -1
  321. package/dist/RadioGroup/Radio.cjs +2 -0
  322. package/dist/RadioGroup/Radio.cjs.map +1 -1
  323. package/dist/RadioGroup/Radio.js +2 -0
  324. package/dist/RadioGroup/Radio.js.map +1 -1
  325. package/dist/RadioGroup/RadioGroupItem.cjs.map +1 -1
  326. package/dist/RadioGroup/RadioGroupItem.js.map +1 -1
  327. package/dist/RadioGroup/RadioGroupRoot.cjs.map +1 -1
  328. package/dist/RadioGroup/RadioGroupRoot.js.map +1 -1
  329. package/dist/RangeCalendar/RangeCalendarCell.cjs +2 -2
  330. package/dist/RangeCalendar/RangeCalendarCell.cjs.map +1 -1
  331. package/dist/RangeCalendar/RangeCalendarCell.js +2 -2
  332. package/dist/RangeCalendar/RangeCalendarCell.js.map +1 -1
  333. package/dist/RangeCalendar/RangeCalendarCellTrigger.cjs +28 -9
  334. package/dist/RangeCalendar/RangeCalendarCellTrigger.cjs.map +1 -1
  335. package/dist/RangeCalendar/RangeCalendarCellTrigger.js +28 -9
  336. package/dist/RangeCalendar/RangeCalendarCellTrigger.js.map +1 -1
  337. package/dist/RangeCalendar/RangeCalendarGrid.cjs.map +1 -1
  338. package/dist/RangeCalendar/RangeCalendarGrid.js.map +1 -1
  339. package/dist/RangeCalendar/RangeCalendarHeading.cjs.map +1 -1
  340. package/dist/RangeCalendar/RangeCalendarHeading.js.map +1 -1
  341. package/dist/RangeCalendar/RangeCalendarNext.cjs.map +1 -1
  342. package/dist/RangeCalendar/RangeCalendarNext.js.map +1 -1
  343. package/dist/RangeCalendar/RangeCalendarPrev.cjs.map +1 -1
  344. package/dist/RangeCalendar/RangeCalendarPrev.js.map +1 -1
  345. package/dist/RangeCalendar/RangeCalendarRoot.cjs +26 -9
  346. package/dist/RangeCalendar/RangeCalendarRoot.cjs.map +1 -1
  347. package/dist/RangeCalendar/RangeCalendarRoot.js +26 -9
  348. package/dist/RangeCalendar/RangeCalendarRoot.js.map +1 -1
  349. package/dist/RangeCalendar/useRangeCalendar.cjs +21 -4
  350. package/dist/RangeCalendar/useRangeCalendar.cjs.map +1 -1
  351. package/dist/RangeCalendar/useRangeCalendar.js +21 -4
  352. package/dist/RangeCalendar/useRangeCalendar.js.map +1 -1
  353. package/dist/RovingFocus/RovingFocusGroup.cjs +1 -1
  354. package/dist/RovingFocus/RovingFocusGroup.cjs.map +1 -1
  355. package/dist/RovingFocus/RovingFocusGroup.js +1 -1
  356. package/dist/RovingFocus/RovingFocusGroup.js.map +1 -1
  357. package/dist/RovingFocus/RovingFocusItem.cjs.map +1 -1
  358. package/dist/RovingFocus/RovingFocusItem.js.map +1 -1
  359. package/dist/ScrollArea/ScrollAreaCornerImpl.cjs.map +1 -1
  360. package/dist/ScrollArea/ScrollAreaCornerImpl.js.map +1 -1
  361. package/dist/ScrollArea/ScrollAreaRoot.cjs.map +1 -1
  362. package/dist/ScrollArea/ScrollAreaRoot.js.map +1 -1
  363. package/dist/ScrollArea/ScrollAreaScrollbar.cjs.map +1 -1
  364. package/dist/ScrollArea/ScrollAreaScrollbar.js.map +1 -1
  365. package/dist/ScrollArea/ScrollAreaScrollbarAuto.cjs.map +1 -1
  366. package/dist/ScrollArea/ScrollAreaScrollbarAuto.js.map +1 -1
  367. package/dist/ScrollArea/ScrollAreaScrollbarHover.cjs.map +1 -1
  368. package/dist/ScrollArea/ScrollAreaScrollbarHover.js.map +1 -1
  369. package/dist/ScrollArea/ScrollAreaScrollbarImpl.cjs.map +1 -1
  370. package/dist/ScrollArea/ScrollAreaScrollbarImpl.js.map +1 -1
  371. package/dist/ScrollArea/ScrollAreaScrollbarScroll.cjs.map +1 -1
  372. package/dist/ScrollArea/ScrollAreaScrollbarScroll.js.map +1 -1
  373. package/dist/ScrollArea/ScrollAreaScrollbarX.cjs.map +1 -1
  374. package/dist/ScrollArea/ScrollAreaScrollbarX.js.map +1 -1
  375. package/dist/ScrollArea/ScrollAreaScrollbarY.cjs.map +1 -1
  376. package/dist/ScrollArea/ScrollAreaScrollbarY.js.map +1 -1
  377. package/dist/ScrollArea/ScrollAreaThumb.cjs.map +1 -1
  378. package/dist/ScrollArea/ScrollAreaThumb.js.map +1 -1
  379. package/dist/ScrollArea/ScrollAreaViewport.cjs.map +1 -1
  380. package/dist/ScrollArea/ScrollAreaViewport.js.map +1 -1
  381. package/dist/Select/BubbleSelect.cjs.map +1 -1
  382. package/dist/Select/BubbleSelect.js.map +1 -1
  383. package/dist/Select/SelectContent.cjs.map +1 -1
  384. package/dist/Select/SelectContent.js.map +1 -1
  385. package/dist/Select/SelectContentImpl.cjs +2 -2
  386. package/dist/Select/SelectContentImpl.cjs.map +1 -1
  387. package/dist/Select/SelectContentImpl.js +2 -2
  388. package/dist/Select/SelectContentImpl.js.map +1 -1
  389. package/dist/Select/SelectItem.cjs.map +1 -1
  390. package/dist/Select/SelectItem.js.map +1 -1
  391. package/dist/Select/SelectItemAlignedPosition.cjs +1 -1
  392. package/dist/Select/SelectItemAlignedPosition.cjs.map +1 -1
  393. package/dist/Select/SelectItemAlignedPosition.js +1 -1
  394. package/dist/Select/SelectItemAlignedPosition.js.map +1 -1
  395. package/dist/Select/SelectItemText.cjs.map +1 -1
  396. package/dist/Select/SelectItemText.js.map +1 -1
  397. package/dist/Select/SelectProvider.cjs.map +1 -1
  398. package/dist/Select/SelectProvider.js.map +1 -1
  399. package/dist/Select/SelectRoot.cjs +3 -1
  400. package/dist/Select/SelectRoot.cjs.map +1 -1
  401. package/dist/Select/SelectRoot.js +3 -1
  402. package/dist/Select/SelectRoot.js.map +1 -1
  403. package/dist/Select/SelectScrollButtonImpl.cjs.map +1 -1
  404. package/dist/Select/SelectScrollButtonImpl.js.map +1 -1
  405. package/dist/Select/SelectTrigger.cjs.map +1 -1
  406. package/dist/Select/SelectTrigger.js.map +1 -1
  407. package/dist/Select/SelectValue.cjs.map +1 -1
  408. package/dist/Select/SelectValue.js.map +1 -1
  409. package/dist/Select/SelectViewport.cjs.map +1 -1
  410. package/dist/Select/SelectViewport.js.map +1 -1
  411. package/dist/Slider/SliderHorizontal.cjs +7 -4
  412. package/dist/Slider/SliderHorizontal.cjs.map +1 -1
  413. package/dist/Slider/SliderHorizontal.js +7 -4
  414. package/dist/Slider/SliderHorizontal.js.map +1 -1
  415. package/dist/Slider/SliderRange.cjs +2 -2
  416. package/dist/Slider/SliderRange.cjs.map +1 -1
  417. package/dist/Slider/SliderRange.js +2 -2
  418. package/dist/Slider/SliderRange.js.map +1 -1
  419. package/dist/Slider/SliderRoot.cjs.map +1 -1
  420. package/dist/Slider/SliderRoot.js.map +1 -1
  421. package/dist/Slider/SliderThumb.cjs.map +1 -1
  422. package/dist/Slider/SliderThumb.js.map +1 -1
  423. package/dist/Slider/SliderThumbImpl.cjs +3 -3
  424. package/dist/Slider/SliderThumbImpl.cjs.map +1 -1
  425. package/dist/Slider/SliderThumbImpl.js +3 -3
  426. package/dist/Slider/SliderThumbImpl.js.map +1 -1
  427. package/dist/Slider/SliderVertical.cjs +7 -4
  428. package/dist/Slider/SliderVertical.cjs.map +1 -1
  429. package/dist/Slider/SliderVertical.js +7 -4
  430. package/dist/Slider/SliderVertical.js.map +1 -1
  431. package/dist/Slider/utils.cjs +1 -1
  432. package/dist/Slider/utils.cjs.map +1 -1
  433. package/dist/Slider/utils.js +1 -1
  434. package/dist/Slider/utils.js.map +1 -1
  435. package/dist/Splitter/SplitterGroup.cjs.map +1 -1
  436. package/dist/Splitter/SplitterGroup.js.map +1 -1
  437. package/dist/Splitter/SplitterPanel.cjs +16 -10
  438. package/dist/Splitter/SplitterPanel.cjs.map +1 -1
  439. package/dist/Splitter/SplitterPanel.js +16 -10
  440. package/dist/Splitter/SplitterPanel.js.map +1 -1
  441. package/dist/Stepper/StepperIndicator.cjs.map +1 -1
  442. package/dist/Stepper/StepperIndicator.js.map +1 -1
  443. package/dist/Stepper/StepperItem.cjs.map +1 -1
  444. package/dist/Stepper/StepperItem.js.map +1 -1
  445. package/dist/Stepper/StepperRoot.cjs +31 -4
  446. package/dist/Stepper/StepperRoot.cjs.map +1 -1
  447. package/dist/Stepper/StepperRoot.js +31 -4
  448. package/dist/Stepper/StepperRoot.js.map +1 -1
  449. package/dist/Stepper/StepperTrigger.cjs.map +1 -1
  450. package/dist/Stepper/StepperTrigger.js.map +1 -1
  451. package/dist/Switch/SwitchRoot.cjs.map +1 -1
  452. package/dist/Switch/SwitchRoot.js.map +1 -1
  453. package/dist/Tabs/TabsContent.cjs.map +1 -1
  454. package/dist/Tabs/TabsContent.js.map +1 -1
  455. package/dist/Tabs/TabsIndicator.cjs.map +1 -1
  456. package/dist/Tabs/TabsIndicator.js.map +1 -1
  457. package/dist/Tabs/TabsList.cjs.map +1 -1
  458. package/dist/Tabs/TabsList.js.map +1 -1
  459. package/dist/Tabs/TabsRoot.cjs.map +1 -1
  460. package/dist/Tabs/TabsRoot.js.map +1 -1
  461. package/dist/Tabs/TabsTrigger.cjs.map +1 -1
  462. package/dist/Tabs/TabsTrigger.js.map +1 -1
  463. package/dist/TagsInput/TagsInputInput.cjs +1 -0
  464. package/dist/TagsInput/TagsInputInput.cjs.map +1 -1
  465. package/dist/TagsInput/TagsInputInput.js +1 -0
  466. package/dist/TagsInput/TagsInputInput.js.map +1 -1
  467. package/dist/TagsInput/TagsInputItem.cjs.map +1 -1
  468. package/dist/TagsInput/TagsInputItem.js.map +1 -1
  469. package/dist/TagsInput/TagsInputItemDelete.cjs.map +1 -1
  470. package/dist/TagsInput/TagsInputItemDelete.js.map +1 -1
  471. package/dist/TagsInput/TagsInputRoot.cjs +1 -1
  472. package/dist/TagsInput/TagsInputRoot.cjs.map +1 -1
  473. package/dist/TagsInput/TagsInputRoot.js +1 -1
  474. package/dist/TagsInput/TagsInputRoot.js.map +1 -1
  475. package/dist/TimeField/TimeFieldInput.cjs +1 -0
  476. package/dist/TimeField/TimeFieldInput.cjs.map +1 -1
  477. package/dist/TimeField/TimeFieldInput.js +1 -0
  478. package/dist/TimeField/TimeFieldInput.js.map +1 -1
  479. package/dist/TimeField/TimeFieldRoot.cjs +13 -4
  480. package/dist/TimeField/TimeFieldRoot.cjs.map +1 -1
  481. package/dist/TimeField/TimeFieldRoot.js +13 -4
  482. package/dist/TimeField/TimeFieldRoot.js.map +1 -1
  483. package/dist/Toast/ToastAnnounce.cjs.map +1 -1
  484. package/dist/Toast/ToastAnnounce.js.map +1 -1
  485. package/dist/Toast/ToastRoot.cjs.map +1 -1
  486. package/dist/Toast/ToastRoot.js.map +1 -1
  487. package/dist/Toast/ToastRootImpl.cjs +1 -1
  488. package/dist/Toast/ToastRootImpl.cjs.map +1 -1
  489. package/dist/Toast/ToastRootImpl.js +1 -1
  490. package/dist/Toast/ToastRootImpl.js.map +1 -1
  491. package/dist/Toast/ToastViewport.cjs +2 -2
  492. package/dist/Toast/ToastViewport.cjs.map +1 -1
  493. package/dist/Toast/ToastViewport.js +2 -2
  494. package/dist/Toast/ToastViewport.js.map +1 -1
  495. package/dist/Toggle/Toggle.cjs.map +1 -1
  496. package/dist/Toggle/Toggle.js.map +1 -1
  497. package/dist/ToggleGroup/ToggleGroupItem.cjs.map +1 -1
  498. package/dist/ToggleGroup/ToggleGroupItem.js.map +1 -1
  499. package/dist/ToggleGroup/ToggleGroupRoot.cjs.map +1 -1
  500. package/dist/ToggleGroup/ToggleGroupRoot.js.map +1 -1
  501. package/dist/Toolbar/ToolbarRoot.cjs.map +1 -1
  502. package/dist/Toolbar/ToolbarRoot.js.map +1 -1
  503. package/dist/Tooltip/TooltipContentImpl.cjs +2 -2
  504. package/dist/Tooltip/TooltipContentImpl.cjs.map +1 -1
  505. package/dist/Tooltip/TooltipContentImpl.js +2 -2
  506. package/dist/Tooltip/TooltipContentImpl.js.map +1 -1
  507. package/dist/Tooltip/TooltipRoot.cjs +1 -1
  508. package/dist/Tooltip/TooltipRoot.cjs.map +1 -1
  509. package/dist/Tooltip/TooltipRoot.js +1 -1
  510. package/dist/Tooltip/TooltipRoot.js.map +1 -1
  511. package/dist/Tooltip/TooltipTrigger.cjs +1 -1
  512. package/dist/Tooltip/TooltipTrigger.cjs.map +1 -1
  513. package/dist/Tooltip/TooltipTrigger.js +1 -1
  514. package/dist/Tooltip/TooltipTrigger.js.map +1 -1
  515. package/dist/Tree/TreeItem.cjs +4 -1
  516. package/dist/Tree/TreeItem.cjs.map +1 -1
  517. package/dist/Tree/TreeItem.js +4 -1
  518. package/dist/Tree/TreeItem.js.map +1 -1
  519. package/dist/Tree/TreeRoot.cjs +29 -3
  520. package/dist/Tree/TreeRoot.cjs.map +1 -1
  521. package/dist/Tree/TreeRoot.js +29 -3
  522. package/dist/Tree/TreeRoot.js.map +1 -1
  523. package/dist/Tree/TreeVirtualizer.cjs +2 -2
  524. package/dist/Tree/TreeVirtualizer.cjs.map +1 -1
  525. package/dist/Tree/TreeVirtualizer.js +2 -2
  526. package/dist/Tree/TreeVirtualizer.js.map +1 -1
  527. package/dist/Viewport/Viewport.cjs.map +1 -1
  528. package/dist/Viewport/Viewport.js.map +1 -1
  529. package/dist/VisuallyHidden/VisuallyHiddenInputBubble.cjs.map +1 -1
  530. package/dist/VisuallyHidden/VisuallyHiddenInputBubble.js.map +1 -1
  531. package/dist/component/BaseSeparator.cjs.map +1 -1
  532. package/dist/component/BaseSeparator.js.map +1 -1
  533. package/dist/date/calendar.cjs.map +1 -1
  534. package/dist/date/calendar.js.map +1 -1
  535. package/dist/date/parser.cjs +22 -7
  536. package/dist/date/parser.cjs.map +1 -1
  537. package/dist/date/parser.js +23 -8
  538. package/dist/date/parser.js.map +1 -1
  539. package/dist/date/useDateField.cjs +21 -6
  540. package/dist/date/useDateField.cjs.map +1 -1
  541. package/dist/date/useDateField.js +21 -6
  542. package/dist/date/useDateField.js.map +1 -1
  543. package/dist/date/utils.cjs +31 -2
  544. package/dist/date/utils.cjs.map +1 -1
  545. package/dist/date/utils.js +30 -3
  546. package/dist/date/utils.js.map +1 -1
  547. package/dist/index.d.ts +495 -353
  548. package/dist/shared/useBodyScrollLock.cjs +2 -2
  549. package/dist/shared/useBodyScrollLock.cjs.map +1 -1
  550. package/dist/shared/useBodyScrollLock.js +2 -2
  551. package/dist/shared/useBodyScrollLock.js.map +1 -1
  552. package/dist/shared/useDateFormatter.cjs +12 -10
  553. package/dist/shared/useDateFormatter.cjs.map +1 -1
  554. package/dist/shared/useDateFormatter.js +12 -10
  555. package/dist/shared/useDateFormatter.js.map +1 -1
  556. package/dist/shared/useDirection.cjs.map +1 -1
  557. package/dist/shared/useDirection.js.map +1 -1
  558. package/dist/shared/useGraceArea.cjs.map +1 -1
  559. package/dist/shared/useGraceArea.js.map +1 -1
  560. package/dist/shared/useId.cjs +2 -2
  561. package/dist/shared/useId.cjs.map +1 -1
  562. package/dist/shared/useId.js +2 -2
  563. package/dist/shared/useId.js.map +1 -1
  564. package/dist/shared/useLocale.cjs.map +1 -1
  565. package/dist/shared/useLocale.js.map +1 -1
  566. package/dist/shared/useNonce.cjs.map +1 -1
  567. package/dist/shared/useNonce.js.map +1 -1
  568. package/package.json +5 -5
@@ -1 +1 @@
1
- {"version":3,"file":"TagsInputRoot.cjs","sources":["../../src/TagsInput/TagsInputRoot.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { PrimitiveProps } from '@/Primitive'\nimport type { Direction, FormFieldProps } from '@/shared/types'\nimport type { Ref } from 'vue'\nimport { createContext, useArrowNavigation, useDirection, useFormControl, useForwardExpose } from '@/shared'\nimport { computed, ref, toRefs } from 'vue'\n\nexport type AcceptableInputValue = string | Record<string, any>\n\nexport interface TagsInputRootProps<T = AcceptableInputValue> extends PrimitiveProps, FormFieldProps {\n /** The controlled value of the tags input. Can be bind as `v-model`. */\n modelValue?: Array<T> | null\n /** The value of the tags that should be added. Use when you do not need to control the state of the tags input */\n defaultValue?: Array<T>\n /** When `true`, allow adding tags on paste. Work in conjunction with delimiter prop. */\n addOnPaste?: boolean\n /** When `true` allow adding tags on tab keydown */\n addOnTab?: boolean\n /** When `true` allow adding tags blur input */\n addOnBlur?: boolean\n /** When `true`, allow duplicated tags. */\n duplicate?: boolean\n /** When `true`, prevents the user from interacting with the tags input. */\n disabled?: boolean\n /** The character or regular expression to trigger the addition of a new tag. Also used to split tags for `@paste` event */\n delimiter?: string | RegExp\n /** The reading direction of the combobox when applicable. <br> If omitted, inherits globally from `ConfigProvider` or assumes LTR (left-to-right) reading mode. */\n dir?: Direction\n /** Maximum number of tags. */\n max?: number\n id?: string\n /** Convert the input value to the desired type. Mandatory when using objects as values and using `TagsInputInput` */\n convertValue?: (value: string) => T\n /** Display the value of the tag. Useful when you want to apply modifications to the value like adding a suffix or when using object as values */\n displayValue?: (value: T) => string\n}\n\nexport type TagsInputRootEmits<T = AcceptableInputValue> = {\n /** Event handler called when the value changes */\n 'update:modelValue': [payload: Array<T>]\n /** Event handler called when the value is invalid */\n 'invalid': [payload: T]\n /** Event handler called when tag is added */\n 'addTag': [payload: T]\n /** Event handler called when tag is removed */\n 'removeTag': [payload: T]\n}\n\nexport interface TagsInputRootContext<T = AcceptableInputValue> {\n modelValue: Ref<Array<T>>\n onAddValue: (payload: string) => boolean\n onRemoveValue: (index: number) => void\n onInputKeydown: (event: KeyboardEvent) => void\n selectedElement: Ref<HTMLElement | undefined>\n isInvalidInput: Ref<boolean>\n addOnPaste: Ref<boolean>\n addOnTab: Ref<boolean>\n addOnBlur: Ref<boolean>\n disabled: Ref<boolean>\n delimiter: Ref<string | RegExp>\n dir: Ref<Direction>\n max: Ref<number>\n id: Ref<string | undefined> | undefined\n displayValue: (value: T) => string\n}\n\nexport const [injectTagsInputRootContext, provideTagsInputRootContext]\n = createContext<TagsInputRootContext>('TagsInputRoot')\n</script>\n\n<script setup lang=\"ts\" generic=\"T extends AcceptableInputValue = string\">\nimport { useCollection } from '@/Collection'\nimport { Primitive } from '@/Primitive'\nimport { VisuallyHiddenInput } from '@/VisuallyHidden'\nimport { useFocusWithin, useVModel } from '@vueuse/core'\n\nconst props = withDefaults(defineProps<TagsInputRootProps<T>>(), {\n defaultValue: () => [],\n delimiter: ',',\n max: 0,\n displayValue: (value: T) => value.toString(),\n})\nconst emits = defineEmits<TagsInputRootEmits<T>>()\n\ndefineSlots<{\n default: (props: {\n /** Current input values */\n modelValue: typeof modelValue.value\n }) => any\n}>()\n\nconst { addOnPaste, disabled, delimiter, max, id, dir: propDir, addOnBlur, addOnTab } = toRefs(props)\nconst dir = useDirection(propDir)\n\nconst modelValue = useVModel(props, 'modelValue', emits, {\n defaultValue: props.defaultValue,\n passive: true,\n deep: true,\n}) as Ref<Array<AcceptableInputValue>>\n\nconst { forwardRef, currentElement } = useForwardExpose()\nconst { focused } = useFocusWithin(currentElement)\nconst isFormControl = useFormControl(currentElement)\n\nconst { getItems, CollectionSlot } = useCollection({ isProvider: true })\n\nconst selectedElement = ref<HTMLElement>()\nconst isInvalidInput = ref(false)\n\nconst currentModelValue = computed(() => Array.isArray(modelValue.value) ? [...modelValue.value] : [])\n\nfunction handleRemoveTag(index: number) {\n if (index !== -1) {\n const collection = getItems().filter(i => i.ref.dataset.disabled !== '')\n modelValue.value = modelValue.value.filter((_, i) => i !== index)\n emits('removeTag', collection[index].value)\n }\n}\n\nprovideTagsInputRootContext({\n modelValue,\n onAddValue: (_payload) => {\n const array = [...currentModelValue.value]\n const modelValueIsObject = array.length > 0 && typeof array[0] === 'object'\n const defaultValueIsObject = array.length > 0 && typeof props.defaultValue[0] === 'object'\n\n // Check if the value is an object and if the convertValue function is provided. We don't check this a type level because the use\n // of `TagsInputInput` is optional.\n if ((modelValueIsObject || defaultValueIsObject) && typeof props.convertValue !== 'function')\n throw new Error('You must provide a `convertValue` function when using objects as values.')\n const payload = props.convertValue ? props.convertValue(_payload) : _payload as T\n\n if ((array.length >= max.value) && !!max.value) {\n emits('invalid', payload)\n return false\n }\n\n if (props.duplicate) {\n modelValue.value = [...array, payload]\n emits('addTag', payload)\n return true\n }\n else {\n const exist = array.includes(payload)\n if (!exist) {\n modelValue.value = [...array, payload]\n emits('addTag', payload)\n return true\n }\n else {\n isInvalidInput.value = true\n }\n }\n emits('invalid', payload)\n return false\n },\n onRemoveValue: handleRemoveTag,\n onInputKeydown: (event) => {\n const target = event.target as HTMLInputElement\n const collection = getItems().map(i => i.ref).filter(i => i.dataset.disabled !== '')\n if (!collection.length)\n return\n const lastTag = collection.at(-1)\n switch (event.key) {\n case 'Delete':\n case 'Backspace': {\n if (target.selectionStart !== 0 || target.selectionEnd !== 0)\n break\n\n if (selectedElement.value) {\n const index = collection.findIndex(i => i === selectedElement.value)\n handleRemoveTag(index)\n selectedElement.value = selectedElement.value === lastTag ? collection.at(index - 1) : collection.at(index + 1)\n event.preventDefault()\n }\n else if (event.key === 'Backspace') {\n selectedElement.value = lastTag\n event.preventDefault()\n }\n break\n }\n case 'Home':\n case 'End':\n case 'ArrowRight':\n case 'ArrowLeft': {\n const isArrowRight = (event.key === 'ArrowRight' && dir.value === 'ltr') || (event.key === 'ArrowLeft' && dir.value === 'rtl')\n const isArrowLeft = !isArrowRight\n // only focus on tags when cursor is at the first position\n if (target.selectionStart !== 0 || target.selectionEnd !== 0)\n break\n\n // if you press ArrowLeft, then we last tag\n if (isArrowLeft && !selectedElement.value) {\n selectedElement.value = lastTag\n event.preventDefault()\n }\n // if you press ArrowRight on last tag, you deselect\n else if (isArrowRight && lastTag && selectedElement.value === lastTag) {\n selectedElement.value = undefined\n event.preventDefault()\n }\n else if (selectedElement.value) {\n const el = useArrowNavigation(event, selectedElement.value, undefined, {\n itemsArray: collection,\n loop: false,\n dir: dir.value,\n })\n if (el)\n selectedElement.value = el\n event.preventDefault()\n }\n break\n }\n case 'ArrowUp':\n case 'ArrowDown': {\n if (selectedElement.value)\n event.preventDefault()\n break\n }\n default: {\n selectedElement.value = undefined\n }\n }\n },\n selectedElement,\n isInvalidInput,\n addOnPaste,\n addOnBlur,\n addOnTab,\n dir,\n disabled,\n delimiter,\n max,\n id,\n displayValue: props.displayValue as (value: AcceptableInputValue) => string,\n})\n</script>\n\n<template>\n <CollectionSlot>\n <Primitive\n :ref=\"forwardRef\"\n :dir=\"dir\"\n :as=\"as\"\n :as-child=\"asChild\"\n :data-invalid=\"isInvalidInput ? '' : undefined\"\n :data-disabled=\"disabled ? '' : undefined\"\n :data-focused=\"focused ? '' : undefined\"\n >\n <slot :model-value=\"modelValue\" />\n\n <VisuallyHiddenInput\n v-if=\"isFormControl && name\"\n :name=\"name\"\n :value=\"modelValue\"\n :required=\"required\"\n :disabled=\"disabled\"\n />\n </Primitive>\n </CollectionSlot>\n</template>\n"],"names":["createContext","toRefs","useDirection","useVModel","useForwardExpose","useFocusWithin","useFormControl","useCollection","ref","computed","useArrowNavigation"],"mappings":"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"}
1
+ {"version":3,"file":"TagsInputRoot.cjs","sources":["../../src/TagsInput/TagsInputRoot.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { Ref } from 'vue'\nimport type { PrimitiveProps } from '@/Primitive'\nimport type { Direction, FormFieldProps } from '@/shared/types'\nimport { computed, ref, toRefs } from 'vue'\nimport { createContext, useArrowNavigation, useDirection, useFormControl, useForwardExpose } from '@/shared'\n\nexport type AcceptableInputValue = string | Record<string, any>\n\nexport interface TagsInputRootProps<T = AcceptableInputValue> extends PrimitiveProps, FormFieldProps {\n /** The controlled value of the tags input. Can be bind as `v-model`. */\n modelValue?: Array<T> | null\n /** The value of the tags that should be added. Use when you do not need to control the state of the tags input */\n defaultValue?: Array<T>\n /** When `true`, allow adding tags on paste. Work in conjunction with delimiter prop. */\n addOnPaste?: boolean\n /** When `true` allow adding tags on tab keydown */\n addOnTab?: boolean\n /** When `true` allow adding tags blur input */\n addOnBlur?: boolean\n /** When `true`, allow duplicated tags. */\n duplicate?: boolean\n /** When `true`, prevents the user from interacting with the tags input. */\n disabled?: boolean\n /** The character or regular expression to trigger the addition of a new tag. Also used to split tags for `@paste` event */\n delimiter?: string | RegExp\n /** The reading direction of the combobox when applicable. <br> If omitted, inherits globally from `ConfigProvider` or assumes LTR (left-to-right) reading mode. */\n dir?: Direction\n /** Maximum number of tags. */\n max?: number\n id?: string\n /** Convert the input value to the desired type. Mandatory when using objects as values and using `TagsInputInput` */\n convertValue?: (value: string) => T\n /** Display the value of the tag. Useful when you want to apply modifications to the value like adding a suffix or when using object as values */\n displayValue?: (value: T) => string\n}\n\nexport type TagsInputRootEmits<T = AcceptableInputValue> = {\n /** Event handler called when the value changes */\n 'update:modelValue': [payload: Array<T>]\n /** Event handler called when the value is invalid */\n 'invalid': [payload: T]\n /** Event handler called when tag is added */\n 'addTag': [payload: T]\n /** Event handler called when tag is removed */\n 'removeTag': [payload: T]\n}\n\nexport interface TagsInputRootContext<T = AcceptableInputValue> {\n modelValue: Ref<Array<T>>\n onAddValue: (payload: string) => boolean\n onRemoveValue: (index: number) => void\n onInputKeydown: (event: KeyboardEvent) => void\n selectedElement: Ref<HTMLElement | undefined>\n isInvalidInput: Ref<boolean>\n addOnPaste: Ref<boolean>\n addOnTab: Ref<boolean>\n addOnBlur: Ref<boolean>\n disabled: Ref<boolean>\n delimiter: Ref<string | RegExp>\n dir: Ref<Direction>\n max: Ref<number>\n id: Ref<string | undefined> | undefined\n displayValue: (value: T) => string\n}\n\nexport const [injectTagsInputRootContext, provideTagsInputRootContext]\n = createContext<TagsInputRootContext>('TagsInputRoot')\n</script>\n\n<script setup lang=\"ts\" generic=\"T extends AcceptableInputValue = string\">\nimport { useFocusWithin, useVModel } from '@vueuse/core'\nimport { useCollection } from '@/Collection'\nimport { Primitive } from '@/Primitive'\nimport { VisuallyHiddenInput } from '@/VisuallyHidden'\n\nconst props = withDefaults(defineProps<TagsInputRootProps<T>>(), {\n defaultValue: () => [],\n delimiter: ',',\n max: 0,\n displayValue: (value: T) => value.toString(),\n})\nconst emits = defineEmits<TagsInputRootEmits<T>>()\n\ndefineSlots<{\n default?: (props: {\n /** Current input values */\n modelValue: typeof modelValue.value\n }) => any\n}>()\n\nconst { addOnPaste, disabled, delimiter, max, id, dir: propDir, addOnBlur, addOnTab } = toRefs(props)\nconst dir = useDirection(propDir)\n\nconst modelValue = useVModel(props, 'modelValue', emits, {\n defaultValue: props.defaultValue,\n passive: true,\n deep: true,\n}) as Ref<Array<AcceptableInputValue>>\n\nconst { forwardRef, currentElement } = useForwardExpose()\nconst { focused } = useFocusWithin(currentElement)\nconst isFormControl = useFormControl(currentElement)\n\nconst { getItems, CollectionSlot } = useCollection({ isProvider: true })\n\nconst selectedElement = ref<HTMLElement>()\nconst isInvalidInput = ref(false)\n\nconst currentModelValue = computed(() => Array.isArray(modelValue.value) ? [...modelValue.value] : [])\n\nfunction handleRemoveTag(index: number) {\n if (index !== -1) {\n const collection = getItems().filter(i => i.ref.dataset.disabled !== '')\n modelValue.value = modelValue.value.filter((_, i) => i !== index)\n emits('removeTag', collection[index].value)\n }\n}\n\nprovideTagsInputRootContext({\n modelValue,\n onAddValue: (_payload) => {\n const array = [...currentModelValue.value]\n const modelValueIsObject = array.length > 0 && typeof array[0] === 'object'\n const defaultValueIsObject = array.length > 0 && typeof props.defaultValue[0] === 'object'\n\n // Check if the value is an object and if the convertValue function is provided. We don't check this a type level because the use\n // of `TagsInputInput` is optional.\n if ((modelValueIsObject || defaultValueIsObject) && typeof props.convertValue !== 'function')\n throw new Error('You must provide a `convertValue` function when using objects as values.')\n const payload = props.convertValue ? props.convertValue(_payload) : _payload as T\n\n if ((array.length >= max.value) && !!max.value) {\n emits('invalid', payload)\n return false\n }\n\n if (props.duplicate) {\n modelValue.value = [...array, payload]\n emits('addTag', payload)\n return true\n }\n else {\n const exist = array.includes(payload)\n if (!exist) {\n modelValue.value = [...array, payload]\n emits('addTag', payload)\n return true\n }\n else {\n isInvalidInput.value = true\n }\n }\n emits('invalid', payload)\n return false\n },\n onRemoveValue: handleRemoveTag,\n onInputKeydown: (event) => {\n const target = event.target as HTMLInputElement\n const collection = getItems().map(i => i.ref).filter(i => i.dataset.disabled !== '')\n if (!collection.length)\n return\n const lastTag = collection.at(-1)\n switch (event.key) {\n case 'Delete':\n case 'Backspace': {\n if (target.selectionStart !== 0 || target.selectionEnd !== 0)\n break\n\n if (selectedElement.value) {\n const index = collection.findIndex(i => i === selectedElement.value)\n handleRemoveTag(index)\n selectedElement.value = selectedElement.value === lastTag ? collection.at(index - 1) : collection.at(index + 1)\n event.preventDefault()\n }\n else if (event.key === 'Backspace') {\n selectedElement.value = lastTag\n event.preventDefault()\n }\n break\n }\n case 'Home':\n case 'End':\n case 'ArrowRight':\n case 'ArrowLeft': {\n const isArrowRight = (event.key === 'ArrowRight' && dir.value === 'ltr') || (event.key === 'ArrowLeft' && dir.value === 'rtl')\n const isArrowLeft = !isArrowRight\n // only focus on tags when cursor is at the first position\n if (target.selectionStart !== 0 || target.selectionEnd !== 0)\n break\n\n // if you press ArrowLeft, then we last tag\n if (isArrowLeft && !selectedElement.value) {\n selectedElement.value = lastTag\n event.preventDefault()\n }\n // if you press ArrowRight on last tag, you deselect\n else if (isArrowRight && lastTag && selectedElement.value === lastTag) {\n selectedElement.value = undefined\n event.preventDefault()\n }\n else if (selectedElement.value) {\n const el = useArrowNavigation(event, selectedElement.value, undefined, {\n itemsArray: collection,\n loop: false,\n dir: dir.value,\n })\n if (el)\n selectedElement.value = el\n event.preventDefault()\n }\n break\n }\n case 'ArrowUp':\n case 'ArrowDown': {\n if (selectedElement.value)\n event.preventDefault()\n break\n }\n default: {\n selectedElement.value = undefined\n }\n }\n },\n selectedElement,\n isInvalidInput,\n addOnPaste,\n addOnBlur,\n addOnTab,\n dir,\n disabled,\n delimiter,\n max,\n id,\n displayValue: props.displayValue as (value: AcceptableInputValue) => string,\n})\n</script>\n\n<template>\n <CollectionSlot>\n <Primitive\n :ref=\"forwardRef\"\n :dir=\"dir\"\n :as=\"as\"\n :as-child=\"asChild\"\n :data-invalid=\"isInvalidInput ? '' : undefined\"\n :data-disabled=\"disabled ? '' : undefined\"\n :data-focused=\"focused ? '' : undefined\"\n >\n <slot :model-value=\"modelValue\" />\n\n <VisuallyHiddenInput\n v-if=\"isFormControl && name\"\n :name=\"name\"\n :value=\"modelValue\"\n :required=\"required\"\n :disabled=\"disabled\"\n />\n </Primitive>\n </CollectionSlot>\n</template>\n"],"names":["createContext","toRefs","useDirection","useVModel","useForwardExpose","useFocusWithin","useFormControl","useCollection","ref","computed","useArrowNavigation"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { defineComponent, toRefs, ref, computed, createBlock, openBlock, unref, withCtx, createVNode, renderSlot, createCommentVNode } from 'vue';
2
- import { u as useCollection } from '../Collection/Collection.js';
3
2
  import { useVModel, useFocusWithin } from '@vueuse/core';
3
+ import { u as useCollection } from '../Collection/Collection.js';
4
4
  import { c as createContext } from '../shared/createContext.js';
5
5
  import { u as useDirection } from '../shared/useDirection.js';
6
6
  import { u as useForwardExpose } from '../shared/useForwardExpose.js';
@@ -1 +1 @@
1
- {"version":3,"file":"TagsInputRoot.js","sources":["../../src/TagsInput/TagsInputRoot.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { PrimitiveProps } from '@/Primitive'\nimport type { Direction, FormFieldProps } from '@/shared/types'\nimport type { Ref } from 'vue'\nimport { createContext, useArrowNavigation, useDirection, useFormControl, useForwardExpose } from '@/shared'\nimport { computed, ref, toRefs } from 'vue'\n\nexport type AcceptableInputValue = string | Record<string, any>\n\nexport interface TagsInputRootProps<T = AcceptableInputValue> extends PrimitiveProps, FormFieldProps {\n /** The controlled value of the tags input. Can be bind as `v-model`. */\n modelValue?: Array<T> | null\n /** The value of the tags that should be added. Use when you do not need to control the state of the tags input */\n defaultValue?: Array<T>\n /** When `true`, allow adding tags on paste. Work in conjunction with delimiter prop. */\n addOnPaste?: boolean\n /** When `true` allow adding tags on tab keydown */\n addOnTab?: boolean\n /** When `true` allow adding tags blur input */\n addOnBlur?: boolean\n /** When `true`, allow duplicated tags. */\n duplicate?: boolean\n /** When `true`, prevents the user from interacting with the tags input. */\n disabled?: boolean\n /** The character or regular expression to trigger the addition of a new tag. Also used to split tags for `@paste` event */\n delimiter?: string | RegExp\n /** The reading direction of the combobox when applicable. <br> If omitted, inherits globally from `ConfigProvider` or assumes LTR (left-to-right) reading mode. */\n dir?: Direction\n /** Maximum number of tags. */\n max?: number\n id?: string\n /** Convert the input value to the desired type. Mandatory when using objects as values and using `TagsInputInput` */\n convertValue?: (value: string) => T\n /** Display the value of the tag. Useful when you want to apply modifications to the value like adding a suffix or when using object as values */\n displayValue?: (value: T) => string\n}\n\nexport type TagsInputRootEmits<T = AcceptableInputValue> = {\n /** Event handler called when the value changes */\n 'update:modelValue': [payload: Array<T>]\n /** Event handler called when the value is invalid */\n 'invalid': [payload: T]\n /** Event handler called when tag is added */\n 'addTag': [payload: T]\n /** Event handler called when tag is removed */\n 'removeTag': [payload: T]\n}\n\nexport interface TagsInputRootContext<T = AcceptableInputValue> {\n modelValue: Ref<Array<T>>\n onAddValue: (payload: string) => boolean\n onRemoveValue: (index: number) => void\n onInputKeydown: (event: KeyboardEvent) => void\n selectedElement: Ref<HTMLElement | undefined>\n isInvalidInput: Ref<boolean>\n addOnPaste: Ref<boolean>\n addOnTab: Ref<boolean>\n addOnBlur: Ref<boolean>\n disabled: Ref<boolean>\n delimiter: Ref<string | RegExp>\n dir: Ref<Direction>\n max: Ref<number>\n id: Ref<string | undefined> | undefined\n displayValue: (value: T) => string\n}\n\nexport const [injectTagsInputRootContext, provideTagsInputRootContext]\n = createContext<TagsInputRootContext>('TagsInputRoot')\n</script>\n\n<script setup lang=\"ts\" generic=\"T extends AcceptableInputValue = string\">\nimport { useCollection } from '@/Collection'\nimport { Primitive } from '@/Primitive'\nimport { VisuallyHiddenInput } from '@/VisuallyHidden'\nimport { useFocusWithin, useVModel } from '@vueuse/core'\n\nconst props = withDefaults(defineProps<TagsInputRootProps<T>>(), {\n defaultValue: () => [],\n delimiter: ',',\n max: 0,\n displayValue: (value: T) => value.toString(),\n})\nconst emits = defineEmits<TagsInputRootEmits<T>>()\n\ndefineSlots<{\n default: (props: {\n /** Current input values */\n modelValue: typeof modelValue.value\n }) => any\n}>()\n\nconst { addOnPaste, disabled, delimiter, max, id, dir: propDir, addOnBlur, addOnTab } = toRefs(props)\nconst dir = useDirection(propDir)\n\nconst modelValue = useVModel(props, 'modelValue', emits, {\n defaultValue: props.defaultValue,\n passive: true,\n deep: true,\n}) as Ref<Array<AcceptableInputValue>>\n\nconst { forwardRef, currentElement } = useForwardExpose()\nconst { focused } = useFocusWithin(currentElement)\nconst isFormControl = useFormControl(currentElement)\n\nconst { getItems, CollectionSlot } = useCollection({ isProvider: true })\n\nconst selectedElement = ref<HTMLElement>()\nconst isInvalidInput = ref(false)\n\nconst currentModelValue = computed(() => Array.isArray(modelValue.value) ? [...modelValue.value] : [])\n\nfunction handleRemoveTag(index: number) {\n if (index !== -1) {\n const collection = getItems().filter(i => i.ref.dataset.disabled !== '')\n modelValue.value = modelValue.value.filter((_, i) => i !== index)\n emits('removeTag', collection[index].value)\n }\n}\n\nprovideTagsInputRootContext({\n modelValue,\n onAddValue: (_payload) => {\n const array = [...currentModelValue.value]\n const modelValueIsObject = array.length > 0 && typeof array[0] === 'object'\n const defaultValueIsObject = array.length > 0 && typeof props.defaultValue[0] === 'object'\n\n // Check if the value is an object and if the convertValue function is provided. We don't check this a type level because the use\n // of `TagsInputInput` is optional.\n if ((modelValueIsObject || defaultValueIsObject) && typeof props.convertValue !== 'function')\n throw new Error('You must provide a `convertValue` function when using objects as values.')\n const payload = props.convertValue ? props.convertValue(_payload) : _payload as T\n\n if ((array.length >= max.value) && !!max.value) {\n emits('invalid', payload)\n return false\n }\n\n if (props.duplicate) {\n modelValue.value = [...array, payload]\n emits('addTag', payload)\n return true\n }\n else {\n const exist = array.includes(payload)\n if (!exist) {\n modelValue.value = [...array, payload]\n emits('addTag', payload)\n return true\n }\n else {\n isInvalidInput.value = true\n }\n }\n emits('invalid', payload)\n return false\n },\n onRemoveValue: handleRemoveTag,\n onInputKeydown: (event) => {\n const target = event.target as HTMLInputElement\n const collection = getItems().map(i => i.ref).filter(i => i.dataset.disabled !== '')\n if (!collection.length)\n return\n const lastTag = collection.at(-1)\n switch (event.key) {\n case 'Delete':\n case 'Backspace': {\n if (target.selectionStart !== 0 || target.selectionEnd !== 0)\n break\n\n if (selectedElement.value) {\n const index = collection.findIndex(i => i === selectedElement.value)\n handleRemoveTag(index)\n selectedElement.value = selectedElement.value === lastTag ? collection.at(index - 1) : collection.at(index + 1)\n event.preventDefault()\n }\n else if (event.key === 'Backspace') {\n selectedElement.value = lastTag\n event.preventDefault()\n }\n break\n }\n case 'Home':\n case 'End':\n case 'ArrowRight':\n case 'ArrowLeft': {\n const isArrowRight = (event.key === 'ArrowRight' && dir.value === 'ltr') || (event.key === 'ArrowLeft' && dir.value === 'rtl')\n const isArrowLeft = !isArrowRight\n // only focus on tags when cursor is at the first position\n if (target.selectionStart !== 0 || target.selectionEnd !== 0)\n break\n\n // if you press ArrowLeft, then we last tag\n if (isArrowLeft && !selectedElement.value) {\n selectedElement.value = lastTag\n event.preventDefault()\n }\n // if you press ArrowRight on last tag, you deselect\n else if (isArrowRight && lastTag && selectedElement.value === lastTag) {\n selectedElement.value = undefined\n event.preventDefault()\n }\n else if (selectedElement.value) {\n const el = useArrowNavigation(event, selectedElement.value, undefined, {\n itemsArray: collection,\n loop: false,\n dir: dir.value,\n })\n if (el)\n selectedElement.value = el\n event.preventDefault()\n }\n break\n }\n case 'ArrowUp':\n case 'ArrowDown': {\n if (selectedElement.value)\n event.preventDefault()\n break\n }\n default: {\n selectedElement.value = undefined\n }\n }\n },\n selectedElement,\n isInvalidInput,\n addOnPaste,\n addOnBlur,\n addOnTab,\n dir,\n disabled,\n delimiter,\n max,\n id,\n displayValue: props.displayValue as (value: AcceptableInputValue) => string,\n})\n</script>\n\n<template>\n <CollectionSlot>\n <Primitive\n :ref=\"forwardRef\"\n :dir=\"dir\"\n :as=\"as\"\n :as-child=\"asChild\"\n :data-invalid=\"isInvalidInput ? '' : undefined\"\n :data-disabled=\"disabled ? '' : undefined\"\n :data-focused=\"focused ? '' : undefined\"\n >\n <slot :model-value=\"modelValue\" />\n\n <VisuallyHiddenInput\n v-if=\"isFormControl && name\"\n :name=\"name\"\n :value=\"modelValue\"\n :required=\"required\"\n :disabled=\"disabled\"\n />\n </Primitive>\n </CollectionSlot>\n</template>\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TagsInputRoot.js","sources":["../../src/TagsInput/TagsInputRoot.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { Ref } from 'vue'\nimport type { PrimitiveProps } from '@/Primitive'\nimport type { Direction, FormFieldProps } from '@/shared/types'\nimport { computed, ref, toRefs } from 'vue'\nimport { createContext, useArrowNavigation, useDirection, useFormControl, useForwardExpose } from '@/shared'\n\nexport type AcceptableInputValue = string | Record<string, any>\n\nexport interface TagsInputRootProps<T = AcceptableInputValue> extends PrimitiveProps, FormFieldProps {\n /** The controlled value of the tags input. Can be bind as `v-model`. */\n modelValue?: Array<T> | null\n /** The value of the tags that should be added. Use when you do not need to control the state of the tags input */\n defaultValue?: Array<T>\n /** When `true`, allow adding tags on paste. Work in conjunction with delimiter prop. */\n addOnPaste?: boolean\n /** When `true` allow adding tags on tab keydown */\n addOnTab?: boolean\n /** When `true` allow adding tags blur input */\n addOnBlur?: boolean\n /** When `true`, allow duplicated tags. */\n duplicate?: boolean\n /** When `true`, prevents the user from interacting with the tags input. */\n disabled?: boolean\n /** The character or regular expression to trigger the addition of a new tag. Also used to split tags for `@paste` event */\n delimiter?: string | RegExp\n /** The reading direction of the combobox when applicable. <br> If omitted, inherits globally from `ConfigProvider` or assumes LTR (left-to-right) reading mode. */\n dir?: Direction\n /** Maximum number of tags. */\n max?: number\n id?: string\n /** Convert the input value to the desired type. Mandatory when using objects as values and using `TagsInputInput` */\n convertValue?: (value: string) => T\n /** Display the value of the tag. Useful when you want to apply modifications to the value like adding a suffix or when using object as values */\n displayValue?: (value: T) => string\n}\n\nexport type TagsInputRootEmits<T = AcceptableInputValue> = {\n /** Event handler called when the value changes */\n 'update:modelValue': [payload: Array<T>]\n /** Event handler called when the value is invalid */\n 'invalid': [payload: T]\n /** Event handler called when tag is added */\n 'addTag': [payload: T]\n /** Event handler called when tag is removed */\n 'removeTag': [payload: T]\n}\n\nexport interface TagsInputRootContext<T = AcceptableInputValue> {\n modelValue: Ref<Array<T>>\n onAddValue: (payload: string) => boolean\n onRemoveValue: (index: number) => void\n onInputKeydown: (event: KeyboardEvent) => void\n selectedElement: Ref<HTMLElement | undefined>\n isInvalidInput: Ref<boolean>\n addOnPaste: Ref<boolean>\n addOnTab: Ref<boolean>\n addOnBlur: Ref<boolean>\n disabled: Ref<boolean>\n delimiter: Ref<string | RegExp>\n dir: Ref<Direction>\n max: Ref<number>\n id: Ref<string | undefined> | undefined\n displayValue: (value: T) => string\n}\n\nexport const [injectTagsInputRootContext, provideTagsInputRootContext]\n = createContext<TagsInputRootContext>('TagsInputRoot')\n</script>\n\n<script setup lang=\"ts\" generic=\"T extends AcceptableInputValue = string\">\nimport { useFocusWithin, useVModel } from '@vueuse/core'\nimport { useCollection } from '@/Collection'\nimport { Primitive } from '@/Primitive'\nimport { VisuallyHiddenInput } from '@/VisuallyHidden'\n\nconst props = withDefaults(defineProps<TagsInputRootProps<T>>(), {\n defaultValue: () => [],\n delimiter: ',',\n max: 0,\n displayValue: (value: T) => value.toString(),\n})\nconst emits = defineEmits<TagsInputRootEmits<T>>()\n\ndefineSlots<{\n default?: (props: {\n /** Current input values */\n modelValue: typeof modelValue.value\n }) => any\n}>()\n\nconst { addOnPaste, disabled, delimiter, max, id, dir: propDir, addOnBlur, addOnTab } = toRefs(props)\nconst dir = useDirection(propDir)\n\nconst modelValue = useVModel(props, 'modelValue', emits, {\n defaultValue: props.defaultValue,\n passive: true,\n deep: true,\n}) as Ref<Array<AcceptableInputValue>>\n\nconst { forwardRef, currentElement } = useForwardExpose()\nconst { focused } = useFocusWithin(currentElement)\nconst isFormControl = useFormControl(currentElement)\n\nconst { getItems, CollectionSlot } = useCollection({ isProvider: true })\n\nconst selectedElement = ref<HTMLElement>()\nconst isInvalidInput = ref(false)\n\nconst currentModelValue = computed(() => Array.isArray(modelValue.value) ? [...modelValue.value] : [])\n\nfunction handleRemoveTag(index: number) {\n if (index !== -1) {\n const collection = getItems().filter(i => i.ref.dataset.disabled !== '')\n modelValue.value = modelValue.value.filter((_, i) => i !== index)\n emits('removeTag', collection[index].value)\n }\n}\n\nprovideTagsInputRootContext({\n modelValue,\n onAddValue: (_payload) => {\n const array = [...currentModelValue.value]\n const modelValueIsObject = array.length > 0 && typeof array[0] === 'object'\n const defaultValueIsObject = array.length > 0 && typeof props.defaultValue[0] === 'object'\n\n // Check if the value is an object and if the convertValue function is provided. We don't check this a type level because the use\n // of `TagsInputInput` is optional.\n if ((modelValueIsObject || defaultValueIsObject) && typeof props.convertValue !== 'function')\n throw new Error('You must provide a `convertValue` function when using objects as values.')\n const payload = props.convertValue ? props.convertValue(_payload) : _payload as T\n\n if ((array.length >= max.value) && !!max.value) {\n emits('invalid', payload)\n return false\n }\n\n if (props.duplicate) {\n modelValue.value = [...array, payload]\n emits('addTag', payload)\n return true\n }\n else {\n const exist = array.includes(payload)\n if (!exist) {\n modelValue.value = [...array, payload]\n emits('addTag', payload)\n return true\n }\n else {\n isInvalidInput.value = true\n }\n }\n emits('invalid', payload)\n return false\n },\n onRemoveValue: handleRemoveTag,\n onInputKeydown: (event) => {\n const target = event.target as HTMLInputElement\n const collection = getItems().map(i => i.ref).filter(i => i.dataset.disabled !== '')\n if (!collection.length)\n return\n const lastTag = collection.at(-1)\n switch (event.key) {\n case 'Delete':\n case 'Backspace': {\n if (target.selectionStart !== 0 || target.selectionEnd !== 0)\n break\n\n if (selectedElement.value) {\n const index = collection.findIndex(i => i === selectedElement.value)\n handleRemoveTag(index)\n selectedElement.value = selectedElement.value === lastTag ? collection.at(index - 1) : collection.at(index + 1)\n event.preventDefault()\n }\n else if (event.key === 'Backspace') {\n selectedElement.value = lastTag\n event.preventDefault()\n }\n break\n }\n case 'Home':\n case 'End':\n case 'ArrowRight':\n case 'ArrowLeft': {\n const isArrowRight = (event.key === 'ArrowRight' && dir.value === 'ltr') || (event.key === 'ArrowLeft' && dir.value === 'rtl')\n const isArrowLeft = !isArrowRight\n // only focus on tags when cursor is at the first position\n if (target.selectionStart !== 0 || target.selectionEnd !== 0)\n break\n\n // if you press ArrowLeft, then we last tag\n if (isArrowLeft && !selectedElement.value) {\n selectedElement.value = lastTag\n event.preventDefault()\n }\n // if you press ArrowRight on last tag, you deselect\n else if (isArrowRight && lastTag && selectedElement.value === lastTag) {\n selectedElement.value = undefined\n event.preventDefault()\n }\n else if (selectedElement.value) {\n const el = useArrowNavigation(event, selectedElement.value, undefined, {\n itemsArray: collection,\n loop: false,\n dir: dir.value,\n })\n if (el)\n selectedElement.value = el\n event.preventDefault()\n }\n break\n }\n case 'ArrowUp':\n case 'ArrowDown': {\n if (selectedElement.value)\n event.preventDefault()\n break\n }\n default: {\n selectedElement.value = undefined\n }\n }\n },\n selectedElement,\n isInvalidInput,\n addOnPaste,\n addOnBlur,\n addOnTab,\n dir,\n disabled,\n delimiter,\n max,\n id,\n displayValue: props.displayValue as (value: AcceptableInputValue) => string,\n})\n</script>\n\n<template>\n <CollectionSlot>\n <Primitive\n :ref=\"forwardRef\"\n :dir=\"dir\"\n :as=\"as\"\n :as-child=\"asChild\"\n :data-invalid=\"isInvalidInput ? '' : undefined\"\n :data-disabled=\"disabled ? '' : undefined\"\n :data-focused=\"focused ? '' : undefined\"\n >\n <slot :model-value=\"modelValue\" />\n\n <VisuallyHiddenInput\n v-if=\"isFormControl && name\"\n :name=\"name\"\n :value=\"modelValue\"\n :required=\"required\"\n :disabled=\"disabled\"\n />\n </Primitive>\n </CollectionSlot>\n</template>\n"],"names":[],"mappings":"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"}
@@ -26,6 +26,7 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
26
26
  lastKeyZero,
27
27
  placeholder: rootContext.placeholder,
28
28
  hourCycle: rootContext.hourCycle,
29
+ step: rootContext.step,
29
30
  segmentValues: rootContext.segmentValues,
30
31
  formatter: rootContext.formatter,
31
32
  part: props.part,
@@ -1 +1 @@
1
- {"version":3,"file":"TimeFieldInput.cjs","sources":["../../src/TimeField/TimeFieldInput.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { PrimitiveProps } from '@/Primitive'\nimport type { SegmentPart } from '@/shared/date'\nimport { Primitive } from '@/Primitive'\nimport { useDateField } from '@/shared/date/useDateField'\nimport { computed, ref } from 'vue'\nimport { injectTimeFieldRootContext } from './TimeFieldRoot.vue'\n\nexport interface TimeFieldInputProps extends PrimitiveProps {\n /** The part of the date to render */\n part: SegmentPart\n}\n</script>\n\n<script setup lang=\"ts\">\nconst props = defineProps<TimeFieldInputProps>()\n\nconst rootContext = injectTimeFieldRootContext()\n\nconst hasLeftFocus = ref(true)\nconst lastKeyZero = ref(false)\n\nconst {\n handleSegmentClick,\n handleSegmentKeydown,\n attributes,\n} = useDateField({\n hasLeftFocus,\n lastKeyZero,\n placeholder: rootContext.placeholder,\n hourCycle: rootContext.hourCycle,\n segmentValues: rootContext.segmentValues,\n formatter: rootContext.formatter,\n part: props.part,\n disabled: rootContext.disabled,\n readonly: rootContext.readonly,\n focusNext: rootContext.focusNext,\n modelValue: rootContext.modelValue,\n})\n\nconst disabled = computed(() => rootContext.disabled.value)\nconst readonly = computed(() => rootContext.readonly.value)\nconst isInvalid = computed(() => rootContext.isInvalid.value)\n</script>\n\n<template>\n <Primitive\n :as=\"as\"\n :as-child=\"asChild\"\n v-bind=\"attributes\"\n :contenteditable=\"disabled || readonly ? false : part !== 'literal'\"\n :data-reka-time-field-segment=\"part\"\n :aria-disabled=\"disabled ? true : undefined\"\n :aria-readonly=\"readonly ? true : undefined\"\n :data-disabled=\"disabled ? '' : undefined\"\n :data-invalid=\"isInvalid ? '' : undefined\"\n :aria-invalid=\"isInvalid ? true : undefined\"\n v-on=\"part !== 'literal' ? {\n mousedown: handleSegmentClick,\n keydown: handleSegmentKeydown,\n focusout: () => { hasLeftFocus = true },\n focusin: (e: FocusEvent) => {\n rootContext.setFocusedElement(e.target as HTMLElement)\n },\n } : {}\"\n >\n <slot />\n </Primitive>\n</template>\n"],"names":["injectTimeFieldRootContext","ref","useDateField","computed"],"mappings":";;;;;;;;;;;;;;;AAeA,IAAA,MAAM,KAAQ,GAAA,OAAA;AAEd,IAAA,MAAM,cAAcA,kDAA2B,EAAA;AAE/C,IAAM,MAAA,YAAA,GAAeC,QAAI,IAAI,CAAA;AAC7B,IAAM,MAAA,WAAA,GAAcA,QAAI,KAAK,CAAA;AAE7B,IAAM,MAAA;AAAA,MACJ,kBAAA;AAAA,MACA,oBAAA;AAAA,MACA;AAAA,QACEC,8BAAa,CAAA;AAAA,MACf,YAAA;AAAA,MACA,WAAA;AAAA,MACA,aAAa,WAAY,CAAA,WAAA;AAAA,MACzB,WAAW,WAAY,CAAA,SAAA;AAAA,MACvB,eAAe,WAAY,CAAA,aAAA;AAAA,MAC3B,WAAW,WAAY,CAAA,SAAA;AAAA,MACvB,MAAM,KAAM,CAAA,IAAA;AAAA,MACZ,UAAU,WAAY,CAAA,QAAA;AAAA,MACtB,UAAU,WAAY,CAAA,QAAA;AAAA,MACtB,WAAW,WAAY,CAAA,SAAA;AAAA,MACvB,YAAY,WAAY,CAAA;AAAA,KACzB,CAAA;AAED,IAAA,MAAM,QAAW,GAAAC,YAAA,CAAS,MAAM,WAAA,CAAY,SAAS,KAAK,CAAA;AAC1D,IAAA,MAAM,QAAW,GAAAA,YAAA,CAAS,MAAM,WAAA,CAAY,SAAS,KAAK,CAAA;AAC1D,IAAA,MAAM,SAAY,GAAAA,YAAA,CAAS,MAAM,WAAA,CAAY,UAAU,KAAK,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"TimeFieldInput.cjs","sources":["../../src/TimeField/TimeFieldInput.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { PrimitiveProps } from '@/Primitive'\nimport type { SegmentPart } from '@/shared/date'\nimport { computed, ref } from 'vue'\nimport { Primitive } from '@/Primitive'\nimport { useDateField } from '@/shared/date/useDateField'\nimport { injectTimeFieldRootContext } from './TimeFieldRoot.vue'\n\nexport interface TimeFieldInputProps extends PrimitiveProps {\n /** The part of the date to render */\n part: SegmentPart\n}\n</script>\n\n<script setup lang=\"ts\">\nconst props = defineProps<TimeFieldInputProps>()\n\nconst rootContext = injectTimeFieldRootContext()\n\nconst hasLeftFocus = ref(true)\nconst lastKeyZero = ref(false)\n\nconst {\n handleSegmentClick,\n handleSegmentKeydown,\n attributes,\n} = useDateField({\n hasLeftFocus,\n lastKeyZero,\n placeholder: rootContext.placeholder,\n hourCycle: rootContext.hourCycle,\n step: rootContext.step,\n segmentValues: rootContext.segmentValues,\n formatter: rootContext.formatter,\n part: props.part,\n disabled: rootContext.disabled,\n readonly: rootContext.readonly,\n focusNext: rootContext.focusNext,\n modelValue: rootContext.modelValue,\n})\n\nconst disabled = computed(() => rootContext.disabled.value)\nconst readonly = computed(() => rootContext.readonly.value)\nconst isInvalid = computed(() => rootContext.isInvalid.value)\n</script>\n\n<template>\n <Primitive\n :as=\"as\"\n :as-child=\"asChild\"\n v-bind=\"attributes\"\n :contenteditable=\"disabled || readonly ? false : part !== 'literal'\"\n :data-reka-time-field-segment=\"part\"\n :aria-disabled=\"disabled ? true : undefined\"\n :aria-readonly=\"readonly ? true : undefined\"\n :data-disabled=\"disabled ? '' : undefined\"\n :data-invalid=\"isInvalid ? '' : undefined\"\n :aria-invalid=\"isInvalid ? true : undefined\"\n v-on=\"part !== 'literal' ? {\n mousedown: handleSegmentClick,\n keydown: handleSegmentKeydown,\n focusout: () => { hasLeftFocus = true },\n focusin: (e: FocusEvent) => {\n rootContext.setFocusedElement(e.target as HTMLElement)\n },\n } : {}\"\n >\n <slot />\n </Primitive>\n</template>\n"],"names":["injectTimeFieldRootContext","ref","useDateField","computed"],"mappings":";;;;;;;;;;;;;;;AAeA,IAAA,MAAM,KAAQ,GAAA,OAAA;AAEd,IAAA,MAAM,cAAcA,kDAA2B,EAAA;AAE/C,IAAM,MAAA,YAAA,GAAeC,QAAI,IAAI,CAAA;AAC7B,IAAM,MAAA,WAAA,GAAcA,QAAI,KAAK,CAAA;AAE7B,IAAM,MAAA;AAAA,MACJ,kBAAA;AAAA,MACA,oBAAA;AAAA,MACA;AAAA,QACEC,8BAAa,CAAA;AAAA,MACf,YAAA;AAAA,MACA,WAAA;AAAA,MACA,aAAa,WAAY,CAAA,WAAA;AAAA,MACzB,WAAW,WAAY,CAAA,SAAA;AAAA,MACvB,MAAM,WAAY,CAAA,IAAA;AAAA,MAClB,eAAe,WAAY,CAAA,aAAA;AAAA,MAC3B,WAAW,WAAY,CAAA,SAAA;AAAA,MACvB,MAAM,KAAM,CAAA,IAAA;AAAA,MACZ,UAAU,WAAY,CAAA,QAAA;AAAA,MACtB,UAAU,WAAY,CAAA,QAAA;AAAA,MACtB,WAAW,WAAY,CAAA,SAAA;AAAA,MACvB,YAAY,WAAY,CAAA;AAAA,KACzB,CAAA;AAED,IAAA,MAAM,QAAW,GAAAC,YAAA,CAAS,MAAM,WAAA,CAAY,SAAS,KAAK,CAAA;AAC1D,IAAA,MAAM,QAAW,GAAAA,YAAA,CAAS,MAAM,WAAA,CAAY,SAAS,KAAK,CAAA;AAC1D,IAAA,MAAM,SAAY,GAAAA,YAAA,CAAS,MAAM,WAAA,CAAY,UAAU,KAAK,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -24,6 +24,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
24
24
  lastKeyZero,
25
25
  placeholder: rootContext.placeholder,
26
26
  hourCycle: rootContext.hourCycle,
27
+ step: rootContext.step,
27
28
  segmentValues: rootContext.segmentValues,
28
29
  formatter: rootContext.formatter,
29
30
  part: props.part,
@@ -1 +1 @@
1
- {"version":3,"file":"TimeFieldInput.js","sources":["../../src/TimeField/TimeFieldInput.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { PrimitiveProps } from '@/Primitive'\nimport type { SegmentPart } from '@/shared/date'\nimport { Primitive } from '@/Primitive'\nimport { useDateField } from '@/shared/date/useDateField'\nimport { computed, ref } from 'vue'\nimport { injectTimeFieldRootContext } from './TimeFieldRoot.vue'\n\nexport interface TimeFieldInputProps extends PrimitiveProps {\n /** The part of the date to render */\n part: SegmentPart\n}\n</script>\n\n<script setup lang=\"ts\">\nconst props = defineProps<TimeFieldInputProps>()\n\nconst rootContext = injectTimeFieldRootContext()\n\nconst hasLeftFocus = ref(true)\nconst lastKeyZero = ref(false)\n\nconst {\n handleSegmentClick,\n handleSegmentKeydown,\n attributes,\n} = useDateField({\n hasLeftFocus,\n lastKeyZero,\n placeholder: rootContext.placeholder,\n hourCycle: rootContext.hourCycle,\n segmentValues: rootContext.segmentValues,\n formatter: rootContext.formatter,\n part: props.part,\n disabled: rootContext.disabled,\n readonly: rootContext.readonly,\n focusNext: rootContext.focusNext,\n modelValue: rootContext.modelValue,\n})\n\nconst disabled = computed(() => rootContext.disabled.value)\nconst readonly = computed(() => rootContext.readonly.value)\nconst isInvalid = computed(() => rootContext.isInvalid.value)\n</script>\n\n<template>\n <Primitive\n :as=\"as\"\n :as-child=\"asChild\"\n v-bind=\"attributes\"\n :contenteditable=\"disabled || readonly ? false : part !== 'literal'\"\n :data-reka-time-field-segment=\"part\"\n :aria-disabled=\"disabled ? true : undefined\"\n :aria-readonly=\"readonly ? true : undefined\"\n :data-disabled=\"disabled ? '' : undefined\"\n :data-invalid=\"isInvalid ? '' : undefined\"\n :aria-invalid=\"isInvalid ? true : undefined\"\n v-on=\"part !== 'literal' ? {\n mousedown: handleSegmentClick,\n keydown: handleSegmentKeydown,\n focusout: () => { hasLeftFocus = true },\n focusin: (e: FocusEvent) => {\n rootContext.setFocusedElement(e.target as HTMLElement)\n },\n } : {}\"\n >\n <slot />\n </Primitive>\n</template>\n"],"names":[],"mappings":";;;;;;;;;;;;;AAeA,IAAA,MAAM,KAAQ,GAAA,OAAA;AAEd,IAAA,MAAM,cAAc,0BAA2B,EAAA;AAE/C,IAAM,MAAA,YAAA,GAAe,IAAI,IAAI,CAAA;AAC7B,IAAM,MAAA,WAAA,GAAc,IAAI,KAAK,CAAA;AAE7B,IAAM,MAAA;AAAA,MACJ,kBAAA;AAAA,MACA,oBAAA;AAAA,MACA;AAAA,QACE,YAAa,CAAA;AAAA,MACf,YAAA;AAAA,MACA,WAAA;AAAA,MACA,aAAa,WAAY,CAAA,WAAA;AAAA,MACzB,WAAW,WAAY,CAAA,SAAA;AAAA,MACvB,eAAe,WAAY,CAAA,aAAA;AAAA,MAC3B,WAAW,WAAY,CAAA,SAAA;AAAA,MACvB,MAAM,KAAM,CAAA,IAAA;AAAA,MACZ,UAAU,WAAY,CAAA,QAAA;AAAA,MACtB,UAAU,WAAY,CAAA,QAAA;AAAA,MACtB,WAAW,WAAY,CAAA,SAAA;AAAA,MACvB,YAAY,WAAY,CAAA;AAAA,KACzB,CAAA;AAED,IAAA,MAAM,QAAW,GAAA,QAAA,CAAS,MAAM,WAAA,CAAY,SAAS,KAAK,CAAA;AAC1D,IAAA,MAAM,QAAW,GAAA,QAAA,CAAS,MAAM,WAAA,CAAY,SAAS,KAAK,CAAA;AAC1D,IAAA,MAAM,SAAY,GAAA,QAAA,CAAS,MAAM,WAAA,CAAY,UAAU,KAAK,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"TimeFieldInput.js","sources":["../../src/TimeField/TimeFieldInput.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { PrimitiveProps } from '@/Primitive'\nimport type { SegmentPart } from '@/shared/date'\nimport { computed, ref } from 'vue'\nimport { Primitive } from '@/Primitive'\nimport { useDateField } from '@/shared/date/useDateField'\nimport { injectTimeFieldRootContext } from './TimeFieldRoot.vue'\n\nexport interface TimeFieldInputProps extends PrimitiveProps {\n /** The part of the date to render */\n part: SegmentPart\n}\n</script>\n\n<script setup lang=\"ts\">\nconst props = defineProps<TimeFieldInputProps>()\n\nconst rootContext = injectTimeFieldRootContext()\n\nconst hasLeftFocus = ref(true)\nconst lastKeyZero = ref(false)\n\nconst {\n handleSegmentClick,\n handleSegmentKeydown,\n attributes,\n} = useDateField({\n hasLeftFocus,\n lastKeyZero,\n placeholder: rootContext.placeholder,\n hourCycle: rootContext.hourCycle,\n step: rootContext.step,\n segmentValues: rootContext.segmentValues,\n formatter: rootContext.formatter,\n part: props.part,\n disabled: rootContext.disabled,\n readonly: rootContext.readonly,\n focusNext: rootContext.focusNext,\n modelValue: rootContext.modelValue,\n})\n\nconst disabled = computed(() => rootContext.disabled.value)\nconst readonly = computed(() => rootContext.readonly.value)\nconst isInvalid = computed(() => rootContext.isInvalid.value)\n</script>\n\n<template>\n <Primitive\n :as=\"as\"\n :as-child=\"asChild\"\n v-bind=\"attributes\"\n :contenteditable=\"disabled || readonly ? false : part !== 'literal'\"\n :data-reka-time-field-segment=\"part\"\n :aria-disabled=\"disabled ? true : undefined\"\n :aria-readonly=\"readonly ? true : undefined\"\n :data-disabled=\"disabled ? '' : undefined\"\n :data-invalid=\"isInvalid ? '' : undefined\"\n :aria-invalid=\"isInvalid ? true : undefined\"\n v-on=\"part !== 'literal' ? {\n mousedown: handleSegmentClick,\n keydown: handleSegmentKeydown,\n focusout: () => { hasLeftFocus = true },\n focusin: (e: FocusEvent) => {\n rootContext.setFocusedElement(e.target as HTMLElement)\n },\n } : {}\"\n >\n <slot />\n </Primitive>\n</template>\n"],"names":[],"mappings":";;;;;;;;;;;;;AAeA,IAAA,MAAM,KAAQ,GAAA,OAAA;AAEd,IAAA,MAAM,cAAc,0BAA2B,EAAA;AAE/C,IAAM,MAAA,YAAA,GAAe,IAAI,IAAI,CAAA;AAC7B,IAAM,MAAA,WAAA,GAAc,IAAI,KAAK,CAAA;AAE7B,IAAM,MAAA;AAAA,MACJ,kBAAA;AAAA,MACA,oBAAA;AAAA,MACA;AAAA,QACE,YAAa,CAAA;AAAA,MACf,YAAA;AAAA,MACA,WAAA;AAAA,MACA,aAAa,WAAY,CAAA,WAAA;AAAA,MACzB,WAAW,WAAY,CAAA,SAAA;AAAA,MACvB,MAAM,WAAY,CAAA,IAAA;AAAA,MAClB,eAAe,WAAY,CAAA,aAAA;AAAA,MAC3B,WAAW,WAAY,CAAA,SAAA;AAAA,MACvB,MAAM,KAAM,CAAA,IAAA;AAAA,MACZ,UAAU,WAAY,CAAA,QAAA;AAAA,MACtB,UAAU,WAAY,CAAA,QAAA;AAAA,MACtB,WAAW,WAAY,CAAA,SAAA;AAAA,MACvB,YAAY,WAAY,CAAA;AAAA,KACzB,CAAA;AAED,IAAA,MAAM,QAAW,GAAA,QAAA,CAAS,MAAM,WAAA,CAAY,SAAS,KAAK,CAAA;AAC1D,IAAA,MAAM,QAAW,GAAA,QAAA,CAAS,MAAM,WAAA,CAAY,SAAS,KAAK,CAAA;AAC1D,IAAA,MAAM,SAAY,GAAA,QAAA,CAAS,MAAM,WAAA,CAAY,UAAU,KAAK,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -2,8 +2,8 @@
2
2
 
3
3
  const vue = require('vue');
4
4
  const core = require('@vueuse/core');
5
- const date_comparators = require('../date/comparators.cjs');
6
5
  const date = require('@internationalized/date');
6
+ const date_comparators = require('../date/comparators.cjs');
7
7
  const shared_createContext = require('../shared/createContext.cjs');
8
8
  const shared_useLocale = require('../shared/useLocale.cjs');
9
9
  const shared_useDirection = require('../shared/useDirection.cjs');
@@ -14,6 +14,7 @@ const date_parser = require('../date/parser.cjs');
14
14
  const Primitive_Primitive = require('../Primitive/Primitive.cjs');
15
15
  const VisuallyHidden_VisuallyHidden = require('../VisuallyHidden/VisuallyHidden.cjs');
16
16
  const shared_useKbd = require('../shared/useKbd.cjs');
17
+ const date_utils = require('../date/utils.cjs');
17
18
  const shared_nullish = require('../shared/nullish.cjs');
18
19
 
19
20
  const [injectTimeFieldRootContext, provideTimeFieldRootContext] = shared_createContext.createContext("TimeFieldRoot");
@@ -34,6 +35,7 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
34
35
  placeholder: { default: void 0 },
35
36
  modelValue: {},
36
37
  hourCycle: {},
38
+ step: {},
37
39
  granularity: {},
38
40
  hideTimeZone: { type: Boolean },
39
41
  maxValue: {},
@@ -55,9 +57,12 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
55
57
  const { disabled, readonly, granularity, defaultValue, minValue, maxValue, dir: propDir, locale: propLocale } = vue.toRefs(props);
56
58
  const locale = shared_useLocale.useLocale(propLocale);
57
59
  const dir = shared_useDirection.useDirection(propDir);
58
- const formatter = shared_useDateFormatter.useDateFormatter(locale.value);
60
+ const formatter = shared_useDateFormatter.useDateFormatter(locale.value, {
61
+ hourCycle: date_utils.normalizeHourCycle(props.hourCycle)
62
+ });
59
63
  const { primitiveElement, currentElement: parentElement } = Primitive_usePrimitiveElement.usePrimitiveElement();
60
64
  const segmentElements = vue.ref(/* @__PURE__ */ new Set());
65
+ const step = vue.computed(() => date_utils.normalizeDateStep(props));
61
66
  const convertedMinValue = vue.computed(() => minValue.value ? convertValue(minValue.value) : void 0);
62
67
  const convertedMaxValue = vue.computed(() => maxValue.value ? convertValue(maxValue.value) : void 0);
63
68
  vue.onMounted(() => {
@@ -74,8 +79,11 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
74
79
  return convertValue(modelValue.value);
75
80
  },
76
81
  set(newValue) {
77
- if (newValue)
82
+ if (newValue) {
78
83
  modelValue.value = modelValue.value && "day" in modelValue.value ? newValue : new date.Time(newValue.hour, newValue.minute, newValue.second, modelValue.value?.millisecond);
84
+ } else {
85
+ modelValue.value = newValue;
86
+ }
79
87
  return newValue;
80
88
  }
81
89
  });
@@ -141,7 +149,7 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
141
149
  vue.watch([convertedModelValue, locale], ([_modelValue]) => {
142
150
  if (!shared_nullish.isNullish(_modelValue)) {
143
151
  segmentValues.value = { ...date_parser.syncTimeSegmentValues({ value: _modelValue, formatter }) };
144
- } else if (Object.values(segmentValues.value).every((value) => value === null) || shared_nullish.isNullish(_modelValue)) {
152
+ } else if (Object.values(segmentValues.value).every((value) => value !== null) && shared_nullish.isNullish(_modelValue)) {
145
153
  segmentValues.value = { ...initialSegments };
146
154
  }
147
155
  });
@@ -182,6 +190,7 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
182
190
  disabled,
183
191
  formatter,
184
192
  hourCycle: props.hourCycle,
193
+ step,
185
194
  readonly,
186
195
  segmentValues,
187
196
  isInvalid,
@@ -1 +1 @@
1
- {"version":3,"file":"TimeFieldRoot.cjs","sources":["../../src/TimeField/TimeFieldRoot.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { PrimitiveProps } from '@/Primitive'\n\nimport type { Formatter } from '@/shared'\nimport type { HourCycle, SegmentPart, SegmentValueObj, TimeValue } from '@/shared/date'\nimport type { Direction, FormFieldProps } from '@/shared/types'\nimport type { DateValue } from '@internationalized/date'\nimport type { Ref } from 'vue'\nimport { isBefore } from '@/date'\nimport { createContext, isNullish, useDateFormatter, useDirection, useKbd, useLocale } from '@/shared'\nimport {\n createContent,\n getDefaultTime,\n getTimeFieldSegmentElements,\n\n initializeTimeSegmentValues,\n isSegmentNavigationKey,\n\n syncTimeSegmentValues,\n\n} from '@/shared/date'\nimport { getLocalTimeZone, isEqualDay, Time, toCalendarDateTime, today } from '@internationalized/date'\n\ntype TimeFieldRootContext = {\n locale: Ref<string>\n modelValue: Ref<DateValue | undefined>\n placeholder: Ref<DateValue>\n isInvalid: Ref<boolean>\n disabled: Ref<boolean>\n readonly: Ref<boolean>\n formatter: Formatter\n hourCycle: HourCycle\n segmentValues: Ref<SegmentValueObj>\n segmentContents: Ref<{ part: SegmentPart, value: string }[]>\n elements: Ref<Set<HTMLElement>>\n focusNext: () => void\n setFocusedElement: (el: HTMLElement) => void\n}\n\nexport interface TimeFieldRootProps extends PrimitiveProps, FormFieldProps {\n /** The default value for the calendar */\n defaultValue?: TimeValue\n /** The default placeholder date */\n defaultPlaceholder?: TimeValue\n /** The placeholder date, which is used to determine what time to display when no time is selected. This updates as the user navigates the field */\n placeholder?: TimeValue\n /** The controlled checked state of the field. Can be bound as `v-model`. */\n modelValue?: TimeValue | null\n /** The hour cycle used for formatting times. Defaults to the local preference */\n hourCycle?: HourCycle\n /** The granularity to use for formatting times. Defaults to minute if a Time is provided, otherwise defaults to minute. The field will render segments for each part of the date up to and including the specified granularity */\n granularity?: 'hour' | 'minute' | 'second'\n /** Whether or not to hide the time zone segment of the field */\n hideTimeZone?: boolean\n /** The maximum date that can be selected */\n maxValue?: TimeValue\n /** The minimum date that can be selected */\n minValue?: TimeValue\n /** The locale to use for formatting dates */\n locale?: string\n /** Whether or not the time field is disabled */\n disabled?: boolean\n /** Whether or not the time field is readonly */\n readonly?: boolean\n /** Id of the element */\n id?: string\n /** The reading direction of the time field when applicable. <br> If omitted, inherits globally from `ConfigProvider` or assumes LTR (left-to-right) reading mode. */\n dir?: Direction\n}\n\nexport type TimeFieldRootEmits = {\n /** Event handler called whenever the model value changes */\n 'update:modelValue': [date: TimeValue | undefined]\n /** Event handler called whenever the placeholder value changes */\n 'update:placeholder': [date: TimeValue]\n}\n\nexport const [injectTimeFieldRootContext, provideTimeFieldRootContext]\n = createContext<TimeFieldRootContext>('TimeFieldRoot')\n\nfunction convertValue(value: TimeValue, date: DateValue = today(getLocalTimeZone())) {\n if (value && 'day' in value) {\n return value\n }\n\n return toCalendarDateTime(date, value)\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { Primitive, usePrimitiveElement } from '@/Primitive'\nimport { VisuallyHidden } from '@/VisuallyHidden'\nimport { useVModel } from '@vueuse/core'\nimport { computed, nextTick, onMounted, ref, toRefs, watch } from 'vue'\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<TimeFieldRootProps>(), {\n defaultValue: undefined,\n disabled: false,\n readonly: false,\n placeholder: undefined,\n isDateUnavailable: undefined,\n})\nconst emits = defineEmits<TimeFieldRootEmits>()\ndefineSlots<{\n default: (props: {\n /** The current time of the field */\n modelValue: TimeValue | undefined\n /** The time field segment contents */\n segments: { part: SegmentPart, value: string }[]\n /** Value if the input is invalid */\n isInvalid: boolean\n }) => any\n}>()\n\nconst { disabled, readonly, granularity, defaultValue, minValue, maxValue, dir: propDir, locale: propLocale } = toRefs(props)\nconst locale = useLocale(propLocale)\nconst dir = useDirection(propDir)\n\nconst formatter = useDateFormatter(locale.value)\nconst { primitiveElement, currentElement: parentElement }\n = usePrimitiveElement()\nconst segmentElements = ref<Set<HTMLElement>>(new Set())\n\nconst convertedMinValue = computed(() => minValue.value ? convertValue(minValue.value) : undefined)\nconst convertedMaxValue = computed(() => maxValue.value ? convertValue(maxValue.value) : undefined)\n\nonMounted(() => {\n getTimeFieldSegmentElements(parentElement.value).forEach(item => segmentElements.value.add(item as HTMLElement))\n})\n\nconst modelValue = useVModel(props, 'modelValue', emits, {\n defaultValue: defaultValue.value,\n passive: (props.modelValue === undefined) as false,\n}) as Ref<TimeValue>\n\nconst convertedModelValue = computed({\n get() {\n if (isNullish(modelValue.value))\n return modelValue.value\n return convertValue(modelValue.value)\n },\n set(newValue) {\n if (newValue)\n modelValue.value = modelValue.value && 'day' in modelValue.value ? newValue : new Time(newValue.hour, newValue.minute, newValue.second, modelValue.value?.millisecond)\n\n return newValue\n },\n})\n\nconst defaultDate = getDefaultTime({\n defaultPlaceholder: props.placeholder,\n defaultValue: modelValue.value,\n})\n\nconst placeholder = useVModel(props, 'placeholder', emits, {\n defaultValue: props.defaultPlaceholder ?? defaultDate.copy(),\n passive: (props.placeholder === undefined) as false,\n}) as Ref<TimeValue>\n\nconst convertedPlaceholder = computed({\n get() {\n return convertValue(placeholder.value)\n },\n set(newValue) {\n if (newValue)\n placeholder.value = 'day' in placeholder.value ? newValue.copy() : new Time(newValue.hour, newValue.minute, newValue.second, placeholder.value?.millisecond)\n return newValue\n },\n})\n\nconst inferredGranularity = computed(() => {\n if (granularity.value)\n return granularity.value\n\n return 'minute'\n})\n\nconst isInvalid = computed(() => {\n if (!modelValue.value)\n return false\n\n if (convertedMinValue.value && isBefore(convertedModelValue.value, convertedMinValue.value))\n return true\n\n if (convertedMaxValue.value && isBefore(convertedMaxValue.value, convertedModelValue.value))\n return true\n\n return false\n})\n\nconst initialSegments = initializeTimeSegmentValues(inferredGranularity.value)\n\nconst segmentValues = ref<SegmentValueObj>(modelValue.value ? { ...syncTimeSegmentValues({ value: convertedModelValue.value, formatter }) } : { ...initialSegments })\n\nconst allSegmentContent = computed(() => createContent({\n granularity: inferredGranularity.value,\n dateRef: convertedPlaceholder.value,\n formatter,\n hideTimeZone: props.hideTimeZone,\n hourCycle: props.hourCycle,\n segmentValues: segmentValues.value,\n locale,\n isTimeValue: true,\n}))\n\nconst segmentContents = computed(() => allSegmentContent.value.arr)\n\nconst editableSegmentContents = computed(() => segmentContents.value.filter(({ part }) => part !== 'literal'))\n\nwatch(locale, (value) => {\n if (formatter.getLocale() !== value) {\n formatter.setLocale(value)\n // Locale changed, so we need to clear the segment elements and re-get them (different order)\n // Get the focusable elements again on the next tick\n nextTick(() => {\n segmentElements.value.clear()\n getTimeFieldSegmentElements(parentElement.value).forEach(item => segmentElements.value.add(item as HTMLElement))\n })\n }\n})\n\nwatch(convertedModelValue, (_modelValue) => {\n if (!isNullish(_modelValue) && (!isEqualDay(convertedPlaceholder.value, _modelValue) || convertedPlaceholder.value.compare(_modelValue) !== 0))\n placeholder.value = _modelValue.copy()\n})\n\nwatch([convertedModelValue, locale], ([_modelValue]) => {\n if (!isNullish(_modelValue)) {\n segmentValues.value = { ...syncTimeSegmentValues({ value: _modelValue, formatter }) }\n }\n else if (Object.values(segmentValues.value).every(value => value === null) || isNullish(_modelValue)) {\n segmentValues.value = { ...initialSegments }\n }\n})\n\nconst currentFocusedElement = ref<HTMLElement | null>(null)\n\nconst currentSegmentIndex = computed(() =>\n Array.from(segmentElements.value).findIndex(el =>\n el.getAttribute('data-reka-time-field-segment')\n === currentFocusedElement.value?.getAttribute('data-reka-time-field-segment')))\n\nconst nextFocusableSegment = computed(() => {\n const sign = dir.value === 'rtl' ? -1 : 1\n const nextCondition = sign < 0 ? currentSegmentIndex.value < 0 : currentSegmentIndex.value > segmentElements.value.size - 1\n if (nextCondition)\n return null\n const segmentToFocus = Array.from(segmentElements.value)[currentSegmentIndex.value + sign]\n return segmentToFocus\n})\n\nconst prevFocusableSegment = computed(() => {\n const sign = dir.value === 'rtl' ? -1 : 1\n const prevCondition = sign > 0 ? currentSegmentIndex.value < 0 : currentSegmentIndex.value > segmentElements.value.size - 1\n if (prevCondition)\n return null\n\n const segmentToFocus = Array.from(segmentElements.value)[currentSegmentIndex.value - sign]\n return segmentToFocus\n})\n\nconst kbd = useKbd()\n\nfunction handleKeydown(e: KeyboardEvent) {\n if (!isSegmentNavigationKey(e.key))\n return\n if (e.key === kbd.ARROW_LEFT)\n prevFocusableSegment.value?.focus()\n if (e.key === kbd.ARROW_RIGHT)\n nextFocusableSegment.value?.focus()\n}\n\nfunction setFocusedElement(el: HTMLElement) {\n currentFocusedElement.value = el\n}\n\nprovideTimeFieldRootContext({\n locale,\n modelValue: convertedModelValue,\n placeholder: convertedPlaceholder,\n disabled,\n formatter,\n hourCycle: props.hourCycle,\n readonly,\n segmentValues,\n isInvalid,\n segmentContents: editableSegmentContents,\n elements: segmentElements,\n setFocusedElement,\n focusNext() {\n nextFocusableSegment.value?.focus()\n },\n})\n\ndefineExpose({\n /** Helper to set the focused element inside the DateField */\n setFocusedElement,\n})\n</script>\n\n<template>\n <Primitive\n v-bind=\"$attrs\"\n ref=\"primitiveElement\"\n role=\"group\"\n :aria-disabled=\"disabled ? true : undefined\"\n :data-disabled=\"disabled ? '' : undefined\"\n :data-readonly=\"readonly ? '' : undefined\"\n :data-invalid=\"isInvalid ? '' : undefined\"\n :dir=\"dir\"\n @keydown.left.right=\"handleKeydown\"\n >\n <slot\n :model-value=\"modelValue\"\n :segments=\"segmentContents\"\n :is-invalid=\"isInvalid\"\n />\n\n <VisuallyHidden\n :id=\"id\"\n as=\"input\"\n feature=\"focusable\"\n tabindex=\"-1\"\n :value=\"modelValue ? modelValue.toString() : ''\"\n :name=\"name\"\n :disabled=\"disabled\"\n :required=\"required\"\n @focus=\"Array.from(segmentElements)?.[0]?.focus()\"\n />\n </Primitive>\n</template>\n"],"names":["createContext","date","today","getLocalTimeZone","toCalendarDateTime","toRefs","useLocale","useDirection","useDateFormatter","usePrimitiveElement","ref","computed","onMounted","getTimeFieldSegmentElements","useVModel","isNullish","Time","getDefaultTime","isBefore","initializeTimeSegmentValues","syncTimeSegmentValues","createContent","watch","nextTick","isEqualDay","useKbd","isSegmentNavigationKey"],"mappings":"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"}
1
+ {"version":3,"file":"TimeFieldRoot.cjs","sources":["../../src/TimeField/TimeFieldRoot.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { DateValue } from '@internationalized/date'\nimport type { Ref } from 'vue'\nimport type { PrimitiveProps } from '@/Primitive'\nimport type { Formatter } from '@/shared'\nimport type { DateStep, HourCycle, SegmentPart, SegmentValueObj, TimeValue } from '@/shared/date'\nimport type { Direction, FormFieldProps } from '@/shared/types'\nimport { getLocalTimeZone, isEqualDay, Time, toCalendarDateTime, today } from '@internationalized/date'\nimport { isBefore } from '@/date'\nimport { createContext, isNullish, useDateFormatter, useDirection, useKbd, useLocale } from '@/shared'\nimport {\n createContent,\n getDefaultTime,\n getTimeFieldSegmentElements,\n\n initializeTimeSegmentValues,\n isSegmentNavigationKey,\n normalizeDateStep,\n normalizeHourCycle,\n\n syncTimeSegmentValues,\n\n} from '@/shared/date'\n\ntype TimeFieldRootContext = {\n locale: Ref<string>\n modelValue: Ref<DateValue | undefined>\n placeholder: Ref<DateValue>\n isInvalid: Ref<boolean>\n disabled: Ref<boolean>\n readonly: Ref<boolean>\n formatter: Formatter\n hourCycle: HourCycle\n step: Ref<DateStep>\n segmentValues: Ref<SegmentValueObj>\n segmentContents: Ref<{ part: SegmentPart, value: string }[]>\n elements: Ref<Set<HTMLElement>>\n focusNext: () => void\n setFocusedElement: (el: HTMLElement) => void\n}\n\nexport interface TimeFieldRootProps extends PrimitiveProps, FormFieldProps {\n /** The default value for the calendar */\n defaultValue?: TimeValue\n /** The default placeholder date */\n defaultPlaceholder?: TimeValue\n /** The placeholder date, which is used to determine what time to display when no time is selected. This updates as the user navigates the field */\n placeholder?: TimeValue\n /** The controlled checked state of the field. Can be bound as `v-model`. */\n modelValue?: TimeValue | null\n /** The hour cycle used for formatting times. Defaults to the local preference */\n hourCycle?: HourCycle\n /** The stepping interval for the time fields. Defaults to `1`. */\n step?: DateStep\n /** The granularity to use for formatting times. Defaults to minute if a Time is provided, otherwise defaults to minute. The field will render segments for each part of the date up to and including the specified granularity */\n granularity?: 'hour' | 'minute' | 'second'\n /** Whether or not to hide the time zone segment of the field */\n hideTimeZone?: boolean\n /** The maximum date that can be selected */\n maxValue?: TimeValue\n /** The minimum date that can be selected */\n minValue?: TimeValue\n /** The locale to use for formatting dates */\n locale?: string\n /** Whether or not the time field is disabled */\n disabled?: boolean\n /** Whether or not the time field is readonly */\n readonly?: boolean\n /** Id of the element */\n id?: string\n /** The reading direction of the time field when applicable. <br> If omitted, inherits globally from `ConfigProvider` or assumes LTR (left-to-right) reading mode. */\n dir?: Direction\n}\n\nexport type TimeFieldRootEmits = {\n /** Event handler called whenever the model value changes */\n 'update:modelValue': [date: TimeValue | undefined]\n /** Event handler called whenever the placeholder value changes */\n 'update:placeholder': [date: TimeValue]\n}\n\nexport const [injectTimeFieldRootContext, provideTimeFieldRootContext]\n = createContext<TimeFieldRootContext>('TimeFieldRoot')\n\nfunction convertValue(value: TimeValue, date: DateValue = today(getLocalTimeZone())) {\n if (value && 'day' in value) {\n return value\n }\n\n return toCalendarDateTime(date, value)\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { useVModel } from '@vueuse/core'\nimport { computed, nextTick, onMounted, ref, toRefs, watch } from 'vue'\nimport { Primitive, usePrimitiveElement } from '@/Primitive'\nimport { VisuallyHidden } from '@/VisuallyHidden'\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<TimeFieldRootProps>(), {\n defaultValue: undefined,\n disabled: false,\n readonly: false,\n placeholder: undefined,\n isDateUnavailable: undefined,\n})\nconst emits = defineEmits<TimeFieldRootEmits>()\ndefineSlots<{\n default?: (props: {\n /** The current time of the field */\n modelValue: TimeValue | undefined\n /** The time field segment contents */\n segments: { part: SegmentPart, value: string }[]\n /** Value if the input is invalid */\n isInvalid: boolean\n }) => any\n}>()\n\nconst { disabled, readonly, granularity, defaultValue, minValue, maxValue, dir: propDir, locale: propLocale } = toRefs(props)\nconst locale = useLocale(propLocale)\nconst dir = useDirection(propDir)\n\nconst formatter = useDateFormatter(locale.value, {\n hourCycle: normalizeHourCycle(props.hourCycle),\n})\nconst { primitiveElement, currentElement: parentElement }\n = usePrimitiveElement()\nconst segmentElements = ref<Set<HTMLElement>>(new Set())\n\nconst step = computed(() => normalizeDateStep(props))\n\nconst convertedMinValue = computed(() => minValue.value ? convertValue(minValue.value) : undefined)\nconst convertedMaxValue = computed(() => maxValue.value ? convertValue(maxValue.value) : undefined)\n\nonMounted(() => {\n getTimeFieldSegmentElements(parentElement.value).forEach(item => segmentElements.value.add(item as HTMLElement))\n})\n\nconst modelValue = useVModel(props, 'modelValue', emits, {\n defaultValue: defaultValue.value,\n passive: (props.modelValue === undefined) as false,\n}) as Ref<TimeValue>\n\nconst convertedModelValue = computed({\n get() {\n if (isNullish(modelValue.value))\n return modelValue.value\n return convertValue(modelValue.value)\n },\n set(newValue) {\n if (newValue) {\n modelValue.value = modelValue.value && 'day' in modelValue.value ? newValue : new Time(newValue.hour, newValue.minute, newValue.second, modelValue.value?.millisecond)\n }\n else {\n modelValue.value = newValue\n }\n return newValue\n },\n})\n\nconst defaultDate = getDefaultTime({\n defaultPlaceholder: props.placeholder,\n defaultValue: modelValue.value,\n})\n\nconst placeholder = useVModel(props, 'placeholder', emits, {\n defaultValue: props.defaultPlaceholder ?? defaultDate.copy(),\n passive: (props.placeholder === undefined) as false,\n}) as Ref<TimeValue>\n\nconst convertedPlaceholder = computed({\n get() {\n return convertValue(placeholder.value)\n },\n set(newValue) {\n if (newValue)\n placeholder.value = 'day' in placeholder.value ? newValue.copy() : new Time(newValue.hour, newValue.minute, newValue.second, placeholder.value?.millisecond)\n return newValue\n },\n})\n\nconst inferredGranularity = computed(() => {\n if (granularity.value)\n return granularity.value\n\n return 'minute'\n})\n\nconst isInvalid = computed(() => {\n if (!modelValue.value)\n return false\n\n if (convertedMinValue.value && isBefore(convertedModelValue.value, convertedMinValue.value))\n return true\n\n if (convertedMaxValue.value && isBefore(convertedMaxValue.value, convertedModelValue.value))\n return true\n\n return false\n})\n\nconst initialSegments = initializeTimeSegmentValues(inferredGranularity.value)\n\nconst segmentValues = ref<SegmentValueObj>(modelValue.value ? { ...syncTimeSegmentValues({ value: convertedModelValue.value, formatter }) } : { ...initialSegments })\n\nconst allSegmentContent = computed(() => createContent({\n granularity: inferredGranularity.value,\n dateRef: convertedPlaceholder.value,\n formatter,\n hideTimeZone: props.hideTimeZone,\n hourCycle: props.hourCycle,\n segmentValues: segmentValues.value,\n locale,\n isTimeValue: true,\n}))\n\nconst segmentContents = computed(() => allSegmentContent.value.arr)\n\nconst editableSegmentContents = computed(() => segmentContents.value.filter(({ part }) => part !== 'literal'))\n\nwatch(locale, (value) => {\n if (formatter.getLocale() !== value) {\n formatter.setLocale(value)\n // Locale changed, so we need to clear the segment elements and re-get them (different order)\n // Get the focusable elements again on the next tick\n nextTick(() => {\n segmentElements.value.clear()\n getTimeFieldSegmentElements(parentElement.value).forEach(item => segmentElements.value.add(item as HTMLElement))\n })\n }\n})\n\nwatch(convertedModelValue, (_modelValue) => {\n if (!isNullish(_modelValue) && (!isEqualDay(convertedPlaceholder.value, _modelValue) || convertedPlaceholder.value.compare(_modelValue) !== 0))\n placeholder.value = _modelValue.copy()\n})\n\nwatch([convertedModelValue, locale], ([_modelValue]) => {\n if (!isNullish(_modelValue)) {\n segmentValues.value = { ...syncTimeSegmentValues({ value: _modelValue, formatter }) }\n }\n // If segment has null value, means that user modified it, thus do not reset the segmentValues\n else if (Object.values(segmentValues.value).every(value => value !== null) && isNullish(_modelValue)) {\n segmentValues.value = { ...initialSegments }\n }\n})\n\nconst currentFocusedElement = ref<HTMLElement | null>(null)\n\nconst currentSegmentIndex = computed(() =>\n Array.from(segmentElements.value).findIndex(el =>\n el.getAttribute('data-reka-time-field-segment')\n === currentFocusedElement.value?.getAttribute('data-reka-time-field-segment')))\n\nconst nextFocusableSegment = computed(() => {\n const sign = dir.value === 'rtl' ? -1 : 1\n const nextCondition = sign < 0 ? currentSegmentIndex.value < 0 : currentSegmentIndex.value > segmentElements.value.size - 1\n if (nextCondition)\n return null\n const segmentToFocus = Array.from(segmentElements.value)[currentSegmentIndex.value + sign]\n return segmentToFocus\n})\n\nconst prevFocusableSegment = computed(() => {\n const sign = dir.value === 'rtl' ? -1 : 1\n const prevCondition = sign > 0 ? currentSegmentIndex.value < 0 : currentSegmentIndex.value > segmentElements.value.size - 1\n if (prevCondition)\n return null\n\n const segmentToFocus = Array.from(segmentElements.value)[currentSegmentIndex.value - sign]\n return segmentToFocus\n})\n\nconst kbd = useKbd()\n\nfunction handleKeydown(e: KeyboardEvent) {\n if (!isSegmentNavigationKey(e.key))\n return\n if (e.key === kbd.ARROW_LEFT)\n prevFocusableSegment.value?.focus()\n if (e.key === kbd.ARROW_RIGHT)\n nextFocusableSegment.value?.focus()\n}\n\nfunction setFocusedElement(el: HTMLElement) {\n currentFocusedElement.value = el\n}\n\nprovideTimeFieldRootContext({\n locale,\n modelValue: convertedModelValue,\n placeholder: convertedPlaceholder,\n disabled,\n formatter,\n hourCycle: props.hourCycle,\n step,\n readonly,\n segmentValues,\n isInvalid,\n segmentContents: editableSegmentContents,\n elements: segmentElements,\n setFocusedElement,\n focusNext() {\n nextFocusableSegment.value?.focus()\n },\n})\n\ndefineExpose({\n /** Helper to set the focused element inside the DateField */\n setFocusedElement,\n})\n</script>\n\n<template>\n <Primitive\n v-bind=\"$attrs\"\n ref=\"primitiveElement\"\n role=\"group\"\n :aria-disabled=\"disabled ? true : undefined\"\n :data-disabled=\"disabled ? '' : undefined\"\n :data-readonly=\"readonly ? '' : undefined\"\n :data-invalid=\"isInvalid ? '' : undefined\"\n :dir=\"dir\"\n @keydown.left.right=\"handleKeydown\"\n >\n <slot\n :model-value=\"modelValue\"\n :segments=\"segmentContents\"\n :is-invalid=\"isInvalid\"\n />\n\n <VisuallyHidden\n :id=\"id\"\n as=\"input\"\n feature=\"focusable\"\n tabindex=\"-1\"\n :value=\"modelValue ? modelValue.toString() : ''\"\n :name=\"name\"\n :disabled=\"disabled\"\n :required=\"required\"\n @focus=\"Array.from(segmentElements)?.[0]?.focus()\"\n />\n </Primitive>\n</template>\n"],"names":["createContext","date","today","getLocalTimeZone","toCalendarDateTime","toRefs","useLocale","useDirection","useDateFormatter","normalizeHourCycle","usePrimitiveElement","ref","computed","normalizeDateStep","onMounted","getTimeFieldSegmentElements","useVModel","isNullish","Time","getDefaultTime","isBefore","initializeTimeSegmentValues","syncTimeSegmentValues","createContent","watch","nextTick","isEqualDay","useKbd","isSegmentNavigationKey"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { defineComponent, toRefs, ref, computed, onMounted, watch, nextTick, createBlock, openBlock, unref, mergeProps, withKeys, withCtx, renderSlot, createVNode } from 'vue';
2
2
  import { useVModel } from '@vueuse/core';
3
- import { o as getDefaultTime, b as isBefore } from '../date/comparators.js';
4
3
  import { today, Time, isEqualDay, toCalendarDateTime, getLocalTimeZone } from '@internationalized/date';
4
+ import { o as getDefaultTime, b as isBefore } from '../date/comparators.js';
5
5
  import { c as createContext } from '../shared/createContext.js';
6
6
  import { u as useLocale } from '../shared/useLocale.js';
7
7
  import { u as useDirection } from '../shared/useDirection.js';
@@ -12,6 +12,7 @@ import { a as initializeTimeSegmentValues, b as syncTimeSegmentValues, c as crea
12
12
  import { P as Primitive } from '../Primitive/Primitive.js';
13
13
  import { _ as _sfc_main$1 } from '../VisuallyHidden/VisuallyHidden.js';
14
14
  import { u as useKbd } from '../shared/useKbd.js';
15
+ import { n as normalizeHourCycle, a as normalizeDateStep } from '../date/utils.js';
15
16
  import { i as isNullish } from '../shared/nullish.js';
16
17
 
17
18
  const [injectTimeFieldRootContext, provideTimeFieldRootContext] = createContext("TimeFieldRoot");
@@ -32,6 +33,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
32
33
  placeholder: { default: void 0 },
33
34
  modelValue: {},
34
35
  hourCycle: {},
36
+ step: {},
35
37
  granularity: {},
36
38
  hideTimeZone: { type: Boolean },
37
39
  maxValue: {},
@@ -53,9 +55,12 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
53
55
  const { disabled, readonly, granularity, defaultValue, minValue, maxValue, dir: propDir, locale: propLocale } = toRefs(props);
54
56
  const locale = useLocale(propLocale);
55
57
  const dir = useDirection(propDir);
56
- const formatter = useDateFormatter(locale.value);
58
+ const formatter = useDateFormatter(locale.value, {
59
+ hourCycle: normalizeHourCycle(props.hourCycle)
60
+ });
57
61
  const { primitiveElement, currentElement: parentElement } = usePrimitiveElement();
58
62
  const segmentElements = ref(/* @__PURE__ */ new Set());
63
+ const step = computed(() => normalizeDateStep(props));
59
64
  const convertedMinValue = computed(() => minValue.value ? convertValue(minValue.value) : void 0);
60
65
  const convertedMaxValue = computed(() => maxValue.value ? convertValue(maxValue.value) : void 0);
61
66
  onMounted(() => {
@@ -72,8 +77,11 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
72
77
  return convertValue(modelValue.value);
73
78
  },
74
79
  set(newValue) {
75
- if (newValue)
80
+ if (newValue) {
76
81
  modelValue.value = modelValue.value && "day" in modelValue.value ? newValue : new Time(newValue.hour, newValue.minute, newValue.second, modelValue.value?.millisecond);
82
+ } else {
83
+ modelValue.value = newValue;
84
+ }
77
85
  return newValue;
78
86
  }
79
87
  });
@@ -139,7 +147,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
139
147
  watch([convertedModelValue, locale], ([_modelValue]) => {
140
148
  if (!isNullish(_modelValue)) {
141
149
  segmentValues.value = { ...syncTimeSegmentValues({ value: _modelValue, formatter }) };
142
- } else if (Object.values(segmentValues.value).every((value) => value === null) || isNullish(_modelValue)) {
150
+ } else if (Object.values(segmentValues.value).every((value) => value !== null) && isNullish(_modelValue)) {
143
151
  segmentValues.value = { ...initialSegments };
144
152
  }
145
153
  });
@@ -180,6 +188,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
180
188
  disabled,
181
189
  formatter,
182
190
  hourCycle: props.hourCycle,
191
+ step,
183
192
  readonly,
184
193
  segmentValues,
185
194
  isInvalid,
@@ -1 +1 @@
1
- {"version":3,"file":"TimeFieldRoot.js","sources":["../../src/TimeField/TimeFieldRoot.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { PrimitiveProps } from '@/Primitive'\n\nimport type { Formatter } from '@/shared'\nimport type { HourCycle, SegmentPart, SegmentValueObj, TimeValue } from '@/shared/date'\nimport type { Direction, FormFieldProps } from '@/shared/types'\nimport type { DateValue } from '@internationalized/date'\nimport type { Ref } from 'vue'\nimport { isBefore } from '@/date'\nimport { createContext, isNullish, useDateFormatter, useDirection, useKbd, useLocale } from '@/shared'\nimport {\n createContent,\n getDefaultTime,\n getTimeFieldSegmentElements,\n\n initializeTimeSegmentValues,\n isSegmentNavigationKey,\n\n syncTimeSegmentValues,\n\n} from '@/shared/date'\nimport { getLocalTimeZone, isEqualDay, Time, toCalendarDateTime, today } from '@internationalized/date'\n\ntype TimeFieldRootContext = {\n locale: Ref<string>\n modelValue: Ref<DateValue | undefined>\n placeholder: Ref<DateValue>\n isInvalid: Ref<boolean>\n disabled: Ref<boolean>\n readonly: Ref<boolean>\n formatter: Formatter\n hourCycle: HourCycle\n segmentValues: Ref<SegmentValueObj>\n segmentContents: Ref<{ part: SegmentPart, value: string }[]>\n elements: Ref<Set<HTMLElement>>\n focusNext: () => void\n setFocusedElement: (el: HTMLElement) => void\n}\n\nexport interface TimeFieldRootProps extends PrimitiveProps, FormFieldProps {\n /** The default value for the calendar */\n defaultValue?: TimeValue\n /** The default placeholder date */\n defaultPlaceholder?: TimeValue\n /** The placeholder date, which is used to determine what time to display when no time is selected. This updates as the user navigates the field */\n placeholder?: TimeValue\n /** The controlled checked state of the field. Can be bound as `v-model`. */\n modelValue?: TimeValue | null\n /** The hour cycle used for formatting times. Defaults to the local preference */\n hourCycle?: HourCycle\n /** The granularity to use for formatting times. Defaults to minute if a Time is provided, otherwise defaults to minute. The field will render segments for each part of the date up to and including the specified granularity */\n granularity?: 'hour' | 'minute' | 'second'\n /** Whether or not to hide the time zone segment of the field */\n hideTimeZone?: boolean\n /** The maximum date that can be selected */\n maxValue?: TimeValue\n /** The minimum date that can be selected */\n minValue?: TimeValue\n /** The locale to use for formatting dates */\n locale?: string\n /** Whether or not the time field is disabled */\n disabled?: boolean\n /** Whether or not the time field is readonly */\n readonly?: boolean\n /** Id of the element */\n id?: string\n /** The reading direction of the time field when applicable. <br> If omitted, inherits globally from `ConfigProvider` or assumes LTR (left-to-right) reading mode. */\n dir?: Direction\n}\n\nexport type TimeFieldRootEmits = {\n /** Event handler called whenever the model value changes */\n 'update:modelValue': [date: TimeValue | undefined]\n /** Event handler called whenever the placeholder value changes */\n 'update:placeholder': [date: TimeValue]\n}\n\nexport const [injectTimeFieldRootContext, provideTimeFieldRootContext]\n = createContext<TimeFieldRootContext>('TimeFieldRoot')\n\nfunction convertValue(value: TimeValue, date: DateValue = today(getLocalTimeZone())) {\n if (value && 'day' in value) {\n return value\n }\n\n return toCalendarDateTime(date, value)\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { Primitive, usePrimitiveElement } from '@/Primitive'\nimport { VisuallyHidden } from '@/VisuallyHidden'\nimport { useVModel } from '@vueuse/core'\nimport { computed, nextTick, onMounted, ref, toRefs, watch } from 'vue'\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<TimeFieldRootProps>(), {\n defaultValue: undefined,\n disabled: false,\n readonly: false,\n placeholder: undefined,\n isDateUnavailable: undefined,\n})\nconst emits = defineEmits<TimeFieldRootEmits>()\ndefineSlots<{\n default: (props: {\n /** The current time of the field */\n modelValue: TimeValue | undefined\n /** The time field segment contents */\n segments: { part: SegmentPart, value: string }[]\n /** Value if the input is invalid */\n isInvalid: boolean\n }) => any\n}>()\n\nconst { disabled, readonly, granularity, defaultValue, minValue, maxValue, dir: propDir, locale: propLocale } = toRefs(props)\nconst locale = useLocale(propLocale)\nconst dir = useDirection(propDir)\n\nconst formatter = useDateFormatter(locale.value)\nconst { primitiveElement, currentElement: parentElement }\n = usePrimitiveElement()\nconst segmentElements = ref<Set<HTMLElement>>(new Set())\n\nconst convertedMinValue = computed(() => minValue.value ? convertValue(minValue.value) : undefined)\nconst convertedMaxValue = computed(() => maxValue.value ? convertValue(maxValue.value) : undefined)\n\nonMounted(() => {\n getTimeFieldSegmentElements(parentElement.value).forEach(item => segmentElements.value.add(item as HTMLElement))\n})\n\nconst modelValue = useVModel(props, 'modelValue', emits, {\n defaultValue: defaultValue.value,\n passive: (props.modelValue === undefined) as false,\n}) as Ref<TimeValue>\n\nconst convertedModelValue = computed({\n get() {\n if (isNullish(modelValue.value))\n return modelValue.value\n return convertValue(modelValue.value)\n },\n set(newValue) {\n if (newValue)\n modelValue.value = modelValue.value && 'day' in modelValue.value ? newValue : new Time(newValue.hour, newValue.minute, newValue.second, modelValue.value?.millisecond)\n\n return newValue\n },\n})\n\nconst defaultDate = getDefaultTime({\n defaultPlaceholder: props.placeholder,\n defaultValue: modelValue.value,\n})\n\nconst placeholder = useVModel(props, 'placeholder', emits, {\n defaultValue: props.defaultPlaceholder ?? defaultDate.copy(),\n passive: (props.placeholder === undefined) as false,\n}) as Ref<TimeValue>\n\nconst convertedPlaceholder = computed({\n get() {\n return convertValue(placeholder.value)\n },\n set(newValue) {\n if (newValue)\n placeholder.value = 'day' in placeholder.value ? newValue.copy() : new Time(newValue.hour, newValue.minute, newValue.second, placeholder.value?.millisecond)\n return newValue\n },\n})\n\nconst inferredGranularity = computed(() => {\n if (granularity.value)\n return granularity.value\n\n return 'minute'\n})\n\nconst isInvalid = computed(() => {\n if (!modelValue.value)\n return false\n\n if (convertedMinValue.value && isBefore(convertedModelValue.value, convertedMinValue.value))\n return true\n\n if (convertedMaxValue.value && isBefore(convertedMaxValue.value, convertedModelValue.value))\n return true\n\n return false\n})\n\nconst initialSegments = initializeTimeSegmentValues(inferredGranularity.value)\n\nconst segmentValues = ref<SegmentValueObj>(modelValue.value ? { ...syncTimeSegmentValues({ value: convertedModelValue.value, formatter }) } : { ...initialSegments })\n\nconst allSegmentContent = computed(() => createContent({\n granularity: inferredGranularity.value,\n dateRef: convertedPlaceholder.value,\n formatter,\n hideTimeZone: props.hideTimeZone,\n hourCycle: props.hourCycle,\n segmentValues: segmentValues.value,\n locale,\n isTimeValue: true,\n}))\n\nconst segmentContents = computed(() => allSegmentContent.value.arr)\n\nconst editableSegmentContents = computed(() => segmentContents.value.filter(({ part }) => part !== 'literal'))\n\nwatch(locale, (value) => {\n if (formatter.getLocale() !== value) {\n formatter.setLocale(value)\n // Locale changed, so we need to clear the segment elements and re-get them (different order)\n // Get the focusable elements again on the next tick\n nextTick(() => {\n segmentElements.value.clear()\n getTimeFieldSegmentElements(parentElement.value).forEach(item => segmentElements.value.add(item as HTMLElement))\n })\n }\n})\n\nwatch(convertedModelValue, (_modelValue) => {\n if (!isNullish(_modelValue) && (!isEqualDay(convertedPlaceholder.value, _modelValue) || convertedPlaceholder.value.compare(_modelValue) !== 0))\n placeholder.value = _modelValue.copy()\n})\n\nwatch([convertedModelValue, locale], ([_modelValue]) => {\n if (!isNullish(_modelValue)) {\n segmentValues.value = { ...syncTimeSegmentValues({ value: _modelValue, formatter }) }\n }\n else if (Object.values(segmentValues.value).every(value => value === null) || isNullish(_modelValue)) {\n segmentValues.value = { ...initialSegments }\n }\n})\n\nconst currentFocusedElement = ref<HTMLElement | null>(null)\n\nconst currentSegmentIndex = computed(() =>\n Array.from(segmentElements.value).findIndex(el =>\n el.getAttribute('data-reka-time-field-segment')\n === currentFocusedElement.value?.getAttribute('data-reka-time-field-segment')))\n\nconst nextFocusableSegment = computed(() => {\n const sign = dir.value === 'rtl' ? -1 : 1\n const nextCondition = sign < 0 ? currentSegmentIndex.value < 0 : currentSegmentIndex.value > segmentElements.value.size - 1\n if (nextCondition)\n return null\n const segmentToFocus = Array.from(segmentElements.value)[currentSegmentIndex.value + sign]\n return segmentToFocus\n})\n\nconst prevFocusableSegment = computed(() => {\n const sign = dir.value === 'rtl' ? -1 : 1\n const prevCondition = sign > 0 ? currentSegmentIndex.value < 0 : currentSegmentIndex.value > segmentElements.value.size - 1\n if (prevCondition)\n return null\n\n const segmentToFocus = Array.from(segmentElements.value)[currentSegmentIndex.value - sign]\n return segmentToFocus\n})\n\nconst kbd = useKbd()\n\nfunction handleKeydown(e: KeyboardEvent) {\n if (!isSegmentNavigationKey(e.key))\n return\n if (e.key === kbd.ARROW_LEFT)\n prevFocusableSegment.value?.focus()\n if (e.key === kbd.ARROW_RIGHT)\n nextFocusableSegment.value?.focus()\n}\n\nfunction setFocusedElement(el: HTMLElement) {\n currentFocusedElement.value = el\n}\n\nprovideTimeFieldRootContext({\n locale,\n modelValue: convertedModelValue,\n placeholder: convertedPlaceholder,\n disabled,\n formatter,\n hourCycle: props.hourCycle,\n readonly,\n segmentValues,\n isInvalid,\n segmentContents: editableSegmentContents,\n elements: segmentElements,\n setFocusedElement,\n focusNext() {\n nextFocusableSegment.value?.focus()\n },\n})\n\ndefineExpose({\n /** Helper to set the focused element inside the DateField */\n setFocusedElement,\n})\n</script>\n\n<template>\n <Primitive\n v-bind=\"$attrs\"\n ref=\"primitiveElement\"\n role=\"group\"\n :aria-disabled=\"disabled ? true : undefined\"\n :data-disabled=\"disabled ? '' : undefined\"\n :data-readonly=\"readonly ? '' : undefined\"\n :data-invalid=\"isInvalid ? '' : undefined\"\n :dir=\"dir\"\n @keydown.left.right=\"handleKeydown\"\n >\n <slot\n :model-value=\"modelValue\"\n :segments=\"segmentContents\"\n :is-invalid=\"isInvalid\"\n />\n\n <VisuallyHidden\n :id=\"id\"\n as=\"input\"\n feature=\"focusable\"\n tabindex=\"-1\"\n :value=\"modelValue ? modelValue.toString() : ''\"\n :name=\"name\"\n :disabled=\"disabled\"\n :required=\"required\"\n @focus=\"Array.from(segmentElements)?.[0]?.focus()\"\n />\n </Primitive>\n</template>\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TimeFieldRoot.js","sources":["../../src/TimeField/TimeFieldRoot.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { DateValue } from '@internationalized/date'\nimport type { Ref } from 'vue'\nimport type { PrimitiveProps } from '@/Primitive'\nimport type { Formatter } from '@/shared'\nimport type { DateStep, HourCycle, SegmentPart, SegmentValueObj, TimeValue } from '@/shared/date'\nimport type { Direction, FormFieldProps } from '@/shared/types'\nimport { getLocalTimeZone, isEqualDay, Time, toCalendarDateTime, today } from '@internationalized/date'\nimport { isBefore } from '@/date'\nimport { createContext, isNullish, useDateFormatter, useDirection, useKbd, useLocale } from '@/shared'\nimport {\n createContent,\n getDefaultTime,\n getTimeFieldSegmentElements,\n\n initializeTimeSegmentValues,\n isSegmentNavigationKey,\n normalizeDateStep,\n normalizeHourCycle,\n\n syncTimeSegmentValues,\n\n} from '@/shared/date'\n\ntype TimeFieldRootContext = {\n locale: Ref<string>\n modelValue: Ref<DateValue | undefined>\n placeholder: Ref<DateValue>\n isInvalid: Ref<boolean>\n disabled: Ref<boolean>\n readonly: Ref<boolean>\n formatter: Formatter\n hourCycle: HourCycle\n step: Ref<DateStep>\n segmentValues: Ref<SegmentValueObj>\n segmentContents: Ref<{ part: SegmentPart, value: string }[]>\n elements: Ref<Set<HTMLElement>>\n focusNext: () => void\n setFocusedElement: (el: HTMLElement) => void\n}\n\nexport interface TimeFieldRootProps extends PrimitiveProps, FormFieldProps {\n /** The default value for the calendar */\n defaultValue?: TimeValue\n /** The default placeholder date */\n defaultPlaceholder?: TimeValue\n /** The placeholder date, which is used to determine what time to display when no time is selected. This updates as the user navigates the field */\n placeholder?: TimeValue\n /** The controlled checked state of the field. Can be bound as `v-model`. */\n modelValue?: TimeValue | null\n /** The hour cycle used for formatting times. Defaults to the local preference */\n hourCycle?: HourCycle\n /** The stepping interval for the time fields. Defaults to `1`. */\n step?: DateStep\n /** The granularity to use for formatting times. Defaults to minute if a Time is provided, otherwise defaults to minute. The field will render segments for each part of the date up to and including the specified granularity */\n granularity?: 'hour' | 'minute' | 'second'\n /** Whether or not to hide the time zone segment of the field */\n hideTimeZone?: boolean\n /** The maximum date that can be selected */\n maxValue?: TimeValue\n /** The minimum date that can be selected */\n minValue?: TimeValue\n /** The locale to use for formatting dates */\n locale?: string\n /** Whether or not the time field is disabled */\n disabled?: boolean\n /** Whether or not the time field is readonly */\n readonly?: boolean\n /** Id of the element */\n id?: string\n /** The reading direction of the time field when applicable. <br> If omitted, inherits globally from `ConfigProvider` or assumes LTR (left-to-right) reading mode. */\n dir?: Direction\n}\n\nexport type TimeFieldRootEmits = {\n /** Event handler called whenever the model value changes */\n 'update:modelValue': [date: TimeValue | undefined]\n /** Event handler called whenever the placeholder value changes */\n 'update:placeholder': [date: TimeValue]\n}\n\nexport const [injectTimeFieldRootContext, provideTimeFieldRootContext]\n = createContext<TimeFieldRootContext>('TimeFieldRoot')\n\nfunction convertValue(value: TimeValue, date: DateValue = today(getLocalTimeZone())) {\n if (value && 'day' in value) {\n return value\n }\n\n return toCalendarDateTime(date, value)\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { useVModel } from '@vueuse/core'\nimport { computed, nextTick, onMounted, ref, toRefs, watch } from 'vue'\nimport { Primitive, usePrimitiveElement } from '@/Primitive'\nimport { VisuallyHidden } from '@/VisuallyHidden'\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<TimeFieldRootProps>(), {\n defaultValue: undefined,\n disabled: false,\n readonly: false,\n placeholder: undefined,\n isDateUnavailable: undefined,\n})\nconst emits = defineEmits<TimeFieldRootEmits>()\ndefineSlots<{\n default?: (props: {\n /** The current time of the field */\n modelValue: TimeValue | undefined\n /** The time field segment contents */\n segments: { part: SegmentPart, value: string }[]\n /** Value if the input is invalid */\n isInvalid: boolean\n }) => any\n}>()\n\nconst { disabled, readonly, granularity, defaultValue, minValue, maxValue, dir: propDir, locale: propLocale } = toRefs(props)\nconst locale = useLocale(propLocale)\nconst dir = useDirection(propDir)\n\nconst formatter = useDateFormatter(locale.value, {\n hourCycle: normalizeHourCycle(props.hourCycle),\n})\nconst { primitiveElement, currentElement: parentElement }\n = usePrimitiveElement()\nconst segmentElements = ref<Set<HTMLElement>>(new Set())\n\nconst step = computed(() => normalizeDateStep(props))\n\nconst convertedMinValue = computed(() => minValue.value ? convertValue(minValue.value) : undefined)\nconst convertedMaxValue = computed(() => maxValue.value ? convertValue(maxValue.value) : undefined)\n\nonMounted(() => {\n getTimeFieldSegmentElements(parentElement.value).forEach(item => segmentElements.value.add(item as HTMLElement))\n})\n\nconst modelValue = useVModel(props, 'modelValue', emits, {\n defaultValue: defaultValue.value,\n passive: (props.modelValue === undefined) as false,\n}) as Ref<TimeValue>\n\nconst convertedModelValue = computed({\n get() {\n if (isNullish(modelValue.value))\n return modelValue.value\n return convertValue(modelValue.value)\n },\n set(newValue) {\n if (newValue) {\n modelValue.value = modelValue.value && 'day' in modelValue.value ? newValue : new Time(newValue.hour, newValue.minute, newValue.second, modelValue.value?.millisecond)\n }\n else {\n modelValue.value = newValue\n }\n return newValue\n },\n})\n\nconst defaultDate = getDefaultTime({\n defaultPlaceholder: props.placeholder,\n defaultValue: modelValue.value,\n})\n\nconst placeholder = useVModel(props, 'placeholder', emits, {\n defaultValue: props.defaultPlaceholder ?? defaultDate.copy(),\n passive: (props.placeholder === undefined) as false,\n}) as Ref<TimeValue>\n\nconst convertedPlaceholder = computed({\n get() {\n return convertValue(placeholder.value)\n },\n set(newValue) {\n if (newValue)\n placeholder.value = 'day' in placeholder.value ? newValue.copy() : new Time(newValue.hour, newValue.minute, newValue.second, placeholder.value?.millisecond)\n return newValue\n },\n})\n\nconst inferredGranularity = computed(() => {\n if (granularity.value)\n return granularity.value\n\n return 'minute'\n})\n\nconst isInvalid = computed(() => {\n if (!modelValue.value)\n return false\n\n if (convertedMinValue.value && isBefore(convertedModelValue.value, convertedMinValue.value))\n return true\n\n if (convertedMaxValue.value && isBefore(convertedMaxValue.value, convertedModelValue.value))\n return true\n\n return false\n})\n\nconst initialSegments = initializeTimeSegmentValues(inferredGranularity.value)\n\nconst segmentValues = ref<SegmentValueObj>(modelValue.value ? { ...syncTimeSegmentValues({ value: convertedModelValue.value, formatter }) } : { ...initialSegments })\n\nconst allSegmentContent = computed(() => createContent({\n granularity: inferredGranularity.value,\n dateRef: convertedPlaceholder.value,\n formatter,\n hideTimeZone: props.hideTimeZone,\n hourCycle: props.hourCycle,\n segmentValues: segmentValues.value,\n locale,\n isTimeValue: true,\n}))\n\nconst segmentContents = computed(() => allSegmentContent.value.arr)\n\nconst editableSegmentContents = computed(() => segmentContents.value.filter(({ part }) => part !== 'literal'))\n\nwatch(locale, (value) => {\n if (formatter.getLocale() !== value) {\n formatter.setLocale(value)\n // Locale changed, so we need to clear the segment elements and re-get them (different order)\n // Get the focusable elements again on the next tick\n nextTick(() => {\n segmentElements.value.clear()\n getTimeFieldSegmentElements(parentElement.value).forEach(item => segmentElements.value.add(item as HTMLElement))\n })\n }\n})\n\nwatch(convertedModelValue, (_modelValue) => {\n if (!isNullish(_modelValue) && (!isEqualDay(convertedPlaceholder.value, _modelValue) || convertedPlaceholder.value.compare(_modelValue) !== 0))\n placeholder.value = _modelValue.copy()\n})\n\nwatch([convertedModelValue, locale], ([_modelValue]) => {\n if (!isNullish(_modelValue)) {\n segmentValues.value = { ...syncTimeSegmentValues({ value: _modelValue, formatter }) }\n }\n // If segment has null value, means that user modified it, thus do not reset the segmentValues\n else if (Object.values(segmentValues.value).every(value => value !== null) && isNullish(_modelValue)) {\n segmentValues.value = { ...initialSegments }\n }\n})\n\nconst currentFocusedElement = ref<HTMLElement | null>(null)\n\nconst currentSegmentIndex = computed(() =>\n Array.from(segmentElements.value).findIndex(el =>\n el.getAttribute('data-reka-time-field-segment')\n === currentFocusedElement.value?.getAttribute('data-reka-time-field-segment')))\n\nconst nextFocusableSegment = computed(() => {\n const sign = dir.value === 'rtl' ? -1 : 1\n const nextCondition = sign < 0 ? currentSegmentIndex.value < 0 : currentSegmentIndex.value > segmentElements.value.size - 1\n if (nextCondition)\n return null\n const segmentToFocus = Array.from(segmentElements.value)[currentSegmentIndex.value + sign]\n return segmentToFocus\n})\n\nconst prevFocusableSegment = computed(() => {\n const sign = dir.value === 'rtl' ? -1 : 1\n const prevCondition = sign > 0 ? currentSegmentIndex.value < 0 : currentSegmentIndex.value > segmentElements.value.size - 1\n if (prevCondition)\n return null\n\n const segmentToFocus = Array.from(segmentElements.value)[currentSegmentIndex.value - sign]\n return segmentToFocus\n})\n\nconst kbd = useKbd()\n\nfunction handleKeydown(e: KeyboardEvent) {\n if (!isSegmentNavigationKey(e.key))\n return\n if (e.key === kbd.ARROW_LEFT)\n prevFocusableSegment.value?.focus()\n if (e.key === kbd.ARROW_RIGHT)\n nextFocusableSegment.value?.focus()\n}\n\nfunction setFocusedElement(el: HTMLElement) {\n currentFocusedElement.value = el\n}\n\nprovideTimeFieldRootContext({\n locale,\n modelValue: convertedModelValue,\n placeholder: convertedPlaceholder,\n disabled,\n formatter,\n hourCycle: props.hourCycle,\n step,\n readonly,\n segmentValues,\n isInvalid,\n segmentContents: editableSegmentContents,\n elements: segmentElements,\n setFocusedElement,\n focusNext() {\n nextFocusableSegment.value?.focus()\n },\n})\n\ndefineExpose({\n /** Helper to set the focused element inside the DateField */\n setFocusedElement,\n})\n</script>\n\n<template>\n <Primitive\n v-bind=\"$attrs\"\n ref=\"primitiveElement\"\n role=\"group\"\n :aria-disabled=\"disabled ? true : undefined\"\n :data-disabled=\"disabled ? '' : undefined\"\n :data-readonly=\"readonly ? '' : undefined\"\n :data-invalid=\"isInvalid ? '' : undefined\"\n :dir=\"dir\"\n @keydown.left.right=\"handleKeydown\"\n >\n <slot\n :model-value=\"modelValue\"\n :segments=\"segmentContents\"\n :is-invalid=\"isInvalid\"\n />\n\n <VisuallyHidden\n :id=\"id\"\n as=\"input\"\n feature=\"focusable\"\n tabindex=\"-1\"\n :value=\"modelValue ? modelValue.toString() : ''\"\n :name=\"name\"\n :disabled=\"disabled\"\n :required=\"required\"\n @focus=\"Array.from(segmentElements)?.[0]?.focus()\"\n />\n </Primitive>\n</template>\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ToastAnnounce.cjs","sources":["../../src/Toast/ToastAnnounce.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { VisuallyHidden } from '@/VisuallyHidden'\nimport { useRafFn } from '@vueuse/core'\nimport { useTimeout } from '@vueuse/shared'\nimport { ref } from 'vue'\nimport { injectToastProviderContext } from './ToastProvider.vue'\n\nconst providerContext = injectToastProviderContext()\n\nconst isAnnounced = useTimeout(1000)\nconst renderAnnounceText = ref(false)\n\nuseRafFn(() => {\n renderAnnounceText.value = true\n})\n</script>\n\n<template>\n <VisuallyHidden v-if=\"isAnnounced || renderAnnounceText\">\n {{ providerContext.label.value }}\n <slot />\n </VisuallyHidden>\n</template>\n"],"names":["injectToastProviderContext","useTimeout","ref","useRafFn"],"mappings":";;;;;;;;;;;AAOA,IAAA,MAAM,kBAAkBA,8CAA2B,EAAA;AAEnD,IAAM,MAAA,WAAA,GAAcC,kBAAW,GAAI,CAAA;AACnC,IAAM,MAAA,kBAAA,GAAqBC,QAAI,KAAK,CAAA;AAEpC,IAAAC,aAAA,CAAS,MAAM;AACb,MAAA,kBAAA,CAAmB,KAAQ,GAAA,IAAA;AAAA,KAC5B,CAAA;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"ToastAnnounce.cjs","sources":["../../src/Toast/ToastAnnounce.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { useRafFn } from '@vueuse/core'\nimport { useTimeout } from '@vueuse/shared'\nimport { ref } from 'vue'\nimport { VisuallyHidden } from '@/VisuallyHidden'\nimport { injectToastProviderContext } from './ToastProvider.vue'\n\nconst providerContext = injectToastProviderContext()\n\nconst isAnnounced = useTimeout(1000)\nconst renderAnnounceText = ref(false)\n\nuseRafFn(() => {\n renderAnnounceText.value = true\n})\n</script>\n\n<template>\n <VisuallyHidden v-if=\"isAnnounced || renderAnnounceText\">\n {{ providerContext.label.value }}\n <slot />\n </VisuallyHidden>\n</template>\n"],"names":["injectToastProviderContext","useTimeout","ref","useRafFn"],"mappings":";;;;;;;;;;;AAOA,IAAA,MAAM,kBAAkBA,8CAA2B,EAAA;AAEnD,IAAM,MAAA,WAAA,GAAcC,kBAAW,GAAI,CAAA;AACnC,IAAM,MAAA,kBAAA,GAAqBC,QAAI,KAAK,CAAA;AAEpC,IAAAC,aAAA,CAAS,MAAM;AACb,MAAA,kBAAA,CAAmB,KAAQ,GAAA,IAAA;AAAA,KAC5B,CAAA;;;;;;;;;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ToastAnnounce.js","sources":["../../src/Toast/ToastAnnounce.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { VisuallyHidden } from '@/VisuallyHidden'\nimport { useRafFn } from '@vueuse/core'\nimport { useTimeout } from '@vueuse/shared'\nimport { ref } from 'vue'\nimport { injectToastProviderContext } from './ToastProvider.vue'\n\nconst providerContext = injectToastProviderContext()\n\nconst isAnnounced = useTimeout(1000)\nconst renderAnnounceText = ref(false)\n\nuseRafFn(() => {\n renderAnnounceText.value = true\n})\n</script>\n\n<template>\n <VisuallyHidden v-if=\"isAnnounced || renderAnnounceText\">\n {{ providerContext.label.value }}\n <slot />\n </VisuallyHidden>\n</template>\n"],"names":[],"mappings":";;;;;;;;;AAOA,IAAA,MAAM,kBAAkB,0BAA2B,EAAA;AAEnD,IAAM,MAAA,WAAA,GAAc,WAAW,GAAI,CAAA;AACnC,IAAM,MAAA,kBAAA,GAAqB,IAAI,KAAK,CAAA;AAEpC,IAAA,QAAA,CAAS,MAAM;AACb,MAAA,kBAAA,CAAmB,KAAQ,GAAA,IAAA;AAAA,KAC5B,CAAA;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"ToastAnnounce.js","sources":["../../src/Toast/ToastAnnounce.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { useRafFn } from '@vueuse/core'\nimport { useTimeout } from '@vueuse/shared'\nimport { ref } from 'vue'\nimport { VisuallyHidden } from '@/VisuallyHidden'\nimport { injectToastProviderContext } from './ToastProvider.vue'\n\nconst providerContext = injectToastProviderContext()\n\nconst isAnnounced = useTimeout(1000)\nconst renderAnnounceText = ref(false)\n\nuseRafFn(() => {\n renderAnnounceText.value = true\n})\n</script>\n\n<template>\n <VisuallyHidden v-if=\"isAnnounced || renderAnnounceText\">\n {{ providerContext.label.value }}\n <slot />\n </VisuallyHidden>\n</template>\n"],"names":[],"mappings":";;;;;;;;;AAOA,IAAA,MAAM,kBAAkB,0BAA2B,EAAA;AAEnD,IAAM,MAAA,WAAA,GAAc,WAAW,GAAI,CAAA;AACnC,IAAM,MAAA,kBAAA,GAAqB,IAAI,KAAK,CAAA;AAEpC,IAAA,QAAA,CAAS,MAAM;AACb,MAAA,kBAAA,CAAmB,KAAQ,GAAA,IAAA;AAAA,KAC5B,CAAA;;;;;;;;;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ToastRoot.cjs","sources":["../../src/Toast/ToastRoot.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { Ref } from 'vue'\nimport type { ToastRootImplEmits, ToastRootImplProps } from './ToastRootImpl.vue'\nimport { useForwardExpose } from '@/shared'\n\nexport type ToastRootEmits = Omit<ToastRootImplEmits, 'close'> & {\n /** Event handler called when the open state changes */\n 'update:open': [value: boolean]\n}\n\nexport interface ToastRootProps extends ToastRootImplProps {\n /** The open state of the dialog when it is initially rendered. Use when you do not need to control its open state. */\n defaultOpen?: boolean\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with Vue animation libraries.\n */\n forceMount?: boolean\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { Presence } from '@/Presence'\nimport { useVModel } from '@vueuse/core'\nimport ToastRootImpl from './ToastRootImpl.vue'\n\nconst props = withDefaults(defineProps<ToastRootProps>(), {\n type: 'foreground',\n open: undefined,\n defaultOpen: true,\n as: 'li',\n})\n\nconst emits = defineEmits<ToastRootEmits>()\n\ndefineSlots<{\n default: (props: {\n /** Current open state */\n open: typeof open.value\n /** Remaining time (in ms) */\n remaining: number\n /** Total time the toast will remain visible for (in ms) */\n duration: number\n }) => any\n}>()\n\nconst { forwardRef } = useForwardExpose()\nconst open = useVModel(props, 'open', emits, {\n defaultValue: props.defaultOpen,\n passive: (props.open === undefined) as false,\n}) as Ref<boolean>\n</script>\n\n<template>\n <Presence :present=\"forceMount || open\">\n <ToastRootImpl\n :ref=\"forwardRef\"\n v-slot=\"{ remaining, duration: _duration }\"\n :open=\"open\"\n :type=\"type\"\n :as=\"as\"\n :as-child=\"asChild\"\n :duration=\"duration\"\n v-bind=\"$attrs\"\n @close=\"open = false\"\n @pause=\"emits('pause')\"\n @resume=\"emits('resume')\"\n @escape-key-down=\"emits('escapeKeyDown', $event)\"\n @swipe-start=\"(event) => {\n emits('swipeStart', event);\n if (!event.defaultPrevented) {\n (event.currentTarget as HTMLElement).setAttribute('data-swipe', 'start');\n }\n }\"\n @swipe-move=\"(event) => {\n emits('swipeMove', event);\n if (!event.defaultPrevented) {\n const { x, y } = event.detail.delta;\n const target = event.currentTarget as HTMLElement\n target.setAttribute('data-swipe', 'move');\n target.style.setProperty('--reka-toast-swipe-move-x', `${x}px`);\n target.style.setProperty('--reka-toast-swipe-move-y', `${y}px`);\n }\n }\"\n @swipe-cancel=\"(event) => {\n emits('swipeCancel', event);\n if (!event.defaultPrevented) {\n const target = event.currentTarget as HTMLElement\n target.setAttribute('data-swipe', 'cancel');\n target.style.removeProperty('--reka-toast-swipe-move-x');\n target.style.removeProperty('--reka-toast-swipe-move-y');\n target.style.removeProperty('--reka-toast-swipe-end-x');\n target.style.removeProperty('--reka-toast-swipe-end-y');\n }\n }\"\n @swipe-end=\"(event) => {\n emits('swipeEnd', event);\n if (!event.defaultPrevented) {\n const { x, y } = event.detail.delta;\n const target = event.currentTarget as HTMLElement\n target.setAttribute('data-swipe', 'end');\n target.style.removeProperty('--reka-toast-swipe-move-x');\n target.style.removeProperty('--reka-toast-swipe-move-y');\n target.style.setProperty('--reka-toast-swipe-end-x', `${x}px`);\n target.style.setProperty('--reka-toast-swipe-end-y', `${y}px`);\n open = false;\n }\n }\"\n >\n <slot\n :remaining=\"remaining\"\n :duration=\"_duration\"\n :open=\"open\"\n />\n </ToastRootImpl>\n </Presence>\n</template>\n"],"names":["useForwardExpose","useVModel"],"mappings":";;;;;;;;;;;;;;;;;;;;;AA0BA,IAAA,MAAM,KAAQ,GAAA,OAAA;AAOd,IAAA,MAAM,KAAQ,GAAA,MAAA;AAad,IAAM,MAAA,EAAE,UAAW,EAAA,GAAIA,wCAAiB,EAAA;AACxC,IAAA,MAAM,IAAO,GAAAC,cAAA,CAAU,KAAO,EAAA,MAAA,EAAQ,KAAO,EAAA;AAAA,MAC3C,cAAc,KAAM,CAAA,WAAA;AAAA,MACpB,OAAA,EAAU,MAAM,IAAS,KAAA;AAAA,KAC1B,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"ToastRoot.cjs","sources":["../../src/Toast/ToastRoot.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { Ref } from 'vue'\nimport type { ToastRootImplEmits, ToastRootImplProps } from './ToastRootImpl.vue'\nimport { useForwardExpose } from '@/shared'\n\nexport type ToastRootEmits = Omit<ToastRootImplEmits, 'close'> & {\n /** Event handler called when the open state changes */\n 'update:open': [value: boolean]\n}\n\nexport interface ToastRootProps extends ToastRootImplProps {\n /** The open state of the dialog when it is initially rendered. Use when you do not need to control its open state. */\n defaultOpen?: boolean\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with Vue animation libraries.\n */\n forceMount?: boolean\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { useVModel } from '@vueuse/core'\nimport { Presence } from '@/Presence'\nimport ToastRootImpl from './ToastRootImpl.vue'\n\nconst props = withDefaults(defineProps<ToastRootProps>(), {\n type: 'foreground',\n open: undefined,\n defaultOpen: true,\n as: 'li',\n})\n\nconst emits = defineEmits<ToastRootEmits>()\n\ndefineSlots<{\n default?: (props: {\n /** Current open state */\n open: typeof open.value\n /** Remaining time (in ms) */\n remaining: number\n /** Total time the toast will remain visible for (in ms) */\n duration: number\n }) => any\n}>()\n\nconst { forwardRef } = useForwardExpose()\nconst open = useVModel(props, 'open', emits, {\n defaultValue: props.defaultOpen,\n passive: (props.open === undefined) as false,\n}) as Ref<boolean>\n</script>\n\n<template>\n <Presence :present=\"forceMount || open\">\n <ToastRootImpl\n :ref=\"forwardRef\"\n v-slot=\"{ remaining, duration: _duration }\"\n :open=\"open\"\n :type=\"type\"\n :as=\"as\"\n :as-child=\"asChild\"\n :duration=\"duration\"\n v-bind=\"$attrs\"\n @close=\"open = false\"\n @pause=\"emits('pause')\"\n @resume=\"emits('resume')\"\n @escape-key-down=\"emits('escapeKeyDown', $event)\"\n @swipe-start=\"(event) => {\n emits('swipeStart', event);\n if (!event.defaultPrevented) {\n (event.currentTarget as HTMLElement).setAttribute('data-swipe', 'start');\n }\n }\"\n @swipe-move=\"(event) => {\n emits('swipeMove', event);\n if (!event.defaultPrevented) {\n const { x, y } = event.detail.delta;\n const target = event.currentTarget as HTMLElement\n target.setAttribute('data-swipe', 'move');\n target.style.setProperty('--reka-toast-swipe-move-x', `${x}px`);\n target.style.setProperty('--reka-toast-swipe-move-y', `${y}px`);\n }\n }\"\n @swipe-cancel=\"(event) => {\n emits('swipeCancel', event);\n if (!event.defaultPrevented) {\n const target = event.currentTarget as HTMLElement\n target.setAttribute('data-swipe', 'cancel');\n target.style.removeProperty('--reka-toast-swipe-move-x');\n target.style.removeProperty('--reka-toast-swipe-move-y');\n target.style.removeProperty('--reka-toast-swipe-end-x');\n target.style.removeProperty('--reka-toast-swipe-end-y');\n }\n }\"\n @swipe-end=\"(event) => {\n emits('swipeEnd', event);\n if (!event.defaultPrevented) {\n const { x, y } = event.detail.delta;\n const target = event.currentTarget as HTMLElement\n target.setAttribute('data-swipe', 'end');\n target.style.removeProperty('--reka-toast-swipe-move-x');\n target.style.removeProperty('--reka-toast-swipe-move-y');\n target.style.setProperty('--reka-toast-swipe-end-x', `${x}px`);\n target.style.setProperty('--reka-toast-swipe-end-y', `${y}px`);\n open = false;\n }\n }\"\n >\n <slot\n :remaining=\"remaining\"\n :duration=\"_duration\"\n :open=\"open\"\n />\n </ToastRootImpl>\n </Presence>\n</template>\n"],"names":["useForwardExpose","useVModel"],"mappings":";;;;;;;;;;;;;;;;;;;;;AA0BA,IAAA,MAAM,KAAQ,GAAA,OAAA;AAOd,IAAA,MAAM,KAAQ,GAAA,MAAA;AAad,IAAM,MAAA,EAAE,UAAW,EAAA,GAAIA,wCAAiB,EAAA;AACxC,IAAA,MAAM,IAAO,GAAAC,cAAA,CAAU,KAAO,EAAA,MAAA,EAAQ,KAAO,EAAA;AAAA,MAC3C,cAAc,KAAM,CAAA,WAAA;AAAA,MACpB,OAAA,EAAU,MAAM,IAAS,KAAA;AAAA,KAC1B,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}