import React from 'react';
import type { AnyObject } from '../../lib/utils';
import type { SpinnerProps } from '../Spinner';
import type { CommonProps } from '../../internal/CommonWrapper';
import type { TGetRootNode } from '../../lib/rootNode';
declare const types: readonly ["mini", "normal", "big"];
export type LoaderType = (typeof types)[number];
export interface LoaderProps extends CommonProps {
    /** @ignore */
    children?: React.ReactNode;
    /** Задает состояние лоадера.
     * @default false */
    active?: boolean;
    /** Задает подпись под спиннером.
     * @default  "Загрузка"
     */
    caption?: SpinnerProps['caption'];
    /** Задает компонент, заменяющий спиннер. */
    component?: React.ReactNode;
    /** Задает размер спиннера и текста.
     * @default normal. */
    type?: LoaderType;
    /** Устанавливает время в миллисекундах для показа вуали без спиннера.
     * @default 300 */
    delayBeforeSpinnerShow?: number;
    /** Устанавливает минимальное время в миллисекундах для показа спиннера.
     * @default 1000. */
    minimalDelayBeforeSpinnerHide?: number;
}
export interface LoaderState {
    isStickySpinner: boolean;
    isSpinnerVisible: boolean;
    isLoaderActive: boolean;
    spinnerStyle?: AnyObject;
}
export declare const LoaderDataTids: {
    readonly idle: "Loader__Idle";
    readonly veil: "Loader__Veil";
    readonly spinner: "Loader__Spinner";
};
type DefaultProps = Required<Pick<LoaderProps, 'type' | 'active' | 'delayBeforeSpinnerShow' | 'minimalDelayBeforeSpinnerHide'>>;
/**
 * Компонент `Loader` принимает внутрь себя контент, поверх которого в активном состоянии `Loader`'а будет отрисован спиннер.
 *
 * Если вам нужен только сам спиннер без дополнительного функционала - используйте компонент Spinner.
 */
export declare class Loader extends React.Component<LoaderProps, LoaderState> {
    static __KONTUR_REACT_UI__: string;
    static displayName: string;
    static defaultProps: DefaultProps;
    private getProps;
    private theme;
    getRootNode: TGetRootNode;
    private setRootNode;
    private spinnerContainerNode;
    private childrenContainerNode;
    private spinnerNode;
    private layoutEvents;
    private spinnerTask;
    private childrenObserver;
    constructor(props: LoaderProps);
    componentDidMount(): void;
    componentDidUpdate(prevProps: Readonly<LoaderProps>, prevState: Readonly<LoaderState>): void;
    componentWillUnmount(): void;
    static getDerivedStateFromProps(props: LoaderProps, state: LoaderState): Partial<LoaderState>;
    render(): React.JSX.Element;
    private renderMain;
    private childrenRef;
    private spinnerRef;
    private renderSpinner;
    private checkSpinnerPosition;
    private disableChildrenFocus;
    private enableChildrenFocus;
    private makeObservable;
    private makeUnobservable;
}
export {};
