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":"MenuContentImpl.cjs","sources":["../../src/Menu/MenuContentImpl.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type {\n DismissableLayerEmits,\n DismissableLayerProps,\n} from '@/DismissableLayer'\nimport type { FocusScopeProps } from '@/FocusScope'\nimport type { PopperContentProps } from '@/Popper'\nimport type { RovingFocusGroupEmits } from '@/RovingFocus'\nimport type { Ref } from 'vue'\nimport type {\n GraceIntent,\n Side,\n} from './utils'\n\nimport {\n createContext,\n getActiveElement,\n useArrowNavigation,\n useFocusGuards,\n useForwardExpose,\n useTypeahead,\n} from '@/shared'\nimport { useBodyScrollLock } from '@/shared/useBodyScrollLock'\n\nexport interface MenuContentContext {\n onItemEnter: (event: PointerEvent) => boolean\n onItemLeave: (event: PointerEvent) => void\n onTriggerLeave: (event: PointerEvent) => boolean\n searchRef: Ref<string>\n pointerGraceTimerRef: Ref<number>\n onPointerGraceIntentChange: (intent: GraceIntent | null) => void\n}\n\nexport const [injectMenuContentContext, provideMenuContentContext]\n = createContext<MenuContentContext>('MenuContent')\n\nexport interface MenuContentImplPrivateProps {\n /**\n * When `true`, hover/focus/click interactions will be disabled on elements outside\n * the `DismissableLayer`. Users will need to click twice on outside elements to\n * interact with them: once to close the `DismissableLayer`, and again to trigger the element.\n */\n disableOutsidePointerEvents?: DismissableLayerProps['disableOutsidePointerEvents']\n /**\n * Whether scrolling outside the `MenuContent` should be prevented\n * @defaultValue false\n */\n disableOutsideScroll?: boolean\n\n /**\n * Whether focus should be trapped within the `MenuContent`\n * @defaultValue also\n */\n trapFocus?: FocusScopeProps['trapped']\n}\n\nexport type MenuContentImplEmits = DismissableLayerEmits & Omit<RovingFocusGroupEmits, 'update:currentTabStopId'> & {\n openAutoFocus: [event: Event]\n /**\n * Event handler called when auto-focusing on close.\n * Can be prevented.\n */\n closeAutoFocus: [event: Event]\n}\n\ntype MenuContentImplPrivateEmits = MenuContentImplEmits & {\n /**\n * Handler called when the `DismissableLayer` should be dismissed\n */\n dismiss: []\n}\n\nexport interface MenuContentImplProps\n extends MenuContentImplPrivateProps,\n Omit<PopperContentProps, 'dir'> {\n /**\n * When `true`, keyboard navigation will loop from last item to first, and vice versa.\n * @defaultValue false\n */\n loop?: boolean\n}\n\nexport interface MenuRootContentTypeProps\n extends Omit<MenuContentImplProps, 'disableOutsidePointerEvents' | 'disableOutsideScroll' | 'trapFocus'> {}\n</script>\n\n<script setup lang=\"ts\">\nimport { DismissableLayer } from '@/DismissableLayer'\nimport { FocusScope } from '@/FocusScope'\nimport {\n PopperContent,\n PopperContentPropsDefaultValue,\n} from '@/Popper'\nimport { RovingFocusGroup } from '@/RovingFocus'\nimport {\n onUnmounted,\n ref,\n toRefs,\n watch,\n} from 'vue'\nimport { injectMenuContext, injectMenuRootContext } from './MenuRoot.vue'\nimport {\n FIRST_LAST_KEYS,\n focusFirst,\n getOpenState,\n isMouseEvent,\n isPointerInGraceArea,\n LAST_KEYS,\n} from './utils'\n\nconst props = withDefaults(defineProps<MenuContentImplProps>(), {\n ...PopperContentPropsDefaultValue,\n})\nconst emits = defineEmits<MenuContentImplPrivateEmits>()\nconst menuContext = injectMenuContext()\nconst rootContext = injectMenuRootContext()\n\nconst { trapFocus, disableOutsidePointerEvents, loop } = toRefs(props)\n\nuseFocusGuards()\nuseBodyScrollLock(disableOutsidePointerEvents.value)\n\nconst searchRef = ref('')\nconst timerRef = ref(0)\nconst pointerGraceTimerRef = ref(0)\nconst pointerGraceIntentRef = ref<GraceIntent | null>(null)\nconst pointerDirRef = ref<Side>('right')\nconst lastPointerXRef = ref(0)\nconst currentItemId = ref<string | null>(null)\n\nconst rovingFocusGroupRef = ref<InstanceType<typeof RovingFocusGroup>>()\nconst { forwardRef, currentElement: contentElement } = useForwardExpose()\nconst { handleTypeaheadSearch } = useTypeahead()\n\nwatch(contentElement, (el) => {\n menuContext!.onContentChange(el)\n})\n\nonUnmounted(() => {\n window.clearTimeout(timerRef.value)\n})\n\nfunction isPointerMovingToSubmenu(event: PointerEvent) {\n const isMovingTowards\n = pointerDirRef.value === pointerGraceIntentRef.value?.side\n\n return (\n isMovingTowards\n && isPointerInGraceArea(event, pointerGraceIntentRef.value?.area)\n )\n}\n\nasync function handleMountAutoFocus(event: Event) {\n emits('openAutoFocus', event)\n if (event.defaultPrevented)\n return\n // when opening, explicitly focus the content area only and leave\n // `onEntryFocus` in control of focusing first item\n event.preventDefault()\n contentElement.value?.focus({\n preventScroll: true,\n })\n}\n\nfunction handleKeyDown(event: KeyboardEvent) {\n if (event.defaultPrevented)\n return\n // submenu key events bubble through portals. We only care about keys in this menu.\n const target = event.target as HTMLElement\n const isKeyDownInside\n = target.closest('[data-reka-menu-content]') === event.currentTarget\n const isModifierKey = event.ctrlKey || event.altKey || event.metaKey\n const isCharacterKey = event.key.length === 1\n\n const el = useArrowNavigation(\n event,\n getActiveElement() as HTMLElement,\n contentElement.value,\n {\n loop: loop.value,\n arrowKeyOptions: 'vertical',\n dir: rootContext?.dir.value,\n focus: true,\n attributeName: '[data-reka-collection-item]:not([data-disabled])',\n },\n )\n if (el)\n return el?.focus()\n\n // prevent \"Space\" taken account into handleTypeahead\n if (event.code === 'Space')\n return\n\n const collectionItems = rovingFocusGroupRef.value?.getItems() ?? []\n\n if (isKeyDownInside) {\n // menus should not be navigated using tab key so we prevent it\n if (event.key === 'Tab')\n event.preventDefault()\n if (!isModifierKey && isCharacterKey)\n handleTypeaheadSearch(event.key, collectionItems)\n }\n\n // focus first/last item based on key pressed\n if (event.target !== contentElement.value)\n return\n if (!FIRST_LAST_KEYS.includes(event.key))\n return\n event.preventDefault()\n const candidateNodes = [...collectionItems.map(item => item.ref)]\n if (LAST_KEYS.includes(event.key))\n candidateNodes.reverse()\n focusFirst(candidateNodes)\n}\n\nfunction handleBlur(event: FocusEvent) {\n // clear search buffer when leaving the menu\n // @ts-expect-error the provided currentTarget and target should be HTMLElement\n if (!event?.currentTarget?.contains?.(event.target)) {\n window.clearTimeout(timerRef.value)\n searchRef.value = ''\n }\n}\n\nfunction handlePointerMove(event: PointerEvent) {\n if (!isMouseEvent(event))\n return\n const target = event.target as HTMLElement\n const pointerXHasChanged = lastPointerXRef.value !== event.clientX\n\n // We don't use `event.movementX` for this check because Safari will\n // always return `0` on a pointer event.\n if (\n (event?.currentTarget as HTMLElement)?.contains(target)\n && pointerXHasChanged\n ) {\n const newDir = event.clientX > lastPointerXRef.value ? 'right' : 'left'\n pointerDirRef.value = newDir\n lastPointerXRef.value = event.clientX\n }\n}\n\nprovideMenuContentContext({\n onItemEnter: (event) => {\n // event.preventDefault() we can't prevent pointerMove event\n if (isPointerMovingToSubmenu(event))\n return true\n else\n return false\n },\n onItemLeave: (event) => {\n if (isPointerMovingToSubmenu(event))\n return\n contentElement.value?.focus()\n currentItemId.value = null\n },\n onTriggerLeave: (event) => {\n // event.preventDefault() we can't prevent pointerLeave event\n if (isPointerMovingToSubmenu(event))\n return true\n else\n return false\n },\n searchRef,\n pointerGraceTimerRef,\n onPointerGraceIntentChange: (intent) => {\n pointerGraceIntentRef.value = intent\n },\n})\n</script>\n\n<template>\n <FocusScope\n as-child\n :trapped=\"trapFocus\"\n @mount-auto-focus=\"handleMountAutoFocus\"\n @unmount-auto-focus=\"emits('closeAutoFocus', $event)\"\n >\n <DismissableLayer\n as-child\n :disable-outside-pointer-events=\"disableOutsidePointerEvents\"\n @escape-key-down=\"emits('escapeKeyDown', $event)\"\n @pointer-down-outside=\"emits('pointerDownOutside', $event)\"\n @focus-outside=\"emits('focusOutside', $event)\"\n @interact-outside=\"emits('interactOutside', $event)\"\n @dismiss=\"emits('dismiss')\"\n >\n <RovingFocusGroup\n ref=\"rovingFocusGroupRef\"\n v-model:current-tab-stop-id=\"currentItemId\"\n as-child\n orientation=\"vertical\"\n :dir=\"rootContext.dir.value\"\n :loop=\"loop\"\n @entry-focus=\"(event) => {\n emits('entryFocus', event)\n // only focus first item when using keyboard\n if (!rootContext.isUsingKeyboardRef.value) event.preventDefault();\n }\"\n >\n <PopperContent\n :ref=\"forwardRef\"\n role=\"menu\"\n :as=\"as\"\n :as-child=\"asChild\"\n aria-orientation=\"vertical\"\n data-reka-menu-content\n :data-state=\"getOpenState(menuContext.open.value)\"\n :dir=\"rootContext.dir.value\"\n :side=\"side\"\n :side-offset=\"sideOffset\"\n :align=\"align\"\n :align-offset=\"alignOffset\"\n :avoid-collisions=\"avoidCollisions\"\n :collision-boundary=\"collisionBoundary\"\n :collision-padding=\"collisionPadding\"\n :arrow-padding=\"arrowPadding\"\n :prioritize-position=\"prioritizePosition\"\n :position-strategy=\"positionStrategy\"\n :update-position-strategy=\"updatePositionStrategy\"\n :sticky=\"sticky\"\n :hide-when-detached=\"hideWhenDetached\"\n :reference=\"reference\"\n @keydown=\"handleKeyDown\"\n @blur=\"handleBlur\"\n @pointermove=\"handlePointerMove\"\n >\n <slot />\n </PopperContent>\n </RovingFocusGroup>\n </DismissableLayer>\n </FocusScope>\n</template>\n"],"names":["createContext","injectMenuContext","injectMenuRootContext","toRefs","useFocusGuards","useBodyScrollLock","ref","useForwardExpose","useTypeahead","watch","onUnmounted","isPointerInGraceArea","useArrowNavigation","getActiveElement","FIRST_LAST_KEYS","LAST_KEYS","focusFirst","isMouseEvent"],"mappings":"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"}
1
+ {"version":3,"file":"MenuContentImpl.cjs","sources":["../../src/Menu/MenuContentImpl.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { Ref } from 'vue'\nimport type {\n GraceIntent,\n Side,\n} from './utils'\nimport type {\n DismissableLayerEmits,\n DismissableLayerProps,\n} from '@/DismissableLayer'\nimport type { FocusScopeProps } from '@/FocusScope'\nimport type { PopperContentProps } from '@/Popper'\nimport type { RovingFocusGroupEmits } from '@/RovingFocus'\n\nimport {\n createContext,\n getActiveElement,\n useArrowNavigation,\n useFocusGuards,\n useForwardExpose,\n useTypeahead,\n} from '@/shared'\nimport { useBodyScrollLock } from '@/shared/useBodyScrollLock'\n\nexport interface MenuContentContext {\n onItemEnter: (event: PointerEvent) => boolean\n onItemLeave: (event: PointerEvent) => void\n onTriggerLeave: (event: PointerEvent) => boolean\n searchRef: Ref<string>\n pointerGraceTimerRef: Ref<number>\n onPointerGraceIntentChange: (intent: GraceIntent | null) => void\n}\n\nexport const [injectMenuContentContext, provideMenuContentContext]\n = createContext<MenuContentContext>('MenuContent')\n\nexport interface MenuContentImplPrivateProps {\n /**\n * When `true`, hover/focus/click interactions will be disabled on elements outside\n * the `DismissableLayer`. Users will need to click twice on outside elements to\n * interact with them: once to close the `DismissableLayer`, and again to trigger the element.\n */\n disableOutsidePointerEvents?: DismissableLayerProps['disableOutsidePointerEvents']\n /**\n * Whether scrolling outside the `MenuContent` should be prevented\n * @defaultValue false\n */\n disableOutsideScroll?: boolean\n\n /**\n * Whether focus should be trapped within the `MenuContent`\n * @defaultValue also\n */\n trapFocus?: FocusScopeProps['trapped']\n}\n\nexport type MenuContentImplEmits = DismissableLayerEmits & Omit<RovingFocusGroupEmits, 'update:currentTabStopId'> & {\n openAutoFocus: [event: Event]\n /**\n * Event handler called when auto-focusing on close.\n * Can be prevented.\n */\n closeAutoFocus: [event: Event]\n}\n\ntype MenuContentImplPrivateEmits = MenuContentImplEmits & {\n /**\n * Handler called when the `DismissableLayer` should be dismissed\n */\n dismiss: []\n}\n\nexport interface MenuContentImplProps\n extends MenuContentImplPrivateProps,\n Omit<PopperContentProps, 'dir'> {\n /**\n * When `true`, keyboard navigation will loop from last item to first, and vice versa.\n * @defaultValue false\n */\n loop?: boolean\n}\n\nexport interface MenuRootContentTypeProps\n extends Omit<MenuContentImplProps, 'disableOutsidePointerEvents' | 'disableOutsideScroll' | 'trapFocus'> {}\n</script>\n\n<script setup lang=\"ts\">\nimport {\n onUnmounted,\n ref,\n toRefs,\n watch,\n} from 'vue'\nimport { DismissableLayer } from '@/DismissableLayer'\nimport { FocusScope } from '@/FocusScope'\nimport {\n PopperContent,\n PopperContentPropsDefaultValue,\n} from '@/Popper'\nimport { RovingFocusGroup } from '@/RovingFocus'\nimport { injectMenuContext, injectMenuRootContext } from './MenuRoot.vue'\nimport {\n FIRST_LAST_KEYS,\n focusFirst,\n getOpenState,\n isMouseEvent,\n isPointerInGraceArea,\n LAST_KEYS,\n} from './utils'\n\nconst props = withDefaults(defineProps<MenuContentImplProps>(), {\n ...PopperContentPropsDefaultValue,\n})\nconst emits = defineEmits<MenuContentImplPrivateEmits>()\nconst menuContext = injectMenuContext()\nconst rootContext = injectMenuRootContext()\n\nconst { trapFocus, disableOutsidePointerEvents, loop } = toRefs(props)\n\nuseFocusGuards()\nuseBodyScrollLock(disableOutsidePointerEvents.value)\n\nconst searchRef = ref('')\nconst timerRef = ref(0)\nconst pointerGraceTimerRef = ref(0)\nconst pointerGraceIntentRef = ref<GraceIntent | null>(null)\nconst pointerDirRef = ref<Side>('right')\nconst lastPointerXRef = ref(0)\nconst currentItemId = ref<string | null>(null)\n\nconst rovingFocusGroupRef = ref<InstanceType<typeof RovingFocusGroup>>()\nconst { forwardRef, currentElement: contentElement } = useForwardExpose()\nconst { handleTypeaheadSearch } = useTypeahead()\n\nwatch(contentElement, (el) => {\n menuContext!.onContentChange(el)\n})\n\nonUnmounted(() => {\n window.clearTimeout(timerRef.value)\n})\n\nfunction isPointerMovingToSubmenu(event: PointerEvent) {\n const isMovingTowards\n = pointerDirRef.value === pointerGraceIntentRef.value?.side\n\n return (\n isMovingTowards\n && isPointerInGraceArea(event, pointerGraceIntentRef.value?.area)\n )\n}\n\nasync function handleMountAutoFocus(event: Event) {\n emits('openAutoFocus', event)\n if (event.defaultPrevented)\n return\n // when opening, explicitly focus the content area only and leave\n // `onEntryFocus` in control of focusing first item\n event.preventDefault()\n contentElement.value?.focus({\n preventScroll: true,\n })\n}\n\nfunction handleKeyDown(event: KeyboardEvent) {\n if (event.defaultPrevented)\n return\n // submenu key events bubble through portals. We only care about keys in this menu.\n const target = event.target as HTMLElement\n const isKeyDownInside\n = target.closest('[data-reka-menu-content]') === event.currentTarget\n const isModifierKey = event.ctrlKey || event.altKey || event.metaKey\n const isCharacterKey = event.key.length === 1\n\n const el = useArrowNavigation(\n event,\n getActiveElement() as HTMLElement,\n contentElement.value,\n {\n loop: loop.value,\n arrowKeyOptions: 'vertical',\n dir: rootContext?.dir.value,\n focus: true,\n attributeName: '[data-reka-collection-item]:not([data-disabled])',\n },\n )\n if (el)\n return el?.focus()\n\n // prevent \"Space\" taken account into handleTypeahead\n if (event.code === 'Space')\n return\n\n const collectionItems = rovingFocusGroupRef.value?.getItems() ?? []\n\n if (isKeyDownInside) {\n // menus should not be navigated using tab key so we prevent it\n if (event.key === 'Tab')\n event.preventDefault()\n if (!isModifierKey && isCharacterKey)\n handleTypeaheadSearch(event.key, collectionItems)\n }\n\n // focus first/last item based on key pressed\n if (event.target !== contentElement.value)\n return\n if (!FIRST_LAST_KEYS.includes(event.key))\n return\n event.preventDefault()\n const candidateNodes = [...collectionItems.map(item => item.ref)]\n if (LAST_KEYS.includes(event.key))\n candidateNodes.reverse()\n focusFirst(candidateNodes)\n}\n\nfunction handleBlur(event: FocusEvent) {\n // clear search buffer when leaving the menu\n // @ts-expect-error the provided currentTarget and target should be HTMLElement\n if (!event?.currentTarget?.contains?.(event.target)) {\n window.clearTimeout(timerRef.value)\n searchRef.value = ''\n }\n}\n\nfunction handlePointerMove(event: PointerEvent) {\n if (!isMouseEvent(event))\n return\n const target = event.target as HTMLElement\n const pointerXHasChanged = lastPointerXRef.value !== event.clientX\n\n // We don't use `event.movementX` for this check because Safari will\n // always return `0` on a pointer event.\n if (\n (event?.currentTarget as HTMLElement)?.contains(target)\n && pointerXHasChanged\n ) {\n const newDir = event.clientX > lastPointerXRef.value ? 'right' : 'left'\n pointerDirRef.value = newDir\n lastPointerXRef.value = event.clientX\n }\n}\n\nprovideMenuContentContext({\n onItemEnter: (event) => {\n // event.preventDefault() we can't prevent pointerMove event\n if (isPointerMovingToSubmenu(event))\n return true\n else\n return false\n },\n onItemLeave: (event) => {\n if (isPointerMovingToSubmenu(event))\n return\n contentElement.value?.focus()\n currentItemId.value = null\n },\n onTriggerLeave: (event) => {\n // event.preventDefault() we can't prevent pointerLeave event\n if (isPointerMovingToSubmenu(event))\n return true\n else\n return false\n },\n searchRef,\n pointerGraceTimerRef,\n onPointerGraceIntentChange: (intent) => {\n pointerGraceIntentRef.value = intent\n },\n})\n</script>\n\n<template>\n <FocusScope\n as-child\n :trapped=\"trapFocus\"\n @mount-auto-focus=\"handleMountAutoFocus\"\n @unmount-auto-focus=\"emits('closeAutoFocus', $event)\"\n >\n <DismissableLayer\n as-child\n :disable-outside-pointer-events=\"disableOutsidePointerEvents\"\n @escape-key-down=\"emits('escapeKeyDown', $event)\"\n @pointer-down-outside=\"emits('pointerDownOutside', $event)\"\n @focus-outside=\"emits('focusOutside', $event)\"\n @interact-outside=\"emits('interactOutside', $event)\"\n @dismiss=\"emits('dismiss')\"\n >\n <RovingFocusGroup\n ref=\"rovingFocusGroupRef\"\n v-model:current-tab-stop-id=\"currentItemId\"\n as-child\n orientation=\"vertical\"\n :dir=\"rootContext.dir.value\"\n :loop=\"loop\"\n @entry-focus=\"(event) => {\n emits('entryFocus', event)\n // only focus first item when using keyboard\n if (!rootContext.isUsingKeyboardRef.value) event.preventDefault();\n }\"\n >\n <PopperContent\n :ref=\"forwardRef\"\n role=\"menu\"\n :as=\"as\"\n :as-child=\"asChild\"\n aria-orientation=\"vertical\"\n data-reka-menu-content\n :data-state=\"getOpenState(menuContext.open.value)\"\n :dir=\"rootContext.dir.value\"\n :side=\"side\"\n :side-offset=\"sideOffset\"\n :align=\"align\"\n :align-offset=\"alignOffset\"\n :avoid-collisions=\"avoidCollisions\"\n :collision-boundary=\"collisionBoundary\"\n :collision-padding=\"collisionPadding\"\n :arrow-padding=\"arrowPadding\"\n :prioritize-position=\"prioritizePosition\"\n :position-strategy=\"positionStrategy\"\n :update-position-strategy=\"updatePositionStrategy\"\n :sticky=\"sticky\"\n :hide-when-detached=\"hideWhenDetached\"\n :reference=\"reference\"\n @keydown=\"handleKeyDown\"\n @blur=\"handleBlur\"\n @pointermove=\"handlePointerMove\"\n >\n <slot />\n </PopperContent>\n </RovingFocusGroup>\n </DismissableLayer>\n </FocusScope>\n</template>\n"],"names":["createContext","injectMenuContext","injectMenuRootContext","toRefs","useFocusGuards","useBodyScrollLock","ref","useForwardExpose","useTypeahead","watch","onUnmounted","isPointerInGraceArea","useArrowNavigation","getActiveElement","FIRST_LAST_KEYS","LAST_KEYS","focusFirst","isMouseEvent"],"mappings":"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"}
@@ -1,5 +1,4 @@
1
1
  import { defineComponent, mergeDefaults, toRefs, ref, watch, onUnmounted, createBlock, openBlock, unref, withCtx, createVNode, renderSlot } from 'vue';
2
- import { _ as _sfc_main$2 } from '../DismissableLayer/DismissableLayer.js';
3
2
  import { _ as _sfc_main$4, P as PopperContentPropsDefaultValue } from '../Popper/PopperContent.js';
4
3
  import { g as getOpenState, b as isPointerInGraceArea, F as FIRST_LAST_KEYS, L as LAST_KEYS, f as focusFirst, c as isMouseEvent } from './utils.js';
5
4
  import { u as useBodyScrollLock } from '../shared/useBodyScrollLock.js';
@@ -9,6 +8,7 @@ import { u as useFocusGuards } from '../shared/useFocusGuards.js';
9
8
  import { u as useForwardExpose } from '../shared/useForwardExpose.js';
10
9
  import { u as useTypeahead } from '../shared/useTypeahead.js';
11
10
  import { _ as _sfc_main$1 } from '../FocusScope/FocusScope.js';
11
+ import { _ as _sfc_main$2 } from '../DismissableLayer/DismissableLayer.js';
12
12
  import { _ as _sfc_main$3 } from '../RovingFocus/RovingFocusGroup.js';
13
13
  import { u as useArrowNavigation } from '../shared/useArrowNavigation.js';
14
14
  import { g as getActiveElement } from '../shared/getActiveElement.js';
@@ -1 +1 @@
1
- {"version":3,"file":"MenuContentImpl.js","sources":["../../src/Menu/MenuContentImpl.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type {\n DismissableLayerEmits,\n DismissableLayerProps,\n} from '@/DismissableLayer'\nimport type { FocusScopeProps } from '@/FocusScope'\nimport type { PopperContentProps } from '@/Popper'\nimport type { RovingFocusGroupEmits } from '@/RovingFocus'\nimport type { Ref } from 'vue'\nimport type {\n GraceIntent,\n Side,\n} from './utils'\n\nimport {\n createContext,\n getActiveElement,\n useArrowNavigation,\n useFocusGuards,\n useForwardExpose,\n useTypeahead,\n} from '@/shared'\nimport { useBodyScrollLock } from '@/shared/useBodyScrollLock'\n\nexport interface MenuContentContext {\n onItemEnter: (event: PointerEvent) => boolean\n onItemLeave: (event: PointerEvent) => void\n onTriggerLeave: (event: PointerEvent) => boolean\n searchRef: Ref<string>\n pointerGraceTimerRef: Ref<number>\n onPointerGraceIntentChange: (intent: GraceIntent | null) => void\n}\n\nexport const [injectMenuContentContext, provideMenuContentContext]\n = createContext<MenuContentContext>('MenuContent')\n\nexport interface MenuContentImplPrivateProps {\n /**\n * When `true`, hover/focus/click interactions will be disabled on elements outside\n * the `DismissableLayer`. Users will need to click twice on outside elements to\n * interact with them: once to close the `DismissableLayer`, and again to trigger the element.\n */\n disableOutsidePointerEvents?: DismissableLayerProps['disableOutsidePointerEvents']\n /**\n * Whether scrolling outside the `MenuContent` should be prevented\n * @defaultValue false\n */\n disableOutsideScroll?: boolean\n\n /**\n * Whether focus should be trapped within the `MenuContent`\n * @defaultValue also\n */\n trapFocus?: FocusScopeProps['trapped']\n}\n\nexport type MenuContentImplEmits = DismissableLayerEmits & Omit<RovingFocusGroupEmits, 'update:currentTabStopId'> & {\n openAutoFocus: [event: Event]\n /**\n * Event handler called when auto-focusing on close.\n * Can be prevented.\n */\n closeAutoFocus: [event: Event]\n}\n\ntype MenuContentImplPrivateEmits = MenuContentImplEmits & {\n /**\n * Handler called when the `DismissableLayer` should be dismissed\n */\n dismiss: []\n}\n\nexport interface MenuContentImplProps\n extends MenuContentImplPrivateProps,\n Omit<PopperContentProps, 'dir'> {\n /**\n * When `true`, keyboard navigation will loop from last item to first, and vice versa.\n * @defaultValue false\n */\n loop?: boolean\n}\n\nexport interface MenuRootContentTypeProps\n extends Omit<MenuContentImplProps, 'disableOutsidePointerEvents' | 'disableOutsideScroll' | 'trapFocus'> {}\n</script>\n\n<script setup lang=\"ts\">\nimport { DismissableLayer } from '@/DismissableLayer'\nimport { FocusScope } from '@/FocusScope'\nimport {\n PopperContent,\n PopperContentPropsDefaultValue,\n} from '@/Popper'\nimport { RovingFocusGroup } from '@/RovingFocus'\nimport {\n onUnmounted,\n ref,\n toRefs,\n watch,\n} from 'vue'\nimport { injectMenuContext, injectMenuRootContext } from './MenuRoot.vue'\nimport {\n FIRST_LAST_KEYS,\n focusFirst,\n getOpenState,\n isMouseEvent,\n isPointerInGraceArea,\n LAST_KEYS,\n} from './utils'\n\nconst props = withDefaults(defineProps<MenuContentImplProps>(), {\n ...PopperContentPropsDefaultValue,\n})\nconst emits = defineEmits<MenuContentImplPrivateEmits>()\nconst menuContext = injectMenuContext()\nconst rootContext = injectMenuRootContext()\n\nconst { trapFocus, disableOutsidePointerEvents, loop } = toRefs(props)\n\nuseFocusGuards()\nuseBodyScrollLock(disableOutsidePointerEvents.value)\n\nconst searchRef = ref('')\nconst timerRef = ref(0)\nconst pointerGraceTimerRef = ref(0)\nconst pointerGraceIntentRef = ref<GraceIntent | null>(null)\nconst pointerDirRef = ref<Side>('right')\nconst lastPointerXRef = ref(0)\nconst currentItemId = ref<string | null>(null)\n\nconst rovingFocusGroupRef = ref<InstanceType<typeof RovingFocusGroup>>()\nconst { forwardRef, currentElement: contentElement } = useForwardExpose()\nconst { handleTypeaheadSearch } = useTypeahead()\n\nwatch(contentElement, (el) => {\n menuContext!.onContentChange(el)\n})\n\nonUnmounted(() => {\n window.clearTimeout(timerRef.value)\n})\n\nfunction isPointerMovingToSubmenu(event: PointerEvent) {\n const isMovingTowards\n = pointerDirRef.value === pointerGraceIntentRef.value?.side\n\n return (\n isMovingTowards\n && isPointerInGraceArea(event, pointerGraceIntentRef.value?.area)\n )\n}\n\nasync function handleMountAutoFocus(event: Event) {\n emits('openAutoFocus', event)\n if (event.defaultPrevented)\n return\n // when opening, explicitly focus the content area only and leave\n // `onEntryFocus` in control of focusing first item\n event.preventDefault()\n contentElement.value?.focus({\n preventScroll: true,\n })\n}\n\nfunction handleKeyDown(event: KeyboardEvent) {\n if (event.defaultPrevented)\n return\n // submenu key events bubble through portals. We only care about keys in this menu.\n const target = event.target as HTMLElement\n const isKeyDownInside\n = target.closest('[data-reka-menu-content]') === event.currentTarget\n const isModifierKey = event.ctrlKey || event.altKey || event.metaKey\n const isCharacterKey = event.key.length === 1\n\n const el = useArrowNavigation(\n event,\n getActiveElement() as HTMLElement,\n contentElement.value,\n {\n loop: loop.value,\n arrowKeyOptions: 'vertical',\n dir: rootContext?.dir.value,\n focus: true,\n attributeName: '[data-reka-collection-item]:not([data-disabled])',\n },\n )\n if (el)\n return el?.focus()\n\n // prevent \"Space\" taken account into handleTypeahead\n if (event.code === 'Space')\n return\n\n const collectionItems = rovingFocusGroupRef.value?.getItems() ?? []\n\n if (isKeyDownInside) {\n // menus should not be navigated using tab key so we prevent it\n if (event.key === 'Tab')\n event.preventDefault()\n if (!isModifierKey && isCharacterKey)\n handleTypeaheadSearch(event.key, collectionItems)\n }\n\n // focus first/last item based on key pressed\n if (event.target !== contentElement.value)\n return\n if (!FIRST_LAST_KEYS.includes(event.key))\n return\n event.preventDefault()\n const candidateNodes = [...collectionItems.map(item => item.ref)]\n if (LAST_KEYS.includes(event.key))\n candidateNodes.reverse()\n focusFirst(candidateNodes)\n}\n\nfunction handleBlur(event: FocusEvent) {\n // clear search buffer when leaving the menu\n // @ts-expect-error the provided currentTarget and target should be HTMLElement\n if (!event?.currentTarget?.contains?.(event.target)) {\n window.clearTimeout(timerRef.value)\n searchRef.value = ''\n }\n}\n\nfunction handlePointerMove(event: PointerEvent) {\n if (!isMouseEvent(event))\n return\n const target = event.target as HTMLElement\n const pointerXHasChanged = lastPointerXRef.value !== event.clientX\n\n // We don't use `event.movementX` for this check because Safari will\n // always return `0` on a pointer event.\n if (\n (event?.currentTarget as HTMLElement)?.contains(target)\n && pointerXHasChanged\n ) {\n const newDir = event.clientX > lastPointerXRef.value ? 'right' : 'left'\n pointerDirRef.value = newDir\n lastPointerXRef.value = event.clientX\n }\n}\n\nprovideMenuContentContext({\n onItemEnter: (event) => {\n // event.preventDefault() we can't prevent pointerMove event\n if (isPointerMovingToSubmenu(event))\n return true\n else\n return false\n },\n onItemLeave: (event) => {\n if (isPointerMovingToSubmenu(event))\n return\n contentElement.value?.focus()\n currentItemId.value = null\n },\n onTriggerLeave: (event) => {\n // event.preventDefault() we can't prevent pointerLeave event\n if (isPointerMovingToSubmenu(event))\n return true\n else\n return false\n },\n searchRef,\n pointerGraceTimerRef,\n onPointerGraceIntentChange: (intent) => {\n pointerGraceIntentRef.value = intent\n },\n})\n</script>\n\n<template>\n <FocusScope\n as-child\n :trapped=\"trapFocus\"\n @mount-auto-focus=\"handleMountAutoFocus\"\n @unmount-auto-focus=\"emits('closeAutoFocus', $event)\"\n >\n <DismissableLayer\n as-child\n :disable-outside-pointer-events=\"disableOutsidePointerEvents\"\n @escape-key-down=\"emits('escapeKeyDown', $event)\"\n @pointer-down-outside=\"emits('pointerDownOutside', $event)\"\n @focus-outside=\"emits('focusOutside', $event)\"\n @interact-outside=\"emits('interactOutside', $event)\"\n @dismiss=\"emits('dismiss')\"\n >\n <RovingFocusGroup\n ref=\"rovingFocusGroupRef\"\n v-model:current-tab-stop-id=\"currentItemId\"\n as-child\n orientation=\"vertical\"\n :dir=\"rootContext.dir.value\"\n :loop=\"loop\"\n @entry-focus=\"(event) => {\n emits('entryFocus', event)\n // only focus first item when using keyboard\n if (!rootContext.isUsingKeyboardRef.value) event.preventDefault();\n }\"\n >\n <PopperContent\n :ref=\"forwardRef\"\n role=\"menu\"\n :as=\"as\"\n :as-child=\"asChild\"\n aria-orientation=\"vertical\"\n data-reka-menu-content\n :data-state=\"getOpenState(menuContext.open.value)\"\n :dir=\"rootContext.dir.value\"\n :side=\"side\"\n :side-offset=\"sideOffset\"\n :align=\"align\"\n :align-offset=\"alignOffset\"\n :avoid-collisions=\"avoidCollisions\"\n :collision-boundary=\"collisionBoundary\"\n :collision-padding=\"collisionPadding\"\n :arrow-padding=\"arrowPadding\"\n :prioritize-position=\"prioritizePosition\"\n :position-strategy=\"positionStrategy\"\n :update-position-strategy=\"updatePositionStrategy\"\n :sticky=\"sticky\"\n :hide-when-detached=\"hideWhenDetached\"\n :reference=\"reference\"\n @keydown=\"handleKeyDown\"\n @blur=\"handleBlur\"\n @pointermove=\"handlePointerMove\"\n >\n <slot />\n </PopperContent>\n </RovingFocusGroup>\n </DismissableLayer>\n </FocusScope>\n</template>\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MenuContentImpl.js","sources":["../../src/Menu/MenuContentImpl.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { Ref } from 'vue'\nimport type {\n GraceIntent,\n Side,\n} from './utils'\nimport type {\n DismissableLayerEmits,\n DismissableLayerProps,\n} from '@/DismissableLayer'\nimport type { FocusScopeProps } from '@/FocusScope'\nimport type { PopperContentProps } from '@/Popper'\nimport type { RovingFocusGroupEmits } from '@/RovingFocus'\n\nimport {\n createContext,\n getActiveElement,\n useArrowNavigation,\n useFocusGuards,\n useForwardExpose,\n useTypeahead,\n} from '@/shared'\nimport { useBodyScrollLock } from '@/shared/useBodyScrollLock'\n\nexport interface MenuContentContext {\n onItemEnter: (event: PointerEvent) => boolean\n onItemLeave: (event: PointerEvent) => void\n onTriggerLeave: (event: PointerEvent) => boolean\n searchRef: Ref<string>\n pointerGraceTimerRef: Ref<number>\n onPointerGraceIntentChange: (intent: GraceIntent | null) => void\n}\n\nexport const [injectMenuContentContext, provideMenuContentContext]\n = createContext<MenuContentContext>('MenuContent')\n\nexport interface MenuContentImplPrivateProps {\n /**\n * When `true`, hover/focus/click interactions will be disabled on elements outside\n * the `DismissableLayer`. Users will need to click twice on outside elements to\n * interact with them: once to close the `DismissableLayer`, and again to trigger the element.\n */\n disableOutsidePointerEvents?: DismissableLayerProps['disableOutsidePointerEvents']\n /**\n * Whether scrolling outside the `MenuContent` should be prevented\n * @defaultValue false\n */\n disableOutsideScroll?: boolean\n\n /**\n * Whether focus should be trapped within the `MenuContent`\n * @defaultValue also\n */\n trapFocus?: FocusScopeProps['trapped']\n}\n\nexport type MenuContentImplEmits = DismissableLayerEmits & Omit<RovingFocusGroupEmits, 'update:currentTabStopId'> & {\n openAutoFocus: [event: Event]\n /**\n * Event handler called when auto-focusing on close.\n * Can be prevented.\n */\n closeAutoFocus: [event: Event]\n}\n\ntype MenuContentImplPrivateEmits = MenuContentImplEmits & {\n /**\n * Handler called when the `DismissableLayer` should be dismissed\n */\n dismiss: []\n}\n\nexport interface MenuContentImplProps\n extends MenuContentImplPrivateProps,\n Omit<PopperContentProps, 'dir'> {\n /**\n * When `true`, keyboard navigation will loop from last item to first, and vice versa.\n * @defaultValue false\n */\n loop?: boolean\n}\n\nexport interface MenuRootContentTypeProps\n extends Omit<MenuContentImplProps, 'disableOutsidePointerEvents' | 'disableOutsideScroll' | 'trapFocus'> {}\n</script>\n\n<script setup lang=\"ts\">\nimport {\n onUnmounted,\n ref,\n toRefs,\n watch,\n} from 'vue'\nimport { DismissableLayer } from '@/DismissableLayer'\nimport { FocusScope } from '@/FocusScope'\nimport {\n PopperContent,\n PopperContentPropsDefaultValue,\n} from '@/Popper'\nimport { RovingFocusGroup } from '@/RovingFocus'\nimport { injectMenuContext, injectMenuRootContext } from './MenuRoot.vue'\nimport {\n FIRST_LAST_KEYS,\n focusFirst,\n getOpenState,\n isMouseEvent,\n isPointerInGraceArea,\n LAST_KEYS,\n} from './utils'\n\nconst props = withDefaults(defineProps<MenuContentImplProps>(), {\n ...PopperContentPropsDefaultValue,\n})\nconst emits = defineEmits<MenuContentImplPrivateEmits>()\nconst menuContext = injectMenuContext()\nconst rootContext = injectMenuRootContext()\n\nconst { trapFocus, disableOutsidePointerEvents, loop } = toRefs(props)\n\nuseFocusGuards()\nuseBodyScrollLock(disableOutsidePointerEvents.value)\n\nconst searchRef = ref('')\nconst timerRef = ref(0)\nconst pointerGraceTimerRef = ref(0)\nconst pointerGraceIntentRef = ref<GraceIntent | null>(null)\nconst pointerDirRef = ref<Side>('right')\nconst lastPointerXRef = ref(0)\nconst currentItemId = ref<string | null>(null)\n\nconst rovingFocusGroupRef = ref<InstanceType<typeof RovingFocusGroup>>()\nconst { forwardRef, currentElement: contentElement } = useForwardExpose()\nconst { handleTypeaheadSearch } = useTypeahead()\n\nwatch(contentElement, (el) => {\n menuContext!.onContentChange(el)\n})\n\nonUnmounted(() => {\n window.clearTimeout(timerRef.value)\n})\n\nfunction isPointerMovingToSubmenu(event: PointerEvent) {\n const isMovingTowards\n = pointerDirRef.value === pointerGraceIntentRef.value?.side\n\n return (\n isMovingTowards\n && isPointerInGraceArea(event, pointerGraceIntentRef.value?.area)\n )\n}\n\nasync function handleMountAutoFocus(event: Event) {\n emits('openAutoFocus', event)\n if (event.defaultPrevented)\n return\n // when opening, explicitly focus the content area only and leave\n // `onEntryFocus` in control of focusing first item\n event.preventDefault()\n contentElement.value?.focus({\n preventScroll: true,\n })\n}\n\nfunction handleKeyDown(event: KeyboardEvent) {\n if (event.defaultPrevented)\n return\n // submenu key events bubble through portals. We only care about keys in this menu.\n const target = event.target as HTMLElement\n const isKeyDownInside\n = target.closest('[data-reka-menu-content]') === event.currentTarget\n const isModifierKey = event.ctrlKey || event.altKey || event.metaKey\n const isCharacterKey = event.key.length === 1\n\n const el = useArrowNavigation(\n event,\n getActiveElement() as HTMLElement,\n contentElement.value,\n {\n loop: loop.value,\n arrowKeyOptions: 'vertical',\n dir: rootContext?.dir.value,\n focus: true,\n attributeName: '[data-reka-collection-item]:not([data-disabled])',\n },\n )\n if (el)\n return el?.focus()\n\n // prevent \"Space\" taken account into handleTypeahead\n if (event.code === 'Space')\n return\n\n const collectionItems = rovingFocusGroupRef.value?.getItems() ?? []\n\n if (isKeyDownInside) {\n // menus should not be navigated using tab key so we prevent it\n if (event.key === 'Tab')\n event.preventDefault()\n if (!isModifierKey && isCharacterKey)\n handleTypeaheadSearch(event.key, collectionItems)\n }\n\n // focus first/last item based on key pressed\n if (event.target !== contentElement.value)\n return\n if (!FIRST_LAST_KEYS.includes(event.key))\n return\n event.preventDefault()\n const candidateNodes = [...collectionItems.map(item => item.ref)]\n if (LAST_KEYS.includes(event.key))\n candidateNodes.reverse()\n focusFirst(candidateNodes)\n}\n\nfunction handleBlur(event: FocusEvent) {\n // clear search buffer when leaving the menu\n // @ts-expect-error the provided currentTarget and target should be HTMLElement\n if (!event?.currentTarget?.contains?.(event.target)) {\n window.clearTimeout(timerRef.value)\n searchRef.value = ''\n }\n}\n\nfunction handlePointerMove(event: PointerEvent) {\n if (!isMouseEvent(event))\n return\n const target = event.target as HTMLElement\n const pointerXHasChanged = lastPointerXRef.value !== event.clientX\n\n // We don't use `event.movementX` for this check because Safari will\n // always return `0` on a pointer event.\n if (\n (event?.currentTarget as HTMLElement)?.contains(target)\n && pointerXHasChanged\n ) {\n const newDir = event.clientX > lastPointerXRef.value ? 'right' : 'left'\n pointerDirRef.value = newDir\n lastPointerXRef.value = event.clientX\n }\n}\n\nprovideMenuContentContext({\n onItemEnter: (event) => {\n // event.preventDefault() we can't prevent pointerMove event\n if (isPointerMovingToSubmenu(event))\n return true\n else\n return false\n },\n onItemLeave: (event) => {\n if (isPointerMovingToSubmenu(event))\n return\n contentElement.value?.focus()\n currentItemId.value = null\n },\n onTriggerLeave: (event) => {\n // event.preventDefault() we can't prevent pointerLeave event\n if (isPointerMovingToSubmenu(event))\n return true\n else\n return false\n },\n searchRef,\n pointerGraceTimerRef,\n onPointerGraceIntentChange: (intent) => {\n pointerGraceIntentRef.value = intent\n },\n})\n</script>\n\n<template>\n <FocusScope\n as-child\n :trapped=\"trapFocus\"\n @mount-auto-focus=\"handleMountAutoFocus\"\n @unmount-auto-focus=\"emits('closeAutoFocus', $event)\"\n >\n <DismissableLayer\n as-child\n :disable-outside-pointer-events=\"disableOutsidePointerEvents\"\n @escape-key-down=\"emits('escapeKeyDown', $event)\"\n @pointer-down-outside=\"emits('pointerDownOutside', $event)\"\n @focus-outside=\"emits('focusOutside', $event)\"\n @interact-outside=\"emits('interactOutside', $event)\"\n @dismiss=\"emits('dismiss')\"\n >\n <RovingFocusGroup\n ref=\"rovingFocusGroupRef\"\n v-model:current-tab-stop-id=\"currentItemId\"\n as-child\n orientation=\"vertical\"\n :dir=\"rootContext.dir.value\"\n :loop=\"loop\"\n @entry-focus=\"(event) => {\n emits('entryFocus', event)\n // only focus first item when using keyboard\n if (!rootContext.isUsingKeyboardRef.value) event.preventDefault();\n }\"\n >\n <PopperContent\n :ref=\"forwardRef\"\n role=\"menu\"\n :as=\"as\"\n :as-child=\"asChild\"\n aria-orientation=\"vertical\"\n data-reka-menu-content\n :data-state=\"getOpenState(menuContext.open.value)\"\n :dir=\"rootContext.dir.value\"\n :side=\"side\"\n :side-offset=\"sideOffset\"\n :align=\"align\"\n :align-offset=\"alignOffset\"\n :avoid-collisions=\"avoidCollisions\"\n :collision-boundary=\"collisionBoundary\"\n :collision-padding=\"collisionPadding\"\n :arrow-padding=\"arrowPadding\"\n :prioritize-position=\"prioritizePosition\"\n :position-strategy=\"positionStrategy\"\n :update-position-strategy=\"updatePositionStrategy\"\n :sticky=\"sticky\"\n :hide-when-detached=\"hideWhenDetached\"\n :reference=\"reference\"\n @keydown=\"handleKeyDown\"\n @blur=\"handleBlur\"\n @pointermove=\"handlePointerMove\"\n >\n <slot />\n </PopperContent>\n </RovingFocusGroup>\n </DismissableLayer>\n </FocusScope>\n</template>\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"MenuItemImpl.cjs","sources":["../../src/Menu/MenuItemImpl.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { PrimitiveProps } from '@/Primitive'\n\nexport interface MenuItemImplProps extends PrimitiveProps {\n /** When `true`, prevents the user from interacting with the item. */\n disabled?: boolean\n /**\n * Optional text used for typeahead purposes. By default the typeahead behavior will use the `.textContent` of the item. <br>\n * Use this when the content is complex, or you have non-textual content inside.\n */\n textValue?: string\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { useCollection } from '@/Collection'\nimport {\n Primitive,\n} from '@/Primitive'\nimport { useForwardExpose } from '@/shared'\nimport { nextTick, ref } from 'vue'\nimport { injectMenuContentContext } from './MenuContentImpl.vue'\nimport { isMouseEvent } from './utils'\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst props = defineProps<MenuItemImplProps>()\n\nconst contentContext = injectMenuContentContext()\nconst { forwardRef } = useForwardExpose()\nconst { CollectionItem } = useCollection()\n\nconst isFocused = ref(false)\n\nasync function handlePointerMove(event: PointerEvent) {\n if (event.defaultPrevented)\n return\n if (!isMouseEvent(event))\n return\n\n if (props.disabled) {\n contentContext.onItemLeave(event)\n }\n else {\n const defaultPrevented = contentContext.onItemEnter(event)\n if (!defaultPrevented) {\n const item = event.currentTarget;\n (item as HTMLElement)?.focus({ preventScroll: true })\n }\n }\n}\n\nasync function handlePointerLeave(event: PointerEvent) {\n await nextTick()\n if (event.defaultPrevented)\n return\n if (!isMouseEvent(event))\n return\n\n contentContext.onItemLeave(event)\n}\n</script>\n\n<template>\n <CollectionItem :value=\"{ textValue }\">\n <Primitive\n :ref=\"forwardRef\"\n role=\"menuitem\"\n tabindex=\"-1\"\n v-bind=\"$attrs\"\n :as=\"as\"\n :as-child=\"asChild\"\n :aria-disabled=\"disabled || undefined\"\n :data-disabled=\"disabled ? '' : undefined\"\n :data-highlighted=\"isFocused ? '' : undefined\"\n @pointermove=\"handlePointerMove\"\n @pointerleave=\"handlePointerLeave\"\n @focus=\"\n async (event) => {\n await nextTick();\n if (event.defaultPrevented || disabled) return;\n isFocused = true;\n }\n \"\n @blur=\"\n async (event) => {\n await nextTick();\n if (event.defaultPrevented) return;\n isFocused = false;\n }\n \"\n >\n <slot />\n </Primitive>\n </CollectionItem>\n</template>\n"],"names":["injectMenuContentContext","useForwardExpose","useCollection","ref","isMouseEvent","nextTick"],"mappings":";;;;;;;;;;;;;;;;;;;;;AA4BA,IAAA,MAAM,KAAQ,GAAA,OAAA;AAEd,IAAA,MAAM,iBAAiBA,6CAAyB,EAAA;AAChD,IAAM,MAAA,EAAE,UAAW,EAAA,GAAIC,wCAAiB,EAAA;AACxC,IAAM,MAAA,EAAE,cAAe,EAAA,GAAIC,mCAAc,EAAA;AAEzC,IAAM,MAAA,SAAA,GAAYC,QAAI,KAAK,CAAA;AAE3B,IAAA,eAAe,kBAAkB,KAAqB,EAAA;AACpD,MAAA,IAAI,KAAM,CAAA,gBAAA;AACR,QAAA;AACF,MAAI,IAAA,CAACC,wBAAa,KAAK,CAAA;AACrB,QAAA;AAEF,MAAA,IAAI,MAAM,QAAU,EAAA;AAClB,QAAA,cAAA,CAAe,YAAY,KAAK,CAAA;AAAA,OAE7B,MAAA;AACH,QAAM,MAAA,gBAAA,GAAmB,cAAe,CAAA,WAAA,CAAY,KAAK,CAAA;AACzD,QAAA,IAAI,CAAC,gBAAkB,EAAA;AACrB,UAAA,MAAM,OAAO,KAAM,CAAA,aAAA;AACnB,UAAC,IAAsB,EAAA,KAAA,CAAM,EAAE,aAAA,EAAe,MAAM,CAAA;AAAA;AACtD;AACF;AAGF,IAAA,eAAe,mBAAmB,KAAqB,EAAA;AACrD,MAAA,MAAMC,YAAS,EAAA;AACf,MAAA,IAAI,KAAM,CAAA,gBAAA;AACR,QAAA;AACF,MAAI,IAAA,CAACD,wBAAa,KAAK,CAAA;AACrB,QAAA;AAEF,MAAA,cAAA,CAAe,YAAY,KAAK,CAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"MenuItemImpl.cjs","sources":["../../src/Menu/MenuItemImpl.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { PrimitiveProps } from '@/Primitive'\n\nexport interface MenuItemImplProps extends PrimitiveProps {\n /** When `true`, prevents the user from interacting with the item. */\n disabled?: boolean\n /**\n * Optional text used for typeahead purposes. By default the typeahead behavior will use the `.textContent` of the item. <br>\n * Use this when the content is complex, or you have non-textual content inside.\n */\n textValue?: string\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { nextTick, ref } from 'vue'\nimport { useCollection } from '@/Collection'\nimport {\n Primitive,\n} from '@/Primitive'\nimport { useForwardExpose } from '@/shared'\nimport { injectMenuContentContext } from './MenuContentImpl.vue'\nimport { isMouseEvent } from './utils'\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst props = defineProps<MenuItemImplProps>()\n\nconst contentContext = injectMenuContentContext()\nconst { forwardRef } = useForwardExpose()\nconst { CollectionItem } = useCollection()\n\nconst isFocused = ref(false)\n\nasync function handlePointerMove(event: PointerEvent) {\n if (event.defaultPrevented)\n return\n if (!isMouseEvent(event))\n return\n\n if (props.disabled) {\n contentContext.onItemLeave(event)\n }\n else {\n const defaultPrevented = contentContext.onItemEnter(event)\n if (!defaultPrevented) {\n const item = event.currentTarget;\n (item as HTMLElement)?.focus({ preventScroll: true })\n }\n }\n}\n\nasync function handlePointerLeave(event: PointerEvent) {\n await nextTick()\n if (event.defaultPrevented)\n return\n if (!isMouseEvent(event))\n return\n\n contentContext.onItemLeave(event)\n}\n</script>\n\n<template>\n <CollectionItem :value=\"{ textValue }\">\n <Primitive\n :ref=\"forwardRef\"\n role=\"menuitem\"\n tabindex=\"-1\"\n v-bind=\"$attrs\"\n :as=\"as\"\n :as-child=\"asChild\"\n :aria-disabled=\"disabled || undefined\"\n :data-disabled=\"disabled ? '' : undefined\"\n :data-highlighted=\"isFocused ? '' : undefined\"\n @pointermove=\"handlePointerMove\"\n @pointerleave=\"handlePointerLeave\"\n @focus=\"\n async (event) => {\n await nextTick();\n if (event.defaultPrevented || disabled) return;\n isFocused = true;\n }\n \"\n @blur=\"\n async (event) => {\n await nextTick();\n if (event.defaultPrevented) return;\n isFocused = false;\n }\n \"\n >\n <slot />\n </Primitive>\n </CollectionItem>\n</template>\n"],"names":["injectMenuContentContext","useForwardExpose","useCollection","ref","isMouseEvent","nextTick"],"mappings":";;;;;;;;;;;;;;;;;;;;;AA4BA,IAAA,MAAM,KAAQ,GAAA,OAAA;AAEd,IAAA,MAAM,iBAAiBA,6CAAyB,EAAA;AAChD,IAAM,MAAA,EAAE,UAAW,EAAA,GAAIC,wCAAiB,EAAA;AACxC,IAAM,MAAA,EAAE,cAAe,EAAA,GAAIC,mCAAc,EAAA;AAEzC,IAAM,MAAA,SAAA,GAAYC,QAAI,KAAK,CAAA;AAE3B,IAAA,eAAe,kBAAkB,KAAqB,EAAA;AACpD,MAAA,IAAI,KAAM,CAAA,gBAAA;AACR,QAAA;AACF,MAAI,IAAA,CAACC,wBAAa,KAAK,CAAA;AACrB,QAAA;AAEF,MAAA,IAAI,MAAM,QAAU,EAAA;AAClB,QAAA,cAAA,CAAe,YAAY,KAAK,CAAA;AAAA,OAE7B,MAAA;AACH,QAAM,MAAA,gBAAA,GAAmB,cAAe,CAAA,WAAA,CAAY,KAAK,CAAA;AACzD,QAAA,IAAI,CAAC,gBAAkB,EAAA;AACrB,UAAA,MAAM,OAAO,KAAM,CAAA,aAAA;AACnB,UAAC,IAAsB,EAAA,KAAA,CAAM,EAAE,aAAA,EAAe,MAAM,CAAA;AAAA;AACtD;AACF;AAGF,IAAA,eAAe,mBAAmB,KAAqB,EAAA;AACrD,MAAA,MAAMC,YAAS,EAAA;AACf,MAAA,IAAI,KAAM,CAAA,gBAAA;AACR,QAAA;AACF,MAAI,IAAA,CAACD,wBAAa,KAAK,CAAA;AACrB,QAAA;AAEF,MAAA,cAAA,CAAe,YAAY,KAAK,CAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"MenuItemImpl.js","sources":["../../src/Menu/MenuItemImpl.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { PrimitiveProps } from '@/Primitive'\n\nexport interface MenuItemImplProps extends PrimitiveProps {\n /** When `true`, prevents the user from interacting with the item. */\n disabled?: boolean\n /**\n * Optional text used for typeahead purposes. By default the typeahead behavior will use the `.textContent` of the item. <br>\n * Use this when the content is complex, or you have non-textual content inside.\n */\n textValue?: string\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { useCollection } from '@/Collection'\nimport {\n Primitive,\n} from '@/Primitive'\nimport { useForwardExpose } from '@/shared'\nimport { nextTick, ref } from 'vue'\nimport { injectMenuContentContext } from './MenuContentImpl.vue'\nimport { isMouseEvent } from './utils'\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst props = defineProps<MenuItemImplProps>()\n\nconst contentContext = injectMenuContentContext()\nconst { forwardRef } = useForwardExpose()\nconst { CollectionItem } = useCollection()\n\nconst isFocused = ref(false)\n\nasync function handlePointerMove(event: PointerEvent) {\n if (event.defaultPrevented)\n return\n if (!isMouseEvent(event))\n return\n\n if (props.disabled) {\n contentContext.onItemLeave(event)\n }\n else {\n const defaultPrevented = contentContext.onItemEnter(event)\n if (!defaultPrevented) {\n const item = event.currentTarget;\n (item as HTMLElement)?.focus({ preventScroll: true })\n }\n }\n}\n\nasync function handlePointerLeave(event: PointerEvent) {\n await nextTick()\n if (event.defaultPrevented)\n return\n if (!isMouseEvent(event))\n return\n\n contentContext.onItemLeave(event)\n}\n</script>\n\n<template>\n <CollectionItem :value=\"{ textValue }\">\n <Primitive\n :ref=\"forwardRef\"\n role=\"menuitem\"\n tabindex=\"-1\"\n v-bind=\"$attrs\"\n :as=\"as\"\n :as-child=\"asChild\"\n :aria-disabled=\"disabled || undefined\"\n :data-disabled=\"disabled ? '' : undefined\"\n :data-highlighted=\"isFocused ? '' : undefined\"\n @pointermove=\"handlePointerMove\"\n @pointerleave=\"handlePointerLeave\"\n @focus=\"\n async (event) => {\n await nextTick();\n if (event.defaultPrevented || disabled) return;\n isFocused = true;\n }\n \"\n @blur=\"\n async (event) => {\n await nextTick();\n if (event.defaultPrevented) return;\n isFocused = false;\n }\n \"\n >\n <slot />\n </Primitive>\n </CollectionItem>\n</template>\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AA4BA,IAAA,MAAM,KAAQ,GAAA,OAAA;AAEd,IAAA,MAAM,iBAAiB,wBAAyB,EAAA;AAChD,IAAM,MAAA,EAAE,UAAW,EAAA,GAAI,gBAAiB,EAAA;AACxC,IAAM,MAAA,EAAE,cAAe,EAAA,GAAI,aAAc,EAAA;AAEzC,IAAM,MAAA,SAAA,GAAY,IAAI,KAAK,CAAA;AAE3B,IAAA,eAAe,kBAAkB,KAAqB,EAAA;AACpD,MAAA,IAAI,KAAM,CAAA,gBAAA;AACR,QAAA;AACF,MAAI,IAAA,CAAC,aAAa,KAAK,CAAA;AACrB,QAAA;AAEF,MAAA,IAAI,MAAM,QAAU,EAAA;AAClB,QAAA,cAAA,CAAe,YAAY,KAAK,CAAA;AAAA,OAE7B,MAAA;AACH,QAAM,MAAA,gBAAA,GAAmB,cAAe,CAAA,WAAA,CAAY,KAAK,CAAA;AACzD,QAAA,IAAI,CAAC,gBAAkB,EAAA;AACrB,UAAA,MAAM,OAAO,KAAM,CAAA,aAAA;AACnB,UAAC,IAAsB,EAAA,KAAA,CAAM,EAAE,aAAA,EAAe,MAAM,CAAA;AAAA;AACtD;AACF;AAGF,IAAA,eAAe,mBAAmB,KAAqB,EAAA;AACrD,MAAA,MAAM,QAAS,EAAA;AACf,MAAA,IAAI,KAAM,CAAA,gBAAA;AACR,QAAA;AACF,MAAI,IAAA,CAAC,aAAa,KAAK,CAAA;AACrB,QAAA;AAEF,MAAA,cAAA,CAAe,YAAY,KAAK,CAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"MenuItemImpl.js","sources":["../../src/Menu/MenuItemImpl.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { PrimitiveProps } from '@/Primitive'\n\nexport interface MenuItemImplProps extends PrimitiveProps {\n /** When `true`, prevents the user from interacting with the item. */\n disabled?: boolean\n /**\n * Optional text used for typeahead purposes. By default the typeahead behavior will use the `.textContent` of the item. <br>\n * Use this when the content is complex, or you have non-textual content inside.\n */\n textValue?: string\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { nextTick, ref } from 'vue'\nimport { useCollection } from '@/Collection'\nimport {\n Primitive,\n} from '@/Primitive'\nimport { useForwardExpose } from '@/shared'\nimport { injectMenuContentContext } from './MenuContentImpl.vue'\nimport { isMouseEvent } from './utils'\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst props = defineProps<MenuItemImplProps>()\n\nconst contentContext = injectMenuContentContext()\nconst { forwardRef } = useForwardExpose()\nconst { CollectionItem } = useCollection()\n\nconst isFocused = ref(false)\n\nasync function handlePointerMove(event: PointerEvent) {\n if (event.defaultPrevented)\n return\n if (!isMouseEvent(event))\n return\n\n if (props.disabled) {\n contentContext.onItemLeave(event)\n }\n else {\n const defaultPrevented = contentContext.onItemEnter(event)\n if (!defaultPrevented) {\n const item = event.currentTarget;\n (item as HTMLElement)?.focus({ preventScroll: true })\n }\n }\n}\n\nasync function handlePointerLeave(event: PointerEvent) {\n await nextTick()\n if (event.defaultPrevented)\n return\n if (!isMouseEvent(event))\n return\n\n contentContext.onItemLeave(event)\n}\n</script>\n\n<template>\n <CollectionItem :value=\"{ textValue }\">\n <Primitive\n :ref=\"forwardRef\"\n role=\"menuitem\"\n tabindex=\"-1\"\n v-bind=\"$attrs\"\n :as=\"as\"\n :as-child=\"asChild\"\n :aria-disabled=\"disabled || undefined\"\n :data-disabled=\"disabled ? '' : undefined\"\n :data-highlighted=\"isFocused ? '' : undefined\"\n @pointermove=\"handlePointerMove\"\n @pointerleave=\"handlePointerLeave\"\n @focus=\"\n async (event) => {\n await nextTick();\n if (event.defaultPrevented || disabled) return;\n isFocused = true;\n }\n \"\n @blur=\"\n async (event) => {\n await nextTick();\n if (event.defaultPrevented) return;\n isFocused = false;\n }\n \"\n >\n <slot />\n </Primitive>\n </CollectionItem>\n</template>\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AA4BA,IAAA,MAAM,KAAQ,GAAA,OAAA;AAEd,IAAA,MAAM,iBAAiB,wBAAyB,EAAA;AAChD,IAAM,MAAA,EAAE,UAAW,EAAA,GAAI,gBAAiB,EAAA;AACxC,IAAM,MAAA,EAAE,cAAe,EAAA,GAAI,aAAc,EAAA;AAEzC,IAAM,MAAA,SAAA,GAAY,IAAI,KAAK,CAAA;AAE3B,IAAA,eAAe,kBAAkB,KAAqB,EAAA;AACpD,MAAA,IAAI,KAAM,CAAA,gBAAA;AACR,QAAA;AACF,MAAI,IAAA,CAAC,aAAa,KAAK,CAAA;AACrB,QAAA;AAEF,MAAA,IAAI,MAAM,QAAU,EAAA;AAClB,QAAA,cAAA,CAAe,YAAY,KAAK,CAAA;AAAA,OAE7B,MAAA;AACH,QAAM,MAAA,gBAAA,GAAmB,cAAe,CAAA,WAAA,CAAY,KAAK,CAAA;AACzD,QAAA,IAAI,CAAC,gBAAkB,EAAA;AACrB,UAAA,MAAM,OAAO,KAAM,CAAA,aAAA;AACnB,UAAC,IAAsB,EAAA,KAAA,CAAM,EAAE,aAAA,EAAe,MAAM,CAAA;AAAA;AACtD;AACF;AAGF,IAAA,eAAe,mBAAmB,KAAqB,EAAA;AACrD,MAAA,MAAM,QAAS,EAAA;AACf,MAAA,IAAI,KAAM,CAAA,gBAAA;AACR,QAAA;AACF,MAAI,IAAA,CAAC,aAAa,KAAK,CAAA;AACrB,QAAA;AAEF,MAAA,cAAA,CAAe,YAAY,KAAK,CAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"MenuItemIndicator.cjs","sources":["../../src/Menu/MenuItemIndicator.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { PrimitiveProps } from '@/Primitive'\nimport type { Ref } from 'vue'\nimport type { CheckedState } from './utils'\nimport { createContext } from '@/shared'\n\ninterface MenuItemIndicatorContext {\n modelValue: Ref<CheckedState>\n}\n\nexport interface MenuItemIndicatorProps extends PrimitiveProps {\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\nexport const [injectMenuItemIndicatorContext, provideMenuItemIndicatorContext]\n = createContext<MenuItemIndicatorContext>(\n ['MenuCheckboxItem', 'MenuRadioItem'],\n 'MenuItemIndicatorContext',\n )\n</script>\n\n<script setup lang=\"ts\">\nimport { Presence } from '@/Presence'\nimport { Primitive } from '@/Primitive'\nimport { ref } from 'vue'\nimport { getCheckedState, isIndeterminate } from './utils'\n\nwithDefaults(defineProps<MenuItemIndicatorProps>(), {\n as: 'span',\n})\n\nconst indicatorContext = injectMenuItemIndicatorContext({\n modelValue: ref(false),\n})\n</script>\n\n<template>\n <Presence\n :present=\"\n forceMount\n || isIndeterminate(indicatorContext.modelValue.value)\n || indicatorContext.modelValue.value === true\n \"\n >\n <Primitive\n :as=\"as\"\n :as-child=\"asChild\"\n :data-state=\"getCheckedState(indicatorContext.modelValue.value)\"\n >\n <slot />\n </Primitive>\n </Presence>\n</template>\n"],"names":["createContext","ref"],"mappings":";;;;;;;;AAkBa,MAAA,CAAC,8BAAgC,EAAA,+BAA+B,CACzE,GAAAA,kCAAA;AAAA,EACA,CAAC,oBAAoB,eAAe,CAAA;AAAA,EACpC;AACF;;;;;;;;;AAaF,IAAA,MAAM,mBAAmB,8BAA+B,CAAA;AAAA,MACtD,UAAA,EAAYC,QAAI,KAAK;AAAA,KACtB,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"MenuItemIndicator.cjs","sources":["../../src/Menu/MenuItemIndicator.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { Ref } from 'vue'\nimport type { CheckedState } from './utils'\nimport type { PrimitiveProps } from '@/Primitive'\nimport { createContext } from '@/shared'\n\ninterface MenuItemIndicatorContext {\n modelValue: Ref<CheckedState>\n}\n\nexport interface MenuItemIndicatorProps extends PrimitiveProps {\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\nexport const [injectMenuItemIndicatorContext, provideMenuItemIndicatorContext]\n = createContext<MenuItemIndicatorContext>(\n ['MenuCheckboxItem', 'MenuRadioItem'],\n 'MenuItemIndicatorContext',\n )\n</script>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue'\nimport { Presence } from '@/Presence'\nimport { Primitive } from '@/Primitive'\nimport { getCheckedState, isIndeterminate } from './utils'\n\nwithDefaults(defineProps<MenuItemIndicatorProps>(), {\n as: 'span',\n})\n\nconst indicatorContext = injectMenuItemIndicatorContext({\n modelValue: ref(false),\n})\n</script>\n\n<template>\n <Presence\n :present=\"\n forceMount\n || isIndeterminate(indicatorContext.modelValue.value)\n || indicatorContext.modelValue.value === true\n \"\n >\n <Primitive\n :as=\"as\"\n :as-child=\"asChild\"\n :data-state=\"getCheckedState(indicatorContext.modelValue.value)\"\n >\n <slot />\n </Primitive>\n </Presence>\n</template>\n"],"names":["createContext","ref"],"mappings":";;;;;;;;AAkBa,MAAA,CAAC,8BAAgC,EAAA,+BAA+B,CACzE,GAAAA,kCAAA;AAAA,EACA,CAAC,oBAAoB,eAAe,CAAA;AAAA,EACpC;AACF;;;;;;;;;AAaF,IAAA,MAAM,mBAAmB,8BAA+B,CAAA;AAAA,MACtD,UAAA,EAAYC,QAAI,KAAK;AAAA,KACtB,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"MenuItemIndicator.js","sources":["../../src/Menu/MenuItemIndicator.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { PrimitiveProps } from '@/Primitive'\nimport type { Ref } from 'vue'\nimport type { CheckedState } from './utils'\nimport { createContext } from '@/shared'\n\ninterface MenuItemIndicatorContext {\n modelValue: Ref<CheckedState>\n}\n\nexport interface MenuItemIndicatorProps extends PrimitiveProps {\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\nexport const [injectMenuItemIndicatorContext, provideMenuItemIndicatorContext]\n = createContext<MenuItemIndicatorContext>(\n ['MenuCheckboxItem', 'MenuRadioItem'],\n 'MenuItemIndicatorContext',\n )\n</script>\n\n<script setup lang=\"ts\">\nimport { Presence } from '@/Presence'\nimport { Primitive } from '@/Primitive'\nimport { ref } from 'vue'\nimport { getCheckedState, isIndeterminate } from './utils'\n\nwithDefaults(defineProps<MenuItemIndicatorProps>(), {\n as: 'span',\n})\n\nconst indicatorContext = injectMenuItemIndicatorContext({\n modelValue: ref(false),\n})\n</script>\n\n<template>\n <Presence\n :present=\"\n forceMount\n || isIndeterminate(indicatorContext.modelValue.value)\n || indicatorContext.modelValue.value === true\n \"\n >\n <Primitive\n :as=\"as\"\n :as-child=\"asChild\"\n :data-state=\"getCheckedState(indicatorContext.modelValue.value)\"\n >\n <slot />\n </Primitive>\n </Presence>\n</template>\n"],"names":[],"mappings":";;;;;;AAkBa,MAAA,CAAC,8BAAgC,EAAA,+BAA+B,CACzE,GAAA,aAAA;AAAA,EACA,CAAC,oBAAoB,eAAe,CAAA;AAAA,EACpC;AACF;;;;;;;;;AAaF,IAAA,MAAM,mBAAmB,8BAA+B,CAAA;AAAA,MACtD,UAAA,EAAY,IAAI,KAAK;AAAA,KACtB,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"MenuItemIndicator.js","sources":["../../src/Menu/MenuItemIndicator.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { Ref } from 'vue'\nimport type { CheckedState } from './utils'\nimport type { PrimitiveProps } from '@/Primitive'\nimport { createContext } from '@/shared'\n\ninterface MenuItemIndicatorContext {\n modelValue: Ref<CheckedState>\n}\n\nexport interface MenuItemIndicatorProps extends PrimitiveProps {\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\nexport const [injectMenuItemIndicatorContext, provideMenuItemIndicatorContext]\n = createContext<MenuItemIndicatorContext>(\n ['MenuCheckboxItem', 'MenuRadioItem'],\n 'MenuItemIndicatorContext',\n )\n</script>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue'\nimport { Presence } from '@/Presence'\nimport { Primitive } from '@/Primitive'\nimport { getCheckedState, isIndeterminate } from './utils'\n\nwithDefaults(defineProps<MenuItemIndicatorProps>(), {\n as: 'span',\n})\n\nconst indicatorContext = injectMenuItemIndicatorContext({\n modelValue: ref(false),\n})\n</script>\n\n<template>\n <Presence\n :present=\"\n forceMount\n || isIndeterminate(indicatorContext.modelValue.value)\n || indicatorContext.modelValue.value === true\n \"\n >\n <Primitive\n :as=\"as\"\n :as-child=\"asChild\"\n :data-state=\"getCheckedState(indicatorContext.modelValue.value)\"\n >\n <slot />\n </Primitive>\n </Presence>\n</template>\n"],"names":[],"mappings":";;;;;;AAkBa,MAAA,CAAC,8BAAgC,EAAA,+BAA+B,CACzE,GAAA,aAAA;AAAA,EACA,CAAC,oBAAoB,eAAe,CAAA;AAAA,EACpC;AACF;;;;;;;;;AAaF,IAAA,MAAM,mBAAmB,8BAA+B,CAAA;AAAA,MACtD,UAAA,EAAY,IAAI,KAAK;AAAA,KACtB,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"MenuRadioGroup.cjs","sources":["../../src/Menu/MenuRadioGroup.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { Ref } from 'vue'\nimport type { MenuGroupProps } from './MenuGroup.vue'\nimport { createContext } from '@/shared'\n\ninterface MenuRadioGroupContext {\n modelValue: Ref<string>\n onValueChange: (payload: string) => void\n}\n\nexport interface MenuRadioGroupProps extends MenuGroupProps {\n /** The value of the selected item in the group. */\n modelValue?: string\n}\n\nexport type MenuRadioGroupEmits = {\n /** Event handler called when the value changes. */\n 'update:modelValue': [payload: string]\n}\n\nexport const [injectMenuRadioGroupContext, provideMenuRadioGroupContext]\n = createContext<MenuRadioGroupContext>('MenuRadioGroup')\n</script>\n\n<script setup lang=\"ts\">\nimport { useVModel } from '@vueuse/core'\nimport MenuGroup from './MenuGroup.vue'\n\nconst props = withDefaults(defineProps<MenuRadioGroupProps>(), {\n modelValue: '',\n})\nconst emits = defineEmits<MenuRadioGroupEmits>()\n\ndefineSlots<{\n default: (props: {\n /** Current input values */\n modelValue: typeof modelValue.value\n }) => any\n}>()\n\nconst modelValue = useVModel(props, 'modelValue', emits)\n\nprovideMenuRadioGroupContext({\n modelValue,\n onValueChange: (payload) => {\n modelValue.value = payload\n },\n})\n</script>\n\n<template>\n <MenuGroup v-bind=\"props\">\n <slot :model-value=\"modelValue\" />\n </MenuGroup>\n</template>\n"],"names":["createContext","useVModel"],"mappings":";;;;;;;AAoBO,MAAM,CAAC,2BAAA,EAA6B,4BAA4B,CAAA,GACnEA,mCAAqC,gBAAgB;;;;;;;;;;AAOzD,IAAA,MAAM,KAAQ,GAAA,OAAA;AAGd,IAAA,MAAM,KAAQ,GAAA,MAAA;AASd,IAAA,MAAM,UAAa,GAAAC,cAAA,CAAU,KAAO,EAAA,YAAA,EAAc,KAAK,CAAA;AAEvD,IAA6B,4BAAA,CAAA;AAAA,MAC3B,UAAA;AAAA,MACA,aAAA,EAAe,CAAC,OAAY,KAAA;AAC1B,QAAA,UAAA,CAAW,KAAQ,GAAA,OAAA;AAAA;AACrB,KACD,CAAA;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"MenuRadioGroup.cjs","sources":["../../src/Menu/MenuRadioGroup.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { Ref } from 'vue'\nimport type { MenuGroupProps } from './MenuGroup.vue'\nimport { createContext } from '@/shared'\n\ninterface MenuRadioGroupContext {\n modelValue: Ref<string>\n onValueChange: (payload: string) => void\n}\n\nexport interface MenuRadioGroupProps extends MenuGroupProps {\n /** The value of the selected item in the group. */\n modelValue?: string\n}\n\nexport type MenuRadioGroupEmits = {\n /** Event handler called when the value changes. */\n 'update:modelValue': [payload: string]\n}\n\nexport const [injectMenuRadioGroupContext, provideMenuRadioGroupContext]\n = createContext<MenuRadioGroupContext>('MenuRadioGroup')\n</script>\n\n<script setup lang=\"ts\">\nimport { useVModel } from '@vueuse/core'\nimport MenuGroup from './MenuGroup.vue'\n\nconst props = withDefaults(defineProps<MenuRadioGroupProps>(), {\n modelValue: '',\n})\nconst emits = defineEmits<MenuRadioGroupEmits>()\n\ndefineSlots<{\n default?: (props: {\n /** Current input values */\n modelValue: typeof modelValue.value\n }) => any\n}>()\n\nconst modelValue = useVModel(props, 'modelValue', emits)\n\nprovideMenuRadioGroupContext({\n modelValue,\n onValueChange: (payload) => {\n modelValue.value = payload\n },\n})\n</script>\n\n<template>\n <MenuGroup v-bind=\"props\">\n <slot :model-value=\"modelValue\" />\n </MenuGroup>\n</template>\n"],"names":["createContext","useVModel"],"mappings":";;;;;;;AAoBO,MAAM,CAAC,2BAAA,EAA6B,4BAA4B,CAAA,GACnEA,mCAAqC,gBAAgB;;;;;;;;;;AAOzD,IAAA,MAAM,KAAQ,GAAA,OAAA;AAGd,IAAA,MAAM,KAAQ,GAAA,MAAA;AASd,IAAA,MAAM,UAAa,GAAAC,cAAA,CAAU,KAAO,EAAA,YAAA,EAAc,KAAK,CAAA;AAEvD,IAA6B,4BAAA,CAAA;AAAA,MAC3B,UAAA;AAAA,MACA,aAAA,EAAe,CAAC,OAAY,KAAA;AAC1B,QAAA,UAAA,CAAW,KAAQ,GAAA,OAAA;AAAA;AACrB,KACD,CAAA;;;;;;;;;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"MenuRadioGroup.js","sources":["../../src/Menu/MenuRadioGroup.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { Ref } from 'vue'\nimport type { MenuGroupProps } from './MenuGroup.vue'\nimport { createContext } from '@/shared'\n\ninterface MenuRadioGroupContext {\n modelValue: Ref<string>\n onValueChange: (payload: string) => void\n}\n\nexport interface MenuRadioGroupProps extends MenuGroupProps {\n /** The value of the selected item in the group. */\n modelValue?: string\n}\n\nexport type MenuRadioGroupEmits = {\n /** Event handler called when the value changes. */\n 'update:modelValue': [payload: string]\n}\n\nexport const [injectMenuRadioGroupContext, provideMenuRadioGroupContext]\n = createContext<MenuRadioGroupContext>('MenuRadioGroup')\n</script>\n\n<script setup lang=\"ts\">\nimport { useVModel } from '@vueuse/core'\nimport MenuGroup from './MenuGroup.vue'\n\nconst props = withDefaults(defineProps<MenuRadioGroupProps>(), {\n modelValue: '',\n})\nconst emits = defineEmits<MenuRadioGroupEmits>()\n\ndefineSlots<{\n default: (props: {\n /** Current input values */\n modelValue: typeof modelValue.value\n }) => any\n}>()\n\nconst modelValue = useVModel(props, 'modelValue', emits)\n\nprovideMenuRadioGroupContext({\n modelValue,\n onValueChange: (payload) => {\n modelValue.value = payload\n },\n})\n</script>\n\n<template>\n <MenuGroup v-bind=\"props\">\n <slot :model-value=\"modelValue\" />\n </MenuGroup>\n</template>\n"],"names":[],"mappings":";;;;;AAoBO,MAAM,CAAC,2BAAA,EAA6B,4BAA4B,CAAA,GACnE,cAAqC,gBAAgB;;;;;;;;;;AAOzD,IAAA,MAAM,KAAQ,GAAA,OAAA;AAGd,IAAA,MAAM,KAAQ,GAAA,MAAA;AASd,IAAA,MAAM,UAAa,GAAA,SAAA,CAAU,KAAO,EAAA,YAAA,EAAc,KAAK,CAAA;AAEvD,IAA6B,4BAAA,CAAA;AAAA,MAC3B,UAAA;AAAA,MACA,aAAA,EAAe,CAAC,OAAY,KAAA;AAC1B,QAAA,UAAA,CAAW,KAAQ,GAAA,OAAA;AAAA;AACrB,KACD,CAAA;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"MenuRadioGroup.js","sources":["../../src/Menu/MenuRadioGroup.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { Ref } from 'vue'\nimport type { MenuGroupProps } from './MenuGroup.vue'\nimport { createContext } from '@/shared'\n\ninterface MenuRadioGroupContext {\n modelValue: Ref<string>\n onValueChange: (payload: string) => void\n}\n\nexport interface MenuRadioGroupProps extends MenuGroupProps {\n /** The value of the selected item in the group. */\n modelValue?: string\n}\n\nexport type MenuRadioGroupEmits = {\n /** Event handler called when the value changes. */\n 'update:modelValue': [payload: string]\n}\n\nexport const [injectMenuRadioGroupContext, provideMenuRadioGroupContext]\n = createContext<MenuRadioGroupContext>('MenuRadioGroup')\n</script>\n\n<script setup lang=\"ts\">\nimport { useVModel } from '@vueuse/core'\nimport MenuGroup from './MenuGroup.vue'\n\nconst props = withDefaults(defineProps<MenuRadioGroupProps>(), {\n modelValue: '',\n})\nconst emits = defineEmits<MenuRadioGroupEmits>()\n\ndefineSlots<{\n default?: (props: {\n /** Current input values */\n modelValue: typeof modelValue.value\n }) => any\n}>()\n\nconst modelValue = useVModel(props, 'modelValue', emits)\n\nprovideMenuRadioGroupContext({\n modelValue,\n onValueChange: (payload) => {\n modelValue.value = payload\n },\n})\n</script>\n\n<template>\n <MenuGroup v-bind=\"props\">\n <slot :model-value=\"modelValue\" />\n </MenuGroup>\n</template>\n"],"names":[],"mappings":";;;;;AAoBO,MAAM,CAAC,2BAAA,EAA6B,4BAA4B,CAAA,GACnE,cAAqC,gBAAgB;;;;;;;;;;AAOzD,IAAA,MAAM,KAAQ,GAAA,OAAA;AAGd,IAAA,MAAM,KAAQ,GAAA,MAAA;AASd,IAAA,MAAM,UAAa,GAAA,SAAA,CAAU,KAAO,EAAA,YAAA,EAAc,KAAK,CAAA;AAEvD,IAA6B,4BAAA,CAAA;AAAA,MAC3B,UAAA;AAAA,MACA,aAAA,EAAe,CAAC,OAAY,KAAA;AAC1B,QAAA,UAAA,CAAW,KAAQ,GAAA,OAAA;AAAA;AACrB,KACD,CAAA;;;;;;;;;;;;;;"}
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
2
 
3
3
  const vue = require('vue');
4
- const Popper_PopperRoot = require('../Popper/PopperRoot.cjs');
5
4
  const core = require('@vueuse/core');
5
+ const Popper_PopperRoot = require('../Popper/PopperRoot.cjs');
6
6
  const shared_useIsUsingKeyboard = require('../shared/useIsUsingKeyboard.cjs');
7
7
  const shared_createContext = require('../shared/createContext.cjs');
8
8
  const shared_useDirection = require('../shared/useDirection.cjs');
@@ -1 +1 @@
1
- {"version":3,"file":"MenuRoot.cjs","sources":["../../src/Menu/MenuRoot.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { Ref } from 'vue'\nimport type { Direction } from './utils'\nimport { createContext, useDirection } from '@/shared'\nimport { useIsUsingKeyboard } from '@/shared/useIsUsingKeyboard'\n\nexport interface MenuContext {\n open: Ref<boolean>\n onOpenChange: (open: boolean) => void\n content: Ref<HTMLElement | undefined>\n onContentChange: (content: HTMLElement | undefined) => void\n}\n\nexport interface MenuRootContext {\n onClose: () => void\n dir: Ref<Direction>\n isUsingKeyboardRef: Ref<boolean>\n modal: Ref<boolean>\n}\n\nexport interface MenuProps {\n /** The controlled open state of the menu. Can be used as `v-model:open`. */\n open?: boolean\n /**\n * The reading direction of the combobox when applicable.\n *\n * If omitted, inherits globally from `ConfigProvider` or assumes LTR (left-to-right) reading mode.\n */\n dir?: Direction\n /**\n * The modality of the dropdown menu.\n *\n * When set to `true`, interaction with outside elements will be disabled and only menu content will be visible to screen readers.\n */\n modal?: boolean\n}\n\nexport type MenuEmits = {\n 'update:open': [payload: boolean]\n}\n\nexport const [injectMenuContext, provideMenuContext]\n = createContext<MenuContext>(['MenuRoot', 'MenuSub'], 'MenuContext')\n\nexport const [injectMenuRootContext, provideMenuRootContext]\n = createContext<MenuRootContext>('MenuRoot')\n</script>\n\n<script setup lang=\"ts\">\nimport { PopperRoot } from '@/Popper'\nimport { useVModel } from '@vueuse/core'\nimport {\n ref,\n toRefs,\n} from 'vue'\n\nconst props = withDefaults(defineProps<MenuProps>(), {\n open: false,\n modal: true,\n})\nconst emits = defineEmits<MenuEmits>()\nconst { modal, dir: propDir } = toRefs(props)\nconst dir = useDirection(propDir)\n\nconst open = useVModel(props, 'open', emits)\n\nconst content = ref<HTMLElement>()\nconst isUsingKeyboardRef = useIsUsingKeyboard()\n\nprovideMenuContext({\n open,\n onOpenChange: (value) => {\n open.value = value\n },\n content,\n onContentChange: (element) => {\n content.value = element\n },\n})\n\nprovideMenuRootContext({\n onClose: () => {\n open.value = false\n },\n isUsingKeyboardRef,\n dir,\n modal,\n})\n</script>\n\n<template>\n <PopperRoot>\n <slot />\n </PopperRoot>\n</template>\n"],"names":["createContext","toRefs","useDirection","useVModel","ref","useIsUsingKeyboard"],"mappings":";;;;;;;;;AAyCa,MAAA,CAAC,mBAAmB,kBAAkB,CAAA,GAC/CA,mCAA2B,CAAC,UAAA,EAAY,SAAS,CAAA,EAAG,aAAa;AAE9D,MAAM,CAAC,qBAAA,EAAuB,sBAAsB,CAAA,GACvDA,mCAA+B,UAAU;;;;;;;;;;AAW7C,IAAA,MAAM,KAAQ,GAAA,OAAA;AAId,IAAA,MAAM,KAAQ,GAAA,MAAA;AACd,IAAA,MAAM,EAAE,KAAO,EAAA,GAAA,EAAK,OAAQ,EAAA,GAAIC,WAAO,KAAK,CAAA;AAC5C,IAAM,MAAA,GAAA,GAAMC,iCAAa,OAAO,CAAA;AAEhC,IAAA,MAAM,IAAO,GAAAC,cAAA,CAAU,KAAO,EAAA,MAAA,EAAQ,KAAK,CAAA;AAE3C,IAAA,MAAM,UAAUC,OAAiB,EAAA;AACjC,IAAA,MAAM,qBAAqBC,4CAAmB,EAAA;AAE9C,IAAmB,kBAAA,CAAA;AAAA,MACjB,IAAA;AAAA,MACA,YAAA,EAAc,CAAC,KAAU,KAAA;AACvB,QAAA,IAAA,CAAK,KAAQ,GAAA,KAAA;AAAA,OACf;AAAA,MACA,OAAA;AAAA,MACA,eAAA,EAAiB,CAAC,OAAY,KAAA;AAC5B,QAAA,OAAA,CAAQ,KAAQ,GAAA,OAAA;AAAA;AAClB,KACD,CAAA;AAED,IAAuB,sBAAA,CAAA;AAAA,MACrB,SAAS,MAAM;AACb,QAAA,IAAA,CAAK,KAAQ,GAAA,KAAA;AAAA,OACf;AAAA,MACA,kBAAA;AAAA,MACA,GAAA;AAAA,MACA;AAAA,KACD,CAAA;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"MenuRoot.cjs","sources":["../../src/Menu/MenuRoot.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { Ref } from 'vue'\nimport type { Direction } from './utils'\nimport { createContext, useDirection } from '@/shared'\nimport { useIsUsingKeyboard } from '@/shared/useIsUsingKeyboard'\n\nexport interface MenuContext {\n open: Ref<boolean>\n onOpenChange: (open: boolean) => void\n content: Ref<HTMLElement | undefined>\n onContentChange: (content: HTMLElement | undefined) => void\n}\n\nexport interface MenuRootContext {\n onClose: () => void\n dir: Ref<Direction>\n isUsingKeyboardRef: Ref<boolean>\n modal: Ref<boolean>\n}\n\nexport interface MenuProps {\n /** The controlled open state of the menu. Can be used as `v-model:open`. */\n open?: boolean\n /**\n * The reading direction of the combobox when applicable.\n *\n * If omitted, inherits globally from `ConfigProvider` or assumes LTR (left-to-right) reading mode.\n */\n dir?: Direction\n /**\n * The modality of the dropdown menu.\n *\n * When set to `true`, interaction with outside elements will be disabled and only menu content will be visible to screen readers.\n */\n modal?: boolean\n}\n\nexport type MenuEmits = {\n 'update:open': [payload: boolean]\n}\n\nexport const [injectMenuContext, provideMenuContext]\n = createContext<MenuContext>(['MenuRoot', 'MenuSub'], 'MenuContext')\n\nexport const [injectMenuRootContext, provideMenuRootContext]\n = createContext<MenuRootContext>('MenuRoot')\n</script>\n\n<script setup lang=\"ts\">\nimport { useVModel } from '@vueuse/core'\nimport {\n ref,\n toRefs,\n} from 'vue'\nimport { PopperRoot } from '@/Popper'\n\nconst props = withDefaults(defineProps<MenuProps>(), {\n open: false,\n modal: true,\n})\nconst emits = defineEmits<MenuEmits>()\nconst { modal, dir: propDir } = toRefs(props)\nconst dir = useDirection(propDir)\n\nconst open = useVModel(props, 'open', emits)\n\nconst content = ref<HTMLElement>()\nconst isUsingKeyboardRef = useIsUsingKeyboard()\n\nprovideMenuContext({\n open,\n onOpenChange: (value) => {\n open.value = value\n },\n content,\n onContentChange: (element) => {\n content.value = element\n },\n})\n\nprovideMenuRootContext({\n onClose: () => {\n open.value = false\n },\n isUsingKeyboardRef,\n dir,\n modal,\n})\n</script>\n\n<template>\n <PopperRoot>\n <slot />\n </PopperRoot>\n</template>\n"],"names":["createContext","toRefs","useDirection","useVModel","ref","useIsUsingKeyboard"],"mappings":";;;;;;;;;AAyCa,MAAA,CAAC,mBAAmB,kBAAkB,CAAA,GAC/CA,mCAA2B,CAAC,UAAA,EAAY,SAAS,CAAA,EAAG,aAAa;AAE9D,MAAM,CAAC,qBAAA,EAAuB,sBAAsB,CAAA,GACvDA,mCAA+B,UAAU;;;;;;;;;;AAW7C,IAAA,MAAM,KAAQ,GAAA,OAAA;AAId,IAAA,MAAM,KAAQ,GAAA,MAAA;AACd,IAAA,MAAM,EAAE,KAAO,EAAA,GAAA,EAAK,OAAQ,EAAA,GAAIC,WAAO,KAAK,CAAA;AAC5C,IAAM,MAAA,GAAA,GAAMC,iCAAa,OAAO,CAAA;AAEhC,IAAA,MAAM,IAAO,GAAAC,cAAA,CAAU,KAAO,EAAA,MAAA,EAAQ,KAAK,CAAA;AAE3C,IAAA,MAAM,UAAUC,OAAiB,EAAA;AACjC,IAAA,MAAM,qBAAqBC,4CAAmB,EAAA;AAE9C,IAAmB,kBAAA,CAAA;AAAA,MACjB,IAAA;AAAA,MACA,YAAA,EAAc,CAAC,KAAU,KAAA;AACvB,QAAA,IAAA,CAAK,KAAQ,GAAA,KAAA;AAAA,OACf;AAAA,MACA,OAAA;AAAA,MACA,eAAA,EAAiB,CAAC,OAAY,KAAA;AAC5B,QAAA,OAAA,CAAQ,KAAQ,GAAA,OAAA;AAAA;AAClB,KACD,CAAA;AAED,IAAuB,sBAAA,CAAA;AAAA,MACrB,SAAS,MAAM;AACb,QAAA,IAAA,CAAK,KAAQ,GAAA,KAAA;AAAA,OACf;AAAA,MACA,kBAAA;AAAA,MACA,GAAA;AAAA,MACA;AAAA,KACD,CAAA;;;;;;;;;;;;;;;;;"}
@@ -1,6 +1,6 @@
1
1
  import { defineComponent, toRefs, ref, createBlock, openBlock, unref, withCtx, renderSlot } from 'vue';
2
- import { _ as _sfc_main$1 } from '../Popper/PopperRoot.js';
3
2
  import { useVModel } from '@vueuse/core';
3
+ import { _ as _sfc_main$1 } from '../Popper/PopperRoot.js';
4
4
  import { u as useIsUsingKeyboard } from '../shared/useIsUsingKeyboard.js';
5
5
  import { c as createContext } from '../shared/createContext.js';
6
6
  import { u as useDirection } from '../shared/useDirection.js';
@@ -1 +1 @@
1
- {"version":3,"file":"MenuRoot.js","sources":["../../src/Menu/MenuRoot.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { Ref } from 'vue'\nimport type { Direction } from './utils'\nimport { createContext, useDirection } from '@/shared'\nimport { useIsUsingKeyboard } from '@/shared/useIsUsingKeyboard'\n\nexport interface MenuContext {\n open: Ref<boolean>\n onOpenChange: (open: boolean) => void\n content: Ref<HTMLElement | undefined>\n onContentChange: (content: HTMLElement | undefined) => void\n}\n\nexport interface MenuRootContext {\n onClose: () => void\n dir: Ref<Direction>\n isUsingKeyboardRef: Ref<boolean>\n modal: Ref<boolean>\n}\n\nexport interface MenuProps {\n /** The controlled open state of the menu. Can be used as `v-model:open`. */\n open?: boolean\n /**\n * The reading direction of the combobox when applicable.\n *\n * If omitted, inherits globally from `ConfigProvider` or assumes LTR (left-to-right) reading mode.\n */\n dir?: Direction\n /**\n * The modality of the dropdown menu.\n *\n * When set to `true`, interaction with outside elements will be disabled and only menu content will be visible to screen readers.\n */\n modal?: boolean\n}\n\nexport type MenuEmits = {\n 'update:open': [payload: boolean]\n}\n\nexport const [injectMenuContext, provideMenuContext]\n = createContext<MenuContext>(['MenuRoot', 'MenuSub'], 'MenuContext')\n\nexport const [injectMenuRootContext, provideMenuRootContext]\n = createContext<MenuRootContext>('MenuRoot')\n</script>\n\n<script setup lang=\"ts\">\nimport { PopperRoot } from '@/Popper'\nimport { useVModel } from '@vueuse/core'\nimport {\n ref,\n toRefs,\n} from 'vue'\n\nconst props = withDefaults(defineProps<MenuProps>(), {\n open: false,\n modal: true,\n})\nconst emits = defineEmits<MenuEmits>()\nconst { modal, dir: propDir } = toRefs(props)\nconst dir = useDirection(propDir)\n\nconst open = useVModel(props, 'open', emits)\n\nconst content = ref<HTMLElement>()\nconst isUsingKeyboardRef = useIsUsingKeyboard()\n\nprovideMenuContext({\n open,\n onOpenChange: (value) => {\n open.value = value\n },\n content,\n onContentChange: (element) => {\n content.value = element\n },\n})\n\nprovideMenuRootContext({\n onClose: () => {\n open.value = false\n },\n isUsingKeyboardRef,\n dir,\n modal,\n})\n</script>\n\n<template>\n <PopperRoot>\n <slot />\n </PopperRoot>\n</template>\n"],"names":[],"mappings":";;;;;;;AAyCa,MAAA,CAAC,mBAAmB,kBAAkB,CAAA,GAC/C,cAA2B,CAAC,UAAA,EAAY,SAAS,CAAA,EAAG,aAAa;AAE9D,MAAM,CAAC,qBAAA,EAAuB,sBAAsB,CAAA,GACvD,cAA+B,UAAU;;;;;;;;;;AAW7C,IAAA,MAAM,KAAQ,GAAA,OAAA;AAId,IAAA,MAAM,KAAQ,GAAA,MAAA;AACd,IAAA,MAAM,EAAE,KAAO,EAAA,GAAA,EAAK,OAAQ,EAAA,GAAI,OAAO,KAAK,CAAA;AAC5C,IAAM,MAAA,GAAA,GAAM,aAAa,OAAO,CAAA;AAEhC,IAAA,MAAM,IAAO,GAAA,SAAA,CAAU,KAAO,EAAA,MAAA,EAAQ,KAAK,CAAA;AAE3C,IAAA,MAAM,UAAU,GAAiB,EAAA;AACjC,IAAA,MAAM,qBAAqB,kBAAmB,EAAA;AAE9C,IAAmB,kBAAA,CAAA;AAAA,MACjB,IAAA;AAAA,MACA,YAAA,EAAc,CAAC,KAAU,KAAA;AACvB,QAAA,IAAA,CAAK,KAAQ,GAAA,KAAA;AAAA,OACf;AAAA,MACA,OAAA;AAAA,MACA,eAAA,EAAiB,CAAC,OAAY,KAAA;AAC5B,QAAA,OAAA,CAAQ,KAAQ,GAAA,OAAA;AAAA;AAClB,KACD,CAAA;AAED,IAAuB,sBAAA,CAAA;AAAA,MACrB,SAAS,MAAM;AACb,QAAA,IAAA,CAAK,KAAQ,GAAA,KAAA;AAAA,OACf;AAAA,MACA,kBAAA;AAAA,MACA,GAAA;AAAA,MACA;AAAA,KACD,CAAA;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"MenuRoot.js","sources":["../../src/Menu/MenuRoot.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { Ref } from 'vue'\nimport type { Direction } from './utils'\nimport { createContext, useDirection } from '@/shared'\nimport { useIsUsingKeyboard } from '@/shared/useIsUsingKeyboard'\n\nexport interface MenuContext {\n open: Ref<boolean>\n onOpenChange: (open: boolean) => void\n content: Ref<HTMLElement | undefined>\n onContentChange: (content: HTMLElement | undefined) => void\n}\n\nexport interface MenuRootContext {\n onClose: () => void\n dir: Ref<Direction>\n isUsingKeyboardRef: Ref<boolean>\n modal: Ref<boolean>\n}\n\nexport interface MenuProps {\n /** The controlled open state of the menu. Can be used as `v-model:open`. */\n open?: boolean\n /**\n * The reading direction of the combobox when applicable.\n *\n * If omitted, inherits globally from `ConfigProvider` or assumes LTR (left-to-right) reading mode.\n */\n dir?: Direction\n /**\n * The modality of the dropdown menu.\n *\n * When set to `true`, interaction with outside elements will be disabled and only menu content will be visible to screen readers.\n */\n modal?: boolean\n}\n\nexport type MenuEmits = {\n 'update:open': [payload: boolean]\n}\n\nexport const [injectMenuContext, provideMenuContext]\n = createContext<MenuContext>(['MenuRoot', 'MenuSub'], 'MenuContext')\n\nexport const [injectMenuRootContext, provideMenuRootContext]\n = createContext<MenuRootContext>('MenuRoot')\n</script>\n\n<script setup lang=\"ts\">\nimport { useVModel } from '@vueuse/core'\nimport {\n ref,\n toRefs,\n} from 'vue'\nimport { PopperRoot } from '@/Popper'\n\nconst props = withDefaults(defineProps<MenuProps>(), {\n open: false,\n modal: true,\n})\nconst emits = defineEmits<MenuEmits>()\nconst { modal, dir: propDir } = toRefs(props)\nconst dir = useDirection(propDir)\n\nconst open = useVModel(props, 'open', emits)\n\nconst content = ref<HTMLElement>()\nconst isUsingKeyboardRef = useIsUsingKeyboard()\n\nprovideMenuContext({\n open,\n onOpenChange: (value) => {\n open.value = value\n },\n content,\n onContentChange: (element) => {\n content.value = element\n },\n})\n\nprovideMenuRootContext({\n onClose: () => {\n open.value = false\n },\n isUsingKeyboardRef,\n dir,\n modal,\n})\n</script>\n\n<template>\n <PopperRoot>\n <slot />\n </PopperRoot>\n</template>\n"],"names":[],"mappings":";;;;;;;AAyCa,MAAA,CAAC,mBAAmB,kBAAkB,CAAA,GAC/C,cAA2B,CAAC,UAAA,EAAY,SAAS,CAAA,EAAG,aAAa;AAE9D,MAAM,CAAC,qBAAA,EAAuB,sBAAsB,CAAA,GACvD,cAA+B,UAAU;;;;;;;;;;AAW7C,IAAA,MAAM,KAAQ,GAAA,OAAA;AAId,IAAA,MAAM,KAAQ,GAAA,MAAA;AACd,IAAA,MAAM,EAAE,KAAO,EAAA,GAAA,EAAK,OAAQ,EAAA,GAAI,OAAO,KAAK,CAAA;AAC5C,IAAM,MAAA,GAAA,GAAM,aAAa,OAAO,CAAA;AAEhC,IAAA,MAAM,IAAO,GAAA,SAAA,CAAU,KAAO,EAAA,MAAA,EAAQ,KAAK,CAAA;AAE3C,IAAA,MAAM,UAAU,GAAiB,EAAA;AACjC,IAAA,MAAM,qBAAqB,kBAAmB,EAAA;AAE9C,IAAmB,kBAAA,CAAA;AAAA,MACjB,IAAA;AAAA,MACA,YAAA,EAAc,CAAC,KAAU,KAAA;AACvB,QAAA,IAAA,CAAK,KAAQ,GAAA,KAAA;AAAA,OACf;AAAA,MACA,OAAA;AAAA,MACA,eAAA,EAAiB,CAAC,OAAY,KAAA;AAC5B,QAAA,OAAA,CAAQ,KAAQ,GAAA,OAAA;AAAA;AAClB,KACD,CAAA;AAED,IAAuB,sBAAA,CAAA;AAAA,MACrB,SAAS,MAAM;AACb,QAAA,IAAA,CAAK,KAAQ,GAAA,KAAA;AAAA,OACf;AAAA,MACA,kBAAA;AAAA,MACA,GAAA;AAAA,MACA;AAAA,KACD,CAAA;;;;;;;;;;;;;;"}
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
2
 
3
3
  const vue = require('vue');
4
- const Popper_PopperRoot = require('../Popper/PopperRoot.cjs');
5
4
  const core = require('@vueuse/core');
5
+ const Popper_PopperRoot = require('../Popper/PopperRoot.cjs');
6
6
  const Menu_MenuRoot = require('./MenuRoot.cjs');
7
7
  const shared_createContext = require('../shared/createContext.cjs');
8
8
 
@@ -1 +1 @@
1
- {"version":3,"file":"MenuSub.cjs","sources":["../../src/Menu/MenuSub.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { Ref } from 'vue'\nimport type { MenuContext } from './MenuRoot.vue'\nimport { createContext } from '@/shared'\n\nexport interface MenuSubContext {\n contentId: string\n triggerId: string\n trigger: Ref<HTMLElement | undefined>\n onTriggerChange: (trigger: HTMLElement | undefined) => void\n parentMenuContext?: MenuContext\n}\n\nexport const [injectMenuSubContext, provideMenuSubContext]\n = createContext<MenuSubContext>('MenuSub')\n\nexport interface MenuSubProps {\n /** The controlled open state of the menu. Can be used as `v-model:open`. */\n open?: boolean\n}\n\nexport type MenuSubEmits = {\n /** Event handler called when the open state of the submenu changes. */\n 'update:open': [payload: boolean]\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { PopperRoot } from '@/Popper'\nimport { useVModel } from '@vueuse/core'\nimport {\n ref,\n watchEffect,\n} from 'vue'\nimport { injectMenuContext, provideMenuContext } from './MenuRoot.vue'\n\nconst props = withDefaults(defineProps<MenuSubProps>(), {\n open: undefined,\n})\nconst emits = defineEmits<MenuSubEmits>()\n\nconst open = useVModel(props, 'open', emits, {\n defaultValue: false,\n passive: (props.open === undefined) as false,\n}) as Ref<boolean>\n\nconst parentMenuContext = injectMenuContext()\nconst trigger = ref<HTMLElement>()\nconst content = ref<HTMLElement>()\n\n// Prevent the parent menu from reopening with open submenus.\nwatchEffect((cleanupFn) => {\n if (parentMenuContext?.open.value === false)\n open.value = false\n cleanupFn(() => (open.value = false))\n})\n\nprovideMenuContext({\n open,\n onOpenChange: (value) => {\n open.value = value\n },\n content,\n onContentChange: (element) => {\n content.value = element\n },\n})\n\nprovideMenuSubContext({\n triggerId: '',\n contentId: '',\n trigger,\n onTriggerChange: (element) => {\n trigger.value = element\n },\n})\n</script>\n\n<template>\n <PopperRoot>\n <slot />\n </PopperRoot>\n</template>\n"],"names":["createContext","useVModel","injectMenuContext","ref","watchEffect","provideMenuContext"],"mappings":";;;;;;;;AAaO,MAAM,CAAC,oBAAA,EAAsB,qBAAqB,CAAA,GACrDA,mCAA8B,SAAS;;;;;;;;AAsB3C,IAAA,MAAM,KAAQ,GAAA,OAAA;AAGd,IAAA,MAAM,KAAQ,GAAA,MAAA;AAEd,IAAA,MAAM,IAAO,GAAAC,cAAA,CAAU,KAAO,EAAA,MAAA,EAAQ,KAAO,EAAA;AAAA,MAC3C,YAAc,EAAA,KAAA;AAAA,MACd,OAAA,EAAU,MAAM,IAAS,KAAA;AAAA,KAC1B,CAAA;AAED,IAAA,MAAM,oBAAoBC,+BAAkB,EAAA;AAC5C,IAAA,MAAM,UAAUC,OAAiB,EAAA;AACjC,IAAA,MAAM,UAAUA,OAAiB,EAAA;AAGjC,IAAAC,eAAA,CAAY,CAAC,SAAc,KAAA;AACzB,MAAI,IAAA,iBAAA,EAAmB,KAAK,KAAU,KAAA,KAAA;AACpC,QAAA,IAAA,CAAK,KAAQ,GAAA,KAAA;AACf,MAAU,SAAA,CAAA,MAAO,IAAK,CAAA,KAAA,GAAQ,KAAM,CAAA;AAAA,KACrC,CAAA;AAED,IAAmBC,gCAAA,CAAA;AAAA,MACjB,IAAA;AAAA,MACA,YAAA,EAAc,CAAC,KAAU,KAAA;AACvB,QAAA,IAAA,CAAK,KAAQ,GAAA,KAAA;AAAA,OACf;AAAA,MACA,OAAA;AAAA,MACA,eAAA,EAAiB,CAAC,OAAY,KAAA;AAC5B,QAAA,OAAA,CAAQ,KAAQ,GAAA,OAAA;AAAA;AAClB,KACD,CAAA;AAED,IAAsB,qBAAA,CAAA;AAAA,MACpB,SAAW,EAAA,EAAA;AAAA,MACX,SAAW,EAAA,EAAA;AAAA,MACX,OAAA;AAAA,MACA,eAAA,EAAiB,CAAC,OAAY,KAAA;AAC5B,QAAA,OAAA,CAAQ,KAAQ,GAAA,OAAA;AAAA;AAClB,KACD,CAAA;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"MenuSub.cjs","sources":["../../src/Menu/MenuSub.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { Ref } from 'vue'\nimport type { MenuContext } from './MenuRoot.vue'\nimport { createContext } from '@/shared'\n\nexport interface MenuSubContext {\n contentId: string\n triggerId: string\n trigger: Ref<HTMLElement | undefined>\n onTriggerChange: (trigger: HTMLElement | undefined) => void\n parentMenuContext?: MenuContext\n}\n\nexport const [injectMenuSubContext, provideMenuSubContext]\n = createContext<MenuSubContext>('MenuSub')\n\nexport interface MenuSubProps {\n /** The controlled open state of the menu. Can be used as `v-model:open`. */\n open?: boolean\n}\n\nexport type MenuSubEmits = {\n /** Event handler called when the open state of the submenu changes. */\n 'update:open': [payload: boolean]\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { useVModel } from '@vueuse/core'\nimport {\n ref,\n watchEffect,\n} from 'vue'\nimport { PopperRoot } from '@/Popper'\nimport { injectMenuContext, provideMenuContext } from './MenuRoot.vue'\n\nconst props = withDefaults(defineProps<MenuSubProps>(), {\n open: undefined,\n})\nconst emits = defineEmits<MenuSubEmits>()\n\nconst open = useVModel(props, 'open', emits, {\n defaultValue: false,\n passive: (props.open === undefined) as false,\n}) as Ref<boolean>\n\nconst parentMenuContext = injectMenuContext()\nconst trigger = ref<HTMLElement>()\nconst content = ref<HTMLElement>()\n\n// Prevent the parent menu from reopening with open submenus.\nwatchEffect((cleanupFn) => {\n if (parentMenuContext?.open.value === false)\n open.value = false\n cleanupFn(() => (open.value = false))\n})\n\nprovideMenuContext({\n open,\n onOpenChange: (value) => {\n open.value = value\n },\n content,\n onContentChange: (element) => {\n content.value = element\n },\n})\n\nprovideMenuSubContext({\n triggerId: '',\n contentId: '',\n trigger,\n onTriggerChange: (element) => {\n trigger.value = element\n },\n})\n</script>\n\n<template>\n <PopperRoot>\n <slot />\n </PopperRoot>\n</template>\n"],"names":["createContext","useVModel","injectMenuContext","ref","watchEffect","provideMenuContext"],"mappings":";;;;;;;;AAaO,MAAM,CAAC,oBAAA,EAAsB,qBAAqB,CAAA,GACrDA,mCAA8B,SAAS;;;;;;;;AAsB3C,IAAA,MAAM,KAAQ,GAAA,OAAA;AAGd,IAAA,MAAM,KAAQ,GAAA,MAAA;AAEd,IAAA,MAAM,IAAO,GAAAC,cAAA,CAAU,KAAO,EAAA,MAAA,EAAQ,KAAO,EAAA;AAAA,MAC3C,YAAc,EAAA,KAAA;AAAA,MACd,OAAA,EAAU,MAAM,IAAS,KAAA;AAAA,KAC1B,CAAA;AAED,IAAA,MAAM,oBAAoBC,+BAAkB,EAAA;AAC5C,IAAA,MAAM,UAAUC,OAAiB,EAAA;AACjC,IAAA,MAAM,UAAUA,OAAiB,EAAA;AAGjC,IAAAC,eAAA,CAAY,CAAC,SAAc,KAAA;AACzB,MAAI,IAAA,iBAAA,EAAmB,KAAK,KAAU,KAAA,KAAA;AACpC,QAAA,IAAA,CAAK,KAAQ,GAAA,KAAA;AACf,MAAU,SAAA,CAAA,MAAO,IAAK,CAAA,KAAA,GAAQ,KAAM,CAAA;AAAA,KACrC,CAAA;AAED,IAAmBC,gCAAA,CAAA;AAAA,MACjB,IAAA;AAAA,MACA,YAAA,EAAc,CAAC,KAAU,KAAA;AACvB,QAAA,IAAA,CAAK,KAAQ,GAAA,KAAA;AAAA,OACf;AAAA,MACA,OAAA;AAAA,MACA,eAAA,EAAiB,CAAC,OAAY,KAAA;AAC5B,QAAA,OAAA,CAAQ,KAAQ,GAAA,OAAA;AAAA;AAClB,KACD,CAAA;AAED,IAAsB,qBAAA,CAAA;AAAA,MACpB,SAAW,EAAA,EAAA;AAAA,MACX,SAAW,EAAA,EAAA;AAAA,MACX,OAAA;AAAA,MACA,eAAA,EAAiB,CAAC,OAAY,KAAA;AAC5B,QAAA,OAAA,CAAQ,KAAQ,GAAA,OAAA;AAAA;AAClB,KACD,CAAA;;;;;;;;;;;;;;;"}
@@ -1,6 +1,6 @@
1
1
  import { defineComponent, ref, watchEffect, createBlock, openBlock, unref, withCtx, renderSlot } from 'vue';
2
- import { _ as _sfc_main$1 } from '../Popper/PopperRoot.js';
3
2
  import { useVModel } from '@vueuse/core';
3
+ import { _ as _sfc_main$1 } from '../Popper/PopperRoot.js';
4
4
  import { i as injectMenuContext, p as provideMenuContext } from './MenuRoot.js';
5
5
  import { c as createContext } from '../shared/createContext.js';
6
6
 
@@ -1 +1 @@
1
- {"version":3,"file":"MenuSub.js","sources":["../../src/Menu/MenuSub.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { Ref } from 'vue'\nimport type { MenuContext } from './MenuRoot.vue'\nimport { createContext } from '@/shared'\n\nexport interface MenuSubContext {\n contentId: string\n triggerId: string\n trigger: Ref<HTMLElement | undefined>\n onTriggerChange: (trigger: HTMLElement | undefined) => void\n parentMenuContext?: MenuContext\n}\n\nexport const [injectMenuSubContext, provideMenuSubContext]\n = createContext<MenuSubContext>('MenuSub')\n\nexport interface MenuSubProps {\n /** The controlled open state of the menu. Can be used as `v-model:open`. */\n open?: boolean\n}\n\nexport type MenuSubEmits = {\n /** Event handler called when the open state of the submenu changes. */\n 'update:open': [payload: boolean]\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { PopperRoot } from '@/Popper'\nimport { useVModel } from '@vueuse/core'\nimport {\n ref,\n watchEffect,\n} from 'vue'\nimport { injectMenuContext, provideMenuContext } from './MenuRoot.vue'\n\nconst props = withDefaults(defineProps<MenuSubProps>(), {\n open: undefined,\n})\nconst emits = defineEmits<MenuSubEmits>()\n\nconst open = useVModel(props, 'open', emits, {\n defaultValue: false,\n passive: (props.open === undefined) as false,\n}) as Ref<boolean>\n\nconst parentMenuContext = injectMenuContext()\nconst trigger = ref<HTMLElement>()\nconst content = ref<HTMLElement>()\n\n// Prevent the parent menu from reopening with open submenus.\nwatchEffect((cleanupFn) => {\n if (parentMenuContext?.open.value === false)\n open.value = false\n cleanupFn(() => (open.value = false))\n})\n\nprovideMenuContext({\n open,\n onOpenChange: (value) => {\n open.value = value\n },\n content,\n onContentChange: (element) => {\n content.value = element\n },\n})\n\nprovideMenuSubContext({\n triggerId: '',\n contentId: '',\n trigger,\n onTriggerChange: (element) => {\n trigger.value = element\n },\n})\n</script>\n\n<template>\n <PopperRoot>\n <slot />\n </PopperRoot>\n</template>\n"],"names":[],"mappings":";;;;;;AAaO,MAAM,CAAC,oBAAA,EAAsB,qBAAqB,CAAA,GACrD,cAA8B,SAAS;;;;;;;;AAsB3C,IAAA,MAAM,KAAQ,GAAA,OAAA;AAGd,IAAA,MAAM,KAAQ,GAAA,MAAA;AAEd,IAAA,MAAM,IAAO,GAAA,SAAA,CAAU,KAAO,EAAA,MAAA,EAAQ,KAAO,EAAA;AAAA,MAC3C,YAAc,EAAA,KAAA;AAAA,MACd,OAAA,EAAU,MAAM,IAAS,KAAA;AAAA,KAC1B,CAAA;AAED,IAAA,MAAM,oBAAoB,iBAAkB,EAAA;AAC5C,IAAA,MAAM,UAAU,GAAiB,EAAA;AACjC,IAAA,MAAM,UAAU,GAAiB,EAAA;AAGjC,IAAA,WAAA,CAAY,CAAC,SAAc,KAAA;AACzB,MAAI,IAAA,iBAAA,EAAmB,KAAK,KAAU,KAAA,KAAA;AACpC,QAAA,IAAA,CAAK,KAAQ,GAAA,KAAA;AACf,MAAU,SAAA,CAAA,MAAO,IAAK,CAAA,KAAA,GAAQ,KAAM,CAAA;AAAA,KACrC,CAAA;AAED,IAAmB,kBAAA,CAAA;AAAA,MACjB,IAAA;AAAA,MACA,YAAA,EAAc,CAAC,KAAU,KAAA;AACvB,QAAA,IAAA,CAAK,KAAQ,GAAA,KAAA;AAAA,OACf;AAAA,MACA,OAAA;AAAA,MACA,eAAA,EAAiB,CAAC,OAAY,KAAA;AAC5B,QAAA,OAAA,CAAQ,KAAQ,GAAA,OAAA;AAAA;AAClB,KACD,CAAA;AAED,IAAsB,qBAAA,CAAA;AAAA,MACpB,SAAW,EAAA,EAAA;AAAA,MACX,SAAW,EAAA,EAAA;AAAA,MACX,OAAA;AAAA,MACA,eAAA,EAAiB,CAAC,OAAY,KAAA;AAC5B,QAAA,OAAA,CAAQ,KAAQ,GAAA,OAAA;AAAA;AAClB,KACD,CAAA;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"MenuSub.js","sources":["../../src/Menu/MenuSub.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { Ref } from 'vue'\nimport type { MenuContext } from './MenuRoot.vue'\nimport { createContext } from '@/shared'\n\nexport interface MenuSubContext {\n contentId: string\n triggerId: string\n trigger: Ref<HTMLElement | undefined>\n onTriggerChange: (trigger: HTMLElement | undefined) => void\n parentMenuContext?: MenuContext\n}\n\nexport const [injectMenuSubContext, provideMenuSubContext]\n = createContext<MenuSubContext>('MenuSub')\n\nexport interface MenuSubProps {\n /** The controlled open state of the menu. Can be used as `v-model:open`. */\n open?: boolean\n}\n\nexport type MenuSubEmits = {\n /** Event handler called when the open state of the submenu changes. */\n 'update:open': [payload: boolean]\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { useVModel } from '@vueuse/core'\nimport {\n ref,\n watchEffect,\n} from 'vue'\nimport { PopperRoot } from '@/Popper'\nimport { injectMenuContext, provideMenuContext } from './MenuRoot.vue'\n\nconst props = withDefaults(defineProps<MenuSubProps>(), {\n open: undefined,\n})\nconst emits = defineEmits<MenuSubEmits>()\n\nconst open = useVModel(props, 'open', emits, {\n defaultValue: false,\n passive: (props.open === undefined) as false,\n}) as Ref<boolean>\n\nconst parentMenuContext = injectMenuContext()\nconst trigger = ref<HTMLElement>()\nconst content = ref<HTMLElement>()\n\n// Prevent the parent menu from reopening with open submenus.\nwatchEffect((cleanupFn) => {\n if (parentMenuContext?.open.value === false)\n open.value = false\n cleanupFn(() => (open.value = false))\n})\n\nprovideMenuContext({\n open,\n onOpenChange: (value) => {\n open.value = value\n },\n content,\n onContentChange: (element) => {\n content.value = element\n },\n})\n\nprovideMenuSubContext({\n triggerId: '',\n contentId: '',\n trigger,\n onTriggerChange: (element) => {\n trigger.value = element\n },\n})\n</script>\n\n<template>\n <PopperRoot>\n <slot />\n </PopperRoot>\n</template>\n"],"names":[],"mappings":";;;;;;AAaO,MAAM,CAAC,oBAAA,EAAsB,qBAAqB,CAAA,GACrD,cAA8B,SAAS;;;;;;;;AAsB3C,IAAA,MAAM,KAAQ,GAAA,OAAA;AAGd,IAAA,MAAM,KAAQ,GAAA,MAAA;AAEd,IAAA,MAAM,IAAO,GAAA,SAAA,CAAU,KAAO,EAAA,MAAA,EAAQ,KAAO,EAAA;AAAA,MAC3C,YAAc,EAAA,KAAA;AAAA,MACd,OAAA,EAAU,MAAM,IAAS,KAAA;AAAA,KAC1B,CAAA;AAED,IAAA,MAAM,oBAAoB,iBAAkB,EAAA;AAC5C,IAAA,MAAM,UAAU,GAAiB,EAAA;AACjC,IAAA,MAAM,UAAU,GAAiB,EAAA;AAGjC,IAAA,WAAA,CAAY,CAAC,SAAc,KAAA;AACzB,MAAI,IAAA,iBAAA,EAAmB,KAAK,KAAU,KAAA,KAAA;AACpC,QAAA,IAAA,CAAK,KAAQ,GAAA,KAAA;AACf,MAAU,SAAA,CAAA,MAAO,IAAK,CAAA,KAAA,GAAQ,KAAM,CAAA;AAAA,KACrC,CAAA;AAED,IAAmB,kBAAA,CAAA;AAAA,MACjB,IAAA;AAAA,MACA,YAAA,EAAc,CAAC,KAAU,KAAA;AACvB,QAAA,IAAA,CAAK,KAAQ,GAAA,KAAA;AAAA,OACf;AAAA,MACA,OAAA;AAAA,MACA,eAAA,EAAiB,CAAC,OAAY,KAAA;AAC5B,QAAA,OAAA,CAAQ,KAAQ,GAAA,OAAA;AAAA;AAClB,KACD,CAAA;AAED,IAAsB,qBAAA,CAAA;AAAA,MACpB,SAAW,EAAA,EAAA;AAAA,MACX,SAAW,EAAA,EAAA;AAAA,MACX,OAAA;AAAA,MACA,eAAA,EAAiB,CAAC,OAAY,KAAA;AAC5B,QAAA,OAAA,CAAQ,KAAQ,GAAA,OAAA;AAAA;AAClB,KACD,CAAA;;;;;;;;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"MenuSubTrigger.cjs","sources":["../../src/Menu/MenuSubTrigger.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { MenuItemImplProps } from './MenuItemImpl.vue'\nimport type { Side } from './utils'\n\nexport interface MenuSubTriggerProps extends MenuItemImplProps {}\n</script>\n\n<script setup lang=\"ts\">\nimport type { ComponentPublicInstance } from 'vue'\nimport { useId } from '@/shared'\nimport { nextTick, onUnmounted, ref } from 'vue'\nimport MenuAnchor from './MenuAnchor.vue'\nimport { injectMenuContentContext } from './MenuContentImpl.vue'\nimport MenuItemImpl from './MenuItemImpl.vue'\nimport { injectMenuContext, injectMenuRootContext } from './MenuRoot.vue'\nimport { injectMenuSubContext } from './MenuSub.vue'\nimport { getOpenState, isMouseEvent, SUB_OPEN_KEYS } from './utils'\n\nconst props = defineProps<MenuSubTriggerProps>()\n\nconst menuContext = injectMenuContext()\nconst rootContext = injectMenuRootContext()\nconst subContext = injectMenuSubContext()\nconst contentContext = injectMenuContentContext()\n\nconst openTimerRef = ref<number | null>(null)\n\nsubContext.triggerId ||= useId(undefined, 'reka-menu-sub-trigger')\n\nfunction clearOpenTimer() {\n if (openTimerRef.value)\n window.clearTimeout(openTimerRef.value)\n openTimerRef.value = null\n}\n\nonUnmounted(() => {\n clearOpenTimer()\n})\n\nfunction handlePointerMove(event: PointerEvent) {\n if (!isMouseEvent(event))\n return\n const defaultPrevented = contentContext.onItemEnter(event)\n if (defaultPrevented)\n return\n\n if (!props.disabled && !menuContext.open.value && !openTimerRef.value) {\n contentContext.onPointerGraceIntentChange(null)\n openTimerRef.value = window.setTimeout(() => {\n menuContext.onOpenChange(true)\n clearOpenTimer()\n }, 100)\n }\n}\n\nasync function handlePointerLeave(event: PointerEvent) {\n if (!isMouseEvent(event))\n return\n clearOpenTimer()\n\n const contentRect = menuContext.content.value?.getBoundingClientRect()\n if (contentRect?.width) {\n // TODO (Radix UI): make sure to update this when we change positioning logic\n // https://github.com/radix-ui/primitives/blob/main/packages/react/menu/src/Menu.tsx#L1088\n const side = menuContext.content.value?.dataset.side as Side\n\n const rightSide = side === 'right'\n const bleed = rightSide ? -5 : +5\n const contentNearEdge = contentRect[rightSide ? 'left' : 'right']\n const contentFarEdge = contentRect[rightSide ? 'right' : 'left']\n\n contentContext.onPointerGraceIntentChange({\n area: [\n // Apply a bleed on clientX to ensure that our exit point is\n // consistently within polygon bounds\n { x: event.clientX + bleed, y: event.clientY },\n { x: contentNearEdge, y: contentRect.top },\n { x: contentFarEdge, y: contentRect.top },\n { x: contentFarEdge, y: contentRect.bottom },\n { x: contentNearEdge, y: contentRect.bottom },\n ],\n side,\n })\n\n window.clearTimeout(contentContext.pointerGraceTimerRef.value)\n contentContext.pointerGraceTimerRef.value = window.setTimeout(\n () => contentContext.onPointerGraceIntentChange(null),\n 300,\n )\n }\n else {\n const defaultPrevented = contentContext.onTriggerLeave(event)\n if (defaultPrevented)\n return\n\n // There's 100ms where the user may leave an item before the submenu was opened.\n contentContext.onPointerGraceIntentChange(null)\n }\n}\n\nasync function handleKeyDown(event: KeyboardEvent) {\n const isTypingAhead = contentContext.searchRef.value !== ''\n if (props.disabled || (isTypingAhead && event.key === ' '))\n return\n if (SUB_OPEN_KEYS[rootContext.dir.value].includes(event.key)) {\n menuContext.onOpenChange(true)\n\n await nextTick()\n // The trigger may hold focus if opened via pointer interaction\n // so we ensure content is given focus again when switching to keyboard.\n menuContext.content.value?.focus()\n // prevent window from scrolling\n event.preventDefault()\n }\n}\n</script>\n\n<template>\n <MenuAnchor as-child>\n <MenuItemImpl\n v-bind=\"props\"\n :id=\"subContext.triggerId\"\n :ref=\"\n (vnode: ComponentPublicInstance) => {\n // @ts-ignore\n subContext?.onTriggerChange(vnode?.$el);\n return undefined\n }\n \"\n aria-haspopup=\"menu\"\n :aria-expanded=\"menuContext.open.value\"\n :aria-controls=\"subContext.contentId\"\n :data-state=\"getOpenState(menuContext.open.value)\"\n @click=\"\n async (event) => {\n if (props.disabled || event.defaultPrevented) return;\n /**\n * We manually focus because iOS Safari doesn't always focus on click (e.g. buttons)\n * and we rely heavily on `onFocusOutside` for submenus to close when switching\n * between separate submenus.\n */\n event.currentTarget.focus();\n if (!menuContext.open.value) menuContext.onOpenChange(true);\n }\n \"\n @pointermove=\"handlePointerMove\"\n @pointerleave=\"handlePointerLeave\"\n @keydown=\"handleKeyDown\"\n >\n <slot />\n </MenuItemImpl>\n </MenuAnchor>\n</template>\n"],"names":["injectMenuContext","injectMenuRootContext","injectMenuSubContext","injectMenuContentContext","ref","useId","onUnmounted","isMouseEvent","SUB_OPEN_KEYS","nextTick"],"mappings":";;;;;;;;;;;;;;;;;;;;AAkBA,IAAA,MAAM,KAAQ,GAAA,OAAA;AAEd,IAAA,MAAM,cAAcA,+BAAkB,EAAA;AACtC,IAAA,MAAM,cAAcC,mCAAsB,EAAA;AAC1C,IAAA,MAAM,aAAaC,iCAAqB,EAAA;AACxC,IAAA,MAAM,iBAAiBC,6CAAyB,EAAA;AAEhD,IAAM,MAAA,YAAA,GAAeC,QAAmB,IAAI,CAAA;AAE5C,IAAW,UAAA,CAAA,SAAA,KAAcC,kBAAM,CAAA,MAAA,EAAW,uBAAuB,CAAA;AAEjE,IAAA,SAAS,cAAiB,GAAA;AACxB,MAAA,IAAI,YAAa,CAAA,KAAA;AACf,QAAO,MAAA,CAAA,YAAA,CAAa,aAAa,KAAK,CAAA;AACxC,MAAA,YAAA,CAAa,KAAQ,GAAA,IAAA;AAAA;AAGvB,IAAAC,eAAA,CAAY,MAAM;AAChB,MAAe,cAAA,EAAA;AAAA,KAChB,CAAA;AAED,IAAA,SAAS,kBAAkB,KAAqB,EAAA;AAC9C,MAAI,IAAA,CAACC,wBAAa,KAAK,CAAA;AACrB,QAAA;AACF,MAAM,MAAA,gBAAA,GAAmB,cAAe,CAAA,WAAA,CAAY,KAAK,CAAA;AACzD,MAAI,IAAA,gBAAA;AACF,QAAA;AAEF,MAAI,IAAA,CAAC,MAAM,QAAY,IAAA,CAAC,YAAY,IAAK,CAAA,KAAA,IAAS,CAAC,YAAA,CAAa,KAAO,EAAA;AACrE,QAAA,cAAA,CAAe,2BAA2B,IAAI,CAAA;AAC9C,QAAa,YAAA,CAAA,KAAA,GAAQ,MAAO,CAAA,UAAA,CAAW,MAAM;AAC3C,UAAA,WAAA,CAAY,aAAa,IAAI,CAAA;AAC7B,UAAe,cAAA,EAAA;AAAA,WACd,GAAG,CAAA;AAAA;AACR;AAGF,IAAA,eAAe,mBAAmB,KAAqB,EAAA;AACrD,MAAI,IAAA,CAACA,wBAAa,KAAK,CAAA;AACrB,QAAA;AACF,MAAe,cAAA,EAAA;AAEf,MAAA,MAAM,WAAc,GAAA,WAAA,CAAY,OAAQ,CAAA,KAAA,EAAO,qBAAsB,EAAA;AACrE,MAAA,IAAI,aAAa,KAAO,EAAA;AAGtB,QAAA,MAAM,IAAO,GAAA,WAAA,CAAY,OAAQ,CAAA,KAAA,EAAO,OAAQ,CAAA,IAAA;AAEhD,QAAA,MAAM,YAAY,IAAS,KAAA,OAAA;AAC3B,QAAM,MAAA,KAAA,GAAQ,YAAY,EAAK,GAAA,CAAA;AAC/B,QAAA,MAAM,eAAkB,GAAA,WAAA,CAAY,SAAY,GAAA,MAAA,GAAS,OAAO,CAAA;AAChE,QAAA,MAAM,cAAiB,GAAA,WAAA,CAAY,SAAY,GAAA,OAAA,GAAU,MAAM,CAAA;AAE/D,QAAA,cAAA,CAAe,0BAA2B,CAAA;AAAA,UACxC,IAAM,EAAA;AAAA;AAAA;AAAA,YAGJ,EAAE,CAAG,EAAA,KAAA,CAAM,UAAU,KAAO,EAAA,CAAA,EAAG,MAAM,OAAQ,EAAA;AAAA,YAC7C,EAAE,CAAA,EAAG,eAAiB,EAAA,CAAA,EAAG,YAAY,GAAI,EAAA;AAAA,YACzC,EAAE,CAAA,EAAG,cAAgB,EAAA,CAAA,EAAG,YAAY,GAAI,EAAA;AAAA,YACxC,EAAE,CAAA,EAAG,cAAgB,EAAA,CAAA,EAAG,YAAY,MAAO,EAAA;AAAA,YAC3C,EAAE,CAAA,EAAG,eAAiB,EAAA,CAAA,EAAG,YAAY,MAAO;AAAA,WAC9C;AAAA,UACA;AAAA,SACD,CAAA;AAED,QAAO,MAAA,CAAA,YAAA,CAAa,cAAe,CAAA,oBAAA,CAAqB,KAAK,CAAA;AAC7D,QAAe,cAAA,CAAA,oBAAA,CAAqB,QAAQ,MAAO,CAAA,UAAA;AAAA,UACjD,MAAM,cAAe,CAAA,0BAAA,CAA2B,IAAI,CAAA;AAAA,UACpD;AAAA,SACF;AAAA,OAEG,MAAA;AACH,QAAM,MAAA,gBAAA,GAAmB,cAAe,CAAA,cAAA,CAAe,KAAK,CAAA;AAC5D,QAAI,IAAA,gBAAA;AACF,UAAA;AAGF,QAAA,cAAA,CAAe,2BAA2B,IAAI,CAAA;AAAA;AAChD;AAGF,IAAA,eAAe,cAAc,KAAsB,EAAA;AACjD,MAAM,MAAA,aAAA,GAAgB,cAAe,CAAA,SAAA,CAAU,KAAU,KAAA,EAAA;AACzD,MAAA,IAAI,KAAM,CAAA,QAAA,IAAa,aAAiB,IAAA,KAAA,CAAM,GAAQ,KAAA,GAAA;AACpD,QAAA;AACF,MAAI,IAAAC,wBAAA,CAAc,YAAY,GAAI,CAAA,KAAK,EAAE,QAAS,CAAA,KAAA,CAAM,GAAG,CAAG,EAAA;AAC5D,QAAA,WAAA,CAAY,aAAa,IAAI,CAAA;AAE7B,QAAA,MAAMC,YAAS,EAAA;AAGf,QAAY,WAAA,CAAA,OAAA,CAAQ,OAAO,KAAM,EAAA;AAEjC,QAAA,KAAA,CAAM,cAAe,EAAA;AAAA;AACvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"MenuSubTrigger.cjs","sources":["../../src/Menu/MenuSubTrigger.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { MenuItemImplProps } from './MenuItemImpl.vue'\nimport type { Side } from './utils'\n\nexport interface MenuSubTriggerProps extends MenuItemImplProps {}\n</script>\n\n<script setup lang=\"ts\">\nimport type { ComponentPublicInstance } from 'vue'\nimport { nextTick, onUnmounted, ref } from 'vue'\nimport { useId } from '@/shared'\nimport MenuAnchor from './MenuAnchor.vue'\nimport { injectMenuContentContext } from './MenuContentImpl.vue'\nimport MenuItemImpl from './MenuItemImpl.vue'\nimport { injectMenuContext, injectMenuRootContext } from './MenuRoot.vue'\nimport { injectMenuSubContext } from './MenuSub.vue'\nimport { getOpenState, isMouseEvent, SUB_OPEN_KEYS } from './utils'\n\nconst props = defineProps<MenuSubTriggerProps>()\n\nconst menuContext = injectMenuContext()\nconst rootContext = injectMenuRootContext()\nconst subContext = injectMenuSubContext()\nconst contentContext = injectMenuContentContext()\n\nconst openTimerRef = ref<number | null>(null)\n\nsubContext.triggerId ||= useId(undefined, 'reka-menu-sub-trigger')\n\nfunction clearOpenTimer() {\n if (openTimerRef.value)\n window.clearTimeout(openTimerRef.value)\n openTimerRef.value = null\n}\n\nonUnmounted(() => {\n clearOpenTimer()\n})\n\nfunction handlePointerMove(event: PointerEvent) {\n if (!isMouseEvent(event))\n return\n const defaultPrevented = contentContext.onItemEnter(event)\n if (defaultPrevented)\n return\n\n if (!props.disabled && !menuContext.open.value && !openTimerRef.value) {\n contentContext.onPointerGraceIntentChange(null)\n openTimerRef.value = window.setTimeout(() => {\n menuContext.onOpenChange(true)\n clearOpenTimer()\n }, 100)\n }\n}\n\nasync function handlePointerLeave(event: PointerEvent) {\n if (!isMouseEvent(event))\n return\n clearOpenTimer()\n\n const contentRect = menuContext.content.value?.getBoundingClientRect()\n if (contentRect?.width) {\n // TODO (Radix UI): make sure to update this when we change positioning logic\n // https://github.com/radix-ui/primitives/blob/main/packages/react/menu/src/Menu.tsx#L1088\n const side = menuContext.content.value?.dataset.side as Side\n\n const rightSide = side === 'right'\n const bleed = rightSide ? -5 : +5\n const contentNearEdge = contentRect[rightSide ? 'left' : 'right']\n const contentFarEdge = contentRect[rightSide ? 'right' : 'left']\n\n contentContext.onPointerGraceIntentChange({\n area: [\n // Apply a bleed on clientX to ensure that our exit point is\n // consistently within polygon bounds\n { x: event.clientX + bleed, y: event.clientY },\n { x: contentNearEdge, y: contentRect.top },\n { x: contentFarEdge, y: contentRect.top },\n { x: contentFarEdge, y: contentRect.bottom },\n { x: contentNearEdge, y: contentRect.bottom },\n ],\n side,\n })\n\n window.clearTimeout(contentContext.pointerGraceTimerRef.value)\n contentContext.pointerGraceTimerRef.value = window.setTimeout(\n () => contentContext.onPointerGraceIntentChange(null),\n 300,\n )\n }\n else {\n const defaultPrevented = contentContext.onTriggerLeave(event)\n if (defaultPrevented)\n return\n\n // There's 100ms where the user may leave an item before the submenu was opened.\n contentContext.onPointerGraceIntentChange(null)\n }\n}\n\nasync function handleKeyDown(event: KeyboardEvent) {\n const isTypingAhead = contentContext.searchRef.value !== ''\n if (props.disabled || (isTypingAhead && event.key === ' '))\n return\n if (SUB_OPEN_KEYS[rootContext.dir.value].includes(event.key)) {\n menuContext.onOpenChange(true)\n\n await nextTick()\n // The trigger may hold focus if opened via pointer interaction\n // so we ensure content is given focus again when switching to keyboard.\n menuContext.content.value?.focus()\n // prevent window from scrolling\n event.preventDefault()\n }\n}\n</script>\n\n<template>\n <MenuAnchor as-child>\n <MenuItemImpl\n v-bind=\"props\"\n :id=\"subContext.triggerId\"\n :ref=\"\n (vnode: ComponentPublicInstance) => {\n // @ts-ignore\n subContext?.onTriggerChange(vnode?.$el);\n return undefined\n }\n \"\n aria-haspopup=\"menu\"\n :aria-expanded=\"menuContext.open.value\"\n :aria-controls=\"subContext.contentId\"\n :data-state=\"getOpenState(menuContext.open.value)\"\n @click=\"\n async (event) => {\n if (props.disabled || event.defaultPrevented) return;\n /**\n * We manually focus because iOS Safari doesn't always focus on click (e.g. buttons)\n * and we rely heavily on `onFocusOutside` for submenus to close when switching\n * between separate submenus.\n */\n event.currentTarget.focus();\n if (!menuContext.open.value) menuContext.onOpenChange(true);\n }\n \"\n @pointermove=\"handlePointerMove\"\n @pointerleave=\"handlePointerLeave\"\n @keydown=\"handleKeyDown\"\n >\n <slot />\n </MenuItemImpl>\n </MenuAnchor>\n</template>\n"],"names":["injectMenuContext","injectMenuRootContext","injectMenuSubContext","injectMenuContentContext","ref","useId","onUnmounted","isMouseEvent","SUB_OPEN_KEYS","nextTick"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"MenuSubTrigger.js","sources":["../../src/Menu/MenuSubTrigger.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { MenuItemImplProps } from './MenuItemImpl.vue'\nimport type { Side } from './utils'\n\nexport interface MenuSubTriggerProps extends MenuItemImplProps {}\n</script>\n\n<script setup lang=\"ts\">\nimport type { ComponentPublicInstance } from 'vue'\nimport { useId } from '@/shared'\nimport { nextTick, onUnmounted, ref } from 'vue'\nimport MenuAnchor from './MenuAnchor.vue'\nimport { injectMenuContentContext } from './MenuContentImpl.vue'\nimport MenuItemImpl from './MenuItemImpl.vue'\nimport { injectMenuContext, injectMenuRootContext } from './MenuRoot.vue'\nimport { injectMenuSubContext } from './MenuSub.vue'\nimport { getOpenState, isMouseEvent, SUB_OPEN_KEYS } from './utils'\n\nconst props = defineProps<MenuSubTriggerProps>()\n\nconst menuContext = injectMenuContext()\nconst rootContext = injectMenuRootContext()\nconst subContext = injectMenuSubContext()\nconst contentContext = injectMenuContentContext()\n\nconst openTimerRef = ref<number | null>(null)\n\nsubContext.triggerId ||= useId(undefined, 'reka-menu-sub-trigger')\n\nfunction clearOpenTimer() {\n if (openTimerRef.value)\n window.clearTimeout(openTimerRef.value)\n openTimerRef.value = null\n}\n\nonUnmounted(() => {\n clearOpenTimer()\n})\n\nfunction handlePointerMove(event: PointerEvent) {\n if (!isMouseEvent(event))\n return\n const defaultPrevented = contentContext.onItemEnter(event)\n if (defaultPrevented)\n return\n\n if (!props.disabled && !menuContext.open.value && !openTimerRef.value) {\n contentContext.onPointerGraceIntentChange(null)\n openTimerRef.value = window.setTimeout(() => {\n menuContext.onOpenChange(true)\n clearOpenTimer()\n }, 100)\n }\n}\n\nasync function handlePointerLeave(event: PointerEvent) {\n if (!isMouseEvent(event))\n return\n clearOpenTimer()\n\n const contentRect = menuContext.content.value?.getBoundingClientRect()\n if (contentRect?.width) {\n // TODO (Radix UI): make sure to update this when we change positioning logic\n // https://github.com/radix-ui/primitives/blob/main/packages/react/menu/src/Menu.tsx#L1088\n const side = menuContext.content.value?.dataset.side as Side\n\n const rightSide = side === 'right'\n const bleed = rightSide ? -5 : +5\n const contentNearEdge = contentRect[rightSide ? 'left' : 'right']\n const contentFarEdge = contentRect[rightSide ? 'right' : 'left']\n\n contentContext.onPointerGraceIntentChange({\n area: [\n // Apply a bleed on clientX to ensure that our exit point is\n // consistently within polygon bounds\n { x: event.clientX + bleed, y: event.clientY },\n { x: contentNearEdge, y: contentRect.top },\n { x: contentFarEdge, y: contentRect.top },\n { x: contentFarEdge, y: contentRect.bottom },\n { x: contentNearEdge, y: contentRect.bottom },\n ],\n side,\n })\n\n window.clearTimeout(contentContext.pointerGraceTimerRef.value)\n contentContext.pointerGraceTimerRef.value = window.setTimeout(\n () => contentContext.onPointerGraceIntentChange(null),\n 300,\n )\n }\n else {\n const defaultPrevented = contentContext.onTriggerLeave(event)\n if (defaultPrevented)\n return\n\n // There's 100ms where the user may leave an item before the submenu was opened.\n contentContext.onPointerGraceIntentChange(null)\n }\n}\n\nasync function handleKeyDown(event: KeyboardEvent) {\n const isTypingAhead = contentContext.searchRef.value !== ''\n if (props.disabled || (isTypingAhead && event.key === ' '))\n return\n if (SUB_OPEN_KEYS[rootContext.dir.value].includes(event.key)) {\n menuContext.onOpenChange(true)\n\n await nextTick()\n // The trigger may hold focus if opened via pointer interaction\n // so we ensure content is given focus again when switching to keyboard.\n menuContext.content.value?.focus()\n // prevent window from scrolling\n event.preventDefault()\n }\n}\n</script>\n\n<template>\n <MenuAnchor as-child>\n <MenuItemImpl\n v-bind=\"props\"\n :id=\"subContext.triggerId\"\n :ref=\"\n (vnode: ComponentPublicInstance) => {\n // @ts-ignore\n subContext?.onTriggerChange(vnode?.$el);\n return undefined\n }\n \"\n aria-haspopup=\"menu\"\n :aria-expanded=\"menuContext.open.value\"\n :aria-controls=\"subContext.contentId\"\n :data-state=\"getOpenState(menuContext.open.value)\"\n @click=\"\n async (event) => {\n if (props.disabled || event.defaultPrevented) return;\n /**\n * We manually focus because iOS Safari doesn't always focus on click (e.g. buttons)\n * and we rely heavily on `onFocusOutside` for submenus to close when switching\n * between separate submenus.\n */\n event.currentTarget.focus();\n if (!menuContext.open.value) menuContext.onOpenChange(true);\n }\n \"\n @pointermove=\"handlePointerMove\"\n @pointerleave=\"handlePointerLeave\"\n @keydown=\"handleKeyDown\"\n >\n <slot />\n </MenuItemImpl>\n </MenuAnchor>\n</template>\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MenuSubTrigger.js","sources":["../../src/Menu/MenuSubTrigger.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { MenuItemImplProps } from './MenuItemImpl.vue'\nimport type { Side } from './utils'\n\nexport interface MenuSubTriggerProps extends MenuItemImplProps {}\n</script>\n\n<script setup lang=\"ts\">\nimport type { ComponentPublicInstance } from 'vue'\nimport { nextTick, onUnmounted, ref } from 'vue'\nimport { useId } from '@/shared'\nimport MenuAnchor from './MenuAnchor.vue'\nimport { injectMenuContentContext } from './MenuContentImpl.vue'\nimport MenuItemImpl from './MenuItemImpl.vue'\nimport { injectMenuContext, injectMenuRootContext } from './MenuRoot.vue'\nimport { injectMenuSubContext } from './MenuSub.vue'\nimport { getOpenState, isMouseEvent, SUB_OPEN_KEYS } from './utils'\n\nconst props = defineProps<MenuSubTriggerProps>()\n\nconst menuContext = injectMenuContext()\nconst rootContext = injectMenuRootContext()\nconst subContext = injectMenuSubContext()\nconst contentContext = injectMenuContentContext()\n\nconst openTimerRef = ref<number | null>(null)\n\nsubContext.triggerId ||= useId(undefined, 'reka-menu-sub-trigger')\n\nfunction clearOpenTimer() {\n if (openTimerRef.value)\n window.clearTimeout(openTimerRef.value)\n openTimerRef.value = null\n}\n\nonUnmounted(() => {\n clearOpenTimer()\n})\n\nfunction handlePointerMove(event: PointerEvent) {\n if (!isMouseEvent(event))\n return\n const defaultPrevented = contentContext.onItemEnter(event)\n if (defaultPrevented)\n return\n\n if (!props.disabled && !menuContext.open.value && !openTimerRef.value) {\n contentContext.onPointerGraceIntentChange(null)\n openTimerRef.value = window.setTimeout(() => {\n menuContext.onOpenChange(true)\n clearOpenTimer()\n }, 100)\n }\n}\n\nasync function handlePointerLeave(event: PointerEvent) {\n if (!isMouseEvent(event))\n return\n clearOpenTimer()\n\n const contentRect = menuContext.content.value?.getBoundingClientRect()\n if (contentRect?.width) {\n // TODO (Radix UI): make sure to update this when we change positioning logic\n // https://github.com/radix-ui/primitives/blob/main/packages/react/menu/src/Menu.tsx#L1088\n const side = menuContext.content.value?.dataset.side as Side\n\n const rightSide = side === 'right'\n const bleed = rightSide ? -5 : +5\n const contentNearEdge = contentRect[rightSide ? 'left' : 'right']\n const contentFarEdge = contentRect[rightSide ? 'right' : 'left']\n\n contentContext.onPointerGraceIntentChange({\n area: [\n // Apply a bleed on clientX to ensure that our exit point is\n // consistently within polygon bounds\n { x: event.clientX + bleed, y: event.clientY },\n { x: contentNearEdge, y: contentRect.top },\n { x: contentFarEdge, y: contentRect.top },\n { x: contentFarEdge, y: contentRect.bottom },\n { x: contentNearEdge, y: contentRect.bottom },\n ],\n side,\n })\n\n window.clearTimeout(contentContext.pointerGraceTimerRef.value)\n contentContext.pointerGraceTimerRef.value = window.setTimeout(\n () => contentContext.onPointerGraceIntentChange(null),\n 300,\n )\n }\n else {\n const defaultPrevented = contentContext.onTriggerLeave(event)\n if (defaultPrevented)\n return\n\n // There's 100ms where the user may leave an item before the submenu was opened.\n contentContext.onPointerGraceIntentChange(null)\n }\n}\n\nasync function handleKeyDown(event: KeyboardEvent) {\n const isTypingAhead = contentContext.searchRef.value !== ''\n if (props.disabled || (isTypingAhead && event.key === ' '))\n return\n if (SUB_OPEN_KEYS[rootContext.dir.value].includes(event.key)) {\n menuContext.onOpenChange(true)\n\n await nextTick()\n // The trigger may hold focus if opened via pointer interaction\n // so we ensure content is given focus again when switching to keyboard.\n menuContext.content.value?.focus()\n // prevent window from scrolling\n event.preventDefault()\n }\n}\n</script>\n\n<template>\n <MenuAnchor as-child>\n <MenuItemImpl\n v-bind=\"props\"\n :id=\"subContext.triggerId\"\n :ref=\"\n (vnode: ComponentPublicInstance) => {\n // @ts-ignore\n subContext?.onTriggerChange(vnode?.$el);\n return undefined\n }\n \"\n aria-haspopup=\"menu\"\n :aria-expanded=\"menuContext.open.value\"\n :aria-controls=\"subContext.contentId\"\n :data-state=\"getOpenState(menuContext.open.value)\"\n @click=\"\n async (event) => {\n if (props.disabled || event.defaultPrevented) return;\n /**\n * We manually focus because iOS Safari doesn't always focus on click (e.g. buttons)\n * and we rely heavily on `onFocusOutside` for submenus to close when switching\n * between separate submenus.\n */\n event.currentTarget.focus();\n if (!menuContext.open.value) menuContext.onOpenChange(true);\n }\n \"\n @pointermove=\"handlePointerMove\"\n @pointerleave=\"handlePointerLeave\"\n @keydown=\"handleKeyDown\"\n >\n <slot />\n </MenuItemImpl>\n </MenuAnchor>\n</template>\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"MenubarContent.cjs","sources":["../../src/Menubar/MenubarContent.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { MenuContentEmits, MenuContentProps } from '@/Menu'\nimport { useCollection } from '@/Collection'\n\nexport type MenubarContentEmits = MenuContentEmits\n\nexport interface MenubarContentProps extends MenuContentProps {}\n</script>\n\n<script setup lang=\"ts\">\nimport { MenuContent } from '@/Menu'\nimport { useForwardExpose, useForwardPropsEmits, useId } from '@/shared'\nimport { wrapArray } from '@/shared/useTypeahead'\nimport { ref } from 'vue'\nimport { injectMenubarMenuContext } from './MenubarMenu.vue'\nimport { injectMenubarRootContext } from './MenubarRoot.vue'\n\nconst props = withDefaults(defineProps<MenubarContentProps>(), {\n align: 'start',\n})\nconst emits = defineEmits<MenubarContentEmits>()\nconst forwarded = useForwardPropsEmits(props, emits)\nuseForwardExpose()\n\nconst rootContext = injectMenubarRootContext()\nconst menuContext = injectMenubarMenuContext()\n\nmenuContext.contentId ||= useId(undefined, 'reka-menubar-content')\n\nconst { getItems } = useCollection({ key: 'Menubar' })\n\nconst hasInteractedOutsideRef = ref(false)\n\nfunction handleArrowNavigation(event: KeyboardEvent) {\n const target = event.target as HTMLElement\n const targetIsSubTrigger = target.hasAttribute(\n 'data-reka-menubar-subtrigger',\n )\n\n const prevMenuKey = rootContext.dir.value === 'rtl' ? 'ArrowRight' : 'ArrowLeft'\n const isPrevKey = prevMenuKey === event.key\n const isNextKey = !isPrevKey\n\n // Prevent navigation when we're opening a submenu\n if (isNextKey && targetIsSubTrigger)\n return\n\n let candidateValues = getItems().filter(i => i.ref.dataset.disabled !== '').map(i => i.ref.dataset.value)\n if (isPrevKey)\n candidateValues.reverse()\n\n const currentIndex = candidateValues.indexOf(menuContext.value)\n\n candidateValues = rootContext.loop.value\n ? wrapArray(candidateValues, currentIndex + 1)\n : candidateValues.slice(currentIndex + 1)\n\n const [nextValue] = candidateValues\n if (nextValue)\n rootContext.onMenuOpen(nextValue)\n}\n</script>\n\n<template>\n <MenuContent\n v-bind=\"forwarded\"\n :id=\"menuContext.contentId\"\n data-reka-menubar-content=\"\"\n :aria-labelledby=\"menuContext.triggerId\"\n :style=\"{\n '--reka-menubar-content-transform-origin':\n 'var(--reka-popper-transform-origin)',\n '--reka-menubar-content-available-width':\n 'var(--reka-popper-available-width)',\n '--reka-menubar-content-available-height':\n 'var(--reka-popper-available-height)',\n '--reka-menubar-trigger-width': 'var(--reka-popper-anchor-width)',\n '--reka-menubar-trigger-height': 'var(--reka-popper-anchor-height)',\n }\"\n @close-auto-focus=\"(event) => {\n const menubarOpen = Boolean(rootContext.modelValue.value);\n if (!menubarOpen && !hasInteractedOutsideRef) {\n menuContext.triggerElement.value?.focus();\n }\n\n hasInteractedOutsideRef = false;\n // Always prevent auto focus because we either focus manually or want user agent focus\n event.preventDefault();\n }\"\n @focus-outside=\"(event) => {\n const target = event.target as HTMLElement;\n const isMenubarTrigger = getItems().filter(i => i.ref.dataset.disabled !== '').some((i) => i.ref.contains(target));\n if (isMenubarTrigger) event.preventDefault();\n }\"\n @interact-outside=\"\n (event) => {\n hasInteractedOutsideRef = true;\n }\n \"\n @entry-focus=\"(event) => {\n if (!menuContext.wasKeyboardTriggerOpenRef.value) event.preventDefault()\n }\"\n @keydown.arrow-right.arrow-left=\"handleArrowNavigation\"\n >\n <slot />\n </MenuContent>\n</template>\n"],"names":["useForwardPropsEmits","useForwardExpose","injectMenubarRootContext","injectMenubarMenuContext","useId","useCollection","ref","wrapArray"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiBA,IAAA,MAAM,KAAQ,GAAA,OAAA;AAGd,IAAA,MAAM,KAAQ,GAAA,MAAA;AACd,IAAM,MAAA,SAAA,GAAYA,gDAAqB,CAAA,KAAA,EAAO,KAAK,CAAA;AACnD,IAAiBC,wCAAA,EAAA;AAEjB,IAAA,MAAM,cAAcC,4CAAyB,EAAA;AAC7C,IAAA,MAAM,cAAcC,4CAAyB,EAAA;AAE7C,IAAY,WAAA,CAAA,SAAA,KAAcC,kBAAM,CAAA,MAAA,EAAW,sBAAsB,CAAA;AAEjE,IAAA,MAAM,EAAE,QAAS,EAAA,GAAIC,oCAAc,EAAE,GAAA,EAAK,WAAW,CAAA;AAErD,IAAM,MAAA,uBAAA,GAA0BC,QAAI,KAAK,CAAA;AAEzC,IAAA,SAAS,sBAAsB,KAAsB,EAAA;AACnD,MAAA,MAAM,SAAS,KAAM,CAAA,MAAA;AACrB,MAAA,MAAM,qBAAqB,MAAO,CAAA,YAAA;AAAA,QAChC;AAAA,OACF;AAEA,MAAA,MAAM,WAAc,GAAA,WAAA,CAAY,GAAI,CAAA,KAAA,KAAU,QAAQ,YAAe,GAAA,WAAA;AACrE,MAAM,MAAA,SAAA,GAAY,gBAAgB,KAAM,CAAA,GAAA;AACxC,MAAA,MAAM,YAAY,CAAC,SAAA;AAGnB,MAAA,IAAI,SAAa,IAAA,kBAAA;AACf,QAAA;AAEF,MAAA,IAAI,kBAAkB,QAAS,EAAA,CAAE,MAAO,CAAA,CAAA,CAAA,KAAK,EAAE,GAAI,CAAA,OAAA,CAAQ,QAAa,KAAA,EAAE,EAAE,GAAI,CAAA,CAAA,CAAA,KAAK,CAAE,CAAA,GAAA,CAAI,QAAQ,KAAK,CAAA;AACxG,MAAI,IAAA,SAAA;AACF,QAAA,eAAA,CAAgB,OAAQ,EAAA;AAE1B,MAAA,MAAM,YAAe,GAAA,eAAA,CAAgB,OAAQ,CAAA,WAAA,CAAY,KAAK,CAAA;AAE9D,MAAkB,eAAA,GAAA,WAAA,CAAY,IAAK,CAAA,KAAA,GAC/BC,6BAAU,CAAA,eAAA,EAAiB,YAAe,GAAA,CAAC,CAC3C,GAAA,eAAA,CAAgB,KAAM,CAAA,YAAA,GAAe,CAAC,CAAA;AAE1C,MAAM,MAAA,CAAC,SAAS,CAAI,GAAA,eAAA;AACpB,MAAI,IAAA,SAAA;AACF,QAAA,WAAA,CAAY,WAAW,SAAS,CAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"MenubarContent.cjs","sources":["../../src/Menubar/MenubarContent.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { MenuContentEmits, MenuContentProps } from '@/Menu'\nimport { useCollection } from '@/Collection'\n\nexport type MenubarContentEmits = MenuContentEmits\n\nexport interface MenubarContentProps extends MenuContentProps {}\n</script>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue'\nimport { MenuContent } from '@/Menu'\nimport { useForwardExpose, useForwardPropsEmits, useId } from '@/shared'\nimport { wrapArray } from '@/shared/useTypeahead'\nimport { injectMenubarMenuContext } from './MenubarMenu.vue'\nimport { injectMenubarRootContext } from './MenubarRoot.vue'\n\nconst props = withDefaults(defineProps<MenubarContentProps>(), {\n align: 'start',\n})\nconst emits = defineEmits<MenubarContentEmits>()\nconst forwarded = useForwardPropsEmits(props, emits)\nuseForwardExpose()\n\nconst rootContext = injectMenubarRootContext()\nconst menuContext = injectMenubarMenuContext()\n\nmenuContext.contentId ||= useId(undefined, 'reka-menubar-content')\n\nconst { getItems } = useCollection({ key: 'Menubar' })\n\nconst hasInteractedOutsideRef = ref(false)\n\nfunction handleArrowNavigation(event: KeyboardEvent) {\n const target = event.target as HTMLElement\n const targetIsSubTrigger = target.hasAttribute(\n 'data-reka-menubar-subtrigger',\n )\n\n const prevMenuKey = rootContext.dir.value === 'rtl' ? 'ArrowRight' : 'ArrowLeft'\n const isPrevKey = prevMenuKey === event.key\n const isNextKey = !isPrevKey\n\n // Prevent navigation when we're opening a submenu\n if (isNextKey && targetIsSubTrigger)\n return\n\n let candidateValues = getItems().filter(i => i.ref.dataset.disabled !== '').map(i => i.ref.dataset.value)\n if (isPrevKey)\n candidateValues.reverse()\n\n const currentIndex = candidateValues.indexOf(menuContext.value)\n\n candidateValues = rootContext.loop.value\n ? wrapArray(candidateValues, currentIndex + 1)\n : candidateValues.slice(currentIndex + 1)\n\n const [nextValue] = candidateValues\n if (nextValue)\n rootContext.onMenuOpen(nextValue)\n}\n</script>\n\n<template>\n <MenuContent\n v-bind=\"forwarded\"\n :id=\"menuContext.contentId\"\n data-reka-menubar-content=\"\"\n :aria-labelledby=\"menuContext.triggerId\"\n :style=\"{\n '--reka-menubar-content-transform-origin':\n 'var(--reka-popper-transform-origin)',\n '--reka-menubar-content-available-width':\n 'var(--reka-popper-available-width)',\n '--reka-menubar-content-available-height':\n 'var(--reka-popper-available-height)',\n '--reka-menubar-trigger-width': 'var(--reka-popper-anchor-width)',\n '--reka-menubar-trigger-height': 'var(--reka-popper-anchor-height)',\n }\"\n @close-auto-focus=\"(event) => {\n const menubarOpen = Boolean(rootContext.modelValue.value);\n if (!menubarOpen && !hasInteractedOutsideRef) {\n menuContext.triggerElement.value?.focus();\n }\n\n hasInteractedOutsideRef = false;\n // Always prevent auto focus because we either focus manually or want user agent focus\n event.preventDefault();\n }\"\n @focus-outside=\"(event) => {\n const target = event.target as HTMLElement;\n const isMenubarTrigger = getItems().filter(i => i.ref.dataset.disabled !== '').some((i) => i.ref.contains(target));\n if (isMenubarTrigger) event.preventDefault();\n }\"\n @interact-outside=\"\n (event) => {\n hasInteractedOutsideRef = true;\n }\n \"\n @entry-focus=\"(event) => {\n if (!menuContext.wasKeyboardTriggerOpenRef.value) event.preventDefault()\n }\"\n @keydown.arrow-right.arrow-left=\"handleArrowNavigation\"\n >\n <slot />\n </MenuContent>\n</template>\n"],"names":["useForwardPropsEmits","useForwardExpose","injectMenubarRootContext","injectMenubarMenuContext","useId","useCollection","ref","wrapArray"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiBA,IAAA,MAAM,KAAQ,GAAA,OAAA;AAGd,IAAA,MAAM,KAAQ,GAAA,MAAA;AACd,IAAM,MAAA,SAAA,GAAYA,gDAAqB,CAAA,KAAA,EAAO,KAAK,CAAA;AACnD,IAAiBC,wCAAA,EAAA;AAEjB,IAAA,MAAM,cAAcC,4CAAyB,EAAA;AAC7C,IAAA,MAAM,cAAcC,4CAAyB,EAAA;AAE7C,IAAY,WAAA,CAAA,SAAA,KAAcC,kBAAM,CAAA,MAAA,EAAW,sBAAsB,CAAA;AAEjE,IAAA,MAAM,EAAE,QAAS,EAAA,GAAIC,oCAAc,EAAE,GAAA,EAAK,WAAW,CAAA;AAErD,IAAM,MAAA,uBAAA,GAA0BC,QAAI,KAAK,CAAA;AAEzC,IAAA,SAAS,sBAAsB,KAAsB,EAAA;AACnD,MAAA,MAAM,SAAS,KAAM,CAAA,MAAA;AACrB,MAAA,MAAM,qBAAqB,MAAO,CAAA,YAAA;AAAA,QAChC;AAAA,OACF;AAEA,MAAA,MAAM,WAAc,GAAA,WAAA,CAAY,GAAI,CAAA,KAAA,KAAU,QAAQ,YAAe,GAAA,WAAA;AACrE,MAAM,MAAA,SAAA,GAAY,gBAAgB,KAAM,CAAA,GAAA;AACxC,MAAA,MAAM,YAAY,CAAC,SAAA;AAGnB,MAAA,IAAI,SAAa,IAAA,kBAAA;AACf,QAAA;AAEF,MAAA,IAAI,kBAAkB,QAAS,EAAA,CAAE,MAAO,CAAA,CAAA,CAAA,KAAK,EAAE,GAAI,CAAA,OAAA,CAAQ,QAAa,KAAA,EAAE,EAAE,GAAI,CAAA,CAAA,CAAA,KAAK,CAAE,CAAA,GAAA,CAAI,QAAQ,KAAK,CAAA;AACxG,MAAI,IAAA,SAAA;AACF,QAAA,eAAA,CAAgB,OAAQ,EAAA;AAE1B,MAAA,MAAM,YAAe,GAAA,eAAA,CAAgB,OAAQ,CAAA,WAAA,CAAY,KAAK,CAAA;AAE9D,MAAkB,eAAA,GAAA,WAAA,CAAY,IAAK,CAAA,KAAA,GAC/BC,6BAAU,CAAA,eAAA,EAAiB,YAAe,GAAA,CAAC,CAC3C,GAAA,eAAA,CAAgB,KAAM,CAAA,YAAA,GAAe,CAAC,CAAA;AAE1C,MAAM,MAAA,CAAC,SAAS,CAAI,GAAA,eAAA;AACpB,MAAI,IAAA,SAAA;AACF,QAAA,WAAA,CAAY,WAAW,SAAS,CAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"MenubarContent.js","sources":["../../src/Menubar/MenubarContent.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { MenuContentEmits, MenuContentProps } from '@/Menu'\nimport { useCollection } from '@/Collection'\n\nexport type MenubarContentEmits = MenuContentEmits\n\nexport interface MenubarContentProps extends MenuContentProps {}\n</script>\n\n<script setup lang=\"ts\">\nimport { MenuContent } from '@/Menu'\nimport { useForwardExpose, useForwardPropsEmits, useId } from '@/shared'\nimport { wrapArray } from '@/shared/useTypeahead'\nimport { ref } from 'vue'\nimport { injectMenubarMenuContext } from './MenubarMenu.vue'\nimport { injectMenubarRootContext } from './MenubarRoot.vue'\n\nconst props = withDefaults(defineProps<MenubarContentProps>(), {\n align: 'start',\n})\nconst emits = defineEmits<MenubarContentEmits>()\nconst forwarded = useForwardPropsEmits(props, emits)\nuseForwardExpose()\n\nconst rootContext = injectMenubarRootContext()\nconst menuContext = injectMenubarMenuContext()\n\nmenuContext.contentId ||= useId(undefined, 'reka-menubar-content')\n\nconst { getItems } = useCollection({ key: 'Menubar' })\n\nconst hasInteractedOutsideRef = ref(false)\n\nfunction handleArrowNavigation(event: KeyboardEvent) {\n const target = event.target as HTMLElement\n const targetIsSubTrigger = target.hasAttribute(\n 'data-reka-menubar-subtrigger',\n )\n\n const prevMenuKey = rootContext.dir.value === 'rtl' ? 'ArrowRight' : 'ArrowLeft'\n const isPrevKey = prevMenuKey === event.key\n const isNextKey = !isPrevKey\n\n // Prevent navigation when we're opening a submenu\n if (isNextKey && targetIsSubTrigger)\n return\n\n let candidateValues = getItems().filter(i => i.ref.dataset.disabled !== '').map(i => i.ref.dataset.value)\n if (isPrevKey)\n candidateValues.reverse()\n\n const currentIndex = candidateValues.indexOf(menuContext.value)\n\n candidateValues = rootContext.loop.value\n ? wrapArray(candidateValues, currentIndex + 1)\n : candidateValues.slice(currentIndex + 1)\n\n const [nextValue] = candidateValues\n if (nextValue)\n rootContext.onMenuOpen(nextValue)\n}\n</script>\n\n<template>\n <MenuContent\n v-bind=\"forwarded\"\n :id=\"menuContext.contentId\"\n data-reka-menubar-content=\"\"\n :aria-labelledby=\"menuContext.triggerId\"\n :style=\"{\n '--reka-menubar-content-transform-origin':\n 'var(--reka-popper-transform-origin)',\n '--reka-menubar-content-available-width':\n 'var(--reka-popper-available-width)',\n '--reka-menubar-content-available-height':\n 'var(--reka-popper-available-height)',\n '--reka-menubar-trigger-width': 'var(--reka-popper-anchor-width)',\n '--reka-menubar-trigger-height': 'var(--reka-popper-anchor-height)',\n }\"\n @close-auto-focus=\"(event) => {\n const menubarOpen = Boolean(rootContext.modelValue.value);\n if (!menubarOpen && !hasInteractedOutsideRef) {\n menuContext.triggerElement.value?.focus();\n }\n\n hasInteractedOutsideRef = false;\n // Always prevent auto focus because we either focus manually or want user agent focus\n event.preventDefault();\n }\"\n @focus-outside=\"(event) => {\n const target = event.target as HTMLElement;\n const isMenubarTrigger = getItems().filter(i => i.ref.dataset.disabled !== '').some((i) => i.ref.contains(target));\n if (isMenubarTrigger) event.preventDefault();\n }\"\n @interact-outside=\"\n (event) => {\n hasInteractedOutsideRef = true;\n }\n \"\n @entry-focus=\"(event) => {\n if (!menuContext.wasKeyboardTriggerOpenRef.value) event.preventDefault()\n }\"\n @keydown.arrow-right.arrow-left=\"handleArrowNavigation\"\n >\n <slot />\n </MenuContent>\n</template>\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiBA,IAAA,MAAM,KAAQ,GAAA,OAAA;AAGd,IAAA,MAAM,KAAQ,GAAA,MAAA;AACd,IAAM,MAAA,SAAA,GAAY,oBAAqB,CAAA,KAAA,EAAO,KAAK,CAAA;AACnD,IAAiB,gBAAA,EAAA;AAEjB,IAAA,MAAM,cAAc,wBAAyB,EAAA;AAC7C,IAAA,MAAM,cAAc,wBAAyB,EAAA;AAE7C,IAAY,WAAA,CAAA,SAAA,KAAc,KAAM,CAAA,MAAA,EAAW,sBAAsB,CAAA;AAEjE,IAAA,MAAM,EAAE,QAAS,EAAA,GAAI,cAAc,EAAE,GAAA,EAAK,WAAW,CAAA;AAErD,IAAM,MAAA,uBAAA,GAA0B,IAAI,KAAK,CAAA;AAEzC,IAAA,SAAS,sBAAsB,KAAsB,EAAA;AACnD,MAAA,MAAM,SAAS,KAAM,CAAA,MAAA;AACrB,MAAA,MAAM,qBAAqB,MAAO,CAAA,YAAA;AAAA,QAChC;AAAA,OACF;AAEA,MAAA,MAAM,WAAc,GAAA,WAAA,CAAY,GAAI,CAAA,KAAA,KAAU,QAAQ,YAAe,GAAA,WAAA;AACrE,MAAM,MAAA,SAAA,GAAY,gBAAgB,KAAM,CAAA,GAAA;AACxC,MAAA,MAAM,YAAY,CAAC,SAAA;AAGnB,MAAA,IAAI,SAAa,IAAA,kBAAA;AACf,QAAA;AAEF,MAAA,IAAI,kBAAkB,QAAS,EAAA,CAAE,MAAO,CAAA,CAAA,CAAA,KAAK,EAAE,GAAI,CAAA,OAAA,CAAQ,QAAa,KAAA,EAAE,EAAE,GAAI,CAAA,CAAA,CAAA,KAAK,CAAE,CAAA,GAAA,CAAI,QAAQ,KAAK,CAAA;AACxG,MAAI,IAAA,SAAA;AACF,QAAA,eAAA,CAAgB,OAAQ,EAAA;AAE1B,MAAA,MAAM,YAAe,GAAA,eAAA,CAAgB,OAAQ,CAAA,WAAA,CAAY,KAAK,CAAA;AAE9D,MAAkB,eAAA,GAAA,WAAA,CAAY,IAAK,CAAA,KAAA,GAC/B,SAAU,CAAA,eAAA,EAAiB,YAAe,GAAA,CAAC,CAC3C,GAAA,eAAA,CAAgB,KAAM,CAAA,YAAA,GAAe,CAAC,CAAA;AAE1C,MAAM,MAAA,CAAC,SAAS,CAAI,GAAA,eAAA;AACpB,MAAI,IAAA,SAAA;AACF,QAAA,WAAA,CAAY,WAAW,SAAS,CAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"MenubarContent.js","sources":["../../src/Menubar/MenubarContent.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { MenuContentEmits, MenuContentProps } from '@/Menu'\nimport { useCollection } from '@/Collection'\n\nexport type MenubarContentEmits = MenuContentEmits\n\nexport interface MenubarContentProps extends MenuContentProps {}\n</script>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue'\nimport { MenuContent } from '@/Menu'\nimport { useForwardExpose, useForwardPropsEmits, useId } from '@/shared'\nimport { wrapArray } from '@/shared/useTypeahead'\nimport { injectMenubarMenuContext } from './MenubarMenu.vue'\nimport { injectMenubarRootContext } from './MenubarRoot.vue'\n\nconst props = withDefaults(defineProps<MenubarContentProps>(), {\n align: 'start',\n})\nconst emits = defineEmits<MenubarContentEmits>()\nconst forwarded = useForwardPropsEmits(props, emits)\nuseForwardExpose()\n\nconst rootContext = injectMenubarRootContext()\nconst menuContext = injectMenubarMenuContext()\n\nmenuContext.contentId ||= useId(undefined, 'reka-menubar-content')\n\nconst { getItems } = useCollection({ key: 'Menubar' })\n\nconst hasInteractedOutsideRef = ref(false)\n\nfunction handleArrowNavigation(event: KeyboardEvent) {\n const target = event.target as HTMLElement\n const targetIsSubTrigger = target.hasAttribute(\n 'data-reka-menubar-subtrigger',\n )\n\n const prevMenuKey = rootContext.dir.value === 'rtl' ? 'ArrowRight' : 'ArrowLeft'\n const isPrevKey = prevMenuKey === event.key\n const isNextKey = !isPrevKey\n\n // Prevent navigation when we're opening a submenu\n if (isNextKey && targetIsSubTrigger)\n return\n\n let candidateValues = getItems().filter(i => i.ref.dataset.disabled !== '').map(i => i.ref.dataset.value)\n if (isPrevKey)\n candidateValues.reverse()\n\n const currentIndex = candidateValues.indexOf(menuContext.value)\n\n candidateValues = rootContext.loop.value\n ? wrapArray(candidateValues, currentIndex + 1)\n : candidateValues.slice(currentIndex + 1)\n\n const [nextValue] = candidateValues\n if (nextValue)\n rootContext.onMenuOpen(nextValue)\n}\n</script>\n\n<template>\n <MenuContent\n v-bind=\"forwarded\"\n :id=\"menuContext.contentId\"\n data-reka-menubar-content=\"\"\n :aria-labelledby=\"menuContext.triggerId\"\n :style=\"{\n '--reka-menubar-content-transform-origin':\n 'var(--reka-popper-transform-origin)',\n '--reka-menubar-content-available-width':\n 'var(--reka-popper-available-width)',\n '--reka-menubar-content-available-height':\n 'var(--reka-popper-available-height)',\n '--reka-menubar-trigger-width': 'var(--reka-popper-anchor-width)',\n '--reka-menubar-trigger-height': 'var(--reka-popper-anchor-height)',\n }\"\n @close-auto-focus=\"(event) => {\n const menubarOpen = Boolean(rootContext.modelValue.value);\n if (!menubarOpen && !hasInteractedOutsideRef) {\n menuContext.triggerElement.value?.focus();\n }\n\n hasInteractedOutsideRef = false;\n // Always prevent auto focus because we either focus manually or want user agent focus\n event.preventDefault();\n }\"\n @focus-outside=\"(event) => {\n const target = event.target as HTMLElement;\n const isMenubarTrigger = getItems().filter(i => i.ref.dataset.disabled !== '').some((i) => i.ref.contains(target));\n if (isMenubarTrigger) event.preventDefault();\n }\"\n @interact-outside=\"\n (event) => {\n hasInteractedOutsideRef = true;\n }\n \"\n @entry-focus=\"(event) => {\n if (!menuContext.wasKeyboardTriggerOpenRef.value) event.preventDefault()\n }\"\n @keydown.arrow-right.arrow-left=\"handleArrowNavigation\"\n >\n <slot />\n </MenuContent>\n</template>\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiBA,IAAA,MAAM,KAAQ,GAAA,OAAA;AAGd,IAAA,MAAM,KAAQ,GAAA,MAAA;AACd,IAAM,MAAA,SAAA,GAAY,oBAAqB,CAAA,KAAA,EAAO,KAAK,CAAA;AACnD,IAAiB,gBAAA,EAAA;AAEjB,IAAA,MAAM,cAAc,wBAAyB,EAAA;AAC7C,IAAA,MAAM,cAAc,wBAAyB,EAAA;AAE7C,IAAY,WAAA,CAAA,SAAA,KAAc,KAAM,CAAA,MAAA,EAAW,sBAAsB,CAAA;AAEjE,IAAA,MAAM,EAAE,QAAS,EAAA,GAAI,cAAc,EAAE,GAAA,EAAK,WAAW,CAAA;AAErD,IAAM,MAAA,uBAAA,GAA0B,IAAI,KAAK,CAAA;AAEzC,IAAA,SAAS,sBAAsB,KAAsB,EAAA;AACnD,MAAA,MAAM,SAAS,KAAM,CAAA,MAAA;AACrB,MAAA,MAAM,qBAAqB,MAAO,CAAA,YAAA;AAAA,QAChC;AAAA,OACF;AAEA,MAAA,MAAM,WAAc,GAAA,WAAA,CAAY,GAAI,CAAA,KAAA,KAAU,QAAQ,YAAe,GAAA,WAAA;AACrE,MAAM,MAAA,SAAA,GAAY,gBAAgB,KAAM,CAAA,GAAA;AACxC,MAAA,MAAM,YAAY,CAAC,SAAA;AAGnB,MAAA,IAAI,SAAa,IAAA,kBAAA;AACf,QAAA;AAEF,MAAA,IAAI,kBAAkB,QAAS,EAAA,CAAE,MAAO,CAAA,CAAA,CAAA,KAAK,EAAE,GAAI,CAAA,OAAA,CAAQ,QAAa,KAAA,EAAE,EAAE,GAAI,CAAA,CAAA,CAAA,KAAK,CAAE,CAAA,GAAA,CAAI,QAAQ,KAAK,CAAA;AACxG,MAAI,IAAA,SAAA;AACF,QAAA,eAAA,CAAgB,OAAQ,EAAA;AAE1B,MAAA,MAAM,YAAe,GAAA,eAAA,CAAgB,OAAQ,CAAA,WAAA,CAAY,KAAK,CAAA;AAE9D,MAAkB,eAAA,GAAA,WAAA,CAAY,IAAK,CAAA,KAAA,GAC/B,SAAU,CAAA,eAAA,EAAiB,YAAe,GAAA,CAAC,CAC3C,GAAA,eAAA,CAAgB,KAAM,CAAA,YAAA,GAAe,CAAC,CAAA;AAE1C,MAAM,MAAA,CAAC,SAAS,CAAI,GAAA,eAAA;AACpB,MAAI,IAAA,SAAA;AACF,QAAA,WAAA,CAAY,WAAW,SAAS,CAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"MenubarMenu.cjs","sources":["../../src/Menubar/MenubarMenu.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { Ref } from 'vue'\nimport { createContext, useForwardExpose, useId } from '@/shared'\n\nexport interface MenubarMenuProps {\n /**\n * A unique value that associates the item with an active value when the navigation menu is controlled.\n *\n * This prop is managed automatically when uncontrolled.\n */\n value?: string\n}\n\ntype MenubarMenuContext = {\n value: string\n triggerId: string\n triggerElement: Ref<HTMLElement | undefined>\n contentId: string\n wasKeyboardTriggerOpenRef: Ref<boolean>\n}\n\nexport const [injectMenubarMenuContext, provideMenubarMenuContext]\n = createContext<MenubarMenuContext>('MenubarMenu')\n</script>\n\n<script setup lang=\"ts\">\nimport { MenuRoot } from '@/Menu'\nimport { computed, ref, watch } from 'vue'\nimport { injectMenubarRootContext } from './MenubarRoot.vue'\n\nconst props = defineProps<MenubarMenuProps>()\n\nconst value = useId(props.value)\nconst rootContext = injectMenubarRootContext()\nuseForwardExpose()\n\nconst triggerElement = ref<HTMLElement>()\nconst wasKeyboardTriggerOpenRef = ref(false)\n\nconst open = computed(() => rootContext.modelValue.value === value)\n\nwatch(open, () => {\n if (!open.value)\n wasKeyboardTriggerOpenRef.value = false\n})\n\nprovideMenubarMenuContext({\n value,\n triggerElement,\n triggerId: value,\n contentId: '',\n wasKeyboardTriggerOpenRef,\n})\n</script>\n\n<template>\n <MenuRoot\n :open=\"open\"\n :modal=\"false\"\n :dir=\"rootContext.dir.value\"\n @update:open=\"\n (value) => {\n // Menu only calls `@update:open` when dismissing so we\n // want to close our MenuBar based on the same events.\n if (!value) rootContext.onMenuClose();\n }\n \"\n >\n <slot />\n </MenuRoot>\n</template>\n"],"names":["createContext","useId","injectMenubarRootContext","useForwardExpose","ref","computed","watch"],"mappings":";;;;;;;;;AAqBO,MAAM,CAAC,wBAAA,EAA0B,yBAAyB,CAAA,GAC7DA,mCAAkC,aAAa;;;;;;;AAQnD,IAAA,MAAM,KAAQ,GAAA,OAAA;AAEd,IAAM,MAAA,KAAA,GAAQC,kBAAM,CAAA,KAAA,CAAM,KAAK,CAAA;AAC/B,IAAA,MAAM,cAAcC,4CAAyB,EAAA;AAC7C,IAAiBC,wCAAA,EAAA;AAEjB,IAAA,MAAM,iBAAiBC,OAAiB,EAAA;AACxC,IAAM,MAAA,yBAAA,GAA4BA,QAAI,KAAK,CAAA;AAE3C,IAAA,MAAM,OAAOC,YAAS,CAAA,MAAM,WAAY,CAAA,UAAA,CAAW,UAAU,KAAK,CAAA;AAElE,IAAAC,SAAA,CAAM,MAAM,MAAM;AAChB,MAAA,IAAI,CAAC,IAAK,CAAA,KAAA;AACR,QAAA,yBAAA,CAA0B,KAAQ,GAAA,KAAA;AAAA,KACrC,CAAA;AAED,IAA0B,yBAAA,CAAA;AAAA,MACxB,KAAA;AAAA,MACA,cAAA;AAAA,MACA,SAAW,EAAA,KAAA;AAAA,MACX,SAAW,EAAA,EAAA;AAAA,MACX;AAAA,KACD,CAAA;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"MenubarMenu.cjs","sources":["../../src/Menubar/MenubarMenu.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { Ref } from 'vue'\nimport { createContext, useForwardExpose, useId } from '@/shared'\n\nexport interface MenubarMenuProps {\n /**\n * A unique value that associates the item with an active value when the navigation menu is controlled.\n *\n * This prop is managed automatically when uncontrolled.\n */\n value?: string\n}\n\ntype MenubarMenuContext = {\n value: string\n triggerId: string\n triggerElement: Ref<HTMLElement | undefined>\n contentId: string\n wasKeyboardTriggerOpenRef: Ref<boolean>\n}\n\nexport const [injectMenubarMenuContext, provideMenubarMenuContext]\n = createContext<MenubarMenuContext>('MenubarMenu')\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue'\nimport { MenuRoot } from '@/Menu'\nimport { injectMenubarRootContext } from './MenubarRoot.vue'\n\nconst props = defineProps<MenubarMenuProps>()\n\nconst value = useId(props.value)\nconst rootContext = injectMenubarRootContext()\nuseForwardExpose()\n\nconst triggerElement = ref<HTMLElement>()\nconst wasKeyboardTriggerOpenRef = ref(false)\n\nconst open = computed(() => rootContext.modelValue.value === value)\n\nwatch(open, () => {\n if (!open.value)\n wasKeyboardTriggerOpenRef.value = false\n})\n\nprovideMenubarMenuContext({\n value,\n triggerElement,\n triggerId: value,\n contentId: '',\n wasKeyboardTriggerOpenRef,\n})\n</script>\n\n<template>\n <MenuRoot\n :open=\"open\"\n :modal=\"false\"\n :dir=\"rootContext.dir.value\"\n @update:open=\"\n (value) => {\n // Menu only calls `@update:open` when dismissing so we\n // want to close our MenuBar based on the same events.\n if (!value) rootContext.onMenuClose();\n }\n \"\n >\n <slot />\n </MenuRoot>\n</template>\n"],"names":["createContext","useId","injectMenubarRootContext","useForwardExpose","ref","computed","watch"],"mappings":";;;;;;;;;AAqBO,MAAM,CAAC,wBAAA,EAA0B,yBAAyB,CAAA,GAC7DA,mCAAkC,aAAa;;;;;;;AAQnD,IAAA,MAAM,KAAQ,GAAA,OAAA;AAEd,IAAM,MAAA,KAAA,GAAQC,kBAAM,CAAA,KAAA,CAAM,KAAK,CAAA;AAC/B,IAAA,MAAM,cAAcC,4CAAyB,EAAA;AAC7C,IAAiBC,wCAAA,EAAA;AAEjB,IAAA,MAAM,iBAAiBC,OAAiB,EAAA;AACxC,IAAM,MAAA,yBAAA,GAA4BA,QAAI,KAAK,CAAA;AAE3C,IAAA,MAAM,OAAOC,YAAS,CAAA,MAAM,WAAY,CAAA,UAAA,CAAW,UAAU,KAAK,CAAA;AAElE,IAAAC,SAAA,CAAM,MAAM,MAAM;AAChB,MAAA,IAAI,CAAC,IAAK,CAAA,KAAA;AACR,QAAA,yBAAA,CAA0B,KAAQ,GAAA,KAAA;AAAA,KACrC,CAAA;AAED,IAA0B,yBAAA,CAAA;AAAA,MACxB,KAAA;AAAA,MACA,cAAA;AAAA,MACA,SAAW,EAAA,KAAA;AAAA,MACX,SAAW,EAAA,EAAA;AAAA,MACX;AAAA,KACD,CAAA;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"MenubarMenu.js","sources":["../../src/Menubar/MenubarMenu.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { Ref } from 'vue'\nimport { createContext, useForwardExpose, useId } from '@/shared'\n\nexport interface MenubarMenuProps {\n /**\n * A unique value that associates the item with an active value when the navigation menu is controlled.\n *\n * This prop is managed automatically when uncontrolled.\n */\n value?: string\n}\n\ntype MenubarMenuContext = {\n value: string\n triggerId: string\n triggerElement: Ref<HTMLElement | undefined>\n contentId: string\n wasKeyboardTriggerOpenRef: Ref<boolean>\n}\n\nexport const [injectMenubarMenuContext, provideMenubarMenuContext]\n = createContext<MenubarMenuContext>('MenubarMenu')\n</script>\n\n<script setup lang=\"ts\">\nimport { MenuRoot } from '@/Menu'\nimport { computed, ref, watch } from 'vue'\nimport { injectMenubarRootContext } from './MenubarRoot.vue'\n\nconst props = defineProps<MenubarMenuProps>()\n\nconst value = useId(props.value)\nconst rootContext = injectMenubarRootContext()\nuseForwardExpose()\n\nconst triggerElement = ref<HTMLElement>()\nconst wasKeyboardTriggerOpenRef = ref(false)\n\nconst open = computed(() => rootContext.modelValue.value === value)\n\nwatch(open, () => {\n if (!open.value)\n wasKeyboardTriggerOpenRef.value = false\n})\n\nprovideMenubarMenuContext({\n value,\n triggerElement,\n triggerId: value,\n contentId: '',\n wasKeyboardTriggerOpenRef,\n})\n</script>\n\n<template>\n <MenuRoot\n :open=\"open\"\n :modal=\"false\"\n :dir=\"rootContext.dir.value\"\n @update:open=\"\n (value) => {\n // Menu only calls `@update:open` when dismissing so we\n // want to close our MenuBar based on the same events.\n if (!value) rootContext.onMenuClose();\n }\n \"\n >\n <slot />\n </MenuRoot>\n</template>\n"],"names":[],"mappings":";;;;;;;AAqBO,MAAM,CAAC,wBAAA,EAA0B,yBAAyB,CAAA,GAC7D,cAAkC,aAAa;;;;;;;AAQnD,IAAA,MAAM,KAAQ,GAAA,OAAA;AAEd,IAAM,MAAA,KAAA,GAAQ,KAAM,CAAA,KAAA,CAAM,KAAK,CAAA;AAC/B,IAAA,MAAM,cAAc,wBAAyB,EAAA;AAC7C,IAAiB,gBAAA,EAAA;AAEjB,IAAA,MAAM,iBAAiB,GAAiB,EAAA;AACxC,IAAM,MAAA,yBAAA,GAA4B,IAAI,KAAK,CAAA;AAE3C,IAAA,MAAM,OAAO,QAAS,CAAA,MAAM,WAAY,CAAA,UAAA,CAAW,UAAU,KAAK,CAAA;AAElE,IAAA,KAAA,CAAM,MAAM,MAAM;AAChB,MAAA,IAAI,CAAC,IAAK,CAAA,KAAA;AACR,QAAA,yBAAA,CAA0B,KAAQ,GAAA,KAAA;AAAA,KACrC,CAAA;AAED,IAA0B,yBAAA,CAAA;AAAA,MACxB,KAAA;AAAA,MACA,cAAA;AAAA,MACA,SAAW,EAAA,KAAA;AAAA,MACX,SAAW,EAAA,EAAA;AAAA,MACX;AAAA,KACD,CAAA;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"MenubarMenu.js","sources":["../../src/Menubar/MenubarMenu.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { Ref } from 'vue'\nimport { createContext, useForwardExpose, useId } from '@/shared'\n\nexport interface MenubarMenuProps {\n /**\n * A unique value that associates the item with an active value when the navigation menu is controlled.\n *\n * This prop is managed automatically when uncontrolled.\n */\n value?: string\n}\n\ntype MenubarMenuContext = {\n value: string\n triggerId: string\n triggerElement: Ref<HTMLElement | undefined>\n contentId: string\n wasKeyboardTriggerOpenRef: Ref<boolean>\n}\n\nexport const [injectMenubarMenuContext, provideMenubarMenuContext]\n = createContext<MenubarMenuContext>('MenubarMenu')\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue'\nimport { MenuRoot } from '@/Menu'\nimport { injectMenubarRootContext } from './MenubarRoot.vue'\n\nconst props = defineProps<MenubarMenuProps>()\n\nconst value = useId(props.value)\nconst rootContext = injectMenubarRootContext()\nuseForwardExpose()\n\nconst triggerElement = ref<HTMLElement>()\nconst wasKeyboardTriggerOpenRef = ref(false)\n\nconst open = computed(() => rootContext.modelValue.value === value)\n\nwatch(open, () => {\n if (!open.value)\n wasKeyboardTriggerOpenRef.value = false\n})\n\nprovideMenubarMenuContext({\n value,\n triggerElement,\n triggerId: value,\n contentId: '',\n wasKeyboardTriggerOpenRef,\n})\n</script>\n\n<template>\n <MenuRoot\n :open=\"open\"\n :modal=\"false\"\n :dir=\"rootContext.dir.value\"\n @update:open=\"\n (value) => {\n // Menu only calls `@update:open` when dismissing so we\n // want to close our MenuBar based on the same events.\n if (!value) rootContext.onMenuClose();\n }\n \"\n >\n <slot />\n </MenuRoot>\n</template>\n"],"names":[],"mappings":";;;;;;;AAqBO,MAAM,CAAC,wBAAA,EAA0B,yBAAyB,CAAA,GAC7D,cAAkC,aAAa;;;;;;;AAQnD,IAAA,MAAM,KAAQ,GAAA,OAAA;AAEd,IAAM,MAAA,KAAA,GAAQ,KAAM,CAAA,KAAA,CAAM,KAAK,CAAA;AAC/B,IAAA,MAAM,cAAc,wBAAyB,EAAA;AAC7C,IAAiB,gBAAA,EAAA;AAEjB,IAAA,MAAM,iBAAiB,GAAiB,EAAA;AACxC,IAAM,MAAA,yBAAA,GAA4B,IAAI,KAAK,CAAA;AAE3C,IAAA,MAAM,OAAO,QAAS,CAAA,MAAM,WAAY,CAAA,UAAA,CAAW,UAAU,KAAK,CAAA;AAElE,IAAA,KAAA,CAAM,MAAM,MAAM;AAChB,MAAA,IAAI,CAAC,IAAK,CAAA,KAAA;AACR,QAAA,yBAAA,CAA0B,KAAQ,GAAA,KAAA;AAAA,KACrC,CAAA;AAED,IAA0B,yBAAA,CAAA;AAAA,MACxB,KAAA;AAAA,MACA,cAAA;AAAA,MACA,SAAW,EAAA,KAAA;AAAA,MACX,SAAW,EAAA,EAAA;AAAA,MACX;AAAA,KACD,CAAA;;;;;;;;;;;;;;;;;;;;;"}