import type { editor } from 'monaco-editor';
import type { Promisable } from 'type-fest';
type MonacoEditor = typeof import('monaco-editor');
type UploadStatus = 'queued' | 'uploading' | 'paused' | 'completed' | 'failed';
export type UploadItem = {
    readonly id: string;
    readonly fileName: string;
    readonly fileSize: number;
    readonly status: UploadStatus;
    readonly progress: number;
    readonly loadedBytes: number;
    readonly totalBytes: number;
    readonly startedAt: number | null;
    readonly completedAt: number | null;
    readonly errorMessage?: string;
};
export type UploadStats = {
    readonly totalFiles: number;
    readonly queuedFiles: number;
    readonly uploadingFiles: number;
    readonly pausedFiles: number;
    readonly failedFiles: number;
    readonly completedFiles: number;
    readonly totalBytes: number;
    readonly uploadedBytes: number;
    readonly progress: number;
    readonly elapsedMs: number;
    readonly speedBytesPerSecond: number;
};
type BookEditorMonacoUploadProgressCallback = (progress: number, stats?: {
    loadedBytes: number;
    totalBytes: number;
}) => void;
type BookEditorMonacoUploadOptions = {
    readonly onProgress?: BookEditorMonacoUploadProgressCallback;
    readonly abortSignal?: AbortSignal;
};
type BookEditorMonacoOnFileUpload = (file: File, options?: BookEditorMonacoUploadOptions | BookEditorMonacoUploadProgressCallback) => Promisable<string>;
type UseBookEditorMonacoUploadsProps = {
    readonly editor: editor.IStandaloneCodeEditor | null;
    readonly monaco: MonacoEditor | null;
    readonly onFileUpload?: BookEditorMonacoOnFileUpload;
};
/**
 * Handles file uploads and placeholder rendering inside `BookEditorMonaco`.
 *
 * @private function of BookEditorMonaco
 */
export declare function useBookEditorMonacoUploads({ editor, monaco, onFileUpload }: UseBookEditorMonacoUploadsProps): {
    activeUploadItems: UploadItem[];
    uploadItems: UploadItem[];
    uploadStats: UploadStats;
    handleFiles: (files: File[]) => Promise<void>;
    pauseUpload: (uploadId: string) => void;
    resumeUpload: (uploadId: string) => void;
};
export {};
