import type { AriaAttributes, HTMLAttributes } from 'react';
import React from 'react';
import type { HTMLProps } from '../../typings/html';
import type { PopupPositionsType } from '../Popup';
import type { CommonProps } from '../CommonWrapper';
import type { TGetRootNode } from '../../lib/rootNode';
import type { MenuProps } from '../Menu';
export * from './tids';
export interface PopupMenuCaptionProps {
    opened: boolean;
    openMenu: (firstItemShouldBeSelected?: boolean) => void;
    closeMenu: (restoreFocus?: boolean) => void;
    toggleMenu: () => void;
    /** @ignore */
    corners?: React.CSSProperties;
}
export interface PopupMenuProps extends CommonProps, Pick<MenuProps, 'preventIconsOffset'>, Pick<HTMLAttributes<HTMLElement>, 'id'>, Pick<AriaAttributes, 'aria-label'> {
    children?: React.ReactNode;
    /** Максимальная высота меню */
    menuMaxHeight?: number | string;
    /** Ширина меню */
    menuWidth?: number | string;
    /** Ширина контейнера и caption */
    width?: React.CSSProperties['width'];
    /**
     * Элемент или функция возвращающая элемент,
     * если передана, используется вместо ```caption```,
     * в таком случае управлять открытием и закрытием меню
     * придется в этой функции
     */
    caption: React.ReactNode | ((props: PopupMenuCaptionProps) => React.ReactNode);
    header?: React.ReactNode;
    footer?: React.ReactNode;
    /**  Массив разрешенных положений меню относительно caption'а. */
    positions?: PopupPositionsType[];
    /** Колбэк, вызываемый после открытия/закрытия меню */
    onChangeMenuState?: (isOpened: boolean, restoreFocus: boolean) => void;
    /** Пропсы, передающиеся в Popup */
    popupHasPin?: boolean;
    popupMargin?: number;
    popupPinOffset?: number;
    type?: 'dropdown' | 'tooltip';
    disableAnimations?: boolean;
    /** Действие при открытии меню */
    onOpen?: () => void;
    /** Действие при закрытии меню */
    onClose?: () => void;
    /**
     * Позволяет задать `id` выпадающему меню.
     *
     * Это может пригодиться при реализации a11y. Например, для того, чтобы связать `aria-controls` с выпадающим меню.
     */
    popupMenuId?: HTMLProps['id'];
    /** @ignore */
    corners?: React.CSSProperties;
}
interface PopupMenuState {
    menuVisible: boolean;
    firstItemShouldBeSelected?: boolean;
}
export declare const PopupMenuType: {
    readonly Dropdown: "dropdown";
    readonly Tooltip: "tooltip";
};
type DefaultProps = Required<Pick<PopupMenuProps, 'positions' | 'type' | 'popupHasPin' | 'disableAnimations'>>;
export declare class PopupMenu extends React.Component<PopupMenuProps, PopupMenuState> {
    static __KONTUR_REACT_UI__: string;
    static displayName: string;
    private isMobileLayout;
    private rootId;
    static defaultProps: DefaultProps;
    private getProps;
    static Type: {
        readonly Dropdown: "dropdown";
        readonly Tooltip: "tooltip";
    };
    state: {
        menuVisible: boolean;
        firstItemShouldBeSelected: boolean;
    };
    private captionWrapper;
    private savedFocusableElement;
    private menu;
    getRootNode: TGetRootNode;
    private setRootNode;
    render(): JSX.Element;
    private renderMain;
    open: () => void;
    close: () => void;
    private menuRef;
    private handleOpen;
    private passPropsToCaption;
    private renderCaption;
    private hideMenuWithoutFocusing;
    private getPositions;
    private showMenu;
    private hideMenu;
    private toggleMenu;
    private handleCaptionClick;
    private handleCaptionKeyDown;
    private handleKeyDown;
    private saveFocus;
    private restoreFocus;
    private handleChangeMenuVisible;
    private handleItemSelection;
}
