@base-ui/react 1.0.0-rc.2 → 1.1.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 (672) hide show
  1. package/CHANGELOG.md +156 -5
  2. package/README.md +2 -3
  3. package/accordion/header/AccordionHeader.d.ts +1 -1
  4. package/accordion/item/AccordionItem.d.ts +1 -1
  5. package/accordion/panel/AccordionPanel.d.ts +1 -1
  6. package/accordion/root/AccordionRoot.d.ts +1 -1
  7. package/accordion/trigger/AccordionTrigger.d.ts +1 -1
  8. package/accordion/trigger/AccordionTrigger.js +3 -4
  9. package/alert-dialog/root/AlertDialogRoot.d.ts +3 -3
  10. package/autocomplete/root/AutocompleteRoot.d.ts +1 -1
  11. package/avatar/fallback/AvatarFallback.d.ts +1 -1
  12. package/avatar/image/AvatarImage.d.ts +1 -1
  13. package/avatar/root/AvatarRoot.d.ts +1 -1
  14. package/button/Button.d.ts +4 -17
  15. package/button/Button.js +1 -2
  16. package/checkbox/indicator/CheckboxIndicator.d.ts +1 -1
  17. package/checkbox/indicator/CheckboxIndicatorDataAttributes.d.ts +4 -0
  18. package/checkbox/indicator/CheckboxIndicatorDataAttributes.js +4 -0
  19. package/checkbox/root/CheckboxRoot.d.ts +1 -1
  20. package/checkbox/root/CheckboxRoot.js +5 -4
  21. package/checkbox/root/CheckboxRootDataAttributes.d.ts +4 -0
  22. package/checkbox/root/CheckboxRootDataAttributes.js +4 -0
  23. package/checkbox-group/CheckboxGroup.d.ts +1 -1
  24. package/collapsible/panel/CollapsiblePanel.d.ts +1 -1
  25. package/collapsible/root/CollapsibleRoot.d.ts +1 -1
  26. package/collapsible/trigger/CollapsibleTrigger.d.ts +1 -1
  27. package/collapsible/trigger/CollapsibleTrigger.js +1 -2
  28. package/combobox/arrow/ComboboxArrow.d.ts +1 -1
  29. package/combobox/backdrop/ComboboxBackdrop.d.ts +1 -1
  30. package/combobox/chip/ComboboxChip.d.ts +1 -1
  31. package/combobox/chip-remove/ComboboxChipRemove.d.ts +1 -1
  32. package/combobox/chip-remove/ComboboxChipRemove.js +3 -2
  33. package/combobox/chips/ComboboxChips.d.ts +1 -1
  34. package/combobox/chips/ComboboxChips.js +7 -1
  35. package/combobox/clear/ComboboxClear.d.ts +1 -1
  36. package/combobox/clear/ComboboxClear.js +2 -2
  37. package/combobox/empty/ComboboxEmpty.d.ts +1 -1
  38. package/combobox/group/ComboboxGroup.d.ts +1 -1
  39. package/combobox/group-label/ComboboxGroupLabel.d.ts +1 -1
  40. package/combobox/icon/ComboboxIcon.d.ts +1 -1
  41. package/combobox/input/ComboboxInput.d.ts +1 -1
  42. package/combobox/input/ComboboxInput.js +12 -18
  43. package/combobox/item/ComboboxItem.d.ts +1 -1
  44. package/combobox/item/ComboboxItem.js +0 -1
  45. package/combobox/item-indicator/ComboboxItemIndicator.d.ts +1 -1
  46. package/combobox/list/ComboboxList.d.ts +1 -1
  47. package/combobox/popup/ComboboxPopup.d.ts +1 -1
  48. package/combobox/popup/ComboboxPopup.js +2 -1
  49. package/combobox/portal/ComboboxPortal.d.ts +1 -1
  50. package/combobox/positioner/ComboboxPositioner.d.ts +1 -1
  51. package/combobox/root/AriaCombobox.d.ts +8 -1
  52. package/combobox/root/AriaCombobox.js +19 -16
  53. package/combobox/root/ComboboxRoot.d.ts +1 -1
  54. package/combobox/row/ComboboxRow.d.ts +1 -1
  55. package/combobox/status/ComboboxStatus.d.ts +1 -1
  56. package/combobox/store.d.ts +3 -0
  57. package/combobox/store.js +21 -0
  58. package/combobox/trigger/ComboboxTrigger.d.ts +14 -1
  59. package/combobox/trigger/ComboboxTrigger.js +31 -11
  60. package/combobox/trigger/ComboboxTriggerDataAttributes.d.ts +13 -0
  61. package/combobox/trigger/ComboboxTriggerDataAttributes.js +13 -0
  62. package/combobox/utils/stateAttributesMapping.d.ts +14 -0
  63. package/combobox/utils/stateAttributesMapping.js +18 -0
  64. package/combobox/value/ComboboxValue.d.ts +5 -0
  65. package/combobox/value/ComboboxValue.js +15 -6
  66. package/composite/root/useCompositeRoot.d.ts +1 -1
  67. package/context-menu/trigger/ContextMenuTrigger.d.ts +1 -1
  68. package/csp-provider/CSPContext.d.ts +13 -0
  69. package/csp-provider/CSPContext.js +25 -0
  70. package/csp-provider/CSPProvider.d.ts +25 -0
  71. package/csp-provider/CSPProvider.js +32 -0
  72. package/csp-provider/index.d.ts +2 -0
  73. package/csp-provider/index.js +12 -0
  74. package/csp-provider/index.parts.d.ts +1 -0
  75. package/csp-provider/index.parts.js +12 -0
  76. package/dialog/backdrop/DialogBackdrop.d.ts +1 -1
  77. package/dialog/close/DialogClose.d.ts +1 -1
  78. package/dialog/description/DialogDescription.d.ts +1 -1
  79. package/dialog/popup/DialogPopup.d.ts +1 -1
  80. package/dialog/portal/DialogPortal.d.ts +1 -1
  81. package/dialog/portal/DialogPortal.js +1 -0
  82. package/dialog/root/DialogRoot.d.ts +4 -4
  83. package/dialog/store/DialogStore.d.ts +2 -2
  84. package/dialog/title/DialogTitle.d.ts +1 -1
  85. package/dialog/viewport/DialogViewport.d.ts +1 -1
  86. package/esm/accordion/header/AccordionHeader.d.ts +1 -1
  87. package/esm/accordion/item/AccordionItem.d.ts +1 -1
  88. package/esm/accordion/panel/AccordionPanel.d.ts +1 -1
  89. package/esm/accordion/root/AccordionRoot.d.ts +1 -1
  90. package/esm/accordion/trigger/AccordionTrigger.d.ts +1 -1
  91. package/esm/accordion/trigger/AccordionTrigger.js +3 -4
  92. package/esm/alert-dialog/root/AlertDialogRoot.d.ts +3 -3
  93. package/esm/autocomplete/root/AutocompleteRoot.d.ts +1 -1
  94. package/esm/avatar/fallback/AvatarFallback.d.ts +1 -1
  95. package/esm/avatar/image/AvatarImage.d.ts +1 -1
  96. package/esm/avatar/root/AvatarRoot.d.ts +1 -1
  97. package/esm/button/Button.d.ts +4 -17
  98. package/esm/button/Button.js +1 -2
  99. package/esm/checkbox/indicator/CheckboxIndicator.d.ts +1 -1
  100. package/esm/checkbox/indicator/CheckboxIndicatorDataAttributes.d.ts +4 -0
  101. package/esm/checkbox/indicator/CheckboxIndicatorDataAttributes.js +4 -0
  102. package/esm/checkbox/root/CheckboxRoot.d.ts +1 -1
  103. package/esm/checkbox/root/CheckboxRoot.js +6 -5
  104. package/esm/checkbox/root/CheckboxRootDataAttributes.d.ts +4 -0
  105. package/esm/checkbox/root/CheckboxRootDataAttributes.js +4 -0
  106. package/esm/checkbox-group/CheckboxGroup.d.ts +1 -1
  107. package/esm/collapsible/panel/CollapsiblePanel.d.ts +1 -1
  108. package/esm/collapsible/root/CollapsibleRoot.d.ts +1 -1
  109. package/esm/collapsible/trigger/CollapsibleTrigger.d.ts +1 -1
  110. package/esm/collapsible/trigger/CollapsibleTrigger.js +1 -2
  111. package/esm/combobox/arrow/ComboboxArrow.d.ts +1 -1
  112. package/esm/combobox/backdrop/ComboboxBackdrop.d.ts +1 -1
  113. package/esm/combobox/chip/ComboboxChip.d.ts +1 -1
  114. package/esm/combobox/chip-remove/ComboboxChipRemove.d.ts +1 -1
  115. package/esm/combobox/chip-remove/ComboboxChipRemove.js +3 -2
  116. package/esm/combobox/chips/ComboboxChips.d.ts +1 -1
  117. package/esm/combobox/chips/ComboboxChips.js +7 -1
  118. package/esm/combobox/clear/ComboboxClear.d.ts +1 -1
  119. package/esm/combobox/clear/ComboboxClear.js +2 -2
  120. package/esm/combobox/empty/ComboboxEmpty.d.ts +1 -1
  121. package/esm/combobox/group/ComboboxGroup.d.ts +1 -1
  122. package/esm/combobox/group-label/ComboboxGroupLabel.d.ts +1 -1
  123. package/esm/combobox/icon/ComboboxIcon.d.ts +1 -1
  124. package/esm/combobox/input/ComboboxInput.d.ts +1 -1
  125. package/esm/combobox/input/ComboboxInput.js +12 -17
  126. package/esm/combobox/item/ComboboxItem.d.ts +1 -1
  127. package/esm/combobox/item/ComboboxItem.js +0 -1
  128. package/esm/combobox/item-indicator/ComboboxItemIndicator.d.ts +1 -1
  129. package/esm/combobox/list/ComboboxList.d.ts +1 -1
  130. package/esm/combobox/popup/ComboboxPopup.d.ts +1 -1
  131. package/esm/combobox/popup/ComboboxPopup.js +2 -1
  132. package/esm/combobox/portal/ComboboxPortal.d.ts +1 -1
  133. package/esm/combobox/positioner/ComboboxPositioner.d.ts +1 -1
  134. package/esm/combobox/root/AriaCombobox.d.ts +8 -1
  135. package/esm/combobox/root/AriaCombobox.js +20 -17
  136. package/esm/combobox/root/ComboboxRoot.d.ts +1 -1
  137. package/esm/combobox/row/ComboboxRow.d.ts +1 -1
  138. package/esm/combobox/status/ComboboxStatus.d.ts +1 -1
  139. package/esm/combobox/store.d.ts +3 -0
  140. package/esm/combobox/store.js +21 -0
  141. package/esm/combobox/trigger/ComboboxTrigger.d.ts +14 -1
  142. package/esm/combobox/trigger/ComboboxTrigger.js +32 -12
  143. package/esm/combobox/trigger/ComboboxTriggerDataAttributes.d.ts +13 -0
  144. package/esm/combobox/trigger/ComboboxTriggerDataAttributes.js +13 -0
  145. package/esm/combobox/utils/stateAttributesMapping.d.ts +14 -0
  146. package/esm/combobox/utils/stateAttributesMapping.js +12 -0
  147. package/esm/combobox/value/ComboboxValue.d.ts +5 -0
  148. package/esm/combobox/value/ComboboxValue.js +16 -7
  149. package/esm/composite/root/useCompositeRoot.d.ts +1 -1
  150. package/esm/context-menu/trigger/ContextMenuTrigger.d.ts +1 -1
  151. package/esm/csp-provider/CSPContext.d.ts +13 -0
  152. package/esm/csp-provider/CSPContext.js +18 -0
  153. package/esm/csp-provider/CSPProvider.d.ts +25 -0
  154. package/esm/csp-provider/CSPProvider.js +27 -0
  155. package/esm/csp-provider/index.d.ts +2 -0
  156. package/esm/csp-provider/index.js +1 -0
  157. package/esm/csp-provider/index.parts.d.ts +1 -0
  158. package/esm/csp-provider/index.parts.js +1 -0
  159. package/esm/dialog/backdrop/DialogBackdrop.d.ts +1 -1
  160. package/esm/dialog/close/DialogClose.d.ts +1 -1
  161. package/esm/dialog/description/DialogDescription.d.ts +1 -1
  162. package/esm/dialog/popup/DialogPopup.d.ts +1 -1
  163. package/esm/dialog/portal/DialogPortal.d.ts +1 -1
  164. package/esm/dialog/portal/DialogPortal.js +1 -0
  165. package/esm/dialog/root/DialogRoot.d.ts +4 -4
  166. package/esm/dialog/store/DialogStore.d.ts +2 -2
  167. package/esm/dialog/title/DialogTitle.d.ts +1 -1
  168. package/esm/dialog/viewport/DialogViewport.d.ts +1 -1
  169. package/esm/field/control/FieldControl.d.ts +1 -1
  170. package/esm/field/description/FieldDescription.d.ts +1 -1
  171. package/esm/field/error/FieldError.d.ts +1 -1
  172. package/esm/field/index.d.ts +2 -1
  173. package/esm/field/item/FieldItem.d.ts +1 -1
  174. package/esm/field/label/FieldLabel.d.ts +11 -2
  175. package/esm/field/label/FieldLabel.js +51 -11
  176. package/esm/field/root/FieldRoot.d.ts +10 -1
  177. package/esm/field/root/FieldRoot.js +8 -0
  178. package/esm/field/useField.js +7 -3
  179. package/esm/fieldset/legend/FieldsetLegend.d.ts +1 -1
  180. package/esm/fieldset/root/FieldsetRoot.d.ts +1 -1
  181. package/esm/floating-ui-react/components/FloatingFocusManager.js +7 -6
  182. package/esm/floating-ui-react/components/FloatingPortal.d.ts +2 -2
  183. package/esm/floating-ui-react/components/FloatingPortal.js +11 -2
  184. package/esm/floating-ui-react/hooks/useClientPoint.js +5 -4
  185. package/esm/floating-ui-react/hooks/useDismiss.js +16 -3
  186. package/esm/floating-ui-react/hooks/useFocus.d.ts +5 -0
  187. package/esm/floating-ui-react/hooks/useFocus.js +43 -9
  188. package/esm/floating-ui-react/hooks/useHoverReferenceInteraction.js +17 -4
  189. package/esm/floating-ui-react/hooks/useSyncedFloatingRootContext.js +3 -0
  190. package/esm/form/Form.d.ts +18 -1
  191. package/esm/form/Form.js +17 -0
  192. package/esm/form/FormContext.d.ts +1 -1
  193. package/esm/index.d.ts +1 -0
  194. package/esm/index.js +2 -1
  195. package/esm/input/Input.d.ts +1 -1
  196. package/esm/menu/arrow/MenuArrow.d.ts +1 -1
  197. package/esm/menu/backdrop/MenuBackdrop.d.ts +1 -1
  198. package/esm/menu/checkbox-item/MenuCheckboxItem.d.ts +1 -1
  199. package/esm/menu/checkbox-item-indicator/MenuCheckboxItemIndicator.d.ts +1 -1
  200. package/esm/menu/group/MenuGroup.d.ts +1 -1
  201. package/esm/menu/group-label/MenuGroupLabel.d.ts +1 -1
  202. package/esm/menu/item/MenuItem.d.ts +1 -1
  203. package/esm/menu/popup/MenuPopup.d.ts +1 -1
  204. package/esm/menu/popup/MenuPopup.js +4 -3
  205. package/esm/menu/portal/MenuPortal.d.ts +1 -1
  206. package/esm/menu/positioner/MenuPositioner.d.ts +1 -1
  207. package/esm/menu/radio-group/MenuRadioGroup.d.ts +1 -1
  208. package/esm/menu/radio-item/MenuRadioItem.d.ts +1 -1
  209. package/esm/menu/radio-item-indicator/MenuRadioItemIndicator.d.ts +1 -1
  210. package/esm/menu/root/MenuRoot.d.ts +7 -6
  211. package/esm/menu/root/MenuRoot.js +4 -2
  212. package/esm/menu/store/MenuStore.js +3 -3
  213. package/esm/menu/submenu-trigger/MenuSubmenuTrigger.d.ts +1 -1
  214. package/esm/menu/trigger/MenuTrigger.js +13 -13
  215. package/esm/menubar/Menubar.d.ts +1 -1
  216. package/esm/merge-props/mergeProps.d.ts +31 -11
  217. package/esm/merge-props/mergeProps.js +29 -8
  218. package/esm/meter/indicator/MeterIndicator.d.ts +1 -1
  219. package/esm/meter/label/MeterLabel.d.ts +1 -1
  220. package/esm/meter/root/MeterRoot.d.ts +1 -1
  221. package/esm/meter/track/MeterTrack.d.ts +1 -1
  222. package/esm/meter/value/MeterValue.d.ts +1 -1
  223. package/esm/navigation-menu/arrow/NavigationMenuArrow.d.ts +1 -1
  224. package/esm/navigation-menu/backdrop/NavigationMenuBackdrop.d.ts +1 -1
  225. package/esm/navigation-menu/content/NavigationMenuContent.d.ts +1 -1
  226. package/esm/navigation-menu/content/NavigationMenuContent.js +6 -0
  227. package/esm/navigation-menu/icon/NavigationMenuIcon.d.ts +1 -1
  228. package/esm/navigation-menu/item/NavigationMenuItem.d.ts +1 -1
  229. package/esm/navigation-menu/link/NavigationMenuLink.d.ts +1 -1
  230. package/esm/navigation-menu/list/NavigationMenuList.d.ts +1 -1
  231. package/esm/navigation-menu/popup/NavigationMenuPopup.d.ts +1 -1
  232. package/esm/navigation-menu/portal/NavigationMenuPortal.d.ts +1 -1
  233. package/esm/navigation-menu/positioner/NavigationMenuPositioner.d.ts +1 -1
  234. package/esm/navigation-menu/root/NavigationMenuRoot.d.ts +2 -2
  235. package/esm/navigation-menu/trigger/NavigationMenuTrigger.d.ts +1 -1
  236. package/esm/navigation-menu/viewport/NavigationMenuViewport.d.ts +1 -1
  237. package/esm/number-field/decrement/NumberFieldDecrement.d.ts +1 -1
  238. package/esm/number-field/decrement/NumberFieldDecrement.js +4 -6
  239. package/esm/number-field/group/NumberFieldGroup.d.ts +1 -1
  240. package/esm/number-field/increment/NumberFieldIncrement.d.ts +1 -1
  241. package/esm/number-field/increment/NumberFieldIncrement.js +4 -6
  242. package/esm/number-field/input/NumberFieldInput.d.ts +1 -1
  243. package/esm/number-field/input/NumberFieldInput.js +5 -2
  244. package/esm/number-field/root/NumberFieldRoot.d.ts +5 -4
  245. package/esm/number-field/root/NumberFieldRoot.js +12 -5
  246. package/esm/number-field/root/useNumberFieldButton.d.ts +0 -3
  247. package/esm/number-field/root/useNumberFieldButton.js +5 -11
  248. package/esm/number-field/scrub-area/NumberFieldScrubArea.d.ts +1 -1
  249. package/esm/number-field/scrub-area-cursor/NumberFieldScrubAreaCursor.d.ts +1 -1
  250. package/esm/popover/arrow/PopoverArrow.d.ts +1 -1
  251. package/esm/popover/backdrop/PopoverBackdrop.d.ts +1 -1
  252. package/esm/popover/close/PopoverClose.d.ts +1 -1
  253. package/esm/popover/description/PopoverDescription.d.ts +1 -1
  254. package/esm/popover/popup/PopoverPopup.d.ts +1 -1
  255. package/esm/popover/popup/PopoverPopup.js +0 -30
  256. package/esm/popover/portal/PopoverPortal.d.ts +1 -1
  257. package/esm/popover/positioner/PopoverPositioner.d.ts +1 -1
  258. package/esm/popover/positioner/PopoverPositioner.js +2 -1
  259. package/esm/popover/root/PopoverRoot.d.ts +2 -2
  260. package/esm/popover/store/PopoverStore.d.ts +4 -2
  261. package/esm/popover/store/PopoverStore.js +8 -5
  262. package/esm/popover/title/PopoverTitle.d.ts +1 -1
  263. package/esm/popover/trigger/PopoverTrigger.js +2 -2
  264. package/esm/popover/viewport/PopoverViewport.d.ts +1 -1
  265. package/esm/popover/viewport/PopoverViewport.js +28 -12
  266. package/esm/preview-card/arrow/PreviewCardArrow.d.ts +1 -1
  267. package/esm/preview-card/arrow/PreviewCardArrow.js +2 -3
  268. package/esm/preview-card/backdrop/PreviewCardBackdrop.d.ts +1 -1
  269. package/esm/preview-card/backdrop/PreviewCardBackdrop.js +4 -5
  270. package/esm/preview-card/index.parts.d.ts +3 -1
  271. package/esm/preview-card/index.parts.js +3 -1
  272. package/esm/preview-card/popup/PreviewCardPopup.d.ts +2 -1
  273. package/esm/preview-card/popup/PreviewCardPopup.js +17 -11
  274. package/esm/preview-card/portal/PreviewCardPortal.d.ts +1 -1
  275. package/esm/preview-card/portal/PreviewCardPortal.js +2 -3
  276. package/esm/preview-card/positioner/PreviewCardPositioner.d.ts +2 -1
  277. package/esm/preview-card/positioner/PreviewCardPositioner.js +16 -11
  278. package/esm/preview-card/root/PreviewCardContext.d.ts +5 -26
  279. package/esm/preview-card/root/PreviewCardContext.js +2 -2
  280. package/esm/preview-card/root/PreviewCardRoot.d.ts +35 -10
  281. package/esm/preview-card/root/PreviewCardRoot.js +61 -116
  282. package/esm/preview-card/store/PreviewCardHandle.d.ts +33 -0
  283. package/esm/preview-card/store/PreviewCardHandle.js +55 -0
  284. package/esm/preview-card/store/PreviewCardStore.d.ts +36 -0
  285. package/esm/preview-card/store/PreviewCardStore.js +97 -0
  286. package/esm/preview-card/trigger/PreviewCardTrigger.d.ts +15 -3
  287. package/esm/preview-card/trigger/PreviewCardTrigger.js +49 -13
  288. package/esm/preview-card/viewport/PreviewCardViewport.d.ts +22 -0
  289. package/esm/preview-card/viewport/PreviewCardViewport.js +272 -0
  290. package/esm/preview-card/viewport/PreviewCardViewportCssVars.d.ts +14 -0
  291. package/esm/preview-card/viewport/PreviewCardViewportCssVars.js +15 -0
  292. package/esm/preview-card/viewport/PreviewCardViewportDataAttributes.d.ts +26 -0
  293. package/esm/preview-card/viewport/PreviewCardViewportDataAttributes.js +27 -0
  294. package/esm/progress/indicator/ProgressIndicator.d.ts +1 -1
  295. package/esm/progress/label/ProgressLabel.d.ts +1 -1
  296. package/esm/progress/root/ProgressRoot.d.ts +1 -1
  297. package/esm/progress/track/ProgressTrack.d.ts +1 -1
  298. package/esm/progress/value/ProgressValue.d.ts +1 -1
  299. package/esm/radio/indicator/RadioIndicator.d.ts +1 -1
  300. package/esm/radio/root/RadioRoot.d.ts +1 -1
  301. package/esm/radio/root/RadioRoot.js +9 -9
  302. package/esm/radio-group/RadioGroup.d.ts +4 -4
  303. package/esm/radio-group/RadioGroup.js +2 -2
  304. package/esm/scroll-area/content/ScrollAreaContent.d.ts +1 -1
  305. package/esm/scroll-area/content/ScrollAreaContent.js +10 -1
  306. package/esm/scroll-area/corner/ScrollAreaCorner.d.ts +1 -1
  307. package/esm/scroll-area/corner/ScrollAreaCorner.js +1 -1
  308. package/esm/scroll-area/root/ScrollAreaRoot.d.ts +26 -2
  309. package/esm/scroll-area/root/ScrollAreaRoot.js +33 -29
  310. package/esm/scroll-area/root/ScrollAreaRootContext.d.ts +10 -43
  311. package/esm/scroll-area/scrollbar/ScrollAreaScrollbar.d.ts +1 -1
  312. package/esm/scroll-area/scrollbar/ScrollAreaScrollbar.js +4 -4
  313. package/esm/scroll-area/thumb/ScrollAreaThumb.d.ts +2 -2
  314. package/esm/scroll-area/thumb/ScrollAreaThumb.js +1 -1
  315. package/esm/scroll-area/viewport/ScrollAreaViewport.d.ts +1 -1
  316. package/esm/scroll-area/viewport/ScrollAreaViewport.js +51 -25
  317. package/esm/select/arrow/SelectArrow.d.ts +1 -1
  318. package/esm/select/backdrop/SelectBackdrop.d.ts +1 -1
  319. package/esm/select/group/SelectGroup.d.ts +1 -1
  320. package/esm/select/group-label/SelectGroupLabel.d.ts +1 -1
  321. package/esm/select/icon/SelectIcon.d.ts +1 -1
  322. package/esm/select/item/SelectItem.d.ts +1 -1
  323. package/esm/select/item/SelectItem.js +0 -1
  324. package/esm/select/item-indicator/SelectItemIndicator.d.ts +1 -1
  325. package/esm/select/item-text/SelectItemText.d.ts +1 -1
  326. package/esm/select/list/SelectList.d.ts +1 -1
  327. package/esm/select/popup/SelectPopup.d.ts +1 -1
  328. package/esm/select/popup/SelectPopup.js +154 -95
  329. package/esm/select/portal/SelectPortal.d.ts +1 -1
  330. package/esm/select/positioner/SelectPositioner.d.ts +1 -1
  331. package/esm/select/root/SelectRoot.d.ts +2 -2
  332. package/esm/select/root/SelectRoot.js +26 -13
  333. package/esm/select/scroll-arrow/SelectScrollArrow.d.ts +1 -1
  334. package/esm/select/scroll-down-arrow/SelectScrollDownArrow.d.ts +1 -1
  335. package/esm/select/scroll-up-arrow/SelectScrollUpArrow.d.ts +1 -1
  336. package/esm/select/store.d.ts +2 -1
  337. package/esm/select/store.js +19 -13
  338. package/esm/select/trigger/SelectTrigger.d.ts +14 -4
  339. package/esm/select/trigger/SelectTrigger.js +50 -18
  340. package/esm/select/value/SelectValue.d.ts +6 -1
  341. package/esm/select/value/SelectValue.js +19 -5
  342. package/esm/separator/Separator.d.ts +1 -1
  343. package/esm/slider/control/SliderControl.d.ts +1 -1
  344. package/esm/slider/control/SliderControl.js +1 -1
  345. package/esm/slider/control/SliderControlDataAttributes.d.ts +0 -8
  346. package/esm/slider/control/SliderControlDataAttributes.js +0 -8
  347. package/esm/slider/indicator/SliderIndicator.d.ts +1 -1
  348. package/esm/slider/indicator/SliderIndicatorDataAttributes.d.ts +0 -8
  349. package/esm/slider/indicator/SliderIndicatorDataAttributes.js +0 -8
  350. package/esm/slider/root/SliderRootDataAttributes.d.ts +0 -8
  351. package/esm/slider/root/SliderRootDataAttributes.js +0 -8
  352. package/esm/slider/thumb/SliderThumb.d.ts +2 -2
  353. package/esm/slider/thumb/SliderThumb.js +7 -1
  354. package/esm/slider/thumb/SliderThumbDataAttributes.d.ts +0 -8
  355. package/esm/slider/thumb/SliderThumbDataAttributes.js +0 -8
  356. package/esm/slider/track/SliderTrack.d.ts +1 -1
  357. package/esm/slider/track/SliderTrackDataAttributes.d.ts +0 -8
  358. package/esm/slider/track/SliderTrackDataAttributes.js +0 -8
  359. package/esm/slider/value/SliderValue.d.ts +1 -1
  360. package/esm/slider/value/SliderValueDataAttributes.d.ts +0 -8
  361. package/esm/slider/value/SliderValueDataAttributes.js +0 -8
  362. package/esm/switch/root/SwitchRoot.d.ts +6 -1
  363. package/esm/switch/root/SwitchRoot.js +15 -6
  364. package/esm/switch/thumb/SwitchThumb.d.ts +1 -1
  365. package/esm/tabs/indicator/TabsIndicator.d.ts +1 -1
  366. package/esm/tabs/indicator/TabsIndicator.js +6 -0
  367. package/esm/tabs/list/TabsList.d.ts +1 -1
  368. package/esm/tabs/panel/TabsPanel.d.ts +1 -1
  369. package/esm/tabs/root/TabsRoot.d.ts +1 -1
  370. package/esm/tabs/tab/TabsTab.d.ts +1 -1
  371. package/esm/toast/action/ToastAction.d.ts +1 -1
  372. package/esm/toast/arrow/ToastArrow.d.ts +1 -1
  373. package/esm/toast/close/ToastClose.d.ts +1 -1
  374. package/esm/toast/content/ToastContent.d.ts +1 -1
  375. package/esm/toast/description/ToastDescription.d.ts +1 -1
  376. package/esm/toast/portal/ToastPortal.d.ts +1 -1
  377. package/esm/toast/positioner/ToastPositioner.d.ts +1 -1
  378. package/esm/toast/provider/ToastProvider.js +46 -19
  379. package/esm/toast/root/ToastRoot.d.ts +1 -1
  380. package/esm/toast/title/ToastTitle.d.ts +1 -1
  381. package/esm/toast/viewport/ToastViewport.d.ts +1 -1
  382. package/esm/toggle/Toggle.d.ts +1 -1
  383. package/esm/toggle-group/ToggleGroup.d.ts +1 -1
  384. package/esm/toolbar/button/ToolbarButton.d.ts +1 -1
  385. package/esm/toolbar/group/ToolbarGroup.d.ts +1 -1
  386. package/esm/toolbar/input/ToolbarInput.d.ts +1 -1
  387. package/esm/toolbar/link/ToolbarLink.d.ts +1 -1
  388. package/esm/toolbar/root/ToolbarRoot.d.ts +1 -1
  389. package/esm/toolbar/separator/ToolbarSeparator.d.ts +1 -1
  390. package/esm/tooltip/arrow/TooltipArrow.d.ts +1 -1
  391. package/esm/tooltip/popup/TooltipPopup.d.ts +1 -1
  392. package/esm/tooltip/popup/TooltipPopup.js +0 -31
  393. package/esm/tooltip/portal/TooltipPortal.d.ts +1 -1
  394. package/esm/tooltip/positioner/TooltipPositioner.d.ts +1 -1
  395. package/esm/tooltip/positioner/TooltipPositioner.js +2 -1
  396. package/esm/tooltip/root/TooltipRoot.d.ts +4 -6
  397. package/esm/tooltip/root/TooltipRoot.js +1 -2
  398. package/esm/tooltip/store/TooltipStore.d.ts +4 -2
  399. package/esm/tooltip/store/TooltipStore.js +7 -4
  400. package/esm/tooltip/trigger/TooltipTrigger.js +1 -1
  401. package/esm/tooltip/viewport/TooltipViewport.d.ts +1 -1
  402. package/esm/tooltip/viewport/TooltipViewport.js +28 -12
  403. package/esm/use-render/index.d.ts +2 -1
  404. package/esm/use-render/index.js +2 -1
  405. package/esm/utils/FloatingPortalLite.d.ts +1 -1
  406. package/esm/utils/popups/popupStoreUtils.js +21 -2
  407. package/esm/utils/resolveValueLabel.d.ts +5 -1
  408. package/esm/utils/resolveValueLabel.js +46 -22
  409. package/esm/utils/styles.d.ts +1 -1
  410. package/esm/utils/styles.js +10 -6
  411. package/esm/utils/types.d.ts +1 -1
  412. package/esm/utils/useAnimationsFinished.d.ts +2 -2
  413. package/esm/utils/useAnimationsFinished.js +56 -33
  414. package/esm/utils/useOpenChangeComplete.js +8 -10
  415. package/esm/utils/useOpenInteractionType.js +6 -1
  416. package/esm/utils/usePopupAutoResize.js +82 -46
  417. package/field/control/FieldControl.d.ts +1 -1
  418. package/field/description/FieldDescription.d.ts +1 -1
  419. package/field/error/FieldError.d.ts +1 -1
  420. package/field/index.d.ts +2 -1
  421. package/field/item/FieldItem.d.ts +1 -1
  422. package/field/label/FieldLabel.d.ts +11 -2
  423. package/field/label/FieldLabel.js +51 -11
  424. package/field/root/FieldRoot.d.ts +10 -1
  425. package/field/root/FieldRoot.js +8 -0
  426. package/field/useField.js +7 -3
  427. package/fieldset/legend/FieldsetLegend.d.ts +1 -1
  428. package/fieldset/root/FieldsetRoot.d.ts +1 -1
  429. package/floating-ui-react/components/FloatingFocusManager.js +7 -6
  430. package/floating-ui-react/components/FloatingPortal.d.ts +2 -2
  431. package/floating-ui-react/components/FloatingPortal.js +11 -2
  432. package/floating-ui-react/hooks/useClientPoint.js +5 -4
  433. package/floating-ui-react/hooks/useDismiss.js +16 -3
  434. package/floating-ui-react/hooks/useFocus.d.ts +5 -0
  435. package/floating-ui-react/hooks/useFocus.js +43 -9
  436. package/floating-ui-react/hooks/useHoverReferenceInteraction.js +17 -4
  437. package/floating-ui-react/hooks/useSyncedFloatingRootContext.js +3 -0
  438. package/form/Form.d.ts +18 -1
  439. package/form/Form.js +17 -0
  440. package/form/FormContext.d.ts +1 -1
  441. package/index.d.ts +1 -0
  442. package/index.js +12 -1
  443. package/input/Input.d.ts +1 -1
  444. package/menu/arrow/MenuArrow.d.ts +1 -1
  445. package/menu/backdrop/MenuBackdrop.d.ts +1 -1
  446. package/menu/checkbox-item/MenuCheckboxItem.d.ts +1 -1
  447. package/menu/checkbox-item-indicator/MenuCheckboxItemIndicator.d.ts +1 -1
  448. package/menu/group/MenuGroup.d.ts +1 -1
  449. package/menu/group-label/MenuGroupLabel.d.ts +1 -1
  450. package/menu/item/MenuItem.d.ts +1 -1
  451. package/menu/popup/MenuPopup.d.ts +1 -1
  452. package/menu/popup/MenuPopup.js +4 -3
  453. package/menu/portal/MenuPortal.d.ts +1 -1
  454. package/menu/positioner/MenuPositioner.d.ts +1 -1
  455. package/menu/radio-group/MenuRadioGroup.d.ts +1 -1
  456. package/menu/radio-item/MenuRadioItem.d.ts +1 -1
  457. package/menu/radio-item-indicator/MenuRadioItemIndicator.d.ts +1 -1
  458. package/menu/root/MenuRoot.d.ts +7 -6
  459. package/menu/root/MenuRoot.js +4 -2
  460. package/menu/store/MenuStore.js +3 -3
  461. package/menu/submenu-trigger/MenuSubmenuTrigger.d.ts +1 -1
  462. package/menu/trigger/MenuTrigger.js +14 -14
  463. package/menubar/Menubar.d.ts +1 -1
  464. package/merge-props/mergeProps.d.ts +31 -11
  465. package/merge-props/mergeProps.js +29 -8
  466. package/meter/indicator/MeterIndicator.d.ts +1 -1
  467. package/meter/label/MeterLabel.d.ts +1 -1
  468. package/meter/root/MeterRoot.d.ts +1 -1
  469. package/meter/track/MeterTrack.d.ts +1 -1
  470. package/meter/value/MeterValue.d.ts +1 -1
  471. package/navigation-menu/arrow/NavigationMenuArrow.d.ts +1 -1
  472. package/navigation-menu/backdrop/NavigationMenuBackdrop.d.ts +1 -1
  473. package/navigation-menu/content/NavigationMenuContent.d.ts +1 -1
  474. package/navigation-menu/content/NavigationMenuContent.js +6 -0
  475. package/navigation-menu/icon/NavigationMenuIcon.d.ts +1 -1
  476. package/navigation-menu/item/NavigationMenuItem.d.ts +1 -1
  477. package/navigation-menu/link/NavigationMenuLink.d.ts +1 -1
  478. package/navigation-menu/list/NavigationMenuList.d.ts +1 -1
  479. package/navigation-menu/popup/NavigationMenuPopup.d.ts +1 -1
  480. package/navigation-menu/portal/NavigationMenuPortal.d.ts +1 -1
  481. package/navigation-menu/positioner/NavigationMenuPositioner.d.ts +1 -1
  482. package/navigation-menu/root/NavigationMenuRoot.d.ts +2 -2
  483. package/navigation-menu/trigger/NavigationMenuTrigger.d.ts +1 -1
  484. package/navigation-menu/viewport/NavigationMenuViewport.d.ts +1 -1
  485. package/number-field/decrement/NumberFieldDecrement.d.ts +1 -1
  486. package/number-field/decrement/NumberFieldDecrement.js +4 -6
  487. package/number-field/group/NumberFieldGroup.d.ts +1 -1
  488. package/number-field/increment/NumberFieldIncrement.d.ts +1 -1
  489. package/number-field/increment/NumberFieldIncrement.js +4 -6
  490. package/number-field/input/NumberFieldInput.d.ts +1 -1
  491. package/number-field/input/NumberFieldInput.js +5 -2
  492. package/number-field/root/NumberFieldRoot.d.ts +5 -4
  493. package/number-field/root/NumberFieldRoot.js +11 -4
  494. package/number-field/root/useNumberFieldButton.d.ts +0 -3
  495. package/number-field/root/useNumberFieldButton.js +5 -11
  496. package/number-field/scrub-area/NumberFieldScrubArea.d.ts +1 -1
  497. package/number-field/scrub-area-cursor/NumberFieldScrubAreaCursor.d.ts +1 -1
  498. package/package.json +13 -3
  499. package/popover/arrow/PopoverArrow.d.ts +1 -1
  500. package/popover/backdrop/PopoverBackdrop.d.ts +1 -1
  501. package/popover/close/PopoverClose.d.ts +1 -1
  502. package/popover/description/PopoverDescription.d.ts +1 -1
  503. package/popover/popup/PopoverPopup.d.ts +1 -1
  504. package/popover/popup/PopoverPopup.js +0 -30
  505. package/popover/portal/PopoverPortal.d.ts +1 -1
  506. package/popover/positioner/PopoverPositioner.d.ts +1 -1
  507. package/popover/positioner/PopoverPositioner.js +2 -1
  508. package/popover/root/PopoverRoot.d.ts +2 -2
  509. package/popover/store/PopoverStore.d.ts +4 -2
  510. package/popover/store/PopoverStore.js +8 -5
  511. package/popover/title/PopoverTitle.d.ts +1 -1
  512. package/popover/trigger/PopoverTrigger.js +2 -2
  513. package/popover/viewport/PopoverViewport.d.ts +1 -1
  514. package/popover/viewport/PopoverViewport.js +28 -12
  515. package/preview-card/arrow/PreviewCardArrow.d.ts +1 -1
  516. package/preview-card/arrow/PreviewCardArrow.js +2 -3
  517. package/preview-card/backdrop/PreviewCardBackdrop.d.ts +1 -1
  518. package/preview-card/backdrop/PreviewCardBackdrop.js +4 -5
  519. package/preview-card/index.parts.d.ts +3 -1
  520. package/preview-card/index.parts.js +21 -1
  521. package/preview-card/popup/PreviewCardPopup.d.ts +2 -1
  522. package/preview-card/popup/PreviewCardPopup.js +17 -11
  523. package/preview-card/portal/PreviewCardPortal.d.ts +1 -1
  524. package/preview-card/portal/PreviewCardPortal.js +2 -3
  525. package/preview-card/positioner/PreviewCardPositioner.d.ts +2 -1
  526. package/preview-card/positioner/PreviewCardPositioner.js +16 -11
  527. package/preview-card/root/PreviewCardContext.d.ts +5 -26
  528. package/preview-card/root/PreviewCardContext.js +2 -2
  529. package/preview-card/root/PreviewCardRoot.d.ts +35 -10
  530. package/preview-card/root/PreviewCardRoot.js +59 -113
  531. package/preview-card/store/PreviewCardHandle.d.ts +33 -0
  532. package/preview-card/store/PreviewCardHandle.js +63 -0
  533. package/preview-card/store/PreviewCardStore.d.ts +36 -0
  534. package/preview-card/store/PreviewCardStore.js +105 -0
  535. package/preview-card/trigger/PreviewCardTrigger.d.ts +15 -3
  536. package/preview-card/trigger/PreviewCardTrigger.js +50 -13
  537. package/preview-card/viewport/PreviewCardViewport.d.ts +22 -0
  538. package/preview-card/viewport/PreviewCardViewport.js +278 -0
  539. package/preview-card/viewport/PreviewCardViewportCssVars.d.ts +14 -0
  540. package/preview-card/viewport/PreviewCardViewportCssVars.js +21 -0
  541. package/preview-card/viewport/PreviewCardViewportDataAttributes.d.ts +26 -0
  542. package/preview-card/viewport/PreviewCardViewportDataAttributes.js +33 -0
  543. package/progress/indicator/ProgressIndicator.d.ts +1 -1
  544. package/progress/label/ProgressLabel.d.ts +1 -1
  545. package/progress/root/ProgressRoot.d.ts +1 -1
  546. package/progress/track/ProgressTrack.d.ts +1 -1
  547. package/progress/value/ProgressValue.d.ts +1 -1
  548. package/radio/indicator/RadioIndicator.d.ts +1 -1
  549. package/radio/root/RadioRoot.d.ts +1 -1
  550. package/radio/root/RadioRoot.js +8 -8
  551. package/radio-group/RadioGroup.d.ts +4 -4
  552. package/radio-group/RadioGroup.js +1 -1
  553. package/scroll-area/content/ScrollAreaContent.d.ts +1 -1
  554. package/scroll-area/content/ScrollAreaContent.js +10 -1
  555. package/scroll-area/corner/ScrollAreaCorner.d.ts +1 -1
  556. package/scroll-area/corner/ScrollAreaCorner.js +1 -1
  557. package/scroll-area/root/ScrollAreaRoot.d.ts +26 -2
  558. package/scroll-area/root/ScrollAreaRoot.js +33 -29
  559. package/scroll-area/root/ScrollAreaRootContext.d.ts +10 -43
  560. package/scroll-area/scrollbar/ScrollAreaScrollbar.d.ts +1 -1
  561. package/scroll-area/scrollbar/ScrollAreaScrollbar.js +4 -4
  562. package/scroll-area/thumb/ScrollAreaThumb.d.ts +2 -2
  563. package/scroll-area/thumb/ScrollAreaThumb.js +1 -1
  564. package/scroll-area/viewport/ScrollAreaViewport.d.ts +1 -1
  565. package/scroll-area/viewport/ScrollAreaViewport.js +51 -25
  566. package/select/arrow/SelectArrow.d.ts +1 -1
  567. package/select/backdrop/SelectBackdrop.d.ts +1 -1
  568. package/select/group/SelectGroup.d.ts +1 -1
  569. package/select/group-label/SelectGroupLabel.d.ts +1 -1
  570. package/select/icon/SelectIcon.d.ts +1 -1
  571. package/select/item/SelectItem.d.ts +1 -1
  572. package/select/item/SelectItem.js +0 -1
  573. package/select/item-indicator/SelectItemIndicator.d.ts +1 -1
  574. package/select/item-text/SelectItemText.d.ts +1 -1
  575. package/select/list/SelectList.d.ts +1 -1
  576. package/select/popup/SelectPopup.d.ts +1 -1
  577. package/select/popup/SelectPopup.js +154 -95
  578. package/select/portal/SelectPortal.d.ts +1 -1
  579. package/select/positioner/SelectPositioner.d.ts +1 -1
  580. package/select/root/SelectRoot.d.ts +2 -2
  581. package/select/root/SelectRoot.js +24 -11
  582. package/select/scroll-arrow/SelectScrollArrow.d.ts +1 -1
  583. package/select/scroll-down-arrow/SelectScrollDownArrow.d.ts +1 -1
  584. package/select/scroll-up-arrow/SelectScrollUpArrow.d.ts +1 -1
  585. package/select/store.d.ts +2 -1
  586. package/select/store.js +18 -12
  587. package/select/trigger/SelectTrigger.d.ts +14 -4
  588. package/select/trigger/SelectTrigger.js +50 -18
  589. package/select/value/SelectValue.d.ts +6 -1
  590. package/select/value/SelectValue.js +18 -4
  591. package/separator/Separator.d.ts +1 -1
  592. package/slider/control/SliderControl.d.ts +1 -1
  593. package/slider/control/SliderControl.js +1 -1
  594. package/slider/control/SliderControlDataAttributes.d.ts +0 -8
  595. package/slider/control/SliderControlDataAttributes.js +0 -8
  596. package/slider/indicator/SliderIndicator.d.ts +1 -1
  597. package/slider/indicator/SliderIndicatorDataAttributes.d.ts +0 -8
  598. package/slider/indicator/SliderIndicatorDataAttributes.js +0 -8
  599. package/slider/root/SliderRootDataAttributes.d.ts +0 -8
  600. package/slider/root/SliderRootDataAttributes.js +0 -8
  601. package/slider/thumb/SliderThumb.d.ts +2 -2
  602. package/slider/thumb/SliderThumb.js +7 -1
  603. package/slider/thumb/SliderThumbDataAttributes.d.ts +0 -8
  604. package/slider/thumb/SliderThumbDataAttributes.js +0 -8
  605. package/slider/track/SliderTrack.d.ts +1 -1
  606. package/slider/track/SliderTrackDataAttributes.d.ts +0 -8
  607. package/slider/track/SliderTrackDataAttributes.js +0 -8
  608. package/slider/value/SliderValue.d.ts +1 -1
  609. package/slider/value/SliderValueDataAttributes.d.ts +0 -8
  610. package/slider/value/SliderValueDataAttributes.js +0 -8
  611. package/switch/root/SwitchRoot.d.ts +6 -1
  612. package/switch/root/SwitchRoot.js +14 -5
  613. package/switch/thumb/SwitchThumb.d.ts +1 -1
  614. package/tabs/indicator/TabsIndicator.d.ts +1 -1
  615. package/tabs/indicator/TabsIndicator.js +6 -0
  616. package/tabs/list/TabsList.d.ts +1 -1
  617. package/tabs/panel/TabsPanel.d.ts +1 -1
  618. package/tabs/root/TabsRoot.d.ts +1 -1
  619. package/tabs/tab/TabsTab.d.ts +1 -1
  620. package/toast/action/ToastAction.d.ts +1 -1
  621. package/toast/arrow/ToastArrow.d.ts +1 -1
  622. package/toast/close/ToastClose.d.ts +1 -1
  623. package/toast/content/ToastContent.d.ts +1 -1
  624. package/toast/description/ToastDescription.d.ts +1 -1
  625. package/toast/portal/ToastPortal.d.ts +1 -1
  626. package/toast/positioner/ToastPositioner.d.ts +1 -1
  627. package/toast/provider/ToastProvider.js +46 -19
  628. package/toast/root/ToastRoot.d.ts +1 -1
  629. package/toast/title/ToastTitle.d.ts +1 -1
  630. package/toast/viewport/ToastViewport.d.ts +1 -1
  631. package/toggle/Toggle.d.ts +1 -1
  632. package/toggle-group/ToggleGroup.d.ts +1 -1
  633. package/toolbar/button/ToolbarButton.d.ts +1 -1
  634. package/toolbar/group/ToolbarGroup.d.ts +1 -1
  635. package/toolbar/input/ToolbarInput.d.ts +1 -1
  636. package/toolbar/link/ToolbarLink.d.ts +1 -1
  637. package/toolbar/root/ToolbarRoot.d.ts +1 -1
  638. package/toolbar/separator/ToolbarSeparator.d.ts +1 -1
  639. package/tooltip/arrow/TooltipArrow.d.ts +1 -1
  640. package/tooltip/popup/TooltipPopup.d.ts +1 -1
  641. package/tooltip/popup/TooltipPopup.js +0 -31
  642. package/tooltip/portal/TooltipPortal.d.ts +1 -1
  643. package/tooltip/positioner/TooltipPositioner.d.ts +1 -1
  644. package/tooltip/positioner/TooltipPositioner.js +2 -1
  645. package/tooltip/root/TooltipRoot.d.ts +4 -6
  646. package/tooltip/root/TooltipRoot.js +1 -2
  647. package/tooltip/store/TooltipStore.d.ts +4 -2
  648. package/tooltip/store/TooltipStore.js +7 -4
  649. package/tooltip/trigger/TooltipTrigger.js +1 -1
  650. package/tooltip/viewport/TooltipViewport.d.ts +1 -1
  651. package/tooltip/viewport/TooltipViewport.js +28 -12
  652. package/use-render/index.d.ts +2 -1
  653. package/utils/FloatingPortalLite.d.ts +1 -1
  654. package/utils/popups/popupStoreUtils.js +21 -2
  655. package/utils/resolveValueLabel.d.ts +5 -1
  656. package/utils/resolveValueLabel.js +48 -22
  657. package/utils/styles.d.ts +1 -1
  658. package/utils/styles.js +10 -6
  659. package/utils/types.d.ts +1 -1
  660. package/utils/useAnimationsFinished.d.ts +2 -2
  661. package/utils/useAnimationsFinished.js +56 -33
  662. package/utils/useOpenChangeComplete.js +8 -10
  663. package/utils/useOpenInteractionType.js +6 -1
  664. package/utils/usePopupAutoResize.js +82 -46
  665. package/esm/utils/interactions/useFocusWithDelay.d.ts +0 -9
  666. package/esm/utils/interactions/useFocusWithDelay.js +0 -81
  667. package/utils/interactions/useFocusWithDelay.d.ts +0 -9
  668. package/utils/interactions/useFocusWithDelay.js +0 -87
  669. /package/esm/utils/{useMixedToggleClickHander.d.ts → useMixedToggleClickHandler.d.ts} +0 -0
  670. /package/esm/utils/{useMixedToggleClickHander.js → useMixedToggleClickHandler.js} +0 -0
  671. /package/utils/{useMixedToggleClickHander.d.ts → useMixedToggleClickHandler.d.ts} +0 -0
  672. /package/utils/{useMixedToggleClickHander.js → useMixedToggleClickHandler.js} +0 -0
@@ -27,9 +27,12 @@ function useFocus(context, props = {}) {
27
27
  } = store.context;
28
28
  const {
29
29
  enabled = true,
30
- visibleOnly = true
30
+ visibleOnly = true,
31
+ delay
31
32
  } = props;
32
33
  const blockFocusRef = React.useRef(false);
34
+ // Track which reference should be blocked from re-opening after Escape/press dismissal.
35
+ const blockedReferenceRef = React.useRef(null);
33
36
  const timeout = (0, _useTimeout.useTimeout)();
34
37
  const keyboardModalityRef = React.useRef(true);
35
38
  React.useEffect(() => {
@@ -43,7 +46,8 @@ function useFocus(context, props = {}) {
43
46
  // floating element was not open, the focus should be blocked when they
44
47
  // return to the tab/window.
45
48
  function onBlur() {
46
- if (!store.select('open') && (0, _dom.isHTMLElement)(domReference) && domReference === (0, _utils.activeElement)((0, _utils.getDocument)(domReference))) {
49
+ const currentDomReference = store.select('domReferenceElement');
50
+ if (!store.select('open') && (0, _dom.isHTMLElement)(currentDomReference) && currentDomReference === (0, _utils.activeElement)((0, _utils.getDocument)(currentDomReference))) {
47
51
  blockFocusRef.current = true;
48
52
  }
49
53
  }
@@ -72,21 +76,31 @@ function useFocus(context, props = {}) {
72
76
  }
73
77
  function onOpenChangeLocal(details) {
74
78
  if (details.reason === _reasons.REASONS.triggerPress || details.reason === _reasons.REASONS.escapeKey) {
75
- blockFocusRef.current = true;
79
+ const referenceElement = store.select('domReferenceElement');
80
+ if ((0, _dom.isElement)(referenceElement)) {
81
+ blockedReferenceRef.current = referenceElement;
82
+ blockFocusRef.current = true;
83
+ }
76
84
  }
77
85
  }
78
86
  events.on('openchange', onOpenChangeLocal);
79
87
  return () => {
80
88
  events.off('openchange', onOpenChangeLocal);
81
89
  };
82
- }, [events, enabled]);
90
+ }, [events, enabled, store]);
83
91
  const reference = React.useMemo(() => ({
84
92
  onMouseLeave() {
85
93
  blockFocusRef.current = false;
94
+ blockedReferenceRef.current = null;
86
95
  },
87
96
  onFocus(event) {
97
+ const focusTarget = event.currentTarget;
88
98
  if (blockFocusRef.current) {
89
- return;
99
+ if (blockedReferenceRef.current === focusTarget) {
100
+ return;
101
+ }
102
+ blockFocusRef.current = false;
103
+ blockedReferenceRef.current = null;
90
104
  }
91
105
  const target = (0, _utils.getTarget)(event.nativeEvent);
92
106
  if (visibleOnly && (0, _dom.isElement)(target)) {
@@ -100,10 +114,26 @@ function useFocus(context, props = {}) {
100
114
  return;
101
115
  }
102
116
  }
103
- store.setOpen(true, (0, _createBaseUIEventDetails.createChangeEventDetails)(_reasons.REASONS.triggerFocus, event.nativeEvent, event.currentTarget));
117
+ const movedFromOtherTrigger = event.relatedTarget && store.context.triggerElements.hasElement(event.relatedTarget);
118
+ const {
119
+ nativeEvent,
120
+ currentTarget
121
+ } = event;
122
+ const delayValue = typeof delay === 'function' ? delay() : delay;
123
+ if (store.select('open') && movedFromOtherTrigger || delayValue === 0 || delayValue === undefined) {
124
+ store.setOpen(true, (0, _createBaseUIEventDetails.createChangeEventDetails)(_reasons.REASONS.triggerFocus, nativeEvent, currentTarget));
125
+ return;
126
+ }
127
+ timeout.start(delayValue, () => {
128
+ if (blockFocusRef.current) {
129
+ return;
130
+ }
131
+ store.setOpen(true, (0, _createBaseUIEventDetails.createChangeEventDetails)(_reasons.REASONS.triggerFocus, nativeEvent, currentTarget));
132
+ });
104
133
  },
105
134
  onBlur(event) {
106
135
  blockFocusRef.current = false;
136
+ blockedReferenceRef.current = null;
107
137
  const relatedTarget = event.relatedTarget;
108
138
  const nativeEvent = event.nativeEvent;
109
139
 
@@ -135,13 +165,17 @@ function useFocus(context, props = {}) {
135
165
  // If the next focused element is one of the triggers, do not close
136
166
  // the floating element. The focus handler of that trigger will
137
167
  // handle the open state.
138
- if (store.context.triggerElements.hasElement(event.relatedTarget)) {
139
- return;
168
+ const nextFocusedElement = relatedTarget ?? activeEl;
169
+ if ((0, _dom.isElement)(nextFocusedElement)) {
170
+ const triggerElements = store.context.triggerElements;
171
+ if (triggerElements.hasElement(nextFocusedElement) || triggerElements.hasMatchingElement(trigger => (0, _utils.contains)(trigger, nextFocusedElement))) {
172
+ return;
173
+ }
140
174
  }
141
175
  store.setOpen(false, (0, _createBaseUIEventDetails.createChangeEventDetails)(_reasons.REASONS.triggerFocus, nativeEvent));
142
176
  });
143
177
  }
144
- }), [dataRef, store, visibleOnly, timeout]);
178
+ }), [dataRef, store, visibleOnly, timeout, delay]);
145
179
  return React.useMemo(() => enabled ? {
146
180
  reference,
147
181
  trigger: reference
@@ -165,8 +165,13 @@ function useHoverReferenceInteraction(context, props = {}) {
165
165
  const allTriggers = store.context.triggerElements;
166
166
  const isOverInactiveTrigger = (allTriggers.hasElement(event.target) || allTriggers.hasMatchingElement(t => (0, _utils.contains)(t, event.target))) && (!currentDomReference || !(0, _utils.contains)(currentDomReference, event.target));
167
167
  const triggerNode = event.currentTarget ?? null;
168
- const shouldOpen = !store.select('open') || isOverInactiveTrigger;
169
- if (openDelay) {
168
+ const isOpen = store.select('open');
169
+ const shouldOpen = !isOpen || isOverInactiveTrigger;
170
+
171
+ // When moving between triggers while already open, open immediately without delay
172
+ if (isOverInactiveTrigger && isOpen) {
173
+ store.setOpen(true, (0, _createBaseUIEventDetails.createChangeEventDetails)(_reasons.REASONS.triggerHover, event, triggerNode));
174
+ } else if (openDelay) {
170
175
  openChangeTimeout.start(openDelay, () => {
171
176
  if (shouldOpen) {
172
177
  store.setOpen(true, (0, _createBaseUIEventDetails.createChangeEventDetails)(_reasons.REASONS.triggerHover, event, triggerNode));
@@ -270,7 +275,15 @@ function useHoverReferenceInteraction(context, props = {}) {
270
275
  }
271
276
  restTimeout.clear();
272
277
  function handleMouseMove() {
273
- if (!blockMouseMoveRef.current && (!currentOpen || isOverInactiveTrigger)) {
278
+ restTimeoutPendingRef.current = false;
279
+
280
+ // A delayed hover open should not override a click-like open that happened
281
+ // while the hover delay was pending.
282
+ if (isClickLikeOpenEvent()) {
283
+ return;
284
+ }
285
+ const latestOpen = store.select('open');
286
+ if (!blockMouseMoveRef.current && (!latestOpen || isOverInactiveTrigger)) {
274
287
  store.setOpen(true, (0, _createBaseUIEventDetails.createChangeEventDetails)(_reasons.REASONS.triggerHover, nativeEvent, trigger));
275
288
  }
276
289
  }
@@ -286,5 +299,5 @@ function useHoverReferenceInteraction(context, props = {}) {
286
299
  }
287
300
  }
288
301
  };
289
- }, [blockMouseMoveRef, mouseOnly, store, pointerTypeRef, restMsRef, restTimeout, restTimeoutPendingRef]);
302
+ }, [blockMouseMoveRef, isClickLikeOpenEvent, mouseOnly, store, pointerTypeRef, restMsRef, restTimeout, restTimeoutPendingRef]);
290
303
  }
@@ -47,6 +47,9 @@ function useSyncedFloatingRootContext(options) {
47
47
  if ((0, _dom.isElement)(referenceElement)) {
48
48
  valuesToSync.domReferenceElement = referenceElement;
49
49
  }
50
+ if (store.state.positionReference === store.state.referenceElement) {
51
+ valuesToSync.positionReference = referenceElement;
52
+ }
50
53
  store.update(valuesToSync);
51
54
  }, [open, floatingId, referenceElement, floatingElement, store]);
52
55
 
package/form/Form.d.ts CHANGED
@@ -16,6 +16,10 @@ export declare const Form: {
16
16
  };
17
17
  export type FormSubmitEventReason = typeof REASONS.none;
18
18
  export type FormSubmitEventDetails = BaseUIGenericEventDetails<Form.SubmitEventReason>;
19
+ export type FormValidationMode = 'onSubmit' | 'onBlur' | 'onChange';
20
+ export interface FormActions {
21
+ validate: (fieldName?: string | undefined) => void;
22
+ }
19
23
  export interface FormState {}
20
24
  export interface FormProps<FormValues extends Record<string, any> = Record<string, any>> extends BaseUIComponentProps<'form', Form.State> {
21
25
  /**
@@ -40,11 +44,24 @@ export interface FormProps<FormValues extends Record<string, any> = Record<strin
40
44
  * `preventDefault()` is called on the native submit event when used.
41
45
  */
42
46
  onFormSubmit?: (formValues: FormValues, eventDetails: Form.SubmitEventDetails) => void;
47
+ /**
48
+ * A ref to imperative actions.
49
+ * - `validate`: Validates all fields when called. Optionally pass a field name to validate a single field.
50
+ * @example
51
+ * ```tsx
52
+ * // validate all fields
53
+ * actionsRef.current.validate();
54
+ *
55
+ * // validate one field
56
+ * actionsRef.current.validate('email');
57
+ * ```
58
+ */
59
+ actionsRef?: React.RefObject<Form.Actions | null>;
43
60
  }
44
- export type FormValidationMode = 'onSubmit' | 'onBlur' | 'onChange';
45
61
  export declare namespace Form {
46
62
  type Props<FormValues extends Record<string, any> = Record<string, any>> = FormProps<FormValues>;
47
63
  type State = FormState;
64
+ type Actions = FormActions;
48
65
  type ValidationMode = FormValidationMode;
49
66
  type SubmitEventReason = FormSubmitEventReason;
50
67
  type SubmitEventDetails = FormSubmitEventDetails;
package/form/Form.js CHANGED
@@ -29,6 +29,7 @@ const Form = exports.Form = /*#__PURE__*/React.forwardRef(function Form(componen
29
29
  errors: externalErrors,
30
30
  onSubmit,
31
31
  onFormSubmit,
32
+ actionsRef,
32
33
  ...elementProps
33
34
  } = componentProps;
34
35
  const formRef = React.useRef({
@@ -59,6 +60,22 @@ const Form = exports.Form = /*#__PURE__*/React.forwardRef(function Form(componen
59
60
  focusControl(invalidFields[0].controlRef.current);
60
61
  }
61
62
  }, [errors, focusControl]);
63
+ const handleImperativeValidate = React.useCallback(fieldName => {
64
+ const values = Array.from(formRef.current.fields.values());
65
+ if (fieldName) {
66
+ const namedField = values.find(field => field.name === fieldName);
67
+ if (namedField) {
68
+ namedField.validate(false);
69
+ }
70
+ } else {
71
+ values.forEach(field => {
72
+ field.validate(false);
73
+ });
74
+ }
75
+ }, []);
76
+ React.useImperativeHandle(actionsRef, () => ({
77
+ validate: handleImperativeValidate
78
+ }), [handleImperativeValidate]);
62
79
  const element = (0, _useRenderElement.useRenderElement)('form', componentProps, {
63
80
  ref: forwardedRef,
64
81
  props: [{
@@ -8,7 +8,7 @@ export interface FormContext {
8
8
  formRef: React.RefObject<{
9
9
  fields: Map<string, {
10
10
  name: string | undefined;
11
- validate: () => void;
11
+ validate: (flushSync?: boolean | undefined) => void;
12
12
  validityData: FieldValidityData;
13
13
  controlRef: React.RefObject<HTMLElement | null>;
14
14
  getValue: () => unknown;
package/index.d.ts CHANGED
@@ -8,6 +8,7 @@ export * from "./checkbox-group/index.js";
8
8
  export * from "./collapsible/index.js";
9
9
  export * from "./combobox/index.js";
10
10
  export * from "./context-menu/index.js";
11
+ export * from "./csp-provider/index.js";
11
12
  export * from "./dialog/index.js";
12
13
  export * from "./direction-provider/index.js";
13
14
  export * from "./field/index.js";
package/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @base-ui/react v1.0.0-rc.2
2
+ * @base-ui/react v1.1.0
3
3
  *
4
4
  * @license MIT
5
5
  * This source code is licensed under the MIT license found in the
@@ -120,6 +120,17 @@ Object.keys(_contextMenu).forEach(function (key) {
120
120
  }
121
121
  });
122
122
  });
123
+ var _cspProvider = require("./csp-provider");
124
+ Object.keys(_cspProvider).forEach(function (key) {
125
+ if (key === "default" || key === "__esModule") return;
126
+ if (key in exports && exports[key] === _cspProvider[key]) return;
127
+ Object.defineProperty(exports, key, {
128
+ enumerable: true,
129
+ get: function () {
130
+ return _cspProvider[key];
131
+ }
132
+ });
133
+ });
123
134
  var _dialog = require("./dialog");
124
135
  Object.keys(_dialog).forEach(function (key) {
125
136
  if (key === "default" || key === "__esModule") return;
package/input/Input.d.ts CHANGED
@@ -7,7 +7,7 @@ import { Field } from "../field/index.js";
7
7
  *
8
8
  * Documentation: [Base UI Input](https://base-ui.com/react/components/input)
9
9
  */
10
- export declare const Input: React.ForwardRefExoticComponent<InputProps & React.RefAttributes<HTMLInputElement>>;
10
+ export declare const Input: React.ForwardRefExoticComponent<Omit<InputProps, "ref"> & React.RefAttributes<HTMLInputElement>>;
11
11
  export interface InputProps extends BaseUIComponentProps<'input', Input.State> {
12
12
  /**
13
13
  * Callback fired when the `value` changes. Use when controlled.
@@ -7,7 +7,7 @@ import type { BaseUIComponentProps } from "../../utils/types.js";
7
7
  *
8
8
  * Documentation: [Base UI Menu](https://base-ui.com/react/components/menu)
9
9
  */
10
- export declare const MenuArrow: React.ForwardRefExoticComponent<MenuArrowProps & React.RefAttributes<HTMLDivElement>>;
10
+ export declare const MenuArrow: React.ForwardRefExoticComponent<Omit<MenuArrowProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
11
11
  export interface MenuArrowState {
12
12
  /**
13
13
  * Whether the menu is currently open.
@@ -7,7 +7,7 @@ import type { TransitionStatus } from "../../utils/useTransitionStatus.js";
7
7
  *
8
8
  * Documentation: [Base UI Menu](https://base-ui.com/react/components/menu)
9
9
  */
10
- export declare const MenuBackdrop: React.ForwardRefExoticComponent<MenuBackdropProps & React.RefAttributes<HTMLDivElement>>;
10
+ export declare const MenuBackdrop: React.ForwardRefExoticComponent<Omit<MenuBackdropProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
11
11
  export interface MenuBackdropState {
12
12
  /**
13
13
  * Whether the menu is currently open.
@@ -7,7 +7,7 @@ import type { MenuRoot } from "../root/MenuRoot.js";
7
7
  *
8
8
  * Documentation: [Base UI Menu](https://base-ui.com/react/components/menu)
9
9
  */
10
- export declare const MenuCheckboxItem: React.ForwardRefExoticComponent<MenuCheckboxItemProps & React.RefAttributes<Element>>;
10
+ export declare const MenuCheckboxItem: React.ForwardRefExoticComponent<Omit<MenuCheckboxItemProps, "ref"> & React.RefAttributes<HTMLElement>>;
11
11
  export type MenuCheckboxItemState = {
12
12
  /**
13
13
  * Whether the checkbox item should ignore user interaction.
@@ -7,7 +7,7 @@ import { TransitionStatus } from "../../utils/useTransitionStatus.js";
7
7
  *
8
8
  * Documentation: [Base UI Menu](https://base-ui.com/react/components/menu)
9
9
  */
10
- export declare const MenuCheckboxItemIndicator: React.ForwardRefExoticComponent<MenuCheckboxItemIndicatorProps & React.RefAttributes<HTMLSpanElement>>;
10
+ export declare const MenuCheckboxItemIndicator: React.ForwardRefExoticComponent<Omit<MenuCheckboxItemIndicatorProps, "ref"> & React.RefAttributes<HTMLSpanElement>>;
11
11
  export interface MenuCheckboxItemIndicatorProps extends BaseUIComponentProps<'span', MenuCheckboxItemIndicator.State> {
12
12
  /**
13
13
  * Whether to keep the HTML element in the DOM when the checkbox item is not checked.
@@ -6,7 +6,7 @@ import { BaseUIComponentProps } from "../../utils/types.js";
6
6
  *
7
7
  * Documentation: [Base UI Menu](https://base-ui.com/react/components/menu)
8
8
  */
9
- export declare const MenuGroup: React.ForwardRefExoticComponent<MenuGroupProps & React.RefAttributes<Element>>;
9
+ export declare const MenuGroup: React.ForwardRefExoticComponent<Omit<MenuGroupProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
10
10
  export interface MenuGroupProps extends BaseUIComponentProps<'div', MenuGroup.State> {
11
11
  /**
12
12
  * The content of the component.
@@ -6,7 +6,7 @@ import type { BaseUIComponentProps } from "../../utils/types.js";
6
6
  *
7
7
  * Documentation: [Base UI Menu](https://base-ui.com/react/components/menu)
8
8
  */
9
- export declare const MenuGroupLabel: React.ForwardRefExoticComponent<MenuGroupLabelProps & React.RefAttributes<HTMLDivElement>>;
9
+ export declare const MenuGroupLabel: React.ForwardRefExoticComponent<Omit<MenuGroupLabelProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
10
10
  export interface MenuGroupLabelProps extends BaseUIComponentProps<'div', MenuGroupLabel.State> {}
11
11
  export interface MenuGroupLabelState {}
12
12
  export declare namespace MenuGroupLabel {
@@ -6,7 +6,7 @@ import type { BaseUIComponentProps, NonNativeButtonProps } from "../../utils/typ
6
6
  *
7
7
  * Documentation: [Base UI Menu](https://base-ui.com/react/components/menu)
8
8
  */
9
- export declare const MenuItem: React.ForwardRefExoticComponent<MenuItemProps & React.RefAttributes<Element>>;
9
+ export declare const MenuItem: React.ForwardRefExoticComponent<Omit<MenuItemProps, "ref"> & React.RefAttributes<HTMLElement>>;
10
10
  export interface MenuItemState {
11
11
  /**
12
12
  * Whether the item should ignore user interaction.
@@ -9,7 +9,7 @@ import type { TransitionStatus } from "../../utils/useTransitionStatus.js";
9
9
  *
10
10
  * Documentation: [Base UI Menu](https://base-ui.com/react/components/menu)
11
11
  */
12
- export declare const MenuPopup: React.ForwardRefExoticComponent<MenuPopupProps & React.RefAttributes<Element>>;
12
+ export declare const MenuPopup: React.ForwardRefExoticComponent<Omit<MenuPopupProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
13
13
  export interface MenuPopupProps extends BaseUIComponentProps<'div', MenuPopup.State> {
14
14
  children?: React.ReactNode;
15
15
  /**
@@ -59,6 +59,7 @@ const MenuPopup = exports.MenuPopup = /*#__PURE__*/React.forwardRef(function Men
59
59
  const floatingTreeRoot = store.useState('floatingTreeRoot');
60
60
  const closeDelay = store.useState('closeDelay');
61
61
  const activeTriggerElement = store.useState('activeTriggerElement');
62
+ const isContextMenu = parent.type === 'context-menu';
62
63
  (0, _useOpenChangeComplete.useOpenChangeComplete)({
63
64
  open,
64
65
  ref: store.context.popupRef,
@@ -80,7 +81,7 @@ const MenuPopup = exports.MenuPopup = /*#__PURE__*/React.forwardRef(function Men
80
81
  const hoverEnabled = store.useState('hoverEnabled');
81
82
  const disabled = store.useState('disabled');
82
83
  (0, _floatingUiReact.useHoverFloatingInteraction)(floatingContext, {
83
- enabled: hoverEnabled && !disabled && parent.type !== 'context-menu' && parent.type !== 'menubar',
84
+ enabled: hoverEnabled && !disabled && !isContextMenu && parent.type !== 'menubar',
84
85
  closeDelay
85
86
  });
86
87
  const state = React.useMemo(() => ({
@@ -105,13 +106,13 @@ const MenuPopup = exports.MenuPopup = /*#__PURE__*/React.forwardRef(function Men
105
106
  'data-rootownerid': rootId
106
107
  }]
107
108
  });
108
- let returnFocus = parent.type === undefined || parent.type === 'context-menu';
109
+ let returnFocus = parent.type === undefined || isContextMenu;
109
110
  if (triggerElement || parent.type === 'menubar' && lastOpenChangeReason !== _reasons.REASONS.outsidePress) {
110
111
  returnFocus = true;
111
112
  }
112
113
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_floatingUiReact.FloatingFocusManager, {
113
114
  context: floatingContext,
114
- modal: false,
115
+ modal: isContextMenu,
115
116
  disabled: !mounted,
116
117
  returnFocus: finalFocus === undefined ? returnFocus : finalFocus,
117
118
  initialFocus: parent.type !== 'menu',
@@ -7,7 +7,7 @@ import { FloatingPortal } from "../../floating-ui-react/index.js";
7
7
  *
8
8
  * Documentation: [Base UI Menu](https://base-ui.com/react/components/menu)
9
9
  */
10
- export declare const MenuPortal: React.ForwardRefExoticComponent<MenuPortalProps & React.RefAttributes<HTMLDivElement>>;
10
+ export declare const MenuPortal: React.ForwardRefExoticComponent<Omit<MenuPortalProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
11
11
  export declare namespace MenuPortal {
12
12
  interface State {}
13
13
  }
@@ -7,7 +7,7 @@ import { BaseUIComponentProps } from "../../utils/types.js";
7
7
  *
8
8
  * Documentation: [Base UI Menu](https://base-ui.com/react/components/menu)
9
9
  */
10
- export declare const MenuPositioner: React.ForwardRefExoticComponent<MenuPositionerProps & React.RefAttributes<HTMLDivElement>>;
10
+ export declare const MenuPositioner: React.ForwardRefExoticComponent<Omit<MenuPositionerProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
11
11
  export interface MenuPositionerState {
12
12
  /**
13
13
  * Whether the menu is currently open.
@@ -7,7 +7,7 @@ import type { MenuRoot } from "../root/MenuRoot.js";
7
7
  *
8
8
  * Documentation: [Base UI Menu](https://base-ui.com/react/components/menu)
9
9
  */
10
- export declare const MenuRadioGroup: React.NamedExoticComponent<MenuRadioGroupProps & React.RefAttributes<Element>>;
10
+ export declare const MenuRadioGroup: React.NamedExoticComponent<Omit<MenuRadioGroupProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
11
11
  export interface MenuRadioGroupProps extends BaseUIComponentProps<'div', MenuRadioGroup.State> {
12
12
  /**
13
13
  * The content of the component.
@@ -6,7 +6,7 @@ import type { BaseUIComponentProps, NonNativeButtonProps } from "../../utils/typ
6
6
  *
7
7
  * Documentation: [Base UI Menu](https://base-ui.com/react/components/menu)
8
8
  */
9
- export declare const MenuRadioItem: React.ForwardRefExoticComponent<MenuRadioItemProps & React.RefAttributes<Element>>;
9
+ export declare const MenuRadioItem: React.ForwardRefExoticComponent<Omit<MenuRadioItemProps, "ref"> & React.RefAttributes<HTMLElement>>;
10
10
  export type MenuRadioItemState = {
11
11
  /**
12
12
  * Whether the radio item should ignore user interaction.
@@ -7,7 +7,7 @@ import { TransitionStatus } from "../../utils/useTransitionStatus.js";
7
7
  *
8
8
  * Documentation: [Base UI Menu](https://base-ui.com/react/components/menu)
9
9
  */
10
- export declare const MenuRadioItemIndicator: React.ForwardRefExoticComponent<MenuRadioItemIndicatorProps & React.RefAttributes<HTMLSpanElement>>;
10
+ export declare const MenuRadioItemIndicator: React.ForwardRefExoticComponent<Omit<MenuRadioItemIndicatorProps, "ref"> & React.RefAttributes<HTMLSpanElement>>;
11
11
  export interface MenuRadioItemIndicatorProps extends BaseUIComponentProps<'span', MenuRadioItemIndicator.State> {
12
12
  /**
13
13
  * Whether to keep the HTML element in the DOM when the radio item is inactive.
@@ -36,7 +36,7 @@ export interface MenuRootProps<Payload = unknown> {
36
36
  highlightItemOnHover?: boolean;
37
37
  /**
38
38
  * Determines if the menu enters a modal state when open.
39
- * - `true`: user interaction is limited to the menu: document page scroll is locked and and pointer interactions on outside elements are disabled.
39
+ * - `true`: user interaction is limited to the menu: document page scroll is locked and pointer interactions on outside elements are disabled.
40
40
  * - `false`: user interaction with the rest of the document is allowed.
41
41
  * @default true
42
42
  */
@@ -77,21 +77,21 @@ export interface MenuRootProps<Payload = unknown> {
77
77
  * Useful when the menu's animation is controlled by an external library.
78
78
  * - `close`: When specified, the menu can be closed imperatively.
79
79
  */
80
- actionsRef?: React.RefObject<MenuRoot.Actions>;
80
+ actionsRef?: React.RefObject<MenuRoot.Actions | null>;
81
81
  /**
82
82
  * ID of the trigger that the popover is associated with.
83
- * This is useful in conjuntion with the `open` prop to create a controlled popover.
83
+ * This is useful in conjunction with the `open` prop to create a controlled popover.
84
84
  * There's no need to specify this prop when the popover is uncontrolled (i.e. when the `open` prop is not set).
85
85
  */
86
86
  triggerId?: string | null;
87
87
  /**
88
88
  * ID of the trigger that the popover is associated with.
89
- * This is useful in conjuntion with the `defaultOpen` prop to create an initially open popover.
89
+ * This is useful in conjunction with the `defaultOpen` prop to create an initially open popover.
90
90
  */
91
91
  defaultTriggerId?: string | null;
92
92
  /**
93
- * A handle to associate the popover with a trigger.
94
- * If specified, allows external triggers to control the popover's open state.
93
+ * A handle to associate the menu with a trigger.
94
+ * If specified, allows external triggers to control the menu's open state.
95
95
  */
96
96
  handle?: MenuHandle<Payload>;
97
97
  /**
@@ -102,6 +102,7 @@ export interface MenuRootProps<Payload = unknown> {
102
102
  }
103
103
  export interface MenuRootActions {
104
104
  unmount: () => void;
105
+ close: () => void;
105
106
  }
106
107
  export type MenuRootChangeEventReason = typeof REASONS.triggerHover | typeof REASONS.triggerFocus | typeof REASONS.triggerPress | typeof REASONS.outsidePress | typeof REASONS.focusOut | typeof REASONS.listNavigation | typeof REASONS.escapeKey | typeof REASONS.itemPress | typeof REASONS.closePress | typeof REASONS.siblingOpen | typeof REASONS.cancelOpen | typeof REASONS.imperativeAction | typeof REASONS.none;
107
108
  export type MenuRootChangeEventDetails = BaseUIChangeEventDetails<MenuRoot.ChangeEventReason> & {
@@ -183,7 +183,7 @@ function MenuRoot(props) {
183
183
  const allowTouchToCloseTimeout = (0, _useTimeout.useTimeout)();
184
184
  const setOpen = (0, _useStableCallback.useStableCallback)((nextOpen, eventDetails) => {
185
185
  const reason = eventDetails.reason;
186
- if (open === nextOpen && eventDetails.trigger === activeTriggerElement) {
186
+ if (open === nextOpen && eventDetails.trigger === activeTriggerElement && lastOpenChangeReason === reason) {
187
187
  return;
188
188
  }
189
189
  eventDetails.preventUnmountOnClose = () => {
@@ -306,7 +306,9 @@ function MenuRoot(props) {
306
306
  }, [floatingEvents, setOpen]);
307
307
  const dismiss = (0, _floatingUiReact.useDismiss)(floatingRootContext, {
308
308
  enabled: !disabled,
309
- bubbles: closeParentOnEsc && parent.type === 'menu',
309
+ bubbles: {
310
+ escapeKey: closeParentOnEsc && parent.type === 'menu'
311
+ },
310
312
  outsidePress() {
311
313
  if (parent.type !== 'context-menu' || openEventRef.current?.type === 'contextmenu') {
312
314
  return true;
@@ -108,10 +108,10 @@ class MenuStore extends _store.ReactStore {
108
108
  }
109
109
  static useStore(externalStore, initialState) {
110
110
  // eslint-disable-next-line react-hooks/rules-of-hooks
111
- const store = (0, _useRefWithInit.useRefWithInit)(() => {
112
- return externalStore ?? new MenuStore(initialState);
111
+ const internalStore = (0, _useRefWithInit.useRefWithInit)(() => {
112
+ return new MenuStore(initialState);
113
113
  }).current;
114
- return store;
114
+ return externalStore ?? internalStore;
115
115
  }
116
116
  unsubscribeParentListener = null;
117
117
  }
@@ -6,7 +6,7 @@ import { BaseUIComponentProps, NonNativeButtonProps } from "../../utils/types.js
6
6
  *
7
7
  * Documentation: [Base UI Menu](https://base-ui.com/react/components/menu)
8
8
  */
9
- export declare const MenuSubmenuTrigger: React.ForwardRefExoticComponent<MenuSubmenuTriggerProps & React.RefAttributes<HTMLElement>>;
9
+ export declare const MenuSubmenuTrigger: React.ForwardRefExoticComponent<Omit<MenuSubmenuTriggerProps, "ref"> & React.RefAttributes<HTMLElement>>;
10
10
  export interface MenuSubmenuTriggerProps extends NonNativeButtonProps, BaseUIComponentProps<'div', MenuSubmenuTrigger.State> {
11
11
  onClick?: React.MouseEventHandler<HTMLElement>;
12
12
  /**
@@ -29,7 +29,7 @@ var _findRootOwnerId = require("../utils/findRootOwnerId");
29
29
  var _popups = require("../../utils/popups");
30
30
  var _useBaseUiId = require("../../utils/useBaseUiId");
31
31
  var _reasons = require("../../utils/reasons");
32
- var _useMixedToggleClickHander = require("../../utils/useMixedToggleClickHander");
32
+ var _useMixedToggleClickHandler = require("../../utils/useMixedToggleClickHandler");
33
33
  var _ContextMenuRootContext = require("../../context-menu/root/ContextMenuRootContext");
34
34
  var _MenubarContext = require("../../menubar/MenubarContext");
35
35
  var _constants = require("../../utils/constants");
@@ -88,8 +88,9 @@ const MenuTrigger = exports.MenuTrigger = /*#__PURE__*/React.forwardRef(function
88
88
  floatingParentNodeId,
89
89
  keyboardEventRelay: compositeRootContext?.relayKeyboardEvent
90
90
  });
91
+ const isInMenubar = parent.type === 'menubar';
91
92
  const rootDisabled = store.useState('disabled');
92
- const disabled = disabledProp || rootDisabled || parent.type === 'menubar' && parent.context.disabled;
93
+ const disabled = disabledProp || rootDisabled || isInMenubar && parent.context.disabled;
93
94
  const {
94
95
  getButtonProps,
95
96
  buttonRef
@@ -134,12 +135,12 @@ const MenuTrigger = exports.MenuTrigger = /*#__PURE__*/React.forwardRef(function
134
135
  });
135
136
  }
136
137
  }, [isOpenedByThisTrigger, handleDocumentMouseUp, store]);
137
- const parentMenubarHasSubmenuOpen = parent.type === 'menubar' && parent.context.hasSubmenuOpen;
138
- const openOnHover = openOnHoverProp ?? parentMenubarHasSubmenuOpen ?? false;
138
+ const parentMenubarHasSubmenuOpen = isInMenubar && parent.context.hasSubmenuOpen;
139
+ const openOnHover = openOnHoverProp ?? parentMenubarHasSubmenuOpen;
139
140
  const hoverProps = (0, _floatingUiReact.useHoverReferenceInteraction)(floatingRootContext, {
140
- enabled: openOnHover && !disabled && parent.type !== 'context-menu' && (parent.type !== 'menubar' || parentMenubarHasSubmenuOpen && !isMountedByThisTrigger),
141
+ enabled: openOnHover && !disabled && parent.type !== 'context-menu' && (!isInMenubar || parentMenubarHasSubmenuOpen && !isMountedByThisTrigger),
141
142
  handleClose: (0, _floatingUiReact.safePolygon)({
142
- blockPointerEvents: parent.type !== 'menubar'
143
+ blockPointerEvents: !isInMenubar
143
144
  }),
144
145
  mouseOnly: true,
145
146
  move: false,
@@ -153,26 +154,25 @@ const MenuTrigger = exports.MenuTrigger = /*#__PURE__*/React.forwardRef(function
153
154
  });
154
155
 
155
156
  // Whether to ignore clicks to open the menu.
156
- // `lastOpenChangeReason` doesnt't need to be reactive here, as we need to run this
157
+ // `lastOpenChangeReason` doesn't need to be reactive here, as we need to run this
157
158
  // only when `isOpenedByThisTrigger` changes.
158
159
  const stickIfOpen = useStickIfOpen(isOpenedByThisTrigger, store.select('lastOpenChangeReason'));
159
160
  const click = (0, _floatingUiReact.useClick)(floatingRootContext, {
160
161
  enabled: !disabled && parent.type !== 'context-menu',
161
- event: isOpenedByThisTrigger && parent.type === 'menubar' ? 'click' : 'mousedown',
162
+ event: isOpenedByThisTrigger && isInMenubar ? 'click' : 'mousedown',
162
163
  toggle: true,
163
164
  ignoreMouse: false,
164
165
  stickIfOpen: parent.type === undefined ? stickIfOpen : false
165
166
  });
166
167
  const focus = (0, _floatingUiReact.useFocus)(floatingRootContext, {
167
- enabled: !disabled && (parent.type !== 'menubar' && isOpenedByThisTrigger || parentMenubarHasSubmenuOpen)
168
+ enabled: !disabled && parentMenubarHasSubmenuOpen
168
169
  });
169
- const mixedToggleHandlers = (0, _useMixedToggleClickHander.useMixedToggleClickHandler)({
170
+ const mixedToggleHandlers = (0, _useMixedToggleClickHandler.useMixedToggleClickHandler)({
170
171
  open: isOpenedByThisTrigger,
171
- enabled: parent.type === 'menubar',
172
+ enabled: isInMenubar,
172
173
  mouseDownAction: 'open'
173
174
  });
174
175
  const localInteractionProps = (0, _floatingUiReact.useInteractions)([click, focus]);
175
- const isInMenubar = parent.type === 'menubar';
176
176
  const state = React.useMemo(() => ({
177
177
  disabled,
178
178
  open: isOpenedByThisTrigger
@@ -215,8 +215,8 @@ const MenuTrigger = exports.MenuTrigger = /*#__PURE__*/React.forwardRef(function
215
215
  ReactDOM.flushSync(() => {
216
216
  store.setOpen(false, (0, _createBaseUIEventDetails.createChangeEventDetails)(_reasons.REASONS.focusOut, event.nativeEvent, event.currentTarget));
217
217
  });
218
- let nextTabbable = (0, _utils.getTabbableAfterElement)(triggerElementRef.current);
219
- while (nextTabbable !== null && (0, _utils.contains)(currentPositionerElement, nextTabbable) || nextTabbable?.hasAttribute('aria-hidden')) {
218
+ let nextTabbable = (0, _utils.getTabbableAfterElement)(store.context.triggerFocusTargetRef.current || triggerElementRef.current);
219
+ while (nextTabbable !== null && (0, _utils.contains)(currentPositionerElement, nextTabbable)) {
220
220
  const prevTabbable = nextTabbable;
221
221
  nextTabbable = (0, _utils.getNextTabbable)(nextTabbable);
222
222
  if (nextTabbable === prevTabbable) {
@@ -6,7 +6,7 @@ import { BaseUIComponentProps } from "../utils/types.js";
6
6
  *
7
7
  * Documentation: [Base UI Menubar](https://base-ui.com/react/components/menubar)
8
8
  */
9
- export declare const Menubar: React.ForwardRefExoticComponent<MenubarProps & React.RefAttributes<HTMLDivElement>>;
9
+ export declare const Menubar: React.ForwardRefExoticComponent<Omit<MenubarProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
10
10
  export interface MenubarState {
11
11
  /**
12
12
  * The orientation of the menubar.