@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
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { useOnFirstRender } from '@base-ui/utils/useOnFirstRender';
|
|
5
|
+
import { DialogInteractions, useDialogRoot } from "./useDialogRoot.js";
|
|
6
|
+
import { DialogRootContext, IsDrawerContext, useDialogRootContext } from "./DialogRootContext.js";
|
|
7
|
+
import { DialogStore } from "../store/DialogStore.js";
|
|
8
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
9
|
+
export function useRenderDialogRoot(props, mode = 'dialog') {
|
|
10
|
+
const {
|
|
11
|
+
children,
|
|
12
|
+
open: openProp,
|
|
13
|
+
defaultOpen = false,
|
|
14
|
+
onOpenChange,
|
|
15
|
+
onOpenChangeComplete,
|
|
16
|
+
disablePointerDismissal: disablePointerDismissalProp = false,
|
|
17
|
+
modal: modalProp = true,
|
|
18
|
+
actionsRef,
|
|
19
|
+
handle,
|
|
20
|
+
triggerId: triggerIdProp,
|
|
21
|
+
defaultTriggerId: defaultTriggerIdProp = null
|
|
22
|
+
} = props;
|
|
23
|
+
const isDrawer = mode === 'drawer';
|
|
24
|
+
const isAlertDialog = mode === 'alert-dialog';
|
|
25
|
+
const modal = isAlertDialog ? true : modalProp;
|
|
26
|
+
const disablePointerDismissal = isAlertDialog || disablePointerDismissalProp;
|
|
27
|
+
const role = isAlertDialog ? 'alertdialog' : 'dialog';
|
|
28
|
+
const parentDialogRootContext = useDialogRootContext(true);
|
|
29
|
+
const nested = Boolean(parentDialogRootContext);
|
|
30
|
+
const rootState = {
|
|
31
|
+
modal,
|
|
32
|
+
disablePointerDismissal,
|
|
33
|
+
nested,
|
|
34
|
+
role
|
|
35
|
+
};
|
|
36
|
+
const store = DialogStore.useStore(handle?.store, {
|
|
37
|
+
open: defaultOpen,
|
|
38
|
+
openProp,
|
|
39
|
+
activeTriggerId: defaultTriggerIdProp,
|
|
40
|
+
triggerIdProp,
|
|
41
|
+
...rootState
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
// Support initially open state when uncontrolled
|
|
45
|
+
useOnFirstRender(() => {
|
|
46
|
+
const nextState = openProp === undefined && store.state.open === false && defaultOpen === true ? {
|
|
47
|
+
open: true,
|
|
48
|
+
activeTriggerId: defaultTriggerIdProp
|
|
49
|
+
} : null;
|
|
50
|
+
if (isAlertDialog) {
|
|
51
|
+
// Handles can reuse plain Dialog stores; alert dialog invariants must exist immediately.
|
|
52
|
+
store.update(nextState ? {
|
|
53
|
+
...rootState,
|
|
54
|
+
...nextState
|
|
55
|
+
} : rootState);
|
|
56
|
+
} else if (nextState) {
|
|
57
|
+
store.update(nextState);
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
store.useControlledProp('openProp', openProp);
|
|
61
|
+
store.useControlledProp('triggerIdProp', triggerIdProp);
|
|
62
|
+
store.useSyncedValues(rootState);
|
|
63
|
+
store.useContextCallback('onOpenChange', onOpenChange);
|
|
64
|
+
store.useContextCallback('onOpenChangeComplete', onOpenChangeComplete);
|
|
65
|
+
const open = store.useState('open');
|
|
66
|
+
const mounted = store.useState('mounted');
|
|
67
|
+
const payload = store.useState('payload');
|
|
68
|
+
const dialogRoot = useDialogRoot({
|
|
69
|
+
store,
|
|
70
|
+
actionsRef,
|
|
71
|
+
parentContext: parentDialogRootContext?.store.context,
|
|
72
|
+
isDrawer
|
|
73
|
+
});
|
|
74
|
+
const shouldRenderInteractions = open || mounted;
|
|
75
|
+
const contextValue = React.useMemo(() => ({
|
|
76
|
+
store
|
|
77
|
+
}), [store]);
|
|
78
|
+
return /*#__PURE__*/_jsx(IsDrawerContext.Provider, {
|
|
79
|
+
value: false,
|
|
80
|
+
children: /*#__PURE__*/_jsxs(DialogRootContext.Provider, {
|
|
81
|
+
value: contextValue,
|
|
82
|
+
children: [shouldRenderInteractions && /*#__PURE__*/_jsx(DialogInteractions, {
|
|
83
|
+
store: store,
|
|
84
|
+
dialogRoot: dialogRoot
|
|
85
|
+
}), typeof children === 'function' ? children({
|
|
86
|
+
payload
|
|
87
|
+
}) : children]
|
|
88
|
+
})
|
|
89
|
+
});
|
|
90
|
+
}
|
|
@@ -11,7 +11,7 @@ export declare class DialogHandle<Payload> {
|
|
|
11
11
|
constructor(store?: DialogStore<Payload>);
|
|
12
12
|
/**
|
|
13
13
|
* Opens the dialog and associates it with the trigger with the given id.
|
|
14
|
-
* The trigger, if provided, must be a
|
|
14
|
+
* The trigger, if provided, must be a matching Trigger component with this handle passed as a prop.
|
|
15
15
|
*
|
|
16
16
|
* This method should only be called in an event handler or an effect (not during rendering).
|
|
17
17
|
*
|
|
@@ -17,7 +17,7 @@ export class DialogHandle {
|
|
|
17
17
|
|
|
18
18
|
/**
|
|
19
19
|
* Opens the dialog and associates it with the trigger with the given id.
|
|
20
|
-
* The trigger, if provided, must be a
|
|
20
|
+
* The trigger, if provided, must be a matching Trigger component with this handle passed as a prop.
|
|
21
21
|
*
|
|
22
22
|
* This method should only be called in an event handler or an effect (not during rendering).
|
|
23
23
|
*
|
|
@@ -55,7 +55,7 @@ export class DialogHandle {
|
|
|
55
55
|
* Indicates whether the dialog is currently open.
|
|
56
56
|
*/
|
|
57
57
|
get isOpen() {
|
|
58
|
-
return this.store.
|
|
58
|
+
return this.store.select('open');
|
|
59
59
|
}
|
|
60
60
|
}
|
|
61
61
|
|
|
@@ -40,6 +40,8 @@ declare const selectors: {
|
|
|
40
40
|
mounted: boolean;
|
|
41
41
|
transitionStatus: import("../../internals/useTransitionStatus.js").TransitionStatus;
|
|
42
42
|
floatingRootContext: import("../../floating-ui-react/index.js").FloatingRootContext;
|
|
43
|
+
floatingId: string | undefined;
|
|
44
|
+
triggerCount: number;
|
|
43
45
|
preventUnmountingOnClose: boolean;
|
|
44
46
|
payload: unknown;
|
|
45
47
|
activeTriggerId: string | null;
|
|
@@ -57,6 +59,8 @@ declare const selectors: {
|
|
|
57
59
|
mounted: boolean;
|
|
58
60
|
transitionStatus: import("../../internals/useTransitionStatus.js").TransitionStatus;
|
|
59
61
|
floatingRootContext: import("../../floating-ui-react/index.js").FloatingRootContext;
|
|
62
|
+
floatingId: string | undefined;
|
|
63
|
+
triggerCount: number;
|
|
60
64
|
preventUnmountingOnClose: boolean;
|
|
61
65
|
payload: unknown;
|
|
62
66
|
activeTriggerId: string | null;
|
|
@@ -74,6 +78,8 @@ declare const selectors: {
|
|
|
74
78
|
mounted: boolean;
|
|
75
79
|
transitionStatus: import("../../internals/useTransitionStatus.js").TransitionStatus;
|
|
76
80
|
floatingRootContext: import("../../floating-ui-react/index.js").FloatingRootContext;
|
|
81
|
+
floatingId: string | undefined;
|
|
82
|
+
triggerCount: number;
|
|
77
83
|
preventUnmountingOnClose: boolean;
|
|
78
84
|
payload: unknown;
|
|
79
85
|
activeTriggerId: string | null;
|
|
@@ -91,6 +97,8 @@ declare const selectors: {
|
|
|
91
97
|
mounted: boolean;
|
|
92
98
|
transitionStatus: import("../../internals/useTransitionStatus.js").TransitionStatus;
|
|
93
99
|
floatingRootContext: import("../../floating-ui-react/index.js").FloatingRootContext;
|
|
100
|
+
floatingId: string | undefined;
|
|
101
|
+
triggerCount: number;
|
|
94
102
|
preventUnmountingOnClose: boolean;
|
|
95
103
|
payload: unknown;
|
|
96
104
|
activeTriggerId: string | null;
|
|
@@ -102,12 +110,33 @@ declare const selectors: {
|
|
|
102
110
|
inactiveTriggerProps: import("../../index.js").HTMLProps;
|
|
103
111
|
popupProps: import("../../index.js").HTMLProps;
|
|
104
112
|
}) => import("../../floating-ui-react/components/FloatingRootStore.js").FloatingRootStore;
|
|
113
|
+
triggerCount: (state: {
|
|
114
|
+
open: boolean;
|
|
115
|
+
readonly openProp: boolean | undefined;
|
|
116
|
+
mounted: boolean;
|
|
117
|
+
transitionStatus: import("../../internals/useTransitionStatus.js").TransitionStatus;
|
|
118
|
+
floatingRootContext: import("../../floating-ui-react/index.js").FloatingRootContext;
|
|
119
|
+
floatingId: string | undefined;
|
|
120
|
+
triggerCount: number;
|
|
121
|
+
preventUnmountingOnClose: boolean;
|
|
122
|
+
payload: unknown;
|
|
123
|
+
activeTriggerId: string | null;
|
|
124
|
+
activeTriggerElement: Element | null;
|
|
125
|
+
readonly triggerIdProp: string | null | undefined;
|
|
126
|
+
popupElement: HTMLElement | null;
|
|
127
|
+
positionerElement: HTMLElement | null;
|
|
128
|
+
activeTriggerProps: import("../../index.js").HTMLProps;
|
|
129
|
+
inactiveTriggerProps: import("../../index.js").HTMLProps;
|
|
130
|
+
popupProps: import("../../index.js").HTMLProps;
|
|
131
|
+
}) => number;
|
|
105
132
|
preventUnmountingOnClose: (state: {
|
|
106
133
|
open: boolean;
|
|
107
134
|
readonly openProp: boolean | undefined;
|
|
108
135
|
mounted: boolean;
|
|
109
136
|
transitionStatus: import("../../internals/useTransitionStatus.js").TransitionStatus;
|
|
110
137
|
floatingRootContext: import("../../floating-ui-react/index.js").FloatingRootContext;
|
|
138
|
+
floatingId: string | undefined;
|
|
139
|
+
triggerCount: number;
|
|
111
140
|
preventUnmountingOnClose: boolean;
|
|
112
141
|
payload: unknown;
|
|
113
142
|
activeTriggerId: string | null;
|
|
@@ -125,6 +154,8 @@ declare const selectors: {
|
|
|
125
154
|
mounted: boolean;
|
|
126
155
|
transitionStatus: import("../../internals/useTransitionStatus.js").TransitionStatus;
|
|
127
156
|
floatingRootContext: import("../../floating-ui-react/index.js").FloatingRootContext;
|
|
157
|
+
floatingId: string | undefined;
|
|
158
|
+
triggerCount: number;
|
|
128
159
|
preventUnmountingOnClose: boolean;
|
|
129
160
|
payload: unknown;
|
|
130
161
|
activeTriggerId: string | null;
|
|
@@ -142,6 +173,8 @@ declare const selectors: {
|
|
|
142
173
|
mounted: boolean;
|
|
143
174
|
transitionStatus: import("../../internals/useTransitionStatus.js").TransitionStatus;
|
|
144
175
|
floatingRootContext: import("../../floating-ui-react/index.js").FloatingRootContext;
|
|
176
|
+
floatingId: string | undefined;
|
|
177
|
+
triggerCount: number;
|
|
145
178
|
preventUnmountingOnClose: boolean;
|
|
146
179
|
payload: unknown;
|
|
147
180
|
activeTriggerId: string | null;
|
|
@@ -159,6 +192,8 @@ declare const selectors: {
|
|
|
159
192
|
mounted: boolean;
|
|
160
193
|
transitionStatus: import("../../internals/useTransitionStatus.js").TransitionStatus;
|
|
161
194
|
floatingRootContext: import("../../floating-ui-react/index.js").FloatingRootContext;
|
|
195
|
+
floatingId: string | undefined;
|
|
196
|
+
triggerCount: number;
|
|
162
197
|
preventUnmountingOnClose: boolean;
|
|
163
198
|
payload: unknown;
|
|
164
199
|
activeTriggerId: string | null;
|
|
@@ -170,12 +205,33 @@ declare const selectors: {
|
|
|
170
205
|
inactiveTriggerProps: import("../../index.js").HTMLProps;
|
|
171
206
|
popupProps: import("../../index.js").HTMLProps;
|
|
172
207
|
}) => Element | null;
|
|
208
|
+
popupId: (state: {
|
|
209
|
+
open: boolean;
|
|
210
|
+
readonly openProp: boolean | undefined;
|
|
211
|
+
mounted: boolean;
|
|
212
|
+
transitionStatus: import("../../internals/useTransitionStatus.js").TransitionStatus;
|
|
213
|
+
floatingRootContext: import("../../floating-ui-react/index.js").FloatingRootContext;
|
|
214
|
+
floatingId: string | undefined;
|
|
215
|
+
triggerCount: number;
|
|
216
|
+
preventUnmountingOnClose: boolean;
|
|
217
|
+
payload: unknown;
|
|
218
|
+
activeTriggerId: string | null;
|
|
219
|
+
activeTriggerElement: Element | null;
|
|
220
|
+
readonly triggerIdProp: string | null | undefined;
|
|
221
|
+
popupElement: HTMLElement | null;
|
|
222
|
+
positionerElement: HTMLElement | null;
|
|
223
|
+
activeTriggerProps: import("../../index.js").HTMLProps;
|
|
224
|
+
inactiveTriggerProps: import("../../index.js").HTMLProps;
|
|
225
|
+
popupProps: import("../../index.js").HTMLProps;
|
|
226
|
+
}) => string | undefined;
|
|
173
227
|
isTriggerActive: (state: {
|
|
174
228
|
open: boolean;
|
|
175
229
|
readonly openProp: boolean | undefined;
|
|
176
230
|
mounted: boolean;
|
|
177
231
|
transitionStatus: import("../../internals/useTransitionStatus.js").TransitionStatus;
|
|
178
232
|
floatingRootContext: import("../../floating-ui-react/index.js").FloatingRootContext;
|
|
233
|
+
floatingId: string | undefined;
|
|
234
|
+
triggerCount: number;
|
|
179
235
|
preventUnmountingOnClose: boolean;
|
|
180
236
|
payload: unknown;
|
|
181
237
|
activeTriggerId: string | null;
|
|
@@ -193,6 +249,8 @@ declare const selectors: {
|
|
|
193
249
|
mounted: boolean;
|
|
194
250
|
transitionStatus: import("../../internals/useTransitionStatus.js").TransitionStatus;
|
|
195
251
|
floatingRootContext: import("../../floating-ui-react/index.js").FloatingRootContext;
|
|
252
|
+
floatingId: string | undefined;
|
|
253
|
+
triggerCount: number;
|
|
196
254
|
preventUnmountingOnClose: boolean;
|
|
197
255
|
payload: unknown;
|
|
198
256
|
activeTriggerId: string | null;
|
|
@@ -210,6 +268,8 @@ declare const selectors: {
|
|
|
210
268
|
mounted: boolean;
|
|
211
269
|
transitionStatus: import("../../internals/useTransitionStatus.js").TransitionStatus;
|
|
212
270
|
floatingRootContext: import("../../floating-ui-react/index.js").FloatingRootContext;
|
|
271
|
+
floatingId: string | undefined;
|
|
272
|
+
triggerCount: number;
|
|
213
273
|
preventUnmountingOnClose: boolean;
|
|
214
274
|
payload: unknown;
|
|
215
275
|
activeTriggerId: string | null;
|
|
@@ -227,6 +287,8 @@ declare const selectors: {
|
|
|
227
287
|
mounted: boolean;
|
|
228
288
|
transitionStatus: import("../../internals/useTransitionStatus.js").TransitionStatus;
|
|
229
289
|
floatingRootContext: import("../../floating-ui-react/index.js").FloatingRootContext;
|
|
290
|
+
floatingId: string | undefined;
|
|
291
|
+
triggerCount: number;
|
|
230
292
|
preventUnmountingOnClose: boolean;
|
|
231
293
|
payload: unknown;
|
|
232
294
|
activeTriggerId: string | null;
|
|
@@ -238,12 +300,33 @@ declare const selectors: {
|
|
|
238
300
|
inactiveTriggerProps: import("../../index.js").HTMLProps;
|
|
239
301
|
popupProps: import("../../index.js").HTMLProps;
|
|
240
302
|
}, isActive: boolean) => import("../../index.js").HTMLProps;
|
|
303
|
+
triggerPopupId: (state: {
|
|
304
|
+
open: boolean;
|
|
305
|
+
readonly openProp: boolean | undefined;
|
|
306
|
+
mounted: boolean;
|
|
307
|
+
transitionStatus: import("../../internals/useTransitionStatus.js").TransitionStatus;
|
|
308
|
+
floatingRootContext: import("../../floating-ui-react/index.js").FloatingRootContext;
|
|
309
|
+
floatingId: string | undefined;
|
|
310
|
+
triggerCount: number;
|
|
311
|
+
preventUnmountingOnClose: boolean;
|
|
312
|
+
payload: unknown;
|
|
313
|
+
activeTriggerId: string | null;
|
|
314
|
+
activeTriggerElement: Element | null;
|
|
315
|
+
readonly triggerIdProp: string | null | undefined;
|
|
316
|
+
popupElement: HTMLElement | null;
|
|
317
|
+
positionerElement: HTMLElement | null;
|
|
318
|
+
activeTriggerProps: import("../../index.js").HTMLProps;
|
|
319
|
+
inactiveTriggerProps: import("../../index.js").HTMLProps;
|
|
320
|
+
popupProps: import("../../index.js").HTMLProps;
|
|
321
|
+
}, triggerId: string | undefined) => string | undefined;
|
|
241
322
|
popupProps: (state: {
|
|
242
323
|
open: boolean;
|
|
243
324
|
readonly openProp: boolean | undefined;
|
|
244
325
|
mounted: boolean;
|
|
245
326
|
transitionStatus: import("../../internals/useTransitionStatus.js").TransitionStatus;
|
|
246
327
|
floatingRootContext: import("../../floating-ui-react/index.js").FloatingRootContext;
|
|
328
|
+
floatingId: string | undefined;
|
|
329
|
+
triggerCount: number;
|
|
247
330
|
preventUnmountingOnClose: boolean;
|
|
248
331
|
payload: unknown;
|
|
249
332
|
activeTriggerId: string | null;
|
|
@@ -261,6 +344,8 @@ declare const selectors: {
|
|
|
261
344
|
mounted: boolean;
|
|
262
345
|
transitionStatus: import("../../internals/useTransitionStatus.js").TransitionStatus;
|
|
263
346
|
floatingRootContext: import("../../floating-ui-react/index.js").FloatingRootContext;
|
|
347
|
+
floatingId: string | undefined;
|
|
348
|
+
triggerCount: number;
|
|
264
349
|
preventUnmountingOnClose: boolean;
|
|
265
350
|
payload: unknown;
|
|
266
351
|
activeTriggerId: string | null;
|
|
@@ -278,6 +363,8 @@ declare const selectors: {
|
|
|
278
363
|
mounted: boolean;
|
|
279
364
|
transitionStatus: import("../../internals/useTransitionStatus.js").TransitionStatus;
|
|
280
365
|
floatingRootContext: import("../../floating-ui-react/index.js").FloatingRootContext;
|
|
366
|
+
floatingId: string | undefined;
|
|
367
|
+
triggerCount: number;
|
|
281
368
|
preventUnmountingOnClose: boolean;
|
|
282
369
|
payload: unknown;
|
|
283
370
|
activeTriggerId: string | null;
|
|
@@ -291,7 +378,7 @@ declare const selectors: {
|
|
|
291
378
|
}) => HTMLElement | null;
|
|
292
379
|
};
|
|
293
380
|
export declare class DialogStore<Payload> extends ReactStore<Readonly<State<Payload>>, Context, typeof selectors> {
|
|
294
|
-
constructor(initialState?: Partial<State<Payload
|
|
381
|
+
constructor(initialState?: Partial<State<Payload>>, floatingId?: string | undefined, nested?: boolean);
|
|
295
382
|
setOpen: (nextOpen: boolean, eventDetails: Omit<DialogRoot.ChangeEventDetails, "preventUnmountOnClose">) => void;
|
|
296
383
|
static useStore<Payload>(externalStore: DialogStore<Payload> | undefined, initialState?: Partial<State<Payload>>): DialogStore<Payload>;
|
|
297
384
|
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { createSelector, ReactStore } from '@base-ui/utils/store';
|
|
3
|
-
import {
|
|
4
|
-
import { createInitialPopupStoreState, popupStoreSelectors, PopupTriggerMap } from "../../utils/popups/index.js";
|
|
3
|
+
import { createPopupFloatingRootContext, createInitialPopupStoreState, popupStoreSelectors, PopupTriggerMap, setOpenTriggerState, usePopupStore } from "../../utils/popups/index.js";
|
|
5
4
|
const selectors = {
|
|
6
5
|
...popupStoreSelectors,
|
|
7
6
|
modal: createSelector(state => state.modal),
|
|
@@ -16,15 +15,18 @@ const selectors = {
|
|
|
16
15
|
role: createSelector(state => state.role)
|
|
17
16
|
};
|
|
18
17
|
export class DialogStore extends ReactStore {
|
|
19
|
-
constructor(initialState) {
|
|
20
|
-
|
|
18
|
+
constructor(initialState, floatingId, nested = false) {
|
|
19
|
+
const triggerElements = new PopupTriggerMap();
|
|
20
|
+
const state = createInitialState(initialState);
|
|
21
|
+
state.floatingRootContext = createPopupFloatingRootContext(triggerElements, floatingId, nested);
|
|
22
|
+
super(state, {
|
|
21
23
|
popupRef: /*#__PURE__*/React.createRef(),
|
|
22
24
|
backdropRef: /*#__PURE__*/React.createRef(),
|
|
23
25
|
internalBackdropRef: /*#__PURE__*/React.createRef(),
|
|
24
26
|
outsidePressEnabledRef: {
|
|
25
27
|
current: true
|
|
26
28
|
},
|
|
27
|
-
triggerElements
|
|
29
|
+
triggerElements,
|
|
28
30
|
onOpenChange: undefined,
|
|
29
31
|
onOpenChangeComplete: undefined
|
|
30
32
|
}, selectors);
|
|
@@ -46,22 +48,15 @@ export class DialogStore extends ReactStore {
|
|
|
46
48
|
const updatedState = {
|
|
47
49
|
open: nextOpen
|
|
48
50
|
};
|
|
49
|
-
|
|
50
|
-
// If a popup is closing, the `trigger` may be null.
|
|
51
|
-
// We want to keep the previous value so that exit animations are played and focus is returned correctly.
|
|
52
|
-
const newTriggerId = eventDetails.trigger?.id ?? null;
|
|
53
|
-
if (newTriggerId || nextOpen) {
|
|
54
|
-
updatedState.activeTriggerId = newTriggerId;
|
|
55
|
-
updatedState.activeTriggerElement = eventDetails.trigger ?? null;
|
|
56
|
-
}
|
|
51
|
+
setOpenTriggerState(updatedState, nextOpen, eventDetails.trigger);
|
|
57
52
|
this.update(updatedState);
|
|
58
53
|
};
|
|
59
54
|
static useStore(externalStore, initialState) {
|
|
60
|
-
|
|
61
|
-
const
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
return
|
|
55
|
+
/* eslint-disable react-hooks/rules-of-hooks */
|
|
56
|
+
const store = usePopupStore(externalStore, (floatingId, nested) => new DialogStore(initialState, floatingId, nested), true).store;
|
|
57
|
+
/* eslint-enable react-hooks/rules-of-hooks */
|
|
58
|
+
|
|
59
|
+
return store;
|
|
65
60
|
}
|
|
66
61
|
}
|
|
67
62
|
function createInitialState(initialState = {}) {
|
|
@@ -23,7 +23,7 @@ export interface DialogTriggerProps<Payload = unknown> extends NativeButtonProps
|
|
|
23
23
|
payload?: Payload | undefined;
|
|
24
24
|
/**
|
|
25
25
|
* ID of the trigger. In addition to being forwarded to the rendered element,
|
|
26
|
-
* it is also used to specify the active trigger for the
|
|
26
|
+
* it is also used to specify the active trigger for the dialog in controlled mode (with the DialogRoot `triggerId` prop).
|
|
27
27
|
*/
|
|
28
28
|
id?: string | undefined;
|
|
29
29
|
}
|
|
@@ -9,7 +9,8 @@ import { triggerOpenStateMapping } from "../../utils/popupStateMapping.js";
|
|
|
9
9
|
import { CLICK_TRIGGER_IDENTIFIER } from "../../internals/constants.js";
|
|
10
10
|
import { useTriggerDataForwarding } from "../../utils/popups/index.js";
|
|
11
11
|
import { useBaseUiId } from "../../internals/useBaseUiId.js";
|
|
12
|
-
import { useClick
|
|
12
|
+
import { useClick } from "../../floating-ui-react/index.js";
|
|
13
|
+
import { useOpenMethodTriggerProps } from "../../utils/useOpenInteractionType.js";
|
|
13
14
|
|
|
14
15
|
/**
|
|
15
16
|
* A button that opens the dialog.
|
|
@@ -21,12 +22,12 @@ export const DialogTrigger = /*#__PURE__*/React.forwardRef(function DialogTrigge
|
|
|
21
22
|
const {
|
|
22
23
|
render,
|
|
23
24
|
className,
|
|
25
|
+
style,
|
|
24
26
|
disabled = false,
|
|
25
27
|
nativeButton = true,
|
|
26
28
|
id: idProp,
|
|
27
29
|
payload,
|
|
28
30
|
handle,
|
|
29
|
-
style,
|
|
30
31
|
...elementProps
|
|
31
32
|
} = componentProps;
|
|
32
33
|
const dialogRootContext = useDialogRootContext(true);
|
|
@@ -37,6 +38,7 @@ export const DialogTrigger = /*#__PURE__*/React.forwardRef(function DialogTrigge
|
|
|
37
38
|
const thisTriggerId = useBaseUiId(idProp);
|
|
38
39
|
const floatingContext = store.useState('floatingRootContext');
|
|
39
40
|
const isOpenedByThisTrigger = store.useState('isOpenedByTrigger', thisTriggerId);
|
|
41
|
+
const popupId = store.useState('triggerPopupId', thisTriggerId);
|
|
40
42
|
const triggerElementRef = React.useRef(null);
|
|
41
43
|
const {
|
|
42
44
|
registerTrigger,
|
|
@@ -54,7 +56,9 @@ export const DialogTrigger = /*#__PURE__*/React.forwardRef(function DialogTrigge
|
|
|
54
56
|
const click = useClick(floatingContext, {
|
|
55
57
|
enabled: floatingContext != null
|
|
56
58
|
});
|
|
57
|
-
const
|
|
59
|
+
const interactionTypeProps = useOpenMethodTriggerProps(() => store.select('open'), interactionType => {
|
|
60
|
+
store.set('openMethod', interactionType);
|
|
61
|
+
});
|
|
58
62
|
const state = {
|
|
59
63
|
disabled,
|
|
60
64
|
open: isOpenedByThisTrigger
|
|
@@ -63,9 +67,12 @@ export const DialogTrigger = /*#__PURE__*/React.forwardRef(function DialogTrigge
|
|
|
63
67
|
return useRenderElement('button', componentProps, {
|
|
64
68
|
state,
|
|
65
69
|
ref: [buttonRef, forwardedRef, registerTrigger, triggerElementRef],
|
|
66
|
-
props: [
|
|
70
|
+
props: [click.reference, rootTriggerProps, interactionTypeProps, {
|
|
67
71
|
[CLICK_TRIGGER_IDENTIFIER]: '',
|
|
68
|
-
id: thisTriggerId
|
|
72
|
+
id: thisTriggerId,
|
|
73
|
+
'aria-haspopup': 'dialog',
|
|
74
|
+
'aria-expanded': isOpenedByThisTrigger,
|
|
75
|
+
'aria-controls': popupId
|
|
69
76
|
}, elementProps, getButtonProps],
|
|
70
77
|
stateAttributesMapping: triggerOpenStateMapping
|
|
71
78
|
});
|
|
@@ -30,10 +30,10 @@ const stateAttributesMapping = {
|
|
|
30
30
|
*/
|
|
31
31
|
export const DialogViewport = /*#__PURE__*/React.forwardRef(function DialogViewport(componentProps, forwardedRef) {
|
|
32
32
|
const {
|
|
33
|
-
className,
|
|
34
33
|
render,
|
|
35
|
-
|
|
34
|
+
className,
|
|
36
35
|
style,
|
|
36
|
+
children,
|
|
37
37
|
...elementProps
|
|
38
38
|
} = componentProps;
|
|
39
39
|
const keepMounted = useDialogPortalContext();
|
|
@@ -45,6 +45,7 @@ export const DialogViewport = /*#__PURE__*/React.forwardRef(function DialogViewp
|
|
|
45
45
|
const transitionStatus = store.useState('transitionStatus');
|
|
46
46
|
const nestedOpenDialogCount = store.useState('nestedOpenDialogCount');
|
|
47
47
|
const mounted = store.useState('mounted');
|
|
48
|
+
const setViewportElement = store.useStateSetter('viewportElement');
|
|
48
49
|
const nestedDialogOpen = nestedOpenDialogCount > 0;
|
|
49
50
|
const state = {
|
|
50
51
|
open,
|
|
@@ -56,7 +57,7 @@ export const DialogViewport = /*#__PURE__*/React.forwardRef(function DialogViewp
|
|
|
56
57
|
return useRenderElement('div', componentProps, {
|
|
57
58
|
enabled: shouldRender,
|
|
58
59
|
state,
|
|
59
|
-
ref: [forwardedRef,
|
|
60
|
+
ref: [forwardedRef, setViewportElement],
|
|
60
61
|
stateAttributesMapping,
|
|
61
62
|
props: [{
|
|
62
63
|
role: 'presentation',
|
|
@@ -20,6 +20,8 @@ import { COMPOSITE_KEYS } from "../../internals/composite/composite.js";
|
|
|
20
20
|
import { useDrawerRootContext } from "../root/DrawerRootContext.js";
|
|
21
21
|
import { useDrawerSnapPoints } from "../root/useDrawerSnapPoints.js";
|
|
22
22
|
import { useDrawerViewportContext } from "../viewport/DrawerViewportContext.js";
|
|
23
|
+
import { FOCUSABLE_POPUP_PROPS } from "../../utils/popups/index.js";
|
|
24
|
+
|
|
23
25
|
// Module-level flag to ensure we only register the CSS properties once,
|
|
24
26
|
// regardless of how many Drawer components are mounted.
|
|
25
27
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
@@ -28,7 +30,6 @@ let drawerSwipeVarsRegistered = false;
|
|
|
28
30
|
/**
|
|
29
31
|
* Removes inheritance of high-frequency drawer swipe CSS variables, which
|
|
30
32
|
* reduces style recalculation cost in complex drawers with deep subtrees.
|
|
31
|
-
* Child elements that need these values can still opt-in by using `inherit`.
|
|
32
33
|
* See https://motion.dev/blog/web-animation-performance-tier-list
|
|
33
34
|
* under the "Improving CSS variable performance" section.
|
|
34
35
|
*/
|
|
@@ -116,11 +117,11 @@ const stateAttributesMapping = {
|
|
|
116
117
|
*/
|
|
117
118
|
export const DrawerPopup = /*#__PURE__*/React.forwardRef(function DrawerPopup(componentProps, forwardedRef) {
|
|
118
119
|
const {
|
|
120
|
+
render,
|
|
119
121
|
className,
|
|
122
|
+
style,
|
|
120
123
|
finalFocus,
|
|
121
124
|
initialFocus,
|
|
122
|
-
render,
|
|
123
|
-
style,
|
|
124
125
|
...elementProps
|
|
125
126
|
} = componentProps;
|
|
126
127
|
const {
|
|
@@ -149,16 +150,18 @@ export const DrawerPopup = /*#__PURE__*/React.forwardRef(function DrawerPopup(co
|
|
|
149
150
|
const openMethod = store.useState('openMethod');
|
|
150
151
|
const titleElementId = store.useState('titleElementId');
|
|
151
152
|
const role = store.useState('role');
|
|
152
|
-
const
|
|
153
|
+
const floatingId = floatingRootContext.useState('floatingId');
|
|
154
|
+
const popupId = elementProps.id ?? floatingId;
|
|
153
155
|
const swipe = useDrawerViewportContext(true);
|
|
154
|
-
|
|
155
|
-
const swipeStrength = swipe?.swipeStrength ?? null;
|
|
156
|
+
useDialogPortalContext();
|
|
156
157
|
const {
|
|
157
158
|
snapPoints,
|
|
158
159
|
activeSnapPoint,
|
|
159
160
|
activeSnapPointOffset
|
|
160
161
|
} = useDrawerSnapPoints();
|
|
161
|
-
|
|
162
|
+
const nestedDrawerOpen = nestedOpenDrawerCount > 0;
|
|
163
|
+
const swiping = swipe?.swiping ?? false;
|
|
164
|
+
const swipeStrength = swipe?.swipeStrength ?? null;
|
|
162
165
|
const [popupHeight, setPopupHeight] = React.useState(0);
|
|
163
166
|
const popupHeightRef = React.useRef(0);
|
|
164
167
|
if (process.env.NODE_ENV !== 'production') {
|
|
@@ -273,6 +276,7 @@ export const DrawerPopup = /*#__PURE__*/React.forwardRef(function DrawerPopup(co
|
|
|
273
276
|
}
|
|
274
277
|
});
|
|
275
278
|
const resolvedInitialFocus = initialFocus === undefined ? store.context.popupRef : initialFocus;
|
|
279
|
+
const setPopupElement = store.useStateSetter('popupElement');
|
|
276
280
|
const state = {
|
|
277
281
|
open,
|
|
278
282
|
nested,
|
|
@@ -318,10 +322,11 @@ export const DrawerPopup = /*#__PURE__*/React.forwardRef(function DrawerPopup(co
|
|
|
318
322
|
const element = useRenderElement('div', componentProps, {
|
|
319
323
|
state,
|
|
320
324
|
props: [rootPopupProps, {
|
|
325
|
+
id: popupId,
|
|
321
326
|
'aria-labelledby': titleElementId,
|
|
322
327
|
'aria-describedby': descriptionElementId,
|
|
323
328
|
role,
|
|
324
|
-
|
|
329
|
+
...FOCUSABLE_POPUP_PROPS,
|
|
325
330
|
hidden: !mounted,
|
|
326
331
|
onKeyDown(event) {
|
|
327
332
|
if (COMPOSITE_KEYS.has(event.key)) {
|
|
@@ -338,7 +343,7 @@ export const DrawerPopup = /*#__PURE__*/React.forwardRef(function DrawerPopup(co
|
|
|
338
343
|
[DrawerPopupCssVars.swipeStrength]: typeof swipeStrength === 'number' && Number.isFinite(swipeStrength) && swipeStrength > 0 ? `${swipeStrength}` : '1'
|
|
339
344
|
}
|
|
340
345
|
}, elementProps],
|
|
341
|
-
ref: [forwardedRef, store.context.popupRef,
|
|
346
|
+
ref: [forwardedRef, store.context.popupRef, setPopupElement],
|
|
342
347
|
stateAttributesMapping
|
|
343
348
|
});
|
|
344
349
|
return /*#__PURE__*/_jsx(FloatingFocusManager, {
|
|
@@ -10,10 +10,9 @@ import { isAndroid } from '@base-ui/utils/detectBrowser';
|
|
|
10
10
|
import { useId } from '@base-ui/utils/useId';
|
|
11
11
|
import { DrawerRootContext, useDrawerRootContext } from "./DrawerRootContext.js";
|
|
12
12
|
import { Dialog } from "../../dialog/index.js";
|
|
13
|
-
import { IsDrawerContext } from "../../dialog/root/DialogRoot.js";
|
|
14
13
|
import { createChangeEventDetails } from "../../internals/createBaseUIEventDetails.js";
|
|
15
14
|
import { REASONS } from "../../internals/reasons.js";
|
|
16
|
-
import { useDialogRootContext } from "../../dialog/root/DialogRootContext.js";
|
|
15
|
+
import { IsDrawerContext, useDialogRootContext } from "../../dialog/root/DialogRootContext.js";
|
|
17
16
|
import { useDrawerProviderContext } from "../provider/DrawerProviderContext.js";
|
|
18
17
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
19
18
|
/**
|
|
@@ -40,9 +39,8 @@ export function DrawerRoot(props) {
|
|
|
40
39
|
snapPoints,
|
|
41
40
|
snapPoint: snapPointProp,
|
|
42
41
|
defaultSnapPoint,
|
|
43
|
-
onSnapPointChange
|
|
42
|
+
onSnapPointChange
|
|
44
43
|
} = props;
|
|
45
|
-
const onSnapPointChange = useStableCallback(onSnapPointChangeProp);
|
|
46
44
|
const parentDrawerRootContext = useDrawerRootContext(true);
|
|
47
45
|
const notifyParentSwipeProgressChange = parentDrawerRootContext?.onNestedSwipeProgressChange;
|
|
48
46
|
const notifyParentFrontmostHeight = parentDrawerRootContext?.onNestedFrontmostHeightChange;
|
|
@@ -191,10 +189,12 @@ function createNestedSwipeProgressStore() {
|
|
|
191
189
|
function DrawerProviderReporter() {
|
|
192
190
|
const drawerId = useId();
|
|
193
191
|
const providerContext = useDrawerProviderContext(true);
|
|
194
|
-
const
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
const
|
|
192
|
+
const {
|
|
193
|
+
store
|
|
194
|
+
} = useDialogRootContext(false);
|
|
195
|
+
const open = store.useState('open');
|
|
196
|
+
const nestedOpenDialogCount = store.useState('nestedOpenDialogCount');
|
|
197
|
+
const popupElement = store.useState('popupElement');
|
|
198
198
|
const isTopmost = nestedOpenDialogCount === 0;
|
|
199
199
|
React.useEffect(() => {
|
|
200
200
|
if (!providerContext || drawerId == null) {
|
|
@@ -222,10 +222,10 @@ function DrawerProviderReporter() {
|
|
|
222
222
|
return undefined;
|
|
223
223
|
}
|
|
224
224
|
function handleCloseWatcher(event) {
|
|
225
|
-
if (!
|
|
225
|
+
if (!store.select('open')) {
|
|
226
226
|
return;
|
|
227
227
|
}
|
|
228
|
-
|
|
228
|
+
store.setOpen(false, createChangeEventDetails(REASONS.closeWatcher, event));
|
|
229
229
|
}
|
|
230
230
|
const closeWatcher = new CloseWatcherCtor();
|
|
231
231
|
const unsubscribe = addEventListener(closeWatcher, 'close', handleCloseWatcher);
|
|
@@ -233,6 +233,6 @@ function DrawerProviderReporter() {
|
|
|
233
233
|
unsubscribe();
|
|
234
234
|
closeWatcher.destroy();
|
|
235
235
|
};
|
|
236
|
-
}, [
|
|
236
|
+
}, [store, isTopmost, open, popupElement]);
|
|
237
237
|
return null;
|
|
238
238
|
}
|
|
@@ -10,7 +10,7 @@ export interface DrawerNestedSwipeProgressStore {
|
|
|
10
10
|
export interface DrawerRootContext {
|
|
11
11
|
swipeDirection: DrawerSwipeDirection;
|
|
12
12
|
/**
|
|
13
|
-
* Whether
|
|
13
|
+
* Whether to disable velocity-based snap skipping.
|
|
14
14
|
*/
|
|
15
15
|
snapToSequentialPoints: boolean;
|
|
16
16
|
/**
|