@base-ui/react 1.4.1 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +125 -8
- package/README.md +1 -1
- package/accordion/item/AccordionItem.d.ts +4 -0
- package/accordion/item/AccordionItem.js +5 -4
- package/accordion/panel/AccordionPanel.js +29 -51
- package/accordion/root/AccordionRoot.js +5 -6
- package/accordion/trigger/AccordionTrigger.js +3 -4
- package/alert-dialog/handle.d.ts +14 -1
- package/alert-dialog/handle.js +22 -5
- package/alert-dialog/index.d.ts +1 -1
- package/alert-dialog/index.parts.d.ts +2 -3
- package/alert-dialog/index.parts.js +4 -5
- package/alert-dialog/root/AlertDialogRoot.d.ts +7 -7
- package/alert-dialog/root/AlertDialogRoot.js +2 -56
- package/alert-dialog/trigger/AlertDialogTrigger.d.ts +25 -0
- package/alert-dialog/trigger/AlertDialogTrigger.js +15 -0
- package/alert-dialog/trigger/AlertDialogTriggerDataAttributes.d.ts +10 -0
- package/alert-dialog/trigger/AlertDialogTriggerDataAttributes.js +18 -0
- package/autocomplete/root/AutocompleteRoot.js +9 -10
- package/avatar/image/AvatarImage.js +4 -4
- package/checkbox/indicator/CheckboxIndicator.js +2 -2
- package/checkbox/root/CheckboxRoot.js +49 -11
- package/checkbox-group/CheckboxGroup.js +1 -5
- package/collapsible/panel/CollapsiblePanel.js +29 -51
- package/collapsible/panel/useCollapsiblePanel.d.ts +9 -23
- package/collapsible/panel/useCollapsiblePanel.js +308 -268
- package/collapsible/root/CollapsibleRoot.d.ts +1 -1
- package/collapsible/root/CollapsibleRootContext.d.ts +0 -2
- package/collapsible/root/useCollapsibleRoot.d.ts +0 -27
- package/collapsible/root/useCollapsibleRoot.js +2 -64
- package/collapsible/trigger/CollapsibleTrigger.js +5 -6
- package/combobox/arrow/ComboboxArrow.js +1 -1
- package/combobox/backdrop/ComboboxBackdrop.js +1 -1
- package/combobox/chip/ComboboxChip.js +7 -2
- package/combobox/clear/ComboboxClear.d.ts +4 -0
- package/combobox/clear/ComboboxClear.js +1 -0
- package/combobox/clear/ComboboxClearDataAttributes.d.ts +4 -0
- package/combobox/clear/ComboboxClearDataAttributes.js +4 -0
- package/combobox/icon/ComboboxIcon.js +1 -1
- package/combobox/input/ComboboxInput.js +15 -6
- package/combobox/item/ComboboxItem.js +8 -14
- package/combobox/item-indicator/ComboboxItemIndicator.js +1 -2
- package/combobox/root/AriaCombobox.js +61 -28
- package/combobox/store.d.ts +4 -8
- package/combobox/store.js +2 -1
- package/combobox/utils/ComboboxInternalDismissButton.js +2 -3
- package/csp-provider/CSPProvider.js +1 -1
- package/dialog/close/DialogClose.js +6 -6
- package/dialog/popup/DialogPopup.js +9 -4
- package/dialog/root/DialogRoot.d.ts +1 -2
- package/dialog/root/DialogRoot.js +3 -73
- package/dialog/root/DialogRootContext.d.ts +1 -0
- package/dialog/root/DialogRootContext.js +3 -1
- package/dialog/root/useDialogRoot.d.ts +12 -4
- package/dialog/root/useDialogRoot.js +27 -25
- package/dialog/root/useRenderDialogRoot.d.ts +4 -0
- package/dialog/root/useRenderDialogRoot.js +96 -0
- package/dialog/store/DialogHandle.d.ts +1 -1
- package/dialog/store/DialogHandle.js +2 -2
- package/dialog/store/DialogStore.d.ts +88 -1
- package/dialog/store/DialogStore.js +12 -17
- package/dialog/trigger/DialogTrigger.d.ts +1 -1
- package/dialog/trigger/DialogTrigger.js +11 -4
- package/dialog/viewport/DialogViewport.js +4 -3
- package/drawer/popup/DrawerPopup.js +13 -9
- package/drawer/root/DrawerRoot.js +11 -11
- package/drawer/root/DrawerRootContext.d.ts +1 -1
- package/drawer/swipe-area/DrawerSwipeArea.js +6 -5
- package/drawer/viewport/DrawerViewport.js +13 -14
- package/esm/accordion/item/AccordionItem.d.ts +4 -0
- package/esm/accordion/item/AccordionItem.js +5 -4
- package/esm/accordion/panel/AccordionPanel.js +29 -51
- package/esm/accordion/root/AccordionRoot.js +5 -6
- package/esm/accordion/trigger/AccordionTrigger.js +4 -5
- package/esm/alert-dialog/handle.d.ts +14 -1
- package/esm/alert-dialog/handle.js +20 -5
- package/esm/alert-dialog/index.d.ts +1 -1
- package/esm/alert-dialog/index.parts.d.ts +2 -3
- package/esm/alert-dialog/index.parts.js +2 -3
- package/esm/alert-dialog/root/AlertDialogRoot.d.ts +7 -7
- package/esm/alert-dialog/root/AlertDialogRoot.js +2 -55
- package/esm/alert-dialog/trigger/AlertDialogTrigger.d.ts +25 -0
- package/esm/alert-dialog/trigger/AlertDialogTrigger.js +10 -0
- package/esm/alert-dialog/trigger/AlertDialogTriggerDataAttributes.d.ts +10 -0
- package/esm/alert-dialog/trigger/AlertDialogTriggerDataAttributes.js +12 -0
- package/esm/autocomplete/root/AutocompleteRoot.js +9 -10
- package/esm/avatar/image/AvatarImage.js +4 -4
- package/esm/checkbox/indicator/CheckboxIndicator.js +2 -2
- package/esm/checkbox/root/CheckboxRoot.js +49 -11
- package/esm/checkbox-group/CheckboxGroup.js +1 -5
- package/esm/collapsible/panel/CollapsiblePanel.js +29 -51
- package/esm/collapsible/panel/useCollapsiblePanel.d.ts +9 -23
- package/esm/collapsible/panel/useCollapsiblePanel.js +309 -269
- package/esm/collapsible/root/CollapsibleRoot.d.ts +1 -1
- package/esm/collapsible/root/CollapsibleRootContext.d.ts +0 -2
- package/esm/collapsible/root/useCollapsibleRoot.d.ts +0 -27
- package/esm/collapsible/root/useCollapsibleRoot.js +2 -64
- package/esm/collapsible/trigger/CollapsibleTrigger.js +5 -6
- package/esm/combobox/arrow/ComboboxArrow.js +1 -1
- package/esm/combobox/backdrop/ComboboxBackdrop.js +1 -1
- package/esm/combobox/chip/ComboboxChip.js +7 -2
- package/esm/combobox/clear/ComboboxClear.d.ts +4 -0
- package/esm/combobox/clear/ComboboxClear.js +1 -0
- package/esm/combobox/clear/ComboboxClearDataAttributes.d.ts +4 -0
- package/esm/combobox/clear/ComboboxClearDataAttributes.js +4 -0
- package/esm/combobox/icon/ComboboxIcon.js +1 -1
- package/esm/combobox/input/ComboboxInput.js +16 -7
- package/esm/combobox/item/ComboboxItem.js +8 -14
- package/esm/combobox/item-indicator/ComboboxItemIndicator.js +1 -2
- package/esm/combobox/root/AriaCombobox.js +62 -29
- package/esm/combobox/store.d.ts +4 -8
- package/esm/combobox/store.js +2 -1
- package/esm/combobox/utils/ComboboxInternalDismissButton.js +2 -3
- package/esm/csp-provider/CSPProvider.js +1 -1
- package/esm/dialog/close/DialogClose.js +6 -6
- package/esm/dialog/popup/DialogPopup.js +9 -4
- package/esm/dialog/root/DialogRoot.d.ts +1 -2
- package/esm/dialog/root/DialogRoot.js +4 -72
- package/esm/dialog/root/DialogRootContext.d.ts +1 -0
- package/esm/dialog/root/DialogRootContext.js +2 -0
- package/esm/dialog/root/useDialogRoot.d.ts +12 -4
- package/esm/dialog/root/useDialogRoot.js +28 -27
- package/esm/dialog/root/useRenderDialogRoot.d.ts +4 -0
- package/esm/dialog/root/useRenderDialogRoot.js +90 -0
- package/esm/dialog/store/DialogHandle.d.ts +1 -1
- package/esm/dialog/store/DialogHandle.js +2 -2
- package/esm/dialog/store/DialogStore.d.ts +88 -1
- package/esm/dialog/store/DialogStore.js +13 -18
- package/esm/dialog/trigger/DialogTrigger.d.ts +1 -1
- package/esm/dialog/trigger/DialogTrigger.js +12 -5
- package/esm/dialog/viewport/DialogViewport.js +4 -3
- package/esm/drawer/popup/DrawerPopup.js +14 -9
- package/esm/drawer/root/DrawerRoot.js +11 -11
- package/esm/drawer/root/DrawerRootContext.d.ts +1 -1
- package/esm/drawer/swipe-area/DrawerSwipeArea.js +6 -5
- package/esm/drawer/viewport/DrawerViewport.js +13 -14
- package/esm/field/control/FieldControl.js +2 -6
- package/esm/field/item/FieldItem.js +1 -4
- package/esm/field/root/FieldRoot.js +11 -3
- package/esm/field/root/useFieldValidation.d.ts +1 -0
- package/esm/field/root/useFieldValidation.js +23 -20
- package/esm/field/utils/getCombinedFieldValidityData.d.ts +1 -1
- package/esm/field/validity/FieldValidity.d.ts +1 -1
- package/esm/floating-ui-react/components/FloatingDelayGroup.js +3 -3
- package/esm/floating-ui-react/components/FloatingFocusManager.d.ts +1 -1
- package/esm/floating-ui-react/components/FloatingFocusManager.js +20 -8
- package/esm/floating-ui-react/components/FloatingPortal.js +3 -3
- package/esm/floating-ui-react/hooks/useClick.js +83 -74
- package/esm/floating-ui-react/hooks/useClientPoint.js +29 -20
- package/esm/floating-ui-react/hooks/useDismiss.d.ts +1 -1
- package/esm/floating-ui-react/hooks/useDismiss.js +82 -93
- package/esm/floating-ui-react/hooks/useFloating.js +37 -32
- package/esm/floating-ui-react/hooks/useFloatingRootContext.d.ts +1 -1
- package/esm/floating-ui-react/hooks/useFloatingRootContext.js +2 -2
- package/esm/floating-ui-react/hooks/useFocus.js +84 -81
- package/esm/floating-ui-react/hooks/useHover.js +72 -76
- package/esm/floating-ui-react/hooks/useHoverFloatingInteraction.js +49 -44
- package/esm/floating-ui-react/hooks/useHoverInteractionSharedState.js +1 -1
- package/esm/floating-ui-react/hooks/useHoverReferenceInteraction.d.ts +7 -2
- package/esm/floating-ui-react/hooks/useHoverReferenceInteraction.js +44 -39
- package/esm/floating-ui-react/hooks/useHoverShared.d.ts +2 -1
- package/esm/floating-ui-react/hooks/useHoverShared.js +4 -0
- package/esm/floating-ui-react/hooks/useListNavigation.d.ts +1 -3
- package/esm/floating-ui-react/hooks/useListNavigation.js +83 -74
- package/esm/floating-ui-react/hooks/useSyncedFloatingRootContext.d.ts +9 -6
- package/esm/floating-ui-react/hooks/useSyncedFloatingRootContext.js +25 -20
- package/esm/floating-ui-react/hooks/useTypeahead.d.ts +2 -2
- package/esm/floating-ui-react/hooks/useTypeahead.js +33 -52
- package/esm/floating-ui-react/index.d.ts +0 -2
- package/esm/floating-ui-react/index.js +0 -2
- package/esm/floating-ui-react/types.d.ts +2 -7
- package/esm/floating-ui-react/utils/composite.js +2 -0
- package/esm/floating-ui-react/utils/enqueueFocus.d.ts +1 -1
- package/esm/floating-ui-react/utils/enqueueFocus.js +10 -7
- package/esm/floating-ui-react/utils/getEmptyRootContext.js +1 -1
- package/esm/form/Form.js +2 -2
- package/esm/index.js +1 -1
- package/esm/internals/composite/composite.d.ts +0 -1
- package/esm/internals/composite/composite.js +1 -2
- package/esm/internals/composite/root/useCompositeRoot.js +2 -2
- package/esm/internals/createBaseUIEventDetails.d.ts +2 -0
- package/esm/internals/csp-context/index.d.ts +2 -0
- package/esm/internals/csp-context/index.js +1 -0
- package/esm/internals/field-register-control/index.d.ts +0 -1
- package/esm/internals/field-register-control/useFieldControlRegistration.d.ts +2 -1
- package/esm/internals/field-register-control/useFieldControlRegistration.js +11 -14
- package/esm/internals/field-register-control/useRegisterFieldControl.d.ts +1 -4
- package/esm/internals/field-register-control/useRegisterFieldControl.js +6 -11
- package/esm/internals/field-root-context/FieldRootContext.d.ts +1 -0
- package/esm/internals/field-root-context/FieldRootContext.js +3 -2
- package/esm/internals/form-context/FormContext.d.ts +5 -1
- package/esm/internals/reason-parts.d.ts +2 -0
- package/esm/internals/reason-parts.js +2 -0
- package/esm/internals/types.d.ts +1 -0
- package/esm/internals/use-button/useButton.js +4 -4
- package/esm/internals/usePressAndHold.js +2 -2
- package/esm/internals/useRenderElement.js +2 -0
- package/esm/menu/arrow/MenuArrow.js +1 -1
- package/esm/menu/backdrop/MenuBackdrop.js +1 -1
- package/esm/menu/checkbox-item/MenuCheckboxItem.js +5 -7
- package/esm/menu/group/MenuGroup.js +1 -4
- package/esm/menu/group/MenuGroupContext.d.ts +1 -3
- package/esm/menu/group/MenuGroupContext.js +1 -1
- package/esm/menu/group-label/MenuGroupLabel.js +4 -6
- package/esm/menu/link-item/MenuLinkItem.js +2 -2
- package/esm/menu/popup/MenuPopup.js +5 -5
- package/esm/menu/radio-group/MenuRadioGroup.js +11 -5
- package/esm/menu/radio-item/MenuRadioItem.js +5 -7
- package/esm/menu/root/MenuRoot.js +63 -68
- package/esm/menu/store/MenuHandle.js +1 -1
- package/esm/menu/store/MenuStore.d.ts +87 -0
- package/esm/menu/submenu-trigger/MenuSubmenuTrigger.js +8 -5
- package/esm/menu/trigger/MenuTrigger.js +13 -10
- package/esm/menu/viewport/MenuViewport.d.ts +2 -2
- package/esm/menu/viewport/MenuViewport.js +2 -2
- package/esm/navigation-menu/arrow/NavigationMenuArrow.js +1 -1
- package/esm/navigation-menu/backdrop/NavigationMenuBackdrop.js +1 -1
- package/esm/navigation-menu/content/NavigationMenuContent.js +8 -5
- package/esm/navigation-menu/icon/NavigationMenuIcon.js +1 -1
- package/esm/navigation-menu/item/NavigationMenuItem.js +2 -2
- package/esm/navigation-menu/list/NavigationMenuList.js +1 -1
- package/esm/navigation-menu/popup/NavigationMenuPopup.js +2 -2
- package/esm/navigation-menu/root/NavigationMenuRoot.js +1 -3
- package/esm/navigation-menu/trigger/NavigationMenuTrigger.js +24 -17
- package/esm/navigation-menu/utils/isOutsideMenuEvent.d.ts +0 -1
- package/esm/navigation-menu/utils/isOutsideMenuEvent.js +1 -5
- package/esm/navigation-menu/viewport/NavigationMenuViewport.js +2 -3
- package/esm/number-field/input/NumberFieldInput.js +3 -5
- package/esm/number-field/root/NumberFieldRoot.js +5 -2
- package/esm/number-field/scrub-area/NumberFieldScrubArea.js +7 -3
- package/esm/otp-field/input/OTPFieldInput.js +43 -29
- package/esm/otp-field/root/OTPFieldRoot.d.ts +17 -8
- package/esm/otp-field/root/OTPFieldRoot.js +33 -33
- package/esm/otp-field/root/OTPFieldRootContext.d.ts +1 -1
- package/esm/otp-field/utils/otp.d.ts +5 -4
- package/esm/otp-field/utils/otp.js +23 -12
- package/esm/popover/arrow/PopoverArrow.js +1 -1
- package/esm/popover/backdrop/PopoverBackdrop.js +1 -1
- package/esm/popover/close/PopoverClose.js +2 -2
- package/esm/popover/description/PopoverDescription.js +1 -7
- package/esm/popover/popup/PopoverPopup.d.ts +1 -1
- package/esm/popover/popup/PopoverPopup.js +16 -10
- package/esm/popover/popup/PopoverPopupDataAttributes.d.ts +1 -1
- package/esm/popover/popup/PopoverPopupDataAttributes.js +1 -1
- package/esm/popover/positioner/PopoverPositioner.js +5 -5
- package/esm/popover/root/PopoverRoot.d.ts +1 -1
- package/esm/popover/root/PopoverRoot.js +42 -47
- package/esm/popover/store/PopoverHandle.js +1 -1
- package/esm/popover/store/PopoverStore.d.ts +91 -4
- package/esm/popover/store/PopoverStore.js +17 -18
- package/esm/popover/title/PopoverTitle.js +1 -7
- package/esm/popover/trigger/PopoverTrigger.js +24 -17
- package/esm/popover/viewport/PopoverViewport.d.ts +3 -3
- package/esm/popover/viewport/PopoverViewport.js +2 -2
- package/esm/popover/viewport/PopoverViewportDataAttributes.d.ts +1 -1
- package/esm/popover/viewport/PopoverViewportDataAttributes.js +1 -1
- package/esm/preview-card/positioner/PreviewCardPositioner.js +11 -1
- package/esm/preview-card/root/PreviewCardRoot.d.ts +1 -1
- package/esm/preview-card/root/PreviewCardRoot.js +32 -22
- package/esm/preview-card/store/PreviewCardHandle.js +1 -1
- package/esm/preview-card/store/PreviewCardStore.d.ts +90 -2
- package/esm/preview-card/store/PreviewCardStore.js +19 -31
- package/esm/preview-card/trigger/PreviewCardTrigger.js +6 -3
- package/esm/preview-card/viewport/PreviewCardViewport.d.ts +2 -2
- package/esm/preview-card/viewport/PreviewCardViewport.js +2 -2
- package/esm/preview-card/viewport/PreviewCardViewportDataAttributes.d.ts +2 -2
- package/esm/preview-card/viewport/PreviewCardViewportDataAttributes.js +2 -2
- package/esm/progress/indicator/ProgressIndicator.js +6 -11
- package/esm/progress/root/ProgressRoot.d.ts +1 -1
- package/esm/radio/root/RadioRoot.js +7 -3
- package/esm/radio-group/RadioGroup.js +4 -11
- package/esm/radio-group/RadioGroupContext.d.ts +0 -1
- package/esm/scroll-area/content/ScrollAreaContent.js +4 -4
- package/esm/scroll-area/root/ScrollAreaRoot.js +1 -1
- package/esm/scroll-area/scrollbar/ScrollAreaScrollbar.js +16 -20
- package/esm/scroll-area/viewport/ScrollAreaViewport.js +6 -10
- package/esm/select/arrow/SelectArrow.js +1 -1
- package/esm/select/backdrop/SelectBackdrop.js +1 -1
- package/esm/select/group/SelectGroup.js +1 -1
- package/esm/select/group-label/SelectGroupLabel.js +2 -2
- package/esm/select/icon/SelectIcon.js +1 -1
- package/esm/select/item/SelectItem.js +46 -32
- package/esm/select/item/SelectItemContext.d.ts +1 -1
- package/esm/select/item-indicator/SelectItemIndicator.js +1 -2
- package/esm/select/item-text/SelectItemText.js +9 -6
- package/esm/select/list/SelectList.js +1 -1
- package/esm/select/popup/SelectPopup.js +8 -3
- package/esm/select/positioner/SelectPositioner.js +3 -0
- package/esm/select/root/SelectRoot.js +46 -40
- package/esm/select/root/SelectRootContext.d.ts +4 -5
- package/esm/select/store.d.ts +3 -0
- package/esm/select/store.js +1 -0
- package/esm/select/trigger/SelectTrigger.d.ts +5 -0
- package/esm/select/trigger/SelectTrigger.js +19 -33
- package/esm/select/trigger/SelectTriggerDataAttributes.d.ts +5 -0
- package/esm/select/trigger/SelectTriggerDataAttributes.js +5 -0
- package/esm/slider/control/SliderControl.js +10 -12
- package/esm/slider/root/SliderRoot.js +1 -4
- package/esm/slider/thumb/SliderThumb.js +32 -30
- package/esm/slider/value/SliderValue.js +7 -15
- package/esm/switch/root/SwitchRoot.js +10 -10
- package/esm/switch/thumb/SwitchThumb.js +1 -9
- package/esm/tabs/indicator/TabsIndicator.js +14 -19
- package/esm/tabs/list/TabsList.js +4 -10
- package/esm/tabs/list/TabsListContext.d.ts +2 -1
- package/esm/tabs/panel/TabsPanel.js +1 -1
- package/esm/tabs/root/TabsRoot.d.ts +16 -1
- package/esm/tabs/root/TabsRoot.js +73 -25
- package/esm/tabs/root/TabsRootContext.d.ts +0 -2
- package/esm/toast/provider/ToastProvider.js +1 -1
- package/esm/toast/root/ToastRoot.d.ts +1 -1
- package/esm/toast/root/ToastRoot.js +108 -131
- package/esm/toast/root/ToastRootDataAttributes.d.ts +1 -1
- package/esm/toast/root/ToastRootDataAttributes.js +1 -1
- package/esm/toast/store.d.ts +9 -1
- package/esm/toast/store.js +19 -13
- package/esm/toast/useToastManager.d.ts +1 -1
- package/esm/toast/viewport/ToastViewport.js +1 -1
- package/esm/toggle/Toggle.js +5 -9
- package/esm/toggle-group/ToggleGroup.d.ts +2 -2
- package/esm/toggle-group/ToggleGroup.js +6 -13
- package/esm/toolbar/link/ToolbarLink.d.ts +1 -1
- package/esm/toolbar/link/ToolbarLink.js +1 -2
- package/esm/tooltip/arrow/TooltipArrow.js +3 -3
- package/esm/tooltip/popup/TooltipPopup.js +5 -4
- package/esm/tooltip/root/TooltipRoot.js +35 -26
- package/esm/tooltip/store/TooltipHandle.js +1 -1
- package/esm/tooltip/store/TooltipStore.d.ts +90 -2
- package/esm/tooltip/store/TooltipStore.js +18 -31
- package/esm/tooltip/trigger/TooltipTrigger.js +151 -20
- package/esm/tooltip/viewport/TooltipViewport.d.ts +2 -2
- package/esm/tooltip/viewport/TooltipViewport.js +2 -2
- package/esm/tooltip/viewport/TooltipViewportDataAttributes.d.ts +1 -1
- package/esm/tooltip/viewport/TooltipViewportDataAttributes.js +1 -1
- package/esm/unstable-use-media-query/index.js +1 -1
- package/esm/utils/popups/index.d.ts +1 -0
- package/esm/utils/popups/index.js +1 -0
- package/esm/utils/popups/inlineRect.d.ts +15 -0
- package/esm/utils/popups/inlineRect.js +191 -0
- package/esm/utils/popups/popupStoreUtils.d.ts +28 -10
- package/esm/utils/popups/popupStoreUtils.js +105 -20
- package/esm/utils/popups/popupTriggerMap.js +2 -0
- package/esm/utils/popups/store.d.ts +15 -2
- package/esm/utils/popups/store.js +38 -2
- package/esm/utils/popups/useTriggerFocusGuards.js +4 -5
- package/esm/utils/useAnchorPositioning.d.ts +5 -0
- package/esm/utils/useAnchorPositioning.js +12 -9
- package/esm/utils/useOpenInteractionType.d.ts +4 -0
- package/esm/utils/useOpenInteractionType.js +23 -18
- package/field/control/FieldControl.js +2 -6
- package/field/item/FieldItem.js +1 -4
- package/field/root/FieldRoot.js +11 -3
- package/field/root/useFieldValidation.d.ts +1 -0
- package/field/root/useFieldValidation.js +23 -20
- package/field/utils/getCombinedFieldValidityData.d.ts +1 -1
- package/field/validity/FieldValidity.d.ts +1 -1
- package/floating-ui-react/components/FloatingDelayGroup.js +3 -3
- package/floating-ui-react/components/FloatingFocusManager.d.ts +1 -1
- package/floating-ui-react/components/FloatingFocusManager.js +20 -8
- package/floating-ui-react/components/FloatingPortal.js +3 -3
- package/floating-ui-react/hooks/useClick.js +82 -73
- package/floating-ui-react/hooks/useClientPoint.js +29 -20
- package/floating-ui-react/hooks/useDismiss.d.ts +1 -1
- package/floating-ui-react/hooks/useDismiss.js +82 -92
- package/floating-ui-react/hooks/useFloating.js +36 -32
- package/floating-ui-react/hooks/useFloatingRootContext.d.ts +1 -1
- package/floating-ui-react/hooks/useFloatingRootContext.js +2 -2
- package/floating-ui-react/hooks/useFocus.js +84 -81
- package/floating-ui-react/hooks/useHover.js +74 -78
- package/floating-ui-react/hooks/useHoverFloatingInteraction.js +48 -43
- package/floating-ui-react/hooks/useHoverInteractionSharedState.js +1 -1
- package/floating-ui-react/hooks/useHoverReferenceInteraction.d.ts +7 -2
- package/floating-ui-react/hooks/useHoverReferenceInteraction.js +43 -38
- package/floating-ui-react/hooks/useHoverShared.d.ts +2 -1
- package/floating-ui-react/hooks/useHoverShared.js +11 -0
- package/floating-ui-react/hooks/useListNavigation.d.ts +1 -3
- package/floating-ui-react/hooks/useListNavigation.js +83 -74
- package/floating-ui-react/hooks/useSyncedFloatingRootContext.d.ts +9 -6
- package/floating-ui-react/hooks/useSyncedFloatingRootContext.js +26 -20
- package/floating-ui-react/hooks/useTypeahead.d.ts +2 -2
- package/floating-ui-react/hooks/useTypeahead.js +33 -52
- package/floating-ui-react/index.d.ts +0 -2
- package/floating-ui-react/index.js +0 -14
- package/floating-ui-react/types.d.ts +2 -7
- package/floating-ui-react/utils/composite.js +2 -0
- package/floating-ui-react/utils/enqueueFocus.d.ts +1 -1
- package/floating-ui-react/utils/enqueueFocus.js +10 -7
- package/floating-ui-react/utils/getEmptyRootContext.js +1 -1
- package/form/Form.js +2 -2
- package/index.js +1 -1
- package/internals/composite/composite.d.ts +0 -1
- package/internals/composite/composite.js +2 -3
- package/internals/composite/root/useCompositeRoot.js +1 -1
- package/internals/createBaseUIEventDetails.d.ts +2 -0
- package/internals/csp-context/index.d.ts +2 -0
- package/internals/csp-context/index.js +18 -0
- package/internals/field-register-control/index.d.ts +0 -1
- package/internals/field-register-control/useFieldControlRegistration.d.ts +2 -1
- package/internals/field-register-control/useFieldControlRegistration.js +11 -14
- package/internals/field-register-control/useRegisterFieldControl.d.ts +1 -4
- package/internals/field-register-control/useRegisterFieldControl.js +6 -11
- package/internals/field-root-context/FieldRootContext.d.ts +1 -0
- package/internals/field-root-context/FieldRootContext.js +4 -3
- package/internals/form-context/FormContext.d.ts +5 -1
- package/internals/reason-parts.d.ts +2 -0
- package/internals/reason-parts.js +3 -1
- package/internals/types.d.ts +1 -0
- package/internals/use-button/useButton.js +4 -4
- package/internals/usePressAndHold.js +2 -2
- package/internals/useRenderElement.js +2 -0
- package/menu/arrow/MenuArrow.js +1 -1
- package/menu/backdrop/MenuBackdrop.js +1 -1
- package/menu/checkbox-item/MenuCheckboxItem.js +5 -7
- package/menu/group/MenuGroup.js +1 -4
- package/menu/group/MenuGroupContext.d.ts +1 -3
- package/menu/group/MenuGroupContext.js +1 -1
- package/menu/group-label/MenuGroupLabel.js +4 -6
- package/menu/link-item/MenuLinkItem.js +2 -2
- package/menu/popup/MenuPopup.js +5 -5
- package/menu/radio-group/MenuRadioGroup.js +11 -5
- package/menu/radio-item/MenuRadioItem.js +5 -7
- package/menu/root/MenuRoot.js +60 -65
- package/menu/store/MenuHandle.js +1 -1
- package/menu/store/MenuStore.d.ts +87 -0
- package/menu/submenu-trigger/MenuSubmenuTrigger.js +7 -4
- package/menu/trigger/MenuTrigger.js +12 -9
- package/menu/viewport/MenuViewport.d.ts +2 -2
- package/menu/viewport/MenuViewport.js +2 -2
- package/navigation-menu/arrow/NavigationMenuArrow.js +1 -1
- package/navigation-menu/backdrop/NavigationMenuBackdrop.js +1 -1
- package/navigation-menu/content/NavigationMenuContent.js +8 -5
- package/navigation-menu/icon/NavigationMenuIcon.js +1 -1
- package/navigation-menu/item/NavigationMenuItem.js +2 -2
- package/navigation-menu/list/NavigationMenuList.js +1 -1
- package/navigation-menu/popup/NavigationMenuPopup.js +2 -2
- package/navigation-menu/root/NavigationMenuRoot.js +1 -3
- package/navigation-menu/trigger/NavigationMenuTrigger.js +23 -16
- package/navigation-menu/utils/isOutsideMenuEvent.d.ts +0 -1
- package/navigation-menu/utils/isOutsideMenuEvent.js +1 -5
- package/navigation-menu/viewport/NavigationMenuViewport.js +2 -3
- package/number-field/input/NumberFieldInput.js +3 -5
- package/number-field/root/NumberFieldRoot.js +5 -2
- package/number-field/scrub-area/NumberFieldScrubArea.js +7 -3
- package/otp-field/input/OTPFieldInput.js +42 -28
- package/otp-field/root/OTPFieldRoot.d.ts +17 -8
- package/otp-field/root/OTPFieldRoot.js +32 -32
- package/otp-field/root/OTPFieldRootContext.d.ts +1 -1
- package/otp-field/utils/otp.d.ts +5 -4
- package/otp-field/utils/otp.js +24 -12
- package/package.json +331 -317
- package/popover/arrow/PopoverArrow.js +1 -1
- package/popover/backdrop/PopoverBackdrop.js +1 -1
- package/popover/close/PopoverClose.js +2 -2
- package/popover/description/PopoverDescription.js +1 -7
- package/popover/popup/PopoverPopup.d.ts +1 -1
- package/popover/popup/PopoverPopup.js +16 -10
- package/popover/popup/PopoverPopupDataAttributes.d.ts +1 -1
- package/popover/popup/PopoverPopupDataAttributes.js +1 -1
- package/popover/positioner/PopoverPositioner.js +5 -5
- package/popover/root/PopoverRoot.d.ts +1 -1
- package/popover/root/PopoverRoot.js +39 -44
- package/popover/store/PopoverHandle.js +1 -1
- package/popover/store/PopoverStore.d.ts +91 -4
- package/popover/store/PopoverStore.js +16 -19
- package/popover/title/PopoverTitle.js +1 -7
- package/popover/trigger/PopoverTrigger.js +23 -16
- package/popover/viewport/PopoverViewport.d.ts +3 -3
- package/popover/viewport/PopoverViewport.js +2 -2
- package/popover/viewport/PopoverViewportDataAttributes.d.ts +1 -1
- package/popover/viewport/PopoverViewportDataAttributes.js +1 -1
- package/preview-card/positioner/PreviewCardPositioner.js +11 -1
- package/preview-card/root/PreviewCardRoot.d.ts +1 -1
- package/preview-card/root/PreviewCardRoot.js +30 -20
- package/preview-card/store/PreviewCardHandle.js +1 -1
- package/preview-card/store/PreviewCardStore.d.ts +90 -2
- package/preview-card/store/PreviewCardStore.js +18 -30
- package/preview-card/trigger/PreviewCardTrigger.js +5 -2
- package/preview-card/viewport/PreviewCardViewport.d.ts +2 -2
- package/preview-card/viewport/PreviewCardViewport.js +2 -2
- package/preview-card/viewport/PreviewCardViewportDataAttributes.d.ts +2 -2
- package/preview-card/viewport/PreviewCardViewportDataAttributes.js +2 -2
- package/progress/indicator/ProgressIndicator.js +6 -11
- package/progress/root/ProgressRoot.d.ts +1 -1
- package/radio/root/RadioRoot.js +7 -3
- package/radio-group/RadioGroup.js +4 -11
- package/radio-group/RadioGroupContext.d.ts +0 -1
- package/scroll-area/content/ScrollAreaContent.js +4 -4
- package/scroll-area/root/ScrollAreaRoot.js +1 -1
- package/scroll-area/scrollbar/ScrollAreaScrollbar.js +16 -20
- package/scroll-area/viewport/ScrollAreaViewport.js +6 -10
- package/select/arrow/SelectArrow.js +1 -1
- package/select/backdrop/SelectBackdrop.js +1 -1
- package/select/group/SelectGroup.js +1 -1
- package/select/group-label/SelectGroupLabel.js +2 -2
- package/select/icon/SelectIcon.js +1 -1
- package/select/item/SelectItem.js +46 -32
- package/select/item/SelectItemContext.d.ts +1 -1
- package/select/item-indicator/SelectItemIndicator.js +1 -2
- package/select/item-text/SelectItemText.js +9 -6
- package/select/list/SelectList.js +1 -1
- package/select/popup/SelectPopup.js +8 -3
- package/select/positioner/SelectPositioner.js +3 -0
- package/select/root/SelectRoot.js +45 -39
- package/select/root/SelectRootContext.d.ts +4 -5
- package/select/store.d.ts +3 -0
- package/select/store.js +1 -0
- package/select/trigger/SelectTrigger.d.ts +5 -0
- package/select/trigger/SelectTrigger.js +19 -33
- package/select/trigger/SelectTriggerDataAttributes.d.ts +5 -0
- package/select/trigger/SelectTriggerDataAttributes.js +5 -0
- package/slider/control/SliderControl.js +9 -11
- package/slider/root/SliderRoot.js +1 -4
- package/slider/thumb/SliderThumb.js +32 -30
- package/slider/value/SliderValue.js +7 -15
- package/switch/root/SwitchRoot.js +10 -10
- package/switch/thumb/SwitchThumb.js +1 -9
- package/tabs/indicator/TabsIndicator.js +14 -19
- package/tabs/list/TabsList.js +4 -10
- package/tabs/list/TabsListContext.d.ts +2 -1
- package/tabs/panel/TabsPanel.js +1 -1
- package/tabs/root/TabsRoot.d.ts +16 -1
- package/tabs/root/TabsRoot.js +71 -24
- package/tabs/root/TabsRootContext.d.ts +0 -2
- package/toast/provider/ToastProvider.js +1 -1
- package/toast/root/ToastRoot.d.ts +1 -1
- package/toast/root/ToastRoot.js +110 -133
- package/toast/root/ToastRootDataAttributes.d.ts +1 -1
- package/toast/root/ToastRootDataAttributes.js +1 -1
- package/toast/store.d.ts +9 -1
- package/toast/store.js +18 -12
- package/toast/useToastManager.d.ts +1 -1
- package/toast/viewport/ToastViewport.js +1 -1
- package/toggle/Toggle.js +5 -9
- package/toggle-group/ToggleGroup.d.ts +2 -2
- package/toggle-group/ToggleGroup.js +6 -13
- package/toolbar/link/ToolbarLink.d.ts +1 -1
- package/toolbar/link/ToolbarLink.js +1 -2
- package/tooltip/arrow/TooltipArrow.js +3 -3
- package/tooltip/popup/TooltipPopup.js +5 -4
- package/tooltip/root/TooltipRoot.js +32 -23
- package/tooltip/store/TooltipHandle.js +1 -1
- package/tooltip/store/TooltipStore.d.ts +90 -2
- package/tooltip/store/TooltipStore.js +17 -30
- package/tooltip/trigger/TooltipTrigger.js +152 -20
- package/tooltip/viewport/TooltipViewport.d.ts +2 -2
- package/tooltip/viewport/TooltipViewport.js +2 -2
- package/tooltip/viewport/TooltipViewportDataAttributes.d.ts +1 -1
- package/tooltip/viewport/TooltipViewportDataAttributes.js +1 -1
- package/unstable-use-media-query/index.js +1 -1
- package/utils/popups/index.d.ts +1 -0
- package/utils/popups/index.js +11 -0
- package/utils/popups/inlineRect.d.ts +15 -0
- package/utils/popups/inlineRect.js +198 -0
- package/utils/popups/popupStoreUtils.d.ts +28 -10
- package/utils/popups/popupStoreUtils.js +110 -20
- package/utils/popups/popupTriggerMap.js +2 -0
- package/utils/popups/store.d.ts +15 -2
- package/utils/popups/store.js +39 -2
- package/utils/popups/useTriggerFocusGuards.js +4 -5
- package/utils/useAnchorPositioning.d.ts +5 -0
- package/utils/useAnchorPositioning.js +12 -9
- package/utils/useOpenInteractionType.d.ts +4 -0
- package/utils/useOpenInteractionType.js +24 -17
- package/checkbox-group/index.parts.d.ts +0 -1
- package/checkbox-group/index.parts.js +0 -12
- package/esm/checkbox-group/index.parts.d.ts +0 -1
- package/esm/checkbox-group/index.parts.js +0 -1
- package/esm/floating-ui-react/hooks/useInteractions.d.ts +0 -20
- package/esm/floating-ui-react/hooks/useInteractions.js +0 -88
- package/esm/floating-ui-react/hooks/useRole.d.ts +0 -17
- package/esm/floating-ui-react/hooks/useRole.js +0 -113
- package/floating-ui-react/hooks/useInteractions.d.ts +0 -20
- package/floating-ui-react/hooks/useInteractions.js +0 -95
- package/floating-ui-react/hooks/useRole.d.ts +0 -17
- package/floating-ui-react/hooks/useRole.js +0 -120
- /package/{csp-provider → esm/internals/csp-context}/CSPContext.d.ts +0 -0
- /package/esm/{csp-provider → internals/csp-context}/CSPContext.js +0 -0
- /package/{esm/csp-provider → internals/csp-context}/CSPContext.d.ts +0 -0
- /package/{csp-provider → internals/csp-context}/CSPContext.js +0 -0
|
@@ -2,12 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
import _formatErrorMessage from "@base-ui/utils/formatErrorMessage";
|
|
4
4
|
import * as React from 'react';
|
|
5
|
+
import { fastComponentRef } from '@base-ui/utils/fastHooks';
|
|
5
6
|
import { useIsoLayoutEffect } from '@base-ui/utils/useIsoLayoutEffect';
|
|
6
7
|
import { usePreviewCardRootContext } from "../root/PreviewCardContext.js";
|
|
7
8
|
import { triggerOpenStateMapping } from "../../utils/popupStateMapping.js";
|
|
8
9
|
import { useRenderElement } from "../../internals/useRenderElement.js";
|
|
9
10
|
import { useBaseUiId } from "../../internals/useBaseUiId.js";
|
|
10
|
-
import { useTriggerDataForwarding } from "../../utils/popups/index.js";
|
|
11
|
+
import { getInlineRectTriggerProps, useTriggerDataForwarding } from "../../utils/popups/index.js";
|
|
11
12
|
import { CLOSE_DELAY, OPEN_DELAY } from "../utils/constants.js";
|
|
12
13
|
import { safePolygon, useFocus, useHoverReferenceInteraction } from "../../floating-ui-react/index.js";
|
|
13
14
|
|
|
@@ -17,7 +18,7 @@ import { safePolygon, useFocus, useHoverReferenceInteraction } from "../../float
|
|
|
17
18
|
*
|
|
18
19
|
* Documentation: [Base UI Preview Card](https://base-ui.com/react/components/preview-card)
|
|
19
20
|
*/
|
|
20
|
-
export const PreviewCardTrigger =
|
|
21
|
+
export const PreviewCardTrigger = fastComponentRef(function PreviewCardTrigger(componentProps, forwardedRef) {
|
|
21
22
|
const {
|
|
22
23
|
render,
|
|
23
24
|
className,
|
|
@@ -38,6 +39,7 @@ export const PreviewCardTrigger = /*#__PURE__*/React.forwardRef(function Preview
|
|
|
38
39
|
const isTriggerActive = store.useState('isTriggerActive', thisTriggerId);
|
|
39
40
|
const isOpenedByThisTrigger = store.useState('isOpenedByTrigger', thisTriggerId);
|
|
40
41
|
const floatingRootContext = store.useState('floatingRootContext');
|
|
42
|
+
const inlineRectCoordsRef = store.context.inlineRectCoordsRef;
|
|
41
43
|
const triggerElementRef = React.useRef(null);
|
|
42
44
|
const delayWithDefault = delay ?? OPEN_DELAY;
|
|
43
45
|
const closeDelayWithDefault = closeDelay ?? CLOSE_DELAY;
|
|
@@ -71,10 +73,11 @@ export const PreviewCardTrigger = /*#__PURE__*/React.forwardRef(function Preview
|
|
|
71
73
|
open: isOpenedByThisTrigger
|
|
72
74
|
};
|
|
73
75
|
const rootTriggerProps = store.useState('triggerProps', isMountedByThisTrigger);
|
|
76
|
+
const inlineRectTriggerProps = getInlineRectTriggerProps(inlineRectCoordsRef, isOpenedByThisTrigger);
|
|
74
77
|
const element = useRenderElement('a', componentProps, {
|
|
75
78
|
state,
|
|
76
79
|
ref: [forwardedRef, registerTrigger, triggerElementRef],
|
|
77
|
-
props: [hoverProps, focusProps.reference, rootTriggerProps, {
|
|
80
|
+
props: [hoverProps, focusProps.reference, rootTriggerProps, inlineRectTriggerProps, {
|
|
78
81
|
id: thisTriggerId
|
|
79
82
|
}, elementProps],
|
|
80
83
|
stateAttributesMapping: triggerOpenStateMapping
|
|
@@ -2,8 +2,8 @@ import * as React from 'react';
|
|
|
2
2
|
import { BaseUIComponentProps } from "../../internals/types.js";
|
|
3
3
|
/**
|
|
4
4
|
* A viewport for displaying content transitions.
|
|
5
|
-
* This component is only required if one popup can be opened by multiple triggers, its content
|
|
6
|
-
* and switching between them is animated.
|
|
5
|
+
* This component is only required if one popup can be opened by multiple triggers, its content
|
|
6
|
+
* changes based on the trigger, and switching between them is animated.
|
|
7
7
|
* Renders a `<div>` element.
|
|
8
8
|
*
|
|
9
9
|
* Documentation: [Base UI Preview Card](https://base-ui.com/react/components/preview-card)
|
|
@@ -14,8 +14,8 @@ const stateAttributesMapping = {
|
|
|
14
14
|
|
|
15
15
|
/**
|
|
16
16
|
* A viewport for displaying content transitions.
|
|
17
|
-
* This component is only required if one popup can be opened by multiple triggers, its content
|
|
18
|
-
* and switching between them is animated.
|
|
17
|
+
* This component is only required if one popup can be opened by multiple triggers, its content
|
|
18
|
+
* changes based on the trigger, and switching between them is animated.
|
|
19
19
|
* Renders a `<div>` element.
|
|
20
20
|
*
|
|
21
21
|
* Documentation: [Base UI Preview Card](https://base-ui.com/react/components/preview-card)
|
|
@@ -11,7 +11,7 @@ export declare enum PreviewCardViewportDataAttributes {
|
|
|
11
11
|
* Indicates the direction from which the popup was activated.
|
|
12
12
|
* This can be used to create directional animations based on how the popup was triggered.
|
|
13
13
|
* Contains space-separated values for both horizontal and vertical axes.
|
|
14
|
-
* @type {`${'left' | 'right'} {'top' | 'bottom'}`}
|
|
14
|
+
* @type {`${'left' | 'right'} ${'top' | 'bottom'}`}
|
|
15
15
|
*/
|
|
16
16
|
activationDirection = "data-activation-direction",
|
|
17
17
|
/**
|
|
@@ -20,7 +20,7 @@ export declare enum PreviewCardViewportDataAttributes {
|
|
|
20
20
|
transitioning = "data-transitioning",
|
|
21
21
|
/**
|
|
22
22
|
* Present if animations should be instant.
|
|
23
|
-
* @type {'
|
|
23
|
+
* @type {'dismiss' | 'focus'}
|
|
24
24
|
*/
|
|
25
25
|
instant = "data-instant",
|
|
26
26
|
}
|
|
@@ -11,7 +11,7 @@ export let PreviewCardViewportDataAttributes = /*#__PURE__*/function (PreviewCar
|
|
|
11
11
|
* Indicates the direction from which the popup was activated.
|
|
12
12
|
* This can be used to create directional animations based on how the popup was triggered.
|
|
13
13
|
* Contains space-separated values for both horizontal and vertical axes.
|
|
14
|
-
* @type {`${'left' | 'right'} {'top' | 'bottom'}`}
|
|
14
|
+
* @type {`${'left' | 'right'} ${'top' | 'bottom'}`}
|
|
15
15
|
*/
|
|
16
16
|
PreviewCardViewportDataAttributes["activationDirection"] = "data-activation-direction";
|
|
17
17
|
/**
|
|
@@ -20,7 +20,7 @@ export let PreviewCardViewportDataAttributes = /*#__PURE__*/function (PreviewCar
|
|
|
20
20
|
PreviewCardViewportDataAttributes["transitioning"] = "data-transitioning";
|
|
21
21
|
/**
|
|
22
22
|
* Present if animations should be instant.
|
|
23
|
-
* @type {'
|
|
23
|
+
* @type {'dismiss' | 'focus'}
|
|
24
24
|
*/
|
|
25
25
|
PreviewCardViewportDataAttributes["instant"] = "data-instant";
|
|
26
26
|
return PreviewCardViewportDataAttributes;
|
|
@@ -25,21 +25,16 @@ export const ProgressIndicator = /*#__PURE__*/React.forwardRef(function Progress
|
|
|
25
25
|
state
|
|
26
26
|
} = useProgressRootContext();
|
|
27
27
|
const percentageValue = Number.isFinite(value) && value !== null ? valueToPercent(value, min, max) : null;
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
insetInlineStart: 0,
|
|
34
|
-
height: 'inherit',
|
|
35
|
-
width: `${percentageValue}%`
|
|
36
|
-
};
|
|
37
|
-
}, [percentageValue]);
|
|
28
|
+
const indicatorStyle = percentageValue == null ? {} : {
|
|
29
|
+
insetInlineStart: 0,
|
|
30
|
+
height: 'inherit',
|
|
31
|
+
width: `${percentageValue}%`
|
|
32
|
+
};
|
|
38
33
|
const element = useRenderElement('div', componentProps, {
|
|
39
34
|
state,
|
|
40
35
|
ref: forwardedRef,
|
|
41
36
|
props: [{
|
|
42
|
-
style:
|
|
37
|
+
style: indicatorStyle
|
|
43
38
|
}, elementProps],
|
|
44
39
|
stateAttributesMapping: progressStateAttributesMapping
|
|
45
40
|
});
|
|
@@ -16,7 +16,7 @@ export interface ProgressRootState {
|
|
|
16
16
|
}
|
|
17
17
|
export interface ProgressRootProps extends BaseUIComponentProps<'div', ProgressRootState> {
|
|
18
18
|
/**
|
|
19
|
-
* A string value that provides a user-friendly name for `aria-valuenow`, the current value of the
|
|
19
|
+
* A string value that provides a user-friendly name for `aria-valuenow`, the current value of the progress bar.
|
|
20
20
|
*/
|
|
21
21
|
'aria-valuetext'?: React.AriaAttributes['aria-valuetext'] | undefined;
|
|
22
22
|
/**
|
|
@@ -6,6 +6,7 @@ import { useIsoLayoutEffect } from '@base-ui/utils/useIsoLayoutEffect';
|
|
|
6
6
|
import { useStableCallback } from '@base-ui/utils/useStableCallback';
|
|
7
7
|
import { visuallyHidden, visuallyHiddenInput } from '@base-ui/utils/visuallyHidden';
|
|
8
8
|
import { EMPTY_OBJECT } from '@base-ui/utils/empty';
|
|
9
|
+
import { ownerWindow } from '@base-ui/utils/owner';
|
|
9
10
|
import { createChangeEventDetails } from "../../internals/createBaseUIEventDetails.js";
|
|
10
11
|
import { REASONS } from "../../internals/reasons.js";
|
|
11
12
|
import { NOOP } from "../../internals/noop.js";
|
|
@@ -79,7 +80,6 @@ export const RadioRoot = /*#__PURE__*/React.forwardRef(function RadioRoot(compon
|
|
|
79
80
|
const required = requiredGroup || requiredProp;
|
|
80
81
|
const form = formGroup;
|
|
81
82
|
const checked = groupContext ? checkedValue === value : value === '';
|
|
82
|
-
const serializedValue = React.useMemo(() => serializeValue(value), [value]);
|
|
83
83
|
const radioRef = React.useRef(null);
|
|
84
84
|
const inputRef = React.useRef(null);
|
|
85
85
|
const handleControlRef = useStableCallback(element => {
|
|
@@ -133,7 +133,11 @@ export const RadioRoot = /*#__PURE__*/React.forwardRef(function RadioRoot(compon
|
|
|
133
133
|
return;
|
|
134
134
|
}
|
|
135
135
|
event.preventDefault();
|
|
136
|
-
inputRef.current
|
|
136
|
+
const input = inputRef.current;
|
|
137
|
+
if (!input) {
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
input.dispatchEvent(new (ownerWindow(input).PointerEvent)('click', {
|
|
137
141
|
bubbles: true,
|
|
138
142
|
shiftKey: event.shiftKey,
|
|
139
143
|
ctrlKey: event.ctrlKey,
|
|
@@ -166,7 +170,7 @@ export const RadioRoot = /*#__PURE__*/React.forwardRef(function RadioRoot(compon
|
|
|
166
170
|
style: name ? visuallyHiddenInput : visuallyHidden,
|
|
167
171
|
'aria-hidden': true,
|
|
168
172
|
...(value !== undefined ? {
|
|
169
|
-
value:
|
|
173
|
+
value: serializeValue(value)
|
|
170
174
|
} : EMPTY_OBJECT),
|
|
171
175
|
disabled,
|
|
172
176
|
checked,
|
|
@@ -70,9 +70,9 @@ export const RadioGroup = /*#__PURE__*/React.forwardRef(function RadioGroup(comp
|
|
|
70
70
|
name: 'RadioGroup',
|
|
71
71
|
state: 'value'
|
|
72
72
|
});
|
|
73
|
-
const
|
|
73
|
+
const [touched, setTouched] = React.useState(false);
|
|
74
74
|
const setCheckedValue = useStableCallback((value, eventDetails) => {
|
|
75
|
-
|
|
75
|
+
onValueChangeProp?.(value, eventDetails);
|
|
76
76
|
if (eventDetails.isCanceled) {
|
|
77
77
|
return;
|
|
78
78
|
}
|
|
@@ -121,12 +121,7 @@ export const RadioGroup = /*#__PURE__*/React.forwardRef(function RadioGroup(comp
|
|
|
121
121
|
}
|
|
122
122
|
return undefined;
|
|
123
123
|
});
|
|
124
|
-
|
|
125
|
-
useRegisterFieldControl(controlRef, {
|
|
126
|
-
id,
|
|
127
|
-
value: checkedValue,
|
|
128
|
-
getValue: getFieldValue
|
|
129
|
-
});
|
|
124
|
+
useRegisterFieldControl(controlRef, id, checkedValue ?? null);
|
|
130
125
|
useValueChanged(checkedValue, () => {
|
|
131
126
|
clearErrors(name);
|
|
132
127
|
setDirty(checkedValue !== validityData.initialValue);
|
|
@@ -141,7 +136,6 @@ export const RadioGroup = /*#__PURE__*/React.forwardRef(function RadioGroup(comp
|
|
|
141
136
|
setInputRef(fallbackInput);
|
|
142
137
|
}
|
|
143
138
|
});
|
|
144
|
-
const [touched, setTouched] = React.useState(false);
|
|
145
139
|
const ariaLabelledby = elementProps['aria-labelledby'] ?? labelId ?? fieldsetContext?.legendId;
|
|
146
140
|
const state = {
|
|
147
141
|
...fieldState,
|
|
@@ -156,7 +150,6 @@ export const RadioGroup = /*#__PURE__*/React.forwardRef(function RadioGroup(comp
|
|
|
156
150
|
form,
|
|
157
151
|
validation,
|
|
158
152
|
name,
|
|
159
|
-
onValueChange,
|
|
160
153
|
readOnly,
|
|
161
154
|
registerControlRef,
|
|
162
155
|
registerInputRef,
|
|
@@ -164,7 +157,7 @@ export const RadioGroup = /*#__PURE__*/React.forwardRef(function RadioGroup(comp
|
|
|
164
157
|
setCheckedValue,
|
|
165
158
|
setTouched,
|
|
166
159
|
touched
|
|
167
|
-
}), [checkedValue, disabled, form, validation, fieldState, name,
|
|
160
|
+
}), [checkedValue, disabled, form, validation, fieldState, name, readOnly, registerControlRef, registerInputRef, required, setCheckedValue, setTouched, touched]);
|
|
168
161
|
const defaultProps = {
|
|
169
162
|
role: 'radiogroup',
|
|
170
163
|
'aria-required': required || undefined,
|
|
@@ -10,7 +10,6 @@ export interface RadioGroupContext<Value> {
|
|
|
10
10
|
name: string | undefined;
|
|
11
11
|
checkedValue: Value | undefined;
|
|
12
12
|
setCheckedValue: (value: Value, eventDetails: BaseUIChangeEventDetails<BaseUIEventReasons['none']>) => void;
|
|
13
|
-
onValueChange: (value: Value, eventDetails: BaseUIChangeEventDetails<BaseUIEventReasons['none']>) => void;
|
|
14
13
|
touched: boolean;
|
|
15
14
|
setTouched: React.Dispatch<React.SetStateAction<boolean>>;
|
|
16
15
|
validation?: UseFieldValidationReturnValue | undefined;
|
|
@@ -19,19 +19,19 @@ export const ScrollAreaContent = /*#__PURE__*/React.forwardRef(function ScrollAr
|
|
|
19
19
|
style,
|
|
20
20
|
...elementProps
|
|
21
21
|
} = componentProps;
|
|
22
|
-
const contentWrapperRef = React.useRef(null);
|
|
23
22
|
const {
|
|
24
23
|
computeThumbPosition
|
|
25
24
|
} = useScrollAreaViewportContext();
|
|
26
25
|
const {
|
|
27
26
|
viewportState
|
|
28
27
|
} = useScrollAreaRootContext();
|
|
28
|
+
const contentWrapperRef = React.useRef(null);
|
|
29
29
|
useIsoLayoutEffect(() => {
|
|
30
30
|
if (typeof ResizeObserver === 'undefined') {
|
|
31
31
|
return undefined;
|
|
32
32
|
}
|
|
33
33
|
let hasInitialized = false;
|
|
34
|
-
const
|
|
34
|
+
const resizeObserver = new ResizeObserver(() => {
|
|
35
35
|
// ResizeObserver fires once upon observing, so we skip the initial call
|
|
36
36
|
// to avoid double-calculating the thumb position on mount.
|
|
37
37
|
if (!hasInitialized) {
|
|
@@ -41,10 +41,10 @@ export const ScrollAreaContent = /*#__PURE__*/React.forwardRef(function ScrollAr
|
|
|
41
41
|
computeThumbPosition();
|
|
42
42
|
});
|
|
43
43
|
if (contentWrapperRef.current) {
|
|
44
|
-
|
|
44
|
+
resizeObserver.observe(contentWrapperRef.current);
|
|
45
45
|
}
|
|
46
46
|
return () => {
|
|
47
|
-
|
|
47
|
+
resizeObserver.disconnect();
|
|
48
48
|
};
|
|
49
49
|
}, [computeThumbPosition]);
|
|
50
50
|
const element = useRenderElement('div', componentProps, {
|
|
@@ -13,7 +13,7 @@ import { styleDisableScrollbar } from "../../utils/styles.js";
|
|
|
13
13
|
import { useBaseUiId } from "../../internals/useBaseUiId.js";
|
|
14
14
|
import { scrollAreaStateAttributesMapping } from "./stateAttributes.js";
|
|
15
15
|
import { contains } from "../../floating-ui-react/utils.js";
|
|
16
|
-
import { useCSPContext } from "../../csp-
|
|
16
|
+
import { useCSPContext } from "../../internals/csp-context/CSPContext.js";
|
|
17
17
|
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
18
18
|
const DEFAULT_COORDS = {
|
|
19
19
|
x: 0,
|
|
@@ -61,7 +61,12 @@ export const ScrollAreaScrollbar = /*#__PURE__*/React.forwardRef(function Scroll
|
|
|
61
61
|
};
|
|
62
62
|
const direction = useDirection();
|
|
63
63
|
const hideTrackUntilMeasured = !hasMeasuredScrollbar && !keepMounted;
|
|
64
|
+
const isHidden = orientation === 'vertical' ? hiddenState.y : hiddenState.x;
|
|
65
|
+
const shouldRender = keepMounted || !isHidden;
|
|
64
66
|
React.useEffect(() => {
|
|
67
|
+
if (!shouldRender) {
|
|
68
|
+
return undefined;
|
|
69
|
+
}
|
|
65
70
|
const viewportEl = viewportRef.current;
|
|
66
71
|
const scrollbarEl = orientation === 'vertical' ? scrollbarYRef.current : scrollbarXRef.current;
|
|
67
72
|
if (!scrollbarEl) {
|
|
@@ -72,30 +77,23 @@ export const ScrollAreaScrollbar = /*#__PURE__*/React.forwardRef(function Scroll
|
|
|
72
77
|
return;
|
|
73
78
|
}
|
|
74
79
|
event.preventDefault();
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
+
const horizontal = orientation === 'horizontal';
|
|
81
|
+
const scrollProperty = horizontal ? 'scrollLeft' : 'scrollTop';
|
|
82
|
+
const delta = horizontal ? event.deltaX : event.deltaY;
|
|
83
|
+
const maxScroll = horizontal ? viewportEl.scrollWidth - viewportEl.clientWidth : viewportEl.scrollHeight - viewportEl.clientHeight;
|
|
84
|
+
// RTL horizontal scrolling uses a negative `scrollLeft` range, from 0 to `-maxScroll`.
|
|
85
|
+
const minScroll = horizontal && direction === 'rtl' ? -maxScroll : 0;
|
|
86
|
+
const maxScrollValue = horizontal && direction === 'rtl' ? 0 : maxScroll;
|
|
87
|
+
const scrollValue = viewportEl[scrollProperty];
|
|
88
|
+
if (scrollValue <= minScroll && delta < 0 || scrollValue >= maxScrollValue && delta > 0) {
|
|
80
89
|
return;
|
|
81
90
|
}
|
|
82
|
-
|
|
83
|
-
if (viewportEl.scrollTop === viewportEl.scrollHeight - viewportEl.clientHeight && event.deltaY > 0) {
|
|
84
|
-
return;
|
|
85
|
-
}
|
|
86
|
-
} else if (viewportEl.scrollLeft === viewportEl.scrollWidth - viewportEl.clientWidth && event.deltaX > 0) {
|
|
87
|
-
return;
|
|
88
|
-
}
|
|
89
|
-
if (orientation === 'vertical') {
|
|
90
|
-
viewportEl.scrollTop += event.deltaY;
|
|
91
|
-
} else {
|
|
92
|
-
viewportEl.scrollLeft += event.deltaX;
|
|
93
|
-
}
|
|
91
|
+
viewportEl[scrollProperty] = Math.min(maxScrollValue, Math.max(minScroll, scrollValue + delta));
|
|
94
92
|
}
|
|
95
93
|
return addEventListener(scrollbarEl, 'wheel', handleWheel, {
|
|
96
94
|
passive: false
|
|
97
95
|
});
|
|
98
|
-
}, [orientation, scrollbarXRef, scrollbarYRef, viewportRef]);
|
|
96
|
+
}, [direction, orientation, scrollbarXRef, scrollbarYRef, shouldRender, viewportRef]);
|
|
99
97
|
const props = {
|
|
100
98
|
...(rootId && {
|
|
101
99
|
'data-id': `${rootId}-scrollbar`
|
|
@@ -186,8 +184,6 @@ export const ScrollAreaScrollbar = /*#__PURE__*/React.forwardRef(function Scroll
|
|
|
186
184
|
const contextValue = React.useMemo(() => ({
|
|
187
185
|
orientation
|
|
188
186
|
}), [orientation]);
|
|
189
|
-
const isHidden = orientation === 'vertical' ? hiddenState.y : hiddenState.x;
|
|
190
|
-
const shouldRender = keepMounted || !isHidden;
|
|
191
187
|
if (!shouldRender) {
|
|
192
188
|
return null;
|
|
193
189
|
}
|
|
@@ -21,6 +21,7 @@ import { normalizeScrollOffset } from "../../utils/scrollEdges.js";
|
|
|
21
21
|
// regardless of how many Scroll Area components are mounted.
|
|
22
22
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
23
23
|
let scrollAreaOverflowVarsRegistered = false;
|
|
24
|
+
|
|
24
25
|
/**
|
|
25
26
|
* Removes inheritance of the scroll area overflow CSS variables, which
|
|
26
27
|
* improves rendering performance in complex scroll areas with deep subtrees.
|
|
@@ -254,7 +255,7 @@ export const ScrollAreaViewport = /*#__PURE__*/React.forwardRef(function ScrollA
|
|
|
254
255
|
return undefined;
|
|
255
256
|
}
|
|
256
257
|
let hasInitialized = false;
|
|
257
|
-
const
|
|
258
|
+
const resizeObserver = new ResizeObserver(() => {
|
|
258
259
|
// Avoid duplicate mount-time recompute when observer data matches what the mount
|
|
259
260
|
// scheduling pass already measured. If dimensions changed before the first observer
|
|
260
261
|
// delivery, keep the recompute so overflow transitions stay in sync.
|
|
@@ -267,15 +268,10 @@ export const ScrollAreaViewport = /*#__PURE__*/React.forwardRef(function ScrollA
|
|
|
267
268
|
}
|
|
268
269
|
computeThumbPosition();
|
|
269
270
|
});
|
|
270
|
-
|
|
271
|
+
resizeObserver.observe(viewport);
|
|
271
272
|
|
|
272
|
-
//
|
|
273
|
-
//
|
|
274
|
-
// and the popup is using a transform for the animation, which affects the size of the viewport.
|
|
275
|
-
// Without this, the thumb position will be incorrect until scrolling (i.e. if the scrollbar shows
|
|
276
|
-
// on hover, the thumb has an incorrect size).
|
|
277
|
-
// We assume the user is using `onOpenChangeComplete` to hide the scrollbar
|
|
278
|
-
// until animations complete because otherwise the scrollbar would show the thumb resizing mid-animation.
|
|
273
|
+
// Wait for subtree animations to finish, then recompute thumb geometry that
|
|
274
|
+
// may have been affected by transform-based animations.
|
|
279
275
|
waitForAnimationsTimeout.start(0, () => {
|
|
280
276
|
const animations = viewport.getAnimations({
|
|
281
277
|
subtree: true
|
|
@@ -286,7 +282,7 @@ export const ScrollAreaViewport = /*#__PURE__*/React.forwardRef(function ScrollA
|
|
|
286
282
|
Promise.allSettled(animations.map(animation => animation.finished)).then(computeThumbPosition).catch(() => {});
|
|
287
283
|
});
|
|
288
284
|
return () => {
|
|
289
|
-
|
|
285
|
+
resizeObserver.disconnect();
|
|
290
286
|
waitForAnimationsTimeout.clear();
|
|
291
287
|
};
|
|
292
288
|
}, [computeThumbPosition, viewportRef, waitForAnimationsTimeout]);
|
|
@@ -20,8 +20,8 @@ const stateAttributesMapping = {
|
|
|
20
20
|
*/
|
|
21
21
|
export const SelectBackdrop = /*#__PURE__*/React.forwardRef(function SelectBackdrop(componentProps, forwardedRef) {
|
|
22
22
|
const {
|
|
23
|
-
className,
|
|
24
23
|
render,
|
|
24
|
+
className,
|
|
25
25
|
style,
|
|
26
26
|
...elementProps
|
|
27
27
|
} = componentProps;
|
|
@@ -13,8 +13,8 @@ import { useRenderElement } from "../../internals/useRenderElement.js";
|
|
|
13
13
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
14
14
|
export const SelectGroup = /*#__PURE__*/React.forwardRef(function SelectGroup(componentProps, forwardedRef) {
|
|
15
15
|
const {
|
|
16
|
-
className,
|
|
17
16
|
render,
|
|
17
|
+
className,
|
|
18
18
|
style,
|
|
19
19
|
...elementProps
|
|
20
20
|
} = componentProps;
|
|
@@ -14,10 +14,10 @@ import { useRenderElement } from "../../internals/useRenderElement.js";
|
|
|
14
14
|
*/
|
|
15
15
|
export const SelectGroupLabel = /*#__PURE__*/React.forwardRef(function SelectGroupLabel(componentProps, forwardedRef) {
|
|
16
16
|
const {
|
|
17
|
-
className,
|
|
18
17
|
render,
|
|
19
|
-
|
|
18
|
+
className,
|
|
20
19
|
style,
|
|
20
|
+
id: idProp,
|
|
21
21
|
...elementProps
|
|
22
22
|
} = componentProps;
|
|
23
23
|
const {
|
|
@@ -15,8 +15,8 @@ import { selectors } from "../store.js";
|
|
|
15
15
|
*/
|
|
16
16
|
export const SelectIcon = /*#__PURE__*/React.forwardRef(function SelectIcon(componentProps, forwardedRef) {
|
|
17
17
|
const {
|
|
18
|
-
className,
|
|
19
18
|
render,
|
|
19
|
+
className,
|
|
20
20
|
style,
|
|
21
21
|
...elementProps
|
|
22
22
|
} = componentProps;
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
import * as React from 'react';
|
|
4
4
|
import { useIsoLayoutEffect } from '@base-ui/utils/useIsoLayoutEffect';
|
|
5
|
-
import { useValueAsRef } from '@base-ui/utils/useValueAsRef';
|
|
6
5
|
import { useStore } from '@base-ui/utils/store';
|
|
7
6
|
import { useSelectRootContext } from "../root/SelectRootContext.js";
|
|
8
7
|
import { useCompositeListItem, IndexGuessBehavior } from "../../internals/composite/list/useCompositeListItem.js";
|
|
@@ -13,6 +12,7 @@ import { useButton } from "../../internals/use-button/index.js";
|
|
|
13
12
|
import { createChangeEventDetails } from "../../internals/createBaseUIEventDetails.js";
|
|
14
13
|
import { REASONS } from "../../internals/reasons.js";
|
|
15
14
|
import { compareItemEquality, removeItem } from "../../internals/itemEquality.js";
|
|
15
|
+
import { isVirtualClick } from "../../floating-ui-react/utils/event.js";
|
|
16
16
|
|
|
17
17
|
/**
|
|
18
18
|
* An individual option in the select popup.
|
|
@@ -25,11 +25,11 @@ export const SelectItem = /*#__PURE__*/React.memo(/*#__PURE__*/React.forwardRef(
|
|
|
25
25
|
const {
|
|
26
26
|
render,
|
|
27
27
|
className,
|
|
28
|
+
style,
|
|
28
29
|
value: itemValue = null,
|
|
29
30
|
label,
|
|
30
31
|
disabled = false,
|
|
31
32
|
nativeButton = false,
|
|
32
|
-
style,
|
|
33
33
|
...elementProps
|
|
34
34
|
} = componentProps;
|
|
35
35
|
const textRef = React.useRef(null);
|
|
@@ -40,7 +40,7 @@ export const SelectItem = /*#__PURE__*/React.memo(/*#__PURE__*/React.forwardRef(
|
|
|
40
40
|
});
|
|
41
41
|
const {
|
|
42
42
|
store,
|
|
43
|
-
|
|
43
|
+
itemProps,
|
|
44
44
|
setOpen,
|
|
45
45
|
setValue,
|
|
46
46
|
selectionRef,
|
|
@@ -56,7 +56,6 @@ export const SelectItem = /*#__PURE__*/React.memo(/*#__PURE__*/React.forwardRef(
|
|
|
56
56
|
const index = listItem.index;
|
|
57
57
|
const hasRegistered = index !== -1;
|
|
58
58
|
const itemRef = React.useRef(null);
|
|
59
|
-
const indexRef = useValueAsRef(index);
|
|
60
59
|
useIsoLayoutEffect(() => {
|
|
61
60
|
if (!hasRegistered) {
|
|
62
61
|
return undefined;
|
|
@@ -85,19 +84,9 @@ export const SelectItem = /*#__PURE__*/React.memo(/*#__PURE__*/React.forwardRef(
|
|
|
85
84
|
}
|
|
86
85
|
}
|
|
87
86
|
}, [hasRegistered, index, multiple, isItemEqualToValue, store, itemValue, selectedItemTextRef]);
|
|
88
|
-
const state = {
|
|
89
|
-
disabled,
|
|
90
|
-
selected,
|
|
91
|
-
highlighted
|
|
92
|
-
};
|
|
93
|
-
const rootProps = getItemProps({
|
|
94
|
-
active: highlighted,
|
|
95
|
-
selected
|
|
96
|
-
});
|
|
97
|
-
rootProps.id = undefined;
|
|
98
87
|
const lastKeyRef = React.useRef(null);
|
|
99
88
|
const pointerTypeRef = React.useRef('mouse');
|
|
100
|
-
const
|
|
89
|
+
const allowMouseSelectionRef = React.useRef(false);
|
|
101
90
|
const {
|
|
102
91
|
getButtonProps,
|
|
103
92
|
buttonRef
|
|
@@ -107,6 +96,11 @@ export const SelectItem = /*#__PURE__*/React.memo(/*#__PURE__*/React.forwardRef(
|
|
|
107
96
|
native: nativeButton,
|
|
108
97
|
composite: true
|
|
109
98
|
});
|
|
99
|
+
const state = {
|
|
100
|
+
disabled,
|
|
101
|
+
selected,
|
|
102
|
+
highlighted
|
|
103
|
+
};
|
|
110
104
|
function commitSelection(event) {
|
|
111
105
|
const selectedValue = store.state.value;
|
|
112
106
|
if (multiple) {
|
|
@@ -118,16 +112,13 @@ export const SelectItem = /*#__PURE__*/React.memo(/*#__PURE__*/React.forwardRef(
|
|
|
118
112
|
setOpen(false, createChangeEventDetails(REASONS.itemPress, event));
|
|
119
113
|
}
|
|
120
114
|
}
|
|
115
|
+
function resetDragMovement() {
|
|
116
|
+
selectionRef.current.dragY = 0;
|
|
117
|
+
}
|
|
121
118
|
const defaultProps = {
|
|
122
119
|
role: 'option',
|
|
123
120
|
'aria-selected': selected,
|
|
124
121
|
tabIndex: highlighted ? 0 : -1,
|
|
125
|
-
onTouchStart() {
|
|
126
|
-
selectionRef.current = {
|
|
127
|
-
allowSelectedMouseUp: false,
|
|
128
|
-
allowUnselectedMouseUp: false
|
|
129
|
-
};
|
|
130
|
-
},
|
|
131
122
|
onKeyDown(event) {
|
|
132
123
|
lastKeyRef.current = event.key;
|
|
133
124
|
store.set('activeIndex', index);
|
|
@@ -136,13 +127,24 @@ export const SelectItem = /*#__PURE__*/React.memo(/*#__PURE__*/React.forwardRef(
|
|
|
136
127
|
}
|
|
137
128
|
},
|
|
138
129
|
onClick(event) {
|
|
139
|
-
|
|
130
|
+
const isMouseClick = event.type === 'click' && pointerTypeRef.current !== 'touch';
|
|
131
|
+
const clickPointerType = event.nativeEvent.pointerType;
|
|
132
|
+
const isVirtualMouseClick = isMouseClick && isVirtualClick(event.nativeEvent) && (
|
|
133
|
+
// Generic no-pointer `detail === 0` clicks stay tied to highlight state. Virtual
|
|
134
|
+
// clicks that carry browser pointer data, including an empty string from assistive
|
|
135
|
+
// technology, can activate unhighlighted items.
|
|
136
|
+
clickPointerType !== undefined || highlighted);
|
|
137
|
+
// With alignItemWithTrigger, opening can place an item under the cursor. Real mouse
|
|
138
|
+
// clicks must start on the item, while virtual clicks represent explicit keyboard or
|
|
139
|
+
// assistive technology activation.
|
|
140
|
+
const isInvalidMouseClick = isMouseClick && !isVirtualMouseClick && !allowMouseSelectionRef.current;
|
|
141
|
+
allowMouseSelectionRef.current = false;
|
|
140
142
|
|
|
141
143
|
// Prevent double commit on {Enter}
|
|
142
144
|
if (event.type === 'keydown' && lastKeyRef.current === null) {
|
|
143
145
|
return;
|
|
144
146
|
}
|
|
145
|
-
if (disabled || event.type === 'keydown' && lastKeyRef.current === ' ' && typingRef.current ||
|
|
147
|
+
if (disabled || event.type === 'keydown' && lastKeyRef.current === ' ' && typingRef.current || isInvalidMouseClick) {
|
|
146
148
|
return;
|
|
147
149
|
}
|
|
148
150
|
lastKeyRef.current = null;
|
|
@@ -151,40 +153,52 @@ export const SelectItem = /*#__PURE__*/React.memo(/*#__PURE__*/React.forwardRef(
|
|
|
151
153
|
onPointerEnter(event) {
|
|
152
154
|
pointerTypeRef.current = event.pointerType;
|
|
153
155
|
},
|
|
156
|
+
onPointerMove(event) {
|
|
157
|
+
if (event.pointerType === 'mouse' && event.buttons === 1) {
|
|
158
|
+
const selection = selectionRef.current;
|
|
159
|
+
selection.dragY += event.movementY;
|
|
160
|
+
if (selection.dragY ** 2 >= 64) {
|
|
161
|
+
selection.allowUnselectedMouseUp = true;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
},
|
|
154
165
|
onPointerDown(event) {
|
|
155
166
|
pointerTypeRef.current = event.pointerType;
|
|
156
|
-
|
|
167
|
+
allowMouseSelectionRef.current = true;
|
|
168
|
+
resetDragMovement();
|
|
157
169
|
},
|
|
158
170
|
onMouseUp() {
|
|
159
|
-
|
|
171
|
+
resetDragMovement();
|
|
172
|
+
if (disabled || pointerTypeRef.current === 'touch') {
|
|
160
173
|
return;
|
|
161
174
|
}
|
|
162
175
|
|
|
163
|
-
// Regular
|
|
164
|
-
if (
|
|
165
|
-
didPointerDownRef.current = false;
|
|
176
|
+
// Regular clicks are committed by the click event.
|
|
177
|
+
if (allowMouseSelectionRef.current) {
|
|
166
178
|
return;
|
|
167
179
|
}
|
|
168
180
|
const disallowSelectedMouseUp = !selectionRef.current.allowSelectedMouseUp && selected;
|
|
169
181
|
const disallowUnselectedMouseUp = !selectionRef.current.allowUnselectedMouseUp && !selected;
|
|
170
|
-
if (disallowSelectedMouseUp || disallowUnselectedMouseUp
|
|
182
|
+
if (disallowSelectedMouseUp || disallowUnselectedMouseUp) {
|
|
171
183
|
return;
|
|
172
184
|
}
|
|
185
|
+
allowMouseSelectionRef.current = true;
|
|
173
186
|
itemRef.current?.click();
|
|
187
|
+
allowMouseSelectionRef.current = false;
|
|
174
188
|
}
|
|
175
189
|
};
|
|
176
190
|
const element = useRenderElement('div', componentProps, {
|
|
177
191
|
ref: [buttonRef, forwardedRef, listItem.ref, itemRef],
|
|
178
192
|
state,
|
|
179
|
-
props: [
|
|
193
|
+
props: [itemProps, defaultProps, elementProps, getButtonProps]
|
|
180
194
|
});
|
|
181
195
|
const contextValue = React.useMemo(() => ({
|
|
182
196
|
selected,
|
|
183
|
-
|
|
197
|
+
index,
|
|
184
198
|
textRef,
|
|
185
199
|
selectedByFocus,
|
|
186
200
|
hasRegistered
|
|
187
|
-
}), [selected,
|
|
201
|
+
}), [selected, index, textRef, selectedByFocus, hasRegistered]);
|
|
188
202
|
return /*#__PURE__*/_jsx(SelectItemContext.Provider, {
|
|
189
203
|
value: contextValue,
|
|
190
204
|
children: element
|