reka-ui 2.2.1 → 2.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (568) hide show
  1. package/dist/Accordion/AccordionItem.cjs.map +1 -1
  2. package/dist/Accordion/AccordionItem.js.map +1 -1
  3. package/dist/Accordion/AccordionRoot.cjs.map +1 -1
  4. package/dist/Accordion/AccordionRoot.js.map +1 -1
  5. package/dist/AlertDialog/AlertDialogCancel.cjs.map +1 -1
  6. package/dist/AlertDialog/AlertDialogCancel.js.map +1 -1
  7. package/dist/AlertDialog/AlertDialogContent.cjs.map +1 -1
  8. package/dist/AlertDialog/AlertDialogContent.js.map +1 -1
  9. package/dist/AspectRatio/AspectRatio.cjs.map +1 -1
  10. package/dist/AspectRatio/AspectRatio.js.map +1 -1
  11. package/dist/Avatar/AvatarFallback.cjs +11 -14
  12. package/dist/Avatar/AvatarFallback.cjs.map +1 -1
  13. package/dist/Avatar/AvatarFallback.js +12 -15
  14. package/dist/Avatar/AvatarFallback.js.map +1 -1
  15. package/dist/Avatar/AvatarImage.cjs +3 -2
  16. package/dist/Avatar/AvatarImage.cjs.map +1 -1
  17. package/dist/Avatar/AvatarImage.js +3 -2
  18. package/dist/Avatar/AvatarImage.js.map +1 -1
  19. package/dist/Avatar/AvatarRoot.cjs +1 -1
  20. package/dist/Avatar/AvatarRoot.cjs.map +1 -1
  21. package/dist/Avatar/AvatarRoot.js +1 -1
  22. package/dist/Avatar/AvatarRoot.js.map +1 -1
  23. package/dist/Avatar/utils.cjs +43 -16
  24. package/dist/Avatar/utils.cjs.map +1 -1
  25. package/dist/Avatar/utils.js +44 -17
  26. package/dist/Avatar/utils.js.map +1 -1
  27. package/dist/Calendar/CalendarCell.cjs +2 -2
  28. package/dist/Calendar/CalendarCell.cjs.map +1 -1
  29. package/dist/Calendar/CalendarCell.js +2 -2
  30. package/dist/Calendar/CalendarCell.js.map +1 -1
  31. package/dist/Calendar/CalendarCellTrigger.cjs +5 -1
  32. package/dist/Calendar/CalendarCellTrigger.cjs.map +1 -1
  33. package/dist/Calendar/CalendarCellTrigger.js +5 -1
  34. package/dist/Calendar/CalendarCellTrigger.js.map +1 -1
  35. package/dist/Calendar/CalendarGrid.cjs.map +1 -1
  36. package/dist/Calendar/CalendarGrid.js.map +1 -1
  37. package/dist/Calendar/CalendarHeading.cjs.map +1 -1
  38. package/dist/Calendar/CalendarHeading.js.map +1 -1
  39. package/dist/Calendar/CalendarNext.cjs.map +1 -1
  40. package/dist/Calendar/CalendarNext.js.map +1 -1
  41. package/dist/Calendar/CalendarPrev.cjs.map +1 -1
  42. package/dist/Calendar/CalendarPrev.js.map +1 -1
  43. package/dist/Calendar/CalendarRoot.cjs +7 -4
  44. package/dist/Calendar/CalendarRoot.cjs.map +1 -1
  45. package/dist/Calendar/CalendarRoot.js +7 -4
  46. package/dist/Calendar/CalendarRoot.js.map +1 -1
  47. package/dist/Calendar/useCalendar.cjs +2 -2
  48. package/dist/Calendar/useCalendar.cjs.map +1 -1
  49. package/dist/Calendar/useCalendar.js +2 -2
  50. package/dist/Calendar/useCalendar.js.map +1 -1
  51. package/dist/Checkbox/CheckboxGroupRoot.cjs.map +1 -1
  52. package/dist/Checkbox/CheckboxGroupRoot.js.map +1 -1
  53. package/dist/Checkbox/CheckboxRoot.cjs.map +1 -1
  54. package/dist/Checkbox/CheckboxRoot.js.map +1 -1
  55. package/dist/Collapsible/CollapsibleContent.cjs.map +1 -1
  56. package/dist/Collapsible/CollapsibleContent.js.map +1 -1
  57. package/dist/Collapsible/CollapsibleRoot.cjs +2 -0
  58. package/dist/Collapsible/CollapsibleRoot.cjs.map +1 -1
  59. package/dist/Collapsible/CollapsibleRoot.js +2 -0
  60. package/dist/Collapsible/CollapsibleRoot.js.map +1 -1
  61. package/dist/Collection/Collection.cjs.map +1 -1
  62. package/dist/Collection/Collection.js.map +1 -1
  63. package/dist/Combobox/ComboboxContentImpl.cjs +1 -1
  64. package/dist/Combobox/ComboboxContentImpl.cjs.map +1 -1
  65. package/dist/Combobox/ComboboxContentImpl.js +1 -1
  66. package/dist/Combobox/ComboboxContentImpl.js.map +1 -1
  67. package/dist/Combobox/ComboboxGroup.cjs.map +1 -1
  68. package/dist/Combobox/ComboboxGroup.js.map +1 -1
  69. package/dist/Combobox/ComboboxInput.cjs.map +1 -1
  70. package/dist/Combobox/ComboboxInput.js.map +1 -1
  71. package/dist/Combobox/ComboboxItem.cjs.map +1 -1
  72. package/dist/Combobox/ComboboxItem.js.map +1 -1
  73. package/dist/Combobox/ComboboxRoot.cjs +1 -2
  74. package/dist/Combobox/ComboboxRoot.cjs.map +1 -1
  75. package/dist/Combobox/ComboboxRoot.js +1 -2
  76. package/dist/Combobox/ComboboxRoot.js.map +1 -1
  77. package/dist/Combobox/ComboboxTrigger.cjs.map +1 -1
  78. package/dist/Combobox/ComboboxTrigger.js.map +1 -1
  79. package/dist/Combobox/ComboboxViewport.cjs.map +1 -1
  80. package/dist/Combobox/ComboboxViewport.js.map +1 -1
  81. package/dist/Combobox/ComboboxVirtualizer.cjs.map +1 -1
  82. package/dist/Combobox/ComboboxVirtualizer.js.map +1 -1
  83. package/dist/ConfigProvider/ConfigProvider.cjs.map +1 -1
  84. package/dist/ConfigProvider/ConfigProvider.js.map +1 -1
  85. package/dist/ContextMenu/ContextMenuContent.cjs.map +1 -1
  86. package/dist/ContextMenu/ContextMenuContent.js.map +1 -1
  87. package/dist/ContextMenu/ContextMenuRoot.cjs.map +1 -1
  88. package/dist/ContextMenu/ContextMenuRoot.js.map +1 -1
  89. package/dist/ContextMenu/ContextMenuSub.cjs +1 -1
  90. package/dist/ContextMenu/ContextMenuSub.cjs.map +1 -1
  91. package/dist/ContextMenu/ContextMenuSub.js +1 -1
  92. package/dist/ContextMenu/ContextMenuSub.js.map +1 -1
  93. package/dist/ContextMenu/ContextMenuTrigger.cjs.map +1 -1
  94. package/dist/ContextMenu/ContextMenuTrigger.js.map +1 -1
  95. package/dist/DateField/DateFieldInput.cjs +1 -0
  96. package/dist/DateField/DateFieldInput.cjs.map +1 -1
  97. package/dist/DateField/DateFieldInput.js +1 -0
  98. package/dist/DateField/DateFieldInput.js.map +1 -1
  99. package/dist/DateField/DateFieldRoot.cjs +7 -1
  100. package/dist/DateField/DateFieldRoot.cjs.map +1 -1
  101. package/dist/DateField/DateFieldRoot.js +7 -1
  102. package/dist/DateField/DateFieldRoot.js.map +1 -1
  103. package/dist/DatePicker/DatePickerCellTrigger.cjs.map +1 -1
  104. package/dist/DatePicker/DatePickerCellTrigger.js.map +1 -1
  105. package/dist/DatePicker/DatePickerContent.cjs +8 -3
  106. package/dist/DatePicker/DatePickerContent.cjs.map +1 -1
  107. package/dist/DatePicker/DatePickerContent.js +9 -4
  108. package/dist/DatePicker/DatePickerContent.js.map +1 -1
  109. package/dist/DatePicker/DatePickerHeading.cjs.map +1 -1
  110. package/dist/DatePicker/DatePickerHeading.js.map +1 -1
  111. package/dist/DatePicker/DatePickerNext.cjs.map +1 -1
  112. package/dist/DatePicker/DatePickerNext.js.map +1 -1
  113. package/dist/DatePicker/DatePickerPrev.cjs.map +1 -1
  114. package/dist/DatePicker/DatePickerPrev.js.map +1 -1
  115. package/dist/DatePicker/DatePickerRoot.cjs +1 -0
  116. package/dist/DatePicker/DatePickerRoot.cjs.map +1 -1
  117. package/dist/DatePicker/DatePickerRoot.js +1 -0
  118. package/dist/DatePicker/DatePickerRoot.js.map +1 -1
  119. package/dist/DateRangeField/DateRangeFieldInput.cjs +1 -0
  120. package/dist/DateRangeField/DateRangeFieldInput.cjs.map +1 -1
  121. package/dist/DateRangeField/DateRangeFieldInput.js +1 -0
  122. package/dist/DateRangeField/DateRangeFieldInput.js.map +1 -1
  123. package/dist/DateRangeField/DateRangeFieldRoot.cjs +13 -9
  124. package/dist/DateRangeField/DateRangeFieldRoot.cjs.map +1 -1
  125. package/dist/DateRangeField/DateRangeFieldRoot.js +13 -9
  126. package/dist/DateRangeField/DateRangeFieldRoot.js.map +1 -1
  127. package/dist/DateRangePicker/DateRangePickerCalendar.cjs +2 -1
  128. package/dist/DateRangePicker/DateRangePickerCalendar.cjs.map +1 -1
  129. package/dist/DateRangePicker/DateRangePickerCalendar.js +2 -1
  130. package/dist/DateRangePicker/DateRangePickerCalendar.js.map +1 -1
  131. package/dist/DateRangePicker/DateRangePickerContent.cjs +8 -3
  132. package/dist/DateRangePicker/DateRangePickerContent.cjs.map +1 -1
  133. package/dist/DateRangePicker/DateRangePickerContent.js +9 -4
  134. package/dist/DateRangePicker/DateRangePickerContent.js.map +1 -1
  135. package/dist/DateRangePicker/DateRangePickerHeading.cjs.map +1 -1
  136. package/dist/DateRangePicker/DateRangePickerHeading.js.map +1 -1
  137. package/dist/DateRangePicker/DateRangePickerNext.cjs.map +1 -1
  138. package/dist/DateRangePicker/DateRangePickerNext.js.map +1 -1
  139. package/dist/DateRangePicker/DateRangePickerPrev.cjs.map +1 -1
  140. package/dist/DateRangePicker/DateRangePickerPrev.js.map +1 -1
  141. package/dist/DateRangePicker/DateRangePickerRoot.cjs +6 -2
  142. package/dist/DateRangePicker/DateRangePickerRoot.cjs.map +1 -1
  143. package/dist/DateRangePicker/DateRangePickerRoot.js +6 -2
  144. package/dist/DateRangePicker/DateRangePickerRoot.js.map +1 -1
  145. package/dist/Dialog/DialogContentImpl.cjs +1 -1
  146. package/dist/Dialog/DialogContentImpl.cjs.map +1 -1
  147. package/dist/Dialog/DialogContentImpl.js +1 -1
  148. package/dist/Dialog/DialogContentImpl.js.map +1 -1
  149. package/dist/Dialog/DialogContentNonModal.cjs.map +1 -1
  150. package/dist/Dialog/DialogContentNonModal.js.map +1 -1
  151. package/dist/Dialog/DialogRoot.cjs +4 -1
  152. package/dist/Dialog/DialogRoot.cjs.map +1 -1
  153. package/dist/Dialog/DialogRoot.js +4 -1
  154. package/dist/Dialog/DialogRoot.js.map +1 -1
  155. package/dist/Dialog/DialogTrigger.cjs.map +1 -1
  156. package/dist/Dialog/DialogTrigger.js.map +1 -1
  157. package/dist/DismissableLayer/DismissableLayer.cjs.map +1 -1
  158. package/dist/DismissableLayer/DismissableLayer.js.map +1 -1
  159. package/dist/DismissableLayer/DismissableLayerBranch.cjs.map +1 -1
  160. package/dist/DismissableLayer/DismissableLayerBranch.js.map +1 -1
  161. package/dist/DismissableLayer/utils.cjs +19 -7
  162. package/dist/DismissableLayer/utils.cjs.map +1 -1
  163. package/dist/DismissableLayer/utils.js +20 -8
  164. package/dist/DismissableLayer/utils.js.map +1 -1
  165. package/dist/DropdownMenu/DropdownMenuContent.cjs.map +1 -1
  166. package/dist/DropdownMenu/DropdownMenuContent.js.map +1 -1
  167. package/dist/DropdownMenu/DropdownMenuRoot.cjs +1 -1
  168. package/dist/DropdownMenu/DropdownMenuRoot.cjs.map +1 -1
  169. package/dist/DropdownMenu/DropdownMenuRoot.js +1 -1
  170. package/dist/DropdownMenu/DropdownMenuRoot.js.map +1 -1
  171. package/dist/DropdownMenu/DropdownMenuSub.cjs +1 -1
  172. package/dist/DropdownMenu/DropdownMenuSub.cjs.map +1 -1
  173. package/dist/DropdownMenu/DropdownMenuSub.js +1 -1
  174. package/dist/DropdownMenu/DropdownMenuSub.js.map +1 -1
  175. package/dist/DropdownMenu/DropdownMenuTrigger.cjs.map +1 -1
  176. package/dist/DropdownMenu/DropdownMenuTrigger.js.map +1 -1
  177. package/dist/Editable/EditableInput.cjs.map +1 -1
  178. package/dist/Editable/EditableInput.js.map +1 -1
  179. package/dist/Editable/EditableRoot.cjs +3 -3
  180. package/dist/Editable/EditableRoot.cjs.map +1 -1
  181. package/dist/Editable/EditableRoot.js +3 -3
  182. package/dist/Editable/EditableRoot.js.map +1 -1
  183. package/dist/FocusScope/FocusScope.cjs.map +1 -1
  184. package/dist/FocusScope/FocusScope.js.map +1 -1
  185. package/dist/HoverCard/HoverCardContentImpl.cjs +1 -1
  186. package/dist/HoverCard/HoverCardContentImpl.cjs.map +1 -1
  187. package/dist/HoverCard/HoverCardContentImpl.js +1 -1
  188. package/dist/HoverCard/HoverCardContentImpl.js.map +1 -1
  189. package/dist/HoverCard/HoverCardRoot.cjs +1 -1
  190. package/dist/HoverCard/HoverCardRoot.cjs.map +1 -1
  191. package/dist/HoverCard/HoverCardRoot.js +1 -1
  192. package/dist/HoverCard/HoverCardRoot.js.map +1 -1
  193. package/dist/Listbox/ListboxFilter.cjs.map +1 -1
  194. package/dist/Listbox/ListboxFilter.js.map +1 -1
  195. package/dist/Listbox/ListboxItem.cjs.map +1 -1
  196. package/dist/Listbox/ListboxItem.js.map +1 -1
  197. package/dist/Listbox/ListboxRoot.cjs +1 -1
  198. package/dist/Listbox/ListboxRoot.cjs.map +1 -1
  199. package/dist/Listbox/ListboxRoot.js +1 -1
  200. package/dist/Listbox/ListboxRoot.js.map +1 -1
  201. package/dist/Listbox/ListboxVirtualizer.cjs +3 -3
  202. package/dist/Listbox/ListboxVirtualizer.cjs.map +1 -1
  203. package/dist/Listbox/ListboxVirtualizer.js +3 -3
  204. package/dist/Listbox/ListboxVirtualizer.js.map +1 -1
  205. package/dist/Menu/MenuCheckboxItem.cjs.map +1 -1
  206. package/dist/Menu/MenuCheckboxItem.js.map +1 -1
  207. package/dist/Menu/MenuContentImpl.cjs +1 -1
  208. package/dist/Menu/MenuContentImpl.cjs.map +1 -1
  209. package/dist/Menu/MenuContentImpl.js +1 -1
  210. package/dist/Menu/MenuContentImpl.js.map +1 -1
  211. package/dist/Menu/MenuItemImpl.cjs.map +1 -1
  212. package/dist/Menu/MenuItemImpl.js.map +1 -1
  213. package/dist/Menu/MenuItemIndicator.cjs.map +1 -1
  214. package/dist/Menu/MenuItemIndicator.js.map +1 -1
  215. package/dist/Menu/MenuRadioGroup.cjs.map +1 -1
  216. package/dist/Menu/MenuRadioGroup.js.map +1 -1
  217. package/dist/Menu/MenuRoot.cjs +1 -1
  218. package/dist/Menu/MenuRoot.cjs.map +1 -1
  219. package/dist/Menu/MenuRoot.js +1 -1
  220. package/dist/Menu/MenuRoot.js.map +1 -1
  221. package/dist/Menu/MenuSub.cjs +1 -1
  222. package/dist/Menu/MenuSub.cjs.map +1 -1
  223. package/dist/Menu/MenuSub.js +1 -1
  224. package/dist/Menu/MenuSub.js.map +1 -1
  225. package/dist/Menu/MenuSubTrigger.cjs.map +1 -1
  226. package/dist/Menu/MenuSubTrigger.js.map +1 -1
  227. package/dist/Menubar/MenubarContent.cjs.map +1 -1
  228. package/dist/Menubar/MenubarContent.js.map +1 -1
  229. package/dist/Menubar/MenubarMenu.cjs.map +1 -1
  230. package/dist/Menubar/MenubarMenu.js.map +1 -1
  231. package/dist/Menubar/MenubarRoot.cjs.map +1 -1
  232. package/dist/Menubar/MenubarRoot.js.map +1 -1
  233. package/dist/Menubar/MenubarSub.cjs +1 -1
  234. package/dist/Menubar/MenubarSub.cjs.map +1 -1
  235. package/dist/Menubar/MenubarSub.js +1 -1
  236. package/dist/Menubar/MenubarSub.js.map +1 -1
  237. package/dist/Menubar/MenubarTrigger.cjs.map +1 -1
  238. package/dist/Menubar/MenubarTrigger.js.map +1 -1
  239. package/dist/NavigationMenu/NavigationMenuContent.cjs.map +1 -1
  240. package/dist/NavigationMenu/NavigationMenuContent.js.map +1 -1
  241. package/dist/NavigationMenu/NavigationMenuContentImpl.cjs +1 -1
  242. package/dist/NavigationMenu/NavigationMenuContentImpl.cjs.map +1 -1
  243. package/dist/NavigationMenu/NavigationMenuContentImpl.js +1 -1
  244. package/dist/NavigationMenu/NavigationMenuContentImpl.js.map +1 -1
  245. package/dist/NavigationMenu/NavigationMenuIndicator.cjs.map +1 -1
  246. package/dist/NavigationMenu/NavigationMenuIndicator.js.map +1 -1
  247. package/dist/NavigationMenu/NavigationMenuItem.cjs.map +1 -1
  248. package/dist/NavigationMenu/NavigationMenuItem.js.map +1 -1
  249. package/dist/NavigationMenu/NavigationMenuList.cjs.map +1 -1
  250. package/dist/NavigationMenu/NavigationMenuList.js.map +1 -1
  251. package/dist/NavigationMenu/NavigationMenuRoot.cjs.map +1 -1
  252. package/dist/NavigationMenu/NavigationMenuRoot.js.map +1 -1
  253. package/dist/NavigationMenu/NavigationMenuSub.cjs.map +1 -1
  254. package/dist/NavigationMenu/NavigationMenuSub.js.map +1 -1
  255. package/dist/NavigationMenu/NavigationMenuTrigger.cjs.map +1 -1
  256. package/dist/NavigationMenu/NavigationMenuTrigger.js.map +1 -1
  257. package/dist/NavigationMenu/NavigationMenuViewport.cjs.map +1 -1
  258. package/dist/NavigationMenu/NavigationMenuViewport.js.map +1 -1
  259. package/dist/NumberField/NumberFieldInput.cjs +2 -2
  260. package/dist/NumberField/NumberFieldInput.cjs.map +1 -1
  261. package/dist/NumberField/NumberFieldInput.js +2 -2
  262. package/dist/NumberField/NumberFieldInput.js.map +1 -1
  263. package/dist/NumberField/NumberFieldRoot.cjs +8 -5
  264. package/dist/NumberField/NumberFieldRoot.cjs.map +1 -1
  265. package/dist/NumberField/NumberFieldRoot.js +8 -5
  266. package/dist/NumberField/NumberFieldRoot.js.map +1 -1
  267. package/dist/Pagination/PaginationFirst.cjs.map +1 -1
  268. package/dist/Pagination/PaginationFirst.js.map +1 -1
  269. package/dist/Pagination/PaginationLast.cjs.map +1 -1
  270. package/dist/Pagination/PaginationLast.js.map +1 -1
  271. package/dist/Pagination/PaginationList.cjs.map +1 -1
  272. package/dist/Pagination/PaginationList.js.map +1 -1
  273. package/dist/Pagination/PaginationListItem.cjs.map +1 -1
  274. package/dist/Pagination/PaginationListItem.js.map +1 -1
  275. package/dist/Pagination/PaginationNext.cjs.map +1 -1
  276. package/dist/Pagination/PaginationNext.js.map +1 -1
  277. package/dist/Pagination/PaginationPrev.cjs.map +1 -1
  278. package/dist/Pagination/PaginationPrev.js.map +1 -1
  279. package/dist/Pagination/PaginationRoot.cjs.map +1 -1
  280. package/dist/Pagination/PaginationRoot.js.map +1 -1
  281. package/dist/PinInput/PinInputInput.cjs +14 -6
  282. package/dist/PinInput/PinInputInput.cjs.map +1 -1
  283. package/dist/PinInput/PinInputInput.js +14 -6
  284. package/dist/PinInput/PinInputInput.js.map +1 -1
  285. package/dist/PinInput/PinInputRoot.cjs +4 -2
  286. package/dist/PinInput/PinInputRoot.cjs.map +1 -1
  287. package/dist/PinInput/PinInputRoot.js +4 -2
  288. package/dist/PinInput/PinInputRoot.js.map +1 -1
  289. package/dist/Popover/PopoverAnchor.cjs.map +1 -1
  290. package/dist/Popover/PopoverAnchor.js.map +1 -1
  291. package/dist/Popover/PopoverContentImpl.cjs +1 -1
  292. package/dist/Popover/PopoverContentImpl.js +1 -1
  293. package/dist/Popover/PopoverContentModal.cjs.map +1 -1
  294. package/dist/Popover/PopoverContentModal.js.map +1 -1
  295. package/dist/Popover/PopoverContentNonModal.cjs.map +1 -1
  296. package/dist/Popover/PopoverContentNonModal.js.map +1 -1
  297. package/dist/Popover/PopoverRoot.cjs +1 -1
  298. package/dist/Popover/PopoverRoot.cjs.map +1 -1
  299. package/dist/Popover/PopoverRoot.js +1 -1
  300. package/dist/Popover/PopoverRoot.js.map +1 -1
  301. package/dist/Popover/PopoverTrigger.cjs.map +1 -1
  302. package/dist/Popover/PopoverTrigger.js.map +1 -1
  303. package/dist/Popper/PopperAnchor.cjs.map +1 -1
  304. package/dist/Popper/PopperAnchor.js.map +1 -1
  305. package/dist/Popper/PopperArrow.cjs.map +1 -1
  306. package/dist/Popper/PopperArrow.js.map +1 -1
  307. package/dist/Popper/PopperContent.cjs.map +1 -1
  308. package/dist/Popper/PopperContent.js.map +1 -1
  309. package/dist/Presence/Presence.cjs.map +1 -1
  310. package/dist/Presence/Presence.js.map +1 -1
  311. package/dist/Presence/usePresence.cjs.map +1 -1
  312. package/dist/Presence/usePresence.js.map +1 -1
  313. package/dist/Primitive/Slot.cjs +1 -9
  314. package/dist/Primitive/Slot.cjs.map +1 -1
  315. package/dist/Primitive/Slot.js +1 -9
  316. package/dist/Primitive/Slot.js.map +1 -1
  317. package/dist/Progress/ProgressRoot.cjs +3 -2
  318. package/dist/Progress/ProgressRoot.cjs.map +1 -1
  319. package/dist/Progress/ProgressRoot.js +3 -2
  320. package/dist/Progress/ProgressRoot.js.map +1 -1
  321. package/dist/RadioGroup/Radio.cjs +2 -0
  322. package/dist/RadioGroup/Radio.cjs.map +1 -1
  323. package/dist/RadioGroup/Radio.js +2 -0
  324. package/dist/RadioGroup/Radio.js.map +1 -1
  325. package/dist/RadioGroup/RadioGroupItem.cjs.map +1 -1
  326. package/dist/RadioGroup/RadioGroupItem.js.map +1 -1
  327. package/dist/RadioGroup/RadioGroupRoot.cjs.map +1 -1
  328. package/dist/RadioGroup/RadioGroupRoot.js.map +1 -1
  329. package/dist/RangeCalendar/RangeCalendarCell.cjs +2 -2
  330. package/dist/RangeCalendar/RangeCalendarCell.cjs.map +1 -1
  331. package/dist/RangeCalendar/RangeCalendarCell.js +2 -2
  332. package/dist/RangeCalendar/RangeCalendarCell.js.map +1 -1
  333. package/dist/RangeCalendar/RangeCalendarCellTrigger.cjs +28 -9
  334. package/dist/RangeCalendar/RangeCalendarCellTrigger.cjs.map +1 -1
  335. package/dist/RangeCalendar/RangeCalendarCellTrigger.js +28 -9
  336. package/dist/RangeCalendar/RangeCalendarCellTrigger.js.map +1 -1
  337. package/dist/RangeCalendar/RangeCalendarGrid.cjs.map +1 -1
  338. package/dist/RangeCalendar/RangeCalendarGrid.js.map +1 -1
  339. package/dist/RangeCalendar/RangeCalendarHeading.cjs.map +1 -1
  340. package/dist/RangeCalendar/RangeCalendarHeading.js.map +1 -1
  341. package/dist/RangeCalendar/RangeCalendarNext.cjs.map +1 -1
  342. package/dist/RangeCalendar/RangeCalendarNext.js.map +1 -1
  343. package/dist/RangeCalendar/RangeCalendarPrev.cjs.map +1 -1
  344. package/dist/RangeCalendar/RangeCalendarPrev.js.map +1 -1
  345. package/dist/RangeCalendar/RangeCalendarRoot.cjs +26 -9
  346. package/dist/RangeCalendar/RangeCalendarRoot.cjs.map +1 -1
  347. package/dist/RangeCalendar/RangeCalendarRoot.js +26 -9
  348. package/dist/RangeCalendar/RangeCalendarRoot.js.map +1 -1
  349. package/dist/RangeCalendar/useRangeCalendar.cjs +21 -4
  350. package/dist/RangeCalendar/useRangeCalendar.cjs.map +1 -1
  351. package/dist/RangeCalendar/useRangeCalendar.js +21 -4
  352. package/dist/RangeCalendar/useRangeCalendar.js.map +1 -1
  353. package/dist/RovingFocus/RovingFocusGroup.cjs +1 -1
  354. package/dist/RovingFocus/RovingFocusGroup.cjs.map +1 -1
  355. package/dist/RovingFocus/RovingFocusGroup.js +1 -1
  356. package/dist/RovingFocus/RovingFocusGroup.js.map +1 -1
  357. package/dist/RovingFocus/RovingFocusItem.cjs.map +1 -1
  358. package/dist/RovingFocus/RovingFocusItem.js.map +1 -1
  359. package/dist/ScrollArea/ScrollAreaCornerImpl.cjs.map +1 -1
  360. package/dist/ScrollArea/ScrollAreaCornerImpl.js.map +1 -1
  361. package/dist/ScrollArea/ScrollAreaRoot.cjs.map +1 -1
  362. package/dist/ScrollArea/ScrollAreaRoot.js.map +1 -1
  363. package/dist/ScrollArea/ScrollAreaScrollbar.cjs.map +1 -1
  364. package/dist/ScrollArea/ScrollAreaScrollbar.js.map +1 -1
  365. package/dist/ScrollArea/ScrollAreaScrollbarAuto.cjs.map +1 -1
  366. package/dist/ScrollArea/ScrollAreaScrollbarAuto.js.map +1 -1
  367. package/dist/ScrollArea/ScrollAreaScrollbarHover.cjs.map +1 -1
  368. package/dist/ScrollArea/ScrollAreaScrollbarHover.js.map +1 -1
  369. package/dist/ScrollArea/ScrollAreaScrollbarImpl.cjs.map +1 -1
  370. package/dist/ScrollArea/ScrollAreaScrollbarImpl.js.map +1 -1
  371. package/dist/ScrollArea/ScrollAreaScrollbarScroll.cjs.map +1 -1
  372. package/dist/ScrollArea/ScrollAreaScrollbarScroll.js.map +1 -1
  373. package/dist/ScrollArea/ScrollAreaScrollbarX.cjs.map +1 -1
  374. package/dist/ScrollArea/ScrollAreaScrollbarX.js.map +1 -1
  375. package/dist/ScrollArea/ScrollAreaScrollbarY.cjs.map +1 -1
  376. package/dist/ScrollArea/ScrollAreaScrollbarY.js.map +1 -1
  377. package/dist/ScrollArea/ScrollAreaThumb.cjs.map +1 -1
  378. package/dist/ScrollArea/ScrollAreaThumb.js.map +1 -1
  379. package/dist/ScrollArea/ScrollAreaViewport.cjs.map +1 -1
  380. package/dist/ScrollArea/ScrollAreaViewport.js.map +1 -1
  381. package/dist/Select/BubbleSelect.cjs.map +1 -1
  382. package/dist/Select/BubbleSelect.js.map +1 -1
  383. package/dist/Select/SelectContent.cjs.map +1 -1
  384. package/dist/Select/SelectContent.js.map +1 -1
  385. package/dist/Select/SelectContentImpl.cjs +2 -2
  386. package/dist/Select/SelectContentImpl.cjs.map +1 -1
  387. package/dist/Select/SelectContentImpl.js +2 -2
  388. package/dist/Select/SelectContentImpl.js.map +1 -1
  389. package/dist/Select/SelectItem.cjs.map +1 -1
  390. package/dist/Select/SelectItem.js.map +1 -1
  391. package/dist/Select/SelectItemAlignedPosition.cjs +1 -1
  392. package/dist/Select/SelectItemAlignedPosition.cjs.map +1 -1
  393. package/dist/Select/SelectItemAlignedPosition.js +1 -1
  394. package/dist/Select/SelectItemAlignedPosition.js.map +1 -1
  395. package/dist/Select/SelectItemText.cjs.map +1 -1
  396. package/dist/Select/SelectItemText.js.map +1 -1
  397. package/dist/Select/SelectProvider.cjs.map +1 -1
  398. package/dist/Select/SelectProvider.js.map +1 -1
  399. package/dist/Select/SelectRoot.cjs +3 -1
  400. package/dist/Select/SelectRoot.cjs.map +1 -1
  401. package/dist/Select/SelectRoot.js +3 -1
  402. package/dist/Select/SelectRoot.js.map +1 -1
  403. package/dist/Select/SelectScrollButtonImpl.cjs.map +1 -1
  404. package/dist/Select/SelectScrollButtonImpl.js.map +1 -1
  405. package/dist/Select/SelectTrigger.cjs.map +1 -1
  406. package/dist/Select/SelectTrigger.js.map +1 -1
  407. package/dist/Select/SelectValue.cjs.map +1 -1
  408. package/dist/Select/SelectValue.js.map +1 -1
  409. package/dist/Select/SelectViewport.cjs.map +1 -1
  410. package/dist/Select/SelectViewport.js.map +1 -1
  411. package/dist/Slider/SliderHorizontal.cjs +7 -4
  412. package/dist/Slider/SliderHorizontal.cjs.map +1 -1
  413. package/dist/Slider/SliderHorizontal.js +7 -4
  414. package/dist/Slider/SliderHorizontal.js.map +1 -1
  415. package/dist/Slider/SliderRange.cjs +2 -2
  416. package/dist/Slider/SliderRange.cjs.map +1 -1
  417. package/dist/Slider/SliderRange.js +2 -2
  418. package/dist/Slider/SliderRange.js.map +1 -1
  419. package/dist/Slider/SliderRoot.cjs.map +1 -1
  420. package/dist/Slider/SliderRoot.js.map +1 -1
  421. package/dist/Slider/SliderThumb.cjs.map +1 -1
  422. package/dist/Slider/SliderThumb.js.map +1 -1
  423. package/dist/Slider/SliderThumbImpl.cjs +3 -3
  424. package/dist/Slider/SliderThumbImpl.cjs.map +1 -1
  425. package/dist/Slider/SliderThumbImpl.js +3 -3
  426. package/dist/Slider/SliderThumbImpl.js.map +1 -1
  427. package/dist/Slider/SliderVertical.cjs +7 -4
  428. package/dist/Slider/SliderVertical.cjs.map +1 -1
  429. package/dist/Slider/SliderVertical.js +7 -4
  430. package/dist/Slider/SliderVertical.js.map +1 -1
  431. package/dist/Slider/utils.cjs +1 -1
  432. package/dist/Slider/utils.cjs.map +1 -1
  433. package/dist/Slider/utils.js +1 -1
  434. package/dist/Slider/utils.js.map +1 -1
  435. package/dist/Splitter/SplitterGroup.cjs.map +1 -1
  436. package/dist/Splitter/SplitterGroup.js.map +1 -1
  437. package/dist/Splitter/SplitterPanel.cjs +16 -10
  438. package/dist/Splitter/SplitterPanel.cjs.map +1 -1
  439. package/dist/Splitter/SplitterPanel.js +16 -10
  440. package/dist/Splitter/SplitterPanel.js.map +1 -1
  441. package/dist/Stepper/StepperIndicator.cjs.map +1 -1
  442. package/dist/Stepper/StepperIndicator.js.map +1 -1
  443. package/dist/Stepper/StepperItem.cjs.map +1 -1
  444. package/dist/Stepper/StepperItem.js.map +1 -1
  445. package/dist/Stepper/StepperRoot.cjs +31 -4
  446. package/dist/Stepper/StepperRoot.cjs.map +1 -1
  447. package/dist/Stepper/StepperRoot.js +31 -4
  448. package/dist/Stepper/StepperRoot.js.map +1 -1
  449. package/dist/Stepper/StepperTrigger.cjs.map +1 -1
  450. package/dist/Stepper/StepperTrigger.js.map +1 -1
  451. package/dist/Switch/SwitchRoot.cjs.map +1 -1
  452. package/dist/Switch/SwitchRoot.js.map +1 -1
  453. package/dist/Tabs/TabsContent.cjs.map +1 -1
  454. package/dist/Tabs/TabsContent.js.map +1 -1
  455. package/dist/Tabs/TabsIndicator.cjs.map +1 -1
  456. package/dist/Tabs/TabsIndicator.js.map +1 -1
  457. package/dist/Tabs/TabsList.cjs.map +1 -1
  458. package/dist/Tabs/TabsList.js.map +1 -1
  459. package/dist/Tabs/TabsRoot.cjs.map +1 -1
  460. package/dist/Tabs/TabsRoot.js.map +1 -1
  461. package/dist/Tabs/TabsTrigger.cjs.map +1 -1
  462. package/dist/Tabs/TabsTrigger.js.map +1 -1
  463. package/dist/TagsInput/TagsInputInput.cjs +1 -0
  464. package/dist/TagsInput/TagsInputInput.cjs.map +1 -1
  465. package/dist/TagsInput/TagsInputInput.js +1 -0
  466. package/dist/TagsInput/TagsInputInput.js.map +1 -1
  467. package/dist/TagsInput/TagsInputItem.cjs.map +1 -1
  468. package/dist/TagsInput/TagsInputItem.js.map +1 -1
  469. package/dist/TagsInput/TagsInputItemDelete.cjs.map +1 -1
  470. package/dist/TagsInput/TagsInputItemDelete.js.map +1 -1
  471. package/dist/TagsInput/TagsInputRoot.cjs +1 -1
  472. package/dist/TagsInput/TagsInputRoot.cjs.map +1 -1
  473. package/dist/TagsInput/TagsInputRoot.js +1 -1
  474. package/dist/TagsInput/TagsInputRoot.js.map +1 -1
  475. package/dist/TimeField/TimeFieldInput.cjs +1 -0
  476. package/dist/TimeField/TimeFieldInput.cjs.map +1 -1
  477. package/dist/TimeField/TimeFieldInput.js +1 -0
  478. package/dist/TimeField/TimeFieldInput.js.map +1 -1
  479. package/dist/TimeField/TimeFieldRoot.cjs +13 -4
  480. package/dist/TimeField/TimeFieldRoot.cjs.map +1 -1
  481. package/dist/TimeField/TimeFieldRoot.js +13 -4
  482. package/dist/TimeField/TimeFieldRoot.js.map +1 -1
  483. package/dist/Toast/ToastAnnounce.cjs.map +1 -1
  484. package/dist/Toast/ToastAnnounce.js.map +1 -1
  485. package/dist/Toast/ToastRoot.cjs.map +1 -1
  486. package/dist/Toast/ToastRoot.js.map +1 -1
  487. package/dist/Toast/ToastRootImpl.cjs +1 -1
  488. package/dist/Toast/ToastRootImpl.cjs.map +1 -1
  489. package/dist/Toast/ToastRootImpl.js +1 -1
  490. package/dist/Toast/ToastRootImpl.js.map +1 -1
  491. package/dist/Toast/ToastViewport.cjs +2 -2
  492. package/dist/Toast/ToastViewport.cjs.map +1 -1
  493. package/dist/Toast/ToastViewport.js +2 -2
  494. package/dist/Toast/ToastViewport.js.map +1 -1
  495. package/dist/Toggle/Toggle.cjs.map +1 -1
  496. package/dist/Toggle/Toggle.js.map +1 -1
  497. package/dist/ToggleGroup/ToggleGroupItem.cjs.map +1 -1
  498. package/dist/ToggleGroup/ToggleGroupItem.js.map +1 -1
  499. package/dist/ToggleGroup/ToggleGroupRoot.cjs.map +1 -1
  500. package/dist/ToggleGroup/ToggleGroupRoot.js.map +1 -1
  501. package/dist/Toolbar/ToolbarRoot.cjs.map +1 -1
  502. package/dist/Toolbar/ToolbarRoot.js.map +1 -1
  503. package/dist/Tooltip/TooltipContentImpl.cjs +2 -2
  504. package/dist/Tooltip/TooltipContentImpl.cjs.map +1 -1
  505. package/dist/Tooltip/TooltipContentImpl.js +2 -2
  506. package/dist/Tooltip/TooltipContentImpl.js.map +1 -1
  507. package/dist/Tooltip/TooltipRoot.cjs +1 -1
  508. package/dist/Tooltip/TooltipRoot.cjs.map +1 -1
  509. package/dist/Tooltip/TooltipRoot.js +1 -1
  510. package/dist/Tooltip/TooltipRoot.js.map +1 -1
  511. package/dist/Tooltip/TooltipTrigger.cjs +1 -1
  512. package/dist/Tooltip/TooltipTrigger.cjs.map +1 -1
  513. package/dist/Tooltip/TooltipTrigger.js +1 -1
  514. package/dist/Tooltip/TooltipTrigger.js.map +1 -1
  515. package/dist/Tree/TreeItem.cjs +4 -1
  516. package/dist/Tree/TreeItem.cjs.map +1 -1
  517. package/dist/Tree/TreeItem.js +4 -1
  518. package/dist/Tree/TreeItem.js.map +1 -1
  519. package/dist/Tree/TreeRoot.cjs +29 -3
  520. package/dist/Tree/TreeRoot.cjs.map +1 -1
  521. package/dist/Tree/TreeRoot.js +29 -3
  522. package/dist/Tree/TreeRoot.js.map +1 -1
  523. package/dist/Tree/TreeVirtualizer.cjs +2 -2
  524. package/dist/Tree/TreeVirtualizer.cjs.map +1 -1
  525. package/dist/Tree/TreeVirtualizer.js +2 -2
  526. package/dist/Tree/TreeVirtualizer.js.map +1 -1
  527. package/dist/Viewport/Viewport.cjs.map +1 -1
  528. package/dist/Viewport/Viewport.js.map +1 -1
  529. package/dist/VisuallyHidden/VisuallyHiddenInputBubble.cjs.map +1 -1
  530. package/dist/VisuallyHidden/VisuallyHiddenInputBubble.js.map +1 -1
  531. package/dist/component/BaseSeparator.cjs.map +1 -1
  532. package/dist/component/BaseSeparator.js.map +1 -1
  533. package/dist/date/calendar.cjs.map +1 -1
  534. package/dist/date/calendar.js.map +1 -1
  535. package/dist/date/parser.cjs +22 -7
  536. package/dist/date/parser.cjs.map +1 -1
  537. package/dist/date/parser.js +23 -8
  538. package/dist/date/parser.js.map +1 -1
  539. package/dist/date/useDateField.cjs +21 -6
  540. package/dist/date/useDateField.cjs.map +1 -1
  541. package/dist/date/useDateField.js +21 -6
  542. package/dist/date/useDateField.js.map +1 -1
  543. package/dist/date/utils.cjs +31 -2
  544. package/dist/date/utils.cjs.map +1 -1
  545. package/dist/date/utils.js +30 -3
  546. package/dist/date/utils.js.map +1 -1
  547. package/dist/index.d.ts +495 -353
  548. package/dist/shared/useBodyScrollLock.cjs +2 -2
  549. package/dist/shared/useBodyScrollLock.cjs.map +1 -1
  550. package/dist/shared/useBodyScrollLock.js +2 -2
  551. package/dist/shared/useBodyScrollLock.js.map +1 -1
  552. package/dist/shared/useDateFormatter.cjs +12 -10
  553. package/dist/shared/useDateFormatter.cjs.map +1 -1
  554. package/dist/shared/useDateFormatter.js +12 -10
  555. package/dist/shared/useDateFormatter.js.map +1 -1
  556. package/dist/shared/useDirection.cjs.map +1 -1
  557. package/dist/shared/useDirection.js.map +1 -1
  558. package/dist/shared/useGraceArea.cjs.map +1 -1
  559. package/dist/shared/useGraceArea.js.map +1 -1
  560. package/dist/shared/useId.cjs +2 -2
  561. package/dist/shared/useId.cjs.map +1 -1
  562. package/dist/shared/useId.js +2 -2
  563. package/dist/shared/useId.js.map +1 -1
  564. package/dist/shared/useLocale.cjs.map +1 -1
  565. package/dist/shared/useLocale.js.map +1 -1
  566. package/dist/shared/useNonce.cjs.map +1 -1
  567. package/dist/shared/useNonce.js.map +1 -1
  568. package/package.json +5 -5
@@ -1 +1 @@
1
- {"version":3,"file":"SelectRoot.cjs","sources":["../../src/Select/SelectRoot.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { AcceptableValue, Direction, FormFieldProps } from '@/shared/types'\nimport type { Ref } from 'vue'\nimport { useCollection } from '@/Collection'\nimport { createContext, isNullish, useDirection, useFormControl } from '@/shared'\nimport { compare } from './utils'\n\nexport interface SelectRootProps<T = AcceptableValue> extends FormFieldProps {\n /** The controlled open state of the Select. Can be bind as `v-model:open`. */\n open?: boolean\n /** The open state of the select when it is initially rendered. Use when you do not need to control its open state. */\n defaultOpen?: boolean\n /** The value of the select when initially rendered. Use when you do not need to control the state of the Select */\n defaultValue?: T | Array<T>\n /** The controlled value of the Select. Can be bind as `v-model`. */\n modelValue?: T | Array<T>\n /** Use this to compare objects by a particular field, or pass your own comparison function for complete control over how objects are compared. */\n by?: string | ((a: T, b: T) => boolean)\n /** The reading direction of the combobox when applicable. <br> If omitted, inherits globally from `ConfigProvider` or assumes LTR (left-to-right) reading mode. */\n dir?: Direction\n /** Whether multiple options can be selected or not. */\n multiple?: boolean\n /** Native html input `autocomplete` attribute. */\n autocomplete?: string\n /** When `true`, prevents the user from interacting with Select */\n disabled?: boolean\n}\n\nexport type SelectRootEmits<T = AcceptableValue> = {\n /** Event handler called when the value changes. */\n 'update:modelValue': [value: T]\n /** Event handler called when the open state of the context menu changes. */\n 'update:open': [value: boolean]\n}\n\nexport interface SelectRootContext<T> {\n triggerElement: Ref<HTMLElement | undefined>\n onTriggerChange: (node: HTMLElement | undefined) => void\n valueElement: Ref<HTMLElement | undefined>\n onValueElementChange: (node: HTMLElement) => void\n contentId: string\n modelValue: Ref<T | Array<T> | undefined>\n onValueChange: (value: T) => void\n open: Ref<boolean>\n multiple: Ref<boolean>\n required?: Ref<boolean>\n by?: string | ((a: T, b: T) => boolean)\n onOpenChange: (open: boolean) => void\n dir: Ref<Direction>\n triggerPointerDownPosRef: Ref<{ x: number, y: number } | null>\n isEmptyModelValue: Ref<boolean>\n disabled?: Ref<boolean>\n\n optionsSet: Ref<Set<SelectOption>>\n onOptionAdd: (option: SelectOption) => void\n onOptionRemove: (option: SelectOption) => void\n}\n\nexport const [injectSelectRootContext, provideSelectRootContext]\n = createContext<SelectRootContext<AcceptableValue>>('SelectRoot')\n\ninterface SelectOption { value: any, disabled?: boolean, textContent: string }\n</script>\n\n<script setup lang=\"ts\" generic=\"T extends AcceptableValue = AcceptableValue\">\nimport { PopperRoot } from '@/Popper'\nimport { useVModel } from '@vueuse/core'\nimport { computed, ref, toRefs } from 'vue'\nimport BubbleSelect from './BubbleSelect.vue'\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<SelectRootProps>(), {\n modelValue: undefined,\n open: undefined,\n})\nconst emits = defineEmits<SelectRootEmits>()\n\ndefineSlots<{\n default: (props: {\n /** Current input values */\n modelValue: typeof modelValue.value\n /** Current open state */\n open: typeof open.value\n }) => any\n}>()\n\nconst { required, disabled, multiple, dir: propDir } = toRefs(props)\n\nconst modelValue = useVModel(props, 'modelValue', emits, {\n defaultValue: props.defaultValue ?? (multiple.value ? [] : undefined),\n passive: (props.modelValue === undefined) as false,\n deep: true,\n}) as Ref<T | T[] | undefined>\n\nconst open = useVModel(props, 'open', emits, {\n defaultValue: props.defaultOpen,\n passive: (props.open === undefined) as false,\n}) as Ref<boolean>\n\nconst triggerElement = ref<HTMLElement>()\nconst valueElement = ref<HTMLElement>()\nconst triggerPointerDownPosRef = ref({\n x: 0,\n y: 0,\n})\n\nconst isEmptyModelValue = computed(() => {\n if (multiple.value && Array.isArray(modelValue.value))\n return modelValue.value?.length === 0\n else\n return isNullish(modelValue.value)\n})\n\nuseCollection({ isProvider: true })\nconst dir = useDirection(propDir)\n\nconst isFormControl = useFormControl(triggerElement)\nconst optionsSet = ref<Set<SelectOption>>(new Set())\n\n// The native `select` only associates the correct default value if the corresponding\n// `option` is rendered as a child **at the same time** as itself.\n// Because it might take a few renders for our items to gather the information to build\n// the native `option`(s), we generate a key on the `select` to make sure Vue re-builds it\n// each time the options change.\nconst nativeSelectKey = computed(() => {\n return Array.from(optionsSet.value)\n .map(option => option.value)\n .join(';')\n})\n\nfunction handleValueChange(value: T) {\n if (multiple.value) {\n const array = Array.isArray(modelValue.value) ? [...modelValue.value] : []\n const index = array.findIndex(i => compare(i, value, props.by))\n index === -1 ? array.push(value) : array.splice(index, 1)\n modelValue.value = [...array]\n }\n else {\n modelValue.value = value\n }\n}\n\nprovideSelectRootContext({\n triggerElement,\n onTriggerChange: (node) => {\n triggerElement.value = node\n },\n valueElement,\n onValueElementChange: (node) => {\n valueElement.value = node\n },\n contentId: '',\n modelValue,\n // @ts-expect-error Missing infer for AcceptableValue\n onValueChange: handleValueChange,\n by: props.by,\n open,\n multiple,\n required,\n onOpenChange: (value) => {\n open.value = value\n },\n dir,\n triggerPointerDownPosRef,\n disabled,\n isEmptyModelValue,\n\n optionsSet,\n onOptionAdd: option => optionsSet.value.add(option),\n onOptionRemove: option => optionsSet.value.delete(option),\n})\n</script>\n\n<template>\n <PopperRoot>\n <slot\n :model-value=\"modelValue\"\n :open=\"open\"\n />\n\n <BubbleSelect\n v-if=\"isFormControl\"\n :key=\"nativeSelectKey\"\n aria-hidden=\"true\"\n tabindex=\"-1\"\n :multiple=\"multiple\"\n :required=\"required\"\n :name=\"name\"\n :autocomplete=\"autocomplete\"\n :disabled=\"disabled\"\n :value=\"modelValue\"\n >\n <option\n v-if=\"isNullish(modelValue)\"\n value=\"\"\n />\n <option\n v-for=\"option in Array.from(optionsSet)\"\n :key=\"option.value ?? ''\"\n v-bind=\"option\"\n />\n </BubbleSelect>\n </PopperRoot>\n</template>\n"],"names":["createContext","toRefs","useVModel","ref","computed","isNullish","useCollection","useDirection","useFormControl","compare"],"mappings":"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"}
1
+ {"version":3,"file":"SelectRoot.cjs","sources":["../../src/Select/SelectRoot.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { Ref } from 'vue'\nimport type { AcceptableValue, Direction, FormFieldProps } from '@/shared/types'\nimport { useCollection } from '@/Collection'\nimport { createContext, isNullish, useDirection, useFormControl } from '@/shared'\nimport { compare } from './utils'\n\nexport interface SelectRootProps<T = AcceptableValue> extends FormFieldProps {\n /** The controlled open state of the Select. Can be bind as `v-model:open`. */\n open?: boolean\n /** The open state of the select when it is initially rendered. Use when you do not need to control its open state. */\n defaultOpen?: boolean\n /** The value of the select when initially rendered. Use when you do not need to control the state of the Select */\n defaultValue?: T | Array<T>\n /** The controlled value of the Select. Can be bind as `v-model`. */\n modelValue?: T | Array<T>\n /** Use this to compare objects by a particular field, or pass your own comparison function for complete control over how objects are compared. */\n by?: string | ((a: T, b: T) => boolean)\n /** The reading direction of the combobox when applicable. <br> If omitted, inherits globally from `ConfigProvider` or assumes LTR (left-to-right) reading mode. */\n dir?: Direction\n /** Whether multiple options can be selected or not. */\n multiple?: boolean\n /** Native html input `autocomplete` attribute. */\n autocomplete?: string\n /** When `true`, prevents the user from interacting with Select */\n disabled?: boolean\n}\n\nexport type SelectRootEmits<T = AcceptableValue> = {\n /** Event handler called when the value changes. */\n 'update:modelValue': [value: T]\n /** Event handler called when the open state of the context menu changes. */\n 'update:open': [value: boolean]\n}\n\nexport interface SelectRootContext<T> {\n triggerElement: Ref<HTMLElement | undefined>\n onTriggerChange: (node: HTMLElement | undefined) => void\n valueElement: Ref<HTMLElement | undefined>\n onValueElementChange: (node: HTMLElement) => void\n contentId: string\n modelValue: Ref<T | Array<T> | undefined>\n onValueChange: (value: T) => void\n open: Ref<boolean>\n multiple: Ref<boolean>\n required?: Ref<boolean>\n by?: string | ((a: T, b: T) => boolean)\n onOpenChange: (open: boolean) => void\n dir: Ref<Direction>\n triggerPointerDownPosRef: Ref<{ x: number, y: number } | null>\n isEmptyModelValue: Ref<boolean>\n disabled?: Ref<boolean>\n\n optionsSet: Ref<Set<SelectOption>>\n onOptionAdd: (option: SelectOption) => void\n onOptionRemove: (option: SelectOption) => void\n}\n\nexport const [injectSelectRootContext, provideSelectRootContext]\n = createContext<SelectRootContext<AcceptableValue>>('SelectRoot')\n\ninterface SelectOption { value: any, disabled?: boolean, textContent: string }\n</script>\n\n<script setup lang=\"ts\" generic=\"T extends AcceptableValue = AcceptableValue\">\nimport { useVModel } from '@vueuse/core'\nimport { computed, ref, toRefs } from 'vue'\nimport { PopperRoot } from '@/Popper'\nimport BubbleSelect from './BubbleSelect.vue'\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<SelectRootProps<T>>(), {\n modelValue: undefined,\n open: undefined,\n})\nconst emits = defineEmits<SelectRootEmits<T>>()\n\ndefineSlots<{\n default?: (props: {\n /** Current input values */\n modelValue: typeof modelValue.value\n /** Current open state */\n open: typeof open.value\n }) => any\n}>()\n\nconst { required, disabled, multiple, dir: propDir } = toRefs(props)\n\nconst modelValue = useVModel(props, 'modelValue', emits, {\n // @ts-expect-error Missing infer for AcceptableValue\n defaultValue: props.defaultValue ?? (multiple.value ? [] : undefined),\n passive: (props.modelValue === undefined) as false,\n deep: true,\n}) as Ref<T | T[] | undefined>\n\nconst open = useVModel(props, 'open', emits, {\n defaultValue: props.defaultOpen,\n passive: (props.open === undefined) as false,\n}) as Ref<boolean>\n\nconst triggerElement = ref<HTMLElement>()\nconst valueElement = ref<HTMLElement>()\nconst triggerPointerDownPosRef = ref({\n x: 0,\n y: 0,\n})\n\nconst isEmptyModelValue = computed(() => {\n if (multiple.value && Array.isArray(modelValue.value))\n return modelValue.value?.length === 0\n else\n return isNullish(modelValue.value)\n})\n\nuseCollection({ isProvider: true })\nconst dir = useDirection(propDir)\n\nconst isFormControl = useFormControl(triggerElement)\nconst optionsSet = ref<Set<SelectOption>>(new Set())\n\n// The native `select` only associates the correct default value if the corresponding\n// `option` is rendered as a child **at the same time** as itself.\n// Because it might take a few renders for our items to gather the information to build\n// the native `option`(s), we generate a key on the `select` to make sure Vue re-builds it\n// each time the options change.\nconst nativeSelectKey = computed(() => {\n return Array.from(optionsSet.value)\n .map(option => option.value)\n .join(';')\n})\n\nfunction handleValueChange(value: T) {\n if (multiple.value) {\n const array = Array.isArray(modelValue.value) ? [...modelValue.value] : []\n const index = array.findIndex(i => compare(i, value, props.by))\n index === -1 ? array.push(value) : array.splice(index, 1)\n modelValue.value = [...array]\n }\n else {\n modelValue.value = value\n }\n}\n\nprovideSelectRootContext({\n triggerElement,\n onTriggerChange: (node) => {\n triggerElement.value = node\n },\n valueElement,\n onValueElementChange: (node) => {\n valueElement.value = node\n },\n contentId: '',\n modelValue,\n // @ts-expect-error Missing infer for AcceptableValue\n onValueChange: handleValueChange,\n // @ts-expect-error Missing infer for AcceptableValue\n by: props.by,\n open,\n multiple,\n required,\n onOpenChange: (value) => {\n open.value = value\n },\n dir,\n triggerPointerDownPosRef,\n disabled,\n isEmptyModelValue,\n\n optionsSet,\n onOptionAdd: option => optionsSet.value.add(option),\n onOptionRemove: option => optionsSet.value.delete(option),\n})\n</script>\n\n<template>\n <PopperRoot>\n <slot\n :model-value=\"modelValue\"\n :open=\"open\"\n />\n\n <BubbleSelect\n v-if=\"isFormControl\"\n :key=\"nativeSelectKey\"\n aria-hidden=\"true\"\n tabindex=\"-1\"\n :multiple=\"multiple\"\n :required=\"required\"\n :name=\"name\"\n :autocomplete=\"autocomplete\"\n :disabled=\"disabled\"\n :value=\"modelValue\"\n >\n <option\n v-if=\"isNullish(modelValue)\"\n value=\"\"\n />\n <option\n v-for=\"option in Array.from(optionsSet)\"\n :key=\"option.value ?? ''\"\n v-bind=\"option\"\n />\n </BubbleSelect>\n </PopperRoot>\n</template>\n"],"names":["createContext","toRefs","useVModel","ref","computed","isNullish","useCollection","useDirection","useFormControl","compare"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { defineComponent, toRefs, ref, computed, createBlock, openBlock, unref, withCtx, renderSlot, createCommentVNode, createElementBlock, Fragment, renderList, mergeProps } from 'vue';
2
- import { _ as _sfc_main$1 } from '../Popper/PopperRoot.js';
3
2
  import { useVModel } from '@vueuse/core';
3
+ import { _ as _sfc_main$1 } from '../Popper/PopperRoot.js';
4
4
  import { _ as _sfc_main$2 } from './BubbleSelect.js';
5
5
  import { u as useCollection } from '../Collection/Collection.js';
6
6
  import { c as compare } from './utils.js';
@@ -38,6 +38,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
38
38
  const emits = __emit;
39
39
  const { required, disabled, multiple, dir: propDir } = toRefs(props);
40
40
  const modelValue = useVModel(props, "modelValue", emits, {
41
+ // @ts-expect-error Missing infer for AcceptableValue
41
42
  defaultValue: props.defaultValue ?? (multiple.value ? [] : void 0),
42
43
  passive: props.modelValue === void 0,
43
44
  deep: true
@@ -88,6 +89,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
88
89
  modelValue,
89
90
  // @ts-expect-error Missing infer for AcceptableValue
90
91
  onValueChange: handleValueChange,
92
+ // @ts-expect-error Missing infer for AcceptableValue
91
93
  by: props.by,
92
94
  open,
93
95
  multiple,
@@ -1 +1 @@
1
- {"version":3,"file":"SelectRoot.js","sources":["../../src/Select/SelectRoot.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { AcceptableValue, Direction, FormFieldProps } from '@/shared/types'\nimport type { Ref } from 'vue'\nimport { useCollection } from '@/Collection'\nimport { createContext, isNullish, useDirection, useFormControl } from '@/shared'\nimport { compare } from './utils'\n\nexport interface SelectRootProps<T = AcceptableValue> extends FormFieldProps {\n /** The controlled open state of the Select. Can be bind as `v-model:open`. */\n open?: boolean\n /** The open state of the select when it is initially rendered. Use when you do not need to control its open state. */\n defaultOpen?: boolean\n /** The value of the select when initially rendered. Use when you do not need to control the state of the Select */\n defaultValue?: T | Array<T>\n /** The controlled value of the Select. Can be bind as `v-model`. */\n modelValue?: T | Array<T>\n /** Use this to compare objects by a particular field, or pass your own comparison function for complete control over how objects are compared. */\n by?: string | ((a: T, b: T) => boolean)\n /** The reading direction of the combobox when applicable. <br> If omitted, inherits globally from `ConfigProvider` or assumes LTR (left-to-right) reading mode. */\n dir?: Direction\n /** Whether multiple options can be selected or not. */\n multiple?: boolean\n /** Native html input `autocomplete` attribute. */\n autocomplete?: string\n /** When `true`, prevents the user from interacting with Select */\n disabled?: boolean\n}\n\nexport type SelectRootEmits<T = AcceptableValue> = {\n /** Event handler called when the value changes. */\n 'update:modelValue': [value: T]\n /** Event handler called when the open state of the context menu changes. */\n 'update:open': [value: boolean]\n}\n\nexport interface SelectRootContext<T> {\n triggerElement: Ref<HTMLElement | undefined>\n onTriggerChange: (node: HTMLElement | undefined) => void\n valueElement: Ref<HTMLElement | undefined>\n onValueElementChange: (node: HTMLElement) => void\n contentId: string\n modelValue: Ref<T | Array<T> | undefined>\n onValueChange: (value: T) => void\n open: Ref<boolean>\n multiple: Ref<boolean>\n required?: Ref<boolean>\n by?: string | ((a: T, b: T) => boolean)\n onOpenChange: (open: boolean) => void\n dir: Ref<Direction>\n triggerPointerDownPosRef: Ref<{ x: number, y: number } | null>\n isEmptyModelValue: Ref<boolean>\n disabled?: Ref<boolean>\n\n optionsSet: Ref<Set<SelectOption>>\n onOptionAdd: (option: SelectOption) => void\n onOptionRemove: (option: SelectOption) => void\n}\n\nexport const [injectSelectRootContext, provideSelectRootContext]\n = createContext<SelectRootContext<AcceptableValue>>('SelectRoot')\n\ninterface SelectOption { value: any, disabled?: boolean, textContent: string }\n</script>\n\n<script setup lang=\"ts\" generic=\"T extends AcceptableValue = AcceptableValue\">\nimport { PopperRoot } from '@/Popper'\nimport { useVModel } from '@vueuse/core'\nimport { computed, ref, toRefs } from 'vue'\nimport BubbleSelect from './BubbleSelect.vue'\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<SelectRootProps>(), {\n modelValue: undefined,\n open: undefined,\n})\nconst emits = defineEmits<SelectRootEmits>()\n\ndefineSlots<{\n default: (props: {\n /** Current input values */\n modelValue: typeof modelValue.value\n /** Current open state */\n open: typeof open.value\n }) => any\n}>()\n\nconst { required, disabled, multiple, dir: propDir } = toRefs(props)\n\nconst modelValue = useVModel(props, 'modelValue', emits, {\n defaultValue: props.defaultValue ?? (multiple.value ? [] : undefined),\n passive: (props.modelValue === undefined) as false,\n deep: true,\n}) as Ref<T | T[] | undefined>\n\nconst open = useVModel(props, 'open', emits, {\n defaultValue: props.defaultOpen,\n passive: (props.open === undefined) as false,\n}) as Ref<boolean>\n\nconst triggerElement = ref<HTMLElement>()\nconst valueElement = ref<HTMLElement>()\nconst triggerPointerDownPosRef = ref({\n x: 0,\n y: 0,\n})\n\nconst isEmptyModelValue = computed(() => {\n if (multiple.value && Array.isArray(modelValue.value))\n return modelValue.value?.length === 0\n else\n return isNullish(modelValue.value)\n})\n\nuseCollection({ isProvider: true })\nconst dir = useDirection(propDir)\n\nconst isFormControl = useFormControl(triggerElement)\nconst optionsSet = ref<Set<SelectOption>>(new Set())\n\n// The native `select` only associates the correct default value if the corresponding\n// `option` is rendered as a child **at the same time** as itself.\n// Because it might take a few renders for our items to gather the information to build\n// the native `option`(s), we generate a key on the `select` to make sure Vue re-builds it\n// each time the options change.\nconst nativeSelectKey = computed(() => {\n return Array.from(optionsSet.value)\n .map(option => option.value)\n .join(';')\n})\n\nfunction handleValueChange(value: T) {\n if (multiple.value) {\n const array = Array.isArray(modelValue.value) ? [...modelValue.value] : []\n const index = array.findIndex(i => compare(i, value, props.by))\n index === -1 ? array.push(value) : array.splice(index, 1)\n modelValue.value = [...array]\n }\n else {\n modelValue.value = value\n }\n}\n\nprovideSelectRootContext({\n triggerElement,\n onTriggerChange: (node) => {\n triggerElement.value = node\n },\n valueElement,\n onValueElementChange: (node) => {\n valueElement.value = node\n },\n contentId: '',\n modelValue,\n // @ts-expect-error Missing infer for AcceptableValue\n onValueChange: handleValueChange,\n by: props.by,\n open,\n multiple,\n required,\n onOpenChange: (value) => {\n open.value = value\n },\n dir,\n triggerPointerDownPosRef,\n disabled,\n isEmptyModelValue,\n\n optionsSet,\n onOptionAdd: option => optionsSet.value.add(option),\n onOptionRemove: option => optionsSet.value.delete(option),\n})\n</script>\n\n<template>\n <PopperRoot>\n <slot\n :model-value=\"modelValue\"\n :open=\"open\"\n />\n\n <BubbleSelect\n v-if=\"isFormControl\"\n :key=\"nativeSelectKey\"\n aria-hidden=\"true\"\n tabindex=\"-1\"\n :multiple=\"multiple\"\n :required=\"required\"\n :name=\"name\"\n :autocomplete=\"autocomplete\"\n :disabled=\"disabled\"\n :value=\"modelValue\"\n >\n <option\n v-if=\"isNullish(modelValue)\"\n value=\"\"\n />\n <option\n v-for=\"option in Array.from(optionsSet)\"\n :key=\"option.value ?? ''\"\n v-bind=\"option\"\n />\n </BubbleSelect>\n </PopperRoot>\n</template>\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SelectRoot.js","sources":["../../src/Select/SelectRoot.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { Ref } from 'vue'\nimport type { AcceptableValue, Direction, FormFieldProps } from '@/shared/types'\nimport { useCollection } from '@/Collection'\nimport { createContext, isNullish, useDirection, useFormControl } from '@/shared'\nimport { compare } from './utils'\n\nexport interface SelectRootProps<T = AcceptableValue> extends FormFieldProps {\n /** The controlled open state of the Select. Can be bind as `v-model:open`. */\n open?: boolean\n /** The open state of the select when it is initially rendered. Use when you do not need to control its open state. */\n defaultOpen?: boolean\n /** The value of the select when initially rendered. Use when you do not need to control the state of the Select */\n defaultValue?: T | Array<T>\n /** The controlled value of the Select. Can be bind as `v-model`. */\n modelValue?: T | Array<T>\n /** Use this to compare objects by a particular field, or pass your own comparison function for complete control over how objects are compared. */\n by?: string | ((a: T, b: T) => boolean)\n /** The reading direction of the combobox when applicable. <br> If omitted, inherits globally from `ConfigProvider` or assumes LTR (left-to-right) reading mode. */\n dir?: Direction\n /** Whether multiple options can be selected or not. */\n multiple?: boolean\n /** Native html input `autocomplete` attribute. */\n autocomplete?: string\n /** When `true`, prevents the user from interacting with Select */\n disabled?: boolean\n}\n\nexport type SelectRootEmits<T = AcceptableValue> = {\n /** Event handler called when the value changes. */\n 'update:modelValue': [value: T]\n /** Event handler called when the open state of the context menu changes. */\n 'update:open': [value: boolean]\n}\n\nexport interface SelectRootContext<T> {\n triggerElement: Ref<HTMLElement | undefined>\n onTriggerChange: (node: HTMLElement | undefined) => void\n valueElement: Ref<HTMLElement | undefined>\n onValueElementChange: (node: HTMLElement) => void\n contentId: string\n modelValue: Ref<T | Array<T> | undefined>\n onValueChange: (value: T) => void\n open: Ref<boolean>\n multiple: Ref<boolean>\n required?: Ref<boolean>\n by?: string | ((a: T, b: T) => boolean)\n onOpenChange: (open: boolean) => void\n dir: Ref<Direction>\n triggerPointerDownPosRef: Ref<{ x: number, y: number } | null>\n isEmptyModelValue: Ref<boolean>\n disabled?: Ref<boolean>\n\n optionsSet: Ref<Set<SelectOption>>\n onOptionAdd: (option: SelectOption) => void\n onOptionRemove: (option: SelectOption) => void\n}\n\nexport const [injectSelectRootContext, provideSelectRootContext]\n = createContext<SelectRootContext<AcceptableValue>>('SelectRoot')\n\ninterface SelectOption { value: any, disabled?: boolean, textContent: string }\n</script>\n\n<script setup lang=\"ts\" generic=\"T extends AcceptableValue = AcceptableValue\">\nimport { useVModel } from '@vueuse/core'\nimport { computed, ref, toRefs } from 'vue'\nimport { PopperRoot } from '@/Popper'\nimport BubbleSelect from './BubbleSelect.vue'\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<SelectRootProps<T>>(), {\n modelValue: undefined,\n open: undefined,\n})\nconst emits = defineEmits<SelectRootEmits<T>>()\n\ndefineSlots<{\n default?: (props: {\n /** Current input values */\n modelValue: typeof modelValue.value\n /** Current open state */\n open: typeof open.value\n }) => any\n}>()\n\nconst { required, disabled, multiple, dir: propDir } = toRefs(props)\n\nconst modelValue = useVModel(props, 'modelValue', emits, {\n // @ts-expect-error Missing infer for AcceptableValue\n defaultValue: props.defaultValue ?? (multiple.value ? [] : undefined),\n passive: (props.modelValue === undefined) as false,\n deep: true,\n}) as Ref<T | T[] | undefined>\n\nconst open = useVModel(props, 'open', emits, {\n defaultValue: props.defaultOpen,\n passive: (props.open === undefined) as false,\n}) as Ref<boolean>\n\nconst triggerElement = ref<HTMLElement>()\nconst valueElement = ref<HTMLElement>()\nconst triggerPointerDownPosRef = ref({\n x: 0,\n y: 0,\n})\n\nconst isEmptyModelValue = computed(() => {\n if (multiple.value && Array.isArray(modelValue.value))\n return modelValue.value?.length === 0\n else\n return isNullish(modelValue.value)\n})\n\nuseCollection({ isProvider: true })\nconst dir = useDirection(propDir)\n\nconst isFormControl = useFormControl(triggerElement)\nconst optionsSet = ref<Set<SelectOption>>(new Set())\n\n// The native `select` only associates the correct default value if the corresponding\n// `option` is rendered as a child **at the same time** as itself.\n// Because it might take a few renders for our items to gather the information to build\n// the native `option`(s), we generate a key on the `select` to make sure Vue re-builds it\n// each time the options change.\nconst nativeSelectKey = computed(() => {\n return Array.from(optionsSet.value)\n .map(option => option.value)\n .join(';')\n})\n\nfunction handleValueChange(value: T) {\n if (multiple.value) {\n const array = Array.isArray(modelValue.value) ? [...modelValue.value] : []\n const index = array.findIndex(i => compare(i, value, props.by))\n index === -1 ? array.push(value) : array.splice(index, 1)\n modelValue.value = [...array]\n }\n else {\n modelValue.value = value\n }\n}\n\nprovideSelectRootContext({\n triggerElement,\n onTriggerChange: (node) => {\n triggerElement.value = node\n },\n valueElement,\n onValueElementChange: (node) => {\n valueElement.value = node\n },\n contentId: '',\n modelValue,\n // @ts-expect-error Missing infer for AcceptableValue\n onValueChange: handleValueChange,\n // @ts-expect-error Missing infer for AcceptableValue\n by: props.by,\n open,\n multiple,\n required,\n onOpenChange: (value) => {\n open.value = value\n },\n dir,\n triggerPointerDownPosRef,\n disabled,\n isEmptyModelValue,\n\n optionsSet,\n onOptionAdd: option => optionsSet.value.add(option),\n onOptionRemove: option => optionsSet.value.delete(option),\n})\n</script>\n\n<template>\n <PopperRoot>\n <slot\n :model-value=\"modelValue\"\n :open=\"open\"\n />\n\n <BubbleSelect\n v-if=\"isFormControl\"\n :key=\"nativeSelectKey\"\n aria-hidden=\"true\"\n tabindex=\"-1\"\n :multiple=\"multiple\"\n :required=\"required\"\n :name=\"name\"\n :autocomplete=\"autocomplete\"\n :disabled=\"disabled\"\n :value=\"modelValue\"\n >\n <option\n v-if=\"isNullish(modelValue)\"\n value=\"\"\n />\n <option\n v-for=\"option in Array.from(optionsSet)\"\n :key=\"option.value ?? ''\"\n v-bind=\"option\"\n />\n </BubbleSelect>\n </PopperRoot>\n</template>\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"SelectScrollButtonImpl.cjs","sources":["../../src/Select/SelectScrollButtonImpl.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { useCollection } from '@/Collection'\nimport { Primitive } from '@/Primitive'\nimport { getActiveElement } from '@/shared'\nimport { onBeforeUnmount, ref, watchEffect } from 'vue'\nimport { injectSelectContentContext } from './SelectContentImpl.vue'\n\nexport type SelectScrollButtonImplEmits = {\n autoScroll: []\n}\n\nconst emits = defineEmits<SelectScrollButtonImplEmits>()\nconst { getItems } = useCollection()\n\nconst contentContext = injectSelectContentContext()\nconst autoScrollTimerRef = ref<number | null>(null)\n\nfunction clearAutoScrollTimer() {\n if (autoScrollTimerRef.value !== null) {\n window.clearInterval(autoScrollTimerRef.value)\n autoScrollTimerRef.value = null\n }\n}\n\nwatchEffect(() => {\n const activeItem = getItems().map(i => i.ref).find(\n item => item === getActiveElement(),\n )\n activeItem?.scrollIntoView({ block: 'nearest' })\n})\n\nfunction handlePointerDown() {\n if (autoScrollTimerRef.value === null) {\n autoScrollTimerRef.value = window.setInterval(() => {\n emits('autoScroll')\n }, 50)\n }\n}\n\nfunction handlePointerMove() {\n contentContext.onItemLeave?.()\n if (autoScrollTimerRef.value === null) {\n autoScrollTimerRef.value = window.setInterval(() => {\n emits('autoScroll')\n }, 50)\n }\n}\n\nonBeforeUnmount(() => clearAutoScrollTimer())\n</script>\n\n<template>\n <Primitive\n aria-hidden=\"true\"\n :style=\"{\n flexShrink: 0,\n }\"\n v-bind=\"$parent?.$props\"\n @pointerdown=\"handlePointerDown\"\n @pointermove=\"handlePointerMove\"\n @pointerleave=\"\n () => {\n clearAutoScrollTimer();\n }\n \"\n >\n <slot />\n </Primitive>\n</template>\n"],"names":["useCollection","injectSelectContentContext","ref","watchEffect","getActiveElement","onBeforeUnmount"],"mappings":";;;;;;;;;;;;AAWA,IAAA,MAAM,KAAQ,GAAA,MAAA;AACd,IAAM,MAAA,EAAE,QAAS,EAAA,GAAIA,mCAAc,EAAA;AAEnC,IAAA,MAAM,iBAAiBC,mDAA2B,EAAA;AAClD,IAAM,MAAA,kBAAA,GAAqBC,QAAmB,IAAI,CAAA;AAElD,IAAA,SAAS,oBAAuB,GAAA;AAC9B,MAAI,IAAA,kBAAA,CAAmB,UAAU,IAAM,EAAA;AACrC,QAAO,MAAA,CAAA,aAAA,CAAc,mBAAmB,KAAK,CAAA;AAC7C,QAAA,kBAAA,CAAmB,KAAQ,GAAA,IAAA;AAAA;AAC7B;AAGF,IAAAC,eAAA,CAAY,MAAM;AAChB,MAAA,MAAM,aAAa,QAAS,EAAA,CAAE,IAAI,CAAK,CAAA,KAAA,CAAA,CAAE,GAAG,CAAE,CAAA,IAAA;AAAA,QAC5C,CAAA,IAAA,KAAQ,SAASC,wCAAiB;AAAA,OACpC;AACA,MAAA,UAAA,EAAY,cAAe,CAAA,EAAE,KAAO,EAAA,SAAA,EAAW,CAAA;AAAA,KAChD,CAAA;AAED,IAAA,SAAS,iBAAoB,GAAA;AAC3B,MAAI,IAAA,kBAAA,CAAmB,UAAU,IAAM,EAAA;AACrC,QAAmB,kBAAA,CAAA,KAAA,GAAQ,MAAO,CAAA,WAAA,CAAY,MAAM;AAClD,UAAA,KAAA,CAAM,YAAY,CAAA;AAAA,WACjB,EAAE,CAAA;AAAA;AACP;AAGF,IAAA,SAAS,iBAAoB,GAAA;AAC3B,MAAA,cAAA,CAAe,WAAc,IAAA;AAC7B,MAAI,IAAA,kBAAA,CAAmB,UAAU,IAAM,EAAA;AACrC,QAAmB,kBAAA,CAAA,KAAA,GAAQ,MAAO,CAAA,WAAA,CAAY,MAAM;AAClD,UAAA,KAAA,CAAM,YAAY,CAAA;AAAA,WACjB,EAAE,CAAA;AAAA;AACP;AAGF,IAAgBC,mBAAA,CAAA,MAAM,sBAAsB,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"SelectScrollButtonImpl.cjs","sources":["../../src/Select/SelectScrollButtonImpl.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { onBeforeUnmount, ref, watchEffect } from 'vue'\nimport { useCollection } from '@/Collection'\nimport { Primitive } from '@/Primitive'\nimport { getActiveElement } from '@/shared'\nimport { injectSelectContentContext } from './SelectContentImpl.vue'\n\nexport type SelectScrollButtonImplEmits = {\n autoScroll: []\n}\n\nconst emits = defineEmits<SelectScrollButtonImplEmits>()\nconst { getItems } = useCollection()\n\nconst contentContext = injectSelectContentContext()\nconst autoScrollTimerRef = ref<number | null>(null)\n\nfunction clearAutoScrollTimer() {\n if (autoScrollTimerRef.value !== null) {\n window.clearInterval(autoScrollTimerRef.value)\n autoScrollTimerRef.value = null\n }\n}\n\nwatchEffect(() => {\n const activeItem = getItems().map(i => i.ref).find(\n item => item === getActiveElement(),\n )\n activeItem?.scrollIntoView({ block: 'nearest' })\n})\n\nfunction handlePointerDown() {\n if (autoScrollTimerRef.value === null) {\n autoScrollTimerRef.value = window.setInterval(() => {\n emits('autoScroll')\n }, 50)\n }\n}\n\nfunction handlePointerMove() {\n contentContext.onItemLeave?.()\n if (autoScrollTimerRef.value === null) {\n autoScrollTimerRef.value = window.setInterval(() => {\n emits('autoScroll')\n }, 50)\n }\n}\n\nonBeforeUnmount(() => clearAutoScrollTimer())\n</script>\n\n<template>\n <Primitive\n aria-hidden=\"true\"\n :style=\"{\n flexShrink: 0,\n }\"\n v-bind=\"$parent?.$props\"\n @pointerdown=\"handlePointerDown\"\n @pointermove=\"handlePointerMove\"\n @pointerleave=\"\n () => {\n clearAutoScrollTimer();\n }\n \"\n >\n <slot />\n </Primitive>\n</template>\n"],"names":["useCollection","injectSelectContentContext","ref","watchEffect","getActiveElement","onBeforeUnmount"],"mappings":";;;;;;;;;;;;AAWA,IAAA,MAAM,KAAQ,GAAA,MAAA;AACd,IAAM,MAAA,EAAE,QAAS,EAAA,GAAIA,mCAAc,EAAA;AAEnC,IAAA,MAAM,iBAAiBC,mDAA2B,EAAA;AAClD,IAAM,MAAA,kBAAA,GAAqBC,QAAmB,IAAI,CAAA;AAElD,IAAA,SAAS,oBAAuB,GAAA;AAC9B,MAAI,IAAA,kBAAA,CAAmB,UAAU,IAAM,EAAA;AACrC,QAAO,MAAA,CAAA,aAAA,CAAc,mBAAmB,KAAK,CAAA;AAC7C,QAAA,kBAAA,CAAmB,KAAQ,GAAA,IAAA;AAAA;AAC7B;AAGF,IAAAC,eAAA,CAAY,MAAM;AAChB,MAAA,MAAM,aAAa,QAAS,EAAA,CAAE,IAAI,CAAK,CAAA,KAAA,CAAA,CAAE,GAAG,CAAE,CAAA,IAAA;AAAA,QAC5C,CAAA,IAAA,KAAQ,SAASC,wCAAiB;AAAA,OACpC;AACA,MAAA,UAAA,EAAY,cAAe,CAAA,EAAE,KAAO,EAAA,SAAA,EAAW,CAAA;AAAA,KAChD,CAAA;AAED,IAAA,SAAS,iBAAoB,GAAA;AAC3B,MAAI,IAAA,kBAAA,CAAmB,UAAU,IAAM,EAAA;AACrC,QAAmB,kBAAA,CAAA,KAAA,GAAQ,MAAO,CAAA,WAAA,CAAY,MAAM;AAClD,UAAA,KAAA,CAAM,YAAY,CAAA;AAAA,WACjB,EAAE,CAAA;AAAA;AACP;AAGF,IAAA,SAAS,iBAAoB,GAAA;AAC3B,MAAA,cAAA,CAAe,WAAc,IAAA;AAC7B,MAAI,IAAA,kBAAA,CAAmB,UAAU,IAAM,EAAA;AACrC,QAAmB,kBAAA,CAAA,KAAA,GAAQ,MAAO,CAAA,WAAA,CAAY,MAAM;AAClD,UAAA,KAAA,CAAM,YAAY,CAAA;AAAA,WACjB,EAAE,CAAA;AAAA;AACP;AAGF,IAAgBC,mBAAA,CAAA,MAAM,sBAAsB,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"SelectScrollButtonImpl.js","sources":["../../src/Select/SelectScrollButtonImpl.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { useCollection } from '@/Collection'\nimport { Primitive } from '@/Primitive'\nimport { getActiveElement } from '@/shared'\nimport { onBeforeUnmount, ref, watchEffect } from 'vue'\nimport { injectSelectContentContext } from './SelectContentImpl.vue'\n\nexport type SelectScrollButtonImplEmits = {\n autoScroll: []\n}\n\nconst emits = defineEmits<SelectScrollButtonImplEmits>()\nconst { getItems } = useCollection()\n\nconst contentContext = injectSelectContentContext()\nconst autoScrollTimerRef = ref<number | null>(null)\n\nfunction clearAutoScrollTimer() {\n if (autoScrollTimerRef.value !== null) {\n window.clearInterval(autoScrollTimerRef.value)\n autoScrollTimerRef.value = null\n }\n}\n\nwatchEffect(() => {\n const activeItem = getItems().map(i => i.ref).find(\n item => item === getActiveElement(),\n )\n activeItem?.scrollIntoView({ block: 'nearest' })\n})\n\nfunction handlePointerDown() {\n if (autoScrollTimerRef.value === null) {\n autoScrollTimerRef.value = window.setInterval(() => {\n emits('autoScroll')\n }, 50)\n }\n}\n\nfunction handlePointerMove() {\n contentContext.onItemLeave?.()\n if (autoScrollTimerRef.value === null) {\n autoScrollTimerRef.value = window.setInterval(() => {\n emits('autoScroll')\n }, 50)\n }\n}\n\nonBeforeUnmount(() => clearAutoScrollTimer())\n</script>\n\n<template>\n <Primitive\n aria-hidden=\"true\"\n :style=\"{\n flexShrink: 0,\n }\"\n v-bind=\"$parent?.$props\"\n @pointerdown=\"handlePointerDown\"\n @pointermove=\"handlePointerMove\"\n @pointerleave=\"\n () => {\n clearAutoScrollTimer();\n }\n \"\n >\n <slot />\n </Primitive>\n</template>\n"],"names":[],"mappings":";;;;;;;;;;AAWA,IAAA,MAAM,KAAQ,GAAA,MAAA;AACd,IAAM,MAAA,EAAE,QAAS,EAAA,GAAI,aAAc,EAAA;AAEnC,IAAA,MAAM,iBAAiB,0BAA2B,EAAA;AAClD,IAAM,MAAA,kBAAA,GAAqB,IAAmB,IAAI,CAAA;AAElD,IAAA,SAAS,oBAAuB,GAAA;AAC9B,MAAI,IAAA,kBAAA,CAAmB,UAAU,IAAM,EAAA;AACrC,QAAO,MAAA,CAAA,aAAA,CAAc,mBAAmB,KAAK,CAAA;AAC7C,QAAA,kBAAA,CAAmB,KAAQ,GAAA,IAAA;AAAA;AAC7B;AAGF,IAAA,WAAA,CAAY,MAAM;AAChB,MAAA,MAAM,aAAa,QAAS,EAAA,CAAE,IAAI,CAAK,CAAA,KAAA,CAAA,CAAE,GAAG,CAAE,CAAA,IAAA;AAAA,QAC5C,CAAA,IAAA,KAAQ,SAAS,gBAAiB;AAAA,OACpC;AACA,MAAA,UAAA,EAAY,cAAe,CAAA,EAAE,KAAO,EAAA,SAAA,EAAW,CAAA;AAAA,KAChD,CAAA;AAED,IAAA,SAAS,iBAAoB,GAAA;AAC3B,MAAI,IAAA,kBAAA,CAAmB,UAAU,IAAM,EAAA;AACrC,QAAmB,kBAAA,CAAA,KAAA,GAAQ,MAAO,CAAA,WAAA,CAAY,MAAM;AAClD,UAAA,KAAA,CAAM,YAAY,CAAA;AAAA,WACjB,EAAE,CAAA;AAAA;AACP;AAGF,IAAA,SAAS,iBAAoB,GAAA;AAC3B,MAAA,cAAA,CAAe,WAAc,IAAA;AAC7B,MAAI,IAAA,kBAAA,CAAmB,UAAU,IAAM,EAAA;AACrC,QAAmB,kBAAA,CAAA,KAAA,GAAQ,MAAO,CAAA,WAAA,CAAY,MAAM;AAClD,UAAA,KAAA,CAAM,YAAY,CAAA;AAAA,WACjB,EAAE,CAAA;AAAA;AACP;AAGF,IAAgB,eAAA,CAAA,MAAM,sBAAsB,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"SelectScrollButtonImpl.js","sources":["../../src/Select/SelectScrollButtonImpl.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { onBeforeUnmount, ref, watchEffect } from 'vue'\nimport { useCollection } from '@/Collection'\nimport { Primitive } from '@/Primitive'\nimport { getActiveElement } from '@/shared'\nimport { injectSelectContentContext } from './SelectContentImpl.vue'\n\nexport type SelectScrollButtonImplEmits = {\n autoScroll: []\n}\n\nconst emits = defineEmits<SelectScrollButtonImplEmits>()\nconst { getItems } = useCollection()\n\nconst contentContext = injectSelectContentContext()\nconst autoScrollTimerRef = ref<number | null>(null)\n\nfunction clearAutoScrollTimer() {\n if (autoScrollTimerRef.value !== null) {\n window.clearInterval(autoScrollTimerRef.value)\n autoScrollTimerRef.value = null\n }\n}\n\nwatchEffect(() => {\n const activeItem = getItems().map(i => i.ref).find(\n item => item === getActiveElement(),\n )\n activeItem?.scrollIntoView({ block: 'nearest' })\n})\n\nfunction handlePointerDown() {\n if (autoScrollTimerRef.value === null) {\n autoScrollTimerRef.value = window.setInterval(() => {\n emits('autoScroll')\n }, 50)\n }\n}\n\nfunction handlePointerMove() {\n contentContext.onItemLeave?.()\n if (autoScrollTimerRef.value === null) {\n autoScrollTimerRef.value = window.setInterval(() => {\n emits('autoScroll')\n }, 50)\n }\n}\n\nonBeforeUnmount(() => clearAutoScrollTimer())\n</script>\n\n<template>\n <Primitive\n aria-hidden=\"true\"\n :style=\"{\n flexShrink: 0,\n }\"\n v-bind=\"$parent?.$props\"\n @pointerdown=\"handlePointerDown\"\n @pointermove=\"handlePointerMove\"\n @pointerleave=\"\n () => {\n clearAutoScrollTimer();\n }\n \"\n >\n <slot />\n </Primitive>\n</template>\n"],"names":[],"mappings":";;;;;;;;;;AAWA,IAAA,MAAM,KAAQ,GAAA,MAAA;AACd,IAAM,MAAA,EAAE,QAAS,EAAA,GAAI,aAAc,EAAA;AAEnC,IAAA,MAAM,iBAAiB,0BAA2B,EAAA;AAClD,IAAM,MAAA,kBAAA,GAAqB,IAAmB,IAAI,CAAA;AAElD,IAAA,SAAS,oBAAuB,GAAA;AAC9B,MAAI,IAAA,kBAAA,CAAmB,UAAU,IAAM,EAAA;AACrC,QAAO,MAAA,CAAA,aAAA,CAAc,mBAAmB,KAAK,CAAA;AAC7C,QAAA,kBAAA,CAAmB,KAAQ,GAAA,IAAA;AAAA;AAC7B;AAGF,IAAA,WAAA,CAAY,MAAM;AAChB,MAAA,MAAM,aAAa,QAAS,EAAA,CAAE,IAAI,CAAK,CAAA,KAAA,CAAA,CAAE,GAAG,CAAE,CAAA,IAAA;AAAA,QAC5C,CAAA,IAAA,KAAQ,SAAS,gBAAiB;AAAA,OACpC;AACA,MAAA,UAAA,EAAY,cAAe,CAAA,EAAE,KAAO,EAAA,SAAA,EAAW,CAAA;AAAA,KAChD,CAAA;AAED,IAAA,SAAS,iBAAoB,GAAA;AAC3B,MAAI,IAAA,kBAAA,CAAmB,UAAU,IAAM,EAAA;AACrC,QAAmB,kBAAA,CAAA,KAAA,GAAQ,MAAO,CAAA,WAAA,CAAY,MAAM;AAClD,UAAA,KAAA,CAAM,YAAY,CAAA;AAAA,WACjB,EAAE,CAAA;AAAA;AACP;AAGF,IAAA,SAAS,iBAAoB,GAAA;AAC3B,MAAA,cAAA,CAAe,WAAc,IAAA;AAC7B,MAAI,IAAA,kBAAA,CAAmB,UAAU,IAAM,EAAA;AACrC,QAAmB,kBAAA,CAAA,KAAA,GAAQ,MAAO,CAAA,WAAA,CAAY,MAAM;AAClD,UAAA,KAAA,CAAM,YAAY,CAAA;AAAA,WACjB,EAAE,CAAA;AAAA;AACP;AAGF,IAAgB,eAAA,CAAA,MAAM,sBAAsB,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"SelectTrigger.cjs","sources":["../../src/Select/SelectTrigger.vue"],"sourcesContent":["<script lang=\"ts\">\nimport { useCollection } from '@/Collection'\n\nexport interface SelectTriggerProps extends PopperAnchorProps {\n disabled?: boolean\n}\n</script>\n\n<script setup lang=\"ts\">\nimport type { PopperAnchorProps } from '@/Popper'\nimport { PopperAnchor } from '@/Popper'\nimport { Primitive } from '@/Primitive'\nimport { useForwardExpose, useId, useTypeahead } from '@/shared'\nimport { computed, onMounted } from 'vue'\nimport {\n injectSelectRootContext,\n} from './SelectRoot.vue'\nimport { OPEN_KEYS, shouldShowPlaceholder } from './utils'\n\nconst props = withDefaults(defineProps<SelectTriggerProps>(), {\n as: 'button',\n})\nconst rootContext = injectSelectRootContext()\nconst { forwardRef, currentElement: triggerElement } = useForwardExpose()\n\nconst isDisabled = computed(() => rootContext.disabled?.value || props.disabled)\n\nrootContext.contentId ||= useId(undefined, 'reka-select-content')\nonMounted(() => {\n rootContext.onTriggerChange(triggerElement.value)\n})\n\nconst { getItems } = useCollection()\nconst { search, handleTypeaheadSearch, resetTypeahead } = useTypeahead()\nfunction handleOpen() {\n if (!isDisabled.value) {\n rootContext.onOpenChange(true)\n // reset typeahead when we open\n resetTypeahead()\n }\n}\n\nfunction handlePointerOpen(event: PointerEvent) {\n handleOpen()\n rootContext.triggerPointerDownPosRef.value = {\n x: Math.round(event.pageX),\n y: Math.round(event.pageY),\n }\n}\n</script>\n\n<template>\n <PopperAnchor\n as-child\n :reference=\"reference\"\n >\n <Primitive\n :ref=\"forwardRef\"\n role=\"combobox\"\n :type=\"as === 'button' ? 'button' : undefined\"\n :aria-controls=\"rootContext.contentId\"\n :aria-expanded=\"rootContext.open.value || false\"\n :aria-required=\"rootContext.required?.value\"\n aria-autocomplete=\"none\"\n :disabled=\"isDisabled\"\n :dir=\"rootContext?.dir.value\"\n :data-state=\"rootContext?.open.value ? 'open' : 'closed'\"\n :data-disabled=\"isDisabled ? '' : undefined\"\n :data-placeholder=\"shouldShowPlaceholder(rootContext.modelValue?.value) ? '' : undefined\"\n :as-child=\"asChild\"\n :as=\"as\"\n @click=\"\n (event: MouseEvent) => {\n // Whilst browsers generally have no issue focusing the trigger when clicking\n // on a label, Safari seems to struggle with the fact that there's no `onClick`.\n // We force `focus` in this case. Note: this doesn't create any other side-effect\n // because we are preventing default in `onPointerDown` so effectively\n // this only runs for a label 'click'\n (event?.currentTarget as HTMLElement)?.focus();\n }\n \"\n @pointerdown=\"\n (event: PointerEvent) => {\n // Prevent opening on touch down.\n // https://github.com/unovue/reka-ui/issues/804\n if (event.pointerType === 'touch')\n return event.preventDefault();\n\n // prevent implicit pointer capture\n // https://www.w3.org/TR/pointerevents3/#implicit-pointer-capture\n const target = event.target as HTMLElement;\n if (target.hasPointerCapture(event.pointerId)) {\n target.releasePointerCapture(event.pointerId);\n }\n\n // only call handler if it's the left button (mousedown gets triggered by all mouse buttons)\n // but not when the control key is pressed (avoiding MacOS right click)\n if (event.button === 0 && event.ctrlKey === false) {\n handlePointerOpen(event)\n // prevent trigger from stealing focus from the active item after opening.\n event.preventDefault();\n }\n }\n \"\n @pointerup.prevent=\"\n (event: PointerEvent) => {\n // Only open on pointer up when using touch devices\n // https://github.com/unovue/reka-ui/issues/804\n if (event.pointerType === 'touch')\n handlePointerOpen(event)\n }\n \"\n @keydown=\"\n (event) => {\n const isTypingAhead = search !== '';\n const isModifierKey = event.ctrlKey || event.altKey || event.metaKey;\n if (!isModifierKey && event.key.length === 1)\n if (isTypingAhead && event.key === ' ') return;\n\n handleTypeaheadSearch(event.key, getItems());\n if (OPEN_KEYS.includes(event.key)) {\n handleOpen();\n event.preventDefault();\n }\n }\n \"\n >\n <slot />\n </Primitive>\n </PopperAnchor>\n</template>\n"],"names":["injectSelectRootContext","useForwardExpose","computed","useId","onMounted","useCollection","useTypeahead"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAmBA,IAAA,MAAM,KAAQ,GAAA,OAAA;AAGd,IAAA,MAAM,cAAcA,yCAAwB,EAAA;AAC5C,IAAA,MAAM,EAAE,UAAA,EAAY,cAAgB,EAAA,cAAA,KAAmBC,wCAAiB,EAAA;AAExE,IAAA,MAAM,aAAaC,YAAS,CAAA,MAAM,YAAY,QAAU,EAAA,KAAA,IAAS,MAAM,QAAQ,CAAA;AAE/E,IAAY,WAAA,CAAA,SAAA,KAAcC,kBAAM,CAAA,MAAA,EAAW,qBAAqB,CAAA;AAChE,IAAAC,aAAA,CAAU,MAAM;AACd,MAAY,WAAA,CAAA,eAAA,CAAgB,eAAe,KAAK,CAAA;AAAA,KACjD,CAAA;AAED,IAAM,MAAA,EAAE,QAAS,EAAA,GAAIC,mCAAc,EAAA;AACnC,IAAA,MAAM,EAAE,MAAA,EAAQ,qBAAuB,EAAA,cAAA,KAAmBC,gCAAa,EAAA;AACvE,IAAA,SAAS,UAAa,GAAA;AACpB,MAAI,IAAA,CAAC,WAAW,KAAO,EAAA;AACrB,QAAA,WAAA,CAAY,aAAa,IAAI,CAAA;AAE7B,QAAe,cAAA,EAAA;AAAA;AACjB;AAGF,IAAA,SAAS,kBAAkB,KAAqB,EAAA;AAC9C,MAAW,UAAA,EAAA;AACX,MAAA,WAAA,CAAY,yBAAyB,KAAQ,GAAA;AAAA,QAC3C,CAAG,EAAA,IAAA,CAAK,KAAM,CAAA,KAAA,CAAM,KAAK,CAAA;AAAA,QACzB,CAAG,EAAA,IAAA,CAAK,KAAM,CAAA,KAAA,CAAM,KAAK;AAAA,OAC3B;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"SelectTrigger.cjs","sources":["../../src/Select/SelectTrigger.vue"],"sourcesContent":["<script lang=\"ts\">\nimport { useCollection } from '@/Collection'\n\nexport interface SelectTriggerProps extends PopperAnchorProps {\n disabled?: boolean\n}\n</script>\n\n<script setup lang=\"ts\">\nimport type { PopperAnchorProps } from '@/Popper'\nimport { computed, onMounted } from 'vue'\nimport { PopperAnchor } from '@/Popper'\nimport { Primitive } from '@/Primitive'\nimport { useForwardExpose, useId, useTypeahead } from '@/shared'\nimport {\n injectSelectRootContext,\n} from './SelectRoot.vue'\nimport { OPEN_KEYS, shouldShowPlaceholder } from './utils'\n\nconst props = withDefaults(defineProps<SelectTriggerProps>(), {\n as: 'button',\n})\nconst rootContext = injectSelectRootContext()\nconst { forwardRef, currentElement: triggerElement } = useForwardExpose()\n\nconst isDisabled = computed(() => rootContext.disabled?.value || props.disabled)\n\nrootContext.contentId ||= useId(undefined, 'reka-select-content')\nonMounted(() => {\n rootContext.onTriggerChange(triggerElement.value)\n})\n\nconst { getItems } = useCollection()\nconst { search, handleTypeaheadSearch, resetTypeahead } = useTypeahead()\nfunction handleOpen() {\n if (!isDisabled.value) {\n rootContext.onOpenChange(true)\n // reset typeahead when we open\n resetTypeahead()\n }\n}\n\nfunction handlePointerOpen(event: PointerEvent) {\n handleOpen()\n rootContext.triggerPointerDownPosRef.value = {\n x: Math.round(event.pageX),\n y: Math.round(event.pageY),\n }\n}\n</script>\n\n<template>\n <PopperAnchor\n as-child\n :reference=\"reference\"\n >\n <Primitive\n :ref=\"forwardRef\"\n role=\"combobox\"\n :type=\"as === 'button' ? 'button' : undefined\"\n :aria-controls=\"rootContext.contentId\"\n :aria-expanded=\"rootContext.open.value || false\"\n :aria-required=\"rootContext.required?.value\"\n aria-autocomplete=\"none\"\n :disabled=\"isDisabled\"\n :dir=\"rootContext?.dir.value\"\n :data-state=\"rootContext?.open.value ? 'open' : 'closed'\"\n :data-disabled=\"isDisabled ? '' : undefined\"\n :data-placeholder=\"shouldShowPlaceholder(rootContext.modelValue?.value) ? '' : undefined\"\n :as-child=\"asChild\"\n :as=\"as\"\n @click=\"\n (event: MouseEvent) => {\n // Whilst browsers generally have no issue focusing the trigger when clicking\n // on a label, Safari seems to struggle with the fact that there's no `onClick`.\n // We force `focus` in this case. Note: this doesn't create any other side-effect\n // because we are preventing default in `onPointerDown` so effectively\n // this only runs for a label 'click'\n (event?.currentTarget as HTMLElement)?.focus();\n }\n \"\n @pointerdown=\"\n (event: PointerEvent) => {\n // Prevent opening on touch down.\n // https://github.com/unovue/reka-ui/issues/804\n if (event.pointerType === 'touch')\n return event.preventDefault();\n\n // prevent implicit pointer capture\n // https://www.w3.org/TR/pointerevents3/#implicit-pointer-capture\n const target = event.target as HTMLElement;\n if (target.hasPointerCapture(event.pointerId)) {\n target.releasePointerCapture(event.pointerId);\n }\n\n // only call handler if it's the left button (mousedown gets triggered by all mouse buttons)\n // but not when the control key is pressed (avoiding MacOS right click)\n if (event.button === 0 && event.ctrlKey === false) {\n handlePointerOpen(event)\n // prevent trigger from stealing focus from the active item after opening.\n event.preventDefault();\n }\n }\n \"\n @pointerup.prevent=\"\n (event: PointerEvent) => {\n // Only open on pointer up when using touch devices\n // https://github.com/unovue/reka-ui/issues/804\n if (event.pointerType === 'touch')\n handlePointerOpen(event)\n }\n \"\n @keydown=\"\n (event) => {\n const isTypingAhead = search !== '';\n const isModifierKey = event.ctrlKey || event.altKey || event.metaKey;\n if (!isModifierKey && event.key.length === 1)\n if (isTypingAhead && event.key === ' ') return;\n\n handleTypeaheadSearch(event.key, getItems());\n if (OPEN_KEYS.includes(event.key)) {\n handleOpen();\n event.preventDefault();\n }\n }\n \"\n >\n <slot />\n </Primitive>\n </PopperAnchor>\n</template>\n"],"names":["injectSelectRootContext","useForwardExpose","computed","useId","onMounted","useCollection","useTypeahead"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAmBA,IAAA,MAAM,KAAQ,GAAA,OAAA;AAGd,IAAA,MAAM,cAAcA,yCAAwB,EAAA;AAC5C,IAAA,MAAM,EAAE,UAAA,EAAY,cAAgB,EAAA,cAAA,KAAmBC,wCAAiB,EAAA;AAExE,IAAA,MAAM,aAAaC,YAAS,CAAA,MAAM,YAAY,QAAU,EAAA,KAAA,IAAS,MAAM,QAAQ,CAAA;AAE/E,IAAY,WAAA,CAAA,SAAA,KAAcC,kBAAM,CAAA,MAAA,EAAW,qBAAqB,CAAA;AAChE,IAAAC,aAAA,CAAU,MAAM;AACd,MAAY,WAAA,CAAA,eAAA,CAAgB,eAAe,KAAK,CAAA;AAAA,KACjD,CAAA;AAED,IAAM,MAAA,EAAE,QAAS,EAAA,GAAIC,mCAAc,EAAA;AACnC,IAAA,MAAM,EAAE,MAAA,EAAQ,qBAAuB,EAAA,cAAA,KAAmBC,gCAAa,EAAA;AACvE,IAAA,SAAS,UAAa,GAAA;AACpB,MAAI,IAAA,CAAC,WAAW,KAAO,EAAA;AACrB,QAAA,WAAA,CAAY,aAAa,IAAI,CAAA;AAE7B,QAAe,cAAA,EAAA;AAAA;AACjB;AAGF,IAAA,SAAS,kBAAkB,KAAqB,EAAA;AAC9C,MAAW,UAAA,EAAA;AACX,MAAA,WAAA,CAAY,yBAAyB,KAAQ,GAAA;AAAA,QAC3C,CAAG,EAAA,IAAA,CAAK,KAAM,CAAA,KAAA,CAAM,KAAK,CAAA;AAAA,QACzB,CAAG,EAAA,IAAA,CAAK,KAAM,CAAA,KAAA,CAAM,KAAK;AAAA,OAC3B;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"SelectTrigger.js","sources":["../../src/Select/SelectTrigger.vue"],"sourcesContent":["<script lang=\"ts\">\nimport { useCollection } from '@/Collection'\n\nexport interface SelectTriggerProps extends PopperAnchorProps {\n disabled?: boolean\n}\n</script>\n\n<script setup lang=\"ts\">\nimport type { PopperAnchorProps } from '@/Popper'\nimport { PopperAnchor } from '@/Popper'\nimport { Primitive } from '@/Primitive'\nimport { useForwardExpose, useId, useTypeahead } from '@/shared'\nimport { computed, onMounted } from 'vue'\nimport {\n injectSelectRootContext,\n} from './SelectRoot.vue'\nimport { OPEN_KEYS, shouldShowPlaceholder } from './utils'\n\nconst props = withDefaults(defineProps<SelectTriggerProps>(), {\n as: 'button',\n})\nconst rootContext = injectSelectRootContext()\nconst { forwardRef, currentElement: triggerElement } = useForwardExpose()\n\nconst isDisabled = computed(() => rootContext.disabled?.value || props.disabled)\n\nrootContext.contentId ||= useId(undefined, 'reka-select-content')\nonMounted(() => {\n rootContext.onTriggerChange(triggerElement.value)\n})\n\nconst { getItems } = useCollection()\nconst { search, handleTypeaheadSearch, resetTypeahead } = useTypeahead()\nfunction handleOpen() {\n if (!isDisabled.value) {\n rootContext.onOpenChange(true)\n // reset typeahead when we open\n resetTypeahead()\n }\n}\n\nfunction handlePointerOpen(event: PointerEvent) {\n handleOpen()\n rootContext.triggerPointerDownPosRef.value = {\n x: Math.round(event.pageX),\n y: Math.round(event.pageY),\n }\n}\n</script>\n\n<template>\n <PopperAnchor\n as-child\n :reference=\"reference\"\n >\n <Primitive\n :ref=\"forwardRef\"\n role=\"combobox\"\n :type=\"as === 'button' ? 'button' : undefined\"\n :aria-controls=\"rootContext.contentId\"\n :aria-expanded=\"rootContext.open.value || false\"\n :aria-required=\"rootContext.required?.value\"\n aria-autocomplete=\"none\"\n :disabled=\"isDisabled\"\n :dir=\"rootContext?.dir.value\"\n :data-state=\"rootContext?.open.value ? 'open' : 'closed'\"\n :data-disabled=\"isDisabled ? '' : undefined\"\n :data-placeholder=\"shouldShowPlaceholder(rootContext.modelValue?.value) ? '' : undefined\"\n :as-child=\"asChild\"\n :as=\"as\"\n @click=\"\n (event: MouseEvent) => {\n // Whilst browsers generally have no issue focusing the trigger when clicking\n // on a label, Safari seems to struggle with the fact that there's no `onClick`.\n // We force `focus` in this case. Note: this doesn't create any other side-effect\n // because we are preventing default in `onPointerDown` so effectively\n // this only runs for a label 'click'\n (event?.currentTarget as HTMLElement)?.focus();\n }\n \"\n @pointerdown=\"\n (event: PointerEvent) => {\n // Prevent opening on touch down.\n // https://github.com/unovue/reka-ui/issues/804\n if (event.pointerType === 'touch')\n return event.preventDefault();\n\n // prevent implicit pointer capture\n // https://www.w3.org/TR/pointerevents3/#implicit-pointer-capture\n const target = event.target as HTMLElement;\n if (target.hasPointerCapture(event.pointerId)) {\n target.releasePointerCapture(event.pointerId);\n }\n\n // only call handler if it's the left button (mousedown gets triggered by all mouse buttons)\n // but not when the control key is pressed (avoiding MacOS right click)\n if (event.button === 0 && event.ctrlKey === false) {\n handlePointerOpen(event)\n // prevent trigger from stealing focus from the active item after opening.\n event.preventDefault();\n }\n }\n \"\n @pointerup.prevent=\"\n (event: PointerEvent) => {\n // Only open on pointer up when using touch devices\n // https://github.com/unovue/reka-ui/issues/804\n if (event.pointerType === 'touch')\n handlePointerOpen(event)\n }\n \"\n @keydown=\"\n (event) => {\n const isTypingAhead = search !== '';\n const isModifierKey = event.ctrlKey || event.altKey || event.metaKey;\n if (!isModifierKey && event.key.length === 1)\n if (isTypingAhead && event.key === ' ') return;\n\n handleTypeaheadSearch(event.key, getItems());\n if (OPEN_KEYS.includes(event.key)) {\n handleOpen();\n event.preventDefault();\n }\n }\n \"\n >\n <slot />\n </Primitive>\n </PopperAnchor>\n</template>\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AAmBA,IAAA,MAAM,KAAQ,GAAA,OAAA;AAGd,IAAA,MAAM,cAAc,uBAAwB,EAAA;AAC5C,IAAA,MAAM,EAAE,UAAA,EAAY,cAAgB,EAAA,cAAA,KAAmB,gBAAiB,EAAA;AAExE,IAAA,MAAM,aAAa,QAAS,CAAA,MAAM,YAAY,QAAU,EAAA,KAAA,IAAS,MAAM,QAAQ,CAAA;AAE/E,IAAY,WAAA,CAAA,SAAA,KAAc,KAAM,CAAA,MAAA,EAAW,qBAAqB,CAAA;AAChE,IAAA,SAAA,CAAU,MAAM;AACd,MAAY,WAAA,CAAA,eAAA,CAAgB,eAAe,KAAK,CAAA;AAAA,KACjD,CAAA;AAED,IAAM,MAAA,EAAE,QAAS,EAAA,GAAI,aAAc,EAAA;AACnC,IAAA,MAAM,EAAE,MAAA,EAAQ,qBAAuB,EAAA,cAAA,KAAmB,YAAa,EAAA;AACvE,IAAA,SAAS,UAAa,GAAA;AACpB,MAAI,IAAA,CAAC,WAAW,KAAO,EAAA;AACrB,QAAA,WAAA,CAAY,aAAa,IAAI,CAAA;AAE7B,QAAe,cAAA,EAAA;AAAA;AACjB;AAGF,IAAA,SAAS,kBAAkB,KAAqB,EAAA;AAC9C,MAAW,UAAA,EAAA;AACX,MAAA,WAAA,CAAY,yBAAyB,KAAQ,GAAA;AAAA,QAC3C,CAAG,EAAA,IAAA,CAAK,KAAM,CAAA,KAAA,CAAM,KAAK,CAAA;AAAA,QACzB,CAAG,EAAA,IAAA,CAAK,KAAM,CAAA,KAAA,CAAM,KAAK;AAAA,OAC3B;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"SelectTrigger.js","sources":["../../src/Select/SelectTrigger.vue"],"sourcesContent":["<script lang=\"ts\">\nimport { useCollection } from '@/Collection'\n\nexport interface SelectTriggerProps extends PopperAnchorProps {\n disabled?: boolean\n}\n</script>\n\n<script setup lang=\"ts\">\nimport type { PopperAnchorProps } from '@/Popper'\nimport { computed, onMounted } from 'vue'\nimport { PopperAnchor } from '@/Popper'\nimport { Primitive } from '@/Primitive'\nimport { useForwardExpose, useId, useTypeahead } from '@/shared'\nimport {\n injectSelectRootContext,\n} from './SelectRoot.vue'\nimport { OPEN_KEYS, shouldShowPlaceholder } from './utils'\n\nconst props = withDefaults(defineProps<SelectTriggerProps>(), {\n as: 'button',\n})\nconst rootContext = injectSelectRootContext()\nconst { forwardRef, currentElement: triggerElement } = useForwardExpose()\n\nconst isDisabled = computed(() => rootContext.disabled?.value || props.disabled)\n\nrootContext.contentId ||= useId(undefined, 'reka-select-content')\nonMounted(() => {\n rootContext.onTriggerChange(triggerElement.value)\n})\n\nconst { getItems } = useCollection()\nconst { search, handleTypeaheadSearch, resetTypeahead } = useTypeahead()\nfunction handleOpen() {\n if (!isDisabled.value) {\n rootContext.onOpenChange(true)\n // reset typeahead when we open\n resetTypeahead()\n }\n}\n\nfunction handlePointerOpen(event: PointerEvent) {\n handleOpen()\n rootContext.triggerPointerDownPosRef.value = {\n x: Math.round(event.pageX),\n y: Math.round(event.pageY),\n }\n}\n</script>\n\n<template>\n <PopperAnchor\n as-child\n :reference=\"reference\"\n >\n <Primitive\n :ref=\"forwardRef\"\n role=\"combobox\"\n :type=\"as === 'button' ? 'button' : undefined\"\n :aria-controls=\"rootContext.contentId\"\n :aria-expanded=\"rootContext.open.value || false\"\n :aria-required=\"rootContext.required?.value\"\n aria-autocomplete=\"none\"\n :disabled=\"isDisabled\"\n :dir=\"rootContext?.dir.value\"\n :data-state=\"rootContext?.open.value ? 'open' : 'closed'\"\n :data-disabled=\"isDisabled ? '' : undefined\"\n :data-placeholder=\"shouldShowPlaceholder(rootContext.modelValue?.value) ? '' : undefined\"\n :as-child=\"asChild\"\n :as=\"as\"\n @click=\"\n (event: MouseEvent) => {\n // Whilst browsers generally have no issue focusing the trigger when clicking\n // on a label, Safari seems to struggle with the fact that there's no `onClick`.\n // We force `focus` in this case. Note: this doesn't create any other side-effect\n // because we are preventing default in `onPointerDown` so effectively\n // this only runs for a label 'click'\n (event?.currentTarget as HTMLElement)?.focus();\n }\n \"\n @pointerdown=\"\n (event: PointerEvent) => {\n // Prevent opening on touch down.\n // https://github.com/unovue/reka-ui/issues/804\n if (event.pointerType === 'touch')\n return event.preventDefault();\n\n // prevent implicit pointer capture\n // https://www.w3.org/TR/pointerevents3/#implicit-pointer-capture\n const target = event.target as HTMLElement;\n if (target.hasPointerCapture(event.pointerId)) {\n target.releasePointerCapture(event.pointerId);\n }\n\n // only call handler if it's the left button (mousedown gets triggered by all mouse buttons)\n // but not when the control key is pressed (avoiding MacOS right click)\n if (event.button === 0 && event.ctrlKey === false) {\n handlePointerOpen(event)\n // prevent trigger from stealing focus from the active item after opening.\n event.preventDefault();\n }\n }\n \"\n @pointerup.prevent=\"\n (event: PointerEvent) => {\n // Only open on pointer up when using touch devices\n // https://github.com/unovue/reka-ui/issues/804\n if (event.pointerType === 'touch')\n handlePointerOpen(event)\n }\n \"\n @keydown=\"\n (event) => {\n const isTypingAhead = search !== '';\n const isModifierKey = event.ctrlKey || event.altKey || event.metaKey;\n if (!isModifierKey && event.key.length === 1)\n if (isTypingAhead && event.key === ' ') return;\n\n handleTypeaheadSearch(event.key, getItems());\n if (OPEN_KEYS.includes(event.key)) {\n handleOpen();\n event.preventDefault();\n }\n }\n \"\n >\n <slot />\n </Primitive>\n </PopperAnchor>\n</template>\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AAmBA,IAAA,MAAM,KAAQ,GAAA,OAAA;AAGd,IAAA,MAAM,cAAc,uBAAwB,EAAA;AAC5C,IAAA,MAAM,EAAE,UAAA,EAAY,cAAgB,EAAA,cAAA,KAAmB,gBAAiB,EAAA;AAExE,IAAA,MAAM,aAAa,QAAS,CAAA,MAAM,YAAY,QAAU,EAAA,KAAA,IAAS,MAAM,QAAQ,CAAA;AAE/E,IAAY,WAAA,CAAA,SAAA,KAAc,KAAM,CAAA,MAAA,EAAW,qBAAqB,CAAA;AAChE,IAAA,SAAA,CAAU,MAAM;AACd,MAAY,WAAA,CAAA,eAAA,CAAgB,eAAe,KAAK,CAAA;AAAA,KACjD,CAAA;AAED,IAAM,MAAA,EAAE,QAAS,EAAA,GAAI,aAAc,EAAA;AACnC,IAAA,MAAM,EAAE,MAAA,EAAQ,qBAAuB,EAAA,cAAA,KAAmB,YAAa,EAAA;AACvE,IAAA,SAAS,UAAa,GAAA;AACpB,MAAI,IAAA,CAAC,WAAW,KAAO,EAAA;AACrB,QAAA,WAAA,CAAY,aAAa,IAAI,CAAA;AAE7B,QAAe,cAAA,EAAA;AAAA;AACjB;AAGF,IAAA,SAAS,kBAAkB,KAAqB,EAAA;AAC9C,MAAW,UAAA,EAAA;AACX,MAAA,WAAA,CAAY,yBAAyB,KAAQ,GAAA;AAAA,QAC3C,CAAG,EAAA,IAAA,CAAK,KAAM,CAAA,KAAA,CAAM,KAAK,CAAA;AAAA,QACzB,CAAG,EAAA,IAAA,CAAK,KAAM,CAAA,KAAA,CAAM,KAAK;AAAA,OAC3B;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"SelectValue.cjs","sources":["../../src/Select/SelectValue.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { PrimitiveProps } from '@/Primitive'\nimport type { AcceptableValue } from '@/shared/types'\nimport { valueComparator } from './utils'\n\nexport interface SelectValueProps extends PrimitiveProps {\n /** The content that will be rendered inside the `SelectValue` when no `value` or `defaultValue` is set. */\n placeholder?: string\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { Primitive } from '@/Primitive'\nimport { useForwardExpose } from '@/shared'\nimport { computed, onMounted } from 'vue'\nimport { injectSelectRootContext } from './SelectRoot.vue'\n\nconst props = withDefaults(defineProps<SelectValueProps>(), {\n as: 'span',\n placeholder: '',\n})\n\nconst { forwardRef, currentElement } = useForwardExpose()\n\nconst rootContext = injectSelectRootContext()\n\nonMounted(() => {\n rootContext.valueElement = currentElement\n})\n\nconst selectedLabel = computed(() => {\n let list: string[] = []\n const options = Array.from(rootContext.optionsSet.value)\n const getOption = (value?: AcceptableValue) => options.find(option => valueComparator(value, option.value, rootContext.by))\n if (Array.isArray(rootContext.modelValue.value)) {\n list = rootContext.modelValue.value.map(value => getOption(value)?.textContent ?? '')\n }\n else {\n list = [getOption(rootContext.modelValue.value)?.textContent ?? '']\n }\n return list.filter(Boolean)\n})\n\nconst slotText = computed(() => {\n return selectedLabel.value.length ? selectedLabel.value.join(', ') : props.placeholder\n})\n</script>\n\n<template>\n <Primitive\n :ref=\"forwardRef\"\n :as=\"as\"\n :as-child=\"asChild\"\n :style=\"{ pointerEvents: 'none' }\"\n :data-placeholder=\"selectedLabel.length ? undefined : props.placeholder\"\n >\n <slot\n :selected-label=\"selectedLabel\"\n :model-value=\"rootContext.modelValue.value\"\n >\n {{ slotText }}\n </slot>\n </Primitive>\n</template>\n"],"names":["useForwardExpose","injectSelectRootContext","onMounted","computed","valueComparator"],"mappings":";;;;;;;;;;;;;;;;AAiBA,IAAA,MAAM,KAAQ,GAAA,OAAA;AAKd,IAAA,MAAM,EAAE,UAAA,EAAY,cAAe,EAAA,GAAIA,wCAAiB,EAAA;AAExD,IAAA,MAAM,cAAcC,yCAAwB,EAAA;AAE5C,IAAAC,aAAA,CAAU,MAAM;AACd,MAAA,WAAA,CAAY,YAAe,GAAA,cAAA;AAAA,KAC5B,CAAA;AAED,IAAM,MAAA,aAAA,GAAgBC,aAAS,MAAM;AACnC,MAAA,IAAI,OAAiB,EAAC;AACtB,MAAA,MAAM,OAAU,GAAA,KAAA,CAAM,IAAK,CAAA,WAAA,CAAY,WAAW,KAAK,CAAA;AACvD,MAAA,MAAM,SAAY,GAAA,CAAC,KAA4B,KAAA,OAAA,CAAQ,IAAK,CAAA,CAAA,MAAA,KAAUC,4BAAgB,CAAA,KAAA,EAAO,MAAO,CAAA,KAAA,EAAO,WAAY,CAAA,EAAE,CAAC,CAAA;AAC1H,MAAA,IAAI,KAAM,CAAA,OAAA,CAAQ,WAAY,CAAA,UAAA,CAAW,KAAK,CAAG,EAAA;AAC/C,QAAO,IAAA,GAAA,WAAA,CAAY,WAAW,KAAM,CAAA,GAAA,CAAI,WAAS,SAAU,CAAA,KAAK,CAAG,EAAA,WAAA,IAAe,EAAE,CAAA;AAAA,OAEjF,MAAA;AACH,QAAA,IAAA,GAAO,CAAC,SAAU,CAAA,WAAA,CAAY,WAAW,KAAK,CAAA,EAAG,eAAe,EAAE,CAAA;AAAA;AAEpE,MAAO,OAAA,IAAA,CAAK,OAAO,OAAO,CAAA;AAAA,KAC3B,CAAA;AAED,IAAM,MAAA,QAAA,GAAWD,aAAS,MAAM;AAC9B,MAAO,OAAA,aAAA,CAAc,MAAM,MAAS,GAAA,aAAA,CAAc,MAAM,IAAK,CAAA,IAAI,IAAI,KAAM,CAAA,WAAA;AAAA,KAC5E,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"SelectValue.cjs","sources":["../../src/Select/SelectValue.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { PrimitiveProps } from '@/Primitive'\nimport type { AcceptableValue } from '@/shared/types'\nimport { valueComparator } from './utils'\n\nexport interface SelectValueProps extends PrimitiveProps {\n /** The content that will be rendered inside the `SelectValue` when no `value` or `defaultValue` is set. */\n placeholder?: string\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, onMounted } from 'vue'\nimport { Primitive } from '@/Primitive'\nimport { useForwardExpose } from '@/shared'\nimport { injectSelectRootContext } from './SelectRoot.vue'\n\nconst props = withDefaults(defineProps<SelectValueProps>(), {\n as: 'span',\n placeholder: '',\n})\n\nconst { forwardRef, currentElement } = useForwardExpose()\n\nconst rootContext = injectSelectRootContext()\n\nonMounted(() => {\n rootContext.valueElement = currentElement\n})\n\nconst selectedLabel = computed(() => {\n let list: string[] = []\n const options = Array.from(rootContext.optionsSet.value)\n const getOption = (value?: AcceptableValue) => options.find(option => valueComparator(value, option.value, rootContext.by))\n if (Array.isArray(rootContext.modelValue.value)) {\n list = rootContext.modelValue.value.map(value => getOption(value)?.textContent ?? '')\n }\n else {\n list = [getOption(rootContext.modelValue.value)?.textContent ?? '']\n }\n return list.filter(Boolean)\n})\n\nconst slotText = computed(() => {\n return selectedLabel.value.length ? selectedLabel.value.join(', ') : props.placeholder\n})\n</script>\n\n<template>\n <Primitive\n :ref=\"forwardRef\"\n :as=\"as\"\n :as-child=\"asChild\"\n :style=\"{ pointerEvents: 'none' }\"\n :data-placeholder=\"selectedLabel.length ? undefined : props.placeholder\"\n >\n <slot\n :selected-label=\"selectedLabel\"\n :model-value=\"rootContext.modelValue.value\"\n >\n {{ slotText }}\n </slot>\n </Primitive>\n</template>\n"],"names":["useForwardExpose","injectSelectRootContext","onMounted","computed","valueComparator"],"mappings":";;;;;;;;;;;;;;;;AAiBA,IAAA,MAAM,KAAQ,GAAA,OAAA;AAKd,IAAA,MAAM,EAAE,UAAA,EAAY,cAAe,EAAA,GAAIA,wCAAiB,EAAA;AAExD,IAAA,MAAM,cAAcC,yCAAwB,EAAA;AAE5C,IAAAC,aAAA,CAAU,MAAM;AACd,MAAA,WAAA,CAAY,YAAe,GAAA,cAAA;AAAA,KAC5B,CAAA;AAED,IAAM,MAAA,aAAA,GAAgBC,aAAS,MAAM;AACnC,MAAA,IAAI,OAAiB,EAAC;AACtB,MAAA,MAAM,OAAU,GAAA,KAAA,CAAM,IAAK,CAAA,WAAA,CAAY,WAAW,KAAK,CAAA;AACvD,MAAA,MAAM,SAAY,GAAA,CAAC,KAA4B,KAAA,OAAA,CAAQ,IAAK,CAAA,CAAA,MAAA,KAAUC,4BAAgB,CAAA,KAAA,EAAO,MAAO,CAAA,KAAA,EAAO,WAAY,CAAA,EAAE,CAAC,CAAA;AAC1H,MAAA,IAAI,KAAM,CAAA,OAAA,CAAQ,WAAY,CAAA,UAAA,CAAW,KAAK,CAAG,EAAA;AAC/C,QAAO,IAAA,GAAA,WAAA,CAAY,WAAW,KAAM,CAAA,GAAA,CAAI,WAAS,SAAU,CAAA,KAAK,CAAG,EAAA,WAAA,IAAe,EAAE,CAAA;AAAA,OAEjF,MAAA;AACH,QAAA,IAAA,GAAO,CAAC,SAAU,CAAA,WAAA,CAAY,WAAW,KAAK,CAAA,EAAG,eAAe,EAAE,CAAA;AAAA;AAEpE,MAAO,OAAA,IAAA,CAAK,OAAO,OAAO,CAAA;AAAA,KAC3B,CAAA;AAED,IAAM,MAAA,QAAA,GAAWD,aAAS,MAAM;AAC9B,MAAO,OAAA,aAAA,CAAc,MAAM,MAAS,GAAA,aAAA,CAAc,MAAM,IAAK,CAAA,IAAI,IAAI,KAAM,CAAA,WAAA;AAAA,KAC5E,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"SelectValue.js","sources":["../../src/Select/SelectValue.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { PrimitiveProps } from '@/Primitive'\nimport type { AcceptableValue } from '@/shared/types'\nimport { valueComparator } from './utils'\n\nexport interface SelectValueProps extends PrimitiveProps {\n /** The content that will be rendered inside the `SelectValue` when no `value` or `defaultValue` is set. */\n placeholder?: string\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { Primitive } from '@/Primitive'\nimport { useForwardExpose } from '@/shared'\nimport { computed, onMounted } from 'vue'\nimport { injectSelectRootContext } from './SelectRoot.vue'\n\nconst props = withDefaults(defineProps<SelectValueProps>(), {\n as: 'span',\n placeholder: '',\n})\n\nconst { forwardRef, currentElement } = useForwardExpose()\n\nconst rootContext = injectSelectRootContext()\n\nonMounted(() => {\n rootContext.valueElement = currentElement\n})\n\nconst selectedLabel = computed(() => {\n let list: string[] = []\n const options = Array.from(rootContext.optionsSet.value)\n const getOption = (value?: AcceptableValue) => options.find(option => valueComparator(value, option.value, rootContext.by))\n if (Array.isArray(rootContext.modelValue.value)) {\n list = rootContext.modelValue.value.map(value => getOption(value)?.textContent ?? '')\n }\n else {\n list = [getOption(rootContext.modelValue.value)?.textContent ?? '']\n }\n return list.filter(Boolean)\n})\n\nconst slotText = computed(() => {\n return selectedLabel.value.length ? selectedLabel.value.join(', ') : props.placeholder\n})\n</script>\n\n<template>\n <Primitive\n :ref=\"forwardRef\"\n :as=\"as\"\n :as-child=\"asChild\"\n :style=\"{ pointerEvents: 'none' }\"\n :data-placeholder=\"selectedLabel.length ? undefined : props.placeholder\"\n >\n <slot\n :selected-label=\"selectedLabel\"\n :model-value=\"rootContext.modelValue.value\"\n >\n {{ slotText }}\n </slot>\n </Primitive>\n</template>\n"],"names":[],"mappings":";;;;;;;;;;;;;;AAiBA,IAAA,MAAM,KAAQ,GAAA,OAAA;AAKd,IAAA,MAAM,EAAE,UAAA,EAAY,cAAe,EAAA,GAAI,gBAAiB,EAAA;AAExD,IAAA,MAAM,cAAc,uBAAwB,EAAA;AAE5C,IAAA,SAAA,CAAU,MAAM;AACd,MAAA,WAAA,CAAY,YAAe,GAAA,cAAA;AAAA,KAC5B,CAAA;AAED,IAAM,MAAA,aAAA,GAAgB,SAAS,MAAM;AACnC,MAAA,IAAI,OAAiB,EAAC;AACtB,MAAA,MAAM,OAAU,GAAA,KAAA,CAAM,IAAK,CAAA,WAAA,CAAY,WAAW,KAAK,CAAA;AACvD,MAAA,MAAM,SAAY,GAAA,CAAC,KAA4B,KAAA,OAAA,CAAQ,IAAK,CAAA,CAAA,MAAA,KAAU,eAAgB,CAAA,KAAA,EAAO,MAAO,CAAA,KAAA,EAAO,WAAY,CAAA,EAAE,CAAC,CAAA;AAC1H,MAAA,IAAI,KAAM,CAAA,OAAA,CAAQ,WAAY,CAAA,UAAA,CAAW,KAAK,CAAG,EAAA;AAC/C,QAAO,IAAA,GAAA,WAAA,CAAY,WAAW,KAAM,CAAA,GAAA,CAAI,WAAS,SAAU,CAAA,KAAK,CAAG,EAAA,WAAA,IAAe,EAAE,CAAA;AAAA,OAEjF,MAAA;AACH,QAAA,IAAA,GAAO,CAAC,SAAU,CAAA,WAAA,CAAY,WAAW,KAAK,CAAA,EAAG,eAAe,EAAE,CAAA;AAAA;AAEpE,MAAO,OAAA,IAAA,CAAK,OAAO,OAAO,CAAA;AAAA,KAC3B,CAAA;AAED,IAAM,MAAA,QAAA,GAAW,SAAS,MAAM;AAC9B,MAAO,OAAA,aAAA,CAAc,MAAM,MAAS,GAAA,aAAA,CAAc,MAAM,IAAK,CAAA,IAAI,IAAI,KAAM,CAAA,WAAA;AAAA,KAC5E,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"SelectValue.js","sources":["../../src/Select/SelectValue.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { PrimitiveProps } from '@/Primitive'\nimport type { AcceptableValue } from '@/shared/types'\nimport { valueComparator } from './utils'\n\nexport interface SelectValueProps extends PrimitiveProps {\n /** The content that will be rendered inside the `SelectValue` when no `value` or `defaultValue` is set. */\n placeholder?: string\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, onMounted } from 'vue'\nimport { Primitive } from '@/Primitive'\nimport { useForwardExpose } from '@/shared'\nimport { injectSelectRootContext } from './SelectRoot.vue'\n\nconst props = withDefaults(defineProps<SelectValueProps>(), {\n as: 'span',\n placeholder: '',\n})\n\nconst { forwardRef, currentElement } = useForwardExpose()\n\nconst rootContext = injectSelectRootContext()\n\nonMounted(() => {\n rootContext.valueElement = currentElement\n})\n\nconst selectedLabel = computed(() => {\n let list: string[] = []\n const options = Array.from(rootContext.optionsSet.value)\n const getOption = (value?: AcceptableValue) => options.find(option => valueComparator(value, option.value, rootContext.by))\n if (Array.isArray(rootContext.modelValue.value)) {\n list = rootContext.modelValue.value.map(value => getOption(value)?.textContent ?? '')\n }\n else {\n list = [getOption(rootContext.modelValue.value)?.textContent ?? '']\n }\n return list.filter(Boolean)\n})\n\nconst slotText = computed(() => {\n return selectedLabel.value.length ? selectedLabel.value.join(', ') : props.placeholder\n})\n</script>\n\n<template>\n <Primitive\n :ref=\"forwardRef\"\n :as=\"as\"\n :as-child=\"asChild\"\n :style=\"{ pointerEvents: 'none' }\"\n :data-placeholder=\"selectedLabel.length ? undefined : props.placeholder\"\n >\n <slot\n :selected-label=\"selectedLabel\"\n :model-value=\"rootContext.modelValue.value\"\n >\n {{ slotText }}\n </slot>\n </Primitive>\n</template>\n"],"names":[],"mappings":";;;;;;;;;;;;;;AAiBA,IAAA,MAAM,KAAQ,GAAA,OAAA;AAKd,IAAA,MAAM,EAAE,UAAA,EAAY,cAAe,EAAA,GAAI,gBAAiB,EAAA;AAExD,IAAA,MAAM,cAAc,uBAAwB,EAAA;AAE5C,IAAA,SAAA,CAAU,MAAM;AACd,MAAA,WAAA,CAAY,YAAe,GAAA,cAAA;AAAA,KAC5B,CAAA;AAED,IAAM,MAAA,aAAA,GAAgB,SAAS,MAAM;AACnC,MAAA,IAAI,OAAiB,EAAC;AACtB,MAAA,MAAM,OAAU,GAAA,KAAA,CAAM,IAAK,CAAA,WAAA,CAAY,WAAW,KAAK,CAAA;AACvD,MAAA,MAAM,SAAY,GAAA,CAAC,KAA4B,KAAA,OAAA,CAAQ,IAAK,CAAA,CAAA,MAAA,KAAU,eAAgB,CAAA,KAAA,EAAO,MAAO,CAAA,KAAA,EAAO,WAAY,CAAA,EAAE,CAAC,CAAA;AAC1H,MAAA,IAAI,KAAM,CAAA,OAAA,CAAQ,WAAY,CAAA,UAAA,CAAW,KAAK,CAAG,EAAA;AAC/C,QAAO,IAAA,GAAA,WAAA,CAAY,WAAW,KAAM,CAAA,GAAA,CAAI,WAAS,SAAU,CAAA,KAAK,CAAG,EAAA,WAAA,IAAe,EAAE,CAAA;AAAA,OAEjF,MAAA;AACH,QAAA,IAAA,GAAO,CAAC,SAAU,CAAA,WAAA,CAAY,WAAW,KAAK,CAAA,EAAG,eAAe,EAAE,CAAA;AAAA;AAEpE,MAAO,OAAA,IAAA,CAAK,OAAO,OAAO,CAAA;AAAA,KAC3B,CAAA;AAED,IAAM,MAAA,QAAA,GAAW,SAAS,MAAM;AAC9B,MAAO,OAAA,aAAA,CAAc,MAAM,MAAS,GAAA,aAAA,CAAc,MAAM,IAAK,CAAA,IAAI,IAAI,KAAM,CAAA,WAAA;AAAA,KAC5E,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"SelectViewport.cjs","sources":["../../src/Select/SelectViewport.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { PrimitiveProps } from '@/Primitive'\nimport { useForwardExpose } from '@/shared'\nimport { useNonce } from '@/shared/useNonce'\n\nexport interface SelectViewportProps extends PrimitiveProps {\n /**\n * Will add `nonce` attribute to the style tag which can be used by Content Security Policy. <br> If omitted, inherits globally from `ConfigProvider`.\n */\n nonce?: string\n}\n</script>\n\n<script setup lang=\"ts\">\nimport {\n Primitive,\n} from '@/Primitive'\nimport { onMounted, ref, toRefs } from 'vue'\nimport { injectSelectContentContext } from './SelectContentImpl.vue'\nimport { injectSelectItemAlignedPositionContext } from './SelectItemAlignedPosition.vue'\nimport { CONTENT_MARGIN } from './utils'\n\nconst props = defineProps<SelectViewportProps>()\nconst { nonce: propNonce } = toRefs(props)\nconst nonce = useNonce(propNonce)\n\nconst contentContext = injectSelectContentContext()\nconst alignedPositionContext\n = contentContext.position === 'item-aligned'\n ? injectSelectItemAlignedPositionContext()\n : undefined\n\nconst { forwardRef, currentElement } = useForwardExpose()\n\nonMounted(() => {\n contentContext?.onViewportChange(currentElement.value)\n})\n\nconst prevScrollTopRef = ref(0)\n\nfunction handleScroll(event: WheelEvent) {\n const viewport = event.currentTarget as HTMLElement\n const { shouldExpandOnScrollRef, contentWrapper } = alignedPositionContext ?? {}\n if (shouldExpandOnScrollRef?.value && contentWrapper?.value) {\n const scrolledBy = Math.abs(prevScrollTopRef.value - viewport.scrollTop)\n if (scrolledBy > 0) {\n const availableHeight = window.innerHeight - CONTENT_MARGIN * 2\n const cssMinHeight = Number.parseFloat(\n contentWrapper.value.style.minHeight,\n )\n const cssHeight = Number.parseFloat(contentWrapper.value.style.height)\n const prevHeight = Math.max(cssMinHeight, cssHeight)\n\n if (prevHeight < availableHeight) {\n const nextHeight = prevHeight + scrolledBy\n const clampedNextHeight = Math.min(availableHeight, nextHeight)\n const heightDiff = nextHeight - clampedNextHeight\n\n contentWrapper.value.style.height = `${clampedNextHeight}px`\n if (contentWrapper.value.style.bottom === '0px') {\n viewport.scrollTop = heightDiff > 0 ? heightDiff : 0\n // ensure the content stays pinned to the bottom\n contentWrapper.value.style.justifyContent = 'flex-end'\n }\n }\n }\n }\n prevScrollTopRef.value = viewport.scrollTop\n}\n</script>\n\n<template>\n <Primitive\n :ref=\"forwardRef\"\n data-reka-select-viewport\n role=\"presentation\"\n v-bind=\"{ ...$attrs, ...props }\"\n :style=\"{\n // we use position: 'relative' here on the `viewport` so that when we call\n // `selectedItem.offsetTop` in calculations, the offset is relative to the viewport\n // (independent of the scrollUpButton).\n position: 'relative',\n flex: 1,\n overflow: 'hidden auto',\n }\"\n @scroll=\"handleScroll\"\n >\n <slot />\n </Primitive>\n <Primitive\n as=\"style\"\n :nonce=\"nonce\"\n >\n /* Hide scrollbars cross-browser and enable momentum scroll for touch\n devices */ [data-reka-select-viewport] { scrollbar-width:none; -ms-overflow-style: none;\n -webkit-overflow-scrolling: touch; }\n [data-reka-select-viewport]::-webkit-scrollbar { display: none; }\n </Primitive>\n</template>\n"],"names":["toRefs","useNonce","injectSelectContentContext","injectSelectItemAlignedPositionContext","useForwardExpose","onMounted","ref","CONTENT_MARGIN"],"mappings":";;;;;;;;;;;;;;;;;;AAsBA,IAAA,MAAM,KAAQ,GAAA,OAAA;AACd,IAAA,MAAM,EAAE,KAAA,EAAO,SAAU,EAAA,GAAIA,WAAO,KAAK,CAAA;AACzC,IAAM,MAAA,KAAA,GAAQC,yBAAS,SAAS,CAAA;AAEhC,IAAA,MAAM,iBAAiBC,mDAA2B,EAAA;AAClD,IAAA,MAAM,sBACF,GAAA,cAAA,CAAe,QAAa,KAAA,cAAA,GAC1BC,yEACA,GAAA,MAAA;AAEN,IAAA,MAAM,EAAE,UAAA,EAAY,cAAe,EAAA,GAAIC,wCAAiB,EAAA;AAExD,IAAAC,aAAA,CAAU,MAAM;AACd,MAAgB,cAAA,EAAA,gBAAA,CAAiB,eAAe,KAAK,CAAA;AAAA,KACtD,CAAA;AAED,IAAM,MAAA,gBAAA,GAAmBC,QAAI,CAAC,CAAA;AAE9B,IAAA,SAAS,aAAa,KAAmB,EAAA;AACvC,MAAA,MAAM,WAAW,KAAM,CAAA,aAAA;AACvB,MAAA,MAAM,EAAE,uBAAA,EAAyB,cAAe,EAAA,GAAI,0BAA0B,EAAC;AAC/E,MAAI,IAAA,uBAAA,EAAyB,KAAS,IAAA,cAAA,EAAgB,KAAO,EAAA;AAC3D,QAAA,MAAM,aAAa,IAAK,CAAA,GAAA,CAAI,gBAAiB,CAAA,KAAA,GAAQ,SAAS,SAAS,CAAA;AACvE,QAAA,IAAI,aAAa,CAAG,EAAA;AAClB,UAAM,MAAA,eAAA,GAAkB,MAAO,CAAA,WAAA,GAAcC,2BAAiB,GAAA,CAAA;AAC9D,UAAA,MAAM,eAAe,MAAO,CAAA,UAAA;AAAA,YAC1B,cAAA,CAAe,MAAM,KAAM,CAAA;AAAA,WAC7B;AACA,UAAA,MAAM,YAAY,MAAO,CAAA,UAAA,CAAW,cAAe,CAAA,KAAA,CAAM,MAAM,MAAM,CAAA;AACrE,UAAA,MAAM,UAAa,GAAA,IAAA,CAAK,GAAI,CAAA,YAAA,EAAc,SAAS,CAAA;AAEnD,UAAA,IAAI,aAAa,eAAiB,EAAA;AAChC,YAAA,MAAM,aAAa,UAAa,GAAA,UAAA;AAChC,YAAA,MAAM,iBAAoB,GAAA,IAAA,CAAK,GAAI,CAAA,eAAA,EAAiB,UAAU,CAAA;AAC9D,YAAA,MAAM,aAAa,UAAa,GAAA,iBAAA;AAEhC,YAAA,cAAA,CAAe,KAAM,CAAA,KAAA,CAAM,MAAS,GAAA,CAAA,EAAG,iBAAiB,CAAA,EAAA,CAAA;AACxD,YAAA,IAAI,cAAe,CAAA,KAAA,CAAM,KAAM,CAAA,MAAA,KAAW,KAAO,EAAA;AAC/C,cAAS,QAAA,CAAA,SAAA,GAAY,UAAa,GAAA,CAAA,GAAI,UAAa,GAAA,CAAA;AAEnD,cAAe,cAAA,CAAA,KAAA,CAAM,MAAM,cAAiB,GAAA,UAAA;AAAA;AAC9C;AACF;AACF;AAEF,MAAA,gBAAA,CAAiB,QAAQ,QAAS,CAAA,SAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"SelectViewport.cjs","sources":["../../src/Select/SelectViewport.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { PrimitiveProps } from '@/Primitive'\nimport { useForwardExpose } from '@/shared'\nimport { useNonce } from '@/shared/useNonce'\n\nexport interface SelectViewportProps extends PrimitiveProps {\n /**\n * Will add `nonce` attribute to the style tag which can be used by Content Security Policy. <br> If omitted, inherits globally from `ConfigProvider`.\n */\n nonce?: string\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { onMounted, ref, toRefs } from 'vue'\nimport {\n Primitive,\n} from '@/Primitive'\nimport { injectSelectContentContext } from './SelectContentImpl.vue'\nimport { injectSelectItemAlignedPositionContext } from './SelectItemAlignedPosition.vue'\nimport { CONTENT_MARGIN } from './utils'\n\nconst props = defineProps<SelectViewportProps>()\nconst { nonce: propNonce } = toRefs(props)\nconst nonce = useNonce(propNonce)\n\nconst contentContext = injectSelectContentContext()\nconst alignedPositionContext\n = contentContext.position === 'item-aligned'\n ? injectSelectItemAlignedPositionContext()\n : undefined\n\nconst { forwardRef, currentElement } = useForwardExpose()\n\nonMounted(() => {\n contentContext?.onViewportChange(currentElement.value)\n})\n\nconst prevScrollTopRef = ref(0)\n\nfunction handleScroll(event: WheelEvent) {\n const viewport = event.currentTarget as HTMLElement\n const { shouldExpandOnScrollRef, contentWrapper } = alignedPositionContext ?? {}\n if (shouldExpandOnScrollRef?.value && contentWrapper?.value) {\n const scrolledBy = Math.abs(prevScrollTopRef.value - viewport.scrollTop)\n if (scrolledBy > 0) {\n const availableHeight = window.innerHeight - CONTENT_MARGIN * 2\n const cssMinHeight = Number.parseFloat(\n contentWrapper.value.style.minHeight,\n )\n const cssHeight = Number.parseFloat(contentWrapper.value.style.height)\n const prevHeight = Math.max(cssMinHeight, cssHeight)\n\n if (prevHeight < availableHeight) {\n const nextHeight = prevHeight + scrolledBy\n const clampedNextHeight = Math.min(availableHeight, nextHeight)\n const heightDiff = nextHeight - clampedNextHeight\n\n contentWrapper.value.style.height = `${clampedNextHeight}px`\n if (contentWrapper.value.style.bottom === '0px') {\n viewport.scrollTop = heightDiff > 0 ? heightDiff : 0\n // ensure the content stays pinned to the bottom\n contentWrapper.value.style.justifyContent = 'flex-end'\n }\n }\n }\n }\n prevScrollTopRef.value = viewport.scrollTop\n}\n</script>\n\n<template>\n <Primitive\n :ref=\"forwardRef\"\n data-reka-select-viewport\n role=\"presentation\"\n v-bind=\"{ ...$attrs, ...props }\"\n :style=\"{\n // we use position: 'relative' here on the `viewport` so that when we call\n // `selectedItem.offsetTop` in calculations, the offset is relative to the viewport\n // (independent of the scrollUpButton).\n position: 'relative',\n flex: 1,\n overflow: 'hidden auto',\n }\"\n @scroll=\"handleScroll\"\n >\n <slot />\n </Primitive>\n <Primitive\n as=\"style\"\n :nonce=\"nonce\"\n >\n /* Hide scrollbars cross-browser and enable momentum scroll for touch\n devices */ [data-reka-select-viewport] { scrollbar-width:none; -ms-overflow-style: none;\n -webkit-overflow-scrolling: touch; }\n [data-reka-select-viewport]::-webkit-scrollbar { display: none; }\n </Primitive>\n</template>\n"],"names":["toRefs","useNonce","injectSelectContentContext","injectSelectItemAlignedPositionContext","useForwardExpose","onMounted","ref","CONTENT_MARGIN"],"mappings":";;;;;;;;;;;;;;;;;;AAsBA,IAAA,MAAM,KAAQ,GAAA,OAAA;AACd,IAAA,MAAM,EAAE,KAAA,EAAO,SAAU,EAAA,GAAIA,WAAO,KAAK,CAAA;AACzC,IAAM,MAAA,KAAA,GAAQC,yBAAS,SAAS,CAAA;AAEhC,IAAA,MAAM,iBAAiBC,mDAA2B,EAAA;AAClD,IAAA,MAAM,sBACF,GAAA,cAAA,CAAe,QAAa,KAAA,cAAA,GAC1BC,yEACA,GAAA,MAAA;AAEN,IAAA,MAAM,EAAE,UAAA,EAAY,cAAe,EAAA,GAAIC,wCAAiB,EAAA;AAExD,IAAAC,aAAA,CAAU,MAAM;AACd,MAAgB,cAAA,EAAA,gBAAA,CAAiB,eAAe,KAAK,CAAA;AAAA,KACtD,CAAA;AAED,IAAM,MAAA,gBAAA,GAAmBC,QAAI,CAAC,CAAA;AAE9B,IAAA,SAAS,aAAa,KAAmB,EAAA;AACvC,MAAA,MAAM,WAAW,KAAM,CAAA,aAAA;AACvB,MAAA,MAAM,EAAE,uBAAA,EAAyB,cAAe,EAAA,GAAI,0BAA0B,EAAC;AAC/E,MAAI,IAAA,uBAAA,EAAyB,KAAS,IAAA,cAAA,EAAgB,KAAO,EAAA;AAC3D,QAAA,MAAM,aAAa,IAAK,CAAA,GAAA,CAAI,gBAAiB,CAAA,KAAA,GAAQ,SAAS,SAAS,CAAA;AACvE,QAAA,IAAI,aAAa,CAAG,EAAA;AAClB,UAAM,MAAA,eAAA,GAAkB,MAAO,CAAA,WAAA,GAAcC,2BAAiB,GAAA,CAAA;AAC9D,UAAA,MAAM,eAAe,MAAO,CAAA,UAAA;AAAA,YAC1B,cAAA,CAAe,MAAM,KAAM,CAAA;AAAA,WAC7B;AACA,UAAA,MAAM,YAAY,MAAO,CAAA,UAAA,CAAW,cAAe,CAAA,KAAA,CAAM,MAAM,MAAM,CAAA;AACrE,UAAA,MAAM,UAAa,GAAA,IAAA,CAAK,GAAI,CAAA,YAAA,EAAc,SAAS,CAAA;AAEnD,UAAA,IAAI,aAAa,eAAiB,EAAA;AAChC,YAAA,MAAM,aAAa,UAAa,GAAA,UAAA;AAChC,YAAA,MAAM,iBAAoB,GAAA,IAAA,CAAK,GAAI,CAAA,eAAA,EAAiB,UAAU,CAAA;AAC9D,YAAA,MAAM,aAAa,UAAa,GAAA,iBAAA;AAEhC,YAAA,cAAA,CAAe,KAAM,CAAA,KAAA,CAAM,MAAS,GAAA,CAAA,EAAG,iBAAiB,CAAA,EAAA,CAAA;AACxD,YAAA,IAAI,cAAe,CAAA,KAAA,CAAM,KAAM,CAAA,MAAA,KAAW,KAAO,EAAA;AAC/C,cAAS,QAAA,CAAA,SAAA,GAAY,UAAa,GAAA,CAAA,GAAI,UAAa,GAAA,CAAA;AAEnD,cAAe,cAAA,CAAA,KAAA,CAAM,MAAM,cAAiB,GAAA,UAAA;AAAA;AAC9C;AACF;AACF;AAEF,MAAA,gBAAA,CAAiB,QAAQ,QAAS,CAAA,SAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"SelectViewport.js","sources":["../../src/Select/SelectViewport.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { PrimitiveProps } from '@/Primitive'\nimport { useForwardExpose } from '@/shared'\nimport { useNonce } from '@/shared/useNonce'\n\nexport interface SelectViewportProps extends PrimitiveProps {\n /**\n * Will add `nonce` attribute to the style tag which can be used by Content Security Policy. <br> If omitted, inherits globally from `ConfigProvider`.\n */\n nonce?: string\n}\n</script>\n\n<script setup lang=\"ts\">\nimport {\n Primitive,\n} from '@/Primitive'\nimport { onMounted, ref, toRefs } from 'vue'\nimport { injectSelectContentContext } from './SelectContentImpl.vue'\nimport { injectSelectItemAlignedPositionContext } from './SelectItemAlignedPosition.vue'\nimport { CONTENT_MARGIN } from './utils'\n\nconst props = defineProps<SelectViewportProps>()\nconst { nonce: propNonce } = toRefs(props)\nconst nonce = useNonce(propNonce)\n\nconst contentContext = injectSelectContentContext()\nconst alignedPositionContext\n = contentContext.position === 'item-aligned'\n ? injectSelectItemAlignedPositionContext()\n : undefined\n\nconst { forwardRef, currentElement } = useForwardExpose()\n\nonMounted(() => {\n contentContext?.onViewportChange(currentElement.value)\n})\n\nconst prevScrollTopRef = ref(0)\n\nfunction handleScroll(event: WheelEvent) {\n const viewport = event.currentTarget as HTMLElement\n const { shouldExpandOnScrollRef, contentWrapper } = alignedPositionContext ?? {}\n if (shouldExpandOnScrollRef?.value && contentWrapper?.value) {\n const scrolledBy = Math.abs(prevScrollTopRef.value - viewport.scrollTop)\n if (scrolledBy > 0) {\n const availableHeight = window.innerHeight - CONTENT_MARGIN * 2\n const cssMinHeight = Number.parseFloat(\n contentWrapper.value.style.minHeight,\n )\n const cssHeight = Number.parseFloat(contentWrapper.value.style.height)\n const prevHeight = Math.max(cssMinHeight, cssHeight)\n\n if (prevHeight < availableHeight) {\n const nextHeight = prevHeight + scrolledBy\n const clampedNextHeight = Math.min(availableHeight, nextHeight)\n const heightDiff = nextHeight - clampedNextHeight\n\n contentWrapper.value.style.height = `${clampedNextHeight}px`\n if (contentWrapper.value.style.bottom === '0px') {\n viewport.scrollTop = heightDiff > 0 ? heightDiff : 0\n // ensure the content stays pinned to the bottom\n contentWrapper.value.style.justifyContent = 'flex-end'\n }\n }\n }\n }\n prevScrollTopRef.value = viewport.scrollTop\n}\n</script>\n\n<template>\n <Primitive\n :ref=\"forwardRef\"\n data-reka-select-viewport\n role=\"presentation\"\n v-bind=\"{ ...$attrs, ...props }\"\n :style=\"{\n // we use position: 'relative' here on the `viewport` so that when we call\n // `selectedItem.offsetTop` in calculations, the offset is relative to the viewport\n // (independent of the scrollUpButton).\n position: 'relative',\n flex: 1,\n overflow: 'hidden auto',\n }\"\n @scroll=\"handleScroll\"\n >\n <slot />\n </Primitive>\n <Primitive\n as=\"style\"\n :nonce=\"nonce\"\n >\n /* Hide scrollbars cross-browser and enable momentum scroll for touch\n devices */ [data-reka-select-viewport] { scrollbar-width:none; -ms-overflow-style: none;\n -webkit-overflow-scrolling: touch; }\n [data-reka-select-viewport]::-webkit-scrollbar { display: none; }\n </Primitive>\n</template>\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAsBA,IAAA,MAAM,KAAQ,GAAA,OAAA;AACd,IAAA,MAAM,EAAE,KAAA,EAAO,SAAU,EAAA,GAAI,OAAO,KAAK,CAAA;AACzC,IAAM,MAAA,KAAA,GAAQ,SAAS,SAAS,CAAA;AAEhC,IAAA,MAAM,iBAAiB,0BAA2B,EAAA;AAClD,IAAA,MAAM,sBACF,GAAA,cAAA,CAAe,QAAa,KAAA,cAAA,GAC1B,wCACA,GAAA,MAAA;AAEN,IAAA,MAAM,EAAE,UAAA,EAAY,cAAe,EAAA,GAAI,gBAAiB,EAAA;AAExD,IAAA,SAAA,CAAU,MAAM;AACd,MAAgB,cAAA,EAAA,gBAAA,CAAiB,eAAe,KAAK,CAAA;AAAA,KACtD,CAAA;AAED,IAAM,MAAA,gBAAA,GAAmB,IAAI,CAAC,CAAA;AAE9B,IAAA,SAAS,aAAa,KAAmB,EAAA;AACvC,MAAA,MAAM,WAAW,KAAM,CAAA,aAAA;AACvB,MAAA,MAAM,EAAE,uBAAA,EAAyB,cAAe,EAAA,GAAI,0BAA0B,EAAC;AAC/E,MAAI,IAAA,uBAAA,EAAyB,KAAS,IAAA,cAAA,EAAgB,KAAO,EAAA;AAC3D,QAAA,MAAM,aAAa,IAAK,CAAA,GAAA,CAAI,gBAAiB,CAAA,KAAA,GAAQ,SAAS,SAAS,CAAA;AACvE,QAAA,IAAI,aAAa,CAAG,EAAA;AAClB,UAAM,MAAA,eAAA,GAAkB,MAAO,CAAA,WAAA,GAAc,cAAiB,GAAA,CAAA;AAC9D,UAAA,MAAM,eAAe,MAAO,CAAA,UAAA;AAAA,YAC1B,cAAA,CAAe,MAAM,KAAM,CAAA;AAAA,WAC7B;AACA,UAAA,MAAM,YAAY,MAAO,CAAA,UAAA,CAAW,cAAe,CAAA,KAAA,CAAM,MAAM,MAAM,CAAA;AACrE,UAAA,MAAM,UAAa,GAAA,IAAA,CAAK,GAAI,CAAA,YAAA,EAAc,SAAS,CAAA;AAEnD,UAAA,IAAI,aAAa,eAAiB,EAAA;AAChC,YAAA,MAAM,aAAa,UAAa,GAAA,UAAA;AAChC,YAAA,MAAM,iBAAoB,GAAA,IAAA,CAAK,GAAI,CAAA,eAAA,EAAiB,UAAU,CAAA;AAC9D,YAAA,MAAM,aAAa,UAAa,GAAA,iBAAA;AAEhC,YAAA,cAAA,CAAe,KAAM,CAAA,KAAA,CAAM,MAAS,GAAA,CAAA,EAAG,iBAAiB,CAAA,EAAA,CAAA;AACxD,YAAA,IAAI,cAAe,CAAA,KAAA,CAAM,KAAM,CAAA,MAAA,KAAW,KAAO,EAAA;AAC/C,cAAS,QAAA,CAAA,SAAA,GAAY,UAAa,GAAA,CAAA,GAAI,UAAa,GAAA,CAAA;AAEnD,cAAe,cAAA,CAAA,KAAA,CAAM,MAAM,cAAiB,GAAA,UAAA;AAAA;AAC9C;AACF;AACF;AAEF,MAAA,gBAAA,CAAiB,QAAQ,QAAS,CAAA,SAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"SelectViewport.js","sources":["../../src/Select/SelectViewport.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { PrimitiveProps } from '@/Primitive'\nimport { useForwardExpose } from '@/shared'\nimport { useNonce } from '@/shared/useNonce'\n\nexport interface SelectViewportProps extends PrimitiveProps {\n /**\n * Will add `nonce` attribute to the style tag which can be used by Content Security Policy. <br> If omitted, inherits globally from `ConfigProvider`.\n */\n nonce?: string\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { onMounted, ref, toRefs } from 'vue'\nimport {\n Primitive,\n} from '@/Primitive'\nimport { injectSelectContentContext } from './SelectContentImpl.vue'\nimport { injectSelectItemAlignedPositionContext } from './SelectItemAlignedPosition.vue'\nimport { CONTENT_MARGIN } from './utils'\n\nconst props = defineProps<SelectViewportProps>()\nconst { nonce: propNonce } = toRefs(props)\nconst nonce = useNonce(propNonce)\n\nconst contentContext = injectSelectContentContext()\nconst alignedPositionContext\n = contentContext.position === 'item-aligned'\n ? injectSelectItemAlignedPositionContext()\n : undefined\n\nconst { forwardRef, currentElement } = useForwardExpose()\n\nonMounted(() => {\n contentContext?.onViewportChange(currentElement.value)\n})\n\nconst prevScrollTopRef = ref(0)\n\nfunction handleScroll(event: WheelEvent) {\n const viewport = event.currentTarget as HTMLElement\n const { shouldExpandOnScrollRef, contentWrapper } = alignedPositionContext ?? {}\n if (shouldExpandOnScrollRef?.value && contentWrapper?.value) {\n const scrolledBy = Math.abs(prevScrollTopRef.value - viewport.scrollTop)\n if (scrolledBy > 0) {\n const availableHeight = window.innerHeight - CONTENT_MARGIN * 2\n const cssMinHeight = Number.parseFloat(\n contentWrapper.value.style.minHeight,\n )\n const cssHeight = Number.parseFloat(contentWrapper.value.style.height)\n const prevHeight = Math.max(cssMinHeight, cssHeight)\n\n if (prevHeight < availableHeight) {\n const nextHeight = prevHeight + scrolledBy\n const clampedNextHeight = Math.min(availableHeight, nextHeight)\n const heightDiff = nextHeight - clampedNextHeight\n\n contentWrapper.value.style.height = `${clampedNextHeight}px`\n if (contentWrapper.value.style.bottom === '0px') {\n viewport.scrollTop = heightDiff > 0 ? heightDiff : 0\n // ensure the content stays pinned to the bottom\n contentWrapper.value.style.justifyContent = 'flex-end'\n }\n }\n }\n }\n prevScrollTopRef.value = viewport.scrollTop\n}\n</script>\n\n<template>\n <Primitive\n :ref=\"forwardRef\"\n data-reka-select-viewport\n role=\"presentation\"\n v-bind=\"{ ...$attrs, ...props }\"\n :style=\"{\n // we use position: 'relative' here on the `viewport` so that when we call\n // `selectedItem.offsetTop` in calculations, the offset is relative to the viewport\n // (independent of the scrollUpButton).\n position: 'relative',\n flex: 1,\n overflow: 'hidden auto',\n }\"\n @scroll=\"handleScroll\"\n >\n <slot />\n </Primitive>\n <Primitive\n as=\"style\"\n :nonce=\"nonce\"\n >\n /* Hide scrollbars cross-browser and enable momentum scroll for touch\n devices */ [data-reka-select-viewport] { scrollbar-width:none; -ms-overflow-style: none;\n -webkit-overflow-scrolling: touch; }\n [data-reka-select-viewport]::-webkit-scrollbar { display: none; }\n </Primitive>\n</template>\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAsBA,IAAA,MAAM,KAAQ,GAAA,OAAA;AACd,IAAA,MAAM,EAAE,KAAA,EAAO,SAAU,EAAA,GAAI,OAAO,KAAK,CAAA;AACzC,IAAM,MAAA,KAAA,GAAQ,SAAS,SAAS,CAAA;AAEhC,IAAA,MAAM,iBAAiB,0BAA2B,EAAA;AAClD,IAAA,MAAM,sBACF,GAAA,cAAA,CAAe,QAAa,KAAA,cAAA,GAC1B,wCACA,GAAA,MAAA;AAEN,IAAA,MAAM,EAAE,UAAA,EAAY,cAAe,EAAA,GAAI,gBAAiB,EAAA;AAExD,IAAA,SAAA,CAAU,MAAM;AACd,MAAgB,cAAA,EAAA,gBAAA,CAAiB,eAAe,KAAK,CAAA;AAAA,KACtD,CAAA;AAED,IAAM,MAAA,gBAAA,GAAmB,IAAI,CAAC,CAAA;AAE9B,IAAA,SAAS,aAAa,KAAmB,EAAA;AACvC,MAAA,MAAM,WAAW,KAAM,CAAA,aAAA;AACvB,MAAA,MAAM,EAAE,uBAAA,EAAyB,cAAe,EAAA,GAAI,0BAA0B,EAAC;AAC/E,MAAI,IAAA,uBAAA,EAAyB,KAAS,IAAA,cAAA,EAAgB,KAAO,EAAA;AAC3D,QAAA,MAAM,aAAa,IAAK,CAAA,GAAA,CAAI,gBAAiB,CAAA,KAAA,GAAQ,SAAS,SAAS,CAAA;AACvE,QAAA,IAAI,aAAa,CAAG,EAAA;AAClB,UAAM,MAAA,eAAA,GAAkB,MAAO,CAAA,WAAA,GAAc,cAAiB,GAAA,CAAA;AAC9D,UAAA,MAAM,eAAe,MAAO,CAAA,UAAA;AAAA,YAC1B,cAAA,CAAe,MAAM,KAAM,CAAA;AAAA,WAC7B;AACA,UAAA,MAAM,YAAY,MAAO,CAAA,UAAA,CAAW,cAAe,CAAA,KAAA,CAAM,MAAM,MAAM,CAAA;AACrE,UAAA,MAAM,UAAa,GAAA,IAAA,CAAK,GAAI,CAAA,YAAA,EAAc,SAAS,CAAA;AAEnD,UAAA,IAAI,aAAa,eAAiB,EAAA;AAChC,YAAA,MAAM,aAAa,UAAa,GAAA,UAAA;AAChC,YAAA,MAAM,iBAAoB,GAAA,IAAA,CAAK,GAAI,CAAA,eAAA,EAAiB,UAAU,CAAA;AAC9D,YAAA,MAAM,aAAa,UAAa,GAAA,iBAAA;AAEhC,YAAA,cAAA,CAAe,KAAM,CAAA,KAAA,CAAM,MAAS,GAAA,CAAA,EAAG,iBAAiB,CAAA,EAAA,CAAA;AACxD,YAAA,IAAI,cAAe,CAAA,KAAA,CAAM,KAAM,CAAA,MAAA,KAAW,KAAO,EAAA;AAC/C,cAAS,QAAA,CAAA,SAAA,GAAY,UAAa,GAAA,CAAA,GAAI,UAAa,GAAA,CAAA;AAEnD,cAAe,cAAA,CAAA,KAAA,CAAM,MAAM,cAAiB,GAAA,UAAA;AAAA;AAC9C;AACF;AACF;AAEF,MAAA,gBAAA,CAAiB,QAAQ,QAAS,CAAA,SAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -23,7 +23,7 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
23
23
  const rootContext = Slider_SliderRoot.injectSliderRootContext();
24
24
  const offsetPosition = vue.ref();
25
25
  const rectRef = vue.ref();
26
- const isSlidingFromLeft = vue.computed(() => dir?.value === "ltr" && !inverted.value || dir?.value !== "ltr" && inverted.value);
26
+ const isSlidingFromLeft = vue.computed(() => dir?.value !== "rtl" && !inverted.value || dir?.value !== "ltr" && inverted.value);
27
27
  function getValueFromPointerEvent(event, slideStart) {
28
28
  const rect = rectRef.value || sliderElement.value.getBoundingClientRect();
29
29
  const thumb = [...rootContext.thumbElements.value][rootContext.valueIndexToChangeRef.value];
@@ -38,10 +38,13 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
38
38
  const position = slideStart ? event.clientX - rect.left - thumbWidth / 2 : event.clientX - rect.left - (offsetPosition.value ?? 0);
39
39
  return value(position);
40
40
  }
41
+ const startEdge = vue.computed(() => isSlidingFromLeft.value ? "left" : "right");
42
+ const endEdge = vue.computed(() => isSlidingFromLeft.value ? "right" : "left");
43
+ const direction = vue.computed(() => isSlidingFromLeft.value ? 1 : -1);
41
44
  Slider_utils.provideSliderOrientationContext({
42
- startEdge: isSlidingFromLeft.value ? "left" : "right",
43
- endEdge: isSlidingFromLeft.value ? "right" : "left",
44
- direction: isSlidingFromLeft.value ? 1 : -1,
45
+ startEdge,
46
+ endEdge,
47
+ direction,
45
48
  size: "width"
46
49
  });
47
50
  return (_ctx, _cache) => {
@@ -1 +1 @@
1
- {"version":3,"file":"SliderHorizontal.cjs","sources":["../../src/Slider/SliderHorizontal.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { Direction, SliderOrientationPrivateEmits, SliderOrientationPrivateProps } from './utils'\nimport { useForwardExpose } from '@/shared'\nimport { computed, ref, toRefs } from 'vue'\nimport SliderImpl from './SliderImpl.vue'\nimport { injectSliderRootContext } from './SliderRoot.vue'\nimport { BACK_KEYS, linearScale, provideSliderOrientationContext } from './utils'\n\ninterface SliderHorizontalProps extends SliderOrientationPrivateProps {\n dir?: Direction\n}\n\nconst props = defineProps<SliderHorizontalProps>()\nconst emits = defineEmits<SliderOrientationPrivateEmits>()\nconst { max, min, dir, inverted } = toRefs(props)\n\nconst { forwardRef, currentElement: sliderElement } = useForwardExpose()\nconst rootContext = injectSliderRootContext()\n\nconst offsetPosition = ref<number>()\nconst rectRef = ref<ClientRect>()\nconst isSlidingFromLeft = computed(() => (dir?.value === 'ltr' && !inverted.value) || (dir?.value !== 'ltr' && inverted.value))\n\nfunction getValueFromPointerEvent(event: PointerEvent, slideStart?: boolean) {\n const rect = rectRef.value || sliderElement.value!.getBoundingClientRect()\n\n // Get the currently active thumb element\n const thumb = [...rootContext.thumbElements.value][rootContext.valueIndexToChangeRef.value]\n const thumbWidth = rootContext.thumbAlignment.value === 'contain' ? thumb.clientWidth : 0\n\n // Calculate offset for dragging, but only when needed\n if (!offsetPosition.value && !slideStart && rootContext.thumbAlignment.value === 'contain') {\n offsetPosition.value = event.clientX - thumb.getBoundingClientRect().left\n }\n\n // Define the input range (slider track width minus thumb width)\n const input: [number, number] = [0, rect.width - thumbWidth]\n const output: [number, number] = isSlidingFromLeft.value ? [min.value, max.value] : [max.value, min.value]\n const value = linearScale(input, output)\n\n rectRef.value = rect\n const position = slideStart\n ? event.clientX - rect.left - thumbWidth / 2\n : event.clientX - rect.left - (offsetPosition.value ?? 0)\n\n return value(position)\n}\n\nprovideSliderOrientationContext({\n startEdge: isSlidingFromLeft.value ? 'left' : 'right',\n endEdge: isSlidingFromLeft.value ? 'right' : 'left',\n direction: isSlidingFromLeft.value ? 1 : -1,\n size: 'width',\n})\n</script>\n\n<template>\n <SliderImpl\n :ref=\"forwardRef\"\n :dir=\"dir\"\n data-orientation=\"horizontal\"\n :style=\"{\n ['--reka-slider-thumb-transform' as any]:\n !isSlidingFromLeft && rootContext.thumbAlignment.value === 'overflow' ? 'translateX(50%)' : 'translateX(-50%)',\n }\"\n @slide-start=\"(event) => {\n const value = getValueFromPointerEvent(event, true);\n emits('slideStart', value)\n }\"\n @slide-move=\"(event) => {\n const value = getValueFromPointerEvent(event);\n emits('slideMove', value)\n }\"\n @slide-end=\"() => {\n rectRef = undefined;\n offsetPosition = undefined\n emits('slideEnd')\n }\"\n @step-key-down=\"(event) => {\n const slideDirection = isSlidingFromLeft ? 'from-left' : 'from-right';\n const isBackKey = BACK_KEYS[slideDirection].includes(event.key);\n emits('stepKeyDown', event, isBackKey ? -1 : 1)\n }\"\n @end-key-down=\"emits('endKeyDown', $event)\"\n @home-key-down=\"emits('homeKeyDown', $event)\"\n >\n <slot />\n </SliderImpl>\n</template>\n"],"names":["toRefs","useForwardExpose","injectSliderRootContext","ref","computed","linearScale","provideSliderOrientationContext"],"mappings":";;;;;;;;;;;;;;;;;;AAYA,IAAA,MAAM,KAAQ,GAAA,OAAA;AACd,IAAA,MAAM,KAAQ,GAAA,MAAA;AACd,IAAA,MAAM,EAAE,GAAK,EAAA,GAAA,EAAK,KAAK,QAAS,EAAA,GAAIA,WAAO,KAAK,CAAA;AAEhD,IAAA,MAAM,EAAE,UAAA,EAAY,cAAgB,EAAA,aAAA,KAAkBC,wCAAiB,EAAA;AACvE,IAAA,MAAM,cAAcC,yCAAwB,EAAA;AAE5C,IAAA,MAAM,iBAAiBC,OAAY,EAAA;AACnC,IAAA,MAAM,UAAUA,OAAgB,EAAA;AAChC,IAAA,MAAM,iBAAoB,GAAAC,YAAA,CAAS,MAAO,GAAA,EAAK,KAAU,KAAA,KAAA,IAAS,CAAC,QAAA,CAAS,KAAW,IAAA,GAAA,EAAK,KAAU,KAAA,KAAA,IAAS,SAAS,KAAM,CAAA;AAE9H,IAAS,SAAA,wBAAA,CAAyB,OAAqB,UAAsB,EAAA;AAC3E,MAAA,MAAM,IAAO,GAAA,OAAA,CAAQ,KAAS,IAAA,aAAA,CAAc,MAAO,qBAAsB,EAAA;AAGzE,MAAM,MAAA,KAAA,GAAQ,CAAC,GAAG,WAAA,CAAY,cAAc,KAAK,CAAA,CAAE,WAAY,CAAA,qBAAA,CAAsB,KAAK,CAAA;AAC1F,MAAA,MAAM,aAAa,WAAY,CAAA,cAAA,CAAe,KAAU,KAAA,SAAA,GAAY,MAAM,WAAc,GAAA,CAAA;AAGxF,MAAI,IAAA,CAAC,eAAe,KAAS,IAAA,CAAC,cAAc,WAAY,CAAA,cAAA,CAAe,UAAU,SAAW,EAAA;AAC1F,QAAA,cAAA,CAAe,KAAQ,GAAA,KAAA,CAAM,OAAU,GAAA,KAAA,CAAM,uBAAwB,CAAA,IAAA;AAAA;AAIvE,MAAA,MAAM,KAA0B,GAAA,CAAC,CAAG,EAAA,IAAA,CAAK,QAAQ,UAAU,CAAA;AAC3D,MAAA,MAAM,MAA2B,GAAA,iBAAA,CAAkB,KAAQ,GAAA,CAAC,GAAI,CAAA,KAAA,EAAO,GAAI,CAAA,KAAK,CAAI,GAAA,CAAC,GAAI,CAAA,KAAA,EAAO,IAAI,KAAK,CAAA;AACzG,MAAM,MAAA,KAAA,GAAQC,wBAAY,CAAA,KAAA,EAAO,MAAM,CAAA;AAEvC,MAAA,OAAA,CAAQ,KAAQ,GAAA,IAAA;AAChB,MAAA,MAAM,QAAW,GAAA,UAAA,GACb,KAAM,CAAA,OAAA,GAAU,IAAK,CAAA,IAAA,GAAO,UAAa,GAAA,CAAA,GACzC,KAAM,CAAA,OAAA,GAAU,IAAK,CAAA,IAAA,IAAQ,eAAe,KAAS,IAAA,CAAA,CAAA;AAEzD,MAAA,OAAO,MAAM,QAAQ,CAAA;AAAA;AAGvB,IAAgCC,4CAAA,CAAA;AAAA,MAC9B,SAAA,EAAW,iBAAkB,CAAA,KAAA,GAAQ,MAAS,GAAA,OAAA;AAAA,MAC9C,OAAA,EAAS,iBAAkB,CAAA,KAAA,GAAQ,OAAU,GAAA,MAAA;AAAA,MAC7C,SAAA,EAAW,iBAAkB,CAAA,KAAA,GAAQ,CAAI,GAAA,EAAA;AAAA,MACzC,IAAM,EAAA;AAAA,KACP,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"SliderHorizontal.cjs","sources":["../../src/Slider/SliderHorizontal.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { Direction, SliderOrientationPrivateEmits, SliderOrientationPrivateProps } from './utils'\nimport { computed, ref, toRefs } from 'vue'\nimport { useForwardExpose } from '@/shared'\nimport SliderImpl from './SliderImpl.vue'\nimport { injectSliderRootContext } from './SliderRoot.vue'\nimport { BACK_KEYS, linearScale, provideSliderOrientationContext } from './utils'\n\ninterface SliderHorizontalProps extends SliderOrientationPrivateProps {\n dir?: Direction\n}\n\nconst props = defineProps<SliderHorizontalProps>()\nconst emits = defineEmits<SliderOrientationPrivateEmits>()\nconst { max, min, dir, inverted } = toRefs(props)\n\nconst { forwardRef, currentElement: sliderElement } = useForwardExpose()\nconst rootContext = injectSliderRootContext()\n\nconst offsetPosition = ref<number>()\nconst rectRef = ref<DOMRect>()\nconst isSlidingFromLeft = computed(() => (dir?.value !== 'rtl' && !inverted.value) || (dir?.value !== 'ltr' && inverted.value))\n\nfunction getValueFromPointerEvent(event: PointerEvent, slideStart?: boolean) {\n const rect = rectRef.value || sliderElement.value!.getBoundingClientRect()\n\n // Get the currently active thumb element\n const thumb = [...rootContext.thumbElements.value][rootContext.valueIndexToChangeRef.value]\n const thumbWidth = rootContext.thumbAlignment.value === 'contain' ? thumb.clientWidth : 0\n\n // Calculate offset for dragging, but only when needed\n if (!offsetPosition.value && !slideStart && rootContext.thumbAlignment.value === 'contain') {\n offsetPosition.value = event.clientX - thumb.getBoundingClientRect().left\n }\n\n // Define the input range (slider track width minus thumb width)\n const input: [number, number] = [0, rect.width - thumbWidth]\n const output: [number, number] = isSlidingFromLeft.value ? [min.value, max.value] : [max.value, min.value]\n const value = linearScale(input, output)\n\n rectRef.value = rect\n const position = slideStart\n ? event.clientX - rect.left - thumbWidth / 2\n : event.clientX - rect.left - (offsetPosition.value ?? 0)\n\n return value(position)\n}\n\nconst startEdge = computed(() => isSlidingFromLeft.value ? 'left' : 'right')\nconst endEdge = computed(() => isSlidingFromLeft.value ? 'right' : 'left')\nconst direction = computed(() => isSlidingFromLeft.value ? 1 : -1)\n\nprovideSliderOrientationContext({\n startEdge,\n endEdge,\n direction,\n size: 'width',\n})\n</script>\n\n<template>\n <SliderImpl\n :ref=\"forwardRef\"\n :dir=\"dir\"\n data-orientation=\"horizontal\"\n :style=\"{\n ['--reka-slider-thumb-transform' as any]:\n !isSlidingFromLeft && rootContext.thumbAlignment.value === 'overflow' ? 'translateX(50%)' : 'translateX(-50%)',\n }\"\n @slide-start=\"(event) => {\n const value = getValueFromPointerEvent(event, true);\n emits('slideStart', value)\n }\"\n @slide-move=\"(event) => {\n const value = getValueFromPointerEvent(event);\n emits('slideMove', value)\n }\"\n @slide-end=\"() => {\n rectRef = undefined;\n offsetPosition = undefined\n emits('slideEnd')\n }\"\n @step-key-down=\"(event) => {\n const slideDirection = isSlidingFromLeft ? 'from-left' : 'from-right';\n const isBackKey = BACK_KEYS[slideDirection].includes(event.key);\n emits('stepKeyDown', event, isBackKey ? -1 : 1)\n }\"\n @end-key-down=\"emits('endKeyDown', $event)\"\n @home-key-down=\"emits('homeKeyDown', $event)\"\n >\n <slot />\n </SliderImpl>\n</template>\n"],"names":["toRefs","useForwardExpose","injectSliderRootContext","ref","computed","linearScale","provideSliderOrientationContext"],"mappings":";;;;;;;;;;;;;;;;;;AAYA,IAAA,MAAM,KAAQ,GAAA,OAAA;AACd,IAAA,MAAM,KAAQ,GAAA,MAAA;AACd,IAAA,MAAM,EAAE,GAAK,EAAA,GAAA,EAAK,KAAK,QAAS,EAAA,GAAIA,WAAO,KAAK,CAAA;AAEhD,IAAA,MAAM,EAAE,UAAA,EAAY,cAAgB,EAAA,aAAA,KAAkBC,wCAAiB,EAAA;AACvE,IAAA,MAAM,cAAcC,yCAAwB,EAAA;AAE5C,IAAA,MAAM,iBAAiBC,OAAY,EAAA;AACnC,IAAA,MAAM,UAAUA,OAAa,EAAA;AAC7B,IAAA,MAAM,iBAAoB,GAAAC,YAAA,CAAS,MAAO,GAAA,EAAK,KAAU,KAAA,KAAA,IAAS,CAAC,QAAA,CAAS,KAAW,IAAA,GAAA,EAAK,KAAU,KAAA,KAAA,IAAS,SAAS,KAAM,CAAA;AAE9H,IAAS,SAAA,wBAAA,CAAyB,OAAqB,UAAsB,EAAA;AAC3E,MAAA,MAAM,IAAO,GAAA,OAAA,CAAQ,KAAS,IAAA,aAAA,CAAc,MAAO,qBAAsB,EAAA;AAGzE,MAAM,MAAA,KAAA,GAAQ,CAAC,GAAG,WAAA,CAAY,cAAc,KAAK,CAAA,CAAE,WAAY,CAAA,qBAAA,CAAsB,KAAK,CAAA;AAC1F,MAAA,MAAM,aAAa,WAAY,CAAA,cAAA,CAAe,KAAU,KAAA,SAAA,GAAY,MAAM,WAAc,GAAA,CAAA;AAGxF,MAAI,IAAA,CAAC,eAAe,KAAS,IAAA,CAAC,cAAc,WAAY,CAAA,cAAA,CAAe,UAAU,SAAW,EAAA;AAC1F,QAAA,cAAA,CAAe,KAAQ,GAAA,KAAA,CAAM,OAAU,GAAA,KAAA,CAAM,uBAAwB,CAAA,IAAA;AAAA;AAIvE,MAAA,MAAM,KAA0B,GAAA,CAAC,CAAG,EAAA,IAAA,CAAK,QAAQ,UAAU,CAAA;AAC3D,MAAA,MAAM,MAA2B,GAAA,iBAAA,CAAkB,KAAQ,GAAA,CAAC,GAAI,CAAA,KAAA,EAAO,GAAI,CAAA,KAAK,CAAI,GAAA,CAAC,GAAI,CAAA,KAAA,EAAO,IAAI,KAAK,CAAA;AACzG,MAAM,MAAA,KAAA,GAAQC,wBAAY,CAAA,KAAA,EAAO,MAAM,CAAA;AAEvC,MAAA,OAAA,CAAQ,KAAQ,GAAA,IAAA;AAChB,MAAA,MAAM,QAAW,GAAA,UAAA,GACb,KAAM,CAAA,OAAA,GAAU,IAAK,CAAA,IAAA,GAAO,UAAa,GAAA,CAAA,GACzC,KAAM,CAAA,OAAA,GAAU,IAAK,CAAA,IAAA,IAAQ,eAAe,KAAS,IAAA,CAAA,CAAA;AAEzD,MAAA,OAAO,MAAM,QAAQ,CAAA;AAAA;AAGvB,IAAA,MAAM,YAAYD,YAAS,CAAA,MAAM,iBAAkB,CAAA,KAAA,GAAQ,SAAS,OAAO,CAAA;AAC3E,IAAA,MAAM,UAAUA,YAAS,CAAA,MAAM,iBAAkB,CAAA,KAAA,GAAQ,UAAU,MAAM,CAAA;AACzE,IAAA,MAAM,YAAYA,YAAS,CAAA,MAAM,iBAAkB,CAAA,KAAA,GAAQ,IAAI,EAAE,CAAA;AAEjE,IAAgCE,4CAAA,CAAA;AAAA,MAC9B,SAAA;AAAA,MACA,OAAA;AAAA,MACA,SAAA;AAAA,MACA,IAAM,EAAA;AAAA,KACP,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -21,7 +21,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
21
21
  const rootContext = injectSliderRootContext();
22
22
  const offsetPosition = ref();
23
23
  const rectRef = ref();
24
- const isSlidingFromLeft = computed(() => dir?.value === "ltr" && !inverted.value || dir?.value !== "ltr" && inverted.value);
24
+ const isSlidingFromLeft = computed(() => dir?.value !== "rtl" && !inverted.value || dir?.value !== "ltr" && inverted.value);
25
25
  function getValueFromPointerEvent(event, slideStart) {
26
26
  const rect = rectRef.value || sliderElement.value.getBoundingClientRect();
27
27
  const thumb = [...rootContext.thumbElements.value][rootContext.valueIndexToChangeRef.value];
@@ -36,10 +36,13 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
36
36
  const position = slideStart ? event.clientX - rect.left - thumbWidth / 2 : event.clientX - rect.left - (offsetPosition.value ?? 0);
37
37
  return value(position);
38
38
  }
39
+ const startEdge = computed(() => isSlidingFromLeft.value ? "left" : "right");
40
+ const endEdge = computed(() => isSlidingFromLeft.value ? "right" : "left");
41
+ const direction = computed(() => isSlidingFromLeft.value ? 1 : -1);
39
42
  provideSliderOrientationContext({
40
- startEdge: isSlidingFromLeft.value ? "left" : "right",
41
- endEdge: isSlidingFromLeft.value ? "right" : "left",
42
- direction: isSlidingFromLeft.value ? 1 : -1,
43
+ startEdge,
44
+ endEdge,
45
+ direction,
43
46
  size: "width"
44
47
  });
45
48
  return (_ctx, _cache) => {
@@ -1 +1 @@
1
- {"version":3,"file":"SliderHorizontal.js","sources":["../../src/Slider/SliderHorizontal.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { Direction, SliderOrientationPrivateEmits, SliderOrientationPrivateProps } from './utils'\nimport { useForwardExpose } from '@/shared'\nimport { computed, ref, toRefs } from 'vue'\nimport SliderImpl from './SliderImpl.vue'\nimport { injectSliderRootContext } from './SliderRoot.vue'\nimport { BACK_KEYS, linearScale, provideSliderOrientationContext } from './utils'\n\ninterface SliderHorizontalProps extends SliderOrientationPrivateProps {\n dir?: Direction\n}\n\nconst props = defineProps<SliderHorizontalProps>()\nconst emits = defineEmits<SliderOrientationPrivateEmits>()\nconst { max, min, dir, inverted } = toRefs(props)\n\nconst { forwardRef, currentElement: sliderElement } = useForwardExpose()\nconst rootContext = injectSliderRootContext()\n\nconst offsetPosition = ref<number>()\nconst rectRef = ref<ClientRect>()\nconst isSlidingFromLeft = computed(() => (dir?.value === 'ltr' && !inverted.value) || (dir?.value !== 'ltr' && inverted.value))\n\nfunction getValueFromPointerEvent(event: PointerEvent, slideStart?: boolean) {\n const rect = rectRef.value || sliderElement.value!.getBoundingClientRect()\n\n // Get the currently active thumb element\n const thumb = [...rootContext.thumbElements.value][rootContext.valueIndexToChangeRef.value]\n const thumbWidth = rootContext.thumbAlignment.value === 'contain' ? thumb.clientWidth : 0\n\n // Calculate offset for dragging, but only when needed\n if (!offsetPosition.value && !slideStart && rootContext.thumbAlignment.value === 'contain') {\n offsetPosition.value = event.clientX - thumb.getBoundingClientRect().left\n }\n\n // Define the input range (slider track width minus thumb width)\n const input: [number, number] = [0, rect.width - thumbWidth]\n const output: [number, number] = isSlidingFromLeft.value ? [min.value, max.value] : [max.value, min.value]\n const value = linearScale(input, output)\n\n rectRef.value = rect\n const position = slideStart\n ? event.clientX - rect.left - thumbWidth / 2\n : event.clientX - rect.left - (offsetPosition.value ?? 0)\n\n return value(position)\n}\n\nprovideSliderOrientationContext({\n startEdge: isSlidingFromLeft.value ? 'left' : 'right',\n endEdge: isSlidingFromLeft.value ? 'right' : 'left',\n direction: isSlidingFromLeft.value ? 1 : -1,\n size: 'width',\n})\n</script>\n\n<template>\n <SliderImpl\n :ref=\"forwardRef\"\n :dir=\"dir\"\n data-orientation=\"horizontal\"\n :style=\"{\n ['--reka-slider-thumb-transform' as any]:\n !isSlidingFromLeft && rootContext.thumbAlignment.value === 'overflow' ? 'translateX(50%)' : 'translateX(-50%)',\n }\"\n @slide-start=\"(event) => {\n const value = getValueFromPointerEvent(event, true);\n emits('slideStart', value)\n }\"\n @slide-move=\"(event) => {\n const value = getValueFromPointerEvent(event);\n emits('slideMove', value)\n }\"\n @slide-end=\"() => {\n rectRef = undefined;\n offsetPosition = undefined\n emits('slideEnd')\n }\"\n @step-key-down=\"(event) => {\n const slideDirection = isSlidingFromLeft ? 'from-left' : 'from-right';\n const isBackKey = BACK_KEYS[slideDirection].includes(event.key);\n emits('stepKeyDown', event, isBackKey ? -1 : 1)\n }\"\n @end-key-down=\"emits('endKeyDown', $event)\"\n @home-key-down=\"emits('homeKeyDown', $event)\"\n >\n <slot />\n </SliderImpl>\n</template>\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAYA,IAAA,MAAM,KAAQ,GAAA,OAAA;AACd,IAAA,MAAM,KAAQ,GAAA,MAAA;AACd,IAAA,MAAM,EAAE,GAAK,EAAA,GAAA,EAAK,KAAK,QAAS,EAAA,GAAI,OAAO,KAAK,CAAA;AAEhD,IAAA,MAAM,EAAE,UAAA,EAAY,cAAgB,EAAA,aAAA,KAAkB,gBAAiB,EAAA;AACvE,IAAA,MAAM,cAAc,uBAAwB,EAAA;AAE5C,IAAA,MAAM,iBAAiB,GAAY,EAAA;AACnC,IAAA,MAAM,UAAU,GAAgB,EAAA;AAChC,IAAA,MAAM,iBAAoB,GAAA,QAAA,CAAS,MAAO,GAAA,EAAK,KAAU,KAAA,KAAA,IAAS,CAAC,QAAA,CAAS,KAAW,IAAA,GAAA,EAAK,KAAU,KAAA,KAAA,IAAS,SAAS,KAAM,CAAA;AAE9H,IAAS,SAAA,wBAAA,CAAyB,OAAqB,UAAsB,EAAA;AAC3E,MAAA,MAAM,IAAO,GAAA,OAAA,CAAQ,KAAS,IAAA,aAAA,CAAc,MAAO,qBAAsB,EAAA;AAGzE,MAAM,MAAA,KAAA,GAAQ,CAAC,GAAG,WAAA,CAAY,cAAc,KAAK,CAAA,CAAE,WAAY,CAAA,qBAAA,CAAsB,KAAK,CAAA;AAC1F,MAAA,MAAM,aAAa,WAAY,CAAA,cAAA,CAAe,KAAU,KAAA,SAAA,GAAY,MAAM,WAAc,GAAA,CAAA;AAGxF,MAAI,IAAA,CAAC,eAAe,KAAS,IAAA,CAAC,cAAc,WAAY,CAAA,cAAA,CAAe,UAAU,SAAW,EAAA;AAC1F,QAAA,cAAA,CAAe,KAAQ,GAAA,KAAA,CAAM,OAAU,GAAA,KAAA,CAAM,uBAAwB,CAAA,IAAA;AAAA;AAIvE,MAAA,MAAM,KAA0B,GAAA,CAAC,CAAG,EAAA,IAAA,CAAK,QAAQ,UAAU,CAAA;AAC3D,MAAA,MAAM,MAA2B,GAAA,iBAAA,CAAkB,KAAQ,GAAA,CAAC,GAAI,CAAA,KAAA,EAAO,GAAI,CAAA,KAAK,CAAI,GAAA,CAAC,GAAI,CAAA,KAAA,EAAO,IAAI,KAAK,CAAA;AACzG,MAAM,MAAA,KAAA,GAAQ,WAAY,CAAA,KAAA,EAAO,MAAM,CAAA;AAEvC,MAAA,OAAA,CAAQ,KAAQ,GAAA,IAAA;AAChB,MAAA,MAAM,QAAW,GAAA,UAAA,GACb,KAAM,CAAA,OAAA,GAAU,IAAK,CAAA,IAAA,GAAO,UAAa,GAAA,CAAA,GACzC,KAAM,CAAA,OAAA,GAAU,IAAK,CAAA,IAAA,IAAQ,eAAe,KAAS,IAAA,CAAA,CAAA;AAEzD,MAAA,OAAO,MAAM,QAAQ,CAAA;AAAA;AAGvB,IAAgC,+BAAA,CAAA;AAAA,MAC9B,SAAA,EAAW,iBAAkB,CAAA,KAAA,GAAQ,MAAS,GAAA,OAAA;AAAA,MAC9C,OAAA,EAAS,iBAAkB,CAAA,KAAA,GAAQ,OAAU,GAAA,MAAA;AAAA,MAC7C,SAAA,EAAW,iBAAkB,CAAA,KAAA,GAAQ,CAAI,GAAA,EAAA;AAAA,MACzC,IAAM,EAAA;AAAA,KACP,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"SliderHorizontal.js","sources":["../../src/Slider/SliderHorizontal.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { Direction, SliderOrientationPrivateEmits, SliderOrientationPrivateProps } from './utils'\nimport { computed, ref, toRefs } from 'vue'\nimport { useForwardExpose } from '@/shared'\nimport SliderImpl from './SliderImpl.vue'\nimport { injectSliderRootContext } from './SliderRoot.vue'\nimport { BACK_KEYS, linearScale, provideSliderOrientationContext } from './utils'\n\ninterface SliderHorizontalProps extends SliderOrientationPrivateProps {\n dir?: Direction\n}\n\nconst props = defineProps<SliderHorizontalProps>()\nconst emits = defineEmits<SliderOrientationPrivateEmits>()\nconst { max, min, dir, inverted } = toRefs(props)\n\nconst { forwardRef, currentElement: sliderElement } = useForwardExpose()\nconst rootContext = injectSliderRootContext()\n\nconst offsetPosition = ref<number>()\nconst rectRef = ref<DOMRect>()\nconst isSlidingFromLeft = computed(() => (dir?.value !== 'rtl' && !inverted.value) || (dir?.value !== 'ltr' && inverted.value))\n\nfunction getValueFromPointerEvent(event: PointerEvent, slideStart?: boolean) {\n const rect = rectRef.value || sliderElement.value!.getBoundingClientRect()\n\n // Get the currently active thumb element\n const thumb = [...rootContext.thumbElements.value][rootContext.valueIndexToChangeRef.value]\n const thumbWidth = rootContext.thumbAlignment.value === 'contain' ? thumb.clientWidth : 0\n\n // Calculate offset for dragging, but only when needed\n if (!offsetPosition.value && !slideStart && rootContext.thumbAlignment.value === 'contain') {\n offsetPosition.value = event.clientX - thumb.getBoundingClientRect().left\n }\n\n // Define the input range (slider track width minus thumb width)\n const input: [number, number] = [0, rect.width - thumbWidth]\n const output: [number, number] = isSlidingFromLeft.value ? [min.value, max.value] : [max.value, min.value]\n const value = linearScale(input, output)\n\n rectRef.value = rect\n const position = slideStart\n ? event.clientX - rect.left - thumbWidth / 2\n : event.clientX - rect.left - (offsetPosition.value ?? 0)\n\n return value(position)\n}\n\nconst startEdge = computed(() => isSlidingFromLeft.value ? 'left' : 'right')\nconst endEdge = computed(() => isSlidingFromLeft.value ? 'right' : 'left')\nconst direction = computed(() => isSlidingFromLeft.value ? 1 : -1)\n\nprovideSliderOrientationContext({\n startEdge,\n endEdge,\n direction,\n size: 'width',\n})\n</script>\n\n<template>\n <SliderImpl\n :ref=\"forwardRef\"\n :dir=\"dir\"\n data-orientation=\"horizontal\"\n :style=\"{\n ['--reka-slider-thumb-transform' as any]:\n !isSlidingFromLeft && rootContext.thumbAlignment.value === 'overflow' ? 'translateX(50%)' : 'translateX(-50%)',\n }\"\n @slide-start=\"(event) => {\n const value = getValueFromPointerEvent(event, true);\n emits('slideStart', value)\n }\"\n @slide-move=\"(event) => {\n const value = getValueFromPointerEvent(event);\n emits('slideMove', value)\n }\"\n @slide-end=\"() => {\n rectRef = undefined;\n offsetPosition = undefined\n emits('slideEnd')\n }\"\n @step-key-down=\"(event) => {\n const slideDirection = isSlidingFromLeft ? 'from-left' : 'from-right';\n const isBackKey = BACK_KEYS[slideDirection].includes(event.key);\n emits('stepKeyDown', event, isBackKey ? -1 : 1)\n }\"\n @end-key-down=\"emits('endKeyDown', $event)\"\n @home-key-down=\"emits('homeKeyDown', $event)\"\n >\n <slot />\n </SliderImpl>\n</template>\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAYA,IAAA,MAAM,KAAQ,GAAA,OAAA;AACd,IAAA,MAAM,KAAQ,GAAA,MAAA;AACd,IAAA,MAAM,EAAE,GAAK,EAAA,GAAA,EAAK,KAAK,QAAS,EAAA,GAAI,OAAO,KAAK,CAAA;AAEhD,IAAA,MAAM,EAAE,UAAA,EAAY,cAAgB,EAAA,aAAA,KAAkB,gBAAiB,EAAA;AACvE,IAAA,MAAM,cAAc,uBAAwB,EAAA;AAE5C,IAAA,MAAM,iBAAiB,GAAY,EAAA;AACnC,IAAA,MAAM,UAAU,GAAa,EAAA;AAC7B,IAAA,MAAM,iBAAoB,GAAA,QAAA,CAAS,MAAO,GAAA,EAAK,KAAU,KAAA,KAAA,IAAS,CAAC,QAAA,CAAS,KAAW,IAAA,GAAA,EAAK,KAAU,KAAA,KAAA,IAAS,SAAS,KAAM,CAAA;AAE9H,IAAS,SAAA,wBAAA,CAAyB,OAAqB,UAAsB,EAAA;AAC3E,MAAA,MAAM,IAAO,GAAA,OAAA,CAAQ,KAAS,IAAA,aAAA,CAAc,MAAO,qBAAsB,EAAA;AAGzE,MAAM,MAAA,KAAA,GAAQ,CAAC,GAAG,WAAA,CAAY,cAAc,KAAK,CAAA,CAAE,WAAY,CAAA,qBAAA,CAAsB,KAAK,CAAA;AAC1F,MAAA,MAAM,aAAa,WAAY,CAAA,cAAA,CAAe,KAAU,KAAA,SAAA,GAAY,MAAM,WAAc,GAAA,CAAA;AAGxF,MAAI,IAAA,CAAC,eAAe,KAAS,IAAA,CAAC,cAAc,WAAY,CAAA,cAAA,CAAe,UAAU,SAAW,EAAA;AAC1F,QAAA,cAAA,CAAe,KAAQ,GAAA,KAAA,CAAM,OAAU,GAAA,KAAA,CAAM,uBAAwB,CAAA,IAAA;AAAA;AAIvE,MAAA,MAAM,KAA0B,GAAA,CAAC,CAAG,EAAA,IAAA,CAAK,QAAQ,UAAU,CAAA;AAC3D,MAAA,MAAM,MAA2B,GAAA,iBAAA,CAAkB,KAAQ,GAAA,CAAC,GAAI,CAAA,KAAA,EAAO,GAAI,CAAA,KAAK,CAAI,GAAA,CAAC,GAAI,CAAA,KAAA,EAAO,IAAI,KAAK,CAAA;AACzG,MAAM,MAAA,KAAA,GAAQ,WAAY,CAAA,KAAA,EAAO,MAAM,CAAA;AAEvC,MAAA,OAAA,CAAQ,KAAQ,GAAA,IAAA;AAChB,MAAA,MAAM,QAAW,GAAA,UAAA,GACb,KAAM,CAAA,OAAA,GAAU,IAAK,CAAA,IAAA,GAAO,UAAa,GAAA,CAAA,GACzC,KAAM,CAAA,OAAA,GAAU,IAAK,CAAA,IAAA,IAAQ,eAAe,KAAS,IAAA,CAAA,CAAA;AAEzD,MAAA,OAAO,MAAM,QAAQ,CAAA;AAAA;AAGvB,IAAA,MAAM,YAAY,QAAS,CAAA,MAAM,iBAAkB,CAAA,KAAA,GAAQ,SAAS,OAAO,CAAA;AAC3E,IAAA,MAAM,UAAU,QAAS,CAAA,MAAM,iBAAkB,CAAA,KAAA,GAAQ,UAAU,MAAM,CAAA;AACzE,IAAA,MAAM,YAAY,QAAS,CAAA,MAAM,iBAAkB,CAAA,KAAA,GAAQ,IAAI,EAAE,CAAA;AAEjE,IAAgC,+BAAA,CAAA;AAAA,MAC9B,SAAA;AAAA,MACA,OAAA;AAAA,MACA,SAAA;AAAA,MACA,IAAM,EAAA;AAAA,KACP,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -28,8 +28,8 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
28
28
  "as-child": _ctx.asChild,
29
29
  as: _ctx.as,
30
30
  style: vue.normalizeStyle({
31
- [vue.unref(orientation).startEdge]: `${offsetStart.value}%`,
32
- [vue.unref(orientation).endEdge]: `${offsetEnd.value}%`
31
+ [vue.unref(orientation).startEdge.value]: `${offsetStart.value}%`,
32
+ [vue.unref(orientation).endEdge.value]: `${offsetEnd.value}%`
33
33
  })
34
34
  }, {
35
35
  default: vue.withCtx(() => [
@@ -1 +1 @@
1
- {"version":3,"file":"SliderRange.cjs","sources":["../../src/Slider/SliderRange.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { PrimitiveProps } from '@/Primitive'\nimport { useForwardExpose } from '@/shared'\n\nexport interface SliderRangeProps extends PrimitiveProps {}\n</script>\n\n<script setup lang=\"ts\">\nimport { Primitive } from '@/Primitive'\nimport { computed } from 'vue'\nimport { injectSliderRootContext } from './SliderRoot.vue'\nimport { convertValueToPercentage, injectSliderOrientationContext } from './utils'\n\nwithDefaults(defineProps<SliderRangeProps>(), { as: 'span' })\nconst rootContext = injectSliderRootContext()\nconst orientation = injectSliderOrientationContext()\n\nuseForwardExpose()\nconst percentages = computed(() => rootContext.currentModelValue.value.map(value =>\n convertValueToPercentage(value, rootContext.min.value, rootContext.max.value),\n))\n\nconst offsetStart = computed(() => rootContext.currentModelValue.value.length > 1 ? Math.min(...percentages.value!) : 0)\nconst offsetEnd = computed(() => 100 - Math.max(...percentages.value, 0))\n</script>\n\n<template>\n <Primitive\n :data-disabled=\"rootContext.disabled.value ? '' : undefined\"\n :data-orientation=\"rootContext.orientation.value\"\n :as-child=\"asChild\"\n :as=\"as\"\n :style=\"{\n [orientation!.startEdge]: `${offsetStart}%`,\n [orientation!.endEdge]: `${offsetEnd}%`,\n }\"\n >\n <slot />\n </Primitive>\n</template>\n"],"names":["injectSliderRootContext","injectSliderOrientationContext","useForwardExpose","computed","convertValueToPercentage"],"mappings":";;;;;;;;;;;;;;;AAcA,IAAA,MAAM,cAAcA,yCAAwB,EAAA;AAC5C,IAAA,MAAM,cAAcC,2CAA+B,EAAA;AAEnD,IAAiBC,wCAAA,EAAA;AACjB,IAAA,MAAM,WAAc,GAAAC,YAAA,CAAS,MAAM,WAAA,CAAY,kBAAkB,KAAM,CAAA,GAAA;AAAA,MAAI,CAAA,KAAA,KACzEC,sCAAyB,KAAO,EAAA,WAAA,CAAY,IAAI,KAAO,EAAA,WAAA,CAAY,IAAI,KAAK;AAAA,KAC7E,CAAA;AAED,IAAA,MAAM,WAAc,GAAAD,YAAA,CAAS,MAAM,WAAA,CAAY,kBAAkB,KAAM,CAAA,MAAA,GAAS,CAAI,GAAA,IAAA,CAAK,GAAI,CAAA,GAAG,WAAY,CAAA,KAAM,IAAI,CAAC,CAAA;AACvH,IAAM,MAAA,SAAA,GAAYA,YAAS,CAAA,MAAM,GAAM,GAAA,IAAA,CAAK,IAAI,GAAG,WAAA,CAAY,KAAO,EAAA,CAAC,CAAC,CAAA;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"SliderRange.cjs","sources":["../../src/Slider/SliderRange.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { PrimitiveProps } from '@/Primitive'\nimport { useForwardExpose } from '@/shared'\n\nexport interface SliderRangeProps extends PrimitiveProps {}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { Primitive } from '@/Primitive'\nimport { injectSliderRootContext } from './SliderRoot.vue'\nimport { convertValueToPercentage, injectSliderOrientationContext } from './utils'\n\nwithDefaults(defineProps<SliderRangeProps>(), { as: 'span' })\nconst rootContext = injectSliderRootContext()\nconst orientation = injectSliderOrientationContext()\n\nuseForwardExpose()\nconst percentages = computed(() => rootContext.currentModelValue.value.map(value =>\n convertValueToPercentage(value, rootContext.min.value, rootContext.max.value),\n))\n\nconst offsetStart = computed(() => rootContext.currentModelValue.value.length > 1 ? Math.min(...percentages.value!) : 0)\nconst offsetEnd = computed(() => 100 - Math.max(...percentages.value, 0))\n</script>\n\n<template>\n <Primitive\n :data-disabled=\"rootContext.disabled.value ? '' : undefined\"\n :data-orientation=\"rootContext.orientation.value\"\n :as-child=\"asChild\"\n :as=\"as\"\n :style=\"{\n [orientation!.startEdge.value]: `${offsetStart}%`,\n [orientation!.endEdge.value]: `${offsetEnd}%`,\n }\"\n >\n <slot />\n </Primitive>\n</template>\n"],"names":["injectSliderRootContext","injectSliderOrientationContext","useForwardExpose","computed","convertValueToPercentage"],"mappings":";;;;;;;;;;;;;;;AAcA,IAAA,MAAM,cAAcA,yCAAwB,EAAA;AAC5C,IAAA,MAAM,cAAcC,2CAA+B,EAAA;AAEnD,IAAiBC,wCAAA,EAAA;AACjB,IAAA,MAAM,WAAc,GAAAC,YAAA,CAAS,MAAM,WAAA,CAAY,kBAAkB,KAAM,CAAA,GAAA;AAAA,MAAI,CAAA,KAAA,KACzEC,sCAAyB,KAAO,EAAA,WAAA,CAAY,IAAI,KAAO,EAAA,WAAA,CAAY,IAAI,KAAK;AAAA,KAC7E,CAAA;AAED,IAAA,MAAM,WAAc,GAAAD,YAAA,CAAS,MAAM,WAAA,CAAY,kBAAkB,KAAM,CAAA,MAAA,GAAS,CAAI,GAAA,IAAA,CAAK,GAAI,CAAA,GAAG,WAAY,CAAA,KAAM,IAAI,CAAC,CAAA;AACvH,IAAM,MAAA,SAAA,GAAYA,YAAS,CAAA,MAAM,GAAM,GAAA,IAAA,CAAK,IAAI,GAAG,WAAA,CAAY,KAAO,EAAA,CAAC,CAAC,CAAA;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -26,8 +26,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
26
26
  "as-child": _ctx.asChild,
27
27
  as: _ctx.as,
28
28
  style: normalizeStyle({
29
- [unref(orientation).startEdge]: `${offsetStart.value}%`,
30
- [unref(orientation).endEdge]: `${offsetEnd.value}%`
29
+ [unref(orientation).startEdge.value]: `${offsetStart.value}%`,
30
+ [unref(orientation).endEdge.value]: `${offsetEnd.value}%`
31
31
  })
32
32
  }, {
33
33
  default: withCtx(() => [
@@ -1 +1 @@
1
- {"version":3,"file":"SliderRange.js","sources":["../../src/Slider/SliderRange.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { PrimitiveProps } from '@/Primitive'\nimport { useForwardExpose } from '@/shared'\n\nexport interface SliderRangeProps extends PrimitiveProps {}\n</script>\n\n<script setup lang=\"ts\">\nimport { Primitive } from '@/Primitive'\nimport { computed } from 'vue'\nimport { injectSliderRootContext } from './SliderRoot.vue'\nimport { convertValueToPercentage, injectSliderOrientationContext } from './utils'\n\nwithDefaults(defineProps<SliderRangeProps>(), { as: 'span' })\nconst rootContext = injectSliderRootContext()\nconst orientation = injectSliderOrientationContext()\n\nuseForwardExpose()\nconst percentages = computed(() => rootContext.currentModelValue.value.map(value =>\n convertValueToPercentage(value, rootContext.min.value, rootContext.max.value),\n))\n\nconst offsetStart = computed(() => rootContext.currentModelValue.value.length > 1 ? Math.min(...percentages.value!) : 0)\nconst offsetEnd = computed(() => 100 - Math.max(...percentages.value, 0))\n</script>\n\n<template>\n <Primitive\n :data-disabled=\"rootContext.disabled.value ? '' : undefined\"\n :data-orientation=\"rootContext.orientation.value\"\n :as-child=\"asChild\"\n :as=\"as\"\n :style=\"{\n [orientation!.startEdge]: `${offsetStart}%`,\n [orientation!.endEdge]: `${offsetEnd}%`,\n }\"\n >\n <slot />\n </Primitive>\n</template>\n"],"names":[],"mappings":";;;;;;;;;;;;;AAcA,IAAA,MAAM,cAAc,uBAAwB,EAAA;AAC5C,IAAA,MAAM,cAAc,8BAA+B,EAAA;AAEnD,IAAiB,gBAAA,EAAA;AACjB,IAAA,MAAM,WAAc,GAAA,QAAA,CAAS,MAAM,WAAA,CAAY,kBAAkB,KAAM,CAAA,GAAA;AAAA,MAAI,CAAA,KAAA,KACzE,yBAAyB,KAAO,EAAA,WAAA,CAAY,IAAI,KAAO,EAAA,WAAA,CAAY,IAAI,KAAK;AAAA,KAC7E,CAAA;AAED,IAAA,MAAM,WAAc,GAAA,QAAA,CAAS,MAAM,WAAA,CAAY,kBAAkB,KAAM,CAAA,MAAA,GAAS,CAAI,GAAA,IAAA,CAAK,GAAI,CAAA,GAAG,WAAY,CAAA,KAAM,IAAI,CAAC,CAAA;AACvH,IAAM,MAAA,SAAA,GAAY,QAAS,CAAA,MAAM,GAAM,GAAA,IAAA,CAAK,IAAI,GAAG,WAAA,CAAY,KAAO,EAAA,CAAC,CAAC,CAAA;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"SliderRange.js","sources":["../../src/Slider/SliderRange.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { PrimitiveProps } from '@/Primitive'\nimport { useForwardExpose } from '@/shared'\n\nexport interface SliderRangeProps extends PrimitiveProps {}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { Primitive } from '@/Primitive'\nimport { injectSliderRootContext } from './SliderRoot.vue'\nimport { convertValueToPercentage, injectSliderOrientationContext } from './utils'\n\nwithDefaults(defineProps<SliderRangeProps>(), { as: 'span' })\nconst rootContext = injectSliderRootContext()\nconst orientation = injectSliderOrientationContext()\n\nuseForwardExpose()\nconst percentages = computed(() => rootContext.currentModelValue.value.map(value =>\n convertValueToPercentage(value, rootContext.min.value, rootContext.max.value),\n))\n\nconst offsetStart = computed(() => rootContext.currentModelValue.value.length > 1 ? Math.min(...percentages.value!) : 0)\nconst offsetEnd = computed(() => 100 - Math.max(...percentages.value, 0))\n</script>\n\n<template>\n <Primitive\n :data-disabled=\"rootContext.disabled.value ? '' : undefined\"\n :data-orientation=\"rootContext.orientation.value\"\n :as-child=\"asChild\"\n :as=\"as\"\n :style=\"{\n [orientation!.startEdge.value]: `${offsetStart}%`,\n [orientation!.endEdge.value]: `${offsetEnd}%`,\n }\"\n >\n <slot />\n </Primitive>\n</template>\n"],"names":[],"mappings":";;;;;;;;;;;;;AAcA,IAAA,MAAM,cAAc,uBAAwB,EAAA;AAC5C,IAAA,MAAM,cAAc,8BAA+B,EAAA;AAEnD,IAAiB,gBAAA,EAAA;AACjB,IAAA,MAAM,WAAc,GAAA,QAAA,CAAS,MAAM,WAAA,CAAY,kBAAkB,KAAM,CAAA,GAAA;AAAA,MAAI,CAAA,KAAA,KACzE,yBAAyB,KAAO,EAAA,WAAA,CAAY,IAAI,KAAO,EAAA,WAAA,CAAY,IAAI,KAAK;AAAA,KAC7E,CAAA;AAED,IAAA,MAAM,WAAc,GAAA,QAAA,CAAS,MAAM,WAAA,CAAY,kBAAkB,KAAM,CAAA,MAAA,GAAS,CAAI,GAAA,IAAA,CAAK,GAAI,CAAA,GAAG,WAAY,CAAA,KAAM,IAAI,CAAC,CAAA;AACvH,IAAM,MAAA,SAAA,GAAY,QAAS,CAAA,MAAM,GAAM,GAAA,IAAA,CAAK,IAAI,GAAG,WAAA,CAAY,KAAO,EAAA,CAAC,CAAC,CAAA;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"SliderRoot.cjs","sources":["../../src/Slider/SliderRoot.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { PrimitiveProps } from '@/Primitive'\nimport type { ComputedRef, Ref } from 'vue'\nimport type { DataOrientation, Direction, FormFieldProps } from '../shared/types'\nimport { useCollection } from '@/Collection'\nimport { clamp, createContext, useDirection, useFormControl, useForwardExpose } from '@/shared'\n\ntype ThumbAlignment = 'contain' | 'overflow'\n\nexport interface SliderRootProps extends PrimitiveProps, FormFieldProps {\n /** The value of the slider when initially rendered. Use when you do not need to control the state of the slider. */\n defaultValue?: number[]\n /** The controlled value of the slider. Can be bind as `v-model`. */\n modelValue?: number[] | null\n /** When `true`, prevents the user from interacting with the slider. */\n disabled?: boolean\n /** The orientation of the slider. */\n orientation?: DataOrientation\n /** The reading direction of the combobox when applicable. <br> If omitted, inherits globally from `ConfigProvider` or assumes LTR (left-to-right) reading mode. */\n dir?: Direction\n /** Whether the slider is visually inverted. */\n inverted?: boolean\n /** The minimum value for the range. */\n min?: number\n /** The maximum value for the range. */\n max?: number\n /** The stepping interval. */\n step?: number\n /** The minimum permitted steps between multiple thumbs. */\n minStepsBetweenThumbs?: number\n /**\n * The alignment of the slider thumb.\n * - `contain`: thumbs will be contained within the bounds of the track.\n * - `overflow`: thumbs will not be bound by the track. No extra offset will be added.\n * @defaultValue 'contain'\n */\n thumbAlignment?: ThumbAlignment\n}\n\nexport type SliderRootEmits = {\n /**\n * Event handler called when the slider value changes\n */\n 'update:modelValue': [payload: number[] | undefined]\n /**\n * Event handler called when the value changes at the end of an interaction.\n *\n * Useful when you only need to capture a final value e.g. to update a backend service.\n */\n 'valueCommit': [payload: number[]]\n}\n\nexport interface SliderRootContext {\n orientation: Ref<DataOrientation>\n disabled: Ref<boolean>\n min: Ref<number>\n max: Ref<number>\n modelValue?: Readonly<Ref<number[] | null | undefined>>\n currentModelValue: ComputedRef<number[]>\n valueIndexToChangeRef: Ref<number>\n thumbElements: Ref<HTMLElement[]>\n thumbAlignment: Ref<ThumbAlignment>\n}\n\nexport const [injectSliderRootContext, provideSliderRootContext]\n = createContext<SliderRootContext>('SliderRoot')\n</script>\n\n<script setup lang=\"ts\">\nimport { VisuallyHiddenInput } from '@/VisuallyHidden'\nimport { useVModel } from '@vueuse/core'\nimport { computed, ref, toRaw, toRefs } from 'vue'\nimport SliderHorizontal from './SliderHorizontal.vue'\nimport SliderVertical from './SliderVertical.vue'\nimport { ARROW_KEYS, getClosestValueIndex, getDecimalCount, getNextSortedValues, hasMinStepsBetweenValues, PAGE_KEYS, roundValue } from './utils'\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<SliderRootProps>(), {\n min: 0,\n max: 100,\n step: 1,\n orientation: 'horizontal',\n disabled: false,\n minStepsBetweenThumbs: 0,\n defaultValue: () => [0],\n inverted: false,\n thumbAlignment: 'contain',\n as: 'span',\n})\nconst emits = defineEmits<SliderRootEmits>()\n\ndefineSlots<{\n default: (props: {\n /** Current slider values */\n modelValue: typeof modelValue.value\n }) => any\n}>()\n\nconst { min, max, step, minStepsBetweenThumbs, orientation, disabled, thumbAlignment, dir: propDir } = toRefs(props)\nconst dir = useDirection(propDir)\nconst { forwardRef, currentElement } = useForwardExpose()\nconst isFormControl = useFormControl(currentElement)\n\nconst { CollectionSlot } = useCollection({ isProvider: true })\n\nconst modelValue = useVModel(props, 'modelValue', emits, {\n defaultValue: props.defaultValue,\n passive: (props.modelValue === undefined) as false,\n}) as Ref<number[] | null>\n\nconst currentModelValue = computed(() => Array.isArray(modelValue.value) ? [...modelValue.value] : [])\n\nconst valueIndexToChangeRef = ref(0)\nconst valuesBeforeSlideStartRef = ref(currentModelValue.value)\n\nfunction handleSlideStart(value: number) {\n const closestIndex = getClosestValueIndex(currentModelValue.value, value)\n updateValues(value, closestIndex)\n}\n\nfunction handleSlideMove(value: number) {\n updateValues(value, valueIndexToChangeRef.value)\n}\n\nfunction handleSlideEnd() {\n const prevValue = valuesBeforeSlideStartRef.value[valueIndexToChangeRef.value]\n const nextValue = currentModelValue.value[valueIndexToChangeRef.value]\n const hasChanged = nextValue !== prevValue\n if (hasChanged)\n emits('valueCommit', toRaw(currentModelValue.value))\n}\n\nfunction updateValues(value: number, atIndex: number, { commit } = { commit: false }) {\n const decimalCount = getDecimalCount(step.value)\n const snapToStep = roundValue(Math.round((value - min.value) / step.value) * step.value + min.value, decimalCount)\n const nextValue = clamp(snapToStep, min.value, max.value)\n\n const nextValues = getNextSortedValues(currentModelValue.value, nextValue, atIndex)\n\n if (hasMinStepsBetweenValues(nextValues, minStepsBetweenThumbs.value * step.value)) {\n valueIndexToChangeRef.value = nextValues.indexOf(nextValue)\n const hasChanged = String(nextValues) !== String(modelValue.value)\n if (hasChanged && commit)\n emits('valueCommit', nextValues)\n\n if (hasChanged) {\n thumbElements.value[valueIndexToChangeRef.value]?.focus()\n modelValue.value = nextValues\n }\n }\n}\n\nconst thumbElements = ref<HTMLElement[]>([])\nprovideSliderRootContext({\n modelValue,\n currentModelValue,\n valueIndexToChangeRef,\n thumbElements,\n orientation,\n min,\n max,\n disabled,\n thumbAlignment,\n})\n</script>\n\n<template>\n <CollectionSlot>\n <component\n :is=\"orientation === 'horizontal' ? SliderHorizontal : SliderVertical\"\n v-bind=\"$attrs\"\n :ref=\"forwardRef\"\n :as-child=\"asChild\"\n :as=\"as\"\n :min=\"min\"\n :max=\"max\"\n :dir=\"dir\"\n :inverted=\"inverted\"\n :aria-disabled=\"disabled\"\n :data-disabled=\"disabled ? '' : undefined\"\n @pointerdown=\"() => {\n if (!disabled) valuesBeforeSlideStartRef = currentModelValue\n }\"\n @slide-start=\"!disabled && handleSlideStart($event)\"\n @slide-move=\"!disabled && handleSlideMove($event)\"\n @slide-end=\"!disabled && handleSlideEnd()\"\n @home-key-down=\"!disabled && updateValues(min, 0, { commit: true })\"\n @end-key-down=\"!disabled && updateValues(max, currentModelValue.length - 1, { commit: true })\"\n @step-key-down=\"(event, direction) => {\n if (!disabled) {\n const isPageKey = PAGE_KEYS.includes(event.key);\n const isSkipKey = isPageKey || (event.shiftKey && ARROW_KEYS.includes(event.key));\n const multiplier = isSkipKey ? 10 : 1;\n const atIndex = valueIndexToChangeRef;\n const value = currentModelValue[atIndex];\n const stepInDirection = step * multiplier * direction;\n updateValues(value + stepInDirection, atIndex, { commit: true });\n }\n }\"\n >\n <slot :model-value=\"modelValue\" />\n\n <VisuallyHiddenInput\n v-if=\"isFormControl && name\"\n type=\"number\"\n :value=\"modelValue\"\n :name=\"name\"\n :required=\"required\"\n :disabled=\"disabled\"\n :step=\"step\"\n />\n </component>\n </CollectionSlot>\n</template>\n"],"names":["createContext","toRefs","useDirection","useForwardExpose","useFormControl","useCollection","useVModel","computed","ref","getClosestValueIndex","toRaw","getDecimalCount","roundValue","clamp","getNextSortedValues","hasMinStepsBetweenValues"],"mappings":"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"}
1
+ {"version":3,"file":"SliderRoot.cjs","sources":["../../src/Slider/SliderRoot.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { ComputedRef, Ref } from 'vue'\nimport type { DataOrientation, Direction, FormFieldProps } from '../shared/types'\nimport type { PrimitiveProps } from '@/Primitive'\nimport { useCollection } from '@/Collection'\nimport { clamp, createContext, useDirection, useFormControl, useForwardExpose } from '@/shared'\n\ntype ThumbAlignment = 'contain' | 'overflow'\n\nexport interface SliderRootProps extends PrimitiveProps, FormFieldProps {\n /** The value of the slider when initially rendered. Use when you do not need to control the state of the slider. */\n defaultValue?: number[]\n /** The controlled value of the slider. Can be bind as `v-model`. */\n modelValue?: number[] | null\n /** When `true`, prevents the user from interacting with the slider. */\n disabled?: boolean\n /** The orientation of the slider. */\n orientation?: DataOrientation\n /** The reading direction of the combobox when applicable. <br> If omitted, inherits globally from `ConfigProvider` or assumes LTR (left-to-right) reading mode. */\n dir?: Direction\n /** Whether the slider is visually inverted. */\n inverted?: boolean\n /** The minimum value for the range. */\n min?: number\n /** The maximum value for the range. */\n max?: number\n /** The stepping interval. */\n step?: number\n /** The minimum permitted steps between multiple thumbs. */\n minStepsBetweenThumbs?: number\n /**\n * The alignment of the slider thumb.\n * - `contain`: thumbs will be contained within the bounds of the track.\n * - `overflow`: thumbs will not be bound by the track. No extra offset will be added.\n * @defaultValue 'contain'\n */\n thumbAlignment?: ThumbAlignment\n}\n\nexport type SliderRootEmits = {\n /**\n * Event handler called when the slider value changes\n */\n 'update:modelValue': [payload: number[] | undefined]\n /**\n * Event handler called when the value changes at the end of an interaction.\n *\n * Useful when you only need to capture a final value e.g. to update a backend service.\n */\n 'valueCommit': [payload: number[]]\n}\n\nexport interface SliderRootContext {\n orientation: Ref<DataOrientation>\n disabled: Ref<boolean>\n min: Ref<number>\n max: Ref<number>\n modelValue?: Readonly<Ref<number[] | null | undefined>>\n currentModelValue: ComputedRef<number[]>\n valueIndexToChangeRef: Ref<number>\n thumbElements: Ref<HTMLElement[]>\n thumbAlignment: Ref<ThumbAlignment>\n}\n\nexport const [injectSliderRootContext, provideSliderRootContext]\n = createContext<SliderRootContext>('SliderRoot')\n</script>\n\n<script setup lang=\"ts\">\nimport { useVModel } from '@vueuse/core'\nimport { computed, ref, toRaw, toRefs } from 'vue'\nimport { VisuallyHiddenInput } from '@/VisuallyHidden'\nimport SliderHorizontal from './SliderHorizontal.vue'\nimport SliderVertical from './SliderVertical.vue'\nimport { ARROW_KEYS, getClosestValueIndex, getDecimalCount, getNextSortedValues, hasMinStepsBetweenValues, PAGE_KEYS, roundValue } from './utils'\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<SliderRootProps>(), {\n min: 0,\n max: 100,\n step: 1,\n orientation: 'horizontal',\n disabled: false,\n minStepsBetweenThumbs: 0,\n defaultValue: () => [0],\n inverted: false,\n thumbAlignment: 'contain',\n as: 'span',\n})\nconst emits = defineEmits<SliderRootEmits>()\n\ndefineSlots<{\n default?: (props: {\n /** Current slider values */\n modelValue: typeof modelValue.value\n }) => any\n}>()\n\nconst { min, max, step, minStepsBetweenThumbs, orientation, disabled, thumbAlignment, dir: propDir } = toRefs(props)\nconst dir = useDirection(propDir)\nconst { forwardRef, currentElement } = useForwardExpose()\nconst isFormControl = useFormControl(currentElement)\n\nconst { CollectionSlot } = useCollection({ isProvider: true })\n\nconst modelValue = useVModel(props, 'modelValue', emits, {\n defaultValue: props.defaultValue,\n passive: (props.modelValue === undefined) as false,\n}) as Ref<number[] | null>\n\nconst currentModelValue = computed(() => Array.isArray(modelValue.value) ? [...modelValue.value] : [])\n\nconst valueIndexToChangeRef = ref(0)\nconst valuesBeforeSlideStartRef = ref(currentModelValue.value)\n\nfunction handleSlideStart(value: number) {\n const closestIndex = getClosestValueIndex(currentModelValue.value, value)\n updateValues(value, closestIndex)\n}\n\nfunction handleSlideMove(value: number) {\n updateValues(value, valueIndexToChangeRef.value)\n}\n\nfunction handleSlideEnd() {\n const prevValue = valuesBeforeSlideStartRef.value[valueIndexToChangeRef.value]\n const nextValue = currentModelValue.value[valueIndexToChangeRef.value]\n const hasChanged = nextValue !== prevValue\n if (hasChanged)\n emits('valueCommit', toRaw(currentModelValue.value))\n}\n\nfunction updateValues(value: number, atIndex: number, { commit } = { commit: false }) {\n const decimalCount = getDecimalCount(step.value)\n const snapToStep = roundValue(Math.round((value - min.value) / step.value) * step.value + min.value, decimalCount)\n const nextValue = clamp(snapToStep, min.value, max.value)\n\n const nextValues = getNextSortedValues(currentModelValue.value, nextValue, atIndex)\n\n if (hasMinStepsBetweenValues(nextValues, minStepsBetweenThumbs.value * step.value)) {\n valueIndexToChangeRef.value = nextValues.indexOf(nextValue)\n const hasChanged = String(nextValues) !== String(modelValue.value)\n if (hasChanged && commit)\n emits('valueCommit', nextValues)\n\n if (hasChanged) {\n thumbElements.value[valueIndexToChangeRef.value]?.focus()\n modelValue.value = nextValues\n }\n }\n}\n\nconst thumbElements = ref<HTMLElement[]>([])\nprovideSliderRootContext({\n modelValue,\n currentModelValue,\n valueIndexToChangeRef,\n thumbElements,\n orientation,\n min,\n max,\n disabled,\n thumbAlignment,\n})\n</script>\n\n<template>\n <CollectionSlot>\n <component\n :is=\"orientation === 'horizontal' ? SliderHorizontal : SliderVertical\"\n v-bind=\"$attrs\"\n :ref=\"forwardRef\"\n :as-child=\"asChild\"\n :as=\"as\"\n :min=\"min\"\n :max=\"max\"\n :dir=\"dir\"\n :inverted=\"inverted\"\n :aria-disabled=\"disabled\"\n :data-disabled=\"disabled ? '' : undefined\"\n @pointerdown=\"() => {\n if (!disabled) valuesBeforeSlideStartRef = currentModelValue\n }\"\n @slide-start=\"!disabled && handleSlideStart($event)\"\n @slide-move=\"!disabled && handleSlideMove($event)\"\n @slide-end=\"!disabled && handleSlideEnd()\"\n @home-key-down=\"!disabled && updateValues(min, 0, { commit: true })\"\n @end-key-down=\"!disabled && updateValues(max, currentModelValue.length - 1, { commit: true })\"\n @step-key-down=\"(event, direction) => {\n if (!disabled) {\n const isPageKey = PAGE_KEYS.includes(event.key);\n const isSkipKey = isPageKey || (event.shiftKey && ARROW_KEYS.includes(event.key));\n const multiplier = isSkipKey ? 10 : 1;\n const atIndex = valueIndexToChangeRef;\n const value = currentModelValue[atIndex];\n const stepInDirection = step * multiplier * direction;\n updateValues(value + stepInDirection, atIndex, { commit: true });\n }\n }\"\n >\n <slot :model-value=\"modelValue\" />\n\n <VisuallyHiddenInput\n v-if=\"isFormControl && name\"\n type=\"number\"\n :value=\"modelValue\"\n :name=\"name\"\n :required=\"required\"\n :disabled=\"disabled\"\n :step=\"step\"\n />\n </component>\n </CollectionSlot>\n</template>\n"],"names":["createContext","toRefs","useDirection","useForwardExpose","useFormControl","useCollection","useVModel","computed","ref","getClosestValueIndex","toRaw","getDecimalCount","roundValue","clamp","getNextSortedValues","hasMinStepsBetweenValues"],"mappings":"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"}