import type { LoadDataStateProgress } from './load-data.types.js';
import { Observer } from '../observer.js';
export type ProgressbarStage = keyof typeof loadStages;
export type ProgressbarTiming = {
    stage: ProgressbarStage;
    title: string;
    duration: number;
};
export type ProgressbarOnTimingCallback = (timing: ProgressbarTiming) => void;
export type ProgressbarOnFinishCallback = (timings: ProgressbarTiming[] & {
    awaitRepaintPenaltyTime: number;
}) => void;
export type ProgressbarOptions = Partial<{
    onTiming: ProgressbarOnTimingCallback;
    onFinish: ProgressbarOnFinishCallback;
    domReady: Promise<any>;
}>;
export type ProgressbarState = {
    stage: ProgressbarStage;
    progress: LoadDataStateProgress | null;
    error: Error | null;
};
export declare const loadStages: {
    inited: {
        value: number;
        duration: number;
        title: string;
    };
    request: {
        value: number;
        duration: number;
        title: string;
    };
    receiving: {
        value: number;
        duration: number;
        title: string;
    };
    decoding: {
        value: number;
        duration: number;
        title: string;
    };
    received: {
        value: number;
        duration: number;
        title: string;
    };
    prepare: {
        value: number;
        duration: number;
        title: string;
    };
    initui: {
        value: number;
        duration: number;
        title: string;
    };
    done: {
        value: number;
        duration: number;
        title: string;
    };
    error: {
        value: number;
        duration: number;
        title: string;
    };
};
export declare function decodeStageProgress(stage: ProgressbarStage, progress: ProgressbarState['progress'], step?: string): {
    stageTitle: string;
    progressValue: number;
    progressText: string | null;
    stepText: string;
    title: string;
};
export declare class Progressbar extends Observer<ProgressbarState> {
    #private;
    startTime: number | null;
    lastStageStartTime: number | null;
    awaitRepaintPenaltyTime: number;
    finished: boolean;
    awaitRepaint: number | null;
    timings: ProgressbarTiming[];
    onTiming: ProgressbarOnTimingCallback;
    onFinish: ProgressbarOnFinishCallback;
    appearanceDelay: number;
    domReady: Promise<any>;
    el: HTMLElement;
    constructor({ onTiming, onFinish, domReady }: ProgressbarOptions);
    recordTiming(stage: ProgressbarStage, start: number, end?: number): void;
    setState(state: Partial<ProgressbarState>, step?: string): Promise<void>;
    setStateStep(step: string): Promise<void>;
    finish(error?: Error): void;
    dispose(): void;
}
