import React from 'react';

interface FileObject {
  url: string;
  size?: number;
  name: string;
}
interface FileUploadProps {
  className?: string;
  allowedFileTypes?: string;
  multipleFilesAllowed?: boolean;
  maxFileSize?: number;
  hasFileSizeLimit?: boolean;
  isPreview?: boolean;
  minFileSize?: number;
  files?: FileObject[];
  onChange?: (files: FileObject[] | []) => void;
  error?: string;
  setError?: (error: string) => void;
  setTouched?: (touched: boolean) => void;
}
interface FormikFileUploadProps extends FileUploadProps {
  name: string;
}
/**
 *
 * The FileUpload component provides an interface for uploading files with
 *
 * drag-and-drop support, real-time previews, and comprehensive error handling. It
 *
 * allows users to configure file types, size limits, and whether multiple files
 *
 * can be uploaded simultaneously.
 *
 * @example 
 *
 * import { useState } from "react";
 * import { FileUpload } from "@bigbinary/neeto-molecules/FileUpload";
 * 
 * const FileUploadComponent = () => {
 *   const [files, setFiles] = useState([]);
 *   const [error, setError] = useState("");
 * 
 *   const handleFileChange = updatedFiles => {
 *     // Perform any custom logic here
 *     setFiles(updatedFiles);
 *   };
 * 
 *   return (
 *     <FileUpload
 *       allowedFileTypes="image/jpeg, image/png"
 *       multipleFilesAllowed={true}
 *       maxFileSize={5} // in MB
 *       minFileSize={1} // in MB
 *       files={files}
 *       onChange={handleFileChange}
 *       error={error}
 *       setError={setError}
 *     />
 *   );
 * };
 * 
 * export default FileUploadComponent;
 * @endexample
 * The FileUpload component wrapped in Formik.
 *
 * @example 
 *
 * import { FormikFileUpload } from "@bigbinary/neeto-molecules/FileUpload";
 * import { Form } from "@bigbinary/neetoui/formik";
 * 
 * const App = () => (
 *   return (
 *     <Form
 *       formikProps={{
 *         initialValues: { files: [] },
 *         onSubmit: handleSubmit,
 *       }}
 *     >
 *       <FormikFileUpload name="files" />
 *     </Form>
 *   );
 * );
 * @endexample
*/
declare const FileUpload: React.FC<FileUploadProps>;
declare const FormikFileUpload: React.FC<FormikFileUploadProps>;

export { FileUpload, FormikFileUpload };
export type { FileUploadProps, FormikFileUploadProps };
