import { ScannedFile } from './types'; /** * File System API type definitions (browser non-standard API) */ declare global { interface FileSystemEntry { readonly isFile: boolean; readonly isDirectory: boolean; readonly name: string; readonly fullPath: string; } interface FileSystemFileEntry extends FileSystemEntry { readonly isFile: true; readonly isDirectory: false; file(successCallback: (file: File) => void, errorCallback?: (error: Error) => void): void; } interface FileSystemDirectoryEntry extends FileSystemEntry { readonly isFile: false; readonly isDirectory: true; createReader(): FileSystemDirectoryReader; } interface FileSystemDirectoryReader { readEntries(successCallback: (entries: FileSystemEntry[]) => void, errorCallback?: (error: Error) => void): void; } interface DataTransferItem { webkitGetAsEntry(): FileSystemEntry | null; } } /** * File Scanner * Scans files from different input sources, supports recursive folder traversal */ export declare class FileScanner { /** * Scan files * @param input Input source * @param onProgress Single file scan callback - called immediately for each scanned file * @param onComplete Scan complete callback - called once with all files and empty folders after scanning */ static scan(input: FileList | File[] | DataTransferItemList, onProgress?: (file: ScannedFile) => void, onComplete?: (files: ScannedFile[], emptyDirs: ScannedFile[]) => void): Promise; /** * Check if input is DataTransferItemList */ private static isDataTransferItemList; /** * Scan DataTransferItemList (drag and drop) * Optimized for parallel directory reading and faster processing */ private static scanDataTransfer; /** * Scan FileList or File[] * For input[type=file] with webkitdirectory, files are already available with paths * No need for async scanning - process synchronously for maximum speed */ private static scanFileList; /** * Read directory contents (with empty directory detection) * Optimized to read all batches in parallel */ private static readDirectoryWithEmpty; /** * Extract directory path */ private static extractDirectory; /** * Get file extension */ private static getExtension; }