import React from 'react';
import { Theme } from '../cn';
import { MenuItemProps } from '../menu-item/menu-item';
export declare type MenuHighlightedItemShapeType = {
    /**
     * Уникальный идентификатор
     */
    ref?: number | string;
    /**
     * Элемент списка типа ContentItem
     */
    item?: any;
};
export declare type MenuContentType = {
    /**
     * Тип элемента
     */
    type?: 'item' | 'group';
    /**
     * Ключ для перечисления
     */
    key?: React.Key;
    /**
     * Название группы
     */
    title?: string;
    /**
     * Только для type='item', свойство для компонента [MenuItem](#!/MenuItem)
     */
    value?: string | number;
    /**
     * Содержание элемента
     */
    content?: React.ReactNode | any[];
    /**
     * Только для type='item': свойства для компонента [MenuItem](#!/MenuItem)
     */
    props?: MenuItemProps;
};
export declare type MenuProps = {
    /**
     * Тип расположения меню: 'horizontal'
     */
    view?: string;
    /**
     * Размещение заголовка групп: обычное или в одну строку с первым элементом группы
     */
    groupView?: 'default' | 'line';
    /**
     * Тип списка вариантов меню
     */
    mode?: 'basic' | 'check' | 'radio' | 'radio-check';
    /**
     * Управление возможностью изменения значения
     */
    disabled?: boolean;
    /**
     * Управление состоянием фокуса элемента
     */
    focused?: boolean;
    /**
     * Управление автоматическим фокусом на первом элементе при вызове публичного метода focus
     */
    autoFocusFirstItem?: boolean;
    /**
     * Элемент меню, на котором стоит выделение
     */
    highlightedItem?: MenuHighlightedItemShapeType;
    /**
     * Список объектов ContentItem
     */
    content?: MenuContentType[];
    /**
     * Список значений выбранных элементов
     */
    checkedItems?: ReadonlyArray<string | number>;
    /**
     * Размер компонента
     */
    size?: 's' | 'm' | 'l' | 'xl';
    /**
     * Объект со стилями
     */
    style?: React.CSSProperties;
    /**
     * Тема компонента
     */
    theme?: Theme;
    /**
     * Дополнительный класс
     */
    className?: string;
    /**
     * Идентификатор компонента в DOM
     */
    id?: string;
    /**
     * Обработчик клика по варианту меню
     */
    onItemClick?: (item?: any, event?: React.ChangeEvent<any>) => void;
    /**
     * Обработчик выбора варианта меню
     */
    onItemCheck?: (checkedItems?: any[], event?: React.ChangeEvent<any>) => void;
    /**
     * Обработчик события наведения курсора на меню
     */
    onMouseEnter?: (event?: React.MouseEvent<any>) => void;
    /**
     * Обработчик события снятия курсора с меню
     */
    onMouseLeave?: (event?: React.MouseEvent<any>) => void;
    /**
     * Обработчик события нажатия на клавишу клавиатуры в момент, когда фокус находится на компоненте
     */
    onKeyDown?: (event?: React.KeyboardEvent<any>, item?: any) => void;
    /**
     * Обработчик события отжатия на клавишу клавиатуры в момент, когда фокус находится на компоненте
     */
    onKeyUp?: (event?: React.KeyboardEvent<any>) => void;
    /**
     * Обработчик фокуса
     */
    onFocus?: (event?: React.FocusEvent<any>) => void;
    /**
     * Обработчик снятия фокуса
     */
    onBlur?: (event?: React.FocusEvent<any>) => void;
    /**
     * Обработчик события выделения элемента меню, принимает на вход переменную типа HighlightedItem
     */
    onHighlightItem?: (highlightedItem?: any) => void;
    /**
     * Идентификатор для систем автоматизированного тестирования
     */
    'data-test-id'?: string;
};
/**
 * Компонент меню.
 */
export declare class Menu extends React.Component<MenuProps> {
    protected cn: (this: void | {
        props?: Record<string, unknown>;
    }, elementNameOrMods?: string | {
        [key: string]: string | number | boolean;
    }, mods?: {
        [key: string]: string | number | boolean;
    }) => string;
    static defaultProps: Partial<MenuProps>;
    state: {
        highlightedItem: any;
        checkedItems: any[];
        hovered: boolean;
    };
    root: any;
    private menuItemList;
    private blurTimeoutId;
    componentDidMount(): void;
    UNSAFE_componentWillReceiveProps(nextProps: any): void;
    UNSAFE_componentWillUpdate(): void;
    componentWillUnmount(): void;
    render(): JSX.Element;
    renderMenuItemList(content: any): any[];
    renderMenuItem(item: any): JSX.Element;
    private handleMenuItemClick;
    private handleMouseEnter;
    private handleMouseLeave;
    private handleKeyUp;
    private handleKeyDown;
    private handleFocus;
    private handleBlur;
    private handleMenuItemMouseEnter;
    private handleMenuItemMouseLeave;
    /**
     * Возвращает корневой `HTMLElement` компонента.
     */
    getNode(): any;
    /**
     * Устанавливает фокус на меню.
     */
    focus(): void;
    /**
     * Убирает фокус с меню.
     */
    blur(): void;
    private setNewCheckedItems;
    /**
     * Изменяет выбранные значения.
     *
     * @param checkedItems Список выбранных значений
     * @param event
     */
    private changeCheckedItems;
    private getIndexInCheckedItemsList;
    private getFirstItem;
}
declare const _default: React.ForwardRefExoticComponent<MenuProps & React.RefAttributes<Menu>> & Menu;
export default _default;
