@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
@@ -5,15 +5,51 @@ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWild
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
+ exports.FOCUSABLE_POPUP_PROPS = void 0;
9
+ exports.setOpenTriggerState = setOpenTriggerState;
8
10
  exports.useImplicitActiveTrigger = useImplicitActiveTrigger;
9
11
  exports.useOpenStateTransitions = useOpenStateTransitions;
12
+ exports.usePopupInteractionProps = usePopupInteractionProps;
13
+ exports.usePopupRootSync = usePopupRootSync;
14
+ exports.usePopupStore = usePopupStore;
10
15
  exports.useTriggerDataForwarding = useTriggerDataForwarding;
11
16
  exports.useTriggerRegistration = useTriggerRegistration;
12
17
  var React = _interopRequireWildcard(require("react"));
18
+ var _empty = require("@base-ui/utils/empty");
19
+ var _useId = require("@base-ui/utils/useId");
13
20
  var _useStableCallback = require("@base-ui/utils/useStableCallback");
14
21
  var _useIsoLayoutEffect = require("@base-ui/utils/useIsoLayoutEffect");
22
+ var _constants = require("../../floating-ui-react/utils/constants");
23
+ var _FloatingTree = require("../../floating-ui-react/components/FloatingTree");
24
+ var _useSyncedFloatingRootContext = require("../../floating-ui-react/hooks/useSyncedFloatingRootContext");
15
25
  var _useTransitionStatus = require("../../internals/useTransitionStatus");
16
26
  var _useOpenChangeComplete = require("../../internals/useOpenChangeComplete");
27
+ const FOCUSABLE_POPUP_PROPS = exports.FOCUSABLE_POPUP_PROPS = {
28
+ tabIndex: -1,
29
+ [_constants.FOCUSABLE_ATTRIBUTE]: ''
30
+ };
31
+ function usePopupStore(externalStore, createStore, treatPopupAsFloatingElement = false) {
32
+ const floatingId = (0, _useId.useId)();
33
+ const nested = (0, _FloatingTree.useFloatingParentNodeId)() != null;
34
+ const internalStoreRef = React.useRef(null);
35
+ if (externalStore === undefined && internalStoreRef.current === null) {
36
+ internalStoreRef.current = createStore(floatingId, nested);
37
+ }
38
+ const store = externalStore ?? internalStoreRef.current;
39
+ (0, _useSyncedFloatingRootContext.useSyncedFloatingRootContext)({
40
+ popupStore: store,
41
+ treatPopupAsFloatingElement,
42
+ floatingRootContext: store.state.floatingRootContext,
43
+ floatingId,
44
+ nested,
45
+ onOpenChange: store.setOpen
46
+ });
47
+ return {
48
+ store,
49
+ internalStore: internalStoreRef.current
50
+ };
51
+ }
52
+
17
53
  /**
18
54
  * Returns a callback ref that registers/unregisters the trigger element in the store.
19
55
  *
@@ -27,12 +63,14 @@ function useTriggerRegistration(id, store) {
27
63
  if (id === undefined) {
28
64
  return;
29
65
  }
66
+ let shouldSyncTriggerCount = false;
30
67
  if (registeredElementIdRef.current !== null) {
31
68
  const registeredId = registeredElementIdRef.current;
32
69
  const registeredElement = registeredElementRef.current;
33
70
  const currentElement = store.context.triggerElements.getById(registeredId);
34
71
  if (registeredElement && currentElement === registeredElement) {
35
72
  store.context.triggerElements.delete(registeredId);
73
+ shouldSyncTriggerCount = true;
36
74
  }
37
75
  registeredElementIdRef.current = null;
38
76
  registeredElementRef.current = null;
@@ -41,15 +79,32 @@ function useTriggerRegistration(id, store) {
41
79
  registeredElementIdRef.current = id;
42
80
  registeredElementRef.current = element;
43
81
  store.context.triggerElements.add(id, element);
82
+ shouldSyncTriggerCount = true;
83
+ }
84
+ if (shouldSyncTriggerCount) {
85
+ const triggerCount = store.context.triggerElements.size;
86
+ if (store.select('open') && store.state.triggerCount !== triggerCount) {
87
+ store.set('triggerCount', triggerCount);
88
+ }
44
89
  }
45
90
  }, [store, id]);
46
91
  }
92
+ function setOpenTriggerState(state, open, trigger) {
93
+ const triggerId = trigger?.id ?? null;
94
+
95
+ // If a popup is closing, the `trigger` may be undefined.
96
+ // We want to keep the previous value so that exit animations are played and focus is returned correctly.
97
+ if (triggerId || open) {
98
+ state.activeTriggerId = triggerId;
99
+ state.activeTriggerElement = trigger ?? null;
100
+ }
101
+ }
47
102
 
48
103
  /**
49
104
  * Sets up trigger data forwarding to the store.
50
105
  *
51
106
  * @param triggerId Id of the trigger.
52
- * @param triggerElement The trigger DOM element.
107
+ * @param triggerElementRef Ref for the trigger DOM element.
53
108
  * @param store The Store instance managing the popup state.
54
109
  * @param stateUpdates An object with state updates to apply when the trigger is active.
55
110
  */
@@ -58,22 +113,22 @@ function useTriggerDataForwarding(triggerId, triggerElementRef, store, stateUpda
58
113
  const baseRegisterTrigger = useTriggerRegistration(triggerId, store);
59
114
  const registerTrigger = (0, _useStableCallback.useStableCallback)(element => {
60
115
  baseRegisterTrigger(element);
61
- if (!element || !store.select('open')) {
116
+ if (!element) {
62
117
  return;
63
118
  }
119
+ const open = store.select('open');
64
120
  const activeTriggerId = store.select('activeTriggerId');
65
121
  if (activeTriggerId === triggerId) {
66
122
  store.update({
67
123
  activeTriggerElement: element,
68
- ...stateUpdates
124
+ ...(open ? stateUpdates : null)
69
125
  });
70
126
  return;
71
127
  }
72
- if (activeTriggerId == null) {
73
- // This runs when popup is open, but no active trigger is set.
74
- // It can happen when using controlled mode and the trigger is mounted after opening or if `triggerId` prop is not set explicitly.
75
- // In such cases the first trigger to run this code becomes the active trigger (store.select('activeTriggerId') should not return null after that).
76
- // This is mostly for compatibility with contained triggers where no explicit `triggerId` was required in controlled mode.
128
+ if (activeTriggerId == null && open) {
129
+ // If a popup is already open, a detached trigger can mount before any active trigger
130
+ // has been established. Claim the first registered trigger so trigger-owned focus
131
+ // management and ARIA relationships work.
77
132
  store.update({
78
133
  activeTriggerId: triggerId,
79
134
  activeTriggerElement: element,
@@ -97,32 +152,44 @@ function useTriggerDataForwarding(triggerId, triggerElementRef, store, stateUpda
97
152
  }
98
153
  /**
99
154
  * Ensures that when there's only one trigger element registered, it is set as the active trigger.
100
- * This allows controlled popups to work correctly without an explicit triggerId, maintaining compatibility
101
- * with the contained triggers.
155
+ * This keeps triggerCount reactive while open and allows controlled popups to work correctly without
156
+ * an explicit triggerId, maintaining compatibility with contained triggers.
102
157
  *
103
158
  * This should be called on the Root part.
104
159
  *
105
- * @param open Whether the popup is open.
106
160
  * @param store The Store instance managing the popup state.
107
161
  */
108
162
  function useImplicitActiveTrigger(store) {
109
163
  const open = store.useState('open');
164
+ const reactiveTriggerCount = store.useState('triggerCount');
110
165
  (0, _useIsoLayoutEffect.useIsoLayoutEffect)(() => {
111
- if (open && !store.select('activeTriggerId') && store.context.triggerElements.size === 1) {
166
+ if (!open) {
167
+ if (store.state.triggerCount !== 0) {
168
+ store.set('triggerCount', 0);
169
+ }
170
+ return;
171
+ }
172
+ const triggerCount = store.context.triggerElements.size;
173
+ const stateUpdates = {};
174
+ if (store.state.triggerCount !== triggerCount) {
175
+ stateUpdates.triggerCount = triggerCount;
176
+ }
177
+ if (!store.select('activeTriggerId') && triggerCount === 1) {
112
178
  const iteratorResult = store.context.triggerElements.entries().next();
113
179
  if (!iteratorResult.done) {
114
180
  const [implicitTriggerId, implicitTriggerElement] = iteratorResult.value;
115
- store.update({
116
- activeTriggerId: implicitTriggerId,
117
- activeTriggerElement: implicitTriggerElement
118
- });
181
+ stateUpdates.activeTriggerId = implicitTriggerId;
182
+ stateUpdates.activeTriggerElement = implicitTriggerElement;
119
183
  }
120
184
  }
121
- }, [open, store]);
185
+ if (stateUpdates.triggerCount !== undefined || stateUpdates.activeTriggerId !== undefined) {
186
+ store.update(stateUpdates);
187
+ }
188
+ }, [open, store, reactiveTriggerCount]);
122
189
  }
123
190
 
124
191
  /**
125
- * Mangages the mounted state of the popup.
192
+ * Manages the mounted state of the popup.
126
193
  * Sets up the transition status listeners and handles unmounting when needed.
127
194
  * Updates the `mounted` and `transitionStatus` states in the store.
128
195
  *
@@ -147,14 +214,15 @@ function useOpenStateTransitions(open, store, onUnmount) {
147
214
  store.update({
148
215
  activeTriggerId: null,
149
216
  activeTriggerElement: null,
150
- mounted: false
217
+ mounted: false,
218
+ preventUnmountingOnClose: false
151
219
  });
152
220
  onUnmount?.();
153
221
  store.context.onOpenChangeComplete?.(false);
154
222
  });
155
223
  const preventUnmountingOnClose = store.useState('preventUnmountingOnClose');
156
224
  (0, _useOpenChangeComplete.useOpenChangeComplete)({
157
- enabled: !preventUnmountingOnClose,
225
+ enabled: mounted && !open && !preventUnmountingOnClose,
158
226
  open,
159
227
  ref: store.context.popupRef,
160
228
  onComplete() {
@@ -167,4 +235,26 @@ function useOpenStateTransitions(open, store, onUnmount) {
167
235
  forceUnmount,
168
236
  transitionStatus
169
237
  };
238
+ }
239
+ function usePopupInteractionProps(store, statePart) {
240
+ store.useSyncedValues(statePart);
241
+ (0, _useIsoLayoutEffect.useIsoLayoutEffect)(() => () => {
242
+ store.update({
243
+ activeTriggerProps: _empty.EMPTY_OBJECT,
244
+ inactiveTriggerProps: _empty.EMPTY_OBJECT,
245
+ popupProps: _empty.EMPTY_OBJECT
246
+ });
247
+ }, [store]);
248
+ }
249
+ function usePopupRootSync(store, open) {
250
+ (0, _useIsoLayoutEffect.useIsoLayoutEffect)(() => {
251
+ if (!open && store.state.openMethod !== null) {
252
+ store.set('openMethod', null);
253
+ }
254
+ }, [open, store]);
255
+ (0, _useIsoLayoutEffect.useIsoLayoutEffect)(() => () => {
256
+ if (store.state.openMethod !== null) {
257
+ store.set('openMethod', null);
258
+ }
259
+ }, [store]);
170
260
  }
@@ -33,6 +33,8 @@ class PopupTriggerMap {
33
33
  this.idMap.set(id, element);
34
34
  if (process.env.NODE_ENV !== 'production') {
35
35
  if (this.elementsSet.size !== this.idMap.size) {
36
+ // TODO: fix mui/no-guarded-throw
37
+ // eslint-disable-next-line mui/no-guarded-throw
36
38
  throw new Error('Base UI: A trigger element cannot be registered under multiple IDs in PopupTriggerMap.');
37
39
  }
38
40
  }
@@ -1,4 +1,5 @@
1
1
  import { FloatingRootContext } from "../../floating-ui-react/index.js";
2
+ import { FloatingRootStore } from "../../floating-ui-react/components/FloatingRootStore.js";
2
3
  import { TransitionStatus } from "../../internals/useTransitionStatus.js";
3
4
  import { PopupTriggerMap } from "./popupTriggerMap.js";
4
5
  import { HTMLProps } from "../../internals/types.js";
@@ -24,9 +25,14 @@ export type PopupStoreState<Payload> = {
24
25
  */
25
26
  transitionStatus: TransitionStatus;
26
27
  floatingRootContext: FloatingRootContext;
28
+ floatingId: string | undefined;
29
+ /**
30
+ * Number of trigger elements currently registered for this popup.
31
+ */
32
+ triggerCount: number;
27
33
  /**
28
34
  * Whether to prevent unmounting the popup when closed.
29
- * Useful for interactling with JS animation libraries that control unmounting themselves.
35
+ * Useful for interacting with JS animation libraries that control unmounting themselves.
30
36
  */
31
37
  preventUnmountingOnClose: boolean;
32
38
  /**
@@ -67,6 +73,7 @@ export type PopupStoreState<Payload> = {
67
73
  popupProps: HTMLProps;
68
74
  };
69
75
  export declare function createInitialPopupStoreState<Payload>(): PopupStoreState<Payload>;
76
+ export declare function createPopupFloatingRootContext(triggerElements: PopupTriggerMap, floatingId?: string | undefined, nested?: boolean): FloatingRootStore;
70
77
  export type PopupStoreContext<ChangeEventDetails> = {
71
78
  /**
72
79
  * Map of registered trigger elements.
@@ -90,11 +97,13 @@ export declare const popupStoreSelectors: {
90
97
  open: (state: S) => boolean;
91
98
  mounted: (state: S) => boolean;
92
99
  transitionStatus: (state: S) => TransitionStatus;
93
- floatingRootContext: (state: S) => import("../../floating-ui-react/components/FloatingRootStore.js").FloatingRootStore;
100
+ floatingRootContext: (state: S) => FloatingRootStore;
101
+ triggerCount: (state: S) => number;
94
102
  preventUnmountingOnClose: (state: S) => boolean;
95
103
  payload: (state: S) => unknown;
96
104
  activeTriggerId: (state: S) => string | null;
97
105
  activeTriggerElement: (state: S) => Element | null;
106
+ popupId: (state: S) => string | undefined;
98
107
  /**
99
108
  * Whether the trigger with the given ID was used to open the popup.
100
109
  */
@@ -108,6 +117,10 @@ export declare const popupStoreSelectors: {
108
117
  */
109
118
  isMountedByTrigger: (state: S, triggerId: string | undefined) => boolean;
110
119
  triggerProps: (state: S, isActive: boolean) => HTMLProps;
120
+ /**
121
+ * Popup id for the trigger that currently owns the open popup.
122
+ */
123
+ triggerPopupId: (state: S, triggerId: string | undefined) => string | undefined;
111
124
  popupProps: (state: S) => HTMLProps;
112
125
  popupElement: (state: S) => HTMLElement | null;
113
126
  positionerElement: (state: S) => HTMLElement | null;
@@ -4,9 +4,11 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.createInitialPopupStoreState = createInitialPopupStoreState;
7
+ exports.createPopupFloatingRootContext = createPopupFloatingRootContext;
7
8
  exports.popupStoreSelectors = void 0;
8
9
  var _store = require("@base-ui/utils/store");
9
10
  var _empty = require("@base-ui/utils/empty");
11
+ var _FloatingRootStore = require("../../floating-ui-react/components/FloatingRootStore");
10
12
  var _getEmptyRootContext = require("../../floating-ui-react/utils/getEmptyRootContext");
11
13
  /**
12
14
  * State common to all popup stores.
@@ -19,6 +21,8 @@ function createInitialPopupStoreState() {
19
21
  mounted: false,
20
22
  transitionStatus: undefined,
21
23
  floatingRootContext: (0, _getEmptyRootContext.getEmptyRootContext)(),
24
+ floatingId: undefined,
25
+ triggerCount: 0,
22
26
  preventUnmountingOnClose: false,
23
27
  payload: undefined,
24
28
  activeTriggerId: null,
@@ -31,16 +35,45 @@ function createInitialPopupStoreState() {
31
35
  popupProps: _empty.EMPTY_OBJECT
32
36
  };
33
37
  }
38
+ function createPopupFloatingRootContext(triggerElements, floatingId, nested = false) {
39
+ return new _FloatingRootStore.FloatingRootStore({
40
+ open: false,
41
+ transitionStatus: undefined,
42
+ floatingElement: null,
43
+ referenceElement: null,
44
+ triggerElements,
45
+ floatingId,
46
+ syncOnly: true,
47
+ nested,
48
+ onOpenChange: undefined
49
+ });
50
+ }
34
51
  const activeTriggerIdSelector = (0, _store.createSelector)(state => state.triggerIdProp ?? state.activeTriggerId);
52
+ const openSelector = (0, _store.createSelector)(state => state.openProp ?? state.open);
53
+ const popupIdSelector = (0, _store.createSelector)(state => {
54
+ const popupId = state.popupElement?.id ?? state.floatingId;
55
+ return popupId || undefined;
56
+ });
57
+ function triggerOwnsOpenPopup(state, triggerId) {
58
+ return triggerId !== undefined && openSelector(state) && activeTriggerIdSelector(state) === triggerId;
59
+ }
60
+ function triggerOwnsOpenPopupOrIsOnlyTrigger(state, triggerId) {
61
+ if (triggerOwnsOpenPopup(state, triggerId)) {
62
+ return true;
63
+ }
64
+ return triggerId !== undefined && openSelector(state) && activeTriggerIdSelector(state) == null && state.triggerCount === 1;
65
+ }
35
66
  const popupStoreSelectors = exports.popupStoreSelectors = {
36
- open: (0, _store.createSelector)(state => state.openProp ?? state.open),
67
+ open: openSelector,
37
68
  mounted: (0, _store.createSelector)(state => state.mounted),
38
69
  transitionStatus: (0, _store.createSelector)(state => state.transitionStatus),
39
70
  floatingRootContext: (0, _store.createSelector)(state => state.floatingRootContext),
71
+ triggerCount: (0, _store.createSelector)(state => state.triggerCount),
40
72
  preventUnmountingOnClose: (0, _store.createSelector)(state => state.preventUnmountingOnClose),
41
73
  payload: (0, _store.createSelector)(state => state.payload),
42
74
  activeTriggerId: activeTriggerIdSelector,
43
75
  activeTriggerElement: (0, _store.createSelector)(state => state.mounted ? state.activeTriggerElement : null),
76
+ popupId: popupIdSelector,
44
77
  /**
45
78
  * Whether the trigger with the given ID was used to open the popup.
46
79
  */
@@ -48,12 +81,16 @@ const popupStoreSelectors = exports.popupStoreSelectors = {
48
81
  /**
49
82
  * Whether the popup is open and was activated by a trigger with the given ID.
50
83
  */
51
- isOpenedByTrigger: (0, _store.createSelector)((state, triggerId) => triggerId !== undefined && activeTriggerIdSelector(state) === triggerId && state.open),
84
+ isOpenedByTrigger: (0, _store.createSelector)((state, triggerId) => triggerOwnsOpenPopup(state, triggerId)),
52
85
  /**
53
86
  * Whether the popup is mounted and was activated by a trigger with the given ID.
54
87
  */
55
88
  isMountedByTrigger: (0, _store.createSelector)((state, triggerId) => triggerId !== undefined && activeTriggerIdSelector(state) === triggerId && state.mounted),
56
89
  triggerProps: (0, _store.createSelector)((state, isActive) => isActive ? state.activeTriggerProps : state.inactiveTriggerProps),
90
+ /**
91
+ * Popup id for the trigger that currently owns the open popup.
92
+ */
93
+ triggerPopupId: (0, _store.createSelector)((state, triggerId) => triggerOwnsOpenPopupOrIsOnlyTrigger(state, triggerId) ? popupIdSelector(state) : undefined),
57
94
  popupProps: (0, _store.createSelector)(state => state.popupProps),
58
95
  popupElement: (0, _store.createSelector)(state => state.popupElement),
59
96
  positionerElement: (0, _store.createSelector)(state => state.positionerElement)
@@ -8,7 +8,6 @@ Object.defineProperty(exports, "__esModule", {
8
8
  exports.useTriggerFocusGuards = useTriggerFocusGuards;
9
9
  var React = _interopRequireWildcard(require("react"));
10
10
  var ReactDOM = _interopRequireWildcard(require("react-dom"));
11
- var _useStableCallback = require("@base-ui/utils/useStableCallback");
12
11
  var _utils = require("../../floating-ui-react/utils");
13
12
  var _createBaseUIEventDetails = require("../../internals/createBaseUIEventDetails");
14
13
  var _reasons = require("../../internals/reasons");
@@ -26,14 +25,14 @@ var _reasons = require("../../internals/reasons");
26
25
  */
27
26
  function useTriggerFocusGuards(store, triggerElementRef) {
28
27
  const preFocusGuardRef = React.useRef(null);
29
- const handlePreFocusGuardFocus = (0, _useStableCallback.useStableCallback)(event => {
28
+ function handlePreFocusGuardFocus(event) {
30
29
  ReactDOM.flushSync(() => {
31
30
  store.setOpen(false, (0, _createBaseUIEventDetails.createChangeEventDetails)(_reasons.REASONS.focusOut, event.nativeEvent, event.currentTarget));
32
31
  });
33
32
  const previousTabbable = (0, _utils.getTabbableBeforeElement)(preFocusGuardRef.current);
34
33
  previousTabbable?.focus();
35
- });
36
- const handleFocusTargetFocus = (0, _useStableCallback.useStableCallback)(event => {
34
+ }
35
+ function handleFocusTargetFocus(event) {
37
36
  const positionerElement = store.select('positionerElement');
38
37
  if (positionerElement && (0, _utils.isOutsideEvent)(event, positionerElement)) {
39
38
  store.context.beforeContentFocusGuardRef.current?.focus();
@@ -51,7 +50,7 @@ function useTriggerFocusGuards(store, triggerElementRef) {
51
50
  }
52
51
  nextTabbable?.focus();
53
52
  }
54
- });
53
+ }
55
54
  return {
56
55
  preFocusGuardRef,
57
56
  handlePreFocusGuardFocus,
@@ -220,6 +220,11 @@ export interface UseAnchorPositioningParameters extends UseAnchorPositioningShar
220
220
  shiftCrossAxis?: boolean | undefined;
221
221
  lazyFlip?: boolean | undefined;
222
222
  externalTree?: FloatingTreeStore | undefined;
223
+ /**
224
+ * Optional middleware that can replace the measured reference rect before offsets and collision
225
+ * middleware run. Used by Preview Card to position against a specific inline line box.
226
+ */
227
+ inline?: Middleware | undefined;
223
228
  }
224
229
  export interface UseAnchorPositioningReturnValue {
225
230
  positionerStyles: React.CSSProperties;
@@ -65,6 +65,7 @@ function useAnchorPositioning(params) {
65
65
  sticky = false,
66
66
  arrowPadding = 5,
67
67
  disableAnchorTracking = false,
68
+ inline: inlineMiddleware,
68
69
  // Private parameters
69
70
  keepMounted = false,
70
71
  floatingRootContext,
@@ -139,7 +140,11 @@ function useAnchorPositioning(params) {
139
140
  const alignOffsetRef = (0, _useValueAsRef.useValueAsRef)(alignOffset);
140
141
  const sideOffsetDep = typeof sideOffset !== 'function' ? sideOffset : 0;
141
142
  const alignOffsetDep = typeof alignOffset !== 'function' ? alignOffset : 0;
142
- const middleware = [(0, _floatingUiReact.offset)(state => {
143
+ const middleware = [];
144
+ if (inlineMiddleware) {
145
+ middleware.push(inlineMiddleware);
146
+ }
147
+ middleware.push((0, _floatingUiReact.offset)(state => {
143
148
  const data = getOffsetData(state, sideParam, isRtl);
144
149
  const sideAxis = typeof sideOffsetRef.current === 'function' ? sideOffsetRef.current(data) : sideOffsetRef.current;
145
150
  const alignAxis = typeof alignOffsetRef.current === 'function' ? alignOffsetRef.current(data) : alignOffsetRef.current;
@@ -148,7 +153,7 @@ function useAnchorPositioning(params) {
148
153
  crossAxis: alignAxis,
149
154
  alignmentAxis: alignAxis
150
155
  };
151
- }, [sideOffsetDep, alignOffsetDep, isRtl, sideParam])];
156
+ }, [sideOffsetDep, alignOffsetDep, isRtl, sideParam]));
152
157
  const shiftDisabled = collisionAvoidanceAlign === 'none' && collisionAvoidanceSide !== 'shift';
153
158
  const crossAxisShiftEnabled = !shiftDisabled && (sticky || shiftCrossAxis || collisionAvoidanceSide === 'shift');
154
159
  const flipMiddleware = collisionAvoidanceSide === 'none' ? null : (0, _floatingUiReact.flip)({
@@ -233,10 +238,10 @@ function useAnchorPositioning(params) {
233
238
  floatingStyle.setProperty('--anchor-width', `${anchorWidth}px`);
234
239
  floatingStyle.setProperty('--anchor-height', `${anchorHeight}px`);
235
240
  }
236
- }), (0, _arrow.arrow)(() => ({
241
+ }), (0, _arrow.arrow)(state => ({
237
242
  // `transform-origin` calculations rely on an element existing. If the arrow hasn't been set,
238
243
  // we'll create a fake element.
239
- element: arrowRef.current || (0, _owner.ownerDocument)(arrowRef.current).createElement('div'),
244
+ element: arrowRef.current || (0, _owner.ownerDocument)(state.elements.floating).createElement('div'),
240
245
  padding: arrowPadding,
241
246
  offsetParent: 'floating'
242
247
  }), [arrowPadding]), {
@@ -373,11 +378,9 @@ function useAnchorPositioning(params) {
373
378
  const renderedAlign = (0, _utils.getAlignment)(renderedPlacement) || 'center';
374
379
  const anchorHidden = Boolean(middlewareData.hide?.referenceHidden);
375
380
 
376
- /**
377
- * Locks the flip (makes it "sticky") so it doesn't prefer a given placement
378
- * and flips back lazily, not eagerly. Ideal for filtered lists that change
379
- * the size of the popup dynamically to avoid unwanted flipping when typing.
380
- */
381
+ // Locks the flip (makes it "sticky") so it doesn't prefer a given placement
382
+ // and flips back lazily, not eagerly. Ideal for filtered lists that change
383
+ // the size of the popup dynamically to avoid unwanted flipping when typing.
381
384
  (0, _useIsoLayoutEffect.useIsoLayoutEffect)(() => {
382
385
  if (lazyFlip && mounted && isPositioned) {
383
386
  setMountSide(renderedSide);
@@ -1,5 +1,9 @@
1
1
  import * as React from 'react';
2
2
  import { InteractionType } from '@base-ui/utils/useEnhancedClickHandler';
3
+ export declare function useOpenMethodTriggerProps(open: boolean | (() => boolean), setOpenMethod: (interactionType: InteractionType | null) => void): {
4
+ onClick: (event: React.MouseEvent | React.PointerEvent) => void;
5
+ onPointerDown: (event: React.PointerEvent) => void;
6
+ };
3
7
  /**
4
8
  * Determines the interaction type (keyboard, mouse, touch, etc.) that opened the component.
5
9
  *
@@ -6,20 +6,16 @@ Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
8
  exports.useOpenInteractionType = useOpenInteractionType;
9
+ exports.useOpenMethodTriggerProps = useOpenMethodTriggerProps;
9
10
  var React = _interopRequireWildcard(require("react"));
10
11
  var _useStableCallback = require("@base-ui/utils/useStableCallback");
11
12
  var _useEnhancedClickHandler = require("@base-ui/utils/useEnhancedClickHandler");
12
13
  var _detectBrowser = require("@base-ui/utils/detectBrowser");
13
14
  var _useValueChanged = require("../internals/useValueChanged");
14
- /**
15
- * Determines the interaction type (keyboard, mouse, touch, etc.) that opened the component.
16
- *
17
- * @param open The open state of the component.
18
- */
19
- function useOpenInteractionType(open) {
20
- const [openMethod, setOpenMethod] = React.useState(null);
15
+ function useOpenMethodTriggerProps(open, setOpenMethod) {
21
16
  const handleTriggerClick = (0, _useStableCallback.useStableCallback)((_, interactionType) => {
22
- if (!open) {
17
+ const isOpen = typeof open === 'function' ? open() : open;
18
+ if (!isOpen) {
23
19
  setOpenMethod(interactionType || (
24
20
  // On iOS Safari, the hitslop around touch targets means tapping outside an element's
25
21
  // bounds does not fire `pointerdown` but does fire `mousedown`. The `interactionType`
@@ -27,20 +23,31 @@ function useOpenInteractionType(open) {
27
23
  _detectBrowser.isIOS ? 'touch' : ''));
28
24
  }
29
25
  });
26
+ const {
27
+ onClick,
28
+ onPointerDown
29
+ } = (0, _useEnhancedClickHandler.useEnhancedClickHandler)(handleTriggerClick);
30
+ return React.useMemo(() => ({
31
+ onClick,
32
+ onPointerDown
33
+ }), [onClick, onPointerDown]);
34
+ }
35
+
36
+ /**
37
+ * Determines the interaction type (keyboard, mouse, touch, etc.) that opened the component.
38
+ *
39
+ * @param open The open state of the component.
40
+ */
41
+ function useOpenInteractionType(open) {
42
+ const [openMethod, setOpenMethod] = React.useState(null);
43
+ const triggerProps = useOpenMethodTriggerProps(open, setOpenMethod);
30
44
  (0, _useValueChanged.useValueChanged)(open, previousOpen => {
31
45
  if (previousOpen && !open) {
32
46
  setOpenMethod(null);
33
47
  }
34
48
  });
35
- const {
36
- onClick,
37
- onPointerDown
38
- } = (0, _useEnhancedClickHandler.useEnhancedClickHandler)(handleTriggerClick);
39
49
  return React.useMemo(() => ({
40
50
  openMethod,
41
- triggerProps: {
42
- onClick,
43
- onPointerDown
44
- }
45
- }), [openMethod, onClick, onPointerDown]);
51
+ triggerProps
52
+ }), [openMethod, triggerProps]);
46
53
  }
@@ -1 +0,0 @@
1
- export { CheckboxGroup } from "./CheckboxGroup.js";
@@ -1,12 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- Object.defineProperty(exports, "CheckboxGroup", {
7
- enumerable: true,
8
- get: function () {
9
- return _CheckboxGroup.CheckboxGroup;
10
- }
11
- });
12
- var _CheckboxGroup = require("./CheckboxGroup");
@@ -1 +0,0 @@
1
- export { CheckboxGroup } from "./CheckboxGroup.js";
@@ -1 +0,0 @@
1
- export { CheckboxGroup } from "./CheckboxGroup.js";
@@ -1,20 +0,0 @@
1
- import * as React from 'react';
2
- import type { ElementProps } from "../types.js";
3
- import { ACTIVE_KEY, SELECTED_KEY } from "../utils/constants.js";
4
- export type ExtendedUserProps = {
5
- [ACTIVE_KEY]?: boolean | undefined;
6
- [SELECTED_KEY]?: boolean | undefined;
7
- };
8
- export interface UseInteractionsReturn {
9
- getReferenceProps: (userProps?: React.HTMLProps<Element>) => Record<string, unknown>;
10
- getFloatingProps: (userProps?: React.HTMLProps<HTMLElement>) => Record<string, unknown>;
11
- getItemProps: (userProps?: Omit<React.HTMLProps<HTMLElement>, 'selected' | 'active'> & ExtendedUserProps) => Record<string, unknown>;
12
- getTriggerProps: (userProps?: React.HTMLProps<Element>) => Record<string, unknown>;
13
- }
14
- /**
15
- * Merges an array of interaction hooks' props into prop getters, allowing
16
- * event handler functions to be composed together without overwriting one
17
- * another.
18
- * @see https://floating-ui.com/docs/useInteractions
19
- */
20
- export declare function useInteractions(propsList?: Array<ElementProps | void>): UseInteractionsReturn;