@base-ui/react 1.4.1 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +125 -8
- package/README.md +1 -1
- package/accordion/item/AccordionItem.d.ts +4 -0
- package/accordion/item/AccordionItem.js +5 -4
- package/accordion/panel/AccordionPanel.js +29 -51
- package/accordion/root/AccordionRoot.js +5 -6
- package/accordion/trigger/AccordionTrigger.js +3 -4
- package/alert-dialog/handle.d.ts +14 -1
- package/alert-dialog/handle.js +22 -5
- package/alert-dialog/index.d.ts +1 -1
- package/alert-dialog/index.parts.d.ts +2 -3
- package/alert-dialog/index.parts.js +4 -5
- package/alert-dialog/root/AlertDialogRoot.d.ts +7 -7
- package/alert-dialog/root/AlertDialogRoot.js +2 -56
- package/alert-dialog/trigger/AlertDialogTrigger.d.ts +25 -0
- package/alert-dialog/trigger/AlertDialogTrigger.js +15 -0
- package/alert-dialog/trigger/AlertDialogTriggerDataAttributes.d.ts +10 -0
- package/alert-dialog/trigger/AlertDialogTriggerDataAttributes.js +18 -0
- package/autocomplete/root/AutocompleteRoot.js +9 -10
- package/avatar/image/AvatarImage.js +4 -4
- package/checkbox/indicator/CheckboxIndicator.js +2 -2
- package/checkbox/root/CheckboxRoot.js +49 -11
- package/checkbox-group/CheckboxGroup.js +1 -5
- package/collapsible/panel/CollapsiblePanel.js +29 -51
- package/collapsible/panel/useCollapsiblePanel.d.ts +9 -23
- package/collapsible/panel/useCollapsiblePanel.js +308 -268
- package/collapsible/root/CollapsibleRoot.d.ts +1 -1
- package/collapsible/root/CollapsibleRootContext.d.ts +0 -2
- package/collapsible/root/useCollapsibleRoot.d.ts +0 -27
- package/collapsible/root/useCollapsibleRoot.js +2 -64
- package/collapsible/trigger/CollapsibleTrigger.js +5 -6
- package/combobox/arrow/ComboboxArrow.js +1 -1
- package/combobox/backdrop/ComboboxBackdrop.js +1 -1
- package/combobox/chip/ComboboxChip.js +7 -2
- package/combobox/clear/ComboboxClear.d.ts +4 -0
- package/combobox/clear/ComboboxClear.js +1 -0
- package/combobox/clear/ComboboxClearDataAttributes.d.ts +4 -0
- package/combobox/clear/ComboboxClearDataAttributes.js +4 -0
- package/combobox/icon/ComboboxIcon.js +1 -1
- package/combobox/input/ComboboxInput.js +15 -6
- package/combobox/item/ComboboxItem.js +8 -14
- package/combobox/item-indicator/ComboboxItemIndicator.js +1 -2
- package/combobox/root/AriaCombobox.js +61 -28
- package/combobox/store.d.ts +4 -8
- package/combobox/store.js +2 -1
- package/combobox/utils/ComboboxInternalDismissButton.js +2 -3
- package/csp-provider/CSPProvider.js +1 -1
- package/dialog/close/DialogClose.js +6 -6
- package/dialog/popup/DialogPopup.js +9 -4
- package/dialog/root/DialogRoot.d.ts +1 -2
- package/dialog/root/DialogRoot.js +3 -73
- package/dialog/root/DialogRootContext.d.ts +1 -0
- package/dialog/root/DialogRootContext.js +3 -1
- package/dialog/root/useDialogRoot.d.ts +12 -4
- package/dialog/root/useDialogRoot.js +27 -25
- package/dialog/root/useRenderDialogRoot.d.ts +4 -0
- package/dialog/root/useRenderDialogRoot.js +96 -0
- package/dialog/store/DialogHandle.d.ts +1 -1
- package/dialog/store/DialogHandle.js +2 -2
- package/dialog/store/DialogStore.d.ts +88 -1
- package/dialog/store/DialogStore.js +12 -17
- package/dialog/trigger/DialogTrigger.d.ts +1 -1
- package/dialog/trigger/DialogTrigger.js +11 -4
- package/dialog/viewport/DialogViewport.js +4 -3
- package/drawer/popup/DrawerPopup.js +13 -9
- package/drawer/root/DrawerRoot.js +11 -11
- package/drawer/root/DrawerRootContext.d.ts +1 -1
- package/drawer/swipe-area/DrawerSwipeArea.js +6 -5
- package/drawer/viewport/DrawerViewport.js +13 -14
- package/esm/accordion/item/AccordionItem.d.ts +4 -0
- package/esm/accordion/item/AccordionItem.js +5 -4
- package/esm/accordion/panel/AccordionPanel.js +29 -51
- package/esm/accordion/root/AccordionRoot.js +5 -6
- package/esm/accordion/trigger/AccordionTrigger.js +4 -5
- package/esm/alert-dialog/handle.d.ts +14 -1
- package/esm/alert-dialog/handle.js +20 -5
- package/esm/alert-dialog/index.d.ts +1 -1
- package/esm/alert-dialog/index.parts.d.ts +2 -3
- package/esm/alert-dialog/index.parts.js +2 -3
- package/esm/alert-dialog/root/AlertDialogRoot.d.ts +7 -7
- package/esm/alert-dialog/root/AlertDialogRoot.js +2 -55
- package/esm/alert-dialog/trigger/AlertDialogTrigger.d.ts +25 -0
- package/esm/alert-dialog/trigger/AlertDialogTrigger.js +10 -0
- package/esm/alert-dialog/trigger/AlertDialogTriggerDataAttributes.d.ts +10 -0
- package/esm/alert-dialog/trigger/AlertDialogTriggerDataAttributes.js +12 -0
- package/esm/autocomplete/root/AutocompleteRoot.js +9 -10
- package/esm/avatar/image/AvatarImage.js +4 -4
- package/esm/checkbox/indicator/CheckboxIndicator.js +2 -2
- package/esm/checkbox/root/CheckboxRoot.js +49 -11
- package/esm/checkbox-group/CheckboxGroup.js +1 -5
- package/esm/collapsible/panel/CollapsiblePanel.js +29 -51
- package/esm/collapsible/panel/useCollapsiblePanel.d.ts +9 -23
- package/esm/collapsible/panel/useCollapsiblePanel.js +309 -269
- package/esm/collapsible/root/CollapsibleRoot.d.ts +1 -1
- package/esm/collapsible/root/CollapsibleRootContext.d.ts +0 -2
- package/esm/collapsible/root/useCollapsibleRoot.d.ts +0 -27
- package/esm/collapsible/root/useCollapsibleRoot.js +2 -64
- package/esm/collapsible/trigger/CollapsibleTrigger.js +5 -6
- package/esm/combobox/arrow/ComboboxArrow.js +1 -1
- package/esm/combobox/backdrop/ComboboxBackdrop.js +1 -1
- package/esm/combobox/chip/ComboboxChip.js +7 -2
- package/esm/combobox/clear/ComboboxClear.d.ts +4 -0
- package/esm/combobox/clear/ComboboxClear.js +1 -0
- package/esm/combobox/clear/ComboboxClearDataAttributes.d.ts +4 -0
- package/esm/combobox/clear/ComboboxClearDataAttributes.js +4 -0
- package/esm/combobox/icon/ComboboxIcon.js +1 -1
- package/esm/combobox/input/ComboboxInput.js +16 -7
- package/esm/combobox/item/ComboboxItem.js +8 -14
- package/esm/combobox/item-indicator/ComboboxItemIndicator.js +1 -2
- package/esm/combobox/root/AriaCombobox.js +62 -29
- package/esm/combobox/store.d.ts +4 -8
- package/esm/combobox/store.js +2 -1
- package/esm/combobox/utils/ComboboxInternalDismissButton.js +2 -3
- package/esm/csp-provider/CSPProvider.js +1 -1
- package/esm/dialog/close/DialogClose.js +6 -6
- package/esm/dialog/popup/DialogPopup.js +9 -4
- package/esm/dialog/root/DialogRoot.d.ts +1 -2
- package/esm/dialog/root/DialogRoot.js +4 -72
- package/esm/dialog/root/DialogRootContext.d.ts +1 -0
- package/esm/dialog/root/DialogRootContext.js +2 -0
- package/esm/dialog/root/useDialogRoot.d.ts +12 -4
- package/esm/dialog/root/useDialogRoot.js +28 -27
- package/esm/dialog/root/useRenderDialogRoot.d.ts +4 -0
- package/esm/dialog/root/useRenderDialogRoot.js +90 -0
- package/esm/dialog/store/DialogHandle.d.ts +1 -1
- package/esm/dialog/store/DialogHandle.js +2 -2
- package/esm/dialog/store/DialogStore.d.ts +88 -1
- package/esm/dialog/store/DialogStore.js +13 -18
- package/esm/dialog/trigger/DialogTrigger.d.ts +1 -1
- package/esm/dialog/trigger/DialogTrigger.js +12 -5
- package/esm/dialog/viewport/DialogViewport.js +4 -3
- package/esm/drawer/popup/DrawerPopup.js +14 -9
- package/esm/drawer/root/DrawerRoot.js +11 -11
- package/esm/drawer/root/DrawerRootContext.d.ts +1 -1
- package/esm/drawer/swipe-area/DrawerSwipeArea.js +6 -5
- package/esm/drawer/viewport/DrawerViewport.js +13 -14
- package/esm/field/control/FieldControl.js +2 -6
- package/esm/field/item/FieldItem.js +1 -4
- package/esm/field/root/FieldRoot.js +11 -3
- package/esm/field/root/useFieldValidation.d.ts +1 -0
- package/esm/field/root/useFieldValidation.js +23 -20
- package/esm/field/utils/getCombinedFieldValidityData.d.ts +1 -1
- package/esm/field/validity/FieldValidity.d.ts +1 -1
- package/esm/floating-ui-react/components/FloatingDelayGroup.js +3 -3
- package/esm/floating-ui-react/components/FloatingFocusManager.d.ts +1 -1
- package/esm/floating-ui-react/components/FloatingFocusManager.js +20 -8
- package/esm/floating-ui-react/components/FloatingPortal.js +3 -3
- package/esm/floating-ui-react/hooks/useClick.js +83 -74
- package/esm/floating-ui-react/hooks/useClientPoint.js +29 -20
- package/esm/floating-ui-react/hooks/useDismiss.d.ts +1 -1
- package/esm/floating-ui-react/hooks/useDismiss.js +82 -93
- package/esm/floating-ui-react/hooks/useFloating.js +37 -32
- package/esm/floating-ui-react/hooks/useFloatingRootContext.d.ts +1 -1
- package/esm/floating-ui-react/hooks/useFloatingRootContext.js +2 -2
- package/esm/floating-ui-react/hooks/useFocus.js +84 -81
- package/esm/floating-ui-react/hooks/useHover.js +72 -76
- package/esm/floating-ui-react/hooks/useHoverFloatingInteraction.js +49 -44
- package/esm/floating-ui-react/hooks/useHoverInteractionSharedState.js +1 -1
- package/esm/floating-ui-react/hooks/useHoverReferenceInteraction.d.ts +7 -2
- package/esm/floating-ui-react/hooks/useHoverReferenceInteraction.js +44 -39
- package/esm/floating-ui-react/hooks/useHoverShared.d.ts +2 -1
- package/esm/floating-ui-react/hooks/useHoverShared.js +4 -0
- package/esm/floating-ui-react/hooks/useListNavigation.d.ts +1 -3
- package/esm/floating-ui-react/hooks/useListNavigation.js +83 -74
- package/esm/floating-ui-react/hooks/useSyncedFloatingRootContext.d.ts +9 -6
- package/esm/floating-ui-react/hooks/useSyncedFloatingRootContext.js +25 -20
- package/esm/floating-ui-react/hooks/useTypeahead.d.ts +2 -2
- package/esm/floating-ui-react/hooks/useTypeahead.js +33 -52
- package/esm/floating-ui-react/index.d.ts +0 -2
- package/esm/floating-ui-react/index.js +0 -2
- package/esm/floating-ui-react/types.d.ts +2 -7
- package/esm/floating-ui-react/utils/composite.js +2 -0
- package/esm/floating-ui-react/utils/enqueueFocus.d.ts +1 -1
- package/esm/floating-ui-react/utils/enqueueFocus.js +10 -7
- package/esm/floating-ui-react/utils/getEmptyRootContext.js +1 -1
- package/esm/form/Form.js +2 -2
- package/esm/index.js +1 -1
- package/esm/internals/composite/composite.d.ts +0 -1
- package/esm/internals/composite/composite.js +1 -2
- package/esm/internals/composite/root/useCompositeRoot.js +2 -2
- package/esm/internals/createBaseUIEventDetails.d.ts +2 -0
- package/esm/internals/csp-context/index.d.ts +2 -0
- package/esm/internals/csp-context/index.js +1 -0
- package/esm/internals/field-register-control/index.d.ts +0 -1
- package/esm/internals/field-register-control/useFieldControlRegistration.d.ts +2 -1
- package/esm/internals/field-register-control/useFieldControlRegistration.js +11 -14
- package/esm/internals/field-register-control/useRegisterFieldControl.d.ts +1 -4
- package/esm/internals/field-register-control/useRegisterFieldControl.js +6 -11
- package/esm/internals/field-root-context/FieldRootContext.d.ts +1 -0
- package/esm/internals/field-root-context/FieldRootContext.js +3 -2
- package/esm/internals/form-context/FormContext.d.ts +5 -1
- package/esm/internals/reason-parts.d.ts +2 -0
- package/esm/internals/reason-parts.js +2 -0
- package/esm/internals/types.d.ts +1 -0
- package/esm/internals/use-button/useButton.js +4 -4
- package/esm/internals/usePressAndHold.js +2 -2
- package/esm/internals/useRenderElement.js +2 -0
- package/esm/menu/arrow/MenuArrow.js +1 -1
- package/esm/menu/backdrop/MenuBackdrop.js +1 -1
- package/esm/menu/checkbox-item/MenuCheckboxItem.js +5 -7
- package/esm/menu/group/MenuGroup.js +1 -4
- package/esm/menu/group/MenuGroupContext.d.ts +1 -3
- package/esm/menu/group/MenuGroupContext.js +1 -1
- package/esm/menu/group-label/MenuGroupLabel.js +4 -6
- package/esm/menu/link-item/MenuLinkItem.js +2 -2
- package/esm/menu/popup/MenuPopup.js +5 -5
- package/esm/menu/radio-group/MenuRadioGroup.js +11 -5
- package/esm/menu/radio-item/MenuRadioItem.js +5 -7
- package/esm/menu/root/MenuRoot.js +63 -68
- package/esm/menu/store/MenuHandle.js +1 -1
- package/esm/menu/store/MenuStore.d.ts +87 -0
- package/esm/menu/submenu-trigger/MenuSubmenuTrigger.js +8 -5
- package/esm/menu/trigger/MenuTrigger.js +13 -10
- package/esm/menu/viewport/MenuViewport.d.ts +2 -2
- package/esm/menu/viewport/MenuViewport.js +2 -2
- package/esm/navigation-menu/arrow/NavigationMenuArrow.js +1 -1
- package/esm/navigation-menu/backdrop/NavigationMenuBackdrop.js +1 -1
- package/esm/navigation-menu/content/NavigationMenuContent.js +8 -5
- package/esm/navigation-menu/icon/NavigationMenuIcon.js +1 -1
- package/esm/navigation-menu/item/NavigationMenuItem.js +2 -2
- package/esm/navigation-menu/list/NavigationMenuList.js +1 -1
- package/esm/navigation-menu/popup/NavigationMenuPopup.js +2 -2
- package/esm/navigation-menu/root/NavigationMenuRoot.js +1 -3
- package/esm/navigation-menu/trigger/NavigationMenuTrigger.js +24 -17
- package/esm/navigation-menu/utils/isOutsideMenuEvent.d.ts +0 -1
- package/esm/navigation-menu/utils/isOutsideMenuEvent.js +1 -5
- package/esm/navigation-menu/viewport/NavigationMenuViewport.js +2 -3
- package/esm/number-field/input/NumberFieldInput.js +3 -5
- package/esm/number-field/root/NumberFieldRoot.js +5 -2
- package/esm/number-field/scrub-area/NumberFieldScrubArea.js +7 -3
- package/esm/otp-field/input/OTPFieldInput.js +43 -29
- package/esm/otp-field/root/OTPFieldRoot.d.ts +17 -8
- package/esm/otp-field/root/OTPFieldRoot.js +33 -33
- package/esm/otp-field/root/OTPFieldRootContext.d.ts +1 -1
- package/esm/otp-field/utils/otp.d.ts +5 -4
- package/esm/otp-field/utils/otp.js +23 -12
- package/esm/popover/arrow/PopoverArrow.js +1 -1
- package/esm/popover/backdrop/PopoverBackdrop.js +1 -1
- package/esm/popover/close/PopoverClose.js +2 -2
- package/esm/popover/description/PopoverDescription.js +1 -7
- package/esm/popover/popup/PopoverPopup.d.ts +1 -1
- package/esm/popover/popup/PopoverPopup.js +16 -10
- package/esm/popover/popup/PopoverPopupDataAttributes.d.ts +1 -1
- package/esm/popover/popup/PopoverPopupDataAttributes.js +1 -1
- package/esm/popover/positioner/PopoverPositioner.js +5 -5
- package/esm/popover/root/PopoverRoot.d.ts +1 -1
- package/esm/popover/root/PopoverRoot.js +42 -47
- package/esm/popover/store/PopoverHandle.js +1 -1
- package/esm/popover/store/PopoverStore.d.ts +91 -4
- package/esm/popover/store/PopoverStore.js +17 -18
- package/esm/popover/title/PopoverTitle.js +1 -7
- package/esm/popover/trigger/PopoverTrigger.js +24 -17
- package/esm/popover/viewport/PopoverViewport.d.ts +3 -3
- package/esm/popover/viewport/PopoverViewport.js +2 -2
- package/esm/popover/viewport/PopoverViewportDataAttributes.d.ts +1 -1
- package/esm/popover/viewport/PopoverViewportDataAttributes.js +1 -1
- package/esm/preview-card/positioner/PreviewCardPositioner.js +11 -1
- package/esm/preview-card/root/PreviewCardRoot.d.ts +1 -1
- package/esm/preview-card/root/PreviewCardRoot.js +32 -22
- package/esm/preview-card/store/PreviewCardHandle.js +1 -1
- package/esm/preview-card/store/PreviewCardStore.d.ts +90 -2
- package/esm/preview-card/store/PreviewCardStore.js +19 -31
- package/esm/preview-card/trigger/PreviewCardTrigger.js +6 -3
- package/esm/preview-card/viewport/PreviewCardViewport.d.ts +2 -2
- package/esm/preview-card/viewport/PreviewCardViewport.js +2 -2
- package/esm/preview-card/viewport/PreviewCardViewportDataAttributes.d.ts +2 -2
- package/esm/preview-card/viewport/PreviewCardViewportDataAttributes.js +2 -2
- package/esm/progress/indicator/ProgressIndicator.js +6 -11
- package/esm/progress/root/ProgressRoot.d.ts +1 -1
- package/esm/radio/root/RadioRoot.js +7 -3
- package/esm/radio-group/RadioGroup.js +4 -11
- package/esm/radio-group/RadioGroupContext.d.ts +0 -1
- package/esm/scroll-area/content/ScrollAreaContent.js +4 -4
- package/esm/scroll-area/root/ScrollAreaRoot.js +1 -1
- package/esm/scroll-area/scrollbar/ScrollAreaScrollbar.js +16 -20
- package/esm/scroll-area/viewport/ScrollAreaViewport.js +6 -10
- package/esm/select/arrow/SelectArrow.js +1 -1
- package/esm/select/backdrop/SelectBackdrop.js +1 -1
- package/esm/select/group/SelectGroup.js +1 -1
- package/esm/select/group-label/SelectGroupLabel.js +2 -2
- package/esm/select/icon/SelectIcon.js +1 -1
- package/esm/select/item/SelectItem.js +46 -32
- package/esm/select/item/SelectItemContext.d.ts +1 -1
- package/esm/select/item-indicator/SelectItemIndicator.js +1 -2
- package/esm/select/item-text/SelectItemText.js +9 -6
- package/esm/select/list/SelectList.js +1 -1
- package/esm/select/popup/SelectPopup.js +8 -3
- package/esm/select/positioner/SelectPositioner.js +3 -0
- package/esm/select/root/SelectRoot.js +46 -40
- package/esm/select/root/SelectRootContext.d.ts +4 -5
- package/esm/select/store.d.ts +3 -0
- package/esm/select/store.js +1 -0
- package/esm/select/trigger/SelectTrigger.d.ts +5 -0
- package/esm/select/trigger/SelectTrigger.js +19 -33
- package/esm/select/trigger/SelectTriggerDataAttributes.d.ts +5 -0
- package/esm/select/trigger/SelectTriggerDataAttributes.js +5 -0
- package/esm/slider/control/SliderControl.js +10 -12
- package/esm/slider/root/SliderRoot.js +1 -4
- package/esm/slider/thumb/SliderThumb.js +32 -30
- package/esm/slider/value/SliderValue.js +7 -15
- package/esm/switch/root/SwitchRoot.js +10 -10
- package/esm/switch/thumb/SwitchThumb.js +1 -9
- package/esm/tabs/indicator/TabsIndicator.js +14 -19
- package/esm/tabs/list/TabsList.js +4 -10
- package/esm/tabs/list/TabsListContext.d.ts +2 -1
- package/esm/tabs/panel/TabsPanel.js +1 -1
- package/esm/tabs/root/TabsRoot.d.ts +16 -1
- package/esm/tabs/root/TabsRoot.js +73 -25
- package/esm/tabs/root/TabsRootContext.d.ts +0 -2
- package/esm/toast/provider/ToastProvider.js +1 -1
- package/esm/toast/root/ToastRoot.d.ts +1 -1
- package/esm/toast/root/ToastRoot.js +108 -131
- package/esm/toast/root/ToastRootDataAttributes.d.ts +1 -1
- package/esm/toast/root/ToastRootDataAttributes.js +1 -1
- package/esm/toast/store.d.ts +9 -1
- package/esm/toast/store.js +19 -13
- package/esm/toast/useToastManager.d.ts +1 -1
- package/esm/toast/viewport/ToastViewport.js +1 -1
- package/esm/toggle/Toggle.js +5 -9
- package/esm/toggle-group/ToggleGroup.d.ts +2 -2
- package/esm/toggle-group/ToggleGroup.js +6 -13
- package/esm/toolbar/link/ToolbarLink.d.ts +1 -1
- package/esm/toolbar/link/ToolbarLink.js +1 -2
- package/esm/tooltip/arrow/TooltipArrow.js +3 -3
- package/esm/tooltip/popup/TooltipPopup.js +5 -4
- package/esm/tooltip/root/TooltipRoot.js +35 -26
- package/esm/tooltip/store/TooltipHandle.js +1 -1
- package/esm/tooltip/store/TooltipStore.d.ts +90 -2
- package/esm/tooltip/store/TooltipStore.js +18 -31
- package/esm/tooltip/trigger/TooltipTrigger.js +151 -20
- package/esm/tooltip/viewport/TooltipViewport.d.ts +2 -2
- package/esm/tooltip/viewport/TooltipViewport.js +2 -2
- package/esm/tooltip/viewport/TooltipViewportDataAttributes.d.ts +1 -1
- package/esm/tooltip/viewport/TooltipViewportDataAttributes.js +1 -1
- package/esm/unstable-use-media-query/index.js +1 -1
- package/esm/utils/popups/index.d.ts +1 -0
- package/esm/utils/popups/index.js +1 -0
- package/esm/utils/popups/inlineRect.d.ts +15 -0
- package/esm/utils/popups/inlineRect.js +191 -0
- package/esm/utils/popups/popupStoreUtils.d.ts +28 -10
- package/esm/utils/popups/popupStoreUtils.js +105 -20
- package/esm/utils/popups/popupTriggerMap.js +2 -0
- package/esm/utils/popups/store.d.ts +15 -2
- package/esm/utils/popups/store.js +38 -2
- package/esm/utils/popups/useTriggerFocusGuards.js +4 -5
- package/esm/utils/useAnchorPositioning.d.ts +5 -0
- package/esm/utils/useAnchorPositioning.js +12 -9
- package/esm/utils/useOpenInteractionType.d.ts +4 -0
- package/esm/utils/useOpenInteractionType.js +23 -18
- package/field/control/FieldControl.js +2 -6
- package/field/item/FieldItem.js +1 -4
- package/field/root/FieldRoot.js +11 -3
- package/field/root/useFieldValidation.d.ts +1 -0
- package/field/root/useFieldValidation.js +23 -20
- package/field/utils/getCombinedFieldValidityData.d.ts +1 -1
- package/field/validity/FieldValidity.d.ts +1 -1
- package/floating-ui-react/components/FloatingDelayGroup.js +3 -3
- package/floating-ui-react/components/FloatingFocusManager.d.ts +1 -1
- package/floating-ui-react/components/FloatingFocusManager.js +20 -8
- package/floating-ui-react/components/FloatingPortal.js +3 -3
- package/floating-ui-react/hooks/useClick.js +82 -73
- package/floating-ui-react/hooks/useClientPoint.js +29 -20
- package/floating-ui-react/hooks/useDismiss.d.ts +1 -1
- package/floating-ui-react/hooks/useDismiss.js +82 -92
- package/floating-ui-react/hooks/useFloating.js +36 -32
- package/floating-ui-react/hooks/useFloatingRootContext.d.ts +1 -1
- package/floating-ui-react/hooks/useFloatingRootContext.js +2 -2
- package/floating-ui-react/hooks/useFocus.js +84 -81
- package/floating-ui-react/hooks/useHover.js +74 -78
- package/floating-ui-react/hooks/useHoverFloatingInteraction.js +48 -43
- package/floating-ui-react/hooks/useHoverInteractionSharedState.js +1 -1
- package/floating-ui-react/hooks/useHoverReferenceInteraction.d.ts +7 -2
- package/floating-ui-react/hooks/useHoverReferenceInteraction.js +43 -38
- package/floating-ui-react/hooks/useHoverShared.d.ts +2 -1
- package/floating-ui-react/hooks/useHoverShared.js +11 -0
- package/floating-ui-react/hooks/useListNavigation.d.ts +1 -3
- package/floating-ui-react/hooks/useListNavigation.js +83 -74
- package/floating-ui-react/hooks/useSyncedFloatingRootContext.d.ts +9 -6
- package/floating-ui-react/hooks/useSyncedFloatingRootContext.js +26 -20
- package/floating-ui-react/hooks/useTypeahead.d.ts +2 -2
- package/floating-ui-react/hooks/useTypeahead.js +33 -52
- package/floating-ui-react/index.d.ts +0 -2
- package/floating-ui-react/index.js +0 -14
- package/floating-ui-react/types.d.ts +2 -7
- package/floating-ui-react/utils/composite.js +2 -0
- package/floating-ui-react/utils/enqueueFocus.d.ts +1 -1
- package/floating-ui-react/utils/enqueueFocus.js +10 -7
- package/floating-ui-react/utils/getEmptyRootContext.js +1 -1
- package/form/Form.js +2 -2
- package/index.js +1 -1
- package/internals/composite/composite.d.ts +0 -1
- package/internals/composite/composite.js +2 -3
- package/internals/composite/root/useCompositeRoot.js +1 -1
- package/internals/createBaseUIEventDetails.d.ts +2 -0
- package/internals/csp-context/index.d.ts +2 -0
- package/internals/csp-context/index.js +18 -0
- package/internals/field-register-control/index.d.ts +0 -1
- package/internals/field-register-control/useFieldControlRegistration.d.ts +2 -1
- package/internals/field-register-control/useFieldControlRegistration.js +11 -14
- package/internals/field-register-control/useRegisterFieldControl.d.ts +1 -4
- package/internals/field-register-control/useRegisterFieldControl.js +6 -11
- package/internals/field-root-context/FieldRootContext.d.ts +1 -0
- package/internals/field-root-context/FieldRootContext.js +4 -3
- package/internals/form-context/FormContext.d.ts +5 -1
- package/internals/reason-parts.d.ts +2 -0
- package/internals/reason-parts.js +3 -1
- package/internals/types.d.ts +1 -0
- package/internals/use-button/useButton.js +4 -4
- package/internals/usePressAndHold.js +2 -2
- package/internals/useRenderElement.js +2 -0
- package/menu/arrow/MenuArrow.js +1 -1
- package/menu/backdrop/MenuBackdrop.js +1 -1
- package/menu/checkbox-item/MenuCheckboxItem.js +5 -7
- package/menu/group/MenuGroup.js +1 -4
- package/menu/group/MenuGroupContext.d.ts +1 -3
- package/menu/group/MenuGroupContext.js +1 -1
- package/menu/group-label/MenuGroupLabel.js +4 -6
- package/menu/link-item/MenuLinkItem.js +2 -2
- package/menu/popup/MenuPopup.js +5 -5
- package/menu/radio-group/MenuRadioGroup.js +11 -5
- package/menu/radio-item/MenuRadioItem.js +5 -7
- package/menu/root/MenuRoot.js +60 -65
- package/menu/store/MenuHandle.js +1 -1
- package/menu/store/MenuStore.d.ts +87 -0
- package/menu/submenu-trigger/MenuSubmenuTrigger.js +7 -4
- package/menu/trigger/MenuTrigger.js +12 -9
- package/menu/viewport/MenuViewport.d.ts +2 -2
- package/menu/viewport/MenuViewport.js +2 -2
- package/navigation-menu/arrow/NavigationMenuArrow.js +1 -1
- package/navigation-menu/backdrop/NavigationMenuBackdrop.js +1 -1
- package/navigation-menu/content/NavigationMenuContent.js +8 -5
- package/navigation-menu/icon/NavigationMenuIcon.js +1 -1
- package/navigation-menu/item/NavigationMenuItem.js +2 -2
- package/navigation-menu/list/NavigationMenuList.js +1 -1
- package/navigation-menu/popup/NavigationMenuPopup.js +2 -2
- package/navigation-menu/root/NavigationMenuRoot.js +1 -3
- package/navigation-menu/trigger/NavigationMenuTrigger.js +23 -16
- package/navigation-menu/utils/isOutsideMenuEvent.d.ts +0 -1
- package/navigation-menu/utils/isOutsideMenuEvent.js +1 -5
- package/navigation-menu/viewport/NavigationMenuViewport.js +2 -3
- package/number-field/input/NumberFieldInput.js +3 -5
- package/number-field/root/NumberFieldRoot.js +5 -2
- package/number-field/scrub-area/NumberFieldScrubArea.js +7 -3
- package/otp-field/input/OTPFieldInput.js +42 -28
- package/otp-field/root/OTPFieldRoot.d.ts +17 -8
- package/otp-field/root/OTPFieldRoot.js +32 -32
- package/otp-field/root/OTPFieldRootContext.d.ts +1 -1
- package/otp-field/utils/otp.d.ts +5 -4
- package/otp-field/utils/otp.js +24 -12
- package/package.json +331 -317
- package/popover/arrow/PopoverArrow.js +1 -1
- package/popover/backdrop/PopoverBackdrop.js +1 -1
- package/popover/close/PopoverClose.js +2 -2
- package/popover/description/PopoverDescription.js +1 -7
- package/popover/popup/PopoverPopup.d.ts +1 -1
- package/popover/popup/PopoverPopup.js +16 -10
- package/popover/popup/PopoverPopupDataAttributes.d.ts +1 -1
- package/popover/popup/PopoverPopupDataAttributes.js +1 -1
- package/popover/positioner/PopoverPositioner.js +5 -5
- package/popover/root/PopoverRoot.d.ts +1 -1
- package/popover/root/PopoverRoot.js +39 -44
- package/popover/store/PopoverHandle.js +1 -1
- package/popover/store/PopoverStore.d.ts +91 -4
- package/popover/store/PopoverStore.js +16 -19
- package/popover/title/PopoverTitle.js +1 -7
- package/popover/trigger/PopoverTrigger.js +23 -16
- package/popover/viewport/PopoverViewport.d.ts +3 -3
- package/popover/viewport/PopoverViewport.js +2 -2
- package/popover/viewport/PopoverViewportDataAttributes.d.ts +1 -1
- package/popover/viewport/PopoverViewportDataAttributes.js +1 -1
- package/preview-card/positioner/PreviewCardPositioner.js +11 -1
- package/preview-card/root/PreviewCardRoot.d.ts +1 -1
- package/preview-card/root/PreviewCardRoot.js +30 -20
- package/preview-card/store/PreviewCardHandle.js +1 -1
- package/preview-card/store/PreviewCardStore.d.ts +90 -2
- package/preview-card/store/PreviewCardStore.js +18 -30
- package/preview-card/trigger/PreviewCardTrigger.js +5 -2
- package/preview-card/viewport/PreviewCardViewport.d.ts +2 -2
- package/preview-card/viewport/PreviewCardViewport.js +2 -2
- package/preview-card/viewport/PreviewCardViewportDataAttributes.d.ts +2 -2
- package/preview-card/viewport/PreviewCardViewportDataAttributes.js +2 -2
- package/progress/indicator/ProgressIndicator.js +6 -11
- package/progress/root/ProgressRoot.d.ts +1 -1
- package/radio/root/RadioRoot.js +7 -3
- package/radio-group/RadioGroup.js +4 -11
- package/radio-group/RadioGroupContext.d.ts +0 -1
- package/scroll-area/content/ScrollAreaContent.js +4 -4
- package/scroll-area/root/ScrollAreaRoot.js +1 -1
- package/scroll-area/scrollbar/ScrollAreaScrollbar.js +16 -20
- package/scroll-area/viewport/ScrollAreaViewport.js +6 -10
- package/select/arrow/SelectArrow.js +1 -1
- package/select/backdrop/SelectBackdrop.js +1 -1
- package/select/group/SelectGroup.js +1 -1
- package/select/group-label/SelectGroupLabel.js +2 -2
- package/select/icon/SelectIcon.js +1 -1
- package/select/item/SelectItem.js +46 -32
- package/select/item/SelectItemContext.d.ts +1 -1
- package/select/item-indicator/SelectItemIndicator.js +1 -2
- package/select/item-text/SelectItemText.js +9 -6
- package/select/list/SelectList.js +1 -1
- package/select/popup/SelectPopup.js +8 -3
- package/select/positioner/SelectPositioner.js +3 -0
- package/select/root/SelectRoot.js +45 -39
- package/select/root/SelectRootContext.d.ts +4 -5
- package/select/store.d.ts +3 -0
- package/select/store.js +1 -0
- package/select/trigger/SelectTrigger.d.ts +5 -0
- package/select/trigger/SelectTrigger.js +19 -33
- package/select/trigger/SelectTriggerDataAttributes.d.ts +5 -0
- package/select/trigger/SelectTriggerDataAttributes.js +5 -0
- package/slider/control/SliderControl.js +9 -11
- package/slider/root/SliderRoot.js +1 -4
- package/slider/thumb/SliderThumb.js +32 -30
- package/slider/value/SliderValue.js +7 -15
- package/switch/root/SwitchRoot.js +10 -10
- package/switch/thumb/SwitchThumb.js +1 -9
- package/tabs/indicator/TabsIndicator.js +14 -19
- package/tabs/list/TabsList.js +4 -10
- package/tabs/list/TabsListContext.d.ts +2 -1
- package/tabs/panel/TabsPanel.js +1 -1
- package/tabs/root/TabsRoot.d.ts +16 -1
- package/tabs/root/TabsRoot.js +71 -24
- package/tabs/root/TabsRootContext.d.ts +0 -2
- package/toast/provider/ToastProvider.js +1 -1
- package/toast/root/ToastRoot.d.ts +1 -1
- package/toast/root/ToastRoot.js +110 -133
- package/toast/root/ToastRootDataAttributes.d.ts +1 -1
- package/toast/root/ToastRootDataAttributes.js +1 -1
- package/toast/store.d.ts +9 -1
- package/toast/store.js +18 -12
- package/toast/useToastManager.d.ts +1 -1
- package/toast/viewport/ToastViewport.js +1 -1
- package/toggle/Toggle.js +5 -9
- package/toggle-group/ToggleGroup.d.ts +2 -2
- package/toggle-group/ToggleGroup.js +6 -13
- package/toolbar/link/ToolbarLink.d.ts +1 -1
- package/toolbar/link/ToolbarLink.js +1 -2
- package/tooltip/arrow/TooltipArrow.js +3 -3
- package/tooltip/popup/TooltipPopup.js +5 -4
- package/tooltip/root/TooltipRoot.js +32 -23
- package/tooltip/store/TooltipHandle.js +1 -1
- package/tooltip/store/TooltipStore.d.ts +90 -2
- package/tooltip/store/TooltipStore.js +17 -30
- package/tooltip/trigger/TooltipTrigger.js +152 -20
- package/tooltip/viewport/TooltipViewport.d.ts +2 -2
- package/tooltip/viewport/TooltipViewport.js +2 -2
- package/tooltip/viewport/TooltipViewportDataAttributes.d.ts +1 -1
- package/tooltip/viewport/TooltipViewportDataAttributes.js +1 -1
- package/unstable-use-media-query/index.js +1 -1
- package/utils/popups/index.d.ts +1 -0
- package/utils/popups/index.js +11 -0
- package/utils/popups/inlineRect.d.ts +15 -0
- package/utils/popups/inlineRect.js +198 -0
- package/utils/popups/popupStoreUtils.d.ts +28 -10
- package/utils/popups/popupStoreUtils.js +110 -20
- package/utils/popups/popupTriggerMap.js +2 -0
- package/utils/popups/store.d.ts +15 -2
- package/utils/popups/store.js +39 -2
- package/utils/popups/useTriggerFocusGuards.js +4 -5
- package/utils/useAnchorPositioning.d.ts +5 -0
- package/utils/useAnchorPositioning.js +12 -9
- package/utils/useOpenInteractionType.d.ts +4 -0
- package/utils/useOpenInteractionType.js +24 -17
- package/checkbox-group/index.parts.d.ts +0 -1
- package/checkbox-group/index.parts.js +0 -12
- package/esm/checkbox-group/index.parts.d.ts +0 -1
- package/esm/checkbox-group/index.parts.js +0 -1
- package/esm/floating-ui-react/hooks/useInteractions.d.ts +0 -20
- package/esm/floating-ui-react/hooks/useInteractions.js +0 -88
- package/esm/floating-ui-react/hooks/useRole.d.ts +0 -17
- package/esm/floating-ui-react/hooks/useRole.js +0 -113
- package/floating-ui-react/hooks/useInteractions.d.ts +0 -20
- package/floating-ui-react/hooks/useInteractions.js +0 -95
- package/floating-ui-react/hooks/useRole.d.ts +0 -17
- package/floating-ui-react/hooks/useRole.js +0 -120
- /package/{csp-provider → esm/internals/csp-context}/CSPContext.d.ts +0 -0
- /package/esm/{csp-provider → internals/csp-context}/CSPContext.js +0 -0
- /package/{esm/csp-provider → internals/csp-context}/CSPContext.d.ts +0 -0
- /package/{csp-provider → internals/csp-context}/CSPContext.js +0 -0
|
@@ -5,15 +5,51 @@ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWild
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
+
exports.FOCUSABLE_POPUP_PROPS = void 0;
|
|
9
|
+
exports.setOpenTriggerState = setOpenTriggerState;
|
|
8
10
|
exports.useImplicitActiveTrigger = useImplicitActiveTrigger;
|
|
9
11
|
exports.useOpenStateTransitions = useOpenStateTransitions;
|
|
12
|
+
exports.usePopupInteractionProps = usePopupInteractionProps;
|
|
13
|
+
exports.usePopupRootSync = usePopupRootSync;
|
|
14
|
+
exports.usePopupStore = usePopupStore;
|
|
10
15
|
exports.useTriggerDataForwarding = useTriggerDataForwarding;
|
|
11
16
|
exports.useTriggerRegistration = useTriggerRegistration;
|
|
12
17
|
var React = _interopRequireWildcard(require("react"));
|
|
18
|
+
var _empty = require("@base-ui/utils/empty");
|
|
19
|
+
var _useId = require("@base-ui/utils/useId");
|
|
13
20
|
var _useStableCallback = require("@base-ui/utils/useStableCallback");
|
|
14
21
|
var _useIsoLayoutEffect = require("@base-ui/utils/useIsoLayoutEffect");
|
|
22
|
+
var _constants = require("../../floating-ui-react/utils/constants");
|
|
23
|
+
var _FloatingTree = require("../../floating-ui-react/components/FloatingTree");
|
|
24
|
+
var _useSyncedFloatingRootContext = require("../../floating-ui-react/hooks/useSyncedFloatingRootContext");
|
|
15
25
|
var _useTransitionStatus = require("../../internals/useTransitionStatus");
|
|
16
26
|
var _useOpenChangeComplete = require("../../internals/useOpenChangeComplete");
|
|
27
|
+
const FOCUSABLE_POPUP_PROPS = exports.FOCUSABLE_POPUP_PROPS = {
|
|
28
|
+
tabIndex: -1,
|
|
29
|
+
[_constants.FOCUSABLE_ATTRIBUTE]: ''
|
|
30
|
+
};
|
|
31
|
+
function usePopupStore(externalStore, createStore, treatPopupAsFloatingElement = false) {
|
|
32
|
+
const floatingId = (0, _useId.useId)();
|
|
33
|
+
const nested = (0, _FloatingTree.useFloatingParentNodeId)() != null;
|
|
34
|
+
const internalStoreRef = React.useRef(null);
|
|
35
|
+
if (externalStore === undefined && internalStoreRef.current === null) {
|
|
36
|
+
internalStoreRef.current = createStore(floatingId, nested);
|
|
37
|
+
}
|
|
38
|
+
const store = externalStore ?? internalStoreRef.current;
|
|
39
|
+
(0, _useSyncedFloatingRootContext.useSyncedFloatingRootContext)({
|
|
40
|
+
popupStore: store,
|
|
41
|
+
treatPopupAsFloatingElement,
|
|
42
|
+
floatingRootContext: store.state.floatingRootContext,
|
|
43
|
+
floatingId,
|
|
44
|
+
nested,
|
|
45
|
+
onOpenChange: store.setOpen
|
|
46
|
+
});
|
|
47
|
+
return {
|
|
48
|
+
store,
|
|
49
|
+
internalStore: internalStoreRef.current
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
|
|
17
53
|
/**
|
|
18
54
|
* Returns a callback ref that registers/unregisters the trigger element in the store.
|
|
19
55
|
*
|
|
@@ -27,12 +63,14 @@ function useTriggerRegistration(id, store) {
|
|
|
27
63
|
if (id === undefined) {
|
|
28
64
|
return;
|
|
29
65
|
}
|
|
66
|
+
let shouldSyncTriggerCount = false;
|
|
30
67
|
if (registeredElementIdRef.current !== null) {
|
|
31
68
|
const registeredId = registeredElementIdRef.current;
|
|
32
69
|
const registeredElement = registeredElementRef.current;
|
|
33
70
|
const currentElement = store.context.triggerElements.getById(registeredId);
|
|
34
71
|
if (registeredElement && currentElement === registeredElement) {
|
|
35
72
|
store.context.triggerElements.delete(registeredId);
|
|
73
|
+
shouldSyncTriggerCount = true;
|
|
36
74
|
}
|
|
37
75
|
registeredElementIdRef.current = null;
|
|
38
76
|
registeredElementRef.current = null;
|
|
@@ -41,15 +79,32 @@ function useTriggerRegistration(id, store) {
|
|
|
41
79
|
registeredElementIdRef.current = id;
|
|
42
80
|
registeredElementRef.current = element;
|
|
43
81
|
store.context.triggerElements.add(id, element);
|
|
82
|
+
shouldSyncTriggerCount = true;
|
|
83
|
+
}
|
|
84
|
+
if (shouldSyncTriggerCount) {
|
|
85
|
+
const triggerCount = store.context.triggerElements.size;
|
|
86
|
+
if (store.select('open') && store.state.triggerCount !== triggerCount) {
|
|
87
|
+
store.set('triggerCount', triggerCount);
|
|
88
|
+
}
|
|
44
89
|
}
|
|
45
90
|
}, [store, id]);
|
|
46
91
|
}
|
|
92
|
+
function setOpenTriggerState(state, open, trigger) {
|
|
93
|
+
const triggerId = trigger?.id ?? null;
|
|
94
|
+
|
|
95
|
+
// If a popup is closing, the `trigger` may be undefined.
|
|
96
|
+
// We want to keep the previous value so that exit animations are played and focus is returned correctly.
|
|
97
|
+
if (triggerId || open) {
|
|
98
|
+
state.activeTriggerId = triggerId;
|
|
99
|
+
state.activeTriggerElement = trigger ?? null;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
47
102
|
|
|
48
103
|
/**
|
|
49
104
|
* Sets up trigger data forwarding to the store.
|
|
50
105
|
*
|
|
51
106
|
* @param triggerId Id of the trigger.
|
|
52
|
-
* @param
|
|
107
|
+
* @param triggerElementRef Ref for the trigger DOM element.
|
|
53
108
|
* @param store The Store instance managing the popup state.
|
|
54
109
|
* @param stateUpdates An object with state updates to apply when the trigger is active.
|
|
55
110
|
*/
|
|
@@ -58,22 +113,22 @@ function useTriggerDataForwarding(triggerId, triggerElementRef, store, stateUpda
|
|
|
58
113
|
const baseRegisterTrigger = useTriggerRegistration(triggerId, store);
|
|
59
114
|
const registerTrigger = (0, _useStableCallback.useStableCallback)(element => {
|
|
60
115
|
baseRegisterTrigger(element);
|
|
61
|
-
if (!element
|
|
116
|
+
if (!element) {
|
|
62
117
|
return;
|
|
63
118
|
}
|
|
119
|
+
const open = store.select('open');
|
|
64
120
|
const activeTriggerId = store.select('activeTriggerId');
|
|
65
121
|
if (activeTriggerId === triggerId) {
|
|
66
122
|
store.update({
|
|
67
123
|
activeTriggerElement: element,
|
|
68
|
-
...stateUpdates
|
|
124
|
+
...(open ? stateUpdates : null)
|
|
69
125
|
});
|
|
70
126
|
return;
|
|
71
127
|
}
|
|
72
|
-
if (activeTriggerId == null) {
|
|
73
|
-
//
|
|
74
|
-
//
|
|
75
|
-
//
|
|
76
|
-
// This is mostly for compatibility with contained triggers where no explicit `triggerId` was required in controlled mode.
|
|
128
|
+
if (activeTriggerId == null && open) {
|
|
129
|
+
// If a popup is already open, a detached trigger can mount before any active trigger
|
|
130
|
+
// has been established. Claim the first registered trigger so trigger-owned focus
|
|
131
|
+
// management and ARIA relationships work.
|
|
77
132
|
store.update({
|
|
78
133
|
activeTriggerId: triggerId,
|
|
79
134
|
activeTriggerElement: element,
|
|
@@ -97,32 +152,44 @@ function useTriggerDataForwarding(triggerId, triggerElementRef, store, stateUpda
|
|
|
97
152
|
}
|
|
98
153
|
/**
|
|
99
154
|
* Ensures that when there's only one trigger element registered, it is set as the active trigger.
|
|
100
|
-
* This allows controlled popups to work correctly without
|
|
101
|
-
* with
|
|
155
|
+
* This keeps triggerCount reactive while open and allows controlled popups to work correctly without
|
|
156
|
+
* an explicit triggerId, maintaining compatibility with contained triggers.
|
|
102
157
|
*
|
|
103
158
|
* This should be called on the Root part.
|
|
104
159
|
*
|
|
105
|
-
* @param open Whether the popup is open.
|
|
106
160
|
* @param store The Store instance managing the popup state.
|
|
107
161
|
*/
|
|
108
162
|
function useImplicitActiveTrigger(store) {
|
|
109
163
|
const open = store.useState('open');
|
|
164
|
+
const reactiveTriggerCount = store.useState('triggerCount');
|
|
110
165
|
(0, _useIsoLayoutEffect.useIsoLayoutEffect)(() => {
|
|
111
|
-
if (open
|
|
166
|
+
if (!open) {
|
|
167
|
+
if (store.state.triggerCount !== 0) {
|
|
168
|
+
store.set('triggerCount', 0);
|
|
169
|
+
}
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
const triggerCount = store.context.triggerElements.size;
|
|
173
|
+
const stateUpdates = {};
|
|
174
|
+
if (store.state.triggerCount !== triggerCount) {
|
|
175
|
+
stateUpdates.triggerCount = triggerCount;
|
|
176
|
+
}
|
|
177
|
+
if (!store.select('activeTriggerId') && triggerCount === 1) {
|
|
112
178
|
const iteratorResult = store.context.triggerElements.entries().next();
|
|
113
179
|
if (!iteratorResult.done) {
|
|
114
180
|
const [implicitTriggerId, implicitTriggerElement] = iteratorResult.value;
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
activeTriggerElement: implicitTriggerElement
|
|
118
|
-
});
|
|
181
|
+
stateUpdates.activeTriggerId = implicitTriggerId;
|
|
182
|
+
stateUpdates.activeTriggerElement = implicitTriggerElement;
|
|
119
183
|
}
|
|
120
184
|
}
|
|
121
|
-
|
|
185
|
+
if (stateUpdates.triggerCount !== undefined || stateUpdates.activeTriggerId !== undefined) {
|
|
186
|
+
store.update(stateUpdates);
|
|
187
|
+
}
|
|
188
|
+
}, [open, store, reactiveTriggerCount]);
|
|
122
189
|
}
|
|
123
190
|
|
|
124
191
|
/**
|
|
125
|
-
*
|
|
192
|
+
* Manages the mounted state of the popup.
|
|
126
193
|
* Sets up the transition status listeners and handles unmounting when needed.
|
|
127
194
|
* Updates the `mounted` and `transitionStatus` states in the store.
|
|
128
195
|
*
|
|
@@ -147,14 +214,15 @@ function useOpenStateTransitions(open, store, onUnmount) {
|
|
|
147
214
|
store.update({
|
|
148
215
|
activeTriggerId: null,
|
|
149
216
|
activeTriggerElement: null,
|
|
150
|
-
mounted: false
|
|
217
|
+
mounted: false,
|
|
218
|
+
preventUnmountingOnClose: false
|
|
151
219
|
});
|
|
152
220
|
onUnmount?.();
|
|
153
221
|
store.context.onOpenChangeComplete?.(false);
|
|
154
222
|
});
|
|
155
223
|
const preventUnmountingOnClose = store.useState('preventUnmountingOnClose');
|
|
156
224
|
(0, _useOpenChangeComplete.useOpenChangeComplete)({
|
|
157
|
-
enabled: !preventUnmountingOnClose,
|
|
225
|
+
enabled: mounted && !open && !preventUnmountingOnClose,
|
|
158
226
|
open,
|
|
159
227
|
ref: store.context.popupRef,
|
|
160
228
|
onComplete() {
|
|
@@ -167,4 +235,26 @@ function useOpenStateTransitions(open, store, onUnmount) {
|
|
|
167
235
|
forceUnmount,
|
|
168
236
|
transitionStatus
|
|
169
237
|
};
|
|
238
|
+
}
|
|
239
|
+
function usePopupInteractionProps(store, statePart) {
|
|
240
|
+
store.useSyncedValues(statePart);
|
|
241
|
+
(0, _useIsoLayoutEffect.useIsoLayoutEffect)(() => () => {
|
|
242
|
+
store.update({
|
|
243
|
+
activeTriggerProps: _empty.EMPTY_OBJECT,
|
|
244
|
+
inactiveTriggerProps: _empty.EMPTY_OBJECT,
|
|
245
|
+
popupProps: _empty.EMPTY_OBJECT
|
|
246
|
+
});
|
|
247
|
+
}, [store]);
|
|
248
|
+
}
|
|
249
|
+
function usePopupRootSync(store, open) {
|
|
250
|
+
(0, _useIsoLayoutEffect.useIsoLayoutEffect)(() => {
|
|
251
|
+
if (!open && store.state.openMethod !== null) {
|
|
252
|
+
store.set('openMethod', null);
|
|
253
|
+
}
|
|
254
|
+
}, [open, store]);
|
|
255
|
+
(0, _useIsoLayoutEffect.useIsoLayoutEffect)(() => () => {
|
|
256
|
+
if (store.state.openMethod !== null) {
|
|
257
|
+
store.set('openMethod', null);
|
|
258
|
+
}
|
|
259
|
+
}, [store]);
|
|
170
260
|
}
|
|
@@ -33,6 +33,8 @@ class PopupTriggerMap {
|
|
|
33
33
|
this.idMap.set(id, element);
|
|
34
34
|
if (process.env.NODE_ENV !== 'production') {
|
|
35
35
|
if (this.elementsSet.size !== this.idMap.size) {
|
|
36
|
+
// TODO: fix mui/no-guarded-throw
|
|
37
|
+
// eslint-disable-next-line mui/no-guarded-throw
|
|
36
38
|
throw new Error('Base UI: A trigger element cannot be registered under multiple IDs in PopupTriggerMap.');
|
|
37
39
|
}
|
|
38
40
|
}
|
package/utils/popups/store.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { FloatingRootContext } from "../../floating-ui-react/index.js";
|
|
2
|
+
import { FloatingRootStore } from "../../floating-ui-react/components/FloatingRootStore.js";
|
|
2
3
|
import { TransitionStatus } from "../../internals/useTransitionStatus.js";
|
|
3
4
|
import { PopupTriggerMap } from "./popupTriggerMap.js";
|
|
4
5
|
import { HTMLProps } from "../../internals/types.js";
|
|
@@ -24,9 +25,14 @@ export type PopupStoreState<Payload> = {
|
|
|
24
25
|
*/
|
|
25
26
|
transitionStatus: TransitionStatus;
|
|
26
27
|
floatingRootContext: FloatingRootContext;
|
|
28
|
+
floatingId: string | undefined;
|
|
29
|
+
/**
|
|
30
|
+
* Number of trigger elements currently registered for this popup.
|
|
31
|
+
*/
|
|
32
|
+
triggerCount: number;
|
|
27
33
|
/**
|
|
28
34
|
* Whether to prevent unmounting the popup when closed.
|
|
29
|
-
* Useful for
|
|
35
|
+
* Useful for interacting with JS animation libraries that control unmounting themselves.
|
|
30
36
|
*/
|
|
31
37
|
preventUnmountingOnClose: boolean;
|
|
32
38
|
/**
|
|
@@ -67,6 +73,7 @@ export type PopupStoreState<Payload> = {
|
|
|
67
73
|
popupProps: HTMLProps;
|
|
68
74
|
};
|
|
69
75
|
export declare function createInitialPopupStoreState<Payload>(): PopupStoreState<Payload>;
|
|
76
|
+
export declare function createPopupFloatingRootContext(triggerElements: PopupTriggerMap, floatingId?: string | undefined, nested?: boolean): FloatingRootStore;
|
|
70
77
|
export type PopupStoreContext<ChangeEventDetails> = {
|
|
71
78
|
/**
|
|
72
79
|
* Map of registered trigger elements.
|
|
@@ -90,11 +97,13 @@ export declare const popupStoreSelectors: {
|
|
|
90
97
|
open: (state: S) => boolean;
|
|
91
98
|
mounted: (state: S) => boolean;
|
|
92
99
|
transitionStatus: (state: S) => TransitionStatus;
|
|
93
|
-
floatingRootContext: (state: S) =>
|
|
100
|
+
floatingRootContext: (state: S) => FloatingRootStore;
|
|
101
|
+
triggerCount: (state: S) => number;
|
|
94
102
|
preventUnmountingOnClose: (state: S) => boolean;
|
|
95
103
|
payload: (state: S) => unknown;
|
|
96
104
|
activeTriggerId: (state: S) => string | null;
|
|
97
105
|
activeTriggerElement: (state: S) => Element | null;
|
|
106
|
+
popupId: (state: S) => string | undefined;
|
|
98
107
|
/**
|
|
99
108
|
* Whether the trigger with the given ID was used to open the popup.
|
|
100
109
|
*/
|
|
@@ -108,6 +117,10 @@ export declare const popupStoreSelectors: {
|
|
|
108
117
|
*/
|
|
109
118
|
isMountedByTrigger: (state: S, triggerId: string | undefined) => boolean;
|
|
110
119
|
triggerProps: (state: S, isActive: boolean) => HTMLProps;
|
|
120
|
+
/**
|
|
121
|
+
* Popup id for the trigger that currently owns the open popup.
|
|
122
|
+
*/
|
|
123
|
+
triggerPopupId: (state: S, triggerId: string | undefined) => string | undefined;
|
|
111
124
|
popupProps: (state: S) => HTMLProps;
|
|
112
125
|
popupElement: (state: S) => HTMLElement | null;
|
|
113
126
|
positionerElement: (state: S) => HTMLElement | null;
|
package/utils/popups/store.js
CHANGED
|
@@ -4,9 +4,11 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.createInitialPopupStoreState = createInitialPopupStoreState;
|
|
7
|
+
exports.createPopupFloatingRootContext = createPopupFloatingRootContext;
|
|
7
8
|
exports.popupStoreSelectors = void 0;
|
|
8
9
|
var _store = require("@base-ui/utils/store");
|
|
9
10
|
var _empty = require("@base-ui/utils/empty");
|
|
11
|
+
var _FloatingRootStore = require("../../floating-ui-react/components/FloatingRootStore");
|
|
10
12
|
var _getEmptyRootContext = require("../../floating-ui-react/utils/getEmptyRootContext");
|
|
11
13
|
/**
|
|
12
14
|
* State common to all popup stores.
|
|
@@ -19,6 +21,8 @@ function createInitialPopupStoreState() {
|
|
|
19
21
|
mounted: false,
|
|
20
22
|
transitionStatus: undefined,
|
|
21
23
|
floatingRootContext: (0, _getEmptyRootContext.getEmptyRootContext)(),
|
|
24
|
+
floatingId: undefined,
|
|
25
|
+
triggerCount: 0,
|
|
22
26
|
preventUnmountingOnClose: false,
|
|
23
27
|
payload: undefined,
|
|
24
28
|
activeTriggerId: null,
|
|
@@ -31,16 +35,45 @@ function createInitialPopupStoreState() {
|
|
|
31
35
|
popupProps: _empty.EMPTY_OBJECT
|
|
32
36
|
};
|
|
33
37
|
}
|
|
38
|
+
function createPopupFloatingRootContext(triggerElements, floatingId, nested = false) {
|
|
39
|
+
return new _FloatingRootStore.FloatingRootStore({
|
|
40
|
+
open: false,
|
|
41
|
+
transitionStatus: undefined,
|
|
42
|
+
floatingElement: null,
|
|
43
|
+
referenceElement: null,
|
|
44
|
+
triggerElements,
|
|
45
|
+
floatingId,
|
|
46
|
+
syncOnly: true,
|
|
47
|
+
nested,
|
|
48
|
+
onOpenChange: undefined
|
|
49
|
+
});
|
|
50
|
+
}
|
|
34
51
|
const activeTriggerIdSelector = (0, _store.createSelector)(state => state.triggerIdProp ?? state.activeTriggerId);
|
|
52
|
+
const openSelector = (0, _store.createSelector)(state => state.openProp ?? state.open);
|
|
53
|
+
const popupIdSelector = (0, _store.createSelector)(state => {
|
|
54
|
+
const popupId = state.popupElement?.id ?? state.floatingId;
|
|
55
|
+
return popupId || undefined;
|
|
56
|
+
});
|
|
57
|
+
function triggerOwnsOpenPopup(state, triggerId) {
|
|
58
|
+
return triggerId !== undefined && openSelector(state) && activeTriggerIdSelector(state) === triggerId;
|
|
59
|
+
}
|
|
60
|
+
function triggerOwnsOpenPopupOrIsOnlyTrigger(state, triggerId) {
|
|
61
|
+
if (triggerOwnsOpenPopup(state, triggerId)) {
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
return triggerId !== undefined && openSelector(state) && activeTriggerIdSelector(state) == null && state.triggerCount === 1;
|
|
65
|
+
}
|
|
35
66
|
const popupStoreSelectors = exports.popupStoreSelectors = {
|
|
36
|
-
open:
|
|
67
|
+
open: openSelector,
|
|
37
68
|
mounted: (0, _store.createSelector)(state => state.mounted),
|
|
38
69
|
transitionStatus: (0, _store.createSelector)(state => state.transitionStatus),
|
|
39
70
|
floatingRootContext: (0, _store.createSelector)(state => state.floatingRootContext),
|
|
71
|
+
triggerCount: (0, _store.createSelector)(state => state.triggerCount),
|
|
40
72
|
preventUnmountingOnClose: (0, _store.createSelector)(state => state.preventUnmountingOnClose),
|
|
41
73
|
payload: (0, _store.createSelector)(state => state.payload),
|
|
42
74
|
activeTriggerId: activeTriggerIdSelector,
|
|
43
75
|
activeTriggerElement: (0, _store.createSelector)(state => state.mounted ? state.activeTriggerElement : null),
|
|
76
|
+
popupId: popupIdSelector,
|
|
44
77
|
/**
|
|
45
78
|
* Whether the trigger with the given ID was used to open the popup.
|
|
46
79
|
*/
|
|
@@ -48,12 +81,16 @@ const popupStoreSelectors = exports.popupStoreSelectors = {
|
|
|
48
81
|
/**
|
|
49
82
|
* Whether the popup is open and was activated by a trigger with the given ID.
|
|
50
83
|
*/
|
|
51
|
-
isOpenedByTrigger: (0, _store.createSelector)((state, triggerId) =>
|
|
84
|
+
isOpenedByTrigger: (0, _store.createSelector)((state, triggerId) => triggerOwnsOpenPopup(state, triggerId)),
|
|
52
85
|
/**
|
|
53
86
|
* Whether the popup is mounted and was activated by a trigger with the given ID.
|
|
54
87
|
*/
|
|
55
88
|
isMountedByTrigger: (0, _store.createSelector)((state, triggerId) => triggerId !== undefined && activeTriggerIdSelector(state) === triggerId && state.mounted),
|
|
56
89
|
triggerProps: (0, _store.createSelector)((state, isActive) => isActive ? state.activeTriggerProps : state.inactiveTriggerProps),
|
|
90
|
+
/**
|
|
91
|
+
* Popup id for the trigger that currently owns the open popup.
|
|
92
|
+
*/
|
|
93
|
+
triggerPopupId: (0, _store.createSelector)((state, triggerId) => triggerOwnsOpenPopupOrIsOnlyTrigger(state, triggerId) ? popupIdSelector(state) : undefined),
|
|
57
94
|
popupProps: (0, _store.createSelector)(state => state.popupProps),
|
|
58
95
|
popupElement: (0, _store.createSelector)(state => state.popupElement),
|
|
59
96
|
positionerElement: (0, _store.createSelector)(state => state.positionerElement)
|
|
@@ -8,7 +8,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
8
8
|
exports.useTriggerFocusGuards = useTriggerFocusGuards;
|
|
9
9
|
var React = _interopRequireWildcard(require("react"));
|
|
10
10
|
var ReactDOM = _interopRequireWildcard(require("react-dom"));
|
|
11
|
-
var _useStableCallback = require("@base-ui/utils/useStableCallback");
|
|
12
11
|
var _utils = require("../../floating-ui-react/utils");
|
|
13
12
|
var _createBaseUIEventDetails = require("../../internals/createBaseUIEventDetails");
|
|
14
13
|
var _reasons = require("../../internals/reasons");
|
|
@@ -26,14 +25,14 @@ var _reasons = require("../../internals/reasons");
|
|
|
26
25
|
*/
|
|
27
26
|
function useTriggerFocusGuards(store, triggerElementRef) {
|
|
28
27
|
const preFocusGuardRef = React.useRef(null);
|
|
29
|
-
|
|
28
|
+
function handlePreFocusGuardFocus(event) {
|
|
30
29
|
ReactDOM.flushSync(() => {
|
|
31
30
|
store.setOpen(false, (0, _createBaseUIEventDetails.createChangeEventDetails)(_reasons.REASONS.focusOut, event.nativeEvent, event.currentTarget));
|
|
32
31
|
});
|
|
33
32
|
const previousTabbable = (0, _utils.getTabbableBeforeElement)(preFocusGuardRef.current);
|
|
34
33
|
previousTabbable?.focus();
|
|
35
|
-
}
|
|
36
|
-
|
|
34
|
+
}
|
|
35
|
+
function handleFocusTargetFocus(event) {
|
|
37
36
|
const positionerElement = store.select('positionerElement');
|
|
38
37
|
if (positionerElement && (0, _utils.isOutsideEvent)(event, positionerElement)) {
|
|
39
38
|
store.context.beforeContentFocusGuardRef.current?.focus();
|
|
@@ -51,7 +50,7 @@ function useTriggerFocusGuards(store, triggerElementRef) {
|
|
|
51
50
|
}
|
|
52
51
|
nextTabbable?.focus();
|
|
53
52
|
}
|
|
54
|
-
}
|
|
53
|
+
}
|
|
55
54
|
return {
|
|
56
55
|
preFocusGuardRef,
|
|
57
56
|
handlePreFocusGuardFocus,
|
|
@@ -220,6 +220,11 @@ export interface UseAnchorPositioningParameters extends UseAnchorPositioningShar
|
|
|
220
220
|
shiftCrossAxis?: boolean | undefined;
|
|
221
221
|
lazyFlip?: boolean | undefined;
|
|
222
222
|
externalTree?: FloatingTreeStore | undefined;
|
|
223
|
+
/**
|
|
224
|
+
* Optional middleware that can replace the measured reference rect before offsets and collision
|
|
225
|
+
* middleware run. Used by Preview Card to position against a specific inline line box.
|
|
226
|
+
*/
|
|
227
|
+
inline?: Middleware | undefined;
|
|
223
228
|
}
|
|
224
229
|
export interface UseAnchorPositioningReturnValue {
|
|
225
230
|
positionerStyles: React.CSSProperties;
|
|
@@ -65,6 +65,7 @@ function useAnchorPositioning(params) {
|
|
|
65
65
|
sticky = false,
|
|
66
66
|
arrowPadding = 5,
|
|
67
67
|
disableAnchorTracking = false,
|
|
68
|
+
inline: inlineMiddleware,
|
|
68
69
|
// Private parameters
|
|
69
70
|
keepMounted = false,
|
|
70
71
|
floatingRootContext,
|
|
@@ -139,7 +140,11 @@ function useAnchorPositioning(params) {
|
|
|
139
140
|
const alignOffsetRef = (0, _useValueAsRef.useValueAsRef)(alignOffset);
|
|
140
141
|
const sideOffsetDep = typeof sideOffset !== 'function' ? sideOffset : 0;
|
|
141
142
|
const alignOffsetDep = typeof alignOffset !== 'function' ? alignOffset : 0;
|
|
142
|
-
const middleware = [
|
|
143
|
+
const middleware = [];
|
|
144
|
+
if (inlineMiddleware) {
|
|
145
|
+
middleware.push(inlineMiddleware);
|
|
146
|
+
}
|
|
147
|
+
middleware.push((0, _floatingUiReact.offset)(state => {
|
|
143
148
|
const data = getOffsetData(state, sideParam, isRtl);
|
|
144
149
|
const sideAxis = typeof sideOffsetRef.current === 'function' ? sideOffsetRef.current(data) : sideOffsetRef.current;
|
|
145
150
|
const alignAxis = typeof alignOffsetRef.current === 'function' ? alignOffsetRef.current(data) : alignOffsetRef.current;
|
|
@@ -148,7 +153,7 @@ function useAnchorPositioning(params) {
|
|
|
148
153
|
crossAxis: alignAxis,
|
|
149
154
|
alignmentAxis: alignAxis
|
|
150
155
|
};
|
|
151
|
-
}, [sideOffsetDep, alignOffsetDep, isRtl, sideParam])
|
|
156
|
+
}, [sideOffsetDep, alignOffsetDep, isRtl, sideParam]));
|
|
152
157
|
const shiftDisabled = collisionAvoidanceAlign === 'none' && collisionAvoidanceSide !== 'shift';
|
|
153
158
|
const crossAxisShiftEnabled = !shiftDisabled && (sticky || shiftCrossAxis || collisionAvoidanceSide === 'shift');
|
|
154
159
|
const flipMiddleware = collisionAvoidanceSide === 'none' ? null : (0, _floatingUiReact.flip)({
|
|
@@ -233,10 +238,10 @@ function useAnchorPositioning(params) {
|
|
|
233
238
|
floatingStyle.setProperty('--anchor-width', `${anchorWidth}px`);
|
|
234
239
|
floatingStyle.setProperty('--anchor-height', `${anchorHeight}px`);
|
|
235
240
|
}
|
|
236
|
-
}), (0, _arrow.arrow)(
|
|
241
|
+
}), (0, _arrow.arrow)(state => ({
|
|
237
242
|
// `transform-origin` calculations rely on an element existing. If the arrow hasn't been set,
|
|
238
243
|
// we'll create a fake element.
|
|
239
|
-
element: arrowRef.current || (0, _owner.ownerDocument)(
|
|
244
|
+
element: arrowRef.current || (0, _owner.ownerDocument)(state.elements.floating).createElement('div'),
|
|
240
245
|
padding: arrowPadding,
|
|
241
246
|
offsetParent: 'floating'
|
|
242
247
|
}), [arrowPadding]), {
|
|
@@ -373,11 +378,9 @@ function useAnchorPositioning(params) {
|
|
|
373
378
|
const renderedAlign = (0, _utils.getAlignment)(renderedPlacement) || 'center';
|
|
374
379
|
const anchorHidden = Boolean(middlewareData.hide?.referenceHidden);
|
|
375
380
|
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
* the size of the popup dynamically to avoid unwanted flipping when typing.
|
|
380
|
-
*/
|
|
381
|
+
// Locks the flip (makes it "sticky") so it doesn't prefer a given placement
|
|
382
|
+
// and flips back lazily, not eagerly. Ideal for filtered lists that change
|
|
383
|
+
// the size of the popup dynamically to avoid unwanted flipping when typing.
|
|
381
384
|
(0, _useIsoLayoutEffect.useIsoLayoutEffect)(() => {
|
|
382
385
|
if (lazyFlip && mounted && isPositioned) {
|
|
383
386
|
setMountSide(renderedSide);
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { InteractionType } from '@base-ui/utils/useEnhancedClickHandler';
|
|
3
|
+
export declare function useOpenMethodTriggerProps(open: boolean | (() => boolean), setOpenMethod: (interactionType: InteractionType | null) => void): {
|
|
4
|
+
onClick: (event: React.MouseEvent | React.PointerEvent) => void;
|
|
5
|
+
onPointerDown: (event: React.PointerEvent) => void;
|
|
6
|
+
};
|
|
3
7
|
/**
|
|
4
8
|
* Determines the interaction type (keyboard, mouse, touch, etc.) that opened the component.
|
|
5
9
|
*
|
|
@@ -6,20 +6,16 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
8
|
exports.useOpenInteractionType = useOpenInteractionType;
|
|
9
|
+
exports.useOpenMethodTriggerProps = useOpenMethodTriggerProps;
|
|
9
10
|
var React = _interopRequireWildcard(require("react"));
|
|
10
11
|
var _useStableCallback = require("@base-ui/utils/useStableCallback");
|
|
11
12
|
var _useEnhancedClickHandler = require("@base-ui/utils/useEnhancedClickHandler");
|
|
12
13
|
var _detectBrowser = require("@base-ui/utils/detectBrowser");
|
|
13
14
|
var _useValueChanged = require("../internals/useValueChanged");
|
|
14
|
-
|
|
15
|
-
* Determines the interaction type (keyboard, mouse, touch, etc.) that opened the component.
|
|
16
|
-
*
|
|
17
|
-
* @param open The open state of the component.
|
|
18
|
-
*/
|
|
19
|
-
function useOpenInteractionType(open) {
|
|
20
|
-
const [openMethod, setOpenMethod] = React.useState(null);
|
|
15
|
+
function useOpenMethodTriggerProps(open, setOpenMethod) {
|
|
21
16
|
const handleTriggerClick = (0, _useStableCallback.useStableCallback)((_, interactionType) => {
|
|
22
|
-
|
|
17
|
+
const isOpen = typeof open === 'function' ? open() : open;
|
|
18
|
+
if (!isOpen) {
|
|
23
19
|
setOpenMethod(interactionType || (
|
|
24
20
|
// On iOS Safari, the hitslop around touch targets means tapping outside an element's
|
|
25
21
|
// bounds does not fire `pointerdown` but does fire `mousedown`. The `interactionType`
|
|
@@ -27,20 +23,31 @@ function useOpenInteractionType(open) {
|
|
|
27
23
|
_detectBrowser.isIOS ? 'touch' : ''));
|
|
28
24
|
}
|
|
29
25
|
});
|
|
26
|
+
const {
|
|
27
|
+
onClick,
|
|
28
|
+
onPointerDown
|
|
29
|
+
} = (0, _useEnhancedClickHandler.useEnhancedClickHandler)(handleTriggerClick);
|
|
30
|
+
return React.useMemo(() => ({
|
|
31
|
+
onClick,
|
|
32
|
+
onPointerDown
|
|
33
|
+
}), [onClick, onPointerDown]);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Determines the interaction type (keyboard, mouse, touch, etc.) that opened the component.
|
|
38
|
+
*
|
|
39
|
+
* @param open The open state of the component.
|
|
40
|
+
*/
|
|
41
|
+
function useOpenInteractionType(open) {
|
|
42
|
+
const [openMethod, setOpenMethod] = React.useState(null);
|
|
43
|
+
const triggerProps = useOpenMethodTriggerProps(open, setOpenMethod);
|
|
30
44
|
(0, _useValueChanged.useValueChanged)(open, previousOpen => {
|
|
31
45
|
if (previousOpen && !open) {
|
|
32
46
|
setOpenMethod(null);
|
|
33
47
|
}
|
|
34
48
|
});
|
|
35
|
-
const {
|
|
36
|
-
onClick,
|
|
37
|
-
onPointerDown
|
|
38
|
-
} = (0, _useEnhancedClickHandler.useEnhancedClickHandler)(handleTriggerClick);
|
|
39
49
|
return React.useMemo(() => ({
|
|
40
50
|
openMethod,
|
|
41
|
-
triggerProps
|
|
42
|
-
|
|
43
|
-
onPointerDown
|
|
44
|
-
}
|
|
45
|
-
}), [openMethod, onClick, onPointerDown]);
|
|
51
|
+
triggerProps
|
|
52
|
+
}), [openMethod, triggerProps]);
|
|
46
53
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { CheckboxGroup } from "./CheckboxGroup.js";
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
Object.defineProperty(exports, "CheckboxGroup", {
|
|
7
|
-
enumerable: true,
|
|
8
|
-
get: function () {
|
|
9
|
-
return _CheckboxGroup.CheckboxGroup;
|
|
10
|
-
}
|
|
11
|
-
});
|
|
12
|
-
var _CheckboxGroup = require("./CheckboxGroup");
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { CheckboxGroup } from "./CheckboxGroup.js";
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { CheckboxGroup } from "./CheckboxGroup.js";
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import * as React from 'react';
|
|
2
|
-
import type { ElementProps } from "../types.js";
|
|
3
|
-
import { ACTIVE_KEY, SELECTED_KEY } from "../utils/constants.js";
|
|
4
|
-
export type ExtendedUserProps = {
|
|
5
|
-
[ACTIVE_KEY]?: boolean | undefined;
|
|
6
|
-
[SELECTED_KEY]?: boolean | undefined;
|
|
7
|
-
};
|
|
8
|
-
export interface UseInteractionsReturn {
|
|
9
|
-
getReferenceProps: (userProps?: React.HTMLProps<Element>) => Record<string, unknown>;
|
|
10
|
-
getFloatingProps: (userProps?: React.HTMLProps<HTMLElement>) => Record<string, unknown>;
|
|
11
|
-
getItemProps: (userProps?: Omit<React.HTMLProps<HTMLElement>, 'selected' | 'active'> & ExtendedUserProps) => Record<string, unknown>;
|
|
12
|
-
getTriggerProps: (userProps?: React.HTMLProps<Element>) => Record<string, unknown>;
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* Merges an array of interaction hooks' props into prop getters, allowing
|
|
16
|
-
* event handler functions to be composed together without overwriting one
|
|
17
|
-
* another.
|
|
18
|
-
* @see https://floating-ui.com/docs/useInteractions
|
|
19
|
-
*/
|
|
20
|
-
export declare function useInteractions(propsList?: Array<ElementProps | void>): UseInteractionsReturn;
|