/**
 * FileUpload component props
 * Supports both click-to-upload and drag-and-drop
 */
export interface FileUploadProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onError'> {
    /**
     * Accepted file types (MIME types or file extensions)
     * @example ["image/*", ".pdf", ".doc"]
     */
    accept?: string | string[];
    /**
     * Whether to allow multiple file selection
     * @default false
     */
    multiple?: boolean;
    /**
     * Maximum file size in bytes
     * @example 5000000 // 5MB
     */
    maxSize?: number;
    /**
     * Maximum number of files (when multiple is true)
     */
    maxFiles?: number;
    /**
     * Whether the upload area is disabled
     * @default false
     */
    disabled?: boolean;
    /**
     * Callback when files are selected/dropped
     */
    onUpload?: (files: File[]) => void;
    /**
     * Callback when files are removed
     */
    onRemove?: (file: File) => void;
    /**
     * Callback when there's an error (invalid file type, size exceeded, etc.)
     */
    onError?: (error: FileUploadError) => void;
    /**
     * Show preview thumbnails for images
     * @default true
     */
    showPreview?: boolean;
    /**
     * Custom upload button text
     * @default "Choose files"
     */
    buttonText?: string;
    /**
     * Custom dropzone helper text
     * @default "or drag and drop"
     */
    helperText?: string;
    /**
     * Helper text displayed below the upload area
     */
    description?: string;
    /**
     * Custom CSS class for the container
     */
    className?: string;
    /**
     * Theme overrides
     */
    theme?: FileUploadThemeOverrides;
}
export interface FileUploadError {
    type: 'file-too-large' | 'file-invalid-type' | 'too-many-files';
    message: string;
    file?: File;
}
export interface UploadedFile {
    file: File;
    preview?: string;
}
export interface FileUploadThemeOverrides {
    containerStyle?: string;
    dropzoneStyle?: string;
    dropzoneActiveStyle?: string;
    dropzoneDisabledStyle?: string;
    contentStyle?: string;
    iconStyle?: string;
    textStyle?: string;
    helperTextStyle?: string;
    descriptionStyle?: string;
    previewContainerStyle?: string;
    previewItemStyle?: string;
    previewImageStyle?: string;
    previewFileStyle?: string;
    removeButtonStyle?: string;
}
