@base-ui/react 1.0.0 → 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 +144 -1
  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
@@ -2,6 +2,7 @@ import * as React from 'react';
2
2
  import { useAnimationFrame } from '@base-ui/utils/useAnimationFrame';
3
3
  import { useIsoLayoutEffect } from '@base-ui/utils/useIsoLayoutEffect';
4
4
  import { useStableCallback } from '@base-ui/utils/useStableCallback';
5
+ import { NOOP } from '@base-ui/utils/empty';
5
6
  import { useAnimationsFinished } from "./useAnimationsFinished.js";
6
7
  import { getCssDimensions } from "./getCssDimensions.js";
7
8
  import { EMPTY_OBJECT } from "./constants.js";
@@ -23,10 +24,12 @@ export function usePopupAutoResize(parameters) {
23
24
  side,
24
25
  direction
25
26
  } = parameters;
26
- const isInitialRender = React.useRef(true);
27
27
  const runOnceAnimationsFinish = useAnimationsFinished(popupElement, true, false);
28
28
  const animationFrame = useAnimationFrame();
29
- const previousDimensionsRef = React.useRef(null);
29
+ const committedDimensionsRef = React.useRef(null);
30
+ const liveDimensionsRef = React.useRef(null);
31
+ const isInitialRenderRef = React.useRef(true);
32
+ const restoreAnchoringStylesRef = React.useRef(NOOP);
30
33
  const onMeasureLayout = useStableCallback(onMeasureLayoutParam);
31
34
  const onMeasureLayoutComplete = useStableCallback(onMeasureLayoutCompleteParam);
32
35
  const anchoringStyles = React.useMemo(() => {
@@ -49,80 +52,90 @@ export function usePopupAutoResize(parameters) {
49
52
  useIsoLayoutEffect(() => {
50
53
  // Reset the state when the popup is closed.
51
54
  if (!mounted || !enabled() || !supportsResizeObserver) {
52
- isInitialRender.current = true;
53
- previousDimensionsRef.current = null;
55
+ restoreAnchoringStylesRef.current = NOOP;
56
+ isInitialRenderRef.current = true;
57
+ committedDimensionsRef.current = null;
58
+ liveDimensionsRef.current = null;
54
59
  return undefined;
55
60
  }
56
61
  if (!popupElement || !positionerElement) {
57
62
  return undefined;
58
63
  }
59
- Object.entries(anchoringStyles).forEach(([key, value]) => {
60
- popupElement.style.setProperty(key, value);
61
- });
64
+ restoreAnchoringStylesRef.current = applyElementStyles(popupElement, anchoringStyles);
62
65
  const observer = new ResizeObserver(entries => {
63
66
  const entry = entries[0];
64
67
  if (entry) {
65
- if (previousDimensionsRef.current === null) {
66
- previousDimensionsRef.current = {
67
- width: Math.ceil(entry.borderBoxSize[0].inlineSize),
68
- height: Math.ceil(entry.borderBoxSize[0].blockSize)
69
- };
70
- } else {
71
- previousDimensionsRef.current.width = Math.ceil(entry.borderBoxSize[0].inlineSize);
72
- previousDimensionsRef.current.height = Math.ceil(entry.borderBoxSize[0].blockSize);
73
- }
68
+ liveDimensionsRef.current = {
69
+ width: Math.ceil(entry.borderBoxSize[0].inlineSize),
70
+ height: Math.ceil(entry.borderBoxSize[0].blockSize)
71
+ };
74
72
  }
75
73
  });
76
74
  observer.observe(popupElement);
77
75
 
78
76
  // Measure the rendered size to enable transitions:
79
- popupElement.style.setProperty('--popup-width', 'auto');
80
- popupElement.style.setProperty('--popup-height', 'auto');
77
+ setPopupCssSize(popupElement, 'auto');
81
78
  const restorePopupPosition = overrideElementStyle(popupElement, 'position', 'static');
82
79
  const restorePopupTransform = overrideElementStyle(popupElement, 'transform', 'none');
83
80
  const restorePopupScale = overrideElementStyle(popupElement, 'scale', '1');
84
- const restoreAvailableWidth = overrideElementStyle(positionerElement, '--available-width', 'max-content');
85
- const restoreAvailableHeight = overrideElementStyle(positionerElement, '--available-height', 'max-content');
81
+ const restorePositionerAvailableSize = applyElementStyles(positionerElement, {
82
+ '--available-width': 'max-content',
83
+ '--available-height': 'max-content'
84
+ });
85
+ function restoreMeasurementOverrides() {
86
+ restorePopupPosition();
87
+ restorePopupTransform();
88
+ restorePositionerAvailableSize();
89
+ }
90
+ function restoreMeasurementOverridesIncludingScale() {
91
+ restoreMeasurementOverrides();
92
+ restorePopupScale();
93
+ }
86
94
  onMeasureLayout?.();
87
95
 
88
96
  // Initial render (for each time the popup opens).
89
- if (isInitialRender.current || previousDimensionsRef.current === null) {
90
- positionerElement.style.setProperty('--positioner-width', 'max-content');
91
- positionerElement.style.setProperty('--positioner-height', 'max-content');
97
+ if (isInitialRenderRef.current || committedDimensionsRef.current === null) {
98
+ setPositionerCssSize(positionerElement, 'max-content');
92
99
  const dimensions = getCssDimensions(popupElement);
93
- positionerElement.style.setProperty('--positioner-width', `${dimensions.width}px`);
94
- positionerElement.style.setProperty('--positioner-height', `${dimensions.height}px`);
95
- restorePopupPosition();
96
- restorePopupTransform();
97
- restorePopupScale();
98
- restoreAvailableWidth();
99
- restoreAvailableHeight();
100
+ committedDimensionsRef.current = dimensions;
101
+ setPositionerCssSize(positionerElement, dimensions);
102
+ restoreMeasurementOverridesIncludingScale();
100
103
  onMeasureLayoutComplete?.(null, dimensions);
101
- isInitialRender.current = false;
104
+ isInitialRenderRef.current = false;
102
105
  return () => {
103
106
  observer.disconnect();
107
+ restoreAnchoringStylesRef.current();
108
+ restoreAnchoringStylesRef.current = NOOP;
104
109
  };
105
110
  }
106
111
 
107
112
  // Subsequent renders while open (when `content` changes).
108
- popupElement.style.setProperty('--popup-width', 'auto');
109
- popupElement.style.setProperty('--popup-height', 'auto');
110
- positionerElement.style.setProperty('--positioner-width', 'max-content');
111
- positionerElement.style.setProperty('--positioner-height', 'max-content');
113
+ setPopupCssSize(popupElement, 'auto');
114
+ setPositionerCssSize(positionerElement, 'max-content');
115
+ const previousDimensions = committedDimensionsRef.current ?? liveDimensionsRef.current;
112
116
  const newDimensions = getCssDimensions(popupElement);
113
- popupElement.style.setProperty('--popup-width', `${previousDimensionsRef.current.width}px`);
114
- popupElement.style.setProperty('--popup-height', `${previousDimensionsRef.current.height}px`);
115
- restorePopupPosition();
116
- restorePopupTransform();
117
- restoreAvailableWidth();
118
- restoreAvailableHeight();
119
- onMeasureLayoutComplete?.(previousDimensionsRef.current, newDimensions);
120
- positionerElement.style.setProperty('--positioner-width', `${newDimensions.width}px`);
121
- positionerElement.style.setProperty('--positioner-height', `${newDimensions.height}px`);
117
+
118
+ // Commit immediately so future content changes have a stable previous size, even if
119
+ // ResizeObserver runs after this point.
120
+ committedDimensionsRef.current = newDimensions;
121
+ if (!previousDimensions) {
122
+ setPositionerCssSize(positionerElement, newDimensions);
123
+ restoreMeasurementOverridesIncludingScale();
124
+ onMeasureLayoutComplete?.(null, newDimensions);
125
+ return () => {
126
+ observer.disconnect();
127
+ animationFrame.cancel();
128
+ restoreAnchoringStylesRef.current();
129
+ restoreAnchoringStylesRef.current = NOOP;
130
+ };
131
+ }
132
+ setPopupCssSize(popupElement, previousDimensions);
133
+ restoreMeasurementOverrides();
134
+ onMeasureLayoutComplete?.(previousDimensions, newDimensions);
135
+ setPositionerCssSize(positionerElement, newDimensions);
122
136
  const abortController = new AbortController();
123
137
  animationFrame.request(() => {
124
- popupElement.style.setProperty('--popup-width', `${newDimensions.width}px`);
125
- popupElement.style.setProperty('--popup-height', `${newDimensions.height}px`);
138
+ setPopupCssSize(popupElement, newDimensions);
126
139
  runOnceAnimationsFinish(() => {
127
140
  popupElement.style.setProperty('--popup-width', 'auto');
128
141
  popupElement.style.setProperty('--popup-height', 'auto');
@@ -132,6 +145,8 @@ export function usePopupAutoResize(parameters) {
132
145
  observer.disconnect();
133
146
  abortController.abort();
134
147
  animationFrame.cancel();
148
+ restoreAnchoringStylesRef.current();
149
+ restoreAnchoringStylesRef.current = NOOP;
135
150
  };
136
151
  }, [content, popupElement, positionerElement, runOnceAnimationsFinish, animationFrame, enabled, mounted, onMeasureLayout, onMeasureLayoutComplete, anchoringStyles]);
137
152
  }
@@ -141,4 +156,25 @@ function overrideElementStyle(element, property, value) {
141
156
  return () => {
142
157
  element.style.setProperty(property, originalValue);
143
158
  };
159
+ }
160
+ function applyElementStyles(element, styles) {
161
+ const restorers = [];
162
+ for (const [key, value] of Object.entries(styles)) {
163
+ restorers.push(overrideElementStyle(element, key, value));
164
+ }
165
+ return restorers.length ? () => {
166
+ restorers.forEach(restore => restore());
167
+ } : NOOP;
168
+ }
169
+ function setPopupCssSize(popupElement, size) {
170
+ const width = size === 'auto' ? 'auto' : `${size.width}px`;
171
+ const height = size === 'auto' ? 'auto' : `${size.height}px`;
172
+ popupElement.style.setProperty('--popup-width', width);
173
+ popupElement.style.setProperty('--popup-height', height);
174
+ }
175
+ function setPositionerCssSize(positionerElement, size) {
176
+ const width = size === 'max-content' ? 'max-content' : `${size.width}px`;
177
+ const height = size === 'max-content' ? 'max-content' : `${size.height}px`;
178
+ positionerElement.style.setProperty('--positioner-width', width);
179
+ positionerElement.style.setProperty('--positioner-height', height);
144
180
  }
@@ -13,7 +13,7 @@ import type { BaseUIChangeEventDetails } from "../../utils/createBaseUIEventDeta
13
13
  *
14
14
  * Documentation: [Base UI Field](https://base-ui.com/react/components/field)
15
15
  */
16
- export declare const FieldControl: React.ForwardRefExoticComponent<FieldControlProps & React.RefAttributes<HTMLInputElement>>;
16
+ export declare const FieldControl: React.ForwardRefExoticComponent<Omit<FieldControlProps, "ref"> & React.RefAttributes<HTMLInputElement>>;
17
17
  export type FieldControlState = FieldRoot.State;
18
18
  export interface FieldControlProps extends BaseUIComponentProps<'input', FieldControl.State> {
19
19
  /**
@@ -7,7 +7,7 @@ import type { BaseUIComponentProps } from "../../utils/types.js";
7
7
  *
8
8
  * Documentation: [Base UI Field](https://base-ui.com/react/components/field)
9
9
  */
10
- export declare const FieldDescription: React.ForwardRefExoticComponent<FieldDescriptionProps & React.RefAttributes<HTMLParagraphElement>>;
10
+ export declare const FieldDescription: React.ForwardRefExoticComponent<Omit<FieldDescriptionProps, "ref"> & React.RefAttributes<HTMLParagraphElement>>;
11
11
  export type FieldDescriptionState = FieldRoot.State;
12
12
  export interface FieldDescriptionProps extends BaseUIComponentProps<'p', FieldDescription.State> {}
13
13
  export declare namespace FieldDescription {
@@ -7,7 +7,7 @@ import type { BaseUIComponentProps } from "../../utils/types.js";
7
7
  *
8
8
  * Documentation: [Base UI Field](https://base-ui.com/react/components/field)
9
9
  */
10
- export declare const FieldError: React.ForwardRefExoticComponent<FieldErrorProps & React.RefAttributes<HTMLDivElement>>;
10
+ export declare const FieldError: React.ForwardRefExoticComponent<Omit<FieldErrorProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
11
11
  export type FieldErrorState = FieldRoot.State;
12
12
  export interface FieldErrorProps extends BaseUIComponentProps<'div', FieldError.State> {
13
13
  /**
package/field/index.d.ts CHANGED
@@ -4,4 +4,5 @@ export type * from "./label/FieldLabel.js";
4
4
  export type * from "./description/FieldDescription.js";
5
5
  export type * from "./error/FieldError.js";
6
6
  export type * from "./control/FieldControl.js";
7
- export type * from "./validity/FieldValidity.js";
7
+ export type * from "./validity/FieldValidity.js";
8
+ export type * from "./item/FieldItem.js";
@@ -7,7 +7,7 @@ import type { BaseUIComponentProps } from "../../utils/types.js";
7
7
  *
8
8
  * Documentation: [Base UI Field](https://base-ui.com/react/components/field)
9
9
  */
10
- export declare const FieldItem: React.ForwardRefExoticComponent<FieldItemProps & React.RefAttributes<HTMLDivElement>>;
10
+ export declare const FieldItem: React.ForwardRefExoticComponent<Omit<FieldItemProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
11
11
  export interface FieldItemProps extends BaseUIComponentProps<'div', FieldItem.State> {
12
12
  /**
13
13
  * Whether the wrapped control should ignore user interaction.
@@ -7,9 +7,18 @@ import type { BaseUIComponentProps } from "../../utils/types.js";
7
7
  *
8
8
  * Documentation: [Base UI Field](https://base-ui.com/react/components/field)
9
9
  */
10
- export declare const FieldLabel: React.ForwardRefExoticComponent<FieldLabelProps & React.RefAttributes<any>>;
10
+ export declare const FieldLabel: React.ForwardRefExoticComponent<Omit<FieldLabelProps, "ref"> & React.RefAttributes<HTMLElement>>;
11
11
  export type FieldLabelState = FieldRoot.State;
12
- export interface FieldLabelProps extends BaseUIComponentProps<'label', FieldLabel.State> {}
12
+ export interface FieldLabelProps extends BaseUIComponentProps<'label', FieldLabel.State> {
13
+ /**
14
+ * Whether the component renders a native `<label>` element when replacing it via the `render` prop.
15
+ * Set to `false` if the rendered element is not a label (e.g. `<div>`).
16
+ *
17
+ * This is useful to avoid inheriting label behaviors on `<button>` controls (such as `<Select.Trigger>` and `<Combobox.Trigger>`), including avoiding `:hover` on the button when hovering the label, and preventing clicks on the label from firing on the button.
18
+ * @default true
19
+ */
20
+ nativeLabel?: boolean;
21
+ }
13
22
  export declare namespace FieldLabel {
14
23
  type State = FieldLabelState;
15
24
  type Props = FieldLabelProps;
@@ -7,7 +7,11 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports.FieldLabel = void 0;
9
9
  var React = _interopRequireWildcard(require("react"));
10
+ var _error = require("@base-ui/utils/error");
11
+ var _dom = require("@floating-ui/utils/dom");
10
12
  var _useIsoLayoutEffect = require("@base-ui/utils/useIsoLayoutEffect");
13
+ var _owner = require("@base-ui/utils/owner");
14
+ var _useStableCallback = require("@base-ui/utils/useStableCallback");
11
15
  var _utils = require("../../floating-ui-react/utils");
12
16
  var _FieldRootContext = require("../root/FieldRootContext");
13
17
  var _LabelableContext = require("../../labelable-provider/LabelableContext");
@@ -25,6 +29,7 @@ const FieldLabel = exports.FieldLabel = /*#__PURE__*/React.forwardRef(function F
25
29
  render,
26
30
  className,
27
31
  id: idProp,
32
+ nativeLabel = true,
28
33
  ...elementProps
29
34
  } = componentProps;
30
35
  const fieldRootContext = (0, _FieldRootContext.useFieldRootContext)(false);
@@ -35,6 +40,45 @@ const FieldLabel = exports.FieldLabel = /*#__PURE__*/React.forwardRef(function F
35
40
  } = (0, _LabelableContext.useLabelableContext)();
36
41
  const id = (0, _useBaseUiId.useBaseUiId)(idProp);
37
42
  const labelRef = React.useRef(null);
43
+ const handleInteraction = (0, _useStableCallback.useStableCallback)(event => {
44
+ const target = (0, _utils.getTarget)(event.nativeEvent);
45
+ if (target?.closest('button,input,select,textarea')) {
46
+ return;
47
+ }
48
+
49
+ // Prevent text selection when double clicking label.
50
+ if (!event.defaultPrevented && event.detail > 1) {
51
+ event.preventDefault();
52
+ }
53
+ if (nativeLabel || !controlId) {
54
+ return;
55
+ }
56
+ const controlElement = (0, _owner.ownerDocument)(event.currentTarget).getElementById(controlId);
57
+ if ((0, _dom.isHTMLElement)(controlElement)) {
58
+ controlElement.focus({
59
+ // Available from Chrome 144+ (January 2026).
60
+ // Safari and Firefox already support it.
61
+ // @ts-expect-error not available in types yet
62
+ focusVisible: true
63
+ });
64
+ }
65
+ });
66
+ if (process.env.NODE_ENV !== 'production') {
67
+ // eslint-disable-next-line react-hooks/rules-of-hooks
68
+ React.useEffect(() => {
69
+ if (!labelRef.current) {
70
+ return;
71
+ }
72
+ const isLabelTag = labelRef.current.tagName === 'LABEL';
73
+ if (nativeLabel) {
74
+ if (!isLabelTag) {
75
+ (0, _error.error)('<Field.Label> was not rendered as a <label> element, which does not match the `nativeLabel` prop on the component. Ensure that the element passed to the `render` prop of <Field.Label> is a real <label>, or set the `nativeLabel` prop on the component to `false`.');
76
+ }
77
+ } else if (isLabelTag) {
78
+ (0, _error.error)('<Field.Label> was rendered as a <label> element, which does not match the `nativeLabel` prop on the component. Ensure that the element passed to the `render` prop of <Field.Label> is not a real <label>, or set the `nativeLabel` prop on the component to `true`.');
79
+ }
80
+ }, [nativeLabel]);
81
+ }
38
82
  (0, _useIsoLayoutEffect.useIsoLayoutEffect)(() => {
39
83
  if (id) {
40
84
  setLabelId(id);
@@ -47,18 +91,14 @@ const FieldLabel = exports.FieldLabel = /*#__PURE__*/React.forwardRef(function F
47
91
  ref: [forwardedRef, labelRef],
48
92
  state: fieldRootContext.state,
49
93
  props: [{
50
- id: labelId,
94
+ id: labelId
95
+ }, nativeLabel ? {
51
96
  htmlFor: controlId ?? undefined,
52
- onMouseDown(event) {
53
- const target = (0, _utils.getTarget)(event.nativeEvent);
54
- if (target?.closest('button,input,select,textarea')) {
55
- return;
56
- }
57
-
58
- // Prevent text selection when double clicking label.
59
- if (!event.defaultPrevented && event.detail > 1) {
60
- event.preventDefault();
61
- }
97
+ onMouseDown: handleInteraction
98
+ } : {
99
+ onClick: handleInteraction,
100
+ onPointerDown(event) {
101
+ event.preventDefault();
62
102
  }
63
103
  }, elementProps],
64
104
  stateAttributesMapping: _constants.fieldValidityMapping
@@ -7,7 +7,7 @@ import { BaseUIComponentProps } from "../../utils/types.js";
7
7
  *
8
8
  * Documentation: [Base UI Field](https://base-ui.com/react/components/field)
9
9
  */
10
- export declare const FieldRoot: React.ForwardRefExoticComponent<FieldRootProps & React.RefAttributes<HTMLDivElement>>;
10
+ export declare const FieldRoot: React.ForwardRefExoticComponent<Omit<FieldRootProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
11
11
  export interface FieldValidityData {
12
12
  state: {
13
13
  badInput: boolean;
@@ -27,6 +27,9 @@ export interface FieldValidityData {
27
27
  value: unknown;
28
28
  initialValue: unknown;
29
29
  }
30
+ export interface FieldRootActions {
31
+ validate: () => void;
32
+ }
30
33
  export interface FieldRootState {
31
34
  /** Whether the component should ignore user interaction. */
32
35
  disabled: boolean;
@@ -87,8 +90,14 @@ export interface FieldRootProps extends BaseUIComponentProps<'div', FieldRoot.St
87
90
  * Useful when the field state is controlled by an external library.
88
91
  */
89
92
  touched?: boolean;
93
+ /**
94
+ * A ref to imperative actions.
95
+ * - `validate`: Validates the field when called.
96
+ */
97
+ actionsRef?: React.RefObject<FieldRoot.Actions | null>;
90
98
  }
91
99
  export declare namespace FieldRoot {
92
100
  type State = FieldRootState;
93
101
  type Props = FieldRootProps;
102
+ type Actions = FieldRootActions;
94
103
  }
@@ -35,6 +35,7 @@ var _jsxRuntime = require("react/jsx-runtime");
35
35
  invalid: invalidProp,
36
36
  dirty: dirtyProp,
37
37
  touched: touchedProp,
38
+ actionsRef,
38
39
  ...elementProps
39
40
  } = componentProps;
40
41
  const {
@@ -93,6 +94,13 @@ var _jsxRuntime = require("react/jsx-runtime");
93
94
  name,
94
95
  shouldValidateOnChange
95
96
  });
97
+ const handleImperativeValidate = React.useCallback(() => {
98
+ markedDirtyRef.current = true;
99
+ validation.commit(validityData.value);
100
+ }, [validation, validityData]);
101
+ React.useImperativeHandle(actionsRef, () => ({
102
+ validate: handleImperativeValidate
103
+ }), [handleImperativeValidate]);
96
104
  const contextValue = React.useMemo(() => ({
97
105
  invalid,
98
106
  name,
package/field/useField.js CHANGED
@@ -54,14 +54,18 @@ function useField(params) {
54
54
  name,
55
55
  controlRef,
56
56
  validityData: (0, _getCombinedFieldValidityData.getCombinedFieldValidityData)(validityData, invalid),
57
- validate() {
57
+ validate(flushSync = true) {
58
58
  let nextValue = value;
59
59
  if (nextValue === undefined) {
60
60
  nextValue = getValue();
61
61
  }
62
62
  markedDirtyRef.current = true;
63
- // Synchronously update the validity state so the submit event can be prevented.
64
- ReactDOM.flushSync(() => commit(nextValue));
63
+ if (!flushSync) {
64
+ commit(nextValue);
65
+ } else {
66
+ // Synchronously update the validity state so the submit event can be prevented.
67
+ ReactDOM.flushSync(() => commit(nextValue));
68
+ }
65
69
  }
66
70
  });
67
71
  }, [commit, controlRef, enabled, formRef, getValue, id, invalid, markedDirtyRef, name, validityData, value]);
@@ -6,7 +6,7 @@ import type { BaseUIComponentProps } from "../../utils/types.js";
6
6
  *
7
7
  * Documentation: [Base UI Fieldset](https://base-ui.com/react/components/fieldset)
8
8
  */
9
- export declare const FieldsetLegend: React.ForwardRefExoticComponent<FieldsetLegendProps & React.RefAttributes<HTMLDivElement>>;
9
+ export declare const FieldsetLegend: React.ForwardRefExoticComponent<Omit<FieldsetLegendProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
10
10
  export interface FieldsetLegendState {
11
11
  /**
12
12
  * Whether the component should ignore user interaction.
@@ -6,7 +6,7 @@ import type { BaseUIComponentProps } from "../../utils/types.js";
6
6
  *
7
7
  * Documentation: [Base UI Fieldset](https://base-ui.com/react/components/fieldset)
8
8
  */
9
- export declare const FieldsetRoot: React.ForwardRefExoticComponent<FieldsetRootProps & React.RefAttributes<HTMLElement>>;
9
+ export declare const FieldsetRoot: React.ForwardRefExoticComponent<Omit<FieldsetRootProps, "ref"> & React.RefAttributes<HTMLElement>>;
10
10
  export interface FieldsetRootState {
11
11
  /**
12
12
  * Whether the component should ignore user interaction.
@@ -162,6 +162,10 @@ function FloatingFocusManager(props) {
162
162
  const tabbableIndexRef = React.useRef(-1);
163
163
  const closeTypeRef = React.useRef('');
164
164
  const lastInteractionTypeRef = React.useRef('');
165
+ const beforeGuardRef = React.useRef(null);
166
+ const afterGuardRef = React.useRef(null);
167
+ const mergedBeforeGuardRef = (0, _useMergedRefs.useMergedRefs)(beforeGuardRef, beforeContentFocusGuardRef, portalContext?.beforeInsideRef);
168
+ const mergedAfterGuardRef = (0, _useMergedRefs.useMergedRefs)(afterGuardRef, portalContext?.afterInsideRef);
165
169
  const blurTimeout = (0, _useTimeout.useTimeout)();
166
170
  const pointerDownTimeout = (0, _useTimeout.useTimeout)();
167
171
  const restoreFocusFrame = (0, _useAnimationFrame.useAnimationFrame)();
@@ -267,7 +271,8 @@ function FloatingFocusManager(props) {
267
271
  queueMicrotask(() => {
268
272
  const nodeId = getNodeId();
269
273
  const triggers = store.context.triggerElements;
270
- const movedToUnrelatedNode = !((0, _utils.contains)(domReference, relatedTarget) || (0, _utils.contains)(floating, relatedTarget) || (0, _utils.contains)(relatedTarget, floating) || (0, _utils.contains)(portalContext?.portalNode, relatedTarget) || relatedTarget != null && triggers.hasElement(relatedTarget) || triggers.hasMatchingElement(trigger => (0, _utils.contains)(trigger, relatedTarget)) || relatedTarget?.hasAttribute((0, _createAttribute.createAttribute)('focus-guard')) || tree && ((0, _utils.getNodeChildren)(tree.nodesRef.current, nodeId).find(node => (0, _utils.contains)(node.context?.elements.floating, relatedTarget) || (0, _utils.contains)(node.context?.elements.domReference, relatedTarget)) || (0, _utils.getNodeAncestors)(tree.nodesRef.current, nodeId).find(node => [node.context?.elements.floating, (0, _utils.getFloatingFocusElement)(node.context?.elements.floating)].includes(relatedTarget) || node.context?.elements.domReference === relatedTarget)));
274
+ const isRelatedFocusGuard = relatedTarget?.hasAttribute((0, _createAttribute.createAttribute)('focus-guard')) && [beforeGuardRef.current, afterGuardRef.current, portalContext?.beforeInsideRef.current, portalContext?.afterInsideRef.current, portalContext?.beforeOutsideRef.current, portalContext?.afterOutsideRef.current, (0, _resolveRef.resolveRef)(previousFocusableElement), (0, _resolveRef.resolveRef)(nextFocusableElement)].includes(relatedTarget);
275
+ const movedToUnrelatedNode = !((0, _utils.contains)(domReference, relatedTarget) || (0, _utils.contains)(floating, relatedTarget) || (0, _utils.contains)(relatedTarget, floating) || (0, _utils.contains)(portalContext?.portalNode, relatedTarget) || relatedTarget != null && triggers.hasElement(relatedTarget) || triggers.hasMatchingElement(trigger => (0, _utils.contains)(trigger, relatedTarget)) || isRelatedFocusGuard || tree && ((0, _utils.getNodeChildren)(tree.nodesRef.current, nodeId).find(node => (0, _utils.contains)(node.context?.elements.floating, relatedTarget) || (0, _utils.contains)(node.context?.elements.domReference, relatedTarget)) || (0, _utils.getNodeAncestors)(tree.nodesRef.current, nodeId).find(node => [node.context?.elements.floating, (0, _utils.getFloatingFocusElement)(node.context?.elements.floating)].includes(relatedTarget) || node.context?.elements.domReference === relatedTarget)));
271
276
  if (currentTarget === domReference && floatingFocusElement) {
272
277
  handleTabIndex(floatingFocusElement, orderRef);
273
278
  }
@@ -361,11 +366,7 @@ function FloatingFocusManager(props) {
361
366
  cleanup();
362
367
  });
363
368
  };
364
- }, [disabled, domReference, floating, floatingFocusElement, modal, tree, portalContext, store, closeOnFocusOut, restoreFocus, getTabbableContent, isUntrappedTypeableCombobox, getNodeId, orderRef, dataRef, blurTimeout, pointerDownTimeout, restoreFocusFrame]);
365
- const beforeGuardRef = React.useRef(null);
366
- const afterGuardRef = React.useRef(null);
367
- const mergedBeforeGuardRef = (0, _useMergedRefs.useMergedRefs)(beforeGuardRef, beforeContentFocusGuardRef, portalContext?.beforeInsideRef);
368
- const mergedAfterGuardRef = (0, _useMergedRefs.useMergedRefs)(afterGuardRef, portalContext?.afterInsideRef);
369
+ }, [disabled, domReference, floating, floatingFocusElement, modal, tree, portalContext, store, closeOnFocusOut, restoreFocus, getTabbableContent, isUntrappedTypeableCombobox, getNodeId, orderRef, dataRef, blurTimeout, pointerDownTimeout, restoreFocusFrame, nextFocusableElement, previousFocusableElement]);
369
370
  React.useEffect(() => {
370
371
  if (disabled || !floating || !open) {
371
372
  return undefined;
@@ -40,9 +40,9 @@ export declare function useFloatingPortalNode(props?: UseFloatingPortalNodeProps
40
40
  * @see https://floating-ui.com/docs/FloatingPortal
41
41
  * @internal
42
42
  */
43
- export declare const FloatingPortal: React.ForwardRefExoticComponent<FloatingPortal.Props<any> & {
43
+ export declare const FloatingPortal: React.ForwardRefExoticComponent<Omit<FloatingPortal.Props<any> & {
44
44
  renderGuards?: boolean;
45
- } & React.RefAttributes<HTMLDivElement>>;
45
+ }, "ref"> & React.RefAttributes<HTMLDivElement>>;
46
46
  export declare namespace FloatingPortal {
47
47
  interface Props<State> extends BaseUIComponentProps<'div', State> {
48
48
  /**
@@ -13,6 +13,7 @@ var ReactDOM = _interopRequireWildcard(require("react-dom"));
13
13
  var _dom = require("@floating-ui/utils/dom");
14
14
  var _useId = require("@base-ui/utils/useId");
15
15
  var _useIsoLayoutEffect = require("@base-ui/utils/useIsoLayoutEffect");
16
+ var _useStableCallback = require("@base-ui/utils/useStableCallback");
16
17
  var _FocusGuard = require("../../utils/FocusGuard");
17
18
  var _utils = require("../utils");
18
19
  var _createBaseUIEventDetails = require("../../utils/createBaseUIEventDetails");
@@ -39,6 +40,14 @@ function useFloatingPortalNode(props = {}) {
39
40
  const parentPortalNode = portalContext?.portalNode;
40
41
  const [containerElement, setContainerElement] = React.useState(null);
41
42
  const [portalNode, setPortalNode] = React.useState(null);
43
+ const setPortalNodeRef = (0, _useStableCallback.useStableCallback)(node => {
44
+ if (node !== null) {
45
+ // the useIsoLayoutEffect below watching containerProp / parentPortalNode
46
+ // sets setPortalNode(null) when the container becomes null or changes.
47
+ // So even though the ref callback now ignores null, the portal node still gets cleared.
48
+ setPortalNode(node);
49
+ }
50
+ });
42
51
  const containerRef = React.useRef(null);
43
52
  (0, _useIsoLayoutEffect.useIsoLayoutEffect)(() => {
44
53
  // Wait for the container to be resolved if explicitly `null`.
@@ -71,7 +80,7 @@ function useFloatingPortalNode(props = {}) {
71
80
  }
72
81
  }, [containerProp, parentPortalNode, uniqueId]);
73
82
  const portalElement = (0, _useRenderElement.useRenderElement)('div', componentProps, {
74
- ref: [ref, setPortalNode],
83
+ ref: [ref, setPortalNodeRef],
75
84
  state: elementState,
76
85
  props: [{
77
86
  id: uniqueId,
@@ -134,7 +143,7 @@ const FloatingPortal = exports.FloatingPortal = /*#__PURE__*/React.forwardRef(fu
134
143
  // portal has already been focused, either by tabbing into a focus trap
135
144
  // element outside or using the mouse.
136
145
  function onFocus(event) {
137
- if (portalNode && (0, _utils.isOutsideEvent)(event)) {
146
+ if (portalNode && event.relatedTarget && (0, _utils.isOutsideEvent)(event)) {
138
147
  const focusing = event.type === 'focusin';
139
148
  const manageFocus = focusing ? _utils.enableFocusInside : _utils.disableFocusInside;
140
149
  manageFocus(portalNode);
@@ -87,7 +87,7 @@ function useClientPoint(context, props = {}) {
87
87
  const cleanupListenerRef = React.useRef(null);
88
88
  const [pointerType, setPointerType] = React.useState();
89
89
  const [reactive, setReactive] = React.useState([]);
90
- const setReference = (0, _useStableCallback.useStableCallback)((newX, newY) => {
90
+ const setReference = (0, _useStableCallback.useStableCallback)((newX, newY, referenceElement) => {
91
91
  if (initialRef.current) {
92
92
  return;
93
93
  }
@@ -98,7 +98,7 @@ function useClientPoint(context, props = {}) {
98
98
  if (dataRef.current.openEvent && !isMouseBasedEvent(dataRef.current.openEvent)) {
99
99
  return;
100
100
  }
101
- store.set('positionReference', createVirtualElement(domReference, {
101
+ store.set('positionReference', createVirtualElement(referenceElement ?? domReference, {
102
102
  x: newX,
103
103
  y: newY,
104
104
  axis,
@@ -111,7 +111,7 @@ function useClientPoint(context, props = {}) {
111
111
  return;
112
112
  }
113
113
  if (!open) {
114
- setReference(event.clientX, event.clientY);
114
+ setReference(event.clientX, event.clientY, event.currentTarget);
115
115
  } else if (!cleanupListenerRef.current) {
116
116
  // If there's no cleanup, there's no listener, but we want to ensure
117
117
  // we add the listener if the cursor landed on the floating element and
@@ -183,6 +183,7 @@ function useClientPoint(context, props = {}) {
183
183
  };
184
184
  }, [handleReferenceEnterOrMove]);
185
185
  return React.useMemo(() => enabled ? {
186
- reference
186
+ reference,
187
+ trigger: reference
187
188
  } : {}, [enabled, reference]);
188
189
  }
@@ -392,6 +392,7 @@ function useDismiss(context, props = {}) {
392
392
  ancestor.removeEventListener('scroll', onScroll);
393
393
  });
394
394
  compositionTimeout.clear();
395
+ endedOrStartedInsideRef.current = false;
395
396
  };
396
397
  }, [dataRef, floatingElement, referenceElement, domReferenceElement, escapeKey, outsidePress, open, onOpenChange, ancestorScroll, enabled, escapeKeyBubbles, outsidePressBubbles, closeOnEscapeKeyDown, closeOnPressOutside, closeOnPressOutsideCapture, handlePointerDown, handleTouchStartCapture, handleTouchMoveCapture, handleTouchEndCapture, trackPointerType, store]);
397
398
  React.useEffect(clearInsideReactTree, [outsidePress, clearInsideReactTree]);
@@ -415,6 +416,12 @@ function useDismiss(context, props = {}) {
415
416
  }
416
417
  endedOrStartedInsideRef.current = true;
417
418
  });
419
+ const markPressStartedInsideReactTree = (0, _useStableCallback.useStableCallback)(event => {
420
+ if (!open || !enabled || event.button !== 0) {
421
+ return;
422
+ }
423
+ endedOrStartedInsideRef.current = true;
424
+ });
418
425
  const floating = React.useMemo(() => ({
419
426
  onKeyDown: closeOnEscapeKeyDown,
420
427
  // `onMouseDown` may be blocked if `event.preventDefault()` is called in
@@ -424,12 +431,18 @@ function useDismiss(context, props = {}) {
424
431
  onMouseDown: handlePressedInside,
425
432
  onMouseUp: handlePressedInside,
426
433
  onClickCapture: markInsideReactTree,
427
- onMouseDownCapture: markInsideReactTree,
428
- onPointerDownCapture: markInsideReactTree,
434
+ onMouseDownCapture(event) {
435
+ markInsideReactTree();
436
+ markPressStartedInsideReactTree(event);
437
+ },
438
+ onPointerDownCapture(event) {
439
+ markInsideReactTree();
440
+ markPressStartedInsideReactTree(event);
441
+ },
429
442
  onMouseUpCapture: markInsideReactTree,
430
443
  onTouchEndCapture: markInsideReactTree,
431
444
  onTouchMoveCapture: markInsideReactTree
432
- }), [closeOnEscapeKeyDown, handlePressedInside, markInsideReactTree]);
445
+ }), [closeOnEscapeKeyDown, handlePressedInside, markInsideReactTree, markPressStartedInsideReactTree]);
433
446
  return React.useMemo(() => enabled ? {
434
447
  reference,
435
448
  floating,
@@ -12,6 +12,11 @@ export interface UseFocusProps {
12
12
  * @default true
13
13
  */
14
14
  visibleOnly?: boolean;
15
+ /**
16
+ * Waits for the specified time before opening.
17
+ * @default undefined
18
+ */
19
+ delay?: number | (() => number | undefined);
15
20
  }
16
21
  /**
17
22
  * Opens the floating element while the reference element has focus, like CSS