import type { AriaAttributes } from 'react';
import React from 'react';
import type { ThemeIn } from '../../lib/theming/Theme';
import type { Nullable } from '../../typings/utility-types';
import type { CommonProps } from '../../internal/CommonWrapper';
import type { TGetRootNode } from '../../lib/rootNode';
import { ToastView } from './ToastView';
export interface Action {
    label: string;
    handler: () => void;
    'aria-label'?: string;
}
/**
 * Состояния тоста:
 *
 * - default стиль для отображения по-умолчанию
 * - error стиль для отображения ошибок
 **/
export type ToastUse = 'default' | 'error';
export interface ToastState {
    notification: Nullable<React.ReactNode>;
    action: Nullable<Action>;
    id: number;
    showTime: Nullable<number>;
    showCloseIcon?: boolean;
    currentUse: ToastUse;
}
export interface ToastProps extends Pick<AriaAttributes, 'aria-label'>, CommonProps {
    /** Задает функцию, которая вызывается при возникновении тоста. */
    onPush?: (notification: string, action?: Action) => void;
    /** Задает функцию, которая вызывается при закрытии тоста. */
    onClose?: (notification: string, action?: Action) => void;
    /** Задает объект с переменными темы. Он будет объединён с темой из контекста. */
    theme?: ThemeIn;
}
/** @deprecated выпилить старый подход к api push Toast-а в react-ui 6.0 */
export type ToastPush = (notification: React.ReactNode, action?: Nullable<Action>, showTime?: number, showCloseIcon?: boolean) => void;
/** Объект с конфигурацией отображения Toast-а */
export interface ToastPushConfig {
    action?: Nullable<Action>;
    showTime?: number;
    showCloseIcon?: boolean;
    /**
     * Определяет стили для тоста.
     *
     * - default стиль для отображения по-умолчанию
     * - error стиль для отображения ошибок
     *
     * По-умолчанию будет использован стиль default.
     **/
    use?: ToastUse;
}
/** TODO: Новый Api для метода push в Toast. Станет api по-умолчанию с версии 6.0. В мажоре нужно будет убрать New из названия */
export type ToastNewPushApi = (notification: React.ReactNode, config: ToastPushConfig) => void;
export type ToastClose = () => void;
export declare const ToastDataTids: {
    readonly toastStatic: "StaticToast";
    readonly toastView: "ToastView__root";
    readonly action: "ToastView__action";
    readonly close: "ToastView__close";
};
/**
 * `Toast` — это короткое немодальное уведомление, которое сообщает пользователю о результате выполнения его команды.
 * Результат может быть положительным, отрицательным или нейтральным.
 *
 * Доступен статический метод: `Toast.push(notification, action?, showTime?)`.
 * Однако, при его использовании не работает кастомизация и могут быть проблемы с перекрытием уведомления другими элементами страницы.
 *
 * В обозримом будущем планируем **полностью избавиться** от статического метода в компоненте `Toast`.
 *
 * В качестве альтернативы для `Toast.push` мы рекомендуем использовать компонент `SingleToast` или вызов метода push через `ref`.
 *
 * Метод `push` через ref поддерживает два api.
 *
 * 1. Устаревший с последовательной передачей аргументов: `toastRef.current.push('Hi', { label: 'Cancel', handler: () => {} }, 15000)`
 * 2. Новый с передачей объекта конфигурации: `toastRef.current.push('Hi', { action: { label: 'Cancel', handler: () => {} }, showTime: 15000 })`
 *
 * Устаревший подход с передачей аргументов последовательным образом **будет удалён** в следующей мажорной версии.
 */
export declare class Toast extends React.Component<ToastProps, ToastState> {
    static __KONTUR_REACT_UI__: string;
    static displayName: string;
    getRootNode: TGetRootNode;
    private setRootNode;
    private theme;
    /** @deprecated use `push` method in ref or `SingleToast.push` */
    static push: ToastPush;
    /** @deprecated use `close` method in ref or `SingleToast.close` */
    static close: ToastClose;
    _toast: Nullable<ToastView>;
    private _timeout;
    private rootRef;
    constructor(props: ToastProps);
    componentWillUnmount(): void;
    render(): React.JSX.Element;
    /**
     * Показывает тост с `notification` в качестве сообщения.
     * Тост автоматически скрывается через 3 или 7 секунд,
     * в зависимости от наличия у него кнопки `action` внутри config-а.
     * Время показа можно задать вручную, передав `showTime` внутри config-а.
     *
     * @public
     * @param {React.ReactNode} notification
     * @param {ToastPushConfig} config объект с конфигурацией отображения компонента Toast
     *
     * @description Сейчас есть поддержка старого api метода push с передачей аргументов последовательно, но с версии 6.0 этот функционал будет удалён.
     * @example
     * // Будет удален в 6.0
     * push('notification', { label: "cat meow", handler: () => {} }, 15_000, false, "error")
     *
     * @example
     * // Останется в > 6.0
     * push('notification', { action: { label: "cat meow", handler: () => {} }, showTime: 15_000, showCloseIcon: false, use: "error" })
     */
    push(notification: React.ReactNode, configOrAction?: ToastPushConfig | Nullable<Action>, showTime?: number, showCloseIcon?: boolean, use?: ToastUse): void;
    /**
     * @public
     */
    close: () => void;
    private _renderToast;
    private setRootRef;
    private _clearTimer;
    private _setTimer;
    private _refToast;
}
export declare function isNewToastPushApi(value: unknown): value is ToastPushConfig;
export declare function isOldToastPushApi(value: unknown): value is Action;
/** Хелпер для случая, когда передаём только текст */
export declare function isEmptySecondArg(value: unknown): value is null | undefined;
