import { InjectionToken } from '@angular/core';
import { Observable } from 'rxjs';
import { HttpEvent } from '@angular/common/http';
/**
 * @description Injection token for providing a custom upload manager service.
 *
 * Use this token to register a service that implements `QdFileUploadManager`
 * via Angular’s dependency injection mechanism.
 *
 * ```ts
 * providers: [
 *   {
 *     provide: QD_FILE_UPLOAD_MANAGER_TOKEN,
 *     useClass: MyUploadManager
 *   }
 * ]
 * ```
 */
export declare const QD_FILE_UPLOAD_MANAGER_TOKEN: InjectionToken<QdFileUploadManager>;
/**
 * @description Interface that defines a custom upload manager used by QdFileUpload.
 *
 * Implement this interface to control how files are uploaded to your backend.
 * The service must return an Observable stream of `HttpEvent` to support progress tracking.
 */
export interface QdFileUploadManager {
    /**
     * @description Handles the file upload and returns an Observable stream of upload events.
     *
     * @param file The file to be uploaded
     * @returns Observable of `HttpEvent` to report upload progress and completion
     */
    upload(file: File): Observable<HttpEvent<unknown>>;
}
/**
 * @description Default HTTP options required for progress tracking during file uploads.
 *
 * Use this constant to configure Angular’s `HttpClient` so that `HttpEventType.UploadProgress` events
 * are emitted and can be used to visualize upload progress.
 *
 * ```ts
 * return this.http.post('/upload', formData, QD_UPLOAD_HTTP_OPTIONS);
 * ```
 */
export declare const QD_UPLOAD_HTTP_OPTIONS: {
    readonly reportProgress: true;
    readonly observe: "events";
};
/**
 * @description Internal upload states used by the QdFileUploadComponent.
 */
export declare enum QdUploadState {
    /** No file selected or reset */
    IDLE = 0,
    /** Upload is in progress */
    UPLOADING = 1,
    /** Upload has completed successfully */
    UPLOADED = 2,
    /** Upload failed */
    ERROR = 3
}
/**
 * @description Represents the current upload status including progress and file metadata.
 */
export interface QdFileUpload {
    /**
     * @description Current upload progress in percent (0–100)
     */
    progress: number;
    /**
     * @description Metadata of the uploaded file
     */
    file: {
        /**
         * @description File name
         */
        name: string;
        /**
         * @description File size in bytes
         */
        size: number;
        /**
         * @description MIME type of the file
         */
        type: string;
    };
    /**
     * @description Optional error message if the upload failed
     */
    error?: string;
}
//# sourceMappingURL=file-upload.model.d.ts.map