import type { Placement } from '@popperjs/core';
import type { Dispatch, MutableRefObject, PropsWithChildren, RefObject } from 'react';
import React from 'react';
import type { Actions } from './Actions';
import type { ButtonProps } from './Button';
import type { ItemProps, MenuItemDataRef, SubmenuActions } from './Item';
interface MenuProps {
    focusRef?: MutableRefObject<Pick<HTMLOrSVGElement, 'focus'>>;
    headless?: boolean;
    onClose?: () => void;
    onOpen?: () => void;
    placement?: Placement;
}
interface MenuState {
    activeItemIndex: number | null;
    buttonRef: MutableRefObject<HTMLButtonElement | HTMLDivElement | HTMLLabelElement>;
    focusRef?: MutableRefObject<HTMLElement>;
    headless: boolean;
    itemsRef: MutableRefObject<HTMLUListElement>;
    items: {
        id: string;
        dataRef: MenuItemDataRef;
    }[];
    id: string;
    integratedMultiSelect: boolean;
    listbox: boolean;
    minWidth: string;
    onCloseRef: RefObject<() => void | undefined>;
    onOpenRef: RefObject<() => void | undefined>;
    parentItemRef: MutableRefObject<HTMLButtonElement>;
    parentRef: MutableRefObject<HTMLUListElement>;
    placement: Placement;
    search: string;
    searchable: boolean;
    selectedItem: {
        id: string | null;
        index: number | null;
    };
    show: boolean;
    notifyAction?: SubmenuActions;
    openSubmenuItemId: string | null;
}
type UseMenuValues = [MenuState, Dispatch<Actions>];
export declare const useMenu: () => UseMenuValues;
declare function Menu({ children, focusRef, headless, onClose, onOpen, placement, }: PropsWithChildren<MenuProps>): JSX.Element;
declare namespace Menu {
    var Button: React.ForwardRefExoticComponent<PropsWithChildren<ButtonProps> & React.RefAttributes<HTMLButtonElement>>;
    var Group: typeof import("./Group").default;
    var Item: React.ForwardRefExoticComponent<PropsWithChildren<ItemProps> & React.RefAttributes<HTMLButtonElement>>;
    var Items: React.ForwardRefExoticComponent<Omit<PropsWithChildren<Record<string, unknown>>, "ref"> & React.RefAttributes<HTMLUListElement>>;
}
export default Menu;
