import React, { CSSProperties } from "react";
import { RenderConditionalPortalProps } from "@react-md/portal";
import { MenuItemRenderer, ValidMenuItem } from "./defaultMenuItemRenderer";
import { MenuPositionProps, MenuRenderer } from "./defaultMenuRenderer";
import { MenuButtonProps } from "./MenuButton";
export interface BaseDropdownMenuProps extends MenuPositionProps, RenderConditionalPortalProps {
    /**
     * The id to use for the menu button and used to create the id for the menu.
     * The menu's id will just be `${id}-menu`.
     */
    id: string;
    /**
     * The label to use for the menu. Either this or the `menuLabelledBy` props
     * are required for a11y.
     */
    menuLabel?: string;
    /**
     * The id for an element to label the menu. Either this or the `menuLabel`
     * props are required for a11y. This will be defaulted to the `id` of the menu
     * button for convenience since it _should_ normally label the menu but should
     * be changed if it does not.
     */
    menuLabelledBy?: string;
    /**
     * An optional style object to pass to the `menuRenderer`/`Menu` component.
     */
    menuStyle?: CSSProperties;
    /**
     * An optional className to pass to the `menuRenderer`/`Menu` component.
     */
    menuClassName?: string;
    /**
     * A custom menu renderer to use. This defaults to just rendering the `Menu`
     * component with the base required props and a generated id from the button
     * id.
     */
    menuRenderer?: MenuRenderer;
    /**
     * A list of menu items to render. Each item will be passed to the
     * `menuItemRenderer` function.
     */
    items: ValidMenuItem[];
    /**
     * A function to call for each `item` in the `items` list to render a
     * ReactElement.
     */
    itemRenderer?: MenuItemRenderer;
    /**
     * Boolean if the menu should be visible immediately once this component
     * mounts.
     */
    defaultVisible?: boolean;
    /**
     * An optional function to call when the visibility of the menu changes.
     */
    onVisibilityChange?: (visible: boolean) => void;
}
export interface DropdownMenuProps extends Omit<MenuButtonProps, "id" | "visible" | "aria-haspopup">, BaseDropdownMenuProps {
}
export declare const DropdownMenu: React.ForwardRefExoticComponent<DropdownMenuProps & React.RefAttributes<HTMLButtonElement>>;
