@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
@@ -61,6 +61,8 @@ declare const selectors: {
61
61
  mounted: boolean;
62
62
  transitionStatus: import("../../internals/useTransitionStatus.js").TransitionStatus;
63
63
  floatingRootContext: import("../../floating-ui-react/index.js").FloatingRootContext;
64
+ floatingId: string | undefined;
65
+ triggerCount: number;
64
66
  preventUnmountingOnClose: boolean;
65
67
  payload: unknown;
66
68
  activeTriggerId: string | null;
@@ -78,6 +80,8 @@ declare const selectors: {
78
80
  mounted: boolean;
79
81
  transitionStatus: import("../../internals/useTransitionStatus.js").TransitionStatus;
80
82
  floatingRootContext: import("../../floating-ui-react/index.js").FloatingRootContext;
83
+ floatingId: string | undefined;
84
+ triggerCount: number;
81
85
  preventUnmountingOnClose: boolean;
82
86
  payload: unknown;
83
87
  activeTriggerId: string | null;
@@ -95,6 +99,8 @@ declare const selectors: {
95
99
  mounted: boolean;
96
100
  transitionStatus: import("../../internals/useTransitionStatus.js").TransitionStatus;
97
101
  floatingRootContext: import("../../floating-ui-react/index.js").FloatingRootContext;
102
+ floatingId: string | undefined;
103
+ triggerCount: number;
98
104
  preventUnmountingOnClose: boolean;
99
105
  payload: unknown;
100
106
  activeTriggerId: string | null;
@@ -112,6 +118,8 @@ declare const selectors: {
112
118
  mounted: boolean;
113
119
  transitionStatus: import("../../internals/useTransitionStatus.js").TransitionStatus;
114
120
  floatingRootContext: import("../../floating-ui-react/index.js").FloatingRootContext;
121
+ floatingId: string | undefined;
122
+ triggerCount: number;
115
123
  preventUnmountingOnClose: boolean;
116
124
  payload: unknown;
117
125
  activeTriggerId: string | null;
@@ -123,12 +131,33 @@ declare const selectors: {
123
131
  inactiveTriggerProps: HTMLProps;
124
132
  popupProps: HTMLProps;
125
133
  }) => import("../../floating-ui-react/components/FloatingRootStore.js").FloatingRootStore;
134
+ triggerCount: (state: {
135
+ open: boolean;
136
+ readonly openProp: boolean | undefined;
137
+ mounted: boolean;
138
+ transitionStatus: import("../../internals/useTransitionStatus.js").TransitionStatus;
139
+ floatingRootContext: import("../../floating-ui-react/index.js").FloatingRootContext;
140
+ floatingId: string | undefined;
141
+ triggerCount: number;
142
+ preventUnmountingOnClose: boolean;
143
+ payload: unknown;
144
+ activeTriggerId: string | null;
145
+ activeTriggerElement: Element | null;
146
+ readonly triggerIdProp: string | null | undefined;
147
+ popupElement: HTMLElement | null;
148
+ positionerElement: HTMLElement | null;
149
+ activeTriggerProps: HTMLProps;
150
+ inactiveTriggerProps: HTMLProps;
151
+ popupProps: HTMLProps;
152
+ }) => number;
126
153
  preventUnmountingOnClose: (state: {
127
154
  open: boolean;
128
155
  readonly openProp: boolean | undefined;
129
156
  mounted: boolean;
130
157
  transitionStatus: import("../../internals/useTransitionStatus.js").TransitionStatus;
131
158
  floatingRootContext: import("../../floating-ui-react/index.js").FloatingRootContext;
159
+ floatingId: string | undefined;
160
+ triggerCount: number;
132
161
  preventUnmountingOnClose: boolean;
133
162
  payload: unknown;
134
163
  activeTriggerId: string | null;
@@ -146,6 +175,8 @@ declare const selectors: {
146
175
  mounted: boolean;
147
176
  transitionStatus: import("../../internals/useTransitionStatus.js").TransitionStatus;
148
177
  floatingRootContext: import("../../floating-ui-react/index.js").FloatingRootContext;
178
+ floatingId: string | undefined;
179
+ triggerCount: number;
149
180
  preventUnmountingOnClose: boolean;
150
181
  payload: unknown;
151
182
  activeTriggerId: string | null;
@@ -163,6 +194,8 @@ declare const selectors: {
163
194
  mounted: boolean;
164
195
  transitionStatus: import("../../internals/useTransitionStatus.js").TransitionStatus;
165
196
  floatingRootContext: import("../../floating-ui-react/index.js").FloatingRootContext;
197
+ floatingId: string | undefined;
198
+ triggerCount: number;
166
199
  preventUnmountingOnClose: boolean;
167
200
  payload: unknown;
168
201
  activeTriggerId: string | null;
@@ -180,6 +213,8 @@ declare const selectors: {
180
213
  mounted: boolean;
181
214
  transitionStatus: import("../../internals/useTransitionStatus.js").TransitionStatus;
182
215
  floatingRootContext: import("../../floating-ui-react/index.js").FloatingRootContext;
216
+ floatingId: string | undefined;
217
+ triggerCount: number;
183
218
  preventUnmountingOnClose: boolean;
184
219
  payload: unknown;
185
220
  activeTriggerId: string | null;
@@ -191,12 +226,33 @@ declare const selectors: {
191
226
  inactiveTriggerProps: HTMLProps;
192
227
  popupProps: HTMLProps;
193
228
  }) => Element | null;
229
+ popupId: (state: {
230
+ open: boolean;
231
+ readonly openProp: boolean | undefined;
232
+ mounted: boolean;
233
+ transitionStatus: import("../../internals/useTransitionStatus.js").TransitionStatus;
234
+ floatingRootContext: import("../../floating-ui-react/index.js").FloatingRootContext;
235
+ floatingId: string | undefined;
236
+ triggerCount: number;
237
+ preventUnmountingOnClose: boolean;
238
+ payload: unknown;
239
+ activeTriggerId: string | null;
240
+ activeTriggerElement: Element | null;
241
+ readonly triggerIdProp: string | null | undefined;
242
+ popupElement: HTMLElement | null;
243
+ positionerElement: HTMLElement | null;
244
+ activeTriggerProps: HTMLProps;
245
+ inactiveTriggerProps: HTMLProps;
246
+ popupProps: HTMLProps;
247
+ }) => string | undefined;
194
248
  isTriggerActive: (state: {
195
249
  open: boolean;
196
250
  readonly openProp: boolean | undefined;
197
251
  mounted: boolean;
198
252
  transitionStatus: import("../../internals/useTransitionStatus.js").TransitionStatus;
199
253
  floatingRootContext: import("../../floating-ui-react/index.js").FloatingRootContext;
254
+ floatingId: string | undefined;
255
+ triggerCount: number;
200
256
  preventUnmountingOnClose: boolean;
201
257
  payload: unknown;
202
258
  activeTriggerId: string | null;
@@ -214,6 +270,8 @@ declare const selectors: {
214
270
  mounted: boolean;
215
271
  transitionStatus: import("../../internals/useTransitionStatus.js").TransitionStatus;
216
272
  floatingRootContext: import("../../floating-ui-react/index.js").FloatingRootContext;
273
+ floatingId: string | undefined;
274
+ triggerCount: number;
217
275
  preventUnmountingOnClose: boolean;
218
276
  payload: unknown;
219
277
  activeTriggerId: string | null;
@@ -231,6 +289,8 @@ declare const selectors: {
231
289
  mounted: boolean;
232
290
  transitionStatus: import("../../internals/useTransitionStatus.js").TransitionStatus;
233
291
  floatingRootContext: import("../../floating-ui-react/index.js").FloatingRootContext;
292
+ floatingId: string | undefined;
293
+ triggerCount: number;
234
294
  preventUnmountingOnClose: boolean;
235
295
  payload: unknown;
236
296
  activeTriggerId: string | null;
@@ -248,6 +308,8 @@ declare const selectors: {
248
308
  mounted: boolean;
249
309
  transitionStatus: import("../../internals/useTransitionStatus.js").TransitionStatus;
250
310
  floatingRootContext: import("../../floating-ui-react/index.js").FloatingRootContext;
311
+ floatingId: string | undefined;
312
+ triggerCount: number;
251
313
  preventUnmountingOnClose: boolean;
252
314
  payload: unknown;
253
315
  activeTriggerId: string | null;
@@ -259,12 +321,33 @@ declare const selectors: {
259
321
  inactiveTriggerProps: HTMLProps;
260
322
  popupProps: HTMLProps;
261
323
  }, isActive: boolean) => HTMLProps;
324
+ triggerPopupId: (state: {
325
+ open: boolean;
326
+ readonly openProp: boolean | undefined;
327
+ mounted: boolean;
328
+ transitionStatus: import("../../internals/useTransitionStatus.js").TransitionStatus;
329
+ floatingRootContext: import("../../floating-ui-react/index.js").FloatingRootContext;
330
+ floatingId: string | undefined;
331
+ triggerCount: number;
332
+ preventUnmountingOnClose: boolean;
333
+ payload: unknown;
334
+ activeTriggerId: string | null;
335
+ activeTriggerElement: Element | null;
336
+ readonly triggerIdProp: string | null | undefined;
337
+ popupElement: HTMLElement | null;
338
+ positionerElement: HTMLElement | null;
339
+ activeTriggerProps: HTMLProps;
340
+ inactiveTriggerProps: HTMLProps;
341
+ popupProps: HTMLProps;
342
+ }, triggerId: string | undefined) => string | undefined;
262
343
  popupProps: (state: {
263
344
  open: boolean;
264
345
  readonly openProp: boolean | undefined;
265
346
  mounted: boolean;
266
347
  transitionStatus: import("../../internals/useTransitionStatus.js").TransitionStatus;
267
348
  floatingRootContext: import("../../floating-ui-react/index.js").FloatingRootContext;
349
+ floatingId: string | undefined;
350
+ triggerCount: number;
268
351
  preventUnmountingOnClose: boolean;
269
352
  payload: unknown;
270
353
  activeTriggerId: string | null;
@@ -282,6 +365,8 @@ declare const selectors: {
282
365
  mounted: boolean;
283
366
  transitionStatus: import("../../internals/useTransitionStatus.js").TransitionStatus;
284
367
  floatingRootContext: import("../../floating-ui-react/index.js").FloatingRootContext;
368
+ floatingId: string | undefined;
369
+ triggerCount: number;
285
370
  preventUnmountingOnClose: boolean;
286
371
  payload: unknown;
287
372
  activeTriggerId: string | null;
@@ -299,6 +384,8 @@ declare const selectors: {
299
384
  mounted: boolean;
300
385
  transitionStatus: import("../../internals/useTransitionStatus.js").TransitionStatus;
301
386
  floatingRootContext: import("../../floating-ui-react/index.js").FloatingRootContext;
387
+ floatingId: string | undefined;
388
+ triggerCount: number;
302
389
  preventUnmountingOnClose: boolean;
303
390
  payload: unknown;
304
391
  activeTriggerId: string | null;
@@ -6,7 +6,8 @@ import { isElementDisabled } from '@base-ui/utils/isElementDisabled';
6
6
  import { useIsoLayoutEffect } from '@base-ui/utils/useIsoLayoutEffect';
7
7
  import { warn } from '@base-ui/utils/warn';
8
8
  import { SafeReact } from '@base-ui/utils/safeReact';
9
- import { safePolygon, useClick, useHoverReferenceInteraction, useInteractions } from "../../floating-ui-react/index.js";
9
+ import { EMPTY_OBJECT } from '@base-ui/utils/empty';
10
+ import { safePolygon, useClick, useHoverReferenceInteraction } from "../../floating-ui-react/index.js";
10
11
  import { useMenuRootContext } from "../root/MenuRootContext.js";
11
12
  import { useBaseUiId } from "../../internals/useBaseUiId.js";
12
13
  import { triggerOpenStateMapping } from "../../utils/popupStateMapping.js";
@@ -23,10 +24,11 @@ import { useMenuSubmenuRootContext } from "../submenu-root/MenuSubmenuRootContex
23
24
  *
24
25
  * Documentation: [Base UI Menu](https://base-ui.com/react/components/menu)
25
26
  */
26
- export const MenuSubmenuTrigger = /*#__PURE__*/React.forwardRef(function SubmenuTriggerComponent(componentProps, forwardedRef) {
27
+ export const MenuSubmenuTrigger = /*#__PURE__*/React.forwardRef(function MenuSubmenuTrigger(componentProps, forwardedRef) {
27
28
  const {
28
29
  render,
29
30
  className,
31
+ style,
30
32
  label,
31
33
  id: idProp,
32
34
  nativeButton = false,
@@ -34,7 +36,6 @@ export const MenuSubmenuTrigger = /*#__PURE__*/React.forwardRef(function Submenu
34
36
  delay = 100,
35
37
  closeDelay = 0,
36
38
  disabled: disabledProp = false,
37
- style,
38
39
  ...elementProps
39
40
  } = componentProps;
40
41
  const listItem = useCompositeListItem();
@@ -46,6 +47,7 @@ export const MenuSubmenuTrigger = /*#__PURE__*/React.forwardRef(function Submenu
46
47
  const open = store.useState('open');
47
48
  const floatingRootContext = store.useState('floatingRootContext');
48
49
  const floatingTreeRoot = store.useState('floatingTreeRoot');
50
+ const popupId = store.useState('triggerPopupId', thisTriggerId);
49
51
  const baseRegisterTrigger = useTriggerRegistration(thisTriggerId, store);
50
52
  const registerTrigger = React.useCallback(element => {
51
53
  const cleanup = baseRegisterTrigger(element);
@@ -128,7 +130,7 @@ export const MenuSubmenuTrigger = /*#__PURE__*/React.forwardRef(function Submenu
128
130
  ignoreMouse: openOnHover,
129
131
  stickIfOpen: false
130
132
  });
131
- const localInteractionProps = useInteractions([click]);
133
+ const localInteractionProps = click.reference ?? EMPTY_OBJECT;
132
134
  const rootTriggerProps = store.useState('triggerProps', true);
133
135
  delete rootTriggerProps.id;
134
136
  const state = {
@@ -139,7 +141,8 @@ export const MenuSubmenuTrigger = /*#__PURE__*/React.forwardRef(function Submenu
139
141
  const element = useRenderElement('div', componentProps, {
140
142
  state,
141
143
  stateAttributesMapping: triggerOpenStateMapping,
142
- props: [localInteractionProps.getReferenceProps(), hoverProps, rootTriggerProps, itemProps, {
144
+ props: [localInteractionProps, hoverProps, rootTriggerProps, itemProps, {
145
+ 'aria-controls': popupId,
143
146
  tabIndex: open || highlighted ? 0 : -1,
144
147
  onBlur() {
145
148
  if (highlighted) {
@@ -8,7 +8,7 @@ import { fastComponentRef } from '@base-ui/utils/fastHooks';
8
8
  import { useStableCallback } from '@base-ui/utils/useStableCallback';
9
9
  import { useIsoLayoutEffect } from '@base-ui/utils/useIsoLayoutEffect';
10
10
  import { EMPTY_OBJECT } from '@base-ui/utils/empty';
11
- import { safePolygon, useClick, useFloatingTree, useFocus, useHoverReferenceInteraction, useInteractions, useFloatingNodeId, useFloatingParentNodeId } from "../../floating-ui-react/index.js";
11
+ import { safePolygon, useClick, useFloatingTree, useFocus, useHoverReferenceInteraction, useFloatingNodeId, useFloatingParentNodeId } from "../../floating-ui-react/index.js";
12
12
  import { FloatingTreeStore } from "../../floating-ui-react/components/FloatingTreeStore.js";
13
13
  import { contains } from "../../floating-ui-react/utils.js";
14
14
  import { useMenuRootContext } from "../root/MenuRootContext.js";
@@ -28,6 +28,7 @@ import { useContextMenuRootContext } from "../../context-menu/root/ContextMenuRo
28
28
  import { useMenubarContext } from "../../menubar/MenubarContext.js";
29
29
  import { PATIENT_CLICK_THRESHOLD } from "../../internals/constants.js";
30
30
  import { FocusGuard } from "../../utils/FocusGuard.js";
31
+ import { mergeProps } from "../../merge-props/index.js";
31
32
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
32
33
  const BOUNDARY_OFFSET = 2;
33
34
 
@@ -41,6 +42,7 @@ export const MenuTrigger = fastComponentRef(function MenuTrigger(componentProps,
41
42
  const {
42
43
  render,
43
44
  className,
45
+ style,
44
46
  disabled: disabledProp = false,
45
47
  nativeButton = true,
46
48
  id: idProp,
@@ -49,7 +51,6 @@ export const MenuTrigger = fastComponentRef(function MenuTrigger(componentProps,
49
51
  closeDelay = 0,
50
52
  handle,
51
53
  payload,
52
- style,
53
54
  ...elementProps
54
55
  } = componentProps;
55
56
  const rootContext = useMenuRootContext(true);
@@ -61,6 +62,7 @@ export const MenuTrigger = fastComponentRef(function MenuTrigger(componentProps,
61
62
  const isTriggerActive = store.useState('isTriggerActive', thisTriggerId);
62
63
  const floatingRootContext = store.useState('floatingRootContext');
63
64
  const isOpenedByThisTrigger = store.useState('isOpenedByTrigger', thisTriggerId);
65
+ const popupId = store.useState('triggerPopupId', thisTriggerId);
64
66
  const triggerElementRef = React.useRef(null);
65
67
  const parent = useMenuParent();
66
68
  const compositeRootContext = useCompositeRootContext(true);
@@ -167,15 +169,21 @@ export const MenuTrigger = fastComponentRef(function MenuTrigger(componentProps,
167
169
  enabled: isInMenubar,
168
170
  mouseDownAction: 'open'
169
171
  });
170
- const localInteractionProps = useInteractions([click, focus]);
172
+ const localInteractionProps = React.useMemo(() => mergeProps(focus.reference, click.reference), [focus.reference, click.reference]);
173
+ const rootTriggerProps = store.useState('triggerProps', isMountedByThisTrigger);
174
+ const {
175
+ preFocusGuardRef,
176
+ handlePreFocusGuardFocus,
177
+ handleFocusTargetFocus
178
+ } = useTriggerFocusGuards(store, triggerElementRef);
171
179
  const state = {
172
180
  disabled,
173
181
  open: isOpenedByThisTrigger
174
182
  };
175
- const rootTriggerProps = store.useState('triggerProps', isMountedByThisTrigger);
176
183
  const ref = [triggerRef, forwardedRef, buttonRef, registerTrigger, triggerElementRef];
177
- const props = [localInteractionProps.getReferenceProps(), hoverProps ?? EMPTY_OBJECT, rootTriggerProps, {
184
+ const props = [localInteractionProps, hoverProps ?? EMPTY_OBJECT, rootTriggerProps, {
178
185
  'aria-haspopup': 'menu',
186
+ 'aria-controls': popupId,
179
187
  id: thisTriggerId,
180
188
  onMouseDown: event => {
181
189
  if (store.select('open')) {
@@ -194,11 +202,6 @@ export const MenuTrigger = fastComponentRef(function MenuTrigger(componentProps,
194
202
  }, isInMenubar ? {
195
203
  role: 'menuitem'
196
204
  } : {}, mixedToggleHandlers, elementProps, getButtonProps];
197
- const {
198
- preFocusGuardRef,
199
- handlePreFocusGuardFocus,
200
- handleFocusTargetFocus
201
- } = useTriggerFocusGuards(store, triggerElementRef);
202
205
  const element = useRenderElement('button', componentProps, {
203
206
  enabled: !isInMenubar,
204
207
  stateAttributesMapping: pressableTriggerOpenStateMapping,
@@ -2,8 +2,8 @@ import * as React from 'react';
2
2
  import { BaseUIComponentProps } from "../../internals/types.js";
3
3
  /**
4
4
  * A viewport for displaying content transitions.
5
- * This component is only required if one popup can be opened by multiple triggers, its content change based on the trigger
6
- * and switching between them is animated.
5
+ * This component is only required if one popup can be opened by multiple triggers, its content
6
+ * changes based on the trigger, and switching between them is animated.
7
7
  * Renders a `<div>` element.
8
8
  *
9
9
  * Documentation: [Base UI Menu](https://base-ui.com/react/components/menu)
@@ -14,8 +14,8 @@ const stateAttributesMapping = {
14
14
 
15
15
  /**
16
16
  * A viewport for displaying content transitions.
17
- * This component is only required if one popup can be opened by multiple triggers, its content change based on the trigger
18
- * and switching between them is animated.
17
+ * This component is only required if one popup can be opened by multiple triggers, its content
18
+ * changes based on the trigger, and switching between them is animated.
19
19
  * Renders a `<div>` element.
20
20
  *
21
21
  * Documentation: [Base UI Menu](https://base-ui.com/react/components/menu)
@@ -14,8 +14,8 @@ import { useRenderElement } from "../../internals/useRenderElement.js";
14
14
  */
15
15
  export const NavigationMenuArrow = /*#__PURE__*/React.forwardRef(function NavigationMenuArrow(componentProps, forwardedRef) {
16
16
  const {
17
- className,
18
17
  render,
18
+ className,
19
19
  style,
20
20
  ...elementProps
21
21
  } = componentProps;
@@ -18,8 +18,8 @@ const stateAttributesMapping = {
18
18
  */
19
19
  export const NavigationMenuBackdrop = /*#__PURE__*/React.forwardRef(function NavigationMenuBackdrop(componentProps, forwardedRef) {
20
20
  const {
21
- className,
22
21
  render,
22
+ className,
23
23
  style,
24
24
  ...elementProps
25
25
  } = componentProps;
@@ -3,6 +3,7 @@
3
3
  import * as React from 'react';
4
4
  import * as ReactDOM from 'react-dom';
5
5
  import { useIsoLayoutEffect } from '@base-ui/utils/useIsoLayoutEffect';
6
+ import { useStableCallback } from '@base-ui/utils/useStableCallback';
6
7
  import { inertValue } from '@base-ui/utils/inertValue';
7
8
  import { EMPTY_OBJECT } from '@base-ui/utils/empty';
8
9
  import { FloatingNode } from "../../floating-ui-react/index.js";
@@ -37,10 +38,10 @@ const stateAttributesMapping = {
37
38
  */
38
39
  export const NavigationMenuContent = /*#__PURE__*/React.forwardRef(function NavigationMenuContent(componentProps, forwardedRef) {
39
40
  const {
40
- className,
41
41
  render,
42
- keepMounted = false,
42
+ className,
43
43
  style,
44
+ keepMounted = false,
44
45
  ...elementProps
45
46
  } = componentProps;
46
47
  const {
@@ -94,11 +95,13 @@ export const NavigationMenuContent = /*#__PURE__*/React.forwardRef(function Navi
94
95
  transitionStatus,
95
96
  activationDirection
96
97
  };
97
- const handleCurrentContentRef = React.useCallback(node => {
98
- if (node) {
98
+ const handleCurrentContentRef = useStableCallback(node => {
99
+ // Inactive `keepMounted` content also mounts in the viewport; only the
100
+ // active content can own the shared sizing observer target.
101
+ if (node && open) {
99
102
  currentContentRef.current = node;
100
103
  }
101
- }, [currentContentRef]);
104
+ });
102
105
  const commonProps = {
103
106
  onFocus(event) {
104
107
  const target = getTarget(event.nativeEvent);
@@ -13,8 +13,8 @@ import { useNavigationMenuItemContext } from "../item/NavigationMenuItemContext.
13
13
  */
14
14
  export const NavigationMenuIcon = /*#__PURE__*/React.forwardRef(function NavigationMenuIcon(componentProps, forwardedRef) {
15
15
  const {
16
- className,
17
16
  render,
17
+ className,
18
18
  style,
19
19
  ...elementProps
20
20
  } = componentProps;
@@ -14,10 +14,10 @@ import { useBaseUiId } from "../../internals/useBaseUiId.js";
14
14
  import { jsx as _jsx } from "react/jsx-runtime";
15
15
  export const NavigationMenuItem = /*#__PURE__*/React.forwardRef(function NavigationMenuItem(componentProps, forwardedRef) {
16
16
  const {
17
- className,
18
17
  render,
19
- value: valueProp,
18
+ className,
20
19
  style,
20
+ value: valueProp,
21
21
  ...elementProps
22
22
  } = componentProps;
23
23
  const fallbackValue = useBaseUiId();
@@ -20,8 +20,8 @@ import { useRenderElement } from "../../internals/useRenderElement.js";
20
20
  import { jsx as _jsx } from "react/jsx-runtime";
21
21
  export const NavigationMenuList = /*#__PURE__*/React.forwardRef(function NavigationMenuList(componentProps, forwardedRef) {
22
22
  const {
23
- className,
24
23
  render,
24
+ className,
25
25
  style,
26
26
  ...elementProps
27
27
  } = componentProps;
@@ -21,10 +21,10 @@ const stateAttributesMapping = {
21
21
  */
22
22
  export const NavigationMenuPopup = /*#__PURE__*/React.forwardRef(function NavigationMenuPopup(componentProps, forwardedRef) {
23
23
  const {
24
- className,
25
24
  render,
26
- id: idProp,
25
+ className,
27
26
  style,
27
+ id: idProp,
28
28
  ...elementProps
29
29
  } = componentProps;
30
30
  const {
@@ -217,9 +217,7 @@ function TreeContext(props) {
217
217
  const nodeId = useFloatingNodeId();
218
218
  const {
219
219
  rootRef,
220
- nested
221
- } = useNavigationMenuRootContext();
222
- const {
220
+ nested,
223
221
  open
224
222
  } = useNavigationMenuRootContext();
225
223
  const state = {
@@ -11,7 +11,7 @@ import { useTimeout } from '@base-ui/utils/useTimeout';
11
11
  import { useAnimationFrame } from '@base-ui/utils/useAnimationFrame';
12
12
  import { useValueAsRef } from '@base-ui/utils/useValueAsRef';
13
13
  import { EMPTY_ARRAY } from '@base-ui/utils/empty';
14
- import { safePolygon, useClick, useFloatingRootContext, useFloatingTree, useHoverReferenceInteraction, useInteractions } from "../../floating-ui-react/index.js";
14
+ import { safePolygon, useClick, useFloatingRootContext, useFloatingTree, useHoverReferenceInteraction } from "../../floating-ui-react/index.js";
15
15
  import { applySafePolygonPointerEventsMutation, clearSafePolygonPointerEventsMutation, useHoverInteractionSharedState } from "../../floating-ui-react/hooks/useHoverInteractionSharedState.js";
16
16
  import { contains, getTabbableAfterElement, getNextTabbable, getPreviousTabbable, isOutsideEvent, stopEvent } from "../../floating-ui-react/utils.js";
17
17
  import { useNavigationMenuItemContext } from "../item/NavigationMenuItemContext.js";
@@ -31,6 +31,8 @@ import { NAVIGATION_MENU_TRIGGER_IDENTIFIER } from "../utils/constants.js";
31
31
  import { useNavigationMenuDismissContext } from "../list/NavigationMenuDismissContext.js";
32
32
  import { NavigationMenuPopupCssVars } from "../popup/NavigationMenuPopupCssVars.js";
33
33
  import { NavigationMenuPositionerCssVars } from "../positioner/NavigationMenuPositionerCssVars.js";
34
+ import { mergeProps } from "../../merge-props/index.js";
35
+ import { useDirection } from "../../internals/direction-context/DirectionContext.js";
34
36
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
35
37
  const DEFAULT_SIZE = {
36
38
  width: 0,
@@ -46,11 +48,11 @@ const DEFAULT_SIZE = {
46
48
  */
47
49
  export const NavigationMenuTrigger = /*#__PURE__*/React.forwardRef(function NavigationMenuTrigger(componentProps, forwardedRef) {
48
50
  const {
49
- className,
50
51
  render,
52
+ className,
53
+ style,
51
54
  nativeButton = true,
52
55
  disabled,
53
- style,
54
56
  ...elementProps
55
57
  } = componentProps;
56
58
  const {
@@ -84,6 +86,7 @@ export const NavigationMenuTrigger = /*#__PURE__*/React.forwardRef(function Navi
84
86
  const nodeId = useNavigationMenuTreeContext();
85
87
  const tree = useFloatingTree();
86
88
  const dismissProps = useNavigationMenuDismissContext();
89
+ const direction = useDirection();
87
90
  const stickIfOpenTimeout = useTimeout();
88
91
  const focusFrame = useAnimationFrame();
89
92
  const mutationFrame = useAnimationFrame();
@@ -343,7 +346,11 @@ export const NavigationMenuTrigger = /*#__PURE__*/React.forwardRef(function Navi
343
346
  mutationObserver.observe(observedElement, {
344
347
  childList: true,
345
348
  subtree: true,
346
- characterData: true
349
+ characterData: true,
350
+ // `keepMounted` submenu switches update dimensions by toggling hidden
351
+ // content rather than inserting or removing content nodes.
352
+ attributes: true,
353
+ attributeFilter: ['hidden']
347
354
  });
348
355
  return () => {
349
356
  mutationObserver.disconnect();
@@ -362,14 +369,15 @@ export const NavigationMenuTrigger = /*#__PURE__*/React.forwardRef(function Navi
362
369
  }, [beforeOutsideRef, focusFrame, isActiveItem, open, popupElement]);
363
370
  useIsoLayoutEffect(() => {
364
371
  if (isActiveItemRef.current && open && popupElement) {
365
- if (transitionStatus === 'starting') {
366
- const hasNestedMenu = currentContentRef.current?.querySelector('[data-nested]') != null;
367
- if (hasNestedMenu) {
368
- sizeFrame.request(syncCurrentSize);
369
- return () => {
370
- sizeFrame.cancel();
371
- };
372
- }
372
+ const hasNestedMenu = currentContentRef.current?.querySelector('[data-nested]') != null;
373
+ if (transitionStatus === 'starting' && hasNestedMenu) {
374
+ // Inline nested menus can reveal their default content after the
375
+ // top-level content enters the viewport. Defer once so the opening
376
+ // size is measured from the final nested content, not the shell.
377
+ sizeFrame.request(syncCurrentSize);
378
+ return () => {
379
+ sizeFrame.cancel();
380
+ };
373
381
  }
374
382
  if (skipAutoSizeSyncRef.current) {
375
383
  skipAutoSizeSyncRef.current = false;
@@ -472,9 +480,7 @@ export const NavigationMenuTrigger = /*#__PURE__*/React.forwardRef(function Navi
472
480
  stickIfOpen,
473
481
  toggle: isActiveItem
474
482
  });
475
- const {
476
- getReferenceProps
477
- } = useInteractions([hover, click]);
483
+ const referenceProps = React.useMemo(() => mergeProps(click.reference, hover?.reference), [click.reference, hover]);
478
484
  useIsoLayoutEffect(() => {
479
485
  if (isActiveItem) {
480
486
  setFloatingRootContext(context);
@@ -578,8 +584,9 @@ export const NavigationMenuTrigger = /*#__PURE__*/React.forwardRef(function Navi
578
584
  if (nested) {
579
585
  return;
580
586
  }
587
+ const verticalOpenKey = direction === 'rtl' ? 'ArrowLeft' : 'ArrowRight';
581
588
  const openHorizontal = orientation === 'horizontal' && event.key === 'ArrowDown';
582
- const openVertical = orientation === 'vertical' && event.key === 'ArrowRight';
589
+ const openVertical = orientation === 'vertical' && event.key === verticalOpenKey;
583
590
  if (openHorizontal || openVertical) {
584
591
  setValue(itemValue, createChangeEventDetails(REASONS.listNavigation, event.nativeEvent));
585
592
  handleOpenEvent(event);
@@ -618,7 +625,7 @@ export const NavigationMenuTrigger = /*#__PURE__*/React.forwardRef(function Navi
618
625
  state: state,
619
626
  stateAttributesMapping: pressableTriggerOpenStateMapping,
620
627
  refs: [forwardedRef, handleTriggerElement, buttonRef],
621
- props: [getReferenceProps, dismissProps?.reference || EMPTY_ARRAY, defaultProps, elementProps, getButtonProps]
628
+ props: [referenceProps, dismissProps?.reference || EMPTY_ARRAY, defaultProps, elementProps, getButtonProps]
622
629
  }), isActiveItem && /*#__PURE__*/_jsxs(React.Fragment, {
623
630
  children: [/*#__PURE__*/_jsx(FocusGuard, {
624
631
  ref: beforeOutsideRef,
@@ -5,7 +5,6 @@ interface Targets {
5
5
  }
6
6
  interface Params {
7
7
  popupElement: HTMLElement | null;
8
- viewportElement?: HTMLElement | null | undefined;
9
8
  rootRef: React.RefObject<HTMLDivElement | null>;
10
9
  tree: FloatingTreeType | null;
11
10
  nodeId: string | undefined;
@@ -5,7 +5,6 @@ export function isOutsideMenuEvent({
5
5
  }, params) {
6
6
  const {
7
7
  popupElement,
8
- viewportElement,
9
8
  rootRef,
10
9
  tree,
11
10
  nodeId
@@ -17,8 +16,5 @@ export function isOutsideMenuEvent({
17
16
  if (!popupElement) {
18
17
  return !contains(rootRef.current, relatedTarget) && !nodeChildrenContains;
19
18
  }
20
-
21
- // Use popupElement as the primary floating element, but fall back to viewportElement if needed
22
- const floatingElement = popupElement || viewportElement;
23
- return !contains(floatingElement, currentTarget) && !contains(floatingElement, relatedTarget) && !contains(rootRef.current, relatedTarget) && !nodeChildrenContains && !(contains(floatingElement, relatedTarget) && relatedTarget?.hasAttribute('data-base-ui-focus-guard'));
19
+ return !contains(popupElement, currentTarget) && !contains(popupElement, relatedTarget) && !contains(rootRef.current, relatedTarget) && !nodeChildrenContains && !(contains(popupElement, relatedTarget) && relatedTarget?.hasAttribute('data-base-ui-focus-guard'));
24
20
  }
@@ -58,14 +58,13 @@ function Guards({
58
58
  *
59
59
  * Documentation: [Base UI Navigation Menu](https://base-ui.com/react/components/navigation-menu)
60
60
  */
61
-
62
61
  export const NavigationMenuViewport = /*#__PURE__*/React.forwardRef(function NavigationMenuViewport(componentProps, forwardedRef) {
63
62
  const {
64
- className,
65
63
  render,
64
+ className,
65
+ style,
66
66
  children,
67
67
  id: idProp,
68
- style,
69
68
  ...elementProps
70
69
  } = componentProps;
71
70
  const id = useId(idProp);