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,9 +1,8 @@
1
1
  'use strict';
2
2
 
3
3
  const vue = require('vue');
4
- const DismissableLayer_DismissableLayer = require('../DismissableLayer/DismissableLayer.cjs');
5
- const Menu_utils = require('../Menu/utils.cjs');
6
4
  const core = require('@vueuse/core');
5
+ const Menu_utils = require('../Menu/utils.cjs');
7
6
  const Select_SelectItemAlignedPosition = require('./SelectItemAlignedPosition.cjs');
8
7
  const Select_SelectPopperPosition = require('./SelectPopperPosition.cjs');
9
8
  const Collection_Collection = require('../Collection/Collection.cjs');
@@ -15,6 +14,7 @@ const shared_useHideOthers = require('../shared/useHideOthers.cjs');
15
14
  const shared_useTypeahead = require('../shared/useTypeahead.cjs');
16
15
  const shared_useForwardProps = require('../shared/useForwardProps.cjs');
17
16
  const FocusScope_FocusScope = require('../FocusScope/FocusScope.cjs');
17
+ const DismissableLayer_DismissableLayer = require('../DismissableLayer/DismissableLayer.cjs');
18
18
  const Select_SelectRoot = require('./SelectRoot.cjs');
19
19
 
20
20
  const SelectContentDefaultContextValue = {
@@ -1 +1 @@
1
- {"version":3,"file":"SelectContentImpl.cjs","sources":["../../src/Select/SelectContentImpl.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { PointerDownOutsideEvent } from '@/DismissableLayer'\nimport type { PopperContentProps } from '@/Popper'\nimport type { AcceptableValue } from '@/shared/types'\nimport type {\n ComponentPublicInstance,\n Ref,\n} from 'vue'\nimport { useCollection } from '@/Collection'\nimport {\n createContext,\n useFocusGuards,\n useForwardProps,\n useHideOthers,\n useTypeahead,\n} from '@/shared'\nimport { useBodyScrollLock } from '@/shared/useBodyScrollLock'\nimport { valueComparator } from './utils'\n\nexport interface SelectContentContext {\n content?: Ref<HTMLElement | undefined>\n viewport?: Ref<HTMLElement | undefined>\n onViewportChange: (node: HTMLElement | undefined) => void\n itemRefCallback: (\n node: HTMLElement | undefined,\n value: AcceptableValue,\n disabled: boolean\n ) => void\n selectedItem?: Ref<HTMLElement | undefined>\n onItemLeave?: () => void\n itemTextRefCallback: (\n node: HTMLElement | undefined,\n value: AcceptableValue,\n disabled: boolean\n ) => void\n focusSelectedItem?: () => void\n selectedItemText?: Ref<HTMLElement | undefined>\n position?: 'item-aligned' | 'popper'\n isPositioned?: Ref<boolean>\n searchRef?: Ref<string>\n}\n\nexport const SelectContentDefaultContextValue: SelectContentContext = {\n onViewportChange: () => {},\n itemTextRefCallback: () => {},\n itemRefCallback: () => {},\n}\n\nexport type SelectContentImplEmits = {\n closeAutoFocus: [event: Event]\n /**\n * Event handler called when the escape key is down.\n * Can be prevented.\n */\n escapeKeyDown: [event: KeyboardEvent]\n /**\n * Event handler called when a `pointerdown` event happens outside of the `DismissableLayer`.\n * Can be prevented.\n */\n pointerDownOutside: [event: PointerDownOutsideEvent]\n}\n\nexport interface SelectContentImplProps extends PopperContentProps {\n /**\n * The positioning mode to use\n *\n * `item-aligned (default)` - behaves similarly to a native MacOS menu by positioning content relative to the active item. <br>\n * `popper` - positions content in the same way as our other primitives, for example `Popover` or `DropdownMenu`.\n */\n position?: 'item-aligned' | 'popper'\n /**\n * The document.body will be lock, and scrolling will be disabled.\n *\n * @defaultValue true\n */\n bodyLock?: boolean\n}\n\nexport const [injectSelectContentContext, provideSelectContentContext]\n = createContext<SelectContentContext>('SelectContent')\n</script>\n\n<script setup lang=\"ts\">\nimport { DismissableLayer } from '@/DismissableLayer'\nimport { FocusScope } from '@/FocusScope'\nimport { focusFirst } from '@/Menu/utils'\nimport { unrefElement } from '@vueuse/core'\nimport {\n computed,\n ref,\n watch,\n watchEffect,\n} from 'vue'\nimport SelectItemAlignedPosition from './SelectItemAlignedPosition.vue'\nimport SelectPopperPosition from './SelectPopperPosition.vue'\nimport { injectSelectRootContext } from './SelectRoot.vue'\n\nconst props = withDefaults(defineProps<SelectContentImplProps>(), {\n align: 'start',\n position: 'item-aligned',\n bodyLock: true,\n})\nconst emits = defineEmits<SelectContentImplEmits>()\n\nconst rootContext = injectSelectRootContext()\n\nuseFocusGuards()\nuseBodyScrollLock(props.bodyLock)\nconst { CollectionSlot, getItems } = useCollection()\n\nconst content = ref<HTMLElement>()\nuseHideOthers(content)\n\nconst { search, handleTypeaheadSearch } = useTypeahead()\n\nconst viewport = ref<HTMLElement>()\nconst selectedItem = ref<HTMLElement>()\nconst selectedItemText = ref<HTMLElement>()\nconst isPositioned = ref(false)\nconst firstValidItemFoundRef = ref(false)\nconst firstSelectedItemInArrayFoundRef = ref(false)\n\nfunction focusSelectedItem() {\n if (selectedItem.value && content.value)\n focusFirst([selectedItem.value, content.value])\n}\n\nwatch(isPositioned, () => {\n focusSelectedItem()\n})\n\n// prevent selecting items on `pointerup` in some cases after opening from `pointerdown`\n// and close on `pointerup` outside.\nconst { onOpenChange, triggerPointerDownPosRef } = rootContext\nwatchEffect((cleanupFn) => {\n if (!content.value)\n return\n let pointerMoveDelta = { x: 0, y: 0 }\n\n const handlePointerMove = (event: PointerEvent) => {\n pointerMoveDelta = {\n x: Math.abs(\n Math.round(event.pageX) - (triggerPointerDownPosRef.value?.x ?? 0),\n ),\n y: Math.abs(\n Math.round(event.pageY) - (triggerPointerDownPosRef.value?.y ?? 0),\n ),\n }\n }\n const handlePointerUp = (event: PointerEvent) => {\n // Prevent options from being untappable on touch devices\n // https://github.com/unovue/reka-ui/issues/804\n if (event.pointerType === 'touch')\n return\n\n // If the pointer hasn't moved by a certain threshold then we prevent selecting item on `pointerup`.\n if (pointerMoveDelta.x <= 10 && pointerMoveDelta.y <= 10) {\n event.preventDefault()\n }\n else {\n // otherwise, if the event was outside the content, close.\n if (!content.value?.contains(event.target as HTMLElement))\n onOpenChange(false)\n }\n document.removeEventListener('pointermove', handlePointerMove)\n triggerPointerDownPosRef.value = null\n }\n\n if (triggerPointerDownPosRef.value !== null) {\n document.addEventListener('pointermove', handlePointerMove)\n document.addEventListener('pointerup', handlePointerUp, {\n capture: true,\n once: true,\n })\n }\n\n cleanupFn(() => {\n document.removeEventListener('pointermove', handlePointerMove)\n document.removeEventListener('pointerup', handlePointerUp, {\n capture: true,\n })\n })\n})\n\nfunction handleKeyDown(event: KeyboardEvent) {\n const isModifierKey = event.ctrlKey || event.altKey || event.metaKey\n\n // select should not be navigated using tab key so we prevent it\n if (event.key === 'Tab')\n event.preventDefault()\n\n if (!isModifierKey && event.key.length === 1)\n handleTypeaheadSearch(event.key, getItems())\n\n if (['ArrowUp', 'ArrowDown', 'Home', 'End'].includes(event.key)) {\n const collectionItems = getItems().map(i => i.ref)\n let candidateNodes = [...collectionItems]\n\n if (['ArrowUp', 'End'].includes(event.key))\n candidateNodes = candidateNodes.slice().reverse()\n\n if (['ArrowUp', 'ArrowDown'].includes(event.key)) {\n const currentElement = event.target as HTMLElement\n const currentIndex = candidateNodes.indexOf(currentElement)\n candidateNodes = candidateNodes.slice(currentIndex + 1)\n }\n setTimeout(() => focusFirst(candidateNodes))\n event.preventDefault()\n }\n}\n\nconst pickedProps = computed(() => {\n if (props.position === 'popper')\n return props\n else return {}\n})\n\nconst forwardedProps = useForwardProps(pickedProps.value)\n\nprovideSelectContentContext({\n content,\n viewport,\n onViewportChange: (node) => {\n viewport.value = node\n },\n itemRefCallback: (node, value, disabled) => {\n const isFirstValidItem = !firstValidItemFoundRef.value && !disabled\n const isSelectedItem = valueComparator(rootContext.modelValue.value, value, rootContext.by)\n\n if (rootContext.multiple.value) {\n if (firstSelectedItemInArrayFoundRef.value) {\n return\n }\n if (isSelectedItem || isFirstValidItem) {\n selectedItem.value = node\n\n // make sure to keep the first item highlighted when `multiple`\n if (isSelectedItem) {\n firstSelectedItemInArrayFoundRef.value = true\n }\n }\n }\n else {\n if (isSelectedItem || isFirstValidItem) {\n selectedItem.value = node\n }\n }\n\n if (isFirstValidItem) {\n firstValidItemFoundRef.value = true\n }\n },\n selectedItem,\n selectedItemText,\n onItemLeave: () => {\n content.value?.focus()\n },\n itemTextRefCallback: (node, value, disabled) => {\n const isFirstValidItem = !firstValidItemFoundRef.value && !disabled\n const isSelectedItem = valueComparator(rootContext.modelValue.value, value, rootContext.by)\n\n if (isSelectedItem || isFirstValidItem)\n selectedItemText.value = node\n },\n focusSelectedItem,\n position: props.position,\n isPositioned,\n searchRef: search,\n})\n</script>\n\n<template>\n <CollectionSlot>\n <FocusScope\n as-child\n @mount-auto-focus.prevent\n @unmount-auto-focus=\"\n (event) => {\n emits('closeAutoFocus', event);\n if (event.defaultPrevented) return;\n rootContext.triggerElement.value?.focus({ preventScroll: true });\n event.preventDefault();\n }\n \"\n >\n <DismissableLayer\n as-child\n disable-outside-pointer-events\n @focus-outside.prevent\n @dismiss=\"rootContext.onOpenChange(false)\"\n @escape-key-down=\"emits('escapeKeyDown', $event)\"\n @pointer-down-outside=\"emits('pointerDownOutside', $event)\"\n >\n <component\n :is=\"\n position === 'popper'\n ? SelectPopperPosition\n : SelectItemAlignedPosition\n \"\n v-bind=\"{ ...$attrs, ...forwardedProps }\"\n :id=\"rootContext.contentId\"\n :ref=\"\n (vnode: ComponentPublicInstance) => {\n content = unrefElement(vnode) as HTMLElement\n return undefined\n }\n \"\n role=\"listbox\"\n :data-state=\"rootContext.open.value ? 'open' : 'closed'\"\n :dir=\"rootContext.dir.value\"\n :style=\"{\n // flex layout so we can place the scroll buttons properly\n display: 'flex',\n flexDirection: 'column',\n // reset the outline by default as the content MAY get focused\n outline: 'none',\n }\"\n @contextmenu.prevent\n @placed=\"isPositioned = true\"\n @keydown=\"(handleKeyDown as any)\"\n >\n <slot />\n </component>\n </DismissableLayer>\n </FocusScope>\n </CollectionSlot>\n</template>\n"],"names":["createContext","injectSelectRootContext","useFocusGuards","useBodyScrollLock","useCollection","ref","useHideOthers","useTypeahead","focusFirst","watch","watchEffect","computed","useForwardProps","valueComparator"],"mappings":"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"}
1
+ {"version":3,"file":"SelectContentImpl.cjs","sources":["../../src/Select/SelectContentImpl.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type {\n ComponentPublicInstance,\n Ref,\n} from 'vue'\nimport type { PointerDownOutsideEvent } from '@/DismissableLayer'\nimport type { PopperContentProps } from '@/Popper'\nimport type { AcceptableValue } from '@/shared/types'\nimport { useCollection } from '@/Collection'\nimport {\n createContext,\n useFocusGuards,\n useForwardProps,\n useHideOthers,\n useTypeahead,\n} from '@/shared'\nimport { useBodyScrollLock } from '@/shared/useBodyScrollLock'\nimport { valueComparator } from './utils'\n\nexport interface SelectContentContext {\n content?: Ref<HTMLElement | undefined>\n viewport?: Ref<HTMLElement | undefined>\n onViewportChange: (node: HTMLElement | undefined) => void\n itemRefCallback: (\n node: HTMLElement | undefined,\n value: AcceptableValue,\n disabled: boolean\n ) => void\n selectedItem?: Ref<HTMLElement | undefined>\n onItemLeave?: () => void\n itemTextRefCallback: (\n node: HTMLElement | undefined,\n value: AcceptableValue,\n disabled: boolean\n ) => void\n focusSelectedItem?: () => void\n selectedItemText?: Ref<HTMLElement | undefined>\n position?: 'item-aligned' | 'popper'\n isPositioned?: Ref<boolean>\n searchRef?: Ref<string>\n}\n\nexport const SelectContentDefaultContextValue: SelectContentContext = {\n onViewportChange: () => {},\n itemTextRefCallback: () => {},\n itemRefCallback: () => {},\n}\n\nexport type SelectContentImplEmits = {\n closeAutoFocus: [event: Event]\n /**\n * Event handler called when the escape key is down.\n * Can be prevented.\n */\n escapeKeyDown: [event: KeyboardEvent]\n /**\n * Event handler called when a `pointerdown` event happens outside of the `DismissableLayer`.\n * Can be prevented.\n */\n pointerDownOutside: [event: PointerDownOutsideEvent]\n}\n\nexport interface SelectContentImplProps extends PopperContentProps {\n /**\n * The positioning mode to use\n *\n * `item-aligned (default)` - behaves similarly to a native MacOS menu by positioning content relative to the active item. <br>\n * `popper` - positions content in the same way as our other primitives, for example `Popover` or `DropdownMenu`.\n */\n position?: 'item-aligned' | 'popper'\n /**\n * The document.body will be lock, and scrolling will be disabled.\n *\n * @defaultValue true\n */\n bodyLock?: boolean\n}\n\nexport const [injectSelectContentContext, provideSelectContentContext]\n = createContext<SelectContentContext>('SelectContent')\n</script>\n\n<script setup lang=\"ts\">\nimport { unrefElement } from '@vueuse/core'\nimport {\n computed,\n ref,\n watch,\n watchEffect,\n} from 'vue'\nimport { DismissableLayer } from '@/DismissableLayer'\nimport { FocusScope } from '@/FocusScope'\nimport { focusFirst } from '@/Menu/utils'\nimport SelectItemAlignedPosition from './SelectItemAlignedPosition.vue'\nimport SelectPopperPosition from './SelectPopperPosition.vue'\nimport { injectSelectRootContext } from './SelectRoot.vue'\n\nconst props = withDefaults(defineProps<SelectContentImplProps>(), {\n align: 'start',\n position: 'item-aligned',\n bodyLock: true,\n})\nconst emits = defineEmits<SelectContentImplEmits>()\n\nconst rootContext = injectSelectRootContext()\n\nuseFocusGuards()\nuseBodyScrollLock(props.bodyLock)\nconst { CollectionSlot, getItems } = useCollection()\n\nconst content = ref<HTMLElement>()\nuseHideOthers(content)\n\nconst { search, handleTypeaheadSearch } = useTypeahead()\n\nconst viewport = ref<HTMLElement>()\nconst selectedItem = ref<HTMLElement>()\nconst selectedItemText = ref<HTMLElement>()\nconst isPositioned = ref(false)\nconst firstValidItemFoundRef = ref(false)\nconst firstSelectedItemInArrayFoundRef = ref(false)\n\nfunction focusSelectedItem() {\n if (selectedItem.value && content.value)\n focusFirst([selectedItem.value, content.value])\n}\n\nwatch(isPositioned, () => {\n focusSelectedItem()\n})\n\n// prevent selecting items on `pointerup` in some cases after opening from `pointerdown`\n// and close on `pointerup` outside.\nconst { onOpenChange, triggerPointerDownPosRef } = rootContext\nwatchEffect((cleanupFn) => {\n if (!content.value)\n return\n let pointerMoveDelta = { x: 0, y: 0 }\n\n const handlePointerMove = (event: PointerEvent) => {\n pointerMoveDelta = {\n x: Math.abs(\n Math.round(event.pageX) - (triggerPointerDownPosRef.value?.x ?? 0),\n ),\n y: Math.abs(\n Math.round(event.pageY) - (triggerPointerDownPosRef.value?.y ?? 0),\n ),\n }\n }\n const handlePointerUp = (event: PointerEvent) => {\n // Prevent options from being untappable on touch devices\n // https://github.com/unovue/reka-ui/issues/804\n if (event.pointerType === 'touch')\n return\n\n // If the pointer hasn't moved by a certain threshold then we prevent selecting item on `pointerup`.\n if (pointerMoveDelta.x <= 10 && pointerMoveDelta.y <= 10) {\n event.preventDefault()\n }\n else {\n // otherwise, if the event was outside the content, close.\n if (!content.value?.contains(event.target as HTMLElement))\n onOpenChange(false)\n }\n document.removeEventListener('pointermove', handlePointerMove)\n triggerPointerDownPosRef.value = null\n }\n\n if (triggerPointerDownPosRef.value !== null) {\n document.addEventListener('pointermove', handlePointerMove)\n document.addEventListener('pointerup', handlePointerUp, {\n capture: true,\n once: true,\n })\n }\n\n cleanupFn(() => {\n document.removeEventListener('pointermove', handlePointerMove)\n document.removeEventListener('pointerup', handlePointerUp, {\n capture: true,\n })\n })\n})\n\nfunction handleKeyDown(event: KeyboardEvent) {\n const isModifierKey = event.ctrlKey || event.altKey || event.metaKey\n\n // select should not be navigated using tab key so we prevent it\n if (event.key === 'Tab')\n event.preventDefault()\n\n if (!isModifierKey && event.key.length === 1)\n handleTypeaheadSearch(event.key, getItems())\n\n if (['ArrowUp', 'ArrowDown', 'Home', 'End'].includes(event.key)) {\n const collectionItems = getItems().map(i => i.ref)\n let candidateNodes = [...collectionItems]\n\n if (['ArrowUp', 'End'].includes(event.key))\n candidateNodes = candidateNodes.slice().reverse()\n\n if (['ArrowUp', 'ArrowDown'].includes(event.key)) {\n const currentElement = event.target as HTMLElement\n const currentIndex = candidateNodes.indexOf(currentElement)\n candidateNodes = candidateNodes.slice(currentIndex + 1)\n }\n setTimeout(() => focusFirst(candidateNodes))\n event.preventDefault()\n }\n}\n\nconst pickedProps = computed(() => {\n if (props.position === 'popper')\n return props\n else return {}\n})\n\nconst forwardedProps = useForwardProps(pickedProps.value)\n\nprovideSelectContentContext({\n content,\n viewport,\n onViewportChange: (node) => {\n viewport.value = node\n },\n itemRefCallback: (node, value, disabled) => {\n const isFirstValidItem = !firstValidItemFoundRef.value && !disabled\n const isSelectedItem = valueComparator(rootContext.modelValue.value, value, rootContext.by)\n\n if (rootContext.multiple.value) {\n if (firstSelectedItemInArrayFoundRef.value) {\n return\n }\n if (isSelectedItem || isFirstValidItem) {\n selectedItem.value = node\n\n // make sure to keep the first item highlighted when `multiple`\n if (isSelectedItem) {\n firstSelectedItemInArrayFoundRef.value = true\n }\n }\n }\n else {\n if (isSelectedItem || isFirstValidItem) {\n selectedItem.value = node\n }\n }\n\n if (isFirstValidItem) {\n firstValidItemFoundRef.value = true\n }\n },\n selectedItem,\n selectedItemText,\n onItemLeave: () => {\n content.value?.focus()\n },\n itemTextRefCallback: (node, value, disabled) => {\n const isFirstValidItem = !firstValidItemFoundRef.value && !disabled\n const isSelectedItem = valueComparator(rootContext.modelValue.value, value, rootContext.by)\n\n if (isSelectedItem || isFirstValidItem)\n selectedItemText.value = node\n },\n focusSelectedItem,\n position: props.position,\n isPositioned,\n searchRef: search,\n})\n</script>\n\n<template>\n <CollectionSlot>\n <FocusScope\n as-child\n @mount-auto-focus.prevent\n @unmount-auto-focus=\"\n (event) => {\n emits('closeAutoFocus', event);\n if (event.defaultPrevented) return;\n rootContext.triggerElement.value?.focus({ preventScroll: true });\n event.preventDefault();\n }\n \"\n >\n <DismissableLayer\n as-child\n disable-outside-pointer-events\n @focus-outside.prevent\n @dismiss=\"rootContext.onOpenChange(false)\"\n @escape-key-down=\"emits('escapeKeyDown', $event)\"\n @pointer-down-outside=\"emits('pointerDownOutside', $event)\"\n >\n <component\n :is=\"\n position === 'popper'\n ? SelectPopperPosition\n : SelectItemAlignedPosition\n \"\n v-bind=\"{ ...$attrs, ...forwardedProps }\"\n :id=\"rootContext.contentId\"\n :ref=\"\n (vnode: ComponentPublicInstance) => {\n content = unrefElement(vnode) as HTMLElement\n return undefined\n }\n \"\n role=\"listbox\"\n :data-state=\"rootContext.open.value ? 'open' : 'closed'\"\n :dir=\"rootContext.dir.value\"\n :style=\"{\n // flex layout so we can place the scroll buttons properly\n display: 'flex',\n flexDirection: 'column',\n // reset the outline by default as the content MAY get focused\n outline: 'none',\n }\"\n @contextmenu.prevent\n @placed=\"isPositioned = true\"\n @keydown=\"(handleKeyDown as any)\"\n >\n <slot />\n </component>\n </DismissableLayer>\n </FocusScope>\n </CollectionSlot>\n</template>\n"],"names":["createContext","injectSelectRootContext","useFocusGuards","useBodyScrollLock","useCollection","ref","useHideOthers","useTypeahead","focusFirst","watch","watchEffect","computed","useForwardProps","valueComparator"],"mappings":"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"}
@@ -1,7 +1,6 @@
1
1
  import { defineComponent, ref, watch, watchEffect, computed, createBlock, openBlock, unref, withCtx, createVNode, withModifiers, resolveDynamicComponent, mergeProps, renderSlot } from 'vue';
2
- import { _ as _sfc_main$2 } from '../DismissableLayer/DismissableLayer.js';
3
- import { f as focusFirst } from '../Menu/utils.js';
4
2
  import { unrefElement } from '@vueuse/core';
3
+ import { f as focusFirst } from '../Menu/utils.js';
5
4
  import { _ as _sfc_main$4 } from './SelectItemAlignedPosition.js';
6
5
  import { _ as _sfc_main$3 } from './SelectPopperPosition.js';
7
6
  import { u as useCollection } from '../Collection/Collection.js';
@@ -13,6 +12,7 @@ import { u as useHideOthers } from '../shared/useHideOthers.js';
13
12
  import { u as useTypeahead } from '../shared/useTypeahead.js';
14
13
  import { u as useForwardProps } from '../shared/useForwardProps.js';
15
14
  import { _ as _sfc_main$1 } from '../FocusScope/FocusScope.js';
15
+ import { _ as _sfc_main$2 } from '../DismissableLayer/DismissableLayer.js';
16
16
  import { i as injectSelectRootContext } from './SelectRoot.js';
17
17
 
18
18
  const SelectContentDefaultContextValue = {
@@ -1 +1 @@
1
- {"version":3,"file":"SelectContentImpl.js","sources":["../../src/Select/SelectContentImpl.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { PointerDownOutsideEvent } from '@/DismissableLayer'\nimport type { PopperContentProps } from '@/Popper'\nimport type { AcceptableValue } from '@/shared/types'\nimport type {\n ComponentPublicInstance,\n Ref,\n} from 'vue'\nimport { useCollection } from '@/Collection'\nimport {\n createContext,\n useFocusGuards,\n useForwardProps,\n useHideOthers,\n useTypeahead,\n} from '@/shared'\nimport { useBodyScrollLock } from '@/shared/useBodyScrollLock'\nimport { valueComparator } from './utils'\n\nexport interface SelectContentContext {\n content?: Ref<HTMLElement | undefined>\n viewport?: Ref<HTMLElement | undefined>\n onViewportChange: (node: HTMLElement | undefined) => void\n itemRefCallback: (\n node: HTMLElement | undefined,\n value: AcceptableValue,\n disabled: boolean\n ) => void\n selectedItem?: Ref<HTMLElement | undefined>\n onItemLeave?: () => void\n itemTextRefCallback: (\n node: HTMLElement | undefined,\n value: AcceptableValue,\n disabled: boolean\n ) => void\n focusSelectedItem?: () => void\n selectedItemText?: Ref<HTMLElement | undefined>\n position?: 'item-aligned' | 'popper'\n isPositioned?: Ref<boolean>\n searchRef?: Ref<string>\n}\n\nexport const SelectContentDefaultContextValue: SelectContentContext = {\n onViewportChange: () => {},\n itemTextRefCallback: () => {},\n itemRefCallback: () => {},\n}\n\nexport type SelectContentImplEmits = {\n closeAutoFocus: [event: Event]\n /**\n * Event handler called when the escape key is down.\n * Can be prevented.\n */\n escapeKeyDown: [event: KeyboardEvent]\n /**\n * Event handler called when a `pointerdown` event happens outside of the `DismissableLayer`.\n * Can be prevented.\n */\n pointerDownOutside: [event: PointerDownOutsideEvent]\n}\n\nexport interface SelectContentImplProps extends PopperContentProps {\n /**\n * The positioning mode to use\n *\n * `item-aligned (default)` - behaves similarly to a native MacOS menu by positioning content relative to the active item. <br>\n * `popper` - positions content in the same way as our other primitives, for example `Popover` or `DropdownMenu`.\n */\n position?: 'item-aligned' | 'popper'\n /**\n * The document.body will be lock, and scrolling will be disabled.\n *\n * @defaultValue true\n */\n bodyLock?: boolean\n}\n\nexport const [injectSelectContentContext, provideSelectContentContext]\n = createContext<SelectContentContext>('SelectContent')\n</script>\n\n<script setup lang=\"ts\">\nimport { DismissableLayer } from '@/DismissableLayer'\nimport { FocusScope } from '@/FocusScope'\nimport { focusFirst } from '@/Menu/utils'\nimport { unrefElement } from '@vueuse/core'\nimport {\n computed,\n ref,\n watch,\n watchEffect,\n} from 'vue'\nimport SelectItemAlignedPosition from './SelectItemAlignedPosition.vue'\nimport SelectPopperPosition from './SelectPopperPosition.vue'\nimport { injectSelectRootContext } from './SelectRoot.vue'\n\nconst props = withDefaults(defineProps<SelectContentImplProps>(), {\n align: 'start',\n position: 'item-aligned',\n bodyLock: true,\n})\nconst emits = defineEmits<SelectContentImplEmits>()\n\nconst rootContext = injectSelectRootContext()\n\nuseFocusGuards()\nuseBodyScrollLock(props.bodyLock)\nconst { CollectionSlot, getItems } = useCollection()\n\nconst content = ref<HTMLElement>()\nuseHideOthers(content)\n\nconst { search, handleTypeaheadSearch } = useTypeahead()\n\nconst viewport = ref<HTMLElement>()\nconst selectedItem = ref<HTMLElement>()\nconst selectedItemText = ref<HTMLElement>()\nconst isPositioned = ref(false)\nconst firstValidItemFoundRef = ref(false)\nconst firstSelectedItemInArrayFoundRef = ref(false)\n\nfunction focusSelectedItem() {\n if (selectedItem.value && content.value)\n focusFirst([selectedItem.value, content.value])\n}\n\nwatch(isPositioned, () => {\n focusSelectedItem()\n})\n\n// prevent selecting items on `pointerup` in some cases after opening from `pointerdown`\n// and close on `pointerup` outside.\nconst { onOpenChange, triggerPointerDownPosRef } = rootContext\nwatchEffect((cleanupFn) => {\n if (!content.value)\n return\n let pointerMoveDelta = { x: 0, y: 0 }\n\n const handlePointerMove = (event: PointerEvent) => {\n pointerMoveDelta = {\n x: Math.abs(\n Math.round(event.pageX) - (triggerPointerDownPosRef.value?.x ?? 0),\n ),\n y: Math.abs(\n Math.round(event.pageY) - (triggerPointerDownPosRef.value?.y ?? 0),\n ),\n }\n }\n const handlePointerUp = (event: PointerEvent) => {\n // Prevent options from being untappable on touch devices\n // https://github.com/unovue/reka-ui/issues/804\n if (event.pointerType === 'touch')\n return\n\n // If the pointer hasn't moved by a certain threshold then we prevent selecting item on `pointerup`.\n if (pointerMoveDelta.x <= 10 && pointerMoveDelta.y <= 10) {\n event.preventDefault()\n }\n else {\n // otherwise, if the event was outside the content, close.\n if (!content.value?.contains(event.target as HTMLElement))\n onOpenChange(false)\n }\n document.removeEventListener('pointermove', handlePointerMove)\n triggerPointerDownPosRef.value = null\n }\n\n if (triggerPointerDownPosRef.value !== null) {\n document.addEventListener('pointermove', handlePointerMove)\n document.addEventListener('pointerup', handlePointerUp, {\n capture: true,\n once: true,\n })\n }\n\n cleanupFn(() => {\n document.removeEventListener('pointermove', handlePointerMove)\n document.removeEventListener('pointerup', handlePointerUp, {\n capture: true,\n })\n })\n})\n\nfunction handleKeyDown(event: KeyboardEvent) {\n const isModifierKey = event.ctrlKey || event.altKey || event.metaKey\n\n // select should not be navigated using tab key so we prevent it\n if (event.key === 'Tab')\n event.preventDefault()\n\n if (!isModifierKey && event.key.length === 1)\n handleTypeaheadSearch(event.key, getItems())\n\n if (['ArrowUp', 'ArrowDown', 'Home', 'End'].includes(event.key)) {\n const collectionItems = getItems().map(i => i.ref)\n let candidateNodes = [...collectionItems]\n\n if (['ArrowUp', 'End'].includes(event.key))\n candidateNodes = candidateNodes.slice().reverse()\n\n if (['ArrowUp', 'ArrowDown'].includes(event.key)) {\n const currentElement = event.target as HTMLElement\n const currentIndex = candidateNodes.indexOf(currentElement)\n candidateNodes = candidateNodes.slice(currentIndex + 1)\n }\n setTimeout(() => focusFirst(candidateNodes))\n event.preventDefault()\n }\n}\n\nconst pickedProps = computed(() => {\n if (props.position === 'popper')\n return props\n else return {}\n})\n\nconst forwardedProps = useForwardProps(pickedProps.value)\n\nprovideSelectContentContext({\n content,\n viewport,\n onViewportChange: (node) => {\n viewport.value = node\n },\n itemRefCallback: (node, value, disabled) => {\n const isFirstValidItem = !firstValidItemFoundRef.value && !disabled\n const isSelectedItem = valueComparator(rootContext.modelValue.value, value, rootContext.by)\n\n if (rootContext.multiple.value) {\n if (firstSelectedItemInArrayFoundRef.value) {\n return\n }\n if (isSelectedItem || isFirstValidItem) {\n selectedItem.value = node\n\n // make sure to keep the first item highlighted when `multiple`\n if (isSelectedItem) {\n firstSelectedItemInArrayFoundRef.value = true\n }\n }\n }\n else {\n if (isSelectedItem || isFirstValidItem) {\n selectedItem.value = node\n }\n }\n\n if (isFirstValidItem) {\n firstValidItemFoundRef.value = true\n }\n },\n selectedItem,\n selectedItemText,\n onItemLeave: () => {\n content.value?.focus()\n },\n itemTextRefCallback: (node, value, disabled) => {\n const isFirstValidItem = !firstValidItemFoundRef.value && !disabled\n const isSelectedItem = valueComparator(rootContext.modelValue.value, value, rootContext.by)\n\n if (isSelectedItem || isFirstValidItem)\n selectedItemText.value = node\n },\n focusSelectedItem,\n position: props.position,\n isPositioned,\n searchRef: search,\n})\n</script>\n\n<template>\n <CollectionSlot>\n <FocusScope\n as-child\n @mount-auto-focus.prevent\n @unmount-auto-focus=\"\n (event) => {\n emits('closeAutoFocus', event);\n if (event.defaultPrevented) return;\n rootContext.triggerElement.value?.focus({ preventScroll: true });\n event.preventDefault();\n }\n \"\n >\n <DismissableLayer\n as-child\n disable-outside-pointer-events\n @focus-outside.prevent\n @dismiss=\"rootContext.onOpenChange(false)\"\n @escape-key-down=\"emits('escapeKeyDown', $event)\"\n @pointer-down-outside=\"emits('pointerDownOutside', $event)\"\n >\n <component\n :is=\"\n position === 'popper'\n ? SelectPopperPosition\n : SelectItemAlignedPosition\n \"\n v-bind=\"{ ...$attrs, ...forwardedProps }\"\n :id=\"rootContext.contentId\"\n :ref=\"\n (vnode: ComponentPublicInstance) => {\n content = unrefElement(vnode) as HTMLElement\n return undefined\n }\n \"\n role=\"listbox\"\n :data-state=\"rootContext.open.value ? 'open' : 'closed'\"\n :dir=\"rootContext.dir.value\"\n :style=\"{\n // flex layout so we can place the scroll buttons properly\n display: 'flex',\n flexDirection: 'column',\n // reset the outline by default as the content MAY get focused\n outline: 'none',\n }\"\n @contextmenu.prevent\n @placed=\"isPositioned = true\"\n @keydown=\"(handleKeyDown as any)\"\n >\n <slot />\n </component>\n </DismissableLayer>\n </FocusScope>\n </CollectionSlot>\n</template>\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SelectContentImpl.js","sources":["../../src/Select/SelectContentImpl.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type {\n ComponentPublicInstance,\n Ref,\n} from 'vue'\nimport type { PointerDownOutsideEvent } from '@/DismissableLayer'\nimport type { PopperContentProps } from '@/Popper'\nimport type { AcceptableValue } from '@/shared/types'\nimport { useCollection } from '@/Collection'\nimport {\n createContext,\n useFocusGuards,\n useForwardProps,\n useHideOthers,\n useTypeahead,\n} from '@/shared'\nimport { useBodyScrollLock } from '@/shared/useBodyScrollLock'\nimport { valueComparator } from './utils'\n\nexport interface SelectContentContext {\n content?: Ref<HTMLElement | undefined>\n viewport?: Ref<HTMLElement | undefined>\n onViewportChange: (node: HTMLElement | undefined) => void\n itemRefCallback: (\n node: HTMLElement | undefined,\n value: AcceptableValue,\n disabled: boolean\n ) => void\n selectedItem?: Ref<HTMLElement | undefined>\n onItemLeave?: () => void\n itemTextRefCallback: (\n node: HTMLElement | undefined,\n value: AcceptableValue,\n disabled: boolean\n ) => void\n focusSelectedItem?: () => void\n selectedItemText?: Ref<HTMLElement | undefined>\n position?: 'item-aligned' | 'popper'\n isPositioned?: Ref<boolean>\n searchRef?: Ref<string>\n}\n\nexport const SelectContentDefaultContextValue: SelectContentContext = {\n onViewportChange: () => {},\n itemTextRefCallback: () => {},\n itemRefCallback: () => {},\n}\n\nexport type SelectContentImplEmits = {\n closeAutoFocus: [event: Event]\n /**\n * Event handler called when the escape key is down.\n * Can be prevented.\n */\n escapeKeyDown: [event: KeyboardEvent]\n /**\n * Event handler called when a `pointerdown` event happens outside of the `DismissableLayer`.\n * Can be prevented.\n */\n pointerDownOutside: [event: PointerDownOutsideEvent]\n}\n\nexport interface SelectContentImplProps extends PopperContentProps {\n /**\n * The positioning mode to use\n *\n * `item-aligned (default)` - behaves similarly to a native MacOS menu by positioning content relative to the active item. <br>\n * `popper` - positions content in the same way as our other primitives, for example `Popover` or `DropdownMenu`.\n */\n position?: 'item-aligned' | 'popper'\n /**\n * The document.body will be lock, and scrolling will be disabled.\n *\n * @defaultValue true\n */\n bodyLock?: boolean\n}\n\nexport const [injectSelectContentContext, provideSelectContentContext]\n = createContext<SelectContentContext>('SelectContent')\n</script>\n\n<script setup lang=\"ts\">\nimport { unrefElement } from '@vueuse/core'\nimport {\n computed,\n ref,\n watch,\n watchEffect,\n} from 'vue'\nimport { DismissableLayer } from '@/DismissableLayer'\nimport { FocusScope } from '@/FocusScope'\nimport { focusFirst } from '@/Menu/utils'\nimport SelectItemAlignedPosition from './SelectItemAlignedPosition.vue'\nimport SelectPopperPosition from './SelectPopperPosition.vue'\nimport { injectSelectRootContext } from './SelectRoot.vue'\n\nconst props = withDefaults(defineProps<SelectContentImplProps>(), {\n align: 'start',\n position: 'item-aligned',\n bodyLock: true,\n})\nconst emits = defineEmits<SelectContentImplEmits>()\n\nconst rootContext = injectSelectRootContext()\n\nuseFocusGuards()\nuseBodyScrollLock(props.bodyLock)\nconst { CollectionSlot, getItems } = useCollection()\n\nconst content = ref<HTMLElement>()\nuseHideOthers(content)\n\nconst { search, handleTypeaheadSearch } = useTypeahead()\n\nconst viewport = ref<HTMLElement>()\nconst selectedItem = ref<HTMLElement>()\nconst selectedItemText = ref<HTMLElement>()\nconst isPositioned = ref(false)\nconst firstValidItemFoundRef = ref(false)\nconst firstSelectedItemInArrayFoundRef = ref(false)\n\nfunction focusSelectedItem() {\n if (selectedItem.value && content.value)\n focusFirst([selectedItem.value, content.value])\n}\n\nwatch(isPositioned, () => {\n focusSelectedItem()\n})\n\n// prevent selecting items on `pointerup` in some cases after opening from `pointerdown`\n// and close on `pointerup` outside.\nconst { onOpenChange, triggerPointerDownPosRef } = rootContext\nwatchEffect((cleanupFn) => {\n if (!content.value)\n return\n let pointerMoveDelta = { x: 0, y: 0 }\n\n const handlePointerMove = (event: PointerEvent) => {\n pointerMoveDelta = {\n x: Math.abs(\n Math.round(event.pageX) - (triggerPointerDownPosRef.value?.x ?? 0),\n ),\n y: Math.abs(\n Math.round(event.pageY) - (triggerPointerDownPosRef.value?.y ?? 0),\n ),\n }\n }\n const handlePointerUp = (event: PointerEvent) => {\n // Prevent options from being untappable on touch devices\n // https://github.com/unovue/reka-ui/issues/804\n if (event.pointerType === 'touch')\n return\n\n // If the pointer hasn't moved by a certain threshold then we prevent selecting item on `pointerup`.\n if (pointerMoveDelta.x <= 10 && pointerMoveDelta.y <= 10) {\n event.preventDefault()\n }\n else {\n // otherwise, if the event was outside the content, close.\n if (!content.value?.contains(event.target as HTMLElement))\n onOpenChange(false)\n }\n document.removeEventListener('pointermove', handlePointerMove)\n triggerPointerDownPosRef.value = null\n }\n\n if (triggerPointerDownPosRef.value !== null) {\n document.addEventListener('pointermove', handlePointerMove)\n document.addEventListener('pointerup', handlePointerUp, {\n capture: true,\n once: true,\n })\n }\n\n cleanupFn(() => {\n document.removeEventListener('pointermove', handlePointerMove)\n document.removeEventListener('pointerup', handlePointerUp, {\n capture: true,\n })\n })\n})\n\nfunction handleKeyDown(event: KeyboardEvent) {\n const isModifierKey = event.ctrlKey || event.altKey || event.metaKey\n\n // select should not be navigated using tab key so we prevent it\n if (event.key === 'Tab')\n event.preventDefault()\n\n if (!isModifierKey && event.key.length === 1)\n handleTypeaheadSearch(event.key, getItems())\n\n if (['ArrowUp', 'ArrowDown', 'Home', 'End'].includes(event.key)) {\n const collectionItems = getItems().map(i => i.ref)\n let candidateNodes = [...collectionItems]\n\n if (['ArrowUp', 'End'].includes(event.key))\n candidateNodes = candidateNodes.slice().reverse()\n\n if (['ArrowUp', 'ArrowDown'].includes(event.key)) {\n const currentElement = event.target as HTMLElement\n const currentIndex = candidateNodes.indexOf(currentElement)\n candidateNodes = candidateNodes.slice(currentIndex + 1)\n }\n setTimeout(() => focusFirst(candidateNodes))\n event.preventDefault()\n }\n}\n\nconst pickedProps = computed(() => {\n if (props.position === 'popper')\n return props\n else return {}\n})\n\nconst forwardedProps = useForwardProps(pickedProps.value)\n\nprovideSelectContentContext({\n content,\n viewport,\n onViewportChange: (node) => {\n viewport.value = node\n },\n itemRefCallback: (node, value, disabled) => {\n const isFirstValidItem = !firstValidItemFoundRef.value && !disabled\n const isSelectedItem = valueComparator(rootContext.modelValue.value, value, rootContext.by)\n\n if (rootContext.multiple.value) {\n if (firstSelectedItemInArrayFoundRef.value) {\n return\n }\n if (isSelectedItem || isFirstValidItem) {\n selectedItem.value = node\n\n // make sure to keep the first item highlighted when `multiple`\n if (isSelectedItem) {\n firstSelectedItemInArrayFoundRef.value = true\n }\n }\n }\n else {\n if (isSelectedItem || isFirstValidItem) {\n selectedItem.value = node\n }\n }\n\n if (isFirstValidItem) {\n firstValidItemFoundRef.value = true\n }\n },\n selectedItem,\n selectedItemText,\n onItemLeave: () => {\n content.value?.focus()\n },\n itemTextRefCallback: (node, value, disabled) => {\n const isFirstValidItem = !firstValidItemFoundRef.value && !disabled\n const isSelectedItem = valueComparator(rootContext.modelValue.value, value, rootContext.by)\n\n if (isSelectedItem || isFirstValidItem)\n selectedItemText.value = node\n },\n focusSelectedItem,\n position: props.position,\n isPositioned,\n searchRef: search,\n})\n</script>\n\n<template>\n <CollectionSlot>\n <FocusScope\n as-child\n @mount-auto-focus.prevent\n @unmount-auto-focus=\"\n (event) => {\n emits('closeAutoFocus', event);\n if (event.defaultPrevented) return;\n rootContext.triggerElement.value?.focus({ preventScroll: true });\n event.preventDefault();\n }\n \"\n >\n <DismissableLayer\n as-child\n disable-outside-pointer-events\n @focus-outside.prevent\n @dismiss=\"rootContext.onOpenChange(false)\"\n @escape-key-down=\"emits('escapeKeyDown', $event)\"\n @pointer-down-outside=\"emits('pointerDownOutside', $event)\"\n >\n <component\n :is=\"\n position === 'popper'\n ? SelectPopperPosition\n : SelectItemAlignedPosition\n \"\n v-bind=\"{ ...$attrs, ...forwardedProps }\"\n :id=\"rootContext.contentId\"\n :ref=\"\n (vnode: ComponentPublicInstance) => {\n content = unrefElement(vnode) as HTMLElement\n return undefined\n }\n \"\n role=\"listbox\"\n :data-state=\"rootContext.open.value ? 'open' : 'closed'\"\n :dir=\"rootContext.dir.value\"\n :style=\"{\n // flex layout so we can place the scroll buttons properly\n display: 'flex',\n flexDirection: 'column',\n // reset the outline by default as the content MAY get focused\n outline: 'none',\n }\"\n @contextmenu.prevent\n @placed=\"isPositioned = true\"\n @keydown=\"(handleKeyDown as any)\"\n >\n <slot />\n </component>\n </DismissableLayer>\n </FocusScope>\n </CollectionSlot>\n</template>\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"SelectItem.cjs","sources":["../../src/Select/SelectItem.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { PrimitiveProps } from '@/Primitive'\nimport type { AcceptableValue } from '@/shared/types'\nimport type { Ref } from 'vue'\nimport { useCollection } from '@/Collection'\nimport { createContext, getActiveElement, handleAndDispatchCustomEvent, useForwardExpose, useId } from '@/shared'\n\ninterface SelectItemContext<T = AcceptableValue> {\n value: T\n textId: string\n disabled: Ref<boolean>\n isSelected: Ref<boolean>\n onItemTextChange: (node: HTMLElement | undefined) => void\n}\n\nexport const [injectSelectItemContext, provideSelectItemContext]\n = createContext<SelectItemContext>('SelectItem')\n\nexport type SelectEvent<T> = CustomEvent<{ originalEvent: PointerEvent | KeyboardEvent, value?: T }>\n\nexport type SelectItemEmits<T = AcceptableValue> = {\n /** Event handler called when the selecting item. <br> It can be prevented by calling `event.preventDefault`. */\n select: [event: SelectEvent<T>]\n}\n\nexport interface SelectItemProps<T = AcceptableValue> extends PrimitiveProps {\n /** The value given as data when submitted with a `name`. */\n value: T\n /** When `true`, prevents the user from interacting with the item. */\n disabled?: boolean\n /**\n * Optional text used for typeahead purposes.\n *\n * By default the typeahead behavior will use the `.textContent` of the `SelectItemText` part.\n *\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\" generic=\"T extends AcceptableValue = AcceptableValue\">\nimport { Primitive } from '@/Primitive'\nimport {\n computed,\n nextTick,\n onMounted,\n ref,\n toRefs,\n} from 'vue'\nimport { injectSelectContentContext } from './SelectContentImpl.vue'\nimport { injectSelectRootContext } from './SelectRoot.vue'\nimport { SELECTION_KEYS, valueComparator } from './utils'\n\nconst props = defineProps<SelectItemProps>()\nconst emits = defineEmits<SelectItemEmits<T>>()\nconst { disabled } = toRefs(props)\n\nconst rootContext = injectSelectRootContext()\nconst contentContext = injectSelectContentContext()\nconst { forwardRef, currentElement } = useForwardExpose()\nconst { CollectionItem } = useCollection()\n\nconst isSelected = computed(() => valueComparator(rootContext.modelValue?.value, props.value, rootContext.by))\nconst isFocused = ref(false)\nconst textValue = ref(props.textValue ?? '')\nconst textId = useId(undefined, 'reka-select-item-text')\n\nconst SELECT_SELECT = 'select.select'\n\nasync function handleSelectCustomEvent(ev: PointerEvent | KeyboardEvent) {\n if (ev.defaultPrevented)\n return\n\n const eventDetail = { originalEvent: ev, value: props.value as T }\n handleAndDispatchCustomEvent(SELECT_SELECT, handleSelect, eventDetail)\n}\n\nasync function handleSelect(ev: SelectEvent<T>) {\n await nextTick()\n emits('select', ev)\n if (ev.defaultPrevented)\n return\n\n if (!disabled.value) {\n rootContext.onValueChange(props.value)\n if (!rootContext.multiple.value)\n rootContext.onOpenChange(false)\n }\n}\n\nasync function handlePointerMove(event: PointerEvent) {\n await nextTick()\n if (event.defaultPrevented)\n return\n if (disabled.value) {\n contentContext.onItemLeave?.()\n }\n else {\n // even though safari doesn't support this option, it's acceptable\n // as it only means it might scroll a few pixels when using the pointer.\n (event.currentTarget as HTMLElement | null)?.focus({ preventScroll: true })\n }\n}\n\nasync function handlePointerLeave(event: PointerEvent) {\n await nextTick()\n if (event.defaultPrevented)\n return\n if (event.currentTarget === getActiveElement())\n contentContext.onItemLeave?.()\n}\n\nasync function handleKeyDown(event: KeyboardEvent) {\n await nextTick()\n if (event.defaultPrevented)\n return\n const isTypingAhead = contentContext.searchRef?.value !== ''\n if (isTypingAhead && event.key === ' ')\n return\n if (SELECTION_KEYS.includes(event.key))\n handleSelectCustomEvent(event)\n // prevent page scroll if using the space key to select an item\n if (event.key === ' ')\n event.preventDefault()\n}\n\nif (props.value === '') {\n throw new Error(\n 'A <SelectItem /> must have a value prop that is not an empty string. This is because the Select value can be set to an empty string to clear the selection and show the placeholder.',\n )\n}\n\nonMounted(() => {\n if (!currentElement.value)\n return\n contentContext.itemRefCallback(\n currentElement.value,\n props.value,\n props.disabled,\n )\n})\n\nprovideSelectItemContext({\n value: props.value,\n disabled,\n textId,\n isSelected,\n onItemTextChange: (node) => {\n textValue.value = ((textValue.value || node?.textContent) ?? '').trim()\n },\n})\n</script>\n\n<template>\n <CollectionItem :value=\"{ textValue }\">\n <Primitive\n :ref=\"forwardRef\"\n role=\"option\"\n :aria-labelledby=\"textId\"\n :data-highlighted=\"isFocused ? '' : undefined\"\n :aria-selected=\"isSelected\"\n :data-state=\"isSelected ? 'checked' : 'unchecked'\"\n :aria-disabled=\"disabled || undefined\"\n :data-disabled=\"disabled ? '' : undefined\"\n :tabindex=\"disabled ? undefined : -1\"\n :as=\"as\"\n :as-child=\"asChild\"\n @focus=\"isFocused = true\"\n @blur=\"isFocused = false\"\n @pointerup=\"handleSelectCustomEvent\"\n @pointerdown=\"(event) => {\n (event.currentTarget as HTMLElement).focus({ preventScroll: true })\n }\"\n @touchend.prevent.stop\n @pointermove=\"handlePointerMove\"\n @pointerleave=\"handlePointerLeave\"\n @keydown=\"handleKeyDown\"\n >\n <slot />\n </Primitive>\n </CollectionItem>\n</template>\n"],"names":["createContext","toRefs","injectSelectRootContext","injectSelectContentContext","useForwardExpose","useCollection","computed","valueComparator","ref","useId","handleAndDispatchCustomEvent","nextTick","getActiveElement","SELECTION_KEYS","onMounted"],"mappings":"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"}
1
+ {"version":3,"file":"SelectItem.cjs","sources":["../../src/Select/SelectItem.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { Ref } from 'vue'\nimport type { PrimitiveProps } from '@/Primitive'\nimport type { AcceptableValue } from '@/shared/types'\nimport { useCollection } from '@/Collection'\nimport { createContext, getActiveElement, handleAndDispatchCustomEvent, useForwardExpose, useId } from '@/shared'\n\ninterface SelectItemContext<T = AcceptableValue> {\n value: T\n textId: string\n disabled: Ref<boolean>\n isSelected: Ref<boolean>\n onItemTextChange: (node: HTMLElement | undefined) => void\n}\n\nexport const [injectSelectItemContext, provideSelectItemContext]\n = createContext<SelectItemContext>('SelectItem')\n\nexport type SelectEvent<T> = CustomEvent<{ originalEvent: PointerEvent | KeyboardEvent, value?: T }>\n\nexport type SelectItemEmits<T = AcceptableValue> = {\n /** Event handler called when the selecting item. <br> It can be prevented by calling `event.preventDefault`. */\n select: [event: SelectEvent<T>]\n}\n\nexport interface SelectItemProps<T = AcceptableValue> extends PrimitiveProps {\n /** The value given as data when submitted with a `name`. */\n value: T\n /** When `true`, prevents the user from interacting with the item. */\n disabled?: boolean\n /**\n * Optional text used for typeahead purposes.\n *\n * By default the typeahead behavior will use the `.textContent` of the `SelectItemText` part.\n *\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\" generic=\"T extends AcceptableValue = AcceptableValue\">\nimport {\n computed,\n nextTick,\n onMounted,\n ref,\n toRefs,\n} from 'vue'\nimport { Primitive } from '@/Primitive'\nimport { injectSelectContentContext } from './SelectContentImpl.vue'\nimport { injectSelectRootContext } from './SelectRoot.vue'\nimport { SELECTION_KEYS, valueComparator } from './utils'\n\nconst props = defineProps<SelectItemProps>()\nconst emits = defineEmits<SelectItemEmits<T>>()\nconst { disabled } = toRefs(props)\n\nconst rootContext = injectSelectRootContext()\nconst contentContext = injectSelectContentContext()\nconst { forwardRef, currentElement } = useForwardExpose()\nconst { CollectionItem } = useCollection()\n\nconst isSelected = computed(() => valueComparator(rootContext.modelValue?.value, props.value, rootContext.by))\nconst isFocused = ref(false)\nconst textValue = ref(props.textValue ?? '')\nconst textId = useId(undefined, 'reka-select-item-text')\n\nconst SELECT_SELECT = 'select.select'\n\nasync function handleSelectCustomEvent(ev: PointerEvent | KeyboardEvent) {\n if (ev.defaultPrevented)\n return\n\n const eventDetail = { originalEvent: ev, value: props.value as T }\n handleAndDispatchCustomEvent(SELECT_SELECT, handleSelect, eventDetail)\n}\n\nasync function handleSelect(ev: SelectEvent<T>) {\n await nextTick()\n emits('select', ev)\n if (ev.defaultPrevented)\n return\n\n if (!disabled.value) {\n rootContext.onValueChange(props.value)\n if (!rootContext.multiple.value)\n rootContext.onOpenChange(false)\n }\n}\n\nasync function handlePointerMove(event: PointerEvent) {\n await nextTick()\n if (event.defaultPrevented)\n return\n if (disabled.value) {\n contentContext.onItemLeave?.()\n }\n else {\n // even though safari doesn't support this option, it's acceptable\n // as it only means it might scroll a few pixels when using the pointer.\n (event.currentTarget as HTMLElement | null)?.focus({ preventScroll: true })\n }\n}\n\nasync function handlePointerLeave(event: PointerEvent) {\n await nextTick()\n if (event.defaultPrevented)\n return\n if (event.currentTarget === getActiveElement())\n contentContext.onItemLeave?.()\n}\n\nasync function handleKeyDown(event: KeyboardEvent) {\n await nextTick()\n if (event.defaultPrevented)\n return\n const isTypingAhead = contentContext.searchRef?.value !== ''\n if (isTypingAhead && event.key === ' ')\n return\n if (SELECTION_KEYS.includes(event.key))\n handleSelectCustomEvent(event)\n // prevent page scroll if using the space key to select an item\n if (event.key === ' ')\n event.preventDefault()\n}\n\nif (props.value === '') {\n throw new Error(\n 'A <SelectItem /> must have a value prop that is not an empty string. This is because the Select value can be set to an empty string to clear the selection and show the placeholder.',\n )\n}\n\nonMounted(() => {\n if (!currentElement.value)\n return\n contentContext.itemRefCallback(\n currentElement.value,\n props.value,\n props.disabled,\n )\n})\n\nprovideSelectItemContext({\n value: props.value,\n disabled,\n textId,\n isSelected,\n onItemTextChange: (node) => {\n textValue.value = ((textValue.value || node?.textContent) ?? '').trim()\n },\n})\n</script>\n\n<template>\n <CollectionItem :value=\"{ textValue }\">\n <Primitive\n :ref=\"forwardRef\"\n role=\"option\"\n :aria-labelledby=\"textId\"\n :data-highlighted=\"isFocused ? '' : undefined\"\n :aria-selected=\"isSelected\"\n :data-state=\"isSelected ? 'checked' : 'unchecked'\"\n :aria-disabled=\"disabled || undefined\"\n :data-disabled=\"disabled ? '' : undefined\"\n :tabindex=\"disabled ? undefined : -1\"\n :as=\"as\"\n :as-child=\"asChild\"\n @focus=\"isFocused = true\"\n @blur=\"isFocused = false\"\n @pointerup=\"handleSelectCustomEvent\"\n @pointerdown=\"(event) => {\n (event.currentTarget as HTMLElement).focus({ preventScroll: true })\n }\"\n @touchend.prevent.stop\n @pointermove=\"handlePointerMove\"\n @pointerleave=\"handlePointerLeave\"\n @keydown=\"handleKeyDown\"\n >\n <slot />\n </Primitive>\n </CollectionItem>\n</template>\n"],"names":["createContext","toRefs","injectSelectRootContext","injectSelectContentContext","useForwardExpose","useCollection","computed","valueComparator","ref","useId","handleAndDispatchCustomEvent","nextTick","getActiveElement","SELECTION_KEYS","onMounted"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"SelectItem.js","sources":["../../src/Select/SelectItem.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { PrimitiveProps } from '@/Primitive'\nimport type { AcceptableValue } from '@/shared/types'\nimport type { Ref } from 'vue'\nimport { useCollection } from '@/Collection'\nimport { createContext, getActiveElement, handleAndDispatchCustomEvent, useForwardExpose, useId } from '@/shared'\n\ninterface SelectItemContext<T = AcceptableValue> {\n value: T\n textId: string\n disabled: Ref<boolean>\n isSelected: Ref<boolean>\n onItemTextChange: (node: HTMLElement | undefined) => void\n}\n\nexport const [injectSelectItemContext, provideSelectItemContext]\n = createContext<SelectItemContext>('SelectItem')\n\nexport type SelectEvent<T> = CustomEvent<{ originalEvent: PointerEvent | KeyboardEvent, value?: T }>\n\nexport type SelectItemEmits<T = AcceptableValue> = {\n /** Event handler called when the selecting item. <br> It can be prevented by calling `event.preventDefault`. */\n select: [event: SelectEvent<T>]\n}\n\nexport interface SelectItemProps<T = AcceptableValue> extends PrimitiveProps {\n /** The value given as data when submitted with a `name`. */\n value: T\n /** When `true`, prevents the user from interacting with the item. */\n disabled?: boolean\n /**\n * Optional text used for typeahead purposes.\n *\n * By default the typeahead behavior will use the `.textContent` of the `SelectItemText` part.\n *\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\" generic=\"T extends AcceptableValue = AcceptableValue\">\nimport { Primitive } from '@/Primitive'\nimport {\n computed,\n nextTick,\n onMounted,\n ref,\n toRefs,\n} from 'vue'\nimport { injectSelectContentContext } from './SelectContentImpl.vue'\nimport { injectSelectRootContext } from './SelectRoot.vue'\nimport { SELECTION_KEYS, valueComparator } from './utils'\n\nconst props = defineProps<SelectItemProps>()\nconst emits = defineEmits<SelectItemEmits<T>>()\nconst { disabled } = toRefs(props)\n\nconst rootContext = injectSelectRootContext()\nconst contentContext = injectSelectContentContext()\nconst { forwardRef, currentElement } = useForwardExpose()\nconst { CollectionItem } = useCollection()\n\nconst isSelected = computed(() => valueComparator(rootContext.modelValue?.value, props.value, rootContext.by))\nconst isFocused = ref(false)\nconst textValue = ref(props.textValue ?? '')\nconst textId = useId(undefined, 'reka-select-item-text')\n\nconst SELECT_SELECT = 'select.select'\n\nasync function handleSelectCustomEvent(ev: PointerEvent | KeyboardEvent) {\n if (ev.defaultPrevented)\n return\n\n const eventDetail = { originalEvent: ev, value: props.value as T }\n handleAndDispatchCustomEvent(SELECT_SELECT, handleSelect, eventDetail)\n}\n\nasync function handleSelect(ev: SelectEvent<T>) {\n await nextTick()\n emits('select', ev)\n if (ev.defaultPrevented)\n return\n\n if (!disabled.value) {\n rootContext.onValueChange(props.value)\n if (!rootContext.multiple.value)\n rootContext.onOpenChange(false)\n }\n}\n\nasync function handlePointerMove(event: PointerEvent) {\n await nextTick()\n if (event.defaultPrevented)\n return\n if (disabled.value) {\n contentContext.onItemLeave?.()\n }\n else {\n // even though safari doesn't support this option, it's acceptable\n // as it only means it might scroll a few pixels when using the pointer.\n (event.currentTarget as HTMLElement | null)?.focus({ preventScroll: true })\n }\n}\n\nasync function handlePointerLeave(event: PointerEvent) {\n await nextTick()\n if (event.defaultPrevented)\n return\n if (event.currentTarget === getActiveElement())\n contentContext.onItemLeave?.()\n}\n\nasync function handleKeyDown(event: KeyboardEvent) {\n await nextTick()\n if (event.defaultPrevented)\n return\n const isTypingAhead = contentContext.searchRef?.value !== ''\n if (isTypingAhead && event.key === ' ')\n return\n if (SELECTION_KEYS.includes(event.key))\n handleSelectCustomEvent(event)\n // prevent page scroll if using the space key to select an item\n if (event.key === ' ')\n event.preventDefault()\n}\n\nif (props.value === '') {\n throw new Error(\n 'A <SelectItem /> must have a value prop that is not an empty string. This is because the Select value can be set to an empty string to clear the selection and show the placeholder.',\n )\n}\n\nonMounted(() => {\n if (!currentElement.value)\n return\n contentContext.itemRefCallback(\n currentElement.value,\n props.value,\n props.disabled,\n )\n})\n\nprovideSelectItemContext({\n value: props.value,\n disabled,\n textId,\n isSelected,\n onItemTextChange: (node) => {\n textValue.value = ((textValue.value || node?.textContent) ?? '').trim()\n },\n})\n</script>\n\n<template>\n <CollectionItem :value=\"{ textValue }\">\n <Primitive\n :ref=\"forwardRef\"\n role=\"option\"\n :aria-labelledby=\"textId\"\n :data-highlighted=\"isFocused ? '' : undefined\"\n :aria-selected=\"isSelected\"\n :data-state=\"isSelected ? 'checked' : 'unchecked'\"\n :aria-disabled=\"disabled || undefined\"\n :data-disabled=\"disabled ? '' : undefined\"\n :tabindex=\"disabled ? undefined : -1\"\n :as=\"as\"\n :as-child=\"asChild\"\n @focus=\"isFocused = true\"\n @blur=\"isFocused = false\"\n @pointerup=\"handleSelectCustomEvent\"\n @pointerdown=\"(event) => {\n (event.currentTarget as HTMLElement).focus({ preventScroll: true })\n }\"\n @touchend.prevent.stop\n @pointermove=\"handlePointerMove\"\n @pointerleave=\"handlePointerLeave\"\n @keydown=\"handleKeyDown\"\n >\n <slot />\n </Primitive>\n </CollectionItem>\n</template>\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SelectItem.js","sources":["../../src/Select/SelectItem.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { Ref } from 'vue'\nimport type { PrimitiveProps } from '@/Primitive'\nimport type { AcceptableValue } from '@/shared/types'\nimport { useCollection } from '@/Collection'\nimport { createContext, getActiveElement, handleAndDispatchCustomEvent, useForwardExpose, useId } from '@/shared'\n\ninterface SelectItemContext<T = AcceptableValue> {\n value: T\n textId: string\n disabled: Ref<boolean>\n isSelected: Ref<boolean>\n onItemTextChange: (node: HTMLElement | undefined) => void\n}\n\nexport const [injectSelectItemContext, provideSelectItemContext]\n = createContext<SelectItemContext>('SelectItem')\n\nexport type SelectEvent<T> = CustomEvent<{ originalEvent: PointerEvent | KeyboardEvent, value?: T }>\n\nexport type SelectItemEmits<T = AcceptableValue> = {\n /** Event handler called when the selecting item. <br> It can be prevented by calling `event.preventDefault`. */\n select: [event: SelectEvent<T>]\n}\n\nexport interface SelectItemProps<T = AcceptableValue> extends PrimitiveProps {\n /** The value given as data when submitted with a `name`. */\n value: T\n /** When `true`, prevents the user from interacting with the item. */\n disabled?: boolean\n /**\n * Optional text used for typeahead purposes.\n *\n * By default the typeahead behavior will use the `.textContent` of the `SelectItemText` part.\n *\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\" generic=\"T extends AcceptableValue = AcceptableValue\">\nimport {\n computed,\n nextTick,\n onMounted,\n ref,\n toRefs,\n} from 'vue'\nimport { Primitive } from '@/Primitive'\nimport { injectSelectContentContext } from './SelectContentImpl.vue'\nimport { injectSelectRootContext } from './SelectRoot.vue'\nimport { SELECTION_KEYS, valueComparator } from './utils'\n\nconst props = defineProps<SelectItemProps>()\nconst emits = defineEmits<SelectItemEmits<T>>()\nconst { disabled } = toRefs(props)\n\nconst rootContext = injectSelectRootContext()\nconst contentContext = injectSelectContentContext()\nconst { forwardRef, currentElement } = useForwardExpose()\nconst { CollectionItem } = useCollection()\n\nconst isSelected = computed(() => valueComparator(rootContext.modelValue?.value, props.value, rootContext.by))\nconst isFocused = ref(false)\nconst textValue = ref(props.textValue ?? '')\nconst textId = useId(undefined, 'reka-select-item-text')\n\nconst SELECT_SELECT = 'select.select'\n\nasync function handleSelectCustomEvent(ev: PointerEvent | KeyboardEvent) {\n if (ev.defaultPrevented)\n return\n\n const eventDetail = { originalEvent: ev, value: props.value as T }\n handleAndDispatchCustomEvent(SELECT_SELECT, handleSelect, eventDetail)\n}\n\nasync function handleSelect(ev: SelectEvent<T>) {\n await nextTick()\n emits('select', ev)\n if (ev.defaultPrevented)\n return\n\n if (!disabled.value) {\n rootContext.onValueChange(props.value)\n if (!rootContext.multiple.value)\n rootContext.onOpenChange(false)\n }\n}\n\nasync function handlePointerMove(event: PointerEvent) {\n await nextTick()\n if (event.defaultPrevented)\n return\n if (disabled.value) {\n contentContext.onItemLeave?.()\n }\n else {\n // even though safari doesn't support this option, it's acceptable\n // as it only means it might scroll a few pixels when using the pointer.\n (event.currentTarget as HTMLElement | null)?.focus({ preventScroll: true })\n }\n}\n\nasync function handlePointerLeave(event: PointerEvent) {\n await nextTick()\n if (event.defaultPrevented)\n return\n if (event.currentTarget === getActiveElement())\n contentContext.onItemLeave?.()\n}\n\nasync function handleKeyDown(event: KeyboardEvent) {\n await nextTick()\n if (event.defaultPrevented)\n return\n const isTypingAhead = contentContext.searchRef?.value !== ''\n if (isTypingAhead && event.key === ' ')\n return\n if (SELECTION_KEYS.includes(event.key))\n handleSelectCustomEvent(event)\n // prevent page scroll if using the space key to select an item\n if (event.key === ' ')\n event.preventDefault()\n}\n\nif (props.value === '') {\n throw new Error(\n 'A <SelectItem /> must have a value prop that is not an empty string. This is because the Select value can be set to an empty string to clear the selection and show the placeholder.',\n )\n}\n\nonMounted(() => {\n if (!currentElement.value)\n return\n contentContext.itemRefCallback(\n currentElement.value,\n props.value,\n props.disabled,\n )\n})\n\nprovideSelectItemContext({\n value: props.value,\n disabled,\n textId,\n isSelected,\n onItemTextChange: (node) => {\n textValue.value = ((textValue.value || node?.textContent) ?? '').trim()\n },\n})\n</script>\n\n<template>\n <CollectionItem :value=\"{ textValue }\">\n <Primitive\n :ref=\"forwardRef\"\n role=\"option\"\n :aria-labelledby=\"textId\"\n :data-highlighted=\"isFocused ? '' : undefined\"\n :aria-selected=\"isSelected\"\n :data-state=\"isSelected ? 'checked' : 'unchecked'\"\n :aria-disabled=\"disabled || undefined\"\n :data-disabled=\"disabled ? '' : undefined\"\n :tabindex=\"disabled ? undefined : -1\"\n :as=\"as\"\n :as-child=\"asChild\"\n @focus=\"isFocused = true\"\n @blur=\"isFocused = false\"\n @pointerup=\"handleSelectCustomEvent\"\n @pointerdown=\"(event) => {\n (event.currentTarget as HTMLElement).focus({ preventScroll: true })\n }\"\n @touchend.prevent.stop\n @pointermove=\"handlePointerMove\"\n @pointerleave=\"handlePointerLeave\"\n @keydown=\"handleKeyDown\"\n >\n <slot />\n </Primitive>\n </CollectionItem>\n</template>\n"],"names":[],"mappings":"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"}
@@ -2,8 +2,8 @@
2
2
 
3
3
  const vue = require('vue');
4
4
  const Select_utils = require('./utils.cjs');
5
- const Collection_Collection = require('../Collection/Collection.cjs');
6
5
  const core = require('@vueuse/core');
6
+ const Collection_Collection = require('../Collection/Collection.cjs');
7
7
  const Select_SelectRoot = require('./SelectRoot.cjs');
8
8
  const Select_SelectContentImpl = require('./SelectContentImpl.cjs');
9
9
  const shared_useForwardExpose = require('../shared/useForwardExpose.cjs');
@@ -1 +1 @@
1
- {"version":3,"file":"SelectItemAlignedPosition.cjs","sources":["../../src/Select/SelectItemAlignedPosition.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { PrimitiveProps } from '@/Primitive'\nimport type { Ref } from 'vue'\nimport { useCollection } from '@/Collection'\nimport { clamp, createContext, useForwardExpose } from '@/shared'\nimport { useResizeObserver } from '@vueuse/core'\n\ninterface SelectItemAlignedPositionContext {\n contentWrapper?: Ref<HTMLElement | undefined>\n shouldExpandOnScrollRef?: Ref<boolean>\n onScrollButtonChange: (node: HTMLElement | undefined) => void\n}\n\nexport interface SelectItemAlignedPositionProps extends PrimitiveProps {}\n\nexport const [injectSelectItemAlignedPositionContext, provideSelectItemAlignedPositionContext]\n = createContext<SelectItemAlignedPositionContext>('SelectItemAlignedPosition')\n</script>\n\n<script setup lang=\"ts\">\nimport { Primitive } from '@/Primitive'\nimport { nextTick, onMounted, ref } from 'vue'\nimport { injectSelectContentContext } from './SelectContentImpl.vue'\nimport { injectSelectRootContext } from './SelectRoot.vue'\nimport { CONTENT_MARGIN } from './utils'\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst props = defineProps<SelectItemAlignedPositionProps>()\nconst emits = defineEmits<{\n placed: []\n}>()\n\nconst { getItems } = useCollection()\nconst rootContext = injectSelectRootContext()\nconst contentContext = injectSelectContentContext()\n\nconst shouldExpandOnScrollRef = ref(false)\nconst shouldRepositionRef = ref(true)\n\nconst contentWrapperElement = ref<HTMLElement>()\nconst { forwardRef, currentElement: contentElement } = useForwardExpose()\n\nconst { viewport, selectedItem, selectedItemText, focusSelectedItem }\n = contentContext!\n\nfunction position() {\n if (\n rootContext.triggerElement.value\n && rootContext.valueElement.value\n && contentWrapperElement.value\n && contentElement.value\n && viewport?.value\n && selectedItem?.value\n && selectedItemText?.value\n ) {\n const triggerRect = rootContext.triggerElement.value.getBoundingClientRect()\n\n // -----------------------------------------------------------------------------------------\n // Horizontal positioning\n // -----------------------------------------------------------------------------------------\n const contentRect = contentElement.value.getBoundingClientRect()\n const valueNodeRect = rootContext.valueElement.value.getBoundingClientRect()\n const itemTextRect = selectedItemText.value.getBoundingClientRect()\n\n if (rootContext.dir.value !== 'rtl') {\n const itemTextOffset = itemTextRect.left - contentRect.left\n const left = valueNodeRect.left - itemTextOffset\n const leftDelta = triggerRect.left - left\n const minContentWidth = triggerRect.width + leftDelta\n const contentWidth = Math.max(minContentWidth, contentRect.width)\n const rightEdge = window.innerWidth - CONTENT_MARGIN\n const clampedLeft = clamp(left, CONTENT_MARGIN, Math.max(CONTENT_MARGIN, rightEdge - contentWidth))\n\n contentWrapperElement.value.style.minWidth = `${minContentWidth}px`\n contentWrapperElement.value.style.left = `${clampedLeft}px`\n }\n else {\n const itemTextOffset = contentRect.right - itemTextRect.right\n const right = window.innerWidth - valueNodeRect.right - itemTextOffset\n const rightDelta = window.innerWidth - triggerRect.right - right\n const minContentWidth = triggerRect.width + rightDelta\n const contentWidth = Math.max(minContentWidth, contentRect.width)\n const leftEdge = window.innerWidth - CONTENT_MARGIN\n const clampedRight = clamp(\n right,\n CONTENT_MARGIN,\n Math.max(CONTENT_MARGIN, leftEdge - contentWidth),\n )\n\n contentWrapperElement.value.style.minWidth = `${minContentWidth}px`\n contentWrapperElement.value.style.right = `${clampedRight}px`\n }\n\n // -----------------------------------------------------------------------------------------\n // Vertical positioning\n // -----------------------------------------------------------------------------------------\n const items = getItems().map(i => i.ref)\n const availableHeight = window.innerHeight - CONTENT_MARGIN * 2\n const itemsHeight = viewport.value.scrollHeight\n\n const contentStyles = window.getComputedStyle(contentElement.value)\n const contentBorderTopWidth = Number.parseInt(\n contentStyles.borderTopWidth,\n 10,\n )\n const contentPaddingTop = Number.parseInt(contentStyles.paddingTop, 10)\n const contentBorderBottomWidth = Number.parseInt(\n contentStyles.borderBottomWidth,\n 10,\n )\n const contentPaddingBottom = Number.parseInt(\n contentStyles.paddingBottom,\n 10,\n )\n\n const fullContentHeight = contentBorderTopWidth + contentPaddingTop + itemsHeight + contentPaddingBottom + contentBorderBottomWidth\n const minContentHeight = Math.min(\n selectedItem.value.offsetHeight * 5,\n fullContentHeight,\n )\n\n const viewportStyles = window.getComputedStyle(viewport.value)\n const viewportPaddingTop = Number.parseInt(viewportStyles.paddingTop, 10)\n const viewportPaddingBottom = Number.parseInt(\n viewportStyles.paddingBottom,\n 10,\n )\n\n const topEdgeToTriggerMiddle\n = triggerRect.top + triggerRect.height / 2 - CONTENT_MARGIN\n const triggerMiddleToBottomEdge = availableHeight - topEdgeToTriggerMiddle\n\n const selectedItemHalfHeight = selectedItem.value.offsetHeight / 2\n const itemOffsetMiddle\n = selectedItem.value.offsetTop + selectedItemHalfHeight\n const contentTopToItemMiddle\n = contentBorderTopWidth + contentPaddingTop + itemOffsetMiddle\n const itemMiddleToContentBottom\n = fullContentHeight - contentTopToItemMiddle\n\n const willAlignWithoutTopOverflow\n = contentTopToItemMiddle <= topEdgeToTriggerMiddle\n\n if (willAlignWithoutTopOverflow) {\n const isLastItem = selectedItem.value === items[items.length - 1]\n contentWrapperElement.value.style.bottom = `${0}px`\n const viewportOffsetBottom\n = contentElement.value.clientHeight\n - viewport.value.offsetTop\n - viewport.value.offsetHeight\n const clampedTriggerMiddleToBottomEdge = Math.max(\n triggerMiddleToBottomEdge,\n selectedItemHalfHeight\n // viewport might have padding bottom, include it to avoid a scrollable viewport\n + (isLastItem ? viewportPaddingBottom : 0)\n + viewportOffsetBottom\n + contentBorderBottomWidth,\n )\n const height = contentTopToItemMiddle + clampedTriggerMiddleToBottomEdge\n contentWrapperElement.value.style.height = `${height}px`\n }\n else {\n const isFirstItem = selectedItem.value === items[0]\n contentWrapperElement.value.style.top = `${0}px`\n const clampedTopEdgeToTriggerMiddle = Math.max(\n topEdgeToTriggerMiddle,\n contentBorderTopWidth\n + viewport.value.offsetTop\n // viewport might have padding top, include it to avoid a scrollable viewport\n + (isFirstItem ? viewportPaddingTop : 0)\n + selectedItemHalfHeight,\n )\n const height = clampedTopEdgeToTriggerMiddle + itemMiddleToContentBottom\n contentWrapperElement.value.style.height = `${height}px`\n viewport.value.scrollTop\n = contentTopToItemMiddle\n - topEdgeToTriggerMiddle\n + viewport.value.offsetTop\n }\n\n contentWrapperElement.value.style.margin = `${CONTENT_MARGIN}px 0`\n contentWrapperElement.value.style.minHeight = `${minContentHeight}px`\n contentWrapperElement.value.style.maxHeight = `${availableHeight}px`\n // -----------------------------------------------------------------------------------------\n\n emits('placed')\n\n // we don't want the initial scroll position adjustment to trigger \"expand on scroll\"\n // so we explicitly turn it on only after they've registered.\n requestAnimationFrame(() => (shouldExpandOnScrollRef.value = true))\n }\n}\n\n// copy z-index from content to wrapper\nconst contentZIndex = ref('')\n\nonMounted(async () => {\n await nextTick()\n position()\n if (contentElement.value)\n contentZIndex.value = window.getComputedStyle(contentElement.value).zIndex\n})\n\n// When the viewport becomes scrollable at the top, the scroll up button will mount.\n// Because it is part of the normal flow, it will push down the viewport, thus throwing our\n// trigger => selectedItem alignment off by the amount the viewport was pushed down.\n// We wait for this to happen and then re-run the positining logic one more time to account for it.\nfunction handleScrollButtonChange(node: HTMLElement | undefined) {\n if (node && shouldRepositionRef.value === true) {\n position()\n focusSelectedItem?.()\n shouldRepositionRef.value = false\n }\n}\n\n// Resize and position when trigger element changes\nuseResizeObserver(rootContext.triggerElement, () => {\n position()\n})\n\nprovideSelectItemAlignedPositionContext({\n contentWrapper: contentWrapperElement,\n shouldExpandOnScrollRef,\n onScrollButtonChange: handleScrollButtonChange,\n})\n</script>\n\n<template>\n <div\n ref=\"contentWrapperElement\"\n :style=\"{\n display: 'flex',\n flexDirection: 'column',\n position: 'fixed',\n zIndex: contentZIndex,\n }\"\n >\n <Primitive\n :ref=\"forwardRef\"\n :style=\"{\n // When we get the height of the content, it includes borders. If we were to set\n // the height without having `boxSizing: 'border-box'` it would be too big.\n boxSizing: 'border-box',\n // We need to ensure the content doesn't get taller than the wrapper\n maxHeight: '100%',\n }\"\n v-bind=\"{ ...$attrs, ...props }\"\n >\n <slot />\n </Primitive>\n </div>\n</template>\n"],"names":["createContext","useCollection","injectSelectRootContext","injectSelectContentContext","ref","useForwardExpose","CONTENT_MARGIN","clamp","onMounted","nextTick","useResizeObserver"],"mappings":"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"}
1
+ {"version":3,"file":"SelectItemAlignedPosition.cjs","sources":["../../src/Select/SelectItemAlignedPosition.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { Ref } from 'vue'\nimport type { PrimitiveProps } from '@/Primitive'\nimport { useResizeObserver } from '@vueuse/core'\nimport { useCollection } from '@/Collection'\nimport { clamp, createContext, useForwardExpose } from '@/shared'\n\ninterface SelectItemAlignedPositionContext {\n contentWrapper?: Ref<HTMLElement | undefined>\n shouldExpandOnScrollRef?: Ref<boolean>\n onScrollButtonChange: (node: HTMLElement | undefined) => void\n}\n\nexport interface SelectItemAlignedPositionProps extends PrimitiveProps {}\n\nexport const [injectSelectItemAlignedPositionContext, provideSelectItemAlignedPositionContext]\n = createContext<SelectItemAlignedPositionContext>('SelectItemAlignedPosition')\n</script>\n\n<script setup lang=\"ts\">\nimport { nextTick, onMounted, ref } from 'vue'\nimport { Primitive } from '@/Primitive'\nimport { injectSelectContentContext } from './SelectContentImpl.vue'\nimport { injectSelectRootContext } from './SelectRoot.vue'\nimport { CONTENT_MARGIN } from './utils'\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst props = defineProps<SelectItemAlignedPositionProps>()\nconst emits = defineEmits<{\n placed: []\n}>()\n\nconst { getItems } = useCollection()\nconst rootContext = injectSelectRootContext()\nconst contentContext = injectSelectContentContext()\n\nconst shouldExpandOnScrollRef = ref(false)\nconst shouldRepositionRef = ref(true)\n\nconst contentWrapperElement = ref<HTMLElement>()\nconst { forwardRef, currentElement: contentElement } = useForwardExpose()\n\nconst { viewport, selectedItem, selectedItemText, focusSelectedItem }\n = contentContext!\n\nfunction position() {\n if (\n rootContext.triggerElement.value\n && rootContext.valueElement.value\n && contentWrapperElement.value\n && contentElement.value\n && viewport?.value\n && selectedItem?.value\n && selectedItemText?.value\n ) {\n const triggerRect = rootContext.triggerElement.value.getBoundingClientRect()\n\n // -----------------------------------------------------------------------------------------\n // Horizontal positioning\n // -----------------------------------------------------------------------------------------\n const contentRect = contentElement.value.getBoundingClientRect()\n const valueNodeRect = rootContext.valueElement.value.getBoundingClientRect()\n const itemTextRect = selectedItemText.value.getBoundingClientRect()\n\n if (rootContext.dir.value !== 'rtl') {\n const itemTextOffset = itemTextRect.left - contentRect.left\n const left = valueNodeRect.left - itemTextOffset\n const leftDelta = triggerRect.left - left\n const minContentWidth = triggerRect.width + leftDelta\n const contentWidth = Math.max(minContentWidth, contentRect.width)\n const rightEdge = window.innerWidth - CONTENT_MARGIN\n const clampedLeft = clamp(left, CONTENT_MARGIN, Math.max(CONTENT_MARGIN, rightEdge - contentWidth))\n\n contentWrapperElement.value.style.minWidth = `${minContentWidth}px`\n contentWrapperElement.value.style.left = `${clampedLeft}px`\n }\n else {\n const itemTextOffset = contentRect.right - itemTextRect.right\n const right = window.innerWidth - valueNodeRect.right - itemTextOffset\n const rightDelta = window.innerWidth - triggerRect.right - right\n const minContentWidth = triggerRect.width + rightDelta\n const contentWidth = Math.max(minContentWidth, contentRect.width)\n const leftEdge = window.innerWidth - CONTENT_MARGIN\n const clampedRight = clamp(\n right,\n CONTENT_MARGIN,\n Math.max(CONTENT_MARGIN, leftEdge - contentWidth),\n )\n\n contentWrapperElement.value.style.minWidth = `${minContentWidth}px`\n contentWrapperElement.value.style.right = `${clampedRight}px`\n }\n\n // -----------------------------------------------------------------------------------------\n // Vertical positioning\n // -----------------------------------------------------------------------------------------\n const items = getItems().map(i => i.ref)\n const availableHeight = window.innerHeight - CONTENT_MARGIN * 2\n const itemsHeight = viewport.value.scrollHeight\n\n const contentStyles = window.getComputedStyle(contentElement.value)\n const contentBorderTopWidth = Number.parseInt(\n contentStyles.borderTopWidth,\n 10,\n )\n const contentPaddingTop = Number.parseInt(contentStyles.paddingTop, 10)\n const contentBorderBottomWidth = Number.parseInt(\n contentStyles.borderBottomWidth,\n 10,\n )\n const contentPaddingBottom = Number.parseInt(\n contentStyles.paddingBottom,\n 10,\n )\n\n const fullContentHeight = contentBorderTopWidth + contentPaddingTop + itemsHeight + contentPaddingBottom + contentBorderBottomWidth\n const minContentHeight = Math.min(\n selectedItem.value.offsetHeight * 5,\n fullContentHeight,\n )\n\n const viewportStyles = window.getComputedStyle(viewport.value)\n const viewportPaddingTop = Number.parseInt(viewportStyles.paddingTop, 10)\n const viewportPaddingBottom = Number.parseInt(\n viewportStyles.paddingBottom,\n 10,\n )\n\n const topEdgeToTriggerMiddle\n = triggerRect.top + triggerRect.height / 2 - CONTENT_MARGIN\n const triggerMiddleToBottomEdge = availableHeight - topEdgeToTriggerMiddle\n\n const selectedItemHalfHeight = selectedItem.value.offsetHeight / 2\n const itemOffsetMiddle\n = selectedItem.value.offsetTop + selectedItemHalfHeight\n const contentTopToItemMiddle\n = contentBorderTopWidth + contentPaddingTop + itemOffsetMiddle\n const itemMiddleToContentBottom\n = fullContentHeight - contentTopToItemMiddle\n\n const willAlignWithoutTopOverflow\n = contentTopToItemMiddle <= topEdgeToTriggerMiddle\n\n if (willAlignWithoutTopOverflow) {\n const isLastItem = selectedItem.value === items[items.length - 1]\n contentWrapperElement.value.style.bottom = `${0}px`\n const viewportOffsetBottom\n = contentElement.value.clientHeight\n - viewport.value.offsetTop\n - viewport.value.offsetHeight\n const clampedTriggerMiddleToBottomEdge = Math.max(\n triggerMiddleToBottomEdge,\n selectedItemHalfHeight\n // viewport might have padding bottom, include it to avoid a scrollable viewport\n + (isLastItem ? viewportPaddingBottom : 0)\n + viewportOffsetBottom\n + contentBorderBottomWidth,\n )\n const height = contentTopToItemMiddle + clampedTriggerMiddleToBottomEdge\n contentWrapperElement.value.style.height = `${height}px`\n }\n else {\n const isFirstItem = selectedItem.value === items[0]\n contentWrapperElement.value.style.top = `${0}px`\n const clampedTopEdgeToTriggerMiddle = Math.max(\n topEdgeToTriggerMiddle,\n contentBorderTopWidth\n + viewport.value.offsetTop\n // viewport might have padding top, include it to avoid a scrollable viewport\n + (isFirstItem ? viewportPaddingTop : 0)\n + selectedItemHalfHeight,\n )\n const height = clampedTopEdgeToTriggerMiddle + itemMiddleToContentBottom\n contentWrapperElement.value.style.height = `${height}px`\n viewport.value.scrollTop\n = contentTopToItemMiddle\n - topEdgeToTriggerMiddle\n + viewport.value.offsetTop\n }\n\n contentWrapperElement.value.style.margin = `${CONTENT_MARGIN}px 0`\n contentWrapperElement.value.style.minHeight = `${minContentHeight}px`\n contentWrapperElement.value.style.maxHeight = `${availableHeight}px`\n // -----------------------------------------------------------------------------------------\n\n emits('placed')\n\n // we don't want the initial scroll position adjustment to trigger \"expand on scroll\"\n // so we explicitly turn it on only after they've registered.\n requestAnimationFrame(() => (shouldExpandOnScrollRef.value = true))\n }\n}\n\n// copy z-index from content to wrapper\nconst contentZIndex = ref('')\n\nonMounted(async () => {\n await nextTick()\n position()\n if (contentElement.value)\n contentZIndex.value = window.getComputedStyle(contentElement.value).zIndex\n})\n\n// When the viewport becomes scrollable at the top, the scroll up button will mount.\n// Because it is part of the normal flow, it will push down the viewport, thus throwing our\n// trigger => selectedItem alignment off by the amount the viewport was pushed down.\n// We wait for this to happen and then re-run the positining logic one more time to account for it.\nfunction handleScrollButtonChange(node: HTMLElement | undefined) {\n if (node && shouldRepositionRef.value === true) {\n position()\n focusSelectedItem?.()\n shouldRepositionRef.value = false\n }\n}\n\n// Resize and position when trigger element changes\nuseResizeObserver(rootContext.triggerElement, () => {\n position()\n})\n\nprovideSelectItemAlignedPositionContext({\n contentWrapper: contentWrapperElement,\n shouldExpandOnScrollRef,\n onScrollButtonChange: handleScrollButtonChange,\n})\n</script>\n\n<template>\n <div\n ref=\"contentWrapperElement\"\n :style=\"{\n display: 'flex',\n flexDirection: 'column',\n position: 'fixed',\n zIndex: contentZIndex,\n }\"\n >\n <Primitive\n :ref=\"forwardRef\"\n :style=\"{\n // When we get the height of the content, it includes borders. If we were to set\n // the height without having `boxSizing: 'border-box'` it would be too big.\n boxSizing: 'border-box',\n // We need to ensure the content doesn't get taller than the wrapper\n maxHeight: '100%',\n }\"\n v-bind=\"{ ...$attrs, ...props }\"\n >\n <slot />\n </Primitive>\n </div>\n</template>\n"],"names":["createContext","useCollection","injectSelectRootContext","injectSelectContentContext","ref","useForwardExpose","CONTENT_MARGIN","clamp","onMounted","nextTick","useResizeObserver"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { defineComponent, ref, onMounted, nextTick, createElementBlock, openBlock, normalizeStyle, createVNode, unref, mergeProps, withCtx, renderSlot } from 'vue';
2
2
  import { C as CONTENT_MARGIN } from './utils.js';
3
- import { u as useCollection } from '../Collection/Collection.js';
4
3
  import { useResizeObserver } from '@vueuse/core';
4
+ import { u as useCollection } from '../Collection/Collection.js';
5
5
  import { i as injectSelectRootContext } from './SelectRoot.js';
6
6
  import { i as injectSelectContentContext } from './SelectContentImpl.js';
7
7
  import { u as useForwardExpose } from '../shared/useForwardExpose.js';
@@ -1 +1 @@
1
- {"version":3,"file":"SelectItemAlignedPosition.js","sources":["../../src/Select/SelectItemAlignedPosition.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { PrimitiveProps } from '@/Primitive'\nimport type { Ref } from 'vue'\nimport { useCollection } from '@/Collection'\nimport { clamp, createContext, useForwardExpose } from '@/shared'\nimport { useResizeObserver } from '@vueuse/core'\n\ninterface SelectItemAlignedPositionContext {\n contentWrapper?: Ref<HTMLElement | undefined>\n shouldExpandOnScrollRef?: Ref<boolean>\n onScrollButtonChange: (node: HTMLElement | undefined) => void\n}\n\nexport interface SelectItemAlignedPositionProps extends PrimitiveProps {}\n\nexport const [injectSelectItemAlignedPositionContext, provideSelectItemAlignedPositionContext]\n = createContext<SelectItemAlignedPositionContext>('SelectItemAlignedPosition')\n</script>\n\n<script setup lang=\"ts\">\nimport { Primitive } from '@/Primitive'\nimport { nextTick, onMounted, ref } from 'vue'\nimport { injectSelectContentContext } from './SelectContentImpl.vue'\nimport { injectSelectRootContext } from './SelectRoot.vue'\nimport { CONTENT_MARGIN } from './utils'\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst props = defineProps<SelectItemAlignedPositionProps>()\nconst emits = defineEmits<{\n placed: []\n}>()\n\nconst { getItems } = useCollection()\nconst rootContext = injectSelectRootContext()\nconst contentContext = injectSelectContentContext()\n\nconst shouldExpandOnScrollRef = ref(false)\nconst shouldRepositionRef = ref(true)\n\nconst contentWrapperElement = ref<HTMLElement>()\nconst { forwardRef, currentElement: contentElement } = useForwardExpose()\n\nconst { viewport, selectedItem, selectedItemText, focusSelectedItem }\n = contentContext!\n\nfunction position() {\n if (\n rootContext.triggerElement.value\n && rootContext.valueElement.value\n && contentWrapperElement.value\n && contentElement.value\n && viewport?.value\n && selectedItem?.value\n && selectedItemText?.value\n ) {\n const triggerRect = rootContext.triggerElement.value.getBoundingClientRect()\n\n // -----------------------------------------------------------------------------------------\n // Horizontal positioning\n // -----------------------------------------------------------------------------------------\n const contentRect = contentElement.value.getBoundingClientRect()\n const valueNodeRect = rootContext.valueElement.value.getBoundingClientRect()\n const itemTextRect = selectedItemText.value.getBoundingClientRect()\n\n if (rootContext.dir.value !== 'rtl') {\n const itemTextOffset = itemTextRect.left - contentRect.left\n const left = valueNodeRect.left - itemTextOffset\n const leftDelta = triggerRect.left - left\n const minContentWidth = triggerRect.width + leftDelta\n const contentWidth = Math.max(minContentWidth, contentRect.width)\n const rightEdge = window.innerWidth - CONTENT_MARGIN\n const clampedLeft = clamp(left, CONTENT_MARGIN, Math.max(CONTENT_MARGIN, rightEdge - contentWidth))\n\n contentWrapperElement.value.style.minWidth = `${minContentWidth}px`\n contentWrapperElement.value.style.left = `${clampedLeft}px`\n }\n else {\n const itemTextOffset = contentRect.right - itemTextRect.right\n const right = window.innerWidth - valueNodeRect.right - itemTextOffset\n const rightDelta = window.innerWidth - triggerRect.right - right\n const minContentWidth = triggerRect.width + rightDelta\n const contentWidth = Math.max(minContentWidth, contentRect.width)\n const leftEdge = window.innerWidth - CONTENT_MARGIN\n const clampedRight = clamp(\n right,\n CONTENT_MARGIN,\n Math.max(CONTENT_MARGIN, leftEdge - contentWidth),\n )\n\n contentWrapperElement.value.style.minWidth = `${minContentWidth}px`\n contentWrapperElement.value.style.right = `${clampedRight}px`\n }\n\n // -----------------------------------------------------------------------------------------\n // Vertical positioning\n // -----------------------------------------------------------------------------------------\n const items = getItems().map(i => i.ref)\n const availableHeight = window.innerHeight - CONTENT_MARGIN * 2\n const itemsHeight = viewport.value.scrollHeight\n\n const contentStyles = window.getComputedStyle(contentElement.value)\n const contentBorderTopWidth = Number.parseInt(\n contentStyles.borderTopWidth,\n 10,\n )\n const contentPaddingTop = Number.parseInt(contentStyles.paddingTop, 10)\n const contentBorderBottomWidth = Number.parseInt(\n contentStyles.borderBottomWidth,\n 10,\n )\n const contentPaddingBottom = Number.parseInt(\n contentStyles.paddingBottom,\n 10,\n )\n\n const fullContentHeight = contentBorderTopWidth + contentPaddingTop + itemsHeight + contentPaddingBottom + contentBorderBottomWidth\n const minContentHeight = Math.min(\n selectedItem.value.offsetHeight * 5,\n fullContentHeight,\n )\n\n const viewportStyles = window.getComputedStyle(viewport.value)\n const viewportPaddingTop = Number.parseInt(viewportStyles.paddingTop, 10)\n const viewportPaddingBottom = Number.parseInt(\n viewportStyles.paddingBottom,\n 10,\n )\n\n const topEdgeToTriggerMiddle\n = triggerRect.top + triggerRect.height / 2 - CONTENT_MARGIN\n const triggerMiddleToBottomEdge = availableHeight - topEdgeToTriggerMiddle\n\n const selectedItemHalfHeight = selectedItem.value.offsetHeight / 2\n const itemOffsetMiddle\n = selectedItem.value.offsetTop + selectedItemHalfHeight\n const contentTopToItemMiddle\n = contentBorderTopWidth + contentPaddingTop + itemOffsetMiddle\n const itemMiddleToContentBottom\n = fullContentHeight - contentTopToItemMiddle\n\n const willAlignWithoutTopOverflow\n = contentTopToItemMiddle <= topEdgeToTriggerMiddle\n\n if (willAlignWithoutTopOverflow) {\n const isLastItem = selectedItem.value === items[items.length - 1]\n contentWrapperElement.value.style.bottom = `${0}px`\n const viewportOffsetBottom\n = contentElement.value.clientHeight\n - viewport.value.offsetTop\n - viewport.value.offsetHeight\n const clampedTriggerMiddleToBottomEdge = Math.max(\n triggerMiddleToBottomEdge,\n selectedItemHalfHeight\n // viewport might have padding bottom, include it to avoid a scrollable viewport\n + (isLastItem ? viewportPaddingBottom : 0)\n + viewportOffsetBottom\n + contentBorderBottomWidth,\n )\n const height = contentTopToItemMiddle + clampedTriggerMiddleToBottomEdge\n contentWrapperElement.value.style.height = `${height}px`\n }\n else {\n const isFirstItem = selectedItem.value === items[0]\n contentWrapperElement.value.style.top = `${0}px`\n const clampedTopEdgeToTriggerMiddle = Math.max(\n topEdgeToTriggerMiddle,\n contentBorderTopWidth\n + viewport.value.offsetTop\n // viewport might have padding top, include it to avoid a scrollable viewport\n + (isFirstItem ? viewportPaddingTop : 0)\n + selectedItemHalfHeight,\n )\n const height = clampedTopEdgeToTriggerMiddle + itemMiddleToContentBottom\n contentWrapperElement.value.style.height = `${height}px`\n viewport.value.scrollTop\n = contentTopToItemMiddle\n - topEdgeToTriggerMiddle\n + viewport.value.offsetTop\n }\n\n contentWrapperElement.value.style.margin = `${CONTENT_MARGIN}px 0`\n contentWrapperElement.value.style.minHeight = `${minContentHeight}px`\n contentWrapperElement.value.style.maxHeight = `${availableHeight}px`\n // -----------------------------------------------------------------------------------------\n\n emits('placed')\n\n // we don't want the initial scroll position adjustment to trigger \"expand on scroll\"\n // so we explicitly turn it on only after they've registered.\n requestAnimationFrame(() => (shouldExpandOnScrollRef.value = true))\n }\n}\n\n// copy z-index from content to wrapper\nconst contentZIndex = ref('')\n\nonMounted(async () => {\n await nextTick()\n position()\n if (contentElement.value)\n contentZIndex.value = window.getComputedStyle(contentElement.value).zIndex\n})\n\n// When the viewport becomes scrollable at the top, the scroll up button will mount.\n// Because it is part of the normal flow, it will push down the viewport, thus throwing our\n// trigger => selectedItem alignment off by the amount the viewport was pushed down.\n// We wait for this to happen and then re-run the positining logic one more time to account for it.\nfunction handleScrollButtonChange(node: HTMLElement | undefined) {\n if (node && shouldRepositionRef.value === true) {\n position()\n focusSelectedItem?.()\n shouldRepositionRef.value = false\n }\n}\n\n// Resize and position when trigger element changes\nuseResizeObserver(rootContext.triggerElement, () => {\n position()\n})\n\nprovideSelectItemAlignedPositionContext({\n contentWrapper: contentWrapperElement,\n shouldExpandOnScrollRef,\n onScrollButtonChange: handleScrollButtonChange,\n})\n</script>\n\n<template>\n <div\n ref=\"contentWrapperElement\"\n :style=\"{\n display: 'flex',\n flexDirection: 'column',\n position: 'fixed',\n zIndex: contentZIndex,\n }\"\n >\n <Primitive\n :ref=\"forwardRef\"\n :style=\"{\n // When we get the height of the content, it includes borders. If we were to set\n // the height without having `boxSizing: 'border-box'` it would be too big.\n boxSizing: 'border-box',\n // We need to ensure the content doesn't get taller than the wrapper\n maxHeight: '100%',\n }\"\n v-bind=\"{ ...$attrs, ...props }\"\n >\n <slot />\n </Primitive>\n </div>\n</template>\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SelectItemAlignedPosition.js","sources":["../../src/Select/SelectItemAlignedPosition.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { Ref } from 'vue'\nimport type { PrimitiveProps } from '@/Primitive'\nimport { useResizeObserver } from '@vueuse/core'\nimport { useCollection } from '@/Collection'\nimport { clamp, createContext, useForwardExpose } from '@/shared'\n\ninterface SelectItemAlignedPositionContext {\n contentWrapper?: Ref<HTMLElement | undefined>\n shouldExpandOnScrollRef?: Ref<boolean>\n onScrollButtonChange: (node: HTMLElement | undefined) => void\n}\n\nexport interface SelectItemAlignedPositionProps extends PrimitiveProps {}\n\nexport const [injectSelectItemAlignedPositionContext, provideSelectItemAlignedPositionContext]\n = createContext<SelectItemAlignedPositionContext>('SelectItemAlignedPosition')\n</script>\n\n<script setup lang=\"ts\">\nimport { nextTick, onMounted, ref } from 'vue'\nimport { Primitive } from '@/Primitive'\nimport { injectSelectContentContext } from './SelectContentImpl.vue'\nimport { injectSelectRootContext } from './SelectRoot.vue'\nimport { CONTENT_MARGIN } from './utils'\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst props = defineProps<SelectItemAlignedPositionProps>()\nconst emits = defineEmits<{\n placed: []\n}>()\n\nconst { getItems } = useCollection()\nconst rootContext = injectSelectRootContext()\nconst contentContext = injectSelectContentContext()\n\nconst shouldExpandOnScrollRef = ref(false)\nconst shouldRepositionRef = ref(true)\n\nconst contentWrapperElement = ref<HTMLElement>()\nconst { forwardRef, currentElement: contentElement } = useForwardExpose()\n\nconst { viewport, selectedItem, selectedItemText, focusSelectedItem }\n = contentContext!\n\nfunction position() {\n if (\n rootContext.triggerElement.value\n && rootContext.valueElement.value\n && contentWrapperElement.value\n && contentElement.value\n && viewport?.value\n && selectedItem?.value\n && selectedItemText?.value\n ) {\n const triggerRect = rootContext.triggerElement.value.getBoundingClientRect()\n\n // -----------------------------------------------------------------------------------------\n // Horizontal positioning\n // -----------------------------------------------------------------------------------------\n const contentRect = contentElement.value.getBoundingClientRect()\n const valueNodeRect = rootContext.valueElement.value.getBoundingClientRect()\n const itemTextRect = selectedItemText.value.getBoundingClientRect()\n\n if (rootContext.dir.value !== 'rtl') {\n const itemTextOffset = itemTextRect.left - contentRect.left\n const left = valueNodeRect.left - itemTextOffset\n const leftDelta = triggerRect.left - left\n const minContentWidth = triggerRect.width + leftDelta\n const contentWidth = Math.max(minContentWidth, contentRect.width)\n const rightEdge = window.innerWidth - CONTENT_MARGIN\n const clampedLeft = clamp(left, CONTENT_MARGIN, Math.max(CONTENT_MARGIN, rightEdge - contentWidth))\n\n contentWrapperElement.value.style.minWidth = `${minContentWidth}px`\n contentWrapperElement.value.style.left = `${clampedLeft}px`\n }\n else {\n const itemTextOffset = contentRect.right - itemTextRect.right\n const right = window.innerWidth - valueNodeRect.right - itemTextOffset\n const rightDelta = window.innerWidth - triggerRect.right - right\n const minContentWidth = triggerRect.width + rightDelta\n const contentWidth = Math.max(minContentWidth, contentRect.width)\n const leftEdge = window.innerWidth - CONTENT_MARGIN\n const clampedRight = clamp(\n right,\n CONTENT_MARGIN,\n Math.max(CONTENT_MARGIN, leftEdge - contentWidth),\n )\n\n contentWrapperElement.value.style.minWidth = `${minContentWidth}px`\n contentWrapperElement.value.style.right = `${clampedRight}px`\n }\n\n // -----------------------------------------------------------------------------------------\n // Vertical positioning\n // -----------------------------------------------------------------------------------------\n const items = getItems().map(i => i.ref)\n const availableHeight = window.innerHeight - CONTENT_MARGIN * 2\n const itemsHeight = viewport.value.scrollHeight\n\n const contentStyles = window.getComputedStyle(contentElement.value)\n const contentBorderTopWidth = Number.parseInt(\n contentStyles.borderTopWidth,\n 10,\n )\n const contentPaddingTop = Number.parseInt(contentStyles.paddingTop, 10)\n const contentBorderBottomWidth = Number.parseInt(\n contentStyles.borderBottomWidth,\n 10,\n )\n const contentPaddingBottom = Number.parseInt(\n contentStyles.paddingBottom,\n 10,\n )\n\n const fullContentHeight = contentBorderTopWidth + contentPaddingTop + itemsHeight + contentPaddingBottom + contentBorderBottomWidth\n const minContentHeight = Math.min(\n selectedItem.value.offsetHeight * 5,\n fullContentHeight,\n )\n\n const viewportStyles = window.getComputedStyle(viewport.value)\n const viewportPaddingTop = Number.parseInt(viewportStyles.paddingTop, 10)\n const viewportPaddingBottom = Number.parseInt(\n viewportStyles.paddingBottom,\n 10,\n )\n\n const topEdgeToTriggerMiddle\n = triggerRect.top + triggerRect.height / 2 - CONTENT_MARGIN\n const triggerMiddleToBottomEdge = availableHeight - topEdgeToTriggerMiddle\n\n const selectedItemHalfHeight = selectedItem.value.offsetHeight / 2\n const itemOffsetMiddle\n = selectedItem.value.offsetTop + selectedItemHalfHeight\n const contentTopToItemMiddle\n = contentBorderTopWidth + contentPaddingTop + itemOffsetMiddle\n const itemMiddleToContentBottom\n = fullContentHeight - contentTopToItemMiddle\n\n const willAlignWithoutTopOverflow\n = contentTopToItemMiddle <= topEdgeToTriggerMiddle\n\n if (willAlignWithoutTopOverflow) {\n const isLastItem = selectedItem.value === items[items.length - 1]\n contentWrapperElement.value.style.bottom = `${0}px`\n const viewportOffsetBottom\n = contentElement.value.clientHeight\n - viewport.value.offsetTop\n - viewport.value.offsetHeight\n const clampedTriggerMiddleToBottomEdge = Math.max(\n triggerMiddleToBottomEdge,\n selectedItemHalfHeight\n // viewport might have padding bottom, include it to avoid a scrollable viewport\n + (isLastItem ? viewportPaddingBottom : 0)\n + viewportOffsetBottom\n + contentBorderBottomWidth,\n )\n const height = contentTopToItemMiddle + clampedTriggerMiddleToBottomEdge\n contentWrapperElement.value.style.height = `${height}px`\n }\n else {\n const isFirstItem = selectedItem.value === items[0]\n contentWrapperElement.value.style.top = `${0}px`\n const clampedTopEdgeToTriggerMiddle = Math.max(\n topEdgeToTriggerMiddle,\n contentBorderTopWidth\n + viewport.value.offsetTop\n // viewport might have padding top, include it to avoid a scrollable viewport\n + (isFirstItem ? viewportPaddingTop : 0)\n + selectedItemHalfHeight,\n )\n const height = clampedTopEdgeToTriggerMiddle + itemMiddleToContentBottom\n contentWrapperElement.value.style.height = `${height}px`\n viewport.value.scrollTop\n = contentTopToItemMiddle\n - topEdgeToTriggerMiddle\n + viewport.value.offsetTop\n }\n\n contentWrapperElement.value.style.margin = `${CONTENT_MARGIN}px 0`\n contentWrapperElement.value.style.minHeight = `${minContentHeight}px`\n contentWrapperElement.value.style.maxHeight = `${availableHeight}px`\n // -----------------------------------------------------------------------------------------\n\n emits('placed')\n\n // we don't want the initial scroll position adjustment to trigger \"expand on scroll\"\n // so we explicitly turn it on only after they've registered.\n requestAnimationFrame(() => (shouldExpandOnScrollRef.value = true))\n }\n}\n\n// copy z-index from content to wrapper\nconst contentZIndex = ref('')\n\nonMounted(async () => {\n await nextTick()\n position()\n if (contentElement.value)\n contentZIndex.value = window.getComputedStyle(contentElement.value).zIndex\n})\n\n// When the viewport becomes scrollable at the top, the scroll up button will mount.\n// Because it is part of the normal flow, it will push down the viewport, thus throwing our\n// trigger => selectedItem alignment off by the amount the viewport was pushed down.\n// We wait for this to happen and then re-run the positining logic one more time to account for it.\nfunction handleScrollButtonChange(node: HTMLElement | undefined) {\n if (node && shouldRepositionRef.value === true) {\n position()\n focusSelectedItem?.()\n shouldRepositionRef.value = false\n }\n}\n\n// Resize and position when trigger element changes\nuseResizeObserver(rootContext.triggerElement, () => {\n position()\n})\n\nprovideSelectItemAlignedPositionContext({\n contentWrapper: contentWrapperElement,\n shouldExpandOnScrollRef,\n onScrollButtonChange: handleScrollButtonChange,\n})\n</script>\n\n<template>\n <div\n ref=\"contentWrapperElement\"\n :style=\"{\n display: 'flex',\n flexDirection: 'column',\n position: 'fixed',\n zIndex: contentZIndex,\n }\"\n >\n <Primitive\n :ref=\"forwardRef\"\n :style=\"{\n // When we get the height of the content, it includes borders. If we were to set\n // the height without having `boxSizing: 'border-box'` it would be too big.\n boxSizing: 'border-box',\n // We need to ensure the content doesn't get taller than the wrapper\n maxHeight: '100%',\n }\"\n v-bind=\"{ ...$attrs, ...props }\"\n >\n <slot />\n </Primitive>\n </div>\n</template>\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"SelectItemText.cjs","sources":["../../src/Select/SelectItemText.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { PrimitiveProps } from '@/Primitive'\nimport { useForwardExpose } from '@/shared'\nimport { injectSelectRootContext } from './SelectRoot.vue'\n\nexport interface SelectItemTextProps extends PrimitiveProps {}\n</script>\n\n<script setup lang=\"ts\">\nimport { Primitive } from '@/Primitive'\nimport { computed, onBeforeUnmount, onMounted } from 'vue'\nimport { injectSelectContentContext } from './SelectContentImpl.vue'\nimport { injectSelectItemContext } from './SelectItem.vue'\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<SelectItemTextProps>(), {\n as: 'span',\n})\n\nconst rootContext = injectSelectRootContext()\nconst contentContext = injectSelectContentContext()\nconst itemContext = injectSelectItemContext()\n\nconst { forwardRef, currentElement: itemTextElement } = useForwardExpose()\n\nconst optionProps = computed(() => {\n return {\n value: itemContext.value,\n disabled: itemContext.disabled.value,\n textContent: itemTextElement.value?.textContent ?? itemContext.value?.toString() ?? '',\n }\n})\n\nonMounted(() => {\n if (!itemTextElement.value)\n return\n itemContext.onItemTextChange(itemTextElement.value)\n contentContext.itemTextRefCallback(\n itemTextElement.value,\n itemContext.value,\n itemContext.disabled.value,\n )\n rootContext.onOptionAdd(optionProps.value)\n})\n\nonBeforeUnmount(() => {\n rootContext.onOptionRemove(optionProps.value)\n})\n</script>\n\n<template>\n <Primitive\n :id=\"itemContext.textId\"\n :ref=\"forwardRef\"\n v-bind=\"{ ...props, ...$attrs }\"\n >\n <slot />\n </Primitive>\n</template>\n"],"names":["injectSelectRootContext","injectSelectContentContext","injectSelectItemContext","useForwardExpose","computed","onMounted","onBeforeUnmount"],"mappings":";;;;;;;;;;;;;;;;;;;AAkBA,IAAA,MAAM,KAAQ,GAAA,OAAA;AAId,IAAA,MAAM,cAAcA,yCAAwB,EAAA;AAC5C,IAAA,MAAM,iBAAiBC,mDAA2B,EAAA;AAClD,IAAA,MAAM,cAAcC,yCAAwB,EAAA;AAE5C,IAAA,MAAM,EAAE,UAAA,EAAY,cAAgB,EAAA,eAAA,KAAoBC,wCAAiB,EAAA;AAEzE,IAAM,MAAA,WAAA,GAAcC,aAAS,MAAM;AACjC,MAAO,OAAA;AAAA,QACL,OAAO,WAAY,CAAA,KAAA;AAAA,QACnB,QAAA,EAAU,YAAY,QAAS,CAAA,KAAA;AAAA,QAC/B,aAAa,eAAgB,CAAA,KAAA,EAAO,eAAe,WAAY,CAAA,KAAA,EAAO,UAAc,IAAA;AAAA,OACtF;AAAA,KACD,CAAA;AAED,IAAAC,aAAA,CAAU,MAAM;AACd,MAAA,IAAI,CAAC,eAAgB,CAAA,KAAA;AACnB,QAAA;AACF,MAAY,WAAA,CAAA,gBAAA,CAAiB,gBAAgB,KAAK,CAAA;AAClD,MAAe,cAAA,CAAA,mBAAA;AAAA,QACb,eAAgB,CAAA,KAAA;AAAA,QAChB,WAAY,CAAA,KAAA;AAAA,QACZ,YAAY,QAAS,CAAA;AAAA,OACvB;AACA,MAAY,WAAA,CAAA,WAAA,CAAY,YAAY,KAAK,CAAA;AAAA,KAC1C,CAAA;AAED,IAAAC,mBAAA,CAAgB,MAAM;AACpB,MAAY,WAAA,CAAA,cAAA,CAAe,YAAY,KAAK,CAAA;AAAA,KAC7C,CAAA;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"SelectItemText.cjs","sources":["../../src/Select/SelectItemText.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { PrimitiveProps } from '@/Primitive'\nimport { useForwardExpose } from '@/shared'\nimport { injectSelectRootContext } from './SelectRoot.vue'\n\nexport interface SelectItemTextProps extends PrimitiveProps {}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, onMounted } from 'vue'\nimport { Primitive } from '@/Primitive'\nimport { injectSelectContentContext } from './SelectContentImpl.vue'\nimport { injectSelectItemContext } from './SelectItem.vue'\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<SelectItemTextProps>(), {\n as: 'span',\n})\n\nconst rootContext = injectSelectRootContext()\nconst contentContext = injectSelectContentContext()\nconst itemContext = injectSelectItemContext()\n\nconst { forwardRef, currentElement: itemTextElement } = useForwardExpose()\n\nconst optionProps = computed(() => {\n return {\n value: itemContext.value,\n disabled: itemContext.disabled.value,\n textContent: itemTextElement.value?.textContent ?? itemContext.value?.toString() ?? '',\n }\n})\n\nonMounted(() => {\n if (!itemTextElement.value)\n return\n itemContext.onItemTextChange(itemTextElement.value)\n contentContext.itemTextRefCallback(\n itemTextElement.value,\n itemContext.value,\n itemContext.disabled.value,\n )\n rootContext.onOptionAdd(optionProps.value)\n})\n\nonBeforeUnmount(() => {\n rootContext.onOptionRemove(optionProps.value)\n})\n</script>\n\n<template>\n <Primitive\n :id=\"itemContext.textId\"\n :ref=\"forwardRef\"\n v-bind=\"{ ...props, ...$attrs }\"\n >\n <slot />\n </Primitive>\n</template>\n"],"names":["injectSelectRootContext","injectSelectContentContext","injectSelectItemContext","useForwardExpose","computed","onMounted","onBeforeUnmount"],"mappings":";;;;;;;;;;;;;;;;;;;AAkBA,IAAA,MAAM,KAAQ,GAAA,OAAA;AAId,IAAA,MAAM,cAAcA,yCAAwB,EAAA;AAC5C,IAAA,MAAM,iBAAiBC,mDAA2B,EAAA;AAClD,IAAA,MAAM,cAAcC,yCAAwB,EAAA;AAE5C,IAAA,MAAM,EAAE,UAAA,EAAY,cAAgB,EAAA,eAAA,KAAoBC,wCAAiB,EAAA;AAEzE,IAAM,MAAA,WAAA,GAAcC,aAAS,MAAM;AACjC,MAAO,OAAA;AAAA,QACL,OAAO,WAAY,CAAA,KAAA;AAAA,QACnB,QAAA,EAAU,YAAY,QAAS,CAAA,KAAA;AAAA,QAC/B,aAAa,eAAgB,CAAA,KAAA,EAAO,eAAe,WAAY,CAAA,KAAA,EAAO,UAAc,IAAA;AAAA,OACtF;AAAA,KACD,CAAA;AAED,IAAAC,aAAA,CAAU,MAAM;AACd,MAAA,IAAI,CAAC,eAAgB,CAAA,KAAA;AACnB,QAAA;AACF,MAAY,WAAA,CAAA,gBAAA,CAAiB,gBAAgB,KAAK,CAAA;AAClD,MAAe,cAAA,CAAA,mBAAA;AAAA,QACb,eAAgB,CAAA,KAAA;AAAA,QAChB,WAAY,CAAA,KAAA;AAAA,QACZ,YAAY,QAAS,CAAA;AAAA,OACvB;AACA,MAAY,WAAA,CAAA,WAAA,CAAY,YAAY,KAAK,CAAA;AAAA,KAC1C,CAAA;AAED,IAAAC,mBAAA,CAAgB,MAAM;AACpB,MAAY,WAAA,CAAA,cAAA,CAAe,YAAY,KAAK,CAAA;AAAA,KAC7C,CAAA;;;;;;;;;;;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"SelectItemText.js","sources":["../../src/Select/SelectItemText.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { PrimitiveProps } from '@/Primitive'\nimport { useForwardExpose } from '@/shared'\nimport { injectSelectRootContext } from './SelectRoot.vue'\n\nexport interface SelectItemTextProps extends PrimitiveProps {}\n</script>\n\n<script setup lang=\"ts\">\nimport { Primitive } from '@/Primitive'\nimport { computed, onBeforeUnmount, onMounted } from 'vue'\nimport { injectSelectContentContext } from './SelectContentImpl.vue'\nimport { injectSelectItemContext } from './SelectItem.vue'\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<SelectItemTextProps>(), {\n as: 'span',\n})\n\nconst rootContext = injectSelectRootContext()\nconst contentContext = injectSelectContentContext()\nconst itemContext = injectSelectItemContext()\n\nconst { forwardRef, currentElement: itemTextElement } = useForwardExpose()\n\nconst optionProps = computed(() => {\n return {\n value: itemContext.value,\n disabled: itemContext.disabled.value,\n textContent: itemTextElement.value?.textContent ?? itemContext.value?.toString() ?? '',\n }\n})\n\nonMounted(() => {\n if (!itemTextElement.value)\n return\n itemContext.onItemTextChange(itemTextElement.value)\n contentContext.itemTextRefCallback(\n itemTextElement.value,\n itemContext.value,\n itemContext.disabled.value,\n )\n rootContext.onOptionAdd(optionProps.value)\n})\n\nonBeforeUnmount(() => {\n rootContext.onOptionRemove(optionProps.value)\n})\n</script>\n\n<template>\n <Primitive\n :id=\"itemContext.textId\"\n :ref=\"forwardRef\"\n v-bind=\"{ ...props, ...$attrs }\"\n >\n <slot />\n </Primitive>\n</template>\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAkBA,IAAA,MAAM,KAAQ,GAAA,OAAA;AAId,IAAA,MAAM,cAAc,uBAAwB,EAAA;AAC5C,IAAA,MAAM,iBAAiB,0BAA2B,EAAA;AAClD,IAAA,MAAM,cAAc,uBAAwB,EAAA;AAE5C,IAAA,MAAM,EAAE,UAAA,EAAY,cAAgB,EAAA,eAAA,KAAoB,gBAAiB,EAAA;AAEzE,IAAM,MAAA,WAAA,GAAc,SAAS,MAAM;AACjC,MAAO,OAAA;AAAA,QACL,OAAO,WAAY,CAAA,KAAA;AAAA,QACnB,QAAA,EAAU,YAAY,QAAS,CAAA,KAAA;AAAA,QAC/B,aAAa,eAAgB,CAAA,KAAA,EAAO,eAAe,WAAY,CAAA,KAAA,EAAO,UAAc,IAAA;AAAA,OACtF;AAAA,KACD,CAAA;AAED,IAAA,SAAA,CAAU,MAAM;AACd,MAAA,IAAI,CAAC,eAAgB,CAAA,KAAA;AACnB,QAAA;AACF,MAAY,WAAA,CAAA,gBAAA,CAAiB,gBAAgB,KAAK,CAAA;AAClD,MAAe,cAAA,CAAA,mBAAA;AAAA,QACb,eAAgB,CAAA,KAAA;AAAA,QAChB,WAAY,CAAA,KAAA;AAAA,QACZ,YAAY,QAAS,CAAA;AAAA,OACvB;AACA,MAAY,WAAA,CAAA,WAAA,CAAY,YAAY,KAAK,CAAA;AAAA,KAC1C,CAAA;AAED,IAAA,eAAA,CAAgB,MAAM;AACpB,MAAY,WAAA,CAAA,cAAA,CAAe,YAAY,KAAK,CAAA;AAAA,KAC7C,CAAA;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"SelectItemText.js","sources":["../../src/Select/SelectItemText.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { PrimitiveProps } from '@/Primitive'\nimport { useForwardExpose } from '@/shared'\nimport { injectSelectRootContext } from './SelectRoot.vue'\n\nexport interface SelectItemTextProps extends PrimitiveProps {}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, onMounted } from 'vue'\nimport { Primitive } from '@/Primitive'\nimport { injectSelectContentContext } from './SelectContentImpl.vue'\nimport { injectSelectItemContext } from './SelectItem.vue'\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<SelectItemTextProps>(), {\n as: 'span',\n})\n\nconst rootContext = injectSelectRootContext()\nconst contentContext = injectSelectContentContext()\nconst itemContext = injectSelectItemContext()\n\nconst { forwardRef, currentElement: itemTextElement } = useForwardExpose()\n\nconst optionProps = computed(() => {\n return {\n value: itemContext.value,\n disabled: itemContext.disabled.value,\n textContent: itemTextElement.value?.textContent ?? itemContext.value?.toString() ?? '',\n }\n})\n\nonMounted(() => {\n if (!itemTextElement.value)\n return\n itemContext.onItemTextChange(itemTextElement.value)\n contentContext.itemTextRefCallback(\n itemTextElement.value,\n itemContext.value,\n itemContext.disabled.value,\n )\n rootContext.onOptionAdd(optionProps.value)\n})\n\nonBeforeUnmount(() => {\n rootContext.onOptionRemove(optionProps.value)\n})\n</script>\n\n<template>\n <Primitive\n :id=\"itemContext.textId\"\n :ref=\"forwardRef\"\n v-bind=\"{ ...props, ...$attrs }\"\n >\n <slot />\n </Primitive>\n</template>\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAkBA,IAAA,MAAM,KAAQ,GAAA,OAAA;AAId,IAAA,MAAM,cAAc,uBAAwB,EAAA;AAC5C,IAAA,MAAM,iBAAiB,0BAA2B,EAAA;AAClD,IAAA,MAAM,cAAc,uBAAwB,EAAA;AAE5C,IAAA,MAAM,EAAE,UAAA,EAAY,cAAgB,EAAA,eAAA,KAAoB,gBAAiB,EAAA;AAEzE,IAAM,MAAA,WAAA,GAAc,SAAS,MAAM;AACjC,MAAO,OAAA;AAAA,QACL,OAAO,WAAY,CAAA,KAAA;AAAA,QACnB,QAAA,EAAU,YAAY,QAAS,CAAA,KAAA;AAAA,QAC/B,aAAa,eAAgB,CAAA,KAAA,EAAO,eAAe,WAAY,CAAA,KAAA,EAAO,UAAc,IAAA;AAAA,OACtF;AAAA,KACD,CAAA;AAED,IAAA,SAAA,CAAU,MAAM;AACd,MAAA,IAAI,CAAC,eAAgB,CAAA,KAAA;AACnB,QAAA;AACF,MAAY,WAAA,CAAA,gBAAA,CAAiB,gBAAgB,KAAK,CAAA;AAClD,MAAe,cAAA,CAAA,mBAAA;AAAA,QACb,eAAgB,CAAA,KAAA;AAAA,QAChB,WAAY,CAAA,KAAA;AAAA,QACZ,YAAY,QAAS,CAAA;AAAA,OACvB;AACA,MAAY,WAAA,CAAA,WAAA,CAAY,YAAY,KAAK,CAAA;AAAA,KAC1C,CAAA;AAED,IAAA,eAAA,CAAgB,MAAM;AACpB,MAAY,WAAA,CAAA,cAAA,CAAe,YAAY,KAAK,CAAA;AAAA,KAC7C,CAAA;;;;;;;;;;;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"SelectProvider.cjs","sources":["../../src/Select/SelectProvider.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { AcceptableValue } from '@/shared/types'\nimport type { SelectRootContext } from './SelectRoot.vue'\nimport { provideSelectContentContext, SelectContentDefaultContextValue } from './SelectContentImpl.vue'\nimport { provideSelectRootContext } from './SelectRoot.vue'\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst props = defineProps<{\n context: SelectRootContext<AcceptableValue>\n}>()\n\nprovideSelectRootContext(props.context)\nprovideSelectContentContext(SelectContentDefaultContextValue)\n</script>\n\n<template>\n <slot />\n</template>\n"],"names":["provideSelectRootContext","provideSelectContentContext","SelectContentDefaultContextValue"],"mappings":";;;;;;;;;;;;;;;AAUA,IAAA,MAAM,KAAQ,GAAA,OAAA;AAId,IAAAA,0CAAA,CAAyB,MAAM,OAAO,CAAA;AACtC,IAAAC,oDAAA,CAA4BC,yDAAgC,CAAA;;;;;;;;;"}
1
+ {"version":3,"file":"SelectProvider.cjs","sources":["../../src/Select/SelectProvider.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { SelectRootContext } from './SelectRoot.vue'\nimport type { AcceptableValue } from '@/shared/types'\nimport { provideSelectContentContext, SelectContentDefaultContextValue } from './SelectContentImpl.vue'\nimport { provideSelectRootContext } from './SelectRoot.vue'\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst props = defineProps<{\n context: SelectRootContext<AcceptableValue>\n}>()\n\nprovideSelectRootContext(props.context)\nprovideSelectContentContext(SelectContentDefaultContextValue)\n</script>\n\n<template>\n <slot />\n</template>\n"],"names":["provideSelectRootContext","provideSelectContentContext","SelectContentDefaultContextValue"],"mappings":";;;;;;;;;;;;;;;AAUA,IAAA,MAAM,KAAQ,GAAA,OAAA;AAId,IAAAA,0CAAA,CAAyB,MAAM,OAAO,CAAA;AACtC,IAAAC,oDAAA,CAA4BC,yDAAgC,CAAA;;;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"SelectProvider.js","sources":["../../src/Select/SelectProvider.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { AcceptableValue } from '@/shared/types'\nimport type { SelectRootContext } from './SelectRoot.vue'\nimport { provideSelectContentContext, SelectContentDefaultContextValue } from './SelectContentImpl.vue'\nimport { provideSelectRootContext } from './SelectRoot.vue'\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst props = defineProps<{\n context: SelectRootContext<AcceptableValue>\n}>()\n\nprovideSelectRootContext(props.context)\nprovideSelectContentContext(SelectContentDefaultContextValue)\n</script>\n\n<template>\n <slot />\n</template>\n"],"names":[],"mappings":";;;;;;;;;;;;;AAUA,IAAA,MAAM,KAAQ,GAAA,OAAA;AAId,IAAA,wBAAA,CAAyB,MAAM,OAAO,CAAA;AACtC,IAAA,2BAAA,CAA4B,gCAAgC,CAAA;;;;;;;;;"}
1
+ {"version":3,"file":"SelectProvider.js","sources":["../../src/Select/SelectProvider.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { SelectRootContext } from './SelectRoot.vue'\nimport type { AcceptableValue } from '@/shared/types'\nimport { provideSelectContentContext, SelectContentDefaultContextValue } from './SelectContentImpl.vue'\nimport { provideSelectRootContext } from './SelectRoot.vue'\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst props = defineProps<{\n context: SelectRootContext<AcceptableValue>\n}>()\n\nprovideSelectRootContext(props.context)\nprovideSelectContentContext(SelectContentDefaultContextValue)\n</script>\n\n<template>\n <slot />\n</template>\n"],"names":[],"mappings":";;;;;;;;;;;;;AAUA,IAAA,MAAM,KAAQ,GAAA,OAAA;AAId,IAAA,wBAAA,CAAyB,MAAM,OAAO,CAAA;AACtC,IAAA,2BAAA,CAA4B,gCAAgC,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 Select_BubbleSelect = require('./BubbleSelect.cjs');
7
7
  const Collection_Collection = require('../Collection/Collection.cjs');
8
8
  const Select_utils = require('./utils.cjs');
@@ -40,6 +40,7 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
40
40
  const emits = __emit;
41
41
  const { required, disabled, multiple, dir: propDir } = vue.toRefs(props);
42
42
  const modelValue = core.useVModel(props, "modelValue", emits, {
43
+ // @ts-expect-error Missing infer for AcceptableValue
43
44
  defaultValue: props.defaultValue ?? (multiple.value ? [] : void 0),
44
45
  passive: props.modelValue === void 0,
45
46
  deep: true
@@ -90,6 +91,7 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
90
91
  modelValue,
91
92
  // @ts-expect-error Missing infer for AcceptableValue
92
93
  onValueChange: handleValueChange,
94
+ // @ts-expect-error Missing infer for AcceptableValue
93
95
  by: props.by,
94
96
  open,
95
97
  multiple,