@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
@@ -30,10 +30,12 @@ var _useLabelableId = require("../../internals/labelable-provider/useLabelableId
30
30
  var _resolveAriaLabelledBy = require("../../utils/resolveAriaLabelledBy");
31
31
  const BOUNDARY_OFFSET = 2;
32
32
  const SELECTED_DELAY = 400;
33
- const UNSELECTED_DELAY = 200;
34
33
  const stateAttributesMapping = {
35
34
  ..._popupStateMapping.pressableTriggerOpenStateMapping,
36
35
  ..._constants.fieldValidityMapping,
36
+ popupSide: side => side ? {
37
+ 'data-popup-side': side
38
+ } : null,
37
39
  value: () => null
38
40
  };
39
41
 
@@ -76,15 +78,16 @@ const SelectTrigger = exports.SelectTrigger = /*#__PURE__*/React.forwardRef(func
76
78
  } = (0, _SelectRootContext.useSelectRootContext)();
77
79
  const disabled = fieldDisabled || selectDisabled || disabledProp;
78
80
  const open = (0, _store.useStore)(store, _store2.selectors.open);
81
+ const mounted = (0, _store.useStore)(store, _store2.selectors.mounted);
79
82
  const value = (0, _store.useStore)(store, _store2.selectors.value);
80
83
  const triggerProps = (0, _store.useStore)(store, _store2.selectors.triggerProps);
81
84
  const positionerElement = (0, _store.useStore)(store, _store2.selectors.positionerElement);
82
85
  const listElement = (0, _store.useStore)(store, _store2.selectors.listElement);
86
+ const popupSideValue = (0, _store.useStore)(store, _store2.selectors.popupSide);
83
87
  const rootId = (0, _store.useStore)(store, _store2.selectors.id);
84
88
  const selectLabelId = (0, _store.useStore)(store, _store2.selectors.labelId);
85
89
  const hasSelectedValue = (0, _store.useStore)(store, _store2.selectors.hasSelectedValue);
86
- const shouldCheckNullItemLabel = !hasSelectedValue && open;
87
- const hasNullItemLabel = (0, _store.useStore)(store, _store2.selectors.hasNullItemLabel, shouldCheckNullItemLabel);
90
+ const popupSide = mounted && positionerElement ? popupSideValue : null;
88
91
  const id = idProp ?? rootId;
89
92
  const ariaLabelledBy = (0, _resolveAriaLabelledBy.resolveAriaLabelledBy)(fieldLabelId, selectLabelId);
90
93
  (0, _useLabelableId.useLabelableId)({
@@ -106,52 +109,34 @@ const SelectTrigger = exports.SelectTrigger = /*#__PURE__*/React.forwardRef(func
106
109
  const timeoutFocus = (0, _useTimeout.useTimeout)();
107
110
  const timeoutMouseDown = (0, _useTimeout.useTimeout)();
108
111
  const selectedDelayTimeout = (0, _useTimeout.useTimeout)();
109
- const unselectedDelayTimeout = (0, _useTimeout.useTimeout)();
110
112
  React.useEffect(() => {
111
113
  if (open) {
112
- const hasSelectedItemInList = hasSelectedValue || hasNullItemLabel;
113
- const shouldDelayUnselectedMouseUpLonger = !hasSelectedItemInList;
114
-
115
- // When there is no selected item in the list (placeholder-only selects), a mousedown
116
- // on the trigger followed by a quick mouseup over the first option can accidentally select
117
- // within 200ms. Delay unselected mouseup to match the safer 400ms window.
118
- if (shouldDelayUnselectedMouseUpLonger) {
119
- selectedDelayTimeout.start(SELECTED_DELAY, () => {
120
- selectionRef.current.allowUnselectedMouseUp = true;
121
- selectionRef.current.allowSelectedMouseUp = true;
122
- });
123
- } else {
124
- // mousedown -> move to unselected item -> mouseup should not select within 200ms.
125
- unselectedDelayTimeout.start(UNSELECTED_DELAY, () => {
126
- selectionRef.current.allowUnselectedMouseUp = true;
127
-
128
- // mousedown -> mouseup on selected item should not select within 400ms.
129
- selectedDelayTimeout.start(UNSELECTED_DELAY, () => {
130
- selectionRef.current.allowSelectedMouseUp = true;
131
- });
132
- });
133
- }
114
+ // A mousedown on the trigger can open the popup under the cursor. Keep mouseup selection
115
+ // disabled briefly so releasing over either the selected item or a neighboring item doesn't
116
+ // commit an accidental selection. SelectItem can still opt into unselected mouseup sooner
117
+ // after a real drag over the item.
118
+ selectedDelayTimeout.start(SELECTED_DELAY, () => {
119
+ selectionRef.current.allowUnselectedMouseUp = true;
120
+ selectionRef.current.allowSelectedMouseUp = true;
121
+ });
134
122
  return () => {
135
123
  selectedDelayTimeout.clear();
136
- unselectedDelayTimeout.clear();
137
124
  };
138
125
  }
139
126
  selectionRef.current = {
140
127
  allowSelectedMouseUp: false,
141
- allowUnselectedMouseUp: false
128
+ allowUnselectedMouseUp: false,
129
+ dragY: 0
142
130
  };
143
131
  timeoutMouseDown.clear();
144
132
  return undefined;
145
- }, [open, hasSelectedValue, hasNullItemLabel, selectionRef, timeoutMouseDown, selectedDelayTimeout, unselectedDelayTimeout]);
146
- const ariaControlsId = React.useMemo(() => {
147
- return listElement?.id ?? (0, _utils.getFloatingFocusElement)(positionerElement)?.id;
148
- }, [listElement, positionerElement]);
133
+ }, [open, selectionRef, timeoutMouseDown, selectedDelayTimeout]);
149
134
  const props = (0, _mergeProps.mergeProps)(triggerProps, {
150
135
  id,
151
136
  role: 'combobox',
152
137
  'aria-expanded': open ? 'true' : 'false',
153
138
  'aria-haspopup': 'listbox',
154
- 'aria-controls': open ? ariaControlsId : undefined,
139
+ 'aria-controls': open ? listElement?.id ?? (0, _utils.getFloatingFocusElement)(positionerElement)?.id : undefined,
155
140
  'aria-labelledby': ariaLabelledBy,
156
141
  'aria-readonly': readOnly || undefined,
157
142
  'aria-required': required || undefined,
@@ -231,6 +216,7 @@ const SelectTrigger = exports.SelectTrigger = /*#__PURE__*/React.forwardRef(func
231
216
  disabled,
232
217
  value,
233
218
  readOnly,
219
+ popupSide,
234
220
  placeholder: !hasSelectedValue
235
221
  };
236
222
  return (0, _useRenderElement.useRenderElement)('button', componentProps, {
@@ -15,6 +15,11 @@ export declare enum SelectTriggerDataAttributes {
15
15
  * Present when the select is readonly.
16
16
  */
17
17
  readonly = "data-readonly",
18
+ /**
19
+ * Indicates which side the corresponding popup is positioned relative to its anchor.
20
+ * @type {'top' | 'bottom' | 'left' | 'right' | 'inline-end' | 'inline-start' | null}
21
+ */
22
+ popupSide = "data-popup-side",
18
23
  /**
19
24
  * Present when the select is required.
20
25
  */
@@ -22,6 +22,11 @@ let SelectTriggerDataAttributes = exports.SelectTriggerDataAttributes = function
22
22
  * Present when the select is readonly.
23
23
  */
24
24
  SelectTriggerDataAttributes["readonly"] = "data-readonly";
25
+ /**
26
+ * Indicates which side the corresponding popup is positioned relative to its anchor.
27
+ * @type {'top' | 'bottom' | 'left' | 'right' | 'inline-end' | 'inline-start' | null}
28
+ */
29
+ SelectTriggerDataAttributes["popupSide"] = "data-popup-side";
25
30
  /**
26
31
  * Present when the select is required.
27
32
  */
@@ -113,9 +113,7 @@ const SliderControl = exports.SliderControl = /*#__PURE__*/React.forwardRef(func
113
113
  const stylesRef = React.useRef(null);
114
114
  const setStylesRef = (0, _useStableCallback.useStableCallback)(element => {
115
115
  if (element && stylesRef.current == null) {
116
- if (stylesRef.current == null) {
117
- stylesRef.current = getComputedStyle(element);
118
- }
116
+ stylesRef.current = (0, _owner.ownerWindow)(element).getComputedStyle(element);
119
117
  }
120
118
  });
121
119
 
@@ -127,7 +125,7 @@ const SliderControl = exports.SliderControl = /*#__PURE__*/React.forwardRef(func
127
125
  // This value should be equal to the radius or half the width/height of the thumb.
128
126
  const insetThumbOffsetRef = React.useRef(0);
129
127
  const latestValuesRef = (0, _useValueAsRef.useValueAsRef)(values);
130
- const updatePressedThumb = (0, _useStableCallback.useStableCallback)(nextIndex => {
128
+ function updatePressedThumb(nextIndex) {
131
129
  if (pressedThumbIndexRef.current !== nextIndex) {
132
130
  pressedThumbIndexRef.current = nextIndex;
133
131
  }
@@ -138,8 +136,8 @@ const SliderControl = exports.SliderControl = /*#__PURE__*/React.forwardRef(func
138
136
  return;
139
137
  }
140
138
  pressedInputRef.current = thumbElement.querySelector('input[type="range"]');
141
- });
142
- const getFingerState = (0, _useStableCallback.useStableCallback)(fingerCoords => {
139
+ }
140
+ function getFingerState(fingerCoords) {
143
141
  const control = controlRef.current;
144
142
  if (!control) {
145
143
  return null;
@@ -192,8 +190,8 @@ const SliderControl = exports.SliderControl = /*#__PURE__*/React.forwardRef(func
192
190
  pressedThumbIndexRef.current = collisionResult.thumbIndex;
193
191
  }
194
192
  return collisionResult;
195
- });
196
- const startPressing = (0, _useStableCallback.useStableCallback)(fingerCoords => {
193
+ }
194
+ function startPressing(fingerCoords) {
197
195
  pressedValuesRef.current = range ? values.slice() : null;
198
196
  latestValuesRef.current = values;
199
197
  const pressedThumbIndex = pressedThumbIndexRef.current;
@@ -234,8 +232,8 @@ const SliderControl = exports.SliderControl = /*#__PURE__*/React.forwardRef(func
234
232
  insetThumbOffsetRef.current = thumbRect[side] / 2;
235
233
  }
236
234
  }
237
- });
238
- const focusThumb = (0, _useStableCallback.useStableCallback)(thumbIndex => {
235
+ }
236
+ function focusThumb(thumbIndex) {
239
237
  const input = thumbRefs.current?.[thumbIndex]?.querySelector('input[type="range"]');
240
238
  if (!input) {
241
239
  return;
@@ -246,7 +244,7 @@ const SliderControl = exports.SliderControl = /*#__PURE__*/React.forwardRef(func
246
244
  // Supported in Chrome from 144+.
247
245
  focusVisible: false
248
246
  });
249
- });
247
+ }
250
248
  const handleTouchMove = (0, _useStableCallback.useStableCallback)(nativeEvent => {
251
249
  const fingerCoords = getFingerCoords(nativeEvent, touchIdRef);
252
250
  if (fingerCoords == null) {
@@ -141,10 +141,7 @@ const SliderRoot = exports.SliderRoot = /*#__PURE__*/React.forwardRef(function S
141
141
  setLastUsedThumbIndex(value);
142
142
  }
143
143
  });
144
- (0, _useRegisterFieldControl.useRegisterFieldControl)(controlRef, {
145
- id,
146
- value: valueUnwrapped
147
- });
144
+ (0, _useRegisterFieldControl.useRegisterFieldControl)(controlRef, id, valueUnwrapped);
148
145
  (0, _useValueChanged.useValueChanged)(valueUnwrapped, () => {
149
146
  clearErrors(name);
150
147
  if (shouldValidateOnChange()) {
@@ -11,6 +11,7 @@ var _useStableCallback = require("@base-ui/utils/useStableCallback");
11
11
  var _useIsoLayoutEffect = require("@base-ui/utils/useIsoLayoutEffect");
12
12
  var _useMergedRefs = require("@base-ui/utils/useMergedRefs");
13
13
  var _visuallyHidden = require("@base-ui/utils/visuallyHidden");
14
+ var _owner = require("@base-ui/utils/owner");
14
15
  var _clamp = require("../../internals/clamp");
15
16
  var _formatNumber = require("../../utils/formatNumber");
16
17
  var _mergeProps = require("../../merge-props");
@@ -21,7 +22,7 @@ var _valueToPercent = require("../../utils/valueToPercent");
21
22
  var _composite = require("../../internals/composite/composite");
22
23
  var _useCompositeListItem = require("../../internals/composite/list/useCompositeListItem");
23
24
  var _DirectionContext = require("../../internals/direction-context/DirectionContext");
24
- var _CSPContext = require("../../csp-provider/CSPContext");
25
+ var _CSPContext = require("../../internals/csp-context/CSPContext");
25
26
  var _FieldRootContext = require("../../internals/field-root-context/FieldRootContext");
26
27
  var _element = require("../../floating-ui-react/utils/element");
27
28
  var _useLabelableId = require("../../internals/labelable-provider/useLabelableId");
@@ -33,7 +34,7 @@ var _stateAttributesMapping = require("../root/stateAttributesMapping");
33
34
  var _SliderThumbDataAttributes = require("./SliderThumbDataAttributes");
34
35
  var _prehydrationScript = require("./prehydrationScript.min");
35
36
  var _jsxRuntime = require("react/jsx-runtime");
36
- const ALL_KEYS = new Set([_composite.ARROW_UP, _composite.ARROW_DOWN, _composite.ARROW_LEFT, _composite.ARROW_RIGHT, _composite.HOME, _composite.END, _composite.PAGE_UP, _composite.PAGE_DOWN]);
37
+ const ALL_KEYS = new Set([..._composite.COMPOSITE_KEYS, _composite.PAGE_UP, _composite.PAGE_DOWN]);
37
38
  function getDefaultAriaValueText(values, index, format, locale) {
38
39
  if (index < 0) {
39
40
  return undefined;
@@ -176,7 +177,7 @@ const SliderThumb = exports.SliderThumb = /*#__PURE__*/React.forwardRef(function
176
177
  }
177
178
  }, [getInsetPosition, inset, thumbValuePercent]);
178
179
  (0, _useIsoLayoutEffect.useIsoLayoutEffect)(() => {
179
- if (!inset || typeof ResizeObserver !== 'function') {
180
+ if (!inset) {
180
181
  return undefined;
181
182
  }
182
183
  const control = controlRef.current;
@@ -184,39 +185,32 @@ const SliderThumb = exports.SliderThumb = /*#__PURE__*/React.forwardRef(function
184
185
  if (!control || !thumb) {
185
186
  return undefined;
186
187
  }
187
- const resizeObserver = new ResizeObserver(getInsetPosition);
188
+ const ResizeObserverCtor = (0, _owner.ownerWindow)(control).ResizeObserver;
189
+ if (typeof ResizeObserverCtor !== 'function') {
190
+ return undefined;
191
+ }
192
+ const resizeObserver = new ResizeObserverCtor(getInsetPosition);
188
193
  resizeObserver.observe(control);
189
194
  resizeObserver.observe(thumb);
190
195
  return () => {
191
196
  resizeObserver.disconnect();
192
197
  };
193
198
  }, [controlRef, getInsetPosition, inset]);
194
- const getThumbStyle = React.useCallback(() => {
195
- const startEdge = vertical ? 'bottom' : 'insetInlineStart';
196
- const crossOffsetProperty = vertical ? 'left' : 'top';
197
- let zIndex;
198
- if (range) {
199
- if (activeIndex === index) {
200
- zIndex = 2;
201
- } else if (safeLastUsedThumbIndex === index) {
202
- zIndex = 1;
203
- }
204
- } else if (activeIndex === index) {
199
+ const startEdge = vertical ? 'bottom' : 'insetInlineStart';
200
+ const crossOffsetProperty = vertical ? 'left' : 'top';
201
+ let zIndex;
202
+ if (range) {
203
+ if (activeIndex === index) {
204
+ zIndex = 2;
205
+ } else if (safeLastUsedThumbIndex === index) {
205
206
  zIndex = 1;
206
207
  }
207
- if (!inset) {
208
- if (!Number.isFinite(thumbValuePercent)) {
209
- return _visuallyHidden.visuallyHidden;
210
- }
211
- return {
212
- position: 'absolute',
213
- [startEdge]: `${thumbValuePercent}%`,
214
- [crossOffsetProperty]: '50%',
215
- translate: `${(vertical || !rtl ? -1 : 1) * 50}% ${(vertical ? 1 : -1) * 50}%`,
216
- zIndex
217
- };
218
- }
219
- return {
208
+ } else if (activeIndex === index) {
209
+ zIndex = 1;
210
+ }
211
+ let thumbStyle;
212
+ if (inset) {
213
+ thumbStyle = {
220
214
  ['--position']: `${positionPercent ?? 0}%`,
221
215
  visibility: renderBeforeHydration && isHydrating || positionPercent === undefined ? 'hidden' : undefined,
222
216
  position: 'absolute',
@@ -225,7 +219,15 @@ const SliderThumb = exports.SliderThumb = /*#__PURE__*/React.forwardRef(function
225
219
  translate: `${(vertical || !rtl ? -1 : 1) * 50}% ${(vertical ? 1 : -1) * 50}%`,
226
220
  zIndex
227
221
  };
228
- }, [activeIndex, index, inset, isHydrating, positionPercent, range, renderBeforeHydration, rtl, safeLastUsedThumbIndex, thumbValuePercent, vertical]);
222
+ } else {
223
+ thumbStyle = !Number.isFinite(thumbValuePercent) ? _visuallyHidden.visuallyHidden : {
224
+ position: 'absolute',
225
+ [startEdge]: `${thumbValuePercent}%`,
226
+ [crossOffsetProperty]: '50%',
227
+ translate: `${(vertical || !rtl ? -1 : 1) * 50}% ${(vertical ? 1 : -1) * 50}%`,
228
+ zIndex
229
+ };
230
+ }
229
231
  let cssWritingMode;
230
232
  if (orientation === 'vertical') {
231
233
  cssWritingMode = rtl ? 'vertical-rl' : 'vertical-lr';
@@ -381,7 +383,7 @@ const SliderThumb = exports.SliderThumb = /*#__PURE__*/React.forwardRef(function
381
383
  pressedInputRef.current = inputRef.current;
382
384
  }
383
385
  },
384
- style: getThumbStyle(),
386
+ style: thumbStyle,
385
387
  suppressHydrationWarning: renderBeforeHydration || undefined
386
388
  }, elementProps],
387
389
  stateAttributesMapping: _stateAttributesMapping.sliderStateAttributesMapping
@@ -33,15 +33,13 @@ const SliderValue = exports.SliderValue = /*#__PURE__*/React.forwardRef(function
33
33
  formatOptionsRef,
34
34
  locale
35
35
  } = (0, _SliderRootContext.useSliderRootContext)();
36
- const outputFor = React.useMemo(() => {
37
- let htmlFor = '';
38
- for (const thumbMetadata of thumbMap.values()) {
39
- if (thumbMetadata?.inputId) {
40
- htmlFor += `${thumbMetadata.inputId} `;
41
- }
36
+ let htmlFor = '';
37
+ for (const thumbMetadata of thumbMap.values()) {
38
+ if (thumbMetadata?.inputId) {
39
+ htmlFor += `${thumbMetadata.inputId} `;
42
40
  }
43
- return htmlFor.trim() === '' ? undefined : htmlFor.trim();
44
- }, [thumbMap]);
41
+ }
42
+ const outputFor = htmlFor.trim() === '' ? undefined : htmlFor.trim();
45
43
  const formattedValues = React.useMemo(() => {
46
44
  const arr = [];
47
45
  for (let i = 0; i < values.length; i += 1) {
@@ -49,13 +47,7 @@ const SliderValue = exports.SliderValue = /*#__PURE__*/React.forwardRef(function
49
47
  }
50
48
  return arr;
51
49
  }, [formatOptionsRef, locale, values]);
52
- const defaultDisplayValue = React.useMemo(() => {
53
- const arr = [];
54
- for (let i = 0; i < values.length; i += 1) {
55
- arr.push(formattedValues[i] || values[i]);
56
- }
57
- return arr.join(' – ');
58
- }, [values, formattedValues]);
50
+ const defaultDisplayValue = values.map((v, i) => formattedValues[i] || v).join(' – ');
59
51
  const element = (0, _useRenderElement.useRenderElement)('output', componentProps, {
60
52
  state,
61
53
  ref: forwardedRef,
@@ -8,11 +8,11 @@ Object.defineProperty(exports, "__esModule", {
8
8
  exports.SwitchRoot = void 0;
9
9
  var React = _interopRequireWildcard(require("react"));
10
10
  var _useControlled = require("@base-ui/utils/useControlled");
11
- var _useStableCallback = require("@base-ui/utils/useStableCallback");
12
11
  var _useMergedRefs = require("@base-ui/utils/useMergedRefs");
13
12
  var _useIsoLayoutEffect = require("@base-ui/utils/useIsoLayoutEffect");
14
13
  var _visuallyHidden = require("@base-ui/utils/visuallyHidden");
15
14
  var _empty = require("@base-ui/utils/empty");
15
+ var _owner = require("@base-ui/utils/owner");
16
16
  var _useRenderElement = require("../../internals/useRenderElement");
17
17
  var _mergeProps = require("../../merge-props");
18
18
  var _useBaseUiId = require("../../internals/useBaseUiId");
@@ -46,7 +46,7 @@ const SwitchRoot = exports.SwitchRoot = /*#__PURE__*/React.forwardRef(function S
46
46
  inputRef: externalInputRef,
47
47
  name: nameProp,
48
48
  nativeButton = false,
49
- onCheckedChange: onCheckedChangeProp,
49
+ onCheckedChange,
50
50
  readOnly = false,
51
51
  required = false,
52
52
  disabled: disabledProp = false,
@@ -77,7 +77,6 @@ const SwitchRoot = exports.SwitchRoot = /*#__PURE__*/React.forwardRef(function S
77
77
  } = (0, _LabelableContext.useLabelableContext)();
78
78
  const disabled = fieldDisabled || disabledProp;
79
79
  const name = fieldName ?? nameProp;
80
- const onCheckedChange = (0, _useStableCallback.useStableCallback)(onCheckedChangeProp);
81
80
  const inputRef = React.useRef(null);
82
81
  const handleInputRef = (0, _useMergedRefs.useMergedRefs)(inputRef, externalInputRef, validation.inputRef);
83
82
  const switchRef = React.useRef(null);
@@ -94,10 +93,7 @@ const SwitchRoot = exports.SwitchRoot = /*#__PURE__*/React.forwardRef(function S
94
93
  name: 'Switch',
95
94
  state: 'checked'
96
95
  });
97
- (0, _useRegisterFieldControl.useRegisterFieldControl)(switchRef, {
98
- id,
99
- value: checked
100
- });
96
+ (0, _useRegisterFieldControl.useRegisterFieldControl)(switchRef, id, checked);
101
97
  (0, _useIsoLayoutEffect.useIsoLayoutEffect)(() => {
102
98
  if (inputRef.current) {
103
99
  setFilled(inputRef.current.checked);
@@ -149,7 +145,11 @@ const SwitchRoot = exports.SwitchRoot = /*#__PURE__*/React.forwardRef(function S
149
145
  return;
150
146
  }
151
147
  event.preventDefault();
152
- inputRef.current?.dispatchEvent(new PointerEvent('click', {
148
+ const input = inputRef.current;
149
+ if (!input) {
150
+ return;
151
+ }
152
+ input.dispatchEvent(new ((0, _owner.ownerWindow)(input).PointerEvent)('click', {
153
153
  bubbles: true,
154
154
  shiftKey: event.shiftKey,
155
155
  ctrlKey: event.ctrlKey,
@@ -158,7 +158,7 @@ const SwitchRoot = exports.SwitchRoot = /*#__PURE__*/React.forwardRef(function S
158
158
  }));
159
159
  }
160
160
  };
161
- const inputProps = React.useMemo(() => (0, _mergeProps.mergeProps)({
161
+ const inputProps = (0, _mergeProps.mergeProps)({
162
162
  checked,
163
163
  disabled,
164
164
  form,
@@ -195,7 +195,7 @@ const SwitchRoot = exports.SwitchRoot = /*#__PURE__*/React.forwardRef(function S
195
195
  // To avoid this, we only set the value if it's defined
196
196
  value !== undefined ? {
197
197
  value
198
- } : _empty.EMPTY_OBJECT), [checked, disabled, form, handleInputRef, hiddenInputId, name, onCheckedChange, readOnly, required, setCheckedState, validation, value]);
198
+ } : _empty.EMPTY_OBJECT);
199
199
  const state = React.useMemo(() => ({
200
200
  ...fieldState,
201
201
  checked,
@@ -9,7 +9,6 @@ exports.SwitchThumb = void 0;
9
9
  var React = _interopRequireWildcard(require("react"));
10
10
  var _SwitchRootContext = require("../root/SwitchRootContext");
11
11
  var _useRenderElement = require("../../internals/useRenderElement");
12
- var _FieldRootContext = require("../../internals/field-root-context/FieldRootContext");
13
12
  var _stateAttributesMapping = require("../stateAttributesMapping");
14
13
  /**
15
14
  * The movable part of the switch that indicates whether the switch is on or off.
@@ -24,16 +23,9 @@ const SwitchThumb = exports.SwitchThumb = /*#__PURE__*/React.forwardRef(function
24
23
  style,
25
24
  ...elementProps
26
25
  } = componentProps;
27
- const {
28
- state: fieldState
29
- } = (0, _FieldRootContext.useFieldRootContext)();
30
26
  const state = (0, _SwitchRootContext.useSwitchRootContext)();
31
- const extendedState = {
32
- ...fieldState,
33
- ...state
34
- };
35
27
  return (0, _useRenderElement.useRenderElement)('span', componentProps, {
36
- state: extendedState,
28
+ state,
37
29
  ref: forwardedRef,
38
30
  stateAttributesMapping: _stateAttributesMapping.stateAttributesMapping,
39
31
  props: elementProps
@@ -16,7 +16,7 @@ var _stateAttributesMapping = require("../root/stateAttributesMapping");
16
16
  var _TabsListContext = require("../list/TabsListContext");
17
17
  var _prehydrationScript = require("./prehydrationScript.min");
18
18
  var _TabsIndicatorCssVars = require("./TabsIndicatorCssVars");
19
- var _CSPContext = require("../../csp-provider/CSPContext");
19
+ var _CSPContext = require("../../internals/csp-context/CSPContext");
20
20
  var _jsxRuntime = require("react/jsx-runtime");
21
21
  const stateAttributesMapping = {
22
22
  ..._stateAttributesMapping.tabsStateAttributesMapping,
@@ -30,7 +30,7 @@ const stateAttributesMapping = {
30
30
  *
31
31
  * Documentation: [Base UI Tabs](https://base-ui.com/react/components/tabs)
32
32
  */
33
- const TabsIndicator = exports.TabsIndicator = /*#__PURE__*/React.forwardRef(function TabIndicator(componentProps, forwardedRef) {
33
+ const TabsIndicator = exports.TabsIndicator = /*#__PURE__*/React.forwardRef(function TabsIndicator(componentProps, forwardedRef) {
34
34
  const {
35
35
  className,
36
36
  render,
@@ -95,29 +95,24 @@ const TabsIndicator = exports.TabsIndicator = /*#__PURE__*/React.forwardRef(func
95
95
  bottom = tabsListElement.scrollHeight - top - height;
96
96
  }
97
97
  }
98
- const activeTabPosition = React.useMemo(() => isTabSelected ? {
98
+ const activeTabPosition = isTabSelected ? {
99
99
  left,
100
100
  right,
101
101
  top,
102
102
  bottom
103
- } : null, [left, right, top, bottom, isTabSelected]);
104
- const activeTabSize = React.useMemo(() => isTabSelected ? {
103
+ } : null;
104
+ const activeTabSize = isTabSelected ? {
105
105
  width,
106
106
  height
107
- } : null, [width, height, isTabSelected]);
108
- const style = React.useMemo(() => {
109
- if (!isTabSelected) {
110
- return undefined;
111
- }
112
- return {
113
- [_TabsIndicatorCssVars.TabsIndicatorCssVars.activeTabLeft]: `${left}px`,
114
- [_TabsIndicatorCssVars.TabsIndicatorCssVars.activeTabRight]: `${right}px`,
115
- [_TabsIndicatorCssVars.TabsIndicatorCssVars.activeTabTop]: `${top}px`,
116
- [_TabsIndicatorCssVars.TabsIndicatorCssVars.activeTabBottom]: `${bottom}px`,
117
- [_TabsIndicatorCssVars.TabsIndicatorCssVars.activeTabWidth]: `${width}px`,
118
- [_TabsIndicatorCssVars.TabsIndicatorCssVars.activeTabHeight]: `${height}px`
119
- };
120
- }, [left, right, top, bottom, width, height, isTabSelected]);
107
+ } : null;
108
+ const style = isTabSelected ? {
109
+ [_TabsIndicatorCssVars.TabsIndicatorCssVars.activeTabLeft]: `${left}px`,
110
+ [_TabsIndicatorCssVars.TabsIndicatorCssVars.activeTabRight]: `${right}px`,
111
+ [_TabsIndicatorCssVars.TabsIndicatorCssVars.activeTabTop]: `${top}px`,
112
+ [_TabsIndicatorCssVars.TabsIndicatorCssVars.activeTabBottom]: `${bottom}px`,
113
+ [_TabsIndicatorCssVars.TabsIndicatorCssVars.activeTabWidth]: `${width}px`,
114
+ [_TabsIndicatorCssVars.TabsIndicatorCssVars.activeTabHeight]: `${height}px`
115
+ } : undefined;
121
116
  const displayIndicator = isTabSelected && width > 0 && height > 0;
122
117
  const state = {
123
118
  orientation,
@@ -41,20 +41,14 @@ const TabsList = exports.TabsList = /*#__PURE__*/React.forwardRef(function TabsL
41
41
  const indicatorUpdateListenersRef = React.useRef(new Set());
42
42
  const tabResizeObserverElementsRef = React.useRef(new Set());
43
43
  const resizeObserverRef = React.useRef(null);
44
- const notifyIndicatorUpdateListeners = (0, _useStableCallback.useStableCallback)(() => {
45
- indicatorUpdateListenersRef.current.forEach(listener => {
46
- listener();
47
- });
48
- });
49
44
  React.useEffect(() => {
50
45
  if (typeof ResizeObserver === 'undefined') {
51
46
  return undefined;
52
47
  }
53
48
  const resizeObserver = new ResizeObserver(() => {
54
- if (!indicatorUpdateListenersRef.current.size) {
55
- return;
56
- }
57
- notifyIndicatorUpdateListeners();
49
+ indicatorUpdateListenersRef.current.forEach(listener => {
50
+ listener();
51
+ });
58
52
  });
59
53
  resizeObserverRef.current = resizeObserver;
60
54
  if (tabsListElement) {
@@ -67,7 +61,7 @@ const TabsList = exports.TabsList = /*#__PURE__*/React.forwardRef(function TabsL
67
61
  resizeObserver.disconnect();
68
62
  resizeObserverRef.current = null;
69
63
  };
70
- }, [tabsListElement, notifyIndicatorUpdateListeners]);
64
+ }, [tabsListElement]);
71
65
  const registerIndicatorUpdateListener = (0, _useStableCallback.useStableCallback)(listener => {
72
66
  indicatorUpdateListenersRef.current.add(listener);
73
67
  return () => {
@@ -1,11 +1,12 @@
1
1
  import * as React from 'react';
2
2
  import type { TabsRoot } from "../root/TabsRoot.js";
3
+ import type { TabsTab } from "../tab/TabsTab.js";
3
4
  export interface TabsListContext {
4
5
  activateOnFocus: boolean;
5
6
  highlightedTabIndex: number;
6
7
  registerIndicatorUpdateListener: (listener: () => void) => () => void;
7
8
  registerTabResizeObserverElement: (element: HTMLElement) => () => void;
8
- onTabActivation: (newValue: any, eventDetails: TabsRoot.ChangeEventDetails) => void;
9
+ onTabActivation: (newValue: TabsTab.Value, eventDetails: TabsRoot.ChangeEventDetails) => void;
9
10
  setHighlightedTabIndex: (index: number) => void;
10
11
  tabsListElement: HTMLElement | null;
11
12
  }
@@ -29,7 +29,7 @@ const stateAttributesMapping = {
29
29
  *
30
30
  * Documentation: [Base UI Tabs](https://base-ui.com/react/components/tabs)
31
31
  */
32
- const TabsPanel = exports.TabsPanel = /*#__PURE__*/React.forwardRef(function TabPanel(componentProps, forwardedRef) {
32
+ const TabsPanel = exports.TabsPanel = /*#__PURE__*/React.forwardRef(function TabsPanel(componentProps, forwardedRef) {
33
33
  const {
34
34
  className,
35
35
  value,
@@ -40,10 +40,25 @@ export interface TabsRootProps extends BaseUIComponentProps<'div', TabsRootState
40
40
  orientation?: TabsRoot.Orientation | undefined;
41
41
  /**
42
42
  * Callback invoked when new value is being set.
43
+ *
44
+ * The event `reason` is `'none'` for user-initiated changes, such as a click
45
+ * or keyboard navigation; `'initial'` for the first automatic selection or
46
+ * fallback in uncontrolled roots when `defaultValue` is omitted or
47
+ * `undefined`, including when the implicit initial value is disabled or
48
+ * missing; `'disabled'` for automatic fallback when the selected tab becomes
49
+ * disabled in uncontrolled roots; or `'missing'` for automatic fallback when
50
+ * the selected tab is removed, or when an explicit `defaultValue` never
51
+ * matches a mounted tab in uncontrolled roots.
52
+ *
53
+ * For automatic changes, the selected value can be `null` when no enabled Tab
54
+ * is available as a fallback.
55
+ *
56
+ * Automatic changes cannot be canceled; calling `eventDetails.cancel()` for
57
+ * `'initial'`, `'disabled'`, or `'missing'` has no effect.
43
58
  */
44
59
  onValueChange?: ((value: TabsTab.Value, eventDetails: TabsRoot.ChangeEventDetails) => void) | undefined;
45
60
  }
46
- export type TabsRootChangeEventReason = typeof REASONS.none;
61
+ export type TabsRootChangeEventReason = typeof REASONS.none | typeof REASONS.disabled | typeof REASONS.missing | typeof REASONS.initial;
47
62
  export type TabsRootChangeEventDetails = BaseUIChangeEventDetails<TabsRoot.ChangeEventReason, {
48
63
  activationDirection: TabsTab.ActivationDirection;
49
64
  }>;