import { CSSProperties, FC, HTMLAttributes, InputHTMLAttributes, ReactElement } from 'react' import { SvgIconProps } from '@mui/material' import { Theme } from '@mui/material/styles' import type { Accept, DropzoneOptions } from 'react-dropzone' export interface InputContainerProps extends HTMLAttributes { theme?: Theme isDragAccept: boolean isDragReject: boolean isFocused: boolean } export interface DropzoneTextProps extends HTMLAttributes { hasError?: boolean } export interface BaseDropzoneProps { accept: Accept onRemove: (index?: number) => void actionText?: string subTitle?: string maxFileSize?: number DropzoneOptions?: Partial InputProps?: InputHTMLAttributes title?: string | ReactElement includeActionButton: boolean InputContainerStyle?: CSSProperties multiple?: boolean onFileClick?: (selectedFile: string | File | Blob, index?: number) => void DropzonePreview?: FC DropzonePreviewProps?: Partial DropZoneIcon?: FC DropZoneIconProps?: Partial DropZoneCancelIcon?: FC DropZoneCancelIconProps?: Partial } export interface DropzoneAsSingleBase64Props extends BaseDropzoneProps { multiple?: false asBase64: true storedImg?: string onSelect: (file: string) => void } export interface DropzoneAsSingleFileProps extends BaseDropzoneProps { multiple?: false asBase64?: false storedImg?: File | Blob onSelect: (file: File | Blob) => void } export interface DropzoneAsMultipleBase64Props extends BaseDropzoneProps { multiple: true asBase64: true storedImg?: string[] onSelect: (files: string[]) => void } export interface DropzoneAsMultipleFileProps extends BaseDropzoneProps { multiple: true asBase64?: false storedImg?: (File | Blob)[] onSelect: (files: (File | Blob)[]) => void } export interface DropzonePreviewProps { isMini?: boolean handleRemoveFile: () => void file: string | File | Blob onFileClick?: (selectedFile: string | File | Blob) => void } export type DropzoneProps = | DropzoneAsSingleBase64Props | DropzoneAsSingleFileProps | DropzoneAsMultipleBase64Props | DropzoneAsMultipleFileProps