@octanejs/base-ui 0.1.50 → 0.1.52

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 (1179) hide show
  1. package/LICENSE +21 -0
  2. package/MIGRATION.md +47 -0
  3. package/README.md +62 -5
  4. package/UPSTREAM.md +164 -64
  5. package/package.json +458 -27
  6. package/src/accordion/header/AccordionHeader.tsrx +42 -0
  7. package/src/accordion/header/AccordionHeaderDataAttributes.ts +13 -0
  8. package/src/accordion/index.parts.ts +5 -0
  9. package/src/accordion/index.ts +16 -0
  10. package/src/accordion/item/AccordionItem.tsrx +195 -0
  11. package/src/accordion/item/AccordionItemContext.ts +26 -0
  12. package/src/accordion/item/AccordionItemDataAttributes.ts +13 -0
  13. package/src/accordion/item/stateAttributesMapping.ts +12 -0
  14. package/src/accordion/panel/AccordionPanel.tsrx +163 -0
  15. package/src/accordion/panel/AccordionPanelCssVars.ts +10 -0
  16. package/src/accordion/panel/AccordionPanelDataAttributes.ts +27 -0
  17. package/src/accordion/root/AccordionRoot.tsrx +240 -0
  18. package/src/accordion/root/AccordionRootContext.ts +31 -0
  19. package/src/accordion/root/AccordionRootDataAttributes.ts +8 -0
  20. package/src/accordion/trigger/AccordionTrigger.tsrx +81 -0
  21. package/src/accordion/trigger/AccordionTriggerDataAttributes.ts +8 -0
  22. package/src/alert-dialog/handle.ts +22 -0
  23. package/src/alert-dialog/index.parts.ts +10 -0
  24. package/src/alert-dialog/index.ts +39 -0
  25. package/src/alert-dialog/root/AlertDialogRoot.tsrx +58 -0
  26. package/src/alert-dialog/trigger/AlertDialogTrigger.tsrx +38 -0
  27. package/src/alert-dialog/trigger/AlertDialogTriggerDataAttributes.ts +10 -0
  28. package/src/autocomplete/clear/AutocompleteClearDataAttributes.ts +1 -0
  29. package/src/autocomplete/index.parts.ts +25 -0
  30. package/src/autocomplete/index.ts +78 -0
  31. package/src/autocomplete/input-group/AutocompleteInputGroup.tsrx +53 -0
  32. package/src/autocomplete/input-group/AutocompleteInputGroupDataAttributes.ts +49 -0
  33. package/src/autocomplete/item/AutocompleteItem.tsrx +56 -0
  34. package/src/autocomplete/item/AutocompleteItemDataAttributes.ts +10 -0
  35. package/src/autocomplete/root/AutocompleteRoot.tsrx +296 -0
  36. package/src/autocomplete/separator/AutocompleteSeparator.tsrx +37 -0
  37. package/src/autocomplete/trigger/AutocompleteTrigger.tsrx +57 -0
  38. package/src/autocomplete/trigger/AutocompleteTriggerDataAttributes.ts +55 -0
  39. package/src/autocomplete/value/AutocompleteValue.tsrx +38 -0
  40. package/src/avatar/fallback/AvatarFallback.tsrx +68 -0
  41. package/src/avatar/image/AvatarImage.tsrx +210 -0
  42. package/src/avatar/image/AvatarImageDataAttributes.ts +18 -0
  43. package/src/avatar/image/useImageLoadingStatus.ts +72 -0
  44. package/src/avatar/index.parts.ts +3 -0
  45. package/src/avatar/index.ts +5 -0
  46. package/src/avatar/root/AvatarRoot.tsrx +60 -0
  47. package/src/avatar/root/AvatarRootContext.ts +21 -0
  48. package/src/avatar/root/stateAttributesMapping.ts +3 -0
  49. package/src/button/Button.tsrx +63 -0
  50. package/src/button/ButtonDataAttributes.tsrx +4 -0
  51. package/src/button/index.ts +3 -0
  52. package/src/checkbox/index.parts.ts +2 -0
  53. package/src/checkbox/index.ts +4 -0
  54. package/src/checkbox/indicator/CheckboxIndicator.tsrx +96 -0
  55. package/src/checkbox/indicator/CheckboxIndicatorDataAttributes.ts +58 -0
  56. package/src/checkbox/root/CheckboxRoot.tsrx +516 -0
  57. package/src/checkbox/root/CheckboxRootContext.ts +19 -0
  58. package/src/checkbox/root/CheckboxRootDataAttributes.ts +48 -0
  59. package/src/checkbox/utils/getCheckboxStateAttributesMapping.ts +24 -0
  60. package/src/checkbox-group/CheckboxGroup.tsrx +229 -0
  61. package/src/checkbox-group/CheckboxGroupContext.ts +33 -0
  62. package/src/checkbox-group/CheckboxGroupDataAttributes.ts +4 -0
  63. package/src/checkbox-group/index.ts +2 -0
  64. package/src/checkbox-group/useCheckboxGroupParent.ts +176 -0
  65. package/src/collapsible/index.parts.ts +3 -0
  66. package/src/collapsible/index.ts +12 -0
  67. package/src/collapsible/panel/CollapsiblePanel.tsrx +168 -0
  68. package/src/collapsible/panel/CollapsiblePanelCssVars.ts +10 -0
  69. package/src/collapsible/panel/CollapsiblePanelDataAttributes.ts +18 -0
  70. package/src/collapsible/panel/useCollapsiblePanel.ts +577 -0
  71. package/src/collapsible/root/CollapsibleRoot.tsrx +116 -0
  72. package/src/collapsible/root/CollapsibleRootContext.ts +25 -0
  73. package/src/collapsible/root/CollapsibleRootDataAttributes.ts +18 -0
  74. package/src/collapsible/root/stateAttributesMapping.ts +9 -0
  75. package/src/collapsible/root/useCollapsibleRoot.ts +121 -0
  76. package/src/collapsible/trigger/CollapsibleTrigger.tsrx +78 -0
  77. package/src/collapsible/trigger/CollapsibleTriggerDataAttributes.ts +4 -0
  78. package/src/combobox/arrow/ComboboxArrow.tsrx +72 -0
  79. package/src/combobox/arrow/ComboboxArrowDataAttributes.ts +24 -0
  80. package/src/combobox/backdrop/ComboboxBackdrop.tsrx +75 -0
  81. package/src/combobox/backdrop/ComboboxBackdropDataAttributes.ts +18 -0
  82. package/src/combobox/chip/ComboboxChip.tsrx +150 -0
  83. package/src/combobox/chip/ComboboxChipContext.ts +19 -0
  84. package/src/combobox/chip-remove/ComboboxChipRemove.tsrx +138 -0
  85. package/src/combobox/chips/ComboboxChips.tsrx +78 -0
  86. package/src/combobox/chips/ComboboxChipsContext.ts +17 -0
  87. package/src/combobox/clear/ComboboxClear.tsrx +178 -0
  88. package/src/combobox/clear/ComboboxClearDataAttributes.ts +25 -0
  89. package/src/combobox/collection/ComboboxCollection.tsrx +34 -0
  90. package/src/combobox/collection/GroupCollectionContext.tsrx +31 -0
  91. package/src/combobox/empty/ComboboxEmpty.tsrx +58 -0
  92. package/src/combobox/group/ComboboxGroup.tsrx +74 -0
  93. package/src/combobox/group/ComboboxGroupContext.ts +27 -0
  94. package/src/combobox/group-label/ComboboxGroupLabel.tsrx +52 -0
  95. package/src/combobox/icon/ComboboxIcon.tsrx +41 -0
  96. package/src/combobox/index.parts.ts +31 -0
  97. package/src/combobox/index.ts +36 -0
  98. package/src/combobox/input/ComboboxInput.tsrx +507 -0
  99. package/src/combobox/input/ComboboxInputDataAttributes.ts +55 -0
  100. package/src/combobox/input-group/ComboboxInputGroup.tsrx +110 -0
  101. package/src/combobox/input-group/ComboboxInputGroupDataAttributes.ts +53 -0
  102. package/src/combobox/item/ComboboxItem.tsrx +328 -0
  103. package/src/combobox/item/ComboboxItemContext.ts +20 -0
  104. package/src/combobox/item/ComboboxItemDataAttributes.ts +12 -0
  105. package/src/combobox/item-indicator/ComboboxItemIndicator.tsrx +109 -0
  106. package/src/combobox/item-indicator/ComboboxItemIndicatorDataAttributes.ts +10 -0
  107. package/src/combobox/items/createItems.ts +168 -0
  108. package/src/combobox/items/itemCollection.ts +67 -0
  109. package/src/combobox/label/ComboboxLabel.tsrx +88 -0
  110. package/src/combobox/list/ComboboxList.tsrx +152 -0
  111. package/src/combobox/popup/ComboboxPopup.tsrx +214 -0
  112. package/src/combobox/popup/ComboboxPopupDataAttributes.ts +36 -0
  113. package/src/combobox/portal/ComboboxPortal.tsrx +56 -0
  114. package/src/combobox/portal/ComboboxPortalContext.tsrx +12 -0
  115. package/src/combobox/positioner/ComboboxPositioner.tsrx +172 -0
  116. package/src/combobox/positioner/ComboboxPositionerContext.tsrx +30 -0
  117. package/src/combobox/positioner/ComboboxPositionerCssVars.ts +25 -0
  118. package/src/combobox/positioner/ComboboxPositionerDataAttributes.ts +28 -0
  119. package/src/combobox/root/AriaCombobox.tsrx +1970 -0
  120. package/src/combobox/root/ComboboxRoot.tsrx +183 -0
  121. package/src/combobox/root/ComboboxRootContext.tsrx +66 -0
  122. package/src/combobox/root/utils/constants.ts +5 -0
  123. package/src/combobox/root/utils/index.ts +68 -0
  124. package/src/combobox/root/utils/useFilter.ts +50 -0
  125. package/src/combobox/root/utils/useFilteredItems.ts +11 -0
  126. package/src/combobox/row/ComboboxRow.tsrx +37 -0
  127. package/src/combobox/row/ComboboxRowContext.ts +9 -0
  128. package/src/combobox/separator/ComboboxSeparator.tsrx +37 -0
  129. package/src/combobox/status/ComboboxStatus.tsrx +49 -0
  130. package/src/combobox/store.ts +206 -0
  131. package/src/combobox/trigger/ComboboxTrigger.tsrx +302 -0
  132. package/src/combobox/trigger/ComboboxTriggerDataAttributes.ts +59 -0
  133. package/src/combobox/utils/ComboboxInternalDismissButton.tsrx +47 -0
  134. package/src/combobox/utils/handleInputPress.ts +38 -0
  135. package/src/combobox/utils/parts.ts +59 -0
  136. package/src/combobox/utils/stateAttributesMapping.ts +19 -0
  137. package/src/combobox/utils/useInitialLiveRegionTextMutation.ts +66 -0
  138. package/src/combobox/value/ComboboxValue.tsrx +65 -0
  139. package/src/context-menu/index.parts.ts +21 -0
  140. package/src/context-menu/index.ts +66 -0
  141. package/src/context-menu/positioner/ContextMenuPositioner.tsrx +119 -0
  142. package/src/context-menu/positioner/ContextMenuPositionerCssVars.ts +1 -0
  143. package/src/context-menu/positioner/ContextMenuPositionerDataAttributes.ts +1 -0
  144. package/src/context-menu/root/ContextMenuRoot.tsrx +98 -0
  145. package/src/context-menu/root/ContextMenuRootContext.ts +34 -0
  146. package/src/context-menu/trigger/ContextMenuTrigger.tsrx +237 -0
  147. package/src/context-menu/trigger/ContextMenuTriggerDataAttributes.ts +10 -0
  148. package/src/csp-provider/CSPProvider.tsrx +43 -0
  149. package/src/csp-provider/index.parts.ts +1 -0
  150. package/src/csp-provider/index.ts +3 -0
  151. package/src/dialog/backdrop/DialogBackdrop.tsrx +76 -0
  152. package/src/dialog/backdrop/DialogBackdropDataAttributes.ts +18 -0
  153. package/src/dialog/close/DialogClose.tsrx +67 -0
  154. package/src/dialog/close/DialogCloseDataAttributes.ts +4 -0
  155. package/src/dialog/description/DialogDescription.tsrx +41 -0
  156. package/src/dialog/index.parts.ts +10 -0
  157. package/src/dialog/index.ts +14 -0
  158. package/src/dialog/popup/DialogPopup.tsrx +170 -0
  159. package/src/dialog/popup/DialogPopupCssVars.ts +5 -0
  160. package/src/dialog/popup/DialogPopupDataAttributes.ts +26 -0
  161. package/src/dialog/portal/DialogPortal.tsrx +63 -0
  162. package/src/dialog/portal/DialogPortalContext.ts +13 -0
  163. package/src/dialog/root/DialogRoot.tsrx +117 -0
  164. package/src/dialog/root/DialogRootContext.ts +20 -0
  165. package/src/dialog/root/useDialogRoot.ts +128 -0
  166. package/src/dialog/root/useRenderDialogRoot.tsrx +108 -0
  167. package/src/dialog/store/DialogHandle.ts +83 -0
  168. package/src/dialog/store/DialogStore.ts +149 -0
  169. package/src/dialog/title/DialogTitle.tsrx +41 -0
  170. package/src/dialog/trigger/DialogTrigger.tsrx +142 -0
  171. package/src/dialog/trigger/DialogTriggerDataAttributes.ts +10 -0
  172. package/src/dialog/utils/stateAttributesMapping.ts +22 -0
  173. package/src/dialog/viewport/DialogViewport.tsrx +89 -0
  174. package/src/dialog/viewport/DialogViewportDataAttributes.ts +26 -0
  175. package/src/direction-provider/DirectionProvider.tsrx +37 -0
  176. package/src/direction-provider/index.parts.ts +5 -0
  177. package/src/direction-provider/index.ts +2 -0
  178. package/src/drawer/backdrop/DrawerBackdrop.tsrx +81 -0
  179. package/src/drawer/backdrop/DrawerBackdropCssVars.ts +5 -0
  180. package/src/drawer/backdrop/DrawerBackdropDataAttributes.ts +18 -0
  181. package/src/drawer/close/DrawerClose.tsrx +31 -0
  182. package/src/drawer/content/DrawerContent.tsrx +37 -0
  183. package/src/drawer/content/drawerContentAttribute.ts +1 -0
  184. package/src/drawer/description/DrawerDescription.tsrx +25 -0
  185. package/src/drawer/handle.ts +22 -0
  186. package/src/drawer/indent/DrawerIndent.tsrx +104 -0
  187. package/src/drawer/indent-background/DrawerIndentBackground.tsrx +61 -0
  188. package/src/drawer/index.parts.ts +16 -0
  189. package/src/drawer/index.ts +17 -0
  190. package/src/drawer/popup/DrawerPopup.tsrx +485 -0
  191. package/src/drawer/popup/DrawerPopupCssVars.ts +35 -0
  192. package/src/drawer/popup/DrawerPopupDataAttributes.ts +43 -0
  193. package/src/drawer/portal/DrawerPortal.tsrx +39 -0
  194. package/src/drawer/provider/DrawerProvider.tsrx +117 -0
  195. package/src/drawer/provider/DrawerProviderContext.ts +29 -0
  196. package/src/drawer/root/DrawerRoot.tsrx +478 -0
  197. package/src/drawer/root/DrawerRootContext.ts +115 -0
  198. package/src/drawer/root/useDrawerSnapPoints.ts +198 -0
  199. package/src/drawer/swipe-area/DrawerSwipeArea.tsrx +528 -0
  200. package/src/drawer/swipe-area/DrawerSwipeAreaDataAttributes.ts +23 -0
  201. package/src/drawer/title/DrawerTitle.tsrx +25 -0
  202. package/src/drawer/trigger/DrawerTrigger.tsrx +53 -0
  203. package/src/drawer/viewport/DrawerViewport.tsrx +1237 -0
  204. package/src/drawer/viewport/DrawerViewportContext.tsrx +15 -0
  205. package/src/drawer/viewport/DrawerViewportCssVars.ts +6 -0
  206. package/src/drawer/viewport/DrawerViewportDataAttributes.ts +22 -0
  207. package/src/drawer/virtual-keyboard-provider/DrawerVirtualKeyboardContext.tsrx +19 -0
  208. package/src/drawer/virtual-keyboard-provider/DrawerVirtualKeyboardProvider.tsrx +858 -0
  209. package/src/field/control/FieldControl.tsrx +241 -0
  210. package/src/field/control/FieldControlDataAttributes.ts +28 -0
  211. package/src/field/description/FieldDescription.tsrx +67 -0
  212. package/src/field/description/FieldDescriptionDataAttributes.ts +28 -0
  213. package/src/field/error/FieldError.tsrx +160 -0
  214. package/src/field/error/FieldErrorDataAttributes.ts +38 -0
  215. package/src/field/index.parts.ts +9 -0
  216. package/src/field/index.ts +9 -0
  217. package/src/field/item/FieldItem.tsrx +66 -0
  218. package/src/field/item/FieldItemContext.ts +15 -0
  219. package/src/field/item/FieldItemDataAttributes.ts +28 -0
  220. package/src/field/label/FieldLabel.tsrx +107 -0
  221. package/src/field/label/FieldLabelDataAttributes.ts +28 -0
  222. package/src/field/root/FieldRoot.tsrx +336 -0
  223. package/src/field/root/FieldRootDataAttributes.ts +28 -0
  224. package/src/field/root/useFieldValidation.ts +418 -0
  225. package/src/field/utils/getCombinedFieldValidityData.ts +18 -0
  226. package/src/field/validity/FieldValidity.tsrx +69 -0
  227. package/src/fieldset/index.parts.ts +2 -0
  228. package/src/fieldset/index.ts +4 -0
  229. package/src/fieldset/legend/FieldsetLegend.tsrx +51 -0
  230. package/src/fieldset/root/FieldsetRoot.tsrx +74 -0
  231. package/src/fieldset/root/FieldsetRootContext.ts +23 -0
  232. package/src/floating-ui-react/components/FloatingDelayGroup.tsrx +281 -0
  233. package/src/floating-ui-react/components/FloatingFocusManager.tsrx +1004 -0
  234. package/src/floating-ui-react/components/FloatingPortal.tsrx +319 -0
  235. package/src/floating-ui-react/components/FloatingRootStore.ts +136 -0
  236. package/src/floating-ui-react/components/FloatingTree.tsrx +95 -0
  237. package/src/floating-ui-react/components/FloatingTreeStore.ts +24 -0
  238. package/src/floating-ui-react/hooks/gridNavigation.ts +50 -0
  239. package/src/floating-ui-react/hooks/useClick.ts +229 -0
  240. package/src/floating-ui-react/hooks/useClientPoint.ts +261 -0
  241. package/src/floating-ui-react/hooks/useDismiss.ts +808 -0
  242. package/src/floating-ui-react/hooks/useFloating.ts +205 -0
  243. package/src/floating-ui-react/hooks/useFloatingRootContext.ts +84 -0
  244. package/src/floating-ui-react/hooks/useFocus.ts +253 -0
  245. package/src/floating-ui-react/hooks/useHover.ts +468 -0
  246. package/src/floating-ui-react/hooks/useHoverFloatingInteraction.ts +274 -0
  247. package/src/floating-ui-react/hooks/useHoverInteractionSharedState.ts +132 -0
  248. package/src/floating-ui-react/hooks/useHoverReferenceInteraction.ts +523 -0
  249. package/src/floating-ui-react/hooks/useHoverShared.ts +72 -0
  250. package/src/floating-ui-react/hooks/useListNavigation.ts +941 -0
  251. package/src/floating-ui-react/hooks/useSyncedFloatingRootContext.ts +115 -0
  252. package/src/floating-ui-react/hooks/useTypeahead.ts +248 -0
  253. package/src/floating-ui-react/index.ts +48 -0
  254. package/src/floating-ui-react/middleware/arrow.ts +128 -0
  255. package/src/floating-ui-react/middleware/positioning.ts +28 -0
  256. package/src/floating-ui-react/safePolygon.ts +451 -0
  257. package/src/floating-ui-react/types.ts +206 -0
  258. package/src/floating-ui-react/utils/composite.ts +528 -0
  259. package/src/floating-ui-react/utils/constants.ts +10 -0
  260. package/src/floating-ui-react/utils/createAttribute.ts +3 -0
  261. package/src/floating-ui-react/utils/createEventEmitter.ts +19 -0
  262. package/src/floating-ui-react/utils/element.ts +96 -0
  263. package/src/floating-ui-react/utils/enqueueFocus.ts +37 -0
  264. package/src/floating-ui-react/utils/event.ts +60 -0
  265. package/src/floating-ui-react/utils/getEmptyRootContext.ts +17 -0
  266. package/src/floating-ui-react/utils/markOthers.ts +219 -0
  267. package/src/floating-ui-react/utils/nodes.ts +54 -0
  268. package/src/floating-ui-react/utils/tabbable.ts +283 -0
  269. package/src/floating-ui-react/utils.ts +5 -0
  270. package/src/form/Form.tsrx +248 -0
  271. package/src/form/index.ts +3 -0
  272. package/src/global.d.ts +9 -0
  273. package/src/index.ts +45 -39
  274. package/src/input/Input.tsrx +44 -0
  275. package/src/input/InputDataAttributes.ts +28 -0
  276. package/src/input/index.ts +3 -0
  277. package/src/internals/PrehydrationScript.tsrx +59 -0
  278. package/src/internals/RequestQueue.ts +126 -0
  279. package/src/internals/TimeoutManager.ts +29 -0
  280. package/src/internals/TransitionStatusDataAttributes.ts +9 -0
  281. package/src/internals/composite/composite.ts +174 -0
  282. package/src/internals/composite/constants.ts +1 -0
  283. package/src/internals/composite/index.ts +19 -0
  284. package/src/internals/composite/item/CompositeItem.tsrx +57 -0
  285. package/src/internals/composite/item/useCompositeItem.ts +50 -0
  286. package/src/internals/composite/list/CompositeList.tsrx +325 -0
  287. package/src/internals/composite/list/CompositeListContext.ts +28 -0
  288. package/src/internals/composite/list/useCompositeListItem.ts +100 -0
  289. package/src/internals/composite/root/CompositeRoot.tsrx +138 -0
  290. package/src/internals/composite/root/CompositeRootContext.ts +33 -0
  291. package/src/internals/composite/root/gridNavigation.ts +127 -0
  292. package/src/internals/composite/root/useCompositeRoot.ts +378 -0
  293. package/src/internals/constants.ts +41 -0
  294. package/src/internals/createBaseUIEventDetails.ts +166 -0
  295. package/src/internals/csp-context/CSPContext.tsrx +17 -0
  296. package/src/internals/csp-context/index.ts +2 -0
  297. package/src/internals/direction-context/DirectionContext.tsrx +16 -0
  298. package/src/internals/direction-context/index.ts +5 -0
  299. package/src/internals/field-constants/constants.ts +44 -0
  300. package/src/internals/field-constants/index.ts +6 -0
  301. package/src/internals/field-register-control/index.ts +6 -0
  302. package/src/internals/field-register-control/useFieldControlRegistration.ts +185 -0
  303. package/src/internals/field-register-control/useRegisterFieldControl.ts +47 -0
  304. package/src/internals/field-root-context/FieldRootContext.ts +79 -0
  305. package/src/internals/field-root-context/index.ts +2 -0
  306. package/src/internals/filter.ts +82 -0
  307. package/src/internals/form-context/FormContext.ts +51 -0
  308. package/src/internals/form-context/index.ts +2 -0
  309. package/src/internals/getDisabledMountTransitionStyles.ts +10 -0
  310. package/src/internals/getStateAttributesProps.ts +32 -0
  311. package/src/internals/itemEquality.ts +134 -0
  312. package/src/internals/labelable-provider/LabelableContext.ts +49 -0
  313. package/src/internals/labelable-provider/LabelableProvider.tsrx +120 -0
  314. package/src/internals/labelable-provider/index.ts +6 -0
  315. package/src/internals/labelable-provider/useAriaLabelledBy.ts +73 -0
  316. package/src/internals/labelable-provider/useLabel.ts +113 -0
  317. package/src/internals/labelable-provider/useLabelableId.ts +101 -0
  318. package/src/internals/noop.ts +1 -0
  319. package/src/internals/prehydrationScript.stub.ts +6 -0
  320. package/src/internals/reason-parts.ts +42 -0
  321. package/src/internals/reasons.ts +5 -0
  322. package/src/internals/resolveValueLabel.tsrx +158 -0
  323. package/src/internals/serializeValue.ts +13 -0
  324. package/src/internals/stateAttributesMapping.ts +20 -0
  325. package/src/internals/temporal/index.ts +2 -0
  326. package/src/internals/temporal/temporal-adapter.ts +382 -0
  327. package/src/internals/temporal/temporal.ts +49 -0
  328. package/src/internals/temporal-adapter-date-fns/TemporalAdapterDateFns.ts +474 -0
  329. package/src/internals/temporal-adapter-date-fns/index.ts +1 -0
  330. package/src/internals/temporal-adapter-luxon/TemporalAdapterLuxon.ts +380 -0
  331. package/src/internals/temporal-adapter-luxon/index.ts +1 -0
  332. package/src/internals/types.ts +97 -0
  333. package/src/internals/use-button/index.ts +1 -0
  334. package/src/internals/use-button/useButton.ts +309 -0
  335. package/src/internals/useAnchorPositioning.ts +828 -0
  336. package/src/internals/useAnimationsFinished.ts +161 -0
  337. package/src/internals/useBaseUiId.ts +12 -0
  338. package/src/internals/useOpenChangeComplete.tsrx +56 -0
  339. package/src/internals/usePressAndHold.ts +287 -0
  340. package/src/internals/useRenderElement.tsrx +284 -0
  341. package/src/internals/useTransitionStatus.ts +98 -0
  342. package/src/internals/useValueChanged.ts +18 -0
  343. package/src/menu/arrow/MenuArrow.tsrx +71 -0
  344. package/src/menu/arrow/MenuArrowDataAttributes.ts +24 -0
  345. package/src/menu/backdrop/MenuBackdrop.tsrx +75 -0
  346. package/src/menu/backdrop/MenuBackdropDataAttributes.ts +18 -0
  347. package/src/menu/checkbox-item/MenuCheckboxItem.tsrx +184 -0
  348. package/src/menu/checkbox-item/MenuCheckboxItemContext.ts +24 -0
  349. package/src/menu/checkbox-item/MenuCheckboxItemDataAttributes.ts +16 -0
  350. package/src/menu/checkbox-item-indicator/MenuCheckboxItemIndicator.tsrx +96 -0
  351. package/src/menu/checkbox-item-indicator/MenuCheckboxItemIndicatorDataAttributes.ts +22 -0
  352. package/src/menu/group/MenuGroup.tsrx +47 -0
  353. package/src/menu/group/MenuGroupContext.ts +18 -0
  354. package/src/menu/group-label/MenuGroupLabel.tsrx +51 -0
  355. package/src/menu/index.parts.ts +21 -0
  356. package/src/menu/index.ts +24 -0
  357. package/src/menu/item/MenuItem.tsrx +107 -0
  358. package/src/menu/item/MenuItemDataAttributes.ts +8 -0
  359. package/src/menu/item/useMenuItem.ts +142 -0
  360. package/src/menu/item/useMenuItemCommonProps.ts +139 -0
  361. package/src/menu/link-item/MenuLinkItem.tsrx +106 -0
  362. package/src/menu/link-item/MenuLinkItemDataAttributes.ts +4 -0
  363. package/src/menu/popup/MenuPopup.tsrx +199 -0
  364. package/src/menu/popup/MenuPopupDataAttributes.ts +33 -0
  365. package/src/menu/portal/MenuPortal.tsrx +60 -0
  366. package/src/menu/portal/MenuPortalContext.ts +13 -0
  367. package/src/menu/positioner/MenuPositioner.tsrx +378 -0
  368. package/src/menu/positioner/MenuPositionerContext.ts +25 -0
  369. package/src/menu/positioner/MenuPositionerCssVars.ts +37 -0
  370. package/src/menu/positioner/MenuPositionerDataAttributes.ts +24 -0
  371. package/src/menu/radio-group/MenuRadioGroup.tsrx +129 -0
  372. package/src/menu/radio-group/MenuRadioGroupContext.ts +25 -0
  373. package/src/menu/radio-item/MenuRadioItem.tsrx +156 -0
  374. package/src/menu/radio-item/MenuRadioItemContext.ts +24 -0
  375. package/src/menu/radio-item/MenuRadioItemDataAttributes.ts +16 -0
  376. package/src/menu/radio-item-indicator/MenuRadioItemIndicator.tsrx +96 -0
  377. package/src/menu/radio-item-indicator/MenuRadioItemIndicatorDataAttributes.ts +22 -0
  378. package/src/menu/root/MenuRoot.tsrx +818 -0
  379. package/src/menu/root/MenuRootContext.ts +25 -0
  380. package/src/menu/store/MenuHandle.ts +54 -0
  381. package/src/menu/store/MenuStore.ts +234 -0
  382. package/src/menu/submenu-root/MenuSubmenuRoot.tsrx +64 -0
  383. package/src/menu/submenu-root/MenuSubmenuRootContext.ts +16 -0
  384. package/src/menu/submenu-trigger/MenuSubmenuTrigger.tsrx +278 -0
  385. package/src/menu/submenu-trigger/MenuSubmenuTriggerDataAttributes.ts +14 -0
  386. package/src/menu/trigger/MenuTrigger.tsrx +395 -0
  387. package/src/menu/trigger/MenuTriggerDataAttributes.ts +14 -0
  388. package/src/menu/utils/findRootOwnerId.ts +13 -0
  389. package/src/menu/utils/stateAttributesMapping.ts +17 -0
  390. package/src/menu/utils/types.ts +8 -0
  391. package/src/menu/viewport/MenuViewport.tsrx +75 -0
  392. package/src/menu/viewport/MenuViewportCssVars.ts +12 -0
  393. package/src/menu/viewport/MenuViewportDataAttributes.ts +24 -0
  394. package/src/menubar/Menubar.tsrx +173 -0
  395. package/src/menubar/MenubarContext.ts +31 -0
  396. package/src/menubar/MenubarDataAttributes.ts +13 -0
  397. package/src/menubar/index.ts +3 -0
  398. package/src/merge-props/index.ts +1 -0
  399. package/src/merge-props/mergeProps.ts +302 -0
  400. package/src/meter/index.parts.ts +5 -0
  401. package/src/meter/index.ts +7 -0
  402. package/src/meter/indicator/MeterIndicator.tsrx +46 -0
  403. package/src/meter/label/MeterLabel.tsrx +46 -0
  404. package/src/meter/root/MeterRoot.tsrx +129 -0
  405. package/src/meter/root/MeterRootContext.ts +26 -0
  406. package/src/meter/track/MeterTrack.tsrx +34 -0
  407. package/src/meter/value/MeterValue.tsrx +51 -0
  408. package/src/navigation-menu/arrow/NavigationMenuArrow.tsrx +77 -0
  409. package/src/navigation-menu/arrow/NavigationMenuArrowDataAttributes.ts +24 -0
  410. package/src/navigation-menu/backdrop/NavigationMenuBackdrop.tsrx +69 -0
  411. package/src/navigation-menu/backdrop/NavigationMenuBackdropDataAttributes.ts +18 -0
  412. package/src/navigation-menu/content/NavigationMenuContent.tsrx +208 -0
  413. package/src/navigation-menu/content/NavigationMenuContentDataAttributes.ts +23 -0
  414. package/src/navigation-menu/icon/NavigationMenuIcon.tsrx +56 -0
  415. package/src/navigation-menu/icon/NavigationMenuIconDataAttributes.ts +6 -0
  416. package/src/navigation-menu/index.parts.ts +13 -0
  417. package/src/navigation-menu/index.ts +15 -0
  418. package/src/navigation-menu/item/NavigationMenuItem.tsrx +59 -0
  419. package/src/navigation-menu/item/NavigationMenuItemContext.ts +21 -0
  420. package/src/navigation-menu/link/NavigationMenuLink.tsrx +108 -0
  421. package/src/navigation-menu/link/NavigationMenuLinkDataAttributes.ts +4 -0
  422. package/src/navigation-menu/list/NavigationMenuDismissContext.ts +12 -0
  423. package/src/navigation-menu/list/NavigationMenuList.tsrx +144 -0
  424. package/src/navigation-menu/popup/NavigationMenuPopup.tsrx +106 -0
  425. package/src/navigation-menu/popup/NavigationMenuPopupCssVars.ts +10 -0
  426. package/src/navigation-menu/popup/NavigationMenuPopupDataAttributes.ts +32 -0
  427. package/src/navigation-menu/portal/NavigationMenuPortal.tsrx +58 -0
  428. package/src/navigation-menu/portal/NavigationMenuPortalContext.ts +13 -0
  429. package/src/navigation-menu/positioner/NavigationMenuPositioner.tsrx +219 -0
  430. package/src/navigation-menu/positioner/NavigationMenuPositionerContext.ts +26 -0
  431. package/src/navigation-menu/positioner/NavigationMenuPositionerCssVars.ts +35 -0
  432. package/src/navigation-menu/positioner/NavigationMenuPositionerDataAttributes.ts +28 -0
  433. package/src/navigation-menu/root/NavigationMenuRoot.tsrx +439 -0
  434. package/src/navigation-menu/root/NavigationMenuRootContext.ts +84 -0
  435. package/src/navigation-menu/trigger/NavigationMenuTrigger.tsrx +846 -0
  436. package/src/navigation-menu/trigger/NavigationMenuTriggerDataAttributes.ts +14 -0
  437. package/src/navigation-menu/utils/constants.ts +3 -0
  438. package/src/navigation-menu/utils/isOutsideMenuEvent.ts +36 -0
  439. package/src/navigation-menu/utils/setSharedFixedSize.ts +20 -0
  440. package/src/navigation-menu/utils/useNavigationMenuAnchorPositioning.ts +18 -0
  441. package/src/navigation-menu/viewport/NavigationMenuViewport.tsrx +146 -0
  442. package/src/number-field/decrement/NumberFieldDecrement.tsrx +30 -0
  443. package/src/number-field/decrement/NumberFieldDecrementDataAttributes.ts +40 -0
  444. package/src/number-field/group/NumberFieldGroup.tsrx +42 -0
  445. package/src/number-field/group/NumberFieldGroupDataAttributes.ts +40 -0
  446. package/src/number-field/increment/NumberFieldIncrement.tsrx +30 -0
  447. package/src/number-field/increment/NumberFieldIncrementDataAttributes.ts +40 -0
  448. package/src/number-field/index.parts.ts +7 -0
  449. package/src/number-field/index.ts +9 -0
  450. package/src/number-field/input/NumberFieldInput.tsrx +488 -0
  451. package/src/number-field/input/NumberFieldInputDataAttributes.ts +40 -0
  452. package/src/number-field/root/NumberFieldRoot.tsrx +735 -0
  453. package/src/number-field/root/NumberFieldRootContext.ts +52 -0
  454. package/src/number-field/root/NumberFieldRootDataAttributes.ts +40 -0
  455. package/src/number-field/root/useNumberFieldStepperButton.ts +191 -0
  456. package/src/number-field/scrub-area/NumberFieldScrubArea.tsrx +395 -0
  457. package/src/number-field/scrub-area/NumberFieldScrubAreaContext.ts +24 -0
  458. package/src/number-field/scrub-area/NumberFieldScrubAreaDataAttributes.ts +40 -0
  459. package/src/number-field/scrub-area-cursor/NumberFieldScrubAreaCursor.tsrx +73 -0
  460. package/src/number-field/scrub-area-cursor/NumberFieldScrubAreaCursorDataAttributes.ts +40 -0
  461. package/src/number-field/utils/constants.ts +2 -0
  462. package/src/number-field/utils/getViewportRect.ts +34 -0
  463. package/src/number-field/utils/parse.ts +221 -0
  464. package/src/number-field/utils/stateAttributesMapping.ts +9 -0
  465. package/src/number-field/utils/types.ts +27 -0
  466. package/src/number-field/utils/validate.ts +136 -0
  467. package/src/otp-field/index.parts.ts +3 -0
  468. package/src/otp-field/index.ts +4 -0
  469. package/src/otp-field/input/OTPFieldInput.tsrx +356 -0
  470. package/src/otp-field/input/OTPFieldInputDataAttributes.ts +40 -0
  471. package/src/otp-field/root/OTPFieldRoot.tsrx +679 -0
  472. package/src/otp-field/root/OTPFieldRootContext.ts +58 -0
  473. package/src/otp-field/root/OTPFieldRootDataAttributes.ts +40 -0
  474. package/src/otp-field/utils/otp.ts +118 -0
  475. package/src/otp-field/utils/stateAttributesMapping.ts +16 -0
  476. package/src/popover/arrow/PopoverArrow.tsrx +69 -0
  477. package/src/popover/arrow/PopoverArrowDataAttributes.ts +24 -0
  478. package/src/popover/backdrop/PopoverBackdrop.tsrx +71 -0
  479. package/src/popover/backdrop/PopoverBackdropDataAttributes.ts +18 -0
  480. package/src/popover/close/PopoverClose.tsrx +65 -0
  481. package/src/popover/description/PopoverDescription.tsrx +46 -0
  482. package/src/popover/index.parts.ts +15 -0
  483. package/src/popover/index.ts +16 -0
  484. package/src/popover/popup/PopoverPopup.tsrx +188 -0
  485. package/src/popover/popup/PopoverPopupCssVars.ts +8 -0
  486. package/src/popover/popup/PopoverPopupDataAttributes.ts +33 -0
  487. package/src/popover/portal/PopoverPortal.tsrx +54 -0
  488. package/src/popover/portal/PopoverPortalContext.ts +13 -0
  489. package/src/popover/positioner/PopoverPositioner.tsrx +196 -0
  490. package/src/popover/positioner/PopoverPositionerContext.ts +28 -0
  491. package/src/popover/positioner/PopoverPositionerCssVars.ts +37 -0
  492. package/src/popover/positioner/PopoverPositionerDataAttributes.ts +24 -0
  493. package/src/popover/root/PopoverRoot.tsrx +262 -0
  494. package/src/popover/root/PopoverRootContext.ts +20 -0
  495. package/src/popover/store/PopoverHandle.ts +54 -0
  496. package/src/popover/store/PopoverStore.ts +229 -0
  497. package/src/popover/title/PopoverTitle.tsrx +46 -0
  498. package/src/popover/trigger/PopoverTrigger.tsrx +233 -0
  499. package/src/popover/trigger/PopoverTriggerDataAttributes.ts +14 -0
  500. package/src/popover/utils/constants.ts +1 -0
  501. package/src/popover/viewport/PopoverViewport.tsrx +75 -0
  502. package/src/popover/viewport/PopoverViewportCssVars.ts +12 -0
  503. package/src/popover/viewport/PopoverViewportDataAttributes.ts +24 -0
  504. package/src/preview-card/arrow/PreviewCardArrow.tsrx +70 -0
  505. package/src/preview-card/arrow/PreviewCardArrowDataAttributes.ts +24 -0
  506. package/src/preview-card/backdrop/PreviewCardBackdrop.tsrx +73 -0
  507. package/src/preview-card/backdrop/PreviewCardBackdropDataAttributes.ts +18 -0
  508. package/src/preview-card/index.parts.ts +12 -0
  509. package/src/preview-card/index.ts +16 -0
  510. package/src/preview-card/popup/PreviewCardPopup.tsrx +104 -0
  511. package/src/preview-card/popup/PreviewCardPopupDataAttributes.ts +28 -0
  512. package/src/preview-card/portal/PreviewCardPortal.tsrx +59 -0
  513. package/src/preview-card/portal/PreviewCardPortalContext.ts +13 -0
  514. package/src/preview-card/positioner/PreviewCardPositioner.tsrx +145 -0
  515. package/src/preview-card/positioner/PreviewCardPositionerContext.ts +24 -0
  516. package/src/preview-card/positioner/PreviewCardPositionerCssVars.ts +37 -0
  517. package/src/preview-card/positioner/PreviewCardPositionerDataAttributes.ts +24 -0
  518. package/src/preview-card/root/PreviewCardContext.ts +23 -0
  519. package/src/preview-card/root/PreviewCardRoot.tsrx +210 -0
  520. package/src/preview-card/store/PreviewCardHandle.ts +58 -0
  521. package/src/preview-card/store/PreviewCardStore.ts +140 -0
  522. package/src/preview-card/trigger/PreviewCardTrigger.tsrx +148 -0
  523. package/src/preview-card/trigger/PreviewCardTriggerDataAttributes.ts +6 -0
  524. package/src/preview-card/utils/constants.ts +2 -0
  525. package/src/preview-card/viewport/PreviewCardViewport.tsrx +78 -0
  526. package/src/preview-card/viewport/PreviewCardViewportCssVars.ts +12 -0
  527. package/src/preview-card/viewport/PreviewCardViewportDataAttributes.ts +24 -0
  528. package/src/progress/index.parts.ts +7 -0
  529. package/src/progress/index.ts +7 -0
  530. package/src/progress/indicator/ProgressIndicator.tsrx +59 -0
  531. package/src/progress/indicator/ProgressIndicatorDataAttributes.ts +12 -0
  532. package/src/progress/label/ProgressLabel.tsrx +51 -0
  533. package/src/progress/label/ProgressLabelDataAttributes.ts +12 -0
  534. package/src/progress/root/ProgressRoot.tsrx +154 -0
  535. package/src/progress/root/ProgressRootContext.tsrx +37 -0
  536. package/src/progress/root/ProgressRootDataAttributes.ts +12 -0
  537. package/src/progress/root/stateAttributesMapping.ts +18 -0
  538. package/src/progress/track/ProgressTrack.tsrx +42 -0
  539. package/src/progress/track/ProgressTrackDataAttributes.ts +12 -0
  540. package/src/progress/value/ProgressValue.tsrx +62 -0
  541. package/src/progress/value/ProgressValueDataAttributes.ts +12 -0
  542. package/src/radio/index.parts.ts +2 -0
  543. package/src/radio/index.ts +4 -0
  544. package/src/radio/indicator/RadioIndicator.tsrx +84 -0
  545. package/src/radio/indicator/RadioIndicatorDataAttributes.ts +54 -0
  546. package/src/radio/root/RadioRoot.tsrx +337 -0
  547. package/src/radio/root/RadioRootContext.ts +19 -0
  548. package/src/radio/root/RadioRootDataAttributes.ts +44 -0
  549. package/src/radio/utils/stateAttributesMapping.ts +20 -0
  550. package/src/radio-group/RadioGroup.tsrx +337 -0
  551. package/src/radio-group/RadioGroupContext.ts +29 -0
  552. package/src/radio-group/RadioGroupDataAttributes.ts +4 -0
  553. package/src/radio-group/index.ts +3 -0
  554. package/src/scroll-area/constants.ts +2 -0
  555. package/src/scroll-area/content/ScrollAreaContent.tsrx +90 -0
  556. package/src/scroll-area/content/ScrollAreaContentDataAttributes.ts +28 -0
  557. package/src/scroll-area/corner/ScrollAreaCorner.tsrx +54 -0
  558. package/src/scroll-area/index.parts.ts +6 -0
  559. package/src/scroll-area/index.ts +8 -0
  560. package/src/scroll-area/root/ScrollAreaRoot.tsrx +424 -0
  561. package/src/scroll-area/root/ScrollAreaRootContext.ts +61 -0
  562. package/src/scroll-area/root/ScrollAreaRootCssVars.ts +10 -0
  563. package/src/scroll-area/root/ScrollAreaRootDataAttributes.ts +28 -0
  564. package/src/scroll-area/root/stateAttributes.ts +15 -0
  565. package/src/scroll-area/scrollbar/ScrollAreaScrollbar.tsrx +275 -0
  566. package/src/scroll-area/scrollbar/ScrollAreaScrollbarContext.ts +19 -0
  567. package/src/scroll-area/scrollbar/ScrollAreaScrollbarCssVars.ts +10 -0
  568. package/src/scroll-area/scrollbar/ScrollAreaScrollbarDataAttributes.ts +37 -0
  569. package/src/scroll-area/thumb/ScrollAreaThumb.tsrx +80 -0
  570. package/src/scroll-area/thumb/ScrollAreaThumbDataAttributes.ts +9 -0
  571. package/src/scroll-area/utils/getOffset.ts +21 -0
  572. package/src/scroll-area/viewport/ScrollAreaViewport.tsrx +492 -0
  573. package/src/scroll-area/viewport/ScrollAreaViewportContext.ts +21 -0
  574. package/src/scroll-area/viewport/ScrollAreaViewportCssVars.ts +20 -0
  575. package/src/scroll-area/viewport/ScrollAreaViewportDataAttributes.ts +28 -0
  576. package/src/select/arrow/SelectArrow.tsrx +75 -0
  577. package/src/select/arrow/SelectArrowDataAttributes.ts +24 -0
  578. package/src/select/backdrop/SelectBackdrop.tsrx +77 -0
  579. package/src/select/backdrop/SelectBackdropDataAttributes.ts +18 -0
  580. package/src/select/group/SelectGroup.tsrx +52 -0
  581. package/src/select/group/SelectGroupContext.ts +20 -0
  582. package/src/select/group-label/SelectGroupLabel.tsrx +49 -0
  583. package/src/select/icon/SelectIcon.tsrx +51 -0
  584. package/src/select/icon/SelectIconDataAttributes.ts +6 -0
  585. package/src/select/index.parts.ts +19 -0
  586. package/src/select/index.ts +21 -0
  587. package/src/select/item/SelectItem.tsrx +291 -0
  588. package/src/select/item/SelectItemContext.ts +22 -0
  589. package/src/select/item/SelectItemDataAttributes.ts +12 -0
  590. package/src/select/item-indicator/SelectItemIndicator.tsrx +108 -0
  591. package/src/select/item-indicator/SelectItemIndicatorDataAttributes.ts +10 -0
  592. package/src/select/item-text/SelectItemText.tsrx +56 -0
  593. package/src/select/label/SelectLabel.tsrx +64 -0
  594. package/src/select/list/SelectList.tsrx +62 -0
  595. package/src/select/popup/SelectPopup.tsrx +596 -0
  596. package/src/select/popup/SelectPopupDataAttributes.ts +28 -0
  597. package/src/select/popup/utils.ts +13 -0
  598. package/src/select/portal/SelectPortal.tsrx +45 -0
  599. package/src/select/positioner/SelectPositioner.tsrx +268 -0
  600. package/src/select/positioner/SelectPositionerContext.ts +26 -0
  601. package/src/select/positioner/SelectPositionerCssVars.ts +25 -0
  602. package/src/select/positioner/SelectPositionerDataAttributes.ts +24 -0
  603. package/src/select/root/SelectRoot.tsrx +752 -0
  604. package/src/select/root/SelectRootContext.ts +57 -0
  605. package/src/select/scroll-arrow/SelectScrollArrow.tsrx +236 -0
  606. package/src/select/scroll-down-arrow/SelectScrollDownArrow.tsrx +37 -0
  607. package/src/select/scroll-down-arrow/SelectScrollDownArrowDataAttributes.ts +24 -0
  608. package/src/select/scroll-up-arrow/SelectScrollUpArrow.tsrx +37 -0
  609. package/src/select/scroll-up-arrow/SelectScrollUpArrowDataAttributes.ts +24 -0
  610. package/src/select/separator/SelectSeparator.tsrx +34 -0
  611. package/src/select/store.ts +155 -0
  612. package/src/select/trigger/SelectTrigger.tsrx +270 -0
  613. package/src/select/trigger/SelectTriggerDataAttributes.ts +55 -0
  614. package/src/select/value/SelectValue.tsrx +112 -0
  615. package/src/select/value/SelectValueDataAttributes.ts +4 -0
  616. package/src/separator/Separator.tsrx +49 -0
  617. package/src/separator/SeparatorDataAttributes.ts +5 -0
  618. package/src/separator/index.ts +3 -0
  619. package/src/slider/control/SliderControl.tsrx +540 -0
  620. package/src/slider/control/SliderControlDataAttributes.ts +33 -0
  621. package/src/slider/index.parts.ts +7 -0
  622. package/src/slider/index.ts +9 -0
  623. package/src/slider/indicator/SliderIndicator.tsrx +102 -0
  624. package/src/slider/indicator/SliderIndicatorDataAttributes.ts +33 -0
  625. package/src/slider/label/SliderLabel.tsrx +71 -0
  626. package/src/slider/root/SliderRoot.tsrx +610 -0
  627. package/src/slider/root/SliderRootContext.ts +115 -0
  628. package/src/slider/root/SliderRootDataAttributes.ts +33 -0
  629. package/src/slider/root/stateAttributesMapping.ts +15 -0
  630. package/src/slider/thumb/SliderThumb.tsrx +567 -0
  631. package/src/slider/thumb/SliderThumbDataAttributes.ts +37 -0
  632. package/src/slider/thumb/prehydrationScript.min.ts +5 -0
  633. package/src/slider/track/SliderTrack.tsrx +49 -0
  634. package/src/slider/track/SliderTrackDataAttributes.ts +33 -0
  635. package/src/slider/utils/asc.ts +3 -0
  636. package/src/slider/utils/getMidpoint.ts +4 -0
  637. package/src/slider/utils/getPushedThumbValues.ts +60 -0
  638. package/src/slider/utils/getSliderValue.ts +22 -0
  639. package/src/slider/utils/resolveThumbCollision.ts +154 -0
  640. package/src/slider/utils/roundValueToStep.ts +21 -0
  641. package/src/slider/utils/test-utils.ts +18 -0
  642. package/src/slider/utils/validateMinimumDistance.ts +17 -0
  643. package/src/slider/value/SliderValue.tsrx +82 -0
  644. package/src/slider/value/SliderValueDataAttributes.ts +33 -0
  645. package/src/switch/index.parts.ts +2 -0
  646. package/src/switch/index.ts +4 -0
  647. package/src/switch/root/SwitchRoot.tsrx +335 -0
  648. package/src/switch/root/SwitchRootContext.ts +19 -0
  649. package/src/switch/root/SwitchRootDataAttributes.ts +44 -0
  650. package/src/switch/stateAttributesMapping.ts +15 -0
  651. package/src/switch/thumb/SwitchThumb.tsrx +40 -0
  652. package/src/switch/thumb/SwitchThumbDataAttributes.ts +44 -0
  653. package/src/tabs/index.parts.ts +5 -0
  654. package/src/tabs/index.ts +21 -0
  655. package/src/tabs/indicator/TabsIndicator.tsrx +292 -0
  656. package/src/tabs/indicator/TabsIndicatorCssVars.ts +30 -0
  657. package/src/tabs/indicator/TabsIndicatorDataAttributes.ts +10 -0
  658. package/src/tabs/indicator/prehydrationScript.min.ts +5 -0
  659. package/src/tabs/list/TabsList.tsrx +153 -0
  660. package/src/tabs/list/TabsListContext.ts +23 -0
  661. package/src/tabs/list/TabsListDataAttributes.ts +10 -0
  662. package/src/tabs/panel/TabsPanel.tsrx +145 -0
  663. package/src/tabs/panel/TabsPanelDataAttributes.ts +28 -0
  664. package/src/tabs/root/TabsRoot.tsrx +477 -0
  665. package/src/tabs/root/TabsRootContext.ts +55 -0
  666. package/src/tabs/root/TabsRootDataAttributes.ts +10 -0
  667. package/src/tabs/root/stateAttributesMapping.ts +9 -0
  668. package/src/tabs/tab/TabsTab.tsrx +280 -0
  669. package/src/tabs/tab/TabsTabDataAttributes.ts +18 -0
  670. package/src/toast/action/ToastAction.tsrx +72 -0
  671. package/src/toast/action/ToastActionDataAttributes.ts +5 -0
  672. package/src/toast/arrow/ToastArrow.tsrx +57 -0
  673. package/src/toast/arrow/ToastArrowDataAttributes.ts +16 -0
  674. package/src/toast/close/ToastClose.tsrx +79 -0
  675. package/src/toast/close/ToastCloseDataAttributes.ts +5 -0
  676. package/src/toast/content/ToastContent.tsrx +76 -0
  677. package/src/toast/content/ToastContentDataAttributes.ts +10 -0
  678. package/src/toast/createToastManager.ts +104 -0
  679. package/src/toast/description/ToastDescription.tsrx +54 -0
  680. package/src/toast/description/ToastDescriptionDataAttributes.ts +5 -0
  681. package/src/toast/index.parts.ts +14 -0
  682. package/src/toast/index.ts +18 -0
  683. package/src/toast/portal/ToastPortal.tsrx +33 -0
  684. package/src/toast/positioner/ToastPositioner.tsrx +154 -0
  685. package/src/toast/positioner/ToastPositionerContext.ts +23 -0
  686. package/src/toast/positioner/ToastPositionerCssVars.ts +25 -0
  687. package/src/toast/positioner/ToastPositionerDataAttributes.ts +16 -0
  688. package/src/toast/provider/ToastProvider.tsrx +109 -0
  689. package/src/toast/provider/ToastProviderContext.ts +16 -0
  690. package/src/toast/root/ToastRoot.tsrx +563 -0
  691. package/src/toast/root/ToastRootContext.ts +25 -0
  692. package/src/toast/root/ToastRootCssVars.ts +25 -0
  693. package/src/toast/root/ToastRootDataAttributes.ts +35 -0
  694. package/src/toast/store.ts +527 -0
  695. package/src/toast/title/ToastTitle.tsrx +53 -0
  696. package/src/toast/title/ToastTitleDataAttributes.ts +5 -0
  697. package/src/toast/useToastManager.ts +150 -0
  698. package/src/toast/utils/focusVisible.ts +1 -0
  699. package/src/toast/utils/isRenderableNode.ts +18 -0
  700. package/src/toast/utils/resolvePromiseOptions.ts +22 -0
  701. package/src/toast/utils/test-utils.tsrx +39 -0
  702. package/src/toast/utils/useToastLabelPart.ts +53 -0
  703. package/src/toast/viewport/ToastViewport.tsrx +293 -0
  704. package/src/toast/viewport/ToastViewportCssVars.ts +5 -0
  705. package/src/toast/viewport/ToastViewportDataAttributes.ts +5 -0
  706. package/src/toggle/Toggle.tsrx +198 -0
  707. package/src/toggle/ToggleDataAttributes.ts +8 -0
  708. package/src/toggle/index.ts +3 -0
  709. package/src/toggle-group/ToggleGroup.tsrx +201 -0
  710. package/src/toggle-group/ToggleGroupContext.ts +28 -0
  711. package/src/toggle-group/ToggleGroupDataAttributes.ts +13 -0
  712. package/src/toggle-group/index.ts +3 -0
  713. package/src/toolbar/button/ToolbarButton.tsrx +108 -0
  714. package/src/toolbar/button/ToolbarButtonDataAttributes.ts +13 -0
  715. package/src/toolbar/group/ToolbarGroup.tsrx +69 -0
  716. package/src/toolbar/group/ToolbarGroupContext.ts +13 -0
  717. package/src/toolbar/group/ToolbarGroupDataAttributes.ts +9 -0
  718. package/src/toolbar/index.parts.ts +8 -0
  719. package/src/toolbar/index.ts +9 -0
  720. package/src/toolbar/input/ToolbarInput.tsrx +108 -0
  721. package/src/toolbar/input/ToolbarInputDataAttributes.ts +13 -0
  722. package/src/toolbar/link/ToolbarLink.tsrx +64 -0
  723. package/src/toolbar/link/ToolbarLinkDataAttributes.ts +5 -0
  724. package/src/toolbar/root/ToolbarRoot.tsrx +121 -0
  725. package/src/toolbar/root/ToolbarRootContext.ts +24 -0
  726. package/src/toolbar/root/ToolbarRootDataAttributes.ts +9 -0
  727. package/src/toolbar/separator/ToolbarSeparator.tsrx +37 -0
  728. package/src/toolbar/separator/ToolbarSeparatorDataAttributes.ts +5 -0
  729. package/src/tooltip/arrow/TooltipArrow.tsrx +76 -0
  730. package/src/tooltip/arrow/TooltipArrowDataAttributes.ts +29 -0
  731. package/src/tooltip/index.parts.ts +12 -0
  732. package/src/tooltip/index.ts +13 -0
  733. package/src/tooltip/popup/TooltipPopup.tsrx +108 -0
  734. package/src/tooltip/popup/TooltipPopupDataAttributes.ts +33 -0
  735. package/src/tooltip/portal/TooltipPortal.tsrx +54 -0
  736. package/src/tooltip/portal/TooltipPortalContext.ts +13 -0
  737. package/src/tooltip/positioner/TooltipPositioner.tsrx +150 -0
  738. package/src/tooltip/positioner/TooltipPositionerContext.ts +23 -0
  739. package/src/tooltip/positioner/TooltipPositionerCssVars.ts +37 -0
  740. package/src/tooltip/positioner/TooltipPositionerDataAttributes.ts +24 -0
  741. package/src/tooltip/provider/TooltipProvider.tsrx +49 -0
  742. package/src/tooltip/provider/TooltipProviderContext.ts +12 -0
  743. package/src/tooltip/root/TooltipRoot.tsrx +282 -0
  744. package/src/tooltip/root/TooltipRootContext.ts +21 -0
  745. package/src/tooltip/store/TooltipHandle.ts +54 -0
  746. package/src/tooltip/store/TooltipStore.ts +148 -0
  747. package/src/tooltip/trigger/TooltipTrigger.tsrx +351 -0
  748. package/src/tooltip/trigger/TooltipTriggerDataAttributes.ts +10 -0
  749. package/src/tooltip/utils/constants.ts +1 -0
  750. package/src/tooltip/viewport/TooltipViewport.tsrx +75 -0
  751. package/src/tooltip/viewport/TooltipViewportCssVars.ts +12 -0
  752. package/src/tooltip/viewport/TooltipViewportDataAttributes.ts +24 -0
  753. package/src/types/index.ts +29 -0
  754. package/src/unstable-use-media-query/index.ts +94 -0
  755. package/src/use-render/index.ts +2 -0
  756. package/src/use-render/useRender.ts +113 -0
  757. package/src/utils/CommonPopupCssVars.ts +12 -0
  758. package/src/utils/CommonPopupDataAttributes.ts +38 -0
  759. package/src/utils/CommonPositionerCssVars.ts +37 -0
  760. package/src/utils/CommonTriggerDataAttributes.ts +9 -0
  761. package/src/utils/CommonViewportDataAttributes.ts +7 -0
  762. package/src/utils/FloatingPortalLite.tsrx +51 -0
  763. package/src/utils/FocusGuard.tsrx +44 -0
  764. package/src/utils/InternalBackdrop.tsrx +50 -0
  765. package/src/utils/NullStore.ts +26 -0
  766. package/src/utils/adaptiveOriginConstants.ts +12 -0
  767. package/src/utils/adaptiveOriginMiddleware.ts +5 -14
  768. package/src/utils/closePart.tsrx +37 -0
  769. package/src/utils/collapsibleOpenStateMapping.ts +28 -23
  770. package/src/utils/dispatchClickWithModifiers.ts +36 -0
  771. package/src/utils/getCssDimensions.ts +11 -15
  772. package/src/utils/getElementAtPoint.ts +12 -0
  773. package/src/utils/getElementTransform.ts +33 -0
  774. package/src/utils/getPseudoElementBounds.ts +22 -7
  775. package/src/utils/hideMiddleware.ts +15 -12
  776. package/src/utils/listbox-separator/ListboxSeparator.tsrx +47 -0
  777. package/src/utils/mergeStyles.ts +15 -0
  778. package/src/utils/popupStateMapping.ts +57 -35
  779. package/src/utils/popups/index.ts +4 -8
  780. package/src/utils/popups/inlineRect.ts +19 -16
  781. package/src/utils/popups/popupHandle.ts +291 -0
  782. package/src/utils/popups/popupStoreUtils.ts +482 -320
  783. package/src/utils/popups/popupTriggerMap.ts +102 -28
  784. package/src/utils/popups/store.ts +146 -66
  785. package/src/utils/popups/usePopupHandleStore.ts +37 -0
  786. package/src/utils/popups/useTriggerFocusGuards.ts +36 -21
  787. package/src/utils/resolveAriaLabelledBy.ts +2 -1
  788. package/src/utils/resolveClassName.ts +8 -3
  789. package/src/utils/resolveRef.ts +8 -4
  790. package/src/utils/resolveStyle.ts +10 -6
  791. package/src/utils/scrollEdges.ts +33 -0
  792. package/src/utils/scrollable.ts +77 -0
  793. package/src/utils/styles.tsrx +21 -0
  794. package/src/utils/useAnchoredPopupScrollLock.ts +31 -37
  795. package/src/utils/useFocusableWhenDisabled.ts +81 -65
  796. package/src/utils/useIsHydrating.ts +12 -15
  797. package/src/utils/useMixedToggleClickHandler.ts +45 -60
  798. package/src/utils/useOpenInteractionType.ts +43 -45
  799. package/src/utils/usePopupAutoResize.ts +198 -207
  800. package/src/utils/usePopupViewport.tsrx +396 -0
  801. package/src/utils/usePositioner.tsrx +50 -0
  802. package/src/utils/useRegisteredLabelId.ts +16 -27
  803. package/src/utils/useSwipeDismiss.ts +1161 -0
  804. package/src/utils/valueToPercent.ts +1 -2
  805. package/dist/cjs/accordion.cjs +0 -497
  806. package/dist/cjs/alert-dialog.cjs +0 -65
  807. package/dist/cjs/avatar.cjs +0 -234
  808. package/dist/cjs/button.cjs +0 -54
  809. package/dist/cjs/checkbox-group.cjs +0 -165
  810. package/dist/cjs/checkbox.cjs +0 -475
  811. package/dist/cjs/collapsible.cjs +0 -700
  812. package/dist/cjs/context-menu.cjs +0 -257
  813. package/dist/cjs/csp-provider.cjs +0 -40
  814. package/dist/cjs/dialog.cjs +0 -741
  815. package/dist/cjs/direction-provider.cjs +0 -35
  816. package/dist/cjs/field.cjs +0 -559
  817. package/dist/cjs/fieldset.cjs +0 -101
  818. package/dist/cjs/form.cjs +0 -177
  819. package/dist/cjs/index.cjs +0 -133
  820. package/dist/cjs/input.cjs +0 -32
  821. package/dist/cjs/internal.cjs +0 -43
  822. package/dist/cjs/menu.cjs +0 -2420
  823. package/dist/cjs/menubar.cjs +0 -132
  824. package/dist/cjs/merge-props.cjs +0 -34
  825. package/dist/cjs/meter.cjs +0 -169
  826. package/dist/cjs/number-field.cjs +0 -812
  827. package/dist/cjs/popover.cjs +0 -966
  828. package/dist/cjs/preview-card.cjs +0 -632
  829. package/dist/cjs/progress.cjs +0 -206
  830. package/dist/cjs/radio-group.cjs +0 -264
  831. package/dist/cjs/radio.cjs +0 -327
  832. package/dist/cjs/separator.cjs +0 -44
  833. package/dist/cjs/slider.cjs +0 -1384
  834. package/dist/cjs/switch.cjs +0 -306
  835. package/dist/cjs/tabs.cjs +0 -727
  836. package/dist/cjs/toast.cjs +0 -1766
  837. package/dist/cjs/toggle-group.cjs +0 -118
  838. package/dist/cjs/toggle.cjs +0 -121
  839. package/dist/cjs/tooltip.cjs +0 -835
  840. package/dist/cjs/unstable-use-media-query.cjs +0 -79
  841. package/dist/cjs/use-render.cjs +0 -40
  842. package/dist/cjs/utils/CSPContext.cjs +0 -38
  843. package/dist/cjs/utils/CheckboxGroupContext.cjs +0 -40
  844. package/dist/cjs/utils/CompositeRootContext.cjs +0 -40
  845. package/dist/cjs/utils/ContextMenuRootContext.cjs +0 -42
  846. package/dist/cjs/utils/DirectionContext.cjs +0 -34
  847. package/dist/cjs/utils/FloatingPortalLite.cjs +0 -47
  848. package/dist/cjs/utils/InternalBackdrop.cjs +0 -49
  849. package/dist/cjs/utils/MenubarContext.cjs +0 -40
  850. package/dist/cjs/utils/RadioGroupContext.cjs +0 -34
  851. package/dist/cjs/utils/RequestQueue.cjs +0 -111
  852. package/dist/cjs/utils/TimeoutManager.cjs +0 -50
  853. package/dist/cjs/utils/ToggleGroupContext.cjs +0 -40
  854. package/dist/cjs/utils/adaptiveOriginMiddleware.cjs +0 -94
  855. package/dist/cjs/utils/addEventListener.cjs +0 -33
  856. package/dist/cjs/utils/areArraysEqual.cjs +0 -30
  857. package/dist/cjs/utils/clamp.cjs +0 -30
  858. package/dist/cjs/utils/closePart.cjs +0 -70
  859. package/dist/cjs/utils/collapsibleOpenStateMapping.cjs +0 -42
  860. package/dist/cjs/utils/composeRefs.cjs +0 -68
  861. package/dist/cjs/utils/composite/CompositeItem.cjs +0 -59
  862. package/dist/cjs/utils/composite/CompositeList.cjs +0 -177
  863. package/dist/cjs/utils/composite/CompositeListContext.cjs +0 -43
  864. package/dist/cjs/utils/composite/CompositeRoot.cjs +0 -118
  865. package/dist/cjs/utils/composite/grid-utils.cjs +0 -343
  866. package/dist/cjs/utils/composite/gridNavigation.cjs +0 -92
  867. package/dist/cjs/utils/composite/keys.cjs +0 -174
  868. package/dist/cjs/utils/composite/list-utils.cjs +0 -90
  869. package/dist/cjs/utils/composite/useCompositeItem.cjs +0 -63
  870. package/dist/cjs/utils/composite/useCompositeListItem.cjs +0 -104
  871. package/dist/cjs/utils/composite/useCompositeRoot.cjs +0 -263
  872. package/dist/cjs/utils/constants.cjs +0 -56
  873. package/dist/cjs/utils/contains.cjs +0 -46
  874. package/dist/cjs/utils/createChangeEventDetails.cjs +0 -92
  875. package/dist/cjs/utils/dom.cjs +0 -35
  876. package/dist/cjs/utils/empty.cjs +0 -34
  877. package/dist/cjs/utils/field/FieldItemContext.cjs +0 -34
  878. package/dist/cjs/utils/field/FieldRootContext.cjs +0 -80
  879. package/dist/cjs/utils/field/FormContext.cjs +0 -41
  880. package/dist/cjs/utils/field/LabelableContext.cjs +0 -43
  881. package/dist/cjs/utils/field/LabelableProvider.cjs +0 -115
  882. package/dist/cjs/utils/field/constants.cjs +0 -68
  883. package/dist/cjs/utils/field/getCombinedFieldValidityData.cjs +0 -36
  884. package/dist/cjs/utils/field/useAriaLabelledBy.cjs +0 -87
  885. package/dist/cjs/utils/field/useFieldControlRegistration.cjs +0 -165
  886. package/dist/cjs/utils/field/useFieldValidation.cjs +0 -285
  887. package/dist/cjs/utils/field/useLabel.cjs +0 -99
  888. package/dist/cjs/utils/field/useLabelableId.cjs +0 -105
  889. package/dist/cjs/utils/field/useRegisterFieldControl.cjs +0 -60
  890. package/dist/cjs/utils/findRootOwnerId.cjs +0 -37
  891. package/dist/cjs/utils/floating/FloatingDelayGroup.cjs +0 -219
  892. package/dist/cjs/utils/floating/FloatingFocusManager.cjs +0 -685
  893. package/dist/cjs/utils/floating/FloatingPortal.cjs +0 -230
  894. package/dist/cjs/utils/floating/FloatingRootStore.cjs +0 -87
  895. package/dist/cjs/utils/floating/FloatingTree.cjs +0 -86
  896. package/dist/cjs/utils/floating/FloatingTreeStore.cjs +0 -41
  897. package/dist/cjs/utils/floating/FocusGuard.cjs +0 -54
  898. package/dist/cjs/utils/floating/composite.cjs +0 -42
  899. package/dist/cjs/utils/floating/constants.cjs +0 -34
  900. package/dist/cjs/utils/floating/createAttribute.cjs +0 -30
  901. package/dist/cjs/utils/floating/createEventEmitter.cjs +0 -44
  902. package/dist/cjs/utils/floating/element.cjs +0 -103
  903. package/dist/cjs/utils/floating/enqueueFocus.cjs +0 -51
  904. package/dist/cjs/utils/floating/event.cjs +0 -65
  905. package/dist/cjs/utils/floating/getEmptyRootContext.cjs +0 -42
  906. package/dist/cjs/utils/floating/gridNavigation.cjs +0 -45
  907. package/dist/cjs/utils/floating/markOthers.cjs +0 -181
  908. package/dist/cjs/utils/floating/nodes.cjs +0 -48
  909. package/dist/cjs/utils/floating/safePolygon.cjs +0 -301
  910. package/dist/cjs/utils/floating/tabbable.cjs +0 -242
  911. package/dist/cjs/utils/floating/types.cjs +0 -16
  912. package/dist/cjs/utils/floating/useClick.cjs +0 -153
  913. package/dist/cjs/utils/floating/useClientPoint.cjs +0 -225
  914. package/dist/cjs/utils/floating/useDismiss.cjs +0 -506
  915. package/dist/cjs/utils/floating/useFloating.cjs +0 -186
  916. package/dist/cjs/utils/floating/useFloatingRootContext.cjs +0 -75
  917. package/dist/cjs/utils/floating/useFocus.cjs +0 -184
  918. package/dist/cjs/utils/floating/useHoverFloatingInteraction.cjs +0 -231
  919. package/dist/cjs/utils/floating/useHoverInteractionSharedState.cjs +0 -113
  920. package/dist/cjs/utils/floating/useHoverReferenceInteraction.cjs +0 -380
  921. package/dist/cjs/utils/floating/useHoverShared.cjs +0 -65
  922. package/dist/cjs/utils/floating/useListNavigation.cjs +0 -665
  923. package/dist/cjs/utils/floating/useSyncedFloatingRootContext.cjs +0 -91
  924. package/dist/cjs/utils/floating/useTypeahead.cjs +0 -187
  925. package/dist/cjs/utils/formatNumber.cjs +0 -60
  926. package/dist/cjs/utils/generateId.cjs +0 -32
  927. package/dist/cjs/utils/getCssDimensions.cjs +0 -42
  928. package/dist/cjs/utils/getDefaultFormSubmitter.cjs +0 -42
  929. package/dist/cjs/utils/getDisabledMountTransitionStyles.cjs +0 -32
  930. package/dist/cjs/utils/getElementRef.cjs +0 -35
  931. package/dist/cjs/utils/getPseudoElementBounds.cjs +0 -56
  932. package/dist/cjs/utils/getStateAttributesProps.cjs +0 -46
  933. package/dist/cjs/utils/hideMiddleware.cjs +0 -42
  934. package/dist/cjs/utils/inertValue.cjs +0 -30
  935. package/dist/cjs/utils/matchesFocusVisible.cjs +0 -38
  936. package/dist/cjs/utils/mergeCleanups.cjs +0 -37
  937. package/dist/cjs/utils/mergeObjects.cjs +0 -39
  938. package/dist/cjs/utils/mergeProps.cjs +0 -182
  939. package/dist/cjs/utils/noop.cjs +0 -29
  940. package/dist/cjs/utils/number/constants.cjs +0 -34
  941. package/dist/cjs/utils/number/parse.cjs +0 -258
  942. package/dist/cjs/utils/number/types.cjs +0 -16
  943. package/dist/cjs/utils/number/validate.cjs +0 -104
  944. package/dist/cjs/utils/owner.cjs +0 -35
  945. package/dist/cjs/utils/platform.cjs +0 -83
  946. package/dist/cjs/utils/popupStateMapping.cjs +0 -74
  947. package/dist/cjs/utils/popups/index.cjs +0 -39
  948. package/dist/cjs/utils/popups/inlineRect.cjs +0 -218
  949. package/dist/cjs/utils/popups/popupStoreUtils.cjs +0 -379
  950. package/dist/cjs/utils/popups/popupTriggerMap.cjs +0 -76
  951. package/dist/cjs/utils/popups/store.cjs +0 -118
  952. package/dist/cjs/utils/popups/useTriggerFocusGuards.cjs +0 -72
  953. package/dist/cjs/utils/resolveAriaLabelledBy.cjs +0 -35
  954. package/dist/cjs/utils/resolveClassName.cjs +0 -30
  955. package/dist/cjs/utils/resolveRef.cjs +0 -33
  956. package/dist/cjs/utils/resolveStyle.cjs +0 -30
  957. package/dist/cjs/utils/serializeValue.cjs +0 -40
  958. package/dist/cjs/utils/slider/asc.cjs +0 -30
  959. package/dist/cjs/utils/slider/getMidpoint.cjs +0 -34
  960. package/dist/cjs/utils/slider/getPushedThumbValues.cjs +0 -73
  961. package/dist/cjs/utils/slider/getSliderValue.cjs +0 -42
  962. package/dist/cjs/utils/slider/replaceArrayItemAtIndex.cjs +0 -33
  963. package/dist/cjs/utils/slider/resolveThumbCollision.cjs +0 -155
  964. package/dist/cjs/utils/slider/roundValueToStep.cjs +0 -45
  965. package/dist/cjs/utils/slider/validateMinimumDistance.cjs +0 -40
  966. package/dist/cjs/utils/slider/valueArrayToPercentages.cjs +0 -36
  967. package/dist/cjs/utils/store/ReactStore.cjs +0 -135
  968. package/dist/cjs/utils/store/Store.cjs +0 -83
  969. package/dist/cjs/utils/store/createSelector.cjs +0 -74
  970. package/dist/cjs/utils/store/useStore.cjs +0 -51
  971. package/dist/cjs/utils/stringifyLocale.cjs +0 -36
  972. package/dist/cjs/utils/useAnchorPositioning.cjs +0 -421
  973. package/dist/cjs/utils/useAnchoredPopupScrollLock.cjs +0 -59
  974. package/dist/cjs/utils/useAnimationFrame.cjs +0 -93
  975. package/dist/cjs/utils/useAnimationsFinished.cjs +0 -98
  976. package/dist/cjs/utils/useBaseUiId.cjs +0 -36
  977. package/dist/cjs/utils/useButton.cjs +0 -177
  978. package/dist/cjs/utils/useCheckboxGroupParent.cjs +0 -114
  979. package/dist/cjs/utils/useControlled.cjs +0 -47
  980. package/dist/cjs/utils/useEnhancedClickHandler.cjs +0 -60
  981. package/dist/cjs/utils/useFocusableWhenDisabled.cjs +0 -77
  982. package/dist/cjs/utils/useForcedRerendering.cjs +0 -35
  983. package/dist/cjs/utils/useIsHydrating.cjs +0 -44
  984. package/dist/cjs/utils/useMixedToggleClickHandler.cjs +0 -66
  985. package/dist/cjs/utils/useOnFirstRender.cjs +0 -35
  986. package/dist/cjs/utils/useOnMount.cjs +0 -36
  987. package/dist/cjs/utils/useOpenChangeComplete.cjs +0 -57
  988. package/dist/cjs/utils/useOpenInteractionType.cjs +0 -69
  989. package/dist/cjs/utils/usePopupAutoResize.cjs +0 -191
  990. package/dist/cjs/utils/usePopupViewport.cjs +0 -283
  991. package/dist/cjs/utils/usePositioner.cjs +0 -53
  992. package/dist/cjs/utils/usePressAndHold.cjs +0 -51
  993. package/dist/cjs/utils/usePreviousValue.cjs +0 -47
  994. package/dist/cjs/utils/useRefWithInit.cjs +0 -41
  995. package/dist/cjs/utils/useRegisteredLabelId.cjs +0 -48
  996. package/dist/cjs/utils/useRenderElement.cjs +0 -106
  997. package/dist/cjs/utils/useScrollLock.cjs +0 -232
  998. package/dist/cjs/utils/useStableCallback.cjs +0 -41
  999. package/dist/cjs/utils/useTimeout.cjs +0 -66
  1000. package/dist/cjs/utils/useTransitionStatus.cjs +0 -116
  1001. package/dist/cjs/utils/useValueAsRef.cjs +0 -43
  1002. package/dist/cjs/utils/useValueChanged.cjs +0 -55
  1003. package/dist/cjs/utils/valueToPercent.cjs +0 -30
  1004. package/dist/cjs/utils/visuallyHidden.cjs +0 -49
  1005. package/src/accordion.ts +0 -615
  1006. package/src/alert-dialog.ts +0 -49
  1007. package/src/avatar.ts +0 -308
  1008. package/src/button.ts +0 -63
  1009. package/src/checkbox-group.ts +0 -183
  1010. package/src/checkbox.ts +0 -576
  1011. package/src/collapsible.ts +0 -916
  1012. package/src/context-menu.ts +0 -317
  1013. package/src/csp-provider.ts +0 -37
  1014. package/src/dialog.ts +0 -930
  1015. package/src/direction-provider.ts +0 -32
  1016. package/src/field.ts +0 -650
  1017. package/src/fieldset.ts +0 -150
  1018. package/src/form.ts +0 -183
  1019. package/src/input.ts +0 -9
  1020. package/src/internal.ts +0 -29
  1021. package/src/menu.ts +0 -3387
  1022. package/src/menubar.ts +0 -160
  1023. package/src/merge-props.ts +0 -2
  1024. package/src/meter.ts +0 -211
  1025. package/src/number-field.ts +0 -951
  1026. package/src/popover.ts +0 -1282
  1027. package/src/preview-card.ts +0 -812
  1028. package/src/progress.ts +0 -267
  1029. package/src/radio-group.ts +0 -285
  1030. package/src/radio.ts +0 -393
  1031. package/src/separator.ts +0 -43
  1032. package/src/slider.ts +0 -1624
  1033. package/src/switch.ts +0 -363
  1034. package/src/tabs.ts +0 -947
  1035. package/src/toast.ts +0 -2462
  1036. package/src/toggle-group.ts +0 -136
  1037. package/src/toggle.ts +0 -145
  1038. package/src/tooltip.ts +0 -1053
  1039. package/src/unstable-use-media-query.ts +0 -101
  1040. package/src/use-render.ts +0 -41
  1041. package/src/utils/CSPContext.ts +0 -21
  1042. package/src/utils/CheckboxGroupContext.ts +0 -30
  1043. package/src/utils/CompositeRootContext.ts +0 -27
  1044. package/src/utils/ContextMenuRootContext.ts +0 -44
  1045. package/src/utils/DirectionContext.ts +0 -15
  1046. package/src/utils/FloatingPortalLite.ts +0 -34
  1047. package/src/utils/InternalBackdrop.ts +0 -28
  1048. package/src/utils/MenubarContext.ts +0 -38
  1049. package/src/utils/RadioGroupContext.ts +0 -27
  1050. package/src/utils/RequestQueue.ts +0 -132
  1051. package/src/utils/TimeoutManager.ts +0 -32
  1052. package/src/utils/ToggleGroupContext.ts +0 -33
  1053. package/src/utils/addEventListener.ts +0 -13
  1054. package/src/utils/areArraysEqual.ts +0 -11
  1055. package/src/utils/clamp.ts +0 -8
  1056. package/src/utils/closePart.ts +0 -61
  1057. package/src/utils/composeRefs.ts +0 -53
  1058. package/src/utils/composite/CompositeItem.ts +0 -56
  1059. package/src/utils/composite/CompositeList.ts +0 -190
  1060. package/src/utils/composite/CompositeListContext.ts +0 -23
  1061. package/src/utils/composite/CompositeRoot.ts +0 -132
  1062. package/src/utils/composite/grid-utils.ts +0 -437
  1063. package/src/utils/composite/gridNavigation.ts +0 -127
  1064. package/src/utils/composite/keys.ts +0 -179
  1065. package/src/utils/composite/list-utils.ts +0 -106
  1066. package/src/utils/composite/useCompositeItem.ts +0 -58
  1067. package/src/utils/composite/useCompositeListItem.ts +0 -108
  1068. package/src/utils/composite/useCompositeRoot.ts +0 -344
  1069. package/src/utils/constants.ts +0 -41
  1070. package/src/utils/contains.ts +0 -22
  1071. package/src/utils/createChangeEventDetails.ts +0 -95
  1072. package/src/utils/dom.ts +0 -9
  1073. package/src/utils/empty.ts +0 -7
  1074. package/src/utils/field/FieldItemContext.ts +0 -13
  1075. package/src/utils/field/FieldRootContext.ts +0 -98
  1076. package/src/utils/field/FormContext.ts +0 -37
  1077. package/src/utils/field/LabelableContext.ts +0 -32
  1078. package/src/utils/field/LabelableProvider.ts +0 -108
  1079. package/src/utils/field/constants.ts +0 -80
  1080. package/src/utils/field/getCombinedFieldValidityData.ts +0 -16
  1081. package/src/utils/field/useAriaLabelledBy.ts +0 -86
  1082. package/src/utils/field/useFieldControlRegistration.ts +0 -179
  1083. package/src/utils/field/useFieldValidation.ts +0 -311
  1084. package/src/utils/field/useLabel.ts +0 -95
  1085. package/src/utils/field/useLabelableId.ts +0 -99
  1086. package/src/utils/field/useRegisterFieldControl.ts +0 -41
  1087. package/src/utils/findRootOwnerId.ts +0 -19
  1088. package/src/utils/floating/FloatingDelayGroup.ts +0 -280
  1089. package/src/utils/floating/FloatingFocusManager.ts +0 -837
  1090. package/src/utils/floating/FloatingPortal.ts +0 -280
  1091. package/src/utils/floating/FloatingRootStore.ts +0 -127
  1092. package/src/utils/floating/FloatingTree.ts +0 -70
  1093. package/src/utils/floating/FloatingTreeStore.ts +0 -22
  1094. package/src/utils/floating/FocusGuard.ts +0 -34
  1095. package/src/utils/floating/composite.ts +0 -20
  1096. package/src/utils/floating/constants.ts +0 -8
  1097. package/src/utils/floating/createAttribute.ts +0 -4
  1098. package/src/utils/floating/createEventEmitter.ts +0 -20
  1099. package/src/utils/floating/element.ts +0 -88
  1100. package/src/utils/floating/enqueueFocus.ts +0 -38
  1101. package/src/utils/floating/event.ts +0 -53
  1102. package/src/utils/floating/getEmptyRootContext.ts +0 -19
  1103. package/src/utils/floating/gridNavigation.ts +0 -54
  1104. package/src/utils/floating/markOthers.ts +0 -197
  1105. package/src/utils/floating/nodes.ts +0 -31
  1106. package/src/utils/floating/safePolygon.ts +0 -448
  1107. package/src/utils/floating/tabbable.ts +0 -260
  1108. package/src/utils/floating/types.ts +0 -57
  1109. package/src/utils/floating/useClick.ts +0 -174
  1110. package/src/utils/floating/useClientPoint.ts +0 -276
  1111. package/src/utils/floating/useDismiss.ts +0 -639
  1112. package/src/utils/floating/useFloating.ts +0 -198
  1113. package/src/utils/floating/useFloatingRootContext.ts +0 -81
  1114. package/src/utils/floating/useFocus.ts +0 -248
  1115. package/src/utils/floating/useHoverFloatingInteraction.ts +0 -302
  1116. package/src/utils/floating/useHoverInteractionSharedState.ts +0 -139
  1117. package/src/utils/floating/useHoverReferenceInteraction.ts +0 -510
  1118. package/src/utils/floating/useHoverShared.ts +0 -78
  1119. package/src/utils/floating/useListNavigation.ts +0 -1018
  1120. package/src/utils/floating/useSyncedFloatingRootContext.ts +0 -93
  1121. package/src/utils/floating/useTypeahead.ts +0 -287
  1122. package/src/utils/formatNumber.ts +0 -44
  1123. package/src/utils/generateId.ts +0 -10
  1124. package/src/utils/getDefaultFormSubmitter.ts +0 -19
  1125. package/src/utils/getDisabledMountTransitionStyles.ts +0 -12
  1126. package/src/utils/getElementRef.ts +0 -13
  1127. package/src/utils/getStateAttributesProps.ts +0 -34
  1128. package/src/utils/inertValue.ts +0 -5
  1129. package/src/utils/matchesFocusVisible.ts +0 -16
  1130. package/src/utils/mergeCleanups.ts +0 -13
  1131. package/src/utils/mergeObjects.ts +0 -18
  1132. package/src/utils/mergeProps.ts +0 -206
  1133. package/src/utils/noop.ts +0 -4
  1134. package/src/utils/number/constants.ts +0 -4
  1135. package/src/utils/number/parse.ts +0 -227
  1136. package/src/utils/number/types.ts +0 -21
  1137. package/src/utils/number/validate.ts +0 -129
  1138. package/src/utils/owner.ts +0 -9
  1139. package/src/utils/platform.ts +0 -69
  1140. package/src/utils/serializeValue.ts +0 -15
  1141. package/src/utils/slider/asc.ts +0 -4
  1142. package/src/utils/slider/getMidpoint.ts +0 -14
  1143. package/src/utils/slider/getPushedThumbValues.ts +0 -73
  1144. package/src/utils/slider/getSliderValue.ts +0 -27
  1145. package/src/utils/slider/replaceArrayItemAtIndex.ts +0 -8
  1146. package/src/utils/slider/resolveThumbCollision.ts +0 -178
  1147. package/src/utils/slider/roundValueToStep.ts +0 -22
  1148. package/src/utils/slider/validateMinimumDistance.ts +0 -22
  1149. package/src/utils/slider/valueArrayToPercentages.ts +0 -11
  1150. package/src/utils/store/ReactStore.ts +0 -168
  1151. package/src/utils/store/Store.ts +0 -84
  1152. package/src/utils/store/createSelector.ts +0 -66
  1153. package/src/utils/store/useStore.ts +0 -49
  1154. package/src/utils/stringifyLocale.ts +0 -10
  1155. package/src/utils/useAnchorPositioning.ts +0 -581
  1156. package/src/utils/useAnimationFrame.ts +0 -82
  1157. package/src/utils/useAnimationsFinished.ts +0 -100
  1158. package/src/utils/useBaseUiId.ts +0 -19
  1159. package/src/utils/useButton.ts +0 -217
  1160. package/src/utils/useCheckboxGroupParent.ts +0 -113
  1161. package/src/utils/useControlled.ts +0 -42
  1162. package/src/utils/useEnhancedClickHandler.ts +0 -47
  1163. package/src/utils/useForcedRerendering.ts +0 -11
  1164. package/src/utils/useOnFirstRender.ts +0 -11
  1165. package/src/utils/useOnMount.ts +0 -17
  1166. package/src/utils/useOpenChangeComplete.ts +0 -46
  1167. package/src/utils/usePopupViewport.ts +0 -375
  1168. package/src/utils/usePositioner.ts +0 -48
  1169. package/src/utils/usePressAndHold.ts +0 -35
  1170. package/src/utils/usePreviousValue.ts +0 -33
  1171. package/src/utils/useRefWithInit.ts +0 -23
  1172. package/src/utils/useRenderElement.ts +0 -164
  1173. package/src/utils/useScrollLock.ts +0 -253
  1174. package/src/utils/useStableCallback.ts +0 -26
  1175. package/src/utils/useTimeout.ts +0 -51
  1176. package/src/utils/useTransitionStatus.ts +0 -115
  1177. package/src/utils/useValueAsRef.ts +0 -25
  1178. package/src/utils/useValueChanged.ts +0 -37
  1179. package/src/utils/visuallyHidden.ts +0 -24
@@ -0,0 +1,1004 @@
1
+ 'use client';
2
+ import * as React from 'octane';
3
+ import { getNodeName, isHTMLElement } from '@floating-ui/utils/dom';
4
+ import { addEventListener } from '@octanejs/base-ui-utils/addEventListener';
5
+ import { mergeCleanups } from '@octanejs/base-ui-utils/mergeCleanups';
6
+ import { useMergedRefs } from '@octanejs/base-ui-utils/useMergedRefs';
7
+ import { useValueAsRef } from '@octanejs/base-ui-utils/useValueAsRef';
8
+ import { useStableCallback } from '@octanejs/base-ui-utils/useStableCallback';
9
+ import { useIsoLayoutEffect } from '@octanejs/base-ui-utils/useIsoLayoutEffect';
10
+ import { useTimeout } from '@octanejs/base-ui-utils/useTimeout';
11
+ import { platform } from '@octanejs/base-ui-utils/platform';
12
+ import type { InteractionType } from '@octanejs/base-ui-utils/useEnhancedClickHandler';
13
+ import { useAnimationFrame } from '@octanejs/base-ui-utils/useAnimationFrame';
14
+ import { ownerDocument, ownerWindow } from '@octanejs/base-ui-utils/owner';
15
+ import { FocusGuard } from '../../utils/FocusGuard.tsrx';
16
+ import {
17
+ activeElement,
18
+ contains,
19
+ getTarget,
20
+ isTypeableCombobox,
21
+ getFloatingFocusElement,
22
+ isTypeableElement,
23
+ } from '../utils/element';
24
+ import { isVirtualClick, isVirtualPointerEvent, stopEvent } from '../utils/event';
25
+ import {
26
+ tabbable,
27
+ focusable,
28
+ isOutsideEvent,
29
+ isTabbable,
30
+ getNextTabbable,
31
+ getPreviousTabbable,
32
+ type FocusableElement,
33
+ } from '../utils/tabbable';
34
+ import { getNodeAncestors, getNodeChildren } from '../utils/nodes';
35
+ import { isElementVisible } from '../utils/composite';
36
+ import type { FloatingContext, FloatingRootContext } from '../types';
37
+ import { createChangeEventDetails } from '../../internals/createBaseUIEventDetails';
38
+ import { REASONS } from '../../internals/reasons';
39
+ import { createAttribute } from '../utils/createAttribute';
40
+ import { enqueueFocus } from '../utils/enqueueFocus';
41
+ import { markOthers } from '../utils/markOthers';
42
+ import { usePortalContext } from './FloatingPortal.tsrx';
43
+ import { useFloatingTree } from './FloatingTree.tsrx';
44
+ import type { FloatingTreeStore } from '../components/FloatingTreeStore';
45
+ import { CLICK_TRIGGER_IDENTIFIER } from '../../internals/constants';
46
+ import type { FloatingUIOpenChangeDetails } from '../../internals/types';
47
+ import { resolveRef } from '../../utils/resolveRef';
48
+
49
+ function getEventType(event: Event, lastInteractionType?: InteractionType): InteractionType {
50
+ const win = ownerWindow(getTarget(event));
51
+ if (event instanceof win.KeyboardEvent) {
52
+ return 'keyboard';
53
+ }
54
+ if (event instanceof win.FocusEvent) {
55
+ // Focus events can be caused by a preceding pointer interaction (e.g., focusout on outside press).
56
+ // Prefer the last known pointer type if provided, else treat as keyboard.
57
+ return lastInteractionType || 'keyboard';
58
+ }
59
+ if ('pointerType' in event) {
60
+ return (event.pointerType as InteractionType) || 'keyboard';
61
+ }
62
+ if ('touches' in event) {
63
+ return 'touch';
64
+ }
65
+ if (event instanceof win.MouseEvent) {
66
+ // onClick events may not contain pointer events, and will fall through to here
67
+ return lastInteractionType || (event.detail === 0 ? 'keyboard' : 'mouse');
68
+ }
69
+ return '';
70
+ }
71
+
72
+ const LIST_LIMIT = 20;
73
+ let previouslyFocusedElements: WeakRef<Element>[] = [];
74
+
75
+ function clearDisconnectedPreviouslyFocusedElements() {
76
+ previouslyFocusedElements = previouslyFocusedElements.filter((entry) => {
77
+ return entry.deref()?.isConnected;
78
+ });
79
+ }
80
+
81
+ function addPreviouslyFocusedElement(element: Element | null | undefined) {
82
+ clearDisconnectedPreviouslyFocusedElements();
83
+ if (element && getNodeName(element) !== 'body') {
84
+ previouslyFocusedElements.push(new WeakRef(element));
85
+ if (previouslyFocusedElements.length > LIST_LIMIT) {
86
+ previouslyFocusedElements = previouslyFocusedElements.slice(-LIST_LIMIT);
87
+ }
88
+ }
89
+ }
90
+
91
+ function getPreviouslyFocusedElement() {
92
+ clearDisconnectedPreviouslyFocusedElements();
93
+ return previouslyFocusedElements[previouslyFocusedElements.length - 1]?.deref();
94
+ }
95
+
96
+ function getFirstTabbableElement(container: Element | null) {
97
+ if (!container) {
98
+ return null;
99
+ }
100
+
101
+ if (isTabbable(container)) {
102
+ return container;
103
+ }
104
+
105
+ return tabbable(container)[0] || container;
106
+ }
107
+
108
+ function handleTabIndex(floatingFocusElement: HTMLElement) {
109
+ if (
110
+ floatingFocusElement.hasAttribute('tabindex') &&
111
+ !floatingFocusElement.hasAttribute('data-tabindex')
112
+ ) {
113
+ return;
114
+ }
115
+
116
+ if (!floatingFocusElement.getAttribute('role')?.includes('dialog')) {
117
+ return;
118
+ }
119
+
120
+ const focusableElements = focusable(floatingFocusElement);
121
+ const tabbableContent = focusableElements.filter((element) => {
122
+ const dataTabIndex = element.getAttribute('data-tabindex') || '';
123
+ return (
124
+ isTabbable(element) ||
125
+ (element.hasAttribute('data-tabindex') && !dataTabIndex.startsWith('-'))
126
+ );
127
+ });
128
+ const tabIndex = floatingFocusElement.getAttribute('tabindex');
129
+
130
+ if (tabbableContent.length === 0) {
131
+ if (tabIndex !== '0') {
132
+ floatingFocusElement.setAttribute('tabindex', '0');
133
+ // Mark our own write so the externally-managed early-return above doesn't
134
+ // mistake it for a user-authored `tabindex` and freeze management.
135
+ floatingFocusElement.setAttribute('data-tabindex', '0');
136
+ }
137
+ } else if (
138
+ tabIndex !== '-1' ||
139
+ (floatingFocusElement.hasAttribute('data-tabindex') &&
140
+ floatingFocusElement.getAttribute('data-tabindex') !== '-1')
141
+ ) {
142
+ floatingFocusElement.setAttribute('tabindex', '-1');
143
+ floatingFocusElement.setAttribute('data-tabindex', '-1');
144
+ }
145
+ }
146
+
147
+ export interface FloatingFocusManagerProps {
148
+ children: React.ReactElement;
149
+ /**
150
+ * The floating context returned from `useFloatingRootContext`.
151
+ */
152
+ context: FloatingRootContext | FloatingContext;
153
+ /**
154
+ * The interaction type used to open the floating element.
155
+ */
156
+ openInteractionType?: InteractionType | null | undefined;
157
+ /**
158
+ * Whether or not the focus manager should be disabled. Useful to delay focus
159
+ * management until after a transition completes or some other conditional
160
+ * state.
161
+ * @default false
162
+ */
163
+ disabled?: boolean | undefined;
164
+ /**
165
+ * Determines the element to focus when the floating element is opened.
166
+ *
167
+ * - `false`: Do not move focus.
168
+ * - `true`: Move focus based on the default behavior (first tabbable element or floating element).
169
+ * - `RefObject`: Move focus to the ref element.
170
+ * - `function`: Called with the interaction type (`mouse`, `touch`, `pen`, or `keyboard`).
171
+ * Return an element to focus, `true` to use default behavior, `null` to fallback to default behavior,
172
+ * or `false`/`undefined` to do nothing.
173
+ * @default true
174
+ */
175
+ initialFocus?:
176
+ | boolean
177
+ | React.RefObject<HTMLElement | null>
178
+ | ((openType: InteractionType) => boolean | HTMLElement | null | void)
179
+ | undefined;
180
+ /**
181
+ * Determines the element to focus when the floating element is closed.
182
+ *
183
+ * - `false`: Do not move focus.
184
+ * - `true`: Move focus based on the default behavior (reference or previously focused element).
185
+ * - `RefObject`: Move focus to the ref element.
186
+ * - `function`: Called with the interaction type (`mouse`, `touch`, `pen`, or `keyboard`).
187
+ * Return an element to focus, `true` to use the default behavior, `null` to fallback to default behavior,
188
+ * or `false`/`undefined` to do nothing.
189
+ * @default true
190
+ */
191
+ returnFocus?:
192
+ | boolean
193
+ | React.RefObject<HTMLElement | null>
194
+ | ((closeType: InteractionType) => boolean | HTMLElement | null | void)
195
+ | undefined;
196
+ /**
197
+ * Determines where focus should be restored if focus inside the floating element is lost
198
+ * (such as due to the removal of the currently focused element from the DOM).
199
+ *
200
+ * - `true`: restore to the nearest tabbable element inside the floating tree (previous
201
+ * tabbable if possible, otherwise the last tabbable, then the floating element itself)
202
+ * - `'popup'`: restore directly to the floating element (container) itself
203
+ * - `false`: do not restore focus
204
+ * @default false
205
+ */
206
+ restoreFocus?: boolean | 'popup' | undefined;
207
+ /**
208
+ * Determines if focus is “modal”, meaning focus is fully trapped inside the
209
+ * floating element and outside content cannot be accessed. This includes
210
+ * screen reader virtual cursors.
211
+ * @default true
212
+ */
213
+ modal?: boolean | undefined;
214
+ /**
215
+ * Determines whether `focusout` event listeners that control whether the
216
+ * floating element should be closed if the focus moves outside of it are
217
+ * attached to the reference and floating elements. This affects non-modal
218
+ * focus management.
219
+ * @default true
220
+ */
221
+ closeOnFocusOut?: boolean | undefined;
222
+ /**
223
+ * Overrides the element to focus when tabbing forward out of the floating element.
224
+ */
225
+ nextFocusableElement?: HTMLElement | React.RefObject<HTMLElement | null> | null | undefined;
226
+ /**
227
+ * Overrides the element to focus when tabbing backward out of the floating element.
228
+ */
229
+ previousFocusableElement?: HTMLElement | React.RefObject<HTMLElement | null> | null | undefined;
230
+ /**
231
+ * Ref to the focus guard preceding the floating element content.
232
+ * Can be useful to focus the popup programmatically.
233
+ */
234
+ beforeContentFocusGuardRef?: React.RefObject<HTMLSpanElement | null> | undefined;
235
+ /**
236
+ * External FloatingTree to use when the one provided by context can't be used.
237
+ */
238
+ externalTree?: FloatingTreeStore | undefined;
239
+ /**
240
+ * Additional elements that should be treated as part of the floating subtree
241
+ * even if they are rendered outside the floating element itself.
242
+ */
243
+ getInsideElements?: (() => Array<Element | null | undefined>) | undefined;
244
+ }
245
+
246
+ /**
247
+ * Provides focus management for the floating element.
248
+ * @see https://floating-ui.com/docs/FloatingFocusManager
249
+ * @internal
250
+ */
251
+ export function FloatingFocusManager(props: FloatingFocusManagerProps): React.ReactElement {
252
+ const {
253
+ context,
254
+ children,
255
+ disabled = false,
256
+ initialFocus = true,
257
+ returnFocus = true,
258
+ restoreFocus = false,
259
+ modal = true,
260
+ closeOnFocusOut = true,
261
+ openInteractionType = '',
262
+ nextFocusableElement,
263
+ previousFocusableElement,
264
+ beforeContentFocusGuardRef,
265
+ externalTree,
266
+ getInsideElements,
267
+ } = props;
268
+
269
+ const store = 'rootStore' in context ? context.rootStore : context;
270
+
271
+ const open = store.useState('open');
272
+ const domReference = store.useState('domReferenceElement');
273
+ const floating = store.useState('floatingElement');
274
+ const { events, dataRef } = store.context;
275
+
276
+ const getNodeId = useStableCallback(() => dataRef.current.floatingContext?.nodeId);
277
+
278
+ const ignoreInitialFocus = initialFocus === false;
279
+ // A typeable combobox reference (e.g. input/textarea) with `initialFocus={false}`
280
+ // has different focus semantics: focus is not trapped inside the floating element,
281
+ // so in the modal case the guards are not rendered, but `aria-hidden` is still
282
+ // applied to the outside nodes.
283
+ const isUntrappedTypeableCombobox = isTypeableCombobox(domReference) && ignoreInitialFocus;
284
+
285
+ const initialFocusRef = useValueAsRef(initialFocus);
286
+ const returnFocusRef = useValueAsRef(returnFocus);
287
+ const openInteractionTypeRef = useValueAsRef(openInteractionType);
288
+ const openRef = useValueAsRef(open);
289
+
290
+ const tree = useFloatingTree(externalTree);
291
+ const portalContext = usePortalContext();
292
+
293
+ const preventReturnFocusRef = React.useRef(false);
294
+ const isPointerDownRef = React.useRef(false);
295
+ const pointerDownOutsideRef = React.useRef(false);
296
+ const lastFocusedTabbableRef = React.useRef<FocusableElement | null>(null);
297
+ const closeTypeRef = React.useRef<InteractionType>('');
298
+ const lastInteractionTypeRef = React.useRef<InteractionType>('');
299
+
300
+ const beforeGuardRef = React.useRef<HTMLSpanElement | null>(null);
301
+ const afterGuardRef = React.useRef<HTMLSpanElement | null>(null);
302
+
303
+ const mergedBeforeGuardRef = useMergedRefs(
304
+ beforeGuardRef,
305
+ beforeContentFocusGuardRef,
306
+ portalContext?.beforeInsideRef,
307
+ );
308
+ const mergedAfterGuardRef = useMergedRefs(afterGuardRef, portalContext?.afterInsideRef);
309
+
310
+ const blurTimeout = useTimeout();
311
+ const pointerDownTimeout = useTimeout();
312
+ const restoreFocusFrame = useAnimationFrame();
313
+
314
+ const isInsidePortal = portalContext != null;
315
+ const floatingFocusElement = getFloatingFocusElement(floating);
316
+
317
+ const getTabbableContent = useStableCallback(
318
+ (container: Element | null = floatingFocusElement) => {
319
+ return container ? tabbable(container) : [];
320
+ },
321
+ );
322
+
323
+ const getResolvedInsideElements = useStableCallback(
324
+ () => getInsideElements?.().filter((element): element is Element => element != null) ?? [],
325
+ );
326
+
327
+ // Prevent Tab from escaping the modal when there are no tabbable elements.
328
+ React.useEffect(() => {
329
+ if (disabled || !modal) {
330
+ return undefined;
331
+ }
332
+
333
+ function onKeyDown(event: KeyboardEvent) {
334
+ if (event.key === 'Tab') {
335
+ // The focus guards have nothing to focus, so we need to stop the event.
336
+ if (
337
+ contains(floatingFocusElement, activeElement(ownerDocument(floatingFocusElement))) &&
338
+ getTabbableContent().length === 0 &&
339
+ !isUntrappedTypeableCombobox
340
+ ) {
341
+ stopEvent(event);
342
+ }
343
+ }
344
+ }
345
+
346
+ const doc = ownerDocument(floatingFocusElement);
347
+ return addEventListener(doc, 'keydown', onKeyDown);
348
+ }, [disabled, floatingFocusElement, modal, isUntrappedTypeableCombobox, getTabbableContent]);
349
+
350
+ // Track pointer/keyboard interactions to disambiguate focus and outside presses.
351
+ React.useEffect(() => {
352
+ if (disabled || !open) {
353
+ return undefined;
354
+ }
355
+
356
+ const doc = ownerDocument(floatingFocusElement);
357
+
358
+ function clearPointerDownOutside() {
359
+ pointerDownOutsideRef.current = false;
360
+ }
361
+
362
+ function onPointerDown(event: PointerEvent) {
363
+ const target = getTarget(event) as Element | null;
364
+ const insideElements = getResolvedInsideElements();
365
+ const pointerTargetInside =
366
+ contains(floating, target) ||
367
+ contains(domReference, target) ||
368
+ contains(portalContext?.portalNode, target) ||
369
+ insideElements.some((element) => element === target || contains(element, target));
370
+ pointerDownOutsideRef.current = !pointerTargetInside;
371
+ lastInteractionTypeRef.current = (event.pointerType as InteractionType) || 'keyboard';
372
+
373
+ if (target?.closest(`[${CLICK_TRIGGER_IDENTIFIER}]`)) {
374
+ isPointerDownRef.current = true;
375
+ // Reset on the next tick so a single click on a click-trigger doesn't
376
+ // permanently suppress focus-out closing for the lifetime of the instance.
377
+ pointerDownTimeout.start(0, () => {
378
+ isPointerDownRef.current = false;
379
+ });
380
+ }
381
+ }
382
+
383
+ function onKeyDown() {
384
+ lastInteractionTypeRef.current = 'keyboard';
385
+ }
386
+
387
+ return mergeCleanups(
388
+ addEventListener(doc, 'pointerdown', onPointerDown, true),
389
+ addEventListener(doc, 'pointerup', clearPointerDownOutside, true),
390
+ addEventListener(doc, 'pointercancel', clearPointerDownOutside, true),
391
+ addEventListener(doc, 'keydown', onKeyDown, true),
392
+ // Avoid a stale `true` leaking into the next open (e.g. keep-mounted popups)
393
+ // if the popup dismissed between pointerdown and pointerup.
394
+ clearPointerDownOutside,
395
+ );
396
+ }, [
397
+ disabled,
398
+ floating,
399
+ domReference,
400
+ floatingFocusElement,
401
+ open,
402
+ portalContext,
403
+ pointerDownTimeout,
404
+ getResolvedInsideElements,
405
+ ]);
406
+
407
+ // Close on focus out and restore focus within the floating tree when needed.
408
+ React.useEffect(() => {
409
+ if (disabled || !closeOnFocusOut) {
410
+ return undefined;
411
+ }
412
+
413
+ const doc = ownerDocument(floatingFocusElement);
414
+
415
+ // In Safari, buttons lose focus when pressing them.
416
+ function handlePointerDown() {
417
+ isPointerDownRef.current = true;
418
+ pointerDownTimeout.start(0, () => {
419
+ isPointerDownRef.current = false;
420
+ });
421
+ }
422
+
423
+ function handleFocusIn(event: FocusEvent) {
424
+ const target = getTarget(event) as FocusableElement | null;
425
+ if (isTabbable(target)) {
426
+ lastFocusedTabbableRef.current = target;
427
+ }
428
+ }
429
+
430
+ function handleFocusOutside(event: FocusEvent) {
431
+ const relatedTarget = event.relatedTarget as HTMLElement | null;
432
+ const currentTarget = event.currentTarget;
433
+ const target = getTarget(event) as HTMLElement | null;
434
+
435
+ // When focus is lost to the body (e.g. on a backdrop press), record the element that
436
+ // had focus so a confirmation dialog opened while the body is focused can return focus
437
+ // to it. Scoped to `modal` to avoid non-modal popups polluting the shared stack.
438
+ if (modal && relatedTarget == null && target != null && contains(floating, target)) {
439
+ addPreviouslyFocusedElement(target);
440
+ }
441
+
442
+ queueMicrotask(() => {
443
+ const nodeId = getNodeId();
444
+ const triggers = store.context.triggerElements;
445
+ const insideElements = getResolvedInsideElements();
446
+ const isRelatedFocusGuard =
447
+ relatedTarget?.hasAttribute(createAttribute('focus-guard')) &&
448
+ [
449
+ beforeGuardRef.current,
450
+ afterGuardRef.current,
451
+ portalContext?.beforeInsideRef.current,
452
+ portalContext?.afterInsideRef.current,
453
+ portalContext?.beforeOutsideRef.current,
454
+ portalContext?.afterOutsideRef.current,
455
+ resolveRef(previousFocusableElement),
456
+ resolveRef(nextFocusableElement),
457
+ ].includes(relatedTarget);
458
+
459
+ const movedToUnrelatedNode = !(
460
+ contains(domReference, relatedTarget) ||
461
+ contains(floating, relatedTarget) ||
462
+ contains(relatedTarget, floating) ||
463
+ contains(portalContext?.portalNode, relatedTarget) ||
464
+ insideElements.some(
465
+ (element) => element === relatedTarget || contains(element, relatedTarget),
466
+ ) ||
467
+ triggers.hasMatchingElement((trigger) => contains(trigger, relatedTarget)) ||
468
+ isRelatedFocusGuard ||
469
+ (tree &&
470
+ (getNodeChildren(tree.nodesRef.current, nodeId).find(
471
+ (node) =>
472
+ contains(node.context?.elements.floating, relatedTarget) ||
473
+ contains(node.context?.elements.domReference, relatedTarget),
474
+ ) ||
475
+ getNodeAncestors(tree.nodesRef.current, nodeId).find(
476
+ (node) =>
477
+ [
478
+ node.context?.elements.floating,
479
+ getFloatingFocusElement(node.context?.elements.floating),
480
+ ].includes(relatedTarget) ||
481
+ node.context?.elements.domReference === relatedTarget,
482
+ )))
483
+ );
484
+
485
+ if (currentTarget === domReference && floatingFocusElement) {
486
+ handleTabIndex(floatingFocusElement);
487
+ }
488
+
489
+ // Restore focus to the previously focused tabbable element to prevent
490
+ // focus from being lost outside the floating tree.
491
+ if (
492
+ restoreFocus &&
493
+ currentTarget !== domReference &&
494
+ !isElementVisible(target) &&
495
+ activeElement(doc) === doc.body
496
+ ) {
497
+ // Let `FloatingPortal` effect knows that focus is still inside the
498
+ // floating tree.
499
+ if (isHTMLElement(floatingFocusElement)) {
500
+ floatingFocusElement.focus();
501
+ // If explicitly requested to restore focus to the popup container, do not search
502
+ // for the next/previous tabbable element.
503
+ if (restoreFocus === 'popup') {
504
+ // If the focused element is removed on pointerdown, the browser
505
+ // tries to move focus to it right after the `.focus()` call above,
506
+ // but because it's removed in the same tick, focus is lost instead.
507
+ // Re-focusing asynchronously (next frame) wins that race.
508
+ restoreFocusFrame.request(() => {
509
+ floatingFocusElement.focus();
510
+ });
511
+ return;
512
+ }
513
+ }
514
+
515
+ const tabbableContent = getTabbableContent() as Array<Element | null>;
516
+ const prevTabbable = lastFocusedTabbableRef.current;
517
+ const nodeToFocus =
518
+ (prevTabbable && tabbableContent.includes(prevTabbable) ? prevTabbable : null) ||
519
+ tabbableContent[tabbableContent.length - 1] ||
520
+ floatingFocusElement;
521
+
522
+ if (isHTMLElement(nodeToFocus)) {
523
+ nodeToFocus.focus();
524
+ }
525
+ }
526
+
527
+ // https://github.com/floating-ui/floating-ui/issues/3060
528
+ if (dataRef.current.insideReactTree) {
529
+ dataRef.current.insideReactTree = false;
530
+ return;
531
+ }
532
+
533
+ // Focus did not move inside the floating tree, and there are no tabbable
534
+ // portal guards to handle closing.
535
+ if (
536
+ (isUntrappedTypeableCombobox ? true : !modal) &&
537
+ relatedTarget &&
538
+ movedToUnrelatedNode &&
539
+ !isPointerDownRef.current &&
540
+ // Fix React 18 Strict Mode returnFocus due to double rendering.
541
+ // For an "untrapped" typeable combobox (input role=combobox with
542
+ // initialFocus=false), re-opening the popup and tabbing out should still close it even
543
+ // when the previously focused element (e.g. the next tabbable outside the popup) is
544
+ // focused again. Otherwise, the popup remains open on the second Tab sequence:
545
+ // click input -> Tab (closes) -> click input -> Tab.
546
+ // Allow closing when `isUntrappedTypeableCombobox` regardless of the previously focused element.
547
+ (isUntrappedTypeableCombobox || relatedTarget !== getPreviouslyFocusedElement())
548
+ ) {
549
+ preventReturnFocusRef.current = true;
550
+ store.setOpen(false, createChangeEventDetails(REASONS.focusOut, event));
551
+ }
552
+ });
553
+ }
554
+
555
+ function markInsideReactTree() {
556
+ if (pointerDownOutsideRef.current) {
557
+ return;
558
+ }
559
+ dataRef.current.insideReactTree = true;
560
+ blurTimeout.start(0, () => {
561
+ dataRef.current.insideReactTree = false;
562
+ });
563
+ }
564
+
565
+ const domReferenceElement = isHTMLElement(domReference) ? domReference : null;
566
+ if (!floating && !domReferenceElement) {
567
+ return undefined;
568
+ }
569
+
570
+ return mergeCleanups(
571
+ domReferenceElement && addEventListener(domReferenceElement, 'focusout', handleFocusOutside),
572
+ domReferenceElement &&
573
+ addEventListener(domReferenceElement, 'pointerdown', handlePointerDown),
574
+ floating && addEventListener(floating, 'focusin', handleFocusIn),
575
+ floating && addEventListener(floating, 'focusout', handleFocusOutside),
576
+ floating &&
577
+ portalContext &&
578
+ addEventListener(floating, 'focusout', markInsideReactTree, true),
579
+ );
580
+ }, [
581
+ disabled,
582
+ domReference,
583
+ floating,
584
+ floatingFocusElement,
585
+ modal,
586
+ tree,
587
+ portalContext,
588
+ store,
589
+ closeOnFocusOut,
590
+ restoreFocus,
591
+ getTabbableContent,
592
+ isUntrappedTypeableCombobox,
593
+ getNodeId,
594
+ dataRef,
595
+ blurTimeout,
596
+ pointerDownTimeout,
597
+ restoreFocusFrame,
598
+ nextFocusableElement,
599
+ previousFocusableElement,
600
+ getResolvedInsideElements,
601
+ ]);
602
+
603
+ // Hide everything outside the floating tree from assistive tech while open.
604
+ React.useEffect(() => {
605
+ if (disabled || !floating || !open) {
606
+ return undefined;
607
+ }
608
+
609
+ // Don't hide portals nested within the parent portal.
610
+ const portalNodes = Array.from(
611
+ portalContext?.portalNode?.querySelectorAll(`[${createAttribute('portal')}]`) || [],
612
+ );
613
+
614
+ const ancestors = tree ? getNodeAncestors(tree.nodesRef.current, getNodeId()) : [];
615
+ const rootAncestorComboboxDomReference = ancestors.find((node) =>
616
+ isTypeableCombobox(node.context?.elements.domReference || null),
617
+ )?.context?.elements.domReference;
618
+
619
+ const controlInsideElements = [
620
+ floating,
621
+ ...portalNodes,
622
+ beforeGuardRef.current,
623
+ afterGuardRef.current,
624
+ portalContext?.beforeOutsideRef.current,
625
+ portalContext?.afterOutsideRef.current,
626
+ ...getResolvedInsideElements(),
627
+ ];
628
+ const insideElements = [
629
+ ...controlInsideElements,
630
+ rootAncestorComboboxDomReference,
631
+ resolveRef(previousFocusableElement),
632
+ resolveRef(nextFocusableElement),
633
+ isUntrappedTypeableCombobox ? domReference : null,
634
+ ].filter((x): x is Element => x != null);
635
+
636
+ const ariaHiddenCleanup = markOthers(insideElements, {
637
+ ariaHidden: modal || isUntrappedTypeableCombobox,
638
+ mark: false,
639
+ });
640
+
641
+ const markerInsideElements = [floating, ...portalNodes].filter((x): x is Element => x != null);
642
+ const markerCleanup = markOthers(markerInsideElements);
643
+
644
+ return () => {
645
+ markerCleanup();
646
+ ariaHiddenCleanup();
647
+ };
648
+ }, [
649
+ open,
650
+ disabled,
651
+ domReference,
652
+ floating,
653
+ modal,
654
+ portalContext,
655
+ isUntrappedTypeableCombobox,
656
+ tree,
657
+ getNodeId,
658
+ nextFocusableElement,
659
+ previousFocusableElement,
660
+ getResolvedInsideElements,
661
+ ]);
662
+
663
+ // Focus the initial element when the floating element opens.
664
+ useIsoLayoutEffect(() => {
665
+ if (!open || disabled || !isHTMLElement(floatingFocusElement)) {
666
+ return;
667
+ }
668
+
669
+ closeTypeRef.current = '';
670
+ lastInteractionTypeRef.current = '';
671
+
672
+ const doc = ownerDocument(floatingFocusElement);
673
+ const previouslyFocusedElement = activeElement(doc);
674
+
675
+ // Wait for any layout effect state setters to execute to set `tabIndex`.
676
+ queueMicrotask(() => {
677
+ const initialFocusValueOrFn = initialFocusRef.current;
678
+ const resolvedInitialFocus =
679
+ typeof initialFocusValueOrFn === 'function'
680
+ ? initialFocusValueOrFn(openInteractionTypeRef.current || '')
681
+ : initialFocusValueOrFn;
682
+
683
+ // `null` should fallback to default behavior in case of an empty ref.
684
+ if (resolvedInitialFocus === undefined || resolvedInitialFocus === false) {
685
+ return;
686
+ }
687
+
688
+ const focusAlreadyInsideFloatingEl = contains(floatingFocusElement, previouslyFocusedElement);
689
+
690
+ if (focusAlreadyInsideFloatingEl) {
691
+ return;
692
+ }
693
+
694
+ let focusableElements: Array<FocusableElement> | null = null;
695
+ const getDefaultFocusElement = () => {
696
+ if (focusableElements == null) {
697
+ focusableElements = getTabbableContent(floatingFocusElement);
698
+ }
699
+
700
+ return focusableElements[0] || floatingFocusElement;
701
+ };
702
+
703
+ let elToFocus: FocusableElement | null | undefined;
704
+ if (resolvedInitialFocus === true || resolvedInitialFocus === null) {
705
+ elToFocus = getDefaultFocusElement();
706
+ } else {
707
+ elToFocus = resolveRef(resolvedInitialFocus);
708
+ }
709
+ elToFocus = elToFocus || getDefaultFocusElement();
710
+
711
+ const hadFocusInside = contains(floatingFocusElement, activeElement(doc));
712
+
713
+ // enqueueFocus returns a rAF-cancel function; we intentionally don't cancel this focus.
714
+ void enqueueFocus(elToFocus, {
715
+ preventScroll: elToFocus === floatingFocusElement,
716
+ shouldFocus() {
717
+ // This focus is queued on the next animation frame. If the floating element has closed
718
+ // before it runs — e.g. tabbing out of a kept-mounted popup — don't pull focus back
719
+ // onto the initial element after it has legitimately moved elsewhere.
720
+ if (!openRef.current) {
721
+ return false;
722
+ }
723
+
724
+ if (hadFocusInside) {
725
+ return true;
726
+ }
727
+
728
+ const currentActiveElement = activeElement(doc);
729
+ const focusMovedInside =
730
+ currentActiveElement !== elToFocus &&
731
+ contains(floatingFocusElement, currentActiveElement);
732
+
733
+ return !focusMovedInside;
734
+ },
735
+ });
736
+ });
737
+ }, [
738
+ disabled,
739
+ open,
740
+ floatingFocusElement,
741
+ getTabbableContent,
742
+ initialFocusRef,
743
+ openInteractionTypeRef,
744
+ openRef,
745
+ ]);
746
+
747
+ // Track return focus targets and restore focus on unmount/close.
748
+ useIsoLayoutEffect(() => {
749
+ if (disabled || !floatingFocusElement) {
750
+ return undefined;
751
+ }
752
+
753
+ const doc = ownerDocument(floatingFocusElement);
754
+ const elementFocusedBeforeOpen = activeElement(doc);
755
+ // Only an explicit `null` interaction type represents a programmatic open.
756
+ // `undefined` is normalized to `''` by the prop default, so it never reaches
757
+ // here as nullish and is intentionally not treated as programmatic.
758
+ const preferPreviousFocus = openInteractionTypeRef.current == null;
759
+
760
+ addPreviouslyFocusedElement(elementFocusedBeforeOpen);
761
+
762
+ function onOpenChangeLocal(details: FloatingUIOpenChangeDetails) {
763
+ if (!details.open) {
764
+ closeTypeRef.current = getEventType(details.nativeEvent, lastInteractionTypeRef.current);
765
+ }
766
+
767
+ if (details.reason === REASONS.triggerHover && details.nativeEvent.type === 'mouseleave') {
768
+ preventReturnFocusRef.current = true;
769
+ }
770
+
771
+ if (details.reason !== REASONS.outsidePress) {
772
+ return;
773
+ }
774
+
775
+ if (details.nested) {
776
+ preventReturnFocusRef.current = false;
777
+ } else if (
778
+ isVirtualClick(details.nativeEvent as MouseEvent) ||
779
+ isVirtualPointerEvent(details.nativeEvent as PointerEvent)
780
+ ) {
781
+ preventReturnFocusRef.current = false;
782
+ } else {
783
+ // On outside press, only return focus to the reference when the browser supports the
784
+ // `focus({ preventScroll })` option; without it, restoring focus scrolls the page.
785
+ // Chrome on Android and Samsung Internet still don't support `preventScroll`
786
+ // (https://issues.chromium.org/issues/41453122), so the runtime check keeps return
787
+ // focus disabled there to avoid the scroll jump.
788
+ let isPreventScrollSupported = false;
789
+ ownerDocument(floatingFocusElement)
790
+ .createElement('div')
791
+ .focus({
792
+ get preventScroll() {
793
+ isPreventScrollSupported = true;
794
+ return false;
795
+ },
796
+ });
797
+
798
+ if (isPreventScrollSupported) {
799
+ preventReturnFocusRef.current = false;
800
+ } else {
801
+ preventReturnFocusRef.current = true;
802
+ }
803
+ }
804
+ }
805
+
806
+ events.on('openchange', onOpenChangeLocal);
807
+
808
+ function getReturnElement(closeType: InteractionType) {
809
+ const returnFocusValueOrFn = returnFocusRef.current;
810
+ let resolvedReturnFocusValue =
811
+ typeof returnFocusValueOrFn === 'function'
812
+ ? returnFocusValueOrFn(closeType)
813
+ : returnFocusValueOrFn;
814
+
815
+ // `null` should fallback to default behavior in case of an empty ref.
816
+ if (resolvedReturnFocusValue === undefined || resolvedReturnFocusValue === false) {
817
+ return null;
818
+ }
819
+
820
+ if (resolvedReturnFocusValue === null) {
821
+ resolvedReturnFocusValue = true;
822
+ }
823
+
824
+ const referenceReturnElement = domReference?.isConnected ? domReference : null;
825
+ const previousReturnElement =
826
+ elementFocusedBeforeOpen?.isConnected && getNodeName(elementFocusedBeforeOpen) !== 'body'
827
+ ? elementFocusedBeforeOpen
828
+ : null;
829
+
830
+ let defaultReturnElement = preferPreviousFocus
831
+ ? previousReturnElement || referenceReturnElement
832
+ : referenceReturnElement || previousReturnElement;
833
+
834
+ if (!defaultReturnElement) {
835
+ defaultReturnElement = getPreviouslyFocusedElement() || null;
836
+ }
837
+
838
+ if (typeof resolvedReturnFocusValue === 'boolean') {
839
+ return defaultReturnElement;
840
+ }
841
+
842
+ return resolveRef(resolvedReturnFocusValue) || defaultReturnElement || null;
843
+ }
844
+
845
+ return () => {
846
+ events.off('openchange', onOpenChangeLocal);
847
+
848
+ const activeEl = activeElement(doc);
849
+ const insideElements = getResolvedInsideElements();
850
+ const isFocusInsideFloatingTree =
851
+ contains(floating, activeEl) ||
852
+ insideElements.some((element) => element === activeEl || contains(element, activeEl)) ||
853
+ (tree &&
854
+ getNodeChildren(tree.nodesRef.current, getNodeId(), false).some((node) =>
855
+ contains(node.context?.elements.floating, activeEl),
856
+ ));
857
+
858
+ // eslint-disable-next-line react-hooks/exhaustive-deps
859
+ const returnFocusValueOrFn = returnFocusRef.current;
860
+ const closeType = closeTypeRef.current;
861
+ const returnElement = getReturnElement(closeType);
862
+
863
+ queueMicrotask(() => {
864
+ // `returnElement` if it is tabbable, otherwise its first tabbable child,
865
+ // otherwise `returnElement` itself (which may not be tabbable at all).
866
+ const tabbableReturnElement = getFirstTabbableElement(returnElement);
867
+ const hasExplicitReturnFocus = typeof returnFocusValueOrFn !== 'boolean';
868
+
869
+ if (
870
+ returnFocusValueOrFn &&
871
+ !preventReturnFocusRef.current &&
872
+ isHTMLElement(tabbableReturnElement) &&
873
+ // If the focus moved somewhere else after mount, avoid returning focus
874
+ // since it likely entered a different element which should be
875
+ // respected: https://github.com/floating-ui/floating-ui/issues/2607
876
+ (!hasExplicitReturnFocus && tabbableReturnElement !== activeEl && activeEl !== doc.body
877
+ ? isFocusInsideFloatingTree
878
+ : true)
879
+ ) {
880
+ const focusOptions: FocusOptions & { focusVisible?: boolean } = { preventScroll: true };
881
+ if (closeType === 'keyboard') {
882
+ focusOptions.focusVisible = true;
883
+ }
884
+ tabbableReturnElement.focus(focusOptions);
885
+ }
886
+
887
+ preventReturnFocusRef.current = false;
888
+ });
889
+ };
890
+ }, [
891
+ disabled,
892
+ floating,
893
+ floatingFocusElement,
894
+ returnFocusRef,
895
+ openInteractionTypeRef,
896
+ events,
897
+ tree,
898
+ domReference,
899
+ getNodeId,
900
+ getResolvedInsideElements,
901
+ ]);
902
+
903
+ // Safari may randomly scroll to the bottom of the page if an input inside a popup has focus
904
+ // when the popup unmounts from the DOM.
905
+ // By blurring it before the popup unmounts, we can prevent this behavior.
906
+ useIsoLayoutEffect(() => {
907
+ if (!platform.engine.webkit || open || !floating) {
908
+ return;
909
+ }
910
+
911
+ const activeEl = activeElement(ownerDocument(floating));
912
+ if (!isHTMLElement(activeEl) || !isTypeableElement(activeEl)) {
913
+ return;
914
+ }
915
+
916
+ if (contains(floating, activeEl)) {
917
+ activeEl.blur();
918
+ }
919
+ }, [open, floating]);
920
+
921
+ // Synchronize the focus manager state (modal, closeOnFocusOut, open, etc.) to the
922
+ // FloatingPortal context, which uses it to decide whether to render its own guards.
923
+ useIsoLayoutEffect(() => {
924
+ if (disabled || !portalContext) {
925
+ return undefined;
926
+ }
927
+
928
+ portalContext.setFocusManagerState({
929
+ modal,
930
+ closeOnFocusOut,
931
+ open,
932
+ onOpenChange: store.setOpen,
933
+ domReference,
934
+ });
935
+
936
+ return () => {
937
+ portalContext.setFocusManagerState(null);
938
+ };
939
+ }, [disabled, portalContext, modal, open, store, closeOnFocusOut, domReference]);
940
+
941
+ // Keep the floating element tabIndex in sync and clear stale focus records.
942
+ useIsoLayoutEffect(() => {
943
+ if (disabled || !floatingFocusElement) {
944
+ return undefined;
945
+ }
946
+ handleTabIndex(floatingFocusElement);
947
+ return () => {
948
+ queueMicrotask(clearDisconnectedPreviouslyFocusedElements);
949
+ };
950
+ }, [disabled, floatingFocusElement]);
951
+
952
+ const shouldRenderGuards =
953
+ !disabled && (modal ? !isUntrappedTypeableCombobox : true) && (isInsidePortal || modal);
954
+
955
+ return (
956
+ <React.Fragment>
957
+ {shouldRenderGuards && (
958
+ <FocusGuard
959
+ data-type="inside"
960
+ ref={mergedBeforeGuardRef}
961
+ onFocus={(event) => {
962
+ if (modal) {
963
+ const els = getTabbableContent();
964
+ // enqueueFocus returns a rAF-cancel function we don't need here.
965
+ void enqueueFocus(els[els.length - 1]);
966
+ } else if (portalContext?.portalNode) {
967
+ preventReturnFocusRef.current = false;
968
+ if (isOutsideEvent(event, portalContext.portalNode)) {
969
+ const nextTabbable = getNextTabbable(domReference);
970
+ nextTabbable?.focus();
971
+ } else {
972
+ resolveRef(previousFocusableElement ?? portalContext.beforeOutsideRef)?.focus();
973
+ }
974
+ }
975
+ }}
976
+ />
977
+ )}
978
+ {children}
979
+ {shouldRenderGuards && (
980
+ <FocusGuard
981
+ data-type="inside"
982
+ ref={mergedAfterGuardRef}
983
+ onFocus={(event) => {
984
+ if (modal) {
985
+ // enqueueFocus returns a rAF-cancel function we don't need here.
986
+ void enqueueFocus(getTabbableContent()[0]);
987
+ } else if (portalContext?.portalNode) {
988
+ if (closeOnFocusOut) {
989
+ preventReturnFocusRef.current = true;
990
+ }
991
+
992
+ if (isOutsideEvent(event, portalContext.portalNode)) {
993
+ const prevTabbable = getPreviousTabbable(domReference);
994
+ prevTabbable?.focus();
995
+ } else {
996
+ resolveRef(nextFocusableElement ?? portalContext.afterOutsideRef)?.focus();
997
+ }
998
+ }
999
+ }}
1000
+ />
1001
+ )}
1002
+ </React.Fragment>
1003
+ );
1004
+ }