import { FormLabelProps } from '../../module';
export declare enum MIMETypes {
    Images = "image/jpeg,image/png,image/gif,image/svg+xml",
    Audio = "audio/mpeg,audio/wav",
    Videos = "video/mp4,video/x-msvideo,video/quicktime,video/x-ms-wmv,video/x-matroska,video/x-flv,video/webm,video/mpeg,video/3gpp,video/3gpp2,video/ogg,video/x-m4v",
    Media = "image/jpeg,image/png,image/gif,image/svg+xml,audio/mpeg,audio/wav,video/mp4,video/x-msvideo,video/quicktime,video/x-ms-wmv,video/x-matroska,video/x-flv,video/webm,video/mpeg,video/3gpp,video/3gpp2,video/ogg,video/x-m4v",
    Documents = "application/pdf,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document,application/vnd.ms-powerpoint,application/vnd.openxmlformats-officedocument.presentationml.presentation",
    Text = "text/plain",
    Archives = "application/zip,application/x-rar-compressed",
    Spreadsheets = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-excel,text/csv,application/csv"
}
type FileTypeWithStatus = File & {
    status: 'uploading' | 'success' | 'error';
    progress?: number;
};
type FileTypeWithoutStatus = File & {
    status?: never;
    progress?: never;
};
export type FileType = FileTypeWithStatus | FileTypeWithoutStatus;
type FileUploaderBaseProps = {
    /** Function to save uploaded files */
    uploadCallout: (files: FileType[]) => void;
    /** Allow FileUploader to receive multiple files */
    acceptMultiple?: boolean;
    /** Optionally restrict the types of files that are accepted. If your required type is not specified in the enum MIMETypes, you can add in the necessary strings to the array. */
    acceptedFileTypes?: Array<MIMETypes | string>;
    /** Optionally make the component disabled */
    disabled?: boolean;
};
type WithControlled = FileUploaderBaseProps & {
    /** Optionally allow the files to be in a controlled state */
    controlled: true;
    /** Files to upload */
    files: FileType[];
    /** Function to remove files */
    removeFileCallout: (file: FileType) => void;
};
type WithoutControlled = FileUploaderBaseProps & {
    /** Files to upload */
    files?: FileType[];
    controlled?: never;
    removeFileCallout?: never;
};
type DetermineAsyncType = WithControlled | WithoutControlled;
type WithFormLabelProps = FileUploaderBaseProps & DetermineAsyncType & {
    /** FormLabel component above the upload field */
    formLabelProps: Omit<FormLabelProps, 'rightLabel'>;
    /** Optional download link callout */
    downloadCallout?: () => void;
};
type WithoutFormLabelProps = FileUploaderBaseProps & DetermineAsyncType & {
    formLabelProps?: never;
    downloadCallout?: never;
};
export type FileUploaderProps = WithFormLabelProps | WithoutFormLabelProps;
declare const FileUploader: ({ uploadCallout, files, formLabelProps, downloadCallout, acceptedFileTypes, disabled, acceptMultiple, controlled, removeFileCallout, }: FileUploaderProps) => JSX.Element;
export default FileUploader;
