import { ReactNode } from 'react';
import { UploadResponseData } from '@uni/file/types/types';
import { LocaledComponentProps } from '../locale';
import { ProgressProps } from '../progress';
import { BaseComponentAttributes, BasicSizeType } from '../utils/types';
export interface FileItem {
    uid: string;
    name: string;
    state: 'selected' | 'uploading' | 'done' | 'error';
    response: any;
    url: string;
    dataURL: string;
    file: string | File;
    imgURL?: string;
    isImage: boolean;
    downloadURL?: string;
    percent?: number;
}
export interface UploadOptions {
    action: string;
    data: any;
    headers: {
        [x: string]: any;
    };
}
export interface LocaleType {
    reupload?: string;
    limit?: string;
}
export interface RequestResp {
    abort: () => void;
}
export interface UploadProps extends BaseComponentAttributes, LocaledComponentProps<LocaleType> {
    action: string;
    withCredentials?: boolean;
    name?: string;
    fileKeyName?: string;
    data?: any | (() => any);
    headers?: {
        [x: string]: any;
    };
    label?: string;
    extraIcon?: string;
    previewClassName?: string;
    singleLimit?: number;
    filePicker?: () => Promise<{
        data?: string[];
        files?: FileItem[];
    }>;
    value?: FileItem[];
    defaultValue?: FileItem[];
    listType?: 'image' | 'text' | 'card';
    request?: (option: UploadOptions) => RequestResp;
    formatter?: (response: UploadResponseData, file: FileItem) => any;
    size?: BasicSizeType;
    fileType?: 'image' | 'video' | 'audio';
    showAddButton?: boolean;
    limit?: number;
    accept?: string;
    useDataURL?: boolean;
    disabled?: boolean;
    autoUpload?: boolean;
    hasRemove?: boolean;
    beforeUpload?: (file: FileItem, options: UploadOptions) => boolean | UploadOptions | Promise<UploadOptions>;
    onPreview?: (file?: FileItem, e?: any) => void;
    onProgress?: () => void;
    onSuccess?: (file: FileItem, value: FileItem[]) => void;
    onError?: (file: FileItem, value: FileItem[]) => void;
    onSelect?: () => void;
    onChange?: (info: FileItem[]) => void;
    onRemove?: (file: FileItem) => boolean | Promise<boolean>;
    afterSelect?: (file: FileItem) => boolean;
    progressProps?: ProgressProps;
    sizeType?: Array<'original' | 'compressed'>;
    sourceType?: Array<'camera' | 'album'>;
    children?: ReactNode[];
}
export interface RequestObject {
    onProgress: (event: {
        percent: number;
    }) => void;
    onError: (event: Error, body?: any) => void;
    onSuccess: (body: UploadResponseData) => void;
    fileType: 'image' | 'video' | 'audio';
    data: any;
    filename: string;
    file: string | File;
    withCredentials: boolean;
    action: string;
    method: string;
    timeout: number;
    headers: {
        [x: string]: any;
    };
}
