reka-ui 2.9.9 → 2.10.0

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 (470) hide show
  1. package/dist/AlertDialog/AlertDialogContent.cjs +2 -1
  2. package/dist/AlertDialog/AlertDialogContent.cjs.map +1 -1
  3. package/dist/AlertDialog/AlertDialogContent.js +2 -1
  4. package/dist/AlertDialog/AlertDialogContent.js.map +1 -1
  5. package/dist/AlertDialog/AlertDialogRoot.cjs +4 -0
  6. package/dist/AlertDialog/AlertDialogRoot.cjs.map +1 -1
  7. package/dist/AlertDialog/AlertDialogRoot.js +4 -0
  8. package/dist/AlertDialog/AlertDialogRoot.js.map +1 -1
  9. package/dist/Checkbox/CheckboxRoot.cjs +27 -18
  10. package/dist/Checkbox/CheckboxRoot.cjs.map +1 -1
  11. package/dist/Checkbox/CheckboxRoot.js +28 -19
  12. package/dist/Checkbox/CheckboxRoot.js.map +1 -1
  13. package/dist/Collection/Collection.cjs +2 -1
  14. package/dist/Collection/Collection.cjs.map +1 -1
  15. package/dist/Collection/Collection.js +2 -1
  16. package/dist/Collection/Collection.js.map +1 -1
  17. package/dist/Combobox/ComboboxContent.cjs +8 -0
  18. package/dist/Combobox/ComboboxContent.cjs.map +1 -1
  19. package/dist/Combobox/ComboboxContent.js +8 -0
  20. package/dist/Combobox/ComboboxContent.js.map +1 -1
  21. package/dist/Combobox/ComboboxContentImpl.cjs +18 -2
  22. package/dist/Combobox/ComboboxContentImpl.cjs.map +1 -1
  23. package/dist/Combobox/ComboboxContentImpl.js +18 -2
  24. package/dist/Combobox/ComboboxContentImpl.js.map +1 -1
  25. package/dist/Combobox/ComboboxItem.cjs +11 -2
  26. package/dist/Combobox/ComboboxItem.cjs.map +1 -1
  27. package/dist/Combobox/ComboboxItem.js +12 -3
  28. package/dist/Combobox/ComboboxItem.js.map +1 -1
  29. package/dist/ConfigProvider/ConfigProvider.cjs +7 -1
  30. package/dist/ConfigProvider/ConfigProvider.cjs.map +1 -1
  31. package/dist/ConfigProvider/ConfigProvider.js +7 -1
  32. package/dist/ConfigProvider/ConfigProvider.js.map +1 -1
  33. package/dist/ContextMenu/ContextMenuContent.cjs +4 -0
  34. package/dist/ContextMenu/ContextMenuContent.cjs.map +1 -1
  35. package/dist/ContextMenu/ContextMenuContent.js +4 -0
  36. package/dist/ContextMenu/ContextMenuContent.js.map +1 -1
  37. package/dist/ContextMenu/ContextMenuSubContent.cjs +4 -0
  38. package/dist/ContextMenu/ContextMenuSubContent.cjs.map +1 -1
  39. package/dist/ContextMenu/ContextMenuSubContent.js +4 -0
  40. package/dist/ContextMenu/ContextMenuSubContent.js.map +1 -1
  41. package/dist/DateField/DateFieldInput.cjs +3 -1
  42. package/dist/DateField/DateFieldInput.cjs.map +1 -1
  43. package/dist/DateField/DateFieldInput.js +3 -1
  44. package/dist/DateField/DateFieldInput.js.map +1 -1
  45. package/dist/DateField/DateFieldRoot.cjs +7 -1
  46. package/dist/DateField/DateFieldRoot.cjs.map +1 -1
  47. package/dist/DateField/DateFieldRoot.js +7 -1
  48. package/dist/DateField/DateFieldRoot.js.map +1 -1
  49. package/dist/DatePicker/DatePickerContent.cjs +8 -0
  50. package/dist/DatePicker/DatePickerContent.cjs.map +1 -1
  51. package/dist/DatePicker/DatePickerContent.js +8 -0
  52. package/dist/DatePicker/DatePickerContent.js.map +1 -1
  53. package/dist/DatePicker/DatePickerRoot.cjs +4 -0
  54. package/dist/DatePicker/DatePickerRoot.cjs.map +1 -1
  55. package/dist/DatePicker/DatePickerRoot.js +4 -0
  56. package/dist/DatePicker/DatePickerRoot.js.map +1 -1
  57. package/dist/DateRangePicker/DateRangePickerContent.cjs +8 -0
  58. package/dist/DateRangePicker/DateRangePickerContent.cjs.map +1 -1
  59. package/dist/DateRangePicker/DateRangePickerContent.js +8 -0
  60. package/dist/DateRangePicker/DateRangePickerContent.js.map +1 -1
  61. package/dist/Dialog/DialogContent.cjs +16 -10
  62. package/dist/Dialog/DialogContent.cjs.map +1 -1
  63. package/dist/Dialog/DialogContent.js +17 -11
  64. package/dist/Dialog/DialogContent.js.map +1 -1
  65. package/dist/Dialog/DialogContentImpl.cjs +8 -1
  66. package/dist/Dialog/DialogContentImpl.cjs.map +1 -1
  67. package/dist/Dialog/DialogContentImpl.js +8 -1
  68. package/dist/Dialog/DialogContentImpl.js.map +1 -1
  69. package/dist/Dialog/DialogContentModal.cjs +23 -5
  70. package/dist/Dialog/DialogContentModal.cjs.map +1 -1
  71. package/dist/Dialog/DialogContentModal.js +24 -6
  72. package/dist/Dialog/DialogContentModal.js.map +1 -1
  73. package/dist/Dialog/DialogContentNonModal.cjs +18 -2
  74. package/dist/Dialog/DialogContentNonModal.cjs.map +1 -1
  75. package/dist/Dialog/DialogContentNonModal.js +19 -3
  76. package/dist/Dialog/DialogContentNonModal.js.map +1 -1
  77. package/dist/Dialog/DialogOverlay.cjs +12 -6
  78. package/dist/Dialog/DialogOverlay.cjs.map +1 -1
  79. package/dist/Dialog/DialogOverlay.js +13 -7
  80. package/dist/Dialog/DialogOverlay.js.map +1 -1
  81. package/dist/Dialog/DialogOverlayImpl.cjs +8 -1
  82. package/dist/Dialog/DialogOverlayImpl.cjs.map +1 -1
  83. package/dist/Dialog/DialogOverlayImpl.js +9 -2
  84. package/dist/Dialog/DialogOverlayImpl.js.map +1 -1
  85. package/dist/Dialog/DialogRoot.cjs +7 -1
  86. package/dist/Dialog/DialogRoot.cjs.map +1 -1
  87. package/dist/Dialog/DialogRoot.js +7 -1
  88. package/dist/Dialog/DialogRoot.js.map +1 -1
  89. package/dist/DismissableLayer/DismissableLayer.cjs +27 -10
  90. package/dist/DismissableLayer/DismissableLayer.cjs.map +1 -1
  91. package/dist/DismissableLayer/DismissableLayer.js +28 -11
  92. package/dist/DismissableLayer/DismissableLayer.js.map +1 -1
  93. package/dist/Drawer/DrawerClose.cjs +48 -0
  94. package/dist/Drawer/DrawerClose.cjs.map +1 -0
  95. package/dist/Drawer/DrawerClose.js +42 -0
  96. package/dist/Drawer/DrawerClose.js.map +1 -0
  97. package/dist/Drawer/DrawerContent.cjs +139 -0
  98. package/dist/Drawer/DrawerContent.cjs.map +1 -0
  99. package/dist/Drawer/DrawerContent.js +133 -0
  100. package/dist/Drawer/DrawerContent.js.map +1 -0
  101. package/dist/Drawer/DrawerContentImpl.cjs +298 -0
  102. package/dist/Drawer/DrawerContentImpl.cjs.map +1 -0
  103. package/dist/Drawer/DrawerContentImpl.js +292 -0
  104. package/dist/Drawer/DrawerContentImpl.js.map +1 -0
  105. package/dist/Drawer/DrawerDescription.cjs +45 -0
  106. package/dist/Drawer/DrawerDescription.cjs.map +1 -0
  107. package/dist/Drawer/DrawerDescription.js +39 -0
  108. package/dist/Drawer/DrawerDescription.js.map +1 -0
  109. package/dist/Drawer/DrawerHandle.cjs +48 -0
  110. package/dist/Drawer/DrawerHandle.cjs.map +1 -0
  111. package/dist/Drawer/DrawerHandle.js +42 -0
  112. package/dist/Drawer/DrawerHandle.js.map +1 -0
  113. package/dist/Drawer/DrawerIndent.cjs +78 -0
  114. package/dist/Drawer/DrawerIndent.cjs.map +1 -0
  115. package/dist/Drawer/DrawerIndent.js +72 -0
  116. package/dist/Drawer/DrawerIndent.js.map +1 -0
  117. package/dist/Drawer/DrawerIndentBackground.cjs +49 -0
  118. package/dist/Drawer/DrawerIndentBackground.cjs.map +1 -0
  119. package/dist/Drawer/DrawerIndentBackground.js +43 -0
  120. package/dist/Drawer/DrawerIndentBackground.js.map +1 -0
  121. package/dist/Drawer/DrawerOverlay.cjs +66 -0
  122. package/dist/Drawer/DrawerOverlay.cjs.map +1 -0
  123. package/dist/Drawer/DrawerOverlay.js +60 -0
  124. package/dist/Drawer/DrawerOverlay.js.map +1 -0
  125. package/dist/Drawer/DrawerOverlayImpl.cjs +69 -0
  126. package/dist/Drawer/DrawerOverlayImpl.cjs.map +1 -0
  127. package/dist/Drawer/DrawerOverlayImpl.js +63 -0
  128. package/dist/Drawer/DrawerOverlayImpl.js.map +1 -0
  129. package/dist/Drawer/DrawerPortal.cjs +47 -0
  130. package/dist/Drawer/DrawerPortal.cjs.map +1 -0
  131. package/dist/Drawer/DrawerPortal.js +41 -0
  132. package/dist/Drawer/DrawerPortal.js.map +1 -0
  133. package/dist/Drawer/DrawerProvider.cjs +80 -0
  134. package/dist/Drawer/DrawerProvider.cjs.map +1 -0
  135. package/dist/Drawer/DrawerProvider.js +68 -0
  136. package/dist/Drawer/DrawerProvider.js.map +1 -0
  137. package/dist/Drawer/DrawerRoot.cjs +197 -0
  138. package/dist/Drawer/DrawerRoot.cjs.map +1 -0
  139. package/dist/Drawer/DrawerRoot.js +185 -0
  140. package/dist/Drawer/DrawerRoot.js.map +1 -0
  141. package/dist/Drawer/DrawerSwipeArea.cjs +87 -0
  142. package/dist/Drawer/DrawerSwipeArea.cjs.map +1 -0
  143. package/dist/Drawer/DrawerSwipeArea.js +81 -0
  144. package/dist/Drawer/DrawerSwipeArea.js.map +1 -0
  145. package/dist/Drawer/DrawerTitle.cjs +45 -0
  146. package/dist/Drawer/DrawerTitle.cjs.map +1 -0
  147. package/dist/Drawer/DrawerTitle.js +39 -0
  148. package/dist/Drawer/DrawerTitle.js.map +1 -0
  149. package/dist/Drawer/DrawerTrigger.cjs +64 -0
  150. package/dist/Drawer/DrawerTrigger.cjs.map +1 -0
  151. package/dist/Drawer/DrawerTrigger.js +58 -0
  152. package/dist/Drawer/DrawerTrigger.js.map +1 -0
  153. package/dist/Drawer/DrawerViewport.cjs +49 -0
  154. package/dist/Drawer/DrawerViewport.cjs.map +1 -0
  155. package/dist/Drawer/DrawerViewport.js +43 -0
  156. package/dist/Drawer/DrawerViewport.js.map +1 -0
  157. package/dist/Drawer/utils.cjs +185 -0
  158. package/dist/Drawer/utils.cjs.map +1 -0
  159. package/dist/Drawer/utils.js +149 -0
  160. package/dist/Drawer/utils.js.map +1 -0
  161. package/dist/DropdownMenu/DropdownMenuContent.cjs +4 -0
  162. package/dist/DropdownMenu/DropdownMenuContent.cjs.map +1 -1
  163. package/dist/DropdownMenu/DropdownMenuContent.js +4 -0
  164. package/dist/DropdownMenu/DropdownMenuContent.js.map +1 -1
  165. package/dist/DropdownMenu/DropdownMenuSubContent.cjs +4 -0
  166. package/dist/DropdownMenu/DropdownMenuSubContent.cjs.map +1 -1
  167. package/dist/DropdownMenu/DropdownMenuSubContent.js +4 -0
  168. package/dist/DropdownMenu/DropdownMenuSubContent.js.map +1 -1
  169. package/dist/FocusScope/FocusScope.cjs +31 -11
  170. package/dist/FocusScope/FocusScope.cjs.map +1 -1
  171. package/dist/FocusScope/FocusScope.js +32 -12
  172. package/dist/FocusScope/FocusScope.js.map +1 -1
  173. package/dist/HoverCard/HoverCardContent.cjs +8 -0
  174. package/dist/HoverCard/HoverCardContent.cjs.map +1 -1
  175. package/dist/HoverCard/HoverCardContent.js +8 -0
  176. package/dist/HoverCard/HoverCardContent.js.map +1 -1
  177. package/dist/HoverCard/HoverCardContentImpl.cjs +8 -0
  178. package/dist/HoverCard/HoverCardContentImpl.cjs.map +1 -1
  179. package/dist/HoverCard/HoverCardContentImpl.js +8 -0
  180. package/dist/HoverCard/HoverCardContentImpl.js.map +1 -1
  181. package/dist/HoverCard/HoverCardRoot.cjs +9 -2
  182. package/dist/HoverCard/HoverCardRoot.cjs.map +1 -1
  183. package/dist/HoverCard/HoverCardRoot.js +9 -2
  184. package/dist/HoverCard/HoverCardRoot.js.map +1 -1
  185. package/dist/HoverCard/HoverCardTrigger.cjs +6 -0
  186. package/dist/HoverCard/HoverCardTrigger.cjs.map +1 -1
  187. package/dist/HoverCard/HoverCardTrigger.js +6 -0
  188. package/dist/HoverCard/HoverCardTrigger.js.map +1 -1
  189. package/dist/Listbox/ListboxRoot.cjs +4 -1
  190. package/dist/Listbox/ListboxRoot.cjs.map +1 -1
  191. package/dist/Listbox/ListboxRoot.js +4 -1
  192. package/dist/Listbox/ListboxRoot.js.map +1 -1
  193. package/dist/Listbox/ListboxVirtualizer.cjs +7 -3
  194. package/dist/Listbox/ListboxVirtualizer.cjs.map +1 -1
  195. package/dist/Listbox/ListboxVirtualizer.js +7 -3
  196. package/dist/Listbox/ListboxVirtualizer.js.map +1 -1
  197. package/dist/Menu/MenuContent.cjs +4 -0
  198. package/dist/Menu/MenuContent.cjs.map +1 -1
  199. package/dist/Menu/MenuContent.js +4 -0
  200. package/dist/Menu/MenuContent.js.map +1 -1
  201. package/dist/Menu/MenuContentImpl.cjs +4 -0
  202. package/dist/Menu/MenuContentImpl.cjs.map +1 -1
  203. package/dist/Menu/MenuContentImpl.js +4 -0
  204. package/dist/Menu/MenuContentImpl.js.map +1 -1
  205. package/dist/Menu/MenuRootContentModal.cjs +4 -0
  206. package/dist/Menu/MenuRootContentModal.cjs.map +1 -1
  207. package/dist/Menu/MenuRootContentModal.js +4 -0
  208. package/dist/Menu/MenuRootContentModal.js.map +1 -1
  209. package/dist/Menu/MenuRootContentNonModal.cjs +4 -0
  210. package/dist/Menu/MenuRootContentNonModal.cjs.map +1 -1
  211. package/dist/Menu/MenuRootContentNonModal.js +4 -0
  212. package/dist/Menu/MenuRootContentNonModal.js.map +1 -1
  213. package/dist/Menu/MenuSubContent.cjs +4 -0
  214. package/dist/Menu/MenuSubContent.cjs.map +1 -1
  215. package/dist/Menu/MenuSubContent.js +4 -0
  216. package/dist/Menu/MenuSubContent.js.map +1 -1
  217. package/dist/Menubar/MenubarContent.cjs +4 -0
  218. package/dist/Menubar/MenubarContent.cjs.map +1 -1
  219. package/dist/Menubar/MenubarContent.js +4 -0
  220. package/dist/Menubar/MenubarContent.js.map +1 -1
  221. package/dist/Menubar/MenubarSubContent.cjs +4 -0
  222. package/dist/Menubar/MenubarSubContent.cjs.map +1 -1
  223. package/dist/Menubar/MenubarSubContent.js +4 -0
  224. package/dist/Menubar/MenubarSubContent.js.map +1 -1
  225. package/dist/Popover/PopoverContent.cjs +8 -0
  226. package/dist/Popover/PopoverContent.cjs.map +1 -1
  227. package/dist/Popover/PopoverContent.js +8 -0
  228. package/dist/Popover/PopoverContent.js.map +1 -1
  229. package/dist/Popover/PopoverContentImpl.cjs +8 -0
  230. package/dist/Popover/PopoverContentImpl.cjs.map +1 -1
  231. package/dist/Popover/PopoverContentImpl.js +8 -0
  232. package/dist/Popover/PopoverContentImpl.js.map +1 -1
  233. package/dist/Popover/PopoverContentModal.cjs +8 -0
  234. package/dist/Popover/PopoverContentModal.cjs.map +1 -1
  235. package/dist/Popover/PopoverContentModal.js +8 -0
  236. package/dist/Popover/PopoverContentModal.js.map +1 -1
  237. package/dist/Popover/PopoverContentNonModal.cjs +8 -0
  238. package/dist/Popover/PopoverContentNonModal.cjs.map +1 -1
  239. package/dist/Popover/PopoverContentNonModal.js +8 -0
  240. package/dist/Popover/PopoverContentNonModal.js.map +1 -1
  241. package/dist/Popper/PopperContent.cjs +49 -6
  242. package/dist/Popper/PopperContent.cjs.map +1 -1
  243. package/dist/Popper/PopperContent.js +50 -7
  244. package/dist/Popper/PopperContent.js.map +1 -1
  245. package/dist/Popper/utils.cjs +10 -5
  246. package/dist/Popper/utils.cjs.map +1 -1
  247. package/dist/Popper/utils.js +10 -5
  248. package/dist/Popper/utils.js.map +1 -1
  249. package/dist/RadioGroup/Radio.cjs +27 -22
  250. package/dist/RadioGroup/Radio.cjs.map +1 -1
  251. package/dist/RadioGroup/Radio.js +28 -23
  252. package/dist/RadioGroup/Radio.js.map +1 -1
  253. package/dist/Rating/RatingItem.cjs +66 -0
  254. package/dist/Rating/RatingItem.cjs.map +1 -0
  255. package/dist/Rating/RatingItem.js +54 -0
  256. package/dist/Rating/RatingItem.js.map +1 -0
  257. package/dist/Rating/RatingItemIndicator.cjs +89 -0
  258. package/dist/Rating/RatingItemIndicator.cjs.map +1 -0
  259. package/dist/Rating/RatingItemIndicator.js +83 -0
  260. package/dist/Rating/RatingItemIndicator.js.map +1 -0
  261. package/dist/Rating/RatingRoot.cjs +136 -0
  262. package/dist/Rating/RatingRoot.cjs.map +1 -0
  263. package/dist/Rating/RatingRoot.js +124 -0
  264. package/dist/Rating/RatingRoot.js.map +1 -0
  265. package/dist/RovingFocus/RovingFocusItem.cjs +5 -0
  266. package/dist/RovingFocus/RovingFocusItem.cjs.map +1 -1
  267. package/dist/RovingFocus/RovingFocusItem.js +6 -1
  268. package/dist/RovingFocus/RovingFocusItem.js.map +1 -1
  269. package/dist/Select/SelectContent.cjs +8 -0
  270. package/dist/Select/SelectContent.cjs.map +1 -1
  271. package/dist/Select/SelectContent.js +8 -0
  272. package/dist/Select/SelectContent.js.map +1 -1
  273. package/dist/Select/SelectContentImpl.cjs +8 -0
  274. package/dist/Select/SelectContentImpl.cjs.map +1 -1
  275. package/dist/Select/SelectContentImpl.js +8 -0
  276. package/dist/Select/SelectContentImpl.js.map +1 -1
  277. package/dist/Select/SelectPopperPosition.cjs +8 -0
  278. package/dist/Select/SelectPopperPosition.cjs.map +1 -1
  279. package/dist/Select/SelectPopperPosition.js +8 -0
  280. package/dist/Select/SelectPopperPosition.js.map +1 -1
  281. package/dist/Select/SelectRoot.cjs +10 -5
  282. package/dist/Select/SelectRoot.cjs.map +1 -1
  283. package/dist/Select/SelectRoot.js +10 -5
  284. package/dist/Select/SelectRoot.js.map +1 -1
  285. package/dist/Select/SelectTrigger.cjs +25 -14
  286. package/dist/Select/SelectTrigger.cjs.map +1 -1
  287. package/dist/Select/SelectTrigger.js +25 -14
  288. package/dist/Select/SelectTrigger.js.map +1 -1
  289. package/dist/Switch/SwitchRoot.cjs +25 -18
  290. package/dist/Switch/SwitchRoot.cjs.map +1 -1
  291. package/dist/Switch/SwitchRoot.js +26 -19
  292. package/dist/Switch/SwitchRoot.js.map +1 -1
  293. package/dist/Tabs/TabsIndicator.cjs +4 -0
  294. package/dist/Tabs/TabsIndicator.cjs.map +1 -1
  295. package/dist/Tabs/TabsIndicator.js +4 -0
  296. package/dist/Tabs/TabsIndicator.js.map +1 -1
  297. package/dist/Teleport/Teleport.cjs +6 -3
  298. package/dist/Teleport/Teleport.cjs.map +1 -1
  299. package/dist/Teleport/Teleport.js +7 -4
  300. package/dist/Teleport/Teleport.js.map +1 -1
  301. package/dist/Toggle/Toggle.cjs +21 -16
  302. package/dist/Toggle/Toggle.cjs.map +1 -1
  303. package/dist/Toggle/Toggle.js +22 -17
  304. package/dist/Toggle/Toggle.js.map +1 -1
  305. package/dist/Toolbar/ToolbarToggleItem.cjs +5 -2
  306. package/dist/Toolbar/ToolbarToggleItem.cjs.map +1 -1
  307. package/dist/Toolbar/ToolbarToggleItem.js +5 -2
  308. package/dist/Toolbar/ToolbarToggleItem.js.map +1 -1
  309. package/dist/Tree/TreeItem.cjs +18 -2
  310. package/dist/Tree/TreeItem.cjs.map +1 -1
  311. package/dist/Tree/TreeItem.js +18 -2
  312. package/dist/Tree/TreeItem.js.map +1 -1
  313. package/dist/Tree/TreeVirtualizer.cjs +2 -1
  314. package/dist/Tree/TreeVirtualizer.cjs.map +1 -1
  315. package/dist/Tree/TreeVirtualizer.js +2 -1
  316. package/dist/Tree/TreeVirtualizer.js.map +1 -1
  317. package/dist/VisuallyHidden/VisuallyHidden.cjs +1 -1
  318. package/dist/VisuallyHidden/VisuallyHidden.cjs.map +1 -1
  319. package/dist/VisuallyHidden/VisuallyHidden.js +1 -1
  320. package/dist/VisuallyHidden/VisuallyHidden.js.map +1 -1
  321. package/dist/composables/useDrawerSnapPoints.cjs +130 -0
  322. package/dist/composables/useDrawerSnapPoints.cjs.map +1 -0
  323. package/dist/composables/useDrawerSnapPoints.js +124 -0
  324. package/dist/composables/useDrawerSnapPoints.js.map +1 -0
  325. package/dist/composables/useSwipeDismiss.cjs +397 -0
  326. package/dist/composables/useSwipeDismiss.cjs.map +1 -0
  327. package/dist/composables/useSwipeDismiss.js +391 -0
  328. package/dist/composables/useSwipeDismiss.js.map +1 -0
  329. package/dist/constant/components.cjs +20 -0
  330. package/dist/constant/components.cjs.map +1 -1
  331. package/dist/constant/components.js +20 -0
  332. package/dist/constant/components.js.map +1 -1
  333. package/dist/constant.d.cts +2 -0
  334. package/dist/constant.d.cts.map +1 -1
  335. package/dist/constant.d.ts +2 -0
  336. package/dist/constant.d.ts.map +1 -1
  337. package/dist/date/utils.cjs +1 -1
  338. package/dist/date/utils.cjs.map +1 -1
  339. package/dist/date/utils.js +1 -1
  340. package/dist/date/utils.js.map +1 -1
  341. package/dist/index.cjs +45 -1
  342. package/dist/index.d.cts +2 -2
  343. package/dist/index.d.ts +2 -2
  344. package/dist/index.js +24 -2
  345. package/dist/index2.d.cts.map +1 -1
  346. package/dist/index3.d.cts +68 -29
  347. package/dist/index3.d.cts.map +1 -1
  348. package/dist/index3.d.ts +68 -29
  349. package/dist/index3.d.ts.map +1 -1
  350. package/dist/index4.d.cts +1648 -1190
  351. package/dist/index4.d.cts.map +1 -1
  352. package/dist/index4.d.ts +1660 -1202
  353. package/dist/index4.d.ts.map +1 -1
  354. package/dist/internal.cjs +1 -1
  355. package/dist/internal.d.cts +3 -3
  356. package/dist/internal.d.ts +3 -3
  357. package/dist/internal.js +1 -1
  358. package/dist/namespaced/index.cjs +22 -0
  359. package/dist/namespaced/index.d.cts +22 -2
  360. package/dist/namespaced/index.d.mts +22 -2
  361. package/dist/namespaced/index.mjs +22 -2
  362. package/dist/nuxt/index.d.cts +2 -1
  363. package/dist/nuxt/index.d.mts +2 -1
  364. package/dist/resolver/index.d.cts +2 -1
  365. package/dist/resolver/index.d.mts +2 -1
  366. package/dist/shared/useEmitAsProps.cjs +5 -0
  367. package/dist/shared/useEmitAsProps.cjs.map +1 -1
  368. package/dist/shared/useEmitAsProps.js +5 -0
  369. package/dist/shared/useEmitAsProps.js.map +1 -1
  370. package/dist/shared/useForwardPropsEmits.cjs +0 -12
  371. package/dist/shared/useForwardPropsEmits.cjs.map +1 -1
  372. package/dist/shared/useForwardPropsEmits.js +0 -12
  373. package/dist/shared/useForwardPropsEmits.js.map +1 -1
  374. package/dist/shared/useForwardScopeId.cjs +34 -0
  375. package/dist/shared/useForwardScopeId.cjs.map +1 -0
  376. package/dist/shared/useForwardScopeId.js +28 -0
  377. package/dist/shared/useForwardScopeId.js.map +1 -0
  378. package/dist/shared/useId.cjs +7 -8
  379. package/dist/shared/useId.cjs.map +1 -1
  380. package/dist/shared/useId.js +7 -8
  381. package/dist/shared/useId.js.map +1 -1
  382. package/dist/shared/useSize.cjs +6 -2
  383. package/dist/shared/useSize.cjs.map +1 -1
  384. package/dist/shared/useSize.js +7 -3
  385. package/dist/shared/useSize.js.map +1 -1
  386. package/dist/shared.cjs +2 -2
  387. package/dist/shared.d.cts +2 -2
  388. package/dist/shared.d.ts +2 -2
  389. package/dist/shared.js +2 -2
  390. package/dist/utils/style.cjs +1 -1
  391. package/dist/utils/style.cjs.map +1 -1
  392. package/dist/utils/style.js +1 -1
  393. package/dist/utils/style.js.map +1 -1
  394. package/package.json +7 -5
  395. package/src/AlertDialog/AlertDialogContent.vue +6 -1
  396. package/src/Checkbox/CheckboxRoot.vue +28 -16
  397. package/src/Collection/Collection.ts +2 -1
  398. package/src/Combobox/ComboboxContentImpl.vue +20 -4
  399. package/src/Combobox/ComboboxItem.vue +1 -0
  400. package/src/ConfigProvider/ConfigProvider.vue +11 -1
  401. package/src/DateField/DateFieldInput.vue +6 -1
  402. package/src/DateField/DateFieldRoot.vue +6 -1
  403. package/src/Dialog/DialogContent.vue +16 -2
  404. package/src/Dialog/DialogContentImpl.vue +9 -2
  405. package/src/Dialog/DialogContentModal.vue +23 -4
  406. package/src/Dialog/DialogContentNonModal.vue +21 -3
  407. package/src/Dialog/DialogOverlay.vue +4 -0
  408. package/src/Dialog/DialogOverlayImpl.vue +7 -2
  409. package/src/Dialog/DialogRoot.vue +10 -1
  410. package/src/DismissableLayer/DismissableLayer.vue +75 -23
  411. package/src/Drawer/DrawerClose.vue +25 -0
  412. package/src/Drawer/DrawerContent.vue +98 -0
  413. package/src/Drawer/DrawerContentImpl.vue +386 -0
  414. package/src/Drawer/DrawerDescription.vue +24 -0
  415. package/src/Drawer/DrawerHandle.vue +25 -0
  416. package/src/Drawer/DrawerIndent.vue +61 -0
  417. package/src/Drawer/DrawerIndentBackground.vue +26 -0
  418. package/src/Drawer/DrawerOverlay.vue +42 -0
  419. package/src/Drawer/DrawerOverlayImpl.vue +54 -0
  420. package/src/Drawer/DrawerPortal.vue +17 -0
  421. package/src/Drawer/DrawerProvider.vue +87 -0
  422. package/src/Drawer/DrawerRoot.vue +244 -0
  423. package/src/Drawer/DrawerSwipeArea.vue +73 -0
  424. package/src/Drawer/DrawerTitle.vue +24 -0
  425. package/src/Drawer/DrawerTrigger.vue +44 -0
  426. package/src/Drawer/DrawerViewport.vue +34 -0
  427. package/src/Drawer/composables/useDrawerSnapPoints.ts +200 -0
  428. package/src/Drawer/composables/useSwipeDismiss.ts +557 -0
  429. package/src/Drawer/index.ts +74 -0
  430. package/src/Drawer/utils.ts +205 -0
  431. package/src/FocusScope/FocusScope.vue +76 -19
  432. package/src/HoverCard/HoverCardRoot.vue +7 -1
  433. package/src/HoverCard/HoverCardTrigger.vue +11 -0
  434. package/src/Listbox/ListboxRoot.vue +7 -4
  435. package/src/Listbox/ListboxVirtualizer.vue +19 -3
  436. package/src/Popper/PopperContent.vue +45 -4
  437. package/src/Popper/utils.ts +17 -7
  438. package/src/RadioGroup/Radio.vue +22 -14
  439. package/src/Rating/RatingItem.vue +1 -0
  440. package/src/Rating/RatingItemIndicator.vue +3 -2
  441. package/src/Rating/RatingRoot.vue +6 -3
  442. package/src/Rating/index.ts +3 -3
  443. package/src/RovingFocus/RovingFocusItem.vue +12 -1
  444. package/src/Select/SelectRoot.vue +4 -1
  445. package/src/Select/SelectTrigger.vue +49 -33
  446. package/src/Splitter/utils/style.ts +1 -1
  447. package/src/Switch/SwitchRoot.vue +20 -12
  448. package/src/Tabs/TabsIndicator.vue +5 -0
  449. package/src/Teleport/Teleport.vue +8 -4
  450. package/src/Toggle/Toggle.vue +18 -9
  451. package/src/Toolbar/ToolbarToggleItem.vue +4 -1
  452. package/src/Tree/TreeItem.vue +18 -0
  453. package/src/Tree/TreeRoot.vue +2 -2
  454. package/src/Tree/TreeVirtualizer.vue +3 -1
  455. package/src/VisuallyHidden/VisuallyHidden.vue +1 -1
  456. package/src/index.ts +2 -0
  457. package/src/shared/date/utils.ts +1 -1
  458. package/src/shared/index.ts +2 -2
  459. package/src/shared/useEmitAsProps.test-d.ts +77 -0
  460. package/src/shared/useEmitAsProps.ts +83 -4
  461. package/src/shared/useForwardProps.ts +1 -1
  462. package/src/shared/useForwardPropsEmits.ts +17 -2
  463. package/src/shared/useForwardScopeId.ts +26 -0
  464. package/src/shared/useId.ts +14 -6
  465. package/src/shared/useSize.ts +9 -4
  466. package/dist/shared/trap-focus.cjs +0 -35
  467. package/dist/shared/trap-focus.cjs.map +0 -1
  468. package/dist/shared/trap-focus.js +0 -30
  469. package/dist/shared/trap-focus.js.map +0 -1
  470. package/src/shared/trap-focus.ts +0 -43
@@ -22,10 +22,14 @@ export interface RadioProps extends PrimitiveProps, FormFieldProps {
22
22
  import { useVModel } from '@vueuse/core'
23
23
  import { computed, toRefs } from 'vue'
24
24
  import { Primitive } from '@/Primitive'
25
- import { useFormControl, useForwardExpose } from '@/shared'
25
+ import { useFormControl, useForwardExpose, useForwardScopeId } from '@/shared'
26
26
  import { VisuallyHiddenInput } from '@/VisuallyHidden'
27
27
  import { handleSelect } from './utils'
28
28
 
29
+ defineOptions({
30
+ inheritAttrs: false,
31
+ })
32
+
29
33
  const props = withDefaults(defineProps<RadioProps>(), {
30
34
  disabled: false,
31
35
  checked: undefined,
@@ -47,6 +51,9 @@ const checked = useVModel(props, 'checked', emits, {
47
51
  const { value } = toRefs(props)
48
52
  const { forwardRef, currentElement: triggerElement } = useForwardExpose()
49
53
  const isFormControl = useFormControl(triggerElement)
54
+ // Hidden form input is a sibling (not nested) of the control to avoid the
55
+ // `nested-interactive` a11y violation; forward the parent scope id for scoped styles.
56
+ const scopeIdAttrs = useForwardScopeId()
50
57
 
51
58
  const ariaLabel = computed(() => props.id && triggerElement.value ? (document.querySelector(`[for="${props.id}"]`) as HTMLLabelElement)?.innerText ?? props.value : undefined)
52
59
 
@@ -72,13 +79,12 @@ function handleClick(event: MouseEvent) {
72
79
 
73
80
  <template>
74
81
  <Primitive
75
- v-bind="$attrs"
76
82
  :id="id"
77
83
  :ref="forwardRef"
78
84
  role="radio"
79
85
  :type="as === 'button' ? 'button' : undefined"
80
86
  :as="as"
81
- :aria-checked="checked"
87
+ :aria-checked="checked ?? false"
82
88
  :aria-label="ariaLabel"
83
89
  :as-child="asChild"
84
90
  :disabled="disabled ? '' : undefined"
@@ -87,19 +93,21 @@ function handleClick(event: MouseEvent) {
87
93
  :value="value"
88
94
  :required="required"
89
95
  :name="name"
96
+ v-bind="{ ...scopeIdAttrs, ...$attrs }"
90
97
  @click.stop="handleClick"
91
98
  >
92
99
  <slot :checked="checked" />
93
-
94
- <VisuallyHiddenInput
95
- v-if="isFormControl && name"
96
- type="radio"
97
- tabindex="-1"
98
- :value="value"
99
- :checked="!!checked"
100
- :name="name"
101
- :disabled="disabled"
102
- :required="required"
103
- />
104
100
  </Primitive>
101
+
102
+ <VisuallyHiddenInput
103
+ v-if="isFormControl && name"
104
+ type="radio"
105
+ tabindex="-1"
106
+ :value="value"
107
+ :checked="!!checked"
108
+ :name="name"
109
+ :disabled="disabled"
110
+ :required="required"
111
+ v-bind="scopeIdAttrs"
112
+ />
105
113
  </template>
@@ -11,6 +11,7 @@ interface RatingItemContext {
11
11
  }
12
12
 
13
13
  export interface RatingItemProps extends PrimitiveProps {
14
+ /** The 1-based index of this item within the rating (e.g. the 3rd star). */
14
15
  item: number
15
16
  }
16
17
 
@@ -7,13 +7,14 @@ import { useForwardExpose } from '@/shared'
7
7
  import { injectRatingItemContext } from './RatingItem.vue'
8
8
  import { injectRatingRootContext } from './RatingRoot.vue'
9
9
 
10
- export interface RatingItemProps extends PrimitiveProps {
10
+ export interface RatingItemIndicatorProps extends PrimitiveProps {
11
+ /** The step value this indicator represents. */
11
12
  step: number
12
13
  }
13
14
  </script>
14
15
 
15
16
  <script setup lang="ts">
16
- const props = defineProps<RatingItemProps>()
17
+ const props = defineProps<RatingItemIndicatorProps>()
17
18
 
18
19
  const rootContext = injectRatingRootContext()
19
20
  const { currentElement, forwardRef } = useForwardExpose()
@@ -16,16 +16,19 @@ export interface RatingRootContext {
16
16
 
17
17
  export interface RatingRootProps extends Omit<RadioGroupRootProps, 'modelValue' | 'defaultValue'> {
18
18
  /**
19
- * The value of the tab that should be active when initially rendered. Use when you do not need to control the state of the tabs
19
+ * The rating value when initially rendered. Use when you do not need to control the state of the rating.
20
20
  */
21
21
  defaultValue?: number
22
- /** The controlled value of the tab to activate. Can be bind as `v-model`. */
22
+ /** The controlled rating value. Can be bound with `v-model`. */
23
23
  modelValue?: number
24
+ /** The number of rating items to render. */
24
25
  length?: number
26
+ /** When `true`, clicking the currently selected rating resets the value to `0`. */
25
27
  clearable?: boolean
28
+ /** When `true`, the rating previews the value under the pointer on hover. */
26
29
  hoverable?: boolean
30
+ /** The granularity each rating item is divided into. */
27
31
  step?: 1 | 0.5 | 0.25 | 0.1
28
-
29
32
  }
30
33
  export type RatingRootEmits = {
31
34
  /** Event handler called when the value changes */
@@ -1,3 +1,3 @@
1
- export { default as RatingItem, type RatingItemProps } from './RatingItem.vue'
2
- export { default as RatingItemIndicator } from './RatingItemIndicator.vue'
3
- export { default as RatingRoot, type RatingRootProps } from './RatingRoot.vue'
1
+ export { injectRatingItemContext, default as RatingItem, type RatingItemProps } from './RatingItem.vue'
2
+ export { default as RatingItemIndicator, type RatingItemIndicatorProps } from './RatingItemIndicator.vue'
3
+ export { injectRatingRootContext, default as RatingRoot, type RatingRootEmits, type RatingRootProps } from './RatingRoot.vue'
@@ -16,7 +16,7 @@ export interface RovingFocusItemProps extends PrimitiveProps {
16
16
  </script>
17
17
 
18
18
  <script setup lang="ts">
19
- import { computed, nextTick, onMounted, onUnmounted } from 'vue'
19
+ import { computed, nextTick, onMounted, onUnmounted, watch } from 'vue'
20
20
  import { useCollection } from '@/Collection'
21
21
  import { Primitive } from '@/Primitive'
22
22
  import { useId } from '@/shared'
@@ -46,6 +46,17 @@ onUnmounted(() => {
46
46
  context.onFocusableItemRemove()
47
47
  })
48
48
 
49
+ watch(() => props.focusable, (newVal, oldVal) => {
50
+ if (newVal === oldVal)
51
+ return
52
+ if (newVal) {
53
+ context.onFocusableItemAdd()
54
+ }
55
+ else {
56
+ context.onFocusableItemRemove()
57
+ }
58
+ })
59
+
49
60
  function handleKeydown(event: KeyboardEvent) {
50
61
  if (event.key === 'Tab' && event.shiftKey) {
51
62
  context.onItemShiftTab()
@@ -14,6 +14,8 @@ export interface SelectRootProps<T = AcceptableValue> extends FormFieldProps {
14
14
  defaultValue?: T | Array<T>
15
15
  /** The controlled value of the Select. Can be bind as `v-model`. */
16
16
  modelValue?: T | Array<T>
17
+ /** The value of the hidden native select option when the model value is nullish. */
18
+ nullableValue?: string
17
19
  /** Use this to compare objects by a particular field, or pass your own comparison function for complete control over how objects are compared. */
18
20
  by?: string | ((a: T, b: T) => boolean)
19
21
  /** The reading direction of the combobox when applicable. <br> If omitted, inherits globally from `ConfigProvider` or assumes LTR (left-to-right) reading mode. */
@@ -75,6 +77,7 @@ defineOptions({
75
77
  const props = withDefaults(defineProps<SelectRootProps<T>>(), {
76
78
  modelValue: undefined,
77
79
  open: undefined,
80
+ nullableValue: '',
78
81
  })
79
82
  const emits = defineEmits<SelectRootEmits<T>>()
80
83
 
@@ -214,7 +217,7 @@ provideSelectRootContext({
214
217
  >
215
218
  <option
216
219
  v-if="isNullish(modelValue)"
217
- value=""
220
+ :value="nullableValue"
218
221
  />
219
222
  <option
220
223
  v-for="option in Array.from(optionsSet)"
@@ -47,6 +47,52 @@ function handlePointerOpen(event: PointerEvent) {
47
47
  y: Math.round(event.pageY),
48
48
  }
49
49
  }
50
+
51
+ function isPlainLeftClick(event: MouseEvent) {
52
+ return event.button === 0 && event.ctrlKey === false
53
+ }
54
+
55
+ // Tracks direct mouse presses handled in `pointerdown` so the Safari label
56
+ // `click` workaround below does not re-focus the trigger after opening.
57
+ let openedFromPointerDown = false
58
+
59
+ function onTriggerPointerDown(event: PointerEvent) {
60
+ // Prevent opening on touch down.
61
+ // https://github.com/unovue/reka-ui/issues/804
62
+ if (event.pointerType === 'touch')
63
+ return event.preventDefault()
64
+
65
+ // prevent implicit pointer capture
66
+ // https://www.w3.org/TR/pointerevents3/#implicit-pointer-capture
67
+ const target = event.target as HTMLElement
68
+ if (target.hasPointerCapture(event.pointerId))
69
+ target.releasePointerCapture(event.pointerId)
70
+
71
+ // only call handler if it's the left button (mousedown gets triggered by all mouse buttons)
72
+ // but not when the control key is pressed (avoiding MacOS right click)
73
+ if (isPlainLeftClick(event)) {
74
+ handlePointerOpen(event)
75
+ openedFromPointerDown = true
76
+ }
77
+ }
78
+
79
+ function onTriggerMouseDown(event: MouseEvent) {
80
+ // Prevent trigger from stealing focus from the active item after opening.
81
+ // We avoid calling `preventDefault` in `pointerdown` because that suppresses
82
+ // compatibility mouse events (`mousedown`, `mouseup`, `click`).
83
+ if (isPlainLeftClick(event))
84
+ event.preventDefault()
85
+ }
86
+
87
+ function onTriggerClick(event: MouseEvent) {
88
+ // Safari: label-associated clicks may not run `pointerdown` on the trigger.
89
+ // Direct mouse clicks open in `pointerdown` and must not re-focus the trigger
90
+ // here — `mousedown` `preventDefault` does not suppress `click`.
91
+ if (!openedFromPointerDown)
92
+ (event.currentTarget as HTMLElement)?.focus()
93
+
94
+ openedFromPointerDown = false
95
+ }
50
96
  </script>
51
97
 
52
98
  <template>
@@ -69,39 +115,9 @@ function handlePointerOpen(event: PointerEvent) {
69
115
  :data-placeholder="shouldShowPlaceholder(rootContext.modelValue?.value) ? '' : undefined"
70
116
  :as-child="asChild"
71
117
  :as="as"
72
- @click="
73
- (event: MouseEvent) => {
74
- // Whilst browsers generally have no issue focusing the trigger when clicking
75
- // on a label, Safari seems to struggle with the fact that there's no `onClick`.
76
- // We force `focus` in this case. Note: this doesn't create any other side-effect
77
- // because we are preventing default in `onPointerDown` so effectively
78
- // this only runs for a label 'click'
79
- (event?.currentTarget as HTMLElement)?.focus();
80
- }
81
- "
82
- @pointerdown="
83
- (event: PointerEvent) => {
84
- // Prevent opening on touch down.
85
- // https://github.com/unovue/reka-ui/issues/804
86
- if (event.pointerType === 'touch')
87
- return event.preventDefault();
88
-
89
- // prevent implicit pointer capture
90
- // https://www.w3.org/TR/pointerevents3/#implicit-pointer-capture
91
- const target = event.target as HTMLElement;
92
- if (target.hasPointerCapture(event.pointerId)) {
93
- target.releasePointerCapture(event.pointerId);
94
- }
95
-
96
- // only call handler if it's the left button (mousedown gets triggered by all mouse buttons)
97
- // but not when the control key is pressed (avoiding MacOS right click)
98
- if (event.button === 0 && event.ctrlKey === false) {
99
- handlePointerOpen(event)
100
- // prevent trigger from stealing focus from the active item after opening.
101
- event.preventDefault();
102
- }
103
- }
104
- "
118
+ @click="onTriggerClick"
119
+ @pointerdown="onTriggerPointerDown"
120
+ @mousedown="onTriggerMouseDown"
105
121
  @pointerup.prevent="
106
122
  (event: PointerEvent) => {
107
123
  // Only open on pointer up when using touch devices
@@ -85,7 +85,7 @@ export function setGlobalCursorStyle(
85
85
  document.head.appendChild(styleElement)
86
86
  }
87
87
 
88
- styleElement.innerHTML = `*{cursor: ${style}!important;}`
88
+ styleElement.textContent = `*{cursor: ${style}!important;}`
89
89
  }
90
90
 
91
91
  // the % of the group's overall space this panel should occupy.
@@ -2,7 +2,7 @@
2
2
  import type { ComputedRef, Ref } from 'vue'
3
3
  import type { PrimitiveProps } from '@/Primitive'
4
4
  import type { FormFieldProps } from '@/shared/types'
5
- import { createContext, useFormControl, useForwardExpose } from '@/shared'
5
+ import { createContext, useFormControl, useForwardExpose, useForwardScopeId } from '@/shared'
6
6
 
7
7
  export interface SwitchRootProps<T = boolean> extends PrimitiveProps, FormFieldProps {
8
8
  /** The state of the switch when it is initially rendered. Use when you do not need to control its state. */
@@ -45,6 +45,10 @@ import { computed, toRefs } from 'vue'
45
45
  import { Primitive } from '@/Primitive'
46
46
  import { VisuallyHiddenInput } from '@/VisuallyHidden'
47
47
 
48
+ defineOptions({
49
+ inheritAttrs: false,
50
+ })
51
+
48
52
  const props = withDefaults(defineProps<SwitchRootProps<T>>(), {
49
53
  as: 'button',
50
54
  modelValue: undefined,
@@ -81,6 +85,9 @@ function toggleCheck() {
81
85
 
82
86
  const { forwardRef, currentElement } = useForwardExpose()
83
87
  const isFormControl = useFormControl(currentElement)
88
+ // Hidden form input is a sibling (not nested) of the control to avoid the
89
+ // `nested-interactive` a11y violation; forward the parent scope id for scoped styles.
90
+ const scopeIdAttrs = useForwardScopeId()
84
91
  const ariaLabel = computed(() => props.id && currentElement.value ? (document.querySelector(`[for="${props.id}"]`) as HTMLLabelElement)?.innerText : undefined)
85
92
 
86
93
  provideSwitchRootContext({
@@ -92,7 +99,6 @@ provideSwitchRootContext({
92
99
 
93
100
  <template>
94
101
  <Primitive
95
- v-bind="$attrs"
96
102
  :id="id"
97
103
  :ref="forwardRef"
98
104
  role="switch"
@@ -106,6 +112,7 @@ provideSwitchRootContext({
106
112
  :as-child="asChild"
107
113
  :as="as"
108
114
  :disabled="disabled"
115
+ v-bind="{ ...scopeIdAttrs, ...$attrs }"
109
116
  @click="toggleCheck"
110
117
  @keydown.enter.prevent="toggleCheck"
111
118
  >
@@ -113,15 +120,16 @@ provideSwitchRootContext({
113
120
  :model-value="modelValue"
114
121
  :checked="checked"
115
122
  />
116
-
117
- <VisuallyHiddenInput
118
- v-if="isFormControl && name"
119
- type="checkbox"
120
- :name="name"
121
- :disabled="disabled"
122
- :required="required"
123
- :value="value"
124
- :checked="checked"
125
- />
126
123
  </Primitive>
124
+
125
+ <VisuallyHiddenInput
126
+ v-if="isFormControl && name"
127
+ type="checkbox"
128
+ :name="name"
129
+ :disabled="disabled"
130
+ :required="required"
131
+ :value="value"
132
+ :checked="checked"
133
+ v-bind="scopeIdAttrs"
134
+ />
127
135
  </template>
@@ -22,10 +22,12 @@ const isMounted = useMounted()
22
22
 
23
23
  interface IndicatorStyle {
24
24
  size: number | null
25
+ thickness: number | null
25
26
  position: number | null
26
27
  }
27
28
  const indicatorStyle = ref<IndicatorStyle>({
28
29
  size: null,
30
+ thickness: null,
29
31
  position: null,
30
32
  })
31
33
  const tabs = ref<Array<HTMLElement>>([])
@@ -49,12 +51,14 @@ function updateIndicatorStyle() {
49
51
  if (context.orientation.value === 'horizontal') {
50
52
  indicatorStyle.value = {
51
53
  size: activeTab.offsetWidth,
54
+ thickness: activeTab.offsetHeight,
52
55
  position: activeTab.offsetLeft,
53
56
  }
54
57
  }
55
58
  else {
56
59
  indicatorStyle.value = {
57
60
  size: activeTab.offsetHeight,
61
+ thickness: activeTab.offsetWidth,
58
62
  position: activeTab.offsetTop,
59
63
  }
60
64
  }
@@ -67,6 +71,7 @@ function updateIndicatorStyle() {
67
71
  v-bind="props"
68
72
  :style="{
69
73
  '--reka-tabs-indicator-size': `${indicatorStyle.size}px`,
74
+ '--reka-tabs-indicator-thickness': `${indicatorStyle.thickness}px`,
70
75
  '--reka-tabs-indicator-position': `${indicatorStyle.position}px`,
71
76
  }"
72
77
  >
@@ -29,10 +29,14 @@ export interface TeleportProps {
29
29
 
30
30
  <script setup lang="ts">
31
31
  import { useMounted } from '@vueuse/core'
32
+ import { computed } from 'vue'
33
+ import { injectConfigProviderContext } from '@/ConfigProvider/ConfigProvider.vue'
32
34
 
33
- withDefaults(defineProps<TeleportProps>(), {
34
- to: 'body',
35
- })
35
+ const props = defineProps<TeleportProps>()
36
+
37
+ const configContext = injectConfigProviderContext({})
38
+
39
+ const target = computed(() => props.to ?? configContext.teleportTo?.value ?? 'body')
36
40
 
37
41
  const isMounted = useMounted()
38
42
  </script>
@@ -40,7 +44,7 @@ const isMounted = useMounted()
40
44
  <template>
41
45
  <Teleport
42
46
  v-if="isMounted || forceMount"
43
- :to="to"
47
+ :to="target"
44
48
  :disabled="disabled"
45
49
  :defer="defer"
46
50
  >
@@ -1,7 +1,7 @@
1
1
  <script lang="ts">
2
2
  import type { PrimitiveProps } from '@/Primitive'
3
3
  import type { FormFieldProps } from '@/shared/types'
4
- import { useFormControl, useForwardExpose } from '@/shared'
4
+ import { useFormControl, useForwardExpose, useForwardScopeId } from '@/shared'
5
5
  import { injectToggleGroupRootContext } from '@/ToggleGroup/ToggleGroupRoot.vue'
6
6
  import VisuallyHiddenInput from '@/VisuallyHidden/VisuallyHiddenInput.vue'
7
7
 
@@ -34,6 +34,10 @@ import { useVModel } from '@vueuse/core'
34
34
  import { computed } from 'vue'
35
35
  import { Primitive } from '@/Primitive'
36
36
 
37
+ defineOptions({
38
+ inheritAttrs: false,
39
+ })
40
+
37
41
  const props = withDefaults(defineProps<ToggleProps>(), {
38
42
  modelValue: undefined,
39
43
  disabled: false,
@@ -56,6 +60,9 @@ defineSlots<{
56
60
  }>()
57
61
 
58
62
  const { forwardRef, currentElement } = useForwardExpose()
63
+ // Hidden form input is a sibling (not nested) of the control to avoid the
64
+ // `nested-interactive` a11y violation; forward the parent scope id for scoped styles.
65
+ const scopeIdAttrs = useForwardScopeId()
59
66
  const toggleGroupContext = injectToggleGroupRootContext(null)
60
67
 
61
68
  const modelValue = useVModel(props, 'modelValue', emits, {
@@ -84,6 +91,7 @@ const isFormControl = useFormControl(currentElement)
84
91
  :data-state="dataState"
85
92
  :data-disabled="disabled ? '' : undefined"
86
93
  :disabled="disabled"
94
+ v-bind="{ ...scopeIdAttrs, ...$attrs }"
87
95
  @click="togglePressed"
88
96
  >
89
97
  <slot
@@ -92,13 +100,14 @@ const isFormControl = useFormControl(currentElement)
92
100
  :pressed="modelValue"
93
101
  :state="dataState"
94
102
  />
95
-
96
- <VisuallyHiddenInput
97
- v-if="isFormControl && name && !toggleGroupContext"
98
- type="checkbox"
99
- :name="name"
100
- :value="modelValue"
101
- :required="required"
102
- />
103
103
  </Primitive>
104
+
105
+ <VisuallyHiddenInput
106
+ v-if="isFormControl && name && !toggleGroupContext"
107
+ type="checkbox"
108
+ :name="name"
109
+ :value="modelValue"
110
+ :required="required"
111
+ v-bind="scopeIdAttrs"
112
+ />
104
113
  </template>
@@ -14,7 +14,10 @@ const { forwardRef } = useForwardExpose()
14
14
  </script>
15
15
 
16
16
  <template>
17
- <ToolbarButton as-child>
17
+ <ToolbarButton
18
+ as-child
19
+ :disabled="props.disabled"
20
+ >
18
21
  <ToggleGroupItem
19
22
  v-bind="props"
20
23
  :ref="forwardRef"
@@ -4,6 +4,8 @@ export interface TreeItemProps<T> extends PrimitiveProps {
4
4
  value: T
5
5
  /** Level of depth */
6
6
  level: number
7
+ /** When `true`, prevents the user from interacting with the item. */
8
+ disabled?: boolean
7
9
  }
8
10
 
9
11
  export type SelectEvent<T> = CustomEvent<{ originalEvent: PointerEvent | KeyboardEvent, value?: T, isExpanded: boolean, isSelected: boolean }>
@@ -45,6 +47,7 @@ defineSlots<{
45
47
  isExpanded: boolean
46
48
  isSelected: boolean
47
49
  isIndeterminate: boolean | undefined
50
+ isDisabled: boolean
48
51
  handleToggle: () => void
49
52
  handleSelect: () => void
50
53
  }) => any
@@ -81,7 +84,11 @@ const isIndeterminate = computed(() => {
81
84
  }
82
85
  })
83
86
 
87
+ const isDisabled = computed(() => rootContext.disabled.value || props.disabled)
88
+
84
89
  function handleKeydownRight(ev: KeyboardEvent) {
90
+ if (isDisabled.value)
91
+ return
85
92
  if (!hasChildren.value)
86
93
  return
87
94
 
@@ -103,6 +110,8 @@ function handleKeydownRight(ev: KeyboardEvent) {
103
110
  }
104
111
 
105
112
  function handleKeydownLeft(ev: KeyboardEvent) {
113
+ if (isDisabled.value)
114
+ return
106
115
  if (isExpanded.value) {
107
116
  // close expanded
108
117
  handleToggleCustomEvent(ev)
@@ -121,6 +130,8 @@ function handleKeydownLeft(ev: KeyboardEvent) {
121
130
  }
122
131
 
123
132
  async function handleSelect(ev: SelectEvent<T>) {
133
+ if (isDisabled.value)
134
+ return
124
135
  emits('select', ev)
125
136
  if (ev?.defaultPrevented)
126
137
  return
@@ -128,6 +139,8 @@ async function handleSelect(ev: SelectEvent<T>) {
128
139
  rootContext.onSelect(props.value)
129
140
  }
130
141
  async function handleToggle(ev: ToggleEvent<T>) {
142
+ if (isDisabled.value)
143
+ return
131
144
  emits('toggle', ev)
132
145
  if (ev?.defaultPrevented)
133
146
  return
@@ -155,6 +168,7 @@ defineExpose({
155
168
  isExpanded,
156
169
  isSelected,
157
170
  isIndeterminate,
171
+ isDisabled,
158
172
  handleToggle: () => rootContext.onToggle(props.value),
159
173
  handleSelect: () => rootContext.onSelect(props.value),
160
174
  })
@@ -165,6 +179,7 @@ defineExpose({
165
179
  as-child
166
180
  :value="value"
167
181
  allow-shift-key
182
+ :focusable="!isDisabled"
168
183
  >
169
184
  <Primitive
170
185
  v-bind="$attrs"
@@ -174,9 +189,11 @@ defineExpose({
174
189
  :aria-selected="isSelected"
175
190
  :aria-expanded="hasChildren ? isExpanded : undefined"
176
191
  :aria-level="level"
192
+ :aria-disabled="isDisabled ? true : undefined"
177
193
  :data-indent="level"
178
194
  :data-selected="isSelected ? '' : undefined"
179
195
  :data-expanded="isExpanded ? '' : undefined"
196
+ :data-disabled="isDisabled ? '' : undefined"
180
197
  @keydown.enter.space.self.prevent="handleSelectCustomEvent"
181
198
  @keydown.right.prevent="(ev: KeyboardEvent) => rootContext.dir.value === 'ltr' ? handleKeydownRight(ev) : handleKeydownLeft(ev)"
182
199
  @keydown.left.prevent="(ev: KeyboardEvent) => rootContext.dir.value === 'ltr' ? handleKeydownLeft(ev) : handleKeydownRight(ev)"
@@ -189,6 +206,7 @@ defineExpose({
189
206
  :is-expanded="isExpanded"
190
207
  :is-selected="isSelected"
191
208
  :is-indeterminate="isIndeterminate"
209
+ :is-disabled="isDisabled"
192
210
  :handle-select="() => rootContext.onSelect(value)"
193
211
  :handle-toggle="() => rootContext.onToggle(value)"
194
212
  />
@@ -26,9 +26,9 @@ export interface TreeRootProps<T = Record<string, any>, U extends Record<string,
26
26
  dir?: Direction
27
27
  /** When `true`, prevents the user from interacting with tree */
28
28
  disabled?: boolean
29
- /** When `true`, selecting parent will select the descendants. */
29
+ /** When `true`, selecting parent will select the descendants. Requires `multiple` to be `true`. */
30
30
  propagateSelect?: boolean
31
- /** When `true`, selecting children will update the parent state. */
31
+ /** When `true`, selecting children will update the parent state. Requires `multiple` to be `true`. */
32
32
  bubbleSelect?: boolean
33
33
  }
34
34
 
@@ -133,7 +133,9 @@ rootContext.virtualKeydownHook.on((event) => {
133
133
  const index = intent === 'first' ? 0 : rootContext.expandedItems.value.length - 1
134
134
  virtualizer.value.scrollToIndex(index)
135
135
  requestAnimationFrame(() => {
136
- const items = getItems()
136
+ const items = getItems().filter(i => i.ref.dataset.disabled !== '')
137
+ if (!items.length)
138
+ return
137
139
  const item = intent === 'first' ? items[0] : items.at(-1)!
138
140
  item.ref.focus()
139
141
  })
@@ -16,7 +16,7 @@ withDefaults(defineProps<VisuallyHiddenProps>(), { as: 'span', feature: 'focusab
16
16
  <Primitive
17
17
  :as="as"
18
18
  :as-child="asChild"
19
- :aria-hidden="feature === 'focusable' ? 'true' : undefined"
19
+ :aria-hidden="feature === 'focusable' || feature === 'fully-hidden' ? 'true' : undefined"
20
20
  :data-hidden="feature === 'fully-hidden' ? '' : undefined"
21
21
  :tabindex="feature === 'fully-hidden' ? '-1' : undefined"
22
22
  :style="{
package/src/index.ts CHANGED
@@ -21,6 +21,7 @@ export * from './DateRangeField'
21
21
  export * from './DateRangePicker'
22
22
  export * from './Dialog'
23
23
  export { type FocusOutsideEvent, type PointerDownOutsideEvent } from './DismissableLayer'
24
+ export * from './Drawer'
24
25
  export * from './DropdownMenu'
25
26
  export * from './Editable'
26
27
  export * from './FocusScope'
@@ -40,6 +41,7 @@ export { type AsTag, Primitive, type PrimitiveProps, Slot } from './Primitive'
40
41
  export * from './Progress'
41
42
  export * from './RadioGroup'
42
43
  export * from './RangeCalendar'
44
+ export * from './Rating'
43
45
  export * from './RovingFocus'
44
46
  export * from './ScrollArea'
45
47
  export * from './Select'
@@ -62,7 +62,7 @@ export function handleCalendarInitialFocus(calendar: HTMLElement) {
62
62
  if (today)
63
63
  return today.focus()
64
64
 
65
- const firstDay = calendar.querySelector<HTMLElement>('[data-reka-calendar-day]')
65
+ const firstDay = calendar.querySelector<HTMLElement>('[data-value]:not([data-outside-view]):not([data-disabled])')
66
66
  if (firstDay)
67
67
  return firstDay.focus()
68
68
  }