import type { Select as SelectPrimitive } from '@base-ui/react/select'; import * as React from 'react'; export declare const SelectExitFocusContext: React.Context<{ trigger: React.RefObject; popup: React.RefObject; defaultFinalFocus: React.RefObject; } | null>; export declare function useSelectExitFocus({ open: controlledOpen, defaultOpen, onOpenChange, onOpenChangeComplete, }: Pick, 'open' | 'defaultOpen' | 'onOpenChange' | 'onOpenChangeComplete'>): { context: { trigger: React.RefObject; popup: React.RefObject; defaultFinalFocus: React.RefObject; }; open: boolean; onOpenChangeComplete(nextOpen: boolean): void; onOpenChange(nextOpen: boolean, details: SelectPrimitive.Root.OpenChangeEventDetails): void; }; export declare function useSelectExitRef(part: 'trigger' | 'popup', forwardedRef: React.Ref, finalFocus?: SelectPrimitive.Popup.Props['finalFocus']): (element: T | null) => () => void; /** * Base UI returns focus to the trigger only after the exit transition ends, * and item selection / closed-trigger typeahead do not check `open`. So for * the 120ms exit, focus can still sit on an option and ArrowDown/Enter or a * typed letter would still commit a value through the closing popup. * * Focus normally moves to the trigger as soon as Base UI closes. This capture * guard is only a safety net for events explicitly sent to the stale list (or * custom finalFocus). It must never intercept keys on the closed trigger. * While the popup is closed (`data-closed`), swallow the keys Select acts on. * Only Ctrl/Meta/Alt combinations pass through, so global shortcuts still * reach the document. Shift+Enter / Shift+character are swallowed on purpose * (uppercase typeahead). */ export declare function guardExitingSelectKeys(event: React.KeyboardEvent): void;