@base-ui/react 1.0.0-rc.2 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +156 -5
- package/README.md +2 -3
- package/accordion/header/AccordionHeader.d.ts +1 -1
- package/accordion/item/AccordionItem.d.ts +1 -1
- package/accordion/panel/AccordionPanel.d.ts +1 -1
- package/accordion/root/AccordionRoot.d.ts +1 -1
- package/accordion/trigger/AccordionTrigger.d.ts +1 -1
- package/accordion/trigger/AccordionTrigger.js +3 -4
- package/alert-dialog/root/AlertDialogRoot.d.ts +3 -3
- package/autocomplete/root/AutocompleteRoot.d.ts +1 -1
- package/avatar/fallback/AvatarFallback.d.ts +1 -1
- package/avatar/image/AvatarImage.d.ts +1 -1
- package/avatar/root/AvatarRoot.d.ts +1 -1
- package/button/Button.d.ts +4 -17
- package/button/Button.js +1 -2
- package/checkbox/indicator/CheckboxIndicator.d.ts +1 -1
- package/checkbox/indicator/CheckboxIndicatorDataAttributes.d.ts +4 -0
- package/checkbox/indicator/CheckboxIndicatorDataAttributes.js +4 -0
- package/checkbox/root/CheckboxRoot.d.ts +1 -1
- package/checkbox/root/CheckboxRoot.js +5 -4
- package/checkbox/root/CheckboxRootDataAttributes.d.ts +4 -0
- package/checkbox/root/CheckboxRootDataAttributes.js +4 -0
- package/checkbox-group/CheckboxGroup.d.ts +1 -1
- package/collapsible/panel/CollapsiblePanel.d.ts +1 -1
- package/collapsible/root/CollapsibleRoot.d.ts +1 -1
- package/collapsible/trigger/CollapsibleTrigger.d.ts +1 -1
- package/collapsible/trigger/CollapsibleTrigger.js +1 -2
- package/combobox/arrow/ComboboxArrow.d.ts +1 -1
- package/combobox/backdrop/ComboboxBackdrop.d.ts +1 -1
- package/combobox/chip/ComboboxChip.d.ts +1 -1
- package/combobox/chip-remove/ComboboxChipRemove.d.ts +1 -1
- package/combobox/chip-remove/ComboboxChipRemove.js +3 -2
- package/combobox/chips/ComboboxChips.d.ts +1 -1
- package/combobox/chips/ComboboxChips.js +7 -1
- package/combobox/clear/ComboboxClear.d.ts +1 -1
- package/combobox/clear/ComboboxClear.js +2 -2
- package/combobox/empty/ComboboxEmpty.d.ts +1 -1
- package/combobox/group/ComboboxGroup.d.ts +1 -1
- package/combobox/group-label/ComboboxGroupLabel.d.ts +1 -1
- package/combobox/icon/ComboboxIcon.d.ts +1 -1
- package/combobox/input/ComboboxInput.d.ts +1 -1
- package/combobox/input/ComboboxInput.js +12 -18
- package/combobox/item/ComboboxItem.d.ts +1 -1
- package/combobox/item/ComboboxItem.js +0 -1
- package/combobox/item-indicator/ComboboxItemIndicator.d.ts +1 -1
- package/combobox/list/ComboboxList.d.ts +1 -1
- package/combobox/popup/ComboboxPopup.d.ts +1 -1
- package/combobox/popup/ComboboxPopup.js +2 -1
- package/combobox/portal/ComboboxPortal.d.ts +1 -1
- package/combobox/positioner/ComboboxPositioner.d.ts +1 -1
- package/combobox/root/AriaCombobox.d.ts +8 -1
- package/combobox/root/AriaCombobox.js +19 -16
- package/combobox/root/ComboboxRoot.d.ts +1 -1
- package/combobox/row/ComboboxRow.d.ts +1 -1
- package/combobox/status/ComboboxStatus.d.ts +1 -1
- package/combobox/store.d.ts +3 -0
- package/combobox/store.js +21 -0
- package/combobox/trigger/ComboboxTrigger.d.ts +14 -1
- package/combobox/trigger/ComboboxTrigger.js +31 -11
- package/combobox/trigger/ComboboxTriggerDataAttributes.d.ts +13 -0
- package/combobox/trigger/ComboboxTriggerDataAttributes.js +13 -0
- package/combobox/utils/stateAttributesMapping.d.ts +14 -0
- package/combobox/utils/stateAttributesMapping.js +18 -0
- package/combobox/value/ComboboxValue.d.ts +5 -0
- package/combobox/value/ComboboxValue.js +15 -6
- package/composite/root/useCompositeRoot.d.ts +1 -1
- package/context-menu/trigger/ContextMenuTrigger.d.ts +1 -1
- package/csp-provider/CSPContext.d.ts +13 -0
- package/csp-provider/CSPContext.js +25 -0
- package/csp-provider/CSPProvider.d.ts +25 -0
- package/csp-provider/CSPProvider.js +32 -0
- package/csp-provider/index.d.ts +2 -0
- package/csp-provider/index.js +12 -0
- package/csp-provider/index.parts.d.ts +1 -0
- package/csp-provider/index.parts.js +12 -0
- package/dialog/backdrop/DialogBackdrop.d.ts +1 -1
- package/dialog/close/DialogClose.d.ts +1 -1
- package/dialog/description/DialogDescription.d.ts +1 -1
- package/dialog/popup/DialogPopup.d.ts +1 -1
- package/dialog/portal/DialogPortal.d.ts +1 -1
- package/dialog/portal/DialogPortal.js +1 -0
- package/dialog/root/DialogRoot.d.ts +4 -4
- package/dialog/store/DialogStore.d.ts +2 -2
- package/dialog/title/DialogTitle.d.ts +1 -1
- package/dialog/viewport/DialogViewport.d.ts +1 -1
- package/esm/accordion/header/AccordionHeader.d.ts +1 -1
- package/esm/accordion/item/AccordionItem.d.ts +1 -1
- package/esm/accordion/panel/AccordionPanel.d.ts +1 -1
- package/esm/accordion/root/AccordionRoot.d.ts +1 -1
- package/esm/accordion/trigger/AccordionTrigger.d.ts +1 -1
- package/esm/accordion/trigger/AccordionTrigger.js +3 -4
- package/esm/alert-dialog/root/AlertDialogRoot.d.ts +3 -3
- package/esm/autocomplete/root/AutocompleteRoot.d.ts +1 -1
- package/esm/avatar/fallback/AvatarFallback.d.ts +1 -1
- package/esm/avatar/image/AvatarImage.d.ts +1 -1
- package/esm/avatar/root/AvatarRoot.d.ts +1 -1
- package/esm/button/Button.d.ts +4 -17
- package/esm/button/Button.js +1 -2
- package/esm/checkbox/indicator/CheckboxIndicator.d.ts +1 -1
- package/esm/checkbox/indicator/CheckboxIndicatorDataAttributes.d.ts +4 -0
- package/esm/checkbox/indicator/CheckboxIndicatorDataAttributes.js +4 -0
- package/esm/checkbox/root/CheckboxRoot.d.ts +1 -1
- package/esm/checkbox/root/CheckboxRoot.js +6 -5
- package/esm/checkbox/root/CheckboxRootDataAttributes.d.ts +4 -0
- package/esm/checkbox/root/CheckboxRootDataAttributes.js +4 -0
- package/esm/checkbox-group/CheckboxGroup.d.ts +1 -1
- package/esm/collapsible/panel/CollapsiblePanel.d.ts +1 -1
- package/esm/collapsible/root/CollapsibleRoot.d.ts +1 -1
- package/esm/collapsible/trigger/CollapsibleTrigger.d.ts +1 -1
- package/esm/collapsible/trigger/CollapsibleTrigger.js +1 -2
- package/esm/combobox/arrow/ComboboxArrow.d.ts +1 -1
- package/esm/combobox/backdrop/ComboboxBackdrop.d.ts +1 -1
- package/esm/combobox/chip/ComboboxChip.d.ts +1 -1
- package/esm/combobox/chip-remove/ComboboxChipRemove.d.ts +1 -1
- package/esm/combobox/chip-remove/ComboboxChipRemove.js +3 -2
- package/esm/combobox/chips/ComboboxChips.d.ts +1 -1
- package/esm/combobox/chips/ComboboxChips.js +7 -1
- package/esm/combobox/clear/ComboboxClear.d.ts +1 -1
- package/esm/combobox/clear/ComboboxClear.js +2 -2
- package/esm/combobox/empty/ComboboxEmpty.d.ts +1 -1
- package/esm/combobox/group/ComboboxGroup.d.ts +1 -1
- package/esm/combobox/group-label/ComboboxGroupLabel.d.ts +1 -1
- package/esm/combobox/icon/ComboboxIcon.d.ts +1 -1
- package/esm/combobox/input/ComboboxInput.d.ts +1 -1
- package/esm/combobox/input/ComboboxInput.js +12 -17
- package/esm/combobox/item/ComboboxItem.d.ts +1 -1
- package/esm/combobox/item/ComboboxItem.js +0 -1
- package/esm/combobox/item-indicator/ComboboxItemIndicator.d.ts +1 -1
- package/esm/combobox/list/ComboboxList.d.ts +1 -1
- package/esm/combobox/popup/ComboboxPopup.d.ts +1 -1
- package/esm/combobox/popup/ComboboxPopup.js +2 -1
- package/esm/combobox/portal/ComboboxPortal.d.ts +1 -1
- package/esm/combobox/positioner/ComboboxPositioner.d.ts +1 -1
- package/esm/combobox/root/AriaCombobox.d.ts +8 -1
- package/esm/combobox/root/AriaCombobox.js +20 -17
- package/esm/combobox/root/ComboboxRoot.d.ts +1 -1
- package/esm/combobox/row/ComboboxRow.d.ts +1 -1
- package/esm/combobox/status/ComboboxStatus.d.ts +1 -1
- package/esm/combobox/store.d.ts +3 -0
- package/esm/combobox/store.js +21 -0
- package/esm/combobox/trigger/ComboboxTrigger.d.ts +14 -1
- package/esm/combobox/trigger/ComboboxTrigger.js +32 -12
- package/esm/combobox/trigger/ComboboxTriggerDataAttributes.d.ts +13 -0
- package/esm/combobox/trigger/ComboboxTriggerDataAttributes.js +13 -0
- package/esm/combobox/utils/stateAttributesMapping.d.ts +14 -0
- package/esm/combobox/utils/stateAttributesMapping.js +12 -0
- package/esm/combobox/value/ComboboxValue.d.ts +5 -0
- package/esm/combobox/value/ComboboxValue.js +16 -7
- package/esm/composite/root/useCompositeRoot.d.ts +1 -1
- package/esm/context-menu/trigger/ContextMenuTrigger.d.ts +1 -1
- package/esm/csp-provider/CSPContext.d.ts +13 -0
- package/esm/csp-provider/CSPContext.js +18 -0
- package/esm/csp-provider/CSPProvider.d.ts +25 -0
- package/esm/csp-provider/CSPProvider.js +27 -0
- package/esm/csp-provider/index.d.ts +2 -0
- package/esm/csp-provider/index.js +1 -0
- package/esm/csp-provider/index.parts.d.ts +1 -0
- package/esm/csp-provider/index.parts.js +1 -0
- package/esm/dialog/backdrop/DialogBackdrop.d.ts +1 -1
- package/esm/dialog/close/DialogClose.d.ts +1 -1
- package/esm/dialog/description/DialogDescription.d.ts +1 -1
- package/esm/dialog/popup/DialogPopup.d.ts +1 -1
- package/esm/dialog/portal/DialogPortal.d.ts +1 -1
- package/esm/dialog/portal/DialogPortal.js +1 -0
- package/esm/dialog/root/DialogRoot.d.ts +4 -4
- package/esm/dialog/store/DialogStore.d.ts +2 -2
- package/esm/dialog/title/DialogTitle.d.ts +1 -1
- package/esm/dialog/viewport/DialogViewport.d.ts +1 -1
- package/esm/field/control/FieldControl.d.ts +1 -1
- package/esm/field/description/FieldDescription.d.ts +1 -1
- package/esm/field/error/FieldError.d.ts +1 -1
- package/esm/field/index.d.ts +2 -1
- package/esm/field/item/FieldItem.d.ts +1 -1
- package/esm/field/label/FieldLabel.d.ts +11 -2
- package/esm/field/label/FieldLabel.js +51 -11
- package/esm/field/root/FieldRoot.d.ts +10 -1
- package/esm/field/root/FieldRoot.js +8 -0
- package/esm/field/useField.js +7 -3
- package/esm/fieldset/legend/FieldsetLegend.d.ts +1 -1
- package/esm/fieldset/root/FieldsetRoot.d.ts +1 -1
- package/esm/floating-ui-react/components/FloatingFocusManager.js +7 -6
- package/esm/floating-ui-react/components/FloatingPortal.d.ts +2 -2
- package/esm/floating-ui-react/components/FloatingPortal.js +11 -2
- package/esm/floating-ui-react/hooks/useClientPoint.js +5 -4
- package/esm/floating-ui-react/hooks/useDismiss.js +16 -3
- package/esm/floating-ui-react/hooks/useFocus.d.ts +5 -0
- package/esm/floating-ui-react/hooks/useFocus.js +43 -9
- package/esm/floating-ui-react/hooks/useHoverReferenceInteraction.js +17 -4
- package/esm/floating-ui-react/hooks/useSyncedFloatingRootContext.js +3 -0
- package/esm/form/Form.d.ts +18 -1
- package/esm/form/Form.js +17 -0
- package/esm/form/FormContext.d.ts +1 -1
- package/esm/index.d.ts +1 -0
- package/esm/index.js +2 -1
- package/esm/input/Input.d.ts +1 -1
- package/esm/menu/arrow/MenuArrow.d.ts +1 -1
- package/esm/menu/backdrop/MenuBackdrop.d.ts +1 -1
- package/esm/menu/checkbox-item/MenuCheckboxItem.d.ts +1 -1
- package/esm/menu/checkbox-item-indicator/MenuCheckboxItemIndicator.d.ts +1 -1
- package/esm/menu/group/MenuGroup.d.ts +1 -1
- package/esm/menu/group-label/MenuGroupLabel.d.ts +1 -1
- package/esm/menu/item/MenuItem.d.ts +1 -1
- package/esm/menu/popup/MenuPopup.d.ts +1 -1
- package/esm/menu/popup/MenuPopup.js +4 -3
- package/esm/menu/portal/MenuPortal.d.ts +1 -1
- package/esm/menu/positioner/MenuPositioner.d.ts +1 -1
- package/esm/menu/radio-group/MenuRadioGroup.d.ts +1 -1
- package/esm/menu/radio-item/MenuRadioItem.d.ts +1 -1
- package/esm/menu/radio-item-indicator/MenuRadioItemIndicator.d.ts +1 -1
- package/esm/menu/root/MenuRoot.d.ts +7 -6
- package/esm/menu/root/MenuRoot.js +4 -2
- package/esm/menu/store/MenuStore.js +3 -3
- package/esm/menu/submenu-trigger/MenuSubmenuTrigger.d.ts +1 -1
- package/esm/menu/trigger/MenuTrigger.js +13 -13
- package/esm/menubar/Menubar.d.ts +1 -1
- package/esm/merge-props/mergeProps.d.ts +31 -11
- package/esm/merge-props/mergeProps.js +29 -8
- package/esm/meter/indicator/MeterIndicator.d.ts +1 -1
- package/esm/meter/label/MeterLabel.d.ts +1 -1
- package/esm/meter/root/MeterRoot.d.ts +1 -1
- package/esm/meter/track/MeterTrack.d.ts +1 -1
- package/esm/meter/value/MeterValue.d.ts +1 -1
- package/esm/navigation-menu/arrow/NavigationMenuArrow.d.ts +1 -1
- package/esm/navigation-menu/backdrop/NavigationMenuBackdrop.d.ts +1 -1
- package/esm/navigation-menu/content/NavigationMenuContent.d.ts +1 -1
- package/esm/navigation-menu/content/NavigationMenuContent.js +6 -0
- package/esm/navigation-menu/icon/NavigationMenuIcon.d.ts +1 -1
- package/esm/navigation-menu/item/NavigationMenuItem.d.ts +1 -1
- package/esm/navigation-menu/link/NavigationMenuLink.d.ts +1 -1
- package/esm/navigation-menu/list/NavigationMenuList.d.ts +1 -1
- package/esm/navigation-menu/popup/NavigationMenuPopup.d.ts +1 -1
- package/esm/navigation-menu/portal/NavigationMenuPortal.d.ts +1 -1
- package/esm/navigation-menu/positioner/NavigationMenuPositioner.d.ts +1 -1
- package/esm/navigation-menu/root/NavigationMenuRoot.d.ts +2 -2
- package/esm/navigation-menu/trigger/NavigationMenuTrigger.d.ts +1 -1
- package/esm/navigation-menu/viewport/NavigationMenuViewport.d.ts +1 -1
- package/esm/number-field/decrement/NumberFieldDecrement.d.ts +1 -1
- package/esm/number-field/decrement/NumberFieldDecrement.js +4 -6
- package/esm/number-field/group/NumberFieldGroup.d.ts +1 -1
- package/esm/number-field/increment/NumberFieldIncrement.d.ts +1 -1
- package/esm/number-field/increment/NumberFieldIncrement.js +4 -6
- package/esm/number-field/input/NumberFieldInput.d.ts +1 -1
- package/esm/number-field/input/NumberFieldInput.js +5 -2
- package/esm/number-field/root/NumberFieldRoot.d.ts +5 -4
- package/esm/number-field/root/NumberFieldRoot.js +12 -5
- package/esm/number-field/root/useNumberFieldButton.d.ts +0 -3
- package/esm/number-field/root/useNumberFieldButton.js +5 -11
- package/esm/number-field/scrub-area/NumberFieldScrubArea.d.ts +1 -1
- package/esm/number-field/scrub-area-cursor/NumberFieldScrubAreaCursor.d.ts +1 -1
- package/esm/popover/arrow/PopoverArrow.d.ts +1 -1
- package/esm/popover/backdrop/PopoverBackdrop.d.ts +1 -1
- package/esm/popover/close/PopoverClose.d.ts +1 -1
- package/esm/popover/description/PopoverDescription.d.ts +1 -1
- package/esm/popover/popup/PopoverPopup.d.ts +1 -1
- package/esm/popover/popup/PopoverPopup.js +0 -30
- package/esm/popover/portal/PopoverPortal.d.ts +1 -1
- package/esm/popover/positioner/PopoverPositioner.d.ts +1 -1
- package/esm/popover/positioner/PopoverPositioner.js +2 -1
- package/esm/popover/root/PopoverRoot.d.ts +2 -2
- package/esm/popover/store/PopoverStore.d.ts +4 -2
- package/esm/popover/store/PopoverStore.js +8 -5
- package/esm/popover/title/PopoverTitle.d.ts +1 -1
- package/esm/popover/trigger/PopoverTrigger.js +2 -2
- package/esm/popover/viewport/PopoverViewport.d.ts +1 -1
- package/esm/popover/viewport/PopoverViewport.js +28 -12
- package/esm/preview-card/arrow/PreviewCardArrow.d.ts +1 -1
- package/esm/preview-card/arrow/PreviewCardArrow.js +2 -3
- package/esm/preview-card/backdrop/PreviewCardBackdrop.d.ts +1 -1
- package/esm/preview-card/backdrop/PreviewCardBackdrop.js +4 -5
- package/esm/preview-card/index.parts.d.ts +3 -1
- package/esm/preview-card/index.parts.js +3 -1
- package/esm/preview-card/popup/PreviewCardPopup.d.ts +2 -1
- package/esm/preview-card/popup/PreviewCardPopup.js +17 -11
- package/esm/preview-card/portal/PreviewCardPortal.d.ts +1 -1
- package/esm/preview-card/portal/PreviewCardPortal.js +2 -3
- package/esm/preview-card/positioner/PreviewCardPositioner.d.ts +2 -1
- package/esm/preview-card/positioner/PreviewCardPositioner.js +16 -11
- package/esm/preview-card/root/PreviewCardContext.d.ts +5 -26
- package/esm/preview-card/root/PreviewCardContext.js +2 -2
- package/esm/preview-card/root/PreviewCardRoot.d.ts +35 -10
- package/esm/preview-card/root/PreviewCardRoot.js +61 -116
- package/esm/preview-card/store/PreviewCardHandle.d.ts +33 -0
- package/esm/preview-card/store/PreviewCardHandle.js +55 -0
- package/esm/preview-card/store/PreviewCardStore.d.ts +36 -0
- package/esm/preview-card/store/PreviewCardStore.js +97 -0
- package/esm/preview-card/trigger/PreviewCardTrigger.d.ts +15 -3
- package/esm/preview-card/trigger/PreviewCardTrigger.js +49 -13
- package/esm/preview-card/viewport/PreviewCardViewport.d.ts +22 -0
- package/esm/preview-card/viewport/PreviewCardViewport.js +272 -0
- package/esm/preview-card/viewport/PreviewCardViewportCssVars.d.ts +14 -0
- package/esm/preview-card/viewport/PreviewCardViewportCssVars.js +15 -0
- package/esm/preview-card/viewport/PreviewCardViewportDataAttributes.d.ts +26 -0
- package/esm/preview-card/viewport/PreviewCardViewportDataAttributes.js +27 -0
- package/esm/progress/indicator/ProgressIndicator.d.ts +1 -1
- package/esm/progress/label/ProgressLabel.d.ts +1 -1
- package/esm/progress/root/ProgressRoot.d.ts +1 -1
- package/esm/progress/track/ProgressTrack.d.ts +1 -1
- package/esm/progress/value/ProgressValue.d.ts +1 -1
- package/esm/radio/indicator/RadioIndicator.d.ts +1 -1
- package/esm/radio/root/RadioRoot.d.ts +1 -1
- package/esm/radio/root/RadioRoot.js +9 -9
- package/esm/radio-group/RadioGroup.d.ts +4 -4
- package/esm/radio-group/RadioGroup.js +2 -2
- package/esm/scroll-area/content/ScrollAreaContent.d.ts +1 -1
- package/esm/scroll-area/content/ScrollAreaContent.js +10 -1
- package/esm/scroll-area/corner/ScrollAreaCorner.d.ts +1 -1
- package/esm/scroll-area/corner/ScrollAreaCorner.js +1 -1
- package/esm/scroll-area/root/ScrollAreaRoot.d.ts +26 -2
- package/esm/scroll-area/root/ScrollAreaRoot.js +33 -29
- package/esm/scroll-area/root/ScrollAreaRootContext.d.ts +10 -43
- package/esm/scroll-area/scrollbar/ScrollAreaScrollbar.d.ts +1 -1
- package/esm/scroll-area/scrollbar/ScrollAreaScrollbar.js +4 -4
- package/esm/scroll-area/thumb/ScrollAreaThumb.d.ts +2 -2
- package/esm/scroll-area/thumb/ScrollAreaThumb.js +1 -1
- package/esm/scroll-area/viewport/ScrollAreaViewport.d.ts +1 -1
- package/esm/scroll-area/viewport/ScrollAreaViewport.js +51 -25
- package/esm/select/arrow/SelectArrow.d.ts +1 -1
- package/esm/select/backdrop/SelectBackdrop.d.ts +1 -1
- package/esm/select/group/SelectGroup.d.ts +1 -1
- package/esm/select/group-label/SelectGroupLabel.d.ts +1 -1
- package/esm/select/icon/SelectIcon.d.ts +1 -1
- package/esm/select/item/SelectItem.d.ts +1 -1
- package/esm/select/item/SelectItem.js +0 -1
- package/esm/select/item-indicator/SelectItemIndicator.d.ts +1 -1
- package/esm/select/item-text/SelectItemText.d.ts +1 -1
- package/esm/select/list/SelectList.d.ts +1 -1
- package/esm/select/popup/SelectPopup.d.ts +1 -1
- package/esm/select/popup/SelectPopup.js +154 -95
- package/esm/select/portal/SelectPortal.d.ts +1 -1
- package/esm/select/positioner/SelectPositioner.d.ts +1 -1
- package/esm/select/root/SelectRoot.d.ts +2 -2
- package/esm/select/root/SelectRoot.js +26 -13
- package/esm/select/scroll-arrow/SelectScrollArrow.d.ts +1 -1
- package/esm/select/scroll-down-arrow/SelectScrollDownArrow.d.ts +1 -1
- package/esm/select/scroll-up-arrow/SelectScrollUpArrow.d.ts +1 -1
- package/esm/select/store.d.ts +2 -1
- package/esm/select/store.js +19 -13
- package/esm/select/trigger/SelectTrigger.d.ts +14 -4
- package/esm/select/trigger/SelectTrigger.js +50 -18
- package/esm/select/value/SelectValue.d.ts +6 -1
- package/esm/select/value/SelectValue.js +19 -5
- package/esm/separator/Separator.d.ts +1 -1
- package/esm/slider/control/SliderControl.d.ts +1 -1
- package/esm/slider/control/SliderControl.js +1 -1
- package/esm/slider/control/SliderControlDataAttributes.d.ts +0 -8
- package/esm/slider/control/SliderControlDataAttributes.js +0 -8
- package/esm/slider/indicator/SliderIndicator.d.ts +1 -1
- package/esm/slider/indicator/SliderIndicatorDataAttributes.d.ts +0 -8
- package/esm/slider/indicator/SliderIndicatorDataAttributes.js +0 -8
- package/esm/slider/root/SliderRootDataAttributes.d.ts +0 -8
- package/esm/slider/root/SliderRootDataAttributes.js +0 -8
- package/esm/slider/thumb/SliderThumb.d.ts +2 -2
- package/esm/slider/thumb/SliderThumb.js +7 -1
- package/esm/slider/thumb/SliderThumbDataAttributes.d.ts +0 -8
- package/esm/slider/thumb/SliderThumbDataAttributes.js +0 -8
- package/esm/slider/track/SliderTrack.d.ts +1 -1
- package/esm/slider/track/SliderTrackDataAttributes.d.ts +0 -8
- package/esm/slider/track/SliderTrackDataAttributes.js +0 -8
- package/esm/slider/value/SliderValue.d.ts +1 -1
- package/esm/slider/value/SliderValueDataAttributes.d.ts +0 -8
- package/esm/slider/value/SliderValueDataAttributes.js +0 -8
- package/esm/switch/root/SwitchRoot.d.ts +6 -1
- package/esm/switch/root/SwitchRoot.js +15 -6
- package/esm/switch/thumb/SwitchThumb.d.ts +1 -1
- package/esm/tabs/indicator/TabsIndicator.d.ts +1 -1
- package/esm/tabs/indicator/TabsIndicator.js +6 -0
- package/esm/tabs/list/TabsList.d.ts +1 -1
- package/esm/tabs/panel/TabsPanel.d.ts +1 -1
- package/esm/tabs/root/TabsRoot.d.ts +1 -1
- package/esm/tabs/tab/TabsTab.d.ts +1 -1
- package/esm/toast/action/ToastAction.d.ts +1 -1
- package/esm/toast/arrow/ToastArrow.d.ts +1 -1
- package/esm/toast/close/ToastClose.d.ts +1 -1
- package/esm/toast/content/ToastContent.d.ts +1 -1
- package/esm/toast/description/ToastDescription.d.ts +1 -1
- package/esm/toast/portal/ToastPortal.d.ts +1 -1
- package/esm/toast/positioner/ToastPositioner.d.ts +1 -1
- package/esm/toast/provider/ToastProvider.js +46 -19
- package/esm/toast/root/ToastRoot.d.ts +1 -1
- package/esm/toast/title/ToastTitle.d.ts +1 -1
- package/esm/toast/viewport/ToastViewport.d.ts +1 -1
- package/esm/toggle/Toggle.d.ts +1 -1
- package/esm/toggle-group/ToggleGroup.d.ts +1 -1
- package/esm/toolbar/button/ToolbarButton.d.ts +1 -1
- package/esm/toolbar/group/ToolbarGroup.d.ts +1 -1
- package/esm/toolbar/input/ToolbarInput.d.ts +1 -1
- package/esm/toolbar/link/ToolbarLink.d.ts +1 -1
- package/esm/toolbar/root/ToolbarRoot.d.ts +1 -1
- package/esm/toolbar/separator/ToolbarSeparator.d.ts +1 -1
- package/esm/tooltip/arrow/TooltipArrow.d.ts +1 -1
- package/esm/tooltip/popup/TooltipPopup.d.ts +1 -1
- package/esm/tooltip/popup/TooltipPopup.js +0 -31
- package/esm/tooltip/portal/TooltipPortal.d.ts +1 -1
- package/esm/tooltip/positioner/TooltipPositioner.d.ts +1 -1
- package/esm/tooltip/positioner/TooltipPositioner.js +2 -1
- package/esm/tooltip/root/TooltipRoot.d.ts +4 -6
- package/esm/tooltip/root/TooltipRoot.js +1 -2
- package/esm/tooltip/store/TooltipStore.d.ts +4 -2
- package/esm/tooltip/store/TooltipStore.js +7 -4
- package/esm/tooltip/trigger/TooltipTrigger.js +1 -1
- package/esm/tooltip/viewport/TooltipViewport.d.ts +1 -1
- package/esm/tooltip/viewport/TooltipViewport.js +28 -12
- package/esm/use-render/index.d.ts +2 -1
- package/esm/use-render/index.js +2 -1
- package/esm/utils/FloatingPortalLite.d.ts +1 -1
- package/esm/utils/popups/popupStoreUtils.js +21 -2
- package/esm/utils/resolveValueLabel.d.ts +5 -1
- package/esm/utils/resolveValueLabel.js +46 -22
- package/esm/utils/styles.d.ts +1 -1
- package/esm/utils/styles.js +10 -6
- package/esm/utils/types.d.ts +1 -1
- package/esm/utils/useAnimationsFinished.d.ts +2 -2
- package/esm/utils/useAnimationsFinished.js +56 -33
- package/esm/utils/useOpenChangeComplete.js +8 -10
- package/esm/utils/useOpenInteractionType.js +6 -1
- package/esm/utils/usePopupAutoResize.js +82 -46
- package/field/control/FieldControl.d.ts +1 -1
- package/field/description/FieldDescription.d.ts +1 -1
- package/field/error/FieldError.d.ts +1 -1
- package/field/index.d.ts +2 -1
- package/field/item/FieldItem.d.ts +1 -1
- package/field/label/FieldLabel.d.ts +11 -2
- package/field/label/FieldLabel.js +51 -11
- package/field/root/FieldRoot.d.ts +10 -1
- package/field/root/FieldRoot.js +8 -0
- package/field/useField.js +7 -3
- package/fieldset/legend/FieldsetLegend.d.ts +1 -1
- package/fieldset/root/FieldsetRoot.d.ts +1 -1
- package/floating-ui-react/components/FloatingFocusManager.js +7 -6
- package/floating-ui-react/components/FloatingPortal.d.ts +2 -2
- package/floating-ui-react/components/FloatingPortal.js +11 -2
- package/floating-ui-react/hooks/useClientPoint.js +5 -4
- package/floating-ui-react/hooks/useDismiss.js +16 -3
- package/floating-ui-react/hooks/useFocus.d.ts +5 -0
- package/floating-ui-react/hooks/useFocus.js +43 -9
- package/floating-ui-react/hooks/useHoverReferenceInteraction.js +17 -4
- package/floating-ui-react/hooks/useSyncedFloatingRootContext.js +3 -0
- package/form/Form.d.ts +18 -1
- package/form/Form.js +17 -0
- package/form/FormContext.d.ts +1 -1
- package/index.d.ts +1 -0
- package/index.js +12 -1
- package/input/Input.d.ts +1 -1
- package/menu/arrow/MenuArrow.d.ts +1 -1
- package/menu/backdrop/MenuBackdrop.d.ts +1 -1
- package/menu/checkbox-item/MenuCheckboxItem.d.ts +1 -1
- package/menu/checkbox-item-indicator/MenuCheckboxItemIndicator.d.ts +1 -1
- package/menu/group/MenuGroup.d.ts +1 -1
- package/menu/group-label/MenuGroupLabel.d.ts +1 -1
- package/menu/item/MenuItem.d.ts +1 -1
- package/menu/popup/MenuPopup.d.ts +1 -1
- package/menu/popup/MenuPopup.js +4 -3
- package/menu/portal/MenuPortal.d.ts +1 -1
- package/menu/positioner/MenuPositioner.d.ts +1 -1
- package/menu/radio-group/MenuRadioGroup.d.ts +1 -1
- package/menu/radio-item/MenuRadioItem.d.ts +1 -1
- package/menu/radio-item-indicator/MenuRadioItemIndicator.d.ts +1 -1
- package/menu/root/MenuRoot.d.ts +7 -6
- package/menu/root/MenuRoot.js +4 -2
- package/menu/store/MenuStore.js +3 -3
- package/menu/submenu-trigger/MenuSubmenuTrigger.d.ts +1 -1
- package/menu/trigger/MenuTrigger.js +14 -14
- package/menubar/Menubar.d.ts +1 -1
- package/merge-props/mergeProps.d.ts +31 -11
- package/merge-props/mergeProps.js +29 -8
- package/meter/indicator/MeterIndicator.d.ts +1 -1
- package/meter/label/MeterLabel.d.ts +1 -1
- package/meter/root/MeterRoot.d.ts +1 -1
- package/meter/track/MeterTrack.d.ts +1 -1
- package/meter/value/MeterValue.d.ts +1 -1
- package/navigation-menu/arrow/NavigationMenuArrow.d.ts +1 -1
- package/navigation-menu/backdrop/NavigationMenuBackdrop.d.ts +1 -1
- package/navigation-menu/content/NavigationMenuContent.d.ts +1 -1
- package/navigation-menu/content/NavigationMenuContent.js +6 -0
- package/navigation-menu/icon/NavigationMenuIcon.d.ts +1 -1
- package/navigation-menu/item/NavigationMenuItem.d.ts +1 -1
- package/navigation-menu/link/NavigationMenuLink.d.ts +1 -1
- package/navigation-menu/list/NavigationMenuList.d.ts +1 -1
- package/navigation-menu/popup/NavigationMenuPopup.d.ts +1 -1
- package/navigation-menu/portal/NavigationMenuPortal.d.ts +1 -1
- package/navigation-menu/positioner/NavigationMenuPositioner.d.ts +1 -1
- package/navigation-menu/root/NavigationMenuRoot.d.ts +2 -2
- package/navigation-menu/trigger/NavigationMenuTrigger.d.ts +1 -1
- package/navigation-menu/viewport/NavigationMenuViewport.d.ts +1 -1
- package/number-field/decrement/NumberFieldDecrement.d.ts +1 -1
- package/number-field/decrement/NumberFieldDecrement.js +4 -6
- package/number-field/group/NumberFieldGroup.d.ts +1 -1
- package/number-field/increment/NumberFieldIncrement.d.ts +1 -1
- package/number-field/increment/NumberFieldIncrement.js +4 -6
- package/number-field/input/NumberFieldInput.d.ts +1 -1
- package/number-field/input/NumberFieldInput.js +5 -2
- package/number-field/root/NumberFieldRoot.d.ts +5 -4
- package/number-field/root/NumberFieldRoot.js +11 -4
- package/number-field/root/useNumberFieldButton.d.ts +0 -3
- package/number-field/root/useNumberFieldButton.js +5 -11
- package/number-field/scrub-area/NumberFieldScrubArea.d.ts +1 -1
- package/number-field/scrub-area-cursor/NumberFieldScrubAreaCursor.d.ts +1 -1
- package/package.json +13 -3
- package/popover/arrow/PopoverArrow.d.ts +1 -1
- package/popover/backdrop/PopoverBackdrop.d.ts +1 -1
- package/popover/close/PopoverClose.d.ts +1 -1
- package/popover/description/PopoverDescription.d.ts +1 -1
- package/popover/popup/PopoverPopup.d.ts +1 -1
- package/popover/popup/PopoverPopup.js +0 -30
- package/popover/portal/PopoverPortal.d.ts +1 -1
- package/popover/positioner/PopoverPositioner.d.ts +1 -1
- package/popover/positioner/PopoverPositioner.js +2 -1
- package/popover/root/PopoverRoot.d.ts +2 -2
- package/popover/store/PopoverStore.d.ts +4 -2
- package/popover/store/PopoverStore.js +8 -5
- package/popover/title/PopoverTitle.d.ts +1 -1
- package/popover/trigger/PopoverTrigger.js +2 -2
- package/popover/viewport/PopoverViewport.d.ts +1 -1
- package/popover/viewport/PopoverViewport.js +28 -12
- package/preview-card/arrow/PreviewCardArrow.d.ts +1 -1
- package/preview-card/arrow/PreviewCardArrow.js +2 -3
- package/preview-card/backdrop/PreviewCardBackdrop.d.ts +1 -1
- package/preview-card/backdrop/PreviewCardBackdrop.js +4 -5
- package/preview-card/index.parts.d.ts +3 -1
- package/preview-card/index.parts.js +21 -1
- package/preview-card/popup/PreviewCardPopup.d.ts +2 -1
- package/preview-card/popup/PreviewCardPopup.js +17 -11
- package/preview-card/portal/PreviewCardPortal.d.ts +1 -1
- package/preview-card/portal/PreviewCardPortal.js +2 -3
- package/preview-card/positioner/PreviewCardPositioner.d.ts +2 -1
- package/preview-card/positioner/PreviewCardPositioner.js +16 -11
- package/preview-card/root/PreviewCardContext.d.ts +5 -26
- package/preview-card/root/PreviewCardContext.js +2 -2
- package/preview-card/root/PreviewCardRoot.d.ts +35 -10
- package/preview-card/root/PreviewCardRoot.js +59 -113
- package/preview-card/store/PreviewCardHandle.d.ts +33 -0
- package/preview-card/store/PreviewCardHandle.js +63 -0
- package/preview-card/store/PreviewCardStore.d.ts +36 -0
- package/preview-card/store/PreviewCardStore.js +105 -0
- package/preview-card/trigger/PreviewCardTrigger.d.ts +15 -3
- package/preview-card/trigger/PreviewCardTrigger.js +50 -13
- package/preview-card/viewport/PreviewCardViewport.d.ts +22 -0
- package/preview-card/viewport/PreviewCardViewport.js +278 -0
- package/preview-card/viewport/PreviewCardViewportCssVars.d.ts +14 -0
- package/preview-card/viewport/PreviewCardViewportCssVars.js +21 -0
- package/preview-card/viewport/PreviewCardViewportDataAttributes.d.ts +26 -0
- package/preview-card/viewport/PreviewCardViewportDataAttributes.js +33 -0
- package/progress/indicator/ProgressIndicator.d.ts +1 -1
- package/progress/label/ProgressLabel.d.ts +1 -1
- package/progress/root/ProgressRoot.d.ts +1 -1
- package/progress/track/ProgressTrack.d.ts +1 -1
- package/progress/value/ProgressValue.d.ts +1 -1
- package/radio/indicator/RadioIndicator.d.ts +1 -1
- package/radio/root/RadioRoot.d.ts +1 -1
- package/radio/root/RadioRoot.js +8 -8
- package/radio-group/RadioGroup.d.ts +4 -4
- package/radio-group/RadioGroup.js +1 -1
- package/scroll-area/content/ScrollAreaContent.d.ts +1 -1
- package/scroll-area/content/ScrollAreaContent.js +10 -1
- package/scroll-area/corner/ScrollAreaCorner.d.ts +1 -1
- package/scroll-area/corner/ScrollAreaCorner.js +1 -1
- package/scroll-area/root/ScrollAreaRoot.d.ts +26 -2
- package/scroll-area/root/ScrollAreaRoot.js +33 -29
- package/scroll-area/root/ScrollAreaRootContext.d.ts +10 -43
- package/scroll-area/scrollbar/ScrollAreaScrollbar.d.ts +1 -1
- package/scroll-area/scrollbar/ScrollAreaScrollbar.js +4 -4
- package/scroll-area/thumb/ScrollAreaThumb.d.ts +2 -2
- package/scroll-area/thumb/ScrollAreaThumb.js +1 -1
- package/scroll-area/viewport/ScrollAreaViewport.d.ts +1 -1
- package/scroll-area/viewport/ScrollAreaViewport.js +51 -25
- package/select/arrow/SelectArrow.d.ts +1 -1
- package/select/backdrop/SelectBackdrop.d.ts +1 -1
- package/select/group/SelectGroup.d.ts +1 -1
- package/select/group-label/SelectGroupLabel.d.ts +1 -1
- package/select/icon/SelectIcon.d.ts +1 -1
- package/select/item/SelectItem.d.ts +1 -1
- package/select/item/SelectItem.js +0 -1
- package/select/item-indicator/SelectItemIndicator.d.ts +1 -1
- package/select/item-text/SelectItemText.d.ts +1 -1
- package/select/list/SelectList.d.ts +1 -1
- package/select/popup/SelectPopup.d.ts +1 -1
- package/select/popup/SelectPopup.js +154 -95
- package/select/portal/SelectPortal.d.ts +1 -1
- package/select/positioner/SelectPositioner.d.ts +1 -1
- package/select/root/SelectRoot.d.ts +2 -2
- package/select/root/SelectRoot.js +24 -11
- package/select/scroll-arrow/SelectScrollArrow.d.ts +1 -1
- package/select/scroll-down-arrow/SelectScrollDownArrow.d.ts +1 -1
- package/select/scroll-up-arrow/SelectScrollUpArrow.d.ts +1 -1
- package/select/store.d.ts +2 -1
- package/select/store.js +18 -12
- package/select/trigger/SelectTrigger.d.ts +14 -4
- package/select/trigger/SelectTrigger.js +50 -18
- package/select/value/SelectValue.d.ts +6 -1
- package/select/value/SelectValue.js +18 -4
- package/separator/Separator.d.ts +1 -1
- package/slider/control/SliderControl.d.ts +1 -1
- package/slider/control/SliderControl.js +1 -1
- package/slider/control/SliderControlDataAttributes.d.ts +0 -8
- package/slider/control/SliderControlDataAttributes.js +0 -8
- package/slider/indicator/SliderIndicator.d.ts +1 -1
- package/slider/indicator/SliderIndicatorDataAttributes.d.ts +0 -8
- package/slider/indicator/SliderIndicatorDataAttributes.js +0 -8
- package/slider/root/SliderRootDataAttributes.d.ts +0 -8
- package/slider/root/SliderRootDataAttributes.js +0 -8
- package/slider/thumb/SliderThumb.d.ts +2 -2
- package/slider/thumb/SliderThumb.js +7 -1
- package/slider/thumb/SliderThumbDataAttributes.d.ts +0 -8
- package/slider/thumb/SliderThumbDataAttributes.js +0 -8
- package/slider/track/SliderTrack.d.ts +1 -1
- package/slider/track/SliderTrackDataAttributes.d.ts +0 -8
- package/slider/track/SliderTrackDataAttributes.js +0 -8
- package/slider/value/SliderValue.d.ts +1 -1
- package/slider/value/SliderValueDataAttributes.d.ts +0 -8
- package/slider/value/SliderValueDataAttributes.js +0 -8
- package/switch/root/SwitchRoot.d.ts +6 -1
- package/switch/root/SwitchRoot.js +14 -5
- package/switch/thumb/SwitchThumb.d.ts +1 -1
- package/tabs/indicator/TabsIndicator.d.ts +1 -1
- package/tabs/indicator/TabsIndicator.js +6 -0
- package/tabs/list/TabsList.d.ts +1 -1
- package/tabs/panel/TabsPanel.d.ts +1 -1
- package/tabs/root/TabsRoot.d.ts +1 -1
- package/tabs/tab/TabsTab.d.ts +1 -1
- package/toast/action/ToastAction.d.ts +1 -1
- package/toast/arrow/ToastArrow.d.ts +1 -1
- package/toast/close/ToastClose.d.ts +1 -1
- package/toast/content/ToastContent.d.ts +1 -1
- package/toast/description/ToastDescription.d.ts +1 -1
- package/toast/portal/ToastPortal.d.ts +1 -1
- package/toast/positioner/ToastPositioner.d.ts +1 -1
- package/toast/provider/ToastProvider.js +46 -19
- package/toast/root/ToastRoot.d.ts +1 -1
- package/toast/title/ToastTitle.d.ts +1 -1
- package/toast/viewport/ToastViewport.d.ts +1 -1
- package/toggle/Toggle.d.ts +1 -1
- package/toggle-group/ToggleGroup.d.ts +1 -1
- package/toolbar/button/ToolbarButton.d.ts +1 -1
- package/toolbar/group/ToolbarGroup.d.ts +1 -1
- package/toolbar/input/ToolbarInput.d.ts +1 -1
- package/toolbar/link/ToolbarLink.d.ts +1 -1
- package/toolbar/root/ToolbarRoot.d.ts +1 -1
- package/toolbar/separator/ToolbarSeparator.d.ts +1 -1
- package/tooltip/arrow/TooltipArrow.d.ts +1 -1
- package/tooltip/popup/TooltipPopup.d.ts +1 -1
- package/tooltip/popup/TooltipPopup.js +0 -31
- package/tooltip/portal/TooltipPortal.d.ts +1 -1
- package/tooltip/positioner/TooltipPositioner.d.ts +1 -1
- package/tooltip/positioner/TooltipPositioner.js +2 -1
- package/tooltip/root/TooltipRoot.d.ts +4 -6
- package/tooltip/root/TooltipRoot.js +1 -2
- package/tooltip/store/TooltipStore.d.ts +4 -2
- package/tooltip/store/TooltipStore.js +7 -4
- package/tooltip/trigger/TooltipTrigger.js +1 -1
- package/tooltip/viewport/TooltipViewport.d.ts +1 -1
- package/tooltip/viewport/TooltipViewport.js +28 -12
- package/use-render/index.d.ts +2 -1
- package/utils/FloatingPortalLite.d.ts +1 -1
- package/utils/popups/popupStoreUtils.js +21 -2
- package/utils/resolveValueLabel.d.ts +5 -1
- package/utils/resolveValueLabel.js +48 -22
- package/utils/styles.d.ts +1 -1
- package/utils/styles.js +10 -6
- package/utils/types.d.ts +1 -1
- package/utils/useAnimationsFinished.d.ts +2 -2
- package/utils/useAnimationsFinished.js +56 -33
- package/utils/useOpenChangeComplete.js +8 -10
- package/utils/useOpenInteractionType.js +6 -1
- package/utils/usePopupAutoResize.js +82 -46
- package/esm/utils/interactions/useFocusWithDelay.d.ts +0 -9
- package/esm/utils/interactions/useFocusWithDelay.js +0 -81
- package/utils/interactions/useFocusWithDelay.d.ts +0 -9
- package/utils/interactions/useFocusWithDelay.js +0 -87
- /package/esm/utils/{useMixedToggleClickHander.d.ts → useMixedToggleClickHandler.d.ts} +0 -0
- /package/esm/utils/{useMixedToggleClickHander.js → useMixedToggleClickHandler.js} +0 -0
- /package/utils/{useMixedToggleClickHander.d.ts → useMixedToggleClickHandler.d.ts} +0 -0
- /package/utils/{useMixedToggleClickHander.js → useMixedToggleClickHandler.js} +0 -0
|
@@ -27,9 +27,12 @@ function useFocus(context, props = {}) {
|
|
|
27
27
|
} = store.context;
|
|
28
28
|
const {
|
|
29
29
|
enabled = true,
|
|
30
|
-
visibleOnly = true
|
|
30
|
+
visibleOnly = true,
|
|
31
|
+
delay
|
|
31
32
|
} = props;
|
|
32
33
|
const blockFocusRef = React.useRef(false);
|
|
34
|
+
// Track which reference should be blocked from re-opening after Escape/press dismissal.
|
|
35
|
+
const blockedReferenceRef = React.useRef(null);
|
|
33
36
|
const timeout = (0, _useTimeout.useTimeout)();
|
|
34
37
|
const keyboardModalityRef = React.useRef(true);
|
|
35
38
|
React.useEffect(() => {
|
|
@@ -43,7 +46,8 @@ function useFocus(context, props = {}) {
|
|
|
43
46
|
// floating element was not open, the focus should be blocked when they
|
|
44
47
|
// return to the tab/window.
|
|
45
48
|
function onBlur() {
|
|
46
|
-
|
|
49
|
+
const currentDomReference = store.select('domReferenceElement');
|
|
50
|
+
if (!store.select('open') && (0, _dom.isHTMLElement)(currentDomReference) && currentDomReference === (0, _utils.activeElement)((0, _utils.getDocument)(currentDomReference))) {
|
|
47
51
|
blockFocusRef.current = true;
|
|
48
52
|
}
|
|
49
53
|
}
|
|
@@ -72,21 +76,31 @@ function useFocus(context, props = {}) {
|
|
|
72
76
|
}
|
|
73
77
|
function onOpenChangeLocal(details) {
|
|
74
78
|
if (details.reason === _reasons.REASONS.triggerPress || details.reason === _reasons.REASONS.escapeKey) {
|
|
75
|
-
|
|
79
|
+
const referenceElement = store.select('domReferenceElement');
|
|
80
|
+
if ((0, _dom.isElement)(referenceElement)) {
|
|
81
|
+
blockedReferenceRef.current = referenceElement;
|
|
82
|
+
blockFocusRef.current = true;
|
|
83
|
+
}
|
|
76
84
|
}
|
|
77
85
|
}
|
|
78
86
|
events.on('openchange', onOpenChangeLocal);
|
|
79
87
|
return () => {
|
|
80
88
|
events.off('openchange', onOpenChangeLocal);
|
|
81
89
|
};
|
|
82
|
-
}, [events, enabled]);
|
|
90
|
+
}, [events, enabled, store]);
|
|
83
91
|
const reference = React.useMemo(() => ({
|
|
84
92
|
onMouseLeave() {
|
|
85
93
|
blockFocusRef.current = false;
|
|
94
|
+
blockedReferenceRef.current = null;
|
|
86
95
|
},
|
|
87
96
|
onFocus(event) {
|
|
97
|
+
const focusTarget = event.currentTarget;
|
|
88
98
|
if (blockFocusRef.current) {
|
|
89
|
-
|
|
99
|
+
if (blockedReferenceRef.current === focusTarget) {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
blockFocusRef.current = false;
|
|
103
|
+
blockedReferenceRef.current = null;
|
|
90
104
|
}
|
|
91
105
|
const target = (0, _utils.getTarget)(event.nativeEvent);
|
|
92
106
|
if (visibleOnly && (0, _dom.isElement)(target)) {
|
|
@@ -100,10 +114,26 @@ function useFocus(context, props = {}) {
|
|
|
100
114
|
return;
|
|
101
115
|
}
|
|
102
116
|
}
|
|
103
|
-
|
|
117
|
+
const movedFromOtherTrigger = event.relatedTarget && store.context.triggerElements.hasElement(event.relatedTarget);
|
|
118
|
+
const {
|
|
119
|
+
nativeEvent,
|
|
120
|
+
currentTarget
|
|
121
|
+
} = event;
|
|
122
|
+
const delayValue = typeof delay === 'function' ? delay() : delay;
|
|
123
|
+
if (store.select('open') && movedFromOtherTrigger || delayValue === 0 || delayValue === undefined) {
|
|
124
|
+
store.setOpen(true, (0, _createBaseUIEventDetails.createChangeEventDetails)(_reasons.REASONS.triggerFocus, nativeEvent, currentTarget));
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
timeout.start(delayValue, () => {
|
|
128
|
+
if (blockFocusRef.current) {
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
store.setOpen(true, (0, _createBaseUIEventDetails.createChangeEventDetails)(_reasons.REASONS.triggerFocus, nativeEvent, currentTarget));
|
|
132
|
+
});
|
|
104
133
|
},
|
|
105
134
|
onBlur(event) {
|
|
106
135
|
blockFocusRef.current = false;
|
|
136
|
+
blockedReferenceRef.current = null;
|
|
107
137
|
const relatedTarget = event.relatedTarget;
|
|
108
138
|
const nativeEvent = event.nativeEvent;
|
|
109
139
|
|
|
@@ -135,13 +165,17 @@ function useFocus(context, props = {}) {
|
|
|
135
165
|
// If the next focused element is one of the triggers, do not close
|
|
136
166
|
// the floating element. The focus handler of that trigger will
|
|
137
167
|
// handle the open state.
|
|
138
|
-
|
|
139
|
-
|
|
168
|
+
const nextFocusedElement = relatedTarget ?? activeEl;
|
|
169
|
+
if ((0, _dom.isElement)(nextFocusedElement)) {
|
|
170
|
+
const triggerElements = store.context.triggerElements;
|
|
171
|
+
if (triggerElements.hasElement(nextFocusedElement) || triggerElements.hasMatchingElement(trigger => (0, _utils.contains)(trigger, nextFocusedElement))) {
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
140
174
|
}
|
|
141
175
|
store.setOpen(false, (0, _createBaseUIEventDetails.createChangeEventDetails)(_reasons.REASONS.triggerFocus, nativeEvent));
|
|
142
176
|
});
|
|
143
177
|
}
|
|
144
|
-
}), [dataRef, store, visibleOnly, timeout]);
|
|
178
|
+
}), [dataRef, store, visibleOnly, timeout, delay]);
|
|
145
179
|
return React.useMemo(() => enabled ? {
|
|
146
180
|
reference,
|
|
147
181
|
trigger: reference
|
|
@@ -165,8 +165,13 @@ function useHoverReferenceInteraction(context, props = {}) {
|
|
|
165
165
|
const allTriggers = store.context.triggerElements;
|
|
166
166
|
const isOverInactiveTrigger = (allTriggers.hasElement(event.target) || allTriggers.hasMatchingElement(t => (0, _utils.contains)(t, event.target))) && (!currentDomReference || !(0, _utils.contains)(currentDomReference, event.target));
|
|
167
167
|
const triggerNode = event.currentTarget ?? null;
|
|
168
|
-
const
|
|
169
|
-
|
|
168
|
+
const isOpen = store.select('open');
|
|
169
|
+
const shouldOpen = !isOpen || isOverInactiveTrigger;
|
|
170
|
+
|
|
171
|
+
// When moving between triggers while already open, open immediately without delay
|
|
172
|
+
if (isOverInactiveTrigger && isOpen) {
|
|
173
|
+
store.setOpen(true, (0, _createBaseUIEventDetails.createChangeEventDetails)(_reasons.REASONS.triggerHover, event, triggerNode));
|
|
174
|
+
} else if (openDelay) {
|
|
170
175
|
openChangeTimeout.start(openDelay, () => {
|
|
171
176
|
if (shouldOpen) {
|
|
172
177
|
store.setOpen(true, (0, _createBaseUIEventDetails.createChangeEventDetails)(_reasons.REASONS.triggerHover, event, triggerNode));
|
|
@@ -270,7 +275,15 @@ function useHoverReferenceInteraction(context, props = {}) {
|
|
|
270
275
|
}
|
|
271
276
|
restTimeout.clear();
|
|
272
277
|
function handleMouseMove() {
|
|
273
|
-
|
|
278
|
+
restTimeoutPendingRef.current = false;
|
|
279
|
+
|
|
280
|
+
// A delayed hover open should not override a click-like open that happened
|
|
281
|
+
// while the hover delay was pending.
|
|
282
|
+
if (isClickLikeOpenEvent()) {
|
|
283
|
+
return;
|
|
284
|
+
}
|
|
285
|
+
const latestOpen = store.select('open');
|
|
286
|
+
if (!blockMouseMoveRef.current && (!latestOpen || isOverInactiveTrigger)) {
|
|
274
287
|
store.setOpen(true, (0, _createBaseUIEventDetails.createChangeEventDetails)(_reasons.REASONS.triggerHover, nativeEvent, trigger));
|
|
275
288
|
}
|
|
276
289
|
}
|
|
@@ -286,5 +299,5 @@ function useHoverReferenceInteraction(context, props = {}) {
|
|
|
286
299
|
}
|
|
287
300
|
}
|
|
288
301
|
};
|
|
289
|
-
}, [blockMouseMoveRef, mouseOnly, store, pointerTypeRef, restMsRef, restTimeout, restTimeoutPendingRef]);
|
|
302
|
+
}, [blockMouseMoveRef, isClickLikeOpenEvent, mouseOnly, store, pointerTypeRef, restMsRef, restTimeout, restTimeoutPendingRef]);
|
|
290
303
|
}
|
|
@@ -47,6 +47,9 @@ function useSyncedFloatingRootContext(options) {
|
|
|
47
47
|
if ((0, _dom.isElement)(referenceElement)) {
|
|
48
48
|
valuesToSync.domReferenceElement = referenceElement;
|
|
49
49
|
}
|
|
50
|
+
if (store.state.positionReference === store.state.referenceElement) {
|
|
51
|
+
valuesToSync.positionReference = referenceElement;
|
|
52
|
+
}
|
|
50
53
|
store.update(valuesToSync);
|
|
51
54
|
}, [open, floatingId, referenceElement, floatingElement, store]);
|
|
52
55
|
|
package/form/Form.d.ts
CHANGED
|
@@ -16,6 +16,10 @@ export declare const Form: {
|
|
|
16
16
|
};
|
|
17
17
|
export type FormSubmitEventReason = typeof REASONS.none;
|
|
18
18
|
export type FormSubmitEventDetails = BaseUIGenericEventDetails<Form.SubmitEventReason>;
|
|
19
|
+
export type FormValidationMode = 'onSubmit' | 'onBlur' | 'onChange';
|
|
20
|
+
export interface FormActions {
|
|
21
|
+
validate: (fieldName?: string | undefined) => void;
|
|
22
|
+
}
|
|
19
23
|
export interface FormState {}
|
|
20
24
|
export interface FormProps<FormValues extends Record<string, any> = Record<string, any>> extends BaseUIComponentProps<'form', Form.State> {
|
|
21
25
|
/**
|
|
@@ -40,11 +44,24 @@ export interface FormProps<FormValues extends Record<string, any> = Record<strin
|
|
|
40
44
|
* `preventDefault()` is called on the native submit event when used.
|
|
41
45
|
*/
|
|
42
46
|
onFormSubmit?: (formValues: FormValues, eventDetails: Form.SubmitEventDetails) => void;
|
|
47
|
+
/**
|
|
48
|
+
* A ref to imperative actions.
|
|
49
|
+
* - `validate`: Validates all fields when called. Optionally pass a field name to validate a single field.
|
|
50
|
+
* @example
|
|
51
|
+
* ```tsx
|
|
52
|
+
* // validate all fields
|
|
53
|
+
* actionsRef.current.validate();
|
|
54
|
+
*
|
|
55
|
+
* // validate one field
|
|
56
|
+
* actionsRef.current.validate('email');
|
|
57
|
+
* ```
|
|
58
|
+
*/
|
|
59
|
+
actionsRef?: React.RefObject<Form.Actions | null>;
|
|
43
60
|
}
|
|
44
|
-
export type FormValidationMode = 'onSubmit' | 'onBlur' | 'onChange';
|
|
45
61
|
export declare namespace Form {
|
|
46
62
|
type Props<FormValues extends Record<string, any> = Record<string, any>> = FormProps<FormValues>;
|
|
47
63
|
type State = FormState;
|
|
64
|
+
type Actions = FormActions;
|
|
48
65
|
type ValidationMode = FormValidationMode;
|
|
49
66
|
type SubmitEventReason = FormSubmitEventReason;
|
|
50
67
|
type SubmitEventDetails = FormSubmitEventDetails;
|
package/form/Form.js
CHANGED
|
@@ -29,6 +29,7 @@ const Form = exports.Form = /*#__PURE__*/React.forwardRef(function Form(componen
|
|
|
29
29
|
errors: externalErrors,
|
|
30
30
|
onSubmit,
|
|
31
31
|
onFormSubmit,
|
|
32
|
+
actionsRef,
|
|
32
33
|
...elementProps
|
|
33
34
|
} = componentProps;
|
|
34
35
|
const formRef = React.useRef({
|
|
@@ -59,6 +60,22 @@ const Form = exports.Form = /*#__PURE__*/React.forwardRef(function Form(componen
|
|
|
59
60
|
focusControl(invalidFields[0].controlRef.current);
|
|
60
61
|
}
|
|
61
62
|
}, [errors, focusControl]);
|
|
63
|
+
const handleImperativeValidate = React.useCallback(fieldName => {
|
|
64
|
+
const values = Array.from(formRef.current.fields.values());
|
|
65
|
+
if (fieldName) {
|
|
66
|
+
const namedField = values.find(field => field.name === fieldName);
|
|
67
|
+
if (namedField) {
|
|
68
|
+
namedField.validate(false);
|
|
69
|
+
}
|
|
70
|
+
} else {
|
|
71
|
+
values.forEach(field => {
|
|
72
|
+
field.validate(false);
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
}, []);
|
|
76
|
+
React.useImperativeHandle(actionsRef, () => ({
|
|
77
|
+
validate: handleImperativeValidate
|
|
78
|
+
}), [handleImperativeValidate]);
|
|
62
79
|
const element = (0, _useRenderElement.useRenderElement)('form', componentProps, {
|
|
63
80
|
ref: forwardedRef,
|
|
64
81
|
props: [{
|
package/form/FormContext.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ export interface FormContext {
|
|
|
8
8
|
formRef: React.RefObject<{
|
|
9
9
|
fields: Map<string, {
|
|
10
10
|
name: string | undefined;
|
|
11
|
-
validate: () => void;
|
|
11
|
+
validate: (flushSync?: boolean | undefined) => void;
|
|
12
12
|
validityData: FieldValidityData;
|
|
13
13
|
controlRef: React.RefObject<HTMLElement | null>;
|
|
14
14
|
getValue: () => unknown;
|
package/index.d.ts
CHANGED
|
@@ -8,6 +8,7 @@ export * from "./checkbox-group/index.js";
|
|
|
8
8
|
export * from "./collapsible/index.js";
|
|
9
9
|
export * from "./combobox/index.js";
|
|
10
10
|
export * from "./context-menu/index.js";
|
|
11
|
+
export * from "./csp-provider/index.js";
|
|
11
12
|
export * from "./dialog/index.js";
|
|
12
13
|
export * from "./direction-provider/index.js";
|
|
13
14
|
export * from "./field/index.js";
|
package/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @base-ui/react v1.
|
|
2
|
+
* @base-ui/react v1.1.0
|
|
3
3
|
*
|
|
4
4
|
* @license MIT
|
|
5
5
|
* This source code is licensed under the MIT license found in the
|
|
@@ -120,6 +120,17 @@ Object.keys(_contextMenu).forEach(function (key) {
|
|
|
120
120
|
}
|
|
121
121
|
});
|
|
122
122
|
});
|
|
123
|
+
var _cspProvider = require("./csp-provider");
|
|
124
|
+
Object.keys(_cspProvider).forEach(function (key) {
|
|
125
|
+
if (key === "default" || key === "__esModule") return;
|
|
126
|
+
if (key in exports && exports[key] === _cspProvider[key]) return;
|
|
127
|
+
Object.defineProperty(exports, key, {
|
|
128
|
+
enumerable: true,
|
|
129
|
+
get: function () {
|
|
130
|
+
return _cspProvider[key];
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
});
|
|
123
134
|
var _dialog = require("./dialog");
|
|
124
135
|
Object.keys(_dialog).forEach(function (key) {
|
|
125
136
|
if (key === "default" || key === "__esModule") return;
|
package/input/Input.d.ts
CHANGED
|
@@ -7,7 +7,7 @@ import { Field } from "../field/index.js";
|
|
|
7
7
|
*
|
|
8
8
|
* Documentation: [Base UI Input](https://base-ui.com/react/components/input)
|
|
9
9
|
*/
|
|
10
|
-
export declare const Input: React.ForwardRefExoticComponent<InputProps & React.RefAttributes<HTMLInputElement>>;
|
|
10
|
+
export declare const Input: React.ForwardRefExoticComponent<Omit<InputProps, "ref"> & React.RefAttributes<HTMLInputElement>>;
|
|
11
11
|
export interface InputProps extends BaseUIComponentProps<'input', Input.State> {
|
|
12
12
|
/**
|
|
13
13
|
* Callback fired when the `value` changes. Use when controlled.
|
|
@@ -7,7 +7,7 @@ import type { BaseUIComponentProps } from "../../utils/types.js";
|
|
|
7
7
|
*
|
|
8
8
|
* Documentation: [Base UI Menu](https://base-ui.com/react/components/menu)
|
|
9
9
|
*/
|
|
10
|
-
export declare const MenuArrow: React.ForwardRefExoticComponent<MenuArrowProps & React.RefAttributes<HTMLDivElement>>;
|
|
10
|
+
export declare const MenuArrow: React.ForwardRefExoticComponent<Omit<MenuArrowProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
11
11
|
export interface MenuArrowState {
|
|
12
12
|
/**
|
|
13
13
|
* Whether the menu is currently open.
|
|
@@ -7,7 +7,7 @@ import type { TransitionStatus } from "../../utils/useTransitionStatus.js";
|
|
|
7
7
|
*
|
|
8
8
|
* Documentation: [Base UI Menu](https://base-ui.com/react/components/menu)
|
|
9
9
|
*/
|
|
10
|
-
export declare const MenuBackdrop: React.ForwardRefExoticComponent<MenuBackdropProps & React.RefAttributes<HTMLDivElement>>;
|
|
10
|
+
export declare const MenuBackdrop: React.ForwardRefExoticComponent<Omit<MenuBackdropProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
11
11
|
export interface MenuBackdropState {
|
|
12
12
|
/**
|
|
13
13
|
* Whether the menu is currently open.
|
|
@@ -7,7 +7,7 @@ import type { MenuRoot } from "../root/MenuRoot.js";
|
|
|
7
7
|
*
|
|
8
8
|
* Documentation: [Base UI Menu](https://base-ui.com/react/components/menu)
|
|
9
9
|
*/
|
|
10
|
-
export declare const MenuCheckboxItem: React.ForwardRefExoticComponent<MenuCheckboxItemProps & React.RefAttributes<
|
|
10
|
+
export declare const MenuCheckboxItem: React.ForwardRefExoticComponent<Omit<MenuCheckboxItemProps, "ref"> & React.RefAttributes<HTMLElement>>;
|
|
11
11
|
export type MenuCheckboxItemState = {
|
|
12
12
|
/**
|
|
13
13
|
* Whether the checkbox item should ignore user interaction.
|
|
@@ -7,7 +7,7 @@ import { TransitionStatus } from "../../utils/useTransitionStatus.js";
|
|
|
7
7
|
*
|
|
8
8
|
* Documentation: [Base UI Menu](https://base-ui.com/react/components/menu)
|
|
9
9
|
*/
|
|
10
|
-
export declare const MenuCheckboxItemIndicator: React.ForwardRefExoticComponent<MenuCheckboxItemIndicatorProps & React.RefAttributes<HTMLSpanElement>>;
|
|
10
|
+
export declare const MenuCheckboxItemIndicator: React.ForwardRefExoticComponent<Omit<MenuCheckboxItemIndicatorProps, "ref"> & React.RefAttributes<HTMLSpanElement>>;
|
|
11
11
|
export interface MenuCheckboxItemIndicatorProps extends BaseUIComponentProps<'span', MenuCheckboxItemIndicator.State> {
|
|
12
12
|
/**
|
|
13
13
|
* Whether to keep the HTML element in the DOM when the checkbox item is not checked.
|
|
@@ -6,7 +6,7 @@ import { BaseUIComponentProps } from "../../utils/types.js";
|
|
|
6
6
|
*
|
|
7
7
|
* Documentation: [Base UI Menu](https://base-ui.com/react/components/menu)
|
|
8
8
|
*/
|
|
9
|
-
export declare const MenuGroup: React.ForwardRefExoticComponent<MenuGroupProps & React.RefAttributes<
|
|
9
|
+
export declare const MenuGroup: React.ForwardRefExoticComponent<Omit<MenuGroupProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
10
10
|
export interface MenuGroupProps extends BaseUIComponentProps<'div', MenuGroup.State> {
|
|
11
11
|
/**
|
|
12
12
|
* The content of the component.
|
|
@@ -6,7 +6,7 @@ import type { BaseUIComponentProps } from "../../utils/types.js";
|
|
|
6
6
|
*
|
|
7
7
|
* Documentation: [Base UI Menu](https://base-ui.com/react/components/menu)
|
|
8
8
|
*/
|
|
9
|
-
export declare const MenuGroupLabel: React.ForwardRefExoticComponent<MenuGroupLabelProps & React.RefAttributes<HTMLDivElement>>;
|
|
9
|
+
export declare const MenuGroupLabel: React.ForwardRefExoticComponent<Omit<MenuGroupLabelProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
10
10
|
export interface MenuGroupLabelProps extends BaseUIComponentProps<'div', MenuGroupLabel.State> {}
|
|
11
11
|
export interface MenuGroupLabelState {}
|
|
12
12
|
export declare namespace MenuGroupLabel {
|
package/menu/item/MenuItem.d.ts
CHANGED
|
@@ -6,7 +6,7 @@ import type { BaseUIComponentProps, NonNativeButtonProps } from "../../utils/typ
|
|
|
6
6
|
*
|
|
7
7
|
* Documentation: [Base UI Menu](https://base-ui.com/react/components/menu)
|
|
8
8
|
*/
|
|
9
|
-
export declare const MenuItem: React.ForwardRefExoticComponent<MenuItemProps & React.RefAttributes<
|
|
9
|
+
export declare const MenuItem: React.ForwardRefExoticComponent<Omit<MenuItemProps, "ref"> & React.RefAttributes<HTMLElement>>;
|
|
10
10
|
export interface MenuItemState {
|
|
11
11
|
/**
|
|
12
12
|
* Whether the item should ignore user interaction.
|
|
@@ -9,7 +9,7 @@ import type { TransitionStatus } from "../../utils/useTransitionStatus.js";
|
|
|
9
9
|
*
|
|
10
10
|
* Documentation: [Base UI Menu](https://base-ui.com/react/components/menu)
|
|
11
11
|
*/
|
|
12
|
-
export declare const MenuPopup: React.ForwardRefExoticComponent<MenuPopupProps & React.RefAttributes<
|
|
12
|
+
export declare const MenuPopup: React.ForwardRefExoticComponent<Omit<MenuPopupProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
13
13
|
export interface MenuPopupProps extends BaseUIComponentProps<'div', MenuPopup.State> {
|
|
14
14
|
children?: React.ReactNode;
|
|
15
15
|
/**
|
package/menu/popup/MenuPopup.js
CHANGED
|
@@ -59,6 +59,7 @@ const MenuPopup = exports.MenuPopup = /*#__PURE__*/React.forwardRef(function Men
|
|
|
59
59
|
const floatingTreeRoot = store.useState('floatingTreeRoot');
|
|
60
60
|
const closeDelay = store.useState('closeDelay');
|
|
61
61
|
const activeTriggerElement = store.useState('activeTriggerElement');
|
|
62
|
+
const isContextMenu = parent.type === 'context-menu';
|
|
62
63
|
(0, _useOpenChangeComplete.useOpenChangeComplete)({
|
|
63
64
|
open,
|
|
64
65
|
ref: store.context.popupRef,
|
|
@@ -80,7 +81,7 @@ const MenuPopup = exports.MenuPopup = /*#__PURE__*/React.forwardRef(function Men
|
|
|
80
81
|
const hoverEnabled = store.useState('hoverEnabled');
|
|
81
82
|
const disabled = store.useState('disabled');
|
|
82
83
|
(0, _floatingUiReact.useHoverFloatingInteraction)(floatingContext, {
|
|
83
|
-
enabled: hoverEnabled && !disabled &&
|
|
84
|
+
enabled: hoverEnabled && !disabled && !isContextMenu && parent.type !== 'menubar',
|
|
84
85
|
closeDelay
|
|
85
86
|
});
|
|
86
87
|
const state = React.useMemo(() => ({
|
|
@@ -105,13 +106,13 @@ const MenuPopup = exports.MenuPopup = /*#__PURE__*/React.forwardRef(function Men
|
|
|
105
106
|
'data-rootownerid': rootId
|
|
106
107
|
}]
|
|
107
108
|
});
|
|
108
|
-
let returnFocus = parent.type === undefined ||
|
|
109
|
+
let returnFocus = parent.type === undefined || isContextMenu;
|
|
109
110
|
if (triggerElement || parent.type === 'menubar' && lastOpenChangeReason !== _reasons.REASONS.outsidePress) {
|
|
110
111
|
returnFocus = true;
|
|
111
112
|
}
|
|
112
113
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_floatingUiReact.FloatingFocusManager, {
|
|
113
114
|
context: floatingContext,
|
|
114
|
-
modal:
|
|
115
|
+
modal: isContextMenu,
|
|
115
116
|
disabled: !mounted,
|
|
116
117
|
returnFocus: finalFocus === undefined ? returnFocus : finalFocus,
|
|
117
118
|
initialFocus: parent.type !== 'menu',
|
|
@@ -7,7 +7,7 @@ import { FloatingPortal } from "../../floating-ui-react/index.js";
|
|
|
7
7
|
*
|
|
8
8
|
* Documentation: [Base UI Menu](https://base-ui.com/react/components/menu)
|
|
9
9
|
*/
|
|
10
|
-
export declare const MenuPortal: React.ForwardRefExoticComponent<MenuPortalProps & React.RefAttributes<HTMLDivElement>>;
|
|
10
|
+
export declare const MenuPortal: React.ForwardRefExoticComponent<Omit<MenuPortalProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
11
11
|
export declare namespace MenuPortal {
|
|
12
12
|
interface State {}
|
|
13
13
|
}
|
|
@@ -7,7 +7,7 @@ import { BaseUIComponentProps } from "../../utils/types.js";
|
|
|
7
7
|
*
|
|
8
8
|
* Documentation: [Base UI Menu](https://base-ui.com/react/components/menu)
|
|
9
9
|
*/
|
|
10
|
-
export declare const MenuPositioner: React.ForwardRefExoticComponent<MenuPositionerProps & React.RefAttributes<HTMLDivElement>>;
|
|
10
|
+
export declare const MenuPositioner: React.ForwardRefExoticComponent<Omit<MenuPositionerProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
11
11
|
export interface MenuPositionerState {
|
|
12
12
|
/**
|
|
13
13
|
* Whether the menu is currently open.
|
|
@@ -7,7 +7,7 @@ import type { MenuRoot } from "../root/MenuRoot.js";
|
|
|
7
7
|
*
|
|
8
8
|
* Documentation: [Base UI Menu](https://base-ui.com/react/components/menu)
|
|
9
9
|
*/
|
|
10
|
-
export declare const MenuRadioGroup: React.NamedExoticComponent<MenuRadioGroupProps & React.RefAttributes<
|
|
10
|
+
export declare const MenuRadioGroup: React.NamedExoticComponent<Omit<MenuRadioGroupProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
11
11
|
export interface MenuRadioGroupProps extends BaseUIComponentProps<'div', MenuRadioGroup.State> {
|
|
12
12
|
/**
|
|
13
13
|
* The content of the component.
|
|
@@ -6,7 +6,7 @@ import type { BaseUIComponentProps, NonNativeButtonProps } from "../../utils/typ
|
|
|
6
6
|
*
|
|
7
7
|
* Documentation: [Base UI Menu](https://base-ui.com/react/components/menu)
|
|
8
8
|
*/
|
|
9
|
-
export declare const MenuRadioItem: React.ForwardRefExoticComponent<MenuRadioItemProps & React.RefAttributes<
|
|
9
|
+
export declare const MenuRadioItem: React.ForwardRefExoticComponent<Omit<MenuRadioItemProps, "ref"> & React.RefAttributes<HTMLElement>>;
|
|
10
10
|
export type MenuRadioItemState = {
|
|
11
11
|
/**
|
|
12
12
|
* Whether the radio item should ignore user interaction.
|
|
@@ -7,7 +7,7 @@ import { TransitionStatus } from "../../utils/useTransitionStatus.js";
|
|
|
7
7
|
*
|
|
8
8
|
* Documentation: [Base UI Menu](https://base-ui.com/react/components/menu)
|
|
9
9
|
*/
|
|
10
|
-
export declare const MenuRadioItemIndicator: React.ForwardRefExoticComponent<MenuRadioItemIndicatorProps & React.RefAttributes<HTMLSpanElement>>;
|
|
10
|
+
export declare const MenuRadioItemIndicator: React.ForwardRefExoticComponent<Omit<MenuRadioItemIndicatorProps, "ref"> & React.RefAttributes<HTMLSpanElement>>;
|
|
11
11
|
export interface MenuRadioItemIndicatorProps extends BaseUIComponentProps<'span', MenuRadioItemIndicator.State> {
|
|
12
12
|
/**
|
|
13
13
|
* Whether to keep the HTML element in the DOM when the radio item is inactive.
|
package/menu/root/MenuRoot.d.ts
CHANGED
|
@@ -36,7 +36,7 @@ export interface MenuRootProps<Payload = unknown> {
|
|
|
36
36
|
highlightItemOnHover?: boolean;
|
|
37
37
|
/**
|
|
38
38
|
* Determines if the menu enters a modal state when open.
|
|
39
|
-
* - `true`: user interaction is limited to the menu: document page scroll is locked and
|
|
39
|
+
* - `true`: user interaction is limited to the menu: document page scroll is locked and pointer interactions on outside elements are disabled.
|
|
40
40
|
* - `false`: user interaction with the rest of the document is allowed.
|
|
41
41
|
* @default true
|
|
42
42
|
*/
|
|
@@ -77,21 +77,21 @@ export interface MenuRootProps<Payload = unknown> {
|
|
|
77
77
|
* Useful when the menu's animation is controlled by an external library.
|
|
78
78
|
* - `close`: When specified, the menu can be closed imperatively.
|
|
79
79
|
*/
|
|
80
|
-
actionsRef?: React.RefObject<MenuRoot.Actions>;
|
|
80
|
+
actionsRef?: React.RefObject<MenuRoot.Actions | null>;
|
|
81
81
|
/**
|
|
82
82
|
* ID of the trigger that the popover is associated with.
|
|
83
|
-
* This is useful in
|
|
83
|
+
* This is useful in conjunction with the `open` prop to create a controlled popover.
|
|
84
84
|
* There's no need to specify this prop when the popover is uncontrolled (i.e. when the `open` prop is not set).
|
|
85
85
|
*/
|
|
86
86
|
triggerId?: string | null;
|
|
87
87
|
/**
|
|
88
88
|
* ID of the trigger that the popover is associated with.
|
|
89
|
-
* This is useful in
|
|
89
|
+
* This is useful in conjunction with the `defaultOpen` prop to create an initially open popover.
|
|
90
90
|
*/
|
|
91
91
|
defaultTriggerId?: string | null;
|
|
92
92
|
/**
|
|
93
|
-
* A handle to associate the
|
|
94
|
-
* If specified, allows external triggers to control the
|
|
93
|
+
* A handle to associate the menu with a trigger.
|
|
94
|
+
* If specified, allows external triggers to control the menu's open state.
|
|
95
95
|
*/
|
|
96
96
|
handle?: MenuHandle<Payload>;
|
|
97
97
|
/**
|
|
@@ -102,6 +102,7 @@ export interface MenuRootProps<Payload = unknown> {
|
|
|
102
102
|
}
|
|
103
103
|
export interface MenuRootActions {
|
|
104
104
|
unmount: () => void;
|
|
105
|
+
close: () => void;
|
|
105
106
|
}
|
|
106
107
|
export type MenuRootChangeEventReason = typeof REASONS.triggerHover | typeof REASONS.triggerFocus | typeof REASONS.triggerPress | typeof REASONS.outsidePress | typeof REASONS.focusOut | typeof REASONS.listNavigation | typeof REASONS.escapeKey | typeof REASONS.itemPress | typeof REASONS.closePress | typeof REASONS.siblingOpen | typeof REASONS.cancelOpen | typeof REASONS.imperativeAction | typeof REASONS.none;
|
|
107
108
|
export type MenuRootChangeEventDetails = BaseUIChangeEventDetails<MenuRoot.ChangeEventReason> & {
|
package/menu/root/MenuRoot.js
CHANGED
|
@@ -183,7 +183,7 @@ function MenuRoot(props) {
|
|
|
183
183
|
const allowTouchToCloseTimeout = (0, _useTimeout.useTimeout)();
|
|
184
184
|
const setOpen = (0, _useStableCallback.useStableCallback)((nextOpen, eventDetails) => {
|
|
185
185
|
const reason = eventDetails.reason;
|
|
186
|
-
if (open === nextOpen && eventDetails.trigger === activeTriggerElement) {
|
|
186
|
+
if (open === nextOpen && eventDetails.trigger === activeTriggerElement && lastOpenChangeReason === reason) {
|
|
187
187
|
return;
|
|
188
188
|
}
|
|
189
189
|
eventDetails.preventUnmountOnClose = () => {
|
|
@@ -306,7 +306,9 @@ function MenuRoot(props) {
|
|
|
306
306
|
}, [floatingEvents, setOpen]);
|
|
307
307
|
const dismiss = (0, _floatingUiReact.useDismiss)(floatingRootContext, {
|
|
308
308
|
enabled: !disabled,
|
|
309
|
-
bubbles:
|
|
309
|
+
bubbles: {
|
|
310
|
+
escapeKey: closeParentOnEsc && parent.type === 'menu'
|
|
311
|
+
},
|
|
310
312
|
outsidePress() {
|
|
311
313
|
if (parent.type !== 'context-menu' || openEventRef.current?.type === 'contextmenu') {
|
|
312
314
|
return true;
|
package/menu/store/MenuStore.js
CHANGED
|
@@ -108,10 +108,10 @@ class MenuStore extends _store.ReactStore {
|
|
|
108
108
|
}
|
|
109
109
|
static useStore(externalStore, initialState) {
|
|
110
110
|
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
111
|
-
const
|
|
112
|
-
return
|
|
111
|
+
const internalStore = (0, _useRefWithInit.useRefWithInit)(() => {
|
|
112
|
+
return new MenuStore(initialState);
|
|
113
113
|
}).current;
|
|
114
|
-
return
|
|
114
|
+
return externalStore ?? internalStore;
|
|
115
115
|
}
|
|
116
116
|
unsubscribeParentListener = null;
|
|
117
117
|
}
|
|
@@ -6,7 +6,7 @@ import { BaseUIComponentProps, NonNativeButtonProps } from "../../utils/types.js
|
|
|
6
6
|
*
|
|
7
7
|
* Documentation: [Base UI Menu](https://base-ui.com/react/components/menu)
|
|
8
8
|
*/
|
|
9
|
-
export declare const MenuSubmenuTrigger: React.ForwardRefExoticComponent<MenuSubmenuTriggerProps & React.RefAttributes<HTMLElement>>;
|
|
9
|
+
export declare const MenuSubmenuTrigger: React.ForwardRefExoticComponent<Omit<MenuSubmenuTriggerProps, "ref"> & React.RefAttributes<HTMLElement>>;
|
|
10
10
|
export interface MenuSubmenuTriggerProps extends NonNativeButtonProps, BaseUIComponentProps<'div', MenuSubmenuTrigger.State> {
|
|
11
11
|
onClick?: React.MouseEventHandler<HTMLElement>;
|
|
12
12
|
/**
|
|
@@ -29,7 +29,7 @@ var _findRootOwnerId = require("../utils/findRootOwnerId");
|
|
|
29
29
|
var _popups = require("../../utils/popups");
|
|
30
30
|
var _useBaseUiId = require("../../utils/useBaseUiId");
|
|
31
31
|
var _reasons = require("../../utils/reasons");
|
|
32
|
-
var
|
|
32
|
+
var _useMixedToggleClickHandler = require("../../utils/useMixedToggleClickHandler");
|
|
33
33
|
var _ContextMenuRootContext = require("../../context-menu/root/ContextMenuRootContext");
|
|
34
34
|
var _MenubarContext = require("../../menubar/MenubarContext");
|
|
35
35
|
var _constants = require("../../utils/constants");
|
|
@@ -88,8 +88,9 @@ const MenuTrigger = exports.MenuTrigger = /*#__PURE__*/React.forwardRef(function
|
|
|
88
88
|
floatingParentNodeId,
|
|
89
89
|
keyboardEventRelay: compositeRootContext?.relayKeyboardEvent
|
|
90
90
|
});
|
|
91
|
+
const isInMenubar = parent.type === 'menubar';
|
|
91
92
|
const rootDisabled = store.useState('disabled');
|
|
92
|
-
const disabled = disabledProp || rootDisabled ||
|
|
93
|
+
const disabled = disabledProp || rootDisabled || isInMenubar && parent.context.disabled;
|
|
93
94
|
const {
|
|
94
95
|
getButtonProps,
|
|
95
96
|
buttonRef
|
|
@@ -134,12 +135,12 @@ const MenuTrigger = exports.MenuTrigger = /*#__PURE__*/React.forwardRef(function
|
|
|
134
135
|
});
|
|
135
136
|
}
|
|
136
137
|
}, [isOpenedByThisTrigger, handleDocumentMouseUp, store]);
|
|
137
|
-
const parentMenubarHasSubmenuOpen =
|
|
138
|
-
const openOnHover = openOnHoverProp ?? parentMenubarHasSubmenuOpen
|
|
138
|
+
const parentMenubarHasSubmenuOpen = isInMenubar && parent.context.hasSubmenuOpen;
|
|
139
|
+
const openOnHover = openOnHoverProp ?? parentMenubarHasSubmenuOpen;
|
|
139
140
|
const hoverProps = (0, _floatingUiReact.useHoverReferenceInteraction)(floatingRootContext, {
|
|
140
|
-
enabled: openOnHover && !disabled && parent.type !== 'context-menu' && (
|
|
141
|
+
enabled: openOnHover && !disabled && parent.type !== 'context-menu' && (!isInMenubar || parentMenubarHasSubmenuOpen && !isMountedByThisTrigger),
|
|
141
142
|
handleClose: (0, _floatingUiReact.safePolygon)({
|
|
142
|
-
blockPointerEvents:
|
|
143
|
+
blockPointerEvents: !isInMenubar
|
|
143
144
|
}),
|
|
144
145
|
mouseOnly: true,
|
|
145
146
|
move: false,
|
|
@@ -153,26 +154,25 @@ const MenuTrigger = exports.MenuTrigger = /*#__PURE__*/React.forwardRef(function
|
|
|
153
154
|
});
|
|
154
155
|
|
|
155
156
|
// Whether to ignore clicks to open the menu.
|
|
156
|
-
// `lastOpenChangeReason`
|
|
157
|
+
// `lastOpenChangeReason` doesn't need to be reactive here, as we need to run this
|
|
157
158
|
// only when `isOpenedByThisTrigger` changes.
|
|
158
159
|
const stickIfOpen = useStickIfOpen(isOpenedByThisTrigger, store.select('lastOpenChangeReason'));
|
|
159
160
|
const click = (0, _floatingUiReact.useClick)(floatingRootContext, {
|
|
160
161
|
enabled: !disabled && parent.type !== 'context-menu',
|
|
161
|
-
event: isOpenedByThisTrigger &&
|
|
162
|
+
event: isOpenedByThisTrigger && isInMenubar ? 'click' : 'mousedown',
|
|
162
163
|
toggle: true,
|
|
163
164
|
ignoreMouse: false,
|
|
164
165
|
stickIfOpen: parent.type === undefined ? stickIfOpen : false
|
|
165
166
|
});
|
|
166
167
|
const focus = (0, _floatingUiReact.useFocus)(floatingRootContext, {
|
|
167
|
-
enabled: !disabled &&
|
|
168
|
+
enabled: !disabled && parentMenubarHasSubmenuOpen
|
|
168
169
|
});
|
|
169
|
-
const mixedToggleHandlers = (0,
|
|
170
|
+
const mixedToggleHandlers = (0, _useMixedToggleClickHandler.useMixedToggleClickHandler)({
|
|
170
171
|
open: isOpenedByThisTrigger,
|
|
171
|
-
enabled:
|
|
172
|
+
enabled: isInMenubar,
|
|
172
173
|
mouseDownAction: 'open'
|
|
173
174
|
});
|
|
174
175
|
const localInteractionProps = (0, _floatingUiReact.useInteractions)([click, focus]);
|
|
175
|
-
const isInMenubar = parent.type === 'menubar';
|
|
176
176
|
const state = React.useMemo(() => ({
|
|
177
177
|
disabled,
|
|
178
178
|
open: isOpenedByThisTrigger
|
|
@@ -215,8 +215,8 @@ const MenuTrigger = exports.MenuTrigger = /*#__PURE__*/React.forwardRef(function
|
|
|
215
215
|
ReactDOM.flushSync(() => {
|
|
216
216
|
store.setOpen(false, (0, _createBaseUIEventDetails.createChangeEventDetails)(_reasons.REASONS.focusOut, event.nativeEvent, event.currentTarget));
|
|
217
217
|
});
|
|
218
|
-
let nextTabbable = (0, _utils.getTabbableAfterElement)(triggerElementRef.current);
|
|
219
|
-
while (nextTabbable !== null && (0, _utils.contains)(currentPositionerElement, nextTabbable)
|
|
218
|
+
let nextTabbable = (0, _utils.getTabbableAfterElement)(store.context.triggerFocusTargetRef.current || triggerElementRef.current);
|
|
219
|
+
while (nextTabbable !== null && (0, _utils.contains)(currentPositionerElement, nextTabbable)) {
|
|
220
220
|
const prevTabbable = nextTabbable;
|
|
221
221
|
nextTabbable = (0, _utils.getNextTabbable)(nextTabbable);
|
|
222
222
|
if (nextTabbable === prevTabbable) {
|
package/menubar/Menubar.d.ts
CHANGED
|
@@ -6,7 +6,7 @@ import { BaseUIComponentProps } from "../utils/types.js";
|
|
|
6
6
|
*
|
|
7
7
|
* Documentation: [Base UI Menubar](https://base-ui.com/react/components/menubar)
|
|
8
8
|
*/
|
|
9
|
-
export declare const Menubar: React.ForwardRefExoticComponent<MenubarProps & React.RefAttributes<HTMLDivElement>>;
|
|
9
|
+
export declare const Menubar: React.ForwardRefExoticComponent<Omit<MenubarProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
10
10
|
export interface MenubarState {
|
|
11
11
|
/**
|
|
12
12
|
* The orientation of the menubar.
|