import { type EventEmitter } from "../../stencil-public-runtime";
interface UploadTask {
    file: File;
    progress: number;
    intervalId: number | null;
    completed: boolean;
    error?: boolean;
}
export type FileUploadErrorReason = "network-error" | "timeout" | "file-too-large" | "unsupported-type" | "invalid-type" | "custom" | (string & {});
export declare class FileUpload {
    hostElement: HTMLIfxFileUploadElement;
    readonly dragAndDrop: boolean;
    readonly required: boolean;
    readonly disabled: boolean;
    readonly maxFileSizeMB: number;
    /** Default set of allowed file extensions (used internally). Can be extended using `additionalAllowedFileTypes`. */
    readonly allowedFileTypes?: string | string[];
    readonly additionalAllowedFileTypes?: string | string[];
    /** When set to true, allows any file type to be uploaded (no file type restrictions). */
    readonly allowAnyFileType: boolean;
    /** Custom file extensions to allow (e.g., 'xml', 'asc', 'cfg'). Recommended format: without dots. Also accepts format with dots like '.xml'. Do not use wildcards like '*.xml'. */
    readonly allowedFileExtensions?: string | string[];
    readonly uploadHandler?: (file: File, onProgress?: (progress: number) => void) => Promise<void>;
    private _maxFiles?;
    get maxFiles(): number | undefined;
    set maxFiles(value: number | undefined);
    readonly label: string;
    readonly labelRequiredError: string;
    readonly labelBrowseFiles: string;
    readonly labelDragAndDrop: string;
    readonly labelUploadedFilesHeading: string;
    readonly labelFileTooLarge: string;
    readonly labelUnsupportedFileType: string;
    readonly labelUploaded: string;
    readonly labelUploadFailed: string;
    readonly labelSupportedFormatsTemplate: string;
    readonly labelFileSingular: string;
    readonly labelFilePlural: string;
    readonly labelMaxFilesInfo?: string;
    readonly labelMaxFilesExceeded: string;
    readonly ariaLabelBrowseFiles: string;
    readonly ariaLabelDropzone: string;
    readonly ariaLabelFileInput: string;
    readonly ariaLabelRemoveFile: string;
    readonly ariaLabelCancelUpload: string;
    readonly ariaLabelRetryUpload: string;
    readonly ariaLabelUploadingStatus: string;
    readonly ariaLabelUploadedStatus: string;
    readonly ariaLabelUploadFailedStatus: string;
    private showDemoStates?;
    private internalId;
    isDragOver: boolean;
    files: File[];
    uploadTasks: UploadTask[];
    rejectedSizeFiles: string[];
    rejectedTypeFiles: string[];
    requiredError: boolean;
    statusMessage: {
        type: "error" | "info" | "success";
        text: string;
    } | null;
    ifxFileUploadAdd: EventEmitter<{
        addedFiles: File[];
        files: File[];
    }>;
    ifxFileUploadRemove: EventEmitter<{
        removedFile: File;
        files: File[];
    }>;
    ifxFileUploadChange: EventEmitter<{
        files: File[];
    }>;
    ifxFileUploadError: EventEmitter<{
        errorType: string;
        file: File;
        message: string;
        reason?: string;
    }>;
    ifxFileUploadInvalid: EventEmitter<{
        file: File;
        reason: string;
    }>;
    ifxFileUploadStart: EventEmitter<{
        file: File;
    }>;
    ifxFileUploadComplete: EventEmitter<{
        file: File;
    }>;
    ifxFileUploadAllComplete: EventEmitter<{
        files: File[];
    }>;
    ifxFileUploadAbort: EventEmitter<{
        file: File;
    }>;
    ifxFileUploadDrop: EventEmitter<{
        droppedFiles: File[];
        acceptedFiles: File[];
        rejectedFiles: File[];
    }>;
    ifxFileUploadClick: EventEmitter<void>;
    ifxFileUploadMaxFilesExceeded: EventEmitter<{
        maxFiles: number;
        attempted: number;
    }>;
    ifxFileUploadValidation: EventEmitter<{
        valid: boolean;
    }>;
    ifxFileUploadRetry: EventEmitter<{
        file: File;
    }>;
    private fileInputEl;
    private extensionToMimeMap;
    private validateRequired;
    private pluralize;
    private getNormalizedFileTypes;
    private getNormalizedFileExtensions;
    /**
     * Enhanced file type validation that supports:
     * - allowAnyFileType flag for unrestricted uploads (overrides all restrictions)
     * - allowedFileTypes (predefined extensions mapped to MIME types) - if not set and allowedFileExtensions is set, ignored
     * - additionalAllowedFileTypes (MIME types)
     * - allowedFileExtensions (custom extensions) - if only this is set, only these extensions are allowed
     */
    private isFileTypeAllowed;
    /**
     * Extracts file extension from filename (without dot)
     */
    private getFileExtension;
    private getLabelFromMimeType;
    private handleFileChange;
    private handleDrop;
    private handleDragOver;
    private handleDragLeave;
    private processFiles;
    private retryUpload;
    private checkAndEmitAllComplete;
    private resetFileInput;
    private updateTaskProgress;
    private startUpload;
    private cancelUpload;
    private removeFile;
    private clearRejectedFile;
    private splitFileNameParts;
    private getFileIcon;
    private formatSize;
    private getAcceptAttribute;
    private getFormattedProgressText;
    private getAdditionalMimeTypes;
    private getSupportedFileText;
    private getFormattedFileTooLargeText;
    private renderStatusMessage;
    private isInputDisabled;
    componentDidLoad(): Promise<void>;
    injectDemoState(): Promise<void>;
    triggerDemoValidation(): Promise<void>;
    render(): any;
    private renderUploadArea;
    private renderDragAndDropArea;
}
export {};
