import React from 'react';
import type { CheckboxProps } from '../Checkbox/Checkbox.types';
import type { PolymorphicAs } from '../_utils/polymorphic';
import type { DivAttributes } from '../_utils/types';
import type { DroppableProps, FooterProps, GroupProps, HeaderProps, ItemProps, ItemWithDraggingProps, MenuContext as IMenuContext, MenuItemProps, MenuProps, MenuRef, MenuSearchProps, OptionsProps, Ref } from './MenuImperative.types';
export declare function useMergeRef<T = HTMLElement>(externalRef: Ref<T>): readonly [React.MutableRefObject<T | undefined>, (node: any) => void];
export declare function useMenuContext(): IMenuContext;
interface ControlNavigationProps {
    menuId?: MenuProps['id'];
}
interface ControlNavigationReturn {
    menuNavigationTriggerProps: {
        'aria-activedescendant'?: string;
        'aria-controls'?: string;
        onKeyDown?: React.KeyboardEventHandler<Element>;
    };
    menuProps: {
        onChangeActiveDescendant?: React.Dispatch<React.SetStateAction<string | undefined>>;
        id: string;
    };
}
/**
 * Usefully if navigation is controlled by search input or another input.
 *
 * @param ref MenuImperative ref
 * @param enable True by default. Setting to false will change all props
 * to undefined (except id in menuProps), so navigation controlled by menu itself is restored.
 * @param options.menuId provide id otherwise it will be generated
 * @since 11.5.0
 */
export declare const useMenuImperativeControlNavigation: (ref: React.RefObject<MenuRef>, enable?: boolean, options?: ControlNavigationProps) => ControlNavigationReturn;
export declare const Group: React.ForwardRefExoticComponent<DivAttributes & GroupProps & React.RefAttributes<HTMLDivElement>>;
export declare function Droppable({ id, children }: DroppableProps): React.JSX.Element;
export declare namespace Droppable {
    var displayName: string;
}
export declare const Item: PolymorphicAs.ComponentWithForwardedRef<MenuItemProps, "div">;
export declare const CheckboxItem: React.ForwardRefExoticComponent<(DivAttributes & (ItemProps | ItemWithDraggingProps) & Omit<CheckboxProps, "checked">) & React.RefAttributes<HTMLDivElement>>;
export declare const Options: React.ForwardRefExoticComponent<OptionsProps & React.RefAttributes<HTMLDivElement>>;
export declare const Search: {
    ({ className, i18nScope, placeholder, onChange: _onChange, ...props }: MenuSearchProps): React.JSX.Element;
    displayName: string;
};
export declare const Header: React.ForwardRefExoticComponent<DivAttributes & HeaderProps & React.RefAttributes<HTMLDivElement>>;
export declare const Footer: React.ForwardRefExoticComponent<DivAttributes & FooterProps & React.RefAttributes<HTMLDivElement>>;
/**

   @since 10.19.0

   @see [Storybook](https://stories.core.procore.com/?path=/story/core-react_demos-menu-imperative--demo)

 */
export declare const MenuImperative: React.ForwardRefExoticComponent<MenuProps & React.RefAttributes<MenuRef>> & {
    CheckboxItem: React.ForwardRefExoticComponent<(DivAttributes & (ItemProps | ItemWithDraggingProps) & Omit<CheckboxProps, "checked">) & React.RefAttributes<HTMLDivElement>>;
    Droppable: typeof Droppable;
    Footer: React.ForwardRefExoticComponent<DivAttributes & FooterProps & React.RefAttributes<HTMLDivElement>>;
    Group: React.ForwardRefExoticComponent<DivAttributes & GroupProps & React.RefAttributes<HTMLDivElement>>;
    Header: React.ForwardRefExoticComponent<DivAttributes & HeaderProps & React.RefAttributes<HTMLDivElement>>;
    Item: PolymorphicAs.ComponentWithForwardedRef<MenuItemProps, "div">;
    Options: React.ForwardRefExoticComponent<OptionsProps & React.RefAttributes<HTMLDivElement>>;
    Search: {
        ({ className, i18nScope, placeholder, onChange: _onChange, ...props }: MenuSearchProps): React.JSX.Element;
        displayName: string;
    };
};
export {};
