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
@@ -0,0 +1,87 @@
1
+ <script lang="ts">
2
+ import { createContext } from '@/shared'
3
+
4
+ export interface DrawerVisualState {
5
+ swipeProgress: number
6
+ frontmostHeight: number
7
+ }
8
+
9
+ export interface DrawerVisualStateStore {
10
+ getSnapshot: () => DrawerVisualState
11
+ set: (next: Partial<DrawerVisualState>) => void
12
+ subscribe: (listener: () => void) => () => void
13
+ }
14
+
15
+ export interface DrawerProviderContext {
16
+ active: import('vue').Ref<boolean>
17
+ setDrawerOpen: (id: string, open: boolean) => void
18
+ removeDrawer: (id: string) => void
19
+ visualStateStore: DrawerVisualStateStore
20
+ }
21
+
22
+ export const [injectDrawerProviderContext, provideDrawerProviderContext]
23
+ = createContext<DrawerProviderContext>('DrawerProvider')
24
+ </script>
25
+
26
+ <script setup lang="ts">
27
+ import { computed, ref } from 'vue'
28
+
29
+ function createVisualStateStore(): DrawerVisualStateStore {
30
+ let state: DrawerVisualState = { swipeProgress: 0, frontmostHeight: 0 }
31
+ const listeners = new Set<() => void>()
32
+ return {
33
+ getSnapshot: () => state,
34
+ set(next) {
35
+ const nextProgress = next.swipeProgress !== undefined
36
+ ? (Number.isFinite(next.swipeProgress) ? next.swipeProgress : 0)
37
+ : state.swipeProgress
38
+ const nextHeight = next.frontmostHeight !== undefined
39
+ ? (Number.isFinite(next.frontmostHeight) ? next.frontmostHeight : 0)
40
+ : state.frontmostHeight
41
+ if (nextProgress === state.swipeProgress && nextHeight === state.frontmostHeight)
42
+ return
43
+ state = { swipeProgress: nextProgress, frontmostHeight: nextHeight }
44
+ listeners.forEach(l => l())
45
+ },
46
+ subscribe(listener) {
47
+ listeners.add(listener)
48
+ return () => listeners.delete(listener)
49
+ },
50
+ }
51
+ }
52
+
53
+ const openById = ref(new Map<string, boolean>())
54
+ const visualStateStore = createVisualStateStore()
55
+
56
+ const active = computed(() => {
57
+ for (const open of openById.value.values()) {
58
+ if (open)
59
+ return true
60
+ }
61
+ return false
62
+ })
63
+
64
+ provideDrawerProviderContext({
65
+ active,
66
+ setDrawerOpen(id, open) {
67
+ const prev = openById.value.get(id)
68
+ if (prev === open)
69
+ return
70
+ const next = new Map(openById.value)
71
+ next.set(id, open)
72
+ openById.value = next
73
+ },
74
+ removeDrawer(id) {
75
+ if (!openById.value.has(id))
76
+ return
77
+ const next = new Map(openById.value)
78
+ next.delete(id)
79
+ openById.value = next
80
+ },
81
+ visualStateStore,
82
+ })
83
+ </script>
84
+
85
+ <template>
86
+ <slot />
87
+ </template>
@@ -0,0 +1,244 @@
1
+ <script lang="ts">
2
+ import type { Ref } from 'vue'
3
+ import type {
4
+ DrawerSnapPoint,
5
+ NestedSwipeProgressStore,
6
+ SwipeDirection,
7
+ } from './utils'
8
+ import { createContext, useId } from '@/shared'
9
+
10
+ export type DrawerModal = boolean | 'trap-focus'
11
+
12
+ export type DrawerOpenChangeReason
13
+ = | 'swipe'
14
+ | 'escape-key'
15
+ | 'outside-press'
16
+ | 'click'
17
+ | 'cancel'
18
+ | 'trigger-press'
19
+ | 'close-press'
20
+
21
+ export interface DrawerOpenChangeDetails {
22
+ reason?: DrawerOpenChangeReason
23
+ }
24
+
25
+ export interface DrawerRootProps {
26
+ /** v-model:open */
27
+ open?: boolean
28
+ defaultOpen?: boolean
29
+ /**
30
+ * Modality of the drawer.
31
+ * - `true` (default): modal with focus trap, scroll lock, and outside-press dismiss
32
+ * - `'trap-focus'`: traps focus but allows outside pointer events (non-modal side panels)
33
+ * - `false`: non-modal
34
+ */
35
+ modal?: DrawerModal
36
+ /** Direction to swipe to dismiss. @default 'down' */
37
+ swipeDirection?: SwipeDirection
38
+ /** Preset snap positions (fractions 0-1, pixels >1, or '148px'/'30rem' strings) */
39
+ snapPoints?: DrawerSnapPoint[]
40
+ /** v-model:snapPoint */
41
+ snapPoint?: DrawerSnapPoint | null
42
+ defaultSnapPoint?: DrawerSnapPoint | null
43
+ /**
44
+ * When true, snaps to the next sequential snap point (one step at a time).
45
+ * When false, snaps to the nearest snap point by distance.
46
+ * @default false
47
+ */
48
+ snapToSequentialPoints?: boolean
49
+ }
50
+
51
+ export type DrawerRootEmits = {
52
+ 'update:open': [value: boolean, details?: DrawerOpenChangeDetails]
53
+ 'update:openComplete': [value: boolean]
54
+ 'update:snapPoint': [value: DrawerSnapPoint | null]
55
+ }
56
+
57
+ export interface DrawerRootContext {
58
+ open: Readonly<Ref<boolean>>
59
+ modal: Ref<DrawerModal>
60
+ swipeDirection: Ref<SwipeDirection>
61
+ snapPoints: Ref<DrawerSnapPoint[] | undefined>
62
+ activeSnapPoint: Ref<DrawerSnapPoint | null | undefined>
63
+ snapToSequentialPoints: Ref<boolean>
64
+ popupHeight: Ref<number>
65
+ frontmostHeight: Ref<number>
66
+ hasNestedDrawer: Ref<boolean>
67
+ nestedOpenDrawerCount: Ref<number>
68
+ nestedSwiping: Ref<boolean>
69
+ isSwiping: Ref<boolean>
70
+ nestedSwipeProgressStore: NestedSwipeProgressStore
71
+ onOpenChange: (value: boolean, reason?: DrawerOpenChangeReason) => void
72
+ notifyOpenComplete: (value: boolean) => void
73
+ setActiveSnapPoint: (point: DrawerSnapPoint | null) => void
74
+ onPopupHeightChange: (height: number) => void
75
+ onNestedFrontmostHeightChange: (height: number) => void
76
+ onNestedDrawerPresenceChange: (present: boolean) => void
77
+ onNestedSwipingChange: (swiping: boolean) => void
78
+ onNestedSwipeProgressChange: (progress: number) => void
79
+ onSwipingChange: (swiping: boolean) => void
80
+ notifyParentFrontmostHeight?: (height: number) => void
81
+ notifyParentSwipingChange?: (swiping: boolean) => void
82
+ notifyParentSwipeProgressChange?: (progress: number) => void
83
+ notifyParentHasNestedDrawer?: (present: boolean) => void
84
+ triggerElement: Ref<HTMLElement | undefined>
85
+ contentElement: Ref<HTMLElement | undefined>
86
+ contentId: string
87
+ titleId: string
88
+ descriptionId: string
89
+ }
90
+
91
+ export const [injectDrawerRootContext, provideDrawerRootContext]
92
+ = createContext<DrawerRootContext>('DrawerRoot')
93
+ </script>
94
+
95
+ <script setup lang="ts">
96
+ import { useVModel } from '@vueuse/core'
97
+ import { computed, onUnmounted, ref, toRefs, watch } from 'vue'
98
+ import { injectDrawerProviderContext } from './DrawerProvider.vue'
99
+ import { createNestedSwipeProgressStore } from './utils'
100
+
101
+ const props = withDefaults(defineProps<DrawerRootProps>(), {
102
+ open: undefined,
103
+ defaultOpen: false,
104
+ modal: true,
105
+ swipeDirection: 'down',
106
+ snapPoints: undefined,
107
+ snapPoint: undefined,
108
+ defaultSnapPoint: undefined,
109
+ snapToSequentialPoints: false,
110
+ })
111
+ const emit = defineEmits<DrawerRootEmits>()
112
+
113
+ defineSlots<{
114
+ default?: (props: { open: boolean, close: () => void }) => any
115
+ }>()
116
+
117
+ // Manual open state management — we need to pass optional details on emit
118
+ const uncontrolledOpen = ref(props.defaultOpen)
119
+ const open = computed<boolean>({
120
+ get: () => props.open ?? uncontrolledOpen.value,
121
+ set: (value) => { uncontrolledOpen.value = value },
122
+ })
123
+
124
+ const activeSnapPoint = useVModel(props, 'snapPoint', emit, {
125
+ defaultValue: props.defaultSnapPoint ?? null,
126
+ passive: (props.snapPoint === undefined) as false,
127
+ eventName: 'update:snapPoint',
128
+ }) as Ref<DrawerSnapPoint | null | undefined>
129
+
130
+ const { modal, swipeDirection, snapPoints, snapToSequentialPoints } = toRefs(props)
131
+
132
+ const triggerElement = ref<HTMLElement>()
133
+ const contentElement = ref<HTMLElement>()
134
+ const popupHeight = ref(0)
135
+ const frontmostHeight = ref(0)
136
+ const hasNestedDrawer = ref(false)
137
+ const nestedOpenDrawerCount = ref(0)
138
+ const nestedSwiping = ref(false)
139
+ const isSwiping = ref(false)
140
+ const nestedSwipeProgressStore = createNestedSwipeProgressStore()
141
+
142
+ // Optional parent context for nested drawer support
143
+ const parentContext = injectDrawerRootContext(null)
144
+
145
+ // Optional provider context for drawer state tracking
146
+ const providerContext = injectDrawerProviderContext(null)
147
+
148
+ const contentId = useId(undefined, 'reka-drawer-content')
149
+ const titleId = useId(undefined, 'reka-drawer-title')
150
+ const descriptionId = useId(undefined, 'reka-drawer-description')
151
+
152
+ provideDrawerRootContext({
153
+ open,
154
+ modal,
155
+ swipeDirection,
156
+ snapPoints,
157
+ activeSnapPoint,
158
+ snapToSequentialPoints,
159
+ popupHeight,
160
+ frontmostHeight,
161
+ hasNestedDrawer,
162
+ nestedOpenDrawerCount,
163
+ nestedSwiping,
164
+ isSwiping,
165
+ nestedSwipeProgressStore,
166
+ onOpenChange(value, reason) {
167
+ if (open.value === value)
168
+ return
169
+ const details: DrawerOpenChangeDetails | undefined = reason ? { reason } : undefined
170
+ uncontrolledOpen.value = value
171
+ emit('update:open', value, details)
172
+ },
173
+ notifyOpenComplete(value) {
174
+ emit('update:openComplete', value)
175
+ },
176
+ setActiveSnapPoint(point) { activeSnapPoint.value = point },
177
+ onPopupHeightChange(h) {
178
+ popupHeight.value = h
179
+ providerContext?.visualStateStore.set({ frontmostHeight: h })
180
+ },
181
+ onNestedFrontmostHeightChange(h) { frontmostHeight.value = h },
182
+ onNestedDrawerPresenceChange(present) {
183
+ if (present)
184
+ nestedOpenDrawerCount.value++
185
+ else
186
+ nestedOpenDrawerCount.value = Math.max(0, nestedOpenDrawerCount.value - 1)
187
+ hasNestedDrawer.value = nestedOpenDrawerCount.value > 0
188
+ parentContext?.notifyParentHasNestedDrawer?.(present)
189
+ },
190
+ onNestedSwipingChange(swiping) {
191
+ nestedSwiping.value = swiping
192
+ parentContext?.notifyParentSwipingChange?.(swiping)
193
+ },
194
+ onNestedSwipeProgressChange(progress) {
195
+ nestedSwipeProgressStore.set(progress)
196
+ parentContext?.notifyParentSwipeProgressChange?.(progress)
197
+ providerContext?.visualStateStore.set({ swipeProgress: progress })
198
+ },
199
+ onSwipingChange(swiping) {
200
+ isSwiping.value = swiping
201
+ },
202
+ notifyParentFrontmostHeight: parentContext?.onNestedFrontmostHeightChange,
203
+ notifyParentSwipingChange: parentContext?.onNestedSwipingChange,
204
+ notifyParentSwipeProgressChange: parentContext?.onNestedSwipeProgressChange,
205
+ notifyParentHasNestedDrawer: parentContext?.onNestedDrawerPresenceChange,
206
+ triggerElement,
207
+ contentElement,
208
+ contentId,
209
+ titleId,
210
+ descriptionId,
211
+ })
212
+
213
+ function handleClose() {
214
+ if (!open.value)
215
+ return
216
+ uncontrolledOpen.value = false
217
+ emit('update:open', false, { reason: 'close-press' })
218
+ }
219
+
220
+ // Sync open state with DrawerProvider
221
+ watch(open, (isOpen) => {
222
+ if (isOpen) {
223
+ providerContext?.setDrawerOpen(contentId, true)
224
+ }
225
+ else {
226
+ providerContext?.setDrawerOpen(contentId, false)
227
+ }
228
+ }, { immediate: true })
229
+
230
+ // `update:openComplete` is emitted by DrawerContentImpl after the popup's
231
+ // enter/exit transition actually finishes (via transitionend/animationend on
232
+ // the popup element). DrawerRoot just exposes the notify hook through context.
233
+
234
+ onUnmounted(() => {
235
+ providerContext?.removeDrawer(contentId)
236
+ })
237
+ </script>
238
+
239
+ <template>
240
+ <slot
241
+ :open="open"
242
+ :close="handleClose"
243
+ />
244
+ </template>
@@ -0,0 +1,73 @@
1
+ <script lang="ts">
2
+ import type { SwipeDirection } from './utils'
3
+ import type { PrimitiveProps } from '@/Primitive'
4
+
5
+ export interface DrawerSwipeAreaProps extends PrimitiveProps {
6
+ /** Override the open swipe direction (defaults to opposite of Root's swipeDirection). */
7
+ swipeDirection?: SwipeDirection
8
+ /** Disable swipe-to-open. */
9
+ disabled?: boolean
10
+ }
11
+ </script>
12
+
13
+ <script setup lang="ts">
14
+ import { computed } from 'vue'
15
+ import { Primitive } from '@/Primitive'
16
+ import { useForwardExpose } from '@/shared'
17
+ import { useSwipeDismiss } from './composables/useSwipeDismiss'
18
+ import { injectDrawerRootContext } from './DrawerRoot.vue'
19
+ import { DRAWER_CSS_VARS } from './utils'
20
+
21
+ const props = withDefaults(defineProps<DrawerSwipeAreaProps>(), {
22
+ as: 'div',
23
+ disabled: false,
24
+ })
25
+ const { forwardRef, currentElement } = useForwardExpose()
26
+ const rootContext = injectDrawerRootContext()
27
+
28
+ const OPPOSITE: Record<string, string> = {
29
+ up: 'down',
30
+ down: 'up',
31
+ left: 'right',
32
+ right: 'left',
33
+ }
34
+
35
+ const openDirection = computed<SwipeDirection>(() => {
36
+ if (props.swipeDirection)
37
+ return props.swipeDirection
38
+ return (OPPOSITE[rootContext.swipeDirection.value] ?? 'up') as SwipeDirection
39
+ })
40
+
41
+ const enabled = computed(() => !props.disabled && !rootContext.open.value)
42
+
43
+ // Keep the directions array reactive — `[openDirection.value]` would capture
44
+ // the initial value only and ignore prop/state updates.
45
+ const directions = computed<SwipeDirection[]>(() => [openDirection.value])
46
+
47
+ useSwipeDismiss({
48
+ enabled,
49
+ elementRef: currentElement,
50
+ directions,
51
+ movementCssVars: {
52
+ x: DRAWER_CSS_VARS.swipeMovementX,
53
+ y: DRAWER_CSS_VARS.swipeMovementY,
54
+ },
55
+ onDismiss() {
56
+ rootContext.onOpenChange(true, 'swipe')
57
+ },
58
+ onSwipingChange(swiping) {
59
+ rootContext.onNestedSwipingChange(swiping)
60
+ },
61
+ })
62
+ </script>
63
+
64
+ <template>
65
+ <Primitive
66
+ v-bind="props"
67
+ :ref="forwardRef"
68
+ :data-state="rootContext.open.value ? 'open' : 'closed'"
69
+ :data-swipe-direction="openDirection"
70
+ >
71
+ <slot />
72
+ </Primitive>
73
+ </template>
@@ -0,0 +1,24 @@
1
+ <script lang="ts">
2
+ import type { PrimitiveProps } from '@/Primitive'
3
+
4
+ export interface DrawerTitleProps extends PrimitiveProps {}
5
+ </script>
6
+
7
+ <script setup lang="ts">
8
+ import { Primitive } from '@/Primitive'
9
+ import { useForwardExpose } from '@/shared'
10
+ import { injectDrawerRootContext } from './DrawerRoot.vue'
11
+
12
+ const props = withDefaults(defineProps<DrawerTitleProps>(), { as: 'h2' })
13
+ const rootContext = injectDrawerRootContext()
14
+ useForwardExpose()
15
+ </script>
16
+
17
+ <template>
18
+ <Primitive
19
+ v-bind="props"
20
+ :id="rootContext.titleId"
21
+ >
22
+ <slot />
23
+ </Primitive>
24
+ </template>
@@ -0,0 +1,44 @@
1
+ <script lang="ts">
2
+ import type { PrimitiveProps } from '@/Primitive'
3
+
4
+ export interface DrawerTriggerProps extends PrimitiveProps {}
5
+ </script>
6
+
7
+ <script setup lang="ts">
8
+ import { onUnmounted, watch } from 'vue'
9
+ import { Primitive } from '@/Primitive'
10
+ import { useForwardExpose } from '@/shared'
11
+ import { injectDrawerRootContext } from './DrawerRoot.vue'
12
+
13
+ const props = withDefaults(defineProps<DrawerTriggerProps>(), { as: 'button' })
14
+ const rootContext = injectDrawerRootContext()
15
+ const { forwardRef, currentElement } = useForwardExpose()
16
+
17
+ // Keep triggerElement in sync with the rendered element — useForwardExpose's
18
+ // currentElement is a reactive computed ref, and v-if / conditional rendering
19
+ // can swap the underlying DOM node, so a one-shot onMounted assignment would
20
+ // go stale and break finalFocus restoration in DrawerContent.
21
+ watch(currentElement, (el) => {
22
+ rootContext.triggerElement.value = el
23
+ }, { immediate: true })
24
+
25
+ onUnmounted(() => {
26
+ if (rootContext.triggerElement.value === currentElement.value)
27
+ rootContext.triggerElement.value = undefined
28
+ })
29
+ </script>
30
+
31
+ <template>
32
+ <Primitive
33
+ v-bind="props"
34
+ :ref="forwardRef"
35
+ :type="as === 'button' ? 'button' : undefined"
36
+ aria-haspopup="dialog"
37
+ :aria-expanded="rootContext.open.value"
38
+ :aria-controls="rootContext.open.value ? rootContext.contentId : undefined"
39
+ :data-state="rootContext.open.value ? 'open' : 'closed'"
40
+ @click="rootContext.onOpenChange(true, 'trigger-press')"
41
+ >
42
+ <slot />
43
+ </Primitive>
44
+ </template>
@@ -0,0 +1,34 @@
1
+ <script lang="ts">
2
+ import type { PrimitiveProps } from '@/Primitive'
3
+
4
+ export interface DrawerViewportProps extends PrimitiveProps {}
5
+ </script>
6
+
7
+ <script setup lang="ts">
8
+ import { Primitive } from '@/Primitive'
9
+ import { useForwardExpose } from '@/shared'
10
+ import { injectDrawerRootContext } from './DrawerRoot.vue'
11
+
12
+ /**
13
+ * Optional scrollable viewport wrapper. Mirrors Base UI's `Drawer.Viewport`.
14
+ *
15
+ * In Base UI the viewport owns the gesture state machine; in this port the
16
+ * gesture logic lives on `DrawerContent` / `DrawerContentImpl` directly, so
17
+ * this component is currently a passthrough that carries the `data-drawer-viewport`
18
+ * attribute for downstream selectors. It exists primarily for API parity.
19
+ */
20
+ const props = withDefaults(defineProps<DrawerViewportProps>(), { as: 'div' })
21
+ const { forwardRef } = useForwardExpose()
22
+ const rootContext = injectDrawerRootContext()
23
+ </script>
24
+
25
+ <template>
26
+ <Primitive
27
+ v-bind="props"
28
+ :ref="forwardRef"
29
+ data-drawer-viewport=""
30
+ :data-state="rootContext.open.value ? 'open' : 'closed'"
31
+ >
32
+ <slot />
33
+ </Primitive>
34
+ </template>