UNPKG

uploadzx

Version:

Browser-only TypeScript upload library with tus integration for resumable uploads

219 lines (204 loc) 7.21 kB
import * as react_jsx_runtime from 'react/jsx-runtime'; import { ReactNode } from 'react'; interface UploadFile { id: string; file: File; fileHandle?: FileSystemFileHandle; name: string; size: number; type: string; } interface UploadProgress { fileId: string; bytesUploaded: number; bytesTotal: number; percentage: number; bytesPerSecond: number; } interface UploadState { fileId: string; status: 'pending' | 'uploading' | 'paused' | 'completed' | 'error' | 'cancelled'; progress: UploadProgress; error?: Error; tusUrl?: string; file: File; } interface UploadOptions { endpoint: string; chunkSize?: number; retryDelays?: number[]; metadata?: Record<string, string>; headers?: Record<string, string>; onInit?: () => void; } interface UploadEvents { onProgress?: (progress: UploadProgress) => void; onStateChange?: (state: UploadState) => void; onComplete?: (fileId: string, tusUrl: string) => void; onError?: (fileId: string, error: Error) => void; onCancel?: (fileId: string) => void; } interface FilePickerOptions { accept?: string; multiple?: boolean; useFileSystemAccess?: boolean; } interface StoredFileHandle { id: string; name: string; size: number; type: string; handle: FileSystemFileHandle; lastModified: number; tusUploadUrl?: string; bytesUploaded?: number; } interface TusUploaderOptions { previousUploadUrl?: string; previousBytesUploaded?: number; trackSpeed?: boolean; } interface QueueOptions extends UploadOptions { maxConcurrent?: number; autoStart?: boolean; } declare global { interface DataTransferItem { getAsFileSystemHandle?(): Promise<FileSystemHandle | null>; } } interface UploadzxOptions extends QueueOptions { filePickerOptions?: FilePickerOptions; tusOptions?: TusUploaderOptions; } interface UseUploadzxOptions extends UploadzxOptions { autoStart?: boolean; onProgress?: (progress: any) => void; onStateChange?: (state: UploadState) => void; onComplete?: (fileId: string, tusUrl: string) => void; onError?: (fileId: string, error: Error) => void; onCancel?: (fileId: string) => void; } declare function useUploadzx(options: UseUploadzxOptions): { isInitialized: boolean; uploadStates: Record<string, UploadState>; queueStats: { queueLength: number; activeCount: number; }; unfinishedUploads: StoredFileHandle[]; pickAndUploadFiles: () => Promise<void>; pickFiles: () => Promise<UploadFile[]>; addFiles: (files: UploadFile[]) => Promise<void>; startUploads: () => Promise<void>; pauseAll: () => Promise<void>; resumeAll: () => Promise<void>; cancelAll: () => Promise<void>; pauseUpload: (fileId: string) => Promise<void>; resumeUpload: (fileId: string) => Promise<void>; cancelUpload: (fileId: string) => Promise<void>; getUploadState: (fileId: string) => UploadState | null; getAllStates: () => {}; restoreUnfinishedUpload: (fileHandleOrId: StoredFileHandle | string) => Promise<void>; clearCompletedUploads: () => void; }; declare function useUploadState(fileId: string): UploadState | null; declare function useUploadProgress(uploadStates: Record<string, any>, fileId: string): UploadProgress | null; declare function useFilePicker(options?: FilePickerOptions): { pickFiles: () => Promise<UploadFile[]>; }; declare function useUploadItem(fileId: string): { handlePause: () => void; handleResume: () => void; handleCancel: () => void; canPause: boolean; canResume: boolean; canCancel: boolean; progress: UploadProgress | undefined; }; declare function useQueueActions(): { handlePauseAll: () => void; handleResumeAll: () => void; handleCancelAll: () => void; handlePickFiles: () => void; canPauseAll: boolean; hasActiveUploads: boolean; hasQueuedUploads: boolean; queueStatsText: string; queueStats: { queueLength: number; activeCount: number; }; }; interface UploadzxProviderProps { children: ReactNode; options: UseUploadzxOptions; } declare function UploadzxProvider({ children, options }: UploadzxProviderProps): react_jsx_runtime.JSX.Element; declare function useUploadzxActions(): { pickAndUploadFiles: () => Promise<void>; pickFiles: () => Promise<any[]>; addFiles: (files: any[]) => Promise<void>; startUploads: () => Promise<void>; pauseAll: () => Promise<void>; resumeAll: () => Promise<void>; cancelAll: () => Promise<void>; pauseUpload: (fileId: string) => Promise<void>; resumeUpload: (fileId: string) => Promise<void>; cancelUpload: (fileId: string) => Promise<void>; getUploadState: (fileId: string) => any; getAllStates: () => any; clearCompletedUploads: () => void; restoreUnfinishedUpload: (fileHandleOrId: StoredFileHandle | string) => Promise<void>; }; declare function useUploadzxState(): { isInitialized: boolean; }; declare function useUploadStates(): { uploadStates: Record<string, UploadState>; }; declare function useQueueStats(): { queueStats: { queueLength: number; activeCount: number; }; }; declare function useUnfinishedUploads(): { unfinishedUploads: StoredFileHandle[]; }; /** * @deprecated Use individual hooks instead: useUploadzxActions, useUploadzxState, useUploadStates, useQueueStats, useUnfinishedUploads */ declare function useUploadzxContext(): { uploadStates: Record<string, UploadState>; queueStats: { queueLength: number; activeCount: number; }; unfinishedUploads: StoredFileHandle[]; isInitialized: boolean; pickAndUploadFiles: () => Promise<void>; pickFiles: () => Promise<any[]>; addFiles: (files: any[]) => Promise<void>; startUploads: () => Promise<void>; pauseAll: () => Promise<void>; resumeAll: () => Promise<void>; cancelAll: () => Promise<void>; pauseUpload: (fileId: string) => Promise<void>; resumeUpload: (fileId: string) => Promise<void>; cancelUpload: (fileId: string) => Promise<void>; getUploadState: (fileId: string) => any; getAllStates: () => any; clearCompletedUploads: () => void; restoreUnfinishedUpload: (fileHandleOrId: StoredFileHandle | string) => Promise<void>; }; interface UploadDropzoneProps extends React.HTMLAttributes<HTMLDivElement> { children: ReactNode; onFilesDrop?: (files: UploadFile[]) => void; className?: string; activeClassName?: string; disabled?: boolean; clickable?: boolean; } declare function UploadDropzone({ children, onFilesDrop, className, activeClassName, disabled, clickable, }: UploadDropzoneProps): react_jsx_runtime.JSX.Element; export { type FilePickerOptions, type QueueOptions, type StoredFileHandle, UploadDropzone, type UploadEvents, type UploadFile, type UploadOptions, type UploadProgress, type UploadState, UploadzxProvider, useFilePicker, useQueueActions, useQueueStats, useUnfinishedUploads, useUploadItem, useUploadProgress, useUploadState, useUploadStates, useUploadzx, useUploadzxActions, useUploadzxContext, useUploadzxState };