@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
@@ -10,7 +10,7 @@ import { REASONS } from "../../internals/reasons.js";
10
10
  * Documentation: [Base UI Collapsible](https://base-ui.com/react/components/collapsible)
11
11
  */
12
12
  export declare const CollapsibleRoot: React.ForwardRefExoticComponent<Omit<CollapsibleRootProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
13
- export interface CollapsibleRootState extends Pick<UseCollapsibleRootReturnValue, 'open' | 'disabled'> {}
13
+ export interface CollapsibleRootState extends Pick<UseCollapsibleRootReturnValue, 'open' | 'disabled' | 'transitionStatus'> {}
14
14
  export interface CollapsibleRootProps extends BaseUIComponentProps<'div', CollapsibleRootState> {
15
15
  /**
16
16
  * Whether the collapsible panel is currently open.
@@ -1,11 +1,9 @@
1
1
  import * as React from 'react';
2
2
  import type { UseCollapsibleRootReturnValue } from "./useCollapsibleRoot.js";
3
3
  import type { CollapsibleRoot, CollapsibleRootState } from "./CollapsibleRoot.js";
4
- import type { TransitionStatus } from "../../internals/useTransitionStatus.js";
5
4
  export interface CollapsibleRootContext extends UseCollapsibleRootReturnValue {
6
5
  onOpenChange: (open: boolean, eventDetails: CollapsibleRoot.ChangeEventDetails) => void;
7
6
  state: CollapsibleRootState;
8
- transitionStatus: TransitionStatus;
9
7
  }
10
8
  export declare const CollapsibleRootContext: React.Context<CollapsibleRootContext | undefined>;
11
9
  export declare function useCollapsibleRootContext(): CollapsibleRootContext;
@@ -1,11 +1,6 @@
1
1
  import * as React from 'react';
2
2
  import { TransitionStatus } from "../../internals/useTransitionStatus.js";
3
3
  import type { CollapsibleRoot } from "./CollapsibleRoot.js";
4
- export type AnimationType = 'css-transition' | 'css-animation' | 'none' | null;
5
- export interface Dimensions {
6
- height: number | undefined;
7
- width: number | undefined;
8
- }
9
4
  export declare function useCollapsibleRoot(parameters: UseCollapsibleRootParameters): UseCollapsibleRootReturnValue;
10
5
  export interface UseCollapsibleRootParameters {
11
6
  /**
@@ -32,17 +27,11 @@ export interface UseCollapsibleRootParameters {
32
27
  disabled: boolean;
33
28
  }
34
29
  export interface UseCollapsibleRootReturnValue {
35
- abortControllerRef: React.RefObject<AbortController | null>;
36
- animationTypeRef: React.RefObject<AnimationType>;
37
30
  /**
38
31
  * Whether the component should ignore user interaction.
39
32
  */
40
33
  disabled: boolean;
41
34
  handleTrigger: (event: React.MouseEvent | React.KeyboardEvent) => void;
42
- /**
43
- * The height of the panel.
44
- */
45
- height: number | undefined;
46
35
  /**
47
36
  * Whether the collapsible panel is mounted for transition and hidden-state
48
37
  * purposes. This can be `false` while the element remains in the DOM when
@@ -54,25 +43,9 @@ export interface UseCollapsibleRootReturnValue {
54
43
  */
55
44
  open: boolean;
56
45
  panelId: React.HTMLAttributes<Element>['id'];
57
- panelRef: React.RefObject<HTMLElement | null>;
58
- runOnceAnimationsFinish: (fnToExecute: () => void, signal?: AbortSignal | null) => void;
59
- setDimensions: React.Dispatch<React.SetStateAction<Dimensions>>;
60
- setHiddenUntilFound: React.Dispatch<React.SetStateAction<boolean>>;
61
- setKeepMounted: React.Dispatch<React.SetStateAction<boolean>>;
62
46
  setMounted: (nextMounted: boolean) => void;
63
47
  setOpen: (open: boolean) => void;
64
48
  setPanelIdState: (id: string | undefined) => void;
65
- setVisible: React.Dispatch<React.SetStateAction<boolean>>;
66
- transitionDimensionRef: React.RefObject<'height' | 'width' | null>;
67
49
  transitionStatus: TransitionStatus;
68
- /**
69
- * The visible state of the panel used to determine the `[hidden]` attribute
70
- * only when CSS keyframe animations are used.
71
- */
72
- visible: boolean;
73
- /**
74
- * The width of the panel.
75
- */
76
- width: number | undefined;
77
50
  }
78
51
  export interface UseCollapsibleRootState {}
@@ -2,12 +2,10 @@
2
2
 
3
3
  import * as React from 'react';
4
4
  import { useControlled } from '@base-ui/utils/useControlled';
5
- import { useIsoLayoutEffect } from '@base-ui/utils/useIsoLayoutEffect';
6
5
  import { useStableCallback } from '@base-ui/utils/useStableCallback';
7
6
  import { useBaseUiId } from "../../internals/useBaseUiId.js";
8
7
  import { createChangeEventDetails } from "../../internals/createBaseUIEventDetails.js";
9
8
  import { REASONS } from "../../internals/reasons.js";
10
- import { useAnimationsFinished } from "../../internals/useAnimationsFinished.js";
11
9
  import { useTransitionStatus } from "../../internals/useTransitionStatus.js";
12
10
  export function useCollapsibleRoot(parameters) {
13
11
  const {
@@ -16,7 +14,6 @@ export function useCollapsibleRoot(parameters) {
16
14
  onOpenChange,
17
15
  disabled
18
16
  } = parameters;
19
- const isControlled = openParam !== undefined;
20
17
  const [open, setOpen] = useControlled({
21
18
  controlled: openParam,
22
19
  default: defaultOpen,
@@ -28,24 +25,9 @@ export function useCollapsibleRoot(parameters) {
28
25
  setMounted,
29
26
  transitionStatus
30
27
  } = useTransitionStatus(open, true, true);
31
- const [visible, setVisible] = React.useState(open);
32
- const [{
33
- height,
34
- width
35
- }, setDimensions] = React.useState({
36
- height: undefined,
37
- width: undefined
38
- });
39
28
  const defaultPanelId = useBaseUiId();
40
29
  const [panelIdState, setPanelIdState] = React.useState();
41
30
  const panelId = panelIdState ?? defaultPanelId;
42
- const [hiddenUntilFound, setHiddenUntilFound] = React.useState(false);
43
- const [keepMounted, setKeepMounted] = React.useState(false);
44
- const abortControllerRef = React.useRef(null);
45
- const animationTypeRef = React.useRef(null);
46
- const transitionDimensionRef = React.useRef(null);
47
- const panelRef = React.useRef(null);
48
- const runOnceAnimationsFinish = useAnimationsFinished(panelRef, false);
49
31
  const handleTrigger = useStableCallback(event => {
50
32
  const nextOpen = !open;
51
33
  const eventDetails = createChangeEventDetails(REASONS.triggerPress, event.nativeEvent);
@@ -53,61 +35,17 @@ export function useCollapsibleRoot(parameters) {
53
35
  if (eventDetails.isCanceled) {
54
36
  return;
55
37
  }
56
- const panel = panelRef.current;
57
- if (animationTypeRef.current === 'css-animation' && panel != null) {
58
- panel.style.removeProperty('animation-name');
59
- }
60
- if (!hiddenUntilFound && !keepMounted) {
61
- if (animationTypeRef.current != null && animationTypeRef.current !== 'css-animation') {
62
- if (!mounted && nextOpen) {
63
- setMounted(true);
64
- }
65
- }
66
- if (animationTypeRef.current === 'css-animation') {
67
- if (!visible && nextOpen) {
68
- setVisible(true);
69
- }
70
- if (!mounted && nextOpen) {
71
- setMounted(true);
72
- }
73
- }
74
- }
75
38
  setOpen(nextOpen);
76
- if (animationTypeRef.current === 'none' && mounted && !nextOpen) {
77
- setMounted(false);
78
- }
79
39
  });
80
- useIsoLayoutEffect(() => {
81
- /**
82
- * Close immediately in controlled mode when no CSS animations or
83
- * transitions are applied. `keepMounted` only keeps the element in the
84
- * DOM; `mounted` must still become `false` so the panel regains `hidden`.
85
- */
86
- if (isControlled && animationTypeRef.current === 'none' && !open) {
87
- setMounted(false);
88
- }
89
- }, [isControlled, open, openParam, setMounted]);
90
40
  return React.useMemo(() => ({
91
- abortControllerRef,
92
- animationTypeRef,
93
41
  disabled,
94
42
  handleTrigger,
95
- height,
96
43
  mounted,
97
44
  open,
98
45
  panelId,
99
- panelRef,
100
- runOnceAnimationsFinish,
101
- setDimensions,
102
- setHiddenUntilFound,
103
- setKeepMounted,
104
46
  setMounted,
105
47
  setOpen,
106
48
  setPanelIdState,
107
- setVisible,
108
- transitionDimensionRef,
109
- transitionStatus,
110
- visible,
111
- width
112
- }), [abortControllerRef, animationTypeRef, disabled, handleTrigger, height, mounted, open, panelId, panelRef, runOnceAnimationsFinish, setDimensions, setHiddenUntilFound, setKeepMounted, setMounted, setOpen, setVisible, transitionDimensionRef, transitionStatus, visible, width]);
49
+ transitionStatus
50
+ }), [disabled, handleTrigger, mounted, open, panelId, setMounted, setOpen, setPanelIdState, transitionStatus]);
113
51
  }
@@ -42,15 +42,14 @@ export const CollapsibleTrigger = /*#__PURE__*/React.forwardRef(function Collaps
42
42
  focusableWhenDisabled: true,
43
43
  native: nativeButton
44
44
  });
45
- const props = React.useMemo(() => ({
46
- 'aria-controls': open ? panelId : undefined,
47
- 'aria-expanded': open,
48
- onClick: handleTrigger
49
- }), [panelId, open, handleTrigger]);
50
45
  const element = useRenderElement('button', componentProps, {
51
46
  state,
52
47
  ref: [forwardedRef, buttonRef],
53
- props: [props, elementProps, getButtonProps],
48
+ props: [{
49
+ 'aria-controls': open ? panelId : undefined,
50
+ 'aria-expanded': open,
51
+ onClick: handleTrigger
52
+ }, elementProps, getButtonProps],
54
53
  stateAttributesMapping
55
54
  });
56
55
  return element;
@@ -16,8 +16,8 @@ import { popupStateMapping } from "../../utils/popupStateMapping.js";
16
16
  */
17
17
  export const ComboboxArrow = /*#__PURE__*/React.forwardRef(function ComboboxArrow(componentProps, forwardedRef) {
18
18
  const {
19
- className,
20
19
  render,
20
+ className,
21
21
  style,
22
22
  ...elementProps
23
23
  } = componentProps;
@@ -20,8 +20,8 @@ const stateAttributesMapping = {
20
20
  */
21
21
  export const ComboboxBackdrop = /*#__PURE__*/React.forwardRef(function ComboboxBackdrop(componentProps, forwardedRef) {
22
22
  const {
23
- className,
24
23
  render,
24
+ className,
25
25
  style,
26
26
  ...elementProps
27
27
  } = componentProps;
@@ -12,6 +12,7 @@ import { stopEvent } from "../../floating-ui-react/utils.js";
12
12
  import { selectors } from "../store.js";
13
13
  import { createChangeEventDetails } from "../../internals/createBaseUIEventDetails.js";
14
14
  import { REASONS } from "../../internals/reasons.js";
15
+ import { useDirection } from "../../internals/direction-context/DirectionContext.js";
15
16
 
16
17
  /**
17
18
  * An individual chip that represents a value in a multiselectable input.
@@ -32,6 +33,7 @@ export const ComboboxChip = /*#__PURE__*/React.forwardRef(function ComboboxChip(
32
33
  setHighlightedChipIndex,
33
34
  chipsRef
34
35
  } = useComboboxChipsContext();
36
+ const direction = useDirection();
35
37
  const disabled = useStore(store, selectors.disabled);
36
38
  const readOnly = useStore(store, selectors.readOnly);
37
39
  const selectedValue = useStore(store, selectors.selectedValue);
@@ -41,14 +43,17 @@ export const ComboboxChip = /*#__PURE__*/React.forwardRef(function ComboboxChip(
41
43
  } = useCompositeListItem();
42
44
  function handleKeyDown(event) {
43
45
  let nextIndex = index;
44
- if (event.key === 'ArrowLeft') {
46
+ const isRtl = direction === 'rtl';
47
+ const previousChipKey = isRtl ? 'ArrowRight' : 'ArrowLeft';
48
+ const nextChipKey = isRtl ? 'ArrowLeft' : 'ArrowRight';
49
+ if (event.key === previousChipKey) {
45
50
  event.preventDefault();
46
51
  if (index > 0) {
47
52
  nextIndex = index - 1;
48
53
  } else {
49
54
  nextIndex = undefined;
50
55
  }
51
- } else if (event.key === 'ArrowRight') {
56
+ } else if (event.key === nextChipKey) {
52
57
  event.preventDefault();
53
58
  if (index < chipsRef.current.length - 1) {
54
59
  nextIndex = index + 1;
@@ -17,6 +17,10 @@ export interface ComboboxClearState {
17
17
  * Whether the component should ignore user interaction.
18
18
  */
19
19
  disabled: boolean;
20
+ /**
21
+ * Whether the clear button should be visible.
22
+ */
23
+ visible: boolean;
20
24
  /**
21
25
  * The transition status of the component.
22
26
  */
@@ -68,6 +68,7 @@ export const ComboboxClear = /*#__PURE__*/React.forwardRef(function ComboboxClea
68
68
  } = useTransitionStatus(visible);
69
69
  const state = {
70
70
  disabled,
71
+ visible,
71
72
  open,
72
73
  transitionStatus
73
74
  };
@@ -7,6 +7,10 @@ export declare enum ComboboxClearDataAttributes {
7
7
  * Present when the button is disabled.
8
8
  */
9
9
  disabled = "data-disabled",
10
+ /**
11
+ * Present when the clear button is visible.
12
+ */
13
+ visible = "data-visible",
10
14
  /**
11
15
  * Present when the button is animating in.
12
16
  */
@@ -8,6 +8,10 @@ export let ComboboxClearDataAttributes = function (ComboboxClearDataAttributes)
8
8
  * Present when the button is disabled.
9
9
  */
10
10
  ComboboxClearDataAttributes["disabled"] = "data-disabled";
11
+ /**
12
+ * Present when the clear button is visible.
13
+ */
14
+ ComboboxClearDataAttributes["visible"] = "data-visible";
11
15
  /**
12
16
  * Present when the button is animating in.
13
17
  */
@@ -11,8 +11,8 @@ import { useRenderElement } from "../../internals/useRenderElement.js";
11
11
  */
12
12
  export const ComboboxIcon = /*#__PURE__*/React.forwardRef(function ComboboxIcon(componentProps, forwardedRef) {
13
13
  const {
14
- className,
15
14
  render,
15
+ className,
16
16
  style,
17
17
  ...elementProps
18
18
  } = componentProps;
@@ -9,7 +9,7 @@ import { useRenderElement } from "../../internals/useRenderElement.js";
9
9
  import { useComboboxDerivedItemsContext, useComboboxInputValueContext, useComboboxRootContext } from "../root/ComboboxRootContext.js";
10
10
  import { triggerStateAttributesMapping } from "../utils/stateAttributesMapping.js";
11
11
  import { selectors } from "../store.js";
12
- import { useFieldRootContext } from "../../internals/field-root-context/FieldRootContext.js";
12
+ import { DEFAULT_FIELD_ROOT_CONTEXT, FieldRootContext, useFieldRootContext } from "../../internals/field-root-context/FieldRootContext.js";
13
13
  import { DEFAULT_FIELD_STATE_ATTRIBUTES } from "../../internals/field-constants/constants.js";
14
14
  import { useLabelableContext } from "../../internals/labelable-provider/LabelableContext.js";
15
15
  import { useComboboxChipsContext } from "../chips/ComboboxChipsContext.js";
@@ -89,6 +89,7 @@ export const ComboboxInput = /*#__PURE__*/React.forwardRef(function ComboboxInpu
89
89
  const isComposingRef = React.useRef(false);
90
90
  const lastActiveIndexRef = React.useRef(null);
91
91
  const shouldRestoreActiveIndexRef = React.useRef(false);
92
+ const inputOwnsFormValue = selectionMode === 'none' && !hasPositionerParent;
92
93
  const setInputElement = useStableCallback(element => {
93
94
  const nextIsInsidePopup = hasPositionerParent || store.state.inline;
94
95
  if (nextIsInsidePopup && !store.state.hasInputValue) {
@@ -96,7 +97,8 @@ export const ComboboxInput = /*#__PURE__*/React.forwardRef(function ComboboxInpu
96
97
  }
97
98
  store.update({
98
99
  inputElement: element,
99
- inputInsidePopup: nextIsInsidePopup
100
+ inputInsidePopup: nextIsInsidePopup,
101
+ inputOwnsFormValue
100
102
  });
101
103
  });
102
104
  const validationProps = hasPositionerParent || !validation ? elementProps : validation.getValidationProps(elementProps);
@@ -117,15 +119,18 @@ export const ComboboxInput = /*#__PURE__*/React.forwardRef(function ComboboxInpu
117
119
  highlightedChipIndex
118
120
  } = comboboxChipsContext;
119
121
  const renderedChipsCount = comboboxChipsContext.chipsRef.current.length;
122
+ const isRtl = direction === 'rtl';
123
+ const previousChipKey = isRtl ? 'ArrowRight' : 'ArrowLeft';
124
+ const nextChipKey = isRtl ? 'ArrowLeft' : 'ArrowRight';
120
125
  if (highlightedChipIndex !== undefined) {
121
- if (event.key === 'ArrowLeft') {
126
+ if (event.key === previousChipKey) {
122
127
  event.preventDefault();
123
128
  if (highlightedChipIndex > 0) {
124
129
  nextIndex = highlightedChipIndex - 1;
125
130
  } else {
126
131
  nextIndex = undefined;
127
132
  }
128
- } else if (event.key === 'ArrowRight') {
133
+ } else if (event.key === nextChipKey) {
129
134
  event.preventDefault();
130
135
  if (highlightedChipIndex < renderedChipsCount - 1) {
131
136
  nextIndex = highlightedChipIndex + 1;
@@ -148,7 +153,7 @@ export const ComboboxInput = /*#__PURE__*/React.forwardRef(function ComboboxInpu
148
153
  }
149
154
 
150
155
  // Handle navigation when no chip is highlighted
151
- if (event.key === 'ArrowLeft' && (event.currentTarget.selectionStart ?? 0) === 0 && selectedValue.length > 0) {
156
+ if (event.key === previousChipKey && (event.currentTarget.selectionStart ?? 0) === 0 && selectedValue.length > 0) {
152
157
  event.preventDefault();
153
158
  nextIndex = renderedChipsCount > 0 ? renderedChipsCount - 1 : undefined;
154
159
  } else if (event.key === 'Backspace' && event.currentTarget.value === '' && selectedValue.length > 0) {
@@ -174,7 +179,7 @@ export const ComboboxInput = /*#__PURE__*/React.forwardRef(function ComboboxInpu
174
179
  readOnly,
175
180
  required: selectionMode === 'none' ? required : undefined,
176
181
  form,
177
- ...(selectionMode === 'none' && name && {
182
+ ...(inputOwnsFormValue && name && {
178
183
  name
179
184
  }),
180
185
  id,
@@ -396,10 +401,14 @@ export const ComboboxInput = /*#__PURE__*/React.forwardRef(function ComboboxInpu
396
401
  }, validationProps],
397
402
  stateAttributesMapping: triggerStateAttributesMapping
398
403
  });
404
+ const renderedInput = hasPositionerParent ? /*#__PURE__*/_jsx(FieldRootContext.Provider, {
405
+ value: DEFAULT_FIELD_ROOT_CONTEXT,
406
+ children: element
407
+ }) : element;
399
408
  return /*#__PURE__*/_jsxs(React.Fragment, {
400
409
  children: [open && focusManagerModal && /*#__PURE__*/_jsx(ComboboxInternalDismissButton, {
401
410
  ref: store.state.startDismissRef
402
- }), element]
411
+ }), renderedInput]
403
412
  });
404
413
  });
405
414
  if (process.env.NODE_ENV !== "production") ComboboxInput.displayName = "ComboboxInput";
@@ -24,11 +24,11 @@ export const ComboboxItem = /*#__PURE__*/React.memo(/*#__PURE__*/React.forwardRe
24
24
  const {
25
25
  render,
26
26
  className,
27
+ style,
27
28
  value: itemValue = null,
28
29
  index: indexProp,
29
30
  disabled = false,
30
31
  nativeButton = false,
31
- style,
32
32
  ...elementProps
33
33
  } = componentProps;
34
34
  const didPointerDownRef = React.useRef(false);
@@ -55,7 +55,7 @@ export const ComboboxItem = /*#__PURE__*/React.memo(/*#__PURE__*/React.forwardRe
55
55
  const rootId = useStore(store, selectors.id);
56
56
  const highlighted = useStore(store, selectors.isActive, index);
57
57
  const matchesSelectedValue = useStore(store, selectors.isSelected, itemValue);
58
- const getItemProps = useStore(store, selectors.getItemProps);
58
+ const itemProps = useStore(store, selectors.itemProps);
59
59
  const itemRef = React.useRef(null);
60
60
  const id = rootId != null && hasRegistered ? `${rootId}-${index}` : undefined;
61
61
  const selected = matchesSelectedValue && selectable;
@@ -101,17 +101,6 @@ export const ComboboxItem = /*#__PURE__*/React.memo(/*#__PURE__*/React.forwardRe
101
101
  store.set('selectedIndex', index);
102
102
  }
103
103
  }, [hasRegistered, hasItems, open, store, index, itemValue, isItemEqualToValue]);
104
- const state = {
105
- disabled,
106
- selected,
107
- highlighted
108
- };
109
- const rootProps = getItemProps({
110
- active: highlighted,
111
- selected
112
- });
113
- rootProps.id = undefined;
114
- rootProps.onFocus = undefined;
115
104
  const {
116
105
  getButtonProps,
117
106
  buttonRef
@@ -121,6 +110,11 @@ export const ComboboxItem = /*#__PURE__*/React.memo(/*#__PURE__*/React.forwardRe
121
110
  native: nativeButton,
122
111
  composite: true
123
112
  });
113
+ const state = {
114
+ disabled,
115
+ selected,
116
+ highlighted
117
+ };
124
118
  function commitSelection(nativeEvent) {
125
119
  function selectItem() {
126
120
  store.state.handleSelection(nativeEvent, itemValue);
@@ -167,7 +161,7 @@ export const ComboboxItem = /*#__PURE__*/React.memo(/*#__PURE__*/React.forwardRe
167
161
  const element = useRenderElement('div', componentProps, {
168
162
  ref: [buttonRef, forwardedRef, listItem.ref, itemRef],
169
163
  state,
170
- props: [rootProps, defaultProps, elementProps, getButtonProps]
164
+ props: [itemProps, defaultProps, elementProps, getButtonProps]
171
165
  });
172
166
  const contextValue = React.useMemo(() => ({
173
167
  selected,
@@ -31,8 +31,7 @@ export const ComboboxItemIndicator = /*#__PURE__*/React.forwardRef(function Comb
31
31
  });
32
32
  });
33
33
 
34
- /** The core implementation of the indicator is split here to avoid paying the hooks
35
- * costs unless the element needs to be mounted. */
34
+ // Split the core implementation to avoid paying the hook costs unless the element needs to mount.
36
35
  if (process.env.NODE_ENV !== "production") ComboboxItemIndicator.displayName = "ComboboxItemIndicator";
37
36
  const Inner = /*#__PURE__*/React.memo(/*#__PURE__*/React.forwardRef((componentProps, forwardedRef) => {
38
37
  const {