@base-ui/react 1.0.0 → 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 +144 -1
- 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
|
@@ -2,6 +2,7 @@ import * as React from 'react';
|
|
|
2
2
|
import { useAnimationFrame } from '@base-ui/utils/useAnimationFrame';
|
|
3
3
|
import { useIsoLayoutEffect } from '@base-ui/utils/useIsoLayoutEffect';
|
|
4
4
|
import { useStableCallback } from '@base-ui/utils/useStableCallback';
|
|
5
|
+
import { NOOP } from '@base-ui/utils/empty';
|
|
5
6
|
import { useAnimationsFinished } from "./useAnimationsFinished.js";
|
|
6
7
|
import { getCssDimensions } from "./getCssDimensions.js";
|
|
7
8
|
import { EMPTY_OBJECT } from "./constants.js";
|
|
@@ -23,10 +24,12 @@ export function usePopupAutoResize(parameters) {
|
|
|
23
24
|
side,
|
|
24
25
|
direction
|
|
25
26
|
} = parameters;
|
|
26
|
-
const isInitialRender = React.useRef(true);
|
|
27
27
|
const runOnceAnimationsFinish = useAnimationsFinished(popupElement, true, false);
|
|
28
28
|
const animationFrame = useAnimationFrame();
|
|
29
|
-
const
|
|
29
|
+
const committedDimensionsRef = React.useRef(null);
|
|
30
|
+
const liveDimensionsRef = React.useRef(null);
|
|
31
|
+
const isInitialRenderRef = React.useRef(true);
|
|
32
|
+
const restoreAnchoringStylesRef = React.useRef(NOOP);
|
|
30
33
|
const onMeasureLayout = useStableCallback(onMeasureLayoutParam);
|
|
31
34
|
const onMeasureLayoutComplete = useStableCallback(onMeasureLayoutCompleteParam);
|
|
32
35
|
const anchoringStyles = React.useMemo(() => {
|
|
@@ -49,80 +52,90 @@ export function usePopupAutoResize(parameters) {
|
|
|
49
52
|
useIsoLayoutEffect(() => {
|
|
50
53
|
// Reset the state when the popup is closed.
|
|
51
54
|
if (!mounted || !enabled() || !supportsResizeObserver) {
|
|
52
|
-
|
|
53
|
-
|
|
55
|
+
restoreAnchoringStylesRef.current = NOOP;
|
|
56
|
+
isInitialRenderRef.current = true;
|
|
57
|
+
committedDimensionsRef.current = null;
|
|
58
|
+
liveDimensionsRef.current = null;
|
|
54
59
|
return undefined;
|
|
55
60
|
}
|
|
56
61
|
if (!popupElement || !positionerElement) {
|
|
57
62
|
return undefined;
|
|
58
63
|
}
|
|
59
|
-
|
|
60
|
-
popupElement.style.setProperty(key, value);
|
|
61
|
-
});
|
|
64
|
+
restoreAnchoringStylesRef.current = applyElementStyles(popupElement, anchoringStyles);
|
|
62
65
|
const observer = new ResizeObserver(entries => {
|
|
63
66
|
const entry = entries[0];
|
|
64
67
|
if (entry) {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
};
|
|
70
|
-
} else {
|
|
71
|
-
previousDimensionsRef.current.width = Math.ceil(entry.borderBoxSize[0].inlineSize);
|
|
72
|
-
previousDimensionsRef.current.height = Math.ceil(entry.borderBoxSize[0].blockSize);
|
|
73
|
-
}
|
|
68
|
+
liveDimensionsRef.current = {
|
|
69
|
+
width: Math.ceil(entry.borderBoxSize[0].inlineSize),
|
|
70
|
+
height: Math.ceil(entry.borderBoxSize[0].blockSize)
|
|
71
|
+
};
|
|
74
72
|
}
|
|
75
73
|
});
|
|
76
74
|
observer.observe(popupElement);
|
|
77
75
|
|
|
78
76
|
// Measure the rendered size to enable transitions:
|
|
79
|
-
popupElement
|
|
80
|
-
popupElement.style.setProperty('--popup-height', 'auto');
|
|
77
|
+
setPopupCssSize(popupElement, 'auto');
|
|
81
78
|
const restorePopupPosition = overrideElementStyle(popupElement, 'position', 'static');
|
|
82
79
|
const restorePopupTransform = overrideElementStyle(popupElement, 'transform', 'none');
|
|
83
80
|
const restorePopupScale = overrideElementStyle(popupElement, 'scale', '1');
|
|
84
|
-
const
|
|
85
|
-
|
|
81
|
+
const restorePositionerAvailableSize = applyElementStyles(positionerElement, {
|
|
82
|
+
'--available-width': 'max-content',
|
|
83
|
+
'--available-height': 'max-content'
|
|
84
|
+
});
|
|
85
|
+
function restoreMeasurementOverrides() {
|
|
86
|
+
restorePopupPosition();
|
|
87
|
+
restorePopupTransform();
|
|
88
|
+
restorePositionerAvailableSize();
|
|
89
|
+
}
|
|
90
|
+
function restoreMeasurementOverridesIncludingScale() {
|
|
91
|
+
restoreMeasurementOverrides();
|
|
92
|
+
restorePopupScale();
|
|
93
|
+
}
|
|
86
94
|
onMeasureLayout?.();
|
|
87
95
|
|
|
88
96
|
// Initial render (for each time the popup opens).
|
|
89
|
-
if (
|
|
90
|
-
positionerElement
|
|
91
|
-
positionerElement.style.setProperty('--positioner-height', 'max-content');
|
|
97
|
+
if (isInitialRenderRef.current || committedDimensionsRef.current === null) {
|
|
98
|
+
setPositionerCssSize(positionerElement, 'max-content');
|
|
92
99
|
const dimensions = getCssDimensions(popupElement);
|
|
93
|
-
|
|
94
|
-
positionerElement
|
|
95
|
-
|
|
96
|
-
restorePopupTransform();
|
|
97
|
-
restorePopupScale();
|
|
98
|
-
restoreAvailableWidth();
|
|
99
|
-
restoreAvailableHeight();
|
|
100
|
+
committedDimensionsRef.current = dimensions;
|
|
101
|
+
setPositionerCssSize(positionerElement, dimensions);
|
|
102
|
+
restoreMeasurementOverridesIncludingScale();
|
|
100
103
|
onMeasureLayoutComplete?.(null, dimensions);
|
|
101
|
-
|
|
104
|
+
isInitialRenderRef.current = false;
|
|
102
105
|
return () => {
|
|
103
106
|
observer.disconnect();
|
|
107
|
+
restoreAnchoringStylesRef.current();
|
|
108
|
+
restoreAnchoringStylesRef.current = NOOP;
|
|
104
109
|
};
|
|
105
110
|
}
|
|
106
111
|
|
|
107
112
|
// Subsequent renders while open (when `content` changes).
|
|
108
|
-
popupElement
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
positionerElement.style.setProperty('--positioner-height', 'max-content');
|
|
113
|
+
setPopupCssSize(popupElement, 'auto');
|
|
114
|
+
setPositionerCssSize(positionerElement, 'max-content');
|
|
115
|
+
const previousDimensions = committedDimensionsRef.current ?? liveDimensionsRef.current;
|
|
112
116
|
const newDimensions = getCssDimensions(popupElement);
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
117
|
+
|
|
118
|
+
// Commit immediately so future content changes have a stable previous size, even if
|
|
119
|
+
// ResizeObserver runs after this point.
|
|
120
|
+
committedDimensionsRef.current = newDimensions;
|
|
121
|
+
if (!previousDimensions) {
|
|
122
|
+
setPositionerCssSize(positionerElement, newDimensions);
|
|
123
|
+
restoreMeasurementOverridesIncludingScale();
|
|
124
|
+
onMeasureLayoutComplete?.(null, newDimensions);
|
|
125
|
+
return () => {
|
|
126
|
+
observer.disconnect();
|
|
127
|
+
animationFrame.cancel();
|
|
128
|
+
restoreAnchoringStylesRef.current();
|
|
129
|
+
restoreAnchoringStylesRef.current = NOOP;
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
setPopupCssSize(popupElement, previousDimensions);
|
|
133
|
+
restoreMeasurementOverrides();
|
|
134
|
+
onMeasureLayoutComplete?.(previousDimensions, newDimensions);
|
|
135
|
+
setPositionerCssSize(positionerElement, newDimensions);
|
|
122
136
|
const abortController = new AbortController();
|
|
123
137
|
animationFrame.request(() => {
|
|
124
|
-
popupElement
|
|
125
|
-
popupElement.style.setProperty('--popup-height', `${newDimensions.height}px`);
|
|
138
|
+
setPopupCssSize(popupElement, newDimensions);
|
|
126
139
|
runOnceAnimationsFinish(() => {
|
|
127
140
|
popupElement.style.setProperty('--popup-width', 'auto');
|
|
128
141
|
popupElement.style.setProperty('--popup-height', 'auto');
|
|
@@ -132,6 +145,8 @@ export function usePopupAutoResize(parameters) {
|
|
|
132
145
|
observer.disconnect();
|
|
133
146
|
abortController.abort();
|
|
134
147
|
animationFrame.cancel();
|
|
148
|
+
restoreAnchoringStylesRef.current();
|
|
149
|
+
restoreAnchoringStylesRef.current = NOOP;
|
|
135
150
|
};
|
|
136
151
|
}, [content, popupElement, positionerElement, runOnceAnimationsFinish, animationFrame, enabled, mounted, onMeasureLayout, onMeasureLayoutComplete, anchoringStyles]);
|
|
137
152
|
}
|
|
@@ -141,4 +156,25 @@ function overrideElementStyle(element, property, value) {
|
|
|
141
156
|
return () => {
|
|
142
157
|
element.style.setProperty(property, originalValue);
|
|
143
158
|
};
|
|
159
|
+
}
|
|
160
|
+
function applyElementStyles(element, styles) {
|
|
161
|
+
const restorers = [];
|
|
162
|
+
for (const [key, value] of Object.entries(styles)) {
|
|
163
|
+
restorers.push(overrideElementStyle(element, key, value));
|
|
164
|
+
}
|
|
165
|
+
return restorers.length ? () => {
|
|
166
|
+
restorers.forEach(restore => restore());
|
|
167
|
+
} : NOOP;
|
|
168
|
+
}
|
|
169
|
+
function setPopupCssSize(popupElement, size) {
|
|
170
|
+
const width = size === 'auto' ? 'auto' : `${size.width}px`;
|
|
171
|
+
const height = size === 'auto' ? 'auto' : `${size.height}px`;
|
|
172
|
+
popupElement.style.setProperty('--popup-width', width);
|
|
173
|
+
popupElement.style.setProperty('--popup-height', height);
|
|
174
|
+
}
|
|
175
|
+
function setPositionerCssSize(positionerElement, size) {
|
|
176
|
+
const width = size === 'max-content' ? 'max-content' : `${size.width}px`;
|
|
177
|
+
const height = size === 'max-content' ? 'max-content' : `${size.height}px`;
|
|
178
|
+
positionerElement.style.setProperty('--positioner-width', width);
|
|
179
|
+
positionerElement.style.setProperty('--positioner-height', height);
|
|
144
180
|
}
|
|
@@ -13,7 +13,7 @@ import type { BaseUIChangeEventDetails } from "../../utils/createBaseUIEventDeta
|
|
|
13
13
|
*
|
|
14
14
|
* Documentation: [Base UI Field](https://base-ui.com/react/components/field)
|
|
15
15
|
*/
|
|
16
|
-
export declare const FieldControl: React.ForwardRefExoticComponent<FieldControlProps & React.RefAttributes<HTMLInputElement>>;
|
|
16
|
+
export declare const FieldControl: React.ForwardRefExoticComponent<Omit<FieldControlProps, "ref"> & React.RefAttributes<HTMLInputElement>>;
|
|
17
17
|
export type FieldControlState = FieldRoot.State;
|
|
18
18
|
export interface FieldControlProps extends BaseUIComponentProps<'input', FieldControl.State> {
|
|
19
19
|
/**
|
|
@@ -7,7 +7,7 @@ import type { BaseUIComponentProps } from "../../utils/types.js";
|
|
|
7
7
|
*
|
|
8
8
|
* Documentation: [Base UI Field](https://base-ui.com/react/components/field)
|
|
9
9
|
*/
|
|
10
|
-
export declare const FieldDescription: React.ForwardRefExoticComponent<FieldDescriptionProps & React.RefAttributes<HTMLParagraphElement>>;
|
|
10
|
+
export declare const FieldDescription: React.ForwardRefExoticComponent<Omit<FieldDescriptionProps, "ref"> & React.RefAttributes<HTMLParagraphElement>>;
|
|
11
11
|
export type FieldDescriptionState = FieldRoot.State;
|
|
12
12
|
export interface FieldDescriptionProps extends BaseUIComponentProps<'p', FieldDescription.State> {}
|
|
13
13
|
export declare namespace FieldDescription {
|
|
@@ -7,7 +7,7 @@ import type { BaseUIComponentProps } from "../../utils/types.js";
|
|
|
7
7
|
*
|
|
8
8
|
* Documentation: [Base UI Field](https://base-ui.com/react/components/field)
|
|
9
9
|
*/
|
|
10
|
-
export declare const FieldError: React.ForwardRefExoticComponent<FieldErrorProps & React.RefAttributes<HTMLDivElement>>;
|
|
10
|
+
export declare const FieldError: React.ForwardRefExoticComponent<Omit<FieldErrorProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
11
11
|
export type FieldErrorState = FieldRoot.State;
|
|
12
12
|
export interface FieldErrorProps extends BaseUIComponentProps<'div', FieldError.State> {
|
|
13
13
|
/**
|
package/field/index.d.ts
CHANGED
|
@@ -4,4 +4,5 @@ export type * from "./label/FieldLabel.js";
|
|
|
4
4
|
export type * from "./description/FieldDescription.js";
|
|
5
5
|
export type * from "./error/FieldError.js";
|
|
6
6
|
export type * from "./control/FieldControl.js";
|
|
7
|
-
export type * from "./validity/FieldValidity.js";
|
|
7
|
+
export type * from "./validity/FieldValidity.js";
|
|
8
|
+
export type * from "./item/FieldItem.js";
|
|
@@ -7,7 +7,7 @@ import type { BaseUIComponentProps } from "../../utils/types.js";
|
|
|
7
7
|
*
|
|
8
8
|
* Documentation: [Base UI Field](https://base-ui.com/react/components/field)
|
|
9
9
|
*/
|
|
10
|
-
export declare const FieldItem: React.ForwardRefExoticComponent<FieldItemProps & React.RefAttributes<HTMLDivElement>>;
|
|
10
|
+
export declare const FieldItem: React.ForwardRefExoticComponent<Omit<FieldItemProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
11
11
|
export interface FieldItemProps extends BaseUIComponentProps<'div', FieldItem.State> {
|
|
12
12
|
/**
|
|
13
13
|
* Whether the wrapped control should ignore user interaction.
|
|
@@ -7,9 +7,18 @@ import type { BaseUIComponentProps } from "../../utils/types.js";
|
|
|
7
7
|
*
|
|
8
8
|
* Documentation: [Base UI Field](https://base-ui.com/react/components/field)
|
|
9
9
|
*/
|
|
10
|
-
export declare const FieldLabel: React.ForwardRefExoticComponent<FieldLabelProps & React.RefAttributes<
|
|
10
|
+
export declare const FieldLabel: React.ForwardRefExoticComponent<Omit<FieldLabelProps, "ref"> & React.RefAttributes<HTMLElement>>;
|
|
11
11
|
export type FieldLabelState = FieldRoot.State;
|
|
12
|
-
export interface FieldLabelProps extends BaseUIComponentProps<'label', FieldLabel.State> {
|
|
12
|
+
export interface FieldLabelProps extends BaseUIComponentProps<'label', FieldLabel.State> {
|
|
13
|
+
/**
|
|
14
|
+
* Whether the component renders a native `<label>` element when replacing it via the `render` prop.
|
|
15
|
+
* Set to `false` if the rendered element is not a label (e.g. `<div>`).
|
|
16
|
+
*
|
|
17
|
+
* This is useful to avoid inheriting label behaviors on `<button>` controls (such as `<Select.Trigger>` and `<Combobox.Trigger>`), including avoiding `:hover` on the button when hovering the label, and preventing clicks on the label from firing on the button.
|
|
18
|
+
* @default true
|
|
19
|
+
*/
|
|
20
|
+
nativeLabel?: boolean;
|
|
21
|
+
}
|
|
13
22
|
export declare namespace FieldLabel {
|
|
14
23
|
type State = FieldLabelState;
|
|
15
24
|
type Props = FieldLabelProps;
|
|
@@ -7,7 +7,11 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
});
|
|
8
8
|
exports.FieldLabel = void 0;
|
|
9
9
|
var React = _interopRequireWildcard(require("react"));
|
|
10
|
+
var _error = require("@base-ui/utils/error");
|
|
11
|
+
var _dom = require("@floating-ui/utils/dom");
|
|
10
12
|
var _useIsoLayoutEffect = require("@base-ui/utils/useIsoLayoutEffect");
|
|
13
|
+
var _owner = require("@base-ui/utils/owner");
|
|
14
|
+
var _useStableCallback = require("@base-ui/utils/useStableCallback");
|
|
11
15
|
var _utils = require("../../floating-ui-react/utils");
|
|
12
16
|
var _FieldRootContext = require("../root/FieldRootContext");
|
|
13
17
|
var _LabelableContext = require("../../labelable-provider/LabelableContext");
|
|
@@ -25,6 +29,7 @@ const FieldLabel = exports.FieldLabel = /*#__PURE__*/React.forwardRef(function F
|
|
|
25
29
|
render,
|
|
26
30
|
className,
|
|
27
31
|
id: idProp,
|
|
32
|
+
nativeLabel = true,
|
|
28
33
|
...elementProps
|
|
29
34
|
} = componentProps;
|
|
30
35
|
const fieldRootContext = (0, _FieldRootContext.useFieldRootContext)(false);
|
|
@@ -35,6 +40,45 @@ const FieldLabel = exports.FieldLabel = /*#__PURE__*/React.forwardRef(function F
|
|
|
35
40
|
} = (0, _LabelableContext.useLabelableContext)();
|
|
36
41
|
const id = (0, _useBaseUiId.useBaseUiId)(idProp);
|
|
37
42
|
const labelRef = React.useRef(null);
|
|
43
|
+
const handleInteraction = (0, _useStableCallback.useStableCallback)(event => {
|
|
44
|
+
const target = (0, _utils.getTarget)(event.nativeEvent);
|
|
45
|
+
if (target?.closest('button,input,select,textarea')) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// Prevent text selection when double clicking label.
|
|
50
|
+
if (!event.defaultPrevented && event.detail > 1) {
|
|
51
|
+
event.preventDefault();
|
|
52
|
+
}
|
|
53
|
+
if (nativeLabel || !controlId) {
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
const controlElement = (0, _owner.ownerDocument)(event.currentTarget).getElementById(controlId);
|
|
57
|
+
if ((0, _dom.isHTMLElement)(controlElement)) {
|
|
58
|
+
controlElement.focus({
|
|
59
|
+
// Available from Chrome 144+ (January 2026).
|
|
60
|
+
// Safari and Firefox already support it.
|
|
61
|
+
// @ts-expect-error not available in types yet
|
|
62
|
+
focusVisible: true
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
67
|
+
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
68
|
+
React.useEffect(() => {
|
|
69
|
+
if (!labelRef.current) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
const isLabelTag = labelRef.current.tagName === 'LABEL';
|
|
73
|
+
if (nativeLabel) {
|
|
74
|
+
if (!isLabelTag) {
|
|
75
|
+
(0, _error.error)('<Field.Label> was not rendered as a <label> element, which does not match the `nativeLabel` prop on the component. Ensure that the element passed to the `render` prop of <Field.Label> is a real <label>, or set the `nativeLabel` prop on the component to `false`.');
|
|
76
|
+
}
|
|
77
|
+
} else if (isLabelTag) {
|
|
78
|
+
(0, _error.error)('<Field.Label> was rendered as a <label> element, which does not match the `nativeLabel` prop on the component. Ensure that the element passed to the `render` prop of <Field.Label> is not a real <label>, or set the `nativeLabel` prop on the component to `true`.');
|
|
79
|
+
}
|
|
80
|
+
}, [nativeLabel]);
|
|
81
|
+
}
|
|
38
82
|
(0, _useIsoLayoutEffect.useIsoLayoutEffect)(() => {
|
|
39
83
|
if (id) {
|
|
40
84
|
setLabelId(id);
|
|
@@ -47,18 +91,14 @@ const FieldLabel = exports.FieldLabel = /*#__PURE__*/React.forwardRef(function F
|
|
|
47
91
|
ref: [forwardedRef, labelRef],
|
|
48
92
|
state: fieldRootContext.state,
|
|
49
93
|
props: [{
|
|
50
|
-
id: labelId
|
|
94
|
+
id: labelId
|
|
95
|
+
}, nativeLabel ? {
|
|
51
96
|
htmlFor: controlId ?? undefined,
|
|
52
|
-
onMouseDown
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
// Prevent text selection when double clicking label.
|
|
59
|
-
if (!event.defaultPrevented && event.detail > 1) {
|
|
60
|
-
event.preventDefault();
|
|
61
|
-
}
|
|
97
|
+
onMouseDown: handleInteraction
|
|
98
|
+
} : {
|
|
99
|
+
onClick: handleInteraction,
|
|
100
|
+
onPointerDown(event) {
|
|
101
|
+
event.preventDefault();
|
|
62
102
|
}
|
|
63
103
|
}, elementProps],
|
|
64
104
|
stateAttributesMapping: _constants.fieldValidityMapping
|
|
@@ -7,7 +7,7 @@ import { BaseUIComponentProps } from "../../utils/types.js";
|
|
|
7
7
|
*
|
|
8
8
|
* Documentation: [Base UI Field](https://base-ui.com/react/components/field)
|
|
9
9
|
*/
|
|
10
|
-
export declare const FieldRoot: React.ForwardRefExoticComponent<FieldRootProps & React.RefAttributes<HTMLDivElement>>;
|
|
10
|
+
export declare const FieldRoot: React.ForwardRefExoticComponent<Omit<FieldRootProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
11
11
|
export interface FieldValidityData {
|
|
12
12
|
state: {
|
|
13
13
|
badInput: boolean;
|
|
@@ -27,6 +27,9 @@ export interface FieldValidityData {
|
|
|
27
27
|
value: unknown;
|
|
28
28
|
initialValue: unknown;
|
|
29
29
|
}
|
|
30
|
+
export interface FieldRootActions {
|
|
31
|
+
validate: () => void;
|
|
32
|
+
}
|
|
30
33
|
export interface FieldRootState {
|
|
31
34
|
/** Whether the component should ignore user interaction. */
|
|
32
35
|
disabled: boolean;
|
|
@@ -87,8 +90,14 @@ export interface FieldRootProps extends BaseUIComponentProps<'div', FieldRoot.St
|
|
|
87
90
|
* Useful when the field state is controlled by an external library.
|
|
88
91
|
*/
|
|
89
92
|
touched?: boolean;
|
|
93
|
+
/**
|
|
94
|
+
* A ref to imperative actions.
|
|
95
|
+
* - `validate`: Validates the field when called.
|
|
96
|
+
*/
|
|
97
|
+
actionsRef?: React.RefObject<FieldRoot.Actions | null>;
|
|
90
98
|
}
|
|
91
99
|
export declare namespace FieldRoot {
|
|
92
100
|
type State = FieldRootState;
|
|
93
101
|
type Props = FieldRootProps;
|
|
102
|
+
type Actions = FieldRootActions;
|
|
94
103
|
}
|
package/field/root/FieldRoot.js
CHANGED
|
@@ -35,6 +35,7 @@ var _jsxRuntime = require("react/jsx-runtime");
|
|
|
35
35
|
invalid: invalidProp,
|
|
36
36
|
dirty: dirtyProp,
|
|
37
37
|
touched: touchedProp,
|
|
38
|
+
actionsRef,
|
|
38
39
|
...elementProps
|
|
39
40
|
} = componentProps;
|
|
40
41
|
const {
|
|
@@ -93,6 +94,13 @@ var _jsxRuntime = require("react/jsx-runtime");
|
|
|
93
94
|
name,
|
|
94
95
|
shouldValidateOnChange
|
|
95
96
|
});
|
|
97
|
+
const handleImperativeValidate = React.useCallback(() => {
|
|
98
|
+
markedDirtyRef.current = true;
|
|
99
|
+
validation.commit(validityData.value);
|
|
100
|
+
}, [validation, validityData]);
|
|
101
|
+
React.useImperativeHandle(actionsRef, () => ({
|
|
102
|
+
validate: handleImperativeValidate
|
|
103
|
+
}), [handleImperativeValidate]);
|
|
96
104
|
const contextValue = React.useMemo(() => ({
|
|
97
105
|
invalid,
|
|
98
106
|
name,
|
package/field/useField.js
CHANGED
|
@@ -54,14 +54,18 @@ function useField(params) {
|
|
|
54
54
|
name,
|
|
55
55
|
controlRef,
|
|
56
56
|
validityData: (0, _getCombinedFieldValidityData.getCombinedFieldValidityData)(validityData, invalid),
|
|
57
|
-
validate() {
|
|
57
|
+
validate(flushSync = true) {
|
|
58
58
|
let nextValue = value;
|
|
59
59
|
if (nextValue === undefined) {
|
|
60
60
|
nextValue = getValue();
|
|
61
61
|
}
|
|
62
62
|
markedDirtyRef.current = true;
|
|
63
|
-
|
|
64
|
-
|
|
63
|
+
if (!flushSync) {
|
|
64
|
+
commit(nextValue);
|
|
65
|
+
} else {
|
|
66
|
+
// Synchronously update the validity state so the submit event can be prevented.
|
|
67
|
+
ReactDOM.flushSync(() => commit(nextValue));
|
|
68
|
+
}
|
|
65
69
|
}
|
|
66
70
|
});
|
|
67
71
|
}, [commit, controlRef, enabled, formRef, getValue, id, invalid, markedDirtyRef, name, validityData, value]);
|
|
@@ -6,7 +6,7 @@ import type { BaseUIComponentProps } from "../../utils/types.js";
|
|
|
6
6
|
*
|
|
7
7
|
* Documentation: [Base UI Fieldset](https://base-ui.com/react/components/fieldset)
|
|
8
8
|
*/
|
|
9
|
-
export declare const FieldsetLegend: React.ForwardRefExoticComponent<FieldsetLegendProps & React.RefAttributes<HTMLDivElement>>;
|
|
9
|
+
export declare const FieldsetLegend: React.ForwardRefExoticComponent<Omit<FieldsetLegendProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
10
10
|
export interface FieldsetLegendState {
|
|
11
11
|
/**
|
|
12
12
|
* Whether the component should ignore user interaction.
|
|
@@ -6,7 +6,7 @@ import type { BaseUIComponentProps } from "../../utils/types.js";
|
|
|
6
6
|
*
|
|
7
7
|
* Documentation: [Base UI Fieldset](https://base-ui.com/react/components/fieldset)
|
|
8
8
|
*/
|
|
9
|
-
export declare const FieldsetRoot: React.ForwardRefExoticComponent<FieldsetRootProps & React.RefAttributes<HTMLElement>>;
|
|
9
|
+
export declare const FieldsetRoot: React.ForwardRefExoticComponent<Omit<FieldsetRootProps, "ref"> & React.RefAttributes<HTMLElement>>;
|
|
10
10
|
export interface FieldsetRootState {
|
|
11
11
|
/**
|
|
12
12
|
* Whether the component should ignore user interaction.
|
|
@@ -162,6 +162,10 @@ function FloatingFocusManager(props) {
|
|
|
162
162
|
const tabbableIndexRef = React.useRef(-1);
|
|
163
163
|
const closeTypeRef = React.useRef('');
|
|
164
164
|
const lastInteractionTypeRef = React.useRef('');
|
|
165
|
+
const beforeGuardRef = React.useRef(null);
|
|
166
|
+
const afterGuardRef = React.useRef(null);
|
|
167
|
+
const mergedBeforeGuardRef = (0, _useMergedRefs.useMergedRefs)(beforeGuardRef, beforeContentFocusGuardRef, portalContext?.beforeInsideRef);
|
|
168
|
+
const mergedAfterGuardRef = (0, _useMergedRefs.useMergedRefs)(afterGuardRef, portalContext?.afterInsideRef);
|
|
165
169
|
const blurTimeout = (0, _useTimeout.useTimeout)();
|
|
166
170
|
const pointerDownTimeout = (0, _useTimeout.useTimeout)();
|
|
167
171
|
const restoreFocusFrame = (0, _useAnimationFrame.useAnimationFrame)();
|
|
@@ -267,7 +271,8 @@ function FloatingFocusManager(props) {
|
|
|
267
271
|
queueMicrotask(() => {
|
|
268
272
|
const nodeId = getNodeId();
|
|
269
273
|
const triggers = store.context.triggerElements;
|
|
270
|
-
const
|
|
274
|
+
const isRelatedFocusGuard = relatedTarget?.hasAttribute((0, _createAttribute.createAttribute)('focus-guard')) && [beforeGuardRef.current, afterGuardRef.current, portalContext?.beforeInsideRef.current, portalContext?.afterInsideRef.current, portalContext?.beforeOutsideRef.current, portalContext?.afterOutsideRef.current, (0, _resolveRef.resolveRef)(previousFocusableElement), (0, _resolveRef.resolveRef)(nextFocusableElement)].includes(relatedTarget);
|
|
275
|
+
const movedToUnrelatedNode = !((0, _utils.contains)(domReference, relatedTarget) || (0, _utils.contains)(floating, relatedTarget) || (0, _utils.contains)(relatedTarget, floating) || (0, _utils.contains)(portalContext?.portalNode, relatedTarget) || relatedTarget != null && triggers.hasElement(relatedTarget) || triggers.hasMatchingElement(trigger => (0, _utils.contains)(trigger, relatedTarget)) || isRelatedFocusGuard || tree && ((0, _utils.getNodeChildren)(tree.nodesRef.current, nodeId).find(node => (0, _utils.contains)(node.context?.elements.floating, relatedTarget) || (0, _utils.contains)(node.context?.elements.domReference, relatedTarget)) || (0, _utils.getNodeAncestors)(tree.nodesRef.current, nodeId).find(node => [node.context?.elements.floating, (0, _utils.getFloatingFocusElement)(node.context?.elements.floating)].includes(relatedTarget) || node.context?.elements.domReference === relatedTarget)));
|
|
271
276
|
if (currentTarget === domReference && floatingFocusElement) {
|
|
272
277
|
handleTabIndex(floatingFocusElement, orderRef);
|
|
273
278
|
}
|
|
@@ -361,11 +366,7 @@ function FloatingFocusManager(props) {
|
|
|
361
366
|
cleanup();
|
|
362
367
|
});
|
|
363
368
|
};
|
|
364
|
-
}, [disabled, domReference, floating, floatingFocusElement, modal, tree, portalContext, store, closeOnFocusOut, restoreFocus, getTabbableContent, isUntrappedTypeableCombobox, getNodeId, orderRef, dataRef, blurTimeout, pointerDownTimeout, restoreFocusFrame]);
|
|
365
|
-
const beforeGuardRef = React.useRef(null);
|
|
366
|
-
const afterGuardRef = React.useRef(null);
|
|
367
|
-
const mergedBeforeGuardRef = (0, _useMergedRefs.useMergedRefs)(beforeGuardRef, beforeContentFocusGuardRef, portalContext?.beforeInsideRef);
|
|
368
|
-
const mergedAfterGuardRef = (0, _useMergedRefs.useMergedRefs)(afterGuardRef, portalContext?.afterInsideRef);
|
|
369
|
+
}, [disabled, domReference, floating, floatingFocusElement, modal, tree, portalContext, store, closeOnFocusOut, restoreFocus, getTabbableContent, isUntrappedTypeableCombobox, getNodeId, orderRef, dataRef, blurTimeout, pointerDownTimeout, restoreFocusFrame, nextFocusableElement, previousFocusableElement]);
|
|
369
370
|
React.useEffect(() => {
|
|
370
371
|
if (disabled || !floating || !open) {
|
|
371
372
|
return undefined;
|
|
@@ -40,9 +40,9 @@ export declare function useFloatingPortalNode(props?: UseFloatingPortalNodeProps
|
|
|
40
40
|
* @see https://floating-ui.com/docs/FloatingPortal
|
|
41
41
|
* @internal
|
|
42
42
|
*/
|
|
43
|
-
export declare const FloatingPortal: React.ForwardRefExoticComponent<FloatingPortal.Props<any> & {
|
|
43
|
+
export declare const FloatingPortal: React.ForwardRefExoticComponent<Omit<FloatingPortal.Props<any> & {
|
|
44
44
|
renderGuards?: boolean;
|
|
45
|
-
} & React.RefAttributes<HTMLDivElement>>;
|
|
45
|
+
}, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
46
46
|
export declare namespace FloatingPortal {
|
|
47
47
|
interface Props<State> extends BaseUIComponentProps<'div', State> {
|
|
48
48
|
/**
|
|
@@ -13,6 +13,7 @@ var ReactDOM = _interopRequireWildcard(require("react-dom"));
|
|
|
13
13
|
var _dom = require("@floating-ui/utils/dom");
|
|
14
14
|
var _useId = require("@base-ui/utils/useId");
|
|
15
15
|
var _useIsoLayoutEffect = require("@base-ui/utils/useIsoLayoutEffect");
|
|
16
|
+
var _useStableCallback = require("@base-ui/utils/useStableCallback");
|
|
16
17
|
var _FocusGuard = require("../../utils/FocusGuard");
|
|
17
18
|
var _utils = require("../utils");
|
|
18
19
|
var _createBaseUIEventDetails = require("../../utils/createBaseUIEventDetails");
|
|
@@ -39,6 +40,14 @@ function useFloatingPortalNode(props = {}) {
|
|
|
39
40
|
const parentPortalNode = portalContext?.portalNode;
|
|
40
41
|
const [containerElement, setContainerElement] = React.useState(null);
|
|
41
42
|
const [portalNode, setPortalNode] = React.useState(null);
|
|
43
|
+
const setPortalNodeRef = (0, _useStableCallback.useStableCallback)(node => {
|
|
44
|
+
if (node !== null) {
|
|
45
|
+
// the useIsoLayoutEffect below watching containerProp / parentPortalNode
|
|
46
|
+
// sets setPortalNode(null) when the container becomes null or changes.
|
|
47
|
+
// So even though the ref callback now ignores null, the portal node still gets cleared.
|
|
48
|
+
setPortalNode(node);
|
|
49
|
+
}
|
|
50
|
+
});
|
|
42
51
|
const containerRef = React.useRef(null);
|
|
43
52
|
(0, _useIsoLayoutEffect.useIsoLayoutEffect)(() => {
|
|
44
53
|
// Wait for the container to be resolved if explicitly `null`.
|
|
@@ -71,7 +80,7 @@ function useFloatingPortalNode(props = {}) {
|
|
|
71
80
|
}
|
|
72
81
|
}, [containerProp, parentPortalNode, uniqueId]);
|
|
73
82
|
const portalElement = (0, _useRenderElement.useRenderElement)('div', componentProps, {
|
|
74
|
-
ref: [ref,
|
|
83
|
+
ref: [ref, setPortalNodeRef],
|
|
75
84
|
state: elementState,
|
|
76
85
|
props: [{
|
|
77
86
|
id: uniqueId,
|
|
@@ -134,7 +143,7 @@ const FloatingPortal = exports.FloatingPortal = /*#__PURE__*/React.forwardRef(fu
|
|
|
134
143
|
// portal has already been focused, either by tabbing into a focus trap
|
|
135
144
|
// element outside or using the mouse.
|
|
136
145
|
function onFocus(event) {
|
|
137
|
-
if (portalNode && (0, _utils.isOutsideEvent)(event)) {
|
|
146
|
+
if (portalNode && event.relatedTarget && (0, _utils.isOutsideEvent)(event)) {
|
|
138
147
|
const focusing = event.type === 'focusin';
|
|
139
148
|
const manageFocus = focusing ? _utils.enableFocusInside : _utils.disableFocusInside;
|
|
140
149
|
manageFocus(portalNode);
|
|
@@ -87,7 +87,7 @@ function useClientPoint(context, props = {}) {
|
|
|
87
87
|
const cleanupListenerRef = React.useRef(null);
|
|
88
88
|
const [pointerType, setPointerType] = React.useState();
|
|
89
89
|
const [reactive, setReactive] = React.useState([]);
|
|
90
|
-
const setReference = (0, _useStableCallback.useStableCallback)((newX, newY) => {
|
|
90
|
+
const setReference = (0, _useStableCallback.useStableCallback)((newX, newY, referenceElement) => {
|
|
91
91
|
if (initialRef.current) {
|
|
92
92
|
return;
|
|
93
93
|
}
|
|
@@ -98,7 +98,7 @@ function useClientPoint(context, props = {}) {
|
|
|
98
98
|
if (dataRef.current.openEvent && !isMouseBasedEvent(dataRef.current.openEvent)) {
|
|
99
99
|
return;
|
|
100
100
|
}
|
|
101
|
-
store.set('positionReference', createVirtualElement(domReference, {
|
|
101
|
+
store.set('positionReference', createVirtualElement(referenceElement ?? domReference, {
|
|
102
102
|
x: newX,
|
|
103
103
|
y: newY,
|
|
104
104
|
axis,
|
|
@@ -111,7 +111,7 @@ function useClientPoint(context, props = {}) {
|
|
|
111
111
|
return;
|
|
112
112
|
}
|
|
113
113
|
if (!open) {
|
|
114
|
-
setReference(event.clientX, event.clientY);
|
|
114
|
+
setReference(event.clientX, event.clientY, event.currentTarget);
|
|
115
115
|
} else if (!cleanupListenerRef.current) {
|
|
116
116
|
// If there's no cleanup, there's no listener, but we want to ensure
|
|
117
117
|
// we add the listener if the cursor landed on the floating element and
|
|
@@ -183,6 +183,7 @@ function useClientPoint(context, props = {}) {
|
|
|
183
183
|
};
|
|
184
184
|
}, [handleReferenceEnterOrMove]);
|
|
185
185
|
return React.useMemo(() => enabled ? {
|
|
186
|
-
reference
|
|
186
|
+
reference,
|
|
187
|
+
trigger: reference
|
|
187
188
|
} : {}, [enabled, reference]);
|
|
188
189
|
}
|
|
@@ -392,6 +392,7 @@ function useDismiss(context, props = {}) {
|
|
|
392
392
|
ancestor.removeEventListener('scroll', onScroll);
|
|
393
393
|
});
|
|
394
394
|
compositionTimeout.clear();
|
|
395
|
+
endedOrStartedInsideRef.current = false;
|
|
395
396
|
};
|
|
396
397
|
}, [dataRef, floatingElement, referenceElement, domReferenceElement, escapeKey, outsidePress, open, onOpenChange, ancestorScroll, enabled, escapeKeyBubbles, outsidePressBubbles, closeOnEscapeKeyDown, closeOnPressOutside, closeOnPressOutsideCapture, handlePointerDown, handleTouchStartCapture, handleTouchMoveCapture, handleTouchEndCapture, trackPointerType, store]);
|
|
397
398
|
React.useEffect(clearInsideReactTree, [outsidePress, clearInsideReactTree]);
|
|
@@ -415,6 +416,12 @@ function useDismiss(context, props = {}) {
|
|
|
415
416
|
}
|
|
416
417
|
endedOrStartedInsideRef.current = true;
|
|
417
418
|
});
|
|
419
|
+
const markPressStartedInsideReactTree = (0, _useStableCallback.useStableCallback)(event => {
|
|
420
|
+
if (!open || !enabled || event.button !== 0) {
|
|
421
|
+
return;
|
|
422
|
+
}
|
|
423
|
+
endedOrStartedInsideRef.current = true;
|
|
424
|
+
});
|
|
418
425
|
const floating = React.useMemo(() => ({
|
|
419
426
|
onKeyDown: closeOnEscapeKeyDown,
|
|
420
427
|
// `onMouseDown` may be blocked if `event.preventDefault()` is called in
|
|
@@ -424,12 +431,18 @@ function useDismiss(context, props = {}) {
|
|
|
424
431
|
onMouseDown: handlePressedInside,
|
|
425
432
|
onMouseUp: handlePressedInside,
|
|
426
433
|
onClickCapture: markInsideReactTree,
|
|
427
|
-
onMouseDownCapture
|
|
428
|
-
|
|
434
|
+
onMouseDownCapture(event) {
|
|
435
|
+
markInsideReactTree();
|
|
436
|
+
markPressStartedInsideReactTree(event);
|
|
437
|
+
},
|
|
438
|
+
onPointerDownCapture(event) {
|
|
439
|
+
markInsideReactTree();
|
|
440
|
+
markPressStartedInsideReactTree(event);
|
|
441
|
+
},
|
|
429
442
|
onMouseUpCapture: markInsideReactTree,
|
|
430
443
|
onTouchEndCapture: markInsideReactTree,
|
|
431
444
|
onTouchMoveCapture: markInsideReactTree
|
|
432
|
-
}), [closeOnEscapeKeyDown, handlePressedInside, markInsideReactTree]);
|
|
445
|
+
}), [closeOnEscapeKeyDown, handlePressedInside, markInsideReactTree, markPressStartedInsideReactTree]);
|
|
433
446
|
return React.useMemo(() => enabled ? {
|
|
434
447
|
reference,
|
|
435
448
|
floating,
|
|
@@ -12,6 +12,11 @@ export interface UseFocusProps {
|
|
|
12
12
|
* @default true
|
|
13
13
|
*/
|
|
14
14
|
visibleOnly?: boolean;
|
|
15
|
+
/**
|
|
16
|
+
* Waits for the specified time before opening.
|
|
17
|
+
* @default undefined
|
|
18
|
+
*/
|
|
19
|
+
delay?: number | (() => number | undefined);
|
|
15
20
|
}
|
|
16
21
|
/**
|
|
17
22
|
* Opens the floating element while the reference element has focus, like CSS
|