@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
@@ -31,6 +31,8 @@ var _reasons = require("../../utils/reasons");
31
31
  var _ToolbarRootContext = require("../../toolbar/root/ToolbarRootContext");
32
32
  var _composite = require("../../composite/composite");
33
33
  var _getDisabledMountTransitionStyles = require("../../utils/getDisabledMountTransitionStyles");
34
+ var _clamp = require("../../utils/clamp");
35
+ var _CSPContext = require("../../csp-provider/CSPContext");
34
36
  var _jsxRuntime = require("react/jsx-runtime");
35
37
  const stateAttributesMapping = {
36
38
  ..._popupStateMapping.popupStateMapping,
@@ -59,7 +61,8 @@ const SelectPopup = exports.SelectPopup = /*#__PURE__*/React.forwardRef(function
59
61
  keyboardActiveRef,
60
62
  multiple,
61
63
  handleScrollArrowVisibility,
62
- scrollHandlerRef
64
+ scrollHandlerRef,
65
+ highlightItemOnHover
63
66
  } = (0, _SelectRootContext.useSelectRootContext)();
64
67
  const {
65
68
  side,
@@ -71,6 +74,10 @@ const SelectPopup = exports.SelectPopup = /*#__PURE__*/React.forwardRef(function
71
74
  } = (0, _SelectPositionerContext.useSelectPositionerContext)();
72
75
  const insideToolbar = (0, _ToolbarRootContext.useToolbarRootContext)(true) != null;
73
76
  const floatingRootContext = (0, _SelectRootContext.useSelectFloatingContext)();
77
+ const {
78
+ nonce,
79
+ disableStyleElements
80
+ } = (0, _CSPContext.useCSPContext)();
74
81
  const highlightTimeout = (0, _useTimeout.useTimeout)();
75
82
  const id = (0, _store.useStore)(store, _store2.selectors.id);
76
83
  const open = (0, _store.useStore)(store, _store2.selectors.open);
@@ -101,12 +108,13 @@ const SelectPopup = exports.SelectPopup = /*#__PURE__*/React.forwardRef(function
101
108
  const positionerStyles = getComputedStyle(positionerElement);
102
109
  const marginTop = parseFloat(positionerStyles.marginTop);
103
110
  const marginBottom = parseFloat(positionerStyles.marginBottom);
111
+ const maxPopupHeight = getMaxPopupHeight(getComputedStyle(popupRef.current));
104
112
  const viewportHeight = doc.documentElement.clientHeight - marginTop - marginBottom;
105
113
  const scrollTop = scroller.scrollTop;
106
114
  const scrollHeight = scroller.scrollHeight;
107
115
  const clientHeight = scroller.clientHeight;
108
116
  const maxScrollTop = scrollHeight - clientHeight;
109
- let nextPositionerHeight = null;
117
+ let nextPositionerHeight = 0;
110
118
  let nextScrollTop = null;
111
119
  let setReachedMax = false;
112
120
  if (isTopPositioned) {
@@ -134,13 +142,13 @@ const SelectPopup = exports.SelectPopup = /*#__PURE__*/React.forwardRef(function
134
142
  }
135
143
  }
136
144
  }
137
- if (nextPositionerHeight != null) {
145
+ if (nextPositionerHeight !== 0) {
138
146
  positionerElement.style.height = `${nextPositionerHeight}px`;
139
147
  }
140
148
  if (nextScrollTop != null) {
141
149
  scroller.scrollTop = nextScrollTop;
142
150
  }
143
- if (setReachedMax) {
151
+ if (setReachedMax || nextPositionerHeight >= maxPopupHeight) {
144
152
  reachedMaxHeightRef.current = true;
145
153
  }
146
154
  handleScrollArrowVisibility();
@@ -178,7 +186,7 @@ const SelectPopup = exports.SelectPopup = /*#__PURE__*/React.forwardRef(function
178
186
  };
179
187
  }, [popupRef, positionerElement]);
180
188
  (0, _useIsoLayoutEffect.useIsoLayoutEffect)(() => {
181
- if (mounted || alignItemWithTriggerActive) {
189
+ if (open || alignItemWithTriggerActive) {
182
190
  return;
183
191
  }
184
192
  initialPlacedRef.current = false;
@@ -186,109 +194,128 @@ const SelectPopup = exports.SelectPopup = /*#__PURE__*/React.forwardRef(function
186
194
  initialHeightRef.current = 0;
187
195
  maxHeightRef.current = 0;
188
196
  (0, _utils.clearStyles)(positionerElement, originalPositionerStylesRef.current);
189
- }, [mounted, alignItemWithTriggerActive, positionerElement, popupRef]);
197
+ }, [open, alignItemWithTriggerActive, positionerElement, popupRef]);
190
198
  (0, _useIsoLayoutEffect.useIsoLayoutEffect)(() => {
191
199
  const popupElement = popupRef.current;
192
- if (!mounted || !triggerElement || !positionerElement || !popupElement) {
200
+ if (!open || !triggerElement || !positionerElement || !popupElement || store.state.transitionStatus === 'ending') {
193
201
  return;
194
202
  }
195
203
  if (!alignItemWithTriggerActive) {
196
204
  initialPlacedRef.current = true;
197
205
  scrollArrowFrame.request(handleScrollArrowVisibility);
206
+ popupElement.style.removeProperty('--transform-origin');
198
207
  return;
199
208
  }
200
209
 
201
210
  // Wait for `selectedItemTextRef.current` to be set.
202
211
  queueMicrotask(() => {
203
- const positionerStyles = getComputedStyle(positionerElement);
204
- const popupStyles = getComputedStyle(popupElement);
205
- const doc = (0, _owner.ownerDocument)(triggerElement);
206
- const win = (0, _owner.ownerWindow)(positionerElement);
207
- const triggerRect = triggerElement.getBoundingClientRect();
208
- const positionerRect = positionerElement.getBoundingClientRect();
209
- const triggerX = triggerRect.left;
210
- const triggerHeight = triggerRect.height;
211
- const scroller = listElement || popupElement;
212
- const scrollHeight = scroller.scrollHeight;
213
- const borderBottom = parseFloat(popupStyles.borderBottomWidth);
214
- const marginTop = parseFloat(positionerStyles.marginTop) || 10;
215
- const marginBottom = parseFloat(positionerStyles.marginBottom) || 10;
216
- const minHeight = parseFloat(positionerStyles.minHeight) || 100;
217
- const paddingLeft = 5;
218
- const paddingRight = 5;
219
- const triggerCollisionThreshold = 20;
220
- const viewportHeight = doc.documentElement.clientHeight - marginTop - marginBottom;
221
- const viewportWidth = doc.documentElement.clientWidth;
222
- const availableSpaceBeneathTrigger = viewportHeight - triggerRect.bottom + triggerHeight;
223
- const textElement = selectedItemTextRef.current;
224
- const valueElement = valueRef.current;
225
- let offsetX = 0;
226
- let offsetY = 0;
227
- if (textElement && valueElement) {
228
- const valueRect = valueElement.getBoundingClientRect();
229
- const textRect = textElement.getBoundingClientRect();
230
- const valueLeftFromTriggerLeft = valueRect.left - triggerX;
231
- const textLeftFromPositionerLeft = textRect.left - positionerRect.left;
232
- const valueCenterFromPositionerTop = valueRect.top - triggerRect.top + valueRect.height / 2;
233
- const textCenterFromTriggerTop = textRect.top - positionerRect.top + textRect.height / 2;
234
- offsetX = valueLeftFromTriggerLeft - textLeftFromPositionerLeft;
235
- offsetY = textCenterFromTriggerTop - valueCenterFromPositionerTop;
236
- }
237
- const idealHeight = availableSpaceBeneathTrigger + offsetY + marginBottom + borderBottom;
238
- let height = Math.min(viewportHeight, idealHeight);
239
- const maxHeight = viewportHeight - marginTop - marginBottom;
240
- const scrollTop = idealHeight - height;
241
- const left = Math.max(paddingLeft, triggerX + offsetX);
242
- const maxRight = viewportWidth - paddingRight;
243
- const rightOverflow = Math.max(0, left + positionerRect.width - maxRight);
244
- positionerElement.style.left = `${left - rightOverflow}px`;
245
- positionerElement.style.height = `${height}px`;
246
- positionerElement.style.maxHeight = 'auto';
247
- positionerElement.style.marginTop = `${marginTop}px`;
248
- positionerElement.style.marginBottom = `${marginBottom}px`;
249
- popupElement.style.height = '100%';
250
- const maxScrollTop = scroller.scrollHeight - scroller.clientHeight;
251
- const isTopPositioned = scrollTop >= maxScrollTop;
252
- if (isTopPositioned) {
253
- height = Math.min(viewportHeight, positionerRect.height) - (scrollTop - maxScrollTop);
254
- }
212
+ // Ensure we remove any transforms that can affect the location of the popup
213
+ // and therefore the calculations.
214
+ const restoreTransformStyles = unsetTransformStyles(popupElement);
215
+ popupElement.style.removeProperty('--transform-origin');
216
+ try {
217
+ const positionerStyles = getComputedStyle(positionerElement);
218
+ const popupStyles = getComputedStyle(popupElement);
219
+ const doc = (0, _owner.ownerDocument)(triggerElement);
220
+ const win = (0, _owner.ownerWindow)(positionerElement);
221
+ const triggerRect = triggerElement.getBoundingClientRect();
222
+ const positionerRect = positionerElement.getBoundingClientRect();
223
+ const triggerX = triggerRect.left;
224
+ const triggerHeight = triggerRect.height;
225
+ const scroller = listElement || popupElement;
226
+ const scrollHeight = scroller.scrollHeight;
227
+ const borderBottom = parseFloat(popupStyles.borderBottomWidth);
228
+ const marginTop = parseFloat(positionerStyles.marginTop) || 10;
229
+ const marginBottom = parseFloat(positionerStyles.marginBottom) || 10;
230
+ const minHeight = parseFloat(positionerStyles.minHeight) || 100;
231
+ const maxPopupHeight = getMaxPopupHeight(popupStyles);
232
+ const paddingLeft = 5;
233
+ const paddingRight = 5;
234
+ const triggerCollisionThreshold = 20;
235
+ const viewportHeight = doc.documentElement.clientHeight - marginTop - marginBottom;
236
+ const viewportWidth = doc.documentElement.clientWidth;
237
+ const availableSpaceBeneathTrigger = viewportHeight - triggerRect.bottom + triggerHeight;
238
+ const textElement = selectedItemTextRef.current;
239
+ const valueElement = valueRef.current;
240
+ let textRect;
241
+ let offsetX = 0;
242
+ let offsetY = 0;
243
+ if (textElement && valueElement) {
244
+ const valueRect = valueElement.getBoundingClientRect();
245
+ textRect = textElement.getBoundingClientRect();
246
+ const valueLeftFromTriggerLeft = valueRect.left - triggerX;
247
+ const textLeftFromPositionerLeft = textRect.left - positionerRect.left;
248
+ const valueCenterFromPositionerTop = valueRect.top - triggerRect.top + valueRect.height / 2;
249
+ const textCenterFromTriggerTop = textRect.top - positionerRect.top + textRect.height / 2;
250
+ offsetX = valueLeftFromTriggerLeft - textLeftFromPositionerLeft;
251
+ offsetY = textCenterFromTriggerTop - valueCenterFromPositionerTop;
252
+ }
253
+ const idealHeight = availableSpaceBeneathTrigger + offsetY + marginBottom + borderBottom;
254
+ let height = Math.min(viewportHeight, idealHeight);
255
+ const maxHeight = viewportHeight - marginTop - marginBottom;
256
+ const scrollTop = idealHeight - height;
257
+ const left = Math.max(paddingLeft, triggerX + offsetX);
258
+ const maxRight = viewportWidth - paddingRight;
259
+ const rightOverflow = Math.max(0, left + positionerRect.width - maxRight);
260
+ positionerElement.style.left = `${left - rightOverflow}px`;
261
+ positionerElement.style.height = `${height}px`;
262
+ positionerElement.style.maxHeight = 'auto';
263
+ positionerElement.style.marginTop = `${marginTop}px`;
264
+ positionerElement.style.marginBottom = `${marginBottom}px`;
265
+ popupElement.style.height = '100%';
266
+ const maxScrollTop = scroller.scrollHeight - scroller.clientHeight;
267
+ const isTopPositioned = scrollTop >= maxScrollTop;
268
+ if (isTopPositioned) {
269
+ height = Math.min(viewportHeight, positionerRect.height) - (scrollTop - maxScrollTop);
270
+ }
255
271
 
256
- // When the trigger is too close to the top or bottom of the viewport, or the minHeight is
257
- // reached, we fallback to aligning the popup to the trigger as the UX is poor otherwise.
258
- const fallbackToAlignPopupToTrigger = triggerRect.top < triggerCollisionThreshold || triggerRect.bottom > viewportHeight - triggerCollisionThreshold || height < Math.min(scrollHeight, minHeight);
272
+ // When the trigger is too close to the top or bottom of the viewport, or the minHeight is
273
+ // reached, we fallback to aligning the popup to the trigger as the UX is poor otherwise.
274
+ const fallbackToAlignPopupToTrigger = triggerRect.top < triggerCollisionThreshold || triggerRect.bottom > viewportHeight - triggerCollisionThreshold || height < Math.min(scrollHeight, minHeight);
259
275
 
260
- // Safari doesn't position the popup correctly when pinch-zoomed.
261
- const isPinchZoomed = (win.visualViewport?.scale ?? 1) !== 1 && _detectBrowser.isWebKit;
262
- if (fallbackToAlignPopupToTrigger || isPinchZoomed) {
263
- initialPlacedRef.current = true;
264
- (0, _utils.clearStyles)(positionerElement, originalPositionerStylesRef.current);
265
- ReactDOM.flushSync(() => setControlledAlignItemWithTrigger(false));
266
- return;
267
- }
268
- if (isTopPositioned) {
269
- const topOffset = Math.max(0, viewportHeight - idealHeight);
270
- positionerElement.style.top = positionerRect.height >= maxHeight ? '0' : `${topOffset}px`;
271
- positionerElement.style.height = `${height}px`;
272
- scroller.scrollTop = scroller.scrollHeight - scroller.clientHeight;
273
- initialHeightRef.current = Math.max(minHeight, height);
274
- } else {
275
- positionerElement.style.bottom = '0';
276
- initialHeightRef.current = Math.max(minHeight, height);
277
- scroller.scrollTop = scrollTop;
278
- }
279
- if (initialHeightRef.current === viewportHeight) {
280
- reachedMaxHeightRef.current = true;
281
- }
282
- handleScrollArrowVisibility();
276
+ // Safari doesn't position the popup correctly when pinch-zoomed.
277
+ const isPinchZoomed = (win.visualViewport?.scale ?? 1) !== 1 && _detectBrowser.isWebKit;
278
+ if (fallbackToAlignPopupToTrigger || isPinchZoomed) {
279
+ initialPlacedRef.current = true;
280
+ (0, _utils.clearStyles)(positionerElement, originalPositionerStylesRef.current);
281
+ ReactDOM.flushSync(() => setControlledAlignItemWithTrigger(false));
282
+ return;
283
+ }
284
+ if (isTopPositioned) {
285
+ const topOffset = Math.max(0, viewportHeight - idealHeight);
286
+ positionerElement.style.top = positionerRect.height >= maxHeight ? '0' : `${topOffset}px`;
287
+ positionerElement.style.height = `${height}px`;
288
+ scroller.scrollTop = scroller.scrollHeight - scroller.clientHeight;
289
+ initialHeightRef.current = Math.max(minHeight, height);
290
+ } else {
291
+ positionerElement.style.bottom = '0';
292
+ initialHeightRef.current = Math.max(minHeight, height);
293
+ scroller.scrollTop = scrollTop;
294
+ }
295
+ if (textRect) {
296
+ const popupTop = positionerRect.top;
297
+ const popupHeight = positionerRect.height;
298
+ const textCenterY = textRect.top + textRect.height / 2;
299
+ const transformOriginY = popupHeight > 0 ? (textCenterY - popupTop) / popupHeight * 100 : 50;
300
+ const clampedY = (0, _clamp.clamp)(transformOriginY, 0, 100);
301
+ popupElement.style.setProperty('--transform-origin', `50% ${clampedY}%`);
302
+ }
303
+ if (initialHeightRef.current === viewportHeight || height >= maxPopupHeight) {
304
+ reachedMaxHeightRef.current = true;
305
+ }
306
+ handleScrollArrowVisibility();
283
307
 
284
- // Avoid the `onScroll` event logic from triggering before the popup is placed.
285
- setTimeout(() => {
286
- initialPlacedRef.current = true;
287
- });
308
+ // Avoid the `onScroll` event logic from triggering before the popup is placed.
309
+ setTimeout(() => {
310
+ initialPlacedRef.current = true;
311
+ });
312
+ } finally {
313
+ restoreTransformStyles();
314
+ }
288
315
  });
289
- }, [store, mounted, positionerElement, triggerElement, valueRef, selectedItemTextRef, popupRef, handleScrollArrowVisibility, alignItemWithTriggerActive, setControlledAlignItemWithTrigger, scrollArrowFrame, scrollDownArrowRef, scrollUpArrowRef, listElement]);
316
+ }, [store, open, positionerElement, triggerElement, valueRef, selectedItemTextRef, popupRef, handleScrollArrowVisibility, alignItemWithTriggerActive, setControlledAlignItemWithTrigger, scrollArrowFrame, scrollDownArrowRef, scrollUpArrowRef, listElement]);
290
317
  React.useEffect(() => {
291
- if (!alignItemWithTriggerActive || !positionerElement || !mounted) {
318
+ if (!alignItemWithTriggerActive || !positionerElement || !open) {
292
319
  return undefined;
293
320
  }
294
321
  const win = (0, _owner.ownerWindow)(positionerElement);
@@ -299,7 +326,7 @@ const SelectPopup = exports.SelectPopup = /*#__PURE__*/React.forwardRef(function
299
326
  return () => {
300
327
  win.removeEventListener('resize', handleResize);
301
328
  };
302
- }, [setOpen, alignItemWithTriggerActive, positionerElement, mounted]);
329
+ }, [setOpen, alignItemWithTriggerActive, positionerElement, open]);
303
330
  const defaultProps = {
304
331
  ...(listElement ? {
305
332
  role: 'presentation',
@@ -319,7 +346,7 @@ const SelectPopup = exports.SelectPopup = /*#__PURE__*/React.forwardRef(function
319
346
  keyboardActiveRef.current = false;
320
347
  },
321
348
  onPointerLeave(event) {
322
- if ((0, _isMouseWithinBounds.isMouseWithinBounds)(event) || event.pointerType === 'touch') {
349
+ if (!highlightItemOnHover || (0, _isMouseWithinBounds.isMouseWithinBounds)(event) || event.pointerType === 'touch') {
323
350
  return;
324
351
  }
325
352
  const popup = event.currentTarget;
@@ -351,7 +378,7 @@ const SelectPopup = exports.SelectPopup = /*#__PURE__*/React.forwardRef(function
351
378
  }, elementProps]
352
379
  });
353
380
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(React.Fragment, {
354
- children: [_styles.styleDisableScrollbar.element, /*#__PURE__*/(0, _jsxRuntime.jsx)(_floatingUiReact.FloatingFocusManager, {
381
+ children: [!disableStyleElements && _styles.styleDisableScrollbar.getElement(nonce), /*#__PURE__*/(0, _jsxRuntime.jsx)(_floatingUiReact.FloatingFocusManager, {
355
382
  context: floatingRootContext,
356
383
  modal: false,
357
384
  disabled: !mounted,
@@ -360,4 +387,36 @@ const SelectPopup = exports.SelectPopup = /*#__PURE__*/React.forwardRef(function
360
387
  })]
361
388
  });
362
389
  });
363
- if (process.env.NODE_ENV !== "production") SelectPopup.displayName = "SelectPopup";
390
+ if (process.env.NODE_ENV !== "production") SelectPopup.displayName = "SelectPopup";
391
+ function getMaxPopupHeight(popupStyles) {
392
+ const maxHeightStyle = popupStyles.maxHeight || '';
393
+ return maxHeightStyle.endsWith('px') ? parseFloat(maxHeightStyle) || Infinity : Infinity;
394
+ }
395
+ const UNSET_TRANSFORM_STYLES = {
396
+ transform: 'none',
397
+ scale: '1',
398
+ translate: '0 0'
399
+ };
400
+ function restoreInlineStyleProperty(style, property, value) {
401
+ if (value) {
402
+ style.setProperty(property, value);
403
+ } else {
404
+ style.removeProperty(property);
405
+ }
406
+ }
407
+ function unsetTransformStyles(popupElement) {
408
+ const {
409
+ style
410
+ } = popupElement;
411
+ const originalStyles = {};
412
+ const props = Object.keys(UNSET_TRANSFORM_STYLES);
413
+ for (const prop of props) {
414
+ originalStyles[prop] = style.getPropertyValue(prop);
415
+ style.setProperty(prop, UNSET_TRANSFORM_STYLES[prop]);
416
+ }
417
+ return () => {
418
+ for (const prop of props) {
419
+ restoreInlineStyleProperty(style, prop, originalStyles[prop]);
420
+ }
421
+ };
422
+ }
@@ -7,7 +7,7 @@ import { FloatingPortal } from "../../floating-ui-react/index.js";
7
7
  *
8
8
  * Documentation: [Base UI Select](https://base-ui.com/react/components/select)
9
9
  */
10
- export declare const SelectPortal: React.ForwardRefExoticComponent<SelectPortalProps & React.RefAttributes<HTMLDivElement>>;
10
+ export declare const SelectPortal: React.ForwardRefExoticComponent<Omit<SelectPortalProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
11
11
  export declare namespace SelectPortal {
12
12
  interface State {}
13
13
  }
@@ -7,7 +7,7 @@ import { useAnchorPositioning, type Align, type Side } from "../../utils/useAnch
7
7
  *
8
8
  * Documentation: [Base UI Select](https://base-ui.com/react/components/select)
9
9
  */
10
- export declare const SelectPositioner: React.ForwardRefExoticComponent<SelectPositionerProps & React.RefAttributes<HTMLDivElement>>;
10
+ export declare const SelectPositioner: React.ForwardRefExoticComponent<Omit<SelectPositionerProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
11
11
  export interface SelectPositionerState {
12
12
  open: boolean;
13
13
  side: Side | 'none';
@@ -70,7 +70,7 @@ export interface SelectRootProps<Value, Multiple extends boolean | undefined = f
70
70
  open?: boolean;
71
71
  /**
72
72
  * Determines if the select enters a modal state when open.
73
- * - `true`: user interaction is limited to the select: document page scroll is locked and and pointer interactions on outside elements are disabled.
73
+ * - `true`: user interaction is limited to the select: document page scroll is locked and pointer interactions on outside elements are disabled.
74
74
  * - `false`: user interaction with the rest of the document is allowed.
75
75
  * @default true
76
76
  */
@@ -81,7 +81,7 @@ export interface SelectRootProps<Value, Multiple extends boolean | undefined = f
81
81
  * Instead, the `unmount` function must be called to unmount the select manually.
82
82
  * Useful when the select's animation is controlled by an external library.
83
83
  */
84
- actionsRef?: React.RefObject<SelectRootActions>;
84
+ actionsRef?: React.RefObject<SelectRootActions | null>;
85
85
  /**
86
86
  * Data structure of the items rendered in the select popup.
87
87
  * When specified, `<Select.Value>` renders the label of the selected item instead of the raw value.
@@ -19,7 +19,6 @@ var _store = require("@base-ui/utils/store");
19
19
  var _floatingUiReact = require("../../floating-ui-react");
20
20
  var _SelectRootContext = require("./SelectRootContext");
21
21
  var _FieldRootContext = require("../../field/root/FieldRootContext");
22
- var _LabelableContext = require("../../labelable-provider/LabelableContext");
23
22
  var _useLabelableId = require("../../labelable-provider/useLabelableId");
24
23
  var _useTransitionStatus = require("../../utils/useTransitionStatus");
25
24
  var _store2 = require("../store");
@@ -71,16 +70,16 @@ function SelectRoot(props) {
71
70
  } = (0, _FormContext.useFormContext)();
72
71
  const {
73
72
  setDirty,
73
+ setTouched,
74
+ setFocused,
74
75
  shouldValidateOnChange,
75
76
  validityData,
76
77
  setFilled,
77
78
  name: fieldName,
78
79
  disabled: fieldDisabled,
79
- validation
80
+ validation,
81
+ validationMode
80
82
  } = (0, _FieldRootContext.useFieldRootContext)();
81
- const {
82
- controlId
83
- } = (0, _LabelableContext.useLabelableContext)();
84
83
  const generatedId = (0, _useLabelableId.useLabelableId)({
85
84
  id
86
85
  });
@@ -181,8 +180,8 @@ function SelectRoot(props) {
181
180
  }
182
181
  }, [store, value]);
183
182
  (0, _useIsoLayoutEffect.useIsoLayoutEffect)(() => {
184
- setFilled(value !== null);
185
- }, [value, setFilled]);
183
+ setFilled(multiple ? Array.isArray(value) && value.length > 0 : value != null);
184
+ }, [multiple, value, setFilled]);
186
185
  (0, _useIsoLayoutEffect.useIsoLayoutEffect)(function syncSelectedIndex() {
187
186
  if (open) {
188
187
  return;
@@ -217,6 +216,13 @@ function SelectRoot(props) {
217
216
  return;
218
217
  }
219
218
  setOpenUnwrapped(nextOpen);
219
+ if (!nextOpen && (eventDetails.reason === _reasons.REASONS.focusOut || eventDetails.reason === _reasons.REASONS.outsidePress)) {
220
+ setTouched(true);
221
+ setFocused(false);
222
+ if (validationMode === 'onBlur') {
223
+ validation.commit(value);
224
+ }
225
+ }
220
226
 
221
227
  // The active index will sync to the last selected index on the next open.
222
228
  // Workaround `enableFocusInside` in Floating UI setting `tabindex=0` of a non-highlighted
@@ -329,7 +335,11 @@ function SelectRoot(props) {
329
335
  getFloatingProps,
330
336
  getItemProps
331
337
  } = (0, _floatingUiReact.useInteractions)([click, dismiss, listNavigation, typeahead]);
332
- const mergedTriggerProps = React.useMemo(() => (0, _mergeProps.mergeProps)(getReferenceProps(), interactionTypeProps), [getReferenceProps, interactionTypeProps]);
338
+ const mergedTriggerProps = React.useMemo(() => {
339
+ return (0, _mergeProps.mergeProps)(getReferenceProps(), interactionTypeProps, generatedId ? {
340
+ id: generatedId
341
+ } : _constants.EMPTY_OBJECT);
342
+ }, [getReferenceProps, interactionTypeProps, generatedId]);
333
343
  (0, _useOnFirstRender.useOnFirstRender)(() => {
334
344
  store.update({
335
345
  popupProps: getFloatingProps(),
@@ -408,7 +418,11 @@ function SelectRoot(props) {
408
418
  ...validation.getInputValidationProps({
409
419
  onFocus() {
410
420
  // Move focus to the trigger element when the hidden input is focused.
411
- store.state.triggerElement?.focus();
421
+ store.state.triggerElement?.focus({
422
+ // Supported in Chrome from 144 (January 2026)
423
+ // @ts-expect-error - focusVisible is not yet in the lib.dom.d.ts
424
+ focusVisible: true
425
+ });
412
426
  },
413
427
  // Handle browser autofill.
414
428
  onChange(event) {
@@ -444,14 +458,13 @@ function SelectRoot(props) {
444
458
  queueMicrotask(handleChange);
445
459
  }
446
460
  }),
447
- id: id || controlId || undefined,
448
461
  name: multiple ? undefined : name,
449
462
  value: serializedValue,
450
463
  disabled: disabled,
451
464
  required: required && !hasMultipleSelection,
452
465
  readOnly: readOnly,
453
466
  ref: ref,
454
- style: _visuallyHidden.visuallyHidden,
467
+ style: name ? _visuallyHidden.visuallyHiddenInput : _visuallyHidden.visuallyHidden,
455
468
  tabIndex: -1,
456
469
  "aria-hidden": true
457
470
  }), hiddenInputs]
@@ -5,7 +5,7 @@ import { type TransitionStatus } from "../../utils/useTransitionStatus.js";
5
5
  /**
6
6
  * @internal
7
7
  */
8
- export declare const SelectScrollArrow: React.ForwardRefExoticComponent<SelectScrollArrowProps & React.RefAttributes<HTMLDivElement>>;
8
+ export declare const SelectScrollArrow: React.ForwardRefExoticComponent<Omit<SelectScrollArrowProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
9
9
  export interface SelectScrollArrowState {
10
10
  direction: 'up' | 'down';
11
11
  visible: boolean;
@@ -6,7 +6,7 @@ import type { BaseUIComponentProps } from "../../utils/types.js";
6
6
  *
7
7
  * Documentation: [Base UI Select](https://base-ui.com/react/components/select)
8
8
  */
9
- export declare const SelectScrollDownArrow: React.ForwardRefExoticComponent<SelectScrollDownArrowProps & React.RefAttributes<HTMLDivElement>>;
9
+ export declare const SelectScrollDownArrow: React.ForwardRefExoticComponent<Omit<SelectScrollDownArrowProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
10
10
  export interface SelectScrollDownArrowState {}
11
11
  export interface SelectScrollDownArrowProps extends BaseUIComponentProps<'div', SelectScrollDownArrow.State> {
12
12
  /**
@@ -6,7 +6,7 @@ import type { BaseUIComponentProps } from "../../utils/types.js";
6
6
  *
7
7
  * Documentation: [Base UI Select](https://base-ui.com/react/components/select)
8
8
  */
9
- export declare const SelectScrollUpArrow: React.ForwardRefExoticComponent<SelectScrollUpArrowProps & React.RefAttributes<HTMLDivElement>>;
9
+ export declare const SelectScrollUpArrow: React.ForwardRefExoticComponent<Omit<SelectScrollUpArrowProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
10
10
  export interface SelectScrollUpArrowState {}
11
11
  export interface SelectScrollUpArrowProps extends BaseUIComponentProps<'div', SelectScrollUpArrow.State> {
12
12
  /**
package/select/store.d.ts CHANGED
@@ -43,6 +43,8 @@ export declare const selectors: {
43
43
  itemToStringValue: (state: State) => ((item: any) => string) | undefined;
44
44
  isItemEqualToValue: (state: State) => (item: any, value: any) => boolean;
45
45
  value: (state: State) => any;
46
+ hasSelectedValue: (state: State) => boolean;
47
+ hasNullItemLabel: (state: State, enabled: boolean) => boolean;
46
48
  open: (state: State) => boolean;
47
49
  mounted: (state: State) => boolean;
48
50
  forceMount: (state: State) => boolean;
@@ -61,5 +63,4 @@ export declare const selectors: {
61
63
  scrollUpArrowVisible: (state: State) => boolean;
62
64
  scrollDownArrowVisible: (state: State) => boolean;
63
65
  hasScrollArrows: (state: State) => boolean;
64
- serializedValue: (state: State) => string;
65
66
  };
package/select/store.js CHANGED
@@ -16,6 +16,23 @@ const selectors = exports.selectors = {
16
16
  itemToStringValue: (0, _store.createSelector)(state => state.itemToStringValue),
17
17
  isItemEqualToValue: (0, _store.createSelector)(state => state.isItemEqualToValue),
18
18
  value: (0, _store.createSelector)(state => state.value),
19
+ hasSelectedValue: (0, _store.createSelector)(state => {
20
+ const {
21
+ value,
22
+ multiple,
23
+ itemToStringValue
24
+ } = state;
25
+ if (value == null) {
26
+ return false;
27
+ }
28
+ if (multiple && Array.isArray(value)) {
29
+ return value.length > 0;
30
+ }
31
+ return (0, _resolveValueLabel.stringifyAsValue)(value, itemToStringValue) !== '';
32
+ }),
33
+ hasNullItemLabel: (0, _store.createSelector)((state, enabled) => {
34
+ return enabled ? (0, _resolveValueLabel.hasNullItemLabel)(state.items) : false;
35
+ }),
19
36
  open: (0, _store.createSelector)(state => state.open),
20
37
  mounted: (0, _store.createSelector)(state => state.mounted),
21
38
  forceMount: (0, _store.createSelector)(state => state.forceMount),
@@ -48,16 +65,5 @@ const selectors = exports.selectors = {
48
65
  listElement: (0, _store.createSelector)(state => state.listElement),
49
66
  scrollUpArrowVisible: (0, _store.createSelector)(state => state.scrollUpArrowVisible),
50
67
  scrollDownArrowVisible: (0, _store.createSelector)(state => state.scrollDownArrowVisible),
51
- hasScrollArrows: (0, _store.createSelector)(state => state.hasScrollArrows),
52
- serializedValue: (0, _store.createSelector)(state => {
53
- const {
54
- multiple,
55
- value,
56
- itemToStringValue
57
- } = state;
58
- if (multiple && Array.isArray(value) && value.length === 0) {
59
- return '';
60
- }
61
- return (0, _resolveValueLabel.stringifyAsValue)(value, itemToStringValue);
62
- })
68
+ hasScrollArrows: (0, _store.createSelector)(state => state.hasScrollArrows)
63
69
  };
@@ -7,14 +7,24 @@ import type { FieldRoot } from "../../field/root/FieldRoot.js";
7
7
  *
8
8
  * Documentation: [Base UI Select](https://base-ui.com/react/components/select)
9
9
  */
10
- export declare const SelectTrigger: React.ForwardRefExoticComponent<SelectTriggerProps & React.RefAttributes<HTMLButtonElement>>;
10
+ export declare const SelectTrigger: React.ForwardRefExoticComponent<Omit<SelectTriggerProps, "ref"> & React.RefAttributes<HTMLButtonElement>>;
11
11
  export interface SelectTriggerState extends FieldRoot.State {
12
- /** Whether the select popup is currently open. */
12
+ /**
13
+ * Whether the select popup is currently open.
14
+ */
13
15
  open: boolean;
14
- /** Whether the select popup is readonly. */
16
+ /**
17
+ * Whether the select popup is readonly.
18
+ */
15
19
  readOnly: boolean;
16
- /** The value of the currently selected item. */
20
+ /**
21
+ * The value of the currently selected item.
22
+ */
17
23
  value: any;
24
+ /**
25
+ * Whether the select doesn't have a value.
26
+ */
27
+ placeholder: boolean;
18
28
  }
19
29
  export interface SelectTriggerProps extends NativeButtonProps, BaseUIComponentProps<'button', SelectTrigger.State> {
20
30
  children?: React.ReactNode;