import React from 'react';
import type { TGetRootNode } from '../../lib/rootNode//rootNodeDecorator.js';
export interface GlobalLoaderProps {
    /** Задержка до появления лоадера в миллисекундах. */
    delayBeforeShow?: number;
    /** Задержка до исчезновения лоадера в миллисекундах. */
    delayBeforeHide?: number;
    /** Ожидаемое время(ms) ответа сервера. */
    expectedResponseTime?: number;
    /** Показывать лоадер в виде бегающей полоски. */
    rejected?: boolean;
    /** Показывать лоадер. */
    active?: boolean;
    /** Отключить анимацию. */
    disableAnimations?: boolean;
    /** Событие после появления лоадера. */
    onStart?(): void;
    /** Событие после исчезновения лоадера. */
    onDone?(): void;
    /** Событие после вызова reject. */
    onReject?(): void;
    /** Событие после вызова accept. */
    onAccept?(): void;
}
export interface GlobalLoaderState {
    visible: boolean;
    done: boolean;
    rejected: boolean;
    accept: boolean;
    dead: boolean;
    successAnimationInProgress: boolean;
    expectedResponseTime: number;
    started: boolean;
}
export declare const GlobalLoaderDataTids: {
    readonly root: "GlobalLoader";
};
type DefaultProps = Required<Pick<GlobalLoaderProps, 'expectedResponseTime' | 'delayBeforeShow' | 'delayBeforeHide' | 'rejected' | 'active' | 'disableAnimations'>>;
/**
 * Универсальный индикатор обмена данными с сервером.
 * Он появляется у верхней границы экрана и выглядит как тоненькая полоска, окрашенная в фирменный цвет продукта.
 *
 * Глобальный лоадер может быть только один в приложении. Поэтому каждый новый экземпляр компонента заменяет предыдущий экземпляр и начинает перехватывать статические методы.
 *
 * Предполагается монтирование компонента в единственном месте. И управление им через статические методы, либо через пропсы.
 *
 */
export declare class GlobalLoader extends React.Component<GlobalLoaderProps, GlobalLoaderState> {
    static __KONTUR_REACT_UI__: string;
    static displayName: string;
    getRootNode: TGetRootNode;
    private setRootNode;
    private getProps;
    private readonly startTask;
    private readonly stopTask;
    private readonly resumeTaskAfterSuccessAnimation;
    static defaultProps: DefaultProps;
    constructor(props: GlobalLoaderProps);
    componentDidMount(): void;
    componentWillUnmount(): void;
    componentDidUpdate(prevProps: Readonly<GlobalLoaderProps>): void;
    render(): React.JSX.Element | false;
    /**
     * Запускает анимацию лоадера. <br />
     * Равносильно установке пропа `active = true`.
     *
     * @public
     */
    static start: (expectedResponseTime?: number) => void;
    /**
     * Показывает анимацию успешного завершения загрузки. <br />
     * Равносильно установке пропа `active = false`.
     *
     * @public
     */
    static done: () => void;
    /**
     * Переключает анимацию лоадера в состояние бегающей полоски. <br />
     * Равносильно установке пропа `rejected = true`.
     *
     * @public
     */
    static reject: () => void;
    /**
     * Возвращает лоадер из состояния бегающей полоски в обычное и продолжает анимацию с того места, на котором она была прервана. <br />
     * Равносильно установке пропа `rejected = false`.
     *
     * @public
     */
    static accept: () => void;
    setActive: () => void;
    setDone: () => void;
    setReject: (reject: boolean) => void;
    updateExpectedResponseTime(expectedResponseTime: number): void;
    kill: () => void;
}
export {};
