/**
 * @license chowa v1.1.3
 *
 * Copyright (c) Chowa Techonlogies Co.,Ltd.(http://www.chowa.cn).
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 */
import * as React from 'react';
import * as PropTypes from 'prop-types';
import { StorageFile, UploadFile } from './tool';
export interface UploadProps {
    className?: string;
    style?: React.CSSProperties;
    mode?: 'select' | 'drag';
    accept?: string;
    exts?: string[];
    size?: number;
    action: string;
    multiple?: boolean;
    capture?: boolean;
    disabled?: boolean;
    directory?: boolean;
    headers?: object;
    name?: string;
    data?: object;
    defaultValue?: StorageFile[];
    value?: StorageFile[];
    onChange?: (storageFiles: StorageFile[]) => void;
    onBeforeUpload?: (file: File) => Promise<any> | boolean;
    onProgress?: (file: File, e: ProgressEvent) => void;
    onSuccess?: (file: File, e: XMLHttpRequest) => void;
    onError?: (file: File, e: ProgressEvent) => void;
    onRemove?: (uploadFile: UploadFile) => void;
    onExtError?: (file: File) => void;
    onSizeError?: (file: File) => void;
    formatter?: (uploadFile: UploadFile) => React.ReactNode;
    showUploadList?: boolean;
}
export interface UploadState {
    uploadFiles: UploadFile[];
}
declare class Upload extends React.PureComponent<UploadProps, UploadState> {
    static propTypes: {
        className: PropTypes.Requireable<string>;
        style: PropTypes.Requireable<object>;
        mode: PropTypes.Requireable<string>;
        accept: PropTypes.Validator<string>;
        exts: PropTypes.Requireable<any[]>;
        size: PropTypes.Requireable<number>;
        action: PropTypes.Requireable<string>;
        capture: PropTypes.Requireable<boolean>;
        multiple: PropTypes.Requireable<boolean>;
        disabled: PropTypes.Requireable<boolean>;
        directory: PropTypes.Requireable<boolean>;
        headers: PropTypes.Requireable<object>;
        name: PropTypes.Requireable<string>;
        data: PropTypes.Requireable<object>;
        defaultValue: PropTypes.Requireable<any[]>;
        value: PropTypes.Requireable<any[]>;
        onChange: PropTypes.Requireable<(...args: any[]) => any>;
        onBeforeUpload: PropTypes.Requireable<(...args: any[]) => any>;
        onProgress: PropTypes.Requireable<(...args: any[]) => any>;
        onSuccess: PropTypes.Requireable<(...args: any[]) => any>;
        onRemove: PropTypes.Requireable<(...args: any[]) => any>;
        onError: PropTypes.Requireable<(...args: any[]) => any>;
        onExtError: PropTypes.Requireable<(...args: any[]) => any>;
        onSizeError: PropTypes.Requireable<(...args: any[]) => any>;
        formatter: PropTypes.Requireable<(...args: any[]) => any>;
        showUploadList: PropTypes.Requireable<boolean>;
    };
    static defaultProps: {
        name: string;
        mode: string;
        capture: boolean;
        multiple: boolean;
        accept: string;
        directory: boolean;
        showUploadList: boolean;
    };
    private InputEle;
    private request;
    constructor(props: UploadProps);
    componentDidUpdate(preProps: UploadProps): void;
    componentWillUnmount(): void;
    triggerChange(): void;
    private chooseFile;
    private onInputChangeHandler;
    private appendUploadFile;
    private removeFile;
    render(): JSX.Element;
}
export default Upload;
