@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
@@ -8,9 +8,7 @@ exports.PreviewCardStore = void 0;
8
8
  var React = _interopRequireWildcard(require("react"));
9
9
  var ReactDOM = _interopRequireWildcard(require("react-dom"));
10
10
  var _store = require("@base-ui/utils/store");
11
- var _useRefWithInit = require("@base-ui/utils/useRefWithInit");
12
11
  var _popups = require("../../utils/popups");
13
- var _floatingUiReact = require("../../floating-ui-react");
14
12
  var _reasons = require("../../internals/reasons");
15
13
  var _constants = require("../utils/constants");
16
14
  const selectors = {
@@ -19,17 +17,23 @@ const selectors = {
19
17
  hasViewport: (0, _store.createSelector)(state => state.hasViewport)
20
18
  };
21
19
  class PreviewCardStore extends _store.ReactStore {
22
- constructor(initialState) {
23
- super({
20
+ constructor(initialState, floatingId, nested = false) {
21
+ const triggerElements = new _popups.PopupTriggerMap();
22
+ const state = {
24
23
  ...createInitialState(),
25
24
  ...initialState
26
- }, {
25
+ };
26
+ state.floatingRootContext = (0, _popups.createPopupFloatingRootContext)(triggerElements, floatingId, nested);
27
+ super(state, {
27
28
  popupRef: /*#__PURE__*/React.createRef(),
28
29
  onOpenChange: undefined,
29
30
  onOpenChangeComplete: undefined,
30
- triggerElements: new _popups.PopupTriggerMap(),
31
+ triggerElements,
31
32
  closeDelayRef: {
32
33
  current: _constants.CLOSE_DELAY
34
+ },
35
+ inlineRectCoordsRef: {
36
+ current: undefined
33
37
  }
34
38
  }, selectors);
35
39
  }
@@ -45,6 +49,10 @@ class PreviewCardStore extends _store.ReactStore {
45
49
  if (eventDetails.isCanceled) {
46
50
  return;
47
51
  }
52
+ const event = eventDetails.event;
53
+ if (nextOpen && isHover && eventDetails.trigger && 'clientX' in event && 'clientY' in event && this.context.inlineRectCoordsRef.current?.element !== eventDetails.trigger) {
54
+ (0, _popups.updateInlineRectCoords)(this.context.inlineRectCoordsRef, eventDetails.trigger, event.clientX, event.clientY);
55
+ }
48
56
  this.state.floatingRootContext.dispatchOpenChange(nextOpen, eventDetails);
49
57
  const changeState = () => {
50
58
  const updatedState = {
@@ -57,14 +65,7 @@ class PreviewCardStore extends _store.ReactStore {
57
65
  } else if (reason === _reasons.REASONS.triggerHover) {
58
66
  updatedState.instantType = undefined;
59
67
  }
60
-
61
- // If a popup is closing, the `trigger` may be null.
62
- // We want to keep the previous value so that exit animations are played and focus is returned correctly.
63
- const newTriggerId = eventDetails.trigger?.id ?? null;
64
- if (newTriggerId || nextOpen) {
65
- updatedState.activeTriggerId = newTriggerId;
66
- updatedState.activeTriggerElement = eventDetails.trigger ?? null;
67
- }
68
+ (0, _popups.setOpenTriggerState)(updatedState, nextOpen, eventDetails.trigger);
68
69
  this.update(updatedState);
69
70
  };
70
71
  if (isHover) {
@@ -76,23 +77,10 @@ class PreviewCardStore extends _store.ReactStore {
76
77
  }
77
78
  };
78
79
  static useStore(externalStore, initialState) {
79
- // eslint-disable-next-line react-hooks/rules-of-hooks
80
- const internalStore = (0, _useRefWithInit.useRefWithInit)(() => {
81
- return new PreviewCardStore(initialState);
82
- }).current;
83
- const store = externalStore ?? internalStore;
84
-
85
- // eslint-disable-next-line react-hooks/rules-of-hooks
86
- const floatingRootContext = (0, _floatingUiReact.useSyncedFloatingRootContext)({
87
- popupStore: store,
88
- onOpenChange: store.setOpen
89
- });
80
+ /* eslint-disable react-hooks/rules-of-hooks */
81
+ const store = (0, _popups.usePopupStore)(externalStore, (floatingId, nested) => new PreviewCardStore(initialState, floatingId, nested)).store;
82
+ /* eslint-enable react-hooks/rules-of-hooks */
90
83
 
91
- // It's safe to set this here because when this code runs for the first time,
92
- // nothing has had a chance to subscribe to the `store` yet.
93
- // For subsequent renders, the `floatingRootContext` reference remains the same,
94
- // so it's basically a no-op.
95
- store.state.floatingRootContext = floatingRootContext;
96
84
  return store;
97
85
  }
98
86
  }
@@ -9,6 +9,7 @@ Object.defineProperty(exports, "__esModule", {
9
9
  exports.PreviewCardTrigger = void 0;
10
10
  var _formatErrorMessage2 = _interopRequireDefault(require("@base-ui/utils/formatErrorMessage"));
11
11
  var React = _interopRequireWildcard(require("react"));
12
+ var _fastHooks = require("@base-ui/utils/fastHooks");
12
13
  var _useIsoLayoutEffect = require("@base-ui/utils/useIsoLayoutEffect");
13
14
  var _PreviewCardContext = require("../root/PreviewCardContext");
14
15
  var _popupStateMapping = require("../../utils/popupStateMapping");
@@ -23,7 +24,7 @@ var _floatingUiReact = require("../../floating-ui-react");
23
24
  *
24
25
  * Documentation: [Base UI Preview Card](https://base-ui.com/react/components/preview-card)
25
26
  */
26
- const PreviewCardTrigger = exports.PreviewCardTrigger = /*#__PURE__*/React.forwardRef(function PreviewCardTrigger(componentProps, forwardedRef) {
27
+ const PreviewCardTrigger = exports.PreviewCardTrigger = (0, _fastHooks.fastComponentRef)(function PreviewCardTrigger(componentProps, forwardedRef) {
27
28
  const {
28
29
  render,
29
30
  className,
@@ -44,6 +45,7 @@ const PreviewCardTrigger = exports.PreviewCardTrigger = /*#__PURE__*/React.forwa
44
45
  const isTriggerActive = store.useState('isTriggerActive', thisTriggerId);
45
46
  const isOpenedByThisTrigger = store.useState('isOpenedByTrigger', thisTriggerId);
46
47
  const floatingRootContext = store.useState('floatingRootContext');
48
+ const inlineRectCoordsRef = store.context.inlineRectCoordsRef;
47
49
  const triggerElementRef = React.useRef(null);
48
50
  const delayWithDefault = delay ?? _constants.OPEN_DELAY;
49
51
  const closeDelayWithDefault = closeDelay ?? _constants.CLOSE_DELAY;
@@ -77,10 +79,11 @@ const PreviewCardTrigger = exports.PreviewCardTrigger = /*#__PURE__*/React.forwa
77
79
  open: isOpenedByThisTrigger
78
80
  };
79
81
  const rootTriggerProps = store.useState('triggerProps', isMountedByThisTrigger);
82
+ const inlineRectTriggerProps = (0, _popups.getInlineRectTriggerProps)(inlineRectCoordsRef, isOpenedByThisTrigger);
80
83
  const element = (0, _useRenderElement.useRenderElement)('a', componentProps, {
81
84
  state,
82
85
  ref: [forwardedRef, registerTrigger, triggerElementRef],
83
- props: [hoverProps, focusProps.reference, rootTriggerProps, {
86
+ props: [hoverProps, focusProps.reference, rootTriggerProps, inlineRectTriggerProps, {
84
87
  id: thisTriggerId
85
88
  }, elementProps],
86
89
  stateAttributesMapping: _popupStateMapping.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)
@@ -20,8 +20,8 @@ const stateAttributesMapping = {
20
20
 
21
21
  /**
22
22
  * A viewport for displaying content transitions.
23
- * This component is only required if one popup can be opened by multiple triggers, its content change based on the trigger
24
- * and switching between them is animated.
23
+ * This component is only required if one popup can be opened by multiple triggers, its content
24
+ * changes based on the trigger, and switching between them is animated.
25
25
  * Renders a `<div>` element.
26
26
  *
27
27
  * 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
  }
@@ -17,7 +17,7 @@ let PreviewCardViewportDataAttributes = exports.PreviewCardViewportDataAttribute
17
17
  * Indicates the direction from which the popup was activated.
18
18
  * This can be used to create directional animations based on how the popup was triggered.
19
19
  * Contains space-separated values for both horizontal and vertical axes.
20
- * @type {`${'left' | 'right'} {'top' | 'bottom'}`}
20
+ * @type {`${'left' | 'right'} ${'top' | 'bottom'}`}
21
21
  */
22
22
  PreviewCardViewportDataAttributes["activationDirection"] = "data-activation-direction";
23
23
  /**
@@ -26,7 +26,7 @@ let PreviewCardViewportDataAttributes = exports.PreviewCardViewportDataAttribute
26
26
  PreviewCardViewportDataAttributes["transitioning"] = "data-transitioning";
27
27
  /**
28
28
  * Present if animations should be instant.
29
- * @type {'delay' | 'dismiss' | 'focus'}
29
+ * @type {'dismiss' | 'focus'}
30
30
  */
31
31
  PreviewCardViewportDataAttributes["instant"] = "data-instant";
32
32
  return PreviewCardViewportDataAttributes;
@@ -31,21 +31,16 @@ const ProgressIndicator = exports.ProgressIndicator = /*#__PURE__*/React.forward
31
31
  state
32
32
  } = (0, _ProgressRootContext.useProgressRootContext)();
33
33
  const percentageValue = Number.isFinite(value) && value !== null ? (0, _valueToPercent.valueToPercent)(value, min, max) : null;
34
- const getStyles = React.useCallback(() => {
35
- if (percentageValue == null) {
36
- return {};
37
- }
38
- return {
39
- insetInlineStart: 0,
40
- height: 'inherit',
41
- width: `${percentageValue}%`
42
- };
43
- }, [percentageValue]);
34
+ const indicatorStyle = percentageValue == null ? {} : {
35
+ insetInlineStart: 0,
36
+ height: 'inherit',
37
+ width: `${percentageValue}%`
38
+ };
44
39
  const element = (0, _useRenderElement.useRenderElement)('div', componentProps, {
45
40
  state,
46
41
  ref: forwardedRef,
47
42
  props: [{
48
- style: getStyles()
43
+ style: indicatorStyle
49
44
  }, elementProps],
50
45
  stateAttributesMapping: _stateAttributesMapping.progressStateAttributesMapping
51
46
  });
@@ -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
  /**
@@ -12,6 +12,7 @@ var _useIsoLayoutEffect = require("@base-ui/utils/useIsoLayoutEffect");
12
12
  var _useStableCallback = require("@base-ui/utils/useStableCallback");
13
13
  var _visuallyHidden = require("@base-ui/utils/visuallyHidden");
14
14
  var _empty = require("@base-ui/utils/empty");
15
+ var _owner = require("@base-ui/utils/owner");
15
16
  var _createBaseUIEventDetails = require("../../internals/createBaseUIEventDetails");
16
17
  var _reasons = require("../../internals/reasons");
17
18
  var _noop = require("../../internals/noop");
@@ -84,7 +85,6 @@ const RadioRoot = exports.RadioRoot = /*#__PURE__*/React.forwardRef(function Rad
84
85
  const required = requiredGroup || requiredProp;
85
86
  const form = formGroup;
86
87
  const checked = groupContext ? checkedValue === value : value === '';
87
- const serializedValue = React.useMemo(() => (0, _serializeValue.serializeValue)(value), [value]);
88
88
  const radioRef = React.useRef(null);
89
89
  const inputRef = React.useRef(null);
90
90
  const handleControlRef = (0, _useStableCallback.useStableCallback)(element => {
@@ -138,7 +138,11 @@ const RadioRoot = exports.RadioRoot = /*#__PURE__*/React.forwardRef(function Rad
138
138
  return;
139
139
  }
140
140
  event.preventDefault();
141
- inputRef.current?.dispatchEvent(new PointerEvent('click', {
141
+ const input = inputRef.current;
142
+ if (!input) {
143
+ return;
144
+ }
145
+ input.dispatchEvent(new ((0, _owner.ownerWindow)(input).PointerEvent)('click', {
142
146
  bubbles: true,
143
147
  shiftKey: event.shiftKey,
144
148
  ctrlKey: event.ctrlKey,
@@ -171,7 +175,7 @@ const RadioRoot = exports.RadioRoot = /*#__PURE__*/React.forwardRef(function Rad
171
175
  style: name ? _visuallyHidden.visuallyHiddenInput : _visuallyHidden.visuallyHidden,
172
176
  'aria-hidden': true,
173
177
  ...(value !== undefined ? {
174
- value: serializedValue
178
+ value: (0, _serializeValue.serializeValue)(value)
175
179
  } : _empty.EMPTY_OBJECT),
176
180
  disabled,
177
181
  checked,
@@ -76,9 +76,9 @@ const RadioGroup = exports.RadioGroup = /*#__PURE__*/React.forwardRef(function R
76
76
  name: 'RadioGroup',
77
77
  state: 'value'
78
78
  });
79
- const onValueChange = (0, _useStableCallback.useStableCallback)(onValueChangeProp);
79
+ const [touched, setTouched] = React.useState(false);
80
80
  const setCheckedValue = (0, _useStableCallback.useStableCallback)((value, eventDetails) => {
81
- onValueChange(value, eventDetails);
81
+ onValueChangeProp?.(value, eventDetails);
82
82
  if (eventDetails.isCanceled) {
83
83
  return;
84
84
  }
@@ -127,12 +127,7 @@ const RadioGroup = exports.RadioGroup = /*#__PURE__*/React.forwardRef(function R
127
127
  }
128
128
  return undefined;
129
129
  });
130
- const getFieldValue = (0, _useStableCallback.useStableCallback)(() => checkedValue ?? null);
131
- (0, _useRegisterFieldControl.useRegisterFieldControl)(controlRef, {
132
- id,
133
- value: checkedValue,
134
- getValue: getFieldValue
135
- });
130
+ (0, _useRegisterFieldControl.useRegisterFieldControl)(controlRef, id, checkedValue ?? null);
136
131
  (0, _useValueChanged.useValueChanged)(checkedValue, () => {
137
132
  clearErrors(name);
138
133
  setDirty(checkedValue !== validityData.initialValue);
@@ -147,7 +142,6 @@ const RadioGroup = exports.RadioGroup = /*#__PURE__*/React.forwardRef(function R
147
142
  setInputRef(fallbackInput);
148
143
  }
149
144
  });
150
- const [touched, setTouched] = React.useState(false);
151
145
  const ariaLabelledby = elementProps['aria-labelledby'] ?? labelId ?? fieldsetContext?.legendId;
152
146
  const state = {
153
147
  ...fieldState,
@@ -162,7 +156,6 @@ const RadioGroup = exports.RadioGroup = /*#__PURE__*/React.forwardRef(function R
162
156
  form,
163
157
  validation,
164
158
  name,
165
- onValueChange,
166
159
  readOnly,
167
160
  registerControlRef,
168
161
  registerInputRef,
@@ -170,7 +163,7 @@ const RadioGroup = exports.RadioGroup = /*#__PURE__*/React.forwardRef(function R
170
163
  setCheckedValue,
171
164
  setTouched,
172
165
  touched
173
- }), [checkedValue, disabled, form, validation, fieldState, name, onValueChange, readOnly, registerControlRef, registerInputRef, required, setCheckedValue, setTouched, touched]);
166
+ }), [checkedValue, disabled, form, validation, fieldState, name, readOnly, registerControlRef, registerInputRef, required, setCheckedValue, setTouched, touched]);
174
167
  const defaultProps = {
175
168
  role: 'radiogroup',
176
169
  '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;
@@ -25,19 +25,19 @@ const ScrollAreaContent = exports.ScrollAreaContent = /*#__PURE__*/React.forward
25
25
  style,
26
26
  ...elementProps
27
27
  } = componentProps;
28
- const contentWrapperRef = React.useRef(null);
29
28
  const {
30
29
  computeThumbPosition
31
30
  } = (0, _ScrollAreaViewportContext.useScrollAreaViewportContext)();
32
31
  const {
33
32
  viewportState
34
33
  } = (0, _ScrollAreaRootContext.useScrollAreaRootContext)();
34
+ const contentWrapperRef = React.useRef(null);
35
35
  (0, _useIsoLayoutEffect.useIsoLayoutEffect)(() => {
36
36
  if (typeof ResizeObserver === 'undefined') {
37
37
  return undefined;
38
38
  }
39
39
  let hasInitialized = false;
40
- const ro = new ResizeObserver(() => {
40
+ const resizeObserver = new ResizeObserver(() => {
41
41
  // ResizeObserver fires once upon observing, so we skip the initial call
42
42
  // to avoid double-calculating the thumb position on mount.
43
43
  if (!hasInitialized) {
@@ -47,10 +47,10 @@ const ScrollAreaContent = exports.ScrollAreaContent = /*#__PURE__*/React.forward
47
47
  computeThumbPosition();
48
48
  });
49
49
  if (contentWrapperRef.current) {
50
- ro.observe(contentWrapperRef.current);
50
+ resizeObserver.observe(contentWrapperRef.current);
51
51
  }
52
52
  return () => {
53
- ro.disconnect();
53
+ resizeObserver.disconnect();
54
54
  };
55
55
  }, [computeThumbPosition]);
56
56
  const element = (0, _useRenderElement.useRenderElement)('div', componentProps, {
@@ -19,7 +19,7 @@ var _styles = require("../../utils/styles");
19
19
  var _useBaseUiId = require("../../internals/useBaseUiId");
20
20
  var _stateAttributes = require("./stateAttributes");
21
21
  var _utils = require("../../floating-ui-react/utils");
22
- var _CSPContext = require("../../csp-provider/CSPContext");
22
+ var _CSPContext = require("../../internals/csp-context/CSPContext");
23
23
  var _jsxRuntime = require("react/jsx-runtime");
24
24
  const DEFAULT_COORDS = {
25
25
  x: 0,
@@ -67,7 +67,12 @@ const ScrollAreaScrollbar = exports.ScrollAreaScrollbar = /*#__PURE__*/React.for
67
67
  };
68
68
  const direction = (0, _DirectionContext.useDirection)();
69
69
  const hideTrackUntilMeasured = !hasMeasuredScrollbar && !keepMounted;
70
+ const isHidden = orientation === 'vertical' ? hiddenState.y : hiddenState.x;
71
+ const shouldRender = keepMounted || !isHidden;
70
72
  React.useEffect(() => {
73
+ if (!shouldRender) {
74
+ return undefined;
75
+ }
71
76
  const viewportEl = viewportRef.current;
72
77
  const scrollbarEl = orientation === 'vertical' ? scrollbarYRef.current : scrollbarXRef.current;
73
78
  if (!scrollbarEl) {
@@ -78,30 +83,23 @@ const ScrollAreaScrollbar = exports.ScrollAreaScrollbar = /*#__PURE__*/React.for
78
83
  return;
79
84
  }
80
85
  event.preventDefault();
81
- if (orientation === 'vertical') {
82
- if (viewportEl.scrollTop === 0 && event.deltaY < 0) {
83
- return;
84
- }
85
- } else if (viewportEl.scrollLeft === 0 && event.deltaX < 0) {
86
+ const horizontal = orientation === 'horizontal';
87
+ const scrollProperty = horizontal ? 'scrollLeft' : 'scrollTop';
88
+ const delta = horizontal ? event.deltaX : event.deltaY;
89
+ const maxScroll = horizontal ? viewportEl.scrollWidth - viewportEl.clientWidth : viewportEl.scrollHeight - viewportEl.clientHeight;
90
+ // RTL horizontal scrolling uses a negative `scrollLeft` range, from 0 to `-maxScroll`.
91
+ const minScroll = horizontal && direction === 'rtl' ? -maxScroll : 0;
92
+ const maxScrollValue = horizontal && direction === 'rtl' ? 0 : maxScroll;
93
+ const scrollValue = viewportEl[scrollProperty];
94
+ if (scrollValue <= minScroll && delta < 0 || scrollValue >= maxScrollValue && delta > 0) {
86
95
  return;
87
96
  }
88
- if (orientation === 'vertical') {
89
- if (viewportEl.scrollTop === viewportEl.scrollHeight - viewportEl.clientHeight && event.deltaY > 0) {
90
- return;
91
- }
92
- } else if (viewportEl.scrollLeft === viewportEl.scrollWidth - viewportEl.clientWidth && event.deltaX > 0) {
93
- return;
94
- }
95
- if (orientation === 'vertical') {
96
- viewportEl.scrollTop += event.deltaY;
97
- } else {
98
- viewportEl.scrollLeft += event.deltaX;
99
- }
97
+ viewportEl[scrollProperty] = Math.min(maxScrollValue, Math.max(minScroll, scrollValue + delta));
100
98
  }
101
99
  return (0, _addEventListener.addEventListener)(scrollbarEl, 'wheel', handleWheel, {
102
100
  passive: false
103
101
  });
104
- }, [orientation, scrollbarXRef, scrollbarYRef, viewportRef]);
102
+ }, [direction, orientation, scrollbarXRef, scrollbarYRef, shouldRender, viewportRef]);
105
103
  const props = {
106
104
  ...(rootId && {
107
105
  'data-id': `${rootId}-scrollbar`
@@ -192,8 +190,6 @@ const ScrollAreaScrollbar = exports.ScrollAreaScrollbar = /*#__PURE__*/React.for
192
190
  const contextValue = React.useMemo(() => ({
193
191
  orientation
194
192
  }), [orientation]);
195
- const isHidden = orientation === 'vertical' ? hiddenState.y : hiddenState.x;
196
- const shouldRender = keepMounted || !isHidden;
197
193
  if (!shouldRender) {
198
194
  return null;
199
195
  }
@@ -26,6 +26,7 @@ var _jsxRuntime = require("react/jsx-runtime");
26
26
  // Module-level flag to ensure we only register the CSS properties once,
27
27
  // regardless of how many Scroll Area components are mounted.
28
28
  let scrollAreaOverflowVarsRegistered = false;
29
+
29
30
  /**
30
31
  * Removes inheritance of the scroll area overflow CSS variables, which
31
32
  * improves rendering performance in complex scroll areas with deep subtrees.
@@ -259,7 +260,7 @@ const ScrollAreaViewport = exports.ScrollAreaViewport = /*#__PURE__*/React.forwa
259
260
  return undefined;
260
261
  }
261
262
  let hasInitialized = false;
262
- const ro = new ResizeObserver(() => {
263
+ const resizeObserver = new ResizeObserver(() => {
263
264
  // Avoid duplicate mount-time recompute when observer data matches what the mount
264
265
  // scheduling pass already measured. If dimensions changed before the first observer
265
266
  // delivery, keep the recompute so overflow transitions stay in sync.
@@ -272,15 +273,10 @@ const ScrollAreaViewport = exports.ScrollAreaViewport = /*#__PURE__*/React.forwa
272
273
  }
273
274
  computeThumbPosition();
274
275
  });
275
- ro.observe(viewport);
276
+ resizeObserver.observe(viewport);
276
277
 
277
- // If there are animations in the viewport, wait for them to finish and then recompute the thumb position.
278
- // This is necessary when the viewport contains a Dialog that is animating its popup on open
279
- // and the popup is using a transform for the animation, which affects the size of the viewport.
280
- // Without this, the thumb position will be incorrect until scrolling (i.e. if the scrollbar shows
281
- // on hover, the thumb has an incorrect size).
282
- // We assume the user is using `onOpenChangeComplete` to hide the scrollbar
283
- // until animations complete because otherwise the scrollbar would show the thumb resizing mid-animation.
278
+ // Wait for subtree animations to finish, then recompute thumb geometry that
279
+ // may have been affected by transform-based animations.
284
280
  waitForAnimationsTimeout.start(0, () => {
285
281
  const animations = viewport.getAnimations({
286
282
  subtree: true
@@ -291,7 +287,7 @@ const ScrollAreaViewport = exports.ScrollAreaViewport = /*#__PURE__*/React.forwa
291
287
  Promise.allSettled(animations.map(animation => animation.finished)).then(computeThumbPosition).catch(() => {});
292
288
  });
293
289
  return () => {
294
- ro.disconnect();
290
+ resizeObserver.disconnect();
295
291
  waitForAnimationsTimeout.clear();
296
292
  };
297
293
  }, [computeThumbPosition, viewportRef, waitForAnimationsTimeout]);
@@ -27,8 +27,8 @@ const stateAttributesMapping = {
27
27
  */
28
28
  const SelectArrow = exports.SelectArrow = /*#__PURE__*/React.forwardRef(function SelectArrow(componentProps, forwardedRef) {
29
29
  const {
30
- className,
31
30
  render,
31
+ className,
32
32
  style,
33
33
  ...elementProps
34
34
  } = componentProps;
@@ -26,8 +26,8 @@ const stateAttributesMapping = {
26
26
  */
27
27
  const SelectBackdrop = exports.SelectBackdrop = /*#__PURE__*/React.forwardRef(function SelectBackdrop(componentProps, forwardedRef) {
28
28
  const {
29
- className,
30
29
  render,
30
+ className,
31
31
  style,
32
32
  ...elementProps
33
33
  } = componentProps;
@@ -18,8 +18,8 @@ var _jsxRuntime = require("react/jsx-runtime");
18
18
  */
19
19
  const SelectGroup = exports.SelectGroup = /*#__PURE__*/React.forwardRef(function SelectGroup(componentProps, forwardedRef) {
20
20
  const {
21
- className,
22
21
  render,
22
+ className,
23
23
  style,
24
24
  ...elementProps
25
25
  } = componentProps;
@@ -19,10 +19,10 @@ var _useRenderElement = require("../../internals/useRenderElement");
19
19
  */
20
20
  const SelectGroupLabel = exports.SelectGroupLabel = /*#__PURE__*/React.forwardRef(function SelectGroupLabel(componentProps, forwardedRef) {
21
21
  const {
22
- className,
23
22
  render,
24
- id: idProp,
23
+ className,
25
24
  style,
25
+ id: idProp,
26
26
  ...elementProps
27
27
  } = componentProps;
28
28
  const {
@@ -20,8 +20,8 @@ var _store2 = require("../store");
20
20
  */
21
21
  const SelectIcon = exports.SelectIcon = /*#__PURE__*/React.forwardRef(function SelectIcon(componentProps, forwardedRef) {
22
22
  const {
23
- className,
24
23
  render,
24
+ className,
25
25
  style,
26
26
  ...elementProps
27
27
  } = componentProps;