@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
@@ -7,9 +7,9 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports.useFloating = useFloating;
9
9
  var React = _interopRequireWildcard(require("react"));
10
+ var _useIsoLayoutEffect = require("@base-ui/utils/useIsoLayoutEffect");
10
11
  var _reactDom = require("@floating-ui/react-dom");
11
12
  var _dom = require("@floating-ui/utils/dom");
12
- var _useIsoLayoutEffect = require("@base-ui/utils/useIsoLayoutEffect");
13
13
  var _FloatingTree = require("../components/FloatingTree");
14
14
  var _useFloatingRootContext = require("./useFloatingRootContext");
15
15
  /**
@@ -21,30 +21,37 @@ function useFloating(options = {}) {
21
21
  nodeId,
22
22
  externalTree
23
23
  } = options;
24
- const internalRootStore = (0, _useFloatingRootContext.useFloatingRootContext)(options);
25
- const rootContext = options.rootContext || internalRootStore;
26
- const rootContextElements = {
27
- reference: rootContext.useState('referenceElement'),
28
- floating: rootContext.useState('floatingElement'),
29
- domReference: rootContext.useState('domReferenceElement')
30
- };
24
+ const internalStore = (0, _useFloatingRootContext.useFloatingRootContext)(options);
25
+ const store = options.rootContext || internalStore;
26
+ const referenceElement = store.useState('referenceElement');
27
+ const floatingElement = store.useState('floatingElement');
28
+ const domReferenceElement = store.useState('domReferenceElement');
29
+ const open = store.useState('open');
30
+ const floatingId = store.useState('floatingId');
31
31
  const [positionReference, setPositionReferenceRaw] = React.useState(null);
32
+ const [localDomReference, setLocalDomReference] = React.useState(undefined);
33
+ const [localFloatingElement, setLocalFloatingElement] = React.useState(undefined);
32
34
  const domReferenceRef = React.useRef(null);
33
35
  const tree = (0, _FloatingTree.useFloatingTree)(externalTree);
34
- (0, _useIsoLayoutEffect.useIsoLayoutEffect)(() => {
35
- if (rootContextElements.domReference) {
36
- domReferenceRef.current = rootContextElements.domReference;
37
- }
38
- }, [rootContextElements.domReference]);
36
+ const storeElements = React.useMemo(() => ({
37
+ reference: referenceElement,
38
+ floating: floatingElement,
39
+ domReference: domReferenceElement
40
+ }), [referenceElement, floatingElement, domReferenceElement]);
39
41
  const position = (0, _reactDom.useFloating)({
40
42
  ...options,
41
43
  elements: {
42
- ...rootContextElements,
44
+ ...storeElements,
43
45
  ...(positionReference && {
44
46
  reference: positionReference
45
47
  })
46
48
  }
47
49
  });
50
+ const localDomReferenceElement = (0, _dom.isElement)(localDomReference) ? localDomReference : null;
51
+ const syncedFloatingElement = localFloatingElement === undefined ? store.state.floatingElement : localFloatingElement;
52
+ store.useSyncedValue('referenceElement', localDomReference ?? null);
53
+ store.useSyncedValue('domReferenceElement', localDomReference === undefined ? domReferenceElement : localDomReferenceElement);
54
+ store.useSyncedValue('floatingElement', syncedFloatingElement);
48
55
  const setPositionReference = React.useCallback(node => {
49
56
  const computedPositionReference = (0, _dom.isElement)(node) ? {
50
57
  getBoundingClientRect: () => node.getBoundingClientRect(),
@@ -56,12 +63,6 @@ function useFloating(options = {}) {
56
63
  setPositionReferenceRaw(computedPositionReference);
57
64
  position.refs.setReference(computedPositionReference);
58
65
  }, [position.refs]);
59
- const [localDomReference, setLocalDomReference] = React.useState(undefined);
60
- const [localFloatingElement, setLocalFloatingElement] = React.useState(null);
61
- rootContext.useSyncedValue('referenceElement', localDomReference ?? null);
62
- const localDomReferenceElement = (0, _dom.isElement)(localDomReference) ? localDomReference : null;
63
- rootContext.useSyncedValue('domReferenceElement', localDomReference === undefined ? rootContextElements.domReference : localDomReferenceElement);
64
- rootContext.useSyncedValue('floatingElement', localFloatingElement);
65
66
  const setReference = React.useCallback(node => {
66
67
  if ((0, _dom.isElement)(node) || node === null) {
67
68
  domReferenceRef.current = node;
@@ -91,24 +92,27 @@ function useFloating(options = {}) {
91
92
  }), [position.refs, setReference, setFloating, setPositionReference]);
92
93
  const elements = React.useMemo(() => ({
93
94
  ...position.elements,
94
- domReference: rootContextElements.domReference
95
- }), [position.elements, rootContextElements.domReference]);
96
- const open = rootContext.useState('open');
97
- const floatingId = rootContext.useState('floatingId');
95
+ domReference: domReferenceElement
96
+ }), [position.elements, domReferenceElement]);
98
97
  const context = React.useMemo(() => ({
99
98
  ...position,
100
- dataRef: rootContext.context.dataRef,
99
+ dataRef: store.context.dataRef,
101
100
  open,
102
- onOpenChange: rootContext.setOpen,
103
- events: rootContext.context.events,
101
+ onOpenChange: store.setOpen,
102
+ events: store.context.events,
104
103
  floatingId,
105
104
  refs,
106
105
  elements,
107
106
  nodeId,
108
- rootStore: rootContext
109
- }), [position, refs, elements, nodeId, rootContext, open, floatingId]);
107
+ rootStore: store
108
+ }), [position, refs, elements, nodeId, store, open, floatingId]);
109
+ (0, _useIsoLayoutEffect.useIsoLayoutEffect)(() => {
110
+ if (domReferenceElement) {
111
+ domReferenceRef.current = domReferenceElement;
112
+ }
113
+ }, [domReferenceElement]);
110
114
  (0, _useIsoLayoutEffect.useIsoLayoutEffect)(() => {
111
- rootContext.context.dataRef.current.floatingContext = context;
115
+ store.context.dataRef.current.floatingContext = context;
112
116
  const node = tree?.nodesRef.current.find(n => n.id === nodeId);
113
117
  if (node) {
114
118
  node.context = context;
@@ -119,6 +123,6 @@ function useFloating(options = {}) {
119
123
  context,
120
124
  refs,
121
125
  elements,
122
- rootStore: rootContext
123
- }), [position, refs, elements, context, rootContext]);
126
+ rootStore: store
127
+ }), [position, refs, elements, context, store]);
124
128
  }
@@ -1,6 +1,6 @@
1
- import type { ReferenceType } from "../types.js";
2
1
  import type { BaseUIChangeEventDetails } from "../../internals/createBaseUIEventDetails.js";
3
2
  import { FloatingRootStore } from "../components/FloatingRootStore.js";
3
+ import type { ReferenceType } from "../types.js";
4
4
  export interface UseFloatingRootContextOptions {
5
5
  open?: boolean | undefined;
6
6
  onOpenChange?(open: boolean, eventDetails: BaseUIChangeEventDetails<string>): void;
@@ -7,11 +7,11 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports.useFloatingRootContext = useFloatingRootContext;
8
8
  var _dom = require("@floating-ui/utils/dom");
9
9
  var _useId = require("@base-ui/utils/useId");
10
- var _useRefWithInit = require("@base-ui/utils/useRefWithInit");
11
10
  var _useIsoLayoutEffect = require("@base-ui/utils/useIsoLayoutEffect");
11
+ var _useRefWithInit = require("@base-ui/utils/useRefWithInit");
12
+ var _popups = require("../../utils/popups");
12
13
  var _FloatingTree = require("../components/FloatingTree");
13
14
  var _FloatingRootStore = require("../components/FloatingRootStore");
14
- var _popups = require("../../utils/popups");
15
15
  function useFloatingRootContext(options) {
16
16
  const {
17
17
  open = false,
@@ -7,16 +7,16 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports.useFocus = useFocus;
9
9
  var React = _interopRequireWildcard(require("react"));
10
- var _dom = require("@floating-ui/utils/dom");
11
10
  var _addEventListener = require("@base-ui/utils/addEventListener");
12
- var _mergeCleanups = require("@base-ui/utils/mergeCleanups");
13
11
  var _detectBrowser = require("@base-ui/utils/detectBrowser");
14
- var _useTimeout = require("@base-ui/utils/useTimeout");
12
+ var _mergeCleanups = require("@base-ui/utils/mergeCleanups");
15
13
  var _owner = require("@base-ui/utils/owner");
14
+ var _useTimeout = require("@base-ui/utils/useTimeout");
15
+ var _dom = require("@floating-ui/utils/dom");
16
+ var _createAttribute = require("../utils/createAttribute");
16
17
  var _element = require("../utils/element");
17
18
  var _createBaseUIEventDetails = require("../../internals/createBaseUIEventDetails");
18
19
  var _reasons = require("../../internals/reasons");
19
- var _createAttribute = require("../utils/createAttribute");
20
20
  const isMacSafari = _detectBrowser.isMac && _detectBrowser.isSafari;
21
21
  /**
22
22
  * Opens the floating element while the reference element has focus, like CSS
@@ -24,20 +24,20 @@ const isMacSafari = _detectBrowser.isMac && _detectBrowser.isSafari;
24
24
  * @see https://floating-ui.com/docs/useFocus
25
25
  */
26
26
  function useFocus(context, props = {}) {
27
+ const {
28
+ enabled = true,
29
+ delay
30
+ } = props;
27
31
  const store = 'rootStore' in context ? context.rootStore : context;
28
32
  const {
29
33
  events,
30
34
  dataRef
31
35
  } = store.context;
32
- const {
33
- enabled = true,
34
- delay
35
- } = props;
36
36
  const blockFocusRef = React.useRef(false);
37
37
  // Track which reference should be blocked from re-opening after Escape/press dismissal.
38
38
  const blockedReferenceRef = React.useRef(null);
39
- const timeout = (0, _useTimeout.useTimeout)();
40
39
  const keyboardModalityRef = React.useRef(true);
40
+ const timeout = (0, _useTimeout.useTimeout)();
41
41
  React.useEffect(() => {
42
42
  const domReference = store.select('domReferenceElement');
43
43
  if (!enabled) {
@@ -80,91 +80,94 @@ function useFocus(context, props = {}) {
80
80
  events.off('openchange', onOpenChangeLocal);
81
81
  };
82
82
  }, [events, enabled, store]);
83
- const reference = React.useMemo(() => ({
84
- onMouseLeave() {
83
+ const reference = React.useMemo(() => {
84
+ function resetBlockedFocus() {
85
85
  blockFocusRef.current = false;
86
86
  blockedReferenceRef.current = null;
87
- },
88
- onFocus(event) {
89
- const focusTarget = event.currentTarget;
90
- if (blockFocusRef.current) {
91
- if (blockedReferenceRef.current === focusTarget) {
92
- return;
87
+ }
88
+ return {
89
+ onMouseLeave() {
90
+ resetBlockedFocus();
91
+ },
92
+ onFocus(event) {
93
+ const focusTarget = event.currentTarget;
94
+ if (blockFocusRef.current) {
95
+ if (blockedReferenceRef.current === focusTarget) {
96
+ return;
97
+ }
98
+ resetBlockedFocus();
93
99
  }
94
- blockFocusRef.current = false;
95
- blockedReferenceRef.current = null;
96
- }
97
- const target = (0, _element.getTarget)(event.nativeEvent);
98
- if ((0, _dom.isElement)(target)) {
99
- // Safari fails to match `:focus-visible` if focus was initially
100
- // outside the document.
101
- if (isMacSafari && !event.relatedTarget) {
102
- if (!keyboardModalityRef.current && !(0, _element.isTypeableElement)(target)) {
100
+ const target = (0, _element.getTarget)(event.nativeEvent);
101
+ if ((0, _dom.isElement)(target)) {
102
+ // Safari fails to match `:focus-visible` if focus was initially
103
+ // outside the document.
104
+ if (isMacSafari && !event.relatedTarget) {
105
+ if (!keyboardModalityRef.current && !(0, _element.isTypeableElement)(target)) {
106
+ return;
107
+ }
108
+ } else if (!(0, _element.matchesFocusVisible)(target)) {
103
109
  return;
104
110
  }
105
- } else if (!(0, _element.matchesFocusVisible)(target)) {
106
- return;
107
111
  }
108
- }
109
- const movedFromOtherEnabledTrigger = (0, _element.isTargetInsideEnabledTrigger)(event.relatedTarget, store.context.triggerElements);
110
- const {
111
- nativeEvent,
112
- currentTarget
113
- } = event;
114
- const delayValue = typeof delay === 'function' ? delay() : delay;
115
- if (store.select('open') && movedFromOtherEnabledTrigger || delayValue === 0 || delayValue === undefined) {
116
- store.setOpen(true, (0, _createBaseUIEventDetails.createChangeEventDetails)(_reasons.REASONS.triggerFocus, nativeEvent, currentTarget));
117
- return;
118
- }
119
- timeout.start(delayValue, () => {
120
- if (blockFocusRef.current) {
112
+ const movedFromOtherEnabledTrigger = (0, _element.isTargetInsideEnabledTrigger)(event.relatedTarget, store.context.triggerElements);
113
+ const {
114
+ nativeEvent,
115
+ currentTarget
116
+ } = event;
117
+ const delayValue = typeof delay === 'function' ? delay() : delay;
118
+ if (store.select('open') && movedFromOtherEnabledTrigger || delayValue === 0 || delayValue === undefined) {
119
+ store.setOpen(true, (0, _createBaseUIEventDetails.createChangeEventDetails)(_reasons.REASONS.triggerFocus, nativeEvent, currentTarget));
121
120
  return;
122
121
  }
123
- store.setOpen(true, (0, _createBaseUIEventDetails.createChangeEventDetails)(_reasons.REASONS.triggerFocus, nativeEvent, currentTarget));
124
- });
125
- },
126
- onBlur(event) {
127
- blockFocusRef.current = false;
128
- blockedReferenceRef.current = null;
129
- const relatedTarget = event.relatedTarget;
130
- const nativeEvent = event.nativeEvent;
122
+ timeout.start(delayValue, () => {
123
+ if (blockFocusRef.current) {
124
+ return;
125
+ }
126
+ store.setOpen(true, (0, _createBaseUIEventDetails.createChangeEventDetails)(_reasons.REASONS.triggerFocus, nativeEvent, currentTarget));
127
+ });
128
+ },
129
+ onBlur(event) {
130
+ resetBlockedFocus();
131
+ const relatedTarget = event.relatedTarget;
132
+ const nativeEvent = event.nativeEvent;
131
133
 
132
- // Hit the non-modal focus management portal guard. Focus will be
133
- // moved into the floating element immediately after.
134
- const movedToFocusGuard = (0, _dom.isElement)(relatedTarget) && relatedTarget.hasAttribute((0, _createAttribute.createAttribute)('focus-guard')) && relatedTarget.getAttribute('data-type') === 'outside';
134
+ // Hit the non-modal focus management portal guard. Focus will be
135
+ // moved into the floating element immediately after.
136
+ const movedToFocusGuard = (0, _dom.isElement)(relatedTarget) && relatedTarget.hasAttribute((0, _createAttribute.createAttribute)('focus-guard')) && relatedTarget.getAttribute('data-type') === 'outside';
135
137
 
136
- // Wait for the window blur listener to fire.
137
- timeout.start(0, () => {
138
- const domReference = store.select('domReferenceElement');
139
- const activeEl = (0, _element.activeElement)((0, _owner.ownerDocument)(domReference));
138
+ // Wait for the window blur listener to fire.
139
+ timeout.start(0, () => {
140
+ const domReference = store.select('domReferenceElement');
141
+ const activeEl = (0, _element.activeElement)((0, _owner.ownerDocument)(domReference));
140
142
 
141
- // Focus left the page, keep it open.
142
- if (!relatedTarget && activeEl === domReference) {
143
- return;
144
- }
143
+ // Focus left the page, keep it open.
144
+ if (!relatedTarget && activeEl === domReference) {
145
+ return;
146
+ }
145
147
 
146
- // When focusing the reference element (e.g. regular click), then
147
- // clicking into the floating element, prevent it from hiding.
148
- // Note: it must be focusable, e.g. `tabindex="-1"`.
149
- // We can not rely on relatedTarget to point to the correct element
150
- // as it will only point to the shadow host of the newly focused element
151
- // and not the element that actually has received focus if it is located
152
- // inside a shadow root.
153
- if ((0, _element.contains)(dataRef.current.floatingContext?.refs.floating.current, activeEl) || (0, _element.contains)(domReference, activeEl) || movedToFocusGuard) {
154
- return;
155
- }
148
+ // When focusing the reference element (e.g. regular click), then
149
+ // clicking into the floating element, prevent it from hiding.
150
+ // Note: it must be focusable, e.g. `tabindex="-1"`.
151
+ // We can not rely on relatedTarget to point to the correct element
152
+ // as it will only point to the shadow host of the newly focused element
153
+ // and not the element that actually has received focus if it is located
154
+ // inside a shadow root.
155
+ if ((0, _element.contains)(dataRef.current.floatingContext?.refs.floating.current, activeEl) || (0, _element.contains)(domReference, activeEl) || movedToFocusGuard) {
156
+ return;
157
+ }
156
158
 
157
- // If the next focused element is one of the triggers, do not close
158
- // the floating element. The focus handler of that trigger will
159
- // handle the open state.
160
- const nextFocusedElement = relatedTarget ?? activeEl;
161
- if ((0, _element.isTargetInsideEnabledTrigger)(nextFocusedElement, store.context.triggerElements)) {
162
- return;
163
- }
164
- store.setOpen(false, (0, _createBaseUIEventDetails.createChangeEventDetails)(_reasons.REASONS.triggerFocus, nativeEvent));
165
- });
166
- }
167
- }), [dataRef, store, timeout, delay]);
159
+ // If the next focused element is one of the triggers, do not close
160
+ // the floating element. The focus handler of that trigger will
161
+ // handle the open state.
162
+ const nextFocusedElement = relatedTarget ?? activeEl;
163
+ if ((0, _element.isTargetInsideEnabledTrigger)(nextFocusedElement, store.context.triggerElements)) {
164
+ return;
165
+ }
166
+ store.setOpen(false, (0, _createBaseUIEventDetails.createChangeEventDetails)(_reasons.REASONS.triggerFocus, nativeEvent));
167
+ });
168
+ }
169
+ };
170
+ }, [dataRef, delay, store, timeout]);
168
171
  return React.useMemo(() => enabled ? {
169
172
  reference,
170
173
  trigger: reference
@@ -7,18 +7,18 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports.useHover = useHover;
9
9
  var React = _interopRequireWildcard(require("react"));
10
- var _dom = require("@floating-ui/utils/dom");
11
10
  var _addEventListener = require("@base-ui/utils/addEventListener");
12
11
  var _mergeCleanups = require("@base-ui/utils/mergeCleanups");
13
- var _useTimeout = require("@base-ui/utils/useTimeout");
14
- var _useValueAsRef = require("@base-ui/utils/useValueAsRef");
15
- var _useStableCallback = require("@base-ui/utils/useStableCallback");
16
12
  var _useIsoLayoutEffect = require("@base-ui/utils/useIsoLayoutEffect");
17
13
  var _owner = require("@base-ui/utils/owner");
18
- var _utils = require("../utils");
19
- var _FloatingTree = require("../components/FloatingTree");
14
+ var _useStableCallback = require("@base-ui/utils/useStableCallback");
15
+ var _useTimeout = require("@base-ui/utils/useTimeout");
16
+ var _useValueAsRef = require("@base-ui/utils/useValueAsRef");
17
+ var _dom = require("@floating-ui/utils/dom");
20
18
  var _createBaseUIEventDetails = require("../../internals/createBaseUIEventDetails");
21
19
  var _reasons = require("../../internals/reasons");
20
+ var _FloatingTree = require("../components/FloatingTree");
21
+ var _element = require("../utils/element");
22
22
  var _useHoverShared = require("./useHoverShared");
23
23
  /**
24
24
  * Opens the floating element while hovering over the reference element, like
@@ -26,6 +26,12 @@ var _useHoverShared = require("./useHoverShared");
26
26
  * @see https://floating-ui.com/docs/useHover
27
27
  */
28
28
  function useHover(context, props = {}) {
29
+ const {
30
+ delay = 0,
31
+ handleClose = null,
32
+ restMs = 0,
33
+ move = true
34
+ } = props;
29
35
  const store = 'rootStore' in context ? context.rootStore : context;
30
36
  const open = store.useState('open');
31
37
  const floatingElement = store.useState('floatingElement');
@@ -34,12 +40,6 @@ function useHover(context, props = {}) {
34
40
  dataRef,
35
41
  events
36
42
  } = store.context;
37
- const {
38
- delay = 0,
39
- handleClose = null,
40
- restMs = 0,
41
- move = true
42
- } = props;
43
43
  const tree = (0, _FloatingTree.useFloatingTree)();
44
44
  const parentId = (0, _FloatingTree.useFloatingParentNodeId)();
45
45
  const handleCloseRef = (0, _useValueAsRef.useValueAsRef)(handleClose);
@@ -47,22 +47,29 @@ function useHover(context, props = {}) {
47
47
  const restMsRef = (0, _useValueAsRef.useValueAsRef)(restMs);
48
48
  const pointerTypeRef = React.useRef(undefined);
49
49
  const interactedInsideRef = React.useRef(false);
50
- const timeout = (0, _useTimeout.useTimeout)();
51
50
  const handlerRef = React.useRef(undefined);
52
- const restTimeout = (0, _useTimeout.useTimeout)();
53
51
  const blockMouseMoveRef = React.useRef(true);
54
52
  const performedPointerEventsMutationRef = React.useRef(false);
55
53
  const unbindMouseMoveRef = React.useRef(() => {});
56
54
  const restTimeoutPendingRef = React.useRef(false);
55
+ const timeout = (0, _useTimeout.useTimeout)();
56
+ const restTimeout = (0, _useTimeout.useTimeout)();
57
57
  const isHoverOpen = (0, _useStableCallback.useStableCallback)(() => {
58
- const type = dataRef.current.openEvent?.type;
59
- return type?.includes('mouse') && type !== 'mousedown';
58
+ return (0, _useHoverShared.isHoverOpenEvent)(dataRef.current.openEvent?.type);
60
59
  });
61
60
  const isClickLikeOpenEvent = (0, _useStableCallback.useStableCallback)(() => {
62
- if (interactedInsideRef.current) {
63
- return true;
61
+ return (0, _useHoverShared.isClickLikeOpenEvent)(dataRef.current.openEvent?.type, interactedInsideRef.current);
62
+ });
63
+ const cleanupMouseMoveHandler = (0, _useStableCallback.useStableCallback)(() => {
64
+ unbindMouseMoveRef.current();
65
+ handlerRef.current = undefined;
66
+ });
67
+ const clearPointerEvents = (0, _useStableCallback.useStableCallback)(() => {
68
+ if (performedPointerEventsMutationRef.current) {
69
+ const body = (0, _owner.ownerDocument)(floatingElement).body;
70
+ body.style.pointerEvents = '';
71
+ performedPointerEventsMutationRef.current = false;
64
72
  }
65
- return dataRef.current.openEvent ? ['click', 'mousedown'].includes(dataRef.current.openEvent.type) : false;
66
73
  });
67
74
 
68
75
  // When closing before opening, clear the delay timeouts to cancel it
@@ -99,39 +106,40 @@ function useHover(context, props = {}) {
99
106
  const html = (0, _owner.ownerDocument)(floatingElement).documentElement;
100
107
  return (0, _addEventListener.addEventListener)(html, 'mouseleave', onLeave);
101
108
  }, [floatingElement, open, store, handleCloseRef, isHoverOpen, isClickLikeOpenEvent]);
102
- const closeWithDelay = React.useCallback((event, runElseBranch = true) => {
103
- const closeDelay = (0, _useHoverShared.getDelay)(delayRef.current, 'close', pointerTypeRef.current);
104
- if (closeDelay && !handlerRef.current) {
105
- timeout.start(closeDelay, () => store.setOpen(false, (0, _createBaseUIEventDetails.createChangeEventDetails)(_reasons.REASONS.triggerHover, event)));
106
- } else if (runElseBranch) {
107
- timeout.clear();
108
- store.setOpen(false, (0, _createBaseUIEventDetails.createChangeEventDetails)(_reasons.REASONS.triggerHover, event));
109
- }
110
- }, [delayRef, store, timeout]);
111
- const cleanupMouseMoveHandler = (0, _useStableCallback.useStableCallback)(() => {
112
- unbindMouseMoveRef.current();
113
- handlerRef.current = undefined;
114
- });
115
- const clearPointerEvents = (0, _useStableCallback.useStableCallback)(() => {
116
- if (performedPointerEventsMutationRef.current) {
117
- const body = (0, _owner.ownerDocument)(floatingElement).body;
118
- body.style.pointerEvents = '';
119
- performedPointerEventsMutationRef.current = false;
120
- }
121
- });
122
- const handleInteractInside = (0, _useStableCallback.useStableCallback)(event => {
123
- const target = (0, _utils.getTarget)(event);
124
- if (!(0, _utils.isInteractiveElement)(target)) {
125
- interactedInsideRef.current = false;
126
- return;
127
- }
128
- interactedInsideRef.current = true;
129
- });
130
109
 
131
110
  // Registering the mouse events on the reference directly to bypass React's
132
111
  // delegation system. If the cursor was on a disabled element and then entered
133
112
  // the reference (no gap), `mouseenter` doesn't fire in the delegation system.
134
113
  React.useEffect(() => {
114
+ function closeWithDelay(event, runElseBranch = true) {
115
+ const closeDelay = (0, _useHoverShared.getDelay)(delayRef.current, 'close', pointerTypeRef.current);
116
+ if (closeDelay && !handlerRef.current) {
117
+ timeout.start(closeDelay, () => store.setOpen(false, (0, _createBaseUIEventDetails.createChangeEventDetails)(_reasons.REASONS.triggerHover, event)));
118
+ } else if (runElseBranch) {
119
+ timeout.clear();
120
+ store.setOpen(false, (0, _createBaseUIEventDetails.createChangeEventDetails)(_reasons.REASONS.triggerHover, event));
121
+ }
122
+ }
123
+ function handleInteractInside(event) {
124
+ const target = (0, _element.getTarget)(event);
125
+ if (!(0, _element.isInteractiveElement)(target)) {
126
+ interactedInsideRef.current = false;
127
+ return;
128
+ }
129
+ interactedInsideRef.current = true;
130
+ }
131
+ function getHandleCloseHandler(event, onClose) {
132
+ if (!handleCloseRef.current || !dataRef.current.floatingContext) {
133
+ return null;
134
+ }
135
+ return handleCloseRef.current({
136
+ ...dataRef.current.floatingContext,
137
+ tree,
138
+ x: event.clientX,
139
+ y: event.clientY,
140
+ onClose
141
+ });
142
+ }
135
143
  function onReferenceMouseEnter(event) {
136
144
  timeout.clear();
137
145
  blockMouseMoveRef.current = false;
@@ -141,7 +149,7 @@ function useHover(context, props = {}) {
141
149
  const openDelay = (0, _useHoverShared.getDelay)(delayRef.current, 'open', pointerTypeRef.current);
142
150
  const trigger = event.currentTarget ?? undefined;
143
151
  const domReference = store.select('domReferenceElement');
144
- const isOverInactiveTrigger = domReference && trigger && !(0, _utils.contains)(domReference, trigger);
152
+ const isOverInactiveTrigger = domReference && trigger && !(0, _element.contains)(domReference, trigger);
145
153
  if (openDelay) {
146
154
  timeout.start(openDelay, () => {
147
155
  if (!store.select('open')) {
@@ -167,25 +175,19 @@ function useHover(context, props = {}) {
167
175
  // as it will be moved.
168
176
  return;
169
177
  }
170
- if (handleCloseRef.current && dataRef.current.floatingContext) {
178
+ const handler = getHandleCloseHandler(event, () => {
179
+ clearPointerEvents();
180
+ cleanupMouseMoveHandler();
181
+ if (!isClickLikeOpenEvent()) {
182
+ closeWithDelay(event, true);
183
+ }
184
+ });
185
+ if (handler) {
171
186
  // Prevent clearing `onScrollMouseLeave` timeout.
172
187
  if (!open) {
173
188
  timeout.clear();
174
189
  }
175
- handlerRef.current = handleCloseRef.current({
176
- ...dataRef.current.floatingContext,
177
- tree,
178
- x: event.clientX,
179
- y: event.clientY,
180
- onClose() {
181
- clearPointerEvents();
182
- cleanupMouseMoveHandler();
183
- if (!isClickLikeOpenEvent()) {
184
- closeWithDelay(event, true);
185
- }
186
- }
187
- });
188
- const handler = handlerRef.current;
190
+ handlerRef.current = handler;
189
191
  unbindMouseMoveRef.current = (0, _addEventListener.addEventListener)(doc, 'mousemove', handler);
190
192
  return;
191
193
  }
@@ -193,7 +195,7 @@ function useHover(context, props = {}) {
193
195
  // Allow interactivity without `safePolygon` on touch devices. With a
194
196
  // pointer, a short close delay is an alternative, so it should work
195
197
  // consistently.
196
- const shouldClose = pointerTypeRef.current === 'touch' ? !(0, _utils.contains)(floatingElement, event.relatedTarget) : true;
198
+ const shouldClose = pointerTypeRef.current === 'touch' ? !(0, _element.contains)(floatingElement, event.relatedTarget) : true;
197
199
  if (shouldClose) {
198
200
  closeWithDelay(event);
199
201
  }
@@ -212,19 +214,13 @@ function useHover(context, props = {}) {
212
214
  // as it will be moved.
213
215
  return;
214
216
  }
215
- handleCloseRef.current?.({
216
- ...dataRef.current.floatingContext,
217
- tree,
218
- x: event.clientX,
219
- y: event.clientY,
220
- onClose() {
221
- clearPointerEvents();
222
- cleanupMouseMoveHandler();
223
- if (!isClickLikeOpenEvent()) {
224
- closeWithDelay(event);
225
- }
217
+ getHandleCloseHandler(event, () => {
218
+ clearPointerEvents();
219
+ cleanupMouseMoveHandler();
220
+ if (!isClickLikeOpenEvent()) {
221
+ closeWithDelay(event);
226
222
  }
227
- })(event);
223
+ })?.(event);
228
224
  }
229
225
  function onFloatingMouseEnter() {
230
226
  timeout.clear();
@@ -243,7 +239,7 @@ function useHover(context, props = {}) {
243
239
  }), (0, _addEventListener.addEventListener)(trigger, 'mouseenter', onReferenceMouseEnter), (0, _addEventListener.addEventListener)(trigger, 'mouseleave', onReferenceMouseLeave), floating && (0, _addEventListener.addEventListener)(floating, 'mouseleave', onScrollMouseLeave), floating && (0, _addEventListener.addEventListener)(floating, 'mouseenter', onFloatingMouseEnter), floating && (0, _addEventListener.addEventListener)(floating, 'mouseleave', onFloatingMouseLeave), floating && (0, _addEventListener.addEventListener)(floating, 'pointerdown', handleInteractInside, true));
244
240
  }
245
241
  return undefined;
246
- }, [move, domReferenceElement, floatingElement, store, closeWithDelay, cleanupMouseMoveHandler, clearPointerEvents, open, tree, delayRef, handleCloseRef, dataRef, isClickLikeOpenEvent, restMsRef, timeout, restTimeout, handleInteractInside]);
242
+ }, [move, domReferenceElement, floatingElement, store, cleanupMouseMoveHandler, clearPointerEvents, open, tree, delayRef, handleCloseRef, dataRef, isClickLikeOpenEvent, restMsRef, timeout, restTimeout]);
247
243
 
248
244
  // Block pointer-events of every element other than the reference and floating
249
245
  // while the floating element is open and has a `handleClose` handler. Also
@@ -308,7 +304,7 @@ function useHover(context, props = {}) {
308
304
 
309
305
  // `true` when there are multiple triggers per floating element and user hovers over the one that
310
306
  // wasn't used to open the floating element.
311
- const isOverInactiveTrigger = store.select('domReferenceElement') && !(0, _utils.contains)(store.select('domReferenceElement'), event.target);
307
+ const isOverInactiveTrigger = store.select('domReferenceElement') && !(0, _element.contains)(store.select('domReferenceElement'), event.target);
312
308
  function handleMouseMove() {
313
309
  if (!blockMouseMoveRef.current && (!store.select('open') || isOverInactiveTrigger)) {
314
310
  store.setOpen(true, (0, _createBaseUIEventDetails.createChangeEventDetails)(_reasons.REASONS.triggerHover, nativeEvent, trigger));