import React, { ComponentType, CSSProperties, ReactElement } from 'react';
import { Direction, IPopupProps } from '../Popup';
import './Dropdown.css';
export declare const cnDropdown: import("@bem-react/classname").ClassNameFormatter;
export declare type TriggerType = 'click' | 'hover' | 'focus';
export interface DropdownProps {
    /**
     * Делает попап видимым
     */
    visible: boolean;
    /**
     * Элемент триггер, например, Link или Button
     */
    children: ReactElement;
    /**
     * Содержимое попапа
     */
    content: IPopupProps['children'];
    /**
     * Html атрибут `style`
     */
    style?: CSSProperties;
    /**
     * Направление раскрытия попапа
     */
    direction?: Direction | Direction[];
    /**
     * Действие вызывающее показ попапа
     */
    trigger: TriggerType | TriggerType[];
    /**
     * Обработчик на изменение видимости попапа
     */
    onVisibleChange: (visible: boolean) => void;
    /**
     * Временная задержка (секунды) на появление попапа
     * @default 0
     */
    mouseEnterDelay: number;
    /**
     * Временная задержка (секунды) на исчезновение попапа
     * @default 0.1
     */
    mouseLeaveDelay: number;
    /**
     * Временная задержка (секунды) на появление попапа
     * @default 0
     */
    focusDelay: number;
    /**
     * Временная задержка (секунды) на исчезновение попапа
     * @default 0.15
     */
    blurDelay: number;
}
export interface DropdownState {
    visible: boolean;
    prevVisible: boolean;
}
/**
 * Компонент для создания выпадающего списка
 * @param {DropdownProps} props
 */
export declare const withDropdown: <T extends IPopupProps>(Popup: React.ComponentType<T>) => {
    new (props: Readonly<T & DropdownProps>): {
        componentWillUnmount(): void;
        innerRef: React.RefObject<HTMLElement>;
        delayTimer: null | ReturnType<typeof setTimeout>;
        readonly state: {
            visible: (T & DropdownProps)["visible"];
            prevVisible: (T & DropdownProps)["visible"];
        };
        delaySetPopupVisible(visible: boolean, delay: number): void;
        setPopupVisible(visible: boolean): void;
        onClick: () => void;
        onMouseEnter: () => void;
        onMouseLeave: () => void;
        onFocus: () => void;
        onBlur: () => void;
        onPopupMouseEnter: () => void;
        onPopupMouseLeave: () => void;
        clearDelayTimer(): void;
        render(): JSX.Element;
        context: any;
        setState<K extends "visible" | "prevVisible">(state: DropdownState | ((prevState: Readonly<DropdownState>, props: Readonly<T & DropdownProps>) => DropdownState | Pick<DropdownState, K> | null) | Pick<DropdownState, K> | null, callback?: (() => void) | undefined): void;
        forceUpdate(callBack?: (() => void) | undefined): void;
        readonly props: Readonly<T & DropdownProps> & Readonly<{
            children?: React.ReactNode;
        }>;
        refs: {
            [key: string]: React.ReactInstance;
        };
        componentDidMount?(): void;
        shouldComponentUpdate?(nextProps: Readonly<T & DropdownProps>, nextState: Readonly<DropdownState>, nextContext: any): boolean;
        componentDidCatch?(error: Error, errorInfo: React.ErrorInfo): void;
        getSnapshotBeforeUpdate?(prevProps: Readonly<T & DropdownProps>, prevState: Readonly<DropdownState>): any;
        componentDidUpdate?(prevProps: Readonly<T & DropdownProps>, prevState: Readonly<DropdownState>, snapshot?: any): void;
        componentWillMount?(): void;
        UNSAFE_componentWillMount?(): void;
        componentWillReceiveProps?(nextProps: Readonly<T & DropdownProps>, nextContext: any): void;
        UNSAFE_componentWillReceiveProps?(nextProps: Readonly<T & DropdownProps>, nextContext: any): void;
        componentWillUpdate?(nextProps: Readonly<T & DropdownProps>, nextState: Readonly<DropdownState>, nextContext: any): void;
        UNSAFE_componentWillUpdate?(nextProps: Readonly<T & DropdownProps>, nextState: Readonly<DropdownState>, nextContext: any): void;
    };
    new (props: T & DropdownProps, context?: any): {
        componentWillUnmount(): void;
        innerRef: React.RefObject<HTMLElement>;
        delayTimer: null | ReturnType<typeof setTimeout>;
        readonly state: {
            visible: (T & DropdownProps)["visible"];
            prevVisible: (T & DropdownProps)["visible"];
        };
        delaySetPopupVisible(visible: boolean, delay: number): void;
        setPopupVisible(visible: boolean): void;
        onClick: () => void;
        onMouseEnter: () => void;
        onMouseLeave: () => void;
        onFocus: () => void;
        onBlur: () => void;
        onPopupMouseEnter: () => void;
        onPopupMouseLeave: () => void;
        clearDelayTimer(): void;
        render(): JSX.Element;
        context: any;
        setState<K extends "visible" | "prevVisible">(state: DropdownState | ((prevState: Readonly<DropdownState>, props: Readonly<T & DropdownProps>) => DropdownState | Pick<DropdownState, K> | null) | Pick<DropdownState, K> | null, callback?: (() => void) | undefined): void;
        forceUpdate(callBack?: (() => void) | undefined): void;
        readonly props: Readonly<T & DropdownProps> & Readonly<{
            children?: React.ReactNode;
        }>;
        refs: {
            [key: string]: React.ReactInstance;
        };
        componentDidMount?(): void;
        shouldComponentUpdate?(nextProps: Readonly<T & DropdownProps>, nextState: Readonly<DropdownState>, nextContext: any): boolean;
        componentDidCatch?(error: Error, errorInfo: React.ErrorInfo): void;
        getSnapshotBeforeUpdate?(prevProps: Readonly<T & DropdownProps>, prevState: Readonly<DropdownState>): any;
        componentDidUpdate?(prevProps: Readonly<T & DropdownProps>, prevState: Readonly<DropdownState>, snapshot?: any): void;
        componentWillMount?(): void;
        UNSAFE_componentWillMount?(): void;
        componentWillReceiveProps?(nextProps: Readonly<T & DropdownProps>, nextContext: any): void;
        UNSAFE_componentWillReceiveProps?(nextProps: Readonly<T & DropdownProps>, nextContext: any): void;
        componentWillUpdate?(nextProps: Readonly<T & DropdownProps>, nextState: Readonly<DropdownState>, nextContext: any): void;
        UNSAFE_componentWillUpdate?(nextProps: Readonly<T & DropdownProps>, nextState: Readonly<DropdownState>, nextContext: any): void;
    };
    displayName: string;
    defaultProps: {
        onVisibleChange: () => void;
        mouseEnterDelay: number;
        mouseLeaveDelay: number;
        focusDelay: number;
        blurDelay: number;
        visible: boolean;
        trigger: string[];
        direction: string;
    };
    contextType?: React.Context<any> | undefined;
};
