import { AriaAttributes, AriaRole, MutableRefObject, ReactNode, RefObject } from "react";
import { IButtonAccessibilityConfig } from "../Button/index.js";
import { OverlayPositionType } from "../typings/overlay.js";
import { IAlignPoint } from "../typings/positioning.js";
/**
 * @internal
 */
export interface IDropdownButtonRenderProps {
    isMobile: boolean;
    isOpen: boolean;
    dropdownId: string;
    buttonRef: MutableRefObject<HTMLElement | null>;
    openDropdown: () => void;
    closeDropdown: () => void;
    toggleDropdown: (desiredState?: boolean | unknown) => void;
    /**
     * Props supporting accessibility that can be just passed through to the rendered element
     */
    ariaAttributes: {
        role: AriaRole;
    } & Pick<AriaAttributes, "aria-haspopup" | "aria-expanded" | "aria-controls">;
    /**
     * Props supporting accessibility that can be passed down to a <Button/>
     */
    accessibilityConfig: Pick<IButtonAccessibilityConfig, "role" | "isExpanded" | "popupId" | "ariaLabel" | "ariaDescribedBy">;
}
/**
 * @internal
 */
export interface IDropdownBodyRenderProps {
    isMobile: boolean;
    closeDropdown: () => void;
    ariaAttributes: Pick<AriaAttributes, "aria-labelledby" | "aria-label"> & {
        role: AriaAttributes["aria-haspopup"] & AriaRole;
        id: string;
    };
}
/**
 * @internal
 */
export interface IDropdownProps {
    renderBody: (props: IDropdownBodyRenderProps) => ReactNode;
    renderButton: (props: IDropdownButtonRenderProps) => ReactNode;
    isOpen?: boolean;
    /**
     * Toggles the open state or sets the state to the desired value.
     * The `desiredState` argument's type includes `unknown` to facilitate ease of use as an event handler (`onClick={onToggle}`)
     * @param desiredState - The desired state. If not provided, the state will be toggled.
     */
    onToggle?: ((desiredState?: boolean) => void) | (() => void);
    openOnInit?: boolean;
    className?: string;
    alignPoints?: IAlignPoint[];
    closeOnMouseDrag?: boolean;
    closeOnOutsideClick?: boolean;
    closeOnParentScroll?: boolean;
    ignoreClicksOnByClass?: string[];
    onOpenStateChanged?: (isOpen: boolean) => void;
    overlayPositionType?: OverlayPositionType;
    overlayZIndex?: number;
    /**
     * Should the dropdown body be fullscreen on smaller screens? Defaults to true.
     */
    fullscreenOnMobile?: boolean;
    enableEventPropagation?: boolean;
    closeOnEscape?: boolean;
    autofocusOnOpen?: boolean;
    initialFocus?: RefObject<HTMLElement> | string;
    returnFocusTo?: RefObject<HTMLElement> | string;
    accessibilityConfig?: {
        triggerRole?: "button" | "combobox";
        popupRole?: "listbox" | "tree" | "grid" | "dialog";
    };
    shouldTrapFocus?: boolean;
}
/**
 * @internal
 */
export declare function Dropdown(props: IDropdownProps): import("react/jsx-runtime").JSX.Element;
//# sourceMappingURL=Dropdown.d.ts.map