import { type AriaAttributes, type AriaRole, type MutableRefObject, type ReactNode, type RefObject } from "react";
import { type IButtonAccessibilityConfig } from "../Button/typings.js";
import { type Alignment, type OverlayPositionType } from "../typings/overlay.js";
import { type IAlignPoint } from "../typings/positioning.js";
export declare const DROPDOWN_BODY_CLASS = "dropdown-body";
/**
 * @internal
 */
export interface IDropdownButtonRenderProps {
    isMobile: boolean;
    isOpen: boolean;
    dropdownId: string;
    buttonRef: MutableRefObject<HTMLElement | null>;
    openDropdown: () => void;
    closeDropdown: () => void;
    toggleDropdown: (desiredState?: 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" | "popupType" | "ariaLabel" | "ariaDescribedBy" | "ariaControls" | "ariaExpanded" | "ariaHaspopup" | "ariaPressed">;
}
/**
 * @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;
    /** Reports the align point the Overlay chose whenever it (re)positions the body. */
    onAlign?: (alignment: Alignment) => void;
    overlayPositionType?: OverlayPositionType;
    overlayZIndex?: number;
    /**
     * Should the dropdown body be fullscreen on smaller screens? Defaults to true.
     */
    fullscreenOnMobile?: boolean;
    enableEventPropagation?: boolean;
    enableAutoToggle?: 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({ isOpen: isOpenProp, onToggle, className, openOnInit, closeOnParentScroll, closeOnMouseDrag, closeOnOutsideClick, overlayPositionType, alignPoints, overlayZIndex, ignoreClicksOnByClass, renderBody, renderButton, onOpenStateChanged, onAlign, fullscreenOnMobile, enableEventPropagation, enableAutoToggle, closeOnEscape, autofocusOnOpen, initialFocus, returnFocusTo, accessibilityConfig, shouldTrapFocus }: IDropdownProps): import("react/jsx-runtime").JSX.Element;
//# sourceMappingURL=Dropdown.d.ts.map