@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
@@ -2,12 +2,13 @@
2
2
 
3
3
  import _formatErrorMessage from "@base-ui/utils/formatErrorMessage";
4
4
  import * as React from 'react';
5
+ import { fastComponentRef } from '@base-ui/utils/fastHooks';
5
6
  import { useIsoLayoutEffect } from '@base-ui/utils/useIsoLayoutEffect';
6
7
  import { usePreviewCardRootContext } from "../root/PreviewCardContext.js";
7
8
  import { triggerOpenStateMapping } from "../../utils/popupStateMapping.js";
8
9
  import { useRenderElement } from "../../internals/useRenderElement.js";
9
10
  import { useBaseUiId } from "../../internals/useBaseUiId.js";
10
- import { useTriggerDataForwarding } from "../../utils/popups/index.js";
11
+ import { getInlineRectTriggerProps, useTriggerDataForwarding } from "../../utils/popups/index.js";
11
12
  import { CLOSE_DELAY, OPEN_DELAY } from "../utils/constants.js";
12
13
  import { safePolygon, useFocus, useHoverReferenceInteraction } from "../../floating-ui-react/index.js";
13
14
 
@@ -17,7 +18,7 @@ import { safePolygon, useFocus, useHoverReferenceInteraction } from "../../float
17
18
  *
18
19
  * Documentation: [Base UI Preview Card](https://base-ui.com/react/components/preview-card)
19
20
  */
20
- export const PreviewCardTrigger = /*#__PURE__*/React.forwardRef(function PreviewCardTrigger(componentProps, forwardedRef) {
21
+ export const PreviewCardTrigger = fastComponentRef(function PreviewCardTrigger(componentProps, forwardedRef) {
21
22
  const {
22
23
  render,
23
24
  className,
@@ -38,6 +39,7 @@ export const PreviewCardTrigger = /*#__PURE__*/React.forwardRef(function Preview
38
39
  const isTriggerActive = store.useState('isTriggerActive', thisTriggerId);
39
40
  const isOpenedByThisTrigger = store.useState('isOpenedByTrigger', thisTriggerId);
40
41
  const floatingRootContext = store.useState('floatingRootContext');
42
+ const inlineRectCoordsRef = store.context.inlineRectCoordsRef;
41
43
  const triggerElementRef = React.useRef(null);
42
44
  const delayWithDefault = delay ?? OPEN_DELAY;
43
45
  const closeDelayWithDefault = closeDelay ?? CLOSE_DELAY;
@@ -71,10 +73,11 @@ export const PreviewCardTrigger = /*#__PURE__*/React.forwardRef(function Preview
71
73
  open: isOpenedByThisTrigger
72
74
  };
73
75
  const rootTriggerProps = store.useState('triggerProps', isMountedByThisTrigger);
76
+ const inlineRectTriggerProps = getInlineRectTriggerProps(inlineRectCoordsRef, isOpenedByThisTrigger);
74
77
  const element = useRenderElement('a', componentProps, {
75
78
  state,
76
79
  ref: [forwardedRef, registerTrigger, triggerElementRef],
77
- props: [hoverProps, focusProps.reference, rootTriggerProps, {
80
+ props: [hoverProps, focusProps.reference, rootTriggerProps, inlineRectTriggerProps, {
78
81
  id: thisTriggerId
79
82
  }, elementProps],
80
83
  stateAttributesMapping: triggerOpenStateMapping
@@ -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 Preview Card](https://base-ui.com/react/components/preview-card)
@@ -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 Preview Card](https://base-ui.com/react/components/preview-card)
@@ -11,7 +11,7 @@ export declare enum PreviewCardViewportDataAttributes {
11
11
  * Indicates the direction from which the popup was activated.
12
12
  * This can be used to create directional animations based on how the popup was triggered.
13
13
  * Contains space-separated values for both horizontal and vertical axes.
14
- * @type {`${'left' | 'right'} {'top' | 'bottom'}`}
14
+ * @type {`${'left' | 'right'} ${'top' | 'bottom'}`}
15
15
  */
16
16
  activationDirection = "data-activation-direction",
17
17
  /**
@@ -20,7 +20,7 @@ export declare enum PreviewCardViewportDataAttributes {
20
20
  transitioning = "data-transitioning",
21
21
  /**
22
22
  * Present if animations should be instant.
23
- * @type {'delay' | 'dismiss' | 'focus'}
23
+ * @type {'dismiss' | 'focus'}
24
24
  */
25
25
  instant = "data-instant",
26
26
  }
@@ -11,7 +11,7 @@ export let PreviewCardViewportDataAttributes = /*#__PURE__*/function (PreviewCar
11
11
  * Indicates the direction from which the popup was activated.
12
12
  * This can be used to create directional animations based on how the popup was triggered.
13
13
  * Contains space-separated values for both horizontal and vertical axes.
14
- * @type {`${'left' | 'right'} {'top' | 'bottom'}`}
14
+ * @type {`${'left' | 'right'} ${'top' | 'bottom'}`}
15
15
  */
16
16
  PreviewCardViewportDataAttributes["activationDirection"] = "data-activation-direction";
17
17
  /**
@@ -20,7 +20,7 @@ export let PreviewCardViewportDataAttributes = /*#__PURE__*/function (PreviewCar
20
20
  PreviewCardViewportDataAttributes["transitioning"] = "data-transitioning";
21
21
  /**
22
22
  * Present if animations should be instant.
23
- * @type {'delay' | 'dismiss' | 'focus'}
23
+ * @type {'dismiss' | 'focus'}
24
24
  */
25
25
  PreviewCardViewportDataAttributes["instant"] = "data-instant";
26
26
  return PreviewCardViewportDataAttributes;
@@ -25,21 +25,16 @@ export const ProgressIndicator = /*#__PURE__*/React.forwardRef(function Progress
25
25
  state
26
26
  } = useProgressRootContext();
27
27
  const percentageValue = Number.isFinite(value) && value !== null ? valueToPercent(value, min, max) : null;
28
- const getStyles = React.useCallback(() => {
29
- if (percentageValue == null) {
30
- return {};
31
- }
32
- return {
33
- insetInlineStart: 0,
34
- height: 'inherit',
35
- width: `${percentageValue}%`
36
- };
37
- }, [percentageValue]);
28
+ const indicatorStyle = percentageValue == null ? {} : {
29
+ insetInlineStart: 0,
30
+ height: 'inherit',
31
+ width: `${percentageValue}%`
32
+ };
38
33
  const element = useRenderElement('div', componentProps, {
39
34
  state,
40
35
  ref: forwardedRef,
41
36
  props: [{
42
- style: getStyles()
37
+ style: indicatorStyle
43
38
  }, elementProps],
44
39
  stateAttributesMapping: progressStateAttributesMapping
45
40
  });
@@ -16,7 +16,7 @@ export interface ProgressRootState {
16
16
  }
17
17
  export interface ProgressRootProps extends BaseUIComponentProps<'div', ProgressRootState> {
18
18
  /**
19
- * A string value that provides a user-friendly name for `aria-valuenow`, the current value of the meter.
19
+ * A string value that provides a user-friendly name for `aria-valuenow`, the current value of the progress bar.
20
20
  */
21
21
  'aria-valuetext'?: React.AriaAttributes['aria-valuetext'] | undefined;
22
22
  /**
@@ -6,6 +6,7 @@ import { useIsoLayoutEffect } from '@base-ui/utils/useIsoLayoutEffect';
6
6
  import { useStableCallback } from '@base-ui/utils/useStableCallback';
7
7
  import { visuallyHidden, visuallyHiddenInput } from '@base-ui/utils/visuallyHidden';
8
8
  import { EMPTY_OBJECT } from '@base-ui/utils/empty';
9
+ import { ownerWindow } from '@base-ui/utils/owner';
9
10
  import { createChangeEventDetails } from "../../internals/createBaseUIEventDetails.js";
10
11
  import { REASONS } from "../../internals/reasons.js";
11
12
  import { NOOP } from "../../internals/noop.js";
@@ -79,7 +80,6 @@ export const RadioRoot = /*#__PURE__*/React.forwardRef(function RadioRoot(compon
79
80
  const required = requiredGroup || requiredProp;
80
81
  const form = formGroup;
81
82
  const checked = groupContext ? checkedValue === value : value === '';
82
- const serializedValue = React.useMemo(() => serializeValue(value), [value]);
83
83
  const radioRef = React.useRef(null);
84
84
  const inputRef = React.useRef(null);
85
85
  const handleControlRef = useStableCallback(element => {
@@ -133,7 +133,11 @@ export const RadioRoot = /*#__PURE__*/React.forwardRef(function RadioRoot(compon
133
133
  return;
134
134
  }
135
135
  event.preventDefault();
136
- inputRef.current?.dispatchEvent(new PointerEvent('click', {
136
+ const input = inputRef.current;
137
+ if (!input) {
138
+ return;
139
+ }
140
+ input.dispatchEvent(new (ownerWindow(input).PointerEvent)('click', {
137
141
  bubbles: true,
138
142
  shiftKey: event.shiftKey,
139
143
  ctrlKey: event.ctrlKey,
@@ -166,7 +170,7 @@ export const RadioRoot = /*#__PURE__*/React.forwardRef(function RadioRoot(compon
166
170
  style: name ? visuallyHiddenInput : visuallyHidden,
167
171
  'aria-hidden': true,
168
172
  ...(value !== undefined ? {
169
- value: serializedValue
173
+ value: serializeValue(value)
170
174
  } : EMPTY_OBJECT),
171
175
  disabled,
172
176
  checked,
@@ -70,9 +70,9 @@ export const RadioGroup = /*#__PURE__*/React.forwardRef(function RadioGroup(comp
70
70
  name: 'RadioGroup',
71
71
  state: 'value'
72
72
  });
73
- const onValueChange = useStableCallback(onValueChangeProp);
73
+ const [touched, setTouched] = React.useState(false);
74
74
  const setCheckedValue = useStableCallback((value, eventDetails) => {
75
- onValueChange(value, eventDetails);
75
+ onValueChangeProp?.(value, eventDetails);
76
76
  if (eventDetails.isCanceled) {
77
77
  return;
78
78
  }
@@ -121,12 +121,7 @@ export const RadioGroup = /*#__PURE__*/React.forwardRef(function RadioGroup(comp
121
121
  }
122
122
  return undefined;
123
123
  });
124
- const getFieldValue = useStableCallback(() => checkedValue ?? null);
125
- useRegisterFieldControl(controlRef, {
126
- id,
127
- value: checkedValue,
128
- getValue: getFieldValue
129
- });
124
+ useRegisterFieldControl(controlRef, id, checkedValue ?? null);
130
125
  useValueChanged(checkedValue, () => {
131
126
  clearErrors(name);
132
127
  setDirty(checkedValue !== validityData.initialValue);
@@ -141,7 +136,6 @@ export const RadioGroup = /*#__PURE__*/React.forwardRef(function RadioGroup(comp
141
136
  setInputRef(fallbackInput);
142
137
  }
143
138
  });
144
- const [touched, setTouched] = React.useState(false);
145
139
  const ariaLabelledby = elementProps['aria-labelledby'] ?? labelId ?? fieldsetContext?.legendId;
146
140
  const state = {
147
141
  ...fieldState,
@@ -156,7 +150,6 @@ export const RadioGroup = /*#__PURE__*/React.forwardRef(function RadioGroup(comp
156
150
  form,
157
151
  validation,
158
152
  name,
159
- onValueChange,
160
153
  readOnly,
161
154
  registerControlRef,
162
155
  registerInputRef,
@@ -164,7 +157,7 @@ export const RadioGroup = /*#__PURE__*/React.forwardRef(function RadioGroup(comp
164
157
  setCheckedValue,
165
158
  setTouched,
166
159
  touched
167
- }), [checkedValue, disabled, form, validation, fieldState, name, onValueChange, readOnly, registerControlRef, registerInputRef, required, setCheckedValue, setTouched, touched]);
160
+ }), [checkedValue, disabled, form, validation, fieldState, name, readOnly, registerControlRef, registerInputRef, required, setCheckedValue, setTouched, touched]);
168
161
  const defaultProps = {
169
162
  role: 'radiogroup',
170
163
  'aria-required': required || undefined,
@@ -10,7 +10,6 @@ export interface RadioGroupContext<Value> {
10
10
  name: string | undefined;
11
11
  checkedValue: Value | undefined;
12
12
  setCheckedValue: (value: Value, eventDetails: BaseUIChangeEventDetails<BaseUIEventReasons['none']>) => void;
13
- onValueChange: (value: Value, eventDetails: BaseUIChangeEventDetails<BaseUIEventReasons['none']>) => void;
14
13
  touched: boolean;
15
14
  setTouched: React.Dispatch<React.SetStateAction<boolean>>;
16
15
  validation?: UseFieldValidationReturnValue | undefined;
@@ -19,19 +19,19 @@ export const ScrollAreaContent = /*#__PURE__*/React.forwardRef(function ScrollAr
19
19
  style,
20
20
  ...elementProps
21
21
  } = componentProps;
22
- const contentWrapperRef = React.useRef(null);
23
22
  const {
24
23
  computeThumbPosition
25
24
  } = useScrollAreaViewportContext();
26
25
  const {
27
26
  viewportState
28
27
  } = useScrollAreaRootContext();
28
+ const contentWrapperRef = React.useRef(null);
29
29
  useIsoLayoutEffect(() => {
30
30
  if (typeof ResizeObserver === 'undefined') {
31
31
  return undefined;
32
32
  }
33
33
  let hasInitialized = false;
34
- const ro = new ResizeObserver(() => {
34
+ const resizeObserver = new ResizeObserver(() => {
35
35
  // ResizeObserver fires once upon observing, so we skip the initial call
36
36
  // to avoid double-calculating the thumb position on mount.
37
37
  if (!hasInitialized) {
@@ -41,10 +41,10 @@ export const ScrollAreaContent = /*#__PURE__*/React.forwardRef(function ScrollAr
41
41
  computeThumbPosition();
42
42
  });
43
43
  if (contentWrapperRef.current) {
44
- ro.observe(contentWrapperRef.current);
44
+ resizeObserver.observe(contentWrapperRef.current);
45
45
  }
46
46
  return () => {
47
- ro.disconnect();
47
+ resizeObserver.disconnect();
48
48
  };
49
49
  }, [computeThumbPosition]);
50
50
  const element = useRenderElement('div', componentProps, {
@@ -13,7 +13,7 @@ import { styleDisableScrollbar } from "../../utils/styles.js";
13
13
  import { useBaseUiId } from "../../internals/useBaseUiId.js";
14
14
  import { scrollAreaStateAttributesMapping } from "./stateAttributes.js";
15
15
  import { contains } from "../../floating-ui-react/utils.js";
16
- import { useCSPContext } from "../../csp-provider/CSPContext.js";
16
+ import { useCSPContext } from "../../internals/csp-context/CSPContext.js";
17
17
  import { jsxs as _jsxs } from "react/jsx-runtime";
18
18
  const DEFAULT_COORDS = {
19
19
  x: 0,
@@ -61,7 +61,12 @@ export const ScrollAreaScrollbar = /*#__PURE__*/React.forwardRef(function Scroll
61
61
  };
62
62
  const direction = useDirection();
63
63
  const hideTrackUntilMeasured = !hasMeasuredScrollbar && !keepMounted;
64
+ const isHidden = orientation === 'vertical' ? hiddenState.y : hiddenState.x;
65
+ const shouldRender = keepMounted || !isHidden;
64
66
  React.useEffect(() => {
67
+ if (!shouldRender) {
68
+ return undefined;
69
+ }
65
70
  const viewportEl = viewportRef.current;
66
71
  const scrollbarEl = orientation === 'vertical' ? scrollbarYRef.current : scrollbarXRef.current;
67
72
  if (!scrollbarEl) {
@@ -72,30 +77,23 @@ export const ScrollAreaScrollbar = /*#__PURE__*/React.forwardRef(function Scroll
72
77
  return;
73
78
  }
74
79
  event.preventDefault();
75
- if (orientation === 'vertical') {
76
- if (viewportEl.scrollTop === 0 && event.deltaY < 0) {
77
- return;
78
- }
79
- } else if (viewportEl.scrollLeft === 0 && event.deltaX < 0) {
80
+ const horizontal = orientation === 'horizontal';
81
+ const scrollProperty = horizontal ? 'scrollLeft' : 'scrollTop';
82
+ const delta = horizontal ? event.deltaX : event.deltaY;
83
+ const maxScroll = horizontal ? viewportEl.scrollWidth - viewportEl.clientWidth : viewportEl.scrollHeight - viewportEl.clientHeight;
84
+ // RTL horizontal scrolling uses a negative `scrollLeft` range, from 0 to `-maxScroll`.
85
+ const minScroll = horizontal && direction === 'rtl' ? -maxScroll : 0;
86
+ const maxScrollValue = horizontal && direction === 'rtl' ? 0 : maxScroll;
87
+ const scrollValue = viewportEl[scrollProperty];
88
+ if (scrollValue <= minScroll && delta < 0 || scrollValue >= maxScrollValue && delta > 0) {
80
89
  return;
81
90
  }
82
- if (orientation === 'vertical') {
83
- if (viewportEl.scrollTop === viewportEl.scrollHeight - viewportEl.clientHeight && event.deltaY > 0) {
84
- return;
85
- }
86
- } else if (viewportEl.scrollLeft === viewportEl.scrollWidth - viewportEl.clientWidth && event.deltaX > 0) {
87
- return;
88
- }
89
- if (orientation === 'vertical') {
90
- viewportEl.scrollTop += event.deltaY;
91
- } else {
92
- viewportEl.scrollLeft += event.deltaX;
93
- }
91
+ viewportEl[scrollProperty] = Math.min(maxScrollValue, Math.max(minScroll, scrollValue + delta));
94
92
  }
95
93
  return addEventListener(scrollbarEl, 'wheel', handleWheel, {
96
94
  passive: false
97
95
  });
98
- }, [orientation, scrollbarXRef, scrollbarYRef, viewportRef]);
96
+ }, [direction, orientation, scrollbarXRef, scrollbarYRef, shouldRender, viewportRef]);
99
97
  const props = {
100
98
  ...(rootId && {
101
99
  'data-id': `${rootId}-scrollbar`
@@ -186,8 +184,6 @@ export const ScrollAreaScrollbar = /*#__PURE__*/React.forwardRef(function Scroll
186
184
  const contextValue = React.useMemo(() => ({
187
185
  orientation
188
186
  }), [orientation]);
189
- const isHidden = orientation === 'vertical' ? hiddenState.y : hiddenState.x;
190
- const shouldRender = keepMounted || !isHidden;
191
187
  if (!shouldRender) {
192
188
  return null;
193
189
  }
@@ -21,6 +21,7 @@ import { normalizeScrollOffset } from "../../utils/scrollEdges.js";
21
21
  // regardless of how many Scroll Area components are mounted.
22
22
  import { jsx as _jsx } from "react/jsx-runtime";
23
23
  let scrollAreaOverflowVarsRegistered = false;
24
+
24
25
  /**
25
26
  * Removes inheritance of the scroll area overflow CSS variables, which
26
27
  * improves rendering performance in complex scroll areas with deep subtrees.
@@ -254,7 +255,7 @@ export const ScrollAreaViewport = /*#__PURE__*/React.forwardRef(function ScrollA
254
255
  return undefined;
255
256
  }
256
257
  let hasInitialized = false;
257
- const ro = new ResizeObserver(() => {
258
+ const resizeObserver = new ResizeObserver(() => {
258
259
  // Avoid duplicate mount-time recompute when observer data matches what the mount
259
260
  // scheduling pass already measured. If dimensions changed before the first observer
260
261
  // delivery, keep the recompute so overflow transitions stay in sync.
@@ -267,15 +268,10 @@ export const ScrollAreaViewport = /*#__PURE__*/React.forwardRef(function ScrollA
267
268
  }
268
269
  computeThumbPosition();
269
270
  });
270
- ro.observe(viewport);
271
+ resizeObserver.observe(viewport);
271
272
 
272
- // If there are animations in the viewport, wait for them to finish and then recompute the thumb position.
273
- // This is necessary when the viewport contains a Dialog that is animating its popup on open
274
- // and the popup is using a transform for the animation, which affects the size of the viewport.
275
- // Without this, the thumb position will be incorrect until scrolling (i.e. if the scrollbar shows
276
- // on hover, the thumb has an incorrect size).
277
- // We assume the user is using `onOpenChangeComplete` to hide the scrollbar
278
- // until animations complete because otherwise the scrollbar would show the thumb resizing mid-animation.
273
+ // Wait for subtree animations to finish, then recompute thumb geometry that
274
+ // may have been affected by transform-based animations.
279
275
  waitForAnimationsTimeout.start(0, () => {
280
276
  const animations = viewport.getAnimations({
281
277
  subtree: true
@@ -286,7 +282,7 @@ export const ScrollAreaViewport = /*#__PURE__*/React.forwardRef(function ScrollA
286
282
  Promise.allSettled(animations.map(animation => animation.finished)).then(computeThumbPosition).catch(() => {});
287
283
  });
288
284
  return () => {
289
- ro.disconnect();
285
+ resizeObserver.disconnect();
290
286
  waitForAnimationsTimeout.clear();
291
287
  };
292
288
  }, [computeThumbPosition, viewportRef, waitForAnimationsTimeout]);
@@ -21,8 +21,8 @@ const stateAttributesMapping = {
21
21
  */
22
22
  export const SelectArrow = /*#__PURE__*/React.forwardRef(function SelectArrow(componentProps, forwardedRef) {
23
23
  const {
24
- className,
25
24
  render,
25
+ className,
26
26
  style,
27
27
  ...elementProps
28
28
  } = componentProps;
@@ -20,8 +20,8 @@ const stateAttributesMapping = {
20
20
  */
21
21
  export const SelectBackdrop = /*#__PURE__*/React.forwardRef(function SelectBackdrop(componentProps, forwardedRef) {
22
22
  const {
23
- className,
24
23
  render,
24
+ className,
25
25
  style,
26
26
  ...elementProps
27
27
  } = componentProps;
@@ -13,8 +13,8 @@ import { useRenderElement } from "../../internals/useRenderElement.js";
13
13
  import { jsx as _jsx } from "react/jsx-runtime";
14
14
  export const SelectGroup = /*#__PURE__*/React.forwardRef(function SelectGroup(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 { useRenderElement } from "../../internals/useRenderElement.js";
14
14
  */
15
15
  export const SelectGroupLabel = /*#__PURE__*/React.forwardRef(function SelectGroupLabel(componentProps, forwardedRef) {
16
16
  const {
17
- className,
18
17
  render,
19
- id: idProp,
18
+ className,
20
19
  style,
20
+ id: idProp,
21
21
  ...elementProps
22
22
  } = componentProps;
23
23
  const {
@@ -15,8 +15,8 @@ import { selectors } from "../store.js";
15
15
  */
16
16
  export const SelectIcon = /*#__PURE__*/React.forwardRef(function SelectIcon(componentProps, forwardedRef) {
17
17
  const {
18
- className,
19
18
  render,
19
+ className,
20
20
  style,
21
21
  ...elementProps
22
22
  } = componentProps;
@@ -2,7 +2,6 @@
2
2
 
3
3
  import * as React from 'react';
4
4
  import { useIsoLayoutEffect } from '@base-ui/utils/useIsoLayoutEffect';
5
- import { useValueAsRef } from '@base-ui/utils/useValueAsRef';
6
5
  import { useStore } from '@base-ui/utils/store';
7
6
  import { useSelectRootContext } from "../root/SelectRootContext.js";
8
7
  import { useCompositeListItem, IndexGuessBehavior } from "../../internals/composite/list/useCompositeListItem.js";
@@ -13,6 +12,7 @@ import { useButton } from "../../internals/use-button/index.js";
13
12
  import { createChangeEventDetails } from "../../internals/createBaseUIEventDetails.js";
14
13
  import { REASONS } from "../../internals/reasons.js";
15
14
  import { compareItemEquality, removeItem } from "../../internals/itemEquality.js";
15
+ import { isVirtualClick } from "../../floating-ui-react/utils/event.js";
16
16
 
17
17
  /**
18
18
  * An individual option in the select popup.
@@ -25,11 +25,11 @@ export const SelectItem = /*#__PURE__*/React.memo(/*#__PURE__*/React.forwardRef(
25
25
  const {
26
26
  render,
27
27
  className,
28
+ style,
28
29
  value: itemValue = null,
29
30
  label,
30
31
  disabled = false,
31
32
  nativeButton = false,
32
- style,
33
33
  ...elementProps
34
34
  } = componentProps;
35
35
  const textRef = React.useRef(null);
@@ -40,7 +40,7 @@ export const SelectItem = /*#__PURE__*/React.memo(/*#__PURE__*/React.forwardRef(
40
40
  });
41
41
  const {
42
42
  store,
43
- getItemProps,
43
+ itemProps,
44
44
  setOpen,
45
45
  setValue,
46
46
  selectionRef,
@@ -56,7 +56,6 @@ export const SelectItem = /*#__PURE__*/React.memo(/*#__PURE__*/React.forwardRef(
56
56
  const index = listItem.index;
57
57
  const hasRegistered = index !== -1;
58
58
  const itemRef = React.useRef(null);
59
- const indexRef = useValueAsRef(index);
60
59
  useIsoLayoutEffect(() => {
61
60
  if (!hasRegistered) {
62
61
  return undefined;
@@ -85,19 +84,9 @@ export const SelectItem = /*#__PURE__*/React.memo(/*#__PURE__*/React.forwardRef(
85
84
  }
86
85
  }
87
86
  }, [hasRegistered, index, multiple, isItemEqualToValue, store, itemValue, selectedItemTextRef]);
88
- const state = {
89
- disabled,
90
- selected,
91
- highlighted
92
- };
93
- const rootProps = getItemProps({
94
- active: highlighted,
95
- selected
96
- });
97
- rootProps.id = undefined;
98
87
  const lastKeyRef = React.useRef(null);
99
88
  const pointerTypeRef = React.useRef('mouse');
100
- const didPointerDownRef = React.useRef(false);
89
+ const allowMouseSelectionRef = React.useRef(false);
101
90
  const {
102
91
  getButtonProps,
103
92
  buttonRef
@@ -107,6 +96,11 @@ export const SelectItem = /*#__PURE__*/React.memo(/*#__PURE__*/React.forwardRef(
107
96
  native: nativeButton,
108
97
  composite: true
109
98
  });
99
+ const state = {
100
+ disabled,
101
+ selected,
102
+ highlighted
103
+ };
110
104
  function commitSelection(event) {
111
105
  const selectedValue = store.state.value;
112
106
  if (multiple) {
@@ -118,16 +112,13 @@ export const SelectItem = /*#__PURE__*/React.memo(/*#__PURE__*/React.forwardRef(
118
112
  setOpen(false, createChangeEventDetails(REASONS.itemPress, event));
119
113
  }
120
114
  }
115
+ function resetDragMovement() {
116
+ selectionRef.current.dragY = 0;
117
+ }
121
118
  const defaultProps = {
122
119
  role: 'option',
123
120
  'aria-selected': selected,
124
121
  tabIndex: highlighted ? 0 : -1,
125
- onTouchStart() {
126
- selectionRef.current = {
127
- allowSelectedMouseUp: false,
128
- allowUnselectedMouseUp: false
129
- };
130
- },
131
122
  onKeyDown(event) {
132
123
  lastKeyRef.current = event.key;
133
124
  store.set('activeIndex', index);
@@ -136,13 +127,24 @@ export const SelectItem = /*#__PURE__*/React.memo(/*#__PURE__*/React.forwardRef(
136
127
  }
137
128
  },
138
129
  onClick(event) {
139
- didPointerDownRef.current = false;
130
+ const isMouseClick = event.type === 'click' && pointerTypeRef.current !== 'touch';
131
+ const clickPointerType = event.nativeEvent.pointerType;
132
+ const isVirtualMouseClick = isMouseClick && isVirtualClick(event.nativeEvent) && (
133
+ // Generic no-pointer `detail === 0` clicks stay tied to highlight state. Virtual
134
+ // clicks that carry browser pointer data, including an empty string from assistive
135
+ // technology, can activate unhighlighted items.
136
+ clickPointerType !== undefined || highlighted);
137
+ // With alignItemWithTrigger, opening can place an item under the cursor. Real mouse
138
+ // clicks must start on the item, while virtual clicks represent explicit keyboard or
139
+ // assistive technology activation.
140
+ const isInvalidMouseClick = isMouseClick && !isVirtualMouseClick && !allowMouseSelectionRef.current;
141
+ allowMouseSelectionRef.current = false;
140
142
 
141
143
  // Prevent double commit on {Enter}
142
144
  if (event.type === 'keydown' && lastKeyRef.current === null) {
143
145
  return;
144
146
  }
145
- if (disabled || event.type === 'keydown' && lastKeyRef.current === ' ' && typingRef.current || pointerTypeRef.current !== 'touch' && !highlighted) {
147
+ if (disabled || event.type === 'keydown' && lastKeyRef.current === ' ' && typingRef.current || isInvalidMouseClick) {
146
148
  return;
147
149
  }
148
150
  lastKeyRef.current = null;
@@ -151,40 +153,52 @@ export const SelectItem = /*#__PURE__*/React.memo(/*#__PURE__*/React.forwardRef(
151
153
  onPointerEnter(event) {
152
154
  pointerTypeRef.current = event.pointerType;
153
155
  },
156
+ onPointerMove(event) {
157
+ if (event.pointerType === 'mouse' && event.buttons === 1) {
158
+ const selection = selectionRef.current;
159
+ selection.dragY += event.movementY;
160
+ if (selection.dragY ** 2 >= 64) {
161
+ selection.allowUnselectedMouseUp = true;
162
+ }
163
+ }
164
+ },
154
165
  onPointerDown(event) {
155
166
  pointerTypeRef.current = event.pointerType;
156
- didPointerDownRef.current = true;
167
+ allowMouseSelectionRef.current = true;
168
+ resetDragMovement();
157
169
  },
158
170
  onMouseUp() {
159
- if (disabled) {
171
+ resetDragMovement();
172
+ if (disabled || pointerTypeRef.current === 'touch') {
160
173
  return;
161
174
  }
162
175
 
163
- // Regular click (pointerdown on this element) if didPointerDownRef is set, otherwise drag-to-select
164
- if (didPointerDownRef.current) {
165
- didPointerDownRef.current = false;
176
+ // Regular clicks are committed by the click event.
177
+ if (allowMouseSelectionRef.current) {
166
178
  return;
167
179
  }
168
180
  const disallowSelectedMouseUp = !selectionRef.current.allowSelectedMouseUp && selected;
169
181
  const disallowUnselectedMouseUp = !selectionRef.current.allowUnselectedMouseUp && !selected;
170
- if (disallowSelectedMouseUp || disallowUnselectedMouseUp || pointerTypeRef.current !== 'touch' && !highlighted) {
182
+ if (disallowSelectedMouseUp || disallowUnselectedMouseUp) {
171
183
  return;
172
184
  }
185
+ allowMouseSelectionRef.current = true;
173
186
  itemRef.current?.click();
187
+ allowMouseSelectionRef.current = false;
174
188
  }
175
189
  };
176
190
  const element = useRenderElement('div', componentProps, {
177
191
  ref: [buttonRef, forwardedRef, listItem.ref, itemRef],
178
192
  state,
179
- props: [rootProps, defaultProps, elementProps, getButtonProps]
193
+ props: [itemProps, defaultProps, elementProps, getButtonProps]
180
194
  });
181
195
  const contextValue = React.useMemo(() => ({
182
196
  selected,
183
- indexRef,
197
+ index,
184
198
  textRef,
185
199
  selectedByFocus,
186
200
  hasRegistered
187
- }), [selected, indexRef, textRef, selectedByFocus, hasRegistered]);
201
+ }), [selected, index, textRef, selectedByFocus, hasRegistered]);
188
202
  return /*#__PURE__*/_jsx(SelectItemContext.Provider, {
189
203
  value: contextValue,
190
204
  children: element
@@ -1,7 +1,7 @@
1
1
  import * as React from 'react';
2
2
  export interface SelectItemContext {
3
3
  selected: boolean;
4
- indexRef: React.RefObject<number>;
4
+ index: number;
5
5
  textRef: React.RefObject<HTMLElement | null>;
6
6
  selectedByFocus: boolean;
7
7
  hasRegistered: boolean;