export interface UseMenuDropdownOptions<T> {
    /** Array of items available in the dropdown. */
    items: T[];
    /** Controlled open state. When provided, the hook is in controlled mode. */
    isOpen?: boolean;
    /** Callback when open state changes. */
    onOpenChange?: (isOpen: boolean) => void;
    /** Callback when an item is selected. */
    onSelect?: (index: number, item: T) => void;
    /** ID of the currently active descendant for aria-activedescendant. */
    activeDescendantId?: string;
}
export interface UseMenuDropdownReturn<T> {
    /** Whether the dropdown is currently open. */
    isOpen: boolean;
    /** Index of the currently highlighted item, or -1 if none. */
    activeIndex: number;
    /** Opens the dropdown. */
    open: () => void;
    /** Closes the dropdown. */
    close: () => void;
    /**
     * Props to spread on the trigger element.
     *
     * Includes `aria-expanded`, `aria-haspopup`, `aria-activedescendant`,
     * `onClick`, and `onKeyDown` for keyboard navigation.
     */
    triggerProps: {
        'aria-expanded': boolean;
        'aria-haspopup': 'listbox';
        'aria-activedescendant': string | undefined;
        onClick: () => void;
        onKeyDown: (e: React.KeyboardEvent) => void;
    };
    /**
     * Props to spread on the listbox element.
     *
     * Includes `role` and `id`.
     */
    listboxProps: {
        role: 'listbox';
        id: string;
    };
    /**
     * Returns props to spread on each option element at the given index.
     *
     * Includes `role`, `id`, `aria-selected`, and `onClick`.
     */
    getOptionProps: (index: number) => {
        role: 'option';
        id: string;
        'aria-selected': boolean;
        onClick: () => void;
    };
}
/**
 * Manages combobox/dropdown behavior for Arrow components like
 * MenuDropdown, FilterChip, and Select.
 *
 * Supports both controlled (`isOpen` + `onOpenChange`) and uncontrolled modes.
 * Provides keyboard navigation: ArrowDown opens and moves down, ArrowUp moves up,
 * Enter/Space selects, Escape closes.
 *
 * @example
 * const { isOpen, triggerProps, listboxProps, getOptionProps } = useMenuDropdown({
 *   items: options,
 *   onSelect: (index, item) => setValue(item),
 * });
 *
 * <button {...triggerProps}>Select an option</button>
 * {isOpen && (
 *   <ul {...listboxProps}>
 *     {options.map((opt, i) => (
 *       <li {...getOptionProps(i)}>{opt.label}</li>
 *     ))}
 *   </ul>
 * )}
 */
export declare function useMenuDropdown<T>({ items, isOpen: controlledIsOpen, onOpenChange, onSelect, activeDescendantId, }: UseMenuDropdownOptions<T>): UseMenuDropdownReturn<T>;
//# sourceMappingURL=useMenuDropdown.d.ts.map