/**
 * Validate a File against an `accept` attribute string, matching the HTML
 * `<input accept>` attribute format. Client-side filter only — server-side
 * validation is still required.
 *
 * Supported forms (comma-separated, any combination):
 * - `image/*` — MIME wildcard (any image)
 * - `application/pdf` — exact MIME type
 * - `.pdf`, `.docx` — file extension (case-insensitive)
 *
 * Examples:
 * - `matchesAccept(file, "image/*")` — any image
 * - `matchesAccept(file, "image/*,application/pdf")` — images and PDFs
 * - `matchesAccept(file, ".jpg,.jpeg,.png,.heic")` — specific extensions
 * - `matchesAccept(file, "")` — allow all (returns true)
 *
 * Note: users can bypass the file picker's filter (most browsers offer an
 * "All Files" option), so this function is a UX filter, not a security
 * boundary.
 */
export declare function matchesAccept(file: File, accept: string): boolean;
/**
 * Validate a File's size against a maximum byte limit.
 * Returns false if file exceeds `maxSize` bytes.
 * Returns true if `maxSize` is 0 (unlimited).
 */
export declare function validateFileSize(file: File, maxSize: number): boolean;
/**
 * Resolve a MIME type to a Lucide icon symbol name.
 *
 * Mappings:
 * - `image/*` → `'image'`
 * - `video/*` → `'film'`
 * - `audio/*` → `'music'`
 * - document types → `'file'`
 * - everything else → `'upload-cloud'`
 */
export declare function resolveFileSymbol(mimeType: string | undefined): string;
/**
 * Format a byte count to a human-readable file size string.
 *
 * Output format: `"200 KB"`, `"4.2 MB"`, `"16 MB"`, `"1.3 GB"`
 * Uses `l10n()` for unit labels.
 *
 * Thresholds:
 * - 0 bytes → `"< 1 KB"`
 * - < 1 KB → `"< 1 KB"` (sub-KB files render the same)
 * - < 1 MB → whole number KB
 * - < 1 GB → one decimal MB
 * - >= 1 GB → one decimal GB
 */
export declare function formatFileSize(bytes: number): string;
//# sourceMappingURL=upload.d.ts.map