@base-ui/react 1.4.1 → 1.5.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 (579) hide show
  1. package/CHANGELOG.md +125 -8
  2. package/README.md +1 -1
  3. package/accordion/item/AccordionItem.d.ts +4 -0
  4. package/accordion/item/AccordionItem.js +5 -4
  5. package/accordion/panel/AccordionPanel.js +29 -51
  6. package/accordion/root/AccordionRoot.js +5 -6
  7. package/accordion/trigger/AccordionTrigger.js +3 -4
  8. package/alert-dialog/handle.d.ts +14 -1
  9. package/alert-dialog/handle.js +22 -5
  10. package/alert-dialog/index.d.ts +1 -1
  11. package/alert-dialog/index.parts.d.ts +2 -3
  12. package/alert-dialog/index.parts.js +4 -5
  13. package/alert-dialog/root/AlertDialogRoot.d.ts +7 -7
  14. package/alert-dialog/root/AlertDialogRoot.js +2 -56
  15. package/alert-dialog/trigger/AlertDialogTrigger.d.ts +25 -0
  16. package/alert-dialog/trigger/AlertDialogTrigger.js +15 -0
  17. package/alert-dialog/trigger/AlertDialogTriggerDataAttributes.d.ts +10 -0
  18. package/alert-dialog/trigger/AlertDialogTriggerDataAttributes.js +18 -0
  19. package/autocomplete/root/AutocompleteRoot.js +9 -10
  20. package/avatar/image/AvatarImage.js +4 -4
  21. package/checkbox/indicator/CheckboxIndicator.js +2 -2
  22. package/checkbox/root/CheckboxRoot.js +49 -11
  23. package/checkbox-group/CheckboxGroup.js +1 -5
  24. package/collapsible/panel/CollapsiblePanel.js +29 -51
  25. package/collapsible/panel/useCollapsiblePanel.d.ts +9 -23
  26. package/collapsible/panel/useCollapsiblePanel.js +308 -268
  27. package/collapsible/root/CollapsibleRoot.d.ts +1 -1
  28. package/collapsible/root/CollapsibleRootContext.d.ts +0 -2
  29. package/collapsible/root/useCollapsibleRoot.d.ts +0 -27
  30. package/collapsible/root/useCollapsibleRoot.js +2 -64
  31. package/collapsible/trigger/CollapsibleTrigger.js +5 -6
  32. package/combobox/arrow/ComboboxArrow.js +1 -1
  33. package/combobox/backdrop/ComboboxBackdrop.js +1 -1
  34. package/combobox/chip/ComboboxChip.js +7 -2
  35. package/combobox/clear/ComboboxClear.d.ts +4 -0
  36. package/combobox/clear/ComboboxClear.js +1 -0
  37. package/combobox/clear/ComboboxClearDataAttributes.d.ts +4 -0
  38. package/combobox/clear/ComboboxClearDataAttributes.js +4 -0
  39. package/combobox/icon/ComboboxIcon.js +1 -1
  40. package/combobox/input/ComboboxInput.js +15 -6
  41. package/combobox/item/ComboboxItem.js +8 -14
  42. package/combobox/item-indicator/ComboboxItemIndicator.js +1 -2
  43. package/combobox/root/AriaCombobox.js +61 -28
  44. package/combobox/store.d.ts +4 -8
  45. package/combobox/store.js +2 -1
  46. package/combobox/utils/ComboboxInternalDismissButton.js +2 -3
  47. package/csp-provider/CSPProvider.js +1 -1
  48. package/dialog/close/DialogClose.js +6 -6
  49. package/dialog/popup/DialogPopup.js +9 -4
  50. package/dialog/root/DialogRoot.d.ts +1 -2
  51. package/dialog/root/DialogRoot.js +3 -73
  52. package/dialog/root/DialogRootContext.d.ts +1 -0
  53. package/dialog/root/DialogRootContext.js +3 -1
  54. package/dialog/root/useDialogRoot.d.ts +12 -4
  55. package/dialog/root/useDialogRoot.js +27 -25
  56. package/dialog/root/useRenderDialogRoot.d.ts +4 -0
  57. package/dialog/root/useRenderDialogRoot.js +96 -0
  58. package/dialog/store/DialogHandle.d.ts +1 -1
  59. package/dialog/store/DialogHandle.js +2 -2
  60. package/dialog/store/DialogStore.d.ts +88 -1
  61. package/dialog/store/DialogStore.js +12 -17
  62. package/dialog/trigger/DialogTrigger.d.ts +1 -1
  63. package/dialog/trigger/DialogTrigger.js +11 -4
  64. package/dialog/viewport/DialogViewport.js +4 -3
  65. package/drawer/popup/DrawerPopup.js +13 -9
  66. package/drawer/root/DrawerRoot.js +11 -11
  67. package/drawer/root/DrawerRootContext.d.ts +1 -1
  68. package/drawer/swipe-area/DrawerSwipeArea.js +6 -5
  69. package/drawer/viewport/DrawerViewport.js +13 -14
  70. package/esm/accordion/item/AccordionItem.d.ts +4 -0
  71. package/esm/accordion/item/AccordionItem.js +5 -4
  72. package/esm/accordion/panel/AccordionPanel.js +29 -51
  73. package/esm/accordion/root/AccordionRoot.js +5 -6
  74. package/esm/accordion/trigger/AccordionTrigger.js +4 -5
  75. package/esm/alert-dialog/handle.d.ts +14 -1
  76. package/esm/alert-dialog/handle.js +20 -5
  77. package/esm/alert-dialog/index.d.ts +1 -1
  78. package/esm/alert-dialog/index.parts.d.ts +2 -3
  79. package/esm/alert-dialog/index.parts.js +2 -3
  80. package/esm/alert-dialog/root/AlertDialogRoot.d.ts +7 -7
  81. package/esm/alert-dialog/root/AlertDialogRoot.js +2 -55
  82. package/esm/alert-dialog/trigger/AlertDialogTrigger.d.ts +25 -0
  83. package/esm/alert-dialog/trigger/AlertDialogTrigger.js +10 -0
  84. package/esm/alert-dialog/trigger/AlertDialogTriggerDataAttributes.d.ts +10 -0
  85. package/esm/alert-dialog/trigger/AlertDialogTriggerDataAttributes.js +12 -0
  86. package/esm/autocomplete/root/AutocompleteRoot.js +9 -10
  87. package/esm/avatar/image/AvatarImage.js +4 -4
  88. package/esm/checkbox/indicator/CheckboxIndicator.js +2 -2
  89. package/esm/checkbox/root/CheckboxRoot.js +49 -11
  90. package/esm/checkbox-group/CheckboxGroup.js +1 -5
  91. package/esm/collapsible/panel/CollapsiblePanel.js +29 -51
  92. package/esm/collapsible/panel/useCollapsiblePanel.d.ts +9 -23
  93. package/esm/collapsible/panel/useCollapsiblePanel.js +309 -269
  94. package/esm/collapsible/root/CollapsibleRoot.d.ts +1 -1
  95. package/esm/collapsible/root/CollapsibleRootContext.d.ts +0 -2
  96. package/esm/collapsible/root/useCollapsibleRoot.d.ts +0 -27
  97. package/esm/collapsible/root/useCollapsibleRoot.js +2 -64
  98. package/esm/collapsible/trigger/CollapsibleTrigger.js +5 -6
  99. package/esm/combobox/arrow/ComboboxArrow.js +1 -1
  100. package/esm/combobox/backdrop/ComboboxBackdrop.js +1 -1
  101. package/esm/combobox/chip/ComboboxChip.js +7 -2
  102. package/esm/combobox/clear/ComboboxClear.d.ts +4 -0
  103. package/esm/combobox/clear/ComboboxClear.js +1 -0
  104. package/esm/combobox/clear/ComboboxClearDataAttributes.d.ts +4 -0
  105. package/esm/combobox/clear/ComboboxClearDataAttributes.js +4 -0
  106. package/esm/combobox/icon/ComboboxIcon.js +1 -1
  107. package/esm/combobox/input/ComboboxInput.js +16 -7
  108. package/esm/combobox/item/ComboboxItem.js +8 -14
  109. package/esm/combobox/item-indicator/ComboboxItemIndicator.js +1 -2
  110. package/esm/combobox/root/AriaCombobox.js +62 -29
  111. package/esm/combobox/store.d.ts +4 -8
  112. package/esm/combobox/store.js +2 -1
  113. package/esm/combobox/utils/ComboboxInternalDismissButton.js +2 -3
  114. package/esm/csp-provider/CSPProvider.js +1 -1
  115. package/esm/dialog/close/DialogClose.js +6 -6
  116. package/esm/dialog/popup/DialogPopup.js +9 -4
  117. package/esm/dialog/root/DialogRoot.d.ts +1 -2
  118. package/esm/dialog/root/DialogRoot.js +4 -72
  119. package/esm/dialog/root/DialogRootContext.d.ts +1 -0
  120. package/esm/dialog/root/DialogRootContext.js +2 -0
  121. package/esm/dialog/root/useDialogRoot.d.ts +12 -4
  122. package/esm/dialog/root/useDialogRoot.js +28 -27
  123. package/esm/dialog/root/useRenderDialogRoot.d.ts +4 -0
  124. package/esm/dialog/root/useRenderDialogRoot.js +90 -0
  125. package/esm/dialog/store/DialogHandle.d.ts +1 -1
  126. package/esm/dialog/store/DialogHandle.js +2 -2
  127. package/esm/dialog/store/DialogStore.d.ts +88 -1
  128. package/esm/dialog/store/DialogStore.js +13 -18
  129. package/esm/dialog/trigger/DialogTrigger.d.ts +1 -1
  130. package/esm/dialog/trigger/DialogTrigger.js +12 -5
  131. package/esm/dialog/viewport/DialogViewport.js +4 -3
  132. package/esm/drawer/popup/DrawerPopup.js +14 -9
  133. package/esm/drawer/root/DrawerRoot.js +11 -11
  134. package/esm/drawer/root/DrawerRootContext.d.ts +1 -1
  135. package/esm/drawer/swipe-area/DrawerSwipeArea.js +6 -5
  136. package/esm/drawer/viewport/DrawerViewport.js +13 -14
  137. package/esm/field/control/FieldControl.js +2 -6
  138. package/esm/field/item/FieldItem.js +1 -4
  139. package/esm/field/root/FieldRoot.js +11 -3
  140. package/esm/field/root/useFieldValidation.d.ts +1 -0
  141. package/esm/field/root/useFieldValidation.js +23 -20
  142. package/esm/field/utils/getCombinedFieldValidityData.d.ts +1 -1
  143. package/esm/field/validity/FieldValidity.d.ts +1 -1
  144. package/esm/floating-ui-react/components/FloatingDelayGroup.js +3 -3
  145. package/esm/floating-ui-react/components/FloatingFocusManager.d.ts +1 -1
  146. package/esm/floating-ui-react/components/FloatingFocusManager.js +20 -8
  147. package/esm/floating-ui-react/components/FloatingPortal.js +3 -3
  148. package/esm/floating-ui-react/hooks/useClick.js +83 -74
  149. package/esm/floating-ui-react/hooks/useClientPoint.js +29 -20
  150. package/esm/floating-ui-react/hooks/useDismiss.d.ts +1 -1
  151. package/esm/floating-ui-react/hooks/useDismiss.js +82 -93
  152. package/esm/floating-ui-react/hooks/useFloating.js +37 -32
  153. package/esm/floating-ui-react/hooks/useFloatingRootContext.d.ts +1 -1
  154. package/esm/floating-ui-react/hooks/useFloatingRootContext.js +2 -2
  155. package/esm/floating-ui-react/hooks/useFocus.js +84 -81
  156. package/esm/floating-ui-react/hooks/useHover.js +72 -76
  157. package/esm/floating-ui-react/hooks/useHoverFloatingInteraction.js +49 -44
  158. package/esm/floating-ui-react/hooks/useHoverInteractionSharedState.js +1 -1
  159. package/esm/floating-ui-react/hooks/useHoverReferenceInteraction.d.ts +7 -2
  160. package/esm/floating-ui-react/hooks/useHoverReferenceInteraction.js +44 -39
  161. package/esm/floating-ui-react/hooks/useHoverShared.d.ts +2 -1
  162. package/esm/floating-ui-react/hooks/useHoverShared.js +4 -0
  163. package/esm/floating-ui-react/hooks/useListNavigation.d.ts +1 -3
  164. package/esm/floating-ui-react/hooks/useListNavigation.js +83 -74
  165. package/esm/floating-ui-react/hooks/useSyncedFloatingRootContext.d.ts +9 -6
  166. package/esm/floating-ui-react/hooks/useSyncedFloatingRootContext.js +25 -20
  167. package/esm/floating-ui-react/hooks/useTypeahead.d.ts +2 -2
  168. package/esm/floating-ui-react/hooks/useTypeahead.js +33 -52
  169. package/esm/floating-ui-react/index.d.ts +0 -2
  170. package/esm/floating-ui-react/index.js +0 -2
  171. package/esm/floating-ui-react/types.d.ts +2 -7
  172. package/esm/floating-ui-react/utils/composite.js +2 -0
  173. package/esm/floating-ui-react/utils/enqueueFocus.d.ts +1 -1
  174. package/esm/floating-ui-react/utils/enqueueFocus.js +10 -7
  175. package/esm/floating-ui-react/utils/getEmptyRootContext.js +1 -1
  176. package/esm/form/Form.js +2 -2
  177. package/esm/index.js +1 -1
  178. package/esm/internals/composite/composite.d.ts +0 -1
  179. package/esm/internals/composite/composite.js +1 -2
  180. package/esm/internals/composite/root/useCompositeRoot.js +2 -2
  181. package/esm/internals/createBaseUIEventDetails.d.ts +2 -0
  182. package/esm/internals/csp-context/index.d.ts +2 -0
  183. package/esm/internals/csp-context/index.js +1 -0
  184. package/esm/internals/field-register-control/index.d.ts +0 -1
  185. package/esm/internals/field-register-control/useFieldControlRegistration.d.ts +2 -1
  186. package/esm/internals/field-register-control/useFieldControlRegistration.js +11 -14
  187. package/esm/internals/field-register-control/useRegisterFieldControl.d.ts +1 -4
  188. package/esm/internals/field-register-control/useRegisterFieldControl.js +6 -11
  189. package/esm/internals/field-root-context/FieldRootContext.d.ts +1 -0
  190. package/esm/internals/field-root-context/FieldRootContext.js +3 -2
  191. package/esm/internals/form-context/FormContext.d.ts +5 -1
  192. package/esm/internals/reason-parts.d.ts +2 -0
  193. package/esm/internals/reason-parts.js +2 -0
  194. package/esm/internals/types.d.ts +1 -0
  195. package/esm/internals/use-button/useButton.js +4 -4
  196. package/esm/internals/usePressAndHold.js +2 -2
  197. package/esm/internals/useRenderElement.js +2 -0
  198. package/esm/menu/arrow/MenuArrow.js +1 -1
  199. package/esm/menu/backdrop/MenuBackdrop.js +1 -1
  200. package/esm/menu/checkbox-item/MenuCheckboxItem.js +5 -7
  201. package/esm/menu/group/MenuGroup.js +1 -4
  202. package/esm/menu/group/MenuGroupContext.d.ts +1 -3
  203. package/esm/menu/group/MenuGroupContext.js +1 -1
  204. package/esm/menu/group-label/MenuGroupLabel.js +4 -6
  205. package/esm/menu/link-item/MenuLinkItem.js +2 -2
  206. package/esm/menu/popup/MenuPopup.js +5 -5
  207. package/esm/menu/radio-group/MenuRadioGroup.js +11 -5
  208. package/esm/menu/radio-item/MenuRadioItem.js +5 -7
  209. package/esm/menu/root/MenuRoot.js +63 -68
  210. package/esm/menu/store/MenuHandle.js +1 -1
  211. package/esm/menu/store/MenuStore.d.ts +87 -0
  212. package/esm/menu/submenu-trigger/MenuSubmenuTrigger.js +8 -5
  213. package/esm/menu/trigger/MenuTrigger.js +13 -10
  214. package/esm/menu/viewport/MenuViewport.d.ts +2 -2
  215. package/esm/menu/viewport/MenuViewport.js +2 -2
  216. package/esm/navigation-menu/arrow/NavigationMenuArrow.js +1 -1
  217. package/esm/navigation-menu/backdrop/NavigationMenuBackdrop.js +1 -1
  218. package/esm/navigation-menu/content/NavigationMenuContent.js +8 -5
  219. package/esm/navigation-menu/icon/NavigationMenuIcon.js +1 -1
  220. package/esm/navigation-menu/item/NavigationMenuItem.js +2 -2
  221. package/esm/navigation-menu/list/NavigationMenuList.js +1 -1
  222. package/esm/navigation-menu/popup/NavigationMenuPopup.js +2 -2
  223. package/esm/navigation-menu/root/NavigationMenuRoot.js +1 -3
  224. package/esm/navigation-menu/trigger/NavigationMenuTrigger.js +24 -17
  225. package/esm/navigation-menu/utils/isOutsideMenuEvent.d.ts +0 -1
  226. package/esm/navigation-menu/utils/isOutsideMenuEvent.js +1 -5
  227. package/esm/navigation-menu/viewport/NavigationMenuViewport.js +2 -3
  228. package/esm/number-field/input/NumberFieldInput.js +3 -5
  229. package/esm/number-field/root/NumberFieldRoot.js +5 -2
  230. package/esm/number-field/scrub-area/NumberFieldScrubArea.js +7 -3
  231. package/esm/otp-field/input/OTPFieldInput.js +43 -29
  232. package/esm/otp-field/root/OTPFieldRoot.d.ts +17 -8
  233. package/esm/otp-field/root/OTPFieldRoot.js +33 -33
  234. package/esm/otp-field/root/OTPFieldRootContext.d.ts +1 -1
  235. package/esm/otp-field/utils/otp.d.ts +5 -4
  236. package/esm/otp-field/utils/otp.js +23 -12
  237. package/esm/popover/arrow/PopoverArrow.js +1 -1
  238. package/esm/popover/backdrop/PopoverBackdrop.js +1 -1
  239. package/esm/popover/close/PopoverClose.js +2 -2
  240. package/esm/popover/description/PopoverDescription.js +1 -7
  241. package/esm/popover/popup/PopoverPopup.d.ts +1 -1
  242. package/esm/popover/popup/PopoverPopup.js +16 -10
  243. package/esm/popover/popup/PopoverPopupDataAttributes.d.ts +1 -1
  244. package/esm/popover/popup/PopoverPopupDataAttributes.js +1 -1
  245. package/esm/popover/positioner/PopoverPositioner.js +5 -5
  246. package/esm/popover/root/PopoverRoot.d.ts +1 -1
  247. package/esm/popover/root/PopoverRoot.js +42 -47
  248. package/esm/popover/store/PopoverHandle.js +1 -1
  249. package/esm/popover/store/PopoverStore.d.ts +91 -4
  250. package/esm/popover/store/PopoverStore.js +17 -18
  251. package/esm/popover/title/PopoverTitle.js +1 -7
  252. package/esm/popover/trigger/PopoverTrigger.js +24 -17
  253. package/esm/popover/viewport/PopoverViewport.d.ts +3 -3
  254. package/esm/popover/viewport/PopoverViewport.js +2 -2
  255. package/esm/popover/viewport/PopoverViewportDataAttributes.d.ts +1 -1
  256. package/esm/popover/viewport/PopoverViewportDataAttributes.js +1 -1
  257. package/esm/preview-card/positioner/PreviewCardPositioner.js +11 -1
  258. package/esm/preview-card/root/PreviewCardRoot.d.ts +1 -1
  259. package/esm/preview-card/root/PreviewCardRoot.js +32 -22
  260. package/esm/preview-card/store/PreviewCardHandle.js +1 -1
  261. package/esm/preview-card/store/PreviewCardStore.d.ts +90 -2
  262. package/esm/preview-card/store/PreviewCardStore.js +19 -31
  263. package/esm/preview-card/trigger/PreviewCardTrigger.js +6 -3
  264. package/esm/preview-card/viewport/PreviewCardViewport.d.ts +2 -2
  265. package/esm/preview-card/viewport/PreviewCardViewport.js +2 -2
  266. package/esm/preview-card/viewport/PreviewCardViewportDataAttributes.d.ts +2 -2
  267. package/esm/preview-card/viewport/PreviewCardViewportDataAttributes.js +2 -2
  268. package/esm/progress/indicator/ProgressIndicator.js +6 -11
  269. package/esm/progress/root/ProgressRoot.d.ts +1 -1
  270. package/esm/radio/root/RadioRoot.js +7 -3
  271. package/esm/radio-group/RadioGroup.js +4 -11
  272. package/esm/radio-group/RadioGroupContext.d.ts +0 -1
  273. package/esm/scroll-area/content/ScrollAreaContent.js +4 -4
  274. package/esm/scroll-area/root/ScrollAreaRoot.js +1 -1
  275. package/esm/scroll-area/scrollbar/ScrollAreaScrollbar.js +16 -20
  276. package/esm/scroll-area/viewport/ScrollAreaViewport.js +6 -10
  277. package/esm/select/arrow/SelectArrow.js +1 -1
  278. package/esm/select/backdrop/SelectBackdrop.js +1 -1
  279. package/esm/select/group/SelectGroup.js +1 -1
  280. package/esm/select/group-label/SelectGroupLabel.js +2 -2
  281. package/esm/select/icon/SelectIcon.js +1 -1
  282. package/esm/select/item/SelectItem.js +46 -32
  283. package/esm/select/item/SelectItemContext.d.ts +1 -1
  284. package/esm/select/item-indicator/SelectItemIndicator.js +1 -2
  285. package/esm/select/item-text/SelectItemText.js +9 -6
  286. package/esm/select/list/SelectList.js +1 -1
  287. package/esm/select/popup/SelectPopup.js +8 -3
  288. package/esm/select/positioner/SelectPositioner.js +3 -0
  289. package/esm/select/root/SelectRoot.js +46 -40
  290. package/esm/select/root/SelectRootContext.d.ts +4 -5
  291. package/esm/select/store.d.ts +3 -0
  292. package/esm/select/store.js +1 -0
  293. package/esm/select/trigger/SelectTrigger.d.ts +5 -0
  294. package/esm/select/trigger/SelectTrigger.js +19 -33
  295. package/esm/select/trigger/SelectTriggerDataAttributes.d.ts +5 -0
  296. package/esm/select/trigger/SelectTriggerDataAttributes.js +5 -0
  297. package/esm/slider/control/SliderControl.js +10 -12
  298. package/esm/slider/root/SliderRoot.js +1 -4
  299. package/esm/slider/thumb/SliderThumb.js +32 -30
  300. package/esm/slider/value/SliderValue.js +7 -15
  301. package/esm/switch/root/SwitchRoot.js +10 -10
  302. package/esm/switch/thumb/SwitchThumb.js +1 -9
  303. package/esm/tabs/indicator/TabsIndicator.js +14 -19
  304. package/esm/tabs/list/TabsList.js +4 -10
  305. package/esm/tabs/list/TabsListContext.d.ts +2 -1
  306. package/esm/tabs/panel/TabsPanel.js +1 -1
  307. package/esm/tabs/root/TabsRoot.d.ts +16 -1
  308. package/esm/tabs/root/TabsRoot.js +73 -25
  309. package/esm/tabs/root/TabsRootContext.d.ts +0 -2
  310. package/esm/toast/provider/ToastProvider.js +1 -1
  311. package/esm/toast/root/ToastRoot.d.ts +1 -1
  312. package/esm/toast/root/ToastRoot.js +108 -131
  313. package/esm/toast/root/ToastRootDataAttributes.d.ts +1 -1
  314. package/esm/toast/root/ToastRootDataAttributes.js +1 -1
  315. package/esm/toast/store.d.ts +9 -1
  316. package/esm/toast/store.js +19 -13
  317. package/esm/toast/useToastManager.d.ts +1 -1
  318. package/esm/toast/viewport/ToastViewport.js +1 -1
  319. package/esm/toggle/Toggle.js +5 -9
  320. package/esm/toggle-group/ToggleGroup.d.ts +2 -2
  321. package/esm/toggle-group/ToggleGroup.js +6 -13
  322. package/esm/toolbar/link/ToolbarLink.d.ts +1 -1
  323. package/esm/toolbar/link/ToolbarLink.js +1 -2
  324. package/esm/tooltip/arrow/TooltipArrow.js +3 -3
  325. package/esm/tooltip/popup/TooltipPopup.js +5 -4
  326. package/esm/tooltip/root/TooltipRoot.js +35 -26
  327. package/esm/tooltip/store/TooltipHandle.js +1 -1
  328. package/esm/tooltip/store/TooltipStore.d.ts +90 -2
  329. package/esm/tooltip/store/TooltipStore.js +18 -31
  330. package/esm/tooltip/trigger/TooltipTrigger.js +151 -20
  331. package/esm/tooltip/viewport/TooltipViewport.d.ts +2 -2
  332. package/esm/tooltip/viewport/TooltipViewport.js +2 -2
  333. package/esm/tooltip/viewport/TooltipViewportDataAttributes.d.ts +1 -1
  334. package/esm/tooltip/viewport/TooltipViewportDataAttributes.js +1 -1
  335. package/esm/unstable-use-media-query/index.js +1 -1
  336. package/esm/utils/popups/index.d.ts +1 -0
  337. package/esm/utils/popups/index.js +1 -0
  338. package/esm/utils/popups/inlineRect.d.ts +15 -0
  339. package/esm/utils/popups/inlineRect.js +191 -0
  340. package/esm/utils/popups/popupStoreUtils.d.ts +28 -10
  341. package/esm/utils/popups/popupStoreUtils.js +105 -20
  342. package/esm/utils/popups/popupTriggerMap.js +2 -0
  343. package/esm/utils/popups/store.d.ts +15 -2
  344. package/esm/utils/popups/store.js +38 -2
  345. package/esm/utils/popups/useTriggerFocusGuards.js +4 -5
  346. package/esm/utils/useAnchorPositioning.d.ts +5 -0
  347. package/esm/utils/useAnchorPositioning.js +12 -9
  348. package/esm/utils/useOpenInteractionType.d.ts +4 -0
  349. package/esm/utils/useOpenInteractionType.js +23 -18
  350. package/field/control/FieldControl.js +2 -6
  351. package/field/item/FieldItem.js +1 -4
  352. package/field/root/FieldRoot.js +11 -3
  353. package/field/root/useFieldValidation.d.ts +1 -0
  354. package/field/root/useFieldValidation.js +23 -20
  355. package/field/utils/getCombinedFieldValidityData.d.ts +1 -1
  356. package/field/validity/FieldValidity.d.ts +1 -1
  357. package/floating-ui-react/components/FloatingDelayGroup.js +3 -3
  358. package/floating-ui-react/components/FloatingFocusManager.d.ts +1 -1
  359. package/floating-ui-react/components/FloatingFocusManager.js +20 -8
  360. package/floating-ui-react/components/FloatingPortal.js +3 -3
  361. package/floating-ui-react/hooks/useClick.js +82 -73
  362. package/floating-ui-react/hooks/useClientPoint.js +29 -20
  363. package/floating-ui-react/hooks/useDismiss.d.ts +1 -1
  364. package/floating-ui-react/hooks/useDismiss.js +82 -92
  365. package/floating-ui-react/hooks/useFloating.js +36 -32
  366. package/floating-ui-react/hooks/useFloatingRootContext.d.ts +1 -1
  367. package/floating-ui-react/hooks/useFloatingRootContext.js +2 -2
  368. package/floating-ui-react/hooks/useFocus.js +84 -81
  369. package/floating-ui-react/hooks/useHover.js +74 -78
  370. package/floating-ui-react/hooks/useHoverFloatingInteraction.js +48 -43
  371. package/floating-ui-react/hooks/useHoverInteractionSharedState.js +1 -1
  372. package/floating-ui-react/hooks/useHoverReferenceInteraction.d.ts +7 -2
  373. package/floating-ui-react/hooks/useHoverReferenceInteraction.js +43 -38
  374. package/floating-ui-react/hooks/useHoverShared.d.ts +2 -1
  375. package/floating-ui-react/hooks/useHoverShared.js +11 -0
  376. package/floating-ui-react/hooks/useListNavigation.d.ts +1 -3
  377. package/floating-ui-react/hooks/useListNavigation.js +83 -74
  378. package/floating-ui-react/hooks/useSyncedFloatingRootContext.d.ts +9 -6
  379. package/floating-ui-react/hooks/useSyncedFloatingRootContext.js +26 -20
  380. package/floating-ui-react/hooks/useTypeahead.d.ts +2 -2
  381. package/floating-ui-react/hooks/useTypeahead.js +33 -52
  382. package/floating-ui-react/index.d.ts +0 -2
  383. package/floating-ui-react/index.js +0 -14
  384. package/floating-ui-react/types.d.ts +2 -7
  385. package/floating-ui-react/utils/composite.js +2 -0
  386. package/floating-ui-react/utils/enqueueFocus.d.ts +1 -1
  387. package/floating-ui-react/utils/enqueueFocus.js +10 -7
  388. package/floating-ui-react/utils/getEmptyRootContext.js +1 -1
  389. package/form/Form.js +2 -2
  390. package/index.js +1 -1
  391. package/internals/composite/composite.d.ts +0 -1
  392. package/internals/composite/composite.js +2 -3
  393. package/internals/composite/root/useCompositeRoot.js +1 -1
  394. package/internals/createBaseUIEventDetails.d.ts +2 -0
  395. package/internals/csp-context/index.d.ts +2 -0
  396. package/internals/csp-context/index.js +18 -0
  397. package/internals/field-register-control/index.d.ts +0 -1
  398. package/internals/field-register-control/useFieldControlRegistration.d.ts +2 -1
  399. package/internals/field-register-control/useFieldControlRegistration.js +11 -14
  400. package/internals/field-register-control/useRegisterFieldControl.d.ts +1 -4
  401. package/internals/field-register-control/useRegisterFieldControl.js +6 -11
  402. package/internals/field-root-context/FieldRootContext.d.ts +1 -0
  403. package/internals/field-root-context/FieldRootContext.js +4 -3
  404. package/internals/form-context/FormContext.d.ts +5 -1
  405. package/internals/reason-parts.d.ts +2 -0
  406. package/internals/reason-parts.js +3 -1
  407. package/internals/types.d.ts +1 -0
  408. package/internals/use-button/useButton.js +4 -4
  409. package/internals/usePressAndHold.js +2 -2
  410. package/internals/useRenderElement.js +2 -0
  411. package/menu/arrow/MenuArrow.js +1 -1
  412. package/menu/backdrop/MenuBackdrop.js +1 -1
  413. package/menu/checkbox-item/MenuCheckboxItem.js +5 -7
  414. package/menu/group/MenuGroup.js +1 -4
  415. package/menu/group/MenuGroupContext.d.ts +1 -3
  416. package/menu/group/MenuGroupContext.js +1 -1
  417. package/menu/group-label/MenuGroupLabel.js +4 -6
  418. package/menu/link-item/MenuLinkItem.js +2 -2
  419. package/menu/popup/MenuPopup.js +5 -5
  420. package/menu/radio-group/MenuRadioGroup.js +11 -5
  421. package/menu/radio-item/MenuRadioItem.js +5 -7
  422. package/menu/root/MenuRoot.js +60 -65
  423. package/menu/store/MenuHandle.js +1 -1
  424. package/menu/store/MenuStore.d.ts +87 -0
  425. package/menu/submenu-trigger/MenuSubmenuTrigger.js +7 -4
  426. package/menu/trigger/MenuTrigger.js +12 -9
  427. package/menu/viewport/MenuViewport.d.ts +2 -2
  428. package/menu/viewport/MenuViewport.js +2 -2
  429. package/navigation-menu/arrow/NavigationMenuArrow.js +1 -1
  430. package/navigation-menu/backdrop/NavigationMenuBackdrop.js +1 -1
  431. package/navigation-menu/content/NavigationMenuContent.js +8 -5
  432. package/navigation-menu/icon/NavigationMenuIcon.js +1 -1
  433. package/navigation-menu/item/NavigationMenuItem.js +2 -2
  434. package/navigation-menu/list/NavigationMenuList.js +1 -1
  435. package/navigation-menu/popup/NavigationMenuPopup.js +2 -2
  436. package/navigation-menu/root/NavigationMenuRoot.js +1 -3
  437. package/navigation-menu/trigger/NavigationMenuTrigger.js +23 -16
  438. package/navigation-menu/utils/isOutsideMenuEvent.d.ts +0 -1
  439. package/navigation-menu/utils/isOutsideMenuEvent.js +1 -5
  440. package/navigation-menu/viewport/NavigationMenuViewport.js +2 -3
  441. package/number-field/input/NumberFieldInput.js +3 -5
  442. package/number-field/root/NumberFieldRoot.js +5 -2
  443. package/number-field/scrub-area/NumberFieldScrubArea.js +7 -3
  444. package/otp-field/input/OTPFieldInput.js +42 -28
  445. package/otp-field/root/OTPFieldRoot.d.ts +17 -8
  446. package/otp-field/root/OTPFieldRoot.js +32 -32
  447. package/otp-field/root/OTPFieldRootContext.d.ts +1 -1
  448. package/otp-field/utils/otp.d.ts +5 -4
  449. package/otp-field/utils/otp.js +24 -12
  450. package/package.json +331 -317
  451. package/popover/arrow/PopoverArrow.js +1 -1
  452. package/popover/backdrop/PopoverBackdrop.js +1 -1
  453. package/popover/close/PopoverClose.js +2 -2
  454. package/popover/description/PopoverDescription.js +1 -7
  455. package/popover/popup/PopoverPopup.d.ts +1 -1
  456. package/popover/popup/PopoverPopup.js +16 -10
  457. package/popover/popup/PopoverPopupDataAttributes.d.ts +1 -1
  458. package/popover/popup/PopoverPopupDataAttributes.js +1 -1
  459. package/popover/positioner/PopoverPositioner.js +5 -5
  460. package/popover/root/PopoverRoot.d.ts +1 -1
  461. package/popover/root/PopoverRoot.js +39 -44
  462. package/popover/store/PopoverHandle.js +1 -1
  463. package/popover/store/PopoverStore.d.ts +91 -4
  464. package/popover/store/PopoverStore.js +16 -19
  465. package/popover/title/PopoverTitle.js +1 -7
  466. package/popover/trigger/PopoverTrigger.js +23 -16
  467. package/popover/viewport/PopoverViewport.d.ts +3 -3
  468. package/popover/viewport/PopoverViewport.js +2 -2
  469. package/popover/viewport/PopoverViewportDataAttributes.d.ts +1 -1
  470. package/popover/viewport/PopoverViewportDataAttributes.js +1 -1
  471. package/preview-card/positioner/PreviewCardPositioner.js +11 -1
  472. package/preview-card/root/PreviewCardRoot.d.ts +1 -1
  473. package/preview-card/root/PreviewCardRoot.js +30 -20
  474. package/preview-card/store/PreviewCardHandle.js +1 -1
  475. package/preview-card/store/PreviewCardStore.d.ts +90 -2
  476. package/preview-card/store/PreviewCardStore.js +18 -30
  477. package/preview-card/trigger/PreviewCardTrigger.js +5 -2
  478. package/preview-card/viewport/PreviewCardViewport.d.ts +2 -2
  479. package/preview-card/viewport/PreviewCardViewport.js +2 -2
  480. package/preview-card/viewport/PreviewCardViewportDataAttributes.d.ts +2 -2
  481. package/preview-card/viewport/PreviewCardViewportDataAttributes.js +2 -2
  482. package/progress/indicator/ProgressIndicator.js +6 -11
  483. package/progress/root/ProgressRoot.d.ts +1 -1
  484. package/radio/root/RadioRoot.js +7 -3
  485. package/radio-group/RadioGroup.js +4 -11
  486. package/radio-group/RadioGroupContext.d.ts +0 -1
  487. package/scroll-area/content/ScrollAreaContent.js +4 -4
  488. package/scroll-area/root/ScrollAreaRoot.js +1 -1
  489. package/scroll-area/scrollbar/ScrollAreaScrollbar.js +16 -20
  490. package/scroll-area/viewport/ScrollAreaViewport.js +6 -10
  491. package/select/arrow/SelectArrow.js +1 -1
  492. package/select/backdrop/SelectBackdrop.js +1 -1
  493. package/select/group/SelectGroup.js +1 -1
  494. package/select/group-label/SelectGroupLabel.js +2 -2
  495. package/select/icon/SelectIcon.js +1 -1
  496. package/select/item/SelectItem.js +46 -32
  497. package/select/item/SelectItemContext.d.ts +1 -1
  498. package/select/item-indicator/SelectItemIndicator.js +1 -2
  499. package/select/item-text/SelectItemText.js +9 -6
  500. package/select/list/SelectList.js +1 -1
  501. package/select/popup/SelectPopup.js +8 -3
  502. package/select/positioner/SelectPositioner.js +3 -0
  503. package/select/root/SelectRoot.js +45 -39
  504. package/select/root/SelectRootContext.d.ts +4 -5
  505. package/select/store.d.ts +3 -0
  506. package/select/store.js +1 -0
  507. package/select/trigger/SelectTrigger.d.ts +5 -0
  508. package/select/trigger/SelectTrigger.js +19 -33
  509. package/select/trigger/SelectTriggerDataAttributes.d.ts +5 -0
  510. package/select/trigger/SelectTriggerDataAttributes.js +5 -0
  511. package/slider/control/SliderControl.js +9 -11
  512. package/slider/root/SliderRoot.js +1 -4
  513. package/slider/thumb/SliderThumb.js +32 -30
  514. package/slider/value/SliderValue.js +7 -15
  515. package/switch/root/SwitchRoot.js +10 -10
  516. package/switch/thumb/SwitchThumb.js +1 -9
  517. package/tabs/indicator/TabsIndicator.js +14 -19
  518. package/tabs/list/TabsList.js +4 -10
  519. package/tabs/list/TabsListContext.d.ts +2 -1
  520. package/tabs/panel/TabsPanel.js +1 -1
  521. package/tabs/root/TabsRoot.d.ts +16 -1
  522. package/tabs/root/TabsRoot.js +71 -24
  523. package/tabs/root/TabsRootContext.d.ts +0 -2
  524. package/toast/provider/ToastProvider.js +1 -1
  525. package/toast/root/ToastRoot.d.ts +1 -1
  526. package/toast/root/ToastRoot.js +110 -133
  527. package/toast/root/ToastRootDataAttributes.d.ts +1 -1
  528. package/toast/root/ToastRootDataAttributes.js +1 -1
  529. package/toast/store.d.ts +9 -1
  530. package/toast/store.js +18 -12
  531. package/toast/useToastManager.d.ts +1 -1
  532. package/toast/viewport/ToastViewport.js +1 -1
  533. package/toggle/Toggle.js +5 -9
  534. package/toggle-group/ToggleGroup.d.ts +2 -2
  535. package/toggle-group/ToggleGroup.js +6 -13
  536. package/toolbar/link/ToolbarLink.d.ts +1 -1
  537. package/toolbar/link/ToolbarLink.js +1 -2
  538. package/tooltip/arrow/TooltipArrow.js +3 -3
  539. package/tooltip/popup/TooltipPopup.js +5 -4
  540. package/tooltip/root/TooltipRoot.js +32 -23
  541. package/tooltip/store/TooltipHandle.js +1 -1
  542. package/tooltip/store/TooltipStore.d.ts +90 -2
  543. package/tooltip/store/TooltipStore.js +17 -30
  544. package/tooltip/trigger/TooltipTrigger.js +152 -20
  545. package/tooltip/viewport/TooltipViewport.d.ts +2 -2
  546. package/tooltip/viewport/TooltipViewport.js +2 -2
  547. package/tooltip/viewport/TooltipViewportDataAttributes.d.ts +1 -1
  548. package/tooltip/viewport/TooltipViewportDataAttributes.js +1 -1
  549. package/unstable-use-media-query/index.js +1 -1
  550. package/utils/popups/index.d.ts +1 -0
  551. package/utils/popups/index.js +11 -0
  552. package/utils/popups/inlineRect.d.ts +15 -0
  553. package/utils/popups/inlineRect.js +198 -0
  554. package/utils/popups/popupStoreUtils.d.ts +28 -10
  555. package/utils/popups/popupStoreUtils.js +110 -20
  556. package/utils/popups/popupTriggerMap.js +2 -0
  557. package/utils/popups/store.d.ts +15 -2
  558. package/utils/popups/store.js +39 -2
  559. package/utils/popups/useTriggerFocusGuards.js +4 -5
  560. package/utils/useAnchorPositioning.d.ts +5 -0
  561. package/utils/useAnchorPositioning.js +12 -9
  562. package/utils/useOpenInteractionType.d.ts +4 -0
  563. package/utils/useOpenInteractionType.js +24 -17
  564. package/checkbox-group/index.parts.d.ts +0 -1
  565. package/checkbox-group/index.parts.js +0 -12
  566. package/esm/checkbox-group/index.parts.d.ts +0 -1
  567. package/esm/checkbox-group/index.parts.js +0 -1
  568. package/esm/floating-ui-react/hooks/useInteractions.d.ts +0 -20
  569. package/esm/floating-ui-react/hooks/useInteractions.js +0 -88
  570. package/esm/floating-ui-react/hooks/useRole.d.ts +0 -17
  571. package/esm/floating-ui-react/hooks/useRole.js +0 -113
  572. package/floating-ui-react/hooks/useInteractions.d.ts +0 -20
  573. package/floating-ui-react/hooks/useInteractions.js +0 -95
  574. package/floating-ui-react/hooks/useRole.d.ts +0 -17
  575. package/floating-ui-react/hooks/useRole.js +0 -120
  576. /package/{csp-provider → esm/internals/csp-context}/CSPContext.d.ts +0 -0
  577. /package/esm/{csp-provider → internals/csp-context}/CSPContext.js +0 -0
  578. /package/{esm/csp-provider → internals/csp-context}/CSPContext.d.ts +0 -0
  579. /package/{csp-provider → internals/csp-context}/CSPContext.js +0 -0
@@ -0,0 +1,90 @@
1
+ 'use client';
2
+
3
+ import * as React from 'react';
4
+ import { useOnFirstRender } from '@base-ui/utils/useOnFirstRender';
5
+ import { DialogInteractions, useDialogRoot } from "./useDialogRoot.js";
6
+ import { DialogRootContext, IsDrawerContext, useDialogRootContext } from "./DialogRootContext.js";
7
+ import { DialogStore } from "../store/DialogStore.js";
8
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
9
+ export function useRenderDialogRoot(props, mode = 'dialog') {
10
+ const {
11
+ children,
12
+ open: openProp,
13
+ defaultOpen = false,
14
+ onOpenChange,
15
+ onOpenChangeComplete,
16
+ disablePointerDismissal: disablePointerDismissalProp = false,
17
+ modal: modalProp = true,
18
+ actionsRef,
19
+ handle,
20
+ triggerId: triggerIdProp,
21
+ defaultTriggerId: defaultTriggerIdProp = null
22
+ } = props;
23
+ const isDrawer = mode === 'drawer';
24
+ const isAlertDialog = mode === 'alert-dialog';
25
+ const modal = isAlertDialog ? true : modalProp;
26
+ const disablePointerDismissal = isAlertDialog || disablePointerDismissalProp;
27
+ const role = isAlertDialog ? 'alertdialog' : 'dialog';
28
+ const parentDialogRootContext = useDialogRootContext(true);
29
+ const nested = Boolean(parentDialogRootContext);
30
+ const rootState = {
31
+ modal,
32
+ disablePointerDismissal,
33
+ nested,
34
+ role
35
+ };
36
+ const store = DialogStore.useStore(handle?.store, {
37
+ open: defaultOpen,
38
+ openProp,
39
+ activeTriggerId: defaultTriggerIdProp,
40
+ triggerIdProp,
41
+ ...rootState
42
+ });
43
+
44
+ // Support initially open state when uncontrolled
45
+ useOnFirstRender(() => {
46
+ const nextState = openProp === undefined && store.state.open === false && defaultOpen === true ? {
47
+ open: true,
48
+ activeTriggerId: defaultTriggerIdProp
49
+ } : null;
50
+ if (isAlertDialog) {
51
+ // Handles can reuse plain Dialog stores; alert dialog invariants must exist immediately.
52
+ store.update(nextState ? {
53
+ ...rootState,
54
+ ...nextState
55
+ } : rootState);
56
+ } else if (nextState) {
57
+ store.update(nextState);
58
+ }
59
+ });
60
+ store.useControlledProp('openProp', openProp);
61
+ store.useControlledProp('triggerIdProp', triggerIdProp);
62
+ store.useSyncedValues(rootState);
63
+ store.useContextCallback('onOpenChange', onOpenChange);
64
+ store.useContextCallback('onOpenChangeComplete', onOpenChangeComplete);
65
+ const open = store.useState('open');
66
+ const mounted = store.useState('mounted');
67
+ const payload = store.useState('payload');
68
+ const dialogRoot = useDialogRoot({
69
+ store,
70
+ actionsRef,
71
+ parentContext: parentDialogRootContext?.store.context,
72
+ isDrawer
73
+ });
74
+ const shouldRenderInteractions = open || mounted;
75
+ const contextValue = React.useMemo(() => ({
76
+ store
77
+ }), [store]);
78
+ return /*#__PURE__*/_jsx(IsDrawerContext.Provider, {
79
+ value: false,
80
+ children: /*#__PURE__*/_jsxs(DialogRootContext.Provider, {
81
+ value: contextValue,
82
+ children: [shouldRenderInteractions && /*#__PURE__*/_jsx(DialogInteractions, {
83
+ store: store,
84
+ dialogRoot: dialogRoot
85
+ }), typeof children === 'function' ? children({
86
+ payload
87
+ }) : children]
88
+ })
89
+ });
90
+ }
@@ -11,7 +11,7 @@ export declare class DialogHandle<Payload> {
11
11
  constructor(store?: DialogStore<Payload>);
12
12
  /**
13
13
  * Opens the dialog and associates it with the trigger with the given id.
14
- * The trigger, if provided, must be a Dialog.Trigger component with this handle passed as a prop.
14
+ * The trigger, if provided, must be a matching Trigger component with this handle passed as a prop.
15
15
  *
16
16
  * This method should only be called in an event handler or an effect (not during rendering).
17
17
  *
@@ -17,7 +17,7 @@ export class DialogHandle {
17
17
 
18
18
  /**
19
19
  * Opens the dialog and associates it with the trigger with the given id.
20
- * The trigger, if provided, must be a Dialog.Trigger component with this handle passed as a prop.
20
+ * The trigger, if provided, must be a matching Trigger component with this handle passed as a prop.
21
21
  *
22
22
  * This method should only be called in an event handler or an effect (not during rendering).
23
23
  *
@@ -55,7 +55,7 @@ export class DialogHandle {
55
55
  * Indicates whether the dialog is currently open.
56
56
  */
57
57
  get isOpen() {
58
- return this.store.state.open;
58
+ return this.store.select('open');
59
59
  }
60
60
  }
61
61
 
@@ -40,6 +40,8 @@ declare const selectors: {
40
40
  mounted: boolean;
41
41
  transitionStatus: import("../../internals/useTransitionStatus.js").TransitionStatus;
42
42
  floatingRootContext: import("../../floating-ui-react/index.js").FloatingRootContext;
43
+ floatingId: string | undefined;
44
+ triggerCount: number;
43
45
  preventUnmountingOnClose: boolean;
44
46
  payload: unknown;
45
47
  activeTriggerId: string | null;
@@ -57,6 +59,8 @@ declare const selectors: {
57
59
  mounted: boolean;
58
60
  transitionStatus: import("../../internals/useTransitionStatus.js").TransitionStatus;
59
61
  floatingRootContext: import("../../floating-ui-react/index.js").FloatingRootContext;
62
+ floatingId: string | undefined;
63
+ triggerCount: number;
60
64
  preventUnmountingOnClose: boolean;
61
65
  payload: unknown;
62
66
  activeTriggerId: string | null;
@@ -74,6 +78,8 @@ declare const selectors: {
74
78
  mounted: boolean;
75
79
  transitionStatus: import("../../internals/useTransitionStatus.js").TransitionStatus;
76
80
  floatingRootContext: import("../../floating-ui-react/index.js").FloatingRootContext;
81
+ floatingId: string | undefined;
82
+ triggerCount: number;
77
83
  preventUnmountingOnClose: boolean;
78
84
  payload: unknown;
79
85
  activeTriggerId: string | null;
@@ -91,6 +97,8 @@ declare const selectors: {
91
97
  mounted: boolean;
92
98
  transitionStatus: import("../../internals/useTransitionStatus.js").TransitionStatus;
93
99
  floatingRootContext: import("../../floating-ui-react/index.js").FloatingRootContext;
100
+ floatingId: string | undefined;
101
+ triggerCount: number;
94
102
  preventUnmountingOnClose: boolean;
95
103
  payload: unknown;
96
104
  activeTriggerId: string | null;
@@ -102,12 +110,33 @@ declare const selectors: {
102
110
  inactiveTriggerProps: import("../../index.js").HTMLProps;
103
111
  popupProps: import("../../index.js").HTMLProps;
104
112
  }) => import("../../floating-ui-react/components/FloatingRootStore.js").FloatingRootStore;
113
+ triggerCount: (state: {
114
+ open: boolean;
115
+ readonly openProp: boolean | undefined;
116
+ mounted: boolean;
117
+ transitionStatus: import("../../internals/useTransitionStatus.js").TransitionStatus;
118
+ floatingRootContext: import("../../floating-ui-react/index.js").FloatingRootContext;
119
+ floatingId: string | undefined;
120
+ triggerCount: number;
121
+ preventUnmountingOnClose: boolean;
122
+ payload: unknown;
123
+ activeTriggerId: string | null;
124
+ activeTriggerElement: Element | null;
125
+ readonly triggerIdProp: string | null | undefined;
126
+ popupElement: HTMLElement | null;
127
+ positionerElement: HTMLElement | null;
128
+ activeTriggerProps: import("../../index.js").HTMLProps;
129
+ inactiveTriggerProps: import("../../index.js").HTMLProps;
130
+ popupProps: import("../../index.js").HTMLProps;
131
+ }) => number;
105
132
  preventUnmountingOnClose: (state: {
106
133
  open: boolean;
107
134
  readonly openProp: boolean | undefined;
108
135
  mounted: boolean;
109
136
  transitionStatus: import("../../internals/useTransitionStatus.js").TransitionStatus;
110
137
  floatingRootContext: import("../../floating-ui-react/index.js").FloatingRootContext;
138
+ floatingId: string | undefined;
139
+ triggerCount: number;
111
140
  preventUnmountingOnClose: boolean;
112
141
  payload: unknown;
113
142
  activeTriggerId: string | null;
@@ -125,6 +154,8 @@ declare const selectors: {
125
154
  mounted: boolean;
126
155
  transitionStatus: import("../../internals/useTransitionStatus.js").TransitionStatus;
127
156
  floatingRootContext: import("../../floating-ui-react/index.js").FloatingRootContext;
157
+ floatingId: string | undefined;
158
+ triggerCount: number;
128
159
  preventUnmountingOnClose: boolean;
129
160
  payload: unknown;
130
161
  activeTriggerId: string | null;
@@ -142,6 +173,8 @@ declare const selectors: {
142
173
  mounted: boolean;
143
174
  transitionStatus: import("../../internals/useTransitionStatus.js").TransitionStatus;
144
175
  floatingRootContext: import("../../floating-ui-react/index.js").FloatingRootContext;
176
+ floatingId: string | undefined;
177
+ triggerCount: number;
145
178
  preventUnmountingOnClose: boolean;
146
179
  payload: unknown;
147
180
  activeTriggerId: string | null;
@@ -159,6 +192,8 @@ declare const selectors: {
159
192
  mounted: boolean;
160
193
  transitionStatus: import("../../internals/useTransitionStatus.js").TransitionStatus;
161
194
  floatingRootContext: import("../../floating-ui-react/index.js").FloatingRootContext;
195
+ floatingId: string | undefined;
196
+ triggerCount: number;
162
197
  preventUnmountingOnClose: boolean;
163
198
  payload: unknown;
164
199
  activeTriggerId: string | null;
@@ -170,12 +205,33 @@ declare const selectors: {
170
205
  inactiveTriggerProps: import("../../index.js").HTMLProps;
171
206
  popupProps: import("../../index.js").HTMLProps;
172
207
  }) => Element | null;
208
+ popupId: (state: {
209
+ open: boolean;
210
+ readonly openProp: boolean | undefined;
211
+ mounted: boolean;
212
+ transitionStatus: import("../../internals/useTransitionStatus.js").TransitionStatus;
213
+ floatingRootContext: import("../../floating-ui-react/index.js").FloatingRootContext;
214
+ floatingId: string | undefined;
215
+ triggerCount: number;
216
+ preventUnmountingOnClose: boolean;
217
+ payload: unknown;
218
+ activeTriggerId: string | null;
219
+ activeTriggerElement: Element | null;
220
+ readonly triggerIdProp: string | null | undefined;
221
+ popupElement: HTMLElement | null;
222
+ positionerElement: HTMLElement | null;
223
+ activeTriggerProps: import("../../index.js").HTMLProps;
224
+ inactiveTriggerProps: import("../../index.js").HTMLProps;
225
+ popupProps: import("../../index.js").HTMLProps;
226
+ }) => string | undefined;
173
227
  isTriggerActive: (state: {
174
228
  open: boolean;
175
229
  readonly openProp: boolean | undefined;
176
230
  mounted: boolean;
177
231
  transitionStatus: import("../../internals/useTransitionStatus.js").TransitionStatus;
178
232
  floatingRootContext: import("../../floating-ui-react/index.js").FloatingRootContext;
233
+ floatingId: string | undefined;
234
+ triggerCount: number;
179
235
  preventUnmountingOnClose: boolean;
180
236
  payload: unknown;
181
237
  activeTriggerId: string | null;
@@ -193,6 +249,8 @@ declare const selectors: {
193
249
  mounted: boolean;
194
250
  transitionStatus: import("../../internals/useTransitionStatus.js").TransitionStatus;
195
251
  floatingRootContext: import("../../floating-ui-react/index.js").FloatingRootContext;
252
+ floatingId: string | undefined;
253
+ triggerCount: number;
196
254
  preventUnmountingOnClose: boolean;
197
255
  payload: unknown;
198
256
  activeTriggerId: string | null;
@@ -210,6 +268,8 @@ declare const selectors: {
210
268
  mounted: boolean;
211
269
  transitionStatus: import("../../internals/useTransitionStatus.js").TransitionStatus;
212
270
  floatingRootContext: import("../../floating-ui-react/index.js").FloatingRootContext;
271
+ floatingId: string | undefined;
272
+ triggerCount: number;
213
273
  preventUnmountingOnClose: boolean;
214
274
  payload: unknown;
215
275
  activeTriggerId: string | null;
@@ -227,6 +287,8 @@ declare const selectors: {
227
287
  mounted: boolean;
228
288
  transitionStatus: import("../../internals/useTransitionStatus.js").TransitionStatus;
229
289
  floatingRootContext: import("../../floating-ui-react/index.js").FloatingRootContext;
290
+ floatingId: string | undefined;
291
+ triggerCount: number;
230
292
  preventUnmountingOnClose: boolean;
231
293
  payload: unknown;
232
294
  activeTriggerId: string | null;
@@ -238,12 +300,33 @@ declare const selectors: {
238
300
  inactiveTriggerProps: import("../../index.js").HTMLProps;
239
301
  popupProps: import("../../index.js").HTMLProps;
240
302
  }, isActive: boolean) => import("../../index.js").HTMLProps;
303
+ triggerPopupId: (state: {
304
+ open: boolean;
305
+ readonly openProp: boolean | undefined;
306
+ mounted: boolean;
307
+ transitionStatus: import("../../internals/useTransitionStatus.js").TransitionStatus;
308
+ floatingRootContext: import("../../floating-ui-react/index.js").FloatingRootContext;
309
+ floatingId: string | undefined;
310
+ triggerCount: number;
311
+ preventUnmountingOnClose: boolean;
312
+ payload: unknown;
313
+ activeTriggerId: string | null;
314
+ activeTriggerElement: Element | null;
315
+ readonly triggerIdProp: string | null | undefined;
316
+ popupElement: HTMLElement | null;
317
+ positionerElement: HTMLElement | null;
318
+ activeTriggerProps: import("../../index.js").HTMLProps;
319
+ inactiveTriggerProps: import("../../index.js").HTMLProps;
320
+ popupProps: import("../../index.js").HTMLProps;
321
+ }, triggerId: string | undefined) => string | undefined;
241
322
  popupProps: (state: {
242
323
  open: boolean;
243
324
  readonly openProp: boolean | undefined;
244
325
  mounted: boolean;
245
326
  transitionStatus: import("../../internals/useTransitionStatus.js").TransitionStatus;
246
327
  floatingRootContext: import("../../floating-ui-react/index.js").FloatingRootContext;
328
+ floatingId: string | undefined;
329
+ triggerCount: number;
247
330
  preventUnmountingOnClose: boolean;
248
331
  payload: unknown;
249
332
  activeTriggerId: string | null;
@@ -261,6 +344,8 @@ declare const selectors: {
261
344
  mounted: boolean;
262
345
  transitionStatus: import("../../internals/useTransitionStatus.js").TransitionStatus;
263
346
  floatingRootContext: import("../../floating-ui-react/index.js").FloatingRootContext;
347
+ floatingId: string | undefined;
348
+ triggerCount: number;
264
349
  preventUnmountingOnClose: boolean;
265
350
  payload: unknown;
266
351
  activeTriggerId: string | null;
@@ -278,6 +363,8 @@ declare const selectors: {
278
363
  mounted: boolean;
279
364
  transitionStatus: import("../../internals/useTransitionStatus.js").TransitionStatus;
280
365
  floatingRootContext: import("../../floating-ui-react/index.js").FloatingRootContext;
366
+ floatingId: string | undefined;
367
+ triggerCount: number;
281
368
  preventUnmountingOnClose: boolean;
282
369
  payload: unknown;
283
370
  activeTriggerId: string | null;
@@ -291,7 +378,7 @@ declare const selectors: {
291
378
  }) => HTMLElement | null;
292
379
  };
293
380
  export declare class DialogStore<Payload> extends ReactStore<Readonly<State<Payload>>, Context, typeof selectors> {
294
- constructor(initialState?: Partial<State<Payload>>);
381
+ constructor(initialState?: Partial<State<Payload>>, floatingId?: string | undefined, nested?: boolean);
295
382
  setOpen: (nextOpen: boolean, eventDetails: Omit<DialogRoot.ChangeEventDetails, "preventUnmountOnClose">) => void;
296
383
  static useStore<Payload>(externalStore: DialogStore<Payload> | undefined, initialState?: Partial<State<Payload>>): DialogStore<Payload>;
297
384
  }
@@ -1,7 +1,6 @@
1
1
  import * as React from 'react';
2
2
  import { createSelector, ReactStore } from '@base-ui/utils/store';
3
- import { useRefWithInit } from '@base-ui/utils/useRefWithInit';
4
- import { createInitialPopupStoreState, popupStoreSelectors, PopupTriggerMap } from "../../utils/popups/index.js";
3
+ import { createPopupFloatingRootContext, createInitialPopupStoreState, popupStoreSelectors, PopupTriggerMap, setOpenTriggerState, usePopupStore } from "../../utils/popups/index.js";
5
4
  const selectors = {
6
5
  ...popupStoreSelectors,
7
6
  modal: createSelector(state => state.modal),
@@ -16,15 +15,18 @@ const selectors = {
16
15
  role: createSelector(state => state.role)
17
16
  };
18
17
  export class DialogStore extends ReactStore {
19
- constructor(initialState) {
20
- super(createInitialState(initialState), {
18
+ constructor(initialState, floatingId, nested = false) {
19
+ const triggerElements = new PopupTriggerMap();
20
+ const state = createInitialState(initialState);
21
+ state.floatingRootContext = createPopupFloatingRootContext(triggerElements, floatingId, nested);
22
+ super(state, {
21
23
  popupRef: /*#__PURE__*/React.createRef(),
22
24
  backdropRef: /*#__PURE__*/React.createRef(),
23
25
  internalBackdropRef: /*#__PURE__*/React.createRef(),
24
26
  outsidePressEnabledRef: {
25
27
  current: true
26
28
  },
27
- triggerElements: new PopupTriggerMap(),
29
+ triggerElements,
28
30
  onOpenChange: undefined,
29
31
  onOpenChangeComplete: undefined
30
32
  }, selectors);
@@ -46,22 +48,15 @@ export class DialogStore extends ReactStore {
46
48
  const updatedState = {
47
49
  open: nextOpen
48
50
  };
49
-
50
- // If a popup is closing, the `trigger` may be null.
51
- // We want to keep the previous value so that exit animations are played and focus is returned correctly.
52
- const newTriggerId = eventDetails.trigger?.id ?? null;
53
- if (newTriggerId || nextOpen) {
54
- updatedState.activeTriggerId = newTriggerId;
55
- updatedState.activeTriggerElement = eventDetails.trigger ?? null;
56
- }
51
+ setOpenTriggerState(updatedState, nextOpen, eventDetails.trigger);
57
52
  this.update(updatedState);
58
53
  };
59
54
  static useStore(externalStore, initialState) {
60
- // eslint-disable-next-line react-hooks/rules-of-hooks
61
- const internalStore = useRefWithInit(() => {
62
- return new DialogStore(initialState);
63
- }).current;
64
- return externalStore ?? internalStore;
55
+ /* eslint-disable react-hooks/rules-of-hooks */
56
+ const store = usePopupStore(externalStore, (floatingId, nested) => new DialogStore(initialState, floatingId, nested), true).store;
57
+ /* eslint-enable react-hooks/rules-of-hooks */
58
+
59
+ return store;
65
60
  }
66
61
  }
67
62
  function createInitialState(initialState = {}) {
@@ -23,7 +23,7 @@ export interface DialogTriggerProps<Payload = unknown> extends NativeButtonProps
23
23
  payload?: Payload | undefined;
24
24
  /**
25
25
  * ID of the trigger. In addition to being forwarded to the rendered element,
26
- * it is also used to specify the active trigger for the dialogs in controlled mode (with the DialogRoot `triggerId` prop).
26
+ * it is also used to specify the active trigger for the dialog in controlled mode (with the DialogRoot `triggerId` prop).
27
27
  */
28
28
  id?: string | undefined;
29
29
  }
@@ -9,7 +9,8 @@ import { triggerOpenStateMapping } from "../../utils/popupStateMapping.js";
9
9
  import { CLICK_TRIGGER_IDENTIFIER } from "../../internals/constants.js";
10
10
  import { useTriggerDataForwarding } from "../../utils/popups/index.js";
11
11
  import { useBaseUiId } from "../../internals/useBaseUiId.js";
12
- import { useClick, useInteractions } from "../../floating-ui-react/index.js";
12
+ import { useClick } from "../../floating-ui-react/index.js";
13
+ import { useOpenMethodTriggerProps } from "../../utils/useOpenInteractionType.js";
13
14
 
14
15
  /**
15
16
  * A button that opens the dialog.
@@ -21,12 +22,12 @@ export const DialogTrigger = /*#__PURE__*/React.forwardRef(function DialogTrigge
21
22
  const {
22
23
  render,
23
24
  className,
25
+ style,
24
26
  disabled = false,
25
27
  nativeButton = true,
26
28
  id: idProp,
27
29
  payload,
28
30
  handle,
29
- style,
30
31
  ...elementProps
31
32
  } = componentProps;
32
33
  const dialogRootContext = useDialogRootContext(true);
@@ -37,6 +38,7 @@ export const DialogTrigger = /*#__PURE__*/React.forwardRef(function DialogTrigge
37
38
  const thisTriggerId = useBaseUiId(idProp);
38
39
  const floatingContext = store.useState('floatingRootContext');
39
40
  const isOpenedByThisTrigger = store.useState('isOpenedByTrigger', thisTriggerId);
41
+ const popupId = store.useState('triggerPopupId', thisTriggerId);
40
42
  const triggerElementRef = React.useRef(null);
41
43
  const {
42
44
  registerTrigger,
@@ -54,7 +56,9 @@ export const DialogTrigger = /*#__PURE__*/React.forwardRef(function DialogTrigge
54
56
  const click = useClick(floatingContext, {
55
57
  enabled: floatingContext != null
56
58
  });
57
- const localInteractionProps = useInteractions([click]);
59
+ const interactionTypeProps = useOpenMethodTriggerProps(() => store.select('open'), interactionType => {
60
+ store.set('openMethod', interactionType);
61
+ });
58
62
  const state = {
59
63
  disabled,
60
64
  open: isOpenedByThisTrigger
@@ -63,9 +67,12 @@ export const DialogTrigger = /*#__PURE__*/React.forwardRef(function DialogTrigge
63
67
  return useRenderElement('button', componentProps, {
64
68
  state,
65
69
  ref: [buttonRef, forwardedRef, registerTrigger, triggerElementRef],
66
- props: [localInteractionProps.getReferenceProps(), rootTriggerProps, {
70
+ props: [click.reference, rootTriggerProps, interactionTypeProps, {
67
71
  [CLICK_TRIGGER_IDENTIFIER]: '',
68
- id: thisTriggerId
72
+ id: thisTriggerId,
73
+ 'aria-haspopup': 'dialog',
74
+ 'aria-expanded': isOpenedByThisTrigger,
75
+ 'aria-controls': popupId
69
76
  }, elementProps, getButtonProps],
70
77
  stateAttributesMapping: triggerOpenStateMapping
71
78
  });
@@ -30,10 +30,10 @@ const stateAttributesMapping = {
30
30
  */
31
31
  export const DialogViewport = /*#__PURE__*/React.forwardRef(function DialogViewport(componentProps, forwardedRef) {
32
32
  const {
33
- className,
34
33
  render,
35
- children,
34
+ className,
36
35
  style,
36
+ children,
37
37
  ...elementProps
38
38
  } = componentProps;
39
39
  const keepMounted = useDialogPortalContext();
@@ -45,6 +45,7 @@ export const DialogViewport = /*#__PURE__*/React.forwardRef(function DialogViewp
45
45
  const transitionStatus = store.useState('transitionStatus');
46
46
  const nestedOpenDialogCount = store.useState('nestedOpenDialogCount');
47
47
  const mounted = store.useState('mounted');
48
+ const setViewportElement = store.useStateSetter('viewportElement');
48
49
  const nestedDialogOpen = nestedOpenDialogCount > 0;
49
50
  const state = {
50
51
  open,
@@ -56,7 +57,7 @@ export const DialogViewport = /*#__PURE__*/React.forwardRef(function DialogViewp
56
57
  return useRenderElement('div', componentProps, {
57
58
  enabled: shouldRender,
58
59
  state,
59
- ref: [forwardedRef, store.useStateSetter('viewportElement')],
60
+ ref: [forwardedRef, setViewportElement],
60
61
  stateAttributesMapping,
61
62
  props: [{
62
63
  role: 'presentation',
@@ -20,6 +20,8 @@ import { COMPOSITE_KEYS } from "../../internals/composite/composite.js";
20
20
  import { useDrawerRootContext } from "../root/DrawerRootContext.js";
21
21
  import { useDrawerSnapPoints } from "../root/useDrawerSnapPoints.js";
22
22
  import { useDrawerViewportContext } from "../viewport/DrawerViewportContext.js";
23
+ import { FOCUSABLE_POPUP_PROPS } from "../../utils/popups/index.js";
24
+
23
25
  // Module-level flag to ensure we only register the CSS properties once,
24
26
  // regardless of how many Drawer components are mounted.
25
27
  import { jsx as _jsx } from "react/jsx-runtime";
@@ -28,7 +30,6 @@ let drawerSwipeVarsRegistered = false;
28
30
  /**
29
31
  * Removes inheritance of high-frequency drawer swipe CSS variables, which
30
32
  * reduces style recalculation cost in complex drawers with deep subtrees.
31
- * Child elements that need these values can still opt-in by using `inherit`.
32
33
  * See https://motion.dev/blog/web-animation-performance-tier-list
33
34
  * under the "Improving CSS variable performance" section.
34
35
  */
@@ -116,11 +117,11 @@ const stateAttributesMapping = {
116
117
  */
117
118
  export const DrawerPopup = /*#__PURE__*/React.forwardRef(function DrawerPopup(componentProps, forwardedRef) {
118
119
  const {
120
+ render,
119
121
  className,
122
+ style,
120
123
  finalFocus,
121
124
  initialFocus,
122
- render,
123
- style,
124
125
  ...elementProps
125
126
  } = componentProps;
126
127
  const {
@@ -149,16 +150,18 @@ export const DrawerPopup = /*#__PURE__*/React.forwardRef(function DrawerPopup(co
149
150
  const openMethod = store.useState('openMethod');
150
151
  const titleElementId = store.useState('titleElementId');
151
152
  const role = store.useState('role');
152
- const nestedDrawerOpen = nestedOpenDrawerCount > 0;
153
+ const floatingId = floatingRootContext.useState('floatingId');
154
+ const popupId = elementProps.id ?? floatingId;
153
155
  const swipe = useDrawerViewportContext(true);
154
- const swiping = swipe?.swiping ?? false;
155
- const swipeStrength = swipe?.swipeStrength ?? null;
156
+ useDialogPortalContext();
156
157
  const {
157
158
  snapPoints,
158
159
  activeSnapPoint,
159
160
  activeSnapPointOffset
160
161
  } = useDrawerSnapPoints();
161
- useDialogPortalContext();
162
+ const nestedDrawerOpen = nestedOpenDrawerCount > 0;
163
+ const swiping = swipe?.swiping ?? false;
164
+ const swipeStrength = swipe?.swipeStrength ?? null;
162
165
  const [popupHeight, setPopupHeight] = React.useState(0);
163
166
  const popupHeightRef = React.useRef(0);
164
167
  if (process.env.NODE_ENV !== 'production') {
@@ -273,6 +276,7 @@ export const DrawerPopup = /*#__PURE__*/React.forwardRef(function DrawerPopup(co
273
276
  }
274
277
  });
275
278
  const resolvedInitialFocus = initialFocus === undefined ? store.context.popupRef : initialFocus;
279
+ const setPopupElement = store.useStateSetter('popupElement');
276
280
  const state = {
277
281
  open,
278
282
  nested,
@@ -318,10 +322,11 @@ export const DrawerPopup = /*#__PURE__*/React.forwardRef(function DrawerPopup(co
318
322
  const element = useRenderElement('div', componentProps, {
319
323
  state,
320
324
  props: [rootPopupProps, {
325
+ id: popupId,
321
326
  'aria-labelledby': titleElementId,
322
327
  'aria-describedby': descriptionElementId,
323
328
  role,
324
- tabIndex: -1,
329
+ ...FOCUSABLE_POPUP_PROPS,
325
330
  hidden: !mounted,
326
331
  onKeyDown(event) {
327
332
  if (COMPOSITE_KEYS.has(event.key)) {
@@ -338,7 +343,7 @@ export const DrawerPopup = /*#__PURE__*/React.forwardRef(function DrawerPopup(co
338
343
  [DrawerPopupCssVars.swipeStrength]: typeof swipeStrength === 'number' && Number.isFinite(swipeStrength) && swipeStrength > 0 ? `${swipeStrength}` : '1'
339
344
  }
340
345
  }, elementProps],
341
- ref: [forwardedRef, store.context.popupRef, store.useStateSetter('popupElement')],
346
+ ref: [forwardedRef, store.context.popupRef, setPopupElement],
342
347
  stateAttributesMapping
343
348
  });
344
349
  return /*#__PURE__*/_jsx(FloatingFocusManager, {
@@ -10,10 +10,9 @@ import { isAndroid } from '@base-ui/utils/detectBrowser';
10
10
  import { useId } from '@base-ui/utils/useId';
11
11
  import { DrawerRootContext, useDrawerRootContext } from "./DrawerRootContext.js";
12
12
  import { Dialog } from "../../dialog/index.js";
13
- import { IsDrawerContext } from "../../dialog/root/DialogRoot.js";
14
13
  import { createChangeEventDetails } from "../../internals/createBaseUIEventDetails.js";
15
14
  import { REASONS } from "../../internals/reasons.js";
16
- import { useDialogRootContext } from "../../dialog/root/DialogRootContext.js";
15
+ import { IsDrawerContext, useDialogRootContext } from "../../dialog/root/DialogRootContext.js";
17
16
  import { useDrawerProviderContext } from "../provider/DrawerProviderContext.js";
18
17
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
19
18
  /**
@@ -40,9 +39,8 @@ export function DrawerRoot(props) {
40
39
  snapPoints,
41
40
  snapPoint: snapPointProp,
42
41
  defaultSnapPoint,
43
- onSnapPointChange: onSnapPointChangeProp
42
+ onSnapPointChange
44
43
  } = props;
45
- const onSnapPointChange = useStableCallback(onSnapPointChangeProp);
46
44
  const parentDrawerRootContext = useDrawerRootContext(true);
47
45
  const notifyParentSwipeProgressChange = parentDrawerRootContext?.onNestedSwipeProgressChange;
48
46
  const notifyParentFrontmostHeight = parentDrawerRootContext?.onNestedFrontmostHeightChange;
@@ -191,10 +189,12 @@ function createNestedSwipeProgressStore() {
191
189
  function DrawerProviderReporter() {
192
190
  const drawerId = useId();
193
191
  const providerContext = useDrawerProviderContext(true);
194
- const dialogRootContext = useDialogRootContext(false);
195
- const open = dialogRootContext.store.useState('open');
196
- const nestedOpenDialogCount = dialogRootContext.store.useState('nestedOpenDialogCount');
197
- const popupElement = dialogRootContext.store.useState('popupElement');
192
+ const {
193
+ store
194
+ } = useDialogRootContext(false);
195
+ const open = store.useState('open');
196
+ const nestedOpenDialogCount = store.useState('nestedOpenDialogCount');
197
+ const popupElement = store.useState('popupElement');
198
198
  const isTopmost = nestedOpenDialogCount === 0;
199
199
  React.useEffect(() => {
200
200
  if (!providerContext || drawerId == null) {
@@ -222,10 +222,10 @@ function DrawerProviderReporter() {
222
222
  return undefined;
223
223
  }
224
224
  function handleCloseWatcher(event) {
225
- if (!dialogRootContext.store.select('open')) {
225
+ if (!store.select('open')) {
226
226
  return;
227
227
  }
228
- dialogRootContext.store.setOpen(false, createChangeEventDetails(REASONS.closeWatcher, event));
228
+ store.setOpen(false, createChangeEventDetails(REASONS.closeWatcher, event));
229
229
  }
230
230
  const closeWatcher = new CloseWatcherCtor();
231
231
  const unsubscribe = addEventListener(closeWatcher, 'close', handleCloseWatcher);
@@ -233,6 +233,6 @@ function DrawerProviderReporter() {
233
233
  unsubscribe();
234
234
  closeWatcher.destroy();
235
235
  };
236
- }, [dialogRootContext.store, isTopmost, open, popupElement]);
236
+ }, [store, isTopmost, open, popupElement]);
237
237
  return null;
238
238
  }
@@ -10,7 +10,7 @@ export interface DrawerNestedSwipeProgressStore {
10
10
  export interface DrawerRootContext {
11
11
  swipeDirection: DrawerSwipeDirection;
12
12
  /**
13
- * Whether snap points can be skipped based on swipe velocity.
13
+ * Whether to disable velocity-based snap skipping.
14
14
  */
15
15
  snapToSequentialPoints: boolean;
16
16
  /**