import { ButtonProps } from '../../../component/Button/type'; import React from 'react'; export interface UploadValidator { size?: (size: number) => Error | void; ext?: (ext: string) => Error | void; customValidator?: (file: File) => Error | void; } export declare enum UpdateFileListItemAction { UPDATE = "UPDATE", REMOVE = "REMOVE", RECOVER = "RECOVER", CACHE = "CACHE" } export interface UploadProps { accept?: string; action?: string | ((file: File) => string); children?: React.ReactNode; className?: string; headers?: any; limit?: number; multiple?: boolean; name?: string; onChange?: (fileList: EthanFile[], file: EthanFile) => void; onProgress?: ((file: EthanFile) => void) | boolean; onError?: (xhr: XMLHttpRequest) => string; params?: Record; recoverAble?: boolean; request?: (options: RequestOptions) => XMLHttpRequest; value?: EthanFile[]; defaultValue?: EthanFile[]; style?: React.CSSProperties; withCredentials?: boolean; showUploadList?: boolean; validator?: UploadValidator; disabled?: boolean; renderContent?: (file: EthanFile) => React.ReactNode; drop?: boolean; beforeUpload?: (blob: File) => Promise; } export interface IUploadProps extends UploadProps { imageStyle?: React.CSSProperties; customResult?: React.ElementType; } export declare type UploadFileStatus = ('UPLOADING' | 'SUCCESS' | 'ERROR' | 'REMOVED' | 'MANUAL' | 'PENDING') | (string & {}); export interface EthanFile { id?: string; name?: string; process?: number; status?: UploadFileStatus; blob?: File; message?: string; xhr?: XMLHttpRequest; data?: string; } export interface UploadState { fileList: EthanFile[]; } export interface RequestOptions { url: string; name: string; file: File; onProgress?: (e: ProgressEvent) => void; onError: (xhr: XMLHttpRequest) => void; onLoad(xhr: XMLHttpRequest): void; withCredentials: XMLHttpRequest['withCredentials']; params?: Record | ((file: File) => Record); headers?: Record; } export interface UploadContext extends Pick { addFile: any; } export interface DropProps extends Pick { onDrop(files: File[], dropData?: number): void; className?: string; dropData?: number; children?: React.ReactNode; drop: boolean; } export interface FileInputProps extends Pick { onChange: React.ChangeEventHandler; } export interface FileProps extends EthanFile { onRemove(id: string): void; onRecover(id: string): void; style?: React.CSSProperties; file: EthanFile; renderContent?: (file: EthanFile) => React.ReactNode; showRecover: boolean; } export interface ImageFileProps extends Omit { style: React.CSSProperties; } export interface UploadImageValidator extends UploadValidator { imageSize?: (image: HTMLImageElement) => Error | void; } export interface UploadImageProps extends Omit { height?: number; width?: number; validator?: UploadImageValidator; } export interface UploadImageState { urlInvalid: boolean; } export interface UploadProgressProps extends UploadProps, Pick { loading?: React.ReactNode; placeholder?: React.ReactNode; className?: string; } export interface UploadProgressState { progress: number; } export declare type ImageUploadComponent = React.ComponentClass; export declare type UploadProgressComponent = React.ComponentClass; export declare type BeforeUploadFileType = File | EthanFile;