import { ReactNode } from 'react';
import { FileValidationResult } from '../utils/fileValidation';
/**
 * FileUpload component dengan drag and drop, multiple file support,
 * dan validasi mimeType untuk keamanan.
 *
 * @param {string} [label] - Label untuk file upload.
 * @param {string} [title] - Title di dalam dropzone (default: "Unggah File").
 * @param {string} [description] - Description di dalam dropzone.
 * @param {string} [type] - Tipe file yang diizinkan (MIME types, e.g., "image/*,application/pdf").
 * @param {boolean} [multiple] - Apakah bisa upload multiple files (default: false).
 * @param {number} [maxSize] - Ukuran maksimum file dalam bytes (0 = unlimited).
 * @param {boolean} [disabled] - Apakah disabled.
 * @param {string} [className] - ClassName tambahan.
 * @param {(files: File[], errors: FileValidationResult[]) => void} [onChange] - Callback ketika file berubah.
 * @param {(file: File, index: number) => void} [onRemove] - Callback ketika file dihapus.
 */
export type FileUploadStatus = 'idle' | 'uploading' | 'success' | 'error';
export interface UploadedFile {
    file: File;
    status: FileUploadStatus;
    error?: string;
    progress?: number;
}
export interface FileUploadProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'onChange' | 'type' | 'multiple' | 'disabled' | 'className'> {
    /**
     * Label untuk file upload.
     */
    label?: ReactNode;
    /**
     * Title di dalam dropzone.
     */
    title?: string;
    /**
     * Description di dalam dropzone.
     */
    description?: string;
    /**
     * Tipe file yang diizinkan (MIME types, e.g., "image/*,application/pdf").
     */
    type?: string;
    /**
     * Apakah bisa upload multiple files.
     */
    multiple?: boolean;
    /**
     * Ukuran maksimum file dalam bytes (0 = unlimited).
     */
    maxSize?: number;
    /**
     * Ekstensi file yang diizinkan (e.g., ['png', 'jpg', 'pdf']).
     * Jika disediakan, akan divalidasi selain MIME type.
     */
    allowedExtensions?: string[];
    /**
     * Maksimal jumlah file yang bisa diupload (hanya untuk multiple=true).
     */
    maxFiles?: number;
    /**
     * Maksimal ukuran total semua file dalam MB (hanya untuk multiple=true).
     */
    maxTotalSizeMB?: number;
    /**
     * Validasi magic number (file signature) sesuai rekomendasi OWASP.
     * Default: true untuk security maksimal.
     */
    validateMagicNumber?: boolean;
    /**
     * Apakah disabled.
     */
    disabled?: boolean;
    /**
     * ClassName tambahan.
     */
    className?: string;
    /**
     * Callback ketika file berubah.
     */
    onChange?: (files: File[], errors: FileValidationResult[]) => void;
    /**
     * Callback ketika file dihapus.
     */
    onRemove?: (file: File, index: number) => void;
}
export default function FileUpload({ label, title, description, type, multiple, maxSize, allowedExtensions, maxFiles, maxTotalSizeMB, validateMagicNumber, // Default: true sesuai rekomendasi OWASP
disabled, className, onChange, onRemove, ...rest }: FileUploadProps): import("react/jsx-runtime").JSX.Element;
//# sourceMappingURL=FileUpload.d.ts.map