import type { HTMLAttributes } from 'react';
import React from 'react';
import type { ScrollContainerScrollState } from '../../components/ScrollContainer';
import type { TGetRootNode } from '../../lib/rootNode';
import type { CommonProps } from '../CommonWrapper';
export interface MenuProps extends CommonProps, Pick<HTMLAttributes<HTMLDivElement>, 'id'> {
    children: React.ReactNode;
    hasMargin?: boolean;
    /**
     * Максимальная высота применяется только для скролл контейнера
     *
     * Высота `header` и `footer` в нее не включены
     */
    maxHeight?: number | string;
    onItemClick?: (event: React.SyntheticEvent<HTMLElement>) => void;
    width?: number | string;
    preventWindowScroll?: boolean;
    /**
     * Отключение кастомного скролла контейнера
     */
    disableScrollContainer?: boolean;
    align?: 'left' | 'right';
    /**
     * Предотвращает выравнивание текста всех пунктов меню относительно друг друга.
     * Так, если хотя бы у одного пункта меню есть иконка, текст в  остальных пунктах меню будет выровнен относительно пункта меню с иконкой
     */
    preventIconsOffset?: boolean;
    onKeyDown?: (event: React.KeyboardEvent<HTMLElement>) => void;
    header?: React.ReactNode;
    footer?: React.ReactNode;
    /**
     * Циклический перебор айтемов меню (по-дефолтну включен)
     */
    cyclicSelection?: boolean;
    initialSelectedItemIndex?: number;
}
export interface MenuState {
    highlightedIndex: number;
    maxHeight: number | string;
    scrollState: ScrollContainerScrollState;
    enableIconPadding: boolean;
}
export declare const MenuDataTids: {
    readonly root: "Menu__root";
};
type DefaultProps = Required<Pick<MenuProps, 'align' | 'width' | 'hasMargin' | 'maxHeight' | 'preventWindowScroll' | 'cyclicSelection' | 'initialSelectedItemIndex'>>;
export declare class Menu extends React.PureComponent<MenuProps, MenuState> {
    static __KONTUR_REACT_UI__: string;
    static displayName: string;
    static defaultProps: DefaultProps;
    private getProps;
    state: MenuState;
    private theme;
    private scrollContainer;
    private isMobileLayout;
    private unmounted;
    getRootNode: TGetRootNode;
    private setRootNode;
    private header;
    private footer;
    private contentRef;
    private menuNavigation;
    componentWillUnmount(): void;
    componentDidMount(): void;
    componentDidUpdate(prevProps: MenuProps): void;
    focus(): void;
    private focusOnRootElement;
    render(): React.JSX.Element;
    /**
     * @public
     */
    up(): void;
    /**
     * @public
     */
    down(): void;
    /**
     * @public
     */
    enter(event: React.SyntheticEvent<HTMLElement>): boolean;
    /**
     * @public
     */
    reset(): void;
    /**
     * @public
     */
    hasHighlightedItem(): boolean;
    highlightItem(index: number): void;
    private renderMain;
    private renderHeader;
    private renderFooter;
    private renderMenuSeparatorWithNoMargin;
    private setInitialSelection;
    private shouldRecalculateMaxHeight;
    private calculateMaxHeight;
    private refScrollContainer;
    private scrollToSelected;
    private scrollToTop;
    private scrollToBottom;
    private scroll;
    private move;
    private isEmpty;
    private handleKeyDown;
    private getStyle;
    private handleScrollStateChange;
    private setEnableIconPadding;
}
export {};
