import { ID, UploaderOptions, UploadFile, UploadTask } from '../interface';
import { FileDragger, FilePicker } from './modules';
import { Observable } from 'rxjs';
import Base from './Base';
export declare class Uploader extends Base {
    readonly id?: ID;
    readonly options: UploaderOptions;
    readonly taskQueue: UploadTask[];
    readonly filePickers: FilePicker[];
    readonly fileDraggers: FileDragger[];
    private taskHandlerMap;
    private upload$;
    private subscription;
    private uploadSubscription;
    private taskSubject;
    private action;
    private pause$;
    private clear$;
    constructor(options?: UploaderOptions);
    static create(options?: UploaderOptions): Uploader;
    private mergeOptions;
    private validateOptions;
    upload(task?: UploadTask, action?: 'resume' | 'retry'): void;
    private checkComplete;
    private executeForResult;
    resume(task?: UploadTask): void;
    retry(task?: UploadTask): void;
    pause(task?: UploadTask): void;
    cancel(task?: UploadTask): Promise<void | UploadTask>;
    clear(): Promise<void>;
    cancelFile(item: {
        task: UploadTask;
        files: UploadFile[];
    }): void;
    isUploading(): boolean;
    hasError(): boolean;
    getErrorTasks(): UploadTask[];
    isComplete(): boolean;
    destory(): void;
    private removeTask;
    private rebindTaskHandlerEvent;
    private getTaskHandler;
    private freeHandler;
    private putNextTask;
    private taskHandlerEventCallback;
    private changeUploadTaskStatus;
    private restoreTask;
    initFilePickersAndDraggers(): void;
    private initEventHandler;
    add(files: File[]): Observable<{
        files: File[];
        tasks: UploadTask[];
    }>;
    addFilesAsync(...files: Array<File>): Promise<UploadTask[]>;
    private generateTask;
}
