@octanejs/base-ui 0.1.49 → 0.1.51

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 +15 -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
@@ -1,172 +1,261 @@
1
- // Ported from .base-ui/packages/react/src/utils/popups/popupStoreUtils.ts (v1.6.0), octane-adapted.
2
- // The shared hooks + helpers every popup Root/Trigger/Popup routes through: store creation +
3
- // floating-root sync (`usePopupStore`), trigger registration, the open-change sequence
4
- // (`applyPopupOpenChange`), mounted/transition management (`useOpenStateTransitions`), and interaction-
5
- // prop syncing. octane adaptations: every hook threads an explicit slot; `useIsoLayoutEffect` →
6
- // `useLayoutEffect`; `ReactDOM.flushSync` → octane `flushSync`; `useId` → `useBaseUiId`.
7
- import { useRef, useCallback, useLayoutEffect, flushSync, useId } from 'octane';
8
-
9
- import { subSlot } from '../../internal';
10
- import { useStableCallback } from '../useStableCallback';
11
- import { useOnFirstRender } from '../useOnFirstRender';
12
- import { useTransitionStatus } from '../useTransitionStatus';
13
- import { useOpenChangeComplete } from '../useOpenChangeComplete';
14
- import { EMPTY_OBJECT } from '../empty';
15
- import { FOCUSABLE_ATTRIBUTE } from '../floating/constants';
16
- import { useFloatingParentNodeId } from '../floating/FloatingTree';
17
- import { useSyncedFloatingRootContext } from '../floating/useSyncedFloatingRootContext';
18
- import { createChangeEventDetails, REASONS } from '../createChangeEventDetails';
19
- import type { ReactStore } from '../store/ReactStore';
1
+ /** @jsxImportSource octane */
2
+ 'use client';
3
+ import * as React from 'octane';
4
+ import * as ReactDOM from 'octane';
5
+ import type { ReactStore } from '@octanejs/base-ui-utils/store';
6
+ import { EMPTY_OBJECT } from '@octanejs/base-ui-utils/empty';
7
+ import type { InteractionType } from '@octanejs/base-ui-utils/useEnhancedClickHandler';
8
+ import { useId } from '@octanejs/base-ui-utils/useId';
9
+ import { useStableCallback } from '@octanejs/base-ui-utils/useStableCallback';
10
+ import { useIsoLayoutEffect } from '@octanejs/base-ui-utils/useIsoLayoutEffect';
11
+ import { useRefWithInit } from '@octanejs/base-ui-utils/useRefWithInit';
12
+ import { FOCUSABLE_ATTRIBUTE } from '../../floating-ui-react/utils/constants';
13
+ import { useFloatingParentNodeId } from '../../floating-ui-react/components/FloatingTree.tsrx';
20
14
  import {
15
+ useSyncedFloatingRootContext,
16
+ type SyncedFloatingRootContextStore,
17
+ } from '../../floating-ui-react/hooks/useSyncedFloatingRootContext';
18
+ import { useTransitionStatus } from '../../internals/useTransitionStatus';
19
+ import { useOpenChangeComplete } from '../../internals/useOpenChangeComplete.tsrx';
20
+ import type { HTMLProps } from '../../internals/types';
21
+ import {
22
+ createChangeEventDetails,
23
+ type BaseUIChangeEventDetails,
24
+ } from '../../internals/createBaseUIEventDetails';
25
+ import { REASONS } from '../../internals/reasons';
26
+ import type {
21
27
  PopupStoreState,
22
28
  PopupStoreContext,
23
29
  popupStoreSelectors,
24
- PopupStoreSelectors,
30
+ PopupTriggerDataStore,
25
31
  } from './store';
26
32
 
27
- export type InteractionType = 'mouse' | 'touch' | 'pen' | 'keyboard';
28
-
29
33
  export const FOCUSABLE_POPUP_PROPS = {
30
34
  tabIndex: -1,
31
35
  [FOCUSABLE_ATTRIBUTE]: '',
32
- };
33
-
34
- /** The default `initialFocus` resolver: focus the popup itself when opened by touch, else default. */
35
- export function createDefaultInitialFocus(popupRef: { current: HTMLElement | null }) {
36
+ } satisfies HTMLProps<HTMLElement> & Record<typeof FOCUSABLE_ATTRIBUTE, string>;
37
+
38
+ /**
39
+ * Returns the default `initialFocus` resolver for a popup. When opened by touch it focuses the
40
+ * popup element itself to prevent the virtual keyboard from opening (required for Android
41
+ * specifically; iOS handles this automatically). Otherwise it falls back to the default behavior.
42
+ */
43
+ export function createDefaultInitialFocus(popupRef: React.RefObject<HTMLElement | null>) {
36
44
  return (interactionType: InteractionType) =>
37
45
  interactionType === 'touch' ? popupRef.current : true;
38
46
  }
39
47
 
40
- type AnyPopupStore = ReactStore<any, PopupStoreContext<any>, PopupStoreSelectors> & {
41
- setOpen(open: boolean, eventDetails: any): void;
42
- };
48
+ type PopupStoreWithOpen<
49
+ State extends PopupStoreState<unknown>,
50
+ SetOpenEventDetails extends BaseUIChangeEventDetails<string>,
51
+ > = PopupTriggerDataStore<State> &
52
+ Pick<SyncedFloatingRootContextStore<State>, 'useSyncedValue'> & {
53
+ setOpen(open: boolean, eventDetails: SetOpenEventDetails): void;
54
+ };
55
+
56
+ /**
57
+ * The subset of a popup handle that a Root needs to bind its store to. Both the real handle classes
58
+ * and any test double satisfy it.
59
+ */
60
+ export interface PopupRootStoreHandle<Store> {
61
+ attachStore(store: Store): () => void;
62
+ }
43
63
 
44
- export function usePopupStore<Store extends AnyPopupStore>(
45
- externalStore: Store | undefined,
64
+ /**
65
+ * Creates and owns a popup store on behalf of a Root part. The store is created exactly once, with
66
+ * controlled props and root state synced separately after creation. Sets up the synced floating
67
+ * root context and returns the store.
68
+ *
69
+ * @param createStore Factory that builds the store. Called exactly once, receiving the floating id
70
+ * and whether the popup is nested inside another floating element, both resolved on the first render.
71
+ * @param treatPopupAsFloatingElement Whether the popup element is passed to Floating UI as the
72
+ * floating element instead of the default positioner.
73
+ */
74
+ export function usePopupRootStore<
75
+ State extends PopupStoreState<unknown>,
76
+ SetOpenEventDetails extends BaseUIChangeEventDetails<string>,
77
+ Store extends PopupStoreWithOpen<State, SetOpenEventDetails>,
78
+ >(
46
79
  createStore: (floatingId: string | undefined, nested: boolean) => Store,
47
- treatPopupAsFloatingElement: boolean,
48
- slot: symbol | undefined,
49
- ): { store: Store; internalStore: Store | null } {
50
- // Raw `useId` (no `base-ui-` prefix), matching Base UI's `@base-ui/utils/useId`.
51
- const floatingId = useId(subSlot(slot, 'fid'));
80
+ treatPopupAsFloatingElement = false,
81
+ ): Store {
82
+ const floatingId = useId();
52
83
  const nested = useFloatingParentNodeId() != null;
53
84
 
54
- const internalStoreRef = useRef<Store | null>(null, subSlot(slot, 'store'));
55
- if (externalStore === undefined && internalStoreRef.current === null) {
56
- internalStoreRef.current = createStore(floatingId, nested);
57
- }
85
+ const store = useRefWithInit(() => createStore(floatingId, nested)).current;
58
86
 
59
- const store = externalStore ?? internalStoreRef.current!;
87
+ useSyncedFloatingRootContext({
88
+ popupStore: store,
89
+ treatPopupAsFloatingElement,
90
+ floatingRootContext: store.state.floatingRootContext,
91
+ floatingId,
92
+ nested,
93
+ onOpenChange: store.setOpen,
94
+ });
60
95
 
61
- useSyncedFloatingRootContext(
62
- {
63
- popupStore: store,
64
- treatPopupAsFloatingElement,
65
- floatingRootContext: store.state.floatingRootContext,
66
- floatingId,
67
- nested,
68
- onOpenChange: store.setOpen,
69
- },
70
- subSlot(slot, 'synced'),
71
- );
96
+ return store;
97
+ }
72
98
 
73
- return { store, internalStore: internalStoreRef.current };
99
+ /**
100
+ * Attaches a Root's store to a handle for this component's committed lifetime. Popup Roots render
101
+ * it before their interactions and user children so its layout effect runs before descendant layout
102
+ * effects. This lets descendants call the handle during the Root's initial commit without attaching
103
+ * during render, which would leak suspended or abandoned stores. Store subscribers are notified by
104
+ * `attachStore` in this ordinary layout phase, where React permits synchronous updates.
105
+ *
106
+ * Popup Roots must render this component only when a handle is present so handle-less Roots avoid
107
+ * mounting an extra fiber and layout effect.
108
+ */
109
+ export function PopupHandleAttachment<Store>({
110
+ handle,
111
+ store,
112
+ }: {
113
+ handle: PopupRootStoreHandle<Store>;
114
+ store: Store;
115
+ }) {
116
+ useIsoLayoutEffect(() => {
117
+ return handle.attachStore(store);
118
+ }, [handle, store]);
119
+
120
+ return null;
74
121
  }
75
122
 
76
- /** A callback ref that registers/unregisters the trigger element in the store. */
123
+ function syncTriggerCount(store: PopupTriggerDataStore<PopupStoreState<unknown>>) {
124
+ const triggerCount = store.context.triggerElements.size;
125
+ if (store.select('open') && store.state.triggerCount !== triggerCount) {
126
+ store.set('triggerCount', triggerCount);
127
+ }
128
+ }
129
+
130
+ /**
131
+ * Returns a stable callback ref that registers/unregisters the trigger element in the store.
132
+ *
133
+ * Stable so a downstream ref merger that retains the callback it was first given still reaches the
134
+ * trigger's current store. The registration is tracked as a `(store, id, element)` triple, so
135
+ * unregistering targets the store the element was actually registered in.
136
+ *
137
+ * Since the callback never changes, the caller must re-run it from a layout effect keyed on
138
+ * `[store, id]` to migrate an already-registered element. That effect is also what registers the
139
+ * element in the first place when `id` only resolves after the first commit (React 17's `useId`
140
+ * fallback), because the register call made while the id is still `undefined` does nothing.
141
+ *
142
+ * @param id Id of the trigger.
143
+ * @param store The Store instance where the trigger should be registered.
144
+ */
77
145
  export function useTriggerRegistration<State extends PopupStoreState<unknown>>(
78
146
  id: string | undefined,
79
- store: ReactStore<State, PopupStoreContext<never>, PopupStoreSelectors>,
80
- slot: symbol | undefined,
81
- ): (element: Element | null) => void {
82
- const registeredElementIdRef = useRef<string | null>(null, subSlot(slot, 'rid'));
83
- const registeredElementRef = useRef<Element | null>(null, subSlot(slot, 'rel'));
84
-
85
- return useCallback(
86
- (element: Element | null) => {
87
- if (id === undefined) {
88
- return;
89
- }
90
-
91
- let shouldSyncTriggerCount = false;
147
+ store: PopupTriggerDataStore<State>,
148
+ ) {
149
+ const registrationRef = React.useRef<{
150
+ store: PopupTriggerDataStore<State>;
151
+ id: string;
152
+ element: Element;
153
+ } | null>(null);
92
154
 
93
- if (registeredElementIdRef.current !== null) {
94
- const registeredId = registeredElementIdRef.current;
95
- const registeredElement = registeredElementRef.current;
96
- const currentElement = store.context.triggerElements.getById(registeredId);
155
+ return useStableCallback((element: Element | null) => {
156
+ const registration = registrationRef.current;
97
157
 
98
- if (registeredElement && currentElement === registeredElement) {
99
- store.context.triggerElements.delete(registeredId);
100
- shouldSyncTriggerCount = true;
101
- }
102
-
103
- registeredElementIdRef.current = null;
104
- registeredElementRef.current = null;
158
+ if (registration !== null) {
159
+ if (
160
+ registration.element === element &&
161
+ registration.store === store &&
162
+ registration.id === id
163
+ ) {
164
+ // Already registered where it belongs, so the caller's migration effect is free on mount.
165
+ return;
105
166
  }
106
167
 
107
- if (element !== null) {
108
- registeredElementIdRef.current = id;
109
- registeredElementRef.current = element;
110
- store.context.triggerElements.add(id, element);
111
- shouldSyncTriggerCount = true;
168
+ registrationRef.current = null;
169
+ const registeredStore = registration.store;
170
+ if (
171
+ registeredStore.context.triggerElements.getById(registration.id) === registration.element
172
+ ) {
173
+ registeredStore.context.triggerElements.delete(registration.id);
174
+ syncTriggerCount(registeredStore);
112
175
  }
176
+ }
113
177
 
114
- if (shouldSyncTriggerCount) {
115
- const triggerCount = store.context.triggerElements.size;
116
- if (store.select('open') && store.state.triggerCount !== triggerCount) {
117
- store.set('triggerCount', triggerCount);
118
- }
119
- }
120
- },
121
- [store, id],
122
- subSlot(slot, 'cb'),
123
- );
178
+ if (element !== null && id !== undefined) {
179
+ registrationRef.current = { store, id, element };
180
+ store.context.triggerElements.add(id, element);
181
+ syncTriggerCount(store);
182
+ }
183
+ });
124
184
  }
125
185
 
126
- export function setPopupOpenState(
127
- state: Partial<PopupStoreState<unknown>>,
186
+ type PopupOpenState = Pick<
187
+ PopupStoreState<unknown>,
188
+ 'open' | 'preventUnmountingOnClose' | 'activeTriggerId' | 'activeTriggerElement'
189
+ >;
190
+
191
+ export function createPopupOpenState(
192
+ state: PopupOpenState,
128
193
  open: boolean,
129
194
  trigger: Element | undefined,
130
195
  preventUnmountOnClose = false,
131
- ) {
196
+ ): PopupOpenState {
197
+ let preventUnmountingOnClose = state.preventUnmountingOnClose;
132
198
  if (open) {
133
- state.preventUnmountingOnClose = false;
199
+ // Opening starts a new close cycle, so clear any previous request to keep the popup mounted.
200
+ preventUnmountingOnClose = false;
134
201
  } else if (preventUnmountOnClose) {
135
- state.preventUnmountingOnClose = true;
202
+ preventUnmountingOnClose = true;
136
203
  }
137
204
 
138
205
  const triggerId = trigger?.id ?? null;
206
+ let activeTriggerId = state.activeTriggerId;
207
+ let activeTriggerElement = state.activeTriggerElement;
139
208
 
209
+ // If a popup is closing, the `trigger` may be undefined.
210
+ // We want to keep the previous value so that exit animations are played and focus is returned correctly.
140
211
  if (triggerId || open) {
141
- state.activeTriggerId = triggerId;
142
- state.activeTriggerElement = trigger ?? null;
212
+ activeTriggerId = triggerId;
213
+ activeTriggerElement = trigger ?? null;
143
214
  }
215
+
216
+ return {
217
+ open,
218
+ preventUnmountingOnClose,
219
+ activeTriggerId,
220
+ activeTriggerElement,
221
+ };
144
222
  }
145
223
 
146
224
  export function attachPreventUnmountOnClose(eventDetails: { preventUnmountOnClose(): void }) {
147
225
  let preventUnmountOnClose = false;
226
+
148
227
  eventDetails.preventUnmountOnClose = () => {
149
228
  preventUnmountOnClose = true;
150
229
  };
230
+
151
231
  return () => preventUnmountOnClose;
152
232
  }
153
233
 
154
- /** The shared open-change sequence (notify → cancel-check → dispatch → commit). Non-hook. */
234
+ /**
235
+ * Runs the shared open-change sequence for a popup store: notifies `onOpenChange`,
236
+ * honors cancellation, dispatches the floating root change, maps the reason to an
237
+ * `instantType`, and commits the state update (synchronously for hover so
238
+ * `getAnimations()` observes it). Stores supply their own differences via
239
+ * `extraState` (e.g. the last change reason) and `onBeforeDispatch` (e.g. updating
240
+ * inline-rect coordinates).
241
+ */
155
242
  export function applyPopupOpenChange<
156
243
  State extends PopupStoreState<unknown> & {
157
244
  instantType?: 'delay' | 'dismiss' | 'focus' | undefined;
158
245
  },
246
+ EventDetails extends BaseUIChangeEventDetails<string>,
247
+ ExtraKey extends keyof State = never,
159
248
  >(
160
249
  store: {
161
- readonly context: Pick<PopupStoreContext<any>, 'onOpenChange'>;
162
- readonly state: Pick<PopupStoreState<unknown>, 'floatingRootContext'>;
163
- update(state: Partial<State>): void;
250
+ readonly context: Pick<PopupStoreContext<EventDetails>, 'onOpenChange'>;
251
+ readonly state: State;
252
+ update<const Key extends keyof State>(state: Pick<State, Key>): void;
164
253
  },
165
254
  nextOpen: boolean,
166
- eventDetails: any & { preventUnmountOnClose(): void },
255
+ eventDetails: EventDetails & { preventUnmountOnClose(): void },
167
256
  options: {
168
257
  onBeforeDispatch?: (() => void) | undefined;
169
- extraState?: Partial<State> | undefined;
258
+ extraState?: Pick<State, ExtraKey> | undefined;
170
259
  } = {},
171
260
  ): void {
172
261
  const reason = eventDetails.reason;
@@ -188,9 +277,17 @@ export function applyPopupOpenChange<
188
277
  store.state.floatingRootContext.dispatchOpenChange(nextOpen, eventDetails);
189
278
 
190
279
  const changeState = () => {
191
- const updatedState: Partial<PopupStoreState<unknown>> & {
192
- instantType?: 'delay' | 'dismiss' | 'focus' | undefined;
193
- } = { ...options.extraState, open: nextOpen };
280
+ const popupOpenState = createPopupOpenState(
281
+ store.state,
282
+ nextOpen,
283
+ eventDetails.trigger,
284
+ shouldPreventUnmountOnClose(),
285
+ );
286
+
287
+ const updatedState = { ...options.extraState, ...popupOpenState } as Pick<
288
+ State,
289
+ keyof PopupOpenState | ExtraKey | 'instantType'
290
+ >;
194
291
 
195
292
  if (isFocusOpen) {
196
293
  updatedState.instantType = 'focus';
@@ -200,285 +297,350 @@ export function applyPopupOpenChange<
200
297
  updatedState.instantType = undefined;
201
298
  }
202
299
 
203
- setPopupOpenState(updatedState, nextOpen, eventDetails.trigger, shouldPreventUnmountOnClose());
204
- store.update(updatedState as Partial<State>);
300
+ store.update(updatedState);
205
301
  };
206
302
 
207
303
  if (isHover) {
208
- flushSync(changeState);
304
+ // Flush synchronously for hover so `node.getAnimations()` sees the new state.
305
+ ReactDOM.flushSync(changeState);
209
306
  } else {
210
307
  changeState();
211
308
  }
212
309
  }
213
310
 
214
- export function useInitialOpenSync<State extends PopupStoreState<unknown>>(
215
- store: ReactStore<State, PopupStoreContext<never>, PopupStoreSelectors>,
216
- openProp: boolean | undefined,
217
- defaultOpen: boolean,
218
- defaultTriggerId: string | null,
219
- slot: symbol | undefined,
220
- ) {
221
- useOnFirstRender(
222
- () => {
223
- if (openProp === undefined && store.state.open === false && defaultOpen) {
224
- store.state = {
225
- ...store.state,
226
- open: true,
227
- activeTriggerId: defaultTriggerId,
228
- preventUnmountingOnClose: false,
229
- };
230
- }
231
- },
232
- subSlot(slot, 'first'),
233
- );
234
- }
235
-
236
- export function useTriggerDataForwarding<State extends PopupStoreState<unknown>>(
311
+ /**
312
+ * Sets up trigger data forwarding to the store.
313
+ *
314
+ * @param triggerId Id of the trigger.
315
+ * @param triggerElementRef Ref for the trigger DOM element.
316
+ * @param store The Store instance managing the popup state.
317
+ * @param stateUpdates An object with state updates to apply when the trigger is active.
318
+ */
319
+ export function useTriggerDataForwarding<
320
+ State extends PopupStoreState<unknown>,
321
+ const Key extends keyof Omit<State, 'activeTriggerId' | 'activeTriggerElement'>,
322
+ >(
237
323
  triggerId: string | undefined,
238
- triggerElementRef: { current: Element | null },
239
- store: ReactStore<State, PopupStoreContext<never>, typeof popupStoreSelectors>,
240
- stateUpdates: Partial<State>,
241
- slot: symbol | undefined,
324
+ triggerElementRef: React.RefObject<Element | null>,
325
+ store: PopupTriggerDataStore<State>,
326
+ stateUpdates: Pick<State, Key>,
242
327
  ) {
243
- const isMountedByThisTrigger = store.useState(
244
- 'isMountedByTrigger',
245
- subSlot(slot, 'mbt'),
246
- triggerId,
247
- );
248
-
249
- const baseRegisterTrigger = useTriggerRegistration(triggerId, store, subSlot(slot, 'reg'));
250
-
251
- const registerTrigger = useStableCallback(
252
- (element: Element | null) => {
253
- baseRegisterTrigger(element);
254
-
255
- if (!element) {
256
- return;
257
- }
258
-
259
- const open = store.select('open');
260
- const activeTriggerId = store.select('activeTriggerId');
261
-
262
- if (activeTriggerId === triggerId) {
263
- store.update({
264
- activeTriggerElement: element,
265
- ...(open ? stateUpdates : null),
266
- } as Partial<State>);
267
- return;
268
- }
269
-
270
- if (activeTriggerId == null && open) {
271
- store.update({
272
- activeTriggerId: triggerId,
273
- activeTriggerElement: element,
274
- ...stateUpdates,
275
- } as Partial<State>);
276
- }
277
- },
278
- subSlot(slot, 'regcb'),
279
- );
328
+ const isMountedByThisTrigger = store.useState('isMountedByTrigger', triggerId);
329
+
330
+ const baseRegisterTrigger = useTriggerRegistration(triggerId, store);
331
+
332
+ // Applies trigger-owned state (active-trigger ownership and payload) when the trigger registers.
333
+ // Stable so payload/`stateUpdates` changes do not change the ref identity (which would needlessly
334
+ // churn registration); it reads the latest closure values when invoked.
335
+ const applyTriggerData = useStableCallback((element: Element) => {
336
+ const open = store.select('open');
337
+ const activeTriggerId = store.select('activeTriggerId');
338
+
339
+ if (activeTriggerId === triggerId) {
340
+ const changes = {
341
+ activeTriggerElement: element,
342
+ ...(open ? stateUpdates : null),
343
+ } as Pick<Readonly<State>, Key | 'activeTriggerElement'>;
344
+ store.update(changes);
345
+ return;
346
+ }
280
347
 
281
- useLayoutEffect(
282
- () => {
283
- if (isMountedByThisTrigger) {
284
- store.update({
285
- activeTriggerElement: triggerElementRef.current,
286
- ...stateUpdates,
287
- } as Partial<State>);
288
- }
289
- },
290
- [isMountedByThisTrigger, store, triggerElementRef, ...Object.values(stateUpdates)],
291
- subSlot(slot, 'e'),
292
- );
348
+ if (activeTriggerId == null && open) {
349
+ // If a popup is already open, a detached trigger can mount before any active trigger
350
+ // has been established. Claim the first registered trigger so trigger-owned focus
351
+ // management and ARIA relationships work.
352
+ const changes = {
353
+ activeTriggerId: triggerId ?? null,
354
+ activeTriggerElement: element,
355
+ ...stateUpdates,
356
+ } as Pick<Readonly<State>, Key | 'activeTriggerId' | 'activeTriggerElement'>;
357
+ store.update(changes);
358
+ }
359
+ });
360
+
361
+ // Stable, so the merged ref on the rendered element keeps its identity for the trigger's whole
362
+ // lifetime.
363
+ const registerTrigger = useStableCallback((element: Element | null) => {
364
+ baseRegisterTrigger(element);
365
+ if (element) {
366
+ applyTriggerData(element);
367
+ }
368
+ });
369
+
370
+ // A stable ref does not re-fire on a store or id change, so migrate here instead: unregister from
371
+ // the previous store, then register the element the trigger still renders into the current one.
372
+ useIsoLayoutEffect(() => {
373
+ registerTrigger(triggerElementRef.current);
374
+ return () => registerTrigger(null);
375
+ }, [registerTrigger, triggerElementRef, store, triggerId]);
376
+
377
+ useIsoLayoutEffect(() => {
378
+ if (isMountedByThisTrigger) {
379
+ const changes = {
380
+ activeTriggerElement: triggerElementRef.current,
381
+ ...stateUpdates,
382
+ } as Pick<Readonly<State>, Key | 'activeTriggerElement'>;
383
+ store.update(changes);
384
+ }
385
+ // eslint-disable-next-line react-hooks/exhaustive-deps
386
+ }, [isMountedByThisTrigger, store, triggerElementRef, ...Object.values(stateUpdates)]);
293
387
 
294
388
  return { registerTrigger, isMountedByThisTrigger };
295
389
  }
296
390
 
391
+ export type PayloadChildRenderFunction<Payload> = (arg: {
392
+ payload: Payload | undefined;
393
+ }) => React.OctaneNode;
394
+
395
+ /**
396
+ * Keeps trigger registration state synchronized while the popup is open.
397
+ *
398
+ * When a popup opens without an explicit trigger id and exactly one trigger is registered, that
399
+ * trigger is claimed as the active trigger. When the active trigger id is still registered but its
400
+ * element changed, the active element is refreshed. When the active trigger id is missing from the
401
+ * registry but the same element is still registered under a different id (e.g. the rendered trigger
402
+ * carries its own DOM `id` that differs from Base UI's internal trigger id), the active id is
403
+ * reassociated to the registered id instead of being treated as lost. When the active trigger
404
+ * unregisters, the default path preserves existing ownership so non-closing popup families do not
405
+ * silently claim a different trigger while staying open.
406
+ *
407
+ * If `closeOnActiveTriggerUnmount` is enabled, unregistering a previously resolved active trigger
408
+ * requests a close after a microtask so a same-tick replacement trigger with the same id can
409
+ * register first. An active trigger id that has not matched a registered trigger yet is treated as
410
+ * pending and does not request a close.
411
+ *
412
+ * This should be called on the Root part.
413
+ *
414
+ * @param store The Store instance managing the popup state.
415
+ * @param options Options for active trigger unmount behavior.
416
+ */
297
417
  export function useImplicitActiveTrigger<State extends PopupStoreState<unknown>>(
298
- store: ReactStore<State, PopupStoreContext<never>, typeof popupStoreSelectors> & {
299
- setOpen(open: boolean, eventDetails: any): void;
300
- },
301
- options: { closeOnActiveTriggerUnmount?: boolean | undefined },
302
- slot: symbol | undefined,
418
+ store: PopupStoreWithOpen<State, BaseUIChangeEventDetails<typeof REASONS.none>>,
419
+ options: {
420
+ closeOnActiveTriggerUnmount?: boolean | undefined;
421
+ } = {},
303
422
  ) {
304
423
  const { closeOnActiveTriggerUnmount = false } = options;
305
- const open = store.useState('open', subSlot(slot, 'open'));
306
- const reactiveTriggerCount = store.useState('triggerCount', subSlot(slot, 'tc'));
307
-
308
- useLayoutEffect(
309
- () => {
310
- if (!open) {
311
- if (store.state.triggerCount !== 0) {
312
- store.set('triggerCount', 0);
313
- }
314
- return;
424
+ // Distinguishes a trigger that unmounted from a new active trigger that has not hydrated yet.
425
+ const resolvedActiveTriggerIdRef = React.useRef<string | null>(null);
426
+ const open = store.useState('open');
427
+ const reactiveTriggerCount = store.useState('triggerCount');
428
+ // Subscribe to the active trigger id so the reconciliation below reruns when ownership moves to
429
+ // another trigger while the popup stays open (e.g. a focus/hover handoff between triggers).
430
+ const activeTriggerId = store.useState('activeTriggerId');
431
+ // Subscribe to the active trigger element so the reconciliation reruns when a pending active
432
+ // trigger registers in a commit where the trigger count nets out unchanged (registration
433
+ // forwards the element to the store when the registering trigger matches the active id).
434
+ // Without this, the id would never be marked resolved and a later genuine unmount would be
435
+ // misclassified as pending, disabling `closeOnActiveTriggerUnmount`.
436
+ const reactiveActiveTriggerElement = store.useState('activeTriggerElement');
437
+
438
+ useIsoLayoutEffect(() => {
439
+ if (!open) {
440
+ resolvedActiveTriggerIdRef.current = null;
441
+ if (store.state.triggerCount !== 0) {
442
+ store.set('triggerCount', 0);
315
443
  }
444
+ return;
445
+ }
316
446
 
317
- const triggerCount = store.context.triggerElements.size;
318
- const stateUpdates: Partial<PopupStoreState<unknown>> = {};
447
+ const triggerCount = store.context.triggerElements.size;
448
+ const stateUpdates = {} as Pick<
449
+ State,
450
+ 'triggerCount' | 'activeTriggerId' | 'activeTriggerElement'
451
+ >;
319
452
 
320
- if (store.state.triggerCount !== triggerCount) {
321
- stateUpdates.triggerCount = triggerCount;
322
- }
453
+ if (store.state.triggerCount !== triggerCount) {
454
+ stateUpdates.triggerCount = triggerCount;
455
+ }
323
456
 
324
- const activeTriggerId = store.select('activeTriggerId');
325
- let lostActiveTriggerId: string | null = null;
457
+ const currentActiveTriggerId = store.select('activeTriggerId');
458
+ let lostActiveTriggerId: string | null = null;
459
+
460
+ if (currentActiveTriggerId) {
461
+ const activeTriggerElement = store.context.triggerElements.getById(currentActiveTriggerId);
462
+ if (!activeTriggerElement) {
463
+ for (const [triggerId, triggerElement] of store.context.triggerElements.entries()) {
464
+ if (triggerElement === store.state.activeTriggerElement) {
465
+ stateUpdates.activeTriggerId = triggerId;
466
+ stateUpdates.activeTriggerElement = triggerElement;
467
+ resolvedActiveTriggerIdRef.current = triggerId;
468
+ break;
469
+ }
470
+ }
326
471
 
327
- if (activeTriggerId) {
328
- const activeTriggerElement = store.context.triggerElements.getById(activeTriggerId);
329
- if (!activeTriggerElement) {
330
- lostActiveTriggerId = activeTriggerId;
331
- } else if (activeTriggerElement !== store.state.activeTriggerElement) {
472
+ if (stateUpdates.activeTriggerId === undefined) {
473
+ if (resolvedActiveTriggerIdRef.current === currentActiveTriggerId) {
474
+ lostActiveTriggerId = currentActiveTriggerId;
475
+ } else {
476
+ resolvedActiveTriggerIdRef.current = null;
477
+ }
478
+ }
479
+ } else {
480
+ resolvedActiveTriggerIdRef.current = currentActiveTriggerId;
481
+ if (activeTriggerElement !== store.state.activeTriggerElement) {
332
482
  stateUpdates.activeTriggerElement = activeTriggerElement;
333
483
  }
334
484
  }
485
+ } else {
486
+ resolvedActiveTriggerIdRef.current = null;
487
+ }
335
488
 
336
- if (!lostActiveTriggerId && !activeTriggerId && triggerCount === 1) {
337
- const iteratorResult = store.context.triggerElements.entries().next();
338
- if (!iteratorResult.done) {
339
- const [implicitTriggerId, implicitTriggerElement] = iteratorResult.value;
340
- stateUpdates.activeTriggerId = implicitTriggerId;
341
- stateUpdates.activeTriggerElement = implicitTriggerElement;
342
- }
489
+ if (!lostActiveTriggerId && !currentActiveTriggerId && triggerCount === 1) {
490
+ const iteratorResult = store.context.triggerElements.entries().next();
491
+ if (!iteratorResult.done) {
492
+ const [implicitTriggerId, implicitTriggerElement] = iteratorResult.value;
493
+ stateUpdates.activeTriggerId = implicitTriggerId;
494
+ stateUpdates.activeTriggerElement = implicitTriggerElement;
495
+ resolvedActiveTriggerIdRef.current = implicitTriggerId;
343
496
  }
497
+ }
344
498
 
345
- if (
346
- stateUpdates.triggerCount !== undefined ||
347
- stateUpdates.activeTriggerId !== undefined ||
348
- stateUpdates.activeTriggerElement !== undefined
349
- ) {
350
- store.update(stateUpdates as Partial<State>);
351
- }
499
+ if (
500
+ stateUpdates.triggerCount !== undefined ||
501
+ stateUpdates.activeTriggerId !== undefined ||
502
+ stateUpdates.activeTriggerElement !== undefined
503
+ ) {
504
+ store.update(stateUpdates);
505
+ }
352
506
 
353
- if (lostActiveTriggerId) {
354
- if (closeOnActiveTriggerUnmount) {
355
- queueMicrotask(() => {
356
- if (
357
- store.select('open') &&
358
- store.select('activeTriggerId') === lostActiveTriggerId &&
359
- !store.context.triggerElements.getById(lostActiveTriggerId)
360
- ) {
361
- const eventDetails = createChangeEventDetails(REASONS.none);
362
- store.setOpen(false, eventDetails);
363
- if (!eventDetails.isCanceled) {
364
- store.update({
365
- activeTriggerId: null,
366
- activeTriggerElement: null,
367
- } as Partial<State>);
368
- }
507
+ if (lostActiveTriggerId) {
508
+ if (closeOnActiveTriggerUnmount) {
509
+ // Defer so a same-tick replacement trigger with the same id can register first.
510
+ queueMicrotask(() => {
511
+ if (
512
+ store.select('open') &&
513
+ store.select('activeTriggerId') === lostActiveTriggerId &&
514
+ !store.context.triggerElements.getById(lostActiveTriggerId)
515
+ ) {
516
+ const eventDetails = createChangeEventDetails(REASONS.none);
517
+ store.setOpen(false, eventDetails);
518
+ // If closing is canceled, keep the previous active trigger ownership for the
519
+ // still-open popup instead of claiming another trigger implicitly.
520
+ if (!eventDetails.isCanceled) {
521
+ store.update({
522
+ activeTriggerId: null,
523
+ activeTriggerElement: null,
524
+ });
369
525
  }
370
- });
371
- }
526
+ }
527
+ });
372
528
  }
373
- },
374
- [open, store, reactiveTriggerCount, closeOnActiveTriggerUnmount],
375
- subSlot(slot, 'e'),
376
- );
529
+ }
530
+ }, [
531
+ open,
532
+ store,
533
+ reactiveTriggerCount,
534
+ activeTriggerId,
535
+ reactiveActiveTriggerElement,
536
+ closeOnActiveTriggerUnmount,
537
+ ]);
377
538
  }
378
539
 
540
+ /**
541
+ * Manages the mounted state of the popup.
542
+ * Sets up the transition status listeners and handles unmounting when needed.
543
+ * Updates the `mounted`, `transitionStatus`, and `preventUnmountingOnClose` states in the store.
544
+ *
545
+ * @param open Whether the popup is open.
546
+ * @param store The Store instance managing the popup state.
547
+ * @param onUnmount Optional callback to be called when the popup is unmounted.
548
+ * @param animateInitialOpen Whether a popup that mounts already open should still play its enter
549
+ * transition. Defaults to `false`, so content that was open on the first render (a `defaultOpen`
550
+ * popup on page load, SSR'd markup) appears without animating. Opt in for popups whose subtree
551
+ * only mounts in response to something the user did, such as a submenu inside a menu popup.
552
+ *
553
+ * @returns A function to forcibly unmount the popup.
554
+ */
379
555
  export function useOpenStateTransitions<State extends PopupStoreState<unknown>>(
380
556
  open: boolean,
381
557
  store: ReactStore<State, PopupStoreContext<never>, typeof popupStoreSelectors>,
382
- onUnmount: (() => void) | undefined,
383
- slot: symbol | undefined,
558
+ onUnmount?: () => void,
559
+ animateInitialOpen?: boolean,
384
560
  ) {
385
561
  const { mounted, setMounted, transitionStatus } = useTransitionStatus(
386
562
  open,
387
- undefined,
388
- undefined,
389
- subSlot(slot, 'ts'),
390
- );
391
- const preventUnmountingOnClose = store.useState(
392
- 'preventUnmountingOnClose',
393
- subSlot(slot, 'puoc'),
563
+ false,
564
+ false,
565
+ animateInitialOpen,
394
566
  );
567
+ const preventUnmountingOnClose = store.useState('preventUnmountingOnClose');
568
+ // Opening starts a new close cycle. Clear during render so the close-completion hook below
569
+ // reads the synchronized value on the same pass.
395
570
  const syncedPreventUnmountingOnClose = open ? false : preventUnmountingOnClose;
396
571
 
397
- store.useSyncedValues(
398
- {
399
- mounted,
400
- transitionStatus,
401
- preventUnmountingOnClose: syncedPreventUnmountingOnClose,
402
- } as Partial<State>,
403
- subSlot(slot, 'sync'),
404
- );
405
-
406
- const forceUnmount = useStableCallback(
407
- () => {
408
- setMounted(false);
409
- store.update({
410
- activeTriggerId: null,
411
- activeTriggerElement: null,
412
- mounted: false,
413
- preventUnmountingOnClose: false,
414
- } as Partial<State>);
415
- onUnmount?.();
416
- store.context.onOpenChangeComplete?.(false);
572
+ store.useSyncedValues({
573
+ mounted,
574
+ transitionStatus,
575
+ preventUnmountingOnClose: syncedPreventUnmountingOnClose,
576
+ });
577
+
578
+ const forceUnmount = useStableCallback(() => {
579
+ setMounted(false);
580
+ store.update({
581
+ activeTriggerId: null,
582
+ activeTriggerElement: null,
583
+ mounted: false,
584
+ preventUnmountingOnClose: false,
585
+ });
586
+ onUnmount?.();
587
+ store.context.onOpenChangeComplete?.(false);
588
+ });
589
+
590
+ useOpenChangeComplete({
591
+ enabled: mounted && !open && !syncedPreventUnmountingOnClose,
592
+ open,
593
+ ref: store.context.popupRef,
594
+ onComplete() {
595
+ if (!open) {
596
+ forceUnmount();
597
+ }
417
598
  },
418
- subSlot(slot, 'fu'),
419
- );
420
-
421
- useOpenChangeComplete(
422
- {
423
- enabled: mounted && !open && !syncedPreventUnmountingOnClose,
424
- open,
425
- ref: store.context.popupRef,
426
- onComplete() {
427
- if (!open) {
428
- forceUnmount();
429
- }
430
- },
431
- },
432
- subSlot(slot, 'occ'),
433
- );
599
+ });
434
600
 
435
601
  return { forceUnmount, transitionStatus };
436
602
  }
437
603
 
438
- export function usePopupInteractionProps<State extends PopupStoreState<unknown>>(
604
+ type PopupInteractionPropKey = 'activeTriggerProps' | 'inactiveTriggerProps' | 'popupProps';
605
+
606
+ export function usePopupInteractionProps<
607
+ State extends PopupStoreState<unknown>,
608
+ const Key extends keyof State,
609
+ >(
439
610
  store: ReactStore<State, PopupStoreContext<never>, typeof popupStoreSelectors>,
440
- statePart: Partial<State>,
441
- slot: symbol | undefined,
611
+ statePart: Pick<State, Key | PopupInteractionPropKey>,
442
612
  ) {
443
- store.useSyncedValues(statePart, subSlot(slot, 'sync'));
613
+ store.useSyncedValues(statePart);
444
614
 
445
- useLayoutEffect(
615
+ useIsoLayoutEffect(
446
616
  () => () => {
447
617
  store.update({
448
618
  activeTriggerProps: EMPTY_OBJECT,
449
619
  inactiveTriggerProps: EMPTY_OBJECT,
450
620
  popupProps: EMPTY_OBJECT,
451
- } as unknown as Partial<State>);
621
+ });
452
622
  },
453
623
  [store],
454
- subSlot(slot, 'e'),
455
624
  );
456
625
  }
457
626
 
458
627
  export function usePopupRootSync<
459
- State extends PopupStoreState<unknown> & { openMethod: InteractionType | null },
460
- >(
461
- store: ReactStore<State, PopupStoreContext<never>, typeof popupStoreSelectors>,
462
- open: boolean,
463
- slot: symbol | undefined,
464
- ) {
465
- useLayoutEffect(
466
- () => {
467
- if (!open && store.state.openMethod !== null) {
468
- store.set('openMethod', null);
469
- }
470
- },
471
- [open, store],
472
- subSlot(slot, 'e1'),
473
- );
628
+ State extends PopupStoreState<unknown> & {
629
+ openMethod: InteractionType | null;
630
+ },
631
+ >(store: ReactStore<State, PopupStoreContext<never>, typeof popupStoreSelectors>, open: boolean) {
632
+ useIsoLayoutEffect(() => {
633
+ if (!open && store.state.openMethod !== null) {
634
+ store.set('openMethod', null);
635
+ }
636
+ }, [open, store]);
474
637
 
475
- useLayoutEffect(
638
+ useIsoLayoutEffect(
476
639
  () => () => {
477
640
  if (store.state.openMethod !== null) {
478
641
  store.set('openMethod', null);
479
642
  }
480
643
  },
481
644
  [store],
482
- subSlot(slot, 'e2'),
483
645
  );
484
646
  }