/** biome-ignore-all lint/a11y/useSemanticElements: FileUploadArea uses div with role="button", tabIndex, and full keyboard support for custom drag-drop styling */
import { type VariantProps } from 'class-variance-authority';
import { type FileExtension } from '@/components/molecules/files/FileTypeIcon';
declare const fileUploadAreaVariants: (props?: ({
    state?: "disabled" | "default" | "hover" | null | undefined;
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
export interface FileUploadAreaProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onDrop'>, VariantProps<typeof fileUploadAreaVariants> {
    /** Text for the click action */
    clickText?: string;
    /** Text for drag and drop hint */
    dragText?: string;
    /** Supporting text showing accepted formats */
    supportingText?: string;
    /** Whether the upload area is disabled */
    disabled?: boolean;
    /** Callback when files are dropped or selected */
    onFilesSelected?: (files: FileList) => void;
    /** Accept attribute for file input */
    accept?: string;
    /** Whether multiple files can be selected */
    multiple?: boolean;
}
declare const FileUploadArea: import("react").ForwardRefExoticComponent<FileUploadAreaProps & import("react").RefAttributes<HTMLDivElement>>;
declare const fileUploadItemVariants: (props?: ({
    progressType?: "fill" | "bar" | "compact" | null | undefined;
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
export type FileUploadStatus = 'uploading' | 'complete' | 'error' | 'disabled' | 'cloud';
export interface FileUploadItemProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'>, VariantProps<typeof fileUploadItemVariants> {
    /** File name to display */
    fileName: string;
    /** File size string (e.g., "200 KB", "16 MB") */
    fileSize?: string;
    /** File extension for icon display */
    fileExtension?: FileExtension | string;
    /** Upload progress (0-100) */
    progress?: number;
    /** Upload status */
    status?: FileUploadStatus;
    /** Type of progress indicator: bar, fill (default), or compact (100x100 square) */
    progressType?: 'bar' | 'fill' | 'compact';
    /** Custom element to render next to the title (e.g., badge, tag, icon) */
    titleAddon?: React.ReactNode;
    /** Called when delete/cancel is clicked */
    onRemove?: () => void;
    /** Called when cancel is clicked (during upload) */
    onCancel?: () => void;
    /** Called when retry is clicked (on error) */
    onRetry?: () => void;
    /** Custom actions to render (replaces default RemoveButton when provided) */
    actions?: React.ReactNode;
}
declare const FileUploadItem: import("react").ForwardRefExoticComponent<FileUploadItemProps & import("react").RefAttributes<HTMLDivElement>>;
export interface UploadFile {
    id: string;
    name: string;
    size: string;
    extension?: FileExtension;
    progress: number;
    status: FileUploadStatus;
}
export interface FileUploadProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {
    /** Files in the upload queue */
    files?: UploadFile[];
    /** Type of progress indicator for file items */
    progressType?: 'bar' | 'fill';
    /** Props for the upload area */
    areaProps?: Omit<FileUploadAreaProps, 'onFilesSelected'>;
    /** Called when files are selected */
    onFilesSelected?: (files: FileList) => void;
    /** Called when a file is removed */
    onFileRemove?: (fileId: string) => void;
    /** Called when a file upload is cancelled */
    onFileCancel?: (fileId: string) => void;
}
declare const FileUpload: import("react").ForwardRefExoticComponent<FileUploadProps & import("react").RefAttributes<HTMLDivElement>>;
export { FileUpload, FileUploadArea, FileUploadItem, fileUploadAreaVariants, fileUploadItemVariants, };
